From c5dd72609ca363ba41242002887e3ef9d3cfe1f8 Mon Sep 17 00:00:00 2001 From: Mridul Date: Tue, 2 Oct 2018 11:48:54 +0530 Subject: [PATCH 1/3] CDC-118: Fixed layout breaking whenever a particular placeholder's show configuration was set to false --- dist/muze.js | 2 +- dist/muze.js.map | 2 +- examples/index.html | 2 +- examples/js/sample.js | 369 ++++++++++-------- packages/layout/src/grid-layout/renderer.js | 2 +- packages/muze/npm/dist/muze.js | 2 +- packages/muze/npm/dist/muze.js.map | 2 +- packages/muze/src/canvas/layout-maker.js | 92 +---- .../src/group-helper/cell-creator.js | 5 +- .../src/group-helper/group-utils.js | 5 +- .../src/group-helper/matrix-resolver.js | 16 +- .../src/visual-group/change-listener.js | 2 +- 12 files changed, 231 insertions(+), 270 deletions(-) diff --git a/dist/muze.js b/dist/muze.js index 0030fd46..79814fb1 100644 --- a/dist/muze.js +++ b/dist/muze.js @@ -1,2 +1,2 @@ -!function webpackUniversalModuleDefinition(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define("muze",[],t):"object"==typeof exports?exports.muze=t():e.muze=t()}(window,function(){return function(e){var t={};function __webpack_require__(n){if(t[n])return t[n].exports;var r=t[n]={i:n,l:!1,exports:{}};return e[n].call(r.exports,r,r.exports,__webpack_require__),r.l=!0,r.exports}return __webpack_require__.m=e,__webpack_require__.c=t,__webpack_require__.d=function(e,t,n){__webpack_require__.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},__webpack_require__.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},__webpack_require__.t=function(e,t){if(1&t&&(e=__webpack_require__(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(__webpack_require__.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var r in e)__webpack_require__.d(n,r,function(t){return e[t]}.bind(null,r));return n},__webpack_require__.n=function(e){var t=e&&e.__esModule?function getDefault(){return e.default}:function getModuleExports(){return e};return __webpack_require__.d(t,"a",t),t},__webpack_require__.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},__webpack_require__.p="",__webpack_require__(__webpack_require__.s=7)}([function(e,t,n){(function(e){var r,i,a,o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};!function(n,u){"object"==o(t)&&"object"==o(e)?e.exports=u():(i=[],void 0===(a="function"==typeof(r=u)?r.apply(t,i):r)||(e.exports=a))}(window,function(){return function(e){var t={};function n(r){if(t[r])return t[r].exports;var i=t[r]={i:r,l:!1,exports:{}};return e[r].call(i.exports,i,i.exports,n),i.l=!0,i.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==(void 0===e?"undefined":o(e))&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var i in e)n.d(r,i,function(t){return e[t]}.bind(null,i));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=1)}([function(e){e.exports={name:"datamodel",description:"Relational algebra compliant in-memory tabular data store",homepage:"https://github.com/chartshq/datamodel",version:"2.0.2",license:"MIT",main:"dist/datamodel.js",author:"Charts.com ",keywords:["datamodel","data","relational","algebra","model","muze","fusioncharts","table","tabular","operation"],repository:{type:"git",url:"https://github.com/chartshq/datamodel.git"},contributors:[{name:"Akash Goswami",email:"akash@charts.com"},{name:"Subhash Haldar",email:"subhash@charts.com"},{name:"Rousan Ali",email:"rousan@charts.com",url:"https://rousan.io"},{name:"Ujjal Kumar Dutta",email:"ujjal@charts.com"}],dependencies:{"d3-dsv":"^1.0.8"},devDependencies:{"babel-cli":"6.26.0","babel-core":"^6.26.3","babel-eslint":"6.1.2","babel-loader":"^7.1.4","babel-plugin-transform-runtime":"^6.23.0","babel-preset-env":"^1.7.0","babel-preset-es2015":"^6.24.1","babel-preset-flow":"^6.23.0",chai:"3.5.0","cross-env":"^5.0.5",eslint:"3.19.0","eslint-config-airbnb":"15.1.0","eslint-plugin-import":"2.7.0","eslint-plugin-jsx-a11y":"5.1.1","eslint-plugin-react":"7.3.0","istanbul-instrumenter-loader":"^3.0.0",jsdoc:"3.5.5",json2yaml:"^1.1.0",karma:"1.7.1","karma-chai":"0.1.0","karma-chrome-launcher":"2.1.1","karma-coverage-istanbul-reporter":"^1.3.0","karma-mocha":"1.3.0","karma-spec-reporter":"0.0.31","karma-webpack":"2.0.3",marked:"^0.5.0",mocha:"3.4.2","mocha-webpack":"0.7.0","transform-runtime":"0.0.0",webpack:"^4.12.0","webpack-cli":"^3.0.7","webpack-dev-server":"^3.1.4"},scripts:{test:"npm run lint && npm run ut",ut:"karma start karma.conf.js",utd:"karma start --single-run false --browsers Chrome karma.conf.js ",build:"webpack --mode production",start:"webpack-dev-server --config webpack.config.dev.js --mode development --open",lint:"eslint ./src","lint-errors":"eslint --quiet ./src",docs:"rm -rf yaml && mkdir yaml && jsdoc -c jsdoc.conf.json"}}},function(e,t,n){var r=n(2);e.exports=r.default?r.default:r},function(n,c,f){"use strict";f.r(c);var p={};f.r(p),f.d(p,"DataFormat",function(){return b}),f.d(p,"DimensionSubtype",function(){return _}),f.d(p,"MeasureSubtype",function(){return C}),f.d(p,"FieldType",function(){return P}),f.d(p,"FilteringMode",function(){return A});var y={};f.r(y),f.d(y,"DSVArr",function(){return Je}),f.d(y,"DSVStr",function(){return lt}),f.d(y,"FlatJSON",function(){return ft}),f.d(y,"Auto",function(){return ht});var g={};f.r(g),f.d(g,"sum",function(){return Et}),f.d(g,"avg",function(){return Mt}),f.d(g,"min",function(){return Ot}),f.d(g,"max",function(){return Tt}),f.d(g,"first",function(){return Ft}),f.d(g,"last",function(){return Nt}),f.d(g,"count",function(){return jt}),f.d(g,"sd",function(){return It});var b={FLAT_JSON:"FlatJSON",DSV_STR:"DSVStr",DSV_ARR:"DSVArr",AUTO:"Auto"},_={CATEGORICAL:"categorical",TEMPORAL:"temporal",GEO:"geo"},C={DISCRETE:"discrete"},P={MEASURE:"measure",DIMENSION:"dimension"},A={NORMAL:"normal",INVERSE:"inverse",ALL:"all"};function l(e,t){e.length>0&&e.split(",").forEach(function(e){var n=e.split("-"),r=+n[0],i=+(n[1]||n[0]);if(i>=r)for(var a=r;a<=i;a+=1)t(a)})}var O=function(){function e(e,t){for(var n=0;n=0;)o=e[a+1],-1!==r.indexOf(o)&&i.push({index:a,token:o});return i},m.formatAs=function(e,t){var n,r=h(e),i=m.findTokens(t),a=m.getTokenDefinitions(),o=String(t),u=m.TOKEN_PREFIX,c=void 0,s=void 0,l=void 0;for(l=0,n=i.length;l=0;h--)(s=a[h].index)+1!==f.length-1?(void 0===u&&(u=f.length),l=f.substring(s+2,u),f=f.substring(0,s+2)+RegExp.escape(l)+f.substring(u,f.length),u=s):u=s;for(h=0;h1){r=Math.abs(n[1]-n[0]);for(var i=2,a=n.length;i3&&void 0!==arguments[3]&&arguments[3],i=arguments.length>4&&void 0!==arguments[4]?arguments[4]:ye.CROSS,a=[],o=[],u=n||K,c=e.getFieldspace(),s=t.getFieldspace(),f=c.name,h=s.name,d=c.name+"."+s.name,p=L(c,s);if(f===h)throw new Error("DataModels must have different alias names");return c.fields.forEach(function(e){var t=E({},e.schema);-1===p.indexOf(t.name)||r||(t.name=c.name+"."+t.name),a.push(t)}),s.fields.forEach(function(e){var t=E({},e.schema);-1!==p.indexOf(t.name)?r||(t.name=s.name+"."+t.name,a.push(t)):a.push(t)}),l(e._rowDiffset,function(e){var n=!1,d=void 0;l(t._rowDiffset,function(t){var l=[],y={};y[f]={},y[h]={},c.fields.forEach(function(t){l.push(t.data[e]),y[f][t.name]=t.data[e]}),s.fields.forEach(function(e){-1!==p.indexOf(e.schema.name)&&r||l.push(e.data[t]),y[h][e.name]=e.data[t]});var g=Ke(y[f]),v=Ke(y[h]);if(u(g,v)){var m={};l.forEach(function(e,t){m[a[t].name]=e}),n&&ye.CROSS!==i?o[d]=m:(o.push(m),n=!0,d=e)}else if((i===ye.LEFTOUTER||i===ye.RIGHTOUTER)&&!n){var b={},_=c.fields.length-1;l.forEach(function(e,t){b[a[t].name]=t<=_?e:null}),n=!0,d=e,o.push(b)}})}),new At(o,a,{name:d})}function z(e,t){var n=""+e,r=""+t;return nr?1:0}function X(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:z;return e.length>1&&function e(t,n,r,i){if(r===n)return t;var a=n+Math.floor((r-n)/2);return e(t,n,a,i),e(t,a+1,r,i),function(e,t,n,r,i){for(var a=e,o=[],u=t;u<=r;u+=1)o[u]=a[u];for(var c=t,s=n+1,l=t;l<=r;l+=1)c>n?(a[l]=o[s],s+=1):s>r?(a[l]=o[c],c+=1):i(o[c],o[s])<=0?(a[l]=o[c],c+=1):(a[l]=o[s],s+=1)}(t,n,a,r,i),t}(e,0,e.length-1,t),e}function Q(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);to?"desc"===t?-1:1:0}}return i}function Z(e,t){var n=new Map,r=[];return e.forEach(function(e){var i=e[t];n.has(i)?r[n.get(i)][1].push(e):(r.push([i,[e]]),n.set(i,r.length-1))}),r}function ee(e,t,n){var r={label:e[0]};return t.reduce(function(t,r,i){return t[r]=e[1].map(function(e){return e[n[i].index]}),t},r),r}function ne(e,t){var n={},r=[],i=[],a=[],o=e.getFieldspace(),u=t.getFieldspace(),c=o.fieldsObj(),s=u.fieldsObj(),f=o.name+" union "+u.name;if(!M(e._colIdentifier.split(",").sort(),t._colIdentifier.split(",").sort()))return null;function d(e,t,r){l(e._rowDiffset,function(e){var o={},u="";i.forEach(function(n){var r=t[n].data[e];u+="-"+r,o[n]=r}),n[u]||(r&&a.push(o),n[u]=!0)})}return e._colIdentifier.split(",").forEach(function(e){var t=c[e];r.push(E({},t.schema)),i.push(t.schema.name)}),d(t,s,!1),d(e,c,!0),new At(a,r,{name:f})}function re(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);tn&&(n=e)}),[t,n]}(this.data)}},{key:"parse",value:function value(e){return e=parseFloat(e,10),Number.isNaN(e)?null:e}},{key:"unit",value:function value(){return this.fieldUnit}},{key:"scale",value:function value(){return this.fieldScale}},{key:"numberFormat",value:function value(){var e=this.fieldNumberformat;return function(t){return e(t)}}},{key:"defAggFn",value:function value(){return this.fieldDefAggFn}}]),t}(),Ee=function(){function e(e,t){for(var n=0;n=a?c=!0:(r=e.charCodeAt(o++))===at?l=!0:r===ot&&(l=!0,e.charCodeAt(o)===at&&++o),e.slice(i+1,t-1).replace(/""/g,'"')}for(;o2&&void 0!==arguments[2]?arguments[2]:{},i=arguments[3],a=void 0;t!==fe?(a={op:t,meta:r,criteria:i},e._derivation.push(a)):(a=[].concat(Ge(i)),e._derivation.length=0,(n=e._derivation).push.apply(n,Ge(a)))},yt=function ze(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=n.operation||"and",i=n.filterByMeasure||!1,a=[];a=t.length?t.map(function(e){return function(e){var t=e.getData(),n=t.schema,r=e.getFieldsConfig(),a=e.getFieldspace().fieldsObj(),o=t.data,u=Object.values(r).reduce(function(e,t){return e[t.def.name]=a[t.def.name].domain(),e},{});return function(e){return!!o.length&&o.some(function(t){return n.every(function(n){if(!(n.name in e))return!0;var a=e[n.name].valueOf();if(i&&n.type===P.MEASURE)return a>=u[n.name][0]&&a<=u[n.name][1];if(n.type!==P.DIMENSION)return!0;var o=r[n.name].index;return t[o]===e[n.name].valueOf()})})}}(e)}):[function(){return!1}];return"and"===r?e.clone(!1,!1).select(function(e){return a.every(function(t){return t(e)})},{saveChild:!1,mode:A.ALL}):e.clone(!1,!1).select(function(e){return a.some(function(t){return t(e)})},{mode:A.ALL,saveChild:!1})},gt=function Xe(e,t,n,r){var i=e.clone(r.saveChild),a=function(e,t,n,r){var i=[],a=-1,o=void 0,c=function u(e){return n(qe(t,e),e)};return r.mode===A.INVERSE&&(c=function u(e){return!n(qe(t,e))}),l(e,function(e){c(e)&&(-1!==a&&e===a+1?(o=i.length-1,i[o]=i[o].split("-")[0]+"-"+e):i.push(""+e),a=e)}),i.join(",")}(i._rowDiffset,i.getPartialFieldspace().fields,t,n);return i._rowDiffset=a,i.__calculateFieldspace().calculateFieldsConfig(),r.saveChild&&pt(i,ce,{config:n},t),i},vt=function Qe(e,t,n,r){var i=e.clone(n.saveChild),a=t;return n.mode===A.INVERSE&&(a=r.filter(function(e){return-1===t.indexOf(e)})),i._colIdentifier=a.join(","),i.__calculateFieldspace().calculateFieldsConfig(),n.saveChild&&pt(i,se,{projField:t,config:n,actualProjField:a},null),i},mt=function $e(e,t,n,r){r=Object.assign(Object.assign({},Ze),r);var i=y[r.dataFormat];if(!i||"function"!=typeof i)throw new Error("No converter function found for "+r.dataFormat+" format");var a=i(t,r),o=dt(a,2),u=o[0],c=o[1],s=Ue(c,n,u),l=Y.createNamespace(s,r.name);return e._partialFieldspace=l,e._rowDiffset=c.length&&c[0].length?"0-"+(c[0].length-1):"",e._colIdentifier=n.map(function(e){return e.name}).join(),e},bt=function Ze(e,t){for(var n=0;n2&&void 0!==arguments[2]?arguments[2]:{},i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},a=i.nonTraversingModel,o=i.excludeModels||[];t!==a&&((!o.length||-1===o.indexOf(t))&&t.handlePropagation(n,r),t._children.forEach(function(t){var a=_t(n,t),o=dt(a,2),u=o[0],c=o[1];e(t,[u,c],r,i)}))},wt=function nt(e,t,n,r){var i=void 0,a=void 0,o=n.propagationNameSpace,u=n.propagateToSource,c=n.sourceId,s=r.propagateInterpolatedValues,l=[];if(null===e&&!0!==r.persistent)l=[{criteria:[]}];else{var f,h=Object.values(o.mutableActions);!1!==u&&(h=h.filter(function(e){return e.config.sourceId!==c}));var d=h.filter(function(e){return(r.filterFn||function(){return!0})(e,r)}).map(function(e){return e.config.criteria}),p=[];if(!1!==u){var y=Object.values(o.mutableActions);y.forEach(function(e){var t=e.config;!1===t.applyOnSource&&t.action===r.action&&t.sourceId!==c&&(p.push(e.model),(i=y.filter(function(t){return t!==e}).map(function(e){return e.config.criteria})).length&&l.push({criteria:i,models:e.model,path:function e(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];return null!==t._parent&&(n.push(t),e(t._parent,n)),n}(e.model)}))})}i=(f=[]).concat.apply(f,[].concat(Ge(d),[e])).filter(function(e){return null!==e}),l.push({criteria:i,excludeModels:[].concat(p,Ge(r.excludeModels||[]))})}var g=t.model,v=Object.assign({sourceIdentifiers:e,propagationSourceId:c},r),m=t.groupByModel;s&&m&&(a=yt(m,i,{filterByMeasure:s}),xt(m,a,v)),l.forEach(function(e){var t=yt(g,e.criteria),n=e.path;if(n){var r=function(e,t){for(var n=0,r=t.length;n0&&void 0!==arguments[0])||arguments[0],t=void 0;if(!1===(!(arguments.length>1&&void 0!==arguments[1])||arguments[1])){var n=this.getData({getAllFields:!0}),r=n.data,i=n.schema,a=r.map(function(e){var t={};return i.forEach(function(n,r){t[n.name]=e[r]}),t});t=new this.constructor(a,i)}else t=new this.constructor(this);return e&&this._children.push(t),t}},{key:"project",value:function value(e,t){var n={mode:A.NORMAL,saveChild:!0};t=Object.assign({},n,t);var r=this.getFieldsConfig(),i=Object.keys(r),a=t.mode,o=e.reduce(function(e,t){return"RegExp"===t.constructor.name?e.push.apply(e,function(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t1&&void 0!==arguments[1]?arguments[1]:[];pt(this,fe,null,t),this._parent=e,e._children.push(this)}}]),e}(),St=function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function(e,t){var n=[],r=!0,i=!1,a=void 0;try{for(var o,u=e[Symbol.iterator]();!(r=(o=u.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){i=!0,a=e}finally{try{!r&&u.return&&u.return()}finally{if(i)throw a}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")},Pt=function(){function e(e,t){for(var n=0;n0,c=[];if(n.split(",").forEach(function(t){for(var n=0;n=0;u--)i=t[u][0],a=t[u][1],(o=bt(r,i))&&(S(a)?X(n,function(e,t){return a(e[o.index],t[o.index])}):j(a)?function(){var e=Z(n,o.index),t=a[a.length-1],i=a.slice(0,a.length-1),u=i.map(function(e){return bt(r,e)});e.forEach(function(e){e.push(ee(e,i,u))}),X(e,function(e,n){var r=e[2],i=n[2];return t(r,i)}),n.length=0,e.forEach(function(e){n.push.apply(n,Q(e[1]))})}():(a="desc"===String(a).toLowerCase()?"desc":"asc",X(n,$(o.type,a,o.index))));e.uids=[],n.forEach(function(t){e.uids.push(t.pop())})}(a,r),i.columnWise){var s=Array.apply(void 0,Q(Array(a.schema.length))).map(function(){return[]});a.data.forEach(function(e){e.forEach(function(e,t){s[t].push(e)})}),a.data=s}return a}.call(this,this.getPartialFieldspace().fields,this._rowDiffset,e.getAllFields?t.map(function(e){return e.name}).join():this._colIdentifier,e.sort,{columnWise:"column"===e.order,addUid:!!e.withUid});if(!e.formatter)return n;var r=e.formatter,i=n.data,a=n.schema,o=n.uids,u=a.map(function(e){return e.name}),c=Object.keys(r).reduce(function(e,t){var n=u.indexOf(t);return-1!==n&&e.push([n,r[t]]),e},[]);return"column"===e.order?c.forEach(function(e){var t=e[0],n=e[1];i[t].forEach(function(e,r){i[t][r]=n.call(void 0,e,o[r],a[t])})}):i.forEach(function(e,t){c.forEach(function(n){var r=n[0],i=n[1];e[r]=i.call(void 0,e[r],o[t],a[r])})}),n}},{key:"groupBy",value:function value(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{saveChild:!0},r=""+e.join(),i=function de(e,t,n,r){var i=function(e,t){var n=[],r=e.getPartialFieldspace(),i=r.getDimension(),a=r.getMeasure();return Object.entries(i).forEach(function(e){var r=ke(e,1)[0];t&&t.length?-1!==t.indexOf(r)&&n.push(r):n.push(r)}),Object.entries(a).forEach(function(e){var r=ke(e,1)[0];"discrete"===a[r].subType()&&(t&&t.length?-1!==t.indexOf(r)&&n.push(r):n.push(r))}),n}(e,t),a=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n={},r=t,i=e.getPartialFieldspace().getMeasure(),a=we.defaultReducer();return"function"==typeof t&&(a=t),Object.entries(i).forEach(function(e){var o=ke(e,1)[0];"string"==typeof t[o]&&(r[o]=we.resolve(r[o])?we.resolve(r[o]):a),"function"!=typeof t[o]&&(r[o]=void 0),n[o]=r[o]||we.resolve(i[o].defAggFn())||a}),n}(e,n),o=e.getPartialFieldspace(),u=o.fieldsObj(),c=o.name,s=[],f=[],h=[],d={},p=[],y=void 0;Object.entries(u).forEach(function(e){var t=ke(e,2),n=t[0],r=t[1];(-1!==i.indexOf(n)||a[n])&&(h.push(E({},r.schema)),"measure"===r.schema.type&&"discrete"!==r.schema.subtype?f.push(n):"dimension"!==r.schema.type&&"discrete"!==r.schema.subtype||s.push(n))});var g=0;return l(e._rowDiffset,function(e){var t="";s.forEach(function(n){t=t+"-"+u[n].data[e]}),void 0===d[t]?(d[t]=g,p.push({}),s.forEach(function(t){p[g][t]=u[t].data[e]}),f.forEach(function(t){p[g][t]=[u[t].data[e]]}),g+=1):f.forEach(function(n){p[d[t]][n].push(u[n].data[e])})}),p.forEach(function(e){var t=e;f.forEach(function(n){t[n]=a[n](e[n])})}),r?(r.__calculateFieldspace(),y=r):y=new Lt(p,h,{name:c}),y}.apply(void 0,[this,e,t]);return n.saveChild&&(this._children.push(i),pt(i,le,{fieldsArr:e,groupByString:r,defaultReducer:we.defaultReducer()},t)),i._parent=this,i}},{key:"sort",value:function value(e){var t=this.getData({order:"row",sort:e}),n=[t.schema.map(function(e){return e.name})].concat(t.data),r=new this.constructor(n,t.schema,{dataFormat:"DSVArr"});return r._sortingDetails=e,r}},{key:"addField",value:function value(e){var t=e.fieldName();this._colIdentifier+=","+t;var n=this._partialFieldspace;if(n.fieldsObj()[e.fieldName()]){var r=n.fields.findIndex(function(e){return e.name===t});r>=0&&(n.fields[r]=e)}else n.fields.push(e);return this.__calculateFieldspace().calculateFieldsConfig(),this}},{key:"calculateVariable",value:function value(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{saveChild:!0,replaceVar:!1},r=this.getFieldsConfig(),i=t.slice(0,t.length-1),a=t[t.length-1];if(r[e.name]&&!n.replaceVar)throw new Error(e.name+" field already exists in model.");var o=i.map(function(e){var t=r[e];if(!t)throw new Error(e+" is not a valid column name.");return t.index}),u=this.clone(),c=u.getFieldspace().fields,s=o.map(function(e){return c[e]}),f=[];l(u._rowDiffset,function(e){var t=s.map(function(t){return t.data[e]});f[e]=a.apply(void 0,function(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t1&&void 0!==arguments[1]?arguments[1]:{},n=arguments[2],r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},i=t.isMutableAction,a=t.sourceId,o=t.payload,u=function e(t){return t._parent?e(t._parent):t}(this),c=u._propagationNameSpace,s={groupByModel:function e(t){return t._parent&&t._derivation.find(function(e){return"group"!==e.op})?e(t._parent):t}(this),model:u};return n&&function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments[2],r=void 0,i=t.isMutableAction,a=t.criteria,o=t.action+"-"+t.sourceId;r=i?e.mutableActions:e.immutableActions,null===a?delete r[o]:r[o]={model:n,config:t}}(c,t,this),wt(e,s,{propagationNameSpace:c,sourceId:a},Object.assign({payload:o},t)),i&&function(e,t,n){var r=e.immutableActions;for(var i in r){var a=r[i].config,o=n.config.sourceId,u=!n.propConfig.filterImmutableAction||n.propConfig.filterImmutableAction(a,n.config);if(a.sourceId!==o&&u){var c=a.criteria;wt(c,t,{propagationNameSpace:e,propagateToSource:!1,sourceId:o},a)}}}(c,s,{config:t,propConfig:r}),this}},{key:"on",value:function value(e,t){switch(e){case"propagation":this._onPropagation.push(t)}return this}},{key:"unsubscribe",value:function value(e){switch(e){case"propagation":this._onPropagation=[]}return this}},{key:"handlePropagation",value:function value(e,t){var n=this;this._onPropagation.forEach(function(r){return r.call(n,e,t)})}},{key:"bin",value:function value(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=this.clone(),r=t.name||e+"_binned";if(this.getFieldsConfig()[r]||!this.getFieldsConfig()[e])throw new Error("Field "+e+" already exists.");var i=function I(e,t,n){var r=n.buckets,i=n.binCount,a=n.binSize,o=n.start,u=[],c=[],s=e.domain(),f=ue(s,2),h=f[0],d=f[1],p=d,y=[],g=void 0,v=void 0,m=void 0,b=void 0;if(l(t,function(t){u.push({data:e.data[t],index:t})}),!r){var _=((d+=1)-h)%(a=a||(d-h)/i);for(i||0===_||(d=d+a-_),g=h+a;g<=d;)y.push(g),g+=a;r={start:o=o||h,stops:y}}v=0===r.start?0:r.start||h,r.stops.forEach(function(e){u.filter(function(t){return t.data>=v&&t.data=r.stops[r.stops.length-1]}).forEach(function(e){c[e.index]=r.stops[r.stops.length-1]+"-"+p}),r.stops.unshift(r.start),b=new Set(r.stops),hr.stops[r.stops.length-1]&&b.add(p),b=[].concat(function(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t1&&void 0!==arguments[1]?arguments[1]:{saveChild:!0}).saveChild;return t.forEach(function(e){n=e(n),i.push.apply(i,function(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t1&&r.dispose(),n}},bin:function bin(){for(var e=arguments.length,t=Array(e),n=0;n2?(i=arguments.length<=0?void 0:arguments[0],r=arguments.length<=1?void 0:arguments[1],a=arguments.length<=2?void 0:arguments[2]):(i=null,r=arguments.length<=0?void 0:arguments[0],a=arguments.length<=1?void 0:arguments[1]),t=a(w),(e=n=new A(t.fn)).addDependencies.apply(e,P(t.dependencies)),this._addPropInModel(i,function(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}({},r,n)),this}},{key:"_addPropInModel",value:function value(e,t){return this._graph.createNodesFrom(t,e),this}},{key:"on",value:function value(e,t,n){var r,i=e instanceof Array?e:[e],a=this._graph.createElectricNodeOf(i,{type:"CurrFrame",fn:t});return n&&(r=this._graph.stopPropagation().setPropagationOverride("nextFrame")).resetNodeValue.apply(r,P(e)),a}},{key:"next",value:function value(e,t,n){var r,i=e instanceof Array?e:[e],a=this._graph.createElectricNodeOf(i,{type:"NextFrame",fn:t});return n&&(r=this._graph.stopPropagation().setPropagationOverride("currentFrame")).resetNodeValue.apply(r,P(e)),a}},{key:"lock",value:function value(){return this._lockFlag=!0,this._reqQ.length=0,this}},{key:"unlock",value:function value(){return this._lockFlag=!1,this.setProp.apply(this,P(this._reqQ)),this._reqQ.length=0,this}},{key:"prop",value:function value(){var e,t=void 0,n=void 0;switch(e=arguments.length){case 1:t=arguments.length<=0?void 0:arguments[0];break;case 2:t=arguments.length<=0?void 0:arguments[0],n=arguments.length<=1?void 0:arguments[1];break;default:return this}return 2===e?(this._lockFlag?this._reqQ.push([t,n]):this.setProp([t,n]),this):this._graph.getNodeValue(t)}},{key:"setProp",value:function value(){for(var e,t=this,n=arguments.length,r=Array(n),i=0;i/gi),e},SmartLabelManager.store={},SmartLabelManager.prototype._calCharDimWithCache=function(e,t,n){if(!this._init)return!1;var r,i,a,o,u,c,s=this.options.maxCacheLimit,l=this._container,h=this.style||{},d=this._advancedCache||(this._advancedCache={}),p=this._advancedCacheKey||(this._advancedCacheKey=[]),y=e+(h.fontSize||"")+(h.fontFamily||"")+(h.fontWeight||"")+(h.fontStyle||""),g=e+"init"+(h.fontSize||"")+(h.fontFamily||"")+(h.fontWeight||"")+(h.fontStyle||"");return f[e]&&(e=f[e]),t?void 0===(c=d[g])&&(l.innerHTML=e.repeat?e.repeat(n):Array(n+1).join(e),a=l.offsetWidth,l.innerHTML=e,o=l.offsetWidth,c=d[g]=(a-n*o)/(n+1),p.push(g),p.length>s&&delete d[p.shift()]):c=0,(u=d[y])?(i=u.split(","),{width:parseFloat(i[0],10),height:parseFloat(i[1],10)}):(l.innerHTML=e,r={height:l.offsetHeight,width:l.offsetWidth+c},d[y]=r.width+","+r.height,p.push(y),p.length>s&&delete d[p.shift()],r)},SmartLabelManager.prototype._getWidthFn=function(){var e=this._containerObj,t=this._container,n=e.svgText;return n?function(e){var t,r;return n.textContent=e,(r=(t=n.getBBox()).width-d)<1&&(r=t.width),r}:function(e){return t.innerHTML=e,t.offsetWidth}},SmartLabelManager.prototype.setStyle=function(e){return this._init?e!==this.style||this._styleNotSet?(e||(e=this.style),o.setLineHeight(e),this.style=e,this._containerObj=t=this._containerManager.get(e),this._containerObj?(this._container=t.node,this._context=t.context,this._cache=t.charCache,this._lineHeight=t.lineHeight,this._styleNotSet=!1):this._styleNotSet=!0,this):void 0:this;var t},SmartLabelManager.prototype.useEllipsesOnOverflow=function(e){return this._init?(this._showNoEllipses=!e,this):this},SmartLabelManager.prototype.getSmartText=function(e,t,n,r){if(!this._init)return!1;void 0===e||null===e?e="":"string"!=typeof e&&(e=e.toString());var i,a,c,l,f,d,p,y,g,v,m,b,_,x,w,k,C,S,P,A,E,M,O,T,F,N,j=!1,I=0,D=-1,L=-1,R=-1,B=0,z=0,H=[],V=0,U=this._showNoEllipses?"":"...",W=this._lineHeight,q=this._context,G=this._container,Y=this._containerObj,X=Y.ellipsesWidth,K=Y.dotWidth,$=[],Q=-1,Z=-1,J=-1,ee=function fastTrim(e){for(var t=/\s/,n=(e=e.replace(/^\s\s*/,"")).length;t.test(e.charAt(n-=1)););return e.slice(0,n+1)},te={text:e,maxWidth:t,maxHeight:n,width:null,height:null,oriTextWidth:null,oriTextHeight:null,oriText:e,isTruncated:!1};if(b=this._getWidthFn(),n===W&&(n*=1.2),G){if(!h.isBrowserLess){if((j=o.xmlTagRegEx.test(e))?(G.innerHTML=e,te.oriTextWidth=p=G.offsetWidth,te.oriTextHeight=y=G.offsetHeight):(l=e.replace(o.ltgtRegex,function(e){return"<"===e?"<":">"}),w=this.getOriSize(l,!0),te.oriTextWidth=p=w.width,te.oriTextHeight=y=w.height),y<=n&&p<=t)return te.width=te.oriTextWidth=p,te.height=te.oriTextHeight=y,te;if(W>n)return te.text="",te.width=te.oriTextWidth=0,te.height=te.oriTextHeight=0,te}if(e=ee(e).replace(/(\s+)/g," "),f=this._showNoEllipses?t:t-X,!j){if(i=(H=e.split("")).length,a="",c=[],m=H[0],this._cache[m]?P=this._cache[m].width:(P=b(m),this._cache[m]={width:P}),f>P)V=(c=e.substr(0,o.getNearestBreakIndex(e,f,this)).split("")).length;else{if(P>t)return te.text="",te.width=te.oriTextWidth=te.height=te.oriTextHeight=0,te;U&&((f=t-2*K)>P?U="..":(f=t-K)>P?U=".":(f=0,U=""))}if(B=b(c.join("")),z=this._lineHeight,r){for(;Vf&&(a||(a=c.slice(0,-1).join("")),B>t))return te.text=ee(a)+U,te.tooltext=te.oriText,te.width=b(te.text),te.height=this._lineHeight,te;return te.text=c.join(""),te.width=B,te.height=this._lineHeight,te}for(;Vf&&(a||(a=c.slice(0,-1).join("")),B>t)){if(L=e.substr(0,c.length).lastIndexOf(" "),D=e.substr(0,c.length).lastIndexOf("-"),L>R?(B=b(c.slice(R+1,L).join("")),c.splice(L,1,"
"),R=L,g=L+1):D>R?(D===c.length-1?(B=b(c.slice(R+1,L).join("")),c.splice(D,1,"
-")):(B=b(c.slice(R+1,L).join("")),c.splice(D,1,"-
")),R=D,g=D+1):(c.splice(c.length-1,1,"
"+H[V]),J=c.length-2,B=b(c.slice(R+1,J+1).join("")),R=J,g=V),(z+=this._lineHeight)>n)return te.text=ee(a)+U,te.tooltext=te.oriText,te.width=t,te.height=z-this._lineHeight,te;I=s(I,B),a=null,v=o.getNearestBreakIndex(e.substr(g),f,this),B=b(e.substr(g,v||1)),c.length)/g,'$1'),G.innerHTML=e,C=0,S=(k=G[h.childRetriverFn](h.childRetriverString)).length;Ct)return te.text="",te.width=te.oriTextWidth=te.height=te.oriTextHeight=0,te;if(P>f&&!this._showNoEllipses&&((f=t-2*K)>P?U="..":(f=t-K)>P?U=".":(f=0,U="")),_=$[0].elem.offsetLeft,x=$[0].elem.offsetTop,r)for(;Vf&&(N||(N=V),G.offsetWidth>t&&(F=V,V=i));else for(;Vf?(N||(N=V),M>t&&(L=$[V].spaceIdx,D=$[V].dashIdx,L>R?($[L].elem.innerHTML="
",R=L):D>R?($[D].elem.innerHTML=D===V?"
-":"-
",R=D):A.parentNode.insertBefore(T=u.createElement("br"),A),A.offsetHeight+A.offsetTop>n?(T?T.parentNode.removeChild(T):R===D?$[D].elem.innerHTML="-":$[L].elem.innerHTML=" ",F=V,V=i):N=null)):O>n&&(F=V,V=i);if(F=N;V-=1)(A=$[V].elem).parentNode.removeChild(A);for(;V>=0;V-=1)A=$[V].elem,o.classNameBrReg.test(A.className)?A.parentNode.removeChild(A):V=0}return te.text=G.innerHTML.replace(o.spanRemovalRegx,"$1").replace(/\&\;/g,"&"),te.isTruncated&&(te.text+=U,te.tooltext=d),te.height=G.offsetHeight,te.width=G.offsetWidth,te}return te.error=new Error("Body Tag Missing!"),te},SmartLabelManager.prototype.getOriSize=function(e,t){if(!this._init)return!1;var n,r,i,a,o,u=0,c=0,f={};if(!t)return this._calCharDimWithCache(e);for(a=0,o=(n=e.split("")).length;a]+?\>)|(&(?:[a-z]+|#[0-9]+);|.)/gi,spanAdditionReplacer:'$1$2',spanRemovalRegx:new RegExp("\\]+?"+c+"[^\\>]{0,}\\>(.*?)\\<\\/span\\>","ig"),xmlTagRegEx:new RegExp("<[^>][^<]*[^>]+>","i"),ltgtRegex:/<|>/g,brReplaceRegex://gi,testStrAvg:"WgI",parentContainerStyle:{position:"absolute",top:"-9999em",whiteSpace:"nowrap",padding:"0px",width:"1px",height:"1px",overflow:"hidden"},supportedStyle:{font:"font",fontFamily:"font-family","font-family":"font-family",fontWeight:"font-weight","font-weight":"font-weight",fontSize:"font-size","font-size":"font-size",lineHeight:"line-height","line-height":"line-height",fontStyle:"font-style","font-style":"font-style"},getDocumentSupport:function getDocumentSupport(){var r,i,a;return t.getElementsByClassName?(r="getElementsByClassName",i=c,a=!0):(r="getElementsByTagName",i="span",a=!1),{isIE:/msie/i.test(n)&&!e.opera,hasSVG:Boolean(e.SVGAngle||t.implementation.hasFeature("http://www.w3.org/TR/SVG11/feature#BasicStructure","1.1")),isHeadLess:new RegExp(" HtmlUnit").test(n),isWebKit:new RegExp(" AppleWebKit/").test(n),childRetriverFn:r,childRetriverString:i,noClassTesting:a}},createContainer:function createContainer(e){var n,r;if(e&&(e.offsetWidth||e.offsetHeight)){if(e.appendChild)return e.appendChild(r=t.createElement("DIV")),r.className=u,r.setAttribute("aria-hidden","true"),r.setAttribute("role","presentation"),r}else if((n=t.getElementsByTagName("body")[0])&&n.appendChild)return(r=t.createElement("DIV")).className=u,r.setAttribute("aria-hidden","true"),r.setAttribute("role","presentation"),1,n.appendChild(r),r},getNearestBreakIndex:function getNearestBreakIndex(e,t,n){if(!e||!e.length)return 0;var r,o=n._getWidthFn(),u=0,c=0,s=o(e),l=s/e.length;if(r=t,u=i(t/l),se.length&&(r=t-s,u=e.length);r>0;){if(r=t-o(e.substr(0,u)),!(c=a(r/l)))return u;u+=c}for(;r<0;){if(r=t-o(e.substr(0,u)),!(c=a(r/l)))return u;u+=c}return u},setLineHeight:function setLineHeight(e){var t=e.fontSize=e.fontSize||"12px";return e.lineHeight=e.lineHeight||e["line-height"]||1.2*parseInt(t,10)+"px",e}}}};t.default=r,e.exports=t.default},function(e){e.exports={name:"muze",private:!0,version:"1.0.2",description:"Composable visualisation library for web with a data-first approach",homepage:"https://www.charts.com/muze",license:"MIT",author:"Charts.com ",contributors:[{name:"Akash Ghoswami",email:"akash@charts.com"},{name:"Ranajit Banerjee",email:"ranajit.banerjee@charts.com",url:"https://github.com/ranajitbanerjee"},{name:"Mridul Meharia",email:"mridul@charts.com",url:"https://github.com/mridulmeh"},{name:"Subhash Haldar",email:"subhash@charts.com"},{name:"Sandeep Acharya",email:"sandeep@charts.com"},{name:"Rousan Ali",email:"rousan@charts.com",url:"https://rousan.io"},{name:"Ujjal Kumar Dutta",email:"ujjal@charts.com"}],main:"src/index.js",keywords:["muze","svg","vector","graphics","data-visualization","visualization","renderer","fusioncharts","relational","algebra","relation"],repository:{type:"git",url:"https://github.com/chartshq/muze"},dependencies:{"@chartshq/layout":"^1.0.0","@chartshq/muze-firebolt":"^1.0.0","@chartshq/muze-legend":"^1.0.0","muze-utils":"^1.0.0","@chartshq/visual-cell":"^1.0.0","@chartshq/visual-group":"^1.0.0","@chartshq/visual-layer":"^1.0.0","@chartshq/visual-unit":"^1.0.0"}}},function(e,t,n){var r=n(44);e.exports=r.default?r.default:r},function(e,t,n){"use strict";var r=function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}(n(5)).default.init("undefined"!=typeof window?window:void 0),i=r.win.document,a=r.getDocumentSupport(),o=a.isWebKit?0:4.5;function ContainerManager(e,t,n){var r;n=(n=n>5?n:5)<20?n:20,this.maxContainers=n,this.first=null,this.last=null,this.containers={},this.length=0,this.rootNode=e,t&&((r=i.createElementNS("http://www.w3.org/2000/svg","svg")).setAttributeNS("http://www.w3.org/2000/svg","xlink","http://www.w3.org/1999/xlink"),r.setAttributeNS("http://www.w3.org/2000/svg","height","0"),r.setAttributeNS("http://www.w3.org/2000/svg","width","0"),this.svgRoot=r,this.rootNode.appendChild(r))}ContainerManager.prototype.get=function(e){var t,n,i,a=this.containers,o=this.length,u=this.maxContainers,c="";for(n in r.supportedStyle)void 0!==e[n]&&(c+=r.supportedStyle[n]+":"+e[n]+";");if(!c)return!1;if(i=a[c])this.first!==i&&(i.prev&&(i.prev.next=i.next),i.next&&(i.next.prev=i.prev),i.next=this.first,i.next.prev=i,this.last===i&&(this.last=i.prev),i.prev=null,this.first=i);else{if(o>=u)for(t=o-u+1;t--;)this.removeContainer(this.last);i=this.addContainer(c)}return i},ContainerManager.prototype.addContainer=function(e){var t,n;return this.containers[e]=n={next:null,prev:null,node:null,ellipsesWidth:0,lineHeight:0,dotWidth:0,avgCharWidth:4,keyStr:e,charCache:{}},n.next=this.first,n.next&&(n.next.prev=n),this.first=n,this.last||(this.last=n),this.length+=1,t=n.node=i.createElement("div"),this.rootNode.appendChild(t),a.isIE&&!a.hasSVG?t.style.setAttribute("cssText",e):t.setAttribute("style",e),t.setAttribute("aria-hidden","true"),t.setAttribute("role","presentation"),t.style.display="inline-block",t.innerHTML=r.testStrAvg,n.lineHeight=t.offsetHeight,n.avgCharWidth=t.offsetWidth/3,a.isBrowserLess?((t=n.svgText=i.createElementNS("http://www.w3.org/2000/svg","text")).setAttribute("style",e),this.svgRoot.appendChild(t),t.textContent=r.testStrAvg,n.lineHeight=t.getBBox().height,n.avgCharWidth=(t.getBBox().width-o)/3,t.textContent="...",n.ellipsesWidth=t.getBBox().width-o,t.textContent=".",n.dotWidth=t.getBBox().width-o):(t.innerHTML="...",n.ellipsesWidth=t.offsetWidth,t.innerHTML=".",n.dotWidth=t.offsetWidth,t.innerHTML=""),n},ContainerManager.prototype.removeContainer=function(e){var t=e.keyStr;t&&this.length&&e&&(this.length-=1,e.prev&&(e.prev.next=e.next),e.next&&(e.next.prev=e.prev),this.first===e&&(this.first=e.next),this.last===e&&(this.last=e.prev),e.node.parentNode.removeChild(e.node),delete this.containers[t])},ContainerManager.prototype.dispose=function(){var e,t=this.containers;for(e in this.maxContainers=null,t)this.removeContainer(t[e]);this.rootNode.parentNode.removeChild(this.rootNode),this.rootNode=null,this.first=null,this.last=null},e.exports=ContainerManager},function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,,function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,function(e,t,n){"use strict";n.r(t);var r={};n.r(r),n.d(r,"scaleLinear",function(){return linear_linear}),n.d(r,"scaleThreshold",function(){return threshold_threshold}),n.d(r,"scaleLog",function(){return log}),n.d(r,"scalePow",function(){return pow}),n.d(r,"scaleIdentity",function(){return identity_identity}),n.d(r,"scaleOrdinal",function(){return ordinal}),n.d(r,"scaleSequential",function(){return sequential}),n.d(r,"scaleQuantize",function(){return quantize_quantize}),n.d(r,"scaleQuantile",function(){return quantile_quantile}),n.d(r,"schemeCategory10",function(){return tn}),n.d(r,"schemeCategory20",function(){return rn}),n.d(r,"schemeCategory20b",function(){return nn}),n.d(r,"scaleBand",function(){return band}),n.d(r,"scaleTime",function(){return Jt});var i={};n.r(i),n.d(i,"schemeDark2",function(){return cn}),n.d(i,"schemePaired",function(){return sn}),n.d(i,"schemeAccent",function(){return un}),n.d(i,"schemePastel1",function(){return ln}),n.d(i,"schemePastel2",function(){return fn}),n.d(i,"schemeSet1",function(){return hn}),n.d(i,"schemeSet2",function(){return dn}),n.d(i,"schemeSet3",function(){return pn}),n.d(i,"schemeBlues",function(){return zn}),n.d(i,"schemeBrBG",function(){return gn}),n.d(i,"schemePRGn",function(){return mn}),n.d(i,"schemePiYG",function(){return _n}),n.d(i,"interpolateBrBG",function(){return vn}),n.d(i,"interpolatePRGn",function(){return bn}),n.d(i,"interpolatePiYG",function(){return xn}),n.d(i,"interpolatePuOr",function(){return wn}),n.d(i,"interpolateRdBu",function(){return kn}),n.d(i,"interpolateRdGy",function(){return Cn}),n.d(i,"interpolateRdYlBu",function(){return Sn}),n.d(i,"interpolateRdYlGn",function(){return Pn}),n.d(i,"interpolateSpectral",function(){return An}),n.d(i,"interpolateBlues",function(){return Hn}),n.d(i,"interpolateGreens",function(){return Vn}),n.d(i,"interpolateGreys",function(){return Un}),n.d(i,"interpolateOranges",function(){return Gn}),n.d(i,"interpolatePurples",function(){return Wn}),n.d(i,"interpolateReds",function(){return qn}),n.d(i,"interpolateViridis",function(){return Zn}),n.d(i,"interpolateInferno",function(){return er}),n.d(i,"interpolateMagma",function(){return Jn}),n.d(i,"interpolatePlasma",function(){return tr}),n.d(i,"interpolateWarm",function(){return Xn}),n.d(i,"interpolateCool",function(){return Kn}),n.d(i,"interpolateCubehelixDefault",function(){return Yn}),n.d(i,"interpolateBuGn",function(){return En}),n.d(i,"interpolateBuPu",function(){return Mn}),n.d(i,"interpolateGnBu",function(){return On}),n.d(i,"interpolateOrRd",function(){return Tn}),n.d(i,"interpolatePuBuGn",function(){return Fn}),n.d(i,"interpolatePuBu",function(){return Nn}),n.d(i,"interpolatePuRd",function(){return jn}),n.d(i,"interpolateRdPu",function(){return In}),n.d(i,"interpolateYlGnBu",function(){return Dn}),n.d(i,"interpolateYlGn",function(){return Ln}),n.d(i,"interpolateYlOrBr",function(){return Rn}),n.d(i,"interpolateYlOrRd",function(){return Bn}),n.d(i,"interpolateRainbow",function(){return Qn});var a={};n.r(a),n.d(a,"DRAG",function(){return Qo}),n.d(a,"HOVER",function(){return Zo}),n.d(a,"SELECTIONDRAG",function(){return Jo}),n.d(a,"CLICK",function(){return eu}),n.d(a,"LONGTOUCH",function(){return tu}),n.d(a,"TOUCHDRAG",function(){return nu}),n.d(a,"ALL_ACTIONS",function(){return ru});var o={};n.r(o),n.d(o,"SELECTION_NEW_ENTRY",function(){return iu}),n.d(o,"SELECTION_NEW_EXIT",function(){return au}),n.d(o,"SELECTION_NULL",function(){return ou}),n.d(o,"SELECTION_OLD_ENTRY",function(){return uu}),n.d(o,"SELECTION_OLD_EXIT",function(){return cu});var u={};n.r(u),n.d(u,"BRUSH",function(){return wu}),n.d(u,"HIGHLIGHT",function(){return ku}),n.d(u,"TOOLTIP",function(){return Cu}),n.d(u,"FILTER",function(){return Su}),n.d(u,"SELECT",function(){return Pu});var c={};n.r(c),n.d(c,"HighlightBeahviour",function(){return Eu}),n.d(c,"BrushBehaviour",function(){return Ou}),n.d(c,"FilterBehaviour",function(){return Fu}),n.d(c,"SelectBehaviour",function(){return Lu});var s={};n.r(s),n.d(s,"SelectionBox",function(){return Ju}),n.d(s,"Tooltip",function(){return gc}),n.d(s,"Crossline",function(){return mc}),n.d(s,"PlotHighlighter",function(){return xc}),n.d(s,"FilterEffect",function(){return kc}),n.d(s,"PersistentAnchors",function(){return Ec}),n.d(s,"BrushAnchors",function(){return Tc}),n.d(s,"AnchorEffect",function(){return Pc});var l={};n.r(l),n.d(l,"BOTTOM",function(){return Gc}),n.d(l,"TOP",function(){return Yc}),n.d(l,"LEFT",function(){return Xc}),n.d(l,"RIGHT",function(){return Kc}),n.d(l,"axisOrientationMap",function(){return $c});var f={};n.r(f),n.d(f,"LINEAR",function(){return Qc}),n.d(f,"BAND",function(){return Zc}),n.d(f,"TIME",function(){return Jc}),n.d(f,"COLOR",function(){return es}),n.d(f,"ORDINAL",function(){return ts}),n.d(f,"QUANTIZE",function(){return ns}),n.d(f,"QUANTILE",function(){return rs}),n.d(f,"LOG",function(){return is}),n.d(f,"POW",function(){return as}),n.d(f,"IDENTITY",function(){return os}),n.d(f,"SEQUENTIAL",function(){return us}),n.d(f,"THRESHOLD",function(){return cs});var h={};n.r(h),n.d(h,"CONFIG",function(){return ad}),n.d(h,"DATA",function(){return od}),n.d(h,"AXES",function(){return ud}),n.d(h,"LAYERDEFS",function(){return cd}),n.d(h,"WIDTH",function(){return sd}),n.d(h,"HEIGHT",function(){return ld}),n.d(h,"MOUNT",function(){return fd}),n.d(h,"primaryXAxisUpdated",function(){return hd}),n.d(h,"primaryYAxisUpdated",function(){return dd}),n.d(h,"secondaryXAxisUpdated",function(){return pd}),n.d(h,"secondaryYAxisUpdated",function(){return yd}),n.d(h,"TRANSFORM",function(){return gd}),n.d(h,"DATADOMAIN",function(){return vd}),n.d(h,"LAYERSCREATED",function(){return md}),n.d(h,"FIELDS",function(){return bd}),n.d(h,"TIMEDIFFS",function(){return _d}),n.d(h,"LAYERAXISINDEX",function(){return xd});var d={};n.r(d),n.d(d,"SelectBehaviour",function(){return wp});var y={};n.r(y),n.d(y,"SelectionBox",function(){return zp}),n.d(y,"LegendHighlighter",function(){return Up});var g={};n.r(g),n.d(g,"share",function(){return Oy}),n.d(g,"html",function(){return operators_html});var v=function(e,t){return et?1:e>=t?0:NaN},m=function(e){return 1===e.length&&(e=function ascendingComparator(e){return function(t,n){return v(e(t),n)}}(e)),{left:function left(t,n,r,i){for(null==r&&(r=0),null==i&&(i=t.length);r>>1;e(t[a],n)<0?r=a+1:i=a}return r},right:function right(t,n,r,i){for(null==r&&(r=0),null==i&&(i=t.length);r>>1;e(t[a],n)>0?i=a:r=a+1}return r}}};var b=m(v),_=b.right,x=(b.left,_);var w=function(e){return null===e?NaN:+e},k=Array.prototype,C=(k.slice,k.map,function(e,t,n){e=+e,t=+t,n=(i=arguments.length)<2?(t=e,e=0,1):i<3?1:+n;for(var r=-1,i=0|Math.max(0,Math.ceil((t-e)/n)),a=new Array(i);++r0)return[e];if((r=t0)for(e=Math.ceil(e/o),t=Math.floor(t/o),a=new Array(i=Math.ceil(t-e+1));++u=0?(a>=S?10:a>=P?5:a>=A?2:1)*Math.pow(10,i):-Math.pow(10,-i)/(a>=S?10:a>=P?5:a>=A?2:1)}function tickStep(e,t,n){var r=Math.abs(t-e)/Math.max(0,n),i=Math.pow(10,Math.floor(Math.log(r)/Math.LN10)),a=r/i;return a>=S?i*=10:a>=P?i*=5:a>=A&&(i*=2),t=1)return+n(e[r-1],r-1,e);var r,i=(r-1)*t,a=Math.floor(i),o=+n(e[a],a,e);return o+(+n(e[a+1],a+1,e)-o)*(i-a)}};function map_Map(){}function map_map(e,t){var n=new map_Map;if(e instanceof map_Map)e.each(function(e,t){n.set(t,e)});else if(Array.isArray(e)){var r,i=-1,a=e.length;if(null==t)for(;++i=r.length)return null!=e&&n.sort(e),null!=t?t(n):n;for(var u,c,s,l=-1,f=n.length,h=r[i++],d=O(),p=a();++lr.length)return e;var a,o=i[n-1];return null!=t&&n>=r.length?a=e.entries():(a=[],e.each(function(e,t){a.push({key:t,values:_entries(e,n)})})),null!=o?a.sort(function(e,t){return o(e.key,t.key)}):a}(apply(e,0,createMap,setMap),0)},key:function key(e){return r.push(e),n},sortKeys:function sortKeys(e){return i[r.length-1]=e,n},sortValues:function sortValues(t){return e=t,n},rollup:function rollup(e){return t=e,n}}};function createObject(){return{}}function setObject(e,t,n){e[t]=n}function createMap(){return O()}function setMap(e,t,n){e.set(t,n)}function set_Set(){}var F=O.prototype;function set_set(e,t){var n=new set_Set;if(e instanceof set_Set)e.each(function(e){n.add(e)});else if(e){var r=-1,i=e.length;if(null==t)for(;++r1?+t:s,f=a[1]a[1-f]))return n=Math.max(0,getClosestIndexOf(h,s)),c=getClosestIndexOf(h,l),o=s===l?n:Math.max(n,c-1),f&&(u=n,n=d-o,o=d-u),n>o?void 0:r().slice(n,o+1)},n.invert=function(e,t){var n,o,u=+e,c=arguments.length>1?+t:u,s=a[1]a[1-s]))return n=Math.max(0,getClosestIndexOf(l,u,"left")),r()[s?f-n:n]},rescale()}function getClosestIndexOf(e,t,n){for(var r,i,a,o=0,u=e.length-1;ot?0===u?u:"left"===n?u-1:u:u===e.length-1?u:"left"===n?u:u+1:u}var L=function(e,t,n){e.prototype=t.prototype=n,n.constructor=e};function extend(e,t){var n=Object.create(e.prototype);for(var r in t)n[r]=t[r];return n}function Color(){}var R="\\s*([+-]?\\d+)\\s*",B="\\s*([+-]?\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)\\s*",z="\\s*([+-]?\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)%\\s*",H=/^#([0-9a-f]{3})$/,V=/^#([0-9a-f]{6})$/,U=new RegExp("^rgb\\("+[R,R,R]+"\\)$"),W=new RegExp("^rgb\\("+[z,z,z]+"\\)$"),q=new RegExp("^rgba\\("+[R,R,R,B]+"\\)$"),G=new RegExp("^rgba\\("+[z,z,z,B]+"\\)$"),Y=new RegExp("^hsl\\("+[B,z,z]+"\\)$"),X=new RegExp("^hsla\\("+[B,z,z,B]+"\\)$"),K={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};function color_color(e){var t;return e=(e+"").trim().toLowerCase(),(t=H.exec(e))?new Rgb((t=parseInt(t[1],16))>>8&15|t>>4&240,t>>4&15|240&t,(15&t)<<4|15&t,1):(t=V.exec(e))?rgbn(parseInt(t[1],16)):(t=U.exec(e))?new Rgb(t[1],t[2],t[3],1):(t=W.exec(e))?new Rgb(255*t[1]/100,255*t[2]/100,255*t[3]/100,1):(t=q.exec(e))?rgba(t[1],t[2],t[3],t[4]):(t=G.exec(e))?rgba(255*t[1]/100,255*t[2]/100,255*t[3]/100,t[4]):(t=Y.exec(e))?hsla(t[1],t[2]/100,t[3]/100,1):(t=X.exec(e))?hsla(t[1],t[2]/100,t[3]/100,t[4]):K.hasOwnProperty(e)?rgbn(K[e]):"transparent"===e?new Rgb(NaN,NaN,NaN,0):null}function rgbn(e){return new Rgb(e>>16&255,e>>8&255,255&e,1)}function rgba(e,t,n,r){return r<=0&&(e=t=n=NaN),new Rgb(e,t,n,r)}function rgbConvert(e){return e instanceof Color||(e=color_color(e)),e?new Rgb((e=e.rgb()).r,e.g,e.b,e.opacity):new Rgb}function color_rgb(e,t,n,r){return 1===arguments.length?rgbConvert(e):new Rgb(e,t,n,null==r?1:r)}function Rgb(e,t,n,r){this.r=+e,this.g=+t,this.b=+n,this.opacity=+r}function _hex(e){return((e=Math.max(0,Math.min(255,Math.round(e)||0)))<16?"0":"")+e.toString(16)}function hsla(e,t,n,r){return r<=0?e=t=n=NaN:n<=0||n>=1?e=t=NaN:t<=0&&(e=NaN),new Hsl(e,t,n,r)}function hsl(e,t,n,r){return 1===arguments.length?function hslConvert(e){if(e instanceof Hsl)return new Hsl(e.h,e.s,e.l,e.opacity);if(e instanceof Color||(e=color_color(e)),!e)return new Hsl;if(e instanceof Hsl)return e;var t=(e=e.rgb()).r/255,n=e.g/255,r=e.b/255,i=Math.min(t,n,r),a=Math.max(t,n,r),o=NaN,u=a-i,c=(a+i)/2;return u?(o=t===a?(n-r)/u+6*(n0&&c<1?0:o,new Hsl(o,u,c,e.opacity)}(e):new Hsl(e,t,n,null==r?1:r)}function Hsl(e,t,n,r){this.h=+e,this.s=+t,this.l=+n,this.opacity=+r}function hsl2rgb(e,t,n){return 255*(e<60?t+(n-t)*e/60:e<180?n:e<240?t+(n-t)*(240-e)/60:t)}L(Color,color_color,{displayable:function displayable(){return this.rgb().displayable()},hex:function hex(){return this.rgb().hex()},toString:function toString(){return this.rgb()+""}}),L(Rgb,color_rgb,extend(Color,{brighter:function brighter(e){return e=null==e?1/.7:Math.pow(1/.7,e),new Rgb(this.r*e,this.g*e,this.b*e,this.opacity)},darker:function darker(e){return e=null==e?.7:Math.pow(.7,e),new Rgb(this.r*e,this.g*e,this.b*e,this.opacity)},rgb:function rgb(){return this},displayable:function displayable(){return 0<=this.r&&this.r<=255&&0<=this.g&&this.g<=255&&0<=this.b&&this.b<=255&&0<=this.opacity&&this.opacity<=1},hex:function hex(){return"#"+_hex(this.r)+_hex(this.g)+_hex(this.b)},toString:function toString(){var e=this.opacity;return(1===(e=isNaN(e)?1:Math.max(0,Math.min(1,e)))?"rgb(":"rgba(")+Math.max(0,Math.min(255,Math.round(this.r)||0))+", "+Math.max(0,Math.min(255,Math.round(this.g)||0))+", "+Math.max(0,Math.min(255,Math.round(this.b)||0))+(1===e?")":", "+e+")")}})),L(Hsl,hsl,extend(Color,{brighter:function brighter(e){return e=null==e?1/.7:Math.pow(1/.7,e),new Hsl(this.h,this.s,this.l*e,this.opacity)},darker:function darker(e){return e=null==e?.7:Math.pow(.7,e),new Hsl(this.h,this.s,this.l*e,this.opacity)},rgb:function rgb(){var e=this.h%360+360*(this.h<0),t=isNaN(e)||isNaN(this.s)?0:this.s,n=this.l,r=n+(n<.5?n:1-n)*t,i=2*n-r;return new Rgb(hsl2rgb(e>=240?e-240:e+120,i,r),hsl2rgb(e,i,r),hsl2rgb(e<120?e+240:e-120,i,r),this.opacity)},displayable:function displayable(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1}}));var $=Math.PI/180,Q=180/Math.PI,Z=.96422,J=1,ee=.82521,te=4/29,ne=6/29,re=3*ne*ne,ie=ne*ne*ne;function labConvert(e){if(e instanceof Lab)return new Lab(e.l,e.a,e.b,e.opacity);if(e instanceof Hcl){if(isNaN(e.h))return new Lab(e.l,0,0,e.opacity);var t=e.h*$;return new Lab(e.l,Math.cos(t)*e.c,Math.sin(t)*e.c,e.opacity)}e instanceof Rgb||(e=rgbConvert(e));var n,r,i=rgb2lrgb(e.r),a=rgb2lrgb(e.g),o=rgb2lrgb(e.b),u=xyz2lab((.2225045*i+.7168786*a+.0606169*o)/J);return i===a&&a===o?n=r=u:(n=xyz2lab((.4360747*i+.3850649*a+.1430804*o)/Z),r=xyz2lab((.0139322*i+.0971045*a+.7141733*o)/ee)),new Lab(116*u-16,500*(n-u),200*(u-r),e.opacity)}function lab(e,t,n,r){return 1===arguments.length?labConvert(e):new Lab(e,t,n,null==r?1:r)}function Lab(e,t,n,r){this.l=+e,this.a=+t,this.b=+n,this.opacity=+r}function xyz2lab(e){return e>ie?Math.pow(e,1/3):e/re+te}function lab2xyz(e){return e>ne?e*e*e:re*(e-te)}function lrgb2rgb(e){return 255*(e<=.0031308?12.92*e:1.055*Math.pow(e,1/2.4)-.055)}function rgb2lrgb(e){return(e/=255)<=.04045?e/12.92:Math.pow((e+.055)/1.055,2.4)}function hclConvert(e){if(e instanceof Hcl)return new Hcl(e.h,e.c,e.l,e.opacity);if(e instanceof Lab||(e=labConvert(e)),0===e.a&&0===e.b)return new Hcl(NaN,0,e.l,e.opacity);var t=Math.atan2(e.b,e.a)*Q;return new Hcl(t<0?t+360:t,Math.sqrt(e.a*e.a+e.b*e.b),e.l,e.opacity)}function hcl(e,t,n,r){return 1===arguments.length?hclConvert(e):new Hcl(e,t,n,null==r?1:r)}function Hcl(e,t,n,r){this.h=+e,this.c=+t,this.l=+n,this.opacity=+r}L(Lab,lab,extend(Color,{brighter:function brighter(e){return new Lab(this.l+18*(null==e?1:e),this.a,this.b,this.opacity)},darker:function darker(e){return new Lab(this.l-18*(null==e?1:e),this.a,this.b,this.opacity)},rgb:function rgb(){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 new Rgb(lrgb2rgb(3.1338561*(t=Z*lab2xyz(t))-1.6168667*(e=J*lab2xyz(e))-.4906146*(n=ee*lab2xyz(n))),lrgb2rgb(-.9787684*t+1.9161415*e+.033454*n),lrgb2rgb(.0719453*t-.2289914*e+1.4052427*n),this.opacity)}})),L(Hcl,hcl,extend(Color,{brighter:function brighter(e){return new Hcl(this.h,this.c,this.l+18*(null==e?1:e),this.opacity)},darker:function darker(e){return new Hcl(this.h,this.c,this.l-18*(null==e?1:e),this.opacity)},rgb:function rgb(){return labConvert(this).rgb()}}));var ae=-.14861,oe=1.78277,ue=-.29227,ce=-.90649,se=1.97294,le=se*ce,fe=se*oe,he=oe*ue-ce*ae;function cubehelix_cubehelix(e,t,n,r){return 1===arguments.length?function cubehelixConvert(e){if(e instanceof Cubehelix)return new Cubehelix(e.h,e.s,e.l,e.opacity);e instanceof Rgb||(e=rgbConvert(e));var t=e.r/255,n=e.g/255,r=e.b/255,i=(he*r+le*t-fe*n)/(he+le-fe),a=r-i,o=(se*(n-i)-ue*a)/ce,u=Math.sqrt(o*o+a*a)/(se*i*(1-i)),c=u?Math.atan2(o,a)*Q-120:NaN;return new Cubehelix(c<0?c+360:c,u,i,e.opacity)}(e):new Cubehelix(e,t,n,null==r?1:r)}function Cubehelix(e,t,n,r){this.h=+e,this.s=+t,this.l=+n,this.opacity=+r}function basis(e,t,n,r,i){var a=e*e,o=a*e;return((1-3*e+3*a-o)*t+(4-6*a+3*o)*n+(1+3*e+3*a-3*o)*r+o*i)/6}L(Cubehelix,cubehelix_cubehelix,extend(Color,{brighter:function brighter(e){return e=null==e?1/.7:Math.pow(1/.7,e),new Cubehelix(this.h,this.s,this.l*e,this.opacity)},darker:function darker(e){return e=null==e?.7:Math.pow(.7,e),new Cubehelix(this.h,this.s,this.l*e,this.opacity)},rgb:function rgb(){var e=isNaN(this.h)?0:(this.h+120)*$,t=+this.l,n=isNaN(this.s)?0:this.s*t*(1-t),r=Math.cos(e),i=Math.sin(e);return new Rgb(255*(t+n*(ae*r+oe*i)),255*(t+n*(ue*r+ce*i)),255*(t+n*(se*r)),this.opacity)}}));var de=function(e){return function(){return e}};function linear(e,t){return function(n){return e+n*t}}function color_hue(e,t){var n=t-e;return n?linear(e,n>180||n<-180?n-360*Math.round(n/360):n):de(isNaN(e)?t:e)}function gamma(e){return 1==(e=+e)?nogamma:function(t,n){return n-t?function exponential(e,t,n){return e=Math.pow(e,n),t=Math.pow(t,n)-e,n=1/n,function(r){return Math.pow(e+r*t,n)}}(t,n,e):de(isNaN(t)?n:t)}}function nogamma(e,t){var n=t-e;return n?linear(e,n):de(isNaN(e)?t:e)}var pe=function rgbGamma(e){var t=gamma(e);function rgb(e,n){var r=t((e=color_rgb(e)).r,(n=color_rgb(n)).r),i=t(e.g,n.g),a=t(e.b,n.b),o=nogamma(e.opacity,n.opacity);return function(t){return e.r=r(t),e.g=i(t),e.b=a(t),e.opacity=o(t),e+""}}return rgb.gamma=rgbGamma,rgb}(1);function rgbSpline(e){return function(t){var n,r,i=t.length,a=new Array(i),o=new Array(i),u=new Array(i);for(n=0;n=1?(n=1,t-1):Math.floor(n*t),i=e[r],a=e[r+1],o=r>0?e[r-1]:2*i-a,u=ra&&(i=t.slice(a,i),u[o]?u[o]+=i:u[++o]=i),(n=n[0])===(r=r[0])?u[o]?u[o]+=r:u[++o]=r:(u[++o]=null,c.push({i:o,x:ge(n,r)})),a=be.lastIndex;return a180?t+=360:t-e>180&&(e+=360),i.push({i:n.push(pop(n)+"rotate(",null,r)-2,x:ge(e,t)})):t&&n.push(pop(n)+"rotate("+t+r)}(i.rotate,a.rotate,o,u),function skewX(e,t,n,i){e!==t?i.push({i:n.push(pop(n)+"skewX(",null,r)-2,x:ge(e,t)}):t&&n.push(pop(n)+"skewX("+t+r)}(i.skewX,a.skewX,o,u),function scale(e,t,n,r,i,a){if(e!==n||t!==r){var o=i.push(pop(i)+"scale(",null,",",null,")");a.push({i:o-4,x:ge(e,n)},{i:o-2,x:ge(t,r)})}else 1===n&&1===r||i.push(pop(i)+"scale("+n+","+r+")")}(i.scaleX,i.scaleY,a.scaleX,a.scaleY,o,u),i=a=null,function(e){for(var t,n=-1,r=u.length;++n2?polymap:bimap,r=i=null,scale}function scale(t){return(r||(r=n(a,o,c?function deinterpolateClamp(e){return function(t,n){var r=e(t=+t,n=+n);return function(e){return e<=t?0:e>=n?1:r(e)}}}(e):e,u)))(+t)}return scale.invert=function(e){return(i||(i=n(o,a,deinterpolateLinear,c?function reinterpolateClamp(e){return function(t,n){var r=e(t=+t,n=+n);return function(e){return e<=0?t:e>=1?n:r(e)}}}(t):t)))(+e)},scale.domain=function(e){return arguments.length?(a=j.call(e,De),rescale()):a.slice()},scale.range=function(e){return arguments.length?(o=I.call(e),rescale()):o.slice()},scale.rangeRound=function(e){return o=I.call(e),u=Ae,rescale()},scale.clamp=function(e){return arguments.length?(c=!!e,rescale()):c},scale.interpolate=function(e){return arguments.length?(u=e,rescale()):u},rescale()}var Re=function(e,t){if((n=(e=t?e.toExponential(t-1):e.toExponential()).indexOf("e"))<0)return null;var n,r=e.slice(0,n);return[r.length>1?r[0]+r.slice(2):r,+e.slice(n+1)]},Be=function(e){return(e=Re(Math.abs(e)))?e[1]:NaN},ze=/^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;function formatSpecifier(e){return new FormatSpecifier(e)}function FormatSpecifier(e){if(!(t=ze.exec(e)))throw new Error("invalid format: "+e);var t;this.fill=t[1]||" ",this.align=t[2]||">",this.sign=t[3]||"-",this.symbol=t[4]||"",this.zero=!!t[5],this.width=t[6]&&+t[6],this.comma=!!t[7],this.precision=t[8]&&+t[8].slice(1),this.trim=!!t[9],this.type=t[10]||""}formatSpecifier.prototype=FormatSpecifier.prototype,FormatSpecifier.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.trim?"~":"")+this.type};var He,Ve,Ue,We,qe=function(e){e:for(var t,n=e.length,r=1,i=-1;r0){if(!+e[r])break e;i=0}}return i>0?e.slice(0,i)+e.slice(t+1):e},Ge=function(e,t){var n=Re(e,t);if(!n)return e+"";var r=n[0],i=n[1];return i<0?"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")},Ye={"%":function _(e,t){return(100*e).toFixed(t)},b:function b(e){return Math.round(e).toString(2)},c:function c(e){return e+""},d:function d(e){return Math.round(e).toString(10)},e:function e(t,n){return t.toExponential(n)},f:function f(e,t){return e.toFixed(t)},g:function g(e,t){return e.toPrecision(t)},o:function o(e){return Math.round(e).toString(8)},p:function p(e,t){return Ge(100*e,t)},r:Ge,s:function(e,t){var n=Re(e,t);if(!n)return e+"";var r=n[0],i=n[1],a=i-(He=3*Math.max(-8,Math.min(8,Math.floor(i/3))))+1,o=r.length;return a===o?r:a>o?r+new Array(a-o+1).join("0"):a>0?r.slice(0,a)+"."+r.slice(a):"0."+new Array(1-a).join("0")+Re(e,Math.max(0,t+a-1))[0]},X:function X(e){return Math.round(e).toString(16).toUpperCase()},x:function x(e){return Math.round(e).toString(16)}},Xe=function(e){return e},Ke=["y","z","a","f","p","n","µ","m","","k","M","G","T","P","E","Z","Y"],$e=function(e){var t=e.grouping&&e.thousands?function(e,t){return function(n,r){for(var i=n.length,a=[],o=0,u=e[0],c=0;i>0&&u>0&&(c+u+1>r&&(u=Math.max(1,r-c)),a.push(n.substring(i-=u,i+u)),!((c+=u+1)>r));)u=e[o=(o+1)%e.length];return a.reverse().join(t)}}(e.grouping,e.thousands):Xe,n=e.currency,r=e.decimal,i=e.numerals?function(e){return function(t){return t.replace(/[0-9]/g,function(t){return e[+t]})}}(e.numerals):Xe,a=e.percent||"%";function newFormat(e){var o=(e=formatSpecifier(e)).fill,u=e.align,c=e.sign,s=e.symbol,l=e.zero,f=e.width,h=e.comma,d=e.precision,p=e.trim,y=e.type;"n"===y?(h=!0,y="g"):Ye[y]||(null==d&&(d=12),p=!0,y="g"),(l||"0"===o&&"="===u)&&(l=!0,o="0",u="=");var g="$"===s?n[0]:"#"===s&&/[boxX]/.test(y)?"0"+y.toLowerCase():"",v="$"===s?n[1]:/[%p]/.test(y)?a:"",m=Ye[y],b=/[defgprs%]/.test(y);function format(e){var n,a,s,_=g,x=v;if("c"===y)x=m(e)+x,e="";else{var w=(e=+e)<0;if(e=m(Math.abs(e),d),p&&(e=qe(e)),w&&0==+e&&(w=!1),_=(w?"("===c?c:"-":"-"===c||"("===c?"":c)+_,x=("s"===y?Ke[8+He/3]:"")+x+(w&&"("===c?")":""),b)for(n=-1,a=e.length;++n(s=e.charCodeAt(n))||s>57){x=(46===s?r+e.slice(n+1):e.slice(n))+x,e=e.slice(0,n);break}}h&&!l&&(e=t(e,1/0));var k=_.length+e.length+x.length,C=k>1)+_+e+x+C.slice(k);break;default:e=C+_+e+x}return i(e)}return d=null==d?6:/[gprs]/.test(y)?Math.max(1,Math.min(21,d)):Math.max(0,Math.min(20,d)),format.toString=function(){return e+""},format}return{format:newFormat,formatPrefix:function formatPrefix(e,t){var n=newFormat(((e=formatSpecifier(e)).type="f",e)),r=3*Math.max(-8,Math.min(8,Math.floor(Be(t)/3))),i=Math.pow(10,-r),a=Ke[8+r/3];return function(e){return n(i*e)+a}}}};!function defaultLocale(e){return Ve=$e(e),Ue=Ve.format,We=Ve.formatPrefix,Ve}({decimal:".",thousands:",",grouping:[3],currency:["$",""]});var Qe=function(e,t,n){var r,i=e[0],a=e[e.length-1],o=tickStep(i,a,null==t?10:t);switch((n=formatSpecifier(null==n?",f":n)).type){case"s":var u=Math.max(Math.abs(i),Math.abs(a));return null!=n.precision||isNaN(r=function(e,t){return Math.max(0,3*Math.max(-8,Math.min(8,Math.floor(Be(t)/3)))-Be(Math.abs(e)))}(o,u))||(n.precision=r),We(n,u);case"":case"e":case"g":case"p":case"r":null!=n.precision||isNaN(r=function(e,t){return e=Math.abs(e),t=Math.abs(t)-e,Math.max(0,Be(t)-Be(e))+1}(o,Math.max(Math.abs(i),Math.abs(a))))||(n.precision=r-("e"===n.type));break;case"f":case"%":null!=n.precision||isNaN(r=function(e){return Math.max(0,-Be(Math.abs(e)))}(o))||(n.precision=r-2*("%"===n.type))}return Ue(n)};function linearish(e){var t=e.domain;return e.ticks=function(e){var n=t();return E(n[0],n[n.length-1],null==e?10:e)},e.tickFormat=function(e,n){return Qe(t(),e,n)},e.nice=function(n){null==n&&(n=10);var r,i=t(),a=0,o=i.length-1,u=i[a],c=i[o];return c0?r=tickIncrement(u=Math.floor(u/r)*r,c=Math.ceil(c/r)*r,n):r<0&&(r=tickIncrement(u=Math.ceil(u*r)/r,c=Math.floor(c*r)/r,n)),r>0?(i[a]=Math.floor(u/r)*r,i[o]=Math.ceil(c/r)*r,t(i)):r<0&&(i[a]=Math.ceil(u*r)/r,i[o]=Math.floor(c*r)/r,t(i)),e},e}function linear_linear(){var e=continuous(deinterpolateLinear,ge);return e.copy=function(){return copy(e,linear_linear())},linearish(e)}function identity_identity(){var e=[0,1];function scale(e){return+e}return scale.invert=scale,scale.domain=scale.range=function(t){return arguments.length?(e=j.call(t,De),scale):e.slice()},scale.copy=function(){return identity_identity().domain(e)},linearish(scale)}var Ze=function(e,t){var n,r=0,i=(e=e.slice()).length-1,a=e[r],o=e[i];return o0){for(;hc)break;y.push(f)}}else for(;h=1;--l)if(!((f=s*l)c)break;y.push(f)}}else y=E(h,d,Math.min(d-h,p)).map(i);return a?y.reverse():y},e.tickFormat=function(t,a){if(null==a&&(a=10===n?".0e":","),"function"!=typeof a&&(a=Ue(a)),t===1/0)return a;null==t&&(t=10);var o=Math.max(1,n*t/e.ticks().length);return function(e){var t=e/i(Math.round(r(e)));return t*n0?n[i-1]:e[0],i=n?[r[n-1],t]:[r[o-1],r[o]]},scale.copy=function(){return quantize_quantize().domain([e,t]).range(i)},linearish(scale)}function threshold_threshold(){var e=[.5],t=[0,1],n=1;function scale(r){if(r<=r)return t[x(e,r,0,n)]}return scale.domain=function(r){return arguments.length?(e=I.call(r),n=Math.min(e.length,t.length-1),scale):e.slice()},scale.range=function(r){return arguments.length?(t=I.call(r),n=Math.min(e.length,t.length-1),scale):t.slice()},scale.invertExtent=function(n){var r=t.indexOf(n);return[e[r-1],e[r]]},scale.copy=function(){return threshold_threshold().domain(e).range(t)},scale}var Je=new Date,et=new Date;function newInterval(e,t,n,r){function interval(t){return e(t=new Date(+t)),t}return interval.floor=interval,interval.ceil=function(n){return e(n=new Date(n-1)),t(n,1),e(n),n},interval.round=function(e){var t=interval(e),n=interval.ceil(e);return e-t0))return o;do{o.push(a=new Date(+n)),t(n,i),e(n)}while(a=t)for(;e(t),!n(t);)t.setTime(t-1)},function(e,r){if(e>=e)if(r<0)for(;++r<=0;)for(;t(e,-1),!n(e););else for(;--r>=0;)for(;t(e,1),!n(e););})},n&&(interval.count=function(t,r){return Je.setTime(+t),et.setTime(+r),e(Je),e(et),Math.floor(n(Je,et))},interval.every=function(e){return e=Math.floor(e),isFinite(e)&&e>0?e>1?interval.filter(r?function(t){return r(t)%e==0}:function(t){return interval.count(0,t)%e==0}):interval:null}),interval}var tt=newInterval(function(){},function(e,t){e.setTime(+e+t)},function(e,t){return t-e});tt.every=function(e){return e=Math.floor(e),isFinite(e)&&e>0?e>1?newInterval(function(t){t.setTime(Math.floor(t/e)*e)},function(t,n){t.setTime(+t+n*e)},function(t,n){return(n-t)/e}):tt:null};var nt=tt,rt=(tt.range,6e4),it=6048e5,at=newInterval(function(e){e.setTime(1e3*Math.floor(e/1e3))},function(e,t){e.setTime(+e+1e3*t)},function(e,t){return(t-e)/1e3},function(e){return e.getUTCSeconds()}),ot=at,ut=(at.range,newInterval(function(e){e.setTime(Math.floor(e/rt)*rt)},function(e,t){e.setTime(+e+t*rt)},function(e,t){return(t-e)/rt},function(e){return e.getMinutes()})),ct=ut,st=(ut.range,newInterval(function(e){var t=e.getTimezoneOffset()*rt%36e5;t<0&&(t+=36e5),e.setTime(36e5*Math.floor((+e-t)/36e5)+t)},function(e,t){e.setTime(+e+36e5*t)},function(e,t){return(t-e)/36e5},function(e){return e.getHours()})),lt=st,ft=(st.range,newInterval(function(e){e.setHours(0,0,0,0)},function(e,t){e.setDate(e.getDate()+t)},function(e,t){return(t-e-(t.getTimezoneOffset()-e.getTimezoneOffset())*rt)/864e5},function(e){return e.getDate()-1})),ht=ft;ft.range;function weekday(e){return newInterval(function(t){t.setDate(t.getDate()-(t.getDay()+7-e)%7),t.setHours(0,0,0,0)},function(e,t){e.setDate(e.getDate()+7*t)},function(e,t){return(t-e-(t.getTimezoneOffset()-e.getTimezoneOffset())*rt)/it})}var dt=weekday(0),pt=weekday(1),yt=weekday(2),gt=weekday(3),vt=weekday(4),mt=weekday(5),bt=weekday(6),_t=(dt.range,pt.range,yt.range,gt.range,vt.range,mt.range,bt.range,newInterval(function(e){e.setDate(1),e.setHours(0,0,0,0)},function(e,t){e.setMonth(e.getMonth()+t)},function(e,t){return t.getMonth()-e.getMonth()+12*(t.getFullYear()-e.getFullYear())},function(e){return e.getMonth()})),xt=_t,wt=(_t.range,newInterval(function(e){e.setMonth(0,1),e.setHours(0,0,0,0)},function(e,t){e.setFullYear(e.getFullYear()+t)},function(e,t){return t.getFullYear()-e.getFullYear()},function(e){return e.getFullYear()}));wt.every=function(e){return isFinite(e=Math.floor(e))&&e>0?newInterval(function(t){t.setFullYear(Math.floor(t.getFullYear()/e)*e),t.setMonth(0,1),t.setHours(0,0,0,0)},function(t,n){t.setFullYear(t.getFullYear()+n*e)}):null};var kt=wt,Ct=(wt.range,newInterval(function(e){e.setUTCSeconds(0,0)},function(e,t){e.setTime(+e+t*rt)},function(e,t){return(t-e)/rt},function(e){return e.getUTCMinutes()})),St=(Ct.range,newInterval(function(e){e.setUTCMinutes(0,0,0)},function(e,t){e.setTime(+e+36e5*t)},function(e,t){return(t-e)/36e5},function(e){return e.getUTCHours()})),Pt=(St.range,newInterval(function(e){e.setUTCHours(0,0,0,0)},function(e,t){e.setUTCDate(e.getUTCDate()+t)},function(e,t){return(t-e)/864e5},function(e){return e.getUTCDate()-1})),At=Pt;Pt.range;function utcWeekday(e){return newInterval(function(t){t.setUTCDate(t.getUTCDate()-(t.getUTCDay()+7-e)%7),t.setUTCHours(0,0,0,0)},function(e,t){e.setUTCDate(e.getUTCDate()+7*t)},function(e,t){return(t-e)/it})}var Et=utcWeekday(0),Mt=utcWeekday(1),Ot=utcWeekday(2),Tt=utcWeekday(3),Ft=utcWeekday(4),Nt=utcWeekday(5),jt=utcWeekday(6),It=(Et.range,Mt.range,Ot.range,Tt.range,Ft.range,Nt.range,jt.range,newInterval(function(e){e.setUTCDate(1),e.setUTCHours(0,0,0,0)},function(e,t){e.setUTCMonth(e.getUTCMonth()+t)},function(e,t){return t.getUTCMonth()-e.getUTCMonth()+12*(t.getUTCFullYear()-e.getUTCFullYear())},function(e){return e.getUTCMonth()})),Dt=(It.range,newInterval(function(e){e.setUTCMonth(0,1),e.setUTCHours(0,0,0,0)},function(e,t){e.setUTCFullYear(e.getUTCFullYear()+t)},function(e,t){return t.getUTCFullYear()-e.getUTCFullYear()},function(e){return e.getUTCFullYear()}));Dt.every=function(e){return isFinite(e=Math.floor(e))&&e>0?newInterval(function(t){t.setUTCFullYear(Math.floor(t.getUTCFullYear()/e)*e),t.setUTCMonth(0,1),t.setUTCHours(0,0,0,0)},function(t,n){t.setUTCFullYear(t.getUTCFullYear()+n*e)}):null};var Lt=Dt;Dt.range;function localDate(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 utcDate(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 newYear(e){return{y:e,m:0,d:1,H:0,M:0,S:0,L:0}}var Rt,Bt,zt,Ht,Vt={"-":"",_:" ",0:"0"},Ut=/^\s*\d+/,Wt=/^%/,qt=/[\\^$*+?|[\]().{}]/g;function locale_pad(e,t,n){var r=e<0?"-":"",i=(r?-e:e)+"",a=i.length;return r+(a68?1900:2e3),n+r[0].length):-1}function parseZone(e,t,n){var r=/^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(t.slice(n,n+6));return r?(e.Z=r[1]?0:-(r[2]+(r[3]||"00")),n+r[0].length):-1}function parseMonthNumber(e,t,n){var r=Ut.exec(t.slice(n,n+2));return r?(e.m=r[0]-1,n+r[0].length):-1}function parseDayOfMonth(e,t,n){var r=Ut.exec(t.slice(n,n+2));return r?(e.d=+r[0],n+r[0].length):-1}function parseDayOfYear(e,t,n){var r=Ut.exec(t.slice(n,n+3));return r?(e.m=0,e.d=+r[0],n+r[0].length):-1}function parseHour24(e,t,n){var r=Ut.exec(t.slice(n,n+2));return r?(e.H=+r[0],n+r[0].length):-1}function parseMinutes(e,t,n){var r=Ut.exec(t.slice(n,n+2));return r?(e.M=+r[0],n+r[0].length):-1}function parseSeconds(e,t,n){var r=Ut.exec(t.slice(n,n+2));return r?(e.S=+r[0],n+r[0].length):-1}function parseMilliseconds(e,t,n){var r=Ut.exec(t.slice(n,n+3));return r?(e.L=+r[0],n+r[0].length):-1}function parseMicroseconds(e,t,n){var r=Ut.exec(t.slice(n,n+6));return r?(e.L=Math.floor(r[0]/1e3),n+r[0].length):-1}function parseLiteralPercent(e,t,n){var r=Wt.exec(t.slice(n,n+1));return r?n+r[0].length:-1}function parseUnixTimestamp(e,t,n){var r=Ut.exec(t.slice(n));return r?(e.Q=+r[0],n+r[0].length):-1}function parseUnixTimestampSeconds(e,t,n){var r=Ut.exec(t.slice(n));return r?(e.Q=1e3*+r[0],n+r[0].length):-1}function formatDayOfMonth(e,t){return locale_pad(e.getDate(),t,2)}function formatHour24(e,t){return locale_pad(e.getHours(),t,2)}function formatHour12(e,t){return locale_pad(e.getHours()%12||12,t,2)}function formatDayOfYear(e,t){return locale_pad(1+ht.count(kt(e),e),t,3)}function formatMilliseconds(e,t){return locale_pad(e.getMilliseconds(),t,3)}function formatMicroseconds(e,t){return formatMilliseconds(e,t)+"000"}function formatMonthNumber(e,t){return locale_pad(e.getMonth()+1,t,2)}function formatMinutes(e,t){return locale_pad(e.getMinutes(),t,2)}function formatSeconds(e,t){return locale_pad(e.getSeconds(),t,2)}function formatWeekdayNumberMonday(e){var t=e.getDay();return 0===t?7:t}function formatWeekNumberSunday(e,t){return locale_pad(dt.count(kt(e),e),t,2)}function formatWeekNumberISO(e,t){var n=e.getDay();return e=n>=4||0===n?vt(e):vt.ceil(e),locale_pad(vt.count(kt(e),e)+(4===kt(e).getDay()),t,2)}function formatWeekdayNumberSunday(e){return e.getDay()}function formatWeekNumberMonday(e,t){return locale_pad(pt.count(kt(e),e),t,2)}function locale_formatYear(e,t){return locale_pad(e.getFullYear()%100,t,2)}function formatFullYear(e,t){return locale_pad(e.getFullYear()%1e4,t,4)}function formatZone(e){var t=e.getTimezoneOffset();return(t>0?"-":(t*=-1,"+"))+locale_pad(t/60|0,"0",2)+locale_pad(t%60,"0",2)}function formatUTCDayOfMonth(e,t){return locale_pad(e.getUTCDate(),t,2)}function formatUTCHour24(e,t){return locale_pad(e.getUTCHours(),t,2)}function formatUTCHour12(e,t){return locale_pad(e.getUTCHours()%12||12,t,2)}function formatUTCDayOfYear(e,t){return locale_pad(1+At.count(Lt(e),e),t,3)}function formatUTCMilliseconds(e,t){return locale_pad(e.getUTCMilliseconds(),t,3)}function formatUTCMicroseconds(e,t){return formatUTCMilliseconds(e,t)+"000"}function formatUTCMonthNumber(e,t){return locale_pad(e.getUTCMonth()+1,t,2)}function formatUTCMinutes(e,t){return locale_pad(e.getUTCMinutes(),t,2)}function formatUTCSeconds(e,t){return locale_pad(e.getUTCSeconds(),t,2)}function formatUTCWeekdayNumberMonday(e){var t=e.getUTCDay();return 0===t?7:t}function formatUTCWeekNumberSunday(e,t){return locale_pad(Et.count(Lt(e),e),t,2)}function formatUTCWeekNumberISO(e,t){var n=e.getUTCDay();return e=n>=4||0===n?Ft(e):Ft.ceil(e),locale_pad(Ft.count(Lt(e),e)+(4===Lt(e).getUTCDay()),t,2)}function formatUTCWeekdayNumberSunday(e){return e.getUTCDay()}function formatUTCWeekNumberMonday(e,t){return locale_pad(Mt.count(Lt(e),e),t,2)}function formatUTCYear(e,t){return locale_pad(e.getUTCFullYear()%100,t,2)}function formatUTCFullYear(e,t){return locale_pad(e.getUTCFullYear()%1e4,t,4)}function formatUTCZone(){return"+0000"}function formatLiteralPercent(){return"%"}function formatUnixTimestamp(e){return+e}function formatUnixTimestampSeconds(e){return Math.floor(+e/1e3)}!function defaultLocale_defaultLocale(e){return Rt=function formatLocale(e){var t=e.dateTime,n=e.date,r=e.time,i=e.periods,a=e.days,o=e.shortDays,u=e.months,c=e.shortMonths,s=formatRe(i),l=formatLookup(i),f=formatRe(a),h=formatLookup(a),d=formatRe(o),p=formatLookup(o),y=formatRe(u),g=formatLookup(u),v=formatRe(c),m=formatLookup(c),b={a:function formatShortWeekday(e){return o[e.getDay()]},A:function formatWeekday(e){return a[e.getDay()]},b:function formatShortMonth(e){return c[e.getMonth()]},B:function formatMonth(e){return u[e.getMonth()]},c:null,d:formatDayOfMonth,e:formatDayOfMonth,f:formatMicroseconds,H:formatHour24,I:formatHour12,j:formatDayOfYear,L:formatMilliseconds,m:formatMonthNumber,M:formatMinutes,p:function formatPeriod(e){return i[+(e.getHours()>=12)]},Q:formatUnixTimestamp,s:formatUnixTimestampSeconds,S:formatSeconds,u:formatWeekdayNumberMonday,U:formatWeekNumberSunday,V:formatWeekNumberISO,w:formatWeekdayNumberSunday,W:formatWeekNumberMonday,x:null,X:null,y:locale_formatYear,Y:formatFullYear,Z:formatZone,"%":formatLiteralPercent},_={a:function formatUTCShortWeekday(e){return o[e.getUTCDay()]},A:function formatUTCWeekday(e){return a[e.getUTCDay()]},b:function formatUTCShortMonth(e){return c[e.getUTCMonth()]},B:function formatUTCMonth(e){return u[e.getUTCMonth()]},c:null,d:formatUTCDayOfMonth,e:formatUTCDayOfMonth,f:formatUTCMicroseconds,H:formatUTCHour24,I:formatUTCHour12,j:formatUTCDayOfYear,L:formatUTCMilliseconds,m:formatUTCMonthNumber,M:formatUTCMinutes,p:function formatUTCPeriod(e){return i[+(e.getUTCHours()>=12)]},Q:formatUnixTimestamp,s:formatUnixTimestampSeconds,S:formatUTCSeconds,u:formatUTCWeekdayNumberMonday,U:formatUTCWeekNumberSunday,V:formatUTCWeekNumberISO,w:formatUTCWeekdayNumberSunday,W:formatUTCWeekNumberMonday,x:null,X:null,y:formatUTCYear,Y:formatUTCFullYear,Z:formatUTCZone,"%":formatLiteralPercent},x={a:function parseShortWeekday(e,t,n){var r=d.exec(t.slice(n));return r?(e.w=p[r[0].toLowerCase()],n+r[0].length):-1},A:function parseWeekday(e,t,n){var r=f.exec(t.slice(n));return r?(e.w=h[r[0].toLowerCase()],n+r[0].length):-1},b:function parseShortMonth(e,t,n){var r=v.exec(t.slice(n));return r?(e.m=m[r[0].toLowerCase()],n+r[0].length):-1},B:function parseMonth(e,t,n){var r=y.exec(t.slice(n));return r?(e.m=g[r[0].toLowerCase()],n+r[0].length):-1},c:function parseLocaleDateTime(e,n,r){return parseSpecifier(e,t,n,r)},d:parseDayOfMonth,e:parseDayOfMonth,f:parseMicroseconds,H:parseHour24,I:parseHour24,j:parseDayOfYear,L:parseMilliseconds,m:parseMonthNumber,M:parseMinutes,p:function parsePeriod(e,t,n){var r=s.exec(t.slice(n));return r?(e.p=l[r[0].toLowerCase()],n+r[0].length):-1},Q:parseUnixTimestamp,s:parseUnixTimestampSeconds,S:parseSeconds,u:parseWeekdayNumberMonday,U:parseWeekNumberSunday,V:parseWeekNumberISO,w:parseWeekdayNumberSunday,W:parseWeekNumberMonday,x:function parseLocaleDate(e,t,r){return parseSpecifier(e,n,t,r)},X:function parseLocaleTime(e,t,n){return parseSpecifier(e,r,t,n)},y:parseYear,Y:parseFullYear,Z:parseZone,"%":parseLiteralPercent};function newFormat(e,t){return function(n){var r,i,a,o=[],u=-1,c=0,s=e.length;for(n instanceof Date||(n=new Date(+n));++u53)return null;"w"in a||(a.w=1),"Z"in a?(r=(i=(r=utcDate(newYear(a.y))).getUTCDay())>4||0===i?Mt.ceil(r):Mt(r),r=At.offset(r,7*(a.V-1)),a.y=r.getUTCFullYear(),a.m=r.getUTCMonth(),a.d=r.getUTCDate()+(a.w+6)%7):(r=(i=(r=t(newYear(a.y))).getDay())>4||0===i?pt.ceil(r):pt(r),r=ht.offset(r,7*(a.V-1)),a.y=r.getFullYear(),a.m=r.getMonth(),a.d=r.getDate()+(a.w+6)%7)}else("W"in a||"U"in a)&&("w"in a||(a.w="u"in a?a.u%7:"W"in a?1:0),i="Z"in a?utcDate(newYear(a.y)).getUTCDay():t(newYear(a.y)).getDay(),a.m=0,a.d="W"in a?(a.w+6)%7+7*a.W-(i+5)%7:a.w+7*a.U-(i+6)%7);return"Z"in a?(a.H+=a.Z/100|0,a.M+=a.Z%100,utcDate(a)):t(a)}}function parseSpecifier(e,t,n,r){for(var i,a,o=0,u=t.length,c=n.length;o=c)return-1;if(37===(i=t.charCodeAt(o++))){if(i=t.charAt(o++),!(a=x[i in Vt?t.charAt(o++):i])||(r=a(e,n,r))<0)return-1}else if(i!=n.charCodeAt(r++))return-1}return r}return b.x=newFormat(n,b),b.X=newFormat(r,b),b.c=newFormat(t,b),_.x=newFormat(n,_),_.X=newFormat(r,_),_.c=newFormat(t,_),{format:function format(e){var t=newFormat(e+="",b);return t.toString=function(){return e},t},parse:function parse(e){var t=newParse(e+="",localDate);return t.toString=function(){return e},t},utcFormat:function utcFormat(e){var t=newFormat(e+="",_);return t.toString=function(){return e},t},utcParse:function utcParse(e){var t=newParse(e,utcDate);return t.toString=function(){return e},t}}}(e),Bt=Rt.format,Rt.parse,zt=Rt.utcFormat,Ht=Rt.utcParse,Rt}({dateTime:"%x, %X",date:"%-m/%-d/%Y",time:"%-I:%M:%S %p",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"]});Date.prototype.toISOString||zt("%Y-%m-%dT%H:%M:%S.%LZ");+new Date("2000-01-01T00:00:00.000Z")||Ht("%Y-%m-%dT%H:%M:%S.%LZ");var Gt=1e3,Yt=60*Gt,Xt=60*Yt,Kt=24*Xt,$t=7*Kt,Qt=30*Kt,Zt=365*Kt;function time_date(e){return new Date(e)}function time_number(e){return e instanceof Date?+e:+new Date(+e)}function calendar(e,t,n,r,i,a,o,u,c){var s=continuous(deinterpolateLinear,ge),l=s.invert,f=s.domain,h=c(".%L"),d=c(":%S"),p=c("%I:%M"),y=c("%I %p"),g=c("%a %d"),v=c("%b %d"),b=c("%B"),_=c("%Y"),x=[[o,1,Gt],[o,5,5*Gt],[o,15,15*Gt],[o,30,30*Gt],[a,1,Yt],[a,5,5*Yt],[a,15,15*Yt],[a,30,30*Yt],[i,1,Xt],[i,3,3*Xt],[i,6,6*Xt],[i,12,12*Xt],[r,1,Kt],[r,2,2*Kt],[n,1,$t],[t,1,Qt],[t,3,3*Qt],[e,1,Zt]];function tickFormat(u){return(o(u)1)&&(e-=Math.floor(e));var t=Math.abs(e-.5);return $n.h=360*e-100,$n.s=1.5-1.5*t,$n.l=.8-.9*t,$n+""};color_rgb(),Math.PI,Math.PI;function viridis_ramp(e){var t=e.length;return function(n){return e[Math.max(0,Math.min(t-1,Math.floor(n*t)))]}}var Zn=viridis_ramp(an("44015444025645045745055946075a46085c460a5d460b5e470d60470e6147106347116447136548146748166848176948186a481a6c481b6d481c6e481d6f481f70482071482173482374482475482576482677482878482979472a7a472c7a472d7b472e7c472f7d46307e46327e46337f463480453581453781453882443983443a83443b84433d84433e85423f854240864241864142874144874045884046883f47883f48893e49893e4a893e4c8a3d4d8a3d4e8a3c4f8a3c508b3b518b3b528b3a538b3a548c39558c39568c38588c38598c375a8c375b8d365c8d365d8d355e8d355f8d34608d34618d33628d33638d32648e32658e31668e31678e31688e30698e306a8e2f6b8e2f6c8e2e6d8e2e6e8e2e6f8e2d708e2d718e2c718e2c728e2c738e2b748e2b758e2a768e2a778e2a788e29798e297a8e297b8e287c8e287d8e277e8e277f8e27808e26818e26828e26828e25838e25848e25858e24868e24878e23888e23898e238a8d228b8d228c8d228d8d218e8d218f8d21908d21918c20928c20928c20938c1f948c1f958b1f968b1f978b1f988b1f998a1f9a8a1e9b8a1e9c891e9d891f9e891f9f881fa0881fa1881fa1871fa28720a38620a48621a58521a68522a78522a88423a98324aa8325ab8225ac8226ad8127ad8128ae8029af7f2ab07f2cb17e2db27d2eb37c2fb47c31b57b32b67a34b67935b77937b87838b9773aba763bbb753dbc743fbc7340bd7242be7144bf7046c06f48c16e4ac16d4cc26c4ec36b50c46a52c56954c56856c66758c7655ac8645cc8635ec96260ca6063cb5f65cb5e67cc5c69cd5b6ccd5a6ece5870cf5773d05675d05477d1537ad1517cd2507fd34e81d34d84d44b86d54989d5488bd6468ed64590d74393d74195d84098d83e9bd93c9dd93ba0da39a2da37a5db36a8db34aadc32addc30b0dd2fb2dd2db5de2bb8de29bade28bddf26c0df25c2df23c5e021c8e020cae11fcde11dd0e11cd2e21bd5e21ad8e219dae319dde318dfe318e2e418e5e419e7e419eae51aece51befe51cf1e51df4e61ef6e620f8e621fbe723fde725")),Jn=viridis_ramp(an("00000401000501010601010802010902020b02020d03030f03031204041405041606051806051a07061c08071e0907200a08220b09240c09260d0a290e0b2b100b2d110c2f120d31130d34140e36150e38160f3b180f3d19103f1a10421c10441d11471e114920114b21114e22115024125325125527125829115a2a115c2c115f2d11612f116331116533106734106936106b38106c390f6e3b0f703d0f713f0f72400f74420f75440f764510774710784910784a10794c117a4e117b4f127b51127c52137c54137d56147d57157e59157e5a167e5c167f5d177f5f187f601880621980641a80651a80671b80681c816a1c816b1d816d1d816e1e81701f81721f817320817521817621817822817922827b23827c23827e24828025828125818326818426818627818827818928818b29818c29818e2a81902a81912b81932b80942c80962c80982d80992d809b2e7f9c2e7f9e2f7fa02f7fa1307ea3307ea5317ea6317da8327daa337dab337cad347cae347bb0357bb2357bb3367ab5367ab73779b83779ba3878bc3978bd3977bf3a77c03a76c23b75c43c75c53c74c73d73c83e73ca3e72cc3f71cd4071cf4070d0416fd2426fd3436ed5446dd6456cd8456cd9466bdb476adc4869de4968df4a68e04c67e24d66e34e65e44f64e55064e75263e85362e95462ea5661eb5760ec5860ed5a5fee5b5eef5d5ef05f5ef1605df2625df2645cf3655cf4675cf4695cf56b5cf66c5cf66e5cf7705cf7725cf8745cf8765cf9785df9795df97b5dfa7d5efa7f5efa815ffb835ffb8560fb8761fc8961fc8a62fc8c63fc8e64fc9065fd9266fd9467fd9668fd9869fd9a6afd9b6bfe9d6cfe9f6dfea16efea36ffea571fea772fea973feaa74feac76feae77feb078feb27afeb47bfeb67cfeb77efeb97ffebb81febd82febf84fec185fec287fec488fec68afec88cfeca8dfecc8ffecd90fecf92fed194fed395fed597fed799fed89afdda9cfddc9efddea0fde0a1fde2a3fde3a5fde5a7fde7a9fde9aafdebacfcecaefceeb0fcf0b2fcf2b4fcf4b6fcf6b8fcf7b9fcf9bbfcfbbdfcfdbf")),er=viridis_ramp(an("00000401000501010601010802010a02020c02020e03021004031204031405041706041907051b08051d09061f0a07220b07240c08260d08290e092b10092d110a30120a32140b34150b37160b39180c3c190c3e1b0c411c0c431e0c451f0c48210c4a230c4c240c4f260c51280b53290b552b0b572d0b592f0a5b310a5c320a5e340a5f3609613809623909633b09643d09653e0966400a67420a68440a68450a69470b6a490b6a4a0c6b4c0c6b4d0d6c4f0d6c510e6c520e6d540f6d550f6d57106e59106e5a116e5c126e5d126e5f136e61136e62146e64156e65156e67166e69166e6a176e6c186e6d186e6f196e71196e721a6e741a6e751b6e771c6d781c6d7a1d6d7c1d6d7d1e6d7f1e6c801f6c82206c84206b85216b87216b88226a8a226a8c23698d23698f24699025689225689326679526679727669827669a28659b29649d29649f2a63a02a63a22b62a32c61a52c60a62d60a82e5fa92e5eab2f5ead305dae305cb0315bb1325ab3325ab43359b63458b73557b93556ba3655bc3754bd3853bf3952c03a51c13a50c33b4fc43c4ec63d4dc73e4cc83f4bca404acb4149cc4248ce4347cf4446d04545d24644d34743d44842d54a41d74b3fd84c3ed94d3dda4e3cdb503bdd513ade5238df5337e05536e15635e25734e35933e45a31e55c30e65d2fe75e2ee8602de9612bea632aeb6429eb6628ec6726ed6925ee6a24ef6c23ef6e21f06f20f1711ff1731df2741cf3761bf37819f47918f57b17f57d15f67e14f68013f78212f78410f8850ff8870ef8890cf98b0bf98c0af98e09fa9008fa9207fa9407fb9606fb9706fb9906fb9b06fb9d07fc9f07fca108fca309fca50afca60cfca80dfcaa0ffcac11fcae12fcb014fcb216fcb418fbb61afbb81dfbba1ffbbc21fbbe23fac026fac228fac42afac62df9c72ff9c932f9cb35f8cd37f8cf3af7d13df7d340f6d543f6d746f5d949f5db4cf4dd4ff4df53f4e156f3e35af3e55df2e661f2e865f2ea69f1ec6df1ed71f1ef75f1f179f2f27df2f482f3f586f3f68af4f88ef5f992f6fa96f8fb9af9fc9dfafda1fcffa4")),tr=viridis_ramp(an("0d088710078813078916078a19068c1b068d1d068e20068f2206902406912605912805922a05932c05942e05952f059631059733059735049837049938049a3a049a3c049b3e049c3f049c41049d43039e44039e46039f48039f4903a04b03a14c02a14e02a25002a25102a35302a35502a45601a45801a45901a55b01a55c01a65e01a66001a66100a76300a76400a76600a76700a86900a86a00a86c00a86e00a86f00a87100a87201a87401a87501a87701a87801a87a02a87b02a87d03a87e03a88004a88104a78305a78405a78606a68707a68808a68a09a58b0aa58d0ba58e0ca48f0da4910ea3920fa39410a29511a19613a19814a099159f9a169f9c179e9d189d9e199da01a9ca11b9ba21d9aa31e9aa51f99a62098a72197a82296aa2395ab2494ac2694ad2793ae2892b02991b12a90b22b8fb32c8eb42e8db52f8cb6308bb7318ab83289ba3388bb3488bc3587bd3786be3885bf3984c03a83c13b82c23c81c33d80c43e7fc5407ec6417dc7427cc8437bc9447aca457acb4679cc4778cc4977cd4a76ce4b75cf4c74d04d73d14e72d24f71d35171d45270d5536fd5546ed6556dd7566cd8576bd9586ada5a6ada5b69db5c68dc5d67dd5e66de5f65de6164df6263e06363e16462e26561e26660e3685fe4695ee56a5de56b5de66c5ce76e5be76f5ae87059e97158e97257ea7457eb7556eb7655ec7754ed7953ed7a52ee7b51ef7c51ef7e50f07f4ff0804ef1814df1834cf2844bf3854bf3874af48849f48948f58b47f58c46f68d45f68f44f79044f79143f79342f89441f89540f9973ff9983ef99a3efa9b3dfa9c3cfa9e3bfb9f3afba139fba238fca338fca537fca636fca835fca934fdab33fdac33fdae32fdaf31fdb130fdb22ffdb42ffdb52efeb72dfeb82cfeba2cfebb2bfebd2afebe2afec029fdc229fdc328fdc527fdc627fdc827fdca26fdcb26fccd25fcce25fcd025fcd225fbd324fbd524fbd724fad824fada24f9dc24f9dd25f8df25f8e125f7e225f7e425f6e626f6e826f5e926f5eb27f4ed27f3ee27f3f027f2f227f1f426f1f525f0f724f0f921")),nr={ROW_ID:"__id__"},rr={ACTION_INF:"actionInf",ON_LAYER_DRAW:"onlayerdraw"},ir=n(0),ar=n.n(ir),or=Array.prototype.slice,ur=function(e){return e},cr=1,sr=2,lr=3,fr=4,hr=1e-6;function translateX(e){return"translate("+(e+.5)+",0)"}function translateY(e){return"translate(0,"+(e+.5)+")"}function entering(){return!this.__axis}function axis_axis(e,t){var n=[],r=null,i=null,a=null,o=6,u=6,c=3,s=e===cr||e===fr?-1:1,l=e===fr||e===sr?"x":"y",f=e===cr||e===lr?translateX:translateY;function axis(h){var d=null==r?t.ticks?t.ticks.apply(t,n):t.domain():r,p=null==i?t.tickFormat?t.tickFormat.apply(t,n):ur:i,y=Math.max(o,0)+c,g=t.range(),v=+g[0]+.5,m=+g[g.length-1]+.5,b=(t.bandwidth?function axis_center(e){var t=Math.max(0,e.bandwidth()-1)/2;return e.round()&&(t=Math.round(t)),function(n){return+e(n)+t}}:function axis_number(e){return function(t){return+e(t)}})(t.copy()),_=h.selection?h.selection():h,x=_.selectAll(".domain").data([null]),w=_.selectAll(".tick").data(d,t).order(),k=w.exit(),C=w.enter().append("g").attr("class","tick"),S=w.select("line"),P=w.select("text");x=x.merge(x.enter().insert("path",".tick").attr("class","domain").attr("stroke","#000")),w=w.merge(C),S=S.merge(C.append("line").attr("stroke","#000").attr(l+"2",s*o)),P=P.merge(C.append("text").attr("fill","#000").attr(l,s*y).attr("dy",e===cr?"0em":e===lr?"0.71em":"0.32em")).style("transform",a),h!==_&&(x=x.transition(h),w=w.transition(h),S=S.transition(h),P=P.transition(h),k=k.transition(h).attr("opacity",hr).attr("transform",function(e){return isFinite(e=b(e))?f(e):this.getAttribute("transform")}),C.attr("opacity",hr).attr("transform",function(e){var t=this.parentNode.__axis;return f(t&&isFinite(t=t(e))?t:b(e))})),k.remove(),x.attr("d",e===fr||e==sr?"M"+s*u+","+v+"H0.5V"+m+"H"+s*u:"M"+v+","+s*u+"V0.5H"+m+"V"+s*u),w.attr("opacity",1).attr("transform",function(e){return f(b(e))}),S.attr(l+"2",s*o),P.attr(l,s*y).text(p),_.filter(entering).attr("fill","none").attr("font-size",10).attr("font-family","sans-serif").attr("text-anchor",e===sr?"start":e===fr?"end":"middle"),_.each(function(){this.__axis=b})}return axis.scale=function(e){return arguments.length?(t=e,axis):t},axis.tickTransform=function(e){return arguments.length?(a=e,axis):a},axis.ticks=function(){return n=or.call(arguments),axis},axis.tickArguments=function(e){return arguments.length?(n=null==e?[]:or.call(e),axis):n.slice()},axis.tickValues=function(e){return arguments.length?(r=null==e?null:or.call(e),axis):r&&r.slice()},axis.tickFormat=function(e){return arguments.length?(i=e,axis):i},axis.tickSize=function(e){return arguments.length?(o=u=+e,axis):o},axis.tickSizeInner=function(e){return arguments.length?(o=+e,axis):o},axis.tickSizeOuter=function(e){return arguments.length?(u=+e,axis):u},axis.tickPadding=function(e){return arguments.length?(c=+e,axis):c},axis}var dr=Math.PI,pr=2*dr,yr=pr-1e-6;function Path(){this._x0=this._y0=this._x1=this._y1=null,this._=""}function path_path(){return new Path}Path.prototype=path_path.prototype={constructor:Path,moveTo:function moveTo(e,t){this._+="M"+(this._x0=this._x1=+e)+","+(this._y0=this._y1=+t)},closePath:function closePath(){null!==this._x1&&(this._x1=this._x0,this._y1=this._y0,this._+="Z")},lineTo:function lineTo(e,t){this._+="L"+(this._x1=+e)+","+(this._y1=+t)},quadraticCurveTo:function quadraticCurveTo(e,t,n,r){this._+="Q"+ +e+","+ +t+","+(this._x1=+n)+","+(this._y1=+r)},bezierCurveTo:function bezierCurveTo(e,t,n,r,i,a){this._+="C"+ +e+","+ +t+","+ +n+","+ +r+","+(this._x1=+i)+","+(this._y1=+a)},arcTo:function arcTo(e,t,n,r,i){e=+e,t=+t,n=+n,r=+r,i=+i;var a=this._x1,o=this._y1,u=n-e,c=r-t,s=a-e,l=o-t,f=s*s+l*l;if(i<0)throw new Error("negative radius: "+i);if(null===this._x1)this._+="M"+(this._x1=e)+","+(this._y1=t);else if(f>1e-6)if(Math.abs(l*u-c*s)>1e-6&&i){var h=n-a,d=r-o,p=u*u+c*c,y=h*h+d*d,g=Math.sqrt(p),v=Math.sqrt(f),m=i*Math.tan((dr-Math.acos((p+f-y)/(2*g*v)))/2),b=m/v,_=m/g;Math.abs(b-1)>1e-6&&(this._+="L"+(e+b*s)+","+(t+b*l)),this._+="A"+i+","+i+",0,0,"+ +(l*h>s*d)+","+(this._x1=e+_*u)+","+(this._y1=t+_*c)}else this._+="L"+(this._x1=e)+","+(this._y1=t);else;},arc:function arc(e,t,n,r,i,a){e=+e,t=+t;var o=(n=+n)*Math.cos(r),u=n*Math.sin(r),c=e+o,s=t+u,l=1^a,f=a?r-i:i-r;if(n<0)throw new Error("negative radius: "+n);null===this._x1?this._+="M"+c+","+s:(Math.abs(this._x1-c)>1e-6||Math.abs(this._y1-s)>1e-6)&&(this._+="L"+c+","+s),n&&(f<0&&(f=f%pr+pr),f>yr?this._+="A"+n+","+n+",0,1,"+l+","+(e-o)+","+(t-u)+"A"+n+","+n+",0,1,"+l+","+(this._x1=c)+","+(this._y1=s):f>1e-6&&(this._+="A"+n+","+n+",0,"+ +(f>=dr)+","+l+","+(this._x1=e+n*Math.cos(i))+","+(this._y1=t+n*Math.sin(i))))},rect:function rect(e,t,n,r){this._+="M"+(this._x0=this._x1=+e)+","+(this._y0=this._y1=+t)+"h"+ +n+"v"+ +r+"h"+-n+"Z"},toString:function toString(){return this._}};var gr=path_path,vr=function(e){return function constant(){return e}},mr=Math.abs,br=Math.atan2,_r=Math.cos,xr=Math.max,wr=Math.min,kr=Math.sin,Cr=Math.sqrt,Sr=1e-12,Pr=Math.PI,Ar=Pr/2,Er=2*Pr;function asin(e){return e>=1?Ar:e<=-1?-Ar:Math.asin(e)}function arcInnerRadius(e){return e.innerRadius}function arcOuterRadius(e){return e.outerRadius}function arcStartAngle(e){return e.startAngle}function arcEndAngle(e){return e.endAngle}function arcPadAngle(e){return e&&e.padAngle}function cornerTangents(e,t,n,r,i,a,o){var u=e-n,c=t-r,s=(o?a:-a)/Cr(u*u+c*c),l=s*c,f=-s*u,h=e+l,d=t+f,p=n+l,y=r+f,g=(h+p)/2,v=(d+y)/2,m=p-h,b=y-d,_=m*m+b*b,x=i-a,w=h*y-p*d,k=(b<0?-1:1)*Cr(xr(0,x*x*_-w*w)),C=(w*b-m*k)/_,S=(-w*m-b*k)/_,P=(w*b+m*k)/_,A=(-w*m+b*k)/_,E=C-g,M=S-v,O=P-g,T=A-v;return E*E+M*M>O*O+T*T&&(C=P,S=A),{cx:C,cy:S,x01:-l,y01:-f,x11:C*(i/x-1),y11:S*(i/x-1)}}function Linear(e){this._context=e}Linear.prototype={areaStart:function areaStart(){this._line=0},areaEnd:function areaEnd(){this._line=NaN},lineStart:function lineStart(){this._point=0},lineEnd:function lineEnd(){(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function point(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;default:this._context.lineTo(e,t)}}};var Mr=function(e){return new Linear(e)};function point_x(e){return e[0]}function point_y(e){return e[1]}var Or=function(){var e=point_x,t=point_y,n=vr(!0),r=null,i=Mr,a=null;function line(o){var u,c,s,l=o.length,f=!1;for(null==r&&(a=i(s=gr())),u=0;u<=l;++u)!(u=l;--f)u.point(g[f],v[f]);u.lineEnd(),u.areaEnd()}y&&(g[s]=+e(h,s,c),v[s]=+n(h,s,c),u.point(t?+t(h,s,c):g[s],r?+r(h,s,c):v[s]))}if(d)return u=null,d+""||null}function arealine(){return Or().defined(i).curve(o).context(a)}return area.x=function(n){return arguments.length?(e="function"==typeof n?n:vr(+n),t=null,area):e},area.x0=function(t){return arguments.length?(e="function"==typeof t?t:vr(+t),area):e},area.x1=function(e){return arguments.length?(t=null==e?null:"function"==typeof e?e:vr(+e),area):t},area.y=function(e){return arguments.length?(n="function"==typeof e?e:vr(+e),r=null,area):n},area.y0=function(e){return arguments.length?(n="function"==typeof e?e:vr(+e),area):n},area.y1=function(e){return arguments.length?(r=null==e?null:"function"==typeof e?e:vr(+e),area):r},area.lineX0=area.lineY0=function(){return arealine().x(e).y(n)},area.lineY1=function(){return arealine().x(e).y(r)},area.lineX1=function(){return arealine().x(t).y(n)},area.defined=function(e){return arguments.length?(i="function"==typeof e?e:vr(!!e),area):i},area.curve=function(e){return arguments.length?(o=e,null!=a&&(u=o(a)),area):o},area.context=function(e){return arguments.length?(null==e?a=u=null:u=o(a=e),area):a},area},Fr=function(e,t){return te?1:t>=e?0:NaN},Nr=function(e){return e};curveRadial(Mr);function Radial(e){this._curve=e}function curveRadial(e){function radial(t){return new Radial(e(t))}return radial._curve=e,radial}Radial.prototype={areaStart:function areaStart(){this._curve.areaStart()},areaEnd:function areaEnd(){this._curve.areaEnd()},lineStart:function lineStart(){this._curve.lineStart()},lineEnd:function lineEnd(){this._curve.lineEnd()},point:function point(e,t){this._curve.point(t*Math.sin(e),t*-Math.cos(e))}};var jr=Array.prototype.slice;var Ir={draw:function draw(e,t){var n=Math.sqrt(t/Pr);e.moveTo(n,0),e.arc(0,0,n,0,Er)}},Dr={draw:function draw(e,t){var n=Math.sqrt(t/5)/2;e.moveTo(-3*n,-n),e.lineTo(-n,-n),e.lineTo(-n,-3*n),e.lineTo(n,-3*n),e.lineTo(n,-n),e.lineTo(3*n,-n),e.lineTo(3*n,n),e.lineTo(n,n),e.lineTo(n,3*n),e.lineTo(-n,3*n),e.lineTo(-n,n),e.lineTo(-3*n,n),e.closePath()}},Lr=Math.sqrt(1/3),Rr=2*Lr,Br={draw:function draw(e,t){var n=Math.sqrt(t/Rr),r=n*Lr;e.moveTo(0,-n),e.lineTo(r,0),e.lineTo(0,n),e.lineTo(-r,0),e.closePath()}},zr=Math.sin(Pr/10)/Math.sin(7*Pr/10),Hr=Math.sin(Er/10)*zr,Vr=-Math.cos(Er/10)*zr,Ur={draw:function draw(e,t){var n=Math.sqrt(.8908130915292852*t),r=Hr*n,i=Vr*n;e.moveTo(0,-n),e.lineTo(r,i);for(var a=1;a<5;++a){var o=Er*a/5,u=Math.cos(o),c=Math.sin(o);e.lineTo(c*n,-u*n),e.lineTo(u*r-c*i,c*r+u*i)}e.closePath()}},Wr={draw:function draw(e,t){var n=Math.sqrt(t),r=-n/2;e.rect(r,r,n,n)}},qr=Math.sqrt(3),Gr={draw:function draw(e,t){var n=-Math.sqrt(t/(3*qr));e.moveTo(0,2*n),e.lineTo(-qr*n,-n),e.lineTo(qr*n,-n),e.closePath()}},Yr=Math.sqrt(3)/2,Xr=1/Math.sqrt(12),Kr=3*(Xr/2+1),$r={draw:function draw(e,t){var n=Math.sqrt(t/Kr),r=n/2,i=n*Xr,a=r,o=n*Xr+n,u=-a,c=o;e.moveTo(r,i),e.lineTo(a,o),e.lineTo(u,c),e.lineTo(-.5*r-Yr*i,Yr*r+-.5*i),e.lineTo(-.5*a-Yr*o,Yr*a+-.5*o),e.lineTo(-.5*u-Yr*c,Yr*u+-.5*c),e.lineTo(-.5*r+Yr*i,-.5*i-Yr*r),e.lineTo(-.5*a+Yr*o,-.5*o-Yr*a),e.lineTo(-.5*u+Yr*c,-.5*c-Yr*u),e.closePath()}},Qr=function(){};function _point(e,t,n){e._context.bezierCurveTo((2*e._x0+e._x1)/3,(2*e._y0+e._y1)/3,(e._x0+2*e._x1)/3,(e._y0+2*e._y1)/3,(e._x0+4*e._x1+t)/6,(e._y0+4*e._y1+n)/6)}function Basis(e){this._context=e}Basis.prototype={areaStart:function areaStart(){this._line=0},areaEnd:function areaEnd(){this._line=NaN},lineStart:function lineStart(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function lineEnd(){switch(this._point){case 3:_point(this,this._x1,this._y1);case 2:this._context.lineTo(this._x1,this._y1)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function point(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;break;case 2:this._point=3,this._context.lineTo((5*this._x0+this._x1)/6,(5*this._y0+this._y1)/6);default:_point(this,e,t)}this._x0=this._x1,this._x1=e,this._y0=this._y1,this._y1=t}};function BasisClosed(e){this._context=e}BasisClosed.prototype={areaStart:Qr,areaEnd:Qr,lineStart:function lineStart(){this._x0=this._x1=this._x2=this._x3=this._x4=this._y0=this._y1=this._y2=this._y3=this._y4=NaN,this._point=0},lineEnd:function lineEnd(){switch(this._point){case 1:this._context.moveTo(this._x2,this._y2),this._context.closePath();break;case 2:this._context.moveTo((this._x2+2*this._x3)/3,(this._y2+2*this._y3)/3),this._context.lineTo((this._x3+2*this._x2)/3,(this._y3+2*this._y2)/3),this._context.closePath();break;case 3:this.point(this._x2,this._y2),this.point(this._x3,this._y3),this.point(this._x4,this._y4)}},point:function point(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._x2=e,this._y2=t;break;case 1:this._point=2,this._x3=e,this._y3=t;break;case 2:this._point=3,this._x4=e,this._y4=t,this._context.moveTo((this._x0+4*this._x1+e)/6,(this._y0+4*this._y1+t)/6);break;default:_point(this,e,t)}this._x0=this._x1,this._x1=e,this._y0=this._y1,this._y1=t}};function BasisOpen(e){this._context=e}BasisOpen.prototype={areaStart:function areaStart(){this._line=0},areaEnd:function areaEnd(){this._line=NaN},lineStart:function lineStart(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function lineEnd(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function point(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3;var n=(this._x0+4*this._x1+e)/6,r=(this._y0+4*this._y1+t)/6;this._line?this._context.lineTo(n,r):this._context.moveTo(n,r);break;case 3:this._point=4;default:_point(this,e,t)}this._x0=this._x1,this._x1=e,this._y0=this._y1,this._y1=t}};function Bundle(e,t){this._basis=new Basis(e),this._beta=t}Bundle.prototype={lineStart:function lineStart(){this._x=[],this._y=[],this._basis.lineStart()},lineEnd:function lineEnd(){var e=this._x,t=this._y,n=e.length-1;if(n>0)for(var r,i=e[0],a=t[0],o=e[n]-i,u=t[n]-a,c=-1;++c<=n;)r=c/n,this._basis.point(this._beta*e[c]+(1-this._beta)*(i+r*o),this._beta*t[c]+(1-this._beta)*(a+r*u));this._x=this._y=null,this._basis.lineEnd()},point:function point(e,t){this._x.push(+e),this._y.push(+t)}};(function custom(e){function bundle(t){return 1===e?new Basis(t):new Bundle(t,e)}return bundle.beta=function(e){return custom(+e)},bundle})(.85);function cardinal_point(e,t,n){e._context.bezierCurveTo(e._x1+e._k*(e._x2-e._x0),e._y1+e._k*(e._y2-e._y0),e._x2+e._k*(e._x1-t),e._y2+e._k*(e._y1-n),e._x2,e._y2)}function Cardinal(e,t){this._context=e,this._k=(1-t)/6}Cardinal.prototype={areaStart:function areaStart(){this._line=0},areaEnd:function areaEnd(){this._line=NaN},lineStart:function lineStart(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},lineEnd:function lineEnd(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:cardinal_point(this,this._x1,this._y1)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function point(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2,this._x1=e,this._y1=t;break;case 2:this._point=3;default:cardinal_point(this,e,t)}this._x0=this._x1,this._x1=this._x2,this._x2=e,this._y0=this._y1,this._y1=this._y2,this._y2=t}};(function custom(e){function cardinal(t){return new Cardinal(t,e)}return cardinal.tension=function(e){return custom(+e)},cardinal})(0);function CardinalClosed(e,t){this._context=e,this._k=(1-t)/6}CardinalClosed.prototype={areaStart:Qr,areaEnd:Qr,lineStart:function lineStart(){this._x0=this._x1=this._x2=this._x3=this._x4=this._x5=this._y0=this._y1=this._y2=this._y3=this._y4=this._y5=NaN,this._point=0},lineEnd:function lineEnd(){switch(this._point){case 1:this._context.moveTo(this._x3,this._y3),this._context.closePath();break;case 2:this._context.lineTo(this._x3,this._y3),this._context.closePath();break;case 3:this.point(this._x3,this._y3),this.point(this._x4,this._y4),this.point(this._x5,this._y5)}},point:function point(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._x3=e,this._y3=t;break;case 1:this._point=2,this._context.moveTo(this._x4=e,this._y4=t);break;case 2:this._point=3,this._x5=e,this._y5=t;break;default:cardinal_point(this,e,t)}this._x0=this._x1,this._x1=this._x2,this._x2=e,this._y0=this._y1,this._y1=this._y2,this._y2=t}};(function custom(e){function cardinal(t){return new CardinalClosed(t,e)}return cardinal.tension=function(e){return custom(+e)},cardinal})(0);function CardinalOpen(e,t){this._context=e,this._k=(1-t)/6}CardinalOpen.prototype={areaStart:function areaStart(){this._line=0},areaEnd:function areaEnd(){this._line=NaN},lineStart:function lineStart(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},lineEnd:function lineEnd(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function point(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3,this._line?this._context.lineTo(this._x2,this._y2):this._context.moveTo(this._x2,this._y2);break;case 3:this._point=4;default:cardinal_point(this,e,t)}this._x0=this._x1,this._x1=this._x2,this._x2=e,this._y0=this._y1,this._y1=this._y2,this._y2=t}};(function custom(e){function cardinal(t){return new CardinalOpen(t,e)}return cardinal.tension=function(e){return custom(+e)},cardinal})(0);function catmullRom_point(e,t,n){var r=e._x1,i=e._y1,a=e._x2,o=e._y2;if(e._l01_a>Sr){var u=2*e._l01_2a+3*e._l01_a*e._l12_a+e._l12_2a,c=3*e._l01_a*(e._l01_a+e._l12_a);r=(r*u-e._x0*e._l12_2a+e._x2*e._l01_2a)/c,i=(i*u-e._y0*e._l12_2a+e._y2*e._l01_2a)/c}if(e._l23_a>Sr){var s=2*e._l23_2a+3*e._l23_a*e._l12_a+e._l12_2a,l=3*e._l23_a*(e._l23_a+e._l12_a);a=(a*s+e._x1*e._l23_2a-t*e._l12_2a)/l,o=(o*s+e._y1*e._l23_2a-n*e._l12_2a)/l}e._context.bezierCurveTo(r,i,a,o,e._x2,e._y2)}function CatmullRom(e,t){this._context=e,this._alpha=t}CatmullRom.prototype={areaStart:function areaStart(){this._line=0},areaEnd:function areaEnd(){this._line=NaN},lineStart:function lineStart(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function lineEnd(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:this.point(this._x2,this._y2)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function point(e,t){if(e=+e,t=+t,this._point){var n=this._x2-e,r=this._y2-t;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(n*n+r*r,this._alpha))}switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;break;case 2:this._point=3;default:catmullRom_point(this,e,t)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=e,this._y0=this._y1,this._y1=this._y2,this._y2=t}};var Zr=function custom(e){function catmullRom(t){return e?new CatmullRom(t,e):new Cardinal(t,0)}return catmullRom.alpha=function(e){return custom(+e)},catmullRom}(.5);function CatmullRomClosed(e,t){this._context=e,this._alpha=t}CatmullRomClosed.prototype={areaStart:Qr,areaEnd:Qr,lineStart:function lineStart(){this._x0=this._x1=this._x2=this._x3=this._x4=this._x5=this._y0=this._y1=this._y2=this._y3=this._y4=this._y5=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function lineEnd(){switch(this._point){case 1:this._context.moveTo(this._x3,this._y3),this._context.closePath();break;case 2:this._context.lineTo(this._x3,this._y3),this._context.closePath();break;case 3:this.point(this._x3,this._y3),this.point(this._x4,this._y4),this.point(this._x5,this._y5)}},point:function point(e,t){if(e=+e,t=+t,this._point){var n=this._x2-e,r=this._y2-t;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(n*n+r*r,this._alpha))}switch(this._point){case 0:this._point=1,this._x3=e,this._y3=t;break;case 1:this._point=2,this._context.moveTo(this._x4=e,this._y4=t);break;case 2:this._point=3,this._x5=e,this._y5=t;break;default:catmullRom_point(this,e,t)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=e,this._y0=this._y1,this._y1=this._y2,this._y2=t}};(function custom(e){function catmullRom(t){return e?new CatmullRomClosed(t,e):new CardinalClosed(t,0)}return catmullRom.alpha=function(e){return custom(+e)},catmullRom})(.5);function CatmullRomOpen(e,t){this._context=e,this._alpha=t}CatmullRomOpen.prototype={areaStart:function areaStart(){this._line=0},areaEnd:function areaEnd(){this._line=NaN},lineStart:function lineStart(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function lineEnd(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function point(e,t){if(e=+e,t=+t,this._point){var n=this._x2-e,r=this._y2-t;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(n*n+r*r,this._alpha))}switch(this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3,this._line?this._context.lineTo(this._x2,this._y2):this._context.moveTo(this._x2,this._y2);break;case 3:this._point=4;default:catmullRom_point(this,e,t)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=e,this._y0=this._y1,this._y1=this._y2,this._y2=t}};(function custom(e){function catmullRom(t){return e?new CatmullRomOpen(t,e):new CardinalOpen(t,0)}return catmullRom.alpha=function(e){return custom(+e)},catmullRom})(.5);function LinearClosed(e){this._context=e}LinearClosed.prototype={areaStart:Qr,areaEnd:Qr,lineStart:function lineStart(){this._point=0},lineEnd:function lineEnd(){this._point&&this._context.closePath()},point:function point(e,t){e=+e,t=+t,this._point?this._context.lineTo(e,t):(this._point=1,this._context.moveTo(e,t))}};function monotone_sign(e){return e<0?-1:1}function slope3(e,t,n){var r=e._x1-e._x0,i=t-e._x1,a=(e._y1-e._y0)/(r||i<0&&-0),o=(n-e._y1)/(i||r<0&&-0),u=(a*i+o*r)/(r+i);return(monotone_sign(a)+monotone_sign(o))*Math.min(Math.abs(a),Math.abs(o),.5*Math.abs(u))||0}function slope2(e,t){var n=e._x1-e._x0;return n?(3*(e._y1-e._y0)/n-t)/2:t}function monotone_point(e,t,n){var r=e._x0,i=e._y0,a=e._x1,o=e._y1,u=(a-r)/3;e._context.bezierCurveTo(r+u,i+u*t,a-u,o-u*n,a,o)}function MonotoneX(e){this._context=e}function MonotoneY(e){this._context=new ReflectContext(e)}function ReflectContext(e){this._context=e}function Natural(e){this._context=e}function controlPoints(e){var t,n,r=e.length-1,i=new Array(r),a=new Array(r),o=new Array(r);for(i[0]=0,a[0]=2,o[0]=e[0]+2*e[1],t=1;t=0;--t)i[t]=(o[t]-i[t+1])/a[t];for(a[r-1]=(e[r]+i[r-1])/2,t=0;t=0&&(this._t=1-this._t,this._line=1-this._line)},point:function point(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;default:if(this._t<=0)this._context.lineTo(this._x,t),this._context.lineTo(e,t);else{var n=this._x*(1-this._t)+e*this._t;this._context.lineTo(n,this._y),this._context.lineTo(n,t)}}this._x=e,this._y=t}};var Jr=function(e){return new Step(e,.5)};function stepBefore(e){return new Step(e,0)}function stepAfter(e){return new Step(e,1)}var ei=function(e,t){if((i=e.length)>1)for(var n,r,i,a=1,o=e[t[0]],u=o.length;a=0;)n[t]=t;return n};function stackValue(e,t){return e[t]}var ni=function(e){var t=e.map(ascending_sum);return ti(e).sort(function(e,n){return t[e]-t[n]})};function ascending_sum(e){for(var t,n=0,r=-1,i=e.length;++r0)){if(a/=h,h<0){if(a0){if(a>f)return;a>l&&(l=a)}if(a=r-c,h||!(a<0)){if(a/=h,h<0){if(a>f)return;a>l&&(l=a)}else if(h>0){if(a0)){if(a/=d,d<0){if(a0){if(a>f)return;a>l&&(l=a)}if(a=i-s,d||!(a<0)){if(a/=d,d<0){if(a>f)return;a>l&&(l=a)}else if(d>0){if(a0||f<1)||(l>0&&(e[0]=[c+l*h,s+l*d]),f<1&&(e[1]=[c+f*h,s+f*d]),!0)}}}}}function connectEdge(e,t,n,r,i){var a=e[1];if(a)return!0;var o,u,c=e[0],s=e.left,l=e.right,f=s[0],h=s[1],d=l[0],p=l[1],y=(f+d)/2,g=(h+p)/2;if(p===h){if(y=r)return;if(f>d){if(c){if(c[1]>=i)return}else c=[y,n];a=[y,i]}else{if(c){if(c[1]1)if(f>d){if(c){if(c[1]>=i)return}else c=[(n-u)/o,n];a=[(i-u)/o,i]}else{if(c){if(c[1]=r)return}else c=[t,o*t+u];a=[r,o*r+u]}else{if(c){if(c[0]=-Ai)){var d=c*c+s*s,p=l*l+f*f,y=(f*d-s*p)/h,g=(c*p-l*d)/h,v=_i.pop()||new function Circle(){RedBlackNode(this),this.x=this.y=this.arc=this.site=this.cy=null};v.arc=e,v.site=i,v.x=y+o,v.y=(v.cy=g+u)+Math.sqrt(y*y+g*g),e.circle=v;for(var m=null,b=Ci._;b;)if(v.yPi)u=u.L;else{if(!((i=a-rightBreakPoint(u,o))>Pi)){r>-Pi?(t=u.P,n=u):i>-Pi?(t=u,n=u.N):t=n=u;break}if(!u.R){t=u;break}u=u.R}!function createCell(e){return ki[e.index]={site:e,halfedges:[]}}(e);var c=createBeach(e);if(wi.insert(t,c),t||n){if(t===n)return detachCircle(t),n=createBeach(t.site),wi.insert(c,n),c.edge=n.edge=createEdge(t.site,c.site),attachCircle(t),void attachCircle(n);if(n){detachCircle(t),detachCircle(n);var s=t.site,l=s[0],f=s[1],h=e[0]-l,d=e[1]-f,p=n.site,y=p[0]-l,g=p[1]-f,v=2*(h*g-d*y),m=h*h+d*d,b=y*y+g*g,_=[(g*m-d*b)/v+l,(h*b-y*m)/v+f];setEdgeEnd(n.edge,s,p,_),c.edge=createEdge(s,e,null,_),n.edge=createEdge(e,p,null,_),attachCircle(t),attachCircle(n)}else c.edge=createEdge(t.site,c.site)}}function leftBreakPoint(e,t){var n=e.site,r=n[0],i=n[1],a=i-t;if(!a)return r;var o=e.P;if(!o)return-1/0;var u=(n=o.site)[0],c=n[1],s=c-t;if(!s)return u;var l=u-r,f=1/a-1/s,h=l/s;return f?(-h+Math.sqrt(h*h-2*f*(l*l/(-2*s)-c+s/2+i-a/2)))/f+r:(r+u)/2}function rightBreakPoint(e,t){var n=e.N;if(n)return leftBreakPoint(n,t);var r=e.site;return r[1]===t?r[0]:1/0}var wi,ki,Ci,Si,Pi=1e-6,Ai=1e-12;function triangleArea(e,t,n){return(e[0]-n[0])*(t[1]-e[1])-(e[0]-t[0])*(n[1]-e[1])}function lexicographic(e,t){return t[1]-e[1]||t[0]-e[0]}function Diagram(e,t){var n,r,i,a=e.sort(lexicographic).pop();for(Si=[],ki=new Array(e.length),wi=new mi,Ci=new mi;;)if(i=bi,a&&(!i||a[1]Pi||Math.abs(i[0][1]-i[1][1])>Pi)||delete Si[a]}(o,u,c,s),function clipCells(e,t,n,r){var i,a,o,u,c,s,l,f,h,d,p,y,g=ki.length,v=!0;for(i=0;iPi||Math.abs(y-h)>Pi)&&(c.splice(u,0,Si.push(createBorderEdge(o,d,Math.abs(p-e)Pi?[e,Math.abs(f-e)Pi?[Math.abs(h-r)Pi?[n,Math.abs(f-n)Pi?[Math.abs(h-t)=u)return null;var c=e-i.site[0],s=t-i.site[1],l=c*c+s*s;do{i=a.cells[r=o],o=null,i.halfedges.forEach(function(n){var r=a.edges[n],u=r.left;if(u!==i.site&&u||(u=r.right)){var c=e-u[0],s=t-u[1],f=c*c+s*s;ft?0===i?i:"left"===n?i-1:i:i===e.length-1?i:"left"===n?i:i+1},Gi=(requestAnimationFrame,cancelAnimationFrame,function getQualifiedClassName(e,t,n){return[n+"-"+(e=e.replace(/^\.*/,"")),n+"-"+e+"-"+t]}),Yi=function defaultValue(e,t){return void 0===e||"object"===(void 0===e?"undefined":Ii(e))&&!e?t:e},Xi=function objectIterator(e,t){for(var n in e)Object.hasOwnProperty.call(e,n)&&t(n,e)},Ki=function(){function Voronoi(e){_classCallCheck(this,Voronoi),this._voronoi=Oi().x(function(e){return e.x}).y(function(e){return e.y}),this.data(e)}return ji(Voronoi,[{key:"data",value:function data(e){return e&&(this._voronoiFn=this._voronoi(e)),this}},{key:"find",value:function find(e,t,n){return this._voronoiFn.find(e,t,n)}}]),Voronoi}(),$i=function(){function Store(e){_classCallCheck(this,Store),this.model=Fi.a.create(e),this._listeners=[]}return ji(Store,[{key:"serialize",value:function serialize(){return this.model.serialize()}},{key:"commit",value:function commit(e,t){this.model.prop(e,t)}},{key:"registerChangeListener",value:function registerChangeListener(e,t,n){var r=e;Array.isArray(e)||(r=[e]);var i=this.model.next(r,t,n);return this._listeners.push(i),this}},{key:"registerImmediateListener",value:function registerImmediateListener(e,t,n){var r=e;Array.isArray(e)||(r=[e]);var i=this.model.on(r,t,n);return this._listeners.push(i),this}},{key:"get",value:function get(e){return this.model.prop(e)}},{key:"computed",value:function computed(e,t){return this.model.calculatedProp(e,t)}},{key:"unsubscribeAll",value:function unsubscribeAll(){this._listeners.forEach(function(e){return e()})}}]),Store}(),Qi=function intSanitizer(e){var t=e.toString().match(/(\d+)(px)*/g);return t?parseInt(t[0],10):null},Zi=function transactor(e,t,n){var r=void 0,i=n&&n instanceof Fi.a?n:Fi.a.create({}),a=function _loop(n){({}).hasOwnProperty.call(t,n)&&(r=t[n],i.prop(n)||i.append(_defineProperty({},n,r.value)),e[n]=function(t,r,a){return function(){for(var o=arguments.length,u=Array(o),c=0;c=0;n--)if(e[n]!==t[n])return!1;return!0}(t,n):"Object"===e?Object.is(t,n):t===n}},ta={INTERFACE_IMPL:"Method not implemented"},na=function mergeRecursive(e,t){for(var n in t)Di(e[n])&&Di(t[n])?mergeRecursive(e[n],t[n]):t[n]instanceof Object&&t[n].constructor===Object?(e[n]={},mergeRecursive(e[n],t[n])):e[n]=t[n];return e},ra=function interpolator(){return Pe},ia=function numberInterpolator(){return ge},aa=function piecewiseInterpolator(){return piecewise_piecewise};var oa=function rgbToHsv(e,t,n){var r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:1;e=+e,t=+t,n=+n,r=+r,e/=255,t/=255,n/=255;var i=Math.max(e,t,n),a=Math.min(e,t,n),o=void 0,u=void 0,c=(i+a)/2;if(i===a)o=u=0;else{var s=i-a;switch(u=c>.5?s/(2-i-a):s/(i+a),i){case e:o=(t-n)/s+(t=i[0]&&r<=i[1]})},{saveChild:!1,mode:n})},sa=function getDataModelFromIdentifiers(e,t,n){var r=void 0;if(t instanceof Array){var i=e.getFieldsConfig(),a=t.slice(1,t.length);if(t instanceof Function)r=t(e,{},!1);else if(t instanceof Array&&t[0].length){var o=t[0].filter(function(e){return e in i});r=e.select(function(e){var t=!0;return o.forEach(function(n,r){var i=e[n].valueOf(),o=a.findIndex(function(e){return e[r]===i});t=t&&-1!==o}),t},{saveChild:!1,mode:n})}}else r=ca(e,t,n);return r},la=function registerListeners(e,t){var n=t(e);for(var r in n)if({}.hasOwnProperty.call(n,r)){var i=n[r],a=i.type,o=i.props,u=i.listener;e.store()[a](o,u)}},fa=function isValidValue(e){return!isNaN(e)&&e!==-1/0&&e!==1/0},ha=function getObjProp(e){for(var t=arguments.length,n=Array(t>1?t-1:0),r=1;r1)for(var n,r,i,a,o,u,c=0,s=e[t[0]].length;c=0?(r[0]=a,r[1]=a+=i):i<0?(r[1]=o,r[0]=o+=i):r[0]=a}),_defineProperty(Mi,"none",ei),_defineProperty(Mi,"expand",function(e,t){if((r=e.length)>0){for(var n,r,i,a=0,o=e[0].length;a0&&(r=(n=e[t[0]]).length)>0){for(var n,r,i,a=0,o=1;o0&&(d+=f);for(null!=t?p.sort(function(e,n){return t(y[e],y[n])}):null!=n&&p.sort(function(e,t){return n(o[e],o[t])}),u=0,s=d?(v-h*b)/d:0;u0?f*s:0)+b,y[c]={data:o[c],index:u,value:f,startAngle:g,endAngle:l,padAngle:m};return y}return pie.value=function(t){return arguments.length?(e="function"==typeof t?t:vr(+t),pie):e},pie.sortValues=function(e){return arguments.length?(t=e,n=null,pie):t},pie.sort=function(e){return arguments.length?(n=e,t=null,pie):n},pie.startAngle=function(e){return arguments.length?(r="function"==typeof e?e:vr(+e),pie):r},pie.endAngle=function(e){return arguments.length?(i="function"==typeof e?e:vr(+e),pie):i},pie.padAngle=function(e){return arguments.length?(a="function"==typeof e?e:vr(+e),pie):a},pie},arc:function(){var e=arcInnerRadius,t=arcOuterRadius,n=vr(0),r=null,i=arcStartAngle,a=arcEndAngle,o=arcPadAngle,u=null;function arc(){var c,s,l=+e.apply(this,arguments),f=+t.apply(this,arguments),h=i.apply(this,arguments)-Ar,d=a.apply(this,arguments)-Ar,p=mr(d-h),y=d>h;if(u||(u=c=gr()),fSr)if(p>Er-Sr)u.moveTo(f*_r(h),f*kr(h)),u.arc(0,0,f,h,d,!y),l>Sr&&(u.moveTo(l*_r(d),l*kr(d)),u.arc(0,0,l,d,h,y));else{var g,v,m=h,b=d,_=h,x=d,w=p,k=p,C=o.apply(this,arguments)/2,S=C>Sr&&(r?+r.apply(this,arguments):Cr(l*l+f*f)),P=wr(mr(f-l)/2,+n.apply(this,arguments)),A=P,E=P;if(S>Sr){var M=asin(S/l*kr(C)),O=asin(S/f*kr(C));(w-=2*M)>Sr?(_+=M*=y?1:-1,x-=M):(w=0,_=x=(h+d)/2),(k-=2*O)>Sr?(m+=O*=y?1:-1,b-=O):(k=0,m=b=(h+d)/2)}var T=f*_r(m),F=f*kr(m),N=l*_r(x),j=l*kr(x);if(P>Sr){var I=f*_r(b),D=f*kr(b),L=l*_r(_),R=l*kr(_);if(pSr?function intersect(e,t,n,r,i,a,o,u){var c=n-e,s=r-t,l=o-i,f=u-a,h=(l*(t-a)-f*(e-i))/(f*c-l*s);return[e+h*c,t+h*s]}(T,F,L,R,I,D,N,j):[N,j],z=T-B[0],H=F-B[1],V=I-B[0],U=D-B[1],W=1/kr(function acos(e){return e>1?0:e<-1?Pr:Math.acos(e)}((z*V+H*U)/(Cr(z*z+H*H)*Cr(V*V+U*U)))/2),q=Cr(B[0]*B[0]+B[1]*B[1]);A=wr(P,(l-q)/(W-1)),E=wr(P,(f-q)/(W+1))}}k>Sr?E>Sr?(g=cornerTangents(L,R,T,F,f,E,y),v=cornerTangents(I,D,N,j,f,E,y),u.moveTo(g.cx+g.x01,g.cy+g.y01),ESr&&w>Sr?A>Sr?(g=cornerTangents(N,j,I,D,l,-A,y),v=cornerTangents(T,F,L,R,l,-A,y),u.lineTo(g.cx+g.x01,g.cy+g.y01),A=0&&"xmlns"!==(t=e.slice(0,n))&&(e=e.slice(n+1)),ka.hasOwnProperty(t)?{space:ka[t],local:e}:e};var Sa=function(e){var t=Ca(e);return(t.local?function creatorFixed(e){return function(){return this.ownerDocument.createElementNS(e.space,e.local)}}:function creatorInherit(e){return function(){var t=this.ownerDocument,n=this.namespaceURI;return n===wa&&t.documentElement.namespaceURI===wa?t.createElement(e):t.createElementNS(n,e)}})(t)};function selector_none(){}var Pa=function(e){return null==e?selector_none:function(){return this.querySelector(e)}};function selectorAll_empty(){return[]}var Aa=function(e){return null==e?selectorAll_empty:function(){return this.querySelectorAll(e)}},Ea=function matcher(e){return function(){return this.matches(e)}};if("undefined"!=typeof document){var Ma=document.documentElement;if(!Ma.matches){var Oa=Ma.webkitMatchesSelector||Ma.msMatchesSelector||Ma.mozMatchesSelector||Ma.oMatchesSelector;Ea=function matcher(e){return function(){return Oa.call(this,e)}}}}var Ta=Ea,Fa=function(e){return new Array(e.length)};function EnterNode(e,t){this.ownerDocument=e.ownerDocument,this.namespaceURI=e.namespaceURI,this._next=null,this._parent=e,this.__data__=t}EnterNode.prototype={constructor:EnterNode,appendChild:function appendChild(e){return this._parent.insertBefore(e,this._next)},insertBefore:function insertBefore(e,t){return this._parent.insertBefore(e,t)},querySelector:function querySelector(e){return this._parent.querySelector(e)},querySelectorAll:function querySelectorAll(e){return this._parent.querySelectorAll(e)}};var Na="$";function bindIndex(e,t,n,r,i,a){for(var o,u=0,c=t.length,s=a.length;ut?1:e>=t?0:NaN}var ja=function(e){return e.ownerDocument&&e.ownerDocument.defaultView||e.document&&e||e.defaultView};function styleValue(e,t){return e.style.getPropertyValue(t)||ja(e).getComputedStyle(e,null).getPropertyValue(t)}function classArray(e){return e.trim().split(/^|\s+/)}function classList(e){return e.classList||new ClassList(e)}function ClassList(e){this._node=e,this._names=classArray(e.getAttribute("class")||"")}function classedAdd(e,t){for(var n=classList(e),r=-1,i=t.length;++r=0&&(this._names.splice(t,1),this._node.setAttribute("class",this._names.join(" ")))},contains:function contains(e){return this._names.indexOf(e)>=0}};function textRemove(){this.textContent=""}function htmlRemove(){this.innerHTML=""}function raise_raise(){this.nextSibling&&this.parentNode.appendChild(this)}function lower(){this.previousSibling&&this.parentNode.insertBefore(this,this.parentNode.firstChild)}function constantNull(){return null}function remove_remove(){var e=this.parentNode;e&&e.removeChild(this)}function selection_cloneShallow(){return this.parentNode.insertBefore(this.cloneNode(!1),this.nextSibling)}function selection_cloneDeep(){return this.parentNode.insertBefore(this.cloneNode(!0),this.nextSibling)}var Ia={},Da=null;"undefined"!=typeof document&&("onmouseenter"in document.documentElement||(Ia={mouseenter:"mouseover",mouseleave:"mouseout"}));function filterContextListener(e,t,n){return e=contextListener(e,t,n),function(t){var n=t.relatedTarget;n&&(n===this||8&n.compareDocumentPosition(this))||e.call(this,t)}}function contextListener(e,t,n){return function(r){var i=Da;Da=r;try{e.call(this,this.__data__,t,n)}finally{Da=i}}}function onRemove(e){return function(){var t=this.__on;if(t){for(var n,r=0,i=-1,a=t.length;r=_&&(_=b+1);!(m=g[_])&&++_=0;)(r=i[a])&&(o&&o!==r.nextSibling&&o.parentNode.insertBefore(r,o),o=r);return this},sort:function(e){function compareNode(t,n){return t&&n?e(t.__data__,n.__data__):!t-!n}e||(e=sort_ascending);for(var t=this._groups,n=t.length,r=new Array(n),i=0;i1?this.each((null==t?function styleRemove(e){return function(){this.style.removeProperty(e)}}:"function"==typeof t?function styleFunction(e,t,n){return function(){var r=t.apply(this,arguments);null==r?this.style.removeProperty(e):this.style.setProperty(e,r,n)}}:function styleConstant(e,t,n){return function(){this.style.setProperty(e,t,n)}})(e,t,null==n?"":n)):styleValue(this.node(),e)},property:function(e,t){return arguments.length>1?this.each((null==t?function propertyRemove(e){return function(){delete this[e]}}:"function"==typeof t?function propertyFunction(e,t){return function(){var n=t.apply(this,arguments);null==n?delete this[e]:this[e]=n}}:function propertyConstant(e,t){return function(){this[e]=t}})(e,t)):this.node()[e]},classed:function(e,t){var n=classArray(e+"");if(arguments.length<2){for(var r=classList(this.node()),i=-1,a=n.length;++i=0&&(t=e.slice(n+1),e=e.slice(0,n)),{type:e,name:t}})}(e+""),o=a.length;if(!(arguments.length<2)){for(u=t?onAdd:onRemove,null==n&&(n=!1),r=0;r=0&&(n=e.slice(r+1),e=e.slice(0,r)),e&&!t.hasOwnProperty(e))throw new Error("unknown type: "+e);return{type:e,name:n}})}(e+"",r),a=-1,o=i.length;if(!(arguments.length<2)){if(null!=t&&"function"!=typeof t)throw new Error("invalid callback: "+t);for(;++a0)for(var n,r,i=new Array(n),a=0;af}c.mouse("drag")}function mouseupped(){Ba(Da.view).on("mousemove.drag mouseup.drag",null),function yesdrag(e,t){var n=e.document.documentElement,r=Ba(e).on("dragstart.drag",null);t&&(r.on("click.drag",Ya,!0),setTimeout(function(){r.on("click.drag",null)},0)),"onselectstart"in n?r.on("selectstart.drag",null):(n.style.MozUserSelect=n.__noselect,delete n.__noselect)}(Da.view,n),Ya(),c.mouse("end")}function touchstarted(){if(i.apply(this,arguments)){var e,t,n=Da.changedTouches,r=a.apply(this,arguments),o=n.length;for(e=0;e=0&&t._call.call(null,e),t=t._next;--eo}()}finally{eo=0,function nap(){var e,t,n=$a,r=1/0;for(;n;)n._call?(r>n._time&&(r=n._time),e=n,n=n._next):(t=n._next,n._next=null,n=e?e._next=t:$a=t);Qa=e,sleep(r)}(),ao=0}}function poke(){var e=uo.now(),t=e-io;t>ro&&(oo-=t,io=e)}function sleep(e){eo||(to&&(to=clearTimeout(to)),e-ao>24?(e<1/0&&(to=setTimeout(wake,e-uo.now()-oo)),no&&(no=clearInterval(no))):(no||(io=uo.now(),no=setInterval(poke,ro)),eo=1,co(wake)))}Timer.prototype=timer.prototype={constructor:Timer,restart:function restart(e,t,n){if("function"!=typeof e)throw new TypeError("callback is not a function");n=(null==n?now():+n)+(null==t?0:+t),this._next||Qa===this||(Qa?Qa._next=this:$a=this,Qa=this),this._call=e,this._time=n,sleep()},stop:function stop(){this._call&&(this._call=null,this._time=1/0,sleep())}};var so=function(e,t,n){var r=new Timer;return t=null==t?0:+t,r.restart(function(n){r.stop(),e(n+t)},t,n),r},lo=Ga("start","end","interrupt"),fo=[],ho=0,po=1,yo=2,go=3,vo=4,mo=5,bo=6,_o=function(e,t,n,r,i,a){var o=e.__transition;if(o){if(n in o)return}else e.__transition={};!function schedule_create(e,t,n){var r,i=e.__transition;function start(a){var o,u,c,s;if(n.state!==po)return stop();for(o in i)if((s=i[o]).name===n.name){if(s.state===go)return so(start);s.state===vo?(s.state=bo,s.timer.stop(),s.on.call("interrupt",e,e.__data__,s.index,s.group),delete i[o]):+oho)throw new Error("too late; already scheduled");return n}function schedule_set(e,t){var n=schedule_get(e,t);if(n.state>yo)throw new Error("too late; already started");return n}function schedule_get(e,t){var n=e.__transition;if(!n||!(n=n[t]))throw new Error("transition not found");return n}function tweenValue(e,t,n){var r=e._id;return e.each(function(){var e=schedule_set(this,r);(e.value||(e.value={}))[t]=n.apply(this,arguments)}),function(e){return schedule_get(e,r).value[t]}}var xo=function(e,t){var n;return("number"==typeof t?ge:t instanceof color_color?pe:(n=color_color(t))?(t=n,pe):Ce)(e,t)};var wo=Ra.prototype.constructor;var ko=0;function Transition(e,t,n,r){this._groups=e,this._parents=t,this._name=n,this._id=r}function newId(){return++ko}var Co=Ra.prototype;Transition.prototype=function src_transition_transition(e){return Ra().transition(e)}.prototype={constructor:Transition,select:function(e){var t=this._name,n=this._id;"function"!=typeof e&&(e=Pa(e));for(var r=this._groups,i=r.length,a=new Array(i),o=0;o=0&&(e=e.slice(0,t)),!e||"start"===e})}(t)?init:schedule_set;return function(){var o=a(this,e),u=o.on;u!==r&&(i=(r=u).copy()).on(t,n),o.on=i}}(n,e,t))},attr:function(e,t){var n=Ca(e),r="transform"===n?Fe:xo;return this.attrTween(e,"function"==typeof t?(n.local?function attr_attrFunctionNS(e,t,n){var r,i,a;return function(){var o,u=n(this);if(null!=u)return(o=this.getAttributeNS(e.space,e.local))===u?null:o===r&&u===i?a:a=t(r=o,i=u);this.removeAttributeNS(e.space,e.local)}}:function attr_attrFunction(e,t,n){var r,i,a;return function(){var o,u=n(this);if(null!=u)return(o=this.getAttribute(e))===u?null:o===r&&u===i?a:a=t(r=o,i=u);this.removeAttribute(e)}})(n,r,tweenValue(this,"attr."+e,t)):null==t?(n.local?function attr_attrRemoveNS(e){return function(){this.removeAttributeNS(e.space,e.local)}}:function attr_attrRemove(e){return function(){this.removeAttribute(e)}})(n):(n.local?function attr_attrConstantNS(e,t,n){var r,i;return function(){var a=this.getAttributeNS(e.space,e.local);return a===n?null:a===r?i:i=t(r=a,n)}}:function attr_attrConstant(e,t,n){var r,i;return function(){var a=this.getAttribute(e);return a===n?null:a===r?i:i=t(r=a,n)}})(n,r,t+""))},attrTween:function(e,t){var n="attr."+e;if(arguments.length<2)return(n=this.tween(n))&&n._value;if(null==t)return this.tween(n,null);if("function"!=typeof t)throw new Error;var r=Ca(e);return this.tween(n,(r.local?function attrTweenNS(e,t){function tween(){var n=this,r=t.apply(n,arguments);return r&&function(t){n.setAttributeNS(e.space,e.local,r(t))}}return tween._value=t,tween}:function attrTween(e,t){function tween(){var n=this,r=t.apply(n,arguments);return r&&function(t){n.setAttribute(e,r(t))}}return tween._value=t,tween})(r,t))},style:function(e,t,n){var r="transform"==(e+="")?Te:xo;return null==t?this.styleTween(e,function style_styleRemove(e,t){var n,r,i;return function(){var a=styleValue(this,e),o=(this.style.removeProperty(e),styleValue(this,e));return a===o?null:a===n&&o===r?i:i=t(n=a,r=o)}}(e,r)).on("end.style."+e,function styleRemoveEnd(e){return function(){this.style.removeProperty(e)}}(e)):this.styleTween(e,"function"==typeof t?function style_styleFunction(e,t,n){var r,i,a;return function(){var o=styleValue(this,e),u=n(this);return null==u&&(this.style.removeProperty(e),u=styleValue(this,e)),o===u?null:o===r&&u===i?a:a=t(r=o,i=u)}}(e,r,tweenValue(this,"style."+e,t)):function style_styleConstant(e,t,n){var r,i;return function(){var a=styleValue(this,e);return a===n?null:a===r?i:i=t(r=a,n)}}(e,r,t+""),n)},styleTween:function(e,t,n){var r="style."+(e+="");if(arguments.length<2)return(r=this.tween(r))&&r._value;if(null==t)return this.tween(r,null);if("function"!=typeof t)throw new Error;return this.tween(r,function styleTween(e,t,n){function tween(){var r=this,i=t.apply(r,arguments);return i&&function(t){r.style.setProperty(e,i(t),n)}}return tween._value=t,tween}(e,t,null==n?"":n))},text:function(e){return this.tween("text","function"==typeof e?function text_textFunction(e){return function(){var t=e(this);this.textContent=null==t?"":t}}(tweenValue(this,"text",e)):function text_textConstant(e){return function(){this.textContent=e}}(null==e?"":e+""))},remove:function(){return this.on("end.remove",function removeFunction(e){return function(){var t=this.parentNode;for(var n in this.__transition)if(+n!==e)return;t&&t.removeChild(this)}}(this._id))},tween:function(e,t){var n=this._id;if(e+="",arguments.length<2){for(var r,i=schedule_get(this.node(),n).tween,a=0,o=i.length;ayo&&n.state4&&void 0!==arguments[4]?arguments[4]:{},a=arguments[5];(e instanceof HTMLElement||e instanceof SVGElement)&&(e=Ao(e));var o=r?r[0]:null,u=null,c=null,s=null,l=null,f=null,h=void 0;o?"#"===o?(u="id",c=r):(u="class",c="."===r[0]?r:"."+r):(c=t,h=!0),s=e.selectAll(c),h&&(s=s.filter(function(){return this.parentNode===e.node()})),l=(s=s.data(n,a)).enter().append(t||"div"),i.enter&&l.each(function(){for(var e=arguments.length,t=Array(e),n=0;nthis._data.length)for(var a=this._data.length;a0&&void 0!==arguments[0]?arguments[0]:{};this._lifeCycles=e,this._releasePromisesFromCache()}},{key:"_resetTargetPromise",value:function _resetTargetPromise(e){var t=this;setTimeout(function(){t._notifiers[e]=Xo,t._promises.set(e,t._makeNotifierPromise(e))},0)}}]),LifeCycleManager}(),Qo="drag",Zo="hover",Jo="selectiondrag",eu="click",tu="longtouch",nu="touchdrag",ru="*",iu=1,au=-1,ou=0,uu=2,cu=-2,su=function(){function defineProperties(e,t){for(var n=0;n0?(e[n]===uu&&t.entrySet[0].push(n),e[n]===iu&&t.entrySet[1].push(n)):e[n]<0&&(e[n]===cu&&t.exitSet[0].push(n),e[n]===au&&t.exitSet[1].push(n)),t.completeSet.push(n);return["entrySet","exitSet"].forEach(function(e){t[e]=t[e].map(function(e){return e.map(Number)})}),t.completeSet=t.completeSet.map(Number),t}},{key:"reset",value:function reset(e){var t=this._set;if(e)e.forEach(function(e){t[e]=ou});else{var n=this._lockedSelection;for(var r in t)r in n||(t[r]=ou)}return this._resetted=!0,this}},{key:"getEntrySet",value:function getEntrySet(){var e=this._set,t=[];for(var n in e)e[n]===iu&&t.push(n);return t}},{key:"getExistingEntrySet",value:function getExistingEntrySet(e){var t=this._set;return e.filter(function(e){return t[e]===iu||t[e]===uu})}},{key:"getExistingExitSet",value:function getExistingExitSet(e){var t=this._set;return e.filter(function(e){return t[e]===au||t[e]===cu})}},{key:"getOldEntry",value:function getOldEntry(){var e=this._set,t=[];for(var n in e)e[n]===uu&&t.push(n);return t}},{key:"getOldExit",value:function getOldExit(){var e=this._set,t=[];for(var n in e)e[n]===cu&&t.push(n);return t}},{key:"getExitSet",value:function getExitSet(){var e=this._set,t=[];for(var n in e)e[n]===au&&t.push(n);return t}},{key:"getCompleteSet",value:function getCompleteSet(){var e=this._set,t=[];for(var n in e)t.push(n);return t}},{key:"getCompleteSetCount",value:function getCompleteSetCount(){return this._completeSetCount}},{key:"resetted",value:function resetted(){return this._resetted}},{key:"toggle",value:function toggle(){var e=this._set;for(var t in e)e[t]===iu?e[t]=au:e[t]===au?e[t]=iu:e[t]===uu?e[t]=cu:e[t]=uu;return this}}]),SelectionSet}();function helper_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t3&&void 0!==arguments[3]?arguments[3]:{},i=this.sideEffects(),a=i[e],o=!1;r.filter&&r.filter(a)&&(o=!0),!o&&i[e].apply(t,n,r)}},{key:"registerPropagationBehaviourMap",value:function registerPropagationBehaviourMap(e){return this._propagationBehaviourMap=Object.assign(this._propagationBehaviourMap,e||{}),this}},{key:"dispatchBehaviour",value:function dispatchBehaviour(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=void 0===n.propagate||n.propagate,i=this._actions.behavioural[e],a=function getSideEffects(e,t){var n=[];for(var r in t){var i=r.split(",");i.some(function(t){return t===e})&&n.push({effects:t[r],behaviours:i})}return n}(e,this._behaviourEffectMap);if(this._propagationInf=n,i){var o=i.dispatch(t),u=this.getPropagationSelectionSet(o);this._entryExitSet[e]=u;var c=this.shouldApplySideEffects(r);if(r&&this.propagate(e,t,o.find(function(e){return e.sourceSelectionSet}),a),c){var s=this.getApplicableSideEffects(a,t,n);this.applySideEffects(s,u,t)}}return this}},{key:"getPropagationSelectionSet",value:function getPropagationSelectionSet(e){return e.find(function(e){return!e.sourceSelectionSet})}},{key:"shouldApplySideEffects",value:function shouldApplySideEffects(){return!0}},{key:"changeBehaviourStateOnPropagation",value:function changeBehaviourStateOnPropagation(e,t){return t instanceof Function?this._sourceBehaviours[e]=t:this._sourceBehaviours[e]=function(){return t},this}},{key:"changeSideEffectStateOnPropagation",value:function changeSideEffectStateOnPropagation(e,t){t instanceof Function?this._sourceSideEffects[e]=t:this._sourceSideEffects[e]=function(){return t}}},{key:"propagate",value:function propagate(){return this}},{key:"sideEffects",value:function sideEffects(){return arguments.length?(this._sideEffects=arguments.length<=0?void 0:arguments[0],this):this._sideEffects}},{key:"enableSideEffects",value:function enableSideEffects(e){return fu(this,e,!0),this}},{key:"disableSideEffects",value:function disableSideEffects(e){return fu(this,e,!1),this}},{key:"dissociateBehaviour",value:function dissociateBehaviour(e,t){var n=this._actionBehaviourMap;for(var r in n)if(r===t){var i=n[r];i.behaviours=i.behaviours.filter(function(t){return t!==e})}return this}},{key:"dissociateSideEffect",value:function dissociateSideEffect(e,t){var n=this._behaviourEffectMap;return n[t]=n[t].filter(function(t){return(t.name||t)!==e}),this}},{key:"getApplicableSideEffects",value:function getApplicableSideEffects(e){return e}},{key:"attachPropagationListener",value:function attachPropagationListener(e){return e.unsubscribe("propagation"),e.on("propagation",this.onDataModelPropagation()),this}},{key:"onDataModelPropagation",value:function onDataModelPropagation(){var e=this;return function(t){var n=t.payload,r=n.action;e.dispatchBehaviour(r,n,{propagate:!1})}}},{key:"createSelectionSet",value:function createSelectionSet(e,t){var n=t||this._actions.behavioural,r=this._selectionSet,i=this._volatileSelectionSet;for(var a in n)({}).hasOwnProperty.call(n,a)&&(r[a]=new lu(e),i[a]=new lu(e,!0));return this._volatileSelectionSet=i,this.selectionSet(r),this}},{key:"selectionSet",value:function selectionSet(){return arguments.length?(this._selectionSet=arguments.length<=0?void 0:arguments[0],this):this._selectionSet}},{key:"initializeSideEffects",value:function initializeSideEffects(){var e=this._sideEffectDefinitions;return this.sideEffects(function initializeSideEffects(e,t){var n=e._sideEffects;return(t=t instanceof Array?t:Object.values(t)).forEach(function(t){var r=n[t.formalName()];n[t.formalName()]=r||new t(e)}),n}(this,e)),this}},{key:"registerPhysicalActions",value:function registerPhysicalActions(e){var t=function initializePhysicalActions(e,t){var n={};for(var r in t)({}).hasOwnProperty.call(r,t)||(n[r]=t[r](e));return n}(this,e);return Object.assign(this._actions.physical,t),this}},{key:"propagateWith",value:function propagateWith(e,t){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],r=this._actions.behavioural;if(t.length){if(e===ru)for(var i in r)this._propagationFields[i]={fields:t,append:n};else this._propagationFields[e]={fields:t,append:n};return this}return this._propagationFields}},{key:"mapActionsAndBehaviour",value:function mapActionsAndBehaviour(){var e=this._actions.physical,t=this._actionBehaviourMap,n=this._mappedActions;for(var r in t)if(!{}.hasOwnProperty.call(r,t)){var i=void 0,a=t[r];i=a.target;var o=a.touch;i||(i=this.context.getDefaultTargetContainer());var u=Ro()?!0===o||void 0===o:!o,c=r+"-"+a.behaviours.join();u&&!n[c]&&this.bindActionWithBehaviour(e[r],i,a.behaviours),n[c]=!0}return this}},{key:"registerPhysicalBehaviouralMap",value:function registerPhysicalBehaviouralMap(e){return Object.assign(this._actionBehaviourMap,e),this}},{key:"bindActionWithBehaviour",value:function bindActionWithBehaviour(e,t,n){var r=this;return"string"==typeof t&&(t=[t]),t.forEach(function(t){var i=r.context.mount(),a=t.node instanceof Function?t:Ao(i).selectAll(t);n.length&&!a.empty()&&(a instanceof Array?a.forEach(function(t){e(Ao(t),n)}):e(a,n))}),this}},{key:"getPropagationInf",value:function getPropagationInf(){return this._propagationInf}},{key:"getAddSetFromCriteria",value:function getAddSetFromCriteria(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=this.context,r=t.data?t.data:n.getDataModelFromIdentifiers(e,"all"),i=n.fields().x||[],a=n.fields().y||[],o=i.every(function(e){return e.type()===ir.FieldType.MEASURE}),u=a.every(function(e){return e.type()===ir.FieldType.MEASURE});return{model:r,uids:null===e?null:t.data?function filterPropagationModel(e,t,n){var r=t.getData(),i=r.data,a=r.schema,o=void 0;if(a.length){var u=e.getFieldsConfig();o=e.select(function(e){return i.some(function(t){return a.every(function(r,i){return!(n||r.name in u&&u[r.name].def.type!==ir.FieldType.MEASURE)||t[i]===e[r.name].valueOf()})})},{saveChild:!1})}else o=t;return o}(this.getFullData(),t.data[0],o&&u).getData().uids:r[0].getData().uids}}},{key:"getSelectionSets",value:function getSelectionSets(e){var t=this.context.id(),n=(this._propagationInf||{}).sourceId,r=[];return n!==t&&(r=[this._volatileSelectionSet[e]]),n&&r.push(this.selectionSet()[e]),r}},{key:"getFullData",value:function getFullData(){return this.context.data()}},{key:"resetted",value:function resetted(){return this._resetted}},{key:"getEntryExitSet",value:function getEntryExitSet(e){return this._entryExitSet[e]}}]),Firebolt}(),mu=function(){function defineProperties(e,t){for(var n=0;n1&&void 0!==arguments[1]?arguments[1]:{},n=e.sourceIdentifiers;return n?n.getSchema().map(function(e){return e.name}):t instanceof Array?t[0]:Object.keys(t||{})}(u,n.criteria),sourceSelectionSet:!0===e._volatile}}},{key:"enable",value:function enable(){this._enabled=!0}},{key:"disable",value:function disable(){this._enabled=!1}},{key:"isEnabled",value:function isEnabled(){return this._enabled}}],[{key:"mutates",value:function mutates(){return!1}}]),GenericBehaviour}(),_u=function(){function defineProperties(e,t){for(var n=0;nk[0]?k:w,S=C===k?w:k;C[1]100&&Math.abs(i.x-a.x)<=5)){a.x=Math.max(0,Math.min(a.x,o.width)),a.y=Math.max(0,Math.min(a.y,o.height));var s=Ru(n.context.getSourceInfo(),{startPos:i,endPos:a,snap:!0},n.context.data().getFieldsConfig());s.dragEnd=!0,t.forEach(function(e){return n.dispatchBehaviour(e,s)})}}))},zu=function hover(e){return function(t,n){var r=function dispatchBehaviour(t){var r=Io(),i=e.context,a=i.config().interaction.tooltip.mode,o=jo(i.getDrawingContext().svgContainer,r),u=i.getNearestPoint(o.x,o.y,{getAllPoints:"consolidated"===a||"fragmented"===a,data:t,event:r}),c={criteria:u?u.id:null,showInPosition:u.showInPosition,target:u.target,position:o,mode:a};n.forEach(function(t){return e.dispatchBehaviour(t,c)}),r.stopPropagation()};t.on("mouseover",r).on("mousemove",r).on("mouseout",function(){n.forEach(function(t){return e.dispatchBehaviour(t,{criteria:null})})})}},Hu=function generatePayloadFromEvent(e,t,n){var r=n.context,i=jo(r.getDrawingContext().svgContainer,t.touches?t.touches[0]:t),a=r.getNearestPoint(i.x,i.y,{data:e,event:t});return{criteria:a?a.id:null,showInPosition:a.showInPosition,target:a.target,position:i}},Vu=function click(e){return function(t,n){t.on("click",function dispatchBehaviour(t){var r=Io(),i=Hu(t,r,e);n.forEach(function(t){return e.dispatchBehaviour(t,i)}),r.stopPropagation()})}};function physical_defineProperty(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var Uu=(physical_defineProperty(Du={},Qo,function drag(e){return function(t,n){Bu(t,n,e)}}),physical_defineProperty(Du,Zo,zu),physical_defineProperty(Du,eu,Vu),physical_defineProperty(Du,tu,function longtouch(e){return function(t,n){var r=void 0,i=void 0;i=!1,r=Io(),t.on("touchstart",function(t){r=Io(),i=!1,setTimeout(function(){i?n.forEach(function(t){return e.dispatchBehaviour(t,{criteria:null})}):function dispatchBehaviour(t){var i=Hu(t,r,e);n.forEach(function(t){return e.dispatchBehaviour(t,i)}),r.stopPropagation()}(t)},100)}).on("touchend",function(){i=!0})}}),physical_defineProperty(Du,nu,function touchdrag(e){return function(t,n){Bu(t,n,e,!0)}}),Du),Wu=function(){function defineProperties(e,t){for(var n=0;n1&&void 0!==arguments[1]&&arguments[1];var t=arguments[2],n=arguments[3];this.firebolt.context.layers().forEach(function(r){return!1!==r.config().interactive&&r.applyInteractionStyle(t,e.uids,n)})}}]),SurrogateSideEffect}(),Xu=function(){function defineProperties(e,t){for(var n=0;n=0&&l<=t&&c>=0&&s<=n){var f=Ru(a.getSourceInfo(),{startPos:{x:u,y:c},endPos:{x:l,y:s}},a.data().getFieldsConfig());o(f)}}).on("end",function(){var e=i.width,t=i.height,n=Math.min(e-r.width,Math.max(r.x,0)),u=Math.min(t-r.height,Math.max(r.y,0)),c=u+r.height,s=n+r.width;if(n>=0&&s<=e&&u>=0&&c<=t){var l=Ru(a.getSourceInfo(),{startPos:{x:n,y:u},endPos:{x:s,y:c},snap:!0},a.data().getFieldsConfig());l.dragEnd=!0,o(l)}}))}}(c)(Ao(this),["brush"],x)}).merge(w).each(function(e){var t=Ao(this);for(var n in b&&(t=t.transition().duration(b.duration)),e)({}).hasOwnProperty.call(e,n)&&fa(e[n])&&t.attr(n,e[n])}),C=Gi(u.defClassName,this._id,d);return k.classed(C.join(" "),!0),k.classed(u.className,!0),this}},{key:"hide",value:function hide(e){Qu(this,e.sideEffectGroup,!1)}},{key:"show",value:function show(e){Qu(this,e.sideEffectGroup,!0)}}],[{key:"defaultConfig",value:function defaultConfig(){return{defClassName:"selection-box-group",className:"",classPrefix:"muze",box:{defClassName:"selection-box",className:""},transition:{duration:200}}}},{key:"formalName",value:function formalName(){return"selectionBox"}}]),SelectionBox}(),ec={position:"absolute",width:0,height:0},tc={classPrefix:"muze",defClassName:"tooltip-box",connectorClassName:"tooltip-connectors",className:"",row:{margin:0},content:{spacing:5,iconContainerSize:10,iconScale:1,iconShape:"circle",iconColor:"#ff0000",rowMargin:"0px",margin:10,separator:":",className:"tooltip-content-container",parentClassName:"tooltip-content-parent-container"},arrow:{size:10,disabled:!1,defClassName:"tooltip-arrow",className:"",color:"rgba(195,195,195,0.85)"}},nc=function getArrowPos(e,t,n,r){var i=void 0,a=n.x,o=n.y,u=n.boxHeight,c=n.boxWidth,s=r.arrow.disabled?0:r.arrow.size;if("left"===e||"right"===e){var l=0,f=u/2,h=t.y+t.height,d=o+u;t.y>o?(l=t.y-o,f=(h>=d?d-t.y:t.height)/2):d>h&&(f=Math.abs(o-(t.y+t.height))/2),i=l+f-s/2}else{var p=0,y=c/2,g=t.x+t.width,v=a+c;t.x>a?(p=t.x-a,y=(g>=v?v-t.x:t.width)/2):v>g&&(y=Math.abs(a-(t.x+t.width))/2),i=p+y-s/2}return i},rc=function placeArrow(e,t,n){var r=e._tooltipArrow,i=e._tooltipBackground,a=e._config,o=a.classPrefix,u=a.arrow,c=Gi(u.defClassName,e._id,a.classPrefix);r.style("display","block"),r.attr("class",""+c.join(" ")),"left"===t||"right"===t?(r.style("top",n+"px"),r.style("left",""),i.style("top",n+"px"),i.style("left","")):("bottom"===t?r.style("top","100%"):r.style("top","-"+u.size+"px"),r.style("left",n+"px"),"bottom"===t?i.style("top","100%"):i.style("top","-"+(u.size+3)+"px"),i.style("left",n+"px")),r.classed(o+"-tooltip-arrow",!0),r.classed(o+"-tooltip-arrow-"+e._arrowOrientation,!1),r.classed(o+"-tooltip-arrow-"+t,!0),i.classed(o+"-tooltip-background-arrow",!0),i.classed(o+"-tooltip-background-arrow-"+e._arrowOrientation,!1),i.classed(o+"-tooltip-background-arrow-"+t,!0)};n(11);function strategy_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t1&&void 0!==arguments[1]?arguments[1]:{},n=arguments[2],r=[],i=e.getData(),a=i.data,o=i.schema,u=t.formatters,c=t.separator,s=e.getFieldsConfig(),l=e.getFieldspace(),f=l.fieldsObj(),h=n.dimensionMeasureMap,d=n.axes,p=n.detailFields||[],y=o.filter(function(e){return e.type===ir.FieldType.DIMENSION}),g=o.filter(function(e){return e.type===ir.FieldType.MEASURE}),v=o.find(function(e){return-1!==p.indexOf(e.name)}),m=a.length,b=function getRowContent(e,n){var r=void 0,i=void 0,o=void 0,p=[],y=s[e].index,g=s[e].def.subtype===ir.DimensionSubtype.TEMPORAL?f[e].getMinDiff():0,v=u&&u[e]||oc(n,function(e){return e});if(null!==r){var b=n===ir.FieldType.MEASURE?a.map(function(e){return e[y]}):[].concat(strategy_toConsumableArray(new Set(a.map(function(e){return e[y]}))));b=b.filter(function(e){return""!==e});var _=d.color[0],x=d.shape[0],w=d.size[0],k=(_||x||w)&&m>1&&n!==ir.FieldType.MEASURE;b.forEach(function(n,u){var f=void 0,d=h[e];if(d&&d.length&&m>1){f=n;var y={value:""};k&&(y={type:"icon",color:_.getColor(n),shape:x.getShape(n),size:w.getSize(n)*t.iconScale}),d.length>1?(p.push([y,""+f]),d.forEach(function(e){o=s[e].index,r=a[u][o],i=oc("measure",l.fields[o]._ref.numberFormat())(r,g),p.push([{value:""+e+c,style:{"margin-left":t.margin+"px}"},className:t.classPrefix+"-tooltip-key"},{value:""+i,className:t.classPrefix+"-tooltip-value"}])})):(o=s[d[0]].index,r=a[u][o],i=oc("measure",l.fields[o]._ref.numberFormat())(r,g),p.push([y,{value:""+f+c,className:t.classPrefix+"-tooltip-key"},{value:""+i,className:t.classPrefix+"-tooltip-value"}]))}else f=e,i=v(r=n,g),p.push([{value:""+f+c,className:t.classPrefix+"-tooltip-key"},{value:""+i,className:t.classPrefix+"-tooltip-value"}])})}return p},_="keyValue";if(m>1&&v)r=function getTabularData(e,t,n,r){var i=[];return i.push(t.map(function(e){return e.name})),e.forEach(function(e){var a=[];t.forEach(function(t,i){var o=t.subtype===ir.DimensionSubtype.TEMPORAL?r[t.name]:0,u=t.type===ir.FieldType.MEASURE&&n.fields[i]._ref.numberFormat(),c=oc(t.subtype||t.type,u)(e[i],o);a.push(c)}),i.push(a)}),i}(a,o,l,n.timeDiffs),_="table";else{y.forEach(function(e){var t=e.subtype?e.subtype:e.type;r=[].concat(strategy_toConsumableArray(r),strategy_toConsumableArray(b(e.name,t)))});var x=[].concat(strategy_toConsumableArray(new(Function.prototype.bind.apply(Set,[null].concat(strategy_toConsumableArray(Object.values(h)))))));(m>1?g.filter(function(e){return-1===x.indexOf(e.name)}):g).forEach(function(e){var t=e.subtype?e.subtype:e.type;r=[].concat(strategy_toConsumableArray(r),strategy_toConsumableArray(b(e.name,t)))})}return{content:r,displayFormat:_}},cc={keyValue:function keyValue(e,t,n){return uc(e,t,n)}},sc="keyValue",lc=function(){function defineProperties(e,t){for(var n=0;n0?(this._config=na(this._config,arguments.length<=0?void 0:arguments[0]),this):this._config}},{key:"update",value:function update(e){return this._model=e.model,this._strategy=void 0!==e.strategy?e.strategy:sc,this._formatter=e.formatter,this}},{key:"context",value:function context(e){return this._context=e,this}},{key:"render",value:function render(e){var t=void 0,n=this._config,r=n.iconContainerSize,i=this._formatter,a=n.rowMargin,o=this._model;if(this._mount=e,(t=o instanceof Array?o:i instanceof Function?i(this._model,this._context):cc[this._strategy](this._model,this.config(),this._context))instanceof Function)e.html(t());else{var u=t,c="default";Di(t)&&(u=t.content,c=t.displayFormat);var s=Eo(e,"div",[c],n.classPrefix+"-tooltip-content",{},function(e){return e});if("table"===c){var l=Eo(s,"table",[1],n.classPrefix+"-tooltip-table"),f=Eo(l,"tbody",[1],n.classPrefix+"-tooltip-table-tbody"),h=Eo(f,"tr",u,n.classPrefix+"-tooltip-table-row");h.each(function(e,t){Ao(this).classed(n.classPrefix+"-tooltip-table-row-"+t,!0)}),Eo(h,"td",function(e){return e},n.classPrefix+"-tooltip-table-cell").each(function(e){Ao(this).html(e)})}else{var d=Eo(s,"div",u,n.classPrefix+"-tooltip-row"),p=Eo(d,"span",function(e){return e},n.classPrefix+"-tooltip-content");p.attr("class",n.classPrefix+"-tooltip-content"),Fo(d,{margin:a}),Fo(p,{display:"inline-block","margin-right":n.spacing+"px"}),p.each(function(e){var t=Ao(this);if(t.html(""),e instanceof Object)if("icon"===e.type){var n=Eo(t,"svg",[1]),i=Eo(n,"path",[1]),a=e.shape instanceof Function?e.shape:pa(e.shape);To(n,{x:0,y:0,width:r,height:r}),To(i,{d:a.size(e.size)(),transform:"translate("+r/2+", "+r/2+")"}),Fo(i,{fill:e.color}),Fo(n,{width:r+"px",height:r+"px"})}else t.html(e.value),e.className&&t.classed(e.className,!0),Fo(t,e.style);else t.html(e)})}}return this}},{key:"clear",value:function clear(){return this._model=null,this}}],[{key:"defaultConfig",value:function defaultConfig(){var e=tc.content;return e.classPrefix=tc.classPrefix,e}}]),Content}(),hc=function(){function defineProperties(e,t){for(var n=0;n0){var e=na({},this.constructor.defaultConfig());return this._config=na(e,arguments.length<=0?void 0:arguments[0]),this}return this._config}},{key:"addClass",value:function addClass(e){return this._tooltipContainer.classed(e,!0),this}},{key:"context",value:function context(){return arguments.length?(this._context=arguments.length<=0?void 0:arguments[0],this):this._context}},{key:"content",value:function content(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=this.config(),i=r.classPrefix,a=r.content.className,o=r.formatter,u=n.className||i+"-"+a+"-"+e,content=this._contents[e]=this._contents[e]||new fc,c=Eo(this._contentContainer,"div",[n.order],u);c.attr("class",i+"-"+a+" "+u),function reorderContainers(e,t){e.selectAll(t).sort(function(e,t){return e-t})}(this._contentContainer,"."+i+"-"+a);var s=r.content;return n.classPrefix=this._config.classPrefix,content.config(s),null===t?(content.clear(),c.remove(),delete this._contents[e]):(content.update({model:t,formatter:n.formatter||o}),content.context(this._context),content.render(c)),Object.keys(this._contents).length||this.hide(),this}},{key:"getContents",value:function getContents(){return Object.values(this._contents)}},{key:"position",value:function position(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(!Object.keys(this._contents).length)return this.hide(),this;this.show();var r=this._target,i=n.repositionArrow;if(r&&i){var a=this._tooltipContainer.node(),o=this._config,u=o.arrow.disabled,c=u?0:o.arrow.size,s=this._arrowOrientation,l="left"===s||"right"===s?t+a.offsetHeight-cr.y+r.height:e+a.offsetWidth-cr.x+r.width;if(!u)if(l){var f=void 0;this._tooltipArrow.style("display","none"),this._tooltipBackground.style("display","none"),this._tooltipConnectorContainer.style("display","block");var h=this._tooltipConnectorContainer.selectAll("path").data([1]),d=h.enter().append("path");"left"===s?f="M "+e+" "+(t+a.offsetHeight/2)+" L "+(r.x+r.width)+" "+(r.y+r.height/2):"right"===s?f="M "+(e+a.offsetWidth)+" "+(t+a.offsetHeight/2)+" L "+r.x+" "+(r.y+r.height/2):"bottom"===s&&(f="M "+(e+a.offsetWidth/2)+" "+(t+a.offsetHeight)+" L "+(r.x+r.width/2)+" "+r.y),d.merge(h).attr("d",f).style("display","block")}else{var p=nc(s,r,{x:e,y:t,boxHeight:a.offsetHeight,boxWidth:a.offsetWidth},this._config);rc(this,this._arrowOrientation,p),this._tooltipConnectorContainer.style("display","none")}}var y=this._offset||{x:0,y:0};return this._tooltipContainer.style("left",y.x+e+"px").style("top",y.y+t+"px"),this}},{key:"positionRelativeTo",value:function positionRelativeTo(e){var t=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=void 0,i=n.orientation;if(this.show(),!e)return this.hide(),this;var a=this._extent,o=this._tooltipContainer.node();this._tooltipContainer.style("top","0px").style("left","0px");var u=o.offsetWidth+2,c=o.offsetHeight+2,s=this._config,l=this._offset,f=s.arrow.disabled,h=f?0:s.arrow.size,d=void 0===n.draw||n.draw,p=e.y,y=e.x+e.width+l.x,g=a.width-y,v=e.x+l.x-a.x,m=p>c+h,b=g>=u+h,_=v>=u+h;return this._target=e,i||(i=m?"vertical":b||_?"horizontal":"vertical"),"horizontal"===i?r=function positionHorizontal(){var n=void 0,r=e.x+e.width,i=e.y;return b?(n="left",r+=h):_?(r=e.x-u,n="right",r-=h):(n="left",r+=h),e.height2&&void 0!==arguments[2]?arguments[2]:{},r=0,i=0,a=e.mergedEnter.model,o=this.firebolt.context,u=this.drawingContext();if(a.isEmpty()||null===t.criteria||!1===e.isSourceFieldPresent)return this.hide(n,null),this;var c=this._tooltips,s=this.config(),l={width:u.width,height:u.height},f=t.showInPosition,h=s.padding,d=[],p="fragmented"===s.mode,y=o.getSourceInfo(),g=y.fields,v=!!(!!g.x[0]&&g.x[0].type()===ir.FieldType.DIMENSION),m=t.position,b=[],_={},x=a.getData().uids;p?d.push.apply(d,function tooltip_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);tu.height:i>u.width)break;b.push({x:z.x,y:z.y,width:H.width,height:H.height,tooltip:R})}}for(var V in c)if(!_[V]){var U=c[V];U.content(t.action,null),U.getContents().length||(U.remove(),delete c[V])}return p&&(!function spaceOutBoxes(e,t,n){var r=void 0,i=void 0,a=void 0,o=void 0,u=void 0,c=e.length,s=function spaceOutIfOverlap(e,t,u){a=e.x,o=e.width,r=e.y,i=e.height;var c=r+i,s=a+o;n?(u?rt.y)&&(t.y=u?e.y-t.height-5:c+5):(u?at.x)&&(t.x=u?e.x-t.width-5:s+5)};for(e.sort(function(e,t){return n?e.y-t.y:e.x-t.x}),u=0,u=0;ut.height||e[u].x+e[u].width>t.width)for(n?e[u].y-=e[u].height+e[u].y-t.height:e[u].x-=e[u].width+e[u].x-t.width,u=c-1;u>0;u--)s(e[u],e[u-1],!0)}(b,l,v),b.forEach(function(e){return e.tooltip.position(e.x,e.y,{repositionArrow:!0})})),this}},{key:"hide",value:function hide(e){var t=this._tooltips;for(var n in t)if({}.hasOwnProperty.call(t,n)){var r=e.strategy||this._strategy;t[n].content(r,null),t[n].hide()}}}],[{key:"defaultConfig",value:function defaultConfig(){return{padding:5,offset:{x:0,y:0}}}},{key:"formalName",value:function formalName(){return"tooltip"}}]),Tooltip}(),vc=(n(15),function(){function defineProperties(e,t){for(var n=0;n2&&void 0!==arguments[2]?arguments[2]:{},r=this._strategies[n.strategy||this._strategy];return!1!==e.isSourceFieldPresent&&r(e,this,n.strategy||this._strategy),this}}],[{key:"formalName",value:function formalName(){return"highlighter"}},{key:"target",value:function target(){return"visual-unit"}}]),PlotHighlighter}(),wc=function(){function defineProperties(e,t){for(var n=0;n67.5&&v<=90||(r+=2*y),u=p,u=90===l?y:270===l?-y:0,o===Yc?(u=0===t&&c&&s===ds?u+u/2:u,Ao(this).attr("transform","translate("+(-u+f)+" \n "+(-r-f)+") rotate("+l+")")):(u=0===t&&c&&s===ds?u-u/2:u,Ao(this).attr("transform","translate("+(u-f)+" \n "+(r+f)+") rotate("+l+")"))}),t},Os=function changeTickOrientation(e,t,n){var r=t._smartTicks,i=t.config(),a=t.dependencies().labelManager,o=i.labels,u=i.orientation,c=o.rotation,s=o.smartTicks,l=e.selectAll(".tick text");if(l.selectAll("tspan").remove(),0===c||!1!==s||"top"!==u&&"bottom"!==u)if(0===c&&!1===s)l.attr("transform","");else{l.attr("y",0).attr("x",0).text(""),Eo(l,"tspan",function(e,t){return r[t].lines},"smart-text").attr("dy","0").style("opacity","0").transition().duration(1e3).attr("dy",function(e,t){return"bottom"===u||0!==t?r[t].oriTextHeight:-r[t].oriTextHeight*(r[t].lines.length-1)-n}).style("opacity",1).attr("x",0).text(function(e){return e})}else Ms(t,l,a,i);return l},Ts=function setFixedBaseline(e){e.config().fixedBaseline&&e.setFixedBaseline()},Fs=function setAxisNamePos(e,t,n){var r=n.axisNameHeight,i=n.yOffset,a=n.labelOffset,o=n.availableSpace;switch(t){case Xc:e.attr("transform","translate("+-(o.width-r)+","+(i+a)+")rotate(-90)");break;case Kc:e.attr("transform","translate("+(o.width-r)+","+(i+a)+")rotate(90)");break;case Yc:e.attr("transform","translate("+o.width/2+","+(-o.height+r)+")");break;case Gc:e.attr("transform","translate("+o.width/2+","+(o.height-r/2)+")")}return e};function cartesian_axis_helper_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);tt.length&&(t=p,r=e.smartTicks()?e.smartTicks()[s]:{},n=o[s]),d}),n=h.getOriSize(t),{largestLabel:t,largestLabelDim:n,axisTickLabels:i,allLabelLengths:o,smartTick:r}},js=function setOffset(e){var t=0,n=0,r=e.logicalSpace(),i=e.config(),a=i.orientation,o=i.xOffset,u=i.yOffset;a===Xc&&(t=void 0===o?r.width:o),a===Yc&&(n=void 0===u?r.height:u),e.config({xOffset:t,yOffset:n})},Is=function adjustRange(e,t,n,r){var i=function getAxisOffset(e,t,n){var r=Math.abs(t[1]-t[0])/(n[1]-n[0])*e,i=t[1]-t[0],a=i/r;return(i-i/(a+1)*a)/2}(e,t,n);return r===Yc||r===Gc?(t[0]+=i,t[1]-=i):(t[0]-=i,t[1]+=i),t},Ds=function registerChangeListeners(e){return e.store().model.next(["domain","range","mount","config"],function(){for(var t=arguments.length,n=Array(t),r=0;r0&&e.length*(t+this._minTickDistance.width)>i&&this.config({labels:{rotation:-90}})}return this}},{key:"adjustRange",value:function adjustRange(){return this}},{key:"getScaleValue",value:function getScaleValue(e){if(null!==e&&void 0!==e)return this.scale()(e)}},{key:"getTickSize",value:function getTickSize(){return this.axis().tickSize()}},{key:"getAxisDimensions",value:function getAxisDimensions(){return this.axisDimensions(function computeAxisDimensions(e){var t={},n=e.config(),r=n.name,i=n.labels,a=n.tickValues,o=(i.smartTicks?0:i.rotation)*Math.PI/180,u=e.dependencies().labelManager,c=Ns(e),s=c.largestLabelDim,l=c.axisTickLabels,f=c.smartTick,h=s.height,d=s.width;return 0===e.domain().length?null:(!1===e._rotationLock&&(e.setRotationConfig(a||l,s.width),e._rotationLock=!1),t=i.smartTicks?f:{width:Math.abs(h*Math.sin(o))+Math.abs(d*Math.cos(o)),height:Math.abs(d*Math.sin(o))+Math.abs(h*Math.cos(o))},u.setStyle(e._axisNameStyle),{tickSize:e.getTickSize(),tickLabelDim:t,axisLabelDim:u.getOriSize(r),largestLabelDim:s,axisTickLabels:l})}(this)),this.axisDimensions()}},{key:"getLogicalSpace",value:function getLogicalSpace(){return this.logicalSpace()||(this.logicalSpace(function calculateContinousSpace(e){e.range();var t=e.config(),n=e.getAxisDimensions(),r=t.orientation,i=t.show,a=t.showAxisName,o=n.axisLabelDim;if(!1===i)return{width:0,height:0};var u=o.width;if(r===Yc||r===Gc){var c=Ls(e,n,t),s=c.width,l=c.height;return{width:Math.max(s,u),height:l}}var f=Rs(e,n,t),h=f.width,d=f.height;return{width:h,height:Math.max(d,a?u:0)}}(this)),js(this),this.logicalSpace()),this.logicalSpace()}},{key:"invert",value:function invert(){for(var e=this,t=arguments.length,n=Array(t),r=0;ra[1];return"band"===r?(n=i.invertExtent(e,t),[i(o?n[n.length-1]:n[0]),i(o?n[0]:n[n.length-1])+i.bandwidth()]):[e,t]}},{key:"updateDomainBounds",value:function updateDomainBounds(e){var t=this.domain();return this.config().domain?t=this.config().domain:(0===t.length&&(t=e),e.length&&(t=[Math.min(t[0],e[0]),Math.max(t[1],e[1])])),this.domain(t)}},{key:"updateDomainCache",value:function updateDomainCache(e){!1===this._domainLock&&(this.domain([]),this._domainLock=!0);var t=[];return e&&e.forEach(function(e){void 0!==e&&null!==e&&t.push(e)}),this.updateDomainBounds(t)}},{key:"getMinTickDifference",value:function getMinTickDifference(){return this.domain()}},{key:"getFormattedTickValues",value:function getFormattedTickValues(e){return e}},{key:"setTickValues",value:function setTickValues(){var e=this.config().tickValues;return e?(e instanceof Array&&this.axis().tickValues(e),this):this}},{key:"getUnitWidth",value:function getUnitWidth(){return 0}},{key:"serialize",value:function serialize(){return{name:this.name,type:this.type,range:this.range(),config:this.config()}}},{key:"registerEvent",value:function registerEvent(e,t){this._eventList.push({name:e,action:t})}},{key:"on",value:function on(e,t){e=e||"update",this.registerEvent(e,t)}},{key:"render",value:function render(){return this.mount()&&function renderAxis(e){var t=e.config(),n=e.dependencies().labelManager,r=e.mount(),i=e.range(),a=e.axis(),o=e.scale(),u=e._axisNameStyle,c=e._tickLabelStyle,s=e.formatter,l=e.tickValues,f=t.orientation,h=t.name,d=t.labels,p=t.xOffset,y=t.yOffset,g=t.axisNamePadding,v=t.className,m=t.showAxisName,b=t.show,_=t.id,x=t.interpolator,w=t.classPrefix;if(b){var k=e.getTickSize(),C=Eo(Ao(r),"g",[e],""+v,{},function(e){return e.config().id});n.setStyle(c),"linear"===x&&e.setTickValues();var S=o.ticks||o.quantile||o.domain;s&&a.tickFormat(s(l||a.tickValues()||S()));var P=Math.abs(i[0]-i[1]),A=e.axisDimensions().tickLabelDim;C.attr("transform","translate("+p+","+y+")"),Ts(e),!1===d.smartTicks?C.transition().duration(1e3).call(a):C.call(a),C.selectAll(".tick").classed(w+"-ticks",!0),C.selectAll(".tick line").classed(w+"-tick-lines",!0),C.selectAll(".tick text").classed(w+"-ticks",!0).classed(w+"-ticks-"+_,!0),Os(C,e,k);var E=Eo(C,"text",[h],w+"-axis-name").attr("text-anchor","middle").classed(w+"-axis-name-"+_,!0).text(function(e){return e});E.classed(ys,!m);var M=P/2;n.setStyle(u);var O=n.getOriSize(h),T={labelProps:A,tickSize:k,axisNamePadding:g,axisNameHeight:O.height,axisNameWidth:O.width,yOffset:y,xOffset:p,labelOffset:M,availableSpace:e.availableSpace()};Fs(E,f,T)}}(this),this}},{key:"remove",value:function remove(){return this.store().unsubscribeAll(),Ao(this.mount()).remove(),this}},{key:"unsubscribe",value:function unsubscribe(){return this.store().unsubscribeAll(),this}},{key:"isReverse",value:function isReverse(){var e=this.range();return e[0]>e[1]}},{key:"getPixelToValueRatio",value:function getPixelToValueRatio(){var e=this.scale(),t=e.range(),n=e.domain();return Math.abs(t[1]-t[0])/(n[1]-n[0])}},{key:"id",get:function get(){return this._id}}],[{key:"defaultConfig",value:function defaultConfig(){return Es}}]),SimpleAxis}(),Vs=function(){function defineProperties(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:0,t=arguments[1],n=arguments[2],r=arguments[3],i=n.left,a=n.right,o=n.top,u=n.bottom,c=this.config(),s=c.orientation,l=c.fixedBaseline,f=this.getAxisDimensions().tickLabelDim;if(this.availableSpace({width:e,height:t}),s===Yc||s===Gc){var h=f.width;this.range([(l?0:h/2)+i,e-a-h/2]);var d=this.getLogicalSpace().height;r&&this.config({yOffset:Math.max(d,t)})}else{var p=f.height;this.range([t-u-(l?1:p/2),p/2+o]);var y=this.getLogicalSpace().width;r&&this.config({xOffset:Math.max(y,e)})}return this}},{key:"setTickValues",value:function setTickValues(){var e=this.config().tickValues,t=this.axis();return e?(e instanceof Array&&this.axis().tickValues(e),this):(t.tickValues(this.getTickValues()),this)}},{key:"getTickValues",value:function getTickValues(){var e=this.config(),t=e.orientation,n=e.tickValues,r=this.range(),i=this.axis(),a=Math.abs(r[0]-r[1]),o=Ns(this).largestLabelDim;return n?i.scale().ticks(n):function getNumberOfTicks(e,t,n,r){var i=n.scale().ticks(),a=r.config().numberOfTicks,o=i.length,u=o;return o*(1.5*t)>e&&(u=Math.floor(e/(1.5*t))),u=Math.min(a,Math.max(1,u)),n.scale().ticks(u)}(a,o[t===Gc||t===Yc?"width":"height"],i,this)}},{key:"getMinTickDifference",value:function getMinTickDifference(){return xa(this.config().tickValues)}},{key:"setFixedBaseline",value:function setFixedBaseline(e){var t=this.config(),n=t.orientation,r=t.labels.rotation,i=this.axis(),a=this._axisDimensions.largestLabelDim,o=a.width,u=a.height;return i.tickTransform(function(e,t){return 0!==t||n!==Xc&&n!==Kc?0!==t||n!==Yc&&n!==Gc||0!==r?"":"translate("+o/2+"px, 0px) rotate("+r+"deg)":"translate(0, -"+u/3+"px)"}),e}}],[{key:"type",value:function type(){return Qc}}]),ContinousAxis}(),Zs=function(){function defineProperties(e,t){for(var n=0;n0&&e.length*(t+this._minTickDistance.width)>a&&(a&&o0&&e.length*t>i&&(i&&1.25*a1?t.range:[al].concat(props_toConsumableArray(t.range)));var r=na(n,e.config()),i=na(r,t);return i.range instanceof Array&&(i.range=i.range.map(function(e,t){return sl(e,il[t])}),i.stops=t.stops||i.range.length),i.value=sl(i.value,i.value),i}},domain:{},scale:{},uniqueValues:{}};function color_strategy_defineProperty(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function color_strategy_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);tMath.min(t.length,18))for(var r=aa()(function hslInterpolator(){return Ne}(),t.map(function(e){return ul(e)})),i=0;i0&&void 0!==arguments[0]?arguments[0]:[];if(e.length){var t=this.scale(),n=t.range?t.range():null,r=this._colorStrategy.domainRange()(e,this.config().stops,n);this.domain(r.domain),r.range&&this.scale().range(r.range),this.uniqueValues(r.uniqueVals),this.scale().domain(r.scaleDomain||this.domain())}return this}},{key:"serialize",value:function serialize(){return{type:this.constructor.type(),scale:this.scale(),domain:this.domain(),config:this.config()}}},{key:"transformColor",value:function transformColor(e,t){var n=360*e[0],r=100*e[1],i=100*e[2],a=e[3]||1,o=n+t[0],u=r+t[1],c=i+t[2],s=a+t[3]||0;return{color:"hsla("+o+","+u+"%,"+c+"%,"+s+")",hsla:[o/360,u/100,c/100,s]}}},{key:"id",value:function id(){return this._id}}],[{key:"defaultConfig",value:function defaultConfig(){return ol}},{key:"type",value:function type(){return"color"}}]),ColorAxis}(),Sl={value:36,range:[36,1e3]};function size_strategy_defineProperty(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function size_strategy_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t0&&void 0!==arguments[0]?arguments[0]:0,t=this.config().value,n=this.scale(),r=this.domain()||[1,1];return n&&r[0]!==r[1]?this._sizeStrategy.range(e,n,this.domain(),this.uniqueValues()):t}},{key:"updateDomain",value:function updateDomain(e){if(e){var t=(0,this._sizeStrategy.domain)(e,this.config().intervals);this.domain(t.domain),this.uniqueValues(t.uniqueVals),this.scale().domain(t.scaleDomain||this.domain())}return this}},{key:"serialize",value:function serialize(){return{type:this.constructor.type(),scale:this.scale(),domain:this.domain(),range:this.range(),config:this.config()}}},{key:"id",value:function id(){return this._id}}],[{key:"defaultConfig",value:function defaultConfig(){return Sl}},{key:"type",value:function type(){return"size"}}]),SizeAxis}(),Ol={generator:null,value:"circle",range:["circle","diamond","star","cross","square","wye","triangle"]},Tl={config:{},domain:{},scale:{},uniqueValues:{},generator:{}},Fl=function(){function defineProperties(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:[];return e.length&&(this.uniqueValues(e),this.domain(e),this.scale().domain(e),this.config().generator&&(this._generatedShapes=function shapeGenerator(e,t){var n={};return e.forEach(function(e){n[e]=t(e)}),n}(e,this.config().generator))),this}},{key:"serialize",value:function serialize(){return{type:this.constructor.type(),scale:this.scale(),domain:this.domain(),range:this.config().range,config:this.config()}}},{key:"id",value:function id(){return this._id}}],[{key:"defaultConfig",value:function defaultConfig(){return Ol}},{key:"type",value:function type(){return"shape"}}]),ShapeAxis}();function data_type_scale_map_defineProperty(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var Il="measure",Dl="temporal",Ll=(data_type_scale_map_defineProperty(Nl={},"dimension",Zc),data_type_scale_map_defineProperty(Nl,Il,Qc),data_type_scale_map_defineProperty(Nl,Dl,Jc),function(e,t,n){var r=n.groupBy instanceof Array?n.groupBy:[n.groupBy],i=r.map(function(t){return e.findIndex(function(e){return e.name===t})});if(void 0!==i.find(function(e){return-1===e}))throw new Error("Groupby field "+r+" not found in schema");return function nestCollection(e){var t=T();return e.keys.forEach(function(e){return t.key(function(t){return t[e]})}),t.entries(e.data)}({keys:i,data:t})});var Rl;function transform_factory_defineProperty(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var Bl=(transform_factory_defineProperty(Rl={},"identity",function identityTransform(e,t,n){return t}),transform_factory_defineProperty(Rl,"group",Ll),transform_factory_defineProperty(Rl,"stack",function(e,t,n){var r=n.uniqueField,i=n.value,a=n.groupBy,o=n.sort||"descending",u=function normalizeData(e,t,n,r,i){var a=Ll(t,e,{groupBy:r}),o=t.findIndex(function(e){return e.name===r}),u=t.findIndex(function(e){return e.name===n}),c=t.findIndex(function(e){return e.name===i}),s=e.map(function(e){return e[c]}).filter(function(e,t,n){return n.indexOf(e)===t}).sort(),l=t.reduce(function(e,t,n){return e[n]=t.name,e},{});return{data:a.map(function(e){var t={},n=e.values.reduce(function(e,n){return e=n.reduce(function(e,r,i){return i===c?(e[r]=n[u],t[r]=n):i!==u&&(e[l[i]]=r),e},e)},{});return n._tuple=t,s.forEach(function(t){if(void 0===n[t]){n[t]=0;var r=new Array(e.values[0].length);r[o]=e.key,r[c]=t,n._tuple[t]=r}}),n}),keys:s}}(t,e,i,r,a),c=u.keys,s={},l=n.orderBy,f=e.findIndex(function(e){return e.name===l}),h=e.findIndex(function(e){return e.name===a});-1!==f&&(c.forEach(function(e){var n=t.find(function(t){return t[h]===e});s[e]=n[f]}),u.keys.sort(function(e,t){return s[e].localeCompare(s[t])}));var d=va({keys:u.keys,offset:n.offset||"diverging",order:o,data:u.data});return d.forEach(function(e){e.forEach(function(t){t.data=t.data._tuple[e.key]})}),d}),Rl);var zl=function transformFactory(e){var t=Bl[e];if("function"!=typeof t)throw new Error("Invalid transform type supplied.");return t},Hl=function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function sliceIterator(e,t){var n=[],r=!0,i=!1,a=void 0;try{for(var o,u=e[Symbol.iterator]();!(r=(o=u.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){i=!0,a=e}finally{try{!r&&u.return&&u.return()}finally{if(i)throw a}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}();var Vl,Ul=f.BAND,Wl=function getLayerColor(e,t){var n=e.datum,r=e.index,i=t.colorEncoding,a=t.colorAxis,o=t.colorFieldIndex,u="",c="";return i&&i.value instanceof Function?(c=i.value(n,r),u=i.value(n,r)):(u=a.getRawColor(n._data[o]),c=a.getHslString(u)),{color:c,rawColor:u}},ql=function transfromColor(e,t,n,r){t.meta.stateColor[n]=t.meta.stateColor[n]||t.meta.originalColor;var i=e.transformColor(t.meta.stateColor[n],r);return t.meta.stateColor[n]=i.hsla,i},Gl=function applyInteractionStyle(e,t,n,r){var i=e.getPlotElementsFromSet(t),a=e.axes().color,o=r.apply,u=r.interactionType;n.forEach(function(e){var t=e.type;i.style(t,function(n){var r=n.meta,i=r.colorTransform,c=r.stateColor,s=r.originalColor;if(i[u]=i[u]||{},o&&!i[u][t])return i[u][t]=e.intensity,ql(a,n,t,e.intensity).color;if(!o&&i[u][t])return i[u][t]=null,ql(a,n,t,e.intensity.map(function(e){return-e})).color;var l=c[t]?c[t]:s,f=Hl(l,4);return"hsla("+360*f[0]+","+100*f[1]+"%,"+100*f[2]+"%, "+(f[3]||1)+")"})})},Yl=function getAxesScales(e){var t=[Bc.X,Bc.Y].map(function(t){return e[t]}),n=Hl(t,2),r=n[0],i=n[1],a=[r,i].map(function(e){return e&&e.scale()}),o=Hl(a,2);return{xAxis:r,yAxis:i,xScale:o[0],yScale:o[1]}},Xl=function getIndividualClassName(e,t,n,r){var i=r.config().individualClassName,a="";return i instanceof Function&&(a=i(e,t,n,r)),a},Kl=function attachDataToVoronoi(e,t){var n;e.data((n=[]).concat.apply(n,function helpers_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t=e[0]?(i=d=e[1],h=f=e[0]):(i=d=e[0],h=f=e[1]),(t=a===ir.FieldType.MEASURE?{x:h,x0:d,y:n[u],y0:n[u]}:{x:n[o],x0:n[o],y:i,y0:f})._data=n,t._id=n[l]}else(t={x:e[o],y:e[u],x0:e[c],y0:e[s]})._data=e,t._id=e[l];return t})}).filter(function(e){return e.length})}(e,t,this.encodingFieldsInf(),this.transformType())}},{key:"getNearestPoint",value:function getNearestPoint(){return null}},{key:"applyInteractionStyle",value:function applyInteractionStyle(e,t,n){var r=(this.config().interaction||{})[e];r&&Gl(this,t,r,{apply:n,interactionType:e})}},{key:"transformType",value:function transformType(){return arguments.length?(this._transformType=arguments.length<=0?void 0:arguments[0],this):this._transformType}},{key:"render",value:function render(){return this}},{key:"elemType",value:function elemType(){return"g"}},{key:"remove",value:function remove(){return this.store().unsubscribeAll(),Ao(this.mount()).remove(),this}},{key:"cachePoint",value:function cachePoint(e,t){if(null===e)return this;var n=this._pointMap;return!n[e]&&(n[e]=[]),n[e].push(t),this}},{key:"dataProps",value:function dataProps(){return arguments.length?(this._dataProps=arguments.length<=0?void 0:arguments[0],this):this._dataProps}},{key:"getIdentifiersFromData",value:function getIdentifiersFromData(e){var t=this.data().getData().schema,n=this.data().getFieldsConfig(),r=[[],[]],i=this.encodingFieldsInf(),a=i.xFieldType,o=i.yFieldType,u=i.xField,c=i.yField,s=[a,o].map(function(e){return e===ir.FieldType.MEASURE}),l=tf(s,2),f=l[0],h=l[1];if(t.forEach(function(t,i){var a=t.name;n[a].def.type===ir.FieldType.DIMENSION&&(r[0].push(a),r[1].push(e[i]))}),f&&h){var d,p,y=n[u].index,g=n[c].index;(d=r[0]).push.apply(d,[u,c]),(p=r[1]).push.apply(p,[e[y],e[g]])}return r}},{key:"getPlotSpan",value:function getPlotSpan(){return{x:0,y:0}}},{key:"getPlotPadding",value:function getPlotPadding(){return{x:0,y:0}}},{key:"getPointsFromIdentifiers",value:function getPointsFromIdentifiers(e){var t,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=n.getAllAttrs,i=n.getBBox;if(!this.data())return[];var a=void 0,o=void 0;if(e instanceof ar.a){var u=e.getData();a=u.schema.map(function(e){return e.name}),o=u.data}else a=e[0],o=e.slice(1,e.length);var c=this._points,s=this.data().getFieldsConfig(),l=(t=[]).concat.apply(t,function base_layer_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t2&&void 0!==arguments[2]?arguments[2]:{},r=Ao(n.event.target).data()[0];if(Di(r)){var i=r.datum,a=i.data,o=i.uid;return{id:this.getIdentifiersFromData(a,o),layerId:this.id()}}return null}},{key:"getPlotElementsFromSet",value:function getPlotElementsFromSet(e){return Ao(this.mount()).selectAll(this.elemType()).filter(function(t){return-1!==e.indexOf(t.datum.uid)})}},{key:"render",value:function render(e){var t=this,n=this.measurement(),r=n.height,i=n.width,a=this.config(),o=a.classPrefix,u=a.defClassName,c=a.minOuterRadius,s=a.innerRadius,l=a.outerRadius,f=a.cornerRadius,h=a.padAngle,d=a.padRadius,p=a.padding,y=a.transition,g=a.innerRadiusFixer,v=this.axes().size,m=this._store,b=m.get("transformedData"),_=r-p.top-p.bottom,x=i-p.left-p.right,w=Gi(u,this.id(),o),k=function getRadiusRange(e,t,n){var r=n.minOuterRadius,i=n.innerRadius,a=n.outerRadius,o=n.innerRadiusFixer;return[Math.max(i+o||0,r),a||Math.min(t,e)/2]}(x,_,{minOuterRadius:c,innerRadius:s,outerRadius:l,innerRadiusFixer:g}),C=this.axes().color,S=l||Math.min(_,x)/2,P=m.get("domain").radius,A=function rangeValueGetter(e){return function getRangeValue(e,t,n,r,i){var a=1,o=e.outerRadiusValue,u=e.sizeVal,c=i.domain(),s=i.getSize(u)/(c?i.range()[1]:i.config().value);return a*=(t[1]-t[0])/(n[1]-n[0]),(t[0]+(o-n[0])*a||r)*s}(e,k,P,S,v)},E=bf().innerRadius(s?Math.min(_/2,x/2,s):0).cornerRadius(f).padAngle(h).padRadius(d);this._chartWidth=x,this._chartHeight=_;var M=Eo(Ao(e),"g",[1],w[0]+"-group").classed(w[1]+"-group",!0).attr("transform","translate("+x/2+","+_/2+")"),O=[],T=0;return Eo(M,"g",b,""+w[0],{update:function tween(e){Eo(e,"path",function(e,t){return[{datum:e,index:t,arcFn:E,meta:{originalColor:C.getRawColor(e.colorVal),stateColor:{},colorTransform:{}}}]},w[0]+"-path").style("fill",function(e){return C.getColor(e.datum.colorVal)}).transition().duration(y.duration).attrTween("d",function(){for(var e=arguments.length,t=Array(e),n=0;n0&&e.forEach(function(e){var i=e[0].datum.startAngle,a=e[e.length-1].datum.endAngle,o=2*Math.PI*i/(2*Math.PI+i-a);e.forEach(function(e){var i=e.elem,a=e.datum;i.each(function(){var e=Ao(this);e.selectAll("path").transition().duration(t.duration).attrTween("d",function(){return function(e){var t=n(a);return a.outerRadius=t,r(ra()(a,{startAngle:o,endAngle:o,outerRadius:t})(e))}}).remove(),e.remove()})})})}(O,y,A,E),this}},{key:"getPointsFromIdentifiers",value:function getPointsFromIdentifiers(e){if(!this.data())return[];var t=e[0],n=e.slice(1,e.length),r=Ao(this.mount()).selectAll("path").data(),i=this.data().getFieldsConfig(),a=r.filter(function(e){var r=e.datum.data,a=e.datum.uid;return t.every(function(e,t){return e in i&&i[e].def.type===ir.FieldType.DIMENSION?-1!==n.findIndex(function(n){return n[t]===r[i[e].index]}):e!==nr.ROW_ID||-1!==n.findIndex(function(e){return e[t]===a})})})[0];if(a){var o=a.arcFn.centroid(a.datum);return[{x:o[0]+this._chartWidth/2,y:o[1]+this._chartHeight/2,width:2,height:2}]}return[]}}],[{key:"defaultConfig",value:function defaultConfig(){return yf}},{key:"formalName",value:function formalName(){return"arc"}}]),ArcLayer}(),xf=function drawText(e,t,n,r){var i=Ao(e).selectAll("g").data(t),a=i.enter().append("g").each(function(e){To(this,e.enter)}).merge(i),o=Lo(Ao(e),n.className),u=parseInt(o.fontSize,10);return r.setStyle(o),a.each(function(e){var t,n=Ao(this),i=e.update,a=e.text,o=e.color,c=e.textanchor,s=e.style,l=e.background;if(t=l.value){var f=l.padding,h=void 0,d=r.getOriSize(e.text),p=d.width,y=d.height,g=Eo(n,"rect",[1]);h="end"===c?p:"start"===c?0:p/2,To(g.node(),{x:i.x-h-f/2,y:i.y-u-f/2,width:p+f,height:y+f}),l&&Fo(g,{background:t})}var v=Eo(n,"text",function(e){return[e]}).text(a),m=v.node();s&&Fo(m,s),o&&Fo(m,{fill:o}),e.className&&v.classed(e.className,!0),To(m,i),v.attr("text-anchor",c)}),i.exit().remove(),i},wf={defClassName:"layer-text",classPrefix:"muze",className:"",transform:{type:"identity"},interaction:{highlight:[{type:"fill",intensity:[0,0,-15,0]}],fade:[{type:"fill",intensity:[0,0,15,0]}],focus:[{type:"fill",intensity:[0,0,15,0]}]},transition:{effect:"cubic",duration:1e3},encoding:{color:{},text:{value:"",background:{padding:10}}},states:{highlight:{className:"muze-layer-text-highlight"},fadeout:{className:"muze-layer-text-fadeout"},selected:{className:"muze-layer-text-selected"}}},kf=(n(27),function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function sliceIterator(e,t){var n=[],r=!0,i=!1,a=void 0;try{for(var o,u=e[Symbol.iterator]();!(r=(o=u.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){i=!0,a=e}finally{try{!r&&u.return&&u.return()}finally{if(i)throw a}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}()),Cf=function(){function defineProperties(e,t){for(var n=0;n4)}(r)?r:pa(r).size(i)(a),Eo(n,"path",function(e){return[e]}).attr("d",s)}else e.shape="circle",createShape(e,t)}(e,this)}),(t=c?t:t.transition().duration(c?0:i.duration)).attr("transform",function(e){return"translate("+e.update.x+","+e.update.y+")"}).each(function(e){var t=e.style,n=Ao(this);Xi(t,function(e){return n.style(e,t[e])}),n.attr("class",""+a),n.classed(e.className,!0)});var h=l.exit();c?h.remove():h.transition().ease(Wi[u]).duration(o).on("end",function(){Ao(this).remove()}).style("fill-opacity",0).style("stroke-opacity",0)},Af={defClassName:"layer-point",className:"",classPrefix:"muze",defColorStyle:"stroke",interaction:{highlight:[{type:"fill",intensity:[0,0,-20,0]}],fade:[{type:"fill",intensity:[0,0,20,0]}],focus:[{type:"fill",intensity:[0,0,20,0]}]},innerPadding:.1,nearestPointThreshold:10,transform:{type:"identity"},transition:{effect:"cubic",duration:1e3},encoding:{size:{value:30},color:{},shape:{value:"circle"},x:{},y:{},strokeOpacity:{value:.5},fillOpacity:{value:.5}},shapes:["circle","cross","diamond","square","star","wye","triangle"],sizes:[20,30,40,50,60,70]},Ef=(n(29),function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function sliceIterator(e,t){var n=[],r=!0,i=!1,a=void 0;try{for(var o,u=e[Symbol.iterator]();!(r=(o=u.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){i=!0,a=e}finally{try{!r&&u.return&&u.return()}finally{if(i)throw a}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}()),Mf=function(){function defineProperties(e,t){for(var n=0;n3&&void 0!==arguments[3]?arguments[3]:{},a=[],o=t.size,u=t.shape,c=t.color,s=t.x,l=t.y,f=o.field,h=o.value,d=u.field,p=s.field,y=l.field,g=n.size,v=n.shape,m=this.data().getFieldsConfig(),b=m[p]&&m[p].def.type===ir.FieldType.DIMENSION,_=m[y]&&m[y].def.type===ir.FieldType.DIMENSION,x=b?Bc.X:_?Bc.Y:null,w=c&&c.field,k=m[w]&&m[w].index,C=this._store.get("measurement"),S=m[d]&&m[d].index,P=m[f]&&m[f].index,A=n.color,E=i.offset,M=E.x,O=E.y,T=function _loop(i,o){var u=e[i],s=u._data,l=h instanceof Function?h(u,i):g.getSize(s[P]),f=v.getShape(s[S]),d=[Bc.X,Bc.Y].map(function(e){var r=null===u[e]?void 0:u[e],i=e===Bc.X?C.width:C.height;return t[e].field?n[e].getScaleValue(r):i/2}),p=Ef(d,2),y=p[0],m=p[1];y+=M,m+=O;var b=Wl({datum:u,index:i},{colorEncoding:c,colorAxis:A,colorFieldIndex:k}),_=b.color,w=b.rawColor,E={fill:_,stroke:_};if(!isNaN(y)&&!isNaN(m)){var T={enter:{x:y,y:m},update:{x:y,y:m},shape:f,size:Math.abs(l),meta:{stateColor:{},originalColor:w,colorTransform:{}},style:E,_data:s,_id:u._id,source:u._data,rowId:u._id};T.className=Xl(u,i,e,r),a.push(T),r.cachePoint(u[x],T)}},F=0,N=e.length;F=0?C:k))):(p=c===Nc||r[e]>=0?C:k,y=Math.abs(p-(c===Nc?S:r[e]>=0?k:C))),d=k}else p=0,y=f[i];return{enterSpace:g,enter:d,pos:p,space:y}}),jf=function resolveDimensions(e,t,n){var r={xAxis:n.x,yAxis:n.y},i=Nf("x",r,t,e),a=i.enterSpace,o=i.enter,u=i.pos,c=i.space,s=Nf("y",r,t,e),l=s.enterSpace;return{enter:{x:o,y:s.enter,width:a,height:l},update:{x:u,y:s.pos,width:c,height:s.space}}},If=function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function sliceIterator(e,t){var n=[],r=!0,i=!1,a=void 0;try{for(var o,u=e[Symbol.iterator]();!(r=(o=u.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){i=!0,a=e}finally{try{!r&&u.return&&u.return()}finally{if(i)throw a}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),Df=function(){function defineProperties(e,t){for(var n=0;n=k.x&&e<=k.width+k.x&&t>=k.y&&t<=k.height+k.y){c=w;break}c=null}var C=c&&c._data;return C&&(u=this.getIdentifiersFromData(C,c._id)),c?{dimensions:[c.update],id:u,layerId:this.id()}:c}},{key:"getPlotSpan",value:function getPlotSpan(){return this._plotSpan}}],[{key:"formalName",value:function formalName(){return"bar"}},{key:"defaultConfig",value:function defaultConfig(){return Ff}},{key:"defaultPolicy",value:function defaultPolicy(e,t){var n=rf.defaultPolicy(e,t),r=n.encoding.color.field,i=n.transform;return r&&(i.groupBy=r),n}}]),BarLayer}(),zf={defClassName:"layer-tick",className:"",classPrefix:"muze",interaction:{highlight:[{type:"stroke",intensity:[0,0,-15,0]}],fade:[{type:"stroke",intensity:[0,0,15,0]}],focus:[{type:"stroke",intensity:[0,0,15,0]}]},innerPadding:.1,transform:{type:"identity"},transition:{effect:"cubic",duration:1e3},encoding:{color:{},x:{},y:{},x0:{},y0:{},strokeOpacity:{value:.5},fillOpacity:{value:.5}},states:{highlight:{className:"muze-layer-tick-highlight"},fadeout:{className:"muze-layer-tick-fadeout"},selected:{className:"muze-layer-tick-selected"}}},Hf=function(e){var t=e.points,n=e.container,r=e.keyFn,i=e.className,a=Ao(n),o=a.selectAll("path").data(t,r),u=o.enter().append("path");return a.attr("class",i||""),u.each(function(e){var t=Ao(this),n=e.enter||{};Object.entries(n).forEach(function(e){return!isNaN(e[1])&&t.attr(e[0],e[1])})}),o.exit().remove(),o.merge(u).each(function(e){var t=Ao(this),n=e.update,r=e.style||{},i=void 0!==n.x0?n.x0:n.x,a=void 0!==n.y0?n.y0:n.y,o="M "+n.x+" "+n.y+" L "+i+" "+a;e.className&&t.classed(e.className,!0),t.attr("d",o),Object.entries(r).forEach(function(e){return t.style(e[0],e[1])})})},Vf=(n(33),function(){function defineProperties(e,t){for(var n=0;n3&&void 0!==arguments[3]?arguments[3]:{},i=[],a=Yl(n),o=a.xAxis,u=a.yAxis,c=this.data().getFieldsConfig(),s=this.encodingFieldsInf(),l=s.xField,f=s.yField,h=s.x0Field,d=s.y0Field,p=s.xFieldType,y=s.yFieldType,g=p===ir.FieldType.DIMENSION,v=y===ir.FieldType.DIMENSION,m=g?Bc.X:v?Bc.Y:null,b=t.color,_=b&&b.field,x=c[_]&&c[_].index,w=this._store.get("measurement"),k=n.color,C=r.offset,S=C.x,P=C.y,A=r.span,E=A.x,M=A.y,O=0,T=e.length;O0&&(n[0]=[].concat(field_sanitizer_toConsumableArray(n[0]),field_sanitizer_toConsumableArray(n[1])),n[1]=[]),{fields:n.map(function(e,t){return 1===t?r[t].concat(n[t]):n[t].concat(r[t])}),dimensions:[].concat(field_sanitizer_toConsumableArray(n[0]),field_sanitizer_toConsumableArray(n[1])),measures:[].concat(field_sanitizer_toConsumableArray(r[0]),field_sanitizer_toConsumableArray(r[1])),temporal:[].concat(field_sanitizer_toConsumableArray(i[0]),field_sanitizer_toConsumableArray(i[1])),categorical:[].concat(field_sanitizer_toConsumableArray(a[0]),field_sanitizer_toConsumableArray(a[1]))}}(i,n)}),r=Sh(n,2),i=r[0],a=r[1],o=i.fields,u=i.dimensions,c=i.measures,s=i.temporal,l=i.categorical,f=a.fields,h=a.dimensions,d=a.measures;return{rows:o,rowDimensions:u,rowMeasures:c,rowTemporalFields:s,rowCategoricalFields:l,columns:f,columnTemporalFields:a.temporal,columnCategoricalFields:a.categorical,columnDimensions:h,columnMeasures:d}},Eh=function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function sliceIterator(e,t){var n=[],r=!0,i=!1,a=void 0;try{for(var o,u=e[Symbol.iterator]();!(r=(o=u.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){i=!0,a=e}finally{try{!r&&u.return&&u.return()}finally{if(i)throw a}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),Mh=function(){function defineProperties(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:{},t=arguments[1],n=Jh(th,t.rows,e),r=Eh(n,2),i=r[0],a=r[1],o=Jh("column",t.columns,e),u=Eh(o,2),c=u[0],s=u[1];return this.axisFrom({row:a,column:s}),this.headerFrom({row:i,column:c}),this}}]),VisualEncoder}(),Th={linear:Qs,band:Js,temporal:nl,size:Ml,color:Cl,shape:jl},Fh={dimension:f.BAND,categorical:f.BAND,measure:f.LINEAR,temporal:f.TIME},Nh=function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function sliceIterator(e,t){var n=[],r=!0,i=!1,a=void 0;try{for(var o,u=e[Symbol.iterator]();!(r=(o=u.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){i=!0,a=e}finally{try{!r&&u.return&&u.return()}finally{if(i)throw a}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}();function encoder_helper_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t1?e.position="both":e.position=n.axisFrom()[a],r[o]=Ih(o,s[i],e,o===$f?l:f)}),r}},{key:"getFacetsAndProjections",value:function getFacetsAndProjections(e,t){for(var n=[],r=[],i=0,a=[],o=[],u=e[0],c=e[1],s=u.length,l=c.length,f=this.axisFrom(),h=0;hi)for(var g=i;g-1&&(r=[[b,b]],a.splice(_,1)),o.splice(0,1)}else{var x=a.length-1,w=a[x];r=[[w]];var k=Dh(o,w);k>-1&&(r=[[w,w]],o.splice(k,1)),a.splice(x,1)}return{facets:n=(n=[].concat(a,o)).filter(function(e,t,n){return t===n.findIndex(function(t){return t.toString()===e.toString()})}),projections:r}}},{key:"fieldSanitizer",value:function fieldSanitizer(e,t){return function get(e,t,n){null===e&&(e=Function.prototype);var r=Object.getOwnPropertyDescriptor(e,t);if(void 0===r){var i=Object.getPrototypeOf(e);return null===i?void 0:get(i,t,n)}if("value"in r)return r.value;var a=r.get;return void 0!==a?a.call(n):void 0}(CartesianEncoder.prototype.__proto__||Object.getPrototypeOf(CartesianEncoder.prototype),"fieldSanitizer",this).call(this,e,t)}},{key:"getRetinalFieldsDomain",value:function getRetinalFieldsDomain(e,t){var n=e.groupedModel,r={};for(var i in t)if({}.hasOwnProperty.call(t,i)){var a=t[i],o=a.field;if(!a.domain&&o){var u=Zh(n,o);r[o]=u}}return r}},{key:"serializeLayerConfig",value:function serializeLayerConfig(e){var t=[];return e.length&&e.forEach(function(e,n){var r=Gf.sanitizeLayerConfig(e);r.order=n,t.push(r)}),t}},{key:"getLayerConfig",value:function getLayerConfig(e,t){var n=[],r=e.columnFields,i=e.rowFields;return r.forEach(function(e){var r=e.toString();i.forEach(function(i){var a=[],o=i.toString(),u={x:{field:r},y:{field:o}},c=i.subtype(),s=function getDefaultMark(e,t){return"categorical"===e||"categorical"===t?"bar":"temporal"===e||"temporal"===t?"line":"point"}(e.subtype(),c),l=[{mark:s,def:{mark:s,encoding:u}}],f=function getLayerConfFromFields(e,t,n){return n.filter(function(n){var r,i,a,o=n instanceof Array?n:[n],u=(r=[]).concat.apply(r,encoder_helper_toConsumableArray(o.map(function(e){return e.encoding}).filter(function(e){return void 0!==e})));if(!u.length)return!0;var c=(i=[]).concat.apply(i,encoder_helper_toConsumableArray(u.map(function(e){return[e.x&&e.x.field,e.x0&&e.x0.field]}))).filter(function(e){return void 0!==e&&null!==e}),s=(a=[]).concat.apply(a,encoder_helper_toConsumableArray(u.map(function(e){return[e.y&&e.y.field,e.y0&&e.y0.field]}))).filter(function(e){return void 0!==e&&null!==e});if(!c.length&&!s.length)return!0;var l=!!c.length&&c.every(function(t){return-1!==e.indexOf(t)}),f=!!s.length&&s.every(function(e){return-1!==t.indexOf(e)});return c.length&&s.length?l&&f:l||f})}(e.getMembers(),i.getMembers(),t||[]);a=f.length?f.map(function(e){var t=na(na({},l[0].def),e),n=Gf.getSerializedConf(t.mark,t);return{mark:t.mark,order:t.order,def:n}}):l,n.push.apply(n,function cartesian_encoder_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);tt)for(var h=t;h0&&(e=na(e,t[0])),n.push(e)}),0===n.length&&(n=t),this.layers(n),n}},{key:"serializeLayerConfig",value:function serializeLayerConfig(e){var t=[];return e.length&&e.forEach(function(e){var n=Gf.getSerializedConf(e.mark,e);t.push({mark:e.mark,def:n})}),t}}],[{key:"type",value:function type(){return"polar"}}]),PolarEncoder}(),Hh=function(){function defineProperties(e,t){for(var n=0;n1&&void 0!==arguments[1]?arguments[1]:{},n=e.axisType,r=e.fieldsConfig,i=t.field,a=[],o=Th[n];return t.type=t.type?t.type:Qh(r,i||null),a.push(new o(t)),a}({axisType:e,fieldsConfig:t},n[e])}),r}},{key:"getLayerConfig",value:function getLayerConfig(e,t){var n=[];return t.forEach(function(t){var r=t;[nh,rh,ih].forEach(function(t){if(e[t]&&e[t].field){var n=r.def;r.def instanceof Array?n.forEach(function(n){n.encoding=n.encoding||{},!n.encoding[t]&&(n.encoding[t]={}),n.encoding[t].field=e[t].field}):(n.encoding=n.encoding||{},!n.encoding[t]&&(n.encoding[t]={}),n.encoding[t].field=e[t].field)}}),n.push(r)}),n}},{key:"setCommonDomain",value:function setCommonDomain(e){var t=e.domains,n=e.axes,r=e.encoding;return Object.entries(r).forEach(function(e){if(e[1]&&e[1].field){var r=e[0],i=e[1].field;i&&n[r].forEach(function(n){var r=t[i];!e[1].domain&&n.updateDomain(r)})}}),n}}],[{key:"type",value:function type(){return"retinal"}}]),RetinalEncoder}(),Uh=function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function sliceIterator(e,t){var n=[],r=!0,i=!1,a=void 0;try{for(var o,u=e[Symbol.iterator]();!(r=(o=u.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){i=!0,a=e}finally{try{!r&&u.return&&u.return()}finally{if(i)throw a}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),Wh=void 0;function group_utils_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t0?e[0].map(function(i,a){return new n({type:"header"},{labelManager:r}).source(function getHeaderText(e,t,n){var r="";if(t===n-1&&e.length>n){for(var i=t;i0&&void 0!==arguments[0]?arguments[0]:[];return new Vo(e)}([]),a=(i=i.data(n,r)).enter().append(t).merge(i);return i.exit()&&i.exit().remove(),a},nd=function getBorders(e,t){var n={top:!1,bottom:!1},r={left:!1,right:!1},i={top:!1,bottom:!1,left:!1,right:!1},a=e.rows,o=e.columns,u=e.values,c=Uh(a,2),s=c[0],l=c[1],f=Uh(o,2),h=f[0],d=f[1],p=t.fieldInfo(),y=p.rowDimensions,g=p.columnDimensions,v=p.rowTemporalFields,m=p.columnTemporalFields,b=p.columnMeasures,_=p.rowMeasures,x=y.length+g.length,w=_.length+b.length,k=v.length+m.length;if("polar"===t.constructor.type()){if(!x)return{showRowBorders:n,showColBorders:r,showValueBorders:i}}else if(!w&&!k&&x<=2)return{showRowBorders:n,showColBorders:r,showValueBorders:i};return n=function getRowBorders(e,t){var n={top:!1,bottom:!1};return(e.length>1||t.length>1)&&(n.top=!0,n.bottom=!0),n}(s,l),r=function getColumnsBorders(e,t){var n={left:!1,right:!1};return(e.length||t.length)&&(e[0]&&e[0].length>1||t[0]&&t[0].length>1)&&(n.left=!0,n.right=!0),n}(h,d),i=function getValueBorders(e,t){var n={top:!0,left:!0,bottom:!0,right:!0},r=[ah,oh],i=["top","bottom"];return e.forEach(function(e,t){e[0]&&e[0].length?n[r[t]]=!0:n[r[t]]=!1}),t.forEach(function(e,t){e.length?n[i[t]]=!0:n[i[t]]=!1}),n}([s,l],[h,d]),u.length>1&&(i.top=!0,i.bottom=!0),u.length&&u[0].length>1&&(i.left=!0,i.right=!0),{showRowBorders:n,showColBorders:r,showValueBorders:i}};function action_behaviour_map_defineProperty(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var rd=(action_behaviour_map_defineProperty(qh={},a.DRAG,{behaviours:[u.BRUSH],touch:!1}),action_behaviour_map_defineProperty(qh,a.HOVER,{behaviours:[u.HIGHLIGHT]}),action_behaviour_map_defineProperty(qh,a.LONGTOUCH,{behaviours:[u.SELECT],touch:!0}),action_behaviour_map_defineProperty(qh,a.TOUCHDRAG,{behaviours:[u.BRUSH],touch:!0}),action_behaviour_map_defineProperty(qh,a.CLICK,{behaviours:[u.SELECT],touch:!1}),qh),ad="config",od="data",ud="axes",cd="layerDef",sd="width",ld="height",fd="mount",hd="primaryXAxisUpdated",dd="primaryYAxisUpdated",pd="secondaryXAxisUpdated",yd="secondaryYAxisUpdated",gd="transform",vd="dataDomain",md="layersCreated",bd="fields",_d="timeDiffs",xd="layerAxisIndex";function src_helper_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t2&&void 0!==arguments[2]?arguments[2]:{},r=void 0,i=n.payload,a=n.selectionSet,o=n.propagationFields[t]||{},u=o.fields||[],c=o.append,s=i.criteria,l=e.context,f=l.cachedData()[0],h=l.id(),d=e.sideEffects(),p=e._behaviourEffectMap,y=a.mergedEnter.model,g=f.getFieldsConfig();i.sourceUnit=h,i.action=t,i.sourceCanvas=l.parentAlias();var v=e._propagationBehaviourMap[t]||t,m=[];null===s?r=null:Di(s)?(m=Object.keys(s||{}),r=y?y.project(m):null):(m=s[0],r=y?y.project(m):null);var b=l.facetByFields();if(null!==r&&u.length){var _=r.getData().schema.map(function(e){return e.name});r=function getModelWithFacetData(e,t){var n=e.getData(),r=n.schema,i=n.data,a=[],o=t[0].map(function(e){return{name:""+e,type:ir.FieldType.DIMENSION}}),u=t[1];return i.forEach(function(e){var t={};r.forEach(function(n,r){t[n.name]=e[r]}),o.forEach(function(e,n){t[e.name]=u[n]}),a.push(t)}),new ar.a(a,[].concat(data_propagator_toConsumableArray(r),data_propagator_toConsumableArray(o)))}(r,b),m=c?[].concat(data_propagator_toConsumableArray(_),data_propagator_toConsumableArray(u)):u,r=r.project(m)}var x=!1;m.length&&m.every(function(e){return g[e]&&g[e].def.type===ir.FieldType.MEASURE})&&(x=!0);var w=l.parentAlias();i.action=t;var k=e._actions.behavioural[v],C=!!k&&k.constructor.mutates(),S=function filterFn(e,t){var n=p[e.config.action],r=!e.config.groupId||n.some(function(e){return d[e.name||e].constructor.mutates()});return e.config.groupId!==t.groupId&&r},P=e._actions.behavioural[t],A=!!P&&P.constructor.mutates(),E={payload:i,action:t,criteria:r,isMutableAction:A,propagateInterpolatedValues:x,groupId:w,sourceId:A?w:h,filterFn:S,enabled:function enabled(e,n){return t===v||e.payload.sourceCanvas===n.context.parentAlias()}};f.propagate(r,E,!0),t!==v&&(E={payload:i,sourceId:C?w:h,criteria:r,isMutableAction:C,propagateInterpolatedValues:x,action:v,groupId:w,applyOnSource:t===v,enabled:function enabled(e,t){return e.payload.sourceCanvas!==t.context.parentAlias()},filterFn:S},f.propagate(r,E,!0,{filterImmutableAction:function filterImmutableAction(e,t){return e.groupId!==t.groupId}}))},Xd=function(){function defineProperties(e,t){for(var n=0;n1){var u=r[0].config();if("linear"===r[0].constructor.type()){if(u.alignZeroLine){r.forEach(function(e){return e.config({nice:!1})});var c=function getAdjustedDomain(e,t){var n=e[0]/(e[0]-t[0]),r=e[1]/(e[1]-t[1]),i=!1;return t[0]>0&&t[1]>0&&t[1]>0&&e[1]>0&&(i=!0,t[0]=0,t[1]=0),t[0]<0&&t[1]<0&&t[1]<0&&e[1]<0&&(i=!0,e[0]=0,e[1]=0),i||n===r||(n1&&void 0!==arguments[1]?arguments[1]:{},n=[],r=e;if(null===e)return[];var i=this.layers(),a=i.length;Di(e)&&(r=[Object.keys(e)],r=[].concat(visual_unit_toConsumableArray(r),visual_unit_toConsumableArray(function transposeArray(e){return e[0].map(function(t,n){return e.map(function(e){return e[n]})})}(Object.values(e)))));for(var o=0;o1&&void 0!==arguments[1]?arguments[1]:[]].map(function(e){return e.reduce(function(e,t){return e=[].concat(matrix_model_toConsumableArray(e),matrix_model_toConsumableArray(t.getMembers()))},[])})},ep=function createSelectedDataModel(e,t,n){return e.select(function(e){return t.every(function(t,r){return e[t].value===n[r]})})},tp=function uniqueKeyGenerator(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:[],i=t.facets,a=t.dataModel,o=t.uniqueValues;if(i[n+1]){var u=i[n];o.forEach(function(t){var o=a.select(function(e){return e[u].value===t}),c=Zh(o,i[n+1]);uniqueKeyGenerator(e,{facets:i,dataModel:o,uniqueValues:c},n+1,[].concat(matrix_model_toConsumableArray(r),[t]))})}else o.forEach(function(t){e.push([].concat(matrix_model_toConsumableArray(r),[t]))})},np=function projectRows(e,t){var n=t.allColumnProjections,r=t.rowProjections,i=t.optionalProjections;return r.length>0?r.map(function(t){var r=Jd(t,n),a=Zd(r,2),o=a[0],u=a[1];return e.project([].concat(matrix_model_toConsumableArray(o),matrix_model_toConsumableArray(u),matrix_model_toConsumableArray(i)))}):[e]},rp=function pushToMatrix(e,t){var n,r=[],i=e.matrix,a=e.datamodel,o=e.facetInfo,u=e.fieldInfo,c=u.rowProjections,s=u.colProjections,l=u.optionalProjections,f=o.rowIndex,h=o.columnIndex,d=c[f%c.length]||[];s.length>0?r=s.map(function(e,n){var r=Jd(e,d),i=Zd(r,2),u=i[0],c=i[1],p=a.project([].concat(matrix_model_toConsumableArray(u),matrix_model_toConsumableArray(c),matrix_model_toConsumableArray(l))),y={rowFields:d,columnFields:e},g={rowIndex:f,columnIndex:h*s.length+n};return t(p,{projections:y,indices:g},o)}):r=[t(a,{projections:{rowFields:d,columnFields:[]},indices:{rowIndex:f,columnIndex:h}},o)];i[f]=i[f]||[],(n=i[f]).push.apply(n,matrix_model_toConsumableArray(r))},ip=function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function sliceIterator(e,t){var n=[],r=!0,i=!1,a=void 0;try{for(var o,u=e[Symbol.iterator]();!(r=(o=u.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){i=!0,a=e}finally{try{!r&&u.return&&u.return()}finally{if(i)throw a}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}();function cell_creator_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t0?d.length:1):(a=g,o=p.length>0?p.length:1),s.length&&f===u&&l&&a.length){var h={axis:l,length:o,type:u},v=[];i<2?(h.keys=a,h.facetConfig=c.rows,v=up(h,r,t,n)):(h.facetConfig=c.columns,h.keys=a[0].map(function(e,t){return a.map(function(e){return e[t]})}),v=up(h,r,t,n)),r[u+"Headers"]=v}else r[u+"Headers"]=null}),r},sp=function computeMatrices(e,t){var n=e.resolver,r=e.datamodel,i=e.componentRegistry,a=e.encoders,o=t.globalConfig,u=t.selection,c=t.transform,s=o.autoGroupBy,l=n.dependencies().smartlabel,f=r.getFieldsConfig(),h=n.layerConfig(),d=n.registry(),p=n.horizontalAxis().fields,y=n.verticalAxis().fields,g=n.optionalProjections(t,h),v=n.getAllFields(),m={normalizedColumns:y,normalizedRows:p,facetsAndProjections:v,layers:h,fieldMap:f,otherEncodings:g,encoders:a,facetConfig:o.facetConfig||{},axisFrom:o.axisFrom||{},selection:u},b={GeomCell:n.getCellDef(d.GeomCell),AxisCell:n.getCellDef(d.AxisCell),BlankCell:n.getCellDef(d.BlankCell),TextCell:n.getCellDef(d.TextCell)},_=Yh(p),x=Yh(y);n.colCells({}),n.rowCells({}),n.datamodelTransform(c||{}),n.resetSimpleAxes();var w={exitCellMap:n.cacheMaps().entryCellMap,entryCellMap:new Map};n.cacheMaps(w);var k={config:o,suppliedLayers:a.simpleEncoder.serializeLayerConfig(n.layerConfig()),resolver:n,cell:b.GeomCell,encoder:a.simpleEncoder,newCacheMap:w,detailFields:t.detail},C=r.getFieldsConfig(),S=r;if(!s.disabled){var P=function extractFields(e,t){var n,r=Object.values(e).map(function(e){var t,n,r=(t=[]).concat.apply(t,group_utils_toConsumableArray(e));return(n=[]).concat.apply(n,group_utils_toConsumableArray(r.map(function(e){return e instanceof _h?e.getMembers():e})))});return(n=[]).concat.apply(n,group_utils_toConsumableArray(r).concat(group_utils_toConsumableArray(t)))}(v,function getFieldsFromSuppliedLayers(e,t){var n,r=[],i=e.map(function(e){return e.encoding||{}});return r=(r=[].concat(group_utils_toConsumableArray(r),[(n=[]).concat.apply(n,group_utils_toConsumableArray(i.map(function(e){return Object.values(e).map(function(e){return e.field})})))])).filter(function(e){return t[e]&&t[e].def.type===ir.FieldType.DIMENSION})}(k.suppliedLayers,r.getFieldsConfig())),A=P.filter(function(e){return C[e]&&C[e].def.type===ir.FieldType.DIMENSION}),E=s.measures;S=r.groupBy(A.length?A:[""],E).project(P)}var M=function getMatrixModel(e,t,n){var r=[],i=[],a=[],o=[],u=[],c=[],s=t.rowFacets,l=t.colFacets;if(t.colProjections.forEach(function(e){o.push.apply(o,matrix_model_toConsumableArray(e))}),t.allColumnProjections=o,s.length>0){var f=s[0].toString(),h=Zh(e,f);tp(i,{facets:s,dataModel:e,uniqueValues:h}),i.forEach(function(n){var i,a=Jd(s),o=Zd(a,1)[0],u=ep(e,o,n);c.push([s,n]),(i=r).push.apply(i,matrix_model_toConsumableArray(np(u,t)))})}else{var d;(d=r).push.apply(d,matrix_model_toConsumableArray(np(e,t)))}if(r=r.length>0?r:[[]],l.length>0){var p=l.map(function(e){return""+e}),y=p[0],g=Zh(e,y);tp(a,{facets:p,dataModel:e,uniqueValues:g}),r.forEach(function(r,i){c[i]=c[i]||[[],[]],a.forEach(function(a,o){u[i]=u[i]||[];var s=r instanceof ar.a?r:e,f=ep(s,p,a),h={matrix:u,datamodel:f,facetInfo:{rowFacets:c[i],colFacets:[l,a],rowIndex:i,columnIndex:o},fieldInfo:t};rp(h,n)})})}else r.forEach(function(r,i){c[i]=c[i]||[[],[]];var a={matrix:u,datamodel:r||e,facetInfo:{rowFacets:c[i],colFacets:[[],[]],rowIndex:i,columnIndex:0},fieldInfo:t};rp(a,n)});var v=a.length>0?a[0].map(function(e,t){return a.map(function(e){return e[t]})}):a;return{matrix:u,rowKeys:i,columnKeys:v}}(S,v,n.valueCellsCreator(k));n.cacheMaps().exitCellMap.forEach(function(e){e.remove()}),n.cacheMaps().exitCellMap.clear(),n.valueMatrix(M.matrix),n.createUnits(i,t);var O=function mutateAxesFromMap(e,t){var n=null,r=null,i=e.xAxesMap,a=e.yAxesMap,o=t.x,u=t.y;return o&&o.forEach(function(e){var t=i.get(e);(n=n||[]).push(t)}),u&&u.forEach(function(e){var t=a.get(e);(r=r||[]).push(t)}),{xAxes:n,yAxes:r}}(n.cacheMaps(),n.axes()),T=O.xAxes,F=O.yAxes;n.axes({x:T,y:F});var N=function generateMatrices(e,t,n,r){var i=e.unitHeight,a=e.unitWidth,o=e.facetsAndProjections,u=e.normalizedRows,c=e.normalizedColumns,s=e.selection,l=e.axisFrom,f=e.facetConfig,h=e.encoders,d=cp({fields:{rows:u,columns:c},matrices:t,facetsAndProjections:o,selection:s,axisFrom:l,facetConfig:f,encoders:h},n,r),p=d.columnsPrimary,y=d.columnsSecondary,g=d.rowsPrimary,v=d.rowsSecondary,m=d.leftHeaders,b=d.topHeaders,_=d.bottomHeaders,x=d.rightHeaders,w=[g,v,p,y].map(function(e){return e?e.getObjects():[]}),k=ip(w,4),C=k[0],S=k[1],P=k[2],A=k[3],E=[m,x].map(function(e){return e?e.getObjects().map(function(e){return e.getObjects()}):[]}),M=ip(E,2),O=M[0],T=M[1],F=O.length?O.map(function(e,t){return C[t]=C[t]?[C[t]]:[],[].concat(cell_creator_toConsumableArray(e),cell_creator_toConsumableArray(C[t]))}):C?C.map(function(e){return[e]}):[],N=S.length?S.map(function(e,t){return[e].concat(cell_creator_toConsumableArray(T[t]||[]))}):T.length?T.map(function(e){return[].concat(cell_creator_toConsumableArray(e))}):[],j=[];b&&b.getObjects().forEach(function(e){e.getObjects().forEach(function(e,t){j[t]=j[t]||[],j[t].push(e)})});P.length&&j.push(P);var I=[];A.length&&I.push(A);var D=I.length;_&&_.getObjects().forEach(function(e){e.getObjects().forEach(function(e,t){I[t+D]=I[t+D]||[],I[t+D].push(e)})});if(!F.length&&!N.length){var L=new n.BlankCell;L.setAvailableSpace(a,i),F=[[L]]}if(!(j.length||I.length&&I[0].length)){var R=new n.BlankCell;R.setAvailableSpace(a,i),I=[[R]]}return{rows:[F,N],columns:[j,I],selectionObj:d}}(m,{valuesMatrix:M,axesMatrix:n.axes()},b,l),j=N.rows,I=N.columns,D=N.selectionObj;return n.rowMatrix(j),n.columnMatrix(I),{rows:n.rowMatrix(),columns:n.columnMatrix(),values:n.valueMatrix(),isColumnSizeEqual:x,isRowSizeEqual:_,selection:D,dataModels:{groupedModel:S,parentModel:r}}},lp=function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function sliceIterator(e,t){var n=[],r=!0,i=!1,a=void 0;try{for(var o,u=e[Symbol.iterator]();!(r=(o=u.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){i=!0,a=e}finally{try{!r&&u.return&&u.return()}finally{if(i)throw a}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),fp=function(){function defineProperties(e,t){for(var n=0;n0?h[0].map(function(){return new l}):[],right:d.length>0?d[0].map(function(){return new l}):[]},_=[ah,oh].map(function(e){return y.map(function(t,n){return n===y.length-1?m[e]:b[e]})}),x=lp(_,2),w=x[0],k=x[1];if(0===y.length){var C=[ah,oh].map(function(e){return g.map(function(t,n){return 0===n?m[e]:b[e]})}),S=lp(C,2);n=S[0],r=S[1]}else n=g.map(function(){return h.length>0?h[0].map(function(){return new l}):[]}),r=g.map(function(){return d.length>0?d[0].map(function(){return new l}):[]});return c.notify({client:[w,k,n,r],action:"initialized",formalName:"facet-headers"}),{topLeft:w,topRight:k,bottomLeft:n,bottomRight:r}}},{key:"getMatrices",value:function getMatrices(e,t,n,r){return sp({datamodel:e,componentRegistry:n,encoders:r,resolver:this},t)}}]),MatrixResolver}(),dp=function(){function defineProperties(e,t){for(var n=0;n3&&void 0!==arguments[3]?arguments[3]:{},i=void 0,a=e.context.constructor.type(),o=r.payload,u=e.context.data(),c=e.context.metaData(),s=c.getData().schema[0].type,l={},f=e.context._id;l.action=Pp[t]||t,l.sideEffects=Ep[t],l.sourceCanvas=e.context.canvasAlias();var h=e._actions.behavioural[l.action].constructor.mutates();if(null===o.criteria)i=null;else{var d=n.mergedEnter,p=u.filter(function(e){return-1!==d.uids.indexOf(e.id)}).map(function(e){return e.value});if("step"===a||"discrete"===a&&"measure"===s){var y=Object.keys(o.criteria||{})[0];i=(p=u.filter(function(e){return-1!==d.uids.indexOf(e.id)}).map(function(e){return e.range})).length?c.select(function(e){for(var t=!1,n=0;n=p[n][0]&&e[y].value<=p[n][1]);n++);return t},{saveChild:!1}):null}else"gradient"===a?i=ca(c,o.criteria):p.length?i=function assembleModelFromIdentifiers(e,t){var n=[],r=void 0,i=e.getFieldsConfig();return t.length?function(){for(var e=t[0],a=e.length,o=0;o=s+l?[i.invert(s+l-c),i.invert(s+l)]:f-l1&&void 0!==arguments[1]?arguments[1]:{},i=t.config().classPrefix;e.mergedEnter.length||e.mergedExit.length?(n(e.mergedExit,r.className||i+"-legend-brighten",!1),n(e.mergedExit,r.className||i+"-legend-fadeout",!0),n(e.mergedEnter,r.className||i+"-legend-fadeout",!1)):n(e.completeSet,r.className||i+"-legend-fadeout",!1)},brighten:function brighten(e){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},i=t.config().classPrefix;e.mergedEnter.length||e.mergedExit.length?(n(e.mergedEnter,r.className||i+"-legend-brighten",!0),n(e.mergedExit,r.className||i+"-legend-brighten",!1)):n(e.completeSet,r.className||i+"-legend-brighten",!1)}}},Vp=function(){function defineProperties(e,t){for(var n=0;n2&&void 0!==arguments[2]?arguments[2]:{};(0,this._strategies[n.strategy||this._strategy])(e,this)}}],[{key:"formalName",value:function formalName(){return"highlighter"}}]),LegendHighlighter}(),Wp={config:{sanitization:function sanitization(e,t){return na(e._config||{},t)}},data:{},fieldName:{},legendContainer:{},measurement:{sanitization:function sanitization(e,t){var n=na(e._measurement,t);return["padding","border","margin"].forEach(function(e){n[e]=Math.min(n[e]>0?n[e]:0,.1*n.maxWidth,.1*n.maxHeight)}),n}},logicalSpace:{},metaData:{},range:{sanitization:function sanitization(e,t){return e.scale().range(t),e.resetLogicalSpace(),e.store().commit("range",t),t}},scale:{},smartTicks:{},store:{},title:{sanitization:function sanitization(e,t){return na(e._title||{},t)}}},qp="horizontal",Gp="vertical",Yp={height:30,width:30,maxWidth:1/0,maxHeight:1/0,padding:2,margin:2,border:1},Xp={text:"",orientation:function orientation(e){return"left"===e||"right"===e?"left":"center"}},Kp={classPrefix:"muze",formatter:{bounds:{lower:"less than",upper:"more than"}},item:{text:{orientation:"right",width:10,formatter:function formatter(e){return e}},icon:{className:"legend-icon",height:20,width:20,color:"rgba(0,0,0,.5)",type:"square"}}},$p=function ICON_MAP(e){return e&&"string"==typeof e?pa(e):e};function legend_helper_defineProperty(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var Qp=function getScaleInfo(e){var t=e.constructor.type();return{scaleType:t,domain:e.uniqueValues(),steps:e.config().stops||1,scaleFn:Mp[t]}},Zp=function getInterpolatedData(e,t){for(var n=[],r=ia()(e[0],e[1]),i=0;i<=t;i++)n[i]=r(i/t);return n},Jp=function getDomainBounds(e,t,n){var r,i=t.scaleFn,a=t.scaleType,o=t.scale,u=n.domain,c=n.domainBounds,s=n.domainLeg,l=n.steps,f=u["lower"===e?0:u.length-1],h=l["lower"===e?0:l.length-1];return legend_helper_defineProperty(r={},a,"size"===a?o[i](f)*o.getScaleFactor():o[i](f)),legend_helper_defineProperty(r,"value",c[e]),legend_helper_defineProperty(r,"id","lower"===e?0:s.length+2),legend_helper_defineProperty(r,"range",[f,h]),r},ey=function(){function defineProperties(e,t){for(var n=0;n0?1.25*h.height:0,p=h.width,y=this.getLabelSpaces(s,c),g=function computeItemSpaces(e,t,n){var r=0,i=0,a={width:0,height:0},o=t.effPadding,u=t.titleWidth,c=t.labelSpaces,s=t.titleHeight,l=t.maxWidth,f=e.item,h=e.align,d=f.icon,p=f.text.orientation,y=[],g=[],v=0;return c.forEach(function(e,t){var c={width:0,height:0},s={width:0,height:0},l=n[t]||{};"left"===p||"right"===p?(e.width+=o,s.width=(l.size?2*Math.sqrt(l.size/Math.PI):d.width)+o,v=Math.max(s.width,v),c.width=e.width+v,e.height=Math.max(e.height,d.height)+o,s.height=e.height,c.height=e.height):(e.width=Math.max(e.width,l.size?2*Math.sqrt(l.size/Math.PI):d.width)+o,s.width=e.width,c.width=e.width,v=Math.max(s.width,v),e.height+=o,s.height=d.height+o,c.height=e.height+s.height),"horizontal"===h?r=Math.max(r,c.height):(r+=c.height,i=Math.max(i,c.width,u)+o),a={width:Math.max(c.width,a.width),height:Math.max(c.height,a.height)},y.push(c),g.push(s)}),y.forEach(function(e,t){"horizontal"===h?(e.height=r,g[t].width=v,"left"===p||"right"===p?(c[t].height=r,g[t].height=r,y[t].width=c[t].width+v):(c[t].width=v,y[t].width=v,c[t].width=v),i=Math.max(i+y[t].width,u)):(e.width=Math.max(i,l),"top"===p||"bottom"===p?(c[t].width=i,g[t].width=i,v=i):(g[t].width=v,y[t].width=c[t].width+v,c[t].width=a.width-v,i=Math.max(i,e.width,u)+o))}),{totalHeight:r+=s+o,totalWidth:i,itemSpaces:y,iconSpaces:g,maxItemSpaces:a,maxIconWidth:v}}(this.config(),{effPadding:s,titleWidth:p,labelSpaces:y,titleHeight:d,maxWidth:r,maxHeight:i},this.data()),v=g.totalHeight,m=g.totalWidth,b=g.itemSpaces,_=g.iconSpaces,x=g.maxItemSpaces,w=g.maxIconWidth;return this.measurement({width:Math.max(m,t)+f+l,height:Math.max(v,n)+f+l,labelSpaces:y,iconSpaces:_,itemSpaces:b,maxItemSpaces:x,maxIconWidth:w,titleSpaces:{width:Math.min(r,this.measurement().width)-f-l,height:d}}),this}},{key:"getTitleSpace",value:function getTitleSpace(){return this._labelManager.setStyle(Lo(Ao("body"),this.config().classPrefix+"-legend-title")),this._labelManager.getOriSize(this.title().text?this.title().text:"")}},{key:"renderTitle",value:function renderTitle(e){var t=this.measurement(),n=t.titleSpaces,r=t.border,i=t.padding;return function titleCreator(e,t,n,r){return Eo(e,"div",[1],r.classPrefix+"-legend-title").style("width","100%").style("height",n.height+"px").style("padding-left",n.padding+"px").style("padding-right",n.padding+"px").style("border-bottom-width",n.border+"px").style("text-align",t.orientation instanceof Function?t.orientation(r.position):t.orientation).text(t.text).node()}(e,this.title(),{height:n.height,border:r,padding:i},this.config())}},{key:"render",value:function render(){var e=this.firebolt(),t=this.config().classPrefix,n=this.measurement(),r=n.maxWidth,i=n.maxHeight,a=n.width,o=n.height,u=n.margin,c=n.border,s=Eo(Ao(this.mount()),"div",[1],t+"-legend-box");return s.classed(t+"-legend-box-"+this._id,!0),s.style("float","left"),s.style("width",Math.min(r,a)-2*u+"px").style("height",Math.min(i,o)-2*u+"px").style("margin",u+"px").style("border-width",c+"px"),this.legendContainer(s.node()),this.renderTitle(s),e.createSelectionSet(this.data().map(function(e){return e.id})),s}},{key:"getCriteriaFromData",value:function getCriteriaFromData(e){var t=this.fieldName();return"measure"===this.metaData().getData().schema[0].type?function simple_legend_defineProperty(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}({},t,e.range):[[t],[e.value]]}}],[{key:"create",value:function create(e){return new SimpleLegend(e)}},{key:"defaultConfig",value:function defaultConfig(){return Kp}},{key:"defaultMeasurement",value:function defaultMeasurement(){return Yp}}]),SimpleLegend}();function position_config_defineProperty(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var oy=(position_config_defineProperty(ty={},"horizontal",{datasets:function datasets(e){return{row:[1],column:e}},itemContainerMeasures:function itemContainerMeasures(e){var t=e.itemSpaces;return{row:{width:e.width+"px",padding:"0px"},column:{width:function width(e,n){return t[n].width+"px"},padding:"0px"}}},getStepSpacesInfo:function getStepSpacesInfo(e){var t=e.maxItemSpaces;return{iconHeight:e.height,iconWidth:t.width,stepPadding:{horizontal:!0,vertical:!1}}}}),position_config_defineProperty(ty,"vertical",{datasets:function datasets(e){return{row:e,column:function column(e){return[e]}}},itemContainerMeasures:function itemContainerMeasures(e,t){var n=e.width;return{row:{width:n+"px",padding:t.padding+"px"},column:{width:n+"px",padding:"0px"}}},getStepSpacesInfo:function getStepSpacesInfo(e){var t=e.maxItemSpaces,n=e.width;return{iconHeight:t.height,iconWidth:n,stepPadding:{horizontal:!1,vertical:!0}}}}),ty),uy=(position_config_defineProperty(ny={},"left",oy.vertical),position_config_defineProperty(ny,"right",oy.vertical),position_config_defineProperty(ny,"top",oy.horizontal),position_config_defineProperty(ny,"bottom",oy.horizontal),ny),cy=(position_config_defineProperty(ry={},"left","end"),position_config_defineProperty(ry,"right","start"),position_config_defineProperty(ry,"top","center"),position_config_defineProperty(ry,"bottom","center"),ry),sy=(position_config_defineProperty(iy={},"left",[Op,"shape"]),position_config_defineProperty(iy,"right",["shape",Op]),position_config_defineProperty(iy,"top",[Op,"shape"]),position_config_defineProperty(iy,"bottom",["shape",Op]),iy),ly=function createLegendSkeleton(e,t,n,r){var i,a,o,u,c=e.measurement(),s=c.margin,l=c.border,f=c.titleSpaces,h=c.width,d=c.height,p=c.maxWidth,y=c.maxHeight;a=d-(f.height+2*s+2*l),i=h-(2*s+2*l),o=y-(f.height+2*s+2*l),u=p-(2*s+2*l);var g=Eo(t,"div",[1],n+"-legend-body");return g.select("."+n+"-legend-overflow").remove(),u&&u4)}(u)?u:$p(u).size(o)(),Eo(a,"path",function(e){return[e]}).attr("d",l)}}return e[1]="circle",createShape(e,t,"circle")}(n,Eo(l,"g",[n[1]],i+"-legend-icon"),n[3]?"circle":"square",o,a).attr("transform","translate("+(u/2-c)+" "+a/2+")").attr("fill",n[2]||s):Eo(l,"rect",[n[1]],i+"-legend-icon").attr("x",0).attr("y",0).attr("width",u).attr("height",a).attr("fill",n[2]||s)},py=function(){function defineProperties(e,t){for(var n=0;na[a.length-1]&&t.push(i[1])):t=Zp(i,a-1),(t=[].concat(gradient_legend_toConsumableArray(new Set(t))).sort(function(e,t){return e-t})).map(function(n,i){var a,u=t[i];return gradient_legend_defineProperty(a={},r,"size"===r?e[o](n)*e.getScaleFactor():e[o](Math.floor(n))),gradient_legend_defineProperty(a,"value",+u.toFixed(2)),gradient_legend_defineProperty(a,"id",i),a}).filter(function(e){return null!==e.value})}},{key:"getLabelSpaces",value:function getLabelSpaces(e){this.config({item:{text:{orientation:this.config().position}}});var t=function createAxis(e){var t=e.data(),n=e.config().align,r=e._cells.AxisCell,i=new Qs({id:"legend-"+e._id,orientation:n===Gp?"right":"bottom",style:e._computedStyle,nice:!1,showAxisName:!1,tickValues:t.map(function(e){return e.value}),fixedBaseline:!1},{labelManager:e._labelManager});return i.domain(gy(t)),i.range([1,1]),(new r).source(i).config({margin:{left:0,bottom:0,top:0,right:0}})}(this),n=t.getLogicalSpace(),r={width:n.width-e,height:n.height-e},i=t.source().domain().length,a=new Array(i).fill(r);return this.axis(t),a}},{key:"getDrawingContext",value:function getDrawingContext(){return{svgContainer:this._legendGradientSvg}}},{key:"render",value:function render(){var e=this.firebolt(),t=function get(e,t,n){null===e&&(e=Function.prototype);var r=Object.getOwnPropertyDescriptor(e,t);if(void 0===r){var i=Object.getPrototypeOf(e);return null===i?void 0:get(i,t,n)}if("value"in r)return r.value;var a=r.get;return void 0!==a?a.call(n):void 0}(GradientLegend.prototype.__proto__||Object.getPrototypeOf(GradientLegend.prototype),"render",this).call(this,this.mount());return function renderGradient(e,t){var n,r,i=e.config(),a=i.align,o=i.classPrefix,u=i.item,c=e.data(),s=vy(t,o,c),l=s.legendContainer,f=s.legendGradSvg,h=s.legendGradCont,d=s.linearGradient,p=s.legendRect,y=e.axis().source().getAxisDimensions().tickLabelDim,g=e.measurement(),v=g.padding,m=g.margin,b=g.border,_=g.titleSpaces,x=g.maxHeight,w=g.maxWidth,k=g.height,C=g.width,S={};n=Math.floor(k-(_.height+2*m+2*b)),r=Math.floor(C-(2*m+2*b)),a===qp?(S.height=u.icon.height,S.width=r-2*v-y.width/2,d.attr("x2","100%").attr("y1","0%"),h.attr("transform","translate( "+y.width/2+" 0)"),my(e,l,n-u.icon.height-v,r-2*v-1),l.classed(o+"-overflow-x",C>w),Mo(l,{height:k+"px",width:Math.min(C,w)+"px",padding:v+"px"}),p.attr("height",S.height),p.attr("width",S.width-y.width/2)):(S.height=n-2*v-y.height/2,S.width=u.icon.width,d.attr("x2","0%").attr("y1","100%"),h.attr("transform","translate(0 "+y.height/2+")"),my(e,l,n-2*v-1,r-u.icon.width-2*v),l.classed(o+"-overflow-y",k>x),Mo(l,{height:Math.min(k,x)+"px",width:C+"px",padding:v+"px"}),p.attr("height",S.height-y.height/2),p.attr("width",S.width)),Mo(f,{height:S.height+"px",width:S.width+"px"}),Mo(p,{fill:"url(#linear-gradient)"}),f.attr("height",S.height),f.attr("width",S.width),e.measurement({gradientDimensions:S}),e._legendGradientSvg=f}(this,t),t.selectAll("div").style("float","left"),e.mapActionsAndBehaviour(),e.createSelectionSet(this.data().map(function(e){return e.id})),t}},{key:"getCriteriaFromData",value:function getCriteriaFromData(e){return[[this.fieldName()],[e.value]]}}],[{key:"create",value:function create(e){return new GradientLegend(e)}},{key:"type",value:function type(){return"gradient"}}]),GradientLegend}(),xy=function(){function defineProperties(e,t){for(var n=0;na[a.length-1]&&(c.upper=[u.bounds.upper+" "+a[a.length-1]])):t=Zp(i,a),t=(t=[].concat(step_legend_toConsumableArray(new Set(t))).sort(function(e,t){return e-t})).map(function(n,i){var a,u=null;return i0&&void 0!==arguments[0]?arguments[0]:{},t=this._registrableComponents,n=na(na({},function defaultPolicy(e){var t=e.map(function(e){return e.alias()});return{behaviours:{"*":function _(e){var n=e.sourceCanvas;return!n||-1!==t.indexOf(n)}}}}(t)),e);return t.forEach(function(e){e.firebolt().crossInteractionPolicy(n)}),this}}]),ActionModel}()),Ny={classPrefix:"muze",interaction:{sideEffect:"individual"},legend:{position:"right",color:{show:!0,padding:2,margin:2,border:1,height:30,width:30},shape:{show:!0,padding:2,margin:2,border:1,height:30,width:30},size:{show:!0,padding:2,margin:2,border:1,height:30,width:30}},showHeaders:!1,minWidth:100,minHeight:100,border:{style:"solid",color:"#d6d6d6",width:2,collapse:!0,spacing:0},autoGroupBy:{disabled:!1}},jy={data:{value:null,meta:{typeCheck:function typeCheck(e){return e instanceof ar.a}}},width:{value:0,meta:{sanitization:Qi,typeCheck:Number.isInteger}},height:{value:0,meta:{sanitization:Qi,typeCheck:Number.isInteger}},minUnitWidth:{value:50,meta:{sanitization:Qi,typeCheck:Number.isInteger}},minUnitHeight:{value:50,meta:{sanitization:Qi,typeCheck:Number.isInteger}},config:{value:null,meta:{typeCheck:"constructor",typeExpected:"Object",sanitization:function sanitization(e,t){var n=na({},t),r=na(n,Ny);return na(r,e)}}}},Iy="width",Dy="height",Ly="top",Ry="left",By="right",zy="bottom",Hy="center",Vy="rowLeft",Uy="rowRight",Wy="colBottom",qy="colTop",Gy="rowSpan",Yy="colSpan",Xy="rowRoot",Ky="columnRoot",$y=function(){function defineProperties(e,t){for(var n=0;n1)return e;var f=o[t-1];if(f&&f.valueOf()===e.valueOf()){var h=n[r-1];return h?h[t].valueOf()===h[t-1].valueOf()?null:e:null}return e}return e},ag=function calcRowSpan(e,t,n,r){var i=1;if(!e||"string"!=typeof e.valueOf())return 1;for(var a=!1;!a;)n[r+i]&&null===n[r+i][t]?i+=1:a=!0;return i},og=function calcColSpan(e,t,n,r){var i=1;if(!e||"string"!=typeof e.valueOf())return 1;for(var a=!1;!a;)null===n[r][t+i]?i+=1:a=!0;return i},ug=function mask(e,t){return e.map(function(n,r){if(t===Vy||t===Uy){for(var i=n.map(function(n,i){return ig(n,i,e,r,t)}),a=[],o=n.length-i.length,u=0;u1&&r.setAvailableSpace(0,r.availHeight()),Ao(this).style("height",r.availHeight()+"px"),n}),l.each(function(e){e.placeholder&&e.placeholder.render(this)}).exit().each(function(e){e.placeholder&&e.placeholder.remove()}),applyBorders(l,r.border,n,a)})}function utils_defineProperty(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function utils_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t0?e[0]:e[1];return n?(r=e[0].length>0?[].concat(utils_toConsumableArray(e[0])):[],r=e[1].length>0?[].concat(utils_toConsumableArray(r),utils_toConsumableArray(e[1])):r):r=r.map(function(t,n){var r=[];return e[0].length>0&&(r=[].concat(utils_toConsumableArray(e[0][n]))),e[1].length>0&&(r=[].concat(utils_toConsumableArray(r),utils_toConsumableArray(e[1][n]))),r}),r},fg=function computeLogicalSpace(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments[1],n=arguments[2],r=t.isTransposed,i=void 0!==r&&r,a=t.unitMeasures,o=function getMeasureInfo(e){return e?{firstMeasure:Dy,secondMeasure:Iy}:{firstMeasure:Iy,secondMeasure:Dy}}(i),u=o.firstMeasure,c=o.secondMeasure,s=e.values,l=function getMinMeasures(e,t){return e?{height:0,width:t.width}:{height:t.height,width:0}}(i,a);if(s[0].key){var f,h=(utils_defineProperty(f={},u,0),utils_defineProperty(f,c,0),f);return s.forEach(function(e){var r=computeLogicalSpace(e,t,n);h[u]=Math.max(h[u],r[u],l[u]),h[c]+=+r[c]}),e.space=h,h}return function getLogicalSpace(e,t,n){var r,i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:[],a=t.firstMeasure,o=t.secondMeasure,u=0,c=0;return e.values.forEach(function(t){var r,s=0,l=0;t.forEach(function(e,t){e.logicalSpace(null);var r=e.getLogicalSpace();l=Math.max(l,+r[o],n[o]),i[t]=Math.max(i[t]||0,r[a]),s+=+i[t]}),c+=l,u=Math.max(u,s),e.space=(utils_defineProperty(r={},o,Math.ceil(c)),utils_defineProperty(r,a,Math.ceil(u)),r)}),utils_defineProperty(r={},o,c),utils_defineProperty(r,a,u),r}(e,{firstMeasure:u,secondMeasure:c},l,n)},hg=function extraCellsRemover(e,t,n){return e.slice(t,-n)},dg={config:{sanitization:function sanitization(e,t){return na(e._config||{},t)}},maxMeasures:{},availableSpace:{},logicalSpace:{}},pg={distribution:[],classPrefix:"muze",isDistributionEqual:!0,unitMeasures:{height:100,width:100,border:1},isTransposed:!1,facet:"primary",extraCellLengths:[]},yg=function(){function defineProperties(e,t){for(var n=0;n1&&void 0!==arguments[1]?arguments[1]:{};!function visual_matrix_classCallCheck(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,VisualMatrix),this._lastLevelKey=0,this._primaryMatrix=e[0]||[],this._secondaryMatrix=e[1]||[],this._maxMeasures=[],this._availableSpace={},Ji(this,dg);var n=Object.assign({},this.constructor.defaultConfig());this.config(na(n,t)),this._breakPointer=this.config().isTransposed?e[0].length:e[0].length>0?e[0][0].length:0,this._layoutMatrix=lg([e[0]||[],e[1]||[]],this.config()),this._tree={key:this.config().isTransposed?Ky:Xy,values:this.createTree()},this._logicalSpace=this.setLogicalSpace()}return yg(VisualMatrix,[{key:"primaryMatrix",value:function primaryMatrix(){return arguments.length?this:this._primaryMatrix}},{key:"secondaryMatrix",value:function secondaryMatrix(){return arguments.length?this:this._secondaryMatrix}},{key:"tree",value:function tree(){return arguments.length?this:this._tree}},{key:"createTree",value:function createTree(){var e=function createTree(e){var t={},n=0,r="primary",i=cg(),a=[],o=e._layoutMatrix,u=e.primaryMatrix(),c=e.secondaryMatrix(),s=e.config(),l=s.isTransposed,f=s.breakPage;if(l){if(r=0===u.length?"primary":0===c.length?"secondary":u.length>=c.length?"primary":"secondary",u.length>0){for(var h=0;h0){for(var d=u.length,p=c.length-1;p>0;p--)a.push(p+d);a.push(d),"primary"===r&&(n=d)}var y;a.forEach(function(e){var t=-1;return i.key(function(n){return t++,n[e].valueOf()+"-"+sg(t,f)})}),y=o[0].map(function(e,t){return o.map(function(e){return e[t]})}),t=i.entries(y)}else{if(r=0===u.length?"primary":0===c.length?"secondary":u.length>=c.length?"primary":"secondary",u.length>0){for(var g=0;g0){for(var v=u.length>0?u[0].length:0,m=c[0].length-1;m>0;m--)a.push(m+v);a.push(v),"primary"===r&&(n=v)}else n=u.length>0?u[0].length-1:0;a.forEach(function(e){var t=-1;return i.key(function(n){return t++,n[e].valueOf()+"-"+sg(t,f)})}),t=i.entries(o)}return{tree:t,lastLevelKey:n}}(this),t=e.tree,n=e.lastLevelKey;return this._lastLevelKey=n,t}},{key:"setLogicalSpace",value:function setLogicalSpace(){var e=this.config().isTransposed,t=this.tree();return function createMatrixEachLevel(e,t){if(e.values[0].key){var n=[];return e.values.forEach(function(e){t?createMatrixEachLevel(e,t).forEach(function(e,t){var r;n[t]=n[t]||[],(r=n[t]).push.apply(r,utils_toConsumableArray(e))}):n.push.apply(n,utils_toConsumableArray(createMatrixEachLevel(e,t)))}),e.matrix=n,n}return e.matrix=t?e.values[0].map(function(t,n){return e.values.map(function(e){return e[n]})}):e.values,e.matrix}(t,e),fg(t,this.config(),this.maxMeasures())}},{key:"getLogicalSpace",value:function getLogicalSpace(){return this.logicalSpace()}},{key:"setAvailableSpace",value:function setAvailableSpace(e,t){this.availableSpace({width:e,height:t});var n=this.tree(),r=this.populateMaxMeasures(Dy,n),i=this.populateMaxMeasures(Iy,n),a=this.calculateDepth(i,r);return this.viewableMatrix=this.createViewPortMatrix(a),this.viewableMeasures=this.redistribute(this.viewableMatrix,e,t),this}},{key:"populateMaxMeasures",value:function populateMaxMeasures(e,t){var n=this,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:[];if(i[r]=Math.max(i[r]||0,t.space[e]),t.values){var a=r+1;t.values.forEach(function(t){t.space&&(i=n.populateMaxMeasures(e,t,a,i))})}return i}},{key:"calculateDepth",value:function calculateDepth(e,t){var n=void 0,r=void 0,i=this.availableSpace(),a=i.height,o=i.width;for(n=0;n0&&void 0!==arguments[0]?arguments[0]:[],t=arguments[1],n=arguments[2],r=arguments[3],i=r._breakPointer,a=r.config().isTransposed,o=n.tree,u=n.layoutMatrix;if(0===t){var c=function breakMatrix(e,t,n){var r=[],i=[];return t?e.forEach(function(e,t){t>=n?i.push(e):r.push(e)}):e.forEach(function(e,t){e.forEach(function(e,a){a>=n?(i[t]=i[t]||[],i[t].push(e)):(r[t]=r[t]||[],r[t].push(e))})}),[r,i]}(o.matrix,a,i);return e.push({matrix:o.matrix,primaryMatrix:c[0],secondaryMatrix:c[1],space:o.space}),e}var s=t-1;return o.values.forEach(function(t){createMatrixInstances(e,s,{tree:t,layoutMatrix:u},r)}),e}(t,e,this.removeExtraCells(),this),t}},{key:"redistributeRowWise",value:function redistributeRowWise(e){var t,n,r=[],i=this.maxMeasures(),a=this.config(),o=a.isDistributionEqual,u=a.distribution,c=a.isTransposed,s=a.gutter,l=e.matrix,f=e.width,h=e.height,d=e.maxHeights,p=e.maxWidths;n=function spaceTakenByColumn(e,t){var n=0,r=0;return e.forEach(function(e){var i=e[t].getLogicalSpace();r=Math.max(r,i.width),n+=i.height}),{width:r,height:n}}(l,this._lastLevelKey).height;var y=i.reduce(function(e,t){return e+=t});return r=y>0?i.map(function(e){return e+e/y*(f-y)}):i.map(function(){return 0}),t=function getDistributedHeight(e){var t,n=0,r=0,i=e.isTransposed,a=e.distribution,o=e.availableHeight,u=e.height,c=e.isDistributionEqual,s=e.gutter,l=e.matrix,f=e.cIdx;a&&void 0!==a[0]&&(n=a.reduce(function(e,t){return e+=t})),s&&void 0!==s[0]&&(r=s.reduce(function(e,t){return e+=t})),t=o-Math.floor(o*r);var h=l.length;return l.map(function(r,o){var s=r[f].getLogicalSpace().height,l=s+s/u*(t-u);return i||(a.length>0&&h===a.length?l=t*a[o]/n:(c||0===e.height)&&(l=t/h)),Math.floor(l)})}({matrix:l,cIdx:this._lastLevelKey,height:n,availableHeight:h,isDistributionEqual:o,distribution:u,isTransposed:c,gutter:s}),p.push(r),d.push(t),{maxWidths:p,maxHeights:d}}},{key:"redistributeColumnWise",value:function redistributeColumnWise(e){var t=[],n=e.matrix,r=e.width,i=e.maxHeights,a=e.maxWidths,o=this.config().unitMeasures.border,u=function spaceTakenByRow(e){var t=0,n=0;return e.forEach(function(e){var r=e.getLogicalSpace();t=Math.max(t,r.height),n+=r.width}),{width:n,height:t}}(n[this._lastLevelKey]).width,c=function getDistributedWidth(e,t){var n=e.availableWidth,r=e.width,i=e.row,a=t.isDistributionEqual,o=t.isTransposed,u=t.distribution,c=0;return u&&u[0]&&(c=u.reduce(function(e,t){return e+=t})),i.map(function(e,t){var s=e.getLogicalSpace().width,l=s+s/r*(n-r);if(o)if(u.length>0)l=n*u[t]/c;else if(a||0===r){var f=i.length;l=n/f}return Math.floor(l)})}({row:n[this._lastLevelKey],width:u,availableWidth:r},this.config());n.forEach(function(e,n){return e.forEach(function(e,r){var i=e.getLogicalSpace().height;e.setAvailableSpace(c[r]-o,i),t[n]=Math.max(t[n]||0,e.getLogicalSpace().height)})}),i.length>0&&(t=t.map(function(e,t){return Math.max(e,i[0][t])})),i.push(t);for(var s=0;s=m&&(r[0][1][n[1]-m]=a[0],i[0][1]=(i[0][1]||0)+a[0]),n[1]===t._lastLevelKey&&(r[1][0][n[0]]=a[1],r[1][1][n[0]]=a[1])})}),{heights:g,widths:v,rowHeights:p,columnWidths:y}}}],[{key:"defaultConfig",value:function defaultConfig(){return pg}}]),VisualMatrix}(),vg=function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function sliceIterator(e,t){var n=[],r=!0,i=!1,a=void 0;try{for(var o,u=e[Symbol.iterator]();!(r=(o=u.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){i=!0,a=e}finally{try{!r&&u.return&&u.return()}finally{if(i)throw a}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}();function layout_helper_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t0&&(n=[].concat(layout_helper_toConsumableArray(w),layout_helper_toConsumableArray(P),layout_helper_toConsumableArray(O))),E.length>0&&(r=[].concat(layout_helper_toConsumableArray(C),layout_helper_toConsumableArray(E),layout_helper_toConsumableArray(F))),k.length>0&&k[0].length>0&&(i=k.map(function(e,t){return[].concat(layout_helper_toConsumableArray(w[t]),layout_helper_toConsumableArray(e),layout_helper_toConsumableArray(C[t]))})),T.length>0&&T[0].length>0&&(a=T.map(function(e,t){return[].concat(layout_helper_toConsumableArray(O[t]),layout_helper_toConsumableArray(e),layout_helper_toConsumableArray(F[t]))})),e.rowMatrix(new gg([n,r],{isDistributionEqual:s,distribution:h.rows,gutter:f.rows,unitMeasures:{width:v,height:g,border:d.width},breakPage:p.rows.map(function(e){return e+Math.max(w.length,C.length)}),extraCellLengths:[w.length,O.length]})),o=w.length>0?w[0].length:O.length>0?O[0].length:0,u=C.length>0?C[0].length:F.length>0?F[0].length:0,e.columnMatrix(new gg([i,a],{isDistributionEqual:l,distribution:h.columns,gutter:f.columns,isTransposed:!0,unitMeasures:{width:v,height:g,border:d.width},breakPage:p.columns,extraCellLengths:[o,u]})),e.centerMatrix(A),t}(this,e),this):function get(e,t,n){null===e&&(e=Function.prototype);var r=Object.getOwnPropertyDescriptor(e,t);if(void 0===r){var i=Object.getPrototypeOf(e);return null===i?void 0:get(i,t,n)}if("value"in r)return r.value;var a=r.get;return void 0!==a?a.call(n):void 0}(GridLayout.prototype.__proto__||Object.getPrototypeOf(GridLayout.prototype),"matrices",this).call(this,e)}},{key:"triggerReflow",value:function triggerReflow(){return function computeLayoutMeasurements(e){var t,n,r,i,a,o=e.rowMatrix(),u=e.columnMatrix(),c=e.centerMatrix(),s=e.measurement(),l=s.width,f=s.height,h=e.config().border,d=e.matrices(),p=d.top,y=d.bottom,g=function getMatrixMeasurement(e,t){return e?e.getLogicalSpace()[t]:0}(o,Iy),v=h.width,m=l-g-v;setMatrixMeasurement(u,Iy,m);var b=u.getViewableSpaces();bg(e,"column",b);var _=b[e.config().columnPointer],x=_.height.primary+_.height.secondary,w=f-x;setMatrixMeasurement(o,Dy,w);var k=o.getViewableSpaces();bg(e,"row",k);var C=(t=[]).concat.apply(t,computations_toConsumableArray(k.map(function(e){return e.rowHeights.primary}))),S=(n=[]).concat.apply(n,computations_toConsumableArray(k.map(function(e){return e.columnWidths.primary}))),P=(r=[]).concat.apply(r,computations_toConsumableArray(k.map(function(e){return e.columnWidths.secondary}))),A=u.getViewableSpaces(),E=(i=[]).concat.apply(i,computations_toConsumableArray(A.map(function(e){return e.columnWidths.primary}))),M=A[0].rowHeights.primary,O=(a=[]).concat.apply(a,computations_toConsumableArray(A.map(function(e){return e.rowHeights.secondary})));c.forEach(function(e,t){e.forEach(function(e,n){e.setAvailableSpace(E[n]-v,C[t]-v)})}),mg(p[0],S,M),mg(p[2],P,M),mg(y[0],S,O),mg(y[2],P,O)}(this),this.setViewInformation(),this}},{key:"gotoPage",value:function gotoPage(e,t){var n=e.toLowerCase(),r=this.getViewInformation().viewMatricesInfo[n+"Pages"],i=Math.min(Math.max(1,t),r);return this.config(function layout_defineProperty(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}({},n+"Pointer",i-1)),this.setViewInformation(),this.renderGrid(),this}},{key:"pages",value:function pages(e){var t=this.getViewInformation().viewMatricesInfo,n=e.toLowerCase();return{totalPages:t[n+"Pages"],currentPage:this.config()[n+"Pointer"]+1}}},{key:"setViewInformation",value:function setViewInformation(){var e=this.config(),t=e.rowPointer,n=e.columnPointer,r=e.border,i=function getViewMatrices(e,t,n){for(var r=e.rowMatrix(),i=e.columnMatrix(),a=e.centerMatrix(),o=e.matrices(),u=r.getViewableData(),c=i.getViewableData(),s={row:0,column:0},l=t-1;l>=0;l--){var f=Math.max(u[l].primaryMatrix.length,u[l].secondaryMatrix.length);s.row+=f}for(var h=n-1;h>=0;h--){var d=c[h],p=d.primaryMatrix,y=d.secondaryMatrix,g=Math.max(p[0]?p[0].length:0,y[0]?y[0].length:0);s.column+=g}o.top[1]=c[n].primaryMatrix,o.bottom[1]=c[n].secondaryMatrix,o.center[0]=u[t].primaryMatrix,o.center[2]=u[t].secondaryMatrix;var v=Math.max(o.center[0].length,o.center[2].length),m=Math.max(o.top[1][0]?o.top[1][0].length:0,o.bottom[1][0]?o.bottom[1][0].length:0);return o.center[1]=a.slice(s.row,s.row+v).map(function(e){return e.slice(s.column,s.column+m)}),{matrices:o,rowPages:u.length,columnPages:c.length}}(this,t,n),a=function getViewMeasurements(e){var t=e.rowMatrix(),n=e.columnMatrix(),r=e.measurement(),i=r.width,a=r.height,o=e.config(),u=o.columnPointer,c=o.rowPointer,s=t.getViewableSpaces()[c].width,l=s.primary,f=s.secondary,h=n.getViewableSpaces()[u].height,d=h.primary,p=h.secondary;return{viewWidth:[l,i-(l+f),f],viewHeight:[d,a-(d+p),p]}}(this);return a.border=r,this.viewInfo={viewMatricesInfo:i,layoutDimensions:a},this}},{key:"getViewInformation",value:function getViewInformation(){return this.viewInfo}},{key:"renderGrid",value:function renderGrid(e){if(this.mountPoint(e),!this.mountPoint())return this;var t=this.getViewInformation(),n=t.viewMatricesInfo,r=t.layoutDimensions;return function renderMatrices(e,t,n){var r=t.top,i=t.center,a=t.bottom,o=e.config().classPrefix,u=e.measurement().width,c=e.mountPoint();Eo(c,"div",[{type:Ly,matrix:r},{type:Hy,matrix:i},{type:zy,matrix:a}],o+"-grid-layout-row").each(function(e,t){var r=Ao(this);r.classed(o+"-grid-layout-row-"+t,!0),renderMatrix(e.matrix,r,e.type,n,o)}).style(Iy,Math.ceil(u)+"px")}(this,n.matrices,r),this}}],[{key:"defaultMeasurement",value:function defaultMeasurement(){return ng}},{key:"defaultConfig",value:function defaultConfig(){return tg}},{key:"create",value:function create(){return new GridLayout(null,null,this.defaultMeasurement(),this.defaultConfig())}}]),GridLayout}(),wg=function(){function defineProperties(e,t){for(var n=0;n0){var i=Math.max(e[0].length,e[1].length);return gv(i,t[r],pv)}return n.length>0?n[0]&&n[0].length<=t[r]?n.map(function(e){var i=new Array(t[r]-n[0].length).fill(1);return i=yv(i,pv),[].concat(layout_maker_toConsumableArray(i),layout_maker_toConsumableArray(e))}):gv(n.length,t[r],pv):n})},mv=function prepareLayout(e,t,n,r){var i=void 0,a=void 0,o=void 0,u=void 0,c=t.rows,s=t.columns,l=t.values,f=t.cornerMatrices,h=n.showHeaders,d=function getMaxRows(e){var t=[0,0];return t[0]=Math.max(t[0],e[0].length?e[0][0].length:0),t[1]=Math.max(t[1],e[1].length?e[1][0].length:0),t}(c),p=f.topLeft,y=f.topRight,g=f.bottomLeft,v=f.bottomRight;if(h)i=p,a=y,o=g,u=v;else{var m=[s[0].length,s[1].length],b=vv([new Array(m[0]),new Array(m[0])],d),_=lv(b,2);i=_[0],a=_[1];var x=vv([new Array(m[1]),new Array(m[1])],d),w=lv(x,2);o=w[0],u=w[1]}e.measurement(r).config(n).matrices({top:[i,s[0],a],center:[c[0],l,c[1]],bottom:[o,s[1],u]}).triggerReflow()},bv=function getRenderDetails(e,t){var n=na({},e.config()),r=t.getBoundingClientRect(),i=r.height,a=r.width,o=e.height(),u=e.width(),c=e.composition().visualGroup,s=c.placeholderInfo(),l=s.isColumnSizeEqual,f=s.isRowSizeEqual,h=s.rows,d=s.columns,p=s.values,y=e.config(),g=y.minWidth,v=y.minHeight,m=y.classPrefix,b=y.showHeaders,_=y.legend,x=e.title()[1],w=e.subtitle()[1],k=_.position,C=function arrangeComponents(e){var t,n=e.config().legend,r=e.title()[1],i=e.subtitle()[1],a=[["legend","layout"],["layout","legend"]];return{headers:(component_resolver_defineProperty(t={},"top-top",["title","subtitle","group"]),component_resolver_defineProperty(t,"bottom-bottom",["group","subtitle","title"]),component_resolver_defineProperty(t,"top-bottom",["title","group","subtitle"]),component_resolver_defineProperty(t,"bottom-top",["subtitle","group","title"]),t)[(r.position||"top")+"-"+(i.position||"top")],legends:"left"===n.position||"top"===n.position?a[0]:a[1]}}(e);i=Math.floor(i),a=Math.floor(a);var S=Math.max(o>0?o:i,v),P=Math.max(u>0?u:a,g),A=function createHeaders(e,t,n){var r=0,i={};return t>=200&&n>=200&&["title","subtitle"].forEach(function(t){var n=e[t](),a=function resolveTitleSubTitleContent(e){return"function"!=typeof e||e._sanitize?function escapeHTML(e){var t={"&":"&","<":"<",">":">",'"':""","'":"'","/":"/"};return(""+e).replace(/[&<>"'/]/g,function(e){return t[e]})}(e()):e()}(n[0]);if(a.length){var o=n[1];o.width=e.width(),o.content=a;var u=cv(o,t,e.dependencies().smartlabel,e[t+"Cell"]),c=u.height,s=u.cell;i[t+"Cell"]=s,e._composition[t]=s,r+=c+o.padding}}),{headerHeight:r,headers:i}}(e,S,P),E=A.headers,M=A.headerHeight,O=function createLegend(e,t,n,r){var i={height:n,width:r,headerHeight:t},a=e.config().legend,o=a.show,u=a.position;a.classPrefix=e.config().classPrefix;var c="left"===u||"right"===u?"vertical":"horizontal";return a.show=o?"vertical"===c&&r>200||"horizontal"===c&&n>200:o,a.align=c,sv(a,e,i,e.legends||[])}(e,M,S,P);e._composition.legend={},O.forEach(function(t){e._composition.legend[t.scaleType]=t.legend});var T=function getLegendSpace(e,t,n,r){var i={width:0,height:0};return e.map(function(e){return e.legend.measurement()}).forEach(function(e){var a,o;o=Math.min(e.width,e.maxWidth),a=Math.min(e.height,e.maxHeight),"horizontal"===t.align?i.width+o>r?(i.width=r,i.height+=a):(i.width+=o,i.height=Math.max(i.height,a)):i.height+a>n?(i.height=a,i.width+=o):(i.height+=a,i.width=Math.max(i.width,o))}),"horizontal"===t.align&&(i.width=r),i}(O,_,S,P),F="left"===k||"right"===k?T.width:0,N="top"===k||"bottom"===k?T.height:0,j={headers:E,legends:O,canvases:[e],rows:h,columns:d,values:p,cornerMatrices:c.cornerMatrices()},I={mountSpace:{height:i,width:a},headerHeight:M,legendSpace:T,canvasWidth:P,canvasHeight:S,width:P-F,height:S-M-N,minUnitHeight:e.minUnitHeight(),minUnitWidth:e.minUnitWidth()};return{layoutConfig:n=na(n,{classPrefix:m,showHeaders:b,border:na(c.metaData().border,e.config().border),layoutArrangement:C,legend:_,title:x,subtitle:w,isColumnSizeEqual:l,isRowSizeEqual:f}),components:j,measurement:I}},_v={position:"top",align:"left",padding:8},xv={position:"top",align:"left",padding:16};function canvas_local_options_defineProperty(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var wv=(canvas_local_options_defineProperty(fv={},"rows",{value:null,meta:{typeCheck:"constructor",typeExpected:"Array"}}),canvas_local_options_defineProperty(fv,"columns",{value:null,meta:{typeCheck:"constructor",typeExpected:"Array"}}),canvas_local_options_defineProperty(fv,"color",{value:null,meta:{typeCheck:"constructor",typeExpected:"Object",sanitization:function sanitization(e){return"string"==typeof e?{field:e}:e}}}),canvas_local_options_defineProperty(fv,"shape",{value:null,meta:{typeCheck:"constructor",typeExpected:"Object",sanitization:function sanitization(e){return"string"==typeof e?{field:e}:e}}}),canvas_local_options_defineProperty(fv,"size",{value:null,meta:{typeCheck:"constructor",typeExpected:"Object",sanitization:function sanitization(e){return"string"==typeof e?{field:e}:e}}}),canvas_local_options_defineProperty(fv,"detail",{value:[],meta:{typeCheck:"constructor",typeExpected:"Array"}}),canvas_local_options_defineProperty(fv,"layers",{value:null,meta:{typeCheck:"constructor",typeExpected:"Array"}}),canvas_local_options_defineProperty(fv,"transform",{value:null,meta:{typeCheck:"constructor",typeExpected:"Object"}}),canvas_local_options_defineProperty(fv,"mount",{value:null,meta:{sanitization:function sanitization(e){return"string"==typeof e?Ao(e).node():e}}}),fv),kv=(canvas_local_options_defineProperty(hv={},"title",{value:[null,null],meta:{typeCheck:["constructor","constructor"],typeExpected:["Function","Object"],spreadParams:!0,sanitization:[function(e){if("string"==typeof e){var n=function t(){return e};return n._sanitized=!0,n}return e},function(e){var t=na({},_v);return na(t,e)}]}}),canvas_local_options_defineProperty(hv,"subtitle",{value:[null,null],meta:{typeCheck:["constructor","constructor"],typeExpected:["Function","Object"],spreadParams:!0,sanitization:[function(e){if("string"==typeof e){var t=function sub(){return e};return t._sanitized=!0,t}return e},function(e){var t=na({},xv);return na(t,e)}]}}),hv),Cv=function renderHeader(e,t,n,r){var i=r[n+"Cell"],a=e[""+n],o=a.position,u=a.align,c=a.padding,s=t.selectAll("."+e.classPrefix+"-inner-container").data([n]);s.exit().remove();var l=s.enter().append("div").merge(s);l.classed(e.classPrefix+"-inner-container",!0),i&&i.render(l.node()),l.selectAll("div").classed(e.classPrefix+"-inner-content",!0),l.style("width","100%"),a&&i&&l.style("float","left").style("text-align",u).style("padding-"+("top"===o?"bottom":"top"),c+"px")},Sv=function renderComponents(e,t,n,r){var i=e.mount(),a=t.headers,o=t.legends,u=n.classPrefix,c=function getSkeletons(e,t,n){var r=t.layoutArrangement,i=t.classPrefix,a=r.headers,o=r.legends,u=n.canvasWidth,c=n.canvasHeight,s=Ao(e),l={},f=Eo(s,"div",[1],i+"-viz").style("width",u+"px").style("height",c+"px").selectAll("."+i+"-container").data(a);f.exit().remove();var h=f.enter().append("div").merge(f).attr("class",i+"-container").style("width",u+"px").style("padding","nullpx").style("margin",null).each(function(e){l[e]=Ao(this).classed(i+"-"+e+"-container",!0)}).selectAll("."+i+"-inner-container").data(function(e){return"group"===e?o:[]});return h.exit().remove(),h.enter().append("div").merge(h).attr("class",i+"-inner-container").style("width","auto").style("height","auto").each(function(e){l[e]=Ao(this).classed(i+"-"+e+"-container",!0)}),l}(i,n,r),s=c.title,l=c.legend,f=c.subtitle,h=c.layout,d=function prepareGridContainer(e,t,n,r){if(e){var i=t.height,a=t.width,o=Ao(e).selectAll("."+n+"-inner-content").data(["layout"],function(e){return e});o.exit().remove();var u=o.enter().append("div").merge(o).attr("class",n+"-inner-content").classed(n+"-grid-layout",!0).attr("id",n+"-grid-layout-"+r).style("height",i+"px").style("padding",null).style("width",Math.ceil(a)+"px"),c=u.selectAll("."+n+"-layout-grid-container").data(["layout2"]);c.exit().remove();var s=c.enter().append("div").merge(c);return s.classed(n+"-layout-grid-container",!0).attr("id",n+"-layout-grid-container-"+r).style("height",i+"px").style("width",Math.ceil(a)+"px"),{mount:s,container:u}}}(h.node(),r,u,e.alias()).mount,p=e.layout().getViewInformation().layoutDimensions.viewWidth[0];r.padding=p,function setLabelRotationForAxes(e){var t=0,n=e.xAxes()||[];!function(){for(var e=0;ev?(g++,m=0,v=y):g<0&&g++,i[g]=i[g]||[],v-=Math.min(t.measurement().height,v),m=Math.max(Math.min(t.measurement().width,t.measurement().maxWidth),m),i[g].push({legend:t,legendHeight:y,legendWidth:m})});var b=Eo(h,["div"],i,l+"-legend-section").each(function(e,t){return Ao(void 0).classed(l+"-legend-section-"+t,!0)}).classed(l+"-legend-vertical-section",!0).style("width",function(e){return e[0].legendWidth+"px"});Eo(b,["div"],function(e){return e},l+"-legend-components",{},function(e){return e.legend.id()}).each(function(e){e.legend.mount(this)}).style("width",function(e){return e.legendWidth+"px"})}else{var _=Eo(h,"div",[1],l+"-legend-section").classed(l+"-legend-horizontal-section",!0).classed(l+"-legend-section-0",!0).style("width",p+"px");Eo(_,"div",n,l+"-legend-components",{},function(e){return e.legend.id()}).each(function(e){e.legend.mount(this)}).style("width",function(e){return e.legend.measurement().width+"px"})}}(n,l,o,r),function shiftHeaders(e,t,n,r){var i=e.classPrefix,a=e.title,o=e.subtitle,u=e.legend,c=n.legendSpace;t+="left"===u.position?c.width:0,a&&Ao(r).select("."+i+"-title-container").style("width","left"===a.align?"calc(100% - "+t+"px":"100%").style("margin-left","left"===a.align?t+"px":0),o&&Ao(r).select("."+i+"-subtitle-container").style("width","left"===o.align?"calc(100% - "+t+"px":"100%").style("margin-left","left"===o.align?t+"px":0),Ao(r).select("."+i+"-legend-horizontal-section").style("margin-left",t+"px").style("width",c.width-t+"px").selectAll("."+i+"-legend-body, ."+i+"-legend-title").style("max-width",c.width-t+"px"),Ao(r).select("."+i+"-legend-vertical-section").style("margin-left",null).selectAll("."+i+"-legend-body, ."+i+"-legend-title").style("max-width",null)}(n,p,r,i)}),e.composition().visualGroup.matrixInstance().value.each(function(e){e.valueOf().parentContainer(h.node())})};function canvas_helper_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t",keywords:["datamodel","data","relational","algebra","model","muze","fusioncharts","table","tabular","operation"],repository:{type:"git",url:"https://github.com/chartshq/datamodel.git"},contributors:[{name:"Akash Goswami",email:"akash@charts.com"},{name:"Subhash Haldar",email:"subhash@charts.com"},{name:"Rousan Ali",email:"rousan@charts.com",url:"https://rousan.io"},{name:"Ujjal Kumar Dutta",email:"ujjal@charts.com"}],dependencies:{"d3-dsv":"^1.0.8"},devDependencies:{"babel-cli":"6.26.0","babel-core":"^6.26.3","babel-eslint":"6.1.2","babel-loader":"^7.1.4","babel-plugin-transform-runtime":"^6.23.0","babel-preset-env":"^1.7.0","babel-preset-es2015":"^6.24.1","babel-preset-flow":"^6.23.0",chai:"3.5.0","cross-env":"^5.0.5",eslint:"3.19.0","eslint-config-airbnb":"15.1.0","eslint-plugin-import":"2.7.0","eslint-plugin-jsx-a11y":"5.1.1","eslint-plugin-react":"7.3.0","istanbul-instrumenter-loader":"^3.0.0",jsdoc:"3.5.5",json2yaml:"^1.1.0",karma:"1.7.1","karma-chai":"0.1.0","karma-chrome-launcher":"2.1.1","karma-coverage-istanbul-reporter":"^1.3.0","karma-mocha":"1.3.0","karma-spec-reporter":"0.0.31","karma-webpack":"2.0.3",marked:"^0.5.0",mocha:"3.4.2","mocha-webpack":"0.7.0","transform-runtime":"0.0.0",webpack:"^4.12.0","webpack-cli":"^3.0.7","webpack-dev-server":"^3.1.4"},scripts:{test:"npm run lint && npm run ut",ut:"karma start karma.conf.js",utd:"karma start --single-run false --browsers Chrome karma.conf.js ",build:"webpack --mode production","build:dev":"webpack --mode development",start:"webpack-dev-server --config webpack.config.dev.js --mode development --open",lint:"eslint ./src","lint-errors":"eslint --quiet ./src",docs:"rm -rf yaml && mkdir yaml && jsdoc -c jsdoc.conf.json"}}},function(e,t,n){var r=n(2);e.exports=r.default?r.default:r},function(n,c,f){"use strict";f.r(c);var p={};f.r(p),f.d(p,"DataFormat",function(){return b}),f.d(p,"DimensionSubtype",function(){return _}),f.d(p,"MeasureSubtype",function(){return C}),f.d(p,"FieldType",function(){return P}),f.d(p,"FilteringMode",function(){return A});var y={};f.r(y),f.d(y,"DSVArr",function(){return Je}),f.d(y,"DSVStr",function(){return lt}),f.d(y,"FlatJSON",function(){return ft}),f.d(y,"Auto",function(){return ht});var g={};f.r(g),f.d(g,"sum",function(){return Et}),f.d(g,"avg",function(){return Mt}),f.d(g,"min",function(){return Ot}),f.d(g,"max",function(){return Tt}),f.d(g,"first",function(){return Ft}),f.d(g,"last",function(){return Nt}),f.d(g,"count",function(){return jt}),f.d(g,"sd",function(){return It});var b={FLAT_JSON:"FlatJSON",DSV_STR:"DSVStr",DSV_ARR:"DSVArr",AUTO:"Auto"},_={CATEGORICAL:"categorical",TEMPORAL:"temporal",GEO:"geo"},C={DISCRETE:"discrete"},P={MEASURE:"measure",DIMENSION:"dimension"},A={NORMAL:"normal",INVERSE:"inverse",ALL:"all"};function l(e,t){e.length>0&&e.split(",").forEach(function(e){var n=e.split("-"),r=+n[0],i=+(n[1]||n[0]);if(i>=r)for(var a=r;a<=i;a+=1)t(a)})}var O=function(){function e(e,t){for(var n=0;n=0;)o=e[a+1],-1!==r.indexOf(o)&&i.push({index:a,token:o});return i},m.formatAs=function(e,t){var n,r=h(e),i=m.findTokens(t),a=m.getTokenDefinitions(),o=String(t),u=m.TOKEN_PREFIX,c=void 0,s=void 0,l=void 0;for(l=0,n=i.length;l=0;h--)(s=a[h].index)+1!==f.length-1?(void 0===u&&(u=f.length),l=f.substring(s+2,u),f=f.substring(0,s+2)+RegExp.escape(l)+f.substring(u,f.length),u=s):u=s;for(h=0;h1){r=Math.abs(n[1]-n[0]);for(var i=2,a=n.length;i3&&void 0!==arguments[3]&&arguments[3],i=arguments.length>4&&void 0!==arguments[4]?arguments[4]:ye.CROSS,a=[],o=[],u=n||K,c=e.getFieldspace(),s=t.getFieldspace(),f=c.name,h=s.name,d=c.name+"."+s.name,p=L(c,s);if(f===h)throw new Error("DataModels must have different alias names");return c.fields.forEach(function(e){var t=E({},e.schema);-1===p.indexOf(t.name)||r||(t.name=c.name+"."+t.name),a.push(t)}),s.fields.forEach(function(e){var t=E({},e.schema);-1!==p.indexOf(t.name)?r||(t.name=s.name+"."+t.name,a.push(t)):a.push(t)}),l(e._rowDiffset,function(e){var n=!1,d=void 0;l(t._rowDiffset,function(t){var l=[],y={};y[f]={},y[h]={},c.fields.forEach(function(t){l.push(t.data[e]),y[f][t.name]=t.data[e]}),s.fields.forEach(function(e){-1!==p.indexOf(e.schema.name)&&r||l.push(e.data[t]),y[h][e.name]=e.data[t]});var g=Ke(y[f]),v=Ke(y[h]);if(u(g,v)){var m={};l.forEach(function(e,t){m[a[t].name]=e}),n&&ye.CROSS!==i?o[d]=m:(o.push(m),n=!0,d=e)}else if((i===ye.LEFTOUTER||i===ye.RIGHTOUTER)&&!n){var b={},_=c.fields.length-1;l.forEach(function(e,t){b[a[t].name]=t<=_?e:null}),n=!0,d=e,o.push(b)}})}),new At(o,a,{name:d})}function z(e,t){var n=""+e,r=""+t;return nr?1:0}function X(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:z;return e.length>1&&function e(t,n,r,i){if(r===n)return t;var a=n+Math.floor((r-n)/2);return e(t,n,a,i),e(t,a+1,r,i),function(e,t,n,r,i){for(var a=e,o=[],u=t;u<=r;u+=1)o[u]=a[u];for(var c=t,s=n+1,l=t;l<=r;l+=1)c>n?(a[l]=o[s],s+=1):s>r?(a[l]=o[c],c+=1):i(o[c],o[s])<=0?(a[l]=o[c],c+=1):(a[l]=o[s],s+=1)}(t,n,a,r,i),t}(e,0,e.length-1,t),e}function Q(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);to?"desc"===t?-1:1:0}}return i}function Z(e,t){var n=new Map,r=[];return e.forEach(function(e){var i=e[t];n.has(i)?r[n.get(i)][1].push(e):(r.push([i,[e]]),n.set(i,r.length-1))}),r}function ee(e,t,n){var r={label:e[0]};return t.reduce(function(t,r,i){return t[r]=e[1].map(function(e){return e[n[i].index]}),t},r),r}function ne(e,t){var n={},r=[],i=[],a=[],o=e.getFieldspace(),u=t.getFieldspace(),c=o.fieldsObj(),s=u.fieldsObj(),f=o.name+" union "+u.name;if(!M(e._colIdentifier.split(",").sort(),t._colIdentifier.split(",").sort()))return null;function d(e,t,r){l(e._rowDiffset,function(e){var o={},u="";i.forEach(function(n){var r=t[n].data[e];u+="-"+r,o[n]=r}),n[u]||(r&&a.push(o),n[u]=!0)})}return e._colIdentifier.split(",").forEach(function(e){var t=c[e];r.push(E({},t.schema)),i.push(t.schema.name)}),d(t,s,!1),d(e,c,!0),new At(a,r,{name:f})}function re(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);tn&&(n=e)}),[t,n]}(this.data)}},{key:"parse",value:function value(e){return e=parseFloat(e,10),Number.isNaN(e)?null:e}},{key:"unit",value:function value(){return this.fieldUnit}},{key:"scale",value:function value(){return this.fieldScale}},{key:"numberFormat",value:function value(){var e=this.fieldNumberformat;return function(t){return e(t)}}},{key:"defAggFn",value:function value(){return this.fieldDefAggFn}}]),t}(),Ee=function(){function e(e,t){for(var n=0;n=a?c=!0:(r=e.charCodeAt(o++))===at?l=!0:r===ot&&(l=!0,e.charCodeAt(o)===at&&++o),e.slice(i+1,t-1).replace(/""/g,'"')}for(;o2&&void 0!==arguments[2]?arguments[2]:{},i=arguments[3],a=void 0;t!==fe?(a={op:t,meta:r,criteria:i},e._derivation.push(a)):(a=[].concat(Ge(i)),e._derivation.length=0,(n=e._derivation).push.apply(n,Ge(a)))},yt=function ze(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=n.operation||"and",i=n.filterByMeasure||!1,a=[];a=t.length?t.map(function(e){return function(e){var t=e.getData(),n=t.schema,r=e.getFieldsConfig(),a=e.getFieldspace().fieldsObj(),o=t.data,u=Object.values(r).reduce(function(e,t){return e[t.def.name]=a[t.def.name].domain(),e},{});return function(e){return!!o.length&&o.some(function(t){return n.every(function(n){if(!(n.name in e))return!0;var a=e[n.name].valueOf();if(i&&n.type===P.MEASURE)return a>=u[n.name][0]&&a<=u[n.name][1];if(n.type!==P.DIMENSION)return!0;var o=r[n.name].index;return t[o]===e[n.name].valueOf()})})}}(e)}):[function(){return!1}];return"and"===r?e.clone(!1,!1).select(function(e){return a.every(function(t){return t(e)})},{saveChild:!1,mode:A.ALL}):e.clone(!1,!1).select(function(e){return a.some(function(t){return t(e)})},{mode:A.ALL,saveChild:!1})},gt=function Xe(e,t,n,r){var i=e.clone(r.saveChild),a=function(e,t,n,r){var i=[],a=-1,o=void 0,c=function u(e){return n(qe(t,e),e)};return r.mode===A.INVERSE&&(c=function u(e){return!n(qe(t,e))}),l(e,function(e){c(e)&&(-1!==a&&e===a+1?(o=i.length-1,i[o]=i[o].split("-")[0]+"-"+e):i.push(""+e),a=e)}),i.join(",")}(i._rowDiffset,i.getPartialFieldspace().fields,t,n);return i._rowDiffset=a,i.__calculateFieldspace().calculateFieldsConfig(),r.saveChild&&pt(i,ce,{config:n},t),i},vt=function Qe(e,t,n,r){var i=e.clone(n.saveChild),a=t;return n.mode===A.INVERSE&&(a=r.filter(function(e){return-1===t.indexOf(e)})),i._colIdentifier=a.join(","),i.__calculateFieldspace().calculateFieldsConfig(),n.saveChild&&pt(i,se,{projField:t,config:n,actualProjField:a},null),i},mt=function $e(e,t,n,r){r=Object.assign(Object.assign({},Ze),r);var i=y[r.dataFormat];if(!i||"function"!=typeof i)throw new Error("No converter function found for "+r.dataFormat+" format");var a=i(t,r),o=dt(a,2),u=o[0],c=o[1],s=Ue(c,n,u),l=Y.createNamespace(s,r.name);return e._partialFieldspace=l,e._rowDiffset=c.length&&c[0].length?"0-"+(c[0].length-1):"",e._colIdentifier=n.map(function(e){return e.name}).join(),e},bt=function Ze(e,t){for(var n=0;n2&&void 0!==arguments[2]?arguments[2]:{},i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},a=i.nonTraversingModel,o=i.excludeModels||[];t!==a&&((!o.length||-1===o.indexOf(t))&&t.handlePropagation(n,r),t._children.forEach(function(t){var a=_t(n,t),o=dt(a,2),u=o[0],c=o[1];e(t,[u,c],r,i)}))},wt=function nt(e,t,n,r){var i=void 0,a=void 0,o=n.propagationNameSpace,u=n.propagateToSource,c=n.sourceId,s=r.propagateInterpolatedValues,l=[];if(null===e&&!0!==r.persistent)l=[{criteria:[]}];else{var f,h=Object.values(o.mutableActions);!1!==u&&(h=h.filter(function(e){return e.config.sourceId!==c}));var d=h.filter(function(e){return(r.filterFn||function(){return!0})(e,r)}).map(function(e){return e.config.criteria}),p=[];if(!1!==u){var y=Object.values(o.mutableActions);y.forEach(function(e){var t=e.config;!1===t.applyOnSource&&t.action===r.action&&t.sourceId!==c&&(p.push(e.model),(i=y.filter(function(t){return t!==e}).map(function(e){return e.config.criteria})).length&&l.push({criteria:i,models:e.model,path:function e(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];return null!==t._parent&&(n.push(t),e(t._parent,n)),n}(e.model)}))})}i=(f=[]).concat.apply(f,[].concat(Ge(d),[e])).filter(function(e){return null!==e}),l.push({criteria:i,excludeModels:[].concat(p,Ge(r.excludeModels||[]))})}var g=t.model,v=Object.assign({sourceIdentifiers:e,propagationSourceId:c},r),m=t.groupByModel;s&&m&&(a=yt(m,i,{filterByMeasure:s}),xt(m,a,v)),l.forEach(function(e){var t=yt(g,e.criteria),n=e.path;if(n){var r=function(e,t){for(var n=0,r=t.length;n0&&void 0!==arguments[0])||arguments[0],t=void 0;if(!1===(!(arguments.length>1&&void 0!==arguments[1])||arguments[1])){var n=this.getData({getAllFields:!0}),r=n.data,i=n.schema,a=r.map(function(e){var t={};return i.forEach(function(n,r){t[n.name]=e[r]}),t});t=new this.constructor(a,i)}else t=new this.constructor(this);return e&&this._children.push(t),t}},{key:"project",value:function value(e,t){var n={mode:A.NORMAL,saveChild:!0};t=Object.assign({},n,t);var r=this.getFieldsConfig(),i=Object.keys(r),a=t.mode,o=e.reduce(function(e,t){return"RegExp"===t.constructor.name?e.push.apply(e,function(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t1&&void 0!==arguments[1]?arguments[1]:[];pt(this,fe,null,t),this._parent=e,e._children.push(this)}}]),e}(),St=function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function(e,t){var n=[],r=!0,i=!1,a=void 0;try{for(var o,u=e[Symbol.iterator]();!(r=(o=u.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){i=!0,a=e}finally{try{!r&&u.return&&u.return()}finally{if(i)throw a}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")},Pt=function(){function e(e,t){for(var n=0;n0,c=[];if(n.split(",").forEach(function(t){for(var n=0;n=0;u--)i=t[u][0],a=t[u][1],(o=bt(r,i))&&(S(a)?X(n,function(e,t){return a(e[o.index],t[o.index])}):j(a)?function(){var e=Z(n,o.index),t=a[a.length-1],i=a.slice(0,a.length-1),u=i.map(function(e){return bt(r,e)});e.forEach(function(e){e.push(ee(e,i,u))}),X(e,function(e,n){var r=e[2],i=n[2];return t(r,i)}),n.length=0,e.forEach(function(e){n.push.apply(n,Q(e[1]))})}():(a="desc"===String(a).toLowerCase()?"desc":"asc",X(n,$(o.type,a,o.index))));e.uids=[],n.forEach(function(t){e.uids.push(t.pop())})}(a,r),i.columnWise){var s=Array.apply(void 0,Q(Array(a.schema.length))).map(function(){return[]});a.data.forEach(function(e){e.forEach(function(e,t){s[t].push(e)})}),a.data=s}return a}.call(this,this.getPartialFieldspace().fields,this._rowDiffset,e.getAllFields?t.map(function(e){return e.name}).join():this._colIdentifier,e.sort,{columnWise:"column"===e.order,addUid:!!e.withUid});if(!e.formatter)return n;var r=e.formatter,i=n.data,a=n.schema,o=n.uids,u=a.map(function(e){return e.name}),c=Object.keys(r).reduce(function(e,t){var n=u.indexOf(t);return-1!==n&&e.push([n,r[t]]),e},[]);return"column"===e.order?c.forEach(function(e){var t=e[0],n=e[1];i[t].forEach(function(e,r){i[t][r]=n.call(void 0,e,o[r],a[t])})}):i.forEach(function(e,t){c.forEach(function(n){var r=n[0],i=n[1];e[r]=i.call(void 0,e[r],o[t],a[r])})}),n}},{key:"groupBy",value:function value(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{saveChild:!0},r=""+e.join(),i=function de(e,t,n,r){var i=function(e,t){var n=[],r=e.getPartialFieldspace(),i=r.getDimension(),a=r.getMeasure();return Object.entries(i).forEach(function(e){var r=ke(e,1)[0];t&&t.length?-1!==t.indexOf(r)&&n.push(r):n.push(r)}),Object.entries(a).forEach(function(e){var r=ke(e,1)[0];"discrete"===a[r].subType()&&(t&&t.length?-1!==t.indexOf(r)&&n.push(r):n.push(r))}),n}(e,t),a=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n={},r=t,i=e.getPartialFieldspace().getMeasure(),a=we.defaultReducer();return"function"==typeof t&&(a=t),Object.entries(i).forEach(function(e){var o=ke(e,1)[0];"string"==typeof t[o]&&(r[o]=we.resolve(r[o])?we.resolve(r[o]):a),"function"!=typeof t[o]&&(r[o]=void 0),n[o]=r[o]||we.resolve(i[o].defAggFn())||a}),n}(e,n),o=e.getPartialFieldspace(),u=o.fieldsObj(),c=o.name,s=[],f=[],h=[],d={},p=[],y=void 0;Object.entries(u).forEach(function(e){var t=ke(e,2),n=t[0],r=t[1];(-1!==i.indexOf(n)||a[n])&&(h.push(E({},r.schema)),"measure"===r.schema.type&&"discrete"!==r.schema.subtype?f.push(n):"dimension"!==r.schema.type&&"discrete"!==r.schema.subtype||s.push(n))});var g=0;return l(e._rowDiffset,function(e){var t="";s.forEach(function(n){t=t+"-"+u[n].data[e]}),void 0===d[t]?(d[t]=g,p.push({}),s.forEach(function(t){p[g][t]=u[t].data[e]}),f.forEach(function(t){p[g][t]=[u[t].data[e]]}),g+=1):f.forEach(function(n){p[d[t]][n].push(u[n].data[e])})}),p.forEach(function(e){var t=e;f.forEach(function(n){t[n]=a[n](e[n])})}),r?(r.__calculateFieldspace(),y=r):y=new Lt(p,h,{name:c}),y}.apply(void 0,[this,e,t]);return n.saveChild&&(this._children.push(i),pt(i,le,{fieldsArr:e,groupByString:r,defaultReducer:we.defaultReducer()},t)),i._parent=this,i}},{key:"sort",value:function value(e){var t=this.getData({order:"row",sort:e}),n=[t.schema.map(function(e){return e.name})].concat(t.data),r=new this.constructor(n,t.schema,{dataFormat:"DSVArr"});return r._sortingDetails=e,r}},{key:"addField",value:function value(e){var t=e.fieldName();this._colIdentifier+=","+t;var n=this._partialFieldspace;if(n.fieldsObj()[e.fieldName()]){var r=n.fields.findIndex(function(e){return e.name===t});r>=0&&(n.fields[r]=e)}else n.fields.push(e);return this.__calculateFieldspace().calculateFieldsConfig(),this}},{key:"calculateVariable",value:function value(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{saveChild:!0,replaceVar:!1},r=this.getFieldsConfig(),i=t.slice(0,t.length-1),a=t[t.length-1];if(r[e.name]&&!n.replaceVar)throw new Error(e.name+" field already exists in model.");var o=i.map(function(e){var t=r[e];if(!t)throw new Error(e+" is not a valid column name.");return t.index}),u=this.clone(),c=u.getFieldspace().fields,s=o.map(function(e){return c[e]}),f=[];l(u._rowDiffset,function(e){var t=s.map(function(t){return t.data[e]});f[e]=a.apply(void 0,function(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t1&&void 0!==arguments[1]?arguments[1]:{},n=arguments[2],r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},i=t.isMutableAction,a=t.sourceId,o=t.payload,u=function e(t){return t._parent?e(t._parent):t}(this),c=u._propagationNameSpace,s={groupByModel:function e(t){return t._parent&&t._derivation.find(function(e){return"group"!==e.op})?e(t._parent):t}(this),model:u};return n&&function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments[2],r=void 0,i=t.isMutableAction,a=t.criteria,o=t.action+"-"+t.sourceId;r=i?e.mutableActions:e.immutableActions,null===a?delete r[o]:r[o]={model:n,config:t}}(c,t,this),wt(e,s,{propagationNameSpace:c,sourceId:a},Object.assign({payload:o},t)),i&&function(e,t,n){var r=e.immutableActions;for(var i in r){var a=r[i].config,o=n.config.sourceId,u=!n.propConfig.filterImmutableAction||n.propConfig.filterImmutableAction(a,n.config);if(a.sourceId!==o&&u){var c=a.criteria;wt(c,t,{propagationNameSpace:e,propagateToSource:!1,sourceId:o},a)}}}(c,s,{config:t,propConfig:r}),this}},{key:"on",value:function value(e,t){switch(e){case"propagation":this._onPropagation.push(t)}return this}},{key:"unsubscribe",value:function value(e){switch(e){case"propagation":this._onPropagation=[]}return this}},{key:"handlePropagation",value:function value(e,t){var n=this;this._onPropagation.forEach(function(r){return r.call(n,e,t)})}},{key:"bin",value:function value(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=this.clone(),r=t.name||e+"_binned";if(this.getFieldsConfig()[r]||!this.getFieldsConfig()[e])throw new Error("Field "+e+" already exists.");var i=function I(e,t,n){var r=n.buckets,i=n.binCount,a=n.binSize,o=n.start,u=[],c=[],s=e.domain(),f=ue(s,2),h=f[0],d=f[1],p=d,y=[],g=void 0,v=void 0,m=void 0,b=void 0;if(l(t,function(t){u.push({data:e.data[t],index:t})}),!r){var _=((d+=1)-h)%(a=a||(d-h)/i);for(i||0===_||(d=d+a-_),g=h+a;g<=d;)y.push(g),g+=a;r={start:o=o||h,stops:y}}v=0===r.start?0:r.start||h,r.stops.forEach(function(e){u.filter(function(t){return t.data>=v&&t.data=r.stops[r.stops.length-1]}).forEach(function(e){c[e.index]=r.stops[r.stops.length-1]+"-"+p}),r.stops.unshift(r.start),b=new Set(r.stops),hr.stops[r.stops.length-1]&&b.add(p),b=[].concat(function(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t1&&void 0!==arguments[1]?arguments[1]:{saveChild:!0}).saveChild;return t.forEach(function(e){n=e(n),i.push.apply(i,function(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t1&&r.dispose(),n}},bin:function bin(){for(var e=arguments.length,t=Array(e),n=0;n2?(i=arguments.length<=0?void 0:arguments[0],r=arguments.length<=1?void 0:arguments[1],a=arguments.length<=2?void 0:arguments[2]):(i=null,r=arguments.length<=0?void 0:arguments[0],a=arguments.length<=1?void 0:arguments[1]),t=a(w),(e=n=new A(t.fn)).addDependencies.apply(e,P(t.dependencies)),this._addPropInModel(i,function(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}({},r,n)),this}},{key:"_addPropInModel",value:function value(e,t){return this._graph.createNodesFrom(t,e),this}},{key:"on",value:function value(e,t,n){var r,i=e instanceof Array?e:[e],a=this._graph.createElectricNodeOf(i,{type:"CurrFrame",fn:t});return n&&(r=this._graph.stopPropagation().setPropagationOverride("nextFrame")).resetNodeValue.apply(r,P(e)),a}},{key:"next",value:function value(e,t,n){var r,i=e instanceof Array?e:[e],a=this._graph.createElectricNodeOf(i,{type:"NextFrame",fn:t});return n&&(r=this._graph.stopPropagation().setPropagationOverride("currentFrame")).resetNodeValue.apply(r,P(e)),a}},{key:"lock",value:function value(){return this._lockFlag=!0,this._reqQ.length=0,this}},{key:"unlock",value:function value(){return this._lockFlag=!1,this.setProp.apply(this,P(this._reqQ)),this._reqQ.length=0,this}},{key:"prop",value:function value(){var e,t=void 0,n=void 0;switch(e=arguments.length){case 1:t=arguments.length<=0?void 0:arguments[0];break;case 2:t=arguments.length<=0?void 0:arguments[0],n=arguments.length<=1?void 0:arguments[1];break;default:return this}return 2===e?(this._lockFlag?this._reqQ.push([t,n]):this.setProp([t,n]),this):this._graph.getNodeValue(t)}},{key:"setProp",value:function value(){for(var e,t=this,n=arguments.length,r=Array(n),i=0;i/gi),e},SmartLabelManager.store={},SmartLabelManager.prototype._calCharDimWithCache=function(e,t,n){if(!this._init)return!1;var r,i,a,o,u,c,s=this.options.maxCacheLimit,l=this._container,h=this.style||{},d=this._advancedCache||(this._advancedCache={}),p=this._advancedCacheKey||(this._advancedCacheKey=[]),y=e+(h.fontSize||"")+(h.fontFamily||"")+(h.fontWeight||"")+(h.fontStyle||""),g=e+"init"+(h.fontSize||"")+(h.fontFamily||"")+(h.fontWeight||"")+(h.fontStyle||"");return f[e]&&(e=f[e]),t?void 0===(c=d[g])&&(l.innerHTML=e.repeat?e.repeat(n):Array(n+1).join(e),a=l.offsetWidth,l.innerHTML=e,o=l.offsetWidth,c=d[g]=(a-n*o)/(n+1),p.push(g),p.length>s&&delete d[p.shift()]):c=0,(u=d[y])?(i=u.split(","),{width:parseFloat(i[0],10),height:parseFloat(i[1],10)}):(l.innerHTML=e,r={height:l.offsetHeight,width:l.offsetWidth+c},d[y]=r.width+","+r.height,p.push(y),p.length>s&&delete d[p.shift()],r)},SmartLabelManager.prototype._getWidthFn=function(){var e=this._containerObj,t=this._container,n=e.svgText;return n?function(e){var t,r;return n.textContent=e,(r=(t=n.getBBox()).width-d)<1&&(r=t.width),r}:function(e){return t.innerHTML=e,t.offsetWidth}},SmartLabelManager.prototype.setStyle=function(e){return this._init?e!==this.style||this._styleNotSet?(e||(e=this.style),o.setLineHeight(e),this.style=e,this._containerObj=t=this._containerManager.get(e),this._containerObj?(this._container=t.node,this._context=t.context,this._cache=t.charCache,this._lineHeight=t.lineHeight,this._styleNotSet=!1):this._styleNotSet=!0,this):void 0:this;var t},SmartLabelManager.prototype.useEllipsesOnOverflow=function(e){return this._init?(this._showNoEllipses=!e,this):this},SmartLabelManager.prototype.getSmartText=function(e,t,n,r){if(!this._init)return!1;void 0===e||null===e?e="":"string"!=typeof e&&(e=e.toString());var i,a,c,l,f,d,p,y,g,v,m,b,_,x,w,k,C,S,P,A,E,M,O,T,F,N,j=!1,I=0,D=-1,L=-1,R=-1,B=0,z=0,H=[],V=0,U=this._showNoEllipses?"":"...",W=this._lineHeight,q=this._context,G=this._container,Y=this._containerObj,X=Y.ellipsesWidth,K=Y.dotWidth,$=[],Q=-1,Z=-1,J=-1,ee=function fastTrim(e){for(var t=/\s/,n=(e=e.replace(/^\s\s*/,"")).length;t.test(e.charAt(n-=1)););return e.slice(0,n+1)},te={text:e,maxWidth:t,maxHeight:n,width:null,height:null,oriTextWidth:null,oriTextHeight:null,oriText:e,isTruncated:!1};if(b=this._getWidthFn(),n===W&&(n*=1.2),G){if(!h.isBrowserLess){if((j=o.xmlTagRegEx.test(e))?(G.innerHTML=e,te.oriTextWidth=p=G.offsetWidth,te.oriTextHeight=y=G.offsetHeight):(l=e.replace(o.ltgtRegex,function(e){return"<"===e?"<":">"}),w=this.getOriSize(l,!0),te.oriTextWidth=p=w.width,te.oriTextHeight=y=w.height),y<=n&&p<=t)return te.width=te.oriTextWidth=p,te.height=te.oriTextHeight=y,te;if(W>n)return te.text="",te.width=te.oriTextWidth=0,te.height=te.oriTextHeight=0,te}if(e=ee(e).replace(/(\s+)/g," "),f=this._showNoEllipses?t:t-X,!j){if(i=(H=e.split("")).length,a="",c=[],m=H[0],this._cache[m]?P=this._cache[m].width:(P=b(m),this._cache[m]={width:P}),f>P)V=(c=e.substr(0,o.getNearestBreakIndex(e,f,this)).split("")).length;else{if(P>t)return te.text="",te.width=te.oriTextWidth=te.height=te.oriTextHeight=0,te;U&&((f=t-2*K)>P?U="..":(f=t-K)>P?U=".":(f=0,U=""))}if(B=b(c.join("")),z=this._lineHeight,r){for(;Vf&&(a||(a=c.slice(0,-1).join("")),B>t))return te.text=ee(a)+U,te.tooltext=te.oriText,te.width=b(te.text),te.height=this._lineHeight,te;return te.text=c.join(""),te.width=B,te.height=this._lineHeight,te}for(;Vf&&(a||(a=c.slice(0,-1).join("")),B>t)){if(L=e.substr(0,c.length).lastIndexOf(" "),D=e.substr(0,c.length).lastIndexOf("-"),L>R?(B=b(c.slice(R+1,L).join("")),c.splice(L,1,"
"),R=L,g=L+1):D>R?(D===c.length-1?(B=b(c.slice(R+1,L).join("")),c.splice(D,1,"
-")):(B=b(c.slice(R+1,L).join("")),c.splice(D,1,"-
")),R=D,g=D+1):(c.splice(c.length-1,1,"
"+H[V]),J=c.length-2,B=b(c.slice(R+1,J+1).join("")),R=J,g=V),(z+=this._lineHeight)>n)return te.text=ee(a)+U,te.tooltext=te.oriText,te.width=t,te.height=z-this._lineHeight,te;I=s(I,B),a=null,v=o.getNearestBreakIndex(e.substr(g),f,this),B=b(e.substr(g,v||1)),c.length)/g,'$1'),G.innerHTML=e,C=0,S=(k=G[h.childRetriverFn](h.childRetriverString)).length;Ct)return te.text="",te.width=te.oriTextWidth=te.height=te.oriTextHeight=0,te;if(P>f&&!this._showNoEllipses&&((f=t-2*K)>P?U="..":(f=t-K)>P?U=".":(f=0,U="")),_=$[0].elem.offsetLeft,x=$[0].elem.offsetTop,r)for(;Vf&&(N||(N=V),G.offsetWidth>t&&(F=V,V=i));else for(;Vf?(N||(N=V),M>t&&(L=$[V].spaceIdx,D=$[V].dashIdx,L>R?($[L].elem.innerHTML="
",R=L):D>R?($[D].elem.innerHTML=D===V?"
-":"-
",R=D):A.parentNode.insertBefore(T=u.createElement("br"),A),A.offsetHeight+A.offsetTop>n?(T?T.parentNode.removeChild(T):R===D?$[D].elem.innerHTML="-":$[L].elem.innerHTML=" ",F=V,V=i):N=null)):O>n&&(F=V,V=i);if(F=N;V-=1)(A=$[V].elem).parentNode.removeChild(A);for(;V>=0;V-=1)A=$[V].elem,o.classNameBrReg.test(A.className)?A.parentNode.removeChild(A):V=0}return te.text=G.innerHTML.replace(o.spanRemovalRegx,"$1").replace(/\&\;/g,"&"),te.isTruncated&&(te.text+=U,te.tooltext=d),te.height=G.offsetHeight,te.width=G.offsetWidth,te}return te.error=new Error("Body Tag Missing!"),te},SmartLabelManager.prototype.getOriSize=function(e,t){if(!this._init)return!1;var n,r,i,a,o,u=0,c=0,f={};if(!t)return this._calCharDimWithCache(e);for(a=0,o=(n=e.split("")).length;a]+?\>)|(&(?:[a-z]+|#[0-9]+);|.)/gi,spanAdditionReplacer:'$1$2',spanRemovalRegx:new RegExp("\\]+?"+c+"[^\\>]{0,}\\>(.*?)\\<\\/span\\>","ig"),xmlTagRegEx:new RegExp("<[^>][^<]*[^>]+>","i"),ltgtRegex:/<|>/g,brReplaceRegex://gi,testStrAvg:"WgI",parentContainerStyle:{position:"absolute",top:"-9999em",whiteSpace:"nowrap",padding:"0px",width:"1px",height:"1px",overflow:"hidden"},supportedStyle:{font:"font",fontFamily:"font-family","font-family":"font-family",fontWeight:"font-weight","font-weight":"font-weight",fontSize:"font-size","font-size":"font-size",lineHeight:"line-height","line-height":"line-height",fontStyle:"font-style","font-style":"font-style"},getDocumentSupport:function getDocumentSupport(){var r,i,a;return t.getElementsByClassName?(r="getElementsByClassName",i=c,a=!0):(r="getElementsByTagName",i="span",a=!1),{isIE:/msie/i.test(n)&&!e.opera,hasSVG:Boolean(e.SVGAngle||t.implementation.hasFeature("http://www.w3.org/TR/SVG11/feature#BasicStructure","1.1")),isHeadLess:new RegExp(" HtmlUnit").test(n),isWebKit:new RegExp(" AppleWebKit/").test(n),childRetriverFn:r,childRetriverString:i,noClassTesting:a}},createContainer:function createContainer(e){var n,r;if(e&&(e.offsetWidth||e.offsetHeight)){if(e.appendChild)return e.appendChild(r=t.createElement("DIV")),r.className=u,r.setAttribute("aria-hidden","true"),r.setAttribute("role","presentation"),r}else if((n=t.getElementsByTagName("body")[0])&&n.appendChild)return(r=t.createElement("DIV")).className=u,r.setAttribute("aria-hidden","true"),r.setAttribute("role","presentation"),1,n.appendChild(r),r},getNearestBreakIndex:function getNearestBreakIndex(e,t,n){if(!e||!e.length)return 0;var r,o=n._getWidthFn(),u=0,c=0,s=o(e),l=s/e.length;if(r=t,u=i(t/l),se.length&&(r=t-s,u=e.length);r>0;){if(r=t-o(e.substr(0,u)),!(c=a(r/l)))return u;u+=c}for(;r<0;){if(r=t-o(e.substr(0,u)),!(c=a(r/l)))return u;u+=c}return u},setLineHeight:function setLineHeight(e){var t=e.fontSize=e.fontSize||"12px";return e.lineHeight=e.lineHeight||e["line-height"]||1.2*parseInt(t,10)+"px",e}}}};t.default=r,e.exports=t.default},function(e){e.exports={name:"muze",private:!0,version:"1.0.2",description:"Composable visualisation library for web with a data-first approach",homepage:"https://www.charts.com/muze",license:"MIT",author:"Charts.com ",contributors:[{name:"Akash Ghoswami",email:"akash@charts.com"},{name:"Ranajit Banerjee",email:"ranajit.banerjee@charts.com",url:"https://github.com/ranajitbanerjee"},{name:"Mridul Meharia",email:"mridul@charts.com",url:"https://github.com/mridulmeh"},{name:"Subhash Haldar",email:"subhash@charts.com"},{name:"Sandeep Acharya",email:"sandeep@charts.com"},{name:"Rousan Ali",email:"rousan@charts.com",url:"https://rousan.io"},{name:"Ujjal Kumar Dutta",email:"ujjal@charts.com"}],main:"src/index.js",keywords:["muze","svg","vector","graphics","data-visualization","visualization","renderer","fusioncharts","relational","algebra","relation"],repository:{type:"git",url:"https://github.com/chartshq/muze"},dependencies:{"@chartshq/layout":"^1.0.0","@chartshq/muze-firebolt":"^1.0.0","@chartshq/muze-legend":"^1.0.0","muze-utils":"^1.0.0","@chartshq/visual-cell":"^1.0.0","@chartshq/visual-group":"^1.0.0","@chartshq/visual-layer":"^1.0.0","@chartshq/visual-unit":"^1.0.0"}}},function(e,t,n){var r=n(44);e.exports=r.default?r.default:r},function(e,t,n){"use strict";var r=function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}(n(5)).default.init("undefined"!=typeof window?window:void 0),i=r.win.document,a=r.getDocumentSupport(),o=a.isWebKit?0:4.5;function ContainerManager(e,t,n){var r;n=(n=n>5?n:5)<20?n:20,this.maxContainers=n,this.first=null,this.last=null,this.containers={},this.length=0,this.rootNode=e,t&&((r=i.createElementNS("http://www.w3.org/2000/svg","svg")).setAttributeNS("http://www.w3.org/2000/svg","xlink","http://www.w3.org/1999/xlink"),r.setAttributeNS("http://www.w3.org/2000/svg","height","0"),r.setAttributeNS("http://www.w3.org/2000/svg","width","0"),this.svgRoot=r,this.rootNode.appendChild(r))}ContainerManager.prototype.get=function(e){var t,n,i,a=this.containers,o=this.length,u=this.maxContainers,c="";for(n in r.supportedStyle)void 0!==e[n]&&(c+=r.supportedStyle[n]+":"+e[n]+";");if(!c)return!1;if(i=a[c])this.first!==i&&(i.prev&&(i.prev.next=i.next),i.next&&(i.next.prev=i.prev),i.next=this.first,i.next.prev=i,this.last===i&&(this.last=i.prev),i.prev=null,this.first=i);else{if(o>=u)for(t=o-u+1;t--;)this.removeContainer(this.last);i=this.addContainer(c)}return i},ContainerManager.prototype.addContainer=function(e){var t,n;return this.containers[e]=n={next:null,prev:null,node:null,ellipsesWidth:0,lineHeight:0,dotWidth:0,avgCharWidth:4,keyStr:e,charCache:{}},n.next=this.first,n.next&&(n.next.prev=n),this.first=n,this.last||(this.last=n),this.length+=1,t=n.node=i.createElement("div"),this.rootNode.appendChild(t),a.isIE&&!a.hasSVG?t.style.setAttribute("cssText",e):t.setAttribute("style",e),t.setAttribute("aria-hidden","true"),t.setAttribute("role","presentation"),t.style.display="inline-block",t.innerHTML=r.testStrAvg,n.lineHeight=t.offsetHeight,n.avgCharWidth=t.offsetWidth/3,a.isBrowserLess?((t=n.svgText=i.createElementNS("http://www.w3.org/2000/svg","text")).setAttribute("style",e),this.svgRoot.appendChild(t),t.textContent=r.testStrAvg,n.lineHeight=t.getBBox().height,n.avgCharWidth=(t.getBBox().width-o)/3,t.textContent="...",n.ellipsesWidth=t.getBBox().width-o,t.textContent=".",n.dotWidth=t.getBBox().width-o):(t.innerHTML="...",n.ellipsesWidth=t.offsetWidth,t.innerHTML=".",n.dotWidth=t.offsetWidth,t.innerHTML=""),n},ContainerManager.prototype.removeContainer=function(e){var t=e.keyStr;t&&this.length&&e&&(this.length-=1,e.prev&&(e.prev.next=e.next),e.next&&(e.next.prev=e.prev),this.first===e&&(this.first=e.next),this.last===e&&(this.last=e.prev),e.node.parentNode.removeChild(e.node),delete this.containers[t])},ContainerManager.prototype.dispose=function(){var e,t=this.containers;for(e in this.maxContainers=null,t)this.removeContainer(t[e]);this.rootNode.parentNode.removeChild(this.rootNode),this.rootNode=null,this.first=null,this.last=null},e.exports=ContainerManager},function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,,function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,function(e,t,n){"use strict";n.r(t);var r={};n.r(r),n.d(r,"scaleLinear",function(){return linear_linear}),n.d(r,"scaleThreshold",function(){return threshold_threshold}),n.d(r,"scaleLog",function(){return log}),n.d(r,"scalePow",function(){return pow}),n.d(r,"scaleIdentity",function(){return identity_identity}),n.d(r,"scaleOrdinal",function(){return ordinal}),n.d(r,"scaleSequential",function(){return sequential}),n.d(r,"scaleQuantize",function(){return quantize_quantize}),n.d(r,"scaleQuantile",function(){return quantile_quantile}),n.d(r,"schemeCategory10",function(){return tn}),n.d(r,"schemeCategory20",function(){return rn}),n.d(r,"schemeCategory20b",function(){return nn}),n.d(r,"scaleBand",function(){return band}),n.d(r,"scaleTime",function(){return Jt});var i={};n.r(i),n.d(i,"schemeDark2",function(){return cn}),n.d(i,"schemePaired",function(){return sn}),n.d(i,"schemeAccent",function(){return un}),n.d(i,"schemePastel1",function(){return ln}),n.d(i,"schemePastel2",function(){return fn}),n.d(i,"schemeSet1",function(){return hn}),n.d(i,"schemeSet2",function(){return dn}),n.d(i,"schemeSet3",function(){return pn}),n.d(i,"schemeBlues",function(){return zn}),n.d(i,"schemeBrBG",function(){return gn}),n.d(i,"schemePRGn",function(){return mn}),n.d(i,"schemePiYG",function(){return _n}),n.d(i,"interpolateBrBG",function(){return vn}),n.d(i,"interpolatePRGn",function(){return bn}),n.d(i,"interpolatePiYG",function(){return xn}),n.d(i,"interpolatePuOr",function(){return wn}),n.d(i,"interpolateRdBu",function(){return kn}),n.d(i,"interpolateRdGy",function(){return Cn}),n.d(i,"interpolateRdYlBu",function(){return Sn}),n.d(i,"interpolateRdYlGn",function(){return Pn}),n.d(i,"interpolateSpectral",function(){return An}),n.d(i,"interpolateBlues",function(){return Hn}),n.d(i,"interpolateGreens",function(){return Vn}),n.d(i,"interpolateGreys",function(){return Un}),n.d(i,"interpolateOranges",function(){return Gn}),n.d(i,"interpolatePurples",function(){return Wn}),n.d(i,"interpolateReds",function(){return qn}),n.d(i,"interpolateViridis",function(){return Zn}),n.d(i,"interpolateInferno",function(){return er}),n.d(i,"interpolateMagma",function(){return Jn}),n.d(i,"interpolatePlasma",function(){return tr}),n.d(i,"interpolateWarm",function(){return Xn}),n.d(i,"interpolateCool",function(){return Kn}),n.d(i,"interpolateCubehelixDefault",function(){return Yn}),n.d(i,"interpolateBuGn",function(){return En}),n.d(i,"interpolateBuPu",function(){return Mn}),n.d(i,"interpolateGnBu",function(){return On}),n.d(i,"interpolateOrRd",function(){return Tn}),n.d(i,"interpolatePuBuGn",function(){return Fn}),n.d(i,"interpolatePuBu",function(){return Nn}),n.d(i,"interpolatePuRd",function(){return jn}),n.d(i,"interpolateRdPu",function(){return In}),n.d(i,"interpolateYlGnBu",function(){return Dn}),n.d(i,"interpolateYlGn",function(){return Ln}),n.d(i,"interpolateYlOrBr",function(){return Rn}),n.d(i,"interpolateYlOrRd",function(){return Bn}),n.d(i,"interpolateRainbow",function(){return Qn});var a={};n.r(a),n.d(a,"DRAG",function(){return Qo}),n.d(a,"HOVER",function(){return Zo}),n.d(a,"SELECTIONDRAG",function(){return Jo}),n.d(a,"CLICK",function(){return eu}),n.d(a,"LONGTOUCH",function(){return tu}),n.d(a,"TOUCHDRAG",function(){return nu}),n.d(a,"ALL_ACTIONS",function(){return ru});var o={};n.r(o),n.d(o,"SELECTION_NEW_ENTRY",function(){return iu}),n.d(o,"SELECTION_NEW_EXIT",function(){return au}),n.d(o,"SELECTION_NULL",function(){return ou}),n.d(o,"SELECTION_OLD_ENTRY",function(){return uu}),n.d(o,"SELECTION_OLD_EXIT",function(){return cu});var u={};n.r(u),n.d(u,"BRUSH",function(){return wu}),n.d(u,"HIGHLIGHT",function(){return ku}),n.d(u,"TOOLTIP",function(){return Cu}),n.d(u,"FILTER",function(){return Su}),n.d(u,"SELECT",function(){return Pu});var c={};n.r(c),n.d(c,"HighlightBeahviour",function(){return Eu}),n.d(c,"BrushBehaviour",function(){return Ou}),n.d(c,"FilterBehaviour",function(){return Fu}),n.d(c,"SelectBehaviour",function(){return Lu});var s={};n.r(s),n.d(s,"SelectionBox",function(){return Ju}),n.d(s,"Tooltip",function(){return gc}),n.d(s,"Crossline",function(){return mc}),n.d(s,"PlotHighlighter",function(){return xc}),n.d(s,"FilterEffect",function(){return kc}),n.d(s,"PersistentAnchors",function(){return Ec}),n.d(s,"BrushAnchors",function(){return Tc}),n.d(s,"AnchorEffect",function(){return Pc});var l={};n.r(l),n.d(l,"BOTTOM",function(){return Gc}),n.d(l,"TOP",function(){return Yc}),n.d(l,"LEFT",function(){return Xc}),n.d(l,"RIGHT",function(){return Kc}),n.d(l,"axisOrientationMap",function(){return $c});var f={};n.r(f),n.d(f,"LINEAR",function(){return Qc}),n.d(f,"BAND",function(){return Zc}),n.d(f,"TIME",function(){return Jc}),n.d(f,"COLOR",function(){return es}),n.d(f,"ORDINAL",function(){return ts}),n.d(f,"QUANTIZE",function(){return ns}),n.d(f,"QUANTILE",function(){return rs}),n.d(f,"LOG",function(){return is}),n.d(f,"POW",function(){return as}),n.d(f,"IDENTITY",function(){return os}),n.d(f,"SEQUENTIAL",function(){return us}),n.d(f,"THRESHOLD",function(){return cs});var h={};n.r(h),n.d(h,"CONFIG",function(){return ad}),n.d(h,"DATA",function(){return od}),n.d(h,"AXES",function(){return ud}),n.d(h,"LAYERDEFS",function(){return cd}),n.d(h,"WIDTH",function(){return sd}),n.d(h,"HEIGHT",function(){return ld}),n.d(h,"MOUNT",function(){return fd}),n.d(h,"primaryXAxisUpdated",function(){return hd}),n.d(h,"primaryYAxisUpdated",function(){return dd}),n.d(h,"secondaryXAxisUpdated",function(){return pd}),n.d(h,"secondaryYAxisUpdated",function(){return yd}),n.d(h,"TRANSFORM",function(){return gd}),n.d(h,"DATADOMAIN",function(){return vd}),n.d(h,"LAYERSCREATED",function(){return md}),n.d(h,"FIELDS",function(){return bd}),n.d(h,"TIMEDIFFS",function(){return _d}),n.d(h,"LAYERAXISINDEX",function(){return xd});var d={};n.r(d),n.d(d,"SelectBehaviour",function(){return wp});var y={};n.r(y),n.d(y,"SelectionBox",function(){return zp}),n.d(y,"LegendHighlighter",function(){return Up});var g={};n.r(g),n.d(g,"share",function(){return Oy}),n.d(g,"html",function(){return operators_html});var v=function(e,t){return et?1:e>=t?0:NaN},m=function(e){return 1===e.length&&(e=function ascendingComparator(e){return function(t,n){return v(e(t),n)}}(e)),{left:function left(t,n,r,i){for(null==r&&(r=0),null==i&&(i=t.length);r>>1;e(t[a],n)<0?r=a+1:i=a}return r},right:function right(t,n,r,i){for(null==r&&(r=0),null==i&&(i=t.length);r>>1;e(t[a],n)>0?i=a:r=a+1}return r}}};var b=m(v),_=b.right,x=(b.left,_);var w=function(e){return null===e?NaN:+e},k=Array.prototype,C=(k.slice,k.map,function(e,t,n){e=+e,t=+t,n=(i=arguments.length)<2?(t=e,e=0,1):i<3?1:+n;for(var r=-1,i=0|Math.max(0,Math.ceil((t-e)/n)),a=new Array(i);++r0)return[e];if((r=t0)for(e=Math.ceil(e/o),t=Math.floor(t/o),a=new Array(i=Math.ceil(t-e+1));++u=0?(a>=S?10:a>=P?5:a>=A?2:1)*Math.pow(10,i):-Math.pow(10,-i)/(a>=S?10:a>=P?5:a>=A?2:1)}function tickStep(e,t,n){var r=Math.abs(t-e)/Math.max(0,n),i=Math.pow(10,Math.floor(Math.log(r)/Math.LN10)),a=r/i;return a>=S?i*=10:a>=P?i*=5:a>=A&&(i*=2),t=1)return+n(e[r-1],r-1,e);var r,i=(r-1)*t,a=Math.floor(i),o=+n(e[a],a,e);return o+(+n(e[a+1],a+1,e)-o)*(i-a)}};function map_Map(){}function map_map(e,t){var n=new map_Map;if(e instanceof map_Map)e.each(function(e,t){n.set(t,e)});else if(Array.isArray(e)){var r,i=-1,a=e.length;if(null==t)for(;++i=r.length)return null!=e&&n.sort(e),null!=t?t(n):n;for(var u,c,s,l=-1,f=n.length,h=r[i++],d=O(),p=a();++lr.length)return e;var a,o=i[n-1];return null!=t&&n>=r.length?a=e.entries():(a=[],e.each(function(e,t){a.push({key:t,values:_entries(e,n)})})),null!=o?a.sort(function(e,t){return o(e.key,t.key)}):a}(apply(e,0,createMap,setMap),0)},key:function key(e){return r.push(e),n},sortKeys:function sortKeys(e){return i[r.length-1]=e,n},sortValues:function sortValues(t){return e=t,n},rollup:function rollup(e){return t=e,n}}};function createObject(){return{}}function setObject(e,t,n){e[t]=n}function createMap(){return O()}function setMap(e,t,n){e.set(t,n)}function set_Set(){}var F=O.prototype;function set_set(e,t){var n=new set_Set;if(e instanceof set_Set)e.each(function(e){n.add(e)});else if(e){var r=-1,i=e.length;if(null==t)for(;++r1?+t:s,f=a[1]a[1-f]))return n=Math.max(0,getClosestIndexOf(h,s)),c=getClosestIndexOf(h,l),o=s===l?n:Math.max(n,c-1),f&&(u=n,n=d-o,o=d-u),n>o?void 0:r().slice(n,o+1)},n.invert=function(e,t){var n,o,u=+e,c=arguments.length>1?+t:u,s=a[1]a[1-s]))return n=Math.max(0,getClosestIndexOf(l,u,"left")),r()[s?f-n:n]},rescale()}function getClosestIndexOf(e,t,n){for(var r,i,a,o=0,u=e.length-1;ot?0===u?u:"left"===n?u-1:u:u===e.length-1?u:"left"===n?u:u+1:u}var L=function(e,t,n){e.prototype=t.prototype=n,n.constructor=e};function extend(e,t){var n=Object.create(e.prototype);for(var r in t)n[r]=t[r];return n}function Color(){}var R="\\s*([+-]?\\d+)\\s*",B="\\s*([+-]?\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)\\s*",z="\\s*([+-]?\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)%\\s*",H=/^#([0-9a-f]{3})$/,V=/^#([0-9a-f]{6})$/,U=new RegExp("^rgb\\("+[R,R,R]+"\\)$"),W=new RegExp("^rgb\\("+[z,z,z]+"\\)$"),q=new RegExp("^rgba\\("+[R,R,R,B]+"\\)$"),G=new RegExp("^rgba\\("+[z,z,z,B]+"\\)$"),Y=new RegExp("^hsl\\("+[B,z,z]+"\\)$"),X=new RegExp("^hsla\\("+[B,z,z,B]+"\\)$"),K={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};function color_color(e){var t;return e=(e+"").trim().toLowerCase(),(t=H.exec(e))?new Rgb((t=parseInt(t[1],16))>>8&15|t>>4&240,t>>4&15|240&t,(15&t)<<4|15&t,1):(t=V.exec(e))?rgbn(parseInt(t[1],16)):(t=U.exec(e))?new Rgb(t[1],t[2],t[3],1):(t=W.exec(e))?new Rgb(255*t[1]/100,255*t[2]/100,255*t[3]/100,1):(t=q.exec(e))?rgba(t[1],t[2],t[3],t[4]):(t=G.exec(e))?rgba(255*t[1]/100,255*t[2]/100,255*t[3]/100,t[4]):(t=Y.exec(e))?hsla(t[1],t[2]/100,t[3]/100,1):(t=X.exec(e))?hsla(t[1],t[2]/100,t[3]/100,t[4]):K.hasOwnProperty(e)?rgbn(K[e]):"transparent"===e?new Rgb(NaN,NaN,NaN,0):null}function rgbn(e){return new Rgb(e>>16&255,e>>8&255,255&e,1)}function rgba(e,t,n,r){return r<=0&&(e=t=n=NaN),new Rgb(e,t,n,r)}function rgbConvert(e){return e instanceof Color||(e=color_color(e)),e?new Rgb((e=e.rgb()).r,e.g,e.b,e.opacity):new Rgb}function color_rgb(e,t,n,r){return 1===arguments.length?rgbConvert(e):new Rgb(e,t,n,null==r?1:r)}function Rgb(e,t,n,r){this.r=+e,this.g=+t,this.b=+n,this.opacity=+r}function _hex(e){return((e=Math.max(0,Math.min(255,Math.round(e)||0)))<16?"0":"")+e.toString(16)}function hsla(e,t,n,r){return r<=0?e=t=n=NaN:n<=0||n>=1?e=t=NaN:t<=0&&(e=NaN),new Hsl(e,t,n,r)}function hsl(e,t,n,r){return 1===arguments.length?function hslConvert(e){if(e instanceof Hsl)return new Hsl(e.h,e.s,e.l,e.opacity);if(e instanceof Color||(e=color_color(e)),!e)return new Hsl;if(e instanceof Hsl)return e;var t=(e=e.rgb()).r/255,n=e.g/255,r=e.b/255,i=Math.min(t,n,r),a=Math.max(t,n,r),o=NaN,u=a-i,c=(a+i)/2;return u?(o=t===a?(n-r)/u+6*(n0&&c<1?0:o,new Hsl(o,u,c,e.opacity)}(e):new Hsl(e,t,n,null==r?1:r)}function Hsl(e,t,n,r){this.h=+e,this.s=+t,this.l=+n,this.opacity=+r}function hsl2rgb(e,t,n){return 255*(e<60?t+(n-t)*e/60:e<180?n:e<240?t+(n-t)*(240-e)/60:t)}L(Color,color_color,{displayable:function displayable(){return this.rgb().displayable()},hex:function hex(){return this.rgb().hex()},toString:function toString(){return this.rgb()+""}}),L(Rgb,color_rgb,extend(Color,{brighter:function brighter(e){return e=null==e?1/.7:Math.pow(1/.7,e),new Rgb(this.r*e,this.g*e,this.b*e,this.opacity)},darker:function darker(e){return e=null==e?.7:Math.pow(.7,e),new Rgb(this.r*e,this.g*e,this.b*e,this.opacity)},rgb:function rgb(){return this},displayable:function displayable(){return 0<=this.r&&this.r<=255&&0<=this.g&&this.g<=255&&0<=this.b&&this.b<=255&&0<=this.opacity&&this.opacity<=1},hex:function hex(){return"#"+_hex(this.r)+_hex(this.g)+_hex(this.b)},toString:function toString(){var e=this.opacity;return(1===(e=isNaN(e)?1:Math.max(0,Math.min(1,e)))?"rgb(":"rgba(")+Math.max(0,Math.min(255,Math.round(this.r)||0))+", "+Math.max(0,Math.min(255,Math.round(this.g)||0))+", "+Math.max(0,Math.min(255,Math.round(this.b)||0))+(1===e?")":", "+e+")")}})),L(Hsl,hsl,extend(Color,{brighter:function brighter(e){return e=null==e?1/.7:Math.pow(1/.7,e),new Hsl(this.h,this.s,this.l*e,this.opacity)},darker:function darker(e){return e=null==e?.7:Math.pow(.7,e),new Hsl(this.h,this.s,this.l*e,this.opacity)},rgb:function rgb(){var e=this.h%360+360*(this.h<0),t=isNaN(e)||isNaN(this.s)?0:this.s,n=this.l,r=n+(n<.5?n:1-n)*t,i=2*n-r;return new Rgb(hsl2rgb(e>=240?e-240:e+120,i,r),hsl2rgb(e,i,r),hsl2rgb(e<120?e+240:e-120,i,r),this.opacity)},displayable:function displayable(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1}}));var $=Math.PI/180,Q=180/Math.PI,Z=.96422,J=1,ee=.82521,te=4/29,ne=6/29,re=3*ne*ne,ie=ne*ne*ne;function labConvert(e){if(e instanceof Lab)return new Lab(e.l,e.a,e.b,e.opacity);if(e instanceof Hcl){if(isNaN(e.h))return new Lab(e.l,0,0,e.opacity);var t=e.h*$;return new Lab(e.l,Math.cos(t)*e.c,Math.sin(t)*e.c,e.opacity)}e instanceof Rgb||(e=rgbConvert(e));var n,r,i=rgb2lrgb(e.r),a=rgb2lrgb(e.g),o=rgb2lrgb(e.b),u=xyz2lab((.2225045*i+.7168786*a+.0606169*o)/J);return i===a&&a===o?n=r=u:(n=xyz2lab((.4360747*i+.3850649*a+.1430804*o)/Z),r=xyz2lab((.0139322*i+.0971045*a+.7141733*o)/ee)),new Lab(116*u-16,500*(n-u),200*(u-r),e.opacity)}function lab(e,t,n,r){return 1===arguments.length?labConvert(e):new Lab(e,t,n,null==r?1:r)}function Lab(e,t,n,r){this.l=+e,this.a=+t,this.b=+n,this.opacity=+r}function xyz2lab(e){return e>ie?Math.pow(e,1/3):e/re+te}function lab2xyz(e){return e>ne?e*e*e:re*(e-te)}function lrgb2rgb(e){return 255*(e<=.0031308?12.92*e:1.055*Math.pow(e,1/2.4)-.055)}function rgb2lrgb(e){return(e/=255)<=.04045?e/12.92:Math.pow((e+.055)/1.055,2.4)}function hclConvert(e){if(e instanceof Hcl)return new Hcl(e.h,e.c,e.l,e.opacity);if(e instanceof Lab||(e=labConvert(e)),0===e.a&&0===e.b)return new Hcl(NaN,0,e.l,e.opacity);var t=Math.atan2(e.b,e.a)*Q;return new Hcl(t<0?t+360:t,Math.sqrt(e.a*e.a+e.b*e.b),e.l,e.opacity)}function hcl(e,t,n,r){return 1===arguments.length?hclConvert(e):new Hcl(e,t,n,null==r?1:r)}function Hcl(e,t,n,r){this.h=+e,this.c=+t,this.l=+n,this.opacity=+r}L(Lab,lab,extend(Color,{brighter:function brighter(e){return new Lab(this.l+18*(null==e?1:e),this.a,this.b,this.opacity)},darker:function darker(e){return new Lab(this.l-18*(null==e?1:e),this.a,this.b,this.opacity)},rgb:function rgb(){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 new Rgb(lrgb2rgb(3.1338561*(t=Z*lab2xyz(t))-1.6168667*(e=J*lab2xyz(e))-.4906146*(n=ee*lab2xyz(n))),lrgb2rgb(-.9787684*t+1.9161415*e+.033454*n),lrgb2rgb(.0719453*t-.2289914*e+1.4052427*n),this.opacity)}})),L(Hcl,hcl,extend(Color,{brighter:function brighter(e){return new Hcl(this.h,this.c,this.l+18*(null==e?1:e),this.opacity)},darker:function darker(e){return new Hcl(this.h,this.c,this.l-18*(null==e?1:e),this.opacity)},rgb:function rgb(){return labConvert(this).rgb()}}));var ae=-.14861,oe=1.78277,ue=-.29227,ce=-.90649,se=1.97294,le=se*ce,fe=se*oe,he=oe*ue-ce*ae;function cubehelix_cubehelix(e,t,n,r){return 1===arguments.length?function cubehelixConvert(e){if(e instanceof Cubehelix)return new Cubehelix(e.h,e.s,e.l,e.opacity);e instanceof Rgb||(e=rgbConvert(e));var t=e.r/255,n=e.g/255,r=e.b/255,i=(he*r+le*t-fe*n)/(he+le-fe),a=r-i,o=(se*(n-i)-ue*a)/ce,u=Math.sqrt(o*o+a*a)/(se*i*(1-i)),c=u?Math.atan2(o,a)*Q-120:NaN;return new Cubehelix(c<0?c+360:c,u,i,e.opacity)}(e):new Cubehelix(e,t,n,null==r?1:r)}function Cubehelix(e,t,n,r){this.h=+e,this.s=+t,this.l=+n,this.opacity=+r}function basis(e,t,n,r,i){var a=e*e,o=a*e;return((1-3*e+3*a-o)*t+(4-6*a+3*o)*n+(1+3*e+3*a-3*o)*r+o*i)/6}L(Cubehelix,cubehelix_cubehelix,extend(Color,{brighter:function brighter(e){return e=null==e?1/.7:Math.pow(1/.7,e),new Cubehelix(this.h,this.s,this.l*e,this.opacity)},darker:function darker(e){return e=null==e?.7:Math.pow(.7,e),new Cubehelix(this.h,this.s,this.l*e,this.opacity)},rgb:function rgb(){var e=isNaN(this.h)?0:(this.h+120)*$,t=+this.l,n=isNaN(this.s)?0:this.s*t*(1-t),r=Math.cos(e),i=Math.sin(e);return new Rgb(255*(t+n*(ae*r+oe*i)),255*(t+n*(ue*r+ce*i)),255*(t+n*(se*r)),this.opacity)}}));var de=function(e){return function(){return e}};function linear(e,t){return function(n){return e+n*t}}function color_hue(e,t){var n=t-e;return n?linear(e,n>180||n<-180?n-360*Math.round(n/360):n):de(isNaN(e)?t:e)}function gamma(e){return 1==(e=+e)?nogamma:function(t,n){return n-t?function exponential(e,t,n){return e=Math.pow(e,n),t=Math.pow(t,n)-e,n=1/n,function(r){return Math.pow(e+r*t,n)}}(t,n,e):de(isNaN(t)?n:t)}}function nogamma(e,t){var n=t-e;return n?linear(e,n):de(isNaN(e)?t:e)}var pe=function rgbGamma(e){var t=gamma(e);function rgb(e,n){var r=t((e=color_rgb(e)).r,(n=color_rgb(n)).r),i=t(e.g,n.g),a=t(e.b,n.b),o=nogamma(e.opacity,n.opacity);return function(t){return e.r=r(t),e.g=i(t),e.b=a(t),e.opacity=o(t),e+""}}return rgb.gamma=rgbGamma,rgb}(1);function rgbSpline(e){return function(t){var n,r,i=t.length,a=new Array(i),o=new Array(i),u=new Array(i);for(n=0;n=1?(n=1,t-1):Math.floor(n*t),i=e[r],a=e[r+1],o=r>0?e[r-1]:2*i-a,u=ra&&(i=t.slice(a,i),u[o]?u[o]+=i:u[++o]=i),(n=n[0])===(r=r[0])?u[o]?u[o]+=r:u[++o]=r:(u[++o]=null,c.push({i:o,x:ge(n,r)})),a=be.lastIndex;return a180?t+=360:t-e>180&&(e+=360),i.push({i:n.push(pop(n)+"rotate(",null,r)-2,x:ge(e,t)})):t&&n.push(pop(n)+"rotate("+t+r)}(i.rotate,a.rotate,o,u),function skewX(e,t,n,i){e!==t?i.push({i:n.push(pop(n)+"skewX(",null,r)-2,x:ge(e,t)}):t&&n.push(pop(n)+"skewX("+t+r)}(i.skewX,a.skewX,o,u),function scale(e,t,n,r,i,a){if(e!==n||t!==r){var o=i.push(pop(i)+"scale(",null,",",null,")");a.push({i:o-4,x:ge(e,n)},{i:o-2,x:ge(t,r)})}else 1===n&&1===r||i.push(pop(i)+"scale("+n+","+r+")")}(i.scaleX,i.scaleY,a.scaleX,a.scaleY,o,u),i=a=null,function(e){for(var t,n=-1,r=u.length;++n2?polymap:bimap,r=i=null,scale}function scale(t){return(r||(r=n(a,o,c?function deinterpolateClamp(e){return function(t,n){var r=e(t=+t,n=+n);return function(e){return e<=t?0:e>=n?1:r(e)}}}(e):e,u)))(+t)}return scale.invert=function(e){return(i||(i=n(o,a,deinterpolateLinear,c?function reinterpolateClamp(e){return function(t,n){var r=e(t=+t,n=+n);return function(e){return e<=0?t:e>=1?n:r(e)}}}(t):t)))(+e)},scale.domain=function(e){return arguments.length?(a=j.call(e,De),rescale()):a.slice()},scale.range=function(e){return arguments.length?(o=I.call(e),rescale()):o.slice()},scale.rangeRound=function(e){return o=I.call(e),u=Ae,rescale()},scale.clamp=function(e){return arguments.length?(c=!!e,rescale()):c},scale.interpolate=function(e){return arguments.length?(u=e,rescale()):u},rescale()}var Re=function(e,t){if((n=(e=t?e.toExponential(t-1):e.toExponential()).indexOf("e"))<0)return null;var n,r=e.slice(0,n);return[r.length>1?r[0]+r.slice(2):r,+e.slice(n+1)]},Be=function(e){return(e=Re(Math.abs(e)))?e[1]:NaN},ze=/^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;function formatSpecifier(e){return new FormatSpecifier(e)}function FormatSpecifier(e){if(!(t=ze.exec(e)))throw new Error("invalid format: "+e);var t;this.fill=t[1]||" ",this.align=t[2]||">",this.sign=t[3]||"-",this.symbol=t[4]||"",this.zero=!!t[5],this.width=t[6]&&+t[6],this.comma=!!t[7],this.precision=t[8]&&+t[8].slice(1),this.trim=!!t[9],this.type=t[10]||""}formatSpecifier.prototype=FormatSpecifier.prototype,FormatSpecifier.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.trim?"~":"")+this.type};var He,Ve,Ue,We,qe=function(e){e:for(var t,n=e.length,r=1,i=-1;r0){if(!+e[r])break e;i=0}}return i>0?e.slice(0,i)+e.slice(t+1):e},Ge=function(e,t){var n=Re(e,t);if(!n)return e+"";var r=n[0],i=n[1];return i<0?"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")},Ye={"%":function _(e,t){return(100*e).toFixed(t)},b:function b(e){return Math.round(e).toString(2)},c:function c(e){return e+""},d:function d(e){return Math.round(e).toString(10)},e:function e(t,n){return t.toExponential(n)},f:function f(e,t){return e.toFixed(t)},g:function g(e,t){return e.toPrecision(t)},o:function o(e){return Math.round(e).toString(8)},p:function p(e,t){return Ge(100*e,t)},r:Ge,s:function(e,t){var n=Re(e,t);if(!n)return e+"";var r=n[0],i=n[1],a=i-(He=3*Math.max(-8,Math.min(8,Math.floor(i/3))))+1,o=r.length;return a===o?r:a>o?r+new Array(a-o+1).join("0"):a>0?r.slice(0,a)+"."+r.slice(a):"0."+new Array(1-a).join("0")+Re(e,Math.max(0,t+a-1))[0]},X:function X(e){return Math.round(e).toString(16).toUpperCase()},x:function x(e){return Math.round(e).toString(16)}},Xe=function(e){return e},Ke=["y","z","a","f","p","n","µ","m","","k","M","G","T","P","E","Z","Y"],$e=function(e){var t=e.grouping&&e.thousands?function(e,t){return function(n,r){for(var i=n.length,a=[],o=0,u=e[0],c=0;i>0&&u>0&&(c+u+1>r&&(u=Math.max(1,r-c)),a.push(n.substring(i-=u,i+u)),!((c+=u+1)>r));)u=e[o=(o+1)%e.length];return a.reverse().join(t)}}(e.grouping,e.thousands):Xe,n=e.currency,r=e.decimal,i=e.numerals?function(e){return function(t){return t.replace(/[0-9]/g,function(t){return e[+t]})}}(e.numerals):Xe,a=e.percent||"%";function newFormat(e){var o=(e=formatSpecifier(e)).fill,u=e.align,c=e.sign,s=e.symbol,l=e.zero,f=e.width,h=e.comma,d=e.precision,p=e.trim,y=e.type;"n"===y?(h=!0,y="g"):Ye[y]||(null==d&&(d=12),p=!0,y="g"),(l||"0"===o&&"="===u)&&(l=!0,o="0",u="=");var g="$"===s?n[0]:"#"===s&&/[boxX]/.test(y)?"0"+y.toLowerCase():"",v="$"===s?n[1]:/[%p]/.test(y)?a:"",m=Ye[y],b=/[defgprs%]/.test(y);function format(e){var n,a,s,_=g,x=v;if("c"===y)x=m(e)+x,e="";else{var w=(e=+e)<0;if(e=m(Math.abs(e),d),p&&(e=qe(e)),w&&0==+e&&(w=!1),_=(w?"("===c?c:"-":"-"===c||"("===c?"":c)+_,x=("s"===y?Ke[8+He/3]:"")+x+(w&&"("===c?")":""),b)for(n=-1,a=e.length;++n(s=e.charCodeAt(n))||s>57){x=(46===s?r+e.slice(n+1):e.slice(n))+x,e=e.slice(0,n);break}}h&&!l&&(e=t(e,1/0));var k=_.length+e.length+x.length,C=k>1)+_+e+x+C.slice(k);break;default:e=C+_+e+x}return i(e)}return d=null==d?6:/[gprs]/.test(y)?Math.max(1,Math.min(21,d)):Math.max(0,Math.min(20,d)),format.toString=function(){return e+""},format}return{format:newFormat,formatPrefix:function formatPrefix(e,t){var n=newFormat(((e=formatSpecifier(e)).type="f",e)),r=3*Math.max(-8,Math.min(8,Math.floor(Be(t)/3))),i=Math.pow(10,-r),a=Ke[8+r/3];return function(e){return n(i*e)+a}}}};!function defaultLocale(e){return Ve=$e(e),Ue=Ve.format,We=Ve.formatPrefix,Ve}({decimal:".",thousands:",",grouping:[3],currency:["$",""]});var Qe=function(e,t,n){var r,i=e[0],a=e[e.length-1],o=tickStep(i,a,null==t?10:t);switch((n=formatSpecifier(null==n?",f":n)).type){case"s":var u=Math.max(Math.abs(i),Math.abs(a));return null!=n.precision||isNaN(r=function(e,t){return Math.max(0,3*Math.max(-8,Math.min(8,Math.floor(Be(t)/3)))-Be(Math.abs(e)))}(o,u))||(n.precision=r),We(n,u);case"":case"e":case"g":case"p":case"r":null!=n.precision||isNaN(r=function(e,t){return e=Math.abs(e),t=Math.abs(t)-e,Math.max(0,Be(t)-Be(e))+1}(o,Math.max(Math.abs(i),Math.abs(a))))||(n.precision=r-("e"===n.type));break;case"f":case"%":null!=n.precision||isNaN(r=function(e){return Math.max(0,-Be(Math.abs(e)))}(o))||(n.precision=r-2*("%"===n.type))}return Ue(n)};function linearish(e){var t=e.domain;return e.ticks=function(e){var n=t();return E(n[0],n[n.length-1],null==e?10:e)},e.tickFormat=function(e,n){return Qe(t(),e,n)},e.nice=function(n){null==n&&(n=10);var r,i=t(),a=0,o=i.length-1,u=i[a],c=i[o];return c0?r=tickIncrement(u=Math.floor(u/r)*r,c=Math.ceil(c/r)*r,n):r<0&&(r=tickIncrement(u=Math.ceil(u*r)/r,c=Math.floor(c*r)/r,n)),r>0?(i[a]=Math.floor(u/r)*r,i[o]=Math.ceil(c/r)*r,t(i)):r<0&&(i[a]=Math.ceil(u*r)/r,i[o]=Math.floor(c*r)/r,t(i)),e},e}function linear_linear(){var e=continuous(deinterpolateLinear,ge);return e.copy=function(){return copy(e,linear_linear())},linearish(e)}function identity_identity(){var e=[0,1];function scale(e){return+e}return scale.invert=scale,scale.domain=scale.range=function(t){return arguments.length?(e=j.call(t,De),scale):e.slice()},scale.copy=function(){return identity_identity().domain(e)},linearish(scale)}var Ze=function(e,t){var n,r=0,i=(e=e.slice()).length-1,a=e[r],o=e[i];return o0){for(;hc)break;y.push(f)}}else for(;h=1;--l)if(!((f=s*l)c)break;y.push(f)}}else y=E(h,d,Math.min(d-h,p)).map(i);return a?y.reverse():y},e.tickFormat=function(t,a){if(null==a&&(a=10===n?".0e":","),"function"!=typeof a&&(a=Ue(a)),t===1/0)return a;null==t&&(t=10);var o=Math.max(1,n*t/e.ticks().length);return function(e){var t=e/i(Math.round(r(e)));return t*n0?n[i-1]:e[0],i=n?[r[n-1],t]:[r[o-1],r[o]]},scale.copy=function(){return quantize_quantize().domain([e,t]).range(i)},linearish(scale)}function threshold_threshold(){var e=[.5],t=[0,1],n=1;function scale(r){if(r<=r)return t[x(e,r,0,n)]}return scale.domain=function(r){return arguments.length?(e=I.call(r),n=Math.min(e.length,t.length-1),scale):e.slice()},scale.range=function(r){return arguments.length?(t=I.call(r),n=Math.min(e.length,t.length-1),scale):t.slice()},scale.invertExtent=function(n){var r=t.indexOf(n);return[e[r-1],e[r]]},scale.copy=function(){return threshold_threshold().domain(e).range(t)},scale}var Je=new Date,et=new Date;function newInterval(e,t,n,r){function interval(t){return e(t=new Date(+t)),t}return interval.floor=interval,interval.ceil=function(n){return e(n=new Date(n-1)),t(n,1),e(n),n},interval.round=function(e){var t=interval(e),n=interval.ceil(e);return e-t0))return o;do{o.push(a=new Date(+n)),t(n,i),e(n)}while(a=t)for(;e(t),!n(t);)t.setTime(t-1)},function(e,r){if(e>=e)if(r<0)for(;++r<=0;)for(;t(e,-1),!n(e););else for(;--r>=0;)for(;t(e,1),!n(e););})},n&&(interval.count=function(t,r){return Je.setTime(+t),et.setTime(+r),e(Je),e(et),Math.floor(n(Je,et))},interval.every=function(e){return e=Math.floor(e),isFinite(e)&&e>0?e>1?interval.filter(r?function(t){return r(t)%e==0}:function(t){return interval.count(0,t)%e==0}):interval:null}),interval}var tt=newInterval(function(){},function(e,t){e.setTime(+e+t)},function(e,t){return t-e});tt.every=function(e){return e=Math.floor(e),isFinite(e)&&e>0?e>1?newInterval(function(t){t.setTime(Math.floor(t/e)*e)},function(t,n){t.setTime(+t+n*e)},function(t,n){return(n-t)/e}):tt:null};var nt=tt,rt=(tt.range,6e4),it=6048e5,at=newInterval(function(e){e.setTime(1e3*Math.floor(e/1e3))},function(e,t){e.setTime(+e+1e3*t)},function(e,t){return(t-e)/1e3},function(e){return e.getUTCSeconds()}),ot=at,ut=(at.range,newInterval(function(e){e.setTime(Math.floor(e/rt)*rt)},function(e,t){e.setTime(+e+t*rt)},function(e,t){return(t-e)/rt},function(e){return e.getMinutes()})),ct=ut,st=(ut.range,newInterval(function(e){var t=e.getTimezoneOffset()*rt%36e5;t<0&&(t+=36e5),e.setTime(36e5*Math.floor((+e-t)/36e5)+t)},function(e,t){e.setTime(+e+36e5*t)},function(e,t){return(t-e)/36e5},function(e){return e.getHours()})),lt=st,ft=(st.range,newInterval(function(e){e.setHours(0,0,0,0)},function(e,t){e.setDate(e.getDate()+t)},function(e,t){return(t-e-(t.getTimezoneOffset()-e.getTimezoneOffset())*rt)/864e5},function(e){return e.getDate()-1})),ht=ft;ft.range;function weekday(e){return newInterval(function(t){t.setDate(t.getDate()-(t.getDay()+7-e)%7),t.setHours(0,0,0,0)},function(e,t){e.setDate(e.getDate()+7*t)},function(e,t){return(t-e-(t.getTimezoneOffset()-e.getTimezoneOffset())*rt)/it})}var dt=weekday(0),pt=weekday(1),yt=weekday(2),gt=weekday(3),vt=weekday(4),mt=weekday(5),bt=weekday(6),_t=(dt.range,pt.range,yt.range,gt.range,vt.range,mt.range,bt.range,newInterval(function(e){e.setDate(1),e.setHours(0,0,0,0)},function(e,t){e.setMonth(e.getMonth()+t)},function(e,t){return t.getMonth()-e.getMonth()+12*(t.getFullYear()-e.getFullYear())},function(e){return e.getMonth()})),xt=_t,wt=(_t.range,newInterval(function(e){e.setMonth(0,1),e.setHours(0,0,0,0)},function(e,t){e.setFullYear(e.getFullYear()+t)},function(e,t){return t.getFullYear()-e.getFullYear()},function(e){return e.getFullYear()}));wt.every=function(e){return isFinite(e=Math.floor(e))&&e>0?newInterval(function(t){t.setFullYear(Math.floor(t.getFullYear()/e)*e),t.setMonth(0,1),t.setHours(0,0,0,0)},function(t,n){t.setFullYear(t.getFullYear()+n*e)}):null};var kt=wt,Ct=(wt.range,newInterval(function(e){e.setUTCSeconds(0,0)},function(e,t){e.setTime(+e+t*rt)},function(e,t){return(t-e)/rt},function(e){return e.getUTCMinutes()})),St=(Ct.range,newInterval(function(e){e.setUTCMinutes(0,0,0)},function(e,t){e.setTime(+e+36e5*t)},function(e,t){return(t-e)/36e5},function(e){return e.getUTCHours()})),Pt=(St.range,newInterval(function(e){e.setUTCHours(0,0,0,0)},function(e,t){e.setUTCDate(e.getUTCDate()+t)},function(e,t){return(t-e)/864e5},function(e){return e.getUTCDate()-1})),At=Pt;Pt.range;function utcWeekday(e){return newInterval(function(t){t.setUTCDate(t.getUTCDate()-(t.getUTCDay()+7-e)%7),t.setUTCHours(0,0,0,0)},function(e,t){e.setUTCDate(e.getUTCDate()+7*t)},function(e,t){return(t-e)/it})}var Et=utcWeekday(0),Mt=utcWeekday(1),Ot=utcWeekday(2),Tt=utcWeekday(3),Ft=utcWeekday(4),Nt=utcWeekday(5),jt=utcWeekday(6),It=(Et.range,Mt.range,Ot.range,Tt.range,Ft.range,Nt.range,jt.range,newInterval(function(e){e.setUTCDate(1),e.setUTCHours(0,0,0,0)},function(e,t){e.setUTCMonth(e.getUTCMonth()+t)},function(e,t){return t.getUTCMonth()-e.getUTCMonth()+12*(t.getUTCFullYear()-e.getUTCFullYear())},function(e){return e.getUTCMonth()})),Dt=(It.range,newInterval(function(e){e.setUTCMonth(0,1),e.setUTCHours(0,0,0,0)},function(e,t){e.setUTCFullYear(e.getUTCFullYear()+t)},function(e,t){return t.getUTCFullYear()-e.getUTCFullYear()},function(e){return e.getUTCFullYear()}));Dt.every=function(e){return isFinite(e=Math.floor(e))&&e>0?newInterval(function(t){t.setUTCFullYear(Math.floor(t.getUTCFullYear()/e)*e),t.setUTCMonth(0,1),t.setUTCHours(0,0,0,0)},function(t,n){t.setUTCFullYear(t.getUTCFullYear()+n*e)}):null};var Lt=Dt;Dt.range;function localDate(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 utcDate(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 newYear(e){return{y:e,m:0,d:1,H:0,M:0,S:0,L:0}}var Rt,Bt,zt,Ht,Vt={"-":"",_:" ",0:"0"},Ut=/^\s*\d+/,Wt=/^%/,qt=/[\\^$*+?|[\]().{}]/g;function locale_pad(e,t,n){var r=e<0?"-":"",i=(r?-e:e)+"",a=i.length;return r+(a68?1900:2e3),n+r[0].length):-1}function parseZone(e,t,n){var r=/^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(t.slice(n,n+6));return r?(e.Z=r[1]?0:-(r[2]+(r[3]||"00")),n+r[0].length):-1}function parseMonthNumber(e,t,n){var r=Ut.exec(t.slice(n,n+2));return r?(e.m=r[0]-1,n+r[0].length):-1}function parseDayOfMonth(e,t,n){var r=Ut.exec(t.slice(n,n+2));return r?(e.d=+r[0],n+r[0].length):-1}function parseDayOfYear(e,t,n){var r=Ut.exec(t.slice(n,n+3));return r?(e.m=0,e.d=+r[0],n+r[0].length):-1}function parseHour24(e,t,n){var r=Ut.exec(t.slice(n,n+2));return r?(e.H=+r[0],n+r[0].length):-1}function parseMinutes(e,t,n){var r=Ut.exec(t.slice(n,n+2));return r?(e.M=+r[0],n+r[0].length):-1}function parseSeconds(e,t,n){var r=Ut.exec(t.slice(n,n+2));return r?(e.S=+r[0],n+r[0].length):-1}function parseMilliseconds(e,t,n){var r=Ut.exec(t.slice(n,n+3));return r?(e.L=+r[0],n+r[0].length):-1}function parseMicroseconds(e,t,n){var r=Ut.exec(t.slice(n,n+6));return r?(e.L=Math.floor(r[0]/1e3),n+r[0].length):-1}function parseLiteralPercent(e,t,n){var r=Wt.exec(t.slice(n,n+1));return r?n+r[0].length:-1}function parseUnixTimestamp(e,t,n){var r=Ut.exec(t.slice(n));return r?(e.Q=+r[0],n+r[0].length):-1}function parseUnixTimestampSeconds(e,t,n){var r=Ut.exec(t.slice(n));return r?(e.Q=1e3*+r[0],n+r[0].length):-1}function formatDayOfMonth(e,t){return locale_pad(e.getDate(),t,2)}function formatHour24(e,t){return locale_pad(e.getHours(),t,2)}function formatHour12(e,t){return locale_pad(e.getHours()%12||12,t,2)}function formatDayOfYear(e,t){return locale_pad(1+ht.count(kt(e),e),t,3)}function formatMilliseconds(e,t){return locale_pad(e.getMilliseconds(),t,3)}function formatMicroseconds(e,t){return formatMilliseconds(e,t)+"000"}function formatMonthNumber(e,t){return locale_pad(e.getMonth()+1,t,2)}function formatMinutes(e,t){return locale_pad(e.getMinutes(),t,2)}function formatSeconds(e,t){return locale_pad(e.getSeconds(),t,2)}function formatWeekdayNumberMonday(e){var t=e.getDay();return 0===t?7:t}function formatWeekNumberSunday(e,t){return locale_pad(dt.count(kt(e),e),t,2)}function formatWeekNumberISO(e,t){var n=e.getDay();return e=n>=4||0===n?vt(e):vt.ceil(e),locale_pad(vt.count(kt(e),e)+(4===kt(e).getDay()),t,2)}function formatWeekdayNumberSunday(e){return e.getDay()}function formatWeekNumberMonday(e,t){return locale_pad(pt.count(kt(e),e),t,2)}function locale_formatYear(e,t){return locale_pad(e.getFullYear()%100,t,2)}function formatFullYear(e,t){return locale_pad(e.getFullYear()%1e4,t,4)}function formatZone(e){var t=e.getTimezoneOffset();return(t>0?"-":(t*=-1,"+"))+locale_pad(t/60|0,"0",2)+locale_pad(t%60,"0",2)}function formatUTCDayOfMonth(e,t){return locale_pad(e.getUTCDate(),t,2)}function formatUTCHour24(e,t){return locale_pad(e.getUTCHours(),t,2)}function formatUTCHour12(e,t){return locale_pad(e.getUTCHours()%12||12,t,2)}function formatUTCDayOfYear(e,t){return locale_pad(1+At.count(Lt(e),e),t,3)}function formatUTCMilliseconds(e,t){return locale_pad(e.getUTCMilliseconds(),t,3)}function formatUTCMicroseconds(e,t){return formatUTCMilliseconds(e,t)+"000"}function formatUTCMonthNumber(e,t){return locale_pad(e.getUTCMonth()+1,t,2)}function formatUTCMinutes(e,t){return locale_pad(e.getUTCMinutes(),t,2)}function formatUTCSeconds(e,t){return locale_pad(e.getUTCSeconds(),t,2)}function formatUTCWeekdayNumberMonday(e){var t=e.getUTCDay();return 0===t?7:t}function formatUTCWeekNumberSunday(e,t){return locale_pad(Et.count(Lt(e),e),t,2)}function formatUTCWeekNumberISO(e,t){var n=e.getUTCDay();return e=n>=4||0===n?Ft(e):Ft.ceil(e),locale_pad(Ft.count(Lt(e),e)+(4===Lt(e).getUTCDay()),t,2)}function formatUTCWeekdayNumberSunday(e){return e.getUTCDay()}function formatUTCWeekNumberMonday(e,t){return locale_pad(Mt.count(Lt(e),e),t,2)}function formatUTCYear(e,t){return locale_pad(e.getUTCFullYear()%100,t,2)}function formatUTCFullYear(e,t){return locale_pad(e.getUTCFullYear()%1e4,t,4)}function formatUTCZone(){return"+0000"}function formatLiteralPercent(){return"%"}function formatUnixTimestamp(e){return+e}function formatUnixTimestampSeconds(e){return Math.floor(+e/1e3)}!function defaultLocale_defaultLocale(e){return Rt=function formatLocale(e){var t=e.dateTime,n=e.date,r=e.time,i=e.periods,a=e.days,o=e.shortDays,u=e.months,c=e.shortMonths,s=formatRe(i),l=formatLookup(i),f=formatRe(a),h=formatLookup(a),d=formatRe(o),p=formatLookup(o),y=formatRe(u),g=formatLookup(u),v=formatRe(c),m=formatLookup(c),b={a:function formatShortWeekday(e){return o[e.getDay()]},A:function formatWeekday(e){return a[e.getDay()]},b:function formatShortMonth(e){return c[e.getMonth()]},B:function formatMonth(e){return u[e.getMonth()]},c:null,d:formatDayOfMonth,e:formatDayOfMonth,f:formatMicroseconds,H:formatHour24,I:formatHour12,j:formatDayOfYear,L:formatMilliseconds,m:formatMonthNumber,M:formatMinutes,p:function formatPeriod(e){return i[+(e.getHours()>=12)]},Q:formatUnixTimestamp,s:formatUnixTimestampSeconds,S:formatSeconds,u:formatWeekdayNumberMonday,U:formatWeekNumberSunday,V:formatWeekNumberISO,w:formatWeekdayNumberSunday,W:formatWeekNumberMonday,x:null,X:null,y:locale_formatYear,Y:formatFullYear,Z:formatZone,"%":formatLiteralPercent},_={a:function formatUTCShortWeekday(e){return o[e.getUTCDay()]},A:function formatUTCWeekday(e){return a[e.getUTCDay()]},b:function formatUTCShortMonth(e){return c[e.getUTCMonth()]},B:function formatUTCMonth(e){return u[e.getUTCMonth()]},c:null,d:formatUTCDayOfMonth,e:formatUTCDayOfMonth,f:formatUTCMicroseconds,H:formatUTCHour24,I:formatUTCHour12,j:formatUTCDayOfYear,L:formatUTCMilliseconds,m:formatUTCMonthNumber,M:formatUTCMinutes,p:function formatUTCPeriod(e){return i[+(e.getUTCHours()>=12)]},Q:formatUnixTimestamp,s:formatUnixTimestampSeconds,S:formatUTCSeconds,u:formatUTCWeekdayNumberMonday,U:formatUTCWeekNumberSunday,V:formatUTCWeekNumberISO,w:formatUTCWeekdayNumberSunday,W:formatUTCWeekNumberMonday,x:null,X:null,y:formatUTCYear,Y:formatUTCFullYear,Z:formatUTCZone,"%":formatLiteralPercent},x={a:function parseShortWeekday(e,t,n){var r=d.exec(t.slice(n));return r?(e.w=p[r[0].toLowerCase()],n+r[0].length):-1},A:function parseWeekday(e,t,n){var r=f.exec(t.slice(n));return r?(e.w=h[r[0].toLowerCase()],n+r[0].length):-1},b:function parseShortMonth(e,t,n){var r=v.exec(t.slice(n));return r?(e.m=m[r[0].toLowerCase()],n+r[0].length):-1},B:function parseMonth(e,t,n){var r=y.exec(t.slice(n));return r?(e.m=g[r[0].toLowerCase()],n+r[0].length):-1},c:function parseLocaleDateTime(e,n,r){return parseSpecifier(e,t,n,r)},d:parseDayOfMonth,e:parseDayOfMonth,f:parseMicroseconds,H:parseHour24,I:parseHour24,j:parseDayOfYear,L:parseMilliseconds,m:parseMonthNumber,M:parseMinutes,p:function parsePeriod(e,t,n){var r=s.exec(t.slice(n));return r?(e.p=l[r[0].toLowerCase()],n+r[0].length):-1},Q:parseUnixTimestamp,s:parseUnixTimestampSeconds,S:parseSeconds,u:parseWeekdayNumberMonday,U:parseWeekNumberSunday,V:parseWeekNumberISO,w:parseWeekdayNumberSunday,W:parseWeekNumberMonday,x:function parseLocaleDate(e,t,r){return parseSpecifier(e,n,t,r)},X:function parseLocaleTime(e,t,n){return parseSpecifier(e,r,t,n)},y:parseYear,Y:parseFullYear,Z:parseZone,"%":parseLiteralPercent};function newFormat(e,t){return function(n){var r,i,a,o=[],u=-1,c=0,s=e.length;for(n instanceof Date||(n=new Date(+n));++u53)return null;"w"in a||(a.w=1),"Z"in a?(r=(i=(r=utcDate(newYear(a.y))).getUTCDay())>4||0===i?Mt.ceil(r):Mt(r),r=At.offset(r,7*(a.V-1)),a.y=r.getUTCFullYear(),a.m=r.getUTCMonth(),a.d=r.getUTCDate()+(a.w+6)%7):(r=(i=(r=t(newYear(a.y))).getDay())>4||0===i?pt.ceil(r):pt(r),r=ht.offset(r,7*(a.V-1)),a.y=r.getFullYear(),a.m=r.getMonth(),a.d=r.getDate()+(a.w+6)%7)}else("W"in a||"U"in a)&&("w"in a||(a.w="u"in a?a.u%7:"W"in a?1:0),i="Z"in a?utcDate(newYear(a.y)).getUTCDay():t(newYear(a.y)).getDay(),a.m=0,a.d="W"in a?(a.w+6)%7+7*a.W-(i+5)%7:a.w+7*a.U-(i+6)%7);return"Z"in a?(a.H+=a.Z/100|0,a.M+=a.Z%100,utcDate(a)):t(a)}}function parseSpecifier(e,t,n,r){for(var i,a,o=0,u=t.length,c=n.length;o=c)return-1;if(37===(i=t.charCodeAt(o++))){if(i=t.charAt(o++),!(a=x[i in Vt?t.charAt(o++):i])||(r=a(e,n,r))<0)return-1}else if(i!=n.charCodeAt(r++))return-1}return r}return b.x=newFormat(n,b),b.X=newFormat(r,b),b.c=newFormat(t,b),_.x=newFormat(n,_),_.X=newFormat(r,_),_.c=newFormat(t,_),{format:function format(e){var t=newFormat(e+="",b);return t.toString=function(){return e},t},parse:function parse(e){var t=newParse(e+="",localDate);return t.toString=function(){return e},t},utcFormat:function utcFormat(e){var t=newFormat(e+="",_);return t.toString=function(){return e},t},utcParse:function utcParse(e){var t=newParse(e,utcDate);return t.toString=function(){return e},t}}}(e),Bt=Rt.format,Rt.parse,zt=Rt.utcFormat,Ht=Rt.utcParse,Rt}({dateTime:"%x, %X",date:"%-m/%-d/%Y",time:"%-I:%M:%S %p",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"]});Date.prototype.toISOString||zt("%Y-%m-%dT%H:%M:%S.%LZ");+new Date("2000-01-01T00:00:00.000Z")||Ht("%Y-%m-%dT%H:%M:%S.%LZ");var Gt=1e3,Yt=60*Gt,Xt=60*Yt,Kt=24*Xt,$t=7*Kt,Qt=30*Kt,Zt=365*Kt;function time_date(e){return new Date(e)}function time_number(e){return e instanceof Date?+e:+new Date(+e)}function calendar(e,t,n,r,i,a,o,u,c){var s=continuous(deinterpolateLinear,ge),l=s.invert,f=s.domain,h=c(".%L"),d=c(":%S"),p=c("%I:%M"),y=c("%I %p"),g=c("%a %d"),v=c("%b %d"),b=c("%B"),_=c("%Y"),x=[[o,1,Gt],[o,5,5*Gt],[o,15,15*Gt],[o,30,30*Gt],[a,1,Yt],[a,5,5*Yt],[a,15,15*Yt],[a,30,30*Yt],[i,1,Xt],[i,3,3*Xt],[i,6,6*Xt],[i,12,12*Xt],[r,1,Kt],[r,2,2*Kt],[n,1,$t],[t,1,Qt],[t,3,3*Qt],[e,1,Zt]];function tickFormat(u){return(o(u)1)&&(e-=Math.floor(e));var t=Math.abs(e-.5);return $n.h=360*e-100,$n.s=1.5-1.5*t,$n.l=.8-.9*t,$n+""};color_rgb(),Math.PI,Math.PI;function viridis_ramp(e){var t=e.length;return function(n){return e[Math.max(0,Math.min(t-1,Math.floor(n*t)))]}}var Zn=viridis_ramp(an("44015444025645045745055946075a46085c460a5d460b5e470d60470e6147106347116447136548146748166848176948186a481a6c481b6d481c6e481d6f481f70482071482173482374482475482576482677482878482979472a7a472c7a472d7b472e7c472f7d46307e46327e46337f463480453581453781453882443983443a83443b84433d84433e85423f854240864241864142874144874045884046883f47883f48893e49893e4a893e4c8a3d4d8a3d4e8a3c4f8a3c508b3b518b3b528b3a538b3a548c39558c39568c38588c38598c375a8c375b8d365c8d365d8d355e8d355f8d34608d34618d33628d33638d32648e32658e31668e31678e31688e30698e306a8e2f6b8e2f6c8e2e6d8e2e6e8e2e6f8e2d708e2d718e2c718e2c728e2c738e2b748e2b758e2a768e2a778e2a788e29798e297a8e297b8e287c8e287d8e277e8e277f8e27808e26818e26828e26828e25838e25848e25858e24868e24878e23888e23898e238a8d228b8d228c8d228d8d218e8d218f8d21908d21918c20928c20928c20938c1f948c1f958b1f968b1f978b1f988b1f998a1f9a8a1e9b8a1e9c891e9d891f9e891f9f881fa0881fa1881fa1871fa28720a38620a48621a58521a68522a78522a88423a98324aa8325ab8225ac8226ad8127ad8128ae8029af7f2ab07f2cb17e2db27d2eb37c2fb47c31b57b32b67a34b67935b77937b87838b9773aba763bbb753dbc743fbc7340bd7242be7144bf7046c06f48c16e4ac16d4cc26c4ec36b50c46a52c56954c56856c66758c7655ac8645cc8635ec96260ca6063cb5f65cb5e67cc5c69cd5b6ccd5a6ece5870cf5773d05675d05477d1537ad1517cd2507fd34e81d34d84d44b86d54989d5488bd6468ed64590d74393d74195d84098d83e9bd93c9dd93ba0da39a2da37a5db36a8db34aadc32addc30b0dd2fb2dd2db5de2bb8de29bade28bddf26c0df25c2df23c5e021c8e020cae11fcde11dd0e11cd2e21bd5e21ad8e219dae319dde318dfe318e2e418e5e419e7e419eae51aece51befe51cf1e51df4e61ef6e620f8e621fbe723fde725")),Jn=viridis_ramp(an("00000401000501010601010802010902020b02020d03030f03031204041405041606051806051a07061c08071e0907200a08220b09240c09260d0a290e0b2b100b2d110c2f120d31130d34140e36150e38160f3b180f3d19103f1a10421c10441d11471e114920114b21114e22115024125325125527125829115a2a115c2c115f2d11612f116331116533106734106936106b38106c390f6e3b0f703d0f713f0f72400f74420f75440f764510774710784910784a10794c117a4e117b4f127b51127c52137c54137d56147d57157e59157e5a167e5c167f5d177f5f187f601880621980641a80651a80671b80681c816a1c816b1d816d1d816e1e81701f81721f817320817521817621817822817922827b23827c23827e24828025828125818326818426818627818827818928818b29818c29818e2a81902a81912b81932b80942c80962c80982d80992d809b2e7f9c2e7f9e2f7fa02f7fa1307ea3307ea5317ea6317da8327daa337dab337cad347cae347bb0357bb2357bb3367ab5367ab73779b83779ba3878bc3978bd3977bf3a77c03a76c23b75c43c75c53c74c73d73c83e73ca3e72cc3f71cd4071cf4070d0416fd2426fd3436ed5446dd6456cd8456cd9466bdb476adc4869de4968df4a68e04c67e24d66e34e65e44f64e55064e75263e85362e95462ea5661eb5760ec5860ed5a5fee5b5eef5d5ef05f5ef1605df2625df2645cf3655cf4675cf4695cf56b5cf66c5cf66e5cf7705cf7725cf8745cf8765cf9785df9795df97b5dfa7d5efa7f5efa815ffb835ffb8560fb8761fc8961fc8a62fc8c63fc8e64fc9065fd9266fd9467fd9668fd9869fd9a6afd9b6bfe9d6cfe9f6dfea16efea36ffea571fea772fea973feaa74feac76feae77feb078feb27afeb47bfeb67cfeb77efeb97ffebb81febd82febf84fec185fec287fec488fec68afec88cfeca8dfecc8ffecd90fecf92fed194fed395fed597fed799fed89afdda9cfddc9efddea0fde0a1fde2a3fde3a5fde5a7fde7a9fde9aafdebacfcecaefceeb0fcf0b2fcf2b4fcf4b6fcf6b8fcf7b9fcf9bbfcfbbdfcfdbf")),er=viridis_ramp(an("00000401000501010601010802010a02020c02020e03021004031204031405041706041907051b08051d09061f0a07220b07240c08260d08290e092b10092d110a30120a32140b34150b37160b39180c3c190c3e1b0c411c0c431e0c451f0c48210c4a230c4c240c4f260c51280b53290b552b0b572d0b592f0a5b310a5c320a5e340a5f3609613809623909633b09643d09653e0966400a67420a68440a68450a69470b6a490b6a4a0c6b4c0c6b4d0d6c4f0d6c510e6c520e6d540f6d550f6d57106e59106e5a116e5c126e5d126e5f136e61136e62146e64156e65156e67166e69166e6a176e6c186e6d186e6f196e71196e721a6e741a6e751b6e771c6d781c6d7a1d6d7c1d6d7d1e6d7f1e6c801f6c82206c84206b85216b87216b88226a8a226a8c23698d23698f24699025689225689326679526679727669827669a28659b29649d29649f2a63a02a63a22b62a32c61a52c60a62d60a82e5fa92e5eab2f5ead305dae305cb0315bb1325ab3325ab43359b63458b73557b93556ba3655bc3754bd3853bf3952c03a51c13a50c33b4fc43c4ec63d4dc73e4cc83f4bca404acb4149cc4248ce4347cf4446d04545d24644d34743d44842d54a41d74b3fd84c3ed94d3dda4e3cdb503bdd513ade5238df5337e05536e15635e25734e35933e45a31e55c30e65d2fe75e2ee8602de9612bea632aeb6429eb6628ec6726ed6925ee6a24ef6c23ef6e21f06f20f1711ff1731df2741cf3761bf37819f47918f57b17f57d15f67e14f68013f78212f78410f8850ff8870ef8890cf98b0bf98c0af98e09fa9008fa9207fa9407fb9606fb9706fb9906fb9b06fb9d07fc9f07fca108fca309fca50afca60cfca80dfcaa0ffcac11fcae12fcb014fcb216fcb418fbb61afbb81dfbba1ffbbc21fbbe23fac026fac228fac42afac62df9c72ff9c932f9cb35f8cd37f8cf3af7d13df7d340f6d543f6d746f5d949f5db4cf4dd4ff4df53f4e156f3e35af3e55df2e661f2e865f2ea69f1ec6df1ed71f1ef75f1f179f2f27df2f482f3f586f3f68af4f88ef5f992f6fa96f8fb9af9fc9dfafda1fcffa4")),tr=viridis_ramp(an("0d088710078813078916078a19068c1b068d1d068e20068f2206902406912605912805922a05932c05942e05952f059631059733059735049837049938049a3a049a3c049b3e049c3f049c41049d43039e44039e46039f48039f4903a04b03a14c02a14e02a25002a25102a35302a35502a45601a45801a45901a55b01a55c01a65e01a66001a66100a76300a76400a76600a76700a86900a86a00a86c00a86e00a86f00a87100a87201a87401a87501a87701a87801a87a02a87b02a87d03a87e03a88004a88104a78305a78405a78606a68707a68808a68a09a58b0aa58d0ba58e0ca48f0da4910ea3920fa39410a29511a19613a19814a099159f9a169f9c179e9d189d9e199da01a9ca11b9ba21d9aa31e9aa51f99a62098a72197a82296aa2395ab2494ac2694ad2793ae2892b02991b12a90b22b8fb32c8eb42e8db52f8cb6308bb7318ab83289ba3388bb3488bc3587bd3786be3885bf3984c03a83c13b82c23c81c33d80c43e7fc5407ec6417dc7427cc8437bc9447aca457acb4679cc4778cc4977cd4a76ce4b75cf4c74d04d73d14e72d24f71d35171d45270d5536fd5546ed6556dd7566cd8576bd9586ada5a6ada5b69db5c68dc5d67dd5e66de5f65de6164df6263e06363e16462e26561e26660e3685fe4695ee56a5de56b5de66c5ce76e5be76f5ae87059e97158e97257ea7457eb7556eb7655ec7754ed7953ed7a52ee7b51ef7c51ef7e50f07f4ff0804ef1814df1834cf2844bf3854bf3874af48849f48948f58b47f58c46f68d45f68f44f79044f79143f79342f89441f89540f9973ff9983ef99a3efa9b3dfa9c3cfa9e3bfb9f3afba139fba238fca338fca537fca636fca835fca934fdab33fdac33fdae32fdaf31fdb130fdb22ffdb42ffdb52efeb72dfeb82cfeba2cfebb2bfebd2afebe2afec029fdc229fdc328fdc527fdc627fdc827fdca26fdcb26fccd25fcce25fcd025fcd225fbd324fbd524fbd724fad824fada24f9dc24f9dd25f8df25f8e125f7e225f7e425f6e626f6e826f5e926f5eb27f4ed27f3ee27f3f027f2f227f1f426f1f525f0f724f0f921")),nr={ROW_ID:"__id__"},rr={ACTION_INF:"actionInf",ON_LAYER_DRAW:"onlayerdraw"},ir=n(0),ar=n.n(ir),or=Array.prototype.slice,ur=function(e){return e},cr=1,sr=2,lr=3,fr=4,hr=1e-6;function translateX(e){return"translate("+(e+.5)+",0)"}function translateY(e){return"translate(0,"+(e+.5)+")"}function entering(){return!this.__axis}function axis_axis(e,t){var n=[],r=null,i=null,a=null,o=6,u=6,c=3,s=e===cr||e===fr?-1:1,l=e===fr||e===sr?"x":"y",f=e===cr||e===lr?translateX:translateY;function axis(h){var d=null==r?t.ticks?t.ticks.apply(t,n):t.domain():r,p=null==i?t.tickFormat?t.tickFormat.apply(t,n):ur:i,y=Math.max(o,0)+c,g=t.range(),v=+g[0]+.5,m=+g[g.length-1]+.5,b=(t.bandwidth?function axis_center(e){var t=Math.max(0,e.bandwidth()-1)/2;return e.round()&&(t=Math.round(t)),function(n){return+e(n)+t}}:function axis_number(e){return function(t){return+e(t)}})(t.copy()),_=h.selection?h.selection():h,x=_.selectAll(".domain").data([null]),w=_.selectAll(".tick").data(d,t).order(),k=w.exit(),C=w.enter().append("g").attr("class","tick"),S=w.select("line"),P=w.select("text");x=x.merge(x.enter().insert("path",".tick").attr("class","domain").attr("stroke","#000")),w=w.merge(C),S=S.merge(C.append("line").attr("stroke","#000").attr(l+"2",s*o)),P=P.merge(C.append("text").attr("fill","#000").attr(l,s*y).attr("dy",e===cr?"0em":e===lr?"0.71em":"0.32em")).style("transform",a),h!==_&&(x=x.transition(h),w=w.transition(h),S=S.transition(h),P=P.transition(h),k=k.transition(h).attr("opacity",hr).attr("transform",function(e){return isFinite(e=b(e))?f(e):this.getAttribute("transform")}),C.attr("opacity",hr).attr("transform",function(e){var t=this.parentNode.__axis;return f(t&&isFinite(t=t(e))?t:b(e))})),k.remove(),x.attr("d",e===fr||e==sr?"M"+s*u+","+v+"H0.5V"+m+"H"+s*u:"M"+v+","+s*u+"V0.5H"+m+"V"+s*u),w.attr("opacity",1).attr("transform",function(e){return f(b(e))}),S.attr(l+"2",s*o),P.attr(l,s*y).text(p),_.filter(entering).attr("fill","none").attr("font-size",10).attr("font-family","sans-serif").attr("text-anchor",e===sr?"start":e===fr?"end":"middle"),_.each(function(){this.__axis=b})}return axis.scale=function(e){return arguments.length?(t=e,axis):t},axis.tickTransform=function(e){return arguments.length?(a=e,axis):a},axis.ticks=function(){return n=or.call(arguments),axis},axis.tickArguments=function(e){return arguments.length?(n=null==e?[]:or.call(e),axis):n.slice()},axis.tickValues=function(e){return arguments.length?(r=null==e?null:or.call(e),axis):r&&r.slice()},axis.tickFormat=function(e){return arguments.length?(i=e,axis):i},axis.tickSize=function(e){return arguments.length?(o=u=+e,axis):o},axis.tickSizeInner=function(e){return arguments.length?(o=+e,axis):o},axis.tickSizeOuter=function(e){return arguments.length?(u=+e,axis):u},axis.tickPadding=function(e){return arguments.length?(c=+e,axis):c},axis}var dr=Math.PI,pr=2*dr,yr=pr-1e-6;function Path(){this._x0=this._y0=this._x1=this._y1=null,this._=""}function path_path(){return new Path}Path.prototype=path_path.prototype={constructor:Path,moveTo:function moveTo(e,t){this._+="M"+(this._x0=this._x1=+e)+","+(this._y0=this._y1=+t)},closePath:function closePath(){null!==this._x1&&(this._x1=this._x0,this._y1=this._y0,this._+="Z")},lineTo:function lineTo(e,t){this._+="L"+(this._x1=+e)+","+(this._y1=+t)},quadraticCurveTo:function quadraticCurveTo(e,t,n,r){this._+="Q"+ +e+","+ +t+","+(this._x1=+n)+","+(this._y1=+r)},bezierCurveTo:function bezierCurveTo(e,t,n,r,i,a){this._+="C"+ +e+","+ +t+","+ +n+","+ +r+","+(this._x1=+i)+","+(this._y1=+a)},arcTo:function arcTo(e,t,n,r,i){e=+e,t=+t,n=+n,r=+r,i=+i;var a=this._x1,o=this._y1,u=n-e,c=r-t,s=a-e,l=o-t,f=s*s+l*l;if(i<0)throw new Error("negative radius: "+i);if(null===this._x1)this._+="M"+(this._x1=e)+","+(this._y1=t);else if(f>1e-6)if(Math.abs(l*u-c*s)>1e-6&&i){var h=n-a,d=r-o,p=u*u+c*c,y=h*h+d*d,g=Math.sqrt(p),v=Math.sqrt(f),m=i*Math.tan((dr-Math.acos((p+f-y)/(2*g*v)))/2),b=m/v,_=m/g;Math.abs(b-1)>1e-6&&(this._+="L"+(e+b*s)+","+(t+b*l)),this._+="A"+i+","+i+",0,0,"+ +(l*h>s*d)+","+(this._x1=e+_*u)+","+(this._y1=t+_*c)}else this._+="L"+(this._x1=e)+","+(this._y1=t);else;},arc:function arc(e,t,n,r,i,a){e=+e,t=+t;var o=(n=+n)*Math.cos(r),u=n*Math.sin(r),c=e+o,s=t+u,l=1^a,f=a?r-i:i-r;if(n<0)throw new Error("negative radius: "+n);null===this._x1?this._+="M"+c+","+s:(Math.abs(this._x1-c)>1e-6||Math.abs(this._y1-s)>1e-6)&&(this._+="L"+c+","+s),n&&(f<0&&(f=f%pr+pr),f>yr?this._+="A"+n+","+n+",0,1,"+l+","+(e-o)+","+(t-u)+"A"+n+","+n+",0,1,"+l+","+(this._x1=c)+","+(this._y1=s):f>1e-6&&(this._+="A"+n+","+n+",0,"+ +(f>=dr)+","+l+","+(this._x1=e+n*Math.cos(i))+","+(this._y1=t+n*Math.sin(i))))},rect:function rect(e,t,n,r){this._+="M"+(this._x0=this._x1=+e)+","+(this._y0=this._y1=+t)+"h"+ +n+"v"+ +r+"h"+-n+"Z"},toString:function toString(){return this._}};var gr=path_path,vr=function(e){return function constant(){return e}},mr=Math.abs,br=Math.atan2,_r=Math.cos,xr=Math.max,wr=Math.min,kr=Math.sin,Cr=Math.sqrt,Sr=1e-12,Pr=Math.PI,Ar=Pr/2,Er=2*Pr;function asin(e){return e>=1?Ar:e<=-1?-Ar:Math.asin(e)}function arcInnerRadius(e){return e.innerRadius}function arcOuterRadius(e){return e.outerRadius}function arcStartAngle(e){return e.startAngle}function arcEndAngle(e){return e.endAngle}function arcPadAngle(e){return e&&e.padAngle}function cornerTangents(e,t,n,r,i,a,o){var u=e-n,c=t-r,s=(o?a:-a)/Cr(u*u+c*c),l=s*c,f=-s*u,h=e+l,d=t+f,p=n+l,y=r+f,g=(h+p)/2,v=(d+y)/2,m=p-h,b=y-d,_=m*m+b*b,x=i-a,w=h*y-p*d,k=(b<0?-1:1)*Cr(xr(0,x*x*_-w*w)),C=(w*b-m*k)/_,S=(-w*m-b*k)/_,P=(w*b+m*k)/_,A=(-w*m+b*k)/_,E=C-g,M=S-v,O=P-g,T=A-v;return E*E+M*M>O*O+T*T&&(C=P,S=A),{cx:C,cy:S,x01:-l,y01:-f,x11:C*(i/x-1),y11:S*(i/x-1)}}function Linear(e){this._context=e}Linear.prototype={areaStart:function areaStart(){this._line=0},areaEnd:function areaEnd(){this._line=NaN},lineStart:function lineStart(){this._point=0},lineEnd:function lineEnd(){(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function point(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;default:this._context.lineTo(e,t)}}};var Mr=function(e){return new Linear(e)};function point_x(e){return e[0]}function point_y(e){return e[1]}var Or=function(){var e=point_x,t=point_y,n=vr(!0),r=null,i=Mr,a=null;function line(o){var u,c,s,l=o.length,f=!1;for(null==r&&(a=i(s=gr())),u=0;u<=l;++u)!(u=l;--f)u.point(g[f],v[f]);u.lineEnd(),u.areaEnd()}y&&(g[s]=+e(h,s,c),v[s]=+n(h,s,c),u.point(t?+t(h,s,c):g[s],r?+r(h,s,c):v[s]))}if(d)return u=null,d+""||null}function arealine(){return Or().defined(i).curve(o).context(a)}return area.x=function(n){return arguments.length?(e="function"==typeof n?n:vr(+n),t=null,area):e},area.x0=function(t){return arguments.length?(e="function"==typeof t?t:vr(+t),area):e},area.x1=function(e){return arguments.length?(t=null==e?null:"function"==typeof e?e:vr(+e),area):t},area.y=function(e){return arguments.length?(n="function"==typeof e?e:vr(+e),r=null,area):n},area.y0=function(e){return arguments.length?(n="function"==typeof e?e:vr(+e),area):n},area.y1=function(e){return arguments.length?(r=null==e?null:"function"==typeof e?e:vr(+e),area):r},area.lineX0=area.lineY0=function(){return arealine().x(e).y(n)},area.lineY1=function(){return arealine().x(e).y(r)},area.lineX1=function(){return arealine().x(t).y(n)},area.defined=function(e){return arguments.length?(i="function"==typeof e?e:vr(!!e),area):i},area.curve=function(e){return arguments.length?(o=e,null!=a&&(u=o(a)),area):o},area.context=function(e){return arguments.length?(null==e?a=u=null:u=o(a=e),area):a},area},Fr=function(e,t){return te?1:t>=e?0:NaN},Nr=function(e){return e};curveRadial(Mr);function Radial(e){this._curve=e}function curveRadial(e){function radial(t){return new Radial(e(t))}return radial._curve=e,radial}Radial.prototype={areaStart:function areaStart(){this._curve.areaStart()},areaEnd:function areaEnd(){this._curve.areaEnd()},lineStart:function lineStart(){this._curve.lineStart()},lineEnd:function lineEnd(){this._curve.lineEnd()},point:function point(e,t){this._curve.point(t*Math.sin(e),t*-Math.cos(e))}};var jr=Array.prototype.slice;var Ir={draw:function draw(e,t){var n=Math.sqrt(t/Pr);e.moveTo(n,0),e.arc(0,0,n,0,Er)}},Dr={draw:function draw(e,t){var n=Math.sqrt(t/5)/2;e.moveTo(-3*n,-n),e.lineTo(-n,-n),e.lineTo(-n,-3*n),e.lineTo(n,-3*n),e.lineTo(n,-n),e.lineTo(3*n,-n),e.lineTo(3*n,n),e.lineTo(n,n),e.lineTo(n,3*n),e.lineTo(-n,3*n),e.lineTo(-n,n),e.lineTo(-3*n,n),e.closePath()}},Lr=Math.sqrt(1/3),Rr=2*Lr,Br={draw:function draw(e,t){var n=Math.sqrt(t/Rr),r=n*Lr;e.moveTo(0,-n),e.lineTo(r,0),e.lineTo(0,n),e.lineTo(-r,0),e.closePath()}},zr=Math.sin(Pr/10)/Math.sin(7*Pr/10),Hr=Math.sin(Er/10)*zr,Vr=-Math.cos(Er/10)*zr,Ur={draw:function draw(e,t){var n=Math.sqrt(.8908130915292852*t),r=Hr*n,i=Vr*n;e.moveTo(0,-n),e.lineTo(r,i);for(var a=1;a<5;++a){var o=Er*a/5,u=Math.cos(o),c=Math.sin(o);e.lineTo(c*n,-u*n),e.lineTo(u*r-c*i,c*r+u*i)}e.closePath()}},Wr={draw:function draw(e,t){var n=Math.sqrt(t),r=-n/2;e.rect(r,r,n,n)}},qr=Math.sqrt(3),Gr={draw:function draw(e,t){var n=-Math.sqrt(t/(3*qr));e.moveTo(0,2*n),e.lineTo(-qr*n,-n),e.lineTo(qr*n,-n),e.closePath()}},Yr=Math.sqrt(3)/2,Xr=1/Math.sqrt(12),Kr=3*(Xr/2+1),$r={draw:function draw(e,t){var n=Math.sqrt(t/Kr),r=n/2,i=n*Xr,a=r,o=n*Xr+n,u=-a,c=o;e.moveTo(r,i),e.lineTo(a,o),e.lineTo(u,c),e.lineTo(-.5*r-Yr*i,Yr*r+-.5*i),e.lineTo(-.5*a-Yr*o,Yr*a+-.5*o),e.lineTo(-.5*u-Yr*c,Yr*u+-.5*c),e.lineTo(-.5*r+Yr*i,-.5*i-Yr*r),e.lineTo(-.5*a+Yr*o,-.5*o-Yr*a),e.lineTo(-.5*u+Yr*c,-.5*c-Yr*u),e.closePath()}},Qr=function(){};function _point(e,t,n){e._context.bezierCurveTo((2*e._x0+e._x1)/3,(2*e._y0+e._y1)/3,(e._x0+2*e._x1)/3,(e._y0+2*e._y1)/3,(e._x0+4*e._x1+t)/6,(e._y0+4*e._y1+n)/6)}function Basis(e){this._context=e}Basis.prototype={areaStart:function areaStart(){this._line=0},areaEnd:function areaEnd(){this._line=NaN},lineStart:function lineStart(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function lineEnd(){switch(this._point){case 3:_point(this,this._x1,this._y1);case 2:this._context.lineTo(this._x1,this._y1)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function point(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;break;case 2:this._point=3,this._context.lineTo((5*this._x0+this._x1)/6,(5*this._y0+this._y1)/6);default:_point(this,e,t)}this._x0=this._x1,this._x1=e,this._y0=this._y1,this._y1=t}};function BasisClosed(e){this._context=e}BasisClosed.prototype={areaStart:Qr,areaEnd:Qr,lineStart:function lineStart(){this._x0=this._x1=this._x2=this._x3=this._x4=this._y0=this._y1=this._y2=this._y3=this._y4=NaN,this._point=0},lineEnd:function lineEnd(){switch(this._point){case 1:this._context.moveTo(this._x2,this._y2),this._context.closePath();break;case 2:this._context.moveTo((this._x2+2*this._x3)/3,(this._y2+2*this._y3)/3),this._context.lineTo((this._x3+2*this._x2)/3,(this._y3+2*this._y2)/3),this._context.closePath();break;case 3:this.point(this._x2,this._y2),this.point(this._x3,this._y3),this.point(this._x4,this._y4)}},point:function point(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._x2=e,this._y2=t;break;case 1:this._point=2,this._x3=e,this._y3=t;break;case 2:this._point=3,this._x4=e,this._y4=t,this._context.moveTo((this._x0+4*this._x1+e)/6,(this._y0+4*this._y1+t)/6);break;default:_point(this,e,t)}this._x0=this._x1,this._x1=e,this._y0=this._y1,this._y1=t}};function BasisOpen(e){this._context=e}BasisOpen.prototype={areaStart:function areaStart(){this._line=0},areaEnd:function areaEnd(){this._line=NaN},lineStart:function lineStart(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function lineEnd(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function point(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3;var n=(this._x0+4*this._x1+e)/6,r=(this._y0+4*this._y1+t)/6;this._line?this._context.lineTo(n,r):this._context.moveTo(n,r);break;case 3:this._point=4;default:_point(this,e,t)}this._x0=this._x1,this._x1=e,this._y0=this._y1,this._y1=t}};function Bundle(e,t){this._basis=new Basis(e),this._beta=t}Bundle.prototype={lineStart:function lineStart(){this._x=[],this._y=[],this._basis.lineStart()},lineEnd:function lineEnd(){var e=this._x,t=this._y,n=e.length-1;if(n>0)for(var r,i=e[0],a=t[0],o=e[n]-i,u=t[n]-a,c=-1;++c<=n;)r=c/n,this._basis.point(this._beta*e[c]+(1-this._beta)*(i+r*o),this._beta*t[c]+(1-this._beta)*(a+r*u));this._x=this._y=null,this._basis.lineEnd()},point:function point(e,t){this._x.push(+e),this._y.push(+t)}};(function custom(e){function bundle(t){return 1===e?new Basis(t):new Bundle(t,e)}return bundle.beta=function(e){return custom(+e)},bundle})(.85);function cardinal_point(e,t,n){e._context.bezierCurveTo(e._x1+e._k*(e._x2-e._x0),e._y1+e._k*(e._y2-e._y0),e._x2+e._k*(e._x1-t),e._y2+e._k*(e._y1-n),e._x2,e._y2)}function Cardinal(e,t){this._context=e,this._k=(1-t)/6}Cardinal.prototype={areaStart:function areaStart(){this._line=0},areaEnd:function areaEnd(){this._line=NaN},lineStart:function lineStart(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},lineEnd:function lineEnd(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:cardinal_point(this,this._x1,this._y1)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function point(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2,this._x1=e,this._y1=t;break;case 2:this._point=3;default:cardinal_point(this,e,t)}this._x0=this._x1,this._x1=this._x2,this._x2=e,this._y0=this._y1,this._y1=this._y2,this._y2=t}};(function custom(e){function cardinal(t){return new Cardinal(t,e)}return cardinal.tension=function(e){return custom(+e)},cardinal})(0);function CardinalClosed(e,t){this._context=e,this._k=(1-t)/6}CardinalClosed.prototype={areaStart:Qr,areaEnd:Qr,lineStart:function lineStart(){this._x0=this._x1=this._x2=this._x3=this._x4=this._x5=this._y0=this._y1=this._y2=this._y3=this._y4=this._y5=NaN,this._point=0},lineEnd:function lineEnd(){switch(this._point){case 1:this._context.moveTo(this._x3,this._y3),this._context.closePath();break;case 2:this._context.lineTo(this._x3,this._y3),this._context.closePath();break;case 3:this.point(this._x3,this._y3),this.point(this._x4,this._y4),this.point(this._x5,this._y5)}},point:function point(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._x3=e,this._y3=t;break;case 1:this._point=2,this._context.moveTo(this._x4=e,this._y4=t);break;case 2:this._point=3,this._x5=e,this._y5=t;break;default:cardinal_point(this,e,t)}this._x0=this._x1,this._x1=this._x2,this._x2=e,this._y0=this._y1,this._y1=this._y2,this._y2=t}};(function custom(e){function cardinal(t){return new CardinalClosed(t,e)}return cardinal.tension=function(e){return custom(+e)},cardinal})(0);function CardinalOpen(e,t){this._context=e,this._k=(1-t)/6}CardinalOpen.prototype={areaStart:function areaStart(){this._line=0},areaEnd:function areaEnd(){this._line=NaN},lineStart:function lineStart(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},lineEnd:function lineEnd(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function point(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3,this._line?this._context.lineTo(this._x2,this._y2):this._context.moveTo(this._x2,this._y2);break;case 3:this._point=4;default:cardinal_point(this,e,t)}this._x0=this._x1,this._x1=this._x2,this._x2=e,this._y0=this._y1,this._y1=this._y2,this._y2=t}};(function custom(e){function cardinal(t){return new CardinalOpen(t,e)}return cardinal.tension=function(e){return custom(+e)},cardinal})(0);function catmullRom_point(e,t,n){var r=e._x1,i=e._y1,a=e._x2,o=e._y2;if(e._l01_a>Sr){var u=2*e._l01_2a+3*e._l01_a*e._l12_a+e._l12_2a,c=3*e._l01_a*(e._l01_a+e._l12_a);r=(r*u-e._x0*e._l12_2a+e._x2*e._l01_2a)/c,i=(i*u-e._y0*e._l12_2a+e._y2*e._l01_2a)/c}if(e._l23_a>Sr){var s=2*e._l23_2a+3*e._l23_a*e._l12_a+e._l12_2a,l=3*e._l23_a*(e._l23_a+e._l12_a);a=(a*s+e._x1*e._l23_2a-t*e._l12_2a)/l,o=(o*s+e._y1*e._l23_2a-n*e._l12_2a)/l}e._context.bezierCurveTo(r,i,a,o,e._x2,e._y2)}function CatmullRom(e,t){this._context=e,this._alpha=t}CatmullRom.prototype={areaStart:function areaStart(){this._line=0},areaEnd:function areaEnd(){this._line=NaN},lineStart:function lineStart(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function lineEnd(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:this.point(this._x2,this._y2)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function point(e,t){if(e=+e,t=+t,this._point){var n=this._x2-e,r=this._y2-t;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(n*n+r*r,this._alpha))}switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;break;case 2:this._point=3;default:catmullRom_point(this,e,t)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=e,this._y0=this._y1,this._y1=this._y2,this._y2=t}};var Zr=function custom(e){function catmullRom(t){return e?new CatmullRom(t,e):new Cardinal(t,0)}return catmullRom.alpha=function(e){return custom(+e)},catmullRom}(.5);function CatmullRomClosed(e,t){this._context=e,this._alpha=t}CatmullRomClosed.prototype={areaStart:Qr,areaEnd:Qr,lineStart:function lineStart(){this._x0=this._x1=this._x2=this._x3=this._x4=this._x5=this._y0=this._y1=this._y2=this._y3=this._y4=this._y5=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function lineEnd(){switch(this._point){case 1:this._context.moveTo(this._x3,this._y3),this._context.closePath();break;case 2:this._context.lineTo(this._x3,this._y3),this._context.closePath();break;case 3:this.point(this._x3,this._y3),this.point(this._x4,this._y4),this.point(this._x5,this._y5)}},point:function point(e,t){if(e=+e,t=+t,this._point){var n=this._x2-e,r=this._y2-t;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(n*n+r*r,this._alpha))}switch(this._point){case 0:this._point=1,this._x3=e,this._y3=t;break;case 1:this._point=2,this._context.moveTo(this._x4=e,this._y4=t);break;case 2:this._point=3,this._x5=e,this._y5=t;break;default:catmullRom_point(this,e,t)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=e,this._y0=this._y1,this._y1=this._y2,this._y2=t}};(function custom(e){function catmullRom(t){return e?new CatmullRomClosed(t,e):new CardinalClosed(t,0)}return catmullRom.alpha=function(e){return custom(+e)},catmullRom})(.5);function CatmullRomOpen(e,t){this._context=e,this._alpha=t}CatmullRomOpen.prototype={areaStart:function areaStart(){this._line=0},areaEnd:function areaEnd(){this._line=NaN},lineStart:function lineStart(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function lineEnd(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function point(e,t){if(e=+e,t=+t,this._point){var n=this._x2-e,r=this._y2-t;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(n*n+r*r,this._alpha))}switch(this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3,this._line?this._context.lineTo(this._x2,this._y2):this._context.moveTo(this._x2,this._y2);break;case 3:this._point=4;default:catmullRom_point(this,e,t)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=e,this._y0=this._y1,this._y1=this._y2,this._y2=t}};(function custom(e){function catmullRom(t){return e?new CatmullRomOpen(t,e):new CardinalOpen(t,0)}return catmullRom.alpha=function(e){return custom(+e)},catmullRom})(.5);function LinearClosed(e){this._context=e}LinearClosed.prototype={areaStart:Qr,areaEnd:Qr,lineStart:function lineStart(){this._point=0},lineEnd:function lineEnd(){this._point&&this._context.closePath()},point:function point(e,t){e=+e,t=+t,this._point?this._context.lineTo(e,t):(this._point=1,this._context.moveTo(e,t))}};function monotone_sign(e){return e<0?-1:1}function slope3(e,t,n){var r=e._x1-e._x0,i=t-e._x1,a=(e._y1-e._y0)/(r||i<0&&-0),o=(n-e._y1)/(i||r<0&&-0),u=(a*i+o*r)/(r+i);return(monotone_sign(a)+monotone_sign(o))*Math.min(Math.abs(a),Math.abs(o),.5*Math.abs(u))||0}function slope2(e,t){var n=e._x1-e._x0;return n?(3*(e._y1-e._y0)/n-t)/2:t}function monotone_point(e,t,n){var r=e._x0,i=e._y0,a=e._x1,o=e._y1,u=(a-r)/3;e._context.bezierCurveTo(r+u,i+u*t,a-u,o-u*n,a,o)}function MonotoneX(e){this._context=e}function MonotoneY(e){this._context=new ReflectContext(e)}function ReflectContext(e){this._context=e}function Natural(e){this._context=e}function controlPoints(e){var t,n,r=e.length-1,i=new Array(r),a=new Array(r),o=new Array(r);for(i[0]=0,a[0]=2,o[0]=e[0]+2*e[1],t=1;t=0;--t)i[t]=(o[t]-i[t+1])/a[t];for(a[r-1]=(e[r]+i[r-1])/2,t=0;t=0&&(this._t=1-this._t,this._line=1-this._line)},point:function point(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;default:if(this._t<=0)this._context.lineTo(this._x,t),this._context.lineTo(e,t);else{var n=this._x*(1-this._t)+e*this._t;this._context.lineTo(n,this._y),this._context.lineTo(n,t)}}this._x=e,this._y=t}};var Jr=function(e){return new Step(e,.5)};function stepBefore(e){return new Step(e,0)}function stepAfter(e){return new Step(e,1)}var ei=function(e,t){if((i=e.length)>1)for(var n,r,i,a=1,o=e[t[0]],u=o.length;a=0;)n[t]=t;return n};function stackValue(e,t){return e[t]}var ni=function(e){var t=e.map(ascending_sum);return ti(e).sort(function(e,n){return t[e]-t[n]})};function ascending_sum(e){for(var t,n=0,r=-1,i=e.length;++r0)){if(a/=h,h<0){if(a0){if(a>f)return;a>l&&(l=a)}if(a=r-c,h||!(a<0)){if(a/=h,h<0){if(a>f)return;a>l&&(l=a)}else if(h>0){if(a0)){if(a/=d,d<0){if(a0){if(a>f)return;a>l&&(l=a)}if(a=i-s,d||!(a<0)){if(a/=d,d<0){if(a>f)return;a>l&&(l=a)}else if(d>0){if(a0||f<1)||(l>0&&(e[0]=[c+l*h,s+l*d]),f<1&&(e[1]=[c+f*h,s+f*d]),!0)}}}}}function connectEdge(e,t,n,r,i){var a=e[1];if(a)return!0;var o,u,c=e[0],s=e.left,l=e.right,f=s[0],h=s[1],d=l[0],p=l[1],y=(f+d)/2,g=(h+p)/2;if(p===h){if(y=r)return;if(f>d){if(c){if(c[1]>=i)return}else c=[y,n];a=[y,i]}else{if(c){if(c[1]1)if(f>d){if(c){if(c[1]>=i)return}else c=[(n-u)/o,n];a=[(i-u)/o,i]}else{if(c){if(c[1]=r)return}else c=[t,o*t+u];a=[r,o*r+u]}else{if(c){if(c[0]=-Ai)){var d=c*c+s*s,p=l*l+f*f,y=(f*d-s*p)/h,g=(c*p-l*d)/h,v=_i.pop()||new function Circle(){RedBlackNode(this),this.x=this.y=this.arc=this.site=this.cy=null};v.arc=e,v.site=i,v.x=y+o,v.y=(v.cy=g+u)+Math.sqrt(y*y+g*g),e.circle=v;for(var m=null,b=Ci._;b;)if(v.yPi)u=u.L;else{if(!((i=a-rightBreakPoint(u,o))>Pi)){r>-Pi?(t=u.P,n=u):i>-Pi?(t=u,n=u.N):t=n=u;break}if(!u.R){t=u;break}u=u.R}!function createCell(e){return ki[e.index]={site:e,halfedges:[]}}(e);var c=createBeach(e);if(wi.insert(t,c),t||n){if(t===n)return detachCircle(t),n=createBeach(t.site),wi.insert(c,n),c.edge=n.edge=createEdge(t.site,c.site),attachCircle(t),void attachCircle(n);if(n){detachCircle(t),detachCircle(n);var s=t.site,l=s[0],f=s[1],h=e[0]-l,d=e[1]-f,p=n.site,y=p[0]-l,g=p[1]-f,v=2*(h*g-d*y),m=h*h+d*d,b=y*y+g*g,_=[(g*m-d*b)/v+l,(h*b-y*m)/v+f];setEdgeEnd(n.edge,s,p,_),c.edge=createEdge(s,e,null,_),n.edge=createEdge(e,p,null,_),attachCircle(t),attachCircle(n)}else c.edge=createEdge(t.site,c.site)}}function leftBreakPoint(e,t){var n=e.site,r=n[0],i=n[1],a=i-t;if(!a)return r;var o=e.P;if(!o)return-1/0;var u=(n=o.site)[0],c=n[1],s=c-t;if(!s)return u;var l=u-r,f=1/a-1/s,h=l/s;return f?(-h+Math.sqrt(h*h-2*f*(l*l/(-2*s)-c+s/2+i-a/2)))/f+r:(r+u)/2}function rightBreakPoint(e,t){var n=e.N;if(n)return leftBreakPoint(n,t);var r=e.site;return r[1]===t?r[0]:1/0}var wi,ki,Ci,Si,Pi=1e-6,Ai=1e-12;function triangleArea(e,t,n){return(e[0]-n[0])*(t[1]-e[1])-(e[0]-t[0])*(n[1]-e[1])}function lexicographic(e,t){return t[1]-e[1]||t[0]-e[0]}function Diagram(e,t){var n,r,i,a=e.sort(lexicographic).pop();for(Si=[],ki=new Array(e.length),wi=new mi,Ci=new mi;;)if(i=bi,a&&(!i||a[1]Pi||Math.abs(i[0][1]-i[1][1])>Pi)||delete Si[a]}(o,u,c,s),function clipCells(e,t,n,r){var i,a,o,u,c,s,l,f,h,d,p,y,g=ki.length,v=!0;for(i=0;iPi||Math.abs(y-h)>Pi)&&(c.splice(u,0,Si.push(createBorderEdge(o,d,Math.abs(p-e)Pi?[e,Math.abs(f-e)Pi?[Math.abs(h-r)Pi?[n,Math.abs(f-n)Pi?[Math.abs(h-t)=u)return null;var c=e-i.site[0],s=t-i.site[1],l=c*c+s*s;do{i=a.cells[r=o],o=null,i.halfedges.forEach(function(n){var r=a.edges[n],u=r.left;if(u!==i.site&&u||(u=r.right)){var c=e-u[0],s=t-u[1],f=c*c+s*s;ft?0===i?i:"left"===n?i-1:i:i===e.length-1?i:"left"===n?i:i+1},Gi=(requestAnimationFrame,cancelAnimationFrame,function getQualifiedClassName(e,t,n){return[n+"-"+(e=e.replace(/^\.*/,"")),n+"-"+e+"-"+t]}),Yi=function defaultValue(e,t){return void 0===e||"object"===(void 0===e?"undefined":Ii(e))&&!e?t:e},Xi=function objectIterator(e,t){for(var n in e)Object.hasOwnProperty.call(e,n)&&t(n,e)},Ki=function(){function Voronoi(e){_classCallCheck(this,Voronoi),this._voronoi=Oi().x(function(e){return e.x}).y(function(e){return e.y}),this.data(e)}return ji(Voronoi,[{key:"data",value:function data(e){return e&&(this._voronoiFn=this._voronoi(e)),this}},{key:"find",value:function find(e,t,n){return this._voronoiFn.find(e,t,n)}}]),Voronoi}(),$i=function(){function Store(e){_classCallCheck(this,Store),this.model=Fi.a.create(e),this._listeners=[]}return ji(Store,[{key:"serialize",value:function serialize(){return this.model.serialize()}},{key:"commit",value:function commit(e,t){this.model.prop(e,t)}},{key:"registerChangeListener",value:function registerChangeListener(e,t,n){var r=e;Array.isArray(e)||(r=[e]);var i=this.model.next(r,t,n);return this._listeners.push(i),this}},{key:"registerImmediateListener",value:function registerImmediateListener(e,t,n){var r=e;Array.isArray(e)||(r=[e]);var i=this.model.on(r,t,n);return this._listeners.push(i),this}},{key:"get",value:function get(e){return this.model.prop(e)}},{key:"computed",value:function computed(e,t){return this.model.calculatedProp(e,t)}},{key:"unsubscribeAll",value:function unsubscribeAll(){this._listeners.forEach(function(e){return e()})}}]),Store}(),Qi=function intSanitizer(e){var t=e.toString().match(/(\d+)(px)*/g);return t?parseInt(t[0],10):null},Zi=function transactor(e,t,n){var r=void 0,i=n&&n instanceof Fi.a?n:Fi.a.create({}),a=function _loop(n){({}).hasOwnProperty.call(t,n)&&(r=t[n],i.prop(n)||i.append(_defineProperty({},n,r.value)),e[n]=function(t,r,a){return function(){for(var o=arguments.length,u=Array(o),c=0;c=0;n--)if(e[n]!==t[n])return!1;return!0}(t,n):"Object"===e?Object.is(t,n):t===n}},ta={INTERFACE_IMPL:"Method not implemented"},na=function mergeRecursive(e,t){for(var n in t)Di(e[n])&&Di(t[n])?mergeRecursive(e[n],t[n]):t[n]instanceof Object&&t[n].constructor===Object?(e[n]={},mergeRecursive(e[n],t[n])):e[n]=t[n];return e},ra=function interpolator(){return Pe},ia=function numberInterpolator(){return ge},aa=function piecewiseInterpolator(){return piecewise_piecewise};var oa=function rgbToHsv(e,t,n){var r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:1;e=+e,t=+t,n=+n,r=+r,e/=255,t/=255,n/=255;var i=Math.max(e,t,n),a=Math.min(e,t,n),o=void 0,u=void 0,c=(i+a)/2;if(i===a)o=u=0;else{var s=i-a;switch(u=c>.5?s/(2-i-a):s/(i+a),i){case e:o=(t-n)/s+(t=i[0]&&r<=i[1]})},{saveChild:!1,mode:n})},sa=function getDataModelFromIdentifiers(e,t,n){var r=void 0;if(t instanceof Array){var i=e.getFieldsConfig(),a=t.slice(1,t.length);if(t instanceof Function)r=t(e,{},!1);else if(t instanceof Array&&t[0].length){var o=t[0].filter(function(e){return e in i});r=e.select(function(e){var t=!0;return o.forEach(function(n,r){var i=e[n].valueOf(),o=a.findIndex(function(e){return e[r]===i});t=t&&-1!==o}),t},{saveChild:!1,mode:n})}}else r=ca(e,t,n);return r},la=function registerListeners(e,t){var n=t(e);for(var r in n)if({}.hasOwnProperty.call(n,r)){var i=n[r],a=i.type,o=i.props,u=i.listener;e.store()[a](o,u)}},fa=function isValidValue(e){return!isNaN(e)&&e!==-1/0&&e!==1/0},ha=function getObjProp(e){for(var t=arguments.length,n=Array(t>1?t-1:0),r=1;r1)for(var n,r,i,a,o,u,c=0,s=e[t[0]].length;c=0?(r[0]=a,r[1]=a+=i):i<0?(r[1]=o,r[0]=o+=i):r[0]=a}),_defineProperty(Mi,"none",ei),_defineProperty(Mi,"expand",function(e,t){if((r=e.length)>0){for(var n,r,i,a=0,o=e[0].length;a0&&(r=(n=e[t[0]]).length)>0){for(var n,r,i,a=0,o=1;o0&&(d+=f);for(null!=t?p.sort(function(e,n){return t(y[e],y[n])}):null!=n&&p.sort(function(e,t){return n(o[e],o[t])}),u=0,s=d?(v-h*b)/d:0;u0?f*s:0)+b,y[c]={data:o[c],index:u,value:f,startAngle:g,endAngle:l,padAngle:m};return y}return pie.value=function(t){return arguments.length?(e="function"==typeof t?t:vr(+t),pie):e},pie.sortValues=function(e){return arguments.length?(t=e,n=null,pie):t},pie.sort=function(e){return arguments.length?(n=e,t=null,pie):n},pie.startAngle=function(e){return arguments.length?(r="function"==typeof e?e:vr(+e),pie):r},pie.endAngle=function(e){return arguments.length?(i="function"==typeof e?e:vr(+e),pie):i},pie.padAngle=function(e){return arguments.length?(a="function"==typeof e?e:vr(+e),pie):a},pie},arc:function(){var e=arcInnerRadius,t=arcOuterRadius,n=vr(0),r=null,i=arcStartAngle,a=arcEndAngle,o=arcPadAngle,u=null;function arc(){var c,s,l=+e.apply(this,arguments),f=+t.apply(this,arguments),h=i.apply(this,arguments)-Ar,d=a.apply(this,arguments)-Ar,p=mr(d-h),y=d>h;if(u||(u=c=gr()),fSr)if(p>Er-Sr)u.moveTo(f*_r(h),f*kr(h)),u.arc(0,0,f,h,d,!y),l>Sr&&(u.moveTo(l*_r(d),l*kr(d)),u.arc(0,0,l,d,h,y));else{var g,v,m=h,b=d,_=h,x=d,w=p,k=p,C=o.apply(this,arguments)/2,S=C>Sr&&(r?+r.apply(this,arguments):Cr(l*l+f*f)),P=wr(mr(f-l)/2,+n.apply(this,arguments)),A=P,E=P;if(S>Sr){var M=asin(S/l*kr(C)),O=asin(S/f*kr(C));(w-=2*M)>Sr?(_+=M*=y?1:-1,x-=M):(w=0,_=x=(h+d)/2),(k-=2*O)>Sr?(m+=O*=y?1:-1,b-=O):(k=0,m=b=(h+d)/2)}var T=f*_r(m),F=f*kr(m),N=l*_r(x),j=l*kr(x);if(P>Sr){var I=f*_r(b),D=f*kr(b),L=l*_r(_),R=l*kr(_);if(pSr?function intersect(e,t,n,r,i,a,o,u){var c=n-e,s=r-t,l=o-i,f=u-a,h=(l*(t-a)-f*(e-i))/(f*c-l*s);return[e+h*c,t+h*s]}(T,F,L,R,I,D,N,j):[N,j],z=T-B[0],H=F-B[1],V=I-B[0],U=D-B[1],W=1/kr(function acos(e){return e>1?0:e<-1?Pr:Math.acos(e)}((z*V+H*U)/(Cr(z*z+H*H)*Cr(V*V+U*U)))/2),q=Cr(B[0]*B[0]+B[1]*B[1]);A=wr(P,(l-q)/(W-1)),E=wr(P,(f-q)/(W+1))}}k>Sr?E>Sr?(g=cornerTangents(L,R,T,F,f,E,y),v=cornerTangents(I,D,N,j,f,E,y),u.moveTo(g.cx+g.x01,g.cy+g.y01),ESr&&w>Sr?A>Sr?(g=cornerTangents(N,j,I,D,l,-A,y),v=cornerTangents(T,F,L,R,l,-A,y),u.lineTo(g.cx+g.x01,g.cy+g.y01),A=0&&"xmlns"!==(t=e.slice(0,n))&&(e=e.slice(n+1)),ka.hasOwnProperty(t)?{space:ka[t],local:e}:e};var Sa=function(e){var t=Ca(e);return(t.local?function creatorFixed(e){return function(){return this.ownerDocument.createElementNS(e.space,e.local)}}:function creatorInherit(e){return function(){var t=this.ownerDocument,n=this.namespaceURI;return n===wa&&t.documentElement.namespaceURI===wa?t.createElement(e):t.createElementNS(n,e)}})(t)};function selector_none(){}var Pa=function(e){return null==e?selector_none:function(){return this.querySelector(e)}};function selectorAll_empty(){return[]}var Aa=function(e){return null==e?selectorAll_empty:function(){return this.querySelectorAll(e)}},Ea=function matcher(e){return function(){return this.matches(e)}};if("undefined"!=typeof document){var Ma=document.documentElement;if(!Ma.matches){var Oa=Ma.webkitMatchesSelector||Ma.msMatchesSelector||Ma.mozMatchesSelector||Ma.oMatchesSelector;Ea=function matcher(e){return function(){return Oa.call(this,e)}}}}var Ta=Ea,Fa=function(e){return new Array(e.length)};function EnterNode(e,t){this.ownerDocument=e.ownerDocument,this.namespaceURI=e.namespaceURI,this._next=null,this._parent=e,this.__data__=t}EnterNode.prototype={constructor:EnterNode,appendChild:function appendChild(e){return this._parent.insertBefore(e,this._next)},insertBefore:function insertBefore(e,t){return this._parent.insertBefore(e,t)},querySelector:function querySelector(e){return this._parent.querySelector(e)},querySelectorAll:function querySelectorAll(e){return this._parent.querySelectorAll(e)}};var Na="$";function bindIndex(e,t,n,r,i,a){for(var o,u=0,c=t.length,s=a.length;ut?1:e>=t?0:NaN}var ja=function(e){return e.ownerDocument&&e.ownerDocument.defaultView||e.document&&e||e.defaultView};function styleValue(e,t){return e.style.getPropertyValue(t)||ja(e).getComputedStyle(e,null).getPropertyValue(t)}function classArray(e){return e.trim().split(/^|\s+/)}function classList(e){return e.classList||new ClassList(e)}function ClassList(e){this._node=e,this._names=classArray(e.getAttribute("class")||"")}function classedAdd(e,t){for(var n=classList(e),r=-1,i=t.length;++r=0&&(this._names.splice(t,1),this._node.setAttribute("class",this._names.join(" ")))},contains:function contains(e){return this._names.indexOf(e)>=0}};function textRemove(){this.textContent=""}function htmlRemove(){this.innerHTML=""}function raise_raise(){this.nextSibling&&this.parentNode.appendChild(this)}function lower(){this.previousSibling&&this.parentNode.insertBefore(this,this.parentNode.firstChild)}function constantNull(){return null}function remove_remove(){var e=this.parentNode;e&&e.removeChild(this)}function selection_cloneShallow(){return this.parentNode.insertBefore(this.cloneNode(!1),this.nextSibling)}function selection_cloneDeep(){return this.parentNode.insertBefore(this.cloneNode(!0),this.nextSibling)}var Ia={},Da=null;"undefined"!=typeof document&&("onmouseenter"in document.documentElement||(Ia={mouseenter:"mouseover",mouseleave:"mouseout"}));function filterContextListener(e,t,n){return e=contextListener(e,t,n),function(t){var n=t.relatedTarget;n&&(n===this||8&n.compareDocumentPosition(this))||e.call(this,t)}}function contextListener(e,t,n){return function(r){var i=Da;Da=r;try{e.call(this,this.__data__,t,n)}finally{Da=i}}}function onRemove(e){return function(){var t=this.__on;if(t){for(var n,r=0,i=-1,a=t.length;r=_&&(_=b+1);!(m=g[_])&&++_=0;)(r=i[a])&&(o&&o!==r.nextSibling&&o.parentNode.insertBefore(r,o),o=r);return this},sort:function(e){function compareNode(t,n){return t&&n?e(t.__data__,n.__data__):!t-!n}e||(e=sort_ascending);for(var t=this._groups,n=t.length,r=new Array(n),i=0;i1?this.each((null==t?function styleRemove(e){return function(){this.style.removeProperty(e)}}:"function"==typeof t?function styleFunction(e,t,n){return function(){var r=t.apply(this,arguments);null==r?this.style.removeProperty(e):this.style.setProperty(e,r,n)}}:function styleConstant(e,t,n){return function(){this.style.setProperty(e,t,n)}})(e,t,null==n?"":n)):styleValue(this.node(),e)},property:function(e,t){return arguments.length>1?this.each((null==t?function propertyRemove(e){return function(){delete this[e]}}:"function"==typeof t?function propertyFunction(e,t){return function(){var n=t.apply(this,arguments);null==n?delete this[e]:this[e]=n}}:function propertyConstant(e,t){return function(){this[e]=t}})(e,t)):this.node()[e]},classed:function(e,t){var n=classArray(e+"");if(arguments.length<2){for(var r=classList(this.node()),i=-1,a=n.length;++i=0&&(t=e.slice(n+1),e=e.slice(0,n)),{type:e,name:t}})}(e+""),o=a.length;if(!(arguments.length<2)){for(u=t?onAdd:onRemove,null==n&&(n=!1),r=0;r=0&&(n=e.slice(r+1),e=e.slice(0,r)),e&&!t.hasOwnProperty(e))throw new Error("unknown type: "+e);return{type:e,name:n}})}(e+"",r),a=-1,o=i.length;if(!(arguments.length<2)){if(null!=t&&"function"!=typeof t)throw new Error("invalid callback: "+t);for(;++a0)for(var n,r,i=new Array(n),a=0;af}c.mouse("drag")}function mouseupped(){Ba(Da.view).on("mousemove.drag mouseup.drag",null),function yesdrag(e,t){var n=e.document.documentElement,r=Ba(e).on("dragstart.drag",null);t&&(r.on("click.drag",Ya,!0),setTimeout(function(){r.on("click.drag",null)},0)),"onselectstart"in n?r.on("selectstart.drag",null):(n.style.MozUserSelect=n.__noselect,delete n.__noselect)}(Da.view,n),Ya(),c.mouse("end")}function touchstarted(){if(i.apply(this,arguments)){var e,t,n=Da.changedTouches,r=a.apply(this,arguments),o=n.length;for(e=0;e=0&&t._call.call(null,e),t=t._next;--eo}()}finally{eo=0,function nap(){var e,t,n=$a,r=1/0;for(;n;)n._call?(r>n._time&&(r=n._time),e=n,n=n._next):(t=n._next,n._next=null,n=e?e._next=t:$a=t);Qa=e,sleep(r)}(),ao=0}}function poke(){var e=uo.now(),t=e-io;t>ro&&(oo-=t,io=e)}function sleep(e){eo||(to&&(to=clearTimeout(to)),e-ao>24?(e<1/0&&(to=setTimeout(wake,e-uo.now()-oo)),no&&(no=clearInterval(no))):(no||(io=uo.now(),no=setInterval(poke,ro)),eo=1,co(wake)))}Timer.prototype=timer.prototype={constructor:Timer,restart:function restart(e,t,n){if("function"!=typeof e)throw new TypeError("callback is not a function");n=(null==n?now():+n)+(null==t?0:+t),this._next||Qa===this||(Qa?Qa._next=this:$a=this,Qa=this),this._call=e,this._time=n,sleep()},stop:function stop(){this._call&&(this._call=null,this._time=1/0,sleep())}};var so=function(e,t,n){var r=new Timer;return t=null==t?0:+t,r.restart(function(n){r.stop(),e(n+t)},t,n),r},lo=Ga("start","end","interrupt"),fo=[],ho=0,po=1,yo=2,go=3,vo=4,mo=5,bo=6,_o=function(e,t,n,r,i,a){var o=e.__transition;if(o){if(n in o)return}else e.__transition={};!function schedule_create(e,t,n){var r,i=e.__transition;function start(a){var o,u,c,s;if(n.state!==po)return stop();for(o in i)if((s=i[o]).name===n.name){if(s.state===go)return so(start);s.state===vo?(s.state=bo,s.timer.stop(),s.on.call("interrupt",e,e.__data__,s.index,s.group),delete i[o]):+oho)throw new Error("too late; already scheduled");return n}function schedule_set(e,t){var n=schedule_get(e,t);if(n.state>yo)throw new Error("too late; already started");return n}function schedule_get(e,t){var n=e.__transition;if(!n||!(n=n[t]))throw new Error("transition not found");return n}function tweenValue(e,t,n){var r=e._id;return e.each(function(){var e=schedule_set(this,r);(e.value||(e.value={}))[t]=n.apply(this,arguments)}),function(e){return schedule_get(e,r).value[t]}}var xo=function(e,t){var n;return("number"==typeof t?ge:t instanceof color_color?pe:(n=color_color(t))?(t=n,pe):Ce)(e,t)};var wo=Ra.prototype.constructor;var ko=0;function Transition(e,t,n,r){this._groups=e,this._parents=t,this._name=n,this._id=r}function newId(){return++ko}var Co=Ra.prototype;Transition.prototype=function src_transition_transition(e){return Ra().transition(e)}.prototype={constructor:Transition,select:function(e){var t=this._name,n=this._id;"function"!=typeof e&&(e=Pa(e));for(var r=this._groups,i=r.length,a=new Array(i),o=0;o=0&&(e=e.slice(0,t)),!e||"start"===e})}(t)?init:schedule_set;return function(){var o=a(this,e),u=o.on;u!==r&&(i=(r=u).copy()).on(t,n),o.on=i}}(n,e,t))},attr:function(e,t){var n=Ca(e),r="transform"===n?Fe:xo;return this.attrTween(e,"function"==typeof t?(n.local?function attr_attrFunctionNS(e,t,n){var r,i,a;return function(){var o,u=n(this);if(null!=u)return(o=this.getAttributeNS(e.space,e.local))===u?null:o===r&&u===i?a:a=t(r=o,i=u);this.removeAttributeNS(e.space,e.local)}}:function attr_attrFunction(e,t,n){var r,i,a;return function(){var o,u=n(this);if(null!=u)return(o=this.getAttribute(e))===u?null:o===r&&u===i?a:a=t(r=o,i=u);this.removeAttribute(e)}})(n,r,tweenValue(this,"attr."+e,t)):null==t?(n.local?function attr_attrRemoveNS(e){return function(){this.removeAttributeNS(e.space,e.local)}}:function attr_attrRemove(e){return function(){this.removeAttribute(e)}})(n):(n.local?function attr_attrConstantNS(e,t,n){var r,i;return function(){var a=this.getAttributeNS(e.space,e.local);return a===n?null:a===r?i:i=t(r=a,n)}}:function attr_attrConstant(e,t,n){var r,i;return function(){var a=this.getAttribute(e);return a===n?null:a===r?i:i=t(r=a,n)}})(n,r,t+""))},attrTween:function(e,t){var n="attr."+e;if(arguments.length<2)return(n=this.tween(n))&&n._value;if(null==t)return this.tween(n,null);if("function"!=typeof t)throw new Error;var r=Ca(e);return this.tween(n,(r.local?function attrTweenNS(e,t){function tween(){var n=this,r=t.apply(n,arguments);return r&&function(t){n.setAttributeNS(e.space,e.local,r(t))}}return tween._value=t,tween}:function attrTween(e,t){function tween(){var n=this,r=t.apply(n,arguments);return r&&function(t){n.setAttribute(e,r(t))}}return tween._value=t,tween})(r,t))},style:function(e,t,n){var r="transform"==(e+="")?Te:xo;return null==t?this.styleTween(e,function style_styleRemove(e,t){var n,r,i;return function(){var a=styleValue(this,e),o=(this.style.removeProperty(e),styleValue(this,e));return a===o?null:a===n&&o===r?i:i=t(n=a,r=o)}}(e,r)).on("end.style."+e,function styleRemoveEnd(e){return function(){this.style.removeProperty(e)}}(e)):this.styleTween(e,"function"==typeof t?function style_styleFunction(e,t,n){var r,i,a;return function(){var o=styleValue(this,e),u=n(this);return null==u&&(this.style.removeProperty(e),u=styleValue(this,e)),o===u?null:o===r&&u===i?a:a=t(r=o,i=u)}}(e,r,tweenValue(this,"style."+e,t)):function style_styleConstant(e,t,n){var r,i;return function(){var a=styleValue(this,e);return a===n?null:a===r?i:i=t(r=a,n)}}(e,r,t+""),n)},styleTween:function(e,t,n){var r="style."+(e+="");if(arguments.length<2)return(r=this.tween(r))&&r._value;if(null==t)return this.tween(r,null);if("function"!=typeof t)throw new Error;return this.tween(r,function styleTween(e,t,n){function tween(){var r=this,i=t.apply(r,arguments);return i&&function(t){r.style.setProperty(e,i(t),n)}}return tween._value=t,tween}(e,t,null==n?"":n))},text:function(e){return this.tween("text","function"==typeof e?function text_textFunction(e){return function(){var t=e(this);this.textContent=null==t?"":t}}(tweenValue(this,"text",e)):function text_textConstant(e){return function(){this.textContent=e}}(null==e?"":e+""))},remove:function(){return this.on("end.remove",function removeFunction(e){return function(){var t=this.parentNode;for(var n in this.__transition)if(+n!==e)return;t&&t.removeChild(this)}}(this._id))},tween:function(e,t){var n=this._id;if(e+="",arguments.length<2){for(var r,i=schedule_get(this.node(),n).tween,a=0,o=i.length;ayo&&n.state4&&void 0!==arguments[4]?arguments[4]:{},a=arguments[5];(e instanceof HTMLElement||e instanceof SVGElement)&&(e=Ao(e));var o=r?r[0]:null,u=null,c=null,s=null,l=null,f=null,h=void 0;o?"#"===o?(u="id",c=r):(u="class",c="."===r[0]?r:"."+r):(c=t,h=!0),s=e.selectAll(c),h&&(s=s.filter(function(){return this.parentNode===e.node()})),l=(s=s.data(n,a)).enter().append(t||"div"),i.enter&&l.each(function(){for(var e=arguments.length,t=Array(e),n=0;nthis._data.length)for(var a=this._data.length;a0&&void 0!==arguments[0]?arguments[0]:{};this._lifeCycles=e,this._releasePromisesFromCache()}},{key:"_resetTargetPromise",value:function _resetTargetPromise(e){var t=this;setTimeout(function(){t._notifiers[e]=Xo,t._promises.set(e,t._makeNotifierPromise(e))},0)}}]),LifeCycleManager}(),Qo="drag",Zo="hover",Jo="selectiondrag",eu="click",tu="longtouch",nu="touchdrag",ru="*",iu=1,au=-1,ou=0,uu=2,cu=-2,su=function(){function defineProperties(e,t){for(var n=0;n0?(e[n]===uu&&t.entrySet[0].push(n),e[n]===iu&&t.entrySet[1].push(n)):e[n]<0&&(e[n]===cu&&t.exitSet[0].push(n),e[n]===au&&t.exitSet[1].push(n)),t.completeSet.push(n);return["entrySet","exitSet"].forEach(function(e){t[e]=t[e].map(function(e){return e.map(Number)})}),t.completeSet=t.completeSet.map(Number),t}},{key:"reset",value:function reset(e){var t=this._set;if(e)e.forEach(function(e){t[e]=ou});else{var n=this._lockedSelection;for(var r in t)r in n||(t[r]=ou)}return this._resetted=!0,this}},{key:"getEntrySet",value:function getEntrySet(){var e=this._set,t=[];for(var n in e)e[n]===iu&&t.push(n);return t}},{key:"getExistingEntrySet",value:function getExistingEntrySet(e){var t=this._set;return e.filter(function(e){return t[e]===iu||t[e]===uu})}},{key:"getExistingExitSet",value:function getExistingExitSet(e){var t=this._set;return e.filter(function(e){return t[e]===au||t[e]===cu})}},{key:"getOldEntry",value:function getOldEntry(){var e=this._set,t=[];for(var n in e)e[n]===uu&&t.push(n);return t}},{key:"getOldExit",value:function getOldExit(){var e=this._set,t=[];for(var n in e)e[n]===cu&&t.push(n);return t}},{key:"getExitSet",value:function getExitSet(){var e=this._set,t=[];for(var n in e)e[n]===au&&t.push(n);return t}},{key:"getCompleteSet",value:function getCompleteSet(){var e=this._set,t=[];for(var n in e)t.push(n);return t}},{key:"getCompleteSetCount",value:function getCompleteSetCount(){return this._completeSetCount}},{key:"resetted",value:function resetted(){return this._resetted}},{key:"toggle",value:function toggle(){var e=this._set;for(var t in e)e[t]===iu?e[t]=au:e[t]===au?e[t]=iu:e[t]===uu?e[t]=cu:e[t]=uu;return this}}]),SelectionSet}();function helper_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t3&&void 0!==arguments[3]?arguments[3]:{},i=this.sideEffects(),a=i[e],o=!1;r.filter&&r.filter(a)&&(o=!0),!o&&i[e].apply(t,n,r)}},{key:"registerPropagationBehaviourMap",value:function registerPropagationBehaviourMap(e){return this._propagationBehaviourMap=Object.assign(this._propagationBehaviourMap,e||{}),this}},{key:"dispatchBehaviour",value:function dispatchBehaviour(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=void 0===n.propagate||n.propagate,i=this._actions.behavioural[e],a=function getSideEffects(e,t){var n=[];for(var r in t){var i=r.split(",");i.some(function(t){return t===e})&&n.push({effects:t[r],behaviours:i})}return n}(e,this._behaviourEffectMap);if(this._propagationInf=n,i){var o=i.dispatch(t),u=this.getPropagationSelectionSet(o);this._entryExitSet[e]=u;var c=this.shouldApplySideEffects(r);if(r&&this.propagate(e,t,o.find(function(e){return e.sourceSelectionSet}),a),c){var s=this.getApplicableSideEffects(a,t,n);this.applySideEffects(s,u,t)}}return this}},{key:"getPropagationSelectionSet",value:function getPropagationSelectionSet(e){return e.find(function(e){return!e.sourceSelectionSet})}},{key:"shouldApplySideEffects",value:function shouldApplySideEffects(){return!0}},{key:"changeBehaviourStateOnPropagation",value:function changeBehaviourStateOnPropagation(e,t){return t instanceof Function?this._sourceBehaviours[e]=t:this._sourceBehaviours[e]=function(){return t},this}},{key:"changeSideEffectStateOnPropagation",value:function changeSideEffectStateOnPropagation(e,t){t instanceof Function?this._sourceSideEffects[e]=t:this._sourceSideEffects[e]=function(){return t}}},{key:"propagate",value:function propagate(){return this}},{key:"sideEffects",value:function sideEffects(){return arguments.length?(this._sideEffects=arguments.length<=0?void 0:arguments[0],this):this._sideEffects}},{key:"enableSideEffects",value:function enableSideEffects(e){return fu(this,e,!0),this}},{key:"disableSideEffects",value:function disableSideEffects(e){return fu(this,e,!1),this}},{key:"dissociateBehaviour",value:function dissociateBehaviour(e,t){var n=this._actionBehaviourMap;for(var r in n)if(r===t){var i=n[r];i.behaviours=i.behaviours.filter(function(t){return t!==e})}return this}},{key:"dissociateSideEffect",value:function dissociateSideEffect(e,t){var n=this._behaviourEffectMap;return n[t]=n[t].filter(function(t){return(t.name||t)!==e}),this}},{key:"getApplicableSideEffects",value:function getApplicableSideEffects(e){return e}},{key:"attachPropagationListener",value:function attachPropagationListener(e){return e.unsubscribe("propagation"),e.on("propagation",this.onDataModelPropagation()),this}},{key:"onDataModelPropagation",value:function onDataModelPropagation(){var e=this;return function(t){var n=t.payload,r=n.action;e.dispatchBehaviour(r,n,{propagate:!1})}}},{key:"createSelectionSet",value:function createSelectionSet(e,t){var n=t||this._actions.behavioural,r=this._selectionSet,i=this._volatileSelectionSet;for(var a in n)({}).hasOwnProperty.call(n,a)&&(r[a]=new lu(e),i[a]=new lu(e,!0));return this._volatileSelectionSet=i,this.selectionSet(r),this}},{key:"selectionSet",value:function selectionSet(){return arguments.length?(this._selectionSet=arguments.length<=0?void 0:arguments[0],this):this._selectionSet}},{key:"initializeSideEffects",value:function initializeSideEffects(){var e=this._sideEffectDefinitions;return this.sideEffects(function initializeSideEffects(e,t){var n=e._sideEffects;return(t=t instanceof Array?t:Object.values(t)).forEach(function(t){var r=n[t.formalName()];n[t.formalName()]=r||new t(e)}),n}(this,e)),this}},{key:"registerPhysicalActions",value:function registerPhysicalActions(e){var t=function initializePhysicalActions(e,t){var n={};for(var r in t)({}).hasOwnProperty.call(r,t)||(n[r]=t[r](e));return n}(this,e);return Object.assign(this._actions.physical,t),this}},{key:"propagateWith",value:function propagateWith(e,t){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],r=this._actions.behavioural;if(t.length){if(e===ru)for(var i in r)this._propagationFields[i]={fields:t,append:n};else this._propagationFields[e]={fields:t,append:n};return this}return this._propagationFields}},{key:"mapActionsAndBehaviour",value:function mapActionsAndBehaviour(){var e=this._actions.physical,t=this._actionBehaviourMap,n=this._mappedActions;for(var r in t)if(!{}.hasOwnProperty.call(r,t)){var i=void 0,a=t[r];i=a.target;var o=a.touch;i||(i=this.context.getDefaultTargetContainer());var u=Ro()?!0===o||void 0===o:!o,c=r+"-"+a.behaviours.join();u&&!n[c]&&this.bindActionWithBehaviour(e[r],i,a.behaviours),n[c]=!0}return this}},{key:"registerPhysicalBehaviouralMap",value:function registerPhysicalBehaviouralMap(e){return Object.assign(this._actionBehaviourMap,e),this}},{key:"bindActionWithBehaviour",value:function bindActionWithBehaviour(e,t,n){var r=this;return"string"==typeof t&&(t=[t]),t.forEach(function(t){var i=r.context.mount(),a=t.node instanceof Function?t:Ao(i).selectAll(t);n.length&&!a.empty()&&(a instanceof Array?a.forEach(function(t){e(Ao(t),n)}):e(a,n))}),this}},{key:"getPropagationInf",value:function getPropagationInf(){return this._propagationInf}},{key:"getAddSetFromCriteria",value:function getAddSetFromCriteria(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=this.context,r=t.data?t.data:n.getDataModelFromIdentifiers(e,"all"),i=n.fields().x||[],a=n.fields().y||[],o=i.every(function(e){return e.type()===ir.FieldType.MEASURE}),u=a.every(function(e){return e.type()===ir.FieldType.MEASURE});return{model:r,uids:null===e?null:t.data?function filterPropagationModel(e,t,n){var r=t.getData(),i=r.data,a=r.schema,o=void 0;if(a.length){var u=e.getFieldsConfig();o=e.select(function(e){return i.some(function(t){return a.every(function(r,i){return!(n||r.name in u&&u[r.name].def.type!==ir.FieldType.MEASURE)||t[i]===e[r.name].valueOf()})})},{saveChild:!1})}else o=t;return o}(this.getFullData(),t.data[0],o&&u).getData().uids:r[0].getData().uids}}},{key:"getSelectionSets",value:function getSelectionSets(e){var t=this.context.id(),n=(this._propagationInf||{}).sourceId,r=[];return n!==t&&(r=[this._volatileSelectionSet[e]]),n&&r.push(this.selectionSet()[e]),r}},{key:"getFullData",value:function getFullData(){return this.context.data()}},{key:"resetted",value:function resetted(){return this._resetted}},{key:"getEntryExitSet",value:function getEntryExitSet(e){return this._entryExitSet[e]}}]),Firebolt}(),mu=function(){function defineProperties(e,t){for(var n=0;n1&&void 0!==arguments[1]?arguments[1]:{},n=e.sourceIdentifiers;return n?n.getSchema().map(function(e){return e.name}):t instanceof Array?t[0]:Object.keys(t||{})}(u,n.criteria),sourceSelectionSet:!0===e._volatile}}},{key:"enable",value:function enable(){this._enabled=!0}},{key:"disable",value:function disable(){this._enabled=!1}},{key:"isEnabled",value:function isEnabled(){return this._enabled}}],[{key:"mutates",value:function mutates(){return!1}}]),GenericBehaviour}(),_u=function(){function defineProperties(e,t){for(var n=0;nk[0]?k:w,S=C===k?w:k;C[1]100&&Math.abs(i.x-a.x)<=5)){a.x=Math.max(0,Math.min(a.x,o.width)),a.y=Math.max(0,Math.min(a.y,o.height));var s=Ru(n.context.getSourceInfo(),{startPos:i,endPos:a,snap:!0},n.context.data().getFieldsConfig());s.dragEnd=!0,t.forEach(function(e){return n.dispatchBehaviour(e,s)})}}))},zu=function hover(e){return function(t,n){var r=function dispatchBehaviour(t){var r=Io(),i=e.context,a=i.config().interaction.tooltip.mode,o=jo(i.getDrawingContext().svgContainer,r),u=i.getNearestPoint(o.x,o.y,{getAllPoints:"consolidated"===a||"fragmented"===a,data:t,event:r}),c={criteria:u?u.id:null,showInPosition:u.showInPosition,target:u.target,position:o,mode:a};n.forEach(function(t){return e.dispatchBehaviour(t,c)}),r.stopPropagation()};t.on("mouseover",r).on("mousemove",r).on("mouseout",function(){n.forEach(function(t){return e.dispatchBehaviour(t,{criteria:null})})})}},Hu=function generatePayloadFromEvent(e,t,n){var r=n.context,i=jo(r.getDrawingContext().svgContainer,t.touches?t.touches[0]:t),a=r.getNearestPoint(i.x,i.y,{data:e,event:t});return{criteria:a?a.id:null,showInPosition:a.showInPosition,target:a.target,position:i}},Vu=function click(e){return function(t,n){t.on("click",function dispatchBehaviour(t){var r=Io(),i=Hu(t,r,e);n.forEach(function(t){return e.dispatchBehaviour(t,i)}),r.stopPropagation()})}};function physical_defineProperty(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var Uu=(physical_defineProperty(Du={},Qo,function drag(e){return function(t,n){Bu(t,n,e)}}),physical_defineProperty(Du,Zo,zu),physical_defineProperty(Du,eu,Vu),physical_defineProperty(Du,tu,function longtouch(e){return function(t,n){var r=void 0,i=void 0;i=!1,r=Io(),t.on("touchstart",function(t){r=Io(),i=!1,setTimeout(function(){i?n.forEach(function(t){return e.dispatchBehaviour(t,{criteria:null})}):function dispatchBehaviour(t){var i=Hu(t,r,e);n.forEach(function(t){return e.dispatchBehaviour(t,i)}),r.stopPropagation()}(t)},100)}).on("touchend",function(){i=!0})}}),physical_defineProperty(Du,nu,function touchdrag(e){return function(t,n){Bu(t,n,e,!0)}}),Du),Wu=function(){function defineProperties(e,t){for(var n=0;n1&&void 0!==arguments[1]&&arguments[1];var t=arguments[2],n=arguments[3];this.firebolt.context.layers().forEach(function(r){return!1!==r.config().interactive&&r.applyInteractionStyle(t,e.uids,n)})}}]),SurrogateSideEffect}(),Xu=function(){function defineProperties(e,t){for(var n=0;n=0&&l<=t&&c>=0&&s<=n){var f=Ru(a.getSourceInfo(),{startPos:{x:u,y:c},endPos:{x:l,y:s}},a.data().getFieldsConfig());o(f)}}).on("end",function(){var e=i.width,t=i.height,n=Math.min(e-r.width,Math.max(r.x,0)),u=Math.min(t-r.height,Math.max(r.y,0)),c=u+r.height,s=n+r.width;if(n>=0&&s<=e&&u>=0&&c<=t){var l=Ru(a.getSourceInfo(),{startPos:{x:n,y:u},endPos:{x:s,y:c},snap:!0},a.data().getFieldsConfig());l.dragEnd=!0,o(l)}}))}}(c)(Ao(this),["brush"],x)}).merge(w).each(function(e){var t=Ao(this);for(var n in b&&(t=t.transition().duration(b.duration)),e)({}).hasOwnProperty.call(e,n)&&fa(e[n])&&t.attr(n,e[n])}),C=Gi(u.defClassName,this._id,d);return k.classed(C.join(" "),!0),k.classed(u.className,!0),this}},{key:"hide",value:function hide(e){Qu(this,e.sideEffectGroup,!1)}},{key:"show",value:function show(e){Qu(this,e.sideEffectGroup,!0)}}],[{key:"defaultConfig",value:function defaultConfig(){return{defClassName:"selection-box-group",className:"",classPrefix:"muze",box:{defClassName:"selection-box",className:""},transition:{duration:200}}}},{key:"formalName",value:function formalName(){return"selectionBox"}}]),SelectionBox}(),ec={position:"absolute",width:0,height:0},tc={classPrefix:"muze",defClassName:"tooltip-box",connectorClassName:"tooltip-connectors",className:"",row:{margin:0},content:{spacing:5,iconContainerSize:10,iconScale:1,iconShape:"circle",iconColor:"#ff0000",rowMargin:"0px",margin:10,separator:":",className:"tooltip-content-container",parentClassName:"tooltip-content-parent-container"},arrow:{size:10,disabled:!1,defClassName:"tooltip-arrow",className:"",color:"rgba(195,195,195,0.85)"}},nc=function getArrowPos(e,t,n,r){var i=void 0,a=n.x,o=n.y,u=n.boxHeight,c=n.boxWidth,s=r.arrow.disabled?0:r.arrow.size;if("left"===e||"right"===e){var l=0,f=u/2,h=t.y+t.height,d=o+u;t.y>o?(l=t.y-o,f=(h>=d?d-t.y:t.height)/2):d>h&&(f=Math.abs(o-(t.y+t.height))/2),i=l+f-s/2}else{var p=0,y=c/2,g=t.x+t.width,v=a+c;t.x>a?(p=t.x-a,y=(g>=v?v-t.x:t.width)/2):v>g&&(y=Math.abs(a-(t.x+t.width))/2),i=p+y-s/2}return i},rc=function placeArrow(e,t,n){var r=e._tooltipArrow,i=e._tooltipBackground,a=e._config,o=a.classPrefix,u=a.arrow,c=Gi(u.defClassName,e._id,a.classPrefix);r.style("display","block"),r.attr("class",""+c.join(" ")),"left"===t||"right"===t?(r.style("top",n+"px"),r.style("left",""),i.style("top",n+"px"),i.style("left","")):("bottom"===t?r.style("top","100%"):r.style("top","-"+u.size+"px"),r.style("left",n+"px"),"bottom"===t?i.style("top","100%"):i.style("top","-"+(u.size+3)+"px"),i.style("left",n+"px")),r.classed(o+"-tooltip-arrow",!0),r.classed(o+"-tooltip-arrow-"+e._arrowOrientation,!1),r.classed(o+"-tooltip-arrow-"+t,!0),i.classed(o+"-tooltip-background-arrow",!0),i.classed(o+"-tooltip-background-arrow-"+e._arrowOrientation,!1),i.classed(o+"-tooltip-background-arrow-"+t,!0)};n(11);function strategy_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t1&&void 0!==arguments[1]?arguments[1]:{},n=arguments[2],r=[],i=e.getData(),a=i.data,o=i.schema,u=t.formatters,c=t.separator,s=e.getFieldsConfig(),l=e.getFieldspace(),f=l.fieldsObj(),h=n.dimensionMeasureMap,d=n.axes,p=n.detailFields||[],y=o.filter(function(e){return e.type===ir.FieldType.DIMENSION}),g=o.filter(function(e){return e.type===ir.FieldType.MEASURE}),v=o.find(function(e){return-1!==p.indexOf(e.name)}),m=a.length,b=function getRowContent(e,n){var r=void 0,i=void 0,o=void 0,p=[],y=s[e].index,g=s[e].def.subtype===ir.DimensionSubtype.TEMPORAL?f[e].getMinDiff():0,v=u&&u[e]||oc(n,function(e){return e});if(null!==r){var b=n===ir.FieldType.MEASURE?a.map(function(e){return e[y]}):[].concat(strategy_toConsumableArray(new Set(a.map(function(e){return e[y]}))));b=b.filter(function(e){return""!==e});var _=d.color[0],x=d.shape[0],w=d.size[0],k=(_||x||w)&&m>1&&n!==ir.FieldType.MEASURE;b.forEach(function(n,u){var f=void 0,d=h[e];if(d&&d.length&&m>1){f=n;var y={value:""};k&&(y={type:"icon",color:_.getColor(n),shape:x.getShape(n),size:w.getSize(n)*t.iconScale}),d.length>1?(p.push([y,""+f]),d.forEach(function(e){o=s[e].index,r=a[u][o],i=oc("measure",l.fields[o]._ref.numberFormat())(r,g),p.push([{value:""+e+c,style:{"margin-left":t.margin+"px}"},className:t.classPrefix+"-tooltip-key"},{value:""+i,className:t.classPrefix+"-tooltip-value"}])})):(o=s[d[0]].index,r=a[u][o],i=oc("measure",l.fields[o]._ref.numberFormat())(r,g),p.push([y,{value:""+f+c,className:t.classPrefix+"-tooltip-key"},{value:""+i,className:t.classPrefix+"-tooltip-value"}]))}else f=e,i=v(r=n,g),p.push([{value:""+f+c,className:t.classPrefix+"-tooltip-key"},{value:""+i,className:t.classPrefix+"-tooltip-value"}])})}return p},_="keyValue";if(m>1&&v)r=function getTabularData(e,t,n,r){var i=[];return i.push(t.map(function(e){return e.name})),e.forEach(function(e){var a=[];t.forEach(function(t,i){var o=t.subtype===ir.DimensionSubtype.TEMPORAL?r[t.name]:0,u=t.type===ir.FieldType.MEASURE&&n.fields[i]._ref.numberFormat(),c=oc(t.subtype||t.type,u)(e[i],o);a.push(c)}),i.push(a)}),i}(a,o,l,n.timeDiffs),_="table";else{y.forEach(function(e){var t=e.subtype?e.subtype:e.type;r=[].concat(strategy_toConsumableArray(r),strategy_toConsumableArray(b(e.name,t)))});var x=[].concat(strategy_toConsumableArray(new(Function.prototype.bind.apply(Set,[null].concat(strategy_toConsumableArray(Object.values(h)))))));(m>1?g.filter(function(e){return-1===x.indexOf(e.name)}):g).forEach(function(e){var t=e.subtype?e.subtype:e.type;r=[].concat(strategy_toConsumableArray(r),strategy_toConsumableArray(b(e.name,t)))})}return{content:r,displayFormat:_}},cc={keyValue:function keyValue(e,t,n){return uc(e,t,n)}},sc="keyValue",lc=function(){function defineProperties(e,t){for(var n=0;n0?(this._config=na(this._config,arguments.length<=0?void 0:arguments[0]),this):this._config}},{key:"update",value:function update(e){return this._model=e.model,this._strategy=void 0!==e.strategy?e.strategy:sc,this._formatter=e.formatter,this}},{key:"context",value:function context(e){return this._context=e,this}},{key:"render",value:function render(e){var t=void 0,n=this._config,r=n.iconContainerSize,i=this._formatter,a=n.rowMargin,o=this._model;if(this._mount=e,(t=o instanceof Array?o:i instanceof Function?i(this._model,this._context):cc[this._strategy](this._model,this.config(),this._context))instanceof Function)e.html(t());else{var u=t,c="default";Di(t)&&(u=t.content,c=t.displayFormat);var s=Eo(e,"div",[c],n.classPrefix+"-tooltip-content",{},function(e){return e});if("table"===c){var l=Eo(s,"table",[1],n.classPrefix+"-tooltip-table"),f=Eo(l,"tbody",[1],n.classPrefix+"-tooltip-table-tbody"),h=Eo(f,"tr",u,n.classPrefix+"-tooltip-table-row");h.each(function(e,t){Ao(this).classed(n.classPrefix+"-tooltip-table-row-"+t,!0)}),Eo(h,"td",function(e){return e},n.classPrefix+"-tooltip-table-cell").each(function(e){Ao(this).html(e)})}else{var d=Eo(s,"div",u,n.classPrefix+"-tooltip-row"),p=Eo(d,"span",function(e){return e},n.classPrefix+"-tooltip-content");p.attr("class",n.classPrefix+"-tooltip-content"),Fo(d,{margin:a}),Fo(p,{display:"inline-block","margin-right":n.spacing+"px"}),p.each(function(e){var t=Ao(this);if(t.html(""),e instanceof Object)if("icon"===e.type){var n=Eo(t,"svg",[1]),i=Eo(n,"path",[1]),a=e.shape instanceof Function?e.shape:pa(e.shape);To(n,{x:0,y:0,width:r,height:r}),To(i,{d:a.size(e.size)(),transform:"translate("+r/2+", "+r/2+")"}),Fo(i,{fill:e.color}),Fo(n,{width:r+"px",height:r+"px"})}else t.html(e.value),e.className&&t.classed(e.className,!0),Fo(t,e.style);else t.html(e)})}}return this}},{key:"clear",value:function clear(){return this._model=null,this}}],[{key:"defaultConfig",value:function defaultConfig(){var e=tc.content;return e.classPrefix=tc.classPrefix,e}}]),Content}(),hc=function(){function defineProperties(e,t){for(var n=0;n0){var e=na({},this.constructor.defaultConfig());return this._config=na(e,arguments.length<=0?void 0:arguments[0]),this}return this._config}},{key:"addClass",value:function addClass(e){return this._tooltipContainer.classed(e,!0),this}},{key:"context",value:function context(){return arguments.length?(this._context=arguments.length<=0?void 0:arguments[0],this):this._context}},{key:"content",value:function content(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=this.config(),i=r.classPrefix,a=r.content.className,o=r.formatter,u=n.className||i+"-"+a+"-"+e,content=this._contents[e]=this._contents[e]||new fc,c=Eo(this._contentContainer,"div",[n.order],u);c.attr("class",i+"-"+a+" "+u),function reorderContainers(e,t){e.selectAll(t).sort(function(e,t){return e-t})}(this._contentContainer,"."+i+"-"+a);var s=r.content;return n.classPrefix=this._config.classPrefix,content.config(s),null===t?(content.clear(),c.remove(),delete this._contents[e]):(content.update({model:t,formatter:n.formatter||o}),content.context(this._context),content.render(c)),Object.keys(this._contents).length||this.hide(),this}},{key:"getContents",value:function getContents(){return Object.values(this._contents)}},{key:"position",value:function position(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(!Object.keys(this._contents).length)return this.hide(),this;this.show();var r=this._target,i=n.repositionArrow;if(r&&i){var a=this._tooltipContainer.node(),o=this._config,u=o.arrow.disabled,c=u?0:o.arrow.size,s=this._arrowOrientation,l="left"===s||"right"===s?t+a.offsetHeight-cr.y+r.height:e+a.offsetWidth-cr.x+r.width;if(!u)if(l){var f=void 0;this._tooltipArrow.style("display","none"),this._tooltipBackground.style("display","none"),this._tooltipConnectorContainer.style("display","block");var h=this._tooltipConnectorContainer.selectAll("path").data([1]),d=h.enter().append("path");"left"===s?f="M "+e+" "+(t+a.offsetHeight/2)+" L "+(r.x+r.width)+" "+(r.y+r.height/2):"right"===s?f="M "+(e+a.offsetWidth)+" "+(t+a.offsetHeight/2)+" L "+r.x+" "+(r.y+r.height/2):"bottom"===s&&(f="M "+(e+a.offsetWidth/2)+" "+(t+a.offsetHeight)+" L "+(r.x+r.width/2)+" "+r.y),d.merge(h).attr("d",f).style("display","block")}else{var p=nc(s,r,{x:e,y:t,boxHeight:a.offsetHeight,boxWidth:a.offsetWidth},this._config);rc(this,this._arrowOrientation,p),this._tooltipConnectorContainer.style("display","none")}}var y=this._offset||{x:0,y:0};return this._tooltipContainer.style("left",y.x+e+"px").style("top",y.y+t+"px"),this}},{key:"positionRelativeTo",value:function positionRelativeTo(e){var t=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=void 0,i=n.orientation;if(this.show(),!e)return this.hide(),this;var a=this._extent,o=this._tooltipContainer.node();this._tooltipContainer.style("top","0px").style("left","0px");var u=o.offsetWidth+2,c=o.offsetHeight+2,s=this._config,l=this._offset,f=s.arrow.disabled,h=f?0:s.arrow.size,d=void 0===n.draw||n.draw,p=e.y,y=e.x+e.width+l.x,g=a.width-y,v=e.x+l.x-a.x,m=p>c+h,b=g>=u+h,_=v>=u+h;return this._target=e,i||(i=m?"vertical":b||_?"horizontal":"vertical"),"horizontal"===i?r=function positionHorizontal(){var n=void 0,r=e.x+e.width,i=e.y;return b?(n="left",r+=h):_?(r=e.x-u,n="right",r-=h):(n="left",r+=h),e.height2&&void 0!==arguments[2]?arguments[2]:{},r=0,i=0,a=e.mergedEnter.model,o=this.firebolt.context,u=this.drawingContext();if(a.isEmpty()||null===t.criteria||!1===e.isSourceFieldPresent)return this.hide(n,null),this;var c=this._tooltips,s=this.config(),l={width:u.width,height:u.height},f=t.showInPosition,h=s.padding,d=[],p="fragmented"===s.mode,y=o.getSourceInfo(),g=y.fields,v=!!(!!g.x[0]&&g.x[0].type()===ir.FieldType.DIMENSION),m=t.position,b=[],_={},x=a.getData().uids;p?d.push.apply(d,function tooltip_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);tu.height:i>u.width)break;b.push({x:z.x,y:z.y,width:H.width,height:H.height,tooltip:R})}}for(var V in c)if(!_[V]){var U=c[V];U.content(t.action,null),U.getContents().length||(U.remove(),delete c[V])}return p&&(!function spaceOutBoxes(e,t,n){var r=void 0,i=void 0,a=void 0,o=void 0,u=void 0,c=e.length,s=function spaceOutIfOverlap(e,t,u){a=e.x,o=e.width,r=e.y,i=e.height;var c=r+i,s=a+o;n?(u?rt.y)&&(t.y=u?e.y-t.height-5:c+5):(u?at.x)&&(t.x=u?e.x-t.width-5:s+5)};for(e.sort(function(e,t){return n?e.y-t.y:e.x-t.x}),u=0,u=0;ut.height||e[u].x+e[u].width>t.width)for(n?e[u].y-=e[u].height+e[u].y-t.height:e[u].x-=e[u].width+e[u].x-t.width,u=c-1;u>0;u--)s(e[u],e[u-1],!0)}(b,l,v),b.forEach(function(e){return e.tooltip.position(e.x,e.y,{repositionArrow:!0})})),this}},{key:"hide",value:function hide(e){var t=this._tooltips;for(var n in t)if({}.hasOwnProperty.call(t,n)){var r=e.strategy||this._strategy;t[n].content(r,null),t[n].hide()}}}],[{key:"defaultConfig",value:function defaultConfig(){return{padding:5,offset:{x:0,y:0}}}},{key:"formalName",value:function formalName(){return"tooltip"}}]),Tooltip}(),vc=(n(15),function(){function defineProperties(e,t){for(var n=0;n2&&void 0!==arguments[2]?arguments[2]:{},r=this._strategies[n.strategy||this._strategy];return!1!==e.isSourceFieldPresent&&r(e,this,n.strategy||this._strategy),this}}],[{key:"formalName",value:function formalName(){return"highlighter"}},{key:"target",value:function target(){return"visual-unit"}}]),PlotHighlighter}(),wc=function(){function defineProperties(e,t){for(var n=0;n67.5&&v<=90||(r+=2*y),u=p,u=90===l?y:270===l?-y:0,o===Yc?(u=0===t&&c&&s===ds?u+u/2:u,Ao(this).attr("transform","translate("+(-u+f)+" \n "+(-r-f)+") rotate("+l+")")):(u=0===t&&c&&s===ds?u-u/2:u,Ao(this).attr("transform","translate("+(u-f)+" \n "+(r+f)+") rotate("+l+")"))}),t},Os=function changeTickOrientation(e,t,n){var r=t._smartTicks,i=t.config(),a=t.dependencies().labelManager,o=i.labels,u=i.orientation,c=o.rotation,s=o.smartTicks,l=e.selectAll(".tick text");if(l.selectAll("tspan").remove(),0===c||!1!==s||"top"!==u&&"bottom"!==u)if(0===c&&!1===s)l.attr("transform","");else{l.attr("y",0).attr("x",0).text(""),Eo(l,"tspan",function(e,t){return r[t].lines},"smart-text").attr("dy","0").style("opacity","0").transition().duration(1e3).attr("dy",function(e,t){return"bottom"===u||0!==t?r[t].oriTextHeight:-r[t].oriTextHeight*(r[t].lines.length-1)-n}).style("opacity",1).attr("x",0).text(function(e){return e})}else Ms(t,l,a,i);return l},Ts=function setFixedBaseline(e){e.config().fixedBaseline&&e.setFixedBaseline()},Fs=function setAxisNamePos(e,t,n){var r=n.axisNameHeight,i=n.yOffset,a=n.labelOffset,o=n.availableSpace;switch(t){case Xc:e.attr("transform","translate("+-(o.width-r)+","+(i+a)+")rotate(-90)");break;case Kc:e.attr("transform","translate("+(o.width-r)+","+(i+a)+")rotate(90)");break;case Yc:e.attr("transform","translate("+o.width/2+","+(-o.height+r)+")");break;case Gc:e.attr("transform","translate("+o.width/2+","+(o.height-r/2)+")")}return e};function cartesian_axis_helper_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);tt.length&&(t=p,r=e.smartTicks()?e.smartTicks()[s]:{},n=o[s]),d}),n=h.getOriSize(t),{largestLabel:t,largestLabelDim:n,axisTickLabels:i,allLabelLengths:o,smartTick:r}},js=function setOffset(e){var t=0,n=0,r=e.logicalSpace(),i=e.config(),a=i.orientation,o=i.xOffset,u=i.yOffset;a===Xc&&(t=void 0===o?r.width:o),a===Yc&&(n=void 0===u?r.height:u),e.config({xOffset:t,yOffset:n})},Is=function adjustRange(e,t,n,r){var i=function getAxisOffset(e,t,n){var r=Math.abs(t[1]-t[0])/(n[1]-n[0])*e,i=t[1]-t[0],a=i/r;return(i-i/(a+1)*a)/2}(e,t,n);return r===Yc||r===Gc?(t[0]+=i,t[1]-=i):(t[0]-=i,t[1]+=i),t},Ds=function registerChangeListeners(e){return e.store().model.next(["domain","range","mount","config"],function(){for(var t=arguments.length,n=Array(t),r=0;r0&&e.length*(t+this._minTickDistance.width)>i&&this.config({labels:{rotation:-90}})}return this}},{key:"adjustRange",value:function adjustRange(){return this}},{key:"getScaleValue",value:function getScaleValue(e){if(null!==e&&void 0!==e)return this.scale()(e)}},{key:"getTickSize",value:function getTickSize(){return this.axis().tickSize()}},{key:"getAxisDimensions",value:function getAxisDimensions(){return this.axisDimensions(function computeAxisDimensions(e){var t={},n=e.config(),r=n.name,i=n.labels,a=n.tickValues,o=(i.smartTicks?0:i.rotation)*Math.PI/180,u=e.dependencies().labelManager,c=Ns(e),s=c.largestLabelDim,l=c.axisTickLabels,f=c.smartTick,h=s.height,d=s.width;return 0===e.domain().length?null:(!1===e._rotationLock&&(e.setRotationConfig(a||l,s.width),e._rotationLock=!1),t=i.smartTicks?f:{width:Math.abs(h*Math.sin(o))+Math.abs(d*Math.cos(o)),height:Math.abs(d*Math.sin(o))+Math.abs(h*Math.cos(o))},u.setStyle(e._axisNameStyle),{tickSize:e.getTickSize(),tickLabelDim:t,axisLabelDim:u.getOriSize(r),largestLabelDim:s,axisTickLabels:l})}(this)),this.axisDimensions()}},{key:"getLogicalSpace",value:function getLogicalSpace(){return this.logicalSpace()||(this.logicalSpace(function calculateContinousSpace(e){e.range();var t=e.config(),n=e.getAxisDimensions(),r=t.orientation,i=t.show,a=t.showAxisName,o=n.axisLabelDim;if(!1===i)return{width:0,height:0};var u=o.width;if(r===Yc||r===Gc){var c=Ls(e,n,t),s=c.width,l=c.height;return{width:Math.max(s,u),height:l}}var f=Rs(e,n,t),h=f.width,d=f.height;return{width:h,height:Math.max(d,a?u:0)}}(this)),js(this),this.logicalSpace()),this.logicalSpace()}},{key:"invert",value:function invert(){for(var e=this,t=arguments.length,n=Array(t),r=0;ra[1];return"band"===r?(n=i.invertExtent(e,t),[i(o?n[n.length-1]:n[0]),i(o?n[0]:n[n.length-1])+i.bandwidth()]):[e,t]}},{key:"updateDomainBounds",value:function updateDomainBounds(e){var t=this.domain();return this.config().domain?t=this.config().domain:(0===t.length&&(t=e),e.length&&(t=[Math.min(t[0],e[0]),Math.max(t[1],e[1])])),this.domain(t)}},{key:"updateDomainCache",value:function updateDomainCache(e){!1===this._domainLock&&(this.domain([]),this._domainLock=!0);var t=[];return e&&e.forEach(function(e){void 0!==e&&null!==e&&t.push(e)}),this.updateDomainBounds(t)}},{key:"getMinTickDifference",value:function getMinTickDifference(){return this.domain()}},{key:"getFormattedTickValues",value:function getFormattedTickValues(e){return e}},{key:"setTickValues",value:function setTickValues(){var e=this.config().tickValues;return e?(e instanceof Array&&this.axis().tickValues(e),this):this}},{key:"getUnitWidth",value:function getUnitWidth(){return 0}},{key:"serialize",value:function serialize(){return{name:this.name,type:this.type,range:this.range(),config:this.config()}}},{key:"registerEvent",value:function registerEvent(e,t){this._eventList.push({name:e,action:t})}},{key:"on",value:function on(e,t){e=e||"update",this.registerEvent(e,t)}},{key:"render",value:function render(){return this.mount()&&function renderAxis(e){var t=e.config(),n=e.dependencies().labelManager,r=e.mount(),i=e.range(),a=e.axis(),o=e.scale(),u=e._axisNameStyle,c=e._tickLabelStyle,s=e.formatter,l=e.tickValues,f=t.orientation,h=t.name,d=t.labels,p=t.xOffset,y=t.yOffset,g=t.axisNamePadding,v=t.className,m=t.showAxisName,b=t.show,_=t.id,x=t.interpolator,w=t.classPrefix;if(b){var k=e.getTickSize(),C=Eo(Ao(r),"g",[e],""+v,{},function(e){return e.config().id});n.setStyle(c),"linear"===x&&e.setTickValues();var S=o.ticks||o.quantile||o.domain;s&&a.tickFormat(s(l||a.tickValues()||S()));var P=Math.abs(i[0]-i[1]),A=e.axisDimensions().tickLabelDim;C.attr("transform","translate("+p+","+y+")"),Ts(e),!1===d.smartTicks?C.transition().duration(1e3).call(a):C.call(a),C.selectAll(".tick").classed(w+"-ticks",!0),C.selectAll(".tick line").classed(w+"-tick-lines",!0),C.selectAll(".tick text").classed(w+"-ticks",!0).classed(w+"-ticks-"+_,!0),Os(C,e,k);var E=Eo(C,"text",[h],w+"-axis-name").attr("text-anchor","middle").classed(w+"-axis-name-"+_,!0).text(function(e){return e});E.classed(ys,!m);var M=P/2;n.setStyle(u);var O=n.getOriSize(h),T={labelProps:A,tickSize:k,axisNamePadding:g,axisNameHeight:O.height,axisNameWidth:O.width,yOffset:y,xOffset:p,labelOffset:M,availableSpace:e.availableSpace()};Fs(E,f,T)}}(this),this}},{key:"remove",value:function remove(){return this.store().unsubscribeAll(),Ao(this.mount()).remove(),this}},{key:"unsubscribe",value:function unsubscribe(){return this.store().unsubscribeAll(),this}},{key:"isReverse",value:function isReverse(){var e=this.range();return e[0]>e[1]}},{key:"getPixelToValueRatio",value:function getPixelToValueRatio(){var e=this.scale(),t=e.range(),n=e.domain();return Math.abs(t[1]-t[0])/(n[1]-n[0])}},{key:"id",get:function get(){return this._id}}],[{key:"defaultConfig",value:function defaultConfig(){return Es}}]),SimpleAxis}(),Vs=function(){function defineProperties(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:0,t=arguments[1],n=arguments[2],r=arguments[3],i=n.left,a=n.right,o=n.top,u=n.bottom,c=this.config(),s=c.orientation,l=c.fixedBaseline,f=this.getAxisDimensions().tickLabelDim;if(this.availableSpace({width:e,height:t}),s===Yc||s===Gc){var h=f.width;this.range([(l?0:h/2)+i,e-a-h/2]);var d=this.getLogicalSpace().height;r&&this.config({yOffset:Math.max(d,t)})}else{var p=f.height;this.range([t-u-(l?1:p/2),p/2+o]);var y=this.getLogicalSpace().width;r&&this.config({xOffset:Math.max(y,e)})}return this}},{key:"setTickValues",value:function setTickValues(){var e=this.config().tickValues,t=this.axis();return e?(e instanceof Array&&this.axis().tickValues(e),this):(t.tickValues(this.getTickValues()),this)}},{key:"getTickValues",value:function getTickValues(){var e=this.config(),t=e.orientation,n=e.tickValues,r=this.range(),i=this.axis(),a=Math.abs(r[0]-r[1]),o=Ns(this).largestLabelDim;return n?i.scale().ticks(n):function getNumberOfTicks(e,t,n,r){var i=n.scale().ticks(),a=r.config().numberOfTicks,o=i.length,u=o;return o*(1.5*t)>e&&(u=Math.floor(e/(1.5*t))),u=Math.min(a,Math.max(1,u)),n.scale().ticks(u)}(a,o[t===Gc||t===Yc?"width":"height"],i,this)}},{key:"getMinTickDifference",value:function getMinTickDifference(){return xa(this.config().tickValues)}},{key:"setFixedBaseline",value:function setFixedBaseline(e){var t=this.config(),n=t.orientation,r=t.labels.rotation,i=this.axis(),a=this._axisDimensions.largestLabelDim,o=a.width,u=a.height;return i.tickTransform(function(e,t){return 0!==t||n!==Xc&&n!==Kc?0!==t||n!==Yc&&n!==Gc||0!==r?"":"translate("+o/2+"px, 0px) rotate("+r+"deg)":"translate(0, -"+u/3+"px)"}),e}}],[{key:"type",value:function type(){return Qc}}]),ContinousAxis}(),Zs=function(){function defineProperties(e,t){for(var n=0;n0&&e.length*(t+this._minTickDistance.width)>a&&(a&&o0&&e.length*t>i&&(i&&1.25*a1?t.range:[al].concat(props_toConsumableArray(t.range)));var r=na(n,e.config()),i=na(r,t);return i.range instanceof Array&&(i.range=i.range.map(function(e,t){return sl(e,il[t])}),i.stops=t.stops||i.range.length),i.value=sl(i.value,i.value),i}},domain:{},scale:{},uniqueValues:{}};function color_strategy_defineProperty(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function color_strategy_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);tMath.min(t.length,18))for(var r=aa()(function hslInterpolator(){return Ne}(),t.map(function(e){return ul(e)})),i=0;i0&&void 0!==arguments[0]?arguments[0]:[];if(e.length){var t=this.scale(),n=t.range?t.range():null,r=this._colorStrategy.domainRange()(e,this.config().stops,n);this.domain(r.domain),r.range&&this.scale().range(r.range),this.uniqueValues(r.uniqueVals),this.scale().domain(r.scaleDomain||this.domain())}return this}},{key:"serialize",value:function serialize(){return{type:this.constructor.type(),scale:this.scale(),domain:this.domain(),config:this.config()}}},{key:"transformColor",value:function transformColor(e,t){var n=360*e[0],r=100*e[1],i=100*e[2],a=e[3]||1,o=n+t[0],u=r+t[1],c=i+t[2],s=a+t[3]||0;return{color:"hsla("+o+","+u+"%,"+c+"%,"+s+")",hsla:[o/360,u/100,c/100,s]}}},{key:"id",value:function id(){return this._id}}],[{key:"defaultConfig",value:function defaultConfig(){return ol}},{key:"type",value:function type(){return"color"}}]),ColorAxis}(),Sl={value:36,range:[36,1e3]};function size_strategy_defineProperty(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function size_strategy_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t0&&void 0!==arguments[0]?arguments[0]:0,t=this.config().value,n=this.scale(),r=this.domain()||[1,1];return n&&r[0]!==r[1]?this._sizeStrategy.range(e,n,this.domain(),this.uniqueValues()):t}},{key:"updateDomain",value:function updateDomain(e){if(e){var t=(0,this._sizeStrategy.domain)(e,this.config().intervals);this.domain(t.domain),this.uniqueValues(t.uniqueVals),this.scale().domain(t.scaleDomain||this.domain())}return this}},{key:"serialize",value:function serialize(){return{type:this.constructor.type(),scale:this.scale(),domain:this.domain(),range:this.range(),config:this.config()}}},{key:"id",value:function id(){return this._id}}],[{key:"defaultConfig",value:function defaultConfig(){return Sl}},{key:"type",value:function type(){return"size"}}]),SizeAxis}(),Ol={generator:null,value:"circle",range:["circle","diamond","star","cross","square","wye","triangle"]},Tl={config:{},domain:{},scale:{},uniqueValues:{},generator:{}},Fl=function(){function defineProperties(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:[];return e.length&&(this.uniqueValues(e),this.domain(e),this.scale().domain(e),this.config().generator&&(this._generatedShapes=function shapeGenerator(e,t){var n={};return e.forEach(function(e){n[e]=t(e)}),n}(e,this.config().generator))),this}},{key:"serialize",value:function serialize(){return{type:this.constructor.type(),scale:this.scale(),domain:this.domain(),range:this.config().range,config:this.config()}}},{key:"id",value:function id(){return this._id}}],[{key:"defaultConfig",value:function defaultConfig(){return Ol}},{key:"type",value:function type(){return"shape"}}]),ShapeAxis}();function data_type_scale_map_defineProperty(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var Il="measure",Dl="temporal",Ll=(data_type_scale_map_defineProperty(Nl={},"dimension",Zc),data_type_scale_map_defineProperty(Nl,Il,Qc),data_type_scale_map_defineProperty(Nl,Dl,Jc),function(e,t,n){var r=n.groupBy instanceof Array?n.groupBy:[n.groupBy],i=r.map(function(t){return e.findIndex(function(e){return e.name===t})});if(void 0!==i.find(function(e){return-1===e}))throw new Error("Groupby field "+r+" not found in schema");return function nestCollection(e){var t=T();return e.keys.forEach(function(e){return t.key(function(t){return t[e]})}),t.entries(e.data)}({keys:i,data:t})});var Rl;function transform_factory_defineProperty(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var Bl=(transform_factory_defineProperty(Rl={},"identity",function identityTransform(e,t,n){return t}),transform_factory_defineProperty(Rl,"group",Ll),transform_factory_defineProperty(Rl,"stack",function(e,t,n){var r=n.uniqueField,i=n.value,a=n.groupBy,o=n.sort||"descending",u=function normalizeData(e,t,n,r,i){var a=Ll(t,e,{groupBy:r}),o=t.findIndex(function(e){return e.name===r}),u=t.findIndex(function(e){return e.name===n}),c=t.findIndex(function(e){return e.name===i}),s=e.map(function(e){return e[c]}).filter(function(e,t,n){return n.indexOf(e)===t}).sort(),l=t.reduce(function(e,t,n){return e[n]=t.name,e},{});return{data:a.map(function(e){var t={},n=e.values.reduce(function(e,n){return e=n.reduce(function(e,r,i){return i===c?(e[r]=n[u],t[r]=n):i!==u&&(e[l[i]]=r),e},e)},{});return n._tuple=t,s.forEach(function(t){if(void 0===n[t]){n[t]=0;var r=new Array(e.values[0].length);r[o]=e.key,r[c]=t,n._tuple[t]=r}}),n}),keys:s}}(t,e,i,r,a),c=u.keys,s={},l=n.orderBy,f=e.findIndex(function(e){return e.name===l}),h=e.findIndex(function(e){return e.name===a});-1!==f&&(c.forEach(function(e){var n=t.find(function(t){return t[h]===e});s[e]=n[f]}),u.keys.sort(function(e,t){return s[e].localeCompare(s[t])}));var d=va({keys:u.keys,offset:n.offset||"diverging",order:o,data:u.data});return d.forEach(function(e){e.forEach(function(t){t.data=t.data._tuple[e.key]})}),d}),Rl);var zl=function transformFactory(e){var t=Bl[e];if("function"!=typeof t)throw new Error("Invalid transform type supplied.");return t},Hl=function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function sliceIterator(e,t){var n=[],r=!0,i=!1,a=void 0;try{for(var o,u=e[Symbol.iterator]();!(r=(o=u.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){i=!0,a=e}finally{try{!r&&u.return&&u.return()}finally{if(i)throw a}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}();var Vl,Ul=f.BAND,Wl=function getLayerColor(e,t){var n=e.datum,r=e.index,i=t.colorEncoding,a=t.colorAxis,o=t.colorFieldIndex,u="",c="";return i&&i.value instanceof Function?(c=i.value(n,r),u=i.value(n,r)):(u=a.getRawColor(n._data[o]),c=a.getHslString(u)),{color:c,rawColor:u}},ql=function transfromColor(e,t,n,r){t.meta.stateColor[n]=t.meta.stateColor[n]||t.meta.originalColor;var i=e.transformColor(t.meta.stateColor[n],r);return t.meta.stateColor[n]=i.hsla,i},Gl=function applyInteractionStyle(e,t,n,r){var i=e.getPlotElementsFromSet(t),a=e.axes().color,o=r.apply,u=r.interactionType;n.forEach(function(e){var t=e.type;i.style(t,function(n){var r=n.meta,i=r.colorTransform,c=r.stateColor,s=r.originalColor;if(i[u]=i[u]||{},o&&!i[u][t])return i[u][t]=e.intensity,ql(a,n,t,e.intensity).color;if(!o&&i[u][t])return i[u][t]=null,ql(a,n,t,e.intensity.map(function(e){return-e})).color;var l=c[t]?c[t]:s,f=Hl(l,4);return"hsla("+360*f[0]+","+100*f[1]+"%,"+100*f[2]+"%, "+(f[3]||1)+")"})})},Yl=function getAxesScales(e){var t=[Bc.X,Bc.Y].map(function(t){return e[t]}),n=Hl(t,2),r=n[0],i=n[1],a=[r,i].map(function(e){return e&&e.scale()}),o=Hl(a,2);return{xAxis:r,yAxis:i,xScale:o[0],yScale:o[1]}},Xl=function getIndividualClassName(e,t,n,r){var i=r.config().individualClassName,a="";return i instanceof Function&&(a=i(e,t,n,r)),a},Kl=function attachDataToVoronoi(e,t){var n;e.data((n=[]).concat.apply(n,function helpers_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t=e[0]?(i=d=e[1],h=f=e[0]):(i=d=e[0],h=f=e[1]),(t=a===ir.FieldType.MEASURE?{x:h,x0:d,y:n[u],y0:n[u]}:{x:n[o],x0:n[o],y:i,y0:f})._data=n,t._id=n[l]}else(t={x:e[o],y:e[u],x0:e[c],y0:e[s]})._data=e,t._id=e[l];return t})}).filter(function(e){return e.length})}(e,t,this.encodingFieldsInf(),this.transformType())}},{key:"getNearestPoint",value:function getNearestPoint(){return null}},{key:"applyInteractionStyle",value:function applyInteractionStyle(e,t,n){var r=(this.config().interaction||{})[e];r&&Gl(this,t,r,{apply:n,interactionType:e})}},{key:"transformType",value:function transformType(){return arguments.length?(this._transformType=arguments.length<=0?void 0:arguments[0],this):this._transformType}},{key:"render",value:function render(){return this}},{key:"elemType",value:function elemType(){return"g"}},{key:"remove",value:function remove(){return this.store().unsubscribeAll(),Ao(this.mount()).remove(),this}},{key:"cachePoint",value:function cachePoint(e,t){if(null===e)return this;var n=this._pointMap;return!n[e]&&(n[e]=[]),n[e].push(t),this}},{key:"dataProps",value:function dataProps(){return arguments.length?(this._dataProps=arguments.length<=0?void 0:arguments[0],this):this._dataProps}},{key:"getIdentifiersFromData",value:function getIdentifiersFromData(e){var t=this.data().getData().schema,n=this.data().getFieldsConfig(),r=[[],[]],i=this.encodingFieldsInf(),a=i.xFieldType,o=i.yFieldType,u=i.xField,c=i.yField,s=[a,o].map(function(e){return e===ir.FieldType.MEASURE}),l=tf(s,2),f=l[0],h=l[1];if(t.forEach(function(t,i){var a=t.name;n[a].def.type===ir.FieldType.DIMENSION&&(r[0].push(a),r[1].push(e[i]))}),f&&h){var d,p,y=n[u].index,g=n[c].index;(d=r[0]).push.apply(d,[u,c]),(p=r[1]).push.apply(p,[e[y],e[g]])}return r}},{key:"getPlotSpan",value:function getPlotSpan(){return{x:0,y:0}}},{key:"getPlotPadding",value:function getPlotPadding(){return{x:0,y:0}}},{key:"getPointsFromIdentifiers",value:function getPointsFromIdentifiers(e){var t,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=n.getAllAttrs,i=n.getBBox;if(!this.data())return[];var a=void 0,o=void 0;if(e instanceof ar.a){var u=e.getData();a=u.schema.map(function(e){return e.name}),o=u.data}else a=e[0],o=e.slice(1,e.length);var c=this._points,s=this.data().getFieldsConfig(),l=(t=[]).concat.apply(t,function base_layer_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t2&&void 0!==arguments[2]?arguments[2]:{},r=Ao(n.event.target).data()[0];if(Di(r)){var i=r.datum,a=i.data,o=i.uid;return{id:this.getIdentifiersFromData(a,o),layerId:this.id()}}return null}},{key:"getPlotElementsFromSet",value:function getPlotElementsFromSet(e){return Ao(this.mount()).selectAll(this.elemType()).filter(function(t){return-1!==e.indexOf(t.datum.uid)})}},{key:"render",value:function render(e){var t=this,n=this.measurement(),r=n.height,i=n.width,a=this.config(),o=a.classPrefix,u=a.defClassName,c=a.minOuterRadius,s=a.innerRadius,l=a.outerRadius,f=a.cornerRadius,h=a.padAngle,d=a.padRadius,p=a.padding,y=a.transition,g=a.innerRadiusFixer,v=this.axes().size,m=this._store,b=m.get("transformedData"),_=r-p.top-p.bottom,x=i-p.left-p.right,w=Gi(u,this.id(),o),k=function getRadiusRange(e,t,n){var r=n.minOuterRadius,i=n.innerRadius,a=n.outerRadius,o=n.innerRadiusFixer;return[Math.max(i+o||0,r),a||Math.min(t,e)/2]}(x,_,{minOuterRadius:c,innerRadius:s,outerRadius:l,innerRadiusFixer:g}),C=this.axes().color,S=l||Math.min(_,x)/2,P=m.get("domain").radius,A=function rangeValueGetter(e){return function getRangeValue(e,t,n,r,i){var a=1,o=e.outerRadiusValue,u=e.sizeVal,c=i.domain(),s=i.getSize(u)/(c?i.range()[1]:i.config().value);return a*=(t[1]-t[0])/(n[1]-n[0]),(t[0]+(o-n[0])*a||r)*s}(e,k,P,S,v)},E=bf().innerRadius(s?Math.min(_/2,x/2,s):0).cornerRadius(f).padAngle(h).padRadius(d);this._chartWidth=x,this._chartHeight=_;var M=Eo(Ao(e),"g",[1],w[0]+"-group").classed(w[1]+"-group",!0).attr("transform","translate("+x/2+","+_/2+")"),O=[],T=0;return Eo(M,"g",b,""+w[0],{update:function tween(e){Eo(e,"path",function(e,t){return[{datum:e,index:t,arcFn:E,meta:{originalColor:C.getRawColor(e.colorVal),stateColor:{},colorTransform:{}}}]},w[0]+"-path").style("fill",function(e){return C.getColor(e.datum.colorVal)}).transition().duration(y.duration).attrTween("d",function(){for(var e=arguments.length,t=Array(e),n=0;n0&&e.forEach(function(e){var i=e[0].datum.startAngle,a=e[e.length-1].datum.endAngle,o=2*Math.PI*i/(2*Math.PI+i-a);e.forEach(function(e){var i=e.elem,a=e.datum;i.each(function(){var e=Ao(this);e.selectAll("path").transition().duration(t.duration).attrTween("d",function(){return function(e){var t=n(a);return a.outerRadius=t,r(ra()(a,{startAngle:o,endAngle:o,outerRadius:t})(e))}}).remove(),e.remove()})})})}(O,y,A,E),this}},{key:"getPointsFromIdentifiers",value:function getPointsFromIdentifiers(e){if(!this.data())return[];var t=e[0],n=e.slice(1,e.length),r=Ao(this.mount()).selectAll("path").data(),i=this.data().getFieldsConfig(),a=r.filter(function(e){var r=e.datum.data,a=e.datum.uid;return t.every(function(e,t){return e in i&&i[e].def.type===ir.FieldType.DIMENSION?-1!==n.findIndex(function(n){return n[t]===r[i[e].index]}):e!==nr.ROW_ID||-1!==n.findIndex(function(e){return e[t]===a})})})[0];if(a){var o=a.arcFn.centroid(a.datum);return[{x:o[0]+this._chartWidth/2,y:o[1]+this._chartHeight/2,width:2,height:2}]}return[]}}],[{key:"defaultConfig",value:function defaultConfig(){return yf}},{key:"formalName",value:function formalName(){return"arc"}}]),ArcLayer}(),xf=function drawText(e,t,n,r){var i=Ao(e).selectAll("g").data(t),a=i.enter().append("g").each(function(e){To(this,e.enter)}).merge(i),o=Lo(Ao(e),n.className),u=parseInt(o.fontSize,10);return r.setStyle(o),a.each(function(e){var t,n=Ao(this),i=e.update,a=e.text,o=e.color,c=e.textanchor,s=e.style,l=e.background;if(t=l.value){var f=l.padding,h=void 0,d=r.getOriSize(e.text),p=d.width,y=d.height,g=Eo(n,"rect",[1]);h="end"===c?p:"start"===c?0:p/2,To(g.node(),{x:i.x-h-f/2,y:i.y-u-f/2,width:p+f,height:y+f}),l&&Fo(g,{background:t})}var v=Eo(n,"text",function(e){return[e]}).text(a),m=v.node();s&&Fo(m,s),o&&Fo(m,{fill:o}),e.className&&v.classed(e.className,!0),To(m,i),v.attr("text-anchor",c)}),i.exit().remove(),i},wf={defClassName:"layer-text",classPrefix:"muze",className:"",transform:{type:"identity"},interaction:{highlight:[{type:"fill",intensity:[0,0,-15,0]}],fade:[{type:"fill",intensity:[0,0,15,0]}],focus:[{type:"fill",intensity:[0,0,15,0]}]},transition:{effect:"cubic",duration:1e3},encoding:{color:{},text:{value:"",background:{padding:10}}},states:{highlight:{className:"muze-layer-text-highlight"},fadeout:{className:"muze-layer-text-fadeout"},selected:{className:"muze-layer-text-selected"}}},kf=(n(27),function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function sliceIterator(e,t){var n=[],r=!0,i=!1,a=void 0;try{for(var o,u=e[Symbol.iterator]();!(r=(o=u.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){i=!0,a=e}finally{try{!r&&u.return&&u.return()}finally{if(i)throw a}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}()),Cf=function(){function defineProperties(e,t){for(var n=0;n4)}(r)?r:pa(r).size(i)(a),Eo(n,"path",function(e){return[e]}).attr("d",s)}else e.shape="circle",createShape(e,t)}(e,this)}),(t=c?t:t.transition().duration(c?0:i.duration)).attr("transform",function(e){return"translate("+e.update.x+","+e.update.y+")"}).each(function(e){var t=e.style,n=Ao(this);Xi(t,function(e){return n.style(e,t[e])}),n.attr("class",""+a),n.classed(e.className,!0)});var h=l.exit();c?h.remove():h.transition().ease(Wi[u]).duration(o).on("end",function(){Ao(this).remove()}).style("fill-opacity",0).style("stroke-opacity",0)},Af={defClassName:"layer-point",className:"",classPrefix:"muze",defColorStyle:"stroke",interaction:{highlight:[{type:"fill",intensity:[0,0,-20,0]}],fade:[{type:"fill",intensity:[0,0,20,0]}],focus:[{type:"fill",intensity:[0,0,20,0]}]},innerPadding:.1,nearestPointThreshold:10,transform:{type:"identity"},transition:{effect:"cubic",duration:1e3},encoding:{size:{value:30},color:{},shape:{value:"circle"},x:{},y:{},strokeOpacity:{value:.5},fillOpacity:{value:.5}},shapes:["circle","cross","diamond","square","star","wye","triangle"],sizes:[20,30,40,50,60,70]},Ef=(n(29),function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function sliceIterator(e,t){var n=[],r=!0,i=!1,a=void 0;try{for(var o,u=e[Symbol.iterator]();!(r=(o=u.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){i=!0,a=e}finally{try{!r&&u.return&&u.return()}finally{if(i)throw a}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}()),Mf=function(){function defineProperties(e,t){for(var n=0;n3&&void 0!==arguments[3]?arguments[3]:{},a=[],o=t.size,u=t.shape,c=t.color,s=t.x,l=t.y,f=o.field,h=o.value,d=u.field,p=s.field,y=l.field,g=n.size,v=n.shape,m=this.data().getFieldsConfig(),b=m[p]&&m[p].def.type===ir.FieldType.DIMENSION,_=m[y]&&m[y].def.type===ir.FieldType.DIMENSION,x=b?Bc.X:_?Bc.Y:null,w=c&&c.field,k=m[w]&&m[w].index,C=this._store.get("measurement"),S=m[d]&&m[d].index,P=m[f]&&m[f].index,A=n.color,E=i.offset,M=E.x,O=E.y,T=function _loop(i,o){var u=e[i],s=u._data,l=h instanceof Function?h(u,i):g.getSize(s[P]),f=v.getShape(s[S]),d=[Bc.X,Bc.Y].map(function(e){var r=null===u[e]?void 0:u[e],i=e===Bc.X?C.width:C.height;return t[e].field?n[e].getScaleValue(r):i/2}),p=Ef(d,2),y=p[0],m=p[1];y+=M,m+=O;var b=Wl({datum:u,index:i},{colorEncoding:c,colorAxis:A,colorFieldIndex:k}),_=b.color,w=b.rawColor,E={fill:_,stroke:_};if(!isNaN(y)&&!isNaN(m)){var T={enter:{x:y,y:m},update:{x:y,y:m},shape:f,size:Math.abs(l),meta:{stateColor:{},originalColor:w,colorTransform:{}},style:E,_data:s,_id:u._id,source:u._data,rowId:u._id};T.className=Xl(u,i,e,r),a.push(T),r.cachePoint(u[x],T)}},F=0,N=e.length;F=0?C:k))):(p=c===Nc||r[e]>=0?C:k,y=Math.abs(p-(c===Nc?S:r[e]>=0?k:C))),d=k}else p=0,y=f[i];return{enterSpace:g,enter:d,pos:p,space:y}}),jf=function resolveDimensions(e,t,n){var r={xAxis:n.x,yAxis:n.y},i=Nf("x",r,t,e),a=i.enterSpace,o=i.enter,u=i.pos,c=i.space,s=Nf("y",r,t,e),l=s.enterSpace;return{enter:{x:o,y:s.enter,width:a,height:l},update:{x:u,y:s.pos,width:c,height:s.space}}},If=function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function sliceIterator(e,t){var n=[],r=!0,i=!1,a=void 0;try{for(var o,u=e[Symbol.iterator]();!(r=(o=u.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){i=!0,a=e}finally{try{!r&&u.return&&u.return()}finally{if(i)throw a}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),Df=function(){function defineProperties(e,t){for(var n=0;n=k.x&&e<=k.width+k.x&&t>=k.y&&t<=k.height+k.y){c=w;break}c=null}var C=c&&c._data;return C&&(u=this.getIdentifiersFromData(C,c._id)),c?{dimensions:[c.update],id:u,layerId:this.id()}:c}},{key:"getPlotSpan",value:function getPlotSpan(){return this._plotSpan}}],[{key:"formalName",value:function formalName(){return"bar"}},{key:"defaultConfig",value:function defaultConfig(){return Ff}},{key:"defaultPolicy",value:function defaultPolicy(e,t){var n=rf.defaultPolicy(e,t),r=n.encoding.color.field,i=n.transform;return r&&(i.groupBy=r),n}}]),BarLayer}(),zf={defClassName:"layer-tick",className:"",classPrefix:"muze",interaction:{highlight:[{type:"stroke",intensity:[0,0,-15,0]}],fade:[{type:"stroke",intensity:[0,0,15,0]}],focus:[{type:"stroke",intensity:[0,0,15,0]}]},innerPadding:.1,transform:{type:"identity"},transition:{effect:"cubic",duration:1e3},encoding:{color:{},x:{},y:{},x0:{},y0:{},strokeOpacity:{value:.5},fillOpacity:{value:.5}},states:{highlight:{className:"muze-layer-tick-highlight"},fadeout:{className:"muze-layer-tick-fadeout"},selected:{className:"muze-layer-tick-selected"}}},Hf=function(e){var t=e.points,n=e.container,r=e.keyFn,i=e.className,a=Ao(n),o=a.selectAll("path").data(t,r),u=o.enter().append("path");return a.attr("class",i||""),u.each(function(e){var t=Ao(this),n=e.enter||{};Object.entries(n).forEach(function(e){return!isNaN(e[1])&&t.attr(e[0],e[1])})}),o.exit().remove(),o.merge(u).each(function(e){var t=Ao(this),n=e.update,r=e.style||{},i=void 0!==n.x0?n.x0:n.x,a=void 0!==n.y0?n.y0:n.y,o="M "+n.x+" "+n.y+" L "+i+" "+a;e.className&&t.classed(e.className,!0),t.attr("d",o),Object.entries(r).forEach(function(e){return t.style(e[0],e[1])})})},Vf=(n(33),function(){function defineProperties(e,t){for(var n=0;n3&&void 0!==arguments[3]?arguments[3]:{},i=[],a=Yl(n),o=a.xAxis,u=a.yAxis,c=this.data().getFieldsConfig(),s=this.encodingFieldsInf(),l=s.xField,f=s.yField,h=s.x0Field,d=s.y0Field,p=s.xFieldType,y=s.yFieldType,g=p===ir.FieldType.DIMENSION,v=y===ir.FieldType.DIMENSION,m=g?Bc.X:v?Bc.Y:null,b=t.color,_=b&&b.field,x=c[_]&&c[_].index,w=this._store.get("measurement"),k=n.color,C=r.offset,S=C.x,P=C.y,A=r.span,E=A.x,M=A.y,O=0,T=e.length;O0&&(n[0]=[].concat(field_sanitizer_toConsumableArray(n[0]),field_sanitizer_toConsumableArray(n[1])),n[1]=[]),{fields:n.map(function(e,t){return 1===t?r[t].concat(n[t]):n[t].concat(r[t])}),dimensions:[].concat(field_sanitizer_toConsumableArray(n[0]),field_sanitizer_toConsumableArray(n[1])),measures:[].concat(field_sanitizer_toConsumableArray(r[0]),field_sanitizer_toConsumableArray(r[1])),temporal:[].concat(field_sanitizer_toConsumableArray(i[0]),field_sanitizer_toConsumableArray(i[1])),categorical:[].concat(field_sanitizer_toConsumableArray(a[0]),field_sanitizer_toConsumableArray(a[1]))}}(i,n)}),r=Sh(n,2),i=r[0],a=r[1],o=i.fields,u=i.dimensions,c=i.measures,s=i.temporal,l=i.categorical,f=a.fields,h=a.dimensions,d=a.measures;return{rows:o,rowDimensions:u,rowMeasures:c,rowTemporalFields:s,rowCategoricalFields:l,columns:f,columnTemporalFields:a.temporal,columnCategoricalFields:a.categorical,columnDimensions:h,columnMeasures:d}},Eh=function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function sliceIterator(e,t){var n=[],r=!0,i=!1,a=void 0;try{for(var o,u=e[Symbol.iterator]();!(r=(o=u.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){i=!0,a=e}finally{try{!r&&u.return&&u.return()}finally{if(i)throw a}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),Mh=function(){function defineProperties(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:{},t=arguments[1],n=Jh(th,t.rows,e),r=Eh(n,2),i=r[0],a=r[1],o=Jh("column",t.columns,e),u=Eh(o,2),c=u[0],s=u[1];return this.axisFrom({row:a,column:s}),this.headerFrom({row:i,column:c}),this}}]),VisualEncoder}(),Th={linear:Qs,band:Js,temporal:nl,size:Ml,color:Cl,shape:jl},Fh={dimension:f.BAND,categorical:f.BAND,measure:f.LINEAR,temporal:f.TIME},Nh=function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function sliceIterator(e,t){var n=[],r=!0,i=!1,a=void 0;try{for(var o,u=e[Symbol.iterator]();!(r=(o=u.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){i=!0,a=e}finally{try{!r&&u.return&&u.return()}finally{if(i)throw a}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}();function encoder_helper_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t1?e.position="both":e.position=n.axisFrom()[a],r[o]=Ih(o,s[i],e,o===$f?l:f)}),r}},{key:"getFacetsAndProjections",value:function getFacetsAndProjections(e,t){for(var n=[],r=[],i=0,a=[],o=[],u=e[0],c=e[1],s=u.length,l=c.length,f=this.axisFrom(),h=0;hi)for(var g=i;g-1&&(r=[[b,b]],a.splice(_,1)),o.splice(0,1)}else{var x=a.length-1,w=a[x];r=[[w]];var k=Dh(o,w);k>-1&&(r=[[w,w]],o.splice(k,1)),a.splice(x,1)}return{facets:n=(n=[].concat(a,o)).filter(function(e,t,n){return t===n.findIndex(function(t){return t.toString()===e.toString()})}),projections:r}}},{key:"fieldSanitizer",value:function fieldSanitizer(e,t){return function get(e,t,n){null===e&&(e=Function.prototype);var r=Object.getOwnPropertyDescriptor(e,t);if(void 0===r){var i=Object.getPrototypeOf(e);return null===i?void 0:get(i,t,n)}if("value"in r)return r.value;var a=r.get;return void 0!==a?a.call(n):void 0}(CartesianEncoder.prototype.__proto__||Object.getPrototypeOf(CartesianEncoder.prototype),"fieldSanitizer",this).call(this,e,t)}},{key:"getRetinalFieldsDomain",value:function getRetinalFieldsDomain(e,t){var n=e.groupedModel,r={};for(var i in t)if({}.hasOwnProperty.call(t,i)){var a=t[i],o=a.field;if(!a.domain&&o){var u=Zh(n,o);r[o]=u}}return r}},{key:"serializeLayerConfig",value:function serializeLayerConfig(e){var t=[];return e.length&&e.forEach(function(e,n){var r=Gf.sanitizeLayerConfig(e);r.order=n,t.push(r)}),t}},{key:"getLayerConfig",value:function getLayerConfig(e,t){var n=[],r=e.columnFields,i=e.rowFields;return r.forEach(function(e){var r=e.toString();i.forEach(function(i){var a=[],o=i.toString(),u={x:{field:r},y:{field:o}},c=i.subtype(),s=function getDefaultMark(e,t){return"categorical"===e||"categorical"===t?"bar":"temporal"===e||"temporal"===t?"line":"point"}(e.subtype(),c),l=[{mark:s,def:{mark:s,encoding:u}}],f=function getLayerConfFromFields(e,t,n){return n.filter(function(n){var r,i,a,o=n instanceof Array?n:[n],u=(r=[]).concat.apply(r,encoder_helper_toConsumableArray(o.map(function(e){return e.encoding}).filter(function(e){return void 0!==e})));if(!u.length)return!0;var c=(i=[]).concat.apply(i,encoder_helper_toConsumableArray(u.map(function(e){return[e.x&&e.x.field,e.x0&&e.x0.field]}))).filter(function(e){return void 0!==e&&null!==e}),s=(a=[]).concat.apply(a,encoder_helper_toConsumableArray(u.map(function(e){return[e.y&&e.y.field,e.y0&&e.y0.field]}))).filter(function(e){return void 0!==e&&null!==e});if(!c.length&&!s.length)return!0;var l=!!c.length&&c.every(function(t){return-1!==e.indexOf(t)}),f=!!s.length&&s.every(function(e){return-1!==t.indexOf(e)});return c.length&&s.length?l&&f:l||f})}(e.getMembers(),i.getMembers(),t||[]);a=f.length?f.map(function(e){var t=na(na({},l[0].def),e),n=Gf.getSerializedConf(t.mark,t);return{mark:t.mark,order:t.order,def:n}}):l,n.push.apply(n,function cartesian_encoder_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);tt)for(var h=t;h0&&(e=na(e,t[0])),n.push(e)}),0===n.length&&(n=t),this.layers(n),n}},{key:"serializeLayerConfig",value:function serializeLayerConfig(e){var t=[];return e.length&&e.forEach(function(e){var n=Gf.getSerializedConf(e.mark,e);t.push({mark:e.mark,def:n})}),t}}],[{key:"type",value:function type(){return"polar"}}]),PolarEncoder}(),Hh=function(){function defineProperties(e,t){for(var n=0;n1&&void 0!==arguments[1]?arguments[1]:{},n=e.axisType,r=e.fieldsConfig,i=t.field,a=[],o=Th[n];return t.type=t.type?t.type:Qh(r,i||null),a.push(new o(t)),a}({axisType:e,fieldsConfig:t},n[e])}),r}},{key:"getLayerConfig",value:function getLayerConfig(e,t){var n=[];return t.forEach(function(t){var r=t;[nh,rh,ih].forEach(function(t){if(e[t]&&e[t].field){var n=r.def;r.def instanceof Array?n.forEach(function(n){n.encoding=n.encoding||{},!n.encoding[t]&&(n.encoding[t]={}),n.encoding[t].field=e[t].field}):(n.encoding=n.encoding||{},!n.encoding[t]&&(n.encoding[t]={}),n.encoding[t].field=e[t].field)}}),n.push(r)}),n}},{key:"setCommonDomain",value:function setCommonDomain(e){var t=e.domains,n=e.axes,r=e.encoding;return Object.entries(r).forEach(function(e){if(e[1]&&e[1].field){var r=e[0],i=e[1].field;i&&n[r].forEach(function(n){var r=t[i];!e[1].domain&&n.updateDomain(r)})}}),n}}],[{key:"type",value:function type(){return"retinal"}}]),RetinalEncoder}(),Uh=function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function sliceIterator(e,t){var n=[],r=!0,i=!1,a=void 0;try{for(var o,u=e[Symbol.iterator]();!(r=(o=u.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){i=!0,a=e}finally{try{!r&&u.return&&u.return()}finally{if(i)throw a}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),Wh=void 0;function group_utils_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t0?e[0].map(function(i,a){return new n({type:"header"},{labelManager:r}).source(function getHeaderText(e,t,n){var r="";if(t===n-1&&e.length>n){for(var i=t;i0&&void 0!==arguments[0]?arguments[0]:[];return new Vo(e)}([]),a=(i=i.data(n,r)).enter().append(t).merge(i);return i.exit()&&i.exit().remove(),a},nd=function getBorders(e,t){var n={top:!1,bottom:!1},r={left:!1,right:!1},i={top:!1,bottom:!1,left:!1,right:!1},a=e.rows,o=e.columns,u=e.values,c=Uh(a,2),s=c[0],l=c[1],f=Uh(o,2),h=f[0],d=f[1],p=t.fieldInfo(),y=p.rowDimensions,g=p.columnDimensions,v=p.rowTemporalFields,m=p.columnTemporalFields,b=p.columnMeasures,_=p.rowMeasures,x=y.length+g.length,w=_.length+b.length,k=v.length+m.length;if("polar"===t.constructor.type()){if(!x)return{showRowBorders:n,showColBorders:r,showValueBorders:i}}else if(!w&&!k&&x<=2)return{showRowBorders:n,showColBorders:r,showValueBorders:i};return n=function getRowBorders(e,t){var n={top:!1,bottom:!1};return(e.length>1||t.length>1)&&(n.top=!0,n.bottom=!0),n}(s,l),r=function getColumnsBorders(e,t){var n={left:!1,right:!1};return(e.length||t.length)&&(e[0]&&e[0].length>1||t[0]&&t[0].length>1)&&(n.left=!0,n.right=!0),n}(h,d),i=function getValueBorders(e,t){var n={top:!0,left:!0,bottom:!0,right:!0},r=[ah,oh],i=["top","bottom"];return e.forEach(function(e,t){e[0]&&e[0].length?n[r[t]]=!0:n[r[t]]=!1}),t.forEach(function(e,t){e.length?n[i[t]]=!0:n[i[t]]=!1}),n}([s,l],[h,d]),u.length>1&&(i.top=!0,i.bottom=!0),u.length&&u[0].length>1&&(i.left=!0,i.right=!0),{showRowBorders:n,showColBorders:r,showValueBorders:i}};function action_behaviour_map_defineProperty(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var rd=(action_behaviour_map_defineProperty(qh={},a.DRAG,{behaviours:[u.BRUSH],touch:!1}),action_behaviour_map_defineProperty(qh,a.HOVER,{behaviours:[u.HIGHLIGHT]}),action_behaviour_map_defineProperty(qh,a.LONGTOUCH,{behaviours:[u.SELECT],touch:!0}),action_behaviour_map_defineProperty(qh,a.TOUCHDRAG,{behaviours:[u.BRUSH],touch:!0}),action_behaviour_map_defineProperty(qh,a.CLICK,{behaviours:[u.SELECT],touch:!1}),qh),ad="config",od="data",ud="axes",cd="layerDef",sd="width",ld="height",fd="mount",hd="primaryXAxisUpdated",dd="primaryYAxisUpdated",pd="secondaryXAxisUpdated",yd="secondaryYAxisUpdated",gd="transform",vd="dataDomain",md="layersCreated",bd="fields",_d="timeDiffs",xd="layerAxisIndex";function src_helper_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t2&&void 0!==arguments[2]?arguments[2]:{},r=void 0,i=n.payload,a=n.selectionSet,o=n.propagationFields[t]||{},u=o.fields||[],c=o.append,s=i.criteria,l=e.context,f=l.cachedData()[0],h=l.id(),d=e.sideEffects(),p=e._behaviourEffectMap,y=a.mergedEnter.model,g=f.getFieldsConfig();i.sourceUnit=h,i.action=t,i.sourceCanvas=l.parentAlias();var v=e._propagationBehaviourMap[t]||t,m=[];null===s?r=null:Di(s)?(m=Object.keys(s||{}),r=y?y.project(m):null):(m=s[0],r=y?y.project(m):null);var b=l.facetByFields();if(null!==r&&u.length){var _=r.getData().schema.map(function(e){return e.name});r=function getModelWithFacetData(e,t){var n=e.getData(),r=n.schema,i=n.data,a=[],o=t[0].map(function(e){return{name:""+e,type:ir.FieldType.DIMENSION}}),u=t[1];return i.forEach(function(e){var t={};r.forEach(function(n,r){t[n.name]=e[r]}),o.forEach(function(e,n){t[e.name]=u[n]}),a.push(t)}),new ar.a(a,[].concat(data_propagator_toConsumableArray(r),data_propagator_toConsumableArray(o)))}(r,b),m=c?[].concat(data_propagator_toConsumableArray(_),data_propagator_toConsumableArray(u)):u,r=r.project(m)}var x=!1;m.length&&m.every(function(e){return g[e]&&g[e].def.type===ir.FieldType.MEASURE})&&(x=!0);var w=l.parentAlias();i.action=t;var k=e._actions.behavioural[v],C=!!k&&k.constructor.mutates(),S=function filterFn(e,t){var n=p[e.config.action],r=!e.config.groupId||n.some(function(e){return d[e.name||e].constructor.mutates()});return e.config.groupId!==t.groupId&&r},P=e._actions.behavioural[t],A=!!P&&P.constructor.mutates(),E={payload:i,action:t,criteria:r,isMutableAction:A,propagateInterpolatedValues:x,groupId:w,sourceId:A?w:h,filterFn:S,enabled:function enabled(e,n){return t===v||e.payload.sourceCanvas===n.context.parentAlias()}};f.propagate(r,E,!0),t!==v&&(E={payload:i,sourceId:C?w:h,criteria:r,isMutableAction:C,propagateInterpolatedValues:x,action:v,groupId:w,applyOnSource:t===v,enabled:function enabled(e,t){return e.payload.sourceCanvas!==t.context.parentAlias()},filterFn:S},f.propagate(r,E,!0,{filterImmutableAction:function filterImmutableAction(e,t){return e.groupId!==t.groupId}}))},Xd=function(){function defineProperties(e,t){for(var n=0;n1){var u=r[0].config();if("linear"===r[0].constructor.type()){if(u.alignZeroLine){r.forEach(function(e){return e.config({nice:!1})});var c=function getAdjustedDomain(e,t){var n=e[0]/(e[0]-t[0]),r=e[1]/(e[1]-t[1]),i=!1;return t[0]>0&&t[1]>0&&t[1]>0&&e[1]>0&&(i=!0,t[0]=0,t[1]=0),t[0]<0&&t[1]<0&&t[1]<0&&e[1]<0&&(i=!0,e[0]=0,e[1]=0),i||n===r||(n1&&void 0!==arguments[1]?arguments[1]:{},n=[],r=e;if(null===e)return[];var i=this.layers(),a=i.length;Di(e)&&(r=[Object.keys(e)],r=[].concat(visual_unit_toConsumableArray(r),visual_unit_toConsumableArray(function transposeArray(e){return e[0].map(function(t,n){return e.map(function(e){return e[n]})})}(Object.values(e)))));for(var o=0;o1&&void 0!==arguments[1]?arguments[1]:[]].map(function(e){return e.reduce(function(e,t){return e=[].concat(matrix_model_toConsumableArray(e),matrix_model_toConsumableArray(t.getMembers()))},[])})},ep=function createSelectedDataModel(e,t,n){return e.select(function(e){return t.every(function(t,r){return e[t].value===n[r]})})},tp=function uniqueKeyGenerator(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:[],i=t.facets,a=t.dataModel,o=t.uniqueValues;if(i[n+1]){var u=i[n];o.forEach(function(t){var o=a.select(function(e){return e[u].value===t}),c=Zh(o,i[n+1]);uniqueKeyGenerator(e,{facets:i,dataModel:o,uniqueValues:c},n+1,[].concat(matrix_model_toConsumableArray(r),[t]))})}else o.forEach(function(t){e.push([].concat(matrix_model_toConsumableArray(r),[t]))})},np=function projectRows(e,t){var n=t.allColumnProjections,r=t.rowProjections,i=t.optionalProjections;return r.length>0?r.map(function(t){var r=Jd(t,n),a=Zd(r,2),o=a[0],u=a[1];return e.project([].concat(matrix_model_toConsumableArray(o),matrix_model_toConsumableArray(u),matrix_model_toConsumableArray(i)))}):[e]},rp=function pushToMatrix(e,t){var n,r=[],i=e.matrix,a=e.datamodel,o=e.facetInfo,u=e.fieldInfo,c=u.rowProjections,s=u.colProjections,l=u.optionalProjections,f=o.rowIndex,h=o.columnIndex,d=c[f%c.length]||[];s.length>0?r=s.map(function(e,n){var r=Jd(e,d),i=Zd(r,2),u=i[0],c=i[1],p=a.project([].concat(matrix_model_toConsumableArray(u),matrix_model_toConsumableArray(c),matrix_model_toConsumableArray(l))),y={rowFields:d,columnFields:e},g={rowIndex:f,columnIndex:h*s.length+n};return t(p,{projections:y,indices:g},o)}):r=[t(a,{projections:{rowFields:d,columnFields:[]},indices:{rowIndex:f,columnIndex:h}},o)];i[f]=i[f]||[],(n=i[f]).push.apply(n,matrix_model_toConsumableArray(r))},ip=function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function sliceIterator(e,t){var n=[],r=!0,i=!1,a=void 0;try{for(var o,u=e[Symbol.iterator]();!(r=(o=u.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){i=!0,a=e}finally{try{!r&&u.return&&u.return()}finally{if(i)throw a}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}();function cell_creator_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t0?d.length:1):(a=g,o=p.length>0?p.length:1),s.length&&f===u&&l&&a.length){var h={axis:l,length:o,type:u},v=[];i<2?(h.keys=a,h.facetConfig=c.rows,v=up(h,r,t,n)):(h.facetConfig=c.columns,h.keys=a[0].map(function(e,t){return a.map(function(e){return e[t]})}),v=up(h,r,t,n)),r[u+"Headers"]=v}else r[u+"Headers"]=null}),r},sp=function computeMatrices(e,t){var n=e.resolver,r=e.datamodel,i=e.componentRegistry,a=e.encoders,o=t.globalConfig,u=t.selection,c=t.transform,s=o.autoGroupBy,l=n.dependencies().smartlabel,f=r.getFieldsConfig(),h=n.layerConfig(),d=n.registry(),p=n.horizontalAxis().fields,y=n.verticalAxis().fields,g=n.optionalProjections(t,h),v=n.getAllFields(),m={normalizedColumns:y,normalizedRows:p,facetsAndProjections:v,layers:h,fieldMap:f,otherEncodings:g,encoders:a,facetConfig:o.facetConfig||{},axisFrom:o.axisFrom||{},selection:u},b={GeomCell:n.getCellDef(d.GeomCell),AxisCell:n.getCellDef(d.AxisCell),BlankCell:n.getCellDef(d.BlankCell),TextCell:n.getCellDef(d.TextCell)},_=Yh(p),x=Yh(y);n.colCells({}),n.rowCells({}),n.datamodelTransform(c||{}),n.resetSimpleAxes();var w={exitCellMap:n.cacheMaps().entryCellMap,entryCellMap:new Map};n.cacheMaps(w);var k={config:o,suppliedLayers:a.simpleEncoder.serializeLayerConfig(n.layerConfig()),resolver:n,cell:b.GeomCell,encoder:a.simpleEncoder,newCacheMap:w,detailFields:t.detail},C=r.getFieldsConfig(),S=r;if(!s.disabled){var P=function extractFields(e,t){var n,r=Object.values(e).map(function(e){var t,n,r=(t=[]).concat.apply(t,group_utils_toConsumableArray(e));return(n=[]).concat.apply(n,group_utils_toConsumableArray(r.map(function(e){return e instanceof _h?e.getMembers():e})))});return(n=[]).concat.apply(n,group_utils_toConsumableArray(r).concat(group_utils_toConsumableArray(t)))}(v,function getFieldsFromSuppliedLayers(e,t){var n,r=[],i=e.map(function(e){return e.encoding||{}});return r=(r=[].concat(group_utils_toConsumableArray(r),[(n=[]).concat.apply(n,group_utils_toConsumableArray(i.map(function(e){return Object.values(e).map(function(e){return e.field})})))])).filter(function(e){return t[e]&&t[e].def.type===ir.FieldType.DIMENSION})}(k.suppliedLayers,r.getFieldsConfig())),A=P.filter(function(e){return C[e]&&C[e].def.type===ir.FieldType.DIMENSION}),E=s.measures;S=r.groupBy(A.length?A:[""],E).project(P)}var M=function getMatrixModel(e,t,n){var r=[],i=[],a=[],o=[],u=[],c=[],s=t.rowFacets,l=t.colFacets;if(t.colProjections.forEach(function(e){o.push.apply(o,matrix_model_toConsumableArray(e))}),t.allColumnProjections=o,s.length>0){var f=s[0].toString(),h=Zh(e,f);tp(i,{facets:s,dataModel:e,uniqueValues:h}),i.forEach(function(n){var i,a=Jd(s),o=Zd(a,1)[0],u=ep(e,o,n);c.push([s,n]),(i=r).push.apply(i,matrix_model_toConsumableArray(np(u,t)))})}else{var d;(d=r).push.apply(d,matrix_model_toConsumableArray(np(e,t)))}if(r=r.length>0?r:[[]],l.length>0){var p=l.map(function(e){return""+e}),y=p[0],g=Zh(e,y);tp(a,{facets:p,dataModel:e,uniqueValues:g}),r.forEach(function(r,i){c[i]=c[i]||[[],[]],a.forEach(function(a,o){u[i]=u[i]||[];var s=r instanceof ar.a?r:e,f=ep(s,p,a),h={matrix:u,datamodel:f,facetInfo:{rowFacets:c[i],colFacets:[l,a],rowIndex:i,columnIndex:o},fieldInfo:t};rp(h,n)})})}else r.forEach(function(r,i){c[i]=c[i]||[[],[]];var a={matrix:u,datamodel:r||e,facetInfo:{rowFacets:c[i],colFacets:[[],[]],rowIndex:i,columnIndex:0},fieldInfo:t};rp(a,n)});var v=a.length>0?a[0].map(function(e,t){return a.map(function(e){return e[t]})}):a;return{matrix:u,rowKeys:i,columnKeys:v}}(S,v,n.valueCellsCreator(k));n.cacheMaps().exitCellMap.forEach(function(e){e.remove()}),n.cacheMaps().exitCellMap.clear(),n.valueMatrix(M.matrix),n.createUnits(i,t);var O=function mutateAxesFromMap(e,t){var n=null,r=null,i=e.xAxesMap,a=e.yAxesMap,o=t.x,u=t.y;return o&&o.forEach(function(e){var t=i.get(e);(n=n||[]).push(t)}),u&&u.forEach(function(e){var t=a.get(e);(r=r||[]).push(t)}),{xAxes:n,yAxes:r}}(n.cacheMaps(),n.axes()),T=O.xAxes,F=O.yAxes;n.axes({x:T,y:F});var N=function generateMatrices(e,t,n,r){var i=e.unitHeight,a=e.unitWidth,o=e.facetsAndProjections,u=e.normalizedRows,c=e.normalizedColumns,s=e.selection,l=e.axisFrom,f=e.facetConfig,h=e.encoders,d=cp({fields:{rows:u,columns:c},matrices:t,facetsAndProjections:o,selection:s,axisFrom:l,facetConfig:f,encoders:h},n,r),p=d.columnsPrimary,y=d.columnsSecondary,g=d.rowsPrimary,v=d.rowsSecondary,m=d.leftHeaders,b=d.topHeaders,_=d.bottomHeaders,x=d.rightHeaders,w=[g,v,p,y].map(function(e){return e?e.getObjects():[]}),k=ip(w,4),C=k[0],S=k[1],P=k[2],A=k[3],E=[m,x].map(function(e){return e?e.getObjects().map(function(e){return e.getObjects()}):[]}),M=ip(E,2),O=M[0],T=M[1],F=O.length?O.map(function(e,t){return C[t]=C[t]?[C[t]]:[],[].concat(cell_creator_toConsumableArray(e),cell_creator_toConsumableArray(C[t]))}):C?C.map(function(e){return[e]}):[],N=S.length?S.map(function(e,t){return[e].concat(cell_creator_toConsumableArray(T[t]||[]))}):T.length?T.map(function(e){return[].concat(cell_creator_toConsumableArray(e))}):[],j=[];b&&b.getObjects().forEach(function(e){e.getObjects().forEach(function(e,t){j[t]=j[t]||[],j[t].push(e)})});P.length&&j.push(P);var I=[];A.length&&I.push(A);var D=I.length;_&&_.getObjects().forEach(function(e){e.getObjects().forEach(function(e,t){I[t+D]=I[t+D]||[],I[t+D].push(e)})});if(!F.length&&!N.length){var L=new n.BlankCell;L.setAvailableSpace(a,i),F=[[L]]}if(!(j.length||I.length&&I[0].length)){var R=new n.BlankCell;R.setAvailableSpace(a,i),I=[[R]]}return{rows:[F,N],columns:[j,I],selectionObj:d}}(m,{valuesMatrix:M,axesMatrix:n.axes()},b,l),j=N.rows,I=N.columns,D=N.selectionObj;return n.rowMatrix(j),n.columnMatrix(I),{rows:n.rowMatrix(),columns:n.columnMatrix(),values:n.valueMatrix(),isColumnSizeEqual:x,isRowSizeEqual:_,selection:D,dataModels:{groupedModel:S,parentModel:r}}},lp=function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function sliceIterator(e,t){var n=[],r=!0,i=!1,a=void 0;try{for(var o,u=e[Symbol.iterator]();!(r=(o=u.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){i=!0,a=e}finally{try{!r&&u.return&&u.return()}finally{if(i)throw a}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),fp=function(){function defineProperties(e,t){for(var n=0;n0?d[0].map(b):[],right:p.length>0?p[0].map(b):[]},w=[ah,oh].map(function(e){return g.map(function(t,n){return n===g.length-1?_[e]:x[e]})}),k=lp(w,2),C=k[0],S=k[1];if(0===g.length){var P=[ah,oh].map(function(e){return v.map(function(t,n){return 0===n?_[e]:x[e]})}),A=lp(P,2);r=A[0],i=A[1]}else r=v.map(function(){return d.length>0?d[0].map(b):[]}),i=v.map(function(){return p.length>0?p[0].map(b):[]});return s.notify({client:[C,S,r,i],action:"initialized",formalName:"facet-headers"}),{topLeft:C,topRight:S,bottomLeft:r,bottomRight:i}}},{key:"getMatrices",value:function getMatrices(e,t,n,r){return sp({datamodel:e,componentRegistry:n,encoders:r,resolver:this},t)}}]),MatrixResolver}(),dp=function(){function defineProperties(e,t){for(var n=0;n3&&void 0!==arguments[3]?arguments[3]:{},i=void 0,a=e.context.constructor.type(),o=r.payload,u=e.context.data(),c=e.context.metaData(),s=c.getData().schema[0].type,l={},f=e.context._id;l.action=Pp[t]||t,l.sideEffects=Ep[t],l.sourceCanvas=e.context.canvasAlias();var h=e._actions.behavioural[l.action].constructor.mutates();if(null===o.criteria)i=null;else{var d=n.mergedEnter,p=u.filter(function(e){return-1!==d.uids.indexOf(e.id)}).map(function(e){return e.value});if("step"===a||"discrete"===a&&"measure"===s){var y=Object.keys(o.criteria||{})[0];i=(p=u.filter(function(e){return-1!==d.uids.indexOf(e.id)}).map(function(e){return e.range})).length?c.select(function(e){for(var t=!1,n=0;n=p[n][0]&&e[y].value<=p[n][1]);n++);return t},{saveChild:!1}):null}else"gradient"===a?i=ca(c,o.criteria):p.length?i=function assembleModelFromIdentifiers(e,t){var n=[],r=void 0,i=e.getFieldsConfig();return t.length?function(){for(var e=t[0],a=e.length,o=0;o=s+l?[i.invert(s+l-c),i.invert(s+l)]:f-l1&&void 0!==arguments[1]?arguments[1]:{},i=t.config().classPrefix;e.mergedEnter.length||e.mergedExit.length?(n(e.mergedExit,r.className||i+"-legend-brighten",!1),n(e.mergedExit,r.className||i+"-legend-fadeout",!0),n(e.mergedEnter,r.className||i+"-legend-fadeout",!1)):n(e.completeSet,r.className||i+"-legend-fadeout",!1)},brighten:function brighten(e){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},i=t.config().classPrefix;e.mergedEnter.length||e.mergedExit.length?(n(e.mergedEnter,r.className||i+"-legend-brighten",!0),n(e.mergedExit,r.className||i+"-legend-brighten",!1)):n(e.completeSet,r.className||i+"-legend-brighten",!1)}}},Vp=function(){function defineProperties(e,t){for(var n=0;n2&&void 0!==arguments[2]?arguments[2]:{};(0,this._strategies[n.strategy||this._strategy])(e,this)}}],[{key:"formalName",value:function formalName(){return"highlighter"}}]),LegendHighlighter}(),Wp={config:{sanitization:function sanitization(e,t){return na(e._config||{},t)}},data:{},fieldName:{},legendContainer:{},measurement:{sanitization:function sanitization(e,t){var n=na(e._measurement,t);return["padding","border","margin"].forEach(function(e){n[e]=Math.min(n[e]>0?n[e]:0,.1*n.maxWidth,.1*n.maxHeight)}),n}},logicalSpace:{},metaData:{},range:{sanitization:function sanitization(e,t){return e.scale().range(t),e.resetLogicalSpace(),e.store().commit("range",t),t}},scale:{},smartTicks:{},store:{},title:{sanitization:function sanitization(e,t){return na(e._title||{},t)}}},qp="horizontal",Gp="vertical",Yp={height:30,width:30,maxWidth:1/0,maxHeight:1/0,padding:2,margin:2,border:1},Xp={text:"",orientation:function orientation(e){return"left"===e||"right"===e?"left":"center"}},Kp={classPrefix:"muze",formatter:{bounds:{lower:"less than",upper:"more than"}},item:{text:{orientation:"right",width:10,formatter:function formatter(e){return e}},icon:{className:"legend-icon",height:20,width:20,color:"rgba(0,0,0,.5)",type:"square"}}},$p=function ICON_MAP(e){return e&&"string"==typeof e?pa(e):e};function legend_helper_defineProperty(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var Qp=function getScaleInfo(e){var t=e.constructor.type();return{scaleType:t,domain:e.uniqueValues(),steps:e.config().stops||1,scaleFn:Mp[t]}},Zp=function getInterpolatedData(e,t){for(var n=[],r=ia()(e[0],e[1]),i=0;i<=t;i++)n[i]=r(i/t);return n},Jp=function getDomainBounds(e,t,n){var r,i=t.scaleFn,a=t.scaleType,o=t.scale,u=n.domain,c=n.domainBounds,s=n.domainLeg,l=n.steps,f=u["lower"===e?0:u.length-1],h=l["lower"===e?0:l.length-1];return legend_helper_defineProperty(r={},a,"size"===a?o[i](f)*o.getScaleFactor():o[i](f)),legend_helper_defineProperty(r,"value",c[e]),legend_helper_defineProperty(r,"id","lower"===e?0:s.length+2),legend_helper_defineProperty(r,"range",[f,h]),r},ey=function(){function defineProperties(e,t){for(var n=0;n0?1.25*h.height:0,p=h.width,y=this.getLabelSpaces(s,c),g=function computeItemSpaces(e,t,n){var r=0,i=0,a={width:0,height:0},o=t.effPadding,u=t.titleWidth,c=t.labelSpaces,s=t.titleHeight,l=t.maxWidth,f=e.item,h=e.align,d=f.icon,p=f.text.orientation,y=[],g=[],v=0;return c.forEach(function(e,t){var c={width:0,height:0},s={width:0,height:0},l=n[t]||{};"left"===p||"right"===p?(e.width+=o,s.width=(l.size?2*Math.sqrt(l.size/Math.PI):d.width)+o,v=Math.max(s.width,v),c.width=e.width+v,e.height=Math.max(e.height,d.height)+o,s.height=e.height,c.height=e.height):(e.width=Math.max(e.width,l.size?2*Math.sqrt(l.size/Math.PI):d.width)+o,s.width=e.width,c.width=e.width,v=Math.max(s.width,v),e.height+=o,s.height=d.height+o,c.height=e.height+s.height),"horizontal"===h?r=Math.max(r,c.height):(r+=c.height,i=Math.max(i,c.width,u)+o),a={width:Math.max(c.width,a.width),height:Math.max(c.height,a.height)},y.push(c),g.push(s)}),y.forEach(function(e,t){"horizontal"===h?(e.height=r,g[t].width=v,"left"===p||"right"===p?(c[t].height=r,g[t].height=r,y[t].width=c[t].width+v):(c[t].width=v,y[t].width=v,c[t].width=v),i=Math.max(i+y[t].width,u)):(e.width=Math.max(i,l),"top"===p||"bottom"===p?(c[t].width=i,g[t].width=i,v=i):(g[t].width=v,y[t].width=c[t].width+v,c[t].width=a.width-v,i=Math.max(i,e.width,u)+o))}),{totalHeight:r+=s+o,totalWidth:i,itemSpaces:y,iconSpaces:g,maxItemSpaces:a,maxIconWidth:v}}(this.config(),{effPadding:s,titleWidth:p,labelSpaces:y,titleHeight:d,maxWidth:r,maxHeight:i},this.data()),v=g.totalHeight,m=g.totalWidth,b=g.itemSpaces,_=g.iconSpaces,x=g.maxItemSpaces,w=g.maxIconWidth;return this.measurement({width:Math.max(m,t)+f+l,height:Math.max(v,n)+f+l,labelSpaces:y,iconSpaces:_,itemSpaces:b,maxItemSpaces:x,maxIconWidth:w,titleSpaces:{width:Math.min(r,this.measurement().width)-f-l,height:d}}),this}},{key:"getTitleSpace",value:function getTitleSpace(){return this._labelManager.setStyle(Lo(Ao("body"),this.config().classPrefix+"-legend-title")),this._labelManager.getOriSize(this.title().text?this.title().text:"")}},{key:"renderTitle",value:function renderTitle(e){var t=this.measurement(),n=t.titleSpaces,r=t.border,i=t.padding;return function titleCreator(e,t,n,r){return Eo(e,"div",[1],r.classPrefix+"-legend-title").style("width","100%").style("height",n.height+"px").style("padding-left",n.padding+"px").style("padding-right",n.padding+"px").style("border-bottom-width",n.border+"px").style("text-align",t.orientation instanceof Function?t.orientation(r.position):t.orientation).text(t.text).node()}(e,this.title(),{height:n.height,border:r,padding:i},this.config())}},{key:"render",value:function render(){var e=this.firebolt(),t=this.config().classPrefix,n=this.measurement(),r=n.maxWidth,i=n.maxHeight,a=n.width,o=n.height,u=n.margin,c=n.border,s=Eo(Ao(this.mount()),"div",[1],t+"-legend-box");return s.classed(t+"-legend-box-"+this._id,!0),s.style("float","left"),s.style("width",Math.min(r,a)-2*u+"px").style("height",Math.min(i,o)-2*u+"px").style("margin",u+"px").style("border-width",c+"px"),this.legendContainer(s.node()),this.renderTitle(s),e.createSelectionSet(this.data().map(function(e){return e.id})),s}},{key:"getCriteriaFromData",value:function getCriteriaFromData(e){var t=this.fieldName();return"measure"===this.metaData().getData().schema[0].type?function simple_legend_defineProperty(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}({},t,e.range):[[t],[e.value]]}}],[{key:"create",value:function create(e){return new SimpleLegend(e)}},{key:"defaultConfig",value:function defaultConfig(){return Kp}},{key:"defaultMeasurement",value:function defaultMeasurement(){return Yp}}]),SimpleLegend}();function position_config_defineProperty(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var oy=(position_config_defineProperty(ty={},"horizontal",{datasets:function datasets(e){return{row:[1],column:e}},itemContainerMeasures:function itemContainerMeasures(e){var t=e.itemSpaces;return{row:{width:e.width+"px",padding:"0px"},column:{width:function width(e,n){return t[n].width+"px"},padding:"0px"}}},getStepSpacesInfo:function getStepSpacesInfo(e){var t=e.maxItemSpaces;return{iconHeight:e.height,iconWidth:t.width,stepPadding:{horizontal:!0,vertical:!1}}}}),position_config_defineProperty(ty,"vertical",{datasets:function datasets(e){return{row:e,column:function column(e){return[e]}}},itemContainerMeasures:function itemContainerMeasures(e,t){var n=e.width;return{row:{width:n+"px",padding:t.padding+"px"},column:{width:n+"px",padding:"0px"}}},getStepSpacesInfo:function getStepSpacesInfo(e){var t=e.maxItemSpaces,n=e.width;return{iconHeight:t.height,iconWidth:n,stepPadding:{horizontal:!1,vertical:!0}}}}),ty),uy=(position_config_defineProperty(ny={},"left",oy.vertical),position_config_defineProperty(ny,"right",oy.vertical),position_config_defineProperty(ny,"top",oy.horizontal),position_config_defineProperty(ny,"bottom",oy.horizontal),ny),cy=(position_config_defineProperty(ry={},"left","end"),position_config_defineProperty(ry,"right","start"),position_config_defineProperty(ry,"top","center"),position_config_defineProperty(ry,"bottom","center"),ry),sy=(position_config_defineProperty(iy={},"left",[Op,"shape"]),position_config_defineProperty(iy,"right",["shape",Op]),position_config_defineProperty(iy,"top",[Op,"shape"]),position_config_defineProperty(iy,"bottom",["shape",Op]),iy),ly=function createLegendSkeleton(e,t,n,r){var i,a,o,u,c=e.measurement(),s=c.margin,l=c.border,f=c.titleSpaces,h=c.width,d=c.height,p=c.maxWidth,y=c.maxHeight;a=d-(f.height+2*s+2*l),i=h-(2*s+2*l),o=y-(f.height+2*s+2*l),u=p-(2*s+2*l);var g=Eo(t,"div",[1],n+"-legend-body");return g.select("."+n+"-legend-overflow").remove(),u&&u4)}(u)?u:$p(u).size(o)(),Eo(a,"path",function(e){return[e]}).attr("d",l)}}return e[1]="circle",createShape(e,t,"circle")}(n,Eo(l,"g",[n[1]],i+"-legend-icon"),n[3]?"circle":"square",o,a).attr("transform","translate("+(u/2-c)+" "+a/2+")").attr("fill",n[2]||s):Eo(l,"rect",[n[1]],i+"-legend-icon").attr("x",0).attr("y",0).attr("width",u).attr("height",a).attr("fill",n[2]||s)},py=function(){function defineProperties(e,t){for(var n=0;na[a.length-1]&&t.push(i[1])):t=Zp(i,a-1),(t=[].concat(gradient_legend_toConsumableArray(new Set(t))).sort(function(e,t){return e-t})).map(function(n,i){var a,u=t[i];return gradient_legend_defineProperty(a={},r,"size"===r?e[o](n)*e.getScaleFactor():e[o](Math.floor(n))),gradient_legend_defineProperty(a,"value",+u.toFixed(2)),gradient_legend_defineProperty(a,"id",i),a}).filter(function(e){return null!==e.value})}},{key:"getLabelSpaces",value:function getLabelSpaces(e){this.config({item:{text:{orientation:this.config().position}}});var t=function createAxis(e){var t=e.data(),n=e.config().align,r=e._cells.AxisCell,i=new Qs({id:"legend-"+e._id,orientation:n===Gp?"right":"bottom",style:e._computedStyle,nice:!1,showAxisName:!1,tickValues:t.map(function(e){return e.value}),fixedBaseline:!1},{labelManager:e._labelManager});return i.domain(gy(t)),i.range([1,1]),(new r).source(i).config({margin:{left:0,bottom:0,top:0,right:0}})}(this),n=t.getLogicalSpace(),r={width:n.width-e,height:n.height-e},i=t.source().domain().length,a=new Array(i).fill(r);return this.axis(t),a}},{key:"getDrawingContext",value:function getDrawingContext(){return{svgContainer:this._legendGradientSvg}}},{key:"render",value:function render(){var e=this.firebolt(),t=function get(e,t,n){null===e&&(e=Function.prototype);var r=Object.getOwnPropertyDescriptor(e,t);if(void 0===r){var i=Object.getPrototypeOf(e);return null===i?void 0:get(i,t,n)}if("value"in r)return r.value;var a=r.get;return void 0!==a?a.call(n):void 0}(GradientLegend.prototype.__proto__||Object.getPrototypeOf(GradientLegend.prototype),"render",this).call(this,this.mount());return function renderGradient(e,t){var n,r,i=e.config(),a=i.align,o=i.classPrefix,u=i.item,c=e.data(),s=vy(t,o,c),l=s.legendContainer,f=s.legendGradSvg,h=s.legendGradCont,d=s.linearGradient,p=s.legendRect,y=e.axis().source().getAxisDimensions().tickLabelDim,g=e.measurement(),v=g.padding,m=g.margin,b=g.border,_=g.titleSpaces,x=g.maxHeight,w=g.maxWidth,k=g.height,C=g.width,S={};n=Math.floor(k-(_.height+2*m+2*b)),r=Math.floor(C-(2*m+2*b)),a===qp?(S.height=u.icon.height,S.width=r-2*v-y.width/2,d.attr("x2","100%").attr("y1","0%"),h.attr("transform","translate( "+y.width/2+" 0)"),my(e,l,n-u.icon.height-v,r-2*v-1),l.classed(o+"-overflow-x",C>w),Mo(l,{height:k+"px",width:Math.min(C,w)+"px",padding:v+"px"}),p.attr("height",S.height),p.attr("width",S.width-y.width/2)):(S.height=n-2*v-y.height/2,S.width=u.icon.width,d.attr("x2","0%").attr("y1","100%"),h.attr("transform","translate(0 "+y.height/2+")"),my(e,l,n-2*v-1,r-u.icon.width-2*v),l.classed(o+"-overflow-y",k>x),Mo(l,{height:Math.min(k,x)+"px",width:C+"px",padding:v+"px"}),p.attr("height",S.height-y.height/2),p.attr("width",S.width)),Mo(f,{height:S.height+"px",width:S.width+"px"}),Mo(p,{fill:"url(#linear-gradient)"}),f.attr("height",S.height),f.attr("width",S.width),e.measurement({gradientDimensions:S}),e._legendGradientSvg=f}(this,t),t.selectAll("div").style("float","left"),e.mapActionsAndBehaviour(),e.createSelectionSet(this.data().map(function(e){return e.id})),t}},{key:"getCriteriaFromData",value:function getCriteriaFromData(e){return[[this.fieldName()],[e.value]]}}],[{key:"create",value:function create(e){return new GradientLegend(e)}},{key:"type",value:function type(){return"gradient"}}]),GradientLegend}(),xy=function(){function defineProperties(e,t){for(var n=0;na[a.length-1]&&(c.upper=[u.bounds.upper+" "+a[a.length-1]])):t=Zp(i,a),t=(t=[].concat(step_legend_toConsumableArray(new Set(t))).sort(function(e,t){return e-t})).map(function(n,i){var a,u=null;return i0&&void 0!==arguments[0]?arguments[0]:{},t=this._registrableComponents,n=na(na({},function defaultPolicy(e){var t=e.map(function(e){return e.alias()});return{behaviours:{"*":function _(e){var n=e.sourceCanvas;return!n||-1!==t.indexOf(n)}}}}(t)),e);return t.forEach(function(e){e.firebolt().crossInteractionPolicy(n)}),this}}]),ActionModel}()),Ny={classPrefix:"muze",interaction:{sideEffect:"individual"},legend:{position:"right",color:{show:!0,padding:2,margin:2,border:1,height:30,width:30},shape:{show:!0,padding:2,margin:2,border:1,height:30,width:30},size:{show:!0,padding:2,margin:2,border:1,height:30,width:30}},showHeaders:!1,minWidth:100,minHeight:100,border:{style:"solid",color:"#d6d6d6",width:2,collapse:!0,spacing:0},autoGroupBy:{disabled:!1}},jy={data:{value:null,meta:{typeCheck:function typeCheck(e){return e instanceof ar.a}}},width:{value:0,meta:{sanitization:Qi,typeCheck:Number.isInteger}},height:{value:0,meta:{sanitization:Qi,typeCheck:Number.isInteger}},minUnitWidth:{value:50,meta:{sanitization:Qi,typeCheck:Number.isInteger}},minUnitHeight:{value:50,meta:{sanitization:Qi,typeCheck:Number.isInteger}},config:{value:null,meta:{typeCheck:"constructor",typeExpected:"Object",sanitization:function sanitization(e,t){var n=na({},t),r=na(n,Ny);return na(r,e)}}}},Iy="width",Dy="height",Ly="top",Ry="left",By="right",zy="bottom",Hy="center",Vy="rowLeft",Uy="rowRight",Wy="colBottom",qy="colTop",Gy="rowSpan",Yy="colSpan",Xy="rowRoot",Ky="columnRoot",$y=function(){function defineProperties(e,t){for(var n=0;n1)return e;var f=o[t-1];if(f&&f.valueOf()===e.valueOf()){var h=n[r-1];return h?h[t].valueOf()===h[t-1].valueOf()?null:e:null}return e}return e},ag=function calcRowSpan(e,t,n,r){var i=1;if(!e||"string"!=typeof e.valueOf())return 1;for(var a=!1;!a;)n[r+i]&&null===n[r+i][t]?i+=1:a=!0;return i},og=function calcColSpan(e,t,n,r){var i=1;if(!e||"string"!=typeof e.valueOf())return 1;for(var a=!1;!a;)null===n[r][t+i]?i+=1:a=!0;return i},ug=function mask(e,t){return e.map(function(n,r){if(t===Vy||t===Uy){for(var i=n.map(function(n,i){return ig(n,i,e,r,t)}),a=[],o=n.length-i.length,u=0;u1&&r.setAvailableSpace(0,r.availHeight()),Ao(this).style("height",r.availHeight()+"px"),n}),l.each(function(e){e.placeholder&&e.placeholder.render(this)}).exit().each(function(e){e.placeholder&&e.placeholder.remove()}),applyBorders(l,r.border,n,a)}})}function utils_defineProperty(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function utils_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t0?e[0]:e[1];return n?(r=e[0].length>0?[].concat(utils_toConsumableArray(e[0])):[],r=e[1].length>0?[].concat(utils_toConsumableArray(r),utils_toConsumableArray(e[1])):r):r=r.map(function(t,n){var r=[];return e[0].length>0&&(r=[].concat(utils_toConsumableArray(e[0][n]))),e[1].length>0&&(r=[].concat(utils_toConsumableArray(r),utils_toConsumableArray(e[1][n]))),r}),r},fg=function computeLogicalSpace(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments[1],n=arguments[2],r=t.isTransposed,i=void 0!==r&&r,a=t.unitMeasures,o=function getMeasureInfo(e){return e?{firstMeasure:Dy,secondMeasure:Iy}:{firstMeasure:Iy,secondMeasure:Dy}}(i),u=o.firstMeasure,c=o.secondMeasure,s=e.values,l=function getMinMeasures(e,t){return e?{height:0,width:t.width}:{height:t.height,width:0}}(i,a);if(s[0].key){var f,h=(utils_defineProperty(f={},u,0),utils_defineProperty(f,c,0),f);return s.forEach(function(e){var r=computeLogicalSpace(e,t,n);h[u]=Math.max(h[u],r[u],l[u]),h[c]+=+r[c]}),e.space=h,h}return function getLogicalSpace(e,t,n){var r,i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:[],a=t.firstMeasure,o=t.secondMeasure,u=0,c=0;return e.values.forEach(function(t){var r,s=0,l=0;t.forEach(function(e,t){e.logicalSpace(null);var r=e.getLogicalSpace();l=Math.max(l,+r[o],n[o]),i[t]=Math.max(i[t]||0,r[a]),s+=+i[t]}),c+=l,u=Math.max(u,s),e.space=(utils_defineProperty(r={},o,Math.ceil(c)),utils_defineProperty(r,a,Math.ceil(u)),r)}),utils_defineProperty(r={},o,c),utils_defineProperty(r,a,u),r}(e,{firstMeasure:u,secondMeasure:c},l,n)},hg=function extraCellsRemover(e,t,n){return e.slice(t,-n)},dg={config:{sanitization:function sanitization(e,t){return na(e._config||{},t)}},maxMeasures:{},availableSpace:{},logicalSpace:{}},pg={distribution:[],classPrefix:"muze",isDistributionEqual:!0,unitMeasures:{height:100,width:100,border:1},isTransposed:!1,facet:"primary",extraCellLengths:[]},yg=function(){function defineProperties(e,t){for(var n=0;n1&&void 0!==arguments[1]?arguments[1]:{};!function visual_matrix_classCallCheck(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,VisualMatrix),this._lastLevelKey=0,this._primaryMatrix=e[0]||[],this._secondaryMatrix=e[1]||[],this._maxMeasures=[],this._availableSpace={},Ji(this,dg);var n=Object.assign({},this.constructor.defaultConfig());this.config(na(n,t)),this._breakPointer=this.config().isTransposed?e[0].length:e[0].length>0?e[0][0].length:0,this._layoutMatrix=lg([e[0]||[],e[1]||[]],this.config()),this._tree={key:this.config().isTransposed?Ky:Xy,values:this.createTree()},this._logicalSpace=this.setLogicalSpace()}return yg(VisualMatrix,[{key:"primaryMatrix",value:function primaryMatrix(){return arguments.length?this:this._primaryMatrix}},{key:"secondaryMatrix",value:function secondaryMatrix(){return arguments.length?this:this._secondaryMatrix}},{key:"tree",value:function tree(){return arguments.length?this:this._tree}},{key:"createTree",value:function createTree(){var e=function createTree(e){var t={},n=0,r="primary",i=cg(),a=[],o=e._layoutMatrix,u=e.primaryMatrix(),c=e.secondaryMatrix(),s=e.config(),l=s.isTransposed,f=s.breakPage;if(l){if(r=0===u.length?"primary":0===c.length?"secondary":u.length>=c.length?"primary":"secondary",u.length>0){for(var h=0;h0){for(var d=u.length,p=c.length-1;p>0;p--)a.push(p+d);a.push(d),"primary"===r&&(n=d)}var y;a.forEach(function(e){var t=-1;return i.key(function(n){return t++,n[e].valueOf()+"-"+sg(t,f)})}),y=o[0].map(function(e,t){return o.map(function(e){return e[t]})}),t=i.entries(y)}else{if(r=0===u.length?"primary":0===c.length?"secondary":u.length>=c.length?"primary":"secondary",u.length>0){for(var g=0;g0){for(var v=u.length>0?u[0].length:0,m=c[0].length-1;m>0;m--)a.push(m+v);a.push(v),"primary"===r&&(n=v)}else n=u.length>0?u[0].length-1:0;a.forEach(function(e){var t=-1;return i.key(function(n){return t++,n[e].valueOf()+"-"+sg(t,f)})}),t=i.entries(o)}return{tree:t,lastLevelKey:n}}(this),t=e.tree,n=e.lastLevelKey;return this._lastLevelKey=n,t}},{key:"setLogicalSpace",value:function setLogicalSpace(){var e=this.config().isTransposed,t=this.tree();return function createMatrixEachLevel(e,t){if(e.values[0].key){var n=[];return e.values.forEach(function(e){t?createMatrixEachLevel(e,t).forEach(function(e,t){var r;n[t]=n[t]||[],(r=n[t]).push.apply(r,utils_toConsumableArray(e))}):n.push.apply(n,utils_toConsumableArray(createMatrixEachLevel(e,t)))}),e.matrix=n,n}return e.matrix=t?e.values[0].map(function(t,n){return e.values.map(function(e){return e[n]})}):e.values,e.matrix}(t,e),fg(t,this.config(),this.maxMeasures())}},{key:"getLogicalSpace",value:function getLogicalSpace(){return this.logicalSpace()}},{key:"setAvailableSpace",value:function setAvailableSpace(e,t){this.availableSpace({width:e,height:t});var n=this.tree(),r=this.populateMaxMeasures(Dy,n),i=this.populateMaxMeasures(Iy,n),a=this.calculateDepth(i,r);return this.viewableMatrix=this.createViewPortMatrix(a),this.viewableMeasures=this.redistribute(this.viewableMatrix,e,t),this}},{key:"populateMaxMeasures",value:function populateMaxMeasures(e,t){var n=this,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:[];if(i[r]=Math.max(i[r]||0,t.space[e]),t.values){var a=r+1;t.values.forEach(function(t){t.space&&(i=n.populateMaxMeasures(e,t,a,i))})}return i}},{key:"calculateDepth",value:function calculateDepth(e,t){var n=void 0,r=void 0,i=this.availableSpace(),a=i.height,o=i.width;for(n=0;n0&&void 0!==arguments[0]?arguments[0]:[],t=arguments[1],n=arguments[2],r=arguments[3],i=r._breakPointer,a=r.config().isTransposed,o=n.tree,u=n.layoutMatrix;if(0===t){var c=function breakMatrix(e,t,n){var r=[],i=[];return t?e.forEach(function(e,t){t>=n?i.push(e):r.push(e)}):e.forEach(function(e,t){e.forEach(function(e,a){a>=n?(i[t]=i[t]||[],i[t].push(e)):(r[t]=r[t]||[],r[t].push(e))})}),[r,i]}(o.matrix,a,i);return e.push({matrix:o.matrix,primaryMatrix:c[0],secondaryMatrix:c[1],space:o.space}),e}var s=t-1;return o.values.forEach(function(t){createMatrixInstances(e,s,{tree:t,layoutMatrix:u},r)}),e}(t,e,this.removeExtraCells(),this),t}},{key:"redistributeRowWise",value:function redistributeRowWise(e){var t,n,r=[],i=this.maxMeasures(),a=this.config(),o=a.isDistributionEqual,u=a.distribution,c=a.isTransposed,s=a.gutter,l=e.matrix,f=e.width,h=e.height,d=e.maxHeights,p=e.maxWidths;n=function spaceTakenByColumn(e,t){var n=0,r=0;return e.forEach(function(e){var i=e[t].getLogicalSpace();r=Math.max(r,i.width),n+=i.height}),{width:r,height:n}}(l,this._lastLevelKey).height;var y=i.reduce(function(e,t){return e+=t});return r=y>0?i.map(function(e){return e+e/y*(f-y)}):i.map(function(){return 0}),t=function getDistributedHeight(e){var t,n=0,r=0,i=e.isTransposed,a=e.distribution,o=e.availableHeight,u=e.height,c=e.isDistributionEqual,s=e.gutter,l=e.matrix,f=e.cIdx;a&&void 0!==a[0]&&(n=a.reduce(function(e,t){return e+=t})),s&&void 0!==s[0]&&(r=s.reduce(function(e,t){return e+=t})),t=o-Math.floor(o*r);var h=l.length;return l.map(function(r,o){var s=r[f].getLogicalSpace().height,l=s+s/u*(t-u);return i||(a.length>0&&h===a.length?l=t*a[o]/n:(c||0===e.height)&&(l=t/h)),Math.floor(l)})}({matrix:l,cIdx:this._lastLevelKey,height:n,availableHeight:h,isDistributionEqual:o,distribution:u,isTransposed:c,gutter:s}),p.push(r),d.push(t),{maxWidths:p,maxHeights:d}}},{key:"redistributeColumnWise",value:function redistributeColumnWise(e){var t=[],n=e.matrix,r=e.width,i=e.maxHeights,a=e.maxWidths,o=this.config().unitMeasures.border,u=function spaceTakenByRow(e){var t=0,n=0;return e.forEach(function(e){var r=e.getLogicalSpace();t=Math.max(t,r.height),n+=r.width}),{width:n,height:t}}(n[this._lastLevelKey]).width,c=function getDistributedWidth(e,t){var n=e.availableWidth,r=e.width,i=e.row,a=t.isDistributionEqual,o=t.isTransposed,u=t.distribution,c=0;return u&&u[0]&&(c=u.reduce(function(e,t){return e+=t})),i.map(function(e,t){var s=e.getLogicalSpace().width,l=s+s/r*(n-r);if(o)if(u.length>0)l=n*u[t]/c;else if(a||0===r){var f=i.length;l=n/f}return Math.floor(l)})}({row:n[this._lastLevelKey],width:u,availableWidth:r},this.config());n.forEach(function(e,n){return e.forEach(function(e,r){var i=e.getLogicalSpace().height;e.setAvailableSpace(c[r]-o,i),t[n]=Math.max(t[n]||0,e.getLogicalSpace().height)})}),i.length>0&&(t=t.map(function(e,t){return Math.max(e,i[0][t])})),i.push(t);for(var s=0;s=m&&(r[0][1][n[1]-m]=a[0],i[0][1]=(i[0][1]||0)+a[0]),n[1]===t._lastLevelKey&&(r[1][0][n[0]]=a[1],r[1][1][n[0]]=a[1])})}),{heights:g,widths:v,rowHeights:p,columnWidths:y}}}],[{key:"defaultConfig",value:function defaultConfig(){return pg}}]),VisualMatrix}(),vg=function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function sliceIterator(e,t){var n=[],r=!0,i=!1,a=void 0;try{for(var o,u=e[Symbol.iterator]();!(r=(o=u.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){i=!0,a=e}finally{try{!r&&u.return&&u.return()}finally{if(i)throw a}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}();function layout_helper_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t0&&(n=[].concat(layout_helper_toConsumableArray(w),layout_helper_toConsumableArray(P),layout_helper_toConsumableArray(O))),E.length>0&&(r=[].concat(layout_helper_toConsumableArray(C),layout_helper_toConsumableArray(E),layout_helper_toConsumableArray(F))),k.length>0&&k[0].length>0&&(i=k.map(function(e,t){return[].concat(layout_helper_toConsumableArray(w[t]),layout_helper_toConsumableArray(e),layout_helper_toConsumableArray(C[t]))})),T.length>0&&T[0].length>0&&(a=T.map(function(e,t){return[].concat(layout_helper_toConsumableArray(O[t]),layout_helper_toConsumableArray(e),layout_helper_toConsumableArray(F[t]))})),e.rowMatrix(new gg([n,r],{isDistributionEqual:s,distribution:h.rows,gutter:f.rows,unitMeasures:{width:v,height:g,border:d.width},breakPage:p.rows.map(function(e){return e+Math.max(w.length,C.length)}),extraCellLengths:[w.length,O.length]})),o=w.length>0?w[0].length:O.length>0?O[0].length:0,u=C.length>0?C[0].length:F.length>0?F[0].length:0,e.columnMatrix(new gg([i,a],{isDistributionEqual:l,distribution:h.columns,gutter:f.columns,isTransposed:!0,unitMeasures:{width:v,height:g,border:d.width},breakPage:p.columns,extraCellLengths:[o,u]})),e.centerMatrix(A),t}(this,e),this):function get(e,t,n){null===e&&(e=Function.prototype);var r=Object.getOwnPropertyDescriptor(e,t);if(void 0===r){var i=Object.getPrototypeOf(e);return null===i?void 0:get(i,t,n)}if("value"in r)return r.value;var a=r.get;return void 0!==a?a.call(n):void 0}(GridLayout.prototype.__proto__||Object.getPrototypeOf(GridLayout.prototype),"matrices",this).call(this,e)}},{key:"triggerReflow",value:function triggerReflow(){return function computeLayoutMeasurements(e){var t,n,r,i,a,o=e.rowMatrix(),u=e.columnMatrix(),c=e.centerMatrix(),s=e.measurement(),l=s.width,f=s.height,h=e.config().border,d=e.matrices(),p=d.top,y=d.bottom,g=function getMatrixMeasurement(e,t){return e?e.getLogicalSpace()[t]:0}(o,Iy),v=h.width,m=l-g-v;setMatrixMeasurement(u,Iy,m);var b=u.getViewableSpaces();bg(e,"column",b);var _=b[e.config().columnPointer],x=_.height.primary+_.height.secondary,w=f-x;setMatrixMeasurement(o,Dy,w);var k=o.getViewableSpaces();bg(e,"row",k);var C=(t=[]).concat.apply(t,computations_toConsumableArray(k.map(function(e){return e.rowHeights.primary}))),S=(n=[]).concat.apply(n,computations_toConsumableArray(k.map(function(e){return e.columnWidths.primary}))),P=(r=[]).concat.apply(r,computations_toConsumableArray(k.map(function(e){return e.columnWidths.secondary}))),A=u.getViewableSpaces(),E=(i=[]).concat.apply(i,computations_toConsumableArray(A.map(function(e){return e.columnWidths.primary}))),M=A[0].rowHeights.primary,O=(a=[]).concat.apply(a,computations_toConsumableArray(A.map(function(e){return e.rowHeights.secondary})));c.forEach(function(e,t){e.forEach(function(e,n){e.setAvailableSpace(E[n]-v,C[t]-v)})}),mg(p[0],S,M),mg(p[2],P,M),mg(y[0],S,O),mg(y[2],P,O)}(this),this.setViewInformation(),this}},{key:"gotoPage",value:function gotoPage(e,t){var n=e.toLowerCase(),r=this.getViewInformation().viewMatricesInfo[n+"Pages"],i=Math.min(Math.max(1,t),r);return this.config(function layout_defineProperty(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}({},n+"Pointer",i-1)),this.setViewInformation(),this.renderGrid(),this}},{key:"pages",value:function pages(e){var t=this.getViewInformation().viewMatricesInfo,n=e.toLowerCase();return{totalPages:t[n+"Pages"],currentPage:this.config()[n+"Pointer"]+1}}},{key:"setViewInformation",value:function setViewInformation(){var e=this.config(),t=e.rowPointer,n=e.columnPointer,r=e.border,i=function getViewMatrices(e,t,n){for(var r=e.rowMatrix(),i=e.columnMatrix(),a=e.centerMatrix(),o=e.matrices(),u=r.getViewableData(),c=i.getViewableData(),s={row:0,column:0},l=t-1;l>=0;l--){var f=Math.max(u[l].primaryMatrix.length,u[l].secondaryMatrix.length);s.row+=f}for(var h=n-1;h>=0;h--){var d=c[h],p=d.primaryMatrix,y=d.secondaryMatrix,g=Math.max(p[0]?p[0].length:0,y[0]?y[0].length:0);s.column+=g}o.top[1]=c[n].primaryMatrix,o.bottom[1]=c[n].secondaryMatrix,o.center[0]=u[t].primaryMatrix,o.center[2]=u[t].secondaryMatrix;var v=Math.max(o.center[0].length,o.center[2].length),m=Math.max(o.top[1][0]?o.top[1][0].length:0,o.bottom[1][0]?o.bottom[1][0].length:0);return o.center[1]=a.slice(s.row,s.row+v).map(function(e){return e.slice(s.column,s.column+m)}),{matrices:o,rowPages:u.length,columnPages:c.length}}(this,t,n),a=function getViewMeasurements(e){var t=e.rowMatrix(),n=e.columnMatrix(),r=e.measurement(),i=r.width,a=r.height,o=e.config(),u=o.columnPointer,c=o.rowPointer,s=t.getViewableSpaces()[c].width,l=s.primary,f=s.secondary,h=n.getViewableSpaces()[u].height,d=h.primary,p=h.secondary;return{viewWidth:[l,i-(l+f),f],viewHeight:[d,a-(d+p),p]}}(this);return a.border=r,this.viewInfo={viewMatricesInfo:i,layoutDimensions:a},this}},{key:"getViewInformation",value:function getViewInformation(){return this.viewInfo}},{key:"renderGrid",value:function renderGrid(e){if(this.mountPoint(e),!this.mountPoint())return this;var t=this.getViewInformation(),n=t.viewMatricesInfo,r=t.layoutDimensions;return function renderMatrices(e,t,n){var r=t.top,i=t.center,a=t.bottom,o=e.config().classPrefix,u=e.measurement().width,c=e.mountPoint();Eo(c,"div",[{type:Ly,matrix:r},{type:Hy,matrix:i},{type:zy,matrix:a}],o+"-grid-layout-row").each(function(e,t){var r=Ao(this);r.classed(o+"-grid-layout-row-"+t,!0),renderMatrix(e.matrix,r,e.type,n,o)}).style(Iy,Math.ceil(u)+"px")}(this,n.matrices,r),this}}],[{key:"defaultMeasurement",value:function defaultMeasurement(){return ng}},{key:"defaultConfig",value:function defaultConfig(){return tg}},{key:"create",value:function create(){return new GridLayout(null,null,this.defaultMeasurement(),this.defaultConfig())}}]),GridLayout}(),wg=function(){function defineProperties(e,t){for(var n=0;n0?o:i,v),P=Math.max(u>0?u:a,g),A=function createHeaders(e,t,n){var r=0,i={};return t>=200&&n>=200&&["title","subtitle"].forEach(function(t){var n=e[t](),a=function resolveTitleSubTitleContent(e){return"function"!=typeof e||e._sanitize?function escapeHTML(e){var t={"&":"&","<":"<",">":">",'"':""","'":"'","/":"/"};return(""+e).replace(/[&<>"'/]/g,function(e){return t[e]})}(e()):e()}(n[0]);if(a.length){var o=n[1];o.width=e.width(),o.content=a;var u=lv(o,t,e.dependencies().smartlabel,e[t+"Cell"]),c=u.height,s=u.cell;i[t+"Cell"]=s,e._composition[t]=s,r+=c+o.padding}}),{headerHeight:r,headers:i}}(e,S,P),E=A.headers,M=A.headerHeight,O=function createLegend(e,t,n,r){var i={height:n,width:r,headerHeight:t},a=e.config().legend,o=a.show,u=a.position;a.classPrefix=e.config().classPrefix;var c="left"===u||"right"===u?"vertical":"horizontal";return a.show=o?"vertical"===c&&r>200||"horizontal"===c&&n>200:o,a.align=c,fv(a,e,i,e.legends||[])}(e,M,S,P);e._composition.legend={},O.forEach(function(t){e._composition.legend[t.scaleType]=t.legend});var T=function getLegendSpace(e,t,n,r){var i={width:0,height:0};return e.map(function(e){return e.legend.measurement()}).forEach(function(e){var a,o;o=Math.min(e.width,e.maxWidth),a=Math.min(e.height,e.maxHeight),"horizontal"===t.align?i.width+o>r?(i.width=r,i.height+=a):(i.width+=o,i.height=Math.max(i.height,a)):i.height+a>n?(i.height=a,i.width+=o):(i.height+=a,i.width=Math.max(i.width,o))}),"horizontal"===t.align&&(i.width=r),i}(O,_,S,P),F="left"===k||"right"===k?T.width:0,N="top"===k||"bottom"===k?T.height:0,j={headers:E,legends:O,canvases:[e],rows:h,columns:d,values:p,cornerMatrices:c.cornerMatrices()},I={mountSpace:{height:i,width:a},headerHeight:M,legendSpace:T,canvasWidth:P,canvasHeight:S,width:P-F,height:S-M-N,minUnitHeight:e.minUnitHeight(),minUnitWidth:e.minUnitWidth()};return{layoutConfig:n=na(n,{classPrefix:m,showHeaders:b,border:na(c.metaData().border,e.config().border),layoutArrangement:C,legend:_,title:x,subtitle:w,isColumnSizeEqual:l,isRowSizeEqual:f}),components:j,measurement:I}},dv={position:"top",align:"left",padding:8},pv={position:"top",align:"left",padding:16};function canvas_local_options_defineProperty(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var yv=(canvas_local_options_defineProperty(ov={},"rows",{value:null,meta:{typeCheck:"constructor",typeExpected:"Array"}}),canvas_local_options_defineProperty(ov,"columns",{value:null,meta:{typeCheck:"constructor",typeExpected:"Array"}}),canvas_local_options_defineProperty(ov,"color",{value:null,meta:{typeCheck:"constructor",typeExpected:"Object",sanitization:function sanitization(e){return"string"==typeof e?{field:e}:e}}}),canvas_local_options_defineProperty(ov,"shape",{value:null,meta:{typeCheck:"constructor",typeExpected:"Object",sanitization:function sanitization(e){return"string"==typeof e?{field:e}:e}}}),canvas_local_options_defineProperty(ov,"size",{value:null,meta:{typeCheck:"constructor",typeExpected:"Object",sanitization:function sanitization(e){return"string"==typeof e?{field:e}:e}}}),canvas_local_options_defineProperty(ov,"detail",{value:[],meta:{typeCheck:"constructor",typeExpected:"Array"}}),canvas_local_options_defineProperty(ov,"layers",{value:null,meta:{typeCheck:"constructor",typeExpected:"Array"}}),canvas_local_options_defineProperty(ov,"transform",{value:null,meta:{typeCheck:"constructor",typeExpected:"Object"}}),canvas_local_options_defineProperty(ov,"mount",{value:null,meta:{sanitization:function sanitization(e){return"string"==typeof e?Ao(e).node():e}}}),ov),gv=(canvas_local_options_defineProperty(uv={},"title",{value:[null,null],meta:{typeCheck:["constructor","constructor"],typeExpected:["Function","Object"],spreadParams:!0,sanitization:[function(e){if("string"==typeof e){var n=function t(){return e};return n._sanitized=!0,n}return e},function(e){var t=na({},dv);return na(t,e)}]}}),canvas_local_options_defineProperty(uv,"subtitle",{value:[null,null],meta:{typeCheck:["constructor","constructor"],typeExpected:["Function","Object"],spreadParams:!0,sanitization:[function(e){if("string"==typeof e){var t=function sub(){return e};return t._sanitized=!0,t}return e},function(e){var t=na({},pv);return na(t,e)}]}}),uv),vv=function renderHeader(e,t,n,r){var i=r[n+"Cell"],a=e[""+n],o=a.position,u=a.align,c=a.padding,s=t.selectAll("."+e.classPrefix+"-inner-container").data([n]);s.exit().remove();var l=s.enter().append("div").merge(s);l.classed(e.classPrefix+"-inner-container",!0),i&&i.render(l.node()),l.selectAll("div").classed(e.classPrefix+"-inner-content",!0),l.style("width","100%"),a&&i&&l.style("float","left").style("text-align",u).style("padding-"+("top"===o?"bottom":"top"),c+"px")},mv=function renderComponents(e,t,n,r){var i=e.mount(),a=t.headers,o=t.legends,u=n.classPrefix,c=function getSkeletons(e,t,n){var r=t.layoutArrangement,i=t.classPrefix,a=r.headers,o=r.legends,u=n.canvasWidth,c=n.canvasHeight,s=Ao(e),l={},f=Eo(s,"div",[1],i+"-viz").style("width",u+"px").style("height",c+"px").selectAll("."+i+"-container").data(a);f.exit().remove();var h=f.enter().append("div").merge(f).attr("class",i+"-container").style("width",u+"px").style("padding","nullpx").style("margin",null).each(function(e){l[e]=Ao(this).classed(i+"-"+e+"-container",!0)}).selectAll("."+i+"-inner-container").data(function(e){return"group"===e?o:[]});return h.exit().remove(),h.enter().append("div").merge(h).attr("class",i+"-inner-container").style("width","auto").style("height","auto").each(function(e){l[e]=Ao(this).classed(i+"-"+e+"-container",!0)}),l}(i,n,r),s=c.title,l=c.legend,f=c.subtitle,h=c.layout,d=function prepareGridContainer(e,t,n,r){if(e){var i=t.height,a=t.width,o=Ao(e).selectAll("."+n+"-inner-content").data(["layout"],function(e){return e});o.exit().remove();var u=o.enter().append("div").merge(o).attr("class",n+"-inner-content").classed(n+"-grid-layout",!0).attr("id",n+"-grid-layout-"+r).style("height",i+"px").style("padding",null).style("width",Math.ceil(a)+"px"),c=u.selectAll("."+n+"-layout-grid-container").data(["layout2"]);c.exit().remove();var s=c.enter().append("div").merge(c);return s.classed(n+"-layout-grid-container",!0).attr("id",n+"-layout-grid-container-"+r).style("height",i+"px").style("width",Math.ceil(a)+"px"),{mount:s,container:u}}}(h.node(),r,u,e.alias()).mount,p=e.layout().getViewInformation().layoutDimensions.viewWidth[0];r.padding=p,function setLabelRotationForAxes(e){var t=0,n=e.xAxes()||[];!function(){for(var e=0;ev?(g++,m=0,v=y):g<0&&g++,i[g]=i[g]||[],v-=Math.min(t.measurement().height,v),m=Math.max(Math.min(t.measurement().width,t.measurement().maxWidth),m),i[g].push({legend:t,legendHeight:y,legendWidth:m})});var b=Eo(h,["div"],i,l+"-legend-section").each(function(e,t){return Ao(void 0).classed(l+"-legend-section-"+t,!0)}).classed(l+"-legend-vertical-section",!0).style("width",function(e){return e[0].legendWidth+"px"});Eo(b,["div"],function(e){return e},l+"-legend-components",{},function(e){return e.legend.id()}).each(function(e){e.legend.mount(this)}).style("width",function(e){return e.legendWidth+"px"})}else{var _=Eo(h,"div",[1],l+"-legend-section").classed(l+"-legend-horizontal-section",!0).classed(l+"-legend-section-0",!0).style("width",p+"px");Eo(_,"div",n,l+"-legend-components",{},function(e){return e.legend.id()}).each(function(e){e.legend.mount(this)}).style("width",function(e){return e.legend.measurement().width+"px"})}}(n,l,o,r),function shiftHeaders(e,t,n,r){var i=e.classPrefix,a=e.title,o=e.subtitle,u=e.legend,c=n.legendSpace;t+="left"===u.position?c.width:0,a&&Ao(r).select("."+i+"-title-container").style("width","left"===a.align?"calc(100% - "+t+"px":"100%").style("margin-left","left"===a.align?t+"px":0),o&&Ao(r).select("."+i+"-subtitle-container").style("width","left"===o.align?"calc(100% - "+t+"px":"100%").style("margin-left","left"===o.align?t+"px":0),Ao(r).select("."+i+"-legend-horizontal-section").style("margin-left",t+"px").style("width",c.width-t+"px").selectAll("."+i+"-legend-body, ."+i+"-legend-title").style("max-width",c.width-t+"px"),Ao(r).select("."+i+"-legend-vertical-section").style("margin-left",null).selectAll("."+i+"-legend-body, ."+i+"-legend-title").style("max-width",null)}(n,p,r,i)}),e.composition().visualGroup.matrixInstance().value.each(function(e){e.valueOf().parentContainer(h.node())})};function canvas_helper_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t","\"","'","/","title_maker_resolveTitleSubTitleContent","_createHeading","title_maker_createHeaders","createLegend","legend_maker_createLegend","legendSpace","getLegendSpace","legendInfo","legend_maker_getLegendSpace","legendWidth","legendHeight","canvases","mountSpace","TITLE_CONFIG","SUB_TITLE_CONFIG","localOptions","canvas_local_options_defineProperty","_localOptions","canvasOptions","_sanitized","_canvasOptions","sub","renderer_renderHeader","renderHeader","headerCell","cont","renderComponents","_getSkeletons","getSkeletons","innerContainer","layoutType","renderer_getSkeletons","prepareGridContainer","innerSel","renderer_prepareGridContainer","setLabelRotationForAxes","renderLegend","legendComponents","sectionComponents","legendMount","legWidth","legHeight","sections","currHeight","currWidth","leg","renderer_renderLegend","shiftHeaders","shifter","renderer_shiftHeaders","helper_setupChangeListener","setupChangeListener","allOptions","_allOptions","canvas_helper_toConsumableArray","equalityChecker","option","dispatchProps","_cachedProps","applyInteractionPolicy","policies","firebolt_defaultInteractionPolicy","defaultInteractionPolicy","isMeasure","canvas_firebolt_toConsumableArray","getFieldsFromChannel","colDim","fieldInf","unitFireBolt","unitColFacets","equals","unitRowFacets","propagateWith","defaultCrossInteractionPolicy","propagationCanvasAlias","propagationUnit","canvas_firebolt","GroupFireBolt","canvas_firebolt_classCallCheck","_interactionPolicy","_crossInteractionPolicy","changeBehaviourStateOnPropagation","changeSideEffectStateOnPropagation","canvas_canvas","Canvas","globalDependencies","canvas_classCallCheck","canvas_possibleConstructorReturn","_transactor","canvas_slicedToArray","initedComponents","initCanvas","register","_getRenderDetails","promises","all","getAxes","initialSettings","regEntry","COMPONENTS","SUBREGISTRIES","regObj","globalCache","defaultRegistry","overrideRegistryDefinitions","overrideRegistry","muze_muze","muze","_transactor2","muze_slicedToArray","env","globalStore","componentSubRegistryDef","settings","withSettings","enableChainedTransaction","transactionModel","transactionEndpoint","transactionItems","_slicedToArray","SmartlabelManager_default","SideEffects","standards","SurrogateSideEffect","SpawnableSideEffect","Behaviours","PersistentBehaviour","VolatileBehaviour","DataModel","muze_package","layerFactory","operators_namespaceObject","utils","require","lookupWhat","lookupDetails","lookupTarget","deps","__webpack_exports__"],"mappings":"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","file":"muze.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"muze\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"muze\"] = factory();\n\telse\n\t\troot[\"muze\"] = factory();\n})(window, function() {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 7);\n","!function(e,t){\"object\"==typeof exports&&\"object\"==typeof module?module.exports=t():\"function\"==typeof define&&define.amd?define(\"DataModel\",[],t):\"object\"==typeof exports?exports.DataModel=t():e.DataModel=t()}(window,function(){return function(e){var t={};function n(r){if(t[r])return t[r].exports;var i=t[r]={i:r,l:!1,exports:{}};return e[r].call(i.exports,i,i.exports,n),i.l=!0,i.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(e,\"__esModule\",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&\"object\"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,\"default\",{enumerable:!0,value:e}),2&t&&\"string\"!=typeof e)for(var i in e)n.d(r,i,function(t){return e[t]}.bind(null,i));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,\"a\",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p=\"\",n(n.s=1)}([function(e){e.exports={name:\"datamodel\",description:\"Relational algebra compliant in-memory tabular data store\",homepage:\"https://github.com/chartshq/datamodel\",version:\"2.0.2\",license:\"MIT\",main:\"dist/datamodel.js\",author:\"Charts.com \",keywords:[\"datamodel\",\"data\",\"relational\",\"algebra\",\"model\",\"muze\",\"fusioncharts\",\"table\",\"tabular\",\"operation\"],repository:{type:\"git\",url:\"https://github.com/chartshq/datamodel.git\"},contributors:[{name:\"Akash Goswami\",email:\"akash@charts.com\"},{name:\"Subhash Haldar\",email:\"subhash@charts.com\"},{name:\"Rousan Ali\",email:\"rousan@charts.com\",url:\"https://rousan.io\"},{name:\"Ujjal Kumar Dutta\",email:\"ujjal@charts.com\"}],dependencies:{\"d3-dsv\":\"^1.0.8\"},devDependencies:{\"babel-cli\":\"6.26.0\",\"babel-core\":\"^6.26.3\",\"babel-eslint\":\"6.1.2\",\"babel-loader\":\"^7.1.4\",\"babel-plugin-transform-runtime\":\"^6.23.0\",\"babel-preset-env\":\"^1.7.0\",\"babel-preset-es2015\":\"^6.24.1\",\"babel-preset-flow\":\"^6.23.0\",chai:\"3.5.0\",\"cross-env\":\"^5.0.5\",eslint:\"3.19.0\",\"eslint-config-airbnb\":\"15.1.0\",\"eslint-plugin-import\":\"2.7.0\",\"eslint-plugin-jsx-a11y\":\"5.1.1\",\"eslint-plugin-react\":\"7.3.0\",\"istanbul-instrumenter-loader\":\"^3.0.0\",jsdoc:\"3.5.5\",json2yaml:\"^1.1.0\",karma:\"1.7.1\",\"karma-chai\":\"0.1.0\",\"karma-chrome-launcher\":\"2.1.1\",\"karma-coverage-istanbul-reporter\":\"^1.3.0\",\"karma-mocha\":\"1.3.0\",\"karma-spec-reporter\":\"0.0.31\",\"karma-webpack\":\"2.0.3\",marked:\"^0.5.0\",mocha:\"3.4.2\",\"mocha-webpack\":\"0.7.0\",\"transform-runtime\":\"0.0.0\",webpack:\"^4.12.0\",\"webpack-cli\":\"^3.0.7\",\"webpack-dev-server\":\"^3.1.4\"},scripts:{test:\"npm run lint && npm run ut\",ut:\"karma start karma.conf.js\",utd:\"karma start --single-run false --browsers Chrome karma.conf.js \",build:\"webpack --mode production\",start:\"webpack-dev-server --config webpack.config.dev.js --mode development --open\",lint:\"eslint ./src\",\"lint-errors\":\"eslint --quiet ./src\",docs:\"rm -rf yaml && mkdir yaml && jsdoc -c jsdoc.conf.json\"}}},function(e,t,n){var r=n(2);e.exports=r.default?r.default:r},function(e,t,n){\"use strict\";n.r(t);var r={};n.r(r),n.d(r,\"DataFormat\",function(){return o}),n.d(r,\"DimensionSubtype\",function(){return u}),n.d(r,\"MeasureSubtype\",function(){return c}),n.d(r,\"FieldType\",function(){return f}),n.d(r,\"FilteringMode\",function(){return s});var i={};n.r(i),n.d(i,\"DSVArr\",function(){return Me}),n.d(i,\"DSVStr\",function(){return Ve}),n.d(i,\"FlatJSON\",function(){return Ye}),n.d(i,\"Auto\",function(){return Be});var a={};n.r(a),n.d(a,\"sum\",function(){return ct}),n.d(a,\"avg\",function(){return ft}),n.d(a,\"min\",function(){return st}),n.d(a,\"max\",function(){return lt}),n.d(a,\"first\",function(){return dt}),n.d(a,\"last\",function(){return pt}),n.d(a,\"count\",function(){return ht}),n.d(a,\"sd\",function(){return vt});var o={FLAT_JSON:\"FlatJSON\",DSV_STR:\"DSVStr\",DSV_ARR:\"DSVArr\",AUTO:\"Auto\"},u={CATEGORICAL:\"categorical\",TEMPORAL:\"temporal\",GEO:\"geo\"},c={DISCRETE:\"discrete\"},f={MEASURE:\"measure\",DIMENSION:\"dimension\"},s={NORMAL:\"normal\",INVERSE:\"inverse\",ALL:\"all\"};function l(e,t){e.length>0&&e.split(\",\").forEach(function(e){var n=e.split(\"-\"),r=+n[0],i=+(n[1]||n[0]);if(i>=r)for(var a=r;a<=i;a+=1)t(a)})}var d=function(){function e(e,t){for(var n=0;n=0;)o=e[a+1],-1!==r.indexOf(o)&&i.push({index:a,token:o});return i},m.formatAs=function(e,t){var n,r=h(e),i=m.findTokens(t),a=m.getTokenDefinitions(),o=String(t),u=m.TOKEN_PREFIX,c=void 0,f=void 0,s=void 0;for(s=0,n=i.length;s=0;d--)(f=a[d].index)+1!==l.length-1?(void 0===u&&(u=l.length),s=l.substring(f+2,u),l=l.substring(0,f+2)+RegExp.escape(s)+l.substring(u,l.length),u=f):u=f;for(d=0;d1){n=Math.abs(r[1]-r[0]);for(var i=2,a=r.length;i=y&&t.data=r.stops[r.stops.length-1]}).forEach(function(e){c[e.index]=r.stops[r.stops.length-1]+\"-\"+h}),r.stops.unshift(r.start),b=new Set(r.stops),dr.stops[r.stops.length-1]&&b.add(h),b=[].concat(function(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t3&&void 0!==arguments[3]&&arguments[3],i=arguments.length>4&&void 0!==arguments[4]?arguments[4]:G.CROSS,a=[],o=[],u=n||K,c=e.getFieldspace(),f=t.getFieldspace(),s=c.name,d=f.name,p=c.name+\".\"+f.name,h=L(c,f);if(s===d)throw new Error(\"DataModels must have different alias names\");return c.fields.forEach(function(e){var t=E({},e.schema);-1===h.indexOf(t.name)||r||(t.name=c.name+\".\"+t.name),a.push(t)}),f.fields.forEach(function(e){var t=E({},e.schema);-1!==h.indexOf(t.name)?r||(t.name=f.name+\".\"+t.name,a.push(t)):a.push(t)}),l(e._rowDiffset,function(e){var n=!1,p=void 0;l(t._rowDiffset,function(t){var l=[],v={};v[s]={},v[d]={},c.fields.forEach(function(t){l.push(t.data[e]),v[s][t.name]=t.data[e]}),f.fields.forEach(function(e){-1!==h.indexOf(e.schema.name)&&r||l.push(e.data[t]),v[d][e.name]=e.data[t]});var m=Ke(v[s]),y=Ke(v[d]);if(u(m,y)){var g={};l.forEach(function(e,t){g[a[t].name]=e}),n&&G.CROSS!==i?o[p]=g:(o.push(g),n=!0,p=e)}else if((i===G.LEFTOUTER||i===G.RIGHTOUTER)&&!n){var b={},_=c.fields.length-1;l.forEach(function(e,t){b[a[t].name]=t<=_?e:null}),n=!0,p=e,o.push(b)}})}),new ut(o,a,{name:p})}function z(e,t){var n=\"\"+e,r=\"\"+t;return nr?1:0}function X(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:z;return e.length>1&&function e(t,n,r,i){if(r===n)return t;var a=n+Math.floor((r-n)/2);return e(t,n,a,i),e(t,a+1,r,i),function(e,t,n,r,i){for(var a=e,o=[],u=t;u<=r;u+=1)o[u]=a[u];for(var c=t,f=n+1,s=t;s<=r;s+=1)c>n?(a[s]=o[f],f+=1):f>r?(a[s]=o[c],c+=1):i(o[c],o[f])<=0?(a[s]=o[c],c+=1):(a[s]=o[f],f+=1)}(t,n,a,r,i),t}(e,0,e.length-1,t),e}function Q(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);ta?\"desc\"===t?-1:1:0}}return r}function Z(e,t){var n=new Map,r=[];return e.forEach(function(e){var i=e[t];n.has(i)?r[n.get(i)][1].push(e):(r.push([i,[e]]),n.set(i,r.length-1))}),r}function ee(e,t,n){var r={label:e[0]};return t.reduce(function(t,r,i){return t[r]=e[1].map(function(e){return e[n[i].index]}),t},r),r}function te(e,t,n,r,i){var a={schema:[],data:[],uids:[]},o=(i=Object.assign({},{addUid:!1,columnWise:!1},i)).addUid,u=r&&r.length>0,c=[];if(n.split(\",\").forEach(function(t){for(var n=0;n=0;u--)i=t[u][0],a=t[u][1],(o=Ze(r,i))&&(S(a)?X(n,function(e,t){return a(e[o.index],t[o.index])}):j(a)?function(){var e=Z(n,o.index),t=a[a.length-1],i=a.slice(0,a.length-1),u=i.map(function(e){return Ze(r,e)});e.forEach(function(e){e.push(ee(e,i,u))}),X(e,function(e,n){var r=e[2],i=n[2];return t(r,i)}),n.length=0,e.forEach(function(e){n.push.apply(n,Q(e[1]))})}():(a=\"desc\"===String(a).toLowerCase()?\"desc\":\"asc\",X(n,$(o.type,a,o.index))));e.uids=[],n.forEach(function(t){e.uids.push(t.pop())})}(a,r),i.columnWise){var f=Array.apply(void 0,Q(Array(a.schema.length))).map(function(){return[]});a.data.forEach(function(e){e.forEach(function(e,t){f[t].push(e)})}),a.data=f}return a}function ne(e,t){var n={},r=[],i=[],a=[],o=e.getFieldspace(),u=t.getFieldspace(),c=o.fieldsObj(),f=u.fieldsObj(),s=o.name+\" union \"+u.name;if(!M(e._colIdentifier.split(\",\").sort(),t._colIdentifier.split(\",\").sort()))return null;function d(e,t,r){l(e._rowDiffset,function(e){var o={},u=\"\";i.forEach(function(n){var r=t[n].data[e];u+=\"-\"+r,o[n]=r}),n[u]||(r&&a.push(o),n[u]=!0)})}return e._colIdentifier.split(\",\").forEach(function(e){var t=c[e];r.push(E({},t.schema)),i.push(t.schema.name)}),d(t,f,!1),d(e,c,!0),new ut(a,r,{name:s})}function re(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t1&&void 0!==arguments[1]?arguments[1]:{},n={},r=t,i=e.getPartialFieldspace().getMeasure(),a=se.defaultReducer();return\"function\"==typeof t&&(a=t),Object.entries(i).forEach(function(e){var o=le(e,1)[0];\"string\"==typeof t[o]&&(r[o]=se.resolve(r[o])?se.resolve(r[o]):a),\"function\"!=typeof t[o]&&(r[o]=void 0),n[o]=r[o]||se.resolve(i[o].defAggFn())||a}),n}(e,n),o=e.getPartialFieldspace(),u=o.fieldsObj(),c=o.name,f=[],s=[],d=[],p={},h=[],v=void 0;Object.entries(u).forEach(function(e){var t=le(e,2),n=t[0],r=t[1];(-1!==i.indexOf(n)||a[n])&&(d.push(E({},r.schema)),\"measure\"===r.schema.type&&\"discrete\"!==r.schema.subtype?s.push(n):\"dimension\"!==r.schema.type&&\"discrete\"!==r.schema.subtype||f.push(n))});var m=0;return l(e._rowDiffset,function(e){var t=\"\";f.forEach(function(n){t=t+\"-\"+u[n].data[e]}),void 0===p[t]?(p[t]=m,h.push({}),f.forEach(function(t){h[m][t]=u[t].data[e]}),s.forEach(function(t){h[m][t]=[u[t].data[e]]}),m+=1):s.forEach(function(n){h[p[t]][n].push(u[n].data[e])})}),h.forEach(function(e){var t=e;s.forEach(function(n){t[n]=a[n](e[n])})}),r?(r.__calculateFieldspace(),v=r):v=new yt(h,d,{name:c}),v}function pe(e,t){var n=L(e.getFieldspace(),t.getFieldspace());return function(e,t){var r=!0;return n.forEach(function(n){r=!(e[n].value!==t[n].value||!r)}),r}}function he(e,t){var n={},r=[],i=[],a=[],o=e.getFieldspace(),u=t.getFieldspace(),c=o.fieldsObj(),f=u.fieldsObj(),s=o.name+\" union \"+u.name;if(!M(e._colIdentifier.split(\",\").sort(),t._colIdentifier.split(\",\").sort()))return null;function d(e,t){l(e._rowDiffset,function(e){var r={},o=\"\";i.forEach(function(n){var i=t[n].data[e];o+=\"-\"+i,r[n]=i}),n[o]||(a.push(r),n[o]=!0)})}return e._colIdentifier.split(\",\").forEach(function(e){var t=c[e];r.push(E({},t.schema)),i.push(t.schema.name)}),d(e,c),d(t,f),new yt(a,r,{name:s})}function ve(e,t,n){return W(e,t,n,!1,G.LEFTOUTER)}function me(e,t,n){return W(t,e,n,!1,G.RIGHTOUTER)}var ye=function(){function e(e,t){for(var n=0;nn&&(n=e)}),[t,n]}(this.data)}},{key:\"parse\",value:function(e){return e=parseFloat(e,10),Number.isNaN(e)?null:e}},{key:\"unit\",value:function(){return this.fieldUnit}},{key:\"scale\",value:function(){return this.fieldScale}},{key:\"numberFormat\",value:function(){var e=this.fieldNumberformat;return function(t){return e(t)}}},{key:\"defAggFn\",value:function(){return this.fieldDefAggFn}}]),t}(),Oe=function(){function e(e,t){for(var n=0;n=a?c=!0:(r=e.charCodeAt(o++))===Pe?f=!0:r===Ce&&(f=!0,e.charCodeAt(o)===Pe&&++o),e.slice(i+1,t-1).replace(/\"\"/g,'\"')}for(;o2&&void 0!==arguments[2]?arguments[2]:{},i=arguments[3],a=void 0;t!==Y?(a={op:t,meta:r,criteria:i},e._derivation.push(a)):(a=[].concat(Ge(i)),e._derivation.length=0,(n=e._derivation).push.apply(n,Ge(a)))},ze=function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=n.operation||q,i=n.filterByMeasure||!1,a=[];a=t.length?t.map(function(e){return function(e){var t=e.getData(),n=t.schema,r=e.getFieldsConfig(),a=e.getFieldspace().fieldsObj(),o=t.data,u=Object.values(r).reduce(function(e,t){return e[t.def.name]=a[t.def.name].domain(),e},{});return function(e){return!!o.length&&o.some(function(t){return n.every(function(n){if(!(n.name in e))return!0;var a=e[n.name].valueOf();if(i&&n.type===f.MEASURE)return a>=u[n.name][0]&&a<=u[n.name][1];if(n.type!==f.DIMENSION)return!0;var o=r[n.name].index;return t[o]===e[n.name].valueOf()})})}}(e)}):[function(){return!1}];var o=void 0;r===q?o=e.clone(!1,!1).select(function(e){return a.every(function(t){return t(e)})},{saveChild:!1,mode:s.ALL}):o=e.clone(!1,!1).select(function(e){return a.some(function(t){return t(e)})},{mode:s.ALL,saveChild:!1});return o},Xe=function(e,t,n,r){var i=e.clone(r.saveChild),a=function(e,t,n,r){var i=[],a=-1,o=void 0,u=function(e){return n(qe(t,e),e)};return r.mode===s.INVERSE&&(u=function(e){return!n(qe(t,e))}),l(e,function(e){u(e)&&(-1!==a&&e===a+1?(o=i.length-1,i[o]=i[o].split(\"-\")[0]+\"-\"+e):i.push(\"\"+e),a=e)}),i.join(\",\")}(i._rowDiffset,i.getPartialFieldspace().fields,t,n);return i._rowDiffset=a,i.__calculateFieldspace().calculateFieldsConfig(),r.saveChild&&We(i,U,{config:n},t),i},Qe=function(e,t,n,r){var i=e.clone(n.saveChild),a=t;return n.mode===s.INVERSE&&(a=r.filter(function(e){return-1===t.indexOf(e)})),i._colIdentifier=a.join(\",\"),i.__calculateFieldspace().calculateFieldsConfig(),n.saveChild&&We(i,H,{projField:t,config:n,actualProjField:a},null),i},$e=function(e,t,n,r){r=Object.assign(Object.assign({},xe),r);var a=i[r.dataFormat];if(!a||\"function\"!=typeof a)throw new Error(\"No converter function found for \"+r.dataFormat+\" format\");var o=a(t,r),u=Je(o,2),c=u[0],f=u[1],s=Fe(f,n,c),l=R.createNamespace(s,r.name);return e._partialFieldspace=l,e._rowDiffset=f.length&&f[0].length?\"0-\"+(f[0].length-1):\"\",e._colIdentifier=n.map(function(e){return e.name}).join(),e},Ze=function(e,t){for(var n=0;n2&&void 0!==arguments[2]?arguments[2]:{},i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},a=i.nonTraversingModel,o=i.excludeModels||[];t!==a&&((!o.length||-1===o.indexOf(t))&&t.handlePropagation(n,r),t._children.forEach(function(t){var a=et(n,t),o=Je(a,2),u=o[0],c=o[1];e(t,[u,c],r,i)}))},nt=function(e,t,n,r){var i=void 0,a=void 0,o=n.propagationNameSpace,u=n.propagateToSource,c=n.sourceId,f=r.propagateInterpolatedValues,s=[];if(null===e&&!0!==r.persistent)s=[{criteria:[]}];else{var l,d=Object.values(o.mutableActions);!1!==u&&(d=d.filter(function(e){return e.config.sourceId!==c}));var p=d.filter(function(e){return(r.filterFn||function(){return!0})(e,r)}).map(function(e){return e.config.criteria}),h=[];if(!1!==u){var v=Object.values(o.mutableActions);v.forEach(function(e){var t=e.config;!1===t.applyOnSource&&t.action===r.action&&t.sourceId!==c&&(h.push(e.model),(i=v.filter(function(t){return t!==e}).map(function(e){return e.config.criteria})).length&&s.push({criteria:i,models:e.model,path:function e(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];return null!==t._parent&&(n.push(t),e(t._parent,n)),n}(e.model)}))})}i=(l=[]).concat.apply(l,[].concat(Ge(p),[e])).filter(function(e){return null!==e}),s.push({criteria:i,excludeModels:[].concat(h,Ge(r.excludeModels||[]))})}var m=t.model,y=Object.assign({sourceIdentifiers:e,propagationSourceId:c},r),g=t.groupByModel;f&&g&&(a=ze(g,i,{filterByMeasure:f}),tt(g,a,y)),s.forEach(function(e){var t=ze(m,e.criteria),n=e.path;if(n){var r=function(e,t){for(var n=0,r=t.length;n0&&void 0!==arguments[0])||arguments[0],t=void 0;if(!1===(!(arguments.length>1&&void 0!==arguments[1])||arguments[1])){var n=this.getData({getAllFields:!0}),r=n.data,i=n.schema,a=r.map(function(e){var t={};return i.forEach(function(n,r){t[n.name]=e[r]}),t});t=new this.constructor(a,i)}else t=new this.constructor(this);return e&&this._children.push(t),t}},{key:\"project\",value:function(e,t){var n={mode:s.NORMAL,saveChild:!0};t=Object.assign({},n,t);var r=this.getFieldsConfig(),i=Object.keys(r),a=t.mode,o=e.reduce(function(e,t){return\"RegExp\"===t.constructor.name?e.push.apply(e,function(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t1&&void 0!==arguments[1]?arguments[1]:[];We(this,Y,null,t),this._parent=e,e._children.push(this)}}]),e}(),at=function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function(e,t){var n=[],r=!0,i=!1,a=void 0;try{for(var o,u=e[Symbol.iterator]();!(r=(o=u.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){i=!0,a=e}finally{try{!r&&u.return&&u.return()}finally{if(i)throw a}}return n}(e,t);throw new TypeError(\"Invalid attempt to destructure non-iterable instance\")}}(),ot=function(){function e(e,t){for(var n=0;n1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{saveChild:!0},r=\"\"+e.join(),i=[this,e,t],a=de.apply(void 0,i);return n.saveChild&&(this._children.push(a),We(a,V,{fieldsArr:e,groupByString:r,defaultReducer:se.defaultReducer()},t)),a._parent=this,a}},{key:\"sort\",value:function(e){var t=this.getData({order:\"row\",sort:e}),n=[t.schema.map(function(e){return e.name})].concat(t.data),r=new this.constructor(n,t.schema,{dataFormat:\"DSVArr\"});return r._sortingDetails=e,r}},{key:\"addField\",value:function(e){var t=e.fieldName();this._colIdentifier+=\",\"+t;var n=this._partialFieldspace;if(n.fieldsObj()[e.fieldName()]){var r=n.fields.findIndex(function(e){return e.name===t});r>=0&&(n.fields[r]=e)}else n.fields.push(e);return this.__calculateFieldspace().calculateFieldsConfig(),this}},{key:\"calculateVariable\",value:function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{saveChild:!0,replaceVar:!1},r=this.getFieldsConfig(),i=t.slice(0,t.length-1),a=t[t.length-1];if(r[e.name]&&!n.replaceVar)throw new Error(e.name+\" field already exists in model.\");var o=i.map(function(e){var t=r[e];if(!t)throw new Error(e+\" is not a valid column name.\");return t.index}),u=this.clone(),c=u.getFieldspace().fields,f=o.map(function(e){return c[e]}),s=[];l(u._rowDiffset,function(e){var t=f.map(function(t){return t.data[e]});s[e]=a.apply(void 0,function(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t1&&void 0!==arguments[1]?arguments[1]:{},n=arguments[2],r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},i=t.isMutableAction,a=t.sourceId,o=t.payload,u=function e(t){return t._parent?e(t._parent):t}(this),c=u._propagationNameSpace,f={groupByModel:function e(t){return t._parent&&t._derivation.find(function(e){return\"group\"!==e.op})?e(t._parent):t}(this),model:u};return n&&function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments[2],r=void 0,i=t.isMutableAction,a=t.criteria,o=t.action+\"-\"+t.sourceId;r=i?e.mutableActions:e.immutableActions,null===a?delete r[o]:r[o]={model:n,config:t}}(c,t,this),nt(e,f,{propagationNameSpace:c,sourceId:a},Object.assign({payload:o},t)),i&&function(e,t,n){var r=e.immutableActions;for(var i in r){var a=r[i].config,o=n.config.sourceId,u=!n.propConfig.filterImmutableAction||n.propConfig.filterImmutableAction(a,n.config);if(a.sourceId!==o&&u){var c=a.criteria;nt(c,t,{propagationNameSpace:e,propagateToSource:!1,sourceId:o},a)}}}(c,f,{config:t,propConfig:r}),this}},{key:\"on\",value:function(e,t){switch(e){case\"propagation\":this._onPropagation.push(t)}return this}},{key:\"unsubscribe\",value:function(e){switch(e){case\"propagation\":this._onPropagation=[]}return this}},{key:\"handlePropagation\",value:function(e,t){var n=this;this._onPropagation.forEach(function(r){return r.call(n,e,t)})}},{key:\"bin\",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=this.clone(),r=t.name||e+\"_binned\";if(this.getFieldsConfig()[r]||!this.getFieldsConfig()[e])throw new Error(\"Field \"+e+\" already exists.\");var i=I(this._partialFieldspace.fields.find(function(t){return t.name===e}),this._rowDiffset,t),a=Fe([i.data],[{name:r,type:f.MEASURE,subtype:\"discrete\",bins:{range:i.range,mid:i.mid}}],[r])[0];return n.addField(a),We(n,J,{measureName:e,config:t,binFieldName:r},null),n}}],[{key:\"Reducers\",get:function(){return se}}]),t}(),ct=oe.sum,ft=oe.avg,st=oe.min,lt=oe.max,dt=oe.first,pt=oe.last,ht=oe.count,vt=oe.std,mt=n(0);ut.Operators={compose:function(){for(var e=arguments.length,t=Array(e),n=0;n1&&void 0!==arguments[1]?arguments[1]:{saveChild:!0}).saveChild;return t.forEach(function(e){n=e(n),i.push.apply(i,function(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t1&&r.dispose(),n}},bin:function(){for(var e=arguments.length,t=Array(e),n=0;n2?(i=arguments.length<=0?void 0:arguments[0],n=arguments.length<=1?void 0:arguments[1],o=arguments.length<=2?void 0:arguments[2]):(i=null,n=arguments.length<=0?void 0:arguments[0],o=arguments.length<=1?void 0:arguments[1]),t=o(y),(e=r=new _(t.fn)).addDependencies.apply(e,P(t.dependencies)),this._addPropInModel(i,function(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}({},n,r)),this}},{key:\"_addPropInModel\",value:function(e,t){return this._graph.createNodesFrom(t,e),this}},{key:\"on\",value:function(e,t,r){var n,i=e instanceof Array?e:[e],o=this._graph.createElectricNodeOf(i,{type:\"CurrFrame\",fn:t});r&&(n=this._graph.stopPropagation().setPropagationOverride(\"nextFrame\")).resetNodeValue.apply(n,P(e));return o}},{key:\"next\",value:function(e,t,r){var n,i=e instanceof Array?e:[e],o=this._graph.createElectricNodeOf(i,{type:\"NextFrame\",fn:t});r&&(n=this._graph.stopPropagation().setPropagationOverride(\"currentFrame\")).resetNodeValue.apply(n,P(e));return o}},{key:\"lock\",value:function(){return this._lockFlag=!0,this._reqQ.length=0,this}},{key:\"unlock\",value:function(){return this._lockFlag=!1,this.setProp.apply(this,P(this._reqQ)),this._reqQ.length=0,this}},{key:\"prop\",value:function(){var e,t=void 0,r=void 0;switch(e=arguments.length){case 1:t=arguments.length<=0?void 0:arguments[0];break;case 2:t=arguments.length<=0?void 0:arguments[0],r=arguments.length<=1?void 0:arguments[1];break;default:return this}return 2===e?(this._lockFlag?this._reqQ.push([t,r]):this.setProp([t,r]),this):this._graph.getNodeValue(t)}},{key:\"setProp\",value:function(){for(var e,t=this,r=arguments.length,n=Array(r),i=0;i whenever a break is necessary. This is to recgonize one\n * generalized format independent of the implementation (canvas based solution, svg based solution). This method\n * converts the output of getSmartText().text to array of lines if the text is wrapped. It sets a named property\n * `lines` on the object passed as parameter.\n *\n * @param {Object} smartlabel - the object returned by getSmartText based on which line arr which to be formed.\n *\n * @return {Object} - The same object which was passed in the arguments. Also a named property `lines` is set.\n */\nSmartLabelManager.textToLines = function (smartlabel) {\n smartlabel = smartlabel || {};\n\n if (!smartlabel.text) {\n smartlabel.text = '';\n } else if (typeof smartlabel.text !== 'string') {\n smartlabel.text = smartlabel.text.toString();\n }\n\n smartlabel.lines = smartlabel.text.split(/\\n|/ig);\n return smartlabel;\n};\n\n// Saves all the instance created so far\nSmartLabelManager.store = {};\n\n// Calculates space taken by a character with an approximation value which is calculated by repeating the\n// character by string length times.\nSmartLabelManager.prototype._calCharDimWithCache = function (text, calculateDifference, length) {\n if (!this._init) {\n return false;\n }\n\n var size,\n csArr,\n tw,\n twi,\n cachedStyle,\n asymmetricDifference,\n maxAdvancedCacheLimit = this.options.maxCacheLimit,\n container = this._container,\n style = this.style || {},\n cache = this._advancedCache || (this._advancedCache = {}),\n advancedCacheKey = this._advancedCacheKey || (this._advancedCacheKey = []),\n cacheName = text + (style.fontSize || BLANK) + (style.fontFamily || BLANK) + (style.fontWeight || BLANK) + (style.fontStyle || BLANK),\n cacheInitName = text + 'init' + (style.fontSize || BLANK) + (style.fontFamily || BLANK) + (style.fontWeight || BLANK) + (style.fontStyle || BLANK);\n\n htmlSplCharSpace[text] && (text = htmlSplCharSpace[text]);\n\n if (!calculateDifference) {\n asymmetricDifference = 0;\n } else {\n if ((asymmetricDifference = cache[cacheInitName]) === undefined) {\n container.innerHTML = text.repeat ? text.repeat(length) : Array(length + 1).join(text); // jshint ignore:line\n tw = container.offsetWidth;\n\n container.innerHTML = text;\n twi = container.offsetWidth;\n\n asymmetricDifference = cache[cacheInitName] = (tw - length * twi) / (length + 1);\n advancedCacheKey.push(cacheInitName);\n if (advancedCacheKey.length > maxAdvancedCacheLimit) {\n delete cache[advancedCacheKey.shift()];\n }\n }\n }\n\n if (cachedStyle = cache[cacheName]) {\n csArr = cachedStyle.split(',');\n return {\n width: parseFloat(csArr[0], 10),\n height: parseFloat(csArr[1], 10)\n };\n }\n\n container.innerHTML = text;\n\n size = {\n height: container.offsetHeight,\n width: container.offsetWidth + asymmetricDifference\n };\n\n cache[cacheName] = size.width + ',' + size.height;\n advancedCacheKey.push(cacheName);\n if (advancedCacheKey.length > maxAdvancedCacheLimit) {\n delete cache[advancedCacheKey.shift()];\n }\n\n return size;\n};\n\n// Provide function to calculate the height and width based on the environment and available support from dom.\nSmartLabelManager.prototype._getWidthFn = function () {\n var contObj = this._containerObj,\n container = this._container,\n svgText = contObj.svgText;\n\n if (svgText) {\n return function (str) {\n var bbox, width;\n\n svgText.textContent = str;\n bbox = svgText.getBBox();\n width = bbox.width - SVG_BBOX_CORRECTION;\n if (width < 1) {\n width = bbox.width;\n }\n\n return width;\n };\n } else {\n return function (str) {\n container.innerHTML = str;\n return container.offsetWidth;\n };\n }\n};\n\n/*\n * Sets the style based on which the text's metrics to be calculated.\n *\n * @param {Object} style - The style object which affects the text size\n * {\n * fontSize / 'font-size' : MUST BE FOLLOWED BY PX (10px, 11px)\n * fontFamily / 'font-family'\n * fontWeight / 'font-weight'\n * fontStyle / 'font-style'\n * }\n *\n * @return {SmartLabelManager} - Current instance of SmartLabelManager\n */\nSmartLabelManager.prototype.setStyle = function (style) {\n if (!this._init) {\n return this;\n }\n\n var sCont;\n\n if (style === this.style && !this._styleNotSet) {\n return;\n }\n\n if (!style) {\n style = this.style;\n }\n\n slLib.setLineHeight(style);\n this.style = style;\n\n this._containerObj = sCont = this._containerManager.get(style);\n\n if (this._containerObj) {\n this._container = sCont.node;\n this._context = sCont.context;\n this._cache = sCont.charCache;\n this._lineHeight = sCont.lineHeight;\n this._styleNotSet = false;\n } else {\n this._styleNotSet = true;\n }\n\n return this;\n};\n\n/*\n * Decides whether ellipses to be shown if the node is truncated\n *\n * @param {Boolean} useEllipses - decides if a ellipses to be appended if the text is truncated. Default: false\n *\n * @return {SmartLabelManager} - Current instance of SmartLabelManager\n */\nSmartLabelManager.prototype.useEllipsesOnOverflow = function (useEllipses) {\n if (!this._init) {\n return this;\n }\n this._showNoEllipses = !useEllipses;\n return this;\n};\n\n/*\n * Get wrapped or truncated text if a bound box is defined around it. The result text would be separated by
\n * if wrapped\n *\n * @param {String} text - the subject text\n * @param {Number} maxWidth - width in px of the the bound box\n * @param {Number} maxHeight - height in px of the the bound box\n * @param {Boolean} noWrap - whether the text to be wrapped. Default false.\n *\n * @return {Object} - The metrics of the text bounded by the box\n * {\n * height : height of the wrapped text\n * width : width of the wrapped text\n * isTruncated : whether the text is truncated\n * maxHeight : Maximum height given\n * maxWidth : Maximum width given\n * oriText : Original text sent\n * oriTextHeight : Original text height\n * oriTextWidth : Original text width\n * text : SMART TEXT\n * }\n */\nSmartLabelManager.prototype.getSmartText = function (text, maxWidth, maxHeight, noWrap) {\n if (!this._init) {\n return false;\n }\n\n if (text === undefined || text === null) {\n text = '';\n } else if (typeof text !== 'string') {\n text = text.toString();\n }\n\n var len,\n trimStr,\n tempArr,\n tmpText,\n maxWidthWithEll,\n toolText,\n oriWidth,\n oriHeight,\n newCharIndex,\n nearestChar,\n tempChar,\n getWidth,\n initialLeft,\n initialTop,\n getOriSizeImproveObj,\n spanArr,\n x,\n y,\n minWidth,\n elem,\n chr,\n elemRightMostPoint,\n elemLowestPoint,\n lastBR,\n removeFromIndex,\n removeFromIndexForEllipses,\n hasHTMLTag = false,\n maxStrWidth = 0,\n lastDash = -1,\n lastSpace = -1,\n lastIndexBroken = -1,\n strWidth = 0,\n strHeight = 0,\n oriTextArr = [],\n i = 0,\n ellipsesStr = this._showNoEllipses ? '' : '...',\n lineHeight = this._lineHeight,\n context = this._context,\n container = this._container,\n sCont = this._containerObj,\n ellipsesWidth = sCont.ellipsesWidth,\n dotWidth = sCont.dotWidth,\n characterArr = [],\n dashIndex = -1,\n spaceIndex = -1,\n lastLineBreak = -1,\n fastTrim = function fastTrim(str) {\n str = str.replace(/^\\s\\s*/, '');\n var ws = /\\s/,\n i = str.length;\n while (ws.test(str.charAt(i -= 1))) {/* jshint noempty:false */}\n return str.slice(0, i + 1);\n },\n smartLabel = {\n text: text,\n maxWidth: maxWidth,\n maxHeight: maxHeight,\n width: null,\n height: null,\n oriTextWidth: null,\n oriTextHeight: null,\n oriText: text,\n isTruncated: false\n };\n\n getWidth = this._getWidthFn();\n\n // In some browsers, offsetheight of a single-line text is getting little (1 px) heigher value of the\n // lineheight. As a result, smartLabel is unable to return single-line text.\n // To fix this, increase the maxHeight a little amount. Hence maxHeight = lineHeight * 1.2\n if (maxHeight === lineHeight) {\n maxHeight *= 1.2;\n }\n\n if (container) {\n if (!documentSupport.isBrowserLess) {\n hasHTMLTag = slLib.xmlTagRegEx.test(text);\n if (!hasHTMLTag) {\n // Due to support of <,> for xml we convert <, > to <,> respectively so to get the correct\n // width it is required to convert the same before calculation for the new improve version of the\n // get text width.\n tmpText = text.replace(slLib.ltgtRegex, function (match) {\n return match === '<' ? '<' : '>';\n });\n getOriSizeImproveObj = this.getOriSize(tmpText, true);\n\n smartLabel.oriTextWidth = oriWidth = getOriSizeImproveObj.width;\n smartLabel.oriTextHeight = oriHeight = getOriSizeImproveObj.height;\n } else {\n container.innerHTML = text;\n smartLabel.oriTextWidth = oriWidth = container.offsetWidth;\n smartLabel.oriTextHeight = oriHeight = container.offsetHeight;\n }\n\n if (oriHeight <= maxHeight && oriWidth <= maxWidth) {\n smartLabel.width = smartLabel.oriTextWidth = oriWidth;\n smartLabel.height = smartLabel.oriTextHeight = oriHeight;\n return smartLabel;\n }\n\n if (lineHeight > maxHeight) {\n smartLabel.text = '';\n smartLabel.width = smartLabel.oriTextWidth = 0;\n smartLabel.height = smartLabel.oriTextHeight = 0;\n return smartLabel;\n }\n }\n\n // Calculate width with ellipses\n text = fastTrim(text).replace(/(\\s+)/g, ' ');\n maxWidthWithEll = this._showNoEllipses ? maxWidth : maxWidth - ellipsesWidth;\n\n if (!hasHTMLTag) {\n oriTextArr = text.split('');\n len = oriTextArr.length;\n trimStr = '', tempArr = [];\n tempChar = oriTextArr[0];\n\n if (this._cache[tempChar]) {\n minWidth = this._cache[tempChar].width;\n } else {\n minWidth = getWidth(tempChar);\n this._cache[tempChar] = { width: minWidth };\n }\n\n if (maxWidthWithEll > minWidth) {\n tempArr = text.substr(0, slLib.getNearestBreakIndex(text, maxWidthWithEll, this)).split('');\n i = tempArr.length;\n } else if (minWidth > maxWidth) {\n smartLabel.text = '';\n smartLabel.width = smartLabel.oriTextWidth = smartLabel.height = smartLabel.oriTextHeight = 0;\n return smartLabel;\n } else if (ellipsesStr) {\n maxWidthWithEll = maxWidth - 2 * dotWidth;\n if (maxWidthWithEll > minWidth) {\n ellipsesStr = '..';\n } else {\n maxWidthWithEll = maxWidth - dotWidth;\n if (maxWidthWithEll > minWidth) {\n ellipsesStr = '.';\n } else {\n maxWidthWithEll = 0;\n ellipsesStr = '';\n }\n }\n }\n\n strWidth = getWidth(tempArr.join(''));\n strHeight = this._lineHeight;\n\n if (noWrap) {\n for (; i < len; i += 1) {\n tempChar = tempArr[i] = oriTextArr[i];\n if (this._cache[tempChar]) {\n minWidth = this._cache[tempChar].width;\n } else {\n if (!getOriSizeImproveObj || !(minWidth = getOriSizeImproveObj.detailObj[tempChar])) {\n minWidth = getWidth(tempChar);\n }\n this._cache[tempChar] = {\n width: minWidth\n };\n }\n strWidth += minWidth;\n if (strWidth > maxWidthWithEll) {\n if (!trimStr) {\n trimStr = tempArr.slice(0, -1).join('');\n }\n if (strWidth > maxWidth) {\n smartLabel.text = fastTrim(trimStr) + ellipsesStr;\n smartLabel.tooltext = smartLabel.oriText;\n smartLabel.width = getWidth(smartLabel.text);\n smartLabel.height = this._lineHeight;\n return smartLabel;\n }\n }\n }\n\n smartLabel.text = tempArr.join('');\n smartLabel.width = strWidth;\n smartLabel.height = this._lineHeight;\n return smartLabel;\n } else {\n for (; i < len; i += 1) {\n tempChar = tempArr[i] = oriTextArr[i];\n if (tempChar === ' ' && !context) {\n tempChar = ' ';\n }\n\n if (this._cache[tempChar]) {\n minWidth = this._cache[tempChar].width;\n } else {\n if (!getOriSizeImproveObj || !(minWidth = getOriSizeImproveObj.detailObj[tempChar])) {\n minWidth = getWidth(tempChar);\n }\n this._cache[tempChar] = {\n width: minWidth\n };\n }\n strWidth += minWidth;\n\n if (strWidth > maxWidthWithEll) {\n if (!trimStr) {\n trimStr = tempArr.slice(0, -1).join('');\n }\n if (strWidth > maxWidth) {\n /** @todo use regular expressions for better performance. */\n lastSpace = text.substr(0, tempArr.length).lastIndexOf(' ');\n lastDash = text.substr(0, tempArr.length).lastIndexOf('-');\n if (lastSpace > lastIndexBroken) {\n strWidth = getWidth(tempArr.slice(lastIndexBroken + 1, lastSpace).join(''));\n tempArr.splice(lastSpace, 1, '
');\n lastIndexBroken = lastSpace;\n newCharIndex = lastSpace + 1;\n } else if (lastDash > lastIndexBroken) {\n if (lastDash === tempArr.length - 1) {\n strWidth = getWidth(tempArr.slice(lastIndexBroken + 1, lastSpace).join(''));\n tempArr.splice(lastDash, 1, '
-');\n } else {\n strWidth = getWidth(tempArr.slice(lastIndexBroken + 1, lastSpace).join(''));\n tempArr.splice(lastDash, 1, '-
');\n }\n lastIndexBroken = lastDash;\n newCharIndex = lastDash + 1;\n } else {\n tempArr.splice(tempArr.length - 1, 1, '
' + oriTextArr[i]);\n lastLineBreak = tempArr.length - 2;\n strWidth = getWidth(tempArr.slice(lastIndexBroken + 1, lastLineBreak + 1).join(''));\n lastIndexBroken = lastLineBreak;\n newCharIndex = i;\n }\n strHeight += this._lineHeight;\n if (strHeight > maxHeight) {\n smartLabel.text = fastTrim(trimStr) + ellipsesStr;\n smartLabel.tooltext = smartLabel.oriText;\n // The max width among all the lines will be the width of the string.\n smartLabel.width = maxWidth;\n smartLabel.height = strHeight - this._lineHeight;\n return smartLabel;\n } else {\n maxStrWidth = max(maxStrWidth, strWidth);\n trimStr = null;\n nearestChar = slLib.getNearestBreakIndex(text.substr(newCharIndex), maxWidthWithEll, this);\n strWidth = getWidth(text.substr(newCharIndex, nearestChar || 1));\n if (tempArr.length < newCharIndex + nearestChar) {\n tempArr = tempArr.concat(text.substr(tempArr.length, newCharIndex + nearestChar - tempArr.length).split(''));\n i = tempArr.length - 1;\n }\n }\n }\n }\n }\n\n maxStrWidth = max(maxStrWidth, strWidth);\n\n smartLabel.text = tempArr.join('');\n smartLabel.width = maxStrWidth;\n smartLabel.height = strHeight;\n return smartLabel;\n }\n } else {\n toolText = text.replace(slLib.spanAdditionRegx, '$2');\n text = text.replace(slLib.spanAdditionRegx, slLib.spanAdditionReplacer);\n text = text.replace(/()/g, '$1');\n\n container.innerHTML = text;\n\n spanArr = container[documentSupport.childRetriverFn](documentSupport.childRetriverString);\n\n for (x = 0, y = spanArr.length; x < y; x += 1) {\n elem = spanArr[x];\n //chech whether this span is temporary inserted span from it's class\n if (documentSupport.noClassTesting || slLib.classNameReg.test(elem.className)) {\n chr = elem.innerHTML;\n if (chr !== '') {\n if (chr === ' ') {\n spaceIndex = characterArr.length;\n } else if (chr === '-') {\n dashIndex = characterArr.length;\n }\n\n characterArr.push({\n spaceIdx: spaceIndex,\n dashIdx: dashIndex,\n elem: elem\n });\n oriTextArr.push(chr);\n }\n }\n }\n\n i = 0;\n len = characterArr.length;\n minWidth = characterArr[0].elem.offsetWidth;\n\n if (minWidth > maxWidth) {\n smartLabel.text = '';\n smartLabel.width = smartLabel.oriTextWidth = smartLabel.height = smartLabel.oriTextHeight = 0;\n\n return smartLabel;\n } else if (minWidth > maxWidthWithEll && !this._showNoEllipses) {\n\n maxWidthWithEll = maxWidth - 2 * dotWidth;\n if (maxWidthWithEll > minWidth) {\n ellipsesStr = '..';\n } else {\n maxWidthWithEll = maxWidth - dotWidth;\n if (maxWidthWithEll > minWidth) {\n ellipsesStr = '.';\n } else {\n maxWidthWithEll = 0;\n ellipsesStr = '';\n }\n }\n }\n\n initialLeft = characterArr[0].elem.offsetLeft;\n initialTop = characterArr[0].elem.offsetTop;\n\n if (noWrap) {\n for (; i < len; i += 1) {\n elem = characterArr[i].elem;\n elemRightMostPoint = elem.offsetLeft - initialLeft + elem.offsetWidth;\n\n if (elemRightMostPoint > maxWidthWithEll) {\n if (!removeFromIndexForEllipses) {\n removeFromIndexForEllipses = i;\n }\n if (container.offsetWidth > maxWidth) {\n removeFromIndex = i;\n i = len;\n }\n }\n }\n } else {\n for (; i < len; i += 1) {\n elem = characterArr[i].elem;\n elemLowestPoint = elem.offsetHeight + (elem.offsetTop - initialTop);\n elemRightMostPoint = elem.offsetLeft - initialLeft + elem.offsetWidth;\n\n lastBR = null;\n\n if (elemRightMostPoint > maxWidthWithEll) {\n if (!removeFromIndexForEllipses) {\n removeFromIndexForEllipses = i;\n }\n\n if (elemRightMostPoint > maxWidth) {\n lastSpace = characterArr[i].spaceIdx;\n lastDash = characterArr[i].dashIdx;\n if (lastSpace > lastIndexBroken) {\n characterArr[lastSpace].elem.innerHTML = '
';\n lastIndexBroken = lastSpace;\n } else if (lastDash > lastIndexBroken) {\n if (lastDash === i) {\n // in case the overflowing character itself is the '-'\n characterArr[lastDash].elem.innerHTML = '
-';\n } else {\n characterArr[lastDash].elem.innerHTML = '-
';\n }\n lastIndexBroken = lastDash;\n } else {\n elem.parentNode.insertBefore(lastBR = doc.createElement('br'), elem);\n }\n\n //check whether this break made current element outside the area height\n if (elem.offsetHeight + elem.offsetTop > maxHeight) {\n //remove the lastly inserted line break\n if (lastBR) {\n lastBR.parentNode.removeChild(lastBR);\n } else if (lastIndexBroken === lastDash) {\n characterArr[lastDash].elem.innerHTML = '-';\n } else {\n characterArr[lastSpace].elem.innerHTML = ' ';\n }\n removeFromIndex = i;\n //break the looping condition\n i = len;\n } else {\n removeFromIndexForEllipses = null;\n }\n }\n } else {\n //check whether this break made current element outside the area height\n if (elemLowestPoint > maxHeight) {\n removeFromIndex = i;\n i = len;\n }\n }\n }\n }\n\n if (removeFromIndex < len) {\n //set the trancated property of the smartlabel\n smartLabel.isTruncated = true;\n\n /** @todo is this really needed? */\n removeFromIndexForEllipses = removeFromIndexForEllipses ? removeFromIndexForEllipses : removeFromIndex;\n\n for (i = len - 1; i >= removeFromIndexForEllipses; i -= 1) {\n elem = characterArr[i].elem;\n //chech whether this span is temporary inserted span from it's class\n elem.parentNode.removeChild(elem);\n }\n\n for (; i >= 0; i -= 1) {\n elem = characterArr[i].elem;\n if (slLib.classNameBrReg.test(elem.className)) {\n //chech whether this span is temporary inserted span from it's class\n elem.parentNode.removeChild(elem);\n } else {\n i = 0;\n }\n }\n }\n\n //get the smart text\n smartLabel.text = container.innerHTML.replace(slLib.spanRemovalRegx, '$1').replace(/\\&\\;/g, '&');\n if (smartLabel.isTruncated) {\n smartLabel.text += ellipsesStr;\n smartLabel.tooltext = toolText;\n }\n }\n\n smartLabel.height = container.offsetHeight;\n smartLabel.width = container.offsetWidth;\n\n return smartLabel;\n } else {\n smartLabel.error = new Error('Body Tag Missing!');\n return smartLabel;\n }\n};\n\n/*\n * Get the height and width of a text.\n *\n * @param {String} text - Text whose metrics to be measured\n * @param {Boolean} Optional detailedCalculationFlag - this flag if set it calculates per letter position\n * information and returns it. Ideally you dont need it unless you want to post process the\n * string. And its an EXPENSIVE OPERATION.\n *\n * @return {Object} - If detailedCalculationFlag is set to true the returned object would be\n * {\n * height: height of the text\n * width: width of the text\n * detailObj: detail calculation of letters in the format {lettername: width}\n * }\n * If detailedCalculationFlag is set to false the returned object wont have the detailObj prop.\n */\nSmartLabelManager.prototype.getOriSize = function (text, detailedCalculationFlag) {\n if (!this._init) {\n return false;\n }\n\n var textArr,\n letter,\n lSize,\n i,\n l,\n cumulativeSize = 0,\n height = 0,\n indiSizeStore = {};\n\n if (!detailedCalculationFlag) {\n return this._calCharDimWithCache(text);\n }\n\n // Calculate the width of every letter with an approximation\n textArr = text.split('');\n for (i = 0, l = textArr.length; i < l; i++) {\n letter = textArr[i];\n lSize = this._calCharDimWithCache(letter, true, textArr.length);\n height = max(height, lSize.height);\n cumulativeSize += lSize.width;\n indiSizeStore[letter] = lSize.width;\n }\n\n return {\n width: round(cumulativeSize),\n height: height,\n detailObj: indiSizeStore\n };\n};\n\n/*\n * Dispose the container and object allocated by the smartlabel\n */\nSmartLabelManager.prototype.dispose = function () {\n if (!this._init) {\n return this;\n }\n\n this._containerManager && this._containerManager.dispose && this._containerManager.dispose();\n\n delete this._container;\n delete this._context;\n delete this._cache;\n delete this._containerManager;\n delete this._containerObj;\n delete this.id;\n delete this.style;\n delete this.parentContainer;\n delete this._showNoEllipses;\n\n return this;\n};\n\nexports['default'] = SmartLabelManager;\nmodule.exports = exports['default'];","'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n\tvalue: true\n});\nvar lib = {\n\tinit: function init(win) {\n\t\tvar doc = win.document,\n\t\t nav = win.navigator,\n\t\t userAgent = nav.userAgent,\n\t\t DIV = 'DIV',\n\t\t ceil = Math.ceil,\n\t\t floor = Math.floor,\n\t\t containerInstanceCount = 0,\n\t\t clsNameSpace = 'fusioncharts-smartlabel-',\n\t\t containerClass = clsNameSpace + 'container',\n\t\t classNameWithTag = clsNameSpace + 'tag',\n\t\t classNameWithTagBR = clsNameSpace + 'br';\n\n\t\tlib = {\n\t\t\twin: win,\n\n\t\t\tcontainerClass: containerClass,\n\n\t\t\tclassNameWithTag: classNameWithTag,\n\n\t\t\tclassNameWithTagBR: classNameWithTagBR,\n\n\t\t\tmaxDefaultCacheLimit: 500,\n\n\t\t\tclassNameReg: new RegExp('\\b' + classNameWithTag + '\\b'),\n\n\t\t\tclassNameBrReg: new RegExp('\\b' + classNameWithTagBR + '\\b'),\n\n\t\t\tspanAdditionRegx: /(<[^<\\>]+?\\>)|(&(?:[a-z]+|#[0-9]+);|.)/ig,\n\n\t\t\tspanAdditionReplacer: '$1$2',\n\n\t\t\tspanRemovalRegx: new RegExp('\\\\]+?' + classNameWithTag + '[^\\\\>]{0,}\\\\>(.*?)\\\\<\\\\/span\\\\>', 'ig'),\n\n\t\t\txmlTagRegEx: new RegExp('<[^>][^<]*[^>]+>', 'i'),\n\n\t\t\tltgtRegex: /<|>/g,\n\n\t\t\tbrReplaceRegex: //ig,\n\n\t\t\ttestStrAvg: 'WgI',\n\n\t\t\t// This style is applied over the parent smartlabel container. The container is kept hidden from the viewport\n\t\t\tparentContainerStyle: {\n\t\t\t\tposition: 'absolute',\n\t\t\t\ttop: '-9999em',\n\t\t\t\twhiteSpace: 'nowrap',\n\t\t\t\tpadding: '0px',\n\t\t\t\twidth: '1px',\n\t\t\t\theight: '1px',\n\t\t\t\toverflow: 'hidden'\n\t\t\t},\n\n\t\t\t// All the style which might affect the text metrics\n\t\t\tsupportedStyle: {\n\t\t\t\tfont: 'font',\n\t\t\t\tfontFamily: 'font-family',\n\t\t\t\t'font-family': 'font-family',\n\t\t\t\tfontWeight: 'font-weight',\n\t\t\t\t'font-weight': 'font-weight',\n\t\t\t\tfontSize: 'font-size',\n\t\t\t\t'font-size': 'font-size',\n\t\t\t\tlineHeight: 'line-height',\n\t\t\t\t'line-height': 'line-height',\n\t\t\t\tfontStyle: 'font-style',\n\t\t\t\t'font-style': 'font-style'\n\t\t\t},\n\n\t\t\t// Get the support list for html the document where the text calcution is to be done.\n\t\t\tgetDocumentSupport: function getDocumentSupport() {\n\t\t\t\tvar childRetriverFn, childRetriverString, noClassTesting;\n\n\t\t\t\tif (doc.getElementsByClassName) {\n\t\t\t\t\tchildRetriverFn = 'getElementsByClassName';\n\t\t\t\t\tchildRetriverString = classNameWithTag;\n\t\t\t\t\tnoClassTesting = true;\n\t\t\t\t} else {\n\t\t\t\t\tchildRetriverFn = 'getElementsByTagName';\n\t\t\t\t\tchildRetriverString = 'span';\n\t\t\t\t\tnoClassTesting = false;\n\t\t\t\t}\n\n\t\t\t\treturn {\n\t\t\t\t\tisIE: /msie/i.test(userAgent) && !win.opera,\n\t\t\t\t\thasSVG: Boolean(win.SVGAngle || doc.implementation.hasFeature('http://www.w3.org/TR/SVG11/feature#BasicStructure', '1.1')),\n\t\t\t\t\tisHeadLess: new RegExp(' HtmlUnit').test(userAgent),\n\t\t\t\t\tisWebKit: new RegExp(' AppleWebKit/').test(userAgent),\n\t\t\t\t\tchildRetriverFn: childRetriverFn,\n\t\t\t\t\tchildRetriverString: childRetriverString,\n\t\t\t\t\tnoClassTesting: noClassTesting\n\t\t\t\t};\n\t\t\t},\n\n\t\t\t/*\n * Create a html div element and attach it with a parent. All the subsequent operations are performed\n * by upding this dom tree only.\n *\n * @param {HTMLElement} - The html element where the newly created div is to be attached. If not passed,\n * the new div is appended on the body.\n */\n\t\t\tcreateContainer: function createContainer(containerParent) {\n\t\t\t\tvar body, container;\n\n\t\t\t\tif (containerParent && (containerParent.offsetWidth || containerParent.offsetHeight)) {\n\t\t\t\t\tif (containerParent.appendChild) {\n\t\t\t\t\t\tcontainerParent.appendChild(container = doc.createElement(DIV));\n\t\t\t\t\t\tcontainer.className = containerClass;\n\t\t\t\t\t\tcontainer.setAttribute('aria-hidden', 'true');\n\t\t\t\t\t\tcontainer.setAttribute('role', 'presentation');\n\t\t\t\t\t\treturn container;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tbody = doc.getElementsByTagName('body')[0];\n\n\t\t\t\t\tif (body && body.appendChild) {\n\t\t\t\t\t\tcontainer = doc.createElement(DIV);\n\t\t\t\t\t\tcontainer.className = containerClass;\n\t\t\t\t\t\tcontainer.setAttribute('aria-hidden', 'true');\n\t\t\t\t\t\tcontainer.setAttribute('role', 'presentation');\n\t\t\t\t\t\tcontainerInstanceCount += 1;\n\t\t\t\t\t\tbody.appendChild(container);\n\t\t\t\t\t\treturn container;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// Finds a approximate position where the text is to be broken\n\t\t\tgetNearestBreakIndex: function getNearestBreakIndex(text, maxWidth, sl) {\n\t\t\t\tif (!text || !text.length) {\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\n\t\t\t\tvar difference,\n\t\t\t\t getWidth = sl._getWidthFn(),\n\t\t\t\t charLen = 0,\n\t\t\t\t increment = 0,\n\t\t\t\t oriWidth = getWidth(text),\n\t\t\t\t avgWidth = oriWidth / text.length;\n\n\t\t\t\tdifference = maxWidth;\n\t\t\t\tcharLen = ceil(maxWidth / avgWidth);\n\n\t\t\t\tif (oriWidth < maxWidth) {\n\t\t\t\t\treturn text.length - 1;\n\t\t\t\t}\n\n\t\t\t\tif (charLen > text.length) {\n\t\t\t\t\tdifference = maxWidth - oriWidth;\n\t\t\t\t\tcharLen = text.length;\n\t\t\t\t}\n\n\t\t\t\twhile (difference > 0) {\n\t\t\t\t\tdifference = maxWidth - getWidth(text.substr(0, charLen));\n\t\t\t\t\tincrement = floor(difference / avgWidth);\n\t\t\t\t\tif (increment) {\n\t\t\t\t\t\tcharLen += increment;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn charLen;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\twhile (difference < 0) {\n\t\t\t\t\tdifference = maxWidth - getWidth(text.substr(0, charLen));\n\t\t\t\t\tincrement = floor(difference / avgWidth);\n\t\t\t\t\tif (increment) {\n\t\t\t\t\t\tcharLen += increment;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn charLen;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn charLen;\n\t\t\t},\n\n\t\t\t/*\n * Determine lineheight of a text for a given style. It adds propery lineHeight to the style passed\n *\n * @param {Object} - The style based on which the text's metric needs to be calculated. The calculation happens\n * based on fontSize property, if its not present a default font size is assumed.\n *\n * @return {Object} - The style that was passed with lineHeight as a named propery set on the object.\n */\n\t\t\tsetLineHeight: function setLineHeight(styleObj) {\n\t\t\t\tvar fSize = styleObj.fontSize = styleObj.fontSize || '12px';\n\t\t\t\tstyleObj.lineHeight = styleObj.lineHeight || styleObj['line-height'] || parseInt(fSize, 10) * 1.2 + 'px';\n\t\t\t\treturn styleObj;\n\t\t\t}\n\t\t};\n\n\t\treturn lib;\n\t}\n};\n\nexports['default'] = lib;\nmodule.exports = exports['default'];","const Muze = require('./muze');\n\nmodule.exports = Muze.default ? Muze.default : Muze;\n","'use strict';\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _lib = require('./lib');\n\nvar _lib2 = _interopRequireDefault(_lib);\n\nvar slLib = _lib2['default'].init(typeof window !== \"undefined\" ? window : undefined),\n doc = slLib.win.document,\n documentSupport = slLib.getDocumentSupport(),\n SVG_BBOX_CORRECTION = documentSupport.isWebKit ? 0 : 4.5;\n\nfunction ContainerManager(parentContainer, isBrowserLess, maxContainers) {\n var svg;\n\n maxContainers = maxContainers > 5 ? maxContainers : 5;\n maxContainers = maxContainers < 20 ? maxContainers : 20;\n\n this.maxContainers = maxContainers;\n this.first = null;\n this.last = null;\n this.containers = {};\n this.length = 0;\n this.rootNode = parentContainer;\n\n if (isBrowserLess) {\n svg = doc.createElementNS('http://www.w3.org/2000/svg', 'svg');\n svg.setAttributeNS('http://www.w3.org/2000/svg', 'xlink', 'http://www.w3.org/1999/xlink');\n svg.setAttributeNS('http://www.w3.org/2000/svg', 'height', '0');\n svg.setAttributeNS('http://www.w3.org/2000/svg', 'width', '0');\n this.svgRoot = svg;\n this.rootNode.appendChild(svg);\n }\n}\n\nContainerManager.prototype.get = function (style) {\n var diff,\n key,\n containerObj,\n containers = this.containers,\n len = this.length,\n max = this.maxContainers,\n keyStr = '';\n\n for (key in slLib.supportedStyle) {\n if (style[key] !== undefined) {\n keyStr += slLib.supportedStyle[key] + ':' + style[key] + ';';\n }\n }\n\n if (!keyStr) {\n return false;\n }\n\n if (containerObj = containers[keyStr]) {\n if (this.first !== containerObj) {\n containerObj.prev && (containerObj.prev.next = containerObj.next);\n containerObj.next && (containerObj.next.prev = containerObj.prev);\n containerObj.next = this.first;\n containerObj.next.prev = containerObj;\n this.last === containerObj && (this.last = containerObj.prev);\n containerObj.prev = null;\n this.first = containerObj;\n }\n } else {\n if (len >= max) {\n diff = len - max + 1;\n // +1 is to remove an extra entry to make space for the new container to be added.\n while (diff--) {\n this.removeContainer(this.last);\n }\n }\n containerObj = this.addContainer(keyStr);\n }\n\n return containerObj;\n};\n\nContainerManager.prototype.addContainer = function (keyStr) {\n var node, container;\n\n this.containers[keyStr] = container = {\n next: null,\n prev: null,\n node: null,\n ellipsesWidth: 0,\n lineHeight: 0,\n dotWidth: 0,\n avgCharWidth: 4,\n keyStr: keyStr,\n charCache: {}\n };\n\n // Since the container objects are arranged from most recent to least recent order, we need to add the new\n // object at the beginning of the list.\n container.next = this.first;\n container.next && (container.next.prev = container);\n this.first = container;\n if (!this.last) {\n this.last = container;\n }\n this.length += 1;\n\n node = container.node = doc.createElement('div');\n this.rootNode.appendChild(node);\n\n if (documentSupport.isIE && !documentSupport.hasSVG) {\n node.style.setAttribute('cssText', keyStr);\n } else {\n node.setAttribute('style', keyStr);\n }\n\n node.setAttribute('aria-hidden', 'true');\n node.setAttribute('role', 'presentation');\n node.style.display = 'inline-block';\n\n node.innerHTML = slLib.testStrAvg; // A test string.\n container.lineHeight = node.offsetHeight;\n container.avgCharWidth = node.offsetWidth / 3;\n\n if (documentSupport.isBrowserLess) {\n node = container.svgText = doc.createElementNS('http://www.w3.org/2000/svg', 'text');\n node.setAttribute('style', keyStr);\n this.svgRoot.appendChild(node);\n\n node.textContent = slLib.testStrAvg; // A test string.\n container.lineHeight = node.getBBox().height;\n container.avgCharWidth = (node.getBBox().width - SVG_BBOX_CORRECTION) / 3;\n\n node.textContent = '...';\n container.ellipsesWidth = node.getBBox().width - SVG_BBOX_CORRECTION;\n node.textContent = '.';\n container.dotWidth = node.getBBox().width - SVG_BBOX_CORRECTION;\n } else {\n node.innerHTML = '...';\n container.ellipsesWidth = node.offsetWidth;\n node.innerHTML = '.';\n container.dotWidth = node.offsetWidth;\n node.innerHTML = '';\n }\n\n return container;\n};\n\nContainerManager.prototype.removeContainer = function (cObj) {\n var keyStr = cObj.keyStr;\n\n if (!keyStr || !this.length || !cObj) {\n return;\n }\n this.length -= 1;\n\n cObj.prev && (cObj.prev.next = cObj.next);\n cObj.next && (cObj.next.prev = cObj.prev);\n this.first === cObj && (this.first = cObj.next);\n this.last === cObj && (this.last = cObj.prev);\n\n cObj.node.parentNode.removeChild(cObj.node);\n\n delete this.containers[keyStr];\n};\n\nContainerManager.prototype.dispose = function () {\n var key,\n containers = this.containers;\n\n this.maxContainers = null;\n for (key in containers) {\n this.removeContainer(containers[key]);\n }\n\n this.rootNode.parentNode.removeChild(this.rootNode);\n\n this.rootNode = null;\n this.first = null;\n this.last = null;\n};\n\nmodule.exports = ContainerManager;","export default function(a, b) {\n return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","import ascending from \"./ascending\";\n\nexport default function(compare) {\n if (compare.length === 1) compare = ascendingComparator(compare);\n return {\n left: function(a, x, lo, hi) {\n if (lo == null) lo = 0;\n if (hi == null) hi = a.length;\n while (lo < hi) {\n var mid = lo + hi >>> 1;\n if (compare(a[mid], x) < 0) lo = mid + 1;\n else hi = mid;\n }\n return lo;\n },\n right: function(a, x, lo, hi) {\n if (lo == null) lo = 0;\n if (hi == null) hi = a.length;\n while (lo < hi) {\n var mid = lo + hi >>> 1;\n if (compare(a[mid], x) > 0) hi = mid;\n else lo = mid + 1;\n }\n return lo;\n }\n };\n}\n\nfunction ascendingComparator(f) {\n return function(d, x) {\n return ascending(f(d), x);\n };\n}\n","import ascending from \"./ascending\";\nimport bisector from \"./bisector\";\n\nvar ascendingBisect = bisector(ascending);\nexport var bisectRight = ascendingBisect.right;\nexport var bisectLeft = ascendingBisect.left;\nexport default bisectRight;\n","import {pair} from \"./pairs\";\n\nexport default function(values0, values1, reduce) {\n var n0 = values0.length,\n n1 = values1.length,\n values = new Array(n0 * n1),\n i0,\n i1,\n i,\n value0;\n\n if (reduce == null) reduce = pair;\n\n for (i0 = i = 0; i0 < n0; ++i0) {\n for (value0 = values0[i0], i1 = 0; i1 < n1; ++i1, ++i) {\n values[i] = reduce(value0, values1[i1]);\n }\n }\n\n return values;\n}\n","export default function(x) {\n return x === null ? NaN : +x;\n}\n","var array = Array.prototype;\n\nexport var slice = array.slice;\nexport var map = array.map;\n","export default function(start, stop, step) {\n start = +start, stop = +stop, step = (n = arguments.length) < 2 ? (stop = start, start = 0, 1) : n < 3 ? 1 : +step;\n\n var i = -1,\n n = Math.max(0, Math.ceil((stop - start) / step)) | 0,\n range = new Array(n);\n\n while (++i < n) {\n range[i] = start + i * step;\n }\n\n return range;\n}\n","var e10 = Math.sqrt(50),\n e5 = Math.sqrt(10),\n e2 = Math.sqrt(2);\n\nexport default function(start, stop, count) {\n var reverse,\n i = -1,\n n,\n ticks,\n step;\n\n stop = +stop, start = +start, count = +count;\n if (start === stop && count > 0) return [start];\n if (reverse = stop < start) n = start, start = stop, stop = n;\n if ((step = tickIncrement(start, stop, count)) === 0 || !isFinite(step)) return [];\n\n if (step > 0) {\n start = Math.ceil(start / step);\n stop = Math.floor(stop / step);\n ticks = new Array(n = Math.ceil(stop - start + 1));\n while (++i < n) ticks[i] = (start + i) * step;\n } else {\n start = Math.floor(start * step);\n stop = Math.ceil(stop * step);\n ticks = new Array(n = Math.ceil(start - stop + 1));\n while (++i < n) ticks[i] = (start - i) / step;\n }\n\n if (reverse) ticks.reverse();\n\n return ticks;\n}\n\nexport function tickIncrement(start, stop, count) {\n var step = (stop - start) / Math.max(0, count),\n power = Math.floor(Math.log(step) / Math.LN10),\n error = step / Math.pow(10, power);\n return power >= 0\n ? (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1) * Math.pow(10, power)\n : -Math.pow(10, -power) / (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1);\n}\n\nexport function tickStep(start, stop, count) {\n var step0 = Math.abs(stop - start) / Math.max(0, count),\n step1 = Math.pow(10, Math.floor(Math.log(step0) / Math.LN10)),\n error = step0 / step1;\n if (error >= e10) step1 *= 10;\n else if (error >= e5) step1 *= 5;\n else if (error >= e2) step1 *= 2;\n return stop < start ? -step1 : step1;\n}\n","export default function(values) {\n return Math.ceil(Math.log(values.length) / Math.LN2) + 1;\n}\n","import number from \"./number\";\n\nexport default function(values, p, valueof) {\n if (valueof == null) valueof = number;\n if (!(n = values.length)) return;\n if ((p = +p) <= 0 || n < 2) return +valueof(values[0], 0, values);\n if (p >= 1) return +valueof(values[n - 1], n - 1, values);\n var n,\n i = (n - 1) * p,\n i0 = Math.floor(i),\n value0 = +valueof(values[i0], i0, values),\n value1 = +valueof(values[i0 + 1], i0 + 1, values);\n return value0 + (value1 - value0) * (i - i0);\n}\n","export var prefix = \"$\";\n\nfunction Map() {}\n\nMap.prototype = map.prototype = {\n constructor: Map,\n has: function(key) {\n return (prefix + key) in this;\n },\n get: function(key) {\n return this[prefix + key];\n },\n set: function(key, value) {\n this[prefix + key] = value;\n return this;\n },\n remove: function(key) {\n var property = prefix + key;\n return property in this && delete this[property];\n },\n clear: function() {\n for (var property in this) if (property[0] === prefix) delete this[property];\n },\n keys: function() {\n var keys = [];\n for (var property in this) if (property[0] === prefix) keys.push(property.slice(1));\n return keys;\n },\n values: function() {\n var values = [];\n for (var property in this) if (property[0] === prefix) values.push(this[property]);\n return values;\n },\n entries: function() {\n var entries = [];\n for (var property in this) if (property[0] === prefix) entries.push({key: property.slice(1), value: this[property]});\n return entries;\n },\n size: function() {\n var size = 0;\n for (var property in this) if (property[0] === prefix) ++size;\n return size;\n },\n empty: function() {\n for (var property in this) if (property[0] === prefix) return false;\n return true;\n },\n each: function(f) {\n for (var property in this) if (property[0] === prefix) f(this[property], property.slice(1), this);\n }\n};\n\nfunction map(object, f) {\n var map = new Map;\n\n // Copy constructor.\n if (object instanceof Map) object.each(function(value, key) { map.set(key, value); });\n\n // Index array by numeric index or specified key function.\n else if (Array.isArray(object)) {\n var i = -1,\n n = object.length,\n o;\n\n if (f == null) while (++i < n) map.set(i, object[i]);\n else while (++i < n) map.set(f(o = object[i], i, object), o);\n }\n\n // Convert object to map.\n else if (object) for (var key in object) map.set(key, object[key]);\n\n return map;\n}\n\nexport default map;\n","import map from \"./map\";\n\nexport default function() {\n var keys = [],\n sortKeys = [],\n sortValues,\n rollup,\n nest;\n\n function apply(array, depth, createResult, setResult) {\n if (depth >= keys.length) {\n if (sortValues != null) array.sort(sortValues);\n return rollup != null ? rollup(array) : array;\n }\n\n var i = -1,\n n = array.length,\n key = keys[depth++],\n keyValue,\n value,\n valuesByKey = map(),\n values,\n result = createResult();\n\n while (++i < n) {\n if (values = valuesByKey.get(keyValue = key(value = array[i]) + \"\")) {\n values.push(value);\n } else {\n valuesByKey.set(keyValue, [value]);\n }\n }\n\n valuesByKey.each(function(values, key) {\n setResult(result, key, apply(values, depth, createResult, setResult));\n });\n\n return result;\n }\n\n function entries(map, depth) {\n if (++depth > keys.length) return map;\n var array, sortKey = sortKeys[depth - 1];\n if (rollup != null && depth >= keys.length) array = map.entries();\n else array = [], map.each(function(v, k) { array.push({key: k, values: entries(v, depth)}); });\n return sortKey != null ? array.sort(function(a, b) { return sortKey(a.key, b.key); }) : array;\n }\n\n return nest = {\n object: function(array) { return apply(array, 0, createObject, setObject); },\n map: function(array) { return apply(array, 0, createMap, setMap); },\n entries: function(array) { return entries(apply(array, 0, createMap, setMap), 0); },\n key: function(d) { keys.push(d); return nest; },\n sortKeys: function(order) { sortKeys[keys.length - 1] = order; return nest; },\n sortValues: function(order) { sortValues = order; return nest; },\n rollup: function(f) { rollup = f; return nest; }\n };\n}\n\nfunction createObject() {\n return {};\n}\n\nfunction setObject(object, key, value) {\n object[key] = value;\n}\n\nfunction createMap() {\n return map();\n}\n\nfunction setMap(map, key, value) {\n map.set(key, value);\n}\n","import {default as map, prefix} from \"./map\";\n\nfunction Set() {}\n\nvar proto = map.prototype;\n\nSet.prototype = set.prototype = {\n constructor: Set,\n has: proto.has,\n add: function(value) {\n value += \"\";\n this[prefix + value] = value;\n return this;\n },\n remove: proto.remove,\n clear: proto.clear,\n values: proto.keys,\n size: proto.size,\n empty: proto.empty,\n each: proto.each\n};\n\nfunction set(object, f) {\n var set = new Set;\n\n // Copy constructor.\n if (object instanceof Set) object.each(function(value) { set.add(value); });\n\n // Otherwise, assume it’s an array.\n else if (object) {\n var i = -1, n = object.length;\n if (f == null) while (++i < n) set.add(object[i]);\n else while (++i < n) set.add(f(object[i], i, object));\n }\n\n return set;\n}\n\nexport default set;\n","var array = Array.prototype;\n\nexport var map = array.map;\nexport var slice = array.slice;\n","import {map} from \"d3-collection\";\nimport {slice} from \"./array\";\n\nexport var implicit = {name: \"implicit\"};\n\nexport default function ordinal(range) {\n var index = map(),\n domain = [],\n unknown = implicit;\n\n range = range == null ? [] : slice.call(range);\n\n function scale(d) {\n var key = d + \"\", i = index.get(key);\n if (!i) {\n if (unknown !== implicit) return unknown;\n index.set(key, i = domain.push(d));\n }\n return range[(i - 1) % range.length];\n }\n\n scale.domain = function(_) {\n if (!arguments.length) return domain.slice();\n domain = [], index = map();\n var i = -1, n = _.length, d, key;\n while (++i < n) if (!index.has(key = (d = _[i]) + \"\")) index.set(key, domain.push(d));\n return scale;\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = slice.call(_), scale) : range.slice();\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n scale.copy = function() {\n return ordinal()\n .domain(domain)\n .range(range)\n .unknown(unknown);\n };\n\n return scale;\n}\n","import {range as sequence} from \"d3-array\";\nimport ordinal from \"./ordinal\";\n\nexport default function band() {\n var scale = ordinal().unknown(undefined),\n domain = scale.domain,\n ordinalRange = scale.range,\n range = [0, 1],\n step,\n bandwidth,\n round = false,\n paddingInner = 0,\n paddingOuter = 0,\n align = 0.5;\n\n delete scale.unknown;\n function rescale() {\n var n = domain().length,\n reverse = range[1] < range[0],\n start = range[reverse - 0],\n stop = range[1 - reverse];\n step = (stop - start) / Math.max(1, n - paddingInner + paddingOuter * 2);\n if (round) step = Math.floor(step);\n start += (stop - start - step * (n - paddingInner)) * align;\n bandwidth = step * (1 - paddingInner);\n if (round) start = Math.round(start), bandwidth = Math.round(bandwidth);\n var values = sequence(n).map(function(i) { return start + step * i; });\n return ordinalRange(reverse ? values.reverse() : values);\n }\n\n scale.domain = function(_) {\n return arguments.length ? (domain(_), rescale()) : domain();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = [+_[0], +_[1]], rescale()) : range.slice();\n };\n\n scale.rangeRound = function(_) {\n return range = [+_[0], +_[1]], round = true, rescale();\n };\n\n scale.bandwidth = function() {\n return bandwidth;\n };\n\n scale.step = function() {\n return step;\n };\n\n scale.round = function(_) {\n return arguments.length ? (round = !!_, rescale()) : round;\n };\n\n scale.padding = function(_) {\n return arguments.length ? (paddingInner = paddingOuter = Math.max(0, Math.min(1, _)), rescale()) : paddingInner;\n };\n\n scale.paddingInner = function(_) {\n return arguments.length ? (paddingInner = Math.max(0, Math.min(1, _)), rescale()) : paddingInner;\n };\n\n scale.paddingOuter = function(_) {\n return arguments.length ? (paddingOuter = Math.max(0, Math.min(1, _)), rescale()) : paddingOuter;\n };\n\n scale.align = function(_) {\n return arguments.length ? (align = Math.max(0, Math.min(1, _)), rescale()) : align;\n };\n\n scale.copy = function() {\n return band()\n .domain(domain())\n .range(range)\n .round(round)\n .paddingInner(paddingInner)\n .paddingOuter(paddingOuter)\n .align(align);\n };\n\n scale.invertExtent = function(r0, r1) {\n var lo = +r0,\n hi = arguments.length > 1 ? +r1 : lo,\n reverse = range[1] < range[0],\n values = reverse ? ordinalRange().reverse() : ordinalRange(),\n n = values.length - 1, a, b, t,\n hiIndex;\n values.push(values[n] + this.step());\n // order range inputs, bail if outside of scale range\n if (hi < lo) t = lo, lo = hi, hi = t;\n if (hi < values[0] || lo > range[1-reverse]) return undefined;\n\n // binary search to index into scale range\n a = Math.max(0, getClosestIndexOf(values, lo));\n hiIndex = getClosestIndexOf(values, hi);\n b = lo===hi ? a : Math.max(a, hiIndex - 1);\n\n // increment index a if lo is within padding gap\n // if (lo - values[a] > bandwidth + 1e-10) ++a;\n\n if (reverse) t = a, a = n - b, b = n - t; // map + swap\n return (a > b) ? undefined : domain().slice(a, b+1);\n };\n\n scale.invert = function (r0, r1) {\n var lo = +r0,\n hi = arguments.length > 1 ? +r1 : lo,\n reverse = range[1] < range[0],\n values = reverse ? ordinalRange().reverse() : ordinalRange(),\n n = values.length - 1,\n a,\n t;\n\n // order range inputs, bail if outside of scale range\n if (hi < lo) t = lo, lo = hi, hi = t;\n if (hi < values[0] || lo > range[1-reverse]) return undefined;\n\n // binary search to index into scale range\n a = Math.max(0, getClosestIndexOf(values, lo, 'left'));\n\n // increment index a if lo is within padding gap\n // if (lo - values[a] > bandwidth + 1e-10) ++a;\n\n return domain()[reverse ? n - a : a];\n }\n return rescale();\n}\n\nfunction pointish(scale) {\n var copy = scale.copy;\n\n scale.padding = scale.paddingOuter;\n delete scale.paddingInner;\n delete scale.paddingOuter;\n\n scale.copy = function() {\n return pointish(copy());\n };\n\n return scale;\n}\n\nexport function point() {\n return pointish(band().paddingInner(1));\n}\n\nfunction getClosestIndexOf (arr, value, side) {\n var low = 0,\n arrLen = arr.length,\n high = arrLen - 1,\n highVal,\n mid,\n d1,\n d2;\n\n while (low < high) {\n mid = Math.floor((low + high) / 2);\n d1 = Math.abs(arr[mid] - value);\n d2 = Math.abs(arr[mid + 1] - value);\n\n if (d2 <= d1) {\n low = mid + 1;\n }\n else {\n high = mid;\n }\n }\n\n if (!side) {\n return high;\n }\n\n highVal = arr[high];\n if (highVal === value) {\n return high;\n } else if (highVal > value) {\n if (high === 0) { return high; }\n return side === 'left'? high - 1 : high;\n } else {\n if (high === arr.length - 1) { return high; }\n return side === 'left'? high : high + 1;\n }\n}","export default function(constructor, factory, prototype) {\n constructor.prototype = factory.prototype = prototype;\n prototype.constructor = constructor;\n}\n\nexport function extend(parent, definition) {\n var prototype = Object.create(parent.prototype);\n for (var key in definition) prototype[key] = definition[key];\n return prototype;\n}\n","import define, {extend} from \"./define\";\n\nexport function Color() {}\n\nexport var darker = 0.7;\nexport var brighter = 1 / darker;\n\nvar reI = \"\\\\s*([+-]?\\\\d+)\\\\s*\",\n reN = \"\\\\s*([+-]?\\\\d*\\\\.?\\\\d+(?:[eE][+-]?\\\\d+)?)\\\\s*\",\n reP = \"\\\\s*([+-]?\\\\d*\\\\.?\\\\d+(?:[eE][+-]?\\\\d+)?)%\\\\s*\",\n reHex3 = /^#([0-9a-f]{3})$/,\n reHex6 = /^#([0-9a-f]{6})$/,\n reRgbInteger = new RegExp(\"^rgb\\\\(\" + [reI, reI, reI] + \"\\\\)$\"),\n reRgbPercent = new RegExp(\"^rgb\\\\(\" + [reP, reP, reP] + \"\\\\)$\"),\n reRgbaInteger = new RegExp(\"^rgba\\\\(\" + [reI, reI, reI, reN] + \"\\\\)$\"),\n reRgbaPercent = new RegExp(\"^rgba\\\\(\" + [reP, reP, reP, reN] + \"\\\\)$\"),\n reHslPercent = new RegExp(\"^hsl\\\\(\" + [reN, reP, reP] + \"\\\\)$\"),\n reHslaPercent = new RegExp(\"^hsla\\\\(\" + [reN, reP, reP, reN] + \"\\\\)$\");\n\nvar 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\ndefine(Color, color, {\n displayable: function() {\n return this.rgb().displayable();\n },\n hex: function() {\n return this.rgb().hex();\n },\n toString: function() {\n return this.rgb() + \"\";\n }\n});\n\nexport default function color(format) {\n var m;\n format = (format + \"\").trim().toLowerCase();\n return (m = reHex3.exec(format)) ? (m = parseInt(m[1], 16), new Rgb((m >> 8 & 0xf) | (m >> 4 & 0x0f0), (m >> 4 & 0xf) | (m & 0xf0), ((m & 0xf) << 4) | (m & 0xf), 1)) // #f00\n : (m = reHex6.exec(format)) ? rgbn(parseInt(m[1], 16)) // #ff0000\n : (m = reRgbInteger.exec(format)) ? new Rgb(m[1], m[2], m[3], 1) // rgb(255, 0, 0)\n : (m = reRgbPercent.exec(format)) ? new Rgb(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, 1) // rgb(100%, 0%, 0%)\n : (m = reRgbaInteger.exec(format)) ? rgba(m[1], m[2], m[3], m[4]) // rgba(255, 0, 0, 1)\n : (m = reRgbaPercent.exec(format)) ? rgba(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, m[4]) // rgb(100%, 0%, 0%, 1)\n : (m = reHslPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, 1) // hsl(120, 50%, 50%)\n : (m = reHslaPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, m[4]) // hsla(120, 50%, 50%, 1)\n : named.hasOwnProperty(format) ? rgbn(named[format])\n : format === \"transparent\" ? new Rgb(NaN, NaN, NaN, 0)\n : null;\n}\n\nfunction rgbn(n) {\n return new Rgb(n >> 16 & 0xff, n >> 8 & 0xff, n & 0xff, 1);\n}\n\nfunction rgba(r, g, b, a) {\n if (a <= 0) r = g = b = NaN;\n return new Rgb(r, g, b, a);\n}\n\nexport function rgbConvert(o) {\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Rgb;\n o = o.rgb();\n return new Rgb(o.r, o.g, o.b, o.opacity);\n}\n\nexport function rgb(r, g, b, opacity) {\n return arguments.length === 1 ? rgbConvert(r) : new Rgb(r, g, b, opacity == null ? 1 : opacity);\n}\n\nexport function Rgb(r, g, b, opacity) {\n this.r = +r;\n this.g = +g;\n this.b = +b;\n this.opacity = +opacity;\n}\n\ndefine(Rgb, rgb, extend(Color, {\n 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, this.opacity);\n },\n 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, this.opacity);\n },\n rgb: function() {\n return this;\n },\n 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 && (0 <= this.opacity && this.opacity <= 1);\n },\n hex: function() {\n return \"#\" + hex(this.r) + hex(this.g) + hex(this.b);\n },\n toString: function() {\n var a = this.opacity; a = isNaN(a) ? 1 : Math.max(0, Math.min(1, a));\n return (a === 1 ? \"rgb(\" : \"rgba(\")\n + Math.max(0, Math.min(255, Math.round(this.r) || 0)) + \", \"\n + Math.max(0, Math.min(255, Math.round(this.g) || 0)) + \", \"\n + Math.max(0, Math.min(255, Math.round(this.b) || 0))\n + (a === 1 ? \")\" : \", \" + a + \")\");\n }\n}));\n\nfunction hex(value) {\n value = Math.max(0, Math.min(255, Math.round(value) || 0));\n return (value < 16 ? \"0\" : \"\") + value.toString(16);\n}\n\nfunction hsla(h, s, l, a) {\n if (a <= 0) h = s = l = NaN;\n else if (l <= 0 || l >= 1) h = s = NaN;\n else if (s <= 0) h = NaN;\n return new Hsl(h, s, l, a);\n}\n\nexport function hslConvert(o) {\n if (o instanceof Hsl) return new Hsl(o.h, o.s, o.l, o.opacity);\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Hsl;\n if (o instanceof Hsl) return o;\n o = o.rgb();\n var r = o.r / 255,\n g = o.g / 255,\n b = o.b / 255,\n min = Math.min(r, g, b),\n max = Math.max(r, g, b),\n h = NaN,\n s = max - min,\n l = (max + min) / 2;\n if (s) {\n if (r === max) h = (g - b) / s + (g < b) * 6;\n else if (g === max) h = (b - r) / s + 2;\n else h = (r - g) / s + 4;\n s /= l < 0.5 ? max + min : 2 - max - min;\n h *= 60;\n } else {\n s = l > 0 && l < 1 ? 0 : h;\n }\n return new Hsl(h, s, l, o.opacity);\n}\n\nexport function hsl(h, s, l, opacity) {\n return arguments.length === 1 ? hslConvert(h) : new Hsl(h, s, l, opacity == null ? 1 : opacity);\n}\n\nfunction Hsl(h, s, l, opacity) {\n this.h = +h;\n this.s = +s;\n this.l = +l;\n this.opacity = +opacity;\n}\n\ndefine(Hsl, hsl, extend(Color, {\n brighter: function(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n darker: function(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n 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 < 0.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 this.opacity\n );\n },\n displayable: function() {\n return (0 <= this.s && this.s <= 1 || isNaN(this.s))\n && (0 <= this.l && this.l <= 1)\n && (0 <= this.opacity && this.opacity <= 1);\n }\n}));\n\n/* From FvD 13.37, CSS Color Module Level 3 */\nfunction 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","export var deg2rad = Math.PI / 180;\nexport var rad2deg = 180 / Math.PI;\n","import define, {extend} from \"./define\";\nimport {Color, rgbConvert, Rgb} from \"./color\";\nimport {deg2rad, rad2deg} from \"./math\";\n\n// https://beta.observablehq.com/@mbostock/lab-and-rgb\nvar K = 18,\n Xn = 0.96422,\n Yn = 1,\n Zn = 0.82521,\n t0 = 4 / 29,\n t1 = 6 / 29,\n t2 = 3 * t1 * t1,\n t3 = t1 * t1 * t1;\n\nfunction labConvert(o) {\n if (o instanceof Lab) return new Lab(o.l, o.a, o.b, o.opacity);\n if (o instanceof Hcl) {\n if (isNaN(o.h)) return new Lab(o.l, 0, 0, o.opacity);\n var h = o.h * deg2rad;\n return new Lab(o.l, Math.cos(h) * o.c, Math.sin(h) * o.c, o.opacity);\n }\n if (!(o instanceof Rgb)) o = rgbConvert(o);\n var r = rgb2lrgb(o.r),\n g = rgb2lrgb(o.g),\n b = rgb2lrgb(o.b),\n y = xyz2lab((0.2225045 * r + 0.7168786 * g + 0.0606169 * b) / Yn), x, z;\n if (r === g && g === b) x = z = y; else {\n x = xyz2lab((0.4360747 * r + 0.3850649 * g + 0.1430804 * b) / Xn);\n z = xyz2lab((0.0139322 * r + 0.0971045 * g + 0.7141733 * b) / Zn);\n }\n return new Lab(116 * y - 16, 500 * (x - y), 200 * (y - z), o.opacity);\n}\n\nexport function gray(l, opacity) {\n return new Lab(l, 0, 0, opacity == null ? 1 : opacity);\n}\n\nexport default function lab(l, a, b, opacity) {\n return arguments.length === 1 ? labConvert(l) : new Lab(l, a, b, opacity == null ? 1 : opacity);\n}\n\nexport function Lab(l, a, b, opacity) {\n this.l = +l;\n this.a = +a;\n this.b = +b;\n this.opacity = +opacity;\n}\n\ndefine(Lab, lab, extend(Color, {\n brighter: function(k) {\n return new Lab(this.l + K * (k == null ? 1 : k), this.a, this.b, this.opacity);\n },\n darker: function(k) {\n return new Lab(this.l - K * (k == null ? 1 : k), this.a, this.b, this.opacity);\n },\n 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 x = Xn * lab2xyz(x);\n y = Yn * lab2xyz(y);\n z = Zn * lab2xyz(z);\n return new Rgb(\n lrgb2rgb( 3.1338561 * x - 1.6168667 * y - 0.4906146 * z),\n lrgb2rgb(-0.9787684 * x + 1.9161415 * y + 0.0334540 * z),\n lrgb2rgb( 0.0719453 * x - 0.2289914 * y + 1.4052427 * z),\n this.opacity\n );\n }\n}));\n\nfunction xyz2lab(t) {\n return t > t3 ? Math.pow(t, 1 / 3) : t / t2 + t0;\n}\n\nfunction lab2xyz(t) {\n return t > t1 ? t * t * t : t2 * (t - t0);\n}\n\nfunction lrgb2rgb(x) {\n return 255 * (x <= 0.0031308 ? 12.92 * x : 1.055 * Math.pow(x, 1 / 2.4) - 0.055);\n}\n\nfunction rgb2lrgb(x) {\n return (x /= 255) <= 0.04045 ? x / 12.92 : Math.pow((x + 0.055) / 1.055, 2.4);\n}\n\nfunction hclConvert(o) {\n if (o instanceof Hcl) return new Hcl(o.h, o.c, o.l, o.opacity);\n if (!(o instanceof Lab)) o = labConvert(o);\n if (o.a === 0 && o.b === 0) return new Hcl(NaN, 0, o.l, o.opacity);\n var h = Math.atan2(o.b, o.a) * rad2deg;\n return new Hcl(h < 0 ? h + 360 : h, Math.sqrt(o.a * o.a + o.b * o.b), o.l, o.opacity);\n}\n\nexport function lch(l, c, h, opacity) {\n return arguments.length === 1 ? hclConvert(l) : new Hcl(h, c, l, opacity == null ? 1 : opacity);\n}\n\nexport function hcl(h, c, l, opacity) {\n return arguments.length === 1 ? hclConvert(h) : new Hcl(h, c, l, opacity == null ? 1 : opacity);\n}\n\nexport function Hcl(h, c, l, opacity) {\n this.h = +h;\n this.c = +c;\n this.l = +l;\n this.opacity = +opacity;\n}\n\ndefine(Hcl, hcl, extend(Color, {\n brighter: function(k) {\n return new Hcl(this.h, this.c, this.l + K * (k == null ? 1 : k), this.opacity);\n },\n darker: function(k) {\n return new Hcl(this.h, this.c, this.l - K * (k == null ? 1 : k), this.opacity);\n },\n rgb: function() {\n return labConvert(this).rgb();\n }\n}));\n","import define, {extend} from \"./define\";\nimport {Color, rgbConvert, Rgb, darker, brighter} from \"./color\";\nimport {deg2rad, rad2deg} from \"./math\";\n\nvar A = -0.14861,\n B = +1.78277,\n C = -0.29227,\n D = -0.90649,\n E = +1.97294,\n ED = E * D,\n EB = E * B,\n BC_DA = B * C - D * A;\n\nfunction cubehelixConvert(o) {\n if (o instanceof Cubehelix) return new Cubehelix(o.h, o.s, o.l, o.opacity);\n if (!(o instanceof Rgb)) o = rgbConvert(o);\n var r = o.r / 255,\n g = o.g / 255,\n b = o.b / 255,\n l = (BC_DA * b + ED * r - EB * g) / (BC_DA + ED - EB),\n bl = b - l,\n 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 return new Cubehelix(h < 0 ? h + 360 : h, s, l, o.opacity);\n}\n\nexport default function cubehelix(h, s, l, opacity) {\n return arguments.length === 1 ? cubehelixConvert(h) : new Cubehelix(h, s, l, opacity == null ? 1 : opacity);\n}\n\nexport function Cubehelix(h, s, l, opacity) {\n this.h = +h;\n this.s = +s;\n this.l = +l;\n this.opacity = +opacity;\n}\n\ndefine(Cubehelix, cubehelix, extend(Color, {\n brighter: function(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Cubehelix(this.h, this.s, this.l * k, this.opacity);\n },\n darker: function(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Cubehelix(this.h, this.s, this.l * k, this.opacity);\n },\n 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 this.opacity\n );\n }\n}));\n","export function basis(t1, v0, v1, v2, v3) {\n var t2 = t1 * t1, t3 = t2 * t1;\n return ((1 - 3 * t1 + 3 * t2 - t3) * v0\n + (4 - 6 * t2 + 3 * t3) * v1\n + (1 + 3 * t1 + 3 * t2 - 3 * t3) * v2\n + t3 * v3) / 6;\n}\n\nexport default function(values) {\n var n = values.length - 1;\n return function(t) {\n var i = t <= 0 ? (t = 0) : t >= 1 ? (t = 1, n - 1) : Math.floor(t * n),\n v1 = values[i],\n v2 = values[i + 1],\n v0 = i > 0 ? values[i - 1] : 2 * v1 - v2,\n v3 = i < n - 1 ? values[i + 2] : 2 * v2 - v1;\n return basis((t - i / n) * n, v0, v1, v2, v3);\n };\n}\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","import constant from \"./constant\";\n\nfunction linear(a, d) {\n return function(t) {\n return a + t * d;\n };\n}\n\nfunction exponential(a, b, y) {\n return a = Math.pow(a, y), b = Math.pow(b, y) - a, y = 1 / y, function(t) {\n return Math.pow(a + t * b, y);\n };\n}\n\nexport function hue(a, b) {\n var d = b - a;\n return d ? linear(a, d > 180 || d < -180 ? d - 360 * Math.round(d / 360) : d) : constant(isNaN(a) ? b : a);\n}\n\nexport function gamma(y) {\n return (y = +y) === 1 ? nogamma : function(a, b) {\n return b - a ? exponential(a, b, y) : constant(isNaN(a) ? b : a);\n };\n}\n\nexport default function nogamma(a, b) {\n var d = b - a;\n return d ? linear(a, d) : constant(isNaN(a) ? b : a);\n}\n","import {rgb as colorRgb} from \"d3-color\";\nimport basis from \"./basis\";\nimport basisClosed from \"./basisClosed\";\nimport nogamma, {gamma} from \"./color\";\n\nexport default (function rgbGamma(y) {\n var color = gamma(y);\n\n function rgb(start, end) {\n var r = color((start = colorRgb(start)).r, (end = colorRgb(end)).r),\n g = color(start.g, end.g),\n b = color(start.b, end.b),\n opacity = nogamma(start.opacity, end.opacity);\n return function(t) {\n start.r = r(t);\n start.g = g(t);\n start.b = b(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n\n rgb.gamma = rgbGamma;\n\n return rgb;\n})(1);\n\nfunction rgbSpline(spline) {\n return function(colors) {\n var n = colors.length,\n r = new Array(n),\n g = new Array(n),\n b = new Array(n),\n i, color;\n for (i = 0; i < n; ++i) {\n color = colorRgb(colors[i]);\n r[i] = color.r || 0;\n g[i] = color.g || 0;\n b[i] = color.b || 0;\n }\n r = spline(r);\n g = spline(g);\n b = spline(b);\n color.opacity = 1;\n return function(t) {\n color.r = r(t);\n color.g = g(t);\n color.b = b(t);\n return color + \"\";\n };\n };\n}\n\nexport var rgbBasis = rgbSpline(basis);\nexport var rgbBasisClosed = rgbSpline(basisClosed);\n","export default function(a, b) {\n return a = +a, b -= a, function(t) {\n return a + b * t;\n };\n}\n","import {basis} from \"./basis\";\n\nexport default function(values) {\n var n = values.length;\n return function(t) {\n var i = Math.floor(((t %= 1) < 0 ? ++t : t) * n),\n v0 = values[(i + n - 1) % n],\n v1 = values[i % n],\n v2 = values[(i + 1) % n],\n v3 = values[(i + 2) % n];\n return basis((t - i / n) * n, v0, v1, v2, v3);\n };\n}\n","import number from \"./number\";\n\nvar reA = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n reB = new RegExp(reA.source, \"g\");\n\nfunction zero(b) {\n return function() {\n return b;\n };\n}\n\nfunction one(b) {\n return function(t) {\n return b(t) + \"\";\n };\n}\n\nexport default function(a, b) {\n var bi = reA.lastIndex = reB.lastIndex = 0, // scan index for next number in b\n am, // current match in a\n bm, // current match in b\n bs, // string preceding current number in b, if any\n i = -1, // index in s\n s = [], // string constants and placeholders\n q = []; // number interpolators\n\n // Coerce inputs to strings.\n a = a + \"\", b = b + \"\";\n\n // Interpolate pairs of numbers in a & b.\n while ((am = reA.exec(a))\n && (bm = reB.exec(b))) {\n if ((bs = bm.index) > bi) { // a string precedes the next number in b\n bs = b.slice(bi, bs);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n if ((am = am[0]) === (bm = bm[0])) { // numbers in a & b match\n if (s[i]) s[i] += bm; // coalesce with previous string\n else s[++i] = bm;\n } else { // interpolate non-matching numbers\n s[++i] = null;\n q.push({i: i, x: number(am, bm)});\n }\n bi = reB.lastIndex;\n }\n\n // Add remains of b.\n if (bi < b.length) {\n bs = b.slice(bi);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n\n // Special optimization for only a single match.\n // Otherwise, interpolate each of the numbers and rejoin the string.\n return s.length < 2 ? (q[0]\n ? one(q[0].x)\n : zero(b))\n : (b = q.length, function(t) {\n for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t);\n return s.join(\"\");\n });\n}\n","import decompose, {identity} from \"./decompose\";\n\nvar cssNode,\n cssRoot,\n cssView,\n svgNode;\n\nexport function parseCss(value) {\n if (value === \"none\") return identity;\n if (!cssNode) cssNode = document.createElement(\"DIV\"), cssRoot = document.documentElement, cssView = document.defaultView;\n cssNode.style.transform = value;\n value = cssView.getComputedStyle(cssRoot.appendChild(cssNode), null).getPropertyValue(\"transform\");\n cssRoot.removeChild(cssNode);\n value = value.slice(7, -1).split(\",\");\n return decompose(+value[0], +value[1], +value[2], +value[3], +value[4], +value[5]);\n}\n\nexport function parseSvg(value) {\n if (value == null) return identity;\n if (!svgNode) svgNode = document.createElementNS(\"http://www.w3.org/2000/svg\", \"g\");\n svgNode.setAttribute(\"transform\", value);\n if (!(value = svgNode.transform.baseVal.consolidate())) return identity;\n value = value.matrix;\n return decompose(value.a, value.b, value.c, value.d, value.e, value.f);\n}\n","import {color} from \"d3-color\";\nimport rgb from \"./rgb\";\nimport array from \"./array\";\nimport date from \"./date\";\nimport number from \"./number\";\nimport object from \"./object\";\nimport string from \"./string\";\nimport constant from \"./constant\";\n\nexport default function(a, b) {\n var t = typeof b, c;\n return b == null || t === \"boolean\" ? constant(b)\n : (t === \"number\" ? number\n : t === \"string\" ? ((c = color(b)) ? (b = c, rgb) : string)\n : b instanceof color ? rgb\n : b instanceof Date ? date\n : Array.isArray(b) ? array\n : typeof b.valueOf !== \"function\" && typeof b.toString !== \"function\" || isNaN(b) ? object\n : number)(a, b);\n}\n","export default function(a, b) {\n var d = new Date;\n return a = +a, b -= a, function(t) {\n return d.setTime(a + b * t), d;\n };\n}\n","import value from \"./value\";\n\nexport default function(a, b) {\n var nb = b ? b.length : 0,\n na = a ? Math.min(nb, a.length) : 0,\n x = new Array(na),\n c = new Array(nb),\n i;\n\n for (i = 0; i < na; ++i) x[i] = value(a[i], b[i]);\n for (; i < nb; ++i) c[i] = b[i];\n\n return function(t) {\n for (i = 0; i < na; ++i) c[i] = x[i](t);\n return c;\n };\n}\n","import value from \"./value\";\n\nexport default function(a, b) {\n var i = {},\n c = {},\n k;\n\n if (a === null || typeof a !== \"object\") a = {};\n if (b === null || typeof b !== \"object\") b = {};\n\n for (k in b) {\n if (k in a) {\n i[k] = value(a[k], b[k]);\n } else {\n c[k] = b[k];\n }\n }\n\n return function(t) {\n for (k in i) c[k] = i[k](t);\n return c;\n };\n}\n","export default function(a, b) {\n return a = +a, b -= a, function(t) {\n return Math.round(a + b * t);\n };\n}\n","var degrees = 180 / Math.PI;\n\nexport var identity = {\n translateX: 0,\n translateY: 0,\n rotate: 0,\n skewX: 0,\n scaleX: 1,\n scaleY: 1\n};\n\nexport default function(a, b, c, d, e, f) {\n var scaleX, scaleY, skewX;\n if (scaleX = Math.sqrt(a * a + b * b)) a /= scaleX, b /= scaleX;\n if (skewX = a * c + b * d) c -= a * skewX, d -= b * skewX;\n if (scaleY = Math.sqrt(c * c + d * d)) c /= scaleY, d /= scaleY, skewX /= scaleY;\n if (a * d < b * c) a = -a, b = -b, skewX = -skewX, scaleX = -scaleX;\n return {\n translateX: e,\n translateY: f,\n rotate: Math.atan2(b, a) * degrees,\n skewX: Math.atan(skewX) * degrees,\n scaleX: scaleX,\n scaleY: scaleY\n };\n}\n","import number from \"../number\";\nimport {parseCss, parseSvg} from \"./parse\";\n\nfunction interpolateTransform(parse, pxComma, pxParen, degParen) {\n\n function pop(s) {\n return s.length ? s.pop() + \" \" : \"\";\n }\n\n function translate(xa, ya, xb, yb, s, q) {\n if (xa !== xb || ya !== yb) {\n var i = s.push(\"translate(\", null, pxComma, null, pxParen);\n q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\n } else if (xb || yb) {\n s.push(\"translate(\" + xb + pxComma + yb + pxParen);\n }\n }\n\n function rotate(a, b, s, q) {\n if (a !== b) {\n if (a - b > 180) b += 360; else if (b - a > 180) a += 360; // shortest path\n q.push({i: s.push(pop(s) + \"rotate(\", null, degParen) - 2, x: number(a, b)});\n } else if (b) {\n s.push(pop(s) + \"rotate(\" + b + degParen);\n }\n }\n\n function skewX(a, b, s, q) {\n if (a !== b) {\n q.push({i: s.push(pop(s) + \"skewX(\", null, degParen) - 2, x: number(a, b)});\n } else if (b) {\n s.push(pop(s) + \"skewX(\" + b + degParen);\n }\n }\n\n function scale(xa, ya, xb, yb, s, q) {\n if (xa !== xb || ya !== yb) {\n var i = s.push(pop(s) + \"scale(\", null, \",\", null, \")\");\n q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\n } else if (xb !== 1 || yb !== 1) {\n s.push(pop(s) + \"scale(\" + xb + \",\" + yb + \")\");\n }\n }\n\n return function(a, b) {\n var s = [], // string constants and placeholders\n q = []; // number interpolators\n a = parse(a), b = parse(b);\n translate(a.translateX, a.translateY, b.translateX, b.translateY, s, q);\n rotate(a.rotate, b.rotate, s, q);\n skewX(a.skewX, b.skewX, s, q);\n scale(a.scaleX, a.scaleY, b.scaleX, b.scaleY, s, q);\n a = b = null; // gc\n return function(t) {\n var i = -1, n = q.length, o;\n while (++i < n) s[(o = q[i]).i] = o.x(t);\n return s.join(\"\");\n };\n };\n}\n\nexport var interpolateTransformCss = interpolateTransform(parseCss, \"px, \", \"px)\", \"deg)\");\nexport var interpolateTransformSvg = interpolateTransform(parseSvg, \", \", \")\", \")\");\n","var rho = Math.SQRT2,\n rho2 = 2,\n rho4 = 4,\n epsilon2 = 1e-12;\n\nfunction cosh(x) {\n return ((x = Math.exp(x)) + 1 / x) / 2;\n}\n\nfunction sinh(x) {\n return ((x = Math.exp(x)) - 1 / x) / 2;\n}\n\nfunction tanh(x) {\n return ((x = Math.exp(2 * x)) - 1) / (x + 1);\n}\n\n// p0 = [ux0, uy0, w0]\n// p1 = [ux1, uy1, w1]\nexport default function(p0, p1) {\n var ux0 = p0[0], uy0 = p0[1], w0 = p0[2],\n ux1 = p1[0], uy1 = p1[1], w1 = p1[2],\n dx = ux1 - ux0,\n dy = uy1 - uy0,\n d2 = dx * dx + dy * dy,\n i,\n S;\n\n // Special case for u0 ≅ u1.\n if (d2 < epsilon2) {\n S = Math.log(w1 / w0) / rho;\n i = function(t) {\n return [\n ux0 + t * dx,\n uy0 + t * dy,\n w0 * Math.exp(rho * t * S)\n ];\n }\n }\n\n // General case.\n else {\n var d1 = Math.sqrt(d2),\n b0 = (w1 * w1 - w0 * w0 + rho4 * d2) / (2 * w0 * rho2 * d1),\n b1 = (w1 * w1 - w0 * w0 - rho4 * d2) / (2 * w1 * rho2 * d1),\n r0 = Math.log(Math.sqrt(b0 * b0 + 1) - b0),\n r1 = Math.log(Math.sqrt(b1 * b1 + 1) - b1);\n S = (r1 - r0) / rho;\n i = function(t) {\n var s = t * S,\n coshr0 = cosh(r0),\n u = w0 / (rho2 * d1) * (coshr0 * tanh(rho * s + r0) - sinh(r0));\n return [\n ux0 + u * dx,\n uy0 + u * dy,\n w0 * coshr0 / cosh(rho * s + r0)\n ];\n }\n }\n\n i.duration = S * 1000;\n\n return i;\n}\n","import {hsl as colorHsl} from \"d3-color\";\nimport color, {hue} from \"./color\";\n\nfunction hsl(hue) {\n return function(start, end) {\n var h = hue((start = colorHsl(start)).h, (end = colorHsl(end)).h),\n s = color(start.s, end.s),\n l = color(start.l, end.l),\n opacity = color(start.opacity, end.opacity);\n return function(t) {\n start.h = h(t);\n start.s = s(t);\n start.l = l(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n}\n\nexport default hsl(hue);\nexport var hslLong = hsl(color);\n","import {hcl as colorHcl} from \"d3-color\";\nimport color, {hue} from \"./color\";\n\nfunction hcl(hue) {\n return function(start, end) {\n var h = hue((start = colorHcl(start)).h, (end = colorHcl(end)).h),\n c = color(start.c, end.c),\n l = color(start.l, end.l),\n opacity = color(start.opacity, end.opacity);\n return function(t) {\n start.h = h(t);\n start.c = c(t);\n start.l = l(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n}\n\nexport default hcl(hue);\nexport var hclLong = hcl(color);\n","import {cubehelix as colorCubehelix} from \"d3-color\";\nimport color, {hue} from \"./color\";\n\nfunction cubehelix(hue) {\n return (function cubehelixGamma(y) {\n y = +y;\n\n function cubehelix(start, end) {\n var h = hue((start = colorCubehelix(start)).h, (end = colorCubehelix(end)).h),\n s = color(start.s, end.s),\n l = color(start.l, end.l),\n opacity = color(start.opacity, end.opacity);\n return function(t) {\n start.h = h(t);\n start.s = s(t);\n start.l = l(Math.pow(t, y));\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n\n cubehelix.gamma = cubehelixGamma;\n\n return cubehelix;\n })(1);\n}\n\nexport default cubehelix(hue);\nexport var cubehelixLong = cubehelix(color);\n","export default function piecewise(interpolate, values) {\n var i = 0, n = values.length - 1, v = values[0], I = new Array(n < 0 ? 0 : n);\n while (i < n) I[i] = interpolate(v, v = values[++i]);\n return function(t) {\n var i = Math.max(0, Math.min(n - 1, Math.floor(t *= n)));\n return I[i](t - i);\n };\n}\n","export default function(interpolator, n) {\n var samples = new Array(n);\n for (var i = 0; i < n; ++i) samples[i] = interpolator(i / (n - 1));\n return samples;\n}\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","export default function(x) {\n return +x;\n}\n","import {bisect} from \"d3-array\";\nimport {interpolate as interpolateValue, interpolateRound} from \"d3-interpolate\";\nimport {map, slice} from \"./array\";\nimport constant from \"./constant\";\nimport number from \"./number\";\n\nvar unit = [0, 1];\n\nexport function deinterpolateLinear(a, b) {\n return (b -= (a = +a))\n ? function(x) { return (x - a) / b; }\n : constant(b);\n}\n\nfunction deinterpolateClamp(deinterpolate) {\n return function(a, b) {\n var d = deinterpolate(a = +a, b = +b);\n return function(x) { return x <= a ? 0 : x >= b ? 1 : d(x); };\n };\n}\n\nfunction reinterpolateClamp(reinterpolate) {\n return function(a, b) {\n var r = reinterpolate(a = +a, b = +b);\n return function(t) { return t <= 0 ? a : t >= 1 ? b : r(t); };\n };\n}\n\nfunction bimap(domain, range, deinterpolate, reinterpolate) {\n var d0 = domain[0], d1 = domain[1], r0 = range[0], r1 = range[1];\n if (d1 < d0) d0 = deinterpolate(d1, d0), r0 = reinterpolate(r1, r0);\n else d0 = deinterpolate(d0, d1), r0 = reinterpolate(r0, r1);\n return function(x) { return r0(d0(x)); };\n}\n\nfunction polymap(domain, range, deinterpolate, reinterpolate) {\n var j = Math.min(domain.length, range.length) - 1,\n d = new Array(j),\n r = new Array(j),\n i = -1;\n\n // Reverse descending domains.\n if (domain[j] < domain[0]) {\n domain = domain.slice().reverse();\n range = range.slice().reverse();\n }\n\n while (++i < j) {\n d[i] = deinterpolate(domain[i], domain[i + 1]);\n r[i] = reinterpolate(range[i], range[i + 1]);\n }\n\n return function(x) {\n var i = bisect(domain, x, 1, j) - 1;\n return r[i](d[i](x));\n };\n}\n\nexport function copy(source, target) {\n return target\n .domain(source.domain())\n .range(source.range())\n .interpolate(source.interpolate())\n .clamp(source.clamp());\n}\n\n// deinterpolate(a, b)(x) takes a domain value x in [a,b] and returns the corresponding parameter t in [0,1].\n// reinterpolate(a, b)(t) takes a parameter t in [0,1] and returns the corresponding domain value x in [a,b].\nexport default function continuous(deinterpolate, reinterpolate) {\n var domain = unit,\n range = unit,\n interpolate = interpolateValue,\n clamp = false,\n piecewise,\n output,\n input;\n\n function rescale() {\n piecewise = Math.min(domain.length, range.length) > 2 ? polymap : bimap;\n output = input = null;\n return scale;\n }\n\n function scale(x) {\n return (output || (output = piecewise(domain, range, clamp ? deinterpolateClamp(deinterpolate) : deinterpolate, interpolate)))(+x);\n }\n\n scale.invert = function(y) {\n return (input || (input = piecewise(range, domain, deinterpolateLinear, clamp ? reinterpolateClamp(reinterpolate) : reinterpolate)))(+y);\n };\n\n scale.domain = function(_) {\n return arguments.length ? (domain = map.call(_, number), rescale()) : domain.slice();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = slice.call(_), rescale()) : range.slice();\n };\n\n scale.rangeRound = function(_) {\n return range = slice.call(_), interpolate = interpolateRound, rescale();\n };\n\n scale.clamp = function(_) {\n return arguments.length ? (clamp = !!_, rescale()) : clamp;\n };\n\n scale.interpolate = function(_) {\n return arguments.length ? (interpolate = _, rescale()) : interpolate;\n };\n\n return rescale();\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].\nexport default function(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","import formatDecimal from \"./formatDecimal\";\n\nexport default function(x) {\n return x = formatDecimal(Math.abs(x)), x ? x[1] : NaN;\n}\n","// [[fill]align][sign][symbol][0][width][,][.precision][~][type]\nvar re = /^(?:(.)?([<>=^]))?([+\\-( ])?([$#])?(0)?(\\d+)?(,)?(\\.\\d+)?(~)?([a-z%])?$/i;\n\nexport default function formatSpecifier(specifier) {\n return new FormatSpecifier(specifier);\n}\n\nformatSpecifier.prototype = FormatSpecifier.prototype; // instanceof\n\nfunction FormatSpecifier(specifier) {\n if (!(match = re.exec(specifier))) throw new Error(\"invalid format: \" + specifier);\n var match;\n this.fill = match[1] || \" \";\n this.align = match[2] || \">\";\n this.sign = match[3] || \"-\";\n this.symbol = match[4] || \"\";\n this.zero = !!match[5];\n this.width = match[6] && +match[6];\n this.comma = !!match[7];\n this.precision = match[8] && +match[8].slice(1);\n this.trim = !!match[9];\n this.type = match[10] || \"\";\n}\n\nFormatSpecifier.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.trim ? \"~\" : \"\")\n + this.type;\n};\n","// Trims insignificant zeros, e.g., replaces 1.2000k with 1.2k.\nexport default function(s) {\n out: for (var n = s.length, i = 1, i0 = -1, i1; i < n; ++i) {\n switch (s[i]) {\n case \".\": i0 = i1 = i; break;\n case \"0\": if (i0 === 0) i0 = i; i1 = i; break;\n default: if (i0 > 0) { if (!+s[i]) break out; i0 = 0; } break;\n }\n }\n return i0 > 0 ? s.slice(0, i0) + s.slice(i1 + 1) : s;\n}\n","import formatDecimal from \"./formatDecimal\";\n\nexport var prefixExponent;\n\nexport default function(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, Math.max(0, p + i - 1))[0]; // less than 1y!\n}\n","import formatLocale from \"./locale\";\n\nvar locale;\nexport var format;\nexport var formatPrefix;\n\ndefaultLocale({\n decimal: \".\",\n thousands: \",\",\n grouping: [3],\n currency: [\"$\", \"\"]\n});\n\nexport default function defaultLocale(definition) {\n locale = formatLocale(definition);\n format = locale.format;\n formatPrefix = locale.formatPrefix;\n return locale;\n}\n","import formatDecimal from \"./formatDecimal\";\n\nexport default function(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","import formatPrefixAuto from \"./formatPrefixAuto\";\nimport formatRounded from \"./formatRounded\";\n\nexport default {\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","export default function(x) {\n return x;\n}\n","import exponent from \"./exponent\";\nimport formatGroup from \"./formatGroup\";\nimport formatNumerals from \"./formatNumerals\";\nimport formatSpecifier from \"./formatSpecifier\";\nimport formatTrim from \"./formatTrim\";\nimport formatTypes from \"./formatTypes\";\nimport {prefixExponent} from \"./formatPrefixAuto\";\nimport identity from \"./identity\";\n\nvar prefixes = [\"y\",\"z\",\"a\",\"f\",\"p\",\"n\",\"µ\",\"m\",\"\",\"k\",\"M\",\"G\",\"T\",\"P\",\"E\",\"Z\",\"Y\"];\n\nexport default function(locale) {\n var group = locale.grouping && locale.thousands ? formatGroup(locale.grouping, locale.thousands) : identity,\n currency = locale.currency,\n decimal = locale.decimal,\n numerals = locale.numerals ? formatNumerals(locale.numerals) : identity,\n percent = locale.percent || \"%\";\n\n function newFormat(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 trim = specifier.trim,\n type = specifier.type;\n\n // The \"n\" type is an alias for \",g\".\n if (type === \"n\") comma = true, type = \"g\";\n\n // The \"\" type, and any invalid type, is an alias for \".12~g\".\n else if (!formatTypes[type]) precision == null && (precision = 12), trim = true, type = \"g\";\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 // 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) ? percent : \"\";\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 = /[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 ? 6\n : /[gprs]/.test(type) ? Math.max(1, Math.min(21, precision))\n : Math.max(0, Math.min(20, precision));\n\n function format(value) {\n var valuePrefix = prefix,\n valueSuffix = suffix,\n i, n, c;\n\n if (type === \"c\") {\n valueSuffix = formatType(value) + valueSuffix;\n value = \"\";\n } else {\n value = +value;\n\n // Perform the initial formatting.\n var valueNegative = value < 0;\n value = formatType(Math.abs(value), precision);\n\n // Trim insignificant zeros.\n if (trim) value = formatTrim(value);\n\n // If a negative value rounds to zero during formatting, treat as positive.\n if (valueNegative && +value === 0) valueNegative = false;\n\n // Compute the prefix and suffix.\n valuePrefix = (valueNegative ? (sign === \"(\" ? sign : \"-\") : sign === \"-\" || sign === \"(\" ? \"\" : sign) + valuePrefix;\n valueSuffix = (type === \"s\" ? prefixes[8 + prefixExponent / 3] : \"\") + valueSuffix + (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 i = -1, n = value.length;\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 \"<\": value = valuePrefix + value + valueSuffix + padding; break;\n case \"=\": value = valuePrefix + padding + value + valueSuffix; break;\n case \"^\": value = padding.slice(0, length = padding.length >> 1) + valuePrefix + value + valueSuffix + padding.slice(length); break;\n default: value = padding + valuePrefix + value + valueSuffix; break;\n }\n\n return numerals(value);\n }\n\n format.toString = function() {\n return specifier + \"\";\n };\n\n return format;\n }\n\n function formatPrefix(specifier, value) {\n var f = newFormat((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: newFormat,\n formatPrefix: formatPrefix\n };\n}\n","export default function(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","export default function(numerals) {\n return function(value) {\n return value.replace(/[0-9]/g, function(i) {\n return numerals[+i];\n });\n };\n}\n","import exponent from \"./exponent\";\n\nexport default function(step) {\n return Math.max(0, -exponent(Math.abs(step)));\n}\n","import {tickStep} from \"d3-array\";\nimport {format, formatPrefix, formatSpecifier, precisionFixed, precisionPrefix, precisionRound} from \"d3-format\";\n\nexport default function(domain, count, specifier) {\n var start = domain[0],\n stop = domain[domain.length - 1],\n step = tickStep(start, stop, count == null ? 10 : count),\n precision;\n specifier = formatSpecifier(specifier == null ? \",f\" : specifier);\n switch (specifier.type) {\n case \"s\": {\n var value = Math.max(Math.abs(start), Math.abs(stop));\n if (specifier.precision == null && !isNaN(precision = precisionPrefix(step, value))) specifier.precision = precision;\n return formatPrefix(specifier, value);\n }\n case \"\":\n case \"e\":\n case \"g\":\n case \"p\":\n case \"r\": {\n if (specifier.precision == null && !isNaN(precision = precisionRound(step, Math.max(Math.abs(start), Math.abs(stop))))) specifier.precision = precision - (specifier.type === \"e\");\n break;\n }\n case \"f\":\n case \"%\": {\n if (specifier.precision == null && !isNaN(precision = precisionFixed(step))) specifier.precision = precision - (specifier.type === \"%\") * 2;\n break;\n }\n }\n return format(specifier);\n}\n","import exponent from \"./exponent\";\n\nexport default function(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","import exponent from \"./exponent\";\n\nexport default function(step, max) {\n step = Math.abs(step), max = Math.abs(max) - step;\n return Math.max(0, exponent(max) - exponent(step)) + 1;\n}\n","import {ticks, tickIncrement} from \"d3-array\";\nimport {interpolateNumber as reinterpolate} from \"d3-interpolate\";\nimport {default as continuous, copy, deinterpolateLinear as deinterpolate} from \"./continuous\";\nimport tickFormat from \"./tickFormat\";\n\nexport function linearish(scale) {\n var domain = scale.domain;\n\n scale.ticks = function(count) {\n var d = domain();\n return ticks(d[0], d[d.length - 1], count == null ? 10 : count);\n };\n\n scale.tickFormat = function(count, specifier) {\n return tickFormat(domain(), count, specifier);\n };\n\n scale.nice = function(count) {\n if (count == null) count = 10;\n\n var d = domain(),\n i0 = 0,\n i1 = d.length - 1,\n start = d[i0],\n stop = d[i1],\n step;\n\n if (stop < start) {\n step = start, start = stop, stop = step;\n step = i0, i0 = i1, i1 = step;\n }\n\n step = tickIncrement(start, stop, count);\n\n if (step > 0) {\n start = Math.floor(start / step) * step;\n stop = Math.ceil(stop / step) * step;\n step = tickIncrement(start, stop, count);\n } else if (step < 0) {\n start = Math.ceil(start * step) / step;\n stop = Math.floor(stop * step) / step;\n step = tickIncrement(start, stop, count);\n }\n\n if (step > 0) {\n d[i0] = Math.floor(start / step) * step;\n d[i1] = Math.ceil(stop / step) * step;\n domain(d);\n } else if (step < 0) {\n d[i0] = Math.ceil(start * step) / step;\n d[i1] = Math.floor(stop * step) / step;\n domain(d);\n }\n\n return scale;\n };\n\n return scale;\n}\n\nexport default function linear() {\n var scale = continuous(deinterpolate, reinterpolate);\n\n scale.copy = function() {\n return copy(scale, linear());\n };\n\n return linearish(scale);\n}\n","import {map} from \"./array\";\nimport {linearish} from \"./linear\";\nimport number from \"./number\";\n\nexport default function identity() {\n var domain = [0, 1];\n\n function scale(x) {\n return +x;\n }\n\n scale.invert = scale;\n\n scale.domain = scale.range = function(_) {\n return arguments.length ? (domain = map.call(_, number), scale) : domain.slice();\n };\n\n scale.copy = function() {\n return identity().domain(domain);\n };\n\n return linearish(scale);\n}\n","export default function(domain, interval) {\n domain = domain.slice();\n\n var i0 = 0,\n i1 = domain.length - 1,\n x0 = domain[i0],\n x1 = domain[i1],\n t;\n\n if (x1 < x0) {\n t = i0, i0 = i1, i1 = t;\n t = x0, x0 = x1, x1 = t;\n }\n\n domain[i0] = interval.floor(x0);\n domain[i1] = interval.ceil(x1);\n return domain;\n}\n","import {ticks} from \"d3-array\";\nimport {format} from \"d3-format\";\nimport constant from \"./constant\";\nimport nice from \"./nice\";\nimport {default as continuous, copy} from \"./continuous\";\n\nfunction deinterpolate(a, b) {\n return (b = Math.log(b / a))\n ? function(x) { return Math.log(x / a) / b; }\n : constant(b);\n}\n\nfunction reinterpolate(a, b) {\n return a < 0\n ? function(t) { return -Math.pow(-b, t) * Math.pow(-a, 1 - t); }\n : function(t) { return Math.pow(b, t) * Math.pow(a, 1 - t); };\n}\n\nfunction pow10(x) {\n return isFinite(x) ? +(\"1e\" + x) : x < 0 ? 0 : x;\n}\n\nfunction powp(base) {\n return base === 10 ? pow10\n : base === Math.E ? Math.exp\n : function(x) { return Math.pow(base, x); };\n}\n\nfunction logp(base) {\n return base === Math.E ? Math.log\n : base === 10 && Math.log10\n || base === 2 && Math.log2\n || (base = Math.log(base), function(x) { return Math.log(x) / base; });\n}\n\nfunction reflect(f) {\n return function(x) {\n return -f(-x);\n };\n}\n\nexport default function log() {\n var scale = continuous(deinterpolate, reinterpolate).domain([1, 10]),\n domain = scale.domain,\n base = 10,\n logs = logp(10),\n pows = powp(10);\n\n function rescale() {\n logs = logp(base), pows = powp(base);\n if (domain()[0] < 0) logs = reflect(logs), pows = reflect(pows);\n return scale;\n }\n\n scale.base = function(_) {\n return arguments.length ? (base = +_, rescale()) : base;\n };\n\n scale.domain = function(_) {\n return arguments.length ? (domain(_), rescale()) : domain();\n };\n\n scale.ticks = function(count) {\n var d = domain(),\n u = d[0],\n v = d[d.length - 1],\n r;\n\n if (r = v < u) i = u, u = v, v = i;\n\n var i = logs(u),\n j = logs(v),\n p,\n k,\n t,\n n = count == null ? 10 : +count,\n z = [];\n\n if (!(base % 1) && j - i < n) {\n i = Math.round(i) - 1, j = Math.round(j) + 1;\n if (u > 0) for (; i < j; ++i) {\n for (k = 1, p = pows(i); k < base; ++k) {\n t = p * k;\n if (t < u) continue;\n if (t > v) break;\n z.push(t);\n }\n } else for (; i < j; ++i) {\n for (k = base - 1, p = pows(i); k >= 1; --k) {\n t = p * k;\n if (t < u) continue;\n if (t > v) break;\n z.push(t);\n }\n }\n } else {\n z = ticks(i, j, Math.min(j - i, n)).map(pows);\n }\n\n return r ? z.reverse() : z;\n };\n\n scale.tickFormat = function(count, specifier) {\n if (specifier == null) specifier = base === 10 ? \".0e\" : \",\";\n if (typeof specifier !== \"function\") specifier = format(specifier);\n if (count === Infinity) return specifier;\n if (count == null) count = 10;\n var k = Math.max(1, base * count / scale.ticks().length); // TODO fast estimate?\n return function(d) {\n var i = d / pows(Math.round(logs(d)));\n if (i * base < base - 0.5) i *= base;\n return i <= k ? specifier(d) : \"\";\n };\n };\n\n scale.nice = function() {\n return domain(nice(domain(), {\n floor: function(x) { return pows(Math.floor(logs(x))); },\n ceil: function(x) { return pows(Math.ceil(logs(x))); }\n }));\n };\n\n scale.copy = function() {\n return copy(scale, log().base(base));\n };\n\n return scale;\n}\n","import constant from \"./constant\";\nimport {linearish} from \"./linear\";\nimport {default as continuous, copy} from \"./continuous\";\n\nfunction raise(x, exponent) {\n return x < 0 ? -Math.pow(-x, exponent) : Math.pow(x, exponent);\n}\n\nexport default function pow() {\n var exponent = 1,\n scale = continuous(deinterpolate, reinterpolate),\n domain = scale.domain;\n\n function deinterpolate(a, b) {\n return (b = raise(b, exponent) - (a = raise(a, exponent)))\n ? function(x) { return (raise(x, exponent) - a) / b; }\n : constant(b);\n }\n\n function reinterpolate(a, b) {\n b = raise(b, exponent) - (a = raise(a, exponent));\n return function(t) { return raise(a + b * t, 1 / exponent); };\n }\n\n scale.exponent = function(_) {\n return arguments.length ? (exponent = +_, domain(domain())) : exponent;\n };\n\n scale.copy = function() {\n return copy(scale, pow().exponent(exponent));\n };\n\n return linearish(scale);\n}\n\nexport function sqrt() {\n return pow().exponent(0.5);\n}\n","import {ascending, bisect, quantile as threshold} from \"d3-array\";\nimport {slice} from \"./array\";\n\nexport default function quantile() {\n var domain = [],\n range = [],\n thresholds = [];\n\n function rescale() {\n var i = 0, n = Math.max(1, range.length);\n thresholds = new Array(n - 1);\n while (++i < n) thresholds[i - 1] = threshold(domain, i / n);\n return scale;\n }\n\n function scale(x) {\n if (!isNaN(x = +x)) return range[bisect(thresholds, x)];\n }\n\n scale.invertExtent = function(y) {\n var i = range.indexOf(y);\n return i < 0 ? [NaN, NaN] : [\n i > 0 ? thresholds[i - 1] : domain[0],\n i < thresholds.length ? thresholds[i] : domain[domain.length - 1]\n ];\n };\n\n scale.domain = function(_) {\n if (!arguments.length) return domain.slice();\n domain = [];\n for (var i = 0, n = _.length, d; i < n; ++i) if (d = _[i], d != null && !isNaN(d = +d)) domain.push(d);\n domain.sort(ascending);\n return rescale();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = slice.call(_), rescale()) : range.slice();\n };\n\n scale.quantiles = function() {\n return thresholds.slice();\n };\n\n scale.copy = function() {\n return quantile()\n .domain(domain)\n .range(range);\n };\n\n return scale;\n}\n","import {bisect} from \"d3-array\";\nimport {slice} from \"./array\";\nimport {linearish} from \"./linear\";\n\nexport default function quantize() {\n var x0 = 0,\n x1 = 1,\n n = 1,\n domain = [0.5],\n range = [0, 1];\n\n function scale(x) {\n if (x <= x) return range[bisect(domain, x, 0, n)];\n }\n\n function rescale() {\n var i = -1;\n domain = new Array(n);\n while (++i < n) domain[i] = ((i + 1) * x1 - (i - n) * x0) / (n + 1);\n return scale;\n }\n\n scale.domain = function(_) {\n return arguments.length ? (x0 = +_[0], x1 = +_[1], rescale()) : [x0, x1];\n };\n\n scale.range = function(_) {\n return arguments.length ? (n = (range = slice.call(_)).length - 1, rescale()) : range.slice();\n };\n\n scale.invertExtent = function(y) {\n var i = range.indexOf(y);\n return i < 0 ? [NaN, NaN]\n : i < 1 ? [x0, domain[0]]\n : i >= n ? [domain[n - 1], x1]\n : [domain[i - 1], domain[i]];\n };\n\n scale.copy = function() {\n return quantize()\n .domain([x0, x1])\n .range(range);\n };\n\n return linearish(scale);\n}\n","import {bisect} from \"d3-array\";\nimport {slice} from \"./array\";\n\nexport default function threshold() {\n var domain = [0.5],\n range = [0, 1],\n n = 1;\n\n function scale(x) {\n if (x <= x) return range[bisect(domain, x, 0, n)];\n }\n\n scale.domain = function(_) {\n return arguments.length ? (domain = slice.call(_), n = Math.min(domain.length, range.length - 1), scale) : domain.slice();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = slice.call(_), n = Math.min(domain.length, range.length - 1), scale) : range.slice();\n };\n\n scale.invertExtent = function(y) {\n var i = range.indexOf(y);\n return [domain[i - 1], domain[i]];\n };\n\n scale.copy = function() {\n return threshold()\n .domain(domain)\n .range(range);\n };\n\n return scale;\n}\n","var t0 = new Date,\n t1 = new Date;\n\nexport default function newInterval(floori, offseti, count, field) {\n\n function interval(date) {\n return floori(date = new Date(+date)), date;\n }\n\n interval.floor = interval;\n\n interval.ceil = function(date) {\n return floori(date = new Date(date - 1)), offseti(date, 1), floori(date), date;\n };\n\n interval.round = function(date) {\n var d0 = interval(date),\n d1 = interval.ceil(date);\n return date - d0 < d1 - date ? d0 : d1;\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 = [], previous;\n start = interval.ceil(start);\n step = step == null ? 1 : Math.floor(step);\n if (!(start < stop) || !(step > 0)) return range; // also handles Invalid Date\n do range.push(previous = new Date(+start)), offseti(start, step), floori(start);\n while (previous < start && start < stop);\n return range;\n };\n\n interval.filter = function(test) {\n return newInterval(function(date) {\n if (date >= date) while (floori(date), !test(date)) date.setTime(date - 1);\n }, function(date, step) {\n if (date >= date) {\n if (step < 0) while (++step <= 0) {\n while (offseti(date, -1), !test(date)) {} // eslint-disable-line no-empty\n } else while (--step >= 0) {\n while (offseti(date, +1), !test(date)) {} // eslint-disable-line no-empty\n }\n }\n });\n };\n\n if (count) {\n 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 interval.every = function(step) {\n step = Math.floor(step);\n return !isFinite(step) || !(step > 0) ? null\n : !(step > 1) ? interval\n : interval.filter(field\n ? function(d) { return field(d) % step === 0; }\n : function(d) { return interval.count(0, d) % step === 0; });\n };\n }\n\n return interval;\n}\n","import interval from \"./interval\";\n\nvar millisecond = interval(function() {\n // noop\n}, function(date, step) {\n date.setTime(+date + step);\n}, function(start, end) {\n return end - start;\n});\n\n// An optimized implementation for this simple case.\nmillisecond.every = function(k) {\n k = Math.floor(k);\n if (!isFinite(k) || !(k > 0)) return null;\n if (!(k > 1)) return millisecond;\n return interval(function(date) {\n date.setTime(Math.floor(date / k) * k);\n }, function(date, step) {\n date.setTime(+date + step * k);\n }, function(start, end) {\n return (end - start) / k;\n });\n};\n\nexport default millisecond;\nexport var milliseconds = millisecond.range;\n","export var durationSecond = 1e3;\nexport var durationMinute = 6e4;\nexport var durationHour = 36e5;\nexport var durationDay = 864e5;\nexport var durationWeek = 6048e5;\n","import interval from \"./interval\";\nimport {durationSecond} from \"./duration\";\n\nvar second = interval(function(date) {\n date.setTime(Math.floor(date / durationSecond) * durationSecond);\n}, function(date, step) {\n date.setTime(+date + step * durationSecond);\n}, function(start, end) {\n return (end - start) / durationSecond;\n}, function(date) {\n return date.getUTCSeconds();\n});\n\nexport default second;\nexport var seconds = second.range;\n","import interval from \"./interval\";\nimport {durationMinute} from \"./duration\";\n\nvar minute = interval(function(date) {\n date.setTime(Math.floor(date / durationMinute) * durationMinute);\n}, function(date, step) {\n date.setTime(+date + step * durationMinute);\n}, function(start, end) {\n return (end - start) / durationMinute;\n}, function(date) {\n return date.getMinutes();\n});\n\nexport default minute;\nexport var minutes = minute.range;\n","import interval from \"./interval\";\nimport {durationHour, durationMinute} from \"./duration\";\n\nvar hour = interval(function(date) {\n var offset = date.getTimezoneOffset() * durationMinute % durationHour;\n if (offset < 0) offset += durationHour;\n date.setTime(Math.floor((+date - offset) / durationHour) * durationHour + offset);\n}, function(date, step) {\n date.setTime(+date + step * durationHour);\n}, function(start, end) {\n return (end - start) / durationHour;\n}, function(date) {\n return date.getHours();\n});\n\nexport default hour;\nexport var hours = hour.range;\n","import interval from \"./interval\";\nimport {durationDay, durationMinute} from \"./duration\";\n\nvar day = interval(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()) * durationMinute) / durationDay;\n}, function(date) {\n return date.getDate() - 1;\n});\n\nexport default day;\nexport var days = day.range;\n","import interval from \"./interval\";\nimport {durationMinute, durationWeek} from \"./duration\";\n\nfunction weekday(i) {\n return interval(function(date) {\n date.setDate(date.getDate() - (date.getDay() + 7 - i) % 7);\n date.setHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setDate(date.getDate() + step * 7);\n }, function(start, end) {\n return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationWeek;\n });\n}\n\nexport var sunday = weekday(0);\nexport var monday = weekday(1);\nexport var tuesday = weekday(2);\nexport var wednesday = weekday(3);\nexport var thursday = weekday(4);\nexport var friday = weekday(5);\nexport var saturday = weekday(6);\n\nexport var sundays = sunday.range;\nexport var mondays = monday.range;\nexport var tuesdays = tuesday.range;\nexport var wednesdays = wednesday.range;\nexport var thursdays = thursday.range;\nexport var fridays = friday.range;\nexport var saturdays = saturday.range;\n","import interval from \"./interval\";\n\nvar month = interval(function(date) {\n date.setDate(1);\n date.setHours(0, 0, 0, 0);\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}, function(date) {\n return date.getMonth();\n});\n\nexport default month;\nexport var months = month.range;\n","import interval from \"./interval\";\n\nvar year = interval(function(date) {\n date.setMonth(0, 1);\n date.setHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setFullYear(date.getFullYear() + step);\n}, function(start, end) {\n return end.getFullYear() - start.getFullYear();\n}, function(date) {\n return date.getFullYear();\n});\n\n// An optimized implementation for this simple case.\nyear.every = function(k) {\n return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : interval(function(date) {\n date.setFullYear(Math.floor(date.getFullYear() / k) * k);\n date.setMonth(0, 1);\n date.setHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setFullYear(date.getFullYear() + step * k);\n });\n};\n\nexport default year;\nexport var years = year.range;\n","import interval from \"./interval\";\nimport {durationMinute} from \"./duration\";\n\nvar utcMinute = interval(function(date) {\n date.setUTCSeconds(0, 0);\n}, function(date, step) {\n date.setTime(+date + step * durationMinute);\n}, function(start, end) {\n return (end - start) / durationMinute;\n}, function(date) {\n return date.getUTCMinutes();\n});\n\nexport default utcMinute;\nexport var utcMinutes = utcMinute.range;\n","import interval from \"./interval\";\nimport {durationHour} from \"./duration\";\n\nvar utcHour = interval(function(date) {\n date.setUTCMinutes(0, 0, 0);\n}, function(date, step) {\n date.setTime(+date + step * durationHour);\n}, function(start, end) {\n return (end - start) / durationHour;\n}, function(date) {\n return date.getUTCHours();\n});\n\nexport default utcHour;\nexport var utcHours = utcHour.range;\n","import interval from \"./interval\";\nimport {durationDay} from \"./duration\";\n\nvar utcDay = interval(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) / durationDay;\n}, function(date) {\n return date.getUTCDate() - 1;\n});\n\nexport default utcDay;\nexport var utcDays = utcDay.range;\n","import interval from \"./interval\";\nimport {durationWeek} from \"./duration\";\n\nfunction utcWeekday(i) {\n return interval(function(date) {\n date.setUTCDate(date.getUTCDate() - (date.getUTCDay() + 7 - i) % 7);\n date.setUTCHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setUTCDate(date.getUTCDate() + step * 7);\n }, function(start, end) {\n return (end - start) / durationWeek;\n });\n}\n\nexport var utcSunday = utcWeekday(0);\nexport var utcMonday = utcWeekday(1);\nexport var utcTuesday = utcWeekday(2);\nexport var utcWednesday = utcWeekday(3);\nexport var utcThursday = utcWeekday(4);\nexport var utcFriday = utcWeekday(5);\nexport var utcSaturday = utcWeekday(6);\n\nexport var utcSundays = utcSunday.range;\nexport var utcMondays = utcMonday.range;\nexport var utcTuesdays = utcTuesday.range;\nexport var utcWednesdays = utcWednesday.range;\nexport var utcThursdays = utcThursday.range;\nexport var utcFridays = utcFriday.range;\nexport var utcSaturdays = utcSaturday.range;\n","import interval from \"./interval\";\n\nvar utcMonth = interval(function(date) {\n date.setUTCDate(1);\n date.setUTCHours(0, 0, 0, 0);\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}, function(date) {\n return date.getUTCMonth();\n});\n\nexport default utcMonth;\nexport var utcMonths = utcMonth.range;\n","import interval from \"./interval\";\n\nvar utcYear = interval(function(date) {\n date.setUTCMonth(0, 1);\n date.setUTCHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setUTCFullYear(date.getUTCFullYear() + step);\n}, function(start, end) {\n return end.getUTCFullYear() - start.getUTCFullYear();\n}, function(date) {\n return date.getUTCFullYear();\n});\n\n// An optimized implementation for this simple case.\nutcYear.every = function(k) {\n return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : interval(function(date) {\n date.setUTCFullYear(Math.floor(date.getUTCFullYear() / k) * k);\n date.setUTCMonth(0, 1);\n date.setUTCHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setUTCFullYear(date.getUTCFullYear() + step * k);\n });\n};\n\nexport default utcYear;\nexport var utcYears = utcYear.range;\n","import {\n timeDay,\n timeSunday,\n timeMonday,\n timeThursday,\n timeYear,\n utcDay,\n utcSunday,\n utcMonday,\n utcThursday,\n utcYear\n} from \"d3-time\";\n\nfunction 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\nfunction 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\nfunction newYear(y) {\n return {y: y, m: 0, d: 1, H: 0, M: 0, S: 0, L: 0};\n}\n\nexport default function formatLocale(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 periodRe = formatRe(locale_periods),\n 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 \"f\": formatMicroseconds,\n \"H\": formatHour24,\n \"I\": formatHour12,\n \"j\": formatDayOfYear,\n \"L\": formatMilliseconds,\n \"m\": formatMonthNumber,\n \"M\": formatMinutes,\n \"p\": formatPeriod,\n \"Q\": formatUnixTimestamp,\n \"s\": formatUnixTimestampSeconds,\n \"S\": formatSeconds,\n \"u\": formatWeekdayNumberMonday,\n \"U\": formatWeekNumberSunday,\n \"V\": formatWeekNumberISO,\n \"w\": formatWeekdayNumberSunday,\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 \"f\": formatUTCMicroseconds,\n \"H\": formatUTCHour24,\n \"I\": formatUTCHour12,\n \"j\": formatUTCDayOfYear,\n \"L\": formatUTCMilliseconds,\n \"m\": formatUTCMonthNumber,\n \"M\": formatUTCMinutes,\n \"p\": formatUTCPeriod,\n \"Q\": formatUnixTimestamp,\n \"s\": formatUnixTimestampSeconds,\n \"S\": formatUTCSeconds,\n \"u\": formatUTCWeekdayNumberMonday,\n \"U\": formatUTCWeekNumberSunday,\n \"V\": formatUTCWeekNumberISO,\n \"w\": formatUTCWeekdayNumberSunday,\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 \"f\": parseMicroseconds,\n \"H\": parseHour24,\n \"I\": parseHour24,\n \"j\": parseDayOfYear,\n \"L\": parseMilliseconds,\n \"m\": parseMonthNumber,\n \"M\": parseMinutes,\n \"p\": parsePeriod,\n \"Q\": parseUnixTimestamp,\n \"s\": parseUnixTimestampSeconds,\n \"S\": parseSeconds,\n \"u\": parseWeekdayNumberMonday,\n \"U\": parseWeekNumberSunday,\n \"V\": parseWeekNumberISO,\n \"w\": parseWeekdayNumberSunday,\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 if (!(date instanceof Date)) date = new Date(+date);\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 else pad = c === \"e\" ? \" \" : \"0\";\n if (format = formats[c]) c = format(date, 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 week, day;\n if (i != string.length) return null;\n\n // If a UNIX timestamp is specified, return it.\n if (\"Q\" in d) return new Date(d.Q);\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 // Convert day-of-week and week-of-year to day-of-year.\n if (\"V\" in d) {\n if (d.V < 1 || d.V > 53) return null;\n if (!(\"w\" in d)) d.w = 1;\n if (\"Z\" in d) {\n week = utcDate(newYear(d.y)), day = week.getUTCDay();\n week = day > 4 || day === 0 ? utcMonday.ceil(week) : utcMonday(week);\n week = utcDay.offset(week, (d.V - 1) * 7);\n d.y = week.getUTCFullYear();\n d.m = week.getUTCMonth();\n d.d = week.getUTCDate() + (d.w + 6) % 7;\n } else {\n week = newDate(newYear(d.y)), day = week.getDay();\n week = day > 4 || day === 0 ? timeMonday.ceil(week) : timeMonday(week);\n week = timeDay.offset(week, (d.V - 1) * 7);\n d.y = week.getFullYear();\n d.m = week.getMonth();\n d.d = week.getDate() + (d.w + 6) % 7;\n }\n } else if (\"W\" in d || \"U\" in d) {\n if (!(\"w\" in d)) d.w = \"u\" in d ? d.u % 7 : \"W\" in d ? 1 : 0;\n day = \"Z\" in d ? utcDate(newYear(d.y)).getUTCDay() : newDate(newYear(d.y)).getDay();\n d.m = 0;\n d.d = \"W\" in d ? (d.w + 6) % 7 + d.W * 7 - (day + 5) % 7 : d.w + d.U * 7 - (day + 6) % 7;\n }\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 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 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 parsePeriod(d, string, i) {\n var n = periodRe.exec(string.slice(i));\n return n ? (d.p = periodLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n }\n\n function parseShortWeekday(d, string, i) {\n var n = shortWeekdayRe.exec(string.slice(i));\n return n ? (d.w = shortWeekdayLookup[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[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[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[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 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.toString = function() { return specifier; };\n return f;\n },\n parse: function(specifier) {\n var p = newParse(specifier += \"\", localDate);\n p.toString = function() { return specifier; };\n return p;\n },\n utcFormat: function(specifier) {\n var f = newFormat(specifier += \"\", utcFormats);\n f.toString = function() { return specifier; };\n return f;\n },\n utcParse: function(specifier) {\n var p = newParse(specifier, utcDate);\n p.toString = function() { return specifier; };\n return p;\n }\n };\n}\n\nvar pads = {\"-\": \"\", \"_\": \" \", \"0\": \"0\"},\n numberRe = /^\\s*\\d+/, // note: ignores next directive\n percentRe = /^%/,\n requoteRe = /[\\\\^$*+?|[\\]().{}]/g;\n\nfunction 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\nfunction requote(s) {\n return s.replace(requoteRe, \"\\\\$&\");\n}\n\nfunction formatRe(names) {\n return new RegExp(\"^(?:\" + names.map(requote).join(\"|\") + \")\", \"i\");\n}\n\nfunction formatLookup(names) {\n var map = {}, i = -1, n = names.length;\n while (++i < n) map[names[i].toLowerCase()] = i;\n return map;\n}\n\nfunction parseWeekdayNumberSunday(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\nfunction parseWeekdayNumberMonday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 1));\n return n ? (d.u = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberSunday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.U = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberISO(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.V = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberMonday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.W = +n[0], i + n[0].length) : -1;\n}\n\nfunction 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\nfunction 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\nfunction parseZone(d, string, i) {\n var n = /^(Z)|([+-]\\d\\d)(?::?(\\d\\d))?/.exec(string.slice(i, i + 6));\n return n ? (d.Z = n[1] ? 0 : -(n[2] + (n[3] || \"00\")), i + n[0].length) : -1;\n}\n\nfunction 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\nfunction 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\nfunction 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\nfunction 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\nfunction 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\nfunction 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\nfunction 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\nfunction parseMicroseconds(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 6));\n return n ? (d.L = Math.floor(n[0] / 1000), i + n[0].length) : -1;\n}\n\nfunction parseLiteralPercent(d, string, i) {\n var n = percentRe.exec(string.slice(i, i + 1));\n return n ? i + n[0].length : -1;\n}\n\nfunction parseUnixTimestamp(d, string, i) {\n var n = numberRe.exec(string.slice(i));\n return n ? (d.Q = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseUnixTimestampSeconds(d, string, i) {\n var n = numberRe.exec(string.slice(i));\n return n ? (d.Q = (+n[0]) * 1000, i + n[0].length) : -1;\n}\n\nfunction formatDayOfMonth(d, p) {\n return pad(d.getDate(), p, 2);\n}\n\nfunction formatHour24(d, p) {\n return pad(d.getHours(), p, 2);\n}\n\nfunction formatHour12(d, p) {\n return pad(d.getHours() % 12 || 12, p, 2);\n}\n\nfunction formatDayOfYear(d, p) {\n return pad(1 + timeDay.count(timeYear(d), d), p, 3);\n}\n\nfunction formatMilliseconds(d, p) {\n return pad(d.getMilliseconds(), p, 3);\n}\n\nfunction formatMicroseconds(d, p) {\n return formatMilliseconds(d, p) + \"000\";\n}\n\nfunction formatMonthNumber(d, p) {\n return pad(d.getMonth() + 1, p, 2);\n}\n\nfunction formatMinutes(d, p) {\n return pad(d.getMinutes(), p, 2);\n}\n\nfunction formatSeconds(d, p) {\n return pad(d.getSeconds(), p, 2);\n}\n\nfunction formatWeekdayNumberMonday(d) {\n var day = d.getDay();\n return day === 0 ? 7 : day;\n}\n\nfunction formatWeekNumberSunday(d, p) {\n return pad(timeSunday.count(timeYear(d), d), p, 2);\n}\n\nfunction formatWeekNumberISO(d, p) {\n var day = d.getDay();\n d = (day >= 4 || day === 0) ? timeThursday(d) : timeThursday.ceil(d);\n return pad(timeThursday.count(timeYear(d), d) + (timeYear(d).getDay() === 4), p, 2);\n}\n\nfunction formatWeekdayNumberSunday(d) {\n return d.getDay();\n}\n\nfunction formatWeekNumberMonday(d, p) {\n return pad(timeMonday.count(timeYear(d), d), p, 2);\n}\n\nfunction formatYear(d, p) {\n return pad(d.getFullYear() % 100, p, 2);\n}\n\nfunction formatFullYear(d, p) {\n return pad(d.getFullYear() % 10000, p, 4);\n}\n\nfunction 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\nfunction formatUTCDayOfMonth(d, p) {\n return pad(d.getUTCDate(), p, 2);\n}\n\nfunction formatUTCHour24(d, p) {\n return pad(d.getUTCHours(), p, 2);\n}\n\nfunction formatUTCHour12(d, p) {\n return pad(d.getUTCHours() % 12 || 12, p, 2);\n}\n\nfunction formatUTCDayOfYear(d, p) {\n return pad(1 + utcDay.count(utcYear(d), d), p, 3);\n}\n\nfunction formatUTCMilliseconds(d, p) {\n return pad(d.getUTCMilliseconds(), p, 3);\n}\n\nfunction formatUTCMicroseconds(d, p) {\n return formatUTCMilliseconds(d, p) + \"000\";\n}\n\nfunction formatUTCMonthNumber(d, p) {\n return pad(d.getUTCMonth() + 1, p, 2);\n}\n\nfunction formatUTCMinutes(d, p) {\n return pad(d.getUTCMinutes(), p, 2);\n}\n\nfunction formatUTCSeconds(d, p) {\n return pad(d.getUTCSeconds(), p, 2);\n}\n\nfunction formatUTCWeekdayNumberMonday(d) {\n var dow = d.getUTCDay();\n return dow === 0 ? 7 : dow;\n}\n\nfunction formatUTCWeekNumberSunday(d, p) {\n return pad(utcSunday.count(utcYear(d), d), p, 2);\n}\n\nfunction formatUTCWeekNumberISO(d, p) {\n var day = d.getUTCDay();\n d = (day >= 4 || day === 0) ? utcThursday(d) : utcThursday.ceil(d);\n return pad(utcThursday.count(utcYear(d), d) + (utcYear(d).getUTCDay() === 4), p, 2);\n}\n\nfunction formatUTCWeekdayNumberSunday(d) {\n return d.getUTCDay();\n}\n\nfunction formatUTCWeekNumberMonday(d, p) {\n return pad(utcMonday.count(utcYear(d), d), p, 2);\n}\n\nfunction formatUTCYear(d, p) {\n return pad(d.getUTCFullYear() % 100, p, 2);\n}\n\nfunction formatUTCFullYear(d, p) {\n return pad(d.getUTCFullYear() % 10000, p, 4);\n}\n\nfunction formatUTCZone() {\n return \"+0000\";\n}\n\nfunction formatLiteralPercent() {\n return \"%\";\n}\n\nfunction formatUnixTimestamp(d) {\n return +d;\n}\n\nfunction formatUnixTimestampSeconds(d) {\n return Math.floor(+d / 1000);\n}\n","import formatLocale from \"./locale\";\n\nvar locale;\nexport var timeFormat;\nexport var timeParse;\nexport var utcFormat;\nexport var utcParse;\n\ndefaultLocale({\n dateTime: \"%x, %X\",\n date: \"%-m/%-d/%Y\",\n time: \"%-I:%M:%S %p\",\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\nexport default function defaultLocale(definition) {\n locale = formatLocale(definition);\n timeFormat = locale.format;\n timeParse = locale.parse;\n utcFormat = locale.utcFormat;\n utcParse = locale.utcParse;\n return locale;\n}\n","import {utcFormat} from \"./defaultLocale\";\n\nexport var isoSpecifier = \"%Y-%m-%dT%H:%M:%S.%LZ\";\n\nfunction formatIsoNative(date) {\n return date.toISOString();\n}\n\nvar formatIso = Date.prototype.toISOString\n ? formatIsoNative\n : utcFormat(isoSpecifier);\n\nexport default formatIso;\n","import {isoSpecifier} from \"./isoFormat\";\nimport {utcParse} from \"./defaultLocale\";\n\nfunction parseIsoNative(string) {\n var date = new Date(string);\n return isNaN(date) ? null : date;\n}\n\nvar parseIso = +new Date(\"2000-01-01T00:00:00.000Z\")\n ? parseIsoNative\n : utcParse(isoSpecifier);\n\nexport default parseIso;\n","import {bisector, tickStep} from \"d3-array\";\nimport {interpolateNumber as reinterpolate} from \"d3-interpolate\";\nimport {timeYear, timeMonth, timeWeek, timeDay, timeHour, timeMinute, timeSecond, timeMillisecond} from \"d3-time\";\nimport {timeFormat} from \"d3-time-format\";\nimport {map} from \"./array\";\nimport {default as continuous, copy, deinterpolateLinear as deinterpolate} from \"./continuous\";\nimport nice from \"./nice\";\n\nvar durationSecond = 1000,\n durationMinute = durationSecond * 60,\n durationHour = durationMinute * 60,\n durationDay = durationHour * 24,\n durationWeek = durationDay * 7,\n durationMonth = durationDay * 30,\n durationYear = durationDay * 365;\n\nfunction date(t) {\n return new Date(t);\n}\n\nfunction number(t) {\n return t instanceof Date ? +t : +new Date(+t);\n}\n\nexport function calendar(year, month, week, day, hour, minute, second, millisecond, format) {\n var scale = continuous(deinterpolate, reinterpolate),\n invert = scale.invert,\n domain = scale.domain;\n\n var formatMillisecond = format(\".%L\"),\n formatSecond = format(\":%S\"),\n formatMinute = format(\"%I:%M\"),\n formatHour = format(\"%I %p\"),\n formatDay = format(\"%a %d\"),\n formatWeek = format(\"%b %d\"),\n formatMonth = format(\"%B\"),\n formatYear = format(\"%Y\");\n\n var tickIntervals = [\n [second, 1, durationSecond],\n [second, 5, 5 * durationSecond],\n [second, 15, 15 * durationSecond],\n [second, 30, 30 * durationSecond],\n [minute, 1, durationMinute],\n [minute, 5, 5 * durationMinute],\n [minute, 15, 15 * durationMinute],\n [minute, 30, 30 * durationMinute],\n [ hour, 1, durationHour ],\n [ hour, 3, 3 * durationHour ],\n [ hour, 6, 6 * durationHour ],\n [ hour, 12, 12 * durationHour ],\n [ day, 1, durationDay ],\n [ day, 2, 2 * durationDay ],\n [ week, 1, durationWeek ],\n [ month, 1, durationMonth ],\n [ month, 3, 3 * durationMonth ],\n [ year, 1, durationYear ]\n ];\n\n function tickFormat(date) {\n return (second(date) < date ? formatMillisecond\n : minute(date) < date ? formatSecond\n : hour(date) < date ? formatMinute\n : day(date) < date ? formatHour\n : month(date) < date ? (week(date) < date ? formatDay : formatWeek)\n : year(date) < date ? formatMonth\n : formatYear)(date);\n }\n\n function tickInterval(interval, start, stop, step) {\n if (interval == null) interval = 10;\n\n // If a desired tick count is specified, pick a reasonable tick interval\n // based on the extent of the domain and a rough estimate of tick size.\n // Otherwise, assume interval is already a time interval and use it.\n if (typeof interval === \"number\") {\n var target = Math.abs(stop - start) / interval,\n i = bisector(function(i) { return i[2]; }).right(tickIntervals, target);\n if (i === tickIntervals.length) {\n step = tickStep(start / durationYear, stop / durationYear, interval);\n interval = year;\n } else if (i) {\n i = tickIntervals[target / tickIntervals[i - 1][2] < tickIntervals[i][2] / target ? i - 1 : i];\n step = i[1];\n interval = i[0];\n } else {\n step = Math.max(tickStep(start, stop, interval), 1);\n interval = millisecond;\n }\n }\n\n return step == null ? interval : interval.every(step);\n }\n\n scale.invert = function(y) {\n return new Date(invert(y));\n };\n\n scale.domain = function(_) {\n return arguments.length ? domain(map.call(_, number)) : domain().map(date);\n };\n\n scale.ticks = function(interval, step) {\n var d = domain(),\n t0 = d[0],\n t1 = d[d.length - 1],\n r = t1 < t0,\n t;\n if (r) t = t0, t0 = t1, t1 = t;\n t = tickInterval(interval, t0, t1, step);\n t = t ? t.range(t0, t1 + 1) : []; // inclusive stop\n return r ? t.reverse() : t;\n };\n\n scale.tickFormat = function(count, specifier) {\n return specifier == null ? tickFormat : format(specifier);\n };\n\n scale.nice = function(interval, step) {\n var d = domain();\n return (interval = tickInterval(interval, d[0], d[d.length - 1], step))\n ? domain(nice(d, interval))\n : scale;\n };\n\n scale.copy = function() {\n return copy(scale, calendar(year, month, week, day, hour, minute, second, millisecond, format));\n };\n\n return scale;\n}\n\nexport default function() {\n return calendar(timeYear, timeMonth, timeWeek, timeDay, timeHour, timeMinute, timeSecond, timeMillisecond, timeFormat).domain([new Date(2000, 0, 1), new Date(2000, 0, 2)]);\n}\n","export default function(s) {\n return s.match(/.{6}/g).map(function(x) {\n return \"#\" + x;\n });\n}\n","import colors from \"./colors\";\n\nexport default colors(\"1f77b4ff7f0e2ca02cd627289467bd8c564be377c27f7f7fbcbd2217becf\");\n","import colors from \"./colors\";\n\nexport default colors(\"393b795254a36b6ecf9c9ede6379398ca252b5cf6bcedb9c8c6d31bd9e39e7ba52e7cb94843c39ad494ad6616be7969c7b4173a55194ce6dbdde9ed6\");\n","import colors from \"./colors\";\n\nexport default colors(\"1f77b4aec7e8ff7f0effbb782ca02c98df8ad62728ff98969467bdc5b0d58c564bc49c94e377c2f7b6d27f7f7fc7c7c7bcbd22dbdb8d17becf9edae5\");\n","import colors from \"./colors\";\n\nexport default colors(\"3182bd6baed69ecae1c6dbefe6550dfd8d3cfdae6bfdd0a231a35474c476a1d99bc7e9c0756bb19e9ac8bcbddcdadaeb636363969696bdbdbdd9d9d9\");\n","import {cubehelix} from \"d3-color\";\nimport {interpolateCubehelixLong} from \"d3-interpolate\";\n\nexport default interpolateCubehelixLong(cubehelix(300, 0.5, 0.0), cubehelix(-240, 0.5, 1.0));\n","import {cubehelix} from \"d3-color\";\nimport {interpolateCubehelixLong} from \"d3-interpolate\";\n\nexport var warm = interpolateCubehelixLong(cubehelix(-100, 0.75, 0.35), cubehelix(80, 1.50, 0.8));\n\nexport var cool = interpolateCubehelixLong(cubehelix(260, 0.75, 0.35), cubehelix(80, 1.50, 0.8));\n\nvar rainbow = cubehelix();\n\nexport default function(t) {\n if (t < 0 || t > 1) t -= Math.floor(t);\n var ts = Math.abs(t - 0.5);\n rainbow.h = 360 * t - 100;\n rainbow.s = 1.5 - 1.5 * ts;\n rainbow.l = 0.8 - 0.9 * ts;\n return rainbow + \"\";\n}\n","import colors from \"./colors\";\n\nfunction ramp(range) {\n var n = range.length;\n return function(t) {\n return range[Math.max(0, Math.min(n - 1, Math.floor(t * n)))];\n };\n}\n\nexport default ramp(colors(\"44015444025645045745055946075a46085c460a5d460b5e470d60470e6147106347116447136548146748166848176948186a481a6c481b6d481c6e481d6f481f70482071482173482374482475482576482677482878482979472a7a472c7a472d7b472e7c472f7d46307e46327e46337f463480453581453781453882443983443a83443b84433d84433e85423f854240864241864142874144874045884046883f47883f48893e49893e4a893e4c8a3d4d8a3d4e8a3c4f8a3c508b3b518b3b528b3a538b3a548c39558c39568c38588c38598c375a8c375b8d365c8d365d8d355e8d355f8d34608d34618d33628d33638d32648e32658e31668e31678e31688e30698e306a8e2f6b8e2f6c8e2e6d8e2e6e8e2e6f8e2d708e2d718e2c718e2c728e2c738e2b748e2b758e2a768e2a778e2a788e29798e297a8e297b8e287c8e287d8e277e8e277f8e27808e26818e26828e26828e25838e25848e25858e24868e24878e23888e23898e238a8d228b8d228c8d228d8d218e8d218f8d21908d21918c20928c20928c20938c1f948c1f958b1f968b1f978b1f988b1f998a1f9a8a1e9b8a1e9c891e9d891f9e891f9f881fa0881fa1881fa1871fa28720a38620a48621a58521a68522a78522a88423a98324aa8325ab8225ac8226ad8127ad8128ae8029af7f2ab07f2cb17e2db27d2eb37c2fb47c31b57b32b67a34b67935b77937b87838b9773aba763bbb753dbc743fbc7340bd7242be7144bf7046c06f48c16e4ac16d4cc26c4ec36b50c46a52c56954c56856c66758c7655ac8645cc8635ec96260ca6063cb5f65cb5e67cc5c69cd5b6ccd5a6ece5870cf5773d05675d05477d1537ad1517cd2507fd34e81d34d84d44b86d54989d5488bd6468ed64590d74393d74195d84098d83e9bd93c9dd93ba0da39a2da37a5db36a8db34aadc32addc30b0dd2fb2dd2db5de2bb8de29bade28bddf26c0df25c2df23c5e021c8e020cae11fcde11dd0e11cd2e21bd5e21ad8e219dae319dde318dfe318e2e418e5e419e7e419eae51aece51befe51cf1e51df4e61ef6e620f8e621fbe723fde725\"));\n\nexport var magma = ramp(colors(\"00000401000501010601010802010902020b02020d03030f03031204041405041606051806051a07061c08071e0907200a08220b09240c09260d0a290e0b2b100b2d110c2f120d31130d34140e36150e38160f3b180f3d19103f1a10421c10441d11471e114920114b21114e22115024125325125527125829115a2a115c2c115f2d11612f116331116533106734106936106b38106c390f6e3b0f703d0f713f0f72400f74420f75440f764510774710784910784a10794c117a4e117b4f127b51127c52137c54137d56147d57157e59157e5a167e5c167f5d177f5f187f601880621980641a80651a80671b80681c816a1c816b1d816d1d816e1e81701f81721f817320817521817621817822817922827b23827c23827e24828025828125818326818426818627818827818928818b29818c29818e2a81902a81912b81932b80942c80962c80982d80992d809b2e7f9c2e7f9e2f7fa02f7fa1307ea3307ea5317ea6317da8327daa337dab337cad347cae347bb0357bb2357bb3367ab5367ab73779b83779ba3878bc3978bd3977bf3a77c03a76c23b75c43c75c53c74c73d73c83e73ca3e72cc3f71cd4071cf4070d0416fd2426fd3436ed5446dd6456cd8456cd9466bdb476adc4869de4968df4a68e04c67e24d66e34e65e44f64e55064e75263e85362e95462ea5661eb5760ec5860ed5a5fee5b5eef5d5ef05f5ef1605df2625df2645cf3655cf4675cf4695cf56b5cf66c5cf66e5cf7705cf7725cf8745cf8765cf9785df9795df97b5dfa7d5efa7f5efa815ffb835ffb8560fb8761fc8961fc8a62fc8c63fc8e64fc9065fd9266fd9467fd9668fd9869fd9a6afd9b6bfe9d6cfe9f6dfea16efea36ffea571fea772fea973feaa74feac76feae77feb078feb27afeb47bfeb67cfeb77efeb97ffebb81febd82febf84fec185fec287fec488fec68afec88cfeca8dfecc8ffecd90fecf92fed194fed395fed597fed799fed89afdda9cfddc9efddea0fde0a1fde2a3fde3a5fde5a7fde7a9fde9aafdebacfcecaefceeb0fcf0b2fcf2b4fcf4b6fcf6b8fcf7b9fcf9bbfcfbbdfcfdbf\"));\n\nexport var inferno = ramp(colors(\"00000401000501010601010802010a02020c02020e03021004031204031405041706041907051b08051d09061f0a07220b07240c08260d08290e092b10092d110a30120a32140b34150b37160b39180c3c190c3e1b0c411c0c431e0c451f0c48210c4a230c4c240c4f260c51280b53290b552b0b572d0b592f0a5b310a5c320a5e340a5f3609613809623909633b09643d09653e0966400a67420a68440a68450a69470b6a490b6a4a0c6b4c0c6b4d0d6c4f0d6c510e6c520e6d540f6d550f6d57106e59106e5a116e5c126e5d126e5f136e61136e62146e64156e65156e67166e69166e6a176e6c186e6d186e6f196e71196e721a6e741a6e751b6e771c6d781c6d7a1d6d7c1d6d7d1e6d7f1e6c801f6c82206c84206b85216b87216b88226a8a226a8c23698d23698f24699025689225689326679526679727669827669a28659b29649d29649f2a63a02a63a22b62a32c61a52c60a62d60a82e5fa92e5eab2f5ead305dae305cb0315bb1325ab3325ab43359b63458b73557b93556ba3655bc3754bd3853bf3952c03a51c13a50c33b4fc43c4ec63d4dc73e4cc83f4bca404acb4149cc4248ce4347cf4446d04545d24644d34743d44842d54a41d74b3fd84c3ed94d3dda4e3cdb503bdd513ade5238df5337e05536e15635e25734e35933e45a31e55c30e65d2fe75e2ee8602de9612bea632aeb6429eb6628ec6726ed6925ee6a24ef6c23ef6e21f06f20f1711ff1731df2741cf3761bf37819f47918f57b17f57d15f67e14f68013f78212f78410f8850ff8870ef8890cf98b0bf98c0af98e09fa9008fa9207fa9407fb9606fb9706fb9906fb9b06fb9d07fc9f07fca108fca309fca50afca60cfca80dfcaa0ffcac11fcae12fcb014fcb216fcb418fbb61afbb81dfbba1ffbbc21fbbe23fac026fac228fac42afac62df9c72ff9c932f9cb35f8cd37f8cf3af7d13df7d340f6d543f6d746f5d949f5db4cf4dd4ff4df53f4e156f3e35af3e55df2e661f2e865f2ea69f1ec6df1ed71f1ef75f1f179f2f27df2f482f3f586f3f68af4f88ef5f992f6fa96f8fb9af9fc9dfafda1fcffa4\"));\n\nexport var plasma = ramp(colors(\"0d088710078813078916078a19068c1b068d1d068e20068f2206902406912605912805922a05932c05942e05952f059631059733059735049837049938049a3a049a3c049b3e049c3f049c41049d43039e44039e46039f48039f4903a04b03a14c02a14e02a25002a25102a35302a35502a45601a45801a45901a55b01a55c01a65e01a66001a66100a76300a76400a76600a76700a86900a86a00a86c00a86e00a86f00a87100a87201a87401a87501a87701a87801a87a02a87b02a87d03a87e03a88004a88104a78305a78405a78606a68707a68808a68a09a58b0aa58d0ba58e0ca48f0da4910ea3920fa39410a29511a19613a19814a099159f9a169f9c179e9d189d9e199da01a9ca11b9ba21d9aa31e9aa51f99a62098a72197a82296aa2395ab2494ac2694ad2793ae2892b02991b12a90b22b8fb32c8eb42e8db52f8cb6308bb7318ab83289ba3388bb3488bc3587bd3786be3885bf3984c03a83c13b82c23c81c33d80c43e7fc5407ec6417dc7427cc8437bc9447aca457acb4679cc4778cc4977cd4a76ce4b75cf4c74d04d73d14e72d24f71d35171d45270d5536fd5546ed6556dd7566cd8576bd9586ada5a6ada5b69db5c68dc5d67dd5e66de5f65de6164df6263e06363e16462e26561e26660e3685fe4695ee56a5de56b5de66c5ce76e5be76f5ae87059e97158e97257ea7457eb7556eb7655ec7754ed7953ed7a52ee7b51ef7c51ef7e50f07f4ff0804ef1814df1834cf2844bf3854bf3874af48849f48948f58b47f58c46f68d45f68f44f79044f79143f79342f89441f89540f9973ff9983ef99a3efa9b3dfa9c3cfa9e3bfb9f3afba139fba238fca338fca537fca636fca835fca934fdab33fdac33fdae32fdaf31fdb130fdb22ffdb42ffdb52efeb72dfeb82cfeba2cfebb2bfebd2afebe2afec029fdc229fdc328fdc527fdc627fdc827fdca26fdcb26fccd25fcce25fcd025fcd225fbd324fbd524fbd724fad824fada24f9dc24f9dd25f8df25f8e125f7e225f7e425f6e626f6e826f5e926f5eb27f4ed27f3ee27f3f027f2f227f1f426f1f525f0f724f0f921\"));\n","import {linearish} from \"./linear\";\n\nexport default function sequential(interpolator) {\n var x0 = 0,\n x1 = 1,\n clamp = false;\n\n function scale(x) {\n var t = (x - x0) / (x1 - x0);\n return interpolator(clamp ? Math.max(0, Math.min(1, t)) : t);\n }\n\n scale.domain = function(_) {\n return arguments.length ? (x0 = +_[0], x1 = +_[1], scale) : [x0, x1];\n };\n\n scale.clamp = function(_) {\n return arguments.length ? (clamp = !!_, scale) : clamp;\n };\n\n scale.interpolator = function(_) {\n return arguments.length ? (interpolator = _, scale) : interpolator;\n };\n\n scale.copy = function() {\n return sequential(interpolator).domain([x0, x1]).clamp(clamp);\n };\n\n return linearish(scale);\n}\n","export default function(specifier) {\n var n = specifier.length / 6 | 0, colors = new Array(n), i = 0;\n while (i < n) colors[i] = \"#\" + specifier.slice(i * 6, ++i * 6);\n return colors;\n}\n","import colors from \"../colors\";\n\nexport default colors(\"7fc97fbeaed4fdc086ffff99386cb0f0027fbf5b17666666\");\n","import colors from \"../colors\";\n\nexport default colors(\"1f77b4ff7f0e2ca02cd627289467bd8c564be377c27f7f7fbcbd2217becf\");\n","import colors from \"../colors\";\n\nexport default colors(\"1b9e77d95f027570b3e7298a66a61ee6ab02a6761d666666\");\n","import colors from \"../colors\";\n\nexport default colors(\"a6cee31f78b4b2df8a33a02cfb9a99e31a1cfdbf6fff7f00cab2d66a3d9affff99b15928\");\n","import colors from \"../colors\";\n\nexport default colors(\"fbb4aeb3cde3ccebc5decbe4fed9a6ffffcce5d8bdfddaecf2f2f2\");\n","import colors from \"../colors\";\n\nexport default colors(\"b3e2cdfdcdaccbd5e8f4cae4e6f5c9fff2aef1e2cccccccc\");\n","import colors from \"../colors\";\n\nexport default colors(\"e41a1c377eb84daf4a984ea3ff7f00ffff33a65628f781bf999999\");\n","import colors from \"../colors\";\n\nexport default colors(\"66c2a5fc8d628da0cbe78ac3a6d854ffd92fe5c494b3b3b3\");\n","import colors from \"../colors\";\n\nexport default colors(\"8dd3c7ffffb3bebadafb807280b1d3fdb462b3de69fccde5d9d9d9bc80bdccebc5ffed6f\");\n","import {interpolateRgbBasis} from \"d3-interpolate\";\n\nexport default function(scheme) {\n return interpolateRgbBasis(scheme[scheme.length - 1]);\n}\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"d8b365f5f5f55ab4ac\",\n \"a6611adfc27d80cdc1018571\",\n \"a6611adfc27df5f5f580cdc1018571\",\n \"8c510ad8b365f6e8c3c7eae55ab4ac01665e\",\n \"8c510ad8b365f6e8c3f5f5f5c7eae55ab4ac01665e\",\n \"8c510abf812ddfc27df6e8c3c7eae580cdc135978f01665e\",\n \"8c510abf812ddfc27df6e8c3f5f5f5c7eae580cdc135978f01665e\",\n \"5430058c510abf812ddfc27df6e8c3c7eae580cdc135978f01665e003c30\",\n \"5430058c510abf812ddfc27df6e8c3f5f5f5c7eae580cdc135978f01665e003c30\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"af8dc3f7f7f77fbf7b\",\n \"7b3294c2a5cfa6dba0008837\",\n \"7b3294c2a5cff7f7f7a6dba0008837\",\n \"762a83af8dc3e7d4e8d9f0d37fbf7b1b7837\",\n \"762a83af8dc3e7d4e8f7f7f7d9f0d37fbf7b1b7837\",\n \"762a839970abc2a5cfe7d4e8d9f0d3a6dba05aae611b7837\",\n \"762a839970abc2a5cfe7d4e8f7f7f7d9f0d3a6dba05aae611b7837\",\n \"40004b762a839970abc2a5cfe7d4e8d9f0d3a6dba05aae611b783700441b\",\n \"40004b762a839970abc2a5cfe7d4e8f7f7f7d9f0d3a6dba05aae611b783700441b\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"e9a3c9f7f7f7a1d76a\",\n \"d01c8bf1b6dab8e1864dac26\",\n \"d01c8bf1b6daf7f7f7b8e1864dac26\",\n \"c51b7de9a3c9fde0efe6f5d0a1d76a4d9221\",\n \"c51b7de9a3c9fde0eff7f7f7e6f5d0a1d76a4d9221\",\n \"c51b7dde77aef1b6dafde0efe6f5d0b8e1867fbc414d9221\",\n \"c51b7dde77aef1b6dafde0eff7f7f7e6f5d0b8e1867fbc414d9221\",\n \"8e0152c51b7dde77aef1b6dafde0efe6f5d0b8e1867fbc414d9221276419\",\n \"8e0152c51b7dde77aef1b6dafde0eff7f7f7e6f5d0b8e1867fbc414d9221276419\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"998ec3f7f7f7f1a340\",\n \"5e3c99b2abd2fdb863e66101\",\n \"5e3c99b2abd2f7f7f7fdb863e66101\",\n \"542788998ec3d8daebfee0b6f1a340b35806\",\n \"542788998ec3d8daebf7f7f7fee0b6f1a340b35806\",\n \"5427888073acb2abd2d8daebfee0b6fdb863e08214b35806\",\n \"5427888073acb2abd2d8daebf7f7f7fee0b6fdb863e08214b35806\",\n \"2d004b5427888073acb2abd2d8daebfee0b6fdb863e08214b358067f3b08\",\n \"2d004b5427888073acb2abd2d8daebf7f7f7fee0b6fdb863e08214b358067f3b08\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"ef8a62f7f7f767a9cf\",\n \"ca0020f4a58292c5de0571b0\",\n \"ca0020f4a582f7f7f792c5de0571b0\",\n \"b2182bef8a62fddbc7d1e5f067a9cf2166ac\",\n \"b2182bef8a62fddbc7f7f7f7d1e5f067a9cf2166ac\",\n \"b2182bd6604df4a582fddbc7d1e5f092c5de4393c32166ac\",\n \"b2182bd6604df4a582fddbc7f7f7f7d1e5f092c5de4393c32166ac\",\n \"67001fb2182bd6604df4a582fddbc7d1e5f092c5de4393c32166ac053061\",\n \"67001fb2182bd6604df4a582fddbc7f7f7f7d1e5f092c5de4393c32166ac053061\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"ef8a62ffffff999999\",\n \"ca0020f4a582bababa404040\",\n \"ca0020f4a582ffffffbababa404040\",\n \"b2182bef8a62fddbc7e0e0e09999994d4d4d\",\n \"b2182bef8a62fddbc7ffffffe0e0e09999994d4d4d\",\n \"b2182bd6604df4a582fddbc7e0e0e0bababa8787874d4d4d\",\n \"b2182bd6604df4a582fddbc7ffffffe0e0e0bababa8787874d4d4d\",\n \"67001fb2182bd6604df4a582fddbc7e0e0e0bababa8787874d4d4d1a1a1a\",\n \"67001fb2182bd6604df4a582fddbc7ffffffe0e0e0bababa8787874d4d4d1a1a1a\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"fc8d59ffffbf91bfdb\",\n \"d7191cfdae61abd9e92c7bb6\",\n \"d7191cfdae61ffffbfabd9e92c7bb6\",\n \"d73027fc8d59fee090e0f3f891bfdb4575b4\",\n \"d73027fc8d59fee090ffffbfe0f3f891bfdb4575b4\",\n \"d73027f46d43fdae61fee090e0f3f8abd9e974add14575b4\",\n \"d73027f46d43fdae61fee090ffffbfe0f3f8abd9e974add14575b4\",\n \"a50026d73027f46d43fdae61fee090e0f3f8abd9e974add14575b4313695\",\n \"a50026d73027f46d43fdae61fee090ffffbfe0f3f8abd9e974add14575b4313695\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"fc8d59ffffbf91cf60\",\n \"d7191cfdae61a6d96a1a9641\",\n \"d7191cfdae61ffffbfa6d96a1a9641\",\n \"d73027fc8d59fee08bd9ef8b91cf601a9850\",\n \"d73027fc8d59fee08bffffbfd9ef8b91cf601a9850\",\n \"d73027f46d43fdae61fee08bd9ef8ba6d96a66bd631a9850\",\n \"d73027f46d43fdae61fee08bffffbfd9ef8ba6d96a66bd631a9850\",\n \"a50026d73027f46d43fdae61fee08bd9ef8ba6d96a66bd631a9850006837\",\n \"a50026d73027f46d43fdae61fee08bffffbfd9ef8ba6d96a66bd631a9850006837\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"fc8d59ffffbf99d594\",\n \"d7191cfdae61abdda42b83ba\",\n \"d7191cfdae61ffffbfabdda42b83ba\",\n \"d53e4ffc8d59fee08be6f59899d5943288bd\",\n \"d53e4ffc8d59fee08bffffbfe6f59899d5943288bd\",\n \"d53e4ff46d43fdae61fee08be6f598abdda466c2a53288bd\",\n \"d53e4ff46d43fdae61fee08bffffbfe6f598abdda466c2a53288bd\",\n \"9e0142d53e4ff46d43fdae61fee08be6f598abdda466c2a53288bd5e4fa2\",\n \"9e0142d53e4ff46d43fdae61fee08bffffbfe6f598abdda466c2a53288bd5e4fa2\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"e5f5f999d8c92ca25f\",\n \"edf8fbb2e2e266c2a4238b45\",\n \"edf8fbb2e2e266c2a42ca25f006d2c\",\n \"edf8fbccece699d8c966c2a42ca25f006d2c\",\n \"edf8fbccece699d8c966c2a441ae76238b45005824\",\n \"f7fcfde5f5f9ccece699d8c966c2a441ae76238b45005824\",\n \"f7fcfde5f5f9ccece699d8c966c2a441ae76238b45006d2c00441b\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"e0ecf49ebcda8856a7\",\n \"edf8fbb3cde38c96c688419d\",\n \"edf8fbb3cde38c96c68856a7810f7c\",\n \"edf8fbbfd3e69ebcda8c96c68856a7810f7c\",\n \"edf8fbbfd3e69ebcda8c96c68c6bb188419d6e016b\",\n \"f7fcfde0ecf4bfd3e69ebcda8c96c68c6bb188419d6e016b\",\n \"f7fcfde0ecf4bfd3e69ebcda8c96c68c6bb188419d810f7c4d004b\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"e0f3dba8ddb543a2ca\",\n \"f0f9e8bae4bc7bccc42b8cbe\",\n \"f0f9e8bae4bc7bccc443a2ca0868ac\",\n \"f0f9e8ccebc5a8ddb57bccc443a2ca0868ac\",\n \"f0f9e8ccebc5a8ddb57bccc44eb3d32b8cbe08589e\",\n \"f7fcf0e0f3dbccebc5a8ddb57bccc44eb3d32b8cbe08589e\",\n \"f7fcf0e0f3dbccebc5a8ddb57bccc44eb3d32b8cbe0868ac084081\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"fee8c8fdbb84e34a33\",\n \"fef0d9fdcc8afc8d59d7301f\",\n \"fef0d9fdcc8afc8d59e34a33b30000\",\n \"fef0d9fdd49efdbb84fc8d59e34a33b30000\",\n \"fef0d9fdd49efdbb84fc8d59ef6548d7301f990000\",\n \"fff7ecfee8c8fdd49efdbb84fc8d59ef6548d7301f990000\",\n \"fff7ecfee8c8fdd49efdbb84fc8d59ef6548d7301fb300007f0000\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"ece2f0a6bddb1c9099\",\n \"f6eff7bdc9e167a9cf02818a\",\n \"f6eff7bdc9e167a9cf1c9099016c59\",\n \"f6eff7d0d1e6a6bddb67a9cf1c9099016c59\",\n \"f6eff7d0d1e6a6bddb67a9cf3690c002818a016450\",\n \"fff7fbece2f0d0d1e6a6bddb67a9cf3690c002818a016450\",\n \"fff7fbece2f0d0d1e6a6bddb67a9cf3690c002818a016c59014636\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"ece7f2a6bddb2b8cbe\",\n \"f1eef6bdc9e174a9cf0570b0\",\n \"f1eef6bdc9e174a9cf2b8cbe045a8d\",\n \"f1eef6d0d1e6a6bddb74a9cf2b8cbe045a8d\",\n \"f1eef6d0d1e6a6bddb74a9cf3690c00570b0034e7b\",\n \"fff7fbece7f2d0d1e6a6bddb74a9cf3690c00570b0034e7b\",\n \"fff7fbece7f2d0d1e6a6bddb74a9cf3690c00570b0045a8d023858\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"e7e1efc994c7dd1c77\",\n \"f1eef6d7b5d8df65b0ce1256\",\n \"f1eef6d7b5d8df65b0dd1c77980043\",\n \"f1eef6d4b9dac994c7df65b0dd1c77980043\",\n \"f1eef6d4b9dac994c7df65b0e7298ace125691003f\",\n \"f7f4f9e7e1efd4b9dac994c7df65b0e7298ace125691003f\",\n \"f7f4f9e7e1efd4b9dac994c7df65b0e7298ace125698004367001f\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"fde0ddfa9fb5c51b8a\",\n \"feebe2fbb4b9f768a1ae017e\",\n \"feebe2fbb4b9f768a1c51b8a7a0177\",\n \"feebe2fcc5c0fa9fb5f768a1c51b8a7a0177\",\n \"feebe2fcc5c0fa9fb5f768a1dd3497ae017e7a0177\",\n \"fff7f3fde0ddfcc5c0fa9fb5f768a1dd3497ae017e7a0177\",\n \"fff7f3fde0ddfcc5c0fa9fb5f768a1dd3497ae017e7a017749006a\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"edf8b17fcdbb2c7fb8\",\n \"ffffcca1dab441b6c4225ea8\",\n \"ffffcca1dab441b6c42c7fb8253494\",\n \"ffffccc7e9b47fcdbb41b6c42c7fb8253494\",\n \"ffffccc7e9b47fcdbb41b6c41d91c0225ea80c2c84\",\n \"ffffd9edf8b1c7e9b47fcdbb41b6c41d91c0225ea80c2c84\",\n \"ffffd9edf8b1c7e9b47fcdbb41b6c41d91c0225ea8253494081d58\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"f7fcb9addd8e31a354\",\n \"ffffccc2e69978c679238443\",\n \"ffffccc2e69978c67931a354006837\",\n \"ffffccd9f0a3addd8e78c67931a354006837\",\n \"ffffccd9f0a3addd8e78c67941ab5d238443005a32\",\n \"ffffe5f7fcb9d9f0a3addd8e78c67941ab5d238443005a32\",\n \"ffffe5f7fcb9d9f0a3addd8e78c67941ab5d238443006837004529\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"fff7bcfec44fd95f0e\",\n \"ffffd4fed98efe9929cc4c02\",\n \"ffffd4fed98efe9929d95f0e993404\",\n \"ffffd4fee391fec44ffe9929d95f0e993404\",\n \"ffffd4fee391fec44ffe9929ec7014cc4c028c2d04\",\n \"ffffe5fff7bcfee391fec44ffe9929ec7014cc4c028c2d04\",\n \"ffffe5fff7bcfee391fec44ffe9929ec7014cc4c02993404662506\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"ffeda0feb24cf03b20\",\n \"ffffb2fecc5cfd8d3ce31a1c\",\n \"ffffb2fecc5cfd8d3cf03b20bd0026\",\n \"ffffb2fed976feb24cfd8d3cf03b20bd0026\",\n \"ffffb2fed976feb24cfd8d3cfc4e2ae31a1cb10026\",\n \"ffffccffeda0fed976feb24cfd8d3cfc4e2ae31a1cb10026\",\n \"ffffccffeda0fed976feb24cfd8d3cfc4e2ae31a1cbd0026800026\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"deebf79ecae13182bd\",\n \"eff3ffbdd7e76baed62171b5\",\n \"eff3ffbdd7e76baed63182bd08519c\",\n \"eff3ffc6dbef9ecae16baed63182bd08519c\",\n \"eff3ffc6dbef9ecae16baed64292c62171b5084594\",\n \"f7fbffdeebf7c6dbef9ecae16baed64292c62171b5084594\",\n \"f7fbffdeebf7c6dbef9ecae16baed64292c62171b508519c08306b\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"e5f5e0a1d99b31a354\",\n \"edf8e9bae4b374c476238b45\",\n \"edf8e9bae4b374c47631a354006d2c\",\n \"edf8e9c7e9c0a1d99b74c47631a354006d2c\",\n \"edf8e9c7e9c0a1d99b74c47641ab5d238b45005a32\",\n \"f7fcf5e5f5e0c7e9c0a1d99b74c47641ab5d238b45005a32\",\n \"f7fcf5e5f5e0c7e9c0a1d99b74c47641ab5d238b45006d2c00441b\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"f0f0f0bdbdbd636363\",\n \"f7f7f7cccccc969696525252\",\n \"f7f7f7cccccc969696636363252525\",\n \"f7f7f7d9d9d9bdbdbd969696636363252525\",\n \"f7f7f7d9d9d9bdbdbd969696737373525252252525\",\n \"fffffff0f0f0d9d9d9bdbdbd969696737373525252252525\",\n \"fffffff0f0f0d9d9d9bdbdbd969696737373525252252525000000\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"efedf5bcbddc756bb1\",\n \"f2f0f7cbc9e29e9ac86a51a3\",\n \"f2f0f7cbc9e29e9ac8756bb154278f\",\n \"f2f0f7dadaebbcbddc9e9ac8756bb154278f\",\n \"f2f0f7dadaebbcbddc9e9ac8807dba6a51a34a1486\",\n \"fcfbfdefedf5dadaebbcbddc9e9ac8807dba6a51a34a1486\",\n \"fcfbfdefedf5dadaebbcbddc9e9ac8807dba6a51a354278f3f007d\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"fee0d2fc9272de2d26\",\n \"fee5d9fcae91fb6a4acb181d\",\n \"fee5d9fcae91fb6a4ade2d26a50f15\",\n \"fee5d9fcbba1fc9272fb6a4ade2d26a50f15\",\n \"fee5d9fcbba1fc9272fb6a4aef3b2ccb181d99000d\",\n \"fff5f0fee0d2fcbba1fc9272fb6a4aef3b2ccb181d99000d\",\n \"fff5f0fee0d2fcbba1fc9272fb6a4aef3b2ccb181da50f1567000d\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"fee6cefdae6be6550d\",\n \"feeddefdbe85fd8d3cd94701\",\n \"feeddefdbe85fd8d3ce6550da63603\",\n \"feeddefdd0a2fdae6bfd8d3ce6550da63603\",\n \"feeddefdd0a2fdae6bfd8d3cf16913d948018c2d04\",\n \"fff5ebfee6cefdd0a2fdae6bfd8d3cf16913d948018c2d04\",\n \"fff5ebfee6cefdd0a2fdae6bfd8d3cf16913d94801a636037f2704\"\n).map(colors);\n\nexport default ramp(scheme);\n","import {cubehelix} from \"d3-color\";\nimport {interpolateCubehelixLong} from \"d3-interpolate\";\n\nexport default interpolateCubehelixLong(cubehelix(300, 0.5, 0.0), cubehelix(-240, 0.5, 1.0));\n","import {cubehelix} from \"d3-color\";\nimport {interpolateCubehelixLong} from \"d3-interpolate\";\n\nexport var warm = interpolateCubehelixLong(cubehelix(-100, 0.75, 0.35), cubehelix(80, 1.50, 0.8));\n\nexport var cool = interpolateCubehelixLong(cubehelix(260, 0.75, 0.35), cubehelix(80, 1.50, 0.8));\n\nvar c = cubehelix();\n\nexport default function(t) {\n if (t < 0 || t > 1) t -= Math.floor(t);\n var ts = Math.abs(t - 0.5);\n c.h = 360 * t - 100;\n c.s = 1.5 - 1.5 * ts;\n c.l = 0.8 - 0.9 * ts;\n return c + \"\";\n}\n","import {rgb} from \"d3-color\";\n\nvar c = rgb(),\n pi_1_3 = Math.PI / 3,\n pi_2_3 = Math.PI * 2 / 3;\n\nexport default function(t) {\n var x;\n t = (0.5 - t) * Math.PI;\n c.r = 255 * (x = Math.sin(t)) * x;\n c.g = 255 * (x = Math.sin(t + pi_1_3)) * x;\n c.b = 255 * (x = Math.sin(t + pi_2_3)) * x;\n return c + \"\";\n}\n","import colors from \"../colors\";\n\nfunction ramp(range) {\n var n = range.length;\n return function(t) {\n return range[Math.max(0, Math.min(n - 1, Math.floor(t * n)))];\n };\n}\n\nexport default ramp(colors(\"44015444025645045745055946075a46085c460a5d460b5e470d60470e6147106347116447136548146748166848176948186a481a6c481b6d481c6e481d6f481f70482071482173482374482475482576482677482878482979472a7a472c7a472d7b472e7c472f7d46307e46327e46337f463480453581453781453882443983443a83443b84433d84433e85423f854240864241864142874144874045884046883f47883f48893e49893e4a893e4c8a3d4d8a3d4e8a3c4f8a3c508b3b518b3b528b3a538b3a548c39558c39568c38588c38598c375a8c375b8d365c8d365d8d355e8d355f8d34608d34618d33628d33638d32648e32658e31668e31678e31688e30698e306a8e2f6b8e2f6c8e2e6d8e2e6e8e2e6f8e2d708e2d718e2c718e2c728e2c738e2b748e2b758e2a768e2a778e2a788e29798e297a8e297b8e287c8e287d8e277e8e277f8e27808e26818e26828e26828e25838e25848e25858e24868e24878e23888e23898e238a8d228b8d228c8d228d8d218e8d218f8d21908d21918c20928c20928c20938c1f948c1f958b1f968b1f978b1f988b1f998a1f9a8a1e9b8a1e9c891e9d891f9e891f9f881fa0881fa1881fa1871fa28720a38620a48621a58521a68522a78522a88423a98324aa8325ab8225ac8226ad8127ad8128ae8029af7f2ab07f2cb17e2db27d2eb37c2fb47c31b57b32b67a34b67935b77937b87838b9773aba763bbb753dbc743fbc7340bd7242be7144bf7046c06f48c16e4ac16d4cc26c4ec36b50c46a52c56954c56856c66758c7655ac8645cc8635ec96260ca6063cb5f65cb5e67cc5c69cd5b6ccd5a6ece5870cf5773d05675d05477d1537ad1517cd2507fd34e81d34d84d44b86d54989d5488bd6468ed64590d74393d74195d84098d83e9bd93c9dd93ba0da39a2da37a5db36a8db34aadc32addc30b0dd2fb2dd2db5de2bb8de29bade28bddf26c0df25c2df23c5e021c8e020cae11fcde11dd0e11cd2e21bd5e21ad8e219dae319dde318dfe318e2e418e5e419e7e419eae51aece51befe51cf1e51df4e61ef6e620f8e621fbe723fde725\"));\n\nexport var magma = ramp(colors(\"00000401000501010601010802010902020b02020d03030f03031204041405041606051806051a07061c08071e0907200a08220b09240c09260d0a290e0b2b100b2d110c2f120d31130d34140e36150e38160f3b180f3d19103f1a10421c10441d11471e114920114b21114e22115024125325125527125829115a2a115c2c115f2d11612f116331116533106734106936106b38106c390f6e3b0f703d0f713f0f72400f74420f75440f764510774710784910784a10794c117a4e117b4f127b51127c52137c54137d56147d57157e59157e5a167e5c167f5d177f5f187f601880621980641a80651a80671b80681c816a1c816b1d816d1d816e1e81701f81721f817320817521817621817822817922827b23827c23827e24828025828125818326818426818627818827818928818b29818c29818e2a81902a81912b81932b80942c80962c80982d80992d809b2e7f9c2e7f9e2f7fa02f7fa1307ea3307ea5317ea6317da8327daa337dab337cad347cae347bb0357bb2357bb3367ab5367ab73779b83779ba3878bc3978bd3977bf3a77c03a76c23b75c43c75c53c74c73d73c83e73ca3e72cc3f71cd4071cf4070d0416fd2426fd3436ed5446dd6456cd8456cd9466bdb476adc4869de4968df4a68e04c67e24d66e34e65e44f64e55064e75263e85362e95462ea5661eb5760ec5860ed5a5fee5b5eef5d5ef05f5ef1605df2625df2645cf3655cf4675cf4695cf56b5cf66c5cf66e5cf7705cf7725cf8745cf8765cf9785df9795df97b5dfa7d5efa7f5efa815ffb835ffb8560fb8761fc8961fc8a62fc8c63fc8e64fc9065fd9266fd9467fd9668fd9869fd9a6afd9b6bfe9d6cfe9f6dfea16efea36ffea571fea772fea973feaa74feac76feae77feb078feb27afeb47bfeb67cfeb77efeb97ffebb81febd82febf84fec185fec287fec488fec68afec88cfeca8dfecc8ffecd90fecf92fed194fed395fed597fed799fed89afdda9cfddc9efddea0fde0a1fde2a3fde3a5fde5a7fde7a9fde9aafdebacfcecaefceeb0fcf0b2fcf2b4fcf4b6fcf6b8fcf7b9fcf9bbfcfbbdfcfdbf\"));\n\nexport var inferno = ramp(colors(\"00000401000501010601010802010a02020c02020e03021004031204031405041706041907051b08051d09061f0a07220b07240c08260d08290e092b10092d110a30120a32140b34150b37160b39180c3c190c3e1b0c411c0c431e0c451f0c48210c4a230c4c240c4f260c51280b53290b552b0b572d0b592f0a5b310a5c320a5e340a5f3609613809623909633b09643d09653e0966400a67420a68440a68450a69470b6a490b6a4a0c6b4c0c6b4d0d6c4f0d6c510e6c520e6d540f6d550f6d57106e59106e5a116e5c126e5d126e5f136e61136e62146e64156e65156e67166e69166e6a176e6c186e6d186e6f196e71196e721a6e741a6e751b6e771c6d781c6d7a1d6d7c1d6d7d1e6d7f1e6c801f6c82206c84206b85216b87216b88226a8a226a8c23698d23698f24699025689225689326679526679727669827669a28659b29649d29649f2a63a02a63a22b62a32c61a52c60a62d60a82e5fa92e5eab2f5ead305dae305cb0315bb1325ab3325ab43359b63458b73557b93556ba3655bc3754bd3853bf3952c03a51c13a50c33b4fc43c4ec63d4dc73e4cc83f4bca404acb4149cc4248ce4347cf4446d04545d24644d34743d44842d54a41d74b3fd84c3ed94d3dda4e3cdb503bdd513ade5238df5337e05536e15635e25734e35933e45a31e55c30e65d2fe75e2ee8602de9612bea632aeb6429eb6628ec6726ed6925ee6a24ef6c23ef6e21f06f20f1711ff1731df2741cf3761bf37819f47918f57b17f57d15f67e14f68013f78212f78410f8850ff8870ef8890cf98b0bf98c0af98e09fa9008fa9207fa9407fb9606fb9706fb9906fb9b06fb9d07fc9f07fca108fca309fca50afca60cfca80dfcaa0ffcac11fcae12fcb014fcb216fcb418fbb61afbb81dfbba1ffbbc21fbbe23fac026fac228fac42afac62df9c72ff9c932f9cb35f8cd37f8cf3af7d13df7d340f6d543f6d746f5d949f5db4cf4dd4ff4df53f4e156f3e35af3e55df2e661f2e865f2ea69f1ec6df1ed71f1ef75f1f179f2f27df2f482f3f586f3f68af4f88ef5f992f6fa96f8fb9af9fc9dfafda1fcffa4\"));\n\nexport var plasma = ramp(colors(\"0d088710078813078916078a19068c1b068d1d068e20068f2206902406912605912805922a05932c05942e05952f059631059733059735049837049938049a3a049a3c049b3e049c3f049c41049d43039e44039e46039f48039f4903a04b03a14c02a14e02a25002a25102a35302a35502a45601a45801a45901a55b01a55c01a65e01a66001a66100a76300a76400a76600a76700a86900a86a00a86c00a86e00a86f00a87100a87201a87401a87501a87701a87801a87a02a87b02a87d03a87e03a88004a88104a78305a78405a78606a68707a68808a68a09a58b0aa58d0ba58e0ca48f0da4910ea3920fa39410a29511a19613a19814a099159f9a169f9c179e9d189d9e199da01a9ca11b9ba21d9aa31e9aa51f99a62098a72197a82296aa2395ab2494ac2694ad2793ae2892b02991b12a90b22b8fb32c8eb42e8db52f8cb6308bb7318ab83289ba3388bb3488bc3587bd3786be3885bf3984c03a83c13b82c23c81c33d80c43e7fc5407ec6417dc7427cc8437bc9447aca457acb4679cc4778cc4977cd4a76ce4b75cf4c74d04d73d14e72d24f71d35171d45270d5536fd5546ed6556dd7566cd8576bd9586ada5a6ada5b69db5c68dc5d67dd5e66de5f65de6164df6263e06363e16462e26561e26660e3685fe4695ee56a5de56b5de66c5ce76e5be76f5ae87059e97158e97257ea7457eb7556eb7655ec7754ed7953ed7a52ee7b51ef7c51ef7e50f07f4ff0804ef1814df1834cf2844bf3854bf3874af48849f48948f58b47f58c46f68d45f68f44f79044f79143f79342f89441f89540f9973ff9983ef99a3efa9b3dfa9c3cfa9e3bfb9f3afba139fba238fca338fca537fca636fca835fca934fdab33fdac33fdae32fdaf31fdb130fdb22ffdb42ffdb52efeb72dfeb82cfeba2cfebb2bfebd2afebe2afec029fdc229fdc328fdc527fdc627fdc827fdca26fdcb26fccd25fcce25fcd025fcd225fbd324fbd524fbd724fad824fada24f9dc24f9dd25f8df25f8e125f7e225f7e425f6e626f6e826f5e926f5eb27f4ed27f3ee27f3f027f2f227f1f426f1f525f0f724f0f921\"));\n","const ReservedFields = {\n ROW_ID: '__id__'\n};\n\nexport default ReservedFields;\n","const CommonProps = {\n ACTION_INF: 'actionInf',\n ON_LAYER_DRAW: 'onlayerdraw'\n};\n\nexport default CommonProps;\n","export var slice = Array.prototype.slice;\n","export default function(x) {\n return x;\n}\n","import {slice} from \"./array\";\nimport identity from \"./identity\";\n\nvar top = 1,\n right = 2,\n bottom = 3,\n left = 4,\n epsilon = 1e-6;\n\nfunction translateX(x) {\n return \"translate(\" + (x + 0.5) + \",0)\";\n}\n\nfunction translateY(y) {\n return \"translate(0,\" + (y + 0.5) + \")\";\n}\n\nfunction number(scale) {\n return function(d) {\n return +scale(d);\n };\n}\n\nfunction center(scale) {\n var offset = Math.max(0, scale.bandwidth() - 1) / 2; // Adjust for 0.5px offset.\n if (scale.round()) offset = Math.round(offset);\n return function(d) {\n return +scale(d) + offset;\n };\n}\n\nfunction entering() {\n return !this.__axis;\n}\n\nfunction axis(orient, scale) {\n var tickArguments = [],\n tickValues = null,\n tickFormat = null,\n tickTransform = null,\n tickSizeInner = 6,\n tickSizeOuter = 6,\n tickPadding = 3,\n k = orient === top || orient === left ? -1 : 1,\n x = orient === left || orient === right ? \"x\" : \"y\",\n transform = orient === top || orient === bottom ? translateX : translateY;\n\n function axis(context) {\n var values = tickValues == null ? (scale.ticks ? scale.ticks.apply(scale, tickArguments) : scale.domain()) : tickValues,\n format = tickFormat == null ? (scale.tickFormat ? scale.tickFormat.apply(scale, tickArguments) : identity) : tickFormat,\n spacing = Math.max(tickSizeInner, 0) + tickPadding,\n range = scale.range(),\n range0 = +range[0] + 0.5,\n range1 = +range[range.length - 1] + 0.5,\n position = (scale.bandwidth ? center : number)(scale.copy()),\n selection = context.selection ? context.selection() : context,\n path = selection.selectAll(\".domain\").data([null]),\n tick = selection.selectAll(\".tick\").data(values, scale).order(),\n tickExit = tick.exit(),\n tickEnter = tick.enter().append(\"g\").attr(\"class\", \"tick\"),\n line = tick.select(\"line\"),\n text = tick.select(\"text\");\n\n path = path.merge(path.enter().insert(\"path\", \".tick\")\n .attr(\"class\", \"domain\")\n .attr(\"stroke\", \"#000\"));\n\n tick = tick.merge(tickEnter);\n\n line = line.merge(tickEnter.append(\"line\")\n .attr(\"stroke\", \"#000\")\n .attr(x + \"2\", k * tickSizeInner));\n\n text = text.merge(tickEnter.append(\"text\")\n .attr(\"fill\", \"#000\")\n .attr(x, k * spacing)\n .attr(\"dy\", orient === top ? \"0em\" : orient === bottom ? \"0.71em\" : \"0.32em\"))\n .style('transform', tickTransform);\n\n if (context !== selection) {\n path = path.transition(context);\n tick = tick.transition(context);\n line = line.transition(context);\n text = text.transition(context);\n\n tickExit = tickExit.transition(context)\n .attr(\"opacity\", epsilon)\n .attr(\"transform\", function(d) { return isFinite(d = position(d)) ? transform(d) : this.getAttribute(\"transform\"); });\n\n tickEnter\n .attr(\"opacity\", epsilon)\n .attr(\"transform\", function(d) { var p = this.parentNode.__axis; return transform(p && isFinite(p = p(d)) ? p : position(d)); });\n }\n\n tickExit.remove();\n\n path\n .attr(\"d\", orient === left || orient == right\n ? \"M\" + k * tickSizeOuter + \",\" + range0 + \"H0.5V\" + range1 + \"H\" + k * tickSizeOuter\n : \"M\" + range0 + \",\" + k * tickSizeOuter + \"V0.5H\" + range1 + \"V\" + k * tickSizeOuter);\n\n tick\n .attr(\"opacity\", 1)\n .attr(\"transform\", function(d) { return transform(position(d)); });\n\n line\n .attr(x + \"2\", k * tickSizeInner);\n\n text\n .attr(x, k * spacing)\n .text(format);\n\n selection.filter(entering)\n .attr(\"fill\", \"none\")\n .attr(\"font-size\", 10)\n .attr(\"font-family\", \"sans-serif\")\n .attr(\"text-anchor\", orient === right ? \"start\" : orient === left ? \"end\" : \"middle\");\n\n selection\n .each(function() { this.__axis = position; });\n }\n\n axis.scale = function(_) {\n return arguments.length ? (scale = _, axis) : scale;\n };\n\n axis.tickTransform = function(_) {\n return arguments.length ? (tickTransform = _, axis) : tickTransform;\n };\n\n axis.ticks = function() {\n return tickArguments = slice.call(arguments), axis;\n };\n\n axis.tickArguments = function(_) {\n return arguments.length ? (tickArguments = _ == null ? [] : slice.call(_), axis) : tickArguments.slice();\n };\n\n axis.tickValues = function(_) {\n return arguments.length ? (tickValues = _ == null ? null : slice.call(_), axis) : tickValues && tickValues.slice();\n };\n\n axis.tickFormat = function(_) {\n return arguments.length ? (tickFormat = _, axis) : tickFormat;\n };\n\n axis.tickSize = function(_) {\n return arguments.length ? (tickSizeInner = tickSizeOuter = +_, axis) : tickSizeInner;\n };\n\n axis.tickSizeInner = function(_) {\n return arguments.length ? (tickSizeInner = +_, axis) : tickSizeInner;\n };\n\n axis.tickSizeOuter = function(_) {\n return arguments.length ? (tickSizeOuter = +_, axis) : tickSizeOuter;\n };\n\n axis.tickPadding = function(_) {\n return arguments.length ? (tickPadding = +_, axis) : tickPadding;\n };\n\n return axis;\n}\n\nexport function axisTop(scale) {\n return axis(top, scale);\n}\n\nexport function axisRight(scale) {\n return axis(right, scale);\n}\n\nexport function axisBottom(scale) {\n return axis(bottom, scale);\n}\n\nexport function axisLeft(scale) {\n return axis(left, scale);\n}\n","var pi = Math.PI,\n tau = 2 * pi,\n epsilon = 1e-6,\n tauEpsilon = tau - epsilon;\n\nfunction Path() {\n this._x0 = this._y0 = // start of current subpath\n this._x1 = this._y1 = null; // end of current subpath\n this._ = \"\";\n}\n\nfunction path() {\n return new Path;\n}\n\nPath.prototype = path.prototype = {\n constructor: Path,\n moveTo: function(x, y) {\n this._ += \"M\" + (this._x0 = this._x1 = +x) + \",\" + (this._y0 = this._y1 = +y);\n },\n closePath: function() {\n if (this._x1 !== null) {\n this._x1 = this._x0, this._y1 = this._y0;\n this._ += \"Z\";\n }\n },\n lineTo: function(x, y) {\n this._ += \"L\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n },\n quadraticCurveTo: function(x1, y1, x, y) {\n this._ += \"Q\" + (+x1) + \",\" + (+y1) + \",\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n },\n bezierCurveTo: function(x1, y1, x2, y2, x, y) {\n this._ += \"C\" + (+x1) + \",\" + (+y1) + \",\" + (+x2) + \",\" + (+y2) + \",\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n },\n arcTo: function(x1, y1, x2, y2, r) {\n x1 = +x1, y1 = +y1, x2 = +x2, y2 = +y2, r = +r;\n var x0 = this._x1,\n y0 = this._y1,\n x21 = x2 - x1,\n y21 = y2 - y1,\n x01 = x0 - x1,\n y01 = y0 - y1,\n l01_2 = x01 * x01 + y01 * y01;\n\n // Is the radius negative? Error.\n if (r < 0) throw new Error(\"negative radius: \" + r);\n\n // Is this path empty? Move to (x1,y1).\n if (this._x1 === null) {\n this._ += \"M\" + (this._x1 = x1) + \",\" + (this._y1 = y1);\n }\n\n // Or, is (x1,y1) coincident with (x0,y0)? Do nothing.\n else if (!(l01_2 > epsilon));\n\n // Or, are (x0,y0), (x1,y1) and (x2,y2) collinear?\n // Equivalently, is (x1,y1) coincident with (x2,y2)?\n // Or, is the radius zero? Line to (x1,y1).\n else if (!(Math.abs(y01 * x21 - y21 * x01) > epsilon) || !r) {\n this._ += \"L\" + (this._x1 = x1) + \",\" + (this._y1 = y1);\n }\n\n // Otherwise, draw an arc!\n else {\n var x20 = x2 - x0,\n y20 = y2 - y0,\n l21_2 = x21 * x21 + y21 * y21,\n l20_2 = x20 * x20 + y20 * y20,\n l21 = Math.sqrt(l21_2),\n l01 = Math.sqrt(l01_2),\n l = r * Math.tan((pi - Math.acos((l21_2 + l01_2 - l20_2) / (2 * l21 * l01))) / 2),\n t01 = l / l01,\n t21 = l / l21;\n\n // If the start tangent is not coincident with (x0,y0), line to.\n if (Math.abs(t01 - 1) > epsilon) {\n this._ += \"L\" + (x1 + t01 * x01) + \",\" + (y1 + t01 * y01);\n }\n\n this._ += \"A\" + r + \",\" + r + \",0,0,\" + (+(y01 * x20 > x01 * y20)) + \",\" + (this._x1 = x1 + t21 * x21) + \",\" + (this._y1 = y1 + t21 * y21);\n }\n },\n arc: function(x, y, r, a0, a1, ccw) {\n x = +x, y = +y, r = +r;\n var dx = r * Math.cos(a0),\n dy = r * Math.sin(a0),\n x0 = x + dx,\n y0 = y + dy,\n cw = 1 ^ ccw,\n da = ccw ? a0 - a1 : a1 - a0;\n\n // Is the radius negative? Error.\n if (r < 0) throw new Error(\"negative radius: \" + r);\n\n // Is this path empty? Move to (x0,y0).\n if (this._x1 === null) {\n this._ += \"M\" + x0 + \",\" + y0;\n }\n\n // Or, is (x0,y0) not coincident with the previous point? Line to (x0,y0).\n else if (Math.abs(this._x1 - x0) > epsilon || Math.abs(this._y1 - y0) > epsilon) {\n this._ += \"L\" + x0 + \",\" + y0;\n }\n\n // Is this arc empty? We’re done.\n if (!r) return;\n\n // Does the angle go the wrong way? Flip the direction.\n if (da < 0) da = da % tau + tau;\n\n // Is this a complete circle? Draw two arcs to complete the circle.\n if (da > tauEpsilon) {\n this._ += \"A\" + r + \",\" + r + \",0,1,\" + cw + \",\" + (x - dx) + \",\" + (y - dy) + \"A\" + r + \",\" + r + \",0,1,\" + cw + \",\" + (this._x1 = x0) + \",\" + (this._y1 = y0);\n }\n\n // Is this arc non-empty? Draw an arc!\n else if (da > epsilon) {\n this._ += \"A\" + r + \",\" + r + \",0,\" + (+(da >= pi)) + \",\" + cw + \",\" + (this._x1 = x + r * Math.cos(a1)) + \",\" + (this._y1 = y + r * Math.sin(a1));\n }\n },\n rect: function(x, y, w, h) {\n this._ += \"M\" + (this._x0 = this._x1 = +x) + \",\" + (this._y0 = this._y1 = +y) + \"h\" + (+w) + \"v\" + (+h) + \"h\" + (-w) + \"Z\";\n },\n toString: function() {\n return this._;\n }\n};\n\nexport default path;\n","export default function(x) {\n return function constant() {\n return x;\n };\n}\n","export var abs = Math.abs;\nexport var atan2 = Math.atan2;\nexport var cos = Math.cos;\nexport var max = Math.max;\nexport var min = Math.min;\nexport var sin = Math.sin;\nexport var sqrt = Math.sqrt;\n\nexport var epsilon = 1e-12;\nexport var pi = Math.PI;\nexport var halfPi = pi / 2;\nexport var tau = 2 * pi;\n\nexport function acos(x) {\n return x > 1 ? 0 : x < -1 ? pi : Math.acos(x);\n}\n\nexport function asin(x) {\n return x >= 1 ? halfPi : x <= -1 ? -halfPi : Math.asin(x);\n}\n","import {path} from \"d3-path\";\nimport constant from \"./constant\";\nimport {abs, acos, asin, atan2, cos, epsilon, halfPi, max, min, pi, sin, sqrt, tau} from \"./math\";\n\nfunction arcInnerRadius(d) {\n return d.innerRadius;\n}\n\nfunction arcOuterRadius(d) {\n return d.outerRadius;\n}\n\nfunction arcStartAngle(d) {\n return d.startAngle;\n}\n\nfunction arcEndAngle(d) {\n return d.endAngle;\n}\n\nfunction arcPadAngle(d) {\n return d && d.padAngle; // Note: optional!\n}\n\nfunction intersect(x0, y0, x1, y1, x2, y2, x3, y3) {\n var x10 = x1 - x0, y10 = y1 - y0,\n x32 = x3 - x2, y32 = y3 - y2,\n t = (x32 * (y0 - y2) - y32 * (x0 - x2)) / (y32 * x10 - x32 * y10);\n return [x0 + t * x10, y0 + t * y10];\n}\n\n// Compute perpendicular offset line of length rc.\n// http://mathworld.wolfram.com/Circle-LineIntersection.html\nfunction cornerTangents(x0, y0, x1, y1, r1, rc, cw) {\n var x01 = x0 - x1,\n y01 = y0 - y1,\n lo = (cw ? rc : -rc) / sqrt(x01 * x01 + y01 * y01),\n ox = lo * y01,\n oy = -lo * x01,\n x11 = x0 + ox,\n y11 = y0 + oy,\n x10 = x1 + ox,\n y10 = y1 + oy,\n x00 = (x11 + x10) / 2,\n y00 = (y11 + y10) / 2,\n dx = x10 - x11,\n dy = y10 - y11,\n d2 = dx * dx + dy * dy,\n r = r1 - rc,\n D = x11 * y10 - x10 * y11,\n d = (dy < 0 ? -1 : 1) * sqrt(max(0, r * r * d2 - D * D)),\n cx0 = (D * dy - dx * d) / d2,\n cy0 = (-D * dx - dy * d) / d2,\n cx1 = (D * dy + dx * d) / d2,\n cy1 = (-D * dx + dy * d) / d2,\n dx0 = cx0 - x00,\n dy0 = cy0 - y00,\n dx1 = cx1 - x00,\n dy1 = cy1 - y00;\n\n // Pick the closer of the two intersection points.\n // TODO Is there a faster way to determine which intersection to use?\n if (dx0 * dx0 + dy0 * dy0 > dx1 * dx1 + dy1 * dy1) cx0 = cx1, cy0 = cy1;\n\n return {\n cx: cx0,\n cy: cy0,\n x01: -ox,\n y01: -oy,\n x11: cx0 * (r1 / r - 1),\n y11: cy0 * (r1 / r - 1)\n };\n}\n\nexport default function() {\n var innerRadius = arcInnerRadius,\n outerRadius = arcOuterRadius,\n cornerRadius = constant(0),\n padRadius = null,\n startAngle = arcStartAngle,\n endAngle = arcEndAngle,\n padAngle = arcPadAngle,\n context = null;\n\n function arc() {\n var buffer,\n r,\n r0 = +innerRadius.apply(this, arguments),\n r1 = +outerRadius.apply(this, arguments),\n a0 = startAngle.apply(this, arguments) - halfPi,\n a1 = endAngle.apply(this, arguments) - halfPi,\n da = abs(a1 - a0),\n cw = a1 > a0;\n\n if (!context) context = buffer = path();\n\n // Ensure that the outer radius is always larger than the inner radius.\n if (r1 < r0) r = r1, r1 = r0, r0 = r;\n\n // Is it a point?\n if (!(r1 > epsilon)) context.moveTo(0, 0);\n\n // Or is it a circle or annulus?\n else if (da > tau - epsilon) {\n context.moveTo(r1 * cos(a0), r1 * sin(a0));\n context.arc(0, 0, r1, a0, a1, !cw);\n if (r0 > epsilon) {\n context.moveTo(r0 * cos(a1), r0 * sin(a1));\n context.arc(0, 0, r0, a1, a0, cw);\n }\n }\n\n // Or is it a circular or annular sector?\n else {\n var a01 = a0,\n a11 = a1,\n a00 = a0,\n a10 = a1,\n da0 = da,\n da1 = da,\n ap = padAngle.apply(this, arguments) / 2,\n rp = (ap > epsilon) && (padRadius ? +padRadius.apply(this, arguments) : sqrt(r0 * r0 + r1 * r1)),\n rc = min(abs(r1 - r0) / 2, +cornerRadius.apply(this, arguments)),\n rc0 = rc,\n rc1 = rc,\n t0,\n t1;\n\n // Apply padding? Note that since r1 ≥ r0, da1 ≥ da0.\n if (rp > epsilon) {\n var p0 = asin(rp / r0 * sin(ap)),\n p1 = asin(rp / r1 * sin(ap));\n if ((da0 -= p0 * 2) > epsilon) p0 *= (cw ? 1 : -1), a00 += p0, a10 -= p0;\n else da0 = 0, a00 = a10 = (a0 + a1) / 2;\n if ((da1 -= p1 * 2) > epsilon) p1 *= (cw ? 1 : -1), a01 += p1, a11 -= p1;\n else da1 = 0, a01 = a11 = (a0 + a1) / 2;\n }\n\n var x01 = r1 * cos(a01),\n y01 = r1 * sin(a01),\n x10 = r0 * cos(a10),\n y10 = r0 * sin(a10);\n\n // Apply rounded corners?\n if (rc > epsilon) {\n var x11 = r1 * cos(a11),\n y11 = r1 * sin(a11),\n x00 = r0 * cos(a00),\n y00 = r0 * sin(a00);\n\n // Restrict the corner radius according to the sector angle.\n if (da < pi) {\n var oc = da0 > epsilon ? intersect(x01, y01, x00, y00, x11, y11, x10, y10) : [x10, y10],\n ax = x01 - oc[0],\n ay = y01 - oc[1],\n bx = x11 - oc[0],\n by = y11 - oc[1],\n kc = 1 / sin(acos((ax * bx + ay * by) / (sqrt(ax * ax + ay * ay) * sqrt(bx * bx + by * by))) / 2),\n lc = sqrt(oc[0] * oc[0] + oc[1] * oc[1]);\n rc0 = min(rc, (r0 - lc) / (kc - 1));\n rc1 = min(rc, (r1 - lc) / (kc + 1));\n }\n }\n\n // Is the sector collapsed to a line?\n if (!(da1 > epsilon)) context.moveTo(x01, y01);\n\n // Does the sector’s outer ring have rounded corners?\n else if (rc1 > epsilon) {\n t0 = cornerTangents(x00, y00, x01, y01, r1, rc1, cw);\n t1 = cornerTangents(x11, y11, x10, y10, r1, rc1, cw);\n\n context.moveTo(t0.cx + t0.x01, t0.cy + t0.y01);\n\n // Have the corners merged?\n if (rc1 < rc) context.arc(t0.cx, t0.cy, rc1, atan2(t0.y01, t0.x01), atan2(t1.y01, t1.x01), !cw);\n\n // Otherwise, draw the two corners and the ring.\n else {\n context.arc(t0.cx, t0.cy, rc1, atan2(t0.y01, t0.x01), atan2(t0.y11, t0.x11), !cw);\n context.arc(0, 0, r1, atan2(t0.cy + t0.y11, t0.cx + t0.x11), atan2(t1.cy + t1.y11, t1.cx + t1.x11), !cw);\n context.arc(t1.cx, t1.cy, rc1, atan2(t1.y11, t1.x11), atan2(t1.y01, t1.x01), !cw);\n }\n }\n\n // Or is the outer ring just a circular arc?\n else context.moveTo(x01, y01), context.arc(0, 0, r1, a01, a11, !cw);\n\n // Is there no inner ring, and it’s a circular sector?\n // Or perhaps it’s an annular sector collapsed due to padding?\n if (!(r0 > epsilon) || !(da0 > epsilon)) context.lineTo(x10, y10);\n\n // Does the sector’s inner ring (or point) have rounded corners?\n else if (rc0 > epsilon) {\n t0 = cornerTangents(x10, y10, x11, y11, r0, -rc0, cw);\n t1 = cornerTangents(x01, y01, x00, y00, r0, -rc0, cw);\n\n context.lineTo(t0.cx + t0.x01, t0.cy + t0.y01);\n\n // Have the corners merged?\n if (rc0 < rc) context.arc(t0.cx, t0.cy, rc0, atan2(t0.y01, t0.x01), atan2(t1.y01, t1.x01), !cw);\n\n // Otherwise, draw the two corners and the ring.\n else {\n context.arc(t0.cx, t0.cy, rc0, atan2(t0.y01, t0.x01), atan2(t0.y11, t0.x11), !cw);\n context.arc(0, 0, r0, atan2(t0.cy + t0.y11, t0.cx + t0.x11), atan2(t1.cy + t1.y11, t1.cx + t1.x11), cw);\n context.arc(t1.cx, t1.cy, rc0, atan2(t1.y11, t1.x11), atan2(t1.y01, t1.x01), !cw);\n }\n }\n\n // Or is the inner ring just a circular arc?\n else context.arc(0, 0, r0, a10, a00, cw);\n }\n\n context.closePath();\n\n if (buffer) return context = null, buffer + \"\" || null;\n }\n\n arc.centroid = function() {\n var r = (+innerRadius.apply(this, arguments) + +outerRadius.apply(this, arguments)) / 2,\n a = (+startAngle.apply(this, arguments) + +endAngle.apply(this, arguments)) / 2 - pi / 2;\n return [cos(a) * r, sin(a) * r];\n };\n\n arc.innerRadius = function(_) {\n return arguments.length ? (innerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : innerRadius;\n };\n\n arc.outerRadius = function(_) {\n return arguments.length ? (outerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : outerRadius;\n };\n\n arc.cornerRadius = function(_) {\n return arguments.length ? (cornerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : cornerRadius;\n };\n\n arc.padRadius = function(_) {\n return arguments.length ? (padRadius = _ == null ? null : typeof _ === \"function\" ? _ : constant(+_), arc) : padRadius;\n };\n\n arc.startAngle = function(_) {\n return arguments.length ? (startAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : startAngle;\n };\n\n arc.endAngle = function(_) {\n return arguments.length ? (endAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : endAngle;\n };\n\n arc.padAngle = function(_) {\n return arguments.length ? (padAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : padAngle;\n };\n\n arc.context = function(_) {\n return arguments.length ? ((context = _ == null ? null : _), arc) : context;\n };\n\n return arc;\n}\n","function Linear(context) {\n this._context = context;\n}\n\nLinear.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; // proceed\n default: this._context.lineTo(x, y); break;\n }\n }\n};\n\nexport default function(context) {\n return new Linear(context);\n}\n","export function x(p) {\n return p[0];\n}\n\nexport function y(p) {\n return p[1];\n}\n","import {path} from \"d3-path\";\nimport constant from \"./constant\";\nimport curveLinear from \"./curve/linear\";\nimport {x as pointX, y as pointY} from \"./point\";\n\nexport default function() {\n var x = pointX,\n y = pointY,\n defined = constant(true),\n context = null,\n curve = curveLinear,\n output = null;\n\n function line(data) {\n var i,\n n = data.length,\n d,\n defined0 = false,\n buffer;\n\n if (context == null) output = curve(buffer = path());\n\n for (i = 0; i <= n; ++i) {\n if (!(i < n && defined(d = data[i], i, data)) === defined0) {\n if (defined0 = !defined0) output.lineStart();\n else output.lineEnd();\n }\n if (defined0) output.point(+x(d, i, data), +y(d, i, data));\n }\n\n if (buffer) return output = null, buffer + \"\" || null;\n }\n\n line.x = function(_) {\n return arguments.length ? (x = typeof _ === \"function\" ? _ : constant(+_), line) : x;\n };\n\n line.y = function(_) {\n return arguments.length ? (y = typeof _ === \"function\" ? _ : constant(+_), line) : y;\n };\n\n line.defined = function(_) {\n return arguments.length ? (defined = typeof _ === \"function\" ? _ : constant(!!_), line) : defined;\n };\n\n line.curve = function(_) {\n return arguments.length ? (curve = _, context != null && (output = curve(context)), line) : curve;\n };\n\n line.context = function(_) {\n return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), line) : context;\n };\n\n return line;\n}\n","import {path} from \"d3-path\";\nimport constant from \"./constant\";\nimport curveLinear from \"./curve/linear\";\nimport line from \"./line\";\nimport {x as pointX, y as pointY} from \"./point\";\n\nexport default function() {\n var x0 = pointX,\n x1 = null,\n y0 = constant(0),\n y1 = pointY,\n defined = constant(true),\n context = null,\n curve = curveLinear,\n output = null;\n\n function area(data) {\n var i,\n j,\n k,\n n = data.length,\n d,\n defined0 = false,\n buffer,\n x0z = new Array(n),\n y0z = new Array(n);\n\n if (context == null) output = curve(buffer = path());\n\n for (i = 0; i <= n; ++i) {\n if (!(i < n && defined(d = data[i], i, data)) === defined0) {\n if (defined0 = !defined0) {\n j = i;\n output.areaStart();\n output.lineStart();\n } else {\n output.lineEnd();\n output.lineStart();\n for (k = i - 1; k >= j; --k) {\n output.point(x0z[k], y0z[k]);\n }\n output.lineEnd();\n output.areaEnd();\n }\n }\n if (defined0) {\n x0z[i] = +x0(d, i, data), y0z[i] = +y0(d, i, data);\n output.point(x1 ? +x1(d, i, data) : x0z[i], y1 ? +y1(d, i, data) : y0z[i]);\n }\n }\n\n if (buffer) return output = null, buffer + \"\" || null;\n }\n\n function arealine() {\n return line().defined(defined).curve(curve).context(context);\n }\n\n area.x = function(_) {\n return arguments.length ? (x0 = typeof _ === \"function\" ? _ : constant(+_), x1 = null, area) : x0;\n };\n\n area.x0 = function(_) {\n return arguments.length ? (x0 = typeof _ === \"function\" ? _ : constant(+_), area) : x0;\n };\n\n area.x1 = function(_) {\n return arguments.length ? (x1 = _ == null ? null : typeof _ === \"function\" ? _ : constant(+_), area) : x1;\n };\n\n area.y = function(_) {\n return arguments.length ? (y0 = typeof _ === \"function\" ? _ : constant(+_), y1 = null, area) : y0;\n };\n\n area.y0 = function(_) {\n return arguments.length ? (y0 = typeof _ === \"function\" ? _ : constant(+_), area) : y0;\n };\n\n area.y1 = function(_) {\n return arguments.length ? (y1 = _ == null ? null : typeof _ === \"function\" ? _ : constant(+_), area) : y1;\n };\n\n area.lineX0 =\n area.lineY0 = function() {\n return arealine().x(x0).y(y0);\n };\n\n area.lineY1 = function() {\n return arealine().x(x0).y(y1);\n };\n\n area.lineX1 = function() {\n return arealine().x(x1).y(y0);\n };\n\n area.defined = function(_) {\n return arguments.length ? (defined = typeof _ === \"function\" ? _ : constant(!!_), area) : defined;\n };\n\n area.curve = function(_) {\n return arguments.length ? (curve = _, context != null && (output = curve(context)), area) : curve;\n };\n\n area.context = function(_) {\n return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), area) : context;\n };\n\n return area;\n}\n","export default function(a, b) {\n return b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN;\n}\n","export default function(d) {\n return d;\n}\n","import curveLinear from \"./linear\";\n\nexport var curveRadialLinear = curveRadial(curveLinear);\n\nfunction Radial(curve) {\n this._curve = curve;\n}\n\nRadial.prototype = {\n areaStart: function() {\n this._curve.areaStart();\n },\n areaEnd: function() {\n this._curve.areaEnd();\n },\n lineStart: function() {\n this._curve.lineStart();\n },\n lineEnd: function() {\n this._curve.lineEnd();\n },\n point: function(a, r) {\n this._curve.point(r * Math.sin(a), r * -Math.cos(a));\n }\n};\n\nexport default function curveRadial(curve) {\n\n function radial(context) {\n return new Radial(curve(context));\n }\n\n radial._curve = curve;\n\n return radial;\n}\n","import curveRadial, {curveRadialLinear} from \"./curve/radial\";\nimport line from \"./line\";\n\nexport function lineRadial(l) {\n var c = l.curve;\n\n l.angle = l.x, delete l.x;\n l.radius = l.y, delete l.y;\n\n l.curve = function(_) {\n return arguments.length ? c(curveRadial(_)) : c()._curve;\n };\n\n return l;\n}\n\nexport default function() {\n return lineRadial(line().curve(curveRadialLinear));\n}\n","export var slice = Array.prototype.slice;\n","import {pi, tau} from \"../math\";\n\nexport default {\n draw: function(context, size) {\n var r = Math.sqrt(size / pi);\n context.moveTo(r, 0);\n context.arc(0, 0, r, 0, tau);\n }\n};\n","export default {\n draw: function(context, size) {\n var r = Math.sqrt(size / 5) / 2;\n context.moveTo(-3 * r, -r);\n context.lineTo(-r, -r);\n context.lineTo(-r, -3 * r);\n context.lineTo(r, -3 * r);\n context.lineTo(r, -r);\n context.lineTo(3 * r, -r);\n context.lineTo(3 * r, r);\n context.lineTo(r, r);\n context.lineTo(r, 3 * r);\n context.lineTo(-r, 3 * r);\n context.lineTo(-r, r);\n context.lineTo(-3 * r, r);\n context.closePath();\n }\n};\n","var tan30 = Math.sqrt(1 / 3),\n tan30_2 = tan30 * 2;\n\nexport default {\n draw: function(context, size) {\n var y = Math.sqrt(size / tan30_2),\n x = y * tan30;\n context.moveTo(0, -y);\n context.lineTo(x, 0);\n context.lineTo(0, y);\n context.lineTo(-x, 0);\n context.closePath();\n }\n};\n","import {pi, tau} from \"../math\";\n\nvar ka = 0.89081309152928522810,\n kr = Math.sin(pi / 10) / Math.sin(7 * pi / 10),\n kx = Math.sin(tau / 10) * kr,\n ky = -Math.cos(tau / 10) * kr;\n\nexport default {\n draw: function(context, size) {\n var r = Math.sqrt(size * ka),\n x = kx * r,\n y = ky * r;\n context.moveTo(0, -r);\n context.lineTo(x, y);\n for (var i = 1; i < 5; ++i) {\n var a = tau * i / 5,\n c = Math.cos(a),\n s = Math.sin(a);\n context.lineTo(s * r, -c * r);\n context.lineTo(c * x - s * y, s * x + c * y);\n }\n context.closePath();\n }\n};\n","export default {\n draw: function(context, size) {\n var w = Math.sqrt(size),\n x = -w / 2;\n context.rect(x, x, w, w);\n }\n};\n","var sqrt3 = Math.sqrt(3);\n\nexport default {\n draw: function(context, size) {\n var y = -Math.sqrt(size / (sqrt3 * 3));\n context.moveTo(0, y * 2);\n context.lineTo(-sqrt3 * y, -y);\n context.lineTo(sqrt3 * y, -y);\n context.closePath();\n }\n};\n","var c = -0.5,\n s = Math.sqrt(3) / 2,\n k = 1 / Math.sqrt(12),\n a = (k / 2 + 1) * 3;\n\nexport default {\n draw: function(context, size) {\n var r = Math.sqrt(size / a),\n x0 = r / 2,\n y0 = r * k,\n x1 = x0,\n y1 = r * k + r,\n x2 = -x1,\n y2 = y1;\n context.moveTo(x0, y0);\n context.lineTo(x1, y1);\n context.lineTo(x2, y2);\n context.lineTo(c * x0 - s * y0, s * x0 + c * y0);\n context.lineTo(c * x1 - s * y1, s * x1 + c * y1);\n context.lineTo(c * x2 - s * y2, s * x2 + c * y2);\n context.lineTo(c * x0 + s * y0, c * y0 - s * x0);\n context.lineTo(c * x1 + s * y1, c * y1 - s * x1);\n context.lineTo(c * x2 + s * y2, c * y2 - s * x2);\n context.closePath();\n }\n};\n","export default function() {}\n","export function point(that, x, y) {\n that._context.bezierCurveTo(\n (2 * that._x0 + that._x1) / 3,\n (2 * that._y0 + that._y1) / 3,\n (that._x0 + 2 * that._x1) / 3,\n (that._y0 + 2 * that._y1) / 3,\n (that._x0 + 4 * that._x1 + x) / 6,\n (that._y0 + 4 * that._y1 + y) / 6\n );\n}\n\nexport function Basis(context) {\n this._context = context;\n}\n\nBasis.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 =\n this._y0 = this._y1 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 3: point(this, this._x1, this._y1); // proceed\n case 2: this._context.lineTo(this._x1, this._y1); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; this._context.lineTo((5 * this._x0 + this._x1) / 6, (5 * this._y0 + this._y1) / 6); // proceed\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n }\n};\n\nexport default function(context) {\n return new Basis(context);\n}\n","import noop from \"../noop\";\nimport {point} from \"./basis\";\n\nfunction BasisClosed(context) {\n this._context = context;\n}\n\nBasisClosed.prototype = {\n areaStart: noop,\n areaEnd: noop,\n lineStart: function() {\n this._x0 = this._x1 = this._x2 = this._x3 = this._x4 =\n this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 1: {\n this._context.moveTo(this._x2, this._y2);\n this._context.closePath();\n break;\n }\n case 2: {\n this._context.moveTo((this._x2 + 2 * this._x3) / 3, (this._y2 + 2 * this._y3) / 3);\n this._context.lineTo((this._x3 + 2 * this._x2) / 3, (this._y3 + 2 * this._y2) / 3);\n this._context.closePath();\n break;\n }\n case 3: {\n this.point(this._x2, this._y2);\n this.point(this._x3, this._y3);\n this.point(this._x4, this._y4);\n break;\n }\n }\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._x2 = x, this._y2 = y; break;\n case 1: this._point = 2; this._x3 = x, this._y3 = y; break;\n case 2: this._point = 3; this._x4 = x, this._y4 = y; this._context.moveTo((this._x0 + 4 * this._x1 + x) / 6, (this._y0 + 4 * this._y1 + y) / 6); break;\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n }\n};\n\nexport default function(context) {\n return new BasisClosed(context);\n}\n","import {point} from \"./basis\";\n\nfunction BasisOpen(context) {\n this._context = context;\n}\n\nBasisOpen.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 =\n this._y0 = this._y1 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; var x0 = (this._x0 + 4 * this._x1 + x) / 6, y0 = (this._y0 + 4 * this._y1 + y) / 6; this._line ? this._context.lineTo(x0, y0) : this._context.moveTo(x0, y0); break;\n case 3: this._point = 4; // proceed\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n }\n};\n\nexport default function(context) {\n return new BasisOpen(context);\n}\n","import {Basis} from \"./basis\";\n\nfunction Bundle(context, beta) {\n this._basis = new Basis(context);\n this._beta = beta;\n}\n\nBundle.prototype = {\n lineStart: function() {\n this._x = [];\n this._y = [];\n this._basis.lineStart();\n },\n lineEnd: function() {\n var x = this._x,\n y = this._y,\n j = x.length - 1;\n\n if (j > 0) {\n var x0 = x[0],\n y0 = y[0],\n dx = x[j] - x0,\n dy = y[j] - y0,\n i = -1,\n t;\n\n while (++i <= j) {\n t = i / j;\n this._basis.point(\n this._beta * x[i] + (1 - this._beta) * (x0 + t * dx),\n this._beta * y[i] + (1 - this._beta) * (y0 + t * dy)\n );\n }\n }\n\n this._x = this._y = null;\n this._basis.lineEnd();\n },\n point: function(x, y) {\n this._x.push(+x);\n this._y.push(+y);\n }\n};\n\nexport default (function custom(beta) {\n\n function bundle(context) {\n return beta === 1 ? new Basis(context) : new Bundle(context, beta);\n }\n\n bundle.beta = function(beta) {\n return custom(+beta);\n };\n\n return bundle;\n})(0.85);\n","export function point(that, x, y) {\n that._context.bezierCurveTo(\n that._x1 + that._k * (that._x2 - that._x0),\n that._y1 + that._k * (that._y2 - that._y0),\n that._x2 + that._k * (that._x1 - x),\n that._y2 + that._k * (that._y1 - y),\n that._x2,\n that._y2\n );\n}\n\nexport function Cardinal(context, tension) {\n this._context = context;\n this._k = (1 - tension) / 6;\n}\n\nCardinal.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 2: this._context.lineTo(this._x2, this._y2); break;\n case 3: point(this, this._x1, this._y1); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; this._x1 = x, this._y1 = y; break;\n case 2: this._point = 3; // proceed\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(tension) {\n\n function cardinal(context) {\n return new Cardinal(context, tension);\n }\n\n cardinal.tension = function(tension) {\n return custom(+tension);\n };\n\n return cardinal;\n})(0);\n","import noop from \"../noop\";\nimport {point} from \"./cardinal\";\n\nexport function CardinalClosed(context, tension) {\n this._context = context;\n this._k = (1 - tension) / 6;\n}\n\nCardinalClosed.prototype = {\n areaStart: noop,\n areaEnd: noop,\n lineStart: function() {\n this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = this._x5 =\n this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = this._y5 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 1: {\n this._context.moveTo(this._x3, this._y3);\n this._context.closePath();\n break;\n }\n case 2: {\n this._context.lineTo(this._x3, this._y3);\n this._context.closePath();\n break;\n }\n case 3: {\n this.point(this._x3, this._y3);\n this.point(this._x4, this._y4);\n this.point(this._x5, this._y5);\n break;\n }\n }\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._x3 = x, this._y3 = y; break;\n case 1: this._point = 2; this._context.moveTo(this._x4 = x, this._y4 = y); break;\n case 2: this._point = 3; this._x5 = x, this._y5 = y; break;\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(tension) {\n\n function cardinal(context) {\n return new CardinalClosed(context, tension);\n }\n\n cardinal.tension = function(tension) {\n return custom(+tension);\n };\n\n return cardinal;\n})(0);\n","import {point} from \"./cardinal\";\n\nexport function CardinalOpen(context, tension) {\n this._context = context;\n this._k = (1 - tension) / 6;\n}\n\nCardinalOpen.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; this._line ? this._context.lineTo(this._x2, this._y2) : this._context.moveTo(this._x2, this._y2); break;\n case 3: this._point = 4; // proceed\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(tension) {\n\n function cardinal(context) {\n return new CardinalOpen(context, tension);\n }\n\n cardinal.tension = function(tension) {\n return custom(+tension);\n };\n\n return cardinal;\n})(0);\n","import {epsilon} from \"../math\";\nimport {Cardinal} from \"./cardinal\";\n\nexport function point(that, x, y) {\n var x1 = that._x1,\n y1 = that._y1,\n x2 = that._x2,\n y2 = that._y2;\n\n if (that._l01_a > epsilon) {\n var a = 2 * that._l01_2a + 3 * that._l01_a * that._l12_a + that._l12_2a,\n n = 3 * that._l01_a * (that._l01_a + that._l12_a);\n x1 = (x1 * a - that._x0 * that._l12_2a + that._x2 * that._l01_2a) / n;\n y1 = (y1 * a - that._y0 * that._l12_2a + that._y2 * that._l01_2a) / n;\n }\n\n if (that._l23_a > epsilon) {\n var b = 2 * that._l23_2a + 3 * that._l23_a * that._l12_a + that._l12_2a,\n m = 3 * that._l23_a * (that._l23_a + that._l12_a);\n x2 = (x2 * b + that._x1 * that._l23_2a - x * that._l12_2a) / m;\n y2 = (y2 * b + that._y1 * that._l23_2a - y * that._l12_2a) / m;\n }\n\n that._context.bezierCurveTo(x1, y1, x2, y2, that._x2, that._y2);\n}\n\nfunction CatmullRom(context, alpha) {\n this._context = context;\n this._alpha = alpha;\n}\n\nCatmullRom.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._l01_a = this._l12_a = this._l23_a =\n this._l01_2a = this._l12_2a = this._l23_2a =\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 2: this._context.lineTo(this._x2, this._y2); break;\n case 3: this.point(this._x2, this._y2); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n\n if (this._point) {\n var x23 = this._x2 - x,\n y23 = this._y2 - y;\n this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));\n }\n\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; // proceed\n default: point(this, x, y); break;\n }\n\n this._l01_a = this._l12_a, this._l12_a = this._l23_a;\n this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(alpha) {\n\n function catmullRom(context) {\n return alpha ? new CatmullRom(context, alpha) : new Cardinal(context, 0);\n }\n\n catmullRom.alpha = function(alpha) {\n return custom(+alpha);\n };\n\n return catmullRom;\n})(0.5);\n","import {CardinalClosed} from \"./cardinalClosed\";\nimport noop from \"../noop\";\nimport {point} from \"./catmullRom\";\n\nfunction CatmullRomClosed(context, alpha) {\n this._context = context;\n this._alpha = alpha;\n}\n\nCatmullRomClosed.prototype = {\n areaStart: noop,\n areaEnd: noop,\n lineStart: function() {\n this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = this._x5 =\n this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = this._y5 = NaN;\n this._l01_a = this._l12_a = this._l23_a =\n this._l01_2a = this._l12_2a = this._l23_2a =\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 1: {\n this._context.moveTo(this._x3, this._y3);\n this._context.closePath();\n break;\n }\n case 2: {\n this._context.lineTo(this._x3, this._y3);\n this._context.closePath();\n break;\n }\n case 3: {\n this.point(this._x3, this._y3);\n this.point(this._x4, this._y4);\n this.point(this._x5, this._y5);\n break;\n }\n }\n },\n point: function(x, y) {\n x = +x, y = +y;\n\n if (this._point) {\n var x23 = this._x2 - x,\n y23 = this._y2 - y;\n this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));\n }\n\n switch (this._point) {\n case 0: this._point = 1; this._x3 = x, this._y3 = y; break;\n case 1: this._point = 2; this._context.moveTo(this._x4 = x, this._y4 = y); break;\n case 2: this._point = 3; this._x5 = x, this._y5 = y; break;\n default: point(this, x, y); break;\n }\n\n this._l01_a = this._l12_a, this._l12_a = this._l23_a;\n this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(alpha) {\n\n function catmullRom(context) {\n return alpha ? new CatmullRomClosed(context, alpha) : new CardinalClosed(context, 0);\n }\n\n catmullRom.alpha = function(alpha) {\n return custom(+alpha);\n };\n\n return catmullRom;\n})(0.5);\n","import {CardinalOpen} from \"./cardinalOpen\";\nimport {point} from \"./catmullRom\";\n\nfunction CatmullRomOpen(context, alpha) {\n this._context = context;\n this._alpha = alpha;\n}\n\nCatmullRomOpen.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._l01_a = this._l12_a = this._l23_a =\n this._l01_2a = this._l12_2a = this._l23_2a =\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n\n if (this._point) {\n var x23 = this._x2 - x,\n y23 = this._y2 - y;\n this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));\n }\n\n switch (this._point) {\n case 0: this._point = 1; break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; this._line ? this._context.lineTo(this._x2, this._y2) : this._context.moveTo(this._x2, this._y2); break;\n case 3: this._point = 4; // proceed\n default: point(this, x, y); break;\n }\n\n this._l01_a = this._l12_a, this._l12_a = this._l23_a;\n this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(alpha) {\n\n function catmullRom(context) {\n return alpha ? new CatmullRomOpen(context, alpha) : new CardinalOpen(context, 0);\n }\n\n catmullRom.alpha = function(alpha) {\n return custom(+alpha);\n };\n\n return catmullRom;\n})(0.5);\n","import noop from \"../noop\";\n\nfunction LinearClosed(context) {\n this._context = context;\n}\n\nLinearClosed.prototype = {\n areaStart: noop,\n areaEnd: noop,\n lineStart: function() {\n this._point = 0;\n },\n lineEnd: function() {\n if (this._point) this._context.closePath();\n },\n point: function(x, y) {\n x = +x, y = +y;\n if (this._point) this._context.lineTo(x, y);\n else this._point = 1, this._context.moveTo(x, y);\n }\n};\n\nexport default function(context) {\n return new LinearClosed(context);\n}\n","function sign(x) {\n return x < 0 ? -1 : 1;\n}\n\n// Calculate the slopes of the tangents (Hermite-type interpolation) based on\n// the following paper: Steffen, M. 1990. A Simple Method for Monotonic\n// Interpolation in One Dimension. Astronomy and Astrophysics, Vol. 239, NO.\n// NOV(II), P. 443, 1990.\nfunction slope3(that, x2, y2) {\n var h0 = that._x1 - that._x0,\n h1 = x2 - that._x1,\n s0 = (that._y1 - that._y0) / (h0 || h1 < 0 && -0),\n s1 = (y2 - that._y1) / (h1 || h0 < 0 && -0),\n p = (s0 * h1 + s1 * h0) / (h0 + h1);\n return (sign(s0) + sign(s1)) * Math.min(Math.abs(s0), Math.abs(s1), 0.5 * Math.abs(p)) || 0;\n}\n\n// Calculate a one-sided slope.\nfunction slope2(that, t) {\n var h = that._x1 - that._x0;\n return h ? (3 * (that._y1 - that._y0) / h - t) / 2 : t;\n}\n\n// According to https://en.wikipedia.org/wiki/Cubic_Hermite_spline#Representations\n// \"you can express cubic Hermite interpolation in terms of cubic Bézier curves\n// with respect to the four values p0, p0 + m0 / 3, p1 - m1 / 3, p1\".\nfunction point(that, t0, t1) {\n var x0 = that._x0,\n y0 = that._y0,\n x1 = that._x1,\n y1 = that._y1,\n dx = (x1 - x0) / 3;\n that._context.bezierCurveTo(x0 + dx, y0 + dx * t0, x1 - dx, y1 - dx * t1, x1, y1);\n}\n\nfunction MonotoneX(context) {\n this._context = context;\n}\n\nMonotoneX.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 =\n this._y0 = this._y1 =\n this._t0 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 2: this._context.lineTo(this._x1, this._y1); break;\n case 3: point(this, this._t0, slope2(this, this._t0)); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n var t1 = NaN;\n\n x = +x, y = +y;\n if (x === this._x1 && y === this._y1) return; // Ignore coincident points.\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; point(this, slope2(this, t1 = slope3(this, x, y)), t1); break;\n default: point(this, this._t0, t1 = slope3(this, x, y)); break;\n }\n\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n this._t0 = t1;\n }\n}\n\nfunction MonotoneY(context) {\n this._context = new ReflectContext(context);\n}\n\n(MonotoneY.prototype = Object.create(MonotoneX.prototype)).point = function(x, y) {\n MonotoneX.prototype.point.call(this, y, x);\n};\n\nfunction ReflectContext(context) {\n this._context = context;\n}\n\nReflectContext.prototype = {\n moveTo: function(x, y) { this._context.moveTo(y, x); },\n closePath: function() { this._context.closePath(); },\n lineTo: function(x, y) { this._context.lineTo(y, x); },\n bezierCurveTo: function(x1, y1, x2, y2, x, y) { this._context.bezierCurveTo(y1, x1, y2, x2, y, x); }\n};\n\nexport function monotoneX(context) {\n return new MonotoneX(context);\n}\n\nexport function monotoneY(context) {\n return new MonotoneY(context);\n}\n","function Natural(context) {\n this._context = context;\n}\n\nNatural.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x = [];\n this._y = [];\n },\n lineEnd: function() {\n var x = this._x,\n y = this._y,\n n = x.length;\n\n if (n) {\n this._line ? this._context.lineTo(x[0], y[0]) : this._context.moveTo(x[0], y[0]);\n if (n === 2) {\n this._context.lineTo(x[1], y[1]);\n } else {\n var px = controlPoints(x),\n py = controlPoints(y);\n for (var i0 = 0, i1 = 1; i1 < n; ++i0, ++i1) {\n this._context.bezierCurveTo(px[0][i0], py[0][i0], px[1][i0], py[1][i0], x[i1], y[i1]);\n }\n }\n }\n\n if (this._line || (this._line !== 0 && n === 1)) this._context.closePath();\n this._line = 1 - this._line;\n this._x = this._y = null;\n },\n point: function(x, y) {\n this._x.push(+x);\n this._y.push(+y);\n }\n};\n\n// See https://www.particleincell.com/2012/bezier-splines/ for derivation.\nfunction controlPoints(x) {\n var i,\n n = x.length - 1,\n m,\n a = new Array(n),\n b = new Array(n),\n r = new Array(n);\n a[0] = 0, b[0] = 2, r[0] = x[0] + 2 * x[1];\n for (i = 1; i < n - 1; ++i) a[i] = 1, b[i] = 4, r[i] = 4 * x[i] + 2 * x[i + 1];\n a[n - 1] = 2, b[n - 1] = 7, r[n - 1] = 8 * x[n - 1] + x[n];\n for (i = 1; i < n; ++i) m = a[i] / b[i - 1], b[i] -= m, r[i] -= m * r[i - 1];\n a[n - 1] = r[n - 1] / b[n - 1];\n for (i = n - 2; i >= 0; --i) a[i] = (r[i] - a[i + 1]) / b[i];\n b[n - 1] = (x[n] + a[n - 1]) / 2;\n for (i = 0; i < n - 1; ++i) b[i] = 2 * x[i + 1] - a[i + 1];\n return [a, b];\n}\n\nexport default function(context) {\n return new Natural(context);\n}\n","function Step(context, t) {\n this._context = context;\n this._t = t;\n}\n\nStep.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x = this._y = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n if (0 < this._t && this._t < 1 && this._point === 2) this._context.lineTo(this._x, this._y);\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n if (this._line >= 0) this._t = 1 - this._t, this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; // proceed\n default: {\n if (this._t <= 0) {\n this._context.lineTo(this._x, y);\n this._context.lineTo(x, y);\n } else {\n var x1 = this._x * (1 - this._t) + x * this._t;\n this._context.lineTo(x1, this._y);\n this._context.lineTo(x1, y);\n }\n break;\n }\n }\n this._x = x, this._y = y;\n }\n};\n\nexport default function(context) {\n return new Step(context, 0.5);\n}\n\nexport function stepBefore(context) {\n return new Step(context, 0);\n}\n\nexport function stepAfter(context) {\n return new Step(context, 1);\n}\n","export default function(series, order) {\n if (!((n = series.length) > 1)) return;\n for (var i = 1, j, s0, s1 = series[order[0]], n, m = s1.length; i < n; ++i) {\n s0 = s1, s1 = series[order[i]];\n for (j = 0; j < m; ++j) {\n s1[j][1] += s1[j][0] = isNaN(s0[j][1]) ? s0[j][0] : s0[j][1];\n }\n }\n}\n","export default function(series) {\n var n = series.length, o = new Array(n);\n while (--n >= 0) o[n] = n;\n return o;\n}\n","import {slice} from \"./array\";\nimport constant from \"./constant\";\nimport offsetNone from \"./offset/none\";\nimport orderNone from \"./order/none\";\n\nfunction stackValue(d, key) {\n return d[key];\n}\n\nexport default function() {\n var keys = constant([]),\n order = orderNone,\n offset = offsetNone,\n value = stackValue;\n\n function stack(data) {\n var kz = keys.apply(this, arguments),\n i,\n m = data.length,\n n = kz.length,\n sz = new Array(n),\n oz;\n\n for (i = 0; i < n; ++i) {\n for (var ki = kz[i], si = sz[i] = new Array(m), j = 0, sij; j < m; ++j) {\n si[j] = sij = [0, +value(data[j], ki, j, data)];\n sij.data = data[j];\n }\n si.key = ki;\n }\n\n for (i = 0, oz = order(sz); i < n; ++i) {\n sz[oz[i]].index = i;\n }\n\n offset(sz, oz);\n return sz;\n }\n\n stack.keys = function(_) {\n return arguments.length ? (keys = typeof _ === \"function\" ? _ : constant(slice.call(_)), stack) : keys;\n };\n\n stack.value = function(_) {\n return arguments.length ? (value = typeof _ === \"function\" ? _ : constant(+_), stack) : value;\n };\n\n stack.order = function(_) {\n return arguments.length ? (order = _ == null ? orderNone : typeof _ === \"function\" ? _ : constant(slice.call(_)), stack) : order;\n };\n\n stack.offset = function(_) {\n return arguments.length ? (offset = _ == null ? offsetNone : _, stack) : offset;\n };\n\n return stack;\n}\n","import none from \"./none\";\n\nexport default function(series) {\n var sums = series.map(sum);\n return none(series).sort(function(a, b) { return sums[a] - sums[b]; });\n}\n\nexport function sum(series) {\n var s = 0, i = -1, n = series.length, v;\n while (++i < n) if (v = +series[i][1]) s += v;\n return s;\n}\n","export function cubicIn(t) {\n return t * t * t;\n}\n\nexport function cubicOut(t) {\n return --t * t * t + 1;\n}\n\nexport function cubicInOut(t) {\n return ((t *= 2) <= 1 ? t * t * t : (t -= 2) * t * t + 2) / 2;\n}\n","var exponent = 3;\n\nexport var polyIn = (function custom(e) {\n e = +e;\n\n function polyIn(t) {\n return Math.pow(t, e);\n }\n\n polyIn.exponent = custom;\n\n return polyIn;\n})(exponent);\n\nexport var polyOut = (function custom(e) {\n e = +e;\n\n function polyOut(t) {\n return 1 - Math.pow(1 - t, e);\n }\n\n polyOut.exponent = custom;\n\n return polyOut;\n})(exponent);\n\nexport var polyInOut = (function custom(e) {\n e = +e;\n\n function polyInOut(t) {\n return ((t *= 2) <= 1 ? Math.pow(t, e) : 2 - Math.pow(2 - t, e)) / 2;\n }\n\n polyInOut.exponent = custom;\n\n return polyInOut;\n})(exponent);\n","var pi = Math.PI,\n halfPi = pi / 2;\n\nexport function sinIn(t) {\n return 1 - Math.cos(t * halfPi);\n}\n\nexport function sinOut(t) {\n return Math.sin(t * halfPi);\n}\n\nexport function sinInOut(t) {\n return (1 - Math.cos(pi * t)) / 2;\n}\n","var b1 = 4 / 11,\n b2 = 6 / 11,\n b3 = 8 / 11,\n b4 = 3 / 4,\n b5 = 9 / 11,\n b6 = 10 / 11,\n b7 = 15 / 16,\n b8 = 21 / 22,\n b9 = 63 / 64,\n b0 = 1 / b1 / b1;\n\nexport function bounceIn(t) {\n return 1 - bounceOut(1 - t);\n}\n\nexport function bounceOut(t) {\n return (t = +t) < b1 ? b0 * t * t : t < b3 ? b0 * (t -= b2) * t + b4 : t < b6 ? b0 * (t -= b5) * t + b7 : b0 * (t -= b8) * t + b9;\n}\n\nexport function bounceInOut(t) {\n return ((t *= 2) <= 1 ? 1 - bounceOut(1 - t) : bounceOut(t - 1) + 1) / 2;\n}\n","var overshoot = 1.70158;\n\nexport var backIn = (function custom(s) {\n s = +s;\n\n function backIn(t) {\n return t * t * ((s + 1) * t - s);\n }\n\n backIn.overshoot = custom;\n\n return backIn;\n})(overshoot);\n\nexport var backOut = (function custom(s) {\n s = +s;\n\n function backOut(t) {\n return --t * t * ((s + 1) * t + s) + 1;\n }\n\n backOut.overshoot = custom;\n\n return backOut;\n})(overshoot);\n\nexport var backInOut = (function custom(s) {\n s = +s;\n\n function backInOut(t) {\n return ((t *= 2) < 1 ? t * t * ((s + 1) * t - s) : (t -= 2) * t * ((s + 1) * t + s) + 2) / 2;\n }\n\n backInOut.overshoot = custom;\n\n return backInOut;\n})(overshoot);\n","var tau = 2 * Math.PI,\n amplitude = 1,\n period = 0.3;\n\nexport var elasticIn = (function custom(a, p) {\n var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau);\n\n function elasticIn(t) {\n return a * Math.pow(2, 10 * --t) * Math.sin((s - t) / p);\n }\n\n elasticIn.amplitude = function(a) { return custom(a, p * tau); };\n elasticIn.period = function(p) { return custom(a, p); };\n\n return elasticIn;\n})(amplitude, period);\n\nexport var elasticOut = (function custom(a, p) {\n var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau);\n\n function elasticOut(t) {\n return 1 - a * Math.pow(2, -10 * (t = +t)) * Math.sin((t + s) / p);\n }\n\n elasticOut.amplitude = function(a) { return custom(a, p * tau); };\n elasticOut.period = function(p) { return custom(a, p); };\n\n return elasticOut;\n})(amplitude, period);\n\nexport var elasticInOut = (function custom(a, p) {\n var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau);\n\n function elasticInOut(t) {\n return ((t = t * 2 - 1) < 0\n ? a * Math.pow(2, 10 * t) * Math.sin((s - t) / p)\n : 2 - a * Math.pow(2, -10 * t) * Math.sin((s + t) / p)) / 2;\n }\n\n elasticInOut.amplitude = function(a) { return custom(a, p * tau); };\n elasticInOut.period = function(p) { return custom(a, p); };\n\n return elasticInOut;\n})(amplitude, period);\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","export function x(d) {\n return d[0];\n}\n\nexport function y(d) {\n return d[1];\n}\n","function RedBlackTree() {\n this._ = null; // root node\n}\n\nexport function RedBlackNode(node) {\n node.U = // parent node\n node.C = // color - true for red, false for black\n node.L = // left node\n node.R = // right node\n node.P = // previous node\n node.N = null; // next node\n}\n\nRedBlackTree.prototype = {\n constructor: RedBlackTree,\n\n insert: function(after, node) {\n var parent, grandpa, uncle;\n\n if (after) {\n node.P = after;\n node.N = after.N;\n if (after.N) after.N.P = node;\n after.N = node;\n if (after.R) {\n after = after.R;\n while (after.L) after = after.L;\n after.L = node;\n } else {\n after.R = node;\n }\n parent = after;\n } else if (this._) {\n after = RedBlackFirst(this._);\n node.P = null;\n node.N = after;\n after.P = after.L = node;\n parent = after;\n } else {\n node.P = node.N = null;\n this._ = node;\n parent = null;\n }\n node.L = node.R = null;\n node.U = parent;\n node.C = true;\n\n after = node;\n while (parent && parent.C) {\n grandpa = parent.U;\n if (parent === grandpa.L) {\n uncle = grandpa.R;\n if (uncle && uncle.C) {\n parent.C = uncle.C = false;\n grandpa.C = true;\n after = grandpa;\n } else {\n if (after === parent.R) {\n RedBlackRotateLeft(this, parent);\n after = parent;\n parent = after.U;\n }\n parent.C = false;\n grandpa.C = true;\n RedBlackRotateRight(this, grandpa);\n }\n } else {\n uncle = grandpa.L;\n if (uncle && uncle.C) {\n parent.C = uncle.C = false;\n grandpa.C = true;\n after = grandpa;\n } else {\n if (after === parent.L) {\n RedBlackRotateRight(this, parent);\n after = parent;\n parent = after.U;\n }\n parent.C = false;\n grandpa.C = true;\n RedBlackRotateLeft(this, grandpa);\n }\n }\n parent = after.U;\n }\n this._.C = false;\n },\n\n remove: function(node) {\n if (node.N) node.N.P = node.P;\n if (node.P) node.P.N = node.N;\n node.N = node.P = null;\n\n var parent = node.U,\n sibling,\n left = node.L,\n right = node.R,\n next,\n red;\n\n if (!left) next = right;\n else if (!right) next = left;\n else next = RedBlackFirst(right);\n\n if (parent) {\n if (parent.L === node) parent.L = next;\n else parent.R = next;\n } else {\n this._ = next;\n }\n\n if (left && right) {\n red = next.C;\n next.C = node.C;\n next.L = left;\n left.U = next;\n if (next !== right) {\n parent = next.U;\n next.U = node.U;\n node = next.R;\n parent.L = node;\n next.R = right;\n right.U = next;\n } else {\n next.U = parent;\n parent = next;\n node = next.R;\n }\n } else {\n red = node.C;\n node = next;\n }\n\n if (node) node.U = parent;\n if (red) return;\n if (node && node.C) { node.C = false; return; }\n\n do {\n if (node === this._) break;\n if (node === parent.L) {\n sibling = parent.R;\n if (sibling.C) {\n sibling.C = false;\n parent.C = true;\n RedBlackRotateLeft(this, parent);\n sibling = parent.R;\n }\n if ((sibling.L && sibling.L.C)\n || (sibling.R && sibling.R.C)) {\n if (!sibling.R || !sibling.R.C) {\n sibling.L.C = false;\n sibling.C = true;\n RedBlackRotateRight(this, sibling);\n sibling = parent.R;\n }\n sibling.C = parent.C;\n parent.C = sibling.R.C = false;\n RedBlackRotateLeft(this, parent);\n node = this._;\n break;\n }\n } else {\n sibling = parent.L;\n if (sibling.C) {\n sibling.C = false;\n parent.C = true;\n RedBlackRotateRight(this, parent);\n sibling = parent.L;\n }\n if ((sibling.L && sibling.L.C)\n || (sibling.R && sibling.R.C)) {\n if (!sibling.L || !sibling.L.C) {\n sibling.R.C = false;\n sibling.C = true;\n RedBlackRotateLeft(this, sibling);\n sibling = parent.L;\n }\n sibling.C = parent.C;\n parent.C = sibling.L.C = false;\n RedBlackRotateRight(this, parent);\n node = this._;\n break;\n }\n }\n sibling.C = true;\n node = parent;\n parent = parent.U;\n } while (!node.C);\n\n if (node) node.C = false;\n }\n};\n\nfunction RedBlackRotateLeft(tree, node) {\n var p = node,\n q = node.R,\n parent = p.U;\n\n if (parent) {\n if (parent.L === p) parent.L = q;\n else parent.R = q;\n } else {\n tree._ = q;\n }\n\n q.U = parent;\n p.U = q;\n p.R = q.L;\n if (p.R) p.R.U = p;\n q.L = p;\n}\n\nfunction RedBlackRotateRight(tree, node) {\n var p = node,\n q = node.L,\n parent = p.U;\n\n if (parent) {\n if (parent.L === p) parent.L = q;\n else parent.R = q;\n } else {\n tree._ = q;\n }\n\n q.U = parent;\n p.U = q;\n p.L = q.R;\n if (p.L) p.L.U = p;\n q.R = p;\n}\n\nfunction RedBlackFirst(node) {\n while (node.L) node = node.L;\n return node;\n}\n\nexport default RedBlackTree;\n","import {cells, edges, epsilon} from \"./Diagram\";\n\nexport function createEdge(left, right, v0, v1) {\n var edge = [null, null],\n index = edges.push(edge) - 1;\n edge.left = left;\n edge.right = right;\n if (v0) setEdgeEnd(edge, left, right, v0);\n if (v1) setEdgeEnd(edge, right, left, v1);\n cells[left.index].halfedges.push(index);\n cells[right.index].halfedges.push(index);\n return edge;\n}\n\nexport function createBorderEdge(left, v0, v1) {\n var edge = [v0, v1];\n edge.left = left;\n return edge;\n}\n\nexport function setEdgeEnd(edge, left, right, vertex) {\n if (!edge[0] && !edge[1]) {\n edge[0] = vertex;\n edge.left = left;\n edge.right = right;\n } else if (edge.left === right) {\n edge[1] = vertex;\n } else {\n edge[0] = vertex;\n }\n}\n\n// Liang–Barsky line clipping.\nfunction clipEdge(edge, x0, y0, x1, y1) {\n var a = edge[0],\n b = edge[1],\n ax = a[0],\n ay = a[1],\n bx = b[0],\n by = b[1],\n t0 = 0,\n t1 = 1,\n dx = bx - ax,\n dy = by - ay,\n r;\n\n r = x0 - ax;\n if (!dx && r > 0) return;\n r /= dx;\n if (dx < 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n } else if (dx > 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n }\n\n r = x1 - ax;\n if (!dx && r < 0) return;\n r /= dx;\n if (dx < 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n } else if (dx > 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n }\n\n r = y0 - ay;\n if (!dy && r > 0) return;\n r /= dy;\n if (dy < 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n } else if (dy > 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n }\n\n r = y1 - ay;\n if (!dy && r < 0) return;\n r /= dy;\n if (dy < 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n } else if (dy > 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n }\n\n if (!(t0 > 0) && !(t1 < 1)) return true; // TODO Better check?\n\n if (t0 > 0) edge[0] = [ax + t0 * dx, ay + t0 * dy];\n if (t1 < 1) edge[1] = [ax + t1 * dx, ay + t1 * dy];\n return true;\n}\n\nfunction connectEdge(edge, x0, y0, x1, y1) {\n var v1 = edge[1];\n if (v1) return true;\n\n var v0 = edge[0],\n left = edge.left,\n right = edge.right,\n lx = left[0],\n ly = left[1],\n rx = right[0],\n ry = right[1],\n fx = (lx + rx) / 2,\n fy = (ly + ry) / 2,\n fm,\n fb;\n\n if (ry === ly) {\n if (fx < x0 || fx >= x1) return;\n if (lx > rx) {\n if (!v0) v0 = [fx, y0];\n else if (v0[1] >= y1) return;\n v1 = [fx, y1];\n } else {\n if (!v0) v0 = [fx, y1];\n else if (v0[1] < y0) return;\n v1 = [fx, y0];\n }\n } else {\n fm = (lx - rx) / (ry - ly);\n fb = fy - fm * fx;\n if (fm < -1 || fm > 1) {\n if (lx > rx) {\n if (!v0) v0 = [(y0 - fb) / fm, y0];\n else if (v0[1] >= y1) return;\n v1 = [(y1 - fb) / fm, y1];\n } else {\n if (!v0) v0 = [(y1 - fb) / fm, y1];\n else if (v0[1] < y0) return;\n v1 = [(y0 - fb) / fm, y0];\n }\n } else {\n if (ly < ry) {\n if (!v0) v0 = [x0, fm * x0 + fb];\n else if (v0[0] >= x1) return;\n v1 = [x1, fm * x1 + fb];\n } else {\n if (!v0) v0 = [x1, fm * x1 + fb];\n else if (v0[0] < x0) return;\n v1 = [x0, fm * x0 + fb];\n }\n }\n }\n\n edge[0] = v0;\n edge[1] = v1;\n return true;\n}\n\nexport function clipEdges(x0, y0, x1, y1) {\n var i = edges.length,\n edge;\n\n while (i--) {\n if (!connectEdge(edge = edges[i], x0, y0, x1, y1)\n || !clipEdge(edge, x0, y0, x1, y1)\n || !(Math.abs(edge[0][0] - edge[1][0]) > epsilon\n || Math.abs(edge[0][1] - edge[1][1]) > epsilon)) {\n delete edges[i];\n }\n }\n}\n","import {createBorderEdge} from \"./Edge\";\nimport {cells, edges, epsilon} from \"./Diagram\";\n\nexport function createCell(site) {\n return cells[site.index] = {\n site: site,\n halfedges: []\n };\n}\n\nfunction cellHalfedgeAngle(cell, edge) {\n var site = cell.site,\n va = edge.left,\n vb = edge.right;\n if (site === vb) vb = va, va = site;\n if (vb) return Math.atan2(vb[1] - va[1], vb[0] - va[0]);\n if (site === va) va = edge[1], vb = edge[0];\n else va = edge[0], vb = edge[1];\n return Math.atan2(va[0] - vb[0], vb[1] - va[1]);\n}\n\nexport function cellHalfedgeStart(cell, edge) {\n return edge[+(edge.left !== cell.site)];\n}\n\nexport function cellHalfedgeEnd(cell, edge) {\n return edge[+(edge.left === cell.site)];\n}\n\nexport function sortCellHalfedges() {\n for (var i = 0, n = cells.length, cell, halfedges, j, m; i < n; ++i) {\n if ((cell = cells[i]) && (m = (halfedges = cell.halfedges).length)) {\n var index = new Array(m),\n array = new Array(m);\n for (j = 0; j < m; ++j) index[j] = j, array[j] = cellHalfedgeAngle(cell, edges[halfedges[j]]);\n index.sort(function(i, j) { return array[j] - array[i]; });\n for (j = 0; j < m; ++j) array[j] = halfedges[index[j]];\n for (j = 0; j < m; ++j) halfedges[j] = array[j];\n }\n }\n}\n\nexport function clipCells(x0, y0, x1, y1) {\n var nCells = cells.length,\n iCell,\n cell,\n site,\n iHalfedge,\n halfedges,\n nHalfedges,\n start,\n startX,\n startY,\n end,\n endX,\n endY,\n cover = true;\n\n for (iCell = 0; iCell < nCells; ++iCell) {\n if (cell = cells[iCell]) {\n site = cell.site;\n halfedges = cell.halfedges;\n iHalfedge = halfedges.length;\n\n // Remove any dangling clipped edges.\n while (iHalfedge--) {\n if (!edges[halfedges[iHalfedge]]) {\n halfedges.splice(iHalfedge, 1);\n }\n }\n\n // Insert any border edges as necessary.\n iHalfedge = 0, nHalfedges = halfedges.length;\n while (iHalfedge < nHalfedges) {\n end = cellHalfedgeEnd(cell, edges[halfedges[iHalfedge]]), endX = end[0], endY = end[1];\n start = cellHalfedgeStart(cell, edges[halfedges[++iHalfedge % nHalfedges]]), startX = start[0], startY = start[1];\n if (Math.abs(endX - startX) > epsilon || Math.abs(endY - startY) > epsilon) {\n halfedges.splice(iHalfedge, 0, edges.push(createBorderEdge(site, end,\n Math.abs(endX - x0) < epsilon && y1 - endY > epsilon ? [x0, Math.abs(startX - x0) < epsilon ? startY : y1]\n : Math.abs(endY - y1) < epsilon && x1 - endX > epsilon ? [Math.abs(startY - y1) < epsilon ? startX : x1, y1]\n : Math.abs(endX - x1) < epsilon && endY - y0 > epsilon ? [x1, Math.abs(startX - x1) < epsilon ? startY : y0]\n : Math.abs(endY - y0) < epsilon && endX - x0 > epsilon ? [Math.abs(startY - y0) < epsilon ? startX : x0, y0]\n : null)) - 1);\n ++nHalfedges;\n }\n }\n\n if (nHalfedges) cover = false;\n }\n }\n\n // If there weren’t any edges, have the closest site cover the extent.\n // It doesn’t matter which corner of the extent we measure!\n if (cover) {\n var dx, dy, d2, dc = Infinity;\n\n for (iCell = 0, cover = null; iCell < nCells; ++iCell) {\n if (cell = cells[iCell]) {\n site = cell.site;\n dx = site[0] - x0;\n dy = site[1] - y0;\n d2 = dx * dx + dy * dy;\n if (d2 < dc) dc = d2, cover = cell;\n }\n }\n\n if (cover) {\n var v00 = [x0, y0], v01 = [x0, y1], v11 = [x1, y1], v10 = [x1, y0];\n cover.halfedges.push(\n edges.push(createBorderEdge(site = cover.site, v00, v01)) - 1,\n edges.push(createBorderEdge(site, v01, v11)) - 1,\n edges.push(createBorderEdge(site, v11, v10)) - 1,\n edges.push(createBorderEdge(site, v10, v00)) - 1\n );\n }\n }\n\n // Lastly delete any cells with no edges; these were entirely clipped.\n for (iCell = 0; iCell < nCells; ++iCell) {\n if (cell = cells[iCell]) {\n if (!cell.halfedges.length) {\n delete cells[iCell];\n }\n }\n }\n}\n","import {RedBlackNode} from \"./RedBlackTree\";\nimport {circles, epsilon2} from \"./Diagram\";\n\nvar circlePool = [];\n\nexport var firstCircle;\n\nfunction Circle() {\n RedBlackNode(this);\n this.x =\n this.y =\n this.arc =\n this.site =\n this.cy = null;\n}\n\nexport function attachCircle(arc) {\n var lArc = arc.P,\n rArc = arc.N;\n\n if (!lArc || !rArc) return;\n\n var lSite = lArc.site,\n cSite = arc.site,\n rSite = rArc.site;\n\n if (lSite === rSite) return;\n\n var bx = cSite[0],\n by = cSite[1],\n ax = lSite[0] - bx,\n ay = lSite[1] - by,\n cx = rSite[0] - bx,\n cy = rSite[1] - by;\n\n var d = 2 * (ax * cy - ay * cx);\n if (d >= -epsilon2) return;\n\n var ha = ax * ax + ay * ay,\n hc = cx * cx + cy * cy,\n x = (cy * ha - ay * hc) / d,\n y = (ax * hc - cx * ha) / d;\n\n var circle = circlePool.pop() || new Circle;\n circle.arc = arc;\n circle.site = cSite;\n circle.x = x + bx;\n circle.y = (circle.cy = y + by) + Math.sqrt(x * x + y * y); // y bottom\n\n arc.circle = circle;\n\n var before = null,\n node = circles._;\n\n while (node) {\n if (circle.y < node.y || (circle.y === node.y && circle.x <= node.x)) {\n if (node.L) node = node.L;\n else { before = node.P; break; }\n } else {\n if (node.R) node = node.R;\n else { before = node; break; }\n }\n }\n\n circles.insert(before, circle);\n if (!before) firstCircle = circle;\n}\n\nexport function detachCircle(arc) {\n var circle = arc.circle;\n if (circle) {\n if (!circle.P) firstCircle = circle.N;\n circles.remove(circle);\n circlePool.push(circle);\n RedBlackNode(circle);\n arc.circle = null;\n }\n}\n","import {RedBlackNode} from \"./RedBlackTree\";\nimport {createCell} from \"./Cell\";\nimport {attachCircle, detachCircle} from \"./Circle\";\nimport {createEdge, setEdgeEnd} from \"./Edge\";\nimport {beaches, epsilon} from \"./Diagram\";\n\nvar beachPool = [];\n\nfunction Beach() {\n RedBlackNode(this);\n this.edge =\n this.site =\n this.circle = null;\n}\n\nfunction createBeach(site) {\n var beach = beachPool.pop() || new Beach;\n beach.site = site;\n return beach;\n}\n\nfunction detachBeach(beach) {\n detachCircle(beach);\n beaches.remove(beach);\n beachPool.push(beach);\n RedBlackNode(beach);\n}\n\nexport function removeBeach(beach) {\n var circle = beach.circle,\n x = circle.x,\n y = circle.cy,\n vertex = [x, y],\n previous = beach.P,\n next = beach.N,\n disappearing = [beach];\n\n detachBeach(beach);\n\n var lArc = previous;\n while (lArc.circle\n && Math.abs(x - lArc.circle.x) < epsilon\n && Math.abs(y - lArc.circle.cy) < epsilon) {\n previous = lArc.P;\n disappearing.unshift(lArc);\n detachBeach(lArc);\n lArc = previous;\n }\n\n disappearing.unshift(lArc);\n detachCircle(lArc);\n\n var rArc = next;\n while (rArc.circle\n && Math.abs(x - rArc.circle.x) < epsilon\n && Math.abs(y - rArc.circle.cy) < epsilon) {\n next = rArc.N;\n disappearing.push(rArc);\n detachBeach(rArc);\n rArc = next;\n }\n\n disappearing.push(rArc);\n detachCircle(rArc);\n\n var nArcs = disappearing.length,\n iArc;\n for (iArc = 1; iArc < nArcs; ++iArc) {\n rArc = disappearing[iArc];\n lArc = disappearing[iArc - 1];\n setEdgeEnd(rArc.edge, lArc.site, rArc.site, vertex);\n }\n\n lArc = disappearing[0];\n rArc = disappearing[nArcs - 1];\n rArc.edge = createEdge(lArc.site, rArc.site, null, vertex);\n\n attachCircle(lArc);\n attachCircle(rArc);\n}\n\nexport function addBeach(site) {\n var x = site[0],\n directrix = site[1],\n lArc,\n rArc,\n dxl,\n dxr,\n node = beaches._;\n\n while (node) {\n dxl = leftBreakPoint(node, directrix) - x;\n if (dxl > epsilon) node = node.L; else {\n dxr = x - rightBreakPoint(node, directrix);\n if (dxr > epsilon) {\n if (!node.R) {\n lArc = node;\n break;\n }\n node = node.R;\n } else {\n if (dxl > -epsilon) {\n lArc = node.P;\n rArc = node;\n } else if (dxr > -epsilon) {\n lArc = node;\n rArc = node.N;\n } else {\n lArc = rArc = node;\n }\n break;\n }\n }\n }\n\n createCell(site);\n var newArc = createBeach(site);\n beaches.insert(lArc, newArc);\n\n if (!lArc && !rArc) return;\n\n if (lArc === rArc) {\n detachCircle(lArc);\n rArc = createBeach(lArc.site);\n beaches.insert(newArc, rArc);\n newArc.edge = rArc.edge = createEdge(lArc.site, newArc.site);\n attachCircle(lArc);\n attachCircle(rArc);\n return;\n }\n\n if (!rArc) { // && lArc\n newArc.edge = createEdge(lArc.site, newArc.site);\n return;\n }\n\n // else lArc !== rArc\n detachCircle(lArc);\n detachCircle(rArc);\n\n var lSite = lArc.site,\n ax = lSite[0],\n ay = lSite[1],\n bx = site[0] - ax,\n by = site[1] - ay,\n rSite = rArc.site,\n cx = rSite[0] - ax,\n cy = rSite[1] - ay,\n d = 2 * (bx * cy - by * cx),\n hb = bx * bx + by * by,\n hc = cx * cx + cy * cy,\n vertex = [(cy * hb - by * hc) / d + ax, (bx * hc - cx * hb) / d + ay];\n\n setEdgeEnd(rArc.edge, lSite, rSite, vertex);\n newArc.edge = createEdge(lSite, site, null, vertex);\n rArc.edge = createEdge(site, rSite, null, vertex);\n attachCircle(lArc);\n attachCircle(rArc);\n}\n\nfunction leftBreakPoint(arc, directrix) {\n var site = arc.site,\n rfocx = site[0],\n rfocy = site[1],\n pby2 = rfocy - directrix;\n\n if (!pby2) return rfocx;\n\n var lArc = arc.P;\n if (!lArc) return -Infinity;\n\n site = lArc.site;\n var lfocx = site[0],\n lfocy = site[1],\n plby2 = lfocy - directrix;\n\n if (!plby2) return lfocx;\n\n var hl = lfocx - rfocx,\n aby2 = 1 / pby2 - 1 / plby2,\n b = hl / plby2;\n\n if (aby2) return (-b + Math.sqrt(b * b - 2 * aby2 * (hl * hl / (-2 * plby2) - lfocy + plby2 / 2 + rfocy - pby2 / 2))) / aby2 + rfocx;\n\n return (rfocx + lfocx) / 2;\n}\n\nfunction rightBreakPoint(arc, directrix) {\n var rArc = arc.N;\n if (rArc) return leftBreakPoint(rArc, directrix);\n var site = arc.site;\n return site[1] === directrix ? site[0] : Infinity;\n}\n","import {addBeach, removeBeach} from \"./Beach\";\nimport {sortCellHalfedges, cellHalfedgeStart, clipCells} from \"./Cell\";\nimport {firstCircle} from \"./Circle\";\nimport {clipEdges} from \"./Edge\";\nimport RedBlackTree from \"./RedBlackTree\";\n\nexport var epsilon = 1e-6;\nexport var epsilon2 = 1e-12;\nexport var beaches;\nexport var cells;\nexport var circles;\nexport var edges;\n\nfunction triangleArea(a, b, c) {\n return (a[0] - c[0]) * (b[1] - a[1]) - (a[0] - b[0]) * (c[1] - a[1]);\n}\n\nfunction lexicographic(a, b) {\n return b[1] - a[1]\n || b[0] - a[0];\n}\n\nexport default function Diagram(sites, extent) {\n var site = sites.sort(lexicographic).pop(),\n x,\n y,\n circle;\n\n edges = [];\n cells = new Array(sites.length);\n beaches = new RedBlackTree;\n circles = new RedBlackTree;\n\n while (true) {\n circle = firstCircle;\n if (site && (!circle || site[1] < circle.y || (site[1] === circle.y && site[0] < circle.x))) {\n if (site[0] !== x || site[1] !== y) {\n addBeach(site);\n x = site[0], y = site[1];\n }\n site = sites.pop();\n } else if (circle) {\n removeBeach(circle.arc);\n } else {\n break;\n }\n }\n\n sortCellHalfedges();\n\n if (extent) {\n var x0 = +extent[0][0],\n y0 = +extent[0][1],\n x1 = +extent[1][0],\n y1 = +extent[1][1];\n clipEdges(x0, y0, x1, y1);\n clipCells(x0, y0, x1, y1);\n }\n\n this.edges = edges;\n this.cells = cells;\n\n beaches =\n circles =\n edges =\n cells = null;\n}\n\nDiagram.prototype = {\n constructor: Diagram,\n\n polygons: function() {\n var edges = this.edges;\n\n return this.cells.map(function(cell) {\n var polygon = cell.halfedges.map(function(i) { return cellHalfedgeStart(cell, edges[i]); });\n polygon.data = cell.site.data;\n return polygon;\n });\n },\n\n triangles: function() {\n var triangles = [],\n edges = this.edges;\n\n this.cells.forEach(function(cell, i) {\n if (!(m = (halfedges = cell.halfedges).length)) return;\n var site = cell.site,\n halfedges,\n j = -1,\n m,\n s0,\n e1 = edges[halfedges[m - 1]],\n s1 = e1.left === site ? e1.right : e1.left;\n\n while (++j < m) {\n s0 = s1;\n e1 = edges[halfedges[j]];\n s1 = e1.left === site ? e1.right : e1.left;\n if (s0 && s1 && i < s0.index && i < s1.index && triangleArea(site, s0, s1) < 0) {\n triangles.push([site.data, s0.data, s1.data]);\n }\n }\n });\n\n return triangles;\n },\n\n links: function() {\n return this.edges.filter(function(edge) {\n return edge.right;\n }).map(function(edge) {\n return {\n source: edge.left.data,\n target: edge.right.data\n };\n });\n },\n\n find: function(x, y, radius) {\n var that = this, i0, i1 = that._found || 0, n = that.cells.length, cell;\n\n // Use the previously-found cell, or start with an arbitrary one.\n while (!(cell = that.cells[i1])) if (++i1 >= n) return null;\n var dx = x - cell.site[0], dy = y - cell.site[1], d2 = dx * dx + dy * dy;\n\n // Traverse the half-edges to find a closer cell, if any.\n do {\n cell = that.cells[i0 = i1], i1 = null;\n cell.halfedges.forEach(function(e) {\n var edge = that.edges[e], v = edge.left;\n if ((v === cell.site || !v) && !(v = edge.right)) return;\n var vx = x - v[0], vy = y - v[1], v2 = vx * vx + vy * vy;\n if (v2 < d2) d2 = v2, i1 = v.index;\n });\n } while (i1 !== null);\n\n that._found = i0;\n\n return radius == null || d2 <= radius * radius ? cell.site : null;\n }\n}\n","import constant from \"./constant\";\nimport {x as pointX, y as pointY} from \"./point\";\nimport Diagram, {epsilon} from \"./Diagram\";\n\nexport default function() {\n var x = pointX,\n y = pointY,\n extent = null;\n\n function voronoi(data) {\n return new Diagram(data.map(function(d, i) {\n var s = [Math.round(x(d, i, data) / epsilon) * epsilon, Math.round(y(d, i, data) / epsilon) * epsilon];\n s.index = i;\n s.data = d;\n return s;\n }), extent);\n }\n\n voronoi.polygons = function(data) {\n return voronoi(data).polygons();\n };\n\n voronoi.links = function(data) {\n return voronoi(data).links();\n };\n\n voronoi.triangles = function(data) {\n return voronoi(data).triangles();\n };\n\n voronoi.x = function(_) {\n return arguments.length ? (x = typeof _ === \"function\" ? _ : constant(+_), voronoi) : x;\n };\n\n voronoi.y = function(_) {\n return arguments.length ? (y = typeof _ === \"function\" ? _ : constant(+_), voronoi) : y;\n };\n\n voronoi.extent = function(_) {\n return arguments.length ? (extent = _ == null ? null : [[+_[0][0], +_[0][1]], [+_[1][0], +_[1][1]]], voronoi) : extent && [[extent[0][0], extent[0][1]], [extent[1][0], extent[1][1]]];\n };\n\n voronoi.size = function(_) {\n return arguments.length ? (extent = _ == null ? null : [[0, 0], [+_[0], +_[1]]], voronoi) : extent && [extent[1][0] - extent[0][0], extent[1][1] - extent[0][1]];\n };\n\n return voronoi;\n}\n","/* global window, requestAnimationFrame, cancelAnimationFrame */\nimport { FieldType, DimensionSubtype } from 'datamodel';\nimport {\n axisLeft,\n axisRight,\n axisTop,\n axisBottom\n} from 'd3-axis';\nimport {\n symbolCircle,\n symbolCross,\n symbolDiamond,\n symbolSquare,\n symbolStar,\n symbolWye,\n symbolTriangle,\n symbol,\n stack as d3Stack,\n stackOffsetDiverging,\n stackOrderNone,\n stackOrderAscending,\n stackOrderDescending,\n stackOffsetNone,\n stackOffsetExpand,\n stackOffsetWiggle,\n pie,\n arc,\n line,\n curveLinear,\n curveStepAfter,\n curveStepBefore,\n curveStep,\n curveCatmullRom,\n area\n} from 'd3-shape';\nimport { scaleBand } from 'd3-scale';\nimport { nest } from 'd3-collection';\nimport {\n interpolate,\n interpolateRgb,\n piecewise,\n interpolateNumber,\n interpolateHslLong\n} from 'd3-interpolate';\nimport {\n easeCubic,\n easeBounce,\n easePoly,\n easeBack,\n easeCircle,\n easeLinear,\n easeElastic\n} from 'd3-ease';\nimport {\n color,\n rgb,\n hsl\n} from 'd3-color';\nimport { voronoi } from 'd3-voronoi';\nimport Model from 'hyperdis';\nimport * as STACK_CONFIG from './enums/stack-config';\n\nconst HTMLElement = window.HTMLElement;\n\nconst isSimpleObject = (obj) => {\n let token;\n if (typeof obj === 'object') {\n if (obj === null) { return false; }\n token = Object.prototype.toString.call(obj);\n if (token === '[object Object]') {\n return (obj.constructor.toString().match(/^function (.*)\\(\\)/m) || [])[1] === 'Object';\n }\n }\n return false;\n};\n\n/**\n * Returns unique id\n * @return {string} Unique id string\n */\nconst\n getUniqueId = () => `id-${new Date().getTime()}${Math.round(Math.random() * 10000)}`;\n\n/**\n * Deep copies an object and returns a new object.\n * @param {Object} o Object to clone\n * @return {Object} New Object.\n */\nconst clone = (o) => {\n const output = {};\n let v;\n for (const key in o) {\n if ({}.hasOwnProperty.call(o, key)) {\n v = o[key];\n output[key] = isSimpleObject(v) ? clone(v) : v;\n }\n }\n return output;\n};\n\n/**\n* Checks the existence of keys in an object\n* @param {Array} keys Set of keys which are to be checked\n* @param {Object} obj whose keys are checked from the set of keys provided\n* @return {Object} Error if the keys are absent, or the object itself\n*/\nconst checkExistence = (keys, obj) => {\n const nonExistentKeys = [];\n keys.forEach((key) => {\n if (key in obj) {\n return;\n }\n nonExistentKeys.push(key);\n });\n return nonExistentKeys;\n};\n\nconst sanitizeIP = {\n typeObj: (keys, obj) => {\n if (typeof obj !== 'object') {\n return Error('Argument type object expected');\n }\n\n const nonExistentKeys = checkExistence(keys, obj);\n if (nonExistentKeys.length) {\n return Error(`Missing keys from parameter ${nonExistentKeys.join(', ')}`);\n }\n return obj;\n },\n\n /* istanbul ignore next */ htmlElem: (elem) => {\n if (!(elem instanceof HTMLElement)) {\n return Error('HTMLElement required');\n }\n return elem;\n }\n};\n\n/**\n * Gets the maximum value from an array of objects for a given property name\n * @param {Array.} data Array of objects\n * @param {string} field Field name\n * @return {number} Maximum value\n */\nconst getMax = (data, field) => Math.max(...data.filter(d => !isNaN(d[field])).map(d => d[field]));\n\n/**\n * Gets the minimum value from an array of objects for a given property name\n * @param {Array.} data Array of objects\n * @param {string} field Field name\n * @return {number} Minimum value\n */\nconst getMin = (data, field) => Math.min(...data.filter(d => !isNaN(d[field])).map(d => d[field]));\n\n/**\n * Gets the domain from the data based on the field name and type of field\n * @param {Array. | Array.} data Data Array\n * @param {Array.} fields Array of fields from where the domain will be calculated\n * @param {string} fieldType Type of field - nominal, quantitiative, temporal.\n * @return {Array} Usually contains a min and max value if field is quantitative or\n * an array of values if field type is nominal or ordinal\n */\nconst getDomainFromData = (data, fields, fieldType) => {\n let domain;\n let domArr;\n data = data[0] instanceof Array ? data : [data];\n switch (fieldType) {\n case DimensionSubtype.CATEGORICAL:\n domain = [].concat(...data.map(arr => arr.map(d => d[fields[0]]).filter(d => d !== undefined)));\n break;\n default:\n domArr = data.map((arr) => {\n const firstMin = getMin(arr, fields[0]);\n const secondMin = getMin(arr, fields[1]);\n const firstMax = getMax(arr, fields[0]);\n const secondMax = getMax(arr, fields[1]);\n return [Math.min(firstMin, secondMin), Math.max(firstMax, secondMax)];\n });\n domain = [Math.min(...domArr.map(d => d[0])), Math.max(...domArr.map(d => d[1]))];\n break;\n }\n return domain;\n};\n\n/**\n * Union Domain values\n * @param {Array.} domains Array of domain values\n * @param {string} fieldType type of field - dimension,measure or datetime.\n * @return {Array} Unioned domain of all domain values.\n */\nconst unionDomain = (domains, fieldType) => {\n let domain;\n domains = domains.filter(dom => dom.length);\n if (fieldType === DimensionSubtype.CATEGORICAL) {\n domain = domain = [].concat(...domains);\n } else {\n domain = [Math.min(...domains.map(d => d[0])), Math.max(...domains.map(d => d[1]))];\n }\n\n return domain;\n};\n\nconst symbolFns = {\n circle: symbolCircle,\n cross: symbolCross,\n diamond: symbolDiamond,\n square: symbolSquare,\n star: symbolStar,\n wye: symbolWye,\n triangle: symbolTriangle\n};\n\nconst easeFns = {\n cubic: easeCubic,\n bounce: easeBounce,\n linear: easeLinear,\n elastic: easeElastic,\n back: easeBack,\n poly: easePoly,\n circle: easeCircle\n};\n\n/**\n * Returns the maximum or minimum points of a compare value from an array of objects.\n * @param {Array} points Array of objects\n * @param {string} compareValue Key in the object on which the comparing will be done.\n * @param {string} minOrMax minimum or maximum.\n * @return {Object} Minimum or maximum point.\n */\nconst getExtremePoint = (points, compareValue, minOrMax) => {\n let extremePoint;\n let point;\n const len = points.length;\n let minOrMaxVal = minOrMax === 'max' ? -Infinity : Infinity;\n let val;\n\n for (let i = 0; i < len; i++) {\n point = points[i];\n val = point[compareValue];\n if (minOrMax === 'min' ? val < minOrMaxVal : val > minOrMaxVal) {\n minOrMaxVal = val;\n extremePoint = point;\n }\n }\n\n return extremePoint;\n};\n\n/**\n * Returns the minimum point of a compare value from an array of objects.\n * @param {Array} points Array of objects\n * @param {string} compareValue Key in the object on which the comparing will be done.\n * @return {Object} Minimum point.\n */\nconst getMinPoint = (points, compareValue) => getExtremePoint(points, compareValue, 'min');\n\n/**\n * Returns the maximum point of a compare value from an array of objects.\n * @param {Array} points Array of objects\n * @param {string} compareValue Key in the object on which the comparing will be done.\n * @return {Object} Maximum point.\n */\nconst getMaxPoint = (points, compareValue) => getExtremePoint(points, compareValue, 'max');\n\n/**\n * Gets the index of the closest value of the given value from the array.\n * @param {Array} arr Array of values\n * @param {number} value Value from which the nearest value will be calculated.\n * @param {string} side side property.\n * @return {number} index of the closest value\n */\n/* istanbul ignore next */const getClosestIndexOf = (arr, value, side) => {\n let low = 0;\n const arrLen = arr.length;\n let high = arrLen - 1;\n\n let mid;\n let d1;\n let d2;\n\n while (low < high) {\n mid = Math.floor((low + high) / 2);\n d1 = Math.abs(arr[mid] - value);\n d2 = Math.abs(arr[mid + 1] - value);\n\n if (d2 <= d1) {\n low = mid + 1;\n } else {\n high = mid;\n }\n }\n\n if (!side) {\n return high;\n }\n\n const highVal = arr[high];\n if (highVal === value) {\n return high;\n } else if (highVal > value) {\n if (high === 0) { return high; }\n return side === 'left' ? high - 1 : high;\n }\n if (high === arr.length - 1) { return high; }\n return side === 'left' ? high : high + 1;\n};\n\n/**\n * Returns the browser window object\n * @return {Window} Window object\n*/\nconst getWindow = () => window;\n\n/**\n * Returns the browser window object\n * @return {Window} Window object\n*/\nconst reqAnimFrame = (() => requestAnimationFrame)();\n\nconst cancelAnimFrame = (() => cancelAnimationFrame)();\n\n/**\n * Capitalizes the first letter of the word\n * @param {string} text word\n * @return {string} Capitalized word\n */\nconst capitalizeFirst = (text) => {\n text = text.toLowerCase();\n\n return text.replace(/\\w\\S*/g, txt => txt.charAt(0).toUpperCase() + txt.substr(1));\n};\n\n/**\n *\n *\n * @param {*} arr\n */\nconst unique = arr => ([...new Set(arr)]);\n\n/**\n * Gets the minimum difference between two consecutive numbers in an array.\n * @param {Array} arr Array of numbers\n * @param {number} index index of the value\n * @return {number} minimum difference between values\n */\n/* istanbul ignore next */ const getMinDiff = (arr, index) => {\n let diff;\n let uniqueVals;\n if (index !== undefined) {\n uniqueVals = unique(arr.map(d => d[index]));\n } else {\n uniqueVals = unique(arr);\n }\n if (uniqueVals.length > 1) {\n diff = Math.abs(uniqueVals[1] - uniqueVals[0]);\n for (let i = 2, len = uniqueVals.length; i < len; i++) {\n diff = Math.min(diff, Math.abs(uniqueVals[i] - uniqueVals[i - 1]));\n }\n } else {\n diff = uniqueVals[0];\n }\n\n return diff;\n};\n\n/**\n * Returns the class name appended with a given id.\n * @param {string} cls class name\n * @param {string} id unique identifier\n * @param {string} prefix string needed to add before the classname\n * @return {string} qualified class name\n */\n/* istanbul ignore next */const getQualifiedClassName = (cls, id, prefix) => {\n cls = cls.replace(/^\\.*/, '');\n return [`${prefix}-${cls}`, `${prefix}-${cls}-${id}`];\n};\n\n/**\n * This method is used to set the default value for variables\n * without sullying the code with conditional statements.\n *\n * @export\n * @param {any} param The parameter to test.\n * @param {any} value The default value to assign.\n * @return {any} The value.\n */\n/* istanbul ignore next */ const defaultValue = (param, value) => {\n if (typeof param === 'undefined' || (typeof param === 'object' && !param)) {\n return value;\n }\n return param;\n};\n\n/**\n * DESCRIPTION TODO\n * @todo\n *\n * @export\n * @param {Object} graph graph whose dependency order has to be generated\n * @return {Object} @todo\n */\nconst getDependencyOrder = (graph) => {\n const dependencyOrder = [];\n const visited = {};\n const keys = Object.keys(graph);\n /**\n * DESCRIPTION TODO\n * @todo\n *\n * @export\n * @param {Object} name @todo\n * @return {Object} @todo\n */\n const visit = (name) => {\n if (dependencyOrder.length === keys.length) {\n return true;\n }\n visited[name] = true;\n const edges = graph[name];\n for (let e = 0; e < edges.length; e++) {\n const dep = edges[e];\n if (!visited[dep]) {\n visit(dep);\n }\n }\n\n dependencyOrder.push(name);\n return false;\n };\n\n for (let i = 0; i < keys.length; i++) {\n if (visit(keys[i], i)) break;\n }\n\n return dependencyOrder;\n};\n\n/**\n * Iterates over the properties of an object and applies the function\n *\n * @param {any} obj object to be iterated upon\n * @param {any} fn function to be applied on it\n */\nconst objectIterator = (obj, fn) => {\n for (const key in obj) {\n if (Object.hasOwnProperty.call(obj, key)) {\n fn(key, obj);\n }\n }\n};\n\n/**\n * This class creates a d3 voronoi for retrieving the nearest neighbour of any point from a set of two\n * dimensional points\n * @class Voronoi\n */\n/* istanbul ignore next */ class Voronoi {\n /**\n * Initialize the voronoi with the data given.\n * @param {Array.} data Array of points.\n */\n constructor (data) {\n this._voronoi = voronoi().x(d => d.x).y(d => d.y);\n this.data(data);\n }\n\n /**\n * Sets the data to voronoi\n * @param {Array.} data Array of objects.\n * @return {Voronoi} Instance of voronoi.\n */\n data (data) {\n if (data) {\n this._voronoiFn = this._voronoi(data);\n }\n return this;\n }\n\n /**\n * Finds the closest point to the x and y position given.\n * @param {number} x x value\n * @param {number} y y value\n * @param {number} radius search radius.\n * @return {Object} Details of the nearest point.\n */\n find (x, y, radius) {\n return this._voronoiFn.find(x, y, radius);\n }\n}\n\n/**\n * Methods to handle changes to table configuration and reactivity are handled by this\n * class.\n */\n/**\n * Common store class\n *\n * @class Store\n */\nclass Store {\n /**\n * Creates an instance of Store.\n * @param {Object} config The object to create the state store with.\n * @memberof Store\n */\n constructor (config) {\n // create reactive model\n this.model = Model.create(config);\n this._listeners = [];\n }\n\n /**\n * This method returns a plain JSON object\n * with all the fields in the state store.\n *\n * @return {Object} Serialized representation of state store.\n * @memberof Store\n */\n serialize () {\n return this.model.serialize();\n }\n\n /**\n * This method is used to update the value of a property in the state store.\n *\n * @param {string} propName The name of the property.\n * @param {number} value The new value of the property.\n * @memberof Store\n */\n commit (propName, value) {\n // check if appropriate enum has been used\n this.model.prop(propName, value);\n }\n\n /**\n * This method is used to register a callbacl that will execute\n * when one or more properties change.\n *\n * @param {string | Array} propNames name of property or array of props.\n * @param {Function} callBack The callback to execute.\n * @memberof Store\n */\n /* istanbul ignore next */registerChangeListener (propNames, callBack, instantCall) {\n let props = propNames;\n if (!Array.isArray(propNames)) {\n props = [propNames];\n }\n const fn = this.model.next(props, callBack, instantCall);\n this._listeners.push(fn);\n return this;\n }\n /**\n * This method is used to register a callbacl that will execute\n * when one or more properties change.\n *\n * @param {string | Array} propNames name of property or array of props.\n * @param {Function} callBack The callback to execute.\n * @memberof Store\n */\n /* istanbul ignore next */ registerImmediateListener (propNames, callBack, instantCall) {\n let props = propNames;\n if (!Array.isArray(propNames)) {\n props = [propNames];\n }\n const fn = this.model.on(props, callBack, instantCall);\n this._listeners.push(fn);\n return this;\n }\n /**\n * This method is used to get the name of the property\n * from the state store.\n *\n * @param {string} propName The name of the field in state store.\n * @return {any} The value of the field.\n * @memberof Store\n */\n get (propName) {\n return this.model.prop(propName);\n }\n\n /**\n * This method is used to register a computed property that is computed every time\n * the store value changes.\n *\n * @param {string} propName The name of the property to create.\n * @param {Function} callBack The function to execute when depemdent props change.\n * @memberof Store\n */\n computed (propName, callBack) {\n return this.model.calculatedProp(propName, callBack);\n }\n\n unsubscribeAll () {\n this._listeners.forEach(fn => fn());\n }\n}\n\n/**\n * Sanitize an input number / string mixed number. Currently dot in the no is not supported.\n *\n * @param {number | string} val pure number or string mixed number\n * @return {number | null} Number if it can be extracted. Otherwise null\n */\nconst intSanitizer = (val) => {\n const arr = val.toString().match(/(\\d+)(px)*/g);\n if (!arr) {\n // If only characters are passed\n return null;\n }\n\n return parseInt(arr[0], 10);\n};\n\n/**\n * Setter getter creator from config\n * Format\n * PROPERTRY_NAME: {\n * value: // default value of the property,\n * meta: {\n * typeCheck: // The setter value will be checked using this. If the value is function then the setter value\n * // is passed as args. (Optional)\n * typeExpected: // The output of typecheck action will be tested against this. Truthy value will set the\n * // value to the setter\n * sanitizaiton: // Need for sanitization before type is checked\n * }\n * }\n *\n * @param {Object} holder an empty object on which the getters and setters will be mounted\n * @param {Object} options options config based on which the getters and setters are determined.\n * @param {Hyperdis} model optional model to attach the property. If not sent new moel is created.\n * @return {Array} @todo\n */\nconst transactor = (holder, options, model) => {\n let conf;\n const store = model && model instanceof Model ? model : Model.create({});\n\n for (const prop in options) {\n if ({}.hasOwnProperty.call(options, prop)) {\n conf = options[prop];\n if (!store.prop(prop)) {\n store.append({ [prop]: conf.value });\n }\n holder[prop] = ((context, key, meta) => (...params) => {\n let val;\n let compareTo;\n const paramsLen = params.length;\n const prevVal = store.prop(prop);\n if (paramsLen) {\n // If parameters are passed then it's a setter\n const spreadParams = meta && meta.spreadParams;\n val = params;\n const values = [];\n if (meta) {\n for (let i = 0; i < paramsLen; i++) {\n val = params[i];\n const sanitization = meta.sanitization && (spreadParams ? meta.sanitization[i] :\n meta.sanitization);\n const typeCheck = meta.typeCheck && (spreadParams ? meta.typeCheck[i] : meta.typeCheck);\n if (sanitization && typeof sanitization === 'function') {\n // Sanitize if required\n val = sanitization(val, prevVal, holder);\n }\n\n if (typeCheck) {\n // Checking if a setter is valid\n if (typeof typeCheck === 'function') {\n let typeExpected = meta.typeExpected;\n if (typeExpected && spreadParams) {\n typeExpected = typeExpected[i];\n }\n if (typeExpected) {\n compareTo = typeExpected;\n } else {\n compareTo = true;\n }\n\n if (typeCheck(val) === compareTo) {\n values.push(val);\n }\n } else if (typeof typeCheck === 'string') {\n if (typeCheck === 'constructor') {\n const typeExpected = spreadParams ? meta.typeExpected[i] : meta.typeExpected;\n if (val && (val.constructor.name === typeExpected)) {\n values.push(val);\n }\n }\n } else {\n // context.prop(key, val);\n values.push(val);\n }\n } else {\n values.push(val);\n }\n }\n const preset = meta.preset;\n const oldValues = context.prop(key);\n preset && preset(values[0], holder);\n if (spreadParams) {\n oldValues.forEach((value, i) => {\n if (values[i] === undefined) {\n values[i] = value;\n }\n });\n }\n values.length && context.prop(key, spreadParams ? values : values[0]);\n } else {\n context.prop(key, spreadParams ? val : val[0]);\n }\n return holder;\n }\n // No parameters are passed hence its a getter\n return context.prop(key);\n })(store, prop, conf.meta);\n }\n }\n\n return [holder, store];\n};\n\n/**\n *\n *\n * @param {*} context\n * @param {*} props\n */\nconst generateGetterSetters = (context, props) => {\n Object.entries(props).forEach((propInfo) => {\n const prop = propInfo[0];\n const typeChecker = propInfo[1].typeChecker;\n const sanitization = propInfo[1].sanitization;\n const prototype = context.constructor.prototype;\n if (!(Object.hasOwnProperty.call(prototype, prop))) {\n context[prop] = (...params) => {\n if (params.length) {\n let value = params[0];\n if (sanitization) {\n value = sanitization(context, params[0]);\n }\n if (typeChecker && !typeChecker(value)) {\n return context[`_${prop}`];\n }\n context[`_${prop}`] = value;\n return context;\n } return context[`_${prop}`];\n };\n }\n });\n};\n\n/**\n *\n *\n * @param {*} arr\n * @param {*} prop\n */\nconst getArraySum = (arr, prop) => arr.reduce((total, elem) => {\n total += prop ? elem[prop] : elem;\n return total;\n}, 0);\n\n/**\n *\n *\n * @param {*} arr1\n * @param {*} arr2\n * @returns\n */\nconst arraysEqual = (arr1, arr2) => {\n if (arr1.length !== arr2.length) { return false; }\n for (let i = arr1.length; i >= 0; i--) {\n if (arr1[i] !== arr2[i]) { return false; }\n }\n\n return true;\n};\n\n/* eslint valid-typeof:0 */\n/**\n * Returns a validation function which can be used to validate variables against a type and value\n *\n * @param {any} type type of value that the object should have\n * @return {Object} validation function\n */\nconst isEqual = type => (oldVal, newVal) => {\n if (type === 'Array') {\n if (!oldVal) {\n return false;\n }\n return arraysEqual(oldVal, newVal);\n } else if (type === 'Object') {\n return Object.is(oldVal, newVal);\n } return oldVal === newVal;\n};\n\n/**\n * Description @todo\n *\n * @param {any} transactionModel @todo\n * @param {any} transactionEndpoint @todo\n * @param {any} transactionItems @todo\n * @return {any} @todo\n */\nconst enableChainedTransaction = (transactionModel, transactionEndpoint, transactionItems) =>\n transactionItems.forEach(item => transactionModel.on(item, ([, newVal]) => transactionEndpoint[item](newVal)));\n\n/**\n * Chceks if the element is istanceof HTMLElement\n *\n * @param {Object} elem any JS Object\n */\nconst isHTMLElem = elem => elem instanceof HTMLElement;\n\nconst ERROR_MSG = {\n INTERFACE_IMPL: 'Method not implemented'\n};\n\n/**\n * Merges the sink object in the source by recursively iterating through the object properties\n * @param {Object} source Source Object\n * @param {Object} sink Sink Object\n * @return {Object} Merged object\n */\nconst mergeRecursive = (source, sink) => {\n for (const prop in sink) {\n if (isSimpleObject(source[prop]) && isSimpleObject(sink[prop])) {\n mergeRecursive(source[prop], sink[prop]);\n } else if (sink[prop] instanceof Object && sink[prop].constructor === Object) {\n source[prop] = {};\n mergeRecursive(source[prop], sink[prop]);\n } else {\n source[prop] = sink[prop];\n }\n }\n return source;\n};\n\nconst interpolateArray = (data, fitCount) => {\n const linearInterpolate = function (before, after, atPoint) {\n return before + (after - before) * atPoint;\n };\n const newData = [];\n const springFactor = ((data.length - 1) / (fitCount - 1));\n newData[0] = data[0]; // for new allocation\n for (let i = 1; i < fitCount - 1; i++) {\n const tmp = i * springFactor;\n const before = (Math.floor(tmp)).toFixed();\n const after = (Math.ceil(tmp)).toFixed();\n const atPoint = tmp - before;\n newData[i] = linearInterpolate(data[before], data[after], atPoint);\n }\n newData[fitCount - 1] = data[data.length - 1]; // for new allocation\n return newData;\n};\n\n/**\n *\n *\n * @param {*} fn\n */\nconst nextFrame = (fn) => {\n setTimeout(() => {\n fn();\n }, 0);\n};\n\n/**\n *\n *\n * @param {*} angle\n */\nconst angleToRadian = angle => angle * Math.PI / 180;\n\n/**\n *\n *\n * @param {*} newName\n * @param {*} oldName\n */\nconst replaceCSSPrefix = () => {\n // @todo\n};\n\n/**\n * Gets the interpolator function from d3 color\n *\n */\nconst interpolator = () => interpolate;\n\n/**\n * Gets the number interpolator from d3 color\n *\n */\nconst numberInterpolator = () => interpolateNumber;\n\n/**\n * Gets the rgb interpolator from d3 color\n *\n */\nconst colorInterpolator = () => interpolateRgb;\n\n/**\n * Gets the hsl interpolator from d3 color\n *\n */\nconst hslInterpolator = () => interpolateHslLong;\n\nconst transformColors = () => ({\n color,\n rgb,\n hsl\n});\n\n/**\n * Gets the piecewise interpolator from d3 color\n *\n */\nconst piecewiseInterpolator = () => piecewise;\n\nfunction hue2rgb (p, q, t) {\n if (t < 0) t += 1;\n if (t > 1) t -= 1;\n if (t < 1 / 6) return p + (q - p) * 6 * t;\n if (t < 1 / 2) return q;\n if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n return p;\n}\n\n /**\n * Converts an HSL color value to RGB. Conversion formula\n * adapted from http://en.wikipedia.org/wiki/HSL_color_space.\n * Assumes h, s, and l are contained in the set [0, 1] and\n * returns r, g, and b in the set [0, 255].\n *\n * @param Number h The hue\n * @param Number s The saturation\n * @param Number l The lightness\n * @return Array The RGB representation\n */\nconst hslToRgb = (h, s, l, a = 1) => {\n let r;\n let g;\n let b;\n\n if (s === 0) {\n r = g = b = l; // achromatic\n } else {\n const q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n const p = 2 * l - q;\n\n r = hue2rgb(p, q, h + 1 / 3);\n g = hue2rgb(p, q, h);\n b = hue2rgb(p, q, h - 1 / 3);\n }\n\n return [r * 255, g * 255, b * 255, a];\n};\n\n /**\n * Converts an RGB color value to HSV. Conversion formula\n * adapted from http://en.wikipedia.org/wiki/HSV_color_space.\n * Assumes r, g, and b are contained in the set [0, 255] and\n * returns h, s, and v in the set [0, 1].\n *\n * @param Number r The red color value\n * @param Number g The green color value\n * @param Number b The blue color value\n * @return Array The HSV representation\n */\nconst rgbToHsv = (r, g, b, a = 1) => {\n r = +r; g = +g; b = +b; a = +a;\n r /= 255; g /= 255; b /= 255;\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n let h;\n let s;\n const l = (max + min) / 2;\n\n if (max === min) {\n h = s = 0; // achromatic\n } else {\n const d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n switch (max) {\n case r: h = (g - b) / d + (g < b ? 6 : 0); break;\n case g: h = (b - r) / d + 2; break;\n case b: h = (r - g) / d + 4; break;\n default: break;\n }\n h /= 6;\n }\n return [h, s, l, a];\n};\n\n /**\n * Converts an HSV color value to RGB. Conversion formula\n * adapted from http://en.wikipedia.org/wiki/HSV_color_space.\n * Assumes h, s, and v are contained in the set [0, 1] and\n * returns r, g, and b in the set [0, 255].\n *\n * @param Number h The hue\n * @param Number s The saturation\n * @param Number v The value\n * @return Array The RGB representation\n */\nconst hsvToRgb = (h, s, v, a = 1) => {\n let r;\n let g;\n let b;\n\n const i = Math.floor(h * 6);\n const f = h * 6 - i;\n const p = v * (1 - s);\n const q = v * (1 - f * s);\n const t = v * (1 - (1 - f) * s);\n\n switch (i % 6) {\n case 0: r = v; g = t; b = p; break;\n case 1: r = q; g = v; b = p; break;\n case 2: r = p; g = v; b = t; break;\n case 3: r = p; g = q; b = v; break;\n case 4: r = t; g = p; b = v; break;\n case 5: r = v; g = p; b = q; break;\n default: break;\n }\n\n return [r * 255, g * 255, b * 255, a];\n};\n\nconst hexToHsv = (hex) => {\n const result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\n\n const r = parseInt(result[1], 16);\n const g = parseInt(result[2], 16);\n const b = parseInt(result[3], 16);\n const a = result[4] ? parseInt(result[4], 16) : 1;\n return rgbToHsv(r, g, b, a);\n};\n\nconst detectColor = (col) => {\n const matchRgb = /rgb\\((\\d{1,3}), (\\d{1,3}), (\\d{1,3})\\)/;\n const matchHsl = /hsl\\((\\d+),\\s*([\\d.]+)%,\\s*([\\d.]+)%\\)/g;\n\n // Source : https://gist.github.com/sethlopezme/d072b945969a3cc2cc11\n // eslint-disable-next-line\n const matchRgba = /rgba?\\(((25[0-5]|2[0-4]\\d|1\\d{1,2}|\\d\\d?)\\s*,\\s*?){2}(25[0-5]|2[0-4]\\d|1\\d{1,2}|\\d\\d?)\\s*,?\\s*([01]\\.?\\d*?)?\\)/;\n // eslint-disable-next-line\n const matchHsla = /^hsla\\((0|360|35\\d|3[0-4]\\d|[12]\\d\\d|0?\\d?\\d),(0|100|\\d{1,2})%,(0|100|\\d{1,2})%,(0?\\.\\d|1(\\.0)?)\\)$/;\n const matchHex = /^#([0-9a-f]{3}){1,2}$/i;\n\n if (matchRgb.test(col) || matchRgba.test(col)) {\n return 'rgb';\n } else if (matchHsl.test(col) || matchHsla.test(col)) {\n return 'hsl';\n } else if (matchHex.test(col)) {\n return 'hex';\n } return col;\n};\n\n/**\n *\n *\n * @param {*} model\n * @param {*} propModel\n * @returns\n */\nconst filterPropagationModel = (model, propModel, measures) => {\n const { data, schema } = propModel.getData();\n let filteredModel;\n if (schema.length) {\n const fieldMap = model.getFieldsConfig();\n filteredModel = model.select((fields) => {\n const include = data.some(row => schema.every((propField, idx) => {\n if (!measures && (!(propField.name in fieldMap) ||\n fieldMap[propField.name].def.type === FieldType.MEASURE)) {\n return true;\n }\n return row[idx] === fields[propField.name].valueOf();\n }));\n return include;\n }, {\n saveChild: false\n });\n } else {\n filteredModel = propModel;\n }\n\n return filteredModel;\n};\n\nconst assembleModelFromIdentifiers = (model, identifiers) => {\n let schema = [];\n let data;\n const fieldMap = model.getFieldsConfig();\n if (identifiers.length) {\n const fields = identifiers[0];\n const len = fields.length;\n for (let i = 0; i < len; i++) {\n const field = fields[i];\n const fieldObj = fieldMap[field] && Object.assign({}, fieldMap[field].def);\n if (fieldObj) {\n schema.push(Object.assign(fieldObj));\n }\n }\n\n data = [];\n const header = identifiers[0];\n for (let i = 1; i < identifiers.length; i += 1) {\n const vals = identifiers[i];\n const temp = {};\n vals.forEach((fieldVal, cIdx) => {\n temp[header[cIdx]] = fieldVal;\n });\n data.push(temp);\n }\n } else {\n data = [];\n schema = [];\n }\n\n return new model.constructor(data, schema);\n};\n\n/**\n *\n *\n * @param {*} dataModel\n * @param {*} criteria\n * @returns\n */\nconst getDataModelFromRange = (dataModel, criteria, mode) => {\n if (criteria === null) {\n return null;\n }\n const selFields = Object.keys(criteria);\n const selFn = fields => selFields.every((field) => {\n const val = fields[field].value;\n const range = criteria[field][0] instanceof Array ? criteria[field][0] : criteria[field];\n if (typeof range[0] === 'string') {\n return range.find(d => d === val) !== undefined;\n }\n return range ? val >= range[0] && val <= range[1] : true;\n });\n\n return dataModel.select(selFn, {\n saveChild: false,\n mode\n });\n};\n\n/**\n *\n *\n * @param {*} dataModel\n * @param {*} identifiers\n * @returns\n */\nconst getDataModelFromIdentifiers = (dataModel, identifiers, mode) => {\n let filteredDataModel;\n if (identifiers instanceof Array) {\n const fieldsConfig = dataModel.getFieldsConfig();\n\n const dataArr = identifiers.slice(1, identifiers.length);\n if (identifiers instanceof Function) {\n filteredDataModel = identifiers(dataModel, {}, false);\n } else if (identifiers instanceof Array && identifiers[0].length) {\n const filteredSchema = identifiers[0].filter(d => d in fieldsConfig);\n filteredDataModel = dataModel.select((fields) => {\n let include = true;\n filteredSchema.forEach((propField, idx) => {\n const value = fields[propField].valueOf();\n const index = dataArr.findIndex(d => d[idx] === value);\n include = include && index !== -1;\n });\n return include;\n }, {\n saveChild: false,\n mode\n });\n }\n } else {\n filteredDataModel = getDataModelFromRange(dataModel, identifiers, mode);\n }\n return filteredDataModel;\n};\n\n/**\n *\n *\n * @param {*} context\n * @param {*} listenerMap\n */\nconst registerListeners = (context, listenerMap) => {\n const propListenerMap = listenerMap(context);\n for (const key in propListenerMap) {\n if ({}.hasOwnProperty.call(propListenerMap, key)) {\n const mapObj = propListenerMap[key];\n const propType = mapObj.type;\n const props = mapObj.props;\n const listenerFn = mapObj.listener;\n context.store()[propType](props, listenerFn);\n }\n }\n};\n\nconst isValidValue = value => !isNaN(value) && value !== -Infinity && value !== Infinity;\n/**\n *\n *\n * @param {*} obj\n * @param {*} fields\n * @returns\n */\nconst getObjProp = (obj, ...fields) => {\n if (obj === undefined || obj === null) {\n return obj;\n }\n let retObj = obj;\n for (let i = 0, len = fields.length; i < len; i++) {\n retObj = retObj[fields[i]];\n if (retObj === undefined || retObj === null) {\n break;\n }\n }\n return retObj;\n};\n\n/**\n *\n *\n * @param {*} str\n * @returns\n */\nconst escapeHTML = (str) => {\n const htmlEscapes = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": ''',\n '/': '/'\n };\n const htmlEscaper = /[&<>\"'/]/g;\n return (`${str}`).replace(htmlEscaper, match => htmlEscapes[match]);\n};\n\n/**\n *\n *\n * @param {*} arr\n */\nconst transposeArray = arr => arr[0].map((col, i) => arr.map(row => row[i]));\nconst toArray = arr => (arr instanceof Array ? arr : [arr]);\nconst extendsClass = (cls, extendsFrom, found) => {\n if (!cls) {\n return false;\n }\n const prototype = cls.prototype;\n if (prototype instanceof extendsFrom) {\n found = true;\n } else {\n found = extendsClass(prototype, extendsFrom, found);\n }\n return found;\n};\n\n/**\n *\n * @param {*} dm1\n * @param {*} dm2\n */\nconst concatModels = (dm1, dm2) => {\n const dataObj1 = dm1.getData();\n const dataObj2 = dm2.getData();\n const data1 = dataObj1.data;\n const data2 = dataObj2.data;\n const schema1 = dataObj1.schema;\n const schema2 = dataObj2.schema;\n const tuples1 = {};\n const tuples2 = {};\n const commonTuples = {};\n for (let i = 0; i < data1.length; i++) {\n for (let ii = 0; ii < data2.length; ii++) {\n const row1 = data1[i];\n const row2 = data2[ii];\n const dim1Values = row1.filter((d, idx) => schema1[idx].type === FieldType.DIMENSION);\n const dim2Values = row2.filter((d, idx) => schema2[idx].type === FieldType.DIMENSION);\n const allDimSame = dim1Values.every(value => dim2Values.indexOf(value) !== -1);\n if (allDimSame) {\n const key = dim1Values.join();\n !commonTuples[key] && (commonTuples[key] = {});\n row1.forEach((value, idx) => {\n commonTuples[key][schema1[idx].name] = value;\n });\n row2.forEach((value, idx) => {\n commonTuples[key][schema2[idx].name] = value;\n });\n } else {\n const dm1Key = dim1Values.join();\n const dm2Key = dim2Values.join();\n if (!commonTuples[dm1Key] && !commonTuples[dm2Key]) {\n !tuples1[dm1Key] && (tuples1[dm1Key] = {});\n !tuples2[dm2Key] && (tuples2[dm2Key] = {});\n row1.forEach((value, idx) => {\n tuples1[dm1Key][schema1[idx].name] = value;\n });\n row2.forEach((value, idx) => {\n tuples2[dm2Key][schema2[idx].name] = value;\n });\n }\n }\n }\n }\n\n const commonSchema = [...schema1, ...schema2.filter(s2 => schema1.findIndex(s1 => s1.name === s2.name) === -1)];\n const data = [...Object.values(tuples1), ...Object.values(tuples2), ...Object.values(commonTuples)];\n return [data, commonSchema];\n};\n\nconst getSymbol = type => symbol().type(symbolFns[type]);\n\nconst stackOrders = {\n [STACK_CONFIG.ORDER_NONE]: stackOrderNone,\n [STACK_CONFIG.ORDER_ASCENDING]: stackOrderAscending,\n [STACK_CONFIG.ORDER_DESCENDING]: stackOrderDescending\n};\nconst stackOffsets = {\n [STACK_CONFIG.OFFSET_DIVERGING]: stackOffsetDiverging,\n [STACK_CONFIG.OFFSET_NONE]: stackOffsetNone,\n [STACK_CONFIG.OFFSET_EXPAND]: stackOffsetExpand,\n [STACK_CONFIG.OFFSET_WIGGLE]: stackOffsetWiggle\n};\n\n// eslint-disable-next-line require-jsdoc\nconst stack = params => d3Stack().keys(params.keys).offset(stackOffsets[params.offset])\n .order(stackOrders[params.order])(params.data);\n\n/**\n * Groups the data into a hierarchical tree structure based on one or more fields.\n * @param { Object } params Configuration properties for nesting data\n * @param { Array. } params.data Data which needs to be grouped\n * @param { Array. } params.keys Field indices by which the data will be grouped\n * @return { Array. } Grouped data array\n */\nconst nestCollection = (params) => {\n const nestFn = nest();\n params.keys.forEach(key => nestFn.key(d => d[key]));\n return nestFn.entries(params.data);\n};\n\nconst pathInterpolators = {\n curveLinear,\n curveStepAfter,\n curveStepBefore,\n curveStep,\n curveCatmullRom,\n stepAfter: curveStepAfter,\n catmullRom: curveCatmullRom,\n step: curveStep,\n stepBefore: curveStepBefore,\n linear: curveLinear\n};\n\nconst Symbols = {\n axisLeft,\n axisRight,\n axisTop,\n axisBottom,\n line,\n area,\n pie,\n arc,\n nest\n};\n\nconst Scales = {\n band: scaleBand\n};\n\nconst getSmallestDiff = (points) => {\n points = points.sort((a, b) => a - b);\n let minDiff = points[1] - points[0];\n for (let i = 2; i < points.length; i++) {\n minDiff = Math.min(minDiff, points[i] - points[i - 1]);\n }\n\n return minDiff;\n};\n\nconst require = (lookupWhat, lookupDetails) => ({\n resolvable: (store) => {\n const lookupTarget = store[lookupWhat];\n const depArr = lookupDetails.slice(0, lookupDetails.length - 1);\n const fn = lookupDetails[lookupDetails.length - 1]; // fn\n\n const deps = depArr.map(str => lookupTarget[str]);\n return {\n fn: fn(...deps),\n depArr\n };\n }\n});\n\nconst nextAnimFrame = window.requestAnimationFrame || window.webkitRequestAnimationFrame ||\n window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame ||\n function (callback) {\n setTimeout(callback, 16);\n };\n\nexport {\n require,\n Scales,\n Symbols,\n pathInterpolators,\n stack,\n nestCollection,\n getSymbol,\n transformColors,\n detectColor,\n hexToHsv,\n hslToRgb,\n rgbToHsv,\n hsvToRgb,\n concatModels,\n toArray,\n angleToRadian,\n escapeHTML,\n generateGetterSetters,\n getArraySum,\n interpolator,\n piecewiseInterpolator,\n getDataModelFromIdentifiers,\n getDataModelFromRange,\n colorInterpolator,\n numberInterpolator,\n ERROR_MSG,\n reqAnimFrame,\n nextAnimFrame,\n filterPropagationModel,\n transposeArray,\n cancelAnimFrame,\n getMax,\n getMin,\n getDomainFromData,\n getUniqueId,\n mergeRecursive,\n unionDomain,\n symbolFns,\n easeFns,\n clone,\n isEqual,\n interpolateArray,\n getMinPoint,\n defaultValue,\n getMaxPoint,\n getClosestIndexOf,\n Voronoi,\n checkExistence,\n sanitizeIP,\n getMinDiff,\n capitalizeFirst,\n getWindow,\n getQualifiedClassName,\n Store,\n getDependencyOrder,\n objectIterator,\n intSanitizer,\n transactor,\n enableChainedTransaction,\n isHTMLElem,\n isSimpleObject,\n nextFrame,\n registerListeners,\n replaceCSSPrefix,\n getObjProp,\n extendsClass,\n assembleModelFromIdentifiers,\n isValidValue,\n hslInterpolator,\n getSmallestDiff\n};\n","export function linear(t) {\n return +t;\n}\n","export function circleIn(t) {\n return 1 - Math.sqrt(1 - t * t);\n}\n\nexport function circleOut(t) {\n return Math.sqrt(1 - --t * t);\n}\n\nexport function circleInOut(t) {\n return ((t *= 2) <= 1 ? 1 - Math.sqrt(1 - t * t) : Math.sqrt(1 - (t -= 2) * t) + 1) / 2;\n}\n","import {path} from \"d3-path\";\nimport circle from \"./symbol/circle\";\nimport cross from \"./symbol/cross\";\nimport diamond from \"./symbol/diamond\";\nimport star from \"./symbol/star\";\nimport square from \"./symbol/square\";\nimport triangle from \"./symbol/triangle\";\nimport wye from \"./symbol/wye\";\nimport constant from \"./constant\";\n\nexport var symbols = [\n circle,\n cross,\n diamond,\n square,\n star,\n triangle,\n wye\n];\n\nexport default function() {\n var type = constant(circle),\n size = constant(64),\n context = null;\n\n function symbol() {\n var buffer;\n if (!context) context = buffer = path();\n type.apply(this, arguments).draw(context, +size.apply(this, arguments));\n if (buffer) return context = null, buffer + \"\" || null;\n }\n\n symbol.type = function(_) {\n return arguments.length ? (type = typeof _ === \"function\" ? _ : constant(_), symbol) : type;\n };\n\n symbol.size = function(_) {\n return arguments.length ? (size = typeof _ === \"function\" ? _ : constant(+_), symbol) : size;\n };\n\n symbol.context = function(_) {\n return arguments.length ? (context = _ == null ? null : _, symbol) : context;\n };\n\n return symbol;\n}\n","export const ORDER_ASCENDING = 'ascending';\nexport const ORDER_DESCENDING = 'descending';\nexport const ORDER_NONE = 'none';\nexport const OFFSET_DIVERGING = 'diverging';\nexport const OFFSET_NONE = 'none';\nexport const OFFSET_EXPAND = 'expand';\nexport const OFFSET_WIGGLE = 'wiggle';\n","import ascending from \"./ascending\";\n\nexport default function(series) {\n return ascending(series).reverse();\n}\n","export default function(series, order) {\n if (!((n = series.length) > 1)) return;\n for (var i, j = 0, d, dy, yp, yn, n, m = series[order[0]].length; j < m; ++j) {\n for (yp = yn = 0, i = 0; i < n; ++i) {\n if ((dy = (d = series[order[i]][j])[1] - d[0]) >= 0) {\n d[0] = yp, d[1] = yp += dy;\n } else if (dy < 0) {\n d[1] = yn, d[0] = yn += dy;\n } else {\n d[0] = yp;\n }\n }\n }\n}\n","import none from \"./none\";\n\nexport default function(series, order) {\n if (!((n = series.length) > 0)) return;\n for (var i, n, j = 0, m = series[0].length, y; j < m; ++j) {\n for (y = i = 0; i < n; ++i) y += series[i][j][1] || 0;\n if (y) for (i = 0; i < n; ++i) series[i][j][1] /= y;\n }\n none(series, order);\n}\n","import none from \"./none\";\n\nexport default function(series, order) {\n if (!((n = series.length) > 0) || !((m = (s0 = series[order[0]]).length) > 0)) return;\n for (var y = 0, j = 1, s0, m, n; j < m; ++j) {\n for (var i = 0, s1 = 0, s2 = 0; i < n; ++i) {\n var si = series[order[i]],\n sij0 = si[j][1] || 0,\n sij1 = si[j - 1][1] || 0,\n s3 = (sij0 - sij1) / 2;\n for (var k = 0; k < i; ++k) {\n var sk = series[order[k]],\n skj0 = sk[j][1] || 0,\n skj1 = sk[j - 1][1] || 0;\n s3 += skj0 - skj1;\n }\n s1 += sij0, s2 += s3 * sij0;\n }\n s0[j - 1][1] += s0[j - 1][0] = y;\n if (s1) y -= s2 / s1;\n }\n s0[j - 1][1] += s0[j - 1][0] = y;\n none(series, order);\n}\n","import constant from \"./constant\";\nimport descending from \"./descending\";\nimport identity from \"./identity\";\nimport {tau} from \"./math\";\n\nexport default function() {\n var value = identity,\n sortValues = descending,\n sort = null,\n startAngle = constant(0),\n endAngle = constant(tau),\n padAngle = constant(0);\n\n function pie(data) {\n var i,\n n = data.length,\n j,\n k,\n sum = 0,\n index = new Array(n),\n arcs = new Array(n),\n a0 = +startAngle.apply(this, arguments),\n da = Math.min(tau, Math.max(-tau, endAngle.apply(this, arguments) - a0)),\n a1,\n p = Math.min(Math.abs(da) / n, padAngle.apply(this, arguments)),\n pa = p * (da < 0 ? -1 : 1),\n v;\n\n for (i = 0; i < n; ++i) {\n if ((v = arcs[index[i] = i] = +value(data[i], i, data)) > 0) {\n sum += v;\n }\n }\n\n // Optionally sort the arcs by previously-computed values or by data.\n if (sortValues != null) index.sort(function(i, j) { return sortValues(arcs[i], arcs[j]); });\n else if (sort != null) index.sort(function(i, j) { return sort(data[i], data[j]); });\n\n // Compute the arcs! They are stored in the original data's order.\n for (i = 0, k = sum ? (da - n * pa) / sum : 0; i < n; ++i, a0 = a1) {\n j = index[i], v = arcs[j], a1 = a0 + (v > 0 ? v * k : 0) + pa, arcs[j] = {\n data: data[j],\n index: i,\n value: v,\n startAngle: a0,\n endAngle: a1,\n padAngle: p\n };\n }\n\n return arcs;\n }\n\n pie.value = function(_) {\n return arguments.length ? (value = typeof _ === \"function\" ? _ : constant(+_), pie) : value;\n };\n\n pie.sortValues = function(_) {\n return arguments.length ? (sortValues = _, sort = null, pie) : sortValues;\n };\n\n pie.sort = function(_) {\n return arguments.length ? (sort = _, sortValues = null, pie) : sort;\n };\n\n pie.startAngle = function(_) {\n return arguments.length ? (startAngle = typeof _ === \"function\" ? _ : constant(+_), pie) : startAngle;\n };\n\n pie.endAngle = function(_) {\n return arguments.length ? (endAngle = typeof _ === \"function\" ? _ : constant(+_), pie) : endAngle;\n };\n\n pie.padAngle = function(_) {\n return arguments.length ? (padAngle = typeof _ === \"function\" ? _ : constant(+_), pie) : padAngle;\n };\n\n return pie;\n}\n","export var xhtml = \"http://www.w3.org/1999/xhtml\";\n\nexport default {\n svg: \"http://www.w3.org/2000/svg\",\n xhtml: xhtml,\n xlink: \"http://www.w3.org/1999/xlink\",\n xml: \"http://www.w3.org/XML/1998/namespace\",\n xmlns: \"http://www.w3.org/2000/xmlns/\"\n};\n","import namespaces from \"./namespaces\";\n\nexport default function(name) {\n var prefix = name += \"\", i = prefix.indexOf(\":\");\n if (i >= 0 && (prefix = name.slice(0, i)) !== \"xmlns\") name = name.slice(i + 1);\n return namespaces.hasOwnProperty(prefix) ? {space: namespaces[prefix], local: name} : name;\n}\n","import namespace from \"./namespace\";\nimport {xhtml} from \"./namespaces\";\n\nfunction creatorInherit(name) {\n return function() {\n var document = this.ownerDocument,\n uri = this.namespaceURI;\n return uri === xhtml && document.documentElement.namespaceURI === xhtml\n ? document.createElement(name)\n : document.createElementNS(uri, name);\n };\n}\n\nfunction creatorFixed(fullname) {\n return function() {\n return this.ownerDocument.createElementNS(fullname.space, fullname.local);\n };\n}\n\nexport default function(name) {\n var fullname = namespace(name);\n return (fullname.local\n ? creatorFixed\n : creatorInherit)(fullname);\n}\n","function none() {}\n\nexport default function(selector) {\n return selector == null ? none : function() {\n return this.querySelector(selector);\n };\n}\n","function empty() {\n return [];\n}\n\nexport default function(selector) {\n return selector == null ? empty : function() {\n return this.querySelectorAll(selector);\n };\n}\n","var matcher = function(selector) {\n return function() {\n return this.matches(selector);\n };\n};\n\nif (typeof document !== \"undefined\") {\n var element = document.documentElement;\n if (!element.matches) {\n var vendorMatches = element.webkitMatchesSelector\n || element.msMatchesSelector\n || element.mozMatchesSelector\n || element.oMatchesSelector;\n matcher = function(selector) {\n return function() {\n return vendorMatches.call(this, selector);\n };\n };\n }\n}\n\nexport default matcher;\n","export default function(update) {\n return new Array(update.length);\n}\n","import sparse from \"./sparse\";\nimport {Selection} from \"./index\";\n\nexport default function() {\n return new Selection(this._enter || this._groups.map(sparse), this._parents);\n}\n\nexport function EnterNode(parent, datum) {\n this.ownerDocument = parent.ownerDocument;\n this.namespaceURI = parent.namespaceURI;\n this._next = null;\n this._parent = parent;\n this.__data__ = datum;\n}\n\nEnterNode.prototype = {\n constructor: EnterNode,\n appendChild: function(child) { return this._parent.insertBefore(child, this._next); },\n insertBefore: function(child, next) { return this._parent.insertBefore(child, next); },\n querySelector: function(selector) { return this._parent.querySelector(selector); },\n querySelectorAll: function(selector) { return this._parent.querySelectorAll(selector); }\n};\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","import {Selection} from \"./index\";\nimport {EnterNode} from \"./enter\";\nimport constant from \"../constant\";\n\nvar keyPrefix = \"$\"; // Protect against keys like “__proto__”.\n\nfunction bindIndex(parent, group, enter, update, exit, data) {\n var i = 0,\n node,\n groupLength = group.length,\n dataLength = data.length;\n\n // Put any non-null nodes that fit into update.\n // Put any null nodes into enter.\n // Put any remaining data into enter.\n for (; i < dataLength; ++i) {\n if (node = group[i]) {\n node.__data__ = data[i];\n update[i] = node;\n } else {\n enter[i] = new EnterNode(parent, data[i]);\n }\n }\n\n // Put any non-null nodes that don’t fit into exit.\n for (; i < groupLength; ++i) {\n if (node = group[i]) {\n exit[i] = node;\n }\n }\n}\n\nfunction bindKey(parent, group, enter, update, exit, data, key) {\n var i,\n node,\n nodeByKeyValue = {},\n groupLength = group.length,\n dataLength = data.length,\n keyValues = new Array(groupLength),\n keyValue;\n\n // Compute the key for each node.\n // If multiple nodes have the same key, the duplicates are added to exit.\n for (i = 0; i < groupLength; ++i) {\n if (node = group[i]) {\n keyValues[i] = keyValue = keyPrefix + key.call(node, node.__data__, i, group);\n if (keyValue in nodeByKeyValue) {\n exit[i] = node;\n } else {\n nodeByKeyValue[keyValue] = node;\n }\n }\n }\n\n // Compute the key for each datum.\n // If there a node associated with this key, join and add it to update.\n // If there is not (or the key is a duplicate), add it to enter.\n for (i = 0; i < dataLength; ++i) {\n keyValue = keyPrefix + key.call(parent, data[i], i, data);\n if (node = nodeByKeyValue[keyValue]) {\n update[i] = node;\n node.__data__ = data[i];\n nodeByKeyValue[keyValue] = null;\n } else {\n enter[i] = new EnterNode(parent, data[i]);\n }\n }\n\n // Add any remaining nodes that were not bound to data to exit.\n for (i = 0; i < groupLength; ++i) {\n if ((node = group[i]) && (nodeByKeyValue[keyValues[i]] === node)) {\n exit[i] = node;\n }\n }\n}\n\nexport default function(value, key) {\n if (!value) {\n data = new Array(this.size()), j = -1;\n this.each(function(d) { data[++j] = d; });\n return data;\n }\n\n var bind = key ? bindKey : bindIndex,\n parents = this._parents,\n groups = this._groups;\n\n if (typeof value !== \"function\") value = constant(value);\n\n for (var m = groups.length, update = new Array(m), enter = new Array(m), exit = new Array(m), j = 0; j < m; ++j) {\n var parent = parents[j],\n group = groups[j],\n groupLength = group.length,\n data = value.call(parent, parent && parent.__data__, j, parents),\n dataLength = data.length,\n enterGroup = enter[j] = new Array(dataLength),\n updateGroup = update[j] = new Array(dataLength),\n exitGroup = exit[j] = new Array(groupLength);\n\n bind(parent, group, enterGroup, updateGroup, exitGroup, data, key);\n\n // Now connect the enter nodes to their following update node, such that\n // appendChild can insert the materialized enter node before this node,\n // rather than at the end of the parent node.\n for (var i0 = 0, i1 = 0, previous, next; i0 < dataLength; ++i0) {\n if (previous = enterGroup[i0]) {\n if (i0 >= i1) i1 = i0 + 1;\n while (!(next = updateGroup[i1]) && ++i1 < dataLength);\n previous._next = next || null;\n }\n }\n }\n\n update = new Selection(update, parents);\n update._enter = enter;\n update._exit = exit;\n return update;\n}\n","import {Selection} from \"./index\";\n\nexport default function(compare) {\n if (!compare) compare = ascending;\n\n function compareNode(a, b) {\n return a && b ? compare(a.__data__, b.__data__) : !a - !b;\n }\n\n for (var groups = this._groups, m = groups.length, sortgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, sortgroup = sortgroups[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n sortgroup[i] = node;\n }\n }\n sortgroup.sort(compareNode);\n }\n\n return new Selection(sortgroups, this._parents).order();\n}\n\nfunction ascending(a, b) {\n return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","import namespace from \"../namespace\";\n\nfunction attrRemove(name) {\n return function() {\n this.removeAttribute(name);\n };\n}\n\nfunction attrRemoveNS(fullname) {\n return function() {\n this.removeAttributeNS(fullname.space, fullname.local);\n };\n}\n\nfunction attrConstant(name, value) {\n return function() {\n this.setAttribute(name, value);\n };\n}\n\nfunction attrConstantNS(fullname, value) {\n return function() {\n this.setAttributeNS(fullname.space, fullname.local, value);\n };\n}\n\nfunction attrFunction(name, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.removeAttribute(name);\n else this.setAttribute(name, v);\n };\n}\n\nfunction attrFunctionNS(fullname, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.removeAttributeNS(fullname.space, fullname.local);\n else this.setAttributeNS(fullname.space, fullname.local, v);\n };\n}\n\nexport default function(name, value) {\n var fullname = namespace(name);\n\n if (arguments.length < 2) {\n var node = this.node();\n return fullname.local\n ? node.getAttributeNS(fullname.space, fullname.local)\n : node.getAttribute(fullname);\n }\n\n return this.each((value == null\n ? (fullname.local ? attrRemoveNS : attrRemove) : (typeof value === \"function\"\n ? (fullname.local ? attrFunctionNS : attrFunction)\n : (fullname.local ? attrConstantNS : attrConstant)))(fullname, value));\n}\n","export default function(node) {\n return (node.ownerDocument && node.ownerDocument.defaultView) // node is a Node\n || (node.document && node) // node is a Window\n || node.defaultView; // node is a Document\n}\n","import defaultView from \"../window\";\n\nfunction styleRemove(name) {\n return function() {\n this.style.removeProperty(name);\n };\n}\n\nfunction styleConstant(name, value, priority) {\n return function() {\n this.style.setProperty(name, value, priority);\n };\n}\n\nfunction styleFunction(name, value, priority) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.style.removeProperty(name);\n else this.style.setProperty(name, v, priority);\n };\n}\n\nexport default function(name, value, priority) {\n return arguments.length > 1\n ? this.each((value == null\n ? styleRemove : typeof value === \"function\"\n ? styleFunction\n : styleConstant)(name, value, priority == null ? \"\" : priority))\n : styleValue(this.node(), name);\n}\n\nexport function styleValue(node, name) {\n return node.style.getPropertyValue(name)\n || defaultView(node).getComputedStyle(node, null).getPropertyValue(name);\n}\n","function classArray(string) {\n return string.trim().split(/^|\\s+/);\n}\n\nfunction classList(node) {\n return node.classList || new ClassList(node);\n}\n\nfunction ClassList(node) {\n this._node = node;\n this._names = classArray(node.getAttribute(\"class\") || \"\");\n}\n\nClassList.prototype = {\n add: function(name) {\n var i = this._names.indexOf(name);\n if (i < 0) {\n this._names.push(name);\n this._node.setAttribute(\"class\", this._names.join(\" \"));\n }\n },\n remove: function(name) {\n var i = this._names.indexOf(name);\n if (i >= 0) {\n this._names.splice(i, 1);\n this._node.setAttribute(\"class\", this._names.join(\" \"));\n }\n },\n contains: function(name) {\n return this._names.indexOf(name) >= 0;\n }\n};\n\nfunction classedAdd(node, names) {\n var list = classList(node), i = -1, n = names.length;\n while (++i < n) list.add(names[i]);\n}\n\nfunction classedRemove(node, names) {\n var list = classList(node), i = -1, n = names.length;\n while (++i < n) list.remove(names[i]);\n}\n\nfunction classedTrue(names) {\n return function() {\n classedAdd(this, names);\n };\n}\n\nfunction classedFalse(names) {\n return function() {\n classedRemove(this, names);\n };\n}\n\nfunction classedFunction(names, value) {\n return function() {\n (value.apply(this, arguments) ? classedAdd : classedRemove)(this, names);\n };\n}\n\nexport default function(name, value) {\n var names = classArray(name + \"\");\n\n if (arguments.length < 2) {\n var list = classList(this.node()), i = -1, n = names.length;\n while (++i < n) if (!list.contains(names[i])) return false;\n return true;\n }\n\n return this.each((typeof value === \"function\"\n ? classedFunction : value\n ? classedTrue\n : classedFalse)(names, value));\n}\n","function textRemove() {\n this.textContent = \"\";\n}\n\nfunction textConstant(value) {\n return function() {\n this.textContent = value;\n };\n}\n\nfunction textFunction(value) {\n return function() {\n var v = value.apply(this, arguments);\n this.textContent = v == null ? \"\" : v;\n };\n}\n\nexport default function(value) {\n return arguments.length\n ? this.each(value == null\n ? textRemove : (typeof value === \"function\"\n ? textFunction\n : textConstant)(value))\n : this.node().textContent;\n}\n","function htmlRemove() {\n this.innerHTML = \"\";\n}\n\nfunction htmlConstant(value) {\n return function() {\n this.innerHTML = value;\n };\n}\n\nfunction htmlFunction(value) {\n return function() {\n var v = value.apply(this, arguments);\n this.innerHTML = v == null ? \"\" : v;\n };\n}\n\nexport default function(value) {\n return arguments.length\n ? this.each(value == null\n ? htmlRemove : (typeof value === \"function\"\n ? htmlFunction\n : htmlConstant)(value))\n : this.node().innerHTML;\n}\n","function raise() {\n if (this.nextSibling) this.parentNode.appendChild(this);\n}\n\nexport default function() {\n return this.each(raise);\n}\n","function lower() {\n if (this.previousSibling) this.parentNode.insertBefore(this, this.parentNode.firstChild);\n}\n\nexport default function() {\n return this.each(lower);\n}\n","import creator from \"../creator\";\nimport selector from \"../selector\";\n\nfunction constantNull() {\n return null;\n}\n\nexport default function(name, before) {\n var create = typeof name === \"function\" ? name : creator(name),\n select = before == null ? constantNull : typeof before === \"function\" ? before : selector(before);\n return this.select(function() {\n return this.insertBefore(create.apply(this, arguments), select.apply(this, arguments) || null);\n });\n}\n","function remove() {\n var parent = this.parentNode;\n if (parent) parent.removeChild(this);\n}\n\nexport default function() {\n return this.each(remove);\n}\n","function selection_cloneShallow() {\n return this.parentNode.insertBefore(this.cloneNode(false), this.nextSibling);\n}\n\nfunction selection_cloneDeep() {\n return this.parentNode.insertBefore(this.cloneNode(true), this.nextSibling);\n}\n\nexport default function(deep) {\n return this.select(deep ? selection_cloneDeep : selection_cloneShallow);\n}\n","var filterEvents = {};\n\nexport var event = null;\n\nif (typeof document !== \"undefined\") {\n var element = document.documentElement;\n if (!(\"onmouseenter\" in element)) {\n filterEvents = {mouseenter: \"mouseover\", mouseleave: \"mouseout\"};\n }\n}\n\nfunction filterContextListener(listener, index, group) {\n listener = contextListener(listener, index, group);\n return function(event) {\n var related = event.relatedTarget;\n if (!related || (related !== this && !(related.compareDocumentPosition(this) & 8))) {\n listener.call(this, event);\n }\n };\n}\n\nfunction contextListener(listener, index, group) {\n return function(event1) {\n var event0 = event; // Events can be reentrant (e.g., focus).\n event = event1;\n try {\n listener.call(this, this.__data__, index, group);\n } finally {\n event = event0;\n }\n };\n}\n\nfunction parseTypenames(typenames) {\n return typenames.trim().split(/^|\\s+/).map(function(t) {\n var name = \"\", i = t.indexOf(\".\");\n if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n return {type: t, name: name};\n });\n}\n\nfunction onRemove(typename) {\n return function() {\n var on = this.__on;\n if (!on) return;\n for (var j = 0, i = -1, m = on.length, o; j < m; ++j) {\n if (o = on[j], (!typename.type || o.type === typename.type) && o.name === typename.name) {\n this.removeEventListener(o.type, o.listener, o.capture);\n } else {\n on[++i] = o;\n }\n }\n if (++i) on.length = i;\n else delete this.__on;\n };\n}\n\nfunction onAdd(typename, value, capture) {\n var wrap = filterEvents.hasOwnProperty(typename.type) ? filterContextListener : contextListener;\n return function(d, i, group) {\n var on = this.__on, o, listener = wrap(value, i, group);\n if (on) for (var j = 0, m = on.length; j < m; ++j) {\n if ((o = on[j]).type === typename.type && o.name === typename.name) {\n this.removeEventListener(o.type, o.listener, o.capture);\n this.addEventListener(o.type, o.listener = listener, o.capture = capture);\n o.value = value;\n return;\n }\n }\n this.addEventListener(typename.type, listener, capture);\n o = {type: typename.type, name: typename.name, value: value, listener: listener, capture: capture};\n if (!on) this.__on = [o];\n else on.push(o);\n };\n}\n\nexport default function(typename, value, capture) {\n var typenames = parseTypenames(typename + \"\"), i, n = typenames.length, t;\n\n if (arguments.length < 2) {\n var on = this.node().__on;\n if (on) for (var j = 0, m = on.length, o; j < m; ++j) {\n for (i = 0, o = on[j]; i < n; ++i) {\n if ((t = typenames[i]).type === o.type && t.name === o.name) {\n return o.value;\n }\n }\n }\n return;\n }\n\n on = value ? onAdd : onRemove;\n if (capture == null) capture = false;\n for (i = 0; i < n; ++i) this.each(on(typenames[i], value, capture));\n return this;\n}\n\nexport function customEvent(event1, listener, that, args) {\n var event0 = event;\n event1.sourceEvent = event;\n event = event1;\n try {\n return listener.apply(that, args);\n } finally {\n event = event0;\n }\n}\n","import defaultView from \"../window\";\n\nfunction dispatchEvent(node, type, params) {\n var window = defaultView(node),\n event = window.CustomEvent;\n\n if (typeof event === \"function\") {\n event = new event(type, params);\n } else {\n event = window.document.createEvent(\"Event\");\n if (params) event.initEvent(type, params.bubbles, params.cancelable), event.detail = params.detail;\n else event.initEvent(type, false, false);\n }\n\n node.dispatchEvent(event);\n}\n\nfunction dispatchConstant(type, params) {\n return function() {\n return dispatchEvent(this, type, params);\n };\n}\n\nfunction dispatchFunction(type, params) {\n return function() {\n return dispatchEvent(this, type, params.apply(this, arguments));\n };\n}\n\nexport default function(type, params) {\n return this.each((typeof params === \"function\"\n ? dispatchFunction\n : dispatchConstant)(type, params));\n}\n","import selection_select from \"./select\";\nimport selection_selectAll from \"./selectAll\";\nimport selection_filter from \"./filter\";\nimport selection_data from \"./data\";\nimport selection_enter from \"./enter\";\nimport selection_exit from \"./exit\";\nimport selection_merge from \"./merge\";\nimport selection_order from \"./order\";\nimport selection_sort from \"./sort\";\nimport selection_call from \"./call\";\nimport selection_nodes from \"./nodes\";\nimport selection_node from \"./node\";\nimport selection_size from \"./size\";\nimport selection_empty from \"./empty\";\nimport selection_each from \"./each\";\nimport selection_attr from \"./attr\";\nimport selection_style from \"./style\";\nimport selection_property from \"./property\";\nimport selection_classed from \"./classed\";\nimport selection_text from \"./text\";\nimport selection_html from \"./html\";\nimport selection_raise from \"./raise\";\nimport selection_lower from \"./lower\";\nimport selection_append from \"./append\";\nimport selection_insert from \"./insert\";\nimport selection_remove from \"./remove\";\nimport selection_clone from \"./clone\";\nimport selection_datum from \"./datum\";\nimport selection_on from \"./on\";\nimport selection_dispatch from \"./dispatch\";\n\nexport var root = [null];\n\nexport function Selection(groups, parents) {\n this._groups = groups;\n this._parents = parents;\n}\n\nfunction selection() {\n return new Selection([[document.documentElement]], root);\n}\n\nSelection.prototype = selection.prototype = {\n constructor: Selection,\n select: selection_select,\n selectAll: selection_selectAll,\n filter: selection_filter,\n data: selection_data,\n enter: selection_enter,\n exit: selection_exit,\n merge: selection_merge,\n order: selection_order,\n sort: selection_sort,\n call: selection_call,\n nodes: selection_nodes,\n node: selection_node,\n size: selection_size,\n empty: selection_empty,\n each: selection_each,\n attr: selection_attr,\n style: selection_style,\n property: selection_property,\n classed: selection_classed,\n text: selection_text,\n html: selection_html,\n raise: selection_raise,\n lower: selection_lower,\n append: selection_append,\n insert: selection_insert,\n remove: selection_remove,\n clone: selection_clone,\n datum: selection_datum,\n on: selection_on,\n dispatch: selection_dispatch\n};\n\nexport default selection;\n","import {Selection} from \"./index\";\nimport selector from \"../selector\";\n\nexport default function(select) {\n if (typeof select !== \"function\") select = selector(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {\n if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {\n if (\"__data__\" in node) subnode.__data__ = node.__data__;\n subgroup[i] = subnode;\n }\n }\n }\n\n return new Selection(subgroups, this._parents);\n}\n","import {Selection} from \"./index\";\nimport selectorAll from \"../selectorAll\";\n\nexport default function(select) {\n if (typeof select !== \"function\") select = selectorAll(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n subgroups.push(select.call(node, node.__data__, i, group));\n parents.push(node);\n }\n }\n }\n\n return new Selection(subgroups, parents);\n}\n","import {Selection} from \"./index\";\nimport matcher from \"../matcher\";\n\nexport default function(match) {\n if (typeof match !== \"function\") match = matcher(match);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {\n if ((node = group[i]) && match.call(node, node.__data__, i, group)) {\n subgroup.push(node);\n }\n }\n }\n\n return new Selection(subgroups, this._parents);\n}\n","import sparse from \"./sparse\";\nimport {Selection} from \"./index\";\n\nexport default function() {\n return new Selection(this._exit || this._groups.map(sparse), this._parents);\n}\n","import {Selection} from \"./index\";\n\nexport default function(selection) {\n\n for (var groups0 = this._groups, groups1 = selection._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {\n for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group0[i] || group1[i]) {\n merge[i] = node;\n }\n }\n }\n\n for (; j < m0; ++j) {\n merges[j] = groups0[j];\n }\n\n return new Selection(merges, this._parents);\n}\n","export default function() {\n\n for (var groups = this._groups, j = -1, m = groups.length; ++j < m;) {\n for (var group = groups[j], i = group.length - 1, next = group[i], node; --i >= 0;) {\n if (node = group[i]) {\n if (next && next !== node.nextSibling) next.parentNode.insertBefore(node, next);\n next = node;\n }\n }\n }\n\n return this;\n}\n","export default function() {\n var callback = arguments[0];\n arguments[0] = this;\n callback.apply(null, arguments);\n return this;\n}\n","export default function() {\n var nodes = new Array(this.size()), i = -1;\n this.each(function() { nodes[++i] = this; });\n return nodes;\n}\n","export default function() {\n\n for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n for (var group = groups[j], i = 0, n = group.length; i < n; ++i) {\n var node = group[i];\n if (node) return node;\n }\n }\n\n return null;\n}\n","export default function() {\n var size = 0;\n this.each(function() { ++size; });\n return size;\n}\n","export default function() {\n return !this.node();\n}\n","export default function(callback) {\n\n for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n for (var group = groups[j], i = 0, n = group.length, node; i < n; ++i) {\n if (node = group[i]) callback.call(node, node.__data__, i, group);\n }\n }\n\n return this;\n}\n","function propertyRemove(name) {\n return function() {\n delete this[name];\n };\n}\n\nfunction propertyConstant(name, value) {\n return function() {\n this[name] = value;\n };\n}\n\nfunction propertyFunction(name, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) delete this[name];\n else this[name] = v;\n };\n}\n\nexport default function(name, value) {\n return arguments.length > 1\n ? this.each((value == null\n ? propertyRemove : typeof value === \"function\"\n ? propertyFunction\n : propertyConstant)(name, value))\n : this.node()[name];\n}\n","import creator from \"../creator\";\n\nexport default function(name) {\n var create = typeof name === \"function\" ? name : creator(name);\n return this.select(function() {\n return this.appendChild(create.apply(this, arguments));\n });\n}\n","export default function(value) {\n return arguments.length\n ? this.property(\"__data__\", value)\n : this.node().__data__;\n}\n","import {Selection, root} from \"./selection/index\";\n\nexport default function(selector) {\n return typeof selector === \"string\"\n ? new Selection([[document.querySelector(selector)]], [document.documentElement])\n : new Selection([[selector]], root);\n}\n","var nextId = 0;\n\nexport default function local() {\n return new Local;\n}\n\nfunction Local() {\n this._ = \"@\" + (++nextId).toString(36);\n}\n\nLocal.prototype = local.prototype = {\n constructor: Local,\n get: function(node) {\n var id = this._;\n while (!(id in node)) if (!(node = node.parentNode)) return;\n return node[id];\n },\n set: function(node, value) {\n return node[this._] = value;\n },\n remove: function(node) {\n return this._ in node && delete node[this._];\n },\n toString: function() {\n return this._;\n }\n};\n","import {event} from \"./selection/on\";\n\nexport default function() {\n var current = event, source;\n while (source = current.sourceEvent) current = source;\n return current;\n}\n","export default function(node, event) {\n var svg = node.ownerSVGElement || node;\n\n if (svg.createSVGPoint) {\n var point = svg.createSVGPoint();\n point.x = event.clientX, point.y = event.clientY;\n point = point.matrixTransform(node.getScreenCTM().inverse());\n return [point.x, point.y];\n }\n\n var rect = node.getBoundingClientRect();\n return [event.clientX - rect.left - node.clientLeft, event.clientY - rect.top - node.clientTop];\n}\n","import sourceEvent from \"./sourceEvent\";\nimport point from \"./point\";\n\nexport default function(node) {\n var event = sourceEvent();\n if (event.changedTouches) event = event.changedTouches[0];\n return point(node, event);\n}\n","import sourceEvent from \"./sourceEvent\";\nimport point from \"./point\";\n\nexport default function(node, touches, identifier) {\n if (arguments.length < 3) identifier = touches, touches = sourceEvent().changedTouches;\n\n for (var i = 0, n = touches ? touches.length : 0, touch; i < n; ++i) {\n if ((touch = touches[i]).identifier === identifier) {\n return point(node, touch);\n }\n }\n\n return null;\n}\n","var noop = {value: function() {}};\n\nfunction dispatch() {\n for (var i = 0, n = arguments.length, _ = {}, t; i < n; ++i) {\n if (!(t = arguments[i] + \"\") || (t in _)) throw new Error(\"illegal type: \" + t);\n _[t] = [];\n }\n return new Dispatch(_);\n}\n\nfunction Dispatch(_) {\n this._ = _;\n}\n\nfunction parseTypenames(typenames, types) {\n return typenames.trim().split(/^|\\s+/).map(function(t) {\n var name = \"\", i = t.indexOf(\".\");\n if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n if (t && !types.hasOwnProperty(t)) throw new Error(\"unknown type: \" + t);\n return {type: t, name: name};\n });\n}\n\nDispatch.prototype = dispatch.prototype = {\n constructor: Dispatch,\n on: function(typename, callback) {\n var _ = this._,\n T = parseTypenames(typename + \"\", _),\n t,\n i = -1,\n n = T.length;\n\n // If no callback was specified, return the callback of the given type and name.\n if (arguments.length < 2) {\n while (++i < n) if ((t = (typename = T[i]).type) && (t = get(_[t], typename.name))) return t;\n return;\n }\n\n // If a type was specified, set the callback for the given type and name.\n // Otherwise, if a null callback was specified, remove callbacks of the given name.\n if (callback != null && typeof callback !== \"function\") throw new Error(\"invalid callback: \" + callback);\n while (++i < n) {\n if (t = (typename = T[i]).type) _[t] = set(_[t], typename.name, callback);\n else if (callback == null) for (t in _) _[t] = set(_[t], typename.name, null);\n }\n\n return this;\n },\n copy: function() {\n var copy = {}, _ = this._;\n for (var t in _) copy[t] = _[t].slice();\n return new Dispatch(copy);\n },\n call: function(type, that) {\n if ((n = arguments.length - 2) > 0) for (var args = new Array(n), i = 0, n, t; i < n; ++i) args[i] = arguments[i + 2];\n if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n for (t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n },\n apply: function(type, that, args) {\n if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n for (var t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n }\n};\n\nfunction get(type, name) {\n for (var i = 0, n = type.length, c; i < n; ++i) {\n if ((c = type[i]).name === name) {\n return c.value;\n }\n }\n}\n\nfunction set(type, name, callback) {\n for (var i = 0, n = type.length; i < n; ++i) {\n if (type[i].name === name) {\n type[i] = noop, type = type.slice(0, i).concat(type.slice(i + 1));\n break;\n }\n }\n if (callback != null) type.push({name: name, value: callback});\n return type;\n}\n\nexport default dispatch;\n","import {event} from \"d3-selection\";\n\nexport function nopropagation() {\n event.stopImmediatePropagation();\n}\n\nexport default function() {\n event.preventDefault();\n event.stopImmediatePropagation();\n}\n","import {select} from \"d3-selection\";\nimport noevent from \"./noevent\";\n\nexport default function(view) {\n var root = view.document.documentElement,\n selection = select(view).on(\"dragstart.drag\", noevent, true);\n if (\"onselectstart\" in root) {\n selection.on(\"selectstart.drag\", noevent, true);\n } else {\n root.__noselect = root.style.MozUserSelect;\n root.style.MozUserSelect = \"none\";\n }\n}\n\nexport function yesdrag(view, noclick) {\n var root = view.document.documentElement,\n selection = select(view).on(\"dragstart.drag\", null);\n if (noclick) {\n selection.on(\"click.drag\", noevent, true);\n setTimeout(function() { selection.on(\"click.drag\", null); }, 0);\n }\n if (\"onselectstart\" in root) {\n selection.on(\"selectstart.drag\", null);\n } else {\n root.style.MozUserSelect = root.__noselect;\n delete root.__noselect;\n }\n}\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","export default function DragEvent(target, type, subject, id, active, x, y, dx, dy, dispatch) {\n this.target = target;\n this.type = type;\n this.subject = subject;\n this.identifier = id;\n this.active = active;\n this.x = x;\n this.y = y;\n this.dx = dx;\n this.dy = dy;\n this._ = dispatch;\n}\n\nDragEvent.prototype.on = function() {\n var value = this._.on.apply(this._, arguments);\n return value === this._ ? this : value;\n};\n","import {dispatch} from \"d3-dispatch\";\nimport {event, customEvent, select, mouse, touch} from \"d3-selection\";\nimport nodrag, {yesdrag} from \"./nodrag\";\nimport noevent, {nopropagation} from \"./noevent\";\nimport constant from \"./constant\";\nimport DragEvent from \"./event\";\n\n// Ignore right-click, since that should open the context menu.\nfunction defaultFilter() {\n return !event.button;\n}\n\nfunction defaultContainer() {\n return this.parentNode;\n}\n\nfunction defaultSubject(d) {\n return d == null ? {x: event.x, y: event.y} : d;\n}\n\nfunction defaultTouchable() {\n return \"ontouchstart\" in this;\n}\n\nexport default function() {\n var filter = defaultFilter,\n container = defaultContainer,\n subject = defaultSubject,\n touchable = defaultTouchable,\n gestures = {},\n listeners = dispatch(\"start\", \"drag\", \"end\"),\n active = 0,\n mousedownx,\n mousedowny,\n mousemoving,\n touchending,\n clickDistance2 = 0;\n\n function drag(selection) {\n selection\n .on(\"mousedown.drag\", mousedowned)\n .filter(touchable)\n .on(\"touchstart.drag\", touchstarted)\n .on(\"touchmove.drag\", touchmoved)\n .on(\"touchend.drag touchcancel.drag\", touchended)\n .style(\"touch-action\", \"none\")\n .style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\");\n }\n\n function mousedowned() {\n if (touchending || !filter.apply(this, arguments)) return;\n var gesture = beforestart(\"mouse\", container.apply(this, arguments), mouse, this, arguments);\n if (!gesture) return;\n select(event.view).on(\"mousemove.drag\", mousemoved, true).on(\"mouseup.drag\", mouseupped, true);\n nodrag(event.view);\n nopropagation();\n mousemoving = false;\n mousedownx = event.clientX;\n mousedowny = event.clientY;\n gesture(\"start\");\n }\n\n function mousemoved() {\n noevent();\n if (!mousemoving) {\n var dx = event.clientX - mousedownx, dy = event.clientY - mousedowny;\n mousemoving = dx * dx + dy * dy > clickDistance2;\n }\n gestures.mouse(\"drag\");\n }\n\n function mouseupped() {\n select(event.view).on(\"mousemove.drag mouseup.drag\", null);\n yesdrag(event.view, mousemoving);\n noevent();\n gestures.mouse(\"end\");\n }\n\n function touchstarted() {\n if (!filter.apply(this, arguments)) return;\n var touches = event.changedTouches,\n c = container.apply(this, arguments),\n n = touches.length, i, gesture;\n\n for (i = 0; i < n; ++i) {\n if (gesture = beforestart(touches[i].identifier, c, touch, this, arguments)) {\n nopropagation();\n gesture(\"start\");\n }\n }\n }\n\n function touchmoved() {\n var touches = event.changedTouches,\n n = touches.length, i, gesture;\n\n for (i = 0; i < n; ++i) {\n if (gesture = gestures[touches[i].identifier]) {\n noevent();\n gesture(\"drag\");\n }\n }\n }\n\n function touchended() {\n var touches = event.changedTouches,\n n = touches.length, i, gesture;\n\n if (touchending) clearTimeout(touchending);\n touchending = setTimeout(function() { touchending = null; }, 500); // Ghost clicks are delayed!\n for (i = 0; i < n; ++i) {\n if (gesture = gestures[touches[i].identifier]) {\n nopropagation();\n gesture(\"end\");\n }\n }\n }\n\n function beforestart(id, container, point, that, args) {\n var p = point(container, id), s, dx, dy,\n sublisteners = listeners.copy();\n\n if (!customEvent(new DragEvent(drag, \"beforestart\", s, id, active, p[0], p[1], 0, 0, sublisteners), function() {\n if ((event.subject = s = subject.apply(that, args)) == null) return false;\n dx = s.x - p[0] || 0;\n dy = s.y - p[1] || 0;\n return true;\n })) return;\n\n return function gesture(type) {\n var p0 = p, n;\n switch (type) {\n case \"start\": gestures[id] = gesture, n = active++; break;\n case \"end\": delete gestures[id], --active; // nobreak\n case \"drag\": p = point(container, id), n = active; break;\n }\n customEvent(new DragEvent(drag, type, s, id, n, p[0] + dx, p[1] + dy, p[0] - p0[0], p[1] - p0[1], sublisteners), sublisteners.apply, sublisteners, [type, that, args]);\n };\n }\n\n drag.filter = function(_) {\n return arguments.length ? (filter = typeof _ === \"function\" ? _ : constant(!!_), drag) : filter;\n };\n\n drag.container = function(_) {\n return arguments.length ? (container = typeof _ === \"function\" ? _ : constant(_), drag) : container;\n };\n\n drag.subject = function(_) {\n return arguments.length ? (subject = typeof _ === \"function\" ? _ : constant(_), drag) : subject;\n };\n\n drag.touchable = function(_) {\n return arguments.length ? (touchable = typeof _ === \"function\" ? _ : constant(!!_), drag) : touchable;\n };\n\n drag.on = function() {\n var value = listeners.on.apply(listeners, arguments);\n return value === listeners ? drag : value;\n };\n\n drag.clickDistance = function(_) {\n return arguments.length ? (clickDistance2 = (_ = +_) * _, drag) : Math.sqrt(clickDistance2);\n };\n\n return drag;\n}\n","var frame = 0, // is an animation frame pending?\n timeout = 0, // is a timeout pending?\n interval = 0, // are any timers active?\n pokeDelay = 1000, // how frequently we check for clock skew\n taskHead,\n taskTail,\n clockLast = 0,\n clockNow = 0,\n clockSkew = 0,\n clock = typeof performance === \"object\" && performance.now ? performance : Date,\n setFrame = typeof window === \"object\" && window.requestAnimationFrame ? window.requestAnimationFrame.bind(window) : function(f) { setTimeout(f, 17); };\n\nexport function now() {\n return clockNow || (setFrame(clearNow), clockNow = clock.now() + clockSkew);\n}\n\nfunction clearNow() {\n clockNow = 0;\n}\n\nexport function Timer() {\n this._call =\n this._time =\n this._next = null;\n}\n\nTimer.prototype = timer.prototype = {\n constructor: Timer,\n restart: function(callback, delay, time) {\n if (typeof callback !== \"function\") throw new TypeError(\"callback is not a function\");\n time = (time == null ? now() : +time) + (delay == null ? 0 : +delay);\n if (!this._next && taskTail !== this) {\n if (taskTail) taskTail._next = this;\n else taskHead = this;\n taskTail = this;\n }\n this._call = callback;\n this._time = time;\n sleep();\n },\n stop: function() {\n if (this._call) {\n this._call = null;\n this._time = Infinity;\n sleep();\n }\n }\n};\n\nexport function timer(callback, delay, time) {\n var t = new Timer;\n t.restart(callback, delay, time);\n return t;\n}\n\nexport function timerFlush() {\n now(); // Get the current time, if not already set.\n ++frame; // Pretend we’ve set an alarm, if we haven’t already.\n var t = taskHead, e;\n while (t) {\n if ((e = clockNow - t._time) >= 0) t._call.call(null, e);\n t = t._next;\n }\n --frame;\n}\n\nfunction wake() {\n clockNow = (clockLast = clock.now()) + clockSkew;\n frame = timeout = 0;\n try {\n timerFlush();\n } finally {\n frame = 0;\n nap();\n clockNow = 0;\n }\n}\n\nfunction poke() {\n var now = clock.now(), delay = now - clockLast;\n if (delay > pokeDelay) clockSkew -= delay, clockLast = now;\n}\n\nfunction nap() {\n var t0, t1 = taskHead, t2, time = Infinity;\n while (t1) {\n if (t1._call) {\n if (time > t1._time) time = t1._time;\n t0 = t1, t1 = t1._next;\n } else {\n t2 = t1._next, t1._next = null;\n t1 = t0 ? t0._next = t2 : taskHead = t2;\n }\n }\n taskTail = t0;\n sleep(time);\n}\n\nfunction sleep(time) {\n if (frame) return; // Soonest alarm already set, or will be.\n if (timeout) timeout = clearTimeout(timeout);\n var delay = time - clockNow; // Strictly less than if we recomputed clockNow.\n if (delay > 24) {\n if (time < Infinity) timeout = setTimeout(wake, time - clock.now() - clockSkew);\n if (interval) interval = clearInterval(interval);\n } else {\n if (!interval) clockLast = clock.now(), interval = setInterval(poke, pokeDelay);\n frame = 1, setFrame(wake);\n }\n}\n","import {Timer} from \"./timer\";\n\nexport default function(callback, delay, time) {\n var t = new Timer;\n delay = delay == null ? 0 : +delay;\n t.restart(function(elapsed) {\n t.stop();\n callback(elapsed + delay);\n }, delay, time);\n return t;\n}\n","import {dispatch} from \"d3-dispatch\";\nimport {timer, timeout} from \"d3-timer\";\n\nvar emptyOn = dispatch(\"start\", \"end\", \"interrupt\");\nvar emptyTween = [];\n\nexport var CREATED = 0;\nexport var SCHEDULED = 1;\nexport var STARTING = 2;\nexport var STARTED = 3;\nexport var RUNNING = 4;\nexport var ENDING = 5;\nexport var ENDED = 6;\n\nexport default function(node, name, id, index, group, timing) {\n var schedules = node.__transition;\n if (!schedules) node.__transition = {};\n else if (id in schedules) return;\n create(node, id, {\n name: name,\n index: index, // For context during callback.\n group: group, // For context during callback.\n on: emptyOn,\n tween: emptyTween,\n time: timing.time,\n delay: timing.delay,\n duration: timing.duration,\n ease: timing.ease,\n timer: null,\n state: CREATED\n });\n}\n\nexport function init(node, id) {\n var schedule = get(node, id);\n if (schedule.state > CREATED) throw new Error(\"too late; already scheduled\");\n return schedule;\n}\n\nexport function set(node, id) {\n var schedule = get(node, id);\n if (schedule.state > STARTING) throw new Error(\"too late; already started\");\n return schedule;\n}\n\nexport function get(node, id) {\n var schedule = node.__transition;\n if (!schedule || !(schedule = schedule[id])) throw new Error(\"transition not found\");\n return schedule;\n}\n\nfunction create(node, id, self) {\n var schedules = node.__transition,\n tween;\n\n // Initialize the self timer when the transition is created.\n // Note the actual delay is not known until the first callback!\n schedules[id] = self;\n self.timer = timer(schedule, 0, self.time);\n\n function schedule(elapsed) {\n self.state = SCHEDULED;\n self.timer.restart(start, self.delay, self.time);\n\n // If the elapsed delay is less than our first sleep, start immediately.\n if (self.delay <= elapsed) start(elapsed - self.delay);\n }\n\n function start(elapsed) {\n var i, j, n, o;\n\n // If the state is not SCHEDULED, then we previously errored on start.\n if (self.state !== SCHEDULED) return stop();\n\n for (i in schedules) {\n o = schedules[i];\n if (o.name !== self.name) continue;\n\n // While this element already has a starting transition during this frame,\n // defer starting an interrupting transition until that transition has a\n // chance to tick (and possibly end); see d3/d3-transition#54!\n if (o.state === STARTED) return timeout(start);\n\n // Interrupt the active transition, if any.\n // Dispatch the interrupt event.\n if (o.state === RUNNING) {\n o.state = ENDED;\n o.timer.stop();\n o.on.call(\"interrupt\", node, node.__data__, o.index, o.group);\n delete schedules[i];\n }\n\n // Cancel any pre-empted transitions. No interrupt event is dispatched\n // because the cancelled transitions never started. Note that this also\n // removes this transition from the pending list!\n else if (+i < id) {\n o.state = ENDED;\n o.timer.stop();\n delete schedules[i];\n }\n }\n\n // Defer the first tick to end of the current frame; see d3/d3#1576.\n // Note the transition may be canceled after start and before the first tick!\n // Note this must be scheduled before the start event; see d3/d3-transition#16!\n // Assuming this is successful, subsequent callbacks go straight to tick.\n timeout(function() {\n if (self.state === STARTED) {\n self.state = RUNNING;\n self.timer.restart(tick, self.delay, self.time);\n tick(elapsed);\n }\n });\n\n // Dispatch the start event.\n // Note this must be done before the tween are initialized.\n self.state = STARTING;\n self.on.call(\"start\", node, node.__data__, self.index, self.group);\n if (self.state !== STARTING) return; // interrupted\n self.state = STARTED;\n\n // Initialize the tween, deleting null tween.\n tween = new Array(n = self.tween.length);\n for (i = 0, j = -1; i < n; ++i) {\n if (o = self.tween[i].value.call(node, node.__data__, self.index, self.group)) {\n tween[++j] = o;\n }\n }\n tween.length = j + 1;\n }\n\n function tick(elapsed) {\n var t = elapsed < self.duration ? self.ease.call(null, elapsed / self.duration) : (self.timer.restart(stop), self.state = ENDING, 1),\n i = -1,\n n = tween.length;\n\n while (++i < n) {\n tween[i].call(null, t);\n }\n\n // Dispatch the end event.\n if (self.state === ENDING) {\n self.on.call(\"end\", node, node.__data__, self.index, self.group);\n stop();\n }\n }\n\n function stop() {\n self.state = ENDED;\n self.timer.stop();\n delete schedules[id];\n for (var i in schedules) return; // eslint-disable-line no-unused-vars\n delete node.__transition;\n }\n}\n","import {get, set} from \"./schedule\";\n\nfunction tweenRemove(id, name) {\n var tween0, tween1;\n return function() {\n var schedule = set(this, id),\n tween = schedule.tween;\n\n // If this node shared tween with the previous node,\n // just assign the updated shared tween and we’re done!\n // Otherwise, copy-on-write.\n if (tween !== tween0) {\n tween1 = tween0 = tween;\n for (var i = 0, n = tween1.length; i < n; ++i) {\n if (tween1[i].name === name) {\n tween1 = tween1.slice();\n tween1.splice(i, 1);\n break;\n }\n }\n }\n\n schedule.tween = tween1;\n };\n}\n\nfunction tweenFunction(id, name, value) {\n var tween0, tween1;\n if (typeof value !== \"function\") throw new Error;\n return function() {\n var schedule = set(this, id),\n tween = schedule.tween;\n\n // If this node shared tween with the previous node,\n // just assign the updated shared tween and we’re done!\n // Otherwise, copy-on-write.\n if (tween !== tween0) {\n tween1 = (tween0 = tween).slice();\n for (var t = {name: name, value: value}, i = 0, n = tween1.length; i < n; ++i) {\n if (tween1[i].name === name) {\n tween1[i] = t;\n break;\n }\n }\n if (i === n) tween1.push(t);\n }\n\n schedule.tween = tween1;\n };\n}\n\nexport default function(name, value) {\n var id = this._id;\n\n name += \"\";\n\n if (arguments.length < 2) {\n var tween = get(this.node(), id).tween;\n for (var i = 0, n = tween.length, t; i < n; ++i) {\n if ((t = tween[i]).name === name) {\n return t.value;\n }\n }\n return null;\n }\n\n return this.each((value == null ? tweenRemove : tweenFunction)(id, name, value));\n}\n\nexport function tweenValue(transition, name, value) {\n var id = transition._id;\n\n transition.each(function() {\n var schedule = set(this, id);\n (schedule.value || (schedule.value = {}))[name] = value.apply(this, arguments);\n });\n\n return function(node) {\n return get(node, id).value[name];\n };\n}\n","import {color} from \"d3-color\";\nimport {interpolateNumber, interpolateRgb, interpolateString} from \"d3-interpolate\";\n\nexport default function(a, b) {\n var c;\n return (typeof b === \"number\" ? interpolateNumber\n : b instanceof color ? interpolateRgb\n : (c = color(b)) ? (b = c, interpolateRgb)\n : interpolateString)(a, b);\n}\n","function removeFunction(id) {\n return function() {\n var parent = this.parentNode;\n for (var i in this.__transition) if (+i !== id) return;\n if (parent) parent.removeChild(this);\n };\n}\n\nexport default function() {\n return this.on(\"end.remove\", removeFunction(this._id));\n}\n","import {selection} from \"d3-selection\";\n\nvar Selection = selection.prototype.constructor;\n\nexport default function() {\n return new Selection(this._groups, this._parents);\n}\n","import {tweenValue} from \"./tween\";\n\nfunction textConstant(value) {\n return function() {\n this.textContent = value;\n };\n}\n\nfunction textFunction(value) {\n return function() {\n var value1 = value(this);\n this.textContent = value1 == null ? \"\" : value1;\n };\n}\n\nexport default function(value) {\n return this.tween(\"text\", typeof value === \"function\"\n ? textFunction(tweenValue(this, \"text\", value))\n : textConstant(value == null ? \"\" : value + \"\"));\n}\n","import {selection} from \"d3-selection\";\nimport transition_attr from \"./attr\";\nimport transition_attrTween from \"./attrTween\";\nimport transition_delay from \"./delay\";\nimport transition_duration from \"./duration\";\nimport transition_ease from \"./ease\";\nimport transition_filter from \"./filter\";\nimport transition_merge from \"./merge\";\nimport transition_on from \"./on\";\nimport transition_remove from \"./remove\";\nimport transition_select from \"./select\";\nimport transition_selectAll from \"./selectAll\";\nimport transition_selection from \"./selection\";\nimport transition_style from \"./style\";\nimport transition_styleTween from \"./styleTween\";\nimport transition_text from \"./text\";\nimport transition_transition from \"./transition\";\nimport transition_tween from \"./tween\";\n\nvar id = 0;\n\nexport function Transition(groups, parents, name, id) {\n this._groups = groups;\n this._parents = parents;\n this._name = name;\n this._id = id;\n}\n\nexport default function transition(name) {\n return selection().transition(name);\n}\n\nexport function newId() {\n return ++id;\n}\n\nvar selection_prototype = selection.prototype;\n\nTransition.prototype = transition.prototype = {\n constructor: Transition,\n select: transition_select,\n selectAll: transition_selectAll,\n filter: transition_filter,\n merge: transition_merge,\n selection: transition_selection,\n transition: transition_transition,\n call: selection_prototype.call,\n nodes: selection_prototype.nodes,\n node: selection_prototype.node,\n size: selection_prototype.size,\n empty: selection_prototype.empty,\n each: selection_prototype.each,\n on: transition_on,\n attr: transition_attr,\n attrTween: transition_attrTween,\n style: transition_style,\n styleTween: transition_styleTween,\n text: transition_text,\n remove: transition_remove,\n tween: transition_tween,\n delay: transition_delay,\n duration: transition_duration,\n ease: transition_ease\n};\n","import {selector} from \"d3-selection\";\nimport {Transition} from \"./index\";\nimport schedule, {get} from \"./schedule\";\n\nexport default function(select) {\n var name = this._name,\n id = this._id;\n\n if (typeof select !== \"function\") select = selector(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {\n if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {\n if (\"__data__\" in node) subnode.__data__ = node.__data__;\n subgroup[i] = subnode;\n schedule(subgroup[i], name, id, i, subgroup, get(node, id));\n }\n }\n }\n\n return new Transition(subgroups, this._parents, name, id);\n}\n","import {selectorAll} from \"d3-selection\";\nimport {Transition} from \"./index\";\nimport schedule, {get} from \"./schedule\";\n\nexport default function(select) {\n var name = this._name,\n id = this._id;\n\n if (typeof select !== \"function\") select = selectorAll(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n for (var children = select.call(node, node.__data__, i, group), child, inherit = get(node, id), k = 0, l = children.length; k < l; ++k) {\n if (child = children[k]) {\n schedule(child, name, id, k, children, inherit);\n }\n }\n subgroups.push(children);\n parents.push(node);\n }\n }\n }\n\n return new Transition(subgroups, parents, name, id);\n}\n","import {matcher} from \"d3-selection\";\nimport {Transition} from \"./index\";\n\nexport default function(match) {\n if (typeof match !== \"function\") match = matcher(match);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {\n if ((node = group[i]) && match.call(node, node.__data__, i, group)) {\n subgroup.push(node);\n }\n }\n }\n\n return new Transition(subgroups, this._parents, this._name, this._id);\n}\n","import {Transition} from \"./index\";\n\nexport default function(transition) {\n if (transition._id !== this._id) throw new Error;\n\n for (var groups0 = this._groups, groups1 = transition._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {\n for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group0[i] || group1[i]) {\n merge[i] = node;\n }\n }\n }\n\n for (; j < m0; ++j) {\n merges[j] = groups0[j];\n }\n\n return new Transition(merges, this._parents, this._name, this._id);\n}\n","import {Transition, newId} from \"./index\";\nimport schedule, {get} from \"./schedule\";\n\nexport default function() {\n var name = this._name,\n id0 = this._id,\n id1 = newId();\n\n for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n var inherit = get(node, id0);\n schedule(node, name, id1, i, group, {\n time: inherit.time + inherit.delay + inherit.duration,\n delay: 0,\n duration: inherit.duration,\n ease: inherit.ease\n });\n }\n }\n }\n\n return new Transition(groups, this._parents, name, id1);\n}\n","import {get, set, init} from \"./schedule\";\n\nfunction start(name) {\n return (name + \"\").trim().split(/^|\\s+/).every(function(t) {\n var i = t.indexOf(\".\");\n if (i >= 0) t = t.slice(0, i);\n return !t || t === \"start\";\n });\n}\n\nfunction onFunction(id, name, listener) {\n var on0, on1, sit = start(name) ? init : set;\n return function() {\n var schedule = sit(this, id),\n on = schedule.on;\n\n // If this node shared a dispatch with the previous node,\n // just assign the updated shared dispatch and we’re done!\n // Otherwise, copy-on-write.\n if (on !== on0) (on1 = (on0 = on).copy()).on(name, listener);\n\n schedule.on = on1;\n };\n}\n\nexport default function(name, listener) {\n var id = this._id;\n\n return arguments.length < 2\n ? get(this.node(), id).on.on(name)\n : this.each(onFunction(id, name, listener));\n}\n","import {interpolateTransformSvg as interpolateTransform} from \"d3-interpolate\";\nimport {namespace} from \"d3-selection\";\nimport {tweenValue} from \"./tween\";\nimport interpolate from \"./interpolate\";\n\nfunction attrRemove(name) {\n return function() {\n this.removeAttribute(name);\n };\n}\n\nfunction attrRemoveNS(fullname) {\n return function() {\n this.removeAttributeNS(fullname.space, fullname.local);\n };\n}\n\nfunction attrConstant(name, interpolate, value1) {\n var value00,\n interpolate0;\n return function() {\n var value0 = this.getAttribute(name);\n return value0 === value1 ? null\n : value0 === value00 ? interpolate0\n : interpolate0 = interpolate(value00 = value0, value1);\n };\n}\n\nfunction attrConstantNS(fullname, interpolate, value1) {\n var value00,\n interpolate0;\n return function() {\n var value0 = this.getAttributeNS(fullname.space, fullname.local);\n return value0 === value1 ? null\n : value0 === value00 ? interpolate0\n : interpolate0 = interpolate(value00 = value0, value1);\n };\n}\n\nfunction attrFunction(name, interpolate, value) {\n var value00,\n value10,\n interpolate0;\n return function() {\n var value0, value1 = value(this);\n if (value1 == null) return void this.removeAttribute(name);\n value0 = this.getAttribute(name);\n return value0 === value1 ? null\n : value0 === value00 && value1 === value10 ? interpolate0\n : interpolate0 = interpolate(value00 = value0, value10 = value1);\n };\n}\n\nfunction attrFunctionNS(fullname, interpolate, value) {\n var value00,\n value10,\n interpolate0;\n return function() {\n var value0, value1 = value(this);\n if (value1 == null) return void this.removeAttributeNS(fullname.space, fullname.local);\n value0 = this.getAttributeNS(fullname.space, fullname.local);\n return value0 === value1 ? null\n : value0 === value00 && value1 === value10 ? interpolate0\n : interpolate0 = interpolate(value00 = value0, value10 = value1);\n };\n}\n\nexport default function(name, value) {\n var fullname = namespace(name), i = fullname === \"transform\" ? interpolateTransform : interpolate;\n return this.attrTween(name, typeof value === \"function\"\n ? (fullname.local ? attrFunctionNS : attrFunction)(fullname, i, tweenValue(this, \"attr.\" + name, value))\n : value == null ? (fullname.local ? attrRemoveNS : attrRemove)(fullname)\n : (fullname.local ? attrConstantNS : attrConstant)(fullname, i, value + \"\"));\n}\n","import {namespace} from \"d3-selection\";\n\nfunction attrTweenNS(fullname, value) {\n function tween() {\n var node = this, i = value.apply(node, arguments);\n return i && function(t) {\n node.setAttributeNS(fullname.space, fullname.local, i(t));\n };\n }\n tween._value = value;\n return tween;\n}\n\nfunction attrTween(name, value) {\n function tween() {\n var node = this, i = value.apply(node, arguments);\n return i && function(t) {\n node.setAttribute(name, i(t));\n };\n }\n tween._value = value;\n return tween;\n}\n\nexport default function(name, value) {\n var key = \"attr.\" + name;\n if (arguments.length < 2) return (key = this.tween(key)) && key._value;\n if (value == null) return this.tween(key, null);\n if (typeof value !== \"function\") throw new Error;\n var fullname = namespace(name);\n return this.tween(key, (fullname.local ? attrTweenNS : attrTween)(fullname, value));\n}\n","import {interpolateTransformCss as interpolateTransform} from \"d3-interpolate\";\nimport {style} from \"d3-selection\";\nimport {tweenValue} from \"./tween\";\nimport interpolate from \"./interpolate\";\n\nfunction styleRemove(name, interpolate) {\n var value00,\n value10,\n interpolate0;\n return function() {\n var value0 = style(this, name),\n value1 = (this.style.removeProperty(name), style(this, name));\n return value0 === value1 ? null\n : value0 === value00 && value1 === value10 ? interpolate0\n : interpolate0 = interpolate(value00 = value0, value10 = value1);\n };\n}\n\nfunction styleRemoveEnd(name) {\n return function() {\n this.style.removeProperty(name);\n };\n}\n\nfunction styleConstant(name, interpolate, value1) {\n var value00,\n interpolate0;\n return function() {\n var value0 = style(this, name);\n return value0 === value1 ? null\n : value0 === value00 ? interpolate0\n : interpolate0 = interpolate(value00 = value0, value1);\n };\n}\n\nfunction styleFunction(name, interpolate, value) {\n var value00,\n value10,\n interpolate0;\n return function() {\n var value0 = style(this, name),\n value1 = value(this);\n if (value1 == null) value1 = (this.style.removeProperty(name), style(this, name));\n return value0 === value1 ? null\n : value0 === value00 && value1 === value10 ? interpolate0\n : interpolate0 = interpolate(value00 = value0, value10 = value1);\n };\n}\n\nexport default function(name, value, priority) {\n var i = (name += \"\") === \"transform\" ? interpolateTransform : interpolate;\n return value == null ? this\n .styleTween(name, styleRemove(name, i))\n .on(\"end.style.\" + name, styleRemoveEnd(name))\n : this.styleTween(name, typeof value === \"function\"\n ? styleFunction(name, i, tweenValue(this, \"style.\" + name, value))\n : styleConstant(name, i, value + \"\"), priority);\n}\n","function styleTween(name, value, priority) {\n function tween() {\n var node = this, i = value.apply(node, arguments);\n return i && function(t) {\n node.style.setProperty(name, i(t), priority);\n };\n }\n tween._value = value;\n return tween;\n}\n\nexport default function(name, value, priority) {\n var key = \"style.\" + (name += \"\");\n if (arguments.length < 2) return (key = this.tween(key)) && key._value;\n if (value == null) return this.tween(key, null);\n if (typeof value !== \"function\") throw new Error;\n return this.tween(key, styleTween(name, value, priority == null ? \"\" : priority));\n}\n","import {get, init} from \"./schedule\";\n\nfunction delayFunction(id, value) {\n return function() {\n init(this, id).delay = +value.apply(this, arguments);\n };\n}\n\nfunction delayConstant(id, value) {\n return value = +value, function() {\n init(this, id).delay = value;\n };\n}\n\nexport default function(value) {\n var id = this._id;\n\n return arguments.length\n ? this.each((typeof value === \"function\"\n ? delayFunction\n : delayConstant)(id, value))\n : get(this.node(), id).delay;\n}\n","import {get, set} from \"./schedule\";\n\nfunction durationFunction(id, value) {\n return function() {\n set(this, id).duration = +value.apply(this, arguments);\n };\n}\n\nfunction durationConstant(id, value) {\n return value = +value, function() {\n set(this, id).duration = value;\n };\n}\n\nexport default function(value) {\n var id = this._id;\n\n return arguments.length\n ? this.each((typeof value === \"function\"\n ? durationFunction\n : durationConstant)(id, value))\n : get(this.node(), id).duration;\n}\n","import {get, set} from \"./schedule\";\n\nfunction easeConstant(id, value) {\n if (typeof value !== \"function\") throw new Error;\n return function() {\n set(this, id).ease = value;\n };\n}\n\nexport default function(value) {\n var id = this._id;\n\n return arguments.length\n ? this.each(easeConstant(id, value))\n : get(this.node(), id).ease;\n}\n","import {Transition, newId} from \"../transition/index\";\nimport schedule from \"../transition/schedule\";\nimport {easeCubicInOut} from \"d3-ease\";\nimport {now} from \"d3-timer\";\n\nvar defaultTiming = {\n time: null, // Set on use.\n delay: 0,\n duration: 250,\n ease: easeCubicInOut\n};\n\nfunction inherit(node, id) {\n var timing;\n while (!(timing = node.__transition) || !(timing = timing[id])) {\n if (!(node = node.parentNode)) {\n return defaultTiming.time = now(), defaultTiming;\n }\n }\n return timing;\n}\n\nexport default function(name) {\n var id,\n timing;\n\n if (name instanceof Transition) {\n id = name._id, name = name._name;\n } else {\n id = newId(), (timing = defaultTiming).time = now(), name = name == null ? null : name + \"\";\n }\n\n for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n schedule(node, name, id, i, group, timing || inherit(node, id));\n }\n }\n }\n\n return new Transition(groups, this._parents, name, id);\n}\n","import {selection} from \"d3-selection\";\nimport selection_interrupt from \"./interrupt\";\nimport selection_transition from \"./transition\";\n\nselection.prototype.interrupt = selection_interrupt;\nselection.prototype.transition = selection_transition;\n","import interrupt from \"../interrupt\";\n\nexport default function(name) {\n return this.each(function() {\n interrupt(this, name);\n });\n}\n","import {STARTING, ENDING, ENDED} from \"./transition/schedule\";\n\nexport default function(node, name) {\n var schedules = node.__transition,\n schedule,\n active,\n empty = true,\n i;\n\n if (!schedules) return;\n\n name = name == null ? null : name + \"\";\n\n for (i in schedules) {\n if ((schedule = schedules[i]).name !== name) { empty = false; continue; }\n active = schedule.state > STARTING && schedule.state < ENDING;\n schedule.state = ENDED;\n schedule.timer.stop();\n if (active) schedule.on.call(\"interrupt\", node, node.__data__, schedule.index, schedule.group);\n delete schedules[i];\n }\n\n if (empty) delete node.__transition;\n}\n","import {Transition} from \"./transition/index\";\nimport {SCHEDULED} from \"./transition/schedule\";\n\nvar root = [null];\n\nexport default function(node, name) {\n var schedules = node.__transition,\n schedule,\n i;\n\n if (schedules) {\n name = name == null ? null : name + \"\";\n for (i in schedules) {\n if ((schedule = schedules[i]).state > SCHEDULED && schedule.name === name) {\n return new Transition([[node]], root, name, +i);\n }\n }\n }\n\n return null;\n}\n","import { select, event as d3event, selection, clientPoint } from 'd3-selection';\nimport { drag as d3drag } from 'd3-drag';\nimport 'd3-transition';\nimport { mergeRecursive } from './common-utils';\n/**\n * This function takes a raw DOM element or\n * a string and returns a d3 selection of that element.\n *\n * @param {HTMLElement | string} element The element to wrap in d3 selection.\n * @return {Selection} Instance of d3 selection.\n */\nconst selectElement = element => select(element);\n\n/**\n * It creates a new d3 element on the parent element\n * @param {Selection} parent Element to which the element is to be appended\n * @param {Object} elemType Type of the new element\n * @param {Array} data Data for the new element\n * @param {Object} selector classname/id/tagname for the element\n * @return {HTMLElement} Newly Created Element\n */\nconst makeElement = (parent, elemType, data, selector, callbacks = {}, keyFn) => {\n if ((parent instanceof HTMLElement || parent instanceof SVGElement)) {\n parent = selectElement(parent);\n }\n\n const selectorVal = selector ? selector[0] : null;\n let selectorType = null;\n let actualSelector = null;\n let element = null;\n let enterSel = null;\n let mergeSel = null;\n let filter;\n if (selectorVal) {\n if (selectorVal === '#') {\n selectorType = 'id';\n actualSelector = selector;\n } else {\n selectorType = 'class';\n actualSelector = selector[0] === '.' ? selector : `.${selector}`;\n }\n } else {\n actualSelector = elemType;\n filter = true;\n }\n element = parent.selectAll(actualSelector);\n\n filter && (element = element.filter(function () {\n return this.parentNode === parent.node();\n }));\n element = element.data(data, keyFn);\n\n enterSel = element.enter()\n .append(elemType || 'div');\n callbacks.enter && enterSel.each(function (...params) {\n callbacks.enter(selectElement(this), ...params);\n });\n\n mergeSel = enterSel.merge(element);\n callbacks.update && mergeSel.each(function (...params) {\n callbacks.update(selectElement(this), ...params);\n });\n if (selectorType === 'class') {\n mergeSel.classed(selectorVal === '.' ? selector.substring(1, selector.length) : selector, true);\n } else if (selectorType === 'id') {\n mergeSel.attr('id', selector.substring(1, selector.length));\n }\n const exitSel = element.exit();\n\n if (callbacks.exit) {\n exitSel.each(function (...params) {\n callbacks.exit(selectElement(this), ...params);\n });\n } else {\n exitSel.remove();\n }\n return mergeSel;\n};\n\n/**\n * This function applies styles to an element\n * @param {Object} elem Element Selection\n * @param {Object} styleObj Style Object to be applied\n * @return {Element} Newly Created Element\n*/\nconst applyStyle = (elem, styleObj) => {\n Object.entries(styleObj).forEach((d) => {\n elem.style(d[0], d[1]);\n }, this);\n return elem;\n};\n\n/**\n * This function appends a dom element in another element.\n * @param {HTMLElement | SVGElement} element1 The element in which to append the second element\n * @param {HTMLElement | SVGElement} element2 The element which will be appended.\n */\nconst appendElement = (element1, element2) => {\n element1.appendChild(element2);\n};\n\n/**\n * Sets the attributes to the element.\n * @param {HTMLElement | SVGElement} element Element on which attributes will be applied\n * @param {Object} attrs Attributes which need to be applied\n */\nconst setElementAttrs = (element, attrs) => {\n for (const key in attrs) {\n if ({}.hasOwnProperty.call(attrs, key)) {\n element.attr(key, attrs[key]);\n }\n }\n};\n\n/**\n * Sets attributes in the svg or html element\n * @param {SVGElement | HTMLElement} element The element on which attrs will be applied\n * @param {Array.} attrs Array of attributes\n * @param {string} className className of elements to select.\n * @return {SVGElement | HTMLElement} SVGElement or html element.\n */\nconst setAttrs = (element, attrs, className) => {\n if (!(element instanceof selection)) {\n element = selectElement(element);\n }\n className !== undefined ? element.selectAll(`.${className}`).each(function () {\n setElementAttrs(select(this), attrs);\n }) : setElementAttrs(element, attrs);\n return element;\n};\n\n/**\n * Adds a css class to elements which passes the filter function.If filter function is not given,\n * then all elements will be applied the class.\n * @param {HTMLElement | SVGElement} element element\n * @param {string} className css class\n * @param {string} selector css selector\n * @param {Function} filterFn filter method.\n */\nconst addClass = (element, className, selector, filterFn) => {\n select(element).selectAll(selector).each(function (data) {\n const elem = select(this);\n filterFn ? filterFn(data) && elem.classed(className, true) :\n elem.classed(className, true);\n });\n};\n\n/**\n * Removes the css class from elements which passes the filter function.If filter function is not given,\n * then all elements will be applied the class.\n * @param {HTMLElement | SVGElement} element element\n * @param {string} className css class\n * @param {string} selector css selector\n * @param {Function} filterFn filter method.\n */\nconst removeClass = (element, className, selector, filterFn) => {\n select(element).selectAll(selector).each(function (data) {\n const elem = select(this);\n filterFn ? filterFn(data) && elem.classed(className, false) :\n elem.classed(className, false);\n });\n};\n\n/**\n * Sets styles in the svg or html element\n * @param {SVGElement | HTMLElement} element The element on which styles will be applied\n * @param {Array.} styles Array of style attributes\n * @return {SVGElement | HTMLElement} SVGElement or html element.\n */\nconst setStyles = (element, styles) => {\n if (!(element instanceof selection)) {\n element = selectElement(element);\n }\n for (const key in styles) {\n if ({}.hasOwnProperty.call(styles, key)) {\n element.style(key, styles[key]);\n }\n }\n return element;\n};\n\n/**\n * Creates svg or html elements by binding data to the selection.Removes extra elements\n * on exit.\n * @param {Object} params Parameter object\n * @param {SVGElement | HTMLElement} params.container Container element where all elements will be appended\n * @param {string} params.selector Selector by which elements will be selected from dom\n * @param {string} params.append Append tag\n * @param {Function} params.each Function which will be executed for each data point and element.\n */\nconst createElements = (params) => {\n const container = select(params.container);\n let data;\n let sel;\n\n data = params.data;\n if (typeof data === 'number') {\n data = Array(data).fill().map((d, i) => i);\n }\n sel = container.selectAll(params.selector).data(data);\n\n sel = container.selectAll(params.selector).filter(function () {\n return this.parentNode === container.node();\n }).data(params.data);\n\n const selectionMerge = sel.enter().append(params.append).merge(sel).each(function (d, i) {\n params.each(d, select(this), i);\n });\n\n selectionMerge.attr('class', params.className || '');\n sel.exit().remove();\n};\n\n/**\n * Clips an element with given measurement. Basically it is used to hide overflowing portions\n * of any element.\n * @param {SVGElement} container svg element which needs to be clipped.\n * @param {Object} measurement Dimensions of the clipped rectangle.\n * @param {string} id Unique id of the clip element\n */\nconst clipElement = (container, measurement, id) => {\n const clipPathElement = makeElement(select(container), 'clipPath', [1], `#${id}`);\n const clipPathRect = makeElement(clipPathElement, 'rect', [1]);\n clipPathRect.attr('x', measurement.x)\n .attr('y', measurement.x)\n .attr('width', measurement.width)\n .attr('height', measurement.height);\n clipPathElement.attr('clip-path', `url(#${id})`);\n};\n\n/**\n * Returns the element of the corresponding classname.\n * @param {HTMLElement | SVGElement} node html or svg node element.\n * @param {string} className css class to be applied.\n * @return {HTMLElement | SVGElement} html or svg element.\n */\nconst getElementsByClassName = (node, className) => select(node).selectAll(className).nodes();\n\n/**\n * Gets the mouse position relative to an svg type of element\n * @param {SVGElement} element Any svg element like rect, circle, etc.\n * @param {Event} event Event object.\n * @return {Object} x and y position relative to the container element passed.\n */\nconst getMousePos = (element, event) => {\n const boundingClientRect = element.getBoundingClientRect();\n return {\n x: event.x - boundingClientRect.x,\n y: event.y - boundingClientRect.y\n };\n};\n\nconst getClientPoint = (...params) => {\n const pos = clientPoint(...params);\n return {\n x: pos[0],\n y: pos[1]\n };\n};\n\n/** This function appends a dom element in another element.\n * @param {Object} tag The tag name of the element to append\n * @param {Object} mount Mount point fo the element\n * @return {Object} selection of the appended element\n */\nconst createElement = (tag, mount) => select(mount).append(tag).node();\n\n/**\n * Gets the d3 event function\n * @return {Object} d3 event\n */\nconst getEvent = () => d3event;\n\n/**\n * Gets the d3 drag function\n * @return {Object} d3 drag\n */\nconst getD3Drag = () => d3drag;\n\nconst getSmartComputedStyle = (group, css) => {\n let textEl;\n const testText = 'W';\n const mandatoryStyle = {\n 'fill-opacity': 0\n };\n const className = typeof css === 'string' ? css : (css instanceof Array ? css.join(' ') : undefined);\n\n if (group.node() instanceof HTMLElement) {\n textEl = group.append('div').html(testText);\n } else {\n textEl = group.append('text').text(testText);\n }\n\n if (className) {\n textEl.attr('class', className);\n } else if (typeof css === 'object') {\n delete css['fill-opacity'];\n mergeRecursive(mandatoryStyle, css);\n }\n\n textEl.style(mandatoryStyle);\n\n const computedStyle = window.getComputedStyle(textEl.node());\n const styleForSmartLabel = {\n fontSize: computedStyle.fontSize,\n fontFamily: computedStyle.fontFamily,\n fontWeight: computedStyle.fontWeight,\n fontStyle: computedStyle.fontStyle\n };\n\n textEl.remove();\n\n return styleForSmartLabel;\n};\n\nconst hasTouch = () => 'ontouchstart' in document.documentElement;\n\nexport {\n hasTouch,\n selectElement,\n makeElement,\n applyStyle,\n addClass,\n removeClass,\n appendElement,\n setAttrs,\n setStyles,\n createElement,\n createElements,\n clipElement,\n getElementsByClassName,\n getMousePos,\n getEvent,\n getD3Drag,\n getSmartComputedStyle,\n getClientPoint\n};\n","/**\n * This class represents a selection applied on a data array.\n *\n * @class Selection\n */\nclass Selection {\n /**\n * Creates an instance of Selection.\n * @param {Array} data Array of DataObjects.\n * @memberof Selection\n */\n constructor () {\n this._data = [];\n // // map of id to data\n this._idMap = {};\n\n this._mode = '';\n // data.forEach((item, idx) => {\n // const index = item.id || idx;\n // this._idMap[index] = item;\n // });\n // // array to store data in enter phase\n this._enterdata = [];\n // // array to store data in exit phase\n this._exitdata = [];\n }\n /**\n * Gets the object bound to a class\n *\n * @return {Object} current data set bound to the class\n * @memberof Selection\n */\n getObjects () {\n return Object.keys(this._idMap).map(e => this._idMap[e]);\n }\n\n /**\n * This method is used to supply seed data to a selection.\n *\n * @param {Array} newData Seed data to create the enter selection.\n * @param {Functon | undefined } idGetter This function is used to uniqely identify a data entry.\n * @return {Selection} Modified selection.\n * @memberof Selection\n */\n data (newData, idGetter) {\n if (idGetter) {\n this._data = [];\n this._idGetter = idGetter;\n const tempMap = {};\n\n newData.forEach((...params) => {\n const index = idGetter(...params);\n tempMap[index] = params[0];\n });\n // check if any data items have been removed\n const purgedIds = [];\n\n Object.keys(this._idMap).forEach((id) => {\n if (!tempMap[id]) {\n purgedIds.push(id);\n }\n });\n\n Object.keys(tempMap).forEach((id) => {\n if (!this._idMap[id]) {\n this._enterdata.push(tempMap[id]);\n } else {\n this._idMap[id] = tempMap[id];\n this._data.push(tempMap[id]);\n }\n });\n // move the purged items to exit selection\n purgedIds.forEach((id) => {\n const purged = this._idMap[id];\n this._exitdata.push(purged);\n // this._data = this._data.slice(id, 1);\n delete this._idMap[id];\n });\n // this._data = this._data.slice(temp, this._data.length);\n\n return this;\n }\n // no id getter supplied so use indices\n if (newData.length > this._data.length) {\n const startIdx = this._data.length;\n for (let i = startIdx; i < newData.length; i += 1) {\n this._enterdata.push(newData[i]);\n }\n } else {\n // push to exit selection\n const temp = newData.length;\n for (let i = temp; i < this._data.length; i += 1) {\n const purged = this._data[i];\n delete this._idMap[purged.id];\n this._exitdata.push(purged);\n }\n this._data = this._data.slice(temp, this._data.length);\n }\n return this;\n }\n\n /**\n * Applies the supplied callback to each data element\n * and returns a new selection.\n *\n * @param {Function} callback Callback to execute on each item.\n * @return {Selection} New selection with data created using callback.\n * @memberof EnterSelection\n */\n append (callback) {\n this[`_${this._mode}data`].forEach((...params) => {\n const data = params[0];\n const id = this._idGetter ? this._idGetter(...params) : (data.id || params[1]);\n this._idMap[id] = callback(...params);\n });\n this._mode = '';\n return this;\n }\n\n /**\n * This method returns an enter selection that\n * allows or update operations.\n *\n * @return {EnterSelection} Instance of enter selection.\n * @memberof Selection\n */\n enter () {\n this._mode = 'enter';\n return this;\n // return new EnterSelection(this._enterdata, this._idMap, this._idGetter);\n }\n\n /**\n * This method is used to set key value pairs\n * on data objects.\n *\n * @param {string} key Name of property.\n * @param {any} value Value of property.\n * @return {Selection} Modified selection.\n * @memberof Selection\n */\n attr (key, value) {\n this._data.forEach(item => item.attr(key, value));\n return this;\n }\n\n /**\n * This method merges the data of one selection with another.\n *\n * @param {Selection} selection Instance of selection.\n * @return {Selection} Modified selection.\n * @memberof Selection\n */\n merge (selection) {\n selection._data.forEach((...params) => {\n const id = this._idGetter ? this._idGetter(...params) : (params[0].id || params[1]);\n this._idMap[id] = params[0];\n this._data.push(params[0]);\n });\n // reset enter selection\n this._enterdata = [];\n return this;\n }\n\n /**\n * Returns a selection with exit data.\n *\n * @return {Selection} Instance of selection.\n * @memberof Selection\n */\n exit () {\n this._mode = 'exit';\n // const exitdata = this._exitdata;\n // const exitSelection = new Selection(exitdata);\n // this._exitdata = [];\n return this;\n }\n\n each (fn) {\n Object.keys(this._idMap).forEach((e) => {\n fn(this._idMap[e]);\n });\n return this;\n }\n\n map (fn) {\n Object.keys(this._idMap).forEach((...params) => {\n this._idMap[params[0]] = fn(this._idMap[params[0]], ...params);\n });\n return this;\n }\n\n /**\n * Executes the cleanup operation associated with data objets.\n *\n * @memberof Selection\n */\n remove () {\n // do cleanup on DDO's\n const data = this[`_${this._mode}data`];\n\n data.forEach(item => item.remove());\n if (this._mode === '') {\n this.each(e => e.remove());\n }\n this[`_${this._mode}data`] = [];\n this._mode = '';\n }\n}\n\nexport default Selection;\n","import { getUniqueId } from '../index';\n/**\n * Represents the base class that all objects that form\n * the data for a selection must inherit from.\n *\n * @class DataObject\n */\nclass DataObject {\n/**\n * Creates an instance of DataObject.\n * @memberof DataObject\n */\n constructor () {\n this._id = getUniqueId();\n }\n /**\n * Returns the id.\n *\n * @readonly\n * @memberof DataObject\n */\n get id () {\n return this._id;\n }\n\n /**\n * Sets the value corresponding to supplied key.\n *\n * @param {string} key The property name.\n * @param {any} value Value associated with prop.\n * @memberof DataObject\n */\n attr (key, value) {\n this[key] = value;\n }\n\n /**\n * Clean up code to be executed by each object.\n *\n * @override\n * @memberof DataObject\n */\n remove () {\n // cleanup\n }\n}\n\nexport default DataObject;\n","const events = [\n 'initialized',\n 'beforeupdate',\n 'updated',\n 'beforedraw',\n 'drawn',\n 'beforeremove',\n 'removed'\n];\n\nconst compositions = [\n 'canvas',\n 'unit',\n 'layer',\n 'axis',\n 'facet-headers',\n 'legend',\n 'caption'\n];\n\nconst EVENT_LIST = [];\n\ncompositions.forEach((composition) => {\n events.forEach((event) => {\n EVENT_LIST.push(`${composition}.${event}`);\n });\n});\n\nexport default EVENT_LIST;\n","import EVENT_LIST from './event-list';\n\n/**\n * At first call it accepts one function\n * calling it second time accepts notification object.\n * notification object then called with first accepted function\n *\n * @param {Function} resolveFn a promise's resolve function\n * @return {Function} a function to accept notification object\n */\nconst resolver = resolveFn => notification => resolveFn(notification);\n\n/**\n * Checks if the property string is present in the source object\n *\n * @param {Object} source source object whom you want to check the property\n * @param {string} property key name that need to be checked\n * @return {boolean} returns true if the property found in the source object\n */\nconst hasOwn = (source, property) => Object.prototype.hasOwnProperty.call(source, property);\n\n/**\n * LifeCycleManager which goes as a dependendecy to a muze\n * it accepts notification from the entire library throughout\n * the exeecution life\n *\n * @export\n * @class LifeCycleManager\n */\nexport default class LifeCycleManager {\n\n /**\n * Creates an instance of LifeCycleManager.\n * @memberof LifeCycleManager\n */\n constructor () {\n this._eventList = EVENT_LIST;\n this._promises = new Map();\n this._notifiers = {};\n this._lifeCycles = {};\n this._unreleasedLifeCycles = {};\n this._boot();\n }\n\n /**\n * Fills all the notifiers with resolver callback\n *\n * @memberof LifeCycleManager\n */\n _boot () {\n this._notifiers = this._eventList.reduce((acc, name) => {\n acc[name] = resolver;\n return acc;\n }, {});\n this._preparePromises();\n }\n\n /**\n * Public method which gives the promise corresponding\n * to the event name\n *\n * @param {string} eventName name of the event like `canvas.drawn`\n * @return {promise} promise that is passed to the user\n * @memberof LifeCycleManager\n */\n retrieve (eventName) {\n return this._promises.get(eventName);\n }\n\n /**\n * Creates a promise that will be passed to user's callback\n *\n * @param {string} eventName name of the event like `canvas.drawn`\n * @return {promise} a pending promise waiting for resolve to be called\n * @memberof LifeCycleManager\n */\n _makeNotifierPromise (eventName) {\n return new Promise((resolve) => {\n this._notifiers[eventName] = this._notifiers[eventName](resolve);\n });\n }\n\n /**\n * Prepares the promise map with pending promises\n * all the promises are in a pending state where their's\n * resolve function waiting to be called with notification object\n * @memberof LifeCycleManager\n */\n _preparePromises () {\n this._eventList.forEach((eventName) => {\n this._promises.set(eventName, this._makeNotifierPromise(eventName));\n });\n }\n\n /**\n * Resolves the promise with notification object\n *\n * @param {string} eventName name of the event in the system\n * @param {Object} notification notification object\n * @param {string} notification.formalName name of the sender creating the notification\n * @param {Object} notification.client instance or array of instances sending the notification\n * @param {string} notification.action the stage name when the event happened like `beforedraw`\n *\n * @memberof LifeCycleManager\n */\n _resolvePromise (eventName, notification) {\n this._notifiers[eventName](notification);\n }\n\n /**\n * Public method which is being called by different\n * subcompoents of the system at different execution atages\n * @param {Object} notification notification object\n * @param {string} notification.formalName name of the sender creating the notification\n * @param {Object} notification.client instance or array of instances sending the notification\n * @param {string} notification.action the stage name when the event happened like `beforedraw`\n * @memberof LifeCycleManager\n */\n notify (notification) {\n // get the composition name from notification\n // or from static formalName() method\n const composition = notification.formalName || notification.client.constructor.formalName();\n notification.formalName = composition;\n this._releasePromisesFromCache();\n this._notify(composition, notification);\n }\n\n /**\n * Notify user the with promsie in a callback\n * if callback not found then cache it\n *\n * @param {string} composition\n * @param {Object} notification notification object\n * @param {string} notification.formalName name of the sender creating the notification\n * @param {Object} notification.client instance or array of instances sending the notification\n * @param {string} notification.action the stage name when the event happened like `beforedraw`\n * @memberof LifeCycleManager\n */\n _notify (composition, notification) {\n const stage = notification.action;\n const eventName = `${composition}.${stage}`;\n\n // resolves promise with the notification object\n this._resolvePromise(eventName, notification);\n\n // get the promise from the promise map\n const promise = this.retrieve(eventName);\n\n if (this._lifeCycles[composition]) {\n if (this._lifeCycles[composition][stage]) {\n // if user given call back exists, then call with promise\n this._callLifeCycleCallback(composition, stage, promise);\n } else {\n // otherwise cache the promise\n this._cachePromise(composition, stage, promise);\n }\n } else {\n this._cachePromise(composition, stage, promise);\n }\n }\n\n /**\n * Calls the user's callback with callback\n *\n * @param {string} composition name of the compositon like `canvas`\n * @param {string} stage the stage name when the event happened like `beforedraw`\n * @param {promise} promise promise that is passed to the user\n * @memberof LifeCycleManager\n */\n _callLifeCycleCallback (composition, stage, promise) {\n const eventName = `${composition}.${stage}`;\n this._lifeCycles[composition][stage](promise);\n this._resetTargetPromise(eventName);\n }\n\n /**\n * Try to clear the cached promsies once we have\n * macthed callbacks from the user\n *\n * @memberof LifeCycleManager\n */\n _releasePromisesFromCache () {\n const compositions = Object.keys(this._unreleasedLifeCycles);\n compositions.forEach((composition) => {\n const stages = Object.keys(this._unreleasedLifeCycles[composition]);\n stages.forEach((stage) => {\n if (this._lifeCycles[composition]) {\n if (this._lifeCycles[composition][stage]) {\n // take the promise from unreleased lifeCycles\n const promise = this._unreleasedLifeCycles[composition][stage];\n // call the user given callback with that promise\n this._callLifeCycleCallback(composition, stage, promise);\n // delete promise from unreleased lifeCycles\n delete this._unreleasedLifeCycles[composition][stage];\n }\n }\n });\n });\n }\n\n /**\n * Cache the promise in the map. This cache\n * then get consumed if we get user callbacks\n * @param {string} composition name of the compositon like `canvas`\n * @param {string} stage the stage name when the event happened like `beforedraw`\n * @param {promise} promise promise that is passed to the user\n * @memberof LifeCycleManager\n */\n _cachePromise (composition, stage, promise) {\n if (!hasOwn(this._unreleasedLifeCycles, composition)) {\n this._unreleasedLifeCycles[composition] = {};\n }\n\n if (!hasOwn(this._unreleasedLifeCycles[composition], stage)) {\n this._unreleasedLifeCycles[composition][stage] = {};\n }\n this._unreleasedLifeCycles[composition][stage] = promise;\n }\n\n /**\n * It register's the callbacks gievn the user\n *\n * @param {Object} [lifeCycles={}] a object with list of callbacks\n * @memberof LifeCycleManager\n */\n register (lifeCycles = {}) {\n this._lifeCycles = lifeCycles;\n // as we get all the callbacks, try to call them\n // from unreleased promise map\n this._releasePromisesFromCache();\n }\n\n /**\n * Reset the promise into pending state\n *\n * @param {string} eventName name of the event happening\n * @memberof LifeCycleManager\n */\n _resetTargetPromise (eventName) {\n setTimeout(() => {\n this._notifiers[eventName] = resolver;\n this._promises.set(eventName, this._makeNotifierPromise(eventName));\n }, 0);\n }\n}\n","import LifeCycleManager from './lifecycle-manager';\n\nexport default LifeCycleManager;\n","export const DRAG = 'drag';\nexport const HOVER = 'hover';\nexport const SELECTIONDRAG = 'selectiondrag';\nexport const CLICK = 'click';\nexport const LONGTOUCH = 'longtouch';\nexport const TOUCHDRAG = 'touchdrag';\nexport const ALL_ACTIONS = '*';\n","const SELECTION_NEW_ENTRY = 1;\nconst SELECTION_NEW_EXIT = -1;\nconst SELECTION_NULL = 0;\nconst SELECTION_OLD_ENTRY = 2;\nconst SELECTION_OLD_EXIT = -2;\n\nexport {\n SELECTION_NEW_ENTRY,\n SELECTION_NEW_EXIT,\n SELECTION_NULL,\n SELECTION_OLD_ENTRY,\n SELECTION_OLD_EXIT\n};\n","import {\n SELECTION_NEW_ENTRY, SELECTION_NEW_EXIT, SELECTION_NULL, SELECTION_OLD_ENTRY, SELECTION_OLD_EXIT\n} from '../enums/selection';\n/* eslint-disable guard-for-in */\n\n/**\n * This component is used to keep track of the row tuples of the data which gets added and removed.\n * @class SelectionSet\n */\nclass SelectionSet {\n /**\n * Creates an instance of selection set\n * @param {Array.} completeSet Set of unique ids.\n */\n constructor (completeSet, _volatile) {\n this.completeSet = completeSet;\n this._set = completeSet.reduce((obj, key) => {\n obj[key] = SELECTION_NULL;\n return obj;\n }, {});\n this._volatile = _volatile;\n this._completeSetCount = completeSet.length;\n this._lockedSelection = {};\n this._resetted = true;\n }\n\n /**\n * Adds a set of ids to the selection set.\n * @param {Array.} ids Array of unique ids\n * @return {SelectionSet} Instance of selection set.\n */\n add (ids) {\n this._resetted = false;\n\n const set = this._set;\n // from exitset to entryset\n ids.forEach((i) => {\n set[i] = SELECTION_NEW_ENTRY;\n });\n\n for (const key in set) {\n if (set[key] !== SELECTION_NEW_ENTRY && set[key] !== SELECTION_OLD_ENTRY) {\n set[key] = set[key] < 0 ? SELECTION_OLD_EXIT : SELECTION_NEW_EXIT;\n }\n }\n return this;\n }\n\n /**\n * Adds a set of ids to the selection set.\n * @param {Array.} ids Array of unique ids\n * @return {SelectionSet} Instance of selection set.\n */\n update (ids) {\n const set = this._set;\n // from exitset to entryset\n ids.forEach((i) => {\n set[i] = SELECTION_OLD_ENTRY;\n });\n\n return this;\n }\n\n /**\n * Adds a set of ids to the selection set.\n * @param {Array.} ids Array of unique ids\n * @return {SelectionSet} Instance of selection set.\n */\n updateEntry () {\n const set = this._set;\n\n // from exitset to entryset\n for (const key in set) {\n set[key] = set[key] === SELECTION_NEW_ENTRY ? SELECTION_OLD_ENTRY : set[key];\n }\n return this;\n }\n\n /**\n * Adds a set of ids to the selection set.\n * @param {Array.} ids Array of unique ids\n * @return {SelectionSet} Instance of selection set.\n */\n updateExit () {\n const set = this._set;\n // from exitset to entryset\n for (const key in set) {\n set[key] = set[key] === SELECTION_NEW_EXIT ? SELECTION_OLD_EXIT : set[key];\n }\n return this;\n }\n\n /**\n * Removes the ids from the selection set.\n * @param {Array.} ids Array of unique ids\n * @return {SelectionSet} Instance of selection set\n */\n remove (ids) {\n this._resetted = false;\n\n const set = this._set;\n ids.forEach((i) => {\n set[i] = SELECTION_NEW_EXIT;\n });\n\n for (const key in set) {\n if (set[key] !== SELECTION_NEW_EXIT && set[key] !== SELECTION_OLD_EXIT) {\n set[key] = set[key] === 0 ? SELECTION_NEW_ENTRY : SELECTION_OLD_ENTRY;\n }\n }\n\n return this;\n }\n\n getSets () {\n const set = this._set;\n const retObj = {\n entrySet: [[], []],\n exitSet: [[], []],\n completeSet: []\n };\n\n for (const key in set) {\n if (set[key] > 0) {\n set[key] === SELECTION_OLD_ENTRY && retObj.entrySet[0].push(key);\n set[key] === SELECTION_NEW_ENTRY && retObj.entrySet[1].push(key);\n } else if (set[key] < 0) {\n set[key] === SELECTION_OLD_EXIT && retObj.exitSet[0].push(key);\n set[key] === SELECTION_NEW_EXIT && retObj.exitSet[1].push(key);\n }\n retObj.completeSet.push(key);\n }\n\n ['entrySet', 'exitSet'].forEach((type) => {\n retObj[type] = retObj[type].map(e => e.map(Number));\n });\n retObj.completeSet = retObj.completeSet.map(Number);\n\n return retObj;\n }\n\n /**\n * Resets the selection set to initial state. It sets the value of every unique id value to\n * null in the selection set.\n * @return {SelectionSet} Instance of selection set.\n */\n reset (ids) {\n const set = this._set;\n if (ids) {\n ids.forEach((i) => {\n set[i] = SELECTION_NULL;\n });\n } else {\n const lockedSel = this._lockedSelection;\n for (const key in set) {\n if (!(key in lockedSel)) {\n set[key] = SELECTION_NULL;\n }\n }\n }\n this._resetted = true;\n return this;\n }\n\n /**\n * Gets the set of ids which are added in the selection set.\n * @return {Array.} Array of unique ids\n */\n getEntrySet () {\n const set = this._set;\n const addSet = [];\n\n for (const key in set) {\n set[key] === SELECTION_NEW_ENTRY && addSet.push(key);\n }\n\n return addSet;\n }\n\n /**\n * Returns a set of unique ids which are already present in entry set\n * @param {Array} addSet Array of unique ids which are added\n *\n * @return {Array} Array of unique ids which are already in old entry set or new entry set\n */\n getExistingEntrySet (addSet) {\n const set = this._set;\n return addSet.filter(d => set[d] === SELECTION_NEW_ENTRY || set[d] === SELECTION_OLD_ENTRY);\n }\n\n getExistingExitSet (removeSet) {\n const set = this._set;\n return removeSet.filter(d => set[d] === SELECTION_NEW_EXIT || set[d] === SELECTION_OLD_EXIT);\n }\n\n /**\n * Gets the set of ids which are added in the selection set.\n * @return {Array.} Array of unique ids\n */\n getOldEntry () {\n const set = this._set;\n const updateSet = [];\n\n for (const key in set) {\n set[key] === SELECTION_OLD_ENTRY && updateSet.push(key);\n }\n return updateSet;\n }\n\n /**\n * Gets the set of ids which are added in the selection set.\n * @return {Array.} Array of unique ids\n */\n getOldExit () {\n const set = this._set;\n const updateSet = [];\n\n for (const key in set) {\n set[key] === SELECTION_OLD_EXIT && updateSet.push(key);\n }\n\n return updateSet;\n }\n\n /**\n * Gets the set of ids which are in the remove set.\n * @return {Array.} Array of unique ids\n */\n getExitSet () {\n const set = this._set;\n const removeSet = [];\n\n for (const key in set) {\n set[key] === SELECTION_NEW_EXIT && removeSet.push(key);\n }\n return removeSet;\n }\n\n getCompleteSet () {\n const set = this._set;\n const completeSet = [];\n\n for (const key in set) {\n completeSet.push(key);\n }\n\n return completeSet;\n }\n\n getCompleteSetCount () {\n return this._completeSetCount;\n }\n\n resetted () {\n return this._resetted;\n }\n\n /**\n * Swaps the add set and remove set in the selection set.\n * @return {SelectionSet} Instance of selection set.\n */\n toggle () {\n const set = this._set;\n\n for (const key in set) {\n if (set[key] === SELECTION_NEW_ENTRY) {\n set[key] = SELECTION_NEW_EXIT;\n } else if (set[key] === SELECTION_NEW_EXIT) {\n set[key] = SELECTION_NEW_ENTRY;\n } else if (set[key] === SELECTION_OLD_ENTRY) {\n set[key] = SELECTION_OLD_EXIT;\n } else {\n set[key] = SELECTION_OLD_ENTRY;\n }\n }\n\n return this;\n }\n}\n\nexport default SelectionSet;\n","import { clone } from 'muze-utils';\nimport * as SELECTION from '../enums/selection';\n\nexport const initializeSideEffects = (context, sideEffects) => {\n const sideEffectsMap = context._sideEffects;\n\n sideEffects = sideEffects instanceof Array ? sideEffects : Object.values(sideEffects);\n sideEffects.forEach((SideEffect) => {\n const sideEffectInstance = sideEffectsMap[SideEffect.formalName()];\n sideEffectsMap[SideEffect.formalName()] = sideEffectInstance || new SideEffect(context);\n });\n return sideEffectsMap;\n};\n\nexport const initializeBehaviouralActions = (context, actions) => {\n const dispatchableBehaviours = {};\n\n actions = actions instanceof Array ? actions : Object.values(actions);\n actions.forEach((Action) => {\n dispatchableBehaviours[Action.formalName()] = new Action(context);\n });\n return dispatchableBehaviours;\n};\n\nexport const initializePhysicalActions = (context, actions) => {\n const physicalActions = {};\n\n for (const name in actions) {\n if (!({}).hasOwnProperty.call(name, actions)) {\n physicalActions[name] = actions[name](context);\n }\n }\n return physicalActions;\n};\n\nexport const changeSideEffectAvailability = (context, fn, toEnable) => {\n const sideEffects = context.sideEffects();\n for (const key in sideEffects) {\n if ({}.hasOwnProperty.call(sideEffects, key)) {\n let change = true;\n if (fn && fn(key) === false) {\n change = false;\n }\n if (change) {\n toEnable ? sideEffects[key].enable() : sideEffects[key].disable();\n }\n }\n }\n};\n\nexport const getMergedSet = set => [...new Set([...set[0], ...set[1]])];\n\nexport const getSourceFields = (propagationInf, criteria = {}) => {\n const sourceIdentifiers = propagationInf.sourceIdentifiers;\n let sourceFields;\n if (sourceIdentifiers) {\n sourceFields = sourceIdentifiers.getSchema().map(d => d.name);\n } else if (criteria instanceof Array) {\n sourceFields = criteria[0];\n } else {\n sourceFields = Object.keys(criteria || {});\n }\n return sourceFields;\n};\n\nconst conditionsMap = {\n newEntry: [SELECTION.SELECTION_NEW_ENTRY],\n oldEntry: [SELECTION.SELECTION_OLD_ENTRY],\n mergedEnter: [SELECTION.SELECTION_NEW_ENTRY, SELECTION.SELECTION_OLD_ENTRY],\n newExit: [SELECTION.SELECTION_NEW_EXIT],\n oldExit: [SELECTION.SELECTION_OLD_EXIT],\n mergedExit: [SELECTION.SELECTION_NEW_EXIT, SELECTION.SELECTION_OLD_EXIT],\n complete: []\n};\n\nexport const getModelFromSet = (type, model, set) => {\n if (model) {\n return model.select((fields, i) =>\n (conditionsMap[type].some(condition => set[i] === condition)), {\n saveChild: false\n });\n }\n return null;\n};\n\nexport const getSetInfo = (type, set, config) => {\n let model = null;\n const filteredDataModel = config.filteredDataModel;\n const selectionSet = config.selectionSet;\n if (!config.propagationData) {\n if (selectionSet.resetted()) {\n model = null;\n } else {\n model = getModelFromSet(type, config.dataModel, config.selectionSet._set);\n }\n } else if (filteredDataModel) {\n model = type === 'mergedEnter' ? filteredDataModel[0] : filteredDataModel[1];\n }\n return {\n uids: set,\n length: set.length,\n model\n };\n};\n\nexport const getSideEffects = (behaviour, behaviourEffectMap) => {\n const sideEffects = [];\n for (const key in behaviourEffectMap) {\n const behaviours = key.split(',');\n const found = behaviours.some(d => d === behaviour);\n if (found) {\n sideEffects.push({\n effects: behaviourEffectMap[key],\n behaviours\n });\n }\n }\n return sideEffects;\n};\n\nexport const unionSets = (context, behaviours) => {\n let combinedSet = {};\n const models = {\n mergedEnter: null,\n mergedExit: null\n };\n behaviours.forEach((behaviour) => {\n const entryExitSet = context._entryExitSet[behaviour];\n if (entryExitSet) {\n combinedSet = Object.assign(combinedSet, clone(entryExitSet));\n ['mergedEnter', 'mergedExit'].forEach((type) => {\n const model = entryExitSet[type].model;\n let existingModel = models[type];\n if (!existingModel) {\n existingModel = models[type] = model;\n } else {\n existingModel = models[type] = model.union(existingModel);\n }\n combinedSet[type].model = existingModel;\n });\n }\n });\n return combinedSet;\n};\n","import {\n mergeRecursive,\n hasTouch,\n filterPropagationModel,\n FieldType,\n selectElement,\n isSimpleObject\n} from 'muze-utils';\nimport { ALL_ACTIONS } from './enums/actions';\nimport SelectionSet from './selection-set';\nimport {\n initializeBehaviouralActions,\n initializeSideEffects,\n changeSideEffectAvailability,\n initializePhysicalActions,\n unionSets,\n getSideEffects\n} from './helper';\n\n/**\n * Relient firebolt is responsible for dispatching behaviours. It has only behaviours which can be\n * dispatched without any physical action being triggered.\n */\nexport default class Firebolt {\n constructor (context, actions, sideEffects, behaviourEffectMap) {\n this.context = context;\n this._sideEffectDefinitions = {};\n this._sideEffects = {};\n this._propagationInf = {};\n this._actions = {\n behavioural: {},\n physical: {}\n };\n this._selectionSet = {};\n this._volatileSelectionSet = {};\n this._propagationFields = {};\n this._sourceSideEffects = {\n selectionBox: () => false\n };\n this._propagationBehaviourMap = {};\n this._sourceBehaviours = {};\n this._actionBehaviourMap = {};\n this._config = {};\n this._behaviourEffectMap = {};\n this._entryExitSet = {};\n this._actionHistory = {};\n this._queuedSideEffects = {};\n this._mappedActions = {};\n\n this.mapSideEffects(behaviourEffectMap);\n this.registerBehaviouralActions(actions.behavioural);\n this.registerSideEffects(sideEffects);\n this.registerPhysicalBehaviouralMap(actions.physicalBehaviouralMap);\n this.registerPhysicalActions(actions.physical);\n }\n\n config (...config) {\n if (config.length) {\n const conf = this._config = mergeRecursive(this._config, config[0]);\n const sideEffects = this.sideEffects();\n for (const key in sideEffects) {\n if ({}.hasOwnProperty.call(sideEffects, key)) {\n const sideEffectConf = conf[key];\n sideEffectConf && sideEffects[key].config(sideEffectConf);\n }\n }\n return this;\n }\n return this._config;\n }\n\n mapSideEffects (behEffectMap) {\n const behaviourEffectMap = this._behaviourEffectMap;\n for (const key in behEffectMap) {\n if ({}.hasOwnProperty.call(behEffectMap, key)) {\n const sideEffects = behEffectMap[key] || [];\n let preventDefaultActions = false;\n let effectNames;\n if (isSimpleObject(sideEffects)) {\n effectNames = sideEffects.effects;\n preventDefaultActions = sideEffects.preventDefaultActions;\n } else {\n effectNames = sideEffects;\n }\n !behaviourEffectMap[key] && (behaviourEffectMap[key] = []);\n this._behaviourEffectMap[key] = [...new Set(preventDefaultActions ? effectNames :\n [...behaviourEffectMap[key], ...effectNames])];\n }\n }\n return this;\n }\n\n registerBehaviouralActions (actions) {\n const behaviours = initializeBehaviouralActions(this, actions);\n this.prepareSelectionSets(behaviours);\n Object.assign(this._actions.behavioural, behaviours);\n return this;\n }\n\n prepareSelectionSets () {\n return this;\n }\n\n registerSideEffects (sideEffects) {\n for (const key in sideEffects) {\n this._sideEffectDefinitions[sideEffects[key].formalName()] = sideEffects[key];\n }\n return this;\n }\n\n applySideEffects (sideEffects, selectionSet, payload) {\n const sideEffectStore = this.sideEffects();\n const actionHistory = this._actionHistory;\n const queuedSideEffects = this._queuedSideEffects;\n sideEffects.forEach((sideEffect) => {\n let options;\n let name;\n const effects = sideEffect.effects;\n const behaviours = sideEffect.behaviours;\n const combinedSet = unionSets(this, behaviours, selectionSet);\n effects.forEach((effect) => {\n if (typeof effect === 'object') {\n name = effect.name;\n options = effect.options;\n } else {\n name = effect;\n }\n\n const sideEffectInstance = sideEffectStore[name];\n if (sideEffectInstance.isEnabled()) {\n if (!sideEffectInstance.constructor.mutates() &&\n Object.values(actionHistory).some(d => d.isMutableAction)) {\n queuedSideEffects[`${name}-${behaviours.join()}`] = {\n name,\n params: [combinedSet, payload, options]\n };\n } else {\n this.dispatchSideEffect(name, combinedSet, payload, options);\n }\n }\n });\n });\n return this;\n }\n\n dispatchSideEffect (name, selectionSet, payload, options = {}) {\n const sideEffectStore = this.sideEffects();\n const sideEffect = sideEffectStore[name];\n let disable = false;\n if (options.filter && options.filter(sideEffect)) {\n disable = true;\n }\n !disable && sideEffectStore[name].apply(selectionSet, payload, options);\n }\n\n registerPropagationBehaviourMap (map) {\n this._propagationBehaviourMap = Object.assign(this._propagationBehaviourMap, map || {});\n return this;\n }\n\n dispatchBehaviour (behaviour, payload, propagationInfo = {}) {\n const propagate = propagationInfo.propagate !== undefined ? propagationInfo.propagate : true;\n const behaviouralActions = this._actions.behavioural;\n const action = behaviouralActions[behaviour];\n const behaviourEffectMap = this._behaviourEffectMap;\n const sideEffects = getSideEffects(behaviour, behaviourEffectMap);\n this._propagationInf = propagationInfo;\n\n if (action) {\n const selectionSet = action.dispatch(payload);\n const propagationSelectionSet = this.getPropagationSelectionSet(selectionSet);\n this._entryExitSet[behaviour] = propagationSelectionSet;\n const shouldApplySideEffects = this.shouldApplySideEffects(propagate);\n\n if (propagate) {\n this.propagate(behaviour, payload, selectionSet.find(d => d.sourceSelectionSet), sideEffects);\n }\n if (shouldApplySideEffects) {\n const applicableSideEffects = this.getApplicableSideEffects(sideEffects, payload, propagationInfo);\n this.applySideEffects(applicableSideEffects, propagationSelectionSet, payload);\n }\n }\n\n return this;\n }\n\n getPropagationSelectionSet (selectionSet) {\n return selectionSet.find(d => !d.sourceSelectionSet);\n }\n\n shouldApplySideEffects () {\n return true;\n }\n\n changeBehaviourStateOnPropagation (behaviour, value) {\n if (value instanceof Function) {\n this._sourceBehaviours[behaviour] = value;\n } else {\n this._sourceBehaviours[behaviour] = () => value;\n }\n return this;\n }\n\n changeSideEffectStateOnPropagation (sideEffect, value) {\n if (value instanceof Function) {\n this._sourceSideEffects[sideEffect] = value;\n } else {\n this._sourceSideEffects[sideEffect] = () => value;\n }\n }\n\n propagate () {\n return this;\n }\n\n sideEffects (...sideEffects) {\n if (sideEffects.length) {\n this._sideEffects = sideEffects[0];\n return this;\n }\n return this._sideEffects;\n }\n\n enableSideEffects (fn) {\n changeSideEffectAvailability(this, fn, true);\n return this;\n }\n\n disableSideEffects (fn) {\n changeSideEffectAvailability(this, fn, false);\n return this;\n }\n\n dissociateBehaviour (behaviour, physicalAction) {\n const actionBehaviourMap = this._actionBehaviourMap;\n for (const key in actionBehaviourMap) {\n if (key === physicalAction) {\n const behaviourMap = actionBehaviourMap[key];\n behaviourMap.behaviours = behaviourMap.behaviours.filter(d => d !== behaviour);\n }\n }\n\n return this;\n }\n\n dissociateSideEffect (sideEffect, behaviour) {\n const behaviourEffectMap = this._behaviourEffectMap;\n behaviourEffectMap[behaviour] = behaviourEffectMap[behaviour].filter(d => (d.name || d) !== sideEffect);\n return this;\n }\n\n getApplicableSideEffects (sideEffects) {\n return sideEffects;\n }\n\n attachPropagationListener (dataModel) {\n dataModel.unsubscribe('propagation');\n dataModel.on('propagation', this.onDataModelPropagation());\n return this;\n }\n\n onDataModelPropagation () {\n return (propValue) => {\n const payload = propValue.payload;\n const action = payload.action;\n\n this.dispatchBehaviour(action, payload, {\n propagate: false\n });\n };\n }\n\n createSelectionSet (uniqueIds, behaviouralActions) {\n const behaviours = behaviouralActions || this._actions.behavioural;\n const selectionSet = this._selectionSet;\n const volatileSelectionSet = this._volatileSelectionSet;\n\n for (const key in behaviours) {\n if ({}.hasOwnProperty.call(behaviours, key)) {\n selectionSet[key] = new SelectionSet(uniqueIds);\n volatileSelectionSet[key] = new SelectionSet(uniqueIds, true);\n }\n }\n this._volatileSelectionSet = volatileSelectionSet;\n this.selectionSet(selectionSet);\n return this;\n }\n\n selectionSet (...selectionSet) {\n if (selectionSet.length) {\n this._selectionSet = selectionSet[0];\n return this;\n }\n return this._selectionSet;\n }\n\n initializeSideEffects () {\n const sideEffectDefinitions = this._sideEffectDefinitions;\n this.sideEffects(initializeSideEffects(this, sideEffectDefinitions));\n return this;\n }\n\n registerPhysicalActions (actions) {\n const initedActions = initializePhysicalActions(this, actions);\n Object.assign(this._actions.physical, initedActions);\n return this;\n }\n\n propagateWith (action, fields, append = false) {\n const behaviouralActions = this._actions.behavioural;\n if (fields.length) {\n if (action === ALL_ACTIONS) {\n for (const key in behaviouralActions) {\n this._propagationFields[key] = {\n fields,\n append\n };\n }\n } else {\n this._propagationFields[action] = {\n fields,\n append\n };\n }\n return this;\n }\n return this._propagationFields;\n }\n\n /**\n * Map actions and behaviours\n * @return {Firebolt} Firebolt instance\n */\n mapActionsAndBehaviour () {\n const initedPhysicalActions = this._actions.physical;\n const map = this._actionBehaviourMap;\n const mappedActions = this._mappedActions;\n\n for (const action in map) {\n if (!({}).hasOwnProperty.call(action, map)) {\n let target;\n const mapObj = map[action];\n target = mapObj.target;\n const touch = mapObj.touch;\n if (!target) {\n target = this.context.getDefaultTargetContainer();\n }\n const bind = hasTouch() ? touch === true || touch === undefined : !touch;\n const keyName = `${action}-${mapObj.behaviours.join()}`;\n bind && !mappedActions[keyName] && this.bindActionWithBehaviour(initedPhysicalActions[action],\n target, mapObj.behaviours);\n mappedActions[keyName] = true;\n }\n }\n return this;\n }\n\n registerPhysicalBehaviouralMap (map) {\n Object.assign(this._actionBehaviourMap, map);\n return this;\n }\n\n /**\n * Binds a target element with an action.\n *\n * @param {Function} action Action method\n * @param {string} target Class name of element\n * @param {Array} behaviourList Array of behaviours\n * @return {FireBolt} Instance of firebolt\n */\n bindActionWithBehaviour (action, targets, behaviourList) {\n if (typeof (targets) === 'string') {\n targets = [targets];\n }\n targets.forEach((target) => {\n const mount = this.context.mount();\n const nodes = target.node instanceof Function ? target : selectElement(mount).selectAll(target);\n if (behaviourList.length && !nodes.empty()) {\n if (nodes instanceof Array) {\n nodes.forEach((node) => {\n action(selectElement(node), behaviourList);\n });\n } else {\n action(nodes, behaviourList);\n }\n }\n });\n return this;\n }\n\n getPropagationInf () {\n return this._propagationInf;\n }\n\n getAddSetFromCriteria (criteria, propagationInf = {}) {\n const context = this.context;\n const filteredDataModel = propagationInf.data ? propagationInf.data :\n context.getDataModelFromIdentifiers(criteria, 'all');\n const xFields = context.fields().x || [];\n const yFields = context.fields().y || [];\n const xMeasures = xFields.every(field => field.type() === FieldType.MEASURE);\n const yMeasures = yFields.every(field => field.type() === FieldType.MEASURE);\n return {\n model: filteredDataModel,\n uids: criteria === null ? null : (propagationInf.data ? filterPropagationModel(this.getFullData(),\n propagationInf.data[0], xMeasures && yMeasures).getData().uids : filteredDataModel[0].getData().uids)\n };\n }\n\n getSelectionSets (action) {\n const sourceId = this.context.id();\n const propagationInf = this._propagationInf || {};\n const propagationSource = propagationInf.sourceId;\n let applicableSelectionSets = [];\n if (propagationSource !== sourceId) {\n applicableSelectionSets = [this._volatileSelectionSet[action]];\n }\n\n if (propagationSource) {\n applicableSelectionSets.push(this.selectionSet()[action]);\n }\n return applicableSelectionSets;\n }\n\n getFullData () {\n return this.context.data();\n }\n\n resetted () {\n return this._resetted;\n }\n\n getEntryExitSet (behaviour) {\n return this._entryExitSet[behaviour];\n }\n}\n","import { getSetInfo, getMergedSet, getSourceFields } from '../../helper';\n\nexport default class GenericBehaviour {\n constructor (firebolt) {\n this.firebolt = firebolt;\n this._enabled = true;\n }\n\n dispatch (payload) {\n const criteria = payload.criteria;\n const firebolt = this.firebolt;\n const formalName = this.constructor.formalName();\n const selectionSets = firebolt.getSelectionSets(formalName);\n const {\n model: filteredDataModel,\n uids\n } = this.firebolt.getAddSetFromCriteria(criteria, this.firebolt.getPropagationInf());\n const entryExitSets = selectionSets.map((selectionSet) => {\n this.setSelectionSet(uids, selectionSet);\n return this.getEntryExitSet(selectionSet, filteredDataModel, payload);\n });\n\n return entryExitSets;\n }\n\n setSelectionSet () {\n return this;\n }\n\n getEntryExitSet (selectionSet, filteredDataModel, payload) {\n const {\n entrySet,\n exitSet,\n completeSet\n } = selectionSet.getSets();\n const propagationInf = this.firebolt.getPropagationInf();\n const dataModel = this.firebolt.getFullData();\n const setConfig = {\n isSourceFieldPresent: propagationInf.isSourceFieldPresent,\n dataModel,\n filteredDataModel,\n propagationData: propagationInf.data,\n selectionSet\n };\n\n return {\n entrySet: [getSetInfo('oldEntry', entrySet[0], setConfig),\n getSetInfo('newEntry', entrySet[1], setConfig)],\n exitSet: [getSetInfo('oldEntry', exitSet[0], setConfig),\n getSetInfo('newExit', exitSet[1], setConfig)],\n mergedEnter: getSetInfo('mergedEnter', getMergedSet(entrySet), setConfig),\n mergedExit: getSetInfo('mergedExit', getMergedSet(exitSet), setConfig),\n completeSet: getSetInfo('complete', completeSet, setConfig),\n isSourceFieldPresent: propagationInf.isSourceFieldPresent,\n fields: getSourceFields(propagationInf, payload.criteria),\n sourceSelectionSet: selectionSet._volatile === true\n };\n }\n\n static mutates () {\n return false;\n }\n\n enable () {\n this._enabled = true;\n }\n\n disable () {\n this._enabled = false;\n }\n\n isEnabled () {\n return this._enabled;\n }\n}\n\n","import GenericBehaviour from './generic';\nimport { getMergedSet } from '../../helper';\nimport * as SELECTION from '../../enums/selection';\n\nexport default class VolatileBehaviour extends GenericBehaviour {\n setSelectionSet (addSet, selectionSet) {\n if (addSet === null) {\n selectionSet.reset();\n } else if (addSet.length) {\n // new add set\n const existingAddSet = addSet.filter(d => selectionSet._set[d] === SELECTION.SELECTION_NEW_ENTRY\n || selectionSet._set[d] === SELECTION.SELECTION_OLD_ENTRY);\n selectionSet.updateExit();\n const { entrySet } = selectionSet.getSets();\n selectionSet.reset(getMergedSet(entrySet));\n selectionSet.add(addSet);\n selectionSet.update(existingAddSet);\n } else {\n selectionSet.remove(selectionSet.getCompleteSet());\n }\n }\n}\n","export const BRUSH = 'brush';\nexport const HIGHLIGHT = 'highlight';\nexport const TOOLTIP = 'tooltip';\nexport const FILTER = 'filter';\nexport const SELECT = 'select';\n","import VolatileBehaviour from './volatile';\nimport { HIGHLIGHT } from '../../enums/behaviours';\n\nexport default class HighlightBehaviour extends VolatileBehaviour {\n static formalName () {\n return HIGHLIGHT;\n }\n}\n","import VolatileBehaviour from './volatile';\nimport * as BEHAVIOURNAMES from '../../enums/behaviours';\n\n/**\n * This is the behaviour for brushing a region on the chart. It accepts a payload\n * which contains the x and y range of the data and other configuration. It will then\n * create a selection box from the range and select the points which fall within the range.\n */\nexport default class BrushBehaviour extends VolatileBehaviour {\n static formalName () {\n return BEHAVIOURNAMES.BRUSH;\n }\n}\n","import VolatileBehaviour from './volatile';\nimport { FILTER } from '../../enums/behaviours';\n\nexport default class FilterBehaviour extends VolatileBehaviour {\n static formalName () {\n return FILTER;\n }\n\n static mutates () {\n return true;\n }\n}\n","import GenericBehaviour from './generic';\nimport { getMergedSet } from '../../helper';\nimport * as SELECTION from '../../enums/selection';\n\nexport default class PersistentBehaviour extends GenericBehaviour {\n setSelectionSet (addSet, selectionSet) {\n if (addSet === null) {\n selectionSet.reset();\n } else if (addSet.length) {\n const propagationInf = this.firebolt.getPropagationInf();\n // new add set\n const existingAddSet = addSet.filter(d => selectionSet._set[d] === SELECTION.SELECTION_NEW_ENTRY\n || selectionSet._set[d] === SELECTION.SELECTION_OLD_ENTRY);\n if (propagationInf.propagate === false) {\n selectionSet.updateExit();\n const { entrySet } = selectionSet.getSets();\n selectionSet.reset(getMergedSet(entrySet));\n selectionSet.add(addSet);\n selectionSet.update(existingAddSet);\n } else {\n // existing add set\n if (existingAddSet.length) {\n selectionSet.updateExit();\n selectionSet.remove(existingAddSet);\n } else {\n selectionSet.updateEntry();\n selectionSet.add(addSet);\n }\n const { exitSet } = selectionSet.getSets();\n const mergedExitSet = getMergedSet(exitSet);\n const completeSetCount = selectionSet.getCompleteSet().length;\n if (mergedExitSet.length === completeSetCount) {\n selectionSet.reset();\n }\n }\n } else {\n selectionSet.remove(selectionSet.getCompleteSet());\n }\n\n return this;\n }\n}\n","import PersistentBehaviour from './persistent';\nimport { SELECT } from '../../enums/behaviours';\n\nexport default class SelectBehaviour extends PersistentBehaviour {\n static formalName () {\n return SELECT;\n }\n}\n\n","import { DimensionSubtype, FieldType } from 'muze-utils';\n/**\n * Gets the drag action configuration\n * @param {VisualUnit} instance instance of visual unit\n * @param {Object} config x y positions\n * @return {Object} Payload of behaviour\n*/\n/* istanbul ignore next */ const getDragActionConfig = (sourceInfo, config, fieldsConfig) => {\n if (!(sourceInfo.axes.x || sourceInfo.axes.y)) {\n return {\n criteria: null\n };\n }\n\n const axes = sourceInfo.axes;\n const xAxis = axes.x[0];\n const yAxis = axes.y[0];\n const axisFields = sourceInfo.fields;\n const xField = axisFields.x[0].getMembers()[0];\n const yField = axisFields.y[0].getMembers()[0];\n const xFieldType = fieldsConfig[xField].def.subtype ? fieldsConfig[xField].def.subtype :\n fieldsConfig[xField].def.type;\n const yFieldType = fieldsConfig[yField].def.subtype ? fieldsConfig[yField].def.subtype :\n fieldsConfig[yField].def.type;\n const dimensions = {};\n const stPos = config.startPos;\n const endPos = config.endPos;\n\n if (stPos.x === endPos.x && stPos.y === endPos.y) {\n return {\n criteria: null\n };\n }\n\n const dragDim = xFieldType === FieldType.MEASURE ? (yFieldType === FieldType.MEASURE ? ['x', 'y'] : ['y']) : ['x'];\n const criteria = {};\n const isXDimension = xFieldType === DimensionSubtype.CATEGORICAL;\n const isYDimension = yFieldType === DimensionSubtype.CATEGORICAL;\n const xRange = xAxis.constructor.type() === 'band' ? xAxis.scale().invertExtent(stPos.x, endPos.x) :\n xAxis.invert(stPos.x, endPos.x);\n const yRange = yAxis.constructor.type() === 'band' ? yAxis.scale().invertExtent(stPos.y, endPos.y) :\n yAxis.invert(stPos.y, endPos.y);\n const selectedDomains = {\n x: stPos.x === endPos.x ? [] : (isXDimension ? xRange : xRange.sort((a, b) => a - b)),\n y: stPos.y === endPos.y ? [] : (isYDimension ? yRange : yRange.sort((a, b) => a - b))\n };\n const rangeObj = {};\n\n if (dragDim.length === 2) {\n rangeObj[xField] = selectedDomains.x;\n rangeObj[yField] = selectedDomains.y;\n if (xField === yField) {\n const xdom = selectedDomains.x;\n const ydom = selectedDomains.y;\n const min = xdom[0] > ydom[0] ? ydom : xdom;\n const max = min === ydom ? xdom : ydom;\n if (min[1] < max[0]) {\n rangeObj[xField] = [];\n } else {\n rangeObj[xField] = [max[0], min[1] < max[1] ? min[1] : max[1]];\n }\n dimensions.x = [stPos.x, endPos.x];\n dimensions.y = [stPos.y, endPos.y];\n }\n } else {\n criteria[dragDim[0]] = selectedDomains[dragDim[0]] || [];\n\n if (dragDim[0] === 'x') {\n rangeObj[xField] = criteria.x;\n if (xFieldType === DimensionSubtype.CATEGORICAL) {\n dimensions.x = (config.snap && stPos.x !== endPos.x) ? xAxis.getNearestRange(stPos.x, endPos.x) :\n [stPos.x, endPos.x];\n }\n } else {\n rangeObj[yField] = criteria.y;\n if (yFieldType === DimensionSubtype.CATEGORICAL) {\n dimensions.y = (config.snap && stPos.y !== endPos.y) ? yAxis.getNearestRange(stPos.y, endPos.y) :\n [stPos.y, endPos.y];\n }\n }\n }\n\n return {\n criteria: rangeObj,\n dimensions\n };\n};\n\nexport default getDragActionConfig;\n","import {\n getEvent,\n getD3Drag\n } from 'muze-utils';\n\nimport getDragActionConfig from './drag-action-config';\n\n/**\n * Adds dragging action to the target element.\n * @param {VisualUnit} instance Instance of visual unit.\n * @param {SVGElement} targetEl Element on which brushing action is needed.\n * @param {Array} behaviours Array of behaviours\n */\nexport const attachDragEvent = (targetEl, behaviours, firebolt, touch) => {\n let startPos = {};\n let endPos = {};\n let drawingInf;\n\n const d3Drag = getD3Drag();\n let touchStart;\n targetEl.call(d3Drag().on('start', () => {\n const event = getEvent();\n startPos = {\n x: event.x,\n y: event.y\n };\n drawingInf = firebolt.context.getDrawingContext();\n touchStart = new Date().getTime();\n }).on('drag', () => {\n const event = getEvent();\n endPos = {\n x: event.x,\n y: event.y\n };\n if (touch && Math.abs(startPos.x - endPos.x) <= 5) {\n return;\n }\n endPos.x = Math.max(0, Math.min(endPos.x, drawingInf.width));\n endPos.y = Math.max(0, Math.min(endPos.y, drawingInf.height));\n\n const payload = getDragActionConfig(firebolt.context.getSourceInfo(), {\n startPos,\n endPos\n }, firebolt.context.data().getFieldsConfig());\n behaviours.forEach(beh => firebolt.dispatchBehaviour(beh, payload));\n }).on('end', () => {\n const event = getEvent();\n endPos = {\n x: event.x,\n y: event.y\n };\n const duration = new Date().getTime() - touchStart;\n\n if (touch && duration > 100 && Math.abs(startPos.x - endPos.x) <= 5) {\n return;\n }\n endPos.x = Math.max(0, Math.min(endPos.x, drawingInf.width));\n endPos.y = Math.max(0, Math.min(endPos.y, drawingInf.height));\n\n const payload = getDragActionConfig(firebolt.context.getSourceInfo(), {\n startPos,\n endPos,\n snap: true\n }, firebolt.context.data().getFieldsConfig());\n payload.dragEnd = true;\n behaviours.forEach(beh => firebolt.dispatchBehaviour(beh, payload));\n }));\n};\n\n","import { getClientPoint, getEvent } from 'muze-utils';\nimport { CONSOLIDATED, FRAGMENTED } from '../../enums/constants';\n\n/**\n * Adds mouse interactions to target element.\n * @param {Firebolt} instance instance of firebolt.\n * @param {SVGElement} targetEl Element on which the event listeners will be attached.\n * @param {Array} behaviours Array of behaviours\n */\n/* istanbul ignore next */ const hover = firebolt => (targetEl, behaviours) => {\n const dispatchBehaviour = function (args) {\n const event = getEvent();\n const context = firebolt.context;\n const tooltipConf = context.config().interaction.tooltip;\n const mode = tooltipConf.mode;\n const pos = getClientPoint(context.getDrawingContext().svgContainer, event);\n const nearestPoint = context.getNearestPoint(pos.x, pos.y, {\n getAllPoints: mode === CONSOLIDATED || mode === FRAGMENTED,\n data: args,\n event\n });\n const payload = {\n criteria: nearestPoint ? nearestPoint.id : null,\n showInPosition: nearestPoint.showInPosition,\n target: nearestPoint.target,\n position: pos,\n mode\n };\n\n behaviours.forEach(beh => firebolt.dispatchBehaviour(beh, payload));\n event.stopPropagation();\n };\n\n targetEl.on('mouseover', dispatchBehaviour)\n .on('mousemove', dispatchBehaviour)\n .on('mouseout', () => {\n behaviours.forEach(beh => firebolt.dispatchBehaviour(beh, {\n criteria: null\n }));\n });\n};\n\nexport default hover;\n","export const CLASSPREFIX = 'muze';\nexport const CONSOLIDATED = 'consolidated';\nexport const FRAGMENTED = 'fragmented';\n\n","import { getClientPoint } from 'muze-utils';\n\nexport const generatePayloadFromEvent = function (args, event, firebolt) {\n const context = firebolt.context;\n const pos = getClientPoint(context.getDrawingContext().svgContainer, event.touches ? event.touches[0] : event);\n const nearestPoint = context.getNearestPoint(pos.x, pos.y, {\n data: args,\n event\n });\n return {\n criteria: nearestPoint ? nearestPoint.id : null,\n showInPosition: nearestPoint.showInPosition,\n target: nearestPoint.target,\n position: pos\n };\n};\n","import { getEvent } from 'muze-utils';\nimport { generatePayloadFromEvent } from './helpers';\n\n/**\n * Adds mouse interactions to target element.\n * @param {VisualUnit} instance instance of visual unit.\n * @param {SVGElement} targetEl Element on which the event listeners will be attached.\n * @param {Array} behaviours Array of behaviours\n */\n/* istanbul ignore next */ const click = firebolt => (targetEl, behaviours) => {\n const dispatchBehaviour = function (args) {\n const event = getEvent();\n const payload = generatePayloadFromEvent(args, event, firebolt);\n behaviours.forEach(beh => firebolt.dispatchBehaviour(beh, payload));\n event.stopPropagation();\n };\n\n targetEl.on('click', dispatchBehaviour);\n};\nexport default click;\n","import drag from './drag';\nimport hover from './hover';\nimport { longtouch } from './longtouch';\nimport { touchdrag } from './touch-drag';\nimport * as ACTIONNAMES from '../../enums/actions';\nimport click from './click';\n\nexport const physicalActions = {\n [ACTIONNAMES.DRAG]: drag,\n [ACTIONNAMES.HOVER]: hover,\n [ACTIONNAMES.CLICK]: click,\n [ACTIONNAMES.LONGTOUCH]: longtouch,\n [ACTIONNAMES.TOUCHDRAG]: touchdrag\n};\n\n","import { attachDragEvent } from './helpers/drag-event';\n\n/**\n * Adds dragging action to the target element.\n * @param {VisualUnit} instance Instance of visual unit.\n * @param {SVGElement} targetEl Element on which brushing action is needed.\n * @param {Array} behaviours Array of behaviours\n */\n/* istanbul ignore next */ const drag = firebolt => (targetEl, behaviours) => {\n attachDragEvent(targetEl, behaviours, firebolt);\n};\n\nexport default drag;\n","/* global setTimeout */\nimport { getEvent } from 'muze-utils';\nimport { generatePayloadFromEvent } from './helpers';\n\n/**\n * Adds mouse interactions to target element.\n * @param {VisualUnit} instance instance of visual unit.\n * @param {SVGElement} targetEl Element on which the event listeners will be attached.\n * @param {Array} behaviours Array of behaviours\n */\nexport const longtouch = firebolt => (targetEl, behaviours) => {\n let event;\n let touchEnd;\n const dispatchBehaviour = function (args) {\n const payload = generatePayloadFromEvent(args, event, firebolt);\n behaviours.forEach(beh => firebolt.dispatchBehaviour(beh, payload));\n event.stopPropagation();\n };\n\n touchEnd = false;\n event = getEvent();\n targetEl.on('touchstart', (args) => {\n event = getEvent();\n touchEnd = false;\n setTimeout(() => {\n if (!touchEnd) {\n dispatchBehaviour(args);\n } else {\n behaviours.forEach(beh => firebolt.dispatchBehaviour(beh, {\n criteria: null\n }));\n }\n }, 100);\n }).on('touchend', () => {\n touchEnd = true;\n });\n};\n","import { attachDragEvent } from './helpers/drag-event';\n\n/**\n * Adds dragging action to the target element.\n * @param {VisualUnit} instance Instance of visual unit.\n * @param {SVGElement} targetEl Element on which brushing action is needed.\n * @param {Array} behaviours Array of behaviours\n */\nexport const touchdrag = firebolt => (targetEl, behaviours) => {\n attachDragEvent(targetEl, behaviours, firebolt, true);\n};\n\n","import { mergeRecursive, getUniqueId } from 'muze-utils';\n\nexport default class GenericSideEffect {\n constructor (firebolt) {\n this.firebolt = firebolt;\n this._enabled = true;\n this._strategy = 'default';\n this._config = {};\n this._id = getUniqueId();\n this._strategies = {};\n this.config(this.constructor.defaultConfig());\n }\n\n static defaultConfig () {\n return {};\n }\n\n static target () {\n return 'all';\n }\n\n static mutates () {\n return false;\n }\n\n config (...params) {\n if (params.length) {\n this._config = mergeRecursive(this._config, params[0]);\n return this;\n }\n return this._config;\n }\n\n disable () {\n this._enabled = false;\n return this;\n }\n\n enable () {\n this._enabled = true;\n return this;\n }\n\n isEnabled () {\n return this._enabled;\n }\n\n apply () {\n return this;\n }\n\n addStrategy (name, fn) {\n this._strategies[name] = fn;\n return this;\n }\n}\n","import GenericSideEffect from './generic';\n\nexport default class SurrogateSideEffect extends GenericSideEffect {\n applyInteractionStyle (set, config = {}, interactionType, apply) {\n const layers = this.firebolt.context.layers();\n layers.forEach(layer => layer.config().interactive !== false &&\n layer.applyInteractionStyle(interactionType, set.uids, apply));\n }\n}\n","import { makeElement } from 'muze-utils';\n\nimport GenericSideEffect from './generic';\n\nexport default class SpawnableSideEffect extends GenericSideEffect {\n createElement (container, elemType, data, className, callbacks) {\n return makeElement(container, elemType, data, className, callbacks);\n }\n\n drawingContext (...drawingContext) {\n if (drawingContext.length) {\n this._drawingContext = drawingContext[0];\n return this;\n }\n return this._drawingContext();\n }\n\n show () {\n return this;\n }\n\n hide () {\n return this;\n }\n}\n","import { selectElement } from 'muze-utils';\n\nexport const getBoxDimensionsFromPayload = (payload, axes, axisFields) => {\n let x1;\n let x2;\n let y1;\n let y2;\n let xRange;\n let yRange;\n let direction;\n const criteria = payload.criteria;\n const dimensions = payload.dimensions || {};\n const xDim = dimensions.x;\n const yDim = dimensions.y;\n\n if (criteria === null) {\n return null;\n }\n\n const xAxis = axes.x[0];\n const yAxis = axes.y[0];\n const xLinear = xAxis.constructor.type() === 'linear';\n const yLinear = yAxis.constructor.type() === 'linear';\n const xField = `${axisFields.x[0]}`;\n const yField = `${axisFields.y[0]}`;\n const xCriteria = criteria[xField];\n const yCriteria = criteria[yField];\n\n if (xCriteria && xCriteria[0] instanceof Array) {\n xRange = xCriteria[0];\n yRange = xCriteria[1];\n } else {\n xRange = xCriteria || [];\n yRange = yCriteria || [];\n }\n direction = xCriteria && yCriteria ? 'both' : (xCriteria ? 'vertical' : 'horizontal');\n if (xRange && xRange.length) {\n if ((yAxis.constructor.type() === 'band' && xLinear)) {\n x1 = x2 = undefined;\n direction = 'horizontal';\n } else {\n const domain = xAxis.domain();\n const bandScale = xAxis.constructor.type() === 'band';\n let x1Val;\n let x2Val;\n if (bandScale) {\n let x1DomainIndex = domain.indexOf(xRange[0]);\n let x2DomainIndex = domain.indexOf(xRange[xRange.length - 1]);\n [x1DomainIndex, x2DomainIndex] = [x1DomainIndex, x2DomainIndex].sort((a, b) => a - b);\n x1Val = domain[x1DomainIndex];\n x2Val = domain[x2DomainIndex];\n } else {\n x1Val = xRange[0];\n x2Val = xRange[xRange.length - 1];\n }\n x1 = xAxis.getScaleValue(x1Val);\n x2 = xAxis.getScaleValue(x2Val);\n x2 += bandScale ? xAxis.getUnitWidth() : 0;\n }\n } else {\n x1 = x2 = undefined;\n }\n if (yRange && yRange.length) {\n if ((xAxis.constructor.type() === 'band' && yLinear)) {\n y1 = y2 = undefined;\n direction = 'vertical';\n } else {\n const domain = yAxis.domain();\n const bandScale = yAxis.constructor.type() === 'band';\n let y1Val;\n let y2Val;\n if (bandScale) {\n let y1DomainIndex = domain.indexOf(yRange[0]);\n let y2DomainIndex = domain.indexOf(yRange[yRange.length - 1]);\n [y1DomainIndex, y2DomainIndex] = [y1DomainIndex, y2DomainIndex].sort(((a, b) => b - a));\n y1Val = domain[y1DomainIndex];\n y2Val = domain[y2DomainIndex];\n } else {\n y1Val = yRange[0];\n y2Val = yRange[yRange.length - 1];\n }\n y1 = yAxis.getScaleValue(y1Val);\n y2 = yAxis.getScaleValue(y2Val);\n y2 += yAxis.constructor.type() === 'band' ? yAxis.getUnitWidth() : 0;\n }\n } else {\n y1 = y2 = undefined;\n }\n\n if ((yLinear && xLinear) || !payload.dragEnd) {\n if (xDim) {\n [x1, x2] = xDim;\n }\n if (yDim) {\n [y1, y2] = yDim;\n }\n }\n\n return {\n dimension: {\n x1,\n x2,\n y1,\n y2\n },\n direction\n };\n};\n\nexport const changeVisibility = (context, sideEffectGroup, visible) => {\n const config = context.config();\n const className = config.defClassName;\n const classPrefix = config.classPrefix;\n selectElement(sideEffectGroup).selectAll(`.${classPrefix}-${className}`)\n .style('display', visible ? 'block' : 'none');\n};\n","import {\n getQualifiedClassName,\n selectElement,\n makeElement,\n isValidValue\n} from 'muze-utils';\nimport { CLASSPREFIX } from '../../enums/constants';\nimport './styles.scss';\nimport SpawnableSideEffect from '../spawnable';\nimport { selectionBoxDrag } from '../../actions/physical/selection-box-drag';\nimport { getBoxDimensionsFromPayload, changeVisibility } from './helper';\n\n/**\n * This class is used to create a selection box which is used by visual unit for brushing and\n * selection in the canvas.\n * @class SelectionBox\n */\nclass SelectionBox extends SpawnableSideEffect {\n /**\n * It returns the default configuration needed by selectionbox.\n * @return {Object} Default configuration of the selection box.\n */\n static defaultConfig () {\n return {\n defClassName: 'selection-box-group',\n className: '',\n classPrefix: CLASSPREFIX,\n box: {\n defClassName: 'selection-box',\n className: ''\n },\n transition: {\n duration: 200\n }\n };\n }\n\n static formalName () {\n return 'selectionBox';\n }\n\n /**\n * Draws the selectionbox with the specified dimensions.\n * @param {Object} dimension Dimensions of the selection box.\n * @param {number} dimension.x1 Starting x position\n * @param {number} dimension.x2 Ending x position\n * @param {number} dimension.y1 Starting y position\n * @param {number} dimension.y2 Ending y position\n * @param {Object} conf Configuration needed to draw the selection box\n * @param {number} unitWidth Width of the visual unit.\n * @param {number} unitHeight Height of the visual unit.\n */\n apply (selectionSet, payload) {\n let x;\n let y;\n let width;\n let height;\n const config = this._config;\n const boxConf = config.box;\n const firebolt = this.firebolt;\n const drawingInf = this.drawingContext();\n const mountPoint = drawingInf.sideEffectGroup;\n const unitWidth = drawingInf.width;\n const unitHeight = drawingInf.height;\n const classPrefix = config.classPrefix;\n const selectionGroupClassName = config.defClassName;\n\n if (payload.criteria === null) {\n this.hide(drawingInf);\n return this;\n }\n\n const sourceInf = firebolt.context.getSourceInfo();\n const { dimension, direction } = getBoxDimensionsFromPayload(payload, sourceInf.axes,\n sourceInf.fields);\n const transition = payload.dragEnd && config.transition;\n\n if (direction === 'both' || direction === 'vertical') {\n x = Math.min(dimension.x1, dimension.x2);\n width = Math.abs(dimension.x2 - dimension.x1);\n } else {\n x = 0;\n width = unitWidth;\n }\n if (direction === 'both' || direction === 'horizontal') {\n y = Math.min(dimension.y1, dimension.y2);\n height = Math.abs(dimension.y2 - dimension.y1);\n } else {\n height = unitHeight;\n y = 0;\n }\n this.show(drawingInf);\n // Create the data array for drawing the rectangle\n const points = [\n {\n x,\n y,\n width,\n height\n }\n ];\n // Create the container group for selection box.\n const selectionGroup = makeElement(selectElement(mountPoint), 'g', [1],\n `.${classPrefix}-${selectionGroupClassName}`);\n const sideEffect = this;\n const selection = selectionGroup.selectAll('rect').data(points);\n const selectionBox = selection.enter().append('rect')\n .each(function () {\n selectionBoxDrag(firebolt)(selectElement(this), ['brush'], sideEffect);\n })\n .merge(selection)\n .each(function (attrs) {\n let element = selectElement(this);\n transition && (element = element.transition().duration(transition.duration));\n for (const key in attrs) {\n if ({}.hasOwnProperty.call(attrs, key)) {\n isValidValue(attrs[key]) && element.attr(key, attrs[key]);\n }\n }\n });\n // Get the qualified class name for selection box rectangle\n const boxClassName = getQualifiedClassName(boxConf.defClassName, this._id, classPrefix);\n selectionBox.classed(boxClassName.join(' '), true);\n selectionBox.classed(boxConf.className, true);\n\n return this;\n }\n\n hide (drawingInf) {\n changeVisibility(this, drawingInf.sideEffectGroup, false);\n }\n\n show (drawingInf) {\n changeVisibility(this, drawingInf.sideEffectGroup, true);\n }\n}\n\nexport default SelectionBox;\n\n","import {\n getEvent,\n getD3Drag\n } from 'muze-utils';\n\nimport getDragActionConfig from './helpers/drag-action-config';\n\nexport const selectionBoxDrag = firebolt => (targetEl, behaviours) => {\n let subject;\n let drawingInf;\n const context = firebolt.context;\n const onDrag = (payload) => {\n behaviours.forEach(action => firebolt.dispatchBehaviour(action, payload));\n };\n const d3Drag = getD3Drag();\n\n targetEl.call(d3Drag().on('start', () => {\n const event = getEvent();\n drawingInf = context.getDrawingContext();\n subject = event.subject;\n }).on('drag', () => {\n const event = getEvent();\n subject.x += event.dx;\n subject.y += event.dy;\n const width = drawingInf.width;\n const height = drawingInf.height;\n const x = Math.min(width - subject.width, Math.max(subject.x, 0));\n const y = Math.min(height - subject.height, Math.max(subject.y, 0));\n const y2 = y + subject.height;\n const x2 = x + subject.width;\n\n if (x >= 0 && x2 <= width && y >= 0 && y2 <= height) {\n const payload = getDragActionConfig(context.getSourceInfo(), {\n startPos: {\n x,\n y\n },\n endPos: {\n x: x2,\n y: y2\n }\n }, context.data().getFieldsConfig());\n onDrag(payload);\n }\n }).on('end', () => {\n const width = drawingInf.width;\n const height = drawingInf.height;\n const x = Math.min(width - subject.width, Math.max(subject.x, 0));\n const y = Math.min(height - subject.height, Math.max(subject.y, 0));\n const y2 = y + subject.height;\n const x2 = x + subject.width;\n\n if (x >= 0 && x2 <= width && y >= 0 && y2 <= height) {\n const payload = getDragActionConfig(context.getSourceInfo(), {\n startPos: {\n x,\n y\n },\n endPos: {\n x: x2,\n y: y2\n },\n snap: true\n }, context.data().getFieldsConfig());\n payload.dragEnd = true;\n onDrag(payload);\n }\n }));\n};\n","export const CLASSPREFIX = 'muze';\nexport const ARROW_RIGHT = 'right';\nexport const ARROW_TOP = 'top';\nexport const ARROW_BOTTOM = 'bottom';\nexport const ARROW_LEFT = 'left';\nexport const TOOLTIP_LEFT = 'left';\nexport const TOOLTIP_RIGHT = 'right';\nexport const TOOLTIP_BOTTOM = 'bottom';\nexport const TOOLTIP_TOP = 'top';\nexport const INITIAL_STYLE = {\n position: 'absolute',\n width: 0,\n height: 0\n};\n","import { CLASSPREFIX } from './constants';\n\nexport const defaultConfig = {\n classPrefix: CLASSPREFIX,\n defClassName: 'tooltip-box',\n connectorClassName: 'tooltip-connectors',\n className: '',\n row: {\n margin: 0\n },\n content: {\n spacing: 5,\n iconContainerSize: 10,\n iconScale: 1,\n iconShape: 'circle',\n iconColor: '#ff0000',\n rowMargin: '0px',\n margin: 10,\n separator: ':',\n className: 'tooltip-content-container',\n parentClassName: 'tooltip-content-parent-container'\n },\n arrow: {\n size: 10,\n disabled: false,\n defClassName: 'tooltip-arrow',\n className: '',\n color: 'rgba(195,195,195,0.85)'\n }\n};\n","import { getQualifiedClassName } from 'muze-utils';\nimport { TOOLTIP_LEFT, TOOLTIP_RIGHT, ARROW_RIGHT, ARROW_LEFT, TOOLTIP_BOTTOM } from './constants';\n\nexport const getArrowPos = (orient, dim, measurement, config) => {\n let arrowPos;\n const { x, y, boxHeight, boxWidth } = measurement;\n const arrowDisabled = config.arrow.disabled;\n const arrowWidth = arrowDisabled ? 0 : config.arrow.size;\n\n if (orient === ARROW_LEFT || orient === ARROW_RIGHT) {\n let start = 0;\n let diff = boxHeight / 2;\n const plotBottom = dim.y + dim.height;\n const boxBottom = y + boxHeight;\n\n if (dim.y > y) {\n start = dim.y - y;\n diff = (plotBottom >= boxBottom ? (boxBottom - dim.y) : dim.height) / 2;\n } else if (boxBottom > plotBottom) {\n diff = Math.abs(y - (dim.y + dim.height)) / 2;\n }\n arrowPos = start + diff - arrowWidth / 2;\n } else {\n let start = 0;\n let diff = boxWidth / 2;\n const plotRight = dim.x + dim.width;\n const boxRight = x + boxWidth;\n\n if (dim.x > x) {\n start = dim.x - x;\n diff = (plotRight >= boxRight ? (boxRight - dim.x) : dim.width) / 2;\n } else if (boxRight > plotRight) {\n diff = Math.abs(x - (dim.x + dim.width)) / 2;\n }\n arrowPos = start + diff - arrowWidth / 2;\n }\n return arrowPos;\n};\n\n/**\n * Places the arrow in the specified arrow position. It also applies appropriate arrow\n * class name to the arrow element.\n * @param {string} position Left, bottom or right position of the arrow;\n * @param {number} arrowPos position of arrow in pixels\n * @return {Tooltip} Instance of tooltip.\n */\nexport const placeArrow = (context, position, arrowPos) => {\n const tooltipArrow = context._tooltipArrow;\n const tooltipBackground = context._tooltipBackground;\n const config = context._config;\n const classPrefix = config.classPrefix;\n const arrowConf = config.arrow;\n const className = getQualifiedClassName(arrowConf.defClassName, context._id, config.classPrefix);\n\n tooltipArrow.style('display', 'block');\n tooltipArrow.attr('class', `${className.join(' ')}`);\n if (position === TOOLTIP_LEFT || position === TOOLTIP_RIGHT) {\n tooltipArrow.style('top', `${arrowPos}px`);\n tooltipArrow.style('left', '');\n tooltipBackground.style('top', `${arrowPos}px`);\n tooltipBackground.style('left', '');\n } else {\n position === TOOLTIP_BOTTOM ? tooltipArrow.style('top', '100%') : tooltipArrow.style('top',\n `-${arrowConf.size}px`);\n tooltipArrow.style('left', `${arrowPos}px`);\n position === TOOLTIP_BOTTOM ? tooltipBackground.style('top', '100%') : tooltipBackground.style('top',\n `-${arrowConf.size + 3}px`);\n tooltipBackground.style('left', `${arrowPos}px`);\n }\n tooltipArrow.classed(`${classPrefix}-tooltip-arrow`, true);\n tooltipArrow.classed(`${classPrefix}-tooltip-arrow-${context._arrowOrientation}`, false);\n tooltipArrow.classed(`${classPrefix}-tooltip-arrow-${position}`, true);\n tooltipBackground.classed(`${classPrefix}-tooltip-background-arrow`, true);\n tooltipBackground.classed(`${classPrefix}-tooltip-background-arrow-${context._arrowOrientation}`, false);\n tooltipBackground.classed(`${classPrefix}-tooltip-background-arrow-${position}`, true);\n return this;\n};\n\nexport const reorderContainers = (parentContainer, className) => {\n parentContainer.selectAll(className).sort((a, b) => a - b);\n};\n","import {\n getClosestIndexOf,\n DateTimeFormatter,\n DimensionSubtype,\n FieldType\n} from 'muze-utils';\n\nconst timeFormats = {\n millisecond: '%A, %b %e, %H:%M:%S.%L',\n second: '%A, %b %e, %H:%M:%S',\n minute: '%A, %b %e, %H:%M',\n hour: '%A, %b %e, %H:%M',\n day: '%A, %b %e, %Y',\n month: '%B %Y',\n year: '%Y'\n};\nconst timeDurations = [\n ['millisecond', 'second', 'minute', 'hour', 'day', 'month', 'year'],\n [1, 1000, 60000, 3600000, 86400000, 2592000000, 31536000000]\n];\nconst getNearestInterval = (interval) => {\n const index = getClosestIndexOf(timeDurations[1], interval);\n return timeDurations[0][index];\n};\nconst defaultTooltipFormatters = (type, formatter) => {\n const formatters = {\n [DimensionSubtype.TEMPORAL]: (value, interval) => {\n const nearestInterval = getNearestInterval(interval);\n return DateTimeFormatter.formatAs(value, timeFormats[nearestInterval]);\n },\n [FieldType.MEASURE]: value => formatter(value ? value.toFixed(2) : value),\n [FieldType.DIMENSION]: value => value\n };\n return formatters[type];\n};\n\nconst getTabularData = (data, schema, fieldspace, timeDiffs) => {\n const rows = [];\n rows.push(schema.map(d => d.name));\n data.forEach((d) => {\n const row = [];\n schema.forEach((fieldObj, i) => {\n const interval = fieldObj.subtype === DimensionSubtype.TEMPORAL ? timeDiffs[fieldObj.name] : 0;\n const numberFormat = fieldObj.type === FieldType.MEASURE && fieldspace.fields[i]._ref.numberFormat();\n const formatterFn = defaultTooltipFormatters(fieldObj.subtype || fieldObj.type, numberFormat);\n const value = formatterFn(d[i], interval);\n row.push(value);\n });\n rows.push(row);\n });\n return rows;\n};\n\nexport const buildTooltipData = (dataModel, config = {}, context) => {\n let fieldValues = [];\n const dataObj = dataModel.getData();\n const data = dataObj.data;\n const schema = dataObj.schema;\n const formatters = config.formatters;\n const separator = config.separator;\n const fieldsConfig = dataModel.getFieldsConfig();\n const fieldspace = dataModel.getFieldspace();\n const fieldsObj = fieldspace.fieldsObj();\n const dimensionMeasureMap = context.dimensionMeasureMap;\n const axes = context.axes;\n const detailFields = context.detailFields || [];\n const dimensions = schema.filter(d => d.type === FieldType.DIMENSION);\n const measures = schema.filter(d => d.type === FieldType.MEASURE);\n // const containsRetinalField = schema.find(d => d.name in dimensionMeasureMap);\n const containsDetailField = schema.find(d => detailFields.indexOf(d.name) !== -1);\n const dataLen = data.length;\n const getRowContent = (field, type) => {\n let value;\n let formattedValue;\n let measureIndex;\n const values = [];\n const index = fieldsConfig[field].index;\n const interval = fieldsConfig[field].def.subtype === DimensionSubtype.TEMPORAL ?\n fieldsObj[field].getMinDiff() : 0;\n const formatterFn = (formatters && formatters[field]) || defaultTooltipFormatters(type, val => val);\n\n if (value !== null) {\n let uniqueVals = type === FieldType.MEASURE ? data.map(d => d[index]) :\n [...new Set(data.map(d => d[index]))];\n uniqueVals = uniqueVals.filter(d => d !== '');\n const colorAxis = axes.color[0];\n const shapeAxis = axes.shape[0];\n const sizeAxis = axes.size[0];\n const isRetinalField = (colorAxis || shapeAxis || sizeAxis) && dataLen > 1 &&\n type !== FieldType.MEASURE;\n\n uniqueVals.forEach((val, i) => {\n let key;\n const associatedMeasures = dimensionMeasureMap[field];\n\n if (associatedMeasures && associatedMeasures.length && dataLen > 1) {\n key = val;\n let icon = {\n value: ''\n };\n\n if (isRetinalField) {\n icon = {\n type: 'icon',\n color: colorAxis.getColor(val),\n shape: shapeAxis.getShape(val),\n size: sizeAxis.getSize(val) * config.iconScale\n };\n }\n if (associatedMeasures.length > 1) {\n values.push([icon, `${key}`]);\n associatedMeasures.forEach((measure) => {\n measureIndex = fieldsConfig[measure].index;\n value = data[i][measureIndex];\n formattedValue = defaultTooltipFormatters('measure',\n fieldspace.fields[measureIndex]._ref.numberFormat())(value, interval);\n values.push([{\n value: `${measure}${separator}`,\n style: {\n 'margin-left': `${config.margin}px}`\n },\n className: `${config.classPrefix}-tooltip-key`\n }, {\n value: `${formattedValue}`,\n className: `${config.classPrefix}-tooltip-value`\n }]);\n });\n } else {\n measureIndex = fieldsConfig[associatedMeasures[0]].index;\n value = data[i][measureIndex];\n formattedValue = defaultTooltipFormatters('measure',\n fieldspace.fields[measureIndex]._ref.numberFormat())(value, interval);\n values.push([icon, {\n value: `${key}${separator}`,\n className: `${config.classPrefix}-tooltip-key`\n }, {\n value: `${formattedValue}`,\n className: `${config.classPrefix}-tooltip-value`\n }]);\n }\n } else {\n key = field;\n value = val;\n formattedValue = formatterFn(value, interval);\n values.push([{\n value: `${key}${separator}`,\n className: `${config.classPrefix}-tooltip-key`\n }, {\n value: `${formattedValue}`,\n className: `${config.classPrefix}-tooltip-value`\n }]);\n }\n });\n }\n return values;\n };\n let displayFormat = 'keyValue';\n\n if (dataLen > 1 && containsDetailField) {\n fieldValues = getTabularData(data, schema, fieldspace, context.timeDiffs);\n displayFormat = 'table';\n } else {\n dimensions.forEach((item) => {\n const type = item.subtype ? item.subtype : item.type;\n fieldValues = [...fieldValues, ...getRowContent(item.name, type)];\n });\n\n const allMeasures = [...new Set(...Object.values(dimensionMeasureMap))];\n const filteredMeasures = dataLen > 1 ? measures.filter(d => allMeasures.indexOf(d.name) === -1)\n : measures;\n\n filteredMeasures.forEach((item) => {\n const type = item.subtype ? item.subtype : item.type;\n fieldValues = [...fieldValues, ...getRowContent(item.name, type)];\n });\n }\n\n return {\n content: fieldValues,\n displayFormat\n };\n};\n\n/**\n * This contains the strategy methods for showing tooltip in the chart.\n * @param {VisualUnit} context Attached instance.\n */\nexport const strategy = {\n keyValue: (data, config, context) => {\n const values = buildTooltipData(data, config, context);\n return values;\n }\n};\n\nexport const DEFAULT_STRATEGY = 'keyValue';\n","import {\n selectElement,\n mergeRecursive,\n makeElement,\n setAttrs,\n setStyles,\n getSymbol,\n isSimpleObject\n} from 'muze-utils';\nimport { DEFAULT_STRATEGY, strategy } from './strategy';\nimport { defaultConfig } from './default-config';\n\n/**\n * This class is used to manage the content of tooltip.\n */\nexport default class Content {\n /**\n * Creates an instance of content.\n */\n constructor () {\n this._model = null;\n this._strategy = DEFAULT_STRATEGY;\n this._formatter = null;\n this._config = this.constructor.defaultConfig();\n }\n /**\n * Returns the default configuration of tooltip\n * @return {Object} Configuration of tooltip.\n */\n static defaultConfig () {\n const config = defaultConfig.content;\n config.classPrefix = defaultConfig.classPrefix;\n return config;\n }\n\n config (...c) {\n if (c.length > 0) {\n this._config = mergeRecursive(this._config, c[0]);\n return this;\n }\n return this._config;\n }\n\n /**\n * Update model. The format contains presentation strategy which determines how to show the content.\n * If no strategy is mentioned then default is to show key value pair\n */\n update (item) {\n this._model = item.model;\n this._strategy = item.strategy !== undefined ? item.strategy : DEFAULT_STRATEGY;\n this._formatter = item.formatter;\n return this;\n }\n\n context (ctx) {\n this._context = ctx;\n return this;\n }\n\n render (mount) {\n let data;\n const config = this._config;\n const iconContainerSize = config.iconContainerSize;\n const formatter = this._formatter;\n const rowMargin = config.rowMargin;\n const model = this._model;\n\n this._mount = mount;\n if (model instanceof Array) {\n data = model;\n } else {\n data = formatter instanceof Function ? formatter(this._model, this._context) :\n strategy[this._strategy](this._model, this.config(), this._context);\n }\n\n if (data instanceof Function) {\n mount.html(data());\n } else {\n let content = data;\n let displayFormat = 'default';\n\n if (isSimpleObject(data)) {\n content = data.content;\n displayFormat = data.displayFormat;\n }\n\n const body = makeElement(mount, 'div', [displayFormat], `${config.classPrefix}-tooltip-content`, {},\n d => d);\n\n if (displayFormat === 'table') {\n const table = makeElement(body, 'table', [1], `${config.classPrefix}-tooltip-table`);\n const tbody = makeElement(table, 'tbody', [1], `${config.classPrefix}-tooltip-table-tbody`);\n const rows = makeElement(tbody, 'tr', content, `${config.classPrefix}-tooltip-table-row`);\n rows.each(function (d, i) {\n selectElement(this).classed(`${config.classPrefix}-tooltip-table-row-${i}`, true);\n });\n const cells = makeElement(rows, 'td', d => d, `${config.classPrefix}-tooltip-table-cell`);\n cells.each(function (d) {\n selectElement(this).html(d);\n });\n } else {\n const rows = makeElement(body, 'div', content, `${config.classPrefix}-tooltip-row`);\n const cells = makeElement(rows, 'span', d => d, `${config.classPrefix}-tooltip-content`);\n cells.attr('class', `${config.classPrefix}-tooltip-content`);\n setStyles(rows, {\n margin: rowMargin\n });\n setStyles(cells, {\n display: 'inline-block',\n 'margin-right': `${config.spacing}px`\n });\n\n cells.each(function (d) {\n const el = selectElement(this);\n el.html('');\n if (d instanceof Object) {\n if (d.type === 'icon') {\n const svg = makeElement(el, 'svg', [1]);\n const path = makeElement(svg, 'path', [1]);\n const shape = d.shape instanceof Function ? d.shape : getSymbol(d.shape);\n\n setAttrs(svg, {\n x: 0,\n y: 0,\n width: iconContainerSize,\n height: iconContainerSize\n });\n setAttrs(path, {\n d: shape.size(d.size)(),\n transform: `translate(${iconContainerSize / 2}, ${iconContainerSize / 2})`\n });\n setStyles(path, {\n fill: d.color\n });\n setStyles(svg, {\n width: `${iconContainerSize}px`,\n height: `${iconContainerSize}px`\n });\n } else {\n el.html(d.value);\n d.className && el.classed(d.className, true);\n setStyles(el, d.style);\n }\n } else {\n el.html(d);\n }\n });\n }\n }\n return this;\n }\n\n clear () {\n this._model = null;\n return this;\n }\n}\n","import {\n mergeRecursive,\n getQualifiedClassName,\n getUniqueId,\n selectElement,\n setStyles,\n makeElement\n} from 'muze-utils';\nimport { ARROW_BOTTOM, ARROW_LEFT, ARROW_RIGHT, TOOLTIP_LEFT, TOOLTIP_RIGHT, TOOLTIP_BOTTOM, TOOLTIP_TOP,\n INITIAL_STYLE } from './constants';\nimport { defaultConfig } from './default-config';\nimport { getArrowPos, placeArrow, reorderContainers } from './helper';\nimport './styles.scss';\nimport Content from './content';\n\n/**\n * This component is responsible for creating a tooltip element. It appends the tooltip\n * in the body element.\n * @class Tooltip\n */\nexport default class Tooltip {\n /**\n * Initializes the tooltip with the container element and configuration\n * @param {HTMLElement} container container where the tooltip will be mounted.\n * @param {string} className Class name of the tooltip.\n */\n constructor (htmlContainer, svgContainer) {\n let connectorContainer = svgContainer;\n this._id = getUniqueId();\n this._config = {};\n this.config({});\n const tooltipConf = this._config;\n const classPrefix = tooltipConf.classPrefix;\n const contentClass = tooltipConf.content.parentClassName;\n const container = makeElement(htmlContainer, 'div', [1], `${classPrefix}-tooltip-container`);\n this._container = container;\n this._tooltipContainer = container.append('div').style('position', 'absolute');\n this._contentContainer = this._tooltipContainer.append('div').attr('class', `${classPrefix}-${contentClass}`);\n this._tooltipBackground = this._tooltipContainer.append('div').style('position', 'relative');\n this._tooltipArrow = this._tooltipContainer.append('div');\n\n if (!svgContainer) {\n connectorContainer = htmlContainer.append('svg').style('pointer-events', 'none');\n }\n this._contents = {};\n this._tooltipConnectorContainer = selectElement(connectorContainer)\n .append('g')\n .attr('class', `${tooltipConf.classPrefix}-${tooltipConf.connectorClassName}`);\n const id = this._id;\n const defClassName = tooltipConf.defClassName;\n const qualifiedClassName = getQualifiedClassName(defClassName, id, tooltipConf.classPrefix);\n\n setStyles(this._tooltipArrow, INITIAL_STYLE);\n setStyles(this._tooltipBackground, INITIAL_STYLE);\n this.addClass(qualifiedClassName.join(' '));\n this.addClass(tooltipConf.className);\n this.hide();\n }\n\n /**\n * Sets the configuration of tooltip.\n * @param {Object} config Configuration of tooltip\n * @return {Tooltip} Instance of tooltip\n */\n config (...config) {\n if (config.length > 0) {\n const defConf = mergeRecursive({}, this.constructor.defaultConfig());\n this._config = mergeRecursive(defConf, config[0]);\n return this;\n }\n return this._config;\n }\n\n /**\n * Returns the default configuration of tooltip\n * @return {Object} Configuration of tooltip.\n */\n static defaultConfig () {\n return defaultConfig;\n }\n /**\n * Sets the class name of tooltip\n * @param {string} className tooltip class name\n * @return {Tooltip} Instance of tooltip.\n */\n addClass (className) {\n this._tooltipContainer.classed(className, true);\n return this;\n }\n\n context (...ctx) {\n if (ctx.length) {\n this._context = ctx[0];\n return this;\n }\n return this._context;\n }\n\n content (name, data, contentConfig = {}) {\n const config = this.config();\n const { classPrefix } = config;\n const contentClass = config.content.className;\n const formatter = config.formatter;\n const className = contentConfig.className || `${classPrefix}-${contentClass}-${name}`;\n const content = this._contents[name] = this._contents[name] || new Content();\n const container = makeElement(this._contentContainer, 'div', [contentConfig.order], className);\n container.attr('class', `${classPrefix}-${contentClass} ${className}`);\n reorderContainers(this._contentContainer, `.${classPrefix}-${contentClass}`);\n const contentConf = config.content;\n contentConfig.classPrefix = this._config.classPrefix;\n content.config(contentConf);\n\n if (data === null) {\n content.clear();\n container.remove();\n delete this._contents[name];\n } else {\n content.update({\n model: data,\n formatter: contentConfig.formatter || formatter\n });\n content.context(this._context);\n content.render(container);\n }\n\n if (!Object.keys(this._contents).length) {\n this.hide();\n }\n return this;\n }\n\n getContents () {\n return Object.values(this._contents);\n }\n\n /**\n * Positions the tooltip at the given x and y position.\n * @param {number} x x position\n * @param {number} y y position\n * @return {Tooltip} Instance of tooltip.\n */\n position (x, y, conf = {}) {\n if (!Object.keys(this._contents).length) {\n this.hide();\n return this;\n }\n this.show();\n const target = this._target;\n const repositionArrow = conf.repositionArrow;\n\n if (target && repositionArrow) {\n const node = this._tooltipContainer.node();\n const config = this._config;\n const arrowDisabled = config.arrow.disabled;\n const arrowWidth = arrowDisabled ? 0 : config.arrow.size;\n const arrowOrient = this._arrowOrientation;\n const outsidePlot = arrowOrient === ARROW_LEFT || arrowOrient === ARROW_RIGHT ?\n (y + node.offsetHeight - arrowWidth) < target.y || y > (target.y + target.height) :\n (x + node.offsetWidth - arrowWidth) < target.x || x > (target.x + target.width);\n\n if (!arrowDisabled) {\n if (outsidePlot) {\n let path;\n this._tooltipArrow.style('display', 'none');\n this._tooltipBackground.style('display', 'none');\n this._tooltipConnectorContainer.style('display', 'block');\n const connector = this._tooltipConnectorContainer.selectAll('path').data([1]);\n const enter = connector.enter().append('path');\n if (arrowOrient === ARROW_LEFT) {\n path = `M ${x} ${y + node.offsetHeight / 2} L ${target.x + target.width}`\n + ` ${target.y + target.height / 2}`;\n } else if (arrowOrient === ARROW_RIGHT) {\n path = `M ${x + node.offsetWidth} ${y + node.offsetHeight / 2}`\n + ` L ${target.x} ${target.y + target.height / 2}`;\n } else if (arrowOrient === ARROW_BOTTOM) {\n path = `M ${x + node.offsetWidth / 2} ${y + node.offsetHeight}`\n + ` L ${target.x + target.width / 2} ${target.y}`;\n }\n enter.merge(connector).attr('d', path).style('display', 'block');\n } else {\n const arrowPos = getArrowPos(arrowOrient, target, {\n x,\n y,\n boxHeight: node.offsetHeight,\n boxWidth: node.offsetWidth\n }, this._config);\n\n placeArrow(this, this._arrowOrientation, arrowPos);\n this._tooltipConnectorContainer.style('display', 'none');\n }\n }\n }\n\n const offset = this._offset || {\n x: 0,\n y: 0\n };\n this._tooltipContainer.style('left', `${offset.x + x}px`).style('top',\n `${offset.y + y}px`);\n\n return this;\n }\n\n /**\n * Positions the tooltip relative to a rectangular box. It takes care of tooltip overflowing the\n * boundaries.\n * @param {Object} dim Dimensions of the plot.\n */\n positionRelativeTo (dim, tooltipConf = {}) {\n let obj;\n let orientation = tooltipConf.orientation;\n this.show();\n if (!dim) {\n this.hide();\n return this;\n }\n\n const extent = this._extent;\n const node = this._tooltipContainer.node();\n\n this._tooltipContainer.style('top', '0px')\n .style('left', '0px');\n const offsetWidth = node.offsetWidth + 2;\n const offsetHeight = node.offsetHeight + 2;\n const config = this._config;\n const offset = this._offset;\n const arrowDisabled = config.arrow.disabled;\n const arrowSize = arrowDisabled ? 0 : config.arrow.size;\n const draw = tooltipConf.draw !== undefined ? tooltipConf.draw : true;\n const topSpace = dim.y;\n // When there is no space in right\n const dimX = dim.x + dim.width + offset.x;\n const rightSpace = extent.width - dimX;\n const leftSpace = dim.x + offset.x - extent.x;\n const positionTop = topSpace > (offsetHeight + arrowSize);\n const positionRight = rightSpace >= offsetWidth + arrowSize;\n const positionLeft = leftSpace >= offsetWidth + arrowSize;\n\n const positionHorizontal = () => {\n let position;\n let x = dim.x + dim.width;\n let y = dim.y;\n\n if (positionRight) {\n position = TOOLTIP_LEFT;\n x += arrowSize;\n } else if (positionLeft) {\n x = dim.x - offsetWidth;\n position = TOOLTIP_RIGHT;\n x -= arrowSize;\n } else {\n position = 'left';\n x += arrowSize;\n }\n if (dim.height < offsetHeight) {\n y = Math.max(0, dim.y + dim.height / 2 - offsetHeight / 2);\n }\n\n const arrowPos = getArrowPos(position, dim, {\n x,\n y,\n boxHeight: offsetHeight,\n boxWidth: offsetWidth\n }, this._config);\n\n return {\n position,\n arrowPos,\n x,\n y\n };\n };\n\n const positionVertical = () => {\n let position;\n let y;\n // Position tooltip at the center of plot\n let x = dim.x - offsetWidth / 2 + dim.width / 2;\n\n // Overflows to the right\n if ((extent.width - (dim.x + offset.x)) < offsetWidth) {\n x = extent.width - offsetWidth - offset.x;\n } else if ((x + offset.x) < extent.x) { // Overflows to the left\n x = extent.x;\n }\n\n if (positionTop) {\n y = dim.y - offsetHeight - arrowSize;\n position = TOOLTIP_BOTTOM;\n } else {\n y = dim.y + dim.height + arrowSize;\n position = TOOLTIP_TOP;\n }\n\n const arrowPos = getArrowPos(position, dim, {\n x,\n y,\n boxHeight: offsetHeight,\n boxWidth: offsetWidth\n }, this._config);\n\n return {\n position,\n arrowPos,\n x,\n y\n };\n };\n\n this._target = dim;\n if (!orientation) {\n if (positionTop) {\n orientation = 'vertical';\n } else if (positionRight || positionLeft) {\n orientation = 'horizontal';\n } else {\n orientation = 'vertical';\n }\n }\n\n if (orientation === 'horizontal') {\n obj = positionHorizontal();\n } else if (orientation === 'vertical') {\n obj = positionVertical();\n }\n\n this._position = {\n x: obj.x,\n y: obj.y\n };\n\n this._arrowPos = obj.arrowPos;\n if (!arrowDisabled) {\n placeArrow(this, obj.position, obj.arrowPos);\n } else {\n this._tooltipArrow.style('display', 'none');\n this._tooltipBackground.style('display', 'none');\n }\n this._arrowOrientation = obj.position;\n draw && this.position(obj.x, obj.y);\n return this;\n }\n\n /**\n * Hides the tooltip element.\n * @return {Tooltip} Instance of tooltip.\n */\n hide () {\n this._tooltipContainer.style('display', 'none');\n this._tooltipConnectorContainer.style('display', 'none');\n return this;\n }\n\n /**\n * Shows the tooltip element.\n * @return {Tooltip} Instance of tooltip.\n */\n show () {\n this._tooltipContainer.style('display', 'block');\n return this;\n }\n\n extent (extent) {\n this._extent = extent;\n return this;\n }\n\n offset (offset) {\n this._offset = offset;\n return this;\n }\n\n remove () {\n this._tooltipContainer.remove();\n this._tooltipBackground.remove();\n this._tooltipConnectorContainer.remove();\n return this;\n }\n}\n","import { FieldType } from 'muze-utils';\n\nexport const strategies = {\n showSelectedItems: (dm) => {\n const dataObj = dm.getData();\n const measures = dataObj.schema.filter(d => d.type === FieldType.MEASURE);\n const aggregatedModel = dm.groupBy([''], measures.reduce((acc, v) => {\n acc[v.name] = v.defAggFn === 'count' ? 'sum' : v.defAggFn;\n return acc;\n }, {}));\n const fieldsObj = dm.getFieldspace().fieldsObj();\n const fieldsConf = aggregatedModel.getFieldsConfig();\n let values = [{\n value: `${dataObj.data.length}`,\n style: {\n 'font-weight': 'bold'\n }\n }, 'Items Selected'];\n const measureNames = measures.map(d => d.name);\n if (measureNames.length) {\n values = [...values, ...[`(${fieldsObj[measureNames[0]].defAggFn().toUpperCase()}) ${measureNames[0]}`,\n {\n value: `${aggregatedModel.getData().data[0][fieldsConf[measureNames[0]].index].toFixed(2)}`,\n style: {\n 'font-weight': 'bold'\n }\n }]];\n }\n return [values];\n }\n};\n","import { Tooltip as TooltipRenderer } from '@chartshq/muze-tooltip';\nimport { FieldType } from 'muze-utils';\nimport { spaceOutBoxes } from '../helper';\nimport { strategies } from './strategies';\nimport { FRAGMENTED } from '../../enums/constants';\nimport SpawnableSideEffect from '../spawnable';\n\nimport './styles.scss';\n\nexport default class Tooltip extends SpawnableSideEffect {\n constructor (...params) {\n super(...params);\n this._tooltips = {};\n this._strategies = strategies;\n this._strategy = 'default';\n }\n\n static defaultConfig () {\n return {\n padding: 5,\n offset: {\n x: 0,\n y: 0\n }\n };\n }\n\n static formalName () {\n return 'tooltip';\n }\n\n apply (selectionSet, payload, options = {}) {\n let totalHeight = 0;\n let totalWidth = 0;\n const dataModel = selectionSet.mergedEnter.model;\n const context = this.firebolt.context;\n const drawingInf = this.drawingContext();\n if ((dataModel.isEmpty() || payload.criteria === null) || selectionSet.isSourceFieldPresent === false) {\n this.hide(options, null);\n return this;\n }\n\n const tooltips = this._tooltips;\n const config = this.config();\n const boundBox = {\n width: drawingInf.width,\n height: drawingInf.height\n };\n const showInPosition = payload.showInPosition;\n const pad = config.padding;\n const dataModels = [];\n const fragmented = config.mode === FRAGMENTED;\n const sourceInf = context.getSourceInfo();\n const fields = sourceInf.fields;\n const xFieldDim = fields.x[0] ? fields.x[0].type() === FieldType.DIMENSION : false;\n const showVertically = !!xFieldDim;\n const tooltipPos = payload.position;\n const boxes = [];\n const enter = {};\n const uids = dataModel.getData().uids;\n if (fragmented) {\n dataModels.push(...uids.map(d => dataModel.select((fieldsArr, i) => i === d, {\n saveChild: false\n })));\n } else {\n dataModels.push(dataModel);\n }\n\n let target = payload.target;\n let targetFields = [];\n if (target) {\n targetFields = target[0] || [];\n const sourceFields = payload.sourceFields;\n const indices = [];\n for (let i = 0, len = targetFields.length; i < len; i++) {\n if (sourceFields.indexOf(targetFields[i]) !== -1) {\n indices.push(i);\n }\n }\n target = target.map(d => d.filter((v, i) => indices.indexOf(i) !== -1));\n }\n\n const plotDimensions = context.getPlotPointsFromIdentifiers(target || payload.criteria, {\n getBBox: true\n });\n\n // Show tooltip for each datamodel\n for (let i = 0; i < dataModels.length; i++) {\n let plotDim = plotDimensions[i];\n if (fragmented) {\n const dimensions = dataModels[i].getData().schema.filter(d => d.type === FieldType.DIMENSION)\n .map(d => d.name);\n plotDim = context.getPlotPointsFromIdentifiers(dataModels[i].project(dimensions), { getBBox: true });\n plotDim = plotDim && plotDim[0];\n }\n\n let dt = dataModels[i];\n if (config.fields) {\n dt = dt.project(config.fields, {\n saveChild: false\n });\n }\n if (config.dataTransform) {\n dt = config.dataTransform(dt, i);\n }\n\n enter[i] = true;\n const layoutContainer = drawingInf.parentContainer;\n const layoutBoundBox = layoutContainer.getBoundingClientRect();\n const unitBoundBox = drawingInf.htmlContainer.getBoundingClientRect();\n\n const offsetLeft = unitBoundBox.left - layoutBoundBox.left;\n const offsetTop = unitBoundBox.top - layoutBoundBox.top;\n const tooltipInst = tooltips[i] = tooltips[i] || new TooltipRenderer(layoutContainer,\n drawingInf.svgContainer);\n\n sourceInf.payload = payload;\n sourceInf.firebolt = this.firebolt;\n sourceInf.detailFields = context.detailFields();\n sourceInf.timeDiffs = context.timeDiffsByField();\n tooltipInst.context(sourceInf);\n const strategy = strategies[options.strategy];\n tooltipInst.content(options.strategy || this._strategy, dt, {\n formatter: strategy,\n order: options.order\n })\n .config(this.config())\n .extent({\n x: 0,\n y: 0,\n width: layoutBoundBox.width,\n height: layoutBoundBox.height\n })\n .offset({\n x: offsetLeft + (config.offset.x || 0),\n y: offsetTop + (config.offset.y || 0)\n });\n\n if (showInPosition) {\n tooltipInst.position(tooltipPos.x + pad, tooltipPos.y + pad);\n } else if (plotDim) {\n tooltipInst.positionRelativeTo({\n x: plotDim.x,\n y: plotDim.y,\n width: plotDim.width || 0,\n height: plotDim.height || 0\n }, {\n orientation: fragmented ?\n (showVertically ? 'horizontal' : 'vertical') : undefined\n });\n } else {\n tooltipInst.hide();\n break;\n }\n\n if (fragmented) {\n const position = tooltipInst._position;\n const tooltipBoundBox = tooltipInst._tooltipContainer.node().getBoundingClientRect();\n\n totalHeight += tooltipBoundBox.height + pad;\n totalWidth += tooltipBoundBox.width + pad;\n if (showVertically ? totalHeight > drawingInf.height : totalWidth > drawingInf.width) {\n break;\n }\n boxes.push({\n x: position.x,\n y: position.y,\n width: tooltipBoundBox.width,\n height: tooltipBoundBox.height,\n tooltip: tooltipInst\n });\n }\n }\n\n for (const key in tooltips) {\n if (!enter[key]) {\n const tooltip = tooltips[key];\n tooltip.content(payload.action, null);\n if (!tooltip.getContents().length) {\n tooltip.remove();\n delete tooltips[key];\n }\n }\n }\n if (fragmented) {\n spaceOutBoxes(boxes, boundBox, showVertically);\n boxes.forEach(box => box.tooltip.position(box.x, box.y, {\n repositionArrow: true\n }));\n }\n return this;\n }\n\n hide (options) {\n const tooltips = this._tooltips;\n for (const key in tooltips) {\n if ({}.hasOwnProperty.call(tooltips, key)) {\n const strategy = options.strategy || this._strategy;\n tooltips[key].content(strategy, null);\n tooltips[key].hide();\n }\n }\n }\n}\n","export const spaceOutBoxes = (boxes, extent, showVertically) => {\n let y;\n let height;\n let x;\n let width;\n let i;\n const pad = 5;\n const len = boxes.length;\n const spaceOutIfOverlap = (firstBox, secondBox, opposite) => {\n x = firstBox.x;\n width = firstBox.width;\n y = firstBox.y;\n height = firstBox.height;\n const bottom = y + height;\n const right = x + width;\n\n if (showVertically) {\n if (opposite ? y < (secondBox.y + secondBox.height) : bottom > secondBox.y) {\n secondBox.y = opposite ? firstBox.y - secondBox.height - pad :\n bottom + pad;\n }\n } else if (opposite ? x < (secondBox.x + secondBox.width) : right > secondBox.x) {\n secondBox.x = opposite ? firstBox.x - secondBox.width - pad :\n right + pad;\n }\n };\n\n boxes.sort((a, b) => (showVertically ? a.y - b.y : a.x - b.x));\n i = 0;\n\n for (i = 0; i < len - 1; i++) {\n spaceOutIfOverlap(boxes[i], boxes[i + 1]);\n }\n\n if ((boxes[i].y + boxes[i].height) > extent.height ||\n (boxes[i].x + boxes[i].width) > extent.width) {\n if (showVertically) {\n boxes[i].y -= (boxes[i].height + boxes[i].y) - extent.height;\n } else {\n boxes[i].x -= (boxes[i].width + boxes[i].x) - extent.width;\n }\n for (i = len - 1; i > 0; i--) {\n spaceOutIfOverlap(boxes[i], boxes[i - 1], true);\n }\n }\n return boxes;\n}\n;\n","import { selectElement, FieldType } from 'muze-utils';\n\nimport './styles.scss';\nimport { CLASSPREFIX } from '../../enums/constants';\nimport SpawnableSideEffect from '../spawnable';\n\nexport default class Crossline extends SpawnableSideEffect {\n static defaultConfig () {\n return {\n className: `${CLASSPREFIX}-crossline-group`,\n bandClass: `${CLASSPREFIX}-crossband`,\n lineClass: `${CLASSPREFIX}-crossline`\n };\n }\n\n static formalName () {\n return 'crossline';\n }\n\n apply (selectionSet, payload) {\n let height;\n let bandWidth;\n let px;\n let width;\n const {\n className,\n bandClass,\n lineClass\n } = this.config();\n const dataModel = selectionSet.mergedEnter.model;\n const drawingInf = this.drawingContext();\n if (payload.criteria && dataModel && dataModel.isEmpty()) {\n return this;\n }\n if (payload.criteria === null || !dataModel) {\n this.hide();\n return this;\n }\n\n const dataObj = dataModel.getData();\n const sourceInf = this.firebolt.context.getSourceInfo();\n const axes = sourceInf.axes;\n const axisFields = sourceInf.fields;\n const fields = selectionSet.fields;\n const data = dataObj.data;\n const fieldsConfig = dataModel.getFieldsConfig();\n const svgContainer = drawingInf.sideEffectGroup;\n\n const elemData = [];\n fields.forEach((field) => {\n const fieldIndex = fieldsConfig[field] && fieldsConfig[field].index;\n const dataArr = data.map(d => d[fieldIndex]);\n const axisIndex = [['x', 0], ['x', 1], ['y', 0], ['y', 1]].find((arr) => {\n const fieldInst = axisFields[arr[0]][arr[1]];\n return fieldInst && fieldInst.type() === FieldType.DIMENSION &&\n fieldInst.getMembers().indexOf(field) !== -1;\n });\n if (axisIndex !== undefined && data.length) {\n const type = axisIndex[0];\n const axis = axes[type][axisIndex[1]];\n const value = dataArr[0];\n bandWidth = axis.getUnitWidth() || 0;\n px = axis.getScaleValue(value) + bandWidth / 2 + drawingInf.xOffset;\n const plotWidth = Math.max(...this.firebolt.context.layers().map(layer => layer.getPlotSpan()[type]));\n const pad = Math.max(...this.firebolt.context.layers().map(layer => layer.getPlotPadding()[type]));\n height = drawingInf.height;\n width = drawingInf.width;\n const startPx = px - plotWidth / 2 - pad / 2;\n const endPx = px + plotWidth / 2 + pad / 2;\n const dataPoint = {};\n if (type === 'y') {\n dataPoint.d = `M 0 ${startPx} L 0 ${endPx} L ${width} ${endPx} L ${width} ${startPx} Z`;\n } else {\n dataPoint.d = `M ${startPx} 0 L ${endPx} 0 L ${endPx} ${height} L ${startPx} ${height} Z`;\n }\n dataPoint.className = plotWidth ? bandClass : lineClass;\n elemData.push(dataPoint);\n }\n });\n if (elemData.length) {\n const parentGroup = this.createElement(svgContainer, 'g', [1], className);\n const elem = this.createElement(parentGroup, 'path', elemData);\n elem.attr('d', d => d.d).style('pointer-events', 'none')\n .attr('class', d => d.className);\n }\n return this;\n }\n\n hide () {\n const className = this.config().className;\n const drawingInf = this.drawingContext();\n selectElement(drawingInf.sideEffectGroup).selectAll(`.${className}`).remove();\n }\n}\n","const fadeFn = (set, context, strategy) => {\n const {\n mergedEnter,\n mergedExit,\n exitSet,\n completeSet\n } = set;\n\n if (!mergedEnter.length && !mergedExit.length) {\n context.applyInteractionStyle(completeSet, {}, strategy, false);\n } else {\n context.applyInteractionStyle(exitSet[1], {}, strategy, true);\n context.applyInteractionStyle(mergedEnter, {}, strategy, false);\n }\n};\n\nexport const strategies = {\n fade: fadeFn,\n focus: (set, context) => {\n const {\n mergedEnter,\n mergedExit,\n completeSet\n } = set;\n if (!mergedEnter.length && !mergedExit.length) {\n context.applyInteractionStyle(completeSet, {}, 'focus', false);\n } else {\n context.applyInteractionStyle(mergedExit, {}, 'focus', true);\n context.applyInteractionStyle(mergedEnter, {}, 'focus', false);\n }\n },\n highlight: (set, context) => {\n const {\n mergedEnter,\n mergedExit,\n entrySet,\n exitSet,\n completeSet\n } = set;\n if (!mergedEnter.length && !mergedExit.length) {\n context.applyInteractionStyle(completeSet, {}, 'highlight', false);\n } else {\n context.applyInteractionStyle(entrySet[1], {}, 'highlight', true);\n context.applyInteractionStyle(exitSet[1], {}, 'highlight', false);\n }\n }\n};\n","import SurrogateSideEffect from '../surrogate';\nimport { strategies } from './strategy';\n\nexport default class PlotHighlighter extends SurrogateSideEffect {\n constructor (...params) {\n super(...params);\n this._strategy = 'highlight';\n this._strategies = strategies;\n }\n\n static formalName () {\n return 'highlighter';\n }\n\n static target () {\n return 'visual-unit';\n }\n\n apply (selectionSet, payload, options = {}) {\n const strategy = this._strategies[options.strategy || this._strategy];\n\n if (selectionSet.isSourceFieldPresent !== false) {\n strategy(selectionSet, this, options.strategy || this._strategy);\n }\n\n return this;\n }\n}\n","import SurrogateSideEffect from '../surrogate';\n\nexport default class FilterEffect extends SurrogateSideEffect {\n static formalName () {\n return 'filter';\n }\n\n static target () {\n return 'visual-unit';\n }\n\n static mutates () {\n return true;\n }\n\n apply (selectionSet, payload) {\n const context = this.firebolt.context;\n const entryModel = selectionSet.mergedEnter.model;\n if (payload.criteria === null) {\n context.clearCaching().resetData();\n } else {\n context.enableCaching().data(entryModel);\n }\n return this;\n }\n}\n","import { DataModel } from 'muze-utils';\n\nimport { CLASSPREFIX } from '../../enums/constants';\nimport SpawnableSideEffect from '../spawnable';\n\nimport './styles.scss';\n\nexport default class AnchorEffect extends SpawnableSideEffect {\n constructor (...params) {\n super(...params);\n const context = this.firebolt.context;\n this._layers = this.addAnchorLayers(context);\n }\n\n static target () {\n return 'visual-unit';\n }\n\n static defaultConfig () {\n return {\n className: `${CLASSPREFIX}-anchors-group`\n };\n }\n\n static formalName () {\n return 'anchors';\n }\n\n addAnchorLayers (context) {\n const layers = [];\n this.firebolt.context.layers().forEach((layer, idx) => {\n const shouldDrawAnchors = layer.shouldDrawAnchors();\n if (shouldDrawAnchors) {\n const encodingFieldsInf = layer.encodingFieldsInf();\n const layerObj = {\n instances: context.addLayer({\n name: `${layer.alias()}-${this.constructor.formalName()}-${idx}`,\n mark: 'point',\n encoding: {\n x: encodingFieldsInf.xField,\n y: encodingFieldsInf.yField,\n color: {\n field: encodingFieldsInf.colorField\n },\n size: {\n field: encodingFieldsInf.sizeField,\n value: this.defaultSizeValue()\n }\n },\n transform: {\n type: 'identity'\n },\n transition: this.getTransitionConfig(),\n calculateDomain: false,\n source: dt => dt.select(() => false, {\n saveChild: false\n }),\n interactive: false,\n render: false\n }),\n linkedLayer: layer\n };\n\n layers.push(layerObj);\n }\n });\n return layers;\n }\n\n getTransitionConfig () {\n return {\n disabled: true\n };\n }\n\n /**\n * Returns the default area value of the anchor point.\n * @return { number } Default area value of anchor.\n */\n defaultSizeValue () {\n return 100;\n }\n\n apply (selectionSet) {\n const self = this;\n const dataModel = selectionSet.mergedEnter.model;\n if (selectionSet.isSourceFieldPresent !== false) {\n const drawingInf = this.drawingContext();\n const sideEffectGroup = drawingInf.sideEffectGroup;\n const className = `${this.config().className}`;\n const layers = this._layers;\n const parentGroup = this.createElement(sideEffectGroup, 'g', [1], `${className}-container`);\n const anchorGroups = this.createElement(parentGroup, 'g', layers);\n anchorGroups.each(function (layer) {\n const instances = layer.instances;\n const elems = self.createElement(this, 'g', instances, className);\n const linkedLayer = layer.linkedLayer;\n const [transformedData, schema] = linkedLayer.getTransformedDataFromIdentifiers(dataModel);\n const transformedDataModel = new DataModel(transformedData, schema);\n elems.each(function (d, i) {\n instances[i].data(transformedDataModel).mount(this);\n });\n });\n }\n return this;\n }\n}\n","import AnchorEffect from './anchors';\nimport { CLASSPREFIX } from '../enums/constants';\n\nexport default class PersistentAnchors extends AnchorEffect {\n static formalName () {\n return 'persistent-anchors';\n }\n\n static defaultConfig () {\n return {\n className: `${CLASSPREFIX}-persistent-anchors`\n };\n }\n\n getTransitionConfig () {\n return {\n disabled: true\n };\n }\n}\n","import AnchorEffect from './anchors';\nimport { CLASSPREFIX } from '../enums/constants';\n\nexport default class BrushAnchors extends AnchorEffect {\n static formalName () {\n return 'brush-anchors';\n }\n\n static defaultConfig () {\n return {\n className: `${CLASSPREFIX}-brush-anchors`\n };\n }\n\n getTransitionConfig () {\n return {\n disabled: true\n };\n }\n}\n","import * as BEHAVIOURS from './enums/behaviours';\n\nexport const behaviourEffectMap = {\n [BEHAVIOURS.BRUSH]: ['selectionBox', {\n name: 'highlighter',\n options: {\n strategy: 'fade'\n }\n }, 'brush-anchors'],\n [`${BEHAVIOURS.BRUSH},${BEHAVIOURS.SELECT}`]: [{\n name: 'tooltip',\n options: {\n strategy: 'showSelectedItems',\n order: 0,\n filter: context => context.config().mode === 'fragmented'\n }\n }],\n [BEHAVIOURS.HIGHLIGHT]: [{\n name: 'highlighter',\n options: {\n strategy: 'highlight'\n }\n }, 'crossline', {\n name: 'tooltip',\n options: {\n order: 9999\n }\n }, 'anchors'],\n [BEHAVIOURS.FILTER]: ['filter'],\n [BEHAVIOURS.SELECT]: [{\n name: 'highlighter',\n options: {\n strategy: 'focus'\n }\n }, 'persistent-anchors']\n};\n","export const CLASSPREFIX = 'muze';\nexport const STACK = 'stack';\nexport const GROUP = 'group';\nexport const IDENTITY = 'identity';\nexport const ANGLE = 'angle';\nexport const RADIUS = 'radius';\nexport const SIZE = 'size';\nexport const COLOR = 'color';\nexport const SHAPE = 'shape';\nexport const OUTER_RADIUS_VALUE = 'outerRadiusValue';\nexport const TEXT_ANCHOR_MIDDLE = 'middle';\nexport const ENCODING = {\n X: 'x',\n Y: 'y',\n X0: 'x0',\n Y0: 'y0'\n};\n\nexport const ASCENDING = 'asc';\n\nexport const AREA_LAYER = 'area';\nexport const ARC_LAYER = 'arc';\nexport const LINE_LAYER = 'line';\nexport const TEXT_LAYER = 'text';\nexport const POINT_LAYER = 'point';\nexport const BAR_LAYER = 'bar';\nexport const TICK_LAYER = 'tick';\nexport const SIMPLE_LAYER = 'simple';\nexport const BASE_LAYER = 'base';\n","import { CLASSPREFIX, STACK } from '../../enums/constants';\n\nexport const defaultConfig = {\n classPrefix: CLASSPREFIX,\n defClassName: 'layer-area',\n className: '',\n interpolate: 'linear',\n transform: {\n type: STACK\n },\n interaction: {\n\n },\n nearestPointThreshold: 10,\n encoding: {\n color: {},\n x: {},\n y: {},\n y0: {},\n strokeOpacity: {\n value: 1\n }\n },\n transition: {\n effect: 'cubic',\n duration: 1000\n },\n connectNullData: false\n};\n","import { ERROR_MSG } from 'muze-utils';\n\n/**\n * This is an interface class which any new layer class has to extend.\n *\n * @example\n * class BarLayer extends BaseLayer {\n * update (params) {\n * // super.update(params);\n * // Update the bar layer\n * }\n * }\n * @class\n */\nexport default class SimpleLayer {\n\n formalName () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Sets or gets the dependencies.\n * @param {Object} dependencies Dependencies needed by layer\n * @return {BaseLayer} Instance of base layer.\n */\n dependencies () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Returns the config of the layer\n *\n * @param {Object} config Configuration of layer\n * @return {Object} configuration of layer\n */\n config () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Acts as a getter or setter function\n * When setter\n * Returns the datamodel of the layer\n * @param { DataModel } dataModel instance of DataModel\n * @return { DataModel } DataModel instance of the layer\n */\n data () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Returns a serialized schema of the layer\n * @return {Object} Serialized schema\n */\n serialize () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Returns the unique identifier of this layer\n * @return {string} id of the layer\n */\n id () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n /*\n * This method resolves the x, y, x0 and y0 values from the transformed data.\n * It also checks the type of transformed data for example, if it is a stacked data\n * then it fetches the y and y0 values from the stacked data.\n * @param {Array.} transformedData transformed data\n * @param {Object} fieldMap field definitions\n * @param {string} transformType type of transformed data - stack, group or identity.\n * @return {Array.} Normalized data\n * @private\n */\n normalizeTransformedData () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Gets the transform method from transform factory based on type of transform. It then calls the\n * transform method with the data and passes the configuration parameters of transform such as\n * groupBy, value field, etc.\n *\n * @param {DataModel} dataModel Instance of dataModel\n * @param {Object} config configuration for transforming data\n * @return {Array.} Transformed data.\n * @private\n */\n getTransformedData () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Calculates the domain from the data.\n * It checks the type of field and calculates the domain based on that. For example, if it\n * is a quantitative or temporal field, then it calculates the min and max from the data or\n * if it is a nominal field then it gets all the values from the data of that field.\n * @param {Array} data DataArray\n * @return {Array} Domain values array.\n */\n _calculateDomainFromData () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Returns the domain for the axis.\n *\n * @param {string} encodingType type of encoding x, y, color, etc.\n * @return {Object} Axis domains\n */\n getDomain () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Abstract method for getting nearest point\n * @return {BaseLayer} Instance of base layer\n */\n getNearestPoint () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Abstract method for highlighting points\n * @return {BaseLayer} Instance of base layer\n */\n highlightPoint () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Abstract method for deselecting points\n * @return {BaseLayer} Instance of base layer\n */\n dehighlightPoint () {\n return this;\n }\n\n linkLayerStore () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Sets the container element for the layer to be renderered.\n * @param {SVGElement} mountPoint SVG element or group element.\n */\n mount () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n render () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n}\n","export const DATA = 'data';\nexport const CONFIG = 'config';\nexport const MEASUREMENT = 'measurement';\nexport const AXES = 'axes';\nexport const NORMALIZED_DATA = 'normalizedData';\nexport const TRANSFORMED_DATA = 'transformedData';\nexport const DOMAIN = 'domain';\nexport const MOUNT = 'mount';\nexport const FIELDMAP = 'fieldMap';\nexport const DATA_UPDATED = 'dataUpdated';\n","/**\n * @module Axis\n * This file declares a class that is used to render an axis to add meaning to\n * plots.\n */\nimport { Symbols } from 'muze-utils';\nimport * as AxisOrientation from '../enums/axis-orientation';\n\n/**\n * @module Axis\n * This file exports constants that are used to reference axis orientations\n * in a consistent manner.\n */\nexport const BOTTOM = 'bottom';\nexport const TOP = 'top';\nexport const LEFT = 'left';\nexport const RIGHT = 'right';\n\n/**\n * This object is used to associate the axis orientation with the d3 class\n * used to represent that axis.\n */\nexport const axisOrientationMap = {\n [AxisOrientation.LEFT]: Symbols.axisLeft,\n [AxisOrientation.BOTTOM]: Symbols.axisBottom,\n [AxisOrientation.RIGHT]: Symbols.axisRight,\n [AxisOrientation.TOP]: Symbols.axisTop\n};\n","/**\n * @module axis\n * This file exports constants used to reference scale type\n * consistently throughout the project.\n */\nexport const LINEAR = 'linear';\nexport const BAND = 'band';\nexport const TIME = 'temporal';\nexport const COLOR = 'color';\nexport const ORDINAL = 'ordinal';\nexport const QUANTIZE = 'quantize';\nexport const QUANTILE = 'quantile';\nexport const LOG = 'log';\nexport const POW = 'pow';\nexport const IDENTITY = 'identity';\nexport const SEQUENTIAL = 'sequential';\nexport const THRESHOLD = 'threshold';\n","export const CLASSPREFIX = 'muze';\n\nexport const CONTINOUS = 'continous';\nexport const DISCRETE = 'discrete';\nexport const SEQUENTIAL = 'sequential';\nexport const ORDINAL = 'ordinal';\nexport const LINEAR = 'linear';\nexport const THRESHOLD = 'threshold';\nexport const QUANTIZE = 'quantize';\nexport const QUANTILE = 'quantile';\n\nexport const COLOR = 'color';\nexport const SHAPE = 'shape';\nexport const SIZE = 'size';\n\nexport const DOMAIN = 'domain';\nexport const BAND = 'band';\nexport const HIDDEN = 'hidden';\nexport const NUMBER = 'number';\nexport const BOTTOM = 'bottom';\nexport const TOP = 'top';\n\nexport const RGB = 'rgb';\nexport const HEX = 'hex';\nexport const HSLA = 'hsla';\nexport const HSL = 'hsl';\n\n","import { scales, colorSchemes } from 'muze-utils';\n\nimport {\n SEQUENTIAL,\n ORDINAL,\n LINEAR,\n CONTINOUS,\n THRESHOLD,\n QUANTIZE\n} from './enums/constants';\n\nimport * as ScaleType from './enums/scale-type';\n\nconst {\n scaleLinear,\n scaleThreshold,\n scaleLog,\n scalePow,\n scaleIdentity,\n scaleOrdinal,\n scaleSequential,\n scaleQuantize,\n scaleQuantile,\n schemeCategory10,\n schemeCategory20,\n schemeCategory20b,\n scaleBand,\n scaleTime\n} = scales;\nexport const scaleMap = {\n [ScaleType.LINEAR]: scaleLinear,\n [ScaleType.BAND]: scaleBand,\n [ScaleType.QUANTIZE]: scaleQuantize,\n [ScaleType.QUANTILE]: scaleQuantile,\n [ScaleType.THRESHOLD]: scaleThreshold,\n [ScaleType.SEQUENTIAL]: scaleSequential,\n [ScaleType.LOG]: scaleLog,\n [ScaleType.POW]: scalePow,\n [ScaleType.IDENTITY]: scaleIdentity,\n [ScaleType.TIME]: scaleTime,\n [ScaleType.COLOR]: scaleLinear,\n [ScaleType.ORDINAL]: scaleOrdinal\n};\nexport const SCHEMES = {\n SCHEME1: schemeCategory10,\n SCHEME2: schemeCategory20,\n SCHEME3: schemeCategory20b\n};\n\n/**\n * Accepts a scheme in a string format and returns the scale from d3-scale-chromatic\n *\n * @export\n * @param {string} scheme a string representing the kind of scheme for the color axis\n * @return {Object} The corresponding scale from a scheme type from d3 chromatic scale\n */\nexport function getScheme (scheme) {\n if (scheme[0] === 'i') {\n return scaleSequential(colorSchemes[scheme]);\n }\n return scaleOrdinal(colorSchemes[scheme]);\n}\n\n/**\n *\n *\n * @export\n * @param {*} scheme\n * @returns\n */\nexport function getSchemeType (scheme) {\n let schemeType = '';\n if (scheme && typeof (scheme) === 'string') {\n schemeType = scheme[0] === 'i' ? SEQUENTIAL : ORDINAL;\n } else {\n schemeType = ORDINAL;\n }\n return schemeType;\n}\n\n/**\n * This function is used to create a scale that is assigned to\n * an instance of axis.\n *\n * @export\n * @param {Object} params the input parameters to create a Scale object\n * @param {string} params.type the type of scale\n * @param {Array} params.range the range of scale\n * @return {Object} instance of scale\n */\nexport function createScale (params) {\n if (!params.type || !scaleMap[params.type]) {\n throw new Error(`${params.type} is not a valid scale type`);\n }\n if (!Array.isArray(params.range)) {\n throw new Error('range parameter must be an array');\n }\n let scaleFactory = null;\n const range = params.range;\n // @todo: do it using scale decorator\n if (params.type === LINEAR && params.interpolator) {\n scaleFactory = scaleMap[params.interpolator];\n if (params.interpolator === ScaleType.POW) {\n return scaleFactory().range(range).exponent(params.exponent);\n } else if (params.interpolator === ScaleType.LOG) {\n return scaleFactory().range(range).base([params.base]);\n }\n } else {\n scaleFactory = scaleMap[params.type];\n }\n\n if (params.type === QUANTIZE) {\n scaleFactory().nice();\n }\n return scaleFactory().range(range);\n}\n\n/**\n * This method is used to update the range of a scale\n * so that the core module can remain agnostic of the d3\n * scale api.\n *\n * @export\n * @param {Scale} scale Instance of d3 Scale.\n * @param {Array} range new range of the scale.\n * @return {Scale} Updated scale.\n */\nexport function updateScaleRange (scale, range) {\n return scale.range(range);\n}\n\n/**\n *\n *\n * @export\n * @param {*} domainType\n * @param {*} rangeType\n * @param {*} steps\n * @returns\n */\nexport function getScaleType (domainType, rangeType, steps) {\n if (rangeType === CONTINOUS) {\n return LINEAR;\n }\n if (domainType === CONTINOUS) {\n if (steps instanceof Array) {\n return THRESHOLD;\n }\n return QUANTIZE;\n }\n return ORDINAL;\n}\n","import { getUniqueId } from 'muze-utils';\nimport { CLASSPREFIX } from '../enums/constants';\n\n/**\n *\n *\n */\nexport const defaultConfig = {\n id: getUniqueId(),\n axisName: {\n defClassName: 'axis-name'\n },\n axisNamePadding: 12,\n base: 10,\n classPrefix: CLASSPREFIX,\n className: `${CLASSPREFIX}-axis`,\n exponent: 1,\n interpolator: 'linear',\n fixedBaseline: true,\n labels: {\n rotation: 0,\n smartTicks: false\n },\n orientation: 'left',\n maxHeight: 50, // @todo: height and width wont be hardcoded\n maxWidth: 40,\n numberFormat: val => val,\n padding: 0.3,\n nice: true,\n numberOfTicks: 10,\n rotate: false,\n show: true,\n showAxisName: true,\n showInnerTicks: null,\n showOuterTicks: null,\n style: {},\n type: 'linear',\n tickFormat: null,\n tickValues: null,\n xOffset: undefined,\n yOffset: undefined\n};\n\n","/**\n * This file exports functionality that is used to render axis.\n */\nimport { selectElement, makeElement, angleToRadian } from 'muze-utils';\nimport * as AxisOrientation from './enums/axis-orientation';\nimport { LINEAR, HIDDEN, BOTTOM, TOP } from './enums/constants';\n\n/**\n *\n *\n * @param {*} instance\n * @param {*} container\n * @param {*} labelManager\n * @param {*} config\n */\nconst rotateAxis = (instance, tickText, labelManager, config) => {\n const axis = instance.axis();\n const scale = instance.scale();\n const {\n orientation,\n labels,\n fixedBaseline,\n type\n } = config;\n let { rotation } = labels;\n\n const tickSize = instance.getTickSize();\n\n tickText.each(function (datum, index) {\n let yShift;\n let xShift;\n const tickFormatter = axis.tickFormat() ? axis.tickFormat : scale.tickFormat;\n const temp = tickFormatter ? tickFormatter()(datum) : datum;\n\n datum = temp.toString();\n\n const tickLabelDim = labelManager.getOriSize(datum);\n const width = tickLabelDim.width * 0.5;\n const height = tickLabelDim.height * 0.5;\n\n if (rotation < 0) {\n rotation = 360 + rotation;\n }\n\n const quadrant = 4 - Math.floor(rotation / 90);\n const rotationNormalizer = ((quadrant % 2 === 0) ? rotation : 180 * Math.ceil(rotation / 180) - rotation) % 180;\n\n yShift = Math.sqrt(height ** 2 + width ** 2) * Math.sin(angleToRadian(rotationNormalizer));\n\n if ((quadrant === 3 || quadrant === 2) && !(rotationNormalizer > 67.5 && rotationNormalizer <= 90)) {\n yShift += height * 2;\n }\n xShift = width;\n\n if (rotation === 90) {\n xShift = height;\n } else if (rotation === 270) {\n xShift = -height;\n } else {\n xShift = 0;\n }\n\n if (orientation === AxisOrientation.TOP) {\n xShift = (index === 0 && fixedBaseline && type === LINEAR) ? xShift + xShift / 2 : xShift;\n selectElement(this)\n .attr('transform', `translate(${-xShift + tickSize} \n ${-yShift - tickSize}) rotate(${rotation})`);\n } else {\n xShift = (index === 0 && fixedBaseline && type === LINEAR) ? xShift - xShift / 2 : xShift;\n selectElement(this)\n .attr('transform', `translate(${xShift - tickSize} \n ${yShift + tickSize}) rotate(${rotation})`);\n }\n });\n return tickText;\n};\n\n/**\n *\n *\n * @param {*} tickText\n * @param {*} axisInstance\n */\nconst changeTickOrientation = (selectContainer, axisInstance, tickSize) => {\n const {\n _smartTicks\n } = axisInstance;\n const config = axisInstance.config();\n const labelManager = axisInstance.dependencies().labelManager;\n const {\n labels,\n orientation\n } = config;\n const {\n rotation,\n smartTicks: isSmartTicks\n } = labels;\n\n const tickText = selectContainer.selectAll('.tick text');\n tickText.selectAll('tspan').remove();\n\n // rotate labels if not enough space is available\n if (rotation !== 0 && isSmartTicks === false && (orientation === TOP || orientation === BOTTOM)) {\n rotateAxis(axisInstance, tickText, labelManager, config);\n } else if (rotation === 0 && isSmartTicks === false) {\n tickText.attr('transform', '');\n } else {\n tickText.attr('y', 0)\n .attr('x', 0)\n .text('');\n const tspan = makeElement(tickText, 'tspan', (d, i) => _smartTicks[i].lines, 'smart-text');\n tspan.attr('dy', '0')\n .style('opacity', '0')\n .transition()\n .duration(1000)\n .attr('dy', (d, i) => {\n if (orientation === BOTTOM || i !== 0) {\n return _smartTicks[i].oriTextHeight;\n }\n return -_smartTicks[i].oriTextHeight * (_smartTicks[i].lines.length - 1) - tickSize;\n })\n .style('opacity', 1)\n .attr('x', 0)\n .text(e => e);\n }\n\n return tickText;\n};\n\nconst setFixedBaseline = (axisInstance) => {\n const {\n fixedBaseline\n } = axisInstance.config();\n if (fixedBaseline) {\n axisInstance.setFixedBaseline();\n }\n};\n\n/**\n *\n *\n * @param {*} textNode\n * @param {*} orientation\n * @param {*} measures\n */\nconst setAxisNamePos = (textNode, orientation, measures) => {\n const {\n axisNameHeight,\n yOffset,\n labelOffset,\n availableSpace\n } = measures;\n switch (orientation) {\n case AxisOrientation.LEFT:\n textNode.attr('transform',\n `translate(${-(availableSpace.width - axisNameHeight)},${yOffset + labelOffset})rotate(-90)`);\n break;\n case AxisOrientation.RIGHT:\n textNode.attr('transform',\n `translate(${(availableSpace.width - axisNameHeight)},${yOffset + labelOffset})rotate(90)`);\n break;\n case AxisOrientation.TOP:\n textNode.attr('transform',\n `translate(${availableSpace.width / 2},${-availableSpace.height + axisNameHeight})`);\n break;\n case AxisOrientation.BOTTOM:\n textNode.attr('transform',\n `translate(${availableSpace.width / 2},${availableSpace.height - axisNameHeight / 2})`);\n break;\n default:\n }\n return textNode;\n};\n\n/**\n * This method is used to render the axis inside an\n * svg container.\n *\n * @export\n * @param {Object} axisInstance the nput object required to render axis\n * @param {string} axisInstance.orientation the orientation of axis\n * @param {Object} axisInstance.scale instance of d3 scale\n * @param {SVGElement} axisInstance.container the container in which to render\n */\nexport function renderAxis (axisInstance) {\n const config = axisInstance.config();\n const labelManager = axisInstance.dependencies().labelManager;\n const mount = axisInstance.mount();\n const range = axisInstance.range();\n const axis = axisInstance.axis();\n const scale = axisInstance.scale();\n const {\n _axisNameStyle,\n _tickLabelStyle,\n formatter,\n tickValues\n } = axisInstance;\n const {\n orientation,\n name,\n labels,\n xOffset,\n yOffset,\n axisNamePadding,\n className,\n showAxisName,\n show,\n id,\n interpolator,\n classPrefix\n } = config;\n\n if (!show) {\n return;\n }\n\n const tickSize = axisInstance.getTickSize();\n\n const selectContainer = makeElement(selectElement(mount), 'g', [axisInstance], `${className}`, {},\n key => key.config().id);\n\n // Set style for tick labels\n labelManager.setStyle(_tickLabelStyle);\n\n // @to-do: Need to write a configuration override using decorator pattern\n if (interpolator === 'linear') {\n // Set ticks for the axis\n axisInstance.setTickValues();\n }\n\n const labelFunc = scale.ticks || scale.quantile || scale.domain;\n\n formatter && axis.tickFormat(formatter(tickValues || axis.tickValues() || labelFunc()));\n\n // Get range(length of range)\n const availableSpace = Math.abs(range[0] - range[1]);\n\n // Get width and height taken by axis labels\n const labelProps = axisInstance.axisDimensions().tickLabelDim;\n\n // Draw axis ticks\n selectContainer.attr('transform', `translate(${xOffset},${yOffset})`);\n setFixedBaseline(axisInstance);\n if (labels.smartTicks === false) {\n selectContainer.transition()\n .duration(1000).call(axis);\n } else {\n selectContainer.call(axis);\n }\n selectContainer.selectAll('.tick').classed(`${classPrefix}-ticks`, true);\n selectContainer.selectAll('.tick line').classed(`${classPrefix}-tick-lines`, true);\n\n // Set classes for ticks\n const tickText = selectContainer.selectAll('.tick text');\n tickText.classed(`${classPrefix}-ticks`, true)\n .classed(`${classPrefix}-ticks-${id}`, true);\n changeTickOrientation(selectContainer, axisInstance, tickSize);\n\n // Create axis name\n const textNode = makeElement(selectContainer, 'text', [name], `${classPrefix}-axis-name`)\n .attr('text-anchor', 'middle')\n .classed(`${classPrefix}-axis-name-${id}`, true)\n .text(d => d);\n\n // Hide axis name if show is off\n textNode.classed(HIDDEN, !showAxisName);\n\n // render labels based on orientation of axis\n const labelOffset = availableSpace / 2;\n\n // Set style for axis name\n labelManager.setStyle(_axisNameStyle);\n const axisNameSpace = labelManager.getOriSize(name);\n const measures = {\n labelProps,\n tickSize,\n axisNamePadding,\n axisNameHeight: axisNameSpace.height,\n axisNameWidth: axisNameSpace.width,\n yOffset,\n xOffset,\n labelOffset,\n availableSpace: axisInstance.availableSpace()\n };\n // Set position for axis name\n setAxisNamePos(textNode, orientation, measures);\n}\n","import { TOP, LEFT, BOTTOM } from '../enums/axis-orientation';\nimport { LOG } from '../enums/scale-type';\n\nexport const getNumberOfTicks = (availableSpace, labelDim, axis, axisInstance) => {\n const ticks = axis.scale().ticks();\n const { numberOfTicks } = axisInstance.config();\n const tickLength = ticks.length;\n let numberOfValues = tickLength;\n\n if (tickLength * (labelDim * 1.5) > availableSpace) {\n numberOfValues = Math.floor(availableSpace / (labelDim * 1.5));\n }\n\n numberOfValues = Math.min(numberOfTicks, Math.max(1, numberOfValues));\n return axis.scale().ticks(numberOfValues);\n};\n\nexport const sanitizeDomain = (domain, context) => {\n const interpolator = context.config().interpolator;\n // @todo: Get from scale decorator\n if (interpolator === LOG && domain[0] >= 0) {\n return [Math.max(1, domain[0]), Math.max(1, domain[1])];\n }\n return domain;\n};\n\nexport const getTickFormatter = (tickFormat, numberFormat) => {\n if (tickFormat) {\n return ticks => (val, i) => tickFormat(numberFormat(val), i, ticks);\n }\n return () => val => numberFormat(val);\n};\n\n/**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\nexport const getTickLabelInfo = (context) => {\n let largestLabel = '';\n let labelProps;\n let smartTick = {};\n let axisTickLabels;\n const scale = context.scale();\n const allLabelLengths = [];\n const { tickFormat, tickValues, numberFormat } = context.config();\n const labelFunc = scale.ticks || scale.quantile || scale.domain;\n // set the style on the shared label manager instance\n const { labelManager } = context.dependencies();\n\n labelManager.setStyle(context._tickLabelStyle);\n // get the values along the domain\n\n axisTickLabels = tickValues || labelFunc();\n // Get the tick labels\n axisTickLabels = axisTickLabels.map((originalLabel, i) => {\n const formattedLabel = numberFormat(originalLabel);\n\n // get formats of tick if any\n const label = tickFormat ? tickFormat(formattedLabel, i, axisTickLabels) : (scale.tickFormat ?\n numberFormat(scale.tickFormat()(originalLabel)) : formattedLabel);\n\n // convert to string for quant values\n const temp = label.toString();\n // Get spaces for all labels\n allLabelLengths.push(labelManager.getOriSize(temp));\n // Getting largest label\n if (temp.length > largestLabel.length) {\n largestLabel = temp;\n smartTick = context.smartTicks() ? context.smartTicks()[i] : {};\n labelProps = allLabelLengths[i];\n }\n return label;\n });\n\n labelProps = labelManager.getOriSize(largestLabel);\n\n return { largestLabel, largestLabelDim: labelProps, axisTickLabels, allLabelLengths, smartTick };\n};\n\n/**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\nexport const computeAxisDimensions = (context) => {\n let tickLabelDim = {};\n const {\n name,\n labels,\n tickValues\n } = context.config();\n const angle = ((labels.smartTicks) ? 0 : labels.rotation) * Math.PI / 180;\n const { labelManager } = context.dependencies();\n const {\n largestLabelDim,\n axisTickLabels,\n smartTick\n } = getTickLabelInfo(context);\n const { height: labelHeight, width: labelWidth } = largestLabelDim;\n // get the domain of axis\n const domain = context.domain();\n\n if (domain.length === 0) {\n return null;\n }\n if (context._rotationLock === false) {\n context.setRotationConfig(tickValues || axisTickLabels, largestLabelDim.width);\n context._rotationLock = false;\n }\n if (labels.smartTicks) {\n tickLabelDim = smartTick;\n } else {\n tickLabelDim = {\n width: Math.abs(labelHeight * Math.sin(angle)) + Math.abs(labelWidth * Math.cos(angle)),\n height: Math.abs(labelWidth * Math.sin(angle)) + Math.abs(labelHeight * Math.cos(angle))\n };\n }\n\n labelManager.setStyle(context._axisNameStyle);\n return {\n tickSize: context.getTickSize(),\n tickLabelDim,\n axisLabelDim: labelManager.getOriSize(name),\n largestLabelDim,\n axisTickLabels\n };\n};\n\n/**\n*\n*\n* @memberof SimpleAxis\n*/\nexport const setOffset = (context) => {\n let x = 0;\n let y = 0;\n const logicalSpace = context.logicalSpace();\n const config = context.config();\n const {\n orientation,\n xOffset,\n yOffset\n } = config;\n if (orientation === LEFT) {\n x = xOffset === undefined ? logicalSpace.width : xOffset;\n }\n if (orientation === TOP) {\n y = yOffset === undefined ? logicalSpace.height : yOffset;\n }\n context.config({ xOffset: x, yOffset: y });\n};\n\n/**\n *\n *\n * @param {*} timeDiff\n * @param {*} range\n * @param {*} domain\n * @returns\n */\nconst getAxisOffset = (timeDiff, range, domain) => {\n const pvr = Math.abs(range[1] - range[0]) / (domain[1] - domain[0]);\n const width = (pvr * timeDiff);\n const avWidth = (range[1] - range[0]);\n const bars = avWidth / width;\n const barWidth = avWidth / (bars + 1);\n const diff = avWidth - barWidth * bars;\n\n return diff / 2;\n};\n\nexport const adjustRange = (minDiff, range, domain, orientation) => {\n const diff = getAxisOffset(minDiff, range, domain);\n\n if (orientation === TOP || orientation === BOTTOM) {\n range[0] += diff;\n range[1] -= diff;\n } else {\n range[0] -= diff;\n range[1] += diff;\n }\n return range;\n};\n\n /**\n * Listener attached to the axis on change of parameters.\n *\n * @param {Function} callback to be excuted on change of domain range etc\n * @memberof SimpleAxis\n */\nexport const registerChangeListeners = (context) => {\n const store = context.store();\n\n store.model.next(['domain', 'range', 'mount', 'config'], (...params) => {\n context.render();\n context._domainLock = false;\n context._eventList.forEach((e) => {\n e.action instanceof Function && e.action(...params);\n });\n }, true);\n return context;\n};\n\n/**\n *\n *\n * @param {*} axisDimensions\n * @param {*} config\n * @param {*} range\n * @returns\n */\nexport const getHorizontalAxisSpace = (context, axisDimensions, config, range) => {\n let width;\n let height;\n const {\n tickSize,\n tickLabelDim,\n axisLabelDim\n } = axisDimensions;\n const {\n axisNamePadding,\n showAxisName,\n tickValues\n } = config;\n const domain = context.domain();\n const { height: axisDimHeight } = axisLabelDim;\n const { height: tickDimHeight, width: tickDimWidth } = tickLabelDim;\n\n width = range && range.length ? range[1] - range[0] : 0;\n\n height = 0;\n if (tickValues) {\n const minTickDiff = context.getMinTickDifference();\n const [min, max] = [Math.min(...tickValues, ...domain), Math.max(...tickValues, ...domain)];\n\n width = ((max - min) / Math.abs(minTickDiff)) * (tickDimWidth + context._minTickDistance.width);\n }\n if (!width || width === 0) {\n height = Math.max(tickDimWidth, tickDimHeight);\n } else {\n height = tickDimHeight;\n }\n height += (showAxisName ? (axisDimHeight + axisNamePadding) : 0) + tickSize;\n return {\n width,\n height\n };\n};\n\n/**\n *\n *\n * @param {*} axisDimensions\n * @param {*} config\n * @param {*} range\n * @returns\n */\nexport const getVerticalAxisSpace = (context, axisDimensions, config) => {\n let height;\n let width;\n const {\n tickSize,\n tickLabelDim,\n axisLabelDim\n } = axisDimensions;\n const {\n axisNamePadding,\n showAxisName,\n tickValues\n } = config;\n const domain = context.domain();\n const { height: axisDimHeight } = axisLabelDim;\n const { height: tickDimHeight, width: tickDimWidth } = tickLabelDim;\n\n height = 0;\n width = tickDimWidth;\n if (tickValues) {\n const minTickDiff = context.getMinTickDifference();\n const [min, max] = [Math.min(...tickValues, ...domain), Math.max(...tickValues, ...domain)];\n\n height = ((max - min) / Math.abs(minTickDiff)) * (tickDimHeight);\n }\n width += (showAxisName ? axisDimHeight : 0) + tickSize + axisNamePadding;\n\n return {\n height,\n width\n };\n};\n\n /**\n * Calculates the logical space of the axis\n * @return {Object} Width and height occupied by the axis.\n */\nexport const calculateBandSpace = (context) => {\n const range = context.range();\n const config = context.config();\n const {\n orientation,\n show\n } = config;\n const axisDimensions = context.getAxisDimensions();\n const {\n largestLabelDim,\n axisTickLabels\n } = axisDimensions;\n const { height: largestDimHeight, width: largestDimWidth } = largestLabelDim;\n\n if (orientation === TOP || orientation === BOTTOM) {\n let { width, height } = getHorizontalAxisSpace(context, axisDimensions, config, range);\n if (!width || width === 0) {\n width = axisTickLabels.length * (Math.min(largestDimWidth + context._minTickDistance.width,\n largestDimHeight + context._minTickDistance.width));\n }\n if (show === false) {\n height = 0;\n }\n return {\n width,\n height\n };\n }\n\n let { width, height } = getVerticalAxisSpace(context, axisDimensions, config, range);\n\n if (!height || height === 0) {\n height = axisTickLabels.length * (largestDimHeight + largestDimHeight / 2) + largestDimHeight;\n }\n if (show === false) {\n width = 0;\n }\n return {\n width,\n height\n };\n};\n\n/**\n * Calculates the logical space of the axis\n * @return {Object} Width and height occupied by the axis.\n */\nexport const calculateContinousSpace = (context) => {\n const range = context.range();\n const config = context.config();\n const axisDimensions = context.getAxisDimensions();\n\n const {\n orientation,\n show,\n showAxisName\n } = config;\n const {\n axisLabelDim\n } = axisDimensions;\n\n if (show === false) {\n return {\n width: 0,\n height: 0\n };\n }\n\n const { width: axisDimWidth } = axisLabelDim;\n\n if (orientation === TOP || orientation === BOTTOM) {\n const { width, height } = getHorizontalAxisSpace(context, axisDimensions, config);\n const axisWidth = Math.max(width, axisDimWidth);\n\n return {\n width: axisWidth,\n height\n };\n }\n\n const { width, height } = getVerticalAxisSpace(context, axisDimensions, config, range);\n\n const effHeight = Math.max(height, showAxisName ? axisDimWidth : 0);\n\n return {\n width,\n height: effHeight\n };\n};\n\n","import { mergeRecursive } from 'muze-utils';\n\nexport const PROPS = {\n availableSpace: {},\n axisDimensions: {},\n config: {\n sanitization: (context, value) => {\n if (value.labels && value.labels.rotation) {\n context._rotationLock = true;\n }\n value = mergeRecursive(context._config || {}, value);\n value.axisNamePadding = Math.max(value.axisNamePadding, 0);\n context.axis(context.createAxis(value));\n context.store().commit('config', value);\n return value;\n }\n },\n logicalSpace: {},\n mount: {\n sanitization: (context, value) => {\n context.store().commit('mount', value);\n return value;\n }\n },\n range: {\n sanitization: (context, value) => {\n context.scale().range(value);\n context.logicalSpace(null);\n context.store().commit('range', value);\n return value;\n }\n },\n\n smartTicks: {},\n store: {},\n tickSize: {}\n};\n","import {\n Store,\n mergeRecursive,\n getSmartComputedStyle,\n selectElement,\n generateGetterSetters,\n getUniqueId\n} from 'muze-utils';\nimport { createScale } from '../scale-creator';\nimport { axisOrientationMap, BOTTOM, TOP } from '../enums/axis-orientation';\nimport { defaultConfig } from './default-config';\nimport { renderAxis } from '../axis-renderer';\nimport { DOMAIN, BAND } from '../enums/constants';\nimport {\n computeAxisDimensions,\n setOffset,\n registerChangeListeners,\n calculateContinousSpace\n} from './helper';\nimport { PROPS } from './props';\n\nexport default class SimpleAxis {\n\n /**\n * Creates an instance of SimpleAxis.\n * @memberof SimpleAxis\n */\n constructor (config, dependencies) {\n this._id = getUniqueId();\n\n this._dependencies = dependencies;\n this._mount = null;\n this._range = [];\n this._domain = [];\n this._domainLock = false;\n this._rotationLock = false;\n this._axisDimensions = {};\n this._eventList = [];\n\n const defCon = mergeRecursive({}, this.constructor.defaultConfig());\n const simpleConfig = mergeRecursive(defCon, config);\n\n const bodyElem = selectElement('body');\n const classPrefix = simpleConfig.classPrefix;\n this._tickLabelStyle = getSmartComputedStyle(bodyElem, `${classPrefix}-ticks`);\n this._axisNameStyle = getSmartComputedStyle(bodyElem, `${classPrefix}-axis-name`);\n dependencies.labelManager.setStyle(this._tickLabelStyle);\n this._minTickDistance = dependencies.labelManager.getOriSize('ww');\n\n generateGetterSetters(this, PROPS);\n this.store(new Store({\n domain: this.domain(),\n range: this.range(),\n config: simpleConfig,\n mount: this.mount()\n }));\n this.config(simpleConfig);\n\n this._scale = this.createScale(this._config);\n this._axis = this.createAxis(this._config);\n\n registerChangeListeners(this);\n }\n\n /**\n * Returns the default configuration of simple axis\n * @return {Object} default configurations\n */\n static defaultConfig () {\n return defaultConfig;\n }\n\n /**\n * Sets a fixed baseline for the first ticks so that they can render effectively within\n * the given area\n *\n * @param {*} tickText\n * @param {*} config\n * @param {*} labelManager\n */\n setFixedBaseline () {\n return this;\n }\n\n /**\n *\n *\n * @readonly\n * @memberof SimpleAxis\n */\n scale (...params) {\n if (params.length) {\n this._scale = params[0];\n return this;\n }\n return this._scale;\n }\n\n /**\n *\n *\n * @readonly\n * @memberof SimpleAxis\n */\n axis (...params) {\n if (params.length) {\n this._axis = params[0];\n return this;\n }\n return this._axis;\n }\n\n /**\n *\n *\n * @param {*} d\n * @returns\n * @memberof SimpleAxis\n */\n domain (...domain) {\n if (domain.length) {\n this.scale().domain(domain[0]);\n this._domain = this.scale().domain();\n this.smartTicks(this.setTickConfig());\n this.store().commit(DOMAIN, this._domain);\n this.logicalSpace(null);\n return this;\n }\n return this._domain;\n }\n\n /**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\n dependencies () {\n return this._dependencies;\n }\n\n /**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\n createScale (config) {\n const {\n base,\n padding,\n interpolator,\n exponent\n } = config;\n const range = this.range();\n const scale = createScale({\n padding,\n interpolator,\n exponent,\n base,\n range,\n type: this.constructor.type()\n });\n\n return scale;\n }\n\n getTickFormatter (tickFormat, numberFormat) {\n if (tickFormat) {\n return ticks => (val, i) => tickFormat(numberFormat(val), i, ticks);\n }\n return () => val => numberFormat(val);\n }\n\n /**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\n createAxis (config) {\n const {\n tickFormat,\n numberFormat,\n orientation\n } = config;\n const axisClass = axisOrientationMap[orientation];\n\n if (axisClass) {\n const axis = axisClass(this.scale());\n this.formatter = this.getTickFormatter(tickFormat, numberFormat);\n\n return axis;\n }\n return null;\n }\n\n /**\n *\n *\n * @memberof SimpleAxis\n */\n setTickConfig () {\n return this;\n }\n\n /**\n *\n *\n * @param {*} axisTickLabels\n * @param {*} labelWidth\n * @returns\n * @memberof SimpleAxis\n */\n setRotationConfig (axisTickLabels, labelWidth) {\n const { orientation } = this.config();\n\n if (orientation === TOP || orientation === BOTTOM) {\n const range = this.range();\n const length = Math.abs(range[0] - range[1]);\n this.config({ labels: { rotation: 0 } });\n if (length > 0 && axisTickLabels.length * (labelWidth + this._minTickDistance.width) > length) {\n this.config({ labels: { rotation: -90 } });\n }\n }\n return this;\n }\n\n /**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\n adjustRange () {\n return this;\n }\n\n getScaleValue (domainVal) {\n if (domainVal === null || domainVal === undefined) {\n return undefined;\n }\n return this.scale()(domainVal);\n }\n\n /**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\n getTickSize () {\n return this.axis().tickSize();\n }\n\n /**\n * Gets the space occupied by the parts of an axis\n *\n * @return {Object} object with details about sizes of the axis.\n * @memberof SimpleAxis\n */\n getAxisDimensions () {\n this.axisDimensions(computeAxisDimensions(this));\n return this.axisDimensions();\n }\n\n /**\n * Gets the space occupied by the axis\n *\n * @return {Object} object with details about size of the axis.\n * @memberof SimpleAxis\n */\n getLogicalSpace () {\n if (!this.logicalSpace()) {\n this.logicalSpace(calculateContinousSpace(this));\n setOffset(this);\n this.logicalSpace();\n }\n return this.logicalSpace();\n }\n\n /**\n * Returns the value from the domain when given a value from the range.\n * @param {number} value Value from the range.\n * @return {number} Value\n */\n invert (...value) {\n const values = value.map(d => this.scale().invert(d)) || [];\n return value.length === 1 ? values[0] : values;\n }\n\n /**\n * Gets the nearest range value from the given range values.\n * @param {number} v1 Start range value\n * @param {number} v2 End range value\n * @return {Array} range values\n */\n getNearestRange (v1, v2) {\n let p1;\n let p2;\n let extent;\n const {\n type\n } = this.config();\n const scale = this.scale();\n const range = scale.range();\n const reverse = range[0] > range[1];\n\n if (type === BAND) {\n extent = scale.invertExtent(v1, v2);\n p1 = scale(reverse ? extent[extent.length - 1] : extent[0]);\n p2 = scale(reverse ? extent[0] : extent[extent.length - 1]) + scale.bandwidth();\n return [p1, p2];\n }\n return [v1, v2];\n }\n\n /**\n * This method is used to assign a domain to the axis.\n *\n * @param {Array} domain the domain of the scale\n * @memberof SimpleAxis\n */\n updateDomainBounds (domain) {\n let currentDomain = this.domain();\n if (this.config().domain) {\n currentDomain = this.config().domain;\n } else {\n if (currentDomain.length === 0) {\n currentDomain = domain;\n }\n if (domain.length) {\n currentDomain = [Math.min(currentDomain[0], domain[0]), Math.max(currentDomain[1], domain[1])];\n }\n }\n\n return this.domain(currentDomain);\n }\n\n /**\n *\n *\n * @param {*} domain\n * @returns\n * @memberof SimpleAxis\n */\n updateDomainCache (domain) {\n if (this._domainLock === false) {\n this.domain([]);\n this._domainLock = true;\n }\n const cachedDomain = [];\n domain && domain.forEach((d) => {\n d !== undefined && d !== null && cachedDomain.push(d);\n });\n return this.updateDomainBounds(cachedDomain);\n }\n\n getMinTickDifference () {\n return this.domain();\n }\n\n getFormattedTickValues (tickValues) {\n return tickValues;\n }\n\n /**\n *\n *\n * @param {*} tickValues\n * @returns\n * @memberof SimpleAxis\n */\n setTickValues () {\n const {\n tickValues\n } = this.config();\n\n if (tickValues) {\n tickValues instanceof Array && this.axis().tickValues(tickValues);\n return this;\n }\n return this;\n }\n\n /**\n * This method returns the width in pixels for one\n * unit along the axis. It is only applicable to band scale\n * and returns undefined for other scale type.\n *\n * @return {number} the width of one band along band scale axis\n * @memberof SimpleAxis\n */\n getUnitWidth () {\n return 0;\n }\n\n /**\n * This method returns an object that can be used to\n * reconstruct this instance.\n *\n * @return {Object} the serializable props of axis\n * @memberof SimpleAxis\n */\n serialize () {\n return {\n name: this.name,\n type: this.type,\n range: this.range(),\n config: this.config()\n };\n }\n\n /**\n * Returns the id of the axis.\n * @return {string} Unique identifier of the axis.\n */\n get id () {\n return this._id;\n }\n\n registerEvent (event, fn) {\n this._eventList.push({ name: event, action: fn });\n }\n\n /**\n *\n *\n * @param {*} fn\n * @memberof SimpleAxis\n */\n on (event, fn) {\n event = event || 'update';\n this.registerEvent(event, fn);\n }\n\n /**\n * This method is used to render the axis inside\n * the supplied svg container.\n *\n * @param {SVGElement} svg the svg element in which to render the path\n * @memberof SimpleAxis\n */\n /* istanbul ignore next */render () {\n if (this.mount()) {\n renderAxis(this);\n }\n return this;\n }\n\n /**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\n remove () {\n this.store().unsubscribeAll();\n selectElement(this.mount()).remove();\n return this;\n }\n\n /**\n *\n *\n * @memberof SimpleAxis\n */\n unsubscribe () {\n this.store().unsubscribeAll();\n return this;\n }\n\n /**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\n isReverse () {\n const range = this.range();\n return range[0] > range[1];\n }\n\n /**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\n getPixelToValueRatio () {\n const scale = this.scale();\n const range = scale.range();\n const domain = scale.domain();\n\n return Math.abs(range[1] - range[0]) / (domain[1] - domain[0]);\n }\n}\n\n","import { scaleMap } from '../../scale-creator';\n\nexport default class LinearInterpolator {\n\n createScale (config) {\n const {\n range\n } = config;\n const scaleFactory = scaleMap.linear;\n this._scale = scaleFactory().range(range);\n return this._scale;\n }\n\n getScaleValue (domainVal) {\n return this._scale(domainVal) + 0.5;\n }\n\n sanitizeDomain (domain) {\n return domain;\n }\n}\n","import { scaleMap } from '../../scale-creator';\n\nexport default class LogInterpolator {\n\n createScale (config) {\n const {\n range,\n base\n } = config;\n const scaleFactory = scaleMap.log;\n this._scale = scaleFactory().range(range).base(base);\n return this._scale;\n }\n\n getScaleValue (domainVal) {\n if (domainVal <= 0) {\n return 1;\n }\n\n return this._scale(domainVal) + 0.5;\n }\n\n sanitizeDomain (domain) {\n if (domain[0] <= 0) {\n return [Math.max(1, domain[0]), Math.max(1, domain[1])];\n } return domain;\n }\n}\n","import { scaleMap } from '../../scale-creator';\n\nexport default class PowInterpolator {\n\n createScale (config) {\n const {\n range,\n exponent\n } = config;\n const scaleFactory = scaleMap.pow;\n this._scale = scaleFactory().range(range).exponent(exponent);\n return this._scale;\n }\n\n getScaleValue (domainVal) {\n return this._scale(domainVal) + 0.5;\n }\n\n sanitizeDomain (domain) {\n return domain;\n }\n}\n","import { getSmallestDiff } from 'muze-utils';\nimport SimpleAxis from './simple-axis';\nimport { BOTTOM, TOP, LEFT, RIGHT } from '../enums/axis-orientation';\nimport { LINEAR, LOG, POW } from '../enums/scale-type';\nimport { LogInterpolator, PowInterpolator, LinearInterpolator } from './interpolators';\nimport { DOMAIN } from '../enums/constants';\nimport {\n getTickLabelInfo,\n getNumberOfTicks\n} from './helper';\n\nexport const interpolatorMap = {\n [LOG]: LogInterpolator,\n [POW]: PowInterpolator,\n [LINEAR]: LinearInterpolator\n};\n\nexport default class ContinousAxis extends SimpleAxis {\n constructor (config, dependencies) {\n config.tickFormat = config.tickFormat || (val => val);\n super(config, dependencies);\n }\n /**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\n createScale (config) {\n const {\n base,\n padding,\n interpolator,\n exponent\n } = config;\n const range = this.range();\n const InterpolatorCls = interpolatorMap[interpolator];\n\n this._interpolator = new InterpolatorCls();\n let scale = this._interpolator.createScale({\n padding,\n exponent,\n base,\n range\n });\n\n scale = scale.nice();\n return scale;\n }\n\n /**\n * This method is used to assign a domain to the axis.\n *\n * @param {Array} domain the domain of the scale\n * @memberof SimpleAxis\n */\n updateDomainBounds (domain) {\n let currentDomain = this.domain();\n if (this.config().domain) {\n currentDomain = this.config().domain;\n } else {\n if (currentDomain.length === 0) {\n currentDomain = domain;\n }\n if (domain.length) {\n currentDomain = [Math.min(currentDomain[0], domain[0]), Math.max(currentDomain[1], domain[1])];\n }\n }\n\n return this.domain(currentDomain);\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof ContinousAxis\n */\n static type () {\n return LINEAR;\n }\n\n getScaleValue (domainVal) {\n if (domainVal === null || domainVal === undefined) {\n return undefined;\n }\n return this._interpolator.getScaleValue(domainVal);\n }\n /**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\n getTickSize () {\n const {\n showInnerTicks,\n showOuterTicks\n } = this.config();\n const axis = this.axis();\n axis.tickSizeInner(showInnerTicks === false ? 0 : 6);\n axis.tickSizeOuter(showOuterTicks === false ? 0 : 6);\n return axis.tickSize();\n }\n\n /**\n *\n *\n * @param {*} d\n * @returns\n * @memberof SimpleAxis\n */\n domain (domain) {\n if (domain && domain.length) {\n const { nice } = this.config();\n if (domain.length && domain[0] === domain[1]) {\n domain = [0, +domain[0] * 2];\n }\n this.scale().domain(domain);\n nice && this.scale().nice();\n this._domain = this.scale().domain();\n this.store().commit(DOMAIN, this._domain);\n this.logicalSpace(null);\n return this;\n } return this._domain;\n }\n\n /**\n * This method is used to set the space availiable to render\n * the SimpleCell.\n *\n * @param {number} width The width of SimpleCell.\n * @param {number} height The height of SimpleCell.\n * @memberof AxisCell\n */\n setAvailableSpace (width = 0, height, padding, isOffset) {\n const {\n left,\n right,\n top,\n bottom\n } = padding;\n const {\n orientation,\n fixedBaseline\n } = this.config();\n const { tickLabelDim } = this.getAxisDimensions();\n this.availableSpace({ width, height });\n\n if (orientation === TOP || orientation === BOTTOM) {\n const labelSpace = tickLabelDim.width;\n this.range([(fixedBaseline ? 0 : (labelSpace / 2)) + left, width - right - labelSpace / 2]);\n const axisHeight = this.getLogicalSpace().height;\n isOffset && this.config({ yOffset: Math.max(axisHeight, height) });\n } else {\n const labelSpace = tickLabelDim.height;\n this.range([height - bottom - (fixedBaseline ? 1 : (labelSpace / 2)), labelSpace / 2 + top]);\n const axisWidth = this.getLogicalSpace().width;\n isOffset && this.config({ xOffset: Math.max(axisWidth, width) });\n }\n return this;\n }\n\n /**\n *\n *\n * @param {*} tickValues\n * @returns\n * @memberof SimpleAxis\n */\n setTickValues () {\n const {\n tickValues\n } = this.config();\n const axis = this.axis();\n\n if (tickValues) {\n tickValues instanceof Array && this.axis().tickValues(tickValues);\n return this;\n }\n axis.tickValues(this.getTickValues());\n return this;\n }\n\n /**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\n getTickValues () {\n let labelDim = 0;\n const {\n orientation,\n tickValues\n } = this.config();\n const range = this.range();\n const axis = this.axis();\n\n const availableSpace = Math.abs(range[0] - range[1]);\n\n const labelProps = getTickLabelInfo(this).largestLabelDim;\n\n if (tickValues) {\n return axis.scale().ticks(tickValues);\n }\n labelDim = labelProps[orientation === BOTTOM || orientation === TOP ? 'width' : 'height'];\n\n return getNumberOfTicks(availableSpace, labelDim, axis, this);\n }\n\n getMinTickDifference () {\n return getSmallestDiff(this.config().tickValues);\n }\n\n /**\n * Sets a fixed baseline for the first ticks so that they can render effectively within\n * the given area\n *\n * @param {*} tickText\n * @param {*} config\n * @param {*} labelManager\n */\n setFixedBaseline (tickText) {\n const {\n orientation,\n labels\n } = this.config();\n const {\n rotation\n } = labels;\n const axis = this.axis();\n const { width, height } = this._axisDimensions.largestLabelDim;\n axis.tickTransform((d, i) => {\n if (i === 0 && (orientation === LEFT || orientation === RIGHT)) {\n return `translate(0, -${(height) / 3}px)`;\n }\n if (i === 0 && (orientation === TOP || orientation === BOTTOM) && rotation === 0) {\n return `translate(${width / 2}px, ${0}px) rotate(${rotation}deg)`;\n } return '';\n });\n return tickText;\n }\n\n}\n","import SimpleAxis from './simple-axis';\nimport { BAND } from '../enums/scale-type';\nimport { TOP, BOTTOM } from '../enums/axis-orientation';\nimport { calculateBandSpace, setOffset } from './helper';\n\nexport default class BandAxis extends SimpleAxis {\n\n /**\n *\n *\n * @param {*} range\n * @returns\n * @memberof BandAxis\n */\n createScale (range) {\n const scale = super.createScale(range);\n const { padding } = this.config();\n if (typeof padding === 'number') {\n scale.padding(padding);\n }\n return scale;\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof BandAxis\n */\n static type () {\n return BAND;\n }\n\n /**\n *\n *\n * @param {*} width\n * @param {*} height\n * @param {*} padding\n * @param {*} isOffset\n * @memberof BandAxis\n */\n setAvailableSpace (width, height, padding, isOffset) {\n const {\n left,\n right,\n top,\n bottom\n } = padding;\n const {\n orientation,\n showAxisName,\n axisNamePadding\n } = this.config();\n const { axisLabelDim } = this.getAxisDimensions();\n const { height: axisDimHeight } = axisLabelDim;\n\n this.availableSpace({ width, height });\n if (orientation === TOP || orientation === BOTTOM) {\n // Set x axis range\n this.range([0, width - left - right]);\n const axisHeight = this.getLogicalSpace().height - (showAxisName === false ?\n (axisDimHeight + axisNamePadding) : 0);\n isOffset && this.config({ yOffset: Math.max(axisHeight, height) });\n } else {\n // Set y axis range\n this.range([height - bottom, top]);\n const axisWidth = this.getLogicalSpace().width - (showAxisName === false ? axisDimHeight : 0);\n isOffset && this.config({ xOffset: Math.max(axisWidth, width) });\n }\n return this;\n }\n\n /**\n *\n *\n * @returns\n * @memberof BandAxis\n */\n getUnitWidth () {\n return this.scale().bandwidth();\n }\n\n /**\n *\n *\n * @returns\n * @memberof BandAxis\n */\n setTickConfig () {\n let smartTicks = '';\n let smartlabel;\n const { maxWidth, maxHeight, tickFormat } = this.config();\n const { labelManager } = this._dependencies;\n const domain = this.axis().scale().domain();\n\n smartTicks = domain;\n const tickFormatter = tickFormat || (val => val);\n\n if (domain && domain.length) {\n smartTicks = domain.map((d, i) => {\n labelManager.useEllipsesOnOverflow(true);\n smartlabel = labelManager.getSmartText(tickFormatter(d, i, domain), maxWidth, maxHeight);\n return labelManager.constructor.textToLines(smartlabel);\n });\n }\n return smartTicks;\n }\n\n/**\n * Gets the space occupied by the axis\n *\n * @return {Object} object with details about size of the axis.\n * @memberof SimpleAxis\n */\n getLogicalSpace () {\n if (!this.logicalSpace()) {\n this.logicalSpace(calculateBandSpace(this));\n setOffset(this);\n this.logicalSpace();\n }\n return this.logicalSpace();\n }\n /**\n *\n *\n * @param {*} axisTickLabels\n * @param {*} labelWidth\n * @returns\n * @memberof BandAxis\n */\n setRotationConfig (axisTickLabels, labelWidth) {\n const { orientation } = this.config();\n const range = this.range();\n const availSpace = Math.abs(range[0] - range[1]);\n\n this.config({ labels: { rotation: 0, smartTicks: false } });\n if (orientation === TOP || orientation === BOTTOM) {\n const smartWidth = this.smartTicks().reduce((acc, n) => acc + n.width + this._minTickDistance.width, 0);\n // set multiline config\n if (availSpace > 0 && axisTickLabels.length * (labelWidth + this._minTickDistance.width) > availSpace) {\n if (availSpace && smartWidth < availSpace) {\n this.config({ labels: { smartTicks: true } });\n } else {\n this.config({ labels: { rotation: -90 } });\n }\n }\n }\n return this;\n }\n\n /**\n *\n *\n * @returns\n * @memberof BandAxis\n */\n getTickValues () {\n return this.axis().scale().domain();\n }\n\n /**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\n getTickSize () {\n const {\n showInnerTicks,\n showOuterTicks\n } = this.config();\n const axis = this.axis();\n\n axis.tickSizeInner(showInnerTicks ? 6 : 0);\n axis.tickSizeOuter(showOuterTicks ? 6 : 0);\n return axis.tickSize();\n }\n\n /**\n * This method is used to assign a domain to the axis.\n *\n * @param {Array} domain the domain of the scale\n * @memberof SimpleAxis\n */\n updateDomainBounds (domain) {\n let currentDomain = this.domain();\n if (this.config().domain) {\n currentDomain = this.config().domain;\n } else {\n if (currentDomain.length === 0) {\n currentDomain = domain;\n }\n currentDomain = currentDomain.concat(domain);\n }\n this.domain(currentDomain);\n return this;\n }\n\n /**\n * Returns the value from the domain when given a value from the range.\n * @param {number} value Value from the range.\n * @return {number} Value\n */\n invert (...value) {\n const values = value.map(d => this.scale().invert(d)) || [];\n return value.length === 1 ? values[0] && values[0].toString() : values.map(d => d.toString());\n }\n}\n","import { getSmallestDiff } from 'muze-utils';\nimport SimpleAxis from './simple-axis';\nimport { adjustRange } from './helper';\nimport { TIME } from '../enums/scale-type';\nimport { axisOrientationMap, BOTTOM, TOP } from '../enums/axis-orientation';\nimport { DOMAIN } from '../enums/constants';\n\n/**\n *\n *\n * @export\n * @class TimeAxis\n * @extends {SimpleAxis}\n */\nexport default class TimeAxis extends SimpleAxis {\n\n constructor (...params) {\n super(...params);\n this._minDiff = Infinity;\n }\n\n /**\n *\n *\n * @param {*} range\n * @returns\n * @memberof TimeAxis\n */\n createScale (range) {\n let scale = super.createScale(range);\n\n scale = scale.nice();\n return scale;\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof TimeAxis\n */\n static type () {\n return TIME;\n }\n\n /**\n *\n *\n * @returns\n * @memberof BandAxis\n */\n setTickConfig () {\n let smartTicks;\n let smartlabel;\n const { maxWidth, maxHeight, tickFormat } = this.config();\n const { labelManager } = this._dependencies;\n const domain = this.getTickValues();\n const scale = this.scale();\n\n smartTicks = domain;\n const tickFormatter = tickFormat || scale.tickFormat();\n\n if (domain && domain.length) {\n smartTicks = domain.map((d, i) => {\n smartlabel = labelManager.getSmartText(tickFormatter(d, i, domain), maxWidth, maxHeight);\n return labelManager.constructor.textToLines(smartlabel);\n });\n }\n return smartTicks;\n }\n\n /**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\n createAxis (config) {\n const {\n tickFormat,\n orientation\n } = config;\n const axisClass = axisOrientationMap[orientation];\n\n if (axisClass) {\n const axis = axisClass(this.scale());\n this.formatter = this.getTickFormatter(tickFormat);\n return axis;\n }\n return null;\n }\n\n getTickFormatter (tickFormat) {\n if (tickFormat) {\n return ticks => (val, i) => tickFormat(val, i, ticks);\n }\n return null;\n }\n\n /**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\n getTickSize () {\n const {\n showInnerTicks,\n showOuterTicks\n } = this.config();\n const axis = this.axis();\n axis.tickSizeInner(showInnerTicks === false ? 0 : 6);\n axis.tickSizeOuter(showOuterTicks === false ? 0 : 6);\n return super.getTickSize();\n }\n\n /**\n *\n *\n * @returns\n * @memberof TimeAxis\n */\n getTickValues () {\n return this.scale().ticks();\n }\n\n /**\n *\n *\n * @param {*} diff\n * @returns\n * @memberof TimeAxis\n */\n minDiff (diff) {\n this._minDiff = Math.min(this._minDiff, diff);\n return this;\n }\n\n /**\n *\n *\n * @param {*} axisTickLabels\n * @param {*} labelWidth\n * @returns\n * @memberof BandAxis\n */\n setRotationConfig (axisTickLabels, labelWidth) {\n const { orientation } = this.config();\n const range = this.range();\n const availSpace = Math.abs(range[0] - range[1]);\n\n this.config({ labels: { rotation: 0, smartTicks: false } });\n if (orientation === TOP || orientation === BOTTOM) {\n const smartWidth = this.smartTicks().reduce((acc, n) => acc + n.width, 0);\n // set multiline config\n if (availSpace > 0 && axisTickLabels.length * labelWidth > availSpace) {\n if (availSpace && smartWidth * 1.25 < availSpace) {\n this.config({ labels: { smartTicks: true } });\n }\n this.config({ labels: { rotation: -90 } });\n }\n }\n return this;\n }\n\n /**\n *\n *\n * @param {*} d\n * @returns\n * @memberof SimpleAxis\n */\n domain (domain) {\n if (domain) {\n const { nice } = this.config();\n\n if (domain.length && domain[0] === domain[1]) {\n domain = [0, +domain[0] * 2];\n }\n this.scale().domain(domain);\n nice && this.scale().nice();\n this._domain = this.scale().domain();\n this.smartTicks(this.setTickConfig());\n this.store().commit(DOMAIN, this._domain);\n this.logicalSpace(null);\n return this;\n } return this._domain;\n }\n\n getMinTickDifference () {\n return getSmallestDiff(this.config().tickValues);\n }\n\n /**\n *\n *\n * @param {*} width\n * @param {*} height\n * @param {*} padding\n * @param {*} isOffset\n * @memberof TimeAxis\n */\n setAvailableSpace (width, height, padding, isOffset) {\n const {\n left,\n right,\n top,\n bottom\n } = padding;\n const {\n orientation,\n showAxisName,\n axisNamePadding\n } = this.config();\n const domain = this.domain();\n const { axisLabelDim, tickLabelDim } = this.getAxisDimensions();\n const { height: axisDimHeight } = axisLabelDim;\n const { height: tickDimHeight, width: tickDimWidth } = tickLabelDim;\n\n this.availableSpace({ width, height });\n if (orientation === TOP || orientation === BOTTOM) {\n const labelSpace = tickDimWidth;\n this.range(adjustRange(this._minDiff, [labelSpace / 2, width - left - right - labelSpace / 2],\n domain, orientation));\n const axisHeight = this.getLogicalSpace().height - (showAxisName === false ?\n (axisDimHeight + axisNamePadding) : 0);\n isOffset && this.config({ yOffset: Math.max(axisHeight, height) });\n } else {\n const labelSpace = tickDimHeight;\n this.range(adjustRange(this._minDiff, [height - top - bottom - labelSpace / 2, labelSpace / 2],\n domain, orientation));\n const axisWidth = this.getLogicalSpace().width - (showAxisName === false ? axisDimHeight : 0);\n this.isOffset && this.config({ xOffset: Math.max(axisWidth, width) });\n }\n return this;\n }\n\n}\n","export const x11Colors = {\n Pink: { hex: 'ffc0cb', rgb: '255,192,203' },\n LightPink: { hex: 'ffb6c1', rgb: '255,182,193' },\n HotPink: { hex: 'ff69b4', rgb: '255,105,180' },\n DeepPink: { hex: 'ff1493', rgb: '255,20,147' },\n PaleVioletRed: { hex: 'db7093', rgb: '219,112,147' },\n MediumVioletRed: { hex: 'c71585', rgb: '199,21,133' },\n LightSalmon: { hex: 'ffa07a', rgb: '255,160,122' },\n Salmon: { hex: 'fa8072', rgb: '250,128,114' },\n DarkSalmon: { hex: 'e9967a', rgb: '233,150,122' },\n LightCoral: { hex: 'f08080', rgb: '240,128,128' },\n IndianRed: { hex: 'cd5c5c', rgb: '205,92,92' },\n Crimson: { hex: 'dc143c', rgb: '220,20,60' },\n FireBrick: { hex: 'b22222', rgb: '178,34,34' },\n DarkRed: { hex: '8b0000', rgb: '139,0,0' },\n Red: { hex: 'ff0000', rgb: '255,0,0' },\n OrangeRed: { hex: 'ff4500', rgb: '255,69,0' },\n Tomato: { hex: 'ff6347', rgb: '255,99,71' },\n Coral: { hex: 'ff7f50', rgb: '255,127,80' },\n DarkOrange: { hex: 'ff8c00', rgb: '255,140,0' },\n Orange: { hex: 'ffa500', rgb: '255,165,0' },\n Gold: { hex: 'ffd700', rgb: '255,215,0' },\n Yellow: { hex: 'ffff00', rgb: '255,255,0' },\n LightYellow: { hex: 'ffffe0', rgb: '255,255,224' },\n LemonChiffon: { hex: 'fffacd', rgb: '255,250,205' },\n LightGoldenrodYellow: { hex: 'fafad2', rgb: '250,250,210' },\n PapayaWhip: { hex: 'ffefd5', rgb: '255,239,213' },\n Moccasin: { hex: 'ffe4b5', rgb: '255,228,181' },\n PeachPuff: { hex: 'ffdab9', rgb: '255,218,185' },\n PaleGoldenrod: { hex: 'eee8aa', rgb: '238,232,170' },\n Khaki: { hex: 'f0e68c', rgb: '240,230,140' },\n DarkKhaki: { hex: 'bdb76b', rgb: '189,183,107' },\n Cornsilk: { hex: 'fff8dc', rgb: '255,248,220' },\n BlanchedAlmond: { hex: 'ffebcd', rgb: '255,235,205' },\n Bisque: { hex: 'ffe4c4', rgb: '255,228,196' },\n NavajoWhite: { hex: 'ffdead', rgb: '255,222,173' },\n Wheat: { hex: 'f5deb3', rgb: '245,222,179' },\n BurlyWood: { hex: 'deb887', rgb: '222,184,135' },\n Tan: { hex: 'd2b48c', rgb: '210,180,140' },\n RosyBrown: { hex: 'bc8f8f', rgb: '188,143,143' },\n SandyBrown: { hex: 'f4a460', rgb: '244,164,96' },\n Goldenrod: { hex: 'daa520', rgb: '218,165,32' },\n DarkGoldenrod: { hex: 'b8860b', rgb: '184,134,11' },\n Peru: { hex: 'cd853f', rgb: '205,133,63' },\n Chocolate: { hex: 'd2691e', rgb: '210,105,30' },\n SaddleBrown: { hex: '8b4513', rgb: '139,69,19' },\n Sienna: { hex: 'a0522d', rgb: '160,82,45' },\n Brown: { hex: 'a52a2a', rgb: '165,42,42' },\n Maroon: { hex: '800000', rgb: '128,0,0' },\n DarkOliveGreen: { hex: '556b2f', rgb: '85,107,47' },\n Olive: { hex: '808000', rgb: '128,128,0' },\n OliveDrab: { hex: '6b8e23', rgb: '107,142,35' },\n YellowGreen: { hex: '9acd32', rgb: '154,205,50' },\n LimeGreen: { hex: '32cd32', rgb: '50,205,50' },\n Lime: { hex: '00ff00', rgb: '0,255,0' },\n LawnGreen: { hex: '7cfc00', rgb: '124,252,0' },\n Chartreuse: { hex: '7fff00', rgb: '127,255,0' },\n GreenYellow: { hex: 'adff2f', rgb: '173,255,47' },\n SpringGreen: { hex: '00ff7f', rgb: '0,255,127' },\n MediumSpringGreen: { hex: '00fa9a', rgb: '0,250,154' },\n LightGreen: { hex: '90ee90', rgb: '144,238,144' },\n PaleGreen: { hex: '98fb98', rgb: '152,251,152' },\n DarkSeaGreen: { hex: '8fbc8f', rgb: '143,188,143' },\n MediumSeaGreen: { hex: '3cb371', rgb: '60,179,113' },\n SeaGreen: { hex: '2e8b57', rgb: '46,139,87' },\n ForestGreen: { hex: '228b22', rgb: '34,139,34' },\n Green: { hex: '008000', rgb: '0,128,0' },\n DarkGreen: { hex: '006400', rgb: '0,100,0' },\n MediumAquamarine: { hex: '66cdaa', rgb: '102,205,170' },\n Aqua: { hex: '00ffff', rgb: '0,255,255' },\n Cyan: { hex: '00ffff', rgb: '0,255,255' },\n LightCyan: { hex: 'e0ffff', rgb: '224,255,255' },\n PaleTurquoise: { hex: 'afeeee', rgb: '175,238,238' },\n Aquamarine: { hex: '7fffd4', rgb: '127,255,212' },\n Turquoise: { hex: '40e0d0', rgb: '64,224,208' },\n MediumTurquoise: { hex: '48d1cc', rgb: '72,209,204' },\n DarkTurquoise: { hex: '00ced1', rgb: '0,206,209' },\n LightSeaGreen: { hex: '20b2aa', rgb: '32,178,170' },\n CadetBlue: { hex: '5f9ea0', rgb: '95,158,160' },\n DarkCyan: { hex: '008b8b', rgb: '0,139,139' },\n Teal: { hex: '008080', rgb: '0,128,128' },\n LightSteelBlue: { hex: 'b0c4de', rgb: '176,196,222' },\n PowderBlue: { hex: 'b0e0e6', rgb: '176,224,230' },\n LightBlue: { hex: 'add8e6', rgb: '173,216,230' },\n SkyBlue: { hex: '87ceeb', rgb: '135,206,235' },\n LightSkyBlue: { hex: '87cefa', rgb: '135,206,250' },\n DeepSkyBlue: { hex: '00bfff', rgb: '0,191,255' },\n DodgerBlue: { hex: '1e90ff', rgb: '30,144,255' },\n CornflowerBlue: { hex: '6495ed', rgb: '100,149,237' },\n SteelBlue: { hex: '4682b4', rgb: '70,130,180' },\n RoyalBlue: { hex: '4169e1', rgb: '65,105,225' },\n Blue: { hex: '0000ff', rgb: '0,0,255' },\n MediumBlue: { hex: '0000cd', rgb: '0,0,205' },\n DarkBlue: { hex: '00008b', rgb: '0,0,139' },\n Navy: { hex: '000080', rgb: '0,0,128' },\n MidnightBlue: { hex: '191970', rgb: '25,25,112' },\n Lavender: { hex: 'e6e6fa', rgb: '230,230,250' },\n Thistle: { hex: 'd8bfd8', rgb: '216,191,216' },\n Plum: { hex: 'dda0dd', rgb: '221,160,221' },\n Violet: { hex: 'ee82ee', rgb: '238,130,238' },\n Orchid: { hex: 'da70d6', rgb: '218,112,214' },\n Fuchsia: { hex: 'ff00ff', rgb: '255,0,255' },\n Magenta: { hex: 'ff00ff', rgb: '255,0,255' },\n MediumOrchid: { hex: 'ba55d3', rgb: '186,85,211' },\n MediumPurple: { hex: '9370db', rgb: '147,112,219' },\n BlueViolet: { hex: '8a2be2', rgb: '138,43,226' },\n DarkViolet: { hex: '9400d3', rgb: '148,0,211' },\n DarkOrchid: { hex: '9932cc', rgb: '153,50,204' },\n DarkMagenta: { hex: '8b008b', rgb: '139,0,139' },\n Purple: { hex: '800080', rgb: '128,0,128' },\n Indigo: { hex: '4b0082', rgb: '75,0,130' },\n DarkSlateBlue: { hex: '483d8b', rgb: '72,61,139' },\n SlateBlue: { hex: '6a5acd', rgb: '106,90,205' },\n MediumSlateBlue: { hex: '7b68ee', rgb: '123,104,238' },\n White: { hex: 'ffffff', rgb: '255,255,255' },\n Snow: { hex: 'fffafa', rgb: '255,250,250' },\n Honeydew: { hex: 'f0fff0', rgb: '240,255,240' },\n MintCream: { hex: 'f5fffa', rgb: '245,255,250' },\n Azure: { hex: 'f0ffff', rgb: '240,255,255' },\n AliceBlue: { hex: 'f0f8ff', rgb: '240,248,255' },\n GhostWhite: { hex: 'f8f8ff', rgb: '248,248,255' },\n WhiteSmoke: { hex: 'f5f5f5', rgb: '245,245,245' },\n Seashell: { hex: 'fff5ee', rgb: '255,245,238' },\n Beige: { hex: 'f5f5dc', rgb: '245,245,220' },\n OldLace: { hex: 'fdf5e6', rgb: '253,245,230' },\n FloralWhite: { hex: 'fffaf0', rgb: '255,250,240' },\n Ivory: { hex: 'fffff0', rgb: '255,255,240' },\n AntiqueWhite: { hex: 'faebd7', rgb: '250,235,215' },\n Linen: { hex: 'faf0e6', rgb: '250,240,230' },\n LavenderBlush: { hex: 'fff0f5', rgb: '255,240,245' },\n MistyRose: { hex: 'ffe4e1', rgb: '255,228,225' },\n Gainsboro: { hex: 'dcdcdc', rgb: '220,220,220' },\n LightGray: { hex: 'd3d3d3', rgb: '211,211,211' },\n Silver: { hex: 'c0c0c0', rgb: '192,192,192' },\n DarkGrey: { hex: 'a9a9a9', rgb: '169,169,169' },\n Grey: { hex: '808080', rgb: '128,128,128' },\n DimGrey: { hex: '696969', rgb: '105,105,105' },\n LightSlateGrey: { hex: '778899', rgb: '119,136,153' },\n SlateGrey: { hex: '708090', rgb: '112,128,144' },\n DarkSlateGrey: { hex: '2f4f4f', rgb: '47,79,79' },\n Black: { hex: '000000', rgb: '0,0,0' }\n};\n","import {\n LINEAR\n} from '../enums/constants';\n/**\n * Set of default colors\n */\nexport const palette = [\n '#086bb6',\n '#f37d45',\n '#f5ce02',\n '#67bda0',\n '#c54e4e',\n '#ae70af'\n];\n\nexport const DEFAULT_GRADIENT_COLOR = '#eaeaea';\n\nexport const DEFAULT_CONFIG = {\n range: palette,\n value: palette[0],\n step: false,\n stops: 5,\n type: LINEAR\n};\n","import { mergeRecursive, detectColor, hexToHsv, rgbToHsv } from 'muze-utils';\nimport { x11Colors } from './color-maps';\nimport { palette, DEFAULT_GRADIENT_COLOR } from './defaults';\nimport { LINEAR, RGB, HEX, HSL, HSLA } from '../enums/constants';\n\nexport const getHslString = hslArr => `hsla(${hslArr[0] * 360},${hslArr[1] * 100}%,${hslArr[2] * 100}%,\\\n${hslArr[3] || 1})`;\n\nexport const convertToXllString = baseString => (baseString.split(' ') || [])\n .reduce((x, e) => `${x}${e.charAt(0).toUpperCase()}${e.slice(1)}`, '');\n\nexport const getActualHslColor = (e, paletteColor) => {\n let color = '';\n if (typeof e === 'string') {\n e = e.replace(/ /g, '');\n e = e.toLowerCase();\n if (detectColor(e) === HSL || detectColor(e) === HSLA) {\n color = e.match(/(\\d+(\\.\\d+)?)/g);\n color = [color[0] / 360, color[1] / 100, color[2] / 100, color[3] || 1];\n } else if (detectColor(e) === HEX) {\n color = hexToHsv(e);\n } else if (detectColor(e) === RGB) {\n const col = e.substring(e.indexOf('(') + 1, e.lastIndexOf(')')).split(/,\\s*/);\n color = rgbToHsv(...col);\n } else if (x11Colors[convertToXllString(e)]) {\n color = rgbToHsv(...x11Colors[convertToXllString(e)].rgb.split(','));\n }\n } else if (!(e instanceof Array)) {\n color = rgbToHsv(paletteColor);\n } else {\n color = e;\n }\n return color;\n};\n\nexport const PROPS = {\n config: {\n sanitization: (context, config) => {\n const defCon = mergeRecursive({}, context.constructor.defaultConfig());\n if (config.type === LINEAR) {\n config.range = config.range || [defCon.range[0]];\n config.range = config.range.length > 1 ? config.range : [DEFAULT_GRADIENT_COLOR, ...config.range];\n }\n const oldConfig = mergeRecursive(defCon, context.config());\n const newConfig = mergeRecursive(oldConfig, config);\n\n if (newConfig.range instanceof Array) {\n newConfig.range = newConfig.range.map((e, i) => getActualHslColor(e, palette[i]));\n newConfig.stops = config.stops || newConfig.range.length;\n }\n newConfig.value = getActualHslColor(newConfig.value, newConfig.value);\n return newConfig;\n }\n },\n domain: {},\n scale: {},\n uniqueValues: {}\n};\n","import { numberInterpolator, piecewiseInterpolator, hslInterpolator } from 'muze-utils';\nimport { CONTINOUS, DISCRETE } from '../enums/constants';\nimport { LINEAR, SEQUENTIAL, ORDINAL, QUANTILE } from '../enums/scale-type';\nimport { getHslString } from './props';\n\nconst getStops = (domain, stops) => {\n let newStops = [];\n\n if (stops instanceof Array) {\n newStops = stops.slice().sort();\n newStops = [...new Set([domain[0], ...stops, domain[1]])].sort();\n } else {\n const interpolator = numberInterpolator()(...domain);\n for (let i = 0; i <= stops; i++) {\n newStops[i] = interpolator(i / stops);\n }\n }\n\n if (newStops[0] < domain[0]) {\n newStops.shift();\n }\n return { domain, newStops };\n};\n\nconst rangeStops = (newStopsLength, range) => {\n let newRange = [];\n const maxRangeLength = Math.min(range.length, 18);\n\n if (newStopsLength > maxRangeLength) {\n const interpolator = piecewiseInterpolator()(hslInterpolator(), range.map(e => getHslString(e)));\n for (let i = 0; i < newStopsLength; i++) {\n newRange[i] = interpolator(i / (newStopsLength - 1));\n }\n } else {\n newRange = range.slice(0, newStopsLength);\n }\n return { newRange };\n};\n\n/**\n*\n*\n* @param {*} domain\n* @returns\n*/\nconst indexedDomain = (domain) => {\n const uniqueVals = domain;\n const retDomain = domain.map((d, i) => (i) / (domain.length - 1));\n return { domain: retDomain, uniqueVals, scaleDomain: [0, 1] };\n};\n\n/**\n *\n *\n * @param {*} domain\n * @returns\n */\nconst indexedDomainMeasure = (domain, stops, range) => {\n const uniqueVals = domain;\n return { domain, uniqueVals, scaleDomain: [0, 1], range };\n};\n\n/**\n *\n *\n * @param {*} domain\n * @returns\n */\nconst normalDomain = (domain, stops, range) => {\n const uniqueVals = domain;\n return { uniqueVals, domain, nice: true, range };\n};\n\n/**\n *\n *\n * @param {*} domain\n * @param {*} stops\n * @returns\n */\nconst steppedDomain = (domain, stops, range) => {\n const { domain: uniqueVals, newStops } = getStops(domain, stops);\n const { newRange } = rangeStops(newStops.length - 1, range);\n\n return { uniqueVals, domain: newStops, nice: true, range: newRange };\n};\n\nconst continousSteppedDomain = (domain, stops, range) => {\n const { domain: uniqueVals, newStops } = getStops(domain, range.length - 1);\n const hslRange = range.map(e => getHslString(e));\n return { uniqueVals, domain: newStops, nice: true, range: hslRange };\n};\n\n/**\n *\n *\n * @param {*} domainValue\n * @param {*} scale\n * @param {*} domain\n * @param {*} uniqueVals\n * @returns\n */\nconst uniqueRange = (domainValue, scale, domain, uniqueVals) => {\n const index = uniqueVals.indexOf(domainValue);\n const numVal = domain[index];\n return scale(numVal);\n};\n\n/**\n *\n *\n * @param {*} domainValue\n * @param {*} scale\n * @param {*} domain\n * @returns\n */\nconst indexedRange = (domainValue, scale, domain) => {\n const numVal = (domainValue - domain[0]) / (domain[domain.length - 1] - domain[0]);\n\n return scale(numVal);\n};\n\n/**\n *\n *\n * @param {*} domainValue\n * @param {*} scale\n */\nconst normalRange = (domainValue, scale) => scale(domainValue);\n\n/**\n *\n *\n * @param {*} stops\n */\nconst strategies = () => ({\n [`${CONTINOUS}-${CONTINOUS}-${SEQUENTIAL}`]: {\n scale: SEQUENTIAL,\n domainRange: () => indexedDomainMeasure,\n value: () => indexedRange\n },\n [`${CONTINOUS}-${DISCRETE}-${SEQUENTIAL}`]: {\n scale: SEQUENTIAL,\n domainRange: () => indexedDomainMeasure,\n value: () => indexedRange\n },\n [`${DISCRETE}-${DISCRETE}-${SEQUENTIAL}`]: {\n scale: SEQUENTIAL,\n domainRange: () => indexedDomain,\n value: () => uniqueRange\n },\n [`${DISCRETE}-${DISCRETE}-${ORDINAL}`]: {\n scale: ORDINAL,\n domainRange: () => normalDomain,\n value: () => normalRange\n },\n [`${CONTINOUS}-${CONTINOUS}-${ORDINAL}`]: {\n scale: LINEAR,\n domainRange: () => continousSteppedDomain,\n value: () => normalRange\n },\n [`${CONTINOUS}-${DISCRETE}-${ORDINAL}`]: {\n scale: QUANTILE,\n domainRange: () => steppedDomain,\n value: () => normalRange\n\n }\n});\n\n/**\n *\n *\n * @param {*} domainType\n * @param {*} rangeType\n * @param {*} schemeType\n * @param {*} stops\n */\nexport const strategyGetter = (domainType, rangeType, schemeType, stops) =>\n strategies(stops)[`${domainType}-${rangeType}-${schemeType || ''}`];\n","/**\n * @module Axis\n * This file declares a class that is used to render an axis to add meaning to\n * plots.\n */\nimport { getUniqueId, generateGetterSetters, rgbToHsv } from 'muze-utils';\nimport { createScale, getScheme, getSchemeType } from '../scale-creator';\nimport { CONTINOUS, DISCRETE, COLOR } from '../enums/constants';\nimport { strategyGetter } from './color-strategy';\nimport { DEFAULT_CONFIG } from './defaults';\nimport { PROPS, getHslString } from './props';\n\n/**\n* This class is used to instantiate a SimpleAxis.\n* @class SimpleAxis\n*/\nexport default class ColorAxis {\n\n /**\n * Creates an instance of SimpleAxis.\n * @param {Object} config input parameters.\n * @param {Object | undefined} params.range Type of color range.\n * @param {string} params.name the label to show on axis.\n * @param {string} params.type The type of scale to handle.\n * @memberof ColorAxis\n */\n constructor (config) {\n generateGetterSetters(this, PROPS);\n this.config(config);\n\n this._domainType = this._config.type === 'linear' ? CONTINOUS : DISCRETE;\n this._rangeType = (this._config.type === 'linear' && !this._config.step) ? CONTINOUS : DISCRETE;\n\n this._schemeType = getSchemeType(this._config.range);\n\n this._colorStrategy = this.setColorStrategy(this._domainType, this._rangeType, this._schemeType);\n this._scale = this.createScale(this._colorStrategy);\n\n this._id = getUniqueId();\n\n this.updateDomain(config.domain);\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof ColorAxis\n */\n static defaultConfig () {\n return DEFAULT_CONFIG;\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof ColorAxis\n */\n static type () {\n return COLOR;\n }\n\n /**\n *\n *\n * @param {*} colorStrategy\n * @returns\n * @memberof ColorAxis\n */\n createScale (colorStrategy) {\n const { range } = this.config();\n if (range && typeof (range) === 'string') {\n return getScheme(range);\n }\n return createScale({\n type: colorStrategy.scale,\n range\n });\n }\n\n /**\n *\n *\n * @param {*} domainType\n * @param {*} rangeType\n * @param {*} schemeType\n * @returns\n * @memberof ColorAxis\n */\n setColorStrategy (domainType, rangeType, schemeType) {\n const { stops } = this.config();\n\n return strategyGetter(domainType, rangeType, schemeType, stops);\n }\n\n /**\n *\n *\n * @param {*} domainVal\n * @returns\n * @memberof ColorAxis\n */\n getHslString (hslColorArray) {\n return getHslString(hslColorArray);\n }\n /**\n *\n *\n * @param {*} domainVal\n * @returns\n * @memberof ColorAxis\n */\n getColor (domainVal) {\n return this.getHslString(this.getRawColor(domainVal));\n }\n /**\n *\n *\n * @param {*} domainVal\n * @returns\n * @memberof ColorAxis\n */\n getRawColor (domainVal) {\n if (this.domain() && domainVal !== undefined) {\n const scale = this.scale();\n const range = scale.range ? scale.range() : null;\n const color = this._colorStrategy.value(range)(domainVal, scale, this.domain(), this.uniqueValues());\n\n if (typeof color === 'string') {\n const col = color.substring(color.indexOf('(') + 1, color.lastIndexOf(')')).split(/,\\s*/);\n return rgbToHsv(...col);\n }\n return [...color];\n }\n return [...this.config().value];\n }\n\n /**\n *\n *\n * @param {*} [domain=[]]\n * @returns\n * @memberof ColorAxis\n */\n updateDomain (domain = []) {\n if (domain.length) {\n const scale = this.scale();\n const range = scale.range ? scale.range() : null;\n const domainRangeFn = this._colorStrategy.domainRange();\n const scaleInfo = domainRangeFn(domain, this.config().stops, range);\n\n this.domain(scaleInfo.domain);\n scaleInfo.range && this.scale().range(scaleInfo.range);\n this.uniqueValues(scaleInfo.uniqueVals);\n this.scale().domain(scaleInfo.scaleDomain || this.domain());\n }\n return this;\n }\n\n /**\n * This method returns an object that can be used to\n * reconstruct this instance.\n *\n * @return {Object} the serializable props of axis\n * @memberof ShapeAxis\n */\n serialize () {\n return {\n type: this.constructor.type(),\n scale: this.scale(),\n domain: this.domain(),\n config: this.config()\n };\n }\n\n transformColor (color, transformationArr) {\n const h = color[0] * 360;\n const s = color[1] * 100;\n const l = color[2] * 100;\n const a = color[3] || 1;\n const newH = h + transformationArr[0];\n const newS = s + transformationArr[1];\n const newL = l + transformationArr[2];\n const newA = a + transformationArr[3] || 0;\n\n return { color: `hsla(${newH},${newS}%,${newL}%,${newA})`, hsla: [newH / 360, newS / 100, newL / 100, newA] };\n }\n\n /**\n * Returns the id of the axis.\n * @return {string} Unique identifier of the axis.\n */\n id () {\n return this._id;\n }\n\n}\n","export const DEFAULT_CONFIG = {\n value: 36,\n range: [36, 1000]\n};\n","import { numberInterpolator, piecewiseInterpolator } from 'muze-utils';\nimport { CONTINOUS, DISCRETE } from '../enums/constants';\nimport { LINEAR, THRESHOLD } from '../enums/scale-type';\n\n/**\n *\n *\n * @param {*} domain\n * @returns\n */\nconst indexedDomain = (domain) => {\n const uniqueVals = domain;\n const retDomain = domain.map((d, i) => (i) / (domain.length - 1));\n return { domain: retDomain, uniqueVals, scaleDomain: [0, 1] };\n};\n\n/**\n *\n *\n * @param {*} domain\n * @returns\n */\nconst normalDomain = (domain) => {\n const uniqueVals = domain;\n return { uniqueVals, domain };\n};\n\n/**\n *\n *\n * @param {*} domain\n * @param {*} intervals\n * @returns\n */\nconst steppedDomain = (domain, intervals) => {\n let newIntervals = [];\n if (intervals instanceof Array) {\n newIntervals = intervals.slice().sort();\n } else {\n const interpolator = numberInterpolator()(...domain);\n for (let i = 0; i < intervals; i++) {\n newIntervals[i] = interpolator(i / (intervals - 1));\n }\n }\n if (newIntervals[0] < domain[0]) {\n newIntervals.shift();\n }\n const retDomain = newIntervals;\n return { uniqueVals: newIntervals, domain: retDomain, nice: true };\n};\n\n/**\n *\n *\n * @param {*} domainValue\n * @param {*} scale\n * @param {*} domain\n * @param {*} uniqueVals\n * @returns\n */\nconst discreteRange = (domainValue, scale, domain) => {\n const numVal = (domainValue - domain[0]) / (domain[domain.length - 1] - domain[0]);\n const interpolator = numberInterpolator()(...scale.range());\n return interpolator(numVal);\n};\n\n/**\n *\n *\n * @param {*} domainValue\n * @param {*} scale\n * @param {*} domain\n * @returns\n */\nconst pieceWiseRange = (domainValue, scale, domain, uniqueVals) => {\n const index = uniqueVals.indexOf(domainValue);\n const numVal = domain[index];\n const fn = piecewiseInterpolator()(numberInterpolator(), [...scale.range()]);\n return fn(numVal);\n};\n\n/**\n *\n *\n * @param {*} domainValue\n * @param {*} scale\n */\nconst normalRange = (domainValue, scale) => scale(domainValue);\n\n/**\n *\n *\n * @param {*} intervals\n */\nconst strategies = {\n [`${DISCRETE}-${CONTINOUS}`]: {\n scale: LINEAR,\n domain: indexedDomain,\n range: pieceWiseRange\n },\n [`${CONTINOUS}-${CONTINOUS}`]: {\n scale: LINEAR,\n domain: normalDomain,\n range: normalRange\n },\n [`${CONTINOUS}-${DISCRETE}`]: {\n scale: THRESHOLD,\n domain: steppedDomain,\n range: discreteRange\n }\n};\n\n/**\n *\n *\n * @param {*} domainType\n * @param {*} rangeType\n * @param {*} schemeType\n * @param {*} intervals\n */\nexport const strategyGetter = (domainType, rangeType) =>\n strategies[`${domainType}-${rangeType}`];\n","export const PROPS = {\n config: {},\n domain: {\n sanitization: (context, value) => {\n context.scale().domain(value);\n return value;\n }\n },\n range: {},\n scale: {},\n uniqueValues: {}\n};\n","/**\n * @module Axis\n * This file declares a class that is used to render an axis to add meaning to\n * plots.\n */\nimport { getUniqueId, generateGetterSetters } from 'muze-utils';\nimport { createScale } from '../scale-creator';\nimport { DEFAULT_CONFIG } from './defaults';\nimport { SIZE, CONTINOUS, DISCRETE } from '../enums/constants';\nimport { strategyGetter } from './size-strategy';\nimport { PROPS } from './props';\n\n/**\n* This class is used to instantiate a SimpleAxis.\n* @class SimpleAxis\n*/\nexport default class SizeAxis {\n\n /**\n * Creates an instance of SimpleAxis.\n * @param {Object} config input parameters.\n * @memberof SizeAxis\n */\n constructor (config) {\n generateGetterSetters(this, PROPS);\n\n this._id = getUniqueId();\n this._config = Object.assign({}, this.constructor.defaultConfig(), config);\n // @todo: Will use configuration override using scale decorator\n this._domainType = this._config.type === 'linear' ? CONTINOUS : DISCRETE;\n this._rangeType = CONTINOUS;\n\n this._sizeStrategy = this.setStrategy(this._domainType, this._rangeType);\n this._scale = this.createScale(this._sizeStrategy);\n this._range = this._config.range;\n\n this.updateDomain(config.domain);\n }\n\n /**\n *\n *\n * @param {*} domainType\n * @param {*} rangeType\n * @param {*} schemeType\n * @returns\n * @memberof ColorAxis\n */\n setStrategy (domainType, rangeType) {\n return strategyGetter(domainType, rangeType);\n }\n\n /**\n *\n *\n * @returns\n * @memberof SizeAxis\n */\n createScale (strategy) {\n const {\n range\n } = this.config();\n return createScale({\n type: strategy.scale,\n range\n });\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof ColorAxis\n */\n static defaultConfig () {\n return DEFAULT_CONFIG;\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof ColorAxis\n */\n static type () {\n return SIZE;\n }\n\n /**\n *\n *\n * @param {*} domainVal\n * @returns\n * @memberof SizeAxis\n */\n getSize (domainVal = 0) {\n let sizeVal = 1;\n const {\n value\n } = this.config();\n const scale = this.scale();\n const domain = this.domain() || [1, 1];\n\n if (!scale || domain[0] === domain[1]) {\n sizeVal = value;\n } else {\n return this._sizeStrategy.range(domainVal, scale, this.domain(), this.uniqueValues());\n }\n return sizeVal;\n }\n\n /**\n * This method is used to assign a domain to the axis.\n *\n * @param {Array} domain the domain of the scale\n * @memberof SizeAxis\n */\n updateDomain (domain) {\n if (domain) {\n const domainFn = this._sizeStrategy.domain;\n\n const domainInfo = domainFn(domain, this.config().intervals);\n\n this.domain(domainInfo.domain);\n this.uniqueValues(domainInfo.uniqueVals);\n\n this.scale().domain(domainInfo.scaleDomain || this.domain());\n }\n return this;\n }\n\n /**\n * This method returns an object that can be used to\n * reconstruct this instance.\n *\n * @return {Object} the serializable props of axis\n * @memberof ShapeAxis\n */\n serialize () {\n return {\n type: this.constructor.type(),\n scale: this.scale(),\n domain: this.domain(),\n range: this.range(),\n config: this.config()\n };\n }\n\n /**\n * Returns the id of the axis.\n * @return {string} Unique identifier of the axis.\n */\n id () {\n return this._id;\n }\n}\n","export const DEFAULT_CONFIG = {\n generator: null,\n value: 'circle',\n range: ['circle', 'diamond', 'star', 'cross', 'square', 'wye', 'triangle']\n};\n","export const PROPS = {\n config: {},\n domain: {},\n scale: {},\n uniqueValues: {},\n generator: {}\n};\n\n","/**\n * @module Axis\n * This file declares a class that is used to render an axis to add meaning to\n * plots.\n */\nimport { getUniqueId, getSymbol, generateGetterSetters, mergeRecursive } from 'muze-utils';\nimport { createScale } from '../scale-creator';\nimport { DEFAULT_CONFIG } from './defaults';\nimport { SHAPE } from '../enums/constants';\nimport { shapeGenerator } from './helper';\nimport { PROPS } from './props';\n\n/**\n* This class is used to instantiate a SimpleAxis.\n* @class SimpleAxis\n*/\nexport default class ShapeAxis {\n /**\n * Creates an instance of SimpleAxis.\n * @param {Object} params input parameters.\n * @param {Object | undefined} params.range Type of color scheme.\n * @memberof ShapeAxis\n */\n constructor (config) {\n generateGetterSetters(this, PROPS);\n\n this._id = getUniqueId();\n this._config = Object.assign({}, this.constructor.defaultConfig());\n this._config = mergeRecursive(this._config, config);\n\n this._scale = createScale({\n type: 'ordinal',\n range: this._config.range\n });\n this.updateDomain(config.domain);\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof ColorAxis\n */\n static defaultConfig () {\n return DEFAULT_CONFIG;\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof ColorAxis\n */\n static type () {\n return SHAPE;\n }\n\n /**\n *\n *\n * @param {*} value\n * @returns\n * @memberof ShapeAxis\n */\n getShape (value) {\n if (!this.scale() || !this.domain() || !value) {\n return this.config().value;\n }\n\n if (this._generatedShapes) {\n return this._generatedShapes[value];\n }\n\n const shapeType = this.scale()(value);\n if (shapeType === 'string') {\n return getSymbol(shapeType);\n }\n\n return shapeType;\n }\n\n /**\n * This method is used to assign a domain to the axis.\n *\n * @param {Array} domain the domain of the scale\n * @memberof ShapeAxis\n */\n updateDomain (domain = []) {\n if (domain.length) {\n this.uniqueValues(domain);\n this.domain(domain);\n this.scale().domain(domain);\n\n if (this.config().generator) {\n this._generatedShapes = shapeGenerator(domain, this.config().generator);\n }\n }\n return this;\n }\n\n /**\n * This method returns an object that can be used to\n * reconstruct this instance.\n *\n * @return {Object} the serializable props of axis\n * @memberof ShapeAxis\n */\n serialize () {\n return {\n type: this.constructor.type(),\n scale: this.scale(),\n domain: this.domain(),\n range: this.config().range,\n config: this.config()\n };\n }\n\n /**\n * Returns the id of the axis.\n * @return {string} Unique identifier of the axis.\n */\n id () {\n return this._id;\n }\n}\n","/**\n *\n *\n * @param {*} domain\n * @param {*} generatorFn\n * @returns\n */\nexport const shapeGenerator = (domain, generatorFn) => {\n const generatedShapes = {};\n domain.forEach((value) => {\n generatedShapes[value] = generatorFn(value);\n });\n return generatedShapes;\n};\n","import * as ScaleType from './enums/scale-type';\n\nconst DATA_TYPES = {\n DIMENSION: 'dimension',\n CATEGORICAL: 'categorical',\n MEASURE: 'measure',\n DATETIME: 'temporal'\n};\n\n/**\n * Map of DataModel types to associated field types.\n */\nexport const dataTypeScaleMap = {\n [DATA_TYPES.DIMENSION]: ScaleType.BAND,\n [DATA_TYPES.MEASURE]: ScaleType.LINEAR,\n [DATA_TYPES.DATETIME]: ScaleType.TIME\n};\n\n","import { nestCollection } from 'muze-utils';\n\n/**\n * Create multiple datasets from a single dataset by grouping the data using\n * a dimensional field.\n * @param {Array} schema Name and type of fields are stored in schema\n * @param {Array} data Data array\n * @param {Object} config Configuration object\n * @return {Array} Grouped data array\n */\nexport default (schema, data, config) => {\n const groupBy = config.groupBy instanceof Array ? config.groupBy : [config.groupBy];\n const groupByIndices = groupBy.map(fieldName => schema.findIndex(d => d.name === fieldName));\n\n if (groupByIndices.find(d => d === -1) !== undefined) {\n throw new Error(`Groupby field ${groupBy} not found in schema`);\n }\n\n return nestCollection({\n keys: groupByIndices,\n data\n });\n};\n","/**\n * @module Transform\n * This file exports a function that is used to implement\n * the identity transform\n */\n /* eslint no-unused-vars: 0 */\n /**\n * This function accepts data and returns the data unchanged.\n * @param {Object} schema The schema.\n * @param {Array} data The data array.\n * @param {Object} config The config object.\n * @return {Array} The unchanged data.\n */\n function identityTransform (schema, data, config) {\n return data;\n }\n\n export default identityTransform;\n","/**\n * @module Transform\n * This file exports the transform factory.\n */\nimport * as TransformType from '../enums/transform-type';\nimport identity from '../identity-transform';\nimport group from '../group-transform';\nimport stack from '../stack-transform';\n\n/* istanbul ignore next */\nconst transformMap = {\n [TransformType.IDENTITY]: identity,\n [TransformType.GROUP]: group,\n [TransformType.STACK]: stack\n};\n\n/**\n * This function is used to retirn a transform associated\n * with the given type.\n *\n * @param {string} type The type of the transform.\n * @return {Function} The transform function.\n */\nfunction transformFactory (type) {\n const transform = transformMap[type];\n if (typeof transform !== 'function') {\n throw new Error('Invalid transform type supplied.');\n }\n return transform;\n}\n\nexport default transformFactory;\n","/**\n * @module Transform\n * This module exports constants that are used to reference transforms in\n * a consistent manner throughout the project.\n */\n/* eslint one-var: 0 */\n export const IDENTITY = 'identity';\n export const GROUP = 'group';\n export const STACK = 'stack';\n export const FRACTURE = 'fracture';\n","import { stack } from 'muze-utils';\n\nimport group from '../group-transform';\n/*\n Normalize the data to a form which can be given to d3 stack for stacking the data\n ['Product', 'Sales', 'Region'],\n 0 ['A', 2000, 'North'],\n 1 ['A', 3000, 'South'],\n 2 ['B', 3000, 'South'],\n 3 ['B', 2000, 'North'],\n 4 ['C', 3000, 'South'],\n 5 ['C', 2000, 'North']\n |\n |\n ['Product', 'North', 'South'],\n ['A', 2000, 3000],\n ['B', 2000, 3000],\n ['C', 2000, 3000]\n*/\n// eslint-disable-next-line require-jsdoc\nconst normalizeData = (data, schema, valueField, uniqueField, groupBy) => {\n const groupedData = group(schema, data, {\n groupBy: uniqueField\n });\n const uniqueFieldIndex = schema.findIndex(d => d.name === uniqueField);\n const valueFieldIndex = schema.findIndex(d => d.name === valueField);\n const seriesKeyIndex = schema.findIndex(d => d.name === groupBy);\n const seriesKeys = data.map(d => d[seriesKeyIndex]).filter((item, pos, arr) => arr.indexOf(item) === pos).sort();\n const fieldNames = schema.reduce((acc, obj, i) => {\n acc[i] = obj.name;\n return acc;\n }, {});\n const dataArr = groupedData.map((arr) => {\n const tuples = {};\n const rowObj = arr.values.reduce((acc, row) => {\n acc = row.reduce((obj, value, i) => {\n if (i === seriesKeyIndex) {\n obj[value] = row[valueFieldIndex];\n tuples[value] = row;\n } else if (i !== valueFieldIndex) {\n obj[fieldNames[i]] = value;\n }\n return obj;\n }, acc);\n return acc;\n }, {});\n rowObj._tuple = tuples;\n // Set missing values field to zero value\n seriesKeys.forEach((seriesKey) => {\n if (rowObj[seriesKey] === undefined) {\n rowObj[seriesKey] = 0;\n const newArr = new Array(arr.values[0].length);\n newArr[uniqueFieldIndex] = arr.key;\n newArr[seriesKeyIndex] = seriesKey;\n rowObj._tuple[seriesKey] = newArr;\n }\n });\n return rowObj;\n });\n\n return {\n data: dataArr,\n keys: seriesKeys\n };\n};\n/**\n * Generate a stacked representation of data\n * @param {Array} schema schema Array\n * @param {Array} data data array\n * @param {Object} config Configuration object\n * @return {Array} stacked data\n */\nexport default (schema, data, config) => {\n const uniqueField = config.uniqueField;\n const valueField = config.value;\n const groupBy = config.groupBy;\n const sort = config.sort || 'descending';\n const normalizedData = normalizeData(data, schema, valueField, uniqueField, groupBy);\n const keys = normalizedData.keys;\n const map = {};\n const orderBy = config.orderBy;\n const orderIndex = schema.findIndex(d => d.name === orderBy);\n const groupByIndex = schema.findIndex(d => d.name === groupBy);\n if (orderIndex !== -1) {\n keys.forEach((key) => {\n const name = data.find(d => d[groupByIndex] === key);\n map[key] = name[orderIndex];\n });\n normalizedData.keys.sort((a, b) => map[a].localeCompare(map[b]));\n }\n\n const stackData = stack({\n keys: normalizedData.keys,\n offset: config.offset || 'diverging',\n order: sort,\n data: normalizedData.data\n });\n stackData.forEach((seriesData) => {\n seriesData.forEach((dataObj) => {\n dataObj.data = dataObj.data._tuple[seriesData.key];\n });\n });\n return stackData;\n};\n\n","import {\n FieldType,\n getDomainFromData,\n setStyles,\n easeFns,\n selectElement,\n DimensionSubtype\n} from 'muze-utils';\nimport { ScaleType } from '@chartshq/muze-axis';\nimport { transformFactory } from '@chartshq/transform';\nimport { IDENTITY, STACK, GROUP, COLOR, SHAPE, SIZE, ENCODING } from '../enums/constants';\n\nconst BAND = ScaleType.BAND;\n\nexport const getLayerColor = ({ datum, index }, { colorEncoding, colorAxis, colorFieldIndex }) => {\n let rawColor = '';\n let color = '';\n if (colorEncoding && colorEncoding.value instanceof Function) {\n color = colorEncoding.value(datum, index);\n rawColor = colorEncoding.value(datum, index);\n } else {\n rawColor = colorAxis.getRawColor(datum._data[colorFieldIndex]);\n color = colorAxis.getHslString(rawColor);\n }\n return { color, rawColor };\n};\n\nconst transfromColor = (colorAxis, datum, styleType, intensity) => {\n datum.meta.stateColor[styleType] = datum.meta.stateColor[styleType] || datum.meta.originalColor;\n const fillColorInfo = colorAxis.transformColor(datum.meta.stateColor[styleType], intensity);\n datum.meta.stateColor[styleType] = fillColorInfo.hsla;\n\n return fillColorInfo;\n};\n\nexport const applyInteractionStyle = (context, selectionSet, interactionStyles, config) => {\n const elements = context.getPlotElementsFromSet(selectionSet);\n const axes = context.axes();\n const colorAxis = axes.color;\n const apply = config.apply;\n const interactionType = config.interactionType;\n interactionStyles.forEach((style) => {\n const styleType = style.type;\n elements.style(styleType, ((d) => {\n const { colorTransform, stateColor, originalColor } = d.meta;\n colorTransform[interactionType] = colorTransform[interactionType] || {};\n if (apply && !colorTransform[interactionType][styleType]) {\n // fade selections\n colorTransform[interactionType][styleType] = style.intensity;\n const color = transfromColor(colorAxis, d, styleType, style.intensity).color;\n return color;\n }\n if (!apply && colorTransform[interactionType][styleType]) {\n // unfade selections\n colorTransform[interactionType][styleType] = null;\n return transfromColor(colorAxis, d, styleType, style.intensity.map(e => -e)).color;\n }\n const [h, s, l, a] = stateColor[styleType] ? stateColor[styleType] : originalColor;\n return `hsla(${h * 360},${s * 100}%,${l * 100}%, ${a || 1})`;\n }));\n });\n};\n\n/**\n *\n *\n * @param {*} selectionSet\n * @param {*} className\n * @param {*} hasFaded\n */\nexport const fadeUnfadeSelection = (context, selectionSet, hasFaded, interaction) => {\n const interactionConfig = { interaction, apply: hasFaded };\n applyInteractionStyle(context, selectionSet, 'fade', interactionConfig);\n};\n\n/**\n *\n *\n * @param {*} selectionSet\n * @param {*} className\n * @param {*} hasFaded\n */\nexport const focusUnfocusSelection = (context, selectionSet, isFocussed, interaction) => {\n const interactionConfig = { interaction, apply: isFocussed };\n applyInteractionStyle(context, selectionSet, 'focus', interactionConfig);\n};\n\n/**\n *\n *\n * @param {*} axes\n * @returns\n */\nexport const getAxesScales = (axes) => {\n const [xAxis, yAxis] = [ENCODING.X, ENCODING.Y].map(e => axes[e]);\n const [xScale, yScale] = [xAxis, yAxis].map(e => e && e.scale());\n return {\n xAxis,\n yAxis,\n xScale,\n yScale\n };\n};\n\n/**\n *\n *\n * @param {*} encoding\n * @param {*} fieldsConfig\n * @returns\n */\nexport const getEncodingFieldInf = (encoding, fieldsConfig) => {\n const [xField, yField, x0Field, y0Field, colorField, shapeField, sizeField] =\n [ENCODING.X, ENCODING.Y, ENCODING.X0, ENCODING.Y0, COLOR, SHAPE, SIZE].map(e => encoding[e] &&\n encoding[e].field);\n\n const [xFieldType, yFieldType] = [xField, yField, x0Field, y0Field].map(e => fieldsConfig[e] &&\n fieldsConfig[e].def.type);\n\n const [xFieldSubType, yFieldSubType] = [xField, yField].map(e => fieldsConfig[e] && (fieldsConfig[e].def.subtype ||\n fieldsConfig[e].def.type));\n\n const [xFieldIndex, yFieldIndex, x0FieldIndex, y0FieldIndex] = [xField, yField, x0Field, y0Field]\n .map(e => fieldsConfig[e] && fieldsConfig[e].index);\n\n return {\n xField,\n yField,\n colorField,\n shapeField,\n sizeField,\n x0Field,\n y0Field,\n xFieldType,\n yFieldType,\n xFieldSubType,\n yFieldSubType,\n xFieldIndex,\n yFieldIndex,\n x0FieldIndex,\n y0FieldIndex\n };\n};\n\n/**\n *\n *\n * @param {*} layerConfig\n * @param {*} fieldsConfig\n * @returns\n */\nexport const getValidTransform = (layerConfig, fieldsConfig, encodingFieldInf) => {\n let transformType;\n const {\n transform\n } = layerConfig;\n const {\n xField,\n yField,\n xFieldType,\n yFieldType\n } = encodingFieldInf;\n const groupByField = transform.groupBy;\n const groupByFieldMeasure = fieldsConfig[groupByField] && fieldsConfig[groupByField].def.type === FieldType.MEASURE;\n transformType = transform.type;\n if (!xField || !yField || groupByFieldMeasure || !groupByField || xFieldType === FieldType.DIMENSION &&\n yFieldType === FieldType.DIMENSION) {\n transformType = IDENTITY;\n }\n return transformType;\n};\n\n/**\n *\n *\n * @param {*} dataModel\n * @param {*} config\n * @param {*} transformType\n * @returns\n */\nexport const transformData = (dataModel, config, transformType, encodingFieldInf) => {\n const data = dataModel.getData({ withUid: true });\n const schema = data.schema;\n const transform = config.transform;\n const {\n xField,\n yField,\n xFieldType,\n yFieldType\n } = encodingFieldInf;\n const uniqueField = xFieldType === FieldType.MEASURE ? yField : xField;\n\n return transformFactory(transformType)(schema, data.data, {\n groupBy: transform.groupBy,\n uniqueField,\n sort: transform.sort || 'none',\n offset: transform.offset,\n orderBy: transform.orderBy,\n value: yFieldType === FieldType.MEASURE ? yField : xField\n }, data.uids);\n};\n\nexport const getIndividualClassName = (d, i, data, context) => {\n const className = context.config().individualClassName;\n let classNameStr = '';\n if (className instanceof Function) {\n classNameStr = className(d, i, data, context);\n }\n return classNameStr;\n};\n\n/*\n * This method resolves the x, y, x0 and y0 values from the transformed data.\n * It also checks the type of transformed data for example, if it is a stacked data\n * then it fetches the y and y0 values from the stacked data.\n * @param {Array.} transformedData transformed data\n * @param {Object} fieldsConfig field definitions\n * @param {string} transformType type of transformed data - stack, group or identity.\n * @return {Array.} Normalized data\n*/\nexport const getNormalizedData = (transformedData, fieldsConfig, encodingFieldInf, transformType) => {\n const transformedDataArr = transformType === IDENTITY ? [transformedData] : transformedData;\n const {\n xFieldType,\n xFieldIndex,\n yFieldIndex,\n x0FieldIndex,\n y0FieldIndex\n } = encodingFieldInf;\n const fieldsLen = Object.keys(fieldsConfig).length;\n /**\n * Returns normalized data from transformed data. It recursively traverses through\n * the transformed data if there it is nested.\n */\n return transformedDataArr.map((data) => {\n const values = transformType === GROUP ? data.values : data;\n return values.map((d) => {\n let pointObj = {};\n let tuple;\n if (transformType === STACK) {\n tuple = d.data || [];\n let y;\n let y0;\n let x;\n let x0;\n if (d[1] >= d[0]) {\n y = x0 = d[1];\n x = y0 = d[0];\n } else {\n y = x0 = d[0];\n x = y0 = d[1];\n }\n\n pointObj = xFieldType === FieldType.MEASURE ? {\n x,\n x0,\n y: tuple[yFieldIndex],\n y0: tuple[yFieldIndex]\n } : {\n x: tuple[xFieldIndex],\n x0: tuple[xFieldIndex],\n y,\n y0\n };\n pointObj._data = tuple;\n pointObj._id = tuple[fieldsLen];\n } else {\n pointObj = {\n x: d[xFieldIndex],\n y: d[yFieldIndex],\n x0: d[x0FieldIndex],\n y0: d[y0FieldIndex]\n };\n pointObj._data = d;\n pointObj._id = d[fieldsLen];\n }\n return pointObj;\n });\n }).filter(d => d.length);\n};\n\nexport const calculateDomainFromData = (data, encodingFieldInf, transformType) => {\n const {\n xFieldSubType,\n yFieldSubType,\n xField,\n yField,\n x0Field,\n y0Field\n } = encodingFieldInf;\n const domains = {};\n const yEnc = ENCODING.Y;\n const xEnc = ENCODING.X;\n if (xField) {\n domains.x = getDomainFromData(data, x0Field || transformType === STACK ? [xEnc, ENCODING.X0] : [xEnc, xEnc],\n xFieldSubType);\n }\n if (yField) {\n domains.y = getDomainFromData(data, y0Field || transformType === STACK ? [ENCODING.Y0, ENCODING.Y] :\n [yEnc, yEnc], yFieldSubType);\n }\n\n return domains;\n};\n\nexport const attachDataToVoronoi = (voronoi, points) => {\n voronoi.data([].concat(...points).filter(d => d._id !== undefined).map((d) => {\n const point = d.update;\n return {\n x: point.x,\n y: point.y,\n data: d\n };\n }));\n};\n\n/**\n *\n *\n * @param {*} target\n * @param {*} styles\n * @param {*} remove\n */\nexport const updateStyle = (target, styles, remove) => {\n for (const key in styles) {\n if ({}.hasOwnProperty.call(styles, key)) {\n target.style(key, remove ? null : styles[key]);\n }\n }\n};\n\n/**\n *\n *\n * @param {*} mount\n * @param {*} context\n */\nexport const animateGroup = (mount, context) => {\n let groupTransition;\n let update;\n const { transition, groupAnimateStyle } = context;\n const { duration, effect, disabled } = transition;\n if (groupAnimateStyle) {\n setStyles(mount.node(), groupAnimateStyle.enter);\n update = groupAnimateStyle.update;\n if (!disabled) {\n groupTransition = mount.transition()\n .ease(easeFns[effect])\n .duration(duration)\n .on('end', function () {\n updateStyle(selectElement(this), update, true);\n });\n } else {\n groupTransition = mount;\n }\n updateStyle(groupTransition, update);\n }\n};\n\nexport const positionPoints = (context, points) => {\n const positioner = context.encodingTransform();\n if (positioner) {\n return positioner(points, context, { smartLabel: context._dependencies.smartLabel });\n }\n return points;\n};\n\n/**\n * Gets the width of each group. It gets the width from axis if it is available for\n * example when the scale is nominal else it calculates the width from the\n * range of the axis and number of data points.\n *\n * @param {SimpleAxis} axis instance of axis\n * @param {number} minDiff Minimum difference between data points\n * @return {number} width of each bar\n * @private\n*/\nexport const getGroupSpan = (axis, minDiff) => {\n let groupSpan;\n const width = axis.getUnitWidth();\n const scale = axis.scale();\n const range = scale.range();\n const domain = scale.domain();\n !width ? groupSpan = (Math.abs(range[1] - range[0]) / Math.abs(domain[1] - domain[0])) * minDiff :\n (groupSpan = width);\n\n return groupSpan;\n};\n\nexport const getPlotMeasurement = (context, dimensionalValues) => {\n const fieldInfo = context.encodingFieldsInf();\n const axes = context.axes();\n const transformType = context.transformType();\n const config = context.config();\n const bandScale = context._bandScale;\n\n return ['x', 'y'].map((type) => {\n let span = 0;\n let groupSpan = 0;\n let padding = 0;\n let offsetValues = [];\n if (fieldInfo[`${type}FieldType`] === FieldType.DIMENSION) {\n let actualGroupWidth;\n const isTemporal = fieldInfo[`${type}FieldSubType`] === DimensionSubtype.TEMPORAL;\n const timeDiff = isTemporal ? context.dataProps().timeDiffs[type] : 0;\n const axis = axes[type];\n const pad = config[`pad${type.toUpperCase()}`];\n const innerPadding = config.innerPadding;\n const keys = dimensionalValues;\n const scale = axis.scale();\n groupSpan = getGroupSpan(axis, timeDiff);\n const isAxisBandScale = axis.constructor.type() === BAND;\n const axisPadding = axis.config().padding;\n // If it is a grouped bar then the width of each bar in a grouping is retrieved from\n // a band scale. The band scale will have range equal to width of one group of bars and\n // the domain is set to series keys.\n if (transformType === 'group') {\n const groupPadding = isAxisBandScale ? 0 : axisPadding * groupSpan / 2;\n bandScale.range([groupPadding, groupSpan - groupPadding]).domain(keys).paddingInner(innerPadding);\n span = bandScale.bandwidth();\n actualGroupWidth = groupSpan - (isAxisBandScale ? 0 : axisPadding * groupSpan);\n offsetValues = keys.map(key => bandScale(key) - (isAxisBandScale ? 0 : (groupSpan / 2)));\n } else if (pad !== undefined) {\n let offset;\n if (isAxisBandScale) {\n const step = scale.step();\n offset = scale.padding() * step;\n span = scale.bandwidth() + offset;\n } else {\n span = groupSpan;\n }\n offsetValues = keys.map(() => (isAxisBandScale ? -(offset / 2) : -(span / 2)));\n } else {\n padding = isAxisBandScale ? 0 : axisPadding * groupSpan;\n span = groupSpan - padding;\n actualGroupWidth = span;\n offsetValues = keys.map(() => (isAxisBandScale ? 0 : -(span / 2)));\n }\n\n groupSpan = actualGroupWidth;\n padding = isAxisBandScale ? axisPadding * axis.scale().step() : axisPadding * groupSpan;\n }\n\n return {\n span,\n offsetValues,\n groupSpan,\n padding\n };\n });\n};\n","import { nextFrame } from 'muze-utils';\nimport { getValidTransform, getEncodingFieldInf } from '../helpers';\nimport * as PROPS from '../enums/props';\n\nexport const listenerMap = context => [\n {\n props: [PROPS.TRANSFORMED_DATA],\n listener: fetch => fetch(PROPS.DATA, PROPS.CONFIG, (dataModel, config) => {\n const dataModelValue = dataModel.value;\n const configValue = config.value;\n const encodingValue = configValue && configValue.encoding;\n if (dataModelValue && encodingValue) {\n const fieldsConfig = dataModelValue.getFieldsConfig();\n const encodingFieldsInf = getEncodingFieldInf(encodingValue, fieldsConfig);\n context.encodingFieldsInf(encodingFieldsInf);\n context.transformType(getValidTransform(configValue, fieldsConfig, encodingFieldsInf));\n return context.getTransformedData(dataModelValue, configValue, context.transformType(),\n encodingFieldsInf);\n }\n return null;\n }),\n type: 'computed'\n },\n {\n props: [PROPS.NORMALIZED_DATA],\n listener: fetch => fetch(PROPS.TRANSFORMED_DATA, (transformedData) => {\n const transformedDataValue = transformedData.value;\n if (transformedDataValue) {\n const fieldsConfig = context.data().getFieldsConfig();\n return context.getNormalizedData(transformedDataValue, fieldsConfig);\n }\n return null;\n }),\n type: 'computed'\n },\n {\n props: [PROPS.DOMAIN],\n listener: fetch => fetch(PROPS.NORMALIZED_DATA, (normalizedData) => {\n const normalizedDataValue = normalizedData.value;\n if (normalizedDataValue) {\n return context.calculateDomainFromData(normalizedDataValue, context.encodingFieldsInf(),\n context.data().getFieldsConfig());\n }\n return null;\n }),\n type: 'computed'\n },\n {\n props: [PROPS.DATA],\n listener: (data) => {\n if (data[1]) {\n nextFrame(() => {\n context.store().commit(PROPS.DATA_UPDATED, true);\n });\n }\n },\n type: 'registerImmediateListener'\n },\n {\n props: [PROPS.MOUNT, PROPS.DATA_UPDATED],\n listener: (mount, dataUpdated) => {\n if (mount[1] && dataUpdated[1]) {\n context.render(mount[1]);\n context.dependencies().throwback.commit('onlayerdraw', true);\n }\n },\n type: 'registerChangeListener'\n }\n];\n\n","import { mergeRecursive } from 'muze-utils';\nimport * as PROPS from '../enums/props';\n\nexport const defaultOptions = {\n [PROPS.CONFIG]: {\n value: null,\n meta: {\n sanitization: (config, oldConfig, context) => {\n const constructor = context.constructor;\n const newConf = mergeRecursive({}, constructor.defaultConfig());\n return constructor.defaultPolicy(newConf, config);\n }\n }\n },\n [PROPS.DATA]: {\n value: null,\n meta: {\n preset: (data, context) => {\n if (context._cacheEnabled) {\n context._cachedData.push(data);\n } else {\n context._cachedData = [data];\n }\n }\n }\n },\n [PROPS.MOUNT]: {\n value: null\n },\n [PROPS.AXES]: {\n value: null\n },\n [PROPS.MEASUREMENT]: {\n value: null\n }\n};\n","import {\n getUniqueId,\n mergeRecursive,\n Store,\n FieldType,\n selectElement,\n ReservedFields,\n registerListeners,\n transactor,\n DataModel,\n clone\n} from 'muze-utils';\nimport { SimpleLayer } from '../simple-layer';\nimport * as PROPS from '../enums/props';\nimport {\n transformData,\n calculateDomainFromData,\n getNormalizedData,\n applyInteractionStyle\n} from '../helpers';\nimport { listenerMap } from './listener-map';\nimport { defaultOptions } from './default-options';\n\n/**\n * An abstract class which gives defination of common layer functionality like\n * - transfromation data for various {@link mode}\n * - calculating data domain\n * - linking dependent layers\n * - merging policy of configuration\n * - interaction sideffect helpers\n * - retrieving dom elements from data using id\n * - retrieving the physical dimensions of marks\n * - disposing layer\n *\n * Every layer has to extend base layer and give concrete definition.\n * This layer does not have any default visual. A new layer has to define the logic of `render` for rendering the\n * visuals\n *\n * @public\n * @class\n * @namespace Muze\n */\nexport default class BaseLayer extends SimpleLayer {\n\n /**\n * Creates a layer using a configuration and data.\n *\n * @public\n *\n * @param {DataModel} data Instance of DataModel to be used. This DataModel instance serves as the data for a layer.\n * @param {Object} axes Axes instances to be used for rendering the layer. Axes are used for mapping data from\n * value to px.\n * @param {SimpleAxis} axes.x X axis of the layer. Based on the type of variable it gets instance of BandAxis,\n * TimeAxis, ContinuousAxis\n * @param {SimpleAxis} axes.y X axis of the layer. Based on the type of variable it gets instance of BandAxis,\n * TimeAxis, ContinuousAxis\n * @param {ColorAxis} axes.color Axis for coloring a layer using color interpolators\n * @param {ShapeAxis} axes.shape Axis for providing a shape\n * @param {SizeAxis} axes.shape Axis for determining size of a mark using size interpolator\n * @param {LayerConfig} config Configuration of the layer\n * @param {Object} dependencies Dependencies of the layer\n * @param {SmartLabel} smartLabel Smartlabel singleton instance\n */\n constructor (data, axes, config, dependencies) {\n super();\n this.store(new Store({\n DATA: null,\n [PROPS.DATA_UPDATED]: null\n }));\n transactor(this, defaultOptions, this.store().model);\n this.data(data);\n this.axes(axes);\n this.config(config);\n this.alias(this.constructor.formalName() + getUniqueId());\n this.dependencies(dependencies);\n this._points = [];\n this._cachedData = [];\n this._id = getUniqueId();\n this._measurement = {};\n registerListeners(this, listenerMap);\n }\n\n /**\n * Creates a layer instance\n * @return {BaseLayer} Instance of a layer\n */\n static create (...params) {\n return new this(...params);\n }\n\n /**\n * Default configuration of the layer. This configuration gets merged to the user passed configuration using a\n * plolicy. Base layer only returns part of configuraion, any layer overridding base layer should return its own\n * configuration.\n *\n * @public\n * @static\n *\n * @return {Object} Default configuration\n */\n static defaultConfig () {\n return {\n transform: {\n type: 'identity'\n }\n };\n }\n\n /**\n * Policy defines how user config gets merged to default config. The default policy here does a deep copy\n * operation.\n * Any policy which does more than deep copying should define the policy as a static member.\n *\n * @static\n * @public\n *\n * @param {LayerConfig} conf Configuration with which the user config will be merged\n * @param {LayerConfig} userConf Configuration given by the user\n *\n * @return {LayerConfig} Merged layer configuration\n */\n static defaultPolicy (conf, userConf) {\n return mergeRecursive(conf, userConf);\n }\n\n /**\n * Determines a name for a layer. This name of the layer is used in the input data to refer to this layer.\n * ```\n * .layer([\n * mark: 'bar',\n * encoding: { ... }\n * ])\n * ```\n *\n * @static\n * @public\n *\n * @returns {string} name of layer\n */\n static formalName () {\n return 'base';\n }\n\n store (...store) {\n if (store.length) {\n this._store = store[0];\n return this;\n }\n return this._store;\n }\n\n encodingFieldsInf (...fieldsInf) {\n if (fieldsInf.length) {\n this._encodingFieldsInf = fieldsInf[0];\n return this;\n }\n return this._encodingFieldsInf;\n }\n\n encodingTransform (...encodingTransform) {\n if (encodingTransform.length) {\n this._encodingTransform = encodingTransform[0];\n return this;\n }\n return this._encodingTransform;\n }\n\n /**\n * Provides a alias for a layer. Like it's possible to have same layer (like bar) multiple times, but among multiple\n * layers of same type if one layer has to be referred, alias is used. If no alias is given then `formalName` is set\n * as the alias name.\n *\n * @public\n *\n * If used as setter\n * @param {string} alias Name of the alias\n * @return {BaseLayer} Instance of current base layer\n *\n * If used as getter\n * @return {string} Alias of the current layer\n */\n alias (...params) {\n if (params.length) {\n this._alias = params[0];\n return this;\n }\n return this._alias || this.constructor.formalName();\n }\n\n dependencies (...params) {\n if (params.length) {\n this._dependencies = params[0];\n return this;\n }\n return this._dependencies;\n }\n\n enableCaching () {\n this._cacheEnabled = true;\n return this;\n }\n\n clearCaching () {\n this._cacheEnabled = false;\n return this.data(this._cachedData[0]);\n }\n\n /**\n * Serialize the schema. Merge config is used for serialization.\n *\n * @public\n *\n * @return {LayerConfig} Serialized schema\n */\n serialize () {\n return this.config();\n }\n\n /**\n * Returns the unique identifier of this layer. Id is auto generated during the creation proceess of a schema.\n *\n * @return {string} id of the layer\n */\n id () {\n return this._id;\n }\n\n /**\n * Gets the transform method from transform factory based on type of transform. It then calls the\n * transform method with the data and passes the configuration parameters of transform such as\n * groupBy, value field, etc.\n *\n * @public\n *\n * @param {DataModel} dataModel Instance of DataModel\n * @param {Object} config Configuration for transforming data\n * @return {Array.} Transformed data.\n */\n getTransformedData (dataModel, config, transformType, encodingFieldsInf) {\n return transformData(dataModel, config, transformType, encodingFieldsInf);\n }\n\n /**\n * Calculates the domain from the data.\n * It checks the type of field and calculates the domain based on that. For example, if it\n * is a quantitative or temporal field, then it calculates the min and max from the data or\n * if it is a nominal field then it gets all the values from the data of that field.\n * @param {Array} data DataArray\n * @param {Object} fieldsConfig Configuration of fields\n * @return {Array} Domain values array.\n */\n calculateDomainFromData (data) {\n let domains = {};\n const isEmpty = this.data().isEmpty();\n\n if (!isEmpty) {\n domains = calculateDomainFromData(data, this.encodingFieldsInf(), this.transformType());\n }\n return domains;\n }\n\n shouldDrawAnchors () {\n return false;\n }\n\n /**\n * Returns the domain for the axis.\n *\n * @param {string} encodingType type of encoding x, y, etc.\n * @return {Object} Axis domains\n */\n getDataDomain (encodingType) {\n const domains = this.store().get(PROPS.DOMAIN);\n return encodingType !== undefined ? domains[encodingType] || [] : domains;\n }\n\n /**\n * Returns the domain for the axis.\n *\n * @param {string} encodingType type of encoding x, y, etc.\n * @return {Object} Axis domains\n */\n getNormalizedData (transformedData, fieldsConfig) {\n return getNormalizedData(transformedData, fieldsConfig, this.encodingFieldsInf(), this.transformType());\n }\n\n /**\n * Abstract method for getting nearest point\n * @return {BaseLayer} Instance of base layer\n */\n getNearestPoint () {\n return null;\n }\n\n applyInteractionStyle (interactionType, selectionSet, apply) {\n const interactionConfig = this.config().interaction || {};\n\n const interactionStyles = interactionConfig[interactionType];\n if (interactionStyles) {\n applyInteractionStyle(this, selectionSet, interactionStyles, {\n apply,\n interactionType\n });\n }\n }\n\n /**\n *\n *\n * @returns\n * @memberof BaseLayer\n */\n transformType (...transformType) {\n if (transformType.length) {\n this._transformType = transformType[0];\n return this;\n }\n return this._transformType;\n }\n\n /**\n * Renders the layer\n * @return {BaseLayer} Instance of the layer.\n */\n render () {\n return this;\n }\n\n /**\n *\n *\n * @returns\n * @memberof BaseLayer\n */\n elemType () {\n return 'g';\n }\n\n /**\n * Disposes the entire layer\n * @return {BaseLayer} Instance of layer.\n */\n remove () {\n this.store().unsubscribeAll();\n selectElement(this.mount()).remove();\n return this;\n }\n\n /**\n * Stores point in an object with key as the categorical value or temporal value\n *\n * @param {string} key categorical value or temporal value\n * @param {Object} data Information of the data point\n * @return {BarLayer} Instance of bar layer\n */\n cachePoint (key, data) {\n if (key === null) {\n return this;\n }\n const pointMap = this._pointMap;\n !pointMap[key] && (pointMap[key] = []);\n pointMap[key].push(data);\n return this;\n }\n\n /**\n *\n *\n * @param {*} dataProps\n * @returns\n * @memberof BaseLayer\n */\n dataProps (...dataProps) {\n if (dataProps.length) {\n this._dataProps = dataProps[0];\n return this;\n }\n return this._dataProps;\n }\n\n /**\n *\n *\n * @param {*} data\n * @param {*} id\n * @returns\n * @memberof BaseLayer\n */\n getIdentifiersFromData (data) {\n const schema = this.data().getData().schema;\n const fieldsConfig = this.data().getFieldsConfig();\n const identifiers = [[], []];\n const {\n xFieldType,\n yFieldType,\n xField,\n yField\n } = this.encodingFieldsInf();\n\n const [xMeasure, yMeasure] = [xFieldType, yFieldType].map(type => type === FieldType.MEASURE);\n schema.forEach((d, i) => {\n const name = d.name;\n if (fieldsConfig[name].def.type === FieldType.DIMENSION) {\n identifiers[0].push(name);\n identifiers[1].push(data[i]);\n }\n });\n\n if (xMeasure && yMeasure) {\n const xMeasureIndex = fieldsConfig[xField].index;\n const yMeasureIndex = fieldsConfig[yField].index;\n identifiers[0].push(...[xField, yField]);\n identifiers[1].push(...[data[xMeasureIndex], data[yMeasureIndex]]);\n }\n return identifiers;\n }\n\n getPlotSpan () {\n return {\n x: 0,\n y: 0\n };\n }\n\n getPlotPadding () {\n return {\n x: 0,\n y: 0\n };\n }\n\n /**\n *\n *\n * @param {*} identifiers\n * @returns\n * @memberof BaseLayer\n */\n getPointsFromIdentifiers (identifiers, config = {}) {\n const getAllAttrs = config.getAllAttrs;\n const getBBox = config.getBBox;\n if (!this.data()) {\n return [];\n }\n let fieldNames;\n let values;\n if (identifiers instanceof DataModel) {\n const dataObj = identifiers.getData();\n fieldNames = dataObj.schema.map(d => d.name);\n values = dataObj.data;\n } else {\n fieldNames = identifiers[0];\n values = identifiers.slice(1, identifiers.length);\n }\n\n const points = this._points;\n const fieldsConfig = this.data().getFieldsConfig();\n\n const filteredPoints = [].concat(...points).filter((point) => {\n const { _data, _id } = point;\n\n return fieldNames.every((field, idx) => {\n if (field in fieldsConfig && fieldsConfig[field].def.type === FieldType.DIMENSION) {\n return values.findIndex(d => d[idx] === _data[fieldsConfig[field].index]) !== -1;\n } else if (field === ReservedFields.ROW_ID) {\n return values.findIndex(d => d[idx] === _id) !== -1;\n } return true;\n });\n });\n return getAllAttrs ? filteredPoints : filteredPoints.map((d) => {\n const obj = clone(d);\n if (getBBox) {\n const update = obj.update || obj;\n if (obj.size !== undefined) {\n const sizeVal = Math.sqrt(obj.size / Math.PI) * 2;\n update.width = sizeVal;\n update.height = sizeVal;\n update.x -= sizeVal / 2;\n update.y -= sizeVal / 2;\n } else {\n if (update.width === undefined) {\n update.width = 2;\n }\n if (update.height === undefined) {\n update.height = 2;\n }\n }\n }\n\n return obj.update || obj;\n }).sort((a, b) => a.y - b.y);\n }\n\n getTransformedDataFromIdentifiers (identifiers) {\n const { data: identifierData, schema: identifierSchema } = identifiers.getData();\n const normalizedData = this.store().get(PROPS.NORMALIZED_DATA);\n const fieldsConfig = this.data().getFieldsConfig();\n const {\n yField,\n xField,\n yFieldType,\n xFieldType\n } = this.encodingFieldsInf();\n let measureIndex;\n let enc;\n if (xFieldType === FieldType.MEASURE) {\n measureIndex = fieldsConfig[xField].index;\n enc = 'x';\n } else if (yFieldType === FieldType.MEASURE) {\n measureIndex = fieldsConfig[yField].index;\n enc = 'y';\n }\n\n const transformedData = [];\n normalizedData.forEach((dataArr) => {\n dataArr.forEach((dataObj) => {\n const tupleArr = dataObj._data;\n const exist = identifierSchema.every((obj, i) =>\n identifierData.findIndex(d => tupleArr[fieldsConfig[obj.name].index] === d[i]) !== -1);\n if (exist) {\n const transformedVal = dataObj[enc];\n const row = dataObj._data;\n const tuple = {};\n for (const key in fieldsConfig) {\n const index = fieldsConfig[key].index;\n tuple[key] = row[index];\n if (index === measureIndex) {\n tuple[key] = transformedVal;\n }\n }\n transformedData.push(tuple);\n }\n });\n });\n\n return [transformedData, this.data().getData().schema];\n }\n\n /**\n *\n *\n * @param {*} set\n * @returns\n * @memberof BaseLayer\n */\n getPlotElementsFromSet (set) {\n return selectElement(this.mount()).selectAll(this.elemType()).filter(data =>\n (data ? set.indexOf(data._id) !== -1 : false));\n }\n}\n","import {\n selectElement,\n makeElement,\n pathInterpolators,\n Symbols\n} from 'muze-utils';\nimport { updateStyle } from '../../helpers';\n\nconst line = Symbols.line;\n\n/**\n * Draws a line from the points\n * Generates a svg path string\n * @param {Object} params Contains container, points and interpolate attribute.\n */\nexport const drawLine = (context) => {\n let filteredPoints;\n const { container, points, interpolate, connectNullData, className, style, transition } = context;\n const mount = selectElement(container).attr('class', className);\n const curveInterpolatorFn = pathInterpolators[interpolate];\n const linepath = line()\n .curve(curveInterpolatorFn)\n .x(d => d.update.x)\n .y(d => d.update.y)\n .defined(d => d.update.y !== null);\n\n filteredPoints = points;\n if (connectNullData) {\n filteredPoints = points.filter(d => d.update.y !== null);\n }\n\n updateStyle(mount, style);\n let element = makeElement(mount, 'path', [1]);\n element.classed(points[0].className, true);\n if (!transition.disabled) {\n element = element.transition().duration(transition.duration);\n }\n element.attr('d', linepath(filteredPoints))\n .style('fill-opacity', 0);\n return element;\n};\n","import { CLASSPREFIX } from '../../enums/constants';\n\nexport const defaultConfig = {\n classPrefix: CLASSPREFIX,\n defClassName: 'layer-line',\n className: '',\n interpolate: 'linear',\n transform: {\n type: 'group'\n },\n interaction: {\n highlight: [{\n type: 'stroke',\n intensity: [0, 0, -15, 0]\n }],\n fade: [{\n type: 'stroke',\n intensity: [0, 0, +15, 0]\n }],\n focus: [{\n type: 'stroke',\n intensity: [0, 0, +15, 0]\n }]\n },\n nearestPointThreshold: 20,\n encoding: {\n color: {},\n x: {},\n y: {},\n strokeOpacity: {\n value: 1\n }\n },\n transition: {\n effect: 'cubic',\n duration: 1000\n },\n connectNullData: false\n};\n\n","import {\n Voronoi,\n getQualifiedClassName,\n selectElement,\n makeElement,\n FieldType,\n getObjProp\n} from 'muze-utils';\nimport { BaseLayer } from '../../base-layer';\nimport { drawLine } from './renderer';\nimport { defaultConfig } from './default-config';\nimport { ENCODING } from '../../enums/constants';\nimport * as PROPS from '../../enums/props';\nimport {\n attachDataToVoronoi,\n animateGroup,\n getLayerColor,\n positionPoints,\n getIndividualClassName\n} from '../../helpers';\n\nimport './styles.scss';\n\n/**\n * Line Layer creates a line plot.\n * Example :-\n * const config = {\n * encoding = {\n * x: {\n * field: 'date'\n * },\n * y: {\n * field: 'sales'\n * }\n * }\n * };\n * const linelayer = layerFactory.getLayer('line', [dataModel, axes, config]);\n * linelayer.render(container);\n * @class\n */\nexport default class LineLayer extends BaseLayer {\n\n /**\n *Creates an instance of LineLayer.\n * @param {*} args\n * @memberof LineLayer\n */\n constructor (...args) {\n super(...args);\n this._voronoi = new Voronoi();\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof LineLayer\n */\n static formalName () {\n return 'line';\n }\n\n /**\n *\n *\n * @returns\n * @memberof LineLayer\n */\n elemType () {\n return 'path';\n }\n\n /**\n * Default configuration of line layer\n * @return {Object} Default configuration of layer\n */\n static defaultConfig () {\n return defaultConfig;\n }\n\n /**\n *\n *\n * @static\n * @param {*} conf\n * @param {*} userConf\n * @returns\n * @memberof LineLayer\n */\n static defaultPolicy (conf, userConf) {\n const config = BaseLayer.defaultPolicy(conf, userConf);\n const encoding = config.encoding;\n const transform = config.transform;\n const colorField = encoding.color && encoding.color.field;\n\n if (colorField && !transform.groupBy) {\n transform.groupBy = colorField;\n }\n return config;\n }\n\n /**\n * Returns the draw method for line\n * @return {Function} Draw method of line layer\n */\n getDrawFn () {\n return drawLine;\n }\n\n /**\n * Applies selection styles to the elements that fall within the selection set.\n * @param {Array} selectionSet Array of tuple ids.\n * @param {Object} config Configuration for selection.\n * @return {BarLayer} Instance of bar layer.\n */\n highlightPoint () {\n return this;\n }\n\n /**\n * Removes selection styles to the elements that fall within the selection set.\n * @param {Array} selectionSet Array of tuple ids.\n * @param {Object} config Configuration for selection.\n * @return {BarLayer} Instance of bar layer.\n */\n dehighlightPoint () {\n return this;\n }\n\n focusSelection () {\n return this;\n }\n\n focusOutSelection () {\n return this;\n }\n\n fadeOutSelection () {\n return this;\n }\n\n unfadeSelection () {\n return this;\n }\n\n shouldDrawAnchors () {\n return true;\n }\n\n /**\n * Generates the x and y positions for each point\n * @param {Array} data Data Array\n * @param {Object} encoding Visual Encodings of the layer\n * @param {Object} axes Contains the axis\n * @param {number} seriesIndex index of series\n * @return {Array} Array of points\n */\n translatePoints (data, encodingFieldsInf, axes) {\n let points = [];\n const xAxis = axes.x;\n const yAxis = axes.y;\n const colorAxis = axes.color;\n const encoding = this.config().encoding;\n const { xFieldType, yFieldType } = encodingFieldsInf;\n const isXDim = xFieldType === FieldType.DIMENSION;\n const isYDim = yFieldType === FieldType.DIMENSION;\n const key = isXDim ? ENCODING.X : (isYDim ? ENCODING.Y : null);\n const colorEncoding = encoding.color;\n const colorField = colorEncoding.field;\n const fieldsConfig = this.data().getFieldsConfig();\n const colorFieldIndex = colorField && fieldsConfig[colorField].index;\n const style = {};\n const meta = {};\n\n points = data.map((d, i) => {\n const xPx = xAxis.getScaleValue(d.x) + xAxis.getUnitWidth() / 2;\n const yPx = yAxis.getScaleValue(d.y);\n const { color, rawColor } = getLayerColor({ datum: d, index: i }, {\n colorEncoding, colorAxis, colorFieldIndex });\n\n style.stroke = color;\n style['fill-opacity'] = 0;\n meta.stateColor = {};\n meta.originalColor = rawColor;\n meta.colorTransform = {};\n\n const point = {\n enter: {},\n update: {\n x: xPx,\n y: d.y === null ? null : yPx\n },\n style,\n _data: d._data,\n _id: d._id,\n rowId: d._id,\n source: d._data,\n meta\n };\n point.className = getIndividualClassName(d, i, data, this);\n this.cachePoint(d[key], point);\n return point;\n });\n points = positionPoints(this, points);\n return points;\n }\n\n /**\n * Renders the line plot\n * @param {SVGElement} container svg element\n * @return {LineLayer} instance of line layer\n */\n render (container) {\n let points;\n let seriesClassName;\n let style;\n\n const config = this.config();\n const {\n encoding,\n interpolate,\n className,\n defClassName,\n transition\n } = config;\n const store = this._store;\n const normalizedData = store.get(PROPS.NORMALIZED_DATA);\n const transformedData = store.get(PROPS.TRANSFORMED_DATA);\n const fieldsConfig = this.data().getFieldsConfig();\n const axes = this.axes();\n const keys = transformedData.map(d => d.key);\n const qualifiedClassName = getQualifiedClassName(defClassName, this.id(), config.classPrefix);\n const containerSelection = selectElement(container);\n const colorField = encoding.color.field;\n const colorFieldIndex = fieldsConfig[colorField] && fieldsConfig[colorField].index;\n\n this._points = [];\n this._pointMap = {};\n containerSelection.classed(qualifiedClassName.join(' '), true);\n containerSelection.classed(className, true);\n makeElement(container, 'g', normalizedData, null, {\n enter: (group) => {\n animateGroup(group, {\n transition,\n groupAnimateStyle: {\n enter: {\n 'stroke-opacity': 0,\n 'fill-opacity': this.getPathStyle()['fill-opacity']\n },\n update: {\n 'stroke-opacity': encoding.strokeOpacity.value\n }\n }\n });\n },\n update: (group, dataArr, i) => {\n points = this.translatePoints(dataArr, this.encodingFieldsInf(), axes, i);\n this._points.push(points);\n seriesClassName = `${qualifiedClassName[0]}-${keys[i] || i}`.toLowerCase();\n\n let color;\n const colorValFn = encoding.color.value;\n const colorVal = points.find(d => d._data[colorFieldIndex] !== null &&\n d._data[colorFieldIndex] !== undefined);\n\n if (colorValFn) {\n color = colorValFn(dataArr, i, normalizedData);\n } else {\n color = axes.color.getColor(colorVal && colorVal._data[colorFieldIndex]);\n }\n\n style = this.getPathStyle(color);\n this.getDrawFn()({\n container: group.node(),\n interpolate,\n points,\n className: seriesClassName,\n transition,\n style: style || {},\n connectNullData: config.connectNullData\n });\n }\n }, d => d[0]._data[colorFieldIndex] || d[0]._id);\n\n attachDataToVoronoi(this._voronoi, this._points);\n return this;\n }\n\n /**\n * Get the css styles need to be applied on the line path\n * @param {string} color Color value\n * @return {Object} Path styles\n */\n getPathStyle (color) {\n return {\n stroke: color,\n 'fill-opacity': '0'\n };\n }\n\n /**\n * Gets the nearest point closest to the given position\n * @param {number} x x position\n * @param {number} y y position\n * @return {Object} Nearest point information\n */\n getNearestPoint (x, y, config) {\n let searchRadius = config.searchRadius;\n const data = this.data();\n\n if (!data || (data && data.isEmpty())) {\n return null;\n }\n\n searchRadius = searchRadius !== undefined ? searchRadius : this.config().nearestPointThreshold;\n const point = this._voronoi.find(x, y, searchRadius);\n const dimensions = getObjProp(point, 'data', 'data', 'update');\n\n if (point) {\n const { _data, _id } = point.data.data;\n const identifiers = this.getIdentifiersFromData(_data, _id);\n return {\n id: identifiers,\n dimensions: [{\n x: dimensions.x,\n y: dimensions.y,\n width: 2,\n height: 2\n }],\n layerId: this.id()\n };\n }\n return null;\n }\n}\n","import {\n easeFns,\n selectElement,\n pathInterpolators,\n Symbols\n} from 'muze-utils';\n\nconst area = Symbols.area;\n/**\n * Draws a line from the points\n * Generates a svg path string\n * @param {Object} params Contains container, points and interpolate attribute.\n */\nconst /* istanbul ignore next */ drawArea = (params) => {\n let filteredPoints;\n const { container, points, style, transition, className, connectNullData, interpolate } = params;\n\n const { effect: easeEffect, duration } = transition;\n const mount = selectElement(container);\n const curveInterpolatorFn = pathInterpolators[interpolate];\n const selection = mount.selectAll('path').data([params.points]);\n const [enterAreaPath, updateAreaPath] = ['enter', 'update'].map(e => area().curve(curveInterpolatorFn)\n .x(d => d[e].x)\n .y1(d => d[e].y)\n .y0(d => d[e].y0)\n .defined(d => d[e].y !== null\n ));\n\n filteredPoints = points;\n mount.attr('class', className);\n if (connectNullData) {\n filteredPoints = points.filter(d => d.update.y !== null);\n }\n const selectionEnter = selection.enter().append('path').attr('d', enterAreaPath(filteredPoints));\n selection.merge(selectionEnter).transition().ease(easeFns[easeEffect])\n .duration(duration)\n .attr('d', updateAreaPath(filteredPoints))\n .each(function (d) {\n const element = selectElement(this);\n\n element.classed(d[0].className, true);\n Object.keys(style).forEach(key => element.style(key, style[key]));\n });\n};\n\nexport default drawArea;\n","import { FieldType } from 'muze-utils';\nimport { defaultConfig } from './default-config';\nimport { LineLayer } from '../line';\nimport drawArea from './renderer';\nimport './styles.scss';\nimport { STACK, ENCODING } from '../../enums/constants';\nimport { getAxesScales, positionPoints, getLayerColor, getIndividualClassName } from '../../helpers';\n\n/**\n * Area Layer creates a area plot.\n * @example\n * const config = {\n * encoding = {\n * x: {\n * field: 'date'\n * },\n * // Top y value\n * y: {\n * field: 'maxTemp'\n * },\n * // Base y value\n * y0: {\n * field: 'minTemp\n * }\n * }\n * };\n * const areaLayer = layerFactory.getLayer('area', [dataModel, axes, config]);\n * areaLayer.render(container);\n * @class\n */\nexport default class AreaLayer extends LineLayer {\n /** oation of line layer\n * @return {Object} Default configuration of layer\n */\n static defaultConfig () {\n return defaultConfig;\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof AreaLayer\n */\n static formalName () {\n return 'area';\n }\n\n /**\n * Calculates the domain from data. It calls its parent class's method which is line layer\n * to get the domain and overwrites the domain according to its need.\n * @return {Array} Domain values\n */\n calculateDomainFromData (data, encodingFieldsInf, fieldsConfig) {\n const domains = super.calculateDomainFromData(data, fieldsConfig);\n [ENCODING.X, ENCODING.Y].forEach((type) => {\n const { [`${type}FieldType`]: fieldType } = encodingFieldsInf;\n if (fieldType === FieldType.MEASURE) {\n domains[type][0] = Math.min(domains[type][0], 0);\n }\n });\n return domains;\n }\n\n /**\n * Returns the drawing method of this layer\n * @return {Function} Draw method\n */\n getDrawFn () {\n return drawArea;\n }\n\n /**\n * Generates the x and y positions for each point\n * @param {Array} data Data Array\n * @param {Object} encoding Visual Encodings of the layer\n * @param {Object} axes Contains the axis\n * @return {Array} Array of points\n */\n translatePoints (data, encodingFieldsInf, axes) {\n let points = [];\n const transformType = this.transformType();\n const colorAxis = axes.color;\n const config = this.config();\n const encoding = config.encoding;\n const colorEncoding = encoding.color;\n const colorField = colorEncoding.field;\n const fieldsConfig = this.data().getFieldsConfig();\n const colorFieldIndex = colorField && fieldsConfig[colorField].index;\n const { xField, yField, y0Field } = encodingFieldsInf;\n const {\n xAxis,\n yAxis\n } = getAxesScales(axes);\n const classNameFn = config.individualClassName;\n const isXDim = fieldsConfig[xField] && fieldsConfig[xField].def.type === FieldType.DIMENSION;\n const isYDim = fieldsConfig[yField] && fieldsConfig[yField].def.type === FieldType.DIMENSION;\n const key = isXDim ? 'x' : (isYDim ? 'y' : null);\n points = data.map((d, i) => {\n const xPx = xAxis.getScaleValue(d.x) + xAxis.getUnitWidth() / 2;\n const yPx = yAxis.getScaleValue(d.y);\n const y0Px = (y0Field || transformType === STACK) ? yAxis.getScaleValue(d.y0) : yAxis.getScaleValue(0);\n const { color, rawColor } = getLayerColor({ datum: d, index: i }, {\n colorEncoding, colorAxis, colorFieldIndex });\n const style = {};\n const meta = {};\n style.fill = color;\n // style['fill-opacity'] = 0;\n meta.stateColor = {};\n meta.originalColor = rawColor;\n meta.colorTransform = {};\n const point = {\n enter: {\n x: xPx,\n y: d.y === null ? d.y : yAxis.getScaleValue(0),\n y0: d.y0 === null ? d.y0 : yAxis.getScaleValue(0)\n },\n update: {\n x: xPx,\n y: d.y === null ? d.y : yPx,\n y0: d.y0 === null ? d.y0 : y0Px\n },\n _id: d._id,\n _data: d._data,\n source: d._data,\n rowId: d._id,\n className: classNameFn ? classNameFn(d, i, data, this) : '',\n style,\n meta\n };\n point.className = getIndividualClassName(d, i, data, this);\n this.cachePoint(d[key], point);\n return point;\n });\n points = positionPoints(this, points);\n return points;\n }\n\n /**\n * Get the css styles need to be applied on the line path\n * @param {string} color Color value\n * @return {Object} Path styles\n */\n getPathStyle (color) {\n return {\n fill: color\n };\n }\n}\n\n","import { CLASSPREFIX } from '../../enums/constants';\n\nexport const defaultConfig = {\n classPrefix: CLASSPREFIX,\n defClassName: 'layer-arc',\n padding: { top: 1, bottom: 1, left: 1, right: 1 },\n className: '',\n minOuterRadius: 10,\n interaction: {\n highlight: [{\n type: 'fill',\n intensity: [0, 0, -15, 0]\n }],\n fade: [{\n type: 'fill',\n intensity: [0, 0, +15, 0]\n }],\n focus: [{\n type: 'fill',\n intensity: [0, 0, +15, 0]\n }]\n },\n height: 100,\n width: 100,\n sort: '',\n cornerRadius: 0,\n padAngle: 0,\n padRadius: 0,\n startAngle: 0,\n endAngle: 360,\n colors: ['#F44336', 'blue', 'green', 'yellow', 'orange', 'purple'],\n transform: {\n type: 'identity'\n },\n encoding: {\n 'stroke-width': {\n value: '2px'\n },\n 'stroke-linejoin': {\n value: 'round'\n },\n angle: {\n value: '1'\n },\n radius: {\n value: '1'\n },\n opacity: {\n value: '1'\n },\n color: {\n value: '1'\n },\n shape: {\n value: '1'\n },\n size: {\n value: '1'\n }\n },\n innerRadiusFixer: 10,\n transition: {\n effect: 'cubic',\n duration: 500\n },\n states: {\n highlight: {\n className: `${CLASSPREFIX}-layer-arc-highlight`\n },\n fadeout: {\n className: `${CLASSPREFIX}-layer-arc-fadeout`\n },\n selected: {\n className: `${CLASSPREFIX}-layer-arc-selected`\n }\n }\n};\n\n","import {\n makeElement,\n selectElement,\n getQualifiedClassName,\n isSimpleObject,\n getDomainFromData,\n Symbols,\n FieldType,\n ReservedFields\n} from 'muze-utils';\nimport { defaultConfig } from './default-config';\nimport { BaseLayer } from '../../base-layer';\nimport * as PROPS from '../../enums/props';\nimport { ASCENDING, OUTER_RADIUS_VALUE } from '../../enums/constants';\nimport { getIndividualClassName } from '../../helpers';\nimport { getRangeValue, getRadiusRange, tweenPie, tweenExitPie, getFieldIndices, getPreviousPoint } from './arc-helper';\nimport './styles.scss';\n\nconst pie = Symbols.pie;\nconst arc = Symbols.arc;\n\n/**\n * Arc Layer creates a plot with polar coordinates\n * Example :-\n * const config = {\n * height: 100,\n * width: 100,\n * startAngle: 0,\n * endAngle: Math.PI,\n * cornerRadius: 10,\n * minOuterRadius: 10,\n * outerRadius: 10,\n * innerRadius: 5,\n * padAngle: 2,\n * padRadius: 2,\n * colors: []\n * padding: {top: 10, bottom: 10, left: 10, right: 10},\n * encoding = {\n * angle: {\n * field: 'date' //Maps to angle of arc\n * },\n * radius: {\n * field: 'sales' // Maps to radius of arc\n * }\n * }\n * };\n * @class\n */\nexport default class ArcLayer extends BaseLayer {\n\n constructor (data, axes, config, dependencies) {\n super(data, axes, config, dependencies);\n this._prevPieData = {};\n }\n\n /**\n * returns the default configuration of the layer\n *\n * @static\n * @return {Object} Default configuration for arc layer\n * @memberof ArcLayer\n */\n static defaultConfig () {\n return defaultConfig;\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof ArcLayer\n */\n static formalName () {\n return 'arc';\n }\n\n /**\n *\n *\n * @returns\n * @memberof ArcLayer\n */\n elemType () {\n return 'path';\n }\n\n /**\n * Transforms data in the appropriate data structure to be consumed by the layer for rendering\n *\n * @param {Object} data data model associated with the layer\n * @param {Object} config configuration of the layer that contains encoding and other parameters\n * @return {Object} Transformed pie data\n * @memberof ArcLayer\n */\n getTransformedData (dataModel, config) {\n let pieData = [];\n const pieIndex = {};\n const {\n startAngle,\n endAngle,\n encoding,\n sort,\n minOuterRadius\n } = config;\n const prevData = this._store.get(PROPS.TRANSFORMED_DATA) || [];\n const fieldsConfig = this.data().getFieldsConfig();\n const {\n angleIndex,\n sizeIndex,\n radiusIndex,\n colorIndex\n } = getFieldIndices(encoding, fieldsConfig);\n const dataVal = dataModel.getData();\n const data = dataVal.data;\n const uids = dataVal.uids;\n\n this._prevPieData = {};\n\n prevData.forEach((e, index) => {\n this._prevPieData[e.uid] = [e, index];\n pieIndex[e.index] = e;\n });\n // Creating pie data using angle field provided. If the angle field is a dimension,\n // all the angles will be equal(360/number of dimensions)\n\n pieData = pie()\n .startAngle((startAngle / 180) * Math.PI)\n .endAngle(Math.PI * endAngle / 180)\n .value(d => d[angleIndex] || 1)\n .sortValues(null);\n\n sort.length && radiusIndex && pieData.sort((a, b) => {\n if (sort === ASCENDING) {\n return a[radiusIndex] - b[radiusIndex];\n } return b[radiusIndex] - a[radiusIndex];\n });\n const sizeVal = data.reduce((acc, d) => acc + (d[sizeIndex] || 0), 1);\n\n // Adding the radius field values to each data point in pie data\n pieData = pieData(data).map((d, i) => {\n d.outerRadiusValue = data[i][radiusIndex] || minOuterRadius;\n d.innerRadius = config.innerRadius;\n d.colorVal = data[i][colorIndex];\n d.angleVal = data[i][angleIndex];\n d.sizeVal = sizeVal;\n d.uid = uids[i];\n d.rowId = d.uid;\n d.source = data[i];\n d._previousInfo = this._prevPieData[d.uid] ? this._prevPieData[d.uid][0] :\n getPreviousPoint(pieIndex, d.index, config);\n return d;\n });\n return pieData;\n }\n\n /**\n * Returns normalized data after transformation (it is the same in the case of pie layer)\n *\n * @param {Object} data transformed data\n * @return {Object} normalized data\n * @memberof ArcLayer\n */\n getNormalizedData (data) {\n return data;\n }\n\n /**\n *\n *\n * @param {Object} data\n * @return {}\n * @memberof ArcLayer\n */\n calculateDomainFromData (data) {\n const domainKey = OUTER_RADIUS_VALUE;\n return {\n radius: getDomainFromData([data], [domainKey, domainKey])\n };\n }\n\n /**\n *\n *\n * @param {Object} x\n * @param {Object} y\n * @return {}\n * @memberof ArcLayer\n */\n getNearestPoint (x, y, config = {}) {\n const dataPoint = selectElement(config.event.target).data()[0];\n if (isSimpleObject(dataPoint)) {\n const { data, uid } = dataPoint.datum;\n return {\n id: this.getIdentifiersFromData(data, uid),\n layerId: this.id()\n };\n }\n return null;\n }\n\n /**\n *\n *\n * @param {*} set\n * @returns\n * @memberof ArcLayer\n */\n getPlotElementsFromSet (set) {\n return selectElement(this.mount()).selectAll(this.elemType()).filter(d => set.indexOf(d.datum.uid) !== -1);\n }\n\n /**\n *\n *\n * @param {Object} container\n * @return {}\n * @memberof ArcLayer\n */\n render (container) {\n const {\n height,\n width\n } = this.measurement();\n const {\n classPrefix,\n defClassName,\n minOuterRadius,\n innerRadius,\n outerRadius,\n cornerRadius,\n padAngle,\n padRadius,\n padding,\n transition,\n innerRadiusFixer\n } = this.config();\n const sizeAxis = this.axes().size;\n const store = this._store;\n const transformedData = store.get(PROPS.TRANSFORMED_DATA);\n const chartHeight = height - padding.top - padding.bottom;\n const chartWidth = width - padding.left - padding.right;\n const qualClassName = getQualifiedClassName(defClassName, this.id(), classPrefix);\n // Sets range for radius\n const range = getRadiusRange(chartWidth, chartHeight, {\n minOuterRadius,\n innerRadius,\n outerRadius,\n innerRadiusFixer\n });\n const colorAxis = this.axes().color;\n const defaultRadius = outerRadius || Math.min(chartHeight, chartWidth) / 2;\n const radiusDomain = store.get(PROPS.DOMAIN).radius;\n const rangeValueGetter = d => getRangeValue(d, range, radiusDomain, defaultRadius, sizeAxis);\n // This returns a function that generates the arc path based on the datum provided\n const path = arc()\n // .outerRadius(d => rangeValueGetter(d))\n .innerRadius(innerRadius ? Math.min(chartHeight / 2, chartWidth / 2, innerRadius) : 0)\n .cornerRadius(cornerRadius)\n .padAngle(padAngle)\n .padRadius(padRadius);\n this._chartWidth = chartWidth;\n this._chartHeight = chartHeight;\n // Creating the group that holds all the arcs\n const g = makeElement(selectElement(container), 'g', [1], `${qualClassName[0]}-group`)\n .classed(`${qualClassName[1]}-group`, true)\n .attr('transform', `translate(${chartWidth / 2},${chartHeight / 2})`);\n const tween = (elem) => {\n makeElement(elem, 'path', (d, i) => [{\n datum: d,\n index: i,\n arcFn: path,\n meta: {\n originalColor: colorAxis.getRawColor(d.colorVal),\n stateColor: {},\n colorTransform: {}\n }\n }], `${qualClassName[0]}-path`)\n .style('fill', d => colorAxis.getColor(d.datum.colorVal))\n .transition()\n .duration(transition.duration)\n .attrTween('d', (...params) => tweenPie(path, rangeValueGetter, params))\n .attr('class', (d, i) => {\n const individualClass = getIndividualClassName(d, i, transformedData, this);\n return `${qualClassName[0]}-path ${qualClassName[1]}-path-${d.index}\n ${individualClass}`;\n });\n };\n const consecutiveExits = [];\n let exitCounter = 0;\n const tweenExit = (elem, d) => {\n let exitArr = consecutiveExits[exitCounter];\n const oldExitCounter = exitCounter;\n if (!exitArr) {\n exitArr = [{ elem, datum: d }];\n } else if (exitArr[exitArr.length - 1].datum.index === d.index - 1) {\n exitArr.push({ elem, datum: d });\n } else {\n exitCounter++;\n }\n consecutiveExits[oldExitCounter] = exitArr;\n };\n // Creating groups for all the arcs present individually\n makeElement(g, 'g', transformedData, `${qualClassName[0]}`,\n {\n update: tween,\n exit: tweenExit\n })\n .attr('class', (d, i) => `${qualClassName[0]} ${qualClassName[1]}-${i}`);\n tweenExitPie(consecutiveExits, transition, rangeValueGetter, path);\n return this;\n }\n\n /**\n *\n *\n * @param {*} identifiers\n * @returns\n * @memberof BaseLayer\n */\n getPointsFromIdentifiers (identifiers) {\n if (!this.data()) {\n return [];\n }\n const fieldNames = identifiers[0];\n const values = identifiers.slice(1, identifiers.length);\n const pieSlices = selectElement(this.mount()).selectAll('path').data();\n const fieldsConfig = this.data().getFieldsConfig();\n\n const filteredPies = pieSlices.filter((tData) => {\n const data = tData.datum.data;\n const uid = tData.datum.uid;\n return fieldNames.every((field, idx) => {\n if (field in fieldsConfig && fieldsConfig[field].def.type === FieldType.DIMENSION) {\n return values.findIndex(d => d[idx] === data[fieldsConfig[field].index]) !== -1;\n } else if (field === ReservedFields.ROW_ID) {\n return values.findIndex(d => d[idx] === uid) !== -1;\n } return true;\n });\n });\n\n const pieSliceInf = filteredPies[0];\n if (pieSliceInf) {\n const centroid = pieSliceInf.arcFn.centroid(pieSliceInf.datum);\n return [{\n x: centroid[0] + this._chartWidth / 2,\n y: centroid[1] + this._chartHeight / 2,\n width: 2,\n height: 2\n }];\n }\n return [];\n }\n}\n\n","import { getObjProp, interpolator, FieldType, selectElement } from 'muze-utils';\nimport { ANGLE, RADIUS, SIZE, COLOR } from '../../enums/constants';\n\n/**\n * Returns the range value from a value inside the domain\n *\n * @param {Object} domainValue Value whose range has to be returned\n * @return {number} range value\n * @memberof ArcLayer\n */\nexport const getRangeValue = (datum, range, domain, defaultRadius, sizeAxis) => {\n let domainMultiplier = 1;\n const {\n outerRadiusValue,\n sizeVal\n } = datum;\n const sizeAxisDomain = sizeAxis.domain();\n const sizeMultiplier = sizeAxis.getSize(sizeVal) / (sizeAxisDomain ? sizeAxis.range()[1] : sizeAxis.config().value);\n\n domainMultiplier *= (range[1] - range[0]) / (domain[1] - domain[0]);\n const rangeVal = (range[0] + (outerRadiusValue - domain[0]) * domainMultiplier);\n return (rangeVal || defaultRadius) * sizeMultiplier;\n};\n\n/**\n *\n *\n * @memberof ArcLayer\n */\nexport const getRadiusRange = (width, height, config) => {\n const {\n minOuterRadius,\n innerRadius,\n outerRadius,\n innerRadiusFixer\n } = config;\n\n return [Math.max((innerRadius + innerRadiusFixer || 0), minOuterRadius), outerRadius || Math.min(height,\n width) / 2];\n};\nexport const getPreviousPoint = (prevData, currIndex, config) => {\n const prevArc = prevData[currIndex - 1];\n const nextArc = prevData[currIndex];\n\n if (prevArc && nextArc) {\n return {\n startAngle: prevArc.endAngle,\n endAngle: nextArc.startAngle\n };\n } else if (!nextArc) {\n return {\n startAngle: config.endAngle * Math.PI * 2 / 360,\n endAngle: config.endAngle * Math.PI * 2 / 360\n };\n }\n return {\n startAngle: config.startAngle * Math.PI * 2 / 360,\n endAngle: config.startAngle * Math.PI * 2 / 360\n };\n};\n\n/**\n *\n *\n * @param {*} path\n * @param {*} b\n * @returns\n * @memberof ArcLayer\n */\nexport const tweenPie = (path, rangeValueGetter, b) => {\n const { datum } = b[0];\n const outerRadius = rangeValueGetter(datum);\n datum.outerRadius = outerRadius;\n datum._previousInfo.outerRadius = datum._previousInfo.outerRadius || outerRadius;\n return function (t) {\n return path(interpolator()(datum._previousInfo, datum)(t));\n };\n};\n\n/**\n *\n *\n * @param {*} path\n * @param {*} b\n * @returns\n * @memberof ArcLayer\n */\nexport const tweenExitPie = (consecutiveExits, transition, rangeValueGetter, path) => {\n if (consecutiveExits.length > 0) {\n consecutiveExits.forEach((consecutiveExitArr) => {\n const startAngle = consecutiveExitArr[0].datum.startAngle;\n const endAngle = consecutiveExitArr[consecutiveExitArr.length - 1].datum.endAngle;\n const mid = (Math.PI * 2 * startAngle) / ((Math.PI * 2) + startAngle - endAngle);\n\n consecutiveExitArr.forEach((e) => {\n const { elem, datum } = e;\n\n elem.each(function () {\n const gElem = selectElement(this);\n gElem.selectAll('path')\n .transition()\n .duration(transition.duration)\n .attrTween('d', () => function (t) {\n const outerRadius = rangeValueGetter(datum);\n datum.outerRadius = outerRadius;\n return path(interpolator()(datum, {\n startAngle: mid,\n endAngle: mid,\n outerRadius\n })(t));\n })\n .remove();\n gElem.remove();\n });\n });\n });\n }\n};\n\nexport const getFieldIndices = (encoding, fieldsConfig) => {\n const [angleField, radiusField, colorField, sizeField] = [ANGLE, RADIUS, COLOR, SIZE]\n .map(e => encoding[e].field);\n const [angleIndex, sizeIndex, radiusIndex] = [angleField, sizeField, radiusField]\n .map((e) => {\n const conf = fieldsConfig[e];\n if (conf && conf.def.type === FieldType.MEASURE) {\n return conf.index;\n }\n return null;\n });\n const colorIndex = getObjProp(fieldsConfig, colorField, 'index');\n return {\n angleIndex,\n sizeIndex,\n radiusIndex,\n colorIndex\n };\n};\n","import {\n setAttrs,\n setStyles,\n selectElement,\n makeElement,\n getSmartComputedStyle\n} from 'muze-utils';\n\n/**\n * Draws svg text in the specified container.\n * @param {SVGElement} container Container where labels will be appended.\n * @param {Array.} data Data of the elements.\n * @return {Selection} d3 selection of the elements.\n */\nconst drawText = (container, data, config, smartLabel) => {\n const selection = selectElement(container).selectAll('g').data(data);\n\n const selectionMerge = selection.enter().append('g')\n .each(function (dataObj) {\n setAttrs(this, dataObj.enter);\n })\n .merge(selection);\n const style = getSmartComputedStyle(selectElement(container), config.className);\n const fontSize = parseInt(style.fontSize, 10);\n\n smartLabel.setStyle(style);\n selectionMerge.each(function (dataObj) {\n const element = selectElement(this);\n const { update, text, color, textanchor, style: textStyle } = dataObj;\n const background = dataObj.background;\n let backgroundVal;\n if (backgroundVal = background.value) {\n const backgroundPadding = background.padding;\n let diff;\n const { width, height } = smartLabel.getOriSize(dataObj.text);\n const backgroundEl = makeElement(element, 'rect', [1]);\n\n if (textanchor === 'end') {\n diff = width;\n } else if (textanchor === 'start') {\n diff = 0;\n } else {\n diff = width / 2;\n }\n\n setAttrs(backgroundEl.node(), {\n x: update.x - diff - backgroundPadding / 2,\n y: update.y - fontSize - backgroundPadding / 2,\n width: width + backgroundPadding,\n height: height + backgroundPadding\n });\n background && setStyles(backgroundEl, {\n background: backgroundVal\n });\n }\n const textEl = makeElement(element, 'text', d => [d]).text(text);\n const textNode = textEl.node();\n textStyle && setStyles(textNode, textStyle);\n color && setStyles(textNode, {\n fill: color\n });\n dataObj.className && textEl.classed(dataObj.className, true);\n setAttrs(textNode, update);\n textEl.attr('text-anchor', textanchor);\n });\n selection.exit().remove();\n return selection;\n};\n\nexport default drawText;\n","import { CLASSPREFIX } from '../../enums/constants';\n\nexport const defaultConfig = {\n defClassName: 'layer-text',\n classPrefix: CLASSPREFIX,\n className: '',\n transform: {\n type: 'identity'\n },\n interaction: {\n highlight: [{\n type: 'fill',\n intensity: [0, 0, -15, 0]\n }],\n fade: [{\n type: 'fill',\n intensity: [0, 0, +15, 0]\n }],\n focus: [{\n type: 'fill',\n intensity: [0, 0, +15, 0]\n }]\n },\n transition: {\n effect: 'cubic',\n duration: 1000\n },\n encoding: {\n color: {},\n text: {\n value: '',\n background: {\n padding: 10\n }\n }\n },\n states: {\n highlight: {\n className: `${CLASSPREFIX}-layer-text-highlight`\n },\n fadeout: {\n className: `${CLASSPREFIX}-layer-text-fadeout`\n },\n selected: {\n className: `${CLASSPREFIX}-layer-text-selected`\n }\n }\n};\n","import {\n getQualifiedClassName,\n selectElement,\n setStyles,\n createElements\n} from 'muze-utils';\nimport { BaseLayer } from '../../base-layer';\nimport drawText from './renderer';\nimport { defaultConfig } from './default-config';\nimport { getLayerColor, positionPoints, getIndividualClassName } from '../../helpers';\nimport { TEXT_ANCHOR_MIDDLE, ENCODING } from '../../enums/constants';\nimport * as PROPS from '../../enums/props';\n\nimport './styles.scss';\n\n/**\n * Text Layer creates labels. It needs to be passed a data table, axes and configuration\n * of the layer.\n * Example :-\n * const textLayer = layerFactory.getLayer('text', [dataModel, axes, config]);\n * textLayer.render(container);\n * @class\n */\nexport default class TextLayer extends BaseLayer {\n /**\n * Returns the default configuration of the text layer\n * @return {Object} Default configuration of the text layer\n */\n static defaultConfig () {\n return defaultConfig;\n }\n\n static formalName () {\n return 'text';\n }\n\n elemType () {\n return 'text';\n }\n\n /**\n * Generates an array of objects containing x, y, width and height of the points from the data\n * @param {Array.} data Data Array\n * @param {Object} encoding Config\n * @param {Object} axes Axes object\n * @return {Array.} Array of points\n */\n translatePoints (data, encoding, axes) {\n let points = [];\n const colorAxis = axes.color;\n const textEncoding = encoding.text;\n const { field: textField, value, formatter: textFormatter } = textEncoding;\n const colorEncoding = encoding.color;\n const colorField = colorEncoding && colorEncoding.field;\n const fieldsConfig = this.data().getFieldsConfig();\n\n const backgroundEncoding = encoding.text.background;\n const backgroundPadding = backgroundEncoding.padding;\n const backgroundValue = backgroundEncoding.value;\n const colorFieldIndex = fieldsConfig[colorField] ? fieldsConfig[colorField].index : -1;\n const textFieldIndex = textField ? fieldsConfig[textField] && fieldsConfig[textField].index : -1;\n const xEnc = ENCODING.X;\n const yEnc = ENCODING.Y;\n for (let i = 0, len = data.length; i < len; i++) {\n const d = data[i];\n const row = d._data;\n const textValue = textField ? row[textFieldIndex] : value;\n\n const [xPx, yPx] = [xEnc, yEnc].map(type => (axes[type] ? axes[type].getScaleValue(d[type]) +\n axes[type].getUnitWidth() / 2 : 0));\n\n const { color, rawColor } = getLayerColor({ datum: d, index: i },\n { colorEncoding, colorAxis, colorFieldIndex });\n\n const point = {\n enter: {},\n update: {\n x: xPx,\n y: yPx\n },\n text: textFormatter ? textFormatter(textValue) : textValue,\n color,\n background: {\n value: backgroundValue instanceof Function ? backgroundValue(d, i, data, this) : null,\n padding: backgroundPadding\n },\n meta: {\n stateColor: {},\n originalColor: rawColor,\n colorTransform: {}\n },\n style: {},\n _data: row,\n _id: d._id,\n source: d._data,\n rowId: d._id\n };\n\n if (d.x !== null && d.y !== null) {\n points.push(point);\n }\n\n point.className = getIndividualClassName(d, i, data, this);\n }\n\n points = positionPoints(this, points);\n\n return points;\n }\n\n /**\n * Renders the plot in the given container\n * @param {SVGElement} container SVGElement which will hold the plot\n * @return {textLayer} Instance of text layer\n */\n render (container) {\n let points;\n const config = this.config();\n const encoding = config.encoding;\n const normalizedData = this._store.get(PROPS.NORMALIZED_DATA);\n const className = config.className;\n const qualifiedClassName = getQualifiedClassName(config.defClassName, this.id(), config.classPrefix);\n const axes = this.axes();\n const containerSelection = selectElement(container);\n\n containerSelection.classed(`${qualifiedClassName.join(' ')} ${className}`, true);\n createElements({\n data: normalizedData,\n append: 'g',\n selector: 'g',\n container,\n each: (dataArr, group, i) => {\n const node = group.node();\n points = this.translatePoints(dataArr, encoding, axes, i);\n setStyles(node, {\n 'text-anchor': TEXT_ANCHOR_MIDDLE\n });\n drawText(node, points, {\n className: qualifiedClassName[0]\n }, this._dependencies.smartLabel);\n }\n });\n return this;\n }\n}\n","/* global Element, document */\nimport {\n makeElement,\n selectElement,\n easeFns,\n objectIterator,\n getSymbol\n} from 'muze-utils';\n\n/**\n *\n *\n * @param {*} str\n * @returns\n */\nconst checkPath = (str) => {\n if (/^[mzlhvcsqta]\\s*[-+.0-9][^mlhvzcsqta]+/i.test(str) && /[\\dz]$/i.test(str) && str.length > 4) {\n return true;\n }\n return false;\n};\n\n/**\n *\n *\n * @param {*} d\n * @param {*} elem\n */\nconst createShape = function (d, elem) {\n const groupElement = selectElement(elem);\n const { shape, size, update } = d;\n\n if (shape instanceof Promise) {\n shape.then((res) => {\n d.shape = res;\n createShape(d, elem);\n });\n } else if (shape instanceof Element) {\n let newShape = shape.cloneNode(true);\n\n if (newShape.nodeName.toLowerCase() === 'img') {\n const src = newShape.src || newShape.href;\n newShape = document.createElementNS('http://www.w3.org/2000/svg', 'image');\n newShape.setAttribute('href', src);\n }\n const shapeElement = selectElement(newShape);\n if (newShape.nodeName === 'path' || newShape.nodeName === 'image') {\n shapeElement.attr('transform', `scale(${size / 100})`);\n } else {\n shapeElement.attr('height', size);\n shapeElement.attr('width', size);\n }\n shapeElement.attr('x', -size / 2);\n shapeElement.attr('y', -size / 2);\n selectElement(groupElement.node().appendChild(newShape));\n } else if (typeof shape === 'string') {\n let pathStr;\n if (checkPath(shape)) {\n pathStr = shape;\n } else {\n pathStr = getSymbol(shape).size(size)(update);\n }\n makeElement(groupElement, 'path', data => [data]).attr('d', pathStr);\n } else {\n d.shape = 'circle';\n createShape(d, elem);\n }\n};\n\n/**\n * Draws symbols using d3 symbol api\n * @param {Object} params Contains the svg container, points and other symbol related attributes.\n */\n/* istanbul ignore next */ const drawSymbols = (params) => {\n let mergedGroups;\n const { container, points, transition, className } = params;\n const { duration, effect, disabled } = transition;\n const mount = selectElement(container);\n\n mount.attr('class', className);\n const symbolGroups = mount.selectAll('g').data(points, params.keyFn);\n const symbolEnter = symbolGroups.enter().append('g').attr('transform', d => `translate(${d.enter.x},${d.enter.y})`);\n mergedGroups = symbolGroups.merge(symbolEnter)\n .each(function (d) {\n createShape(d, this);\n });\n mergedGroups = disabled ? mergedGroups : mergedGroups.transition().duration(disabled ? 0 : transition.duration);\n mergedGroups.attr('transform', d => `translate(${d.update.x},${d.update.y})`)\n .each(function (d) {\n const style = d.style;\n const element = selectElement(this);\n objectIterator(style, key => element.style(key, style[key]));\n element.attr('class', `${className}`);\n element.classed(d.className, true);\n });\n\n const exitGroups = symbolGroups.exit();\n if (!disabled) {\n exitGroups.transition().ease(easeFns[effect])\n .duration(duration)\n .on('end', function () {\n selectElement(this).remove();\n })\n .style('fill-opacity', 0)\n .style('stroke-opacity', 0);\n } else {\n exitGroups.remove();\n }\n};\n\nexport default drawSymbols;\n","import { CLASSPREFIX } from '../../enums/constants';\n\nexport const defaultConfig = {\n defClassName: 'layer-point',\n className: '',\n classPrefix: CLASSPREFIX,\n defColorStyle: 'stroke',\n interaction: {\n highlight: [{\n type: 'fill',\n intensity: [0, 0, -20, 0]\n }],\n fade: [{\n type: 'fill',\n intensity: [0, 0, +20, 0]\n }],\n focus: [{\n type: 'fill',\n intensity: [0, 0, +20, 0]\n }\n ]\n },\n innerPadding: 0.1,\n nearestPointThreshold: 10,\n transform: {\n type: 'identity'\n },\n transition: {\n effect: 'cubic',\n duration: 1000\n },\n encoding: {\n size: {\n value: 30\n },\n color: { },\n shape: {\n value: 'circle'\n },\n x: {},\n y: {},\n strokeOpacity: {\n value: 0.5\n },\n fillOpacity: {\n value: 0.5\n }\n },\n shapes: ['circle', 'cross', 'diamond', 'square', 'star', 'wye', 'triangle'],\n sizes: [20, 30, 40, 50, 60, 70]\n};\n","import {\n Voronoi,\n selectElement,\n getQualifiedClassName,\n makeElement,\n FieldType,\n Scales\n} from 'muze-utils';\nimport { BaseLayer } from '../../base-layer';\nimport drawSymbols from './renderer';\nimport { defaultConfig } from './default-config';\nimport { ENCODING } from '../../enums/constants';\nimport * as PROPS from '../../enums/props';\nimport {\n attachDataToVoronoi,\n getLayerColor,\n positionPoints,\n getPlotMeasurement,\n getIndividualClassName\n} from '../../helpers';\n\nimport './styles.scss';\n\n/**\n * Point Layer creates point. Itt needs to be passed a data table, axes and configuration\n * of the layer.\n * Example :-\n * const pointLayer = layerFactory.getLayer('point', [data, axes, config]);\n * pointLayer.render(container);\n * @class\n */\nexport default class PointLayer extends BaseLayer {\n\n /**\n * Creates an instance of PointLayer.\n * @param {*} args\n * @memberof PointLayer\n */\n constructor (...args) {\n super(...args);\n this._voronoi = new Voronoi();\n this._bandScale = Scales.band();\n }\n\n /**\n *\n *\n * @returns\n * @memberof PointLayer\n */\n elemType () {\n return 'g';\n }\n\n /**\n * Returns the default configuration of the point layer\n * @return {Object} Default configuration of the point layer\n */\n static defaultConfig () {\n return defaultConfig;\n }\n\n static defaultPolicy (conf, userConf) {\n const config = BaseLayer.defaultPolicy(conf, userConf);\n const encoding = config.encoding;\n const transform = config.transform;\n const colorField = encoding.color && encoding.color.field;\n\n if (colorField) {\n transform.groupBy = colorField;\n }\n return config;\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof PointLayer\n */\n static formalName () {\n return 'point';\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof PointLayer\n */\n static drawFn () {\n return drawSymbols;\n }\n\n /**\n * Generates an array of objects containing x, y, width and height of the points from the data\n * @param {Array.} data Data Array\n * @param {Object} encoding Config\n * @param {Object} axes Axes object\n * @return {Array.} Array of points\n */\n translatePoints (data, encoding, axes, config = {}) {\n let points = [];\n const {\n size: sizeEncoding,\n shape: shapeEncoding,\n color: colorEncoding,\n x,\n y\n } = encoding;\n const sizeField = sizeEncoding.field;\n const sizeValue = sizeEncoding.value;\n const shapeField = shapeEncoding.field;\n const xField = x.field;\n const yField = y.field;\n const { size: sizeAxis, shape: shapeAxis } = axes;\n const fieldsConfig = this.data().getFieldsConfig();\n const isXDim = fieldsConfig[xField] && fieldsConfig[xField].def.type === FieldType.DIMENSION;\n const isYDim = fieldsConfig[yField] && fieldsConfig[yField].def.type === FieldType.DIMENSION;\n const key = isXDim ? ENCODING.X : (isYDim ? ENCODING.Y : null);\n const colorField = colorEncoding && colorEncoding.field;\n const colorFieldIndex = fieldsConfig[colorField] && fieldsConfig[colorField].index;\n const measurement = this._store.get(PROPS.MEASUREMENT);\n const shapeFieldIndex = fieldsConfig[shapeField] && fieldsConfig[shapeField].index;\n const sizeFieldIndex = fieldsConfig[sizeField] && fieldsConfig[sizeField].index;\n const colorAxis = axes.color;\n const { x: offsetX, y: offsetY } = config.offset;\n\n for (let i = 0, len = data.length; i < len; i++) {\n const d = data[i];\n const row = d._data;\n const size = sizeValue instanceof Function ? sizeValue(d, i) : sizeAxis.getSize(row[sizeFieldIndex]);\n const shape = shapeAxis.getShape(row[shapeFieldIndex]);\n\n let [xPx, yPx] = [ENCODING.X, ENCODING.Y].map((type) => {\n const value = d[type] === null ? undefined : d[type];\n const measure = type === ENCODING.X ? measurement.width : measurement.height;\n return !encoding[type].field ? measure / 2 : axes[type].getScaleValue(value);\n });\n\n xPx += offsetX;\n yPx += offsetY;\n\n const { color, rawColor } = getLayerColor({ datum: d, index: i },\n { colorEncoding, colorAxis, colorFieldIndex });\n\n const style = {\n fill: color,\n stroke: color\n };\n\n if (!isNaN(xPx) && !isNaN(yPx)) {\n const point = {\n enter: {\n x: xPx,\n y: yPx\n },\n update: {\n x: xPx,\n y: yPx\n },\n shape,\n size: Math.abs(size),\n meta: {\n stateColor: {},\n originalColor: rawColor,\n colorTransform: {}\n },\n style,\n _data: row,\n _id: d._id,\n source: d._data,\n rowId: d._id\n };\n point.className = getIndividualClassName(d, i, data, this);\n points.push(point);\n this.cachePoint(d[key], point);\n }\n }\n points = positionPoints(this, points);\n return points;\n }\n\n /**\n * Renders the plot in the given container.\n *\n * @param {SVGElement} container SVGElement which will hold the plot\n * @return {BarLayer} Instance of bar layer\n */\n render (container) {\n let maxSize = 0;\n let seriesClassName;\n const config = this.config();\n const keys = this._store.get(PROPS.TRANSFORMED_DATA).map(d => d.key);\n const { transition, className, defClassName, classPrefix } = config;\n const normalizedData = this._store.get(PROPS.NORMALIZED_DATA);\n const containerSelection = selectElement(container);\n const qualifiedClassName = getQualifiedClassName(defClassName, this.id(), classPrefix);\n this._points = [];\n this._pointMap = {};\n\n containerSelection.classed(qualifiedClassName.join(' '), true).classed(className, true);\n\n this._points = this.generateDataPoints(normalizedData, keys);\n\n makeElement(container, 'g', this._points, null, {\n update: (group, points) => {\n maxSize = Math.max(maxSize, ...points.map(d => d.size));\n seriesClassName = `${qualifiedClassName[0]}`;\n this.constructor.drawFn()({\n container: group.node(),\n points,\n className: seriesClassName,\n transition,\n keyFn: d => d._id\n });\n }\n }, data => data[0]._id);\n this._maxSize = Math.sqrt(maxSize / Math.PI) * 2;\n attachDataToVoronoi(this._voronoi, this._points);\n return this;\n }\n\n generateDataPoints (normalizedData, keys) {\n const encoding = this.config().encoding;\n const axes = this.axes();\n const [widthMetrics, heightMetrics] = getPlotMeasurement(this, keys);\n const offsetXValues = widthMetrics.offsetValues || [];\n const offsetYValues = heightMetrics.offsetValues || [];\n return normalizedData.map((dataArr, i) => {\n const measurementConf = this.getMeasurementConfig(offsetXValues[i], offsetYValues[i], widthMetrics.span,\n heightMetrics.span);\n return this.translatePoints(dataArr, encoding, axes, measurementConf);\n }).filter(d => d.length);\n }\n\n getMeasurementConfig (offsetX, offsetY, widthSpan, heightSpan) {\n return {\n offset: {\n x: (offsetX || 0) + widthSpan / 2,\n y: (offsetY || 0) + heightSpan / 2\n },\n span: {\n x: widthSpan,\n y: heightSpan\n }\n };\n }\n\n /**\n * Gets the nearest point from a position.\n * @param {number} x x position\n * @param {number} y y position\n * @return {Object} Point details\n */\n getNearestPoint (x, y) {\n const distanceLimit = Math.max(this._maxSize, this.config().nearestPointThreshold);\n\n if (!this.data()) {\n return null;\n }\n\n const point = this._voronoi.find(x, y, distanceLimit);\n const dimensions = point && point.data.data.update;\n const radius = point ? Math.sqrt(point.data.data.size / Math.PI) : 0;\n\n if (point) {\n const { _data, _id } = point.data.data;\n const identifiers = this.getIdentifiersFromData(_data, _id);\n return {\n id: identifiers,\n dimensions: [{\n x: dimensions.x,\n y: dimensions.y,\n width: radius,\n height: radius\n }],\n layerId: this.id()\n };\n }\n return null;\n }\n}\n","import { makeElement, easeFns } from 'muze-utils';\n\n/**\n *\n *\n * @param {*} elem\n * @param {*} datum\n * @param {*} index\n * @param {*} context\n */\nconst transitionBars = (elem, datum, index, context) => {\n const { transition } = context;\n const { duration, disabled, effect } = transition;\n const selection = elem;\n const selTransition = disabled ? selection : selection.transition().duration(duration).ease(easeFns[effect]);\n const update = datum.update || datum;\n const updateStyle = datum.style || {};\n datum.className && selection.classed(datum.className, true);\n Object.entries(update).forEach(attr => (!isNaN(attr[1]) && selTransition.attr(attr[0], attr[1])));\n Object.entries(updateStyle).forEach(styleObj => selection.style(styleObj[0], styleObj[1]));\n};\n\n/**\n *\n *\n * @param {*} elem\n * @param {*} d\n */\nconst barEnterFn = (elem, d) => {\n const selection = elem;\n const enter = d.enter || {};\n Object.entries(enter).forEach(attr => (!isNaN(attr[1]) && selection.attr(attr[0], attr[1])));\n};\n\n/**\n * Draws rectangles by using d3 selection\n * @param {Object} params Contains container element and points\n * @return {Selection} Bar Selection\n */\n/* istanbul ignore next */ export const drawRects = (params) => {\n const { points, container, keyFn } = params;\n const updateFns = {\n enter (elem, d) { barEnterFn(elem, d); },\n update (elem, d, i) { transitionBars(elem, d, i, params); }\n };\n return makeElement(container, 'rect', points, null, updateFns, keyFn);\n};\n","import { CLASSPREFIX } from '../../enums/constants';\n\nexport const defaultConfig = {\n classPrefix: CLASSPREFIX,\n defClassName: 'layer-bar',\n className: '',\n interaction: {\n highlight: [{\n type: 'fill',\n intensity: [0, 0, -15, 0]\n }],\n fade: [{\n type: 'fill',\n intensity: [0, 0, +15, 0]\n }],\n focus: [{\n type: 'fill',\n intensity: [0, 0, +15, 0]\n }]\n },\n transform: {\n type: 'stack'\n },\n transition: {\n effect: 'cubic',\n duration: 1000\n },\n innerPadding: 0.1,\n encoding: {\n color: {},\n x: {},\n y: {},\n x0: {},\n y0: {}\n },\n states: {\n highlight: {\n className: `${CLASSPREFIX}-layer-bar-highlight`\n },\n fadeout: {\n className: `${CLASSPREFIX}-layer-bar-fadeout`\n },\n selected: {\n className: `${CLASSPREFIX}-layer-bar-selected`\n }\n }\n};\n\n","import { FieldType, DimensionSubtype } from 'muze-utils';\nimport * as PROPS from '../../enums/props';\nimport { STACK } from '../../enums/constants';\nimport { getLayerColor, positionPoints, getIndividualClassName } from '../../helpers';\n\n/**\n *\n *\n * @param {*} type\n * @param {*} fieldInfo\n * @param {*} config\n * @param {*} data\n * @returns\n */\nconst resolveDimByField = (type, axesInfo, config, data) => {\n const spaceType = type === 'x' ? 'width' : 'height';\n const [fieldType, axis] = [config[`${type}FieldType`], axesInfo[`${type}Axis`]];\n const {\n transformType,\n sizeEncoding,\n sizeConfig,\n measurement\n } = config;\n\n const sizeValue = sizeEncoding.value;\n let enter = 0;\n let pos;\n let space = 0;\n let enterSpace = 0;\n if (fieldType !== undefined) {\n if (config[`${type}0Field`]) {\n const minVal = data[type];\n const maxVal = data[`${type}0`];\n let min;\n let max;\n if (minVal === null || maxVal === null) {\n return {\n enterSpace: undefined,\n enter: undefined,\n pos: undefined,\n space: undefined\n };\n } else if (fieldType === FieldType.MEASURE || fieldType === DimensionSubtype.TEMPORAL) {\n min = Math.min(minVal, maxVal);\n max = Math.max(minVal, maxVal);\n } else {\n min = minVal;\n max = maxVal;\n }\n const scales = type === 'x' ? [min, max] : [max, min];\n pos = axis.getScaleValue(scales[0]) + axis.getUnitWidth() / 2;\n space = Math.abs(axis.getScaleValue(scales[1]) - pos) + axis.getUnitWidth() / 2;\n\n enter = pos;\n enterSpace = 0;\n } else if (fieldType === DimensionSubtype.CATEGORICAL || fieldType === DimensionSubtype.TEMPORAL) {\n pos = axis.getScaleValue(data[type]) +\n (sizeConfig[type === 'x' ? 'barWidthOffset' : 'barHeightOffset'] || 0);\n\n space = sizeConfig[type === 'x' ? 'barWidth' : 'barHeight'];\n if (sizeValue !== undefined) {\n const diffPx = sizeValue * space;\n space -= diffPx;\n pos += diffPx / 2;\n }\n enter = pos;\n enterSpace = space;\n } else {\n const zeroPos = axis.getScaleValue(0);\n const axisType = axis.getScaleValue(data[type]);\n const axisType0 = axis.getScaleValue(data[`${type}0`]);\n\n enterSpace = 0;\n if (type === 'x') {\n pos = data[type] < 0 || transformType === STACK ? axisType : zeroPos;\n space = Math.abs(pos - (transformType === STACK ? axisType0 : (data[type] >= 0 ? axisType : zeroPos)));\n } else {\n pos = transformType === STACK || data[type] >= 0 ? axisType : zeroPos;\n space = Math.abs(pos - (transformType === STACK ? axisType0 : (data[type] >= 0 ? zeroPos : axisType)));\n }\n enter = zeroPos;\n }\n } else {\n pos = 0;\n space = measurement[spaceType];\n }\n\n return {\n enterSpace,\n enter,\n pos,\n space\n };\n};\n\n/**\n *\n *\n * @param {*} data\n * @param {*} config\n * @param {*} axes\n * @returns\n */\nconst resolveDimensions = (data, config, axes) => {\n const axesInfo = {\n xAxis: axes.x,\n yAxis: axes.y\n };\n const {\n enterSpace: enterWidth,\n enter: enterX,\n pos: xPos,\n space: width\n } = resolveDimByField('x', axesInfo, config, data);\n\n const {\n enterSpace: enterHeight,\n enter: enterY,\n pos: yPos,\n space: height\n } = resolveDimByField('y', axesInfo, config, data);\n return {\n enter: {\n x: enterX,\n y: enterY,\n width: enterWidth,\n height: enterHeight\n },\n update: {\n x: xPos,\n y: yPos,\n width,\n height\n }\n };\n};\n\n/**\n * Generates an array of objects containing x, y, width and height of the bars from the data\n * @param {Array.} data Data Array\n * @param {Object} encoding Config\n * @param {Object} axes Axes object\n * @param {Object} conf config object for point generation\n * @return {Array.} Array of points\n */\nexport const getTranslatedPoints = (context, data, sizeConfig) => {\n let points = [];\n const encoding = context.config().encoding;\n const axes = context.axes();\n const colorAxis = axes.color;\n const fieldsConfig = context.data().getFieldsConfig();\n const colorEncoding = encoding.color;\n const colorField = colorEncoding.field;\n const sizeEncoding = encoding.size || {};\n const {\n x0Field,\n y0Field,\n xFieldSubType,\n yFieldSubType\n } = context.encodingFieldsInf();\n const measurement = context._store.get(PROPS.MEASUREMENT);\n const isXDim = xFieldSubType === DimensionSubtype.CATEGORICAL || xFieldSubType === DimensionSubtype.TEMPORAL;\n const isYDim = yFieldSubType === DimensionSubtype.CATEGORICAL || yFieldSubType === DimensionSubtype.TEMPORAL;\n const key = isXDim ? 'x' : (isYDim ? 'y' : null);\n const transformType = context.transformType();\n const colorFieldIndex = colorField && fieldsConfig[colorField] && fieldsConfig[colorField].index;\n\n for (let i = 0, len = data.length; i < len; i++) {\n const d = data[i];\n const style = {};\n const meta = {};\n const dimensions = resolveDimensions(d, {\n xFieldType: xFieldSubType,\n yFieldType: yFieldSubType,\n x0Field,\n y0Field,\n transformType,\n measurement,\n sizeConfig,\n sizeEncoding\n }, axes);\n\n const { color, rawColor } = getLayerColor({ datum: d, index: i },\n { colorEncoding, colorAxis, colorFieldIndex });\n\n style.fill = color;\n meta.stateColor = {};\n meta.originalColor = rawColor;\n meta.colorTransform = {};\n\n const update = dimensions.update;\n\n if (!isNaN(update.x) && !isNaN(update.y) && d._id !== undefined) {\n let point = null;\n point = {\n enter: dimensions.enter,\n update,\n style,\n _data: d._data,\n _id: d._id,\n source: d._data,\n rowId: d._id,\n meta\n };\n point.className = getIndividualClassName(d, i, data, context);\n points.push(point);\n // Store each point in a hashmap with key as the dimensional or temporal field value\n context.cachePoint(d[key], point);\n }\n }\n\n points = positionPoints(context, points);\n return points;\n};\n","import {\n getClosestIndexOf,\n getQualifiedClassName,\n selectElement,\n createElements,\n clipElement,\n DimensionSubtype,\n FieldType,\n Scales\n} from 'muze-utils';\nimport { BaseLayer } from '../../base-layer';\nimport { drawRects } from './renderer';\nimport { defaultConfig } from './default-config';\nimport * as PROPS from '../../enums/props';\nimport { getPlotMeasurement } from '../../helpers';\nimport './styles.scss';\nimport { getTranslatedPoints } from './bar-helper';\n\nconst MEASURE = FieldType.MEASURE;\nconst scaleBand = Scales.band;\n\n/**\n * Bar Layer creates a bar plot. It needs to be passed a data table, axes and configuration of the layer.\n *\n * @example\n * const BarLayer = layerFactory.getLayer('bar');\n * BarLayer.create()\n * .config(config)\n * .data(dt)\n * .mountPoint(container);\n * @class\n */\nexport default class BarLayer extends BaseLayer {\n /**\n * Creates an instance of bar layer\n */\n constructor (...params) {\n super(...params);\n this._bandScale = scaleBand();\n this._plotPadding = {\n x: 0,\n y: 0\n };\n this._plotSpan = {\n x: 0,\n y: 0\n };\n this._pointMap = {};\n }\n\n /**\n *\n *\n * @returns\n * @memberof BarLayer\n */\n elemType () {\n return 'rect';\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof BarLayer\n */\n static formalName () {\n return 'bar';\n }\n\n /**\n * Returns the default configuration of the bar layer\n * @return {Object} Default configuration of the bar layer\n */\n static defaultConfig () {\n return defaultConfig;\n }\n\n /**\n *\n *\n * @static\n * @param {*} conf\n * @param {*} userConf\n * @returns\n * @memberof BarLayer\n */\n static defaultPolicy (conf, userConf) {\n const config = BaseLayer.defaultPolicy(conf, userConf);\n const encoding = config.encoding;\n const colorField = encoding.color.field;\n const transform = config.transform;\n\n if (colorField) {\n transform.groupBy = colorField;\n }\n return config;\n }\n\n /**\n *\n *\n * @param {*} data\n * @param {*} fieldsConfig\n * @returns\n * @memberof BarLayer\n */\n calculateDomainFromData (data, encodingFieldInf, fieldsConfig) {\n const domain = super.calculateDomainFromData(data, encodingFieldInf, fieldsConfig);\n ['x', 'y'].forEach((d) => {\n if (encodingFieldInf[`${d}FieldType`] === MEASURE && domain[d]) {\n encodingFieldInf[`${d}0Field}`] ? domain[d] = domain[d].sort((a, b) => a - b) :\n (domain[d][0] = Math.min(domain[d][0], 0));\n }\n });\n return domain;\n }\n\n /**\n * Generates an array of objects containing x, y, width and height of the bars from the data\n * @param {Array.} data Data Array\n * @param {Object} encoding Config\n * @param {Object} axes Axes object\n * @param {Object} conf config object for point generation\n * @return {Array.} Array of points\n */\n translatePoints (data, sizeConfig) {\n return getTranslatedPoints(this, data, sizeConfig);\n }\n\n /**\n * Renders the plot in the given container\n * @param {SVGGroup} container SVGGroup where plot will be rendered.\n * @return {BarLayer} Instance of bar layer.\n */\n render (container) {\n const config = this.config();\n const transition = config.transition;\n const store = this._store;\n const normalizedDataArr = store.get(PROPS.NORMALIZED_DATA);\n const transformedData = store.get(PROPS.TRANSFORMED_DATA);\n const keys = transformedData.map(d => d.key);\n const fieldsConfig = this.data().getFieldsConfig();\n const axes = this.axes();\n const height = axes.y && axes.y.scale().range()[0];\n const width = axes.x && axes.x.scale().range()[1];\n const defClassName = config.defClassName;\n const qualifiedClassName = getQualifiedClassName(defClassName, this.id(), config.classPrefix);\n const className = config.className;\n const containerSelection = selectElement(container);\n const dimensions = Object.values(fieldsConfig).filter(e => e.def.type === FieldType.DIMENSION)\n .map(e => e.index);\n containerSelection.classed(qualifiedClassName.join(' '), true);\n containerSelection.classed(className, true);\n clipElement(container, {\n x: 0,\n y: 0,\n width,\n height\n }, `id-${this.id()}`);\n\n this._points = this.generateDataPoints(normalizedDataArr, keys);\n\n createElements({\n data: this._points,\n container,\n selector: 'g',\n append: 'g',\n each: (points, group, i) => {\n const seriesClassName = `${qualifiedClassName[0]}-${keys[i] || i}`.toLowerCase();\n group.style('display', 'block');\n drawRects({\n container: group.node(),\n points,\n className: seriesClassName,\n transition,\n style: {},\n keyFn: d => dimensions.map(key => d._data[key]).join('-')\n });\n }\n });\n return this;\n }\n\n /**\n *\n *\n * @param {*} normalizedData\n * @param {*} keys\n * @returns\n * @memberof BarLayer\n */\n generateDataPoints (normalizedData, keys) {\n const [barWidthMetrics, barHeightMetrics] = getPlotMeasurement(this, keys);\n const barWidthOffsets = barWidthMetrics.offsetValues || [];\n const barHeightOffsets = barHeightMetrics.offsetValues || [];\n this._plotSpan = {\n x: barWidthMetrics.groupSpan || 0,\n y: barHeightMetrics.groupSpan || 0\n };\n this._plotPadding = {\n x: barWidthMetrics.padding || 0,\n y: barHeightMetrics.padding || 0\n };\n\n this._pointMap = {};\n return normalizedData.map((data, i) => this.translatePoints(data,\n {\n barWidth: barWidthMetrics.span,\n barWidthOffset: barWidthOffsets[i] || 0,\n barHeight: barHeightMetrics.span,\n barHeightOffset: barHeightOffsets[i] || 0\n }));\n }\n\n getPlotPadding () {\n return this._plotPadding;\n }\n\n /**\n * Gets the nearest point of the position passed.\n * @param {number} x x position\n * @param {number} y y position\n * @return {Object} Nearest point.\n */\n getNearestPoint (x, y) {\n if (!this.data()) {\n return null;\n }\n let axis;\n let value;\n let index;\n let points;\n let uniqueFieldType;\n let uniqueFieldIndex;\n let filterData;\n let identifiers;\n let pointFound = null;\n const dataModel = this.data();\n const dataObj = dataModel.getData();\n const fieldsConfig = dataModel.getFieldsConfig();\n const axes = this.axes();\n const data = dataObj.data;\n const pointMap = this._pointMap;\n const {\n xField,\n yField,\n xFieldSubType,\n yFieldSubType\n } = this.encodingFieldsInf();\n\n if (xFieldSubType === FieldType.MEASURE) {\n axis = axes.y;\n value = axis.invert(y);\n uniqueFieldIndex = fieldsConfig[yField].index;\n uniqueFieldType = yFieldSubType;\n } else {\n axis = axes.x;\n value = axis.invert(x);\n uniqueFieldIndex = fieldsConfig[xField].index;\n uniqueFieldType = xFieldSubType;\n }\n\n if (uniqueFieldType === DimensionSubtype.CATEGORICAL) {\n points = pointMap[value];\n }\n\n if (uniqueFieldType === DimensionSubtype.TEMPORAL) {\n filterData = [...new Set(data.map(d => d[uniqueFieldIndex]))];\n index = getClosestIndexOf(filterData, value);\n value = filterData[index];\n points = pointMap[value];\n }\n const len = points && points.length;\n points && points.sort((p1, p2) => p1.update.y - p2.update.y);\n for (let i = 0; i < len; i++) {\n const point = points[i];\n const update = point.update;\n if (x >= update.x && x <= (update.width + update.x) && y >= update.y && y <= (update.height + update.y)) {\n pointFound = point;\n break;\n }\n pointFound = null;\n }\n\n const values = pointFound && pointFound._data;\n if (values) {\n identifiers = this.getIdentifiersFromData(values, pointFound._id);\n }\n return pointFound ? {\n dimensions: [pointFound.update],\n id: identifiers,\n layerId: this.id()\n } : pointFound;\n }\n\n getPlotSpan () {\n return this._plotSpan;\n }\n}\n","import { CLASSPREFIX } from '../../enums/constants';\n\nexport const defaultConfig = {\n defClassName: 'layer-tick',\n className: '',\n classPrefix: CLASSPREFIX,\n interaction: {\n highlight: [{\n type: 'stroke',\n intensity: [0, 0, -15, 0]\n }],\n fade: [{\n type: 'stroke',\n intensity: [0, 0, 15, 0]\n }],\n focus: [{\n type: 'stroke',\n intensity: [0, 0, 15, 0]\n }]\n },\n innerPadding: 0.1,\n transform: {\n type: 'identity'\n },\n transition: {\n effect: 'cubic',\n duration: 1000\n },\n encoding: {\n color: { },\n x: {},\n y: {},\n x0: {},\n y0: {},\n strokeOpacity: {\n value: 0.5\n },\n fillOpacity: {\n value: 0.5\n }\n },\n states: {\n highlight: {\n className: `${CLASSPREFIX}-layer-tick-highlight`\n },\n fadeout: {\n className: `${CLASSPREFIX}-layer-tick-fadeout`\n },\n selected: {\n className: `${CLASSPREFIX}-layer-tick-selected`\n }\n }\n};\n","import { selectElement } from 'muze-utils';\n\n/**\n * Draws ticks by using d3 selection\n * @param {Object} params Contains container element and points\n * @return {Selection} Ticks Selection\n */\nexport default /* istanbul ignore next */ (params) => {\n const { points, container, keyFn, className } = params;\n const mount = selectElement(container);\n const ticks = mount.selectAll('path').data(points, keyFn);\n const ticksEnter = ticks.enter().append('path');\n\n mount.attr('class', className || '');\n ticksEnter.each(function (d) {\n const selection = selectElement(this);\n const enter = d.enter || {};\n Object.entries(enter).forEach(attr => (!isNaN(attr[1]) && selection.attr(attr[0], attr[1])));\n });\n\n ticks.exit().remove();\n return ticks.merge(ticksEnter)\n .each(function (d) {\n const selection = selectElement(this);\n const update = d.update;\n const updateStyle = d.style || {};\n const x0 = update.x0 !== undefined ? update.x0 : update.x;\n const y0 = update.y0 !== undefined ? update.y0 : update.y;\n const path = `M ${update.x} ${update.y} L ${x0} ${y0}`;\n d.className && selection.classed(d.className, true);\n selection.attr('d', path);\n Object.entries(updateStyle).forEach(styleObj => selection.style(styleObj[0], styleObj[1]));\n });\n};\n\n","import { FieldType } from 'muze-utils';\nimport { PointLayer } from '../point';\nimport { defaultConfig } from './default-config';\nimport * as PROPS from '../../enums/props';\nimport { ENCODING } from '../../enums/constants';\nimport drawTicks from './renderer';\nimport './styles.scss';\nimport { getAxesScales, getLayerColor, positionPoints, getIndividualClassName } from '../../helpers';\n\nexport default class TickLayer extends PointLayer {\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof TickLayer\n */\n static defaultConfig () {\n return defaultConfig;\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof TickLayer\n */\n static formalName () {\n return 'tick';\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof TickLayer\n */\n static drawFn () {\n return drawTicks;\n }\n\n /**\n *\n *\n * @returns\n * @memberof TickLayer\n */\n elemType () {\n return 'path';\n }\n\n /**\n * Generates an array of objects containing x, y, width and height of the points from the data\n * @param {Array.} data Data Array\n * @param {Object} encoding Config\n * @param {Object} axes Axes object\n * @return {Array.} Array of points\n */\n translatePoints (data, encoding, axes, config = {}) {\n let points = [];\n const {\n xAxis,\n yAxis\n } = getAxesScales(axes);\n const fieldsConfig = this.data().getFieldsConfig();\n const {\n xField,\n yField,\n x0Field,\n y0Field,\n xFieldType,\n yFieldType\n } = this.encodingFieldsInf();\n const isXDim = xFieldType === FieldType.DIMENSION;\n const isYDim = yFieldType === FieldType.DIMENSION;\n const key = isXDim ? ENCODING.X : (isYDim ? ENCODING.Y : null);\n const colorEncoding = encoding.color;\n const colorField = colorEncoding && colorEncoding.field;\n const colorFieldIndex = fieldsConfig[colorField] && fieldsConfig[colorField].index;\n const measurement = this._store.get(PROPS.MEASUREMENT);\n const colorAxis = axes.color;\n const { x: offsetX, y: offsetY } = config.offset;\n const { x: xSpan, y: ySpan } = config.span;\n for (let i = 0, len = data.length; i < len; i++) {\n let xPx;\n let x0Px;\n let y0Px;\n let yPx;\n const d = data[i];\n const row = d._data;\n if (xField) {\n xPx = xAxis.getScaleValue(d.x) + offsetX;\n x0Px = xPx + xSpan;\n }\n\n if (yField) {\n yPx = yAxis.getScaleValue(d.y) + offsetY;\n y0Px = yPx !== null ? yPx + ySpan : null;\n }\n\n if (!xField) {\n xPx = 0;\n x0Px = measurement.width;\n if (!isNaN(yPx)) {\n yPx += ySpan / 2;\n y0Px = yPx;\n }\n }\n\n if (!yField) {\n yPx = 0;\n y0Px = measurement.height;\n x0Px = xPx += xSpan / 2;\n }\n\n if (x0Field) {\n x0Px = xAxis.getScaleValue(d.x0) + xSpan;\n yPx += ySpan / 2;\n y0Px -= ySpan / 2;\n }\n\n if (y0Field) {\n y0Px = yAxis.getScaleValue(d.y0) + ySpan;\n xPx += xSpan / 2;\n x0Px -= xSpan / 2;\n }\n const style = {};\n const meta = {};\n const { color, rawColor } = getLayerColor({ datum: d, index: i },\n { colorEncoding, colorAxis, colorFieldIndex });\n\n style.stroke = color;\n meta.stateColor = {};\n meta.originalColor = rawColor;\n meta.colorTransform = {};\n if (!isNaN(xPx) && !isNaN(yPx)) {\n const point = {\n enter: {},\n update: {\n x: xPx,\n y: yPx,\n x0: x0Px,\n y0: y0Px\n },\n style,\n _data: row,\n _id: d._id,\n source: row,\n rowId: d._id,\n meta\n };\n point.className = getIndividualClassName(d, i, data, this);\n points.push(point);\n this.cachePoint(d[key], point);\n }\n }\n points = positionPoints(this, points);\n return points;\n }\n\n getMeasurementConfig (offsetX, offsetY, widthSpan, heightSpan) {\n return {\n offset: {\n x: (offsetX || 0),\n y: (offsetY || 0)\n },\n span: {\n x: widthSpan,\n y: heightSpan\n }\n };\n }\n}\n","import { isSimpleObject, mergeRecursive, getObjProp } from 'muze-utils';\n\nconst parseLayerDefinition = (sink, definition, layerDef, layerType) => {\n for (const key in definition) {\n if (Object.hasOwnProperty.call(definition, key)) {\n let strs;\n let propValue;\n const def = definition[key];\n if (isSimpleObject(def)) {\n sink[key] = {};\n parseLayerDefinition(sink[key], def, layerDef, layerType);\n } else if (typeof def === 'string' && (strs = def.split('.')) && strs[0] === layerType) {\n propValue = getObjProp(layerDef, ...strs.slice(1, strs.length));\n if (propValue !== undefined) {\n sink[key] = propValue;\n }\n } else {\n sink[key] = def;\n }\n }\n }\n};\n\nconst sanitizeEncoding = (encoding) => {\n // Create object for each encoding value if encoding value is a string\n for (const key in encoding) {\n if (typeof encoding[key] === 'string') {\n encoding[key] = {\n field: encoding[key]\n };\n }\n }\n};\n\n/**\n * Layer Factory creates layers based on the layer type. All types of layers needs to register in\n * the layer factory. For getting a layer instance, getLayer method needs to invoked with the\n * layerType and other arguments.\n */\nconst layerFactory = (() => {\n const compositeLayers = {};\n const factoryObj = {\n setLayerRegistry: (reg) => {\n factoryObj._layerRegistry = reg;\n },\n getSerializedConf: (mark, layerDef) => {\n let serializedDefs;\n const defs = compositeLayers[mark];\n const newConf = mergeRecursive({}, layerDef);\n\n // If it is a composite layer then resolve all the definitions of each unit layer\n if (defs) {\n serializedDefs = defs.map((unitLayerDef) => {\n const sDef = {};\n parseLayerDefinition(sDef, unitLayerDef, newConf, mark);\n sanitizeEncoding(sDef.encoding);\n return sDef;\n });\n } else {\n const encoding = newConf.encoding;\n // Create object for each encoding value if encoding value is a string\n sanitizeEncoding(encoding);\n serializedDefs = newConf;\n }\n\n return serializedDefs;\n },\n getLayerInstance: (layerDef) => {\n const layerRegistry = factoryObj._layerRegistry;\n layerDef = !(layerDef instanceof Array) ? [layerDef] : layerDef;\n const instances = layerDef.map((layerObj) => {\n const layerConstructor = layerRegistry[layerObj.mark];\n return layerConstructor.create();\n });\n return instances.length === 1 ? instances[0] : instances;\n },\n composeLayers: (layerType, layerDefs) => {\n compositeLayers[layerType] = layerDefs;\n },\n sanitizeLayerConfig: (layerDef) => {\n const newConf = mergeRecursive({}, layerDef);\n sanitizeEncoding(newConf.encoding);\n return newConf;\n }\n };\n return factoryObj;\n})();\n\nexport default layerFactory;\n","import { AreaLayer } from './layers/area';\nimport { ArcLayer } from './layers/arc';\nimport { LineLayer } from './layers/line';\nimport { TextLayer } from './layers/text';\nimport { PointLayer } from './layers/point';\nimport { BarLayer } from './layers/bar';\nimport { BaseLayer } from './base-layer';\nimport * as CONSTANTS from './enums/constants';\nimport { TickLayer } from './layers/tick';\n\nexport const DEFAULT_LAYERS = {\n [CONSTANTS.AREA_LAYER]: AreaLayer,\n [CONSTANTS.ARC_LAYER]: ArcLayer,\n [CONSTANTS.LINE_LAYER]: LineLayer,\n [CONSTANTS.TEXT_LAYER]: TextLayer,\n [CONSTANTS.POINT_LAYER]: PointLayer,\n [CONSTANTS.TICK_LAYER]: TickLayer,\n [CONSTANTS.BAR_LAYER]: BarLayer,\n [CONSTANTS.BASE_LAYER]: BaseLayer\n};\n","/**\n * This file exports constants that are used as enums in the\n * crosstab group implementation.\n */\n/**\n * Width of the crosstab.\n */\nexport const X = 'x';\n/**\n * Width of the crosstab.\n */\nexport const Y = 'y';\n/**\n * Width of the crosstab.\n */\nexport const WIDTH = 'width';\n\n/**\n * Height of the crosstab.\n */\nexport const HEIGHT = 'height';\n\n/**\n * Field referring to object storing measurement configuration.\n */\nexport const MEASUREMENT = 'measurement';\n\n/**\n * Field referring to object storing configuration properties.\n */\nexport const CONFIG = 'config';\n\n/**\n * Width of visual unit in crosstab.\n */\nexport const MIN_UNIT_WIDTH = 'minUnitWidth';\n\n/**\n * Height of visual unit.\n */\nexport const MIN_UNIT_HEIGHT = 'minUnitHeight';\n\n/**\n * Field to store the array of dimensions to facet by.\n */\nexport const DIMENSIONS = 'dimensions';\n\n/**\n * Field to store array of measures to use as x axis.\n */\nexport const MEASURES = 'measures';\n\n/**\n * Field to store the array of dimensions to facet by.\n */\nexport const DIMENSION = 'dimension';\n\n/**\n * Field to store array of measures to use as x axis.\n */\nexport const MEASURE = 'measure';\n\n/**\n * Flag to specify if model should be pivoted.\n */\nexport const PIVOT = 'pivot';\n\n/**\n * Flag to specify format\n */\nexport const FORMAT = 'format';\n\n/**\n * Mount point where the variable will be hosted\n */\nexport const MOUNT = 'mount';\n\n/**\n * Data update flag\n */\nexport const HAS_DATA_UPDATED = 'hasDataUpdated';\n\n/**\n * Field referring to object storing set of rows\n */\nexport const ROWS = 'rows';\n\n/**\n * Field referring to object storing set of columns\n */\nexport const COLUMNS = 'columns';\n\n/**\n * Field referring to object storing set of columns\n */\nexport const COL = 'col';\n\n/**\n * Field referring to object storing set of rows\n */\nexport const ROW = 'row';\n\n/**\n * Field referring to object storing set of columns\n */\nexport const COLUMN = 'column';\n\n/**\n * Field referring to object storing color field\n */\nexport const COLOR = 'color';\n\n/**\n * Field referring to object storing shape field\n */\nexport const SHAPE = 'shape';\n\n/**\n * Field referring to object storing size field\n */\nexport const SIZE = 'size';\n\n/**\n * Field referring to object storing detail field\n */\nexport const DETAIL = 'detail';\n\n/**\n * Field referring to object storing set of layers\n */\nexport const LAYERS = 'layers';\n\n/**\n * Field referring to object storing the transforms\n */\nexport const TRANSFORM = 'transform';\n\n/**\n * Field referring to object storing the transforms\n */\nexport const ORDINAL = 'ordinal';\n\n/**\n * Field referring to object storing the transforms\n */\nexport const LINEAR = 'linear';\n/**\n * Field referring to object storing the transforms\n */\nexport const LEFT = 'left';\n/**\n * Field referring to object storing the transforms\n */\nexport const RIGHT = 'right';\n/**\n * Field referring to object storing the transforms\n */\nexport const TOP = 'top';\n/**\n * Field referring to object storing the transforms\n */\nexport const BOTTOM = 'bottom';\n\n/**\n * Field referring to object storing the transforms\n */\nexport const RETINAL = 'retinal';\n/**\n * Field referring to object storing the transforms\n */\nexport const CELL = 'cell';\n/**\n * Field referring to object storing the transforms\n */\nexport const X_AXES = 'xAxes';\n/**\n * Field referring to object storing the transforms\n */\nexport const Y_AXES = 'yAxes';\n/**\n * Field referring to object storing the transforms\n */\nexport const ENTRY_CELLS = 'entryCell';\n/**\n * Field referring to object storing the transforms\n */\nexport const INITIALIZED = 'initialized';\n/**\n * Field referring to object storing the transforms\n */\nexport const EXIT_CELLS = 'exitCell';\n/**\n * Field referring to object storing the transforms\n */\nexport const AXIS = 'axis';\n/**\n * Field referring to object storing the transforms\n */\nexport const UNIT = 'unit';\n/**\n * Field referring to object storing the transforms\n */\nexport const UPDATED = 'updated';\n/**\n * Field referring to object storing the transforms\n */\nexport const BEFORE_UPDATE = 'beforeupdate';\n/**\n * Field referring to object storing the transforms\n */\nexport const VALUE_MATRIX = 'valueMatrix';\n/**\n * Field referring to object storing the transforms\n */\nexport const FACET_HEADERS = 'facet-headers';\n/**\n * Field referring to object storing the transforms\n */\nexport const RADIUS = 'radius';\n/**\n * Field referring to object storing the transforms\n */\nexport const ANGLE = 'angle';\n/**\n * Field referring to object storing the transforms\n */\nexport const ARC = 'arc';\n/**\n * Field referring to object storing the transforms\n */\nexport const CARTESIAN = 'cartesian';\n/**\n * Field referring to object storing the transforms\n */\nexport const POLAR = 'polar';\n/**\n * Field referring to object storing the transforms\n */\nexport const CATEGORICAL = 'categorical';\n/**\n * Field referring to object storing the transforms\n */\nexport const TEMPORAL = 'temporal';\n/**\n * Field referring to object storing the transforms\n */\nexport const BAR = 'bar';\n/**\n * Field referring to object storing the transforms\n */\nexport const LINE = 'line';\n/**\n * Field referring to object storing the transforms\n */\nexport const POINT = 'point';\n/**\n * Field referring to object storing the transforms\n */\nexport const PRIMARY = 'Primary';\n/**\n * Field referring to object storing the transforms\n */\nexport const SECONDARY = 'Secondary';\n/**\n * Field referring to object storing the transforms\n */\nexport const BOTH = 'both';\n/**\n * Field referring to object storing the transforms\n */\nexport const INTERACTION = 'interaction';\n/**\n * Field referring to object storing the transforms\n */\nexport const GRID_LINES = 'gridLines';\n/**\n * Field referring to object storing the transforms\n */\nexport const GRID_BANDS = 'gridBands';\n/**\n * Field referring to object storing the transforms\n */\nexport const HEADER = 'header';\n/**\n * Field referring to object storing the transforms\n */\nexport const FACET = 'facet';\n\n","import { ROWS, COLUMNS, COLOR, SHAPE, SIZE, DETAIL, LAYERS, TRANSFORM, CONFIG } from '../enums/constants';\n\n/**\n * @module\n * This is the local options semantics based on which setters getters are created and reactivity is initiated.\n * This local object is only valid for Artboard.\n * Artboard merges global and local object both to the model\n *\n * Format\n * PROPERTRY_NAME: {\n * value: // default value of the property,\n * meta: {\n * typeCheck: // The setter value will be checked using this. If the value is function then the setter value\n * // is passed as args.\n * typeExpected: // The output of typecheck action will be tested against this. Truthy value will set the\n * // value to the setter\n * sanitizaiton: // Need for sanitization before type is checked\n * }\n * }\n */\n\nexport default {\n [CONFIG]: {},\n [ROWS]: [],\n [COLUMNS]: [],\n [COLOR]: '',\n [SHAPE]: '',\n [SIZE]: '',\n [DETAIL]: '',\n [LAYERS]: '',\n [TRANSFORM]: []\n};\n","import { ERROR_MSG } from 'muze-utils';\n\n/**\n * Interfaces for VisualGroup. Any new VisualGroup has to implement this class.\n * @class SimpleGroup\n */\nclass SimpleGroup {\n\n /**\n * This method is used to set or get the DataModel instance.\n *\n * @param {DataModel | undefined} dataModel Instance of datamodel.\n\n * @memberof SimpleGroup\n */\n data () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * This method is used to set or get the group specific configuration\n * properties\n *\n * @param {Object | undefined} configObj The input configuration.\n * or instance of visual group.\n * @memberof SimpleGroup\n */\n config () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * This method is used to return a serialized representation of the\n * instance's properties.\n *\n * @memberof SimpleGroup\n */\n serialize () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * This method is used to get or set the measurement object which houses\n * layout properties like width and height.\n *\n * @param {Object | undefined} mObj The measurement properties.\n * @memberof SimpleGroup\n */\n measurement () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n}\n\nexport default SimpleGroup;\n","import { ERROR_MSG } from 'muze-utils';\n\n/**\n *\n *\n * @export\n * @class Variable\n */\nexport default class Variable {\n\n /**\n *\n *\n * @memberof Variable\n */\n type () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n *\n *\n * @memberof Variable\n */\n toString () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n}\n","import Variable from './variable';\n\n/**\n *\n *\n * @class ComposeVars\n * @extends {Variable}\n */\nclass ComposedVars extends Variable {\n\n /**\n *Creates an instance of ComposeVars.\n * @param {*} texts\n * @memberof ComposeVars\n */\n constructor (...texts) {\n super(...texts);\n this.vars(texts);\n }\n\n /**\n *\n *\n * @param {*} params\n * @returns\n * @memberof ComposeVars\n */\n vars (...params) {\n if (params.length) {\n this._vars = params[0];\n return this;\n }\n return this._vars;\n }\n\n /**\n *\n *\n * @param {*} dm\n * @returns\n * @memberof ComposeVars\n */\n data (...dm) {\n if (dm.length) {\n this.vars().forEach(d => d.data(dm[0]));\n return this;\n }\n return this._data;\n }\n\n /**\n *\n *\n * @returns\n * @memberof ComposeVars\n */\n getMembers () {\n const vars = this.vars();\n return vars.map(member => member.getMembers()[0]);\n }\n\n /**\n *\n *\n * @returns\n * @memberof ComposeVars\n */\n type () {\n return this.vars()[0].type();\n }\n\n /**\n *\n *\n * @returns\n * @memberof ComposeVars\n */\n toString () {\n return this.vars().map(d => d.toString()).join(',');\n }\n\n /**\n *\n *\n * @returns\n * @memberof ComposeVars\n */\n numberFormat () {\n return this.vars()[0].numberFormat();\n }\n\n /**\n *\n *\n * @returns\n * @memberof ComposeVars\n */\n format (values) {\n return this.vars()[0].format(values);\n }\n\n /**\n *\n *\n * @returns\n * @memberof ComposedVars\n */\n subtype () {\n return this.vars()[0].subtype();\n }\n\n /**\n *\n *\n * @returns\n * @memberof ComposedVars\n */\n getMinDiff () {\n return this.vars()[0].getMinDiff();\n }\n}\n\nexport default ComposedVars;\n","import { DateTimeFormatter } from 'muze-utils';\nimport Variable from './variable';\n\n/**\n *\n *\n * @export\n * @class Vars\n * @extends {Variable}\n */\nexport default class SimpleVariable extends Variable {\n\n /**\n *Creates an instance of Vars.\n * @param {*} text\n * @memberof Vars\n */\n constructor (text) {\n super();\n this.oneVar(text);\n }\n\n /**\n *\n *\n * @param {*} params\n * @returns\n * @memberof Vars\n */\n oneVar (...oneV) {\n if (oneV.length) {\n this._oneVar = oneV[0];\n return this;\n }\n return this._oneVar;\n }\n\n /**\n *\n *\n * @param {*} dm\n * @returns\n * @memberof Vars\n */\n data (...dm) {\n if (dm.length) {\n this._data = dm[0];\n return this;\n }\n return this._data;\n }\n\n /**\n *\n *\n * @returns\n * @memberof Vars\n */\n toString () {\n return this.oneVar();\n }\n\n /**\n *\n *\n * @memberof SimpleVariable\n */\n numberFormat () {\n if (this.type() === 'measure') {\n const formatter = this.data().getFieldspace().getMeasure()[this.oneVar()]._ref;\n return formatter.numberFormat();\n } return val => val;\n }\n\n /**\n *\n *\n * @memberof SimpleVariable\n */\n format (values) {\n if (values && this.subtype() === 'temporal') {\n const formatter = this.data().getFieldspace().getDimension()[this.oneVar()]._ref.schema.format;\n const dtFormat = new DateTimeFormatter(formatter);\n values = values.map(e => dtFormat.getNativeDate(e));\n }\n return values;\n }\n\n /**\n *\n *\n * @returns\n * @memberof Vars\n */\n getMembers () {\n return [this.oneVar()];\n }\n\n /**\n *\n *\n * @returns\n * @memberof Vars\n */\n type () {\n const fieldDef = this.data().getFieldsConfig()[this.oneVar()].def;\n return fieldDef.type;\n }\n\n /**\n *\n *\n * @returns\n * @memberof Vars\n */\n subtype () {\n const fieldDef = this.data().getFieldsConfig()[this.oneVar()].def;\n return fieldDef.subtype || fieldDef.type;\n }\n\n /**\n *\n *\n * @returns\n * @memberof SimpleVariable\n */\n getMinDiff () {\n const fieldSpace = this.data().getFieldspace();\n return fieldSpace.fieldsObj()[this.oneVar()].getMinDiff();\n }\n\n equals (varInst) {\n return this.oneVar() === varInst.oneVar();\n }\n}\n","import { ComposedVars, SimpleVariable } from '../variable';\nimport { DIMENSION, COLUMNS, ROWS, TEMPORAL } from '../enums/constants';\n\n/**\n * Gets the list of fields in a sorted order by measurement and dimension\n *\n * @param {Array} fieldList List of fields in the view\n * @param {Object} fieldMap Mapping of fields in the datamodel\n * @return {Array} fields sorted by measurement and dimensions\n */\nconst orderFields = (fieldArray, type) => {\n const dimensionArr = [[], []];\n const measureArr = [[], []];\n const temporalArr = [[], []];\n const categoricalArr = [[], []];\n\n fieldArray.forEach((fieldList, index) => {\n fieldList.forEach((field) => {\n if (field.type() === DIMENSION) {\n dimensionArr[index].push(field);\n field.subtype() === TEMPORAL ? temporalArr[index].push(field) : categoricalArr[index].push(field);\n } else {\n measureArr[index].push(field);\n }\n });\n });\n\n const numOfMeasures = measureArr[0].length + (measureArr[1] ? measureArr[1].length : 0);\n\n // Single array of fields\n if (!fieldArray[1]) {\n // Push measures to bottom\n measureArr[1] = type === COLUMNS ? measureArr[0] : [];\n // Push measures to left\n measureArr[0] = type !== COLUMNS ? measureArr[0] : [];\n // Bottom and right dimensions empty\n dimensionArr[1] = [];\n // Left and top filled with dimensions\n dimensionArr[0] = dimensionArr[0];\n if (numOfMeasures === 0) {\n const allDimensions = [...dimensionArr[0], ...dimensionArr[1]];\n if (type === COLUMNS) {\n dimensionArr[1] = allDimensions[allDimensions.length - 1] ? [allDimensions[allDimensions.length - 1]]\n : [];\n allDimensions.splice(-1, 1);\n } else {\n dimensionArr[1] = [];\n }\n dimensionArr[0] = [...allDimensions];\n }\n }\n\n if (dimensionArr[0].length && dimensionArr[1].length && numOfMeasures > 0) {\n dimensionArr[0] = [...dimensionArr[0], ...dimensionArr[1]];\n dimensionArr[1] = [];\n }\n return {\n fields: dimensionArr.map((list, i) => (i === 1 ?\n measureArr[i].concat(dimensionArr[i]) : dimensionArr[i].concat(measureArr[i]))),\n dimensions: [...dimensionArr[0], ...dimensionArr[1]],\n measures: [...measureArr[0], ...measureArr[1]],\n temporal: [...temporalArr[0], ...temporalArr[1]],\n categorical: [...categoricalArr[0], ...categoricalArr[1]]\n };\n};\n\n/**\n * Gets the list of normalized fields\n *\n * @param {Array} fields List of fields in the view\n * @param {Object} fieldMap Mapping of fields in the datamodel\n * @return {Array} fields normalized by measurement and dimensions\n */\nconst normalizeFields = (config, type) => {\n const fieldsArr = [];\n const fields = config[type];\n\n if (!(fields[0] instanceof Array)) {\n fieldsArr[0] = fields;\n } else {\n fieldsArr[0] = fields[0] || [];\n fieldsArr[1] = fields[1] || [];\n }\n return fieldsArr;\n};\n\n/**\n *\n *\n * @param {*} fields\n * @param {*} datamodel\n * @return\n */\nconst convertToVar = (datamodel, fields) => {\n const vars = [];\n\n fields && fields.forEach((field) => {\n if (field instanceof ComposedVars) {\n vars.push(field);\n field.data(datamodel);\n } else {\n vars.push(new SimpleVariable(field).data(datamodel));\n }\n });\n return vars;\n};\n\n/**\n *\n *\n * @param {*} rows\n * @param {*} columns\n * @param {*} datamodel\n * @return\n */\nexport const transformFields = (datamodel, config) => {\n const [rowsInfo, columnsInfo] = [ROWS, COLUMNS].map((fields) => {\n const normalizedFields = normalizeFields(config, fields);\n const norFields = [convertToVar(datamodel, normalizedFields[0])];\n\n if (normalizedFields[1]) {\n norFields[1] = convertToVar(datamodel, normalizedFields[1]);\n }\n return orderFields(norFields, fields);\n });\n const {\n fields: rows,\n dimensions: rowDimensions,\n measures: rowMeasures,\n temporal: rowTemporalFields,\n categorical: rowCategoricalFields\n } = rowsInfo;\n const {\n fields: columns,\n dimensions: columnDimensions,\n measures: columnMeasures,\n temporal: columnTemporalFields,\n categorical: columnCategoricalFields\n } = columnsInfo;\n return {\n rows,\n rowDimensions,\n rowMeasures,\n rowTemporalFields,\n rowCategoricalFields,\n columns,\n columnTemporalFields,\n columnCategoricalFields,\n columnDimensions,\n columnMeasures\n };\n};\n","import { ERROR_MSG, mergeRecursive } from 'muze-utils';\nimport { transformFields } from './field-sanitizer';\nimport { getHeaderAxisFrom } from '../group-helper/group-utils';\nimport { ROW, COLUMN } from '../enums/constants';\n\n/**\n *\n *\n * @export\n * @class VisualEncoder\n */\nexport default class VisualEncoder {\n\n /**\n *\n *\n * @memberof VisualEncoder\n */\n createAxis () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n *\n *\n * @memberof VisualEncoder\n */\n setCommonDomain () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n *\n *\n * @memberof VisualEncoder\n */\n getLayerConfig () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n fieldInfo (...info) {\n if (info.length) {\n this._fieldInfo = mergeRecursive(this._fieldInfo || {}, info[0]);\n return this;\n }\n return this._fieldInfo;\n }\n\n /**\n *\n *\n * @param {*} datamodel\n * @param {*} config\n * @return\n * @memberof VisualEncoder\n */\n fieldSanitizer (datamodel, config) {\n this.fieldInfo(transformFields(datamodel, config));\n return this.fieldInfo();\n }\n\n /**\n *\n *\n * @param {*} params\n * @return\n * @memberof VisualEncoder\n */\n axisFrom (...params) {\n if (params.length) {\n this._axisFrom = params[0];\n return this;\n }\n return this._axisFrom;\n }\n\n /**\n *\n *\n * @param {*} params\n * @return\n * @memberof VisualEncoder\n */\n headerFrom (...params) {\n if (params.length) {\n this._headerFrom = params[0];\n return this;\n }\n return this.__headerFrom;\n }\n\n /**\n *\n *\n * @param {*} axisFrom\n * @return\n * @memberof CartesianEncoder\n */\n setAxisAndHeaders (axisFrom = {}, fields) {\n const [rowHeader, rowAxis] = getHeaderAxisFrom(ROW, fields.rows, axisFrom);\n const [colHeader, colAxis] = getHeaderAxisFrom(COLUMN, fields.columns, axisFrom);\n\n this.axisFrom({\n row: rowAxis,\n column: colAxis\n });\n this.headerFrom({\n row: rowHeader,\n column: colHeader\n });\n return this;\n }\n}\n","import { ContinousAxis, BandAxis, TimeAxis, ColorAxis, SizeAxis, ShapeAxis } from '@chartshq/muze-axis';\n\nexport const scaleMaps = {\n linear: ContinousAxis,\n band: BandAxis,\n temporal: TimeAxis,\n size: SizeAxis,\n color: ColorAxis,\n shape: ShapeAxis\n};\n","import { ScaleType } from '@chartshq/muze-axis';\n\n/**\n * Map of DataModel types to associated field types.\n */\nexport const dataTypeScaleMap = {\n dimension: ScaleType.BAND,\n categorical: ScaleType.BAND,\n measure: ScaleType.LINEAR,\n temporal: ScaleType.TIME\n};\n\n","import { mergeRecursive } from 'muze-utils';\nimport { AxisOrientation } from '@chartshq/muze-axis';\nimport { scaleMaps } from '../enums/scale-maps';\nimport { getAxisType, getAxisKey } from '../group-helper';\nimport { dataTypeScaleMap } from '../data-type-scale-map';\nimport { CATEGORICAL, TEMPORAL, BAR, LINE, POINT, BOTH, Y } from '../enums/constants';\n\n/**\n *\n *\n * @param {*} axisInfo\n * @param {*} field\n * @param {*} axesCreators\n * @return\n */\nconst getAxisConfig = (axisInfo, field, axesCreators) => {\n let axisOrientation;\n const { index, axisIndex, axisType } = axisInfo;\n const { config, position } = axesCreators;\n const userAxisConfig = config.axes ? (config.axes[axisType] || {}) : {};\n const {\n LEFT,\n RIGHT,\n TOP,\n BOTTOM\n } = AxisOrientation;\n const allOrientations = axisType === Y ? [LEFT, RIGHT] : [TOP, BOTTOM];\n\n if (position === BOTH) {\n axisOrientation = allOrientations[axisIndex];\n } else {\n axisOrientation = position;\n }\n const axisConfig = {\n id: `${axisType}-${index}-${axisIndex}`,\n name: field.toString(),\n field: field.toString(),\n labels: { rotation: 0 },\n numberFormat: field.numberFormat(),\n orientation: axisOrientation,\n type: dataTypeScaleMap[field.subtype()]\n };\n userAxisConfig.tickValues = field.format(userAxisConfig.tickValues);\n userAxisConfig.domain = field.format(userAxisConfig.domain);\n\n return mergeRecursive(axisConfig, userAxisConfig);\n};\n\n/**\n *\n *\n * @param {*} axisInfo\n * @param {*} field\n * @param {*} axesCreators\n * @return\n */\nconst createSimpleAxis = (axisConfig, field, axesCreators) => {\n const { labelManager } = axesCreators;\n const Cls = scaleMaps[dataTypeScaleMap[field.subtype()]];\n const simpleAxis = new Cls(axisConfig, { labelManager });\n return simpleAxis;\n};\n\n/**\n *\n *\n * @param {*} axisType\n * @param {*} fieldInfo\n * @param {*} axesCreators\n * @param {*} groupAxes\n * @return\n */\nexport const generateAxisFromMap = (axisType, fieldInfo, axesCreators, groupAxes) => {\n let axisKey;\n const currentAxes = [];\n const { fields, index } = fieldInfo;\n const { cacheMaps } = axesCreators;\n const map = cacheMaps[`${axisType}AxesMap`];\n\n fields.forEach((field, axisIndex) => {\n axisKey = getAxisKey(axisType, index, dataTypeScaleMap[field.subtype()]);\n const axisConfig = getAxisConfig({ index, axisIndex, axisType }, field, axesCreators);\n\n if (!map.has(axisKey)) {\n const xAxis = createSimpleAxis(axisConfig, field, axesCreators);\n currentAxes.push(xAxis);\n } else {\n const axes = map.get(axisKey);\n axes[axisIndex] = axes[axisIndex] ? axes[axisIndex] : createSimpleAxis(axisConfig, field, axesCreators);\n axes[axisIndex]._rotationLock = false;\n axes[axisIndex] && axes[axisIndex].config(axisConfig).domain(axisConfig.domain || []);\n }\n });\n\n if (currentAxes.length) {\n map.set(axisKey, currentAxes);\n }\n\n for (const [key] of map.entries()) {\n if (key === axisKey) {\n groupAxes.add(axisKey);\n }\n }\n return map.get(axisKey);\n};\n\n/**\n *\n *\n * @memberof MatrixResolver\n */\nexport const mutateAxesFromMap = (cacheMaps, axes) => {\n const {\n xAxesMap,\n yAxesMap\n } = cacheMaps;\n const {\n x: xAxisSet,\n y: yAxisSet\n } = axes;\n const xAxes = [];\n const yAxes = [];\n\n xAxisSet.forEach((axisId) => {\n const xAxis = xAxesMap.get(axisId);\n xAxes.push(xAxis);\n });\n yAxisSet.forEach((axisId) => {\n const yAxis = yAxesMap.get(axisId);\n yAxes.push(yAxis);\n });\n return {\n xAxes, yAxes\n };\n};\n\n/**\n * return a default mark based on predefined set of rules of type and subtype of the fields\n *\n * @param {string} colFieldType dimension/measure - temporal/ordinal/nominal\n * @param {string} rowFieldType dimension/measure - temporal/ordinal/nominal\n * @return {Object} return mark type\n */\nexport const getDefaultMark = (colFieldType, rowFieldType) => {\n let mark;\n\n if (colFieldType === CATEGORICAL || rowFieldType === CATEGORICAL) {\n mark = BAR;\n } else if (colFieldType === TEMPORAL || rowFieldType === TEMPORAL) {\n mark = LINE;\n } else {\n mark = POINT;\n }\n\n return mark;\n};\n\n/**\n *\n *\n * @param {*} axesCreators\n * @param {*} [fieldInfo=[]]\n * @return\n */\nexport const createRetinalAxis = (axesCreators, fieldProps = {}) => {\n const { axisType, fieldsConfig } = axesCreators;\n const field = fieldProps.field;\n const axis = [];\n const Cls = scaleMaps[axisType];\n\n fieldProps.type = fieldProps.type ? fieldProps.type : getAxisType(fieldsConfig, field || null);\n axis.push(new Cls(fieldProps));\n return axis;\n};\n\n/**\n *\n *\n * @param {*} arr\n * @param {*} val\n * @return\n */\nexport const getIndex = (arr, val) => {\n let i = 0;\n let arrIndex = -1;\n\n while (arrIndex === -1 && i < arr.length) {\n if (arr[i].toString() === val.toString()) {\n arrIndex = i;\n }\n i++;\n }\n return arrIndex;\n};\n\n/**\n *\n *\n * @param {*} colFields\n * @param {*} rowFields\n * @param {*} userLayerConfig\n * @return\n * @memberof CartesianEncoder\n */\nexport const getLayerConfFromFields = (colFields, rowFields, userLayerConfig) => userLayerConfig.filter((conf) => {\n const userConf = conf instanceof Array ? conf : [conf];\n const encodingArr = [].concat(...userConf.map(d => d.encoding).filter(d => d !== undefined));\n\n if (!encodingArr.length) {\n return true;\n }\n\n const xFields = [].concat(...encodingArr.map(d => [d.x && d.x.field, d.x0 && d.x0.field]))\n .filter(d => d !== undefined && d !== null);\n const yFields = [].concat(...encodingArr.map(d => [d.y && d.y.field, d.y0 && d.y0.field]))\n .filter(d => d !== undefined && d !== null);\n\n if (!xFields.length && !yFields.length) {\n return true;\n }\n\n const colFieldExist = xFields.length ? xFields.every(d => colFields.indexOf(d) !== -1) : false;\n const rowFieldExist = yFields.length ? yFields.every(d => rowFields.indexOf(d) !== -1) : false;\n if (xFields.length && yFields.length) {\n return colFieldExist && rowFieldExist;\n }\n return colFieldExist || rowFieldExist;\n});\n","import { layerFactory } from '@chartshq/visual-layer';\nimport { mergeRecursive } from 'muze-utils';\nimport { generateAxisFromMap, getDefaultMark, getIndex, getLayerConfFromFields } from './encoder-helper';\nimport { retriveDomainFromData } from '../group-helper';\n\nimport { ROW, COLUMN, COL, LEFT, TOP, CARTESIAN, MEASURE, BOTH, X, Y } from '../enums/constants';\nimport VisualEncoder from './visual-encoder';\n\n/**\n *\n *\n * @export\n * @class CartesianEncoder\n * @extends {VisualEncoder}\n */\nexport default class CartesianEncoder extends VisualEncoder {\n\n /**\n *\n *\n * @return\n * @memberof CartesianEncoder\n */\n static type () {\n return CARTESIAN;\n }\n\n /**\n *\n *\n * @param {*} axesCreators\n * @param {*} fieldInfo\n * @return\n * @memberof CartesianEncoder\n */\n createAxis (axesCreators, fieldInfo) {\n const geomCellAxes = {};\n const {\n axes\n } = axesCreators;\n const {\n projections,\n indices\n } = fieldInfo;\n const {\n rowFields,\n columnFields\n } = projections;\n const {\n rowIndex,\n columnIndex\n } = indices;\n const axisFields = [{\n fields: rowFields,\n index: rowIndex\n }, {\n fields: columnFields,\n index: columnIndex\n }];\n const xAxes = axes.x || [];\n const yAxes = axes.y || [];\n\n [rowFields, columnFields].forEach((fields, i) => {\n const type = i === 0 ? ROW : COLUMN;\n const axis = i === 0 ? Y : X;\n\n if (fields.length > 1) {\n axesCreators.position = BOTH;\n } else {\n axesCreators.position = this.axisFrom()[type];\n }\n geomCellAxes[axis] = generateAxisFromMap(axis, axisFields[i], axesCreators, axis === X ? xAxes : yAxes);\n });\n return geomCellAxes;\n }\n\n /**\n *\n *\n * @param {*} fields\n * @return\n * @memberof CartesianEncoder\n */\n getFacetsAndProjections (fields, type) {\n let facets = [];\n let projections = [];\n let counter = 0;\n const primaryFacets = [];\n const secondaryFacets = [];\n const primaryFields = fields[0];\n const secondaryFields = fields[1];\n const primaryLen = primaryFields.length;\n const secondaryLen = secondaryFields.length;\n const axisFrom = this.axisFrom();\n\n for (let i = 0; i < primaryLen; i++) {\n let projArr = [primaryFields[i]];\n const primaryField = primaryFields[i];\n\n if (primaryField.type() === MEASURE) {\n const secondaryField = secondaryFields[counter];\n if (secondaryField && secondaryField.type() === MEASURE) {\n counter++;\n projArr = [primaryField, secondaryField];\n }\n projections.push(projArr);\n } else {\n facets.push(primaryField);\n primaryFacets.push(primaryField);\n }\n }\n if (secondaryLen > counter) {\n for (let i = counter; i < secondaryLen; i++) {\n const secondaryField = secondaryFields[i];\n const projArr = [secondaryField];\n if (secondaryField.type() === MEASURE) {\n projections.push(projArr);\n } else {\n facets.push(secondaryField);\n secondaryFacets.push(secondaryField);\n }\n }\n }\n if ((primaryFacets.length || secondaryFacets.length) && !projections.length) {\n type = type === COL ? COLUMN : type;\n if ((axisFrom[type] === LEFT || axisFrom[type] === TOP) && primaryFacets.length) {\n const axisFromIndex = primaryFacets.length - 1;\n const facet = primaryFacets[axisFromIndex];\n projections = [[facet]];\n const existIndex = getIndex(secondaryFacets, facet);\n if (existIndex > -1) {\n projections = [[facet, facet]];\n secondaryFacets.splice(existIndex, 1);\n }\n primaryFacets.splice(axisFromIndex, 1);\n } else {\n const axisFromIndex = 0;\n const facet = secondaryFacets[axisFromIndex];\n projections = [[facet]];\n const existIndex = getIndex(primaryFacets, facet);\n if (existIndex > -1) {\n projections = [[facet, facet]];\n primaryFacets.splice(existIndex, 1);\n }\n secondaryFacets.splice(axisFromIndex, 1);\n }\n }\n\n facets = [...primaryFacets, ...secondaryFacets];\n facets = facets.filter((el, index, self) => index === self.findIndex(t => (t.toString() === el.toString())));\n return {\n facets,\n projections\n };\n }\n\n /**\n *\n *\n * @param {*} datamodel\n * @param {*} config\n * @return\n * @memberof CartesianEncoder\n */\n fieldSanitizer (datamodel, config) {\n return super.fieldSanitizer(datamodel, config);\n }\n\n /**\n *\n *\n * @param {*} datamodel\n * @return\n * @memberof CartesianEncoder\n */\n getRetinalFieldsDomain (dataModels, encoding) {\n const groupedModel = dataModels.groupedModel;\n const domains = {};\n for (const key in encoding) {\n if ({}.hasOwnProperty.call(encoding, key)) {\n const encodingObj = encoding[key];\n const field = encodingObj.field;\n if (!encodingObj.domain && field) {\n const domain = retriveDomainFromData(groupedModel, field);\n domains[field] = domain;\n }\n }\n }\n return domains;\n }\n\n /**\n *\n *\n * @param {*} layerArray\n * @memberof CartesianEncoder\n */\n serializeLayerConfig (layerArray) {\n const serializedLayers = [];\n // let currentLayerIndex = 0;\n layerArray.length && layerArray.forEach((layer, i) => {\n const def = layerFactory.sanitizeLayerConfig(layer);\n def.order = i;\n serializedLayers.push(def);\n });\n return serializedLayers;\n }\n\n /**\n *\n *\n * @param {*} fields\n * @param {*} userLayerConfig\n * @return\n * @memberof CartesianEncoder\n */\n getLayerConfig (fields, userLayerConfig) {\n const layerConfig = [];\n const {\n columnFields,\n rowFields\n } = fields;\n\n // let currentLayerIndex = 0;\n columnFields.forEach((colField) => {\n const colFieldName = colField.toString();\n rowFields.forEach((rowField) => {\n let configs = [];\n const rowFieldName = rowField.toString();\n const encoding = {\n x: {\n field: colFieldName\n },\n y: {\n field: rowFieldName\n }\n };\n const rowFieldType = rowField.subtype();\n const colFieldType = colField.subtype();\n const mark = getDefaultMark(colFieldType, rowFieldType);\n\n const defConfigs = [{\n mark,\n def: {\n mark,\n encoding\n }\n }];\n\n const layerConfigs = getLayerConfFromFields(colField.getMembers(),\n rowField.getMembers(), userLayerConfig || []);\n if (layerConfigs.length) {\n configs = layerConfigs.map((layerConf) => {\n const mergedLayerConf = mergeRecursive(mergeRecursive({}, defConfigs[0].def), layerConf);\n const serializedLayerConfig = layerFactory.getSerializedConf(mergedLayerConf.mark,\n mergedLayerConf);\n return {\n mark: mergedLayerConf.mark,\n order: mergedLayerConf.order,\n def: serializedLayerConfig\n };\n });\n } else {\n configs = defConfigs;\n }\n\n layerConfig.push(...configs);\n });\n });\n return layerConfig;\n }\n}\n\n","import { layerFactory } from '@chartshq/visual-layer';\nimport { mergeRecursive } from 'muze-utils';\nimport VisualEncoder from './visual-encoder';\nimport { RADIUS, ANGLE, SIZE, MEASURE, ARC, POLAR, COLOR } from '../enums/constants';\n/**\n *\n *\n * @export\n * @class PolarEncoder\n * @extends {VisualEncoder}\n */\nexport default class PolarEncoder extends VisualEncoder {\n\n /**\n *\n *\n * @param {*} axesCreators\n * @param {*} fieldInfo\n * @return\n * @memberof PolarEncoder\n */\n createAxis (axesCreators, fieldInfo) {\n const {\n axes\n } = axesCreators;\n const geomCellAxes = axes;\n const {\n indices\n } = fieldInfo;\n const {\n rowIndex,\n columnIndex\n } = indices;\n // Dummy axes for polar, to create blank cells\n const pieAxes = geomCellAxes.pie || [];\n\n pieAxes[rowIndex] = pieAxes[rowIndex] || [];\n pieAxes[rowIndex][columnIndex] = [];\n\n geomCellAxes.pie = pieAxes;\n geomCellAxes.x = null;\n geomCellAxes.y = null;\n\n return geomCellAxes;\n }\n\n /**\n *\n *\n * @param {*} fields\n * @return\n * @memberof CartesianEncoder\n */\n getFacetsAndProjections (fields) {\n let counter = 0;\n const facets = [];\n const projections = [];\n const primaryFields = fields[0];\n const secondaryFields = fields[1];\n const primaryLen = primaryFields.length;\n const secondaryLen = secondaryFields.length;\n\n for (let i = 0; i < primaryLen; i++) {\n const primaryField = primaryFields[i];\n if (primaryField.type() === MEASURE) {\n const secondaryField = secondaryFields[counter++];\n const projArr = secondaryField ? [primaryField, secondaryField] : [primaryField];\n projections.push(projArr);\n } else {\n facets.push(primaryField);\n }\n }\n if (secondaryLen > counter) {\n for (let i = counter; i < secondaryLen; i++) {\n const secondaryField = secondaryFields[i];\n const projArr = [secondaryField];\n if (secondaryField.type() === MEASURE) {\n projections.push(projArr);\n } else {\n facets.push(secondaryField);\n }\n }\n }\n return {\n facets,\n projections\n };\n }\n\n /**\n *\n *\n * @return\n * @memberof PolarEncoder\n */\n setCommonDomain () {\n // No domain to be set\n return this;\n }\n\n /**\n *\n *\n * @return\n * @memberof PolarEncoder\n */\n static type () {\n return POLAR;\n }\n\n layers (...layers) {\n if (layers.length) {\n this._layers = layers[0];\n return this;\n }\n return this._layers;\n }\n\n /**\n *\n *\n * @param {*} datamodel\n * @param {*} config\n * @memberof PolarEncoder\n */\n fieldSanitizer (datamodel, config) {\n let sanitizedRows = [[], []];\n let sanitizedColumns = [[], []];\n const fields = super.fieldSanitizer(datamodel, config);\n const {\n layers\n } = config;\n const {\n rows,\n columns\n } = fields;\n const layer = layers[0];\n const encoding = layer.encoding;\n const radius = encoding && encoding.radius ? encoding.radius.field : null;\n const angle = encoding && encoding.angle ? encoding.angle.field : null;\n const sanitizedFields = [sanitizedRows, sanitizedColumns];\n\n [rows, columns].forEach((fieldType, typeIndex) => {\n fieldType.forEach((fieldSet, i) => fieldSet.forEach((field) => {\n if (field.toString() !== radius && field.toString() !== angle && field.type() !== MEASURE) {\n sanitizedFields[typeIndex][i].push(field);\n }\n }));\n });\n sanitizedColumns = [...new Set(sanitizedColumns)];\n sanitizedRows = [...new Set(sanitizedRows)];\n this.fieldInfo({ rows: sanitizedRows, columns: sanitizedColumns });\n return this.fieldInfo();\n }\n\n getRetinalFieldsDomain (dataModels, encoding, facetFields, groupBy) {\n let sizeField;\n let colorField;\n const fields = [];\n const layers = this.layers();\n const dataModel = dataModels.parentModel;\n const fieldsConfig = dataModel.getFieldsConfig();\n const domains = {};\n if (layers && layers[0]) {\n const layer = layers[0];\n const layerEncoding = layer.def.encoding || {};\n\n [RADIUS, ANGLE, SIZE, COLOR].forEach((encType) => {\n const field = layerEncoding[encType] ? layerEncoding[encType].field : '';\n const measureField = fieldsConfig[field] && fieldsConfig[field].def.type === MEASURE;\n if (encType === SIZE && measureField) {\n sizeField = field;\n }\n if (encType === COLOR) {\n colorField = field;\n }\n fieldsConfig[field] && !measureField && fields.push(field);\n });\n }\n\n if (sizeField) {\n domains[sizeField] = dataModel.groupBy(facetFields, {\n [sizeField]: 'sum'\n }).getFieldspace().fieldsObj()[sizeField].domain();\n }\n\n if (colorField) {\n const dm = dataModel.groupBy([...facetFields, ...fields], groupBy.measures);\n domains[colorField] = dm.getFieldspace().fieldsObj()[colorField].domain();\n }\n return domains;\n }\n /**\n *\n *\n * @param {*} fields\n * @param {*} userLayerConfig\n * @return\n * @memberof PolarEncoder\n */\n getLayerConfig (fields, userLayerConfig) {\n let layerConfig = [];\n const {\n columnFields,\n rowFields\n } = fields;\n const allFields = [...columnFields, ...rowFields];\n\n allFields.forEach(() => {\n const encoding = {};\n let config = {\n mark: ARC,\n def: {\n encoding\n }\n };\n if (userLayerConfig && userLayerConfig.length > 0) {\n config = mergeRecursive(config, userLayerConfig[0]);\n }\n layerConfig.push(config);\n });\n if (layerConfig.length === 0) {\n layerConfig = userLayerConfig;\n }\n\n this.layers(layerConfig);\n return layerConfig;\n }\n\n /**\n *\n *\n * @param {*} layerArray\n * @returns\n * @memberof PolarEncoder\n */\n serializeLayerConfig (layerArray) {\n const serializedLayers = [];\n\n layerArray.length && layerArray.forEach((layer) => {\n const def = layerFactory.getSerializedConf(layer.mark, layer);\n serializedLayers.push({\n mark: layer.mark,\n def\n });\n });\n return serializedLayers;\n }\n}\n","import { createRetinalAxis } from './encoder-helper';\nimport { COLOR, SHAPE, SIZE } from '../enums/constants';\nimport VisualEncoder from './visual-encoder';\n\n/**\n *\n *\n * @export\n * @class RetinalEncoder\n * @extends {VisualEncoder}\n */\nexport default class RetinalEncoder extends VisualEncoder {\n\n /**\n *\n *\n * @param {*} axesCreators\n * @return\n * @memberof RetinalEncoder\n */\n createAxis (axesCreators) {\n const { fieldsConfig, config } = axesCreators;\n const newAxes = {};\n\n [COLOR, SHAPE, SIZE].forEach((axisType) => {\n newAxes[`${axisType}`] = createRetinalAxis({ axisType, fieldsConfig }, config[axisType]);\n });\n return newAxes;\n }\n\n /**\n *\n *\n * @static\n * @return\n * @memberof RetinalEncoder\n */\n static type () {\n return 'retinal';\n }\n\n /**\n *\n *\n * @param {*} fields\n * @param {*} userLayerConfig\n * @return\n * @memberof RetinalEncoder\n */\n getLayerConfig (encodingConfigs, userLayerConfig) {\n const layerConfig = [];\n userLayerConfig.forEach((e) => {\n const config = e;\n [COLOR, SHAPE, SIZE].forEach((axis) => {\n if (encodingConfigs[axis] && encodingConfigs[axis].field) {\n const def = config.def;\n if (config.def instanceof Array) {\n def.forEach((conf) => {\n conf.encoding = conf.encoding || {};\n !conf.encoding[axis] && (conf.encoding[axis] = {});\n conf.encoding[axis].field = encodingConfigs[axis].field;\n });\n } else {\n def.encoding = def.encoding || {};\n !def.encoding[axis] && (def.encoding[axis] = {});\n def.encoding[axis].field = encodingConfigs[axis].field;\n }\n }\n });\n layerConfig.push(config);\n });\n return layerConfig;\n }\n\n /**\n *\n *\n * @param {*} context\n * @return\n * @memberof RetinalEncoder\n */\n setCommonDomain (context) {\n const { domains, axes, encoding } = context;\n\n Object.entries(encoding).forEach((enc) => {\n if (enc[1] && enc[1].field) {\n const encType = enc[0];\n const field = enc[1].field;\n\n if (field) {\n axes[encType].forEach((axis) => {\n const domain = domains[field];\n !enc[1].domain && axis.updateDomain(domain);\n });\n }\n }\n });\n return axes;\n }\n}\n","import { Store, dataSelect, FieldType } from 'muze-utils';\nimport { DATA_UPDATE_COUNTER } from '../enums/defaults';\nimport { Variable } from '../variable';\nimport { PolarEncoder, CartesianEncoder } from '../encoder';\nimport {\n DIMENSION,\n MEASURE,\n ORDINAL,\n LINEAR,\n ROW,\n COLUMN,\n COL,\n LEFT,\n RIGHT,\n TOP,\n BOTTOM,\n COLOR,\n SIZE,\n TEMPORAL,\n SHAPE,\n INTERACTION,\n GRID_LINES,\n GRID_BANDS,\n HEADER,\n FACET,\n X,\n Y,\n POLAR\n} from '../enums/constants';\n\n/**\n * Creates an instance of a store which contains the arguments to make the class reactive\n *\n * @return {Object} instance of store\n * @memberof VisualGroup\n */\nexport const initStore = () => new Store({\n [DATA_UPDATE_COUNTER]: DATA_UPDATE_COUNTER\n});\n\n/**\n *\n *\n * @param {*} arr\n */\nexport const isDistributionEqual = arr => [...arr[0], ...arr[1]].reduce((isEqual, row) => {\n const rowType = row.type();\n\n if (rowType === MEASURE || rowType === TEMPORAL) {\n isEqual = true;\n }\n return isEqual;\n}, false);\n\n/**\n *\n *\n */\nexport const initializeCacheMaps = () => ({\n cellMap: new Map(),\n xAxesMap: new Map(),\n yAxesMap: new Map(),\n entryCellMap: new Map(),\n exitCellMap: new Map()\n});\n\n/**\n *\n *\n * @param {*} axisName\n * @param {*} id\n */\nexport const getAxisKey = (axisName, id, scaleType) => `${axisName}-axis-${id}-${scaleType}`;\n\n/**\n *\n *\n * @param {*} rowId\n * @param {*} columnId\n */\nexport const getCellKey = (rowId, columnId) => `cell-${rowId}-${columnId}`;\n\n/**\n *\n *\n * @param {*} config\n * @return\n */\nexport const extractUnitConfig = (config) => {\n const unitConfig = {};\n const attrNames = [INTERACTION, GRID_LINES, GRID_BANDS];\n\n attrNames.forEach((attr) => {\n if (config[attr] !== undefined) {\n unitConfig[attr] = config[attr];\n }\n });\n return unitConfig;\n};\n\n/**\n *\n *\n * @param {*} headers\n * @param {*} index\n * @param {*} rowLength\n * @return\n * @memberof MatrixResolver\n */\nexport const getHeaderText = (headers, index, rowLength) => {\n let header = '';\n\n if (index === rowLength - 1 && headers.length > rowLength) {\n for (let i = index; i < headers.length - 1; i++) {\n header += `${headers[i].toString()} / `;\n }\n header += headers[headers.length - 1].toString();\n return header;\n } else if (headers[index]) {\n return headers[index].toString();\n }\n return '';\n};\n\n/**\n *\n *\n * @param {*} fields\n * @param {*} fieldHeaders\n * @param {*} TextCell\n * @param {*} labelManager\n * @return\n */\nexport const headerCreator = (fields, fieldHeaders, TextCell, labelManager) => {\n const headers = fields.length > 0 ? fields[0].map((label, i) => new TextCell({ type: HEADER }, { labelManager })\n .source(getHeaderText(fieldHeaders, i, fields[0].length))) : [];\n return headers;\n};\n\n/**\n *\n *\n * @param {*} variable\n * @param {*} allFields\n * @return\n */\nexport const findInGroup = (variable, allFields) => {\n let channel = null;\n\n [COLOR, SIZE, SHAPE].forEach((e) => {\n if (this.store.get(e) && variable === this.store.get(e)[0]) {\n channel = e;\n }\n });\n\n if (channel) {\n return { channel };\n }\n [ROW, COL].forEach((facetType) => {\n allFields[`${facetType}Facets`].forEach((e) => {\n if (e.toString() === variable) {\n channel = { channel: FACET, type: facetType === COL ? COLUMN : ROW };\n }\n });\n });\n\n if (channel) {\n return channel;\n }\n\n [ROW, COL].forEach((projType) => {\n allFields[`${projType}Projections`].forEach((e) => {\n e.forEach((m) => {\n if (m.toString() === variable) {\n channel = projType === COL ? X : Y;\n }\n });\n });\n });\n\n if (channel) {\n return { channel };\n }\n return null;\n};\n\n/**\n *\n *\n * @param {*} datamodel\n * @param {*} field\n */\nexport const getAxisType = (fieldsConfig, field) => {\n let fieldType = ORDINAL;\n\n if (field && fieldsConfig[field].def.type !== DIMENSION) {\n fieldType = LINEAR;\n }\n return fieldType;\n};\n\n/**\n *\n *\n * @param {*} datamodel\n * @param {*} fieldName\n * @return\n */\nexport const retriveDomainFromData = (datamodel, fieldName) => {\n const field = datamodel.getFieldspace().fields.find(d => d._ref.name === fieldName.toString());\n return field.domain();\n};\n\n/**\n *\n *\n * @memberof MatrixResolver\n */\nexport const mutateAxesFromMap = (cacheMaps, axes) => {\n let xAxes = null;\n let yAxes = null;\n const {\n xAxesMap,\n yAxesMap\n } = cacheMaps;\n const {\n x: xAxisSet,\n y: yAxisSet\n } = axes;\n\n xAxisSet && xAxisSet.forEach((axisId) => {\n const xAxis = xAxesMap.get(axisId);\n xAxes = xAxes || [];\n xAxes.push(xAxis);\n });\n\n yAxisSet && yAxisSet.forEach((axisId) => {\n const yAxis = yAxesMap.get(axisId);\n yAxes = yAxes || [];\n yAxes.push(yAxis);\n });\n\n return {\n xAxes, yAxes\n };\n};\n\n/**\n *\n *\n * @param {*} layers\n * @return\n */\nexport const getEncoder = (layers) => {\n let encoder = new CartesianEncoder();\n\n if (layers) {\n // Figuring out the kind of layers the group will have\n encoder = layers.every(e => e.mark === 'arc') ? new PolarEncoder() : encoder;\n }\n return encoder;\n};\n\n/**\n *\n *\n * @param {*} type\n * @param {*} fields\n * @param {*} userAxisFromConfig\n * @return\n */\nexport const getHeaderAxisFrom = (type, fields, userAxisFromConfig) => {\n let axisFrom = userAxisFromConfig[type];\n let headerFrom = '';\n const options = type === ROW ? [LEFT, RIGHT] : [BOTTOM, TOP];\n const [firstField, secondField] = fields;\n const firstFieldType = i => (firstField.length ? firstField[i].type() : null);\n const secondFieldType = i => (secondField.length ? secondField[i].type() : null);\n\n if (firstFieldType(firstField.length - 1) === DIMENSION && secondFieldType(0) === DIMENSION) {\n headerFrom = axisFrom ? options[1 - options.indexOf(axisFrom)] : options[1];\n\n if (type === COLUMN && (firstField[firstField.length - 1].toString() === secondField[0].toString())) {\n axisFrom = TOP;\n } else {\n axisFrom = axisFrom || options[0];\n }\n } else if (secondFieldType(secondField.length - 1) === DIMENSION) {\n headerFrom = type === ROW ? RIGHT : BOTTOM;\n axisFrom = type === ROW ? RIGHT : BOTTOM;\n } else {\n headerFrom = type === ROW ? LEFT : TOP;\n axisFrom = type === ROW ? LEFT : TOP;\n }\n if (firstFieldType(firstField.length - 1) === MEASURE && secondFieldType(0) === MEASURE) {\n axisFrom = type === ROW ? LEFT : TOP;\n } else if (secondFieldType(0) === MEASURE) {\n axisFrom = type === ROW ? RIGHT : BOTTOM;\n } else if (firstFieldType(firstField.length - 1) === MEASURE) {\n axisFrom = type === ROW ? LEFT : TOP;\n }\n return [headerFrom, axisFrom];\n};\n\n/**\n *\n *\n * @param {*} type\n * @param {*} fields\n * @param {*} layers\n * @return\n * @memberof MatrixResolver\n */\nexport const setFacetsAndProjections = (context, fieldInfo, encoder) => {\n const {\n fields,\n type\n } = fieldInfo;\n const { facets, projections } = encoder.simpleEncoder.getFacetsAndProjections(fields, type);\n\n context.facets({ [`${type}Facets`]: facets });\n context.projections({ [`${type}Projections`]: projections });\n\n return { facets, projections, fields };\n};\n\n/**\n * Creates a selection set from a data set with corresponding attributes\n *\n * @export\n * @param {Selection} sel contains previous selection\n * @param {Object} appendObj Object to be appended\n * @param {Array} data Data based on which the selection is entered/updated/removed\n * @param {Object} [attrs={}] Attributes to be set on the data\n * @return {Selection} Merged selection\n */\nexport const createSelection = (sel, appendObj, data, idFn) => {\n let selection = sel || dataSelect([]);\n\n selection = selection.data(data, idFn);\n\n const enter = selection.enter().append(appendObj);\n const mergedSelection = enter.merge(selection);\n\n selection.exit() && selection.exit().remove();\n return mergedSelection;\n};\n\nconst getRowBorders = (left, right) => {\n const borders = {};\n borders.top = false;\n borders.bottom = false;\n if (left.length > 1 || right.length > 1) {\n borders.top = true;\n borders.bottom = true;\n }\n return borders;\n};\n\nconst getColumnsBorders = (top, bottom) => {\n const borders = {};\n borders.left = false;\n borders.right = false;\n if (top.length || bottom.length) {\n if ((top[0] && top[0].length > 1) || (bottom[0] && bottom[0].length > 1)) {\n borders.left = true;\n borders.right = true;\n }\n }\n return borders;\n};\n\nconst getValueBorders = (rows, columns) => {\n const borders = { top: true, left: true, bottom: true, right: true };\n const borderTypeRow = [LEFT, RIGHT];\n const borderTypeCol = [TOP, BOTTOM];\n rows.forEach((e, i) => {\n if (e[0] && e[0].length) {\n borders[borderTypeRow[i]] = true;\n } else {\n borders[borderTypeRow[i]] = false;\n }\n });\n columns.forEach((e, i) => {\n if (e.length) {\n borders[borderTypeCol[i]] = true;\n } else {\n borders[borderTypeCol[i]] = false;\n }\n });\n\n return borders;\n};\n\nexport const getBorders = (matrices, encoder) => {\n let showRowBorders = { top: false, bottom: false };\n let showColBorders = { left: false, right: false };\n let showValueBorders = { top: false, bottom: false, left: false, right: false };\n const {\n rows,\n columns,\n values: valueMatrix\n } = matrices;\n const [leftRows, rightRows] = rows;\n const [topColumns, bottomColumns] = columns;\n const {\n rowDimensions,\n columnDimensions,\n rowTemporalFields,\n columnTemporalFields,\n columnMeasures,\n rowMeasures\n } = encoder.fieldInfo();\n const allDimensionLength = rowDimensions.length + columnDimensions.length;\n const allMeasuresLength = rowMeasures.length + columnMeasures.length;\n const allTemporalFieldsLength = rowTemporalFields.length + columnTemporalFields.length;\n\n if (encoder.constructor.type() === POLAR) {\n if (!allDimensionLength) {\n return { showRowBorders, showColBorders, showValueBorders };\n }\n } else if (!allMeasuresLength && !allTemporalFieldsLength && allDimensionLength <= 2) {\n return { showRowBorders, showColBorders, showValueBorders };\n }\n\n showRowBorders = getRowBorders(leftRows, rightRows);\n showColBorders = getColumnsBorders(topColumns, bottomColumns);\n showValueBorders = getValueBorders([leftRows, rightRows], [topColumns, bottomColumns]);\n\n if (valueMatrix.length > 1) {\n showValueBorders.top = true;\n showValueBorders.bottom = true;\n }\n if (valueMatrix.length && valueMatrix[0].length > 1) {\n showValueBorders.left = true;\n showValueBorders.right = true;\n }\n return { showRowBorders, showColBorders, showValueBorders };\n};\n\nexport const getFieldsFromSuppliedLayers = (suppliedLayerConfig, fieldsConfig) => {\n let fields = [];\n const encodingArr = suppliedLayerConfig.map(conf => (conf.encoding || {}));\n fields = [...fields, [].concat(...encodingArr.map(enc => Object.values(enc).map(d => d.field)))];\n fields = fields.filter(field => fieldsConfig[field] && fieldsConfig[field].def.type === FieldType.DIMENSION);\n return fields;\n};\n\nexport const extractFields = (facetsAndProjections, layerFields) => {\n const fields = Object.values(facetsAndProjections).map((arr) => {\n const flattenArray = [].concat(...arr);\n return [].concat(...flattenArray.map((field) => {\n if (field instanceof Variable) {\n return field.getMembers();\n }\n return field;\n }));\n });\n return [].concat(...fields, ...layerFields);\n};\n","/**\n * This file exports variables that are used as defaults for the crosstab group.\n */\nexport const DATA_UPDATE_COUNTER = 0;\n\nexport const DEFAULT_LAYER_TYPE = 'cartesian';\n\n","import Selection from './selection';\n/**\n * This function applies a selection operation on a data array.\n *\n * @export\n * @param {Array} [data=[]] The data array to be observed.\n * @return {Selection} Instance of a selection.\n */\nexport default function dataSelect (data = []) {\n return new Selection(data);\n}\n\n","import { BEHAVIOURS, ACTIONS } from '@chartshq/muze-firebolt';\n\nexport const actionBehaviourMap = {\n [ACTIONS.DRAG]: {\n behaviours: [BEHAVIOURS.BRUSH],\n touch: false\n },\n [ACTIONS.HOVER]: {\n behaviours: [BEHAVIOURS.HIGHLIGHT]\n },\n [ACTIONS.LONGTOUCH]: {\n behaviours: [BEHAVIOURS.SELECT],\n touch: true\n },\n [ACTIONS.TOUCHDRAG]: {\n behaviours: [BEHAVIOURS.BRUSH],\n touch: true\n },\n [ACTIONS.CLICK]: {\n behaviours: [BEHAVIOURS.SELECT],\n touch: false\n }\n};\n\n","export const CONFIG = 'config';\nexport const DATA = 'data';\nexport const AXES = 'axes';\nexport const LAYERDEFS = 'layerDef';\nexport const WIDTH = 'width';\nexport const HEIGHT = 'height';\nexport const MOUNT = 'mount';\nexport const primaryXAxisUpdated = 'primaryXAxisUpdated';\nexport const primaryYAxisUpdated = 'primaryYAxisUpdated';\nexport const secondaryXAxisUpdated = 'secondaryXAxisUpdated';\nexport const secondaryYAxisUpdated = 'secondaryYAxisUpdated';\nexport const TRANSFORM = 'transform';\nexport const DATADOMAIN = 'dataDomain';\nexport const LAYERSCREATED = 'layersCreated';\nexport const FIELDS = 'fields';\nexport const TIMEDIFFS = 'timeDiffs';\nexport const LAYERAXISINDEX = 'layerAxisIndex';\n\n","import { FieldType, getDependencyOrder, getObjProp,\n defaultValue, objectIterator, unionDomain, makeElement,\n DimensionSubtype, getClosestIndexOf, toArray } from 'muze-utils';\nimport { layerFactory } from '@chartshq/visual-layer';\nimport { TIMEDIFFS } from '../enums/reactive-props';\n\nexport const getDimensionMeasureMap = (layers, fieldsConfig) => {\n const retinalEncodingsAndMeasures = {};\n\n layers.forEach((layer) => {\n const {\n colorField,\n sizeField,\n shapeField,\n xField,\n yField\n } = layer.encodingFieldsInf();\n const measures = [xField, yField].filter(field => fieldsConfig[field] && fieldsConfig[field].def.type ===\n FieldType.MEASURE);\n [colorField, sizeField, shapeField].forEach((field) => {\n if (fieldsConfig[field] && fieldsConfig[field].def.type === FieldType.DIMENSION) {\n !retinalEncodingsAndMeasures[field] && (retinalEncodingsAndMeasures[field] = []);\n retinalEncodingsAndMeasures[field].push(...measures);\n }\n });\n });\n\n for (const key in retinalEncodingsAndMeasures) {\n if ({}.hasOwnProperty.call(retinalEncodingsAndMeasures, key)) {\n retinalEncodingsAndMeasures[key] = [...new Set(retinalEncodingsAndMeasures[key])];\n }\n }\n return retinalEncodingsAndMeasures;\n};\n\nexport const transformDataModels = (transform, dataModel) => {\n const dataModels = {};\n for (const key in transform) {\n if ({}.hasOwnProperty.call(transform, key)) {\n const transformVal = transform[key];\n dataModels[key] = transformVal(dataModel);\n }\n }\n\n return dataModels;\n};\n\nexport const getLayerFromDef = (context, definition, existingLayer) => {\n let instances = existingLayer;\n const dependencies = context._layerDeps;\n if (!existingLayer) {\n instances = layerFactory.getLayerInstance(definition);\n }\n const layers = {};\n const instanceArr = toArray(instances);\n definition = toArray(definition);\n definition.reduce((acc, def, idx) => {\n const instance = instanceArr[idx];\n instance.config(def);\n instance.dependencies(dependencies);\n if (def.name) {\n instance.alias(def.name);\n }\n layers[instance.alias()] = instance;\n return acc;\n }, {});\n return layers;\n};\n\nexport const resolveEncodingTransform = (layerInst, store) => {\n const encodingTransform = layerInst.config().encodingTransform || {};\n const resolvable = encodingTransform.resolvable;\n let depArr = [];\n if (resolvable) {\n const resolved = resolvable(store);\n depArr = resolved.depArr;\n layerInst.encodingTransform(resolved.fn);\n } else if (encodingTransform instanceof Function) {\n layerInst.encodingTransform(encodingTransform);\n }\n return depArr;\n};\n\nexport const createLayers = (context, layerDefinitions) => {\n const layersMap = context._layersMap;\n const markSet = {};\n const store = {\n layers: {},\n components: {\n unit: context\n }\n };\n let layerIndex = 0;\n let layers = layerDefinitions.sort((a, b) => a.order - b.order).reduce((layersArr, layerDef, i) => {\n const mark = layerDef.mark;\n const definition = layerDef.def;\n const markId = `${mark}-${i}`;\n const defArr = toArray(definition);\n defArr.forEach((def) => {\n def.order = layerDef.order + layerIndex;\n });\n layerIndex += defArr.length;\n const instances = getLayerFromDef(context, definition, layersMap[markId]);\n store.layers = Object.assign(store.layers, instances);\n const instanceValues = Object.values(instances);\n layersArr = layersArr.concat(...instanceValues);\n layersMap[markId] = instanceValues;\n markSet[markId] = markId;\n return layersArr;\n }, []);\n store.unit = context;\n const layerdeps = {};\n layers.forEach((layer) => {\n const depArr = resolveEncodingTransform(layer, store);\n layerdeps[layer.alias()] = depArr;\n });\n\n const order = getDependencyOrder(layerdeps);\n layers = order.map(name => store.layers[name]);\n for (const key in layersMap) {\n if (!(key in markSet)) {\n layersMap[key].forEach(layer => layer.remove());\n delete layersMap[key];\n }\n }\n return layers;\n};\n\nexport const attachDataToLayers = (layers, dm, transformedDataModels) => {\n layers.forEach((layer) => {\n const dataSource = layer.config().source;\n const dataModel = dataSource instanceof Function ? dataSource(dm) : (transformedDataModels[dataSource] || dm);\n layer.data(dataModel);\n });\n};\n\nexport const attachAxisToLayers = (axes, layers, layerAxisIndex) => {\n layers.forEach((layer) => {\n const layerId = layer.id();\n const axesObj = {};\n\n objectIterator(axes, (key) => {\n const axisInf = layerAxisIndex[layerId];\n if (axisInf) {\n axes[key] && (axesObj[key] = axes[key][axisInf[key] || 0]);\n }\n });\n Object.keys(axesObj).length && layer.axes(axesObj);\n });\n};\n\nexport const getLayerAxisIndex = (layers, fields) => {\n const layerAxisIndex = {};\n layers.forEach((layer) => {\n const { axis, encoding } = layer.config();\n const id = layer.id();\n ['x', 'y'].forEach((type) => {\n let index;\n const field = defaultValue(getObjProp(axis, type), encoding[type] && encoding[type].field);\n if (fields[type]) {\n index = fields[type].findIndex(fieldInst => fieldInst.getMembers().indexOf(field) !== -1);\n } else {\n index = 0;\n }\n !layerAxisIndex[id] && (layerAxisIndex[id] = {});\n layerAxisIndex[id][type] = index;\n });\n });\n return layerAxisIndex;\n};\n\nexport const unionDomainFromLayers = (layers, axisFields, layerAxisIndex, fieldsConfig) => {\n let domains = {};\n layers = layers.filter(layer => layer.getDataDomain() !== null);\n layers.forEach((layer) => {\n let domainValues = {};\n const config = layer.config();\n const encoding = config.encoding;\n const layerDomain = layer.getDataDomain();\n const layerId = layer.id();\n\n if (layerDomain !== null && config.calculateDomain !== false) {\n domainValues = Object.entries(layerDomain);\n if (layerDomain.x || layerDomain.y) {\n domains = domainValues.reduce((fieldDomain, domain) => {\n const encodingType = domain[0];\n const field = encoding[encodingType].field;\n const axisIndex = layerAxisIndex[layerId][encodingType];\n const fieldStr = `${axisFields[encodingType][axisIndex]}`;\n fieldDomain[fieldStr] = fieldDomain[fieldStr] || [];\n fieldDomain[fieldStr] = unionDomain(([fieldDomain[fieldStr], domain[1]]),\n fieldsConfig[field].def.subtype ? fieldsConfig[field].def.subtype :\n fieldsConfig[field].def.type);\n\n return fieldDomain;\n }, domains);\n } else { domains = domainValues; }\n }\n });\n return domains;\n};\n\nexport const renderLayers = (context, container, layers, measurement) => {\n context._lifeCycleManager.notify({ client: layers, action: 'beforedraw', formalName: 'layer' });\n const config = context.config();\n const classPrefix = config.classPrefix;\n const orderedLayers = context.layers().sort((a, b) => a.config().order - b.config().order);\n const layerParentGroup = makeElement(container, 'g', [1], `${classPrefix}-layer-group`);\n makeElement(layerParentGroup, 'g', orderedLayers, null, {\n update: (group, layer) => {\n layer.measurement(measurement);\n layer.dataProps({\n timeDiffs: context.store().get(TIMEDIFFS)\n });\n layer.config().render !== false && layer.mount(group.node());\n }\n });\n return this;\n};\n\nexport const getNearestDimensionalValue = (context, position) => {\n const fields = context.fields();\n if (!fields.x.length || !fields.y.length) {\n return null;\n }\n const data = context.data();\n const axes = context.axes();\n const fieldsConfig = data.getFieldsConfig();\n const xField = getObjProp(fields, 'x', 0).getMembers()[0];\n const yField = getObjProp(fields, 'y', 0).getMembers()[0];\n const xFieldType = fieldsConfig[xField] && (fieldsConfig[xField].def.subtype ? fieldsConfig[xField].def.subtype :\n fieldsConfig[xField].def.type);\n const yFieldType = fieldsConfig[yField] && (fieldsConfig[yField].def.subtype ? fieldsConfig[yField].def.subtype :\n fieldsConfig[yField].def.type);\n\n const entryVal = [['x', xFieldType, xField], ['y', yFieldType, yField]].find(entry =>\n entry[1] === DimensionSubtype.CATEGORICAL || entry[1] === DimensionSubtype.TEMPORAL);\n\n if (!entryVal || (xFieldType !== FieldType.MEASURE && yFieldType !== FieldType.MEASURE)) {\n return null;\n }\n const field = entryVal[2];\n const index = fieldsConfig[field].index;\n let key = axes[entryVal[0]][0].invert(position[entryVal[0]]);\n if (entryVal[1] === DimensionSubtype.TEMPORAL) {\n const filterData = [...new Set(data.getData().data.map(d => d[index]))];\n key = filterData[getClosestIndexOf(filterData, key)];\n }\n\n return key !== undefined ? [[field], [key]] : null;\n};\n\nexport const getLayersBy = (layers, searchBy, value) => layers.filter((layer) => {\n const name = searchBy === 'type' ? layer.constructor.formalName() : layer.alias();\n return name === value;\n});\n\nexport const removeLayersBy = (layers, searchBy, value) => {\n layers.filter((inst) => {\n const name = searchBy === 'type' ? inst.config().mark : inst.alias();\n if (name === value) {\n inst.remove();\n return false;\n }\n return true;\n });\n};\n\nexport const createSideEffectGroup = (container, className) => makeElement(container, 'g', [1], className).node();\n\nexport const getAdjustedDomain = (max, min) => {\n const y1ratio = max[0] / (max[0] - min[0]);\n const y2ratio = max[1] / (max[1] - min[1]);\n\n // adjust min/max values for positive negative values zero line etc\n let allSameSign = false;\n\n // if all numbers are positive set floor to zero\n if (min[0] > 0 && min[1] > 0 && min[1] > 0 && max[1] > 0) {\n allSameSign = true;\n min[0] = 0;\n min[1] = 0;\n }\n\n // if all numbers are negative set ceiling to zero\n if (min[0] < 0 && min[1] < 0 && min[1] < 0 && max[1] < 0) {\n allSameSign = true;\n max[0] = 0;\n max[1] = 0;\n }\n\n // align zero line if necessary\n if (!allSameSign && y1ratio !== y2ratio) {\n if (y1ratio < y2ratio) {\n // adjust min[1]\n min[1] = min[0] / max[0] * max[1];\n } else {\n // adjust min[0]\n min[0] = min[1] / max[1] * max[0];\n }\n }\n return {\n max,\n min\n };\n};\n","import { getObjProp, defaultValue, makeElement, DimensionSubtype, DataModel } from 'muze-utils';\nimport { ScaleType } from '@chartshq/muze-axis';\nimport { layerFactory } from '@chartshq/visual-layer';\nimport { GRIDLINEPARENTGROUPCLASS, GRIDBANDPARENTGROUPCLASS } from '../enums/constants';\nimport { TIMEDIFFS } from '../enums/reactive-props';\n\nconst LINEAR = ScaleType.LINEAR;\n\nconst getLayerDefinition = (context, axes, type, orientation) => {\n let encoding;\n const config = context.config();\n const { classPrefix, gridLines, gridBands } = config;\n const gridLineColor = gridLines.color;\n const zeroLineColor = gridLines.zeroLineColor;\n const defClassName = type === 'band' ? gridBands.defClassName : gridLines.defClassName;\n const gridBandColor = gridBands[orientation].color;\n const axis = axes[orientation][0];\n const isLinearScale = axis.constructor.type() === LINEAR;\n\n if (type === 'band' && isLinearScale) {\n encoding = {\n [orientation]: `${orientation}value`,\n [`${orientation}0`]: `${orientation}value0`\n };\n } else {\n encoding = {\n [orientation]: isLinearScale ? `${orientation}value` : `${orientation}dim`\n };\n }\n encoding.color = {\n value: (data, i) => {\n const isNegativeDomain = isLinearScale && axis.domain()[0] < 0;\n if (type === 'band') {\n return gridBandColor[i % 2];\n }\n return isNegativeDomain && data[orientation] === 0 ? zeroLineColor : gridLineColor;\n }\n };\n\n return {\n definition: {\n defClassName: `${defClassName}-${orientation}`,\n className: config.className,\n individualClassName: (data, i) => {\n let className;\n const isNegativeDomain = isLinearScale && axis.domain()[0] < 0;\n if (isNegativeDomain && data.y === 0 && type !== 'band') {\n className = `${classPrefix}-axis-zero-line`;\n } else {\n className = `${classPrefix}-grid-${type}-${orientation}-${i % 2}`;\n }\n return className;\n },\n [`pad${orientation.toUpperCase()}`]: type === 'band' ? 0 : undefined,\n encoding\n },\n axes: {\n [orientation]: axis\n },\n interactive: false\n };\n};\n\nconst getDefaultVisibilty = (show, axis) => {\n if (axis.constructor.type() === LINEAR) {\n return show;\n }\n return false;\n};\n\nexport const getGridLayerDefinitions = (context, config, type) => ['x', 'y'].map((axisType) => {\n const show = defaultValue(config[axisType] && config[axisType].show,\n getDefaultVisibilty(config.show, context.axes()[axisType][0]));\n\n return show ? getLayerDefinition(context, context.axes(), type, axisType) : undefined;\n}).filter(d => d !== undefined);\n\nexport const getGridLayerData = (axes, fields, fieldsConfig) => {\n const gridData = {};\n ['x', 'y'].forEach((type) => {\n let ticks = axes[type][0].getTickValues();\n const subtype = getObjProp(fieldsConfig, getObjProp(fields, type, 0).getMembers()[0], 'def', 'subtype');\n const jsonData = [];\n const schema = [\n {\n name: 'yvalue',\n type: 'measure'\n }, {\n name: 'xvalue',\n type: 'measure'\n },\n {\n name: 'yvalue0',\n type: 'measure'\n }, {\n name: 'xvalue0',\n type: 'measure'\n }, {\n name: 'xdim',\n type: 'dimension',\n subtype\n }, {\n name: 'ydim',\n type: 'dimension',\n subtype\n }\n ];\n const len = Math.max(ticks.length);\n ticks = subtype === DimensionSubtype.TEMPORAL ? ticks.map(d => d.getTime()) : ticks;\n for (let i = 0; i < len; i += 1) {\n jsonData.push({\n [`${type}value`]: ticks[i],\n [`${type}value0`]: ticks[i + 1],\n [`${type}dim`]: ticks[i],\n [`${type}dim`]: ticks[i]\n });\n }\n gridData[type] = new DataModel(jsonData, schema);\n });\n return gridData;\n};\n\nexport const createGridLineLayer = (context, data) => {\n const vuConf = context.config();\n const dependencies = context._layerDeps;\n const measurement = {\n width: context.width(),\n height: context.height()\n };\n\n ['band', 'line'].forEach((type) => {\n let mark;\n let config;\n let instances;\n if (type === 'band') {\n mark = 'bar';\n config = vuConf.gridBands;\n instances = context._gridbands;\n } else {\n mark = 'tick';\n config = vuConf.gridLines;\n instances = context._gridlines;\n }\n const definitions = getGridLayerDefinitions(context, config, type);\n\n definitions.forEach((atomicDef, i) => {\n let layer;\n const definition = atomicDef.definition;\n const axesObj = atomicDef.axes;\n const sConf = layerFactory.getSerializedConf(mark, definition);\n sConf.mark = mark;\n if (!instances[i]) {\n layer = layerFactory.getLayerInstance(sConf);\n layer.dependencies(dependencies);\n } else {\n layer = instances[i];\n }\n\n layer.config(sConf)\n .measurement(measurement)\n .data(axesObj.y ? data.y : data.x)\n .dataProps({\n timeDiffs: context.store().get(TIMEDIFFS)\n })\n .axes(axesObj);\n instances[i] = layer;\n });\n });\n};\n\nexport const renderGridLineLayers = (context, container) => {\n const axes = context.axes();\n const config = context.config();\n const classPrefix = config.classPrefix;\n\n if (axes && ((axes.x && axes.x.length) || (axes.y && axes.y.length))) {\n const gridBandData = getGridLayerData(axes, context.fields(), context.data().getFieldsConfig());\n createGridLineLayer(context, gridBandData);\n [[context._gridlines, `${classPrefix}-${GRIDLINEPARENTGROUPCLASS}`],\n [context._gridbands, `${classPrefix}-${GRIDBANDPARENTGROUPCLASS}`]].forEach((entry) => {\n const [instances, parentGroupClass] = entry;\n const mountPoint = makeElement(container, 'g', [1], `.${parentGroupClass}`);\n const className = `${parentGroupClass}-group`;\n makeElement(mountPoint, 'g', instances, `.${className}`, {\n update: (group, instance) => {\n instance.mount(group.node());\n }\n });\n });\n }\n};\n","import { CLASSPREFIX, CONSOLIDATED } from './enums/constants';\n\n/**\n * Returns the default configuration of the visual unit\n * @return {Object} Default configuration of visual unit\n */\nexport const defaultConfig = {\n classPrefix: CLASSPREFIX,\n defClassName: 'visual-unit',\n className: '',\n trackerClassName: 'visual-unit-tracker',\n gridLines: {\n defClassName: 'axis-grid-lines',\n className: '',\n show: true,\n color: '#efefef',\n zeroLineColor: '#b6b6b6'\n },\n gridBands: {\n defClassName: 'axis-grid-bands',\n className: '',\n show: false,\n y: {\n color: ['#fff', '#fbfbfb']\n },\n x: {\n color: ['#fff', '#f9f9f9']\n }\n },\n arcLayerClassName: 'layer-arc',\n interaction: {\n tooltip: {\n mode: CONSOLIDATED\n }\n },\n sideEffectClassName: 'side-effect-container'\n};\n","export const CLASSPREFIX = 'muze';\nexport const IDFIELD = '__id__';\nexport const GRIDLINEPARENTGROUPCLASS = 'grid-lines';\nexport const GRIDBANDPARENTGROUPCLASS = 'grid-bands';\nexport const CONSOLIDATED = 'consolidated';\nexport const FRAGMENTED = 'fragmented';\nexport const FACET_BY_FIELDS = 'facetByFields';\nexport const RETINAL_FIELDS = 'retinalFields';\nexport const PARENT_ALIAS = 'parentAlias';\nexport const LAYERS = 'layers';\nexport const CACHED_DATA = 'cachedData';\nexport const STORE = 'store';\n\n","import { mergeRecursive } from 'muze-utils';\nimport { defaultConfig } from './default-config';\nimport { CONFIG, LAYERDEFS, AXES, WIDTH, HEIGHT, MOUNT, TRANSFORM, FIELDS, DATA } from './enums/reactive-props';\n\nexport default {\n [CONFIG]: {\n value: null,\n meta: {\n sanitization: (config, oldConfig) => (\n mergeRecursive(oldConfig || mergeRecursive({}, defaultConfig), config)\n )\n }\n },\n [LAYERDEFS]: {\n value: null\n },\n [AXES]: {\n value: null,\n meta: {\n sanitization: (axes, prevAxes) => Object.assign(prevAxes || {}, axes)\n }\n },\n [WIDTH]: {\n value: null\n },\n [HEIGHT]: {\n value: null\n },\n [MOUNT]: {\n value: null\n },\n [TRANSFORM]: {\n value: null\n },\n [FIELDS]: {\n value: null\n },\n [DATA]: {\n value: null,\n meta: {\n preset: (data, context) => {\n if (context._cache) {\n const cachedData = context.cachedData();\n context.cachedData([...cachedData, data]);\n } else {\n const oldData = context.data();\n oldData && oldData.unsubscribe('propagation');\n context.cachedData([data]);\n }\n }\n }\n }\n};\n","import { DimensionSubtype } from 'muze-utils';\nimport * as PROPS from './enums/reactive-props';\nimport {\n transformDataModels,\n getDimensionMeasureMap,\n createLayers,\n attachDataToLayers,\n attachAxisToLayers,\n unionDomainFromLayers,\n getLayerAxisIndex\n} from './helper';\n\nconst axisMap = {\n 0: 'primary',\n 1: 'secondary'\n};\nconst axisProps = [PROPS.primaryXAxisUpdated, PROPS.secondaryXAxisUpdated, PROPS.primaryYAxisUpdated,\n PROPS.secondaryYAxisUpdated];\n\nexport const listenerMap = context => ([\n {\n type: 'registerImmediateListener',\n props: [PROPS.AXES],\n listener: ([, axes]) => {\n ['x', 'y'].forEach((type) => {\n const axesArr = axes[type] || [];\n axesArr.forEach((axis, i) => {\n axis.on('update', () => {\n context.store().commit(PROPS[`${axisMap[i]}${axis.isReverse() ? 'Y' : 'X'}AxisUpdated`], true);\n });\n });\n });\n }\n },\n {\n type: 'registerImmediateListener',\n props: [PROPS.CONFIG],\n listener: ([, config]) => {\n config && context.firebolt().config(config.interaction);\n }\n },\n {\n type: 'computed',\n props: [PROPS.LAYERSCREATED],\n listener: fetch => fetch(PROPS.LAYERDEFS, PROPS.FIELDS, (layerDefs, fields) => {\n const layerDefsValue = layerDefs.value;\n const fieldsVal = fields.value;\n if (layerDefsValue && fieldsVal) {\n const layers = createLayers(context, layerDefs.value);\n context.layers(layers);\n context._layerAxisIndex = getLayerAxisIndex(context.layers(), fieldsVal);\n context._lifeCycleManager.notify({ client: layers, action: 'initialized', formalName: 'layer' });\n return true;\n }\n return null;\n })\n },\n {\n type: 'computed',\n props: [PROPS.TIMEDIFFS],\n listener: fetch => fetch(PROPS.DATA, PROPS.FIELDS, PROPS.AXES, (data, fields, axes) => {\n const dataModel = data.value;\n const axisFields = fields.value;\n const axesObj = axes.value;\n if (dataModel && axisFields && axesObj) {\n const timeDiffs = {};\n const timeDiffsByField = {};\n ['x', 'y'].forEach((type) => {\n const field = axisFields[type][0];\n if (field && field.subtype() === DimensionSubtype.TEMPORAL) {\n timeDiffs[type] = field.getMinDiff();\n timeDiffsByField[field] = timeDiffs[type];\n axesObj[type].forEach(axis => axis.minDiff(timeDiffs[type]));\n }\n });\n context._timeDiffsByField = timeDiffsByField;\n return timeDiffs;\n }\n return null;\n })\n },\n {\n type: 'computed',\n props: [PROPS.DATADOMAIN],\n listener: fetch => fetch(PROPS.DATA, PROPS.LAYERSCREATED, PROPS.AXES, PROPS.TRANSFORM,\n (dataModel, layersCreated, axes, transform) => {\n const dataModelVal = dataModel.value;\n const layerAxisIndexVal = context._layerAxisIndex;\n const axesVal = axes.value;\n if (dataModelVal && layersCreated.value && axesVal && layerAxisIndexVal) {\n const layers = context.layers();\n const dataModels = transformDataModels(transform.value, dataModelVal);\n context._transformedDataModels = dataModels;\n context._lifeCycleManager.notify({ client: layers, action: 'beforeupdate', formalName: 'layer' });\n attachDataToLayers(layers, dataModelVal, context._transformedDataModels);\n context._dimensionMeasureMap = getDimensionMeasureMap(layers,\n dataModelVal.getFieldsConfig(), context.retinalFields());\n attachAxisToLayers(axesVal, layers, layerAxisIndexVal);\n context._lifeCycleManager.notify({ client: layers, action: 'updated', formalName: 'layer' });\n return unionDomainFromLayers(layers, context.fields(),\n layerAxisIndexVal, dataModelVal.getFieldsConfig());\n }\n return null;\n })\n },\n {\n type: 'registerImmediateListener',\n props: [PROPS.DATADOMAIN],\n listener: ([, dataDomain]) => {\n dataDomain !== null && context.updateAxisDomain(dataDomain);\n }\n },\n {\n type: 'registerChangeListener',\n props: [PROPS.MOUNT, PROPS.DATA, ...axisProps],\n listener: (mount, data) => {\n const container = mount[1];\n if (container && data[1]) {\n context.render(container);\n }\n }\n }\n]);\n","import { FACET_BY_FIELDS, RETINAL_FIELDS, PARENT_ALIAS, LAYERS, STORE, CACHED_DATA } from './enums/constants';\n\nexport const PROPS = {\n [FACET_BY_FIELDS]: {},\n [RETINAL_FIELDS]: {},\n [PARENT_ALIAS]: {},\n [LAYERS]: {},\n [STORE]: {},\n [CACHED_DATA]: {},\n detailFields: {}\n};\n","import { CommonProps } from 'muze-utils';\nimport { DATA, MOUNT } from '../enums/reactive-props';\n\nexport const clearActionHistory = (context) => {\n const actionHistory = context._actionHistory;\n for (const key in actionHistory) {\n if (actionHistory[key].isMutableAction) {\n delete context._actionHistory[key];\n }\n }\n};\n\nexport const dispatchQueuedSideEffects = (context) => {\n const queuedSideEffects = context._queuedSideEffects;\n Object.entries(queuedSideEffects).forEach((entry) => {\n const sideEffect = entry[1];\n context.dispatchSideEffect(sideEffect.name, ...sideEffect.params);\n });\n context._queuedSideEffects = {};\n};\n\nexport const registerListeners = (firebolt) => {\n const context = firebolt.context;\n const store = context.store();\n\n store.registerImmediateListener([DATA, MOUNT], (dataModel, mount) => {\n const dm = dataModel[1];\n\n if (dm && mount[1]) {\n const originalData = firebolt.context.cachedData()[0];\n firebolt.createSelectionSet(firebolt.context.data().getData().uids);\n firebolt.attachPropagationListener(originalData);\n }\n }, true);\n\n context._layerDeps.throwback.registerChangeListener([CommonProps.ON_LAYER_DRAW],\n ([, onlayerdraw]) => {\n if (onlayerdraw) {\n firebolt.initializeSideEffects();\n firebolt.config(context.config().interaction);\n firebolt.mapActionsAndBehaviour();\n dispatchQueuedSideEffects(firebolt);\n clearActionHistory(firebolt);\n }\n });\n};\n\n","import { DimensionSubtype } from 'muze-utils';\n\nconst getRangeFromData = (instance, selectionDataModel, propConfig) => {\n let criteria;\n const dataObj = selectionDataModel[0].getData();\n const propCriteria = propConfig.payload.criteria;\n const sourceIdentifiers = propConfig.sourceIdentifiers;\n const schema = dataObj.schema;\n const fieldMap = instance.data().getFieldsConfig();\n const data = dataObj.data;\n const isActionSourceSame = instance.id() === propConfig.sourceId;\n\n if (isActionSourceSame) {\n criteria = propCriteria;\n } else {\n criteria = (sourceIdentifiers !== null) ? schema.reduce((acc, obj, index) => {\n let range;\n const field = obj.name;\n const fieldObj = fieldMap[field];\n const type = fieldObj && (fieldObj.def.subtype ? fieldObj.def.subtype : fieldObj.def.type);\n const isDimension = type === DimensionSubtype.CATEGORICAL;\n\n if (!fieldObj) {\n return acc;\n }\n\n if (!isDimension) {\n range = [Math.min(...data.map(d => d[index])), Math.max(...data.map(d => d[index]))];\n } else {\n range = data.map(d => d[index]);\n }\n acc[field] = range;\n return acc;\n }, {}) : null;\n }\n return criteria;\n};\n\nexport const payloadGenerator = {\n brush: (instance, selectionDataModel, propConfig) => {\n const propPayload = propConfig.payload;\n const criteria = getRangeFromData(instance, selectionDataModel, propConfig);\n const payload = Object.assign({}, propPayload);\n payload.criteria = criteria;\n return payload;\n },\n\n __default: (instance, selectionDataModel, propConfig) => {\n const propPayload = propConfig.payload;\n const sourceIdentifiers = propConfig.sourceIdentifiers;\n const dataObj = selectionDataModel[0].getData();\n let schema = dataObj.schema;\n const payload = Object.assign({}, propPayload);\n schema = dataObj.schema;\n const data = dataObj.data;\n const sourceFields = schema.map(d => d.name);\n payload.criteria = !sourceIdentifiers && selectionDataModel[0].isEmpty() ? null :\n [sourceFields, ...data];\n payload.sourceFields = sourceIdentifiers ? sourceIdentifiers.getSchema().map(d => d.name) : [];\n return payload;\n }\n};\n\n","import { isSimpleObject, FieldType, DataModel } from 'muze-utils';\n\nconst getModelWithFacetData = (dm, data) => {\n const dataObj = dm.getData();\n const schema1 = dataObj.schema;\n const data1 = dataObj.data;\n const jsonData = [];\n const schema2 = data[0].map(d => ({\n name: `${d}`,\n type: FieldType.DIMENSION\n }));\n const data2 = data[1];\n\n data1.forEach((d) => {\n const tuple = {};\n schema1.forEach((obj, i) => {\n tuple[obj.name] = d[i];\n });\n schema2.forEach((obj, i) => {\n tuple[obj.name] = data2[i];\n });\n jsonData.push(tuple);\n });\n\n return new DataModel(jsonData, [...schema1, ...schema2]);\n};\n\nexport const propagateValues = (instance, action, config = {}) => {\n let propagationData;\n const payload = config.payload;\n const selectionSet = config.selectionSet;\n const propagationFieldInf = config.propagationFields[action] || {};\n const propagationFields = propagationFieldInf.fields || [];\n const append = propagationFieldInf.append;\n const criteria = payload.criteria;\n const context = instance.context;\n const dataModel = context.cachedData()[0];\n const sourceId = context.id();\n const sideEfffects = instance.sideEffects();\n const behaviourEffectMap = instance._behaviourEffectMap;\n const mergedModel = selectionSet.mergedEnter.model;\n const fieldsConfig = dataModel.getFieldsConfig();\n payload.sourceUnit = sourceId;\n payload.action = action;\n payload.sourceCanvas = context.parentAlias();\n const propagationBehaviourMap = instance._propagationBehaviourMap;\n const propagationBehaviour = propagationBehaviourMap[action] || action;\n\n let propFields = [];\n if (criteria === null) {\n propagationData = null;\n } else if (isSimpleObject(criteria)) {\n propFields = Object.keys(criteria || {});\n propagationData = mergedModel ? mergedModel.project(propFields) : null;\n } else {\n propFields = criteria[0];\n propagationData = mergedModel ? mergedModel.project(propFields) : null;\n }\n\n const facetByFields = context.facetByFields();\n if (propagationData !== null && propagationFields.length) {\n const fields = propagationData.getData().schema.map(d => d.name);\n propagationData = getModelWithFacetData(propagationData, facetByFields);\n propFields = append ? [...fields, ...propagationFields] : propagationFields;\n propagationData = propagationData.project(propFields);\n }\n\n let propagateInterpolatedValues = false;\n if (propFields.length && propFields.every(field => fieldsConfig[field] &&\n fieldsConfig[field].def.type === FieldType.MEASURE)) {\n propagateInterpolatedValues = true;\n }\n\n const groupId = context.parentAlias();\n payload.action = action;\n const behaviourInstance = instance._actions.behavioural[propagationBehaviour];\n const isMutableAction = behaviourInstance ? behaviourInstance.constructor.mutates() : false;\n\n const filterFn = (entry, propagationConf) => {\n const effects = behaviourEffectMap[entry.config.action];\n const mutates = entry.config.groupId ?\n effects.some(d => sideEfffects[d.name || d].constructor.mutates()) : true;\n return entry.config.groupId !== propagationConf.groupId && mutates;\n };\n\n const sourceBehaviour = instance._actions.behavioural[action];\n const mutates = sourceBehaviour ? sourceBehaviour.constructor.mutates() : false;\n let propConfig = {\n payload,\n action,\n criteria: propagationData,\n isMutableAction: mutates,\n propagateInterpolatedValues,\n groupId,\n sourceId: mutates ? groupId : sourceId,\n filterFn,\n enabled: (propConf, firebolt) => (action !== propagationBehaviour ?\n propConf.payload.sourceCanvas === firebolt.context.parentAlias() : true)\n };\n\n dataModel.propagate(propagationData, propConfig, true);\n\n if (action !== propagationBehaviour) {\n propConfig = {\n payload,\n sourceId: isMutableAction ? groupId : sourceId,\n criteria: propagationData,\n isMutableAction,\n propagateInterpolatedValues,\n action: propagationBehaviour,\n groupId,\n applyOnSource: action === propagationBehaviour,\n enabled: (propConf, firebolt) => propConf.payload.sourceCanvas !== firebolt.context.parentAlias(),\n filterFn\n };\n\n dataModel.propagate(propagationData, propConfig, true, {\n filterImmutableAction: (actionInf, propInf) => actionInf.groupId !== propInf.groupId\n });\n }\n};\n","import { FieldType } from 'muze-utils';\nimport { Firebolt, SpawnableSideEffect } from '@chartshq/muze-firebolt';\nimport { registerListeners } from './helper';\nimport { payloadGenerator } from './payload-generator';\nimport { propagateValues } from './data-propagator';\n\n/**\n * This class manages the interactions of visual unit. It associates physical actions with\n * behavioural actions. It also propagates the behavioural actions to other datamodels.\n */\nexport default class UnitFireBolt extends Firebolt {\n constructor (...params) {\n super(...params);\n registerListeners(this);\n }\n\n propagate (behaviour, payload, selectionSet, sideEffects) {\n propagateValues(this, behaviour, {\n payload,\n selectionSet,\n sideEffects,\n propagationFields: this._propagationFields\n });\n }\n\n getApplicableSideEffects (sideEffects, payload, propagationInf) {\n const context = this.context;\n const unitId = context.id();\n const aliasName = context.parentAlias();\n const propagationSourceCanvas = propagationInf.propPayload && propagationInf.propPayload.sourceCanvas;\n const sourceUnitId = propagationInf.propPayload && propagationInf.propPayload.sourceUnit;\n const sourceSideEffects = this._sourceSideEffects;\n const sideEffectInstances = this.sideEffects();\n const actionOnSource = sourceUnitId ? sourceUnitId === unitId : true;\n\n const applicableSideEffects = payload.sideEffects ? [{\n effects: payload.sideEffects,\n behaviours: [payload.action]\n }] : sideEffects;\n applicableSideEffects.forEach((d) => {\n let mappedEffects = d.effects;\n mappedEffects = mappedEffects.filter((se) => {\n const mutates = sideEffectInstances[se.name || se].constructor.mutates();\n if (mutates && propagationInf.isMutableAction === false) {\n return false;\n }\n if (!actionOnSource && payload.criteria !== null) {\n const sideEffectChecker = sourceSideEffects[se.name || se];\n return sideEffectChecker ? sideEffectChecker(propagationInf.propPayload, context) : true;\n }\n if (propagationSourceCanvas === aliasName || actionOnSource) {\n return se.applyOnSource !== false;\n }\n\n return true;\n });\n d.effects = mappedEffects;\n });\n return applicableSideEffects;\n }\n\n shouldApplySideEffects (propagate) {\n return propagate === false;\n }\n\n onDataModelPropagation () {\n return (data, config) => {\n let isSourceFieldPresent = true;\n let isMutableAction = false;\n const propPayload = config.payload;\n const sourceIdentifiers = config.sourceIdentifiers;\n const enabledFn = config.enabled;\n const action = config.action;\n const payloadFn = payloadGenerator[action] || payloadGenerator.__default;\n\n if (sourceIdentifiers) {\n const fieldsConfig = sourceIdentifiers.getFieldsConfig();\n const sourceIdentifierFields = Object.keys(fieldsConfig);\n const propFields = Object.keys(data[0].getFieldsConfig());\n if (!Object.values(fieldsConfig).some(d => d.def.type === FieldType.MEASURE)) {\n isSourceFieldPresent = sourceIdentifierFields.some(d => propFields.indexOf(d) !== -1);\n }\n }\n\n const payload = payloadFn(this.context, data, config);\n const sourceBehaviours = this._sourceBehaviours;\n const filterFn = sourceBehaviours[action] || sourceBehaviours['*'];\n let enabled = true;\n\n if (filterFn) {\n enabled = filterFn(propPayload || {}, this.context);\n }\n\n if (enabledFn) {\n enabled = enabledFn(config, this) && enabled !== false;\n }\n\n if (enabled) {\n const effects = this._behaviourEffectMap[action];\n const sideEffectInstances = this.sideEffects();\n isMutableAction = config.groupId ?\n effects.some(d => sideEffectInstances[d.name || d].constructor.mutates()) : config.isMutableAction;\n\n const propagationInf = {\n propagate: false,\n data,\n propPayload,\n sourceIdentifiers,\n persistent: false,\n isSourceFieldPresent,\n sourceId: config.propagationSourceId,\n isMutableAction: config.isMutableAction\n };\n\n this._actionHistory[action] = {\n payload,\n propagationInf,\n isMutableAction\n };\n this.dispatchBehaviour(action, payload, propagationInf);\n }\n };\n }\n\n initializeSideEffects () {\n super.initializeSideEffects();\n const sideEffects = this.sideEffects();\n for (const key in sideEffects) {\n if ({}.hasOwnProperty.call(sideEffects, key)) {\n sideEffects[key] instanceof SpawnableSideEffect && sideEffects[key].drawingContext(() => {\n const context = this.context;\n return context.getDrawingContext();\n });\n }\n }\n }\n\n prepareSelectionSets (behaviours) {\n const data = this.context.data();\n if (data) {\n this.createSelectionSet(data.getData().uids, behaviours);\n }\n return this;\n }\n\n remove () {\n this.context.cachedData()[0].unsubscribe('propagation');\n return this;\n }\n}\n","import { layerFactory } from '@chartshq/visual-layer';\nimport {\n setAttrs,\n CommonProps,\n getUniqueId,\n getQualifiedClassName,\n selectElement,\n transactor,\n Store,\n makeElement,\n registerListeners,\n generateGetterSetters,\n getDataModelFromIdentifiers,\n isSimpleObject,\n transposeArray,\n FieldType\n} from 'muze-utils';\nimport { physicalActions, sideEffects, behaviouralActions, behaviourEffectMap } from '@chartshq/muze-firebolt';\nimport { actionBehaviourMap } from './firebolt/action-behaviour-map';\nimport {\n renderLayers,\n getNearestDimensionalValue,\n removeLayersBy,\n getLayersBy,\n getLayerFromDef,\n attachAxisToLayers,\n getLayerAxisIndex,\n createSideEffectGroup,\n getAdjustedDomain,\n resolveEncodingTransform\n} from './helper';\nimport { renderGridLineLayers } from './helper/grid-lines';\nimport localOptions from './local-options';\nimport { listenerMap } from './listener-map';\nimport {\n primaryYAxisUpdated,\n primaryXAxisUpdated,\n secondaryXAxisUpdated,\n secondaryYAxisUpdated,\n DATADOMAIN,\n TIMEDIFFS\n} from './enums/reactive-props';\nimport { PROPS } from './props';\nimport UnitFireBolt from './firebolt';\nimport './styles.scss';\n\nconst FORMAL_NAME = 'unit';\n\n/**\n * @module VisualUnit\n * A hierarchical component of renderer which manages multiple layers. This logical\n * module is responsible for layouting layers, attach axis with them, resolving conflicts of layers.\n */\n\n/**\n * Basic unit implementaiton\n * @class VisualUnit\n */\nexport default class VisualUnit {\n\n /**\n * Creates instance of visualization unit\n * @param registry {Object} Component registry\n * @param dependencies {Object} Dependencies required by visual unit.\n */\n constructor (registry, dependencies) {\n this._id = getUniqueId();\n this._dependencies = dependencies;\n this._layerDeps = {\n throwback: new Store({\n onlayerdraw: false\n }),\n smartLabel: dependencies.smartLabel\n };\n this._renderedResolve = null;\n this._renderedPromise = new Promise((resolve) => {\n this._renderedResolve = resolve;\n });\n this._layerDeps.throwback.registerChangeListener([CommonProps.ON_LAYER_DRAW], () => {\n this._renderedResolve();\n this._lifeCycleManager.notify({ client: this.layers(), action: 'drawn', formalName: 'layer' });\n });\n\n this._lifeCycleManager = dependencies.lifeCycleManager;\n this._layersMap = {};\n this._gridlines = [];\n this._gridbands = [];\n this._layerAxisIndex = {};\n this._transformedDataModels = {};\n\n layerFactory.setLayerRegistry(registry.layerRegistry);\n generateGetterSetters(this, PROPS);\n this.cachedData([]);\n this.store(new Store({\n [primaryXAxisUpdated]: null,\n [primaryYAxisUpdated]: null,\n [secondaryXAxisUpdated]: null,\n [secondaryYAxisUpdated]: null\n }));\n transactor(this, localOptions, this.store().model);\n this.firebolt(new UnitFireBolt(this, {\n physical: physicalActions,\n behavioural: behaviouralActions,\n physicalBehaviouralMap: actionBehaviourMap\n }, sideEffects, behaviourEffectMap));\n registerListeners(this, listenerMap);\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof VisualUnit\n */\n static formalName () {\n return FORMAL_NAME;\n }\n\n /**\n * Static helper for creates a unit instance\n *\n * @param {Object} [id] optional unique identifier for a unit; , id is calculated internally\n * @param {DataModel} data instance of datamodel\n * @param {Array.} layers layer configuration\n * @param {Object} config configurtion for the visual unit\n * @return {VisualUnit} Instance of a unit\n */\n static create (...params) {\n return new this(...params);\n }\n\n /**\n *\n *\n * @readonly\n * @memberof VisualUnit\n */\n firebolt (...firebolt) {\n if (firebolt.length) {\n this._firebolt = firebolt[0];\n return this;\n }\n return this._firebolt;\n }\n\n /**\n * Gets the domain for all axes of this visual unit.\n * @return {Object} Domains of each data field.\n */\n getDataDomain () {\n return this.store().get(DATADOMAIN);\n }\n\n /**\n * Retrieves the id created for this instance of visual unit\n * @return {string} id associated with the instance\n */\n id () {\n return this._id;\n }\n\n /**\n *\n *\n * @returns\n * @memberof VisualUnit\n */\n lockModel () {\n this._store.model.lock();\n return this;\n }\n\n /**\n *\n *\n * @returns\n * @memberof VisualUnit\n */\n unlockModel () {\n this._store.model.unlock();\n return this;\n }\n\n timeDiffsByField (...params) {\n if (params.length) {\n return this;\n }\n return this._timeDiffsByField;\n }\n\n /**\n * Renders the visual unit. It creates the layout and renders the axes and layers.\n * @return {VisualUnit} Instance of visual unit.\n */\n render (container) {\n const config = this.config();\n const { className, defClassName, sideEffectClassName, classPrefix } = config;\n const qualifiedClassName = getQualifiedClassName(defClassName, this.id(), config.classPrefix);\n const width = this.width();\n const height = this.height();\n const containerSelection = selectElement(container).style('position', 'relative');\n\n this._rootSvg = makeElement(containerSelection, 'svg', [null], className)\n .style('width', `${width}px`).style('height', `${height}px`);\n\n const node = this._rootSvg.node();\n setAttrs(node, {\n width,\n height,\n class: qualifiedClassName.join(' ')\n });\n renderGridLineLayers(this, node);\n renderLayers(this, node, this.layers(), {\n width,\n height\n });\n this._sideEffectGroup = createSideEffectGroup(node, `${classPrefix}-${sideEffectClassName}`);\n return this;\n }\n\n done () {\n return this._renderedPromise;\n }\n /**\n *\n *\n * @returns\n * @memberof VisualUnit\n */\n enableCaching () {\n this._cache = true;\n return this;\n }\n\n /**\n *\n *\n * @returns\n * @memberof VisualUnit\n */\n clearCaching () {\n this._cache = false;\n this.cachedData([this.cachedData()[0]]);\n return this;\n }\n\n /**\n *\n *\n * @returns\n * @memberof VisualUnit\n */\n getDrawingContext () {\n const rootSvg = this._rootSvg && this._rootSvg.node();\n const width = this.width();\n const height = this.height();\n return {\n htmlContainer: this.mount(),\n svgContainer: rootSvg,\n width,\n height,\n sideEffectGroup: this._sideEffectGroup,\n parentContainer: this.parentContainer(),\n xOffset: 0,\n yOffset: 0\n };\n }\n\n /**\n * Returns the serialized configuration of visual unit.\n * @return {Object} serialized configuration\n */\n serialize () {\n return {\n layers: this.layers().map(layer => layer.serialize()),\n config: this.config(),\n axes: this.store().get('axes').map(axis => axis.serialize())\n };\n }\n\n /**\n *\n *\n * @param {*} layerDef\n * @returns\n * @memberof VisualUnit\n */\n addLayer (layerDef) {\n const layerName = layerDef.name;\n const layer = this.getLayerByName(layerName);\n const measurement = {\n width: this.width(),\n height: this.height()\n };\n\n if (layer) {\n return [layer];\n }\n const serializedDef = layerFactory.getSerializedConf(layerDef.mark, layerDef);\n const instances = Object.values(getLayerFromDef(this, serializedDef));\n this.layers().push(...instances);\n const layerAxisIndex = getLayerAxisIndex(instances, this.fields());\n this._layerAxisIndex = Object.assign(this._layerAxisIndex, layerAxisIndex);\n attachAxisToLayers(this.axes(), instances, layerAxisIndex);\n const store = { unit: this, layers: {} };\n this.layers().forEach((inst) => {\n store.layers[inst.alias()] = inst;\n });\n instances.forEach((lyr) => {\n resolveEncodingTransform(lyr, store);\n lyr.measurement(measurement);\n lyr.dataProps({\n timeDiffs: this.store().get(TIMEDIFFS)\n });\n });\n return instances;\n }\n\n /**\n *\n *\n * @returns\n * @memberof VisualUnit\n */\n remove () {\n const lifeCycleManager = this._dependencies.lifeCycleManager;\n lifeCycleManager.notify({ client: this, action: 'beforeremove', formalName: 'unit' });\n this.store().unsubscribeAll();\n selectElement(this.mount()).remove();\n this.firebolt().remove();\n // Remove layers\n lifeCycleManager.notify({ client: this.layers(), action: 'beforeremove', formalName: 'layer' });\n this.layers().forEach(layer => layer.remove());\n lifeCycleManager.notify({ client: this.layers(), action: 'removed', formalName: 'layer' });\n lifeCycleManager.notify({ client: this, action: 'removed', formalName: 'unit' });\n return this;\n }\n\n /**\n *\n *\n * @param {*} identifiers\n * @returns\n * @memberof VisualUnit\n */\n getDataModelFromIdentifiers (identifiers, mode, parentModel) {\n if (identifiers === null) {\n return null;\n }\n const dataModel = parentModel || this.data();\n return getDataModelFromIdentifiers(dataModel, identifiers, mode);\n }\n\n /**\n *\n *\n * @returns\n * @memberof VisualUnit\n */\n resetData () {\n this.data(this.cachedData()[0]);\n return this;\n }\n\n /**\n *\n *\n * @returns\n * @memberof VisualUnit\n */\n getSourceInfo () {\n return {\n dimensionMeasureMap: this._dimensionMeasureMap,\n fields: this.fields(),\n data: this.data(),\n axes: this.axes()\n };\n }\n\n /**\n *\n *\n * @returns\n * @memberof VisualUnit\n */\n getDefaultTargetContainer () {\n const { classPrefix, defClassName } = this.config();\n return [`.${classPrefix}-${defClassName}`];\n }\n\n /**\n *\n *\n * @param {*} type\n * @returns\n * @memberof VisualUnit\n */\n getLayersByType (type) {\n const layers = getLayersBy(this.layers(), 'type', type);\n return layers;\n }\n\n /**\n *\n *\n * @param {*} name\n * @returns\n * @memberof VisualUnit\n */\n getLayerByName (name) {\n const layers = getLayersBy(this.layers(), 'name', name);\n return layers[0];\n }\n\n /**\n *\n *\n * @param {*} domain\n * @returns\n * @memberof VisualUnit\n */\n updateAxisDomain (domain) {\n ['x', 'y'].forEach((type) => {\n const axes = this.axes()[type];\n let min = [];\n let max = [];\n let dom;\n axes && axes.forEach((axis, i) => {\n const field = this.fields()[type][i];\n dom = domain[`${this.fields()[type][i]}`];\n\n if (field.type() !== FieldType.DIMENSION && dom) {\n min[i] = dom[0];\n max[i] = dom[1];\n }\n });\n if (axes) {\n if (axes.length > 1) {\n const axisConf = axes[0].config();\n if (axes[0].constructor.type() === 'linear') {\n if (axisConf.alignZeroLine) {\n axes.forEach(axis => axis.config({\n nice: false\n }));\n const adjustedDomain = getAdjustedDomain(max, min);\n min = adjustedDomain.min;\n max = adjustedDomain.max;\n }\n\n axes[0].updateDomainCache([min[0], max[0]]);\n axes[1].updateDomainCache([min[1], max[1]]);\n } else {\n axes[0].updateDomainCache(dom);\n axes[1].updateDomainCache(dom);\n }\n } else {\n axes[0].updateDomainCache(dom);\n }\n }\n });\n return this;\n }\n\n /**\n * Finds the nearest point closest to the x and y position.\n * @param {number} x x position.\n * @param {number} y y position.\n * @return {Object} Nearest point.\n */\n getNearestPoint (x, y, args) {\n let pointObj = {\n id: null\n };\n const dimValue = getNearestDimensionalValue(this, {\n x,\n y\n });\n\n if (dimValue !== null && args.getAllPoints) {\n pointObj.id = dimValue;\n const pointInf = this.getMarkInfFromLayers(x, y, args);\n pointObj.target = pointInf && pointInf.id ? pointInf.id : pointObj.id;\n return pointObj;\n }\n\n const markInf = this.getMarkInfFromLayers(x, y, args) || { id: null };\n pointObj = Object.assign({}, markInf);\n\n pointObj.target = markInf.id;\n return pointObj;\n }\n\n getMarkInfFromLayers (x, y, args) {\n const layers = this.layers();\n const len = layers.length;\n let point = null;\n // Iterate through the layers array and fetch the nearest point from each layer. If a valid\n // nearest point is found from any layer, then return that point.\n for (let i = 0; i < len; i++) {\n const layer = layers[i];\n const config = layer.config();\n if (config.interactive !== false) {\n point = layer.getNearestPoint(x, y, args);\n }\n if (point) {\n return point;\n }\n }\n return point;\n }\n\n /**\n *\n *\n * @param {*} identifiers\n * @returns\n * @memberof VisualUnit\n */\n getPlotPointsFromIdentifiers (identifiers, config = {}) {\n let points = [];\n let parsedIdentifiers = identifiers;\n if (identifiers === null) {\n return [];\n }\n const layers = this.layers();\n const len = layers.length;\n if (isSimpleObject(identifiers)) {\n parsedIdentifiers = [Object.keys(identifiers)];\n parsedIdentifiers = [...parsedIdentifiers, ...transposeArray(Object.values(identifiers))];\n }\n for (let i = 0; i < len; i++) {\n const layer = layers[i];\n if (layer.config().interactive !== false) {\n points = [...points, ...layer.getPointsFromIdentifiers(parsedIdentifiers, config)];\n }\n }\n return points;\n }\n\n /**\n *\n *\n * @param {*} name\n * @returns\n * @memberof VisualUnit\n */\n removeLayerByName (name) {\n removeLayersBy('name', name);\n return this;\n }\n\n /**\n *\n *\n * @param {*} type\n * @returns\n * @memberof VisualUnit\n */\n removeLayersByType (type) {\n removeLayersBy('type', type);\n return this;\n }\n\n parentContainer (...container) {\n if (container.length) {\n this._parentContainer = container[0];\n\n return this;\n }\n return this._parentContainer;\n }\n}\n","import { DataModel } from 'muze-utils';\n\nimport { retriveDomainFromData } from './group-utils';\n\n/**\n * Gets name of fields form the variables\n *\n * @param {*} fields1\n * @param {*} [fields2=[]]\n * @return\n */\nconst getFieldNames = (fields1, fields2 = []) => [fields1, fields2].map(fields => fields.reduce((acc, d) => {\n acc = [...acc, ...d.getMembers()];\n return acc;\n}, []));\n\n/**\n * Creates a selected datamodel from a parent datamodel and a set of field names\n *\n * @param {Object} datamodel provided as input\n * @param {Array} fieldNames schema names\n * @param {Array} fieldValues values of those schema names to be selected\n * @return {Object} creates a new selected datamodel\n */\nconst createSelectedDataModel = (datamodel, fieldNames, fieldValues) =>\n datamodel.select(fields => fieldNames.every((field, k) => fields[field].value === fieldValues[k]));\n\n/**\n *\n *\n * @param {*} facets\n * @param {*} keyArray\n * @return\n */\nconst uniqueKeyGenerator = (keyArray, context, depth = 0, val = []) => {\n const {\n facets,\n dataModel,\n uniqueValues\n } = context;\n\n // Get unique keys for the next depth recursively if required\n if (facets[depth + 1]) {\n const field = facets[depth];\n uniqueValues.forEach((value) => {\n const newDm = dataModel.select(fields => fields[field].value === value);\n const nextDepthUniqueValues = retriveDomainFromData(newDm, facets[depth + 1]);\n const newContext = {\n facets,\n dataModel: newDm,\n uniqueValues: nextDepthUniqueValues\n };\n\n uniqueKeyGenerator(keyArray, newContext, depth + 1, [...val, value]);\n });\n } else {\n uniqueValues.forEach((value) => {\n keyArray.push([...val, value]);\n });\n }\n};\n\n/**\n * projects row model based on the set of row and/or column and other projection fields\n *\n * @param {Object} datamodel provided as input\n * @return {Object} Projected datamodel\n */\nconst projectRows = (datamodel, projections) => {\n const {\n allColumnProjections,\n rowProjections,\n optionalProjections\n } = projections;\n\n if (rowProjections.length > 0) {\n return rowProjections.map((projectFields) => {\n const [projFieldNames, colProjFieldNames] = getFieldNames(projectFields, allColumnProjections);\n return datamodel.project([...projFieldNames, ...colProjFieldNames, ...optionalProjections]);\n });\n }\n return [datamodel];\n};\n\n/**\n * Adds the datamodels to current row index based on column fields\n *\n * @param {Array} context current context\n * @param {Array} callback List of facets applied to the current datamodel\n */\nconst pushToMatrix = (context, callback) => {\n let cells = [];\n const {\n matrix,\n datamodel,\n facetInfo,\n fieldInfo\n } = context;\n // Get projected fields for current row\n const {\n rowProjections,\n colProjections,\n optionalProjections\n } = fieldInfo;\n const {\n rowIndex,\n columnIndex\n } = facetInfo;\n const rowProj = rowProjections[(rowIndex) % rowProjections.length] || [];\n\n // Get the cells for the matrix from the return function of the callback on the datamodel.\n // callback function -> (datamodel, {projections, indices}, facets)\n if (colProjections.length > 0) {\n cells = colProjections.map((projectFields, projIdx) => {\n const [colProjFieldNames, rowProjFieldNames] = getFieldNames(projectFields, rowProj);\n const projectedDm = datamodel.project([...colProjFieldNames, ...rowProjFieldNames, ...optionalProjections]);\n const projections = { rowFields: rowProj, columnFields: projectFields };\n const indices = { rowIndex, columnIndex: columnIndex * colProjections.length + projIdx };\n\n return callback(projectedDm, { projections, indices }, facetInfo);\n });\n } else {\n const projections = { rowFields: rowProj, columnFields: [] };\n const indices = { rowIndex, columnIndex };\n\n cells = [callback(datamodel, { projections, indices }, facetInfo)];\n }\n\n matrix[rowIndex] = matrix[rowIndex] || [];\n matrix[rowIndex].push(...cells);\n};\n\n/**\n * Gets Matrixes for corresponding datamodel, facets and projections\n *\n * @param {Object} dataModel input datamodel\n * @param {Object} fieldMap corresponding fieldmap\n * @param {Array} facetsAndProjections contains the set of facets and projections for the matrices\n * @param {Function} callback Callback executed after datamodels are prepared after sel/proj\n * @return {Object} set of matrices with the corresponding row and column keys\n */\nexport const getMatrixModel = (dataModel, fieldInfo, callback) => {\n let rowDataModels = [];\n const rowKeys = [];\n const columnKeys = [];\n const allColumnProjections = [];\n const matrix = [];\n const facetInfo = [];\n const {\n rowFacets,\n colFacets,\n colProjections\n } = fieldInfo;\n\n colProjections.forEach((colProj) => {\n allColumnProjections.push(...colProj);\n });\n fieldInfo.allColumnProjections = allColumnProjections;\n\n // Performing row selection and projection\n if (rowFacets.length > 0) {\n // Get unique values for the root level of facet\n const field = rowFacets[0].toString();\n const firstLevelRowKeys = retriveDomainFromData(dataModel, field);\n\n // Get unique keys in the form of an array of arrays for each row\n uniqueKeyGenerator(rowKeys, { facets: rowFacets, dataModel, uniqueValues: firstLevelRowKeys });\n\n // Apply selection -> projection -> row datamodels\n rowKeys.forEach((val) => {\n // Create faceted datamodel\n const [rowFacetFieldNames] = getFieldNames(rowFacets);\n const selectedDataModel = createSelectedDataModel(dataModel, rowFacetFieldNames, val);\n\n // Project the datamodel based on the number of projections (based on last levels)\n facetInfo.push([rowFacets, val]);\n rowDataModels.push(...projectRows(selectedDataModel, fieldInfo));\n });\n } else {\n // No row facets, hence only row projection\n rowDataModels.push(...projectRows(dataModel, fieldInfo));\n }\n\n // Maintaining set of row datamodels for column resolution\n rowDataModels = rowDataModels.length > 0 ? rowDataModels : [[]];\n\n // Performing column selection and projection\n if (colFacets.length > 0) {\n const colFacetNames = colFacets.map(d => `${d}`);\n // Get unique values for the root level of facet\n const field = colFacetNames[0];\n const firstLevelColumnKeys = retriveDomainFromData(dataModel, field);\n\n // Get unique keys to create faceted datamodels: this time for columns\n uniqueKeyGenerator(columnKeys, {\n facets: colFacetNames,\n dataModel,\n uniqueValues: firstLevelColumnKeys\n });\n\n // For each row in the datamodel, apply selection -> projection -> push the projection to matri\n rowDataModels.forEach((dme, rIndex) => {\n facetInfo[rIndex] = facetInfo[rIndex] || [[], []];\n columnKeys.forEach((val, cIndex) => {\n matrix[rIndex] = matrix[rIndex] || [];\n\n // If datamodel is not present in current row, choose parent datamodel\n const datamodel = dme instanceof DataModel ? dme : dataModel;\n\n // Selection is made on the datamodel for the current row\n const selectedDataModel = createSelectedDataModel(datamodel, colFacetNames, val);\n const context = {\n matrix,\n datamodel: selectedDataModel,\n facetInfo: {\n rowFacets: facetInfo[rIndex],\n colFacets: [colFacets, val],\n rowIndex: rIndex,\n columnIndex: cIndex\n },\n fieldInfo\n };\n pushToMatrix(context, callback);\n });\n });\n } else {\n // No column facets, hence only row projection\n rowDataModels.forEach((dme, rIndex) => {\n facetInfo[rIndex] = facetInfo[rIndex] || [[], []];\n const context = {\n matrix,\n datamodel: dme || dataModel,\n facetInfo: {\n rowFacets: facetInfo[rIndex],\n colFacets: [[], []],\n rowIndex: rIndex,\n columnIndex: 0\n },\n fieldInfo\n };\n\n pushToMatrix(context, callback);\n });\n }\n\n // Getting column keys\n const transposedColKeys = columnKeys.length > 0 ? columnKeys[0].map((col, i) =>\n columnKeys.map(row => row[i])) : columnKeys;\n\n return { matrix, rowKeys, columnKeys: transposedColKeys };\n};\n","import { AxisOrientation } from '@chartshq/muze-axis';\nimport { getObjProp, FieldType } from 'muze-utils';\nimport { getMatrixModel } from './matrix-model';\nimport {\n getCellKey,\n isDistributionEqual,\n mutateAxesFromMap,\n createSelection,\n getFieldsFromSuppliedLayers,\n extractFields\n} from './group-utils';\nimport { ROW, ROWS, COLUMNS, COL, LEFT, RIGHT, TOP, BOTTOM, PRIMARY, SECONDARY, X, Y } from '../enums/constants';\n\n/**\n * Updates row and column cells with the geom cell corresponding to the facet keys\n *\n * @param {*} resolver\n * @param {*} facets\n */\nconst updateCells = (resolver, facets, geomCell) => {\n [ROW, COL].forEach((field) => {\n const cells = resolver[`${field}Cells`]();\n const facetKey = facets[`${field}Facets`][1].join();\n\n !cells[facetKey] && (cells[facetKey] = []);\n cells[facetKey].push(geomCell);\n resolver[`${field}Cells`](cells);\n });\n};\n\n/**\n *\n *\n * @param {*} context\n * @param {*} datamodel\n * @param {*} fieldInfo\n * @param {*} facets\n * @return\n */\nexport const createValueCells = (context, datamodel, fieldInfo, facets) => {\n const {\n projections,\n indices\n } = fieldInfo;\n const {\n rowFields,\n columnFields\n } = projections;\n const {\n rowIndex,\n columnIndex\n } = indices;\n const {\n suppliedLayers,\n cell: GeomCell,\n resolver,\n config,\n encoder,\n detailFields\n } = context;\n const axes = resolver.axes();\n const cacheMaps = resolver.cacheMaps();\n const matrixLayers = resolver.matrixLayers();\n const labelManager = resolver.dependencies().smartlabel;\n const horizontalAxis = resolver.horizontalAxis();\n const verticalAxis = resolver.verticalAxis();\n const datamodelTransform = resolver.datamodelTransform();\n const {\n entryCellMap,\n exitCellMap\n } = cacheMaps;\n const layerConfigArr = encoder.getLayerConfig({ columnFields, rowFields }, suppliedLayers || []);\n const axesCreators = { config, labelManager, axes, cacheMaps };\n\n fieldInfo.normalizedColumns = verticalAxis.fields;\n fieldInfo.normalizedRows = horizontalAxis.fields;\n\n const groupAxes = encoder.createAxis(axesCreators, fieldInfo);\n\n matrixLayers[rowIndex] = matrixLayers[rowIndex] ? matrixLayers[rowIndex] : [];\n matrixLayers[rowIndex][columnIndex] = layerConfigArr;\n\n // return from map if already there otherwise create and put in map\n const geomCellKey = getCellKey(rowIndex, columnIndex);\n const fields = {\n y: rowFields,\n x: columnFields\n };\n const allFacets = [\n [...facets.rowFacets[0], ...facets.colFacets[0]],\n [...facets.rowFacets[1], ...facets.colFacets[1]]\n ];\n const geomCell = !exitCellMap.has(geomCellKey) ? new GeomCell() : exitCellMap.get(geomCellKey);\n\n geomCell.data(datamodel)\n .axes(groupAxes)\n .fields(fields)\n .transform(datamodelTransform)\n .detailFields(detailFields)\n .facetByFields(allFacets);\n entryCellMap.set(geomCellKey, geomCell);\n exitCellMap.delete(geomCellKey);\n\n updateCells(resolver, facets, geomCell);\n\n return entryCellMap.get(geomCellKey);\n};\n\n/**\n * Creates axis cells based on the set of axes\n *\n * @param {Selection} selection Contains a selection of the axis units\n * @param {Array} axes Actual axis units\n * @param {number} axisIndex 0-> primary axis, 1-> secondary axis(when dual axis is made)\n * @param {Object} cells Contains a collection of the cells\n * @return {Object} return either set of axis/blank cells depending on the config\n */\n\nconst createAxisCells = (selection, axes, axisIndex, cells) =>\n createSelection(selection, axis => axis, axes, (item, i) => i + item.reduce((e, n) => {\n const id = n.id + axisIndex;\n return e + id;\n }, '')).map((axis) => {\n if (axis && axis[axisIndex]) {\n const axisInst = axis[axisIndex];\n const { orientation } = axisInst.config();\n\n return new cells.AxisCell().source(axisInst).config({\n isOffset: orientation === AxisOrientation.LEFT || orientation === AxisOrientation.TOP\n });\n }\n return new cells.BlankCell();\n });\n\n/**\n *\n *\n * @param {*} context\n * @param {*} selectionObj\n * @param {*} cells\n * @retur\n */\nconst axisPlaceholderGn = (context, selObj, cells) => {\n const {\n matrices\n } = context;\n const {\n axesMatrix\n } = matrices;\n\n return (type, axisFrom) => {\n const axes = axesMatrix[`${type}`];\n\n if (axes && axes.length) {\n if (type === X || type === Y) {\n const fieldNames = type === Y ? ROWS : COLUMNS;\n\n [PRIMARY, SECONDARY].forEach((fieldType, index) => {\n const selObjProp = `${fieldNames}${fieldType}`;\n let axisIndex = index;\n let axesForDraw = axes;\n if (axisFrom === RIGHT || axisFrom === BOTTOM) {\n axisIndex = 1 - axisIndex;\n }\n if (!getObjProp(axes, 0, axisIndex)) {\n axesForDraw = [];\n }\n selObj[selObjProp] = createAxisCells(selObj[selObjProp], axesForDraw, axisIndex, cells);\n });\n } else {\n selObj.rowsPrimary = createAxisCells(selObj.rowPrime, axes.map(() => []), 0, cells);\n selObj.columnsPrimary = createAxisCells(selObj.colPrime, axes[0], 0, cells);\n }\n }\n return selObj;\n };\n};\n\n/**\n * Creates header cells based on the set of headers\n *\n * @param {Object} selection Contains a selection of the header units\n * @param {string} headers Contains a list of the headers\n * @param {Object} cells Contains a collection of the cells\n * @param {Object} labelManager smart label instance\n * @return {Object} return either set of header cells depending on the config\n */\nconst createTextCells = (selection, headers, cells, labelManager) => createSelection(selection,\n label => new cells.TextCell({}, { labelManager }).source(label), headers, (key, i) => key + i);\n\n/**\n *\n *\n * @param {*} context\n * @param {*} selectionObj\n * @param {*} cells\n * @param {*} labelManager\n * @return\n */\nconst headerPlaceholderGn = (context, selectionObj, cells, labelManager) => {\n const {\n axis,\n keys,\n type,\n facetConfig\n } = context;\n const counter = axis.length / keys.length;\n const selectionKeys = keys.length ? axis.map((d, i) => keys[Math.floor(i / counter)]) : [];\n return createSelection(selectionObj[`${type}Headers`], keySet => keySet, selectionKeys, (keySet, i) =>\n `${keySet.join(',')}-${i}`).map(keySet => createTextCells(null, keySet, cells, labelManager)\n .map((cell, k, i) => cell.source(keySet[i]).config(facetConfig || {})));\n};\n\n/**\n * Creates a set of placeholders as a part of selection object\n *\n * @param {Array} normalizedOptions contains normalized rows and columns\n * @param {Array} matrices contains axis and value matrices\n * @param {aArrayny} projections contains set of row and column projections\n * @param {Object} cells Contains a collection of the cells\n * @param {Object} labelManager smart label instance\n * @return {Object} Creates a set of placeholders as a part of selections\n */\nconst generatePlaceholders = (context, cells, labelManager) => {\n let selectionObj;\n const {\n matrices,\n fields,\n facetsAndProjections,\n selection,\n facetConfig,\n encoders\n } = context;\n const {\n rows,\n columns\n } = fields;\n const {\n valuesMatrix\n } = matrices;\n const {\n rowProjections,\n colProjections\n } = facetsAndProjections;\n const {\n rowKeys,\n columnKeys\n } = valuesMatrix;\n const takeAxisFrom = encoders.simpleEncoder._axisFrom;\n const takeHeaderFrom = encoders.simpleEncoder._headerFrom;\n\n selectionObj = selection || {};\n\n ['pie', X, Y].forEach((axis) => {\n const axisFrom = axis === X ? takeAxisFrom.column : takeAxisFrom.row;\n selectionObj = axisPlaceholderGn(context, selectionObj, cells)(axis, axisFrom);\n });\n\n const {\n rowsPrimary,\n rowsSecondary,\n columnsPrimary,\n columnsSecondary\n } = selectionObj;\n\n const rowAxis = rowsPrimary && rowsPrimary.getObjects().length ? rowsPrimary.getObjects() :\n (rowsSecondary && rowsSecondary.getObjects().length ? rowsSecondary.getObjects() : []);\n const colAxis = columnsPrimary && columnsPrimary.getObjects().length ? columnsPrimary.getObjects() :\n (columnsSecondary && columnsSecondary.getObjects().length ? columnsSecondary.getObjects() : []);\n\n const headerConfig = [\n { type: LEFT, section: rows[0], axis: rowAxis, headerFrom: takeHeaderFrom.row },\n { type: RIGHT, section: rows[1], axis: rowAxis, headerFrom: takeHeaderFrom.row },\n { type: TOP, section: columns[0], axis: colAxis, headerFrom: takeHeaderFrom.column },\n { type: BOTTOM, section: columns[1], axis: colAxis, headerFrom: takeHeaderFrom.column }\n ];\n\n headerConfig.forEach((config, index) => {\n let keys;\n let length;\n const {\n type,\n section,\n axis,\n headerFrom\n } = config;\n\n if (index < 2) {\n keys = rowKeys;\n length = rowProjections.length > 0 ? rowProjections.length : 1;\n } else {\n keys = columnKeys;\n length = colProjections.length > 0 ? colProjections.length : 1;\n }\n\n if (section.length && headerFrom === type && axis && keys.length) {\n const hContext = { axis, length, type };\n let headers = [];\n if (index < 2) {\n hContext.keys = keys;\n hContext.facetConfig = facetConfig.rows;\n headers = headerPlaceholderGn(hContext, selectionObj, cells, labelManager);\n } else {\n hContext.facetConfig = facetConfig.columns;\n hContext.keys = keys[0].map((key, i) => keys.map(e => e[i]));\n headers = headerPlaceholderGn(hContext, selectionObj, cells, labelManager);\n }\n selectionObj[`${type}Headers`] = headers;\n } else {\n selectionObj[`${type}Headers`] = null;\n }\n });\n return selectionObj;\n};\n\n/**\n * Generates matrices\n *\n * @param {Object} config Configuration to generate matrices\n * @param {Array} matrices Matrices containing the set of visual units and axes units\n * @param {Object} cells Contains a collection of the cells\n * @param {Object} labelManager smart label instance\n * @return {Object} contains a collection of matrices\n */\nexport const generateMatrices = (context, matrices, cells, labelManager) => {\n const {\n unitHeight,\n unitWidth,\n facetsAndProjections,\n normalizedRows,\n normalizedColumns,\n selection,\n axisFrom,\n facetConfig,\n encoders\n } = context;\n const placeholderContext = {\n fields: {\n rows: normalizedRows,\n columns: normalizedColumns\n },\n matrices,\n facetsAndProjections,\n selection,\n axisFrom,\n facetConfig,\n encoders\n };\n // Generate placeholders for all matrices\n const selectionObj = generatePlaceholders(placeholderContext, cells, labelManager);\n const {\n columnsPrimary,\n columnsSecondary,\n rowsPrimary,\n rowsSecondary,\n leftHeaders,\n topHeaders,\n bottomHeaders,\n rightHeaders\n } = selectionObj;\n const [rowPrime, rowSec, colPrime, colSec] = [rowsPrimary, rowsSecondary, columnsPrimary, columnsSecondary]\n .map(d => (d ? d.getObjects() : []));\n const [leftFacets, rightFacets] = [leftHeaders, rightHeaders].map(e => (e ? e.getObjects()\n .map(f => f.getObjects()) : []));\n\n // Compute left matrix using left headers and the axes on the rows\n let leftMatrix = leftFacets.length ? leftFacets.map((d, i) => {\n rowPrime[i] = rowPrime[i] ? [rowPrime[i]] : [];\n return [...d, ...rowPrime[i]];\n }) : (rowPrime ? rowPrime.map(d => [d]) : []);\n\n // Compute right matrix using right headers and the axes on the rows\n const rightMatrix = rowSec.length ? rowSec.map((d, i) => [d, ...(rightFacets[i] || [])]) : (rightFacets.length ?\n rightFacets.map(d => [...d]) : []);\n\n const topMatrix = [];\n if (topHeaders) {\n const headers = topHeaders.getObjects();\n headers.forEach((e) => {\n const innerHeaders = e.getObjects();\n innerHeaders.forEach((x, i) => {\n topMatrix[i] = topMatrix[i] || [];\n topMatrix[i].push(x);\n });\n });\n }\n // Compute top matrix using the top headers and axes on the columns\n if (colPrime.length) {\n topMatrix.push(colPrime);\n }\n\n // Bottom and right matrices are prepared using the user config.\n let bottomMatrix = [];\n if (colSec.length) {\n bottomMatrix.push(colSec);\n }\n const currentBottomLength = bottomMatrix.length;\n if (bottomHeaders) {\n const headers = bottomHeaders.getObjects();\n headers.forEach((e) => {\n const innerHeaders = e.getObjects();\n innerHeaders.forEach((x, i) => {\n bottomMatrix[i + currentBottomLength] = bottomMatrix[i + currentBottomLength] || [];\n bottomMatrix[i + currentBottomLength].push(x);\n });\n });\n }\n\n if (!leftMatrix.length && !rightMatrix.length) {\n const cell = new cells.BlankCell();\n cell.setAvailableSpace(unitWidth, unitHeight);\n leftMatrix = [[cell]];\n }\n\n if (!topMatrix.length && (!bottomMatrix.length || !bottomMatrix[0].length)) {\n const cell = new cells.BlankCell();\n cell.setAvailableSpace(unitWidth, unitHeight);\n bottomMatrix = [[cell]];\n }\n\n return {\n rows: [leftMatrix, rightMatrix],\n columns: [topMatrix, bottomMatrix],\n selectionObj\n };\n};\n\n/**\n * Computes matrices for a group\n *\n * @param {Object} datamodel on which the matrices are to be computed\n * @param {Object} config configuration of the matrices\n * @param {Object} layerRegistry contains the registered layers\n * @return {Object} conputed matrices\n * @memberof MatrixResolver\n */\nexport const computeMatrices = (context, config) => {\n const {\n resolver,\n datamodel,\n componentRegistry,\n encoders\n } = context;\n const {\n globalConfig,\n selection,\n transform\n } = config;\n const groupBy = globalConfig.autoGroupBy;\n const { smartlabel: labelManager } = resolver.dependencies();\n const fieldMap = datamodel.getFieldsConfig();\n const layerConfig = resolver.layerConfig();\n const registry = resolver.registry();\n const { fields: normalizedRows } = resolver.horizontalAxis();\n const { fields: normalizedColumns } = resolver.verticalAxis();\n const otherEncodings = resolver.optionalProjections(config, layerConfig);\n const facetsAndProjections = resolver.getAllFields();\n const matrixGnContext = {\n // Configuration to be passed to generate the different matrices.\n // A common config is used for both value matrices and other matrices\n normalizedColumns,\n normalizedRows,\n facetsAndProjections,\n layers: layerConfig,\n fieldMap,\n otherEncodings,\n encoders,\n facetConfig: globalConfig.facetConfig || {},\n axisFrom: globalConfig.axisFrom || {},\n selection\n };\n const cells = {\n GeomCell: resolver.getCellDef(registry.GeomCell),\n AxisCell: resolver.getCellDef(registry.AxisCell),\n BlankCell: resolver.getCellDef(registry.BlankCell),\n TextCell: resolver.getCellDef(registry.TextCell)\n };\n const isRowSizeEqual = isDistributionEqual(normalizedRows);\n const isColumnSizeEqual = isDistributionEqual(normalizedColumns);\n\n resolver.colCells({});\n resolver.rowCells({});\n resolver.datamodelTransform(transform || {});\n\n // Cell creation begins here\n resolver.resetSimpleAxes();\n\n const {\n entryCellMap\n } = resolver.cacheMaps();\n const newCacheMap = {\n exitCellMap: entryCellMap,\n entryCellMap: new Map()\n };\n\n resolver.cacheMaps(newCacheMap);\n\n const valueCellContext = {\n config: globalConfig,\n suppliedLayers: encoders.simpleEncoder.serializeLayerConfig(resolver.layerConfig()),\n resolver,\n cell: cells.GeomCell,\n encoder: encoders.simpleEncoder,\n newCacheMap,\n detailFields: config.detail\n };\n const fieldsConfig = datamodel.getFieldsConfig();\n let groupedModel = datamodel;\n if (!groupBy.disabled) {\n const fields = getFieldsFromSuppliedLayers(valueCellContext.suppliedLayers, datamodel.getFieldsConfig());\n const allFields = extractFields(facetsAndProjections, fields);\n\n const dimensions = allFields.filter(field =>\n fieldsConfig[field] && fieldsConfig[field].def.type === FieldType.DIMENSION);\n const aggregationFns = groupBy.measures;\n\n groupedModel = datamodel.groupBy(dimensions.length ? dimensions : [''], aggregationFns).project(allFields);\n }\n\n // return a callback function to create the cells from the matrix\n const cellCreator = resolver.valueCellsCreator(valueCellContext);\n // Creates value matrices from the datamodel and configs\n const valueMatrixInfo = getMatrixModel(groupedModel, facetsAndProjections, cellCreator);\n\n resolver.cacheMaps().exitCellMap.forEach((placeholder) => {\n placeholder.remove();\n });\n resolver.cacheMaps().exitCellMap.clear();\n resolver.valueMatrix(valueMatrixInfo.matrix);\n resolver.createUnits(componentRegistry, config);\n\n const { xAxes, yAxes } = mutateAxesFromMap(resolver.cacheMaps(), resolver.axes());\n\n resolver.axes({\n x: xAxes,\n y: yAxes\n });\n\n const matrices = {\n valuesMatrix: valueMatrixInfo,\n axesMatrix: resolver.axes()\n };\n // Create all matrices\n const { rows, columns, selectionObj } = generateMatrices(matrixGnContext, matrices, cells, labelManager);\n\n resolver.rowMatrix(rows);\n resolver.columnMatrix(columns);\n\n return {\n rows: resolver.rowMatrix(),\n columns: resolver.columnMatrix(),\n values: resolver.valueMatrix(),\n isColumnSizeEqual,\n isRowSizeEqual,\n selection: selectionObj,\n dataModels: {\n groupedModel,\n parentModel: datamodel\n }\n };\n};\n","import { VisualUnit } from '@chartshq/visual-unit';\nimport {\n initializeCacheMaps,\n headerCreator,\n extractUnitConfig,\n setFacetsAndProjections\n} from './group-utils';\nimport {\n ROW, COL, LEFT, RIGHT, COLOR, SIZE, SHAPE, DETAIL, CELL, X_AXES, Y_AXES, ENTRY_CELLS, EXIT_CELLS, INITIALIZED,\n AXIS, UNIT, BEFORE_UPDATE, UPDATED, VALUE_MATRIX, FACET_HEADERS\n} from '../enums/constants';\nimport { createValueCells, computeMatrices } from './cell-creator';\n/**\n * Resolves the matrices from configuration provided\n *\n * @export\n * @class MatrixResolver\n */\nexport default class MatrixResolver {\n\n /**\n * Creates an instance of MatrixResolver.\n * @param {Object} dependencies needed to run the resolver\n * @memberof MatrixResolver\n */\n constructor (dependencies) {\n this._registry = {};\n this._layerConfig = [];\n this._matrixLayers = [];\n this._dependencies = dependencies;\n this._rowMatrix = [];\n this._columnMatrix = [];\n this._valueMatrix = [];\n this._facets = {};\n this._projections = {};\n this._datamodelTransform = {};\n this._units = [];\n this._cacheMaps = {};\n this._axes = {\n x: {},\n y: {},\n color: [],\n size: [],\n shape: []\n };\n\n this.cacheMaps(initializeCacheMaps());\n }\n\n /**\n * Set: Registers placeholders, Get: return {Object} those placeholders\n *\n * @param {Object} placeholders cells that will construct the group\n * @return {Object} Either current instance or the set of placeholders\n * @memberof MatrixResolver\n */\n registry (...placeholders) {\n if (placeholders.length) {\n Object.entries(placeholders[0]).forEach((val) => {\n this._registry[val[0]] = val[1];\n });\n return this;\n }\n return this._registry;\n }\n\n /**\n * Used to set the layer config from outside or get current layer info\n *\n * @param {Object} type configuration of layer provided externally\n * @return {Object} either the layer or current instance\n * @memberof MatrixResolver\n */\n dependencies (...dep) {\n if (dep.length) {\n this._dependencies = dep[0];\n return this;\n }\n return this._dependencies;\n }\n\n /**\n * Used to set the layer config from outside or get current layer info\n *\n * @param {Object} type configuration of layer provided externally\n * @return {Object} either the layer or current instance\n * @memberof MatrixResolver\n */\n units (...unitArr) {\n if (unitArr.length) {\n this._units = unitArr[0];\n return this;\n }\n return this._units;\n }\n\n /**\n * Used to set the layer config from outside or get current layer info\n *\n * @param {Object} layer configuration of layer provided externally\n * @return {Object} either the layer or current instance\n * @memberof MatrixResolver\n */\n layerConfig (...config) {\n if (config.length) {\n this._layerConfig = config[0];\n return this;\n }\n return this._layerConfig;\n }\n\n /**\n * Used to set the layer config from outside or get current layer info\n *\n * @param {Object} type configuration of layer provided externally\n * @return {Object} either the layer or current instance\n * @memberof MatrixResolver\n */\n matrixLayers (...layers) {\n if (layers.length) {\n this._matrixLayers = layers[0];\n return this;\n }\n return this._matrixLayers;\n }\n\n /**\n * Used to set the layer config from outside or get current layer info\n *\n * @param {Object} type configuration of layer provided externally\n * @return {Object} either the layer or current instance\n * @memberof MatrixResolver\n */\n datamodelTransform (...transform) {\n if (transform.length) {\n this._datamodelTransform = transform[0];\n return this;\n }\n return this._datamodelTransform;\n }\n\n /**\n * Used to set the layer config from outside or get current layer info\n *\n * @param {Object} type configuration of layer provided externally\n * @return {Object} either the layer or current instance\n * @memberof MatrixResolver\n */\n cacheMaps (...maps) {\n if (maps.length) {\n [CELL, X_AXES, Y_AXES, ENTRY_CELLS, EXIT_CELLS].forEach((e) => {\n this._cacheMaps[`${e}Map`] = maps[0][`${e}Map`] || this._cacheMaps[`${e}Map`];\n });\n return this;\n }\n return this._cacheMaps;\n }\n\n /**\n * Used to set the layer config from outside or get current layer info\n *\n * @param {Object} type configuration of layer provided externally\n * @return {Object} either the layer or current instance\n * @memberof MatrixResolver\n */\n rowCells (...cells) {\n if (cells.length) {\n this._rowCells = cells[0];\n return this;\n }\n return this._rowCells;\n }\n\n /**\n * Used to set the layer config from outside or get current layer info\n *\n * @param {Object} type configuration of layer provided externally\n * @return {Object} either the layer or current instance\n * @memberof MatrixResolver\n */\n colCells (...cells) {\n if (cells.length) {\n this._colCells = cells[0];\n return this;\n }\n return this._colCells;\n }\n\n /**\n * Used to set the layer config from outside or get current layer info\n *\n * @param {Object} type configuration of layer provided externally\n * @return {Object} either the layer or current instance\n * @memberof MatrixResolver\n */\n axes (...axes) {\n if (axes.length) {\n this._axes = Object.assign({}, this._axes, axes[0]);\n return this;\n }\n return this._axes;\n }\n\n /**\n * Used to set the layer config from outside or get current layer info\n *\n * @param {Object} type configuration of layer provided externally\n * @return {Object} either the layer or current instance\n * @memberof MatrixResolver\n */\n rowMatrix (...rowMat) {\n if (rowMat.length) {\n this._rowMatrix = rowMat[0];\n return this;\n }\n return this._rowMatrix;\n }\n\n /**\n * Used to set the layer config from outside or get current layer info\n *\n * @param {Object} type configuration of layer provided externally\n * @return {Object} either the layer or current instance\n * @memberof MatrixResolver\n */\n columnMatrix (...colMat) {\n if (colMat.length) {\n this._columnMatrix = colMat[0];\n return this;\n }\n return this._columnMatrix;\n }\n\n /**\n * Used to set the layer config from outside or get current layer info\n *\n * @param {Object} type configuration of layer provided externally\n * @return {Object} either the layer or current instance\n * @memberof MatrixResolver\n */\n valueMatrix (...valMat) {\n if (valMat.length) {\n this._valueMatrix = valMat[0];\n return this;\n }\n return this._valueMatrix;\n }\n\n /**\n *\n *\n * @param {*} facets\n * @return\n * @memberof MatrixResolver\n */\n facets (...facets) {\n if (facets.length) {\n Object.entries(facets[0]).forEach((e) => {\n this._facets[e[0]] = e[1];\n });\n return this;\n }\n return this._facets;\n }\n\n /**\n *\n *\n * @param {*} projections\n * @return\n * @memberof MatrixResolver\n */\n projections (...projections) {\n if (projections.length) {\n Object.entries(projections[0]).forEach((e) => {\n this._projections[e[0]] = e[1];\n });\n return this;\n }\n return this._projections;\n }\n\n /**\n *\n *\n * @param {*} config\n * @param {*} layerConfig\n * @return\n * @memberof MatrixResolver\n */\n optionalProjections (config, layerConfig) {\n const otherEncodings = {};\n const optionalProjections = [];\n const otherEncodingTypes = [SIZE, COLOR, SHAPE];\n\n otherEncodingTypes.forEach((type) => {\n if (config[type] && config[type].field) {\n const enc = config[type];\n otherEncodings[type] = enc.field;\n optionalProjections.push(enc.field);\n }\n });\n\n if (config[DETAIL]) {\n optionalProjections.push(...config.detail);\n }\n\n if (layerConfig.length) {\n layerConfig.forEach((layer) => {\n if (layer.encoding) {\n Object.values(layer.encoding).forEach((enc) => {\n if (enc && optionalProjections.indexOf(enc.field) === -1) {\n optionalProjections.push(enc.field ? enc.field : enc);\n }\n });\n }\n });\n }\n this.projections({ optionalProjections });\n return otherEncodings;\n }\n\n /**\n * return the normalized set of rows and facets and projections\n *\n * @param {Object} rows parameters needed to set horizontal axis consisiting of rows\n * @return {Object} facets, projections and normalized rows\n * @memberof MatrixResolver\n */\n horizontalAxis (rows, encoder) {\n if (rows) {\n this._horizontalAxis = setFacetsAndProjections(this, { type: ROW, fields: rows }, encoder);\n return this;\n }\n return this._horizontalAxis;\n }\n\n /**\n * return the normalized set of columns and facets and projections\n *\n * @param {Object} columns parameters needed to set vertical axis consisiting of columns\n * @return {Object} facets, projections and normalized columns\n * @memberof MatrixResolver\n */\n verticalAxis (columns, encoder) {\n if (columns) {\n this._verticalAxis = setFacetsAndProjections(this, { type: COL, fields: columns }, encoder);\n return this;\n }\n return this._verticalAxis;\n }\n\n /**\n * Gets the class definition of a particular cell type(if the particular type has been extended, that particular\n * definition is returned)\n *\n * @param {Object} cell cell whose class definition is to be retrieved\n * @return {Object} cell definition\n * @memberof MatrixResolver\n */\n getCellDef (cell) {\n const registry = this.registry();\n\n Object.values(registry).forEach((e) => {\n if (e.prototype instanceof cell) {\n cell = e;\n }\n });\n return cell;\n }\n\n /**\n * return a visual cell creator along with its axis information to be injected to the datamodel creation\n * function\n *\n * @param {Object} GeomCell Type of cell to be created\n * @return {Object} Created cell\n * @memberof MatrixResolver\n */\n valueCellsCreator (context) {\n // reset matrix layers\n this.matrixLayers([]);\n\n return (datamodel, fieldInfo, facets) => createValueCells(context, datamodel, fieldInfo, facets);\n }\n\n /**\n * Callback to be applied on each cell of a matrix of a particular type\n *\n * @param {string} matrixType type of matrix on which callback is to be applied\n * @param {Function} callback function to be applied to each cell\n * @memberof MatrixResolver\n */\n forEach (matrixType, callback) {\n this[matrixType]().forEach((row, rIndex) => {\n row.forEach((col, cIndex) => {\n callback(rIndex, cIndex, col);\n });\n });\n }\n\n /**\n *\n *\n * @return\n * @memberof MatrixResolver\n */\n getAllFields () {\n const retObj = this.projections();\n\n Object.entries(this.facets()).forEach((e) => {\n retObj[e[0]] = e[1];\n });\n return retObj;\n }\n\n /**\n *\n *\n * @memberof MatrixResolver\n */\n resetSimpleAxes () {\n return this.axes({\n x: new Set(),\n y: new Set()\n });\n }\n\n /**\n *\n *\n * @param {*} componentRegistry\n * @param {*} config\n * @memberof MatrixResolver\n */\n createUnits (componentRegistry, config) {\n const {\n globalConfig,\n alias\n } = config;\n const {\n layerRegistry,\n sideEffectRegistry\n } = componentRegistry;\n const {\n smartlabel: smartLabel,\n lifeCycleManager\n } = this.dependencies();\n // Provide the source for the matrix\n const units = [];\n // Setting unit configuration\n const unitConfig = extractUnitConfig(globalConfig || {});\n\n this.forEach(VALUE_MATRIX, (i, j, el) => {\n let unit = el.source();\n if (!unit) {\n unit = VisualUnit.create({\n layerRegistry,\n sideEffectRegistry\n }, {\n smartLabel,\n lifeCycleManager\n });\n el.source(unit);\n units.push(unit);\n }\n unit.parentAlias(alias);\n el.config(unitConfig);\n });\n\n lifeCycleManager.notify({ client: units, action: INITIALIZED, formalName: UNIT });\n return this.units(units);\n }\n\n /**\n *\n *\n * @param {*} config\n * @memberof MatrixResolver\n */\n setDomains (config, datamodel, encoders) {\n const {\n color,\n shape,\n size,\n globalConfig\n } = config;\n const groupBy = globalConfig.autoGroupBy;\n const {\n rowFacets,\n colFacets\n } = this.getAllFields();\n const encoding = {\n color,\n shape,\n size\n };\n const facetFields = [...rowFacets.map(e => e.toString()), ...colFacets.map(e => e.toString())];\n const retContext = {\n domains: encoders.simpleEncoder.getRetinalFieldsDomain(datamodel, encoding, facetFields, groupBy),\n axes: this.axes(),\n encoding\n };\n encoders.retinalEncoder.setCommonDomain(retContext);\n return this;\n }\n\n /**\n *\n *\n * @return\n * @memberof MatrixResolver\n */\n getRetinalAxes () {\n const {\n color,\n shape,\n size\n } = this.axes();\n\n return {\n color: [...color],\n shape: [...shape],\n size: [...size]\n };\n }\n\n /**\n *\n *\n * @param {*} type\n * @return\n * @memberof MatrixResolver\n */\n getSimpleAxes (type) {\n return this.axes()[`${type}`];\n }\n\n /**\n *\n *\n * @param {*} datamodel\n * @param {*} config\n * @memberof MatrixResolver\n */\n createRetinalAxes (fieldsConfig, config, encoders) {\n const layerConfig = this.layerConfig();\n this.optionalProjections(config, layerConfig);\n const retinalAxes = encoders.retinalEncoder.createAxis({\n fieldsConfig,\n config,\n axes: this.axes()\n });\n const {\n lifeCycleManager\n } = this.dependencies();\n\n [COLOR, SHAPE, SIZE].forEach((e) => {\n this.axes()[e] = retinalAxes[e];\n });\n\n lifeCycleManager.notify({ client: this.axes(), action: INITIALIZED, formalName: AXIS });\n lifeCycleManager.notify({ client: this.units(), action: BEFORE_UPDATE, formalName: UNIT });\n\n const units = [];\n const matrixLayers = this.matrixLayers();\n\n this.forEach(VALUE_MATRIX, (i, j, el) => {\n el.axes(retinalAxes);\n el.source() && el.source().retinalFields(config);\n el.layerDef(encoders.retinalEncoder.getLayerConfig(config, matrixLayers[i][j]));\n el.updateModel();\n\n units.push(el.source());\n });\n\n lifeCycleManager.notify({ client: units, action: UPDATED, formalName: UNIT });\n return this;\n }\n\n /**\n *\n *\n * @param {*} placeholders\n * @param {*} fieldNames\n * @return\n * @memberof MatrixResolver\n */\n createHeaders (placeholders, fieldNames) {\n let bottomLeft = [];\n let bottomRight = [];\n const {\n rows,\n columns\n } = placeholders;\n const {\n smartlabel: labelManager,\n lifeCycleManager\n } = this.dependencies();\n const TextCell = this.getCellDef(this.registry().TextCell);\n const BlankCell = this.getCellDef(this.registry().BlankCell);\n const [leftRows, rightRows] = rows;\n const [topCols, bottomCols] = columns;\n const rowHeaders = fieldNames.rows;\n // Headers and footers are created based on the rows. Thereafter, using the column information\n // they are tabularized into the current structure\n const headers = {\n left: headerCreator(leftRows, rowHeaders[0], TextCell, labelManager),\n right: headerCreator(rightRows, rowHeaders[1], TextCell, labelManager)\n };\n const footers = {\n left: leftRows.length > 0 ? leftRows[0].map(() => new BlankCell()) : [],\n right: rightRows.length > 0 ? rightRows[0].map(() => new BlankCell()) : []\n };\n const [topLeft, topRight] = [LEFT, RIGHT].map(type => topCols.map((col, i) => {\n if (i === topCols.length - 1) {\n return headers[type];\n }\n return footers[type];\n }));\n\n // Creating only bottom matrices if there is no information on the top\n if (topCols.length === 0) {\n [bottomLeft, bottomRight] = [LEFT, RIGHT].map(type => bottomCols.map((col, i) => {\n if (i === 0) {\n return headers[type];\n }\n return footers[type];\n }));\n } else {\n bottomLeft = bottomCols.map(() => (leftRows.length > 0 ? leftRows[0].map(() => new BlankCell()) : []));\n bottomRight = bottomCols.map(() => (rightRows.length > 0 ? rightRows[0].map(() => new BlankCell()) : []));\n }\n\n lifeCycleManager.notify({\n client: [topLeft, topRight, bottomLeft, bottomRight],\n action: INITIALIZED,\n formalName: FACET_HEADERS\n });\n\n return { topLeft, topRight, bottomLeft, bottomRight };\n }\n\n /**\n *\n *\n * @param {*} datamodel\n * @param {*} config\n * @param {*} componentRegistry\n * @param {*} encoders\n * @return\n * @memberof MatrixResolver\n */\n getMatrices (datamodel, config, componentRegistry, encoders) {\n const context = {\n datamodel,\n componentRegistry,\n encoders,\n resolver: this\n };\n\n return computeMatrices(context, config);\n }\n}\n","/**\n *\n *\n * @export\n * @class ValueMatrix\n */\nclass ValueMatrix {\n\n /**\n *Creates an instance of ValueMatrix.\n * @param {*} matrixArr\n * @memberof ValueMatrix\n */\n constructor (matrixArr) {\n const instancesById = {};\n\n this.matrix(matrixArr);\n this.filter(() => true);\n\n this.each((el, rIdx, cIdx) => {\n const cellValue = el.valueOf();\n if (cellValue && cellValue.id) {\n const id = cellValue.id();\n instancesById[id] = {\n instance: cellValue,\n rowIndex: rIdx,\n colIndex: cIdx\n };\n }\n });\n\n this.instancesById(instancesById);\n }\n\n /**\n *\n *\n * @param {*} id\n * @return\n * @memberof ValueMatrix\n */\n instancesById (...id) {\n if (id.length) {\n this._instancesById = id[0];\n return this;\n }\n return this._instancesById;\n }\n\n /**\n *\n *\n * @param {*} m\n * @return\n * @memberof ValueMatrix\n */\n matrix (...matrix) {\n if (matrix.length) {\n this._matrix = matrix[0];\n return this;\n }\n return this._matrix;\n }\n\n /**\n *\n *\n * @param {*} fn\n * @return\n * @memberof ValueMatrix\n */\n filter (...fn) {\n if (fn.length) {\n this._filterFn = fn[0];\n return this;\n }\n return this._filterFn;\n }\n\n /**\n *\n *\n * @return\n * @memberof ValueMatrix\n */\n width () {\n let rowWidth = 0;\n\n this.matrix().forEach((row) => {\n let currentRowWidth = 0;\n row.forEach((cell) => {\n currentRowWidth += cell.getLogicalSpace().width;\n });\n rowWidth = Math.max(rowWidth, currentRowWidth);\n });\n return rowWidth;\n }\n\n /**\n *\n *\n * @return\n * @memberof ValueMatrix\n */\n height () {\n let rowHeight = 0;\n\n this.matrix().forEach((row) => {\n let currentRowHeight = 0;\n row.forEach((cell) => {\n currentRowHeight = Math.max(currentRowHeight, cell.getLogicalSpace().height);\n });\n rowHeight += currentRowHeight;\n });\n return rowHeight;\n }\n\n /**\n *\n *\n * @param {*} fn\n * @return\n * @memberof ValueMatrix\n */\n each (fn) {\n const matrix = this.matrix();\n const filterFn = this.filter();\n\n matrix.forEach((row, rIndex) => {\n row.forEach((col, cIndex) => {\n if (filterFn(col)) {\n fn(col, rIndex, cIndex, matrix);\n }\n });\n });\n return this;\n }\n\n /**\n *\n *\n * @param {*} id\n * @return\n * @memberof ValueMatrix\n */\n findPlaceHolderById (id) {\n return this.instancesById()[id];\n }\n\n /**\n *\n *\n * @return\n * @memberof ValueMatrix\n */\n getMatrixArray () {\n return this.matrix();\n }\n}\n\nexport default ValueMatrix;\n","import { RetinalEncoder } from '../encoder';\nimport { DATA_UPDATE_COUNTER } from '../enums/defaults';\nimport { getEncoder, getBorders } from '../group-helper';\nimport ValueMatrix from './value-matrix';\nimport localOptions from './local-options';\n\nconst sanitizeRetinalConfig = (retinalConf) => {\n const conf = {};\n for (const key in retinalConf) {\n const confValue = retinalConf[key];\n if (typeof confValue === 'string' || !confValue) {\n conf[key] = {\n field: retinalConf[key]\n };\n } else {\n conf[key] = confValue;\n }\n }\n return conf;\n};\n\n/**\n *\n *\n * @param {*} placeholder\n * @memberof VisualGroup\n */\nconst setMatrixInstances = (context, placeholder) => {\n context._composition.matrices = {\n value: new ValueMatrix(placeholder.values),\n left: new ValueMatrix(placeholder.rows[0]),\n right: new ValueMatrix(placeholder.rows[1]),\n top: new ValueMatrix(placeholder.columns[0]),\n bottom: new ValueMatrix(placeholder.columns[1])\n };\n return context;\n};\n\n/**\n *\n *\n * @param {*} context\n * @returns\n */\nexport const setupChangeListeners = (context) => {\n context.store().registerImmediateListener([...Object.keys(localOptions), DATA_UPDATE_COUNTER], (...params) => {\n const datamodel = context.data();\n const [config, rows, columns, color, shape, size, detail, layers, transform] = params;\n\n if (datamodel && rows[1] && columns[1]) {\n // Get the resolver for the matrices\n const resolver = context.resolver();\n // Prepare configuration for matrix preparation\n let matrixConfig = {\n selection: context.selection(),\n alias: context.alias(),\n globalConfig: config[1] || {},\n rows: rows[1],\n columns: columns[1],\n detail: detail[1],\n layers: layers[1],\n transform: transform[1]\n };\n\n const retinalConfig = sanitizeRetinalConfig({\n color: color[1],\n shape: shape[1],\n size: size[1]\n });\n\n matrixConfig = Object.assign(matrixConfig, retinalConfig);\n // Create the encoders for the group\n const encoders = {};\n encoders.retinalEncoder = new RetinalEncoder();\n encoders.simpleEncoder = getEncoder(layers[1]);\n\n // Set the group type\n context.groupType(encoders.simpleEncoder.constructor.type());\n\n // Get sanitized fields as instances of the Vars Class\n const fields = encoders.simpleEncoder.fieldSanitizer(datamodel, matrixConfig);\n encoders.simpleEncoder.setAxisAndHeaders(config[1] ? config[1].axisFrom : {}, fields);\n // Setting layers for the code\n layers[1] && resolver.layerConfig(layers[1]);\n // Set the row and column axes\n resolver.horizontalAxis(fields.rows, encoders).verticalAxis(fields.columns, encoders);\n // Getting the placeholders\n const placeholderInfo = resolver.getMatrices(datamodel, matrixConfig, context.registry(), encoders);\n context._groupedDataModel = placeholderInfo.dataModels.groupedModel;\n // Set the selection object\n context.selection(placeholderInfo.selection);\n\n // Create retinal axes\n resolver.createRetinalAxes(placeholderInfo.dataModels.parentModel.getFieldsConfig(), retinalConfig,\n encoders);\n\n // Domains are evaluated for each of the axes for commonality\n resolver.setDomains(matrixConfig, placeholderInfo.dataModels, encoders);\n\n // Create matrix instances\n setMatrixInstances(context, placeholderInfo);\n\n // Prepare corner matrices\n context.cornerMatrices(resolver.createHeaders(placeholderInfo, fields));\n\n // Set placeholder information\n context.placeholderInfo(placeholderInfo);\n\n context._composition.axes = resolver.axes();\n context.metaData({\n border: getBorders(placeholderInfo, encoders.simpleEncoder)\n });\n }\n return context;\n });\n return context;\n};\n","import { DATA_UPDATE_COUNTER } from '../enums/defaults';\n\nexport const PROPS = {\n alias: {},\n data: {\n sanitization: (context, value) => {\n if (context._data !== value) {\n const store = context.store();\n let hasDataUpdated = store.get(DATA_UPDATE_COUNTER);\n store.commit(DATA_UPDATE_COUNTER, ++hasDataUpdated);\n }\n return value;\n }\n },\n cornerMatrices: {},\n groupType: {},\n matrixInstance: {},\n metaData: {},\n placeholderInfo: {},\n resolver: {},\n registry: {\n sanitization: (context, value) => {\n if (context.resolver) {\n context.resolver().registry(value.cellRegistry);\n }\n return value;\n }\n },\n selection: {},\n store: {}\n};\n","import { transactor, generateGetterSetters } from 'muze-utils';\nimport localOptions from './local-options';\nimport { SimpleGroup } from '../simple-group';\nimport {\n MatrixResolver,\n initStore,\n findInGroup\n} from '../group-helper';\nimport { setupChangeListeners } from './change-listener';\nimport { PROPS } from './props';\nimport {\n CONFIG,\n MOUNT,\n RETINAL,\n Y\n} from '../enums/constants';\n\n/**\n * This class is used to create an instance of a visual group.\n * It extends the SimpleGroup (which is an interface). The visual group takes in a datamodel,\n * and a set of rows and columns, alongwith optional paramters (like color, size, shape).\n *\n * @class VisualGroup\n */\nclass VisualGroup extends SimpleGroup {\n\n /**\n * Creates an instance of VisualGroup. Requires dependencies and other registry options for placeholders\n * and layers that create individual units\n * @param {Object} registry Key value pair of compostions for the group\n * @param {Object} dependencies Dependencies needed to run the group\n * @memberof VisualGroup\n */\n constructor (registry, dependencies) {\n super();\n\n const {\n componentSubRegistry\n } = registry;\n\n this._dependencies = dependencies;\n // Generate getter/setter methods for all properties of the class\n // One can get each property by calling the method and can set it\n // by passing paramaters for the same. Thus, one can chain setter\n // getter methods.\n generateGetterSetters(this, PROPS);\n // Populate the store with default values\n this.store(initStore());\n\n // initialize group compositions\n this._composition = {};\n // store reference to data\n this._data = [];\n // matrix instance store each of the matrices\n this._matrixInstance = {};\n // store reference to mountpoint\n this._mount = null;\n // selection object that takes care of updating of components\n this._selection = {};\n // stores info about the placeholders generated after creation of matrices\n this._placeholderInfo = {};\n // corner matrices are the headers/footers for the application\n this._cornerMatrices = {};\n // Create instance of matrix resolver\n this.resolver(new MatrixResolver(this._dependencies));\n\n // Getting indiviual registered items\n this.registry({\n layerRegistry: componentSubRegistry.layerRegistry.get(),\n cellRegistry: componentSubRegistry.cellRegistry.get()\n });\n // Add local options to the store\n transactor(this, localOptions, this.store().model);\n // Register listeners\n setupChangeListeners(this);\n }\n\n matrixInstance (...matrices) {\n if (matrices.length) {\n return this;\n }\n return this.composition().matrices;\n }\n\n /**\n * Returns the composition of the Group\n *\n * @readonly\n * @memberof VisualGroup\n */\n composition (...params) {\n if (params.length) {\n return this;\n }\n return this._composition;\n }\n\n /**\n * Locks the model to prevent change listeners to be triggered until unlocked\n *\n * @return {Object} Instance of class VisualGroup\n * @memberof VisualGroup\n */\n lockModel () {\n this.store().model.lock();\n return this;\n }\n\n /**\n * Unlocks the model so that all change listeners can be triggered\n *\n * @return {Object} Instance of class VisualGroup\n * @memberof VisualGroup\n */\n unlockModel () {\n this.store().model.unlock();\n return this;\n }\n\n /**\n *\n *\n * @param {*} variable\n * @return\n * @memberof VisualGroup\n */\n where (variable) {\n return findInGroup(variable, this.resolver().getAllFields());\n }\n\n /**\n *\n *\n * @param {*} type\n * @return\n * @memberof VisualGroup\n */\n getAxes (type) {\n if (type === RETINAL) {\n return this.resolver().getRetinalAxes();\n }\n return this.resolver().getSimpleAxes(type);\n }\n\n /**\n *\n *\n * @return\n * @memberof VisualGroup\n */\n getCells (type) {\n return this.resolver()[`${type}Cells`]();\n }\n\n /**\n *\n *\n * @param {*} channel\n * @return\n * @memberof VisualGroup\n */\n getFieldsFromChannel (channel) {\n const {\n rowProjections,\n colProjections\n } = this.resolver().getAllFields();\n\n return channel === Y ? rowProjections : colProjections;\n }\n\n /**\n *\n *\n * @param {*} facetKey\n * @return\n * @memberof VisualGroup\n */\n getCellsByFacetKey (facetKey) {\n const resolver = this.resolver();\n const cells = resolver.rowCells()[facetKey] || resolver.colCells()[facetKey] || [];\n return cells;\n }\n\n /**\n *\n *\n * @param {*} facetKey\n * @return\n * @memberof VisualGroup\n */\n getAxesByFacetKey (axisType, facetKey) {\n const resolver = this.resolver();\n const cells = resolver.rowCells()[facetKey] || resolver.colCells()[facetKey];\n const axes = cells[0].valueOf().axes()[axisType] || [];\n\n return axes;\n }\n\n /**\n * This method is used to return a serialized representation of the instance's properties.\n *\n * @return {Object} Object with config proprties.\n * @memberof VisualGroup\n */\n serialize () {\n const store = this.store();\n\n return {\n [CONFIG]: store.get(CONFIG),\n [MOUNT]: store.get(MOUNT)\n };\n }\n\n getGroupByData () {\n return this._groupedDataModel;\n }\n}\n\nexport default VisualGroup;\n","import { PersistentBehaviour, SELECTION } from '@chartshq/muze-firebolt';\n\nexport default class SelectBehaviour extends PersistentBehaviour {\n static formalName () {\n return 'select';\n }\n\n setSelectionSet (addSet, selectionSet) {\n if (addSet === null) {\n selectionSet.reset();\n } else if (addSet.length) {\n // new add set\n const existingRemoveSet = addSet.filter(d => selectionSet._set[d] === SELECTION.SELECTION_OLD_EXIT\n || selectionSet._set[d] === SELECTION.SELECTION_NEW_EXIT);\n // existing add set\n if (existingRemoveSet.length) {\n selectionSet.updateEntry();\n selectionSet.add(existingRemoveSet);\n } else {\n selectionSet.updateExit();\n selectionSet.remove(addSet);\n }\n const { exitSet } = selectionSet.getSets();\n const mergedExitSet = [...new Set(exitSet[1]), ...new Set(exitSet[0])];\n const completeSetCount = selectionSet.getCompleteSet().length;\n if (exitSet[1].length !== completeSetCount && mergedExitSet.length === completeSetCount) {\n selectionSet.reset();\n }\n } else {\n selectionSet.remove(selectionSet.getCompleteSet());\n }\n return this;\n }\n}\n","import { BEHAVIOURS, ACTIONS } from '@chartshq/muze-firebolt';\n\nconst CLASSPREFIX = 'muze';\n\nexport const actionBehaviourMap = {\n [ACTIONS.DRAG]: {\n target: `.${CLASSPREFIX}-gradient-rect`,\n behaviours: [BEHAVIOURS.BRUSH]\n },\n [ACTIONS.HOVER]: {\n target: [`.${CLASSPREFIX}-legend-columns`],\n behaviours: [BEHAVIOURS.HIGHLIGHT]\n },\n [ACTIONS.CLICK]: {\n target: [`.${CLASSPREFIX}-legend-columns`],\n behaviours: [BEHAVIOURS.SELECT]\n }\n};\n\nexport const propagationBehaviourMap = {\n [BEHAVIOURS.SELECT]: BEHAVIOURS.FILTER,\n [BEHAVIOURS.BRUSH]: BEHAVIOURS.HIGHLIGHT\n};\n","import * as BEHAVIOURS from '../enums/behaviours';\nimport * as sideEffects from '../enums/side-effects';\n\nexport const behaviourEffectMap = {\n [BEHAVIOURS.BRUSH]: [sideEffects.SELECTIONBOX, {\n name: sideEffects.Highlighter,\n options: {\n strategy: 'fade'\n }\n }],\n [BEHAVIOURS.HIGHLIGHT]: [sideEffects.Highlighter],\n select: [{\n name: sideEffects.Highlighter,\n options: {\n strategy: 'fade'\n }\n }]\n};\n\nexport const propagationSideEffects = {\n [BEHAVIOURS.BRUSH]: [{\n name: sideEffects.Highlighter,\n options: {\n strategy: 'fade'\n }\n }],\n [BEHAVIOURS.HIGHLIGHT]: [{\n name: sideEffects.Highlighter,\n options: {\n strategy: 'fade'\n }\n }],\n [BEHAVIOURS.SELECT]: ['filter']\n};\n\n","export const BRUSH = 'brush';\nexport const HIGHLIGHT = 'highlight';\nexport const TOOLTIP = 'tooltip';\nexport const FILTER = 'filter';\nexport const SELECT = 'select';\n\n","export const SELECTIONBOX = 'selectionBox';\nexport const Highlighter = 'highlighter';\n\n","export const CLASSPREFIX = 'muze';\nexport const IDFIELD = '__id__';\nexport const CONFIG = 'config';\nexport const DATAMODEL = 'dataModel';\nexport const AXES = 'axes';\nexport const LAYERDEFS = 'layerDef';\nexport const WIDTH = 'width';\nexport const HEIGHT = 'height';\nexport const MOUNTPOINT = 'mountPoint';\nexport const GRIDLINEPARENTGROUPCLASS = 'grid-lines';\nexport const TRANSFORM = 'transform';\nexport const CONSOLIDATED = 'consolidated';\nexport const FRAGMENTED = 'fragmented';\nexport const DEFAULTCOLOR = '#F44336';\nexport const DEFAULTSIZE = 50;\nexport const DEFAULTSHAPE = 'circle';\nexport const STEP = 'step';\nexport const GRADIENT = 'gradient';\nexport const ORDINAL = 'ordinal';\nexport const SCALE_FUNCTIONS = {\n size: 'getSize',\n shape: 'getShape',\n color: 'getColor'\n};\nexport const TOP = 'top';\nexport const LEFT = 'left';\nexport const RIGHT = 'right';\nexport const BOTTOM = 'bottom';\nexport const HORIZONTAL = 'horizontal';\nexport const VERTICAL = 'vertical';\nexport const CENTER = 'center';\nexport const VALUE = 'value';\nexport const PATH = 'path';\nexport const SHAPE = 'shape';\nexport const ICON = 'icon';\nexport const RECT = 'rect';\nexport const START = 'start';\nexport const UPPER = 'upper';\nexport const LOWER = 'lower';\nexport const END = 'end';\nexport const SIZE = 'size';\nexport const DISCRETE = 'discrete';\nexport const MEASURE = 'measure';\n\n","import { assembleModelFromIdentifiers, getDataModelFromRange } from 'muze-utils';\nimport { propagationBehaviourMap } from './action-behaviour-map';\nimport { propagationSideEffects } from './behaviour-effect-map';\nimport { STEP, GRADIENT, DISCRETE, MEASURE } from '../enums/constants';\n\nexport const propagate = (firebolt, action, selectionSet, config = {}) => {\n let propagationData;\n const type = firebolt.context.constructor.type();\n const payload = config.payload;\n const data = firebolt.context.data();\n const metaData = firebolt.context.metaData();\n const fieldType = metaData.getData().schema[0].type;\n\n const propPayload = {};\n const sourceId = firebolt.context._id;\n propPayload.action = propagationBehaviourMap[action] || action;\n propPayload.sideEffects = propagationSideEffects[action];\n propPayload.sourceCanvas = firebolt.context.canvasAlias();\n const isMutableAction = firebolt._actions.behavioural[propPayload.action].constructor.mutates();\n if (payload.criteria === null) {\n propagationData = null;\n } else {\n const entrySet = selectionSet.mergedEnter;\n let values = data.filter(d => entrySet.uids.indexOf(d.id) !== -1).map(d => d.value);\n if (type === STEP || (type === DISCRETE && fieldType === MEASURE)) {\n const field = Object.keys(payload.criteria || {})[0];\n values = data.filter(d => entrySet.uids.indexOf(d.id) !== -1).map(d => d.range);\n propagationData = values.length ? metaData.select((fields) => {\n let check = false;\n for (let i = 0; i < values.length; i++) {\n check = fields[field].value >= values[i][0] && fields[field].value <= values[i][1];\n if (check === true) {\n break;\n }\n }\n return check;\n }, {\n saveChild: false\n }) : null;\n } else if (type === GRADIENT) {\n propagationData = getDataModelFromRange(metaData, payload.criteria);\n } else if (values.length) {\n propagationData = assembleModelFromIdentifiers(metaData, [payload.criteria[0], ...values.map(d => [d])]);\n } else {\n propPayload.criteria = null;\n propagationData = metaData.select(() => true, {\n saveChild: false\n });\n }\n }\n\n let propagateInterpolatedValues = false;\n\n if (propagationData) {\n const schema = propagationData.getSchema();\n propagateInterpolatedValues = schema.every(d => d.type === fieldType.MEASURE);\n }\n\n const propConfig = {\n sourceId: `legend-${sourceId}`,\n payload: propPayload,\n criteria: propPayload.criteria === null ? null : propagationData,\n isMutableAction,\n propagateInterpolatedValues,\n action: propPayload.action\n };\n\n metaData.propagate(propagationData, propConfig, true);\n};\n","import { Firebolt } from '@chartshq/muze-firebolt';\nimport { propagate } from './helper';\nimport { STEP, GRADIENT } from '../enums/constants';\n\n/**\n * This class manages the interactions of legend.\n * @export\n * @class LegendFireBolt\n * @extends {Firebolt}\n */\nexport class LegendFireBolt extends Firebolt {\n constructor (...params) {\n super(...params);\n this.initializeSideEffects();\n }\n\n getPropagationSelectionSet (selectionSet) {\n return selectionSet[0];\n }\n\n propagate (behaviourName, payload, selectionSet) {\n propagate(this, behaviourName, selectionSet, {\n payload\n });\n }\n\n getAddSetFromCriteria (criteria) {\n let values;\n let uniqueIds;\n const type = this.context.constructor.type();\n\n if (criteria === null) {\n uniqueIds = null;\n } else if (type === STEP) {\n values = Object.values(criteria);\n uniqueIds = this.context.data().filter(d => values.indexOf(d.range) !== -1).map(d => d.id);\n } else if (type === GRADIENT) {\n uniqueIds = [];\n } else {\n values = criteria[1];\n if (values) {\n uniqueIds = this.context.data().filter(d => values.indexOf(d.value) !== -1).map(d => d.id);\n } else {\n values = Object.values(criteria);\n uniqueIds = this.context.data().filter(d => values.indexOf(d.range) !== -1).map(d => d.id);\n }\n }\n return {\n uids: uniqueIds,\n model: null\n };\n }\n\n getFullData () {\n return null;\n }\n}\n","import {\n getEvent,\n getD3Drag\n } from 'muze-utils';\n\n/**\n * Adds dragging action to the target element.\n * @param {firebolt} firebolt firebolt\n * @param {SVGElement} targetEl Element on which brushing action is needed.\n * @param {Array} behaviours Array of behaviours\n */\n/* istanbul ignore next */ const drag = firebolt => (targetEl, behaviours) => {\n let startPos = {};\n let endPos = {};\n let payload;\n const d3Drag = getD3Drag();\n const context = firebolt.context;\n const boundingBox = context.measurement().gradientDimensions;\n const axisType = context.config().align === 'horizontal' ? 'x' : 'y';\n const axisScale = context.axis().source().scale();\n const rangeShifter = axisScale.range()[axisType === 'x' ? 0 : 1];\n\n targetEl.call(d3Drag().on('start', () => {\n const event = getEvent();\n startPos = {\n x: event.x,\n y: event.y\n };\n }).on('drag', () => {\n const event = getEvent();\n\n endPos = {\n x: event.x,\n y: event.y\n };\n endPos.x = Math.max(0, Math.min(endPos.x, boundingBox.width));\n endPos.y = Math.max(0, Math.min(endPos.y, boundingBox.height));\n\n payload = {\n criteria: {\n [context.fieldName()]: [axisScale.invert(startPos[axisType] + rangeShifter * 2),\n axisScale.invert(endPos[axisType] + rangeShifter * 2)].sort((a, b) => a - b)\n }\n };\n behaviours.forEach(behaviour => firebolt.dispatchBehaviour(behaviour, payload));\n }).on('end', () => {\n const event = getEvent();\n\n endPos = {\n x: event.x,\n y: event.y\n };\n endPos.x = Math.max(0, Math.min(endPos.x, boundingBox.width));\n endPos.y = Math.max(0, Math.min(endPos.y, boundingBox.height));\n if (startPos[axisType] === endPos[axisType]) {\n payload = {\n criteria: {}\n };\n } else {\n payload = {\n criteria: {\n [context.fieldName()]: [axisScale.invert(startPos[axisType] + rangeShifter * 2),\n axisScale.invert(endPos[axisType] + rangeShifter * 2)].sort((a, b) => a - b)\n }\n };\n }\n behaviours.forEach(behaviour => firebolt.dispatchBehaviour(behaviour, payload));\n }));\n};\n\nexport default drag;\n","/**\n * Adds mouse interactions to target element.\n * @param {Firebolt} Firebolt instance of firebolt.\n * @param {SVGElement} targetEl Element on which the event listeners will be attached.\n * @param {Array} behaviours Array of behaviours\n */\n/* istanbul ignore next */ const hover = firebolt => (targetEl, behaviours) => {\n const dispatchBehaviour = function (args) {\n const payload = {\n criteria: firebolt.context.getCriteriaFromData(args)\n };\n behaviours.forEach(behaviour => firebolt.dispatchBehaviour(behaviour, payload));\n event.stopPropagation();\n };\n\n targetEl.on('mouseover', dispatchBehaviour)\n .on('mousemove', dispatchBehaviour)\n .on('mouseout', () => {\n behaviours.forEach(behaviour => firebolt.dispatchBehaviour(behaviour, {\n criteria: null\n }));\n event.stopPropagation();\n });\n};\n\nexport default hover;\n","/**\n * Adds mouse interactions to target element.\n * @param {VisualUnit} instance instance of visual unit.\n * @param {SVGElement} targetEl Element on which the event listeners will be attached.\n * @param {Array} behaviours Array of behaviours\n */\nconst click = firebolt => (targetEl, behaviours) => {\n const dispatchBehaviour = function (args) {\n const payload = {\n criteria: firebolt.context.getCriteriaFromData(args)\n };\n behaviours.forEach(behaviour => firebolt.dispatchBehaviour(behaviour, payload));\n };\n\n targetEl.on('click', dispatchBehaviour);\n};\n\nexport default click;\n","import drag from './drag';\nimport hover from './hover';\nimport click from './click';\nimport * as ACTIONNAMES from '../../enums/actions';\n\nexport const physicalActions = {\n [ACTIONNAMES.DRAG]: drag,\n [ACTIONNAMES.HOVER]: hover,\n [ACTIONNAMES.CLICK]: click\n};\n\n","export const DRAG = 'drag';\nexport const HOVER = 'hover';\nexport const SELECTIONDRAG = 'selectiondrag';\nexport const CLICK = 'click';\n","import {\n getMousePos,\n getEvent,\n getD3Drag\n } from 'muze-utils';\nimport { HEIGHT, WIDTH, HORIZONTAL } from '../../enums/constants';\n\nconst getSelectionCriteria = (subject, axis, measures) => {\n let criteria = [];\n const {\n axisScale,\n axisType\n } = axis;\n const {\n startPos,\n endPos,\n selectionBoxMeasure,\n drawingInfMeasure,\n offset\n } = measures;\n const subjectStartPoint = subject[axisType];\n\n if (startPos[axisType] === endPos[axisType]) {\n criteria = [];\n } else if (subjectStartPoint + selectionBoxMeasure >= drawingInfMeasure + offset) {\n criteria = [axisScale.invert(drawingInfMeasure + offset - selectionBoxMeasure),\n axisScale.invert(drawingInfMeasure + offset)];\n } else if (subjectStartPoint - offset < offset) {\n criteria = [axisScale.invert(offset * 2), axisScale.invert(selectionBoxMeasure + offset * 2)];\n } else {\n criteria = [axisScale.invert(subjectStartPoint), axisScale.invert(subjectStartPoint + selectionBoxMeasure)];\n }\n axisType === 'x' ? criteria : criteria.reverse();\n return criteria;\n};\n\nexport const selectionBoxDrag = firebolt => (targetEl, behaviours) => {\n let startPos = {};\n let payload;\n const endPos = {};\n const d3Drag = getD3Drag();\n const context = firebolt.context;\n const axisScale = context.axis().source().scale();\n const axisType = context.config().align === HORIZONTAL ? 'x' : 'y';\n const drawingInfMeasure = context.measurement().gradientDimensions[axisType === 'x' ?\n WIDTH : HEIGHT];\n const offset = axisScale.range()[axisType === 'x' ? 0 : 1];\n const measures = {\n drawingInfMeasure,\n offset\n };\n let subject = {};\n\n targetEl.call(d3Drag().on('start', function () {\n const event = getEvent();\n startPos = getMousePos(this, event.sourceEvent);\n subject = event.subject;\n }).on('drag', () => {\n const event = getEvent();\n const selectionBoxMeasure = subject[axisType === 'x' ? WIDTH : HEIGHT];\n\n subject.x += event.dx;\n subject.y += event.dy;\n\n measures.selectionBoxMeasure = selectionBoxMeasure;\n measures.startPos = startPos;\n measures.endPos = endPos;\n const criteria = getSelectionCriteria(subject, { axisScale, axisType }, measures);\n\n payload = {\n criteria: {\n [context.fieldName()]: criteria\n },\n fadeOut: true\n };\n firebolt.dispatchBehaviour(behaviours[0], payload);\n }).on('end', () => {\n const event = getEvent();\n const selectionBoxMeasure = subject[axisType === 'x' ? WIDTH : HEIGHT];\n measures.selectionBoxMeasure = selectionBoxMeasure;\n measures.startPos = startPos;\n measures.endPos = endPos;\n const criteria = getSelectionCriteria(event, { axisScale, axisType }, measures);\n payload = {\n criteria: {\n [context.fieldName()]: criteria\n },\n fadeOut: true,\n config: {\n transition: {\n duration: 200\n }\n }\n };\n firebolt.dispatchBehaviour(behaviours[0], payload);\n }));\n};\n\n","import { makeElement } from 'muze-utils';\nimport { SpawnableSideEffect } from '@chartshq/muze-firebolt';\nimport { CLASSPREFIX, HEIGHT, WIDTH, HORIZONTAL, RECT } from '../../../enums/constants';\nimport { SELECTIONBOX } from '../../../enums/side-effects';\nimport { selectionBoxDrag } from '../../physical/selection-box-drag';\nimport './styles.scss';\n\n/**\n * This class is used to create a selection box which is used by visual unit for brushing and\n * selection in the canvas.\n * @class SelectionBox\n */\n/* istanbul ignore next */ class SelectionBox extends SpawnableSideEffect {\n static formalName () {\n return SELECTIONBOX;\n }\n\n /**\n * It returns the default configuration needed by selectionbox.\n * @return {Object} Default configuration of the selection box.\n */\n static defaultConfig () {\n return {\n className: 'legend-selection-box',\n classPrefix: CLASSPREFIX\n };\n }\n\n /**\n * Draws the selectionbox with the specified dimensions.\n */\n /* istanbul ignore next */ apply (selectionSet, payload) {\n let x;\n let y;\n let width;\n let height;\n const firebolt = this.firebolt;\n const context = firebolt.context;\n const config = this.config();\n const axis = context.axis().source();\n const className = `${config.classPrefix}-${config.className}`;\n\n const domain = payload.criteria[firebolt.context.fieldName()];\n const axisScale = axis.scale();\n const range = domain ? [axis.getScaleValue(domain[0]), axis.getScaleValue(domain[1])] : [];\n\n const axisType = context.config().align === HORIZONTAL ? 'x' : 'y';\n\n const gradientDimension = firebolt.context.measurement().gradientDimensions[axisType === 'x' ?\n HEIGHT : WIDTH];\n\n const rangeShifter = axisScale.range()[axisType === 'x' ? 0 : 1];\n const legendGradContainer = context.getDrawingContext().svgContainer;\n const legendSelGroup = makeElement(legendGradContainer, 'g', [1], `${config.classPrefix}-selection-box-group`);\n\n if (firebolt.context.config().align === HORIZONTAL) {\n x = range[0] - rangeShifter || 0;\n y = 0;\n width = range[1] - range[0] || 0;\n height = gradientDimension;\n } else {\n x = 0;\n y = range[1] - rangeShifter || 0;\n height = range[0] - range[1] || 0;\n width = gradientDimension;\n }\n const enterFn = function (el) {\n selectionBoxDrag(firebolt)(el, ['brush']);\n };\n const selBox = makeElement(legendSelGroup, RECT, [{ domain, x, y, width, height }], className,\n { enter: enterFn });\n selBox.attr('y', y)\n .attr('x', x)\n .attr(WIDTH, width)\n .attr(HEIGHT, height);\n }\n}\n\nexport default SelectionBox;\n\n","import { selectElement } from 'muze-utils';\n\nexport const strategies = (firebolt) => {\n const context = firebolt.context;\n const classed = (set, className, change) => {\n const classPrefix = context.config().classPrefix;\n selectElement(context.mount())\n .selectAll(`.${classPrefix}-legend-columns`)\n .filter(d => set.uids.indexOf(d.id) !== -1)\n .selectAll('div')\n .classed(className, change);\n };\n\n return {\n fade: (set, config = {}) => {\n const classPrefix = context.config().classPrefix;\n if (!set.mergedEnter.length && !set.mergedExit.length) {\n classed(set.completeSet, config.className || `${classPrefix}-legend-fadeout`, false);\n } else {\n classed(set.mergedExit, config.className || `${classPrefix}-legend-brighten`, false);\n classed(set.mergedExit, config.className || `${classPrefix}-legend-fadeout`, true);\n classed(set.mergedEnter, config.className || `${classPrefix}-legend-fadeout`, false);\n }\n },\n brighten: (set, config = {}) => {\n const classPrefix = context.config().classPrefix;\n if (!set.mergedEnter.length && !set.mergedExit.length) {\n classed(set.completeSet, config.className || `${classPrefix}-legend-brighten`, false);\n } else {\n classed(set.mergedEnter, config.className || `${classPrefix}-legend-brighten`, true);\n classed(set.mergedExit, config.className || `${classPrefix}-legend-brighten`, false);\n }\n }\n };\n};\n","import { GenericSideEffect } from '@chartshq/muze-firebolt';\nimport { strategies } from './strategies';\nimport { Highlighter } from '../../../enums/side-effects';\n\nexport default class LegendHighlighter extends GenericSideEffect {\n constructor (...params) {\n super(...params);\n this._strategies = strategies(this.firebolt);\n this._strategy = 'brighten';\n }\n\n static formalName () {\n return Highlighter;\n }\n\n apply (selectionSet, payload, options = {}) {\n const strategy = this._strategies[options.strategy || this._strategy];\n\n strategy(selectionSet, this);\n }\n}\n","import { mergeRecursive } from 'muze-utils';\n\nexport const PROPS = {\n config: {\n sanitization: (context, value) => mergeRecursive(context._config || {}, value)\n },\n data: {},\n fieldName: {},\n legendContainer: {},\n measurement: {\n sanitization: (context, value) => {\n const measurement = mergeRecursive(context._measurement, value);\n ['padding', 'border', 'margin'].forEach((space) => {\n measurement[space] = Math.min(measurement[space] > 0 ? measurement[space] : 0,\n measurement.maxWidth * 0.1, measurement.maxHeight * 0.1);\n });\n return measurement;\n }\n },\n logicalSpace: {},\n metaData: {},\n range: {\n sanitization: (context, value) => {\n context.scale().range(value);\n context.resetLogicalSpace();\n context.store().commit('range', value);\n return value;\n }\n },\n scale: {},\n smartTicks: {},\n store: {},\n title: {\n sanitization: (context, value) => mergeRecursive(context._title || {}, value)\n }\n};\n","import { getSymbol } from 'muze-utils';\nimport {\n CENTER,\n LEFT,\n RIGHT\n} from '../enums/constants';\n\nexport const ALIGN = {\n HORIZONTAL: 'horizontal',\n VERTICAL: 'vertical'\n};\n\nexport const DEFAULT_MEASUREMENT = {\n height: 30,\n width: 30,\n maxWidth: Infinity,\n maxHeight: Infinity,\n padding: 2,\n margin: 2,\n border: 1\n};\n\nexport const LEGEND_TITLE = {\n text: '',\n orientation: (pos) => {\n if (pos === LEFT || pos === RIGHT) {\n return LEFT;\n } return CENTER;\n }\n};\n\nexport const DEFAULT_CONFIG = {\n classPrefix: 'muze',\n\n formatter: {\n bounds: {\n lower: 'less than',\n upper: 'more than'\n }\n },\n item: {\n text: {\n orientation: 'right',\n width: 10,\n formatter: val => val\n },\n icon: {\n className: 'legend-icon',\n height: 20,\n width: 20,\n color: 'rgba(0,0,0,.5)',\n type: 'square'\n }\n }\n};\n\n/**\n * Creates a map of pre defined icons\n *\n * @param {string} icon Accepts a icon name like 'square', 'cross', 'diamond' etc\n * @return {Object} icon object which can be used to draw the icons\n */\nexport const ICON_MAP = (icon) => {\n if (icon && typeof (icon) === 'string') {\n return getSymbol(icon);\n } return icon;\n};\n","import { makeElement, numberInterpolator } from 'muze-utils';\n\nimport {\n SCALE_FUNCTIONS,\n WIDTH,\n HEIGHT,\n LEFT,\n RIGHT,\n TOP,\n BOTTOM\n} from '../enums/constants';\n\n/**\n *\n *\n * @param {*} scale\n * @returns\n */\nexport const getScaleInfo = (scale) => {\n const scaleType = scale.constructor.type();\n const domain = scale.uniqueValues();\n const steps = scale.config().stops || 1;\n const scaleFn = SCALE_FUNCTIONS[scaleType];\n\n return { scaleType, domain, steps, scaleFn };\n};\n\n/**\n *\n *\n * @param {*} domain\n * @param {*} steps\n * @returns\n */\nexport const getInterpolatedData = (domain, steps) => {\n const domainForLegend = [];\n const interpolatedFn = numberInterpolator()(domain[0], domain[1]);\n\n for (let i = 0; i <= steps; i++) {\n domainForLegend[i] = interpolatedFn(i / steps);\n }\n return domainForLegend;\n};\n\n/**\n *\n *\n * @param {*} container\n * @param {*} text\n * @param {*} measurement\n * @param {*} classPrefix\n */\nexport const titleCreator = (container, title, measurement, config) =>\n makeElement(container, 'div', [1], `${config.classPrefix}-legend-title`)\n .style(WIDTH, '100%')\n .style(HEIGHT, `${measurement.height}px`)\n .style('padding-left', `${measurement.padding}px`)\n .style('padding-right', `${measurement.padding}px`)\n .style('border-bottom-width', `${measurement.border}px`)\n .style('text-align', title.orientation instanceof Function ?\n title.orientation(config.position) : title.orientation)\n .text(title.text)\n .node();\n\n/**\n *\n *\n * @param {*} data\n * @param {*} prop\n * @param {*} labelManager\n * @return\n */\nexport const getMaxMeasures = (data, prop, labelManager) => {\n let maxHeight = -Infinity;\n let maxWidth = -Infinity;\n\n data.forEach((item) => {\n const value = prop ? item[prop] : item;\n const space = labelManager.getOriSize(value);\n maxHeight = Math.max(space.height + 2, maxHeight);\n maxWidth = Math.max(space.width + 2, maxWidth);\n });\n\n return { height: maxHeight, width: maxWidth };\n};\n\n/**\n *\n *\n * @param {*} data\n * @param {*} prop\n * @param {*} labelManager\n * @return\n */\nexport const getItemMeasures = (data, prop, labelManager, formatter) => {\n const space = [];\n\n data.forEach((item, index) => {\n const value = prop ? item[prop] : item;\n const { height, width } = labelManager.getOriSize(formatter(value));\n space[index] = { height: height + 1, width: width + 1 };\n });\n return space;\n};\n\n/**\n *\n *\n * @param {*} textOrientation\n * @param {*} effPadding\n * @param {*} titleSpace\n * @return\n * @memberof Legend\n */\nexport const computeItemSpaces = (config, measures, data) => {\n let totalHeight = 0;\n let totalWidth = 0;\n let maxItemSpaces = {\n width: 0, height: 0\n };\n const {\n effPadding,\n titleWidth,\n labelSpaces,\n titleHeight,\n maxWidth\n } = measures;\n const {\n item,\n align\n } = config;\n const {\n icon,\n text\n } = item;\n const textOrientation = text.orientation;\n const itemSpaces = [];\n const iconSpaces = [];\n let maxIconWidth = 0;\n labelSpaces.forEach((labelSpace, i) => {\n const itemSpace = { width: 0, height: 0 };\n const iconSpace = { width: 0, height: 0 };\n const datum = data[i] || {};\n // Compute each legend item height/width\n if (textOrientation === LEFT || textOrientation === RIGHT) {\n // Get label, icon and item widths\n labelSpace.width += effPadding;\n iconSpace.width = (datum.size ? 2 * Math.sqrt(datum.size / Math.PI) : icon.width) + effPadding;\n maxIconWidth = Math.max(iconSpace.width, maxIconWidth);\n itemSpace.width = labelSpace.width + maxIconWidth;\n\n // Get label, icon and item heights\n labelSpace.height = Math.max(labelSpace.height, icon.height) + effPadding;\n iconSpace.height = labelSpace.height;\n itemSpace.height = labelSpace.height;\n } else {\n // Get label, icon and item widths\n labelSpace.width = Math.max(labelSpace.width, datum.size ? 2 * Math.sqrt(datum.size / Math.PI)\n : icon.width) + effPadding;\n iconSpace.width = labelSpace.width;\n itemSpace.width = labelSpace.width;\n maxIconWidth = Math.max(iconSpace.width, maxIconWidth);\n\n // Get label, icon and item heights\n labelSpace.height += effPadding;\n iconSpace.height = icon.height + effPadding;\n itemSpace.height = labelSpace.height + iconSpace.height;\n }\n // Compute height and width of legend for each alignment\n if (align === 'horizontal') {\n totalHeight = Math.max(totalHeight, itemSpace.height);\n } else {\n totalHeight += itemSpace.height;\n totalWidth = Math.max(totalWidth, itemSpace.width, titleWidth) + effPadding;\n }\n maxItemSpaces = {\n width: Math.max(itemSpace.width, maxItemSpaces.width),\n height: Math.max(itemSpace.height, maxItemSpaces.height)\n };\n itemSpaces.push(itemSpace);\n iconSpaces.push(iconSpace);\n });\n\n itemSpaces.forEach((itemSpace, i) => {\n if (align === 'horizontal') {\n itemSpace.height = totalHeight;\n iconSpaces[i].width = maxIconWidth;\n if (textOrientation === LEFT || textOrientation === RIGHT) {\n labelSpaces[i].height = totalHeight;\n iconSpaces[i].height = totalHeight;\n itemSpaces[i].width = labelSpaces[i].width + maxIconWidth;\n } else {\n labelSpaces[i].width = maxIconWidth;\n itemSpaces[i].width = maxIconWidth;\n labelSpaces[i].width = maxIconWidth;\n }\n totalWidth = Math.max(totalWidth + itemSpaces[i].width, titleWidth);\n } else {\n itemSpace.width = Math.max(totalWidth, maxWidth);\n if (textOrientation === TOP || textOrientation === BOTTOM) {\n labelSpaces[i].width = totalWidth;\n iconSpaces[i].width = totalWidth;\n maxIconWidth = totalWidth;\n } else {\n iconSpaces[i].width = maxIconWidth;\n itemSpaces[i].width = labelSpaces[i].width + maxIconWidth;\n labelSpaces[i].width = maxItemSpaces.width - maxIconWidth;\n totalWidth = Math.max(totalWidth, itemSpace.width, titleWidth) + effPadding;\n }\n }\n });\n totalHeight += titleHeight + effPadding;\n\n return { totalHeight, totalWidth, itemSpaces, iconSpaces, maxItemSpaces, maxIconWidth };\n};\n\n/**\n *\n *\n * @param {*} type\n * @param {*} scaleInfo\n * @param {*} domainInfo\n * @returns\n */\nexport const getDomainBounds = (type, scaleInfo, domainInfo) => {\n const {\n scaleFn,\n scaleType,\n scale\n } = scaleInfo;\n const {\n domain,\n domainBounds,\n domainLeg,\n steps\n } = domainInfo;\n const ele = domain[type === 'lower' ? 0 : domain.length - 1];\n const step = steps[type === 'lower' ? 0 : steps.length - 1];\n\n return {\n [scaleType]: scaleType === 'size' ? scale[scaleFn](ele) * scale.getScaleFactor() : scale[scaleFn](ele),\n value: domainBounds[type],\n id: type === 'lower' ? 0 : domainLeg.length + 2,\n range: [ele, step]\n };\n};\n","import {\n makeElement,\n selectElement,\n getUniqueId,\n getSmartComputedStyle,\n generateGetterSetters,\n mergeRecursive\n} from 'muze-utils';\nimport { behaviouralActions } from '@chartshq/muze-firebolt';\nimport * as legendBehaviours from '../firebolt/behavioural';\n\nimport { LegendFireBolt } from '../firebolt/legend-firebolt';\nimport { actionBehaviourMap } from '../firebolt/action-behaviour-map';\nimport { physicalActions } from '../firebolt/physical';\nimport * as sideEffects from '../firebolt/side-effects';\nimport { behaviourEffectMap } from '../firebolt/behaviour-effect-map';\nimport { VALUE, PATH } from '../enums/constants';\nimport { PROPS } from './props';\nimport { DEFAULT_MEASUREMENT, DEFAULT_CONFIG, LEGEND_TITLE } from './defaults';\nimport { getItemMeasures, titleCreator, computeItemSpaces } from './legend-helper';\n\n/**\n * Creates a Legend from the axes of a canvas\n *\n * @param {Object} dependencies : legend data\n * @class SimpleLegend\n */\nexport default class SimpleLegend {\n\n /**\n * Creates an instance of Legend.\n * @param {Object} dependencies Set of dependencies required by the legend\n * @memberof Legend\n */\n constructor (dependencies) {\n this._data = [];\n this._metaData = [];\n this._mount = null;\n this._fieldName = null;\n this._title = Object.assign({}, LEGEND_TITLE);\n this._metaData = null;\n this._labelManager = dependencies.labelManager;\n this._cells = dependencies.cells;\n this._id = getUniqueId();\n this._measurement = Object.assign({}, this.constructor.defaultMeasurement());\n this._config = mergeRecursive({}, this.constructor.defaultConfig());\n\n generateGetterSetters(this, PROPS);\n this._computedStyle = getSmartComputedStyle(selectElement('body'),\n `${this.config().classPrefix}-legend-item-info`);\n\n this._firebolt = new LegendFireBolt(this, {\n behavioural: Object.assign({}, behaviouralActions, legendBehaviours),\n physical: physicalActions,\n physicalBehaviouralMap: actionBehaviourMap\n }, sideEffects, behaviourEffectMap);\n }\n\n id () {\n return this._id;\n }\n /**\n * Initializes an instance of the class\n *\n * @static\n * @param {Object} dependencies Set of dependencies required by the legend\n * @return {Instance} returns a new instance of Legend\n * @memberof Legend\n */\n static create (dependencies) {\n return new SimpleLegend(dependencies);\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof SimpleLegend\n */\n static defaultConfig () {\n return DEFAULT_CONFIG;\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof SimpleLegend\n */\n static defaultMeasurement () {\n return DEFAULT_MEASUREMENT;\n }\n\n /**\n *\n *\n * @readonly\n * @memberof SimpleLegend\n */\n firebolt (...params) {\n if (params.length) {\n return this;\n }\n return this._firebolt;\n }\n\n /**\n *\n *\n * @return\n * @memberof Legend\n */\n elemType () {\n return PATH;\n }\n\n canvasAlias (...alias) {\n if (alias.length) {\n this._canvasAlias = alias[0];\n return this;\n }\n return this._canvasAlias;\n }\n\n /**\n *\n *\n * @return\n * @memberof Legend\n */\n mount (...params) {\n if (params.length) {\n this._mount = params[0];\n this.render();\n return this;\n }\n return this._mount;\n }\n\n /**\n *\n *\n * @param {*} effPadding\n * @param {*} align\n * @return\n * @memberof Legend\n */\n getLabelSpaces () {\n const {\n item,\n classPrefix\n } = this.config();\n this._labelManager.setStyle(getSmartComputedStyle(selectElement('body'),\n `${classPrefix}-legend-item-info`));\n return getItemMeasures(this.data(), VALUE, this._labelManager, item.text.formatter);\n }\n\n /**\n * Sets the height and width of a legend based on provided max\n * height and width and based on its contents\n *\n * @return {Instance} Current instance\n * @memberof Legend\n */\n setLegendMeasures () {\n const {\n width,\n height,\n maxWidth,\n maxHeight,\n padding,\n margin,\n border\n } = this.measurement();\n const {\n align\n } = this.config();\n\n // Effective padding, margin and padding\n const effPadding = padding * 2;\n const effBorder = border * 2;\n const effMargin = margin * 2;\n\n this.data(this.dataFromScale(this.scale()));\n // Get space occupied by title\n const titleSpace = this.getTitleSpace();\n const titleHeight = titleSpace.height > 0 ? titleSpace.height * 1.25 : 0;\n const titleWidth = titleSpace.width;\n\n // Get space occupied by labels\n const labelSpaces = this.getLabelSpaces(effPadding, align);\n\n const {\n totalHeight, totalWidth, itemSpaces, iconSpaces, maxItemSpaces, maxIconWidth\n } = computeItemSpaces(this.config(),\n { effPadding, titleWidth, labelSpaces, titleHeight, maxWidth, maxHeight }, this.data());\n\n this.measurement({\n width: Math.max(totalWidth, width) + effMargin + effBorder,\n height: Math.max(totalHeight, height) + effMargin + effBorder,\n labelSpaces,\n iconSpaces,\n itemSpaces,\n maxItemSpaces,\n maxIconWidth,\n titleSpaces: {\n width: Math.min(maxWidth, this.measurement().width) - effMargin - effBorder,\n height: titleHeight\n }\n });\n return this;\n }\n\n /**\n * Returns the space occupied by the legend title\n *\n * @return {Object} Space occupied by title\n * @memberof Legend\n */\n getTitleSpace () {\n this._labelManager.setStyle(getSmartComputedStyle(selectElement('body'),\n `${this.config().classPrefix}-legend-title`));\n return this._labelManager.getOriSize(this.title().text ? this.title().text : '');\n }\n\n /**\n * Creates the title for the legend\n *\n * @param {DOM} container Container made for the title\n * @return {Selection} Title and it's node\n * @memberof Legend\n */\n renderTitle (container) {\n const { titleSpaces, border, padding } = this.measurement();\n return titleCreator(container, this.title(), {\n height: titleSpaces.height,\n border,\n padding\n }, this.config());\n }\n\n /**\n * Render the legend with its title\n *\n * @param {DOM} mountPoint Point where the legend and title are to be appended\n * @return {Instance} Current instance of legend\n * @memberof Legend\n */\n render () {\n const firebolt = this.firebolt();\n const {\n classPrefix\n } = this.config();\n const {\n maxWidth,\n maxHeight,\n width,\n height,\n margin,\n border\n } = this.measurement();\n const legendContainer = makeElement(selectElement(this.mount()), 'div', [1], `${classPrefix}-legend-box`);\n\n legendContainer.classed(`${classPrefix}-legend-box-${this._id}`, true);\n legendContainer.style('float', 'left');\n // set height and width\n legendContainer.style('width', `${Math.min(maxWidth, width) - margin * 2}px`)\n .style('height', `${Math.min(maxHeight, height) - margin * 2}px`)\n .style('margin', `${margin}px`)\n .style('border-width', `${border}px`);\n this.legendContainer(legendContainer.node());\n\n // create title\n this.renderTitle(legendContainer);\n firebolt.createSelectionSet(this.data().map(d => d.id));\n return legendContainer;\n }\n /**\n *\n *\n * @param {*} data\n * @returns\n * @memberof StepLegend\n */\n getCriteriaFromData (data) {\n const fieldName = this.fieldName();\n const type = this.metaData().getData().schema[0].type;\n if (type === 'measure') {\n return {\n [fieldName]: data.range\n };\n }\n return [[fieldName], [data.value]];\n }\n}\n","import {\n LEFT,\n RIGHT,\n START,\n END,\n TOP,\n BOTTOM,\n HORIZONTAL,\n VERTICAL,\n CENTER,\n SHAPE,\n VALUE\n} from '../enums/constants';\n\nconst legendOrientation = {\n [HORIZONTAL]: {\n datasets: data => ({\n row: [1],\n column: data\n }),\n itemContainerMeasures: (measurement) => {\n const {\n itemSpaces,\n width\n } = measurement;\n return {\n row: {\n width: `${width}px`,\n padding: `${0}px`\n },\n column: {\n width: (d, i) => `${itemSpaces[i].width}px`,\n padding: `${0}px`\n }\n };\n },\n getStepSpacesInfo: (measurement) => {\n const { maxItemSpaces, height } = measurement;\n return {\n iconHeight: height,\n iconWidth: maxItemSpaces.width,\n stepPadding: {\n horizontal: true,\n vertical: false\n }\n };\n }\n },\n [VERTICAL]: {\n datasets: data => ({\n row: data,\n column: d => [d]\n }),\n itemContainerMeasures: (measurement, config) => {\n const {\n width\n } = measurement;\n const { padding } = config;\n return {\n row: {\n width: `${width}px`,\n padding: `${padding}px`\n },\n column: {\n width: `${width}px`,\n padding: `${0}px`\n }\n };\n },\n getStepSpacesInfo: (measurement) => {\n const { maxItemSpaces, width } = measurement;\n return {\n iconHeight: maxItemSpaces.height,\n iconWidth: width,\n stepPadding: {\n horizontal: false,\n vertical: true\n }\n };\n }\n }\n};\n\nexport const positionConfig = {\n [LEFT]: legendOrientation[VERTICAL],\n [RIGHT]: legendOrientation[VERTICAL],\n [TOP]: legendOrientation[HORIZONTAL],\n [BOTTOM]: legendOrientation[HORIZONTAL]\n};\n\nexport const alignmentMap = {\n [LEFT]: END,\n [RIGHT]: START,\n [TOP]: CENTER,\n [BOTTOM]: CENTER\n};\n\n// Reverses data for step legend\nexport const stepData = data => ({\n [LEFT]: data.reverse(),\n [RIGHT]: data.reverse(),\n [TOP]: data,\n [BOTTOM]: data\n});\n\n// Changes the item layout based on the position of the text\nexport const itemStack = {\n [LEFT]: [VALUE, SHAPE],\n [RIGHT]: [SHAPE, VALUE],\n [TOP]: [VALUE, SHAPE],\n [BOTTOM]: [SHAPE, VALUE]\n};\n","import { makeElement, selectElement, applyStyle } from 'muze-utils';\nimport { ICON_MAP } from './defaults';\nimport { positionConfig, alignmentMap, itemStack } from './position-config';\nimport {\n WIDTH,\n HEIGHT,\n CENTER,\n VALUE,\n RECT,\n LEFT,\n RIGHT\n} from '../enums/constants';\n\n/**\n *\n *\n * @param {*} container\n * @param {*} data\n * @param {*} legendInstance\n * @param {*} align\n * @return\n */\nexport const getItemContainers = (container, data, legendInstance) => {\n const measurement = legendInstance.measurement();\n const config = legendInstance.config();\n const {\n itemSpaces\n } = measurement;\n const {\n classPrefix,\n position\n } = config;\n const positionObj = positionConfig[position];\n const datasets = positionObj.datasets(data);\n const measures = positionObj.itemContainerMeasures(measurement, config);\n\n const rows = makeElement(container, 'div', datasets.row, `${classPrefix}-legend-row`);\n rows.style(HEIGHT, (d, i) => `${itemSpaces[i].height}px`);\n rows.style(WIDTH, measures.row.width);\n rows.style('padding', measures.row.padding);\n\n const columns = makeElement(rows, 'div', datasets.column, `${classPrefix}-legend-columns`);\n columns.style(WIDTH, measures.column.width);\n columns.style('padding', measures.column.padding);\n\n return columns;\n};\n\n/**\n *\n *\n * @param {*} container\n * @param {*} classPrefix\n * @param {*} data\n * @returns\n * @memberof DiscreteLegend\n */\nexport const createLegendSkeleton = (context, container, classPrefix, data) => {\n let gradWidth = 0;\n let gradHeight = 0;\n let maxGradHeight = 0;\n let maxGradWidth = 0;\n const measurement = context.measurement();\n const {\n margin,\n border,\n titleSpaces,\n width,\n height,\n maxWidth,\n maxHeight\n } = measurement;\n\n gradHeight = height - (titleSpaces.height + 2 * margin + 2 * border);\n gradWidth = width - (margin * 2 + border * 2);\n\n maxGradHeight = maxHeight - (titleSpaces.height + margin * 2 + border * 2);\n maxGradWidth = maxWidth - (margin * 2 + border * 2);\n\n let legendBody = makeElement(container, 'div', [1], `${classPrefix}-legend-body`);\n legendBody.select(`.${classPrefix}-legend-overflow`).remove();\n // Create a div with scroll when overflow\n if (maxGradWidth && maxGradWidth < gradWidth) {\n legendBody = legendBody.style(WIDTH, `${maxGradWidth}px`).style('overflow-x', 'scroll');\n }\n // Create a div with scroll when overflow\n if (maxGradHeight && maxGradHeight < gradHeight) {\n legendBody.style(HEIGHT, `${maxGradHeight}px`).style('overflow-y', 'scroll');\n }\n\n legendBody = makeElement(legendBody, 'div', [1], `${classPrefix}-legend-overflow`);\n\n legendBody.style(WIDTH, `${gradWidth}px`);\n legendBody.style(HEIGHT, `${gradHeight}px`);\n\n const legendItem = getItemContainers(legendBody, data, context);\n return { legendItem };\n};\n\n/**\n * Creates legend item based on alignment and text orientation\n *\n * @param {Selection} container Point where items are to be mounted\n * @return {Instance} Current instance\n * @memberof Legend\n */\nexport const createItemSkeleton = (context, container) => {\n const {\n classPrefix,\n item\n } = context.config();\n const textOrientation = item.text.orientation;\n\n const stack = itemStack[textOrientation];\n const itemSkeleton = makeElement(container, 'div', (d, i) => stack.map(e => [e, d[e], d.color, d.size,\n d.value, context.fieldName(), i]), `${classPrefix}-legend-item-info`);\n\n const alignClass = alignmentMap[textOrientation];\n\n itemSkeleton.classed(alignClass, true);\n return { itemSkeleton };\n};\n\n/**\n *\n *\n * @param {*} measureType\n * @param {*} stepColorCheck\n */\nexport const applyItemStyle = (item, measureType, stepColorCheck, context) => {\n const {\n padding,\n labelSpaces,\n iconSpaces,\n maxIconWidth\n } = context.measurement();\n const diff = stepColorCheck ? -padding * 2 : 0;\n\n if (item[0] === VALUE) {\n return `${labelSpaces[item[6]][measureType]}px`;\n }\n return `${measureType === 'width' && !stepColorCheck ? maxIconWidth : iconSpaces[item[6]][measureType] - diff}px`;\n};\n\n/**\n *\n *\n * @param {*} str\n * @returns\n */\nconst checkPath = (str) => {\n if (/^[mzlhvcsqta]\\s*[-+.0-9][^mlhvzcsqta]+/i.test(str) && /[\\dz]$/i.test(str) && str.length > 4) {\n return true;\n }\n return false;\n};\n\n/**\n *\n *\n * @param {*} d\n * @param {*} elem\n */\nconst createShape = function (d, elem, defaultIcon, width, height) {\n const groupElement = elem;\n // const { shape, size, update } = d;\n const size = d[3] || Math.min(width, height) * Math.PI;\n const shape = d[1] || defaultIcon;\n\n if (shape instanceof Promise) {\n shape.then((res) => {\n d.shape = res;\n return createShape(d, elem);\n });\n } else if (shape instanceof Element) {\n let newShape = shape.cloneNode(true);\n\n if (newShape.nodeName.toLowerCase() === 'img') {\n const src = newShape.src || newShape.href;\n newShape = document.createElementNS('http://www.w3.org/2000/svg', 'image');\n newShape.setAttribute('href', src);\n }\n const shapeElement = selectElement(newShape);\n shapeElement.attr('transform', `scale(${size / 100})`);\n return selectElement(groupElement.node().appendChild(newShape));\n } else if (typeof shape === 'string') {\n let pathStr;\n if (checkPath(shape)) {\n pathStr = shape;\n } else {\n pathStr = ICON_MAP(shape).size(size)();\n }\n return makeElement(groupElement, 'path', data => [data]).attr('d', pathStr);\n }\n d[1] = 'circle';\n return createShape(d, elem, 'circle');\n};\n\n/**\n * Returns the icon of the legend item\n *\n * @param {Object} datum Data property attached to the item\n * @param {number} width width of the item\n * @param {number} height height of the item\n * @return {Object|string} returns the path string or the string name of the icon\n * @memberof Legend\n */\nexport const getLegendIcon = (datum, width, height, defaultIcon) => {\n const icon = ICON_MAP(datum[1]);\n\n if (icon) {\n return icon.size(datum[3] || Math.min(width, height) * Math.PI);\n }\n return ICON_MAP(datum[3] ? 'circle' : defaultIcon).size(datum[3] || Math.min(width, height) * Math.PI);\n};\n\n/**\n *\n *\n */\nexport const renderIcon = (icon, container, datum, context) => {\n const {\n classPrefix,\n iconHeight,\n iconWidth,\n maxIconWidth,\n padding,\n color\n } = context;\n const svg = makeElement(container, 'svg', f => [f], `${classPrefix}-legend-icon-svg`)\n .attr(WIDTH, maxIconWidth)\n .attr(HEIGHT, iconHeight)\n .style(WIDTH, `${maxIconWidth}px`)\n .style(HEIGHT, `${iconHeight}px`);\n\n if (icon !== RECT) {\n const group = makeElement(svg, 'g', [datum[1]], `${classPrefix}-legend-icon`);\n createShape(datum, group, datum[3] ? 'circle' : 'square', iconWidth, iconHeight)\n .attr('transform', `translate(${maxIconWidth / 2 - padding} ${iconHeight / 2})`)\n .attr('fill', datum[2] || color);\n } else {\n makeElement(svg, RECT, [datum[1]], `${classPrefix}-legend-icon`)\n .attr('x', 0)\n .attr('y', 0)\n .attr(WIDTH, maxIconWidth)\n .attr(HEIGHT, iconHeight)\n .attr('fill', datum[2] || color);\n }\n};\n\n/**\n * Renders the items in the legend i.e, icon and text\n *\n * @param {DOM} container Point where item is to be mounted\n * @memberof Legend\n */\nexport const renderDiscreteItem = (context, container) => {\n const labelManager = context._labelManager;\n const {\n item,\n classPrefix\n } = context.config();\n const {\n maxIconWidth,\n padding\n } = context.measurement();\n const {\n width: iconWidth,\n height: iconHeight,\n color,\n className\n } = item.icon;\n\n const textOrientation = item.text.orientation;\n const formatter = item.text.formatter;\n\n labelManager.useEllipsesOnOverflow(true);\n applyStyle(container, {\n width: d => applyItemStyle(d, WIDTH, false, context),\n height: d => applyItemStyle(d, HEIGHT, false, context),\n 'text-align': CENTER,\n padding: `${padding}px`\n });\n\n labelManager.setStyle(context._computedStyle);\n container.each(function (d, i) {\n if (d[0] === VALUE) {\n selectElement(this).text(formatter(d[1]))\n .style(`padding-${textOrientation === RIGHT ? LEFT : RIGHT}`, '0px');\n } else {\n // const icon = getLegendIcon(d, iconWidth, iconHeight, type);\n selectElement(this).classed(`${classPrefix}-${className}`, true);\n selectElement(this).classed(`${classPrefix}-${className}-${i}`, true);\n renderIcon('circle', selectElement(this), d, {\n classPrefix,\n iconWidth,\n // iconWidth: 2 * Math.sqrt(d[3] / Math.PI) || iconWidth,\n iconHeight,\n maxIconWidth,\n padding,\n color\n });\n }\n });\n};\n\n/**\n* Renders the items in the legend i.e, icon and text\n*\n* @param {DOM} container Point where item is to be mounted\n* @memberof Legend\n*/\nexport const renderStepItem = (context, container) => {\n const labelManager = context._labelManager;\n const {\n item,\n position,\n classPrefix\n } = context.config();\n const {\n maxItemSpaces,\n maxIconWidth,\n padding\n } = context.measurement();\n const {\n width,\n height,\n color\n } = item.icon;\n const {\n formatter\n } = item.text;\n\n labelManager.useEllipsesOnOverflow(true);\n const { iconHeight, iconWidth, stepPadding } = positionConfig[position].getStepSpacesInfo({\n maxItemSpaces, height, width\n });\n\n applyStyle(container, {\n width: d => applyItemStyle(d, WIDTH, stepPadding.horizontal, context),\n height: d => applyItemStyle(d, HEIGHT, stepPadding.vertical, context),\n 'text-align': 'center',\n padding: `${padding}px`\n });\n\n labelManager.setStyle(context._computedStyle);\n container.each(function (d) {\n if (d[0] === VALUE) {\n selectElement(this).text(formatter(d[1]));\n } else {\n renderIcon(RECT, selectElement(this), d, {\n classPrefix,\n iconWidth,\n iconHeight,\n maxIconWidth,\n color\n });\n }\n });\n};\n","import SimpleLegend from './simple-legend';\nimport { DISCRETE, LEFT, SIZE } from '../enums/constants';\nimport { getScaleInfo } from './legend-helper';\nimport { createLegendSkeleton, createItemSkeleton, renderDiscreteItem } from './renderer';\nimport '../styles.scss';\n\n/**\n * Creates a Legend from the axes of a canvas\n *\n * @param {Object} dependencies : legend data\n * @class Legend\n */\nexport default class DiscreteLegend extends SimpleLegend {\n\n /**\n * Initializes an instance of the class\n *\n * @static\n * @param {Object} dependencies Set of dependencies required by the legend\n * @return {Instance} returns a new instance of Legend\n * @memberof Legend\n */\n static create (dependencies) {\n return new DiscreteLegend(dependencies);\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof DiscreteLegend\n */\n static type () {\n return DISCRETE;\n }\n\n /**\n *\n *\n * @param {*} scale\n * @returns\n * @memberof DiscreteLegend\n */\n dataFromScale (scale) {\n const { scaleType, domain, scaleFn } = getScaleInfo(scale);\n let domainForLegend = [...new Set(domain)];\n const type = this.metaData().getData().schema[0].type;\n\n domainForLegend = domainForLegend.map((ele, i) => {\n let value = 0;\n let range = 0;\n if (type === 'measure') {\n value = (+domainForLegend[i]).toFixed(0);\n const nextVal = domainForLegend[i + 1] ? +domainForLegend[i + 1] : +value;\n range = [value, nextVal.toFixed(0)];\n } else {\n value = domainForLegend[i];\n range = [domainForLegend[i]];\n }\n return {\n [scaleType]: scale[scaleFn](ele),\n value,\n id: i,\n range\n };\n }).filter(d => d.value !== null);\n\n domainForLegend = scaleType === SIZE ? domainForLegend.sort((a, b) => a[scaleType] - b[scaleType])\n : domainForLegend;\n return domainForLegend;\n }\n\n /**\n * Render the legend with its title\n *\n * @param {DOM} mountPoint Point where the legend and title are to be appended\n * @return {Instance} Current instance of legend\n * @memberof Legend\n */\n render () {\n const firebolt = this.firebolt();\n const data = this.data();\n const { classPrefix } = this.config();\n const legendContainer = super.render(this.mount());\n // create Legend\n const { legendItem } = createLegendSkeleton(this, legendContainer, classPrefix, data);\n const { itemSkeleton } = createItemSkeleton(this, legendItem);\n renderDiscreteItem(this, itemSkeleton);\n legendContainer.selectAll('div').style('float', LEFT);\n firebolt.mapActionsAndBehaviour();\n firebolt.createSelectionSet(this.data().map(d => d.id));\n return legendContainer;\n }\n}\n","import { makeElement, applyStyle } from 'muze-utils';\nimport { ContinousAxis } from '@chartshq/muze-axis';\nimport { BOTTOM, RIGHT } from '../enums/constants';\nimport { ALIGN } from './defaults';\nimport '../styles.scss';\n\n/**\n *\n *\n * @param {*} data\n * @returns\n */\nexport const getGradientDomain = (data) => {\n if (typeof data[0].value === 'number') {\n return data.reduce((accumulator, currentValue) =>\n [Math.min(currentValue.value, accumulator[0]), Math.max(currentValue.value, accumulator[1])],\n [Number.MAX_VALUE, Number.MIN_VALUE]);\n }\n return data.map(e => e.value);\n};\n\n/**\n *\n *\n * @param {*} container\n * @param {*} data\n * @param {*} domain\n * @returns\n */\nexport const makeLinearGradient = (container, data, domain) => {\n const defs = makeElement(container, 'defs', [1]);\n const linearGradient = makeElement(defs, 'linearGradient', [1])\n .attr('id', 'linear-gradient')\n .attr('x1', '0%')\n .attr('y2', '0%');\n makeElement(linearGradient, 'stop', data, 'stop-gradient')\n .attr('offset', d => `${(d.value - domain[0]) * 100 / (domain[1] - domain[0])}%`)\n .attr('stop-color', d => d.color);\n return linearGradient;\n};\n\n/**\n * Creates an axis cell with a linear axis for computing space and\n * creating gradient legend\n *\n * @return {AxisCell} Instance of Axis Cell for the gradient axis\n * @memberof Legend\n */\nexport const createAxis = (context) => {\n const data = context.data();\n const { align } = context.config();\n const AxisCell = context._cells.AxisCell;\n const newAxis = new ContinousAxis({\n id: `legend-${context._id}`,\n orientation: align === ALIGN.VERTICAL ? RIGHT : BOTTOM,\n style: context._computedStyle,\n nice: false,\n showAxisName: false,\n tickValues: data.map(d => d.value),\n fixedBaseline: false\n }, { labelManager: context._labelManager });\n\n newAxis.domain(getGradientDomain(data));\n newAxis.range([1, 1]);\n return new AxisCell().source(newAxis).config({\n margin: { left: 0, bottom: 0, top: 0, right: 0 }\n });\n};\n\n/**\n *\n *\n * @param {*} container\n * @param {*} data\n * @param {*} classPrefix\n * @returns\n * @memberof GradientLegend\n */\nconst createLegendSkeleton = (container, classPrefix, data) => {\n const domain = getGradientDomain(data);\n const legendContainer = makeElement(container, 'div', [1], `${classPrefix}-legend-body`);\n const legendGradSvg = makeElement(legendContainer, 'svg', [1], `${classPrefix}-gradient`);\n const legendGradCont = makeElement(legendGradSvg, 'g', [1], `${classPrefix}-gradient-group`);\n const linearGradient = makeLinearGradient(legendGradSvg, data, domain);\n const legendRect = makeElement(legendGradCont, 'rect', [1], `${classPrefix}-gradient-rect`);\n\n return {\n legendContainer,\n legendGradCont,\n legendGradSvg,\n linearGradient,\n legendRect\n };\n};\n\n/**\n * Renders the axis for the gradient\n *\n * @param {Selection} container Point where axis is to be mounted\n * @param {number} height Height for axis\n * @param {number} width Width for axis\n * @memberof Legend\n */\nexport const renderAxis = (context, container, height, width) => {\n const axis = context.axis();\n\n axis.setAvailableSpace(width, height);\n axis.render(container.node());\n};\n\n/**\n * Renders gradient legends\n *\n * @param {Selection} container Point where the legend is to be appended\n * @memberof GradientLegend\n */\nexport const renderGradient = (context, container) => {\n let gradHeight = 0;\n let gradWidth = 0;\n const {\n align,\n classPrefix,\n item\n } = context.config();\n const data = context.data();\n // Create the skeleton for the legend\n const {\n legendContainer,\n legendGradSvg,\n legendGradCont,\n linearGradient,\n legendRect\n } = createLegendSkeleton(container, classPrefix, data);\n const labelDim = context.axis().source().getAxisDimensions().tickLabelDim;\n const {\n padding,\n margin,\n border,\n titleSpaces,\n maxHeight,\n maxWidth,\n height,\n width\n } = context.measurement();\n const gradientDimensions = {};\n\n gradHeight = Math.floor(height - (titleSpaces.height + 2 * margin + 2 * border));\n gradWidth = Math.floor(width - (margin * 2 + border * 2));\n\n if (align === ALIGN.HORIZONTAL) {\n gradientDimensions.height = item.icon.height;\n gradientDimensions.width = gradWidth - 2 * padding - labelDim.width / 2;\n linearGradient.attr('x2', '100%').attr('y1', '0%');\n legendGradCont.attr('transform', `translate( ${labelDim.width / 2} 0)`);\n renderAxis(context, legendContainer, gradHeight - item.icon.height - padding, gradWidth - 2 * padding - 1);\n legendContainer.classed(`${classPrefix}-overflow-x`, width > maxWidth);\n\n applyStyle(legendContainer, {\n height: `${height}px`,\n width: `${Math.min(width, maxWidth)}px`,\n padding: `${padding}px`\n });\n\n legendRect.attr('height', gradientDimensions.height);\n legendRect.attr('width', gradientDimensions.width - labelDim.width / 2);\n } else {\n gradientDimensions.height = gradHeight - 2 * padding - labelDim.height / 2;\n gradientDimensions.width = item.icon.width;\n linearGradient.attr('x2', '0%').attr('y1', '100%');\n legendGradCont.attr('transform', `translate(0 ${labelDim.height / 2})`);\n renderAxis(context, legendContainer, gradHeight - 2 * padding - 1, gradWidth - item.icon.width - padding * 2);\n legendContainer.classed(`${classPrefix}-overflow-y`, height > maxHeight);\n applyStyle(legendContainer, {\n height: `${Math.min(height, maxHeight)}px`,\n width: `${width}px`,\n padding: `${padding}px`\n });\n legendRect.attr('height', gradientDimensions.height - labelDim.height / 2);\n legendRect.attr('width', gradientDimensions.width);\n }\n\n // Apply Styles to the legend plot area\n applyStyle(legendGradSvg, {\n height: `${gradientDimensions.height}px`,\n width: `${gradientDimensions.width}px`\n });\n\n // Apply styles to the legend rect\n applyStyle(legendRect, {\n fill: 'url(#linear-gradient)'\n });\n legendGradSvg.attr('height', gradientDimensions.height);\n legendGradSvg.attr('width', gradientDimensions.width);\n\n context.measurement({\n gradientDimensions\n });\n context._legendGradientSvg = legendGradSvg;\n return context;\n};\n","import SimpleLegend from './simple-legend';\nimport { getScaleInfo, getInterpolatedData } from './legend-helper';\nimport { GRADIENT, LEFT, SIZE } from '../enums/constants';\nimport { renderGradient, createAxis } from './gradient-helper';\nimport '../styles.scss';\n\n/**\n * Creates a Legend from the axes of a canvas\n *\n * @param {Object} dependencies : legend data\n * @class Legend\n */\nexport default class GradientLegend extends SimpleLegend {\n\n /**\n * Initializes an instance of the class\n *\n * @static\n * @param {Object} dependencies Set of dependencies required by the legend\n * @return {Instance} returns a new instance of Legend\n * @memberof Legend\n */\n static create (dependencies) {\n return new GradientLegend(dependencies);\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof GradientLegend\n */\n static type () {\n return GRADIENT;\n }\n\n /**\n *\n *\n * @param {*} axis\n * @returns\n * @memberof GradientLegend\n */\n axis (...axis) {\n if (axis.length) {\n this._axis = axis[0];\n return this;\n }\n return this._axis;\n }\n\n /**\n *\n *\n * @param {*} scale\n * @returns\n * @memberof GradientLegend\n */\n dataFromScale (scale) {\n let domainForLegend = [];\n const { scaleType, domain, steps, scaleFn } = getScaleInfo(scale);\n\n if (steps instanceof Array) {\n if (domain[0] < steps[0]) {\n domainForLegend[0] = domain[0];\n }\n domainForLegend = [...domainForLegend, ...steps];\n if (domain[domain.length - 1] > steps[steps.length - 1]) {\n domainForLegend.push(domain[1]);\n }\n } else {\n domainForLegend = getInterpolatedData(domain, steps - 1);\n }\n domainForLegend = [...new Set(domainForLegend)].sort((a, b) => a - b);\n\n return domainForLegend.map((ele, i) => {\n const value = domainForLegend[i];\n return {\n [scaleType]: scaleType === SIZE ? scale[scaleFn](ele) * scale.getScaleFactor()\n : scale[scaleFn](Math.floor(ele)),\n value: +value.toFixed(2),\n id: i\n };\n }).filter(d => d.value !== null);\n }\n\n /**\n *\n *\n * @param {*} effPadding\n * @param {*} align\n * @return\n * @memberof Legend\n */\n getLabelSpaces (effPadding) {\n this.config({\n item: {\n text: {\n orientation: this.config().position\n }\n }\n });\n const axis = createAxis(this);\n const axisSpace = axis.getLogicalSpace();\n const space = { width: axisSpace.width - effPadding, height: axisSpace.height - effPadding };\n const axisDomainLength = axis.source().domain().length;\n const labelSpaces = new Array(axisDomainLength).fill(space);\n\n this.axis(axis);\n return labelSpaces;\n }\n\n /**\n *\n *\n * @returns\n * @memberof GradientLegend\n */\n getDrawingContext () {\n return {\n svgContainer: this._legendGradientSvg\n };\n }\n\n /**\n * Render the legend with its title\n *\n * @param {DOM} mountPoint Point where the legend and title are to be appended\n * @return {Instance} Current instance of legend\n * @memberof Legend\n */\n render () {\n const firebolt = this.firebolt();\n const legendContainer = super.render(this.mount());\n // create Legend\n renderGradient(this, legendContainer);\n legendContainer.selectAll('div').style('float', LEFT);\n firebolt.mapActionsAndBehaviour();\n firebolt.createSelectionSet(this.data().map(d => d.id));\n return legendContainer;\n }\n /**\n *\n *\n * @param {*} data\n * @returns\n * @memberof SimpleLegend\n */\n getCriteriaFromData (data) {\n return [[this.fieldName()], [data.value]];\n }\n}\n","import SimpleLegend from './simple-legend';\nimport {\n getScaleInfo,\n getInterpolatedData,\n getDomainBounds\n} from './legend-helper';\nimport {\n createLegendSkeleton,\n createItemSkeleton,\n renderStepItem\n} from './renderer';\nimport { STEP, RECT, LEFT, SIZE, UPPER, LOWER } from '../enums/constants';\nimport { stepData } from './position-config';\nimport '../styles.scss';\n\n/**\n * Creates a Legend from the axes of a canvas\n *\n * @param {Object} dependencies : legend data\n * @class Legend\n */\nexport default class StepLegend extends SimpleLegend {\n\n /**\n * Initializes an instance of the class\n *\n * @static\n * @param {Object} dependencies Set of dependencies required by the legend\n * @return {Instance} returns a new instance of Legend\n * @memberof Legend\n */\n static create (dependencies) {\n return new StepLegend(dependencies);\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof StepLegend\n */\n static type () {\n return STEP;\n }\n\n /**\n *\n *\n * @param {*} scale\n * @returns\n * @memberof StepLegend\n */\n dataFromScale (scale) {\n let domainLeg = [];\n const { scaleType, domain, steps, scaleFn } = getScaleInfo(scale);\n\n const { formatter } = this.config();\n const domainBounds = {\n lower: null, upper: null\n };\n\n if (steps instanceof Array) {\n if (domain[0] < steps[0]) {\n domainBounds.lower = [`${formatter.bounds.lower} ${steps[0]}`];\n }\n domainLeg = [...domainLeg, ...steps];\n if (domain[domain.length - 1] > steps[steps.length - 1]) {\n domainBounds.upper = [`${formatter.bounds.upper} ${steps[steps.length - 1]}`];\n }\n } else {\n domainLeg = getInterpolatedData(domain, steps);\n }\n\n domainLeg = [...new Set(domainLeg)].sort((a, b) => a - b);\n domainLeg = domainLeg.map((ele, i) => {\n let value = null;\n if (i < domainLeg.length - 1) {\n value = `${(ele.toFixed(1))} - ${(+domainLeg[i + 1].toFixed(1))}`;\n }\n return {\n [scaleType]: scaleType === SIZE ? scale[scaleFn](ele) * scale.getScaleFactor() : scale[scaleFn](ele),\n value,\n id: i + 1,\n range: [ele, domainLeg[i + 1]]\n };\n }).filter(d => d.value !== null);\n\n if (domainBounds.lower) {\n const lowerBounds = getDomainBounds(LOWER, { scale, scaleFn, scaleType },\n { domain, steps, domainBounds });\n domainLeg = [lowerBounds, ...domainLeg];\n }\n if (domainBounds.upper) {\n const upperBounds = getDomainBounds(UPPER, { scale, scaleFn, scaleType },\n { domain, steps, domainBounds, domainLeg });\n domainLeg = [...domainLeg, upperBounds];\n }\n return domainLeg;\n }\n\n /**\n *\n *\n * @param {*} effPadding\n * @param {*} align\n * @return\n * @memberof Legend\n */\n getLabelSpaces (effPadding, align) {\n this.config({\n item: {\n text: {\n orientation: this.config().position\n }\n }\n });\n return super.getLabelSpaces(effPadding, align);\n }\n\n /**\n *\n *\n * @return\n * @memberof Legend\n */\n elemType () {\n return RECT;\n }\n\n /**\n * Render the legend with its title\n *\n * @param {DOM} mountPoint Point where the legend and title are to be appended\n * @return {Instance} Current instance of legend\n * @memberof Legend\n */\n render () {\n const firebolt = this.firebolt();\n const { classPrefix, position } = this.config();\n const data = stepData(this.data())[position];\n\n const legendContainer = super.render(this.mount());\n\n // create Legend\n const { legendItem } = createLegendSkeleton(this, legendContainer, classPrefix, data);\n const { itemSkeleton } = createItemSkeleton(this, legendItem);\n\n renderStepItem(this, itemSkeleton);\n legendContainer.selectAll('div').style('float', LEFT);\n firebolt.mapActionsAndBehaviour();\n firebolt.createSelectionSet(this.data().map(d => d.id));\n return legendContainer;\n }\n\n /**\n *\n *\n * @param {*} data\n * @returns\n * @memberof StepLegend\n */\n getCriteriaFromData (data) {\n const fieldName = this.fieldName();\n return {\n [fieldName]: data.range\n };\n }\n}\n","import { GradientLegend, DiscreteLegend, StepLegend } from '@chartshq/muze-legend';\n\n/**\n * Contants to be used as attr\n */\nexport const ROWS = 'rows';\nexport const COLUMNS = 'columns';\nexport const DATA = 'data';\nexport const COLOR = 'color';\nexport const SHAPE = 'shape';\nexport const SIZE = 'size';\nexport const DETAIL = 'detail';\nexport const LAYERS = 'layers';\nexport const TRANSFORM = 'transform';\nexport const INITIALIZED = 'isInitialized';\nexport const SOURCE = 'source';\nexport const WIDTH = 'width';\nexport const HEIGHT = 'height';\nexport const PADDING = 'padding';\nexport const BORDER = 'border';\nexport const MARGIN = 'margin';\nexport const CONFIG = 'config';\nexport const MOUNT = 'mount';\nexport const CANVAS_UPDATED = 'canvasUpdated';\nexport const CLASSPREFIX = 'classPrefix';\nexport const POLICIES = '_policies';\nexport const LEGEND = 'legend';\nexport const TITLE = 'title';\nexport const SUB_TITLE = 'subtitle';\nexport const RESOLVE = 'resolve';\nexport const DISCRETE = 'discrete';\nexport const STEP_COLOR = 'step-color';\nexport const GRADIENT = 'gradient';\nexport const LINEAR = 'linear';\nexport const ORDINAL = 'ordinal';\n\nexport const TITLE_TEMPLATE_NOT_ALLOWED_TAGS = [\n 'script',\n 'style'\n];\n\nexport const LEGEND_TYPE_MAP = {\n [`${ORDINAL}-${true}-${COLOR}`]: DiscreteLegend,\n [`${ORDINAL}-${true}-${SIZE}`]: DiscreteLegend,\n [`${ORDINAL}-${true}-${SHAPE}`]: DiscreteLegend,\n [`${ORDINAL}-${false}-${COLOR}`]: DiscreteLegend,\n [`${ORDINAL}-${false}-${SHAPE}`]: DiscreteLegend,\n [`${ORDINAL}-${false}-${SIZE}`]: DiscreteLegend,\n [`${LINEAR}-${false}-${SIZE}`]: DiscreteLegend,\n [`${LINEAR}-${true}-${SIZE}`]: DiscreteLegend,\n [`${LINEAR}-${false}-${SHAPE}`]: DiscreteLegend,\n [`${LINEAR}-${true}-${COLOR}`]: StepLegend,\n [`${LINEAR}-${false}-${COLOR}`]: GradientLegend\n};\n\nexport const LEFT = 'left';\nexport const RIGHT = 'right';\nexport const BOTTOM = 'bottom';\nexport const TOP = 'top';\nexport const GROUP = 'group';\nexport const LAYOUT = 'layout';\nexport const RETINAL = 'retinal';\nexport const DIMENSION = 'dimension';\nexport const MEASURE = 'measure';\nexport const VERTICAL = 'vertical';\nexport const HORIZONTAL = 'horizontal';\n\n","import { ComposedVars, SimpleVariable } from '@chartshq/visual-group';\nimport { TITLE_TEMPLATE_NOT_ALLOWED_TAGS } from './constants';\n\n/**\n * This method creates a new composed variable instance from multiple variables.\n * @param {Array} vars Variable names\n * @return {ComposedVars} Instance of composed variable\n */\nexport const share = (...vars) => new ComposedVars(...vars.map(variable => new SimpleVariable(variable)));\n\n/**\n *\n *\n * @param {*} node\n * @returns\n */\nfunction treeShakeNode (node) {\n if (node.nodeType !== Node.ELEMENT_NODE) { return; }\n\n if (TITLE_TEMPLATE_NOT_ALLOWED_TAGS.indexOf(node.tagName.toLowerCase()) !== -1) {\n node.parentNode.removeChild(node);\n } else {\n for (const childNode of node.childNodes) {\n treeShakeNode(childNode);\n }\n }\n}\n\n/**\n * A string template tagged function which sanitizes input html formatted\n * string according to the allowed html tags.\n *\n * @param {Array.} strings - The string parts of the template.\n * @param {Array} exps - The list of evaluated expression values.\n * @return {Function} Returns a function which returns the sanitized html string.\n */\nexport function html (strings, ...exps) {\n let htmlCode = '';\n const expLn = exps.length;\n let i = 0;\n\n for (; i < expLn; ++i) {\n htmlCode += strings[i] + exps[i];\n }\n htmlCode += strings[i];\n\n const frag = document.createDocumentFragment();\n const wrapper = document.createElement('div');\n\n frag.appendChild(wrapper);\n wrapper.innerHTML = htmlCode;\n\n treeShakeNode(wrapper);\n const { innerHTML } = wrapper;\n\n return () => innerHTML;\n}\n","import { mergeRecursive } from 'muze-utils';\n\nconst defaultPolicy = (registrableComponents) => {\n const aliases = registrableComponents.map(comp => comp.alias());\n return {\n behaviours: {\n '*': (propagationPayload) => {\n const propagationCanvas = propagationPayload.sourceCanvas;\n return propagationCanvas ? aliases.indexOf(propagationCanvas) !== -1 : true;\n }\n }\n };\n};\n\nclass ActionModel {\n constructor () {\n this._registrableComponents = [];\n }\n\n registerPhysicalActions (action) {\n const canvases = this._registrableComponents;\n\n canvases.forEach((canvas) => {\n canvas.once('canvas.updated').then((args) => {\n const matrix = args.client.composition().visualGroup.matrixInstance().value;\n matrix.each(cell => cell.valueOf().firebolt().registerPhysicalActions(action));\n });\n });\n return this;\n }\n\n registerBehaviouralActions (...actions) {\n const canvases = this._registrableComponents;\n\n canvases.forEach((canvas) => {\n canvas.once('canvas.updated').then(() => {\n const matrix = canvas.composition().visualGroup.matrixInstance().value;\n matrix.each(cell => cell.valueOf().firebolt().registerBehaviouralActions(...actions));\n });\n });\n return this;\n }\n\n /**\n *\n *\n * @param {*} map\n * @returns\n * @memberof ActionModel\n */\n registerPhysicalBehaviouralMap (map) {\n const canvases = this._registrableComponents;\n\n canvases.forEach((canvas) => {\n canvas.once('canvas.updated').then((args) => {\n const matrix = args.client.composition().visualGroup.matrixInstance().value;\n matrix.each(cell => cell.valueOf().firebolt().registerPhysicalBehaviouralMap(map));\n });\n });\n return this;\n }\n\n registerPropagationBehaviourMap (map) {\n const canvases = this._registrableComponents;\n\n canvases.forEach((canvas) => {\n canvas.once('canvas.updated').then((args) => {\n const matrix = args.client.composition().visualGroup.matrixInstance().value;\n matrix.each(cell => cell.valueOf().firebolt().registerPropagationBehaviourMap(map));\n });\n });\n return this;\n }\n\n mapSideEffects (map) {\n const canvases = this._registrableComponents;\n\n canvases.forEach((canvas) => {\n canvas.once('canvas.updated').then(() => {\n const matrix = canvas.composition().visualGroup.matrixInstance().value;\n matrix.each(cell => cell.valueOf().firebolt().mapSideEffects(map));\n });\n });\n return this;\n }\n\n for (...components) {\n this._registrableComponents = components;\n return this;\n }\n\n registerSideEffects (...sideEffects) {\n const registrableComponents = this._registrableComponents;\n\n registrableComponents.forEach((canvas) => {\n canvas.once('canvas.updated').then((args) => {\n const matrix = args.client.composition().visualGroup.matrixInstance().value;\n matrix.each(cell => cell.valueOf().firebolt().registerSideEffects(sideEffects));\n });\n });\n\n return this;\n }\n\n dissociateBehaviour (...maps) {\n const registrableComponents = this._registrableComponents;\n\n registrableComponents.forEach((canvas) => {\n canvas.once('canvas.updated').then((args) => {\n const matrix = args.client.composition().visualGroup.matrixInstance().value;\n matrix.each((cell) => {\n maps.forEach(val => cell.valueOf().firebolt().dissociateBehaviour(val[0], val[1]));\n });\n });\n });\n\n return this;\n }\n\n dissociateSideEffect (...maps) {\n const registrableComponents = this._registrableComponents;\n\n registrableComponents.forEach((canvas) => {\n canvas.once('canvas.updated').then((args) => {\n const matrix = args.client.composition().visualGroup.matrixInstance().value;\n matrix.each((cell) => {\n maps.forEach(val => cell.valueOf().firebolt().dissociateSideEffect(val[0], val[1]));\n });\n });\n });\n\n return this;\n }\n\n enableCrossInteractivity (policy = {}) {\n const registrableComponents = this._registrableComponents;\n const mergedPolicy = mergeRecursive(mergeRecursive({}, defaultPolicy(registrableComponents)), policy);\n\n registrableComponents.forEach((canvas) => {\n canvas.firebolt().crossInteractionPolicy(mergedPolicy);\n });\n\n return this;\n }\n}\n\nexport const actionModel = (() => new ActionModel())();\n","export const DEFAULT_CONFIG = {\n classPrefix: 'muze',\n interaction: {\n sideEffect: 'individual'\n },\n legend: {\n position: 'right',\n color: {\n show: true,\n padding: 2,\n margin: 2,\n border: 1,\n height: 30,\n width: 30\n },\n shape: {\n show: true,\n padding: 2,\n margin: 2,\n border: 1,\n height: 30,\n width: 30\n },\n size: {\n show: true,\n padding: 2,\n margin: 2,\n border: 1,\n height: 30,\n width: 30\n }\n },\n showHeaders: false,\n minWidth: 100,\n minHeight: 100,\n border: {\n style: 'solid',\n color: '#d6d6d6',\n width: 2,\n collapse: true,\n spacing: 0\n },\n autoGroupBy: {\n disabled: false\n }\n};\n","/**\n * @module\n * This is the global options semantics based on which setters getters are created and reactivity is initiated.\n * Format\n * PROPERTRY_NAME: {\n * value: // default value of the property,\n * meta: {\n * typeCheck: // The setter value will be checked using this. If the value is function then the setter value\n * // is passed as args.\n * typeExpected: // The output of typecheck action will be tested against this. Truthy value will set the\n * // value to the setter\n * sanitizaiton: // Need for sanitization before type is checked\n * }\n * }\n */\n\nimport { intSanitizer, mergeRecursive, DataModel } from 'muze-utils';\nimport { DEFAULT_CONFIG } from './defaults';\n\nexport default {\n data: {\n value: null,\n meta: {\n typeCheck: d => d instanceof DataModel\n }\n },\n width: {\n value: 0,\n meta: {\n sanitization: intSanitizer,\n typeCheck: Number.isInteger\n }\n },\n height: {\n value: 0,\n meta: {\n sanitization: intSanitizer,\n typeCheck: Number.isInteger\n }\n },\n minUnitWidth: {\n value: 50,\n meta: {\n sanitization: intSanitizer,\n typeCheck: Number.isInteger\n }\n },\n minUnitHeight: {\n value: 50,\n meta: {\n sanitization: intSanitizer,\n typeCheck: Number.isInteger\n }\n },\n config: {\n value: null,\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Object',\n sanitization: (config, oldConfig) => {\n const oldConf = mergeRecursive({}, oldConfig);\n const defConfig = mergeRecursive(oldConf, DEFAULT_CONFIG);\n const newConf = mergeRecursive(defConfig, config);\n return newConf;\n }\n\n }\n }\n};\n","/**\n * This file exports constants that will be used to\n * create the state store of the table layout.\n */\n/**\n * The index of top, bottom and center in the matrix\n */\nexport const VIEW_INDEX = {\n top: 0,\n center: 1,\n bottom: 2\n};\n\n/**\n * The width of the grid suppied by the user.\n */\nexport const GRID_WIDTH = 'width';\n\n/**\n * The height of the grid supplied by the user.\n */\nexport const GRID_HEIGHT = 'height';\n\n/**\n * The border for the grid\n */\nexport const BORDER = 'border';\n\n /**\n * The index of the first visible row in view matrix.\n */\nexport const ROW_POINTER = 'rowPointer';\n\n/**\n * The index of the first visible column in the view matrix.\n */\nexport const COLUMN_POINTER = 'columnPointer';\n\n/**\n * Flag to specify whether row sizes should be equal.\n */\nexport const ROW_SIZE_IS_EQUAL = 'isRowSizeEqual';\n\n/**\n * Flag to specify whether column sizes are equal.\n */\nexport const COLUMN_SIZE_IS_EQUAL = 'isColumnSizeEqual';\n\n/**\n * Field to store an array an of the widths of visible columns.\n * @computed\n */\nexport const COLUMN_WIDTHS = 'visibleColumnWidths';\n\n/**\n * Field to store an array of heights of visible rows.\n * @computed\n */\nexport const ROW_HEIGHTS = 'visibleRowHeights';\n\n/**\n * Field to store the width of the left matrix.\n * @computed\n */\nexport const LEFT_MATRIX_WIDTH = 'leftMatrixWidth';\n\n/**\n * Field to store the width of the right matrix.\n * @computed\n */\nexport const RIGHT_MATRIX_WIDTH = 'rightMatrixWidth';\n\n/**\n * Field to store the height of the top matrix.\n * @computed\n */\nexport const TOP_MATRIX_HEIGHT = 'topMatrixHeight';\n\n/**\n * Field to store the height of the bottom matrix.\n * @computed\n */\nexport const BOTTOM_MATRIX_HEIGHT = 'bottomMatrixHeight';\n\n/**\n * The dom element to render the layout inside.\n */\nexport const MOUNT_POINT = 'mount';\n\n/**\n * The id attribute of the left table element.\n */\nexport const LEFT_TABLE_ID = 'grid-left';\n\n/**\n * The id attribute of the right table element.\n */\nexport const RIGHT_TABLE_ID = 'grid-right';\n\n/**\n * The id attribute of the top table.\n */\nexport const TOP_TABLE_ID = 'grid-top';\n\n/**\n * The id attribute of the bottom table.\n */\nexport const BOTTOM_TABLE_ID = 'grid-bottom';\n\n/**\n * The id attribute of the center table.\n */\nexport const CENTER_TABLE_ID = 'grid-center';\n\n/**\n * The id attribute of the top div.\n */\nexport const TOP_DIV_ID = 'muze-div-top';\n\n/**\n * The id attribute of the bottom div.\n */\nexport const BOTTOM_DIV_ID = 'muze-div-bottom';\n\n/**\n * The id attribute of the center div.\n */\nexport const CENTER_DIV_ID = 'muze-div-center';\n\n/**\n * Field that indicates if the row configuration has changed\n */\nexport const HAVE_ROWS_CHANGED = 'haveRowsChanged';\n\n/**\n * Field that indicates if the column configuration has changed\n */\nexport const HAVE_COLUMNS_CHANGED = 'haveColumnsChanged';\n\n/**\n * Field that indicates if the values configuration for the center matrix has changed\n */\nexport const HAVE_VALUES_CHANGED = 'haveValuesChanged';\n\n/**\n * Field that indicates the width of row matrix\n */\nexport const ROW_MATRIX_WIDTH = 'rowMatrixWidth';\n\n/**\n * Field that indicates the height of row matrix\n */\nexport const COLUMN_MATRIX_HEIGHT = 'columnMatrixHeight';\n\n/**\n * Field that indicates the unit width of layout\n */\nexport const UNIT_WIDTH = 'unitWidth';\n\n/**\n * Field that indicates the unit height of layout\n */\nexport const UNIT_HEIGHT = 'unitHeight';\n\n/**\n * Field that indicates the style object\n */\nexport const STYLE = 'style';\n\n/**\n * Field that indicates the color configuration\n */\nexport const COLOR = 'color';\n\n/**\n * Field that indicates width\n */\nexport const WIDTH = 'width';\n\n/**\n * Field that indicates collpase property for border\n */\nexport const COLLAPSE = 'collapse';\n\n/**\n * Field that indicates spacing property for border\n */\nexport const SPACING = 'spacing';\n\n/**\n * Field that indicates spacing property for border\n */\nexport const DISTRIBUTION = 'distribution';\n\n/**\n * Field that indicates spacing property for border\n */\nexport const GUTTERSPACE = 'gutterSpace';\n\n/**\n * Field that indicates spacing property for border\n */\nexport const BREAK_PAGE = 'breakPage';\n\n/**\n * Field that indicates spacing property for border\n */\nexport const SHOW_ROW_BORDERS = 'showRowBorders';\n\n/**\n * Field that indicates spacing property for border\n */\nexport const SHOW_COL_BORDERS = 'showColBorders';\n\n/**\n * Field that indicates spacing property for border\n */\nexport const SHOW_VALUE_BORDERS = 'showValueBorders';\n\nexport const HEIGHT = 'height';\nexport const COLUMN = 'column';\nexport const ROW = 'row';\nexport const TOP = 'top';\nexport const LEFT = 'left';\nexport const RIGHT = 'right';\nexport const BOTTOM = 'bottom';\nexport const CENTER = 'center';\nexport const CLICK = 'click';\nexport const ROW_LEFT = 'rowLeft';\nexport const ROW_RIGHT = 'rowRight';\nexport const COLUMN_BOTTOM = 'colBottom';\nexport const COLUMN_TOP = 'colTop';\nexport const AUTO = 'auto';\nexport const ROW_SPAN = 'rowSpan';\nexport const COL_SPAN = 'colSpan';\nexport const ROW_ROOT = 'rowRoot';\nexport const COLUMN_ROOT = 'columnRoot';\nexport const PRIMARY = 'primary';\nexport const SECONDARY = 'secondary';\n","import { sanitizeIP, mergeRecursive } from 'muze-utils';\nimport { TOP, CENTER, BOTTOM } from '../enums/constants';\n\n/*\n * This is the abstract implementation of the root layout. This takes care of common work which all the layouts\n * has to handle. The common work includes sanitizaion of inputs, update, rerender, dispose etc. This class can't be\n * used directly (as ofcourse this is an abstract implementaiton), the class which is implementing it has to implement\n * the necessary methods and gives its on visual.\n */\n\n/**\n * This class is used to create a generic layout. It can be extended to create layouts\n * of different types\n * @class GenericLayout\n */\nexport default class GenericLayout {\n\n /**\n * Creates an instance of TableLayout.\n * @param {HTMLElement} mountPoint DOM element/d3 selection where the layout is to be mounted\n * @param {Object} measurement The dimensions of the layout\n * @param {Object} config configuration to be given for the layout\n * @param {Object} dependencies external dependencies.\n * @memberof GenericLayout\n *\n * measurement : {\n * width : number => width of the container\n * height : number => height of the container\n * unitHeight : number => height of unit of the cells\n * unitWidth : number => width of unit of the cells\n * }\n *\n */\n constructor (mountPoint, measurement, config, dependencies) {\n this._config = {};\n this._measurement = {};\n this._matrices = [];\n // External dependencies to be included for the layout. This includes the ext global dependencies like\n // smartlabel which has one single implementation of throughout the page or per isntance\n this._dependencies = dependencies;\n\n this.measurement(measurement);\n this.mountPoint(mountPoint);\n this.config(config);\n }\n\n /**\n * Returns an object which is used to recreate the layout.\n * @return {Object} the serialized components\n */\n serialize () {\n return {\n measurement: this.measurement(),\n config: this.config(),\n matrices: this.matrices()\n };\n }\n\n /**\n * Sets/Gets the config for the layout\n * @param {Object} config configuration for the layout\n * @return {Layout|Object} Gets the Config/ Returns this instance when set\n */\n config (config) {\n if (config) {\n this._config = mergeRecursive(this._config || {}, config);\n return this;\n }\n return this._config;\n }\n\n /**\n * Sets/Gets the measurement for the layout\n * @param {Object} measurement measurement for the layout\n * @return {Layout|Object} Gets the measurement/ Returns this instance when set\n */\n measurement (measurement) {\n if (measurement) {\n this._measurement = mergeRecursive(this._measurement || {}, measurement);\n\n return this;\n }\n return this._measurement;\n }\n\n /**\n * Sets/Gets the matrices for the layout\n * @param {Object} matrices matrices for the layout\n * @return {Layout|Object} Gets the matrices/ Returns this instance when set\n */\n matrices (matrices) {\n if (matrices) {\n this._matrices = sanitizeIP.typeObj([TOP, CENTER, BOTTOM], matrices);\n\n return this;\n }\n return this._matrices;\n }\n\n /**\n * Sets/Gets the matrix for row\n * @param {Object} matrix matrices for the layout\n * @return {Layout|Object} Gets the matrix/ Returns this instance when set\n */\n rowMatrix (matrix) {\n if (matrix) {\n this._rowMatrix = matrix;\n return this;\n }\n return this._rowMatrix;\n }\n\n /**\n * Sets/Gets the matrix for columns\n * @param {Object} matrix matrices for the layout\n * @return {Layout|Object} Gets the matrix/ Returns this instance when set\n */\n columnMatrix (matrix) {\n if (matrix) {\n this._columnMatrix = matrix;\n return this;\n }\n return this._columnMatrix;\n }\n\n /**\n * Sets/Gets the matrix for value\n * @param {Object} matrix matrices for the layout\n * @return {Layout|Object} Gets the matrix/ Returns this instance when set\n */\n centerMatrix (matrix) {\n if (matrix) {\n this._centerMatrix = matrix;\n return this;\n }\n return this._centerMatrix;\n }\n\n /**\n * Sets/Gets the mountPoint for the layout\n * @param {Object} mountPoint mountPoint for the layout\n * @return {Layout|Object} Gets the mountPoint/ Returns this instance when set\n */\n mountPoint (mountPoint) {\n if (mountPoint) {\n this._mountPoint = mountPoint;\n\n return this;\n }\n return this._mountPoint;\n }\n}\n","import * as FieldNames from '../enums/constants';\n\n/**\n * Default configuration of the layout\n * @return {Object} returns the default configuration\n */\nexport const DEFAULT_CONFIGURATION = {\n [FieldNames.BORDER]: {\n [FieldNames.STYLE]: 'solid',\n [FieldNames.COLOR]: '#d6d6d6',\n [FieldNames.WIDTH]: 2,\n [FieldNames.COLLAPSE]: true,\n [FieldNames.SPACING]: 0\n },\n [FieldNames.GUTTERSPACE]: { rows: [], columns: [] },\n [FieldNames.DISTRIBUTION]: { rows: [], columns: [] },\n [FieldNames.BREAK_PAGE]: { rows: [], columns: [] },\n [FieldNames.ROW_SIZE_IS_EQUAL]: false,\n [FieldNames.COLUMN_SIZE_IS_EQUAL]: false,\n [FieldNames.COLUMN_POINTER]: 0,\n [FieldNames.ROW_POINTER]: 0\n};\n\n/**\n * Default measurements for the layout\n * @return {Object} returns the default measurements\n */\nexport const DEFAULT_MEASUREMENTS = {\n [FieldNames.GRID_WIDTH]: 100,\n [FieldNames.GRID_HEIGHT]: 100,\n [FieldNames.UNIT_WIDTH]: 100,\n [FieldNames.UNIT_HEIGHT]: 100\n};\n\nexport const BLANK_BORDERS = 'rgba(0,0,0,0)';\n","import { ROW_LEFT, ROW_RIGHT, COLUMN_BOTTOM, COLUMN_TOP, TOP, BOTTOM } from '../enums/constants';\n/**\n * This callback is used to filter the array of\n * placeholder cells and filter out cells which have\n * appeared in a previous row.\n *\n * @param {Placeholder} colData Instance of placeholder.\n * @param {number} colIdx The index of the placeholder in array.\n * @param {Array} matrix The 2d array for which filtering is to be done\n * @param {number} rIdx The index of the row of the placeholder in array.\n * @param {string} type The type of matrix it is (rowLeft, rowRight, colTop, colBottom)\n * @return {boolean} flag to keep/remove element.\n */\nconst columnFilter = (colData, colIdx, matrix, rIdx, type) => {\n const previousRow = matrix[rIdx - 1];\n const currentRow = matrix[rIdx];\n\n // Row Span for left\n if (type === ROW_LEFT) {\n if (!previousRow) {\n return colData;\n }\n let i = 0;\n for (;i <= colIdx; i += 1) {\n if (currentRow[i].valueOf() !== previousRow[i].valueOf()) {\n break;\n }\n }\n return (i - 1 === colIdx) ? null : colData;\n } else if (type === ROW_RIGHT) {\n if (!previousRow || colIdx === 0) {\n return colData;\n }\n let j = colIdx;\n for (; j < currentRow.length; j += 1) {\n if (previousRow[j].valueOf() !== currentRow[j].valueOf()) {\n break;\n }\n }\n return (j === currentRow.length) ? null : colData;\n } else if (type === COLUMN_BOTTOM) {\n if (rIdx === 0) {\n return colData;\n }\n const prevCell = currentRow[colIdx - 1];\n if (prevCell) {\n if (prevCell.valueOf() === colData.valueOf()) {\n const nextRow = matrix[rIdx + 1];\n if (!nextRow) {\n return null;\n }\n if (nextRow[colIdx].valueOf() === nextRow[colIdx - 1].valueOf()) {\n return null;\n }\n return colData;\n }\n return colData;\n }\n return colData;\n } else if (type === COLUMN_TOP) {\n if (rIdx === matrix.length - 1 && matrix.length > 1) {\n return colData;\n }\n const prevCell = currentRow[colIdx - 1];\n if (prevCell && (prevCell.valueOf() === colData.valueOf())) {\n const prevRow = matrix[rIdx - 1];\n if (prevRow) {\n if (prevRow[colIdx].valueOf() === prevRow[colIdx - 1].valueOf()) {\n return null;\n }\n return colData;\n }\n return null;\n }\n return colData;\n }\n return colData;\n};\n\n/**\n * This callback is used to calculate the rowspan\n * by checking for repeating entries in subsequent rows\n * at the specified column.\n *\n * @param {Placeholder} colData Instance of placeholder.\n * @param {number} colIdx The index of the placeholder in the array.\n * @param {Array} matrix The 2d array for which filtering is to be done\n * @param {number} rIdx The index of the row of the placeholder in array.\n * @return {number} The row span.\n */\nconst calcRowSpan = (colData, colIdx, matrix, rIdx) => {\n let count = 1;\n // if data is not header cell then rowspan\n // has to be 1\n if (!colData || typeof colData.valueOf() !== 'string') {\n return 1;\n }\n let isNull = false;\n while (!isNull) {\n if (matrix[rIdx + count] && matrix[rIdx + count][colIdx] === null) {\n count += 1;\n } else {\n isNull = true;\n }\n }\n return count;\n};\n/**\n * This callback is used to calculate the rowspan\n * by checking for repeating entries in subsequent rows\n * at the specified column.\n *\n * @param {Placeholder} colData Instance of placeholder.\n * @param {number} colIdx The index of the placeholder in the array.\n * @param {Array} matrix The 2d array for which filtering is to be done\n * @param {number} rIdx The index of the row of the placeholder in array.\n * @return {number} The row span.\n */\nconst calcColSpan = (colData, colIdx, matrix, rIdx) => {\n let count = 1;\n // if data is not header cell then rowspan\n // has to be 1\n if (!colData || typeof colData.valueOf() !== 'string') {\n return 1;\n }\n let isNull = false;\n while (!isNull) {\n if (matrix[rIdx][colIdx + count] === null) {\n count += 1;\n } else {\n isNull = true;\n }\n }\n return count;\n};\n\n// create a masking matrix to strip out repeating columns\n// and calculate rowspan.\nconst mask = function (matrix, type) {\n return matrix.map((row, rIdx) => {\n if (type === ROW_LEFT || type === ROW_RIGHT) {\n const filteredRow = row.map((col, colIndex) => columnFilter(col, colIndex, matrix, rIdx, type));\n const temp = [];\n const diff = row.length - filteredRow.length;\n for (let i = 0; i < diff; i += 1) {\n temp.push(null);\n }\n if (type === ROW_RIGHT) {\n temp.unshift(...filteredRow);\n return temp;\n }\n temp.push(...filteredRow);\n return temp;\n }\n\n const filteredRow = row.map((col, colIndex) => columnFilter(col, colIndex, matrix, rIdx, type));\n const temp = [];\n temp.push(...filteredRow);\n return temp;\n });\n};\n\n/**\n * This function is used to set the col and row spans\n * for the matrices based on repeated/hierarchichal data\n *\n * @export\n * @param {Array} matrix The 2d array for which filtering is to be done\n * @param {string} type Type of array (center, top, bottom)\n * @param {number} index Index of array in the row\n * @return {Object} containing the view matrix and their spans\n */\nexport function cellSpanMaker (matrix, type, index) {\n let span = '';\n if (type === TOP || type === BOTTOM) {\n span = type === TOP ? COLUMN_TOP : COLUMN_BOTTOM;\n const viewMatrix = mask(matrix, span);\n const spans = viewMatrix.map((row, ridx) => row.map((col, i) => calcColSpan(col, i, viewMatrix, ridx))\n .filter(col => col !== 1));\n return { viewMatrix, spans };\n } else if (index === 0 || index === 2) {\n span = index === 0 ? ROW_LEFT : ROW_RIGHT;\n const viewMatrix = mask(matrix, span);\n const spans = [];\n viewMatrix.forEach((row, ridx) => {\n spans[ridx] = spans[ridx] || [];\n row.forEach((col, i) => {\n if (viewMatrix[ridx][i]) {\n const currSpan = calcRowSpan(col, i, viewMatrix, ridx);\n currSpan && spans[ridx].push(currSpan);\n }\n });\n });\n return { viewMatrix, spans };\n }\n return { viewMatrix: matrix };\n}\n","import { makeElement, selectElement } from 'muze-utils';\nimport { cellSpanMaker } from './span-maker';\nimport {\n TOP, LEFT, RIGHT, BOTTOM, CENTER, WIDTH, ROW_SPAN, COL_SPAN\n} from '../enums/constants';\nimport { BLANK_BORDERS } from './defaults';\n\n/**\n * Creates a table element of the layout\n *\n * @param {Object} mount Mount point for table elements\n * @param {string} className defines class name\n * @param {Array} rowData set of rows for the table\n * @return {Selection} set of selections for the table\n */\nfunction renderTable (mount, className, rowData) {\n const table = makeElement(mount, 'table', ['layout'], `${className}-table`);\n const body = makeElement(table, 'tbody', ['layout'], `${className}-body`);\n const rows = makeElement(body, 'tr', rowData, `${className}-tr`);\n const cells = makeElement(rows, 'td', (d, i) => d.filter(e => e !== null).map(e =>\n ({ placeholder: e, rowIndex: i })), `${className}-td`, {}, key => key.placeholder.id);\n\n return { table, body, rows, cells };\n}\n\nfunction applyRowBorders (cells, borderStyle, showBorders, color) {\n [TOP, BOTTOM].forEach((borderType) => {\n const style = `${borderStyle} ${showBorders[borderType] ? color : BLANK_BORDERS}`;\n cells.style(`border-${borderType}`, style);\n });\n}\n\nfunction applyColBorders (cells, borderStyle, showBorders, color) {\n [LEFT, RIGHT].forEach((borderType) => {\n const style = `${borderStyle} ${showBorders[borderType] ? color : BLANK_BORDERS}`;\n cells.style(`border-${borderType}`, style);\n });\n}\n\n/**\n * Applies borders to the cells in a matrix\n *\n * @param {Selection} cells Set of cells made from the matrix\n * @param {Object} border Border info for layout\n * @param {string} type Type of matrix(top/center/bottom)\n * @param {number} index Column index of matrix in the row\n */\nfunction applyBorders (cells, border, type, index) {\n const {\n width,\n style,\n color,\n showRowBorders,\n showColBorders,\n showValueBorders\n } = border;\n const borderStyle = `${width}px ${style}`;\n\n if (type === CENTER && index === 1) {\n [TOP, BOTTOM, LEFT, RIGHT].forEach((borderType) => {\n cells.style(`border-${borderType}`, `${borderStyle} ${showValueBorders[borderType] ?\n color : BLANK_BORDERS}`);\n });\n } else if (type === CENTER) {\n applyRowBorders(cells, borderStyle, showRowBorders, color);\n } else if (index === 1) {\n applyColBorders(cells, borderStyle, showColBorders, color);\n }\n}\n\n/**\n * Renders a set of matrices in a row\n *\n * @param {Array} matrices Set of matrices in a row\n * @param {Selection} mountPoint Mount point for the row\n * @param {string} type top/center/bottom\n * @param {Object} dimensions dimensions of the matrix\n */\nfunction renderMatrix (matrices, mountPoint, type, dimensions, classPrefix) {\n matrices.forEach((matrix, index) => {\n // Creating containers for each matrix individually\n const containerForMatrix = makeElement(mountPoint, 'div', [1], `${classPrefix}-grid-${type}-${index + 1}`)\n .classed(`${classPrefix}-grid-${type}`, true)\n .classed(`${classPrefix}-grid`, true);\n\n const {\n viewMatrix,\n spans\n } = cellSpanMaker(matrix, type, index);\n\n // Rendering the table components\n const { cells } = renderTable(containerForMatrix, `${classPrefix}-grid`, viewMatrix);\n\n if (type === CENTER && spans) {\n cells.attr(ROW_SPAN, function (cell, colIndex) {\n const placeholder = cell.placeholder;\n selectElement(this).style('height', `${placeholder.availHeight() + dimensions.border.width}px`);\n return spans[cell.rowIndex][colIndex];\n });\n } else if ((type === TOP || type === BOTTOM) && index === 1) {\n cells.attr(COL_SPAN, function (cell, colIndex) {\n const span = spans[cell.rowIndex][colIndex];\n const placeholder = cell.placeholder;\n if (span > 1) {\n placeholder.setAvailableSpace(0, placeholder.availHeight());\n }\n selectElement(this).style('height', `${placeholder.availHeight()}px`);\n return span;\n });\n }\n // Rendering content within placeholders\n cells.each(function (cell) {\n cell.placeholder && cell.placeholder.render(this);\n }).exit().each((cell) => {\n cell.placeholder && cell.placeholder.remove();\n });\n\n applyBorders(cells, dimensions.border, type, index);\n });\n}\n\n/**\n * Renders all the matrices of the layout\n *\n * @export\n * @param {Array} matrices Set of matrices in the layout\n * @param {Array} mountPoints Mount points for each row of matrix\n * @param {Array} layoutDimensions Dimensions(height/width) of all the matrices\n */\nexport function renderMatrices (context, matrices, layoutDimensions) {\n const {\n top,\n center,\n bottom\n } = matrices;\n const {\n classPrefix\n } = context.config();\n const {\n width\n } = context.measurement();\n const mount = context.mountPoint();\n\n const data = [\n { type: TOP, matrix: top },\n { type: CENTER, matrix: center },\n { type: BOTTOM, matrix: bottom }\n ];\n makeElement(mount, 'div', data, `${classPrefix}-grid-layout-row`)\n .each(function (d, i) {\n const row = selectElement(this);\n row.classed(`${classPrefix}-grid-layout-row-${i}`, true);\n renderMatrix(d.matrix, row, d.type, layoutDimensions, classPrefix);\n })\n .style(WIDTH, `${Math.ceil(width)}px`);\n}\n","/**\n * This file exports utility functions that are used across the layout module\n */\nimport { Symbols } from 'muze-utils';\nimport { PRIMARY, SECONDARY, HEIGHT, WIDTH } from '../enums/constants';\n\nconst nest = Symbols.nest;\n/**\n *\n *\n * @param {*} isTransposed\n * @returns\n */\nconst getMeasureInfo = (isTransposed) => {\n if (isTransposed) {\n return {\n firstMeasure: HEIGHT,\n secondMeasure: WIDTH\n };\n }\n return {\n firstMeasure: WIDTH,\n secondMeasure: HEIGHT\n };\n};\n\n/**\n *\n *\n * @param {*} i\n * @param {*} page\n * @returns\n */\nconst findInPage = (i, page) => {\n let count = 0;\n for (const x in page) {\n if (i < page[x]) {\n count = x;\n break;\n }\n }\n return count;\n};\n\n/**\n * Creates a single matrix from two matrices\n *\n * @param {Array} matrix Input matrix\n * @return {Array} Joined matrix\n * @memberof VisualMatrix\n */\nexport const combineMatrices = (matrix, config) => {\n const { isTransposed } = config;\n let joinedMatrix = matrix[0].length > 0 ? matrix[0] : matrix[1];\n if (isTransposed) {\n joinedMatrix = matrix[0].length > 0 ? [...matrix[0]] : [];\n joinedMatrix = matrix[1].length > 0 ? [...joinedMatrix, ...matrix[1]] : joinedMatrix;\n } else {\n joinedMatrix = joinedMatrix.map((row, rowIndex) => {\n let rowData = [];\n if (matrix[0].length > 0) {\n rowData = [...matrix[0][rowIndex]];\n }\n if (matrix[1].length > 0) {\n rowData = [...rowData, ...matrix[1][rowIndex]];\n }\n return rowData;\n });\n }\n return joinedMatrix;\n};\n\n/**\n * Creates a hirachical tree from the context\n *\n * @param {Object} context context for creating tree\n * @return {Object} nested tree\n */\nexport const createTree = (context) => {\n let matrixTree = {};\n let lastLevelKey = 0;\n let facet = PRIMARY;\n const nestFn = nest();\n const keys = [];\n const layoutMatrix = context._layoutMatrix;\n const primaryMatrix = context.primaryMatrix();\n const secondaryMatrix = context.secondaryMatrix();\n const { isTransposed, breakPage } = context.config();\n\n if (!isTransposed) {\n if (primaryMatrix.length === 0) {\n facet = PRIMARY;\n } else if (secondaryMatrix.length === 0) {\n facet = SECONDARY;\n } else {\n facet = primaryMatrix.length >= secondaryMatrix.length ? PRIMARY : SECONDARY;\n }\n if (primaryMatrix.length > 0) {\n for (let i = 0; i < primaryMatrix[0].length - 1; i++) {\n keys.push(i);\n }\n keys.push(primaryMatrix[0].length - 1);\n if (facet === SECONDARY || secondaryMatrix.length === 0) {\n lastLevelKey = primaryMatrix[0].length - 1;\n }\n }\n if (secondaryMatrix.length > 0) {\n const keyLength = primaryMatrix.length > 0 ? primaryMatrix[0].length : 0;\n for (let i = secondaryMatrix[0].length - 1; i > 0; i--) {\n keys.push(i + keyLength);\n }\n keys.push(keyLength);\n\n if (facet === PRIMARY) {\n lastLevelKey = keyLength;\n }\n } else {\n lastLevelKey = primaryMatrix.length > 0 ? primaryMatrix[0].length - 1 : 0;\n }\n keys.forEach((key) => {\n let counter = -1;\n return nestFn.key((d) => {\n counter++;\n return `${d[key].valueOf()}-${findInPage(counter, breakPage)}`;\n });\n });\n matrixTree = nestFn.entries(layoutMatrix);\n } else {\n if (primaryMatrix.length === 0) {\n facet = PRIMARY;\n } else if (secondaryMatrix.length === 0) {\n facet = SECONDARY;\n } else {\n facet = primaryMatrix.length >= secondaryMatrix.length ? PRIMARY : SECONDARY;\n }\n if (primaryMatrix.length > 0) {\n for (let i = 0; i < primaryMatrix.length - 1; i++) {\n keys.push(i);\n }\n // if (facet === PRIMARY) {\n keys.push(primaryMatrix.length - 1);\n // } else {\n if (facet === SECONDARY) {\n lastLevelKey = primaryMatrix.length - 1;\n }\n }\n if (secondaryMatrix.length > 0) {\n const primaryMatrixLength = primaryMatrix.length;\n for (let i = secondaryMatrix.length - 1; i > 0; i--) {\n keys.push(i + primaryMatrixLength);\n }\n // if (facet === SECONDARY) {\n keys.push(primaryMatrixLength);\n // }\n if (facet === PRIMARY) {\n lastLevelKey = primaryMatrixLength;\n }\n }\n keys.forEach((key) => {\n let counter = -1;\n return nestFn.key((d) => {\n counter++;\n return `${d[key].valueOf()}-${findInPage(counter, breakPage)}`;\n });\n });\n let newMatrix = [];\n newMatrix = layoutMatrix[0].map((col, colIndex) => layoutMatrix.map(row => row[colIndex]));\n matrixTree = nestFn.entries(newMatrix);\n }\n return { tree: matrixTree, lastLevelKey };\n};\n\n/**\n * Gives the min measues\n *\n * @param {boolean} isTransposed is column matrix\n * @param {Object} unitMeasures min measures to be given to cells\n * @return {Object} dimension min cell\n */\nexport const getMinMeasures = (isTransposed, unitMeasures) => {\n if (!isTransposed) {\n return {\n height: unitMeasures.height,\n width: 0\n };\n }\n return {\n height: 0,\n width: unitMeasures.width\n };\n};\n\n/**\n * Get the logical space from the tree\n *\n * @param {Node} item tree to be calculated\n * @param {number} measures width and height\n * @param {Array} minMeasures min measures for a cell\n * @param {Array} maxMeasure max measures for a col/row\n * @return {Object} dimension\n */\nexport const getLogicalSpace = (item, measures, minMeasures, maxMeasure = []) => {\n const { firstMeasure, secondMeasure } = measures;\n let firstMeasureValue = 0;\n let secondMeasureValue = 0;\n item.values.forEach((valueArray) => {\n let fMeasure = 0;\n let sMeasure = 0;\n valueArray.forEach((placeholder, colIndex) => {\n placeholder.logicalSpace(null);\n const space = placeholder.getLogicalSpace();\n sMeasure = Math.max(sMeasure, +space[secondMeasure], minMeasures[secondMeasure]);\n maxMeasure[colIndex] = Math.max(maxMeasure[colIndex] || 0, space[firstMeasure]);\n fMeasure += +maxMeasure[colIndex];\n });\n secondMeasureValue += sMeasure;\n firstMeasureValue = Math.max(firstMeasureValue, fMeasure);\n item.space = {\n [secondMeasure]: Math.ceil(secondMeasureValue),\n [firstMeasure]: Math.ceil(firstMeasureValue)\n };\n });\n return {\n [secondMeasure]: secondMeasureValue,\n [firstMeasure]: firstMeasureValue\n };\n};\n\n/**\n * Computes the logical spcae taken by the matrix tree\n *\n * @param {*} [item={}] tree to be viewed\n * @param {boolean} [isTransposed=false] is column matrix\n * @param {*} unitMeasures min measues for a cell\n * @param {Array} maxMeasure max measures for a col/row\n * @return {Object} logical space taken\n */\nexport const computeLogicalSpace = (item = {}, config, maxMeasures) => {\n const { isTransposed = false, unitMeasures } = config;\n const { firstMeasure, secondMeasure } = getMeasureInfo(isTransposed);\n const { values } = item;\n const minMeasures = getMinMeasures(isTransposed, unitMeasures);\n if (values[0].key) {\n const logicalSpace = { [firstMeasure]: 0, [secondMeasure]: 0 };\n\n values.forEach((valueItem) => {\n // Compute logical space for lowest level\n const space = computeLogicalSpace(valueItem, config, maxMeasures);\n // Set logical space for first measure\n logicalSpace[firstMeasure] = Math.max(logicalSpace[firstMeasure], space[firstMeasure],\n minMeasures[firstMeasure]);\n // Set logical space for second measure\n logicalSpace[secondMeasure] += +space[secondMeasure];\n });\n item.space = logicalSpace;\n return logicalSpace;\n }\n return getLogicalSpace(item, { firstMeasure, secondMeasure }, minMeasures, maxMeasures);\n};\n\n/**\n * Gives the space taken by a row\n *\n * @param {Array} row matrix array of rows\n * @return {Object} dimension of the row\n */\nexport const spaceTakenByRow = (row) => {\n let height = 0;\n let width = 0;\n row.forEach((col) => {\n const spaces = col.getLogicalSpace();\n height = Math.max(height, spaces.height);\n width += spaces.width;\n });\n return {\n width,\n height\n };\n};\n\n/**\n * Gives the space taken by a column\n *\n * @param {Array} matrix column matrix\n * @param {number} colIndex column index\n * @return {Object} dimension of the column\n */\nexport const spaceTakenByColumn = (matrix, colIndex) => {\n let height = 0;\n let width = 0;\n matrix.forEach((row) => {\n const col = row[colIndex];\n const spaces = col.getLogicalSpace();\n width = Math.max(width, spaces.width);\n height += spaces.height;\n });\n return {\n width,\n height\n };\n};\n\n/**\n * Creates different level matrices\n *\n * @param {Object} item matrix tree\n * @param {boolean} isTransposed is column matrix\n * @return {Object} matrix of each level\n */\nexport const createMatrixEachLevel = (item, isTransposed) => {\n if (item.values[0].key) {\n const arr = [];\n item.values.forEach((child) => {\n if (!isTransposed) {\n arr.push(...createMatrixEachLevel(child, isTransposed));\n } else {\n const eachLevel = createMatrixEachLevel(child, isTransposed);\n eachLevel.forEach((e, i) => {\n arr[i] = arr[i] || [];\n arr[i].push(...e);\n });\n }\n });\n item.matrix = arr;\n return arr;\n }\n if (!isTransposed) {\n item.matrix = item.values;\n } else {\n item.matrix = item.values[0].map((col, colIndex) => item.values.map(row => row[colIndex]));\n }\n return item.matrix;\n};\n\n/**\n * Breaks the matrix into two part\n *\n * @param {Array} matrix input matrix\n * @param {boolean} isTransposed is column matrix\n * @param {number} breakPointer point in matrix where it is to be broken\n * @return {Array} two broken matrix\n */\nexport const breakMatrix = (matrix, isTransposed, breakPointer) => {\n const primaryMatrix = [];\n const secondaryMatrix = [];\n if (isTransposed) {\n matrix.forEach((row, rowIndex) => {\n if (rowIndex >= breakPointer) {\n secondaryMatrix.push(row);\n } else {\n primaryMatrix.push(row);\n }\n });\n } else {\n matrix.forEach((row, rowIndex) => {\n row.forEach((column, columnIndex) => {\n if (columnIndex >= breakPointer) {\n secondaryMatrix[rowIndex] = secondaryMatrix[rowIndex] || [];\n secondaryMatrix[rowIndex].push(column);\n } else {\n primaryMatrix[rowIndex] = primaryMatrix[rowIndex] || [];\n primaryMatrix[rowIndex].push(column);\n }\n });\n });\n }\n return [primaryMatrix, secondaryMatrix];\n};\n\n/**\n * Distributed width returned\n *\n * @param {Object} context context for the width distibution\n * @return {number} distributed widths\n */\nexport const getDistributedWidth = (context, layoutConfig) => {\n const {\n availableWidth,\n width,\n row\n } = context;\n const {\n isDistributionEqual,\n isTransposed,\n distribution\n } = layoutConfig;\n let distSum = 0;\n if (distribution && distribution[0]) {\n distSum = distribution.reduce((t, n) => {\n t += n;\n return t;\n });\n }\n return row.map((col, colIndex) => {\n const space = col.getLogicalSpace().width;\n let distWidth = (space + (availableWidth - width) * (space / width));\n if (isTransposed) {\n if (distribution.length > 0) {\n distWidth = (availableWidth * distribution[colIndex] / distSum);\n } else if (isDistributionEqual || width === 0) {\n const rowLen = row.length;\n distWidth = (availableWidth / rowLen);\n }\n }\n return Math.floor(distWidth);\n });\n};\n\n/**\n * Distributeed heights returned\n *\n * @param {Object} context input for the height distribution\n * @return {Object} distribured heights\n */\nexport const getDistributedHeight = (context) => {\n let distSum = 0;\n let gutterSum = 0;\n let heightWithoutGutter = 0;\n const {\n isTransposed,\n distribution,\n availableHeight,\n height,\n isDistributionEqual,\n gutter,\n matrix,\n cIdx\n } = context;\n\n if (distribution && distribution[0] !== undefined) {\n distSum = distribution.reduce((t, n) => {\n t += n;\n return t;\n });\n }\n if (gutter && gutter[0] !== undefined) {\n gutterSum = gutter.reduce((t, n) => {\n t += n;\n return t;\n });\n }\n heightWithoutGutter = availableHeight - Math.floor(availableHeight * gutterSum);\n\n const colLen = matrix.length;\n return matrix.map((row, rIdx) => {\n const col = row[cIdx];\n const space = col.getLogicalSpace().height;\n let distHeight = (space + (heightWithoutGutter - height) * (space / height));\n\n if (!isTransposed) {\n if (distribution.length > 0 && colLen === distribution.length) {\n distHeight = (heightWithoutGutter * distribution[rIdx] / distSum);\n } else if (isDistributionEqual || context.height === 0) {\n distHeight = (heightWithoutGutter / colLen);\n }\n }\n return Math.floor(distHeight);\n });\n};\n\n/**\n *\n *\n * @param {*} arr\n * @param {*} beg\n * @param {*} end\n */\nexport const extraCellsRemover = (arr, beg, end) => arr.slice(beg, -end);\n\n/**\n * Creates matrix instancess\n *\n * @param {Array} [arr=[]] mutated arry\n * @param {number} depth depth of the tree\n * @param {Array} matrixInfo Details about the matrix(tree, etc) to be inserted\n * @param {boolean} layout Instance of layout\n */\nexport const createMatrixInstances = (arr = [], depth, matrixInfo, layout) => {\n const breakPointer = layout._breakPointer;\n const config = layout.config();\n const {\n isTransposed\n } = config;\n const {\n tree,\n layoutMatrix\n } = matrixInfo;\n\n if (depth === 0) {\n const brokenMatrix = breakMatrix(tree.matrix, isTransposed, breakPointer);\n arr.push({\n matrix: tree.matrix,\n primaryMatrix: brokenMatrix[0],\n secondaryMatrix: brokenMatrix[1],\n space: tree.space\n });\n return arr;\n }\n const nextLevel = depth - 1;\n tree.values.forEach((e) => {\n createMatrixInstances(arr, nextLevel, {\n tree: e,\n layoutMatrix\n }, layout);\n });\n return arr;\n};\n","import { mergeRecursive } from 'muze-utils';\n\nexport const PROPS = {\n config: {\n sanitization: (context, value) => mergeRecursive(context._config || {}, value)\n },\n maxMeasures: {},\n availableSpace: {},\n logicalSpace: {}\n};\n","import { PRIMARY } from '../enums/constants';\n/**\n *\n *\n */\nexport const defaultConfig = {\n distribution: [],\n classPrefix: 'muze',\n isDistributionEqual: true,\n unitMeasures: {\n height: 100,\n width: 100,\n border: 1\n },\n isTransposed: false,\n facet: PRIMARY,\n extraCellLengths: []\n};\n","import { mergeRecursive, generateGetterSetters } from 'muze-utils';\nimport {\n createTree,\n extraCellsRemover,\n combineMatrices,\n spaceTakenByColumn,\n getDistributedHeight,\n getDistributedWidth,\n spaceTakenByRow,\n computeLogicalSpace,\n createMatrixEachLevel,\n createMatrixInstances\n } from '../utils';\nimport { PROPS } from './props';\nimport { COLUMN_ROOT, ROW_ROOT, HEIGHT, WIDTH } from '../enums/constants';\nimport { defaultConfig } from './default-config';\n\n/**\n * This class used to create column / row matrix for GridLayout\n *\n * @class VisualMatrix\n */\nexport default class VisualMatrix {\n\n /**\n *Creates an instance of VisualMatrix.\n * @param {any} matrix Two set of matrices\n * @param {any} [config={}] Configuration for VisualMatrix\n * @memberof VisualMatrix\n */\n constructor (matrix, config = {}) {\n // Prepare matrices\n this._lastLevelKey = 0;\n this._primaryMatrix = matrix[0] || [];\n this._secondaryMatrix = matrix[1] || [];\n this._maxMeasures = [];\n this._availableSpace = {};\n\n // Store the config\n generateGetterSetters(this, PROPS);\n const defCon = Object.assign({}, this.constructor.defaultConfig());\n this.config(mergeRecursive(defCon, config));\n\n this._breakPointer = this.config().isTransposed ? matrix[0].length :\n (matrix[0].length > 0 ? matrix[0][0].length : 0);\n this._layoutMatrix = combineMatrices([matrix[0] || [], matrix[1] || []], this.config());\n\n // Create Tree\n this._tree = {\n key: this.config().isTransposed ? COLUMN_ROOT : ROW_ROOT,\n values: this.createTree()\n };\n this._logicalSpace = this.setLogicalSpace();\n }\n\n /**\n *\n *\n * @param {*} params\n * @returns\n * @memberof VisualMatrix\n */\n primaryMatrix (...params) {\n if (params.length) {\n return this;\n }\n return this._primaryMatrix;\n }\n\n /**\n *\n *\n * @param {*} params\n * @returns\n * @memberof VisualMatrix\n */\n secondaryMatrix (...params) {\n if (params.length) {\n return this;\n }\n return this._secondaryMatrix;\n }\n\n /**\n *\n *\n * @param {*} params\n * @returns\n * @memberof VisualMatrix\n */\n tree (...params) {\n if (params.length) {\n return this;\n }\n return this._tree;\n }\n\n /**\n *\n *\n * @static\n * @return\n * @memberof VisualMatrix\n */\n static defaultConfig () {\n return defaultConfig;\n }\n\n /**\n *\n *\n * @return\n * @memberof VisualMatrix\n */\n createTree () {\n const { tree, lastLevelKey } = createTree(this);\n this._lastLevelKey = lastLevelKey;\n return tree;\n }\n\n /**\n * Computes the logical space taken by the entire matrixTree\n *\n * @return {Object} Logical space taken\n * @memberof VisualMatrix\n */\n setLogicalSpace () {\n const {\n isTransposed\n } = this.config();\n const matrixTree = this.tree();\n createMatrixEachLevel(matrixTree, isTransposed);\n return computeLogicalSpace(matrixTree, this.config(), this.maxMeasures());\n }\n\n /**\n * Returns the space taken by visual matrix\n *\n * @return {Object} space taken by the matrix\n * @memberof VisualMatrix\n */\n getLogicalSpace () {\n return this.logicalSpace();\n }\n\n /**\n * Sets the provied space to the visual matrix\n *\n * @param {number} width width provided\n * @param {number} height height provided\n * @memberof VisualMatrix\n */\n setAvailableSpace (width, height) {\n this.availableSpace({ width, height });\n const tree = this.tree();\n const heightMeasures = this.populateMaxMeasures(HEIGHT, tree);\n const widthMeasures = this.populateMaxMeasures(WIDTH, tree);\n const depth = this.calculateDepth(widthMeasures, heightMeasures);\n\n this.viewableMatrix = this.createViewPortMatrix(depth);\n this.viewableMeasures = this.redistribute(this.viewableMatrix, width, height);\n return this;\n }\n\n /**\n * Populate the max measures in the array\n *\n * @param {Array} measures array to be filled with max measures\n * @param {Object} matrixTree matrix tree of visual matrix\n * @param {number} measure width or height\n * @param {number} [depth=0] depth of the tree that to be calculated\n * @memberof VisualMatrix\n */\n populateMaxMeasures (type, matrixTree, depth = 0, measures = []) {\n measures[depth] = Math.max(measures[depth] || 0, matrixTree.space[type]);\n if (matrixTree.values) {\n const childDepth = depth + 1;\n matrixTree.values.forEach((child) => {\n if (child.space) {\n measures = this.populateMaxMeasures(type, child, childDepth, measures);\n }\n });\n }\n return measures;\n }\n\n /**\n * Calculates the depth of the tree that can be viewed\n *\n * @param {Array} widthMeasures array of widths\n * @param {Array} heightMeasures array of heights\n * @return {number} depth of the tree\n * @memberof VisualMatrix\n */\n calculateDepth (widthMeasures, heightMeasures) {\n let i;\n let j;\n const { height, width } = this.availableSpace();\n\n for (i = 0; i < heightMeasures.length; i++) {\n if (heightMeasures[i] <= height) break;\n }\n for (j = 0; j < widthMeasures.length; j++) {\n if (widthMeasures[j] <= width) break;\n }\n return Math.min(widthMeasures.length - 1, Math.max(i, j));\n }\n\n /**\n * Redistributes the provied space to all cells\n *\n * @param {*} viewableMatrix current viewport matrix\n * @param {*} width provied width\n * @param {*} height provied height\n * @return {Object} current viewports matrixes with measures\n * @memberof VisualMatrix\n */\n redistribute (viewableMatrix, width, height) {\n let maxHeights = [];\n let maxWidths = [];\n const {\n isTransposed\n } = this.config();\n\n viewableMatrix.forEach((matrixInst) => {\n const matrix = matrixInst.matrix;\n const mWidth = 0;\n const mHeight = 0;\n const options = { mWidth, mHeight, matrix, width, height, maxHeights, maxWidths };\n const maxMeasures = isTransposed ? this.redistributeColumnWise(options) : this.redistributeRowWise(options);\n maxWidths = maxMeasures.maxWidths;\n maxHeights = maxMeasures.maxHeights;\n });\n\n const measurements = viewableMatrix.map((matrixInst, i) => {\n let heightMeasures;\n let columnMeasures;\n const cellDimOptions = { matrixInst, maxWidths, maxHeights, matrixIndex: i };\n const { heights, widths, rowHeights, columnWidths } = this.getCellDimensions(cellDimOptions);\n\n if (!isTransposed) {\n heightMeasures = [height, height];\n columnMeasures = widths;\n } else {\n heightMeasures = heights;\n columnMeasures = [width, width];\n }\n return {\n rowHeights: {\n primary: rowHeights[0],\n secondary: rowHeights[1]\n },\n columnWidths: {\n primary: columnWidths[0],\n secondary: columnWidths[1]\n },\n height: {\n primary: heightMeasures[0],\n secondary: heightMeasures[1]\n },\n width: {\n primary: columnMeasures[0],\n secondary: columnMeasures[1]\n }\n };\n });\n\n return measurements;\n }\n\n /**\n * Gets the viewable measures for the current viewable matrix\n *\n * @return {Object} Set of viewable measures\n * @memberof VisualMatrix\n */\n getViewableSpaces () {\n return this.viewableMeasures;\n }\n\n /**\n * Returns the matrix that can be viewed in the current viewport\n *\n * @return {Array} Set of matrices that can be viewed\n * @memberof VisualMatrix\n */\n getViewableData () {\n return this.viewableMatrix;\n }\n\n /**\n *\n *\n * @return\n * @memberof VisualMatrix\n */\n removeExtraCells () {\n const {\n isTransposed,\n extraCellLengths\n } = this.config();\n const matrix = this._layoutMatrix;\n const tree = mergeRecursive({}, this.tree());\n const begCellLen = extraCellLengths[0];\n const endCellLen = extraCellLengths[1] || Number.NEGATIVE_INFINITY;\n const layoutMatrix = !isTransposed ? extraCellsRemover(matrix, begCellLen, endCellLen) :\n matrix.slice(0).map(e => extraCellsRemover(e, begCellLen, endCellLen));\n\n tree.values = extraCellsRemover(tree.values, begCellLen, endCellLen);\n if (!isTransposed) {\n tree.matrix = extraCellsRemover(tree.matrix, begCellLen, endCellLen);\n } else {\n tree.matrix = tree.matrix.map(e => extraCellsRemover(e, begCellLen, endCellLen));\n }\n return {\n tree,\n layoutMatrix\n };\n }\n\n /**\n * Creates the viewport that can be viewed together\n *\n * @param {number} depth maxDepth that can be viewed in the viewport\n * @return {Array} Set of matrices that can be viewed\n * @memberof VisualMatrix\n */\n createViewPortMatrix (depth) {\n const arr = [];\n createMatrixInstances(arr, depth, this.removeExtraCells(), this);\n return arr;\n }\n\n /**\n * Distibutes the given space row wisely\n *\n * @param {Object} options Redistribution information\n * @memberof VisualMatrix\n */\n redistributeRowWise (options) {\n let cWidths = [];\n let rHeights = [];\n let mHeight = 0;\n const maxMeasures = this.maxMeasures();\n const {\n isDistributionEqual,\n distribution,\n isTransposed,\n gutter\n } = this.config();\n const { matrix, width, height, maxHeights, maxWidths } = options;\n\n mHeight = spaceTakenByColumn(matrix, this._lastLevelKey).height;\n\n const maxWidth = maxMeasures.reduce((t, n) => {\n t += n;\n return t;\n });\n if (maxWidth > 0) {\n cWidths = maxMeasures.map(space => space + (width - maxWidth) * (space / maxWidth));\n } else {\n cWidths = maxMeasures.map(() => 0);\n }\n rHeights = getDistributedHeight({\n matrix,\n cIdx: this._lastLevelKey,\n height: mHeight,\n availableHeight: height,\n isDistributionEqual,\n distribution,\n isTransposed,\n gutter\n });\n maxWidths.push(cWidths);\n maxHeights.push(rHeights);\n return { maxWidths, maxHeights };\n }\n\n /**\n * Distibutes the given space column wisely\n *\n * @param {Object} options Redistribution information\n * @memberof VisualMatrix\n */\n redistributeColumnWise (options) {\n let rHeights = [];\n const { matrix, width, maxHeights, maxWidths } = options;\n const borderWidth = this.config().unitMeasures.border;\n const mWidth = spaceTakenByRow(matrix[this._lastLevelKey]).width;\n const cWidths = getDistributedWidth({\n row: matrix[this._lastLevelKey],\n width: mWidth,\n availableWidth: width\n }, this.config());\n\n matrix.forEach((row, rIdx) => row.forEach((col, cIdx) => {\n const oldLogicalSpace = col.getLogicalSpace().height;\n col.setAvailableSpace(cWidths[cIdx] - borderWidth, oldLogicalSpace);\n rHeights[rIdx] = Math.max(rHeights[rIdx] || 0, col.getLogicalSpace().height);\n }));\n\n if (maxHeights.length > 0) {\n rHeights = rHeights.map((e, i) => Math.max(e, maxHeights[0][i]));\n }\n\n maxHeights.push(rHeights);\n\n for (let x = 0; x < maxHeights.length; x++) {\n maxHeights[x] = rHeights;\n }\n maxWidths.push(cWidths);\n return { maxHeights, maxWidths };\n }\n\n /**\n * Dispatch the calculated cell dimensions to all the cells\n *\n * @param {Object} options cell dimension information\n * @return {Object} row and column heights / widths\n * @memberof VisualMatrix\n */\n getCellDimensions (options) {\n let indices = [];\n let unitMeasures = [];\n let mainMeasures = [];\n let computedMeasures = [];\n const {\n isTransposed,\n unitMeasures: measures\n } = this.config();\n const borderWidth = measures.border;\n const { matrixInst, maxWidths, maxHeights, matrixIndex } = options;\n const matrix = matrixInst.matrix;\n const rowHeights = [[0], [0]];\n const columnWidths = [[0], [0]];\n const heights = [0, 0];\n const widths = [0, 0];\n const breakPointer = this._breakPointer;\n\n matrix.forEach((row, rIdx) => {\n row.forEach((cell, cIdx) => {\n const colHeight = maxHeights[matrixIndex][rIdx] || 0;\n const colWidth = maxWidths[matrixIndex][cIdx];\n\n if (!isTransposed) {\n cell.setAvailableSpace(colWidth, colHeight - borderWidth);\n indices = [rIdx, cIdx];\n unitMeasures = [columnWidths, rowHeights];\n mainMeasures = [widths, heights];\n computedMeasures = [colWidth, colHeight];\n } else {\n cell.setAvailableSpace(colWidth - borderWidth, colHeight);\n indices = [cIdx, rIdx];\n unitMeasures = [rowHeights, columnWidths];\n mainMeasures = [heights, widths];\n computedMeasures = [colHeight, colWidth];\n }\n\n if (indices[0] === 0 && indices[1] < breakPointer) {\n unitMeasures[0][0][indices[1]] = computedMeasures[0];\n mainMeasures[0][0] = (mainMeasures[0][0] || 0) + computedMeasures[0];\n } else if (indices[0] === 0 && indices[1] >= breakPointer) {\n unitMeasures[0][1][indices[1] - breakPointer] = computedMeasures[0];\n mainMeasures[0][1] = (mainMeasures[0][1] || 0) + computedMeasures[0];\n }\n if (indices[1] === this._lastLevelKey) {\n unitMeasures[1][0][indices[0]] = computedMeasures[1];\n unitMeasures[1][1][indices[0]] = computedMeasures[1];\n }\n });\n });\n return {\n heights,\n widths,\n rowHeights,\n columnWidths\n };\n }\n}\n\n","import { HEIGHT, WIDTH, COLUMN, ROW } from '../enums/constants';\n\n/**\n * Gets measurement for an instance of visual matrix\n *\n * @param {Array} matrix instance of visual matrix\n * @param {string} type height/width\n * @return {Object} Logical height/width of the matrix\n */\nexport function getMatrixMeasurement (matrix, type) {\n if (matrix) {\n return matrix.getLogicalSpace()[type];\n }\n return 0;\n}\n\n/**\n * Sets available space for an instance of visual matrix\n *\n * @param {Array} matrix instance of visual matrix\n * @param {string} type height/width\n * @param {number} value Value of measurement\n */\nexport function setMatrixMeasurement (matrix, type, value) {\n if (matrix) {\n const spaces = matrix.getLogicalSpace();\n if (value && spaces[type] !== value) {\n type === HEIGHT ? matrix.setAvailableSpace(spaces.width, value) :\n matrix.setAvailableSpace(value, spaces.height);\n }\n }\n}\n\n/**\n *\n *\n * @param {*} matrix\n * @param {*} widths\n * @param {*} heights\n */\nconst setAvailableSpace = (matrix, widths, heights) => {\n matrix.forEach((row, rIdx) => {\n row.forEach((placeholder, cIdx) => {\n placeholder.setAvailableSpace(widths[cIdx], heights[rIdx]);\n });\n });\n};\n\n/**\n *\n *\n * @param {*} layout\n * @param {*} matrix\n * @param {*} pointer\n * @returns\n */\nconst setViewSpaces = (layout, pointerType, viewSpaces) => {\n let pointer = layout.config()[`${pointerType}Pointer`];\n if (viewSpaces.length - 1 < pointer) {\n pointer = 0;\n layout.config({ [`${pointerType}Pointer`]: pointer });\n }\n return pointer;\n};\n\n/**\n * Computes the measurements of space for all matrices in the\n * layout\n *\n * @param {Object} layout Instance of grid layout\n * @return {Object} set of measurements for the layout\n */\nexport const computeLayoutMeasurements = (layout) => {\n const rowMatrix = layout.rowMatrix();\n const columnMatrix = layout.columnMatrix();\n const centerMatrix = layout.centerMatrix();\n const {\n width,\n height\n } = layout.measurement();\n const {\n border\n } = layout.config();\n const matrices = layout.matrices();\n const {\n top,\n bottom\n } = matrices;\n\n // Get width of row matrix\n const rowMatrixWidth = getMatrixMeasurement(rowMatrix, WIDTH);\n\n // Set width for column matrix\n\n // Border adjustment for each cell in the central matrix\n const borderWidth = border.width;\n\n const columnMatrixWidth = width - rowMatrixWidth - borderWidth;\n setMatrixMeasurement(columnMatrix, WIDTH, columnMatrixWidth);\n const columnViewPages = columnMatrix.getViewableSpaces();\n setViewSpaces(layout, COLUMN, columnViewPages);\n\n // Figuring out total space needed by current view space\n const columnViewSpace = columnViewPages[layout.config().columnPointer];\n\n // Getting height of column matrix\n const columnMatrixHeight = columnViewSpace.height.primary + columnViewSpace.height.secondary;\n\n // Set height for row matrix\n const rowMatrixHeight = height - columnMatrixHeight;\n\n setMatrixMeasurement(rowMatrix, HEIGHT, rowMatrixHeight);\n\n // Get heights of each cell of row matrix\n const rowViewableSpaces = rowMatrix.getViewableSpaces();\n setViewSpaces(layout, ROW, rowViewableSpaces);\n const rowHeights = [].concat(...rowViewableSpaces.map(e => e.rowHeights.primary));\n const rowWidthsPrimary = [].concat(...rowViewableSpaces.map(e => e.columnWidths.primary));\n const rowWidthsSecondary = [].concat(...rowViewableSpaces.map(e => e.columnWidths.secondary));\n const columnViewableSpaces = columnMatrix.getViewableSpaces();\n // Get widths of each cell of column matrix\n const columnWidths = [].concat(...columnViewableSpaces.map(e => e.columnWidths.primary));\n const columnHeightsPrimary = columnViewableSpaces[0].rowHeights.primary;\n\n const columnHeightsSecondary = [].concat(...columnViewableSpaces.map(e => e.rowHeights.secondary));\n\n // Setting the available space for each cell in the centre matrix\n centerMatrix.forEach((matrix, rIdx) => {\n matrix.forEach((placeholder, cIdx) => {\n placeholder.setAvailableSpace(columnWidths[cIdx] - borderWidth, rowHeights[rIdx] - borderWidth);\n });\n });\n setAvailableSpace(top[0], rowWidthsPrimary, columnHeightsPrimary);\n setAvailableSpace(top[2], rowWidthsSecondary, columnHeightsPrimary);\n setAvailableSpace(bottom[0], rowWidthsPrimary, columnHeightsSecondary);\n setAvailableSpace(bottom[2], rowWidthsSecondary, columnHeightsSecondary);\n\n return {\n rowMatrixHeight,\n rowMatrixWidth,\n columnMatrixHeight,\n columnMatrixWidth\n };\n};\n\n/**\n * Gets view matrices based on current pointers for row and column\n *\n * @param {Object} layout instance of layout\n * @param {number} rowPointer current row pointer\n * @param {number} columnPointer current column pointer\n * @return {Object} returns the view matrix and its relevant information\n */\nexport const getViewMatrices = (layout, rowPointer, columnPointer) => {\n const rowMatrix = layout.rowMatrix();\n const columnMatrix = layout.columnMatrix();\n const centerMatrix = layout.centerMatrix();\n const matrices = layout.matrices();\n const rowMatrices = rowMatrix.getViewableData();\n const columnMatrices = columnMatrix.getViewableData();\n const centralMatrixPointer = {\n row: 0,\n column: 0\n };\n\n for (let i = rowPointer - 1; i >= 0; i--) {\n const length = Math.max(rowMatrices[i].primaryMatrix.length,\n rowMatrices[i].secondaryMatrix.length);\n centralMatrixPointer.row += length;\n }\n /* istanbul ignore next */\n for (let i = columnPointer - 1; i >= 0; i--) {\n const matrix = columnMatrices[i];\n const { primaryMatrix, secondaryMatrix } = matrix;\n const length = Math.max(primaryMatrix[0] ? primaryMatrix[0].length : 0,\n secondaryMatrix[0] ? secondaryMatrix[0].length : 0);\n centralMatrixPointer.column += length;\n }\n\n matrices.top[1] = columnMatrices[columnPointer].primaryMatrix;\n matrices.bottom[1] = columnMatrices[columnPointer].secondaryMatrix;\n\n matrices.center[0] = rowMatrices[rowPointer].primaryMatrix;\n matrices.center[2] = rowMatrices[rowPointer].secondaryMatrix;\n\n const rowMatrixLen = Math.max(matrices.center[0].length, matrices.center[2].length);\n /* istanbul ignore next */\n const columnMatrixLen = Math.max(matrices.top[1][0] ? matrices.top[1][0].length : 0, matrices.bottom[1][0] ?\n matrices.bottom[1][0].length : 0);\n matrices.center[1] = centerMatrix.slice(centralMatrixPointer.row, centralMatrixPointer.row + rowMatrixLen)\n .map(matrix => matrix.slice(centralMatrixPointer.column, centralMatrixPointer.column + columnMatrixLen));\n\n return {\n matrices,\n rowPages: rowMatrices.length,\n columnPages: columnMatrices.length\n };\n};\n/**\n * Returns measurements of the cells of the current matrix\n *\n * @param {Object} layout instance of layout\n * @return {Object} returns the measurements for current view matrix\n */\nexport const getViewMeasurements = (layout) => {\n const rowMatrix = layout.rowMatrix();\n const columnMatrix = layout.columnMatrix();\n const {\n width,\n height\n } = layout.measurement();\n const {\n columnPointer,\n rowPointer\n } = layout.config();\n\n const rowMatrixWidth = rowMatrix.getViewableSpaces()[rowPointer].width;\n const { primary: leftWidth, secondary: rightWidth } = rowMatrixWidth;\n\n const columnMatrixHeight = columnMatrix.getViewableSpaces()[columnPointer].height;\n const { primary: topHeight, secondary: bottomHeight } = columnMatrixHeight;\n\n const centerHeight = height - (topHeight + bottomHeight);\n const centerWidth = width - (leftWidth + rightWidth);\n\n return {\n viewWidth: [leftWidth, centerWidth, rightWidth],\n viewHeight: [topHeight, centerHeight, bottomHeight]\n };\n};\n","/**\n * This file declares a table that can be extended to create a Datagrid, crosstab\n * and man other visualzations that require a tabular structure.\n */\n\nimport { getUniqueId } from 'muze-utils';\nimport GenericLayout from '../generic-layout';\nimport { DEFAULT_CONFIGURATION, DEFAULT_MEASUREMENTS } from './defaults';\nimport {\n renderMatrices\n} from './renderer';\nimport { generateVisualMatrices } from './layout-helper';\nimport { computeLayoutMeasurements, getViewMeasurements, getViewMatrices } from './computations';\n/**\n * This class is used to create a tabular structure that\n * can house charts and values.\n *\n * @class GridLayout\n */\nexport default class GridLayout extends GenericLayout {\n\n /**\n * Creates an instance of TableLayout.\n * @param {HTMLElement} matrices Set of upto 9 matrices containing the cells to be rendered\n * @param {HTMLElement} mountPoint DOM element/d3 selection where the layout is to be mounted\n * @param {Object} measurement The dimensions of the layout\n * @param {Object} config external configurations.\n * @memberof GenericLayout\n *\n * measurement : {\n * width : number => width of the container\n * height : number => height of the container\n * unitHeight : number => height of unit of the cells\n * unitWidth : number => width of unit of the cells\n * }\n *\n */\n constructor (matrices, mountPoint, measurement, config) {\n super(mountPoint, measurement, config);\n this.matrices(matrices);\n this.config(this.constructor.defaultConfig());\n this._layoutId = getUniqueId();\n }\n\n /**\n * Returns initial set of measurements for the grid layout\n *\n * @static\n * @return {Object} Returns initial set of measurements\n * @memberof GridLayout\n */\n static defaultMeasurement () {\n return DEFAULT_MEASUREMENTS;\n }\n\n /**\n * Returns initialconfiguration for grid layout\n *\n * @static\n * @return {Object} Returns initial configuration for grid layout\n * @memberof GridLayout\n */\n static defaultConfig () {\n return DEFAULT_CONFIGURATION;\n }\n\n /**\n * This function is used to return an instance of GridLayout\n *\n * @return {GridLayout} Instance of grid layout.\n * @static\n * @memberof GridLayout\n */\n static create () {\n return new GridLayout(null, null, this.defaultMeasurement(), this.defaultConfig());\n }\n\n /**\n * Sets/Gets the matrices for the layout\n *\n * @param {Array} matrices Set of matrices\n * @return {Object} Getter/Setter\n * @memberof GridLayout\n */\n matrices (matrices) {\n if (matrices) {\n this._matrices = generateVisualMatrices(this, matrices);\n return this;\n }\n return super.matrices(matrices);\n }\n\n /**\n * Triggers the computations for the layout based on the matrices available\n * This causes a reflow in the entire layout system.\n *\n * @return {Object} Layout instance\n * @memberof GridLayout\n */\n triggerReflow () {\n computeLayoutMeasurements(this);\n this.setViewInformation();\n return this;\n }\n\n /**\n *\n *\n * @param {*} type\n * @param {*} pageNumber\n * @returns\n * @memberof GridLayout\n */\n gotoPage (type, pageNumber) {\n const pageType = type.toLowerCase();\n const { viewMatricesInfo } = this.getViewInformation();\n const totalPages = viewMatricesInfo[`${pageType}Pages`];\n const pointer = Math.min(Math.max(1, pageNumber), totalPages);\n this.config({\n [`${pageType}Pointer`]: pointer - 1\n });\n this.setViewInformation();\n this.renderGrid();\n return this;\n }\n\n /**\n *\n *\n * @param {*} type\n * @returns\n * @memberof GridLayout\n */\n pages (type) {\n const { viewMatricesInfo } = this.getViewInformation();\n const pageType = type.toLowerCase();\n return {\n totalPages: viewMatricesInfo[`${pageType}Pages`],\n currentPage: this.config()[`${pageType}Pointer`] + 1\n };\n }\n\n /**\n *\n *\n * @returns\n * @memberof GridLayout\n */\n setViewInformation () {\n const {\n rowPointer,\n columnPointer,\n border\n } = this.config();\n const viewMatricesInfo = getViewMatrices(this, rowPointer, columnPointer);\n const layoutDimensions = getViewMeasurements(this);\n layoutDimensions.border = border;\n this.viewInfo = {\n viewMatricesInfo,\n layoutDimensions\n };\n return this;\n }\n\n /**\n *\n *\n * @returns\n * @memberof GridLayout\n */\n getViewInformation () {\n return this.viewInfo;\n }\n\n /**\n * Renders the layout\n *\n * @return {Object} current instance\n * @memberof GridLayout\n */\n renderGrid (mountPoint) {\n this.mountPoint(mountPoint);\n if (!this.mountPoint()) {\n return this;\n }\n const {\n viewMatricesInfo,\n layoutDimensions\n } = this.getViewInformation();\n // Render matrices\n renderMatrices(this, viewMatricesInfo.matrices, layoutDimensions);\n return this;\n }\n}\n","import VisualMatrix from '../visual-matrix/visual-matrix';\n\n/**\n * Generates the set of visual matrices for pagination and layouting algorithms\n *\n * @param {*} context\n * @param {*} matrices\n * @returns\n */\nexport const generateVisualMatrices = (context, matrices) => {\n // Set of matrices for layout is generated starting with the left matrix\n let leftMatrix = [];\n let rightMatrix = [];\n let topMatrix = [];\n let bottomMatrix = [];\n let begColCells;\n let endColCells;\n const {\n isRowSizeEqual,\n isColumnSizeEqual,\n gutterSpace,\n distribution,\n border,\n breakPage\n } = context.config();\n const {\n minUnitHeight,\n minUnitWidth\n } = context.measurement();\n const { top, center, bottom } = matrices;\n const [topLeft, topColumns, topRight] = top;\n const [leftRows, valueMatrix, rightRows] = center;\n const [bottomLeft, bottomColumns, bottomRight] = bottom;\n\n if (leftRows.length > 0) {\n // If no left matrix is present, context will be empty\n leftMatrix = [...topLeft, ...leftRows, ...bottomLeft];\n }\n if (rightRows.length > 0) {\n // If no right matrix is present, context will be empty\n rightMatrix = [...topRight, ...rightRows, ...bottomRight];\n }\n if (topColumns.length > 0 && topColumns[0].length > 0) {\n // If no top matrix is present, context will be empty\n topMatrix = topColumns.map((d, i) => [...topLeft[i], ...d, ...topRight[i]]);\n }\n if (bottomColumns.length > 0 && bottomColumns[0].length > 0) {\n // If no bottom matrix is present, context will be empty\n bottomMatrix = bottomColumns.map((d, i) => [...bottomLeft[i], ...d, ...bottomRight[i]]);\n }\n context.rowMatrix(new VisualMatrix([leftMatrix, rightMatrix], {\n isDistributionEqual: isRowSizeEqual,\n distribution: distribution.rows,\n gutter: gutterSpace.rows,\n unitMeasures: {\n width: minUnitWidth,\n height: minUnitHeight,\n border: border.width\n },\n breakPage: breakPage.rows.map(e => e + Math.max(topLeft.length, topRight.length)),\n extraCellLengths: [topLeft.length, bottomLeft.length]\n }));\n\n if (topLeft.length > 0) {\n begColCells = topLeft[0].length;\n } else {\n begColCells = bottomLeft.length > 0 ? bottomLeft[0].length : 0;\n }\n\n if (topRight.length > 0) {\n endColCells = topRight[0].length;\n } else {\n endColCells = bottomRight.length > 0 ? bottomRight[0].length : 0;\n }\n\n context.columnMatrix(new VisualMatrix([topMatrix, bottomMatrix], {\n isDistributionEqual: isColumnSizeEqual,\n distribution: distribution.columns,\n gutter: gutterSpace.columns,\n isTransposed: true,\n unitMeasures: {\n width: minUnitWidth,\n height: minUnitHeight,\n border: border.width\n },\n breakPage: breakPage.columns,\n extraCellLengths: [begColCells, endColCells]\n }));\n context.centerMatrix(valueMatrix);\n\n return matrices;\n};\n","import { ERROR_MSG } from 'muze-utils';\n/**\n * An Interface to be implemented if the transaction support is necessary. This class ensures reactivity to\n * global properties.\n */\nexport default class TransactionSupport {\n /**\n * Property accessor for data member of the class. Data is passed to the system by calling this method.\n */\n data () {\n throw new Error(ERROR_MSG.INTERFACE_IMPl);\n }\n\n /**\n * Property accessor for width of the class. Width is passed as an integer.\n */\n width () {\n throw new Error(ERROR_MSG.INTERFACE_IMPl);\n }\n\n /**\n * Property accessor for height of the class. Height is passed as an integer.\n */\n height () {\n throw new Error(ERROR_MSG.INTERFACE_IMPl);\n }\n\n /**\n * Property accessor for config of the class. Config is passed as an object.\n */\n config () {\n throw new Error(ERROR_MSG.INTERFACE_IMPl);\n }\n}\n","/**\n * Flag to specify whether direction is vertical.\n */\nexport const MARGIN = 'margin';\nexport const LEFT = 'left';\nexport const RIGHT = 'right';\nexport const BOTTOM = 'bottom';\nexport const TOP = 'top';\nexport const SPACE_FIXER = 'spaceFixer';\nexport const CLASSPREFIX = 'muze';\nexport const VERTICAL_ALIGN = 'verticalAlign';\nexport const TEXT_ALIGN = 'textAlign';\nexport const IS_OFFSET = 'isOffset';\nexport const MIDDLE = 'middle';\nexport const BASELINE = 'baseline';\nexport const SHOW = 'show';\nexport const CENTER = 'center';\nexport const TEXT = 'text';\nexport const HEADER = 'header';\nexport const HEIGHT = 'height';\nexport const WIDTH = 'width';\nexport const DATA = 'data';\nexport const AXES = 'axes';\nexport const FACET_BY_FIELDS = 'facetByFields';\nexport const FIELDS = 'fields';\nexport const TRANSFORM = 'transform';\nexport const LAYER_DEF = 'layerDef';\nexport const CONFIG = 'config';\nexport const DETAIL_FIELDS = 'detailFields';\n\nexport const TEXT_CELL = 'text-cell';\nexport const AXIS_CELL = 'axis-cell';\nexport const GEOM_CELL = 'geom-cell';\nexport const BLANK_CELL = 'blank-cell';\n","// eneum to refer to simple cell\nexport const SIMPLE = 'simple';\n// eneum to refer to header cell\nexport const TEXT = 'text';\n// enum to refer to axis cell\nexport const AXIS = 'axis';\n// enum to refer to visual cell\nexport const GEOM = 'geom';\n// enum to refer blank cell\nexport const BLANK = 'blank';\n","import {\n ERROR_MSG,\n getUniqueId,\n mergeRecursive\n} from 'muze-utils';\nimport { SIMPLE } from './enums/cell-type';\n\n/**\n * This file declares a class that is used as an interface to create new\n * SimpleCell elements.\n * @module SimpleCell\n */\n/**\n * Base class for all table cells.\n *\n * @interface\n * @class SimpleCell\n */\nclass SimpleCell {\n\n /**\n * Creates an instance of SimpleCell.\n *\n * @param {*} config The input configuration.\n * @memberof SimpleCell\n */\n constructor (config) {\n this._id = getUniqueId();\n\n const defConfig = mergeRecursive({}, this.constructor.defaultConfig());\n this._config = mergeRecursive(defConfig, config || {});\n\n this._mount = null;\n }\n\n /**\n * Returns the type of the placehlder.\n *\n * @readonly\n * @memberof SimpleCell\n */\n get type () {\n return SIMPLE;\n }\n\n /**\n * Returns the type of the placehlder.\n *\n * @readonly\n * @memberof SimpleCell\n * @return {Object} Default config for the placeholder\n */\n static defaultConfig () {\n return {};\n }\n\n /**\n * Returns the value contained by the SimpleCell.\n *\n * @memberof SimpleCell\n */\n valueOf () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Returns a unique identifier for the instance used\n * to control selective rendering.\n *\n * @memberof SimpleCell\n */\n id () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Returns a serialized representation of the instance.\n *\n * @memberof SimpleCell\n */\n serialize () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Returns an object with width and height fields\n * specifying the space taken up by this metod.\n *\n * @memberof SimpleCell\n */\n getLogicalSpace () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Method used to set the space available to render the SimpleCell\n *\n * @param {number} width The available width.\n * @param {number} height The available height.\n * @memberof SimpleCell\n */\n setAvailableSpace () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Render the SimpleCell inthe supplied mount point.\n *\n * @param {HTMLElement} mount The mount point to render in.\n * @memberof SimpleCell\n */\n render () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Render the SimpleCell inthe supplied mount point.\n *\n * @param {HTMLElement} mount The mount point to render in.\n * @memberof SimpleCell\n */\n remove () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n}\n\nexport default SimpleCell;\n","/**\n * This file exports variables that are used as defaults for\n * the placeholders\n */\nimport * as CONSTANTS from './constants';\n\n /**\n * Default Configuration for the cells\n * @return {Object} Default configuration\n */\nexport const DEFAULT_CONFIG = {\n [CONSTANTS.MARGIN]: {\n [CONSTANTS.LEFT]: 0,\n [CONSTANTS.RIGHT]: 0,\n [CONSTANTS.TOP]: 0,\n [CONSTANTS.BOTTOM]: 0\n },\n [CONSTANTS.SPACE_FIXER]: 2,\n [CONSTANTS.IS_OFFSET]: false,\n [CONSTANTS.VERTICAL_ALIGN]: CONSTANTS.TOP,\n [CONSTANTS.TEXT_ALIGN]: CONSTANTS.CENTER,\n [CONSTANTS.SHOW]: true\n};\n","import { mergeRecursive } from 'muze-utils';\nimport { GEOM, TEXT, AXIS, BLANK } from './enums/cell-type';\n\nconst DEFAULT_PROPS = {\n mount: {},\n availHeight: {},\n availWidth: {},\n config: {\n sanitization: (context, value) => mergeRecursive(context._config, value)\n },\n logicalSpace: {},\n source: {}\n};\n\nconst geomProps = {\n data: {},\n caption: {},\n config: {},\n axes: {\n sanitization: (context, value) => Object.assign(context._axes, value)\n },\n facetByFields: {},\n fields: {},\n transform: {},\n layerDef: {},\n detailFields: {}\n};\n\nexport const PROPS = {\n [TEXT]: DEFAULT_PROPS,\n [GEOM]: mergeRecursive(geomProps, DEFAULT_PROPS),\n [AXIS]: DEFAULT_PROPS,\n [BLANK]: DEFAULT_PROPS\n};\n","/**\n * This file declares a class that represents a table cell\n * used to house an axis.\n * @module VisualCell\n */\nimport { selectElement, makeElement, generateGetterSetters } from 'muze-utils';\nimport { CLASSPREFIX, HEIGHT, WIDTH, AXIS_CELL } from './enums/constants';\nimport SimpleCell from './simple-cell';\nimport { DEFAULT_CONFIG } from './enums/defaults';\nimport { AXIS } from './enums/cell-type';\nimport { PROPS } from './props';\n\n/**\n * Computes the logical space of the an axis instance within an axis cell\n *\n * @param {Object} context Required to get the needed parameters to compute axis space\n * @return {Object} Returns the logical space for axis\n */\nconst computeAxisSpace = (context) => {\n let logicalWidth;\n let logicalHeight;\n const axis = context.source();\n const {\n spaceFixer,\n margin\n } = context.config();\n const {\n width,\n height\n } = axis.getLogicalSpace();\n const {\n show\n } = axis.config();\n if (show === true) {\n logicalHeight = Math.floor(height + margin.top + margin.bottom + spaceFixer);\n logicalWidth = Math.floor(width + margin.left + margin.right + spaceFixer);\n } else {\n [logicalWidth, logicalHeight] = [width, height];\n }\n return {\n width: logicalWidth,\n height: logicalHeight\n };\n};\n\n/**\n * Represents an axis cell.\n *\n * @class Axis\n */\nclass AxisCell extends SimpleCell {\n\n /**\n * Creates an instance of AxisCell.\n *\n * @param {Object} config The input config.\n * @memberof AxisCell\n */\n constructor (config) {\n super(config);\n\n this._axis = null;\n this._availHeight = null;\n this._availWidth = null;\n this._logicalSpace = null;\n\n generateGetterSetters(this, PROPS[AXIS]);\n }\n\n /**\n * return the type pf SimpleCell cell.\n *\n * @readonly\n * @memberof AxisCell\n */\n get type () {\n return AXIS;\n }\n\n /**\n * This method return the value conatined by this SimpleCell.\n *\n * @return {SimpleAxis | ColorAxis} Instance of SimpleAxis or ColorAxis.\n * @memberof AxisCell\n */\n valueOf () {\n return this.source().id;\n }\n\n /**\n * This method return the unique identififer of the axis\n *\n * @return {string} Id of the axis.\n * @memberof AxisCell\n */\n get id () {\n return this._id;\n }\n\n /**\n * Retrns the serialized representation of this cell.\n *\n * @return {Object}Object with serializable props.\n * @memberof AxisCell\n */\n serialize () {\n return {\n type: AXIS,\n axis: this.source().serialize()\n };\n }\n\n /**\n * return the default configuration for the text cell\n *\n * @static\n * @return {Object} Default configuration of the cell\n * @memberof AxisCell\n */\n static defaultConfig () {\n return DEFAULT_CONFIG;\n }\n\n /**\n * return the space taken up by an axis element in the dom.\n *\n * @return {Object} Object with width and height fields.\n * @memberof AxisCell\n */\n getLogicalSpace () {\n if (!this.logicalSpace()) {\n this.logicalSpace(computeAxisSpace(this));\n }\n return this.logicalSpace();\n }\n\n /**\n * This method is used to set the space availiable to render\n * the SimpleCell.\n *\n * @param {number} width The width of SimpleCell.\n * @param {number} height The height of SimpleCell.\n * @return {Instance} Returns current Instance\n * @memberof AxisCell\n */\n setAvailableSpace (width, height) {\n this.availWidth(width);\n this.availHeight(height);\n const {\n margin,\n isOffset\n } = this.config();\n this.source().setAvailableSpace(width, height, margin, isOffset);\n this.logicalSpace(null);\n this.source().logicalSpace(null);\n return this;\n }\n\n /**\n * This method is used to render the axis inside the axis cell.\n *\n * @param {HTMLElement} mount The mount point.\n * @return {Selection} node where axis mounted\n * @memberof AxisCell\n */\n /* istanbul ignore next */render (mount) {\n if (!mount) {\n return this;\n }\n const axis = this.source();\n const availHeight = this.availHeight();\n const availWidth = this.availWidth();\n const {\n margin\n } = this.config();\n const {\n top,\n bottom,\n left,\n right\n } = margin;\n const {\n show\n } = axis.config();\n const wrapperDiv = makeElement(selectElement(mount), 'div', [this], `${CLASSPREFIX}-${AXIS_CELL}`);\n const selection = makeElement(wrapperDiv, 'svg', [1], `${CLASSPREFIX}-axis-container`);\n\n this.mount(mount);\n if (availWidth === 0 || !availWidth) {\n selection.attr(WIDTH, `${0}px`);\n }\n if (availHeight === 0 || !availHeight) {\n selection.attr(HEIGHT, `${0}px`);\n }\n wrapperDiv.style(WIDTH, `${show ? availWidth : 0}px`)\n .style(HEIGHT, `${show ? availHeight : 0}px`)\n .style('margin-top', top)\n .style('margin-bottom', bottom)\n .style('margin-left', left)\n .style('margin-right', right);\n\n axis.mount(selection.node());\n return selection;\n }\n\n /**\n * Disposes the cell\n *\n * @return {Instance} Current instance of AxisCell\n * @memberof AxisCell\n */\n remove () {\n this.source() && this.source().remove();\n this.mount() && this.mount().remove();\n return this;\n }\n}\n\nexport default AxisCell;\n\n","/**\n * This file declares a class that represents a BLANK element in a table.\n * @module VisualCell\n */\nimport {\n selectElement,\n makeElement,\n applyStyle,\n generateGetterSetters\n } from 'muze-utils';\nimport SimpleCell from './simple-cell';\nimport { CLASSPREFIX, BLANK_CELL } from './enums/constants';\nimport { BLANK } from './enums/cell-type';\nimport { DEFAULT_CONFIG } from './enums/defaults';\nimport { PROPS } from './props';\n\n/**\n * Represents a table haeder.\n *\n * @class BLANK\n */\nclass BlankCell extends SimpleCell {\n\n /**\n * Creates an instance of BLANK.\n * @param {Object} config The input configuration.\n * @memberof BLANK\n */\n constructor (config) {\n super(config);\n\n generateGetterSetters(this, PROPS[BLANK]);\n }\n\n /**\n * return the type pf SimpleCell cell.\n *\n * @readonly\n * @memberof BlankCell\n */\n get type () {\n return BLANK;\n }\n\n /**\n * This method return the value contained by this SimpleCell.\n *\n * @return {string} The text value contained by this cell.\n * @memberof BlankCell\n */\n valueOf () {\n return this.id;\n }\n\n /**\n * return the default configuration for the text cell\n *\n * @static\n * @return {Object} Default configuration of the cell\n * @memberof BlankCell\n */\n static defaultConfig () {\n return DEFAULT_CONFIG;\n }\n\n /**\n * This method is used to return a unique identifier for\n * the BLANK cell.\n *\n * @return {string} The unique identifier for the BLANK.\n * @memberof BlankCell\n */\n get id () {\n return this._id;\n }\n\n /**\n * This method is used to obtain a serialized representation of this instance.\n *\n * @return {Object} Object with serilizable props.\n * @memberof BLANK\n */\n serialize () {\n return {\n type: BLANK\n };\n }\n\n /**\n * This method return the space taken up\n * by the text with the style applied.\n *\n * @return {Object} width and height taken up by the text.\n * @memberof BLANK\n */\n getLogicalSpace () {\n if (!this.logicalSpace()) {\n return {\n width: this.width || 0,\n height: this.height || 0\n };\n }\n return this.logicalSpace();\n }\n\n /**\n * This method is used to set the available space.\n *\n * @param {number} width The available width.\n * @param {number} height The available height.\n * @return {Instance} Returns current Instance\n * @memberof BlankCell\n */\n setAvailableSpace (width, height) {\n this.availWidth(width);\n this.availHeight(height);\n this.logicalSpace(null);\n return this;\n }\n\n /**\n * This method is used to render the BLANK cell inside\n * the provided mount point.\n *\n * @param {HTMLElement} mount The mount point for this cell.\n * @return {Instance} Returns current Instance\n * @memberof BLANK\n */\n /* istanbul ignore next */render (mount) {\n if (mount) {\n const { style } = this.config();\n // append span element to mount point\n this.mount(mount);\n const container = selectElement(mount);\n const elem = makeElement(container, 'div', [this.id]);\n elem.classed(`${CLASSPREFIX}-${BLANK_CELL}`, true);\n elem.style('width', `${this.availWidth()}px`);\n elem.style('height', `${this.availHeight()}px`);\n elem.html('');\n // apply style on the returned element\n if (style) {\n applyStyle(elem, style);\n }\n } return this;\n }\n\n /**\n * Removes the cell(Disposal)\n *\n * @return {Instance} Returns current Instance\n * @memberof BlankCell\n */\n remove () {\n this.mount() && this.mount().remove();\n return this;\n }\n }\nexport default BlankCell;\n","/**\n * This file declares a class that represents a Text element in a table.\n * @module VisualCell\n */\n\nimport {\n selectElement,\n makeElement,\n getSmartComputedStyle,\n generateGetterSetters\n} from 'muze-utils';\nimport SimpleCell from './simple-cell';\nimport { TEXT } from './enums/cell-type';\nimport { PROPS } from './props';\nimport { DEFAULT_CONFIG } from './enums/defaults';\nimport { CLASSPREFIX, TOP, BOTTOM, LEFT, RIGHT, HEADER, WIDTH, TEXT_CELL } from './enums/constants';\nimport './text-cell.scss';\n\n/**\n* Computes the Logical Space for the text\n*\n* @param {Object} context Required to get the needed parameters to compute text space\n* @return {Object} Logical space taken up by text\n* @memberof TextCell\n*/\nconst computeTextSpace = (context) => {\n const { labelManager } = context.dependencies();\n const space = labelManager.getOriSize(context.source());\n const {\n margin,\n show\n } = context.config();\n\n labelManager.setStyle(context._computedStyle);\n if (show) {\n return {\n width: space.width + margin.left + margin.right + context._minTickDiff.width,\n height: space.height + margin.top + margin.bottom + context._minTickDiff.height\n };\n } return {\n width: 0,\n height: 0\n };\n};\n\n/**\n * Represents a table haeder.\n *\n * @class Text\n */\nclass TextCell extends SimpleCell {\n\n /**\n * Creates an instance of Text.\n * @param {Object} config The input configuration.\n * @param {string} dependencies Dependencies for the class(labelManager)\n * @memberof Text\n */\n constructor (config, dependencies) {\n super(config);\n\n this._dependencies = dependencies;\n this._className = this._config.className ||\n (this._config.type === HEADER ? `${CLASSPREFIX}-${HEADER}-cell` : `${CLASSPREFIX}-${TEXT}-cell`);\n this._computedStyle = getSmartComputedStyle(selectElement('body'), this._className);\n this._dependencies.labelManager.setStyle(this._computedStyle);\n this._minTickDiff = this._dependencies.labelManager.getOriSize('WW');\n\n generateGetterSetters(this, PROPS[TEXT]);\n }\n\n /**\n * return the type pf SimpleCell cell.\n *\n * @readonly\n * @memberof TextCell\n */\n get type () {\n return TEXT;\n }\n\n /**\n * This method return the value contained by this SimpleCell.\n *\n * @return {string} The text value contained by this cell.\n * @memberof TextCell\n */\n valueOf () {\n return this.source();\n }\n\n /**\n * This method is used to return a unique identifier for\n * the Text cell.\n *\n * @return {string} The unique identifier for the Text.\n * @memberof TextCell\n */\n get id () {\n return this._id;\n }\n\n /**\n * Returns the dependencies of the instance\n *\n * @return {Object} Dependencies needed by the class\n * @memberof TextCell\n */\n dependencies () {\n return this._dependencies;\n }\n\n /**\n * This method is used to obtain a serialized representation of this instance.\n *\n * @return {Object} Object with serilizable props.\n * @memberof TextCell\n */\n serialize () {\n return {\n text: this.source(),\n type: TEXT\n };\n }\n\n /**\n * return the default configuration for the text cell\n *\n * @static\n * @return {Object} Default configuration of the cell\n * @memberof TextCell\n */\n static defaultConfig () {\n return DEFAULT_CONFIG;\n }\n\n /**\n * This method return the space taken up\n * by the text with the style applied.\n *\n * @return {Object} width and height taken up by the text.\n * @memberof Text\n */\n getLogicalSpace () {\n if (!this.logicalSpace()) {\n this.logicalSpace(computeTextSpace(this));\n }\n return this.logicalSpace();\n }\n\n /**\n * This method is used to set the available space.\n *\n * @param {number} width The available width.\n * @param {number} height The available height.\n * @return {Instance} Returns current Instance\n * @memberof TextCell\n */\n setAvailableSpace (width, height) {\n this.availWidth(width);\n this.availHeight(height);\n this.logicalSpace(null);\n return this;\n }\n\n /**\n * This method is used to render the Text cell inside\n * the provided mount point.\n *\n * @param {HTMLElement} mount The mount point for this cell.\n * @return {Instance} Returns current Instance\n * @memberof Text\n */\n render (mount) {\n const availWidth = this.availWidth();\n const {\n margin,\n show,\n verticalAlign,\n textAlign\n } = this.config();\n\n this.mount(mount);\n if (show) {\n const container = selectElement(mount);\n const elem = makeElement(container, 'div', [this.id], `${CLASSPREFIX}-${TEXT_CELL}`);\n\n container.style('vertical-align', verticalAlign);\n elem.classed(this._className, true);\n // apply style on the returned element\n elem.style(WIDTH, availWidth ? `${availWidth}px` : '100%');\n [TOP, BOTTOM, LEFT, RIGHT].forEach((type) => {\n elem.style(`padding-${type}`, `${margin[type]}px`);\n });\n elem.style('text-align', textAlign);\n elem.style('display', 'inline');\n // set the text as the innerHTML\n elem.html(this.source());\n }\n return this;\n }\n\n /**\n * Disposes the cell\n *\n * @return {Instance} Returns current Instance\n * @memberof TextCell\n */\n remove () {\n this.mount() && this.mount().remove();\n return this;\n }\n }\n\nexport default TextCell;\n","/**\n * This file declares a class that is used to represent a table cell\n * that houses a visual unit.\n * @module VisualCell\n */\n\nimport { selectElement, makeElement, generateGetterSetters } from 'muze-utils';\nimport SimpleCell from './simple-cell';\nimport { GEOM } from './enums/cell-type';\nimport { PROPS } from './props';\nimport {\n CLASSPREFIX, HEIGHT, WIDTH, DATA, AXES, FACET_BY_FIELDS, FIELDS, TRANSFORM, LAYER_DEF, CONFIG, GEOM_CELL,\n DETAIL_FIELDS\n} from './enums/constants';\nimport { DEFAULT_CONFIG } from './enums/defaults';\n\n/**\n * Calculates the logical space of the cell\n *\n * @param {Object} context Required to get the needed parameters to compute unit space\n * @return {Object} Logical space taken up by the unit\n * @memberof GeomCell\n */\nconst computeGeomSpace = (context) => {\n const config = context.source().config();\n const { width, height } = config;\n return {\n width: Math.ceil(width),\n height: Math.ceil(height + context.getCaptionSpace().height)\n };\n};\n\n /**\n * This class represents a SimpleCell for visual unit.\n *\n * @class GeomCell\n */\nclass GeomCell extends SimpleCell {\n\n /**\n * Creates an instance of GeomCell.\n * @param {Object} config The input configuration.\n * @memberof GeomCell\n */\n constructor (config) {\n super(config);\n\n this._unit = null;\n this._layers = null;\n this._axes = {};\n this._datamodel = {};\n this._facetByFields = {};\n this._fields = null;\n this._transform = null;\n this._caption = null;\n\n generateGetterSetters(this, PROPS[GEOM]);\n }\n\n /**\n * return the type pf SimpleCell cell.\n *\n * @readonly\n * @memberof GeomCell\n */\n get type () {\n return GEOM;\n }\n\n /**\n * This method return the value contained by this cell.\n *\n * @return {VisualUnit} Instance of visual unit contained by visual unit.\n * @memberof GeomCell\n */\n valueOf () {\n return this.source();\n }\n\n /**\n * This method is used to return the id of the\n * visual unit housed by this cell.\n *\n * @return {string} The unique id of the visual unit.\n * @memberof GeomCell\n */\n get id () {\n return this.source().id();\n }\n\n /**\n * This method return a serialized representation of\n * this instance.\n *\n * @return {Object} Object with serializable props.\n * @memberof GeomCell\n */\n serialize () {\n return {\n type: GEOM,\n unit: this.source().serialize(),\n caption: this.caption()\n };\n }\n\n /**\n * return the default configuration for the geom cell\n *\n * @static\n * @return {Object} Default configuration of the cell\n * @memberof GeomCell\n */\n static defaultConfig () {\n return DEFAULT_CONFIG;\n }\n\n /**\n * Updates the model based on the changed parameters\n *\n * @return {Instance} return instance\n * @memberof GeomCell\n */\n updateModel () {\n const unit = this.source();\n unit.lockModel();\n [DATA, AXES, FACET_BY_FIELDS, FIELDS, TRANSFORM, LAYER_DEF, CONFIG, DETAIL_FIELDS].forEach((prop) => {\n this[prop]() && unit[prop](this[prop]());\n });\n unit.unlockModel();\n return this;\n }\n\n /**\n * It gives the space taken by the caption of the unit\n *\n * @return {Object} return the space taken by caption\n * @memberof GeomCell\n */\n getCaptionSpace () {\n const caption = this.caption();\n\n let captionSpace = { width: 0, height: 0 };\n if (caption) {\n captionSpace = caption.getLogicalSpace();\n }\n return captionSpace;\n }\n\n /**\n * return the space taken up by the element in the dom.\n *\n * @return {Object} Object with width and height fields.\n * @memberof GeomCell\n */\n getLogicalSpace () {\n if (!this.logicalSpace()) {\n this.logicalSpace(computeGeomSpace(this));\n }\n return this.logicalSpace();\n }\n\n /**\n * This method is used to set the space available to\n * render the SimpleCell.\n *\n * @param {number} width The available width.\n * @param {number} height The available height.\n * @return {Instance} Returns current Instance\n * @memberof GeomCell\n */\n setAvailableSpace (width, height) {\n const unit = this.source();\n\n this.availWidth(width);\n this.availHeight(height);\n unit.lockModel();\n unit.width(width).height(height - this.getCaptionSpace().height);\n unit.unlockModel();\n this.logicalSpace(null);\n return this;\n }\n\n /**\n * his method is used to render the visual unit inside the provided cell.\n *\n * @param {HTMLElement} mount The mountpoint in the table.\n * @return {Instance} Returns current Instance\n * @memberof GeomCell\n */\n render (mount) {\n if (mount) {\n this.mount(mount);\n const availHeight = this.availHeight();\n const availWidth = this.availWidth();\n const caption = this.caption();\n const wrapperDiv = makeElement(selectElement(mount), 'div', [1], `${CLASSPREFIX}-${GEOM_CELL}`);\n\n if (caption) {\n const captionDom = makeElement(wrapperDiv, 'div', [caption], `${CLASSPREFIX}-unit-caption`).node();\n caption.render(captionDom);\n }\n const selection = makeElement(wrapperDiv, 'div', [1], `${CLASSPREFIX}-unit`);\n wrapperDiv.style(WIDTH, `${availWidth}px`).style(HEIGHT, `${availHeight}px`);\n selection.style(WIDTH, `${availWidth}px`)\n .style(HEIGHT, `${availHeight - this.getCaptionSpace().height}px`);\n this.source().mount(selection.node());\n }\n return this;\n }\n\n /**\n * Disposes the cell\n *\n * @return {Object} Current instance\n * @memberof GeomCell\n */\n remove () {\n this.mount() && this.mount().remove();\n this.source().remove();\n return this;\n }\n}\n\nexport default GeomCell;\n","import AxisCell from './axis-cell';\nimport BlankCell from './blank-cell';\nimport TextCell from './text-cell';\nimport GeomCell from './geom-cell';\nimport SimpleCell from './simple-cell';\n\nimport * as CONSTANTS from './constants';\n\nexport const DEFAULT_PLACEHOLDERS = {\n [CONSTANTS.SIMPLE_CELL]: SimpleCell,\n [CONSTANTS.TEXT_CELL]: TextCell,\n [CONSTANTS.AXIS_CELL]: AxisCell,\n [CONSTANTS.GEOM_CELL]: GeomCell,\n [CONSTANTS.BLANK_CELL]: BlankCell\n};\n\n","export const SIMPLE_CELL = 'SimpleCell';\nexport const TEXT_CELL = 'TextCell';\nexport const AXIS_CELL = 'AxisCell';\nexport const BLANK_CELL = 'BlankCell';\nexport const GEOM_CELL = 'GeomCell';\n\n","import { DEFAULT_PLACEHOLDERS } from './defaults';\n\n/**\n * Creates a registry for the cells, which can be used for\n * setting a new cell or getting the registered cells\n *\n * @return {Object} Setters and getters for registered cells\n */\nconst cellRegistry = () => {\n const reg = DEFAULT_PLACEHOLDERS;\n return {\n set: (key, def) => {\n if (key in reg) {\n reg[key] = def;\n }\n return cellRegistry;\n },\n get: () => reg\n };\n};\nexport default cellRegistry;\n","import { TOP, BOTTOM, LEFT, TITLE, SUB_TITLE, GROUP, LAYOUT, LEGEND } from '../constants';\n\n/**\n *\n *\n * @param {*} context\n * @returns\n */\nexport const arrangeComponents = (context) => {\n const legendConfig = context.config().legend;\n const titleConfig = context.title()[1];\n const subtitleConfig = context.subtitle()[1];\n const titleLayouts = {\n [`${TOP}-${TOP}`]: [TITLE, SUB_TITLE, GROUP],\n [`${BOTTOM}-${BOTTOM}`]: [GROUP, SUB_TITLE, TITLE],\n [`${TOP}-${BOTTOM}`]: [TITLE, GROUP, SUB_TITLE],\n [`${BOTTOM}-${TOP}`]: [SUB_TITLE, GROUP, TITLE]\n };\n const legendLayouts = [\n [LEGEND, LAYOUT],\n [LAYOUT, LEGEND]\n ];\n const titlePosition = titleConfig.position || TOP;\n const subtitlePosition = subtitleConfig.position || TOP;\n\n return {\n headers: titleLayouts[`${titlePosition}-${subtitlePosition}`],\n legends: legendConfig.position === LEFT || legendConfig.position === TOP ?\n legendLayouts[0] : legendLayouts[1]\n };\n};\n","import { TextCell } from '@chartshq/visual-cell';\nimport { escapeHTML } from 'muze-utils';\n\n/**\n *\n *\n * @param {*} rawContent\n * @returns\n */\nconst resolveTitleSubTitleContent = (rawContent) => {\n if (typeof rawContent === 'function' && !rawContent._sanitize) {\n return rawContent();\n }\n return escapeHTML(rawContent());\n};\n\n/**\n *\n *\n * @param {*} config\n * @param {*} cellType\n * @param {*} labelManager\n * @param {*} prevCell\n * @returns\n */\nconst headerCreator = (config, cellType, labelManager, prevCell) => {\n const {\n content\n } = config;\n const cell = prevCell || new TextCell({ type: cellType }, { labelManager });\n\n cell.source(content);\n\n return {\n height: cell.getLogicalSpace().height,\n cell\n };\n};\n\n/**\n *\n *\n * @param {*} config\n * @param {*} type\n * @param {*} labelManager\n * @param {*} cell\n * @returns\n */\nconst createHeading = (config, type, labelManager, prevCell) => {\n if (!config) { return ''; }\n\n return headerCreator(\n config,\n type === 'title' ? 'header' : 'text',\n labelManager,\n prevCell\n );\n};\n\n/**\n *\n *\n * @param {*} context\n */\nexport const createHeaders = (context, canvasHeight, canvasWidth) => {\n let headerHeight = 0;\n const headers = {};\n\n canvasHeight >= 200 && canvasWidth >= 200 && ['title', 'subtitle'].forEach((type) => {\n const headerOptions = context[type]();\n const content = resolveTitleSubTitleContent(headerOptions[0]);\n if (content.length) {\n const config = headerOptions[1];\n\n config.width = context.width();\n config.content = content;\n\n const { height, cell } = createHeading(config, type, context.dependencies().smartlabel,\n context[`${type}Cell`]);\n\n headers[`${type}Cell`] = cell;\n context._composition[type] = cell;\n headerHeight += height + config.padding;\n }\n });\n return { headerHeight, headers };\n};\n\n","import { TextCell, AxisCell } from '@chartshq/visual-cell';\nimport {\n VERTICAL, HORIZONTAL, LEFT, RIGHT, LEGEND_TYPE_MAP, PADDING, BORDER, MARGIN\n} from '../constants';\n\n/**\n *\n *\n * @param {*} legendConfig\n * @param {*} canvases\n * @returns\n */\nexport const legendCreator = (canvas) => {\n let LegendCls;\n const dataset = [];\n const axes = canvas.getRetinalAxes();\n\n Object.entries(axes).forEach((axisInfo) => {\n const scale = axisInfo[1][0];\n const scaleType = axisInfo[0];\n const scaleProps = canvas[scaleType]();\n\n if (scaleProps.field) {\n const {\n type,\n step\n } = scale.config();\n\n const stepMapper = typeof step === 'boolean' ? step : false;\n LegendCls = LEGEND_TYPE_MAP[`${type}-${stepMapper}-${scaleType}`];\n dataset.push({ scale, canvas, fieldName: scaleProps.field, LegendCls, scaleType });\n }\n });\n\n return dataset;\n};\n\n/**\n *\n *\n * @param {*} legendConfig\n * @param {*} canvases\n * @param {*} measurement\n * @param {*} prevLegends\n * @returns\n */\nexport const legendInitializer = (legendConfig, canvas, measurement, prevLegends) => {\n const legends = [];\n const {\n height,\n width,\n headerHeight\n } = measurement;\n const {\n position,\n align\n } = legendConfig;\n\n const legendInfo = legendCreator(canvas);\n\n legendInfo.forEach((dataInfo, index) => {\n let legend = {};\n\n const legendMeasures = {};\n const {\n LegendCls,\n scale,\n fieldName,\n scaleType\n } = dataInfo;\n const config = legendConfig[scaleType] || {};\n const title = config.title || {};\n title.text = title.text || fieldName;\n if (config.show) {\n config.position = position;\n config.align = align;\n\n if (prevLegends[index]) {\n legend = prevLegends[index].legend;\n } else {\n legend = LegendCls.create({\n labelManager: canvas._dependencies.smartlabel,\n cells: {\n AxisCell, TextCell\n }\n });\n }\n legendMeasures.maxHeight = align === VERTICAL ? (height - headerHeight) : height * 0.2;\n legendMeasures.maxWidth = align === HORIZONTAL ? width : width * 0.2;\n legendMeasures.width = Math.min(legendMeasures.maxWidth, config.width);\n legendMeasures.height = Math.min(legendMeasures.maxHeight, config.height);\n\n [PADDING, BORDER, MARGIN].forEach((e) => {\n legendMeasures[e] = config[e];\n });\n legend.scale(scale)\n .title(title)\n .fieldName(fieldName)\n .config(config)\n .metaData(canvas.composition().visualGroup.getGroupByData().project([fieldName]))\n .measurement(legendMeasures)\n .canvasAlias(canvas.alias())\n .setLegendMeasures();\n\n legends.push({ canvas, legend, scaleType });\n }\n });\n return legends;\n};\n\n/**\n *\n *\n * @param {*} legends\n * @param {*} legendConfig\n * @param {*} availableHeight\n * @param {*} availableWidth\n * @returns\n */\nexport const getLegendSpace = (legends, legendConfig, availableHeight, availableWidth) => {\n const legendMeasures = legends.map(legendInfo => legendInfo.legend.measurement());\n const legendSpace = { width: 0, height: 0 };\n\n legendMeasures.forEach((space) => {\n let height = 0;\n let width = 0;\n width = Math.min(space.width, space.maxWidth);\n height = Math.min(space.height, space.maxHeight);\n\n if (legendConfig.align === HORIZONTAL) {\n if (legendSpace.width + width > availableWidth) {\n legendSpace.width = availableWidth;\n legendSpace.height += height;\n } else {\n legendSpace.width += width;\n legendSpace.height = Math.max(legendSpace.height, height);\n }\n } else if (legendSpace.height + height > availableHeight) {\n legendSpace.height = height;\n legendSpace.width += width;\n } else {\n legendSpace.height += height;\n legendSpace.width = Math.max(legendSpace.width, width);\n }\n });\n if (legendConfig.align === HORIZONTAL) {\n legendSpace.width = availableWidth;\n }\n return legendSpace;\n};\n\n/**\n *\n *\n * @param {*} context\n * @param {*} headerHeight\n * @returns\n */\nexport const createLegend = (context, headerHeight, height, width) => {\n const measurement = {\n height,\n width,\n headerHeight\n };\n const { legend } = context.config();\n const { show, position } = legend;\n\n legend.classPrefix = context.config().classPrefix;\n const align = (position === LEFT || position === RIGHT) ? VERTICAL : HORIZONTAL;\n\n legend.show = show ? ((align === VERTICAL && width > 200) || (align === HORIZONTAL && height > 200)) : show;\n legend.align = align;\n return legendInitializer(legend, context, measurement, context.legends || []);\n};\n","import { cellRegistry } from '@chartshq/visual-cell';\nimport { mergeRecursive } from 'muze-utils';\nimport { arrangeComponents } from './component-resolver';\nimport { createHeaders } from './title-maker';\nimport { createLegend, getLegendSpace } from './legend-maker';\nimport { TOP, BOTTOM, LEFT, RIGHT } from '../constants';\n\nconst BlankCell = cellRegistry().get().BlankCell;\n\nconst createBlankCell = () => new BlankCell();\n\n/**\n *\n *\n * @param {*} canvases\n * @returns\n */\nconst getMaxRows = (rows) => {\n const maxRows = [0, 0];\n\n maxRows[0] = Math.max(maxRows[0], rows[0].length ? rows[0][0].length : 0);\n maxRows[1] = Math.max(maxRows[1], rows[1].length ? rows[1][0].length : 0);\n return maxRows;\n};\n\n/**\n *\n *\n * @param {*} arr\n * @param {*} value\n */\nconst fillArray = (arr, value) => arr.map(() => value());\n\n/**\n *\n *\n * @param {*} rows\n * @param {*} columns\n * @param {*} blankCellCreator\n * @returns\n */\nconst blankMatrixCreator = (rows, columns, blankCellCreator) => {\n const arr = [];\n\n for (let i = 0; i < rows; i++) {\n let array = new Array(columns).fill([]);\n array = fillArray(array, blankCellCreator);\n arr.push(array);\n }\n return arr;\n};\n\n/**\n *\n *\n * @param {*} rowMatrices\n * @param {*} maxRows\n */\nconst blankCellCreator = (rowMatrices, maxRows) => rowMatrices.map((rowMatrix, rowMatrixIndex) => {\n if (rowMatrix.length === 0 && maxRows[rowMatrixIndex] > 0) {\n const numberOfRows = Math.max(rowMatrices[0].length, rowMatrices[1].length);\n return blankMatrixCreator(numberOfRows, maxRows[rowMatrixIndex], createBlankCell);\n }\n if (rowMatrix.length > 0) {\n if (rowMatrix[0] && rowMatrix[0].length <= maxRows[rowMatrixIndex]) {\n return rowMatrix.map((row) => {\n let arr = new Array(maxRows[rowMatrixIndex] - rowMatrix[0].length).fill(1);\n arr = fillArray(arr, createBlankCell);\n return [...arr, ...row];\n });\n }\n return blankMatrixCreator(rowMatrix.length, maxRows[rowMatrixIndex], createBlankCell);\n }\n return rowMatrix;\n});\n\n/**\n *\n *\n * @param {*} context\n * @returns\n */\nexport const prepareLayout = (layout, components, config, measurement) => {\n let topL;\n let topR;\n let bottomL;\n let bottomR;\n const {\n rows,\n columns,\n values,\n cornerMatrices\n } = components;\n const {\n showHeaders\n } = config;\n const maxRows = getMaxRows(rows);\n const {\n topLeft,\n topRight,\n bottomLeft,\n bottomRight\n } = cornerMatrices;\n\n if (!showHeaders) {\n const colLengths = [columns[0].length, columns[1].length];\n // Create blank cells for corener matrices\n [topL, topR] = blankCellCreator([new Array(colLengths[0]), new Array(colLengths[0])], maxRows);\n [bottomL, bottomR] = blankCellCreator([new Array(colLengths[1]), new Array(colLengths[1])], maxRows);\n } else {\n [topL, topR, bottomL, bottomR] = [topLeft, topRight, bottomLeft, bottomRight];\n }\n\n layout.measurement(measurement)\n .config(config)\n .matrices({\n top: [topL, columns[0], topR],\n center: [rows[0], values, rows[1]],\n bottom: [bottomL, columns[1], bottomR]\n })\n .triggerReflow();\n};\n\n/**\n *\n *\n * @param {*} context\n * @param {*} mount\n * @returns\n */\nexport const getRenderDetails = (context, mount) => {\n let layoutConfig = mergeRecursive({}, context.config());\n // Get height width of the mount point\n let { height, width } = mount.getBoundingClientRect();\n const heightAttr = context.height();\n const widthAttr = context.width();\n const visGroup = context.composition().visualGroup;\n const {\n isColumnSizeEqual,\n isRowSizeEqual,\n rows,\n columns,\n values\n } = visGroup.placeholderInfo();\n const {\n minWidth,\n minHeight,\n classPrefix,\n showHeaders,\n legend\n } = context.config();\n // Get title configuration\n const titleConfig = context.title()[1];\n // Get subtitle configuration\n const subtitleConfig = context.subtitle()[1];\n // Get legend position\n const legendPosition = legend.position;\n // Arrange components according to config\n const layoutArrangement = arrangeComponents(context);\n\n height = Math.floor(height);\n width = Math.floor(width);\n\n const availableHeightForCanvas = Math.max(heightAttr > 0 ? heightAttr : height, minHeight);\n const availableWidthForCanvas = Math.max(widthAttr > 0 ? widthAttr : width, minWidth);\n\n // Create headers and determine header height\n const { headers, headerHeight } = createHeaders(context, availableHeightForCanvas, availableWidthForCanvas);\n\n // Create legends and determine legend space\n const legends = createLegend(context, headerHeight, availableHeightForCanvas, availableWidthForCanvas);\n context._composition.legend = {};\n legends.forEach((e) => {\n context._composition.legend[e.scaleType] = e.legend;\n });\n\n const legendSpace = getLegendSpace(legends, legend, availableHeightForCanvas, availableWidthForCanvas);\n const legendWidth = (legendPosition === LEFT || legendPosition === RIGHT) ? legendSpace.width : 0;\n const legendHeight = (legendPosition === TOP || legendPosition === BOTTOM) ? legendSpace.height : 0;\n\n // Set components for layouting\n const components = {\n headers,\n legends,\n canvases: [context],\n rows,\n columns,\n values,\n cornerMatrices: visGroup.cornerMatrices()\n };\n const measurement = {\n mountSpace: {\n height,\n width\n },\n headerHeight,\n legendSpace,\n canvasWidth: availableWidthForCanvas,\n canvasHeight: availableHeightForCanvas,\n width: availableWidthForCanvas - legendWidth,\n height: availableHeightForCanvas - headerHeight - legendHeight,\n minUnitHeight: context.minUnitHeight(),\n minUnitWidth: context.minUnitWidth()\n };\n layoutConfig = mergeRecursive(layoutConfig, {\n classPrefix,\n showHeaders,\n border: mergeRecursive(visGroup.metaData().border, context.config().border),\n layoutArrangement,\n legend,\n title: titleConfig,\n subtitle: subtitleConfig,\n isColumnSizeEqual,\n isRowSizeEqual\n });\n return {\n layoutConfig,\n components,\n measurement\n };\n};\n","export const TITLE_CONFIG = {\n position: 'top',\n align: 'left',\n padding: 8\n};\n\nexport const SUB_TITLE_CONFIG = {\n position: 'top',\n align: 'left',\n padding: 16\n};\n","import { mergeRecursive, selectElement } from 'muze-utils';\nimport {\n ROWS,\n COLUMNS,\n COLOR,\n SHAPE,\n SIZE,\n DETAIL,\n LAYERS,\n TRANSFORM,\n MOUNT,\n TITLE,\n SUB_TITLE\n} from '../constants';\nimport { TITLE_CONFIG, SUB_TITLE_CONFIG } from './defaults';\n/**\n * @module\n * This is the local options semantics based on which setters getters are created and reactivity is initiated.\n * This local object is only valid for Canvas.\n * Canvas merges global and local object both to the model\n *\n * Format\n * PROPERTRY_NAME: {\n * value: // default value of the property,\n * meta: {\n * typeCheck: // The setter value will be checked using this. If the value is function then the setter value\n * // is passed as args.\n * typeExpected: // The output of typecheck action will be tested against this. Truthy value will set the\n * // value to the setter\n * sanitizaiton: // Need for sanitization before type is checked\n * }\n * }\n */\n\nexport const localOptions = {\n [ROWS]: {\n value: null,\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Array'\n }\n },\n [COLUMNS]: {\n value: null,\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Array'\n }\n },\n [COLOR]: {\n value: null,\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Object',\n sanitization: (config) => {\n if (typeof config === 'string') {\n return {\n field: config\n };\n }\n return config;\n }\n }\n },\n [SHAPE]: {\n value: null,\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Object',\n sanitization: (config) => {\n if (typeof config === 'string') {\n return {\n field: config\n };\n }\n return config;\n }\n }\n },\n [SIZE]: {\n value: null,\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Object',\n sanitization: (config) => {\n if (typeof config === 'string') {\n return {\n field: config\n };\n }\n return config;\n }\n }\n },\n [DETAIL]: {\n value: [],\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Array'\n }\n },\n\n [LAYERS]: {\n value: null,\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Array'\n }\n },\n [TRANSFORM]: {\n value: null,\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Object'\n }\n },\n [MOUNT]: {\n value: null,\n meta: {\n sanitization: (value) => {\n if (typeof value === 'string') {\n return selectElement(value).node();\n }\n return value;\n }\n }\n }\n};\n\nexport const canvasOptions = {\n [TITLE]: {\n value: [null, null],\n meta: {\n typeCheck: ['constructor', 'constructor'],\n typeExpected: ['Function', 'Object'],\n spreadParams: true,\n sanitization: [(title) => {\n if (typeof title === 'string') {\n const t = () => title;\n t._sanitized = true;\n return t;\n }\n return title;\n }, (titleConfig) => {\n const defConfig = mergeRecursive({}, TITLE_CONFIG);\n return mergeRecursive(defConfig, titleConfig);\n }]\n }\n },\n [SUB_TITLE]: {\n value: [null, null],\n meta: {\n typeCheck: ['constructor', 'constructor'],\n typeExpected: ['Function', 'Object'],\n spreadParams: true,\n sanitization: [(subtitle) => {\n if (typeof subtitle === 'string') {\n const sub = () => subtitle;\n sub._sanitized = true;\n return sub;\n }\n return subtitle;\n }, (subtitleConfig) => {\n const defConfig = mergeRecursive({}, SUB_TITLE_CONFIG);\n return mergeRecursive(defConfig, subtitleConfig);\n }]\n }\n }\n};\n","import { makeElement, selectElement } from 'muze-utils';\nimport { VERTICAL, HORIZONTAL, TOP, LEFT, RIGHT, BOTTOM } from '../constants';\n\n/**\n * Sets the rotation for all x axes if any axis has the rotation config set in the\n * entire view\n *\n * @param {Array} columns Column cells that contain the axes cells\n */\nconst setLabelRotationForAxes = (context) => {\n let rotation = 0;\n\n const xAxes = context.xAxes() || [];\n\n (() => {\n for (let i = 0; i < xAxes.length; i++) {\n for (let j = 0; j < xAxes[i].length; j++) {\n if (xAxes[i][j].config().labels.rotation !== 0) {\n rotation = xAxes[i][j].config().labels.rotation;\n return;\n }\n }\n }\n })();\n\n if (rotation) {\n xAxes.forEach((axes) => {\n axes.forEach((axis) => {\n axis.config({ labels: { rotation, smartTicks: false } });\n });\n });\n }\n};\n\n/**\n *\n *\n * @param {*} context\n * @param {*} mount\n * @returns\n */\nconst getSkeletons = (mount, layoutConfig, measurement) => {\n const {\n layoutArrangement,\n classPrefix\n } = layoutConfig;\n const {\n headers,\n legends\n } = layoutArrangement;\n const {\n canvasWidth,\n canvasHeight\n } = measurement;\n const container = selectElement(mount);\n const components = {};\n const mountPoint = makeElement(container, 'div', [1], `${classPrefix}-viz`)\n .style('width', `${canvasWidth}px`)\n .style('height', `${canvasHeight}px`);\n const containers = mountPoint\n .selectAll(`.${classPrefix}-container`)\n .data(headers);\n containers.exit().remove();\n const containersEnter = containers.enter().append('div');\n\n const mergedContainer = containersEnter.merge(containers)\n .attr('class', `${classPrefix}-container`)\n .style('width', `${canvasWidth}px`)\n .style('padding', `${null}px`)\n .style('margin', null)\n .each(function (type) {\n components[type] = selectElement(this).classed(`${classPrefix}-${type}-container`, true);\n });\n const innerContainer = mergedContainer\n .selectAll(`.${classPrefix}-inner-container`)\n .data((d) => {\n if (d === 'group') {\n return legends;\n } return [];\n });\n innerContainer.exit().remove();\n const innerContainerEnter = innerContainer.enter().append('div');\n\n innerContainerEnter\n .merge(innerContainer)\n .attr('class', `${classPrefix}-inner-container`)\n .style('width', 'auto')\n .style('height', 'auto')\n .each(function (layoutType) {\n components[layoutType] = selectElement(this)\n .classed(`${classPrefix}-${layoutType}-container`, true);\n });\n return components;\n};\n\n/**\n *\n *\n * @param {*} context\n * @param {*} container\n * @param {*} legendComponents\n */\nconst renderLegend = (legendConfig, container, legendComponents, measurement) => {\n const sectionComponents = [];\n const { legendSpace, headerHeight, height, width } = measurement;\n const { legend, classPrefix } = legendConfig;\n const { position } = legend;\n const legendMount = makeElement(container, 'div', [legendComponents], `${classPrefix}-inner-content`, {}, d => d);\n legendMount.classed(`${classPrefix}-legend`, true);\n const align = (position === LEFT || position === RIGHT) ? VERTICAL : HORIZONTAL;\n const legWidth = align === VERTICAL ? legendSpace.width : width;\n const legHeight = align === VERTICAL ? height - headerHeight : legendSpace.height;\n\n [container, legendMount].forEach((elem) => {\n elem.style('width', `${Math.floor(legWidth)}px`)\n .style('height', `${legHeight}px`)\n .style('float', LEFT);\n });\n\n if (align === VERTICAL) {\n let sections = -1;\n let currHeight = legHeight;\n let currWidth = 0;\n\n legendComponents.forEach((legendInfo) => {\n const leg = legendInfo.legend;\n if (leg.measurement().height > currHeight) {\n sections++;\n currWidth = 0;\n currHeight = legHeight;\n } else {\n sections < 0 && sections++;\n }\n sectionComponents[sections] = sectionComponents[sections] || [];\n currHeight -= Math.min(leg.measurement().height, currHeight);\n currWidth = Math.max(Math.min(leg.measurement().width, leg.measurement().maxWidth), currWidth);\n sectionComponents[sections].push({\n legend: leg,\n legendHeight: legHeight,\n legendWidth: currWidth\n });\n });\n\n const mount = makeElement(legendMount, ['div'], sectionComponents, `${classPrefix}-legend-section`)\n .each((d, i) => selectElement(this).classed(`${classPrefix}-legend-section-${i}`, true))\n .classed(`${classPrefix}-legend-vertical-section`, true)\n .style('width', d => `${d[0].legendWidth}px`);\n makeElement(mount, ['div'], d => d, `${classPrefix}-legend-components`, {}, d => d.legend.id())\n .each(function (d) {\n d.legend.mount(this);\n })\n .style('width', d => `${d.legendWidth}px`);\n } else {\n const mount = makeElement(legendMount, 'div', [1], `${classPrefix}-legend-section`)\n .classed(`${classPrefix}-legend-horizontal-section`, true)\n .classed(`${classPrefix}-legend-section-${0}`, true)\n .style('width', `${legWidth}px`);\n\n makeElement(mount, 'div', legendComponents, `${classPrefix}-legend-components`, {}, d => d.legend.id())\n .each(function (d) { d.legend.mount(this); })\n .style('width', d => `${d.legend.measurement().width}px`);\n }\n};\n\n/**\n *\n *\n * @param {*} context\n * @param {*} container\n * @param {*} type\n * @param {*} headers\n */\nconst renderHeader = (layoutConfig, container, type, headers) => {\n const headerCell = headers[`${type}Cell`];\n const config = layoutConfig[`${type}`];\n const { position, align, padding } = config;\n const sel = container\n .selectAll(`.${layoutConfig.classPrefix}-inner-container`)\n .data([type]);\n sel.exit().remove();\n const selEnter = sel.enter().append('div');\n\n const cont = selEnter.merge(sel);\n cont.classed(`${layoutConfig.classPrefix}-inner-container`, true);\n\n headerCell && headerCell.render(cont.node());\n\n cont.selectAll('div').classed(`${layoutConfig.classPrefix}-inner-content`, true);\n cont.style('width', `${100}%`);\n\n if (config && headerCell) {\n cont.style('float', LEFT)\n .style('text-align', align)\n .style(`padding-${position === TOP ? BOTTOM : TOP}`, `${padding}px`);\n }\n};\n\n/**\n *\n *\n * @param {*} context\n * @param {*} shifter\n */\nconst shiftHeaders = (config, shifter, measurement, mount) => {\n const { classPrefix, title, subtitle, legend } = config;\n const { legendSpace } = measurement;\n const { position } = legend;\n\n shifter += position === LEFT ? legendSpace.width : 0;\n title && selectElement(mount).select(`.${classPrefix}-title-container`)\n .style('width', title.align === LEFT ? `calc(100% - ${shifter}px` : '100%')\n .style('margin-left', title.align === LEFT ? `${shifter}px` : 0);\n subtitle && selectElement(mount).select(`.${classPrefix}-subtitle-container`)\n .style('width', subtitle.align === LEFT ? `calc(100% - ${shifter}px` : '100%')\n .style('margin-left', subtitle.align === LEFT ? `${shifter}px` : 0);\n\n selectElement(mount).select(`.${classPrefix}-legend-horizontal-section`)\n .style('margin-left', `${shifter}px`)\n .style('width', `${legendSpace.width - shifter}px`)\n .selectAll(`.${classPrefix}-legend-body, .${classPrefix}-legend-title`)\n .style('max-width', `${legendSpace.width - shifter}px`);\n selectElement(mount).select(`.${classPrefix}-legend-vertical-section`)\n .style('margin-left', null)\n .selectAll(`.${classPrefix}-legend-body, .${classPrefix}-legend-title`)\n .style('max-width', null);\n};\n\n/**\n *\n *\n * @param {*} mountPoint\n * @param {*} measurement\n * @param {*} classPrefix\n * @returns\n */\nconst prepareGridContainer = (mountPoint, measurement, classPrefix, alias) => {\n if (!mountPoint) {\n return this;\n }\n\n const {\n height,\n width\n } = measurement;\n // Create container for the layout\n\n const sel = selectElement(mountPoint)\n .selectAll(`.${classPrefix}-inner-content`)\n .data(['layout'], d => d);\n sel.exit().remove();\n const selEnter = sel.enter().append('div');\n\n const container = selEnter.merge(sel)\n .attr('class', `${classPrefix}-inner-content`)\n .classed(`${classPrefix}-grid-layout`, true)\n .attr('id', `${classPrefix}-grid-layout-${alias}`)\n .style('height', `${height}px`)\n .style('padding', null)\n .style('width', `${Math.ceil(width)}px`);\n // Mount for matrices\n const innerSel = container.selectAll(`.${classPrefix}-layout-grid-container`)\n .data(['layout2']);\n innerSel.exit().remove();\n const innerSelEnter = innerSel.enter().append('div');\n\n const mount = innerSelEnter.merge(innerSel);\n mount.classed(`${classPrefix}-layout-grid-container`, true)\n .attr('id', `${classPrefix}-layout-grid-container-${alias}`)\n .style('height', `${height}px`)\n .style('width', `${Math.ceil(width)}px`);\n\n return {\n mount,\n container\n };\n};\n\n/**\n *\n *\n * @param {*} context\n * @param {*} components\n * @param {*} layoutConfig\n * @param {*} measurement\n */\nexport const renderComponents = (context, components, layoutConfig, measurement) => {\n const mountPoint = context.mount();\n const {\n headers,\n legends\n } = components;\n const {\n classPrefix\n } = layoutConfig;\n const {\n title,\n legend,\n subtitle,\n layout\n } = getSkeletons(mountPoint, layoutConfig, measurement);\n const {\n mount\n } = prepareGridContainer(layout.node(), measurement, classPrefix, context.alias());\n const padding = context.layout().getViewInformation().layoutDimensions.viewWidth[0];\n measurement.padding = padding;\n setLabelRotationForAxes(context);\n\n // Render layout\n context.layout().renderGrid(mount);\n context.once('layer.drawn').then(() => {\n renderHeader(layoutConfig, title, 'title', headers);\n renderHeader(layoutConfig, subtitle, 'subtitle', headers);\n renderLegend(layoutConfig, legend, legends, measurement);\n shiftHeaders(layoutConfig, padding, measurement, mountPoint);\n });\n context.composition().visualGroup.matrixInstance().value.each((el) => {\n el.valueOf().parentContainer(layout.node());\n });\n};\n","import { isEqual } from 'muze-utils';\nimport { ROWS, COLUMNS, COLOR, SHAPE, SIZE, MOUNT, DETAIL, DATA, CONFIG } from '../constants';\nimport { canvasOptions } from './local-options';\n\n/**\n * Instantiate high level components. Canvas knows what all high level component it has.\n * @nice-to-have dynamic high level components.\n * - Is it even required ?\n * - Reactive to source (canvas) streaming ?\n * @param {*} context Canvas instance\n * @return {Object.fArray>} Arrays of Title, visualGroup, Legend\n */\nexport const initCanvas = (context) => {\n const reg = context._registry.components;\n\n return [new reg.VisualGroup(context._registry, context.dependencies())];\n};\n\n/**\n *\n *\n * @memberof Canvas\n */\nexport const dispatchProps = (context) => {\n const lifeCycleManager = context.dependencies().lifeCycleManager;\n lifeCycleManager.notify({ client: context, action: 'beforeupdate' });\n const visualGroup = context.composition().visualGroup;\n\n visualGroup.lockModel();\n const allOptions = context._allOptions;\n for (const key in allOptions) {\n const value = context[key]();\n if (value !== null) {\n visualGroup[key] && visualGroup[key](value);\n }\n }\n visualGroup.unlockModel();\n\n context._cachedProps = {};\n lifeCycleManager.notify({ client: context, action: 'initialized' });\n lifeCycleManager.notify({ client: context, action: 'updated' });\n};\n\n/**\n *\n *\n */\nexport const setupChangeListener = (context) => {\n const store = context._store;\n\n store.registerImmediateListener(MOUNT, () => {\n const allOptions = Object.keys(context._allOptions);\n const props = [...allOptions, ...Object.keys(canvasOptions)];\n let equalityChecker = () => false;\n store.registerChangeListener(props, (...params) => {\n const updateProps = props.every((option, i) => {\n switch (option) {\n case ROWS:\n case COLUMNS:\n case DETAIL:\n equalityChecker = isEqual('Array');\n break;\n\n case SHAPE:\n case SIZE:\n case COLOR:\n case DATA:\n case CONFIG:\n equalityChecker = isEqual('Object');\n break;\n default:\n equalityChecker = () => true;\n break;\n }\n const oldVal = params[i][0];\n const newVal = params[i][1];\n\n return equalityChecker(oldVal, newVal);\n });\n // inform attached board to rerender\n !updateProps && dispatchProps(context);\n context.render();\n }, true);\n });\n};\n\nexport const applyInteractionPolicy = (policies, firebolt) => {\n const canvas = firebolt.context;\n const visualGroup = canvas.composition().visualGroup;\n const valueMatrix = visualGroup.composition().matrices.value;\n policies.forEach(policy => policy(valueMatrix, firebolt));\n};\n","import {\n getDataModelFromIdentifiers,\n FieldType,\n mergeRecursive\n} from 'muze-utils';\n\nimport { applyInteractionPolicy } from './helper';\n\nconst defaultInteractionPolicy = (valueMatrix, firebolt) => {\n const isMeasure = field => field.type() === FieldType.MEASURE;\n const canvas = firebolt.context;\n const visualGroup = canvas.composition().visualGroup;\n const xFields = [].concat(...visualGroup.getFieldsFromChannel('x'));\n const yFields = [].concat(...visualGroup.getFieldsFromChannel('y'));\n const colDim = xFields.every(field => field.type() === FieldType.DIMENSION);\n const fieldInf = visualGroup.resolver().getAllFields();\n const rowFacets = fieldInf.rowFacets;\n const colFacets = fieldInf.colFacets;\n valueMatrix.each((cell) => {\n const unitFireBolt = cell.valueOf().firebolt();\n\n if (!(xFields.every(isMeasure) && yFields.every(isMeasure))) {\n const facetFields = cell.valueOf().facetByFields()[0];\n const unitColFacets = facetFields.filter(d => colFacets.findIndex(v => v.equals(d)) !== -1);\n const unitRowFacets = facetFields.filter(d => rowFacets.findIndex(v => v.equals(d)) !== -1);\n let propFields;\n if (colDim) {\n propFields = unitColFacets.map(d => `${d}`);\n } else {\n propFields = unitRowFacets.map(d => `${d}`);\n }\n\n unitFireBolt.propagateWith('*', propFields, true);\n }\n });\n};\n\nconst defaultCrossInteractionPolicy = {\n behaviours: {\n '*': (propagationPayload, context) => {\n const propagationCanvasAlias = propagationPayload.sourceCanvas;\n const canvasAlias = context.parentAlias();\n return propagationCanvasAlias ? canvasAlias === propagationCanvasAlias : true;\n }\n },\n sideEffects: {\n tooltip: (propagationPayload, context) => {\n const propagationUnit = propagationPayload.sourceUnit;\n const propagationCanvas = propagationPayload.sourceCanvas;\n const unitId = context.id();\n const canvasAlias = context.parentAlias();\n if (propagationCanvas) {\n return propagationCanvas !== canvasAlias ? true : unitId === propagationUnit;\n }\n return true;\n }\n }\n};\n\nexport default class GroupFireBolt {\n constructor (context) {\n this.context = context;\n this._interactionPolicy = this.constructor.defaultInteractionPolicy();\n this._crossInteractionPolicy = this.constructor.defaultCrossInteractionPolicy();\n this.context.once('canvas.updated').then(() => {\n applyInteractionPolicy([this._interactionPolicy], this);\n const crossInteractionPolicy = this._crossInteractionPolicy;\n const behaviours = crossInteractionPolicy.behaviours;\n const sideEffects = crossInteractionPolicy.sideEffects;\n const visualGroup = context.composition().visualGroup;\n const valueMatrix = visualGroup.composition().matrices.value;\n valueMatrix.each((cell) => {\n const unitFireBolt = cell.valueOf().firebolt();\n for (const key in behaviours) {\n unitFireBolt.changeBehaviourStateOnPropagation(key, behaviours[key]);\n }\n for (const key in sideEffects) {\n unitFireBolt.changeSideEffectStateOnPropagation(key, sideEffects[key]);\n }\n });\n });\n }\n\n static defaultInteractionPolicy () {\n return defaultInteractionPolicy;\n }\n\n static defaultCrossInteractionPolicy () {\n return defaultCrossInteractionPolicy;\n }\n\n interactionPolicy (...policy) {\n if (policy.length) {\n this._interactionPolicy = policy[0] || this.constructor.defaultInteractionPolicy();\n return this;\n }\n return this._interactionPolicy;\n }\n\n crossInteractionPolicy (...policy) {\n if (policy.length) {\n this._crossInteractionPolicy = mergeRecursive(mergeRecursive({},\n this.constructor.defaultCrossInteractionPolicy()), policy[0] || {});\n return this;\n }\n return this._crossInteractionPolicy;\n }\n\n dispatchBehaviour (behaviour, payload) {\n const propPayload = Object.assign(payload);\n const criteria = propPayload.criteria;\n const data = this.context.data();\n\n propPayload.action = behaviour;\n const model = getDataModelFromIdentifiers(data, criteria);\n data.propagate(model, propPayload, {\n sourceId: this.context.alias()\n });\n return this;\n }\n\n}\n","import { GridLayout } from '@chartshq/layout';\nimport { transactor, Store, getUniqueId } from 'muze-utils';\nimport { RETINAL } from '../constants';\nimport TransactionSupport from '../transaction-support';\nimport { getRenderDetails, prepareLayout } from './layout-maker';\nimport { localOptions, canvasOptions } from './local-options';\nimport { renderComponents } from './renderer';\nimport GroupFireBolt from './firebolt';\nimport options from '../options';\nimport { initCanvas, setupChangeListener } from './helper';\n\n/**\n * This is the primary class which manages highlevel components like visualGroup, Titles, Legend, Extensions\n * (in future). Global level Muze functionality is subset this. Every time user works with an instance of\n * canvas in dom which provides instance level settings.\n *\n */\nexport default class Canvas extends TransactionSupport {\n\n /**\n * Creates reactive property accessors.\n * - data\n * - height\n * - width\n * - config\n * This configs are retrieved from options.\n */\n constructor (globalDependencies) {\n super();\n\n this._allOptions = Object.assign({}, options, localOptions);\n this._registry = {};\n this._composition = {};\n this._cachedProps = {};\n this._alias = null;\n this._renderedResolve = null;\n this._renderedPromise = new Promise((resolve) => {\n this._renderedResolve = resolve;\n });\n this._composition.layout = new GridLayout();\n this._store = new Store({});\n\n // Setters and getters will be mounted on this. The object will be mutated.\n const [, store] = transactor(this, options, this._store.model);\n transactor(this, localOptions, store);\n transactor(this, canvasOptions, store);\n this.dependencies(Object.assign({}, globalDependencies, this._dependencies));\n this.firebolt(new GroupFireBolt(this));\n this.alias(`canvas-${getUniqueId()}`);\n this.title('', {});\n this.subtitle('', {});\n this.legend({});\n this.color({});\n this.shape({});\n this.size({});\n setupChangeListener(this);\n }\n\n /**\n *\n *\n * @readonly\n * @memberof Canvas\n */\n layout (...params) {\n if (params.length) {\n return this;\n }\n return this.composition().layout;\n }\n\n /**\n *\n *\n * @readonly\n * @memberof Canvas\n */\n composition (...params) {\n if (params.length) {\n return this;\n }\n return this._composition;\n }\n\n done () {\n return this._renderedPromise;\n }\n\n /**\n *\n *\n * @param {*} params\n * @returns\n * @memberof Canvas\n */\n alias (...params) {\n if (params.length) {\n const visualGroup = this.composition().visualGroup;\n this._alias = params[0];\n visualGroup && visualGroup.alias(this.alias());\n return this;\n }\n return this._alias;\n }\n\n /**\n * Creates an instance initiated with given settings.\n *\n * @param {Object} initialSettings Initial settings to be populated in the model\n * @param {Object} regEntry newly created instance with the initial settings\n * @param {Object} globalDependencies dependencies which will be created only once in the page\n *\n * @return {Object} newly created instance with the initial settings\n */\n static withSettings (initialSettings, regEntry, globalDependencies) {\n const instance = new Canvas(globalDependencies);\n\n for (const key in initialSettings) {\n instance[key](initialSettings[key]);\n }\n // set registry for instance\n instance.registry(regEntry);\n return instance;\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof Canvas\n */\n static formalName () {\n return 'canvas';\n }\n\n /**\n *\n *\n * @readonly\n * @memberof Canvas\n */\n firebolt (...firebolt) {\n if (firebolt.length) {\n this._firebolt = firebolt[0];\n return this;\n }\n return this._firebolt;\n }\n\n /**\n * Registry peoperty accessor\n *\n * @param {Object} reg plain old javascript object keyvalue pairs. Key containing module name and value contains\n * module definition class. The reg object has to be flat object of level 1.\n */\n registry (...params) {\n if (params.length) {\n const components = Object.assign({}, params[0].components);\n const componentSubRegistry = Object.assign({}, params[0].componentSubRegistry);\n\n this._registry = { components, componentSubRegistry };\n const initedComponents = initCanvas(this);\n // @todo is it okay to continue this tight behaviour? If not use a resolver to resolve diff component type.\n this._composition.visualGroup = initedComponents[0];\n\n this.composition().visualGroup.alias(this.alias());\n return this;\n }\n return this._registry;\n }\n\n /*\n * Prepare dependencies for top level elements\n */\n dependencies (...param) {\n if (param.length) {\n this._dependencies = param[0];\n return this;\n }\n // @todo prepare dependencies here.\n return this._dependencies;\n }\n\n /**\n *\n *\n * @param {*} lifeCycles\n * @returns\n * @memberof Canvas\n */\n lifeCycle (lifeCycles) {\n const lifeCycleManager = this.dependencies().lifeCycleManager;\n if (lifeCycles) {\n lifeCycleManager.register(lifeCycles);\n return this;\n }\n return lifeCycleManager;\n }\n\n /**\n *\n *\n * @readonly\n * @memberof Canvas\n */\n legend (...params) {\n if (params.length) {\n return this;\n }\n return this.composition().legend;\n }\n\n /**\n *\n *\n * @param {*} eventName\n * @returns\n * @memberof Canvas\n */\n once (eventName) {\n const lifeCycleManager = this.dependencies().lifeCycleManager;\n return lifeCycleManager.retrieve(eventName);\n }\n\n /**\n * Internal function to trigger render, this method is cognizant of all the properties of the core modules and\n * establish a passive reactivity. Passive reactivity is not always a bad thing :)\n * @internal\n */\n render () {\n const mount = this.mount();\n const visGroup = this.composition().visualGroup;\n const lifeCycleManager = this.dependencies().lifeCycleManager;\n // Get render details including arrangement and measurement\n const { components, layoutConfig, measurement } = getRenderDetails(this, mount);\n\n lifeCycleManager.notify({ client: this, action: 'beforedraw' });\n // Prepare the layout by triggering the matrix calculation\n prepareLayout(this.layout(), components, layoutConfig, measurement);\n // Render each component\n renderComponents(this, components, layoutConfig, measurement);\n // Update life cycle\n lifeCycleManager.notify({ client: this, action: 'drawn' });\n const promises = [];\n visGroup.matrixInstance().value.each((el) => {\n promises.push(el.valueOf().done());\n });\n Promise.all(promises).then(() => {\n this._renderedResolve();\n });\n }\n\n /**\n *\n *\n * @returns\n * @memberof Canvas\n */\n xAxes () {\n return this.composition().visualGroup.getAxes('x');\n }\n\n /**\n *\n *\n * @returns\n * @memberof Canvas\n */\n yAxes () {\n return this.composition().visualGroup.getAxes('y');\n }\n\n /**\n *\n *\n * @returns\n * @memberof Canvas\n */\n getRetinalAxes () {\n const visualGroup = this.composition().visualGroup;\n return visualGroup.getAxes(RETINAL);\n }\n}\n","import { cellRegistry, SimpleCell } from '@chartshq/visual-cell';\nimport { VisualUnit } from '@chartshq/visual-unit';\nimport { layerRegistry } from '@chartshq/visual-layer';\nimport { SimpleGroup, VisualGroup } from '@chartshq/visual-group';\n\nexport const COMPONENTS = {\n VisualGroup,\n VisualUnit\n};\nexport const SUBREGISTRIES = {\n cellRegistry,\n layerRegistry\n};\nexport const INTERFACES = {\n SimpleGroup,\n SimpleCell\n};\n\n","import { DEFAULT_LAYERS } from './defaults';\n\nexport default () => {\n const reg = DEFAULT_LAYERS;\n const regObj = {\n set: (key, def) => {\n reg[key] = def;\n return regObj;\n },\n get: () => reg\n };\n return regObj;\n};\n","import {\n transactor,\n Smartlabel,\n enableChainedTransaction,\n LifeCycleManager,\n DataModel,\n makeElement,\n getClientPoint,\n selectElement,\n getEvent,\n require,\n DateTimeFormatter\n} from 'muze-utils';\n\nimport {\n SurrogateSideEffect,\n SpawnableSideEffect,\n sideEffects,\n PersistentBehaviour,\n GenericBehaviour,\n VolatileBehaviour,\n behaviouralActions,\n GenericSideEffect\n} from '@chartshq/muze-firebolt';\nimport { layerFactory } from '@chartshq/visual-layer';\nimport pkg from '../package.json';\nimport * as operators from './operators';\nimport { actionModel as ActionModel } from './action-model';\nimport options from './options';\nimport { Canvas } from './canvas';\nimport { COMPONENTS, SUBREGISTRIES } from './default-registry';\nimport './muze.scss';\n\n// Cache singleton instances which should be included only once in a page\nconst globalCache = {};\nconst defaultRegistry = COMPONENTS;\n\nconst overrideRegistryDefinitions = (overrideRegistry, registry) => {\n for (const prop in overrideRegistry) {\n registry.set(prop, overrideRegistry[prop]);\n }\n};\n\n/**\n * Entry point to renderer. Initializes an environment with settings and registries for canvas. This is a simple wrapper\n * over {@link Canvas} which enables common configuration passing to multiple such canvases.\n *\n * Everytime `muze()` is called it creates an environment. These environment supports subset of APIs of Canvas. If\n * common configuration is used to render multiple canvases then it can be set directly in the env. Like if data is\n * common across all the visulization then its better to set the data in env. When a canvas is created it receives all\n * those configuration from env.\n *\n * ```\n * // Creates an environment\n * const env = muze()\n * // Set data property in environment, so that all the canvas created from the same environment gets this data\n * // automatically\n * env.data(dm);\n * // Creates canvas, by default env pushes data to canvas instance\n * const canvas = env.canvas();\n * ```\n *\n * If a property is set on both environment and canvas instance, property set on canvas instance gets more priority.\n *\n * @public\n * @module muze\n * @namespace Muze\n *\n * @return {Env} Instance of an environment\n */\nconst muze = () => {\n // Setters and getters will be mounted on this. Object will be mutated.\n const [env, globalStore] = transactor({}, options);\n const components = Object.assign({}, COMPONENTS);\n const componentSubRegistryDef = Object.assign(SUBREGISTRIES);\n const componentSubRegistry = {};\n\n for (const prop in componentSubRegistryDef) {\n componentSubRegistry[prop] = componentSubRegistryDef[prop]();\n }\n\n // Apart form the setter getter, an instance method is injected to create real renderer instances\n env.canvas = () => {\n // Create a canvas instance with this settings\n const settings = globalStore.serialize();\n const canvas = Canvas.withSettings(settings, { /* registry */\n components,\n componentSubRegistry\n }, env.globalDependencies());\n\n // Whenever settings is changed canvas is updated\n enableChainedTransaction(globalStore, canvas, Object.keys(settings));\n\n return canvas;\n };\n\n // Global dependencies for for compositions. Only one copy of the same should be in the page\n env.globalDependencies = () => {\n if (!globalCache.smartlabel) {\n globalCache.smartlabel = new Smartlabel(1, 'body');\n }\n return {\n smartlabel: globalCache.smartlabel,\n lifeCycleManager: new LifeCycleManager()\n };\n };\n\n // Retrieves global settings. This getter is readonly so that user can't change this as change should happen\n // only from setter to avoid unwanted sync issues.\n env.settings = () => globalStore.serialize();\n\n env.registry = (...overrideRegistry) => {\n // Selectively copy the properties from COMPONENTS\n if (overrideRegistry.length) {\n for (const prop in overrideRegistry) {\n if (prop in defaultRegistry) {\n components[prop] = overrideRegistry[prop];\n }\n }\n return env;\n }\n return components;\n };\n\n env.cellRegistry = (...overrideRegistry) => {\n const cellRegistry = componentSubRegistry.cellRegistry;\n if (overrideRegistry.length) {\n overrideRegistryDefinitions(overrideRegistry[0], cellRegistry);\n return env;\n }\n return cellRegistry.get();\n };\n\n env.layerRegistry = (...overrideRegistry) => {\n const layerRegistry = componentSubRegistry.layerRegistry;\n if (overrideRegistry.length) {\n overrideRegistryDefinitions(overrideRegistry[0], layerRegistry);\n return env;\n }\n return layerRegistry.get();\n };\n\n return env;\n};\n\nconst SideEffects = {\n sideEffects,\n standards: {\n SurrogateSideEffect,\n SpawnableSideEffect,\n GenericSideEffect\n }\n};\n\nconst Behaviours = {\n behaviouralActions,\n standards: {\n GenericBehaviour,\n PersistentBehaviour,\n VolatileBehaviour\n }\n};\n\nmuze.DataModel = DataModel;\nmuze.version = pkg.version;\nmuze.SideEffects = SideEffects;\nmuze.ActionModel = ActionModel;\nmuze.layerFactory = layerFactory;\nmuze.Operators = operators;\nmuze.Behaviours = Behaviours;\nmuze.utils = {\n getClientPoint,\n getEvent,\n makeElement,\n selectElement,\n DateTimeFormatter,\n require\n};\n\nexport default muze;\n"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack://muze/webpack/universalModuleDefinition","webpack://muze/webpack/bootstrap","webpack://muze/../Documents/Muze/datamodel/dist/datamodel.js","webpack://muze/./packages/muze-utils/node_modules/hyperdis/dist/hyperdis.js","webpack://muze/(webpack)/buildin/module.js","webpack://muze/./packages/muze-utils/node_modules/fusioncharts-smartlabel/lib/SmartlabelManager.js","webpack://muze/./packages/muze-utils/node_modules/fusioncharts-smartlabel/lib/lib.js","webpack://muze/./packages/muze/src/index.js","webpack://muze/./packages/muze-utils/node_modules/fusioncharts-smartlabel/lib/container-manager.js","webpack://muze/./packages/muze-utils/node_modules/d3-array/src/ascending.js","webpack://muze/./packages/muze-utils/node_modules/d3-array/src/bisector.js","webpack://muze/./packages/muze-utils/node_modules/d3-array/src/bisect.js","webpack://muze/./packages/muze-utils/node_modules/d3-array/src/cross.js","webpack://muze/./packages/muze-utils/node_modules/d3-array/src/number.js","webpack://muze/./packages/muze-utils/node_modules/d3-array/src/array.js","webpack://muze/./packages/muze-utils/node_modules/d3-array/src/range.js","webpack://muze/./packages/muze-utils/node_modules/d3-array/src/ticks.js","webpack://muze/./packages/muze-utils/node_modules/d3-array/src/threshold/sturges.js","webpack://muze/./packages/muze-utils/node_modules/d3-array/src/quantile.js","webpack://muze/./packages/muze-utils/node_modules/d3-collection/src/map.js","webpack://muze/./packages/muze-utils/node_modules/d3-collection/src/nest.js","webpack://muze/./packages/muze-utils/node_modules/d3-collection/src/set.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/array.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/ordinal.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/band.js","webpack://muze/./packages/muze-utils/node_modules/d3-color/src/define.js","webpack://muze/./packages/muze-utils/node_modules/d3-color/src/color.js","webpack://muze/./packages/muze-utils/node_modules/d3-color/src/math.js","webpack://muze/./packages/muze-utils/node_modules/d3-color/src/lab.js","webpack://muze/./packages/muze-utils/node_modules/d3-color/src/cubehelix.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/basis.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/constant.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/color.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/rgb.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/number.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/basisClosed.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/string.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/transform/parse.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/value.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/date.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/array.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/object.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/round.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/transform/decompose.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/transform/index.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/zoom.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/hsl.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/hcl.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/cubehelix.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/piecewise.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/quantize.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/constant.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/number.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/continuous.js","webpack://muze/./packages/muze-utils/node_modules/d3-format/src/formatDecimal.js","webpack://muze/./packages/muze-utils/node_modules/d3-format/src/exponent.js","webpack://muze/./packages/muze-utils/node_modules/d3-format/src/formatSpecifier.js","webpack://muze/./packages/muze-utils/node_modules/d3-format/src/formatTrim.js","webpack://muze/./packages/muze-utils/node_modules/d3-format/src/formatPrefixAuto.js","webpack://muze/./packages/muze-utils/node_modules/d3-format/src/defaultLocale.js","webpack://muze/./packages/muze-utils/node_modules/d3-format/src/formatRounded.js","webpack://muze/./packages/muze-utils/node_modules/d3-format/src/formatTypes.js","webpack://muze/./packages/muze-utils/node_modules/d3-format/src/identity.js","webpack://muze/./packages/muze-utils/node_modules/d3-format/src/locale.js","webpack://muze/./packages/muze-utils/node_modules/d3-format/src/formatGroup.js","webpack://muze/./packages/muze-utils/node_modules/d3-format/src/formatNumerals.js","webpack://muze/./packages/muze-utils/node_modules/d3-format/src/precisionFixed.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/tickFormat.js","webpack://muze/./packages/muze-utils/node_modules/d3-format/src/precisionPrefix.js","webpack://muze/./packages/muze-utils/node_modules/d3-format/src/precisionRound.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/linear.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/identity.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/nice.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/log.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/pow.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/quantile.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/quantize.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/threshold.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/interval.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/millisecond.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/duration.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/second.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/minute.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/hour.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/day.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/week.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/month.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/year.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/utcMinute.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/utcHour.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/utcDay.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/utcWeek.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/utcMonth.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/utcYear.js","webpack://muze/./packages/muze-utils/node_modules/d3-time-format/src/locale.js","webpack://muze/./packages/muze-utils/node_modules/d3-time-format/src/defaultLocale.js","webpack://muze/./packages/muze-utils/node_modules/d3-time-format/src/isoFormat.js","webpack://muze/./packages/muze-utils/node_modules/d3-time-format/src/isoParse.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/time.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/colors.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/category10.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/category20b.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/category20.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/category20c.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/cubehelix.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/rainbow.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/viridis.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/sequential.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/colors.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/categorical/Accent.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/categorical/category10.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/categorical/Dark2.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/categorical/Paired.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/categorical/Pastel1.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/categorical/Pastel2.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/categorical/Set1.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/categorical/Set2.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/categorical/Set3.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/ramp.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/diverging/BrBG.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/diverging/PRGn.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/diverging/PiYG.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/diverging/PuOr.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/diverging/RdBu.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/diverging/RdGy.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/diverging/RdYlBu.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/diverging/RdYlGn.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/diverging/Spectral.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/BuGn.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/BuPu.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/GnBu.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/OrRd.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/PuBuGn.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/PuBu.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/PuRd.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/RdPu.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/YlGnBu.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/YlGn.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/YlOrBr.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/YlOrRd.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-single/Blues.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-single/Greens.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-single/Greys.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-single/Purples.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-single/Reds.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-single/Oranges.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/cubehelix.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/rainbow.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/sinebow.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/viridis.js","webpack://muze/./packages/muze-utils/src/enums/reserved-fields.js","webpack://muze/./packages/muze-utils/src/enums/common-props.js","webpack://muze/./packages/muze-utils/node_modules/d3-axis/src/array.js","webpack://muze/./packages/muze-utils/node_modules/d3-axis/src/identity.js","webpack://muze/./packages/muze-utils/node_modules/d3-axis/src/axis.js","webpack://muze/./packages/muze-utils/node_modules/d3-path/src/path.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/constant.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/math.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/arc.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/curve/linear.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/point.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/line.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/area.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/descending.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/identity.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/curve/radial.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/lineRadial.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/array.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/symbol/circle.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/symbol/cross.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/symbol/diamond.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/symbol/star.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/symbol/square.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/symbol/triangle.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/symbol/wye.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/noop.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/curve/basis.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/curve/basisClosed.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/curve/basisOpen.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/curve/bundle.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/curve/cardinal.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/curve/cardinalClosed.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/curve/cardinalOpen.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/curve/catmullRom.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/curve/catmullRomClosed.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/curve/catmullRomOpen.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/curve/linearClosed.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/curve/monotone.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/curve/natural.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/curve/step.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/offset/none.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/order/none.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/stack.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/order/ascending.js","webpack://muze/./packages/muze-utils/node_modules/d3-ease/src/cubic.js","webpack://muze/./packages/muze-utils/node_modules/d3-ease/src/poly.js","webpack://muze/./packages/muze-utils/node_modules/d3-ease/src/sin.js","webpack://muze/./packages/muze-utils/node_modules/d3-ease/src/bounce.js","webpack://muze/./packages/muze-utils/node_modules/d3-ease/src/back.js","webpack://muze/./packages/muze-utils/node_modules/d3-ease/src/elastic.js","webpack://muze/./packages/muze-utils/node_modules/d3-voronoi/src/constant.js","webpack://muze/./packages/muze-utils/node_modules/d3-voronoi/src/point.js","webpack://muze/./packages/muze-utils/node_modules/d3-voronoi/src/RedBlackTree.js","webpack://muze/./packages/muze-utils/node_modules/d3-voronoi/src/Edge.js","webpack://muze/./packages/muze-utils/node_modules/d3-voronoi/src/Cell.js","webpack://muze/./packages/muze-utils/node_modules/d3-voronoi/src/Circle.js","webpack://muze/./packages/muze-utils/node_modules/d3-voronoi/src/Beach.js","webpack://muze/./packages/muze-utils/node_modules/d3-voronoi/src/Diagram.js","webpack://muze/./packages/muze-utils/node_modules/d3-voronoi/src/voronoi.js","webpack://muze/./packages/muze-utils/src/common-utils.js","webpack://muze/./packages/muze-utils/node_modules/d3-ease/src/linear.js","webpack://muze/./packages/muze-utils/node_modules/d3-ease/src/circle.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/symbol.js","webpack://muze/./packages/muze-utils/src/enums/stack-config.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/order/descending.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/offset/diverging.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/offset/expand.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/offset/wiggle.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/pie.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/namespaces.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/namespace.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/creator.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selector.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selectorAll.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/matcher.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/sparse.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/enter.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/constant.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/data.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/sort.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/attr.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/window.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/style.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/classed.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/text.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/html.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/raise.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/lower.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/insert.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/remove.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/clone.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/on.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/dispatch.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/index.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/select.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/selectAll.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/filter.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/exit.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/merge.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/order.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/call.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/nodes.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/node.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/size.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/empty.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/each.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/property.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/append.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/datum.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/select.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/local.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/sourceEvent.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/point.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/mouse.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/touch.js","webpack://muze/./packages/muze-utils/node_modules/d3-dispatch/src/dispatch.js","webpack://muze/./packages/muze-utils/node_modules/d3-drag/src/noevent.js","webpack://muze/./packages/muze-utils/node_modules/d3-drag/src/nodrag.js","webpack://muze/./packages/muze-utils/node_modules/d3-drag/src/constant.js","webpack://muze/./packages/muze-utils/node_modules/d3-drag/src/event.js","webpack://muze/./packages/muze-utils/node_modules/d3-drag/src/drag.js","webpack://muze/./packages/muze-utils/node_modules/d3-timer/src/timer.js","webpack://muze/./packages/muze-utils/node_modules/d3-timer/src/timeout.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/schedule.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/tween.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/interpolate.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/remove.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/selection.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/text.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/index.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/select.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/selectAll.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/filter.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/merge.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/transition.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/on.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/attr.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/attrTween.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/style.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/styleTween.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/delay.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/duration.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/ease.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/selection/transition.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/selection/index.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/selection/interrupt.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/interrupt.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/active.js","webpack://muze/./packages/muze-utils/src/renderer-utils.js","webpack://muze/./packages/muze-utils/src/DataSystem/selection.js","webpack://muze/./packages/muze-utils/src/DataSystem/data-object.js","webpack://muze/./packages/muze-utils/src/lifecycle-manager/event-list.js","webpack://muze/./packages/muze-utils/src/lifecycle-manager/lifecycle-manager.js","webpack://muze/./packages/muze-utils/src/lifecycle-manager/index.js","webpack://muze/./packages/muze-firebolt/src/enums/actions.js","webpack://muze/./packages/muze-firebolt/src/enums/selection.js","webpack://muze/./packages/muze-firebolt/src/selection-set/index.js","webpack://muze/./packages/muze-firebolt/src/helper/index.js","webpack://muze/./packages/muze-firebolt/src/firebolt.js","webpack://muze/./packages/muze-firebolt/src/actions/behavioural/generic.js","webpack://muze/./packages/muze-firebolt/src/actions/behavioural/volatile.js","webpack://muze/./packages/muze-firebolt/src/enums/behaviours.js","webpack://muze/./packages/muze-firebolt/src/actions/behavioural/highlight.js","webpack://muze/./packages/muze-firebolt/src/actions/behavioural/brush.js","webpack://muze/./packages/muze-firebolt/src/actions/behavioural/filter.js","webpack://muze/./packages/muze-firebolt/src/actions/behavioural/persistent.js","webpack://muze/./packages/muze-firebolt/src/actions/behavioural/select.js","webpack://muze/./packages/muze-firebolt/src/actions/physical/helpers/drag-action-config.js","webpack://muze/./packages/muze-firebolt/src/actions/physical/helpers/drag-event.js","webpack://muze/./packages/muze-firebolt/src/actions/physical/hover.js","webpack://muze/./packages/muze-firebolt/src/enums/constants.js","webpack://muze/./packages/muze-firebolt/src/actions/physical/helpers/index.js","webpack://muze/./packages/muze-firebolt/src/actions/physical/click.js","webpack://muze/./packages/muze-firebolt/src/actions/physical/index.js","webpack://muze/./packages/muze-firebolt/src/actions/physical/drag.js","webpack://muze/./packages/muze-firebolt/src/actions/physical/longtouch.js","webpack://muze/./packages/muze-firebolt/src/actions/physical/touch-drag.js","webpack://muze/./packages/muze-firebolt/src/side-effects/generic.js","webpack://muze/./packages/muze-firebolt/src/side-effects/surrogate.js","webpack://muze/./packages/muze-firebolt/src/side-effects/spawnable.js","webpack://muze/./packages/muze-firebolt/src/side-effects/selection-box/helper.js","webpack://muze/./packages/muze-firebolt/src/side-effects/selection-box/index.js","webpack://muze/./packages/muze-firebolt/src/actions/physical/selection-box-drag.js","webpack://muze/./packages/muze-tooltip/src/constants.js","webpack://muze/./packages/muze-tooltip/src/default-config.js","webpack://muze/./packages/muze-tooltip/src/helper.js","webpack://muze/./packages/muze-tooltip/src/strategy.js","webpack://muze/./packages/muze-tooltip/src/content.js","webpack://muze/./packages/muze-tooltip/src/tooltip.js","webpack://muze/./packages/muze-firebolt/src/side-effects/tooltip/strategies.js","webpack://muze/./packages/muze-firebolt/src/side-effects/tooltip/index.js","webpack://muze/./packages/muze-firebolt/src/side-effects/helper/index.js","webpack://muze/./packages/muze-firebolt/src/side-effects/crossline/index.js","webpack://muze/./packages/muze-firebolt/src/side-effects/plot-highlighter/strategy.js","webpack://muze/./packages/muze-firebolt/src/side-effects/plot-highlighter/index.js","webpack://muze/./packages/muze-firebolt/src/side-effects/filter/index.js","webpack://muze/./packages/muze-firebolt/src/side-effects/anchors/index.js","webpack://muze/./packages/muze-firebolt/src/side-effects/persistent-anchors.js","webpack://muze/./packages/muze-firebolt/src/side-effects/brush-anchors.js","webpack://muze/./packages/muze-firebolt/src/behaviour-effect-map.js","webpack://muze/./packages/visual-layer/src/enums/constants.js","webpack://muze/./packages/visual-layer/src/layers/area/default-config.js","webpack://muze/./packages/visual-layer/src/simple-layer/simple-layer.js","webpack://muze/./packages/visual-layer/src/enums/props.js","webpack://muze/./packages/muze-axis/src/enums/axis-orientation.js","webpack://muze/./packages/muze-axis/src/enums/scale-type.js","webpack://muze/./packages/muze-axis/src/enums/constants.js","webpack://muze/./packages/muze-axis/src/scale-creator.js","webpack://muze/./packages/muze-axis/src/cartesian-axis/default-config.js","webpack://muze/./packages/muze-axis/src/axis-renderer.js","webpack://muze/./packages/muze-axis/src/cartesian-axis/helper.js","webpack://muze/./packages/muze-axis/src/cartesian-axis/props.js","webpack://muze/./packages/muze-axis/src/cartesian-axis/simple-axis.js","webpack://muze/./packages/muze-axis/src/cartesian-axis/interpolators/linear.js","webpack://muze/./packages/muze-axis/src/cartesian-axis/interpolators/log.js","webpack://muze/./packages/muze-axis/src/cartesian-axis/interpolators/pow.js","webpack://muze/./packages/muze-axis/src/cartesian-axis/continous-axis.js","webpack://muze/./packages/muze-axis/src/cartesian-axis/band-axis.js","webpack://muze/./packages/muze-axis/src/cartesian-axis/time-axis.js","webpack://muze/./packages/muze-axis/src/color-axis/color-maps.js","webpack://muze/./packages/muze-axis/src/color-axis/defaults.js","webpack://muze/./packages/muze-axis/src/color-axis/props.js","webpack://muze/./packages/muze-axis/src/color-axis/color-strategy.js","webpack://muze/./packages/muze-axis/src/color-axis/color-axis.js","webpack://muze/./packages/muze-axis/src/size-axis/defaults.js","webpack://muze/./packages/muze-axis/src/size-axis/size-strategy.js","webpack://muze/./packages/muze-axis/src/size-axis/props.js","webpack://muze/./packages/muze-axis/src/size-axis/size-axis.js","webpack://muze/./packages/muze-axis/src/shape-axis/defaults.js","webpack://muze/./packages/muze-axis/src/shape-axis/props.js","webpack://muze/./packages/muze-axis/src/shape-axis/shape-axis.js","webpack://muze/./packages/muze-axis/src/shape-axis/helper.js","webpack://muze/./packages/muze-axis/src/data-type-scale-map.js","webpack://muze/./packages/transform/src/group-transform/index.js","webpack://muze/./packages/transform/src/identity-transform/index.js","webpack://muze/./packages/transform/src/transform-factory/index.js","webpack://muze/./packages/transform/src/enums/transform-type.js","webpack://muze/./packages/transform/src/stack-transform/index.js","webpack://muze/./packages/visual-layer/src/helpers/index.js","webpack://muze/./packages/visual-layer/src/base-layer/listener-map.js","webpack://muze/./packages/visual-layer/src/base-layer/default-options.js","webpack://muze/./packages/visual-layer/src/base-layer/base-layer.js","webpack://muze/./packages/visual-layer/src/layers/line/renderer.js","webpack://muze/./packages/visual-layer/src/layers/line/default-config.js","webpack://muze/./packages/visual-layer/src/layers/line/line.js","webpack://muze/./packages/visual-layer/src/layers/area/renderer.js","webpack://muze/./packages/visual-layer/src/layers/area/area.js","webpack://muze/./packages/visual-layer/src/layers/arc/default-config.js","webpack://muze/./packages/visual-layer/src/layers/arc/arc.js","webpack://muze/./packages/visual-layer/src/layers/arc/arc-helper.js","webpack://muze/./packages/visual-layer/src/layers/text/renderer.js","webpack://muze/./packages/visual-layer/src/layers/text/default-config.js","webpack://muze/./packages/visual-layer/src/layers/text/text.js","webpack://muze/./packages/visual-layer/src/layers/point/renderer.js","webpack://muze/./packages/visual-layer/src/layers/point/default-config.js","webpack://muze/./packages/visual-layer/src/layers/point/point.js","webpack://muze/./packages/visual-layer/src/layers/bar/renderer.js","webpack://muze/./packages/visual-layer/src/layers/bar/default-config.js","webpack://muze/./packages/visual-layer/src/layers/bar/bar-helper.js","webpack://muze/./packages/visual-layer/src/layers/bar/bar.js","webpack://muze/./packages/visual-layer/src/layers/tick/default-config.js","webpack://muze/./packages/visual-layer/src/layers/tick/renderer.js","webpack://muze/./packages/visual-layer/src/layers/tick/tick.js","webpack://muze/./packages/visual-layer/src/layer-factory/index.js","webpack://muze/./packages/visual-layer/src/defaults.js","webpack://muze/./packages/visual-group/src/enums/constants.js","webpack://muze/./packages/visual-group/src/visual-group/local-options.js","webpack://muze/./packages/visual-group/src/simple-group/simple-group.js","webpack://muze/./packages/visual-group/src/variable/variable.js","webpack://muze/./packages/visual-group/src/variable/composed-vars.js","webpack://muze/./packages/visual-group/src/variable/simple-var.js","webpack://muze/./packages/visual-group/src/encoder/field-sanitizer.js","webpack://muze/./packages/visual-group/src/encoder/visual-encoder.js","webpack://muze/./packages/visual-group/src/enums/scale-maps.js","webpack://muze/./packages/visual-group/src/data-type-scale-map.js","webpack://muze/./packages/visual-group/src/encoder/encoder-helper.js","webpack://muze/./packages/visual-group/src/encoder/cartesian-encoder.js","webpack://muze/./packages/visual-group/src/encoder/polar-encoder.js","webpack://muze/./packages/visual-group/src/encoder/retinal-encoder.js","webpack://muze/./packages/visual-group/src/group-helper/group-utils.js","webpack://muze/./packages/visual-group/src/enums/defaults.js","webpack://muze/./packages/muze-utils/src/DataSystem/dataSelect.js","webpack://muze/./packages/visual-unit/src/firebolt/action-behaviour-map.js","webpack://muze/./packages/visual-unit/src/enums/reactive-props.js","webpack://muze/./packages/visual-unit/src/helper/index.js","webpack://muze/./packages/visual-unit/src/helper/grid-lines.js","webpack://muze/./packages/visual-unit/src/default-config.js","webpack://muze/./packages/visual-unit/src/enums/constants.js","webpack://muze/./packages/visual-unit/src/local-options.js","webpack://muze/./packages/visual-unit/src/listener-map.js","webpack://muze/./packages/visual-unit/src/props.js","webpack://muze/./packages/visual-unit/src/firebolt/helper.js","webpack://muze/./packages/visual-unit/src/firebolt/payload-generator.js","webpack://muze/./packages/visual-unit/src/firebolt/data-propagator.js","webpack://muze/./packages/visual-unit/src/firebolt/index.js","webpack://muze/./packages/visual-unit/src/visual-unit.js","webpack://muze/./packages/visual-group/src/group-helper/matrix-model.js","webpack://muze/./packages/visual-group/src/group-helper/cell-creator.js","webpack://muze/./packages/visual-group/src/group-helper/matrix-resolver.js","webpack://muze/./packages/visual-group/src/visual-group/value-matrix.js","webpack://muze/./packages/visual-group/src/visual-group/change-listener.js","webpack://muze/./packages/visual-group/src/visual-group/props.js","webpack://muze/./packages/visual-group/src/visual-group/visual-group.js","webpack://muze/./packages/muze-legend/src/firebolt/behavioural/select.js","webpack://muze/./packages/muze-legend/src/firebolt/action-behaviour-map.js","webpack://muze/./packages/muze-legend/src/firebolt/behaviour-effect-map.js","webpack://muze/./packages/muze-legend/src/enums/behaviours.js","webpack://muze/./packages/muze-legend/src/enums/side-effects.js","webpack://muze/./packages/muze-legend/src/enums/constants.js","webpack://muze/./packages/muze-legend/src/firebolt/helper.js","webpack://muze/./packages/muze-legend/src/firebolt/legend-firebolt.js","webpack://muze/./packages/muze-legend/src/firebolt/physical/drag.js","webpack://muze/./packages/muze-legend/src/firebolt/physical/hover.js","webpack://muze/./packages/muze-legend/src/firebolt/physical/click.js","webpack://muze/./packages/muze-legend/src/firebolt/physical/index.js","webpack://muze/./packages/muze-legend/src/enums/actions.js","webpack://muze/./packages/muze-legend/src/firebolt/physical/selection-box-drag.js","webpack://muze/./packages/muze-legend/src/firebolt/side-effects/selection-box/index.js","webpack://muze/./packages/muze-legend/src/firebolt/side-effects/legend-highlighter/strategies.js","webpack://muze/./packages/muze-legend/src/firebolt/side-effects/legend-highlighter/index.js","webpack://muze/./packages/muze-legend/src/legend/props.js","webpack://muze/./packages/muze-legend/src/legend/defaults.js","webpack://muze/./packages/muze-legend/src/legend/legend-helper.js","webpack://muze/./packages/muze-legend/src/legend/simple-legend.js","webpack://muze/./packages/muze-legend/src/legend/position-config.js","webpack://muze/./packages/muze-legend/src/legend/renderer.js","webpack://muze/./packages/muze-legend/src/legend/discrete-legend.js","webpack://muze/./packages/muze-legend/src/legend/gradient-helper.js","webpack://muze/./packages/muze-legend/src/legend/gradient-legend.js","webpack://muze/./packages/muze-legend/src/legend/step-legend.js","webpack://muze/./packages/muze/src/constants.js","webpack://muze/./packages/muze/src/operators.js","webpack://muze/./packages/muze/src/action-model.js","webpack://muze/./packages/muze/src/defaults.js","webpack://muze/./packages/muze/src/options.js","webpack://muze/./packages/layout/src/enums/constants.js","webpack://muze/./packages/layout/src/generic-layout/index.js","webpack://muze/./packages/layout/src/grid-layout/defaults.js","webpack://muze/./packages/layout/src/grid-layout/span-maker.js","webpack://muze/./packages/layout/src/grid-layout/renderer.js","webpack://muze/./packages/layout/src/utils/index.js","webpack://muze/./packages/layout/src/visual-matrix/props.js","webpack://muze/./packages/layout/src/visual-matrix/default-config.js","webpack://muze/./packages/layout/src/visual-matrix/visual-matrix.js","webpack://muze/./packages/layout/src/grid-layout/computations.js","webpack://muze/./packages/layout/src/grid-layout/layout.js","webpack://muze/./packages/layout/src/grid-layout/layout-helper.js","webpack://muze/./packages/muze/src/transaction-support.js","webpack://muze/./packages/muze/src/canvas/component-resolver.js","webpack://muze/./packages/visual-cell/src/enums/constants.js","webpack://muze/./packages/visual-cell/src/enums/cell-type.js","webpack://muze/./packages/visual-cell/src/simple-cell.js","webpack://muze/./packages/visual-cell/src/enums/defaults.js","webpack://muze/./packages/visual-cell/src/props.js","webpack://muze/./packages/visual-cell/src/axis-cell.js","webpack://muze/./packages/visual-cell/src/blank-cell.js","webpack://muze/./packages/visual-cell/src/text-cell.js","webpack://muze/./packages/visual-cell/src/geom-cell.js","webpack://muze/./packages/visual-cell/src/defaults.js","webpack://muze/./packages/visual-cell/src/constants.js","webpack://muze/./packages/visual-cell/src/cell-registry.js","webpack://muze/./packages/muze/src/canvas/title-maker.js","webpack://muze/./packages/muze/src/canvas/legend-maker.js","webpack://muze/./packages/muze/src/canvas/layout-maker.js","webpack://muze/./packages/muze/src/canvas/defaults.js","webpack://muze/./packages/muze/src/canvas/local-options.js","webpack://muze/./packages/muze/src/canvas/renderer.js","webpack://muze/./packages/muze/src/canvas/helper.js","webpack://muze/./packages/muze/src/canvas/firebolt.js","webpack://muze/./packages/muze/src/canvas/canvas.js","webpack://muze/./packages/muze/src/default-registry.js","webpack://muze/./packages/visual-layer/src/layer-registry.js","webpack://muze/./packages/muze/src/muze.js"],"names":["webpackUniversalModuleDefinition","root","factory","exports","module","define","amd","window","installedModules","__webpack_require__","moduleId","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","getDefault","getModuleExports","object","property","prototype","hasOwnProperty","p","s","e","_typeof","__WEBPACK_AMD_DEFINE_ARRAY__","undefined","__WEBPACK_AMD_DEFINE_RESULT__","__WEBPACK_AMD_DEFINE_FACTORY__","apply","default","description","homepage","version","license","main","author","keywords","repository","type","url","contributors","email","dependencies","d3-dsv","devDependencies","babel-cli","babel-core","babel-eslint","babel-loader","babel-plugin-transform-runtime","babel-preset-env","babel-preset-es2015","babel-preset-flow","chai","cross-env","eslint","eslint-config-airbnb","eslint-plugin-import","eslint-plugin-jsx-a11y","eslint-plugin-react","istanbul-instrumenter-loader","jsdoc","json2yaml","karma","karma-chai","karma-chrome-launcher","karma-coverage-istanbul-reporter","karma-mocha","karma-spec-reporter","karma-webpack","marked","mocha","mocha-webpack","transform-runtime","webpack","webpack-cli","webpack-dev-server","scripts","test","ut","utd","build","build:dev","start","lint","lint-errors","docs","u","f","Me","Ve","Ye","Be","a","ct","ft","st","lt","dt","pt","ht","vt","FLAT_JSON","DSV_STR","DSV_ARR","AUTO","CATEGORICAL","TEMPORAL","GEO","DISCRETE","MEASURE","DIMENSION","NORMAL","INVERSE","ALL","length","split","forEach","configurable","writable","TypeError","this","_ref","_rowDiff","sanitize","parsed","getData","fieldType","subType","concat","Array","isArray","from","Set","Math","min","max","parse","clone","fieldName","getMinDiff","unit","scale","defAggFn","push","data","bins","schema","h","Date","v","format","dtParams","nativeDate","RegExp","escape","replace","TOKEN_PREFIX","DATETIME_PARAM_SEQUENCE","YEAR","MONTH","DAY","HOUR","MINUTE","SECOND","MILLISECOND","defaultNumberParser","isFinite","parseInt","defaultRangeParser","toLowerCase","getTokenDefinitions","short","long","H","index","extract","parser","formatter","getHours","toString","P","M","getMinutes","S","getSeconds","K","getMilliseconds","join","getDay","A","getDate","b","getMonth","B","y","substring","getFullYear","Y","getTokenFormalNames","HOUR_12","AMPM_UPPERCASE","AMPM_LOWERCASE","SHORT_DAY","LONG_DAY","DAY_OF_MONTH","DAY_OF_MONTH_CONSTANT_WIDTH","SHORT_MONTH","LONG_MONTH","MONTH_OF_YEAR","SHORT_YEAR","LONG_YEAR","tokenResolver","arguments","findTokens","keys","indexOf","token","formatAs","String","extractTokenValue","noBreak","splice","map","match","shift","getNativeDate","unshift","Function","g","iterator","constructor","_","O","w","E","k","j","T","getTime","round","random","x","F","abs","N","R","createNamespace","fields","fieldsObj","getMeasure","getDimension","D","field","_value","C","next","done","return","L","U","V","G","CROSS","LEFTOUTER","RIGHTOUTER","NATURAL","FULLOUTER","W","getFieldspace","Error","_rowDiffset","Ke","z","X","floor","Q","$","Z","Map","has","set","ee","label","reduce","ne","_colIdentifier","sort","re","ie","ae","oe","sum","avg","every","first","last","count","std","sqrt","pow","ue","ce","fe","store","entries","__unregister","delete","se","le","pe","he","yt","ve","me","ye","ge","fieldDescription","be","_e","ReferenceError","__proto__","getPrototypeOf","fieldUnit","fieldScale","fieldDefAggFn","fieldNumberformat","numberFormat","setPrototypeOf","Number","POSITIVE_INFINITY","NEGATIVE_INFINITY","parseFloat","isNaN","Oe","Ae","trim","_unique","we","Ee","subtype","ke","je","minDiff","_dtf","Se","Te","bin","Fe","xe","dataFormat","assign","firstRowHeader","Ne","Re","De","Pe","Ce","Ie","JSON","stringify","Le","charCodeAt","slice","columns","parseRows","formatRows","Ue","He","fieldSeparator","Je","Ge","qe","We","op","meta","criteria","_derivation","ze","operation","filterByMeasure","getFieldsConfig","values","def","domain","some","valueOf","select","saveChild","Xe","getPartialFieldspace","__calculateFieldspace","calculateFieldsConfig","config","Qe","filter","projField","actualProjField","$e","_partialFieldspace","Ze","et","groupByString","params","tt","nonTraversingModel","excludeModels","handlePropagation","_children","nt","propagationNameSpace","propagateToSource","sourceId","propagateInterpolatedValues","persistent","mutableActions","filterFn","applyOnSource","action","model","models","path","_parent","sourceIdentifiers","propagationSourceId","groupByModel","reverse","rt","it","_fieldStoreName","_propagationNameSpace","immutableActions","_fieldspace","getAllFields","search","_fieldConfig","removeChild","findIndex","at","ot","_onPropagation","_sortingDetails","order","withUid","te","uids","addUid","columnWise","pop","de","defaultReducer","resolve","fieldsArr","replaceVar","addField","isMutableAction","payload","find","propConfig","filterImmutableAction","I","buckets","binCount","binSize","stops","add","mid","range","measureName","binFieldName","mt","Operators","compose","addParent","dispose","project","groupBy","calculateVariable","crossProduct","difference","naturalJoin","leftOuterJoin","rightOuterJoin","fullOuterJoin","union","Stats","DateTimeFormatter","DataFormat","FilteringMode","_set","requestAnimationFrame","webkitRequestAnimationFrame","mozRequestAnimationFrame","oRequestAnimationFrame","msRequestAnimationFrame","setTimeout","__lastTime","__id","unique","qualifiedName","seed","fn","outgoingEdges","accumulate","identity","dep","edges","_seed","requireResolve","retriever","history","resolver","electricEdges","retrieveDetails","q","listeners","nextFrame","currentFrame","qualifiedNodeMap","_wholeSet","_propagate","propagationOverride","currentFrameListeners","nextFrameListeners","_schedule","flush","perv","addDependencies","getDependencies","getResolvedList","addEdges","addElectricNode","append","__execUniqueElectricEdges","toArray","repeatHead","resetPropagationOverride","update","isRoot","_graph","_lockFlag","_reqQ","_addPropInModel","createNodesFrom","createElectricNodeOf","stopPropagation","setPropagationOverride","resetNodeValue","setProp","getNodeValue","getNodeFromQualifiedName","webpackPolyfill","deprecate","paths","children","_interopRequireDefault","obj","_lib2","_containerManager2","slLib","init","doc","win","document","htmlSplCharSpace"," ","documentSupport","getDocumentSupport","SVG_BBOX_CORRECTION","isWebKit","SmartLabelManager","id","container","useEllipses","options","wrapper","prop","prevInstance","isBrowserLess","maxCacheLimit","maxDefaultCacheLimit","getElementById","createContainer","innerHTML","testStrAvg","isHeadLess","isIE","offsetHeight","offsetWidth","parentContainerStyle","style","parentContainer","_containerManager","_showNoEllipses","_init","setStyle","textToLines","smartlabel","text","lines","_calCharDimWithCache","calculateDifference","size","csArr","tw","twi","cachedStyle","asymmetricDifference","maxAdvancedCacheLimit","_container","cache","_advancedCache","advancedCacheKey","_advancedCacheKey","cacheName","fontSize","fontFamily","fontWeight","fontStyle","cacheInitName","repeat","width","height","_getWidthFn","contObj","_containerObj","svgText","str","bbox","textContent","getBBox","_styleNotSet","setLineHeight","sCont","node","_context","context","_cache","charCache","_lineHeight","lineHeight","useEllipsesOnOverflow","getSmartText","maxWidth","maxHeight","noWrap","len","trimStr","tempArr","tmpText","maxWidthWithEll","toolText","oriWidth","oriHeight","newCharIndex","nearestChar","tempChar","getWidth","initialLeft","initialTop","getOriSizeImproveObj","spanArr","minWidth","elem","chr","elemRightMostPoint","elemLowestPoint","lastBR","removeFromIndex","removeFromIndexForEllipses","hasHTMLTag","maxStrWidth","lastDash","lastSpace","lastIndexBroken","strWidth","strHeight","oriTextArr","ellipsesStr","ellipsesWidth","dotWidth","characterArr","dashIndex","spaceIndex","lastLineBreak","fastTrim","ws","charAt","smartLabel","oriTextWidth","oriTextHeight","oriText","isTruncated","xmlTagRegEx","ltgtRegex","getOriSize","substr","getNearestBreakIndex","detailObj","tooltext","lastIndexOf","spanAdditionRegx","spanAdditionReplacer","classNameWithTag","classNameWithTagBR","childRetriverFn","childRetriverString","noClassTesting","classNameReg","className","spaceIdx","dashIdx","offsetLeft","offsetTop","parentNode","insertBefore","createElement","classNameBrReg","spanRemovalRegx","error","detailedCalculationFlag","textArr","letter","lSize","cumulativeSize","indiSizeStore","lib","userAgent","navigator","ceil","clsNameSpace","containerClass","brReplaceRegex","position","top","whiteSpace","padding","overflow","supportedStyle","font","font-family","font-weight","font-size","line-height","font-style","getElementsByClassName","opera","hasSVG","Boolean","SVGAngle","implementation","hasFeature","containerParent","body","appendChild","setAttribute","getElementsByTagName","sl","charLen","increment","avgWidth","styleObj","fSize","Muze","ContainerManager","maxContainers","svg","containers","rootNode","createElementNS","setAttributeNS","svgRoot","diff","containerObj","keyStr","prev","removeContainer","addContainer","avgCharWidth","display","cObj","ascending","NaN","bisector","compare","ascendingComparator","left","lo","hi","right","ascendingBisect","bisectRight","bisect","number","array_array","src_range","stop","step","e10","e5","e2","src_ticks","ticks","tickIncrement","power","log","LN10","tickStep","step0","step1","quantile","valueof","i0","value0","map_Map","map_map","each","remove","clear","empty","src_map","src_nest","sortValues","rollup","nest","sortKeys","array","depth","createResult","setResult","keyValue","valuesByKey","result","createObject","setObject","createMap","setMap","sortKey","set_Set","proto","set_set","src_array_array","src_array_map","array_slice","implicit","ordinal","unknown","copy","band","bandwidth","ordinalRange","paddingInner","paddingOuter","align","rescale","rangeRound","invertExtent","r0","r1","hiIndex","getClosestIndexOf","invert","arr","side","highVal","d1","low","high","extend","parent","definition","Color","reI","reN","reP","reHex3","reHex6","reRgbInteger","reRgbPercent","reRgbaInteger","reRgbaPercent","reHslPercent","reHslaPercent","named","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","color_color","exec","Rgb","rgbn","rgba","hsla","rgbConvert","rgb","opacity","color_rgb","hex","Hsl","hsl","hslConvert","hsl2rgb","m1","m2","displayable","brighter","darker","deg2rad","PI","rad2deg","Xn","Yn","Zn","lab_t0","lab_t1","t2","t3","labConvert","Lab","Hcl","cos","sin","rgb2lrgb","xyz2lab","lab","lab2xyz","lrgb2rgb","hclConvert","atan2","hcl","cubehelix_D","ED","EB","BC_DA","cubehelix_cubehelix","cubehelixConvert","Cubehelix","bl","basis","t1","v0","v1","v2","v3","cosh","sinh","src_constant","linear","color_hue","gamma","nogamma","exponential","src_rgb","rgbGamma","color","end","rgbSpline","spline","colors","rgbBasis","src_number","reA","reB","source","cssNode","cssRoot","cssView","svgNode","src_string","am","bm","bs","bi","lastIndex","one","string_zero","src_value","value_typeof","setTime","nb","na","src_round","degrees","decompose_identity","translateX","translateY","rotate","skewX","scaleX","scaleY","decompose","atan","interpolateTransform","pxComma","pxParen","degParen","translate","xa","ya","xb","yb","interpolateTransformCss","parseCss","documentElement","defaultView","transform","getComputedStyle","getPropertyValue","interpolateTransformSvg","parseSvg","baseVal","consolidate","matrix","SQRT2","hsl_hsl","hue","hslLong","hcl_hcl","src_cubehelix_cubehelix","cubehelixGamma","cubehelix","cubehelixLong","piecewise_piecewise","interpolate","d3_scale_src_constant","d3_scale_src_number","continuous_unit","deinterpolateLinear","bimap","deinterpolate","reinterpolate","d0","polymap","target","clamp","continuous","piecewise","output","input","deinterpolateClamp","reinterpolateClamp","formatDecimal","toExponential","coefficient","src_exponent","formatSpecifier","specifier","FormatSpecifier","fill","sign","symbol","zero","comma","precision","prefixExponent","defaultLocale_locale","defaultLocale_format","defaultLocale_formatPrefix","formatTrim","out","i1","formatRounded","exponent","formatTypes","%","toFixed","toPrecision","toUpperCase","src_identity","prefixes","src_locale","locale","group","grouping","thousands","formatGroup","currency","decimal","numerals","formatNumerals","percent","newFormat","prefix","suffix","formatType","maybeSuffix","valuePrefix","valueSuffix","valueNegative","Infinity","formatPrefix","defaultLocale","src_tickFormat","precisionPrefix","precisionRound","precisionFixed","linearish","tickFormat","nice","linear_linear","identity_identity","src_nice","interval","x0","x1","log_deinterpolate","log_reinterpolate","pow10","powp","base","exp","logp","log10","log2","reflect","logs","pows","raise","quantile_quantile","thresholds","quantiles","quantize_quantize","threshold_threshold","interval_t0","interval_t1","newInterval","floori","offseti","date","offset","previous","millisecond_millisecond","src_millisecond","durationMinute","durationWeek","second_second","getUTCSeconds","src_second","minute_minute","src_minute","hour_hour","getTimezoneOffset","src_hour","day_day","setHours","setDate","src_day","weekday","sunday","monday","tuesday","wednesday","thursday","friday","saturday","month_month","setMonth","src_month","year_year","setFullYear","src_year","utcMinute","setUTCSeconds","getUTCMinutes","utcHour","setUTCMinutes","getUTCHours","utcDay","setUTCHours","setUTCDate","getUTCDate","src_utcDay","utcWeekday","getUTCDay","utcSunday","utcMonday","utcTuesday","utcWednesday","utcThursday","utcFriday","utcSaturday","utcMonth","setUTCMonth","getUTCMonth","getUTCFullYear","utcYear","setUTCFullYear","src_utcYear","localDate","utcDate","UTC","newYear","src_defaultLocale_locale","timeFormat","utcFormat","utcParse","pads","-","0","numberRe","percentRe","requoteRe","locale_pad","string","requote","formatRe","names","formatLookup","parseWeekdayNumberSunday","parseWeekdayNumberMonday","parseWeekNumberSunday","parseWeekNumberISO","parseWeekNumberMonday","parseFullYear","parseYear","parseZone","parseMonthNumber","parseDayOfMonth","parseDayOfYear","parseHour24","parseMinutes","parseSeconds","parseMilliseconds","parseMicroseconds","parseLiteralPercent","parseUnixTimestamp","parseUnixTimestampSeconds","formatDayOfMonth","formatHour24","formatHour12","formatDayOfYear","formatMilliseconds","formatMicroseconds","formatMonthNumber","formatMinutes","formatSeconds","formatWeekdayNumberMonday","day","formatWeekNumberSunday","formatWeekNumberISO","formatWeekdayNumberSunday","formatWeekNumberMonday","locale_formatYear","formatFullYear","formatZone","formatUTCDayOfMonth","formatUTCHour24","formatUTCHour12","formatUTCDayOfYear","formatUTCMilliseconds","getUTCMilliseconds","formatUTCMicroseconds","formatUTCMonthNumber","formatUTCMinutes","formatUTCSeconds","formatUTCWeekdayNumberMonday","dow","formatUTCWeekNumberSunday","formatUTCWeekNumberISO","formatUTCWeekdayNumberSunday","formatUTCWeekNumberMonday","formatUTCYear","formatUTCFullYear","formatUTCZone","formatLiteralPercent","formatUnixTimestamp","formatUnixTimestampSeconds","defaultLocale_defaultLocale","formatLocale","locale_dateTime","dateTime","locale_date","locale_time","time","locale_periods","periods","locale_weekdays","days","locale_shortWeekdays","shortDays","locale_months","months","locale_shortMonths","shortMonths","periodRe","periodLookup","weekdayRe","weekdayLookup","shortWeekdayRe","shortWeekdayLookup","monthRe","monthLookup","shortMonthRe","shortMonthLookup","formats","formatShortWeekday","formatWeekday","formatShortMonth","formatMonth","formatPeriod","utcFormats","formatUTCShortWeekday","formatUTCWeekday","formatUTCShortMonth","formatUTCMonth","formatUTCPeriod","parses","parseShortWeekday","parseWeekday","parseShortMonth","parseMonth","parseLocaleDateTime","parseSpecifier","parsePeriod","parseLocaleDate","parseLocaleTime","pad","newParse","newDate","week","toISOString","time_durationSecond","time_durationMinute","time_durationHour","time_durationDay","time_durationWeek","durationMonth","durationYear","time_date","time_number","calendar","year","month","hour","minute","second","millisecond","formatMillisecond","formatSecond","formatMinute","formatHour","formatDay","formatWeek","formatYear","tickIntervals","tickInterval","t0","src_time","src_colors","category10","category20b","category20","ramp","sequential","interpolator","d3_scale_chromatic_src_colors","Accent","Dark2","Paired","Pastel1","Pastel2","Set1","Set2","Set3","src_ramp","scheme","BrBG_scheme","BrBG","PRGn_scheme","PRGn","PiYG_scheme","PiYG","PuOr","RdBu","RdGy","RdYlBu","RdYlGn","Spectral","BuGn","BuPu","GnBu","OrRd","PuBuGn","PuBu","PuRd","RdPu","YlGnBu","YlGn","YlOrBr","YlOrRd","Blues_scheme","Blues","Greens","Greys","Purples","Reds","Oranges","sequential_multi_cubehelix","rainbow_warm","rainbow_cool","rainbow_c","sequential_multi_rainbow","ts","viridis_ramp","sequential_multi_viridis","viridis_magma","viridis_inferno","viridis_plasma","reserved_fields","ROW_ID","common_props","ACTION_INF","ON_LAYER_DRAW","src_array_slice","d3_axis_src_identity","axis_top","axis_right","axis_bottom","axis_left","epsilon","entering","__axis","axis_axis","orient","tickArguments","tickValues","tickTransform","tickSizeInner","tickSizeOuter","tickPadding","axis","spacing","range0","range1","axis_center","axis_number","selection","selectAll","tick","tickExit","exit","tickEnter","enter","attr","line","merge","insert","transition","getAttribute","tickSize","pi","tau","tauEpsilon","Path","_x0","_y0","_x1","_y1","path_path","moveTo","closePath","lineTo","quadraticCurveTo","y1","bezierCurveTo","x2","y2","arcTo","y0","x21","y21","x01","y01","l01_2","x20","y20","l21_2","l20_2","l21","l01","acos","t01","t21","arc","a0","a1","ccw","dx","dy","cw","da","rect","src_path","d3_shape_src_constant","constant","math_max","math_min","math_sqrt","math_epsilon","math_pi","halfPi","math_tau","asin","arcInnerRadius","innerRadius","arcOuterRadius","outerRadius","arcStartAngle","startAngle","arcEndAngle","endAngle","arcPadAngle","padAngle","cornerTangents","rc","ox","oy","x11","y11","x10","y10","x00","y00","d2","cx0","cy0","cx1","cy1","dx0","dy0","dx1","dy1","cx","cy","Linear","areaStart","_line","areaEnd","lineStart","_point","lineEnd","point","curve_linear","point_x","point_y","src_line","defined","curve","buffer","defined0","src_area","area","x0z","y0z","arealine","lineX0","lineY0","lineY1","lineX1","src_descending","d3_shape_src_identity","curveRadial","Radial","_curve","radial","d3_shape_src_array_slice","symbol_circle","draw","symbol_cross","tan30","tan30_2","diamond","kr","kx","ky","star","square","sqrt3","triangle","wye_s","wye_k","wye_a","wye","noop","that","Basis","BasisClosed","_x2","_x3","_x4","_y2","_y3","_y4","BasisOpen","Bundle","beta","_basis","_beta","_x","_y","custom","bundle","cardinal_point","_k","Cardinal","tension","cardinal","CardinalClosed","_x5","_y5","CardinalOpen","catmullRom_point","_l01_a","_l01_2a","_l12_a","_l12_2a","_l23_a","_l23_2a","CatmullRom","alpha","_alpha","x23","y23","curve_catmullRom","catmullRom","CatmullRomClosed","CatmullRomOpen","LinearClosed","monotone_sign","slope3","h0","h1","s0","s1","slope2","monotone_point","MonotoneX","MonotoneY","ReflectContext","Natural","controlPoints","_t0","px","py","Step","_t","curve_step","stepBefore","stepAfter","none","series","order_none","stackValue","order_ascending","sums","ascending_sum","cubicInOut","polyIn","polyOut","polyInOut","b1","b2","b3","b4","b5","b6","b7","b8","b9","b0","bounceOut","backIn","overshoot","backOut","backInOut","elastic_tau","elasticOut","elasticIn","amplitude","period","d3_voronoi_src_constant","elasticInOut","src_point_x","src_point_y","RedBlackTree","RedBlackNode","RedBlackRotateLeft","tree","RedBlackRotateRight","RedBlackFirst","after","grandpa","uncle","sibling","src_RedBlackTree","createEdge","edge","Diagram_edges","setEdgeEnd","Diagram_cells","halfedges","createBorderEdge","vertex","clipEdge","ax","ay","connectEdge","fm","fb","lx","ly","rx","ry","fx","fy","cellHalfedgeAngle","cell","site","va","vb","cellHalfedgeStart","cellHalfedgeEnd","firstCircle","circlePool","attachCircle","lArc","rArc","lSite","cSite","rSite","bx","by","Diagram_epsilon2","ha","hc","circle","Circle","before","circles","detachCircle","beachPool","createBeach","beach","Beach","detachBeach","beaches","removeBeach","disappearing","Diagram_epsilon","iArc","nArcs","addBeach","dxl","dxr","directrix","leftBreakPoint","rightBreakPoint","createCell","newArc","hb","rfocx","rfocy","pby2","lfocx","lfocy","plby2","hl","aby2","triangleArea","lexicographic","Diagram","sites","extent","sortCellHalfedges","clipEdges","clipCells","iCell","iHalfedge","nHalfedges","startX","startY","endX","endY","nCells","cover","dc","v00","v01","v11","v10","cells","polygons","polygon","triangles","e1","links","radius","_found","vx","vy","src_voronoi","voronoi","HTMLElement","isSimpleObject","common_utils_typeof","getUniqueId","sanitizeIP","typeObj","nonExistentKeys","checkExistence","getMax","_toConsumableArray","getMin","common_utils_getDomainFromData","getDomainFromData","domArr","dist_datamodel","firstMin","secondMin","firstMax","secondMax","symbolFns","cross","easeFns","cubic","bounce","src_linear_linear","elastic","back","poly","circleInOut","common_utils_getClosestIndexOf","getQualifiedClassName","cancelAnimationFrame","cls","defaultValue","param","objectIterator","common_utils_Voronoi","Voronoi","_classCallCheck","_voronoi","_voronoiFn","common_utils_Store","Store","hyperdis_default","_listeners","serialize","propName","propNames","callBack","instantCall","props","on","calculatedProp","intSanitizer","val","common_utils_transactor","transactor","holder","conf","_loop","_defineProperty","_len","_key","compareTo","paramsLen","prevVal","spreadParams","sanitization","typeCheck","typeExpected","preset","oldValues","generateGetterSetters","propInfo","typeChecker","common_utils_isEqual","isEqual","oldVal","newVal","arraysEqual","arr1","arr2","is","ERROR_MSG","INTERFACE_IMPL","mergeRecursive","sink","common_utils_interpolator","common_utils_numberInterpolator","numberInterpolator","common_utils_piecewiseInterpolator","piecewiseInterpolator","rgbToHsv","detectColor","col","getDataModelFromRange","dataModel","selFields","selFn","common_utils_getDataModelFromIdentifiers","getDataModelFromIdentifiers","identifiers","filteredDataModel","fieldsConfig","dataArr","filteredSchema","include","propField","idx","common_utils_registerListeners","registerListeners","listenerMap","propListenerMap","mapObj","propType","listenerFn","listener","isValidValue","getObjProp","_len2","_key2","retObj","common_utils_getSymbol","getSymbol","src_symbol","stackOrders","_stackOrders","stackOffsets","yp","yn","_stackOffsets","s2","si","sij0","s3","sk","common_utils_stack","stack","oz","kz","sz","sij","ki","src_stack","pathInterpolators","curveLinear","curveStepAfter","curveStepBefore","curveStep","curveCatmullRom","Symbols","axisLeft","axisRight","axisTop","axisBottom","pie","arcs","pa","cornerRadius","padRadius","a01","a11","a00","a10","da0","da1","ap","rp","rc0","rc1","p0","p1","oc","intersect","x3","y3","x32","y32","kc","lc","centroid","Scales","getSmallestDiff","points","xhtml","namespaces","xlink","xml","xmlns","namespace","space","local","creator","fullname","creatorFixed","ownerDocument","creatorInherit","uri","namespaceURI","selector_none","src_selector","selector","querySelector","selectorAll_empty","selectorAll","querySelectorAll","matcher","matches","matcher_element","vendorMatches","webkitMatchesSelector","msMatchesSelector","mozMatchesSelector","oMatchesSelector","src_matcher","sparse","EnterNode","datum","_next","__data__","child","keyPrefix","bindIndex","groupLength","dataLength","bindKey","nodeByKeyValue","keyValues","sort_ascending","src_window","styleValue","classArray","classList","ClassList","_node","_names","classedAdd","list","classedRemove","contains","textRemove","htmlRemove","raise_raise","nextSibling","lower","previousSibling","firstChild","constantNull","remove_remove","selection_cloneShallow","cloneNode","selection_cloneDeep","filterEvents","on_event","mouseenter","mouseleave","filterContextListener","contextListener","event","related","relatedTarget","compareDocumentPosition","event1","event0","onRemove","typename","__on","removeEventListener","capture","onAdd","wrap","addEventListener","customEvent","args","sourceEvent","dispatchEvent","CustomEvent","createEvent","initEvent","bubbles","cancelable","detail","selection_root","Selection","groups","parents","_groups","_parents","selection_selection","subgroups","subnode","subgroup","d3_selection_src_constant","enterGroup","updateGroup","_enter","_exit","groups0","groups1","m0","merges","group0","group1","compareNode","sortgroups","sortgroup","callback","nodes","getAttributeNS","attrRemoveNS","removeAttributeNS","attrRemove","removeAttribute","attrFunctionNS","attrFunction","attrConstantNS","attrConstant","priority","styleRemove","removeProperty","styleFunction","setProperty","styleConstant","propertyRemove","propertyFunction","propertyConstant","classed","classedFunction","classedTrue","classedFalse","textFunction","textConstant","html","htmlFunction","htmlConstant","deep","typenames","parseTypenames","dispatch","dispatchFunction","dispatchConstant","src_selection","src_select","nextId","Local","current","src_point","ownerSVGElement","createSVGPoint","clientX","clientY","matrixTransform","getScreenCTM","inverse","getBoundingClientRect","clientLeft","clientTop","mouse","changedTouches","src_touch","touches","identifier","touch","dispatch_noop","dispatch_dispatch","Dispatch","dispatch_get","dispatch_set","dispatch_parseTypenames","types","src_dispatch","nopropagation","stopImmediatePropagation","noevent","preventDefault","nodrag","view","__noselect","MozUserSelect","d3_drag_src_constant","DragEvent","subject","active","defaultFilter","button","defaultContainer","defaultSubject","defaultTouchable","taskHead","taskTail","src_drag","mousedownx","mousedowny","mousemoving","touchending","touchable","gestures","clickDistance2","drag","mousedowned","touchstarted","touchmoved","touchended","gesture","beforestart","mousemoved","mouseupped","yesdrag","noclick","clearTimeout","sublisteners","clickDistance","timer_frame","timeout","timer_interval","pokeDelay","clockLast","clockNow","clockSkew","clock","performance","timer_typeof","now","setFrame","clearNow","Timer","_call","_time","timer","delay","restart","wake","timerFlush","nap","sleep","poke","clearInterval","setInterval","src_timeout","elapsed","emptyOn","emptyTween","CREATED","SCHEDULED","STARTING","STARTED","RUNNING","ENDING","ENDED","transition_schedule","timing","schedules","__transition","schedule_create","self","tween","state","duration","ease","schedule","schedule_get","schedule_set","tweenValue","_id","transition_interpolate","selection_Selection","transition_id","Transition","_name","newId","selection_prototype","src_transition_transition","inherit","id0","id1","onFunction","on0","on1","sit","on_start","attrTween","attr_attrFunctionNS","value00","value10","interpolate0","value1","attr_attrFunction","attr_attrRemoveNS","attr_attrRemove","attr_attrConstantNS","attr_attrConstant","attrTweenNS","styleTween","style_styleRemove","styleRemoveEnd","style_styleFunction","style_styleConstant","text_textFunction","text_textConstant","removeFunction","tweenRemove","tween0","tween1","tweenFunction","delayFunction","delayConstant","durationFunction","durationConstant","easeConstant","defaultTiming","transition_inherit","interrupt","renderer_utils_selectElement","selectElement","element","makeElement","elemType","callbacks","keyFn","SVGElement","selectorVal","selectorType","actualSelector","enterSel","mergeSel","exitSel","_len3","_key3","applyStyle","setElementAttrs","attrs","renderer_utils_setAttrs","setAttrs","renderer_utils_setStyles","setStyles","styles","renderer_utils_createElements","createElements","sel","renderer_utils_getClientPoint","getClientPoint","pos","clientPoint","renderer_utils_getEvent","getEvent","renderer_utils_getD3Drag","getD3Drag","renderer_utils_getSmartComputedStyle","getSmartComputedStyle","css","textEl","mandatoryStyle","fill-opacity","renderer_utils_typeof","computedStyle","styleForSmartLabel","hasTouch","DataSystem_selection","selection_classCallCheck","_data","_idMap","_mode","_enterdata","_exitdata","_this","newData","idGetter","_this2","_idGetter","tempMap","purgedIds","purged","temp","_this3","item","_this4","_this5","_this6","DataObject","data_object_classCallCheck","events","EVENT_LIST","composition","event_list","lifecycle_manager_resolver","resolveFn","notification","hasOwn","src_lifecycle_manager","LifeCycleManager","lifecycle_manager_classCallCheck","_eventList","_promises","_notifiers","_lifeCycles","_unreleasedLifeCycles","_boot","acc","_preparePromises","eventName","Promise","_makeNotifierPromise","formalName","client","_releasePromisesFromCache","_notify","stage","_resolvePromise","promise","retrieve","_callLifeCycleCallback","_cachePromise","_resetTargetPromise","lifeCycles","DRAG","HOVER","SELECTIONDRAG","CLICK","LONGTOUCH","TOUCHDRAG","ALL_ACTIONS","SELECTION_NEW_ENTRY","SELECTION_NEW_EXIT","SELECTION_NULL","SELECTION_OLD_ENTRY","SELECTION_OLD_EXIT","selection_set","SelectionSet","completeSet","_volatile","selection_set_classCallCheck","_completeSetCount","_lockedSelection","_resetted","ids","entrySet","exitSet","lockedSel","addSet","removeSet","updateSet","changeSideEffectAvailability","toEnable","sideEffects","change","enable","disable","getMergedSet","helper_toConsumableArray","conditionsMap","newEntry","oldEntry","mergedEnter","newExit","oldExit","mergedExit","complete","getSetInfo","selectionSet","propagationData","resetted","getModelFromSet","condition","src_firebolt","Firebolt","actions","behaviourEffectMap","firebolt_classCallCheck","_sideEffectDefinitions","_sideEffects","_propagationInf","_actions","behavioural","physical","_selectionSet","_volatileSelectionSet","_propagationFields","_sourceSideEffects","selectionBox","_propagationBehaviourMap","_sourceBehaviours","_actionBehaviourMap","_config","_behaviourEffectMap","_entryExitSet","_actionHistory","_queuedSideEffects","_mappedActions","mapSideEffects","registerBehaviouralActions","registerSideEffects","registerPhysicalBehaviouralMap","physicalBehaviouralMap","registerPhysicalActions","sideEffectConf","behEffectMap","preventDefaultActions","effectNames","effects","firebolt_toConsumableArray","behaviours","initializeBehaviouralActions","dispatchableBehaviours","Action","prepareSelectionSets","sideEffectStore","actionHistory","queuedSideEffects","sideEffect","combinedSet","unionSets","behaviour","entryExitSet","existingModel","helper_unionSets","effect","firebolt_typeof","sideEffectInstance","isEnabled","mutates","dispatchSideEffect","propagationInfo","propagate","getSideEffects","propagationSelectionSet","getPropagationSelectionSet","shouldApplySideEffects","sourceSelectionSet","applicableSideEffects","getApplicableSideEffects","applySideEffects","physicalAction","actionBehaviourMap","behaviourMap","unsubscribe","onDataModelPropagation","propValue","dispatchBehaviour","uniqueIds","behaviouralActions","volatileSelectionSet","sideEffectDefinitions","initializeSideEffects","sideEffectsMap","SideEffect","helper_initializeSideEffects","initedActions","initializePhysicalActions","physicalActions","initedPhysicalActions","mappedActions","getDefaultTargetContainer","keyName","bindActionWithBehaviour","targets","behaviourList","mount","propagationInf","xFields","yFields","xMeasures","yMeasures","filterPropagationModel","propModel","measures","_propModel$getData","filteredModel","fieldMap","row","common_utils_filterPropagationModel","getFullData","propagationSource","applicableSelectionSets","generic","GenericBehaviour","firebolt","generic_classCallCheck","_enabled","selectionSets","getSelectionSets","_firebolt$getAddSetFr","getAddSetFromCriteria","getPropagationInf","setSelectionSet","getEntryExitSet","_selectionSet$getSets","getSets","setConfig","isSourceFieldPresent","getSourceFields","getSchema","behavioural_volatile","reset","existingAddSet","updateExit","getCompleteSet","BRUSH","HIGHLIGHT","TOOLTIP","FILTER","SELECT","highlight","brush","behavioural_filter","updateEntry","mergedExitSet","completeSetCount","behavioural_select","drag_action_config","getDragActionConfig","sourceInfo","axes","xAxis","yAxis","axisFields","xField","getMembers","yField","xFieldType","yFieldType","dimensions","stPos","startPos","endPos","dragDim","isXDimension","isYDimension","xRange","yRange","selectedDomains","rangeObj","xdom","ydom","snap","getNearestRange","drag_event_attachDragEvent","attachDragEvent","targetEl","drawingInf","d3Drag","touchStart","getDrawingContext","getSourceInfo","beh","dragEnd","physical_hover","hover","interaction","tooltip","svgContainer","nearestPoint","getNearestPoint","getAllPoints","showInPosition","helpers_generatePayloadFromEvent","generatePayloadFromEvent","physical_click","click","physical_defineProperty","_physicalActions","longtouch","touchEnd","touchdrag","side_effects_generic","GenericSideEffect","side_effects_generic_classCallCheck","_strategy","_strategies","defaultConfig","surrogate","interactionType","layers","layer","interactive","applyInteractionStyle","spawnable","_drawingContext","helper_changeVisibility","changeVisibility","sideEffectGroup","visible","defClassName","classPrefix","selection_box","boxConf","box","drawingContext","mountPoint","unitWidth","unitHeight","selectionGroupClassName","hide","sourceInf","_getBoxDimensionsFrom","getBoxDimensionsFromPayload","direction","xDim","yDim","xLinear","yLinear","xCriteria","yCriteria","bandScale","x1Val","x2Val","x1DomainIndex","x2DomainIndex","_sort","_sort2","helper_slicedToArray","getScaleValue","getUnitWidth","y1Val","y2Val","y1DomainIndex","y2DomainIndex","_sort3","_sort4","_xDim","_yDim","dimension","show","selectionBoxDrag","onDrag","selection_box_drag_selectionBoxDrag","boxClassName","INITIAL_STYLE","default_config_defaultConfig","connectorClassName","margin","content","iconContainerSize","iconScale","iconShape","iconColor","rowMargin","separator","parentClassName","arrow","disabled","helper_getArrowPos","getArrowPos","dim","measurement","arrowPos","boxHeight","boxWidth","arrowWidth","plotBottom","boxBottom","plotRight","boxRight","helper_placeArrow","placeArrow","tooltipArrow","_tooltipArrow","tooltipBackground","_tooltipBackground","arrowConf","_arrowOrientation","timeFormats","timeDurations","strategy_defaultTooltipFormatters","defaultTooltipFormatters","_formatters","strategy_defineProperty","formatters","nearestInterval","getNearestInterval","strategy_getNearestInterval","strategy_buildTooltipData","buildTooltipData","fieldValues","dataObj","fieldspace","dimensionMeasureMap","detailFields","containsDetailField","dataLen","getRowContent","formattedValue","measureIndex","formatterFn","uniqueVals","strategy_toConsumableArray","colorAxis","shapeAxis","shape","sizeAxis","isRetinalField","associatedMeasures","icon","getColor","getShape","getSize","measure","margin-left","displayFormat","getTabularData","timeDiffs","rows","fieldObj","strategy_getTabularData","allMeasures","strategy_strategy","DEFAULT_STRATEGY","src_content","Content","content_classCallCheck","_model","_formatter","strategy","ctx","_mount","table","tbody","margin-right","el","src_tooltip","Tooltip","htmlContainer","tooltip_classCallCheck","connectorContainer","tooltipConf","contentClass","_tooltipContainer","_contentContainer","_contents","_tooltipConnectorContainer","qualifiedClassName","addClass","defConf","contentConfig","reorderContainers","contentConf","render","_target","repositionArrow","arrowDisabled","arrowOrient","outsidePlot","connector","_offset","orientation","_extent","arrowSize","topSpace","dimX","rightSpace","leftSpace","positionTop","positionRight","positionLeft","positionHorizontal","positionVertical","_position","_arrowPos","strategies_strategies","showSelectedItems","dm","aggregatedModel","fieldsConf","measureNames","strategies_toConsumableArray","side_effects_tooltip","side_effects_tooltip_classCallCheck","tooltip_possibleConstructorReturn","_tooltips","totalHeight","totalWidth","isEmpty","tooltips","boundBox","dataModels","fragmented","showVertically","tooltipPos","boxes","tooltip_toConsumableArray","targetFields","sourceFields","indices","plotDimensions","getPlotPointsFromIdentifiers","plotDim","dataTransform","layoutContainer","layoutBoundBox","unitBoundBox","tooltipInst","timeDiffsByField","positionRelativeTo","tooltipBoundBox","getContents","spaceOutBoxes","spaceOutIfOverlap","firstBox","secondBox","opposite","bottom","crossline","bandWidth","bandClass","lineClass","elemData","fieldIndex","axisIndex","fieldInst","xOffset","plotWidth","crossline_toConsumableArray","getPlotSpan","getPlotPadding","startPx","endPx","dataPoint","parentGroup","CLASSPREFIX","strategy_strategies","fade","fadeFn","focus","plot_highlighter","PlotHighlighter","plot_highlighter_classCallCheck","plot_highlighter_possibleConstructorReturn","side_effects_filter","entryModel","clearCaching","resetData","enableCaching","side_effects_anchors","AnchorEffect","anchors_classCallCheck","anchors_possibleConstructorReturn","_layers","addAnchorLayers","shouldDrawAnchors","encodingFieldsInf","layerObj","instances","addLayer","alias","mark","encoding","colorField","sizeField","defaultSizeValue","getTransitionConfig","calculateDomain","linkedLayer","elems","_linkedLayer$getTrans","getTransformedDataFromIdentifiers","_linkedLayer$getTrans2","anchors_slicedToArray","transformedData","transformedDataModel","datamodel_default","persistent_anchors","brush_anchors","behaviour_effect_map_behaviourEffectMap","behaviour_effect_map_defineProperty","STACK","ANGLE","RADIUS","SIZE","COLOR","SHAPE","ENCODING","X0","Y0","area_default_config_defaultConfig","nearestPointThreshold","strokeOpacity","connectNullData","simple_layer","DATA_UPDATED","axis_orientation_BOTTOM","axis_orientation_TOP","axis_orientation_LEFT","axis_orientation_RIGHT","axisOrientationMap","axis_orientation_defineProperty","_axisOrientationMap","LINEAR","BAND","TIME","scale_type_COLOR","ORDINAL","QUANTIZE","QUANTILE","LOG","POW","scale_type_IDENTITY","SEQUENTIAL","THRESHOLD","CONTINOUS","constants_SEQUENTIAL","constants_ORDINAL","constants_LINEAR","constants_QUANTIZE","HIDDEN","scaleLinear","scales_namespaceObject","scaleThreshold","scaleLog","scalePow","scaleIdentity","scaleOrdinal","scaleSequential","scaleQuantize","scaleQuantile","scaleBand","scaleTime","scaleMap","scale_creator_defineProperty","_scaleMap","scale_creator_createScale","scaleFactory","cartesian_axis_default_config_defaultConfig","axisName","axisNamePadding","src_enums_constants_CLASSPREFIX","fixedBaseline","labels","rotation","smartTicks","numberOfTicks","showAxisName","showInnerTicks","showOuterTicks","yOffset","axis_renderer_rotateAxis","rotateAxis","instance","tickText","labelManager","getTickSize","yShift","xShift","tickFormatter","tickLabelDim","quadrant","rotationNormalizer","angleToRadian","angle","axis_renderer_changeTickOrientation","changeTickOrientation","selectContainer","axisInstance","_smartTicks","isSmartTicks","axis_renderer_setFixedBaseline","setFixedBaseline","axis_renderer_setAxisNamePos","setAxisNamePos","textNode","axisNameHeight","labelOffset","availableSpace","getTickLabelInfo","largestLabel","labelProps","smartTick","axisTickLabels","allLabelLengths","_context$config","labelFunc","_tickLabelStyle","originalLabel","formattedLabel","largestLabelDim","helper_setOffset","setOffset","logicalSpace","helper_adjustRange","adjustRange","getAxisOffset","timeDiff","avWidth","bars","registerChangeListeners","_domainLock","getHorizontalAxisSpace","axisDimensions","axisLabelDim","axisDimHeight","tickDimHeight","tickDimWidth","minTickDiff","getMinTickDifference","cartesian_axis_helper_toConsumableArray","_minTickDistance","getVerticalAxisSpace","_ref2","PROPS","_rotationLock","createAxis","commit","simple_axis","SimpleAxis","simple_axis_classCallCheck","_dependencies","_range","_domain","_axisDimensions","defCon","simpleConfig","bodyElem","_axisNameStyle","_scale","createScale","_axis","setTickConfig","axisClass","getTickFormatter","labelWidth","domainVal","computeAxisDimensions","_context$config2","_getTickLabelInfo","labelHeight","setRotationConfig","calculateContinousSpace","getAxisDimensions","axisDimWidth","_getHorizontalAxisSpa2","_getVerticalAxisSpace2","helper_calculateContinousSpace","currentDomain","cachedDomain","updateDomainBounds","registerEvent","renderAxis","setTickValues","axisNameSpace","axisNameWidth","unsubscribeAll","interpolators_linear","interpolators_log","interpolators_pow","interpolatorMap","continous_axis_defineProperty","_interpolatorMap","continous_axis","ContinousAxis","continous_axis_classCallCheck","continous_axis_possibleConstructorReturn","InterpolatorCls","_interpolator","isOffset","_config3","labelSpace","axisHeight","getLogicalSpace","axisWidth","getTickValues","_config5","getNumberOfTicks","labelDim","tickLength","numberOfValues","_config6","_axisDimensions$large","band_axis","_config2","calculateBandSpace","largestDimHeight","largestDimWidth","_getHorizontalAxisSpa","_getVerticalAxisSpace","helper_calculateBandSpace","availSpace","smartWidth","time_axis","TimeAxis","time_axis_classCallCheck","time_axis_possibleConstructorReturn","_minDiff","time_axis_get","_getAxisDimensions","x11Colors","Pink","LightPink","HotPink","DeepPink","PaleVioletRed","MediumVioletRed","LightSalmon","Salmon","DarkSalmon","LightCoral","IndianRed","Crimson","FireBrick","DarkRed","Red","OrangeRed","Tomato","Coral","DarkOrange","Orange","Gold","Yellow","LightYellow","LemonChiffon","LightGoldenrodYellow","PapayaWhip","Moccasin","PeachPuff","PaleGoldenrod","Khaki","DarkKhaki","Cornsilk","BlanchedAlmond","Bisque","NavajoWhite","Wheat","BurlyWood","Tan","RosyBrown","SandyBrown","Goldenrod","DarkGoldenrod","Peru","Chocolate","SaddleBrown","Sienna","Brown","Maroon","DarkOliveGreen","Olive","OliveDrab","YellowGreen","LimeGreen","Lime","LawnGreen","Chartreuse","GreenYellow","SpringGreen","MediumSpringGreen","LightGreen","PaleGreen","DarkSeaGreen","MediumSeaGreen","SeaGreen","ForestGreen","Green","DarkGreen","MediumAquamarine","Aqua","Cyan","LightCyan","PaleTurquoise","Aquamarine","Turquoise","MediumTurquoise","DarkTurquoise","LightSeaGreen","CadetBlue","DarkCyan","Teal","LightSteelBlue","PowderBlue","LightBlue","SkyBlue","LightSkyBlue","DeepSkyBlue","DodgerBlue","CornflowerBlue","SteelBlue","RoyalBlue","Blue","MediumBlue","DarkBlue","Navy","MidnightBlue","Lavender","Thistle","Plum","Violet","Orchid","Fuchsia","Magenta","MediumOrchid","MediumPurple","BlueViolet","DarkViolet","DarkOrchid","DarkMagenta","Purple","Indigo","DarkSlateBlue","SlateBlue","MediumSlateBlue","White","Snow","Honeydew","MintCream","Azure","AliceBlue","GhostWhite","WhiteSmoke","Seashell","Beige","OldLace","FloralWhite","Ivory","AntiqueWhite","Linen","LavenderBlush","MistyRose","Gainsboro","LightGray","Silver","DarkGrey","Grey","DimGrey","LightSlateGrey","SlateGrey","DarkSlateGrey","Black","palette","DEFAULT_GRADIENT_COLOR","DEFAULT_CONFIG","props_getHslString","getHslString","hslArr","convertToXllString","baseString","props_getActualHslColor","getActualHslColor","paletteColor","hexToHsv","props_toConsumableArray","props_PROPS","oldConfig","newConfig","uniqueValues","color_strategy_getStops","getStops","newStops","color_strategy_toConsumableArray","color_strategy_rangeStops","rangeStops","newStopsLength","newRange","hslInterpolator","common_utils_hslInterpolator","indexedDomain","scaleDomain","indexedDomainMeasure","normalDomain","color_strategy_steppedDomain","steppedDomain","_getStops","color_strategy_continousSteppedDomain","continousSteppedDomain","_getStops2","uniqueRange","domainValue","indexedRange","normalRange","strategyGetter","domainType","rangeType","schemeType","strategies","color_strategy_defineProperty","domainRange","color_strategy_strategies","color_axis","ColorAxis","color_axis_classCallCheck","_domainType","_rangeType","_schemeType","getSchemeType","_colorStrategy","setColorStrategy","updateDomain","colorStrategy","getScheme","color_schemes_namespaceObject","hslColorArray","getRawColor","color_axis_toConsumableArray","scaleInfo","domainRangeFn","transformationArr","newH","newS","newL","newA","defaults_DEFAULT_CONFIG","size_strategy_strategies","size_strategy_defineProperty","pieceWiseRange","numVal","size_strategy_toConsumableArray","intervals","newIntervals","discreteRange","size_axis_props_PROPS","size_axis","SizeAxis","size_axis_classCallCheck","_sizeStrategy","setStrategy","size_strategy_strategyGetter","domainInfo","domainFn","shape_axis_defaults_DEFAULT_CONFIG","generator","shape_axis_props_PROPS","shape_axis","ShapeAxis","shape_axis_classCallCheck","_generatedShapes","shapeType","shapeGenerator","generatorFn","generatedShapes","DATA_TYPES","group_transform","data_type_scale_map_defineProperty","dataTypeScaleMap","_dataTypeScaleMap","groupByIndices","nestCollection","nestFn","common_utils_nestCollection","transformMap","transform_factory_defineProperty","identityTransform","_transformMap","uniqueField","valueField","normalizedData","normalizeData","groupedData","uniqueFieldIndex","valueFieldIndex","seriesKeyIndex","seriesKeys","fieldNames","tuples","rowObj","_tuple","seriesKey","newArr","stack_transform_normalizeData","orderBy","orderIndex","groupByIndex","localeCompare","stackData","seriesData","transform_factory","transformFactory","helpers_BAND","scale_type_namespaceObject","getLayerColor","colorEncoding","colorFieldIndex","rawColor","transfromColor","styleType","intensity","stateColor","originalColor","fillColorInfo","transformColor","helpers_applyInteractionStyle","interactionStyles","elements","getPlotElementsFromSet","_d$meta","colorTransform","_ref3","_ref4","helpers_slicedToArray","helpers_getAxesScales","getAxesScales","_map","_map2","_map3","_map4","xScale","yScale","getIndividualClassName","individualClassName","classNameStr","attachDataToVoronoi","_ref5","helpers_toConsumableArray","helpers_updateStyle","updateStyle","positionPoints","positioner","encodingTransform","helpers_getPlotMeasurement","getPlotMeasurement","dimensionalValues","fieldInfo","transformType","_bandScale","span","groupSpan","offsetValues","actualGroupWidth","dataProps","innerPadding","getGroupSpan","isAxisBandScale","axisPadding","groupPadding","listener_map_listenerMap","fetch","dataModelValue","configValue","encodingValue","getEncodingFieldInf","_map5","_map6","x0Field","y0Field","shapeField","_map7","_map8","_map9","_map10","xFieldSubType","yFieldSubType","_map11","_map12","xFieldIndex","yFieldIndex","x0FieldIndex","y0FieldIndex","helpers_getEncodingFieldInf","getValidTransform","layerConfig","encodingFieldInf","groupByField","groupByFieldMeasure","helpers_getValidTransform","getTransformedData","transformedDataValue","getNormalizedData","normalizedDataValue","calculateDomainFromData","dataUpdated","throwback","defaultOptions","default_options_defineProperty","newConf","defaultPolicy","_defaultOptions","_cacheEnabled","_cachedData","base_layer","BaseLayer","base_layer_classCallCheck","base_layer_possibleConstructorReturn","base_layer_defineProperty","DATA","_points","_measurement","_store","_encodingFieldsInf","_encodingTransform","_alias","transformData","helpers_transformData","domains","yEnc","xEnc","helpers_calculateDomainFromData","encodingType","transformedDataArr","fieldsLen","pointObj","tuple","helpers_getNormalizedData","_transformType","pointMap","_pointMap","_dataProps","base_layer_slicedToArray","xMeasure","yMeasure","_identifiers$","_identifiers$2","xMeasureIndex","yMeasureIndex","getAllAttrs","filteredPoints","base_layer_toConsumableArray","sizeVal","_identifiers$getData","identifierData","identifierSchema","_encodingFieldsInf2","enc","tupleArr","transformedVal","userConf","renderer_line","renderer_drawLine","drawLine","curveInterpolatorFn","linepath","line_default_config_defaultConfig","line_line","LineLayer","line_classCallCheck","line_possibleConstructorReturn","isXDim","isYDim","xPx","yPx","_getLayerColor","stroke","rowId","cachePoint","seriesClassName","containerSelection","animateGroup","groupTransition","groupAnimateStyle","helpers_animateGroup","stroke-opacity","getPathStyle","translatePoints","colorValFn","colorVal","getDrawFn","searchRadius","_point$data$data","getIdentifiersFromData","layerId","renderer_area","renderer","drawArea","easeEffect","renderer_slicedToArray","enterAreaPath","updateAreaPath","selectionEnter","area_area","area_get","_getAxesScales","classNameFn","y0Px","arc_default_config_defaultConfig","minOuterRadius","stroke-width","stroke-linejoin","innerRadiusFixer","states","enums_constants_CLASSPREFIX","fadeout","selected","arc_pie","arc_arc","layers_arc_arc","ArcLayer","arc_classCallCheck","arc_possibleConstructorReturn","_prevPieData","pieData","pieIndex","prevData","_getFieldIndices","getFieldIndices","arc_helper_slicedToArray","angleField","radiusField","angleIndex","sizeIndex","radiusIndex","colorIndex","arc_helper_getFieldIndices","dataVal","uid","outerRadiusValue","angleVal","_previousInfo","getPreviousPoint","currIndex","prevArc","nextArc","_dataPoint$datum","chartHeight","chartWidth","qualClassName","getRadiusRange","defaultRadius","radiusDomain","rangeValueGetter","getRangeValue","domainMultiplier","sizeAxisDomain","sizeMultiplier","_chartWidth","_chartHeight","consecutiveExits","exitCounter","arcFn","tweenPie","arc_helper_tweenPie","individualClass","tweenExit","exitArr","oldExitCounter","tweenExitPie","consecutiveExitArr","gElem","arc_helper_tweenExitPie","pieSlices","pieSliceInf","tData","text_renderer","drawText","selectionMerge","backgroundVal","textanchor","textStyle","background","backgroundPadding","_smartLabel$getOriSiz","backgroundEl","text_default_config_defaultConfig","text_text","textEncoding","textField","textFormatter","backgroundEncoding","backgroundValue","textFieldIndex","textValue","text_slicedToArray","text-anchor","point_renderer","drawSymbols","mergedGroups","symbolGroups","symbolEnter","createShape","groupElement","then","res","Element","newShape","nodeName","src","href","shapeElement","pathStr","checkPath","renderer_createShape","exitGroups","point_default_config_defaultConfig","defColorStyle","fillOpacity","shapes","sizes","point_point","PointLayer","point_classCallCheck","point_possibleConstructorReturn","sizeEncoding","shapeEncoding","sizeValue","shapeFieldIndex","sizeFieldIndex","_config$offset","offsetX","offsetY","point_slicedToArray","maxSize","generateDataPoints","point_toConsumableArray","drawFn","_maxSize","_getPlotMeasurement","_getPlotMeasurement2","widthMetrics","heightMetrics","offsetXValues","offsetYValues","measurementConf","getMeasurementConfig","widthSpan","heightSpan","distanceLimit","renderer_drawRects","drawRects","barEnterFn","transitionBars","selTransition","renderer_transitionBars","bar_default_config_defaultConfig","bar_helper_resolveDimByField","resolveDimByField","axesInfo","spaceType","sizeConfig","enterSpace","minVal","maxVal","scales","diffPx","zeroPos","axisType","axisType0","resolveDimensions","_resolveDimByField","enterWidth","enterX","xPos","_resolveDimByField2","enterHeight","bar_scaleBand","bar","BarLayer","bar_classCallCheck","bar_possibleConstructorReturn","_plotPadding","_plotSpan","bar_get","getTranslatedPoints","_context$encodingFiel","bar_helper_getTranslatedPoints","normalizedDataArr","clipElement","clipPathElement","renderer_utils_clipElement","bar_slicedToArray","barWidthMetrics","barHeightMetrics","barWidthOffsets","barHeightOffsets","barWidth","barWidthOffset","barHeight","barHeightOffset","uniqueFieldType","filterData","pointFound","bar_toConsumableArray","p2","tick_default_config_defaultConfig","tick_renderer","ticksEnter","tick_tick","_config$span","xSpan","ySpan","x0Px","sanitizeEncoding","layer_factory","compositeLayers","factoryObj","setLayerRegistry","reg","_layerRegistry","getSerializedConf","layerDef","serializedDefs","defs","unitLayerDef","sDef","parseLayerDefinition","layerType","strs","layer_factory_toConsumableArray","layer_factory_parseLayerDefinition","getLayerInstance","layerRegistry","composeLayers","layerDefs","sanitizeLayerConfig","DEFAULT_LAYERS","defaults_defineProperty","_DEFAULT_LAYERS","ROWS","COLUMNS","COL","ROW","enums_constants_COLOR","enums_constants_SHAPE","enums_constants_SIZE","constants_LEFT","constants_RIGHT","CELL","X_AXES","Y_AXES","ENTRY_CELLS","EXIT_CELLS","constants_RADIUS","constants_ANGLE","PRIMARY","SECONDARY","local_options","local_options_defineProperty","_CONFIG$ROWS$COLUMNS$","simple_group","variable_variable","composed_vars","ComposedVars","composed_vars_classCallCheck","texts","composed_vars_possibleConstructorReturn","vars","_vars","member","simple_var","SimpleVariable","simple_var_classCallCheck","simple_var_possibleConstructorReturn","oneVar","_oneVar","dtFormat","fieldDef","varInst","field_sanitizer_convertToVar","convertToVar","datamodel","field_sanitizer_transformFields","transformFields","normalizedFields","normalizeFields","norFields","orderFields","fieldArray","dimensionArr","measureArr","temporalArr","categoricalArr","fieldList","numOfMeasures","allDimensions","field_sanitizer_toConsumableArray","temporal","categorical","field_sanitizer_orderFields","field_sanitizer_slicedToArray","rowsInfo","columnsInfo","rowDimensions","rowMeasures","rowTemporalFields","rowCategoricalFields","columnDimensions","columnMeasures","columnTemporalFields","columnCategoricalFields","visual_encoder","_fieldInfo","_axisFrom","_headerFrom","__headerFrom","axisFrom","_getHeaderAxisFrom","group_utils_getHeaderAxisFrom","_getHeaderAxisFrom2","visual_encoder_slicedToArray","rowHeader","rowAxis","_getHeaderAxisFrom3","_getHeaderAxisFrom4","colHeader","colAxis","column","headerFrom","scaleMaps","data_type_scale_map_dataTypeScaleMap","encoder_helper_createSimpleAxis","createSimpleAxis","axisConfig","axesCreators","Cls","encoder_helper_generateAxisFromMap","generateAxisFromMap","groupAxes","axisKey","currentAxes","cacheMaps","getAxisKey","getAxisConfig","axisInfo","axisOrientation","userAxisConfig","axis_orientation_namespaceObject","LEFT","RIGHT","TOP","BOTTOM","encoder_helper_getAxisConfig","_iteratorNormalCompletion","_didIteratorError","_iteratorError","_step","_iterator","encoder_helper_slicedToArray","err","getIndex","arrIndex","cartesian_encoder","geomCellAxes","projections","rowFields","columnFields","rowIndex","columnIndex","xAxes","yAxes","facets","counter","primaryFacets","secondaryFacets","primaryFields","secondaryFields","primaryLen","secondaryLen","projArr","primaryField","secondaryField","facet","existIndex","axisFromIndex","cartesian_encoder_get","CartesianEncoder","groupedModel","encodingObj","retriveDomainFromData","layerArray","serializedLayers","userLayerConfig","colField","colFieldName","rowField","configs","rowFieldName","rowFieldType","getDefaultMark","colFieldType","encoder_helper_getDefaultMark","defConfigs","layerConfigs","getLayerConfFromFields","colFields","encodingArr","encoder_helper_toConsumableArray","colFieldExist","rowFieldExist","layerConf","mergedLayerConf","serializedLayerConfig","cartesian_encoder_toConsumableArray","polar_encoder","pieAxes","sanitizedRows","sanitizedColumns","polar_encoder_get","sanitizedFields","typeIndex","fieldSet","polar_encoder_toConsumableArray","facetFields","parentModel","layerEncoding","encType","measureField","polar_encoder_defineProperty","allFields","retinal_encoder","newAxes","createRetinalAxis","fieldProps","group_utils_getAxisType","encoder_helper_createRetinalAxis","encodingConfigs","group_utils_initStore","initStore","group_utils_defineProperty","group_utils_isDistributionEqual","isDistributionEqual","group_utils_toConsumableArray","rowType","initializeCacheMaps","cellMap","xAxesMap","yAxesMap","entryCellMap","exitCellMap","scaleType","group_utils_headerCreator","headerCreator","fieldHeaders","TextCell","getHeaderText","headers","rowLength","header","getAxisType","getHeaderAxisFrom","userAxisFromConfig","_fields","group_utils_slicedToArray","firstField","secondField","firstFieldType","secondFieldType","setFacetsAndProjections","encoder","_encoder$simpleEncode","simpleEncoder","getFacetsAndProjections","group_utils_createSelection","createSelection","appendObj","idFn","dataSelect","mergedSelection","group_utils_getBorders","getBorders","matrices","showRowBorders","showColBorders","showValueBorders","valueMatrix","_rows","leftRows","rightRows","_columns","topColumns","bottomColumns","_encoder$fieldInfo","allDimensionLength","allMeasuresLength","allTemporalFieldsLength","getRowBorders","borders","getColumnsBorders","getValueBorders","borderTypeRow","borderTypeCol","group_utils_getValueBorders","action_behaviour_map_defineProperty","actions_namespaceObject","behaviours_namespaceObject","reactive_props_CONFIG","reactive_props_DATA","reactive_props_AXES","LAYERDEFS","reactive_props_WIDTH","reactive_props_HEIGHT","reactive_props_MOUNT","primaryXAxisUpdated","primaryYAxisUpdated","secondaryXAxisUpdated","secondaryYAxisUpdated","reactive_props_TRANSFORM","DATADOMAIN","LAYERSCREATED","FIELDS","TIMEDIFFS","LAYERAXISINDEX","helper_getLayerFromDef","getLayerFromDef","existingLayer","_layerDeps","instanceArr","resolveEncodingTransform","layerInst","resolvable","depArr","resolved","helper_createLayers","createLayers","layerDefinitions","layersMap","_layersMap","markSet","components","layerIndex","layersArr","_layersArr","markId","defArr","instanceValues","src_helper_toConsumableArray","layerdeps","getDependencyOrder","graph","dependencyOrder","visited","visit","helper_attachAxisToLayers","attachAxisToLayers","layerAxisIndex","axesObj","axisInf","helper_getLayerAxisIndex","getLayerAxisIndex","_layer$config","helper_unionDomainFromLayers","unionDomainFromLayers","getDataDomain","domainValues","layerDomain","fieldDomain","fieldStr","unionDomain","dom","common_utils_unionDomain","getLayersBy","searchBy","removeLayersBy","inst","grid_lines_LINEAR","grid_lines_getGridLayerDefinitions","getGridLayerDefinitions","getDefaultVisibilty","getLayerDefinition","_definition","_encoding","gridLines","gridBands","gridLineColor","zeroLineColor","gridBandColor","isLinearScale","grid_lines_defineProperty","isNegativeDomain","grid_lines_renderGridLineLayers","renderGridLineLayers","createGridLineLayer","vuConf","_gridbands","_gridlines","atomicDef","sConf","grid_lines_createGridLineLayer","getGridLayerData","gridData","jsonData","_jsonData$push","grid_lines_getGridLayerData","entry","_entry","grid_lines_slicedToArray","parentGroupClass","src_default_config_defaultConfig","trackerClassName","arcLayerClassName","sideEffectClassName","src_local_options","src_local_options_defineProperty","_CONFIG$LAYERDEFS$AXE","prevAxes","cachedData","local_options_toConsumableArray","oldData","axisMap","1","axisProps","src_listener_map_listenerMap","listener_map_slicedToArray","reactive_props_namespaceObject","isReverse","layerDefsValue","fieldsVal","_layerAxisIndex","_lifeCycleManager","notify","_timeDiffsByField","layersCreated","dataModelVal","layerAxisIndexVal","axesVal","transformDataModels","transformVal","_transformedDataModels","attachDataToLayers","transformedDataModels","dataSource","_dimensionMeasureMap","getDimensionMeasureMap","retinalEncodingsAndMeasures","_layer$encodingFields","_retinalEncodingsAndM","helper_getDimensionMeasureMap","retinalFields","dataDomain","updateAxisDomain","src_props_PROPS","props_defineProperty","_PROPS","dispatchQueuedSideEffects","firebolt_helper_toConsumableArray","helper_registerListeners","registerImmediateListener","originalData","createSelectionSet","attachPropagationListener","registerChangeListener","firebolt_helper_slicedToArray","mapActionsAndBehaviour","clearActionHistory","payloadGenerator","selectionDataModel","propPayload","getRangeFromData","propCriteria","isDimension","payload_generator_toConsumableArray","payload_generator_getRangeFromData","__default","data_propagator_propagateValues","propagateValues","propagationFieldInf","propagationFields","sideEfffects","mergedModel","sourceUnit","sourceCanvas","parentAlias","propagationBehaviour","propFields","facetByFields","getModelWithFacetData","schema1","data1","schema2","data2","data_propagator_toConsumableArray","data_propagator_getModelWithFacetData","groupId","behaviourInstance","propagationConf","sourceBehaviour","enabled","propConf","actionInf","propInf","visual_unit_src_firebolt","UnitFireBolt","src_firebolt_classCallCheck","firebolt_possibleConstructorReturn","unitId","aliasName","propagationSourceCanvas","sourceUnitId","sourceSideEffects","sideEffectInstances","actionOnSource","mappedEffects","sideEffectChecker","enabledFn","payloadFn","sourceIdentifierFields","sourceBehaviours","firebolt_get","visual_unit","VisualUnit","registry","visual_unit_classCallCheck","onlayerdraw","_renderedResolve","_renderedPromise","lifeCycleManager","visual_unit_defineProperty","behavioural_namespaceObject","side_effects_namespaceObject","_firebolt","lock","unlock","_rootSvg","class","renderLayers","orderedLayers","layerParentGroup","helper_renderLayers","_sideEffectGroup","createSideEffectGroup","helper_createSideEffectGroup","rootSvg","layerName","getLayerByName","serializedDef","visual_unit_toConsumableArray","lyr","axisConf","alignZeroLine","adjustedDomain","getAdjustedDomain","y1ratio","y2ratio","allSameSign","updateDomainCache","dimValue","getNearestDimensionalValue","entryVal","helper_getNearestDimensionalValue","pointInf","getMarkInfFromLayers","markInf","parsedIdentifiers","transposeArray","getPointsFromIdentifiers","_parentContainer","getFieldNames","fields1","matrix_model_toConsumableArray","createSelectedDataModel","matrix_model_uniqueKeyGenerator","uniqueKeyGenerator","keyArray","newDm","nextDepthUniqueValues","projectRows","allColumnProjections","rowProjections","optionalProjections","projectFields","_getFieldNames","_getFieldNames2","matrix_model_slicedToArray","projFieldNames","colProjFieldNames","pushToMatrix","_matrix$rowIndex","facetInfo","colProjections","rowProj","projIdx","_getFieldNames3","_getFieldNames4","rowProjFieldNames","projectedDm","cell_creator_createValueCells","createValueCells","suppliedLayers","GeomCell","matrixLayers","horizontalAxis","verticalAxis","datamodelTransform","layerConfigArr","getLayerConfig","normalizedColumns","normalizedRows","geomCellKey","getCellKey","columnId","allFacets","cell_creator_toConsumableArray","rowFacets","colFacets","geomCell","updateCells","facetKey","cell_creator_updateCells","cell_creator_createAxisCells","createAxisCells","axisInst","_axisInst$config","AxisCell","BlankCell","cell_creator_headerPlaceholderGn","headerPlaceholderGn","selectionObj","facetConfig","selectionKeys","keySet","createTextCells","cell_creator_createTextCells","cell_creator_generatePlaceholders","generatePlaceholders","facetsAndProjections","encoders","valuesMatrix","rowKeys","columnKeys","takeAxisFrom","takeHeaderFrom","axisPlaceholderGn","selObj","axesMatrix","selObjProp","axesForDraw","rowsPrimary","rowPrime","columnsPrimary","colPrime","cell_creator_axisPlaceholderGn","_selectionObj","rowsSecondary","columnsSecondary","getObjects","section","hContext","cell_creator_computeMatrices","computeMatrices","componentRegistry","globalConfig","autoGroupBy","otherEncodings","matrixGnContext","getCellDef","isRowSizeEqual","isColumnSizeEqual","colCells","rowCells","resetSimpleAxes","newCacheMap","valueCellContext","serializeLayerConfig","extractFields","layerFields","flattenArray","group_utils_extractFields","getFieldsFromSuppliedLayers","suppliedLayerConfig","group_utils_getFieldsFromSuppliedLayers","aggregationFns","valueMatrixInfo","getMatrixModel","rowDataModels","colProj","firstLevelRowKeys","_rowDataModels","_getFieldNames5","rowFacetFieldNames","selectedDataModel","_rowDataModels2","colFacetNames","firstLevelColumnKeys","dme","rIndex","cIndex","transposedColKeys","matrix_model_getMatrixModel","valueCellsCreator","placeholder","createUnits","_mutateAxesFromMap","mutateAxesFromMap","xAxisSet","yAxisSet","axisId","group_utils_mutateAxesFromMap","_generateMatrices","generateMatrices","leftHeaders","topHeaders","bottomHeaders","rightHeaders","cell_creator_slicedToArray","rowSec","colSec","leftFacets","rightFacets","leftMatrix","rightMatrix","topMatrix","bottomMatrix","currentBottomLength","setAvailableSpace","rowMatrix","columnMatrix","matrix_resolver","MatrixResolver","matrix_resolver_classCallCheck","_registry","_layerConfig","_matrixLayers","_rowMatrix","_columnMatrix","_valueMatrix","_facets","_projections","_datamodelTransform","_units","_cacheMaps","_axes","maps","_rowCells","_colCells","matrix_resolver_toConsumableArray","_horizontalAxis","_verticalAxis","matrixType","sideEffectRegistry","units","unitConfig","extractUnitConfig","group_utils_extractUnitConfig","_getAllFields","retContext","getRetinalFieldsDomain","retinalEncoder","setCommonDomain","_axes2","retinalAxes","updateModel","placeholders","bottomLeft","bottomRight","_dependencies3","matrix_resolver_slicedToArray","topCols","bottomCols","rowHeaders","blankCellCreator","showHeaders","footers","topLeft","topRight","value_matrix","ValueMatrix","matrixArr","value_matrix_classCallCheck","instancesById","rIdx","cIdx","cellValue","colIndex","_instancesById","_matrix","_filterFn","rowWidth","currentRowWidth","rowHeight","currentRowHeight","change_listener_setupChangeListeners","setupChangeListeners","change_listener_toConsumableArray","matrixConfig","retinalConfig","sanitizeRetinalConfig","retinalConf","confValue","getEncoder","group_utils_getEncoder","groupType","fieldSanitizer","setAxisAndHeaders","placeholderInfo","getMatrices","_groupedDataModel","createRetinalAxes","setDomains","setMatrixInstances","_composition","change_listener_setMatrixInstances","cornerMatrices","createHeaders","metaData","border","visual_group_props_PROPS","hasDataUpdated","matrixInstance","cellRegistry","visual_group","VisualGroup","visual_group_classCallCheck","visual_group_possibleConstructorReturn","componentSubRegistry","_matrixInstance","_selection","_placeholderInfo","_cornerMatrices","variable","findInGroup","channel","group_utils_this","facetType","projType","group_utils_findInGroup","getRetinalAxes","getSimpleAxes","_resolver$getAllField","visual_group_defineProperty","firebolt_behavioural_select","existingRemoveSet","enums_selection_namespaceObject","select_toConsumableArray","firebolt_action_behaviour_map_actionBehaviourMap","firebolt_action_behaviour_map_defineProperty","action_behaviour_map_actionBehaviourMap","action_behaviour_map_propagationBehaviourMap","propagationBehaviourMap","_propagationBehaviour","src_firebolt_behaviour_effect_map_behaviourEffectMap","firebolt_behaviour_effect_map_defineProperty","firebolt_behaviour_effect_map_behaviourEffectMap","propagationSideEffects","_propagationSideEffec","SCALE_FUNCTIONS","VALUE","helper_propagate","canvasAlias","check","assembleModelFromIdentifiers","_loop2","fieldVal","src_firebolt_helper_toConsumableArray","legend_firebolt_LegendFireBolt","_Firebolt","LegendFireBolt","legend_firebolt_classCallCheck","legend_firebolt_possibleConstructorReturn","legend_firebolt_inherits","legend_firebolt_createClass","behaviourName","firebolt_physical_hover","getCriteriaFromData","firebolt_physical_click","firebolt_physical_physicalActions","firebolt_physical_defineProperty","physical_physicalActions","boundingBox","gradientDimensions","axisScale","rangeShifter","drag_defineProperty","getSelectionCriteria","selectionBoxMeasure","drawingInfMeasure","subjectStartPoint","side_effects_selection_box","gradientDimension","legendGradContainer","legendSelGroup","enterFn","getMousePos","boundingClientRect","selection_box_drag_defineProperty","fadeOut","physical_selection_box_drag_selectionBoxDrag","legend_highlighter_strategies_strategies","brighten","legend_highlighter","LegendHighlighter","legend_highlighter_classCallCheck","legend_highlighter_possibleConstructorReturn","legend_props_PROPS","legendContainer","resetLogicalSpace","title","_title","ALIGN","DEFAULT_MEASUREMENT","LEGEND_TITLE","legend_defaults_DEFAULT_CONFIG","bounds","upper","defaults_ICON_MAP","ICON_MAP","legend_helper_getScaleInfo","getScaleInfo","steps","scaleFn","legend_helper_getInterpolatedData","getInterpolatedData","domainForLegend","interpolatedFn","getDomainBounds","domainBounds","domainLeg","ele","legend_helper_defineProperty","getScaleFactor","simple_legend","SimpleLegend","simple_legend_classCallCheck","_metaData","_fieldName","_labelManager","_cells","defaultMeasurement","_computedStyle","firebolt_behavioural_namespaceObject","firebolt_side_effects_namespaceObject","_canvasAlias","getItemMeasures","_labelManager$getOriS","effPadding","effBorder","effMargin","dataFromScale","titleSpace","getTitleSpace","titleHeight","titleWidth","labelSpaces","getLabelSpaces","_computeItemSpaces","computeItemSpaces","maxItemSpaces","textOrientation","itemSpaces","iconSpaces","maxIconWidth","itemSpace","iconSpace","legend_helper_computeItemSpaces","titleSpaces","_measurement2","titleCreator","legend_helper_titleCreator","_measurement3","renderTitle","simple_legend_defineProperty","legendOrientation","position_config_defineProperty","datasets","itemContainerMeasures","getStepSpacesInfo","iconHeight","iconWidth","stepPadding","horizontal","vertical","_legendOrientation","positionConfig","_positionConfig","alignmentMap","_alignmentMap","itemStack","_itemStack","renderer_createLegendSkeleton","createLegendSkeleton","gradWidth","gradHeight","maxGradHeight","maxGradWidth","legendBody","legendItem","getItemContainers","legendInstance","positionObj","renderer_getItemContainers","renderer_createItemSkeleton","createItemSkeleton","itemSkeleton","alignClass","renderer_applyItemStyle","applyItemStyle","measureType","stepColorCheck","_context$measurement","renderer_renderIcon","renderIcon","defaultIcon","renderer_checkPath","legend_renderer_createShape","discrete_legend","_getScaleInfo","discrete_legend_toConsumableArray","discrete_legend_defineProperty","discrete_legend_get","renderDiscreteItem","_context$measurement2","_item$icon","text-align","renderer_renderDiscreteItem","DiscreteLegend","getGradientDomain","accumulator","currentValue","MAX_VALUE","MIN_VALUE","gradient_helper_createLegendSkeleton","legendGradSvg","legendGradCont","linearGradient","makeLinearGradient","gradient_helper_makeLinearGradient","legendRect","gradient_helper_renderAxis","gradient_legend","gradient_legend_toConsumableArray","gradient_legend_defineProperty","newAxis","gradient_helper_createAxis","axisSpace","axisDomainLength","_legendGradientSvg","gradient_legend_get","renderGradient","_createLegendSkeleton","gradient_helper_renderGradient","GradientLegend","step_legend","step_legend_toConsumableArray","step_legend_defineProperty","lowerBounds","upperBounds","step_legend_get","StepLegend","stepData","position_config_stepData","renderStepItem","_context$config3","_context$measurement3","_item$icon2","_positionConfig$posit","renderer_renderStepItem","PADDING","BORDER","MARGIN","TITLE_TEMPLATE_NOT_ALLOWED_TAGS","LEGEND_TYPE_MAP","constants_defineProperty","src_constants_ORDINAL","_LEGEND_TYPE_MAP","src_constants_LINEAR","operators_share","share","operators_toConsumableArray","operators_html","strings","htmlCode","expLn","frag","createDocumentFragment","treeShakeNode","nodeType","Node","ELEMENT_NODE","tagName","childNodes","actionModel","ActionModel","action_model_classCallCheck","_registrableComponents","canvas","once","visualGroup","_cell$valueOf$firebol","registerPropagationBehaviourMap","_len4","_key4","dissociateBehaviour","_len5","_key5","dissociateSideEffect","policy","registrableComponents","mergedPolicy","aliases","comp","*","propagationPayload","propagationCanvas","action_model_defaultPolicy","crossInteractionPolicy","src_defaults_DEFAULT_CONFIG","legend","minHeight","collapse","src_options","isInteger","minUnitWidth","minUnitHeight","oldConf","defConfig","enums_constants_WIDTH","enums_constants_HEIGHT","layout_src_enums_constants_TOP","src_enums_constants_LEFT","src_enums_constants_RIGHT","layout_src_enums_constants_BOTTOM","constants_CENTER","ROW_LEFT","ROW_RIGHT","COLUMN_BOTTOM","COLUMN_TOP","ROW_SPAN","COL_SPAN","ROW_ROOT","COLUMN_ROOT","generic_layout","GenericLayout","generic_layout_classCallCheck","_matrices","_centerMatrix","_mountPoint","DEFAULT_CONFIGURATION","grid_layout_defaults_defineProperty","_FieldNames$BORDER","_DEFAULT_CONFIGURATIO","DEFAULT_MEASUREMENTS","_DEFAULT_MEASUREMENTS","BLANK_BORDERS","span_maker_columnFilter","columnFilter","colData","colIdx","previousRow","currentRow","prevCell","nextRow","prevRow","calcRowSpan","isNull","calcColSpan","span_maker_mask","mask","filteredRow","_temp","span_maker_toConsumableArray","applyBorders","borderStyle","borderType","applyRowBorders","showBorders","applyColBorders","renderMatrix","viewWidth","containerForMatrix","_cellSpanMaker","cellSpanMaker","viewMatrix","spans","ridx","currSpan","renderTable","rowData","availHeight","utils_nest","findInPage","page","combineMatrices","isTransposed","joinedMatrix","utils_toConsumableArray","computeLogicalSpace","maxMeasures","_config$isTransposed","unitMeasures","_getMeasureInfo","getMeasureInfo","firstMeasure","secondMeasure","utils_getMeasureInfo","minMeasures","getMinMeasures","_logicalSpace","utils_defineProperty","valueItem","maxMeasure","firstMeasureValue","secondMeasureValue","valueArray","_item$space","fMeasure","sMeasure","utils_getLogicalSpace","extraCellsRemover","beg","visual_matrix_props_PROPS","visual_matrix_default_config_defaultConfig","distribution","extraCellLengths","visual_matrix","VisualMatrix","visual_matrix_classCallCheck","_lastLevelKey","_primaryMatrix","_secondaryMatrix","_maxMeasures","_availableSpace","_breakPointer","_layoutMatrix","_tree","createTree","setLogicalSpace","_createTree2","matrixTree","lastLevelKey","layoutMatrix","primaryMatrix","secondaryMatrix","breakPage","primaryMatrixLength","newMatrix","keyLength","utils_createTree","createMatrixEachLevel","_arr$i","heightMeasures","populateMaxMeasures","widthMeasures","calculateDepth","viewableMatrix","createViewPortMatrix","viewableMeasures","redistribute","childDepth","maxHeights","maxWidths","matrixInst","mWidth","mHeight","redistributeColumnWise","redistributeRowWise","cellDimOptions","matrixIndex","_getCellDimensions","getCellDimensions","heights","widths","rowHeights","columnWidths","primary","secondary","begCellLen","endCellLen","createMatrixInstances","matrixInfo","layout","breakPointer","brokenMatrix","breakMatrix","nextLevel","removeExtraCells","rHeights","cWidths","_config4","gutter","spaceTakenByColumn","spaces","getDistributedHeight","heightWithoutGutter","distSum","gutterSum","availableHeight","colLen","distHeight","borderWidth","spaceTakenByRow","getDistributedWidth","layoutConfig","availableWidth","distWidth","rowLen","oldLogicalSpace","mainMeasures","computedMeasures","colHeight","colWidth","setMatrixMeasurement","computations_setAvailableSpace","setViewSpaces","pointerType","viewSpaces","pointer","computations_defineProperty","grid_layout_layout","GridLayout","layout_classCallCheck","layout_possibleConstructorReturn","_layoutId","generateVisualMatrices","begColCells","endColCells","gutterSpace","center","_top","layout_helper_slicedToArray","_center","_bottom","layout_helper_toConsumableArray","centerMatrix","layout_helper_generateVisualMatrices","layout_get","computeLayoutMeasurements","_layout$measurement","rowMatrixWidth","getMatrixMeasurement","columnMatrixWidth","columnViewPages","getViewableSpaces","columnViewSpace","columnPointer","columnMatrixHeight","rowMatrixHeight","rowViewableSpaces","computations_toConsumableArray","rowWidthsPrimary","rowWidthsSecondary","columnViewableSpaces","columnHeightsPrimary","columnHeightsSecondary","computations_computeLayoutMeasurements","setViewInformation","pageNumber","pageType","totalPages","getViewInformation","viewMatricesInfo","layout_defineProperty","renderGrid","currentPage","rowPointer","getViewMatrices","rowMatrices","getViewableData","columnMatrices","centralMatrixPointer","rowMatrixLen","columnMatrixLen","rowPages","columnPages","layoutDimensions","getViewMeasurements","_layout$measurement2","_layout$config3","leftWidth","rightWidth","topHeight","bottomHeight","viewHeight","viewInfo","_getViewInformation3","renderMatrices","transaction_support","INTERFACE_IMPl","visual_cell_src_enums_constants_LEFT","visual_cell_src_enums_constants_RIGHT","visual_cell_src_enums_constants_BOTTOM","visual_cell_src_enums_constants_TOP","visual_cell_src_enums_constants_CLASSPREFIX","constants_HEADER","enums_constants_DATA","enums_constants_AXES","constants_FACET_BY_FIELDS","constants_FIELDS","enums_constants_TRANSFORM","LAYER_DEF","src_enums_constants_CONFIG","DETAIL_FIELDS","cell_type_TEXT","cell_type_AXIS","GEOM","BLANK","simple_cell","SimpleCell","simple_cell_classCallCheck","enums_defaults_DEFAULT_CONFIG","enums_defaults_defineProperty","_CONSTANTS$MARGIN","_DEFAULT_CONFIG","DEFAULT_PROPS","availWidth","geomProps","caption","packages_visual_cell_src_props_PROPS","src_props_defineProperty","visual_cell_src_props_PROPS","axis_cell","axis_cell_classCallCheck","axis_cell_possibleConstructorReturn","_availHeight","_availWidth","computeAxisSpace","logicalWidth","logicalHeight","spaceFixer","_axis$getLogicalSpace","wrapperDiv","blank_cell","blank_cell_classCallCheck","blank_cell_possibleConstructorReturn","src_text_cell","text_cell_classCallCheck","text_cell_possibleConstructorReturn","_className","_minTickDiff","computeTextSpace","verticalAlign","textAlign","geom_cell","geom_cell_classCallCheck","geom_cell_possibleConstructorReturn","_unit","_datamodel","_facetByFields","_transform","_caption","lockModel","unlockModel","captionSpace","computeGeomSpace","getCaptionSpace","captionDom","DEFAULT_PLACEHOLDERS","src_defaults_defineProperty","_DEFAULT_PLACEHOLDERS","cell_registry","createHeading","cellType","title_maker_headerCreator","legend_maker_legendInitializer","legendInitializer","legendConfig","prevLegends","legends","headerHeight","legendCreator","LegendCls","dataset","scaleProps","_scale$config","legend_maker_legendCreator","dataInfo","legendMeasures","getGroupByData","setLegendMeasures","layout_maker_getRenderDetails","getRenderDetails","_mount$getBoundingCli","heightAttr","widthAttr","visGroup","_visGroup$placeholder","titleConfig","subtitleConfig","subtitle","legendPosition","layoutArrangement","arrangeComponents","_titleLayouts","legendLayouts","component_resolver_defineProperty","titleLayouts","src_constants_TOP","src_constants_BOTTOM","component_resolver_arrangeComponents","availableHeightForCanvas","availableWidthForCanvas","_createHeaders","canvasHeight","canvasWidth","headerOptions","resolveTitleSubTitleContent","rawContent","_sanitize","escapeHTML","htmlEscapes","&","<",">","\"","'","/","title_maker_resolveTitleSubTitleContent","_createHeading","title_maker_createHeaders","createLegend","legend_maker_createLegend","legendSpace","getLegendSpace","legendInfo","legend_maker_getLegendSpace","legendWidth","legendHeight","canvases","mountSpace","TITLE_CONFIG","SUB_TITLE_CONFIG","localOptions","canvas_local_options_defineProperty","_localOptions","canvasOptions","_sanitized","_canvasOptions","sub","renderer_renderHeader","renderHeader","headerCell","cont","renderComponents","_getSkeletons","getSkeletons","innerContainer","layoutType","renderer_getSkeletons","prepareGridContainer","innerSel","renderer_prepareGridContainer","setLabelRotationForAxes","renderLegend","legendComponents","sectionComponents","legendMount","legWidth","legHeight","sections","currHeight","currWidth","leg","renderer_renderLegend","shiftHeaders","shifter","renderer_shiftHeaders","helper_setupChangeListener","setupChangeListener","allOptions","_allOptions","canvas_helper_toConsumableArray","equalityChecker","option","dispatchProps","_cachedProps","applyInteractionPolicy","policies","firebolt_defaultInteractionPolicy","defaultInteractionPolicy","isMeasure","canvas_firebolt_toConsumableArray","getFieldsFromChannel","colDim","fieldInf","unitFireBolt","unitColFacets","equals","unitRowFacets","propagateWith","defaultCrossInteractionPolicy","propagationCanvasAlias","propagationUnit","canvas_firebolt","GroupFireBolt","canvas_firebolt_classCallCheck","_interactionPolicy","_crossInteractionPolicy","changeBehaviourStateOnPropagation","changeSideEffectStateOnPropagation","canvas_canvas","Canvas","globalDependencies","canvas_classCallCheck","canvas_possibleConstructorReturn","_transactor","canvas_slicedToArray","initedComponents","initCanvas","register","_getRenderDetails","prepareLayout","triggerReflow","promises","all","getAxes","initialSettings","regEntry","COMPONENTS","SUBREGISTRIES","regObj","globalCache","defaultRegistry","overrideRegistryDefinitions","overrideRegistry","muze_muze","muze","_transactor2","muze_slicedToArray","env","globalStore","componentSubRegistryDef","settings","withSettings","enableChainedTransaction","transactionModel","transactionEndpoint","transactionItems","_slicedToArray","SmartlabelManager_default","SideEffects","standards","SurrogateSideEffect","SpawnableSideEffect","Behaviours","PersistentBehaviour","VolatileBehaviour","DataModel","muze_package","layerFactory","operators_namespaceObject","utils","require","lookupWhat","lookupDetails","lookupTarget","deps","__webpack_exports__"],"mappings":"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","file":"muze.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"muze\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"muze\"] = factory();\n\telse\n\t\troot[\"muze\"] = factory();\n})(window, function() {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 7);\n","!function(e,t){\"object\"==typeof exports&&\"object\"==typeof module?module.exports=t():\"function\"==typeof define&&define.amd?define(\"DataModel\",[],t):\"object\"==typeof exports?exports.DataModel=t():e.DataModel=t()}(window,function(){return function(e){var t={};function n(r){if(t[r])return t[r].exports;var i=t[r]={i:r,l:!1,exports:{}};return e[r].call(i.exports,i,i.exports,n),i.l=!0,i.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(e,\"__esModule\",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&\"object\"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,\"default\",{enumerable:!0,value:e}),2&t&&\"string\"!=typeof e)for(var i in e)n.d(r,i,function(t){return e[t]}.bind(null,i));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,\"a\",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p=\"\",n(n.s=1)}([function(e){e.exports={name:\"datamodel\",description:\"Relational algebra compliant in-memory tabular data store\",homepage:\"https://github.com/chartshq/datamodel\",version:\"2.0.2\",license:\"MIT\",main:\"dist/datamodel.js\",author:\"Charts.com \",keywords:[\"datamodel\",\"data\",\"relational\",\"algebra\",\"model\",\"muze\",\"fusioncharts\",\"table\",\"tabular\",\"operation\"],repository:{type:\"git\",url:\"https://github.com/chartshq/datamodel.git\"},contributors:[{name:\"Akash Goswami\",email:\"akash@charts.com\"},{name:\"Subhash Haldar\",email:\"subhash@charts.com\"},{name:\"Rousan Ali\",email:\"rousan@charts.com\",url:\"https://rousan.io\"},{name:\"Ujjal Kumar Dutta\",email:\"ujjal@charts.com\"}],dependencies:{\"d3-dsv\":\"^1.0.8\"},devDependencies:{\"babel-cli\":\"6.26.0\",\"babel-core\":\"^6.26.3\",\"babel-eslint\":\"6.1.2\",\"babel-loader\":\"^7.1.4\",\"babel-plugin-transform-runtime\":\"^6.23.0\",\"babel-preset-env\":\"^1.7.0\",\"babel-preset-es2015\":\"^6.24.1\",\"babel-preset-flow\":\"^6.23.0\",chai:\"3.5.0\",\"cross-env\":\"^5.0.5\",eslint:\"3.19.0\",\"eslint-config-airbnb\":\"15.1.0\",\"eslint-plugin-import\":\"2.7.0\",\"eslint-plugin-jsx-a11y\":\"5.1.1\",\"eslint-plugin-react\":\"7.3.0\",\"istanbul-instrumenter-loader\":\"^3.0.0\",jsdoc:\"3.5.5\",json2yaml:\"^1.1.0\",karma:\"1.7.1\",\"karma-chai\":\"0.1.0\",\"karma-chrome-launcher\":\"2.1.1\",\"karma-coverage-istanbul-reporter\":\"^1.3.0\",\"karma-mocha\":\"1.3.0\",\"karma-spec-reporter\":\"0.0.31\",\"karma-webpack\":\"2.0.3\",marked:\"^0.5.0\",mocha:\"3.4.2\",\"mocha-webpack\":\"0.7.0\",\"transform-runtime\":\"0.0.0\",webpack:\"^4.12.0\",\"webpack-cli\":\"^3.0.7\",\"webpack-dev-server\":\"^3.1.4\"},scripts:{test:\"npm run lint && npm run ut\",ut:\"karma start karma.conf.js\",utd:\"karma start --single-run false --browsers Chrome karma.conf.js \",build:\"webpack --mode production\",\"build:dev\":\"webpack --mode development\",start:\"webpack-dev-server --config webpack.config.dev.js --mode development --open\",lint:\"eslint ./src\",\"lint-errors\":\"eslint --quiet ./src\",docs:\"rm -rf yaml && mkdir yaml && jsdoc -c jsdoc.conf.json\"}}},function(e,t,n){var r=n(2);e.exports=r.default?r.default:r},function(e,t,n){\"use strict\";n.r(t);var r={};n.r(r),n.d(r,\"DataFormat\",function(){return o}),n.d(r,\"DimensionSubtype\",function(){return u}),n.d(r,\"MeasureSubtype\",function(){return c}),n.d(r,\"FieldType\",function(){return f}),n.d(r,\"FilteringMode\",function(){return s});var i={};n.r(i),n.d(i,\"DSVArr\",function(){return Me}),n.d(i,\"DSVStr\",function(){return Ve}),n.d(i,\"FlatJSON\",function(){return Ye}),n.d(i,\"Auto\",function(){return Be});var a={};n.r(a),n.d(a,\"sum\",function(){return ct}),n.d(a,\"avg\",function(){return ft}),n.d(a,\"min\",function(){return st}),n.d(a,\"max\",function(){return lt}),n.d(a,\"first\",function(){return dt}),n.d(a,\"last\",function(){return pt}),n.d(a,\"count\",function(){return ht}),n.d(a,\"sd\",function(){return vt});var o={FLAT_JSON:\"FlatJSON\",DSV_STR:\"DSVStr\",DSV_ARR:\"DSVArr\",AUTO:\"Auto\"},u={CATEGORICAL:\"categorical\",TEMPORAL:\"temporal\",GEO:\"geo\"},c={DISCRETE:\"discrete\"},f={MEASURE:\"measure\",DIMENSION:\"dimension\"},s={NORMAL:\"normal\",INVERSE:\"inverse\",ALL:\"all\"};function l(e,t){e.length>0&&e.split(\",\").forEach(function(e){var n=e.split(\"-\"),r=+n[0],i=+(n[1]||n[0]);if(i>=r)for(var a=r;a<=i;a+=1)t(a)})}var d=function(){function e(e,t){for(var n=0;n=0;)o=e[a+1],-1!==r.indexOf(o)&&i.push({index:a,token:o});return i},m.formatAs=function(e,t){var n,r=h(e),i=m.findTokens(t),a=m.getTokenDefinitions(),o=String(t),u=m.TOKEN_PREFIX,c=void 0,f=void 0,s=void 0;for(s=0,n=i.length;s=0;d--)(f=a[d].index)+1!==l.length-1?(void 0===u&&(u=l.length),s=l.substring(f+2,u),l=l.substring(0,f+2)+RegExp.escape(s)+l.substring(u,l.length),u=f):u=f;for(d=0;d1){n=Math.abs(r[1]-r[0]);for(var i=2,a=r.length;i=y&&t.data=r.stops[r.stops.length-1]}).forEach(function(e){c[e.index]=r.stops[r.stops.length-1]+\"-\"+h}),r.stops.unshift(r.start),b=new Set(r.stops),dr.stops[r.stops.length-1]&&b.add(h),b=[].concat(function(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t3&&void 0!==arguments[3]&&arguments[3],i=arguments.length>4&&void 0!==arguments[4]?arguments[4]:G.CROSS,a=[],o=[],u=n||K,c=e.getFieldspace(),f=t.getFieldspace(),s=c.name,d=f.name,p=c.name+\".\"+f.name,h=L(c,f);if(s===d)throw new Error(\"DataModels must have different alias names\");return c.fields.forEach(function(e){var t=E({},e.schema);-1===h.indexOf(t.name)||r||(t.name=c.name+\".\"+t.name),a.push(t)}),f.fields.forEach(function(e){var t=E({},e.schema);-1!==h.indexOf(t.name)?r||(t.name=f.name+\".\"+t.name,a.push(t)):a.push(t)}),l(e._rowDiffset,function(e){var n=!1,p=void 0;l(t._rowDiffset,function(t){var l=[],v={};v[s]={},v[d]={},c.fields.forEach(function(t){l.push(t.data[e]),v[s][t.name]=t.data[e]}),f.fields.forEach(function(e){-1!==h.indexOf(e.schema.name)&&r||l.push(e.data[t]),v[d][e.name]=e.data[t]});var m=Ke(v[s]),y=Ke(v[d]);if(u(m,y)){var g={};l.forEach(function(e,t){g[a[t].name]=e}),n&&G.CROSS!==i?o[p]=g:(o.push(g),n=!0,p=e)}else if((i===G.LEFTOUTER||i===G.RIGHTOUTER)&&!n){var b={},_=c.fields.length-1;l.forEach(function(e,t){b[a[t].name]=t<=_?e:null}),n=!0,p=e,o.push(b)}})}),new ut(o,a,{name:p})}function z(e,t){var n=\"\"+e,r=\"\"+t;return nr?1:0}function X(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:z;return e.length>1&&function e(t,n,r,i){if(r===n)return t;var a=n+Math.floor((r-n)/2);return e(t,n,a,i),e(t,a+1,r,i),function(e,t,n,r,i){for(var a=e,o=[],u=t;u<=r;u+=1)o[u]=a[u];for(var c=t,f=n+1,s=t;s<=r;s+=1)c>n?(a[s]=o[f],f+=1):f>r?(a[s]=o[c],c+=1):i(o[c],o[f])<=0?(a[s]=o[c],c+=1):(a[s]=o[f],f+=1)}(t,n,a,r,i),t}(e,0,e.length-1,t),e}function Q(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);ta?\"desc\"===t?-1:1:0}}return r}function Z(e,t){var n=new Map,r=[];return e.forEach(function(e){var i=e[t];n.has(i)?r[n.get(i)][1].push(e):(r.push([i,[e]]),n.set(i,r.length-1))}),r}function ee(e,t,n){var r={label:e[0]};return t.reduce(function(t,r,i){return t[r]=e[1].map(function(e){return e[n[i].index]}),t},r),r}function te(e,t,n,r,i){var a={schema:[],data:[],uids:[]},o=(i=Object.assign({},{addUid:!1,columnWise:!1},i)).addUid,u=r&&r.length>0,c=[];if(n.split(\",\").forEach(function(t){for(var n=0;n=0;u--)i=t[u][0],a=t[u][1],(o=Ze(r,i))&&(S(a)?X(n,function(e,t){return a(e[o.index],t[o.index])}):j(a)?function(){var e=Z(n,o.index),t=a[a.length-1],i=a.slice(0,a.length-1),u=i.map(function(e){return Ze(r,e)});e.forEach(function(e){e.push(ee(e,i,u))}),X(e,function(e,n){var r=e[2],i=n[2];return t(r,i)}),n.length=0,e.forEach(function(e){n.push.apply(n,Q(e[1]))})}():(a=\"desc\"===String(a).toLowerCase()?\"desc\":\"asc\",X(n,$(o.type,a,o.index))));e.uids=[],n.forEach(function(t){e.uids.push(t.pop())})}(a,r),i.columnWise){var f=Array.apply(void 0,Q(Array(a.schema.length))).map(function(){return[]});a.data.forEach(function(e){e.forEach(function(e,t){f[t].push(e)})}),a.data=f}return a}function ne(e,t){var n={},r=[],i=[],a=[],o=e.getFieldspace(),u=t.getFieldspace(),c=o.fieldsObj(),f=u.fieldsObj(),s=o.name+\" union \"+u.name;if(!M(e._colIdentifier.split(\",\").sort(),t._colIdentifier.split(\",\").sort()))return null;function d(e,t,r){l(e._rowDiffset,function(e){var o={},u=\"\";i.forEach(function(n){var r=t[n].data[e];u+=\"-\"+r,o[n]=r}),n[u]||(r&&a.push(o),n[u]=!0)})}return e._colIdentifier.split(\",\").forEach(function(e){var t=c[e];r.push(E({},t.schema)),i.push(t.schema.name)}),d(t,f,!1),d(e,c,!0),new ut(a,r,{name:s})}function re(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t1&&void 0!==arguments[1]?arguments[1]:{},n={},r=t,i=e.getPartialFieldspace().getMeasure(),a=se.defaultReducer();return\"function\"==typeof t&&(a=t),Object.entries(i).forEach(function(e){var o=le(e,1)[0];\"string\"==typeof t[o]&&(r[o]=se.resolve(r[o])?se.resolve(r[o]):a),\"function\"!=typeof t[o]&&(r[o]=void 0),n[o]=r[o]||se.resolve(i[o].defAggFn())||a}),n}(e,n),o=e.getPartialFieldspace(),u=o.fieldsObj(),c=o.name,f=[],s=[],d=[],p={},h=[],v=void 0;Object.entries(u).forEach(function(e){var t=le(e,2),n=t[0],r=t[1];(-1!==i.indexOf(n)||a[n])&&(d.push(E({},r.schema)),\"measure\"===r.schema.type&&\"discrete\"!==r.schema.subtype?s.push(n):\"dimension\"!==r.schema.type&&\"discrete\"!==r.schema.subtype||f.push(n))});var m=0;return l(e._rowDiffset,function(e){var t=\"\";f.forEach(function(n){t=t+\"-\"+u[n].data[e]}),void 0===p[t]?(p[t]=m,h.push({}),f.forEach(function(t){h[m][t]=u[t].data[e]}),s.forEach(function(t){h[m][t]=[u[t].data[e]]}),m+=1):s.forEach(function(n){h[p[t]][n].push(u[n].data[e])})}),h.forEach(function(e){var t=e;s.forEach(function(n){t[n]=a[n](e[n])})}),r?(r.__calculateFieldspace(),v=r):v=new yt(h,d,{name:c}),v}function pe(e,t){var n=L(e.getFieldspace(),t.getFieldspace());return function(e,t){var r=!0;return n.forEach(function(n){r=!(e[n].value!==t[n].value||!r)}),r}}function he(e,t){var n={},r=[],i=[],a=[],o=e.getFieldspace(),u=t.getFieldspace(),c=o.fieldsObj(),f=u.fieldsObj(),s=o.name+\" union \"+u.name;if(!M(e._colIdentifier.split(\",\").sort(),t._colIdentifier.split(\",\").sort()))return null;function d(e,t){l(e._rowDiffset,function(e){var r={},o=\"\";i.forEach(function(n){var i=t[n].data[e];o+=\"-\"+i,r[n]=i}),n[o]||(a.push(r),n[o]=!0)})}return e._colIdentifier.split(\",\").forEach(function(e){var t=c[e];r.push(E({},t.schema)),i.push(t.schema.name)}),d(e,c),d(t,f),new yt(a,r,{name:s})}function ve(e,t,n){return W(e,t,n,!1,G.LEFTOUTER)}function me(e,t,n){return W(t,e,n,!1,G.RIGHTOUTER)}var ye=function(){function e(e,t){for(var n=0;nn&&(n=e)}),[t,n]}(this.data)}},{key:\"parse\",value:function(e){return e=parseFloat(e,10),Number.isNaN(e)?null:e}},{key:\"unit\",value:function(){return this.fieldUnit}},{key:\"scale\",value:function(){return this.fieldScale}},{key:\"numberFormat\",value:function(){var e=this.fieldNumberformat;return function(t){return e(t)}}},{key:\"defAggFn\",value:function(){return this.fieldDefAggFn}}]),t}(),Oe=function(){function e(e,t){for(var n=0;n=a?c=!0:(r=e.charCodeAt(o++))===Pe?f=!0:r===Ce&&(f=!0,e.charCodeAt(o)===Pe&&++o),e.slice(i+1,t-1).replace(/\"\"/g,'\"')}for(;o2&&void 0!==arguments[2]?arguments[2]:{},i=arguments[3],a=void 0;t!==Y?(a={op:t,meta:r,criteria:i},e._derivation.push(a)):(a=[].concat(Ge(i)),e._derivation.length=0,(n=e._derivation).push.apply(n,Ge(a)))},ze=function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=n.operation||q,i=n.filterByMeasure||!1,a=[];a=t.length?t.map(function(e){return function(e){var t=e.getData(),n=t.schema,r=e.getFieldsConfig(),a=e.getFieldspace().fieldsObj(),o=t.data,u=Object.values(r).reduce(function(e,t){return e[t.def.name]=a[t.def.name].domain(),e},{});return function(e){return!!o.length&&o.some(function(t){return n.every(function(n){if(!(n.name in e))return!0;var a=e[n.name].valueOf();if(i&&n.type===f.MEASURE)return a>=u[n.name][0]&&a<=u[n.name][1];if(n.type!==f.DIMENSION)return!0;var o=r[n.name].index;return t[o]===e[n.name].valueOf()})})}}(e)}):[function(){return!1}];var o=void 0;r===q?o=e.clone(!1,!1).select(function(e){return a.every(function(t){return t(e)})},{saveChild:!1,mode:s.ALL}):o=e.clone(!1,!1).select(function(e){return a.some(function(t){return t(e)})},{mode:s.ALL,saveChild:!1});return o},Xe=function(e,t,n,r){var i=e.clone(r.saveChild),a=function(e,t,n,r){var i=[],a=-1,o=void 0,u=function(e){return n(qe(t,e),e)};return r.mode===s.INVERSE&&(u=function(e){return!n(qe(t,e))}),l(e,function(e){u(e)&&(-1!==a&&e===a+1?(o=i.length-1,i[o]=i[o].split(\"-\")[0]+\"-\"+e):i.push(\"\"+e),a=e)}),i.join(\",\")}(i._rowDiffset,i.getPartialFieldspace().fields,t,n);return i._rowDiffset=a,i.__calculateFieldspace().calculateFieldsConfig(),r.saveChild&&We(i,U,{config:n},t),i},Qe=function(e,t,n,r){var i=e.clone(n.saveChild),a=t;return n.mode===s.INVERSE&&(a=r.filter(function(e){return-1===t.indexOf(e)})),i._colIdentifier=a.join(\",\"),i.__calculateFieldspace().calculateFieldsConfig(),n.saveChild&&We(i,H,{projField:t,config:n,actualProjField:a},null),i},$e=function(e,t,n,r){r=Object.assign(Object.assign({},xe),r);var a=i[r.dataFormat];if(!a||\"function\"!=typeof a)throw new Error(\"No converter function found for \"+r.dataFormat+\" format\");var o=a(t,r),u=Je(o,2),c=u[0],f=u[1],s=Fe(f,n,c),l=R.createNamespace(s,r.name);return e._partialFieldspace=l,e._rowDiffset=f.length&&f[0].length?\"0-\"+(f[0].length-1):\"\",e._colIdentifier=n.map(function(e){return e.name}).join(),e},Ze=function(e,t){for(var n=0;n2&&void 0!==arguments[2]?arguments[2]:{},i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},a=i.nonTraversingModel,o=i.excludeModels||[];t!==a&&((!o.length||-1===o.indexOf(t))&&t.handlePropagation(n,r),t._children.forEach(function(t){var a=et(n,t),o=Je(a,2),u=o[0],c=o[1];e(t,[u,c],r,i)}))},nt=function(e,t,n,r){var i=void 0,a=void 0,o=n.propagationNameSpace,u=n.propagateToSource,c=n.sourceId,f=r.propagateInterpolatedValues,s=[];if(null===e&&!0!==r.persistent)s=[{criteria:[]}];else{var l,d=Object.values(o.mutableActions);!1!==u&&(d=d.filter(function(e){return e.config.sourceId!==c}));var p=d.filter(function(e){return(r.filterFn||function(){return!0})(e,r)}).map(function(e){return e.config.criteria}),h=[];if(!1!==u){var v=Object.values(o.mutableActions);v.forEach(function(e){var t=e.config;!1===t.applyOnSource&&t.action===r.action&&t.sourceId!==c&&(h.push(e.model),(i=v.filter(function(t){return t!==e}).map(function(e){return e.config.criteria})).length&&s.push({criteria:i,models:e.model,path:function e(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];return null!==t._parent&&(n.push(t),e(t._parent,n)),n}(e.model)}))})}i=(l=[]).concat.apply(l,[].concat(Ge(p),[e])).filter(function(e){return null!==e}),s.push({criteria:i,excludeModels:[].concat(h,Ge(r.excludeModels||[]))})}var m=t.model,y=Object.assign({sourceIdentifiers:e,propagationSourceId:c},r),g=t.groupByModel;f&&g&&(a=ze(g,i,{filterByMeasure:f}),tt(g,a,y)),s.forEach(function(e){var t=ze(m,e.criteria),n=e.path;if(n){var r=function(e,t){for(var n=0,r=t.length;n0&&void 0!==arguments[0])||arguments[0],t=void 0;if(!1===(!(arguments.length>1&&void 0!==arguments[1])||arguments[1])){var n=this.getData({getAllFields:!0}),r=n.data,i=n.schema,a=r.map(function(e){var t={};return i.forEach(function(n,r){t[n.name]=e[r]}),t});t=new this.constructor(a,i)}else t=new this.constructor(this);return e&&this._children.push(t),t}},{key:\"project\",value:function(e,t){var n={mode:s.NORMAL,saveChild:!0};t=Object.assign({},n,t);var r=this.getFieldsConfig(),i=Object.keys(r),a=t.mode,o=e.reduce(function(e,t){return\"RegExp\"===t.constructor.name?e.push.apply(e,function(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t1&&void 0!==arguments[1]?arguments[1]:[];We(this,Y,null,t),this._parent=e,e._children.push(this)}}]),e}(),at=function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function(e,t){var n=[],r=!0,i=!1,a=void 0;try{for(var o,u=e[Symbol.iterator]();!(r=(o=u.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){i=!0,a=e}finally{try{!r&&u.return&&u.return()}finally{if(i)throw a}}return n}(e,t);throw new TypeError(\"Invalid attempt to destructure non-iterable instance\")}}(),ot=function(){function e(e,t){for(var n=0;n1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{saveChild:!0},r=\"\"+e.join(),i=[this,e,t],a=de.apply(void 0,i);return n.saveChild&&(this._children.push(a),We(a,V,{fieldsArr:e,groupByString:r,defaultReducer:se.defaultReducer()},t)),a._parent=this,a}},{key:\"sort\",value:function(e){var t=this.getData({order:\"row\",sort:e}),n=[t.schema.map(function(e){return e.name})].concat(t.data),r=new this.constructor(n,t.schema,{dataFormat:\"DSVArr\"});return r._sortingDetails=e,r}},{key:\"addField\",value:function(e){var t=e.fieldName();this._colIdentifier+=\",\"+t;var n=this._partialFieldspace;if(n.fieldsObj()[e.fieldName()]){var r=n.fields.findIndex(function(e){return e.name===t});r>=0&&(n.fields[r]=e)}else n.fields.push(e);return this.__calculateFieldspace().calculateFieldsConfig(),this}},{key:\"calculateVariable\",value:function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{saveChild:!0,replaceVar:!1},r=this.getFieldsConfig(),i=t.slice(0,t.length-1),a=t[t.length-1];if(r[e.name]&&!n.replaceVar)throw new Error(e.name+\" field already exists in model.\");var o=i.map(function(e){var t=r[e];if(!t)throw new Error(e+\" is not a valid column name.\");return t.index}),u=this.clone(),c=u.getFieldspace().fields,f=o.map(function(e){return c[e]}),s=[];l(u._rowDiffset,function(e){var t=f.map(function(t){return t.data[e]});s[e]=a.apply(void 0,function(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t1&&void 0!==arguments[1]?arguments[1]:{},n=arguments[2],r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},i=t.isMutableAction,a=t.sourceId,o=t.payload,u=function e(t){return t._parent?e(t._parent):t}(this),c=u._propagationNameSpace,f={groupByModel:function e(t){return t._parent&&t._derivation.find(function(e){return\"group\"!==e.op})?e(t._parent):t}(this),model:u};return n&&function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments[2],r=void 0,i=t.isMutableAction,a=t.criteria,o=t.action+\"-\"+t.sourceId;r=i?e.mutableActions:e.immutableActions,null===a?delete r[o]:r[o]={model:n,config:t}}(c,t,this),nt(e,f,{propagationNameSpace:c,sourceId:a},Object.assign({payload:o},t)),i&&function(e,t,n){var r=e.immutableActions;for(var i in r){var a=r[i].config,o=n.config.sourceId,u=!n.propConfig.filterImmutableAction||n.propConfig.filterImmutableAction(a,n.config);if(a.sourceId!==o&&u){var c=a.criteria;nt(c,t,{propagationNameSpace:e,propagateToSource:!1,sourceId:o},a)}}}(c,f,{config:t,propConfig:r}),this}},{key:\"on\",value:function(e,t){switch(e){case\"propagation\":this._onPropagation.push(t)}return this}},{key:\"unsubscribe\",value:function(e){switch(e){case\"propagation\":this._onPropagation=[]}return this}},{key:\"handlePropagation\",value:function(e,t){var n=this;this._onPropagation.forEach(function(r){return r.call(n,e,t)})}},{key:\"bin\",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=this.clone(),r=t.name||e+\"_binned\";if(this.getFieldsConfig()[r]||!this.getFieldsConfig()[e])throw new Error(\"Field \"+e+\" already exists.\");var i=I(this._partialFieldspace.fields.find(function(t){return t.name===e}),this._rowDiffset,t),a=Fe([i.data],[{name:r,type:f.MEASURE,subtype:\"discrete\",bins:{range:i.range,mid:i.mid}}],[r])[0];return n.addField(a),We(n,J,{measureName:e,config:t,binFieldName:r},null),n}}],[{key:\"Reducers\",get:function(){return se}}]),t}(),ct=oe.sum,ft=oe.avg,st=oe.min,lt=oe.max,dt=oe.first,pt=oe.last,ht=oe.count,vt=oe.std,mt=n(0);ut.Operators={compose:function(){for(var e=arguments.length,t=Array(e),n=0;n1&&void 0!==arguments[1]?arguments[1]:{saveChild:!0}).saveChild;return t.forEach(function(e){n=e(n),i.push.apply(i,function(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t1&&r.dispose(),n}},bin:function(){for(var e=arguments.length,t=Array(e),n=0;n2?(i=arguments.length<=0?void 0:arguments[0],n=arguments.length<=1?void 0:arguments[1],o=arguments.length<=2?void 0:arguments[2]):(i=null,n=arguments.length<=0?void 0:arguments[0],o=arguments.length<=1?void 0:arguments[1]),t=o(y),(e=r=new _(t.fn)).addDependencies.apply(e,P(t.dependencies)),this._addPropInModel(i,function(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}({},n,r)),this}},{key:\"_addPropInModel\",value:function(e,t){return this._graph.createNodesFrom(t,e),this}},{key:\"on\",value:function(e,t,r){var n,i=e instanceof Array?e:[e],o=this._graph.createElectricNodeOf(i,{type:\"CurrFrame\",fn:t});r&&(n=this._graph.stopPropagation().setPropagationOverride(\"nextFrame\")).resetNodeValue.apply(n,P(e));return o}},{key:\"next\",value:function(e,t,r){var n,i=e instanceof Array?e:[e],o=this._graph.createElectricNodeOf(i,{type:\"NextFrame\",fn:t});r&&(n=this._graph.stopPropagation().setPropagationOverride(\"currentFrame\")).resetNodeValue.apply(n,P(e));return o}},{key:\"lock\",value:function(){return this._lockFlag=!0,this._reqQ.length=0,this}},{key:\"unlock\",value:function(){return this._lockFlag=!1,this.setProp.apply(this,P(this._reqQ)),this._reqQ.length=0,this}},{key:\"prop\",value:function(){var e,t=void 0,r=void 0;switch(e=arguments.length){case 1:t=arguments.length<=0?void 0:arguments[0];break;case 2:t=arguments.length<=0?void 0:arguments[0],r=arguments.length<=1?void 0:arguments[1];break;default:return this}return 2===e?(this._lockFlag?this._reqQ.push([t,r]):this.setProp([t,r]),this):this._graph.getNodeValue(t)}},{key:\"setProp\",value:function(){for(var e,t=this,r=arguments.length,n=Array(r),i=0;i whenever a break is necessary. This is to recgonize one\n * generalized format independent of the implementation (canvas based solution, svg based solution). This method\n * converts the output of getSmartText().text to array of lines if the text is wrapped. It sets a named property\n * `lines` on the object passed as parameter.\n *\n * @param {Object} smartlabel - the object returned by getSmartText based on which line arr which to be formed.\n *\n * @return {Object} - The same object which was passed in the arguments. Also a named property `lines` is set.\n */\nSmartLabelManager.textToLines = function (smartlabel) {\n smartlabel = smartlabel || {};\n\n if (!smartlabel.text) {\n smartlabel.text = '';\n } else if (typeof smartlabel.text !== 'string') {\n smartlabel.text = smartlabel.text.toString();\n }\n\n smartlabel.lines = smartlabel.text.split(/\\n|/ig);\n return smartlabel;\n};\n\n// Saves all the instance created so far\nSmartLabelManager.store = {};\n\n// Calculates space taken by a character with an approximation value which is calculated by repeating the\n// character by string length times.\nSmartLabelManager.prototype._calCharDimWithCache = function (text, calculateDifference, length) {\n if (!this._init) {\n return false;\n }\n\n var size,\n csArr,\n tw,\n twi,\n cachedStyle,\n asymmetricDifference,\n maxAdvancedCacheLimit = this.options.maxCacheLimit,\n container = this._container,\n style = this.style || {},\n cache = this._advancedCache || (this._advancedCache = {}),\n advancedCacheKey = this._advancedCacheKey || (this._advancedCacheKey = []),\n cacheName = text + (style.fontSize || BLANK) + (style.fontFamily || BLANK) + (style.fontWeight || BLANK) + (style.fontStyle || BLANK),\n cacheInitName = text + 'init' + (style.fontSize || BLANK) + (style.fontFamily || BLANK) + (style.fontWeight || BLANK) + (style.fontStyle || BLANK);\n\n htmlSplCharSpace[text] && (text = htmlSplCharSpace[text]);\n\n if (!calculateDifference) {\n asymmetricDifference = 0;\n } else {\n if ((asymmetricDifference = cache[cacheInitName]) === undefined) {\n container.innerHTML = text.repeat ? text.repeat(length) : Array(length + 1).join(text); // jshint ignore:line\n tw = container.offsetWidth;\n\n container.innerHTML = text;\n twi = container.offsetWidth;\n\n asymmetricDifference = cache[cacheInitName] = (tw - length * twi) / (length + 1);\n advancedCacheKey.push(cacheInitName);\n if (advancedCacheKey.length > maxAdvancedCacheLimit) {\n delete cache[advancedCacheKey.shift()];\n }\n }\n }\n\n if (cachedStyle = cache[cacheName]) {\n csArr = cachedStyle.split(',');\n return {\n width: parseFloat(csArr[0], 10),\n height: parseFloat(csArr[1], 10)\n };\n }\n\n container.innerHTML = text;\n\n size = {\n height: container.offsetHeight,\n width: container.offsetWidth + asymmetricDifference\n };\n\n cache[cacheName] = size.width + ',' + size.height;\n advancedCacheKey.push(cacheName);\n if (advancedCacheKey.length > maxAdvancedCacheLimit) {\n delete cache[advancedCacheKey.shift()];\n }\n\n return size;\n};\n\n// Provide function to calculate the height and width based on the environment and available support from dom.\nSmartLabelManager.prototype._getWidthFn = function () {\n var contObj = this._containerObj,\n container = this._container,\n svgText = contObj.svgText;\n\n if (svgText) {\n return function (str) {\n var bbox, width;\n\n svgText.textContent = str;\n bbox = svgText.getBBox();\n width = bbox.width - SVG_BBOX_CORRECTION;\n if (width < 1) {\n width = bbox.width;\n }\n\n return width;\n };\n } else {\n return function (str) {\n container.innerHTML = str;\n return container.offsetWidth;\n };\n }\n};\n\n/*\n * Sets the style based on which the text's metrics to be calculated.\n *\n * @param {Object} style - The style object which affects the text size\n * {\n * fontSize / 'font-size' : MUST BE FOLLOWED BY PX (10px, 11px)\n * fontFamily / 'font-family'\n * fontWeight / 'font-weight'\n * fontStyle / 'font-style'\n * }\n *\n * @return {SmartLabelManager} - Current instance of SmartLabelManager\n */\nSmartLabelManager.prototype.setStyle = function (style) {\n if (!this._init) {\n return this;\n }\n\n var sCont;\n\n if (style === this.style && !this._styleNotSet) {\n return;\n }\n\n if (!style) {\n style = this.style;\n }\n\n slLib.setLineHeight(style);\n this.style = style;\n\n this._containerObj = sCont = this._containerManager.get(style);\n\n if (this._containerObj) {\n this._container = sCont.node;\n this._context = sCont.context;\n this._cache = sCont.charCache;\n this._lineHeight = sCont.lineHeight;\n this._styleNotSet = false;\n } else {\n this._styleNotSet = true;\n }\n\n return this;\n};\n\n/*\n * Decides whether ellipses to be shown if the node is truncated\n *\n * @param {Boolean} useEllipses - decides if a ellipses to be appended if the text is truncated. Default: false\n *\n * @return {SmartLabelManager} - Current instance of SmartLabelManager\n */\nSmartLabelManager.prototype.useEllipsesOnOverflow = function (useEllipses) {\n if (!this._init) {\n return this;\n }\n this._showNoEllipses = !useEllipses;\n return this;\n};\n\n/*\n * Get wrapped or truncated text if a bound box is defined around it. The result text would be separated by
\n * if wrapped\n *\n * @param {String} text - the subject text\n * @param {Number} maxWidth - width in px of the the bound box\n * @param {Number} maxHeight - height in px of the the bound box\n * @param {Boolean} noWrap - whether the text to be wrapped. Default false.\n *\n * @return {Object} - The metrics of the text bounded by the box\n * {\n * height : height of the wrapped text\n * width : width of the wrapped text\n * isTruncated : whether the text is truncated\n * maxHeight : Maximum height given\n * maxWidth : Maximum width given\n * oriText : Original text sent\n * oriTextHeight : Original text height\n * oriTextWidth : Original text width\n * text : SMART TEXT\n * }\n */\nSmartLabelManager.prototype.getSmartText = function (text, maxWidth, maxHeight, noWrap) {\n if (!this._init) {\n return false;\n }\n\n if (text === undefined || text === null) {\n text = '';\n } else if (typeof text !== 'string') {\n text = text.toString();\n }\n\n var len,\n trimStr,\n tempArr,\n tmpText,\n maxWidthWithEll,\n toolText,\n oriWidth,\n oriHeight,\n newCharIndex,\n nearestChar,\n tempChar,\n getWidth,\n initialLeft,\n initialTop,\n getOriSizeImproveObj,\n spanArr,\n x,\n y,\n minWidth,\n elem,\n chr,\n elemRightMostPoint,\n elemLowestPoint,\n lastBR,\n removeFromIndex,\n removeFromIndexForEllipses,\n hasHTMLTag = false,\n maxStrWidth = 0,\n lastDash = -1,\n lastSpace = -1,\n lastIndexBroken = -1,\n strWidth = 0,\n strHeight = 0,\n oriTextArr = [],\n i = 0,\n ellipsesStr = this._showNoEllipses ? '' : '...',\n lineHeight = this._lineHeight,\n context = this._context,\n container = this._container,\n sCont = this._containerObj,\n ellipsesWidth = sCont.ellipsesWidth,\n dotWidth = sCont.dotWidth,\n characterArr = [],\n dashIndex = -1,\n spaceIndex = -1,\n lastLineBreak = -1,\n fastTrim = function fastTrim(str) {\n str = str.replace(/^\\s\\s*/, '');\n var ws = /\\s/,\n i = str.length;\n while (ws.test(str.charAt(i -= 1))) {/* jshint noempty:false */}\n return str.slice(0, i + 1);\n },\n smartLabel = {\n text: text,\n maxWidth: maxWidth,\n maxHeight: maxHeight,\n width: null,\n height: null,\n oriTextWidth: null,\n oriTextHeight: null,\n oriText: text,\n isTruncated: false\n };\n\n getWidth = this._getWidthFn();\n\n // In some browsers, offsetheight of a single-line text is getting little (1 px) heigher value of the\n // lineheight. As a result, smartLabel is unable to return single-line text.\n // To fix this, increase the maxHeight a little amount. Hence maxHeight = lineHeight * 1.2\n if (maxHeight === lineHeight) {\n maxHeight *= 1.2;\n }\n\n if (container) {\n if (!documentSupport.isBrowserLess) {\n hasHTMLTag = slLib.xmlTagRegEx.test(text);\n if (!hasHTMLTag) {\n // Due to support of <,> for xml we convert <, > to <,> respectively so to get the correct\n // width it is required to convert the same before calculation for the new improve version of the\n // get text width.\n tmpText = text.replace(slLib.ltgtRegex, function (match) {\n return match === '<' ? '<' : '>';\n });\n getOriSizeImproveObj = this.getOriSize(tmpText, true);\n\n smartLabel.oriTextWidth = oriWidth = getOriSizeImproveObj.width;\n smartLabel.oriTextHeight = oriHeight = getOriSizeImproveObj.height;\n } else {\n container.innerHTML = text;\n smartLabel.oriTextWidth = oriWidth = container.offsetWidth;\n smartLabel.oriTextHeight = oriHeight = container.offsetHeight;\n }\n\n if (oriHeight <= maxHeight && oriWidth <= maxWidth) {\n smartLabel.width = smartLabel.oriTextWidth = oriWidth;\n smartLabel.height = smartLabel.oriTextHeight = oriHeight;\n return smartLabel;\n }\n\n if (lineHeight > maxHeight) {\n smartLabel.text = '';\n smartLabel.width = smartLabel.oriTextWidth = 0;\n smartLabel.height = smartLabel.oriTextHeight = 0;\n return smartLabel;\n }\n }\n\n // Calculate width with ellipses\n text = fastTrim(text).replace(/(\\s+)/g, ' ');\n maxWidthWithEll = this._showNoEllipses ? maxWidth : maxWidth - ellipsesWidth;\n\n if (!hasHTMLTag) {\n oriTextArr = text.split('');\n len = oriTextArr.length;\n trimStr = '', tempArr = [];\n tempChar = oriTextArr[0];\n\n if (this._cache[tempChar]) {\n minWidth = this._cache[tempChar].width;\n } else {\n minWidth = getWidth(tempChar);\n this._cache[tempChar] = { width: minWidth };\n }\n\n if (maxWidthWithEll > minWidth) {\n tempArr = text.substr(0, slLib.getNearestBreakIndex(text, maxWidthWithEll, this)).split('');\n i = tempArr.length;\n } else if (minWidth > maxWidth) {\n smartLabel.text = '';\n smartLabel.width = smartLabel.oriTextWidth = smartLabel.height = smartLabel.oriTextHeight = 0;\n return smartLabel;\n } else if (ellipsesStr) {\n maxWidthWithEll = maxWidth - 2 * dotWidth;\n if (maxWidthWithEll > minWidth) {\n ellipsesStr = '..';\n } else {\n maxWidthWithEll = maxWidth - dotWidth;\n if (maxWidthWithEll > minWidth) {\n ellipsesStr = '.';\n } else {\n maxWidthWithEll = 0;\n ellipsesStr = '';\n }\n }\n }\n\n strWidth = getWidth(tempArr.join(''));\n strHeight = this._lineHeight;\n\n if (noWrap) {\n for (; i < len; i += 1) {\n tempChar = tempArr[i] = oriTextArr[i];\n if (this._cache[tempChar]) {\n minWidth = this._cache[tempChar].width;\n } else {\n if (!getOriSizeImproveObj || !(minWidth = getOriSizeImproveObj.detailObj[tempChar])) {\n minWidth = getWidth(tempChar);\n }\n this._cache[tempChar] = {\n width: minWidth\n };\n }\n strWidth += minWidth;\n if (strWidth > maxWidthWithEll) {\n if (!trimStr) {\n trimStr = tempArr.slice(0, -1).join('');\n }\n if (strWidth > maxWidth) {\n smartLabel.text = fastTrim(trimStr) + ellipsesStr;\n smartLabel.tooltext = smartLabel.oriText;\n smartLabel.width = getWidth(smartLabel.text);\n smartLabel.height = this._lineHeight;\n return smartLabel;\n }\n }\n }\n\n smartLabel.text = tempArr.join('');\n smartLabel.width = strWidth;\n smartLabel.height = this._lineHeight;\n return smartLabel;\n } else {\n for (; i < len; i += 1) {\n tempChar = tempArr[i] = oriTextArr[i];\n if (tempChar === ' ' && !context) {\n tempChar = ' ';\n }\n\n if (this._cache[tempChar]) {\n minWidth = this._cache[tempChar].width;\n } else {\n if (!getOriSizeImproveObj || !(minWidth = getOriSizeImproveObj.detailObj[tempChar])) {\n minWidth = getWidth(tempChar);\n }\n this._cache[tempChar] = {\n width: minWidth\n };\n }\n strWidth += minWidth;\n\n if (strWidth > maxWidthWithEll) {\n if (!trimStr) {\n trimStr = tempArr.slice(0, -1).join('');\n }\n if (strWidth > maxWidth) {\n /** @todo use regular expressions for better performance. */\n lastSpace = text.substr(0, tempArr.length).lastIndexOf(' ');\n lastDash = text.substr(0, tempArr.length).lastIndexOf('-');\n if (lastSpace > lastIndexBroken) {\n strWidth = getWidth(tempArr.slice(lastIndexBroken + 1, lastSpace).join(''));\n tempArr.splice(lastSpace, 1, '
');\n lastIndexBroken = lastSpace;\n newCharIndex = lastSpace + 1;\n } else if (lastDash > lastIndexBroken) {\n if (lastDash === tempArr.length - 1) {\n strWidth = getWidth(tempArr.slice(lastIndexBroken + 1, lastSpace).join(''));\n tempArr.splice(lastDash, 1, '
-');\n } else {\n strWidth = getWidth(tempArr.slice(lastIndexBroken + 1, lastSpace).join(''));\n tempArr.splice(lastDash, 1, '-
');\n }\n lastIndexBroken = lastDash;\n newCharIndex = lastDash + 1;\n } else {\n tempArr.splice(tempArr.length - 1, 1, '
' + oriTextArr[i]);\n lastLineBreak = tempArr.length - 2;\n strWidth = getWidth(tempArr.slice(lastIndexBroken + 1, lastLineBreak + 1).join(''));\n lastIndexBroken = lastLineBreak;\n newCharIndex = i;\n }\n strHeight += this._lineHeight;\n if (strHeight > maxHeight) {\n smartLabel.text = fastTrim(trimStr) + ellipsesStr;\n smartLabel.tooltext = smartLabel.oriText;\n // The max width among all the lines will be the width of the string.\n smartLabel.width = maxWidth;\n smartLabel.height = strHeight - this._lineHeight;\n return smartLabel;\n } else {\n maxStrWidth = max(maxStrWidth, strWidth);\n trimStr = null;\n nearestChar = slLib.getNearestBreakIndex(text.substr(newCharIndex), maxWidthWithEll, this);\n strWidth = getWidth(text.substr(newCharIndex, nearestChar || 1));\n if (tempArr.length < newCharIndex + nearestChar) {\n tempArr = tempArr.concat(text.substr(tempArr.length, newCharIndex + nearestChar - tempArr.length).split(''));\n i = tempArr.length - 1;\n }\n }\n }\n }\n }\n\n maxStrWidth = max(maxStrWidth, strWidth);\n\n smartLabel.text = tempArr.join('');\n smartLabel.width = maxStrWidth;\n smartLabel.height = strHeight;\n return smartLabel;\n }\n } else {\n toolText = text.replace(slLib.spanAdditionRegx, '$2');\n text = text.replace(slLib.spanAdditionRegx, slLib.spanAdditionReplacer);\n text = text.replace(/()/g, '$1');\n\n container.innerHTML = text;\n\n spanArr = container[documentSupport.childRetriverFn](documentSupport.childRetriverString);\n\n for (x = 0, y = spanArr.length; x < y; x += 1) {\n elem = spanArr[x];\n //chech whether this span is temporary inserted span from it's class\n if (documentSupport.noClassTesting || slLib.classNameReg.test(elem.className)) {\n chr = elem.innerHTML;\n if (chr !== '') {\n if (chr === ' ') {\n spaceIndex = characterArr.length;\n } else if (chr === '-') {\n dashIndex = characterArr.length;\n }\n\n characterArr.push({\n spaceIdx: spaceIndex,\n dashIdx: dashIndex,\n elem: elem\n });\n oriTextArr.push(chr);\n }\n }\n }\n\n i = 0;\n len = characterArr.length;\n minWidth = characterArr[0].elem.offsetWidth;\n\n if (minWidth > maxWidth) {\n smartLabel.text = '';\n smartLabel.width = smartLabel.oriTextWidth = smartLabel.height = smartLabel.oriTextHeight = 0;\n\n return smartLabel;\n } else if (minWidth > maxWidthWithEll && !this._showNoEllipses) {\n\n maxWidthWithEll = maxWidth - 2 * dotWidth;\n if (maxWidthWithEll > minWidth) {\n ellipsesStr = '..';\n } else {\n maxWidthWithEll = maxWidth - dotWidth;\n if (maxWidthWithEll > minWidth) {\n ellipsesStr = '.';\n } else {\n maxWidthWithEll = 0;\n ellipsesStr = '';\n }\n }\n }\n\n initialLeft = characterArr[0].elem.offsetLeft;\n initialTop = characterArr[0].elem.offsetTop;\n\n if (noWrap) {\n for (; i < len; i += 1) {\n elem = characterArr[i].elem;\n elemRightMostPoint = elem.offsetLeft - initialLeft + elem.offsetWidth;\n\n if (elemRightMostPoint > maxWidthWithEll) {\n if (!removeFromIndexForEllipses) {\n removeFromIndexForEllipses = i;\n }\n if (container.offsetWidth > maxWidth) {\n removeFromIndex = i;\n i = len;\n }\n }\n }\n } else {\n for (; i < len; i += 1) {\n elem = characterArr[i].elem;\n elemLowestPoint = elem.offsetHeight + (elem.offsetTop - initialTop);\n elemRightMostPoint = elem.offsetLeft - initialLeft + elem.offsetWidth;\n\n lastBR = null;\n\n if (elemRightMostPoint > maxWidthWithEll) {\n if (!removeFromIndexForEllipses) {\n removeFromIndexForEllipses = i;\n }\n\n if (elemRightMostPoint > maxWidth) {\n lastSpace = characterArr[i].spaceIdx;\n lastDash = characterArr[i].dashIdx;\n if (lastSpace > lastIndexBroken) {\n characterArr[lastSpace].elem.innerHTML = '
';\n lastIndexBroken = lastSpace;\n } else if (lastDash > lastIndexBroken) {\n if (lastDash === i) {\n // in case the overflowing character itself is the '-'\n characterArr[lastDash].elem.innerHTML = '
-';\n } else {\n characterArr[lastDash].elem.innerHTML = '-
';\n }\n lastIndexBroken = lastDash;\n } else {\n elem.parentNode.insertBefore(lastBR = doc.createElement('br'), elem);\n }\n\n //check whether this break made current element outside the area height\n if (elem.offsetHeight + elem.offsetTop > maxHeight) {\n //remove the lastly inserted line break\n if (lastBR) {\n lastBR.parentNode.removeChild(lastBR);\n } else if (lastIndexBroken === lastDash) {\n characterArr[lastDash].elem.innerHTML = '-';\n } else {\n characterArr[lastSpace].elem.innerHTML = ' ';\n }\n removeFromIndex = i;\n //break the looping condition\n i = len;\n } else {\n removeFromIndexForEllipses = null;\n }\n }\n } else {\n //check whether this break made current element outside the area height\n if (elemLowestPoint > maxHeight) {\n removeFromIndex = i;\n i = len;\n }\n }\n }\n }\n\n if (removeFromIndex < len) {\n //set the trancated property of the smartlabel\n smartLabel.isTruncated = true;\n\n /** @todo is this really needed? */\n removeFromIndexForEllipses = removeFromIndexForEllipses ? removeFromIndexForEllipses : removeFromIndex;\n\n for (i = len - 1; i >= removeFromIndexForEllipses; i -= 1) {\n elem = characterArr[i].elem;\n //chech whether this span is temporary inserted span from it's class\n elem.parentNode.removeChild(elem);\n }\n\n for (; i >= 0; i -= 1) {\n elem = characterArr[i].elem;\n if (slLib.classNameBrReg.test(elem.className)) {\n //chech whether this span is temporary inserted span from it's class\n elem.parentNode.removeChild(elem);\n } else {\n i = 0;\n }\n }\n }\n\n //get the smart text\n smartLabel.text = container.innerHTML.replace(slLib.spanRemovalRegx, '$1').replace(/\\&\\;/g, '&');\n if (smartLabel.isTruncated) {\n smartLabel.text += ellipsesStr;\n smartLabel.tooltext = toolText;\n }\n }\n\n smartLabel.height = container.offsetHeight;\n smartLabel.width = container.offsetWidth;\n\n return smartLabel;\n } else {\n smartLabel.error = new Error('Body Tag Missing!');\n return smartLabel;\n }\n};\n\n/*\n * Get the height and width of a text.\n *\n * @param {String} text - Text whose metrics to be measured\n * @param {Boolean} Optional detailedCalculationFlag - this flag if set it calculates per letter position\n * information and returns it. Ideally you dont need it unless you want to post process the\n * string. And its an EXPENSIVE OPERATION.\n *\n * @return {Object} - If detailedCalculationFlag is set to true the returned object would be\n * {\n * height: height of the text\n * width: width of the text\n * detailObj: detail calculation of letters in the format {lettername: width}\n * }\n * If detailedCalculationFlag is set to false the returned object wont have the detailObj prop.\n */\nSmartLabelManager.prototype.getOriSize = function (text, detailedCalculationFlag) {\n if (!this._init) {\n return false;\n }\n\n var textArr,\n letter,\n lSize,\n i,\n l,\n cumulativeSize = 0,\n height = 0,\n indiSizeStore = {};\n\n if (!detailedCalculationFlag) {\n return this._calCharDimWithCache(text);\n }\n\n // Calculate the width of every letter with an approximation\n textArr = text.split('');\n for (i = 0, l = textArr.length; i < l; i++) {\n letter = textArr[i];\n lSize = this._calCharDimWithCache(letter, true, textArr.length);\n height = max(height, lSize.height);\n cumulativeSize += lSize.width;\n indiSizeStore[letter] = lSize.width;\n }\n\n return {\n width: round(cumulativeSize),\n height: height,\n detailObj: indiSizeStore\n };\n};\n\n/*\n * Dispose the container and object allocated by the smartlabel\n */\nSmartLabelManager.prototype.dispose = function () {\n if (!this._init) {\n return this;\n }\n\n this._containerManager && this._containerManager.dispose && this._containerManager.dispose();\n\n delete this._container;\n delete this._context;\n delete this._cache;\n delete this._containerManager;\n delete this._containerObj;\n delete this.id;\n delete this.style;\n delete this.parentContainer;\n delete this._showNoEllipses;\n\n return this;\n};\n\nexports['default'] = SmartLabelManager;\nmodule.exports = exports['default'];","'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n\tvalue: true\n});\nvar lib = {\n\tinit: function init(win) {\n\t\tvar doc = win.document,\n\t\t nav = win.navigator,\n\t\t userAgent = nav.userAgent,\n\t\t DIV = 'DIV',\n\t\t ceil = Math.ceil,\n\t\t floor = Math.floor,\n\t\t containerInstanceCount = 0,\n\t\t clsNameSpace = 'fusioncharts-smartlabel-',\n\t\t containerClass = clsNameSpace + 'container',\n\t\t classNameWithTag = clsNameSpace + 'tag',\n\t\t classNameWithTagBR = clsNameSpace + 'br';\n\n\t\tlib = {\n\t\t\twin: win,\n\n\t\t\tcontainerClass: containerClass,\n\n\t\t\tclassNameWithTag: classNameWithTag,\n\n\t\t\tclassNameWithTagBR: classNameWithTagBR,\n\n\t\t\tmaxDefaultCacheLimit: 500,\n\n\t\t\tclassNameReg: new RegExp('\\b' + classNameWithTag + '\\b'),\n\n\t\t\tclassNameBrReg: new RegExp('\\b' + classNameWithTagBR + '\\b'),\n\n\t\t\tspanAdditionRegx: /(<[^<\\>]+?\\>)|(&(?:[a-z]+|#[0-9]+);|.)/ig,\n\n\t\t\tspanAdditionReplacer: '$1$2',\n\n\t\t\tspanRemovalRegx: new RegExp('\\\\]+?' + classNameWithTag + '[^\\\\>]{0,}\\\\>(.*?)\\\\<\\\\/span\\\\>', 'ig'),\n\n\t\t\txmlTagRegEx: new RegExp('<[^>][^<]*[^>]+>', 'i'),\n\n\t\t\tltgtRegex: /<|>/g,\n\n\t\t\tbrReplaceRegex: //ig,\n\n\t\t\ttestStrAvg: 'WgI',\n\n\t\t\t// This style is applied over the parent smartlabel container. The container is kept hidden from the viewport\n\t\t\tparentContainerStyle: {\n\t\t\t\tposition: 'absolute',\n\t\t\t\ttop: '-9999em',\n\t\t\t\twhiteSpace: 'nowrap',\n\t\t\t\tpadding: '0px',\n\t\t\t\twidth: '1px',\n\t\t\t\theight: '1px',\n\t\t\t\toverflow: 'hidden'\n\t\t\t},\n\n\t\t\t// All the style which might affect the text metrics\n\t\t\tsupportedStyle: {\n\t\t\t\tfont: 'font',\n\t\t\t\tfontFamily: 'font-family',\n\t\t\t\t'font-family': 'font-family',\n\t\t\t\tfontWeight: 'font-weight',\n\t\t\t\t'font-weight': 'font-weight',\n\t\t\t\tfontSize: 'font-size',\n\t\t\t\t'font-size': 'font-size',\n\t\t\t\tlineHeight: 'line-height',\n\t\t\t\t'line-height': 'line-height',\n\t\t\t\tfontStyle: 'font-style',\n\t\t\t\t'font-style': 'font-style'\n\t\t\t},\n\n\t\t\t// Get the support list for html the document where the text calcution is to be done.\n\t\t\tgetDocumentSupport: function getDocumentSupport() {\n\t\t\t\tvar childRetriverFn, childRetriverString, noClassTesting;\n\n\t\t\t\tif (doc.getElementsByClassName) {\n\t\t\t\t\tchildRetriverFn = 'getElementsByClassName';\n\t\t\t\t\tchildRetriverString = classNameWithTag;\n\t\t\t\t\tnoClassTesting = true;\n\t\t\t\t} else {\n\t\t\t\t\tchildRetriverFn = 'getElementsByTagName';\n\t\t\t\t\tchildRetriverString = 'span';\n\t\t\t\t\tnoClassTesting = false;\n\t\t\t\t}\n\n\t\t\t\treturn {\n\t\t\t\t\tisIE: /msie/i.test(userAgent) && !win.opera,\n\t\t\t\t\thasSVG: Boolean(win.SVGAngle || doc.implementation.hasFeature('http://www.w3.org/TR/SVG11/feature#BasicStructure', '1.1')),\n\t\t\t\t\tisHeadLess: new RegExp(' HtmlUnit').test(userAgent),\n\t\t\t\t\tisWebKit: new RegExp(' AppleWebKit/').test(userAgent),\n\t\t\t\t\tchildRetriverFn: childRetriverFn,\n\t\t\t\t\tchildRetriverString: childRetriverString,\n\t\t\t\t\tnoClassTesting: noClassTesting\n\t\t\t\t};\n\t\t\t},\n\n\t\t\t/*\n * Create a html div element and attach it with a parent. All the subsequent operations are performed\n * by upding this dom tree only.\n *\n * @param {HTMLElement} - The html element where the newly created div is to be attached. If not passed,\n * the new div is appended on the body.\n */\n\t\t\tcreateContainer: function createContainer(containerParent) {\n\t\t\t\tvar body, container;\n\n\t\t\t\tif (containerParent && (containerParent.offsetWidth || containerParent.offsetHeight)) {\n\t\t\t\t\tif (containerParent.appendChild) {\n\t\t\t\t\t\tcontainerParent.appendChild(container = doc.createElement(DIV));\n\t\t\t\t\t\tcontainer.className = containerClass;\n\t\t\t\t\t\tcontainer.setAttribute('aria-hidden', 'true');\n\t\t\t\t\t\tcontainer.setAttribute('role', 'presentation');\n\t\t\t\t\t\treturn container;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tbody = doc.getElementsByTagName('body')[0];\n\n\t\t\t\t\tif (body && body.appendChild) {\n\t\t\t\t\t\tcontainer = doc.createElement(DIV);\n\t\t\t\t\t\tcontainer.className = containerClass;\n\t\t\t\t\t\tcontainer.setAttribute('aria-hidden', 'true');\n\t\t\t\t\t\tcontainer.setAttribute('role', 'presentation');\n\t\t\t\t\t\tcontainerInstanceCount += 1;\n\t\t\t\t\t\tbody.appendChild(container);\n\t\t\t\t\t\treturn container;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// Finds a approximate position where the text is to be broken\n\t\t\tgetNearestBreakIndex: function getNearestBreakIndex(text, maxWidth, sl) {\n\t\t\t\tif (!text || !text.length) {\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\n\t\t\t\tvar difference,\n\t\t\t\t getWidth = sl._getWidthFn(),\n\t\t\t\t charLen = 0,\n\t\t\t\t increment = 0,\n\t\t\t\t oriWidth = getWidth(text),\n\t\t\t\t avgWidth = oriWidth / text.length;\n\n\t\t\t\tdifference = maxWidth;\n\t\t\t\tcharLen = ceil(maxWidth / avgWidth);\n\n\t\t\t\tif (oriWidth < maxWidth) {\n\t\t\t\t\treturn text.length - 1;\n\t\t\t\t}\n\n\t\t\t\tif (charLen > text.length) {\n\t\t\t\t\tdifference = maxWidth - oriWidth;\n\t\t\t\t\tcharLen = text.length;\n\t\t\t\t}\n\n\t\t\t\twhile (difference > 0) {\n\t\t\t\t\tdifference = maxWidth - getWidth(text.substr(0, charLen));\n\t\t\t\t\tincrement = floor(difference / avgWidth);\n\t\t\t\t\tif (increment) {\n\t\t\t\t\t\tcharLen += increment;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn charLen;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\twhile (difference < 0) {\n\t\t\t\t\tdifference = maxWidth - getWidth(text.substr(0, charLen));\n\t\t\t\t\tincrement = floor(difference / avgWidth);\n\t\t\t\t\tif (increment) {\n\t\t\t\t\t\tcharLen += increment;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn charLen;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn charLen;\n\t\t\t},\n\n\t\t\t/*\n * Determine lineheight of a text for a given style. It adds propery lineHeight to the style passed\n *\n * @param {Object} - The style based on which the text's metric needs to be calculated. The calculation happens\n * based on fontSize property, if its not present a default font size is assumed.\n *\n * @return {Object} - The style that was passed with lineHeight as a named propery set on the object.\n */\n\t\t\tsetLineHeight: function setLineHeight(styleObj) {\n\t\t\t\tvar fSize = styleObj.fontSize = styleObj.fontSize || '12px';\n\t\t\t\tstyleObj.lineHeight = styleObj.lineHeight || styleObj['line-height'] || parseInt(fSize, 10) * 1.2 + 'px';\n\t\t\t\treturn styleObj;\n\t\t\t}\n\t\t};\n\n\t\treturn lib;\n\t}\n};\n\nexports['default'] = lib;\nmodule.exports = exports['default'];","const Muze = require('./muze');\n\nmodule.exports = Muze.default ? Muze.default : Muze;\n","'use strict';\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _lib = require('./lib');\n\nvar _lib2 = _interopRequireDefault(_lib);\n\nvar slLib = _lib2['default'].init(typeof window !== \"undefined\" ? window : undefined),\n doc = slLib.win.document,\n documentSupport = slLib.getDocumentSupport(),\n SVG_BBOX_CORRECTION = documentSupport.isWebKit ? 0 : 4.5;\n\nfunction ContainerManager(parentContainer, isBrowserLess, maxContainers) {\n var svg;\n\n maxContainers = maxContainers > 5 ? maxContainers : 5;\n maxContainers = maxContainers < 20 ? maxContainers : 20;\n\n this.maxContainers = maxContainers;\n this.first = null;\n this.last = null;\n this.containers = {};\n this.length = 0;\n this.rootNode = parentContainer;\n\n if (isBrowserLess) {\n svg = doc.createElementNS('http://www.w3.org/2000/svg', 'svg');\n svg.setAttributeNS('http://www.w3.org/2000/svg', 'xlink', 'http://www.w3.org/1999/xlink');\n svg.setAttributeNS('http://www.w3.org/2000/svg', 'height', '0');\n svg.setAttributeNS('http://www.w3.org/2000/svg', 'width', '0');\n this.svgRoot = svg;\n this.rootNode.appendChild(svg);\n }\n}\n\nContainerManager.prototype.get = function (style) {\n var diff,\n key,\n containerObj,\n containers = this.containers,\n len = this.length,\n max = this.maxContainers,\n keyStr = '';\n\n for (key in slLib.supportedStyle) {\n if (style[key] !== undefined) {\n keyStr += slLib.supportedStyle[key] + ':' + style[key] + ';';\n }\n }\n\n if (!keyStr) {\n return false;\n }\n\n if (containerObj = containers[keyStr]) {\n if (this.first !== containerObj) {\n containerObj.prev && (containerObj.prev.next = containerObj.next);\n containerObj.next && (containerObj.next.prev = containerObj.prev);\n containerObj.next = this.first;\n containerObj.next.prev = containerObj;\n this.last === containerObj && (this.last = containerObj.prev);\n containerObj.prev = null;\n this.first = containerObj;\n }\n } else {\n if (len >= max) {\n diff = len - max + 1;\n // +1 is to remove an extra entry to make space for the new container to be added.\n while (diff--) {\n this.removeContainer(this.last);\n }\n }\n containerObj = this.addContainer(keyStr);\n }\n\n return containerObj;\n};\n\nContainerManager.prototype.addContainer = function (keyStr) {\n var node, container;\n\n this.containers[keyStr] = container = {\n next: null,\n prev: null,\n node: null,\n ellipsesWidth: 0,\n lineHeight: 0,\n dotWidth: 0,\n avgCharWidth: 4,\n keyStr: keyStr,\n charCache: {}\n };\n\n // Since the container objects are arranged from most recent to least recent order, we need to add the new\n // object at the beginning of the list.\n container.next = this.first;\n container.next && (container.next.prev = container);\n this.first = container;\n if (!this.last) {\n this.last = container;\n }\n this.length += 1;\n\n node = container.node = doc.createElement('div');\n this.rootNode.appendChild(node);\n\n if (documentSupport.isIE && !documentSupport.hasSVG) {\n node.style.setAttribute('cssText', keyStr);\n } else {\n node.setAttribute('style', keyStr);\n }\n\n node.setAttribute('aria-hidden', 'true');\n node.setAttribute('role', 'presentation');\n node.style.display = 'inline-block';\n\n node.innerHTML = slLib.testStrAvg; // A test string.\n container.lineHeight = node.offsetHeight;\n container.avgCharWidth = node.offsetWidth / 3;\n\n if (documentSupport.isBrowserLess) {\n node = container.svgText = doc.createElementNS('http://www.w3.org/2000/svg', 'text');\n node.setAttribute('style', keyStr);\n this.svgRoot.appendChild(node);\n\n node.textContent = slLib.testStrAvg; // A test string.\n container.lineHeight = node.getBBox().height;\n container.avgCharWidth = (node.getBBox().width - SVG_BBOX_CORRECTION) / 3;\n\n node.textContent = '...';\n container.ellipsesWidth = node.getBBox().width - SVG_BBOX_CORRECTION;\n node.textContent = '.';\n container.dotWidth = node.getBBox().width - SVG_BBOX_CORRECTION;\n } else {\n node.innerHTML = '...';\n container.ellipsesWidth = node.offsetWidth;\n node.innerHTML = '.';\n container.dotWidth = node.offsetWidth;\n node.innerHTML = '';\n }\n\n return container;\n};\n\nContainerManager.prototype.removeContainer = function (cObj) {\n var keyStr = cObj.keyStr;\n\n if (!keyStr || !this.length || !cObj) {\n return;\n }\n this.length -= 1;\n\n cObj.prev && (cObj.prev.next = cObj.next);\n cObj.next && (cObj.next.prev = cObj.prev);\n this.first === cObj && (this.first = cObj.next);\n this.last === cObj && (this.last = cObj.prev);\n\n cObj.node.parentNode.removeChild(cObj.node);\n\n delete this.containers[keyStr];\n};\n\nContainerManager.prototype.dispose = function () {\n var key,\n containers = this.containers;\n\n this.maxContainers = null;\n for (key in containers) {\n this.removeContainer(containers[key]);\n }\n\n this.rootNode.parentNode.removeChild(this.rootNode);\n\n this.rootNode = null;\n this.first = null;\n this.last = null;\n};\n\nmodule.exports = ContainerManager;","export default function(a, b) {\n return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","import ascending from \"./ascending\";\n\nexport default function(compare) {\n if (compare.length === 1) compare = ascendingComparator(compare);\n return {\n left: function(a, x, lo, hi) {\n if (lo == null) lo = 0;\n if (hi == null) hi = a.length;\n while (lo < hi) {\n var mid = lo + hi >>> 1;\n if (compare(a[mid], x) < 0) lo = mid + 1;\n else hi = mid;\n }\n return lo;\n },\n right: function(a, x, lo, hi) {\n if (lo == null) lo = 0;\n if (hi == null) hi = a.length;\n while (lo < hi) {\n var mid = lo + hi >>> 1;\n if (compare(a[mid], x) > 0) hi = mid;\n else lo = mid + 1;\n }\n return lo;\n }\n };\n}\n\nfunction ascendingComparator(f) {\n return function(d, x) {\n return ascending(f(d), x);\n };\n}\n","import ascending from \"./ascending\";\nimport bisector from \"./bisector\";\n\nvar ascendingBisect = bisector(ascending);\nexport var bisectRight = ascendingBisect.right;\nexport var bisectLeft = ascendingBisect.left;\nexport default bisectRight;\n","import {pair} from \"./pairs\";\n\nexport default function(values0, values1, reduce) {\n var n0 = values0.length,\n n1 = values1.length,\n values = new Array(n0 * n1),\n i0,\n i1,\n i,\n value0;\n\n if (reduce == null) reduce = pair;\n\n for (i0 = i = 0; i0 < n0; ++i0) {\n for (value0 = values0[i0], i1 = 0; i1 < n1; ++i1, ++i) {\n values[i] = reduce(value0, values1[i1]);\n }\n }\n\n return values;\n}\n","export default function(x) {\n return x === null ? NaN : +x;\n}\n","var array = Array.prototype;\n\nexport var slice = array.slice;\nexport var map = array.map;\n","export default function(start, stop, step) {\n start = +start, stop = +stop, step = (n = arguments.length) < 2 ? (stop = start, start = 0, 1) : n < 3 ? 1 : +step;\n\n var i = -1,\n n = Math.max(0, Math.ceil((stop - start) / step)) | 0,\n range = new Array(n);\n\n while (++i < n) {\n range[i] = start + i * step;\n }\n\n return range;\n}\n","var e10 = Math.sqrt(50),\n e5 = Math.sqrt(10),\n e2 = Math.sqrt(2);\n\nexport default function(start, stop, count) {\n var reverse,\n i = -1,\n n,\n ticks,\n step;\n\n stop = +stop, start = +start, count = +count;\n if (start === stop && count > 0) return [start];\n if (reverse = stop < start) n = start, start = stop, stop = n;\n if ((step = tickIncrement(start, stop, count)) === 0 || !isFinite(step)) return [];\n\n if (step > 0) {\n start = Math.ceil(start / step);\n stop = Math.floor(stop / step);\n ticks = new Array(n = Math.ceil(stop - start + 1));\n while (++i < n) ticks[i] = (start + i) * step;\n } else {\n start = Math.floor(start * step);\n stop = Math.ceil(stop * step);\n ticks = new Array(n = Math.ceil(start - stop + 1));\n while (++i < n) ticks[i] = (start - i) / step;\n }\n\n if (reverse) ticks.reverse();\n\n return ticks;\n}\n\nexport function tickIncrement(start, stop, count) {\n var step = (stop - start) / Math.max(0, count),\n power = Math.floor(Math.log(step) / Math.LN10),\n error = step / Math.pow(10, power);\n return power >= 0\n ? (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1) * Math.pow(10, power)\n : -Math.pow(10, -power) / (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1);\n}\n\nexport function tickStep(start, stop, count) {\n var step0 = Math.abs(stop - start) / Math.max(0, count),\n step1 = Math.pow(10, Math.floor(Math.log(step0) / Math.LN10)),\n error = step0 / step1;\n if (error >= e10) step1 *= 10;\n else if (error >= e5) step1 *= 5;\n else if (error >= e2) step1 *= 2;\n return stop < start ? -step1 : step1;\n}\n","export default function(values) {\n return Math.ceil(Math.log(values.length) / Math.LN2) + 1;\n}\n","import number from \"./number\";\n\nexport default function(values, p, valueof) {\n if (valueof == null) valueof = number;\n if (!(n = values.length)) return;\n if ((p = +p) <= 0 || n < 2) return +valueof(values[0], 0, values);\n if (p >= 1) return +valueof(values[n - 1], n - 1, values);\n var n,\n i = (n - 1) * p,\n i0 = Math.floor(i),\n value0 = +valueof(values[i0], i0, values),\n value1 = +valueof(values[i0 + 1], i0 + 1, values);\n return value0 + (value1 - value0) * (i - i0);\n}\n","export var prefix = \"$\";\n\nfunction Map() {}\n\nMap.prototype = map.prototype = {\n constructor: Map,\n has: function(key) {\n return (prefix + key) in this;\n },\n get: function(key) {\n return this[prefix + key];\n },\n set: function(key, value) {\n this[prefix + key] = value;\n return this;\n },\n remove: function(key) {\n var property = prefix + key;\n return property in this && delete this[property];\n },\n clear: function() {\n for (var property in this) if (property[0] === prefix) delete this[property];\n },\n keys: function() {\n var keys = [];\n for (var property in this) if (property[0] === prefix) keys.push(property.slice(1));\n return keys;\n },\n values: function() {\n var values = [];\n for (var property in this) if (property[0] === prefix) values.push(this[property]);\n return values;\n },\n entries: function() {\n var entries = [];\n for (var property in this) if (property[0] === prefix) entries.push({key: property.slice(1), value: this[property]});\n return entries;\n },\n size: function() {\n var size = 0;\n for (var property in this) if (property[0] === prefix) ++size;\n return size;\n },\n empty: function() {\n for (var property in this) if (property[0] === prefix) return false;\n return true;\n },\n each: function(f) {\n for (var property in this) if (property[0] === prefix) f(this[property], property.slice(1), this);\n }\n};\n\nfunction map(object, f) {\n var map = new Map;\n\n // Copy constructor.\n if (object instanceof Map) object.each(function(value, key) { map.set(key, value); });\n\n // Index array by numeric index or specified key function.\n else if (Array.isArray(object)) {\n var i = -1,\n n = object.length,\n o;\n\n if (f == null) while (++i < n) map.set(i, object[i]);\n else while (++i < n) map.set(f(o = object[i], i, object), o);\n }\n\n // Convert object to map.\n else if (object) for (var key in object) map.set(key, object[key]);\n\n return map;\n}\n\nexport default map;\n","import map from \"./map\";\n\nexport default function() {\n var keys = [],\n sortKeys = [],\n sortValues,\n rollup,\n nest;\n\n function apply(array, depth, createResult, setResult) {\n if (depth >= keys.length) {\n if (sortValues != null) array.sort(sortValues);\n return rollup != null ? rollup(array) : array;\n }\n\n var i = -1,\n n = array.length,\n key = keys[depth++],\n keyValue,\n value,\n valuesByKey = map(),\n values,\n result = createResult();\n\n while (++i < n) {\n if (values = valuesByKey.get(keyValue = key(value = array[i]) + \"\")) {\n values.push(value);\n } else {\n valuesByKey.set(keyValue, [value]);\n }\n }\n\n valuesByKey.each(function(values, key) {\n setResult(result, key, apply(values, depth, createResult, setResult));\n });\n\n return result;\n }\n\n function entries(map, depth) {\n if (++depth > keys.length) return map;\n var array, sortKey = sortKeys[depth - 1];\n if (rollup != null && depth >= keys.length) array = map.entries();\n else array = [], map.each(function(v, k) { array.push({key: k, values: entries(v, depth)}); });\n return sortKey != null ? array.sort(function(a, b) { return sortKey(a.key, b.key); }) : array;\n }\n\n return nest = {\n object: function(array) { return apply(array, 0, createObject, setObject); },\n map: function(array) { return apply(array, 0, createMap, setMap); },\n entries: function(array) { return entries(apply(array, 0, createMap, setMap), 0); },\n key: function(d) { keys.push(d); return nest; },\n sortKeys: function(order) { sortKeys[keys.length - 1] = order; return nest; },\n sortValues: function(order) { sortValues = order; return nest; },\n rollup: function(f) { rollup = f; return nest; }\n };\n}\n\nfunction createObject() {\n return {};\n}\n\nfunction setObject(object, key, value) {\n object[key] = value;\n}\n\nfunction createMap() {\n return map();\n}\n\nfunction setMap(map, key, value) {\n map.set(key, value);\n}\n","import {default as map, prefix} from \"./map\";\n\nfunction Set() {}\n\nvar proto = map.prototype;\n\nSet.prototype = set.prototype = {\n constructor: Set,\n has: proto.has,\n add: function(value) {\n value += \"\";\n this[prefix + value] = value;\n return this;\n },\n remove: proto.remove,\n clear: proto.clear,\n values: proto.keys,\n size: proto.size,\n empty: proto.empty,\n each: proto.each\n};\n\nfunction set(object, f) {\n var set = new Set;\n\n // Copy constructor.\n if (object instanceof Set) object.each(function(value) { set.add(value); });\n\n // Otherwise, assume it’s an array.\n else if (object) {\n var i = -1, n = object.length;\n if (f == null) while (++i < n) set.add(object[i]);\n else while (++i < n) set.add(f(object[i], i, object));\n }\n\n return set;\n}\n\nexport default set;\n","var array = Array.prototype;\n\nexport var map = array.map;\nexport var slice = array.slice;\n","import {map} from \"d3-collection\";\nimport {slice} from \"./array\";\n\nexport var implicit = {name: \"implicit\"};\n\nexport default function ordinal(range) {\n var index = map(),\n domain = [],\n unknown = implicit;\n\n range = range == null ? [] : slice.call(range);\n\n function scale(d) {\n var key = d + \"\", i = index.get(key);\n if (!i) {\n if (unknown !== implicit) return unknown;\n index.set(key, i = domain.push(d));\n }\n return range[(i - 1) % range.length];\n }\n\n scale.domain = function(_) {\n if (!arguments.length) return domain.slice();\n domain = [], index = map();\n var i = -1, n = _.length, d, key;\n while (++i < n) if (!index.has(key = (d = _[i]) + \"\")) index.set(key, domain.push(d));\n return scale;\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = slice.call(_), scale) : range.slice();\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n scale.copy = function() {\n return ordinal()\n .domain(domain)\n .range(range)\n .unknown(unknown);\n };\n\n return scale;\n}\n","import {range as sequence} from \"d3-array\";\nimport ordinal from \"./ordinal\";\n\nexport default function band() {\n var scale = ordinal().unknown(undefined),\n domain = scale.domain,\n ordinalRange = scale.range,\n range = [0, 1],\n step,\n bandwidth,\n round = false,\n paddingInner = 0,\n paddingOuter = 0,\n align = 0.5;\n\n delete scale.unknown;\n function rescale() {\n var n = domain().length,\n reverse = range[1] < range[0],\n start = range[reverse - 0],\n stop = range[1 - reverse];\n step = (stop - start) / Math.max(1, n - paddingInner + paddingOuter * 2);\n if (round) step = Math.floor(step);\n start += (stop - start - step * (n - paddingInner)) * align;\n bandwidth = step * (1 - paddingInner);\n if (round) start = Math.round(start), bandwidth = Math.round(bandwidth);\n var values = sequence(n).map(function(i) { return start + step * i; });\n return ordinalRange(reverse ? values.reverse() : values);\n }\n\n scale.domain = function(_) {\n return arguments.length ? (domain(_), rescale()) : domain();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = [+_[0], +_[1]], rescale()) : range.slice();\n };\n\n scale.rangeRound = function(_) {\n return range = [+_[0], +_[1]], round = true, rescale();\n };\n\n scale.bandwidth = function() {\n return bandwidth;\n };\n\n scale.step = function() {\n return step;\n };\n\n scale.round = function(_) {\n return arguments.length ? (round = !!_, rescale()) : round;\n };\n\n scale.padding = function(_) {\n return arguments.length ? (paddingInner = paddingOuter = Math.max(0, Math.min(1, _)), rescale()) : paddingInner;\n };\n\n scale.paddingInner = function(_) {\n return arguments.length ? (paddingInner = Math.max(0, Math.min(1, _)), rescale()) : paddingInner;\n };\n\n scale.paddingOuter = function(_) {\n return arguments.length ? (paddingOuter = Math.max(0, Math.min(1, _)), rescale()) : paddingOuter;\n };\n\n scale.align = function(_) {\n return arguments.length ? (align = Math.max(0, Math.min(1, _)), rescale()) : align;\n };\n\n scale.copy = function() {\n return band()\n .domain(domain())\n .range(range)\n .round(round)\n .paddingInner(paddingInner)\n .paddingOuter(paddingOuter)\n .align(align);\n };\n\n scale.invertExtent = function(r0, r1) {\n var lo = +r0,\n hi = arguments.length > 1 ? +r1 : lo,\n reverse = range[1] < range[0],\n values = reverse ? ordinalRange().reverse() : ordinalRange(),\n n = values.length - 1, a, b, t,\n hiIndex;\n values.push(values[n] + this.step());\n // order range inputs, bail if outside of scale range\n if (hi < lo) t = lo, lo = hi, hi = t;\n if (hi < values[0] || lo > range[1-reverse]) return undefined;\n\n // binary search to index into scale range\n a = Math.max(0, getClosestIndexOf(values, lo));\n hiIndex = getClosestIndexOf(values, hi);\n b = lo===hi ? a : Math.max(a, hiIndex - 1);\n\n // increment index a if lo is within padding gap\n // if (lo - values[a] > bandwidth + 1e-10) ++a;\n\n if (reverse) t = a, a = n - b, b = n - t; // map + swap\n return (a > b) ? undefined : domain().slice(a, b+1);\n };\n\n scale.invert = function (r0, r1) {\n var lo = +r0,\n hi = arguments.length > 1 ? +r1 : lo,\n reverse = range[1] < range[0],\n values = reverse ? ordinalRange().reverse() : ordinalRange(),\n n = values.length - 1,\n a,\n t;\n\n // order range inputs, bail if outside of scale range\n if (hi < lo) t = lo, lo = hi, hi = t;\n if (hi < values[0] || lo > range[1-reverse]) return undefined;\n\n // binary search to index into scale range\n a = Math.max(0, getClosestIndexOf(values, lo, 'left'));\n\n // increment index a if lo is within padding gap\n // if (lo - values[a] > bandwidth + 1e-10) ++a;\n\n return domain()[reverse ? n - a : a];\n }\n return rescale();\n}\n\nfunction pointish(scale) {\n var copy = scale.copy;\n\n scale.padding = scale.paddingOuter;\n delete scale.paddingInner;\n delete scale.paddingOuter;\n\n scale.copy = function() {\n return pointish(copy());\n };\n\n return scale;\n}\n\nexport function point() {\n return pointish(band().paddingInner(1));\n}\n\nfunction getClosestIndexOf (arr, value, side) {\n var low = 0,\n arrLen = arr.length,\n high = arrLen - 1,\n highVal,\n mid,\n d1,\n d2;\n\n while (low < high) {\n mid = Math.floor((low + high) / 2);\n d1 = Math.abs(arr[mid] - value);\n d2 = Math.abs(arr[mid + 1] - value);\n\n if (d2 <= d1) {\n low = mid + 1;\n }\n else {\n high = mid;\n }\n }\n\n if (!side) {\n return high;\n }\n\n highVal = arr[high];\n if (highVal === value) {\n return high;\n } else if (highVal > value) {\n if (high === 0) { return high; }\n return side === 'left'? high - 1 : high;\n } else {\n if (high === arr.length - 1) { return high; }\n return side === 'left'? high : high + 1;\n }\n}","export default function(constructor, factory, prototype) {\n constructor.prototype = factory.prototype = prototype;\n prototype.constructor = constructor;\n}\n\nexport function extend(parent, definition) {\n var prototype = Object.create(parent.prototype);\n for (var key in definition) prototype[key] = definition[key];\n return prototype;\n}\n","import define, {extend} from \"./define\";\n\nexport function Color() {}\n\nexport var darker = 0.7;\nexport var brighter = 1 / darker;\n\nvar reI = \"\\\\s*([+-]?\\\\d+)\\\\s*\",\n reN = \"\\\\s*([+-]?\\\\d*\\\\.?\\\\d+(?:[eE][+-]?\\\\d+)?)\\\\s*\",\n reP = \"\\\\s*([+-]?\\\\d*\\\\.?\\\\d+(?:[eE][+-]?\\\\d+)?)%\\\\s*\",\n reHex3 = /^#([0-9a-f]{3})$/,\n reHex6 = /^#([0-9a-f]{6})$/,\n reRgbInteger = new RegExp(\"^rgb\\\\(\" + [reI, reI, reI] + \"\\\\)$\"),\n reRgbPercent = new RegExp(\"^rgb\\\\(\" + [reP, reP, reP] + \"\\\\)$\"),\n reRgbaInteger = new RegExp(\"^rgba\\\\(\" + [reI, reI, reI, reN] + \"\\\\)$\"),\n reRgbaPercent = new RegExp(\"^rgba\\\\(\" + [reP, reP, reP, reN] + \"\\\\)$\"),\n reHslPercent = new RegExp(\"^hsl\\\\(\" + [reN, reP, reP] + \"\\\\)$\"),\n reHslaPercent = new RegExp(\"^hsla\\\\(\" + [reN, reP, reP, reN] + \"\\\\)$\");\n\nvar 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\ndefine(Color, color, {\n displayable: function() {\n return this.rgb().displayable();\n },\n hex: function() {\n return this.rgb().hex();\n },\n toString: function() {\n return this.rgb() + \"\";\n }\n});\n\nexport default function color(format) {\n var m;\n format = (format + \"\").trim().toLowerCase();\n return (m = reHex3.exec(format)) ? (m = parseInt(m[1], 16), new Rgb((m >> 8 & 0xf) | (m >> 4 & 0x0f0), (m >> 4 & 0xf) | (m & 0xf0), ((m & 0xf) << 4) | (m & 0xf), 1)) // #f00\n : (m = reHex6.exec(format)) ? rgbn(parseInt(m[1], 16)) // #ff0000\n : (m = reRgbInteger.exec(format)) ? new Rgb(m[1], m[2], m[3], 1) // rgb(255, 0, 0)\n : (m = reRgbPercent.exec(format)) ? new Rgb(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, 1) // rgb(100%, 0%, 0%)\n : (m = reRgbaInteger.exec(format)) ? rgba(m[1], m[2], m[3], m[4]) // rgba(255, 0, 0, 1)\n : (m = reRgbaPercent.exec(format)) ? rgba(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, m[4]) // rgb(100%, 0%, 0%, 1)\n : (m = reHslPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, 1) // hsl(120, 50%, 50%)\n : (m = reHslaPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, m[4]) // hsla(120, 50%, 50%, 1)\n : named.hasOwnProperty(format) ? rgbn(named[format])\n : format === \"transparent\" ? new Rgb(NaN, NaN, NaN, 0)\n : null;\n}\n\nfunction rgbn(n) {\n return new Rgb(n >> 16 & 0xff, n >> 8 & 0xff, n & 0xff, 1);\n}\n\nfunction rgba(r, g, b, a) {\n if (a <= 0) r = g = b = NaN;\n return new Rgb(r, g, b, a);\n}\n\nexport function rgbConvert(o) {\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Rgb;\n o = o.rgb();\n return new Rgb(o.r, o.g, o.b, o.opacity);\n}\n\nexport function rgb(r, g, b, opacity) {\n return arguments.length === 1 ? rgbConvert(r) : new Rgb(r, g, b, opacity == null ? 1 : opacity);\n}\n\nexport function Rgb(r, g, b, opacity) {\n this.r = +r;\n this.g = +g;\n this.b = +b;\n this.opacity = +opacity;\n}\n\ndefine(Rgb, rgb, extend(Color, {\n 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, this.opacity);\n },\n 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, this.opacity);\n },\n rgb: function() {\n return this;\n },\n 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 && (0 <= this.opacity && this.opacity <= 1);\n },\n hex: function() {\n return \"#\" + hex(this.r) + hex(this.g) + hex(this.b);\n },\n toString: function() {\n var a = this.opacity; a = isNaN(a) ? 1 : Math.max(0, Math.min(1, a));\n return (a === 1 ? \"rgb(\" : \"rgba(\")\n + Math.max(0, Math.min(255, Math.round(this.r) || 0)) + \", \"\n + Math.max(0, Math.min(255, Math.round(this.g) || 0)) + \", \"\n + Math.max(0, Math.min(255, Math.round(this.b) || 0))\n + (a === 1 ? \")\" : \", \" + a + \")\");\n }\n}));\n\nfunction hex(value) {\n value = Math.max(0, Math.min(255, Math.round(value) || 0));\n return (value < 16 ? \"0\" : \"\") + value.toString(16);\n}\n\nfunction hsla(h, s, l, a) {\n if (a <= 0) h = s = l = NaN;\n else if (l <= 0 || l >= 1) h = s = NaN;\n else if (s <= 0) h = NaN;\n return new Hsl(h, s, l, a);\n}\n\nexport function hslConvert(o) {\n if (o instanceof Hsl) return new Hsl(o.h, o.s, o.l, o.opacity);\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Hsl;\n if (o instanceof Hsl) return o;\n o = o.rgb();\n var r = o.r / 255,\n g = o.g / 255,\n b = o.b / 255,\n min = Math.min(r, g, b),\n max = Math.max(r, g, b),\n h = NaN,\n s = max - min,\n l = (max + min) / 2;\n if (s) {\n if (r === max) h = (g - b) / s + (g < b) * 6;\n else if (g === max) h = (b - r) / s + 2;\n else h = (r - g) / s + 4;\n s /= l < 0.5 ? max + min : 2 - max - min;\n h *= 60;\n } else {\n s = l > 0 && l < 1 ? 0 : h;\n }\n return new Hsl(h, s, l, o.opacity);\n}\n\nexport function hsl(h, s, l, opacity) {\n return arguments.length === 1 ? hslConvert(h) : new Hsl(h, s, l, opacity == null ? 1 : opacity);\n}\n\nfunction Hsl(h, s, l, opacity) {\n this.h = +h;\n this.s = +s;\n this.l = +l;\n this.opacity = +opacity;\n}\n\ndefine(Hsl, hsl, extend(Color, {\n brighter: function(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n darker: function(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n 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 < 0.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 this.opacity\n );\n },\n displayable: function() {\n return (0 <= this.s && this.s <= 1 || isNaN(this.s))\n && (0 <= this.l && this.l <= 1)\n && (0 <= this.opacity && this.opacity <= 1);\n }\n}));\n\n/* From FvD 13.37, CSS Color Module Level 3 */\nfunction 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","export var deg2rad = Math.PI / 180;\nexport var rad2deg = 180 / Math.PI;\n","import define, {extend} from \"./define\";\nimport {Color, rgbConvert, Rgb} from \"./color\";\nimport {deg2rad, rad2deg} from \"./math\";\n\n// https://beta.observablehq.com/@mbostock/lab-and-rgb\nvar K = 18,\n Xn = 0.96422,\n Yn = 1,\n Zn = 0.82521,\n t0 = 4 / 29,\n t1 = 6 / 29,\n t2 = 3 * t1 * t1,\n t3 = t1 * t1 * t1;\n\nfunction labConvert(o) {\n if (o instanceof Lab) return new Lab(o.l, o.a, o.b, o.opacity);\n if (o instanceof Hcl) {\n if (isNaN(o.h)) return new Lab(o.l, 0, 0, o.opacity);\n var h = o.h * deg2rad;\n return new Lab(o.l, Math.cos(h) * o.c, Math.sin(h) * o.c, o.opacity);\n }\n if (!(o instanceof Rgb)) o = rgbConvert(o);\n var r = rgb2lrgb(o.r),\n g = rgb2lrgb(o.g),\n b = rgb2lrgb(o.b),\n y = xyz2lab((0.2225045 * r + 0.7168786 * g + 0.0606169 * b) / Yn), x, z;\n if (r === g && g === b) x = z = y; else {\n x = xyz2lab((0.4360747 * r + 0.3850649 * g + 0.1430804 * b) / Xn);\n z = xyz2lab((0.0139322 * r + 0.0971045 * g + 0.7141733 * b) / Zn);\n }\n return new Lab(116 * y - 16, 500 * (x - y), 200 * (y - z), o.opacity);\n}\n\nexport function gray(l, opacity) {\n return new Lab(l, 0, 0, opacity == null ? 1 : opacity);\n}\n\nexport default function lab(l, a, b, opacity) {\n return arguments.length === 1 ? labConvert(l) : new Lab(l, a, b, opacity == null ? 1 : opacity);\n}\n\nexport function Lab(l, a, b, opacity) {\n this.l = +l;\n this.a = +a;\n this.b = +b;\n this.opacity = +opacity;\n}\n\ndefine(Lab, lab, extend(Color, {\n brighter: function(k) {\n return new Lab(this.l + K * (k == null ? 1 : k), this.a, this.b, this.opacity);\n },\n darker: function(k) {\n return new Lab(this.l - K * (k == null ? 1 : k), this.a, this.b, this.opacity);\n },\n 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 x = Xn * lab2xyz(x);\n y = Yn * lab2xyz(y);\n z = Zn * lab2xyz(z);\n return new Rgb(\n lrgb2rgb( 3.1338561 * x - 1.6168667 * y - 0.4906146 * z),\n lrgb2rgb(-0.9787684 * x + 1.9161415 * y + 0.0334540 * z),\n lrgb2rgb( 0.0719453 * x - 0.2289914 * y + 1.4052427 * z),\n this.opacity\n );\n }\n}));\n\nfunction xyz2lab(t) {\n return t > t3 ? Math.pow(t, 1 / 3) : t / t2 + t0;\n}\n\nfunction lab2xyz(t) {\n return t > t1 ? t * t * t : t2 * (t - t0);\n}\n\nfunction lrgb2rgb(x) {\n return 255 * (x <= 0.0031308 ? 12.92 * x : 1.055 * Math.pow(x, 1 / 2.4) - 0.055);\n}\n\nfunction rgb2lrgb(x) {\n return (x /= 255) <= 0.04045 ? x / 12.92 : Math.pow((x + 0.055) / 1.055, 2.4);\n}\n\nfunction hclConvert(o) {\n if (o instanceof Hcl) return new Hcl(o.h, o.c, o.l, o.opacity);\n if (!(o instanceof Lab)) o = labConvert(o);\n if (o.a === 0 && o.b === 0) return new Hcl(NaN, 0, o.l, o.opacity);\n var h = Math.atan2(o.b, o.a) * rad2deg;\n return new Hcl(h < 0 ? h + 360 : h, Math.sqrt(o.a * o.a + o.b * o.b), o.l, o.opacity);\n}\n\nexport function lch(l, c, h, opacity) {\n return arguments.length === 1 ? hclConvert(l) : new Hcl(h, c, l, opacity == null ? 1 : opacity);\n}\n\nexport function hcl(h, c, l, opacity) {\n return arguments.length === 1 ? hclConvert(h) : new Hcl(h, c, l, opacity == null ? 1 : opacity);\n}\n\nexport function Hcl(h, c, l, opacity) {\n this.h = +h;\n this.c = +c;\n this.l = +l;\n this.opacity = +opacity;\n}\n\ndefine(Hcl, hcl, extend(Color, {\n brighter: function(k) {\n return new Hcl(this.h, this.c, this.l + K * (k == null ? 1 : k), this.opacity);\n },\n darker: function(k) {\n return new Hcl(this.h, this.c, this.l - K * (k == null ? 1 : k), this.opacity);\n },\n rgb: function() {\n return labConvert(this).rgb();\n }\n}));\n","import define, {extend} from \"./define\";\nimport {Color, rgbConvert, Rgb, darker, brighter} from \"./color\";\nimport {deg2rad, rad2deg} from \"./math\";\n\nvar A = -0.14861,\n B = +1.78277,\n C = -0.29227,\n D = -0.90649,\n E = +1.97294,\n ED = E * D,\n EB = E * B,\n BC_DA = B * C - D * A;\n\nfunction cubehelixConvert(o) {\n if (o instanceof Cubehelix) return new Cubehelix(o.h, o.s, o.l, o.opacity);\n if (!(o instanceof Rgb)) o = rgbConvert(o);\n var r = o.r / 255,\n g = o.g / 255,\n b = o.b / 255,\n l = (BC_DA * b + ED * r - EB * g) / (BC_DA + ED - EB),\n bl = b - l,\n 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 return new Cubehelix(h < 0 ? h + 360 : h, s, l, o.opacity);\n}\n\nexport default function cubehelix(h, s, l, opacity) {\n return arguments.length === 1 ? cubehelixConvert(h) : new Cubehelix(h, s, l, opacity == null ? 1 : opacity);\n}\n\nexport function Cubehelix(h, s, l, opacity) {\n this.h = +h;\n this.s = +s;\n this.l = +l;\n this.opacity = +opacity;\n}\n\ndefine(Cubehelix, cubehelix, extend(Color, {\n brighter: function(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Cubehelix(this.h, this.s, this.l * k, this.opacity);\n },\n darker: function(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Cubehelix(this.h, this.s, this.l * k, this.opacity);\n },\n 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 this.opacity\n );\n }\n}));\n","export function basis(t1, v0, v1, v2, v3) {\n var t2 = t1 * t1, t3 = t2 * t1;\n return ((1 - 3 * t1 + 3 * t2 - t3) * v0\n + (4 - 6 * t2 + 3 * t3) * v1\n + (1 + 3 * t1 + 3 * t2 - 3 * t3) * v2\n + t3 * v3) / 6;\n}\n\nexport default function(values) {\n var n = values.length - 1;\n return function(t) {\n var i = t <= 0 ? (t = 0) : t >= 1 ? (t = 1, n - 1) : Math.floor(t * n),\n v1 = values[i],\n v2 = values[i + 1],\n v0 = i > 0 ? values[i - 1] : 2 * v1 - v2,\n v3 = i < n - 1 ? values[i + 2] : 2 * v2 - v1;\n return basis((t - i / n) * n, v0, v1, v2, v3);\n };\n}\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","import constant from \"./constant\";\n\nfunction linear(a, d) {\n return function(t) {\n return a + t * d;\n };\n}\n\nfunction exponential(a, b, y) {\n return a = Math.pow(a, y), b = Math.pow(b, y) - a, y = 1 / y, function(t) {\n return Math.pow(a + t * b, y);\n };\n}\n\nexport function hue(a, b) {\n var d = b - a;\n return d ? linear(a, d > 180 || d < -180 ? d - 360 * Math.round(d / 360) : d) : constant(isNaN(a) ? b : a);\n}\n\nexport function gamma(y) {\n return (y = +y) === 1 ? nogamma : function(a, b) {\n return b - a ? exponential(a, b, y) : constant(isNaN(a) ? b : a);\n };\n}\n\nexport default function nogamma(a, b) {\n var d = b - a;\n return d ? linear(a, d) : constant(isNaN(a) ? b : a);\n}\n","import {rgb as colorRgb} from \"d3-color\";\nimport basis from \"./basis\";\nimport basisClosed from \"./basisClosed\";\nimport nogamma, {gamma} from \"./color\";\n\nexport default (function rgbGamma(y) {\n var color = gamma(y);\n\n function rgb(start, end) {\n var r = color((start = colorRgb(start)).r, (end = colorRgb(end)).r),\n g = color(start.g, end.g),\n b = color(start.b, end.b),\n opacity = nogamma(start.opacity, end.opacity);\n return function(t) {\n start.r = r(t);\n start.g = g(t);\n start.b = b(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n\n rgb.gamma = rgbGamma;\n\n return rgb;\n})(1);\n\nfunction rgbSpline(spline) {\n return function(colors) {\n var n = colors.length,\n r = new Array(n),\n g = new Array(n),\n b = new Array(n),\n i, color;\n for (i = 0; i < n; ++i) {\n color = colorRgb(colors[i]);\n r[i] = color.r || 0;\n g[i] = color.g || 0;\n b[i] = color.b || 0;\n }\n r = spline(r);\n g = spline(g);\n b = spline(b);\n color.opacity = 1;\n return function(t) {\n color.r = r(t);\n color.g = g(t);\n color.b = b(t);\n return color + \"\";\n };\n };\n}\n\nexport var rgbBasis = rgbSpline(basis);\nexport var rgbBasisClosed = rgbSpline(basisClosed);\n","export default function(a, b) {\n return a = +a, b -= a, function(t) {\n return a + b * t;\n };\n}\n","import {basis} from \"./basis\";\n\nexport default function(values) {\n var n = values.length;\n return function(t) {\n var i = Math.floor(((t %= 1) < 0 ? ++t : t) * n),\n v0 = values[(i + n - 1) % n],\n v1 = values[i % n],\n v2 = values[(i + 1) % n],\n v3 = values[(i + 2) % n];\n return basis((t - i / n) * n, v0, v1, v2, v3);\n };\n}\n","import number from \"./number\";\n\nvar reA = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n reB = new RegExp(reA.source, \"g\");\n\nfunction zero(b) {\n return function() {\n return b;\n };\n}\n\nfunction one(b) {\n return function(t) {\n return b(t) + \"\";\n };\n}\n\nexport default function(a, b) {\n var bi = reA.lastIndex = reB.lastIndex = 0, // scan index for next number in b\n am, // current match in a\n bm, // current match in b\n bs, // string preceding current number in b, if any\n i = -1, // index in s\n s = [], // string constants and placeholders\n q = []; // number interpolators\n\n // Coerce inputs to strings.\n a = a + \"\", b = b + \"\";\n\n // Interpolate pairs of numbers in a & b.\n while ((am = reA.exec(a))\n && (bm = reB.exec(b))) {\n if ((bs = bm.index) > bi) { // a string precedes the next number in b\n bs = b.slice(bi, bs);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n if ((am = am[0]) === (bm = bm[0])) { // numbers in a & b match\n if (s[i]) s[i] += bm; // coalesce with previous string\n else s[++i] = bm;\n } else { // interpolate non-matching numbers\n s[++i] = null;\n q.push({i: i, x: number(am, bm)});\n }\n bi = reB.lastIndex;\n }\n\n // Add remains of b.\n if (bi < b.length) {\n bs = b.slice(bi);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n\n // Special optimization for only a single match.\n // Otherwise, interpolate each of the numbers and rejoin the string.\n return s.length < 2 ? (q[0]\n ? one(q[0].x)\n : zero(b))\n : (b = q.length, function(t) {\n for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t);\n return s.join(\"\");\n });\n}\n","import decompose, {identity} from \"./decompose\";\n\nvar cssNode,\n cssRoot,\n cssView,\n svgNode;\n\nexport function parseCss(value) {\n if (value === \"none\") return identity;\n if (!cssNode) cssNode = document.createElement(\"DIV\"), cssRoot = document.documentElement, cssView = document.defaultView;\n cssNode.style.transform = value;\n value = cssView.getComputedStyle(cssRoot.appendChild(cssNode), null).getPropertyValue(\"transform\");\n cssRoot.removeChild(cssNode);\n value = value.slice(7, -1).split(\",\");\n return decompose(+value[0], +value[1], +value[2], +value[3], +value[4], +value[5]);\n}\n\nexport function parseSvg(value) {\n if (value == null) return identity;\n if (!svgNode) svgNode = document.createElementNS(\"http://www.w3.org/2000/svg\", \"g\");\n svgNode.setAttribute(\"transform\", value);\n if (!(value = svgNode.transform.baseVal.consolidate())) return identity;\n value = value.matrix;\n return decompose(value.a, value.b, value.c, value.d, value.e, value.f);\n}\n","import {color} from \"d3-color\";\nimport rgb from \"./rgb\";\nimport array from \"./array\";\nimport date from \"./date\";\nimport number from \"./number\";\nimport object from \"./object\";\nimport string from \"./string\";\nimport constant from \"./constant\";\n\nexport default function(a, b) {\n var t = typeof b, c;\n return b == null || t === \"boolean\" ? constant(b)\n : (t === \"number\" ? number\n : t === \"string\" ? ((c = color(b)) ? (b = c, rgb) : string)\n : b instanceof color ? rgb\n : b instanceof Date ? date\n : Array.isArray(b) ? array\n : typeof b.valueOf !== \"function\" && typeof b.toString !== \"function\" || isNaN(b) ? object\n : number)(a, b);\n}\n","export default function(a, b) {\n var d = new Date;\n return a = +a, b -= a, function(t) {\n return d.setTime(a + b * t), d;\n };\n}\n","import value from \"./value\";\n\nexport default function(a, b) {\n var nb = b ? b.length : 0,\n na = a ? Math.min(nb, a.length) : 0,\n x = new Array(na),\n c = new Array(nb),\n i;\n\n for (i = 0; i < na; ++i) x[i] = value(a[i], b[i]);\n for (; i < nb; ++i) c[i] = b[i];\n\n return function(t) {\n for (i = 0; i < na; ++i) c[i] = x[i](t);\n return c;\n };\n}\n","import value from \"./value\";\n\nexport default function(a, b) {\n var i = {},\n c = {},\n k;\n\n if (a === null || typeof a !== \"object\") a = {};\n if (b === null || typeof b !== \"object\") b = {};\n\n for (k in b) {\n if (k in a) {\n i[k] = value(a[k], b[k]);\n } else {\n c[k] = b[k];\n }\n }\n\n return function(t) {\n for (k in i) c[k] = i[k](t);\n return c;\n };\n}\n","export default function(a, b) {\n return a = +a, b -= a, function(t) {\n return Math.round(a + b * t);\n };\n}\n","var degrees = 180 / Math.PI;\n\nexport var identity = {\n translateX: 0,\n translateY: 0,\n rotate: 0,\n skewX: 0,\n scaleX: 1,\n scaleY: 1\n};\n\nexport default function(a, b, c, d, e, f) {\n var scaleX, scaleY, skewX;\n if (scaleX = Math.sqrt(a * a + b * b)) a /= scaleX, b /= scaleX;\n if (skewX = a * c + b * d) c -= a * skewX, d -= b * skewX;\n if (scaleY = Math.sqrt(c * c + d * d)) c /= scaleY, d /= scaleY, skewX /= scaleY;\n if (a * d < b * c) a = -a, b = -b, skewX = -skewX, scaleX = -scaleX;\n return {\n translateX: e,\n translateY: f,\n rotate: Math.atan2(b, a) * degrees,\n skewX: Math.atan(skewX) * degrees,\n scaleX: scaleX,\n scaleY: scaleY\n };\n}\n","import number from \"../number\";\nimport {parseCss, parseSvg} from \"./parse\";\n\nfunction interpolateTransform(parse, pxComma, pxParen, degParen) {\n\n function pop(s) {\n return s.length ? s.pop() + \" \" : \"\";\n }\n\n function translate(xa, ya, xb, yb, s, q) {\n if (xa !== xb || ya !== yb) {\n var i = s.push(\"translate(\", null, pxComma, null, pxParen);\n q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\n } else if (xb || yb) {\n s.push(\"translate(\" + xb + pxComma + yb + pxParen);\n }\n }\n\n function rotate(a, b, s, q) {\n if (a !== b) {\n if (a - b > 180) b += 360; else if (b - a > 180) a += 360; // shortest path\n q.push({i: s.push(pop(s) + \"rotate(\", null, degParen) - 2, x: number(a, b)});\n } else if (b) {\n s.push(pop(s) + \"rotate(\" + b + degParen);\n }\n }\n\n function skewX(a, b, s, q) {\n if (a !== b) {\n q.push({i: s.push(pop(s) + \"skewX(\", null, degParen) - 2, x: number(a, b)});\n } else if (b) {\n s.push(pop(s) + \"skewX(\" + b + degParen);\n }\n }\n\n function scale(xa, ya, xb, yb, s, q) {\n if (xa !== xb || ya !== yb) {\n var i = s.push(pop(s) + \"scale(\", null, \",\", null, \")\");\n q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\n } else if (xb !== 1 || yb !== 1) {\n s.push(pop(s) + \"scale(\" + xb + \",\" + yb + \")\");\n }\n }\n\n return function(a, b) {\n var s = [], // string constants and placeholders\n q = []; // number interpolators\n a = parse(a), b = parse(b);\n translate(a.translateX, a.translateY, b.translateX, b.translateY, s, q);\n rotate(a.rotate, b.rotate, s, q);\n skewX(a.skewX, b.skewX, s, q);\n scale(a.scaleX, a.scaleY, b.scaleX, b.scaleY, s, q);\n a = b = null; // gc\n return function(t) {\n var i = -1, n = q.length, o;\n while (++i < n) s[(o = q[i]).i] = o.x(t);\n return s.join(\"\");\n };\n };\n}\n\nexport var interpolateTransformCss = interpolateTransform(parseCss, \"px, \", \"px)\", \"deg)\");\nexport var interpolateTransformSvg = interpolateTransform(parseSvg, \", \", \")\", \")\");\n","var rho = Math.SQRT2,\n rho2 = 2,\n rho4 = 4,\n epsilon2 = 1e-12;\n\nfunction cosh(x) {\n return ((x = Math.exp(x)) + 1 / x) / 2;\n}\n\nfunction sinh(x) {\n return ((x = Math.exp(x)) - 1 / x) / 2;\n}\n\nfunction tanh(x) {\n return ((x = Math.exp(2 * x)) - 1) / (x + 1);\n}\n\n// p0 = [ux0, uy0, w0]\n// p1 = [ux1, uy1, w1]\nexport default function(p0, p1) {\n var ux0 = p0[0], uy0 = p0[1], w0 = p0[2],\n ux1 = p1[0], uy1 = p1[1], w1 = p1[2],\n dx = ux1 - ux0,\n dy = uy1 - uy0,\n d2 = dx * dx + dy * dy,\n i,\n S;\n\n // Special case for u0 ≅ u1.\n if (d2 < epsilon2) {\n S = Math.log(w1 / w0) / rho;\n i = function(t) {\n return [\n ux0 + t * dx,\n uy0 + t * dy,\n w0 * Math.exp(rho * t * S)\n ];\n }\n }\n\n // General case.\n else {\n var d1 = Math.sqrt(d2),\n b0 = (w1 * w1 - w0 * w0 + rho4 * d2) / (2 * w0 * rho2 * d1),\n b1 = (w1 * w1 - w0 * w0 - rho4 * d2) / (2 * w1 * rho2 * d1),\n r0 = Math.log(Math.sqrt(b0 * b0 + 1) - b0),\n r1 = Math.log(Math.sqrt(b1 * b1 + 1) - b1);\n S = (r1 - r0) / rho;\n i = function(t) {\n var s = t * S,\n coshr0 = cosh(r0),\n u = w0 / (rho2 * d1) * (coshr0 * tanh(rho * s + r0) - sinh(r0));\n return [\n ux0 + u * dx,\n uy0 + u * dy,\n w0 * coshr0 / cosh(rho * s + r0)\n ];\n }\n }\n\n i.duration = S * 1000;\n\n return i;\n}\n","import {hsl as colorHsl} from \"d3-color\";\nimport color, {hue} from \"./color\";\n\nfunction hsl(hue) {\n return function(start, end) {\n var h = hue((start = colorHsl(start)).h, (end = colorHsl(end)).h),\n s = color(start.s, end.s),\n l = color(start.l, end.l),\n opacity = color(start.opacity, end.opacity);\n return function(t) {\n start.h = h(t);\n start.s = s(t);\n start.l = l(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n}\n\nexport default hsl(hue);\nexport var hslLong = hsl(color);\n","import {hcl as colorHcl} from \"d3-color\";\nimport color, {hue} from \"./color\";\n\nfunction hcl(hue) {\n return function(start, end) {\n var h = hue((start = colorHcl(start)).h, (end = colorHcl(end)).h),\n c = color(start.c, end.c),\n l = color(start.l, end.l),\n opacity = color(start.opacity, end.opacity);\n return function(t) {\n start.h = h(t);\n start.c = c(t);\n start.l = l(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n}\n\nexport default hcl(hue);\nexport var hclLong = hcl(color);\n","import {cubehelix as colorCubehelix} from \"d3-color\";\nimport color, {hue} from \"./color\";\n\nfunction cubehelix(hue) {\n return (function cubehelixGamma(y) {\n y = +y;\n\n function cubehelix(start, end) {\n var h = hue((start = colorCubehelix(start)).h, (end = colorCubehelix(end)).h),\n s = color(start.s, end.s),\n l = color(start.l, end.l),\n opacity = color(start.opacity, end.opacity);\n return function(t) {\n start.h = h(t);\n start.s = s(t);\n start.l = l(Math.pow(t, y));\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n\n cubehelix.gamma = cubehelixGamma;\n\n return cubehelix;\n })(1);\n}\n\nexport default cubehelix(hue);\nexport var cubehelixLong = cubehelix(color);\n","export default function piecewise(interpolate, values) {\n var i = 0, n = values.length - 1, v = values[0], I = new Array(n < 0 ? 0 : n);\n while (i < n) I[i] = interpolate(v, v = values[++i]);\n return function(t) {\n var i = Math.max(0, Math.min(n - 1, Math.floor(t *= n)));\n return I[i](t - i);\n };\n}\n","export default function(interpolator, n) {\n var samples = new Array(n);\n for (var i = 0; i < n; ++i) samples[i] = interpolator(i / (n - 1));\n return samples;\n}\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","export default function(x) {\n return +x;\n}\n","import {bisect} from \"d3-array\";\nimport {interpolate as interpolateValue, interpolateRound} from \"d3-interpolate\";\nimport {map, slice} from \"./array\";\nimport constant from \"./constant\";\nimport number from \"./number\";\n\nvar unit = [0, 1];\n\nexport function deinterpolateLinear(a, b) {\n return (b -= (a = +a))\n ? function(x) { return (x - a) / b; }\n : constant(b);\n}\n\nfunction deinterpolateClamp(deinterpolate) {\n return function(a, b) {\n var d = deinterpolate(a = +a, b = +b);\n return function(x) { return x <= a ? 0 : x >= b ? 1 : d(x); };\n };\n}\n\nfunction reinterpolateClamp(reinterpolate) {\n return function(a, b) {\n var r = reinterpolate(a = +a, b = +b);\n return function(t) { return t <= 0 ? a : t >= 1 ? b : r(t); };\n };\n}\n\nfunction bimap(domain, range, deinterpolate, reinterpolate) {\n var d0 = domain[0], d1 = domain[1], r0 = range[0], r1 = range[1];\n if (d1 < d0) d0 = deinterpolate(d1, d0), r0 = reinterpolate(r1, r0);\n else d0 = deinterpolate(d0, d1), r0 = reinterpolate(r0, r1);\n return function(x) { return r0(d0(x)); };\n}\n\nfunction polymap(domain, range, deinterpolate, reinterpolate) {\n var j = Math.min(domain.length, range.length) - 1,\n d = new Array(j),\n r = new Array(j),\n i = -1;\n\n // Reverse descending domains.\n if (domain[j] < domain[0]) {\n domain = domain.slice().reverse();\n range = range.slice().reverse();\n }\n\n while (++i < j) {\n d[i] = deinterpolate(domain[i], domain[i + 1]);\n r[i] = reinterpolate(range[i], range[i + 1]);\n }\n\n return function(x) {\n var i = bisect(domain, x, 1, j) - 1;\n return r[i](d[i](x));\n };\n}\n\nexport function copy(source, target) {\n return target\n .domain(source.domain())\n .range(source.range())\n .interpolate(source.interpolate())\n .clamp(source.clamp());\n}\n\n// deinterpolate(a, b)(x) takes a domain value x in [a,b] and returns the corresponding parameter t in [0,1].\n// reinterpolate(a, b)(t) takes a parameter t in [0,1] and returns the corresponding domain value x in [a,b].\nexport default function continuous(deinterpolate, reinterpolate) {\n var domain = unit,\n range = unit,\n interpolate = interpolateValue,\n clamp = false,\n piecewise,\n output,\n input;\n\n function rescale() {\n piecewise = Math.min(domain.length, range.length) > 2 ? polymap : bimap;\n output = input = null;\n return scale;\n }\n\n function scale(x) {\n return (output || (output = piecewise(domain, range, clamp ? deinterpolateClamp(deinterpolate) : deinterpolate, interpolate)))(+x);\n }\n\n scale.invert = function(y) {\n return (input || (input = piecewise(range, domain, deinterpolateLinear, clamp ? reinterpolateClamp(reinterpolate) : reinterpolate)))(+y);\n };\n\n scale.domain = function(_) {\n return arguments.length ? (domain = map.call(_, number), rescale()) : domain.slice();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = slice.call(_), rescale()) : range.slice();\n };\n\n scale.rangeRound = function(_) {\n return range = slice.call(_), interpolate = interpolateRound, rescale();\n };\n\n scale.clamp = function(_) {\n return arguments.length ? (clamp = !!_, rescale()) : clamp;\n };\n\n scale.interpolate = function(_) {\n return arguments.length ? (interpolate = _, rescale()) : interpolate;\n };\n\n return rescale();\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].\nexport default function(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","import formatDecimal from \"./formatDecimal\";\n\nexport default function(x) {\n return x = formatDecimal(Math.abs(x)), x ? x[1] : NaN;\n}\n","// [[fill]align][sign][symbol][0][width][,][.precision][~][type]\nvar re = /^(?:(.)?([<>=^]))?([+\\-( ])?([$#])?(0)?(\\d+)?(,)?(\\.\\d+)?(~)?([a-z%])?$/i;\n\nexport default function formatSpecifier(specifier) {\n return new FormatSpecifier(specifier);\n}\n\nformatSpecifier.prototype = FormatSpecifier.prototype; // instanceof\n\nfunction FormatSpecifier(specifier) {\n if (!(match = re.exec(specifier))) throw new Error(\"invalid format: \" + specifier);\n var match;\n this.fill = match[1] || \" \";\n this.align = match[2] || \">\";\n this.sign = match[3] || \"-\";\n this.symbol = match[4] || \"\";\n this.zero = !!match[5];\n this.width = match[6] && +match[6];\n this.comma = !!match[7];\n this.precision = match[8] && +match[8].slice(1);\n this.trim = !!match[9];\n this.type = match[10] || \"\";\n}\n\nFormatSpecifier.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.trim ? \"~\" : \"\")\n + this.type;\n};\n","// Trims insignificant zeros, e.g., replaces 1.2000k with 1.2k.\nexport default function(s) {\n out: for (var n = s.length, i = 1, i0 = -1, i1; i < n; ++i) {\n switch (s[i]) {\n case \".\": i0 = i1 = i; break;\n case \"0\": if (i0 === 0) i0 = i; i1 = i; break;\n default: if (i0 > 0) { if (!+s[i]) break out; i0 = 0; } break;\n }\n }\n return i0 > 0 ? s.slice(0, i0) + s.slice(i1 + 1) : s;\n}\n","import formatDecimal from \"./formatDecimal\";\n\nexport var prefixExponent;\n\nexport default function(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, Math.max(0, p + i - 1))[0]; // less than 1y!\n}\n","import formatLocale from \"./locale\";\n\nvar locale;\nexport var format;\nexport var formatPrefix;\n\ndefaultLocale({\n decimal: \".\",\n thousands: \",\",\n grouping: [3],\n currency: [\"$\", \"\"]\n});\n\nexport default function defaultLocale(definition) {\n locale = formatLocale(definition);\n format = locale.format;\n formatPrefix = locale.formatPrefix;\n return locale;\n}\n","import formatDecimal from \"./formatDecimal\";\n\nexport default function(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","import formatPrefixAuto from \"./formatPrefixAuto\";\nimport formatRounded from \"./formatRounded\";\n\nexport default {\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","export default function(x) {\n return x;\n}\n","import exponent from \"./exponent\";\nimport formatGroup from \"./formatGroup\";\nimport formatNumerals from \"./formatNumerals\";\nimport formatSpecifier from \"./formatSpecifier\";\nimport formatTrim from \"./formatTrim\";\nimport formatTypes from \"./formatTypes\";\nimport {prefixExponent} from \"./formatPrefixAuto\";\nimport identity from \"./identity\";\n\nvar prefixes = [\"y\",\"z\",\"a\",\"f\",\"p\",\"n\",\"µ\",\"m\",\"\",\"k\",\"M\",\"G\",\"T\",\"P\",\"E\",\"Z\",\"Y\"];\n\nexport default function(locale) {\n var group = locale.grouping && locale.thousands ? formatGroup(locale.grouping, locale.thousands) : identity,\n currency = locale.currency,\n decimal = locale.decimal,\n numerals = locale.numerals ? formatNumerals(locale.numerals) : identity,\n percent = locale.percent || \"%\";\n\n function newFormat(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 trim = specifier.trim,\n type = specifier.type;\n\n // The \"n\" type is an alias for \",g\".\n if (type === \"n\") comma = true, type = \"g\";\n\n // The \"\" type, and any invalid type, is an alias for \".12~g\".\n else if (!formatTypes[type]) precision == null && (precision = 12), trim = true, type = \"g\";\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 // 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) ? percent : \"\";\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 = /[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 ? 6\n : /[gprs]/.test(type) ? Math.max(1, Math.min(21, precision))\n : Math.max(0, Math.min(20, precision));\n\n function format(value) {\n var valuePrefix = prefix,\n valueSuffix = suffix,\n i, n, c;\n\n if (type === \"c\") {\n valueSuffix = formatType(value) + valueSuffix;\n value = \"\";\n } else {\n value = +value;\n\n // Perform the initial formatting.\n var valueNegative = value < 0;\n value = formatType(Math.abs(value), precision);\n\n // Trim insignificant zeros.\n if (trim) value = formatTrim(value);\n\n // If a negative value rounds to zero during formatting, treat as positive.\n if (valueNegative && +value === 0) valueNegative = false;\n\n // Compute the prefix and suffix.\n valuePrefix = (valueNegative ? (sign === \"(\" ? sign : \"-\") : sign === \"-\" || sign === \"(\" ? \"\" : sign) + valuePrefix;\n valueSuffix = (type === \"s\" ? prefixes[8 + prefixExponent / 3] : \"\") + valueSuffix + (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 i = -1, n = value.length;\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 \"<\": value = valuePrefix + value + valueSuffix + padding; break;\n case \"=\": value = valuePrefix + padding + value + valueSuffix; break;\n case \"^\": value = padding.slice(0, length = padding.length >> 1) + valuePrefix + value + valueSuffix + padding.slice(length); break;\n default: value = padding + valuePrefix + value + valueSuffix; break;\n }\n\n return numerals(value);\n }\n\n format.toString = function() {\n return specifier + \"\";\n };\n\n return format;\n }\n\n function formatPrefix(specifier, value) {\n var f = newFormat((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: newFormat,\n formatPrefix: formatPrefix\n };\n}\n","export default function(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","export default function(numerals) {\n return function(value) {\n return value.replace(/[0-9]/g, function(i) {\n return numerals[+i];\n });\n };\n}\n","import exponent from \"./exponent\";\n\nexport default function(step) {\n return Math.max(0, -exponent(Math.abs(step)));\n}\n","import {tickStep} from \"d3-array\";\nimport {format, formatPrefix, formatSpecifier, precisionFixed, precisionPrefix, precisionRound} from \"d3-format\";\n\nexport default function(domain, count, specifier) {\n var start = domain[0],\n stop = domain[domain.length - 1],\n step = tickStep(start, stop, count == null ? 10 : count),\n precision;\n specifier = formatSpecifier(specifier == null ? \",f\" : specifier);\n switch (specifier.type) {\n case \"s\": {\n var value = Math.max(Math.abs(start), Math.abs(stop));\n if (specifier.precision == null && !isNaN(precision = precisionPrefix(step, value))) specifier.precision = precision;\n return formatPrefix(specifier, value);\n }\n case \"\":\n case \"e\":\n case \"g\":\n case \"p\":\n case \"r\": {\n if (specifier.precision == null && !isNaN(precision = precisionRound(step, Math.max(Math.abs(start), Math.abs(stop))))) specifier.precision = precision - (specifier.type === \"e\");\n break;\n }\n case \"f\":\n case \"%\": {\n if (specifier.precision == null && !isNaN(precision = precisionFixed(step))) specifier.precision = precision - (specifier.type === \"%\") * 2;\n break;\n }\n }\n return format(specifier);\n}\n","import exponent from \"./exponent\";\n\nexport default function(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","import exponent from \"./exponent\";\n\nexport default function(step, max) {\n step = Math.abs(step), max = Math.abs(max) - step;\n return Math.max(0, exponent(max) - exponent(step)) + 1;\n}\n","import {ticks, tickIncrement} from \"d3-array\";\nimport {interpolateNumber as reinterpolate} from \"d3-interpolate\";\nimport {default as continuous, copy, deinterpolateLinear as deinterpolate} from \"./continuous\";\nimport tickFormat from \"./tickFormat\";\n\nexport function linearish(scale) {\n var domain = scale.domain;\n\n scale.ticks = function(count) {\n var d = domain();\n return ticks(d[0], d[d.length - 1], count == null ? 10 : count);\n };\n\n scale.tickFormat = function(count, specifier) {\n return tickFormat(domain(), count, specifier);\n };\n\n scale.nice = function(count) {\n if (count == null) count = 10;\n\n var d = domain(),\n i0 = 0,\n i1 = d.length - 1,\n start = d[i0],\n stop = d[i1],\n step;\n\n if (stop < start) {\n step = start, start = stop, stop = step;\n step = i0, i0 = i1, i1 = step;\n }\n\n step = tickIncrement(start, stop, count);\n\n if (step > 0) {\n start = Math.floor(start / step) * step;\n stop = Math.ceil(stop / step) * step;\n step = tickIncrement(start, stop, count);\n } else if (step < 0) {\n start = Math.ceil(start * step) / step;\n stop = Math.floor(stop * step) / step;\n step = tickIncrement(start, stop, count);\n }\n\n if (step > 0) {\n d[i0] = Math.floor(start / step) * step;\n d[i1] = Math.ceil(stop / step) * step;\n domain(d);\n } else if (step < 0) {\n d[i0] = Math.ceil(start * step) / step;\n d[i1] = Math.floor(stop * step) / step;\n domain(d);\n }\n\n return scale;\n };\n\n return scale;\n}\n\nexport default function linear() {\n var scale = continuous(deinterpolate, reinterpolate);\n\n scale.copy = function() {\n return copy(scale, linear());\n };\n\n return linearish(scale);\n}\n","import {map} from \"./array\";\nimport {linearish} from \"./linear\";\nimport number from \"./number\";\n\nexport default function identity() {\n var domain = [0, 1];\n\n function scale(x) {\n return +x;\n }\n\n scale.invert = scale;\n\n scale.domain = scale.range = function(_) {\n return arguments.length ? (domain = map.call(_, number), scale) : domain.slice();\n };\n\n scale.copy = function() {\n return identity().domain(domain);\n };\n\n return linearish(scale);\n}\n","export default function(domain, interval) {\n domain = domain.slice();\n\n var i0 = 0,\n i1 = domain.length - 1,\n x0 = domain[i0],\n x1 = domain[i1],\n t;\n\n if (x1 < x0) {\n t = i0, i0 = i1, i1 = t;\n t = x0, x0 = x1, x1 = t;\n }\n\n domain[i0] = interval.floor(x0);\n domain[i1] = interval.ceil(x1);\n return domain;\n}\n","import {ticks} from \"d3-array\";\nimport {format} from \"d3-format\";\nimport constant from \"./constant\";\nimport nice from \"./nice\";\nimport {default as continuous, copy} from \"./continuous\";\n\nfunction deinterpolate(a, b) {\n return (b = Math.log(b / a))\n ? function(x) { return Math.log(x / a) / b; }\n : constant(b);\n}\n\nfunction reinterpolate(a, b) {\n return a < 0\n ? function(t) { return -Math.pow(-b, t) * Math.pow(-a, 1 - t); }\n : function(t) { return Math.pow(b, t) * Math.pow(a, 1 - t); };\n}\n\nfunction pow10(x) {\n return isFinite(x) ? +(\"1e\" + x) : x < 0 ? 0 : x;\n}\n\nfunction powp(base) {\n return base === 10 ? pow10\n : base === Math.E ? Math.exp\n : function(x) { return Math.pow(base, x); };\n}\n\nfunction logp(base) {\n return base === Math.E ? Math.log\n : base === 10 && Math.log10\n || base === 2 && Math.log2\n || (base = Math.log(base), function(x) { return Math.log(x) / base; });\n}\n\nfunction reflect(f) {\n return function(x) {\n return -f(-x);\n };\n}\n\nexport default function log() {\n var scale = continuous(deinterpolate, reinterpolate).domain([1, 10]),\n domain = scale.domain,\n base = 10,\n logs = logp(10),\n pows = powp(10);\n\n function rescale() {\n logs = logp(base), pows = powp(base);\n if (domain()[0] < 0) logs = reflect(logs), pows = reflect(pows);\n return scale;\n }\n\n scale.base = function(_) {\n return arguments.length ? (base = +_, rescale()) : base;\n };\n\n scale.domain = function(_) {\n return arguments.length ? (domain(_), rescale()) : domain();\n };\n\n scale.ticks = function(count) {\n var d = domain(),\n u = d[0],\n v = d[d.length - 1],\n r;\n\n if (r = v < u) i = u, u = v, v = i;\n\n var i = logs(u),\n j = logs(v),\n p,\n k,\n t,\n n = count == null ? 10 : +count,\n z = [];\n\n if (!(base % 1) && j - i < n) {\n i = Math.round(i) - 1, j = Math.round(j) + 1;\n if (u > 0) for (; i < j; ++i) {\n for (k = 1, p = pows(i); k < base; ++k) {\n t = p * k;\n if (t < u) continue;\n if (t > v) break;\n z.push(t);\n }\n } else for (; i < j; ++i) {\n for (k = base - 1, p = pows(i); k >= 1; --k) {\n t = p * k;\n if (t < u) continue;\n if (t > v) break;\n z.push(t);\n }\n }\n } else {\n z = ticks(i, j, Math.min(j - i, n)).map(pows);\n }\n\n return r ? z.reverse() : z;\n };\n\n scale.tickFormat = function(count, specifier) {\n if (specifier == null) specifier = base === 10 ? \".0e\" : \",\";\n if (typeof specifier !== \"function\") specifier = format(specifier);\n if (count === Infinity) return specifier;\n if (count == null) count = 10;\n var k = Math.max(1, base * count / scale.ticks().length); // TODO fast estimate?\n return function(d) {\n var i = d / pows(Math.round(logs(d)));\n if (i * base < base - 0.5) i *= base;\n return i <= k ? specifier(d) : \"\";\n };\n };\n\n scale.nice = function() {\n return domain(nice(domain(), {\n floor: function(x) { return pows(Math.floor(logs(x))); },\n ceil: function(x) { return pows(Math.ceil(logs(x))); }\n }));\n };\n\n scale.copy = function() {\n return copy(scale, log().base(base));\n };\n\n return scale;\n}\n","import constant from \"./constant\";\nimport {linearish} from \"./linear\";\nimport {default as continuous, copy} from \"./continuous\";\n\nfunction raise(x, exponent) {\n return x < 0 ? -Math.pow(-x, exponent) : Math.pow(x, exponent);\n}\n\nexport default function pow() {\n var exponent = 1,\n scale = continuous(deinterpolate, reinterpolate),\n domain = scale.domain;\n\n function deinterpolate(a, b) {\n return (b = raise(b, exponent) - (a = raise(a, exponent)))\n ? function(x) { return (raise(x, exponent) - a) / b; }\n : constant(b);\n }\n\n function reinterpolate(a, b) {\n b = raise(b, exponent) - (a = raise(a, exponent));\n return function(t) { return raise(a + b * t, 1 / exponent); };\n }\n\n scale.exponent = function(_) {\n return arguments.length ? (exponent = +_, domain(domain())) : exponent;\n };\n\n scale.copy = function() {\n return copy(scale, pow().exponent(exponent));\n };\n\n return linearish(scale);\n}\n\nexport function sqrt() {\n return pow().exponent(0.5);\n}\n","import {ascending, bisect, quantile as threshold} from \"d3-array\";\nimport {slice} from \"./array\";\n\nexport default function quantile() {\n var domain = [],\n range = [],\n thresholds = [];\n\n function rescale() {\n var i = 0, n = Math.max(1, range.length);\n thresholds = new Array(n - 1);\n while (++i < n) thresholds[i - 1] = threshold(domain, i / n);\n return scale;\n }\n\n function scale(x) {\n if (!isNaN(x = +x)) return range[bisect(thresholds, x)];\n }\n\n scale.invertExtent = function(y) {\n var i = range.indexOf(y);\n return i < 0 ? [NaN, NaN] : [\n i > 0 ? thresholds[i - 1] : domain[0],\n i < thresholds.length ? thresholds[i] : domain[domain.length - 1]\n ];\n };\n\n scale.domain = function(_) {\n if (!arguments.length) return domain.slice();\n domain = [];\n for (var i = 0, n = _.length, d; i < n; ++i) if (d = _[i], d != null && !isNaN(d = +d)) domain.push(d);\n domain.sort(ascending);\n return rescale();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = slice.call(_), rescale()) : range.slice();\n };\n\n scale.quantiles = function() {\n return thresholds.slice();\n };\n\n scale.copy = function() {\n return quantile()\n .domain(domain)\n .range(range);\n };\n\n return scale;\n}\n","import {bisect} from \"d3-array\";\nimport {slice} from \"./array\";\nimport {linearish} from \"./linear\";\n\nexport default function quantize() {\n var x0 = 0,\n x1 = 1,\n n = 1,\n domain = [0.5],\n range = [0, 1];\n\n function scale(x) {\n if (x <= x) return range[bisect(domain, x, 0, n)];\n }\n\n function rescale() {\n var i = -1;\n domain = new Array(n);\n while (++i < n) domain[i] = ((i + 1) * x1 - (i - n) * x0) / (n + 1);\n return scale;\n }\n\n scale.domain = function(_) {\n return arguments.length ? (x0 = +_[0], x1 = +_[1], rescale()) : [x0, x1];\n };\n\n scale.range = function(_) {\n return arguments.length ? (n = (range = slice.call(_)).length - 1, rescale()) : range.slice();\n };\n\n scale.invertExtent = function(y) {\n var i = range.indexOf(y);\n return i < 0 ? [NaN, NaN]\n : i < 1 ? [x0, domain[0]]\n : i >= n ? [domain[n - 1], x1]\n : [domain[i - 1], domain[i]];\n };\n\n scale.copy = function() {\n return quantize()\n .domain([x0, x1])\n .range(range);\n };\n\n return linearish(scale);\n}\n","import {bisect} from \"d3-array\";\nimport {slice} from \"./array\";\n\nexport default function threshold() {\n var domain = [0.5],\n range = [0, 1],\n n = 1;\n\n function scale(x) {\n if (x <= x) return range[bisect(domain, x, 0, n)];\n }\n\n scale.domain = function(_) {\n return arguments.length ? (domain = slice.call(_), n = Math.min(domain.length, range.length - 1), scale) : domain.slice();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = slice.call(_), n = Math.min(domain.length, range.length - 1), scale) : range.slice();\n };\n\n scale.invertExtent = function(y) {\n var i = range.indexOf(y);\n return [domain[i - 1], domain[i]];\n };\n\n scale.copy = function() {\n return threshold()\n .domain(domain)\n .range(range);\n };\n\n return scale;\n}\n","var t0 = new Date,\n t1 = new Date;\n\nexport default function newInterval(floori, offseti, count, field) {\n\n function interval(date) {\n return floori(date = new Date(+date)), date;\n }\n\n interval.floor = interval;\n\n interval.ceil = function(date) {\n return floori(date = new Date(date - 1)), offseti(date, 1), floori(date), date;\n };\n\n interval.round = function(date) {\n var d0 = interval(date),\n d1 = interval.ceil(date);\n return date - d0 < d1 - date ? d0 : d1;\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 = [], previous;\n start = interval.ceil(start);\n step = step == null ? 1 : Math.floor(step);\n if (!(start < stop) || !(step > 0)) return range; // also handles Invalid Date\n do range.push(previous = new Date(+start)), offseti(start, step), floori(start);\n while (previous < start && start < stop);\n return range;\n };\n\n interval.filter = function(test) {\n return newInterval(function(date) {\n if (date >= date) while (floori(date), !test(date)) date.setTime(date - 1);\n }, function(date, step) {\n if (date >= date) {\n if (step < 0) while (++step <= 0) {\n while (offseti(date, -1), !test(date)) {} // eslint-disable-line no-empty\n } else while (--step >= 0) {\n while (offseti(date, +1), !test(date)) {} // eslint-disable-line no-empty\n }\n }\n });\n };\n\n if (count) {\n 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 interval.every = function(step) {\n step = Math.floor(step);\n return !isFinite(step) || !(step > 0) ? null\n : !(step > 1) ? interval\n : interval.filter(field\n ? function(d) { return field(d) % step === 0; }\n : function(d) { return interval.count(0, d) % step === 0; });\n };\n }\n\n return interval;\n}\n","import interval from \"./interval\";\n\nvar millisecond = interval(function() {\n // noop\n}, function(date, step) {\n date.setTime(+date + step);\n}, function(start, end) {\n return end - start;\n});\n\n// An optimized implementation for this simple case.\nmillisecond.every = function(k) {\n k = Math.floor(k);\n if (!isFinite(k) || !(k > 0)) return null;\n if (!(k > 1)) return millisecond;\n return interval(function(date) {\n date.setTime(Math.floor(date / k) * k);\n }, function(date, step) {\n date.setTime(+date + step * k);\n }, function(start, end) {\n return (end - start) / k;\n });\n};\n\nexport default millisecond;\nexport var milliseconds = millisecond.range;\n","export var durationSecond = 1e3;\nexport var durationMinute = 6e4;\nexport var durationHour = 36e5;\nexport var durationDay = 864e5;\nexport var durationWeek = 6048e5;\n","import interval from \"./interval\";\nimport {durationSecond} from \"./duration\";\n\nvar second = interval(function(date) {\n date.setTime(Math.floor(date / durationSecond) * durationSecond);\n}, function(date, step) {\n date.setTime(+date + step * durationSecond);\n}, function(start, end) {\n return (end - start) / durationSecond;\n}, function(date) {\n return date.getUTCSeconds();\n});\n\nexport default second;\nexport var seconds = second.range;\n","import interval from \"./interval\";\nimport {durationMinute} from \"./duration\";\n\nvar minute = interval(function(date) {\n date.setTime(Math.floor(date / durationMinute) * durationMinute);\n}, function(date, step) {\n date.setTime(+date + step * durationMinute);\n}, function(start, end) {\n return (end - start) / durationMinute;\n}, function(date) {\n return date.getMinutes();\n});\n\nexport default minute;\nexport var minutes = minute.range;\n","import interval from \"./interval\";\nimport {durationHour, durationMinute} from \"./duration\";\n\nvar hour = interval(function(date) {\n var offset = date.getTimezoneOffset() * durationMinute % durationHour;\n if (offset < 0) offset += durationHour;\n date.setTime(Math.floor((+date - offset) / durationHour) * durationHour + offset);\n}, function(date, step) {\n date.setTime(+date + step * durationHour);\n}, function(start, end) {\n return (end - start) / durationHour;\n}, function(date) {\n return date.getHours();\n});\n\nexport default hour;\nexport var hours = hour.range;\n","import interval from \"./interval\";\nimport {durationDay, durationMinute} from \"./duration\";\n\nvar day = interval(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()) * durationMinute) / durationDay;\n}, function(date) {\n return date.getDate() - 1;\n});\n\nexport default day;\nexport var days = day.range;\n","import interval from \"./interval\";\nimport {durationMinute, durationWeek} from \"./duration\";\n\nfunction weekday(i) {\n return interval(function(date) {\n date.setDate(date.getDate() - (date.getDay() + 7 - i) % 7);\n date.setHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setDate(date.getDate() + step * 7);\n }, function(start, end) {\n return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationWeek;\n });\n}\n\nexport var sunday = weekday(0);\nexport var monday = weekday(1);\nexport var tuesday = weekday(2);\nexport var wednesday = weekday(3);\nexport var thursday = weekday(4);\nexport var friday = weekday(5);\nexport var saturday = weekday(6);\n\nexport var sundays = sunday.range;\nexport var mondays = monday.range;\nexport var tuesdays = tuesday.range;\nexport var wednesdays = wednesday.range;\nexport var thursdays = thursday.range;\nexport var fridays = friday.range;\nexport var saturdays = saturday.range;\n","import interval from \"./interval\";\n\nvar month = interval(function(date) {\n date.setDate(1);\n date.setHours(0, 0, 0, 0);\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}, function(date) {\n return date.getMonth();\n});\n\nexport default month;\nexport var months = month.range;\n","import interval from \"./interval\";\n\nvar year = interval(function(date) {\n date.setMonth(0, 1);\n date.setHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setFullYear(date.getFullYear() + step);\n}, function(start, end) {\n return end.getFullYear() - start.getFullYear();\n}, function(date) {\n return date.getFullYear();\n});\n\n// An optimized implementation for this simple case.\nyear.every = function(k) {\n return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : interval(function(date) {\n date.setFullYear(Math.floor(date.getFullYear() / k) * k);\n date.setMonth(0, 1);\n date.setHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setFullYear(date.getFullYear() + step * k);\n });\n};\n\nexport default year;\nexport var years = year.range;\n","import interval from \"./interval\";\nimport {durationMinute} from \"./duration\";\n\nvar utcMinute = interval(function(date) {\n date.setUTCSeconds(0, 0);\n}, function(date, step) {\n date.setTime(+date + step * durationMinute);\n}, function(start, end) {\n return (end - start) / durationMinute;\n}, function(date) {\n return date.getUTCMinutes();\n});\n\nexport default utcMinute;\nexport var utcMinutes = utcMinute.range;\n","import interval from \"./interval\";\nimport {durationHour} from \"./duration\";\n\nvar utcHour = interval(function(date) {\n date.setUTCMinutes(0, 0, 0);\n}, function(date, step) {\n date.setTime(+date + step * durationHour);\n}, function(start, end) {\n return (end - start) / durationHour;\n}, function(date) {\n return date.getUTCHours();\n});\n\nexport default utcHour;\nexport var utcHours = utcHour.range;\n","import interval from \"./interval\";\nimport {durationDay} from \"./duration\";\n\nvar utcDay = interval(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) / durationDay;\n}, function(date) {\n return date.getUTCDate() - 1;\n});\n\nexport default utcDay;\nexport var utcDays = utcDay.range;\n","import interval from \"./interval\";\nimport {durationWeek} from \"./duration\";\n\nfunction utcWeekday(i) {\n return interval(function(date) {\n date.setUTCDate(date.getUTCDate() - (date.getUTCDay() + 7 - i) % 7);\n date.setUTCHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setUTCDate(date.getUTCDate() + step * 7);\n }, function(start, end) {\n return (end - start) / durationWeek;\n });\n}\n\nexport var utcSunday = utcWeekday(0);\nexport var utcMonday = utcWeekday(1);\nexport var utcTuesday = utcWeekday(2);\nexport var utcWednesday = utcWeekday(3);\nexport var utcThursday = utcWeekday(4);\nexport var utcFriday = utcWeekday(5);\nexport var utcSaturday = utcWeekday(6);\n\nexport var utcSundays = utcSunday.range;\nexport var utcMondays = utcMonday.range;\nexport var utcTuesdays = utcTuesday.range;\nexport var utcWednesdays = utcWednesday.range;\nexport var utcThursdays = utcThursday.range;\nexport var utcFridays = utcFriday.range;\nexport var utcSaturdays = utcSaturday.range;\n","import interval from \"./interval\";\n\nvar utcMonth = interval(function(date) {\n date.setUTCDate(1);\n date.setUTCHours(0, 0, 0, 0);\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}, function(date) {\n return date.getUTCMonth();\n});\n\nexport default utcMonth;\nexport var utcMonths = utcMonth.range;\n","import interval from \"./interval\";\n\nvar utcYear = interval(function(date) {\n date.setUTCMonth(0, 1);\n date.setUTCHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setUTCFullYear(date.getUTCFullYear() + step);\n}, function(start, end) {\n return end.getUTCFullYear() - start.getUTCFullYear();\n}, function(date) {\n return date.getUTCFullYear();\n});\n\n// An optimized implementation for this simple case.\nutcYear.every = function(k) {\n return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : interval(function(date) {\n date.setUTCFullYear(Math.floor(date.getUTCFullYear() / k) * k);\n date.setUTCMonth(0, 1);\n date.setUTCHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setUTCFullYear(date.getUTCFullYear() + step * k);\n });\n};\n\nexport default utcYear;\nexport var utcYears = utcYear.range;\n","import {\n timeDay,\n timeSunday,\n timeMonday,\n timeThursday,\n timeYear,\n utcDay,\n utcSunday,\n utcMonday,\n utcThursday,\n utcYear\n} from \"d3-time\";\n\nfunction 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\nfunction 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\nfunction newYear(y) {\n return {y: y, m: 0, d: 1, H: 0, M: 0, S: 0, L: 0};\n}\n\nexport default function formatLocale(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 periodRe = formatRe(locale_periods),\n 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 \"f\": formatMicroseconds,\n \"H\": formatHour24,\n \"I\": formatHour12,\n \"j\": formatDayOfYear,\n \"L\": formatMilliseconds,\n \"m\": formatMonthNumber,\n \"M\": formatMinutes,\n \"p\": formatPeriod,\n \"Q\": formatUnixTimestamp,\n \"s\": formatUnixTimestampSeconds,\n \"S\": formatSeconds,\n \"u\": formatWeekdayNumberMonday,\n \"U\": formatWeekNumberSunday,\n \"V\": formatWeekNumberISO,\n \"w\": formatWeekdayNumberSunday,\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 \"f\": formatUTCMicroseconds,\n \"H\": formatUTCHour24,\n \"I\": formatUTCHour12,\n \"j\": formatUTCDayOfYear,\n \"L\": formatUTCMilliseconds,\n \"m\": formatUTCMonthNumber,\n \"M\": formatUTCMinutes,\n \"p\": formatUTCPeriod,\n \"Q\": formatUnixTimestamp,\n \"s\": formatUnixTimestampSeconds,\n \"S\": formatUTCSeconds,\n \"u\": formatUTCWeekdayNumberMonday,\n \"U\": formatUTCWeekNumberSunday,\n \"V\": formatUTCWeekNumberISO,\n \"w\": formatUTCWeekdayNumberSunday,\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 \"f\": parseMicroseconds,\n \"H\": parseHour24,\n \"I\": parseHour24,\n \"j\": parseDayOfYear,\n \"L\": parseMilliseconds,\n \"m\": parseMonthNumber,\n \"M\": parseMinutes,\n \"p\": parsePeriod,\n \"Q\": parseUnixTimestamp,\n \"s\": parseUnixTimestampSeconds,\n \"S\": parseSeconds,\n \"u\": parseWeekdayNumberMonday,\n \"U\": parseWeekNumberSunday,\n \"V\": parseWeekNumberISO,\n \"w\": parseWeekdayNumberSunday,\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 if (!(date instanceof Date)) date = new Date(+date);\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 else pad = c === \"e\" ? \" \" : \"0\";\n if (format = formats[c]) c = format(date, 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 week, day;\n if (i != string.length) return null;\n\n // If a UNIX timestamp is specified, return it.\n if (\"Q\" in d) return new Date(d.Q);\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 // Convert day-of-week and week-of-year to day-of-year.\n if (\"V\" in d) {\n if (d.V < 1 || d.V > 53) return null;\n if (!(\"w\" in d)) d.w = 1;\n if (\"Z\" in d) {\n week = utcDate(newYear(d.y)), day = week.getUTCDay();\n week = day > 4 || day === 0 ? utcMonday.ceil(week) : utcMonday(week);\n week = utcDay.offset(week, (d.V - 1) * 7);\n d.y = week.getUTCFullYear();\n d.m = week.getUTCMonth();\n d.d = week.getUTCDate() + (d.w + 6) % 7;\n } else {\n week = newDate(newYear(d.y)), day = week.getDay();\n week = day > 4 || day === 0 ? timeMonday.ceil(week) : timeMonday(week);\n week = timeDay.offset(week, (d.V - 1) * 7);\n d.y = week.getFullYear();\n d.m = week.getMonth();\n d.d = week.getDate() + (d.w + 6) % 7;\n }\n } else if (\"W\" in d || \"U\" in d) {\n if (!(\"w\" in d)) d.w = \"u\" in d ? d.u % 7 : \"W\" in d ? 1 : 0;\n day = \"Z\" in d ? utcDate(newYear(d.y)).getUTCDay() : newDate(newYear(d.y)).getDay();\n d.m = 0;\n d.d = \"W\" in d ? (d.w + 6) % 7 + d.W * 7 - (day + 5) % 7 : d.w + d.U * 7 - (day + 6) % 7;\n }\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 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 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 parsePeriod(d, string, i) {\n var n = periodRe.exec(string.slice(i));\n return n ? (d.p = periodLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n }\n\n function parseShortWeekday(d, string, i) {\n var n = shortWeekdayRe.exec(string.slice(i));\n return n ? (d.w = shortWeekdayLookup[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[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[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[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 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.toString = function() { return specifier; };\n return f;\n },\n parse: function(specifier) {\n var p = newParse(specifier += \"\", localDate);\n p.toString = function() { return specifier; };\n return p;\n },\n utcFormat: function(specifier) {\n var f = newFormat(specifier += \"\", utcFormats);\n f.toString = function() { return specifier; };\n return f;\n },\n utcParse: function(specifier) {\n var p = newParse(specifier, utcDate);\n p.toString = function() { return specifier; };\n return p;\n }\n };\n}\n\nvar pads = {\"-\": \"\", \"_\": \" \", \"0\": \"0\"},\n numberRe = /^\\s*\\d+/, // note: ignores next directive\n percentRe = /^%/,\n requoteRe = /[\\\\^$*+?|[\\]().{}]/g;\n\nfunction 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\nfunction requote(s) {\n return s.replace(requoteRe, \"\\\\$&\");\n}\n\nfunction formatRe(names) {\n return new RegExp(\"^(?:\" + names.map(requote).join(\"|\") + \")\", \"i\");\n}\n\nfunction formatLookup(names) {\n var map = {}, i = -1, n = names.length;\n while (++i < n) map[names[i].toLowerCase()] = i;\n return map;\n}\n\nfunction parseWeekdayNumberSunday(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\nfunction parseWeekdayNumberMonday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 1));\n return n ? (d.u = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberSunday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.U = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberISO(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.V = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberMonday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.W = +n[0], i + n[0].length) : -1;\n}\n\nfunction 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\nfunction 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\nfunction parseZone(d, string, i) {\n var n = /^(Z)|([+-]\\d\\d)(?::?(\\d\\d))?/.exec(string.slice(i, i + 6));\n return n ? (d.Z = n[1] ? 0 : -(n[2] + (n[3] || \"00\")), i + n[0].length) : -1;\n}\n\nfunction 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\nfunction 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\nfunction 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\nfunction 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\nfunction 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\nfunction 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\nfunction 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\nfunction parseMicroseconds(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 6));\n return n ? (d.L = Math.floor(n[0] / 1000), i + n[0].length) : -1;\n}\n\nfunction parseLiteralPercent(d, string, i) {\n var n = percentRe.exec(string.slice(i, i + 1));\n return n ? i + n[0].length : -1;\n}\n\nfunction parseUnixTimestamp(d, string, i) {\n var n = numberRe.exec(string.slice(i));\n return n ? (d.Q = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseUnixTimestampSeconds(d, string, i) {\n var n = numberRe.exec(string.slice(i));\n return n ? (d.Q = (+n[0]) * 1000, i + n[0].length) : -1;\n}\n\nfunction formatDayOfMonth(d, p) {\n return pad(d.getDate(), p, 2);\n}\n\nfunction formatHour24(d, p) {\n return pad(d.getHours(), p, 2);\n}\n\nfunction formatHour12(d, p) {\n return pad(d.getHours() % 12 || 12, p, 2);\n}\n\nfunction formatDayOfYear(d, p) {\n return pad(1 + timeDay.count(timeYear(d), d), p, 3);\n}\n\nfunction formatMilliseconds(d, p) {\n return pad(d.getMilliseconds(), p, 3);\n}\n\nfunction formatMicroseconds(d, p) {\n return formatMilliseconds(d, p) + \"000\";\n}\n\nfunction formatMonthNumber(d, p) {\n return pad(d.getMonth() + 1, p, 2);\n}\n\nfunction formatMinutes(d, p) {\n return pad(d.getMinutes(), p, 2);\n}\n\nfunction formatSeconds(d, p) {\n return pad(d.getSeconds(), p, 2);\n}\n\nfunction formatWeekdayNumberMonday(d) {\n var day = d.getDay();\n return day === 0 ? 7 : day;\n}\n\nfunction formatWeekNumberSunday(d, p) {\n return pad(timeSunday.count(timeYear(d), d), p, 2);\n}\n\nfunction formatWeekNumberISO(d, p) {\n var day = d.getDay();\n d = (day >= 4 || day === 0) ? timeThursday(d) : timeThursday.ceil(d);\n return pad(timeThursday.count(timeYear(d), d) + (timeYear(d).getDay() === 4), p, 2);\n}\n\nfunction formatWeekdayNumberSunday(d) {\n return d.getDay();\n}\n\nfunction formatWeekNumberMonday(d, p) {\n return pad(timeMonday.count(timeYear(d), d), p, 2);\n}\n\nfunction formatYear(d, p) {\n return pad(d.getFullYear() % 100, p, 2);\n}\n\nfunction formatFullYear(d, p) {\n return pad(d.getFullYear() % 10000, p, 4);\n}\n\nfunction 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\nfunction formatUTCDayOfMonth(d, p) {\n return pad(d.getUTCDate(), p, 2);\n}\n\nfunction formatUTCHour24(d, p) {\n return pad(d.getUTCHours(), p, 2);\n}\n\nfunction formatUTCHour12(d, p) {\n return pad(d.getUTCHours() % 12 || 12, p, 2);\n}\n\nfunction formatUTCDayOfYear(d, p) {\n return pad(1 + utcDay.count(utcYear(d), d), p, 3);\n}\n\nfunction formatUTCMilliseconds(d, p) {\n return pad(d.getUTCMilliseconds(), p, 3);\n}\n\nfunction formatUTCMicroseconds(d, p) {\n return formatUTCMilliseconds(d, p) + \"000\";\n}\n\nfunction formatUTCMonthNumber(d, p) {\n return pad(d.getUTCMonth() + 1, p, 2);\n}\n\nfunction formatUTCMinutes(d, p) {\n return pad(d.getUTCMinutes(), p, 2);\n}\n\nfunction formatUTCSeconds(d, p) {\n return pad(d.getUTCSeconds(), p, 2);\n}\n\nfunction formatUTCWeekdayNumberMonday(d) {\n var dow = d.getUTCDay();\n return dow === 0 ? 7 : dow;\n}\n\nfunction formatUTCWeekNumberSunday(d, p) {\n return pad(utcSunday.count(utcYear(d), d), p, 2);\n}\n\nfunction formatUTCWeekNumberISO(d, p) {\n var day = d.getUTCDay();\n d = (day >= 4 || day === 0) ? utcThursday(d) : utcThursday.ceil(d);\n return pad(utcThursday.count(utcYear(d), d) + (utcYear(d).getUTCDay() === 4), p, 2);\n}\n\nfunction formatUTCWeekdayNumberSunday(d) {\n return d.getUTCDay();\n}\n\nfunction formatUTCWeekNumberMonday(d, p) {\n return pad(utcMonday.count(utcYear(d), d), p, 2);\n}\n\nfunction formatUTCYear(d, p) {\n return pad(d.getUTCFullYear() % 100, p, 2);\n}\n\nfunction formatUTCFullYear(d, p) {\n return pad(d.getUTCFullYear() % 10000, p, 4);\n}\n\nfunction formatUTCZone() {\n return \"+0000\";\n}\n\nfunction formatLiteralPercent() {\n return \"%\";\n}\n\nfunction formatUnixTimestamp(d) {\n return +d;\n}\n\nfunction formatUnixTimestampSeconds(d) {\n return Math.floor(+d / 1000);\n}\n","import formatLocale from \"./locale\";\n\nvar locale;\nexport var timeFormat;\nexport var timeParse;\nexport var utcFormat;\nexport var utcParse;\n\ndefaultLocale({\n dateTime: \"%x, %X\",\n date: \"%-m/%-d/%Y\",\n time: \"%-I:%M:%S %p\",\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\nexport default function defaultLocale(definition) {\n locale = formatLocale(definition);\n timeFormat = locale.format;\n timeParse = locale.parse;\n utcFormat = locale.utcFormat;\n utcParse = locale.utcParse;\n return locale;\n}\n","import {utcFormat} from \"./defaultLocale\";\n\nexport var isoSpecifier = \"%Y-%m-%dT%H:%M:%S.%LZ\";\n\nfunction formatIsoNative(date) {\n return date.toISOString();\n}\n\nvar formatIso = Date.prototype.toISOString\n ? formatIsoNative\n : utcFormat(isoSpecifier);\n\nexport default formatIso;\n","import {isoSpecifier} from \"./isoFormat\";\nimport {utcParse} from \"./defaultLocale\";\n\nfunction parseIsoNative(string) {\n var date = new Date(string);\n return isNaN(date) ? null : date;\n}\n\nvar parseIso = +new Date(\"2000-01-01T00:00:00.000Z\")\n ? parseIsoNative\n : utcParse(isoSpecifier);\n\nexport default parseIso;\n","import {bisector, tickStep} from \"d3-array\";\nimport {interpolateNumber as reinterpolate} from \"d3-interpolate\";\nimport {timeYear, timeMonth, timeWeek, timeDay, timeHour, timeMinute, timeSecond, timeMillisecond} from \"d3-time\";\nimport {timeFormat} from \"d3-time-format\";\nimport {map} from \"./array\";\nimport {default as continuous, copy, deinterpolateLinear as deinterpolate} from \"./continuous\";\nimport nice from \"./nice\";\n\nvar durationSecond = 1000,\n durationMinute = durationSecond * 60,\n durationHour = durationMinute * 60,\n durationDay = durationHour * 24,\n durationWeek = durationDay * 7,\n durationMonth = durationDay * 30,\n durationYear = durationDay * 365;\n\nfunction date(t) {\n return new Date(t);\n}\n\nfunction number(t) {\n return t instanceof Date ? +t : +new Date(+t);\n}\n\nexport function calendar(year, month, week, day, hour, minute, second, millisecond, format) {\n var scale = continuous(deinterpolate, reinterpolate),\n invert = scale.invert,\n domain = scale.domain;\n\n var formatMillisecond = format(\".%L\"),\n formatSecond = format(\":%S\"),\n formatMinute = format(\"%I:%M\"),\n formatHour = format(\"%I %p\"),\n formatDay = format(\"%a %d\"),\n formatWeek = format(\"%b %d\"),\n formatMonth = format(\"%B\"),\n formatYear = format(\"%Y\");\n\n var tickIntervals = [\n [second, 1, durationSecond],\n [second, 5, 5 * durationSecond],\n [second, 15, 15 * durationSecond],\n [second, 30, 30 * durationSecond],\n [minute, 1, durationMinute],\n [minute, 5, 5 * durationMinute],\n [minute, 15, 15 * durationMinute],\n [minute, 30, 30 * durationMinute],\n [ hour, 1, durationHour ],\n [ hour, 3, 3 * durationHour ],\n [ hour, 6, 6 * durationHour ],\n [ hour, 12, 12 * durationHour ],\n [ day, 1, durationDay ],\n [ day, 2, 2 * durationDay ],\n [ week, 1, durationWeek ],\n [ month, 1, durationMonth ],\n [ month, 3, 3 * durationMonth ],\n [ year, 1, durationYear ]\n ];\n\n function tickFormat(date) {\n return (second(date) < date ? formatMillisecond\n : minute(date) < date ? formatSecond\n : hour(date) < date ? formatMinute\n : day(date) < date ? formatHour\n : month(date) < date ? (week(date) < date ? formatDay : formatWeek)\n : year(date) < date ? formatMonth\n : formatYear)(date);\n }\n\n function tickInterval(interval, start, stop, step) {\n if (interval == null) interval = 10;\n\n // If a desired tick count is specified, pick a reasonable tick interval\n // based on the extent of the domain and a rough estimate of tick size.\n // Otherwise, assume interval is already a time interval and use it.\n if (typeof interval === \"number\") {\n var target = Math.abs(stop - start) / interval,\n i = bisector(function(i) { return i[2]; }).right(tickIntervals, target);\n if (i === tickIntervals.length) {\n step = tickStep(start / durationYear, stop / durationYear, interval);\n interval = year;\n } else if (i) {\n i = tickIntervals[target / tickIntervals[i - 1][2] < tickIntervals[i][2] / target ? i - 1 : i];\n step = i[1];\n interval = i[0];\n } else {\n step = Math.max(tickStep(start, stop, interval), 1);\n interval = millisecond;\n }\n }\n\n return step == null ? interval : interval.every(step);\n }\n\n scale.invert = function(y) {\n return new Date(invert(y));\n };\n\n scale.domain = function(_) {\n return arguments.length ? domain(map.call(_, number)) : domain().map(date);\n };\n\n scale.ticks = function(interval, step) {\n var d = domain(),\n t0 = d[0],\n t1 = d[d.length - 1],\n r = t1 < t0,\n t;\n if (r) t = t0, t0 = t1, t1 = t;\n t = tickInterval(interval, t0, t1, step);\n t = t ? t.range(t0, t1 + 1) : []; // inclusive stop\n return r ? t.reverse() : t;\n };\n\n scale.tickFormat = function(count, specifier) {\n return specifier == null ? tickFormat : format(specifier);\n };\n\n scale.nice = function(interval, step) {\n var d = domain();\n return (interval = tickInterval(interval, d[0], d[d.length - 1], step))\n ? domain(nice(d, interval))\n : scale;\n };\n\n scale.copy = function() {\n return copy(scale, calendar(year, month, week, day, hour, minute, second, millisecond, format));\n };\n\n return scale;\n}\n\nexport default function() {\n return calendar(timeYear, timeMonth, timeWeek, timeDay, timeHour, timeMinute, timeSecond, timeMillisecond, timeFormat).domain([new Date(2000, 0, 1), new Date(2000, 0, 2)]);\n}\n","export default function(s) {\n return s.match(/.{6}/g).map(function(x) {\n return \"#\" + x;\n });\n}\n","import colors from \"./colors\";\n\nexport default colors(\"1f77b4ff7f0e2ca02cd627289467bd8c564be377c27f7f7fbcbd2217becf\");\n","import colors from \"./colors\";\n\nexport default colors(\"393b795254a36b6ecf9c9ede6379398ca252b5cf6bcedb9c8c6d31bd9e39e7ba52e7cb94843c39ad494ad6616be7969c7b4173a55194ce6dbdde9ed6\");\n","import colors from \"./colors\";\n\nexport default colors(\"1f77b4aec7e8ff7f0effbb782ca02c98df8ad62728ff98969467bdc5b0d58c564bc49c94e377c2f7b6d27f7f7fc7c7c7bcbd22dbdb8d17becf9edae5\");\n","import colors from \"./colors\";\n\nexport default colors(\"3182bd6baed69ecae1c6dbefe6550dfd8d3cfdae6bfdd0a231a35474c476a1d99bc7e9c0756bb19e9ac8bcbddcdadaeb636363969696bdbdbdd9d9d9\");\n","import {cubehelix} from \"d3-color\";\nimport {interpolateCubehelixLong} from \"d3-interpolate\";\n\nexport default interpolateCubehelixLong(cubehelix(300, 0.5, 0.0), cubehelix(-240, 0.5, 1.0));\n","import {cubehelix} from \"d3-color\";\nimport {interpolateCubehelixLong} from \"d3-interpolate\";\n\nexport var warm = interpolateCubehelixLong(cubehelix(-100, 0.75, 0.35), cubehelix(80, 1.50, 0.8));\n\nexport var cool = interpolateCubehelixLong(cubehelix(260, 0.75, 0.35), cubehelix(80, 1.50, 0.8));\n\nvar rainbow = cubehelix();\n\nexport default function(t) {\n if (t < 0 || t > 1) t -= Math.floor(t);\n var ts = Math.abs(t - 0.5);\n rainbow.h = 360 * t - 100;\n rainbow.s = 1.5 - 1.5 * ts;\n rainbow.l = 0.8 - 0.9 * ts;\n return rainbow + \"\";\n}\n","import colors from \"./colors\";\n\nfunction ramp(range) {\n var n = range.length;\n return function(t) {\n return range[Math.max(0, Math.min(n - 1, Math.floor(t * n)))];\n };\n}\n\nexport default ramp(colors(\"44015444025645045745055946075a46085c460a5d460b5e470d60470e6147106347116447136548146748166848176948186a481a6c481b6d481c6e481d6f481f70482071482173482374482475482576482677482878482979472a7a472c7a472d7b472e7c472f7d46307e46327e46337f463480453581453781453882443983443a83443b84433d84433e85423f854240864241864142874144874045884046883f47883f48893e49893e4a893e4c8a3d4d8a3d4e8a3c4f8a3c508b3b518b3b528b3a538b3a548c39558c39568c38588c38598c375a8c375b8d365c8d365d8d355e8d355f8d34608d34618d33628d33638d32648e32658e31668e31678e31688e30698e306a8e2f6b8e2f6c8e2e6d8e2e6e8e2e6f8e2d708e2d718e2c718e2c728e2c738e2b748e2b758e2a768e2a778e2a788e29798e297a8e297b8e287c8e287d8e277e8e277f8e27808e26818e26828e26828e25838e25848e25858e24868e24878e23888e23898e238a8d228b8d228c8d228d8d218e8d218f8d21908d21918c20928c20928c20938c1f948c1f958b1f968b1f978b1f988b1f998a1f9a8a1e9b8a1e9c891e9d891f9e891f9f881fa0881fa1881fa1871fa28720a38620a48621a58521a68522a78522a88423a98324aa8325ab8225ac8226ad8127ad8128ae8029af7f2ab07f2cb17e2db27d2eb37c2fb47c31b57b32b67a34b67935b77937b87838b9773aba763bbb753dbc743fbc7340bd7242be7144bf7046c06f48c16e4ac16d4cc26c4ec36b50c46a52c56954c56856c66758c7655ac8645cc8635ec96260ca6063cb5f65cb5e67cc5c69cd5b6ccd5a6ece5870cf5773d05675d05477d1537ad1517cd2507fd34e81d34d84d44b86d54989d5488bd6468ed64590d74393d74195d84098d83e9bd93c9dd93ba0da39a2da37a5db36a8db34aadc32addc30b0dd2fb2dd2db5de2bb8de29bade28bddf26c0df25c2df23c5e021c8e020cae11fcde11dd0e11cd2e21bd5e21ad8e219dae319dde318dfe318e2e418e5e419e7e419eae51aece51befe51cf1e51df4e61ef6e620f8e621fbe723fde725\"));\n\nexport var magma = ramp(colors(\"00000401000501010601010802010902020b02020d03030f03031204041405041606051806051a07061c08071e0907200a08220b09240c09260d0a290e0b2b100b2d110c2f120d31130d34140e36150e38160f3b180f3d19103f1a10421c10441d11471e114920114b21114e22115024125325125527125829115a2a115c2c115f2d11612f116331116533106734106936106b38106c390f6e3b0f703d0f713f0f72400f74420f75440f764510774710784910784a10794c117a4e117b4f127b51127c52137c54137d56147d57157e59157e5a167e5c167f5d177f5f187f601880621980641a80651a80671b80681c816a1c816b1d816d1d816e1e81701f81721f817320817521817621817822817922827b23827c23827e24828025828125818326818426818627818827818928818b29818c29818e2a81902a81912b81932b80942c80962c80982d80992d809b2e7f9c2e7f9e2f7fa02f7fa1307ea3307ea5317ea6317da8327daa337dab337cad347cae347bb0357bb2357bb3367ab5367ab73779b83779ba3878bc3978bd3977bf3a77c03a76c23b75c43c75c53c74c73d73c83e73ca3e72cc3f71cd4071cf4070d0416fd2426fd3436ed5446dd6456cd8456cd9466bdb476adc4869de4968df4a68e04c67e24d66e34e65e44f64e55064e75263e85362e95462ea5661eb5760ec5860ed5a5fee5b5eef5d5ef05f5ef1605df2625df2645cf3655cf4675cf4695cf56b5cf66c5cf66e5cf7705cf7725cf8745cf8765cf9785df9795df97b5dfa7d5efa7f5efa815ffb835ffb8560fb8761fc8961fc8a62fc8c63fc8e64fc9065fd9266fd9467fd9668fd9869fd9a6afd9b6bfe9d6cfe9f6dfea16efea36ffea571fea772fea973feaa74feac76feae77feb078feb27afeb47bfeb67cfeb77efeb97ffebb81febd82febf84fec185fec287fec488fec68afec88cfeca8dfecc8ffecd90fecf92fed194fed395fed597fed799fed89afdda9cfddc9efddea0fde0a1fde2a3fde3a5fde5a7fde7a9fde9aafdebacfcecaefceeb0fcf0b2fcf2b4fcf4b6fcf6b8fcf7b9fcf9bbfcfbbdfcfdbf\"));\n\nexport var inferno = ramp(colors(\"00000401000501010601010802010a02020c02020e03021004031204031405041706041907051b08051d09061f0a07220b07240c08260d08290e092b10092d110a30120a32140b34150b37160b39180c3c190c3e1b0c411c0c431e0c451f0c48210c4a230c4c240c4f260c51280b53290b552b0b572d0b592f0a5b310a5c320a5e340a5f3609613809623909633b09643d09653e0966400a67420a68440a68450a69470b6a490b6a4a0c6b4c0c6b4d0d6c4f0d6c510e6c520e6d540f6d550f6d57106e59106e5a116e5c126e5d126e5f136e61136e62146e64156e65156e67166e69166e6a176e6c186e6d186e6f196e71196e721a6e741a6e751b6e771c6d781c6d7a1d6d7c1d6d7d1e6d7f1e6c801f6c82206c84206b85216b87216b88226a8a226a8c23698d23698f24699025689225689326679526679727669827669a28659b29649d29649f2a63a02a63a22b62a32c61a52c60a62d60a82e5fa92e5eab2f5ead305dae305cb0315bb1325ab3325ab43359b63458b73557b93556ba3655bc3754bd3853bf3952c03a51c13a50c33b4fc43c4ec63d4dc73e4cc83f4bca404acb4149cc4248ce4347cf4446d04545d24644d34743d44842d54a41d74b3fd84c3ed94d3dda4e3cdb503bdd513ade5238df5337e05536e15635e25734e35933e45a31e55c30e65d2fe75e2ee8602de9612bea632aeb6429eb6628ec6726ed6925ee6a24ef6c23ef6e21f06f20f1711ff1731df2741cf3761bf37819f47918f57b17f57d15f67e14f68013f78212f78410f8850ff8870ef8890cf98b0bf98c0af98e09fa9008fa9207fa9407fb9606fb9706fb9906fb9b06fb9d07fc9f07fca108fca309fca50afca60cfca80dfcaa0ffcac11fcae12fcb014fcb216fcb418fbb61afbb81dfbba1ffbbc21fbbe23fac026fac228fac42afac62df9c72ff9c932f9cb35f8cd37f8cf3af7d13df7d340f6d543f6d746f5d949f5db4cf4dd4ff4df53f4e156f3e35af3e55df2e661f2e865f2ea69f1ec6df1ed71f1ef75f1f179f2f27df2f482f3f586f3f68af4f88ef5f992f6fa96f8fb9af9fc9dfafda1fcffa4\"));\n\nexport var plasma = ramp(colors(\"0d088710078813078916078a19068c1b068d1d068e20068f2206902406912605912805922a05932c05942e05952f059631059733059735049837049938049a3a049a3c049b3e049c3f049c41049d43039e44039e46039f48039f4903a04b03a14c02a14e02a25002a25102a35302a35502a45601a45801a45901a55b01a55c01a65e01a66001a66100a76300a76400a76600a76700a86900a86a00a86c00a86e00a86f00a87100a87201a87401a87501a87701a87801a87a02a87b02a87d03a87e03a88004a88104a78305a78405a78606a68707a68808a68a09a58b0aa58d0ba58e0ca48f0da4910ea3920fa39410a29511a19613a19814a099159f9a169f9c179e9d189d9e199da01a9ca11b9ba21d9aa31e9aa51f99a62098a72197a82296aa2395ab2494ac2694ad2793ae2892b02991b12a90b22b8fb32c8eb42e8db52f8cb6308bb7318ab83289ba3388bb3488bc3587bd3786be3885bf3984c03a83c13b82c23c81c33d80c43e7fc5407ec6417dc7427cc8437bc9447aca457acb4679cc4778cc4977cd4a76ce4b75cf4c74d04d73d14e72d24f71d35171d45270d5536fd5546ed6556dd7566cd8576bd9586ada5a6ada5b69db5c68dc5d67dd5e66de5f65de6164df6263e06363e16462e26561e26660e3685fe4695ee56a5de56b5de66c5ce76e5be76f5ae87059e97158e97257ea7457eb7556eb7655ec7754ed7953ed7a52ee7b51ef7c51ef7e50f07f4ff0804ef1814df1834cf2844bf3854bf3874af48849f48948f58b47f58c46f68d45f68f44f79044f79143f79342f89441f89540f9973ff9983ef99a3efa9b3dfa9c3cfa9e3bfb9f3afba139fba238fca338fca537fca636fca835fca934fdab33fdac33fdae32fdaf31fdb130fdb22ffdb42ffdb52efeb72dfeb82cfeba2cfebb2bfebd2afebe2afec029fdc229fdc328fdc527fdc627fdc827fdca26fdcb26fccd25fcce25fcd025fcd225fbd324fbd524fbd724fad824fada24f9dc24f9dd25f8df25f8e125f7e225f7e425f6e626f6e826f5e926f5eb27f4ed27f3ee27f3f027f2f227f1f426f1f525f0f724f0f921\"));\n","import {linearish} from \"./linear\";\n\nexport default function sequential(interpolator) {\n var x0 = 0,\n x1 = 1,\n clamp = false;\n\n function scale(x) {\n var t = (x - x0) / (x1 - x0);\n return interpolator(clamp ? Math.max(0, Math.min(1, t)) : t);\n }\n\n scale.domain = function(_) {\n return arguments.length ? (x0 = +_[0], x1 = +_[1], scale) : [x0, x1];\n };\n\n scale.clamp = function(_) {\n return arguments.length ? (clamp = !!_, scale) : clamp;\n };\n\n scale.interpolator = function(_) {\n return arguments.length ? (interpolator = _, scale) : interpolator;\n };\n\n scale.copy = function() {\n return sequential(interpolator).domain([x0, x1]).clamp(clamp);\n };\n\n return linearish(scale);\n}\n","export default function(specifier) {\n var n = specifier.length / 6 | 0, colors = new Array(n), i = 0;\n while (i < n) colors[i] = \"#\" + specifier.slice(i * 6, ++i * 6);\n return colors;\n}\n","import colors from \"../colors\";\n\nexport default colors(\"7fc97fbeaed4fdc086ffff99386cb0f0027fbf5b17666666\");\n","import colors from \"../colors\";\n\nexport default colors(\"1f77b4ff7f0e2ca02cd627289467bd8c564be377c27f7f7fbcbd2217becf\");\n","import colors from \"../colors\";\n\nexport default colors(\"1b9e77d95f027570b3e7298a66a61ee6ab02a6761d666666\");\n","import colors from \"../colors\";\n\nexport default colors(\"a6cee31f78b4b2df8a33a02cfb9a99e31a1cfdbf6fff7f00cab2d66a3d9affff99b15928\");\n","import colors from \"../colors\";\n\nexport default colors(\"fbb4aeb3cde3ccebc5decbe4fed9a6ffffcce5d8bdfddaecf2f2f2\");\n","import colors from \"../colors\";\n\nexport default colors(\"b3e2cdfdcdaccbd5e8f4cae4e6f5c9fff2aef1e2cccccccc\");\n","import colors from \"../colors\";\n\nexport default colors(\"e41a1c377eb84daf4a984ea3ff7f00ffff33a65628f781bf999999\");\n","import colors from \"../colors\";\n\nexport default colors(\"66c2a5fc8d628da0cbe78ac3a6d854ffd92fe5c494b3b3b3\");\n","import colors from \"../colors\";\n\nexport default colors(\"8dd3c7ffffb3bebadafb807280b1d3fdb462b3de69fccde5d9d9d9bc80bdccebc5ffed6f\");\n","import {interpolateRgbBasis} from \"d3-interpolate\";\n\nexport default function(scheme) {\n return interpolateRgbBasis(scheme[scheme.length - 1]);\n}\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"d8b365f5f5f55ab4ac\",\n \"a6611adfc27d80cdc1018571\",\n \"a6611adfc27df5f5f580cdc1018571\",\n \"8c510ad8b365f6e8c3c7eae55ab4ac01665e\",\n \"8c510ad8b365f6e8c3f5f5f5c7eae55ab4ac01665e\",\n \"8c510abf812ddfc27df6e8c3c7eae580cdc135978f01665e\",\n \"8c510abf812ddfc27df6e8c3f5f5f5c7eae580cdc135978f01665e\",\n \"5430058c510abf812ddfc27df6e8c3c7eae580cdc135978f01665e003c30\",\n \"5430058c510abf812ddfc27df6e8c3f5f5f5c7eae580cdc135978f01665e003c30\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"af8dc3f7f7f77fbf7b\",\n \"7b3294c2a5cfa6dba0008837\",\n \"7b3294c2a5cff7f7f7a6dba0008837\",\n \"762a83af8dc3e7d4e8d9f0d37fbf7b1b7837\",\n \"762a83af8dc3e7d4e8f7f7f7d9f0d37fbf7b1b7837\",\n \"762a839970abc2a5cfe7d4e8d9f0d3a6dba05aae611b7837\",\n \"762a839970abc2a5cfe7d4e8f7f7f7d9f0d3a6dba05aae611b7837\",\n \"40004b762a839970abc2a5cfe7d4e8d9f0d3a6dba05aae611b783700441b\",\n \"40004b762a839970abc2a5cfe7d4e8f7f7f7d9f0d3a6dba05aae611b783700441b\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"e9a3c9f7f7f7a1d76a\",\n \"d01c8bf1b6dab8e1864dac26\",\n \"d01c8bf1b6daf7f7f7b8e1864dac26\",\n \"c51b7de9a3c9fde0efe6f5d0a1d76a4d9221\",\n \"c51b7de9a3c9fde0eff7f7f7e6f5d0a1d76a4d9221\",\n \"c51b7dde77aef1b6dafde0efe6f5d0b8e1867fbc414d9221\",\n \"c51b7dde77aef1b6dafde0eff7f7f7e6f5d0b8e1867fbc414d9221\",\n \"8e0152c51b7dde77aef1b6dafde0efe6f5d0b8e1867fbc414d9221276419\",\n \"8e0152c51b7dde77aef1b6dafde0eff7f7f7e6f5d0b8e1867fbc414d9221276419\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"998ec3f7f7f7f1a340\",\n \"5e3c99b2abd2fdb863e66101\",\n \"5e3c99b2abd2f7f7f7fdb863e66101\",\n \"542788998ec3d8daebfee0b6f1a340b35806\",\n \"542788998ec3d8daebf7f7f7fee0b6f1a340b35806\",\n \"5427888073acb2abd2d8daebfee0b6fdb863e08214b35806\",\n \"5427888073acb2abd2d8daebf7f7f7fee0b6fdb863e08214b35806\",\n \"2d004b5427888073acb2abd2d8daebfee0b6fdb863e08214b358067f3b08\",\n \"2d004b5427888073acb2abd2d8daebf7f7f7fee0b6fdb863e08214b358067f3b08\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"ef8a62f7f7f767a9cf\",\n \"ca0020f4a58292c5de0571b0\",\n \"ca0020f4a582f7f7f792c5de0571b0\",\n \"b2182bef8a62fddbc7d1e5f067a9cf2166ac\",\n \"b2182bef8a62fddbc7f7f7f7d1e5f067a9cf2166ac\",\n \"b2182bd6604df4a582fddbc7d1e5f092c5de4393c32166ac\",\n \"b2182bd6604df4a582fddbc7f7f7f7d1e5f092c5de4393c32166ac\",\n \"67001fb2182bd6604df4a582fddbc7d1e5f092c5de4393c32166ac053061\",\n \"67001fb2182bd6604df4a582fddbc7f7f7f7d1e5f092c5de4393c32166ac053061\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"ef8a62ffffff999999\",\n \"ca0020f4a582bababa404040\",\n \"ca0020f4a582ffffffbababa404040\",\n \"b2182bef8a62fddbc7e0e0e09999994d4d4d\",\n \"b2182bef8a62fddbc7ffffffe0e0e09999994d4d4d\",\n \"b2182bd6604df4a582fddbc7e0e0e0bababa8787874d4d4d\",\n \"b2182bd6604df4a582fddbc7ffffffe0e0e0bababa8787874d4d4d\",\n \"67001fb2182bd6604df4a582fddbc7e0e0e0bababa8787874d4d4d1a1a1a\",\n \"67001fb2182bd6604df4a582fddbc7ffffffe0e0e0bababa8787874d4d4d1a1a1a\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"fc8d59ffffbf91bfdb\",\n \"d7191cfdae61abd9e92c7bb6\",\n \"d7191cfdae61ffffbfabd9e92c7bb6\",\n \"d73027fc8d59fee090e0f3f891bfdb4575b4\",\n \"d73027fc8d59fee090ffffbfe0f3f891bfdb4575b4\",\n \"d73027f46d43fdae61fee090e0f3f8abd9e974add14575b4\",\n \"d73027f46d43fdae61fee090ffffbfe0f3f8abd9e974add14575b4\",\n \"a50026d73027f46d43fdae61fee090e0f3f8abd9e974add14575b4313695\",\n \"a50026d73027f46d43fdae61fee090ffffbfe0f3f8abd9e974add14575b4313695\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"fc8d59ffffbf91cf60\",\n \"d7191cfdae61a6d96a1a9641\",\n \"d7191cfdae61ffffbfa6d96a1a9641\",\n \"d73027fc8d59fee08bd9ef8b91cf601a9850\",\n \"d73027fc8d59fee08bffffbfd9ef8b91cf601a9850\",\n \"d73027f46d43fdae61fee08bd9ef8ba6d96a66bd631a9850\",\n \"d73027f46d43fdae61fee08bffffbfd9ef8ba6d96a66bd631a9850\",\n \"a50026d73027f46d43fdae61fee08bd9ef8ba6d96a66bd631a9850006837\",\n \"a50026d73027f46d43fdae61fee08bffffbfd9ef8ba6d96a66bd631a9850006837\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"fc8d59ffffbf99d594\",\n \"d7191cfdae61abdda42b83ba\",\n \"d7191cfdae61ffffbfabdda42b83ba\",\n \"d53e4ffc8d59fee08be6f59899d5943288bd\",\n \"d53e4ffc8d59fee08bffffbfe6f59899d5943288bd\",\n \"d53e4ff46d43fdae61fee08be6f598abdda466c2a53288bd\",\n \"d53e4ff46d43fdae61fee08bffffbfe6f598abdda466c2a53288bd\",\n \"9e0142d53e4ff46d43fdae61fee08be6f598abdda466c2a53288bd5e4fa2\",\n \"9e0142d53e4ff46d43fdae61fee08bffffbfe6f598abdda466c2a53288bd5e4fa2\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"e5f5f999d8c92ca25f\",\n \"edf8fbb2e2e266c2a4238b45\",\n \"edf8fbb2e2e266c2a42ca25f006d2c\",\n \"edf8fbccece699d8c966c2a42ca25f006d2c\",\n \"edf8fbccece699d8c966c2a441ae76238b45005824\",\n \"f7fcfde5f5f9ccece699d8c966c2a441ae76238b45005824\",\n \"f7fcfde5f5f9ccece699d8c966c2a441ae76238b45006d2c00441b\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"e0ecf49ebcda8856a7\",\n \"edf8fbb3cde38c96c688419d\",\n \"edf8fbb3cde38c96c68856a7810f7c\",\n \"edf8fbbfd3e69ebcda8c96c68856a7810f7c\",\n \"edf8fbbfd3e69ebcda8c96c68c6bb188419d6e016b\",\n \"f7fcfde0ecf4bfd3e69ebcda8c96c68c6bb188419d6e016b\",\n \"f7fcfde0ecf4bfd3e69ebcda8c96c68c6bb188419d810f7c4d004b\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"e0f3dba8ddb543a2ca\",\n \"f0f9e8bae4bc7bccc42b8cbe\",\n \"f0f9e8bae4bc7bccc443a2ca0868ac\",\n \"f0f9e8ccebc5a8ddb57bccc443a2ca0868ac\",\n \"f0f9e8ccebc5a8ddb57bccc44eb3d32b8cbe08589e\",\n \"f7fcf0e0f3dbccebc5a8ddb57bccc44eb3d32b8cbe08589e\",\n \"f7fcf0e0f3dbccebc5a8ddb57bccc44eb3d32b8cbe0868ac084081\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"fee8c8fdbb84e34a33\",\n \"fef0d9fdcc8afc8d59d7301f\",\n \"fef0d9fdcc8afc8d59e34a33b30000\",\n \"fef0d9fdd49efdbb84fc8d59e34a33b30000\",\n \"fef0d9fdd49efdbb84fc8d59ef6548d7301f990000\",\n \"fff7ecfee8c8fdd49efdbb84fc8d59ef6548d7301f990000\",\n \"fff7ecfee8c8fdd49efdbb84fc8d59ef6548d7301fb300007f0000\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"ece2f0a6bddb1c9099\",\n \"f6eff7bdc9e167a9cf02818a\",\n \"f6eff7bdc9e167a9cf1c9099016c59\",\n \"f6eff7d0d1e6a6bddb67a9cf1c9099016c59\",\n \"f6eff7d0d1e6a6bddb67a9cf3690c002818a016450\",\n \"fff7fbece2f0d0d1e6a6bddb67a9cf3690c002818a016450\",\n \"fff7fbece2f0d0d1e6a6bddb67a9cf3690c002818a016c59014636\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"ece7f2a6bddb2b8cbe\",\n \"f1eef6bdc9e174a9cf0570b0\",\n \"f1eef6bdc9e174a9cf2b8cbe045a8d\",\n \"f1eef6d0d1e6a6bddb74a9cf2b8cbe045a8d\",\n \"f1eef6d0d1e6a6bddb74a9cf3690c00570b0034e7b\",\n \"fff7fbece7f2d0d1e6a6bddb74a9cf3690c00570b0034e7b\",\n \"fff7fbece7f2d0d1e6a6bddb74a9cf3690c00570b0045a8d023858\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"e7e1efc994c7dd1c77\",\n \"f1eef6d7b5d8df65b0ce1256\",\n \"f1eef6d7b5d8df65b0dd1c77980043\",\n \"f1eef6d4b9dac994c7df65b0dd1c77980043\",\n \"f1eef6d4b9dac994c7df65b0e7298ace125691003f\",\n \"f7f4f9e7e1efd4b9dac994c7df65b0e7298ace125691003f\",\n \"f7f4f9e7e1efd4b9dac994c7df65b0e7298ace125698004367001f\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"fde0ddfa9fb5c51b8a\",\n \"feebe2fbb4b9f768a1ae017e\",\n \"feebe2fbb4b9f768a1c51b8a7a0177\",\n \"feebe2fcc5c0fa9fb5f768a1c51b8a7a0177\",\n \"feebe2fcc5c0fa9fb5f768a1dd3497ae017e7a0177\",\n \"fff7f3fde0ddfcc5c0fa9fb5f768a1dd3497ae017e7a0177\",\n \"fff7f3fde0ddfcc5c0fa9fb5f768a1dd3497ae017e7a017749006a\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"edf8b17fcdbb2c7fb8\",\n \"ffffcca1dab441b6c4225ea8\",\n \"ffffcca1dab441b6c42c7fb8253494\",\n \"ffffccc7e9b47fcdbb41b6c42c7fb8253494\",\n \"ffffccc7e9b47fcdbb41b6c41d91c0225ea80c2c84\",\n \"ffffd9edf8b1c7e9b47fcdbb41b6c41d91c0225ea80c2c84\",\n \"ffffd9edf8b1c7e9b47fcdbb41b6c41d91c0225ea8253494081d58\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"f7fcb9addd8e31a354\",\n \"ffffccc2e69978c679238443\",\n \"ffffccc2e69978c67931a354006837\",\n \"ffffccd9f0a3addd8e78c67931a354006837\",\n \"ffffccd9f0a3addd8e78c67941ab5d238443005a32\",\n \"ffffe5f7fcb9d9f0a3addd8e78c67941ab5d238443005a32\",\n \"ffffe5f7fcb9d9f0a3addd8e78c67941ab5d238443006837004529\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"fff7bcfec44fd95f0e\",\n \"ffffd4fed98efe9929cc4c02\",\n \"ffffd4fed98efe9929d95f0e993404\",\n \"ffffd4fee391fec44ffe9929d95f0e993404\",\n \"ffffd4fee391fec44ffe9929ec7014cc4c028c2d04\",\n \"ffffe5fff7bcfee391fec44ffe9929ec7014cc4c028c2d04\",\n \"ffffe5fff7bcfee391fec44ffe9929ec7014cc4c02993404662506\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"ffeda0feb24cf03b20\",\n \"ffffb2fecc5cfd8d3ce31a1c\",\n \"ffffb2fecc5cfd8d3cf03b20bd0026\",\n \"ffffb2fed976feb24cfd8d3cf03b20bd0026\",\n \"ffffb2fed976feb24cfd8d3cfc4e2ae31a1cb10026\",\n \"ffffccffeda0fed976feb24cfd8d3cfc4e2ae31a1cb10026\",\n \"ffffccffeda0fed976feb24cfd8d3cfc4e2ae31a1cbd0026800026\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"deebf79ecae13182bd\",\n \"eff3ffbdd7e76baed62171b5\",\n \"eff3ffbdd7e76baed63182bd08519c\",\n \"eff3ffc6dbef9ecae16baed63182bd08519c\",\n \"eff3ffc6dbef9ecae16baed64292c62171b5084594\",\n \"f7fbffdeebf7c6dbef9ecae16baed64292c62171b5084594\",\n \"f7fbffdeebf7c6dbef9ecae16baed64292c62171b508519c08306b\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"e5f5e0a1d99b31a354\",\n \"edf8e9bae4b374c476238b45\",\n \"edf8e9bae4b374c47631a354006d2c\",\n \"edf8e9c7e9c0a1d99b74c47631a354006d2c\",\n \"edf8e9c7e9c0a1d99b74c47641ab5d238b45005a32\",\n \"f7fcf5e5f5e0c7e9c0a1d99b74c47641ab5d238b45005a32\",\n \"f7fcf5e5f5e0c7e9c0a1d99b74c47641ab5d238b45006d2c00441b\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"f0f0f0bdbdbd636363\",\n \"f7f7f7cccccc969696525252\",\n \"f7f7f7cccccc969696636363252525\",\n \"f7f7f7d9d9d9bdbdbd969696636363252525\",\n \"f7f7f7d9d9d9bdbdbd969696737373525252252525\",\n \"fffffff0f0f0d9d9d9bdbdbd969696737373525252252525\",\n \"fffffff0f0f0d9d9d9bdbdbd969696737373525252252525000000\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"efedf5bcbddc756bb1\",\n \"f2f0f7cbc9e29e9ac86a51a3\",\n \"f2f0f7cbc9e29e9ac8756bb154278f\",\n \"f2f0f7dadaebbcbddc9e9ac8756bb154278f\",\n \"f2f0f7dadaebbcbddc9e9ac8807dba6a51a34a1486\",\n \"fcfbfdefedf5dadaebbcbddc9e9ac8807dba6a51a34a1486\",\n \"fcfbfdefedf5dadaebbcbddc9e9ac8807dba6a51a354278f3f007d\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"fee0d2fc9272de2d26\",\n \"fee5d9fcae91fb6a4acb181d\",\n \"fee5d9fcae91fb6a4ade2d26a50f15\",\n \"fee5d9fcbba1fc9272fb6a4ade2d26a50f15\",\n \"fee5d9fcbba1fc9272fb6a4aef3b2ccb181d99000d\",\n \"fff5f0fee0d2fcbba1fc9272fb6a4aef3b2ccb181d99000d\",\n \"fff5f0fee0d2fcbba1fc9272fb6a4aef3b2ccb181da50f1567000d\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"fee6cefdae6be6550d\",\n \"feeddefdbe85fd8d3cd94701\",\n \"feeddefdbe85fd8d3ce6550da63603\",\n \"feeddefdd0a2fdae6bfd8d3ce6550da63603\",\n \"feeddefdd0a2fdae6bfd8d3cf16913d948018c2d04\",\n \"fff5ebfee6cefdd0a2fdae6bfd8d3cf16913d948018c2d04\",\n \"fff5ebfee6cefdd0a2fdae6bfd8d3cf16913d94801a636037f2704\"\n).map(colors);\n\nexport default ramp(scheme);\n","import {cubehelix} from \"d3-color\";\nimport {interpolateCubehelixLong} from \"d3-interpolate\";\n\nexport default interpolateCubehelixLong(cubehelix(300, 0.5, 0.0), cubehelix(-240, 0.5, 1.0));\n","import {cubehelix} from \"d3-color\";\nimport {interpolateCubehelixLong} from \"d3-interpolate\";\n\nexport var warm = interpolateCubehelixLong(cubehelix(-100, 0.75, 0.35), cubehelix(80, 1.50, 0.8));\n\nexport var cool = interpolateCubehelixLong(cubehelix(260, 0.75, 0.35), cubehelix(80, 1.50, 0.8));\n\nvar c = cubehelix();\n\nexport default function(t) {\n if (t < 0 || t > 1) t -= Math.floor(t);\n var ts = Math.abs(t - 0.5);\n c.h = 360 * t - 100;\n c.s = 1.5 - 1.5 * ts;\n c.l = 0.8 - 0.9 * ts;\n return c + \"\";\n}\n","import {rgb} from \"d3-color\";\n\nvar c = rgb(),\n pi_1_3 = Math.PI / 3,\n pi_2_3 = Math.PI * 2 / 3;\n\nexport default function(t) {\n var x;\n t = (0.5 - t) * Math.PI;\n c.r = 255 * (x = Math.sin(t)) * x;\n c.g = 255 * (x = Math.sin(t + pi_1_3)) * x;\n c.b = 255 * (x = Math.sin(t + pi_2_3)) * x;\n return c + \"\";\n}\n","import colors from \"../colors\";\n\nfunction ramp(range) {\n var n = range.length;\n return function(t) {\n return range[Math.max(0, Math.min(n - 1, Math.floor(t * n)))];\n };\n}\n\nexport default ramp(colors(\"44015444025645045745055946075a46085c460a5d460b5e470d60470e6147106347116447136548146748166848176948186a481a6c481b6d481c6e481d6f481f70482071482173482374482475482576482677482878482979472a7a472c7a472d7b472e7c472f7d46307e46327e46337f463480453581453781453882443983443a83443b84433d84433e85423f854240864241864142874144874045884046883f47883f48893e49893e4a893e4c8a3d4d8a3d4e8a3c4f8a3c508b3b518b3b528b3a538b3a548c39558c39568c38588c38598c375a8c375b8d365c8d365d8d355e8d355f8d34608d34618d33628d33638d32648e32658e31668e31678e31688e30698e306a8e2f6b8e2f6c8e2e6d8e2e6e8e2e6f8e2d708e2d718e2c718e2c728e2c738e2b748e2b758e2a768e2a778e2a788e29798e297a8e297b8e287c8e287d8e277e8e277f8e27808e26818e26828e26828e25838e25848e25858e24868e24878e23888e23898e238a8d228b8d228c8d228d8d218e8d218f8d21908d21918c20928c20928c20938c1f948c1f958b1f968b1f978b1f988b1f998a1f9a8a1e9b8a1e9c891e9d891f9e891f9f881fa0881fa1881fa1871fa28720a38620a48621a58521a68522a78522a88423a98324aa8325ab8225ac8226ad8127ad8128ae8029af7f2ab07f2cb17e2db27d2eb37c2fb47c31b57b32b67a34b67935b77937b87838b9773aba763bbb753dbc743fbc7340bd7242be7144bf7046c06f48c16e4ac16d4cc26c4ec36b50c46a52c56954c56856c66758c7655ac8645cc8635ec96260ca6063cb5f65cb5e67cc5c69cd5b6ccd5a6ece5870cf5773d05675d05477d1537ad1517cd2507fd34e81d34d84d44b86d54989d5488bd6468ed64590d74393d74195d84098d83e9bd93c9dd93ba0da39a2da37a5db36a8db34aadc32addc30b0dd2fb2dd2db5de2bb8de29bade28bddf26c0df25c2df23c5e021c8e020cae11fcde11dd0e11cd2e21bd5e21ad8e219dae319dde318dfe318e2e418e5e419e7e419eae51aece51befe51cf1e51df4e61ef6e620f8e621fbe723fde725\"));\n\nexport var magma = ramp(colors(\"00000401000501010601010802010902020b02020d03030f03031204041405041606051806051a07061c08071e0907200a08220b09240c09260d0a290e0b2b100b2d110c2f120d31130d34140e36150e38160f3b180f3d19103f1a10421c10441d11471e114920114b21114e22115024125325125527125829115a2a115c2c115f2d11612f116331116533106734106936106b38106c390f6e3b0f703d0f713f0f72400f74420f75440f764510774710784910784a10794c117a4e117b4f127b51127c52137c54137d56147d57157e59157e5a167e5c167f5d177f5f187f601880621980641a80651a80671b80681c816a1c816b1d816d1d816e1e81701f81721f817320817521817621817822817922827b23827c23827e24828025828125818326818426818627818827818928818b29818c29818e2a81902a81912b81932b80942c80962c80982d80992d809b2e7f9c2e7f9e2f7fa02f7fa1307ea3307ea5317ea6317da8327daa337dab337cad347cae347bb0357bb2357bb3367ab5367ab73779b83779ba3878bc3978bd3977bf3a77c03a76c23b75c43c75c53c74c73d73c83e73ca3e72cc3f71cd4071cf4070d0416fd2426fd3436ed5446dd6456cd8456cd9466bdb476adc4869de4968df4a68e04c67e24d66e34e65e44f64e55064e75263e85362e95462ea5661eb5760ec5860ed5a5fee5b5eef5d5ef05f5ef1605df2625df2645cf3655cf4675cf4695cf56b5cf66c5cf66e5cf7705cf7725cf8745cf8765cf9785df9795df97b5dfa7d5efa7f5efa815ffb835ffb8560fb8761fc8961fc8a62fc8c63fc8e64fc9065fd9266fd9467fd9668fd9869fd9a6afd9b6bfe9d6cfe9f6dfea16efea36ffea571fea772fea973feaa74feac76feae77feb078feb27afeb47bfeb67cfeb77efeb97ffebb81febd82febf84fec185fec287fec488fec68afec88cfeca8dfecc8ffecd90fecf92fed194fed395fed597fed799fed89afdda9cfddc9efddea0fde0a1fde2a3fde3a5fde5a7fde7a9fde9aafdebacfcecaefceeb0fcf0b2fcf2b4fcf4b6fcf6b8fcf7b9fcf9bbfcfbbdfcfdbf\"));\n\nexport var inferno = ramp(colors(\"00000401000501010601010802010a02020c02020e03021004031204031405041706041907051b08051d09061f0a07220b07240c08260d08290e092b10092d110a30120a32140b34150b37160b39180c3c190c3e1b0c411c0c431e0c451f0c48210c4a230c4c240c4f260c51280b53290b552b0b572d0b592f0a5b310a5c320a5e340a5f3609613809623909633b09643d09653e0966400a67420a68440a68450a69470b6a490b6a4a0c6b4c0c6b4d0d6c4f0d6c510e6c520e6d540f6d550f6d57106e59106e5a116e5c126e5d126e5f136e61136e62146e64156e65156e67166e69166e6a176e6c186e6d186e6f196e71196e721a6e741a6e751b6e771c6d781c6d7a1d6d7c1d6d7d1e6d7f1e6c801f6c82206c84206b85216b87216b88226a8a226a8c23698d23698f24699025689225689326679526679727669827669a28659b29649d29649f2a63a02a63a22b62a32c61a52c60a62d60a82e5fa92e5eab2f5ead305dae305cb0315bb1325ab3325ab43359b63458b73557b93556ba3655bc3754bd3853bf3952c03a51c13a50c33b4fc43c4ec63d4dc73e4cc83f4bca404acb4149cc4248ce4347cf4446d04545d24644d34743d44842d54a41d74b3fd84c3ed94d3dda4e3cdb503bdd513ade5238df5337e05536e15635e25734e35933e45a31e55c30e65d2fe75e2ee8602de9612bea632aeb6429eb6628ec6726ed6925ee6a24ef6c23ef6e21f06f20f1711ff1731df2741cf3761bf37819f47918f57b17f57d15f67e14f68013f78212f78410f8850ff8870ef8890cf98b0bf98c0af98e09fa9008fa9207fa9407fb9606fb9706fb9906fb9b06fb9d07fc9f07fca108fca309fca50afca60cfca80dfcaa0ffcac11fcae12fcb014fcb216fcb418fbb61afbb81dfbba1ffbbc21fbbe23fac026fac228fac42afac62df9c72ff9c932f9cb35f8cd37f8cf3af7d13df7d340f6d543f6d746f5d949f5db4cf4dd4ff4df53f4e156f3e35af3e55df2e661f2e865f2ea69f1ec6df1ed71f1ef75f1f179f2f27df2f482f3f586f3f68af4f88ef5f992f6fa96f8fb9af9fc9dfafda1fcffa4\"));\n\nexport var plasma = ramp(colors(\"0d088710078813078916078a19068c1b068d1d068e20068f2206902406912605912805922a05932c05942e05952f059631059733059735049837049938049a3a049a3c049b3e049c3f049c41049d43039e44039e46039f48039f4903a04b03a14c02a14e02a25002a25102a35302a35502a45601a45801a45901a55b01a55c01a65e01a66001a66100a76300a76400a76600a76700a86900a86a00a86c00a86e00a86f00a87100a87201a87401a87501a87701a87801a87a02a87b02a87d03a87e03a88004a88104a78305a78405a78606a68707a68808a68a09a58b0aa58d0ba58e0ca48f0da4910ea3920fa39410a29511a19613a19814a099159f9a169f9c179e9d189d9e199da01a9ca11b9ba21d9aa31e9aa51f99a62098a72197a82296aa2395ab2494ac2694ad2793ae2892b02991b12a90b22b8fb32c8eb42e8db52f8cb6308bb7318ab83289ba3388bb3488bc3587bd3786be3885bf3984c03a83c13b82c23c81c33d80c43e7fc5407ec6417dc7427cc8437bc9447aca457acb4679cc4778cc4977cd4a76ce4b75cf4c74d04d73d14e72d24f71d35171d45270d5536fd5546ed6556dd7566cd8576bd9586ada5a6ada5b69db5c68dc5d67dd5e66de5f65de6164df6263e06363e16462e26561e26660e3685fe4695ee56a5de56b5de66c5ce76e5be76f5ae87059e97158e97257ea7457eb7556eb7655ec7754ed7953ed7a52ee7b51ef7c51ef7e50f07f4ff0804ef1814df1834cf2844bf3854bf3874af48849f48948f58b47f58c46f68d45f68f44f79044f79143f79342f89441f89540f9973ff9983ef99a3efa9b3dfa9c3cfa9e3bfb9f3afba139fba238fca338fca537fca636fca835fca934fdab33fdac33fdae32fdaf31fdb130fdb22ffdb42ffdb52efeb72dfeb82cfeba2cfebb2bfebd2afebe2afec029fdc229fdc328fdc527fdc627fdc827fdca26fdcb26fccd25fcce25fcd025fcd225fbd324fbd524fbd724fad824fada24f9dc24f9dd25f8df25f8e125f7e225f7e425f6e626f6e826f5e926f5eb27f4ed27f3ee27f3f027f2f227f1f426f1f525f0f724f0f921\"));\n","const ReservedFields = {\n ROW_ID: '__id__'\n};\n\nexport default ReservedFields;\n","const CommonProps = {\n ACTION_INF: 'actionInf',\n ON_LAYER_DRAW: 'onlayerdraw'\n};\n\nexport default CommonProps;\n","export var slice = Array.prototype.slice;\n","export default function(x) {\n return x;\n}\n","import {slice} from \"./array\";\nimport identity from \"./identity\";\n\nvar top = 1,\n right = 2,\n bottom = 3,\n left = 4,\n epsilon = 1e-6;\n\nfunction translateX(x) {\n return \"translate(\" + (x + 0.5) + \",0)\";\n}\n\nfunction translateY(y) {\n return \"translate(0,\" + (y + 0.5) + \")\";\n}\n\nfunction number(scale) {\n return function(d) {\n return +scale(d);\n };\n}\n\nfunction center(scale) {\n var offset = Math.max(0, scale.bandwidth() - 1) / 2; // Adjust for 0.5px offset.\n if (scale.round()) offset = Math.round(offset);\n return function(d) {\n return +scale(d) + offset;\n };\n}\n\nfunction entering() {\n return !this.__axis;\n}\n\nfunction axis(orient, scale) {\n var tickArguments = [],\n tickValues = null,\n tickFormat = null,\n tickTransform = null,\n tickSizeInner = 6,\n tickSizeOuter = 6,\n tickPadding = 3,\n k = orient === top || orient === left ? -1 : 1,\n x = orient === left || orient === right ? \"x\" : \"y\",\n transform = orient === top || orient === bottom ? translateX : translateY;\n\n function axis(context) {\n var values = tickValues == null ? (scale.ticks ? scale.ticks.apply(scale, tickArguments) : scale.domain()) : tickValues,\n format = tickFormat == null ? (scale.tickFormat ? scale.tickFormat.apply(scale, tickArguments) : identity) : tickFormat,\n spacing = Math.max(tickSizeInner, 0) + tickPadding,\n range = scale.range(),\n range0 = +range[0] + 0.5,\n range1 = +range[range.length - 1] + 0.5,\n position = (scale.bandwidth ? center : number)(scale.copy()),\n selection = context.selection ? context.selection() : context,\n path = selection.selectAll(\".domain\").data([null]),\n tick = selection.selectAll(\".tick\").data(values, scale).order(),\n tickExit = tick.exit(),\n tickEnter = tick.enter().append(\"g\").attr(\"class\", \"tick\"),\n line = tick.select(\"line\"),\n text = tick.select(\"text\");\n\n path = path.merge(path.enter().insert(\"path\", \".tick\")\n .attr(\"class\", \"domain\")\n .attr(\"stroke\", \"#000\"));\n\n tick = tick.merge(tickEnter);\n\n line = line.merge(tickEnter.append(\"line\")\n .attr(\"stroke\", \"#000\")\n .attr(x + \"2\", k * tickSizeInner));\n\n text = text.merge(tickEnter.append(\"text\")\n .attr(\"fill\", \"#000\")\n .attr(x, k * spacing)\n .attr(\"dy\", orient === top ? \"0em\" : orient === bottom ? \"0.71em\" : \"0.32em\"))\n .style('transform', tickTransform);\n\n if (context !== selection) {\n path = path.transition(context);\n tick = tick.transition(context);\n line = line.transition(context);\n text = text.transition(context);\n\n tickExit = tickExit.transition(context)\n .attr(\"opacity\", epsilon)\n .attr(\"transform\", function(d) { return isFinite(d = position(d)) ? transform(d) : this.getAttribute(\"transform\"); });\n\n tickEnter\n .attr(\"opacity\", epsilon)\n .attr(\"transform\", function(d) { var p = this.parentNode.__axis; return transform(p && isFinite(p = p(d)) ? p : position(d)); });\n }\n\n tickExit.remove();\n\n path\n .attr(\"d\", orient === left || orient == right\n ? \"M\" + k * tickSizeOuter + \",\" + range0 + \"H0.5V\" + range1 + \"H\" + k * tickSizeOuter\n : \"M\" + range0 + \",\" + k * tickSizeOuter + \"V0.5H\" + range1 + \"V\" + k * tickSizeOuter);\n\n tick\n .attr(\"opacity\", 1)\n .attr(\"transform\", function(d) { return transform(position(d)); });\n\n line\n .attr(x + \"2\", k * tickSizeInner);\n\n text\n .attr(x, k * spacing)\n .text(format);\n\n selection.filter(entering)\n .attr(\"fill\", \"none\")\n .attr(\"font-size\", 10)\n .attr(\"font-family\", \"sans-serif\")\n .attr(\"text-anchor\", orient === right ? \"start\" : orient === left ? \"end\" : \"middle\");\n\n selection\n .each(function() { this.__axis = position; });\n }\n\n axis.scale = function(_) {\n return arguments.length ? (scale = _, axis) : scale;\n };\n\n axis.tickTransform = function(_) {\n return arguments.length ? (tickTransform = _, axis) : tickTransform;\n };\n\n axis.ticks = function() {\n return tickArguments = slice.call(arguments), axis;\n };\n\n axis.tickArguments = function(_) {\n return arguments.length ? (tickArguments = _ == null ? [] : slice.call(_), axis) : tickArguments.slice();\n };\n\n axis.tickValues = function(_) {\n return arguments.length ? (tickValues = _ == null ? null : slice.call(_), axis) : tickValues && tickValues.slice();\n };\n\n axis.tickFormat = function(_) {\n return arguments.length ? (tickFormat = _, axis) : tickFormat;\n };\n\n axis.tickSize = function(_) {\n return arguments.length ? (tickSizeInner = tickSizeOuter = +_, axis) : tickSizeInner;\n };\n\n axis.tickSizeInner = function(_) {\n return arguments.length ? (tickSizeInner = +_, axis) : tickSizeInner;\n };\n\n axis.tickSizeOuter = function(_) {\n return arguments.length ? (tickSizeOuter = +_, axis) : tickSizeOuter;\n };\n\n axis.tickPadding = function(_) {\n return arguments.length ? (tickPadding = +_, axis) : tickPadding;\n };\n\n return axis;\n}\n\nexport function axisTop(scale) {\n return axis(top, scale);\n}\n\nexport function axisRight(scale) {\n return axis(right, scale);\n}\n\nexport function axisBottom(scale) {\n return axis(bottom, scale);\n}\n\nexport function axisLeft(scale) {\n return axis(left, scale);\n}\n","var pi = Math.PI,\n tau = 2 * pi,\n epsilon = 1e-6,\n tauEpsilon = tau - epsilon;\n\nfunction Path() {\n this._x0 = this._y0 = // start of current subpath\n this._x1 = this._y1 = null; // end of current subpath\n this._ = \"\";\n}\n\nfunction path() {\n return new Path;\n}\n\nPath.prototype = path.prototype = {\n constructor: Path,\n moveTo: function(x, y) {\n this._ += \"M\" + (this._x0 = this._x1 = +x) + \",\" + (this._y0 = this._y1 = +y);\n },\n closePath: function() {\n if (this._x1 !== null) {\n this._x1 = this._x0, this._y1 = this._y0;\n this._ += \"Z\";\n }\n },\n lineTo: function(x, y) {\n this._ += \"L\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n },\n quadraticCurveTo: function(x1, y1, x, y) {\n this._ += \"Q\" + (+x1) + \",\" + (+y1) + \",\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n },\n bezierCurveTo: function(x1, y1, x2, y2, x, y) {\n this._ += \"C\" + (+x1) + \",\" + (+y1) + \",\" + (+x2) + \",\" + (+y2) + \",\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n },\n arcTo: function(x1, y1, x2, y2, r) {\n x1 = +x1, y1 = +y1, x2 = +x2, y2 = +y2, r = +r;\n var x0 = this._x1,\n y0 = this._y1,\n x21 = x2 - x1,\n y21 = y2 - y1,\n x01 = x0 - x1,\n y01 = y0 - y1,\n l01_2 = x01 * x01 + y01 * y01;\n\n // Is the radius negative? Error.\n if (r < 0) throw new Error(\"negative radius: \" + r);\n\n // Is this path empty? Move to (x1,y1).\n if (this._x1 === null) {\n this._ += \"M\" + (this._x1 = x1) + \",\" + (this._y1 = y1);\n }\n\n // Or, is (x1,y1) coincident with (x0,y0)? Do nothing.\n else if (!(l01_2 > epsilon));\n\n // Or, are (x0,y0), (x1,y1) and (x2,y2) collinear?\n // Equivalently, is (x1,y1) coincident with (x2,y2)?\n // Or, is the radius zero? Line to (x1,y1).\n else if (!(Math.abs(y01 * x21 - y21 * x01) > epsilon) || !r) {\n this._ += \"L\" + (this._x1 = x1) + \",\" + (this._y1 = y1);\n }\n\n // Otherwise, draw an arc!\n else {\n var x20 = x2 - x0,\n y20 = y2 - y0,\n l21_2 = x21 * x21 + y21 * y21,\n l20_2 = x20 * x20 + y20 * y20,\n l21 = Math.sqrt(l21_2),\n l01 = Math.sqrt(l01_2),\n l = r * Math.tan((pi - Math.acos((l21_2 + l01_2 - l20_2) / (2 * l21 * l01))) / 2),\n t01 = l / l01,\n t21 = l / l21;\n\n // If the start tangent is not coincident with (x0,y0), line to.\n if (Math.abs(t01 - 1) > epsilon) {\n this._ += \"L\" + (x1 + t01 * x01) + \",\" + (y1 + t01 * y01);\n }\n\n this._ += \"A\" + r + \",\" + r + \",0,0,\" + (+(y01 * x20 > x01 * y20)) + \",\" + (this._x1 = x1 + t21 * x21) + \",\" + (this._y1 = y1 + t21 * y21);\n }\n },\n arc: function(x, y, r, a0, a1, ccw) {\n x = +x, y = +y, r = +r;\n var dx = r * Math.cos(a0),\n dy = r * Math.sin(a0),\n x0 = x + dx,\n y0 = y + dy,\n cw = 1 ^ ccw,\n da = ccw ? a0 - a1 : a1 - a0;\n\n // Is the radius negative? Error.\n if (r < 0) throw new Error(\"negative radius: \" + r);\n\n // Is this path empty? Move to (x0,y0).\n if (this._x1 === null) {\n this._ += \"M\" + x0 + \",\" + y0;\n }\n\n // Or, is (x0,y0) not coincident with the previous point? Line to (x0,y0).\n else if (Math.abs(this._x1 - x0) > epsilon || Math.abs(this._y1 - y0) > epsilon) {\n this._ += \"L\" + x0 + \",\" + y0;\n }\n\n // Is this arc empty? We’re done.\n if (!r) return;\n\n // Does the angle go the wrong way? Flip the direction.\n if (da < 0) da = da % tau + tau;\n\n // Is this a complete circle? Draw two arcs to complete the circle.\n if (da > tauEpsilon) {\n this._ += \"A\" + r + \",\" + r + \",0,1,\" + cw + \",\" + (x - dx) + \",\" + (y - dy) + \"A\" + r + \",\" + r + \",0,1,\" + cw + \",\" + (this._x1 = x0) + \",\" + (this._y1 = y0);\n }\n\n // Is this arc non-empty? Draw an arc!\n else if (da > epsilon) {\n this._ += \"A\" + r + \",\" + r + \",0,\" + (+(da >= pi)) + \",\" + cw + \",\" + (this._x1 = x + r * Math.cos(a1)) + \",\" + (this._y1 = y + r * Math.sin(a1));\n }\n },\n rect: function(x, y, w, h) {\n this._ += \"M\" + (this._x0 = this._x1 = +x) + \",\" + (this._y0 = this._y1 = +y) + \"h\" + (+w) + \"v\" + (+h) + \"h\" + (-w) + \"Z\";\n },\n toString: function() {\n return this._;\n }\n};\n\nexport default path;\n","export default function(x) {\n return function constant() {\n return x;\n };\n}\n","export var abs = Math.abs;\nexport var atan2 = Math.atan2;\nexport var cos = Math.cos;\nexport var max = Math.max;\nexport var min = Math.min;\nexport var sin = Math.sin;\nexport var sqrt = Math.sqrt;\n\nexport var epsilon = 1e-12;\nexport var pi = Math.PI;\nexport var halfPi = pi / 2;\nexport var tau = 2 * pi;\n\nexport function acos(x) {\n return x > 1 ? 0 : x < -1 ? pi : Math.acos(x);\n}\n\nexport function asin(x) {\n return x >= 1 ? halfPi : x <= -1 ? -halfPi : Math.asin(x);\n}\n","import {path} from \"d3-path\";\nimport constant from \"./constant\";\nimport {abs, acos, asin, atan2, cos, epsilon, halfPi, max, min, pi, sin, sqrt, tau} from \"./math\";\n\nfunction arcInnerRadius(d) {\n return d.innerRadius;\n}\n\nfunction arcOuterRadius(d) {\n return d.outerRadius;\n}\n\nfunction arcStartAngle(d) {\n return d.startAngle;\n}\n\nfunction arcEndAngle(d) {\n return d.endAngle;\n}\n\nfunction arcPadAngle(d) {\n return d && d.padAngle; // Note: optional!\n}\n\nfunction intersect(x0, y0, x1, y1, x2, y2, x3, y3) {\n var x10 = x1 - x0, y10 = y1 - y0,\n x32 = x3 - x2, y32 = y3 - y2,\n t = (x32 * (y0 - y2) - y32 * (x0 - x2)) / (y32 * x10 - x32 * y10);\n return [x0 + t * x10, y0 + t * y10];\n}\n\n// Compute perpendicular offset line of length rc.\n// http://mathworld.wolfram.com/Circle-LineIntersection.html\nfunction cornerTangents(x0, y0, x1, y1, r1, rc, cw) {\n var x01 = x0 - x1,\n y01 = y0 - y1,\n lo = (cw ? rc : -rc) / sqrt(x01 * x01 + y01 * y01),\n ox = lo * y01,\n oy = -lo * x01,\n x11 = x0 + ox,\n y11 = y0 + oy,\n x10 = x1 + ox,\n y10 = y1 + oy,\n x00 = (x11 + x10) / 2,\n y00 = (y11 + y10) / 2,\n dx = x10 - x11,\n dy = y10 - y11,\n d2 = dx * dx + dy * dy,\n r = r1 - rc,\n D = x11 * y10 - x10 * y11,\n d = (dy < 0 ? -1 : 1) * sqrt(max(0, r * r * d2 - D * D)),\n cx0 = (D * dy - dx * d) / d2,\n cy0 = (-D * dx - dy * d) / d2,\n cx1 = (D * dy + dx * d) / d2,\n cy1 = (-D * dx + dy * d) / d2,\n dx0 = cx0 - x00,\n dy0 = cy0 - y00,\n dx1 = cx1 - x00,\n dy1 = cy1 - y00;\n\n // Pick the closer of the two intersection points.\n // TODO Is there a faster way to determine which intersection to use?\n if (dx0 * dx0 + dy0 * dy0 > dx1 * dx1 + dy1 * dy1) cx0 = cx1, cy0 = cy1;\n\n return {\n cx: cx0,\n cy: cy0,\n x01: -ox,\n y01: -oy,\n x11: cx0 * (r1 / r - 1),\n y11: cy0 * (r1 / r - 1)\n };\n}\n\nexport default function() {\n var innerRadius = arcInnerRadius,\n outerRadius = arcOuterRadius,\n cornerRadius = constant(0),\n padRadius = null,\n startAngle = arcStartAngle,\n endAngle = arcEndAngle,\n padAngle = arcPadAngle,\n context = null;\n\n function arc() {\n var buffer,\n r,\n r0 = +innerRadius.apply(this, arguments),\n r1 = +outerRadius.apply(this, arguments),\n a0 = startAngle.apply(this, arguments) - halfPi,\n a1 = endAngle.apply(this, arguments) - halfPi,\n da = abs(a1 - a0),\n cw = a1 > a0;\n\n if (!context) context = buffer = path();\n\n // Ensure that the outer radius is always larger than the inner radius.\n if (r1 < r0) r = r1, r1 = r0, r0 = r;\n\n // Is it a point?\n if (!(r1 > epsilon)) context.moveTo(0, 0);\n\n // Or is it a circle or annulus?\n else if (da > tau - epsilon) {\n context.moveTo(r1 * cos(a0), r1 * sin(a0));\n context.arc(0, 0, r1, a0, a1, !cw);\n if (r0 > epsilon) {\n context.moveTo(r0 * cos(a1), r0 * sin(a1));\n context.arc(0, 0, r0, a1, a0, cw);\n }\n }\n\n // Or is it a circular or annular sector?\n else {\n var a01 = a0,\n a11 = a1,\n a00 = a0,\n a10 = a1,\n da0 = da,\n da1 = da,\n ap = padAngle.apply(this, arguments) / 2,\n rp = (ap > epsilon) && (padRadius ? +padRadius.apply(this, arguments) : sqrt(r0 * r0 + r1 * r1)),\n rc = min(abs(r1 - r0) / 2, +cornerRadius.apply(this, arguments)),\n rc0 = rc,\n rc1 = rc,\n t0,\n t1;\n\n // Apply padding? Note that since r1 ≥ r0, da1 ≥ da0.\n if (rp > epsilon) {\n var p0 = asin(rp / r0 * sin(ap)),\n p1 = asin(rp / r1 * sin(ap));\n if ((da0 -= p0 * 2) > epsilon) p0 *= (cw ? 1 : -1), a00 += p0, a10 -= p0;\n else da0 = 0, a00 = a10 = (a0 + a1) / 2;\n if ((da1 -= p1 * 2) > epsilon) p1 *= (cw ? 1 : -1), a01 += p1, a11 -= p1;\n else da1 = 0, a01 = a11 = (a0 + a1) / 2;\n }\n\n var x01 = r1 * cos(a01),\n y01 = r1 * sin(a01),\n x10 = r0 * cos(a10),\n y10 = r0 * sin(a10);\n\n // Apply rounded corners?\n if (rc > epsilon) {\n var x11 = r1 * cos(a11),\n y11 = r1 * sin(a11),\n x00 = r0 * cos(a00),\n y00 = r0 * sin(a00);\n\n // Restrict the corner radius according to the sector angle.\n if (da < pi) {\n var oc = da0 > epsilon ? intersect(x01, y01, x00, y00, x11, y11, x10, y10) : [x10, y10],\n ax = x01 - oc[0],\n ay = y01 - oc[1],\n bx = x11 - oc[0],\n by = y11 - oc[1],\n kc = 1 / sin(acos((ax * bx + ay * by) / (sqrt(ax * ax + ay * ay) * sqrt(bx * bx + by * by))) / 2),\n lc = sqrt(oc[0] * oc[0] + oc[1] * oc[1]);\n rc0 = min(rc, (r0 - lc) / (kc - 1));\n rc1 = min(rc, (r1 - lc) / (kc + 1));\n }\n }\n\n // Is the sector collapsed to a line?\n if (!(da1 > epsilon)) context.moveTo(x01, y01);\n\n // Does the sector’s outer ring have rounded corners?\n else if (rc1 > epsilon) {\n t0 = cornerTangents(x00, y00, x01, y01, r1, rc1, cw);\n t1 = cornerTangents(x11, y11, x10, y10, r1, rc1, cw);\n\n context.moveTo(t0.cx + t0.x01, t0.cy + t0.y01);\n\n // Have the corners merged?\n if (rc1 < rc) context.arc(t0.cx, t0.cy, rc1, atan2(t0.y01, t0.x01), atan2(t1.y01, t1.x01), !cw);\n\n // Otherwise, draw the two corners and the ring.\n else {\n context.arc(t0.cx, t0.cy, rc1, atan2(t0.y01, t0.x01), atan2(t0.y11, t0.x11), !cw);\n context.arc(0, 0, r1, atan2(t0.cy + t0.y11, t0.cx + t0.x11), atan2(t1.cy + t1.y11, t1.cx + t1.x11), !cw);\n context.arc(t1.cx, t1.cy, rc1, atan2(t1.y11, t1.x11), atan2(t1.y01, t1.x01), !cw);\n }\n }\n\n // Or is the outer ring just a circular arc?\n else context.moveTo(x01, y01), context.arc(0, 0, r1, a01, a11, !cw);\n\n // Is there no inner ring, and it’s a circular sector?\n // Or perhaps it’s an annular sector collapsed due to padding?\n if (!(r0 > epsilon) || !(da0 > epsilon)) context.lineTo(x10, y10);\n\n // Does the sector’s inner ring (or point) have rounded corners?\n else if (rc0 > epsilon) {\n t0 = cornerTangents(x10, y10, x11, y11, r0, -rc0, cw);\n t1 = cornerTangents(x01, y01, x00, y00, r0, -rc0, cw);\n\n context.lineTo(t0.cx + t0.x01, t0.cy + t0.y01);\n\n // Have the corners merged?\n if (rc0 < rc) context.arc(t0.cx, t0.cy, rc0, atan2(t0.y01, t0.x01), atan2(t1.y01, t1.x01), !cw);\n\n // Otherwise, draw the two corners and the ring.\n else {\n context.arc(t0.cx, t0.cy, rc0, atan2(t0.y01, t0.x01), atan2(t0.y11, t0.x11), !cw);\n context.arc(0, 0, r0, atan2(t0.cy + t0.y11, t0.cx + t0.x11), atan2(t1.cy + t1.y11, t1.cx + t1.x11), cw);\n context.arc(t1.cx, t1.cy, rc0, atan2(t1.y11, t1.x11), atan2(t1.y01, t1.x01), !cw);\n }\n }\n\n // Or is the inner ring just a circular arc?\n else context.arc(0, 0, r0, a10, a00, cw);\n }\n\n context.closePath();\n\n if (buffer) return context = null, buffer + \"\" || null;\n }\n\n arc.centroid = function() {\n var r = (+innerRadius.apply(this, arguments) + +outerRadius.apply(this, arguments)) / 2,\n a = (+startAngle.apply(this, arguments) + +endAngle.apply(this, arguments)) / 2 - pi / 2;\n return [cos(a) * r, sin(a) * r];\n };\n\n arc.innerRadius = function(_) {\n return arguments.length ? (innerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : innerRadius;\n };\n\n arc.outerRadius = function(_) {\n return arguments.length ? (outerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : outerRadius;\n };\n\n arc.cornerRadius = function(_) {\n return arguments.length ? (cornerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : cornerRadius;\n };\n\n arc.padRadius = function(_) {\n return arguments.length ? (padRadius = _ == null ? null : typeof _ === \"function\" ? _ : constant(+_), arc) : padRadius;\n };\n\n arc.startAngle = function(_) {\n return arguments.length ? (startAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : startAngle;\n };\n\n arc.endAngle = function(_) {\n return arguments.length ? (endAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : endAngle;\n };\n\n arc.padAngle = function(_) {\n return arguments.length ? (padAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : padAngle;\n };\n\n arc.context = function(_) {\n return arguments.length ? ((context = _ == null ? null : _), arc) : context;\n };\n\n return arc;\n}\n","function Linear(context) {\n this._context = context;\n}\n\nLinear.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; // proceed\n default: this._context.lineTo(x, y); break;\n }\n }\n};\n\nexport default function(context) {\n return new Linear(context);\n}\n","export function x(p) {\n return p[0];\n}\n\nexport function y(p) {\n return p[1];\n}\n","import {path} from \"d3-path\";\nimport constant from \"./constant\";\nimport curveLinear from \"./curve/linear\";\nimport {x as pointX, y as pointY} from \"./point\";\n\nexport default function() {\n var x = pointX,\n y = pointY,\n defined = constant(true),\n context = null,\n curve = curveLinear,\n output = null;\n\n function line(data) {\n var i,\n n = data.length,\n d,\n defined0 = false,\n buffer;\n\n if (context == null) output = curve(buffer = path());\n\n for (i = 0; i <= n; ++i) {\n if (!(i < n && defined(d = data[i], i, data)) === defined0) {\n if (defined0 = !defined0) output.lineStart();\n else output.lineEnd();\n }\n if (defined0) output.point(+x(d, i, data), +y(d, i, data));\n }\n\n if (buffer) return output = null, buffer + \"\" || null;\n }\n\n line.x = function(_) {\n return arguments.length ? (x = typeof _ === \"function\" ? _ : constant(+_), line) : x;\n };\n\n line.y = function(_) {\n return arguments.length ? (y = typeof _ === \"function\" ? _ : constant(+_), line) : y;\n };\n\n line.defined = function(_) {\n return arguments.length ? (defined = typeof _ === \"function\" ? _ : constant(!!_), line) : defined;\n };\n\n line.curve = function(_) {\n return arguments.length ? (curve = _, context != null && (output = curve(context)), line) : curve;\n };\n\n line.context = function(_) {\n return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), line) : context;\n };\n\n return line;\n}\n","import {path} from \"d3-path\";\nimport constant from \"./constant\";\nimport curveLinear from \"./curve/linear\";\nimport line from \"./line\";\nimport {x as pointX, y as pointY} from \"./point\";\n\nexport default function() {\n var x0 = pointX,\n x1 = null,\n y0 = constant(0),\n y1 = pointY,\n defined = constant(true),\n context = null,\n curve = curveLinear,\n output = null;\n\n function area(data) {\n var i,\n j,\n k,\n n = data.length,\n d,\n defined0 = false,\n buffer,\n x0z = new Array(n),\n y0z = new Array(n);\n\n if (context == null) output = curve(buffer = path());\n\n for (i = 0; i <= n; ++i) {\n if (!(i < n && defined(d = data[i], i, data)) === defined0) {\n if (defined0 = !defined0) {\n j = i;\n output.areaStart();\n output.lineStart();\n } else {\n output.lineEnd();\n output.lineStart();\n for (k = i - 1; k >= j; --k) {\n output.point(x0z[k], y0z[k]);\n }\n output.lineEnd();\n output.areaEnd();\n }\n }\n if (defined0) {\n x0z[i] = +x0(d, i, data), y0z[i] = +y0(d, i, data);\n output.point(x1 ? +x1(d, i, data) : x0z[i], y1 ? +y1(d, i, data) : y0z[i]);\n }\n }\n\n if (buffer) return output = null, buffer + \"\" || null;\n }\n\n function arealine() {\n return line().defined(defined).curve(curve).context(context);\n }\n\n area.x = function(_) {\n return arguments.length ? (x0 = typeof _ === \"function\" ? _ : constant(+_), x1 = null, area) : x0;\n };\n\n area.x0 = function(_) {\n return arguments.length ? (x0 = typeof _ === \"function\" ? _ : constant(+_), area) : x0;\n };\n\n area.x1 = function(_) {\n return arguments.length ? (x1 = _ == null ? null : typeof _ === \"function\" ? _ : constant(+_), area) : x1;\n };\n\n area.y = function(_) {\n return arguments.length ? (y0 = typeof _ === \"function\" ? _ : constant(+_), y1 = null, area) : y0;\n };\n\n area.y0 = function(_) {\n return arguments.length ? (y0 = typeof _ === \"function\" ? _ : constant(+_), area) : y0;\n };\n\n area.y1 = function(_) {\n return arguments.length ? (y1 = _ == null ? null : typeof _ === \"function\" ? _ : constant(+_), area) : y1;\n };\n\n area.lineX0 =\n area.lineY0 = function() {\n return arealine().x(x0).y(y0);\n };\n\n area.lineY1 = function() {\n return arealine().x(x0).y(y1);\n };\n\n area.lineX1 = function() {\n return arealine().x(x1).y(y0);\n };\n\n area.defined = function(_) {\n return arguments.length ? (defined = typeof _ === \"function\" ? _ : constant(!!_), area) : defined;\n };\n\n area.curve = function(_) {\n return arguments.length ? (curve = _, context != null && (output = curve(context)), area) : curve;\n };\n\n area.context = function(_) {\n return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), area) : context;\n };\n\n return area;\n}\n","export default function(a, b) {\n return b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN;\n}\n","export default function(d) {\n return d;\n}\n","import curveLinear from \"./linear\";\n\nexport var curveRadialLinear = curveRadial(curveLinear);\n\nfunction Radial(curve) {\n this._curve = curve;\n}\n\nRadial.prototype = {\n areaStart: function() {\n this._curve.areaStart();\n },\n areaEnd: function() {\n this._curve.areaEnd();\n },\n lineStart: function() {\n this._curve.lineStart();\n },\n lineEnd: function() {\n this._curve.lineEnd();\n },\n point: function(a, r) {\n this._curve.point(r * Math.sin(a), r * -Math.cos(a));\n }\n};\n\nexport default function curveRadial(curve) {\n\n function radial(context) {\n return new Radial(curve(context));\n }\n\n radial._curve = curve;\n\n return radial;\n}\n","import curveRadial, {curveRadialLinear} from \"./curve/radial\";\nimport line from \"./line\";\n\nexport function lineRadial(l) {\n var c = l.curve;\n\n l.angle = l.x, delete l.x;\n l.radius = l.y, delete l.y;\n\n l.curve = function(_) {\n return arguments.length ? c(curveRadial(_)) : c()._curve;\n };\n\n return l;\n}\n\nexport default function() {\n return lineRadial(line().curve(curveRadialLinear));\n}\n","export var slice = Array.prototype.slice;\n","import {pi, tau} from \"../math\";\n\nexport default {\n draw: function(context, size) {\n var r = Math.sqrt(size / pi);\n context.moveTo(r, 0);\n context.arc(0, 0, r, 0, tau);\n }\n};\n","export default {\n draw: function(context, size) {\n var r = Math.sqrt(size / 5) / 2;\n context.moveTo(-3 * r, -r);\n context.lineTo(-r, -r);\n context.lineTo(-r, -3 * r);\n context.lineTo(r, -3 * r);\n context.lineTo(r, -r);\n context.lineTo(3 * r, -r);\n context.lineTo(3 * r, r);\n context.lineTo(r, r);\n context.lineTo(r, 3 * r);\n context.lineTo(-r, 3 * r);\n context.lineTo(-r, r);\n context.lineTo(-3 * r, r);\n context.closePath();\n }\n};\n","var tan30 = Math.sqrt(1 / 3),\n tan30_2 = tan30 * 2;\n\nexport default {\n draw: function(context, size) {\n var y = Math.sqrt(size / tan30_2),\n x = y * tan30;\n context.moveTo(0, -y);\n context.lineTo(x, 0);\n context.lineTo(0, y);\n context.lineTo(-x, 0);\n context.closePath();\n }\n};\n","import {pi, tau} from \"../math\";\n\nvar ka = 0.89081309152928522810,\n kr = Math.sin(pi / 10) / Math.sin(7 * pi / 10),\n kx = Math.sin(tau / 10) * kr,\n ky = -Math.cos(tau / 10) * kr;\n\nexport default {\n draw: function(context, size) {\n var r = Math.sqrt(size * ka),\n x = kx * r,\n y = ky * r;\n context.moveTo(0, -r);\n context.lineTo(x, y);\n for (var i = 1; i < 5; ++i) {\n var a = tau * i / 5,\n c = Math.cos(a),\n s = Math.sin(a);\n context.lineTo(s * r, -c * r);\n context.lineTo(c * x - s * y, s * x + c * y);\n }\n context.closePath();\n }\n};\n","export default {\n draw: function(context, size) {\n var w = Math.sqrt(size),\n x = -w / 2;\n context.rect(x, x, w, w);\n }\n};\n","var sqrt3 = Math.sqrt(3);\n\nexport default {\n draw: function(context, size) {\n var y = -Math.sqrt(size / (sqrt3 * 3));\n context.moveTo(0, y * 2);\n context.lineTo(-sqrt3 * y, -y);\n context.lineTo(sqrt3 * y, -y);\n context.closePath();\n }\n};\n","var c = -0.5,\n s = Math.sqrt(3) / 2,\n k = 1 / Math.sqrt(12),\n a = (k / 2 + 1) * 3;\n\nexport default {\n draw: function(context, size) {\n var r = Math.sqrt(size / a),\n x0 = r / 2,\n y0 = r * k,\n x1 = x0,\n y1 = r * k + r,\n x2 = -x1,\n y2 = y1;\n context.moveTo(x0, y0);\n context.lineTo(x1, y1);\n context.lineTo(x2, y2);\n context.lineTo(c * x0 - s * y0, s * x0 + c * y0);\n context.lineTo(c * x1 - s * y1, s * x1 + c * y1);\n context.lineTo(c * x2 - s * y2, s * x2 + c * y2);\n context.lineTo(c * x0 + s * y0, c * y0 - s * x0);\n context.lineTo(c * x1 + s * y1, c * y1 - s * x1);\n context.lineTo(c * x2 + s * y2, c * y2 - s * x2);\n context.closePath();\n }\n};\n","export default function() {}\n","export function point(that, x, y) {\n that._context.bezierCurveTo(\n (2 * that._x0 + that._x1) / 3,\n (2 * that._y0 + that._y1) / 3,\n (that._x0 + 2 * that._x1) / 3,\n (that._y0 + 2 * that._y1) / 3,\n (that._x0 + 4 * that._x1 + x) / 6,\n (that._y0 + 4 * that._y1 + y) / 6\n );\n}\n\nexport function Basis(context) {\n this._context = context;\n}\n\nBasis.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 =\n this._y0 = this._y1 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 3: point(this, this._x1, this._y1); // proceed\n case 2: this._context.lineTo(this._x1, this._y1); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; this._context.lineTo((5 * this._x0 + this._x1) / 6, (5 * this._y0 + this._y1) / 6); // proceed\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n }\n};\n\nexport default function(context) {\n return new Basis(context);\n}\n","import noop from \"../noop\";\nimport {point} from \"./basis\";\n\nfunction BasisClosed(context) {\n this._context = context;\n}\n\nBasisClosed.prototype = {\n areaStart: noop,\n areaEnd: noop,\n lineStart: function() {\n this._x0 = this._x1 = this._x2 = this._x3 = this._x4 =\n this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 1: {\n this._context.moveTo(this._x2, this._y2);\n this._context.closePath();\n break;\n }\n case 2: {\n this._context.moveTo((this._x2 + 2 * this._x3) / 3, (this._y2 + 2 * this._y3) / 3);\n this._context.lineTo((this._x3 + 2 * this._x2) / 3, (this._y3 + 2 * this._y2) / 3);\n this._context.closePath();\n break;\n }\n case 3: {\n this.point(this._x2, this._y2);\n this.point(this._x3, this._y3);\n this.point(this._x4, this._y4);\n break;\n }\n }\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._x2 = x, this._y2 = y; break;\n case 1: this._point = 2; this._x3 = x, this._y3 = y; break;\n case 2: this._point = 3; this._x4 = x, this._y4 = y; this._context.moveTo((this._x0 + 4 * this._x1 + x) / 6, (this._y0 + 4 * this._y1 + y) / 6); break;\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n }\n};\n\nexport default function(context) {\n return new BasisClosed(context);\n}\n","import {point} from \"./basis\";\n\nfunction BasisOpen(context) {\n this._context = context;\n}\n\nBasisOpen.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 =\n this._y0 = this._y1 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; var x0 = (this._x0 + 4 * this._x1 + x) / 6, y0 = (this._y0 + 4 * this._y1 + y) / 6; this._line ? this._context.lineTo(x0, y0) : this._context.moveTo(x0, y0); break;\n case 3: this._point = 4; // proceed\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n }\n};\n\nexport default function(context) {\n return new BasisOpen(context);\n}\n","import {Basis} from \"./basis\";\n\nfunction Bundle(context, beta) {\n this._basis = new Basis(context);\n this._beta = beta;\n}\n\nBundle.prototype = {\n lineStart: function() {\n this._x = [];\n this._y = [];\n this._basis.lineStart();\n },\n lineEnd: function() {\n var x = this._x,\n y = this._y,\n j = x.length - 1;\n\n if (j > 0) {\n var x0 = x[0],\n y0 = y[0],\n dx = x[j] - x0,\n dy = y[j] - y0,\n i = -1,\n t;\n\n while (++i <= j) {\n t = i / j;\n this._basis.point(\n this._beta * x[i] + (1 - this._beta) * (x0 + t * dx),\n this._beta * y[i] + (1 - this._beta) * (y0 + t * dy)\n );\n }\n }\n\n this._x = this._y = null;\n this._basis.lineEnd();\n },\n point: function(x, y) {\n this._x.push(+x);\n this._y.push(+y);\n }\n};\n\nexport default (function custom(beta) {\n\n function bundle(context) {\n return beta === 1 ? new Basis(context) : new Bundle(context, beta);\n }\n\n bundle.beta = function(beta) {\n return custom(+beta);\n };\n\n return bundle;\n})(0.85);\n","export function point(that, x, y) {\n that._context.bezierCurveTo(\n that._x1 + that._k * (that._x2 - that._x0),\n that._y1 + that._k * (that._y2 - that._y0),\n that._x2 + that._k * (that._x1 - x),\n that._y2 + that._k * (that._y1 - y),\n that._x2,\n that._y2\n );\n}\n\nexport function Cardinal(context, tension) {\n this._context = context;\n this._k = (1 - tension) / 6;\n}\n\nCardinal.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 2: this._context.lineTo(this._x2, this._y2); break;\n case 3: point(this, this._x1, this._y1); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; this._x1 = x, this._y1 = y; break;\n case 2: this._point = 3; // proceed\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(tension) {\n\n function cardinal(context) {\n return new Cardinal(context, tension);\n }\n\n cardinal.tension = function(tension) {\n return custom(+tension);\n };\n\n return cardinal;\n})(0);\n","import noop from \"../noop\";\nimport {point} from \"./cardinal\";\n\nexport function CardinalClosed(context, tension) {\n this._context = context;\n this._k = (1 - tension) / 6;\n}\n\nCardinalClosed.prototype = {\n areaStart: noop,\n areaEnd: noop,\n lineStart: function() {\n this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = this._x5 =\n this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = this._y5 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 1: {\n this._context.moveTo(this._x3, this._y3);\n this._context.closePath();\n break;\n }\n case 2: {\n this._context.lineTo(this._x3, this._y3);\n this._context.closePath();\n break;\n }\n case 3: {\n this.point(this._x3, this._y3);\n this.point(this._x4, this._y4);\n this.point(this._x5, this._y5);\n break;\n }\n }\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._x3 = x, this._y3 = y; break;\n case 1: this._point = 2; this._context.moveTo(this._x4 = x, this._y4 = y); break;\n case 2: this._point = 3; this._x5 = x, this._y5 = y; break;\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(tension) {\n\n function cardinal(context) {\n return new CardinalClosed(context, tension);\n }\n\n cardinal.tension = function(tension) {\n return custom(+tension);\n };\n\n return cardinal;\n})(0);\n","import {point} from \"./cardinal\";\n\nexport function CardinalOpen(context, tension) {\n this._context = context;\n this._k = (1 - tension) / 6;\n}\n\nCardinalOpen.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; this._line ? this._context.lineTo(this._x2, this._y2) : this._context.moveTo(this._x2, this._y2); break;\n case 3: this._point = 4; // proceed\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(tension) {\n\n function cardinal(context) {\n return new CardinalOpen(context, tension);\n }\n\n cardinal.tension = function(tension) {\n return custom(+tension);\n };\n\n return cardinal;\n})(0);\n","import {epsilon} from \"../math\";\nimport {Cardinal} from \"./cardinal\";\n\nexport function point(that, x, y) {\n var x1 = that._x1,\n y1 = that._y1,\n x2 = that._x2,\n y2 = that._y2;\n\n if (that._l01_a > epsilon) {\n var a = 2 * that._l01_2a + 3 * that._l01_a * that._l12_a + that._l12_2a,\n n = 3 * that._l01_a * (that._l01_a + that._l12_a);\n x1 = (x1 * a - that._x0 * that._l12_2a + that._x2 * that._l01_2a) / n;\n y1 = (y1 * a - that._y0 * that._l12_2a + that._y2 * that._l01_2a) / n;\n }\n\n if (that._l23_a > epsilon) {\n var b = 2 * that._l23_2a + 3 * that._l23_a * that._l12_a + that._l12_2a,\n m = 3 * that._l23_a * (that._l23_a + that._l12_a);\n x2 = (x2 * b + that._x1 * that._l23_2a - x * that._l12_2a) / m;\n y2 = (y2 * b + that._y1 * that._l23_2a - y * that._l12_2a) / m;\n }\n\n that._context.bezierCurveTo(x1, y1, x2, y2, that._x2, that._y2);\n}\n\nfunction CatmullRom(context, alpha) {\n this._context = context;\n this._alpha = alpha;\n}\n\nCatmullRom.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._l01_a = this._l12_a = this._l23_a =\n this._l01_2a = this._l12_2a = this._l23_2a =\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 2: this._context.lineTo(this._x2, this._y2); break;\n case 3: this.point(this._x2, this._y2); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n\n if (this._point) {\n var x23 = this._x2 - x,\n y23 = this._y2 - y;\n this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));\n }\n\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; // proceed\n default: point(this, x, y); break;\n }\n\n this._l01_a = this._l12_a, this._l12_a = this._l23_a;\n this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(alpha) {\n\n function catmullRom(context) {\n return alpha ? new CatmullRom(context, alpha) : new Cardinal(context, 0);\n }\n\n catmullRom.alpha = function(alpha) {\n return custom(+alpha);\n };\n\n return catmullRom;\n})(0.5);\n","import {CardinalClosed} from \"./cardinalClosed\";\nimport noop from \"../noop\";\nimport {point} from \"./catmullRom\";\n\nfunction CatmullRomClosed(context, alpha) {\n this._context = context;\n this._alpha = alpha;\n}\n\nCatmullRomClosed.prototype = {\n areaStart: noop,\n areaEnd: noop,\n lineStart: function() {\n this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = this._x5 =\n this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = this._y5 = NaN;\n this._l01_a = this._l12_a = this._l23_a =\n this._l01_2a = this._l12_2a = this._l23_2a =\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 1: {\n this._context.moveTo(this._x3, this._y3);\n this._context.closePath();\n break;\n }\n case 2: {\n this._context.lineTo(this._x3, this._y3);\n this._context.closePath();\n break;\n }\n case 3: {\n this.point(this._x3, this._y3);\n this.point(this._x4, this._y4);\n this.point(this._x5, this._y5);\n break;\n }\n }\n },\n point: function(x, y) {\n x = +x, y = +y;\n\n if (this._point) {\n var x23 = this._x2 - x,\n y23 = this._y2 - y;\n this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));\n }\n\n switch (this._point) {\n case 0: this._point = 1; this._x3 = x, this._y3 = y; break;\n case 1: this._point = 2; this._context.moveTo(this._x4 = x, this._y4 = y); break;\n case 2: this._point = 3; this._x5 = x, this._y5 = y; break;\n default: point(this, x, y); break;\n }\n\n this._l01_a = this._l12_a, this._l12_a = this._l23_a;\n this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(alpha) {\n\n function catmullRom(context) {\n return alpha ? new CatmullRomClosed(context, alpha) : new CardinalClosed(context, 0);\n }\n\n catmullRom.alpha = function(alpha) {\n return custom(+alpha);\n };\n\n return catmullRom;\n})(0.5);\n","import {CardinalOpen} from \"./cardinalOpen\";\nimport {point} from \"./catmullRom\";\n\nfunction CatmullRomOpen(context, alpha) {\n this._context = context;\n this._alpha = alpha;\n}\n\nCatmullRomOpen.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._l01_a = this._l12_a = this._l23_a =\n this._l01_2a = this._l12_2a = this._l23_2a =\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n\n if (this._point) {\n var x23 = this._x2 - x,\n y23 = this._y2 - y;\n this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));\n }\n\n switch (this._point) {\n case 0: this._point = 1; break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; this._line ? this._context.lineTo(this._x2, this._y2) : this._context.moveTo(this._x2, this._y2); break;\n case 3: this._point = 4; // proceed\n default: point(this, x, y); break;\n }\n\n this._l01_a = this._l12_a, this._l12_a = this._l23_a;\n this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(alpha) {\n\n function catmullRom(context) {\n return alpha ? new CatmullRomOpen(context, alpha) : new CardinalOpen(context, 0);\n }\n\n catmullRom.alpha = function(alpha) {\n return custom(+alpha);\n };\n\n return catmullRom;\n})(0.5);\n","import noop from \"../noop\";\n\nfunction LinearClosed(context) {\n this._context = context;\n}\n\nLinearClosed.prototype = {\n areaStart: noop,\n areaEnd: noop,\n lineStart: function() {\n this._point = 0;\n },\n lineEnd: function() {\n if (this._point) this._context.closePath();\n },\n point: function(x, y) {\n x = +x, y = +y;\n if (this._point) this._context.lineTo(x, y);\n else this._point = 1, this._context.moveTo(x, y);\n }\n};\n\nexport default function(context) {\n return new LinearClosed(context);\n}\n","function sign(x) {\n return x < 0 ? -1 : 1;\n}\n\n// Calculate the slopes of the tangents (Hermite-type interpolation) based on\n// the following paper: Steffen, M. 1990. A Simple Method for Monotonic\n// Interpolation in One Dimension. Astronomy and Astrophysics, Vol. 239, NO.\n// NOV(II), P. 443, 1990.\nfunction slope3(that, x2, y2) {\n var h0 = that._x1 - that._x0,\n h1 = x2 - that._x1,\n s0 = (that._y1 - that._y0) / (h0 || h1 < 0 && -0),\n s1 = (y2 - that._y1) / (h1 || h0 < 0 && -0),\n p = (s0 * h1 + s1 * h0) / (h0 + h1);\n return (sign(s0) + sign(s1)) * Math.min(Math.abs(s0), Math.abs(s1), 0.5 * Math.abs(p)) || 0;\n}\n\n// Calculate a one-sided slope.\nfunction slope2(that, t) {\n var h = that._x1 - that._x0;\n return h ? (3 * (that._y1 - that._y0) / h - t) / 2 : t;\n}\n\n// According to https://en.wikipedia.org/wiki/Cubic_Hermite_spline#Representations\n// \"you can express cubic Hermite interpolation in terms of cubic Bézier curves\n// with respect to the four values p0, p0 + m0 / 3, p1 - m1 / 3, p1\".\nfunction point(that, t0, t1) {\n var x0 = that._x0,\n y0 = that._y0,\n x1 = that._x1,\n y1 = that._y1,\n dx = (x1 - x0) / 3;\n that._context.bezierCurveTo(x0 + dx, y0 + dx * t0, x1 - dx, y1 - dx * t1, x1, y1);\n}\n\nfunction MonotoneX(context) {\n this._context = context;\n}\n\nMonotoneX.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 =\n this._y0 = this._y1 =\n this._t0 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 2: this._context.lineTo(this._x1, this._y1); break;\n case 3: point(this, this._t0, slope2(this, this._t0)); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n var t1 = NaN;\n\n x = +x, y = +y;\n if (x === this._x1 && y === this._y1) return; // Ignore coincident points.\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; point(this, slope2(this, t1 = slope3(this, x, y)), t1); break;\n default: point(this, this._t0, t1 = slope3(this, x, y)); break;\n }\n\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n this._t0 = t1;\n }\n}\n\nfunction MonotoneY(context) {\n this._context = new ReflectContext(context);\n}\n\n(MonotoneY.prototype = Object.create(MonotoneX.prototype)).point = function(x, y) {\n MonotoneX.prototype.point.call(this, y, x);\n};\n\nfunction ReflectContext(context) {\n this._context = context;\n}\n\nReflectContext.prototype = {\n moveTo: function(x, y) { this._context.moveTo(y, x); },\n closePath: function() { this._context.closePath(); },\n lineTo: function(x, y) { this._context.lineTo(y, x); },\n bezierCurveTo: function(x1, y1, x2, y2, x, y) { this._context.bezierCurveTo(y1, x1, y2, x2, y, x); }\n};\n\nexport function monotoneX(context) {\n return new MonotoneX(context);\n}\n\nexport function monotoneY(context) {\n return new MonotoneY(context);\n}\n","function Natural(context) {\n this._context = context;\n}\n\nNatural.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x = [];\n this._y = [];\n },\n lineEnd: function() {\n var x = this._x,\n y = this._y,\n n = x.length;\n\n if (n) {\n this._line ? this._context.lineTo(x[0], y[0]) : this._context.moveTo(x[0], y[0]);\n if (n === 2) {\n this._context.lineTo(x[1], y[1]);\n } else {\n var px = controlPoints(x),\n py = controlPoints(y);\n for (var i0 = 0, i1 = 1; i1 < n; ++i0, ++i1) {\n this._context.bezierCurveTo(px[0][i0], py[0][i0], px[1][i0], py[1][i0], x[i1], y[i1]);\n }\n }\n }\n\n if (this._line || (this._line !== 0 && n === 1)) this._context.closePath();\n this._line = 1 - this._line;\n this._x = this._y = null;\n },\n point: function(x, y) {\n this._x.push(+x);\n this._y.push(+y);\n }\n};\n\n// See https://www.particleincell.com/2012/bezier-splines/ for derivation.\nfunction controlPoints(x) {\n var i,\n n = x.length - 1,\n m,\n a = new Array(n),\n b = new Array(n),\n r = new Array(n);\n a[0] = 0, b[0] = 2, r[0] = x[0] + 2 * x[1];\n for (i = 1; i < n - 1; ++i) a[i] = 1, b[i] = 4, r[i] = 4 * x[i] + 2 * x[i + 1];\n a[n - 1] = 2, b[n - 1] = 7, r[n - 1] = 8 * x[n - 1] + x[n];\n for (i = 1; i < n; ++i) m = a[i] / b[i - 1], b[i] -= m, r[i] -= m * r[i - 1];\n a[n - 1] = r[n - 1] / b[n - 1];\n for (i = n - 2; i >= 0; --i) a[i] = (r[i] - a[i + 1]) / b[i];\n b[n - 1] = (x[n] + a[n - 1]) / 2;\n for (i = 0; i < n - 1; ++i) b[i] = 2 * x[i + 1] - a[i + 1];\n return [a, b];\n}\n\nexport default function(context) {\n return new Natural(context);\n}\n","function Step(context, t) {\n this._context = context;\n this._t = t;\n}\n\nStep.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x = this._y = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n if (0 < this._t && this._t < 1 && this._point === 2) this._context.lineTo(this._x, this._y);\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n if (this._line >= 0) this._t = 1 - this._t, this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; // proceed\n default: {\n if (this._t <= 0) {\n this._context.lineTo(this._x, y);\n this._context.lineTo(x, y);\n } else {\n var x1 = this._x * (1 - this._t) + x * this._t;\n this._context.lineTo(x1, this._y);\n this._context.lineTo(x1, y);\n }\n break;\n }\n }\n this._x = x, this._y = y;\n }\n};\n\nexport default function(context) {\n return new Step(context, 0.5);\n}\n\nexport function stepBefore(context) {\n return new Step(context, 0);\n}\n\nexport function stepAfter(context) {\n return new Step(context, 1);\n}\n","export default function(series, order) {\n if (!((n = series.length) > 1)) return;\n for (var i = 1, j, s0, s1 = series[order[0]], n, m = s1.length; i < n; ++i) {\n s0 = s1, s1 = series[order[i]];\n for (j = 0; j < m; ++j) {\n s1[j][1] += s1[j][0] = isNaN(s0[j][1]) ? s0[j][0] : s0[j][1];\n }\n }\n}\n","export default function(series) {\n var n = series.length, o = new Array(n);\n while (--n >= 0) o[n] = n;\n return o;\n}\n","import {slice} from \"./array\";\nimport constant from \"./constant\";\nimport offsetNone from \"./offset/none\";\nimport orderNone from \"./order/none\";\n\nfunction stackValue(d, key) {\n return d[key];\n}\n\nexport default function() {\n var keys = constant([]),\n order = orderNone,\n offset = offsetNone,\n value = stackValue;\n\n function stack(data) {\n var kz = keys.apply(this, arguments),\n i,\n m = data.length,\n n = kz.length,\n sz = new Array(n),\n oz;\n\n for (i = 0; i < n; ++i) {\n for (var ki = kz[i], si = sz[i] = new Array(m), j = 0, sij; j < m; ++j) {\n si[j] = sij = [0, +value(data[j], ki, j, data)];\n sij.data = data[j];\n }\n si.key = ki;\n }\n\n for (i = 0, oz = order(sz); i < n; ++i) {\n sz[oz[i]].index = i;\n }\n\n offset(sz, oz);\n return sz;\n }\n\n stack.keys = function(_) {\n return arguments.length ? (keys = typeof _ === \"function\" ? _ : constant(slice.call(_)), stack) : keys;\n };\n\n stack.value = function(_) {\n return arguments.length ? (value = typeof _ === \"function\" ? _ : constant(+_), stack) : value;\n };\n\n stack.order = function(_) {\n return arguments.length ? (order = _ == null ? orderNone : typeof _ === \"function\" ? _ : constant(slice.call(_)), stack) : order;\n };\n\n stack.offset = function(_) {\n return arguments.length ? (offset = _ == null ? offsetNone : _, stack) : offset;\n };\n\n return stack;\n}\n","import none from \"./none\";\n\nexport default function(series) {\n var sums = series.map(sum);\n return none(series).sort(function(a, b) { return sums[a] - sums[b]; });\n}\n\nexport function sum(series) {\n var s = 0, i = -1, n = series.length, v;\n while (++i < n) if (v = +series[i][1]) s += v;\n return s;\n}\n","export function cubicIn(t) {\n return t * t * t;\n}\n\nexport function cubicOut(t) {\n return --t * t * t + 1;\n}\n\nexport function cubicInOut(t) {\n return ((t *= 2) <= 1 ? t * t * t : (t -= 2) * t * t + 2) / 2;\n}\n","var exponent = 3;\n\nexport var polyIn = (function custom(e) {\n e = +e;\n\n function polyIn(t) {\n return Math.pow(t, e);\n }\n\n polyIn.exponent = custom;\n\n return polyIn;\n})(exponent);\n\nexport var polyOut = (function custom(e) {\n e = +e;\n\n function polyOut(t) {\n return 1 - Math.pow(1 - t, e);\n }\n\n polyOut.exponent = custom;\n\n return polyOut;\n})(exponent);\n\nexport var polyInOut = (function custom(e) {\n e = +e;\n\n function polyInOut(t) {\n return ((t *= 2) <= 1 ? Math.pow(t, e) : 2 - Math.pow(2 - t, e)) / 2;\n }\n\n polyInOut.exponent = custom;\n\n return polyInOut;\n})(exponent);\n","var pi = Math.PI,\n halfPi = pi / 2;\n\nexport function sinIn(t) {\n return 1 - Math.cos(t * halfPi);\n}\n\nexport function sinOut(t) {\n return Math.sin(t * halfPi);\n}\n\nexport function sinInOut(t) {\n return (1 - Math.cos(pi * t)) / 2;\n}\n","var b1 = 4 / 11,\n b2 = 6 / 11,\n b3 = 8 / 11,\n b4 = 3 / 4,\n b5 = 9 / 11,\n b6 = 10 / 11,\n b7 = 15 / 16,\n b8 = 21 / 22,\n b9 = 63 / 64,\n b0 = 1 / b1 / b1;\n\nexport function bounceIn(t) {\n return 1 - bounceOut(1 - t);\n}\n\nexport function bounceOut(t) {\n return (t = +t) < b1 ? b0 * t * t : t < b3 ? b0 * (t -= b2) * t + b4 : t < b6 ? b0 * (t -= b5) * t + b7 : b0 * (t -= b8) * t + b9;\n}\n\nexport function bounceInOut(t) {\n return ((t *= 2) <= 1 ? 1 - bounceOut(1 - t) : bounceOut(t - 1) + 1) / 2;\n}\n","var overshoot = 1.70158;\n\nexport var backIn = (function custom(s) {\n s = +s;\n\n function backIn(t) {\n return t * t * ((s + 1) * t - s);\n }\n\n backIn.overshoot = custom;\n\n return backIn;\n})(overshoot);\n\nexport var backOut = (function custom(s) {\n s = +s;\n\n function backOut(t) {\n return --t * t * ((s + 1) * t + s) + 1;\n }\n\n backOut.overshoot = custom;\n\n return backOut;\n})(overshoot);\n\nexport var backInOut = (function custom(s) {\n s = +s;\n\n function backInOut(t) {\n return ((t *= 2) < 1 ? t * t * ((s + 1) * t - s) : (t -= 2) * t * ((s + 1) * t + s) + 2) / 2;\n }\n\n backInOut.overshoot = custom;\n\n return backInOut;\n})(overshoot);\n","var tau = 2 * Math.PI,\n amplitude = 1,\n period = 0.3;\n\nexport var elasticIn = (function custom(a, p) {\n var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau);\n\n function elasticIn(t) {\n return a * Math.pow(2, 10 * --t) * Math.sin((s - t) / p);\n }\n\n elasticIn.amplitude = function(a) { return custom(a, p * tau); };\n elasticIn.period = function(p) { return custom(a, p); };\n\n return elasticIn;\n})(amplitude, period);\n\nexport var elasticOut = (function custom(a, p) {\n var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau);\n\n function elasticOut(t) {\n return 1 - a * Math.pow(2, -10 * (t = +t)) * Math.sin((t + s) / p);\n }\n\n elasticOut.amplitude = function(a) { return custom(a, p * tau); };\n elasticOut.period = function(p) { return custom(a, p); };\n\n return elasticOut;\n})(amplitude, period);\n\nexport var elasticInOut = (function custom(a, p) {\n var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau);\n\n function elasticInOut(t) {\n return ((t = t * 2 - 1) < 0\n ? a * Math.pow(2, 10 * t) * Math.sin((s - t) / p)\n : 2 - a * Math.pow(2, -10 * t) * Math.sin((s + t) / p)) / 2;\n }\n\n elasticInOut.amplitude = function(a) { return custom(a, p * tau); };\n elasticInOut.period = function(p) { return custom(a, p); };\n\n return elasticInOut;\n})(amplitude, period);\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","export function x(d) {\n return d[0];\n}\n\nexport function y(d) {\n return d[1];\n}\n","function RedBlackTree() {\n this._ = null; // root node\n}\n\nexport function RedBlackNode(node) {\n node.U = // parent node\n node.C = // color - true for red, false for black\n node.L = // left node\n node.R = // right node\n node.P = // previous node\n node.N = null; // next node\n}\n\nRedBlackTree.prototype = {\n constructor: RedBlackTree,\n\n insert: function(after, node) {\n var parent, grandpa, uncle;\n\n if (after) {\n node.P = after;\n node.N = after.N;\n if (after.N) after.N.P = node;\n after.N = node;\n if (after.R) {\n after = after.R;\n while (after.L) after = after.L;\n after.L = node;\n } else {\n after.R = node;\n }\n parent = after;\n } else if (this._) {\n after = RedBlackFirst(this._);\n node.P = null;\n node.N = after;\n after.P = after.L = node;\n parent = after;\n } else {\n node.P = node.N = null;\n this._ = node;\n parent = null;\n }\n node.L = node.R = null;\n node.U = parent;\n node.C = true;\n\n after = node;\n while (parent && parent.C) {\n grandpa = parent.U;\n if (parent === grandpa.L) {\n uncle = grandpa.R;\n if (uncle && uncle.C) {\n parent.C = uncle.C = false;\n grandpa.C = true;\n after = grandpa;\n } else {\n if (after === parent.R) {\n RedBlackRotateLeft(this, parent);\n after = parent;\n parent = after.U;\n }\n parent.C = false;\n grandpa.C = true;\n RedBlackRotateRight(this, grandpa);\n }\n } else {\n uncle = grandpa.L;\n if (uncle && uncle.C) {\n parent.C = uncle.C = false;\n grandpa.C = true;\n after = grandpa;\n } else {\n if (after === parent.L) {\n RedBlackRotateRight(this, parent);\n after = parent;\n parent = after.U;\n }\n parent.C = false;\n grandpa.C = true;\n RedBlackRotateLeft(this, grandpa);\n }\n }\n parent = after.U;\n }\n this._.C = false;\n },\n\n remove: function(node) {\n if (node.N) node.N.P = node.P;\n if (node.P) node.P.N = node.N;\n node.N = node.P = null;\n\n var parent = node.U,\n sibling,\n left = node.L,\n right = node.R,\n next,\n red;\n\n if (!left) next = right;\n else if (!right) next = left;\n else next = RedBlackFirst(right);\n\n if (parent) {\n if (parent.L === node) parent.L = next;\n else parent.R = next;\n } else {\n this._ = next;\n }\n\n if (left && right) {\n red = next.C;\n next.C = node.C;\n next.L = left;\n left.U = next;\n if (next !== right) {\n parent = next.U;\n next.U = node.U;\n node = next.R;\n parent.L = node;\n next.R = right;\n right.U = next;\n } else {\n next.U = parent;\n parent = next;\n node = next.R;\n }\n } else {\n red = node.C;\n node = next;\n }\n\n if (node) node.U = parent;\n if (red) return;\n if (node && node.C) { node.C = false; return; }\n\n do {\n if (node === this._) break;\n if (node === parent.L) {\n sibling = parent.R;\n if (sibling.C) {\n sibling.C = false;\n parent.C = true;\n RedBlackRotateLeft(this, parent);\n sibling = parent.R;\n }\n if ((sibling.L && sibling.L.C)\n || (sibling.R && sibling.R.C)) {\n if (!sibling.R || !sibling.R.C) {\n sibling.L.C = false;\n sibling.C = true;\n RedBlackRotateRight(this, sibling);\n sibling = parent.R;\n }\n sibling.C = parent.C;\n parent.C = sibling.R.C = false;\n RedBlackRotateLeft(this, parent);\n node = this._;\n break;\n }\n } else {\n sibling = parent.L;\n if (sibling.C) {\n sibling.C = false;\n parent.C = true;\n RedBlackRotateRight(this, parent);\n sibling = parent.L;\n }\n if ((sibling.L && sibling.L.C)\n || (sibling.R && sibling.R.C)) {\n if (!sibling.L || !sibling.L.C) {\n sibling.R.C = false;\n sibling.C = true;\n RedBlackRotateLeft(this, sibling);\n sibling = parent.L;\n }\n sibling.C = parent.C;\n parent.C = sibling.L.C = false;\n RedBlackRotateRight(this, parent);\n node = this._;\n break;\n }\n }\n sibling.C = true;\n node = parent;\n parent = parent.U;\n } while (!node.C);\n\n if (node) node.C = false;\n }\n};\n\nfunction RedBlackRotateLeft(tree, node) {\n var p = node,\n q = node.R,\n parent = p.U;\n\n if (parent) {\n if (parent.L === p) parent.L = q;\n else parent.R = q;\n } else {\n tree._ = q;\n }\n\n q.U = parent;\n p.U = q;\n p.R = q.L;\n if (p.R) p.R.U = p;\n q.L = p;\n}\n\nfunction RedBlackRotateRight(tree, node) {\n var p = node,\n q = node.L,\n parent = p.U;\n\n if (parent) {\n if (parent.L === p) parent.L = q;\n else parent.R = q;\n } else {\n tree._ = q;\n }\n\n q.U = parent;\n p.U = q;\n p.L = q.R;\n if (p.L) p.L.U = p;\n q.R = p;\n}\n\nfunction RedBlackFirst(node) {\n while (node.L) node = node.L;\n return node;\n}\n\nexport default RedBlackTree;\n","import {cells, edges, epsilon} from \"./Diagram\";\n\nexport function createEdge(left, right, v0, v1) {\n var edge = [null, null],\n index = edges.push(edge) - 1;\n edge.left = left;\n edge.right = right;\n if (v0) setEdgeEnd(edge, left, right, v0);\n if (v1) setEdgeEnd(edge, right, left, v1);\n cells[left.index].halfedges.push(index);\n cells[right.index].halfedges.push(index);\n return edge;\n}\n\nexport function createBorderEdge(left, v0, v1) {\n var edge = [v0, v1];\n edge.left = left;\n return edge;\n}\n\nexport function setEdgeEnd(edge, left, right, vertex) {\n if (!edge[0] && !edge[1]) {\n edge[0] = vertex;\n edge.left = left;\n edge.right = right;\n } else if (edge.left === right) {\n edge[1] = vertex;\n } else {\n edge[0] = vertex;\n }\n}\n\n// Liang–Barsky line clipping.\nfunction clipEdge(edge, x0, y0, x1, y1) {\n var a = edge[0],\n b = edge[1],\n ax = a[0],\n ay = a[1],\n bx = b[0],\n by = b[1],\n t0 = 0,\n t1 = 1,\n dx = bx - ax,\n dy = by - ay,\n r;\n\n r = x0 - ax;\n if (!dx && r > 0) return;\n r /= dx;\n if (dx < 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n } else if (dx > 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n }\n\n r = x1 - ax;\n if (!dx && r < 0) return;\n r /= dx;\n if (dx < 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n } else if (dx > 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n }\n\n r = y0 - ay;\n if (!dy && r > 0) return;\n r /= dy;\n if (dy < 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n } else if (dy > 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n }\n\n r = y1 - ay;\n if (!dy && r < 0) return;\n r /= dy;\n if (dy < 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n } else if (dy > 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n }\n\n if (!(t0 > 0) && !(t1 < 1)) return true; // TODO Better check?\n\n if (t0 > 0) edge[0] = [ax + t0 * dx, ay + t0 * dy];\n if (t1 < 1) edge[1] = [ax + t1 * dx, ay + t1 * dy];\n return true;\n}\n\nfunction connectEdge(edge, x0, y0, x1, y1) {\n var v1 = edge[1];\n if (v1) return true;\n\n var v0 = edge[0],\n left = edge.left,\n right = edge.right,\n lx = left[0],\n ly = left[1],\n rx = right[0],\n ry = right[1],\n fx = (lx + rx) / 2,\n fy = (ly + ry) / 2,\n fm,\n fb;\n\n if (ry === ly) {\n if (fx < x0 || fx >= x1) return;\n if (lx > rx) {\n if (!v0) v0 = [fx, y0];\n else if (v0[1] >= y1) return;\n v1 = [fx, y1];\n } else {\n if (!v0) v0 = [fx, y1];\n else if (v0[1] < y0) return;\n v1 = [fx, y0];\n }\n } else {\n fm = (lx - rx) / (ry - ly);\n fb = fy - fm * fx;\n if (fm < -1 || fm > 1) {\n if (lx > rx) {\n if (!v0) v0 = [(y0 - fb) / fm, y0];\n else if (v0[1] >= y1) return;\n v1 = [(y1 - fb) / fm, y1];\n } else {\n if (!v0) v0 = [(y1 - fb) / fm, y1];\n else if (v0[1] < y0) return;\n v1 = [(y0 - fb) / fm, y0];\n }\n } else {\n if (ly < ry) {\n if (!v0) v0 = [x0, fm * x0 + fb];\n else if (v0[0] >= x1) return;\n v1 = [x1, fm * x1 + fb];\n } else {\n if (!v0) v0 = [x1, fm * x1 + fb];\n else if (v0[0] < x0) return;\n v1 = [x0, fm * x0 + fb];\n }\n }\n }\n\n edge[0] = v0;\n edge[1] = v1;\n return true;\n}\n\nexport function clipEdges(x0, y0, x1, y1) {\n var i = edges.length,\n edge;\n\n while (i--) {\n if (!connectEdge(edge = edges[i], x0, y0, x1, y1)\n || !clipEdge(edge, x0, y0, x1, y1)\n || !(Math.abs(edge[0][0] - edge[1][0]) > epsilon\n || Math.abs(edge[0][1] - edge[1][1]) > epsilon)) {\n delete edges[i];\n }\n }\n}\n","import {createBorderEdge} from \"./Edge\";\nimport {cells, edges, epsilon} from \"./Diagram\";\n\nexport function createCell(site) {\n return cells[site.index] = {\n site: site,\n halfedges: []\n };\n}\n\nfunction cellHalfedgeAngle(cell, edge) {\n var site = cell.site,\n va = edge.left,\n vb = edge.right;\n if (site === vb) vb = va, va = site;\n if (vb) return Math.atan2(vb[1] - va[1], vb[0] - va[0]);\n if (site === va) va = edge[1], vb = edge[0];\n else va = edge[0], vb = edge[1];\n return Math.atan2(va[0] - vb[0], vb[1] - va[1]);\n}\n\nexport function cellHalfedgeStart(cell, edge) {\n return edge[+(edge.left !== cell.site)];\n}\n\nexport function cellHalfedgeEnd(cell, edge) {\n return edge[+(edge.left === cell.site)];\n}\n\nexport function sortCellHalfedges() {\n for (var i = 0, n = cells.length, cell, halfedges, j, m; i < n; ++i) {\n if ((cell = cells[i]) && (m = (halfedges = cell.halfedges).length)) {\n var index = new Array(m),\n array = new Array(m);\n for (j = 0; j < m; ++j) index[j] = j, array[j] = cellHalfedgeAngle(cell, edges[halfedges[j]]);\n index.sort(function(i, j) { return array[j] - array[i]; });\n for (j = 0; j < m; ++j) array[j] = halfedges[index[j]];\n for (j = 0; j < m; ++j) halfedges[j] = array[j];\n }\n }\n}\n\nexport function clipCells(x0, y0, x1, y1) {\n var nCells = cells.length,\n iCell,\n cell,\n site,\n iHalfedge,\n halfedges,\n nHalfedges,\n start,\n startX,\n startY,\n end,\n endX,\n endY,\n cover = true;\n\n for (iCell = 0; iCell < nCells; ++iCell) {\n if (cell = cells[iCell]) {\n site = cell.site;\n halfedges = cell.halfedges;\n iHalfedge = halfedges.length;\n\n // Remove any dangling clipped edges.\n while (iHalfedge--) {\n if (!edges[halfedges[iHalfedge]]) {\n halfedges.splice(iHalfedge, 1);\n }\n }\n\n // Insert any border edges as necessary.\n iHalfedge = 0, nHalfedges = halfedges.length;\n while (iHalfedge < nHalfedges) {\n end = cellHalfedgeEnd(cell, edges[halfedges[iHalfedge]]), endX = end[0], endY = end[1];\n start = cellHalfedgeStart(cell, edges[halfedges[++iHalfedge % nHalfedges]]), startX = start[0], startY = start[1];\n if (Math.abs(endX - startX) > epsilon || Math.abs(endY - startY) > epsilon) {\n halfedges.splice(iHalfedge, 0, edges.push(createBorderEdge(site, end,\n Math.abs(endX - x0) < epsilon && y1 - endY > epsilon ? [x0, Math.abs(startX - x0) < epsilon ? startY : y1]\n : Math.abs(endY - y1) < epsilon && x1 - endX > epsilon ? [Math.abs(startY - y1) < epsilon ? startX : x1, y1]\n : Math.abs(endX - x1) < epsilon && endY - y0 > epsilon ? [x1, Math.abs(startX - x1) < epsilon ? startY : y0]\n : Math.abs(endY - y0) < epsilon && endX - x0 > epsilon ? [Math.abs(startY - y0) < epsilon ? startX : x0, y0]\n : null)) - 1);\n ++nHalfedges;\n }\n }\n\n if (nHalfedges) cover = false;\n }\n }\n\n // If there weren’t any edges, have the closest site cover the extent.\n // It doesn’t matter which corner of the extent we measure!\n if (cover) {\n var dx, dy, d2, dc = Infinity;\n\n for (iCell = 0, cover = null; iCell < nCells; ++iCell) {\n if (cell = cells[iCell]) {\n site = cell.site;\n dx = site[0] - x0;\n dy = site[1] - y0;\n d2 = dx * dx + dy * dy;\n if (d2 < dc) dc = d2, cover = cell;\n }\n }\n\n if (cover) {\n var v00 = [x0, y0], v01 = [x0, y1], v11 = [x1, y1], v10 = [x1, y0];\n cover.halfedges.push(\n edges.push(createBorderEdge(site = cover.site, v00, v01)) - 1,\n edges.push(createBorderEdge(site, v01, v11)) - 1,\n edges.push(createBorderEdge(site, v11, v10)) - 1,\n edges.push(createBorderEdge(site, v10, v00)) - 1\n );\n }\n }\n\n // Lastly delete any cells with no edges; these were entirely clipped.\n for (iCell = 0; iCell < nCells; ++iCell) {\n if (cell = cells[iCell]) {\n if (!cell.halfedges.length) {\n delete cells[iCell];\n }\n }\n }\n}\n","import {RedBlackNode} from \"./RedBlackTree\";\nimport {circles, epsilon2} from \"./Diagram\";\n\nvar circlePool = [];\n\nexport var firstCircle;\n\nfunction Circle() {\n RedBlackNode(this);\n this.x =\n this.y =\n this.arc =\n this.site =\n this.cy = null;\n}\n\nexport function attachCircle(arc) {\n var lArc = arc.P,\n rArc = arc.N;\n\n if (!lArc || !rArc) return;\n\n var lSite = lArc.site,\n cSite = arc.site,\n rSite = rArc.site;\n\n if (lSite === rSite) return;\n\n var bx = cSite[0],\n by = cSite[1],\n ax = lSite[0] - bx,\n ay = lSite[1] - by,\n cx = rSite[0] - bx,\n cy = rSite[1] - by;\n\n var d = 2 * (ax * cy - ay * cx);\n if (d >= -epsilon2) return;\n\n var ha = ax * ax + ay * ay,\n hc = cx * cx + cy * cy,\n x = (cy * ha - ay * hc) / d,\n y = (ax * hc - cx * ha) / d;\n\n var circle = circlePool.pop() || new Circle;\n circle.arc = arc;\n circle.site = cSite;\n circle.x = x + bx;\n circle.y = (circle.cy = y + by) + Math.sqrt(x * x + y * y); // y bottom\n\n arc.circle = circle;\n\n var before = null,\n node = circles._;\n\n while (node) {\n if (circle.y < node.y || (circle.y === node.y && circle.x <= node.x)) {\n if (node.L) node = node.L;\n else { before = node.P; break; }\n } else {\n if (node.R) node = node.R;\n else { before = node; break; }\n }\n }\n\n circles.insert(before, circle);\n if (!before) firstCircle = circle;\n}\n\nexport function detachCircle(arc) {\n var circle = arc.circle;\n if (circle) {\n if (!circle.P) firstCircle = circle.N;\n circles.remove(circle);\n circlePool.push(circle);\n RedBlackNode(circle);\n arc.circle = null;\n }\n}\n","import {RedBlackNode} from \"./RedBlackTree\";\nimport {createCell} from \"./Cell\";\nimport {attachCircle, detachCircle} from \"./Circle\";\nimport {createEdge, setEdgeEnd} from \"./Edge\";\nimport {beaches, epsilon} from \"./Diagram\";\n\nvar beachPool = [];\n\nfunction Beach() {\n RedBlackNode(this);\n this.edge =\n this.site =\n this.circle = null;\n}\n\nfunction createBeach(site) {\n var beach = beachPool.pop() || new Beach;\n beach.site = site;\n return beach;\n}\n\nfunction detachBeach(beach) {\n detachCircle(beach);\n beaches.remove(beach);\n beachPool.push(beach);\n RedBlackNode(beach);\n}\n\nexport function removeBeach(beach) {\n var circle = beach.circle,\n x = circle.x,\n y = circle.cy,\n vertex = [x, y],\n previous = beach.P,\n next = beach.N,\n disappearing = [beach];\n\n detachBeach(beach);\n\n var lArc = previous;\n while (lArc.circle\n && Math.abs(x - lArc.circle.x) < epsilon\n && Math.abs(y - lArc.circle.cy) < epsilon) {\n previous = lArc.P;\n disappearing.unshift(lArc);\n detachBeach(lArc);\n lArc = previous;\n }\n\n disappearing.unshift(lArc);\n detachCircle(lArc);\n\n var rArc = next;\n while (rArc.circle\n && Math.abs(x - rArc.circle.x) < epsilon\n && Math.abs(y - rArc.circle.cy) < epsilon) {\n next = rArc.N;\n disappearing.push(rArc);\n detachBeach(rArc);\n rArc = next;\n }\n\n disappearing.push(rArc);\n detachCircle(rArc);\n\n var nArcs = disappearing.length,\n iArc;\n for (iArc = 1; iArc < nArcs; ++iArc) {\n rArc = disappearing[iArc];\n lArc = disappearing[iArc - 1];\n setEdgeEnd(rArc.edge, lArc.site, rArc.site, vertex);\n }\n\n lArc = disappearing[0];\n rArc = disappearing[nArcs - 1];\n rArc.edge = createEdge(lArc.site, rArc.site, null, vertex);\n\n attachCircle(lArc);\n attachCircle(rArc);\n}\n\nexport function addBeach(site) {\n var x = site[0],\n directrix = site[1],\n lArc,\n rArc,\n dxl,\n dxr,\n node = beaches._;\n\n while (node) {\n dxl = leftBreakPoint(node, directrix) - x;\n if (dxl > epsilon) node = node.L; else {\n dxr = x - rightBreakPoint(node, directrix);\n if (dxr > epsilon) {\n if (!node.R) {\n lArc = node;\n break;\n }\n node = node.R;\n } else {\n if (dxl > -epsilon) {\n lArc = node.P;\n rArc = node;\n } else if (dxr > -epsilon) {\n lArc = node;\n rArc = node.N;\n } else {\n lArc = rArc = node;\n }\n break;\n }\n }\n }\n\n createCell(site);\n var newArc = createBeach(site);\n beaches.insert(lArc, newArc);\n\n if (!lArc && !rArc) return;\n\n if (lArc === rArc) {\n detachCircle(lArc);\n rArc = createBeach(lArc.site);\n beaches.insert(newArc, rArc);\n newArc.edge = rArc.edge = createEdge(lArc.site, newArc.site);\n attachCircle(lArc);\n attachCircle(rArc);\n return;\n }\n\n if (!rArc) { // && lArc\n newArc.edge = createEdge(lArc.site, newArc.site);\n return;\n }\n\n // else lArc !== rArc\n detachCircle(lArc);\n detachCircle(rArc);\n\n var lSite = lArc.site,\n ax = lSite[0],\n ay = lSite[1],\n bx = site[0] - ax,\n by = site[1] - ay,\n rSite = rArc.site,\n cx = rSite[0] - ax,\n cy = rSite[1] - ay,\n d = 2 * (bx * cy - by * cx),\n hb = bx * bx + by * by,\n hc = cx * cx + cy * cy,\n vertex = [(cy * hb - by * hc) / d + ax, (bx * hc - cx * hb) / d + ay];\n\n setEdgeEnd(rArc.edge, lSite, rSite, vertex);\n newArc.edge = createEdge(lSite, site, null, vertex);\n rArc.edge = createEdge(site, rSite, null, vertex);\n attachCircle(lArc);\n attachCircle(rArc);\n}\n\nfunction leftBreakPoint(arc, directrix) {\n var site = arc.site,\n rfocx = site[0],\n rfocy = site[1],\n pby2 = rfocy - directrix;\n\n if (!pby2) return rfocx;\n\n var lArc = arc.P;\n if (!lArc) return -Infinity;\n\n site = lArc.site;\n var lfocx = site[0],\n lfocy = site[1],\n plby2 = lfocy - directrix;\n\n if (!plby2) return lfocx;\n\n var hl = lfocx - rfocx,\n aby2 = 1 / pby2 - 1 / plby2,\n b = hl / plby2;\n\n if (aby2) return (-b + Math.sqrt(b * b - 2 * aby2 * (hl * hl / (-2 * plby2) - lfocy + plby2 / 2 + rfocy - pby2 / 2))) / aby2 + rfocx;\n\n return (rfocx + lfocx) / 2;\n}\n\nfunction rightBreakPoint(arc, directrix) {\n var rArc = arc.N;\n if (rArc) return leftBreakPoint(rArc, directrix);\n var site = arc.site;\n return site[1] === directrix ? site[0] : Infinity;\n}\n","import {addBeach, removeBeach} from \"./Beach\";\nimport {sortCellHalfedges, cellHalfedgeStart, clipCells} from \"./Cell\";\nimport {firstCircle} from \"./Circle\";\nimport {clipEdges} from \"./Edge\";\nimport RedBlackTree from \"./RedBlackTree\";\n\nexport var epsilon = 1e-6;\nexport var epsilon2 = 1e-12;\nexport var beaches;\nexport var cells;\nexport var circles;\nexport var edges;\n\nfunction triangleArea(a, b, c) {\n return (a[0] - c[0]) * (b[1] - a[1]) - (a[0] - b[0]) * (c[1] - a[1]);\n}\n\nfunction lexicographic(a, b) {\n return b[1] - a[1]\n || b[0] - a[0];\n}\n\nexport default function Diagram(sites, extent) {\n var site = sites.sort(lexicographic).pop(),\n x,\n y,\n circle;\n\n edges = [];\n cells = new Array(sites.length);\n beaches = new RedBlackTree;\n circles = new RedBlackTree;\n\n while (true) {\n circle = firstCircle;\n if (site && (!circle || site[1] < circle.y || (site[1] === circle.y && site[0] < circle.x))) {\n if (site[0] !== x || site[1] !== y) {\n addBeach(site);\n x = site[0], y = site[1];\n }\n site = sites.pop();\n } else if (circle) {\n removeBeach(circle.arc);\n } else {\n break;\n }\n }\n\n sortCellHalfedges();\n\n if (extent) {\n var x0 = +extent[0][0],\n y0 = +extent[0][1],\n x1 = +extent[1][0],\n y1 = +extent[1][1];\n clipEdges(x0, y0, x1, y1);\n clipCells(x0, y0, x1, y1);\n }\n\n this.edges = edges;\n this.cells = cells;\n\n beaches =\n circles =\n edges =\n cells = null;\n}\n\nDiagram.prototype = {\n constructor: Diagram,\n\n polygons: function() {\n var edges = this.edges;\n\n return this.cells.map(function(cell) {\n var polygon = cell.halfedges.map(function(i) { return cellHalfedgeStart(cell, edges[i]); });\n polygon.data = cell.site.data;\n return polygon;\n });\n },\n\n triangles: function() {\n var triangles = [],\n edges = this.edges;\n\n this.cells.forEach(function(cell, i) {\n if (!(m = (halfedges = cell.halfedges).length)) return;\n var site = cell.site,\n halfedges,\n j = -1,\n m,\n s0,\n e1 = edges[halfedges[m - 1]],\n s1 = e1.left === site ? e1.right : e1.left;\n\n while (++j < m) {\n s0 = s1;\n e1 = edges[halfedges[j]];\n s1 = e1.left === site ? e1.right : e1.left;\n if (s0 && s1 && i < s0.index && i < s1.index && triangleArea(site, s0, s1) < 0) {\n triangles.push([site.data, s0.data, s1.data]);\n }\n }\n });\n\n return triangles;\n },\n\n links: function() {\n return this.edges.filter(function(edge) {\n return edge.right;\n }).map(function(edge) {\n return {\n source: edge.left.data,\n target: edge.right.data\n };\n });\n },\n\n find: function(x, y, radius) {\n var that = this, i0, i1 = that._found || 0, n = that.cells.length, cell;\n\n // Use the previously-found cell, or start with an arbitrary one.\n while (!(cell = that.cells[i1])) if (++i1 >= n) return null;\n var dx = x - cell.site[0], dy = y - cell.site[1], d2 = dx * dx + dy * dy;\n\n // Traverse the half-edges to find a closer cell, if any.\n do {\n cell = that.cells[i0 = i1], i1 = null;\n cell.halfedges.forEach(function(e) {\n var edge = that.edges[e], v = edge.left;\n if ((v === cell.site || !v) && !(v = edge.right)) return;\n var vx = x - v[0], vy = y - v[1], v2 = vx * vx + vy * vy;\n if (v2 < d2) d2 = v2, i1 = v.index;\n });\n } while (i1 !== null);\n\n that._found = i0;\n\n return radius == null || d2 <= radius * radius ? cell.site : null;\n }\n}\n","import constant from \"./constant\";\nimport {x as pointX, y as pointY} from \"./point\";\nimport Diagram, {epsilon} from \"./Diagram\";\n\nexport default function() {\n var x = pointX,\n y = pointY,\n extent = null;\n\n function voronoi(data) {\n return new Diagram(data.map(function(d, i) {\n var s = [Math.round(x(d, i, data) / epsilon) * epsilon, Math.round(y(d, i, data) / epsilon) * epsilon];\n s.index = i;\n s.data = d;\n return s;\n }), extent);\n }\n\n voronoi.polygons = function(data) {\n return voronoi(data).polygons();\n };\n\n voronoi.links = function(data) {\n return voronoi(data).links();\n };\n\n voronoi.triangles = function(data) {\n return voronoi(data).triangles();\n };\n\n voronoi.x = function(_) {\n return arguments.length ? (x = typeof _ === \"function\" ? _ : constant(+_), voronoi) : x;\n };\n\n voronoi.y = function(_) {\n return arguments.length ? (y = typeof _ === \"function\" ? _ : constant(+_), voronoi) : y;\n };\n\n voronoi.extent = function(_) {\n return arguments.length ? (extent = _ == null ? null : [[+_[0][0], +_[0][1]], [+_[1][0], +_[1][1]]], voronoi) : extent && [[extent[0][0], extent[0][1]], [extent[1][0], extent[1][1]]];\n };\n\n voronoi.size = function(_) {\n return arguments.length ? (extent = _ == null ? null : [[0, 0], [+_[0], +_[1]]], voronoi) : extent && [extent[1][0] - extent[0][0], extent[1][1] - extent[0][1]];\n };\n\n return voronoi;\n}\n","/* global window, requestAnimationFrame, cancelAnimationFrame */\nimport { FieldType, DimensionSubtype } from 'datamodel';\nimport {\n axisLeft,\n axisRight,\n axisTop,\n axisBottom\n} from 'd3-axis';\nimport {\n symbolCircle,\n symbolCross,\n symbolDiamond,\n symbolSquare,\n symbolStar,\n symbolWye,\n symbolTriangle,\n symbol,\n stack as d3Stack,\n stackOffsetDiverging,\n stackOrderNone,\n stackOrderAscending,\n stackOrderDescending,\n stackOffsetNone,\n stackOffsetExpand,\n stackOffsetWiggle,\n pie,\n arc,\n line,\n curveLinear,\n curveStepAfter,\n curveStepBefore,\n curveStep,\n curveCatmullRom,\n area\n} from 'd3-shape';\nimport { scaleBand } from 'd3-scale';\nimport { nest } from 'd3-collection';\nimport {\n interpolate,\n interpolateRgb,\n piecewise,\n interpolateNumber,\n interpolateHslLong\n} from 'd3-interpolate';\nimport {\n easeCubic,\n easeBounce,\n easePoly,\n easeBack,\n easeCircle,\n easeLinear,\n easeElastic\n} from 'd3-ease';\nimport {\n color,\n rgb,\n hsl\n} from 'd3-color';\nimport { voronoi } from 'd3-voronoi';\nimport Model from 'hyperdis';\nimport * as STACK_CONFIG from './enums/stack-config';\n\nconst HTMLElement = window.HTMLElement;\n\nconst isSimpleObject = (obj) => {\n let token;\n if (typeof obj === 'object') {\n if (obj === null) { return false; }\n token = Object.prototype.toString.call(obj);\n if (token === '[object Object]') {\n return (obj.constructor.toString().match(/^function (.*)\\(\\)/m) || [])[1] === 'Object';\n }\n }\n return false;\n};\n\n/**\n * Returns unique id\n * @return {string} Unique id string\n */\nconst\n getUniqueId = () => `id-${new Date().getTime()}${Math.round(Math.random() * 10000)}`;\n\n/**\n * Deep copies an object and returns a new object.\n * @param {Object} o Object to clone\n * @return {Object} New Object.\n */\nconst clone = (o) => {\n const output = {};\n let v;\n for (const key in o) {\n if ({}.hasOwnProperty.call(o, key)) {\n v = o[key];\n output[key] = isSimpleObject(v) ? clone(v) : v;\n }\n }\n return output;\n};\n\n/**\n* Checks the existence of keys in an object\n* @param {Array} keys Set of keys which are to be checked\n* @param {Object} obj whose keys are checked from the set of keys provided\n* @return {Object} Error if the keys are absent, or the object itself\n*/\nconst checkExistence = (keys, obj) => {\n const nonExistentKeys = [];\n keys.forEach((key) => {\n if (key in obj) {\n return;\n }\n nonExistentKeys.push(key);\n });\n return nonExistentKeys;\n};\n\nconst sanitizeIP = {\n typeObj: (keys, obj) => {\n if (typeof obj !== 'object') {\n return Error('Argument type object expected');\n }\n\n const nonExistentKeys = checkExistence(keys, obj);\n if (nonExistentKeys.length) {\n return Error(`Missing keys from parameter ${nonExistentKeys.join(', ')}`);\n }\n return obj;\n },\n\n /* istanbul ignore next */ htmlElem: (elem) => {\n if (!(elem instanceof HTMLElement)) {\n return Error('HTMLElement required');\n }\n return elem;\n }\n};\n\n/**\n * Gets the maximum value from an array of objects for a given property name\n * @param {Array.} data Array of objects\n * @param {string} field Field name\n * @return {number} Maximum value\n */\nconst getMax = (data, field) => Math.max(...data.filter(d => !isNaN(d[field])).map(d => d[field]));\n\n/**\n * Gets the minimum value from an array of objects for a given property name\n * @param {Array.} data Array of objects\n * @param {string} field Field name\n * @return {number} Minimum value\n */\nconst getMin = (data, field) => Math.min(...data.filter(d => !isNaN(d[field])).map(d => d[field]));\n\n/**\n * Gets the domain from the data based on the field name and type of field\n * @param {Array. | Array.} data Data Array\n * @param {Array.} fields Array of fields from where the domain will be calculated\n * @param {string} fieldType Type of field - nominal, quantitiative, temporal.\n * @return {Array} Usually contains a min and max value if field is quantitative or\n * an array of values if field type is nominal or ordinal\n */\nconst getDomainFromData = (data, fields, fieldType) => {\n let domain;\n let domArr;\n data = data[0] instanceof Array ? data : [data];\n switch (fieldType) {\n case DimensionSubtype.CATEGORICAL:\n domain = [].concat(...data.map(arr => arr.map(d => d[fields[0]]).filter(d => d !== undefined)));\n break;\n default:\n domArr = data.map((arr) => {\n const firstMin = getMin(arr, fields[0]);\n const secondMin = getMin(arr, fields[1]);\n const firstMax = getMax(arr, fields[0]);\n const secondMax = getMax(arr, fields[1]);\n return [Math.min(firstMin, secondMin), Math.max(firstMax, secondMax)];\n });\n domain = [Math.min(...domArr.map(d => d[0])), Math.max(...domArr.map(d => d[1]))];\n break;\n }\n return domain;\n};\n\n/**\n * Union Domain values\n * @param {Array.} domains Array of domain values\n * @param {string} fieldType type of field - dimension,measure or datetime.\n * @return {Array} Unioned domain of all domain values.\n */\nconst unionDomain = (domains, fieldType) => {\n let domain;\n domains = domains.filter(dom => dom.length);\n if (fieldType === DimensionSubtype.CATEGORICAL) {\n domain = domain = [].concat(...domains);\n } else {\n domain = [Math.min(...domains.map(d => d[0])), Math.max(...domains.map(d => d[1]))];\n }\n\n return domain;\n};\n\nconst symbolFns = {\n circle: symbolCircle,\n cross: symbolCross,\n diamond: symbolDiamond,\n square: symbolSquare,\n star: symbolStar,\n wye: symbolWye,\n triangle: symbolTriangle\n};\n\nconst easeFns = {\n cubic: easeCubic,\n bounce: easeBounce,\n linear: easeLinear,\n elastic: easeElastic,\n back: easeBack,\n poly: easePoly,\n circle: easeCircle\n};\n\n/**\n * Returns the maximum or minimum points of a compare value from an array of objects.\n * @param {Array} points Array of objects\n * @param {string} compareValue Key in the object on which the comparing will be done.\n * @param {string} minOrMax minimum or maximum.\n * @return {Object} Minimum or maximum point.\n */\nconst getExtremePoint = (points, compareValue, minOrMax) => {\n let extremePoint;\n let point;\n const len = points.length;\n let minOrMaxVal = minOrMax === 'max' ? -Infinity : Infinity;\n let val;\n\n for (let i = 0; i < len; i++) {\n point = points[i];\n val = point[compareValue];\n if (minOrMax === 'min' ? val < minOrMaxVal : val > minOrMaxVal) {\n minOrMaxVal = val;\n extremePoint = point;\n }\n }\n\n return extremePoint;\n};\n\n/**\n * Returns the minimum point of a compare value from an array of objects.\n * @param {Array} points Array of objects\n * @param {string} compareValue Key in the object on which the comparing will be done.\n * @return {Object} Minimum point.\n */\nconst getMinPoint = (points, compareValue) => getExtremePoint(points, compareValue, 'min');\n\n/**\n * Returns the maximum point of a compare value from an array of objects.\n * @param {Array} points Array of objects\n * @param {string} compareValue Key in the object on which the comparing will be done.\n * @return {Object} Maximum point.\n */\nconst getMaxPoint = (points, compareValue) => getExtremePoint(points, compareValue, 'max');\n\n/**\n * Gets the index of the closest value of the given value from the array.\n * @param {Array} arr Array of values\n * @param {number} value Value from which the nearest value will be calculated.\n * @param {string} side side property.\n * @return {number} index of the closest value\n */\n/* istanbul ignore next */const getClosestIndexOf = (arr, value, side) => {\n let low = 0;\n const arrLen = arr.length;\n let high = arrLen - 1;\n\n let mid;\n let d1;\n let d2;\n\n while (low < high) {\n mid = Math.floor((low + high) / 2);\n d1 = Math.abs(arr[mid] - value);\n d2 = Math.abs(arr[mid + 1] - value);\n\n if (d2 <= d1) {\n low = mid + 1;\n } else {\n high = mid;\n }\n }\n\n if (!side) {\n return high;\n }\n\n const highVal = arr[high];\n if (highVal === value) {\n return high;\n } else if (highVal > value) {\n if (high === 0) { return high; }\n return side === 'left' ? high - 1 : high;\n }\n if (high === arr.length - 1) { return high; }\n return side === 'left' ? high : high + 1;\n};\n\n/**\n * Returns the browser window object\n * @return {Window} Window object\n*/\nconst getWindow = () => window;\n\n/**\n * Returns the browser window object\n * @return {Window} Window object\n*/\nconst reqAnimFrame = (() => requestAnimationFrame)();\n\nconst cancelAnimFrame = (() => cancelAnimationFrame)();\n\n/**\n * Capitalizes the first letter of the word\n * @param {string} text word\n * @return {string} Capitalized word\n */\nconst capitalizeFirst = (text) => {\n text = text.toLowerCase();\n\n return text.replace(/\\w\\S*/g, txt => txt.charAt(0).toUpperCase() + txt.substr(1));\n};\n\n/**\n *\n *\n * @param {*} arr\n */\nconst unique = arr => ([...new Set(arr)]);\n\n/**\n * Gets the minimum difference between two consecutive numbers in an array.\n * @param {Array} arr Array of numbers\n * @param {number} index index of the value\n * @return {number} minimum difference between values\n */\n/* istanbul ignore next */ const getMinDiff = (arr, index) => {\n let diff;\n let uniqueVals;\n if (index !== undefined) {\n uniqueVals = unique(arr.map(d => d[index]));\n } else {\n uniqueVals = unique(arr);\n }\n if (uniqueVals.length > 1) {\n diff = Math.abs(uniqueVals[1] - uniqueVals[0]);\n for (let i = 2, len = uniqueVals.length; i < len; i++) {\n diff = Math.min(diff, Math.abs(uniqueVals[i] - uniqueVals[i - 1]));\n }\n } else {\n diff = uniqueVals[0];\n }\n\n return diff;\n};\n\n/**\n * Returns the class name appended with a given id.\n * @param {string} cls class name\n * @param {string} id unique identifier\n * @param {string} prefix string needed to add before the classname\n * @return {string} qualified class name\n */\n/* istanbul ignore next */const getQualifiedClassName = (cls, id, prefix) => {\n cls = cls.replace(/^\\.*/, '');\n return [`${prefix}-${cls}`, `${prefix}-${cls}-${id}`];\n};\n\n/**\n * This method is used to set the default value for variables\n * without sullying the code with conditional statements.\n *\n * @export\n * @param {any} param The parameter to test.\n * @param {any} value The default value to assign.\n * @return {any} The value.\n */\n/* istanbul ignore next */ const defaultValue = (param, value) => {\n if (typeof param === 'undefined' || (typeof param === 'object' && !param)) {\n return value;\n }\n return param;\n};\n\n/**\n * DESCRIPTION TODO\n * @todo\n *\n * @export\n * @param {Object} graph graph whose dependency order has to be generated\n * @return {Object} @todo\n */\nconst getDependencyOrder = (graph) => {\n const dependencyOrder = [];\n const visited = {};\n const keys = Object.keys(graph);\n /**\n * DESCRIPTION TODO\n * @todo\n *\n * @export\n * @param {Object} name @todo\n * @return {Object} @todo\n */\n const visit = (name) => {\n if (dependencyOrder.length === keys.length) {\n return true;\n }\n visited[name] = true;\n const edges = graph[name];\n for (let e = 0; e < edges.length; e++) {\n const dep = edges[e];\n if (!visited[dep]) {\n visit(dep);\n }\n }\n\n dependencyOrder.push(name);\n return false;\n };\n\n for (let i = 0; i < keys.length; i++) {\n if (visit(keys[i], i)) break;\n }\n\n return dependencyOrder;\n};\n\n/**\n * Iterates over the properties of an object and applies the function\n *\n * @param {any} obj object to be iterated upon\n * @param {any} fn function to be applied on it\n */\nconst objectIterator = (obj, fn) => {\n for (const key in obj) {\n if (Object.hasOwnProperty.call(obj, key)) {\n fn(key, obj);\n }\n }\n};\n\n/**\n * This class creates a d3 voronoi for retrieving the nearest neighbour of any point from a set of two\n * dimensional points\n * @class Voronoi\n */\n/* istanbul ignore next */ class Voronoi {\n /**\n * Initialize the voronoi with the data given.\n * @param {Array.} data Array of points.\n */\n constructor (data) {\n this._voronoi = voronoi().x(d => d.x).y(d => d.y);\n this.data(data);\n }\n\n /**\n * Sets the data to voronoi\n * @param {Array.} data Array of objects.\n * @return {Voronoi} Instance of voronoi.\n */\n data (data) {\n if (data) {\n this._voronoiFn = this._voronoi(data);\n }\n return this;\n }\n\n /**\n * Finds the closest point to the x and y position given.\n * @param {number} x x value\n * @param {number} y y value\n * @param {number} radius search radius.\n * @return {Object} Details of the nearest point.\n */\n find (x, y, radius) {\n return this._voronoiFn.find(x, y, radius);\n }\n}\n\n/**\n * Methods to handle changes to table configuration and reactivity are handled by this\n * class.\n */\n/**\n * Common store class\n *\n * @class Store\n */\nclass Store {\n /**\n * Creates an instance of Store.\n * @param {Object} config The object to create the state store with.\n * @memberof Store\n */\n constructor (config) {\n // create reactive model\n this.model = Model.create(config);\n this._listeners = [];\n }\n\n /**\n * This method returns a plain JSON object\n * with all the fields in the state store.\n *\n * @return {Object} Serialized representation of state store.\n * @memberof Store\n */\n serialize () {\n return this.model.serialize();\n }\n\n /**\n * This method is used to update the value of a property in the state store.\n *\n * @param {string} propName The name of the property.\n * @param {number} value The new value of the property.\n * @memberof Store\n */\n commit (propName, value) {\n // check if appropriate enum has been used\n this.model.prop(propName, value);\n }\n\n /**\n * This method is used to register a callbacl that will execute\n * when one or more properties change.\n *\n * @param {string | Array} propNames name of property or array of props.\n * @param {Function} callBack The callback to execute.\n * @memberof Store\n */\n /* istanbul ignore next */registerChangeListener (propNames, callBack, instantCall) {\n let props = propNames;\n if (!Array.isArray(propNames)) {\n props = [propNames];\n }\n const fn = this.model.next(props, callBack, instantCall);\n this._listeners.push(fn);\n return this;\n }\n /**\n * This method is used to register a callbacl that will execute\n * when one or more properties change.\n *\n * @param {string | Array} propNames name of property or array of props.\n * @param {Function} callBack The callback to execute.\n * @memberof Store\n */\n /* istanbul ignore next */ registerImmediateListener (propNames, callBack, instantCall) {\n let props = propNames;\n if (!Array.isArray(propNames)) {\n props = [propNames];\n }\n const fn = this.model.on(props, callBack, instantCall);\n this._listeners.push(fn);\n return this;\n }\n /**\n * This method is used to get the name of the property\n * from the state store.\n *\n * @param {string} propName The name of the field in state store.\n * @return {any} The value of the field.\n * @memberof Store\n */\n get (propName) {\n return this.model.prop(propName);\n }\n\n /**\n * This method is used to register a computed property that is computed every time\n * the store value changes.\n *\n * @param {string} propName The name of the property to create.\n * @param {Function} callBack The function to execute when depemdent props change.\n * @memberof Store\n */\n computed (propName, callBack) {\n return this.model.calculatedProp(propName, callBack);\n }\n\n unsubscribeAll () {\n this._listeners.forEach(fn => fn());\n }\n}\n\n/**\n * Sanitize an input number / string mixed number. Currently dot in the no is not supported.\n *\n * @param {number | string} val pure number or string mixed number\n * @return {number | null} Number if it can be extracted. Otherwise null\n */\nconst intSanitizer = (val) => {\n const arr = val.toString().match(/(\\d+)(px)*/g);\n if (!arr) {\n // If only characters are passed\n return null;\n }\n\n return parseInt(arr[0], 10);\n};\n\n/**\n * Setter getter creator from config\n * Format\n * PROPERTRY_NAME: {\n * value: // default value of the property,\n * meta: {\n * typeCheck: // The setter value will be checked using this. If the value is function then the setter value\n * // is passed as args. (Optional)\n * typeExpected: // The output of typecheck action will be tested against this. Truthy value will set the\n * // value to the setter\n * sanitizaiton: // Need for sanitization before type is checked\n * }\n * }\n *\n * @param {Object} holder an empty object on which the getters and setters will be mounted\n * @param {Object} options options config based on which the getters and setters are determined.\n * @param {Hyperdis} model optional model to attach the property. If not sent new moel is created.\n * @return {Array} @todo\n */\nconst transactor = (holder, options, model) => {\n let conf;\n const store = model && model instanceof Model ? model : Model.create({});\n\n for (const prop in options) {\n if ({}.hasOwnProperty.call(options, prop)) {\n conf = options[prop];\n if (!store.prop(prop)) {\n store.append({ [prop]: conf.value });\n }\n holder[prop] = ((context, key, meta) => (...params) => {\n let val;\n let compareTo;\n const paramsLen = params.length;\n const prevVal = store.prop(prop);\n if (paramsLen) {\n // If parameters are passed then it's a setter\n const spreadParams = meta && meta.spreadParams;\n val = params;\n const values = [];\n if (meta) {\n for (let i = 0; i < paramsLen; i++) {\n val = params[i];\n const sanitization = meta.sanitization && (spreadParams ? meta.sanitization[i] :\n meta.sanitization);\n const typeCheck = meta.typeCheck && (spreadParams ? meta.typeCheck[i] : meta.typeCheck);\n if (sanitization && typeof sanitization === 'function') {\n // Sanitize if required\n val = sanitization(val, prevVal, holder);\n }\n\n if (typeCheck) {\n // Checking if a setter is valid\n if (typeof typeCheck === 'function') {\n let typeExpected = meta.typeExpected;\n if (typeExpected && spreadParams) {\n typeExpected = typeExpected[i];\n }\n if (typeExpected) {\n compareTo = typeExpected;\n } else {\n compareTo = true;\n }\n\n if (typeCheck(val) === compareTo) {\n values.push(val);\n }\n } else if (typeof typeCheck === 'string') {\n if (typeCheck === 'constructor') {\n const typeExpected = spreadParams ? meta.typeExpected[i] : meta.typeExpected;\n if (val && (val.constructor.name === typeExpected)) {\n values.push(val);\n }\n }\n } else {\n // context.prop(key, val);\n values.push(val);\n }\n } else {\n values.push(val);\n }\n }\n const preset = meta.preset;\n const oldValues = context.prop(key);\n preset && preset(values[0], holder);\n if (spreadParams) {\n oldValues.forEach((value, i) => {\n if (values[i] === undefined) {\n values[i] = value;\n }\n });\n }\n values.length && context.prop(key, spreadParams ? values : values[0]);\n } else {\n context.prop(key, spreadParams ? val : val[0]);\n }\n return holder;\n }\n // No parameters are passed hence its a getter\n return context.prop(key);\n })(store, prop, conf.meta);\n }\n }\n\n return [holder, store];\n};\n\n/**\n *\n *\n * @param {*} context\n * @param {*} props\n */\nconst generateGetterSetters = (context, props) => {\n Object.entries(props).forEach((propInfo) => {\n const prop = propInfo[0];\n const typeChecker = propInfo[1].typeChecker;\n const sanitization = propInfo[1].sanitization;\n const prototype = context.constructor.prototype;\n if (!(Object.hasOwnProperty.call(prototype, prop))) {\n context[prop] = (...params) => {\n if (params.length) {\n let value = params[0];\n if (sanitization) {\n value = sanitization(context, params[0]);\n }\n if (typeChecker && !typeChecker(value)) {\n return context[`_${prop}`];\n }\n context[`_${prop}`] = value;\n return context;\n } return context[`_${prop}`];\n };\n }\n });\n};\n\n/**\n *\n *\n * @param {*} arr\n * @param {*} prop\n */\nconst getArraySum = (arr, prop) => arr.reduce((total, elem) => {\n total += prop ? elem[prop] : elem;\n return total;\n}, 0);\n\n/**\n *\n *\n * @param {*} arr1\n * @param {*} arr2\n * @returns\n */\nconst arraysEqual = (arr1, arr2) => {\n if (arr1.length !== arr2.length) { return false; }\n for (let i = arr1.length; i >= 0; i--) {\n if (arr1[i] !== arr2[i]) { return false; }\n }\n\n return true;\n};\n\n/* eslint valid-typeof:0 */\n/**\n * Returns a validation function which can be used to validate variables against a type and value\n *\n * @param {any} type type of value that the object should have\n * @return {Object} validation function\n */\nconst isEqual = type => (oldVal, newVal) => {\n if (type === 'Array') {\n if (!oldVal) {\n return false;\n }\n return arraysEqual(oldVal, newVal);\n } else if (type === 'Object') {\n return Object.is(oldVal, newVal);\n } return oldVal === newVal;\n};\n\n/**\n * Description @todo\n *\n * @param {any} transactionModel @todo\n * @param {any} transactionEndpoint @todo\n * @param {any} transactionItems @todo\n * @return {any} @todo\n */\nconst enableChainedTransaction = (transactionModel, transactionEndpoint, transactionItems) =>\n transactionItems.forEach(item => transactionModel.on(item, ([, newVal]) => transactionEndpoint[item](newVal)));\n\n/**\n * Chceks if the element is istanceof HTMLElement\n *\n * @param {Object} elem any JS Object\n */\nconst isHTMLElem = elem => elem instanceof HTMLElement;\n\nconst ERROR_MSG = {\n INTERFACE_IMPL: 'Method not implemented'\n};\n\n/**\n * Merges the sink object in the source by recursively iterating through the object properties\n * @param {Object} source Source Object\n * @param {Object} sink Sink Object\n * @return {Object} Merged object\n */\nconst mergeRecursive = (source, sink) => {\n for (const prop in sink) {\n if (isSimpleObject(source[prop]) && isSimpleObject(sink[prop])) {\n mergeRecursive(source[prop], sink[prop]);\n } else if (sink[prop] instanceof Object && sink[prop].constructor === Object) {\n source[prop] = {};\n mergeRecursive(source[prop], sink[prop]);\n } else {\n source[prop] = sink[prop];\n }\n }\n return source;\n};\n\nconst interpolateArray = (data, fitCount) => {\n const linearInterpolate = function (before, after, atPoint) {\n return before + (after - before) * atPoint;\n };\n const newData = [];\n const springFactor = ((data.length - 1) / (fitCount - 1));\n newData[0] = data[0]; // for new allocation\n for (let i = 1; i < fitCount - 1; i++) {\n const tmp = i * springFactor;\n const before = (Math.floor(tmp)).toFixed();\n const after = (Math.ceil(tmp)).toFixed();\n const atPoint = tmp - before;\n newData[i] = linearInterpolate(data[before], data[after], atPoint);\n }\n newData[fitCount - 1] = data[data.length - 1]; // for new allocation\n return newData;\n};\n\n/**\n *\n *\n * @param {*} fn\n */\nconst nextFrame = (fn) => {\n setTimeout(() => {\n fn();\n }, 0);\n};\n\n/**\n *\n *\n * @param {*} angle\n */\nconst angleToRadian = angle => angle * Math.PI / 180;\n\n/**\n *\n *\n * @param {*} newName\n * @param {*} oldName\n */\nconst replaceCSSPrefix = () => {\n // @todo\n};\n\n/**\n * Gets the interpolator function from d3 color\n *\n */\nconst interpolator = () => interpolate;\n\n/**\n * Gets the number interpolator from d3 color\n *\n */\nconst numberInterpolator = () => interpolateNumber;\n\n/**\n * Gets the rgb interpolator from d3 color\n *\n */\nconst colorInterpolator = () => interpolateRgb;\n\n/**\n * Gets the hsl interpolator from d3 color\n *\n */\nconst hslInterpolator = () => interpolateHslLong;\n\nconst transformColors = () => ({\n color,\n rgb,\n hsl\n});\n\n/**\n * Gets the piecewise interpolator from d3 color\n *\n */\nconst piecewiseInterpolator = () => piecewise;\n\nfunction hue2rgb (p, q, t) {\n if (t < 0) t += 1;\n if (t > 1) t -= 1;\n if (t < 1 / 6) return p + (q - p) * 6 * t;\n if (t < 1 / 2) return q;\n if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n return p;\n}\n\n /**\n * Converts an HSL color value to RGB. Conversion formula\n * adapted from http://en.wikipedia.org/wiki/HSL_color_space.\n * Assumes h, s, and l are contained in the set [0, 1] and\n * returns r, g, and b in the set [0, 255].\n *\n * @param Number h The hue\n * @param Number s The saturation\n * @param Number l The lightness\n * @return Array The RGB representation\n */\nconst hslToRgb = (h, s, l, a = 1) => {\n let r;\n let g;\n let b;\n\n if (s === 0) {\n r = g = b = l; // achromatic\n } else {\n const q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n const p = 2 * l - q;\n\n r = hue2rgb(p, q, h + 1 / 3);\n g = hue2rgb(p, q, h);\n b = hue2rgb(p, q, h - 1 / 3);\n }\n\n return [r * 255, g * 255, b * 255, a];\n};\n\n /**\n * Converts an RGB color value to HSV. Conversion formula\n * adapted from http://en.wikipedia.org/wiki/HSV_color_space.\n * Assumes r, g, and b are contained in the set [0, 255] and\n * returns h, s, and v in the set [0, 1].\n *\n * @param Number r The red color value\n * @param Number g The green color value\n * @param Number b The blue color value\n * @return Array The HSV representation\n */\nconst rgbToHsv = (r, g, b, a = 1) => {\n r = +r; g = +g; b = +b; a = +a;\n r /= 255; g /= 255; b /= 255;\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n let h;\n let s;\n const l = (max + min) / 2;\n\n if (max === min) {\n h = s = 0; // achromatic\n } else {\n const d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n switch (max) {\n case r: h = (g - b) / d + (g < b ? 6 : 0); break;\n case g: h = (b - r) / d + 2; break;\n case b: h = (r - g) / d + 4; break;\n default: break;\n }\n h /= 6;\n }\n return [h, s, l, a];\n};\n\n /**\n * Converts an HSV color value to RGB. Conversion formula\n * adapted from http://en.wikipedia.org/wiki/HSV_color_space.\n * Assumes h, s, and v are contained in the set [0, 1] and\n * returns r, g, and b in the set [0, 255].\n *\n * @param Number h The hue\n * @param Number s The saturation\n * @param Number v The value\n * @return Array The RGB representation\n */\nconst hsvToRgb = (h, s, v, a = 1) => {\n let r;\n let g;\n let b;\n\n const i = Math.floor(h * 6);\n const f = h * 6 - i;\n const p = v * (1 - s);\n const q = v * (1 - f * s);\n const t = v * (1 - (1 - f) * s);\n\n switch (i % 6) {\n case 0: r = v; g = t; b = p; break;\n case 1: r = q; g = v; b = p; break;\n case 2: r = p; g = v; b = t; break;\n case 3: r = p; g = q; b = v; break;\n case 4: r = t; g = p; b = v; break;\n case 5: r = v; g = p; b = q; break;\n default: break;\n }\n\n return [r * 255, g * 255, b * 255, a];\n};\n\nconst hexToHsv = (hex) => {\n const result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\n\n const r = parseInt(result[1], 16);\n const g = parseInt(result[2], 16);\n const b = parseInt(result[3], 16);\n const a = result[4] ? parseInt(result[4], 16) : 1;\n return rgbToHsv(r, g, b, a);\n};\n\nconst detectColor = (col) => {\n const matchRgb = /rgb\\((\\d{1,3}), (\\d{1,3}), (\\d{1,3})\\)/;\n const matchHsl = /hsl\\((\\d+),\\s*([\\d.]+)%,\\s*([\\d.]+)%\\)/g;\n\n // Source : https://gist.github.com/sethlopezme/d072b945969a3cc2cc11\n // eslint-disable-next-line\n const matchRgba = /rgba?\\(((25[0-5]|2[0-4]\\d|1\\d{1,2}|\\d\\d?)\\s*,\\s*?){2}(25[0-5]|2[0-4]\\d|1\\d{1,2}|\\d\\d?)\\s*,?\\s*([01]\\.?\\d*?)?\\)/;\n // eslint-disable-next-line\n const matchHsla = /^hsla\\((0|360|35\\d|3[0-4]\\d|[12]\\d\\d|0?\\d?\\d),(0|100|\\d{1,2})%,(0|100|\\d{1,2})%,(0?\\.\\d|1(\\.0)?)\\)$/;\n const matchHex = /^#([0-9a-f]{3}){1,2}$/i;\n\n if (matchRgb.test(col) || matchRgba.test(col)) {\n return 'rgb';\n } else if (matchHsl.test(col) || matchHsla.test(col)) {\n return 'hsl';\n } else if (matchHex.test(col)) {\n return 'hex';\n } return col;\n};\n\n/**\n *\n *\n * @param {*} model\n * @param {*} propModel\n * @returns\n */\nconst filterPropagationModel = (model, propModel, measures) => {\n const { data, schema } = propModel.getData();\n let filteredModel;\n if (schema.length) {\n const fieldMap = model.getFieldsConfig();\n filteredModel = model.select((fields) => {\n const include = data.some(row => schema.every((propField, idx) => {\n if (!measures && (!(propField.name in fieldMap) ||\n fieldMap[propField.name].def.type === FieldType.MEASURE)) {\n return true;\n }\n return row[idx] === fields[propField.name].valueOf();\n }));\n return include;\n }, {\n saveChild: false\n });\n } else {\n filteredModel = propModel;\n }\n\n return filteredModel;\n};\n\nconst assembleModelFromIdentifiers = (model, identifiers) => {\n let schema = [];\n let data;\n const fieldMap = model.getFieldsConfig();\n if (identifiers.length) {\n const fields = identifiers[0];\n const len = fields.length;\n for (let i = 0; i < len; i++) {\n const field = fields[i];\n const fieldObj = fieldMap[field] && Object.assign({}, fieldMap[field].def);\n if (fieldObj) {\n schema.push(Object.assign(fieldObj));\n }\n }\n\n data = [];\n const header = identifiers[0];\n for (let i = 1; i < identifiers.length; i += 1) {\n const vals = identifiers[i];\n const temp = {};\n vals.forEach((fieldVal, cIdx) => {\n temp[header[cIdx]] = fieldVal;\n });\n data.push(temp);\n }\n } else {\n data = [];\n schema = [];\n }\n\n return new model.constructor(data, schema);\n};\n\n/**\n *\n *\n * @param {*} dataModel\n * @param {*} criteria\n * @returns\n */\nconst getDataModelFromRange = (dataModel, criteria, mode) => {\n if (criteria === null) {\n return null;\n }\n const selFields = Object.keys(criteria);\n const selFn = fields => selFields.every((field) => {\n const val = fields[field].value;\n const range = criteria[field][0] instanceof Array ? criteria[field][0] : criteria[field];\n if (typeof range[0] === 'string') {\n return range.find(d => d === val) !== undefined;\n }\n return range ? val >= range[0] && val <= range[1] : true;\n });\n\n return dataModel.select(selFn, {\n saveChild: false,\n mode\n });\n};\n\n/**\n *\n *\n * @param {*} dataModel\n * @param {*} identifiers\n * @returns\n */\nconst getDataModelFromIdentifiers = (dataModel, identifiers, mode) => {\n let filteredDataModel;\n if (identifiers instanceof Array) {\n const fieldsConfig = dataModel.getFieldsConfig();\n\n const dataArr = identifiers.slice(1, identifiers.length);\n if (identifiers instanceof Function) {\n filteredDataModel = identifiers(dataModel, {}, false);\n } else if (identifiers instanceof Array && identifiers[0].length) {\n const filteredSchema = identifiers[0].filter(d => d in fieldsConfig);\n filteredDataModel = dataModel.select((fields) => {\n let include = true;\n filteredSchema.forEach((propField, idx) => {\n const value = fields[propField].valueOf();\n const index = dataArr.findIndex(d => d[idx] === value);\n include = include && index !== -1;\n });\n return include;\n }, {\n saveChild: false,\n mode\n });\n }\n } else {\n filteredDataModel = getDataModelFromRange(dataModel, identifiers, mode);\n }\n return filteredDataModel;\n};\n\n/**\n *\n *\n * @param {*} context\n * @param {*} listenerMap\n */\nconst registerListeners = (context, listenerMap) => {\n const propListenerMap = listenerMap(context);\n for (const key in propListenerMap) {\n if ({}.hasOwnProperty.call(propListenerMap, key)) {\n const mapObj = propListenerMap[key];\n const propType = mapObj.type;\n const props = mapObj.props;\n const listenerFn = mapObj.listener;\n context.store()[propType](props, listenerFn);\n }\n }\n};\n\nconst isValidValue = value => !isNaN(value) && value !== -Infinity && value !== Infinity;\n/**\n *\n *\n * @param {*} obj\n * @param {*} fields\n * @returns\n */\nconst getObjProp = (obj, ...fields) => {\n if (obj === undefined || obj === null) {\n return obj;\n }\n let retObj = obj;\n for (let i = 0, len = fields.length; i < len; i++) {\n retObj = retObj[fields[i]];\n if (retObj === undefined || retObj === null) {\n break;\n }\n }\n return retObj;\n};\n\n/**\n *\n *\n * @param {*} str\n * @returns\n */\nconst escapeHTML = (str) => {\n const htmlEscapes = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": ''',\n '/': '/'\n };\n const htmlEscaper = /[&<>\"'/]/g;\n return (`${str}`).replace(htmlEscaper, match => htmlEscapes[match]);\n};\n\n/**\n *\n *\n * @param {*} arr\n */\nconst transposeArray = arr => arr[0].map((col, i) => arr.map(row => row[i]));\nconst toArray = arr => (arr instanceof Array ? arr : [arr]);\nconst extendsClass = (cls, extendsFrom, found) => {\n if (!cls) {\n return false;\n }\n const prototype = cls.prototype;\n if (prototype instanceof extendsFrom) {\n found = true;\n } else {\n found = extendsClass(prototype, extendsFrom, found);\n }\n return found;\n};\n\n/**\n *\n * @param {*} dm1\n * @param {*} dm2\n */\nconst concatModels = (dm1, dm2) => {\n const dataObj1 = dm1.getData();\n const dataObj2 = dm2.getData();\n const data1 = dataObj1.data;\n const data2 = dataObj2.data;\n const schema1 = dataObj1.schema;\n const schema2 = dataObj2.schema;\n const tuples1 = {};\n const tuples2 = {};\n const commonTuples = {};\n for (let i = 0; i < data1.length; i++) {\n for (let ii = 0; ii < data2.length; ii++) {\n const row1 = data1[i];\n const row2 = data2[ii];\n const dim1Values = row1.filter((d, idx) => schema1[idx].type === FieldType.DIMENSION);\n const dim2Values = row2.filter((d, idx) => schema2[idx].type === FieldType.DIMENSION);\n const allDimSame = dim1Values.every(value => dim2Values.indexOf(value) !== -1);\n if (allDimSame) {\n const key = dim1Values.join();\n !commonTuples[key] && (commonTuples[key] = {});\n row1.forEach((value, idx) => {\n commonTuples[key][schema1[idx].name] = value;\n });\n row2.forEach((value, idx) => {\n commonTuples[key][schema2[idx].name] = value;\n });\n } else {\n const dm1Key = dim1Values.join();\n const dm2Key = dim2Values.join();\n if (!commonTuples[dm1Key] && !commonTuples[dm2Key]) {\n !tuples1[dm1Key] && (tuples1[dm1Key] = {});\n !tuples2[dm2Key] && (tuples2[dm2Key] = {});\n row1.forEach((value, idx) => {\n tuples1[dm1Key][schema1[idx].name] = value;\n });\n row2.forEach((value, idx) => {\n tuples2[dm2Key][schema2[idx].name] = value;\n });\n }\n }\n }\n }\n\n const commonSchema = [...schema1, ...schema2.filter(s2 => schema1.findIndex(s1 => s1.name === s2.name) === -1)];\n const data = [...Object.values(tuples1), ...Object.values(tuples2), ...Object.values(commonTuples)];\n return [data, commonSchema];\n};\n\nconst getSymbol = type => symbol().type(symbolFns[type]);\n\nconst stackOrders = {\n [STACK_CONFIG.ORDER_NONE]: stackOrderNone,\n [STACK_CONFIG.ORDER_ASCENDING]: stackOrderAscending,\n [STACK_CONFIG.ORDER_DESCENDING]: stackOrderDescending\n};\nconst stackOffsets = {\n [STACK_CONFIG.OFFSET_DIVERGING]: stackOffsetDiverging,\n [STACK_CONFIG.OFFSET_NONE]: stackOffsetNone,\n [STACK_CONFIG.OFFSET_EXPAND]: stackOffsetExpand,\n [STACK_CONFIG.OFFSET_WIGGLE]: stackOffsetWiggle\n};\n\n// eslint-disable-next-line require-jsdoc\nconst stack = params => d3Stack().keys(params.keys).offset(stackOffsets[params.offset])\n .order(stackOrders[params.order])(params.data);\n\n/**\n * Groups the data into a hierarchical tree structure based on one or more fields.\n * @param { Object } params Configuration properties for nesting data\n * @param { Array. } params.data Data which needs to be grouped\n * @param { Array. } params.keys Field indices by which the data will be grouped\n * @return { Array. } Grouped data array\n */\nconst nestCollection = (params) => {\n const nestFn = nest();\n params.keys.forEach(key => nestFn.key(d => d[key]));\n return nestFn.entries(params.data);\n};\n\nconst pathInterpolators = {\n curveLinear,\n curveStepAfter,\n curveStepBefore,\n curveStep,\n curveCatmullRom,\n stepAfter: curveStepAfter,\n catmullRom: curveCatmullRom,\n step: curveStep,\n stepBefore: curveStepBefore,\n linear: curveLinear\n};\n\nconst Symbols = {\n axisLeft,\n axisRight,\n axisTop,\n axisBottom,\n line,\n area,\n pie,\n arc,\n nest\n};\n\nconst Scales = {\n band: scaleBand\n};\n\nconst getSmallestDiff = (points) => {\n points = points.sort((a, b) => a - b);\n let minDiff = points[1] - points[0];\n for (let i = 2; i < points.length; i++) {\n minDiff = Math.min(minDiff, points[i] - points[i - 1]);\n }\n\n return minDiff;\n};\n\nconst require = (lookupWhat, lookupDetails) => ({\n resolvable: (store) => {\n const lookupTarget = store[lookupWhat];\n const depArr = lookupDetails.slice(0, lookupDetails.length - 1);\n const fn = lookupDetails[lookupDetails.length - 1]; // fn\n\n const deps = depArr.map(str => lookupTarget[str]);\n return {\n fn: fn(...deps),\n depArr\n };\n }\n});\n\nconst nextAnimFrame = window.requestAnimationFrame || window.webkitRequestAnimationFrame ||\n window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame ||\n function (callback) {\n setTimeout(callback, 16);\n };\n\nexport {\n require,\n Scales,\n Symbols,\n pathInterpolators,\n stack,\n nestCollection,\n getSymbol,\n transformColors,\n detectColor,\n hexToHsv,\n hslToRgb,\n rgbToHsv,\n hsvToRgb,\n concatModels,\n toArray,\n angleToRadian,\n escapeHTML,\n generateGetterSetters,\n getArraySum,\n interpolator,\n piecewiseInterpolator,\n getDataModelFromIdentifiers,\n getDataModelFromRange,\n colorInterpolator,\n numberInterpolator,\n ERROR_MSG,\n reqAnimFrame,\n nextAnimFrame,\n filterPropagationModel,\n transposeArray,\n cancelAnimFrame,\n getMax,\n getMin,\n getDomainFromData,\n getUniqueId,\n mergeRecursive,\n unionDomain,\n symbolFns,\n easeFns,\n clone,\n isEqual,\n interpolateArray,\n getMinPoint,\n defaultValue,\n getMaxPoint,\n getClosestIndexOf,\n Voronoi,\n checkExistence,\n sanitizeIP,\n getMinDiff,\n capitalizeFirst,\n getWindow,\n getQualifiedClassName,\n Store,\n getDependencyOrder,\n objectIterator,\n intSanitizer,\n transactor,\n enableChainedTransaction,\n isHTMLElem,\n isSimpleObject,\n nextFrame,\n registerListeners,\n replaceCSSPrefix,\n getObjProp,\n extendsClass,\n assembleModelFromIdentifiers,\n isValidValue,\n hslInterpolator,\n getSmallestDiff\n};\n","export function linear(t) {\n return +t;\n}\n","export function circleIn(t) {\n return 1 - Math.sqrt(1 - t * t);\n}\n\nexport function circleOut(t) {\n return Math.sqrt(1 - --t * t);\n}\n\nexport function circleInOut(t) {\n return ((t *= 2) <= 1 ? 1 - Math.sqrt(1 - t * t) : Math.sqrt(1 - (t -= 2) * t) + 1) / 2;\n}\n","import {path} from \"d3-path\";\nimport circle from \"./symbol/circle\";\nimport cross from \"./symbol/cross\";\nimport diamond from \"./symbol/diamond\";\nimport star from \"./symbol/star\";\nimport square from \"./symbol/square\";\nimport triangle from \"./symbol/triangle\";\nimport wye from \"./symbol/wye\";\nimport constant from \"./constant\";\n\nexport var symbols = [\n circle,\n cross,\n diamond,\n square,\n star,\n triangle,\n wye\n];\n\nexport default function() {\n var type = constant(circle),\n size = constant(64),\n context = null;\n\n function symbol() {\n var buffer;\n if (!context) context = buffer = path();\n type.apply(this, arguments).draw(context, +size.apply(this, arguments));\n if (buffer) return context = null, buffer + \"\" || null;\n }\n\n symbol.type = function(_) {\n return arguments.length ? (type = typeof _ === \"function\" ? _ : constant(_), symbol) : type;\n };\n\n symbol.size = function(_) {\n return arguments.length ? (size = typeof _ === \"function\" ? _ : constant(+_), symbol) : size;\n };\n\n symbol.context = function(_) {\n return arguments.length ? (context = _ == null ? null : _, symbol) : context;\n };\n\n return symbol;\n}\n","export const ORDER_ASCENDING = 'ascending';\nexport const ORDER_DESCENDING = 'descending';\nexport const ORDER_NONE = 'none';\nexport const OFFSET_DIVERGING = 'diverging';\nexport const OFFSET_NONE = 'none';\nexport const OFFSET_EXPAND = 'expand';\nexport const OFFSET_WIGGLE = 'wiggle';\n","import ascending from \"./ascending\";\n\nexport default function(series) {\n return ascending(series).reverse();\n}\n","export default function(series, order) {\n if (!((n = series.length) > 1)) return;\n for (var i, j = 0, d, dy, yp, yn, n, m = series[order[0]].length; j < m; ++j) {\n for (yp = yn = 0, i = 0; i < n; ++i) {\n if ((dy = (d = series[order[i]][j])[1] - d[0]) >= 0) {\n d[0] = yp, d[1] = yp += dy;\n } else if (dy < 0) {\n d[1] = yn, d[0] = yn += dy;\n } else {\n d[0] = yp;\n }\n }\n }\n}\n","import none from \"./none\";\n\nexport default function(series, order) {\n if (!((n = series.length) > 0)) return;\n for (var i, n, j = 0, m = series[0].length, y; j < m; ++j) {\n for (y = i = 0; i < n; ++i) y += series[i][j][1] || 0;\n if (y) for (i = 0; i < n; ++i) series[i][j][1] /= y;\n }\n none(series, order);\n}\n","import none from \"./none\";\n\nexport default function(series, order) {\n if (!((n = series.length) > 0) || !((m = (s0 = series[order[0]]).length) > 0)) return;\n for (var y = 0, j = 1, s0, m, n; j < m; ++j) {\n for (var i = 0, s1 = 0, s2 = 0; i < n; ++i) {\n var si = series[order[i]],\n sij0 = si[j][1] || 0,\n sij1 = si[j - 1][1] || 0,\n s3 = (sij0 - sij1) / 2;\n for (var k = 0; k < i; ++k) {\n var sk = series[order[k]],\n skj0 = sk[j][1] || 0,\n skj1 = sk[j - 1][1] || 0;\n s3 += skj0 - skj1;\n }\n s1 += sij0, s2 += s3 * sij0;\n }\n s0[j - 1][1] += s0[j - 1][0] = y;\n if (s1) y -= s2 / s1;\n }\n s0[j - 1][1] += s0[j - 1][0] = y;\n none(series, order);\n}\n","import constant from \"./constant\";\nimport descending from \"./descending\";\nimport identity from \"./identity\";\nimport {tau} from \"./math\";\n\nexport default function() {\n var value = identity,\n sortValues = descending,\n sort = null,\n startAngle = constant(0),\n endAngle = constant(tau),\n padAngle = constant(0);\n\n function pie(data) {\n var i,\n n = data.length,\n j,\n k,\n sum = 0,\n index = new Array(n),\n arcs = new Array(n),\n a0 = +startAngle.apply(this, arguments),\n da = Math.min(tau, Math.max(-tau, endAngle.apply(this, arguments) - a0)),\n a1,\n p = Math.min(Math.abs(da) / n, padAngle.apply(this, arguments)),\n pa = p * (da < 0 ? -1 : 1),\n v;\n\n for (i = 0; i < n; ++i) {\n if ((v = arcs[index[i] = i] = +value(data[i], i, data)) > 0) {\n sum += v;\n }\n }\n\n // Optionally sort the arcs by previously-computed values or by data.\n if (sortValues != null) index.sort(function(i, j) { return sortValues(arcs[i], arcs[j]); });\n else if (sort != null) index.sort(function(i, j) { return sort(data[i], data[j]); });\n\n // Compute the arcs! They are stored in the original data's order.\n for (i = 0, k = sum ? (da - n * pa) / sum : 0; i < n; ++i, a0 = a1) {\n j = index[i], v = arcs[j], a1 = a0 + (v > 0 ? v * k : 0) + pa, arcs[j] = {\n data: data[j],\n index: i,\n value: v,\n startAngle: a0,\n endAngle: a1,\n padAngle: p\n };\n }\n\n return arcs;\n }\n\n pie.value = function(_) {\n return arguments.length ? (value = typeof _ === \"function\" ? _ : constant(+_), pie) : value;\n };\n\n pie.sortValues = function(_) {\n return arguments.length ? (sortValues = _, sort = null, pie) : sortValues;\n };\n\n pie.sort = function(_) {\n return arguments.length ? (sort = _, sortValues = null, pie) : sort;\n };\n\n pie.startAngle = function(_) {\n return arguments.length ? (startAngle = typeof _ === \"function\" ? _ : constant(+_), pie) : startAngle;\n };\n\n pie.endAngle = function(_) {\n return arguments.length ? (endAngle = typeof _ === \"function\" ? _ : constant(+_), pie) : endAngle;\n };\n\n pie.padAngle = function(_) {\n return arguments.length ? (padAngle = typeof _ === \"function\" ? _ : constant(+_), pie) : padAngle;\n };\n\n return pie;\n}\n","export var xhtml = \"http://www.w3.org/1999/xhtml\";\n\nexport default {\n svg: \"http://www.w3.org/2000/svg\",\n xhtml: xhtml,\n xlink: \"http://www.w3.org/1999/xlink\",\n xml: \"http://www.w3.org/XML/1998/namespace\",\n xmlns: \"http://www.w3.org/2000/xmlns/\"\n};\n","import namespaces from \"./namespaces\";\n\nexport default function(name) {\n var prefix = name += \"\", i = prefix.indexOf(\":\");\n if (i >= 0 && (prefix = name.slice(0, i)) !== \"xmlns\") name = name.slice(i + 1);\n return namespaces.hasOwnProperty(prefix) ? {space: namespaces[prefix], local: name} : name;\n}\n","import namespace from \"./namespace\";\nimport {xhtml} from \"./namespaces\";\n\nfunction creatorInherit(name) {\n return function() {\n var document = this.ownerDocument,\n uri = this.namespaceURI;\n return uri === xhtml && document.documentElement.namespaceURI === xhtml\n ? document.createElement(name)\n : document.createElementNS(uri, name);\n };\n}\n\nfunction creatorFixed(fullname) {\n return function() {\n return this.ownerDocument.createElementNS(fullname.space, fullname.local);\n };\n}\n\nexport default function(name) {\n var fullname = namespace(name);\n return (fullname.local\n ? creatorFixed\n : creatorInherit)(fullname);\n}\n","function none() {}\n\nexport default function(selector) {\n return selector == null ? none : function() {\n return this.querySelector(selector);\n };\n}\n","function empty() {\n return [];\n}\n\nexport default function(selector) {\n return selector == null ? empty : function() {\n return this.querySelectorAll(selector);\n };\n}\n","var matcher = function(selector) {\n return function() {\n return this.matches(selector);\n };\n};\n\nif (typeof document !== \"undefined\") {\n var element = document.documentElement;\n if (!element.matches) {\n var vendorMatches = element.webkitMatchesSelector\n || element.msMatchesSelector\n || element.mozMatchesSelector\n || element.oMatchesSelector;\n matcher = function(selector) {\n return function() {\n return vendorMatches.call(this, selector);\n };\n };\n }\n}\n\nexport default matcher;\n","export default function(update) {\n return new Array(update.length);\n}\n","import sparse from \"./sparse\";\nimport {Selection} from \"./index\";\n\nexport default function() {\n return new Selection(this._enter || this._groups.map(sparse), this._parents);\n}\n\nexport function EnterNode(parent, datum) {\n this.ownerDocument = parent.ownerDocument;\n this.namespaceURI = parent.namespaceURI;\n this._next = null;\n this._parent = parent;\n this.__data__ = datum;\n}\n\nEnterNode.prototype = {\n constructor: EnterNode,\n appendChild: function(child) { return this._parent.insertBefore(child, this._next); },\n insertBefore: function(child, next) { return this._parent.insertBefore(child, next); },\n querySelector: function(selector) { return this._parent.querySelector(selector); },\n querySelectorAll: function(selector) { return this._parent.querySelectorAll(selector); }\n};\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","import {Selection} from \"./index\";\nimport {EnterNode} from \"./enter\";\nimport constant from \"../constant\";\n\nvar keyPrefix = \"$\"; // Protect against keys like “__proto__”.\n\nfunction bindIndex(parent, group, enter, update, exit, data) {\n var i = 0,\n node,\n groupLength = group.length,\n dataLength = data.length;\n\n // Put any non-null nodes that fit into update.\n // Put any null nodes into enter.\n // Put any remaining data into enter.\n for (; i < dataLength; ++i) {\n if (node = group[i]) {\n node.__data__ = data[i];\n update[i] = node;\n } else {\n enter[i] = new EnterNode(parent, data[i]);\n }\n }\n\n // Put any non-null nodes that don’t fit into exit.\n for (; i < groupLength; ++i) {\n if (node = group[i]) {\n exit[i] = node;\n }\n }\n}\n\nfunction bindKey(parent, group, enter, update, exit, data, key) {\n var i,\n node,\n nodeByKeyValue = {},\n groupLength = group.length,\n dataLength = data.length,\n keyValues = new Array(groupLength),\n keyValue;\n\n // Compute the key for each node.\n // If multiple nodes have the same key, the duplicates are added to exit.\n for (i = 0; i < groupLength; ++i) {\n if (node = group[i]) {\n keyValues[i] = keyValue = keyPrefix + key.call(node, node.__data__, i, group);\n if (keyValue in nodeByKeyValue) {\n exit[i] = node;\n } else {\n nodeByKeyValue[keyValue] = node;\n }\n }\n }\n\n // Compute the key for each datum.\n // If there a node associated with this key, join and add it to update.\n // If there is not (or the key is a duplicate), add it to enter.\n for (i = 0; i < dataLength; ++i) {\n keyValue = keyPrefix + key.call(parent, data[i], i, data);\n if (node = nodeByKeyValue[keyValue]) {\n update[i] = node;\n node.__data__ = data[i];\n nodeByKeyValue[keyValue] = null;\n } else {\n enter[i] = new EnterNode(parent, data[i]);\n }\n }\n\n // Add any remaining nodes that were not bound to data to exit.\n for (i = 0; i < groupLength; ++i) {\n if ((node = group[i]) && (nodeByKeyValue[keyValues[i]] === node)) {\n exit[i] = node;\n }\n }\n}\n\nexport default function(value, key) {\n if (!value) {\n data = new Array(this.size()), j = -1;\n this.each(function(d) { data[++j] = d; });\n return data;\n }\n\n var bind = key ? bindKey : bindIndex,\n parents = this._parents,\n groups = this._groups;\n\n if (typeof value !== \"function\") value = constant(value);\n\n for (var m = groups.length, update = new Array(m), enter = new Array(m), exit = new Array(m), j = 0; j < m; ++j) {\n var parent = parents[j],\n group = groups[j],\n groupLength = group.length,\n data = value.call(parent, parent && parent.__data__, j, parents),\n dataLength = data.length,\n enterGroup = enter[j] = new Array(dataLength),\n updateGroup = update[j] = new Array(dataLength),\n exitGroup = exit[j] = new Array(groupLength);\n\n bind(parent, group, enterGroup, updateGroup, exitGroup, data, key);\n\n // Now connect the enter nodes to their following update node, such that\n // appendChild can insert the materialized enter node before this node,\n // rather than at the end of the parent node.\n for (var i0 = 0, i1 = 0, previous, next; i0 < dataLength; ++i0) {\n if (previous = enterGroup[i0]) {\n if (i0 >= i1) i1 = i0 + 1;\n while (!(next = updateGroup[i1]) && ++i1 < dataLength);\n previous._next = next || null;\n }\n }\n }\n\n update = new Selection(update, parents);\n update._enter = enter;\n update._exit = exit;\n return update;\n}\n","import {Selection} from \"./index\";\n\nexport default function(compare) {\n if (!compare) compare = ascending;\n\n function compareNode(a, b) {\n return a && b ? compare(a.__data__, b.__data__) : !a - !b;\n }\n\n for (var groups = this._groups, m = groups.length, sortgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, sortgroup = sortgroups[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n sortgroup[i] = node;\n }\n }\n sortgroup.sort(compareNode);\n }\n\n return new Selection(sortgroups, this._parents).order();\n}\n\nfunction ascending(a, b) {\n return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","import namespace from \"../namespace\";\n\nfunction attrRemove(name) {\n return function() {\n this.removeAttribute(name);\n };\n}\n\nfunction attrRemoveNS(fullname) {\n return function() {\n this.removeAttributeNS(fullname.space, fullname.local);\n };\n}\n\nfunction attrConstant(name, value) {\n return function() {\n this.setAttribute(name, value);\n };\n}\n\nfunction attrConstantNS(fullname, value) {\n return function() {\n this.setAttributeNS(fullname.space, fullname.local, value);\n };\n}\n\nfunction attrFunction(name, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.removeAttribute(name);\n else this.setAttribute(name, v);\n };\n}\n\nfunction attrFunctionNS(fullname, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.removeAttributeNS(fullname.space, fullname.local);\n else this.setAttributeNS(fullname.space, fullname.local, v);\n };\n}\n\nexport default function(name, value) {\n var fullname = namespace(name);\n\n if (arguments.length < 2) {\n var node = this.node();\n return fullname.local\n ? node.getAttributeNS(fullname.space, fullname.local)\n : node.getAttribute(fullname);\n }\n\n return this.each((value == null\n ? (fullname.local ? attrRemoveNS : attrRemove) : (typeof value === \"function\"\n ? (fullname.local ? attrFunctionNS : attrFunction)\n : (fullname.local ? attrConstantNS : attrConstant)))(fullname, value));\n}\n","export default function(node) {\n return (node.ownerDocument && node.ownerDocument.defaultView) // node is a Node\n || (node.document && node) // node is a Window\n || node.defaultView; // node is a Document\n}\n","import defaultView from \"../window\";\n\nfunction styleRemove(name) {\n return function() {\n this.style.removeProperty(name);\n };\n}\n\nfunction styleConstant(name, value, priority) {\n return function() {\n this.style.setProperty(name, value, priority);\n };\n}\n\nfunction styleFunction(name, value, priority) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.style.removeProperty(name);\n else this.style.setProperty(name, v, priority);\n };\n}\n\nexport default function(name, value, priority) {\n return arguments.length > 1\n ? this.each((value == null\n ? styleRemove : typeof value === \"function\"\n ? styleFunction\n : styleConstant)(name, value, priority == null ? \"\" : priority))\n : styleValue(this.node(), name);\n}\n\nexport function styleValue(node, name) {\n return node.style.getPropertyValue(name)\n || defaultView(node).getComputedStyle(node, null).getPropertyValue(name);\n}\n","function classArray(string) {\n return string.trim().split(/^|\\s+/);\n}\n\nfunction classList(node) {\n return node.classList || new ClassList(node);\n}\n\nfunction ClassList(node) {\n this._node = node;\n this._names = classArray(node.getAttribute(\"class\") || \"\");\n}\n\nClassList.prototype = {\n add: function(name) {\n var i = this._names.indexOf(name);\n if (i < 0) {\n this._names.push(name);\n this._node.setAttribute(\"class\", this._names.join(\" \"));\n }\n },\n remove: function(name) {\n var i = this._names.indexOf(name);\n if (i >= 0) {\n this._names.splice(i, 1);\n this._node.setAttribute(\"class\", this._names.join(\" \"));\n }\n },\n contains: function(name) {\n return this._names.indexOf(name) >= 0;\n }\n};\n\nfunction classedAdd(node, names) {\n var list = classList(node), i = -1, n = names.length;\n while (++i < n) list.add(names[i]);\n}\n\nfunction classedRemove(node, names) {\n var list = classList(node), i = -1, n = names.length;\n while (++i < n) list.remove(names[i]);\n}\n\nfunction classedTrue(names) {\n return function() {\n classedAdd(this, names);\n };\n}\n\nfunction classedFalse(names) {\n return function() {\n classedRemove(this, names);\n };\n}\n\nfunction classedFunction(names, value) {\n return function() {\n (value.apply(this, arguments) ? classedAdd : classedRemove)(this, names);\n };\n}\n\nexport default function(name, value) {\n var names = classArray(name + \"\");\n\n if (arguments.length < 2) {\n var list = classList(this.node()), i = -1, n = names.length;\n while (++i < n) if (!list.contains(names[i])) return false;\n return true;\n }\n\n return this.each((typeof value === \"function\"\n ? classedFunction : value\n ? classedTrue\n : classedFalse)(names, value));\n}\n","function textRemove() {\n this.textContent = \"\";\n}\n\nfunction textConstant(value) {\n return function() {\n this.textContent = value;\n };\n}\n\nfunction textFunction(value) {\n return function() {\n var v = value.apply(this, arguments);\n this.textContent = v == null ? \"\" : v;\n };\n}\n\nexport default function(value) {\n return arguments.length\n ? this.each(value == null\n ? textRemove : (typeof value === \"function\"\n ? textFunction\n : textConstant)(value))\n : this.node().textContent;\n}\n","function htmlRemove() {\n this.innerHTML = \"\";\n}\n\nfunction htmlConstant(value) {\n return function() {\n this.innerHTML = value;\n };\n}\n\nfunction htmlFunction(value) {\n return function() {\n var v = value.apply(this, arguments);\n this.innerHTML = v == null ? \"\" : v;\n };\n}\n\nexport default function(value) {\n return arguments.length\n ? this.each(value == null\n ? htmlRemove : (typeof value === \"function\"\n ? htmlFunction\n : htmlConstant)(value))\n : this.node().innerHTML;\n}\n","function raise() {\n if (this.nextSibling) this.parentNode.appendChild(this);\n}\n\nexport default function() {\n return this.each(raise);\n}\n","function lower() {\n if (this.previousSibling) this.parentNode.insertBefore(this, this.parentNode.firstChild);\n}\n\nexport default function() {\n return this.each(lower);\n}\n","import creator from \"../creator\";\nimport selector from \"../selector\";\n\nfunction constantNull() {\n return null;\n}\n\nexport default function(name, before) {\n var create = typeof name === \"function\" ? name : creator(name),\n select = before == null ? constantNull : typeof before === \"function\" ? before : selector(before);\n return this.select(function() {\n return this.insertBefore(create.apply(this, arguments), select.apply(this, arguments) || null);\n });\n}\n","function remove() {\n var parent = this.parentNode;\n if (parent) parent.removeChild(this);\n}\n\nexport default function() {\n return this.each(remove);\n}\n","function selection_cloneShallow() {\n return this.parentNode.insertBefore(this.cloneNode(false), this.nextSibling);\n}\n\nfunction selection_cloneDeep() {\n return this.parentNode.insertBefore(this.cloneNode(true), this.nextSibling);\n}\n\nexport default function(deep) {\n return this.select(deep ? selection_cloneDeep : selection_cloneShallow);\n}\n","var filterEvents = {};\n\nexport var event = null;\n\nif (typeof document !== \"undefined\") {\n var element = document.documentElement;\n if (!(\"onmouseenter\" in element)) {\n filterEvents = {mouseenter: \"mouseover\", mouseleave: \"mouseout\"};\n }\n}\n\nfunction filterContextListener(listener, index, group) {\n listener = contextListener(listener, index, group);\n return function(event) {\n var related = event.relatedTarget;\n if (!related || (related !== this && !(related.compareDocumentPosition(this) & 8))) {\n listener.call(this, event);\n }\n };\n}\n\nfunction contextListener(listener, index, group) {\n return function(event1) {\n var event0 = event; // Events can be reentrant (e.g., focus).\n event = event1;\n try {\n listener.call(this, this.__data__, index, group);\n } finally {\n event = event0;\n }\n };\n}\n\nfunction parseTypenames(typenames) {\n return typenames.trim().split(/^|\\s+/).map(function(t) {\n var name = \"\", i = t.indexOf(\".\");\n if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n return {type: t, name: name};\n });\n}\n\nfunction onRemove(typename) {\n return function() {\n var on = this.__on;\n if (!on) return;\n for (var j = 0, i = -1, m = on.length, o; j < m; ++j) {\n if (o = on[j], (!typename.type || o.type === typename.type) && o.name === typename.name) {\n this.removeEventListener(o.type, o.listener, o.capture);\n } else {\n on[++i] = o;\n }\n }\n if (++i) on.length = i;\n else delete this.__on;\n };\n}\n\nfunction onAdd(typename, value, capture) {\n var wrap = filterEvents.hasOwnProperty(typename.type) ? filterContextListener : contextListener;\n return function(d, i, group) {\n var on = this.__on, o, listener = wrap(value, i, group);\n if (on) for (var j = 0, m = on.length; j < m; ++j) {\n if ((o = on[j]).type === typename.type && o.name === typename.name) {\n this.removeEventListener(o.type, o.listener, o.capture);\n this.addEventListener(o.type, o.listener = listener, o.capture = capture);\n o.value = value;\n return;\n }\n }\n this.addEventListener(typename.type, listener, capture);\n o = {type: typename.type, name: typename.name, value: value, listener: listener, capture: capture};\n if (!on) this.__on = [o];\n else on.push(o);\n };\n}\n\nexport default function(typename, value, capture) {\n var typenames = parseTypenames(typename + \"\"), i, n = typenames.length, t;\n\n if (arguments.length < 2) {\n var on = this.node().__on;\n if (on) for (var j = 0, m = on.length, o; j < m; ++j) {\n for (i = 0, o = on[j]; i < n; ++i) {\n if ((t = typenames[i]).type === o.type && t.name === o.name) {\n return o.value;\n }\n }\n }\n return;\n }\n\n on = value ? onAdd : onRemove;\n if (capture == null) capture = false;\n for (i = 0; i < n; ++i) this.each(on(typenames[i], value, capture));\n return this;\n}\n\nexport function customEvent(event1, listener, that, args) {\n var event0 = event;\n event1.sourceEvent = event;\n event = event1;\n try {\n return listener.apply(that, args);\n } finally {\n event = event0;\n }\n}\n","import defaultView from \"../window\";\n\nfunction dispatchEvent(node, type, params) {\n var window = defaultView(node),\n event = window.CustomEvent;\n\n if (typeof event === \"function\") {\n event = new event(type, params);\n } else {\n event = window.document.createEvent(\"Event\");\n if (params) event.initEvent(type, params.bubbles, params.cancelable), event.detail = params.detail;\n else event.initEvent(type, false, false);\n }\n\n node.dispatchEvent(event);\n}\n\nfunction dispatchConstant(type, params) {\n return function() {\n return dispatchEvent(this, type, params);\n };\n}\n\nfunction dispatchFunction(type, params) {\n return function() {\n return dispatchEvent(this, type, params.apply(this, arguments));\n };\n}\n\nexport default function(type, params) {\n return this.each((typeof params === \"function\"\n ? dispatchFunction\n : dispatchConstant)(type, params));\n}\n","import selection_select from \"./select\";\nimport selection_selectAll from \"./selectAll\";\nimport selection_filter from \"./filter\";\nimport selection_data from \"./data\";\nimport selection_enter from \"./enter\";\nimport selection_exit from \"./exit\";\nimport selection_merge from \"./merge\";\nimport selection_order from \"./order\";\nimport selection_sort from \"./sort\";\nimport selection_call from \"./call\";\nimport selection_nodes from \"./nodes\";\nimport selection_node from \"./node\";\nimport selection_size from \"./size\";\nimport selection_empty from \"./empty\";\nimport selection_each from \"./each\";\nimport selection_attr from \"./attr\";\nimport selection_style from \"./style\";\nimport selection_property from \"./property\";\nimport selection_classed from \"./classed\";\nimport selection_text from \"./text\";\nimport selection_html from \"./html\";\nimport selection_raise from \"./raise\";\nimport selection_lower from \"./lower\";\nimport selection_append from \"./append\";\nimport selection_insert from \"./insert\";\nimport selection_remove from \"./remove\";\nimport selection_clone from \"./clone\";\nimport selection_datum from \"./datum\";\nimport selection_on from \"./on\";\nimport selection_dispatch from \"./dispatch\";\n\nexport var root = [null];\n\nexport function Selection(groups, parents) {\n this._groups = groups;\n this._parents = parents;\n}\n\nfunction selection() {\n return new Selection([[document.documentElement]], root);\n}\n\nSelection.prototype = selection.prototype = {\n constructor: Selection,\n select: selection_select,\n selectAll: selection_selectAll,\n filter: selection_filter,\n data: selection_data,\n enter: selection_enter,\n exit: selection_exit,\n merge: selection_merge,\n order: selection_order,\n sort: selection_sort,\n call: selection_call,\n nodes: selection_nodes,\n node: selection_node,\n size: selection_size,\n empty: selection_empty,\n each: selection_each,\n attr: selection_attr,\n style: selection_style,\n property: selection_property,\n classed: selection_classed,\n text: selection_text,\n html: selection_html,\n raise: selection_raise,\n lower: selection_lower,\n append: selection_append,\n insert: selection_insert,\n remove: selection_remove,\n clone: selection_clone,\n datum: selection_datum,\n on: selection_on,\n dispatch: selection_dispatch\n};\n\nexport default selection;\n","import {Selection} from \"./index\";\nimport selector from \"../selector\";\n\nexport default function(select) {\n if (typeof select !== \"function\") select = selector(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {\n if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {\n if (\"__data__\" in node) subnode.__data__ = node.__data__;\n subgroup[i] = subnode;\n }\n }\n }\n\n return new Selection(subgroups, this._parents);\n}\n","import {Selection} from \"./index\";\nimport selectorAll from \"../selectorAll\";\n\nexport default function(select) {\n if (typeof select !== \"function\") select = selectorAll(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n subgroups.push(select.call(node, node.__data__, i, group));\n parents.push(node);\n }\n }\n }\n\n return new Selection(subgroups, parents);\n}\n","import {Selection} from \"./index\";\nimport matcher from \"../matcher\";\n\nexport default function(match) {\n if (typeof match !== \"function\") match = matcher(match);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {\n if ((node = group[i]) && match.call(node, node.__data__, i, group)) {\n subgroup.push(node);\n }\n }\n }\n\n return new Selection(subgroups, this._parents);\n}\n","import sparse from \"./sparse\";\nimport {Selection} from \"./index\";\n\nexport default function() {\n return new Selection(this._exit || this._groups.map(sparse), this._parents);\n}\n","import {Selection} from \"./index\";\n\nexport default function(selection) {\n\n for (var groups0 = this._groups, groups1 = selection._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {\n for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group0[i] || group1[i]) {\n merge[i] = node;\n }\n }\n }\n\n for (; j < m0; ++j) {\n merges[j] = groups0[j];\n }\n\n return new Selection(merges, this._parents);\n}\n","export default function() {\n\n for (var groups = this._groups, j = -1, m = groups.length; ++j < m;) {\n for (var group = groups[j], i = group.length - 1, next = group[i], node; --i >= 0;) {\n if (node = group[i]) {\n if (next && next !== node.nextSibling) next.parentNode.insertBefore(node, next);\n next = node;\n }\n }\n }\n\n return this;\n}\n","export default function() {\n var callback = arguments[0];\n arguments[0] = this;\n callback.apply(null, arguments);\n return this;\n}\n","export default function() {\n var nodes = new Array(this.size()), i = -1;\n this.each(function() { nodes[++i] = this; });\n return nodes;\n}\n","export default function() {\n\n for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n for (var group = groups[j], i = 0, n = group.length; i < n; ++i) {\n var node = group[i];\n if (node) return node;\n }\n }\n\n return null;\n}\n","export default function() {\n var size = 0;\n this.each(function() { ++size; });\n return size;\n}\n","export default function() {\n return !this.node();\n}\n","export default function(callback) {\n\n for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n for (var group = groups[j], i = 0, n = group.length, node; i < n; ++i) {\n if (node = group[i]) callback.call(node, node.__data__, i, group);\n }\n }\n\n return this;\n}\n","function propertyRemove(name) {\n return function() {\n delete this[name];\n };\n}\n\nfunction propertyConstant(name, value) {\n return function() {\n this[name] = value;\n };\n}\n\nfunction propertyFunction(name, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) delete this[name];\n else this[name] = v;\n };\n}\n\nexport default function(name, value) {\n return arguments.length > 1\n ? this.each((value == null\n ? propertyRemove : typeof value === \"function\"\n ? propertyFunction\n : propertyConstant)(name, value))\n : this.node()[name];\n}\n","import creator from \"../creator\";\n\nexport default function(name) {\n var create = typeof name === \"function\" ? name : creator(name);\n return this.select(function() {\n return this.appendChild(create.apply(this, arguments));\n });\n}\n","export default function(value) {\n return arguments.length\n ? this.property(\"__data__\", value)\n : this.node().__data__;\n}\n","import {Selection, root} from \"./selection/index\";\n\nexport default function(selector) {\n return typeof selector === \"string\"\n ? new Selection([[document.querySelector(selector)]], [document.documentElement])\n : new Selection([[selector]], root);\n}\n","var nextId = 0;\n\nexport default function local() {\n return new Local;\n}\n\nfunction Local() {\n this._ = \"@\" + (++nextId).toString(36);\n}\n\nLocal.prototype = local.prototype = {\n constructor: Local,\n get: function(node) {\n var id = this._;\n while (!(id in node)) if (!(node = node.parentNode)) return;\n return node[id];\n },\n set: function(node, value) {\n return node[this._] = value;\n },\n remove: function(node) {\n return this._ in node && delete node[this._];\n },\n toString: function() {\n return this._;\n }\n};\n","import {event} from \"./selection/on\";\n\nexport default function() {\n var current = event, source;\n while (source = current.sourceEvent) current = source;\n return current;\n}\n","export default function(node, event) {\n var svg = node.ownerSVGElement || node;\n\n if (svg.createSVGPoint) {\n var point = svg.createSVGPoint();\n point.x = event.clientX, point.y = event.clientY;\n point = point.matrixTransform(node.getScreenCTM().inverse());\n return [point.x, point.y];\n }\n\n var rect = node.getBoundingClientRect();\n return [event.clientX - rect.left - node.clientLeft, event.clientY - rect.top - node.clientTop];\n}\n","import sourceEvent from \"./sourceEvent\";\nimport point from \"./point\";\n\nexport default function(node) {\n var event = sourceEvent();\n if (event.changedTouches) event = event.changedTouches[0];\n return point(node, event);\n}\n","import sourceEvent from \"./sourceEvent\";\nimport point from \"./point\";\n\nexport default function(node, touches, identifier) {\n if (arguments.length < 3) identifier = touches, touches = sourceEvent().changedTouches;\n\n for (var i = 0, n = touches ? touches.length : 0, touch; i < n; ++i) {\n if ((touch = touches[i]).identifier === identifier) {\n return point(node, touch);\n }\n }\n\n return null;\n}\n","var noop = {value: function() {}};\n\nfunction dispatch() {\n for (var i = 0, n = arguments.length, _ = {}, t; i < n; ++i) {\n if (!(t = arguments[i] + \"\") || (t in _)) throw new Error(\"illegal type: \" + t);\n _[t] = [];\n }\n return new Dispatch(_);\n}\n\nfunction Dispatch(_) {\n this._ = _;\n}\n\nfunction parseTypenames(typenames, types) {\n return typenames.trim().split(/^|\\s+/).map(function(t) {\n var name = \"\", i = t.indexOf(\".\");\n if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n if (t && !types.hasOwnProperty(t)) throw new Error(\"unknown type: \" + t);\n return {type: t, name: name};\n });\n}\n\nDispatch.prototype = dispatch.prototype = {\n constructor: Dispatch,\n on: function(typename, callback) {\n var _ = this._,\n T = parseTypenames(typename + \"\", _),\n t,\n i = -1,\n n = T.length;\n\n // If no callback was specified, return the callback of the given type and name.\n if (arguments.length < 2) {\n while (++i < n) if ((t = (typename = T[i]).type) && (t = get(_[t], typename.name))) return t;\n return;\n }\n\n // If a type was specified, set the callback for the given type and name.\n // Otherwise, if a null callback was specified, remove callbacks of the given name.\n if (callback != null && typeof callback !== \"function\") throw new Error(\"invalid callback: \" + callback);\n while (++i < n) {\n if (t = (typename = T[i]).type) _[t] = set(_[t], typename.name, callback);\n else if (callback == null) for (t in _) _[t] = set(_[t], typename.name, null);\n }\n\n return this;\n },\n copy: function() {\n var copy = {}, _ = this._;\n for (var t in _) copy[t] = _[t].slice();\n return new Dispatch(copy);\n },\n call: function(type, that) {\n if ((n = arguments.length - 2) > 0) for (var args = new Array(n), i = 0, n, t; i < n; ++i) args[i] = arguments[i + 2];\n if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n for (t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n },\n apply: function(type, that, args) {\n if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n for (var t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n }\n};\n\nfunction get(type, name) {\n for (var i = 0, n = type.length, c; i < n; ++i) {\n if ((c = type[i]).name === name) {\n return c.value;\n }\n }\n}\n\nfunction set(type, name, callback) {\n for (var i = 0, n = type.length; i < n; ++i) {\n if (type[i].name === name) {\n type[i] = noop, type = type.slice(0, i).concat(type.slice(i + 1));\n break;\n }\n }\n if (callback != null) type.push({name: name, value: callback});\n return type;\n}\n\nexport default dispatch;\n","import {event} from \"d3-selection\";\n\nexport function nopropagation() {\n event.stopImmediatePropagation();\n}\n\nexport default function() {\n event.preventDefault();\n event.stopImmediatePropagation();\n}\n","import {select} from \"d3-selection\";\nimport noevent from \"./noevent\";\n\nexport default function(view) {\n var root = view.document.documentElement,\n selection = select(view).on(\"dragstart.drag\", noevent, true);\n if (\"onselectstart\" in root) {\n selection.on(\"selectstart.drag\", noevent, true);\n } else {\n root.__noselect = root.style.MozUserSelect;\n root.style.MozUserSelect = \"none\";\n }\n}\n\nexport function yesdrag(view, noclick) {\n var root = view.document.documentElement,\n selection = select(view).on(\"dragstart.drag\", null);\n if (noclick) {\n selection.on(\"click.drag\", noevent, true);\n setTimeout(function() { selection.on(\"click.drag\", null); }, 0);\n }\n if (\"onselectstart\" in root) {\n selection.on(\"selectstart.drag\", null);\n } else {\n root.style.MozUserSelect = root.__noselect;\n delete root.__noselect;\n }\n}\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","export default function DragEvent(target, type, subject, id, active, x, y, dx, dy, dispatch) {\n this.target = target;\n this.type = type;\n this.subject = subject;\n this.identifier = id;\n this.active = active;\n this.x = x;\n this.y = y;\n this.dx = dx;\n this.dy = dy;\n this._ = dispatch;\n}\n\nDragEvent.prototype.on = function() {\n var value = this._.on.apply(this._, arguments);\n return value === this._ ? this : value;\n};\n","import {dispatch} from \"d3-dispatch\";\nimport {event, customEvent, select, mouse, touch} from \"d3-selection\";\nimport nodrag, {yesdrag} from \"./nodrag\";\nimport noevent, {nopropagation} from \"./noevent\";\nimport constant from \"./constant\";\nimport DragEvent from \"./event\";\n\n// Ignore right-click, since that should open the context menu.\nfunction defaultFilter() {\n return !event.button;\n}\n\nfunction defaultContainer() {\n return this.parentNode;\n}\n\nfunction defaultSubject(d) {\n return d == null ? {x: event.x, y: event.y} : d;\n}\n\nfunction defaultTouchable() {\n return \"ontouchstart\" in this;\n}\n\nexport default function() {\n var filter = defaultFilter,\n container = defaultContainer,\n subject = defaultSubject,\n touchable = defaultTouchable,\n gestures = {},\n listeners = dispatch(\"start\", \"drag\", \"end\"),\n active = 0,\n mousedownx,\n mousedowny,\n mousemoving,\n touchending,\n clickDistance2 = 0;\n\n function drag(selection) {\n selection\n .on(\"mousedown.drag\", mousedowned)\n .filter(touchable)\n .on(\"touchstart.drag\", touchstarted)\n .on(\"touchmove.drag\", touchmoved)\n .on(\"touchend.drag touchcancel.drag\", touchended)\n .style(\"touch-action\", \"none\")\n .style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\");\n }\n\n function mousedowned() {\n if (touchending || !filter.apply(this, arguments)) return;\n var gesture = beforestart(\"mouse\", container.apply(this, arguments), mouse, this, arguments);\n if (!gesture) return;\n select(event.view).on(\"mousemove.drag\", mousemoved, true).on(\"mouseup.drag\", mouseupped, true);\n nodrag(event.view);\n nopropagation();\n mousemoving = false;\n mousedownx = event.clientX;\n mousedowny = event.clientY;\n gesture(\"start\");\n }\n\n function mousemoved() {\n noevent();\n if (!mousemoving) {\n var dx = event.clientX - mousedownx, dy = event.clientY - mousedowny;\n mousemoving = dx * dx + dy * dy > clickDistance2;\n }\n gestures.mouse(\"drag\");\n }\n\n function mouseupped() {\n select(event.view).on(\"mousemove.drag mouseup.drag\", null);\n yesdrag(event.view, mousemoving);\n noevent();\n gestures.mouse(\"end\");\n }\n\n function touchstarted() {\n if (!filter.apply(this, arguments)) return;\n var touches = event.changedTouches,\n c = container.apply(this, arguments),\n n = touches.length, i, gesture;\n\n for (i = 0; i < n; ++i) {\n if (gesture = beforestart(touches[i].identifier, c, touch, this, arguments)) {\n nopropagation();\n gesture(\"start\");\n }\n }\n }\n\n function touchmoved() {\n var touches = event.changedTouches,\n n = touches.length, i, gesture;\n\n for (i = 0; i < n; ++i) {\n if (gesture = gestures[touches[i].identifier]) {\n noevent();\n gesture(\"drag\");\n }\n }\n }\n\n function touchended() {\n var touches = event.changedTouches,\n n = touches.length, i, gesture;\n\n if (touchending) clearTimeout(touchending);\n touchending = setTimeout(function() { touchending = null; }, 500); // Ghost clicks are delayed!\n for (i = 0; i < n; ++i) {\n if (gesture = gestures[touches[i].identifier]) {\n nopropagation();\n gesture(\"end\");\n }\n }\n }\n\n function beforestart(id, container, point, that, args) {\n var p = point(container, id), s, dx, dy,\n sublisteners = listeners.copy();\n\n if (!customEvent(new DragEvent(drag, \"beforestart\", s, id, active, p[0], p[1], 0, 0, sublisteners), function() {\n if ((event.subject = s = subject.apply(that, args)) == null) return false;\n dx = s.x - p[0] || 0;\n dy = s.y - p[1] || 0;\n return true;\n })) return;\n\n return function gesture(type) {\n var p0 = p, n;\n switch (type) {\n case \"start\": gestures[id] = gesture, n = active++; break;\n case \"end\": delete gestures[id], --active; // nobreak\n case \"drag\": p = point(container, id), n = active; break;\n }\n customEvent(new DragEvent(drag, type, s, id, n, p[0] + dx, p[1] + dy, p[0] - p0[0], p[1] - p0[1], sublisteners), sublisteners.apply, sublisteners, [type, that, args]);\n };\n }\n\n drag.filter = function(_) {\n return arguments.length ? (filter = typeof _ === \"function\" ? _ : constant(!!_), drag) : filter;\n };\n\n drag.container = function(_) {\n return arguments.length ? (container = typeof _ === \"function\" ? _ : constant(_), drag) : container;\n };\n\n drag.subject = function(_) {\n return arguments.length ? (subject = typeof _ === \"function\" ? _ : constant(_), drag) : subject;\n };\n\n drag.touchable = function(_) {\n return arguments.length ? (touchable = typeof _ === \"function\" ? _ : constant(!!_), drag) : touchable;\n };\n\n drag.on = function() {\n var value = listeners.on.apply(listeners, arguments);\n return value === listeners ? drag : value;\n };\n\n drag.clickDistance = function(_) {\n return arguments.length ? (clickDistance2 = (_ = +_) * _, drag) : Math.sqrt(clickDistance2);\n };\n\n return drag;\n}\n","var frame = 0, // is an animation frame pending?\n timeout = 0, // is a timeout pending?\n interval = 0, // are any timers active?\n pokeDelay = 1000, // how frequently we check for clock skew\n taskHead,\n taskTail,\n clockLast = 0,\n clockNow = 0,\n clockSkew = 0,\n clock = typeof performance === \"object\" && performance.now ? performance : Date,\n setFrame = typeof window === \"object\" && window.requestAnimationFrame ? window.requestAnimationFrame.bind(window) : function(f) { setTimeout(f, 17); };\n\nexport function now() {\n return clockNow || (setFrame(clearNow), clockNow = clock.now() + clockSkew);\n}\n\nfunction clearNow() {\n clockNow = 0;\n}\n\nexport function Timer() {\n this._call =\n this._time =\n this._next = null;\n}\n\nTimer.prototype = timer.prototype = {\n constructor: Timer,\n restart: function(callback, delay, time) {\n if (typeof callback !== \"function\") throw new TypeError(\"callback is not a function\");\n time = (time == null ? now() : +time) + (delay == null ? 0 : +delay);\n if (!this._next && taskTail !== this) {\n if (taskTail) taskTail._next = this;\n else taskHead = this;\n taskTail = this;\n }\n this._call = callback;\n this._time = time;\n sleep();\n },\n stop: function() {\n if (this._call) {\n this._call = null;\n this._time = Infinity;\n sleep();\n }\n }\n};\n\nexport function timer(callback, delay, time) {\n var t = new Timer;\n t.restart(callback, delay, time);\n return t;\n}\n\nexport function timerFlush() {\n now(); // Get the current time, if not already set.\n ++frame; // Pretend we’ve set an alarm, if we haven’t already.\n var t = taskHead, e;\n while (t) {\n if ((e = clockNow - t._time) >= 0) t._call.call(null, e);\n t = t._next;\n }\n --frame;\n}\n\nfunction wake() {\n clockNow = (clockLast = clock.now()) + clockSkew;\n frame = timeout = 0;\n try {\n timerFlush();\n } finally {\n frame = 0;\n nap();\n clockNow = 0;\n }\n}\n\nfunction poke() {\n var now = clock.now(), delay = now - clockLast;\n if (delay > pokeDelay) clockSkew -= delay, clockLast = now;\n}\n\nfunction nap() {\n var t0, t1 = taskHead, t2, time = Infinity;\n while (t1) {\n if (t1._call) {\n if (time > t1._time) time = t1._time;\n t0 = t1, t1 = t1._next;\n } else {\n t2 = t1._next, t1._next = null;\n t1 = t0 ? t0._next = t2 : taskHead = t2;\n }\n }\n taskTail = t0;\n sleep(time);\n}\n\nfunction sleep(time) {\n if (frame) return; // Soonest alarm already set, or will be.\n if (timeout) timeout = clearTimeout(timeout);\n var delay = time - clockNow; // Strictly less than if we recomputed clockNow.\n if (delay > 24) {\n if (time < Infinity) timeout = setTimeout(wake, time - clock.now() - clockSkew);\n if (interval) interval = clearInterval(interval);\n } else {\n if (!interval) clockLast = clock.now(), interval = setInterval(poke, pokeDelay);\n frame = 1, setFrame(wake);\n }\n}\n","import {Timer} from \"./timer\";\n\nexport default function(callback, delay, time) {\n var t = new Timer;\n delay = delay == null ? 0 : +delay;\n t.restart(function(elapsed) {\n t.stop();\n callback(elapsed + delay);\n }, delay, time);\n return t;\n}\n","import {dispatch} from \"d3-dispatch\";\nimport {timer, timeout} from \"d3-timer\";\n\nvar emptyOn = dispatch(\"start\", \"end\", \"interrupt\");\nvar emptyTween = [];\n\nexport var CREATED = 0;\nexport var SCHEDULED = 1;\nexport var STARTING = 2;\nexport var STARTED = 3;\nexport var RUNNING = 4;\nexport var ENDING = 5;\nexport var ENDED = 6;\n\nexport default function(node, name, id, index, group, timing) {\n var schedules = node.__transition;\n if (!schedules) node.__transition = {};\n else if (id in schedules) return;\n create(node, id, {\n name: name,\n index: index, // For context during callback.\n group: group, // For context during callback.\n on: emptyOn,\n tween: emptyTween,\n time: timing.time,\n delay: timing.delay,\n duration: timing.duration,\n ease: timing.ease,\n timer: null,\n state: CREATED\n });\n}\n\nexport function init(node, id) {\n var schedule = get(node, id);\n if (schedule.state > CREATED) throw new Error(\"too late; already scheduled\");\n return schedule;\n}\n\nexport function set(node, id) {\n var schedule = get(node, id);\n if (schedule.state > STARTING) throw new Error(\"too late; already started\");\n return schedule;\n}\n\nexport function get(node, id) {\n var schedule = node.__transition;\n if (!schedule || !(schedule = schedule[id])) throw new Error(\"transition not found\");\n return schedule;\n}\n\nfunction create(node, id, self) {\n var schedules = node.__transition,\n tween;\n\n // Initialize the self timer when the transition is created.\n // Note the actual delay is not known until the first callback!\n schedules[id] = self;\n self.timer = timer(schedule, 0, self.time);\n\n function schedule(elapsed) {\n self.state = SCHEDULED;\n self.timer.restart(start, self.delay, self.time);\n\n // If the elapsed delay is less than our first sleep, start immediately.\n if (self.delay <= elapsed) start(elapsed - self.delay);\n }\n\n function start(elapsed) {\n var i, j, n, o;\n\n // If the state is not SCHEDULED, then we previously errored on start.\n if (self.state !== SCHEDULED) return stop();\n\n for (i in schedules) {\n o = schedules[i];\n if (o.name !== self.name) continue;\n\n // While this element already has a starting transition during this frame,\n // defer starting an interrupting transition until that transition has a\n // chance to tick (and possibly end); see d3/d3-transition#54!\n if (o.state === STARTED) return timeout(start);\n\n // Interrupt the active transition, if any.\n // Dispatch the interrupt event.\n if (o.state === RUNNING) {\n o.state = ENDED;\n o.timer.stop();\n o.on.call(\"interrupt\", node, node.__data__, o.index, o.group);\n delete schedules[i];\n }\n\n // Cancel any pre-empted transitions. No interrupt event is dispatched\n // because the cancelled transitions never started. Note that this also\n // removes this transition from the pending list!\n else if (+i < id) {\n o.state = ENDED;\n o.timer.stop();\n delete schedules[i];\n }\n }\n\n // Defer the first tick to end of the current frame; see d3/d3#1576.\n // Note the transition may be canceled after start and before the first tick!\n // Note this must be scheduled before the start event; see d3/d3-transition#16!\n // Assuming this is successful, subsequent callbacks go straight to tick.\n timeout(function() {\n if (self.state === STARTED) {\n self.state = RUNNING;\n self.timer.restart(tick, self.delay, self.time);\n tick(elapsed);\n }\n });\n\n // Dispatch the start event.\n // Note this must be done before the tween are initialized.\n self.state = STARTING;\n self.on.call(\"start\", node, node.__data__, self.index, self.group);\n if (self.state !== STARTING) return; // interrupted\n self.state = STARTED;\n\n // Initialize the tween, deleting null tween.\n tween = new Array(n = self.tween.length);\n for (i = 0, j = -1; i < n; ++i) {\n if (o = self.tween[i].value.call(node, node.__data__, self.index, self.group)) {\n tween[++j] = o;\n }\n }\n tween.length = j + 1;\n }\n\n function tick(elapsed) {\n var t = elapsed < self.duration ? self.ease.call(null, elapsed / self.duration) : (self.timer.restart(stop), self.state = ENDING, 1),\n i = -1,\n n = tween.length;\n\n while (++i < n) {\n tween[i].call(null, t);\n }\n\n // Dispatch the end event.\n if (self.state === ENDING) {\n self.on.call(\"end\", node, node.__data__, self.index, self.group);\n stop();\n }\n }\n\n function stop() {\n self.state = ENDED;\n self.timer.stop();\n delete schedules[id];\n for (var i in schedules) return; // eslint-disable-line no-unused-vars\n delete node.__transition;\n }\n}\n","import {get, set} from \"./schedule\";\n\nfunction tweenRemove(id, name) {\n var tween0, tween1;\n return function() {\n var schedule = set(this, id),\n tween = schedule.tween;\n\n // If this node shared tween with the previous node,\n // just assign the updated shared tween and we’re done!\n // Otherwise, copy-on-write.\n if (tween !== tween0) {\n tween1 = tween0 = tween;\n for (var i = 0, n = tween1.length; i < n; ++i) {\n if (tween1[i].name === name) {\n tween1 = tween1.slice();\n tween1.splice(i, 1);\n break;\n }\n }\n }\n\n schedule.tween = tween1;\n };\n}\n\nfunction tweenFunction(id, name, value) {\n var tween0, tween1;\n if (typeof value !== \"function\") throw new Error;\n return function() {\n var schedule = set(this, id),\n tween = schedule.tween;\n\n // If this node shared tween with the previous node,\n // just assign the updated shared tween and we’re done!\n // Otherwise, copy-on-write.\n if (tween !== tween0) {\n tween1 = (tween0 = tween).slice();\n for (var t = {name: name, value: value}, i = 0, n = tween1.length; i < n; ++i) {\n if (tween1[i].name === name) {\n tween1[i] = t;\n break;\n }\n }\n if (i === n) tween1.push(t);\n }\n\n schedule.tween = tween1;\n };\n}\n\nexport default function(name, value) {\n var id = this._id;\n\n name += \"\";\n\n if (arguments.length < 2) {\n var tween = get(this.node(), id).tween;\n for (var i = 0, n = tween.length, t; i < n; ++i) {\n if ((t = tween[i]).name === name) {\n return t.value;\n }\n }\n return null;\n }\n\n return this.each((value == null ? tweenRemove : tweenFunction)(id, name, value));\n}\n\nexport function tweenValue(transition, name, value) {\n var id = transition._id;\n\n transition.each(function() {\n var schedule = set(this, id);\n (schedule.value || (schedule.value = {}))[name] = value.apply(this, arguments);\n });\n\n return function(node) {\n return get(node, id).value[name];\n };\n}\n","import {color} from \"d3-color\";\nimport {interpolateNumber, interpolateRgb, interpolateString} from \"d3-interpolate\";\n\nexport default function(a, b) {\n var c;\n return (typeof b === \"number\" ? interpolateNumber\n : b instanceof color ? interpolateRgb\n : (c = color(b)) ? (b = c, interpolateRgb)\n : interpolateString)(a, b);\n}\n","function removeFunction(id) {\n return function() {\n var parent = this.parentNode;\n for (var i in this.__transition) if (+i !== id) return;\n if (parent) parent.removeChild(this);\n };\n}\n\nexport default function() {\n return this.on(\"end.remove\", removeFunction(this._id));\n}\n","import {selection} from \"d3-selection\";\n\nvar Selection = selection.prototype.constructor;\n\nexport default function() {\n return new Selection(this._groups, this._parents);\n}\n","import {tweenValue} from \"./tween\";\n\nfunction textConstant(value) {\n return function() {\n this.textContent = value;\n };\n}\n\nfunction textFunction(value) {\n return function() {\n var value1 = value(this);\n this.textContent = value1 == null ? \"\" : value1;\n };\n}\n\nexport default function(value) {\n return this.tween(\"text\", typeof value === \"function\"\n ? textFunction(tweenValue(this, \"text\", value))\n : textConstant(value == null ? \"\" : value + \"\"));\n}\n","import {selection} from \"d3-selection\";\nimport transition_attr from \"./attr\";\nimport transition_attrTween from \"./attrTween\";\nimport transition_delay from \"./delay\";\nimport transition_duration from \"./duration\";\nimport transition_ease from \"./ease\";\nimport transition_filter from \"./filter\";\nimport transition_merge from \"./merge\";\nimport transition_on from \"./on\";\nimport transition_remove from \"./remove\";\nimport transition_select from \"./select\";\nimport transition_selectAll from \"./selectAll\";\nimport transition_selection from \"./selection\";\nimport transition_style from \"./style\";\nimport transition_styleTween from \"./styleTween\";\nimport transition_text from \"./text\";\nimport transition_transition from \"./transition\";\nimport transition_tween from \"./tween\";\n\nvar id = 0;\n\nexport function Transition(groups, parents, name, id) {\n this._groups = groups;\n this._parents = parents;\n this._name = name;\n this._id = id;\n}\n\nexport default function transition(name) {\n return selection().transition(name);\n}\n\nexport function newId() {\n return ++id;\n}\n\nvar selection_prototype = selection.prototype;\n\nTransition.prototype = transition.prototype = {\n constructor: Transition,\n select: transition_select,\n selectAll: transition_selectAll,\n filter: transition_filter,\n merge: transition_merge,\n selection: transition_selection,\n transition: transition_transition,\n call: selection_prototype.call,\n nodes: selection_prototype.nodes,\n node: selection_prototype.node,\n size: selection_prototype.size,\n empty: selection_prototype.empty,\n each: selection_prototype.each,\n on: transition_on,\n attr: transition_attr,\n attrTween: transition_attrTween,\n style: transition_style,\n styleTween: transition_styleTween,\n text: transition_text,\n remove: transition_remove,\n tween: transition_tween,\n delay: transition_delay,\n duration: transition_duration,\n ease: transition_ease\n};\n","import {selector} from \"d3-selection\";\nimport {Transition} from \"./index\";\nimport schedule, {get} from \"./schedule\";\n\nexport default function(select) {\n var name = this._name,\n id = this._id;\n\n if (typeof select !== \"function\") select = selector(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {\n if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {\n if (\"__data__\" in node) subnode.__data__ = node.__data__;\n subgroup[i] = subnode;\n schedule(subgroup[i], name, id, i, subgroup, get(node, id));\n }\n }\n }\n\n return new Transition(subgroups, this._parents, name, id);\n}\n","import {selectorAll} from \"d3-selection\";\nimport {Transition} from \"./index\";\nimport schedule, {get} from \"./schedule\";\n\nexport default function(select) {\n var name = this._name,\n id = this._id;\n\n if (typeof select !== \"function\") select = selectorAll(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n for (var children = select.call(node, node.__data__, i, group), child, inherit = get(node, id), k = 0, l = children.length; k < l; ++k) {\n if (child = children[k]) {\n schedule(child, name, id, k, children, inherit);\n }\n }\n subgroups.push(children);\n parents.push(node);\n }\n }\n }\n\n return new Transition(subgroups, parents, name, id);\n}\n","import {matcher} from \"d3-selection\";\nimport {Transition} from \"./index\";\n\nexport default function(match) {\n if (typeof match !== \"function\") match = matcher(match);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {\n if ((node = group[i]) && match.call(node, node.__data__, i, group)) {\n subgroup.push(node);\n }\n }\n }\n\n return new Transition(subgroups, this._parents, this._name, this._id);\n}\n","import {Transition} from \"./index\";\n\nexport default function(transition) {\n if (transition._id !== this._id) throw new Error;\n\n for (var groups0 = this._groups, groups1 = transition._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {\n for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group0[i] || group1[i]) {\n merge[i] = node;\n }\n }\n }\n\n for (; j < m0; ++j) {\n merges[j] = groups0[j];\n }\n\n return new Transition(merges, this._parents, this._name, this._id);\n}\n","import {Transition, newId} from \"./index\";\nimport schedule, {get} from \"./schedule\";\n\nexport default function() {\n var name = this._name,\n id0 = this._id,\n id1 = newId();\n\n for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n var inherit = get(node, id0);\n schedule(node, name, id1, i, group, {\n time: inherit.time + inherit.delay + inherit.duration,\n delay: 0,\n duration: inherit.duration,\n ease: inherit.ease\n });\n }\n }\n }\n\n return new Transition(groups, this._parents, name, id1);\n}\n","import {get, set, init} from \"./schedule\";\n\nfunction start(name) {\n return (name + \"\").trim().split(/^|\\s+/).every(function(t) {\n var i = t.indexOf(\".\");\n if (i >= 0) t = t.slice(0, i);\n return !t || t === \"start\";\n });\n}\n\nfunction onFunction(id, name, listener) {\n var on0, on1, sit = start(name) ? init : set;\n return function() {\n var schedule = sit(this, id),\n on = schedule.on;\n\n // If this node shared a dispatch with the previous node,\n // just assign the updated shared dispatch and we’re done!\n // Otherwise, copy-on-write.\n if (on !== on0) (on1 = (on0 = on).copy()).on(name, listener);\n\n schedule.on = on1;\n };\n}\n\nexport default function(name, listener) {\n var id = this._id;\n\n return arguments.length < 2\n ? get(this.node(), id).on.on(name)\n : this.each(onFunction(id, name, listener));\n}\n","import {interpolateTransformSvg as interpolateTransform} from \"d3-interpolate\";\nimport {namespace} from \"d3-selection\";\nimport {tweenValue} from \"./tween\";\nimport interpolate from \"./interpolate\";\n\nfunction attrRemove(name) {\n return function() {\n this.removeAttribute(name);\n };\n}\n\nfunction attrRemoveNS(fullname) {\n return function() {\n this.removeAttributeNS(fullname.space, fullname.local);\n };\n}\n\nfunction attrConstant(name, interpolate, value1) {\n var value00,\n interpolate0;\n return function() {\n var value0 = this.getAttribute(name);\n return value0 === value1 ? null\n : value0 === value00 ? interpolate0\n : interpolate0 = interpolate(value00 = value0, value1);\n };\n}\n\nfunction attrConstantNS(fullname, interpolate, value1) {\n var value00,\n interpolate0;\n return function() {\n var value0 = this.getAttributeNS(fullname.space, fullname.local);\n return value0 === value1 ? null\n : value0 === value00 ? interpolate0\n : interpolate0 = interpolate(value00 = value0, value1);\n };\n}\n\nfunction attrFunction(name, interpolate, value) {\n var value00,\n value10,\n interpolate0;\n return function() {\n var value0, value1 = value(this);\n if (value1 == null) return void this.removeAttribute(name);\n value0 = this.getAttribute(name);\n return value0 === value1 ? null\n : value0 === value00 && value1 === value10 ? interpolate0\n : interpolate0 = interpolate(value00 = value0, value10 = value1);\n };\n}\n\nfunction attrFunctionNS(fullname, interpolate, value) {\n var value00,\n value10,\n interpolate0;\n return function() {\n var value0, value1 = value(this);\n if (value1 == null) return void this.removeAttributeNS(fullname.space, fullname.local);\n value0 = this.getAttributeNS(fullname.space, fullname.local);\n return value0 === value1 ? null\n : value0 === value00 && value1 === value10 ? interpolate0\n : interpolate0 = interpolate(value00 = value0, value10 = value1);\n };\n}\n\nexport default function(name, value) {\n var fullname = namespace(name), i = fullname === \"transform\" ? interpolateTransform : interpolate;\n return this.attrTween(name, typeof value === \"function\"\n ? (fullname.local ? attrFunctionNS : attrFunction)(fullname, i, tweenValue(this, \"attr.\" + name, value))\n : value == null ? (fullname.local ? attrRemoveNS : attrRemove)(fullname)\n : (fullname.local ? attrConstantNS : attrConstant)(fullname, i, value + \"\"));\n}\n","import {namespace} from \"d3-selection\";\n\nfunction attrTweenNS(fullname, value) {\n function tween() {\n var node = this, i = value.apply(node, arguments);\n return i && function(t) {\n node.setAttributeNS(fullname.space, fullname.local, i(t));\n };\n }\n tween._value = value;\n return tween;\n}\n\nfunction attrTween(name, value) {\n function tween() {\n var node = this, i = value.apply(node, arguments);\n return i && function(t) {\n node.setAttribute(name, i(t));\n };\n }\n tween._value = value;\n return tween;\n}\n\nexport default function(name, value) {\n var key = \"attr.\" + name;\n if (arguments.length < 2) return (key = this.tween(key)) && key._value;\n if (value == null) return this.tween(key, null);\n if (typeof value !== \"function\") throw new Error;\n var fullname = namespace(name);\n return this.tween(key, (fullname.local ? attrTweenNS : attrTween)(fullname, value));\n}\n","import {interpolateTransformCss as interpolateTransform} from \"d3-interpolate\";\nimport {style} from \"d3-selection\";\nimport {tweenValue} from \"./tween\";\nimport interpolate from \"./interpolate\";\n\nfunction styleRemove(name, interpolate) {\n var value00,\n value10,\n interpolate0;\n return function() {\n var value0 = style(this, name),\n value1 = (this.style.removeProperty(name), style(this, name));\n return value0 === value1 ? null\n : value0 === value00 && value1 === value10 ? interpolate0\n : interpolate0 = interpolate(value00 = value0, value10 = value1);\n };\n}\n\nfunction styleRemoveEnd(name) {\n return function() {\n this.style.removeProperty(name);\n };\n}\n\nfunction styleConstant(name, interpolate, value1) {\n var value00,\n interpolate0;\n return function() {\n var value0 = style(this, name);\n return value0 === value1 ? null\n : value0 === value00 ? interpolate0\n : interpolate0 = interpolate(value00 = value0, value1);\n };\n}\n\nfunction styleFunction(name, interpolate, value) {\n var value00,\n value10,\n interpolate0;\n return function() {\n var value0 = style(this, name),\n value1 = value(this);\n if (value1 == null) value1 = (this.style.removeProperty(name), style(this, name));\n return value0 === value1 ? null\n : value0 === value00 && value1 === value10 ? interpolate0\n : interpolate0 = interpolate(value00 = value0, value10 = value1);\n };\n}\n\nexport default function(name, value, priority) {\n var i = (name += \"\") === \"transform\" ? interpolateTransform : interpolate;\n return value == null ? this\n .styleTween(name, styleRemove(name, i))\n .on(\"end.style.\" + name, styleRemoveEnd(name))\n : this.styleTween(name, typeof value === \"function\"\n ? styleFunction(name, i, tweenValue(this, \"style.\" + name, value))\n : styleConstant(name, i, value + \"\"), priority);\n}\n","function styleTween(name, value, priority) {\n function tween() {\n var node = this, i = value.apply(node, arguments);\n return i && function(t) {\n node.style.setProperty(name, i(t), priority);\n };\n }\n tween._value = value;\n return tween;\n}\n\nexport default function(name, value, priority) {\n var key = \"style.\" + (name += \"\");\n if (arguments.length < 2) return (key = this.tween(key)) && key._value;\n if (value == null) return this.tween(key, null);\n if (typeof value !== \"function\") throw new Error;\n return this.tween(key, styleTween(name, value, priority == null ? \"\" : priority));\n}\n","import {get, init} from \"./schedule\";\n\nfunction delayFunction(id, value) {\n return function() {\n init(this, id).delay = +value.apply(this, arguments);\n };\n}\n\nfunction delayConstant(id, value) {\n return value = +value, function() {\n init(this, id).delay = value;\n };\n}\n\nexport default function(value) {\n var id = this._id;\n\n return arguments.length\n ? this.each((typeof value === \"function\"\n ? delayFunction\n : delayConstant)(id, value))\n : get(this.node(), id).delay;\n}\n","import {get, set} from \"./schedule\";\n\nfunction durationFunction(id, value) {\n return function() {\n set(this, id).duration = +value.apply(this, arguments);\n };\n}\n\nfunction durationConstant(id, value) {\n return value = +value, function() {\n set(this, id).duration = value;\n };\n}\n\nexport default function(value) {\n var id = this._id;\n\n return arguments.length\n ? this.each((typeof value === \"function\"\n ? durationFunction\n : durationConstant)(id, value))\n : get(this.node(), id).duration;\n}\n","import {get, set} from \"./schedule\";\n\nfunction easeConstant(id, value) {\n if (typeof value !== \"function\") throw new Error;\n return function() {\n set(this, id).ease = value;\n };\n}\n\nexport default function(value) {\n var id = this._id;\n\n return arguments.length\n ? this.each(easeConstant(id, value))\n : get(this.node(), id).ease;\n}\n","import {Transition, newId} from \"../transition/index\";\nimport schedule from \"../transition/schedule\";\nimport {easeCubicInOut} from \"d3-ease\";\nimport {now} from \"d3-timer\";\n\nvar defaultTiming = {\n time: null, // Set on use.\n delay: 0,\n duration: 250,\n ease: easeCubicInOut\n};\n\nfunction inherit(node, id) {\n var timing;\n while (!(timing = node.__transition) || !(timing = timing[id])) {\n if (!(node = node.parentNode)) {\n return defaultTiming.time = now(), defaultTiming;\n }\n }\n return timing;\n}\n\nexport default function(name) {\n var id,\n timing;\n\n if (name instanceof Transition) {\n id = name._id, name = name._name;\n } else {\n id = newId(), (timing = defaultTiming).time = now(), name = name == null ? null : name + \"\";\n }\n\n for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n schedule(node, name, id, i, group, timing || inherit(node, id));\n }\n }\n }\n\n return new Transition(groups, this._parents, name, id);\n}\n","import {selection} from \"d3-selection\";\nimport selection_interrupt from \"./interrupt\";\nimport selection_transition from \"./transition\";\n\nselection.prototype.interrupt = selection_interrupt;\nselection.prototype.transition = selection_transition;\n","import interrupt from \"../interrupt\";\n\nexport default function(name) {\n return this.each(function() {\n interrupt(this, name);\n });\n}\n","import {STARTING, ENDING, ENDED} from \"./transition/schedule\";\n\nexport default function(node, name) {\n var schedules = node.__transition,\n schedule,\n active,\n empty = true,\n i;\n\n if (!schedules) return;\n\n name = name == null ? null : name + \"\";\n\n for (i in schedules) {\n if ((schedule = schedules[i]).name !== name) { empty = false; continue; }\n active = schedule.state > STARTING && schedule.state < ENDING;\n schedule.state = ENDED;\n schedule.timer.stop();\n if (active) schedule.on.call(\"interrupt\", node, node.__data__, schedule.index, schedule.group);\n delete schedules[i];\n }\n\n if (empty) delete node.__transition;\n}\n","import {Transition} from \"./transition/index\";\nimport {SCHEDULED} from \"./transition/schedule\";\n\nvar root = [null];\n\nexport default function(node, name) {\n var schedules = node.__transition,\n schedule,\n i;\n\n if (schedules) {\n name = name == null ? null : name + \"\";\n for (i in schedules) {\n if ((schedule = schedules[i]).state > SCHEDULED && schedule.name === name) {\n return new Transition([[node]], root, name, +i);\n }\n }\n }\n\n return null;\n}\n","import { select, event as d3event, selection, clientPoint } from 'd3-selection';\nimport { drag as d3drag } from 'd3-drag';\nimport 'd3-transition';\nimport { mergeRecursive } from './common-utils';\n/**\n * This function takes a raw DOM element or\n * a string and returns a d3 selection of that element.\n *\n * @param {HTMLElement | string} element The element to wrap in d3 selection.\n * @return {Selection} Instance of d3 selection.\n */\nconst selectElement = element => select(element);\n\n/**\n * It creates a new d3 element on the parent element\n * @param {Selection} parent Element to which the element is to be appended\n * @param {Object} elemType Type of the new element\n * @param {Array} data Data for the new element\n * @param {Object} selector classname/id/tagname for the element\n * @return {HTMLElement} Newly Created Element\n */\nconst makeElement = (parent, elemType, data, selector, callbacks = {}, keyFn) => {\n if ((parent instanceof HTMLElement || parent instanceof SVGElement)) {\n parent = selectElement(parent);\n }\n\n const selectorVal = selector ? selector[0] : null;\n let selectorType = null;\n let actualSelector = null;\n let element = null;\n let enterSel = null;\n let mergeSel = null;\n let filter;\n if (selectorVal) {\n if (selectorVal === '#') {\n selectorType = 'id';\n actualSelector = selector;\n } else {\n selectorType = 'class';\n actualSelector = selector[0] === '.' ? selector : `.${selector}`;\n }\n } else {\n actualSelector = elemType;\n filter = true;\n }\n element = parent.selectAll(actualSelector);\n\n filter && (element = element.filter(function () {\n return this.parentNode === parent.node();\n }));\n element = element.data(data, keyFn);\n\n enterSel = element.enter()\n .append(elemType || 'div');\n callbacks.enter && enterSel.each(function (...params) {\n callbacks.enter(selectElement(this), ...params);\n });\n\n mergeSel = enterSel.merge(element);\n callbacks.update && mergeSel.each(function (...params) {\n callbacks.update(selectElement(this), ...params);\n });\n if (selectorType === 'class') {\n mergeSel.classed(selectorVal === '.' ? selector.substring(1, selector.length) : selector, true);\n } else if (selectorType === 'id') {\n mergeSel.attr('id', selector.substring(1, selector.length));\n }\n const exitSel = element.exit();\n\n if (callbacks.exit) {\n exitSel.each(function (...params) {\n callbacks.exit(selectElement(this), ...params);\n });\n } else {\n exitSel.remove();\n }\n return mergeSel;\n};\n\n/**\n * This function applies styles to an element\n * @param {Object} elem Element Selection\n * @param {Object} styleObj Style Object to be applied\n * @return {Element} Newly Created Element\n*/\nconst applyStyle = (elem, styleObj) => {\n Object.entries(styleObj).forEach((d) => {\n elem.style(d[0], d[1]);\n }, this);\n return elem;\n};\n\n/**\n * This function appends a dom element in another element.\n * @param {HTMLElement | SVGElement} element1 The element in which to append the second element\n * @param {HTMLElement | SVGElement} element2 The element which will be appended.\n */\nconst appendElement = (element1, element2) => {\n element1.appendChild(element2);\n};\n\n/**\n * Sets the attributes to the element.\n * @param {HTMLElement | SVGElement} element Element on which attributes will be applied\n * @param {Object} attrs Attributes which need to be applied\n */\nconst setElementAttrs = (element, attrs) => {\n for (const key in attrs) {\n if ({}.hasOwnProperty.call(attrs, key)) {\n element.attr(key, attrs[key]);\n }\n }\n};\n\n/**\n * Sets attributes in the svg or html element\n * @param {SVGElement | HTMLElement} element The element on which attrs will be applied\n * @param {Array.} attrs Array of attributes\n * @param {string} className className of elements to select.\n * @return {SVGElement | HTMLElement} SVGElement or html element.\n */\nconst setAttrs = (element, attrs, className) => {\n if (!(element instanceof selection)) {\n element = selectElement(element);\n }\n className !== undefined ? element.selectAll(`.${className}`).each(function () {\n setElementAttrs(select(this), attrs);\n }) : setElementAttrs(element, attrs);\n return element;\n};\n\n/**\n * Adds a css class to elements which passes the filter function.If filter function is not given,\n * then all elements will be applied the class.\n * @param {HTMLElement | SVGElement} element element\n * @param {string} className css class\n * @param {string} selector css selector\n * @param {Function} filterFn filter method.\n */\nconst addClass = (element, className, selector, filterFn) => {\n select(element).selectAll(selector).each(function (data) {\n const elem = select(this);\n filterFn ? filterFn(data) && elem.classed(className, true) :\n elem.classed(className, true);\n });\n};\n\n/**\n * Removes the css class from elements which passes the filter function.If filter function is not given,\n * then all elements will be applied the class.\n * @param {HTMLElement | SVGElement} element element\n * @param {string} className css class\n * @param {string} selector css selector\n * @param {Function} filterFn filter method.\n */\nconst removeClass = (element, className, selector, filterFn) => {\n select(element).selectAll(selector).each(function (data) {\n const elem = select(this);\n filterFn ? filterFn(data) && elem.classed(className, false) :\n elem.classed(className, false);\n });\n};\n\n/**\n * Sets styles in the svg or html element\n * @param {SVGElement | HTMLElement} element The element on which styles will be applied\n * @param {Array.} styles Array of style attributes\n * @return {SVGElement | HTMLElement} SVGElement or html element.\n */\nconst setStyles = (element, styles) => {\n if (!(element instanceof selection)) {\n element = selectElement(element);\n }\n for (const key in styles) {\n if ({}.hasOwnProperty.call(styles, key)) {\n element.style(key, styles[key]);\n }\n }\n return element;\n};\n\n/**\n * Creates svg or html elements by binding data to the selection.Removes extra elements\n * on exit.\n * @param {Object} params Parameter object\n * @param {SVGElement | HTMLElement} params.container Container element where all elements will be appended\n * @param {string} params.selector Selector by which elements will be selected from dom\n * @param {string} params.append Append tag\n * @param {Function} params.each Function which will be executed for each data point and element.\n */\nconst createElements = (params) => {\n const container = select(params.container);\n let data;\n let sel;\n\n data = params.data;\n if (typeof data === 'number') {\n data = Array(data).fill().map((d, i) => i);\n }\n sel = container.selectAll(params.selector).data(data);\n\n sel = container.selectAll(params.selector).filter(function () {\n return this.parentNode === container.node();\n }).data(params.data);\n\n const selectionMerge = sel.enter().append(params.append).merge(sel).each(function (d, i) {\n params.each(d, select(this), i);\n });\n\n selectionMerge.attr('class', params.className || '');\n sel.exit().remove();\n};\n\n/**\n * Clips an element with given measurement. Basically it is used to hide overflowing portions\n * of any element.\n * @param {SVGElement} container svg element which needs to be clipped.\n * @param {Object} measurement Dimensions of the clipped rectangle.\n * @param {string} id Unique id of the clip element\n */\nconst clipElement = (container, measurement, id) => {\n const clipPathElement = makeElement(select(container), 'clipPath', [1], `#${id}`);\n const clipPathRect = makeElement(clipPathElement, 'rect', [1]);\n clipPathRect.attr('x', measurement.x)\n .attr('y', measurement.x)\n .attr('width', measurement.width)\n .attr('height', measurement.height);\n clipPathElement.attr('clip-path', `url(#${id})`);\n};\n\n/**\n * Returns the element of the corresponding classname.\n * @param {HTMLElement | SVGElement} node html or svg node element.\n * @param {string} className css class to be applied.\n * @return {HTMLElement | SVGElement} html or svg element.\n */\nconst getElementsByClassName = (node, className) => select(node).selectAll(className).nodes();\n\n/**\n * Gets the mouse position relative to an svg type of element\n * @param {SVGElement} element Any svg element like rect, circle, etc.\n * @param {Event} event Event object.\n * @return {Object} x and y position relative to the container element passed.\n */\nconst getMousePos = (element, event) => {\n const boundingClientRect = element.getBoundingClientRect();\n return {\n x: event.x - boundingClientRect.x,\n y: event.y - boundingClientRect.y\n };\n};\n\nconst getClientPoint = (...params) => {\n const pos = clientPoint(...params);\n return {\n x: pos[0],\n y: pos[1]\n };\n};\n\n/** This function appends a dom element in another element.\n * @param {Object} tag The tag name of the element to append\n * @param {Object} mount Mount point fo the element\n * @return {Object} selection of the appended element\n */\nconst createElement = (tag, mount) => select(mount).append(tag).node();\n\n/**\n * Gets the d3 event function\n * @return {Object} d3 event\n */\nconst getEvent = () => d3event;\n\n/**\n * Gets the d3 drag function\n * @return {Object} d3 drag\n */\nconst getD3Drag = () => d3drag;\n\nconst getSmartComputedStyle = (group, css) => {\n let textEl;\n const testText = 'W';\n const mandatoryStyle = {\n 'fill-opacity': 0\n };\n const className = typeof css === 'string' ? css : (css instanceof Array ? css.join(' ') : undefined);\n\n if (group.node() instanceof HTMLElement) {\n textEl = group.append('div').html(testText);\n } else {\n textEl = group.append('text').text(testText);\n }\n\n if (className) {\n textEl.attr('class', className);\n } else if (typeof css === 'object') {\n delete css['fill-opacity'];\n mergeRecursive(mandatoryStyle, css);\n }\n\n textEl.style(mandatoryStyle);\n\n const computedStyle = window.getComputedStyle(textEl.node());\n const styleForSmartLabel = {\n fontSize: computedStyle.fontSize,\n fontFamily: computedStyle.fontFamily,\n fontWeight: computedStyle.fontWeight,\n fontStyle: computedStyle.fontStyle\n };\n\n textEl.remove();\n\n return styleForSmartLabel;\n};\n\nconst hasTouch = () => 'ontouchstart' in document.documentElement;\n\nexport {\n hasTouch,\n selectElement,\n makeElement,\n applyStyle,\n addClass,\n removeClass,\n appendElement,\n setAttrs,\n setStyles,\n createElement,\n createElements,\n clipElement,\n getElementsByClassName,\n getMousePos,\n getEvent,\n getD3Drag,\n getSmartComputedStyle,\n getClientPoint\n};\n","/**\n * This class represents a selection applied on a data array.\n *\n * @class Selection\n */\nclass Selection {\n /**\n * Creates an instance of Selection.\n * @param {Array} data Array of DataObjects.\n * @memberof Selection\n */\n constructor () {\n this._data = [];\n // // map of id to data\n this._idMap = {};\n\n this._mode = '';\n // data.forEach((item, idx) => {\n // const index = item.id || idx;\n // this._idMap[index] = item;\n // });\n // // array to store data in enter phase\n this._enterdata = [];\n // // array to store data in exit phase\n this._exitdata = [];\n }\n /**\n * Gets the object bound to a class\n *\n * @return {Object} current data set bound to the class\n * @memberof Selection\n */\n getObjects () {\n return Object.keys(this._idMap).map(e => this._idMap[e]);\n }\n\n /**\n * This method is used to supply seed data to a selection.\n *\n * @param {Array} newData Seed data to create the enter selection.\n * @param {Functon | undefined } idGetter This function is used to uniqely identify a data entry.\n * @return {Selection} Modified selection.\n * @memberof Selection\n */\n data (newData, idGetter) {\n if (idGetter) {\n this._data = [];\n this._idGetter = idGetter;\n const tempMap = {};\n\n newData.forEach((...params) => {\n const index = idGetter(...params);\n tempMap[index] = params[0];\n });\n // check if any data items have been removed\n const purgedIds = [];\n\n Object.keys(this._idMap).forEach((id) => {\n if (!tempMap[id]) {\n purgedIds.push(id);\n }\n });\n\n Object.keys(tempMap).forEach((id) => {\n if (!this._idMap[id]) {\n this._enterdata.push(tempMap[id]);\n } else {\n this._idMap[id] = tempMap[id];\n this._data.push(tempMap[id]);\n }\n });\n // move the purged items to exit selection\n purgedIds.forEach((id) => {\n const purged = this._idMap[id];\n this._exitdata.push(purged);\n // this._data = this._data.slice(id, 1);\n delete this._idMap[id];\n });\n // this._data = this._data.slice(temp, this._data.length);\n\n return this;\n }\n // no id getter supplied so use indices\n if (newData.length > this._data.length) {\n const startIdx = this._data.length;\n for (let i = startIdx; i < newData.length; i += 1) {\n this._enterdata.push(newData[i]);\n }\n } else {\n // push to exit selection\n const temp = newData.length;\n for (let i = temp; i < this._data.length; i += 1) {\n const purged = this._data[i];\n delete this._idMap[purged.id];\n this._exitdata.push(purged);\n }\n this._data = this._data.slice(temp, this._data.length);\n }\n return this;\n }\n\n /**\n * Applies the supplied callback to each data element\n * and returns a new selection.\n *\n * @param {Function} callback Callback to execute on each item.\n * @return {Selection} New selection with data created using callback.\n * @memberof EnterSelection\n */\n append (callback) {\n this[`_${this._mode}data`].forEach((...params) => {\n const data = params[0];\n const id = this._idGetter ? this._idGetter(...params) : (data.id || params[1]);\n this._idMap[id] = callback(...params);\n });\n this._mode = '';\n return this;\n }\n\n /**\n * This method returns an enter selection that\n * allows or update operations.\n *\n * @return {EnterSelection} Instance of enter selection.\n * @memberof Selection\n */\n enter () {\n this._mode = 'enter';\n return this;\n // return new EnterSelection(this._enterdata, this._idMap, this._idGetter);\n }\n\n /**\n * This method is used to set key value pairs\n * on data objects.\n *\n * @param {string} key Name of property.\n * @param {any} value Value of property.\n * @return {Selection} Modified selection.\n * @memberof Selection\n */\n attr (key, value) {\n this._data.forEach(item => item.attr(key, value));\n return this;\n }\n\n /**\n * This method merges the data of one selection with another.\n *\n * @param {Selection} selection Instance of selection.\n * @return {Selection} Modified selection.\n * @memberof Selection\n */\n merge (selection) {\n selection._data.forEach((...params) => {\n const id = this._idGetter ? this._idGetter(...params) : (params[0].id || params[1]);\n this._idMap[id] = params[0];\n this._data.push(params[0]);\n });\n // reset enter selection\n this._enterdata = [];\n return this;\n }\n\n /**\n * Returns a selection with exit data.\n *\n * @return {Selection} Instance of selection.\n * @memberof Selection\n */\n exit () {\n this._mode = 'exit';\n // const exitdata = this._exitdata;\n // const exitSelection = new Selection(exitdata);\n // this._exitdata = [];\n return this;\n }\n\n each (fn) {\n Object.keys(this._idMap).forEach((e) => {\n fn(this._idMap[e]);\n });\n return this;\n }\n\n map (fn) {\n Object.keys(this._idMap).forEach((...params) => {\n this._idMap[params[0]] = fn(this._idMap[params[0]], ...params);\n });\n return this;\n }\n\n /**\n * Executes the cleanup operation associated with data objets.\n *\n * @memberof Selection\n */\n remove () {\n // do cleanup on DDO's\n const data = this[`_${this._mode}data`];\n\n data.forEach(item => item.remove());\n if (this._mode === '') {\n this.each(e => e.remove());\n }\n this[`_${this._mode}data`] = [];\n this._mode = '';\n }\n}\n\nexport default Selection;\n","import { getUniqueId } from '../index';\n/**\n * Represents the base class that all objects that form\n * the data for a selection must inherit from.\n *\n * @class DataObject\n */\nclass DataObject {\n/**\n * Creates an instance of DataObject.\n * @memberof DataObject\n */\n constructor () {\n this._id = getUniqueId();\n }\n /**\n * Returns the id.\n *\n * @readonly\n * @memberof DataObject\n */\n get id () {\n return this._id;\n }\n\n /**\n * Sets the value corresponding to supplied key.\n *\n * @param {string} key The property name.\n * @param {any} value Value associated with prop.\n * @memberof DataObject\n */\n attr (key, value) {\n this[key] = value;\n }\n\n /**\n * Clean up code to be executed by each object.\n *\n * @override\n * @memberof DataObject\n */\n remove () {\n // cleanup\n }\n}\n\nexport default DataObject;\n","const events = [\n 'initialized',\n 'beforeupdate',\n 'updated',\n 'beforedraw',\n 'drawn',\n 'beforeremove',\n 'removed'\n];\n\nconst compositions = [\n 'canvas',\n 'unit',\n 'layer',\n 'axis',\n 'facet-headers',\n 'legend',\n 'caption'\n];\n\nconst EVENT_LIST = [];\n\ncompositions.forEach((composition) => {\n events.forEach((event) => {\n EVENT_LIST.push(`${composition}.${event}`);\n });\n});\n\nexport default EVENT_LIST;\n","import EVENT_LIST from './event-list';\n\n/**\n * At first call it accepts one function\n * calling it second time accepts notification object.\n * notification object then called with first accepted function\n *\n * @param {Function} resolveFn a promise's resolve function\n * @return {Function} a function to accept notification object\n */\nconst resolver = resolveFn => notification => resolveFn(notification);\n\n/**\n * Checks if the property string is present in the source object\n *\n * @param {Object} source source object whom you want to check the property\n * @param {string} property key name that need to be checked\n * @return {boolean} returns true if the property found in the source object\n */\nconst hasOwn = (source, property) => Object.prototype.hasOwnProperty.call(source, property);\n\n/**\n * LifeCycleManager which goes as a dependendecy to a muze\n * it accepts notification from the entire library throughout\n * the exeecution life\n *\n * @export\n * @class LifeCycleManager\n */\nexport default class LifeCycleManager {\n\n /**\n * Creates an instance of LifeCycleManager.\n * @memberof LifeCycleManager\n */\n constructor () {\n this._eventList = EVENT_LIST;\n this._promises = new Map();\n this._notifiers = {};\n this._lifeCycles = {};\n this._unreleasedLifeCycles = {};\n this._boot();\n }\n\n /**\n * Fills all the notifiers with resolver callback\n *\n * @memberof LifeCycleManager\n */\n _boot () {\n this._notifiers = this._eventList.reduce((acc, name) => {\n acc[name] = resolver;\n return acc;\n }, {});\n this._preparePromises();\n }\n\n /**\n * Public method which gives the promise corresponding\n * to the event name\n *\n * @param {string} eventName name of the event like `canvas.drawn`\n * @return {promise} promise that is passed to the user\n * @memberof LifeCycleManager\n */\n retrieve (eventName) {\n return this._promises.get(eventName);\n }\n\n /**\n * Creates a promise that will be passed to user's callback\n *\n * @param {string} eventName name of the event like `canvas.drawn`\n * @return {promise} a pending promise waiting for resolve to be called\n * @memberof LifeCycleManager\n */\n _makeNotifierPromise (eventName) {\n return new Promise((resolve) => {\n this._notifiers[eventName] = this._notifiers[eventName](resolve);\n });\n }\n\n /**\n * Prepares the promise map with pending promises\n * all the promises are in a pending state where their's\n * resolve function waiting to be called with notification object\n * @memberof LifeCycleManager\n */\n _preparePromises () {\n this._eventList.forEach((eventName) => {\n this._promises.set(eventName, this._makeNotifierPromise(eventName));\n });\n }\n\n /**\n * Resolves the promise with notification object\n *\n * @param {string} eventName name of the event in the system\n * @param {Object} notification notification object\n * @param {string} notification.formalName name of the sender creating the notification\n * @param {Object} notification.client instance or array of instances sending the notification\n * @param {string} notification.action the stage name when the event happened like `beforedraw`\n *\n * @memberof LifeCycleManager\n */\n _resolvePromise (eventName, notification) {\n this._notifiers[eventName](notification);\n }\n\n /**\n * Public method which is being called by different\n * subcompoents of the system at different execution atages\n * @param {Object} notification notification object\n * @param {string} notification.formalName name of the sender creating the notification\n * @param {Object} notification.client instance or array of instances sending the notification\n * @param {string} notification.action the stage name when the event happened like `beforedraw`\n * @memberof LifeCycleManager\n */\n notify (notification) {\n // get the composition name from notification\n // or from static formalName() method\n const composition = notification.formalName || notification.client.constructor.formalName();\n notification.formalName = composition;\n this._releasePromisesFromCache();\n this._notify(composition, notification);\n }\n\n /**\n * Notify user the with promsie in a callback\n * if callback not found then cache it\n *\n * @param {string} composition\n * @param {Object} notification notification object\n * @param {string} notification.formalName name of the sender creating the notification\n * @param {Object} notification.client instance or array of instances sending the notification\n * @param {string} notification.action the stage name when the event happened like `beforedraw`\n * @memberof LifeCycleManager\n */\n _notify (composition, notification) {\n const stage = notification.action;\n const eventName = `${composition}.${stage}`;\n\n // resolves promise with the notification object\n this._resolvePromise(eventName, notification);\n\n // get the promise from the promise map\n const promise = this.retrieve(eventName);\n\n if (this._lifeCycles[composition]) {\n if (this._lifeCycles[composition][stage]) {\n // if user given call back exists, then call with promise\n this._callLifeCycleCallback(composition, stage, promise);\n } else {\n // otherwise cache the promise\n this._cachePromise(composition, stage, promise);\n }\n } else {\n this._cachePromise(composition, stage, promise);\n }\n }\n\n /**\n * Calls the user's callback with callback\n *\n * @param {string} composition name of the compositon like `canvas`\n * @param {string} stage the stage name when the event happened like `beforedraw`\n * @param {promise} promise promise that is passed to the user\n * @memberof LifeCycleManager\n */\n _callLifeCycleCallback (composition, stage, promise) {\n const eventName = `${composition}.${stage}`;\n this._lifeCycles[composition][stage](promise);\n this._resetTargetPromise(eventName);\n }\n\n /**\n * Try to clear the cached promsies once we have\n * macthed callbacks from the user\n *\n * @memberof LifeCycleManager\n */\n _releasePromisesFromCache () {\n const compositions = Object.keys(this._unreleasedLifeCycles);\n compositions.forEach((composition) => {\n const stages = Object.keys(this._unreleasedLifeCycles[composition]);\n stages.forEach((stage) => {\n if (this._lifeCycles[composition]) {\n if (this._lifeCycles[composition][stage]) {\n // take the promise from unreleased lifeCycles\n const promise = this._unreleasedLifeCycles[composition][stage];\n // call the user given callback with that promise\n this._callLifeCycleCallback(composition, stage, promise);\n // delete promise from unreleased lifeCycles\n delete this._unreleasedLifeCycles[composition][stage];\n }\n }\n });\n });\n }\n\n /**\n * Cache the promise in the map. This cache\n * then get consumed if we get user callbacks\n * @param {string} composition name of the compositon like `canvas`\n * @param {string} stage the stage name when the event happened like `beforedraw`\n * @param {promise} promise promise that is passed to the user\n * @memberof LifeCycleManager\n */\n _cachePromise (composition, stage, promise) {\n if (!hasOwn(this._unreleasedLifeCycles, composition)) {\n this._unreleasedLifeCycles[composition] = {};\n }\n\n if (!hasOwn(this._unreleasedLifeCycles[composition], stage)) {\n this._unreleasedLifeCycles[composition][stage] = {};\n }\n this._unreleasedLifeCycles[composition][stage] = promise;\n }\n\n /**\n * It register's the callbacks gievn the user\n *\n * @param {Object} [lifeCycles={}] a object with list of callbacks\n * @memberof LifeCycleManager\n */\n register (lifeCycles = {}) {\n this._lifeCycles = lifeCycles;\n // as we get all the callbacks, try to call them\n // from unreleased promise map\n this._releasePromisesFromCache();\n }\n\n /**\n * Reset the promise into pending state\n *\n * @param {string} eventName name of the event happening\n * @memberof LifeCycleManager\n */\n _resetTargetPromise (eventName) {\n setTimeout(() => {\n this._notifiers[eventName] = resolver;\n this._promises.set(eventName, this._makeNotifierPromise(eventName));\n }, 0);\n }\n}\n","import LifeCycleManager from './lifecycle-manager';\n\nexport default LifeCycleManager;\n","export const DRAG = 'drag';\nexport const HOVER = 'hover';\nexport const SELECTIONDRAG = 'selectiondrag';\nexport const CLICK = 'click';\nexport const LONGTOUCH = 'longtouch';\nexport const TOUCHDRAG = 'touchdrag';\nexport const ALL_ACTIONS = '*';\n","const SELECTION_NEW_ENTRY = 1;\nconst SELECTION_NEW_EXIT = -1;\nconst SELECTION_NULL = 0;\nconst SELECTION_OLD_ENTRY = 2;\nconst SELECTION_OLD_EXIT = -2;\n\nexport {\n SELECTION_NEW_ENTRY,\n SELECTION_NEW_EXIT,\n SELECTION_NULL,\n SELECTION_OLD_ENTRY,\n SELECTION_OLD_EXIT\n};\n","import {\n SELECTION_NEW_ENTRY, SELECTION_NEW_EXIT, SELECTION_NULL, SELECTION_OLD_ENTRY, SELECTION_OLD_EXIT\n} from '../enums/selection';\n/* eslint-disable guard-for-in */\n\n/**\n * This component is used to keep track of the row tuples of the data which gets added and removed.\n * @class SelectionSet\n */\nclass SelectionSet {\n /**\n * Creates an instance of selection set\n * @param {Array.} completeSet Set of unique ids.\n */\n constructor (completeSet, _volatile) {\n this.completeSet = completeSet;\n this._set = completeSet.reduce((obj, key) => {\n obj[key] = SELECTION_NULL;\n return obj;\n }, {});\n this._volatile = _volatile;\n this._completeSetCount = completeSet.length;\n this._lockedSelection = {};\n this._resetted = true;\n }\n\n /**\n * Adds a set of ids to the selection set.\n * @param {Array.} ids Array of unique ids\n * @return {SelectionSet} Instance of selection set.\n */\n add (ids) {\n this._resetted = false;\n\n const set = this._set;\n // from exitset to entryset\n ids.forEach((i) => {\n set[i] = SELECTION_NEW_ENTRY;\n });\n\n for (const key in set) {\n if (set[key] !== SELECTION_NEW_ENTRY && set[key] !== SELECTION_OLD_ENTRY) {\n set[key] = set[key] < 0 ? SELECTION_OLD_EXIT : SELECTION_NEW_EXIT;\n }\n }\n return this;\n }\n\n /**\n * Adds a set of ids to the selection set.\n * @param {Array.} ids Array of unique ids\n * @return {SelectionSet} Instance of selection set.\n */\n update (ids) {\n const set = this._set;\n // from exitset to entryset\n ids.forEach((i) => {\n set[i] = SELECTION_OLD_ENTRY;\n });\n\n return this;\n }\n\n /**\n * Adds a set of ids to the selection set.\n * @param {Array.} ids Array of unique ids\n * @return {SelectionSet} Instance of selection set.\n */\n updateEntry () {\n const set = this._set;\n\n // from exitset to entryset\n for (const key in set) {\n set[key] = set[key] === SELECTION_NEW_ENTRY ? SELECTION_OLD_ENTRY : set[key];\n }\n return this;\n }\n\n /**\n * Adds a set of ids to the selection set.\n * @param {Array.} ids Array of unique ids\n * @return {SelectionSet} Instance of selection set.\n */\n updateExit () {\n const set = this._set;\n // from exitset to entryset\n for (const key in set) {\n set[key] = set[key] === SELECTION_NEW_EXIT ? SELECTION_OLD_EXIT : set[key];\n }\n return this;\n }\n\n /**\n * Removes the ids from the selection set.\n * @param {Array.} ids Array of unique ids\n * @return {SelectionSet} Instance of selection set\n */\n remove (ids) {\n this._resetted = false;\n\n const set = this._set;\n ids.forEach((i) => {\n set[i] = SELECTION_NEW_EXIT;\n });\n\n for (const key in set) {\n if (set[key] !== SELECTION_NEW_EXIT && set[key] !== SELECTION_OLD_EXIT) {\n set[key] = set[key] === 0 ? SELECTION_NEW_ENTRY : SELECTION_OLD_ENTRY;\n }\n }\n\n return this;\n }\n\n getSets () {\n const set = this._set;\n const retObj = {\n entrySet: [[], []],\n exitSet: [[], []],\n completeSet: []\n };\n\n for (const key in set) {\n if (set[key] > 0) {\n set[key] === SELECTION_OLD_ENTRY && retObj.entrySet[0].push(key);\n set[key] === SELECTION_NEW_ENTRY && retObj.entrySet[1].push(key);\n } else if (set[key] < 0) {\n set[key] === SELECTION_OLD_EXIT && retObj.exitSet[0].push(key);\n set[key] === SELECTION_NEW_EXIT && retObj.exitSet[1].push(key);\n }\n retObj.completeSet.push(key);\n }\n\n ['entrySet', 'exitSet'].forEach((type) => {\n retObj[type] = retObj[type].map(e => e.map(Number));\n });\n retObj.completeSet = retObj.completeSet.map(Number);\n\n return retObj;\n }\n\n /**\n * Resets the selection set to initial state. It sets the value of every unique id value to\n * null in the selection set.\n * @return {SelectionSet} Instance of selection set.\n */\n reset (ids) {\n const set = this._set;\n if (ids) {\n ids.forEach((i) => {\n set[i] = SELECTION_NULL;\n });\n } else {\n const lockedSel = this._lockedSelection;\n for (const key in set) {\n if (!(key in lockedSel)) {\n set[key] = SELECTION_NULL;\n }\n }\n }\n this._resetted = true;\n return this;\n }\n\n /**\n * Gets the set of ids which are added in the selection set.\n * @return {Array.} Array of unique ids\n */\n getEntrySet () {\n const set = this._set;\n const addSet = [];\n\n for (const key in set) {\n set[key] === SELECTION_NEW_ENTRY && addSet.push(key);\n }\n\n return addSet;\n }\n\n /**\n * Returns a set of unique ids which are already present in entry set\n * @param {Array} addSet Array of unique ids which are added\n *\n * @return {Array} Array of unique ids which are already in old entry set or new entry set\n */\n getExistingEntrySet (addSet) {\n const set = this._set;\n return addSet.filter(d => set[d] === SELECTION_NEW_ENTRY || set[d] === SELECTION_OLD_ENTRY);\n }\n\n getExistingExitSet (removeSet) {\n const set = this._set;\n return removeSet.filter(d => set[d] === SELECTION_NEW_EXIT || set[d] === SELECTION_OLD_EXIT);\n }\n\n /**\n * Gets the set of ids which are added in the selection set.\n * @return {Array.} Array of unique ids\n */\n getOldEntry () {\n const set = this._set;\n const updateSet = [];\n\n for (const key in set) {\n set[key] === SELECTION_OLD_ENTRY && updateSet.push(key);\n }\n return updateSet;\n }\n\n /**\n * Gets the set of ids which are added in the selection set.\n * @return {Array.} Array of unique ids\n */\n getOldExit () {\n const set = this._set;\n const updateSet = [];\n\n for (const key in set) {\n set[key] === SELECTION_OLD_EXIT && updateSet.push(key);\n }\n\n return updateSet;\n }\n\n /**\n * Gets the set of ids which are in the remove set.\n * @return {Array.} Array of unique ids\n */\n getExitSet () {\n const set = this._set;\n const removeSet = [];\n\n for (const key in set) {\n set[key] === SELECTION_NEW_EXIT && removeSet.push(key);\n }\n return removeSet;\n }\n\n getCompleteSet () {\n const set = this._set;\n const completeSet = [];\n\n for (const key in set) {\n completeSet.push(key);\n }\n\n return completeSet;\n }\n\n getCompleteSetCount () {\n return this._completeSetCount;\n }\n\n resetted () {\n return this._resetted;\n }\n\n /**\n * Swaps the add set and remove set in the selection set.\n * @return {SelectionSet} Instance of selection set.\n */\n toggle () {\n const set = this._set;\n\n for (const key in set) {\n if (set[key] === SELECTION_NEW_ENTRY) {\n set[key] = SELECTION_NEW_EXIT;\n } else if (set[key] === SELECTION_NEW_EXIT) {\n set[key] = SELECTION_NEW_ENTRY;\n } else if (set[key] === SELECTION_OLD_ENTRY) {\n set[key] = SELECTION_OLD_EXIT;\n } else {\n set[key] = SELECTION_OLD_ENTRY;\n }\n }\n\n return this;\n }\n}\n\nexport default SelectionSet;\n","import { clone } from 'muze-utils';\nimport * as SELECTION from '../enums/selection';\n\nexport const initializeSideEffects = (context, sideEffects) => {\n const sideEffectsMap = context._sideEffects;\n\n sideEffects = sideEffects instanceof Array ? sideEffects : Object.values(sideEffects);\n sideEffects.forEach((SideEffect) => {\n const sideEffectInstance = sideEffectsMap[SideEffect.formalName()];\n sideEffectsMap[SideEffect.formalName()] = sideEffectInstance || new SideEffect(context);\n });\n return sideEffectsMap;\n};\n\nexport const initializeBehaviouralActions = (context, actions) => {\n const dispatchableBehaviours = {};\n\n actions = actions instanceof Array ? actions : Object.values(actions);\n actions.forEach((Action) => {\n dispatchableBehaviours[Action.formalName()] = new Action(context);\n });\n return dispatchableBehaviours;\n};\n\nexport const initializePhysicalActions = (context, actions) => {\n const physicalActions = {};\n\n for (const name in actions) {\n if (!({}).hasOwnProperty.call(name, actions)) {\n physicalActions[name] = actions[name](context);\n }\n }\n return physicalActions;\n};\n\nexport const changeSideEffectAvailability = (context, fn, toEnable) => {\n const sideEffects = context.sideEffects();\n for (const key in sideEffects) {\n if ({}.hasOwnProperty.call(sideEffects, key)) {\n let change = true;\n if (fn && fn(key) === false) {\n change = false;\n }\n if (change) {\n toEnable ? sideEffects[key].enable() : sideEffects[key].disable();\n }\n }\n }\n};\n\nexport const getMergedSet = set => [...new Set([...set[0], ...set[1]])];\n\nexport const getSourceFields = (propagationInf, criteria = {}) => {\n const sourceIdentifiers = propagationInf.sourceIdentifiers;\n let sourceFields;\n if (sourceIdentifiers) {\n sourceFields = sourceIdentifiers.getSchema().map(d => d.name);\n } else if (criteria instanceof Array) {\n sourceFields = criteria[0];\n } else {\n sourceFields = Object.keys(criteria || {});\n }\n return sourceFields;\n};\n\nconst conditionsMap = {\n newEntry: [SELECTION.SELECTION_NEW_ENTRY],\n oldEntry: [SELECTION.SELECTION_OLD_ENTRY],\n mergedEnter: [SELECTION.SELECTION_NEW_ENTRY, SELECTION.SELECTION_OLD_ENTRY],\n newExit: [SELECTION.SELECTION_NEW_EXIT],\n oldExit: [SELECTION.SELECTION_OLD_EXIT],\n mergedExit: [SELECTION.SELECTION_NEW_EXIT, SELECTION.SELECTION_OLD_EXIT],\n complete: []\n};\n\nexport const getModelFromSet = (type, model, set) => {\n if (model) {\n return model.select((fields, i) =>\n (conditionsMap[type].some(condition => set[i] === condition)), {\n saveChild: false\n });\n }\n return null;\n};\n\nexport const getSetInfo = (type, set, config) => {\n let model = null;\n const filteredDataModel = config.filteredDataModel;\n const selectionSet = config.selectionSet;\n if (!config.propagationData) {\n if (selectionSet.resetted()) {\n model = null;\n } else {\n model = getModelFromSet(type, config.dataModel, config.selectionSet._set);\n }\n } else if (filteredDataModel) {\n model = type === 'mergedEnter' ? filteredDataModel[0] : filteredDataModel[1];\n }\n return {\n uids: set,\n length: set.length,\n model\n };\n};\n\nexport const getSideEffects = (behaviour, behaviourEffectMap) => {\n const sideEffects = [];\n for (const key in behaviourEffectMap) {\n const behaviours = key.split(',');\n const found = behaviours.some(d => d === behaviour);\n if (found) {\n sideEffects.push({\n effects: behaviourEffectMap[key],\n behaviours\n });\n }\n }\n return sideEffects;\n};\n\nexport const unionSets = (context, behaviours) => {\n let combinedSet = {};\n const models = {\n mergedEnter: null,\n mergedExit: null\n };\n behaviours.forEach((behaviour) => {\n const entryExitSet = context._entryExitSet[behaviour];\n if (entryExitSet) {\n combinedSet = Object.assign(combinedSet, clone(entryExitSet));\n ['mergedEnter', 'mergedExit'].forEach((type) => {\n const model = entryExitSet[type].model;\n let existingModel = models[type];\n if (!existingModel) {\n existingModel = models[type] = model;\n } else {\n existingModel = models[type] = model.union(existingModel);\n }\n combinedSet[type].model = existingModel;\n });\n }\n });\n return combinedSet;\n};\n","import {\n mergeRecursive,\n hasTouch,\n filterPropagationModel,\n FieldType,\n selectElement,\n isSimpleObject\n} from 'muze-utils';\nimport { ALL_ACTIONS } from './enums/actions';\nimport SelectionSet from './selection-set';\nimport {\n initializeBehaviouralActions,\n initializeSideEffects,\n changeSideEffectAvailability,\n initializePhysicalActions,\n unionSets,\n getSideEffects\n} from './helper';\n\n/**\n * Relient firebolt is responsible for dispatching behaviours. It has only behaviours which can be\n * dispatched without any physical action being triggered.\n */\nexport default class Firebolt {\n constructor (context, actions, sideEffects, behaviourEffectMap) {\n this.context = context;\n this._sideEffectDefinitions = {};\n this._sideEffects = {};\n this._propagationInf = {};\n this._actions = {\n behavioural: {},\n physical: {}\n };\n this._selectionSet = {};\n this._volatileSelectionSet = {};\n this._propagationFields = {};\n this._sourceSideEffects = {\n selectionBox: () => false\n };\n this._propagationBehaviourMap = {};\n this._sourceBehaviours = {};\n this._actionBehaviourMap = {};\n this._config = {};\n this._behaviourEffectMap = {};\n this._entryExitSet = {};\n this._actionHistory = {};\n this._queuedSideEffects = {};\n this._mappedActions = {};\n\n this.mapSideEffects(behaviourEffectMap);\n this.registerBehaviouralActions(actions.behavioural);\n this.registerSideEffects(sideEffects);\n this.registerPhysicalBehaviouralMap(actions.physicalBehaviouralMap);\n this.registerPhysicalActions(actions.physical);\n }\n\n config (...config) {\n if (config.length) {\n const conf = this._config = mergeRecursive(this._config, config[0]);\n const sideEffects = this.sideEffects();\n for (const key in sideEffects) {\n if ({}.hasOwnProperty.call(sideEffects, key)) {\n const sideEffectConf = conf[key];\n sideEffectConf && sideEffects[key].config(sideEffectConf);\n }\n }\n return this;\n }\n return this._config;\n }\n\n mapSideEffects (behEffectMap) {\n const behaviourEffectMap = this._behaviourEffectMap;\n for (const key in behEffectMap) {\n if ({}.hasOwnProperty.call(behEffectMap, key)) {\n const sideEffects = behEffectMap[key] || [];\n let preventDefaultActions = false;\n let effectNames;\n if (isSimpleObject(sideEffects)) {\n effectNames = sideEffects.effects;\n preventDefaultActions = sideEffects.preventDefaultActions;\n } else {\n effectNames = sideEffects;\n }\n !behaviourEffectMap[key] && (behaviourEffectMap[key] = []);\n this._behaviourEffectMap[key] = [...new Set(preventDefaultActions ? effectNames :\n [...behaviourEffectMap[key], ...effectNames])];\n }\n }\n return this;\n }\n\n registerBehaviouralActions (actions) {\n const behaviours = initializeBehaviouralActions(this, actions);\n this.prepareSelectionSets(behaviours);\n Object.assign(this._actions.behavioural, behaviours);\n return this;\n }\n\n prepareSelectionSets () {\n return this;\n }\n\n registerSideEffects (sideEffects) {\n for (const key in sideEffects) {\n this._sideEffectDefinitions[sideEffects[key].formalName()] = sideEffects[key];\n }\n return this;\n }\n\n applySideEffects (sideEffects, selectionSet, payload) {\n const sideEffectStore = this.sideEffects();\n const actionHistory = this._actionHistory;\n const queuedSideEffects = this._queuedSideEffects;\n sideEffects.forEach((sideEffect) => {\n let options;\n let name;\n const effects = sideEffect.effects;\n const behaviours = sideEffect.behaviours;\n const combinedSet = unionSets(this, behaviours, selectionSet);\n effects.forEach((effect) => {\n if (typeof effect === 'object') {\n name = effect.name;\n options = effect.options;\n } else {\n name = effect;\n }\n\n const sideEffectInstance = sideEffectStore[name];\n if (sideEffectInstance.isEnabled()) {\n if (!sideEffectInstance.constructor.mutates() &&\n Object.values(actionHistory).some(d => d.isMutableAction)) {\n queuedSideEffects[`${name}-${behaviours.join()}`] = {\n name,\n params: [combinedSet, payload, options]\n };\n } else {\n this.dispatchSideEffect(name, combinedSet, payload, options);\n }\n }\n });\n });\n return this;\n }\n\n dispatchSideEffect (name, selectionSet, payload, options = {}) {\n const sideEffectStore = this.sideEffects();\n const sideEffect = sideEffectStore[name];\n let disable = false;\n if (options.filter && options.filter(sideEffect)) {\n disable = true;\n }\n !disable && sideEffectStore[name].apply(selectionSet, payload, options);\n }\n\n registerPropagationBehaviourMap (map) {\n this._propagationBehaviourMap = Object.assign(this._propagationBehaviourMap, map || {});\n return this;\n }\n\n dispatchBehaviour (behaviour, payload, propagationInfo = {}) {\n const propagate = propagationInfo.propagate !== undefined ? propagationInfo.propagate : true;\n const behaviouralActions = this._actions.behavioural;\n const action = behaviouralActions[behaviour];\n const behaviourEffectMap = this._behaviourEffectMap;\n const sideEffects = getSideEffects(behaviour, behaviourEffectMap);\n this._propagationInf = propagationInfo;\n\n if (action) {\n const selectionSet = action.dispatch(payload);\n const propagationSelectionSet = this.getPropagationSelectionSet(selectionSet);\n this._entryExitSet[behaviour] = propagationSelectionSet;\n const shouldApplySideEffects = this.shouldApplySideEffects(propagate);\n\n if (propagate) {\n this.propagate(behaviour, payload, selectionSet.find(d => d.sourceSelectionSet), sideEffects);\n }\n if (shouldApplySideEffects) {\n const applicableSideEffects = this.getApplicableSideEffects(sideEffects, payload, propagationInfo);\n this.applySideEffects(applicableSideEffects, propagationSelectionSet, payload);\n }\n }\n\n return this;\n }\n\n getPropagationSelectionSet (selectionSet) {\n return selectionSet.find(d => !d.sourceSelectionSet);\n }\n\n shouldApplySideEffects () {\n return true;\n }\n\n changeBehaviourStateOnPropagation (behaviour, value) {\n if (value instanceof Function) {\n this._sourceBehaviours[behaviour] = value;\n } else {\n this._sourceBehaviours[behaviour] = () => value;\n }\n return this;\n }\n\n changeSideEffectStateOnPropagation (sideEffect, value) {\n if (value instanceof Function) {\n this._sourceSideEffects[sideEffect] = value;\n } else {\n this._sourceSideEffects[sideEffect] = () => value;\n }\n }\n\n propagate () {\n return this;\n }\n\n sideEffects (...sideEffects) {\n if (sideEffects.length) {\n this._sideEffects = sideEffects[0];\n return this;\n }\n return this._sideEffects;\n }\n\n enableSideEffects (fn) {\n changeSideEffectAvailability(this, fn, true);\n return this;\n }\n\n disableSideEffects (fn) {\n changeSideEffectAvailability(this, fn, false);\n return this;\n }\n\n dissociateBehaviour (behaviour, physicalAction) {\n const actionBehaviourMap = this._actionBehaviourMap;\n for (const key in actionBehaviourMap) {\n if (key === physicalAction) {\n const behaviourMap = actionBehaviourMap[key];\n behaviourMap.behaviours = behaviourMap.behaviours.filter(d => d !== behaviour);\n }\n }\n\n return this;\n }\n\n dissociateSideEffect (sideEffect, behaviour) {\n const behaviourEffectMap = this._behaviourEffectMap;\n behaviourEffectMap[behaviour] = behaviourEffectMap[behaviour].filter(d => (d.name || d) !== sideEffect);\n return this;\n }\n\n getApplicableSideEffects (sideEffects) {\n return sideEffects;\n }\n\n attachPropagationListener (dataModel) {\n dataModel.unsubscribe('propagation');\n dataModel.on('propagation', this.onDataModelPropagation());\n return this;\n }\n\n onDataModelPropagation () {\n return (propValue) => {\n const payload = propValue.payload;\n const action = payload.action;\n\n this.dispatchBehaviour(action, payload, {\n propagate: false\n });\n };\n }\n\n createSelectionSet (uniqueIds, behaviouralActions) {\n const behaviours = behaviouralActions || this._actions.behavioural;\n const selectionSet = this._selectionSet;\n const volatileSelectionSet = this._volatileSelectionSet;\n\n for (const key in behaviours) {\n if ({}.hasOwnProperty.call(behaviours, key)) {\n selectionSet[key] = new SelectionSet(uniqueIds);\n volatileSelectionSet[key] = new SelectionSet(uniqueIds, true);\n }\n }\n this._volatileSelectionSet = volatileSelectionSet;\n this.selectionSet(selectionSet);\n return this;\n }\n\n selectionSet (...selectionSet) {\n if (selectionSet.length) {\n this._selectionSet = selectionSet[0];\n return this;\n }\n return this._selectionSet;\n }\n\n initializeSideEffects () {\n const sideEffectDefinitions = this._sideEffectDefinitions;\n this.sideEffects(initializeSideEffects(this, sideEffectDefinitions));\n return this;\n }\n\n registerPhysicalActions (actions) {\n const initedActions = initializePhysicalActions(this, actions);\n Object.assign(this._actions.physical, initedActions);\n return this;\n }\n\n propagateWith (action, fields, append = false) {\n const behaviouralActions = this._actions.behavioural;\n if (fields.length) {\n if (action === ALL_ACTIONS) {\n for (const key in behaviouralActions) {\n this._propagationFields[key] = {\n fields,\n append\n };\n }\n } else {\n this._propagationFields[action] = {\n fields,\n append\n };\n }\n return this;\n }\n return this._propagationFields;\n }\n\n /**\n * Map actions and behaviours\n * @return {Firebolt} Firebolt instance\n */\n mapActionsAndBehaviour () {\n const initedPhysicalActions = this._actions.physical;\n const map = this._actionBehaviourMap;\n const mappedActions = this._mappedActions;\n\n for (const action in map) {\n if (!({}).hasOwnProperty.call(action, map)) {\n let target;\n const mapObj = map[action];\n target = mapObj.target;\n const touch = mapObj.touch;\n if (!target) {\n target = this.context.getDefaultTargetContainer();\n }\n const bind = hasTouch() ? touch === true || touch === undefined : !touch;\n const keyName = `${action}-${mapObj.behaviours.join()}`;\n bind && !mappedActions[keyName] && this.bindActionWithBehaviour(initedPhysicalActions[action],\n target, mapObj.behaviours);\n mappedActions[keyName] = true;\n }\n }\n return this;\n }\n\n registerPhysicalBehaviouralMap (map) {\n Object.assign(this._actionBehaviourMap, map);\n return this;\n }\n\n /**\n * Binds a target element with an action.\n *\n * @param {Function} action Action method\n * @param {string} target Class name of element\n * @param {Array} behaviourList Array of behaviours\n * @return {FireBolt} Instance of firebolt\n */\n bindActionWithBehaviour (action, targets, behaviourList) {\n if (typeof (targets) === 'string') {\n targets = [targets];\n }\n targets.forEach((target) => {\n const mount = this.context.mount();\n const nodes = target.node instanceof Function ? target : selectElement(mount).selectAll(target);\n if (behaviourList.length && !nodes.empty()) {\n if (nodes instanceof Array) {\n nodes.forEach((node) => {\n action(selectElement(node), behaviourList);\n });\n } else {\n action(nodes, behaviourList);\n }\n }\n });\n return this;\n }\n\n getPropagationInf () {\n return this._propagationInf;\n }\n\n getAddSetFromCriteria (criteria, propagationInf = {}) {\n const context = this.context;\n const filteredDataModel = propagationInf.data ? propagationInf.data :\n context.getDataModelFromIdentifiers(criteria, 'all');\n const xFields = context.fields().x || [];\n const yFields = context.fields().y || [];\n const xMeasures = xFields.every(field => field.type() === FieldType.MEASURE);\n const yMeasures = yFields.every(field => field.type() === FieldType.MEASURE);\n return {\n model: filteredDataModel,\n uids: criteria === null ? null : (propagationInf.data ? filterPropagationModel(this.getFullData(),\n propagationInf.data[0], xMeasures && yMeasures).getData().uids : filteredDataModel[0].getData().uids)\n };\n }\n\n getSelectionSets (action) {\n const sourceId = this.context.id();\n const propagationInf = this._propagationInf || {};\n const propagationSource = propagationInf.sourceId;\n let applicableSelectionSets = [];\n if (propagationSource !== sourceId) {\n applicableSelectionSets = [this._volatileSelectionSet[action]];\n }\n\n if (propagationSource) {\n applicableSelectionSets.push(this.selectionSet()[action]);\n }\n return applicableSelectionSets;\n }\n\n getFullData () {\n return this.context.data();\n }\n\n resetted () {\n return this._resetted;\n }\n\n getEntryExitSet (behaviour) {\n return this._entryExitSet[behaviour];\n }\n}\n","import { getSetInfo, getMergedSet, getSourceFields } from '../../helper';\n\nexport default class GenericBehaviour {\n constructor (firebolt) {\n this.firebolt = firebolt;\n this._enabled = true;\n }\n\n dispatch (payload) {\n const criteria = payload.criteria;\n const firebolt = this.firebolt;\n const formalName = this.constructor.formalName();\n const selectionSets = firebolt.getSelectionSets(formalName);\n const {\n model: filteredDataModel,\n uids\n } = this.firebolt.getAddSetFromCriteria(criteria, this.firebolt.getPropagationInf());\n const entryExitSets = selectionSets.map((selectionSet) => {\n this.setSelectionSet(uids, selectionSet);\n return this.getEntryExitSet(selectionSet, filteredDataModel, payload);\n });\n\n return entryExitSets;\n }\n\n setSelectionSet () {\n return this;\n }\n\n getEntryExitSet (selectionSet, filteredDataModel, payload) {\n const {\n entrySet,\n exitSet,\n completeSet\n } = selectionSet.getSets();\n const propagationInf = this.firebolt.getPropagationInf();\n const dataModel = this.firebolt.getFullData();\n const setConfig = {\n isSourceFieldPresent: propagationInf.isSourceFieldPresent,\n dataModel,\n filteredDataModel,\n propagationData: propagationInf.data,\n selectionSet\n };\n\n return {\n entrySet: [getSetInfo('oldEntry', entrySet[0], setConfig),\n getSetInfo('newEntry', entrySet[1], setConfig)],\n exitSet: [getSetInfo('oldEntry', exitSet[0], setConfig),\n getSetInfo('newExit', exitSet[1], setConfig)],\n mergedEnter: getSetInfo('mergedEnter', getMergedSet(entrySet), setConfig),\n mergedExit: getSetInfo('mergedExit', getMergedSet(exitSet), setConfig),\n completeSet: getSetInfo('complete', completeSet, setConfig),\n isSourceFieldPresent: propagationInf.isSourceFieldPresent,\n fields: getSourceFields(propagationInf, payload.criteria),\n sourceSelectionSet: selectionSet._volatile === true\n };\n }\n\n static mutates () {\n return false;\n }\n\n enable () {\n this._enabled = true;\n }\n\n disable () {\n this._enabled = false;\n }\n\n isEnabled () {\n return this._enabled;\n }\n}\n\n","import GenericBehaviour from './generic';\nimport { getMergedSet } from '../../helper';\nimport * as SELECTION from '../../enums/selection';\n\nexport default class VolatileBehaviour extends GenericBehaviour {\n setSelectionSet (addSet, selectionSet) {\n if (addSet === null) {\n selectionSet.reset();\n } else if (addSet.length) {\n // new add set\n const existingAddSet = addSet.filter(d => selectionSet._set[d] === SELECTION.SELECTION_NEW_ENTRY\n || selectionSet._set[d] === SELECTION.SELECTION_OLD_ENTRY);\n selectionSet.updateExit();\n const { entrySet } = selectionSet.getSets();\n selectionSet.reset(getMergedSet(entrySet));\n selectionSet.add(addSet);\n selectionSet.update(existingAddSet);\n } else {\n selectionSet.remove(selectionSet.getCompleteSet());\n }\n }\n}\n","export const BRUSH = 'brush';\nexport const HIGHLIGHT = 'highlight';\nexport const TOOLTIP = 'tooltip';\nexport const FILTER = 'filter';\nexport const SELECT = 'select';\n","import VolatileBehaviour from './volatile';\nimport { HIGHLIGHT } from '../../enums/behaviours';\n\nexport default class HighlightBehaviour extends VolatileBehaviour {\n static formalName () {\n return HIGHLIGHT;\n }\n}\n","import VolatileBehaviour from './volatile';\nimport * as BEHAVIOURNAMES from '../../enums/behaviours';\n\n/**\n * This is the behaviour for brushing a region on the chart. It accepts a payload\n * which contains the x and y range of the data and other configuration. It will then\n * create a selection box from the range and select the points which fall within the range.\n */\nexport default class BrushBehaviour extends VolatileBehaviour {\n static formalName () {\n return BEHAVIOURNAMES.BRUSH;\n }\n}\n","import VolatileBehaviour from './volatile';\nimport { FILTER } from '../../enums/behaviours';\n\nexport default class FilterBehaviour extends VolatileBehaviour {\n static formalName () {\n return FILTER;\n }\n\n static mutates () {\n return true;\n }\n}\n","import GenericBehaviour from './generic';\nimport { getMergedSet } from '../../helper';\nimport * as SELECTION from '../../enums/selection';\n\nexport default class PersistentBehaviour extends GenericBehaviour {\n setSelectionSet (addSet, selectionSet) {\n if (addSet === null) {\n selectionSet.reset();\n } else if (addSet.length) {\n const propagationInf = this.firebolt.getPropagationInf();\n // new add set\n const existingAddSet = addSet.filter(d => selectionSet._set[d] === SELECTION.SELECTION_NEW_ENTRY\n || selectionSet._set[d] === SELECTION.SELECTION_OLD_ENTRY);\n if (propagationInf.propagate === false) {\n selectionSet.updateExit();\n const { entrySet } = selectionSet.getSets();\n selectionSet.reset(getMergedSet(entrySet));\n selectionSet.add(addSet);\n selectionSet.update(existingAddSet);\n } else {\n // existing add set\n if (existingAddSet.length) {\n selectionSet.updateExit();\n selectionSet.remove(existingAddSet);\n } else {\n selectionSet.updateEntry();\n selectionSet.add(addSet);\n }\n const { exitSet } = selectionSet.getSets();\n const mergedExitSet = getMergedSet(exitSet);\n const completeSetCount = selectionSet.getCompleteSet().length;\n if (mergedExitSet.length === completeSetCount) {\n selectionSet.reset();\n }\n }\n } else {\n selectionSet.remove(selectionSet.getCompleteSet());\n }\n\n return this;\n }\n}\n","import PersistentBehaviour from './persistent';\nimport { SELECT } from '../../enums/behaviours';\n\nexport default class SelectBehaviour extends PersistentBehaviour {\n static formalName () {\n return SELECT;\n }\n}\n\n","import { DimensionSubtype, FieldType } from 'muze-utils';\n/**\n * Gets the drag action configuration\n * @param {VisualUnit} instance instance of visual unit\n * @param {Object} config x y positions\n * @return {Object} Payload of behaviour\n*/\n/* istanbul ignore next */ const getDragActionConfig = (sourceInfo, config, fieldsConfig) => {\n if (!(sourceInfo.axes.x || sourceInfo.axes.y)) {\n return {\n criteria: null\n };\n }\n\n const axes = sourceInfo.axes;\n const xAxis = axes.x[0];\n const yAxis = axes.y[0];\n const axisFields = sourceInfo.fields;\n const xField = axisFields.x[0].getMembers()[0];\n const yField = axisFields.y[0].getMembers()[0];\n const xFieldType = fieldsConfig[xField].def.subtype ? fieldsConfig[xField].def.subtype :\n fieldsConfig[xField].def.type;\n const yFieldType = fieldsConfig[yField].def.subtype ? fieldsConfig[yField].def.subtype :\n fieldsConfig[yField].def.type;\n const dimensions = {};\n const stPos = config.startPos;\n const endPos = config.endPos;\n\n if (stPos.x === endPos.x && stPos.y === endPos.y) {\n return {\n criteria: null\n };\n }\n\n const dragDim = xFieldType === FieldType.MEASURE ? (yFieldType === FieldType.MEASURE ? ['x', 'y'] : ['y']) : ['x'];\n const criteria = {};\n const isXDimension = xFieldType === DimensionSubtype.CATEGORICAL;\n const isYDimension = yFieldType === DimensionSubtype.CATEGORICAL;\n const xRange = xAxis.constructor.type() === 'band' ? xAxis.scale().invertExtent(stPos.x, endPos.x) :\n xAxis.invert(stPos.x, endPos.x);\n const yRange = yAxis.constructor.type() === 'band' ? yAxis.scale().invertExtent(stPos.y, endPos.y) :\n yAxis.invert(stPos.y, endPos.y);\n const selectedDomains = {\n x: stPos.x === endPos.x ? [] : (isXDimension ? xRange : xRange.sort((a, b) => a - b)),\n y: stPos.y === endPos.y ? [] : (isYDimension ? yRange : yRange.sort((a, b) => a - b))\n };\n const rangeObj = {};\n\n if (dragDim.length === 2) {\n rangeObj[xField] = selectedDomains.x;\n rangeObj[yField] = selectedDomains.y;\n if (xField === yField) {\n const xdom = selectedDomains.x;\n const ydom = selectedDomains.y;\n const min = xdom[0] > ydom[0] ? ydom : xdom;\n const max = min === ydom ? xdom : ydom;\n if (min[1] < max[0]) {\n rangeObj[xField] = [];\n } else {\n rangeObj[xField] = [max[0], min[1] < max[1] ? min[1] : max[1]];\n }\n dimensions.x = [stPos.x, endPos.x];\n dimensions.y = [stPos.y, endPos.y];\n }\n } else {\n criteria[dragDim[0]] = selectedDomains[dragDim[0]] || [];\n\n if (dragDim[0] === 'x') {\n rangeObj[xField] = criteria.x;\n if (xFieldType === DimensionSubtype.CATEGORICAL) {\n dimensions.x = (config.snap && stPos.x !== endPos.x) ? xAxis.getNearestRange(stPos.x, endPos.x) :\n [stPos.x, endPos.x];\n }\n } else {\n rangeObj[yField] = criteria.y;\n if (yFieldType === DimensionSubtype.CATEGORICAL) {\n dimensions.y = (config.snap && stPos.y !== endPos.y) ? yAxis.getNearestRange(stPos.y, endPos.y) :\n [stPos.y, endPos.y];\n }\n }\n }\n\n return {\n criteria: rangeObj,\n dimensions\n };\n};\n\nexport default getDragActionConfig;\n","import {\n getEvent,\n getD3Drag\n } from 'muze-utils';\n\nimport getDragActionConfig from './drag-action-config';\n\n/**\n * Adds dragging action to the target element.\n * @param {VisualUnit} instance Instance of visual unit.\n * @param {SVGElement} targetEl Element on which brushing action is needed.\n * @param {Array} behaviours Array of behaviours\n */\nexport const attachDragEvent = (targetEl, behaviours, firebolt, touch) => {\n let startPos = {};\n let endPos = {};\n let drawingInf;\n\n const d3Drag = getD3Drag();\n let touchStart;\n targetEl.call(d3Drag().on('start', () => {\n const event = getEvent();\n startPos = {\n x: event.x,\n y: event.y\n };\n drawingInf = firebolt.context.getDrawingContext();\n touchStart = new Date().getTime();\n }).on('drag', () => {\n const event = getEvent();\n endPos = {\n x: event.x,\n y: event.y\n };\n if (touch && Math.abs(startPos.x - endPos.x) <= 5) {\n return;\n }\n endPos.x = Math.max(0, Math.min(endPos.x, drawingInf.width));\n endPos.y = Math.max(0, Math.min(endPos.y, drawingInf.height));\n\n const payload = getDragActionConfig(firebolt.context.getSourceInfo(), {\n startPos,\n endPos\n }, firebolt.context.data().getFieldsConfig());\n behaviours.forEach(beh => firebolt.dispatchBehaviour(beh, payload));\n }).on('end', () => {\n const event = getEvent();\n endPos = {\n x: event.x,\n y: event.y\n };\n const duration = new Date().getTime() - touchStart;\n\n if (touch && duration > 100 && Math.abs(startPos.x - endPos.x) <= 5) {\n return;\n }\n endPos.x = Math.max(0, Math.min(endPos.x, drawingInf.width));\n endPos.y = Math.max(0, Math.min(endPos.y, drawingInf.height));\n\n const payload = getDragActionConfig(firebolt.context.getSourceInfo(), {\n startPos,\n endPos,\n snap: true\n }, firebolt.context.data().getFieldsConfig());\n payload.dragEnd = true;\n behaviours.forEach(beh => firebolt.dispatchBehaviour(beh, payload));\n }));\n};\n\n","import { getClientPoint, getEvent } from 'muze-utils';\nimport { CONSOLIDATED, FRAGMENTED } from '../../enums/constants';\n\n/**\n * Adds mouse interactions to target element.\n * @param {Firebolt} instance instance of firebolt.\n * @param {SVGElement} targetEl Element on which the event listeners will be attached.\n * @param {Array} behaviours Array of behaviours\n */\n/* istanbul ignore next */ const hover = firebolt => (targetEl, behaviours) => {\n const dispatchBehaviour = function (args) {\n const event = getEvent();\n const context = firebolt.context;\n const tooltipConf = context.config().interaction.tooltip;\n const mode = tooltipConf.mode;\n const pos = getClientPoint(context.getDrawingContext().svgContainer, event);\n const nearestPoint = context.getNearestPoint(pos.x, pos.y, {\n getAllPoints: mode === CONSOLIDATED || mode === FRAGMENTED,\n data: args,\n event\n });\n const payload = {\n criteria: nearestPoint ? nearestPoint.id : null,\n showInPosition: nearestPoint.showInPosition,\n target: nearestPoint.target,\n position: pos,\n mode\n };\n\n behaviours.forEach(beh => firebolt.dispatchBehaviour(beh, payload));\n event.stopPropagation();\n };\n\n targetEl.on('mouseover', dispatchBehaviour)\n .on('mousemove', dispatchBehaviour)\n .on('mouseout', () => {\n behaviours.forEach(beh => firebolt.dispatchBehaviour(beh, {\n criteria: null\n }));\n });\n};\n\nexport default hover;\n","export const CLASSPREFIX = 'muze';\nexport const CONSOLIDATED = 'consolidated';\nexport const FRAGMENTED = 'fragmented';\n\n","import { getClientPoint } from 'muze-utils';\n\nexport const generatePayloadFromEvent = function (args, event, firebolt) {\n const context = firebolt.context;\n const pos = getClientPoint(context.getDrawingContext().svgContainer, event.touches ? event.touches[0] : event);\n const nearestPoint = context.getNearestPoint(pos.x, pos.y, {\n data: args,\n event\n });\n return {\n criteria: nearestPoint ? nearestPoint.id : null,\n showInPosition: nearestPoint.showInPosition,\n target: nearestPoint.target,\n position: pos\n };\n};\n","import { getEvent } from 'muze-utils';\nimport { generatePayloadFromEvent } from './helpers';\n\n/**\n * Adds mouse interactions to target element.\n * @param {VisualUnit} instance instance of visual unit.\n * @param {SVGElement} targetEl Element on which the event listeners will be attached.\n * @param {Array} behaviours Array of behaviours\n */\n/* istanbul ignore next */ const click = firebolt => (targetEl, behaviours) => {\n const dispatchBehaviour = function (args) {\n const event = getEvent();\n const payload = generatePayloadFromEvent(args, event, firebolt);\n behaviours.forEach(beh => firebolt.dispatchBehaviour(beh, payload));\n event.stopPropagation();\n };\n\n targetEl.on('click', dispatchBehaviour);\n};\nexport default click;\n","import drag from './drag';\nimport hover from './hover';\nimport { longtouch } from './longtouch';\nimport { touchdrag } from './touch-drag';\nimport * as ACTIONNAMES from '../../enums/actions';\nimport click from './click';\n\nexport const physicalActions = {\n [ACTIONNAMES.DRAG]: drag,\n [ACTIONNAMES.HOVER]: hover,\n [ACTIONNAMES.CLICK]: click,\n [ACTIONNAMES.LONGTOUCH]: longtouch,\n [ACTIONNAMES.TOUCHDRAG]: touchdrag\n};\n\n","import { attachDragEvent } from './helpers/drag-event';\n\n/**\n * Adds dragging action to the target element.\n * @param {VisualUnit} instance Instance of visual unit.\n * @param {SVGElement} targetEl Element on which brushing action is needed.\n * @param {Array} behaviours Array of behaviours\n */\n/* istanbul ignore next */ const drag = firebolt => (targetEl, behaviours) => {\n attachDragEvent(targetEl, behaviours, firebolt);\n};\n\nexport default drag;\n","/* global setTimeout */\nimport { getEvent } from 'muze-utils';\nimport { generatePayloadFromEvent } from './helpers';\n\n/**\n * Adds mouse interactions to target element.\n * @param {VisualUnit} instance instance of visual unit.\n * @param {SVGElement} targetEl Element on which the event listeners will be attached.\n * @param {Array} behaviours Array of behaviours\n */\nexport const longtouch = firebolt => (targetEl, behaviours) => {\n let event;\n let touchEnd;\n const dispatchBehaviour = function (args) {\n const payload = generatePayloadFromEvent(args, event, firebolt);\n behaviours.forEach(beh => firebolt.dispatchBehaviour(beh, payload));\n event.stopPropagation();\n };\n\n touchEnd = false;\n event = getEvent();\n targetEl.on('touchstart', (args) => {\n event = getEvent();\n touchEnd = false;\n setTimeout(() => {\n if (!touchEnd) {\n dispatchBehaviour(args);\n } else {\n behaviours.forEach(beh => firebolt.dispatchBehaviour(beh, {\n criteria: null\n }));\n }\n }, 100);\n }).on('touchend', () => {\n touchEnd = true;\n });\n};\n","import { attachDragEvent } from './helpers/drag-event';\n\n/**\n * Adds dragging action to the target element.\n * @param {VisualUnit} instance Instance of visual unit.\n * @param {SVGElement} targetEl Element on which brushing action is needed.\n * @param {Array} behaviours Array of behaviours\n */\nexport const touchdrag = firebolt => (targetEl, behaviours) => {\n attachDragEvent(targetEl, behaviours, firebolt, true);\n};\n\n","import { mergeRecursive, getUniqueId } from 'muze-utils';\n\nexport default class GenericSideEffect {\n constructor (firebolt) {\n this.firebolt = firebolt;\n this._enabled = true;\n this._strategy = 'default';\n this._config = {};\n this._id = getUniqueId();\n this._strategies = {};\n this.config(this.constructor.defaultConfig());\n }\n\n static defaultConfig () {\n return {};\n }\n\n static target () {\n return 'all';\n }\n\n static mutates () {\n return false;\n }\n\n config (...params) {\n if (params.length) {\n this._config = mergeRecursive(this._config, params[0]);\n return this;\n }\n return this._config;\n }\n\n disable () {\n this._enabled = false;\n return this;\n }\n\n enable () {\n this._enabled = true;\n return this;\n }\n\n isEnabled () {\n return this._enabled;\n }\n\n apply () {\n return this;\n }\n\n addStrategy (name, fn) {\n this._strategies[name] = fn;\n return this;\n }\n}\n","import GenericSideEffect from './generic';\n\nexport default class SurrogateSideEffect extends GenericSideEffect {\n applyInteractionStyle (set, config = {}, interactionType, apply) {\n const layers = this.firebolt.context.layers();\n layers.forEach(layer => layer.config().interactive !== false &&\n layer.applyInteractionStyle(interactionType, set.uids, apply));\n }\n}\n","import { makeElement } from 'muze-utils';\n\nimport GenericSideEffect from './generic';\n\nexport default class SpawnableSideEffect extends GenericSideEffect {\n createElement (container, elemType, data, className, callbacks) {\n return makeElement(container, elemType, data, className, callbacks);\n }\n\n drawingContext (...drawingContext) {\n if (drawingContext.length) {\n this._drawingContext = drawingContext[0];\n return this;\n }\n return this._drawingContext();\n }\n\n show () {\n return this;\n }\n\n hide () {\n return this;\n }\n}\n","import { selectElement } from 'muze-utils';\n\nexport const getBoxDimensionsFromPayload = (payload, axes, axisFields) => {\n let x1;\n let x2;\n let y1;\n let y2;\n let xRange;\n let yRange;\n let direction;\n const criteria = payload.criteria;\n const dimensions = payload.dimensions || {};\n const xDim = dimensions.x;\n const yDim = dimensions.y;\n\n if (criteria === null) {\n return null;\n }\n\n const xAxis = axes.x[0];\n const yAxis = axes.y[0];\n const xLinear = xAxis.constructor.type() === 'linear';\n const yLinear = yAxis.constructor.type() === 'linear';\n const xField = `${axisFields.x[0]}`;\n const yField = `${axisFields.y[0]}`;\n const xCriteria = criteria[xField];\n const yCriteria = criteria[yField];\n\n if (xCriteria && xCriteria[0] instanceof Array) {\n xRange = xCriteria[0];\n yRange = xCriteria[1];\n } else {\n xRange = xCriteria || [];\n yRange = yCriteria || [];\n }\n direction = xCriteria && yCriteria ? 'both' : (xCriteria ? 'vertical' : 'horizontal');\n if (xRange && xRange.length) {\n if ((yAxis.constructor.type() === 'band' && xLinear)) {\n x1 = x2 = undefined;\n direction = 'horizontal';\n } else {\n const domain = xAxis.domain();\n const bandScale = xAxis.constructor.type() === 'band';\n let x1Val;\n let x2Val;\n if (bandScale) {\n let x1DomainIndex = domain.indexOf(xRange[0]);\n let x2DomainIndex = domain.indexOf(xRange[xRange.length - 1]);\n [x1DomainIndex, x2DomainIndex] = [x1DomainIndex, x2DomainIndex].sort((a, b) => a - b);\n x1Val = domain[x1DomainIndex];\n x2Val = domain[x2DomainIndex];\n } else {\n x1Val = xRange[0];\n x2Val = xRange[xRange.length - 1];\n }\n x1 = xAxis.getScaleValue(x1Val);\n x2 = xAxis.getScaleValue(x2Val);\n x2 += bandScale ? xAxis.getUnitWidth() : 0;\n }\n } else {\n x1 = x2 = undefined;\n }\n if (yRange && yRange.length) {\n if ((xAxis.constructor.type() === 'band' && yLinear)) {\n y1 = y2 = undefined;\n direction = 'vertical';\n } else {\n const domain = yAxis.domain();\n const bandScale = yAxis.constructor.type() === 'band';\n let y1Val;\n let y2Val;\n if (bandScale) {\n let y1DomainIndex = domain.indexOf(yRange[0]);\n let y2DomainIndex = domain.indexOf(yRange[yRange.length - 1]);\n [y1DomainIndex, y2DomainIndex] = [y1DomainIndex, y2DomainIndex].sort(((a, b) => b - a));\n y1Val = domain[y1DomainIndex];\n y2Val = domain[y2DomainIndex];\n } else {\n y1Val = yRange[0];\n y2Val = yRange[yRange.length - 1];\n }\n y1 = yAxis.getScaleValue(y1Val);\n y2 = yAxis.getScaleValue(y2Val);\n y2 += yAxis.constructor.type() === 'band' ? yAxis.getUnitWidth() : 0;\n }\n } else {\n y1 = y2 = undefined;\n }\n\n if ((yLinear && xLinear) || !payload.dragEnd) {\n if (xDim) {\n [x1, x2] = xDim;\n }\n if (yDim) {\n [y1, y2] = yDim;\n }\n }\n\n return {\n dimension: {\n x1,\n x2,\n y1,\n y2\n },\n direction\n };\n};\n\nexport const changeVisibility = (context, sideEffectGroup, visible) => {\n const config = context.config();\n const className = config.defClassName;\n const classPrefix = config.classPrefix;\n selectElement(sideEffectGroup).selectAll(`.${classPrefix}-${className}`)\n .style('display', visible ? 'block' : 'none');\n};\n","import {\n getQualifiedClassName,\n selectElement,\n makeElement,\n isValidValue\n} from 'muze-utils';\nimport { CLASSPREFIX } from '../../enums/constants';\nimport './styles.scss';\nimport SpawnableSideEffect from '../spawnable';\nimport { selectionBoxDrag } from '../../actions/physical/selection-box-drag';\nimport { getBoxDimensionsFromPayload, changeVisibility } from './helper';\n\n/**\n * This class is used to create a selection box which is used by visual unit for brushing and\n * selection in the canvas.\n * @class SelectionBox\n */\nclass SelectionBox extends SpawnableSideEffect {\n /**\n * It returns the default configuration needed by selectionbox.\n * @return {Object} Default configuration of the selection box.\n */\n static defaultConfig () {\n return {\n defClassName: 'selection-box-group',\n className: '',\n classPrefix: CLASSPREFIX,\n box: {\n defClassName: 'selection-box',\n className: ''\n },\n transition: {\n duration: 200\n }\n };\n }\n\n static formalName () {\n return 'selectionBox';\n }\n\n /**\n * Draws the selectionbox with the specified dimensions.\n * @param {Object} dimension Dimensions of the selection box.\n * @param {number} dimension.x1 Starting x position\n * @param {number} dimension.x2 Ending x position\n * @param {number} dimension.y1 Starting y position\n * @param {number} dimension.y2 Ending y position\n * @param {Object} conf Configuration needed to draw the selection box\n * @param {number} unitWidth Width of the visual unit.\n * @param {number} unitHeight Height of the visual unit.\n */\n apply (selectionSet, payload) {\n let x;\n let y;\n let width;\n let height;\n const config = this._config;\n const boxConf = config.box;\n const firebolt = this.firebolt;\n const drawingInf = this.drawingContext();\n const mountPoint = drawingInf.sideEffectGroup;\n const unitWidth = drawingInf.width;\n const unitHeight = drawingInf.height;\n const classPrefix = config.classPrefix;\n const selectionGroupClassName = config.defClassName;\n\n if (payload.criteria === null) {\n this.hide(drawingInf);\n return this;\n }\n\n const sourceInf = firebolt.context.getSourceInfo();\n const { dimension, direction } = getBoxDimensionsFromPayload(payload, sourceInf.axes,\n sourceInf.fields);\n const transition = payload.dragEnd && config.transition;\n\n if (direction === 'both' || direction === 'vertical') {\n x = Math.min(dimension.x1, dimension.x2);\n width = Math.abs(dimension.x2 - dimension.x1);\n } else {\n x = 0;\n width = unitWidth;\n }\n if (direction === 'both' || direction === 'horizontal') {\n y = Math.min(dimension.y1, dimension.y2);\n height = Math.abs(dimension.y2 - dimension.y1);\n } else {\n height = unitHeight;\n y = 0;\n }\n this.show(drawingInf);\n // Create the data array for drawing the rectangle\n const points = [\n {\n x,\n y,\n width,\n height\n }\n ];\n // Create the container group for selection box.\n const selectionGroup = makeElement(selectElement(mountPoint), 'g', [1],\n `.${classPrefix}-${selectionGroupClassName}`);\n const sideEffect = this;\n const selection = selectionGroup.selectAll('rect').data(points);\n const selectionBox = selection.enter().append('rect')\n .each(function () {\n selectionBoxDrag(firebolt)(selectElement(this), ['brush'], sideEffect);\n })\n .merge(selection)\n .each(function (attrs) {\n let element = selectElement(this);\n transition && (element = element.transition().duration(transition.duration));\n for (const key in attrs) {\n if ({}.hasOwnProperty.call(attrs, key)) {\n isValidValue(attrs[key]) && element.attr(key, attrs[key]);\n }\n }\n });\n // Get the qualified class name for selection box rectangle\n const boxClassName = getQualifiedClassName(boxConf.defClassName, this._id, classPrefix);\n selectionBox.classed(boxClassName.join(' '), true);\n selectionBox.classed(boxConf.className, true);\n\n return this;\n }\n\n hide (drawingInf) {\n changeVisibility(this, drawingInf.sideEffectGroup, false);\n }\n\n show (drawingInf) {\n changeVisibility(this, drawingInf.sideEffectGroup, true);\n }\n}\n\nexport default SelectionBox;\n\n","import {\n getEvent,\n getD3Drag\n } from 'muze-utils';\n\nimport getDragActionConfig from './helpers/drag-action-config';\n\nexport const selectionBoxDrag = firebolt => (targetEl, behaviours) => {\n let subject;\n let drawingInf;\n const context = firebolt.context;\n const onDrag = (payload) => {\n behaviours.forEach(action => firebolt.dispatchBehaviour(action, payload));\n };\n const d3Drag = getD3Drag();\n\n targetEl.call(d3Drag().on('start', () => {\n const event = getEvent();\n drawingInf = context.getDrawingContext();\n subject = event.subject;\n }).on('drag', () => {\n const event = getEvent();\n subject.x += event.dx;\n subject.y += event.dy;\n const width = drawingInf.width;\n const height = drawingInf.height;\n const x = Math.min(width - subject.width, Math.max(subject.x, 0));\n const y = Math.min(height - subject.height, Math.max(subject.y, 0));\n const y2 = y + subject.height;\n const x2 = x + subject.width;\n\n if (x >= 0 && x2 <= width && y >= 0 && y2 <= height) {\n const payload = getDragActionConfig(context.getSourceInfo(), {\n startPos: {\n x,\n y\n },\n endPos: {\n x: x2,\n y: y2\n }\n }, context.data().getFieldsConfig());\n onDrag(payload);\n }\n }).on('end', () => {\n const width = drawingInf.width;\n const height = drawingInf.height;\n const x = Math.min(width - subject.width, Math.max(subject.x, 0));\n const y = Math.min(height - subject.height, Math.max(subject.y, 0));\n const y2 = y + subject.height;\n const x2 = x + subject.width;\n\n if (x >= 0 && x2 <= width && y >= 0 && y2 <= height) {\n const payload = getDragActionConfig(context.getSourceInfo(), {\n startPos: {\n x,\n y\n },\n endPos: {\n x: x2,\n y: y2\n },\n snap: true\n }, context.data().getFieldsConfig());\n payload.dragEnd = true;\n onDrag(payload);\n }\n }));\n};\n","export const CLASSPREFIX = 'muze';\nexport const ARROW_RIGHT = 'right';\nexport const ARROW_TOP = 'top';\nexport const ARROW_BOTTOM = 'bottom';\nexport const ARROW_LEFT = 'left';\nexport const TOOLTIP_LEFT = 'left';\nexport const TOOLTIP_RIGHT = 'right';\nexport const TOOLTIP_BOTTOM = 'bottom';\nexport const TOOLTIP_TOP = 'top';\nexport const INITIAL_STYLE = {\n position: 'absolute',\n width: 0,\n height: 0\n};\n","import { CLASSPREFIX } from './constants';\n\nexport const defaultConfig = {\n classPrefix: CLASSPREFIX,\n defClassName: 'tooltip-box',\n connectorClassName: 'tooltip-connectors',\n className: '',\n row: {\n margin: 0\n },\n content: {\n spacing: 5,\n iconContainerSize: 10,\n iconScale: 1,\n iconShape: 'circle',\n iconColor: '#ff0000',\n rowMargin: '0px',\n margin: 10,\n separator: ':',\n className: 'tooltip-content-container',\n parentClassName: 'tooltip-content-parent-container'\n },\n arrow: {\n size: 10,\n disabled: false,\n defClassName: 'tooltip-arrow',\n className: '',\n color: 'rgba(195,195,195,0.85)'\n }\n};\n","import { getQualifiedClassName } from 'muze-utils';\nimport { TOOLTIP_LEFT, TOOLTIP_RIGHT, ARROW_RIGHT, ARROW_LEFT, TOOLTIP_BOTTOM } from './constants';\n\nexport const getArrowPos = (orient, dim, measurement, config) => {\n let arrowPos;\n const { x, y, boxHeight, boxWidth } = measurement;\n const arrowDisabled = config.arrow.disabled;\n const arrowWidth = arrowDisabled ? 0 : config.arrow.size;\n\n if (orient === ARROW_LEFT || orient === ARROW_RIGHT) {\n let start = 0;\n let diff = boxHeight / 2;\n const plotBottom = dim.y + dim.height;\n const boxBottom = y + boxHeight;\n\n if (dim.y > y) {\n start = dim.y - y;\n diff = (plotBottom >= boxBottom ? (boxBottom - dim.y) : dim.height) / 2;\n } else if (boxBottom > plotBottom) {\n diff = Math.abs(y - (dim.y + dim.height)) / 2;\n }\n arrowPos = start + diff - arrowWidth / 2;\n } else {\n let start = 0;\n let diff = boxWidth / 2;\n const plotRight = dim.x + dim.width;\n const boxRight = x + boxWidth;\n\n if (dim.x > x) {\n start = dim.x - x;\n diff = (plotRight >= boxRight ? (boxRight - dim.x) : dim.width) / 2;\n } else if (boxRight > plotRight) {\n diff = Math.abs(x - (dim.x + dim.width)) / 2;\n }\n arrowPos = start + diff - arrowWidth / 2;\n }\n return arrowPos;\n};\n\n/**\n * Places the arrow in the specified arrow position. It also applies appropriate arrow\n * class name to the arrow element.\n * @param {string} position Left, bottom or right position of the arrow;\n * @param {number} arrowPos position of arrow in pixels\n * @return {Tooltip} Instance of tooltip.\n */\nexport const placeArrow = (context, position, arrowPos) => {\n const tooltipArrow = context._tooltipArrow;\n const tooltipBackground = context._tooltipBackground;\n const config = context._config;\n const classPrefix = config.classPrefix;\n const arrowConf = config.arrow;\n const className = getQualifiedClassName(arrowConf.defClassName, context._id, config.classPrefix);\n\n tooltipArrow.style('display', 'block');\n tooltipArrow.attr('class', `${className.join(' ')}`);\n if (position === TOOLTIP_LEFT || position === TOOLTIP_RIGHT) {\n tooltipArrow.style('top', `${arrowPos}px`);\n tooltipArrow.style('left', '');\n tooltipBackground.style('top', `${arrowPos}px`);\n tooltipBackground.style('left', '');\n } else {\n position === TOOLTIP_BOTTOM ? tooltipArrow.style('top', '100%') : tooltipArrow.style('top',\n `-${arrowConf.size}px`);\n tooltipArrow.style('left', `${arrowPos}px`);\n position === TOOLTIP_BOTTOM ? tooltipBackground.style('top', '100%') : tooltipBackground.style('top',\n `-${arrowConf.size + 3}px`);\n tooltipBackground.style('left', `${arrowPos}px`);\n }\n tooltipArrow.classed(`${classPrefix}-tooltip-arrow`, true);\n tooltipArrow.classed(`${classPrefix}-tooltip-arrow-${context._arrowOrientation}`, false);\n tooltipArrow.classed(`${classPrefix}-tooltip-arrow-${position}`, true);\n tooltipBackground.classed(`${classPrefix}-tooltip-background-arrow`, true);\n tooltipBackground.classed(`${classPrefix}-tooltip-background-arrow-${context._arrowOrientation}`, false);\n tooltipBackground.classed(`${classPrefix}-tooltip-background-arrow-${position}`, true);\n return this;\n};\n\nexport const reorderContainers = (parentContainer, className) => {\n parentContainer.selectAll(className).sort((a, b) => a - b);\n};\n","import {\n getClosestIndexOf,\n DateTimeFormatter,\n DimensionSubtype,\n FieldType\n} from 'muze-utils';\n\nconst timeFormats = {\n millisecond: '%A, %b %e, %H:%M:%S.%L',\n second: '%A, %b %e, %H:%M:%S',\n minute: '%A, %b %e, %H:%M',\n hour: '%A, %b %e, %H:%M',\n day: '%A, %b %e, %Y',\n month: '%B %Y',\n year: '%Y'\n};\nconst timeDurations = [\n ['millisecond', 'second', 'minute', 'hour', 'day', 'month', 'year'],\n [1, 1000, 60000, 3600000, 86400000, 2592000000, 31536000000]\n];\nconst getNearestInterval = (interval) => {\n const index = getClosestIndexOf(timeDurations[1], interval);\n return timeDurations[0][index];\n};\nconst defaultTooltipFormatters = (type, formatter) => {\n const formatters = {\n [DimensionSubtype.TEMPORAL]: (value, interval) => {\n const nearestInterval = getNearestInterval(interval);\n return DateTimeFormatter.formatAs(value, timeFormats[nearestInterval]);\n },\n [FieldType.MEASURE]: value => formatter(value ? value.toFixed(2) : value),\n [FieldType.DIMENSION]: value => value\n };\n return formatters[type];\n};\n\nconst getTabularData = (data, schema, fieldspace, timeDiffs) => {\n const rows = [];\n rows.push(schema.map(d => d.name));\n data.forEach((d) => {\n const row = [];\n schema.forEach((fieldObj, i) => {\n const interval = fieldObj.subtype === DimensionSubtype.TEMPORAL ? timeDiffs[fieldObj.name] : 0;\n const numberFormat = fieldObj.type === FieldType.MEASURE && fieldspace.fields[i]._ref.numberFormat();\n const formatterFn = defaultTooltipFormatters(fieldObj.subtype || fieldObj.type, numberFormat);\n const value = formatterFn(d[i], interval);\n row.push(value);\n });\n rows.push(row);\n });\n return rows;\n};\n\nexport const buildTooltipData = (dataModel, config = {}, context) => {\n let fieldValues = [];\n const dataObj = dataModel.getData();\n const data = dataObj.data;\n const schema = dataObj.schema;\n const formatters = config.formatters;\n const separator = config.separator;\n const fieldsConfig = dataModel.getFieldsConfig();\n const fieldspace = dataModel.getFieldspace();\n const fieldsObj = fieldspace.fieldsObj();\n const dimensionMeasureMap = context.dimensionMeasureMap;\n const axes = context.axes;\n const detailFields = context.detailFields || [];\n const dimensions = schema.filter(d => d.type === FieldType.DIMENSION);\n const measures = schema.filter(d => d.type === FieldType.MEASURE);\n // const containsRetinalField = schema.find(d => d.name in dimensionMeasureMap);\n const containsDetailField = schema.find(d => detailFields.indexOf(d.name) !== -1);\n const dataLen = data.length;\n const getRowContent = (field, type) => {\n let value;\n let formattedValue;\n let measureIndex;\n const values = [];\n const index = fieldsConfig[field].index;\n const interval = fieldsConfig[field].def.subtype === DimensionSubtype.TEMPORAL ?\n fieldsObj[field].getMinDiff() : 0;\n const formatterFn = (formatters && formatters[field]) || defaultTooltipFormatters(type, val => val);\n\n if (value !== null) {\n let uniqueVals = type === FieldType.MEASURE ? data.map(d => d[index]) :\n [...new Set(data.map(d => d[index]))];\n uniqueVals = uniqueVals.filter(d => d !== '');\n const colorAxis = axes.color[0];\n const shapeAxis = axes.shape[0];\n const sizeAxis = axes.size[0];\n const isRetinalField = (colorAxis || shapeAxis || sizeAxis) && dataLen > 1 &&\n type !== FieldType.MEASURE;\n\n uniqueVals.forEach((val, i) => {\n let key;\n const associatedMeasures = dimensionMeasureMap[field];\n\n if (associatedMeasures && associatedMeasures.length && dataLen > 1) {\n key = val;\n let icon = {\n value: ''\n };\n\n if (isRetinalField) {\n icon = {\n type: 'icon',\n color: colorAxis.getColor(val),\n shape: shapeAxis.getShape(val),\n size: sizeAxis.getSize(val) * config.iconScale\n };\n }\n if (associatedMeasures.length > 1) {\n values.push([icon, `${key}`]);\n associatedMeasures.forEach((measure) => {\n measureIndex = fieldsConfig[measure].index;\n value = data[i][measureIndex];\n formattedValue = defaultTooltipFormatters('measure',\n fieldspace.fields[measureIndex]._ref.numberFormat())(value, interval);\n values.push([{\n value: `${measure}${separator}`,\n style: {\n 'margin-left': `${config.margin}px}`\n },\n className: `${config.classPrefix}-tooltip-key`\n }, {\n value: `${formattedValue}`,\n className: `${config.classPrefix}-tooltip-value`\n }]);\n });\n } else {\n measureIndex = fieldsConfig[associatedMeasures[0]].index;\n value = data[i][measureIndex];\n formattedValue = defaultTooltipFormatters('measure',\n fieldspace.fields[measureIndex]._ref.numberFormat())(value, interval);\n values.push([icon, {\n value: `${key}${separator}`,\n className: `${config.classPrefix}-tooltip-key`\n }, {\n value: `${formattedValue}`,\n className: `${config.classPrefix}-tooltip-value`\n }]);\n }\n } else {\n key = field;\n value = val;\n formattedValue = formatterFn(value, interval);\n values.push([{\n value: `${key}${separator}`,\n className: `${config.classPrefix}-tooltip-key`\n }, {\n value: `${formattedValue}`,\n className: `${config.classPrefix}-tooltip-value`\n }]);\n }\n });\n }\n return values;\n };\n let displayFormat = 'keyValue';\n\n if (dataLen > 1 && containsDetailField) {\n fieldValues = getTabularData(data, schema, fieldspace, context.timeDiffs);\n displayFormat = 'table';\n } else {\n dimensions.forEach((item) => {\n const type = item.subtype ? item.subtype : item.type;\n fieldValues = [...fieldValues, ...getRowContent(item.name, type)];\n });\n\n const allMeasures = [...new Set(...Object.values(dimensionMeasureMap))];\n const filteredMeasures = dataLen > 1 ? measures.filter(d => allMeasures.indexOf(d.name) === -1)\n : measures;\n\n filteredMeasures.forEach((item) => {\n const type = item.subtype ? item.subtype : item.type;\n fieldValues = [...fieldValues, ...getRowContent(item.name, type)];\n });\n }\n\n return {\n content: fieldValues,\n displayFormat\n };\n};\n\n/**\n * This contains the strategy methods for showing tooltip in the chart.\n * @param {VisualUnit} context Attached instance.\n */\nexport const strategy = {\n keyValue: (data, config, context) => {\n const values = buildTooltipData(data, config, context);\n return values;\n }\n};\n\nexport const DEFAULT_STRATEGY = 'keyValue';\n","import {\n selectElement,\n mergeRecursive,\n makeElement,\n setAttrs,\n setStyles,\n getSymbol,\n isSimpleObject\n} from 'muze-utils';\nimport { DEFAULT_STRATEGY, strategy } from './strategy';\nimport { defaultConfig } from './default-config';\n\n/**\n * This class is used to manage the content of tooltip.\n */\nexport default class Content {\n /**\n * Creates an instance of content.\n */\n constructor () {\n this._model = null;\n this._strategy = DEFAULT_STRATEGY;\n this._formatter = null;\n this._config = this.constructor.defaultConfig();\n }\n /**\n * Returns the default configuration of tooltip\n * @return {Object} Configuration of tooltip.\n */\n static defaultConfig () {\n const config = defaultConfig.content;\n config.classPrefix = defaultConfig.classPrefix;\n return config;\n }\n\n config (...c) {\n if (c.length > 0) {\n this._config = mergeRecursive(this._config, c[0]);\n return this;\n }\n return this._config;\n }\n\n /**\n * Update model. The format contains presentation strategy which determines how to show the content.\n * If no strategy is mentioned then default is to show key value pair\n */\n update (item) {\n this._model = item.model;\n this._strategy = item.strategy !== undefined ? item.strategy : DEFAULT_STRATEGY;\n this._formatter = item.formatter;\n return this;\n }\n\n context (ctx) {\n this._context = ctx;\n return this;\n }\n\n render (mount) {\n let data;\n const config = this._config;\n const iconContainerSize = config.iconContainerSize;\n const formatter = this._formatter;\n const rowMargin = config.rowMargin;\n const model = this._model;\n\n this._mount = mount;\n if (model instanceof Array) {\n data = model;\n } else {\n data = formatter instanceof Function ? formatter(this._model, this._context) :\n strategy[this._strategy](this._model, this.config(), this._context);\n }\n\n if (data instanceof Function) {\n mount.html(data());\n } else {\n let content = data;\n let displayFormat = 'default';\n\n if (isSimpleObject(data)) {\n content = data.content;\n displayFormat = data.displayFormat;\n }\n\n const body = makeElement(mount, 'div', [displayFormat], `${config.classPrefix}-tooltip-content`, {},\n d => d);\n\n if (displayFormat === 'table') {\n const table = makeElement(body, 'table', [1], `${config.classPrefix}-tooltip-table`);\n const tbody = makeElement(table, 'tbody', [1], `${config.classPrefix}-tooltip-table-tbody`);\n const rows = makeElement(tbody, 'tr', content, `${config.classPrefix}-tooltip-table-row`);\n rows.each(function (d, i) {\n selectElement(this).classed(`${config.classPrefix}-tooltip-table-row-${i}`, true);\n });\n const cells = makeElement(rows, 'td', d => d, `${config.classPrefix}-tooltip-table-cell`);\n cells.each(function (d) {\n selectElement(this).html(d);\n });\n } else {\n const rows = makeElement(body, 'div', content, `${config.classPrefix}-tooltip-row`);\n const cells = makeElement(rows, 'span', d => d, `${config.classPrefix}-tooltip-content`);\n cells.attr('class', `${config.classPrefix}-tooltip-content`);\n setStyles(rows, {\n margin: rowMargin\n });\n setStyles(cells, {\n display: 'inline-block',\n 'margin-right': `${config.spacing}px`\n });\n\n cells.each(function (d) {\n const el = selectElement(this);\n el.html('');\n if (d instanceof Object) {\n if (d.type === 'icon') {\n const svg = makeElement(el, 'svg', [1]);\n const path = makeElement(svg, 'path', [1]);\n const shape = d.shape instanceof Function ? d.shape : getSymbol(d.shape);\n\n setAttrs(svg, {\n x: 0,\n y: 0,\n width: iconContainerSize,\n height: iconContainerSize\n });\n setAttrs(path, {\n d: shape.size(d.size)(),\n transform: `translate(${iconContainerSize / 2}, ${iconContainerSize / 2})`\n });\n setStyles(path, {\n fill: d.color\n });\n setStyles(svg, {\n width: `${iconContainerSize}px`,\n height: `${iconContainerSize}px`\n });\n } else {\n el.html(d.value);\n d.className && el.classed(d.className, true);\n setStyles(el, d.style);\n }\n } else {\n el.html(d);\n }\n });\n }\n }\n return this;\n }\n\n clear () {\n this._model = null;\n return this;\n }\n}\n","import {\n mergeRecursive,\n getQualifiedClassName,\n getUniqueId,\n selectElement,\n setStyles,\n makeElement\n} from 'muze-utils';\nimport { ARROW_BOTTOM, ARROW_LEFT, ARROW_RIGHT, TOOLTIP_LEFT, TOOLTIP_RIGHT, TOOLTIP_BOTTOM, TOOLTIP_TOP,\n INITIAL_STYLE } from './constants';\nimport { defaultConfig } from './default-config';\nimport { getArrowPos, placeArrow, reorderContainers } from './helper';\nimport './styles.scss';\nimport Content from './content';\n\n/**\n * This component is responsible for creating a tooltip element. It appends the tooltip\n * in the body element.\n * @class Tooltip\n */\nexport default class Tooltip {\n /**\n * Initializes the tooltip with the container element and configuration\n * @param {HTMLElement} container container where the tooltip will be mounted.\n * @param {string} className Class name of the tooltip.\n */\n constructor (htmlContainer, svgContainer) {\n let connectorContainer = svgContainer;\n this._id = getUniqueId();\n this._config = {};\n this.config({});\n const tooltipConf = this._config;\n const classPrefix = tooltipConf.classPrefix;\n const contentClass = tooltipConf.content.parentClassName;\n const container = makeElement(htmlContainer, 'div', [1], `${classPrefix}-tooltip-container`);\n this._container = container;\n this._tooltipContainer = container.append('div').style('position', 'absolute');\n this._contentContainer = this._tooltipContainer.append('div').attr('class', `${classPrefix}-${contentClass}`);\n this._tooltipBackground = this._tooltipContainer.append('div').style('position', 'relative');\n this._tooltipArrow = this._tooltipContainer.append('div');\n\n if (!svgContainer) {\n connectorContainer = htmlContainer.append('svg').style('pointer-events', 'none');\n }\n this._contents = {};\n this._tooltipConnectorContainer = selectElement(connectorContainer)\n .append('g')\n .attr('class', `${tooltipConf.classPrefix}-${tooltipConf.connectorClassName}`);\n const id = this._id;\n const defClassName = tooltipConf.defClassName;\n const qualifiedClassName = getQualifiedClassName(defClassName, id, tooltipConf.classPrefix);\n\n setStyles(this._tooltipArrow, INITIAL_STYLE);\n setStyles(this._tooltipBackground, INITIAL_STYLE);\n this.addClass(qualifiedClassName.join(' '));\n this.addClass(tooltipConf.className);\n this.hide();\n }\n\n /**\n * Sets the configuration of tooltip.\n * @param {Object} config Configuration of tooltip\n * @return {Tooltip} Instance of tooltip\n */\n config (...config) {\n if (config.length > 0) {\n const defConf = mergeRecursive({}, this.constructor.defaultConfig());\n this._config = mergeRecursive(defConf, config[0]);\n return this;\n }\n return this._config;\n }\n\n /**\n * Returns the default configuration of tooltip\n * @return {Object} Configuration of tooltip.\n */\n static defaultConfig () {\n return defaultConfig;\n }\n /**\n * Sets the class name of tooltip\n * @param {string} className tooltip class name\n * @return {Tooltip} Instance of tooltip.\n */\n addClass (className) {\n this._tooltipContainer.classed(className, true);\n return this;\n }\n\n context (...ctx) {\n if (ctx.length) {\n this._context = ctx[0];\n return this;\n }\n return this._context;\n }\n\n content (name, data, contentConfig = {}) {\n const config = this.config();\n const { classPrefix } = config;\n const contentClass = config.content.className;\n const formatter = config.formatter;\n const className = contentConfig.className || `${classPrefix}-${contentClass}-${name}`;\n const content = this._contents[name] = this._contents[name] || new Content();\n const container = makeElement(this._contentContainer, 'div', [contentConfig.order], className);\n container.attr('class', `${classPrefix}-${contentClass} ${className}`);\n reorderContainers(this._contentContainer, `.${classPrefix}-${contentClass}`);\n const contentConf = config.content;\n contentConfig.classPrefix = this._config.classPrefix;\n content.config(contentConf);\n\n if (data === null) {\n content.clear();\n container.remove();\n delete this._contents[name];\n } else {\n content.update({\n model: data,\n formatter: contentConfig.formatter || formatter\n });\n content.context(this._context);\n content.render(container);\n }\n\n if (!Object.keys(this._contents).length) {\n this.hide();\n }\n return this;\n }\n\n getContents () {\n return Object.values(this._contents);\n }\n\n /**\n * Positions the tooltip at the given x and y position.\n * @param {number} x x position\n * @param {number} y y position\n * @return {Tooltip} Instance of tooltip.\n */\n position (x, y, conf = {}) {\n if (!Object.keys(this._contents).length) {\n this.hide();\n return this;\n }\n this.show();\n const target = this._target;\n const repositionArrow = conf.repositionArrow;\n\n if (target && repositionArrow) {\n const node = this._tooltipContainer.node();\n const config = this._config;\n const arrowDisabled = config.arrow.disabled;\n const arrowWidth = arrowDisabled ? 0 : config.arrow.size;\n const arrowOrient = this._arrowOrientation;\n const outsidePlot = arrowOrient === ARROW_LEFT || arrowOrient === ARROW_RIGHT ?\n (y + node.offsetHeight - arrowWidth) < target.y || y > (target.y + target.height) :\n (x + node.offsetWidth - arrowWidth) < target.x || x > (target.x + target.width);\n\n if (!arrowDisabled) {\n if (outsidePlot) {\n let path;\n this._tooltipArrow.style('display', 'none');\n this._tooltipBackground.style('display', 'none');\n this._tooltipConnectorContainer.style('display', 'block');\n const connector = this._tooltipConnectorContainer.selectAll('path').data([1]);\n const enter = connector.enter().append('path');\n if (arrowOrient === ARROW_LEFT) {\n path = `M ${x} ${y + node.offsetHeight / 2} L ${target.x + target.width}`\n + ` ${target.y + target.height / 2}`;\n } else if (arrowOrient === ARROW_RIGHT) {\n path = `M ${x + node.offsetWidth} ${y + node.offsetHeight / 2}`\n + ` L ${target.x} ${target.y + target.height / 2}`;\n } else if (arrowOrient === ARROW_BOTTOM) {\n path = `M ${x + node.offsetWidth / 2} ${y + node.offsetHeight}`\n + ` L ${target.x + target.width / 2} ${target.y}`;\n }\n enter.merge(connector).attr('d', path).style('display', 'block');\n } else {\n const arrowPos = getArrowPos(arrowOrient, target, {\n x,\n y,\n boxHeight: node.offsetHeight,\n boxWidth: node.offsetWidth\n }, this._config);\n\n placeArrow(this, this._arrowOrientation, arrowPos);\n this._tooltipConnectorContainer.style('display', 'none');\n }\n }\n }\n\n const offset = this._offset || {\n x: 0,\n y: 0\n };\n this._tooltipContainer.style('left', `${offset.x + x}px`).style('top',\n `${offset.y + y}px`);\n\n return this;\n }\n\n /**\n * Positions the tooltip relative to a rectangular box. It takes care of tooltip overflowing the\n * boundaries.\n * @param {Object} dim Dimensions of the plot.\n */\n positionRelativeTo (dim, tooltipConf = {}) {\n let obj;\n let orientation = tooltipConf.orientation;\n this.show();\n if (!dim) {\n this.hide();\n return this;\n }\n\n const extent = this._extent;\n const node = this._tooltipContainer.node();\n\n this._tooltipContainer.style('top', '0px')\n .style('left', '0px');\n const offsetWidth = node.offsetWidth + 2;\n const offsetHeight = node.offsetHeight + 2;\n const config = this._config;\n const offset = this._offset;\n const arrowDisabled = config.arrow.disabled;\n const arrowSize = arrowDisabled ? 0 : config.arrow.size;\n const draw = tooltipConf.draw !== undefined ? tooltipConf.draw : true;\n const topSpace = dim.y;\n // When there is no space in right\n const dimX = dim.x + dim.width + offset.x;\n const rightSpace = extent.width - dimX;\n const leftSpace = dim.x + offset.x - extent.x;\n const positionTop = topSpace > (offsetHeight + arrowSize);\n const positionRight = rightSpace >= offsetWidth + arrowSize;\n const positionLeft = leftSpace >= offsetWidth + arrowSize;\n\n const positionHorizontal = () => {\n let position;\n let x = dim.x + dim.width;\n let y = dim.y;\n\n if (positionRight) {\n position = TOOLTIP_LEFT;\n x += arrowSize;\n } else if (positionLeft) {\n x = dim.x - offsetWidth;\n position = TOOLTIP_RIGHT;\n x -= arrowSize;\n } else {\n position = 'left';\n x += arrowSize;\n }\n if (dim.height < offsetHeight) {\n y = Math.max(0, dim.y + dim.height / 2 - offsetHeight / 2);\n }\n\n const arrowPos = getArrowPos(position, dim, {\n x,\n y,\n boxHeight: offsetHeight,\n boxWidth: offsetWidth\n }, this._config);\n\n return {\n position,\n arrowPos,\n x,\n y\n };\n };\n\n const positionVertical = () => {\n let position;\n let y;\n // Position tooltip at the center of plot\n let x = dim.x - offsetWidth / 2 + dim.width / 2;\n\n // Overflows to the right\n if ((extent.width - (dim.x + offset.x)) < offsetWidth) {\n x = extent.width - offsetWidth - offset.x;\n } else if ((x + offset.x) < extent.x) { // Overflows to the left\n x = extent.x;\n }\n\n if (positionTop) {\n y = dim.y - offsetHeight - arrowSize;\n position = TOOLTIP_BOTTOM;\n } else {\n y = dim.y + dim.height + arrowSize;\n position = TOOLTIP_TOP;\n }\n\n const arrowPos = getArrowPos(position, dim, {\n x,\n y,\n boxHeight: offsetHeight,\n boxWidth: offsetWidth\n }, this._config);\n\n return {\n position,\n arrowPos,\n x,\n y\n };\n };\n\n this._target = dim;\n if (!orientation) {\n if (positionTop) {\n orientation = 'vertical';\n } else if (positionRight || positionLeft) {\n orientation = 'horizontal';\n } else {\n orientation = 'vertical';\n }\n }\n\n if (orientation === 'horizontal') {\n obj = positionHorizontal();\n } else if (orientation === 'vertical') {\n obj = positionVertical();\n }\n\n this._position = {\n x: obj.x,\n y: obj.y\n };\n\n this._arrowPos = obj.arrowPos;\n if (!arrowDisabled) {\n placeArrow(this, obj.position, obj.arrowPos);\n } else {\n this._tooltipArrow.style('display', 'none');\n this._tooltipBackground.style('display', 'none');\n }\n this._arrowOrientation = obj.position;\n draw && this.position(obj.x, obj.y);\n return this;\n }\n\n /**\n * Hides the tooltip element.\n * @return {Tooltip} Instance of tooltip.\n */\n hide () {\n this._tooltipContainer.style('display', 'none');\n this._tooltipConnectorContainer.style('display', 'none');\n return this;\n }\n\n /**\n * Shows the tooltip element.\n * @return {Tooltip} Instance of tooltip.\n */\n show () {\n this._tooltipContainer.style('display', 'block');\n return this;\n }\n\n extent (extent) {\n this._extent = extent;\n return this;\n }\n\n offset (offset) {\n this._offset = offset;\n return this;\n }\n\n remove () {\n this._tooltipContainer.remove();\n this._tooltipBackground.remove();\n this._tooltipConnectorContainer.remove();\n return this;\n }\n}\n","import { FieldType } from 'muze-utils';\n\nexport const strategies = {\n showSelectedItems: (dm) => {\n const dataObj = dm.getData();\n const measures = dataObj.schema.filter(d => d.type === FieldType.MEASURE);\n const aggregatedModel = dm.groupBy([''], measures.reduce((acc, v) => {\n acc[v.name] = v.defAggFn === 'count' ? 'sum' : v.defAggFn;\n return acc;\n }, {}));\n const fieldsObj = dm.getFieldspace().fieldsObj();\n const fieldsConf = aggregatedModel.getFieldsConfig();\n let values = [{\n value: `${dataObj.data.length}`,\n style: {\n 'font-weight': 'bold'\n }\n }, 'Items Selected'];\n const measureNames = measures.map(d => d.name);\n if (measureNames.length) {\n values = [...values, ...[`(${fieldsObj[measureNames[0]].defAggFn().toUpperCase()}) ${measureNames[0]}`,\n {\n value: `${aggregatedModel.getData().data[0][fieldsConf[measureNames[0]].index].toFixed(2)}`,\n style: {\n 'font-weight': 'bold'\n }\n }]];\n }\n return [values];\n }\n};\n","import { Tooltip as TooltipRenderer } from '@chartshq/muze-tooltip';\nimport { FieldType } from 'muze-utils';\nimport { spaceOutBoxes } from '../helper';\nimport { strategies } from './strategies';\nimport { FRAGMENTED } from '../../enums/constants';\nimport SpawnableSideEffect from '../spawnable';\n\nimport './styles.scss';\n\nexport default class Tooltip extends SpawnableSideEffect {\n constructor (...params) {\n super(...params);\n this._tooltips = {};\n this._strategies = strategies;\n this._strategy = 'default';\n }\n\n static defaultConfig () {\n return {\n padding: 5,\n offset: {\n x: 0,\n y: 0\n }\n };\n }\n\n static formalName () {\n return 'tooltip';\n }\n\n apply (selectionSet, payload, options = {}) {\n let totalHeight = 0;\n let totalWidth = 0;\n const dataModel = selectionSet.mergedEnter.model;\n const context = this.firebolt.context;\n const drawingInf = this.drawingContext();\n if ((dataModel.isEmpty() || payload.criteria === null) || selectionSet.isSourceFieldPresent === false) {\n this.hide(options, null);\n return this;\n }\n\n const tooltips = this._tooltips;\n const config = this.config();\n const boundBox = {\n width: drawingInf.width,\n height: drawingInf.height\n };\n const showInPosition = payload.showInPosition;\n const pad = config.padding;\n const dataModels = [];\n const fragmented = config.mode === FRAGMENTED;\n const sourceInf = context.getSourceInfo();\n const fields = sourceInf.fields;\n const xFieldDim = fields.x[0] ? fields.x[0].type() === FieldType.DIMENSION : false;\n const showVertically = !!xFieldDim;\n const tooltipPos = payload.position;\n const boxes = [];\n const enter = {};\n const uids = dataModel.getData().uids;\n if (fragmented) {\n dataModels.push(...uids.map(d => dataModel.select((fieldsArr, i) => i === d, {\n saveChild: false\n })));\n } else {\n dataModels.push(dataModel);\n }\n\n let target = payload.target;\n let targetFields = [];\n if (target) {\n targetFields = target[0] || [];\n const sourceFields = payload.sourceFields;\n const indices = [];\n for (let i = 0, len = targetFields.length; i < len; i++) {\n if (sourceFields.indexOf(targetFields[i]) !== -1) {\n indices.push(i);\n }\n }\n target = target.map(d => d.filter((v, i) => indices.indexOf(i) !== -1));\n }\n\n const plotDimensions = context.getPlotPointsFromIdentifiers(target || payload.criteria, {\n getBBox: true\n });\n\n // Show tooltip for each datamodel\n for (let i = 0; i < dataModels.length; i++) {\n let plotDim = plotDimensions[i];\n if (fragmented) {\n const dimensions = dataModels[i].getData().schema.filter(d => d.type === FieldType.DIMENSION)\n .map(d => d.name);\n plotDim = context.getPlotPointsFromIdentifiers(dataModels[i].project(dimensions), { getBBox: true });\n plotDim = plotDim && plotDim[0];\n }\n\n let dt = dataModels[i];\n if (config.fields) {\n dt = dt.project(config.fields, {\n saveChild: false\n });\n }\n if (config.dataTransform) {\n dt = config.dataTransform(dt, i);\n }\n\n enter[i] = true;\n const layoutContainer = drawingInf.parentContainer;\n const layoutBoundBox = layoutContainer.getBoundingClientRect();\n const unitBoundBox = drawingInf.htmlContainer.getBoundingClientRect();\n\n const offsetLeft = unitBoundBox.left - layoutBoundBox.left;\n const offsetTop = unitBoundBox.top - layoutBoundBox.top;\n const tooltipInst = tooltips[i] = tooltips[i] || new TooltipRenderer(layoutContainer,\n drawingInf.svgContainer);\n\n sourceInf.payload = payload;\n sourceInf.firebolt = this.firebolt;\n sourceInf.detailFields = context.detailFields();\n sourceInf.timeDiffs = context.timeDiffsByField();\n tooltipInst.context(sourceInf);\n const strategy = strategies[options.strategy];\n tooltipInst.content(options.strategy || this._strategy, dt, {\n formatter: strategy,\n order: options.order\n })\n .config(this.config())\n .extent({\n x: 0,\n y: 0,\n width: layoutBoundBox.width,\n height: layoutBoundBox.height\n })\n .offset({\n x: offsetLeft + (config.offset.x || 0),\n y: offsetTop + (config.offset.y || 0)\n });\n\n if (showInPosition) {\n tooltipInst.position(tooltipPos.x + pad, tooltipPos.y + pad);\n } else if (plotDim) {\n tooltipInst.positionRelativeTo({\n x: plotDim.x,\n y: plotDim.y,\n width: plotDim.width || 0,\n height: plotDim.height || 0\n }, {\n orientation: fragmented ?\n (showVertically ? 'horizontal' : 'vertical') : undefined\n });\n } else {\n tooltipInst.hide();\n break;\n }\n\n if (fragmented) {\n const position = tooltipInst._position;\n const tooltipBoundBox = tooltipInst._tooltipContainer.node().getBoundingClientRect();\n\n totalHeight += tooltipBoundBox.height + pad;\n totalWidth += tooltipBoundBox.width + pad;\n if (showVertically ? totalHeight > drawingInf.height : totalWidth > drawingInf.width) {\n break;\n }\n boxes.push({\n x: position.x,\n y: position.y,\n width: tooltipBoundBox.width,\n height: tooltipBoundBox.height,\n tooltip: tooltipInst\n });\n }\n }\n\n for (const key in tooltips) {\n if (!enter[key]) {\n const tooltip = tooltips[key];\n tooltip.content(payload.action, null);\n if (!tooltip.getContents().length) {\n tooltip.remove();\n delete tooltips[key];\n }\n }\n }\n if (fragmented) {\n spaceOutBoxes(boxes, boundBox, showVertically);\n boxes.forEach(box => box.tooltip.position(box.x, box.y, {\n repositionArrow: true\n }));\n }\n return this;\n }\n\n hide (options) {\n const tooltips = this._tooltips;\n for (const key in tooltips) {\n if ({}.hasOwnProperty.call(tooltips, key)) {\n const strategy = options.strategy || this._strategy;\n tooltips[key].content(strategy, null);\n tooltips[key].hide();\n }\n }\n }\n}\n","export const spaceOutBoxes = (boxes, extent, showVertically) => {\n let y;\n let height;\n let x;\n let width;\n let i;\n const pad = 5;\n const len = boxes.length;\n const spaceOutIfOverlap = (firstBox, secondBox, opposite) => {\n x = firstBox.x;\n width = firstBox.width;\n y = firstBox.y;\n height = firstBox.height;\n const bottom = y + height;\n const right = x + width;\n\n if (showVertically) {\n if (opposite ? y < (secondBox.y + secondBox.height) : bottom > secondBox.y) {\n secondBox.y = opposite ? firstBox.y - secondBox.height - pad :\n bottom + pad;\n }\n } else if (opposite ? x < (secondBox.x + secondBox.width) : right > secondBox.x) {\n secondBox.x = opposite ? firstBox.x - secondBox.width - pad :\n right + pad;\n }\n };\n\n boxes.sort((a, b) => (showVertically ? a.y - b.y : a.x - b.x));\n i = 0;\n\n for (i = 0; i < len - 1; i++) {\n spaceOutIfOverlap(boxes[i], boxes[i + 1]);\n }\n\n if ((boxes[i].y + boxes[i].height) > extent.height ||\n (boxes[i].x + boxes[i].width) > extent.width) {\n if (showVertically) {\n boxes[i].y -= (boxes[i].height + boxes[i].y) - extent.height;\n } else {\n boxes[i].x -= (boxes[i].width + boxes[i].x) - extent.width;\n }\n for (i = len - 1; i > 0; i--) {\n spaceOutIfOverlap(boxes[i], boxes[i - 1], true);\n }\n }\n return boxes;\n}\n;\n","import { selectElement, FieldType } from 'muze-utils';\n\nimport './styles.scss';\nimport { CLASSPREFIX } from '../../enums/constants';\nimport SpawnableSideEffect from '../spawnable';\n\nexport default class Crossline extends SpawnableSideEffect {\n static defaultConfig () {\n return {\n className: `${CLASSPREFIX}-crossline-group`,\n bandClass: `${CLASSPREFIX}-crossband`,\n lineClass: `${CLASSPREFIX}-crossline`\n };\n }\n\n static formalName () {\n return 'crossline';\n }\n\n apply (selectionSet, payload) {\n let height;\n let bandWidth;\n let px;\n let width;\n const {\n className,\n bandClass,\n lineClass\n } = this.config();\n const dataModel = selectionSet.mergedEnter.model;\n const drawingInf = this.drawingContext();\n if (payload.criteria && dataModel && dataModel.isEmpty()) {\n return this;\n }\n if (payload.criteria === null || !dataModel) {\n this.hide();\n return this;\n }\n\n const dataObj = dataModel.getData();\n const sourceInf = this.firebolt.context.getSourceInfo();\n const axes = sourceInf.axes;\n const axisFields = sourceInf.fields;\n const fields = selectionSet.fields;\n const data = dataObj.data;\n const fieldsConfig = dataModel.getFieldsConfig();\n const svgContainer = drawingInf.sideEffectGroup;\n\n const elemData = [];\n fields.forEach((field) => {\n const fieldIndex = fieldsConfig[field] && fieldsConfig[field].index;\n const dataArr = data.map(d => d[fieldIndex]);\n const axisIndex = [['x', 0], ['x', 1], ['y', 0], ['y', 1]].find((arr) => {\n const fieldInst = axisFields[arr[0]][arr[1]];\n return fieldInst && fieldInst.type() === FieldType.DIMENSION &&\n fieldInst.getMembers().indexOf(field) !== -1;\n });\n if (axisIndex !== undefined && data.length) {\n const type = axisIndex[0];\n const axis = axes[type][axisIndex[1]];\n const value = dataArr[0];\n bandWidth = axis.getUnitWidth() || 0;\n px = axis.getScaleValue(value) + bandWidth / 2 + drawingInf.xOffset;\n const plotWidth = Math.max(...this.firebolt.context.layers().map(layer => layer.getPlotSpan()[type]));\n const pad = Math.max(...this.firebolt.context.layers().map(layer => layer.getPlotPadding()[type]));\n height = drawingInf.height;\n width = drawingInf.width;\n const startPx = px - plotWidth / 2 - pad / 2;\n const endPx = px + plotWidth / 2 + pad / 2;\n const dataPoint = {};\n if (type === 'y') {\n dataPoint.d = `M 0 ${startPx} L 0 ${endPx} L ${width} ${endPx} L ${width} ${startPx} Z`;\n } else {\n dataPoint.d = `M ${startPx} 0 L ${endPx} 0 L ${endPx} ${height} L ${startPx} ${height} Z`;\n }\n dataPoint.className = plotWidth ? bandClass : lineClass;\n elemData.push(dataPoint);\n }\n });\n if (elemData.length) {\n const parentGroup = this.createElement(svgContainer, 'g', [1], className);\n const elem = this.createElement(parentGroup, 'path', elemData);\n elem.attr('d', d => d.d).style('pointer-events', 'none')\n .attr('class', d => d.className);\n }\n return this;\n }\n\n hide () {\n const className = this.config().className;\n const drawingInf = this.drawingContext();\n selectElement(drawingInf.sideEffectGroup).selectAll(`.${className}`).remove();\n }\n}\n","const fadeFn = (set, context, strategy) => {\n const {\n mergedEnter,\n mergedExit,\n exitSet,\n completeSet\n } = set;\n\n if (!mergedEnter.length && !mergedExit.length) {\n context.applyInteractionStyle(completeSet, {}, strategy, false);\n } else {\n context.applyInteractionStyle(exitSet[1], {}, strategy, true);\n context.applyInteractionStyle(mergedEnter, {}, strategy, false);\n }\n};\n\nexport const strategies = {\n fade: fadeFn,\n focus: (set, context) => {\n const {\n mergedEnter,\n mergedExit,\n completeSet\n } = set;\n if (!mergedEnter.length && !mergedExit.length) {\n context.applyInteractionStyle(completeSet, {}, 'focus', false);\n } else {\n context.applyInteractionStyle(mergedExit, {}, 'focus', true);\n context.applyInteractionStyle(mergedEnter, {}, 'focus', false);\n }\n },\n highlight: (set, context) => {\n const {\n mergedEnter,\n mergedExit,\n entrySet,\n exitSet,\n completeSet\n } = set;\n if (!mergedEnter.length && !mergedExit.length) {\n context.applyInteractionStyle(completeSet, {}, 'highlight', false);\n } else {\n context.applyInteractionStyle(entrySet[1], {}, 'highlight', true);\n context.applyInteractionStyle(exitSet[1], {}, 'highlight', false);\n }\n }\n};\n","import SurrogateSideEffect from '../surrogate';\nimport { strategies } from './strategy';\n\nexport default class PlotHighlighter extends SurrogateSideEffect {\n constructor (...params) {\n super(...params);\n this._strategy = 'highlight';\n this._strategies = strategies;\n }\n\n static formalName () {\n return 'highlighter';\n }\n\n static target () {\n return 'visual-unit';\n }\n\n apply (selectionSet, payload, options = {}) {\n const strategy = this._strategies[options.strategy || this._strategy];\n\n if (selectionSet.isSourceFieldPresent !== false) {\n strategy(selectionSet, this, options.strategy || this._strategy);\n }\n\n return this;\n }\n}\n","import SurrogateSideEffect from '../surrogate';\n\nexport default class FilterEffect extends SurrogateSideEffect {\n static formalName () {\n return 'filter';\n }\n\n static target () {\n return 'visual-unit';\n }\n\n static mutates () {\n return true;\n }\n\n apply (selectionSet, payload) {\n const context = this.firebolt.context;\n const entryModel = selectionSet.mergedEnter.model;\n if (payload.criteria === null) {\n context.clearCaching().resetData();\n } else {\n context.enableCaching().data(entryModel);\n }\n return this;\n }\n}\n","import { DataModel } from 'muze-utils';\n\nimport { CLASSPREFIX } from '../../enums/constants';\nimport SpawnableSideEffect from '../spawnable';\n\nimport './styles.scss';\n\nexport default class AnchorEffect extends SpawnableSideEffect {\n constructor (...params) {\n super(...params);\n const context = this.firebolt.context;\n this._layers = this.addAnchorLayers(context);\n }\n\n static target () {\n return 'visual-unit';\n }\n\n static defaultConfig () {\n return {\n className: `${CLASSPREFIX}-anchors-group`\n };\n }\n\n static formalName () {\n return 'anchors';\n }\n\n addAnchorLayers (context) {\n const layers = [];\n this.firebolt.context.layers().forEach((layer, idx) => {\n const shouldDrawAnchors = layer.shouldDrawAnchors();\n if (shouldDrawAnchors) {\n const encodingFieldsInf = layer.encodingFieldsInf();\n const layerObj = {\n instances: context.addLayer({\n name: `${layer.alias()}-${this.constructor.formalName()}-${idx}`,\n mark: 'point',\n encoding: {\n x: encodingFieldsInf.xField,\n y: encodingFieldsInf.yField,\n color: {\n field: encodingFieldsInf.colorField\n },\n size: {\n field: encodingFieldsInf.sizeField,\n value: this.defaultSizeValue()\n }\n },\n transform: {\n type: 'identity'\n },\n transition: this.getTransitionConfig(),\n calculateDomain: false,\n source: dt => dt.select(() => false, {\n saveChild: false\n }),\n interactive: false,\n render: false\n }),\n linkedLayer: layer\n };\n\n layers.push(layerObj);\n }\n });\n return layers;\n }\n\n getTransitionConfig () {\n return {\n disabled: true\n };\n }\n\n /**\n * Returns the default area value of the anchor point.\n * @return { number } Default area value of anchor.\n */\n defaultSizeValue () {\n return 100;\n }\n\n apply (selectionSet) {\n const self = this;\n const dataModel = selectionSet.mergedEnter.model;\n if (selectionSet.isSourceFieldPresent !== false) {\n const drawingInf = this.drawingContext();\n const sideEffectGroup = drawingInf.sideEffectGroup;\n const className = `${this.config().className}`;\n const layers = this._layers;\n const parentGroup = this.createElement(sideEffectGroup, 'g', [1], `${className}-container`);\n const anchorGroups = this.createElement(parentGroup, 'g', layers);\n anchorGroups.each(function (layer) {\n const instances = layer.instances;\n const elems = self.createElement(this, 'g', instances, className);\n const linkedLayer = layer.linkedLayer;\n const [transformedData, schema] = linkedLayer.getTransformedDataFromIdentifiers(dataModel);\n const transformedDataModel = new DataModel(transformedData, schema);\n elems.each(function (d, i) {\n instances[i].data(transformedDataModel).mount(this);\n });\n });\n }\n return this;\n }\n}\n","import AnchorEffect from './anchors';\nimport { CLASSPREFIX } from '../enums/constants';\n\nexport default class PersistentAnchors extends AnchorEffect {\n static formalName () {\n return 'persistent-anchors';\n }\n\n static defaultConfig () {\n return {\n className: `${CLASSPREFIX}-persistent-anchors`\n };\n }\n\n getTransitionConfig () {\n return {\n disabled: true\n };\n }\n}\n","import AnchorEffect from './anchors';\nimport { CLASSPREFIX } from '../enums/constants';\n\nexport default class BrushAnchors extends AnchorEffect {\n static formalName () {\n return 'brush-anchors';\n }\n\n static defaultConfig () {\n return {\n className: `${CLASSPREFIX}-brush-anchors`\n };\n }\n\n getTransitionConfig () {\n return {\n disabled: true\n };\n }\n}\n","import * as BEHAVIOURS from './enums/behaviours';\n\nexport const behaviourEffectMap = {\n [BEHAVIOURS.BRUSH]: ['selectionBox', {\n name: 'highlighter',\n options: {\n strategy: 'fade'\n }\n }, 'brush-anchors'],\n [`${BEHAVIOURS.BRUSH},${BEHAVIOURS.SELECT}`]: [{\n name: 'tooltip',\n options: {\n strategy: 'showSelectedItems',\n order: 0,\n filter: context => context.config().mode === 'fragmented'\n }\n }],\n [BEHAVIOURS.HIGHLIGHT]: [{\n name: 'highlighter',\n options: {\n strategy: 'highlight'\n }\n }, 'crossline', {\n name: 'tooltip',\n options: {\n order: 9999\n }\n }, 'anchors'],\n [BEHAVIOURS.FILTER]: ['filter'],\n [BEHAVIOURS.SELECT]: [{\n name: 'highlighter',\n options: {\n strategy: 'focus'\n }\n }, 'persistent-anchors']\n};\n","export const CLASSPREFIX = 'muze';\nexport const STACK = 'stack';\nexport const GROUP = 'group';\nexport const IDENTITY = 'identity';\nexport const ANGLE = 'angle';\nexport const RADIUS = 'radius';\nexport const SIZE = 'size';\nexport const COLOR = 'color';\nexport const SHAPE = 'shape';\nexport const OUTER_RADIUS_VALUE = 'outerRadiusValue';\nexport const TEXT_ANCHOR_MIDDLE = 'middle';\nexport const ENCODING = {\n X: 'x',\n Y: 'y',\n X0: 'x0',\n Y0: 'y0'\n};\n\nexport const ASCENDING = 'asc';\n\nexport const AREA_LAYER = 'area';\nexport const ARC_LAYER = 'arc';\nexport const LINE_LAYER = 'line';\nexport const TEXT_LAYER = 'text';\nexport const POINT_LAYER = 'point';\nexport const BAR_LAYER = 'bar';\nexport const TICK_LAYER = 'tick';\nexport const SIMPLE_LAYER = 'simple';\nexport const BASE_LAYER = 'base';\n","import { CLASSPREFIX, STACK } from '../../enums/constants';\n\nexport const defaultConfig = {\n classPrefix: CLASSPREFIX,\n defClassName: 'layer-area',\n className: '',\n interpolate: 'linear',\n transform: {\n type: STACK\n },\n interaction: {\n\n },\n nearestPointThreshold: 10,\n encoding: {\n color: {},\n x: {},\n y: {},\n y0: {},\n strokeOpacity: {\n value: 1\n }\n },\n transition: {\n effect: 'cubic',\n duration: 1000\n },\n connectNullData: false\n};\n","import { ERROR_MSG } from 'muze-utils';\n\n/**\n * This is an interface class which any new layer class has to extend.\n *\n * @example\n * class BarLayer extends BaseLayer {\n * update (params) {\n * // super.update(params);\n * // Update the bar layer\n * }\n * }\n * @class\n */\nexport default class SimpleLayer {\n\n formalName () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Sets or gets the dependencies.\n * @param {Object} dependencies Dependencies needed by layer\n * @return {BaseLayer} Instance of base layer.\n */\n dependencies () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Returns the config of the layer\n *\n * @param {Object} config Configuration of layer\n * @return {Object} configuration of layer\n */\n config () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Acts as a getter or setter function\n * When setter\n * Returns the datamodel of the layer\n * @param { DataModel } dataModel instance of DataModel\n * @return { DataModel } DataModel instance of the layer\n */\n data () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Returns a serialized schema of the layer\n * @return {Object} Serialized schema\n */\n serialize () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Returns the unique identifier of this layer\n * @return {string} id of the layer\n */\n id () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n /*\n * This method resolves the x, y, x0 and y0 values from the transformed data.\n * It also checks the type of transformed data for example, if it is a stacked data\n * then it fetches the y and y0 values from the stacked data.\n * @param {Array.} transformedData transformed data\n * @param {Object} fieldMap field definitions\n * @param {string} transformType type of transformed data - stack, group or identity.\n * @return {Array.} Normalized data\n * @private\n */\n normalizeTransformedData () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Gets the transform method from transform factory based on type of transform. It then calls the\n * transform method with the data and passes the configuration parameters of transform such as\n * groupBy, value field, etc.\n *\n * @param {DataModel} dataModel Instance of dataModel\n * @param {Object} config configuration for transforming data\n * @return {Array.} Transformed data.\n * @private\n */\n getTransformedData () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Calculates the domain from the data.\n * It checks the type of field and calculates the domain based on that. For example, if it\n * is a quantitative or temporal field, then it calculates the min and max from the data or\n * if it is a nominal field then it gets all the values from the data of that field.\n * @param {Array} data DataArray\n * @return {Array} Domain values array.\n */\n _calculateDomainFromData () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Returns the domain for the axis.\n *\n * @param {string} encodingType type of encoding x, y, color, etc.\n * @return {Object} Axis domains\n */\n getDomain () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Abstract method for getting nearest point\n * @return {BaseLayer} Instance of base layer\n */\n getNearestPoint () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Abstract method for highlighting points\n * @return {BaseLayer} Instance of base layer\n */\n highlightPoint () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Abstract method for deselecting points\n * @return {BaseLayer} Instance of base layer\n */\n dehighlightPoint () {\n return this;\n }\n\n linkLayerStore () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Sets the container element for the layer to be renderered.\n * @param {SVGElement} mountPoint SVG element or group element.\n */\n mount () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n render () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n}\n","export const DATA = 'data';\nexport const CONFIG = 'config';\nexport const MEASUREMENT = 'measurement';\nexport const AXES = 'axes';\nexport const NORMALIZED_DATA = 'normalizedData';\nexport const TRANSFORMED_DATA = 'transformedData';\nexport const DOMAIN = 'domain';\nexport const MOUNT = 'mount';\nexport const FIELDMAP = 'fieldMap';\nexport const DATA_UPDATED = 'dataUpdated';\n","/**\n * @module Axis\n * This file declares a class that is used to render an axis to add meaning to\n * plots.\n */\nimport { Symbols } from 'muze-utils';\nimport * as AxisOrientation from '../enums/axis-orientation';\n\n/**\n * @module Axis\n * This file exports constants that are used to reference axis orientations\n * in a consistent manner.\n */\nexport const BOTTOM = 'bottom';\nexport const TOP = 'top';\nexport const LEFT = 'left';\nexport const RIGHT = 'right';\n\n/**\n * This object is used to associate the axis orientation with the d3 class\n * used to represent that axis.\n */\nexport const axisOrientationMap = {\n [AxisOrientation.LEFT]: Symbols.axisLeft,\n [AxisOrientation.BOTTOM]: Symbols.axisBottom,\n [AxisOrientation.RIGHT]: Symbols.axisRight,\n [AxisOrientation.TOP]: Symbols.axisTop\n};\n","/**\n * @module axis\n * This file exports constants used to reference scale type\n * consistently throughout the project.\n */\nexport const LINEAR = 'linear';\nexport const BAND = 'band';\nexport const TIME = 'temporal';\nexport const COLOR = 'color';\nexport const ORDINAL = 'ordinal';\nexport const QUANTIZE = 'quantize';\nexport const QUANTILE = 'quantile';\nexport const LOG = 'log';\nexport const POW = 'pow';\nexport const IDENTITY = 'identity';\nexport const SEQUENTIAL = 'sequential';\nexport const THRESHOLD = 'threshold';\n","export const CLASSPREFIX = 'muze';\n\nexport const CONTINOUS = 'continous';\nexport const DISCRETE = 'discrete';\nexport const SEQUENTIAL = 'sequential';\nexport const ORDINAL = 'ordinal';\nexport const LINEAR = 'linear';\nexport const THRESHOLD = 'threshold';\nexport const QUANTIZE = 'quantize';\nexport const QUANTILE = 'quantile';\n\nexport const COLOR = 'color';\nexport const SHAPE = 'shape';\nexport const SIZE = 'size';\n\nexport const DOMAIN = 'domain';\nexport const BAND = 'band';\nexport const HIDDEN = 'hidden';\nexport const NUMBER = 'number';\nexport const BOTTOM = 'bottom';\nexport const TOP = 'top';\n\nexport const RGB = 'rgb';\nexport const HEX = 'hex';\nexport const HSLA = 'hsla';\nexport const HSL = 'hsl';\n\n","import { scales, colorSchemes } from 'muze-utils';\n\nimport {\n SEQUENTIAL,\n ORDINAL,\n LINEAR,\n CONTINOUS,\n THRESHOLD,\n QUANTIZE\n} from './enums/constants';\n\nimport * as ScaleType from './enums/scale-type';\n\nconst {\n scaleLinear,\n scaleThreshold,\n scaleLog,\n scalePow,\n scaleIdentity,\n scaleOrdinal,\n scaleSequential,\n scaleQuantize,\n scaleQuantile,\n schemeCategory10,\n schemeCategory20,\n schemeCategory20b,\n scaleBand,\n scaleTime\n} = scales;\nexport const scaleMap = {\n [ScaleType.LINEAR]: scaleLinear,\n [ScaleType.BAND]: scaleBand,\n [ScaleType.QUANTIZE]: scaleQuantize,\n [ScaleType.QUANTILE]: scaleQuantile,\n [ScaleType.THRESHOLD]: scaleThreshold,\n [ScaleType.SEQUENTIAL]: scaleSequential,\n [ScaleType.LOG]: scaleLog,\n [ScaleType.POW]: scalePow,\n [ScaleType.IDENTITY]: scaleIdentity,\n [ScaleType.TIME]: scaleTime,\n [ScaleType.COLOR]: scaleLinear,\n [ScaleType.ORDINAL]: scaleOrdinal\n};\nexport const SCHEMES = {\n SCHEME1: schemeCategory10,\n SCHEME2: schemeCategory20,\n SCHEME3: schemeCategory20b\n};\n\n/**\n * Accepts a scheme in a string format and returns the scale from d3-scale-chromatic\n *\n * @export\n * @param {string} scheme a string representing the kind of scheme for the color axis\n * @return {Object} The corresponding scale from a scheme type from d3 chromatic scale\n */\nexport function getScheme (scheme) {\n if (scheme[0] === 'i') {\n return scaleSequential(colorSchemes[scheme]);\n }\n return scaleOrdinal(colorSchemes[scheme]);\n}\n\n/**\n *\n *\n * @export\n * @param {*} scheme\n * @returns\n */\nexport function getSchemeType (scheme) {\n let schemeType = '';\n if (scheme && typeof (scheme) === 'string') {\n schemeType = scheme[0] === 'i' ? SEQUENTIAL : ORDINAL;\n } else {\n schemeType = ORDINAL;\n }\n return schemeType;\n}\n\n/**\n * This function is used to create a scale that is assigned to\n * an instance of axis.\n *\n * @export\n * @param {Object} params the input parameters to create a Scale object\n * @param {string} params.type the type of scale\n * @param {Array} params.range the range of scale\n * @return {Object} instance of scale\n */\nexport function createScale (params) {\n if (!params.type || !scaleMap[params.type]) {\n throw new Error(`${params.type} is not a valid scale type`);\n }\n if (!Array.isArray(params.range)) {\n throw new Error('range parameter must be an array');\n }\n let scaleFactory = null;\n const range = params.range;\n // @todo: do it using scale decorator\n if (params.type === LINEAR && params.interpolator) {\n scaleFactory = scaleMap[params.interpolator];\n if (params.interpolator === ScaleType.POW) {\n return scaleFactory().range(range).exponent(params.exponent);\n } else if (params.interpolator === ScaleType.LOG) {\n return scaleFactory().range(range).base([params.base]);\n }\n } else {\n scaleFactory = scaleMap[params.type];\n }\n\n if (params.type === QUANTIZE) {\n scaleFactory().nice();\n }\n return scaleFactory().range(range);\n}\n\n/**\n * This method is used to update the range of a scale\n * so that the core module can remain agnostic of the d3\n * scale api.\n *\n * @export\n * @param {Scale} scale Instance of d3 Scale.\n * @param {Array} range new range of the scale.\n * @return {Scale} Updated scale.\n */\nexport function updateScaleRange (scale, range) {\n return scale.range(range);\n}\n\n/**\n *\n *\n * @export\n * @param {*} domainType\n * @param {*} rangeType\n * @param {*} steps\n * @returns\n */\nexport function getScaleType (domainType, rangeType, steps) {\n if (rangeType === CONTINOUS) {\n return LINEAR;\n }\n if (domainType === CONTINOUS) {\n if (steps instanceof Array) {\n return THRESHOLD;\n }\n return QUANTIZE;\n }\n return ORDINAL;\n}\n","import { getUniqueId } from 'muze-utils';\nimport { CLASSPREFIX } from '../enums/constants';\n\n/**\n *\n *\n */\nexport const defaultConfig = {\n id: getUniqueId(),\n axisName: {\n defClassName: 'axis-name'\n },\n axisNamePadding: 12,\n base: 10,\n classPrefix: CLASSPREFIX,\n className: `${CLASSPREFIX}-axis`,\n exponent: 1,\n interpolator: 'linear',\n fixedBaseline: true,\n labels: {\n rotation: 0,\n smartTicks: false\n },\n orientation: 'left',\n maxHeight: 50, // @todo: height and width wont be hardcoded\n maxWidth: 40,\n numberFormat: val => val,\n padding: 0.3,\n nice: true,\n numberOfTicks: 10,\n rotate: false,\n show: true,\n showAxisName: true,\n showInnerTicks: null,\n showOuterTicks: null,\n style: {},\n type: 'linear',\n tickFormat: null,\n tickValues: null,\n xOffset: undefined,\n yOffset: undefined\n};\n\n","/**\n * This file exports functionality that is used to render axis.\n */\nimport { selectElement, makeElement, angleToRadian } from 'muze-utils';\nimport * as AxisOrientation from './enums/axis-orientation';\nimport { LINEAR, HIDDEN, BOTTOM, TOP } from './enums/constants';\n\n/**\n *\n *\n * @param {*} instance\n * @param {*} container\n * @param {*} labelManager\n * @param {*} config\n */\nconst rotateAxis = (instance, tickText, labelManager, config) => {\n const axis = instance.axis();\n const scale = instance.scale();\n const {\n orientation,\n labels,\n fixedBaseline,\n type\n } = config;\n let { rotation } = labels;\n\n const tickSize = instance.getTickSize();\n\n tickText.each(function (datum, index) {\n let yShift;\n let xShift;\n const tickFormatter = axis.tickFormat() ? axis.tickFormat : scale.tickFormat;\n const temp = tickFormatter ? tickFormatter()(datum) : datum;\n\n datum = temp.toString();\n\n const tickLabelDim = labelManager.getOriSize(datum);\n const width = tickLabelDim.width * 0.5;\n const height = tickLabelDim.height * 0.5;\n\n if (rotation < 0) {\n rotation = 360 + rotation;\n }\n\n const quadrant = 4 - Math.floor(rotation / 90);\n const rotationNormalizer = ((quadrant % 2 === 0) ? rotation : 180 * Math.ceil(rotation / 180) - rotation) % 180;\n\n yShift = Math.sqrt(height ** 2 + width ** 2) * Math.sin(angleToRadian(rotationNormalizer));\n\n if ((quadrant === 3 || quadrant === 2) && !(rotationNormalizer > 67.5 && rotationNormalizer <= 90)) {\n yShift += height * 2;\n }\n xShift = width;\n\n if (rotation === 90) {\n xShift = height;\n } else if (rotation === 270) {\n xShift = -height;\n } else {\n xShift = 0;\n }\n\n if (orientation === AxisOrientation.TOP) {\n xShift = (index === 0 && fixedBaseline && type === LINEAR) ? xShift + xShift / 2 : xShift;\n selectElement(this)\n .attr('transform', `translate(${-xShift + tickSize} \n ${-yShift - tickSize}) rotate(${rotation})`);\n } else {\n xShift = (index === 0 && fixedBaseline && type === LINEAR) ? xShift - xShift / 2 : xShift;\n selectElement(this)\n .attr('transform', `translate(${xShift - tickSize} \n ${yShift + tickSize}) rotate(${rotation})`);\n }\n });\n return tickText;\n};\n\n/**\n *\n *\n * @param {*} tickText\n * @param {*} axisInstance\n */\nconst changeTickOrientation = (selectContainer, axisInstance, tickSize) => {\n const {\n _smartTicks\n } = axisInstance;\n const config = axisInstance.config();\n const labelManager = axisInstance.dependencies().labelManager;\n const {\n labels,\n orientation\n } = config;\n const {\n rotation,\n smartTicks: isSmartTicks\n } = labels;\n\n const tickText = selectContainer.selectAll('.tick text');\n tickText.selectAll('tspan').remove();\n\n // rotate labels if not enough space is available\n if (rotation !== 0 && isSmartTicks === false && (orientation === TOP || orientation === BOTTOM)) {\n rotateAxis(axisInstance, tickText, labelManager, config);\n } else if (rotation === 0 && isSmartTicks === false) {\n tickText.attr('transform', '');\n } else {\n tickText.attr('y', 0)\n .attr('x', 0)\n .text('');\n const tspan = makeElement(tickText, 'tspan', (d, i) => _smartTicks[i].lines, 'smart-text');\n tspan.attr('dy', '0')\n .style('opacity', '0')\n .transition()\n .duration(1000)\n .attr('dy', (d, i) => {\n if (orientation === BOTTOM || i !== 0) {\n return _smartTicks[i].oriTextHeight;\n }\n return -_smartTicks[i].oriTextHeight * (_smartTicks[i].lines.length - 1) - tickSize;\n })\n .style('opacity', 1)\n .attr('x', 0)\n .text(e => e);\n }\n\n return tickText;\n};\n\nconst setFixedBaseline = (axisInstance) => {\n const {\n fixedBaseline\n } = axisInstance.config();\n if (fixedBaseline) {\n axisInstance.setFixedBaseline();\n }\n};\n\n/**\n *\n *\n * @param {*} textNode\n * @param {*} orientation\n * @param {*} measures\n */\nconst setAxisNamePos = (textNode, orientation, measures) => {\n const {\n axisNameHeight,\n yOffset,\n labelOffset,\n availableSpace\n } = measures;\n switch (orientation) {\n case AxisOrientation.LEFT:\n textNode.attr('transform',\n `translate(${-(availableSpace.width - axisNameHeight)},${yOffset + labelOffset})rotate(-90)`);\n break;\n case AxisOrientation.RIGHT:\n textNode.attr('transform',\n `translate(${(availableSpace.width - axisNameHeight)},${yOffset + labelOffset})rotate(90)`);\n break;\n case AxisOrientation.TOP:\n textNode.attr('transform',\n `translate(${availableSpace.width / 2},${-availableSpace.height + axisNameHeight})`);\n break;\n case AxisOrientation.BOTTOM:\n textNode.attr('transform',\n `translate(${availableSpace.width / 2},${availableSpace.height - axisNameHeight / 2})`);\n break;\n default:\n }\n return textNode;\n};\n\n/**\n * This method is used to render the axis inside an\n * svg container.\n *\n * @export\n * @param {Object} axisInstance the nput object required to render axis\n * @param {string} axisInstance.orientation the orientation of axis\n * @param {Object} axisInstance.scale instance of d3 scale\n * @param {SVGElement} axisInstance.container the container in which to render\n */\nexport function renderAxis (axisInstance) {\n const config = axisInstance.config();\n const labelManager = axisInstance.dependencies().labelManager;\n const mount = axisInstance.mount();\n const range = axisInstance.range();\n const axis = axisInstance.axis();\n const scale = axisInstance.scale();\n const {\n _axisNameStyle,\n _tickLabelStyle,\n formatter,\n tickValues\n } = axisInstance;\n const {\n orientation,\n name,\n labels,\n xOffset,\n yOffset,\n axisNamePadding,\n className,\n showAxisName,\n show,\n id,\n interpolator,\n classPrefix\n } = config;\n\n if (!show) {\n return;\n }\n\n const tickSize = axisInstance.getTickSize();\n\n const selectContainer = makeElement(selectElement(mount), 'g', [axisInstance], `${className}`, {},\n key => key.config().id);\n\n // Set style for tick labels\n labelManager.setStyle(_tickLabelStyle);\n\n // @to-do: Need to write a configuration override using decorator pattern\n if (interpolator === 'linear') {\n // Set ticks for the axis\n axisInstance.setTickValues();\n }\n\n const labelFunc = scale.ticks || scale.quantile || scale.domain;\n\n formatter && axis.tickFormat(formatter(tickValues || axis.tickValues() || labelFunc()));\n\n // Get range(length of range)\n const availableSpace = Math.abs(range[0] - range[1]);\n\n // Get width and height taken by axis labels\n const labelProps = axisInstance.axisDimensions().tickLabelDim;\n\n // Draw axis ticks\n selectContainer.attr('transform', `translate(${xOffset},${yOffset})`);\n setFixedBaseline(axisInstance);\n if (labels.smartTicks === false) {\n selectContainer.transition()\n .duration(1000).call(axis);\n } else {\n selectContainer.call(axis);\n }\n selectContainer.selectAll('.tick').classed(`${classPrefix}-ticks`, true);\n selectContainer.selectAll('.tick line').classed(`${classPrefix}-tick-lines`, true);\n\n // Set classes for ticks\n const tickText = selectContainer.selectAll('.tick text');\n tickText.classed(`${classPrefix}-ticks`, true)\n .classed(`${classPrefix}-ticks-${id}`, true);\n changeTickOrientation(selectContainer, axisInstance, tickSize);\n\n // Create axis name\n const textNode = makeElement(selectContainer, 'text', [name], `${classPrefix}-axis-name`)\n .attr('text-anchor', 'middle')\n .classed(`${classPrefix}-axis-name-${id}`, true)\n .text(d => d);\n\n // Hide axis name if show is off\n textNode.classed(HIDDEN, !showAxisName);\n\n // render labels based on orientation of axis\n const labelOffset = availableSpace / 2;\n\n // Set style for axis name\n labelManager.setStyle(_axisNameStyle);\n const axisNameSpace = labelManager.getOriSize(name);\n const measures = {\n labelProps,\n tickSize,\n axisNamePadding,\n axisNameHeight: axisNameSpace.height,\n axisNameWidth: axisNameSpace.width,\n yOffset,\n xOffset,\n labelOffset,\n availableSpace: axisInstance.availableSpace()\n };\n // Set position for axis name\n setAxisNamePos(textNode, orientation, measures);\n}\n","import { TOP, LEFT, BOTTOM } from '../enums/axis-orientation';\nimport { LOG } from '../enums/scale-type';\n\nexport const getNumberOfTicks = (availableSpace, labelDim, axis, axisInstance) => {\n const ticks = axis.scale().ticks();\n const { numberOfTicks } = axisInstance.config();\n const tickLength = ticks.length;\n let numberOfValues = tickLength;\n\n if (tickLength * (labelDim * 1.5) > availableSpace) {\n numberOfValues = Math.floor(availableSpace / (labelDim * 1.5));\n }\n\n numberOfValues = Math.min(numberOfTicks, Math.max(1, numberOfValues));\n return axis.scale().ticks(numberOfValues);\n};\n\nexport const sanitizeDomain = (domain, context) => {\n const interpolator = context.config().interpolator;\n // @todo: Get from scale decorator\n if (interpolator === LOG && domain[0] >= 0) {\n return [Math.max(1, domain[0]), Math.max(1, domain[1])];\n }\n return domain;\n};\n\nexport const getTickFormatter = (tickFormat, numberFormat) => {\n if (tickFormat) {\n return ticks => (val, i) => tickFormat(numberFormat(val), i, ticks);\n }\n return () => val => numberFormat(val);\n};\n\n/**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\nexport const getTickLabelInfo = (context) => {\n let largestLabel = '';\n let labelProps;\n let smartTick = {};\n let axisTickLabels;\n const scale = context.scale();\n const allLabelLengths = [];\n const { tickFormat, tickValues, numberFormat } = context.config();\n const labelFunc = scale.ticks || scale.quantile || scale.domain;\n // set the style on the shared label manager instance\n const { labelManager } = context.dependencies();\n\n labelManager.setStyle(context._tickLabelStyle);\n // get the values along the domain\n\n axisTickLabels = tickValues || labelFunc();\n // Get the tick labels\n axisTickLabels = axisTickLabels.map((originalLabel, i) => {\n const formattedLabel = numberFormat(originalLabel);\n\n // get formats of tick if any\n const label = tickFormat ? tickFormat(formattedLabel, i, axisTickLabels) : (scale.tickFormat ?\n numberFormat(scale.tickFormat()(originalLabel)) : formattedLabel);\n\n // convert to string for quant values\n const temp = label.toString();\n // Get spaces for all labels\n allLabelLengths.push(labelManager.getOriSize(temp));\n // Getting largest label\n if (temp.length > largestLabel.length) {\n largestLabel = temp;\n smartTick = context.smartTicks() ? context.smartTicks()[i] : {};\n labelProps = allLabelLengths[i];\n }\n return label;\n });\n\n labelProps = labelManager.getOriSize(largestLabel);\n\n return { largestLabel, largestLabelDim: labelProps, axisTickLabels, allLabelLengths, smartTick };\n};\n\n/**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\nexport const computeAxisDimensions = (context) => {\n let tickLabelDim = {};\n const {\n name,\n labels,\n tickValues\n } = context.config();\n const angle = ((labels.smartTicks) ? 0 : labels.rotation) * Math.PI / 180;\n const { labelManager } = context.dependencies();\n const {\n largestLabelDim,\n axisTickLabels,\n smartTick\n } = getTickLabelInfo(context);\n const { height: labelHeight, width: labelWidth } = largestLabelDim;\n // get the domain of axis\n const domain = context.domain();\n\n if (domain.length === 0) {\n return null;\n }\n if (context._rotationLock === false) {\n context.setRotationConfig(tickValues || axisTickLabels, largestLabelDim.width);\n context._rotationLock = false;\n }\n if (labels.smartTicks) {\n tickLabelDim = smartTick;\n } else {\n tickLabelDim = {\n width: Math.abs(labelHeight * Math.sin(angle)) + Math.abs(labelWidth * Math.cos(angle)),\n height: Math.abs(labelWidth * Math.sin(angle)) + Math.abs(labelHeight * Math.cos(angle))\n };\n }\n\n labelManager.setStyle(context._axisNameStyle);\n return {\n tickSize: context.getTickSize(),\n tickLabelDim,\n axisLabelDim: labelManager.getOriSize(name),\n largestLabelDim,\n axisTickLabels\n };\n};\n\n/**\n*\n*\n* @memberof SimpleAxis\n*/\nexport const setOffset = (context) => {\n let x = 0;\n let y = 0;\n const logicalSpace = context.logicalSpace();\n const config = context.config();\n const {\n orientation,\n xOffset,\n yOffset\n } = config;\n if (orientation === LEFT) {\n x = xOffset === undefined ? logicalSpace.width : xOffset;\n }\n if (orientation === TOP) {\n y = yOffset === undefined ? logicalSpace.height : yOffset;\n }\n context.config({ xOffset: x, yOffset: y });\n};\n\n/**\n *\n *\n * @param {*} timeDiff\n * @param {*} range\n * @param {*} domain\n * @returns\n */\nconst getAxisOffset = (timeDiff, range, domain) => {\n const pvr = Math.abs(range[1] - range[0]) / (domain[1] - domain[0]);\n const width = (pvr * timeDiff);\n const avWidth = (range[1] - range[0]);\n const bars = avWidth / width;\n const barWidth = avWidth / (bars + 1);\n const diff = avWidth - barWidth * bars;\n\n return diff / 2;\n};\n\nexport const adjustRange = (minDiff, range, domain, orientation) => {\n const diff = getAxisOffset(minDiff, range, domain);\n\n if (orientation === TOP || orientation === BOTTOM) {\n range[0] += diff;\n range[1] -= diff;\n } else {\n range[0] -= diff;\n range[1] += diff;\n }\n return range;\n};\n\n /**\n * Listener attached to the axis on change of parameters.\n *\n * @param {Function} callback to be excuted on change of domain range etc\n * @memberof SimpleAxis\n */\nexport const registerChangeListeners = (context) => {\n const store = context.store();\n\n store.model.next(['domain', 'range', 'mount', 'config'], (...params) => {\n context.render();\n context._domainLock = false;\n context._eventList.forEach((e) => {\n e.action instanceof Function && e.action(...params);\n });\n }, true);\n return context;\n};\n\n/**\n *\n *\n * @param {*} axisDimensions\n * @param {*} config\n * @param {*} range\n * @returns\n */\nexport const getHorizontalAxisSpace = (context, axisDimensions, config, range) => {\n let width;\n let height;\n const {\n tickSize,\n tickLabelDim,\n axisLabelDim\n } = axisDimensions;\n const {\n axisNamePadding,\n showAxisName,\n tickValues\n } = config;\n const domain = context.domain();\n const { height: axisDimHeight } = axisLabelDim;\n const { height: tickDimHeight, width: tickDimWidth } = tickLabelDim;\n\n width = range && range.length ? range[1] - range[0] : 0;\n\n height = 0;\n if (tickValues) {\n const minTickDiff = context.getMinTickDifference();\n const [min, max] = [Math.min(...tickValues, ...domain), Math.max(...tickValues, ...domain)];\n\n width = ((max - min) / Math.abs(minTickDiff)) * (tickDimWidth + context._minTickDistance.width);\n }\n if (!width || width === 0) {\n height = Math.max(tickDimWidth, tickDimHeight);\n } else {\n height = tickDimHeight;\n }\n height += (showAxisName ? (axisDimHeight + axisNamePadding) : 0) + tickSize;\n return {\n width,\n height\n };\n};\n\n/**\n *\n *\n * @param {*} axisDimensions\n * @param {*} config\n * @param {*} range\n * @returns\n */\nexport const getVerticalAxisSpace = (context, axisDimensions, config) => {\n let height;\n let width;\n const {\n tickSize,\n tickLabelDim,\n axisLabelDim\n } = axisDimensions;\n const {\n axisNamePadding,\n showAxisName,\n tickValues\n } = config;\n const domain = context.domain();\n const { height: axisDimHeight } = axisLabelDim;\n const { height: tickDimHeight, width: tickDimWidth } = tickLabelDim;\n\n height = 0;\n width = tickDimWidth;\n if (tickValues) {\n const minTickDiff = context.getMinTickDifference();\n const [min, max] = [Math.min(...tickValues, ...domain), Math.max(...tickValues, ...domain)];\n\n height = ((max - min) / Math.abs(minTickDiff)) * (tickDimHeight);\n }\n width += (showAxisName ? axisDimHeight : 0) + tickSize + axisNamePadding;\n\n return {\n height,\n width\n };\n};\n\n /**\n * Calculates the logical space of the axis\n * @return {Object} Width and height occupied by the axis.\n */\nexport const calculateBandSpace = (context) => {\n const range = context.range();\n const config = context.config();\n const {\n orientation,\n show\n } = config;\n const axisDimensions = context.getAxisDimensions();\n const {\n largestLabelDim,\n axisTickLabels\n } = axisDimensions;\n const { height: largestDimHeight, width: largestDimWidth } = largestLabelDim;\n\n if (orientation === TOP || orientation === BOTTOM) {\n let { width, height } = getHorizontalAxisSpace(context, axisDimensions, config, range);\n if (!width || width === 0) {\n width = axisTickLabels.length * (Math.min(largestDimWidth + context._minTickDistance.width,\n largestDimHeight + context._minTickDistance.width));\n }\n if (show === false) {\n height = 0;\n }\n return {\n width,\n height\n };\n }\n\n let { width, height } = getVerticalAxisSpace(context, axisDimensions, config, range);\n\n if (!height || height === 0) {\n height = axisTickLabels.length * (largestDimHeight + largestDimHeight / 2) + largestDimHeight;\n }\n if (show === false) {\n width = 0;\n }\n return {\n width,\n height\n };\n};\n\n/**\n * Calculates the logical space of the axis\n * @return {Object} Width and height occupied by the axis.\n */\nexport const calculateContinousSpace = (context) => {\n const range = context.range();\n const config = context.config();\n const axisDimensions = context.getAxisDimensions();\n\n const {\n orientation,\n show,\n showAxisName\n } = config;\n const {\n axisLabelDim\n } = axisDimensions;\n\n if (show === false) {\n return {\n width: 0,\n height: 0\n };\n }\n\n const { width: axisDimWidth } = axisLabelDim;\n\n if (orientation === TOP || orientation === BOTTOM) {\n const { width, height } = getHorizontalAxisSpace(context, axisDimensions, config);\n const axisWidth = Math.max(width, axisDimWidth);\n\n return {\n width: axisWidth,\n height\n };\n }\n\n const { width, height } = getVerticalAxisSpace(context, axisDimensions, config, range);\n\n const effHeight = Math.max(height, showAxisName ? axisDimWidth : 0);\n\n return {\n width,\n height: effHeight\n };\n};\n\n","import { mergeRecursive } from 'muze-utils';\n\nexport const PROPS = {\n availableSpace: {},\n axisDimensions: {},\n config: {\n sanitization: (context, value) => {\n if (value.labels && value.labels.rotation) {\n context._rotationLock = true;\n }\n value = mergeRecursive(context._config || {}, value);\n value.axisNamePadding = Math.max(value.axisNamePadding, 0);\n context.axis(context.createAxis(value));\n context.store().commit('config', value);\n return value;\n }\n },\n logicalSpace: {},\n mount: {\n sanitization: (context, value) => {\n context.store().commit('mount', value);\n return value;\n }\n },\n range: {\n sanitization: (context, value) => {\n context.scale().range(value);\n context.logicalSpace(null);\n context.store().commit('range', value);\n return value;\n }\n },\n\n smartTicks: {},\n store: {},\n tickSize: {}\n};\n","import {\n Store,\n mergeRecursive,\n getSmartComputedStyle,\n selectElement,\n generateGetterSetters,\n getUniqueId\n} from 'muze-utils';\nimport { createScale } from '../scale-creator';\nimport { axisOrientationMap, BOTTOM, TOP } from '../enums/axis-orientation';\nimport { defaultConfig } from './default-config';\nimport { renderAxis } from '../axis-renderer';\nimport { DOMAIN, BAND } from '../enums/constants';\nimport {\n computeAxisDimensions,\n setOffset,\n registerChangeListeners,\n calculateContinousSpace\n} from './helper';\nimport { PROPS } from './props';\n\nexport default class SimpleAxis {\n\n /**\n * Creates an instance of SimpleAxis.\n * @memberof SimpleAxis\n */\n constructor (config, dependencies) {\n this._id = getUniqueId();\n\n this._dependencies = dependencies;\n this._mount = null;\n this._range = [];\n this._domain = [];\n this._domainLock = false;\n this._rotationLock = false;\n this._axisDimensions = {};\n this._eventList = [];\n\n const defCon = mergeRecursive({}, this.constructor.defaultConfig());\n const simpleConfig = mergeRecursive(defCon, config);\n\n const bodyElem = selectElement('body');\n const classPrefix = simpleConfig.classPrefix;\n this._tickLabelStyle = getSmartComputedStyle(bodyElem, `${classPrefix}-ticks`);\n this._axisNameStyle = getSmartComputedStyle(bodyElem, `${classPrefix}-axis-name`);\n dependencies.labelManager.setStyle(this._tickLabelStyle);\n this._minTickDistance = dependencies.labelManager.getOriSize('ww');\n\n generateGetterSetters(this, PROPS);\n this.store(new Store({\n domain: this.domain(),\n range: this.range(),\n config: simpleConfig,\n mount: this.mount()\n }));\n this.config(simpleConfig);\n\n this._scale = this.createScale(this._config);\n this._axis = this.createAxis(this._config);\n\n registerChangeListeners(this);\n }\n\n /**\n * Returns the default configuration of simple axis\n * @return {Object} default configurations\n */\n static defaultConfig () {\n return defaultConfig;\n }\n\n /**\n * Sets a fixed baseline for the first ticks so that they can render effectively within\n * the given area\n *\n * @param {*} tickText\n * @param {*} config\n * @param {*} labelManager\n */\n setFixedBaseline () {\n return this;\n }\n\n /**\n *\n *\n * @readonly\n * @memberof SimpleAxis\n */\n scale (...params) {\n if (params.length) {\n this._scale = params[0];\n return this;\n }\n return this._scale;\n }\n\n /**\n *\n *\n * @readonly\n * @memberof SimpleAxis\n */\n axis (...params) {\n if (params.length) {\n this._axis = params[0];\n return this;\n }\n return this._axis;\n }\n\n /**\n *\n *\n * @param {*} d\n * @returns\n * @memberof SimpleAxis\n */\n domain (...domain) {\n if (domain.length) {\n this.scale().domain(domain[0]);\n this._domain = this.scale().domain();\n this.smartTicks(this.setTickConfig());\n this.store().commit(DOMAIN, this._domain);\n this.logicalSpace(null);\n return this;\n }\n return this._domain;\n }\n\n /**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\n dependencies () {\n return this._dependencies;\n }\n\n /**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\n createScale (config) {\n const {\n base,\n padding,\n interpolator,\n exponent\n } = config;\n const range = this.range();\n const scale = createScale({\n padding,\n interpolator,\n exponent,\n base,\n range,\n type: this.constructor.type()\n });\n\n return scale;\n }\n\n getTickFormatter (tickFormat, numberFormat) {\n if (tickFormat) {\n return ticks => (val, i) => tickFormat(numberFormat(val), i, ticks);\n }\n return () => val => numberFormat(val);\n }\n\n /**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\n createAxis (config) {\n const {\n tickFormat,\n numberFormat,\n orientation\n } = config;\n const axisClass = axisOrientationMap[orientation];\n\n if (axisClass) {\n const axis = axisClass(this.scale());\n this.formatter = this.getTickFormatter(tickFormat, numberFormat);\n\n return axis;\n }\n return null;\n }\n\n /**\n *\n *\n * @memberof SimpleAxis\n */\n setTickConfig () {\n return this;\n }\n\n /**\n *\n *\n * @param {*} axisTickLabels\n * @param {*} labelWidth\n * @returns\n * @memberof SimpleAxis\n */\n setRotationConfig (axisTickLabels, labelWidth) {\n const { orientation } = this.config();\n\n if (orientation === TOP || orientation === BOTTOM) {\n const range = this.range();\n const length = Math.abs(range[0] - range[1]);\n this.config({ labels: { rotation: 0 } });\n if (length > 0 && axisTickLabels.length * (labelWidth + this._minTickDistance.width) > length) {\n this.config({ labels: { rotation: -90 } });\n }\n }\n return this;\n }\n\n /**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\n adjustRange () {\n return this;\n }\n\n getScaleValue (domainVal) {\n if (domainVal === null || domainVal === undefined) {\n return undefined;\n }\n return this.scale()(domainVal);\n }\n\n /**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\n getTickSize () {\n return this.axis().tickSize();\n }\n\n /**\n * Gets the space occupied by the parts of an axis\n *\n * @return {Object} object with details about sizes of the axis.\n * @memberof SimpleAxis\n */\n getAxisDimensions () {\n this.axisDimensions(computeAxisDimensions(this));\n return this.axisDimensions();\n }\n\n /**\n * Gets the space occupied by the axis\n *\n * @return {Object} object with details about size of the axis.\n * @memberof SimpleAxis\n */\n getLogicalSpace () {\n if (!this.logicalSpace()) {\n this.logicalSpace(calculateContinousSpace(this));\n setOffset(this);\n this.logicalSpace();\n }\n return this.logicalSpace();\n }\n\n /**\n * Returns the value from the domain when given a value from the range.\n * @param {number} value Value from the range.\n * @return {number} Value\n */\n invert (...value) {\n const values = value.map(d => this.scale().invert(d)) || [];\n return value.length === 1 ? values[0] : values;\n }\n\n /**\n * Gets the nearest range value from the given range values.\n * @param {number} v1 Start range value\n * @param {number} v2 End range value\n * @return {Array} range values\n */\n getNearestRange (v1, v2) {\n let p1;\n let p2;\n let extent;\n const {\n type\n } = this.config();\n const scale = this.scale();\n const range = scale.range();\n const reverse = range[0] > range[1];\n\n if (type === BAND) {\n extent = scale.invertExtent(v1, v2);\n p1 = scale(reverse ? extent[extent.length - 1] : extent[0]);\n p2 = scale(reverse ? extent[0] : extent[extent.length - 1]) + scale.bandwidth();\n return [p1, p2];\n }\n return [v1, v2];\n }\n\n /**\n * This method is used to assign a domain to the axis.\n *\n * @param {Array} domain the domain of the scale\n * @memberof SimpleAxis\n */\n updateDomainBounds (domain) {\n let currentDomain = this.domain();\n if (this.config().domain) {\n currentDomain = this.config().domain;\n } else {\n if (currentDomain.length === 0) {\n currentDomain = domain;\n }\n if (domain.length) {\n currentDomain = [Math.min(currentDomain[0], domain[0]), Math.max(currentDomain[1], domain[1])];\n }\n }\n\n return this.domain(currentDomain);\n }\n\n /**\n *\n *\n * @param {*} domain\n * @returns\n * @memberof SimpleAxis\n */\n updateDomainCache (domain) {\n if (this._domainLock === false) {\n this.domain([]);\n this._domainLock = true;\n }\n const cachedDomain = [];\n domain && domain.forEach((d) => {\n d !== undefined && d !== null && cachedDomain.push(d);\n });\n return this.updateDomainBounds(cachedDomain);\n }\n\n getMinTickDifference () {\n return this.domain();\n }\n\n getFormattedTickValues (tickValues) {\n return tickValues;\n }\n\n /**\n *\n *\n * @param {*} tickValues\n * @returns\n * @memberof SimpleAxis\n */\n setTickValues () {\n const {\n tickValues\n } = this.config();\n\n if (tickValues) {\n tickValues instanceof Array && this.axis().tickValues(tickValues);\n return this;\n }\n return this;\n }\n\n /**\n * This method returns the width in pixels for one\n * unit along the axis. It is only applicable to band scale\n * and returns undefined for other scale type.\n *\n * @return {number} the width of one band along band scale axis\n * @memberof SimpleAxis\n */\n getUnitWidth () {\n return 0;\n }\n\n /**\n * This method returns an object that can be used to\n * reconstruct this instance.\n *\n * @return {Object} the serializable props of axis\n * @memberof SimpleAxis\n */\n serialize () {\n return {\n name: this.name,\n type: this.type,\n range: this.range(),\n config: this.config()\n };\n }\n\n /**\n * Returns the id of the axis.\n * @return {string} Unique identifier of the axis.\n */\n get id () {\n return this._id;\n }\n\n registerEvent (event, fn) {\n this._eventList.push({ name: event, action: fn });\n }\n\n /**\n *\n *\n * @param {*} fn\n * @memberof SimpleAxis\n */\n on (event, fn) {\n event = event || 'update';\n this.registerEvent(event, fn);\n }\n\n /**\n * This method is used to render the axis inside\n * the supplied svg container.\n *\n * @param {SVGElement} svg the svg element in which to render the path\n * @memberof SimpleAxis\n */\n /* istanbul ignore next */render () {\n if (this.mount()) {\n renderAxis(this);\n }\n return this;\n }\n\n /**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\n remove () {\n this.store().unsubscribeAll();\n selectElement(this.mount()).remove();\n return this;\n }\n\n /**\n *\n *\n * @memberof SimpleAxis\n */\n unsubscribe () {\n this.store().unsubscribeAll();\n return this;\n }\n\n /**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\n isReverse () {\n const range = this.range();\n return range[0] > range[1];\n }\n\n /**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\n getPixelToValueRatio () {\n const scale = this.scale();\n const range = scale.range();\n const domain = scale.domain();\n\n return Math.abs(range[1] - range[0]) / (domain[1] - domain[0]);\n }\n}\n\n","import { scaleMap } from '../../scale-creator';\n\nexport default class LinearInterpolator {\n\n createScale (config) {\n const {\n range\n } = config;\n const scaleFactory = scaleMap.linear;\n this._scale = scaleFactory().range(range);\n return this._scale;\n }\n\n getScaleValue (domainVal) {\n return this._scale(domainVal) + 0.5;\n }\n\n sanitizeDomain (domain) {\n return domain;\n }\n}\n","import { scaleMap } from '../../scale-creator';\n\nexport default class LogInterpolator {\n\n createScale (config) {\n const {\n range,\n base\n } = config;\n const scaleFactory = scaleMap.log;\n this._scale = scaleFactory().range(range).base(base);\n return this._scale;\n }\n\n getScaleValue (domainVal) {\n if (domainVal <= 0) {\n return 1;\n }\n\n return this._scale(domainVal) + 0.5;\n }\n\n sanitizeDomain (domain) {\n if (domain[0] <= 0) {\n return [Math.max(1, domain[0]), Math.max(1, domain[1])];\n } return domain;\n }\n}\n","import { scaleMap } from '../../scale-creator';\n\nexport default class PowInterpolator {\n\n createScale (config) {\n const {\n range,\n exponent\n } = config;\n const scaleFactory = scaleMap.pow;\n this._scale = scaleFactory().range(range).exponent(exponent);\n return this._scale;\n }\n\n getScaleValue (domainVal) {\n return this._scale(domainVal) + 0.5;\n }\n\n sanitizeDomain (domain) {\n return domain;\n }\n}\n","import { getSmallestDiff } from 'muze-utils';\nimport SimpleAxis from './simple-axis';\nimport { BOTTOM, TOP, LEFT, RIGHT } from '../enums/axis-orientation';\nimport { LINEAR, LOG, POW } from '../enums/scale-type';\nimport { LogInterpolator, PowInterpolator, LinearInterpolator } from './interpolators';\nimport { DOMAIN } from '../enums/constants';\nimport {\n getTickLabelInfo,\n getNumberOfTicks\n} from './helper';\n\nexport const interpolatorMap = {\n [LOG]: LogInterpolator,\n [POW]: PowInterpolator,\n [LINEAR]: LinearInterpolator\n};\n\nexport default class ContinousAxis extends SimpleAxis {\n constructor (config, dependencies) {\n config.tickFormat = config.tickFormat || (val => val);\n super(config, dependencies);\n }\n /**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\n createScale (config) {\n const {\n base,\n padding,\n interpolator,\n exponent\n } = config;\n const range = this.range();\n const InterpolatorCls = interpolatorMap[interpolator];\n\n this._interpolator = new InterpolatorCls();\n let scale = this._interpolator.createScale({\n padding,\n exponent,\n base,\n range\n });\n\n scale = scale.nice();\n return scale;\n }\n\n /**\n * This method is used to assign a domain to the axis.\n *\n * @param {Array} domain the domain of the scale\n * @memberof SimpleAxis\n */\n updateDomainBounds (domain) {\n let currentDomain = this.domain();\n if (this.config().domain) {\n currentDomain = this.config().domain;\n } else {\n if (currentDomain.length === 0) {\n currentDomain = domain;\n }\n if (domain.length) {\n currentDomain = [Math.min(currentDomain[0], domain[0]), Math.max(currentDomain[1], domain[1])];\n }\n }\n\n return this.domain(currentDomain);\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof ContinousAxis\n */\n static type () {\n return LINEAR;\n }\n\n getScaleValue (domainVal) {\n if (domainVal === null || domainVal === undefined) {\n return undefined;\n }\n return this._interpolator.getScaleValue(domainVal);\n }\n /**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\n getTickSize () {\n const {\n showInnerTicks,\n showOuterTicks\n } = this.config();\n const axis = this.axis();\n axis.tickSizeInner(showInnerTicks === false ? 0 : 6);\n axis.tickSizeOuter(showOuterTicks === false ? 0 : 6);\n return axis.tickSize();\n }\n\n /**\n *\n *\n * @param {*} d\n * @returns\n * @memberof SimpleAxis\n */\n domain (domain) {\n if (domain && domain.length) {\n const { nice } = this.config();\n if (domain.length && domain[0] === domain[1]) {\n domain = [0, +domain[0] * 2];\n }\n this.scale().domain(domain);\n nice && this.scale().nice();\n this._domain = this.scale().domain();\n this.store().commit(DOMAIN, this._domain);\n this.logicalSpace(null);\n return this;\n } return this._domain;\n }\n\n /**\n * This method is used to set the space availiable to render\n * the SimpleCell.\n *\n * @param {number} width The width of SimpleCell.\n * @param {number} height The height of SimpleCell.\n * @memberof AxisCell\n */\n setAvailableSpace (width = 0, height, padding, isOffset) {\n const {\n left,\n right,\n top,\n bottom\n } = padding;\n const {\n orientation,\n fixedBaseline\n } = this.config();\n const { tickLabelDim } = this.getAxisDimensions();\n this.availableSpace({ width, height });\n\n if (orientation === TOP || orientation === BOTTOM) {\n const labelSpace = tickLabelDim.width;\n this.range([(fixedBaseline ? 0 : (labelSpace / 2)) + left, width - right - labelSpace / 2]);\n const axisHeight = this.getLogicalSpace().height;\n isOffset && this.config({ yOffset: Math.max(axisHeight, height) });\n } else {\n const labelSpace = tickLabelDim.height;\n this.range([height - bottom - (fixedBaseline ? 1 : (labelSpace / 2)), labelSpace / 2 + top]);\n const axisWidth = this.getLogicalSpace().width;\n isOffset && this.config({ xOffset: Math.max(axisWidth, width) });\n }\n return this;\n }\n\n /**\n *\n *\n * @param {*} tickValues\n * @returns\n * @memberof SimpleAxis\n */\n setTickValues () {\n const {\n tickValues\n } = this.config();\n const axis = this.axis();\n\n if (tickValues) {\n tickValues instanceof Array && this.axis().tickValues(tickValues);\n return this;\n }\n axis.tickValues(this.getTickValues());\n return this;\n }\n\n /**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\n getTickValues () {\n let labelDim = 0;\n const {\n orientation,\n tickValues\n } = this.config();\n const range = this.range();\n const axis = this.axis();\n\n const availableSpace = Math.abs(range[0] - range[1]);\n\n const labelProps = getTickLabelInfo(this).largestLabelDim;\n\n if (tickValues) {\n return axis.scale().ticks(tickValues);\n }\n labelDim = labelProps[orientation === BOTTOM || orientation === TOP ? 'width' : 'height'];\n\n return getNumberOfTicks(availableSpace, labelDim, axis, this);\n }\n\n getMinTickDifference () {\n return getSmallestDiff(this.config().tickValues);\n }\n\n /**\n * Sets a fixed baseline for the first ticks so that they can render effectively within\n * the given area\n *\n * @param {*} tickText\n * @param {*} config\n * @param {*} labelManager\n */\n setFixedBaseline (tickText) {\n const {\n orientation,\n labels\n } = this.config();\n const {\n rotation\n } = labels;\n const axis = this.axis();\n const { width, height } = this._axisDimensions.largestLabelDim;\n axis.tickTransform((d, i) => {\n if (i === 0 && (orientation === LEFT || orientation === RIGHT)) {\n return `translate(0, -${(height) / 3}px)`;\n }\n if (i === 0 && (orientation === TOP || orientation === BOTTOM) && rotation === 0) {\n return `translate(${width / 2}px, ${0}px) rotate(${rotation}deg)`;\n } return '';\n });\n return tickText;\n }\n\n}\n","import SimpleAxis from './simple-axis';\nimport { BAND } from '../enums/scale-type';\nimport { TOP, BOTTOM } from '../enums/axis-orientation';\nimport { calculateBandSpace, setOffset } from './helper';\n\nexport default class BandAxis extends SimpleAxis {\n\n /**\n *\n *\n * @param {*} range\n * @returns\n * @memberof BandAxis\n */\n createScale (range) {\n const scale = super.createScale(range);\n const { padding } = this.config();\n if (typeof padding === 'number') {\n scale.padding(padding);\n }\n return scale;\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof BandAxis\n */\n static type () {\n return BAND;\n }\n\n /**\n *\n *\n * @param {*} width\n * @param {*} height\n * @param {*} padding\n * @param {*} isOffset\n * @memberof BandAxis\n */\n setAvailableSpace (width, height, padding, isOffset) {\n const {\n left,\n right,\n top,\n bottom\n } = padding;\n const {\n orientation,\n showAxisName,\n axisNamePadding\n } = this.config();\n const { axisLabelDim } = this.getAxisDimensions();\n const { height: axisDimHeight } = axisLabelDim;\n\n this.availableSpace({ width, height });\n if (orientation === TOP || orientation === BOTTOM) {\n // Set x axis range\n this.range([0, width - left - right]);\n const axisHeight = this.getLogicalSpace().height - (showAxisName === false ?\n (axisDimHeight + axisNamePadding) : 0);\n isOffset && this.config({ yOffset: Math.max(axisHeight, height) });\n } else {\n // Set y axis range\n this.range([height - bottom, top]);\n const axisWidth = this.getLogicalSpace().width - (showAxisName === false ? axisDimHeight : 0);\n isOffset && this.config({ xOffset: Math.max(axisWidth, width) });\n }\n return this;\n }\n\n /**\n *\n *\n * @returns\n * @memberof BandAxis\n */\n getUnitWidth () {\n return this.scale().bandwidth();\n }\n\n /**\n *\n *\n * @returns\n * @memberof BandAxis\n */\n setTickConfig () {\n let smartTicks = '';\n let smartlabel;\n const { maxWidth, maxHeight, tickFormat } = this.config();\n const { labelManager } = this._dependencies;\n const domain = this.axis().scale().domain();\n\n smartTicks = domain;\n const tickFormatter = tickFormat || (val => val);\n\n if (domain && domain.length) {\n smartTicks = domain.map((d, i) => {\n labelManager.useEllipsesOnOverflow(true);\n smartlabel = labelManager.getSmartText(tickFormatter(d, i, domain), maxWidth, maxHeight);\n return labelManager.constructor.textToLines(smartlabel);\n });\n }\n return smartTicks;\n }\n\n/**\n * Gets the space occupied by the axis\n *\n * @return {Object} object with details about size of the axis.\n * @memberof SimpleAxis\n */\n getLogicalSpace () {\n if (!this.logicalSpace()) {\n this.logicalSpace(calculateBandSpace(this));\n setOffset(this);\n this.logicalSpace();\n }\n return this.logicalSpace();\n }\n /**\n *\n *\n * @param {*} axisTickLabels\n * @param {*} labelWidth\n * @returns\n * @memberof BandAxis\n */\n setRotationConfig (axisTickLabels, labelWidth) {\n const { orientation } = this.config();\n const range = this.range();\n const availSpace = Math.abs(range[0] - range[1]);\n\n this.config({ labels: { rotation: 0, smartTicks: false } });\n if (orientation === TOP || orientation === BOTTOM) {\n const smartWidth = this.smartTicks().reduce((acc, n) => acc + n.width + this._minTickDistance.width, 0);\n // set multiline config\n if (availSpace > 0 && axisTickLabels.length * (labelWidth + this._minTickDistance.width) > availSpace) {\n if (availSpace && smartWidth < availSpace) {\n this.config({ labels: { smartTicks: true } });\n } else {\n this.config({ labels: { rotation: -90 } });\n }\n }\n }\n return this;\n }\n\n /**\n *\n *\n * @returns\n * @memberof BandAxis\n */\n getTickValues () {\n return this.axis().scale().domain();\n }\n\n /**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\n getTickSize () {\n const {\n showInnerTicks,\n showOuterTicks\n } = this.config();\n const axis = this.axis();\n\n axis.tickSizeInner(showInnerTicks ? 6 : 0);\n axis.tickSizeOuter(showOuterTicks ? 6 : 0);\n return axis.tickSize();\n }\n\n /**\n * This method is used to assign a domain to the axis.\n *\n * @param {Array} domain the domain of the scale\n * @memberof SimpleAxis\n */\n updateDomainBounds (domain) {\n let currentDomain = this.domain();\n if (this.config().domain) {\n currentDomain = this.config().domain;\n } else {\n if (currentDomain.length === 0) {\n currentDomain = domain;\n }\n currentDomain = currentDomain.concat(domain);\n }\n this.domain(currentDomain);\n return this;\n }\n\n /**\n * Returns the value from the domain when given a value from the range.\n * @param {number} value Value from the range.\n * @return {number} Value\n */\n invert (...value) {\n const values = value.map(d => this.scale().invert(d)) || [];\n return value.length === 1 ? values[0] && values[0].toString() : values.map(d => d.toString());\n }\n}\n","import { getSmallestDiff } from 'muze-utils';\nimport SimpleAxis from './simple-axis';\nimport { adjustRange } from './helper';\nimport { TIME } from '../enums/scale-type';\nimport { axisOrientationMap, BOTTOM, TOP } from '../enums/axis-orientation';\nimport { DOMAIN } from '../enums/constants';\n\n/**\n *\n *\n * @export\n * @class TimeAxis\n * @extends {SimpleAxis}\n */\nexport default class TimeAxis extends SimpleAxis {\n\n constructor (...params) {\n super(...params);\n this._minDiff = Infinity;\n }\n\n /**\n *\n *\n * @param {*} range\n * @returns\n * @memberof TimeAxis\n */\n createScale (range) {\n let scale = super.createScale(range);\n\n scale = scale.nice();\n return scale;\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof TimeAxis\n */\n static type () {\n return TIME;\n }\n\n /**\n *\n *\n * @returns\n * @memberof BandAxis\n */\n setTickConfig () {\n let smartTicks;\n let smartlabel;\n const { maxWidth, maxHeight, tickFormat } = this.config();\n const { labelManager } = this._dependencies;\n const domain = this.getTickValues();\n const scale = this.scale();\n\n smartTicks = domain;\n const tickFormatter = tickFormat || scale.tickFormat();\n\n if (domain && domain.length) {\n smartTicks = domain.map((d, i) => {\n smartlabel = labelManager.getSmartText(tickFormatter(d, i, domain), maxWidth, maxHeight);\n return labelManager.constructor.textToLines(smartlabel);\n });\n }\n return smartTicks;\n }\n\n /**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\n createAxis (config) {\n const {\n tickFormat,\n orientation\n } = config;\n const axisClass = axisOrientationMap[orientation];\n\n if (axisClass) {\n const axis = axisClass(this.scale());\n this.formatter = this.getTickFormatter(tickFormat);\n return axis;\n }\n return null;\n }\n\n getTickFormatter (tickFormat) {\n if (tickFormat) {\n return ticks => (val, i) => tickFormat(val, i, ticks);\n }\n return null;\n }\n\n /**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\n getTickSize () {\n const {\n showInnerTicks,\n showOuterTicks\n } = this.config();\n const axis = this.axis();\n axis.tickSizeInner(showInnerTicks === false ? 0 : 6);\n axis.tickSizeOuter(showOuterTicks === false ? 0 : 6);\n return super.getTickSize();\n }\n\n /**\n *\n *\n * @returns\n * @memberof TimeAxis\n */\n getTickValues () {\n return this.scale().ticks();\n }\n\n /**\n *\n *\n * @param {*} diff\n * @returns\n * @memberof TimeAxis\n */\n minDiff (diff) {\n this._minDiff = Math.min(this._minDiff, diff);\n return this;\n }\n\n /**\n *\n *\n * @param {*} axisTickLabels\n * @param {*} labelWidth\n * @returns\n * @memberof BandAxis\n */\n setRotationConfig (axisTickLabels, labelWidth) {\n const { orientation } = this.config();\n const range = this.range();\n const availSpace = Math.abs(range[0] - range[1]);\n\n this.config({ labels: { rotation: 0, smartTicks: false } });\n if (orientation === TOP || orientation === BOTTOM) {\n const smartWidth = this.smartTicks().reduce((acc, n) => acc + n.width, 0);\n // set multiline config\n if (availSpace > 0 && axisTickLabels.length * labelWidth > availSpace) {\n if (availSpace && smartWidth * 1.25 < availSpace) {\n this.config({ labels: { smartTicks: true } });\n }\n this.config({ labels: { rotation: -90 } });\n }\n }\n return this;\n }\n\n /**\n *\n *\n * @param {*} d\n * @returns\n * @memberof SimpleAxis\n */\n domain (domain) {\n if (domain) {\n const { nice } = this.config();\n\n if (domain.length && domain[0] === domain[1]) {\n domain = [0, +domain[0] * 2];\n }\n this.scale().domain(domain);\n nice && this.scale().nice();\n this._domain = this.scale().domain();\n this.smartTicks(this.setTickConfig());\n this.store().commit(DOMAIN, this._domain);\n this.logicalSpace(null);\n return this;\n } return this._domain;\n }\n\n getMinTickDifference () {\n return getSmallestDiff(this.config().tickValues);\n }\n\n /**\n *\n *\n * @param {*} width\n * @param {*} height\n * @param {*} padding\n * @param {*} isOffset\n * @memberof TimeAxis\n */\n setAvailableSpace (width, height, padding, isOffset) {\n const {\n left,\n right,\n top,\n bottom\n } = padding;\n const {\n orientation,\n showAxisName,\n axisNamePadding\n } = this.config();\n const domain = this.domain();\n const { axisLabelDim, tickLabelDim } = this.getAxisDimensions();\n const { height: axisDimHeight } = axisLabelDim;\n const { height: tickDimHeight, width: tickDimWidth } = tickLabelDim;\n\n this.availableSpace({ width, height });\n if (orientation === TOP || orientation === BOTTOM) {\n const labelSpace = tickDimWidth;\n this.range(adjustRange(this._minDiff, [labelSpace / 2, width - left - right - labelSpace / 2],\n domain, orientation));\n const axisHeight = this.getLogicalSpace().height - (showAxisName === false ?\n (axisDimHeight + axisNamePadding) : 0);\n isOffset && this.config({ yOffset: Math.max(axisHeight, height) });\n } else {\n const labelSpace = tickDimHeight;\n this.range(adjustRange(this._minDiff, [height - top - bottom - labelSpace / 2, labelSpace / 2],\n domain, orientation));\n const axisWidth = this.getLogicalSpace().width - (showAxisName === false ? axisDimHeight : 0);\n this.isOffset && this.config({ xOffset: Math.max(axisWidth, width) });\n }\n return this;\n }\n\n}\n","export const x11Colors = {\n Pink: { hex: 'ffc0cb', rgb: '255,192,203' },\n LightPink: { hex: 'ffb6c1', rgb: '255,182,193' },\n HotPink: { hex: 'ff69b4', rgb: '255,105,180' },\n DeepPink: { hex: 'ff1493', rgb: '255,20,147' },\n PaleVioletRed: { hex: 'db7093', rgb: '219,112,147' },\n MediumVioletRed: { hex: 'c71585', rgb: '199,21,133' },\n LightSalmon: { hex: 'ffa07a', rgb: '255,160,122' },\n Salmon: { hex: 'fa8072', rgb: '250,128,114' },\n DarkSalmon: { hex: 'e9967a', rgb: '233,150,122' },\n LightCoral: { hex: 'f08080', rgb: '240,128,128' },\n IndianRed: { hex: 'cd5c5c', rgb: '205,92,92' },\n Crimson: { hex: 'dc143c', rgb: '220,20,60' },\n FireBrick: { hex: 'b22222', rgb: '178,34,34' },\n DarkRed: { hex: '8b0000', rgb: '139,0,0' },\n Red: { hex: 'ff0000', rgb: '255,0,0' },\n OrangeRed: { hex: 'ff4500', rgb: '255,69,0' },\n Tomato: { hex: 'ff6347', rgb: '255,99,71' },\n Coral: { hex: 'ff7f50', rgb: '255,127,80' },\n DarkOrange: { hex: 'ff8c00', rgb: '255,140,0' },\n Orange: { hex: 'ffa500', rgb: '255,165,0' },\n Gold: { hex: 'ffd700', rgb: '255,215,0' },\n Yellow: { hex: 'ffff00', rgb: '255,255,0' },\n LightYellow: { hex: 'ffffe0', rgb: '255,255,224' },\n LemonChiffon: { hex: 'fffacd', rgb: '255,250,205' },\n LightGoldenrodYellow: { hex: 'fafad2', rgb: '250,250,210' },\n PapayaWhip: { hex: 'ffefd5', rgb: '255,239,213' },\n Moccasin: { hex: 'ffe4b5', rgb: '255,228,181' },\n PeachPuff: { hex: 'ffdab9', rgb: '255,218,185' },\n PaleGoldenrod: { hex: 'eee8aa', rgb: '238,232,170' },\n Khaki: { hex: 'f0e68c', rgb: '240,230,140' },\n DarkKhaki: { hex: 'bdb76b', rgb: '189,183,107' },\n Cornsilk: { hex: 'fff8dc', rgb: '255,248,220' },\n BlanchedAlmond: { hex: 'ffebcd', rgb: '255,235,205' },\n Bisque: { hex: 'ffe4c4', rgb: '255,228,196' },\n NavajoWhite: { hex: 'ffdead', rgb: '255,222,173' },\n Wheat: { hex: 'f5deb3', rgb: '245,222,179' },\n BurlyWood: { hex: 'deb887', rgb: '222,184,135' },\n Tan: { hex: 'd2b48c', rgb: '210,180,140' },\n RosyBrown: { hex: 'bc8f8f', rgb: '188,143,143' },\n SandyBrown: { hex: 'f4a460', rgb: '244,164,96' },\n Goldenrod: { hex: 'daa520', rgb: '218,165,32' },\n DarkGoldenrod: { hex: 'b8860b', rgb: '184,134,11' },\n Peru: { hex: 'cd853f', rgb: '205,133,63' },\n Chocolate: { hex: 'd2691e', rgb: '210,105,30' },\n SaddleBrown: { hex: '8b4513', rgb: '139,69,19' },\n Sienna: { hex: 'a0522d', rgb: '160,82,45' },\n Brown: { hex: 'a52a2a', rgb: '165,42,42' },\n Maroon: { hex: '800000', rgb: '128,0,0' },\n DarkOliveGreen: { hex: '556b2f', rgb: '85,107,47' },\n Olive: { hex: '808000', rgb: '128,128,0' },\n OliveDrab: { hex: '6b8e23', rgb: '107,142,35' },\n YellowGreen: { hex: '9acd32', rgb: '154,205,50' },\n LimeGreen: { hex: '32cd32', rgb: '50,205,50' },\n Lime: { hex: '00ff00', rgb: '0,255,0' },\n LawnGreen: { hex: '7cfc00', rgb: '124,252,0' },\n Chartreuse: { hex: '7fff00', rgb: '127,255,0' },\n GreenYellow: { hex: 'adff2f', rgb: '173,255,47' },\n SpringGreen: { hex: '00ff7f', rgb: '0,255,127' },\n MediumSpringGreen: { hex: '00fa9a', rgb: '0,250,154' },\n LightGreen: { hex: '90ee90', rgb: '144,238,144' },\n PaleGreen: { hex: '98fb98', rgb: '152,251,152' },\n DarkSeaGreen: { hex: '8fbc8f', rgb: '143,188,143' },\n MediumSeaGreen: { hex: '3cb371', rgb: '60,179,113' },\n SeaGreen: { hex: '2e8b57', rgb: '46,139,87' },\n ForestGreen: { hex: '228b22', rgb: '34,139,34' },\n Green: { hex: '008000', rgb: '0,128,0' },\n DarkGreen: { hex: '006400', rgb: '0,100,0' },\n MediumAquamarine: { hex: '66cdaa', rgb: '102,205,170' },\n Aqua: { hex: '00ffff', rgb: '0,255,255' },\n Cyan: { hex: '00ffff', rgb: '0,255,255' },\n LightCyan: { hex: 'e0ffff', rgb: '224,255,255' },\n PaleTurquoise: { hex: 'afeeee', rgb: '175,238,238' },\n Aquamarine: { hex: '7fffd4', rgb: '127,255,212' },\n Turquoise: { hex: '40e0d0', rgb: '64,224,208' },\n MediumTurquoise: { hex: '48d1cc', rgb: '72,209,204' },\n DarkTurquoise: { hex: '00ced1', rgb: '0,206,209' },\n LightSeaGreen: { hex: '20b2aa', rgb: '32,178,170' },\n CadetBlue: { hex: '5f9ea0', rgb: '95,158,160' },\n DarkCyan: { hex: '008b8b', rgb: '0,139,139' },\n Teal: { hex: '008080', rgb: '0,128,128' },\n LightSteelBlue: { hex: 'b0c4de', rgb: '176,196,222' },\n PowderBlue: { hex: 'b0e0e6', rgb: '176,224,230' },\n LightBlue: { hex: 'add8e6', rgb: '173,216,230' },\n SkyBlue: { hex: '87ceeb', rgb: '135,206,235' },\n LightSkyBlue: { hex: '87cefa', rgb: '135,206,250' },\n DeepSkyBlue: { hex: '00bfff', rgb: '0,191,255' },\n DodgerBlue: { hex: '1e90ff', rgb: '30,144,255' },\n CornflowerBlue: { hex: '6495ed', rgb: '100,149,237' },\n SteelBlue: { hex: '4682b4', rgb: '70,130,180' },\n RoyalBlue: { hex: '4169e1', rgb: '65,105,225' },\n Blue: { hex: '0000ff', rgb: '0,0,255' },\n MediumBlue: { hex: '0000cd', rgb: '0,0,205' },\n DarkBlue: { hex: '00008b', rgb: '0,0,139' },\n Navy: { hex: '000080', rgb: '0,0,128' },\n MidnightBlue: { hex: '191970', rgb: '25,25,112' },\n Lavender: { hex: 'e6e6fa', rgb: '230,230,250' },\n Thistle: { hex: 'd8bfd8', rgb: '216,191,216' },\n Plum: { hex: 'dda0dd', rgb: '221,160,221' },\n Violet: { hex: 'ee82ee', rgb: '238,130,238' },\n Orchid: { hex: 'da70d6', rgb: '218,112,214' },\n Fuchsia: { hex: 'ff00ff', rgb: '255,0,255' },\n Magenta: { hex: 'ff00ff', rgb: '255,0,255' },\n MediumOrchid: { hex: 'ba55d3', rgb: '186,85,211' },\n MediumPurple: { hex: '9370db', rgb: '147,112,219' },\n BlueViolet: { hex: '8a2be2', rgb: '138,43,226' },\n DarkViolet: { hex: '9400d3', rgb: '148,0,211' },\n DarkOrchid: { hex: '9932cc', rgb: '153,50,204' },\n DarkMagenta: { hex: '8b008b', rgb: '139,0,139' },\n Purple: { hex: '800080', rgb: '128,0,128' },\n Indigo: { hex: '4b0082', rgb: '75,0,130' },\n DarkSlateBlue: { hex: '483d8b', rgb: '72,61,139' },\n SlateBlue: { hex: '6a5acd', rgb: '106,90,205' },\n MediumSlateBlue: { hex: '7b68ee', rgb: '123,104,238' },\n White: { hex: 'ffffff', rgb: '255,255,255' },\n Snow: { hex: 'fffafa', rgb: '255,250,250' },\n Honeydew: { hex: 'f0fff0', rgb: '240,255,240' },\n MintCream: { hex: 'f5fffa', rgb: '245,255,250' },\n Azure: { hex: 'f0ffff', rgb: '240,255,255' },\n AliceBlue: { hex: 'f0f8ff', rgb: '240,248,255' },\n GhostWhite: { hex: 'f8f8ff', rgb: '248,248,255' },\n WhiteSmoke: { hex: 'f5f5f5', rgb: '245,245,245' },\n Seashell: { hex: 'fff5ee', rgb: '255,245,238' },\n Beige: { hex: 'f5f5dc', rgb: '245,245,220' },\n OldLace: { hex: 'fdf5e6', rgb: '253,245,230' },\n FloralWhite: { hex: 'fffaf0', rgb: '255,250,240' },\n Ivory: { hex: 'fffff0', rgb: '255,255,240' },\n AntiqueWhite: { hex: 'faebd7', rgb: '250,235,215' },\n Linen: { hex: 'faf0e6', rgb: '250,240,230' },\n LavenderBlush: { hex: 'fff0f5', rgb: '255,240,245' },\n MistyRose: { hex: 'ffe4e1', rgb: '255,228,225' },\n Gainsboro: { hex: 'dcdcdc', rgb: '220,220,220' },\n LightGray: { hex: 'd3d3d3', rgb: '211,211,211' },\n Silver: { hex: 'c0c0c0', rgb: '192,192,192' },\n DarkGrey: { hex: 'a9a9a9', rgb: '169,169,169' },\n Grey: { hex: '808080', rgb: '128,128,128' },\n DimGrey: { hex: '696969', rgb: '105,105,105' },\n LightSlateGrey: { hex: '778899', rgb: '119,136,153' },\n SlateGrey: { hex: '708090', rgb: '112,128,144' },\n DarkSlateGrey: { hex: '2f4f4f', rgb: '47,79,79' },\n Black: { hex: '000000', rgb: '0,0,0' }\n};\n","import {\n LINEAR\n} from '../enums/constants';\n/**\n * Set of default colors\n */\nexport const palette = [\n '#086bb6',\n '#f37d45',\n '#f5ce02',\n '#67bda0',\n '#c54e4e',\n '#ae70af'\n];\n\nexport const DEFAULT_GRADIENT_COLOR = '#eaeaea';\n\nexport const DEFAULT_CONFIG = {\n range: palette,\n value: palette[0],\n step: false,\n stops: 5,\n type: LINEAR\n};\n","import { mergeRecursive, detectColor, hexToHsv, rgbToHsv } from 'muze-utils';\nimport { x11Colors } from './color-maps';\nimport { palette, DEFAULT_GRADIENT_COLOR } from './defaults';\nimport { LINEAR, RGB, HEX, HSL, HSLA } from '../enums/constants';\n\nexport const getHslString = hslArr => `hsla(${hslArr[0] * 360},${hslArr[1] * 100}%,${hslArr[2] * 100}%,\\\n${hslArr[3] || 1})`;\n\nexport const convertToXllString = baseString => (baseString.split(' ') || [])\n .reduce((x, e) => `${x}${e.charAt(0).toUpperCase()}${e.slice(1)}`, '');\n\nexport const getActualHslColor = (e, paletteColor) => {\n let color = '';\n if (typeof e === 'string') {\n e = e.replace(/ /g, '');\n e = e.toLowerCase();\n if (detectColor(e) === HSL || detectColor(e) === HSLA) {\n color = e.match(/(\\d+(\\.\\d+)?)/g);\n color = [color[0] / 360, color[1] / 100, color[2] / 100, color[3] || 1];\n } else if (detectColor(e) === HEX) {\n color = hexToHsv(e);\n } else if (detectColor(e) === RGB) {\n const col = e.substring(e.indexOf('(') + 1, e.lastIndexOf(')')).split(/,\\s*/);\n color = rgbToHsv(...col);\n } else if (x11Colors[convertToXllString(e)]) {\n color = rgbToHsv(...x11Colors[convertToXllString(e)].rgb.split(','));\n }\n } else if (!(e instanceof Array)) {\n color = rgbToHsv(paletteColor);\n } else {\n color = e;\n }\n return color;\n};\n\nexport const PROPS = {\n config: {\n sanitization: (context, config) => {\n const defCon = mergeRecursive({}, context.constructor.defaultConfig());\n if (config.type === LINEAR) {\n config.range = config.range || [defCon.range[0]];\n config.range = config.range.length > 1 ? config.range : [DEFAULT_GRADIENT_COLOR, ...config.range];\n }\n const oldConfig = mergeRecursive(defCon, context.config());\n const newConfig = mergeRecursive(oldConfig, config);\n\n if (newConfig.range instanceof Array) {\n newConfig.range = newConfig.range.map((e, i) => getActualHslColor(e, palette[i]));\n newConfig.stops = config.stops || newConfig.range.length;\n }\n newConfig.value = getActualHslColor(newConfig.value, newConfig.value);\n return newConfig;\n }\n },\n domain: {},\n scale: {},\n uniqueValues: {}\n};\n","import { numberInterpolator, piecewiseInterpolator, hslInterpolator } from 'muze-utils';\nimport { CONTINOUS, DISCRETE } from '../enums/constants';\nimport { LINEAR, SEQUENTIAL, ORDINAL, QUANTILE } from '../enums/scale-type';\nimport { getHslString } from './props';\n\nconst getStops = (domain, stops) => {\n let newStops = [];\n\n if (stops instanceof Array) {\n newStops = stops.slice().sort();\n newStops = [...new Set([domain[0], ...stops, domain[1]])].sort();\n } else {\n const interpolator = numberInterpolator()(...domain);\n for (let i = 0; i <= stops; i++) {\n newStops[i] = interpolator(i / stops);\n }\n }\n\n if (newStops[0] < domain[0]) {\n newStops.shift();\n }\n return { domain, newStops };\n};\n\nconst rangeStops = (newStopsLength, range) => {\n let newRange = [];\n const maxRangeLength = Math.min(range.length, 18);\n\n if (newStopsLength > maxRangeLength) {\n const interpolator = piecewiseInterpolator()(hslInterpolator(), range.map(e => getHslString(e)));\n for (let i = 0; i < newStopsLength; i++) {\n newRange[i] = interpolator(i / (newStopsLength - 1));\n }\n } else {\n newRange = range.slice(0, newStopsLength);\n }\n return { newRange };\n};\n\n/**\n*\n*\n* @param {*} domain\n* @returns\n*/\nconst indexedDomain = (domain) => {\n const uniqueVals = domain;\n const retDomain = domain.map((d, i) => (i) / (domain.length - 1));\n return { domain: retDomain, uniqueVals, scaleDomain: [0, 1] };\n};\n\n/**\n *\n *\n * @param {*} domain\n * @returns\n */\nconst indexedDomainMeasure = (domain, stops, range) => {\n const uniqueVals = domain;\n return { domain, uniqueVals, scaleDomain: [0, 1], range };\n};\n\n/**\n *\n *\n * @param {*} domain\n * @returns\n */\nconst normalDomain = (domain, stops, range) => {\n const uniqueVals = domain;\n return { uniqueVals, domain, nice: true, range };\n};\n\n/**\n *\n *\n * @param {*} domain\n * @param {*} stops\n * @returns\n */\nconst steppedDomain = (domain, stops, range) => {\n const { domain: uniqueVals, newStops } = getStops(domain, stops);\n const { newRange } = rangeStops(newStops.length - 1, range);\n\n return { uniqueVals, domain: newStops, nice: true, range: newRange };\n};\n\nconst continousSteppedDomain = (domain, stops, range) => {\n const { domain: uniqueVals, newStops } = getStops(domain, range.length - 1);\n const hslRange = range.map(e => getHslString(e));\n return { uniqueVals, domain: newStops, nice: true, range: hslRange };\n};\n\n/**\n *\n *\n * @param {*} domainValue\n * @param {*} scale\n * @param {*} domain\n * @param {*} uniqueVals\n * @returns\n */\nconst uniqueRange = (domainValue, scale, domain, uniqueVals) => {\n const index = uniqueVals.indexOf(domainValue);\n const numVal = domain[index];\n return scale(numVal);\n};\n\n/**\n *\n *\n * @param {*} domainValue\n * @param {*} scale\n * @param {*} domain\n * @returns\n */\nconst indexedRange = (domainValue, scale, domain) => {\n const numVal = (domainValue - domain[0]) / (domain[domain.length - 1] - domain[0]);\n\n return scale(numVal);\n};\n\n/**\n *\n *\n * @param {*} domainValue\n * @param {*} scale\n */\nconst normalRange = (domainValue, scale) => scale(domainValue);\n\n/**\n *\n *\n * @param {*} stops\n */\nconst strategies = () => ({\n [`${CONTINOUS}-${CONTINOUS}-${SEQUENTIAL}`]: {\n scale: SEQUENTIAL,\n domainRange: () => indexedDomainMeasure,\n value: () => indexedRange\n },\n [`${CONTINOUS}-${DISCRETE}-${SEQUENTIAL}`]: {\n scale: SEQUENTIAL,\n domainRange: () => indexedDomainMeasure,\n value: () => indexedRange\n },\n [`${DISCRETE}-${DISCRETE}-${SEQUENTIAL}`]: {\n scale: SEQUENTIAL,\n domainRange: () => indexedDomain,\n value: () => uniqueRange\n },\n [`${DISCRETE}-${DISCRETE}-${ORDINAL}`]: {\n scale: ORDINAL,\n domainRange: () => normalDomain,\n value: () => normalRange\n },\n [`${CONTINOUS}-${CONTINOUS}-${ORDINAL}`]: {\n scale: LINEAR,\n domainRange: () => continousSteppedDomain,\n value: () => normalRange\n },\n [`${CONTINOUS}-${DISCRETE}-${ORDINAL}`]: {\n scale: QUANTILE,\n domainRange: () => steppedDomain,\n value: () => normalRange\n\n }\n});\n\n/**\n *\n *\n * @param {*} domainType\n * @param {*} rangeType\n * @param {*} schemeType\n * @param {*} stops\n */\nexport const strategyGetter = (domainType, rangeType, schemeType, stops) =>\n strategies(stops)[`${domainType}-${rangeType}-${schemeType || ''}`];\n","/**\n * @module Axis\n * This file declares a class that is used to render an axis to add meaning to\n * plots.\n */\nimport { getUniqueId, generateGetterSetters, rgbToHsv } from 'muze-utils';\nimport { createScale, getScheme, getSchemeType } from '../scale-creator';\nimport { CONTINOUS, DISCRETE, COLOR } from '../enums/constants';\nimport { strategyGetter } from './color-strategy';\nimport { DEFAULT_CONFIG } from './defaults';\nimport { PROPS, getHslString } from './props';\n\n/**\n* This class is used to instantiate a SimpleAxis.\n* @class SimpleAxis\n*/\nexport default class ColorAxis {\n\n /**\n * Creates an instance of SimpleAxis.\n * @param {Object} config input parameters.\n * @param {Object | undefined} params.range Type of color range.\n * @param {string} params.name the label to show on axis.\n * @param {string} params.type The type of scale to handle.\n * @memberof ColorAxis\n */\n constructor (config) {\n generateGetterSetters(this, PROPS);\n this.config(config);\n\n this._domainType = this._config.type === 'linear' ? CONTINOUS : DISCRETE;\n this._rangeType = (this._config.type === 'linear' && !this._config.step) ? CONTINOUS : DISCRETE;\n\n this._schemeType = getSchemeType(this._config.range);\n\n this._colorStrategy = this.setColorStrategy(this._domainType, this._rangeType, this._schemeType);\n this._scale = this.createScale(this._colorStrategy);\n\n this._id = getUniqueId();\n\n this.updateDomain(config.domain);\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof ColorAxis\n */\n static defaultConfig () {\n return DEFAULT_CONFIG;\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof ColorAxis\n */\n static type () {\n return COLOR;\n }\n\n /**\n *\n *\n * @param {*} colorStrategy\n * @returns\n * @memberof ColorAxis\n */\n createScale (colorStrategy) {\n const { range } = this.config();\n if (range && typeof (range) === 'string') {\n return getScheme(range);\n }\n return createScale({\n type: colorStrategy.scale,\n range\n });\n }\n\n /**\n *\n *\n * @param {*} domainType\n * @param {*} rangeType\n * @param {*} schemeType\n * @returns\n * @memberof ColorAxis\n */\n setColorStrategy (domainType, rangeType, schemeType) {\n const { stops } = this.config();\n\n return strategyGetter(domainType, rangeType, schemeType, stops);\n }\n\n /**\n *\n *\n * @param {*} domainVal\n * @returns\n * @memberof ColorAxis\n */\n getHslString (hslColorArray) {\n return getHslString(hslColorArray);\n }\n /**\n *\n *\n * @param {*} domainVal\n * @returns\n * @memberof ColorAxis\n */\n getColor (domainVal) {\n return this.getHslString(this.getRawColor(domainVal));\n }\n /**\n *\n *\n * @param {*} domainVal\n * @returns\n * @memberof ColorAxis\n */\n getRawColor (domainVal) {\n if (this.domain() && domainVal !== undefined) {\n const scale = this.scale();\n const range = scale.range ? scale.range() : null;\n const color = this._colorStrategy.value(range)(domainVal, scale, this.domain(), this.uniqueValues());\n\n if (typeof color === 'string') {\n const col = color.substring(color.indexOf('(') + 1, color.lastIndexOf(')')).split(/,\\s*/);\n return rgbToHsv(...col);\n }\n return [...color];\n }\n return [...this.config().value];\n }\n\n /**\n *\n *\n * @param {*} [domain=[]]\n * @returns\n * @memberof ColorAxis\n */\n updateDomain (domain = []) {\n if (domain.length) {\n const scale = this.scale();\n const range = scale.range ? scale.range() : null;\n const domainRangeFn = this._colorStrategy.domainRange();\n const scaleInfo = domainRangeFn(domain, this.config().stops, range);\n\n this.domain(scaleInfo.domain);\n scaleInfo.range && this.scale().range(scaleInfo.range);\n this.uniqueValues(scaleInfo.uniqueVals);\n this.scale().domain(scaleInfo.scaleDomain || this.domain());\n }\n return this;\n }\n\n /**\n * This method returns an object that can be used to\n * reconstruct this instance.\n *\n * @return {Object} the serializable props of axis\n * @memberof ShapeAxis\n */\n serialize () {\n return {\n type: this.constructor.type(),\n scale: this.scale(),\n domain: this.domain(),\n config: this.config()\n };\n }\n\n transformColor (color, transformationArr) {\n const h = color[0] * 360;\n const s = color[1] * 100;\n const l = color[2] * 100;\n const a = color[3] || 1;\n const newH = h + transformationArr[0];\n const newS = s + transformationArr[1];\n const newL = l + transformationArr[2];\n const newA = a + transformationArr[3] || 0;\n\n return { color: `hsla(${newH},${newS}%,${newL}%,${newA})`, hsla: [newH / 360, newS / 100, newL / 100, newA] };\n }\n\n /**\n * Returns the id of the axis.\n * @return {string} Unique identifier of the axis.\n */\n id () {\n return this._id;\n }\n\n}\n","export const DEFAULT_CONFIG = {\n value: 36,\n range: [36, 1000]\n};\n","import { numberInterpolator, piecewiseInterpolator } from 'muze-utils';\nimport { CONTINOUS, DISCRETE } from '../enums/constants';\nimport { LINEAR, THRESHOLD } from '../enums/scale-type';\n\n/**\n *\n *\n * @param {*} domain\n * @returns\n */\nconst indexedDomain = (domain) => {\n const uniqueVals = domain;\n const retDomain = domain.map((d, i) => (i) / (domain.length - 1));\n return { domain: retDomain, uniqueVals, scaleDomain: [0, 1] };\n};\n\n/**\n *\n *\n * @param {*} domain\n * @returns\n */\nconst normalDomain = (domain) => {\n const uniqueVals = domain;\n return { uniqueVals, domain };\n};\n\n/**\n *\n *\n * @param {*} domain\n * @param {*} intervals\n * @returns\n */\nconst steppedDomain = (domain, intervals) => {\n let newIntervals = [];\n if (intervals instanceof Array) {\n newIntervals = intervals.slice().sort();\n } else {\n const interpolator = numberInterpolator()(...domain);\n for (let i = 0; i < intervals; i++) {\n newIntervals[i] = interpolator(i / (intervals - 1));\n }\n }\n if (newIntervals[0] < domain[0]) {\n newIntervals.shift();\n }\n const retDomain = newIntervals;\n return { uniqueVals: newIntervals, domain: retDomain, nice: true };\n};\n\n/**\n *\n *\n * @param {*} domainValue\n * @param {*} scale\n * @param {*} domain\n * @param {*} uniqueVals\n * @returns\n */\nconst discreteRange = (domainValue, scale, domain) => {\n const numVal = (domainValue - domain[0]) / (domain[domain.length - 1] - domain[0]);\n const interpolator = numberInterpolator()(...scale.range());\n return interpolator(numVal);\n};\n\n/**\n *\n *\n * @param {*} domainValue\n * @param {*} scale\n * @param {*} domain\n * @returns\n */\nconst pieceWiseRange = (domainValue, scale, domain, uniqueVals) => {\n const index = uniqueVals.indexOf(domainValue);\n const numVal = domain[index];\n const fn = piecewiseInterpolator()(numberInterpolator(), [...scale.range()]);\n return fn(numVal);\n};\n\n/**\n *\n *\n * @param {*} domainValue\n * @param {*} scale\n */\nconst normalRange = (domainValue, scale) => scale(domainValue);\n\n/**\n *\n *\n * @param {*} intervals\n */\nconst strategies = {\n [`${DISCRETE}-${CONTINOUS}`]: {\n scale: LINEAR,\n domain: indexedDomain,\n range: pieceWiseRange\n },\n [`${CONTINOUS}-${CONTINOUS}`]: {\n scale: LINEAR,\n domain: normalDomain,\n range: normalRange\n },\n [`${CONTINOUS}-${DISCRETE}`]: {\n scale: THRESHOLD,\n domain: steppedDomain,\n range: discreteRange\n }\n};\n\n/**\n *\n *\n * @param {*} domainType\n * @param {*} rangeType\n * @param {*} schemeType\n * @param {*} intervals\n */\nexport const strategyGetter = (domainType, rangeType) =>\n strategies[`${domainType}-${rangeType}`];\n","export const PROPS = {\n config: {},\n domain: {\n sanitization: (context, value) => {\n context.scale().domain(value);\n return value;\n }\n },\n range: {},\n scale: {},\n uniqueValues: {}\n};\n","/**\n * @module Axis\n * This file declares a class that is used to render an axis to add meaning to\n * plots.\n */\nimport { getUniqueId, generateGetterSetters } from 'muze-utils';\nimport { createScale } from '../scale-creator';\nimport { DEFAULT_CONFIG } from './defaults';\nimport { SIZE, CONTINOUS, DISCRETE } from '../enums/constants';\nimport { strategyGetter } from './size-strategy';\nimport { PROPS } from './props';\n\n/**\n* This class is used to instantiate a SimpleAxis.\n* @class SimpleAxis\n*/\nexport default class SizeAxis {\n\n /**\n * Creates an instance of SimpleAxis.\n * @param {Object} config input parameters.\n * @memberof SizeAxis\n */\n constructor (config) {\n generateGetterSetters(this, PROPS);\n\n this._id = getUniqueId();\n this._config = Object.assign({}, this.constructor.defaultConfig(), config);\n // @todo: Will use configuration override using scale decorator\n this._domainType = this._config.type === 'linear' ? CONTINOUS : DISCRETE;\n this._rangeType = CONTINOUS;\n\n this._sizeStrategy = this.setStrategy(this._domainType, this._rangeType);\n this._scale = this.createScale(this._sizeStrategy);\n this._range = this._config.range;\n\n this.updateDomain(config.domain);\n }\n\n /**\n *\n *\n * @param {*} domainType\n * @param {*} rangeType\n * @param {*} schemeType\n * @returns\n * @memberof ColorAxis\n */\n setStrategy (domainType, rangeType) {\n return strategyGetter(domainType, rangeType);\n }\n\n /**\n *\n *\n * @returns\n * @memberof SizeAxis\n */\n createScale (strategy) {\n const {\n range\n } = this.config();\n return createScale({\n type: strategy.scale,\n range\n });\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof ColorAxis\n */\n static defaultConfig () {\n return DEFAULT_CONFIG;\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof ColorAxis\n */\n static type () {\n return SIZE;\n }\n\n /**\n *\n *\n * @param {*} domainVal\n * @returns\n * @memberof SizeAxis\n */\n getSize (domainVal = 0) {\n let sizeVal = 1;\n const {\n value\n } = this.config();\n const scale = this.scale();\n const domain = this.domain() || [1, 1];\n\n if (!scale || domain[0] === domain[1]) {\n sizeVal = value;\n } else {\n return this._sizeStrategy.range(domainVal, scale, this.domain(), this.uniqueValues());\n }\n return sizeVal;\n }\n\n /**\n * This method is used to assign a domain to the axis.\n *\n * @param {Array} domain the domain of the scale\n * @memberof SizeAxis\n */\n updateDomain (domain) {\n if (domain) {\n const domainFn = this._sizeStrategy.domain;\n\n const domainInfo = domainFn(domain, this.config().intervals);\n\n this.domain(domainInfo.domain);\n this.uniqueValues(domainInfo.uniqueVals);\n\n this.scale().domain(domainInfo.scaleDomain || this.domain());\n }\n return this;\n }\n\n /**\n * This method returns an object that can be used to\n * reconstruct this instance.\n *\n * @return {Object} the serializable props of axis\n * @memberof ShapeAxis\n */\n serialize () {\n return {\n type: this.constructor.type(),\n scale: this.scale(),\n domain: this.domain(),\n range: this.range(),\n config: this.config()\n };\n }\n\n /**\n * Returns the id of the axis.\n * @return {string} Unique identifier of the axis.\n */\n id () {\n return this._id;\n }\n}\n","export const DEFAULT_CONFIG = {\n generator: null,\n value: 'circle',\n range: ['circle', 'diamond', 'star', 'cross', 'square', 'wye', 'triangle']\n};\n","export const PROPS = {\n config: {},\n domain: {},\n scale: {},\n uniqueValues: {},\n generator: {}\n};\n\n","/**\n * @module Axis\n * This file declares a class that is used to render an axis to add meaning to\n * plots.\n */\nimport { getUniqueId, getSymbol, generateGetterSetters, mergeRecursive } from 'muze-utils';\nimport { createScale } from '../scale-creator';\nimport { DEFAULT_CONFIG } from './defaults';\nimport { SHAPE } from '../enums/constants';\nimport { shapeGenerator } from './helper';\nimport { PROPS } from './props';\n\n/**\n* This class is used to instantiate a SimpleAxis.\n* @class SimpleAxis\n*/\nexport default class ShapeAxis {\n /**\n * Creates an instance of SimpleAxis.\n * @param {Object} params input parameters.\n * @param {Object | undefined} params.range Type of color scheme.\n * @memberof ShapeAxis\n */\n constructor (config) {\n generateGetterSetters(this, PROPS);\n\n this._id = getUniqueId();\n this._config = Object.assign({}, this.constructor.defaultConfig());\n this._config = mergeRecursive(this._config, config);\n\n this._scale = createScale({\n type: 'ordinal',\n range: this._config.range\n });\n this.updateDomain(config.domain);\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof ColorAxis\n */\n static defaultConfig () {\n return DEFAULT_CONFIG;\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof ColorAxis\n */\n static type () {\n return SHAPE;\n }\n\n /**\n *\n *\n * @param {*} value\n * @returns\n * @memberof ShapeAxis\n */\n getShape (value) {\n if (!this.scale() || !this.domain() || !value) {\n return this.config().value;\n }\n\n if (this._generatedShapes) {\n return this._generatedShapes[value];\n }\n\n const shapeType = this.scale()(value);\n if (shapeType === 'string') {\n return getSymbol(shapeType);\n }\n\n return shapeType;\n }\n\n /**\n * This method is used to assign a domain to the axis.\n *\n * @param {Array} domain the domain of the scale\n * @memberof ShapeAxis\n */\n updateDomain (domain = []) {\n if (domain.length) {\n this.uniqueValues(domain);\n this.domain(domain);\n this.scale().domain(domain);\n\n if (this.config().generator) {\n this._generatedShapes = shapeGenerator(domain, this.config().generator);\n }\n }\n return this;\n }\n\n /**\n * This method returns an object that can be used to\n * reconstruct this instance.\n *\n * @return {Object} the serializable props of axis\n * @memberof ShapeAxis\n */\n serialize () {\n return {\n type: this.constructor.type(),\n scale: this.scale(),\n domain: this.domain(),\n range: this.config().range,\n config: this.config()\n };\n }\n\n /**\n * Returns the id of the axis.\n * @return {string} Unique identifier of the axis.\n */\n id () {\n return this._id;\n }\n}\n","/**\n *\n *\n * @param {*} domain\n * @param {*} generatorFn\n * @returns\n */\nexport const shapeGenerator = (domain, generatorFn) => {\n const generatedShapes = {};\n domain.forEach((value) => {\n generatedShapes[value] = generatorFn(value);\n });\n return generatedShapes;\n};\n","import * as ScaleType from './enums/scale-type';\n\nconst DATA_TYPES = {\n DIMENSION: 'dimension',\n CATEGORICAL: 'categorical',\n MEASURE: 'measure',\n DATETIME: 'temporal'\n};\n\n/**\n * Map of DataModel types to associated field types.\n */\nexport const dataTypeScaleMap = {\n [DATA_TYPES.DIMENSION]: ScaleType.BAND,\n [DATA_TYPES.MEASURE]: ScaleType.LINEAR,\n [DATA_TYPES.DATETIME]: ScaleType.TIME\n};\n\n","import { nestCollection } from 'muze-utils';\n\n/**\n * Create multiple datasets from a single dataset by grouping the data using\n * a dimensional field.\n * @param {Array} schema Name and type of fields are stored in schema\n * @param {Array} data Data array\n * @param {Object} config Configuration object\n * @return {Array} Grouped data array\n */\nexport default (schema, data, config) => {\n const groupBy = config.groupBy instanceof Array ? config.groupBy : [config.groupBy];\n const groupByIndices = groupBy.map(fieldName => schema.findIndex(d => d.name === fieldName));\n\n if (groupByIndices.find(d => d === -1) !== undefined) {\n throw new Error(`Groupby field ${groupBy} not found in schema`);\n }\n\n return nestCollection({\n keys: groupByIndices,\n data\n });\n};\n","/**\n * @module Transform\n * This file exports a function that is used to implement\n * the identity transform\n */\n /* eslint no-unused-vars: 0 */\n /**\n * This function accepts data and returns the data unchanged.\n * @param {Object} schema The schema.\n * @param {Array} data The data array.\n * @param {Object} config The config object.\n * @return {Array} The unchanged data.\n */\n function identityTransform (schema, data, config) {\n return data;\n }\n\n export default identityTransform;\n","/**\n * @module Transform\n * This file exports the transform factory.\n */\nimport * as TransformType from '../enums/transform-type';\nimport identity from '../identity-transform';\nimport group from '../group-transform';\nimport stack from '../stack-transform';\n\n/* istanbul ignore next */\nconst transformMap = {\n [TransformType.IDENTITY]: identity,\n [TransformType.GROUP]: group,\n [TransformType.STACK]: stack\n};\n\n/**\n * This function is used to retirn a transform associated\n * with the given type.\n *\n * @param {string} type The type of the transform.\n * @return {Function} The transform function.\n */\nfunction transformFactory (type) {\n const transform = transformMap[type];\n if (typeof transform !== 'function') {\n throw new Error('Invalid transform type supplied.');\n }\n return transform;\n}\n\nexport default transformFactory;\n","/**\n * @module Transform\n * This module exports constants that are used to reference transforms in\n * a consistent manner throughout the project.\n */\n/* eslint one-var: 0 */\n export const IDENTITY = 'identity';\n export const GROUP = 'group';\n export const STACK = 'stack';\n export const FRACTURE = 'fracture';\n","import { stack } from 'muze-utils';\n\nimport group from '../group-transform';\n/*\n Normalize the data to a form which can be given to d3 stack for stacking the data\n ['Product', 'Sales', 'Region'],\n 0 ['A', 2000, 'North'],\n 1 ['A', 3000, 'South'],\n 2 ['B', 3000, 'South'],\n 3 ['B', 2000, 'North'],\n 4 ['C', 3000, 'South'],\n 5 ['C', 2000, 'North']\n |\n |\n ['Product', 'North', 'South'],\n ['A', 2000, 3000],\n ['B', 2000, 3000],\n ['C', 2000, 3000]\n*/\n// eslint-disable-next-line require-jsdoc\nconst normalizeData = (data, schema, valueField, uniqueField, groupBy) => {\n const groupedData = group(schema, data, {\n groupBy: uniqueField\n });\n const uniqueFieldIndex = schema.findIndex(d => d.name === uniqueField);\n const valueFieldIndex = schema.findIndex(d => d.name === valueField);\n const seriesKeyIndex = schema.findIndex(d => d.name === groupBy);\n const seriesKeys = data.map(d => d[seriesKeyIndex]).filter((item, pos, arr) => arr.indexOf(item) === pos).sort();\n const fieldNames = schema.reduce((acc, obj, i) => {\n acc[i] = obj.name;\n return acc;\n }, {});\n const dataArr = groupedData.map((arr) => {\n const tuples = {};\n const rowObj = arr.values.reduce((acc, row) => {\n acc = row.reduce((obj, value, i) => {\n if (i === seriesKeyIndex) {\n obj[value] = row[valueFieldIndex];\n tuples[value] = row;\n } else if (i !== valueFieldIndex) {\n obj[fieldNames[i]] = value;\n }\n return obj;\n }, acc);\n return acc;\n }, {});\n rowObj._tuple = tuples;\n // Set missing values field to zero value\n seriesKeys.forEach((seriesKey) => {\n if (rowObj[seriesKey] === undefined) {\n rowObj[seriesKey] = 0;\n const newArr = new Array(arr.values[0].length);\n newArr[uniqueFieldIndex] = arr.key;\n newArr[seriesKeyIndex] = seriesKey;\n rowObj._tuple[seriesKey] = newArr;\n }\n });\n return rowObj;\n });\n\n return {\n data: dataArr,\n keys: seriesKeys\n };\n};\n/**\n * Generate a stacked representation of data\n * @param {Array} schema schema Array\n * @param {Array} data data array\n * @param {Object} config Configuration object\n * @return {Array} stacked data\n */\nexport default (schema, data, config) => {\n const uniqueField = config.uniqueField;\n const valueField = config.value;\n const groupBy = config.groupBy;\n const sort = config.sort || 'descending';\n const normalizedData = normalizeData(data, schema, valueField, uniqueField, groupBy);\n const keys = normalizedData.keys;\n const map = {};\n const orderBy = config.orderBy;\n const orderIndex = schema.findIndex(d => d.name === orderBy);\n const groupByIndex = schema.findIndex(d => d.name === groupBy);\n if (orderIndex !== -1) {\n keys.forEach((key) => {\n const name = data.find(d => d[groupByIndex] === key);\n map[key] = name[orderIndex];\n });\n normalizedData.keys.sort((a, b) => map[a].localeCompare(map[b]));\n }\n\n const stackData = stack({\n keys: normalizedData.keys,\n offset: config.offset || 'diverging',\n order: sort,\n data: normalizedData.data\n });\n stackData.forEach((seriesData) => {\n seriesData.forEach((dataObj) => {\n dataObj.data = dataObj.data._tuple[seriesData.key];\n });\n });\n return stackData;\n};\n\n","import {\n FieldType,\n getDomainFromData,\n setStyles,\n easeFns,\n selectElement,\n DimensionSubtype\n} from 'muze-utils';\nimport { ScaleType } from '@chartshq/muze-axis';\nimport { transformFactory } from '@chartshq/transform';\nimport { IDENTITY, STACK, GROUP, COLOR, SHAPE, SIZE, ENCODING } from '../enums/constants';\n\nconst BAND = ScaleType.BAND;\n\nexport const getLayerColor = ({ datum, index }, { colorEncoding, colorAxis, colorFieldIndex }) => {\n let rawColor = '';\n let color = '';\n if (colorEncoding && colorEncoding.value instanceof Function) {\n color = colorEncoding.value(datum, index);\n rawColor = colorEncoding.value(datum, index);\n } else {\n rawColor = colorAxis.getRawColor(datum._data[colorFieldIndex]);\n color = colorAxis.getHslString(rawColor);\n }\n return { color, rawColor };\n};\n\nconst transfromColor = (colorAxis, datum, styleType, intensity) => {\n datum.meta.stateColor[styleType] = datum.meta.stateColor[styleType] || datum.meta.originalColor;\n const fillColorInfo = colorAxis.transformColor(datum.meta.stateColor[styleType], intensity);\n datum.meta.stateColor[styleType] = fillColorInfo.hsla;\n\n return fillColorInfo;\n};\n\nexport const applyInteractionStyle = (context, selectionSet, interactionStyles, config) => {\n const elements = context.getPlotElementsFromSet(selectionSet);\n const axes = context.axes();\n const colorAxis = axes.color;\n const apply = config.apply;\n const interactionType = config.interactionType;\n interactionStyles.forEach((style) => {\n const styleType = style.type;\n elements.style(styleType, ((d) => {\n const { colorTransform, stateColor, originalColor } = d.meta;\n colorTransform[interactionType] = colorTransform[interactionType] || {};\n if (apply && !colorTransform[interactionType][styleType]) {\n // fade selections\n colorTransform[interactionType][styleType] = style.intensity;\n const color = transfromColor(colorAxis, d, styleType, style.intensity).color;\n return color;\n }\n if (!apply && colorTransform[interactionType][styleType]) {\n // unfade selections\n colorTransform[interactionType][styleType] = null;\n return transfromColor(colorAxis, d, styleType, style.intensity.map(e => -e)).color;\n }\n const [h, s, l, a] = stateColor[styleType] ? stateColor[styleType] : originalColor;\n return `hsla(${h * 360},${s * 100}%,${l * 100}%, ${a || 1})`;\n }));\n });\n};\n\n/**\n *\n *\n * @param {*} selectionSet\n * @param {*} className\n * @param {*} hasFaded\n */\nexport const fadeUnfadeSelection = (context, selectionSet, hasFaded, interaction) => {\n const interactionConfig = { interaction, apply: hasFaded };\n applyInteractionStyle(context, selectionSet, 'fade', interactionConfig);\n};\n\n/**\n *\n *\n * @param {*} selectionSet\n * @param {*} className\n * @param {*} hasFaded\n */\nexport const focusUnfocusSelection = (context, selectionSet, isFocussed, interaction) => {\n const interactionConfig = { interaction, apply: isFocussed };\n applyInteractionStyle(context, selectionSet, 'focus', interactionConfig);\n};\n\n/**\n *\n *\n * @param {*} axes\n * @returns\n */\nexport const getAxesScales = (axes) => {\n const [xAxis, yAxis] = [ENCODING.X, ENCODING.Y].map(e => axes[e]);\n const [xScale, yScale] = [xAxis, yAxis].map(e => e && e.scale());\n return {\n xAxis,\n yAxis,\n xScale,\n yScale\n };\n};\n\n/**\n *\n *\n * @param {*} encoding\n * @param {*} fieldsConfig\n * @returns\n */\nexport const getEncodingFieldInf = (encoding, fieldsConfig) => {\n const [xField, yField, x0Field, y0Field, colorField, shapeField, sizeField] =\n [ENCODING.X, ENCODING.Y, ENCODING.X0, ENCODING.Y0, COLOR, SHAPE, SIZE].map(e => encoding[e] &&\n encoding[e].field);\n\n const [xFieldType, yFieldType] = [xField, yField, x0Field, y0Field].map(e => fieldsConfig[e] &&\n fieldsConfig[e].def.type);\n\n const [xFieldSubType, yFieldSubType] = [xField, yField].map(e => fieldsConfig[e] && (fieldsConfig[e].def.subtype ||\n fieldsConfig[e].def.type));\n\n const [xFieldIndex, yFieldIndex, x0FieldIndex, y0FieldIndex] = [xField, yField, x0Field, y0Field]\n .map(e => fieldsConfig[e] && fieldsConfig[e].index);\n\n return {\n xField,\n yField,\n colorField,\n shapeField,\n sizeField,\n x0Field,\n y0Field,\n xFieldType,\n yFieldType,\n xFieldSubType,\n yFieldSubType,\n xFieldIndex,\n yFieldIndex,\n x0FieldIndex,\n y0FieldIndex\n };\n};\n\n/**\n *\n *\n * @param {*} layerConfig\n * @param {*} fieldsConfig\n * @returns\n */\nexport const getValidTransform = (layerConfig, fieldsConfig, encodingFieldInf) => {\n let transformType;\n const {\n transform\n } = layerConfig;\n const {\n xField,\n yField,\n xFieldType,\n yFieldType\n } = encodingFieldInf;\n const groupByField = transform.groupBy;\n const groupByFieldMeasure = fieldsConfig[groupByField] && fieldsConfig[groupByField].def.type === FieldType.MEASURE;\n transformType = transform.type;\n if (!xField || !yField || groupByFieldMeasure || !groupByField || xFieldType === FieldType.DIMENSION &&\n yFieldType === FieldType.DIMENSION) {\n transformType = IDENTITY;\n }\n return transformType;\n};\n\n/**\n *\n *\n * @param {*} dataModel\n * @param {*} config\n * @param {*} transformType\n * @returns\n */\nexport const transformData = (dataModel, config, transformType, encodingFieldInf) => {\n const data = dataModel.getData({ withUid: true });\n const schema = data.schema;\n const transform = config.transform;\n const {\n xField,\n yField,\n xFieldType,\n yFieldType\n } = encodingFieldInf;\n const uniqueField = xFieldType === FieldType.MEASURE ? yField : xField;\n\n return transformFactory(transformType)(schema, data.data, {\n groupBy: transform.groupBy,\n uniqueField,\n sort: transform.sort || 'none',\n offset: transform.offset,\n orderBy: transform.orderBy,\n value: yFieldType === FieldType.MEASURE ? yField : xField\n }, data.uids);\n};\n\nexport const getIndividualClassName = (d, i, data, context) => {\n const className = context.config().individualClassName;\n let classNameStr = '';\n if (className instanceof Function) {\n classNameStr = className(d, i, data, context);\n }\n return classNameStr;\n};\n\n/*\n * This method resolves the x, y, x0 and y0 values from the transformed data.\n * It also checks the type of transformed data for example, if it is a stacked data\n * then it fetches the y and y0 values from the stacked data.\n * @param {Array.} transformedData transformed data\n * @param {Object} fieldsConfig field definitions\n * @param {string} transformType type of transformed data - stack, group or identity.\n * @return {Array.} Normalized data\n*/\nexport const getNormalizedData = (transformedData, fieldsConfig, encodingFieldInf, transformType) => {\n const transformedDataArr = transformType === IDENTITY ? [transformedData] : transformedData;\n const {\n xFieldType,\n xFieldIndex,\n yFieldIndex,\n x0FieldIndex,\n y0FieldIndex\n } = encodingFieldInf;\n const fieldsLen = Object.keys(fieldsConfig).length;\n /**\n * Returns normalized data from transformed data. It recursively traverses through\n * the transformed data if there it is nested.\n */\n return transformedDataArr.map((data) => {\n const values = transformType === GROUP ? data.values : data;\n return values.map((d) => {\n let pointObj = {};\n let tuple;\n if (transformType === STACK) {\n tuple = d.data || [];\n let y;\n let y0;\n let x;\n let x0;\n if (d[1] >= d[0]) {\n y = x0 = d[1];\n x = y0 = d[0];\n } else {\n y = x0 = d[0];\n x = y0 = d[1];\n }\n\n pointObj = xFieldType === FieldType.MEASURE ? {\n x,\n x0,\n y: tuple[yFieldIndex],\n y0: tuple[yFieldIndex]\n } : {\n x: tuple[xFieldIndex],\n x0: tuple[xFieldIndex],\n y,\n y0\n };\n pointObj._data = tuple;\n pointObj._id = tuple[fieldsLen];\n } else {\n pointObj = {\n x: d[xFieldIndex],\n y: d[yFieldIndex],\n x0: d[x0FieldIndex],\n y0: d[y0FieldIndex]\n };\n pointObj._data = d;\n pointObj._id = d[fieldsLen];\n }\n return pointObj;\n });\n }).filter(d => d.length);\n};\n\nexport const calculateDomainFromData = (data, encodingFieldInf, transformType) => {\n const {\n xFieldSubType,\n yFieldSubType,\n xField,\n yField,\n x0Field,\n y0Field\n } = encodingFieldInf;\n const domains = {};\n const yEnc = ENCODING.Y;\n const xEnc = ENCODING.X;\n if (xField) {\n domains.x = getDomainFromData(data, x0Field || transformType === STACK ? [xEnc, ENCODING.X0] : [xEnc, xEnc],\n xFieldSubType);\n }\n if (yField) {\n domains.y = getDomainFromData(data, y0Field || transformType === STACK ? [ENCODING.Y0, ENCODING.Y] :\n [yEnc, yEnc], yFieldSubType);\n }\n\n return domains;\n};\n\nexport const attachDataToVoronoi = (voronoi, points) => {\n voronoi.data([].concat(...points).filter(d => d._id !== undefined).map((d) => {\n const point = d.update;\n return {\n x: point.x,\n y: point.y,\n data: d\n };\n }));\n};\n\n/**\n *\n *\n * @param {*} target\n * @param {*} styles\n * @param {*} remove\n */\nexport const updateStyle = (target, styles, remove) => {\n for (const key in styles) {\n if ({}.hasOwnProperty.call(styles, key)) {\n target.style(key, remove ? null : styles[key]);\n }\n }\n};\n\n/**\n *\n *\n * @param {*} mount\n * @param {*} context\n */\nexport const animateGroup = (mount, context) => {\n let groupTransition;\n let update;\n const { transition, groupAnimateStyle } = context;\n const { duration, effect, disabled } = transition;\n if (groupAnimateStyle) {\n setStyles(mount.node(), groupAnimateStyle.enter);\n update = groupAnimateStyle.update;\n if (!disabled) {\n groupTransition = mount.transition()\n .ease(easeFns[effect])\n .duration(duration)\n .on('end', function () {\n updateStyle(selectElement(this), update, true);\n });\n } else {\n groupTransition = mount;\n }\n updateStyle(groupTransition, update);\n }\n};\n\nexport const positionPoints = (context, points) => {\n const positioner = context.encodingTransform();\n if (positioner) {\n return positioner(points, context, { smartLabel: context._dependencies.smartLabel });\n }\n return points;\n};\n\n/**\n * Gets the width of each group. It gets the width from axis if it is available for\n * example when the scale is nominal else it calculates the width from the\n * range of the axis and number of data points.\n *\n * @param {SimpleAxis} axis instance of axis\n * @param {number} minDiff Minimum difference between data points\n * @return {number} width of each bar\n * @private\n*/\nexport const getGroupSpan = (axis, minDiff) => {\n let groupSpan;\n const width = axis.getUnitWidth();\n const scale = axis.scale();\n const range = scale.range();\n const domain = scale.domain();\n !width ? groupSpan = (Math.abs(range[1] - range[0]) / Math.abs(domain[1] - domain[0])) * minDiff :\n (groupSpan = width);\n\n return groupSpan;\n};\n\nexport const getPlotMeasurement = (context, dimensionalValues) => {\n const fieldInfo = context.encodingFieldsInf();\n const axes = context.axes();\n const transformType = context.transformType();\n const config = context.config();\n const bandScale = context._bandScale;\n\n return ['x', 'y'].map((type) => {\n let span = 0;\n let groupSpan = 0;\n let padding = 0;\n let offsetValues = [];\n if (fieldInfo[`${type}FieldType`] === FieldType.DIMENSION) {\n let actualGroupWidth;\n const isTemporal = fieldInfo[`${type}FieldSubType`] === DimensionSubtype.TEMPORAL;\n const timeDiff = isTemporal ? context.dataProps().timeDiffs[type] : 0;\n const axis = axes[type];\n const pad = config[`pad${type.toUpperCase()}`];\n const innerPadding = config.innerPadding;\n const keys = dimensionalValues;\n const scale = axis.scale();\n groupSpan = getGroupSpan(axis, timeDiff);\n const isAxisBandScale = axis.constructor.type() === BAND;\n const axisPadding = axis.config().padding;\n // If it is a grouped bar then the width of each bar in a grouping is retrieved from\n // a band scale. The band scale will have range equal to width of one group of bars and\n // the domain is set to series keys.\n if (transformType === 'group') {\n const groupPadding = isAxisBandScale ? 0 : axisPadding * groupSpan / 2;\n bandScale.range([groupPadding, groupSpan - groupPadding]).domain(keys).paddingInner(innerPadding);\n span = bandScale.bandwidth();\n actualGroupWidth = groupSpan - (isAxisBandScale ? 0 : axisPadding * groupSpan);\n offsetValues = keys.map(key => bandScale(key) - (isAxisBandScale ? 0 : (groupSpan / 2)));\n } else if (pad !== undefined) {\n let offset;\n if (isAxisBandScale) {\n const step = scale.step();\n offset = scale.padding() * step;\n span = scale.bandwidth() + offset;\n } else {\n span = groupSpan;\n }\n offsetValues = keys.map(() => (isAxisBandScale ? -(offset / 2) : -(span / 2)));\n } else {\n padding = isAxisBandScale ? 0 : axisPadding * groupSpan;\n span = groupSpan - padding;\n actualGroupWidth = span;\n offsetValues = keys.map(() => (isAxisBandScale ? 0 : -(span / 2)));\n }\n\n groupSpan = actualGroupWidth;\n padding = isAxisBandScale ? axisPadding * axis.scale().step() : axisPadding * groupSpan;\n }\n\n return {\n span,\n offsetValues,\n groupSpan,\n padding\n };\n });\n};\n","import { nextFrame } from 'muze-utils';\nimport { getValidTransform, getEncodingFieldInf } from '../helpers';\nimport * as PROPS from '../enums/props';\n\nexport const listenerMap = context => [\n {\n props: [PROPS.TRANSFORMED_DATA],\n listener: fetch => fetch(PROPS.DATA, PROPS.CONFIG, (dataModel, config) => {\n const dataModelValue = dataModel.value;\n const configValue = config.value;\n const encodingValue = configValue && configValue.encoding;\n if (dataModelValue && encodingValue) {\n const fieldsConfig = dataModelValue.getFieldsConfig();\n const encodingFieldsInf = getEncodingFieldInf(encodingValue, fieldsConfig);\n context.encodingFieldsInf(encodingFieldsInf);\n context.transformType(getValidTransform(configValue, fieldsConfig, encodingFieldsInf));\n return context.getTransformedData(dataModelValue, configValue, context.transformType(),\n encodingFieldsInf);\n }\n return null;\n }),\n type: 'computed'\n },\n {\n props: [PROPS.NORMALIZED_DATA],\n listener: fetch => fetch(PROPS.TRANSFORMED_DATA, (transformedData) => {\n const transformedDataValue = transformedData.value;\n if (transformedDataValue) {\n const fieldsConfig = context.data().getFieldsConfig();\n return context.getNormalizedData(transformedDataValue, fieldsConfig);\n }\n return null;\n }),\n type: 'computed'\n },\n {\n props: [PROPS.DOMAIN],\n listener: fetch => fetch(PROPS.NORMALIZED_DATA, (normalizedData) => {\n const normalizedDataValue = normalizedData.value;\n if (normalizedDataValue) {\n return context.calculateDomainFromData(normalizedDataValue, context.encodingFieldsInf(),\n context.data().getFieldsConfig());\n }\n return null;\n }),\n type: 'computed'\n },\n {\n props: [PROPS.DATA],\n listener: (data) => {\n if (data[1]) {\n nextFrame(() => {\n context.store().commit(PROPS.DATA_UPDATED, true);\n });\n }\n },\n type: 'registerImmediateListener'\n },\n {\n props: [PROPS.MOUNT, PROPS.DATA_UPDATED],\n listener: (mount, dataUpdated) => {\n if (mount[1] && dataUpdated[1]) {\n context.render(mount[1]);\n context.dependencies().throwback.commit('onlayerdraw', true);\n }\n },\n type: 'registerChangeListener'\n }\n];\n\n","import { mergeRecursive } from 'muze-utils';\nimport * as PROPS from '../enums/props';\n\nexport const defaultOptions = {\n [PROPS.CONFIG]: {\n value: null,\n meta: {\n sanitization: (config, oldConfig, context) => {\n const constructor = context.constructor;\n const newConf = mergeRecursive({}, constructor.defaultConfig());\n return constructor.defaultPolicy(newConf, config);\n }\n }\n },\n [PROPS.DATA]: {\n value: null,\n meta: {\n preset: (data, context) => {\n if (context._cacheEnabled) {\n context._cachedData.push(data);\n } else {\n context._cachedData = [data];\n }\n }\n }\n },\n [PROPS.MOUNT]: {\n value: null\n },\n [PROPS.AXES]: {\n value: null\n },\n [PROPS.MEASUREMENT]: {\n value: null\n }\n};\n","import {\n getUniqueId,\n mergeRecursive,\n Store,\n FieldType,\n selectElement,\n ReservedFields,\n registerListeners,\n transactor,\n DataModel,\n clone\n} from 'muze-utils';\nimport { SimpleLayer } from '../simple-layer';\nimport * as PROPS from '../enums/props';\nimport {\n transformData,\n calculateDomainFromData,\n getNormalizedData,\n applyInteractionStyle\n} from '../helpers';\nimport { listenerMap } from './listener-map';\nimport { defaultOptions } from './default-options';\n\n/**\n * An abstract class which gives defination of common layer functionality like\n * - transfromation data for various {@link mode}\n * - calculating data domain\n * - linking dependent layers\n * - merging policy of configuration\n * - interaction sideffect helpers\n * - retrieving dom elements from data using id\n * - retrieving the physical dimensions of marks\n * - disposing layer\n *\n * Every layer has to extend base layer and give concrete definition.\n * This layer does not have any default visual. A new layer has to define the logic of `render` for rendering the\n * visuals\n *\n * @public\n * @class\n * @namespace Muze\n */\nexport default class BaseLayer extends SimpleLayer {\n\n /**\n * Creates a layer using a configuration and data.\n *\n * @public\n *\n * @param {DataModel} data Instance of DataModel to be used. This DataModel instance serves as the data for a layer.\n * @param {Object} axes Axes instances to be used for rendering the layer. Axes are used for mapping data from\n * value to px.\n * @param {SimpleAxis} axes.x X axis of the layer. Based on the type of variable it gets instance of BandAxis,\n * TimeAxis, ContinuousAxis\n * @param {SimpleAxis} axes.y X axis of the layer. Based on the type of variable it gets instance of BandAxis,\n * TimeAxis, ContinuousAxis\n * @param {ColorAxis} axes.color Axis for coloring a layer using color interpolators\n * @param {ShapeAxis} axes.shape Axis for providing a shape\n * @param {SizeAxis} axes.shape Axis for determining size of a mark using size interpolator\n * @param {LayerConfig} config Configuration of the layer\n * @param {Object} dependencies Dependencies of the layer\n * @param {SmartLabel} smartLabel Smartlabel singleton instance\n */\n constructor (data, axes, config, dependencies) {\n super();\n this.store(new Store({\n DATA: null,\n [PROPS.DATA_UPDATED]: null\n }));\n transactor(this, defaultOptions, this.store().model);\n this.data(data);\n this.axes(axes);\n this.config(config);\n this.alias(this.constructor.formalName() + getUniqueId());\n this.dependencies(dependencies);\n this._points = [];\n this._cachedData = [];\n this._id = getUniqueId();\n this._measurement = {};\n registerListeners(this, listenerMap);\n }\n\n /**\n * Creates a layer instance\n * @return {BaseLayer} Instance of a layer\n */\n static create (...params) {\n return new this(...params);\n }\n\n /**\n * Default configuration of the layer. This configuration gets merged to the user passed configuration using a\n * plolicy. Base layer only returns part of configuraion, any layer overridding base layer should return its own\n * configuration.\n *\n * @public\n * @static\n *\n * @return {Object} Default configuration\n */\n static defaultConfig () {\n return {\n transform: {\n type: 'identity'\n }\n };\n }\n\n /**\n * Policy defines how user config gets merged to default config. The default policy here does a deep copy\n * operation.\n * Any policy which does more than deep copying should define the policy as a static member.\n *\n * @static\n * @public\n *\n * @param {LayerConfig} conf Configuration with which the user config will be merged\n * @param {LayerConfig} userConf Configuration given by the user\n *\n * @return {LayerConfig} Merged layer configuration\n */\n static defaultPolicy (conf, userConf) {\n return mergeRecursive(conf, userConf);\n }\n\n /**\n * Determines a name for a layer. This name of the layer is used in the input data to refer to this layer.\n * ```\n * .layer([\n * mark: 'bar',\n * encoding: { ... }\n * ])\n * ```\n *\n * @static\n * @public\n *\n * @returns {string} name of layer\n */\n static formalName () {\n return 'base';\n }\n\n store (...store) {\n if (store.length) {\n this._store = store[0];\n return this;\n }\n return this._store;\n }\n\n encodingFieldsInf (...fieldsInf) {\n if (fieldsInf.length) {\n this._encodingFieldsInf = fieldsInf[0];\n return this;\n }\n return this._encodingFieldsInf;\n }\n\n encodingTransform (...encodingTransform) {\n if (encodingTransform.length) {\n this._encodingTransform = encodingTransform[0];\n return this;\n }\n return this._encodingTransform;\n }\n\n /**\n * Provides a alias for a layer. Like it's possible to have same layer (like bar) multiple times, but among multiple\n * layers of same type if one layer has to be referred, alias is used. If no alias is given then `formalName` is set\n * as the alias name.\n *\n * @public\n *\n * If used as setter\n * @param {string} alias Name of the alias\n * @return {BaseLayer} Instance of current base layer\n *\n * If used as getter\n * @return {string} Alias of the current layer\n */\n alias (...params) {\n if (params.length) {\n this._alias = params[0];\n return this;\n }\n return this._alias || this.constructor.formalName();\n }\n\n dependencies (...params) {\n if (params.length) {\n this._dependencies = params[0];\n return this;\n }\n return this._dependencies;\n }\n\n enableCaching () {\n this._cacheEnabled = true;\n return this;\n }\n\n clearCaching () {\n this._cacheEnabled = false;\n return this.data(this._cachedData[0]);\n }\n\n /**\n * Serialize the schema. Merge config is used for serialization.\n *\n * @public\n *\n * @return {LayerConfig} Serialized schema\n */\n serialize () {\n return this.config();\n }\n\n /**\n * Returns the unique identifier of this layer. Id is auto generated during the creation proceess of a schema.\n *\n * @return {string} id of the layer\n */\n id () {\n return this._id;\n }\n\n /**\n * Gets the transform method from transform factory based on type of transform. It then calls the\n * transform method with the data and passes the configuration parameters of transform such as\n * groupBy, value field, etc.\n *\n * @public\n *\n * @param {DataModel} dataModel Instance of DataModel\n * @param {Object} config Configuration for transforming data\n * @return {Array.} Transformed data.\n */\n getTransformedData (dataModel, config, transformType, encodingFieldsInf) {\n return transformData(dataModel, config, transformType, encodingFieldsInf);\n }\n\n /**\n * Calculates the domain from the data.\n * It checks the type of field and calculates the domain based on that. For example, if it\n * is a quantitative or temporal field, then it calculates the min and max from the data or\n * if it is a nominal field then it gets all the values from the data of that field.\n * @param {Array} data DataArray\n * @param {Object} fieldsConfig Configuration of fields\n * @return {Array} Domain values array.\n */\n calculateDomainFromData (data) {\n let domains = {};\n const isEmpty = this.data().isEmpty();\n\n if (!isEmpty) {\n domains = calculateDomainFromData(data, this.encodingFieldsInf(), this.transformType());\n }\n return domains;\n }\n\n shouldDrawAnchors () {\n return false;\n }\n\n /**\n * Returns the domain for the axis.\n *\n * @param {string} encodingType type of encoding x, y, etc.\n * @return {Object} Axis domains\n */\n getDataDomain (encodingType) {\n const domains = this.store().get(PROPS.DOMAIN);\n return encodingType !== undefined ? domains[encodingType] || [] : domains;\n }\n\n /**\n * Returns the domain for the axis.\n *\n * @param {string} encodingType type of encoding x, y, etc.\n * @return {Object} Axis domains\n */\n getNormalizedData (transformedData, fieldsConfig) {\n return getNormalizedData(transformedData, fieldsConfig, this.encodingFieldsInf(), this.transformType());\n }\n\n /**\n * Abstract method for getting nearest point\n * @return {BaseLayer} Instance of base layer\n */\n getNearestPoint () {\n return null;\n }\n\n applyInteractionStyle (interactionType, selectionSet, apply) {\n const interactionConfig = this.config().interaction || {};\n\n const interactionStyles = interactionConfig[interactionType];\n if (interactionStyles) {\n applyInteractionStyle(this, selectionSet, interactionStyles, {\n apply,\n interactionType\n });\n }\n }\n\n /**\n *\n *\n * @returns\n * @memberof BaseLayer\n */\n transformType (...transformType) {\n if (transformType.length) {\n this._transformType = transformType[0];\n return this;\n }\n return this._transformType;\n }\n\n /**\n * Renders the layer\n * @return {BaseLayer} Instance of the layer.\n */\n render () {\n return this;\n }\n\n /**\n *\n *\n * @returns\n * @memberof BaseLayer\n */\n elemType () {\n return 'g';\n }\n\n /**\n * Disposes the entire layer\n * @return {BaseLayer} Instance of layer.\n */\n remove () {\n this.store().unsubscribeAll();\n selectElement(this.mount()).remove();\n return this;\n }\n\n /**\n * Stores point in an object with key as the categorical value or temporal value\n *\n * @param {string} key categorical value or temporal value\n * @param {Object} data Information of the data point\n * @return {BarLayer} Instance of bar layer\n */\n cachePoint (key, data) {\n if (key === null) {\n return this;\n }\n const pointMap = this._pointMap;\n !pointMap[key] && (pointMap[key] = []);\n pointMap[key].push(data);\n return this;\n }\n\n /**\n *\n *\n * @param {*} dataProps\n * @returns\n * @memberof BaseLayer\n */\n dataProps (...dataProps) {\n if (dataProps.length) {\n this._dataProps = dataProps[0];\n return this;\n }\n return this._dataProps;\n }\n\n /**\n *\n *\n * @param {*} data\n * @param {*} id\n * @returns\n * @memberof BaseLayer\n */\n getIdentifiersFromData (data) {\n const schema = this.data().getData().schema;\n const fieldsConfig = this.data().getFieldsConfig();\n const identifiers = [[], []];\n const {\n xFieldType,\n yFieldType,\n xField,\n yField\n } = this.encodingFieldsInf();\n\n const [xMeasure, yMeasure] = [xFieldType, yFieldType].map(type => type === FieldType.MEASURE);\n schema.forEach((d, i) => {\n const name = d.name;\n if (fieldsConfig[name].def.type === FieldType.DIMENSION) {\n identifiers[0].push(name);\n identifiers[1].push(data[i]);\n }\n });\n\n if (xMeasure && yMeasure) {\n const xMeasureIndex = fieldsConfig[xField].index;\n const yMeasureIndex = fieldsConfig[yField].index;\n identifiers[0].push(...[xField, yField]);\n identifiers[1].push(...[data[xMeasureIndex], data[yMeasureIndex]]);\n }\n return identifiers;\n }\n\n getPlotSpan () {\n return {\n x: 0,\n y: 0\n };\n }\n\n getPlotPadding () {\n return {\n x: 0,\n y: 0\n };\n }\n\n /**\n *\n *\n * @param {*} identifiers\n * @returns\n * @memberof BaseLayer\n */\n getPointsFromIdentifiers (identifiers, config = {}) {\n const getAllAttrs = config.getAllAttrs;\n const getBBox = config.getBBox;\n if (!this.data()) {\n return [];\n }\n let fieldNames;\n let values;\n if (identifiers instanceof DataModel) {\n const dataObj = identifiers.getData();\n fieldNames = dataObj.schema.map(d => d.name);\n values = dataObj.data;\n } else {\n fieldNames = identifiers[0];\n values = identifiers.slice(1, identifiers.length);\n }\n\n const points = this._points;\n const fieldsConfig = this.data().getFieldsConfig();\n\n const filteredPoints = [].concat(...points).filter((point) => {\n const { _data, _id } = point;\n\n return fieldNames.every((field, idx) => {\n if (field in fieldsConfig && fieldsConfig[field].def.type === FieldType.DIMENSION) {\n return values.findIndex(d => d[idx] === _data[fieldsConfig[field].index]) !== -1;\n } else if (field === ReservedFields.ROW_ID) {\n return values.findIndex(d => d[idx] === _id) !== -1;\n } return true;\n });\n });\n return getAllAttrs ? filteredPoints : filteredPoints.map((d) => {\n const obj = clone(d);\n if (getBBox) {\n const update = obj.update || obj;\n if (obj.size !== undefined) {\n const sizeVal = Math.sqrt(obj.size / Math.PI) * 2;\n update.width = sizeVal;\n update.height = sizeVal;\n update.x -= sizeVal / 2;\n update.y -= sizeVal / 2;\n } else {\n if (update.width === undefined) {\n update.width = 2;\n }\n if (update.height === undefined) {\n update.height = 2;\n }\n }\n }\n\n return obj.update || obj;\n }).sort((a, b) => a.y - b.y);\n }\n\n getTransformedDataFromIdentifiers (identifiers) {\n const { data: identifierData, schema: identifierSchema } = identifiers.getData();\n const normalizedData = this.store().get(PROPS.NORMALIZED_DATA);\n const fieldsConfig = this.data().getFieldsConfig();\n const {\n yField,\n xField,\n yFieldType,\n xFieldType\n } = this.encodingFieldsInf();\n let measureIndex;\n let enc;\n if (xFieldType === FieldType.MEASURE) {\n measureIndex = fieldsConfig[xField].index;\n enc = 'x';\n } else if (yFieldType === FieldType.MEASURE) {\n measureIndex = fieldsConfig[yField].index;\n enc = 'y';\n }\n\n const transformedData = [];\n normalizedData.forEach((dataArr) => {\n dataArr.forEach((dataObj) => {\n const tupleArr = dataObj._data;\n const exist = identifierSchema.every((obj, i) =>\n identifierData.findIndex(d => tupleArr[fieldsConfig[obj.name].index] === d[i]) !== -1);\n if (exist) {\n const transformedVal = dataObj[enc];\n const row = dataObj._data;\n const tuple = {};\n for (const key in fieldsConfig) {\n const index = fieldsConfig[key].index;\n tuple[key] = row[index];\n if (index === measureIndex) {\n tuple[key] = transformedVal;\n }\n }\n transformedData.push(tuple);\n }\n });\n });\n\n return [transformedData, this.data().getData().schema];\n }\n\n /**\n *\n *\n * @param {*} set\n * @returns\n * @memberof BaseLayer\n */\n getPlotElementsFromSet (set) {\n return selectElement(this.mount()).selectAll(this.elemType()).filter(data =>\n (data ? set.indexOf(data._id) !== -1 : false));\n }\n}\n","import {\n selectElement,\n makeElement,\n pathInterpolators,\n Symbols\n} from 'muze-utils';\nimport { updateStyle } from '../../helpers';\n\nconst line = Symbols.line;\n\n/**\n * Draws a line from the points\n * Generates a svg path string\n * @param {Object} params Contains container, points and interpolate attribute.\n */\nexport const drawLine = (context) => {\n let filteredPoints;\n const { container, points, interpolate, connectNullData, className, style, transition } = context;\n const mount = selectElement(container).attr('class', className);\n const curveInterpolatorFn = pathInterpolators[interpolate];\n const linepath = line()\n .curve(curveInterpolatorFn)\n .x(d => d.update.x)\n .y(d => d.update.y)\n .defined(d => d.update.y !== null);\n\n filteredPoints = points;\n if (connectNullData) {\n filteredPoints = points.filter(d => d.update.y !== null);\n }\n\n updateStyle(mount, style);\n let element = makeElement(mount, 'path', [1]);\n element.classed(points[0].className, true);\n if (!transition.disabled) {\n element = element.transition().duration(transition.duration);\n }\n element.attr('d', linepath(filteredPoints))\n .style('fill-opacity', 0);\n return element;\n};\n","import { CLASSPREFIX } from '../../enums/constants';\n\nexport const defaultConfig = {\n classPrefix: CLASSPREFIX,\n defClassName: 'layer-line',\n className: '',\n interpolate: 'linear',\n transform: {\n type: 'group'\n },\n interaction: {\n highlight: [{\n type: 'stroke',\n intensity: [0, 0, -15, 0]\n }],\n fade: [{\n type: 'stroke',\n intensity: [0, 0, +15, 0]\n }],\n focus: [{\n type: 'stroke',\n intensity: [0, 0, +15, 0]\n }]\n },\n nearestPointThreshold: 20,\n encoding: {\n color: {},\n x: {},\n y: {},\n strokeOpacity: {\n value: 1\n }\n },\n transition: {\n effect: 'cubic',\n duration: 1000\n },\n connectNullData: false\n};\n\n","import {\n Voronoi,\n getQualifiedClassName,\n selectElement,\n makeElement,\n FieldType,\n getObjProp\n} from 'muze-utils';\nimport { BaseLayer } from '../../base-layer';\nimport { drawLine } from './renderer';\nimport { defaultConfig } from './default-config';\nimport { ENCODING } from '../../enums/constants';\nimport * as PROPS from '../../enums/props';\nimport {\n attachDataToVoronoi,\n animateGroup,\n getLayerColor,\n positionPoints,\n getIndividualClassName\n} from '../../helpers';\n\nimport './styles.scss';\n\n/**\n * Line Layer creates a line plot.\n * Example :-\n * const config = {\n * encoding = {\n * x: {\n * field: 'date'\n * },\n * y: {\n * field: 'sales'\n * }\n * }\n * };\n * const linelayer = layerFactory.getLayer('line', [dataModel, axes, config]);\n * linelayer.render(container);\n * @class\n */\nexport default class LineLayer extends BaseLayer {\n\n /**\n *Creates an instance of LineLayer.\n * @param {*} args\n * @memberof LineLayer\n */\n constructor (...args) {\n super(...args);\n this._voronoi = new Voronoi();\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof LineLayer\n */\n static formalName () {\n return 'line';\n }\n\n /**\n *\n *\n * @returns\n * @memberof LineLayer\n */\n elemType () {\n return 'path';\n }\n\n /**\n * Default configuration of line layer\n * @return {Object} Default configuration of layer\n */\n static defaultConfig () {\n return defaultConfig;\n }\n\n /**\n *\n *\n * @static\n * @param {*} conf\n * @param {*} userConf\n * @returns\n * @memberof LineLayer\n */\n static defaultPolicy (conf, userConf) {\n const config = BaseLayer.defaultPolicy(conf, userConf);\n const encoding = config.encoding;\n const transform = config.transform;\n const colorField = encoding.color && encoding.color.field;\n\n if (colorField && !transform.groupBy) {\n transform.groupBy = colorField;\n }\n return config;\n }\n\n /**\n * Returns the draw method for line\n * @return {Function} Draw method of line layer\n */\n getDrawFn () {\n return drawLine;\n }\n\n /**\n * Applies selection styles to the elements that fall within the selection set.\n * @param {Array} selectionSet Array of tuple ids.\n * @param {Object} config Configuration for selection.\n * @return {BarLayer} Instance of bar layer.\n */\n highlightPoint () {\n return this;\n }\n\n /**\n * Removes selection styles to the elements that fall within the selection set.\n * @param {Array} selectionSet Array of tuple ids.\n * @param {Object} config Configuration for selection.\n * @return {BarLayer} Instance of bar layer.\n */\n dehighlightPoint () {\n return this;\n }\n\n focusSelection () {\n return this;\n }\n\n focusOutSelection () {\n return this;\n }\n\n fadeOutSelection () {\n return this;\n }\n\n unfadeSelection () {\n return this;\n }\n\n shouldDrawAnchors () {\n return true;\n }\n\n /**\n * Generates the x and y positions for each point\n * @param {Array} data Data Array\n * @param {Object} encoding Visual Encodings of the layer\n * @param {Object} axes Contains the axis\n * @param {number} seriesIndex index of series\n * @return {Array} Array of points\n */\n translatePoints (data, encodingFieldsInf, axes) {\n let points = [];\n const xAxis = axes.x;\n const yAxis = axes.y;\n const colorAxis = axes.color;\n const encoding = this.config().encoding;\n const { xFieldType, yFieldType } = encodingFieldsInf;\n const isXDim = xFieldType === FieldType.DIMENSION;\n const isYDim = yFieldType === FieldType.DIMENSION;\n const key = isXDim ? ENCODING.X : (isYDim ? ENCODING.Y : null);\n const colorEncoding = encoding.color;\n const colorField = colorEncoding.field;\n const fieldsConfig = this.data().getFieldsConfig();\n const colorFieldIndex = colorField && fieldsConfig[colorField].index;\n const style = {};\n const meta = {};\n\n points = data.map((d, i) => {\n const xPx = xAxis.getScaleValue(d.x) + xAxis.getUnitWidth() / 2;\n const yPx = yAxis.getScaleValue(d.y);\n const { color, rawColor } = getLayerColor({ datum: d, index: i }, {\n colorEncoding, colorAxis, colorFieldIndex });\n\n style.stroke = color;\n style['fill-opacity'] = 0;\n meta.stateColor = {};\n meta.originalColor = rawColor;\n meta.colorTransform = {};\n\n const point = {\n enter: {},\n update: {\n x: xPx,\n y: d.y === null ? null : yPx\n },\n style,\n _data: d._data,\n _id: d._id,\n rowId: d._id,\n source: d._data,\n meta\n };\n point.className = getIndividualClassName(d, i, data, this);\n this.cachePoint(d[key], point);\n return point;\n });\n points = positionPoints(this, points);\n return points;\n }\n\n /**\n * Renders the line plot\n * @param {SVGElement} container svg element\n * @return {LineLayer} instance of line layer\n */\n render (container) {\n let points;\n let seriesClassName;\n let style;\n\n const config = this.config();\n const {\n encoding,\n interpolate,\n className,\n defClassName,\n transition\n } = config;\n const store = this._store;\n const normalizedData = store.get(PROPS.NORMALIZED_DATA);\n const transformedData = store.get(PROPS.TRANSFORMED_DATA);\n const fieldsConfig = this.data().getFieldsConfig();\n const axes = this.axes();\n const keys = transformedData.map(d => d.key);\n const qualifiedClassName = getQualifiedClassName(defClassName, this.id(), config.classPrefix);\n const containerSelection = selectElement(container);\n const colorField = encoding.color.field;\n const colorFieldIndex = fieldsConfig[colorField] && fieldsConfig[colorField].index;\n\n this._points = [];\n this._pointMap = {};\n containerSelection.classed(qualifiedClassName.join(' '), true);\n containerSelection.classed(className, true);\n makeElement(container, 'g', normalizedData, null, {\n enter: (group) => {\n animateGroup(group, {\n transition,\n groupAnimateStyle: {\n enter: {\n 'stroke-opacity': 0,\n 'fill-opacity': this.getPathStyle()['fill-opacity']\n },\n update: {\n 'stroke-opacity': encoding.strokeOpacity.value\n }\n }\n });\n },\n update: (group, dataArr, i) => {\n points = this.translatePoints(dataArr, this.encodingFieldsInf(), axes, i);\n this._points.push(points);\n seriesClassName = `${qualifiedClassName[0]}-${keys[i] || i}`.toLowerCase();\n\n let color;\n const colorValFn = encoding.color.value;\n const colorVal = points.find(d => d._data[colorFieldIndex] !== null &&\n d._data[colorFieldIndex] !== undefined);\n\n if (colorValFn) {\n color = colorValFn(dataArr, i, normalizedData);\n } else {\n color = axes.color.getColor(colorVal && colorVal._data[colorFieldIndex]);\n }\n\n style = this.getPathStyle(color);\n this.getDrawFn()({\n container: group.node(),\n interpolate,\n points,\n className: seriesClassName,\n transition,\n style: style || {},\n connectNullData: config.connectNullData\n });\n }\n }, d => d[0]._data[colorFieldIndex] || d[0]._id);\n\n attachDataToVoronoi(this._voronoi, this._points);\n return this;\n }\n\n /**\n * Get the css styles need to be applied on the line path\n * @param {string} color Color value\n * @return {Object} Path styles\n */\n getPathStyle (color) {\n return {\n stroke: color,\n 'fill-opacity': '0'\n };\n }\n\n /**\n * Gets the nearest point closest to the given position\n * @param {number} x x position\n * @param {number} y y position\n * @return {Object} Nearest point information\n */\n getNearestPoint (x, y, config) {\n let searchRadius = config.searchRadius;\n const data = this.data();\n\n if (!data || (data && data.isEmpty())) {\n return null;\n }\n\n searchRadius = searchRadius !== undefined ? searchRadius : this.config().nearestPointThreshold;\n const point = this._voronoi.find(x, y, searchRadius);\n const dimensions = getObjProp(point, 'data', 'data', 'update');\n\n if (point) {\n const { _data, _id } = point.data.data;\n const identifiers = this.getIdentifiersFromData(_data, _id);\n return {\n id: identifiers,\n dimensions: [{\n x: dimensions.x,\n y: dimensions.y,\n width: 2,\n height: 2\n }],\n layerId: this.id()\n };\n }\n return null;\n }\n}\n","import {\n easeFns,\n selectElement,\n pathInterpolators,\n Symbols\n} from 'muze-utils';\n\nconst area = Symbols.area;\n/**\n * Draws a line from the points\n * Generates a svg path string\n * @param {Object} params Contains container, points and interpolate attribute.\n */\nconst /* istanbul ignore next */ drawArea = (params) => {\n let filteredPoints;\n const { container, points, style, transition, className, connectNullData, interpolate } = params;\n\n const { effect: easeEffect, duration } = transition;\n const mount = selectElement(container);\n const curveInterpolatorFn = pathInterpolators[interpolate];\n const selection = mount.selectAll('path').data([params.points]);\n const [enterAreaPath, updateAreaPath] = ['enter', 'update'].map(e => area().curve(curveInterpolatorFn)\n .x(d => d[e].x)\n .y1(d => d[e].y)\n .y0(d => d[e].y0)\n .defined(d => d[e].y !== null\n ));\n\n filteredPoints = points;\n mount.attr('class', className);\n if (connectNullData) {\n filteredPoints = points.filter(d => d.update.y !== null);\n }\n const selectionEnter = selection.enter().append('path').attr('d', enterAreaPath(filteredPoints));\n selection.merge(selectionEnter).transition().ease(easeFns[easeEffect])\n .duration(duration)\n .attr('d', updateAreaPath(filteredPoints))\n .each(function (d) {\n const element = selectElement(this);\n\n element.classed(d[0].className, true);\n Object.keys(style).forEach(key => element.style(key, style[key]));\n });\n};\n\nexport default drawArea;\n","import { FieldType } from 'muze-utils';\nimport { defaultConfig } from './default-config';\nimport { LineLayer } from '../line';\nimport drawArea from './renderer';\nimport './styles.scss';\nimport { STACK, ENCODING } from '../../enums/constants';\nimport { getAxesScales, positionPoints, getLayerColor, getIndividualClassName } from '../../helpers';\n\n/**\n * Area Layer creates a area plot.\n * @example\n * const config = {\n * encoding = {\n * x: {\n * field: 'date'\n * },\n * // Top y value\n * y: {\n * field: 'maxTemp'\n * },\n * // Base y value\n * y0: {\n * field: 'minTemp\n * }\n * }\n * };\n * const areaLayer = layerFactory.getLayer('area', [dataModel, axes, config]);\n * areaLayer.render(container);\n * @class\n */\nexport default class AreaLayer extends LineLayer {\n /** oation of line layer\n * @return {Object} Default configuration of layer\n */\n static defaultConfig () {\n return defaultConfig;\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof AreaLayer\n */\n static formalName () {\n return 'area';\n }\n\n /**\n * Calculates the domain from data. It calls its parent class's method which is line layer\n * to get the domain and overwrites the domain according to its need.\n * @return {Array} Domain values\n */\n calculateDomainFromData (data, encodingFieldsInf, fieldsConfig) {\n const domains = super.calculateDomainFromData(data, fieldsConfig);\n [ENCODING.X, ENCODING.Y].forEach((type) => {\n const { [`${type}FieldType`]: fieldType } = encodingFieldsInf;\n if (fieldType === FieldType.MEASURE) {\n domains[type][0] = Math.min(domains[type][0], 0);\n }\n });\n return domains;\n }\n\n /**\n * Returns the drawing method of this layer\n * @return {Function} Draw method\n */\n getDrawFn () {\n return drawArea;\n }\n\n /**\n * Generates the x and y positions for each point\n * @param {Array} data Data Array\n * @param {Object} encoding Visual Encodings of the layer\n * @param {Object} axes Contains the axis\n * @return {Array} Array of points\n */\n translatePoints (data, encodingFieldsInf, axes) {\n let points = [];\n const transformType = this.transformType();\n const colorAxis = axes.color;\n const config = this.config();\n const encoding = config.encoding;\n const colorEncoding = encoding.color;\n const colorField = colorEncoding.field;\n const fieldsConfig = this.data().getFieldsConfig();\n const colorFieldIndex = colorField && fieldsConfig[colorField].index;\n const { xField, yField, y0Field } = encodingFieldsInf;\n const {\n xAxis,\n yAxis\n } = getAxesScales(axes);\n const classNameFn = config.individualClassName;\n const isXDim = fieldsConfig[xField] && fieldsConfig[xField].def.type === FieldType.DIMENSION;\n const isYDim = fieldsConfig[yField] && fieldsConfig[yField].def.type === FieldType.DIMENSION;\n const key = isXDim ? 'x' : (isYDim ? 'y' : null);\n points = data.map((d, i) => {\n const xPx = xAxis.getScaleValue(d.x) + xAxis.getUnitWidth() / 2;\n const yPx = yAxis.getScaleValue(d.y);\n const y0Px = (y0Field || transformType === STACK) ? yAxis.getScaleValue(d.y0) : yAxis.getScaleValue(0);\n const { color, rawColor } = getLayerColor({ datum: d, index: i }, {\n colorEncoding, colorAxis, colorFieldIndex });\n const style = {};\n const meta = {};\n style.fill = color;\n // style['fill-opacity'] = 0;\n meta.stateColor = {};\n meta.originalColor = rawColor;\n meta.colorTransform = {};\n const point = {\n enter: {\n x: xPx,\n y: d.y === null ? d.y : yAxis.getScaleValue(0),\n y0: d.y0 === null ? d.y0 : yAxis.getScaleValue(0)\n },\n update: {\n x: xPx,\n y: d.y === null ? d.y : yPx,\n y0: d.y0 === null ? d.y0 : y0Px\n },\n _id: d._id,\n _data: d._data,\n source: d._data,\n rowId: d._id,\n className: classNameFn ? classNameFn(d, i, data, this) : '',\n style,\n meta\n };\n point.className = getIndividualClassName(d, i, data, this);\n this.cachePoint(d[key], point);\n return point;\n });\n points = positionPoints(this, points);\n return points;\n }\n\n /**\n * Get the css styles need to be applied on the line path\n * @param {string} color Color value\n * @return {Object} Path styles\n */\n getPathStyle (color) {\n return {\n fill: color\n };\n }\n}\n\n","import { CLASSPREFIX } from '../../enums/constants';\n\nexport const defaultConfig = {\n classPrefix: CLASSPREFIX,\n defClassName: 'layer-arc',\n padding: { top: 1, bottom: 1, left: 1, right: 1 },\n className: '',\n minOuterRadius: 10,\n interaction: {\n highlight: [{\n type: 'fill',\n intensity: [0, 0, -15, 0]\n }],\n fade: [{\n type: 'fill',\n intensity: [0, 0, +15, 0]\n }],\n focus: [{\n type: 'fill',\n intensity: [0, 0, +15, 0]\n }]\n },\n height: 100,\n width: 100,\n sort: '',\n cornerRadius: 0,\n padAngle: 0,\n padRadius: 0,\n startAngle: 0,\n endAngle: 360,\n colors: ['#F44336', 'blue', 'green', 'yellow', 'orange', 'purple'],\n transform: {\n type: 'identity'\n },\n encoding: {\n 'stroke-width': {\n value: '2px'\n },\n 'stroke-linejoin': {\n value: 'round'\n },\n angle: {\n value: '1'\n },\n radius: {\n value: '1'\n },\n opacity: {\n value: '1'\n },\n color: {\n value: '1'\n },\n shape: {\n value: '1'\n },\n size: {\n value: '1'\n }\n },\n innerRadiusFixer: 10,\n transition: {\n effect: 'cubic',\n duration: 500\n },\n states: {\n highlight: {\n className: `${CLASSPREFIX}-layer-arc-highlight`\n },\n fadeout: {\n className: `${CLASSPREFIX}-layer-arc-fadeout`\n },\n selected: {\n className: `${CLASSPREFIX}-layer-arc-selected`\n }\n }\n};\n\n","import {\n makeElement,\n selectElement,\n getQualifiedClassName,\n isSimpleObject,\n getDomainFromData,\n Symbols,\n FieldType,\n ReservedFields\n} from 'muze-utils';\nimport { defaultConfig } from './default-config';\nimport { BaseLayer } from '../../base-layer';\nimport * as PROPS from '../../enums/props';\nimport { ASCENDING, OUTER_RADIUS_VALUE } from '../../enums/constants';\nimport { getIndividualClassName } from '../../helpers';\nimport { getRangeValue, getRadiusRange, tweenPie, tweenExitPie, getFieldIndices, getPreviousPoint } from './arc-helper';\nimport './styles.scss';\n\nconst pie = Symbols.pie;\nconst arc = Symbols.arc;\n\n/**\n * Arc Layer creates a plot with polar coordinates\n * Example :-\n * const config = {\n * height: 100,\n * width: 100,\n * startAngle: 0,\n * endAngle: Math.PI,\n * cornerRadius: 10,\n * minOuterRadius: 10,\n * outerRadius: 10,\n * innerRadius: 5,\n * padAngle: 2,\n * padRadius: 2,\n * colors: []\n * padding: {top: 10, bottom: 10, left: 10, right: 10},\n * encoding = {\n * angle: {\n * field: 'date' //Maps to angle of arc\n * },\n * radius: {\n * field: 'sales' // Maps to radius of arc\n * }\n * }\n * };\n * @class\n */\nexport default class ArcLayer extends BaseLayer {\n\n constructor (data, axes, config, dependencies) {\n super(data, axes, config, dependencies);\n this._prevPieData = {};\n }\n\n /**\n * returns the default configuration of the layer\n *\n * @static\n * @return {Object} Default configuration for arc layer\n * @memberof ArcLayer\n */\n static defaultConfig () {\n return defaultConfig;\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof ArcLayer\n */\n static formalName () {\n return 'arc';\n }\n\n /**\n *\n *\n * @returns\n * @memberof ArcLayer\n */\n elemType () {\n return 'path';\n }\n\n /**\n * Transforms data in the appropriate data structure to be consumed by the layer for rendering\n *\n * @param {Object} data data model associated with the layer\n * @param {Object} config configuration of the layer that contains encoding and other parameters\n * @return {Object} Transformed pie data\n * @memberof ArcLayer\n */\n getTransformedData (dataModel, config) {\n let pieData = [];\n const pieIndex = {};\n const {\n startAngle,\n endAngle,\n encoding,\n sort,\n minOuterRadius\n } = config;\n const prevData = this._store.get(PROPS.TRANSFORMED_DATA) || [];\n const fieldsConfig = this.data().getFieldsConfig();\n const {\n angleIndex,\n sizeIndex,\n radiusIndex,\n colorIndex\n } = getFieldIndices(encoding, fieldsConfig);\n const dataVal = dataModel.getData();\n const data = dataVal.data;\n const uids = dataVal.uids;\n\n this._prevPieData = {};\n\n prevData.forEach((e, index) => {\n this._prevPieData[e.uid] = [e, index];\n pieIndex[e.index] = e;\n });\n // Creating pie data using angle field provided. If the angle field is a dimension,\n // all the angles will be equal(360/number of dimensions)\n\n pieData = pie()\n .startAngle((startAngle / 180) * Math.PI)\n .endAngle(Math.PI * endAngle / 180)\n .value(d => d[angleIndex] || 1)\n .sortValues(null);\n\n sort.length && radiusIndex && pieData.sort((a, b) => {\n if (sort === ASCENDING) {\n return a[radiusIndex] - b[radiusIndex];\n } return b[radiusIndex] - a[radiusIndex];\n });\n const sizeVal = data.reduce((acc, d) => acc + (d[sizeIndex] || 0), 1);\n\n // Adding the radius field values to each data point in pie data\n pieData = pieData(data).map((d, i) => {\n d.outerRadiusValue = data[i][radiusIndex] || minOuterRadius;\n d.innerRadius = config.innerRadius;\n d.colorVal = data[i][colorIndex];\n d.angleVal = data[i][angleIndex];\n d.sizeVal = sizeVal;\n d.uid = uids[i];\n d.rowId = d.uid;\n d.source = data[i];\n d._previousInfo = this._prevPieData[d.uid] ? this._prevPieData[d.uid][0] :\n getPreviousPoint(pieIndex, d.index, config);\n return d;\n });\n return pieData;\n }\n\n /**\n * Returns normalized data after transformation (it is the same in the case of pie layer)\n *\n * @param {Object} data transformed data\n * @return {Object} normalized data\n * @memberof ArcLayer\n */\n getNormalizedData (data) {\n return data;\n }\n\n /**\n *\n *\n * @param {Object} data\n * @return {}\n * @memberof ArcLayer\n */\n calculateDomainFromData (data) {\n const domainKey = OUTER_RADIUS_VALUE;\n return {\n radius: getDomainFromData([data], [domainKey, domainKey])\n };\n }\n\n /**\n *\n *\n * @param {Object} x\n * @param {Object} y\n * @return {}\n * @memberof ArcLayer\n */\n getNearestPoint (x, y, config = {}) {\n const dataPoint = selectElement(config.event.target).data()[0];\n if (isSimpleObject(dataPoint)) {\n const { data, uid } = dataPoint.datum;\n return {\n id: this.getIdentifiersFromData(data, uid),\n layerId: this.id()\n };\n }\n return null;\n }\n\n /**\n *\n *\n * @param {*} set\n * @returns\n * @memberof ArcLayer\n */\n getPlotElementsFromSet (set) {\n return selectElement(this.mount()).selectAll(this.elemType()).filter(d => set.indexOf(d.datum.uid) !== -1);\n }\n\n /**\n *\n *\n * @param {Object} container\n * @return {}\n * @memberof ArcLayer\n */\n render (container) {\n const {\n height,\n width\n } = this.measurement();\n const {\n classPrefix,\n defClassName,\n minOuterRadius,\n innerRadius,\n outerRadius,\n cornerRadius,\n padAngle,\n padRadius,\n padding,\n transition,\n innerRadiusFixer\n } = this.config();\n const sizeAxis = this.axes().size;\n const store = this._store;\n const transformedData = store.get(PROPS.TRANSFORMED_DATA);\n const chartHeight = height - padding.top - padding.bottom;\n const chartWidth = width - padding.left - padding.right;\n const qualClassName = getQualifiedClassName(defClassName, this.id(), classPrefix);\n // Sets range for radius\n const range = getRadiusRange(chartWidth, chartHeight, {\n minOuterRadius,\n innerRadius,\n outerRadius,\n innerRadiusFixer\n });\n const colorAxis = this.axes().color;\n const defaultRadius = outerRadius || Math.min(chartHeight, chartWidth) / 2;\n const radiusDomain = store.get(PROPS.DOMAIN).radius;\n const rangeValueGetter = d => getRangeValue(d, range, radiusDomain, defaultRadius, sizeAxis);\n // This returns a function that generates the arc path based on the datum provided\n const path = arc()\n // .outerRadius(d => rangeValueGetter(d))\n .innerRadius(innerRadius ? Math.min(chartHeight / 2, chartWidth / 2, innerRadius) : 0)\n .cornerRadius(cornerRadius)\n .padAngle(padAngle)\n .padRadius(padRadius);\n this._chartWidth = chartWidth;\n this._chartHeight = chartHeight;\n // Creating the group that holds all the arcs\n const g = makeElement(selectElement(container), 'g', [1], `${qualClassName[0]}-group`)\n .classed(`${qualClassName[1]}-group`, true)\n .attr('transform', `translate(${chartWidth / 2},${chartHeight / 2})`);\n const tween = (elem) => {\n makeElement(elem, 'path', (d, i) => [{\n datum: d,\n index: i,\n arcFn: path,\n meta: {\n originalColor: colorAxis.getRawColor(d.colorVal),\n stateColor: {},\n colorTransform: {}\n }\n }], `${qualClassName[0]}-path`)\n .style('fill', d => colorAxis.getColor(d.datum.colorVal))\n .transition()\n .duration(transition.duration)\n .attrTween('d', (...params) => tweenPie(path, rangeValueGetter, params))\n .attr('class', (d, i) => {\n const individualClass = getIndividualClassName(d, i, transformedData, this);\n return `${qualClassName[0]}-path ${qualClassName[1]}-path-${d.index}\n ${individualClass}`;\n });\n };\n const consecutiveExits = [];\n let exitCounter = 0;\n const tweenExit = (elem, d) => {\n let exitArr = consecutiveExits[exitCounter];\n const oldExitCounter = exitCounter;\n if (!exitArr) {\n exitArr = [{ elem, datum: d }];\n } else if (exitArr[exitArr.length - 1].datum.index === d.index - 1) {\n exitArr.push({ elem, datum: d });\n } else {\n exitCounter++;\n }\n consecutiveExits[oldExitCounter] = exitArr;\n };\n // Creating groups for all the arcs present individually\n makeElement(g, 'g', transformedData, `${qualClassName[0]}`,\n {\n update: tween,\n exit: tweenExit\n })\n .attr('class', (d, i) => `${qualClassName[0]} ${qualClassName[1]}-${i}`);\n tweenExitPie(consecutiveExits, transition, rangeValueGetter, path);\n return this;\n }\n\n /**\n *\n *\n * @param {*} identifiers\n * @returns\n * @memberof BaseLayer\n */\n getPointsFromIdentifiers (identifiers) {\n if (!this.data()) {\n return [];\n }\n const fieldNames = identifiers[0];\n const values = identifiers.slice(1, identifiers.length);\n const pieSlices = selectElement(this.mount()).selectAll('path').data();\n const fieldsConfig = this.data().getFieldsConfig();\n\n const filteredPies = pieSlices.filter((tData) => {\n const data = tData.datum.data;\n const uid = tData.datum.uid;\n return fieldNames.every((field, idx) => {\n if (field in fieldsConfig && fieldsConfig[field].def.type === FieldType.DIMENSION) {\n return values.findIndex(d => d[idx] === data[fieldsConfig[field].index]) !== -1;\n } else if (field === ReservedFields.ROW_ID) {\n return values.findIndex(d => d[idx] === uid) !== -1;\n } return true;\n });\n });\n\n const pieSliceInf = filteredPies[0];\n if (pieSliceInf) {\n const centroid = pieSliceInf.arcFn.centroid(pieSliceInf.datum);\n return [{\n x: centroid[0] + this._chartWidth / 2,\n y: centroid[1] + this._chartHeight / 2,\n width: 2,\n height: 2\n }];\n }\n return [];\n }\n}\n\n","import { getObjProp, interpolator, FieldType, selectElement } from 'muze-utils';\nimport { ANGLE, RADIUS, SIZE, COLOR } from '../../enums/constants';\n\n/**\n * Returns the range value from a value inside the domain\n *\n * @param {Object} domainValue Value whose range has to be returned\n * @return {number} range value\n * @memberof ArcLayer\n */\nexport const getRangeValue = (datum, range, domain, defaultRadius, sizeAxis) => {\n let domainMultiplier = 1;\n const {\n outerRadiusValue,\n sizeVal\n } = datum;\n const sizeAxisDomain = sizeAxis.domain();\n const sizeMultiplier = sizeAxis.getSize(sizeVal) / (sizeAxisDomain ? sizeAxis.range()[1] : sizeAxis.config().value);\n\n domainMultiplier *= (range[1] - range[0]) / (domain[1] - domain[0]);\n const rangeVal = (range[0] + (outerRadiusValue - domain[0]) * domainMultiplier);\n return (rangeVal || defaultRadius) * sizeMultiplier;\n};\n\n/**\n *\n *\n * @memberof ArcLayer\n */\nexport const getRadiusRange = (width, height, config) => {\n const {\n minOuterRadius,\n innerRadius,\n outerRadius,\n innerRadiusFixer\n } = config;\n\n return [Math.max((innerRadius + innerRadiusFixer || 0), minOuterRadius), outerRadius || Math.min(height,\n width) / 2];\n};\nexport const getPreviousPoint = (prevData, currIndex, config) => {\n const prevArc = prevData[currIndex - 1];\n const nextArc = prevData[currIndex];\n\n if (prevArc && nextArc) {\n return {\n startAngle: prevArc.endAngle,\n endAngle: nextArc.startAngle\n };\n } else if (!nextArc) {\n return {\n startAngle: config.endAngle * Math.PI * 2 / 360,\n endAngle: config.endAngle * Math.PI * 2 / 360\n };\n }\n return {\n startAngle: config.startAngle * Math.PI * 2 / 360,\n endAngle: config.startAngle * Math.PI * 2 / 360\n };\n};\n\n/**\n *\n *\n * @param {*} path\n * @param {*} b\n * @returns\n * @memberof ArcLayer\n */\nexport const tweenPie = (path, rangeValueGetter, b) => {\n const { datum } = b[0];\n const outerRadius = rangeValueGetter(datum);\n datum.outerRadius = outerRadius;\n datum._previousInfo.outerRadius = datum._previousInfo.outerRadius || outerRadius;\n return function (t) {\n return path(interpolator()(datum._previousInfo, datum)(t));\n };\n};\n\n/**\n *\n *\n * @param {*} path\n * @param {*} b\n * @returns\n * @memberof ArcLayer\n */\nexport const tweenExitPie = (consecutiveExits, transition, rangeValueGetter, path) => {\n if (consecutiveExits.length > 0) {\n consecutiveExits.forEach((consecutiveExitArr) => {\n const startAngle = consecutiveExitArr[0].datum.startAngle;\n const endAngle = consecutiveExitArr[consecutiveExitArr.length - 1].datum.endAngle;\n const mid = (Math.PI * 2 * startAngle) / ((Math.PI * 2) + startAngle - endAngle);\n\n consecutiveExitArr.forEach((e) => {\n const { elem, datum } = e;\n\n elem.each(function () {\n const gElem = selectElement(this);\n gElem.selectAll('path')\n .transition()\n .duration(transition.duration)\n .attrTween('d', () => function (t) {\n const outerRadius = rangeValueGetter(datum);\n datum.outerRadius = outerRadius;\n return path(interpolator()(datum, {\n startAngle: mid,\n endAngle: mid,\n outerRadius\n })(t));\n })\n .remove();\n gElem.remove();\n });\n });\n });\n }\n};\n\nexport const getFieldIndices = (encoding, fieldsConfig) => {\n const [angleField, radiusField, colorField, sizeField] = [ANGLE, RADIUS, COLOR, SIZE]\n .map(e => encoding[e].field);\n const [angleIndex, sizeIndex, radiusIndex] = [angleField, sizeField, radiusField]\n .map((e) => {\n const conf = fieldsConfig[e];\n if (conf && conf.def.type === FieldType.MEASURE) {\n return conf.index;\n }\n return null;\n });\n const colorIndex = getObjProp(fieldsConfig, colorField, 'index');\n return {\n angleIndex,\n sizeIndex,\n radiusIndex,\n colorIndex\n };\n};\n","import {\n setAttrs,\n setStyles,\n selectElement,\n makeElement,\n getSmartComputedStyle\n} from 'muze-utils';\n\n/**\n * Draws svg text in the specified container.\n * @param {SVGElement} container Container where labels will be appended.\n * @param {Array.} data Data of the elements.\n * @return {Selection} d3 selection of the elements.\n */\nconst drawText = (container, data, config, smartLabel) => {\n const selection = selectElement(container).selectAll('g').data(data);\n\n const selectionMerge = selection.enter().append('g')\n .each(function (dataObj) {\n setAttrs(this, dataObj.enter);\n })\n .merge(selection);\n const style = getSmartComputedStyle(selectElement(container), config.className);\n const fontSize = parseInt(style.fontSize, 10);\n\n smartLabel.setStyle(style);\n selectionMerge.each(function (dataObj) {\n const element = selectElement(this);\n const { update, text, color, textanchor, style: textStyle } = dataObj;\n const background = dataObj.background;\n let backgroundVal;\n if (backgroundVal = background.value) {\n const backgroundPadding = background.padding;\n let diff;\n const { width, height } = smartLabel.getOriSize(dataObj.text);\n const backgroundEl = makeElement(element, 'rect', [1]);\n\n if (textanchor === 'end') {\n diff = width;\n } else if (textanchor === 'start') {\n diff = 0;\n } else {\n diff = width / 2;\n }\n\n setAttrs(backgroundEl.node(), {\n x: update.x - diff - backgroundPadding / 2,\n y: update.y - fontSize - backgroundPadding / 2,\n width: width + backgroundPadding,\n height: height + backgroundPadding\n });\n background && setStyles(backgroundEl, {\n background: backgroundVal\n });\n }\n const textEl = makeElement(element, 'text', d => [d]).text(text);\n const textNode = textEl.node();\n textStyle && setStyles(textNode, textStyle);\n color && setStyles(textNode, {\n fill: color\n });\n dataObj.className && textEl.classed(dataObj.className, true);\n setAttrs(textNode, update);\n textEl.attr('text-anchor', textanchor);\n });\n selection.exit().remove();\n return selection;\n};\n\nexport default drawText;\n","import { CLASSPREFIX } from '../../enums/constants';\n\nexport const defaultConfig = {\n defClassName: 'layer-text',\n classPrefix: CLASSPREFIX,\n className: '',\n transform: {\n type: 'identity'\n },\n interaction: {\n highlight: [{\n type: 'fill',\n intensity: [0, 0, -15, 0]\n }],\n fade: [{\n type: 'fill',\n intensity: [0, 0, +15, 0]\n }],\n focus: [{\n type: 'fill',\n intensity: [0, 0, +15, 0]\n }]\n },\n transition: {\n effect: 'cubic',\n duration: 1000\n },\n encoding: {\n color: {},\n text: {\n value: '',\n background: {\n padding: 10\n }\n }\n },\n states: {\n highlight: {\n className: `${CLASSPREFIX}-layer-text-highlight`\n },\n fadeout: {\n className: `${CLASSPREFIX}-layer-text-fadeout`\n },\n selected: {\n className: `${CLASSPREFIX}-layer-text-selected`\n }\n }\n};\n","import {\n getQualifiedClassName,\n selectElement,\n setStyles,\n createElements\n} from 'muze-utils';\nimport { BaseLayer } from '../../base-layer';\nimport drawText from './renderer';\nimport { defaultConfig } from './default-config';\nimport { getLayerColor, positionPoints, getIndividualClassName } from '../../helpers';\nimport { TEXT_ANCHOR_MIDDLE, ENCODING } from '../../enums/constants';\nimport * as PROPS from '../../enums/props';\n\nimport './styles.scss';\n\n/**\n * Text Layer creates labels. It needs to be passed a data table, axes and configuration\n * of the layer.\n * Example :-\n * const textLayer = layerFactory.getLayer('text', [dataModel, axes, config]);\n * textLayer.render(container);\n * @class\n */\nexport default class TextLayer extends BaseLayer {\n /**\n * Returns the default configuration of the text layer\n * @return {Object} Default configuration of the text layer\n */\n static defaultConfig () {\n return defaultConfig;\n }\n\n static formalName () {\n return 'text';\n }\n\n elemType () {\n return 'text';\n }\n\n /**\n * Generates an array of objects containing x, y, width and height of the points from the data\n * @param {Array.} data Data Array\n * @param {Object} encoding Config\n * @param {Object} axes Axes object\n * @return {Array.} Array of points\n */\n translatePoints (data, encoding, axes) {\n let points = [];\n const colorAxis = axes.color;\n const textEncoding = encoding.text;\n const { field: textField, value, formatter: textFormatter } = textEncoding;\n const colorEncoding = encoding.color;\n const colorField = colorEncoding && colorEncoding.field;\n const fieldsConfig = this.data().getFieldsConfig();\n\n const backgroundEncoding = encoding.text.background;\n const backgroundPadding = backgroundEncoding.padding;\n const backgroundValue = backgroundEncoding.value;\n const colorFieldIndex = fieldsConfig[colorField] ? fieldsConfig[colorField].index : -1;\n const textFieldIndex = textField ? fieldsConfig[textField] && fieldsConfig[textField].index : -1;\n const xEnc = ENCODING.X;\n const yEnc = ENCODING.Y;\n for (let i = 0, len = data.length; i < len; i++) {\n const d = data[i];\n const row = d._data;\n const textValue = textField ? row[textFieldIndex] : value;\n\n const [xPx, yPx] = [xEnc, yEnc].map(type => (axes[type] ? axes[type].getScaleValue(d[type]) +\n axes[type].getUnitWidth() / 2 : 0));\n\n const { color, rawColor } = getLayerColor({ datum: d, index: i },\n { colorEncoding, colorAxis, colorFieldIndex });\n\n const point = {\n enter: {},\n update: {\n x: xPx,\n y: yPx\n },\n text: textFormatter ? textFormatter(textValue) : textValue,\n color,\n background: {\n value: backgroundValue instanceof Function ? backgroundValue(d, i, data, this) : null,\n padding: backgroundPadding\n },\n meta: {\n stateColor: {},\n originalColor: rawColor,\n colorTransform: {}\n },\n style: {},\n _data: row,\n _id: d._id,\n source: d._data,\n rowId: d._id\n };\n\n if (d.x !== null && d.y !== null) {\n points.push(point);\n }\n\n point.className = getIndividualClassName(d, i, data, this);\n }\n\n points = positionPoints(this, points);\n\n return points;\n }\n\n /**\n * Renders the plot in the given container\n * @param {SVGElement} container SVGElement which will hold the plot\n * @return {textLayer} Instance of text layer\n */\n render (container) {\n let points;\n const config = this.config();\n const encoding = config.encoding;\n const normalizedData = this._store.get(PROPS.NORMALIZED_DATA);\n const className = config.className;\n const qualifiedClassName = getQualifiedClassName(config.defClassName, this.id(), config.classPrefix);\n const axes = this.axes();\n const containerSelection = selectElement(container);\n\n containerSelection.classed(`${qualifiedClassName.join(' ')} ${className}`, true);\n createElements({\n data: normalizedData,\n append: 'g',\n selector: 'g',\n container,\n each: (dataArr, group, i) => {\n const node = group.node();\n points = this.translatePoints(dataArr, encoding, axes, i);\n setStyles(node, {\n 'text-anchor': TEXT_ANCHOR_MIDDLE\n });\n drawText(node, points, {\n className: qualifiedClassName[0]\n }, this._dependencies.smartLabel);\n }\n });\n return this;\n }\n}\n","/* global Element, document */\nimport {\n makeElement,\n selectElement,\n easeFns,\n objectIterator,\n getSymbol\n} from 'muze-utils';\n\n/**\n *\n *\n * @param {*} str\n * @returns\n */\nconst checkPath = (str) => {\n if (/^[mzlhvcsqta]\\s*[-+.0-9][^mlhvzcsqta]+/i.test(str) && /[\\dz]$/i.test(str) && str.length > 4) {\n return true;\n }\n return false;\n};\n\n/**\n *\n *\n * @param {*} d\n * @param {*} elem\n */\nconst createShape = function (d, elem) {\n const groupElement = selectElement(elem);\n const { shape, size, update } = d;\n\n if (shape instanceof Promise) {\n shape.then((res) => {\n d.shape = res;\n createShape(d, elem);\n });\n } else if (shape instanceof Element) {\n let newShape = shape.cloneNode(true);\n\n if (newShape.nodeName.toLowerCase() === 'img') {\n const src = newShape.src || newShape.href;\n newShape = document.createElementNS('http://www.w3.org/2000/svg', 'image');\n newShape.setAttribute('href', src);\n }\n const shapeElement = selectElement(newShape);\n if (newShape.nodeName === 'path' || newShape.nodeName === 'image') {\n shapeElement.attr('transform', `scale(${size / 100})`);\n } else {\n shapeElement.attr('height', size);\n shapeElement.attr('width', size);\n }\n shapeElement.attr('x', -size / 2);\n shapeElement.attr('y', -size / 2);\n selectElement(groupElement.node().appendChild(newShape));\n } else if (typeof shape === 'string') {\n let pathStr;\n if (checkPath(shape)) {\n pathStr = shape;\n } else {\n pathStr = getSymbol(shape).size(size)(update);\n }\n makeElement(groupElement, 'path', data => [data]).attr('d', pathStr);\n } else {\n d.shape = 'circle';\n createShape(d, elem);\n }\n};\n\n/**\n * Draws symbols using d3 symbol api\n * @param {Object} params Contains the svg container, points and other symbol related attributes.\n */\n/* istanbul ignore next */ const drawSymbols = (params) => {\n let mergedGroups;\n const { container, points, transition, className } = params;\n const { duration, effect, disabled } = transition;\n const mount = selectElement(container);\n\n mount.attr('class', className);\n const symbolGroups = mount.selectAll('g').data(points, params.keyFn);\n const symbolEnter = symbolGroups.enter().append('g').attr('transform', d => `translate(${d.enter.x},${d.enter.y})`);\n mergedGroups = symbolGroups.merge(symbolEnter)\n .each(function (d) {\n createShape(d, this);\n });\n mergedGroups = disabled ? mergedGroups : mergedGroups.transition().duration(disabled ? 0 : transition.duration);\n mergedGroups.attr('transform', d => `translate(${d.update.x},${d.update.y})`)\n .each(function (d) {\n const style = d.style;\n const element = selectElement(this);\n objectIterator(style, key => element.style(key, style[key]));\n element.attr('class', `${className}`);\n element.classed(d.className, true);\n });\n\n const exitGroups = symbolGroups.exit();\n if (!disabled) {\n exitGroups.transition().ease(easeFns[effect])\n .duration(duration)\n .on('end', function () {\n selectElement(this).remove();\n })\n .style('fill-opacity', 0)\n .style('stroke-opacity', 0);\n } else {\n exitGroups.remove();\n }\n};\n\nexport default drawSymbols;\n","import { CLASSPREFIX } from '../../enums/constants';\n\nexport const defaultConfig = {\n defClassName: 'layer-point',\n className: '',\n classPrefix: CLASSPREFIX,\n defColorStyle: 'stroke',\n interaction: {\n highlight: [{\n type: 'fill',\n intensity: [0, 0, -20, 0]\n }],\n fade: [{\n type: 'fill',\n intensity: [0, 0, +20, 0]\n }],\n focus: [{\n type: 'fill',\n intensity: [0, 0, +20, 0]\n }\n ]\n },\n innerPadding: 0.1,\n nearestPointThreshold: 10,\n transform: {\n type: 'identity'\n },\n transition: {\n effect: 'cubic',\n duration: 1000\n },\n encoding: {\n size: {\n value: 30\n },\n color: { },\n shape: {\n value: 'circle'\n },\n x: {},\n y: {},\n strokeOpacity: {\n value: 0.5\n },\n fillOpacity: {\n value: 0.5\n }\n },\n shapes: ['circle', 'cross', 'diamond', 'square', 'star', 'wye', 'triangle'],\n sizes: [20, 30, 40, 50, 60, 70]\n};\n","import {\n Voronoi,\n selectElement,\n getQualifiedClassName,\n makeElement,\n FieldType,\n Scales\n} from 'muze-utils';\nimport { BaseLayer } from '../../base-layer';\nimport drawSymbols from './renderer';\nimport { defaultConfig } from './default-config';\nimport { ENCODING } from '../../enums/constants';\nimport * as PROPS from '../../enums/props';\nimport {\n attachDataToVoronoi,\n getLayerColor,\n positionPoints,\n getPlotMeasurement,\n getIndividualClassName\n} from '../../helpers';\n\nimport './styles.scss';\n\n/**\n * Point Layer creates point. Itt needs to be passed a data table, axes and configuration\n * of the layer.\n * Example :-\n * const pointLayer = layerFactory.getLayer('point', [data, axes, config]);\n * pointLayer.render(container);\n * @class\n */\nexport default class PointLayer extends BaseLayer {\n\n /**\n * Creates an instance of PointLayer.\n * @param {*} args\n * @memberof PointLayer\n */\n constructor (...args) {\n super(...args);\n this._voronoi = new Voronoi();\n this._bandScale = Scales.band();\n }\n\n /**\n *\n *\n * @returns\n * @memberof PointLayer\n */\n elemType () {\n return 'g';\n }\n\n /**\n * Returns the default configuration of the point layer\n * @return {Object} Default configuration of the point layer\n */\n static defaultConfig () {\n return defaultConfig;\n }\n\n static defaultPolicy (conf, userConf) {\n const config = BaseLayer.defaultPolicy(conf, userConf);\n const encoding = config.encoding;\n const transform = config.transform;\n const colorField = encoding.color && encoding.color.field;\n\n if (colorField) {\n transform.groupBy = colorField;\n }\n return config;\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof PointLayer\n */\n static formalName () {\n return 'point';\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof PointLayer\n */\n static drawFn () {\n return drawSymbols;\n }\n\n /**\n * Generates an array of objects containing x, y, width and height of the points from the data\n * @param {Array.} data Data Array\n * @param {Object} encoding Config\n * @param {Object} axes Axes object\n * @return {Array.} Array of points\n */\n translatePoints (data, encoding, axes, config = {}) {\n let points = [];\n const {\n size: sizeEncoding,\n shape: shapeEncoding,\n color: colorEncoding,\n x,\n y\n } = encoding;\n const sizeField = sizeEncoding.field;\n const sizeValue = sizeEncoding.value;\n const shapeField = shapeEncoding.field;\n const xField = x.field;\n const yField = y.field;\n const { size: sizeAxis, shape: shapeAxis } = axes;\n const fieldsConfig = this.data().getFieldsConfig();\n const isXDim = fieldsConfig[xField] && fieldsConfig[xField].def.type === FieldType.DIMENSION;\n const isYDim = fieldsConfig[yField] && fieldsConfig[yField].def.type === FieldType.DIMENSION;\n const key = isXDim ? ENCODING.X : (isYDim ? ENCODING.Y : null);\n const colorField = colorEncoding && colorEncoding.field;\n const colorFieldIndex = fieldsConfig[colorField] && fieldsConfig[colorField].index;\n const measurement = this._store.get(PROPS.MEASUREMENT);\n const shapeFieldIndex = fieldsConfig[shapeField] && fieldsConfig[shapeField].index;\n const sizeFieldIndex = fieldsConfig[sizeField] && fieldsConfig[sizeField].index;\n const colorAxis = axes.color;\n const { x: offsetX, y: offsetY } = config.offset;\n\n for (let i = 0, len = data.length; i < len; i++) {\n const d = data[i];\n const row = d._data;\n const size = sizeValue instanceof Function ? sizeValue(d, i) : sizeAxis.getSize(row[sizeFieldIndex]);\n const shape = shapeAxis.getShape(row[shapeFieldIndex]);\n\n let [xPx, yPx] = [ENCODING.X, ENCODING.Y].map((type) => {\n const value = d[type] === null ? undefined : d[type];\n const measure = type === ENCODING.X ? measurement.width : measurement.height;\n return !encoding[type].field ? measure / 2 : axes[type].getScaleValue(value);\n });\n\n xPx += offsetX;\n yPx += offsetY;\n\n const { color, rawColor } = getLayerColor({ datum: d, index: i },\n { colorEncoding, colorAxis, colorFieldIndex });\n\n const style = {\n fill: color,\n stroke: color\n };\n\n if (!isNaN(xPx) && !isNaN(yPx)) {\n const point = {\n enter: {\n x: xPx,\n y: yPx\n },\n update: {\n x: xPx,\n y: yPx\n },\n shape,\n size: Math.abs(size),\n meta: {\n stateColor: {},\n originalColor: rawColor,\n colorTransform: {}\n },\n style,\n _data: row,\n _id: d._id,\n source: d._data,\n rowId: d._id\n };\n point.className = getIndividualClassName(d, i, data, this);\n points.push(point);\n this.cachePoint(d[key], point);\n }\n }\n points = positionPoints(this, points);\n return points;\n }\n\n /**\n * Renders the plot in the given container.\n *\n * @param {SVGElement} container SVGElement which will hold the plot\n * @return {BarLayer} Instance of bar layer\n */\n render (container) {\n let maxSize = 0;\n let seriesClassName;\n const config = this.config();\n const keys = this._store.get(PROPS.TRANSFORMED_DATA).map(d => d.key);\n const { transition, className, defClassName, classPrefix } = config;\n const normalizedData = this._store.get(PROPS.NORMALIZED_DATA);\n const containerSelection = selectElement(container);\n const qualifiedClassName = getQualifiedClassName(defClassName, this.id(), classPrefix);\n this._points = [];\n this._pointMap = {};\n\n containerSelection.classed(qualifiedClassName.join(' '), true).classed(className, true);\n\n this._points = this.generateDataPoints(normalizedData, keys);\n\n makeElement(container, 'g', this._points, null, {\n update: (group, points) => {\n maxSize = Math.max(maxSize, ...points.map(d => d.size));\n seriesClassName = `${qualifiedClassName[0]}`;\n this.constructor.drawFn()({\n container: group.node(),\n points,\n className: seriesClassName,\n transition,\n keyFn: d => d._id\n });\n }\n }, data => data[0]._id);\n this._maxSize = Math.sqrt(maxSize / Math.PI) * 2;\n attachDataToVoronoi(this._voronoi, this._points);\n return this;\n }\n\n generateDataPoints (normalizedData, keys) {\n const encoding = this.config().encoding;\n const axes = this.axes();\n const [widthMetrics, heightMetrics] = getPlotMeasurement(this, keys);\n const offsetXValues = widthMetrics.offsetValues || [];\n const offsetYValues = heightMetrics.offsetValues || [];\n return normalizedData.map((dataArr, i) => {\n const measurementConf = this.getMeasurementConfig(offsetXValues[i], offsetYValues[i], widthMetrics.span,\n heightMetrics.span);\n return this.translatePoints(dataArr, encoding, axes, measurementConf);\n }).filter(d => d.length);\n }\n\n getMeasurementConfig (offsetX, offsetY, widthSpan, heightSpan) {\n return {\n offset: {\n x: (offsetX || 0) + widthSpan / 2,\n y: (offsetY || 0) + heightSpan / 2\n },\n span: {\n x: widthSpan,\n y: heightSpan\n }\n };\n }\n\n /**\n * Gets the nearest point from a position.\n * @param {number} x x position\n * @param {number} y y position\n * @return {Object} Point details\n */\n getNearestPoint (x, y) {\n const distanceLimit = Math.max(this._maxSize, this.config().nearestPointThreshold);\n\n if (!this.data()) {\n return null;\n }\n\n const point = this._voronoi.find(x, y, distanceLimit);\n const dimensions = point && point.data.data.update;\n const radius = point ? Math.sqrt(point.data.data.size / Math.PI) : 0;\n\n if (point) {\n const { _data, _id } = point.data.data;\n const identifiers = this.getIdentifiersFromData(_data, _id);\n return {\n id: identifiers,\n dimensions: [{\n x: dimensions.x,\n y: dimensions.y,\n width: radius,\n height: radius\n }],\n layerId: this.id()\n };\n }\n return null;\n }\n}\n","import { makeElement, easeFns } from 'muze-utils';\n\n/**\n *\n *\n * @param {*} elem\n * @param {*} datum\n * @param {*} index\n * @param {*} context\n */\nconst transitionBars = (elem, datum, index, context) => {\n const { transition } = context;\n const { duration, disabled, effect } = transition;\n const selection = elem;\n const selTransition = disabled ? selection : selection.transition().duration(duration).ease(easeFns[effect]);\n const update = datum.update || datum;\n const updateStyle = datum.style || {};\n datum.className && selection.classed(datum.className, true);\n Object.entries(update).forEach(attr => (!isNaN(attr[1]) && selTransition.attr(attr[0], attr[1])));\n Object.entries(updateStyle).forEach(styleObj => selection.style(styleObj[0], styleObj[1]));\n};\n\n/**\n *\n *\n * @param {*} elem\n * @param {*} d\n */\nconst barEnterFn = (elem, d) => {\n const selection = elem;\n const enter = d.enter || {};\n Object.entries(enter).forEach(attr => (!isNaN(attr[1]) && selection.attr(attr[0], attr[1])));\n};\n\n/**\n * Draws rectangles by using d3 selection\n * @param {Object} params Contains container element and points\n * @return {Selection} Bar Selection\n */\n/* istanbul ignore next */ export const drawRects = (params) => {\n const { points, container, keyFn } = params;\n const updateFns = {\n enter (elem, d) { barEnterFn(elem, d); },\n update (elem, d, i) { transitionBars(elem, d, i, params); }\n };\n return makeElement(container, 'rect', points, null, updateFns, keyFn);\n};\n","import { CLASSPREFIX } from '../../enums/constants';\n\nexport const defaultConfig = {\n classPrefix: CLASSPREFIX,\n defClassName: 'layer-bar',\n className: '',\n interaction: {\n highlight: [{\n type: 'fill',\n intensity: [0, 0, -15, 0]\n }],\n fade: [{\n type: 'fill',\n intensity: [0, 0, +15, 0]\n }],\n focus: [{\n type: 'fill',\n intensity: [0, 0, +15, 0]\n }]\n },\n transform: {\n type: 'stack'\n },\n transition: {\n effect: 'cubic',\n duration: 1000\n },\n innerPadding: 0.1,\n encoding: {\n color: {},\n x: {},\n y: {},\n x0: {},\n y0: {}\n },\n states: {\n highlight: {\n className: `${CLASSPREFIX}-layer-bar-highlight`\n },\n fadeout: {\n className: `${CLASSPREFIX}-layer-bar-fadeout`\n },\n selected: {\n className: `${CLASSPREFIX}-layer-bar-selected`\n }\n }\n};\n\n","import { FieldType, DimensionSubtype } from 'muze-utils';\nimport * as PROPS from '../../enums/props';\nimport { STACK } from '../../enums/constants';\nimport { getLayerColor, positionPoints, getIndividualClassName } from '../../helpers';\n\n/**\n *\n *\n * @param {*} type\n * @param {*} fieldInfo\n * @param {*} config\n * @param {*} data\n * @returns\n */\nconst resolveDimByField = (type, axesInfo, config, data) => {\n const spaceType = type === 'x' ? 'width' : 'height';\n const [fieldType, axis] = [config[`${type}FieldType`], axesInfo[`${type}Axis`]];\n const {\n transformType,\n sizeEncoding,\n sizeConfig,\n measurement\n } = config;\n\n const sizeValue = sizeEncoding.value;\n let enter = 0;\n let pos;\n let space = 0;\n let enterSpace = 0;\n if (fieldType !== undefined) {\n if (config[`${type}0Field`]) {\n const minVal = data[type];\n const maxVal = data[`${type}0`];\n let min;\n let max;\n if (minVal === null || maxVal === null) {\n return {\n enterSpace: undefined,\n enter: undefined,\n pos: undefined,\n space: undefined\n };\n } else if (fieldType === FieldType.MEASURE || fieldType === DimensionSubtype.TEMPORAL) {\n min = Math.min(minVal, maxVal);\n max = Math.max(minVal, maxVal);\n } else {\n min = minVal;\n max = maxVal;\n }\n const scales = type === 'x' ? [min, max] : [max, min];\n pos = axis.getScaleValue(scales[0]) + axis.getUnitWidth() / 2;\n space = Math.abs(axis.getScaleValue(scales[1]) - pos) + axis.getUnitWidth() / 2;\n\n enter = pos;\n enterSpace = 0;\n } else if (fieldType === DimensionSubtype.CATEGORICAL || fieldType === DimensionSubtype.TEMPORAL) {\n pos = axis.getScaleValue(data[type]) +\n (sizeConfig[type === 'x' ? 'barWidthOffset' : 'barHeightOffset'] || 0);\n\n space = sizeConfig[type === 'x' ? 'barWidth' : 'barHeight'];\n if (sizeValue !== undefined) {\n const diffPx = sizeValue * space;\n space -= diffPx;\n pos += diffPx / 2;\n }\n enter = pos;\n enterSpace = space;\n } else {\n const zeroPos = axis.getScaleValue(0);\n const axisType = axis.getScaleValue(data[type]);\n const axisType0 = axis.getScaleValue(data[`${type}0`]);\n\n enterSpace = 0;\n if (type === 'x') {\n pos = data[type] < 0 || transformType === STACK ? axisType : zeroPos;\n space = Math.abs(pos - (transformType === STACK ? axisType0 : (data[type] >= 0 ? axisType : zeroPos)));\n } else {\n pos = transformType === STACK || data[type] >= 0 ? axisType : zeroPos;\n space = Math.abs(pos - (transformType === STACK ? axisType0 : (data[type] >= 0 ? zeroPos : axisType)));\n }\n enter = zeroPos;\n }\n } else {\n pos = 0;\n space = measurement[spaceType];\n }\n\n return {\n enterSpace,\n enter,\n pos,\n space\n };\n};\n\n/**\n *\n *\n * @param {*} data\n * @param {*} config\n * @param {*} axes\n * @returns\n */\nconst resolveDimensions = (data, config, axes) => {\n const axesInfo = {\n xAxis: axes.x,\n yAxis: axes.y\n };\n const {\n enterSpace: enterWidth,\n enter: enterX,\n pos: xPos,\n space: width\n } = resolveDimByField('x', axesInfo, config, data);\n\n const {\n enterSpace: enterHeight,\n enter: enterY,\n pos: yPos,\n space: height\n } = resolveDimByField('y', axesInfo, config, data);\n return {\n enter: {\n x: enterX,\n y: enterY,\n width: enterWidth,\n height: enterHeight\n },\n update: {\n x: xPos,\n y: yPos,\n width,\n height\n }\n };\n};\n\n/**\n * Generates an array of objects containing x, y, width and height of the bars from the data\n * @param {Array.} data Data Array\n * @param {Object} encoding Config\n * @param {Object} axes Axes object\n * @param {Object} conf config object for point generation\n * @return {Array.} Array of points\n */\nexport const getTranslatedPoints = (context, data, sizeConfig) => {\n let points = [];\n const encoding = context.config().encoding;\n const axes = context.axes();\n const colorAxis = axes.color;\n const fieldsConfig = context.data().getFieldsConfig();\n const colorEncoding = encoding.color;\n const colorField = colorEncoding.field;\n const sizeEncoding = encoding.size || {};\n const {\n x0Field,\n y0Field,\n xFieldSubType,\n yFieldSubType\n } = context.encodingFieldsInf();\n const measurement = context._store.get(PROPS.MEASUREMENT);\n const isXDim = xFieldSubType === DimensionSubtype.CATEGORICAL || xFieldSubType === DimensionSubtype.TEMPORAL;\n const isYDim = yFieldSubType === DimensionSubtype.CATEGORICAL || yFieldSubType === DimensionSubtype.TEMPORAL;\n const key = isXDim ? 'x' : (isYDim ? 'y' : null);\n const transformType = context.transformType();\n const colorFieldIndex = colorField && fieldsConfig[colorField] && fieldsConfig[colorField].index;\n\n for (let i = 0, len = data.length; i < len; i++) {\n const d = data[i];\n const style = {};\n const meta = {};\n const dimensions = resolveDimensions(d, {\n xFieldType: xFieldSubType,\n yFieldType: yFieldSubType,\n x0Field,\n y0Field,\n transformType,\n measurement,\n sizeConfig,\n sizeEncoding\n }, axes);\n\n const { color, rawColor } = getLayerColor({ datum: d, index: i },\n { colorEncoding, colorAxis, colorFieldIndex });\n\n style.fill = color;\n meta.stateColor = {};\n meta.originalColor = rawColor;\n meta.colorTransform = {};\n\n const update = dimensions.update;\n\n if (!isNaN(update.x) && !isNaN(update.y) && d._id !== undefined) {\n let point = null;\n point = {\n enter: dimensions.enter,\n update,\n style,\n _data: d._data,\n _id: d._id,\n source: d._data,\n rowId: d._id,\n meta\n };\n point.className = getIndividualClassName(d, i, data, context);\n points.push(point);\n // Store each point in a hashmap with key as the dimensional or temporal field value\n context.cachePoint(d[key], point);\n }\n }\n\n points = positionPoints(context, points);\n return points;\n};\n","import {\n getClosestIndexOf,\n getQualifiedClassName,\n selectElement,\n createElements,\n clipElement,\n DimensionSubtype,\n FieldType,\n Scales\n} from 'muze-utils';\nimport { BaseLayer } from '../../base-layer';\nimport { drawRects } from './renderer';\nimport { defaultConfig } from './default-config';\nimport * as PROPS from '../../enums/props';\nimport { getPlotMeasurement } from '../../helpers';\nimport './styles.scss';\nimport { getTranslatedPoints } from './bar-helper';\n\nconst MEASURE = FieldType.MEASURE;\nconst scaleBand = Scales.band;\n\n/**\n * Bar Layer creates a bar plot. It needs to be passed a data table, axes and configuration of the layer.\n *\n * @example\n * const BarLayer = layerFactory.getLayer('bar');\n * BarLayer.create()\n * .config(config)\n * .data(dt)\n * .mountPoint(container);\n * @class\n */\nexport default class BarLayer extends BaseLayer {\n /**\n * Creates an instance of bar layer\n */\n constructor (...params) {\n super(...params);\n this._bandScale = scaleBand();\n this._plotPadding = {\n x: 0,\n y: 0\n };\n this._plotSpan = {\n x: 0,\n y: 0\n };\n this._pointMap = {};\n }\n\n /**\n *\n *\n * @returns\n * @memberof BarLayer\n */\n elemType () {\n return 'rect';\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof BarLayer\n */\n static formalName () {\n return 'bar';\n }\n\n /**\n * Returns the default configuration of the bar layer\n * @return {Object} Default configuration of the bar layer\n */\n static defaultConfig () {\n return defaultConfig;\n }\n\n /**\n *\n *\n * @static\n * @param {*} conf\n * @param {*} userConf\n * @returns\n * @memberof BarLayer\n */\n static defaultPolicy (conf, userConf) {\n const config = BaseLayer.defaultPolicy(conf, userConf);\n const encoding = config.encoding;\n const colorField = encoding.color.field;\n const transform = config.transform;\n\n if (colorField) {\n transform.groupBy = colorField;\n }\n return config;\n }\n\n /**\n *\n *\n * @param {*} data\n * @param {*} fieldsConfig\n * @returns\n * @memberof BarLayer\n */\n calculateDomainFromData (data, encodingFieldInf, fieldsConfig) {\n const domain = super.calculateDomainFromData(data, encodingFieldInf, fieldsConfig);\n ['x', 'y'].forEach((d) => {\n if (encodingFieldInf[`${d}FieldType`] === MEASURE && domain[d]) {\n encodingFieldInf[`${d}0Field}`] ? domain[d] = domain[d].sort((a, b) => a - b) :\n (domain[d][0] = Math.min(domain[d][0], 0));\n }\n });\n return domain;\n }\n\n /**\n * Generates an array of objects containing x, y, width and height of the bars from the data\n * @param {Array.} data Data Array\n * @param {Object} encoding Config\n * @param {Object} axes Axes object\n * @param {Object} conf config object for point generation\n * @return {Array.} Array of points\n */\n translatePoints (data, sizeConfig) {\n return getTranslatedPoints(this, data, sizeConfig);\n }\n\n /**\n * Renders the plot in the given container\n * @param {SVGGroup} container SVGGroup where plot will be rendered.\n * @return {BarLayer} Instance of bar layer.\n */\n render (container) {\n const config = this.config();\n const transition = config.transition;\n const store = this._store;\n const normalizedDataArr = store.get(PROPS.NORMALIZED_DATA);\n const transformedData = store.get(PROPS.TRANSFORMED_DATA);\n const keys = transformedData.map(d => d.key);\n const fieldsConfig = this.data().getFieldsConfig();\n const axes = this.axes();\n const height = axes.y && axes.y.scale().range()[0];\n const width = axes.x && axes.x.scale().range()[1];\n const defClassName = config.defClassName;\n const qualifiedClassName = getQualifiedClassName(defClassName, this.id(), config.classPrefix);\n const className = config.className;\n const containerSelection = selectElement(container);\n const dimensions = Object.values(fieldsConfig).filter(e => e.def.type === FieldType.DIMENSION)\n .map(e => e.index);\n containerSelection.classed(qualifiedClassName.join(' '), true);\n containerSelection.classed(className, true);\n clipElement(container, {\n x: 0,\n y: 0,\n width,\n height\n }, `id-${this.id()}`);\n\n this._points = this.generateDataPoints(normalizedDataArr, keys);\n\n createElements({\n data: this._points,\n container,\n selector: 'g',\n append: 'g',\n each: (points, group, i) => {\n const seriesClassName = `${qualifiedClassName[0]}-${keys[i] || i}`.toLowerCase();\n group.style('display', 'block');\n drawRects({\n container: group.node(),\n points,\n className: seriesClassName,\n transition,\n style: {},\n keyFn: d => dimensions.map(key => d._data[key]).join('-')\n });\n }\n });\n return this;\n }\n\n /**\n *\n *\n * @param {*} normalizedData\n * @param {*} keys\n * @returns\n * @memberof BarLayer\n */\n generateDataPoints (normalizedData, keys) {\n const [barWidthMetrics, barHeightMetrics] = getPlotMeasurement(this, keys);\n const barWidthOffsets = barWidthMetrics.offsetValues || [];\n const barHeightOffsets = barHeightMetrics.offsetValues || [];\n this._plotSpan = {\n x: barWidthMetrics.groupSpan || 0,\n y: barHeightMetrics.groupSpan || 0\n };\n this._plotPadding = {\n x: barWidthMetrics.padding || 0,\n y: barHeightMetrics.padding || 0\n };\n\n this._pointMap = {};\n return normalizedData.map((data, i) => this.translatePoints(data,\n {\n barWidth: barWidthMetrics.span,\n barWidthOffset: barWidthOffsets[i] || 0,\n barHeight: barHeightMetrics.span,\n barHeightOffset: barHeightOffsets[i] || 0\n }));\n }\n\n getPlotPadding () {\n return this._plotPadding;\n }\n\n /**\n * Gets the nearest point of the position passed.\n * @param {number} x x position\n * @param {number} y y position\n * @return {Object} Nearest point.\n */\n getNearestPoint (x, y) {\n if (!this.data()) {\n return null;\n }\n let axis;\n let value;\n let index;\n let points;\n let uniqueFieldType;\n let uniqueFieldIndex;\n let filterData;\n let identifiers;\n let pointFound = null;\n const dataModel = this.data();\n const dataObj = dataModel.getData();\n const fieldsConfig = dataModel.getFieldsConfig();\n const axes = this.axes();\n const data = dataObj.data;\n const pointMap = this._pointMap;\n const {\n xField,\n yField,\n xFieldSubType,\n yFieldSubType\n } = this.encodingFieldsInf();\n\n if (xFieldSubType === FieldType.MEASURE) {\n axis = axes.y;\n value = axis.invert(y);\n uniqueFieldIndex = fieldsConfig[yField].index;\n uniqueFieldType = yFieldSubType;\n } else {\n axis = axes.x;\n value = axis.invert(x);\n uniqueFieldIndex = fieldsConfig[xField].index;\n uniqueFieldType = xFieldSubType;\n }\n\n if (uniqueFieldType === DimensionSubtype.CATEGORICAL) {\n points = pointMap[value];\n }\n\n if (uniqueFieldType === DimensionSubtype.TEMPORAL) {\n filterData = [...new Set(data.map(d => d[uniqueFieldIndex]))];\n index = getClosestIndexOf(filterData, value);\n value = filterData[index];\n points = pointMap[value];\n }\n const len = points && points.length;\n points && points.sort((p1, p2) => p1.update.y - p2.update.y);\n for (let i = 0; i < len; i++) {\n const point = points[i];\n const update = point.update;\n if (x >= update.x && x <= (update.width + update.x) && y >= update.y && y <= (update.height + update.y)) {\n pointFound = point;\n break;\n }\n pointFound = null;\n }\n\n const values = pointFound && pointFound._data;\n if (values) {\n identifiers = this.getIdentifiersFromData(values, pointFound._id);\n }\n return pointFound ? {\n dimensions: [pointFound.update],\n id: identifiers,\n layerId: this.id()\n } : pointFound;\n }\n\n getPlotSpan () {\n return this._plotSpan;\n }\n}\n","import { CLASSPREFIX } from '../../enums/constants';\n\nexport const defaultConfig = {\n defClassName: 'layer-tick',\n className: '',\n classPrefix: CLASSPREFIX,\n interaction: {\n highlight: [{\n type: 'stroke',\n intensity: [0, 0, -15, 0]\n }],\n fade: [{\n type: 'stroke',\n intensity: [0, 0, 15, 0]\n }],\n focus: [{\n type: 'stroke',\n intensity: [0, 0, 15, 0]\n }]\n },\n innerPadding: 0.1,\n transform: {\n type: 'identity'\n },\n transition: {\n effect: 'cubic',\n duration: 1000\n },\n encoding: {\n color: { },\n x: {},\n y: {},\n x0: {},\n y0: {},\n strokeOpacity: {\n value: 0.5\n },\n fillOpacity: {\n value: 0.5\n }\n },\n states: {\n highlight: {\n className: `${CLASSPREFIX}-layer-tick-highlight`\n },\n fadeout: {\n className: `${CLASSPREFIX}-layer-tick-fadeout`\n },\n selected: {\n className: `${CLASSPREFIX}-layer-tick-selected`\n }\n }\n};\n","import { selectElement } from 'muze-utils';\n\n/**\n * Draws ticks by using d3 selection\n * @param {Object} params Contains container element and points\n * @return {Selection} Ticks Selection\n */\nexport default /* istanbul ignore next */ (params) => {\n const { points, container, keyFn, className } = params;\n const mount = selectElement(container);\n const ticks = mount.selectAll('path').data(points, keyFn);\n const ticksEnter = ticks.enter().append('path');\n\n mount.attr('class', className || '');\n ticksEnter.each(function (d) {\n const selection = selectElement(this);\n const enter = d.enter || {};\n Object.entries(enter).forEach(attr => (!isNaN(attr[1]) && selection.attr(attr[0], attr[1])));\n });\n\n ticks.exit().remove();\n return ticks.merge(ticksEnter)\n .each(function (d) {\n const selection = selectElement(this);\n const update = d.update;\n const updateStyle = d.style || {};\n const x0 = update.x0 !== undefined ? update.x0 : update.x;\n const y0 = update.y0 !== undefined ? update.y0 : update.y;\n const path = `M ${update.x} ${update.y} L ${x0} ${y0}`;\n d.className && selection.classed(d.className, true);\n selection.attr('d', path);\n Object.entries(updateStyle).forEach(styleObj => selection.style(styleObj[0], styleObj[1]));\n });\n};\n\n","import { FieldType } from 'muze-utils';\nimport { PointLayer } from '../point';\nimport { defaultConfig } from './default-config';\nimport * as PROPS from '../../enums/props';\nimport { ENCODING } from '../../enums/constants';\nimport drawTicks from './renderer';\nimport './styles.scss';\nimport { getAxesScales, getLayerColor, positionPoints, getIndividualClassName } from '../../helpers';\n\nexport default class TickLayer extends PointLayer {\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof TickLayer\n */\n static defaultConfig () {\n return defaultConfig;\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof TickLayer\n */\n static formalName () {\n return 'tick';\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof TickLayer\n */\n static drawFn () {\n return drawTicks;\n }\n\n /**\n *\n *\n * @returns\n * @memberof TickLayer\n */\n elemType () {\n return 'path';\n }\n\n /**\n * Generates an array of objects containing x, y, width and height of the points from the data\n * @param {Array.} data Data Array\n * @param {Object} encoding Config\n * @param {Object} axes Axes object\n * @return {Array.} Array of points\n */\n translatePoints (data, encoding, axes, config = {}) {\n let points = [];\n const {\n xAxis,\n yAxis\n } = getAxesScales(axes);\n const fieldsConfig = this.data().getFieldsConfig();\n const {\n xField,\n yField,\n x0Field,\n y0Field,\n xFieldType,\n yFieldType\n } = this.encodingFieldsInf();\n const isXDim = xFieldType === FieldType.DIMENSION;\n const isYDim = yFieldType === FieldType.DIMENSION;\n const key = isXDim ? ENCODING.X : (isYDim ? ENCODING.Y : null);\n const colorEncoding = encoding.color;\n const colorField = colorEncoding && colorEncoding.field;\n const colorFieldIndex = fieldsConfig[colorField] && fieldsConfig[colorField].index;\n const measurement = this._store.get(PROPS.MEASUREMENT);\n const colorAxis = axes.color;\n const { x: offsetX, y: offsetY } = config.offset;\n const { x: xSpan, y: ySpan } = config.span;\n for (let i = 0, len = data.length; i < len; i++) {\n let xPx;\n let x0Px;\n let y0Px;\n let yPx;\n const d = data[i];\n const row = d._data;\n if (xField) {\n xPx = xAxis.getScaleValue(d.x) + offsetX;\n x0Px = xPx + xSpan;\n }\n\n if (yField) {\n yPx = yAxis.getScaleValue(d.y) + offsetY;\n y0Px = yPx !== null ? yPx + ySpan : null;\n }\n\n if (!xField) {\n xPx = 0;\n x0Px = measurement.width;\n if (!isNaN(yPx)) {\n yPx += ySpan / 2;\n y0Px = yPx;\n }\n }\n\n if (!yField) {\n yPx = 0;\n y0Px = measurement.height;\n x0Px = xPx += xSpan / 2;\n }\n\n if (x0Field) {\n x0Px = xAxis.getScaleValue(d.x0) + xSpan;\n yPx += ySpan / 2;\n y0Px -= ySpan / 2;\n }\n\n if (y0Field) {\n y0Px = yAxis.getScaleValue(d.y0) + ySpan;\n xPx += xSpan / 2;\n x0Px -= xSpan / 2;\n }\n const style = {};\n const meta = {};\n const { color, rawColor } = getLayerColor({ datum: d, index: i },\n { colorEncoding, colorAxis, colorFieldIndex });\n\n style.stroke = color;\n meta.stateColor = {};\n meta.originalColor = rawColor;\n meta.colorTransform = {};\n if (!isNaN(xPx) && !isNaN(yPx)) {\n const point = {\n enter: {},\n update: {\n x: xPx,\n y: yPx,\n x0: x0Px,\n y0: y0Px\n },\n style,\n _data: row,\n _id: d._id,\n source: row,\n rowId: d._id,\n meta\n };\n point.className = getIndividualClassName(d, i, data, this);\n points.push(point);\n this.cachePoint(d[key], point);\n }\n }\n points = positionPoints(this, points);\n return points;\n }\n\n getMeasurementConfig (offsetX, offsetY, widthSpan, heightSpan) {\n return {\n offset: {\n x: (offsetX || 0),\n y: (offsetY || 0)\n },\n span: {\n x: widthSpan,\n y: heightSpan\n }\n };\n }\n}\n","import { isSimpleObject, mergeRecursive, getObjProp } from 'muze-utils';\n\nconst parseLayerDefinition = (sink, definition, layerDef, layerType) => {\n for (const key in definition) {\n if (Object.hasOwnProperty.call(definition, key)) {\n let strs;\n let propValue;\n const def = definition[key];\n if (isSimpleObject(def)) {\n sink[key] = {};\n parseLayerDefinition(sink[key], def, layerDef, layerType);\n } else if (typeof def === 'string' && (strs = def.split('.')) && strs[0] === layerType) {\n propValue = getObjProp(layerDef, ...strs.slice(1, strs.length));\n if (propValue !== undefined) {\n sink[key] = propValue;\n }\n } else {\n sink[key] = def;\n }\n }\n }\n};\n\nconst sanitizeEncoding = (encoding) => {\n // Create object for each encoding value if encoding value is a string\n for (const key in encoding) {\n if (typeof encoding[key] === 'string') {\n encoding[key] = {\n field: encoding[key]\n };\n }\n }\n};\n\n/**\n * Layer Factory creates layers based on the layer type. All types of layers needs to register in\n * the layer factory. For getting a layer instance, getLayer method needs to invoked with the\n * layerType and other arguments.\n */\nconst layerFactory = (() => {\n const compositeLayers = {};\n const factoryObj = {\n setLayerRegistry: (reg) => {\n factoryObj._layerRegistry = reg;\n },\n getSerializedConf: (mark, layerDef) => {\n let serializedDefs;\n const defs = compositeLayers[mark];\n const newConf = mergeRecursive({}, layerDef);\n\n // If it is a composite layer then resolve all the definitions of each unit layer\n if (defs) {\n serializedDefs = defs.map((unitLayerDef) => {\n const sDef = {};\n parseLayerDefinition(sDef, unitLayerDef, newConf, mark);\n sanitizeEncoding(sDef.encoding);\n return sDef;\n });\n } else {\n const encoding = newConf.encoding;\n // Create object for each encoding value if encoding value is a string\n sanitizeEncoding(encoding);\n serializedDefs = newConf;\n }\n\n return serializedDefs;\n },\n getLayerInstance: (layerDef) => {\n const layerRegistry = factoryObj._layerRegistry;\n layerDef = !(layerDef instanceof Array) ? [layerDef] : layerDef;\n const instances = layerDef.map((layerObj) => {\n const layerConstructor = layerRegistry[layerObj.mark];\n return layerConstructor.create();\n });\n return instances.length === 1 ? instances[0] : instances;\n },\n composeLayers: (layerType, layerDefs) => {\n compositeLayers[layerType] = layerDefs;\n },\n sanitizeLayerConfig: (layerDef) => {\n const newConf = mergeRecursive({}, layerDef);\n sanitizeEncoding(newConf.encoding);\n return newConf;\n }\n };\n return factoryObj;\n})();\n\nexport default layerFactory;\n","import { AreaLayer } from './layers/area';\nimport { ArcLayer } from './layers/arc';\nimport { LineLayer } from './layers/line';\nimport { TextLayer } from './layers/text';\nimport { PointLayer } from './layers/point';\nimport { BarLayer } from './layers/bar';\nimport { BaseLayer } from './base-layer';\nimport * as CONSTANTS from './enums/constants';\nimport { TickLayer } from './layers/tick';\n\nexport const DEFAULT_LAYERS = {\n [CONSTANTS.AREA_LAYER]: AreaLayer,\n [CONSTANTS.ARC_LAYER]: ArcLayer,\n [CONSTANTS.LINE_LAYER]: LineLayer,\n [CONSTANTS.TEXT_LAYER]: TextLayer,\n [CONSTANTS.POINT_LAYER]: PointLayer,\n [CONSTANTS.TICK_LAYER]: TickLayer,\n [CONSTANTS.BAR_LAYER]: BarLayer,\n [CONSTANTS.BASE_LAYER]: BaseLayer\n};\n","/**\n * This file exports constants that are used as enums in the\n * crosstab group implementation.\n */\n/**\n * Width of the crosstab.\n */\nexport const X = 'x';\n/**\n * Width of the crosstab.\n */\nexport const Y = 'y';\n/**\n * Width of the crosstab.\n */\nexport const WIDTH = 'width';\n\n/**\n * Height of the crosstab.\n */\nexport const HEIGHT = 'height';\n\n/**\n * Field referring to object storing measurement configuration.\n */\nexport const MEASUREMENT = 'measurement';\n\n/**\n * Field referring to object storing configuration properties.\n */\nexport const CONFIG = 'config';\n\n/**\n * Width of visual unit in crosstab.\n */\nexport const MIN_UNIT_WIDTH = 'minUnitWidth';\n\n/**\n * Height of visual unit.\n */\nexport const MIN_UNIT_HEIGHT = 'minUnitHeight';\n\n/**\n * Field to store the array of dimensions to facet by.\n */\nexport const DIMENSIONS = 'dimensions';\n\n/**\n * Field to store array of measures to use as x axis.\n */\nexport const MEASURES = 'measures';\n\n/**\n * Field to store the array of dimensions to facet by.\n */\nexport const DIMENSION = 'dimension';\n\n/**\n * Field to store array of measures to use as x axis.\n */\nexport const MEASURE = 'measure';\n\n/**\n * Flag to specify if model should be pivoted.\n */\nexport const PIVOT = 'pivot';\n\n/**\n * Flag to specify format\n */\nexport const FORMAT = 'format';\n\n/**\n * Mount point where the variable will be hosted\n */\nexport const MOUNT = 'mount';\n\n/**\n * Data update flag\n */\nexport const HAS_DATA_UPDATED = 'hasDataUpdated';\n\n/**\n * Field referring to object storing set of rows\n */\nexport const ROWS = 'rows';\n\n/**\n * Field referring to object storing set of columns\n */\nexport const COLUMNS = 'columns';\n\n/**\n * Field referring to object storing set of columns\n */\nexport const COL = 'col';\n\n/**\n * Field referring to object storing set of rows\n */\nexport const ROW = 'row';\n\n/**\n * Field referring to object storing set of columns\n */\nexport const COLUMN = 'column';\n\n/**\n * Field referring to object storing color field\n */\nexport const COLOR = 'color';\n\n/**\n * Field referring to object storing shape field\n */\nexport const SHAPE = 'shape';\n\n/**\n * Field referring to object storing size field\n */\nexport const SIZE = 'size';\n\n/**\n * Field referring to object storing detail field\n */\nexport const DETAIL = 'detail';\n\n/**\n * Field referring to object storing set of layers\n */\nexport const LAYERS = 'layers';\n\n/**\n * Field referring to object storing the transforms\n */\nexport const TRANSFORM = 'transform';\n\n/**\n * Field referring to object storing the transforms\n */\nexport const ORDINAL = 'ordinal';\n\n/**\n * Field referring to object storing the transforms\n */\nexport const LINEAR = 'linear';\n/**\n * Field referring to object storing the transforms\n */\nexport const LEFT = 'left';\n/**\n * Field referring to object storing the transforms\n */\nexport const RIGHT = 'right';\n/**\n * Field referring to object storing the transforms\n */\nexport const TOP = 'top';\n/**\n * Field referring to object storing the transforms\n */\nexport const BOTTOM = 'bottom';\n\n/**\n * Field referring to object storing the transforms\n */\nexport const RETINAL = 'retinal';\n/**\n * Field referring to object storing the transforms\n */\nexport const CELL = 'cell';\n/**\n * Field referring to object storing the transforms\n */\nexport const X_AXES = 'xAxes';\n/**\n * Field referring to object storing the transforms\n */\nexport const Y_AXES = 'yAxes';\n/**\n * Field referring to object storing the transforms\n */\nexport const ENTRY_CELLS = 'entryCell';\n/**\n * Field referring to object storing the transforms\n */\nexport const INITIALIZED = 'initialized';\n/**\n * Field referring to object storing the transforms\n */\nexport const EXIT_CELLS = 'exitCell';\n/**\n * Field referring to object storing the transforms\n */\nexport const AXIS = 'axis';\n/**\n * Field referring to object storing the transforms\n */\nexport const UNIT = 'unit';\n/**\n * Field referring to object storing the transforms\n */\nexport const UPDATED = 'updated';\n/**\n * Field referring to object storing the transforms\n */\nexport const BEFORE_UPDATE = 'beforeupdate';\n/**\n * Field referring to object storing the transforms\n */\nexport const VALUE_MATRIX = 'valueMatrix';\n/**\n * Field referring to object storing the transforms\n */\nexport const FACET_HEADERS = 'facet-headers';\n/**\n * Field referring to object storing the transforms\n */\nexport const RADIUS = 'radius';\n/**\n * Field referring to object storing the transforms\n */\nexport const ANGLE = 'angle';\n/**\n * Field referring to object storing the transforms\n */\nexport const ARC = 'arc';\n/**\n * Field referring to object storing the transforms\n */\nexport const CARTESIAN = 'cartesian';\n/**\n * Field referring to object storing the transforms\n */\nexport const POLAR = 'polar';\n/**\n * Field referring to object storing the transforms\n */\nexport const CATEGORICAL = 'categorical';\n/**\n * Field referring to object storing the transforms\n */\nexport const TEMPORAL = 'temporal';\n/**\n * Field referring to object storing the transforms\n */\nexport const BAR = 'bar';\n/**\n * Field referring to object storing the transforms\n */\nexport const LINE = 'line';\n/**\n * Field referring to object storing the transforms\n */\nexport const POINT = 'point';\n/**\n * Field referring to object storing the transforms\n */\nexport const PRIMARY = 'Primary';\n/**\n * Field referring to object storing the transforms\n */\nexport const SECONDARY = 'Secondary';\n/**\n * Field referring to object storing the transforms\n */\nexport const BOTH = 'both';\n/**\n * Field referring to object storing the transforms\n */\nexport const INTERACTION = 'interaction';\n/**\n * Field referring to object storing the transforms\n */\nexport const GRID_LINES = 'gridLines';\n/**\n * Field referring to object storing the transforms\n */\nexport const GRID_BANDS = 'gridBands';\n/**\n * Field referring to object storing the transforms\n */\nexport const HEADER = 'header';\n/**\n * Field referring to object storing the transforms\n */\nexport const FACET = 'facet';\n\n","import { ROWS, COLUMNS, COLOR, SHAPE, SIZE, DETAIL, LAYERS, TRANSFORM, CONFIG } from '../enums/constants';\n\n/**\n * @module\n * This is the local options semantics based on which setters getters are created and reactivity is initiated.\n * This local object is only valid for Artboard.\n * Artboard merges global and local object both to the model\n *\n * Format\n * PROPERTRY_NAME: {\n * value: // default value of the property,\n * meta: {\n * typeCheck: // The setter value will be checked using this. If the value is function then the setter value\n * // is passed as args.\n * typeExpected: // The output of typecheck action will be tested against this. Truthy value will set the\n * // value to the setter\n * sanitizaiton: // Need for sanitization before type is checked\n * }\n * }\n */\n\nexport default {\n [CONFIG]: {},\n [ROWS]: [],\n [COLUMNS]: [],\n [COLOR]: '',\n [SHAPE]: '',\n [SIZE]: '',\n [DETAIL]: '',\n [LAYERS]: '',\n [TRANSFORM]: []\n};\n","import { ERROR_MSG } from 'muze-utils';\n\n/**\n * Interfaces for VisualGroup. Any new VisualGroup has to implement this class.\n * @class SimpleGroup\n */\nclass SimpleGroup {\n\n /**\n * This method is used to set or get the DataModel instance.\n *\n * @param {DataModel | undefined} dataModel Instance of datamodel.\n\n * @memberof SimpleGroup\n */\n data () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * This method is used to set or get the group specific configuration\n * properties\n *\n * @param {Object | undefined} configObj The input configuration.\n * or instance of visual group.\n * @memberof SimpleGroup\n */\n config () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * This method is used to return a serialized representation of the\n * instance's properties.\n *\n * @memberof SimpleGroup\n */\n serialize () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * This method is used to get or set the measurement object which houses\n * layout properties like width and height.\n *\n * @param {Object | undefined} mObj The measurement properties.\n * @memberof SimpleGroup\n */\n measurement () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n}\n\nexport default SimpleGroup;\n","import { ERROR_MSG } from 'muze-utils';\n\n/**\n *\n *\n * @export\n * @class Variable\n */\nexport default class Variable {\n\n /**\n *\n *\n * @memberof Variable\n */\n type () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n *\n *\n * @memberof Variable\n */\n toString () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n}\n","import Variable from './variable';\n\n/**\n *\n *\n * @class ComposeVars\n * @extends {Variable}\n */\nclass ComposedVars extends Variable {\n\n /**\n *Creates an instance of ComposeVars.\n * @param {*} texts\n * @memberof ComposeVars\n */\n constructor (...texts) {\n super(...texts);\n this.vars(texts);\n }\n\n /**\n *\n *\n * @param {*} params\n * @returns\n * @memberof ComposeVars\n */\n vars (...params) {\n if (params.length) {\n this._vars = params[0];\n return this;\n }\n return this._vars;\n }\n\n /**\n *\n *\n * @param {*} dm\n * @returns\n * @memberof ComposeVars\n */\n data (...dm) {\n if (dm.length) {\n this.vars().forEach(d => d.data(dm[0]));\n return this;\n }\n return this._data;\n }\n\n /**\n *\n *\n * @returns\n * @memberof ComposeVars\n */\n getMembers () {\n const vars = this.vars();\n return vars.map(member => member.getMembers()[0]);\n }\n\n /**\n *\n *\n * @returns\n * @memberof ComposeVars\n */\n type () {\n return this.vars()[0].type();\n }\n\n /**\n *\n *\n * @returns\n * @memberof ComposeVars\n */\n toString () {\n return this.vars().map(d => d.toString()).join(',');\n }\n\n /**\n *\n *\n * @returns\n * @memberof ComposeVars\n */\n numberFormat () {\n return this.vars()[0].numberFormat();\n }\n\n /**\n *\n *\n * @returns\n * @memberof ComposeVars\n */\n format (values) {\n return this.vars()[0].format(values);\n }\n\n /**\n *\n *\n * @returns\n * @memberof ComposedVars\n */\n subtype () {\n return this.vars()[0].subtype();\n }\n\n /**\n *\n *\n * @returns\n * @memberof ComposedVars\n */\n getMinDiff () {\n return this.vars()[0].getMinDiff();\n }\n}\n\nexport default ComposedVars;\n","import { DateTimeFormatter } from 'muze-utils';\nimport Variable from './variable';\n\n/**\n *\n *\n * @export\n * @class Vars\n * @extends {Variable}\n */\nexport default class SimpleVariable extends Variable {\n\n /**\n *Creates an instance of Vars.\n * @param {*} text\n * @memberof Vars\n */\n constructor (text) {\n super();\n this.oneVar(text);\n }\n\n /**\n *\n *\n * @param {*} params\n * @returns\n * @memberof Vars\n */\n oneVar (...oneV) {\n if (oneV.length) {\n this._oneVar = oneV[0];\n return this;\n }\n return this._oneVar;\n }\n\n /**\n *\n *\n * @param {*} dm\n * @returns\n * @memberof Vars\n */\n data (...dm) {\n if (dm.length) {\n this._data = dm[0];\n return this;\n }\n return this._data;\n }\n\n /**\n *\n *\n * @returns\n * @memberof Vars\n */\n toString () {\n return this.oneVar();\n }\n\n /**\n *\n *\n * @memberof SimpleVariable\n */\n numberFormat () {\n if (this.type() === 'measure') {\n const formatter = this.data().getFieldspace().getMeasure()[this.oneVar()]._ref;\n return formatter.numberFormat();\n } return val => val;\n }\n\n /**\n *\n *\n * @memberof SimpleVariable\n */\n format (values) {\n if (values && this.subtype() === 'temporal') {\n const formatter = this.data().getFieldspace().getDimension()[this.oneVar()]._ref.schema.format;\n const dtFormat = new DateTimeFormatter(formatter);\n values = values.map(e => dtFormat.getNativeDate(e));\n }\n return values;\n }\n\n /**\n *\n *\n * @returns\n * @memberof Vars\n */\n getMembers () {\n return [this.oneVar()];\n }\n\n /**\n *\n *\n * @returns\n * @memberof Vars\n */\n type () {\n const fieldDef = this.data().getFieldsConfig()[this.oneVar()].def;\n return fieldDef.type;\n }\n\n /**\n *\n *\n * @returns\n * @memberof Vars\n */\n subtype () {\n const fieldDef = this.data().getFieldsConfig()[this.oneVar()].def;\n return fieldDef.subtype || fieldDef.type;\n }\n\n /**\n *\n *\n * @returns\n * @memberof SimpleVariable\n */\n getMinDiff () {\n const fieldSpace = this.data().getFieldspace();\n return fieldSpace.fieldsObj()[this.oneVar()].getMinDiff();\n }\n\n equals (varInst) {\n return this.oneVar() === varInst.oneVar();\n }\n}\n","import { ComposedVars, SimpleVariable } from '../variable';\nimport { DIMENSION, COLUMNS, ROWS, TEMPORAL } from '../enums/constants';\n\n/**\n * Gets the list of fields in a sorted order by measurement and dimension\n *\n * @param {Array} fieldList List of fields in the view\n * @param {Object} fieldMap Mapping of fields in the datamodel\n * @return {Array} fields sorted by measurement and dimensions\n */\nconst orderFields = (fieldArray, type) => {\n const dimensionArr = [[], []];\n const measureArr = [[], []];\n const temporalArr = [[], []];\n const categoricalArr = [[], []];\n\n fieldArray.forEach((fieldList, index) => {\n fieldList.forEach((field) => {\n if (field.type() === DIMENSION) {\n dimensionArr[index].push(field);\n field.subtype() === TEMPORAL ? temporalArr[index].push(field) : categoricalArr[index].push(field);\n } else {\n measureArr[index].push(field);\n }\n });\n });\n\n const numOfMeasures = measureArr[0].length + (measureArr[1] ? measureArr[1].length : 0);\n\n // Single array of fields\n if (!fieldArray[1]) {\n // Push measures to bottom\n measureArr[1] = type === COLUMNS ? measureArr[0] : [];\n // Push measures to left\n measureArr[0] = type !== COLUMNS ? measureArr[0] : [];\n // Bottom and right dimensions empty\n dimensionArr[1] = [];\n // Left and top filled with dimensions\n dimensionArr[0] = dimensionArr[0];\n if (numOfMeasures === 0) {\n const allDimensions = [...dimensionArr[0], ...dimensionArr[1]];\n if (type === COLUMNS) {\n dimensionArr[1] = allDimensions[allDimensions.length - 1] ? [allDimensions[allDimensions.length - 1]]\n : [];\n allDimensions.splice(-1, 1);\n } else {\n dimensionArr[1] = [];\n }\n dimensionArr[0] = [...allDimensions];\n }\n }\n\n if (dimensionArr[0].length && dimensionArr[1].length && numOfMeasures > 0) {\n dimensionArr[0] = [...dimensionArr[0], ...dimensionArr[1]];\n dimensionArr[1] = [];\n }\n return {\n fields: dimensionArr.map((list, i) => (i === 1 ?\n measureArr[i].concat(dimensionArr[i]) : dimensionArr[i].concat(measureArr[i]))),\n dimensions: [...dimensionArr[0], ...dimensionArr[1]],\n measures: [...measureArr[0], ...measureArr[1]],\n temporal: [...temporalArr[0], ...temporalArr[1]],\n categorical: [...categoricalArr[0], ...categoricalArr[1]]\n };\n};\n\n/**\n * Gets the list of normalized fields\n *\n * @param {Array} fields List of fields in the view\n * @param {Object} fieldMap Mapping of fields in the datamodel\n * @return {Array} fields normalized by measurement and dimensions\n */\nconst normalizeFields = (config, type) => {\n const fieldsArr = [];\n const fields = config[type];\n\n if (!(fields[0] instanceof Array)) {\n fieldsArr[0] = fields;\n } else {\n fieldsArr[0] = fields[0] || [];\n fieldsArr[1] = fields[1] || [];\n }\n return fieldsArr;\n};\n\n/**\n *\n *\n * @param {*} fields\n * @param {*} datamodel\n * @return\n */\nconst convertToVar = (datamodel, fields) => {\n const vars = [];\n\n fields && fields.forEach((field) => {\n if (field instanceof ComposedVars) {\n vars.push(field);\n field.data(datamodel);\n } else {\n vars.push(new SimpleVariable(field).data(datamodel));\n }\n });\n return vars;\n};\n\n/**\n *\n *\n * @param {*} rows\n * @param {*} columns\n * @param {*} datamodel\n * @return\n */\nexport const transformFields = (datamodel, config) => {\n const [rowsInfo, columnsInfo] = [ROWS, COLUMNS].map((fields) => {\n const normalizedFields = normalizeFields(config, fields);\n const norFields = [convertToVar(datamodel, normalizedFields[0])];\n\n if (normalizedFields[1]) {\n norFields[1] = convertToVar(datamodel, normalizedFields[1]);\n }\n return orderFields(norFields, fields);\n });\n const {\n fields: rows,\n dimensions: rowDimensions,\n measures: rowMeasures,\n temporal: rowTemporalFields,\n categorical: rowCategoricalFields\n } = rowsInfo;\n const {\n fields: columns,\n dimensions: columnDimensions,\n measures: columnMeasures,\n temporal: columnTemporalFields,\n categorical: columnCategoricalFields\n } = columnsInfo;\n return {\n rows,\n rowDimensions,\n rowMeasures,\n rowTemporalFields,\n rowCategoricalFields,\n columns,\n columnTemporalFields,\n columnCategoricalFields,\n columnDimensions,\n columnMeasures\n };\n};\n","import { ERROR_MSG, mergeRecursive } from 'muze-utils';\nimport { transformFields } from './field-sanitizer';\nimport { getHeaderAxisFrom } from '../group-helper/group-utils';\nimport { ROW, COLUMN } from '../enums/constants';\n\n/**\n *\n *\n * @export\n * @class VisualEncoder\n */\nexport default class VisualEncoder {\n\n /**\n *\n *\n * @memberof VisualEncoder\n */\n createAxis () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n *\n *\n * @memberof VisualEncoder\n */\n setCommonDomain () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n *\n *\n * @memberof VisualEncoder\n */\n getLayerConfig () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n fieldInfo (...info) {\n if (info.length) {\n this._fieldInfo = mergeRecursive(this._fieldInfo || {}, info[0]);\n return this;\n }\n return this._fieldInfo;\n }\n\n /**\n *\n *\n * @param {*} datamodel\n * @param {*} config\n * @return\n * @memberof VisualEncoder\n */\n fieldSanitizer (datamodel, config) {\n this.fieldInfo(transformFields(datamodel, config));\n return this.fieldInfo();\n }\n\n /**\n *\n *\n * @param {*} params\n * @return\n * @memberof VisualEncoder\n */\n axisFrom (...params) {\n if (params.length) {\n this._axisFrom = params[0];\n return this;\n }\n return this._axisFrom;\n }\n\n /**\n *\n *\n * @param {*} params\n * @return\n * @memberof VisualEncoder\n */\n headerFrom (...params) {\n if (params.length) {\n this._headerFrom = params[0];\n return this;\n }\n return this.__headerFrom;\n }\n\n /**\n *\n *\n * @param {*} axisFrom\n * @return\n * @memberof CartesianEncoder\n */\n setAxisAndHeaders (axisFrom = {}, fields) {\n const [rowHeader, rowAxis] = getHeaderAxisFrom(ROW, fields.rows, axisFrom);\n const [colHeader, colAxis] = getHeaderAxisFrom(COLUMN, fields.columns, axisFrom);\n\n this.axisFrom({\n row: rowAxis,\n column: colAxis\n });\n this.headerFrom({\n row: rowHeader,\n column: colHeader\n });\n return this;\n }\n}\n","import { ContinousAxis, BandAxis, TimeAxis, ColorAxis, SizeAxis, ShapeAxis } from '@chartshq/muze-axis';\n\nexport const scaleMaps = {\n linear: ContinousAxis,\n band: BandAxis,\n temporal: TimeAxis,\n size: SizeAxis,\n color: ColorAxis,\n shape: ShapeAxis\n};\n","import { ScaleType } from '@chartshq/muze-axis';\n\n/**\n * Map of DataModel types to associated field types.\n */\nexport const dataTypeScaleMap = {\n dimension: ScaleType.BAND,\n categorical: ScaleType.BAND,\n measure: ScaleType.LINEAR,\n temporal: ScaleType.TIME\n};\n\n","import { mergeRecursive } from 'muze-utils';\nimport { AxisOrientation } from '@chartshq/muze-axis';\nimport { scaleMaps } from '../enums/scale-maps';\nimport { getAxisType, getAxisKey } from '../group-helper';\nimport { dataTypeScaleMap } from '../data-type-scale-map';\nimport { CATEGORICAL, TEMPORAL, BAR, LINE, POINT, BOTH, Y } from '../enums/constants';\n\n/**\n *\n *\n * @param {*} axisInfo\n * @param {*} field\n * @param {*} axesCreators\n * @return\n */\nconst getAxisConfig = (axisInfo, field, axesCreators) => {\n let axisOrientation;\n const { index, axisIndex, axisType } = axisInfo;\n const { config, position } = axesCreators;\n const userAxisConfig = config.axes ? (config.axes[axisType] || {}) : {};\n const {\n LEFT,\n RIGHT,\n TOP,\n BOTTOM\n } = AxisOrientation;\n const allOrientations = axisType === Y ? [LEFT, RIGHT] : [TOP, BOTTOM];\n\n if (position === BOTH) {\n axisOrientation = allOrientations[axisIndex];\n } else {\n axisOrientation = position;\n }\n const axisConfig = {\n id: `${axisType}-${index}-${axisIndex}`,\n name: field.toString(),\n field: field.toString(),\n labels: { rotation: 0 },\n numberFormat: field.numberFormat(),\n orientation: axisOrientation,\n type: dataTypeScaleMap[field.subtype()]\n };\n userAxisConfig.tickValues = field.format(userAxisConfig.tickValues);\n userAxisConfig.domain = field.format(userAxisConfig.domain);\n\n return mergeRecursive(axisConfig, userAxisConfig);\n};\n\n/**\n *\n *\n * @param {*} axisInfo\n * @param {*} field\n * @param {*} axesCreators\n * @return\n */\nconst createSimpleAxis = (axisConfig, field, axesCreators) => {\n const { labelManager } = axesCreators;\n const Cls = scaleMaps[dataTypeScaleMap[field.subtype()]];\n const simpleAxis = new Cls(axisConfig, { labelManager });\n return simpleAxis;\n};\n\n/**\n *\n *\n * @param {*} axisType\n * @param {*} fieldInfo\n * @param {*} axesCreators\n * @param {*} groupAxes\n * @return\n */\nexport const generateAxisFromMap = (axisType, fieldInfo, axesCreators, groupAxes) => {\n let axisKey;\n const currentAxes = [];\n const { fields, index } = fieldInfo;\n const { cacheMaps } = axesCreators;\n const map = cacheMaps[`${axisType}AxesMap`];\n\n fields.forEach((field, axisIndex) => {\n axisKey = getAxisKey(axisType, index, dataTypeScaleMap[field.subtype()]);\n const axisConfig = getAxisConfig({ index, axisIndex, axisType }, field, axesCreators);\n\n if (!map.has(axisKey)) {\n const xAxis = createSimpleAxis(axisConfig, field, axesCreators);\n currentAxes.push(xAxis);\n } else {\n const axes = map.get(axisKey);\n axes[axisIndex] = axes[axisIndex] ? axes[axisIndex] : createSimpleAxis(axisConfig, field, axesCreators);\n axes[axisIndex]._rotationLock = false;\n axes[axisIndex] && axes[axisIndex].config(axisConfig).domain(axisConfig.domain || []);\n }\n });\n\n if (currentAxes.length) {\n map.set(axisKey, currentAxes);\n }\n\n for (const [key] of map.entries()) {\n if (key === axisKey) {\n groupAxes.add(axisKey);\n }\n }\n return map.get(axisKey);\n};\n\n/**\n *\n *\n * @memberof MatrixResolver\n */\nexport const mutateAxesFromMap = (cacheMaps, axes) => {\n const {\n xAxesMap,\n yAxesMap\n } = cacheMaps;\n const {\n x: xAxisSet,\n y: yAxisSet\n } = axes;\n const xAxes = [];\n const yAxes = [];\n\n xAxisSet.forEach((axisId) => {\n const xAxis = xAxesMap.get(axisId);\n xAxes.push(xAxis);\n });\n yAxisSet.forEach((axisId) => {\n const yAxis = yAxesMap.get(axisId);\n yAxes.push(yAxis);\n });\n return {\n xAxes, yAxes\n };\n};\n\n/**\n * return a default mark based on predefined set of rules of type and subtype of the fields\n *\n * @param {string} colFieldType dimension/measure - temporal/ordinal/nominal\n * @param {string} rowFieldType dimension/measure - temporal/ordinal/nominal\n * @return {Object} return mark type\n */\nexport const getDefaultMark = (colFieldType, rowFieldType) => {\n let mark;\n\n if (colFieldType === CATEGORICAL || rowFieldType === CATEGORICAL) {\n mark = BAR;\n } else if (colFieldType === TEMPORAL || rowFieldType === TEMPORAL) {\n mark = LINE;\n } else {\n mark = POINT;\n }\n\n return mark;\n};\n\n/**\n *\n *\n * @param {*} axesCreators\n * @param {*} [fieldInfo=[]]\n * @return\n */\nexport const createRetinalAxis = (axesCreators, fieldProps = {}) => {\n const { axisType, fieldsConfig } = axesCreators;\n const field = fieldProps.field;\n const axis = [];\n const Cls = scaleMaps[axisType];\n\n fieldProps.type = fieldProps.type ? fieldProps.type : getAxisType(fieldsConfig, field || null);\n axis.push(new Cls(fieldProps));\n return axis;\n};\n\n/**\n *\n *\n * @param {*} arr\n * @param {*} val\n * @return\n */\nexport const getIndex = (arr, val) => {\n let i = 0;\n let arrIndex = -1;\n\n while (arrIndex === -1 && i < arr.length) {\n if (arr[i].toString() === val.toString()) {\n arrIndex = i;\n }\n i++;\n }\n return arrIndex;\n};\n\n/**\n *\n *\n * @param {*} colFields\n * @param {*} rowFields\n * @param {*} userLayerConfig\n * @return\n * @memberof CartesianEncoder\n */\nexport const getLayerConfFromFields = (colFields, rowFields, userLayerConfig) => userLayerConfig.filter((conf) => {\n const userConf = conf instanceof Array ? conf : [conf];\n const encodingArr = [].concat(...userConf.map(d => d.encoding).filter(d => d !== undefined));\n\n if (!encodingArr.length) {\n return true;\n }\n\n const xFields = [].concat(...encodingArr.map(d => [d.x && d.x.field, d.x0 && d.x0.field]))\n .filter(d => d !== undefined && d !== null);\n const yFields = [].concat(...encodingArr.map(d => [d.y && d.y.field, d.y0 && d.y0.field]))\n .filter(d => d !== undefined && d !== null);\n\n if (!xFields.length && !yFields.length) {\n return true;\n }\n\n const colFieldExist = xFields.length ? xFields.every(d => colFields.indexOf(d) !== -1) : false;\n const rowFieldExist = yFields.length ? yFields.every(d => rowFields.indexOf(d) !== -1) : false;\n if (xFields.length && yFields.length) {\n return colFieldExist && rowFieldExist;\n }\n return colFieldExist || rowFieldExist;\n});\n","import { layerFactory } from '@chartshq/visual-layer';\nimport { mergeRecursive } from 'muze-utils';\nimport { generateAxisFromMap, getDefaultMark, getIndex, getLayerConfFromFields } from './encoder-helper';\nimport { retriveDomainFromData } from '../group-helper';\n\nimport { ROW, COLUMN, COL, LEFT, TOP, CARTESIAN, MEASURE, BOTH, X, Y } from '../enums/constants';\nimport VisualEncoder from './visual-encoder';\n\n/**\n *\n *\n * @export\n * @class CartesianEncoder\n * @extends {VisualEncoder}\n */\nexport default class CartesianEncoder extends VisualEncoder {\n\n /**\n *\n *\n * @return\n * @memberof CartesianEncoder\n */\n static type () {\n return CARTESIAN;\n }\n\n /**\n *\n *\n * @param {*} axesCreators\n * @param {*} fieldInfo\n * @return\n * @memberof CartesianEncoder\n */\n createAxis (axesCreators, fieldInfo) {\n const geomCellAxes = {};\n const {\n axes\n } = axesCreators;\n const {\n projections,\n indices\n } = fieldInfo;\n const {\n rowFields,\n columnFields\n } = projections;\n const {\n rowIndex,\n columnIndex\n } = indices;\n const axisFields = [{\n fields: rowFields,\n index: rowIndex\n }, {\n fields: columnFields,\n index: columnIndex\n }];\n const xAxes = axes.x || [];\n const yAxes = axes.y || [];\n\n [rowFields, columnFields].forEach((fields, i) => {\n const type = i === 0 ? ROW : COLUMN;\n const axis = i === 0 ? Y : X;\n\n if (fields.length > 1) {\n axesCreators.position = BOTH;\n } else {\n axesCreators.position = this.axisFrom()[type];\n }\n geomCellAxes[axis] = generateAxisFromMap(axis, axisFields[i], axesCreators, axis === X ? xAxes : yAxes);\n });\n return geomCellAxes;\n }\n\n /**\n *\n *\n * @param {*} fields\n * @return\n * @memberof CartesianEncoder\n */\n getFacetsAndProjections (fields, type) {\n let facets = [];\n let projections = [];\n let counter = 0;\n const primaryFacets = [];\n const secondaryFacets = [];\n const primaryFields = fields[0];\n const secondaryFields = fields[1];\n const primaryLen = primaryFields.length;\n const secondaryLen = secondaryFields.length;\n const axisFrom = this.axisFrom();\n\n for (let i = 0; i < primaryLen; i++) {\n let projArr = [primaryFields[i]];\n const primaryField = primaryFields[i];\n\n if (primaryField.type() === MEASURE) {\n const secondaryField = secondaryFields[counter];\n if (secondaryField && secondaryField.type() === MEASURE) {\n counter++;\n projArr = [primaryField, secondaryField];\n }\n projections.push(projArr);\n } else {\n facets.push(primaryField);\n primaryFacets.push(primaryField);\n }\n }\n if (secondaryLen > counter) {\n for (let i = counter; i < secondaryLen; i++) {\n const secondaryField = secondaryFields[i];\n const projArr = [secondaryField];\n if (secondaryField.type() === MEASURE) {\n projections.push(projArr);\n } else {\n facets.push(secondaryField);\n secondaryFacets.push(secondaryField);\n }\n }\n }\n if ((primaryFacets.length || secondaryFacets.length) && !projections.length) {\n type = type === COL ? COLUMN : type;\n if ((axisFrom[type] === LEFT || axisFrom[type] === TOP) && primaryFacets.length) {\n const axisFromIndex = primaryFacets.length - 1;\n const facet = primaryFacets[axisFromIndex];\n projections = [[facet]];\n const existIndex = getIndex(secondaryFacets, facet);\n if (existIndex > -1) {\n projections = [[facet, facet]];\n secondaryFacets.splice(existIndex, 1);\n }\n primaryFacets.splice(axisFromIndex, 1);\n } else {\n const axisFromIndex = 0;\n const facet = secondaryFacets[axisFromIndex];\n projections = [[facet]];\n const existIndex = getIndex(primaryFacets, facet);\n if (existIndex > -1) {\n projections = [[facet, facet]];\n primaryFacets.splice(existIndex, 1);\n }\n secondaryFacets.splice(axisFromIndex, 1);\n }\n }\n\n facets = [...primaryFacets, ...secondaryFacets];\n facets = facets.filter((el, index, self) => index === self.findIndex(t => (t.toString() === el.toString())));\n return {\n facets,\n projections\n };\n }\n\n /**\n *\n *\n * @param {*} datamodel\n * @param {*} config\n * @return\n * @memberof CartesianEncoder\n */\n fieldSanitizer (datamodel, config) {\n return super.fieldSanitizer(datamodel, config);\n }\n\n /**\n *\n *\n * @param {*} datamodel\n * @return\n * @memberof CartesianEncoder\n */\n getRetinalFieldsDomain (dataModels, encoding) {\n const groupedModel = dataModels.groupedModel;\n const domains = {};\n for (const key in encoding) {\n if ({}.hasOwnProperty.call(encoding, key)) {\n const encodingObj = encoding[key];\n const field = encodingObj.field;\n if (!encodingObj.domain && field) {\n const domain = retriveDomainFromData(groupedModel, field);\n domains[field] = domain;\n }\n }\n }\n return domains;\n }\n\n /**\n *\n *\n * @param {*} layerArray\n * @memberof CartesianEncoder\n */\n serializeLayerConfig (layerArray) {\n const serializedLayers = [];\n // let currentLayerIndex = 0;\n layerArray.length && layerArray.forEach((layer, i) => {\n const def = layerFactory.sanitizeLayerConfig(layer);\n def.order = i;\n serializedLayers.push(def);\n });\n return serializedLayers;\n }\n\n /**\n *\n *\n * @param {*} fields\n * @param {*} userLayerConfig\n * @return\n * @memberof CartesianEncoder\n */\n getLayerConfig (fields, userLayerConfig) {\n const layerConfig = [];\n const {\n columnFields,\n rowFields\n } = fields;\n\n // let currentLayerIndex = 0;\n columnFields.forEach((colField) => {\n const colFieldName = colField.toString();\n rowFields.forEach((rowField) => {\n let configs = [];\n const rowFieldName = rowField.toString();\n const encoding = {\n x: {\n field: colFieldName\n },\n y: {\n field: rowFieldName\n }\n };\n const rowFieldType = rowField.subtype();\n const colFieldType = colField.subtype();\n const mark = getDefaultMark(colFieldType, rowFieldType);\n\n const defConfigs = [{\n mark,\n def: {\n mark,\n encoding\n }\n }];\n\n const layerConfigs = getLayerConfFromFields(colField.getMembers(),\n rowField.getMembers(), userLayerConfig || []);\n if (layerConfigs.length) {\n configs = layerConfigs.map((layerConf) => {\n const mergedLayerConf = mergeRecursive(mergeRecursive({}, defConfigs[0].def), layerConf);\n const serializedLayerConfig = layerFactory.getSerializedConf(mergedLayerConf.mark,\n mergedLayerConf);\n return {\n mark: mergedLayerConf.mark,\n order: mergedLayerConf.order,\n def: serializedLayerConfig\n };\n });\n } else {\n configs = defConfigs;\n }\n\n layerConfig.push(...configs);\n });\n });\n return layerConfig;\n }\n}\n\n","import { layerFactory } from '@chartshq/visual-layer';\nimport { mergeRecursive } from 'muze-utils';\nimport VisualEncoder from './visual-encoder';\nimport { RADIUS, ANGLE, SIZE, MEASURE, ARC, POLAR, COLOR } from '../enums/constants';\n/**\n *\n *\n * @export\n * @class PolarEncoder\n * @extends {VisualEncoder}\n */\nexport default class PolarEncoder extends VisualEncoder {\n\n /**\n *\n *\n * @param {*} axesCreators\n * @param {*} fieldInfo\n * @return\n * @memberof PolarEncoder\n */\n createAxis (axesCreators, fieldInfo) {\n const {\n axes\n } = axesCreators;\n const geomCellAxes = axes;\n const {\n indices\n } = fieldInfo;\n const {\n rowIndex,\n columnIndex\n } = indices;\n // Dummy axes for polar, to create blank cells\n const pieAxes = geomCellAxes.pie || [];\n\n pieAxes[rowIndex] = pieAxes[rowIndex] || [];\n pieAxes[rowIndex][columnIndex] = [];\n\n geomCellAxes.pie = pieAxes;\n geomCellAxes.x = null;\n geomCellAxes.y = null;\n\n return geomCellAxes;\n }\n\n /**\n *\n *\n * @param {*} fields\n * @return\n * @memberof CartesianEncoder\n */\n getFacetsAndProjections (fields) {\n let counter = 0;\n const facets = [];\n const projections = [];\n const primaryFields = fields[0];\n const secondaryFields = fields[1];\n const primaryLen = primaryFields.length;\n const secondaryLen = secondaryFields.length;\n\n for (let i = 0; i < primaryLen; i++) {\n const primaryField = primaryFields[i];\n if (primaryField.type() === MEASURE) {\n const secondaryField = secondaryFields[counter++];\n const projArr = secondaryField ? [primaryField, secondaryField] : [primaryField];\n projections.push(projArr);\n } else {\n facets.push(primaryField);\n }\n }\n if (secondaryLen > counter) {\n for (let i = counter; i < secondaryLen; i++) {\n const secondaryField = secondaryFields[i];\n const projArr = [secondaryField];\n if (secondaryField.type() === MEASURE) {\n projections.push(projArr);\n } else {\n facets.push(secondaryField);\n }\n }\n }\n return {\n facets,\n projections\n };\n }\n\n /**\n *\n *\n * @return\n * @memberof PolarEncoder\n */\n setCommonDomain () {\n // No domain to be set\n return this;\n }\n\n /**\n *\n *\n * @return\n * @memberof PolarEncoder\n */\n static type () {\n return POLAR;\n }\n\n layers (...layers) {\n if (layers.length) {\n this._layers = layers[0];\n return this;\n }\n return this._layers;\n }\n\n /**\n *\n *\n * @param {*} datamodel\n * @param {*} config\n * @memberof PolarEncoder\n */\n fieldSanitizer (datamodel, config) {\n let sanitizedRows = [[], []];\n let sanitizedColumns = [[], []];\n const fields = super.fieldSanitizer(datamodel, config);\n const {\n layers\n } = config;\n const {\n rows,\n columns\n } = fields;\n const layer = layers[0];\n const encoding = layer.encoding;\n const radius = encoding && encoding.radius ? encoding.radius.field : null;\n const angle = encoding && encoding.angle ? encoding.angle.field : null;\n const sanitizedFields = [sanitizedRows, sanitizedColumns];\n\n [rows, columns].forEach((fieldType, typeIndex) => {\n fieldType.forEach((fieldSet, i) => fieldSet.forEach((field) => {\n if (field.toString() !== radius && field.toString() !== angle && field.type() !== MEASURE) {\n sanitizedFields[typeIndex][i].push(field);\n }\n }));\n });\n sanitizedColumns = [...new Set(sanitizedColumns)];\n sanitizedRows = [...new Set(sanitizedRows)];\n this.fieldInfo({ rows: sanitizedRows, columns: sanitizedColumns });\n return this.fieldInfo();\n }\n\n getRetinalFieldsDomain (dataModels, encoding, facetFields, groupBy) {\n let sizeField;\n let colorField;\n const fields = [];\n const layers = this.layers();\n const dataModel = dataModels.parentModel;\n const fieldsConfig = dataModel.getFieldsConfig();\n const domains = {};\n if (layers && layers[0]) {\n const layer = layers[0];\n const layerEncoding = layer.def.encoding || {};\n\n [RADIUS, ANGLE, SIZE, COLOR].forEach((encType) => {\n const field = layerEncoding[encType] ? layerEncoding[encType].field : '';\n const measureField = fieldsConfig[field] && fieldsConfig[field].def.type === MEASURE;\n if (encType === SIZE && measureField) {\n sizeField = field;\n }\n if (encType === COLOR) {\n colorField = field;\n }\n fieldsConfig[field] && !measureField && fields.push(field);\n });\n }\n\n if (sizeField) {\n domains[sizeField] = dataModel.groupBy(facetFields, {\n [sizeField]: 'sum'\n }).getFieldspace().fieldsObj()[sizeField].domain();\n }\n\n if (colorField) {\n const dm = dataModel.groupBy([...facetFields, ...fields], groupBy.measures);\n domains[colorField] = dm.getFieldspace().fieldsObj()[colorField].domain();\n }\n return domains;\n }\n /**\n *\n *\n * @param {*} fields\n * @param {*} userLayerConfig\n * @return\n * @memberof PolarEncoder\n */\n getLayerConfig (fields, userLayerConfig) {\n let layerConfig = [];\n const {\n columnFields,\n rowFields\n } = fields;\n const allFields = [...columnFields, ...rowFields];\n\n allFields.forEach(() => {\n const encoding = {};\n let config = {\n mark: ARC,\n def: {\n encoding\n }\n };\n if (userLayerConfig && userLayerConfig.length > 0) {\n config = mergeRecursive(config, userLayerConfig[0]);\n }\n layerConfig.push(config);\n });\n if (layerConfig.length === 0) {\n layerConfig = userLayerConfig;\n }\n\n this.layers(layerConfig);\n return layerConfig;\n }\n\n /**\n *\n *\n * @param {*} layerArray\n * @returns\n * @memberof PolarEncoder\n */\n serializeLayerConfig (layerArray) {\n const serializedLayers = [];\n\n layerArray.length && layerArray.forEach((layer) => {\n const def = layerFactory.getSerializedConf(layer.mark, layer);\n serializedLayers.push({\n mark: layer.mark,\n def\n });\n });\n return serializedLayers;\n }\n}\n","import { createRetinalAxis } from './encoder-helper';\nimport { COLOR, SHAPE, SIZE } from '../enums/constants';\nimport VisualEncoder from './visual-encoder';\n\n/**\n *\n *\n * @export\n * @class RetinalEncoder\n * @extends {VisualEncoder}\n */\nexport default class RetinalEncoder extends VisualEncoder {\n\n /**\n *\n *\n * @param {*} axesCreators\n * @return\n * @memberof RetinalEncoder\n */\n createAxis (axesCreators) {\n const { fieldsConfig, config } = axesCreators;\n const newAxes = {};\n\n [COLOR, SHAPE, SIZE].forEach((axisType) => {\n newAxes[`${axisType}`] = createRetinalAxis({ axisType, fieldsConfig }, config[axisType]);\n });\n return newAxes;\n }\n\n /**\n *\n *\n * @static\n * @return\n * @memberof RetinalEncoder\n */\n static type () {\n return 'retinal';\n }\n\n /**\n *\n *\n * @param {*} fields\n * @param {*} userLayerConfig\n * @return\n * @memberof RetinalEncoder\n */\n getLayerConfig (encodingConfigs, userLayerConfig) {\n const layerConfig = [];\n userLayerConfig.forEach((e) => {\n const config = e;\n [COLOR, SHAPE, SIZE].forEach((axis) => {\n if (encodingConfigs[axis] && encodingConfigs[axis].field) {\n const def = config.def;\n if (config.def instanceof Array) {\n def.forEach((conf) => {\n conf.encoding = conf.encoding || {};\n !conf.encoding[axis] && (conf.encoding[axis] = {});\n conf.encoding[axis].field = encodingConfigs[axis].field;\n });\n } else {\n def.encoding = def.encoding || {};\n !def.encoding[axis] && (def.encoding[axis] = {});\n def.encoding[axis].field = encodingConfigs[axis].field;\n }\n }\n });\n layerConfig.push(config);\n });\n return layerConfig;\n }\n\n /**\n *\n *\n * @param {*} context\n * @return\n * @memberof RetinalEncoder\n */\n setCommonDomain (context) {\n const { domains, axes, encoding } = context;\n\n Object.entries(encoding).forEach((enc) => {\n if (enc[1] && enc[1].field) {\n const encType = enc[0];\n const field = enc[1].field;\n\n if (field) {\n axes[encType].forEach((axis) => {\n const domain = domains[field];\n !enc[1].domain && axis.updateDomain(domain);\n });\n }\n }\n });\n return axes;\n }\n}\n","import { Store, dataSelect, FieldType } from 'muze-utils';\nimport { DATA_UPDATE_COUNTER } from '../enums/defaults';\nimport { Variable } from '../variable';\nimport { PolarEncoder, CartesianEncoder } from '../encoder';\nimport {\n DIMENSION,\n MEASURE,\n ORDINAL,\n LINEAR,\n ROW,\n COLUMN,\n COL,\n LEFT,\n RIGHT,\n TOP,\n BOTTOM,\n COLOR,\n SIZE,\n TEMPORAL,\n SHAPE,\n INTERACTION,\n GRID_LINES,\n GRID_BANDS,\n HEADER,\n FACET,\n X,\n Y,\n POLAR\n} from '../enums/constants';\n\n/**\n * Creates an instance of a store which contains the arguments to make the class reactive\n *\n * @return {Object} instance of store\n * @memberof VisualGroup\n */\nexport const initStore = () => new Store({\n [DATA_UPDATE_COUNTER]: DATA_UPDATE_COUNTER\n});\n\n/**\n *\n *\n * @param {*} arr\n */\nexport const isDistributionEqual = arr => [...arr[0], ...arr[1]].reduce((isEqual, row) => {\n const rowType = row.type();\n\n if (rowType === MEASURE || rowType === TEMPORAL) {\n isEqual = true;\n }\n return isEqual;\n}, false);\n\n/**\n *\n *\n */\nexport const initializeCacheMaps = () => ({\n cellMap: new Map(),\n xAxesMap: new Map(),\n yAxesMap: new Map(),\n entryCellMap: new Map(),\n exitCellMap: new Map()\n});\n\n/**\n *\n *\n * @param {*} axisName\n * @param {*} id\n */\nexport const getAxisKey = (axisName, id, scaleType) => `${axisName}-axis-${id}-${scaleType}`;\n\n/**\n *\n *\n * @param {*} rowId\n * @param {*} columnId\n */\nexport const getCellKey = (rowId, columnId) => `cell-${rowId}-${columnId}`;\n\n/**\n *\n *\n * @param {*} config\n * @return\n */\nexport const extractUnitConfig = (config) => {\n const unitConfig = {};\n const attrNames = [INTERACTION, GRID_LINES, GRID_BANDS];\n\n attrNames.forEach((attr) => {\n if (config[attr] !== undefined) {\n unitConfig[attr] = config[attr];\n }\n });\n return unitConfig;\n};\n\n/**\n *\n *\n * @param {*} headers\n * @param {*} index\n * @param {*} rowLength\n * @return\n * @memberof MatrixResolver\n */\nexport const getHeaderText = (headers, index, rowLength) => {\n let header = '';\n\n if (index === rowLength - 1 && headers.length > rowLength) {\n for (let i = index; i < headers.length - 1; i++) {\n header += `${headers[i].toString()} / `;\n }\n header += headers[headers.length - 1].toString();\n return header;\n } else if (headers[index]) {\n return headers[index].toString();\n }\n return '';\n};\n\n/**\n *\n *\n * @param {*} fields\n * @param {*} fieldHeaders\n * @param {*} TextCell\n * @param {*} labelManager\n * @return\n */\nexport const headerCreator = (fields, fieldHeaders, TextCell, labelManager) => {\n const headers = fields.length > 0 ? fields[0].map((cell, i) => new TextCell({ type: HEADER }, { labelManager })\n .source(getHeaderText(fieldHeaders, i, fields[0].length))\n .config({ show: cell.config().show })) : [];\n return headers;\n};\n\n/**\n *\n *\n * @param {*} variable\n * @param {*} allFields\n * @return\n */\nexport const findInGroup = (variable, allFields) => {\n let channel = null;\n\n [COLOR, SIZE, SHAPE].forEach((e) => {\n if (this.store.get(e) && variable === this.store.get(e)[0]) {\n channel = e;\n }\n });\n\n if (channel) {\n return { channel };\n }\n [ROW, COL].forEach((facetType) => {\n allFields[`${facetType}Facets`].forEach((e) => {\n if (e.toString() === variable) {\n channel = { channel: FACET, type: facetType === COL ? COLUMN : ROW };\n }\n });\n });\n\n if (channel) {\n return channel;\n }\n\n [ROW, COL].forEach((projType) => {\n allFields[`${projType}Projections`].forEach((e) => {\n e.forEach((m) => {\n if (m.toString() === variable) {\n channel = projType === COL ? X : Y;\n }\n });\n });\n });\n\n if (channel) {\n return { channel };\n }\n return null;\n};\n\n/**\n *\n *\n * @param {*} datamodel\n * @param {*} field\n */\nexport const getAxisType = (fieldsConfig, field) => {\n let fieldType = ORDINAL;\n\n if (field && fieldsConfig[field].def.type !== DIMENSION) {\n fieldType = LINEAR;\n }\n return fieldType;\n};\n\n/**\n *\n *\n * @param {*} datamodel\n * @param {*} fieldName\n * @return\n */\nexport const retriveDomainFromData = (datamodel, fieldName) => {\n const field = datamodel.getFieldspace().fields.find(d => d._ref.name === fieldName.toString());\n return field.domain();\n};\n\n/**\n *\n *\n * @memberof MatrixResolver\n */\nexport const mutateAxesFromMap = (cacheMaps, axes) => {\n let xAxes = null;\n let yAxes = null;\n const {\n xAxesMap,\n yAxesMap\n } = cacheMaps;\n const {\n x: xAxisSet,\n y: yAxisSet\n } = axes;\n\n xAxisSet && xAxisSet.forEach((axisId) => {\n const xAxis = xAxesMap.get(axisId);\n xAxes = xAxes || [];\n xAxes.push(xAxis);\n });\n\n yAxisSet && yAxisSet.forEach((axisId) => {\n const yAxis = yAxesMap.get(axisId);\n yAxes = yAxes || [];\n yAxes.push(yAxis);\n });\n\n return {\n xAxes, yAxes\n };\n};\n\n/**\n *\n *\n * @param {*} layers\n * @return\n */\nexport const getEncoder = (layers) => {\n let encoder = new CartesianEncoder();\n\n if (layers) {\n // Figuring out the kind of layers the group will have\n encoder = layers.every(e => e.mark === 'arc') ? new PolarEncoder() : encoder;\n }\n return encoder;\n};\n\n/**\n *\n *\n * @param {*} type\n * @param {*} fields\n * @param {*} userAxisFromConfig\n * @return\n */\nexport const getHeaderAxisFrom = (type, fields, userAxisFromConfig) => {\n let axisFrom = userAxisFromConfig[type];\n let headerFrom = '';\n const options = type === ROW ? [LEFT, RIGHT] : [BOTTOM, TOP];\n const [firstField, secondField] = fields;\n const firstFieldType = i => (firstField.length ? firstField[i].type() : null);\n const secondFieldType = i => (secondField.length ? secondField[i].type() : null);\n\n if (firstFieldType(firstField.length - 1) === DIMENSION && secondFieldType(0) === DIMENSION) {\n headerFrom = axisFrom ? options[1 - options.indexOf(axisFrom)] : options[1];\n\n if (type === COLUMN && (firstField[firstField.length - 1].toString() === secondField[0].toString())) {\n axisFrom = TOP;\n } else {\n axisFrom = axisFrom || options[0];\n }\n } else if (secondFieldType(secondField.length - 1) === DIMENSION) {\n headerFrom = type === ROW ? RIGHT : BOTTOM;\n axisFrom = type === ROW ? RIGHT : BOTTOM;\n } else {\n headerFrom = type === ROW ? LEFT : TOP;\n axisFrom = type === ROW ? LEFT : TOP;\n }\n if (firstFieldType(firstField.length - 1) === MEASURE && secondFieldType(0) === MEASURE) {\n axisFrom = type === ROW ? LEFT : TOP;\n } else if (secondFieldType(0) === MEASURE) {\n axisFrom = type === ROW ? RIGHT : BOTTOM;\n } else if (firstFieldType(firstField.length - 1) === MEASURE) {\n axisFrom = type === ROW ? LEFT : TOP;\n }\n return [headerFrom, axisFrom];\n};\n\n/**\n *\n *\n * @param {*} type\n * @param {*} fields\n * @param {*} layers\n * @return\n * @memberof MatrixResolver\n */\nexport const setFacetsAndProjections = (context, fieldInfo, encoder) => {\n const {\n fields,\n type\n } = fieldInfo;\n const { facets, projections } = encoder.simpleEncoder.getFacetsAndProjections(fields, type);\n\n context.facets({ [`${type}Facets`]: facets });\n context.projections({ [`${type}Projections`]: projections });\n\n return { facets, projections, fields };\n};\n\n/**\n * Creates a selection set from a data set with corresponding attributes\n *\n * @export\n * @param {Selection} sel contains previous selection\n * @param {Object} appendObj Object to be appended\n * @param {Array} data Data based on which the selection is entered/updated/removed\n * @param {Object} [attrs={}] Attributes to be set on the data\n * @return {Selection} Merged selection\n */\nexport const createSelection = (sel, appendObj, data, idFn) => {\n let selection = sel || dataSelect([]);\n\n selection = selection.data(data, idFn);\n\n const enter = selection.enter().append(appendObj);\n const mergedSelection = enter.merge(selection);\n\n selection.exit() && selection.exit().remove();\n return mergedSelection;\n};\n\nconst getRowBorders = (left, right) => {\n const borders = {};\n borders.top = false;\n borders.bottom = false;\n if (left.length > 1 || right.length > 1) {\n borders.top = true;\n borders.bottom = true;\n }\n return borders;\n};\n\nconst getColumnsBorders = (top, bottom) => {\n const borders = {};\n borders.left = false;\n borders.right = false;\n if (top.length || bottom.length) {\n if ((top[0] && top[0].length > 1) || (bottom[0] && bottom[0].length > 1)) {\n borders.left = true;\n borders.right = true;\n }\n }\n return borders;\n};\n\nconst getValueBorders = (rows, columns) => {\n const borders = { top: true, left: true, bottom: true, right: true };\n const borderTypeRow = [LEFT, RIGHT];\n const borderTypeCol = [TOP, BOTTOM];\n rows.forEach((e, i) => {\n if (e[0] && e[0].length) {\n borders[borderTypeRow[i]] = true;\n } else {\n borders[borderTypeRow[i]] = false;\n }\n });\n columns.forEach((e, i) => {\n if (e.length) {\n borders[borderTypeCol[i]] = true;\n } else {\n borders[borderTypeCol[i]] = false;\n }\n });\n\n return borders;\n};\n\nexport const getBorders = (matrices, encoder) => {\n let showRowBorders = { top: false, bottom: false };\n let showColBorders = { left: false, right: false };\n let showValueBorders = { top: false, bottom: false, left: false, right: false };\n const {\n rows,\n columns,\n values: valueMatrix\n } = matrices;\n const [leftRows, rightRows] = rows;\n const [topColumns, bottomColumns] = columns;\n const {\n rowDimensions,\n columnDimensions,\n rowTemporalFields,\n columnTemporalFields,\n columnMeasures,\n rowMeasures\n } = encoder.fieldInfo();\n const allDimensionLength = rowDimensions.length + columnDimensions.length;\n const allMeasuresLength = rowMeasures.length + columnMeasures.length;\n const allTemporalFieldsLength = rowTemporalFields.length + columnTemporalFields.length;\n\n if (encoder.constructor.type() === POLAR) {\n if (!allDimensionLength) {\n return { showRowBorders, showColBorders, showValueBorders };\n }\n } else if (!allMeasuresLength && !allTemporalFieldsLength && allDimensionLength <= 2) {\n return { showRowBorders, showColBorders, showValueBorders };\n }\n\n showRowBorders = getRowBorders(leftRows, rightRows);\n showColBorders = getColumnsBorders(topColumns, bottomColumns);\n showValueBorders = getValueBorders([leftRows, rightRows], [topColumns, bottomColumns]);\n\n if (valueMatrix.length > 1) {\n showValueBorders.top = true;\n showValueBorders.bottom = true;\n }\n if (valueMatrix.length && valueMatrix[0].length > 1) {\n showValueBorders.left = true;\n showValueBorders.right = true;\n }\n return { showRowBorders, showColBorders, showValueBorders };\n};\n\nexport const getFieldsFromSuppliedLayers = (suppliedLayerConfig, fieldsConfig) => {\n let fields = [];\n const encodingArr = suppliedLayerConfig.map(conf => (conf.encoding || {}));\n fields = [...fields, [].concat(...encodingArr.map(enc => Object.values(enc).map(d => d.field)))];\n fields = fields.filter(field => fieldsConfig[field] && fieldsConfig[field].def.type === FieldType.DIMENSION);\n return fields;\n};\n\nexport const extractFields = (facetsAndProjections, layerFields) => {\n const fields = Object.values(facetsAndProjections).map((arr) => {\n const flattenArray = [].concat(...arr);\n return [].concat(...flattenArray.map((field) => {\n if (field instanceof Variable) {\n return field.getMembers();\n }\n return field;\n }));\n });\n return [].concat(...fields, ...layerFields);\n};\n","/**\n * This file exports variables that are used as defaults for the crosstab group.\n */\nexport const DATA_UPDATE_COUNTER = 0;\n\nexport const DEFAULT_LAYER_TYPE = 'cartesian';\n\n","import Selection from './selection';\n/**\n * This function applies a selection operation on a data array.\n *\n * @export\n * @param {Array} [data=[]] The data array to be observed.\n * @return {Selection} Instance of a selection.\n */\nexport default function dataSelect (data = []) {\n return new Selection(data);\n}\n\n","import { BEHAVIOURS, ACTIONS } from '@chartshq/muze-firebolt';\n\nexport const actionBehaviourMap = {\n [ACTIONS.DRAG]: {\n behaviours: [BEHAVIOURS.BRUSH],\n touch: false\n },\n [ACTIONS.HOVER]: {\n behaviours: [BEHAVIOURS.HIGHLIGHT]\n },\n [ACTIONS.LONGTOUCH]: {\n behaviours: [BEHAVIOURS.SELECT],\n touch: true\n },\n [ACTIONS.TOUCHDRAG]: {\n behaviours: [BEHAVIOURS.BRUSH],\n touch: true\n },\n [ACTIONS.CLICK]: {\n behaviours: [BEHAVIOURS.SELECT],\n touch: false\n }\n};\n\n","export const CONFIG = 'config';\nexport const DATA = 'data';\nexport const AXES = 'axes';\nexport const LAYERDEFS = 'layerDef';\nexport const WIDTH = 'width';\nexport const HEIGHT = 'height';\nexport const MOUNT = 'mount';\nexport const primaryXAxisUpdated = 'primaryXAxisUpdated';\nexport const primaryYAxisUpdated = 'primaryYAxisUpdated';\nexport const secondaryXAxisUpdated = 'secondaryXAxisUpdated';\nexport const secondaryYAxisUpdated = 'secondaryYAxisUpdated';\nexport const TRANSFORM = 'transform';\nexport const DATADOMAIN = 'dataDomain';\nexport const LAYERSCREATED = 'layersCreated';\nexport const FIELDS = 'fields';\nexport const TIMEDIFFS = 'timeDiffs';\nexport const LAYERAXISINDEX = 'layerAxisIndex';\n\n","import { FieldType, getDependencyOrder, getObjProp,\n defaultValue, objectIterator, unionDomain, makeElement,\n DimensionSubtype, getClosestIndexOf, toArray } from 'muze-utils';\nimport { layerFactory } from '@chartshq/visual-layer';\nimport { TIMEDIFFS } from '../enums/reactive-props';\n\nexport const getDimensionMeasureMap = (layers, fieldsConfig) => {\n const retinalEncodingsAndMeasures = {};\n\n layers.forEach((layer) => {\n const {\n colorField,\n sizeField,\n shapeField,\n xField,\n yField\n } = layer.encodingFieldsInf();\n const measures = [xField, yField].filter(field => fieldsConfig[field] && fieldsConfig[field].def.type ===\n FieldType.MEASURE);\n [colorField, sizeField, shapeField].forEach((field) => {\n if (fieldsConfig[field] && fieldsConfig[field].def.type === FieldType.DIMENSION) {\n !retinalEncodingsAndMeasures[field] && (retinalEncodingsAndMeasures[field] = []);\n retinalEncodingsAndMeasures[field].push(...measures);\n }\n });\n });\n\n for (const key in retinalEncodingsAndMeasures) {\n if ({}.hasOwnProperty.call(retinalEncodingsAndMeasures, key)) {\n retinalEncodingsAndMeasures[key] = [...new Set(retinalEncodingsAndMeasures[key])];\n }\n }\n return retinalEncodingsAndMeasures;\n};\n\nexport const transformDataModels = (transform, dataModel) => {\n const dataModels = {};\n for (const key in transform) {\n if ({}.hasOwnProperty.call(transform, key)) {\n const transformVal = transform[key];\n dataModels[key] = transformVal(dataModel);\n }\n }\n\n return dataModels;\n};\n\nexport const getLayerFromDef = (context, definition, existingLayer) => {\n let instances = existingLayer;\n const dependencies = context._layerDeps;\n if (!existingLayer) {\n instances = layerFactory.getLayerInstance(definition);\n }\n const layers = {};\n const instanceArr = toArray(instances);\n definition = toArray(definition);\n definition.reduce((acc, def, idx) => {\n const instance = instanceArr[idx];\n instance.config(def);\n instance.dependencies(dependencies);\n if (def.name) {\n instance.alias(def.name);\n }\n layers[instance.alias()] = instance;\n return acc;\n }, {});\n return layers;\n};\n\nexport const resolveEncodingTransform = (layerInst, store) => {\n const encodingTransform = layerInst.config().encodingTransform || {};\n const resolvable = encodingTransform.resolvable;\n let depArr = [];\n if (resolvable) {\n const resolved = resolvable(store);\n depArr = resolved.depArr;\n layerInst.encodingTransform(resolved.fn);\n } else if (encodingTransform instanceof Function) {\n layerInst.encodingTransform(encodingTransform);\n }\n return depArr;\n};\n\nexport const createLayers = (context, layerDefinitions) => {\n const layersMap = context._layersMap;\n const markSet = {};\n const store = {\n layers: {},\n components: {\n unit: context\n }\n };\n let layerIndex = 0;\n let layers = layerDefinitions.sort((a, b) => a.order - b.order).reduce((layersArr, layerDef, i) => {\n const mark = layerDef.mark;\n const definition = layerDef.def;\n const markId = `${mark}-${i}`;\n const defArr = toArray(definition);\n defArr.forEach((def) => {\n def.order = layerDef.order + layerIndex;\n });\n layerIndex += defArr.length;\n const instances = getLayerFromDef(context, definition, layersMap[markId]);\n store.layers = Object.assign(store.layers, instances);\n const instanceValues = Object.values(instances);\n layersArr = layersArr.concat(...instanceValues);\n layersMap[markId] = instanceValues;\n markSet[markId] = markId;\n return layersArr;\n }, []);\n store.unit = context;\n const layerdeps = {};\n layers.forEach((layer) => {\n const depArr = resolveEncodingTransform(layer, store);\n layerdeps[layer.alias()] = depArr;\n });\n\n const order = getDependencyOrder(layerdeps);\n layers = order.map(name => store.layers[name]);\n for (const key in layersMap) {\n if (!(key in markSet)) {\n layersMap[key].forEach(layer => layer.remove());\n delete layersMap[key];\n }\n }\n return layers;\n};\n\nexport const attachDataToLayers = (layers, dm, transformedDataModels) => {\n layers.forEach((layer) => {\n const dataSource = layer.config().source;\n const dataModel = dataSource instanceof Function ? dataSource(dm) : (transformedDataModels[dataSource] || dm);\n layer.data(dataModel);\n });\n};\n\nexport const attachAxisToLayers = (axes, layers, layerAxisIndex) => {\n layers.forEach((layer) => {\n const layerId = layer.id();\n const axesObj = {};\n\n objectIterator(axes, (key) => {\n const axisInf = layerAxisIndex[layerId];\n if (axisInf) {\n axes[key] && (axesObj[key] = axes[key][axisInf[key] || 0]);\n }\n });\n Object.keys(axesObj).length && layer.axes(axesObj);\n });\n};\n\nexport const getLayerAxisIndex = (layers, fields) => {\n const layerAxisIndex = {};\n layers.forEach((layer) => {\n const { axis, encoding } = layer.config();\n const id = layer.id();\n ['x', 'y'].forEach((type) => {\n let index;\n const field = defaultValue(getObjProp(axis, type), encoding[type] && encoding[type].field);\n if (fields[type]) {\n index = fields[type].findIndex(fieldInst => fieldInst.getMembers().indexOf(field) !== -1);\n } else {\n index = 0;\n }\n !layerAxisIndex[id] && (layerAxisIndex[id] = {});\n layerAxisIndex[id][type] = index;\n });\n });\n return layerAxisIndex;\n};\n\nexport const unionDomainFromLayers = (layers, axisFields, layerAxisIndex, fieldsConfig) => {\n let domains = {};\n layers = layers.filter(layer => layer.getDataDomain() !== null);\n layers.forEach((layer) => {\n let domainValues = {};\n const config = layer.config();\n const encoding = config.encoding;\n const layerDomain = layer.getDataDomain();\n const layerId = layer.id();\n\n if (layerDomain !== null && config.calculateDomain !== false) {\n domainValues = Object.entries(layerDomain);\n if (layerDomain.x || layerDomain.y) {\n domains = domainValues.reduce((fieldDomain, domain) => {\n const encodingType = domain[0];\n const field = encoding[encodingType].field;\n const axisIndex = layerAxisIndex[layerId][encodingType];\n const fieldStr = `${axisFields[encodingType][axisIndex]}`;\n fieldDomain[fieldStr] = fieldDomain[fieldStr] || [];\n fieldDomain[fieldStr] = unionDomain(([fieldDomain[fieldStr], domain[1]]),\n fieldsConfig[field].def.subtype ? fieldsConfig[field].def.subtype :\n fieldsConfig[field].def.type);\n\n return fieldDomain;\n }, domains);\n } else { domains = domainValues; }\n }\n });\n return domains;\n};\n\nexport const renderLayers = (context, container, layers, measurement) => {\n context._lifeCycleManager.notify({ client: layers, action: 'beforedraw', formalName: 'layer' });\n const config = context.config();\n const classPrefix = config.classPrefix;\n const orderedLayers = context.layers().sort((a, b) => a.config().order - b.config().order);\n const layerParentGroup = makeElement(container, 'g', [1], `${classPrefix}-layer-group`);\n makeElement(layerParentGroup, 'g', orderedLayers, null, {\n update: (group, layer) => {\n layer.measurement(measurement);\n layer.dataProps({\n timeDiffs: context.store().get(TIMEDIFFS)\n });\n layer.config().render !== false && layer.mount(group.node());\n }\n });\n return this;\n};\n\nexport const getNearestDimensionalValue = (context, position) => {\n const fields = context.fields();\n if (!fields.x.length || !fields.y.length) {\n return null;\n }\n const data = context.data();\n const axes = context.axes();\n const fieldsConfig = data.getFieldsConfig();\n const xField = getObjProp(fields, 'x', 0).getMembers()[0];\n const yField = getObjProp(fields, 'y', 0).getMembers()[0];\n const xFieldType = fieldsConfig[xField] && (fieldsConfig[xField].def.subtype ? fieldsConfig[xField].def.subtype :\n fieldsConfig[xField].def.type);\n const yFieldType = fieldsConfig[yField] && (fieldsConfig[yField].def.subtype ? fieldsConfig[yField].def.subtype :\n fieldsConfig[yField].def.type);\n\n const entryVal = [['x', xFieldType, xField], ['y', yFieldType, yField]].find(entry =>\n entry[1] === DimensionSubtype.CATEGORICAL || entry[1] === DimensionSubtype.TEMPORAL);\n\n if (!entryVal || (xFieldType !== FieldType.MEASURE && yFieldType !== FieldType.MEASURE)) {\n return null;\n }\n const field = entryVal[2];\n const index = fieldsConfig[field].index;\n let key = axes[entryVal[0]][0].invert(position[entryVal[0]]);\n if (entryVal[1] === DimensionSubtype.TEMPORAL) {\n const filterData = [...new Set(data.getData().data.map(d => d[index]))];\n key = filterData[getClosestIndexOf(filterData, key)];\n }\n\n return key !== undefined ? [[field], [key]] : null;\n};\n\nexport const getLayersBy = (layers, searchBy, value) => layers.filter((layer) => {\n const name = searchBy === 'type' ? layer.constructor.formalName() : layer.alias();\n return name === value;\n});\n\nexport const removeLayersBy = (layers, searchBy, value) => {\n layers.filter((inst) => {\n const name = searchBy === 'type' ? inst.config().mark : inst.alias();\n if (name === value) {\n inst.remove();\n return false;\n }\n return true;\n });\n};\n\nexport const createSideEffectGroup = (container, className) => makeElement(container, 'g', [1], className).node();\n\nexport const getAdjustedDomain = (max, min) => {\n const y1ratio = max[0] / (max[0] - min[0]);\n const y2ratio = max[1] / (max[1] - min[1]);\n\n // adjust min/max values for positive negative values zero line etc\n let allSameSign = false;\n\n // if all numbers are positive set floor to zero\n if (min[0] > 0 && min[1] > 0 && min[1] > 0 && max[1] > 0) {\n allSameSign = true;\n min[0] = 0;\n min[1] = 0;\n }\n\n // if all numbers are negative set ceiling to zero\n if (min[0] < 0 && min[1] < 0 && min[1] < 0 && max[1] < 0) {\n allSameSign = true;\n max[0] = 0;\n max[1] = 0;\n }\n\n // align zero line if necessary\n if (!allSameSign && y1ratio !== y2ratio) {\n if (y1ratio < y2ratio) {\n // adjust min[1]\n min[1] = min[0] / max[0] * max[1];\n } else {\n // adjust min[0]\n min[0] = min[1] / max[1] * max[0];\n }\n }\n return {\n max,\n min\n };\n};\n","import { getObjProp, defaultValue, makeElement, DimensionSubtype, DataModel } from 'muze-utils';\nimport { ScaleType } from '@chartshq/muze-axis';\nimport { layerFactory } from '@chartshq/visual-layer';\nimport { GRIDLINEPARENTGROUPCLASS, GRIDBANDPARENTGROUPCLASS } from '../enums/constants';\nimport { TIMEDIFFS } from '../enums/reactive-props';\n\nconst LINEAR = ScaleType.LINEAR;\n\nconst getLayerDefinition = (context, axes, type, orientation) => {\n let encoding;\n const config = context.config();\n const { classPrefix, gridLines, gridBands } = config;\n const gridLineColor = gridLines.color;\n const zeroLineColor = gridLines.zeroLineColor;\n const defClassName = type === 'band' ? gridBands.defClassName : gridLines.defClassName;\n const gridBandColor = gridBands[orientation].color;\n const axis = axes[orientation][0];\n const isLinearScale = axis.constructor.type() === LINEAR;\n\n if (type === 'band' && isLinearScale) {\n encoding = {\n [orientation]: `${orientation}value`,\n [`${orientation}0`]: `${orientation}value0`\n };\n } else {\n encoding = {\n [orientation]: isLinearScale ? `${orientation}value` : `${orientation}dim`\n };\n }\n encoding.color = {\n value: (data, i) => {\n const isNegativeDomain = isLinearScale && axis.domain()[0] < 0;\n if (type === 'band') {\n return gridBandColor[i % 2];\n }\n return isNegativeDomain && data[orientation] === 0 ? zeroLineColor : gridLineColor;\n }\n };\n\n return {\n definition: {\n defClassName: `${defClassName}-${orientation}`,\n className: config.className,\n individualClassName: (data, i) => {\n let className;\n const isNegativeDomain = isLinearScale && axis.domain()[0] < 0;\n if (isNegativeDomain && data.y === 0 && type !== 'band') {\n className = `${classPrefix}-axis-zero-line`;\n } else {\n className = `${classPrefix}-grid-${type}-${orientation}-${i % 2}`;\n }\n return className;\n },\n [`pad${orientation.toUpperCase()}`]: type === 'band' ? 0 : undefined,\n encoding\n },\n axes: {\n [orientation]: axis\n },\n interactive: false\n };\n};\n\nconst getDefaultVisibilty = (show, axis) => {\n if (axis.constructor.type() === LINEAR) {\n return show;\n }\n return false;\n};\n\nexport const getGridLayerDefinitions = (context, config, type) => ['x', 'y'].map((axisType) => {\n const show = defaultValue(config[axisType] && config[axisType].show,\n getDefaultVisibilty(config.show, context.axes()[axisType][0]));\n\n return show ? getLayerDefinition(context, context.axes(), type, axisType) : undefined;\n}).filter(d => d !== undefined);\n\nexport const getGridLayerData = (axes, fields, fieldsConfig) => {\n const gridData = {};\n ['x', 'y'].forEach((type) => {\n let ticks = axes[type][0].getTickValues();\n const subtype = getObjProp(fieldsConfig, getObjProp(fields, type, 0).getMembers()[0], 'def', 'subtype');\n const jsonData = [];\n const schema = [\n {\n name: 'yvalue',\n type: 'measure'\n }, {\n name: 'xvalue',\n type: 'measure'\n },\n {\n name: 'yvalue0',\n type: 'measure'\n }, {\n name: 'xvalue0',\n type: 'measure'\n }, {\n name: 'xdim',\n type: 'dimension',\n subtype\n }, {\n name: 'ydim',\n type: 'dimension',\n subtype\n }\n ];\n const len = Math.max(ticks.length);\n ticks = subtype === DimensionSubtype.TEMPORAL ? ticks.map(d => d.getTime()) : ticks;\n for (let i = 0; i < len; i += 1) {\n jsonData.push({\n [`${type}value`]: ticks[i],\n [`${type}value0`]: ticks[i + 1],\n [`${type}dim`]: ticks[i],\n [`${type}dim`]: ticks[i]\n });\n }\n gridData[type] = new DataModel(jsonData, schema);\n });\n return gridData;\n};\n\nexport const createGridLineLayer = (context, data) => {\n const vuConf = context.config();\n const dependencies = context._layerDeps;\n const measurement = {\n width: context.width(),\n height: context.height()\n };\n\n ['band', 'line'].forEach((type) => {\n let mark;\n let config;\n let instances;\n if (type === 'band') {\n mark = 'bar';\n config = vuConf.gridBands;\n instances = context._gridbands;\n } else {\n mark = 'tick';\n config = vuConf.gridLines;\n instances = context._gridlines;\n }\n const definitions = getGridLayerDefinitions(context, config, type);\n\n definitions.forEach((atomicDef, i) => {\n let layer;\n const definition = atomicDef.definition;\n const axesObj = atomicDef.axes;\n const sConf = layerFactory.getSerializedConf(mark, definition);\n sConf.mark = mark;\n if (!instances[i]) {\n layer = layerFactory.getLayerInstance(sConf);\n layer.dependencies(dependencies);\n } else {\n layer = instances[i];\n }\n\n layer.config(sConf)\n .measurement(measurement)\n .data(axesObj.y ? data.y : data.x)\n .dataProps({\n timeDiffs: context.store().get(TIMEDIFFS)\n })\n .axes(axesObj);\n instances[i] = layer;\n });\n });\n};\n\nexport const renderGridLineLayers = (context, container) => {\n const axes = context.axes();\n const config = context.config();\n const classPrefix = config.classPrefix;\n\n if (axes && ((axes.x && axes.x.length) || (axes.y && axes.y.length))) {\n const gridBandData = getGridLayerData(axes, context.fields(), context.data().getFieldsConfig());\n createGridLineLayer(context, gridBandData);\n [[context._gridlines, `${classPrefix}-${GRIDLINEPARENTGROUPCLASS}`],\n [context._gridbands, `${classPrefix}-${GRIDBANDPARENTGROUPCLASS}`]].forEach((entry) => {\n const [instances, parentGroupClass] = entry;\n const mountPoint = makeElement(container, 'g', [1], `.${parentGroupClass}`);\n const className = `${parentGroupClass}-group`;\n makeElement(mountPoint, 'g', instances, `.${className}`, {\n update: (group, instance) => {\n instance.mount(group.node());\n }\n });\n });\n }\n};\n","import { CLASSPREFIX, CONSOLIDATED } from './enums/constants';\n\n/**\n * Returns the default configuration of the visual unit\n * @return {Object} Default configuration of visual unit\n */\nexport const defaultConfig = {\n classPrefix: CLASSPREFIX,\n defClassName: 'visual-unit',\n className: '',\n trackerClassName: 'visual-unit-tracker',\n gridLines: {\n defClassName: 'axis-grid-lines',\n className: '',\n show: true,\n color: '#efefef',\n zeroLineColor: '#b6b6b6'\n },\n gridBands: {\n defClassName: 'axis-grid-bands',\n className: '',\n show: false,\n y: {\n color: ['#fff', '#fbfbfb']\n },\n x: {\n color: ['#fff', '#f9f9f9']\n }\n },\n arcLayerClassName: 'layer-arc',\n interaction: {\n tooltip: {\n mode: CONSOLIDATED\n }\n },\n sideEffectClassName: 'side-effect-container'\n};\n","export const CLASSPREFIX = 'muze';\nexport const IDFIELD = '__id__';\nexport const GRIDLINEPARENTGROUPCLASS = 'grid-lines';\nexport const GRIDBANDPARENTGROUPCLASS = 'grid-bands';\nexport const CONSOLIDATED = 'consolidated';\nexport const FRAGMENTED = 'fragmented';\nexport const FACET_BY_FIELDS = 'facetByFields';\nexport const RETINAL_FIELDS = 'retinalFields';\nexport const PARENT_ALIAS = 'parentAlias';\nexport const LAYERS = 'layers';\nexport const CACHED_DATA = 'cachedData';\nexport const STORE = 'store';\n\n","import { mergeRecursive } from 'muze-utils';\nimport { defaultConfig } from './default-config';\nimport { CONFIG, LAYERDEFS, AXES, WIDTH, HEIGHT, MOUNT, TRANSFORM, FIELDS, DATA } from './enums/reactive-props';\n\nexport default {\n [CONFIG]: {\n value: null,\n meta: {\n sanitization: (config, oldConfig) => (\n mergeRecursive(oldConfig || mergeRecursive({}, defaultConfig), config)\n )\n }\n },\n [LAYERDEFS]: {\n value: null\n },\n [AXES]: {\n value: null,\n meta: {\n sanitization: (axes, prevAxes) => Object.assign(prevAxes || {}, axes)\n }\n },\n [WIDTH]: {\n value: null\n },\n [HEIGHT]: {\n value: null\n },\n [MOUNT]: {\n value: null\n },\n [TRANSFORM]: {\n value: null\n },\n [FIELDS]: {\n value: null\n },\n [DATA]: {\n value: null,\n meta: {\n preset: (data, context) => {\n if (context._cache) {\n const cachedData = context.cachedData();\n context.cachedData([...cachedData, data]);\n } else {\n const oldData = context.data();\n oldData && oldData.unsubscribe('propagation');\n context.cachedData([data]);\n }\n }\n }\n }\n};\n","import { DimensionSubtype } from 'muze-utils';\nimport * as PROPS from './enums/reactive-props';\nimport {\n transformDataModels,\n getDimensionMeasureMap,\n createLayers,\n attachDataToLayers,\n attachAxisToLayers,\n unionDomainFromLayers,\n getLayerAxisIndex\n} from './helper';\n\nconst axisMap = {\n 0: 'primary',\n 1: 'secondary'\n};\nconst axisProps = [PROPS.primaryXAxisUpdated, PROPS.secondaryXAxisUpdated, PROPS.primaryYAxisUpdated,\n PROPS.secondaryYAxisUpdated];\n\nexport const listenerMap = context => ([\n {\n type: 'registerImmediateListener',\n props: [PROPS.AXES],\n listener: ([, axes]) => {\n ['x', 'y'].forEach((type) => {\n const axesArr = axes[type] || [];\n axesArr.forEach((axis, i) => {\n axis.on('update', () => {\n context.store().commit(PROPS[`${axisMap[i]}${axis.isReverse() ? 'Y' : 'X'}AxisUpdated`], true);\n });\n });\n });\n }\n },\n {\n type: 'registerImmediateListener',\n props: [PROPS.CONFIG],\n listener: ([, config]) => {\n config && context.firebolt().config(config.interaction);\n }\n },\n {\n type: 'computed',\n props: [PROPS.LAYERSCREATED],\n listener: fetch => fetch(PROPS.LAYERDEFS, PROPS.FIELDS, (layerDefs, fields) => {\n const layerDefsValue = layerDefs.value;\n const fieldsVal = fields.value;\n if (layerDefsValue && fieldsVal) {\n const layers = createLayers(context, layerDefs.value);\n context.layers(layers);\n context._layerAxisIndex = getLayerAxisIndex(context.layers(), fieldsVal);\n context._lifeCycleManager.notify({ client: layers, action: 'initialized', formalName: 'layer' });\n return true;\n }\n return null;\n })\n },\n {\n type: 'computed',\n props: [PROPS.TIMEDIFFS],\n listener: fetch => fetch(PROPS.DATA, PROPS.FIELDS, PROPS.AXES, (data, fields, axes) => {\n const dataModel = data.value;\n const axisFields = fields.value;\n const axesObj = axes.value;\n if (dataModel && axisFields && axesObj) {\n const timeDiffs = {};\n const timeDiffsByField = {};\n ['x', 'y'].forEach((type) => {\n const field = axisFields[type][0];\n if (field && field.subtype() === DimensionSubtype.TEMPORAL) {\n timeDiffs[type] = field.getMinDiff();\n timeDiffsByField[field] = timeDiffs[type];\n axesObj[type].forEach(axis => axis.minDiff(timeDiffs[type]));\n }\n });\n context._timeDiffsByField = timeDiffsByField;\n return timeDiffs;\n }\n return null;\n })\n },\n {\n type: 'computed',\n props: [PROPS.DATADOMAIN],\n listener: fetch => fetch(PROPS.DATA, PROPS.LAYERSCREATED, PROPS.AXES, PROPS.TRANSFORM,\n (dataModel, layersCreated, axes, transform) => {\n const dataModelVal = dataModel.value;\n const layerAxisIndexVal = context._layerAxisIndex;\n const axesVal = axes.value;\n if (dataModelVal && layersCreated.value && axesVal && layerAxisIndexVal) {\n const layers = context.layers();\n const dataModels = transformDataModels(transform.value, dataModelVal);\n context._transformedDataModels = dataModels;\n context._lifeCycleManager.notify({ client: layers, action: 'beforeupdate', formalName: 'layer' });\n attachDataToLayers(layers, dataModelVal, context._transformedDataModels);\n context._dimensionMeasureMap = getDimensionMeasureMap(layers,\n dataModelVal.getFieldsConfig(), context.retinalFields());\n attachAxisToLayers(axesVal, layers, layerAxisIndexVal);\n context._lifeCycleManager.notify({ client: layers, action: 'updated', formalName: 'layer' });\n return unionDomainFromLayers(layers, context.fields(),\n layerAxisIndexVal, dataModelVal.getFieldsConfig());\n }\n return null;\n })\n },\n {\n type: 'registerImmediateListener',\n props: [PROPS.DATADOMAIN],\n listener: ([, dataDomain]) => {\n dataDomain !== null && context.updateAxisDomain(dataDomain);\n }\n },\n {\n type: 'registerChangeListener',\n props: [PROPS.MOUNT, PROPS.DATA, ...axisProps],\n listener: (mount, data) => {\n const container = mount[1];\n if (container && data[1]) {\n context.render(container);\n }\n }\n }\n]);\n","import { FACET_BY_FIELDS, RETINAL_FIELDS, PARENT_ALIAS, LAYERS, STORE, CACHED_DATA } from './enums/constants';\n\nexport const PROPS = {\n [FACET_BY_FIELDS]: {},\n [RETINAL_FIELDS]: {},\n [PARENT_ALIAS]: {},\n [LAYERS]: {},\n [STORE]: {},\n [CACHED_DATA]: {},\n detailFields: {}\n};\n","import { CommonProps } from 'muze-utils';\nimport { DATA, MOUNT } from '../enums/reactive-props';\n\nexport const clearActionHistory = (context) => {\n const actionHistory = context._actionHistory;\n for (const key in actionHistory) {\n if (actionHistory[key].isMutableAction) {\n delete context._actionHistory[key];\n }\n }\n};\n\nexport const dispatchQueuedSideEffects = (context) => {\n const queuedSideEffects = context._queuedSideEffects;\n Object.entries(queuedSideEffects).forEach((entry) => {\n const sideEffect = entry[1];\n context.dispatchSideEffect(sideEffect.name, ...sideEffect.params);\n });\n context._queuedSideEffects = {};\n};\n\nexport const registerListeners = (firebolt) => {\n const context = firebolt.context;\n const store = context.store();\n\n store.registerImmediateListener([DATA, MOUNT], (dataModel, mount) => {\n const dm = dataModel[1];\n\n if (dm && mount[1]) {\n const originalData = firebolt.context.cachedData()[0];\n firebolt.createSelectionSet(firebolt.context.data().getData().uids);\n firebolt.attachPropagationListener(originalData);\n }\n }, true);\n\n context._layerDeps.throwback.registerChangeListener([CommonProps.ON_LAYER_DRAW],\n ([, onlayerdraw]) => {\n if (onlayerdraw) {\n firebolt.initializeSideEffects();\n firebolt.config(context.config().interaction);\n firebolt.mapActionsAndBehaviour();\n dispatchQueuedSideEffects(firebolt);\n clearActionHistory(firebolt);\n }\n });\n};\n\n","import { DimensionSubtype } from 'muze-utils';\n\nconst getRangeFromData = (instance, selectionDataModel, propConfig) => {\n let criteria;\n const dataObj = selectionDataModel[0].getData();\n const propCriteria = propConfig.payload.criteria;\n const sourceIdentifiers = propConfig.sourceIdentifiers;\n const schema = dataObj.schema;\n const fieldMap = instance.data().getFieldsConfig();\n const data = dataObj.data;\n const isActionSourceSame = instance.id() === propConfig.sourceId;\n\n if (isActionSourceSame) {\n criteria = propCriteria;\n } else {\n criteria = (sourceIdentifiers !== null) ? schema.reduce((acc, obj, index) => {\n let range;\n const field = obj.name;\n const fieldObj = fieldMap[field];\n const type = fieldObj && (fieldObj.def.subtype ? fieldObj.def.subtype : fieldObj.def.type);\n const isDimension = type === DimensionSubtype.CATEGORICAL;\n\n if (!fieldObj) {\n return acc;\n }\n\n if (!isDimension) {\n range = [Math.min(...data.map(d => d[index])), Math.max(...data.map(d => d[index]))];\n } else {\n range = data.map(d => d[index]);\n }\n acc[field] = range;\n return acc;\n }, {}) : null;\n }\n return criteria;\n};\n\nexport const payloadGenerator = {\n brush: (instance, selectionDataModel, propConfig) => {\n const propPayload = propConfig.payload;\n const criteria = getRangeFromData(instance, selectionDataModel, propConfig);\n const payload = Object.assign({}, propPayload);\n payload.criteria = criteria;\n return payload;\n },\n\n __default: (instance, selectionDataModel, propConfig) => {\n const propPayload = propConfig.payload;\n const sourceIdentifiers = propConfig.sourceIdentifiers;\n const dataObj = selectionDataModel[0].getData();\n let schema = dataObj.schema;\n const payload = Object.assign({}, propPayload);\n schema = dataObj.schema;\n const data = dataObj.data;\n const sourceFields = schema.map(d => d.name);\n payload.criteria = !sourceIdentifiers && selectionDataModel[0].isEmpty() ? null :\n [sourceFields, ...data];\n payload.sourceFields = sourceIdentifiers ? sourceIdentifiers.getSchema().map(d => d.name) : [];\n return payload;\n }\n};\n\n","import { isSimpleObject, FieldType, DataModel } from 'muze-utils';\n\nconst getModelWithFacetData = (dm, data) => {\n const dataObj = dm.getData();\n const schema1 = dataObj.schema;\n const data1 = dataObj.data;\n const jsonData = [];\n const schema2 = data[0].map(d => ({\n name: `${d}`,\n type: FieldType.DIMENSION\n }));\n const data2 = data[1];\n\n data1.forEach((d) => {\n const tuple = {};\n schema1.forEach((obj, i) => {\n tuple[obj.name] = d[i];\n });\n schema2.forEach((obj, i) => {\n tuple[obj.name] = data2[i];\n });\n jsonData.push(tuple);\n });\n\n return new DataModel(jsonData, [...schema1, ...schema2]);\n};\n\nexport const propagateValues = (instance, action, config = {}) => {\n let propagationData;\n const payload = config.payload;\n const selectionSet = config.selectionSet;\n const propagationFieldInf = config.propagationFields[action] || {};\n const propagationFields = propagationFieldInf.fields || [];\n const append = propagationFieldInf.append;\n const criteria = payload.criteria;\n const context = instance.context;\n const dataModel = context.cachedData()[0];\n const sourceId = context.id();\n const sideEfffects = instance.sideEffects();\n const behaviourEffectMap = instance._behaviourEffectMap;\n const mergedModel = selectionSet.mergedEnter.model;\n const fieldsConfig = dataModel.getFieldsConfig();\n payload.sourceUnit = sourceId;\n payload.action = action;\n payload.sourceCanvas = context.parentAlias();\n const propagationBehaviourMap = instance._propagationBehaviourMap;\n const propagationBehaviour = propagationBehaviourMap[action] || action;\n\n let propFields = [];\n if (criteria === null) {\n propagationData = null;\n } else if (isSimpleObject(criteria)) {\n propFields = Object.keys(criteria || {});\n propagationData = mergedModel ? mergedModel.project(propFields) : null;\n } else {\n propFields = criteria[0];\n propagationData = mergedModel ? mergedModel.project(propFields) : null;\n }\n\n const facetByFields = context.facetByFields();\n if (propagationData !== null && propagationFields.length) {\n const fields = propagationData.getData().schema.map(d => d.name);\n propagationData = getModelWithFacetData(propagationData, facetByFields);\n propFields = append ? [...fields, ...propagationFields] : propagationFields;\n propagationData = propagationData.project(propFields);\n }\n\n let propagateInterpolatedValues = false;\n if (propFields.length && propFields.every(field => fieldsConfig[field] &&\n fieldsConfig[field].def.type === FieldType.MEASURE)) {\n propagateInterpolatedValues = true;\n }\n\n const groupId = context.parentAlias();\n payload.action = action;\n const behaviourInstance = instance._actions.behavioural[propagationBehaviour];\n const isMutableAction = behaviourInstance ? behaviourInstance.constructor.mutates() : false;\n\n const filterFn = (entry, propagationConf) => {\n const effects = behaviourEffectMap[entry.config.action];\n const mutates = entry.config.groupId ?\n effects.some(d => sideEfffects[d.name || d].constructor.mutates()) : true;\n return entry.config.groupId !== propagationConf.groupId && mutates;\n };\n\n const sourceBehaviour = instance._actions.behavioural[action];\n const mutates = sourceBehaviour ? sourceBehaviour.constructor.mutates() : false;\n let propConfig = {\n payload,\n action,\n criteria: propagationData,\n isMutableAction: mutates,\n propagateInterpolatedValues,\n groupId,\n sourceId: mutates ? groupId : sourceId,\n filterFn,\n enabled: (propConf, firebolt) => (action !== propagationBehaviour ?\n propConf.payload.sourceCanvas === firebolt.context.parentAlias() : true)\n };\n\n dataModel.propagate(propagationData, propConfig, true);\n\n if (action !== propagationBehaviour) {\n propConfig = {\n payload,\n sourceId: isMutableAction ? groupId : sourceId,\n criteria: propagationData,\n isMutableAction,\n propagateInterpolatedValues,\n action: propagationBehaviour,\n groupId,\n applyOnSource: action === propagationBehaviour,\n enabled: (propConf, firebolt) => propConf.payload.sourceCanvas !== firebolt.context.parentAlias(),\n filterFn\n };\n\n dataModel.propagate(propagationData, propConfig, true, {\n filterImmutableAction: (actionInf, propInf) => actionInf.groupId !== propInf.groupId\n });\n }\n};\n","import { FieldType } from 'muze-utils';\nimport { Firebolt, SpawnableSideEffect } from '@chartshq/muze-firebolt';\nimport { registerListeners } from './helper';\nimport { payloadGenerator } from './payload-generator';\nimport { propagateValues } from './data-propagator';\n\n/**\n * This class manages the interactions of visual unit. It associates physical actions with\n * behavioural actions. It also propagates the behavioural actions to other datamodels.\n */\nexport default class UnitFireBolt extends Firebolt {\n constructor (...params) {\n super(...params);\n registerListeners(this);\n }\n\n propagate (behaviour, payload, selectionSet, sideEffects) {\n propagateValues(this, behaviour, {\n payload,\n selectionSet,\n sideEffects,\n propagationFields: this._propagationFields\n });\n }\n\n getApplicableSideEffects (sideEffects, payload, propagationInf) {\n const context = this.context;\n const unitId = context.id();\n const aliasName = context.parentAlias();\n const propagationSourceCanvas = propagationInf.propPayload && propagationInf.propPayload.sourceCanvas;\n const sourceUnitId = propagationInf.propPayload && propagationInf.propPayload.sourceUnit;\n const sourceSideEffects = this._sourceSideEffects;\n const sideEffectInstances = this.sideEffects();\n const actionOnSource = sourceUnitId ? sourceUnitId === unitId : true;\n\n const applicableSideEffects = payload.sideEffects ? [{\n effects: payload.sideEffects,\n behaviours: [payload.action]\n }] : sideEffects;\n applicableSideEffects.forEach((d) => {\n let mappedEffects = d.effects;\n mappedEffects = mappedEffects.filter((se) => {\n const mutates = sideEffectInstances[se.name || se].constructor.mutates();\n if (mutates && propagationInf.isMutableAction === false) {\n return false;\n }\n if (!actionOnSource && payload.criteria !== null) {\n const sideEffectChecker = sourceSideEffects[se.name || se];\n return sideEffectChecker ? sideEffectChecker(propagationInf.propPayload, context) : true;\n }\n if (propagationSourceCanvas === aliasName || actionOnSource) {\n return se.applyOnSource !== false;\n }\n\n return true;\n });\n d.effects = mappedEffects;\n });\n return applicableSideEffects;\n }\n\n shouldApplySideEffects (propagate) {\n return propagate === false;\n }\n\n onDataModelPropagation () {\n return (data, config) => {\n let isSourceFieldPresent = true;\n let isMutableAction = false;\n const propPayload = config.payload;\n const sourceIdentifiers = config.sourceIdentifiers;\n const enabledFn = config.enabled;\n const action = config.action;\n const payloadFn = payloadGenerator[action] || payloadGenerator.__default;\n\n if (sourceIdentifiers) {\n const fieldsConfig = sourceIdentifiers.getFieldsConfig();\n const sourceIdentifierFields = Object.keys(fieldsConfig);\n const propFields = Object.keys(data[0].getFieldsConfig());\n if (!Object.values(fieldsConfig).some(d => d.def.type === FieldType.MEASURE)) {\n isSourceFieldPresent = sourceIdentifierFields.some(d => propFields.indexOf(d) !== -1);\n }\n }\n\n const payload = payloadFn(this.context, data, config);\n const sourceBehaviours = this._sourceBehaviours;\n const filterFn = sourceBehaviours[action] || sourceBehaviours['*'];\n let enabled = true;\n\n if (filterFn) {\n enabled = filterFn(propPayload || {}, this.context);\n }\n\n if (enabledFn) {\n enabled = enabledFn(config, this) && enabled !== false;\n }\n\n if (enabled) {\n const effects = this._behaviourEffectMap[action];\n const sideEffectInstances = this.sideEffects();\n isMutableAction = config.groupId ?\n effects.some(d => sideEffectInstances[d.name || d].constructor.mutates()) : config.isMutableAction;\n\n const propagationInf = {\n propagate: false,\n data,\n propPayload,\n sourceIdentifiers,\n persistent: false,\n isSourceFieldPresent,\n sourceId: config.propagationSourceId,\n isMutableAction: config.isMutableAction\n };\n\n this._actionHistory[action] = {\n payload,\n propagationInf,\n isMutableAction\n };\n this.dispatchBehaviour(action, payload, propagationInf);\n }\n };\n }\n\n initializeSideEffects () {\n super.initializeSideEffects();\n const sideEffects = this.sideEffects();\n for (const key in sideEffects) {\n if ({}.hasOwnProperty.call(sideEffects, key)) {\n sideEffects[key] instanceof SpawnableSideEffect && sideEffects[key].drawingContext(() => {\n const context = this.context;\n return context.getDrawingContext();\n });\n }\n }\n }\n\n prepareSelectionSets (behaviours) {\n const data = this.context.data();\n if (data) {\n this.createSelectionSet(data.getData().uids, behaviours);\n }\n return this;\n }\n\n remove () {\n this.context.cachedData()[0].unsubscribe('propagation');\n return this;\n }\n}\n","import { layerFactory } from '@chartshq/visual-layer';\nimport {\n setAttrs,\n CommonProps,\n getUniqueId,\n getQualifiedClassName,\n selectElement,\n transactor,\n Store,\n makeElement,\n registerListeners,\n generateGetterSetters,\n getDataModelFromIdentifiers,\n isSimpleObject,\n transposeArray,\n FieldType\n} from 'muze-utils';\nimport { physicalActions, sideEffects, behaviouralActions, behaviourEffectMap } from '@chartshq/muze-firebolt';\nimport { actionBehaviourMap } from './firebolt/action-behaviour-map';\nimport {\n renderLayers,\n getNearestDimensionalValue,\n removeLayersBy,\n getLayersBy,\n getLayerFromDef,\n attachAxisToLayers,\n getLayerAxisIndex,\n createSideEffectGroup,\n getAdjustedDomain,\n resolveEncodingTransform\n} from './helper';\nimport { renderGridLineLayers } from './helper/grid-lines';\nimport localOptions from './local-options';\nimport { listenerMap } from './listener-map';\nimport {\n primaryYAxisUpdated,\n primaryXAxisUpdated,\n secondaryXAxisUpdated,\n secondaryYAxisUpdated,\n DATADOMAIN,\n TIMEDIFFS\n} from './enums/reactive-props';\nimport { PROPS } from './props';\nimport UnitFireBolt from './firebolt';\nimport './styles.scss';\n\nconst FORMAL_NAME = 'unit';\n\n/**\n * @module VisualUnit\n * A hierarchical component of renderer which manages multiple layers. This logical\n * module is responsible for layouting layers, attach axis with them, resolving conflicts of layers.\n */\n\n/**\n * Basic unit implementaiton\n * @class VisualUnit\n */\nexport default class VisualUnit {\n\n /**\n * Creates instance of visualization unit\n * @param registry {Object} Component registry\n * @param dependencies {Object} Dependencies required by visual unit.\n */\n constructor (registry, dependencies) {\n this._id = getUniqueId();\n this._dependencies = dependencies;\n this._layerDeps = {\n throwback: new Store({\n onlayerdraw: false\n }),\n smartLabel: dependencies.smartLabel\n };\n this._renderedResolve = null;\n this._renderedPromise = new Promise((resolve) => {\n this._renderedResolve = resolve;\n });\n this._layerDeps.throwback.registerChangeListener([CommonProps.ON_LAYER_DRAW], () => {\n this._renderedResolve();\n this._lifeCycleManager.notify({ client: this.layers(), action: 'drawn', formalName: 'layer' });\n });\n\n this._lifeCycleManager = dependencies.lifeCycleManager;\n this._layersMap = {};\n this._gridlines = [];\n this._gridbands = [];\n this._layerAxisIndex = {};\n this._transformedDataModels = {};\n\n layerFactory.setLayerRegistry(registry.layerRegistry);\n generateGetterSetters(this, PROPS);\n this.cachedData([]);\n this.store(new Store({\n [primaryXAxisUpdated]: null,\n [primaryYAxisUpdated]: null,\n [secondaryXAxisUpdated]: null,\n [secondaryYAxisUpdated]: null\n }));\n transactor(this, localOptions, this.store().model);\n this.firebolt(new UnitFireBolt(this, {\n physical: physicalActions,\n behavioural: behaviouralActions,\n physicalBehaviouralMap: actionBehaviourMap\n }, sideEffects, behaviourEffectMap));\n registerListeners(this, listenerMap);\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof VisualUnit\n */\n static formalName () {\n return FORMAL_NAME;\n }\n\n /**\n * Static helper for creates a unit instance\n *\n * @param {Object} [id] optional unique identifier for a unit; , id is calculated internally\n * @param {DataModel} data instance of datamodel\n * @param {Array.} layers layer configuration\n * @param {Object} config configurtion for the visual unit\n * @return {VisualUnit} Instance of a unit\n */\n static create (...params) {\n return new this(...params);\n }\n\n /**\n *\n *\n * @readonly\n * @memberof VisualUnit\n */\n firebolt (...firebolt) {\n if (firebolt.length) {\n this._firebolt = firebolt[0];\n return this;\n }\n return this._firebolt;\n }\n\n /**\n * Gets the domain for all axes of this visual unit.\n * @return {Object} Domains of each data field.\n */\n getDataDomain () {\n return this.store().get(DATADOMAIN);\n }\n\n /**\n * Retrieves the id created for this instance of visual unit\n * @return {string} id associated with the instance\n */\n id () {\n return this._id;\n }\n\n /**\n *\n *\n * @returns\n * @memberof VisualUnit\n */\n lockModel () {\n this._store.model.lock();\n return this;\n }\n\n /**\n *\n *\n * @returns\n * @memberof VisualUnit\n */\n unlockModel () {\n this._store.model.unlock();\n return this;\n }\n\n timeDiffsByField (...params) {\n if (params.length) {\n return this;\n }\n return this._timeDiffsByField;\n }\n\n /**\n * Renders the visual unit. It creates the layout and renders the axes and layers.\n * @return {VisualUnit} Instance of visual unit.\n */\n render (container) {\n const config = this.config();\n const { className, defClassName, sideEffectClassName, classPrefix } = config;\n const qualifiedClassName = getQualifiedClassName(defClassName, this.id(), config.classPrefix);\n const width = this.width();\n const height = this.height();\n const containerSelection = selectElement(container).style('position', 'relative');\n\n this._rootSvg = makeElement(containerSelection, 'svg', [null], className)\n .style('width', `${width}px`).style('height', `${height}px`);\n\n const node = this._rootSvg.node();\n setAttrs(node, {\n width,\n height,\n class: qualifiedClassName.join(' ')\n });\n renderGridLineLayers(this, node);\n renderLayers(this, node, this.layers(), {\n width,\n height\n });\n this._sideEffectGroup = createSideEffectGroup(node, `${classPrefix}-${sideEffectClassName}`);\n return this;\n }\n\n done () {\n return this._renderedPromise;\n }\n /**\n *\n *\n * @returns\n * @memberof VisualUnit\n */\n enableCaching () {\n this._cache = true;\n return this;\n }\n\n /**\n *\n *\n * @returns\n * @memberof VisualUnit\n */\n clearCaching () {\n this._cache = false;\n this.cachedData([this.cachedData()[0]]);\n return this;\n }\n\n /**\n *\n *\n * @returns\n * @memberof VisualUnit\n */\n getDrawingContext () {\n const rootSvg = this._rootSvg && this._rootSvg.node();\n const width = this.width();\n const height = this.height();\n return {\n htmlContainer: this.mount(),\n svgContainer: rootSvg,\n width,\n height,\n sideEffectGroup: this._sideEffectGroup,\n parentContainer: this.parentContainer(),\n xOffset: 0,\n yOffset: 0\n };\n }\n\n /**\n * Returns the serialized configuration of visual unit.\n * @return {Object} serialized configuration\n */\n serialize () {\n return {\n layers: this.layers().map(layer => layer.serialize()),\n config: this.config(),\n axes: this.store().get('axes').map(axis => axis.serialize())\n };\n }\n\n /**\n *\n *\n * @param {*} layerDef\n * @returns\n * @memberof VisualUnit\n */\n addLayer (layerDef) {\n const layerName = layerDef.name;\n const layer = this.getLayerByName(layerName);\n const measurement = {\n width: this.width(),\n height: this.height()\n };\n\n if (layer) {\n return [layer];\n }\n const serializedDef = layerFactory.getSerializedConf(layerDef.mark, layerDef);\n const instances = Object.values(getLayerFromDef(this, serializedDef));\n this.layers().push(...instances);\n const layerAxisIndex = getLayerAxisIndex(instances, this.fields());\n this._layerAxisIndex = Object.assign(this._layerAxisIndex, layerAxisIndex);\n attachAxisToLayers(this.axes(), instances, layerAxisIndex);\n const store = { unit: this, layers: {} };\n this.layers().forEach((inst) => {\n store.layers[inst.alias()] = inst;\n });\n instances.forEach((lyr) => {\n resolveEncodingTransform(lyr, store);\n lyr.measurement(measurement);\n lyr.dataProps({\n timeDiffs: this.store().get(TIMEDIFFS)\n });\n });\n return instances;\n }\n\n /**\n *\n *\n * @returns\n * @memberof VisualUnit\n */\n remove () {\n const lifeCycleManager = this._dependencies.lifeCycleManager;\n lifeCycleManager.notify({ client: this, action: 'beforeremove', formalName: 'unit' });\n this.store().unsubscribeAll();\n selectElement(this.mount()).remove();\n this.firebolt().remove();\n // Remove layers\n lifeCycleManager.notify({ client: this.layers(), action: 'beforeremove', formalName: 'layer' });\n this.layers().forEach(layer => layer.remove());\n lifeCycleManager.notify({ client: this.layers(), action: 'removed', formalName: 'layer' });\n lifeCycleManager.notify({ client: this, action: 'removed', formalName: 'unit' });\n return this;\n }\n\n /**\n *\n *\n * @param {*} identifiers\n * @returns\n * @memberof VisualUnit\n */\n getDataModelFromIdentifiers (identifiers, mode, parentModel) {\n if (identifiers === null) {\n return null;\n }\n const dataModel = parentModel || this.data();\n return getDataModelFromIdentifiers(dataModel, identifiers, mode);\n }\n\n /**\n *\n *\n * @returns\n * @memberof VisualUnit\n */\n resetData () {\n this.data(this.cachedData()[0]);\n return this;\n }\n\n /**\n *\n *\n * @returns\n * @memberof VisualUnit\n */\n getSourceInfo () {\n return {\n dimensionMeasureMap: this._dimensionMeasureMap,\n fields: this.fields(),\n data: this.data(),\n axes: this.axes()\n };\n }\n\n /**\n *\n *\n * @returns\n * @memberof VisualUnit\n */\n getDefaultTargetContainer () {\n const { classPrefix, defClassName } = this.config();\n return [`.${classPrefix}-${defClassName}`];\n }\n\n /**\n *\n *\n * @param {*} type\n * @returns\n * @memberof VisualUnit\n */\n getLayersByType (type) {\n const layers = getLayersBy(this.layers(), 'type', type);\n return layers;\n }\n\n /**\n *\n *\n * @param {*} name\n * @returns\n * @memberof VisualUnit\n */\n getLayerByName (name) {\n const layers = getLayersBy(this.layers(), 'name', name);\n return layers[0];\n }\n\n /**\n *\n *\n * @param {*} domain\n * @returns\n * @memberof VisualUnit\n */\n updateAxisDomain (domain) {\n ['x', 'y'].forEach((type) => {\n const axes = this.axes()[type];\n let min = [];\n let max = [];\n let dom;\n axes && axes.forEach((axis, i) => {\n const field = this.fields()[type][i];\n dom = domain[`${this.fields()[type][i]}`];\n\n if (field.type() !== FieldType.DIMENSION && dom) {\n min[i] = dom[0];\n max[i] = dom[1];\n }\n });\n if (axes) {\n if (axes.length > 1) {\n const axisConf = axes[0].config();\n if (axes[0].constructor.type() === 'linear') {\n if (axisConf.alignZeroLine) {\n axes.forEach(axis => axis.config({\n nice: false\n }));\n const adjustedDomain = getAdjustedDomain(max, min);\n min = adjustedDomain.min;\n max = adjustedDomain.max;\n }\n\n axes[0].updateDomainCache([min[0], max[0]]);\n axes[1].updateDomainCache([min[1], max[1]]);\n } else {\n axes[0].updateDomainCache(dom);\n axes[1].updateDomainCache(dom);\n }\n } else {\n axes[0].updateDomainCache(dom);\n }\n }\n });\n return this;\n }\n\n /**\n * Finds the nearest point closest to the x and y position.\n * @param {number} x x position.\n * @param {number} y y position.\n * @return {Object} Nearest point.\n */\n getNearestPoint (x, y, args) {\n let pointObj = {\n id: null\n };\n const dimValue = getNearestDimensionalValue(this, {\n x,\n y\n });\n\n if (dimValue !== null && args.getAllPoints) {\n pointObj.id = dimValue;\n const pointInf = this.getMarkInfFromLayers(x, y, args);\n pointObj.target = pointInf && pointInf.id ? pointInf.id : pointObj.id;\n return pointObj;\n }\n\n const markInf = this.getMarkInfFromLayers(x, y, args) || { id: null };\n pointObj = Object.assign({}, markInf);\n\n pointObj.target = markInf.id;\n return pointObj;\n }\n\n getMarkInfFromLayers (x, y, args) {\n const layers = this.layers();\n const len = layers.length;\n let point = null;\n // Iterate through the layers array and fetch the nearest point from each layer. If a valid\n // nearest point is found from any layer, then return that point.\n for (let i = 0; i < len; i++) {\n const layer = layers[i];\n const config = layer.config();\n if (config.interactive !== false) {\n point = layer.getNearestPoint(x, y, args);\n }\n if (point) {\n return point;\n }\n }\n return point;\n }\n\n /**\n *\n *\n * @param {*} identifiers\n * @returns\n * @memberof VisualUnit\n */\n getPlotPointsFromIdentifiers (identifiers, config = {}) {\n let points = [];\n let parsedIdentifiers = identifiers;\n if (identifiers === null) {\n return [];\n }\n const layers = this.layers();\n const len = layers.length;\n if (isSimpleObject(identifiers)) {\n parsedIdentifiers = [Object.keys(identifiers)];\n parsedIdentifiers = [...parsedIdentifiers, ...transposeArray(Object.values(identifiers))];\n }\n for (let i = 0; i < len; i++) {\n const layer = layers[i];\n if (layer.config().interactive !== false) {\n points = [...points, ...layer.getPointsFromIdentifiers(parsedIdentifiers, config)];\n }\n }\n return points;\n }\n\n /**\n *\n *\n * @param {*} name\n * @returns\n * @memberof VisualUnit\n */\n removeLayerByName (name) {\n removeLayersBy('name', name);\n return this;\n }\n\n /**\n *\n *\n * @param {*} type\n * @returns\n * @memberof VisualUnit\n */\n removeLayersByType (type) {\n removeLayersBy('type', type);\n return this;\n }\n\n parentContainer (...container) {\n if (container.length) {\n this._parentContainer = container[0];\n\n return this;\n }\n return this._parentContainer;\n }\n}\n","import { DataModel } from 'muze-utils';\n\nimport { retriveDomainFromData } from './group-utils';\n\n/**\n * Gets name of fields form the variables\n *\n * @param {*} fields1\n * @param {*} [fields2=[]]\n * @return\n */\nconst getFieldNames = (fields1, fields2 = []) => [fields1, fields2].map(fields => fields.reduce((acc, d) => {\n acc = [...acc, ...d.getMembers()];\n return acc;\n}, []));\n\n/**\n * Creates a selected datamodel from a parent datamodel and a set of field names\n *\n * @param {Object} datamodel provided as input\n * @param {Array} fieldNames schema names\n * @param {Array} fieldValues values of those schema names to be selected\n * @return {Object} creates a new selected datamodel\n */\nconst createSelectedDataModel = (datamodel, fieldNames, fieldValues) =>\n datamodel.select(fields => fieldNames.every((field, k) => fields[field].value === fieldValues[k]));\n\n/**\n *\n *\n * @param {*} facets\n * @param {*} keyArray\n * @return\n */\nconst uniqueKeyGenerator = (keyArray, context, depth = 0, val = []) => {\n const {\n facets,\n dataModel,\n uniqueValues\n } = context;\n\n // Get unique keys for the next depth recursively if required\n if (facets[depth + 1]) {\n const field = facets[depth];\n uniqueValues.forEach((value) => {\n const newDm = dataModel.select(fields => fields[field].value === value);\n const nextDepthUniqueValues = retriveDomainFromData(newDm, facets[depth + 1]);\n const newContext = {\n facets,\n dataModel: newDm,\n uniqueValues: nextDepthUniqueValues\n };\n\n uniqueKeyGenerator(keyArray, newContext, depth + 1, [...val, value]);\n });\n } else {\n uniqueValues.forEach((value) => {\n keyArray.push([...val, value]);\n });\n }\n};\n\n/**\n * projects row model based on the set of row and/or column and other projection fields\n *\n * @param {Object} datamodel provided as input\n * @return {Object} Projected datamodel\n */\nconst projectRows = (datamodel, projections) => {\n const {\n allColumnProjections,\n rowProjections,\n optionalProjections\n } = projections;\n\n if (rowProjections.length > 0) {\n return rowProjections.map((projectFields) => {\n const [projFieldNames, colProjFieldNames] = getFieldNames(projectFields, allColumnProjections);\n return datamodel.project([...projFieldNames, ...colProjFieldNames, ...optionalProjections]);\n });\n }\n return [datamodel];\n};\n\n/**\n * Adds the datamodels to current row index based on column fields\n *\n * @param {Array} context current context\n * @param {Array} callback List of facets applied to the current datamodel\n */\nconst pushToMatrix = (context, callback) => {\n let cells = [];\n const {\n matrix,\n datamodel,\n facetInfo,\n fieldInfo\n } = context;\n // Get projected fields for current row\n const {\n rowProjections,\n colProjections,\n optionalProjections\n } = fieldInfo;\n const {\n rowIndex,\n columnIndex\n } = facetInfo;\n const rowProj = rowProjections[(rowIndex) % rowProjections.length] || [];\n\n // Get the cells for the matrix from the return function of the callback on the datamodel.\n // callback function -> (datamodel, {projections, indices}, facets)\n if (colProjections.length > 0) {\n cells = colProjections.map((projectFields, projIdx) => {\n const [colProjFieldNames, rowProjFieldNames] = getFieldNames(projectFields, rowProj);\n const projectedDm = datamodel.project([...colProjFieldNames, ...rowProjFieldNames, ...optionalProjections]);\n const projections = { rowFields: rowProj, columnFields: projectFields };\n const indices = { rowIndex, columnIndex: columnIndex * colProjections.length + projIdx };\n\n return callback(projectedDm, { projections, indices }, facetInfo);\n });\n } else {\n const projections = { rowFields: rowProj, columnFields: [] };\n const indices = { rowIndex, columnIndex };\n\n cells = [callback(datamodel, { projections, indices }, facetInfo)];\n }\n\n matrix[rowIndex] = matrix[rowIndex] || [];\n matrix[rowIndex].push(...cells);\n};\n\n/**\n * Gets Matrixes for corresponding datamodel, facets and projections\n *\n * @param {Object} dataModel input datamodel\n * @param {Object} fieldMap corresponding fieldmap\n * @param {Array} facetsAndProjections contains the set of facets and projections for the matrices\n * @param {Function} callback Callback executed after datamodels are prepared after sel/proj\n * @return {Object} set of matrices with the corresponding row and column keys\n */\nexport const getMatrixModel = (dataModel, fieldInfo, callback) => {\n let rowDataModels = [];\n const rowKeys = [];\n const columnKeys = [];\n const allColumnProjections = [];\n const matrix = [];\n const facetInfo = [];\n const {\n rowFacets,\n colFacets,\n colProjections\n } = fieldInfo;\n\n colProjections.forEach((colProj) => {\n allColumnProjections.push(...colProj);\n });\n fieldInfo.allColumnProjections = allColumnProjections;\n\n // Performing row selection and projection\n if (rowFacets.length > 0) {\n // Get unique values for the root level of facet\n const field = rowFacets[0].toString();\n const firstLevelRowKeys = retriveDomainFromData(dataModel, field);\n\n // Get unique keys in the form of an array of arrays for each row\n uniqueKeyGenerator(rowKeys, { facets: rowFacets, dataModel, uniqueValues: firstLevelRowKeys });\n\n // Apply selection -> projection -> row datamodels\n rowKeys.forEach((val) => {\n // Create faceted datamodel\n const [rowFacetFieldNames] = getFieldNames(rowFacets);\n const selectedDataModel = createSelectedDataModel(dataModel, rowFacetFieldNames, val);\n\n // Project the datamodel based on the number of projections (based on last levels)\n facetInfo.push([rowFacets, val]);\n rowDataModels.push(...projectRows(selectedDataModel, fieldInfo));\n });\n } else {\n // No row facets, hence only row projection\n rowDataModels.push(...projectRows(dataModel, fieldInfo));\n }\n\n // Maintaining set of row datamodels for column resolution\n rowDataModels = rowDataModels.length > 0 ? rowDataModels : [[]];\n\n // Performing column selection and projection\n if (colFacets.length > 0) {\n const colFacetNames = colFacets.map(d => `${d}`);\n // Get unique values for the root level of facet\n const field = colFacetNames[0];\n const firstLevelColumnKeys = retriveDomainFromData(dataModel, field);\n\n // Get unique keys to create faceted datamodels: this time for columns\n uniqueKeyGenerator(columnKeys, {\n facets: colFacetNames,\n dataModel,\n uniqueValues: firstLevelColumnKeys\n });\n\n // For each row in the datamodel, apply selection -> projection -> push the projection to matri\n rowDataModels.forEach((dme, rIndex) => {\n facetInfo[rIndex] = facetInfo[rIndex] || [[], []];\n columnKeys.forEach((val, cIndex) => {\n matrix[rIndex] = matrix[rIndex] || [];\n\n // If datamodel is not present in current row, choose parent datamodel\n const datamodel = dme instanceof DataModel ? dme : dataModel;\n\n // Selection is made on the datamodel for the current row\n const selectedDataModel = createSelectedDataModel(datamodel, colFacetNames, val);\n const context = {\n matrix,\n datamodel: selectedDataModel,\n facetInfo: {\n rowFacets: facetInfo[rIndex],\n colFacets: [colFacets, val],\n rowIndex: rIndex,\n columnIndex: cIndex\n },\n fieldInfo\n };\n pushToMatrix(context, callback);\n });\n });\n } else {\n // No column facets, hence only row projection\n rowDataModels.forEach((dme, rIndex) => {\n facetInfo[rIndex] = facetInfo[rIndex] || [[], []];\n const context = {\n matrix,\n datamodel: dme || dataModel,\n facetInfo: {\n rowFacets: facetInfo[rIndex],\n colFacets: [[], []],\n rowIndex: rIndex,\n columnIndex: 0\n },\n fieldInfo\n };\n\n pushToMatrix(context, callback);\n });\n }\n\n // Getting column keys\n const transposedColKeys = columnKeys.length > 0 ? columnKeys[0].map((col, i) =>\n columnKeys.map(row => row[i])) : columnKeys;\n\n return { matrix, rowKeys, columnKeys: transposedColKeys };\n};\n","import { AxisOrientation } from '@chartshq/muze-axis';\nimport { getObjProp, FieldType } from 'muze-utils';\nimport { getMatrixModel } from './matrix-model';\nimport {\n getCellKey,\n isDistributionEqual,\n mutateAxesFromMap,\n createSelection,\n getFieldsFromSuppliedLayers,\n extractFields\n} from './group-utils';\nimport { ROW, ROWS, COLUMNS, COL, LEFT, RIGHT, TOP, BOTTOM, PRIMARY, SECONDARY, X, Y } from '../enums/constants';\n\n/**\n * Updates row and column cells with the geom cell corresponding to the facet keys\n *\n * @param {*} resolver\n * @param {*} facets\n */\nconst updateCells = (resolver, facets, geomCell) => {\n [ROW, COL].forEach((field) => {\n const cells = resolver[`${field}Cells`]();\n const facetKey = facets[`${field}Facets`][1].join();\n\n !cells[facetKey] && (cells[facetKey] = []);\n cells[facetKey].push(geomCell);\n resolver[`${field}Cells`](cells);\n });\n};\n\n/**\n *\n *\n * @param {*} context\n * @param {*} datamodel\n * @param {*} fieldInfo\n * @param {*} facets\n * @return\n */\nexport const createValueCells = (context, datamodel, fieldInfo, facets) => {\n const {\n projections,\n indices\n } = fieldInfo;\n const {\n rowFields,\n columnFields\n } = projections;\n const {\n rowIndex,\n columnIndex\n } = indices;\n const {\n suppliedLayers,\n cell: GeomCell,\n resolver,\n config,\n encoder,\n detailFields\n } = context;\n const axes = resolver.axes();\n const cacheMaps = resolver.cacheMaps();\n const matrixLayers = resolver.matrixLayers();\n const labelManager = resolver.dependencies().smartlabel;\n const horizontalAxis = resolver.horizontalAxis();\n const verticalAxis = resolver.verticalAxis();\n const datamodelTransform = resolver.datamodelTransform();\n const {\n entryCellMap,\n exitCellMap\n } = cacheMaps;\n const layerConfigArr = encoder.getLayerConfig({ columnFields, rowFields }, suppliedLayers || []);\n const axesCreators = { config, labelManager, axes, cacheMaps };\n\n fieldInfo.normalizedColumns = verticalAxis.fields;\n fieldInfo.normalizedRows = horizontalAxis.fields;\n\n const groupAxes = encoder.createAxis(axesCreators, fieldInfo);\n\n matrixLayers[rowIndex] = matrixLayers[rowIndex] ? matrixLayers[rowIndex] : [];\n matrixLayers[rowIndex][columnIndex] = layerConfigArr;\n\n // return from map if already there otherwise create and put in map\n const geomCellKey = getCellKey(rowIndex, columnIndex);\n const fields = {\n y: rowFields,\n x: columnFields\n };\n const allFacets = [\n [...facets.rowFacets[0], ...facets.colFacets[0]],\n [...facets.rowFacets[1], ...facets.colFacets[1]]\n ];\n const geomCell = !exitCellMap.has(geomCellKey) ? new GeomCell() : exitCellMap.get(geomCellKey);\n\n geomCell.data(datamodel)\n .axes(groupAxes)\n .fields(fields)\n .transform(datamodelTransform)\n .detailFields(detailFields)\n .facetByFields(allFacets);\n entryCellMap.set(geomCellKey, geomCell);\n exitCellMap.delete(geomCellKey);\n\n updateCells(resolver, facets, geomCell);\n\n return entryCellMap.get(geomCellKey);\n};\n\n/**\n * Creates axis cells based on the set of axes\n *\n * @param {Selection} selection Contains a selection of the axis units\n * @param {Array} axes Actual axis units\n * @param {number} axisIndex 0-> primary axis, 1-> secondary axis(when dual axis is made)\n * @param {Object} cells Contains a collection of the cells\n * @return {Object} return either set of axis/blank cells depending on the config\n */\n\nconst createAxisCells = (selection, axes, axisIndex, cells) =>\n createSelection(selection, axis => axis, axes, (item, i) => i + item.reduce((e, n) => {\n const id = n.id + axisIndex;\n return e + id;\n }, '')).map((axis) => {\n if (axis && axis[axisIndex]) {\n const axisInst = axis[axisIndex];\n const { orientation, show } = axisInst.config();\n\n return new cells.AxisCell().source(axisInst).config({\n isOffset: orientation === AxisOrientation.LEFT || orientation === AxisOrientation.TOP,\n show\n });\n }\n return new cells.BlankCell();\n });\n\n/**\n *\n *\n * @param {*} context\n * @param {*} selectionObj\n * @param {*} cells\n * @retur\n */\nconst axisPlaceholderGn = (context, selObj, cells) => {\n const {\n matrices\n } = context;\n const {\n axesMatrix\n } = matrices;\n\n return (type, axisFrom) => {\n const axes = axesMatrix[`${type}`];\n\n if (axes && axes.length) {\n if (type === X || type === Y) {\n const fieldNames = type === Y ? ROWS : COLUMNS;\n\n [PRIMARY, SECONDARY].forEach((fieldType, index) => {\n const selObjProp = `${fieldNames}${fieldType}`;\n let axisIndex = index;\n let axesForDraw = axes;\n if (axisFrom === RIGHT || axisFrom === BOTTOM) {\n axisIndex = 1 - axisIndex;\n }\n if (!getObjProp(axes, 0, axisIndex)) {\n axesForDraw = [];\n }\n selObj[selObjProp] = createAxisCells(selObj[selObjProp], axesForDraw, axisIndex, cells);\n });\n } else {\n selObj.rowsPrimary = createAxisCells(selObj.rowPrime, axes.map(() => []), 0, cells);\n selObj.columnsPrimary = createAxisCells(selObj.colPrime, axes[0], 0, cells);\n }\n }\n return selObj;\n };\n};\n\n/**\n * Creates header cells based on the set of headers\n *\n * @param {Object} selection Contains a selection of the header units\n * @param {string} headers Contains a list of the headers\n * @param {Object} cells Contains a collection of the cells\n * @param {Object} labelManager smart label instance\n * @return {Object} return either set of header cells depending on the config\n */\nconst createTextCells = (selection, headers, cells, labelManager) => createSelection(selection,\n label => new cells.TextCell({}, { labelManager }).source(label), headers, (key, i) => key + i);\n\n/**\n *\n *\n * @param {*} context\n * @param {*} selectionObj\n * @param {*} cells\n * @param {*} labelManager\n * @return\n */\nconst headerPlaceholderGn = (context, selectionObj, cells, labelManager) => {\n const {\n axis,\n keys,\n type,\n facetConfig\n } = context;\n const counter = axis.length / keys.length;\n const selectionKeys = keys.length ? axis.map((d, i) => keys[Math.floor(i / counter)]) : [];\n return createSelection(selectionObj[`${type}Headers`], keySet => keySet, selectionKeys, (keySet, i) =>\n `${keySet.join(',')}-${i}`).map(keySet => createTextCells(null, keySet, cells, labelManager)\n .map((cell, k, i) => cell.source(keySet[i]).config(facetConfig || {})));\n};\n\n/**\n * Creates a set of placeholders as a part of selection object\n *\n * @param {Array} normalizedOptions contains normalized rows and columns\n * @param {Array} matrices contains axis and value matrices\n * @param {aArrayny} projections contains set of row and column projections\n * @param {Object} cells Contains a collection of the cells\n * @param {Object} labelManager smart label instance\n * @return {Object} Creates a set of placeholders as a part of selections\n */\nconst generatePlaceholders = (context, cells, labelManager) => {\n let selectionObj;\n const {\n matrices,\n fields,\n facetsAndProjections,\n selection,\n facetConfig,\n encoders\n } = context;\n const {\n rows,\n columns\n } = fields;\n const {\n valuesMatrix\n } = matrices;\n const {\n rowProjections,\n colProjections\n } = facetsAndProjections;\n const {\n rowKeys,\n columnKeys\n } = valuesMatrix;\n const takeAxisFrom = encoders.simpleEncoder._axisFrom;\n const takeHeaderFrom = encoders.simpleEncoder._headerFrom;\n\n selectionObj = selection || {};\n\n ['pie', X, Y].forEach((axis) => {\n const axisFrom = axis === X ? takeAxisFrom.column : takeAxisFrom.row;\n selectionObj = axisPlaceholderGn(context, selectionObj, cells)(axis, axisFrom);\n });\n\n const {\n rowsPrimary,\n rowsSecondary,\n columnsPrimary,\n columnsSecondary\n } = selectionObj;\n\n const rowAxis = rowsPrimary && rowsPrimary.getObjects().length ? rowsPrimary.getObjects() :\n (rowsSecondary && rowsSecondary.getObjects().length ? rowsSecondary.getObjects() : []);\n const colAxis = columnsPrimary && columnsPrimary.getObjects().length ? columnsPrimary.getObjects() :\n (columnsSecondary && columnsSecondary.getObjects().length ? columnsSecondary.getObjects() : []);\n\n const headerConfig = [\n { type: LEFT, section: rows[0], axis: rowAxis, headerFrom: takeHeaderFrom.row },\n { type: RIGHT, section: rows[1], axis: rowAxis, headerFrom: takeHeaderFrom.row },\n { type: TOP, section: columns[0], axis: colAxis, headerFrom: takeHeaderFrom.column },\n { type: BOTTOM, section: columns[1], axis: colAxis, headerFrom: takeHeaderFrom.column }\n ];\n\n headerConfig.forEach((config, index) => {\n let keys;\n let length;\n const {\n type,\n section,\n axis,\n headerFrom\n } = config;\n\n if (index < 2) {\n keys = rowKeys;\n length = rowProjections.length > 0 ? rowProjections.length : 1;\n } else {\n keys = columnKeys;\n length = colProjections.length > 0 ? colProjections.length : 1;\n }\n\n if (section.length && headerFrom === type && axis && keys.length) {\n const hContext = { axis, length, type };\n let headers = [];\n if (index < 2) {\n hContext.keys = keys;\n hContext.facetConfig = facetConfig.rows;\n headers = headerPlaceholderGn(hContext, selectionObj, cells, labelManager);\n } else {\n hContext.facetConfig = facetConfig.columns;\n hContext.keys = keys[0].map((key, i) => keys.map(e => e[i]));\n headers = headerPlaceholderGn(hContext, selectionObj, cells, labelManager);\n }\n selectionObj[`${type}Headers`] = headers;\n } else {\n selectionObj[`${type}Headers`] = null;\n }\n });\n return selectionObj;\n};\n\n/**\n * Generates matrices\n *\n * @param {Object} config Configuration to generate matrices\n * @param {Array} matrices Matrices containing the set of visual units and axes units\n * @param {Object} cells Contains a collection of the cells\n * @param {Object} labelManager smart label instance\n * @return {Object} contains a collection of matrices\n */\nexport const generateMatrices = (context, matrices, cells, labelManager) => {\n const {\n unitHeight,\n unitWidth,\n facetsAndProjections,\n normalizedRows,\n normalizedColumns,\n selection,\n axisFrom,\n facetConfig,\n encoders\n } = context;\n const placeholderContext = {\n fields: {\n rows: normalizedRows,\n columns: normalizedColumns\n },\n matrices,\n facetsAndProjections,\n selection,\n axisFrom,\n facetConfig,\n encoders\n };\n // Generate placeholders for all matrices\n const selectionObj = generatePlaceholders(placeholderContext, cells, labelManager);\n const {\n columnsPrimary,\n columnsSecondary,\n rowsPrimary,\n rowsSecondary,\n leftHeaders,\n topHeaders,\n bottomHeaders,\n rightHeaders\n } = selectionObj;\n const [rowPrime, rowSec, colPrime, colSec] = [rowsPrimary, rowsSecondary, columnsPrimary, columnsSecondary]\n .map(d => (d ? d.getObjects() : []));\n const [leftFacets, rightFacets] = [leftHeaders, rightHeaders].map(e => (e ? e.getObjects()\n .map(f => f.getObjects()) : []));\n\n // Compute left matrix using left headers and the axes on the rows\n let leftMatrix = leftFacets.length ? leftFacets.map((d, i) => {\n rowPrime[i] = rowPrime[i] ? [rowPrime[i]] : [];\n return [...d, ...rowPrime[i]];\n }) : (rowPrime ? rowPrime.map(d => [d]) : []);\n\n // Compute right matrix using right headers and the axes on the rows\n const rightMatrix = rowSec.length ? rowSec.map((d, i) => [d, ...(rightFacets[i] || [])]) : (rightFacets.length ?\n rightFacets.map(d => [...d]) : []);\n\n const topMatrix = [];\n if (topHeaders) {\n const headers = topHeaders.getObjects();\n headers.forEach((e) => {\n const innerHeaders = e.getObjects();\n innerHeaders.forEach((x, i) => {\n topMatrix[i] = topMatrix[i] || [];\n topMatrix[i].push(x);\n });\n });\n }\n // Compute top matrix using the top headers and axes on the columns\n if (colPrime.length) {\n topMatrix.push(colPrime);\n }\n\n // Bottom and right matrices are prepared using the user config.\n let bottomMatrix = [];\n if (colSec.length) {\n bottomMatrix.push(colSec);\n }\n const currentBottomLength = bottomMatrix.length;\n if (bottomHeaders) {\n const headers = bottomHeaders.getObjects();\n headers.forEach((e) => {\n const innerHeaders = e.getObjects();\n innerHeaders.forEach((x, i) => {\n bottomMatrix[i + currentBottomLength] = bottomMatrix[i + currentBottomLength] || [];\n bottomMatrix[i + currentBottomLength].push(x);\n });\n });\n }\n\n if (!leftMatrix.length && !rightMatrix.length) {\n const cell = new cells.BlankCell();\n cell.setAvailableSpace(unitWidth, unitHeight);\n leftMatrix = [[cell]];\n }\n\n if (!topMatrix.length && (!bottomMatrix.length || !bottomMatrix[0].length)) {\n const cell = new cells.BlankCell();\n cell.setAvailableSpace(unitWidth, unitHeight);\n bottomMatrix = [[cell]];\n }\n\n return {\n rows: [leftMatrix, rightMatrix],\n columns: [topMatrix, bottomMatrix],\n selectionObj\n };\n};\n\n/**\n * Computes matrices for a group\n *\n * @param {Object} datamodel on which the matrices are to be computed\n * @param {Object} config configuration of the matrices\n * @param {Object} layerRegistry contains the registered layers\n * @return {Object} conputed matrices\n * @memberof MatrixResolver\n */\nexport const computeMatrices = (context, config) => {\n const {\n resolver,\n datamodel,\n componentRegistry,\n encoders\n } = context;\n const {\n globalConfig,\n selection,\n transform\n } = config;\n const groupBy = globalConfig.autoGroupBy;\n const { smartlabel: labelManager } = resolver.dependencies();\n const fieldMap = datamodel.getFieldsConfig();\n const layerConfig = resolver.layerConfig();\n const registry = resolver.registry();\n const { fields: normalizedRows } = resolver.horizontalAxis();\n const { fields: normalizedColumns } = resolver.verticalAxis();\n const otherEncodings = resolver.optionalProjections(config, layerConfig);\n const facetsAndProjections = resolver.getAllFields();\n const matrixGnContext = {\n // Configuration to be passed to generate the different matrices.\n // A common config is used for both value matrices and other matrices\n normalizedColumns,\n normalizedRows,\n facetsAndProjections,\n layers: layerConfig,\n fieldMap,\n otherEncodings,\n encoders,\n facetConfig: globalConfig.facetConfig || {},\n axisFrom: globalConfig.axisFrom || {},\n selection\n };\n const cells = {\n GeomCell: resolver.getCellDef(registry.GeomCell),\n AxisCell: resolver.getCellDef(registry.AxisCell),\n BlankCell: resolver.getCellDef(registry.BlankCell),\n TextCell: resolver.getCellDef(registry.TextCell)\n };\n const isRowSizeEqual = isDistributionEqual(normalizedRows);\n const isColumnSizeEqual = isDistributionEqual(normalizedColumns);\n\n resolver.colCells({});\n resolver.rowCells({});\n resolver.datamodelTransform(transform || {});\n\n // Cell creation begins here\n resolver.resetSimpleAxes();\n\n const {\n entryCellMap\n } = resolver.cacheMaps();\n const newCacheMap = {\n exitCellMap: entryCellMap,\n entryCellMap: new Map()\n };\n\n resolver.cacheMaps(newCacheMap);\n\n const valueCellContext = {\n config: globalConfig,\n suppliedLayers: encoders.simpleEncoder.serializeLayerConfig(resolver.layerConfig()),\n resolver,\n cell: cells.GeomCell,\n encoder: encoders.simpleEncoder,\n newCacheMap,\n detailFields: config.detail\n };\n const fieldsConfig = datamodel.getFieldsConfig();\n let groupedModel = datamodel;\n if (!groupBy.disabled) {\n const fields = getFieldsFromSuppliedLayers(valueCellContext.suppliedLayers, datamodel.getFieldsConfig());\n const allFields = extractFields(facetsAndProjections, fields);\n\n const dimensions = allFields.filter(field =>\n fieldsConfig[field] && fieldsConfig[field].def.type === FieldType.DIMENSION);\n const aggregationFns = groupBy.measures;\n\n groupedModel = datamodel.groupBy(dimensions.length ? dimensions : [''], aggregationFns).project(allFields);\n }\n\n // return a callback function to create the cells from the matrix\n const cellCreator = resolver.valueCellsCreator(valueCellContext);\n // Creates value matrices from the datamodel and configs\n const valueMatrixInfo = getMatrixModel(groupedModel, facetsAndProjections, cellCreator);\n\n resolver.cacheMaps().exitCellMap.forEach((placeholder) => {\n placeholder.remove();\n });\n resolver.cacheMaps().exitCellMap.clear();\n resolver.valueMatrix(valueMatrixInfo.matrix);\n resolver.createUnits(componentRegistry, config);\n\n const { xAxes, yAxes } = mutateAxesFromMap(resolver.cacheMaps(), resolver.axes());\n\n resolver.axes({\n x: xAxes,\n y: yAxes\n });\n\n const matrices = {\n valuesMatrix: valueMatrixInfo,\n axesMatrix: resolver.axes()\n };\n // Create all matrices\n const { rows, columns, selectionObj } = generateMatrices(matrixGnContext, matrices, cells, labelManager);\n\n resolver.rowMatrix(rows);\n resolver.columnMatrix(columns);\n\n return {\n rows: resolver.rowMatrix(),\n columns: resolver.columnMatrix(),\n values: resolver.valueMatrix(),\n isColumnSizeEqual,\n isRowSizeEqual,\n selection: selectionObj,\n dataModels: {\n groupedModel,\n parentModel: datamodel\n }\n };\n};\n","import { VisualUnit } from '@chartshq/visual-unit';\nimport {\n initializeCacheMaps,\n headerCreator,\n extractUnitConfig,\n setFacetsAndProjections\n} from './group-utils';\nimport {\n ROW, COL, LEFT, RIGHT, COLOR, SIZE, SHAPE, DETAIL, CELL, X_AXES, Y_AXES, ENTRY_CELLS, EXIT_CELLS, INITIALIZED,\n AXIS, UNIT, BEFORE_UPDATE, UPDATED, VALUE_MATRIX, FACET_HEADERS\n} from '../enums/constants';\nimport { createValueCells, computeMatrices } from './cell-creator';\n/**\n * Resolves the matrices from configuration provided\n *\n * @export\n * @class MatrixResolver\n */\nexport default class MatrixResolver {\n\n /**\n * Creates an instance of MatrixResolver.\n * @param {Object} dependencies needed to run the resolver\n * @memberof MatrixResolver\n */\n constructor (dependencies) {\n this._registry = {};\n this._layerConfig = [];\n this._matrixLayers = [];\n this._dependencies = dependencies;\n this._rowMatrix = [];\n this._columnMatrix = [];\n this._valueMatrix = [];\n this._facets = {};\n this._projections = {};\n this._datamodelTransform = {};\n this._units = [];\n this._cacheMaps = {};\n this._axes = {\n x: {},\n y: {},\n color: [],\n size: [],\n shape: []\n };\n\n this.cacheMaps(initializeCacheMaps());\n }\n\n /**\n * Set: Registers placeholders, Get: return {Object} those placeholders\n *\n * @param {Object} placeholders cells that will construct the group\n * @return {Object} Either current instance or the set of placeholders\n * @memberof MatrixResolver\n */\n registry (...placeholders) {\n if (placeholders.length) {\n Object.entries(placeholders[0]).forEach((val) => {\n this._registry[val[0]] = val[1];\n });\n return this;\n }\n return this._registry;\n }\n\n /**\n * Used to set the layer config from outside or get current layer info\n *\n * @param {Object} type configuration of layer provided externally\n * @return {Object} either the layer or current instance\n * @memberof MatrixResolver\n */\n dependencies (...dep) {\n if (dep.length) {\n this._dependencies = dep[0];\n return this;\n }\n return this._dependencies;\n }\n\n /**\n * Used to set the layer config from outside or get current layer info\n *\n * @param {Object} type configuration of layer provided externally\n * @return {Object} either the layer or current instance\n * @memberof MatrixResolver\n */\n units (...unitArr) {\n if (unitArr.length) {\n this._units = unitArr[0];\n return this;\n }\n return this._units;\n }\n\n /**\n * Used to set the layer config from outside or get current layer info\n *\n * @param {Object} layer configuration of layer provided externally\n * @return {Object} either the layer or current instance\n * @memberof MatrixResolver\n */\n layerConfig (...config) {\n if (config.length) {\n this._layerConfig = config[0];\n return this;\n }\n return this._layerConfig;\n }\n\n /**\n * Used to set the layer config from outside or get current layer info\n *\n * @param {Object} type configuration of layer provided externally\n * @return {Object} either the layer or current instance\n * @memberof MatrixResolver\n */\n matrixLayers (...layers) {\n if (layers.length) {\n this._matrixLayers = layers[0];\n return this;\n }\n return this._matrixLayers;\n }\n\n /**\n * Used to set the layer config from outside or get current layer info\n *\n * @param {Object} type configuration of layer provided externally\n * @return {Object} either the layer or current instance\n * @memberof MatrixResolver\n */\n datamodelTransform (...transform) {\n if (transform.length) {\n this._datamodelTransform = transform[0];\n return this;\n }\n return this._datamodelTransform;\n }\n\n /**\n * Used to set the layer config from outside or get current layer info\n *\n * @param {Object} type configuration of layer provided externally\n * @return {Object} either the layer or current instance\n * @memberof MatrixResolver\n */\n cacheMaps (...maps) {\n if (maps.length) {\n [CELL, X_AXES, Y_AXES, ENTRY_CELLS, EXIT_CELLS].forEach((e) => {\n this._cacheMaps[`${e}Map`] = maps[0][`${e}Map`] || this._cacheMaps[`${e}Map`];\n });\n return this;\n }\n return this._cacheMaps;\n }\n\n /**\n * Used to set the layer config from outside or get current layer info\n *\n * @param {Object} type configuration of layer provided externally\n * @return {Object} either the layer or current instance\n * @memberof MatrixResolver\n */\n rowCells (...cells) {\n if (cells.length) {\n this._rowCells = cells[0];\n return this;\n }\n return this._rowCells;\n }\n\n /**\n * Used to set the layer config from outside or get current layer info\n *\n * @param {Object} type configuration of layer provided externally\n * @return {Object} either the layer or current instance\n * @memberof MatrixResolver\n */\n colCells (...cells) {\n if (cells.length) {\n this._colCells = cells[0];\n return this;\n }\n return this._colCells;\n }\n\n /**\n * Used to set the layer config from outside or get current layer info\n *\n * @param {Object} type configuration of layer provided externally\n * @return {Object} either the layer or current instance\n * @memberof MatrixResolver\n */\n axes (...axes) {\n if (axes.length) {\n this._axes = Object.assign({}, this._axes, axes[0]);\n return this;\n }\n return this._axes;\n }\n\n /**\n * Used to set the layer config from outside or get current layer info\n *\n * @param {Object} type configuration of layer provided externally\n * @return {Object} either the layer or current instance\n * @memberof MatrixResolver\n */\n rowMatrix (...rowMat) {\n if (rowMat.length) {\n this._rowMatrix = rowMat[0];\n return this;\n }\n return this._rowMatrix;\n }\n\n /**\n * Used to set the layer config from outside or get current layer info\n *\n * @param {Object} type configuration of layer provided externally\n * @return {Object} either the layer or current instance\n * @memberof MatrixResolver\n */\n columnMatrix (...colMat) {\n if (colMat.length) {\n this._columnMatrix = colMat[0];\n return this;\n }\n return this._columnMatrix;\n }\n\n /**\n * Used to set the layer config from outside or get current layer info\n *\n * @param {Object} type configuration of layer provided externally\n * @return {Object} either the layer or current instance\n * @memberof MatrixResolver\n */\n valueMatrix (...valMat) {\n if (valMat.length) {\n this._valueMatrix = valMat[0];\n return this;\n }\n return this._valueMatrix;\n }\n\n /**\n *\n *\n * @param {*} facets\n * @return\n * @memberof MatrixResolver\n */\n facets (...facets) {\n if (facets.length) {\n Object.entries(facets[0]).forEach((e) => {\n this._facets[e[0]] = e[1];\n });\n return this;\n }\n return this._facets;\n }\n\n /**\n *\n *\n * @param {*} projections\n * @return\n * @memberof MatrixResolver\n */\n projections (...projections) {\n if (projections.length) {\n Object.entries(projections[0]).forEach((e) => {\n this._projections[e[0]] = e[1];\n });\n return this;\n }\n return this._projections;\n }\n\n /**\n *\n *\n * @param {*} config\n * @param {*} layerConfig\n * @return\n * @memberof MatrixResolver\n */\n optionalProjections (config, layerConfig) {\n const otherEncodings = {};\n const optionalProjections = [];\n const otherEncodingTypes = [SIZE, COLOR, SHAPE];\n\n otherEncodingTypes.forEach((type) => {\n if (config[type] && config[type].field) {\n const enc = config[type];\n otherEncodings[type] = enc.field;\n optionalProjections.push(enc.field);\n }\n });\n\n if (config[DETAIL]) {\n optionalProjections.push(...config.detail);\n }\n\n if (layerConfig.length) {\n layerConfig.forEach((layer) => {\n if (layer.encoding) {\n Object.values(layer.encoding).forEach((enc) => {\n if (enc && optionalProjections.indexOf(enc.field) === -1) {\n optionalProjections.push(enc.field ? enc.field : enc);\n }\n });\n }\n });\n }\n this.projections({ optionalProjections });\n return otherEncodings;\n }\n\n /**\n * return the normalized set of rows and facets and projections\n *\n * @param {Object} rows parameters needed to set horizontal axis consisiting of rows\n * @return {Object} facets, projections and normalized rows\n * @memberof MatrixResolver\n */\n horizontalAxis (rows, encoder) {\n if (rows) {\n this._horizontalAxis = setFacetsAndProjections(this, { type: ROW, fields: rows }, encoder);\n return this;\n }\n return this._horizontalAxis;\n }\n\n /**\n * return the normalized set of columns and facets and projections\n *\n * @param {Object} columns parameters needed to set vertical axis consisiting of columns\n * @return {Object} facets, projections and normalized columns\n * @memberof MatrixResolver\n */\n verticalAxis (columns, encoder) {\n if (columns) {\n this._verticalAxis = setFacetsAndProjections(this, { type: COL, fields: columns }, encoder);\n return this;\n }\n return this._verticalAxis;\n }\n\n /**\n * Gets the class definition of a particular cell type(if the particular type has been extended, that particular\n * definition is returned)\n *\n * @param {Object} cell cell whose class definition is to be retrieved\n * @return {Object} cell definition\n * @memberof MatrixResolver\n */\n getCellDef (cell) {\n const registry = this.registry();\n\n Object.values(registry).forEach((e) => {\n if (e.prototype instanceof cell) {\n cell = e;\n }\n });\n return cell;\n }\n\n /**\n * return a visual cell creator along with its axis information to be injected to the datamodel creation\n * function\n *\n * @param {Object} GeomCell Type of cell to be created\n * @return {Object} Created cell\n * @memberof MatrixResolver\n */\n valueCellsCreator (context) {\n // reset matrix layers\n this.matrixLayers([]);\n\n return (datamodel, fieldInfo, facets) => createValueCells(context, datamodel, fieldInfo, facets);\n }\n\n /**\n * Callback to be applied on each cell of a matrix of a particular type\n *\n * @param {string} matrixType type of matrix on which callback is to be applied\n * @param {Function} callback function to be applied to each cell\n * @memberof MatrixResolver\n */\n forEach (matrixType, callback) {\n this[matrixType]().forEach((row, rIndex) => {\n row.forEach((col, cIndex) => {\n callback(rIndex, cIndex, col);\n });\n });\n }\n\n /**\n *\n *\n * @return\n * @memberof MatrixResolver\n */\n getAllFields () {\n const retObj = this.projections();\n\n Object.entries(this.facets()).forEach((e) => {\n retObj[e[0]] = e[1];\n });\n return retObj;\n }\n\n /**\n *\n *\n * @memberof MatrixResolver\n */\n resetSimpleAxes () {\n return this.axes({\n x: new Set(),\n y: new Set()\n });\n }\n\n /**\n *\n *\n * @param {*} componentRegistry\n * @param {*} config\n * @memberof MatrixResolver\n */\n createUnits (componentRegistry, config) {\n const {\n globalConfig,\n alias\n } = config;\n const {\n layerRegistry,\n sideEffectRegistry\n } = componentRegistry;\n const {\n smartlabel: smartLabel,\n lifeCycleManager\n } = this.dependencies();\n // Provide the source for the matrix\n const units = [];\n // Setting unit configuration\n const unitConfig = extractUnitConfig(globalConfig || {});\n\n this.forEach(VALUE_MATRIX, (i, j, el) => {\n let unit = el.source();\n if (!unit) {\n unit = VisualUnit.create({\n layerRegistry,\n sideEffectRegistry\n }, {\n smartLabel,\n lifeCycleManager\n });\n el.source(unit);\n units.push(unit);\n }\n unit.parentAlias(alias);\n el.config(unitConfig);\n });\n\n lifeCycleManager.notify({ client: units, action: INITIALIZED, formalName: UNIT });\n return this.units(units);\n }\n\n /**\n *\n *\n * @param {*} config\n * @memberof MatrixResolver\n */\n setDomains (config, datamodel, encoders) {\n const {\n color,\n shape,\n size,\n globalConfig\n } = config;\n const groupBy = globalConfig.autoGroupBy;\n const {\n rowFacets,\n colFacets\n } = this.getAllFields();\n const encoding = {\n color,\n shape,\n size\n };\n const facetFields = [...rowFacets.map(e => e.toString()), ...colFacets.map(e => e.toString())];\n const retContext = {\n domains: encoders.simpleEncoder.getRetinalFieldsDomain(datamodel, encoding, facetFields, groupBy),\n axes: this.axes(),\n encoding\n };\n encoders.retinalEncoder.setCommonDomain(retContext);\n return this;\n }\n\n /**\n *\n *\n * @return\n * @memberof MatrixResolver\n */\n getRetinalAxes () {\n const {\n color,\n shape,\n size\n } = this.axes();\n\n return {\n color: [...color],\n shape: [...shape],\n size: [...size]\n };\n }\n\n /**\n *\n *\n * @param {*} type\n * @return\n * @memberof MatrixResolver\n */\n getSimpleAxes (type) {\n return this.axes()[`${type}`];\n }\n\n /**\n *\n *\n * @param {*} datamodel\n * @param {*} config\n * @memberof MatrixResolver\n */\n createRetinalAxes (fieldsConfig, config, encoders) {\n const layerConfig = this.layerConfig();\n this.optionalProjections(config, layerConfig);\n const retinalAxes = encoders.retinalEncoder.createAxis({\n fieldsConfig,\n config,\n axes: this.axes()\n });\n const {\n lifeCycleManager\n } = this.dependencies();\n\n [COLOR, SHAPE, SIZE].forEach((e) => {\n this.axes()[e] = retinalAxes[e];\n });\n\n lifeCycleManager.notify({ client: this.axes(), action: INITIALIZED, formalName: AXIS });\n lifeCycleManager.notify({ client: this.units(), action: BEFORE_UPDATE, formalName: UNIT });\n\n const units = [];\n const matrixLayers = this.matrixLayers();\n\n this.forEach(VALUE_MATRIX, (i, j, el) => {\n el.axes(retinalAxes);\n el.source() && el.source().retinalFields(config);\n el.layerDef(encoders.retinalEncoder.getLayerConfig(config, matrixLayers[i][j]));\n el.updateModel();\n\n units.push(el.source());\n });\n\n lifeCycleManager.notify({ client: units, action: UPDATED, formalName: UNIT });\n return this;\n }\n\n /**\n *\n *\n * @param {*} placeholders\n * @param {*} fieldNames\n * @return\n * @memberof MatrixResolver\n */\n createHeaders (placeholders, fieldNames, config) {\n let bottomLeft = [];\n let bottomRight = [];\n const {\n rows,\n columns\n } = placeholders;\n const {\n smartlabel: labelManager,\n lifeCycleManager\n } = this.dependencies();\n const TextCell = this.getCellDef(this.registry().TextCell);\n const BlankCell = this.getCellDef(this.registry().BlankCell);\n const [leftRows, rightRows] = rows;\n const [topCols, bottomCols] = columns;\n const rowHeaders = fieldNames.rows;\n const blankCellCreator = cell => new BlankCell().config({ show: cell.config().show });\n\n // Headers and footers are created based on the rows. Thereafter, using the column information\n // they are tabularized into the current structure\n const headers = {\n left: headerCreator(leftRows, rowHeaders[0], config.showHeaders ? TextCell : BlankCell, labelManager),\n right: headerCreator(rightRows, rowHeaders[1], config.showHeaders ? TextCell : BlankCell, labelManager)\n };\n const footers = {\n left: leftRows.length > 0 ? leftRows[0].map(blankCellCreator) : [],\n right: rightRows.length > 0 ? rightRows[0].map(blankCellCreator) : []\n };\n const [topLeft, topRight] = [LEFT, RIGHT].map(type => topCols.map((col, i) => {\n if (i === topCols.length - 1) {\n return headers[type];\n }\n return footers[type];\n }));\n\n // Creating only bottom matrices if there is no information on the top\n if (topCols.length === 0) {\n [bottomLeft, bottomRight] = [LEFT, RIGHT].map(type => bottomCols.map((col, i) => {\n if (i === 0) {\n return headers[type];\n }\n return footers[type];\n }));\n } else {\n bottomLeft = bottomCols.map(() => (leftRows.length > 0 ? leftRows[0].map(blankCellCreator) : []));\n bottomRight = bottomCols.map(() => (rightRows.length > 0 ? rightRows[0].map(blankCellCreator) : []));\n }\n\n lifeCycleManager.notify({\n client: [topLeft, topRight, bottomLeft, bottomRight],\n action: INITIALIZED,\n formalName: FACET_HEADERS\n });\n\n return { topLeft, topRight, bottomLeft, bottomRight };\n }\n\n /**\n *\n *\n * @param {*} datamodel\n * @param {*} config\n * @param {*} componentRegistry\n * @param {*} encoders\n * @return\n * @memberof MatrixResolver\n */\n getMatrices (datamodel, config, componentRegistry, encoders) {\n const context = {\n datamodel,\n componentRegistry,\n encoders,\n resolver: this\n };\n\n return computeMatrices(context, config);\n }\n}\n","/**\n *\n *\n * @export\n * @class ValueMatrix\n */\nclass ValueMatrix {\n\n /**\n *Creates an instance of ValueMatrix.\n * @param {*} matrixArr\n * @memberof ValueMatrix\n */\n constructor (matrixArr) {\n const instancesById = {};\n\n this.matrix(matrixArr);\n this.filter(() => true);\n\n this.each((el, rIdx, cIdx) => {\n const cellValue = el.valueOf();\n if (cellValue && cellValue.id) {\n const id = cellValue.id();\n instancesById[id] = {\n instance: cellValue,\n rowIndex: rIdx,\n colIndex: cIdx\n };\n }\n });\n\n this.instancesById(instancesById);\n }\n\n /**\n *\n *\n * @param {*} id\n * @return\n * @memberof ValueMatrix\n */\n instancesById (...id) {\n if (id.length) {\n this._instancesById = id[0];\n return this;\n }\n return this._instancesById;\n }\n\n /**\n *\n *\n * @param {*} m\n * @return\n * @memberof ValueMatrix\n */\n matrix (...matrix) {\n if (matrix.length) {\n this._matrix = matrix[0];\n return this;\n }\n return this._matrix;\n }\n\n /**\n *\n *\n * @param {*} fn\n * @return\n * @memberof ValueMatrix\n */\n filter (...fn) {\n if (fn.length) {\n this._filterFn = fn[0];\n return this;\n }\n return this._filterFn;\n }\n\n /**\n *\n *\n * @return\n * @memberof ValueMatrix\n */\n width () {\n let rowWidth = 0;\n\n this.matrix().forEach((row) => {\n let currentRowWidth = 0;\n row.forEach((cell) => {\n currentRowWidth += cell.getLogicalSpace().width;\n });\n rowWidth = Math.max(rowWidth, currentRowWidth);\n });\n return rowWidth;\n }\n\n /**\n *\n *\n * @return\n * @memberof ValueMatrix\n */\n height () {\n let rowHeight = 0;\n\n this.matrix().forEach((row) => {\n let currentRowHeight = 0;\n row.forEach((cell) => {\n currentRowHeight = Math.max(currentRowHeight, cell.getLogicalSpace().height);\n });\n rowHeight += currentRowHeight;\n });\n return rowHeight;\n }\n\n /**\n *\n *\n * @param {*} fn\n * @return\n * @memberof ValueMatrix\n */\n each (fn) {\n const matrix = this.matrix();\n const filterFn = this.filter();\n\n matrix.forEach((row, rIndex) => {\n row.forEach((col, cIndex) => {\n if (filterFn(col)) {\n fn(col, rIndex, cIndex, matrix);\n }\n });\n });\n return this;\n }\n\n /**\n *\n *\n * @param {*} id\n * @return\n * @memberof ValueMatrix\n */\n findPlaceHolderById (id) {\n return this.instancesById()[id];\n }\n\n /**\n *\n *\n * @return\n * @memberof ValueMatrix\n */\n getMatrixArray () {\n return this.matrix();\n }\n}\n\nexport default ValueMatrix;\n","import { RetinalEncoder } from '../encoder';\nimport { DATA_UPDATE_COUNTER } from '../enums/defaults';\nimport { getEncoder, getBorders } from '../group-helper';\nimport ValueMatrix from './value-matrix';\nimport localOptions from './local-options';\n\nconst sanitizeRetinalConfig = (retinalConf) => {\n const conf = {};\n for (const key in retinalConf) {\n const confValue = retinalConf[key];\n if (typeof confValue === 'string' || !confValue) {\n conf[key] = {\n field: retinalConf[key]\n };\n } else {\n conf[key] = confValue;\n }\n }\n return conf;\n};\n\n/**\n *\n *\n * @param {*} placeholder\n * @memberof VisualGroup\n */\nconst setMatrixInstances = (context, placeholder) => {\n context._composition.matrices = {\n value: new ValueMatrix(placeholder.values),\n left: new ValueMatrix(placeholder.rows[0]),\n right: new ValueMatrix(placeholder.rows[1]),\n top: new ValueMatrix(placeholder.columns[0]),\n bottom: new ValueMatrix(placeholder.columns[1])\n };\n return context;\n};\n\n/**\n *\n *\n * @param {*} context\n * @returns\n */\nexport const setupChangeListeners = (context) => {\n context.store().registerImmediateListener([...Object.keys(localOptions), DATA_UPDATE_COUNTER], (...params) => {\n const datamodel = context.data();\n const [config, rows, columns, color, shape, size, detail, layers, transform] = params;\n\n if (datamodel && rows[1] && columns[1]) {\n // Get the resolver for the matrices\n const resolver = context.resolver();\n // Prepare configuration for matrix preparation\n let matrixConfig = {\n selection: context.selection(),\n alias: context.alias(),\n globalConfig: config[1] || {},\n rows: rows[1],\n columns: columns[1],\n detail: detail[1],\n layers: layers[1],\n transform: transform[1]\n };\n\n const retinalConfig = sanitizeRetinalConfig({\n color: color[1],\n shape: shape[1],\n size: size[1]\n });\n\n matrixConfig = Object.assign(matrixConfig, retinalConfig);\n // Create the encoders for the group\n const encoders = {};\n encoders.retinalEncoder = new RetinalEncoder();\n encoders.simpleEncoder = getEncoder(layers[1]);\n\n // Set the group type\n context.groupType(encoders.simpleEncoder.constructor.type());\n\n // Get sanitized fields as instances of the Vars Class\n const fields = encoders.simpleEncoder.fieldSanitizer(datamodel, matrixConfig);\n encoders.simpleEncoder.setAxisAndHeaders(config[1] ? config[1].axisFrom : {}, fields);\n // Setting layers for the code\n layers[1] && resolver.layerConfig(layers[1]);\n // Set the row and column axes\n resolver.horizontalAxis(fields.rows, encoders).verticalAxis(fields.columns, encoders);\n // Getting the placeholders\n const placeholderInfo = resolver.getMatrices(datamodel, matrixConfig, context.registry(), encoders);\n context._groupedDataModel = placeholderInfo.dataModels.groupedModel;\n // Set the selection object\n context.selection(placeholderInfo.selection);\n\n // Create retinal axes\n resolver.createRetinalAxes(placeholderInfo.dataModels.parentModel.getFieldsConfig(), retinalConfig,\n encoders);\n\n // Domains are evaluated for each of the axes for commonality\n resolver.setDomains(matrixConfig, placeholderInfo.dataModels, encoders);\n\n // Create matrix instances\n setMatrixInstances(context, placeholderInfo);\n\n // Prepare corner matrices\n context.cornerMatrices(resolver.createHeaders(placeholderInfo, fields, config[1]));\n\n // Set placeholder information\n context.placeholderInfo(placeholderInfo);\n\n context._composition.axes = resolver.axes();\n context.metaData({\n border: getBorders(placeholderInfo, encoders.simpleEncoder)\n });\n }\n return context;\n });\n return context;\n};\n","import { DATA_UPDATE_COUNTER } from '../enums/defaults';\n\nexport const PROPS = {\n alias: {},\n data: {\n sanitization: (context, value) => {\n if (context._data !== value) {\n const store = context.store();\n let hasDataUpdated = store.get(DATA_UPDATE_COUNTER);\n store.commit(DATA_UPDATE_COUNTER, ++hasDataUpdated);\n }\n return value;\n }\n },\n cornerMatrices: {},\n groupType: {},\n matrixInstance: {},\n metaData: {},\n placeholderInfo: {},\n resolver: {},\n registry: {\n sanitization: (context, value) => {\n if (context.resolver) {\n context.resolver().registry(value.cellRegistry);\n }\n return value;\n }\n },\n selection: {},\n store: {}\n};\n","import { transactor, generateGetterSetters } from 'muze-utils';\nimport localOptions from './local-options';\nimport { SimpleGroup } from '../simple-group';\nimport {\n MatrixResolver,\n initStore,\n findInGroup\n} from '../group-helper';\nimport { setupChangeListeners } from './change-listener';\nimport { PROPS } from './props';\nimport {\n CONFIG,\n MOUNT,\n RETINAL,\n Y\n} from '../enums/constants';\n\n/**\n * This class is used to create an instance of a visual group.\n * It extends the SimpleGroup (which is an interface). The visual group takes in a datamodel,\n * and a set of rows and columns, alongwith optional paramters (like color, size, shape).\n *\n * @class VisualGroup\n */\nclass VisualGroup extends SimpleGroup {\n\n /**\n * Creates an instance of VisualGroup. Requires dependencies and other registry options for placeholders\n * and layers that create individual units\n * @param {Object} registry Key value pair of compostions for the group\n * @param {Object} dependencies Dependencies needed to run the group\n * @memberof VisualGroup\n */\n constructor (registry, dependencies) {\n super();\n\n const {\n componentSubRegistry\n } = registry;\n\n this._dependencies = dependencies;\n // Generate getter/setter methods for all properties of the class\n // One can get each property by calling the method and can set it\n // by passing paramaters for the same. Thus, one can chain setter\n // getter methods.\n generateGetterSetters(this, PROPS);\n // Populate the store with default values\n this.store(initStore());\n\n // initialize group compositions\n this._composition = {};\n // store reference to data\n this._data = [];\n // matrix instance store each of the matrices\n this._matrixInstance = {};\n // store reference to mountpoint\n this._mount = null;\n // selection object that takes care of updating of components\n this._selection = {};\n // stores info about the placeholders generated after creation of matrices\n this._placeholderInfo = {};\n // corner matrices are the headers/footers for the application\n this._cornerMatrices = {};\n // Create instance of matrix resolver\n this.resolver(new MatrixResolver(this._dependencies));\n\n // Getting indiviual registered items\n this.registry({\n layerRegistry: componentSubRegistry.layerRegistry.get(),\n cellRegistry: componentSubRegistry.cellRegistry.get()\n });\n // Add local options to the store\n transactor(this, localOptions, this.store().model);\n // Register listeners\n setupChangeListeners(this);\n }\n\n matrixInstance (...matrices) {\n if (matrices.length) {\n return this;\n }\n return this.composition().matrices;\n }\n\n /**\n * Returns the composition of the Group\n *\n * @readonly\n * @memberof VisualGroup\n */\n composition (...params) {\n if (params.length) {\n return this;\n }\n return this._composition;\n }\n\n /**\n * Locks the model to prevent change listeners to be triggered until unlocked\n *\n * @return {Object} Instance of class VisualGroup\n * @memberof VisualGroup\n */\n lockModel () {\n this.store().model.lock();\n return this;\n }\n\n /**\n * Unlocks the model so that all change listeners can be triggered\n *\n * @return {Object} Instance of class VisualGroup\n * @memberof VisualGroup\n */\n unlockModel () {\n this.store().model.unlock();\n return this;\n }\n\n /**\n *\n *\n * @param {*} variable\n * @return\n * @memberof VisualGroup\n */\n where (variable) {\n return findInGroup(variable, this.resolver().getAllFields());\n }\n\n /**\n *\n *\n * @param {*} type\n * @return\n * @memberof VisualGroup\n */\n getAxes (type) {\n if (type === RETINAL) {\n return this.resolver().getRetinalAxes();\n }\n return this.resolver().getSimpleAxes(type);\n }\n\n /**\n *\n *\n * @return\n * @memberof VisualGroup\n */\n getCells (type) {\n return this.resolver()[`${type}Cells`]();\n }\n\n /**\n *\n *\n * @param {*} channel\n * @return\n * @memberof VisualGroup\n */\n getFieldsFromChannel (channel) {\n const {\n rowProjections,\n colProjections\n } = this.resolver().getAllFields();\n\n return channel === Y ? rowProjections : colProjections;\n }\n\n /**\n *\n *\n * @param {*} facetKey\n * @return\n * @memberof VisualGroup\n */\n getCellsByFacetKey (facetKey) {\n const resolver = this.resolver();\n const cells = resolver.rowCells()[facetKey] || resolver.colCells()[facetKey] || [];\n return cells;\n }\n\n /**\n *\n *\n * @param {*} facetKey\n * @return\n * @memberof VisualGroup\n */\n getAxesByFacetKey (axisType, facetKey) {\n const resolver = this.resolver();\n const cells = resolver.rowCells()[facetKey] || resolver.colCells()[facetKey];\n const axes = cells[0].valueOf().axes()[axisType] || [];\n\n return axes;\n }\n\n /**\n * This method is used to return a serialized representation of the instance's properties.\n *\n * @return {Object} Object with config proprties.\n * @memberof VisualGroup\n */\n serialize () {\n const store = this.store();\n\n return {\n [CONFIG]: store.get(CONFIG),\n [MOUNT]: store.get(MOUNT)\n };\n }\n\n getGroupByData () {\n return this._groupedDataModel;\n }\n}\n\nexport default VisualGroup;\n","import { PersistentBehaviour, SELECTION } from '@chartshq/muze-firebolt';\n\nexport default class SelectBehaviour extends PersistentBehaviour {\n static formalName () {\n return 'select';\n }\n\n setSelectionSet (addSet, selectionSet) {\n if (addSet === null) {\n selectionSet.reset();\n } else if (addSet.length) {\n // new add set\n const existingRemoveSet = addSet.filter(d => selectionSet._set[d] === SELECTION.SELECTION_OLD_EXIT\n || selectionSet._set[d] === SELECTION.SELECTION_NEW_EXIT);\n // existing add set\n if (existingRemoveSet.length) {\n selectionSet.updateEntry();\n selectionSet.add(existingRemoveSet);\n } else {\n selectionSet.updateExit();\n selectionSet.remove(addSet);\n }\n const { exitSet } = selectionSet.getSets();\n const mergedExitSet = [...new Set(exitSet[1]), ...new Set(exitSet[0])];\n const completeSetCount = selectionSet.getCompleteSet().length;\n if (exitSet[1].length !== completeSetCount && mergedExitSet.length === completeSetCount) {\n selectionSet.reset();\n }\n } else {\n selectionSet.remove(selectionSet.getCompleteSet());\n }\n return this;\n }\n}\n","import { BEHAVIOURS, ACTIONS } from '@chartshq/muze-firebolt';\n\nconst CLASSPREFIX = 'muze';\n\nexport const actionBehaviourMap = {\n [ACTIONS.DRAG]: {\n target: `.${CLASSPREFIX}-gradient-rect`,\n behaviours: [BEHAVIOURS.BRUSH]\n },\n [ACTIONS.HOVER]: {\n target: [`.${CLASSPREFIX}-legend-columns`],\n behaviours: [BEHAVIOURS.HIGHLIGHT]\n },\n [ACTIONS.CLICK]: {\n target: [`.${CLASSPREFIX}-legend-columns`],\n behaviours: [BEHAVIOURS.SELECT]\n }\n};\n\nexport const propagationBehaviourMap = {\n [BEHAVIOURS.SELECT]: BEHAVIOURS.FILTER,\n [BEHAVIOURS.BRUSH]: BEHAVIOURS.HIGHLIGHT\n};\n","import * as BEHAVIOURS from '../enums/behaviours';\nimport * as sideEffects from '../enums/side-effects';\n\nexport const behaviourEffectMap = {\n [BEHAVIOURS.BRUSH]: [sideEffects.SELECTIONBOX, {\n name: sideEffects.Highlighter,\n options: {\n strategy: 'fade'\n }\n }],\n [BEHAVIOURS.HIGHLIGHT]: [sideEffects.Highlighter],\n select: [{\n name: sideEffects.Highlighter,\n options: {\n strategy: 'fade'\n }\n }]\n};\n\nexport const propagationSideEffects = {\n [BEHAVIOURS.BRUSH]: [{\n name: sideEffects.Highlighter,\n options: {\n strategy: 'fade'\n }\n }],\n [BEHAVIOURS.HIGHLIGHT]: [{\n name: sideEffects.Highlighter,\n options: {\n strategy: 'fade'\n }\n }],\n [BEHAVIOURS.SELECT]: ['filter']\n};\n\n","export const BRUSH = 'brush';\nexport const HIGHLIGHT = 'highlight';\nexport const TOOLTIP = 'tooltip';\nexport const FILTER = 'filter';\nexport const SELECT = 'select';\n\n","export const SELECTIONBOX = 'selectionBox';\nexport const Highlighter = 'highlighter';\n\n","export const CLASSPREFIX = 'muze';\nexport const IDFIELD = '__id__';\nexport const CONFIG = 'config';\nexport const DATAMODEL = 'dataModel';\nexport const AXES = 'axes';\nexport const LAYERDEFS = 'layerDef';\nexport const WIDTH = 'width';\nexport const HEIGHT = 'height';\nexport const MOUNTPOINT = 'mountPoint';\nexport const GRIDLINEPARENTGROUPCLASS = 'grid-lines';\nexport const TRANSFORM = 'transform';\nexport const CONSOLIDATED = 'consolidated';\nexport const FRAGMENTED = 'fragmented';\nexport const DEFAULTCOLOR = '#F44336';\nexport const DEFAULTSIZE = 50;\nexport const DEFAULTSHAPE = 'circle';\nexport const STEP = 'step';\nexport const GRADIENT = 'gradient';\nexport const ORDINAL = 'ordinal';\nexport const SCALE_FUNCTIONS = {\n size: 'getSize',\n shape: 'getShape',\n color: 'getColor'\n};\nexport const TOP = 'top';\nexport const LEFT = 'left';\nexport const RIGHT = 'right';\nexport const BOTTOM = 'bottom';\nexport const HORIZONTAL = 'horizontal';\nexport const VERTICAL = 'vertical';\nexport const CENTER = 'center';\nexport const VALUE = 'value';\nexport const PATH = 'path';\nexport const SHAPE = 'shape';\nexport const ICON = 'icon';\nexport const RECT = 'rect';\nexport const START = 'start';\nexport const UPPER = 'upper';\nexport const LOWER = 'lower';\nexport const END = 'end';\nexport const SIZE = 'size';\nexport const DISCRETE = 'discrete';\nexport const MEASURE = 'measure';\n\n","import { assembleModelFromIdentifiers, getDataModelFromRange } from 'muze-utils';\nimport { propagationBehaviourMap } from './action-behaviour-map';\nimport { propagationSideEffects } from './behaviour-effect-map';\nimport { STEP, GRADIENT, DISCRETE, MEASURE } from '../enums/constants';\n\nexport const propagate = (firebolt, action, selectionSet, config = {}) => {\n let propagationData;\n const type = firebolt.context.constructor.type();\n const payload = config.payload;\n const data = firebolt.context.data();\n const metaData = firebolt.context.metaData();\n const fieldType = metaData.getData().schema[0].type;\n\n const propPayload = {};\n const sourceId = firebolt.context._id;\n propPayload.action = propagationBehaviourMap[action] || action;\n propPayload.sideEffects = propagationSideEffects[action];\n propPayload.sourceCanvas = firebolt.context.canvasAlias();\n const isMutableAction = firebolt._actions.behavioural[propPayload.action].constructor.mutates();\n if (payload.criteria === null) {\n propagationData = null;\n } else {\n const entrySet = selectionSet.mergedEnter;\n let values = data.filter(d => entrySet.uids.indexOf(d.id) !== -1).map(d => d.value);\n if (type === STEP || (type === DISCRETE && fieldType === MEASURE)) {\n const field = Object.keys(payload.criteria || {})[0];\n values = data.filter(d => entrySet.uids.indexOf(d.id) !== -1).map(d => d.range);\n propagationData = values.length ? metaData.select((fields) => {\n let check = false;\n for (let i = 0; i < values.length; i++) {\n check = fields[field].value >= values[i][0] && fields[field].value <= values[i][1];\n if (check === true) {\n break;\n }\n }\n return check;\n }, {\n saveChild: false\n }) : null;\n } else if (type === GRADIENT) {\n propagationData = getDataModelFromRange(metaData, payload.criteria);\n } else if (values.length) {\n propagationData = assembleModelFromIdentifiers(metaData, [payload.criteria[0], ...values.map(d => [d])]);\n } else {\n propPayload.criteria = null;\n propagationData = metaData.select(() => true, {\n saveChild: false\n });\n }\n }\n\n let propagateInterpolatedValues = false;\n\n if (propagationData) {\n const schema = propagationData.getSchema();\n propagateInterpolatedValues = schema.every(d => d.type === fieldType.MEASURE);\n }\n\n const propConfig = {\n sourceId: `legend-${sourceId}`,\n payload: propPayload,\n criteria: propPayload.criteria === null ? null : propagationData,\n isMutableAction,\n propagateInterpolatedValues,\n action: propPayload.action\n };\n\n metaData.propagate(propagationData, propConfig, true);\n};\n","import { Firebolt } from '@chartshq/muze-firebolt';\nimport { propagate } from './helper';\nimport { STEP, GRADIENT } from '../enums/constants';\n\n/**\n * This class manages the interactions of legend.\n * @export\n * @class LegendFireBolt\n * @extends {Firebolt}\n */\nexport class LegendFireBolt extends Firebolt {\n constructor (...params) {\n super(...params);\n this.initializeSideEffects();\n }\n\n getPropagationSelectionSet (selectionSet) {\n return selectionSet[0];\n }\n\n propagate (behaviourName, payload, selectionSet) {\n propagate(this, behaviourName, selectionSet, {\n payload\n });\n }\n\n getAddSetFromCriteria (criteria) {\n let values;\n let uniqueIds;\n const type = this.context.constructor.type();\n\n if (criteria === null) {\n uniqueIds = null;\n } else if (type === STEP) {\n values = Object.values(criteria);\n uniqueIds = this.context.data().filter(d => values.indexOf(d.range) !== -1).map(d => d.id);\n } else if (type === GRADIENT) {\n uniqueIds = [];\n } else {\n values = criteria[1];\n if (values) {\n uniqueIds = this.context.data().filter(d => values.indexOf(d.value) !== -1).map(d => d.id);\n } else {\n values = Object.values(criteria);\n uniqueIds = this.context.data().filter(d => values.indexOf(d.range) !== -1).map(d => d.id);\n }\n }\n return {\n uids: uniqueIds,\n model: null\n };\n }\n\n getFullData () {\n return null;\n }\n}\n","import {\n getEvent,\n getD3Drag\n } from 'muze-utils';\n\n/**\n * Adds dragging action to the target element.\n * @param {firebolt} firebolt firebolt\n * @param {SVGElement} targetEl Element on which brushing action is needed.\n * @param {Array} behaviours Array of behaviours\n */\n/* istanbul ignore next */ const drag = firebolt => (targetEl, behaviours) => {\n let startPos = {};\n let endPos = {};\n let payload;\n const d3Drag = getD3Drag();\n const context = firebolt.context;\n const boundingBox = context.measurement().gradientDimensions;\n const axisType = context.config().align === 'horizontal' ? 'x' : 'y';\n const axisScale = context.axis().source().scale();\n const rangeShifter = axisScale.range()[axisType === 'x' ? 0 : 1];\n\n targetEl.call(d3Drag().on('start', () => {\n const event = getEvent();\n startPos = {\n x: event.x,\n y: event.y\n };\n }).on('drag', () => {\n const event = getEvent();\n\n endPos = {\n x: event.x,\n y: event.y\n };\n endPos.x = Math.max(0, Math.min(endPos.x, boundingBox.width));\n endPos.y = Math.max(0, Math.min(endPos.y, boundingBox.height));\n\n payload = {\n criteria: {\n [context.fieldName()]: [axisScale.invert(startPos[axisType] + rangeShifter * 2),\n axisScale.invert(endPos[axisType] + rangeShifter * 2)].sort((a, b) => a - b)\n }\n };\n behaviours.forEach(behaviour => firebolt.dispatchBehaviour(behaviour, payload));\n }).on('end', () => {\n const event = getEvent();\n\n endPos = {\n x: event.x,\n y: event.y\n };\n endPos.x = Math.max(0, Math.min(endPos.x, boundingBox.width));\n endPos.y = Math.max(0, Math.min(endPos.y, boundingBox.height));\n if (startPos[axisType] === endPos[axisType]) {\n payload = {\n criteria: {}\n };\n } else {\n payload = {\n criteria: {\n [context.fieldName()]: [axisScale.invert(startPos[axisType] + rangeShifter * 2),\n axisScale.invert(endPos[axisType] + rangeShifter * 2)].sort((a, b) => a - b)\n }\n };\n }\n behaviours.forEach(behaviour => firebolt.dispatchBehaviour(behaviour, payload));\n }));\n};\n\nexport default drag;\n","/**\n * Adds mouse interactions to target element.\n * @param {Firebolt} Firebolt instance of firebolt.\n * @param {SVGElement} targetEl Element on which the event listeners will be attached.\n * @param {Array} behaviours Array of behaviours\n */\n/* istanbul ignore next */ const hover = firebolt => (targetEl, behaviours) => {\n const dispatchBehaviour = function (args) {\n const payload = {\n criteria: firebolt.context.getCriteriaFromData(args)\n };\n behaviours.forEach(behaviour => firebolt.dispatchBehaviour(behaviour, payload));\n event.stopPropagation();\n };\n\n targetEl.on('mouseover', dispatchBehaviour)\n .on('mousemove', dispatchBehaviour)\n .on('mouseout', () => {\n behaviours.forEach(behaviour => firebolt.dispatchBehaviour(behaviour, {\n criteria: null\n }));\n event.stopPropagation();\n });\n};\n\nexport default hover;\n","/**\n * Adds mouse interactions to target element.\n * @param {VisualUnit} instance instance of visual unit.\n * @param {SVGElement} targetEl Element on which the event listeners will be attached.\n * @param {Array} behaviours Array of behaviours\n */\nconst click = firebolt => (targetEl, behaviours) => {\n const dispatchBehaviour = function (args) {\n const payload = {\n criteria: firebolt.context.getCriteriaFromData(args)\n };\n behaviours.forEach(behaviour => firebolt.dispatchBehaviour(behaviour, payload));\n };\n\n targetEl.on('click', dispatchBehaviour);\n};\n\nexport default click;\n","import drag from './drag';\nimport hover from './hover';\nimport click from './click';\nimport * as ACTIONNAMES from '../../enums/actions';\n\nexport const physicalActions = {\n [ACTIONNAMES.DRAG]: drag,\n [ACTIONNAMES.HOVER]: hover,\n [ACTIONNAMES.CLICK]: click\n};\n\n","export const DRAG = 'drag';\nexport const HOVER = 'hover';\nexport const SELECTIONDRAG = 'selectiondrag';\nexport const CLICK = 'click';\n","import {\n getMousePos,\n getEvent,\n getD3Drag\n } from 'muze-utils';\nimport { HEIGHT, WIDTH, HORIZONTAL } from '../../enums/constants';\n\nconst getSelectionCriteria = (subject, axis, measures) => {\n let criteria = [];\n const {\n axisScale,\n axisType\n } = axis;\n const {\n startPos,\n endPos,\n selectionBoxMeasure,\n drawingInfMeasure,\n offset\n } = measures;\n const subjectStartPoint = subject[axisType];\n\n if (startPos[axisType] === endPos[axisType]) {\n criteria = [];\n } else if (subjectStartPoint + selectionBoxMeasure >= drawingInfMeasure + offset) {\n criteria = [axisScale.invert(drawingInfMeasure + offset - selectionBoxMeasure),\n axisScale.invert(drawingInfMeasure + offset)];\n } else if (subjectStartPoint - offset < offset) {\n criteria = [axisScale.invert(offset * 2), axisScale.invert(selectionBoxMeasure + offset * 2)];\n } else {\n criteria = [axisScale.invert(subjectStartPoint), axisScale.invert(subjectStartPoint + selectionBoxMeasure)];\n }\n axisType === 'x' ? criteria : criteria.reverse();\n return criteria;\n};\n\nexport const selectionBoxDrag = firebolt => (targetEl, behaviours) => {\n let startPos = {};\n let payload;\n const endPos = {};\n const d3Drag = getD3Drag();\n const context = firebolt.context;\n const axisScale = context.axis().source().scale();\n const axisType = context.config().align === HORIZONTAL ? 'x' : 'y';\n const drawingInfMeasure = context.measurement().gradientDimensions[axisType === 'x' ?\n WIDTH : HEIGHT];\n const offset = axisScale.range()[axisType === 'x' ? 0 : 1];\n const measures = {\n drawingInfMeasure,\n offset\n };\n let subject = {};\n\n targetEl.call(d3Drag().on('start', function () {\n const event = getEvent();\n startPos = getMousePos(this, event.sourceEvent);\n subject = event.subject;\n }).on('drag', () => {\n const event = getEvent();\n const selectionBoxMeasure = subject[axisType === 'x' ? WIDTH : HEIGHT];\n\n subject.x += event.dx;\n subject.y += event.dy;\n\n measures.selectionBoxMeasure = selectionBoxMeasure;\n measures.startPos = startPos;\n measures.endPos = endPos;\n const criteria = getSelectionCriteria(subject, { axisScale, axisType }, measures);\n\n payload = {\n criteria: {\n [context.fieldName()]: criteria\n },\n fadeOut: true\n };\n firebolt.dispatchBehaviour(behaviours[0], payload);\n }).on('end', () => {\n const event = getEvent();\n const selectionBoxMeasure = subject[axisType === 'x' ? WIDTH : HEIGHT];\n measures.selectionBoxMeasure = selectionBoxMeasure;\n measures.startPos = startPos;\n measures.endPos = endPos;\n const criteria = getSelectionCriteria(event, { axisScale, axisType }, measures);\n payload = {\n criteria: {\n [context.fieldName()]: criteria\n },\n fadeOut: true,\n config: {\n transition: {\n duration: 200\n }\n }\n };\n firebolt.dispatchBehaviour(behaviours[0], payload);\n }));\n};\n\n","import { makeElement } from 'muze-utils';\nimport { SpawnableSideEffect } from '@chartshq/muze-firebolt';\nimport { CLASSPREFIX, HEIGHT, WIDTH, HORIZONTAL, RECT } from '../../../enums/constants';\nimport { SELECTIONBOX } from '../../../enums/side-effects';\nimport { selectionBoxDrag } from '../../physical/selection-box-drag';\nimport './styles.scss';\n\n/**\n * This class is used to create a selection box which is used by visual unit for brushing and\n * selection in the canvas.\n * @class SelectionBox\n */\n/* istanbul ignore next */ class SelectionBox extends SpawnableSideEffect {\n static formalName () {\n return SELECTIONBOX;\n }\n\n /**\n * It returns the default configuration needed by selectionbox.\n * @return {Object} Default configuration of the selection box.\n */\n static defaultConfig () {\n return {\n className: 'legend-selection-box',\n classPrefix: CLASSPREFIX\n };\n }\n\n /**\n * Draws the selectionbox with the specified dimensions.\n */\n /* istanbul ignore next */ apply (selectionSet, payload) {\n let x;\n let y;\n let width;\n let height;\n const firebolt = this.firebolt;\n const context = firebolt.context;\n const config = this.config();\n const axis = context.axis().source();\n const className = `${config.classPrefix}-${config.className}`;\n\n const domain = payload.criteria[firebolt.context.fieldName()];\n const axisScale = axis.scale();\n const range = domain ? [axis.getScaleValue(domain[0]), axis.getScaleValue(domain[1])] : [];\n\n const axisType = context.config().align === HORIZONTAL ? 'x' : 'y';\n\n const gradientDimension = firebolt.context.measurement().gradientDimensions[axisType === 'x' ?\n HEIGHT : WIDTH];\n\n const rangeShifter = axisScale.range()[axisType === 'x' ? 0 : 1];\n const legendGradContainer = context.getDrawingContext().svgContainer;\n const legendSelGroup = makeElement(legendGradContainer, 'g', [1], `${config.classPrefix}-selection-box-group`);\n\n if (firebolt.context.config().align === HORIZONTAL) {\n x = range[0] - rangeShifter || 0;\n y = 0;\n width = range[1] - range[0] || 0;\n height = gradientDimension;\n } else {\n x = 0;\n y = range[1] - rangeShifter || 0;\n height = range[0] - range[1] || 0;\n width = gradientDimension;\n }\n const enterFn = function (el) {\n selectionBoxDrag(firebolt)(el, ['brush']);\n };\n const selBox = makeElement(legendSelGroup, RECT, [{ domain, x, y, width, height }], className,\n { enter: enterFn });\n selBox.attr('y', y)\n .attr('x', x)\n .attr(WIDTH, width)\n .attr(HEIGHT, height);\n }\n}\n\nexport default SelectionBox;\n\n","import { selectElement } from 'muze-utils';\n\nexport const strategies = (firebolt) => {\n const context = firebolt.context;\n const classed = (set, className, change) => {\n const classPrefix = context.config().classPrefix;\n selectElement(context.mount())\n .selectAll(`.${classPrefix}-legend-columns`)\n .filter(d => set.uids.indexOf(d.id) !== -1)\n .selectAll('div')\n .classed(className, change);\n };\n\n return {\n fade: (set, config = {}) => {\n const classPrefix = context.config().classPrefix;\n if (!set.mergedEnter.length && !set.mergedExit.length) {\n classed(set.completeSet, config.className || `${classPrefix}-legend-fadeout`, false);\n } else {\n classed(set.mergedExit, config.className || `${classPrefix}-legend-brighten`, false);\n classed(set.mergedExit, config.className || `${classPrefix}-legend-fadeout`, true);\n classed(set.mergedEnter, config.className || `${classPrefix}-legend-fadeout`, false);\n }\n },\n brighten: (set, config = {}) => {\n const classPrefix = context.config().classPrefix;\n if (!set.mergedEnter.length && !set.mergedExit.length) {\n classed(set.completeSet, config.className || `${classPrefix}-legend-brighten`, false);\n } else {\n classed(set.mergedEnter, config.className || `${classPrefix}-legend-brighten`, true);\n classed(set.mergedExit, config.className || `${classPrefix}-legend-brighten`, false);\n }\n }\n };\n};\n","import { GenericSideEffect } from '@chartshq/muze-firebolt';\nimport { strategies } from './strategies';\nimport { Highlighter } from '../../../enums/side-effects';\n\nexport default class LegendHighlighter extends GenericSideEffect {\n constructor (...params) {\n super(...params);\n this._strategies = strategies(this.firebolt);\n this._strategy = 'brighten';\n }\n\n static formalName () {\n return Highlighter;\n }\n\n apply (selectionSet, payload, options = {}) {\n const strategy = this._strategies[options.strategy || this._strategy];\n\n strategy(selectionSet, this);\n }\n}\n","import { mergeRecursive } from 'muze-utils';\n\nexport const PROPS = {\n config: {\n sanitization: (context, value) => mergeRecursive(context._config || {}, value)\n },\n data: {},\n fieldName: {},\n legendContainer: {},\n measurement: {\n sanitization: (context, value) => {\n const measurement = mergeRecursive(context._measurement, value);\n ['padding', 'border', 'margin'].forEach((space) => {\n measurement[space] = Math.min(measurement[space] > 0 ? measurement[space] : 0,\n measurement.maxWidth * 0.1, measurement.maxHeight * 0.1);\n });\n return measurement;\n }\n },\n logicalSpace: {},\n metaData: {},\n range: {\n sanitization: (context, value) => {\n context.scale().range(value);\n context.resetLogicalSpace();\n context.store().commit('range', value);\n return value;\n }\n },\n scale: {},\n smartTicks: {},\n store: {},\n title: {\n sanitization: (context, value) => mergeRecursive(context._title || {}, value)\n }\n};\n","import { getSymbol } from 'muze-utils';\nimport {\n CENTER,\n LEFT,\n RIGHT\n} from '../enums/constants';\n\nexport const ALIGN = {\n HORIZONTAL: 'horizontal',\n VERTICAL: 'vertical'\n};\n\nexport const DEFAULT_MEASUREMENT = {\n height: 30,\n width: 30,\n maxWidth: Infinity,\n maxHeight: Infinity,\n padding: 2,\n margin: 2,\n border: 1\n};\n\nexport const LEGEND_TITLE = {\n text: '',\n orientation: (pos) => {\n if (pos === LEFT || pos === RIGHT) {\n return LEFT;\n } return CENTER;\n }\n};\n\nexport const DEFAULT_CONFIG = {\n classPrefix: 'muze',\n\n formatter: {\n bounds: {\n lower: 'less than',\n upper: 'more than'\n }\n },\n item: {\n text: {\n orientation: 'right',\n width: 10,\n formatter: val => val\n },\n icon: {\n className: 'legend-icon',\n height: 20,\n width: 20,\n color: 'rgba(0,0,0,.5)',\n type: 'square'\n }\n }\n};\n\n/**\n * Creates a map of pre defined icons\n *\n * @param {string} icon Accepts a icon name like 'square', 'cross', 'diamond' etc\n * @return {Object} icon object which can be used to draw the icons\n */\nexport const ICON_MAP = (icon) => {\n if (icon && typeof (icon) === 'string') {\n return getSymbol(icon);\n } return icon;\n};\n","import { makeElement, numberInterpolator } from 'muze-utils';\n\nimport {\n SCALE_FUNCTIONS,\n WIDTH,\n HEIGHT,\n LEFT,\n RIGHT,\n TOP,\n BOTTOM\n} from '../enums/constants';\n\n/**\n *\n *\n * @param {*} scale\n * @returns\n */\nexport const getScaleInfo = (scale) => {\n const scaleType = scale.constructor.type();\n const domain = scale.uniqueValues();\n const steps = scale.config().stops || 1;\n const scaleFn = SCALE_FUNCTIONS[scaleType];\n\n return { scaleType, domain, steps, scaleFn };\n};\n\n/**\n *\n *\n * @param {*} domain\n * @param {*} steps\n * @returns\n */\nexport const getInterpolatedData = (domain, steps) => {\n const domainForLegend = [];\n const interpolatedFn = numberInterpolator()(domain[0], domain[1]);\n\n for (let i = 0; i <= steps; i++) {\n domainForLegend[i] = interpolatedFn(i / steps);\n }\n return domainForLegend;\n};\n\n/**\n *\n *\n * @param {*} container\n * @param {*} text\n * @param {*} measurement\n * @param {*} classPrefix\n */\nexport const titleCreator = (container, title, measurement, config) =>\n makeElement(container, 'div', [1], `${config.classPrefix}-legend-title`)\n .style(WIDTH, '100%')\n .style(HEIGHT, `${measurement.height}px`)\n .style('padding-left', `${measurement.padding}px`)\n .style('padding-right', `${measurement.padding}px`)\n .style('border-bottom-width', `${measurement.border}px`)\n .style('text-align', title.orientation instanceof Function ?\n title.orientation(config.position) : title.orientation)\n .text(title.text)\n .node();\n\n/**\n *\n *\n * @param {*} data\n * @param {*} prop\n * @param {*} labelManager\n * @return\n */\nexport const getMaxMeasures = (data, prop, labelManager) => {\n let maxHeight = -Infinity;\n let maxWidth = -Infinity;\n\n data.forEach((item) => {\n const value = prop ? item[prop] : item;\n const space = labelManager.getOriSize(value);\n maxHeight = Math.max(space.height + 2, maxHeight);\n maxWidth = Math.max(space.width + 2, maxWidth);\n });\n\n return { height: maxHeight, width: maxWidth };\n};\n\n/**\n *\n *\n * @param {*} data\n * @param {*} prop\n * @param {*} labelManager\n * @return\n */\nexport const getItemMeasures = (data, prop, labelManager, formatter) => {\n const space = [];\n\n data.forEach((item, index) => {\n const value = prop ? item[prop] : item;\n const { height, width } = labelManager.getOriSize(formatter(value));\n space[index] = { height: height + 1, width: width + 1 };\n });\n return space;\n};\n\n/**\n *\n *\n * @param {*} textOrientation\n * @param {*} effPadding\n * @param {*} titleSpace\n * @return\n * @memberof Legend\n */\nexport const computeItemSpaces = (config, measures, data) => {\n let totalHeight = 0;\n let totalWidth = 0;\n let maxItemSpaces = {\n width: 0, height: 0\n };\n const {\n effPadding,\n titleWidth,\n labelSpaces,\n titleHeight,\n maxWidth\n } = measures;\n const {\n item,\n align\n } = config;\n const {\n icon,\n text\n } = item;\n const textOrientation = text.orientation;\n const itemSpaces = [];\n const iconSpaces = [];\n let maxIconWidth = 0;\n labelSpaces.forEach((labelSpace, i) => {\n const itemSpace = { width: 0, height: 0 };\n const iconSpace = { width: 0, height: 0 };\n const datum = data[i] || {};\n // Compute each legend item height/width\n if (textOrientation === LEFT || textOrientation === RIGHT) {\n // Get label, icon and item widths\n labelSpace.width += effPadding;\n iconSpace.width = (datum.size ? 2 * Math.sqrt(datum.size / Math.PI) : icon.width) + effPadding;\n maxIconWidth = Math.max(iconSpace.width, maxIconWidth);\n itemSpace.width = labelSpace.width + maxIconWidth;\n\n // Get label, icon and item heights\n labelSpace.height = Math.max(labelSpace.height, icon.height) + effPadding;\n iconSpace.height = labelSpace.height;\n itemSpace.height = labelSpace.height;\n } else {\n // Get label, icon and item widths\n labelSpace.width = Math.max(labelSpace.width, datum.size ? 2 * Math.sqrt(datum.size / Math.PI)\n : icon.width) + effPadding;\n iconSpace.width = labelSpace.width;\n itemSpace.width = labelSpace.width;\n maxIconWidth = Math.max(iconSpace.width, maxIconWidth);\n\n // Get label, icon and item heights\n labelSpace.height += effPadding;\n iconSpace.height = icon.height + effPadding;\n itemSpace.height = labelSpace.height + iconSpace.height;\n }\n // Compute height and width of legend for each alignment\n if (align === 'horizontal') {\n totalHeight = Math.max(totalHeight, itemSpace.height);\n } else {\n totalHeight += itemSpace.height;\n totalWidth = Math.max(totalWidth, itemSpace.width, titleWidth) + effPadding;\n }\n maxItemSpaces = {\n width: Math.max(itemSpace.width, maxItemSpaces.width),\n height: Math.max(itemSpace.height, maxItemSpaces.height)\n };\n itemSpaces.push(itemSpace);\n iconSpaces.push(iconSpace);\n });\n\n itemSpaces.forEach((itemSpace, i) => {\n if (align === 'horizontal') {\n itemSpace.height = totalHeight;\n iconSpaces[i].width = maxIconWidth;\n if (textOrientation === LEFT || textOrientation === RIGHT) {\n labelSpaces[i].height = totalHeight;\n iconSpaces[i].height = totalHeight;\n itemSpaces[i].width = labelSpaces[i].width + maxIconWidth;\n } else {\n labelSpaces[i].width = maxIconWidth;\n itemSpaces[i].width = maxIconWidth;\n labelSpaces[i].width = maxIconWidth;\n }\n totalWidth = Math.max(totalWidth + itemSpaces[i].width, titleWidth);\n } else {\n itemSpace.width = Math.max(totalWidth, maxWidth);\n if (textOrientation === TOP || textOrientation === BOTTOM) {\n labelSpaces[i].width = totalWidth;\n iconSpaces[i].width = totalWidth;\n maxIconWidth = totalWidth;\n } else {\n iconSpaces[i].width = maxIconWidth;\n itemSpaces[i].width = labelSpaces[i].width + maxIconWidth;\n labelSpaces[i].width = maxItemSpaces.width - maxIconWidth;\n totalWidth = Math.max(totalWidth, itemSpace.width, titleWidth) + effPadding;\n }\n }\n });\n totalHeight += titleHeight + effPadding;\n\n return { totalHeight, totalWidth, itemSpaces, iconSpaces, maxItemSpaces, maxIconWidth };\n};\n\n/**\n *\n *\n * @param {*} type\n * @param {*} scaleInfo\n * @param {*} domainInfo\n * @returns\n */\nexport const getDomainBounds = (type, scaleInfo, domainInfo) => {\n const {\n scaleFn,\n scaleType,\n scale\n } = scaleInfo;\n const {\n domain,\n domainBounds,\n domainLeg,\n steps\n } = domainInfo;\n const ele = domain[type === 'lower' ? 0 : domain.length - 1];\n const step = steps[type === 'lower' ? 0 : steps.length - 1];\n\n return {\n [scaleType]: scaleType === 'size' ? scale[scaleFn](ele) * scale.getScaleFactor() : scale[scaleFn](ele),\n value: domainBounds[type],\n id: type === 'lower' ? 0 : domainLeg.length + 2,\n range: [ele, step]\n };\n};\n","import {\n makeElement,\n selectElement,\n getUniqueId,\n getSmartComputedStyle,\n generateGetterSetters,\n mergeRecursive\n} from 'muze-utils';\nimport { behaviouralActions } from '@chartshq/muze-firebolt';\nimport * as legendBehaviours from '../firebolt/behavioural';\n\nimport { LegendFireBolt } from '../firebolt/legend-firebolt';\nimport { actionBehaviourMap } from '../firebolt/action-behaviour-map';\nimport { physicalActions } from '../firebolt/physical';\nimport * as sideEffects from '../firebolt/side-effects';\nimport { behaviourEffectMap } from '../firebolt/behaviour-effect-map';\nimport { VALUE, PATH } from '../enums/constants';\nimport { PROPS } from './props';\nimport { DEFAULT_MEASUREMENT, DEFAULT_CONFIG, LEGEND_TITLE } from './defaults';\nimport { getItemMeasures, titleCreator, computeItemSpaces } from './legend-helper';\n\n/**\n * Creates a Legend from the axes of a canvas\n *\n * @param {Object} dependencies : legend data\n * @class SimpleLegend\n */\nexport default class SimpleLegend {\n\n /**\n * Creates an instance of Legend.\n * @param {Object} dependencies Set of dependencies required by the legend\n * @memberof Legend\n */\n constructor (dependencies) {\n this._data = [];\n this._metaData = [];\n this._mount = null;\n this._fieldName = null;\n this._title = Object.assign({}, LEGEND_TITLE);\n this._metaData = null;\n this._labelManager = dependencies.labelManager;\n this._cells = dependencies.cells;\n this._id = getUniqueId();\n this._measurement = Object.assign({}, this.constructor.defaultMeasurement());\n this._config = mergeRecursive({}, this.constructor.defaultConfig());\n\n generateGetterSetters(this, PROPS);\n this._computedStyle = getSmartComputedStyle(selectElement('body'),\n `${this.config().classPrefix}-legend-item-info`);\n\n this._firebolt = new LegendFireBolt(this, {\n behavioural: Object.assign({}, behaviouralActions, legendBehaviours),\n physical: physicalActions,\n physicalBehaviouralMap: actionBehaviourMap\n }, sideEffects, behaviourEffectMap);\n }\n\n id () {\n return this._id;\n }\n /**\n * Initializes an instance of the class\n *\n * @static\n * @param {Object} dependencies Set of dependencies required by the legend\n * @return {Instance} returns a new instance of Legend\n * @memberof Legend\n */\n static create (dependencies) {\n return new SimpleLegend(dependencies);\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof SimpleLegend\n */\n static defaultConfig () {\n return DEFAULT_CONFIG;\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof SimpleLegend\n */\n static defaultMeasurement () {\n return DEFAULT_MEASUREMENT;\n }\n\n /**\n *\n *\n * @readonly\n * @memberof SimpleLegend\n */\n firebolt (...params) {\n if (params.length) {\n return this;\n }\n return this._firebolt;\n }\n\n /**\n *\n *\n * @return\n * @memberof Legend\n */\n elemType () {\n return PATH;\n }\n\n canvasAlias (...alias) {\n if (alias.length) {\n this._canvasAlias = alias[0];\n return this;\n }\n return this._canvasAlias;\n }\n\n /**\n *\n *\n * @return\n * @memberof Legend\n */\n mount (...params) {\n if (params.length) {\n this._mount = params[0];\n this.render();\n return this;\n }\n return this._mount;\n }\n\n /**\n *\n *\n * @param {*} effPadding\n * @param {*} align\n * @return\n * @memberof Legend\n */\n getLabelSpaces () {\n const {\n item,\n classPrefix\n } = this.config();\n this._labelManager.setStyle(getSmartComputedStyle(selectElement('body'),\n `${classPrefix}-legend-item-info`));\n return getItemMeasures(this.data(), VALUE, this._labelManager, item.text.formatter);\n }\n\n /**\n * Sets the height and width of a legend based on provided max\n * height and width and based on its contents\n *\n * @return {Instance} Current instance\n * @memberof Legend\n */\n setLegendMeasures () {\n const {\n width,\n height,\n maxWidth,\n maxHeight,\n padding,\n margin,\n border\n } = this.measurement();\n const {\n align\n } = this.config();\n\n // Effective padding, margin and padding\n const effPadding = padding * 2;\n const effBorder = border * 2;\n const effMargin = margin * 2;\n\n this.data(this.dataFromScale(this.scale()));\n // Get space occupied by title\n const titleSpace = this.getTitleSpace();\n const titleHeight = titleSpace.height > 0 ? titleSpace.height * 1.25 : 0;\n const titleWidth = titleSpace.width;\n\n // Get space occupied by labels\n const labelSpaces = this.getLabelSpaces(effPadding, align);\n\n const {\n totalHeight, totalWidth, itemSpaces, iconSpaces, maxItemSpaces, maxIconWidth\n } = computeItemSpaces(this.config(),\n { effPadding, titleWidth, labelSpaces, titleHeight, maxWidth, maxHeight }, this.data());\n\n this.measurement({\n width: Math.max(totalWidth, width) + effMargin + effBorder,\n height: Math.max(totalHeight, height) + effMargin + effBorder,\n labelSpaces,\n iconSpaces,\n itemSpaces,\n maxItemSpaces,\n maxIconWidth,\n titleSpaces: {\n width: Math.min(maxWidth, this.measurement().width) - effMargin - effBorder,\n height: titleHeight\n }\n });\n return this;\n }\n\n /**\n * Returns the space occupied by the legend title\n *\n * @return {Object} Space occupied by title\n * @memberof Legend\n */\n getTitleSpace () {\n this._labelManager.setStyle(getSmartComputedStyle(selectElement('body'),\n `${this.config().classPrefix}-legend-title`));\n return this._labelManager.getOriSize(this.title().text ? this.title().text : '');\n }\n\n /**\n * Creates the title for the legend\n *\n * @param {DOM} container Container made for the title\n * @return {Selection} Title and it's node\n * @memberof Legend\n */\n renderTitle (container) {\n const { titleSpaces, border, padding } = this.measurement();\n return titleCreator(container, this.title(), {\n height: titleSpaces.height,\n border,\n padding\n }, this.config());\n }\n\n /**\n * Render the legend with its title\n *\n * @param {DOM} mountPoint Point where the legend and title are to be appended\n * @return {Instance} Current instance of legend\n * @memberof Legend\n */\n render () {\n const firebolt = this.firebolt();\n const {\n classPrefix\n } = this.config();\n const {\n maxWidth,\n maxHeight,\n width,\n height,\n margin,\n border\n } = this.measurement();\n const legendContainer = makeElement(selectElement(this.mount()), 'div', [1], `${classPrefix}-legend-box`);\n\n legendContainer.classed(`${classPrefix}-legend-box-${this._id}`, true);\n legendContainer.style('float', 'left');\n // set height and width\n legendContainer.style('width', `${Math.min(maxWidth, width) - margin * 2}px`)\n .style('height', `${Math.min(maxHeight, height) - margin * 2}px`)\n .style('margin', `${margin}px`)\n .style('border-width', `${border}px`);\n this.legendContainer(legendContainer.node());\n\n // create title\n this.renderTitle(legendContainer);\n firebolt.createSelectionSet(this.data().map(d => d.id));\n return legendContainer;\n }\n /**\n *\n *\n * @param {*} data\n * @returns\n * @memberof StepLegend\n */\n getCriteriaFromData (data) {\n const fieldName = this.fieldName();\n const type = this.metaData().getData().schema[0].type;\n if (type === 'measure') {\n return {\n [fieldName]: data.range\n };\n }\n return [[fieldName], [data.value]];\n }\n}\n","import {\n LEFT,\n RIGHT,\n START,\n END,\n TOP,\n BOTTOM,\n HORIZONTAL,\n VERTICAL,\n CENTER,\n SHAPE,\n VALUE\n} from '../enums/constants';\n\nconst legendOrientation = {\n [HORIZONTAL]: {\n datasets: data => ({\n row: [1],\n column: data\n }),\n itemContainerMeasures: (measurement) => {\n const {\n itemSpaces,\n width\n } = measurement;\n return {\n row: {\n width: `${width}px`,\n padding: `${0}px`\n },\n column: {\n width: (d, i) => `${itemSpaces[i].width}px`,\n padding: `${0}px`\n }\n };\n },\n getStepSpacesInfo: (measurement) => {\n const { maxItemSpaces, height } = measurement;\n return {\n iconHeight: height,\n iconWidth: maxItemSpaces.width,\n stepPadding: {\n horizontal: true,\n vertical: false\n }\n };\n }\n },\n [VERTICAL]: {\n datasets: data => ({\n row: data,\n column: d => [d]\n }),\n itemContainerMeasures: (measurement, config) => {\n const {\n width\n } = measurement;\n const { padding } = config;\n return {\n row: {\n width: `${width}px`,\n padding: `${padding}px`\n },\n column: {\n width: `${width}px`,\n padding: `${0}px`\n }\n };\n },\n getStepSpacesInfo: (measurement) => {\n const { maxItemSpaces, width } = measurement;\n return {\n iconHeight: maxItemSpaces.height,\n iconWidth: width,\n stepPadding: {\n horizontal: false,\n vertical: true\n }\n };\n }\n }\n};\n\nexport const positionConfig = {\n [LEFT]: legendOrientation[VERTICAL],\n [RIGHT]: legendOrientation[VERTICAL],\n [TOP]: legendOrientation[HORIZONTAL],\n [BOTTOM]: legendOrientation[HORIZONTAL]\n};\n\nexport const alignmentMap = {\n [LEFT]: END,\n [RIGHT]: START,\n [TOP]: CENTER,\n [BOTTOM]: CENTER\n};\n\n// Reverses data for step legend\nexport const stepData = data => ({\n [LEFT]: data.reverse(),\n [RIGHT]: data.reverse(),\n [TOP]: data,\n [BOTTOM]: data\n});\n\n// Changes the item layout based on the position of the text\nexport const itemStack = {\n [LEFT]: [VALUE, SHAPE],\n [RIGHT]: [SHAPE, VALUE],\n [TOP]: [VALUE, SHAPE],\n [BOTTOM]: [SHAPE, VALUE]\n};\n","import { makeElement, selectElement, applyStyle } from 'muze-utils';\nimport { ICON_MAP } from './defaults';\nimport { positionConfig, alignmentMap, itemStack } from './position-config';\nimport {\n WIDTH,\n HEIGHT,\n CENTER,\n VALUE,\n RECT,\n LEFT,\n RIGHT\n} from '../enums/constants';\n\n/**\n *\n *\n * @param {*} container\n * @param {*} data\n * @param {*} legendInstance\n * @param {*} align\n * @return\n */\nexport const getItemContainers = (container, data, legendInstance) => {\n const measurement = legendInstance.measurement();\n const config = legendInstance.config();\n const {\n itemSpaces\n } = measurement;\n const {\n classPrefix,\n position\n } = config;\n const positionObj = positionConfig[position];\n const datasets = positionObj.datasets(data);\n const measures = positionObj.itemContainerMeasures(measurement, config);\n\n const rows = makeElement(container, 'div', datasets.row, `${classPrefix}-legend-row`);\n rows.style(HEIGHT, (d, i) => `${itemSpaces[i].height}px`);\n rows.style(WIDTH, measures.row.width);\n rows.style('padding', measures.row.padding);\n\n const columns = makeElement(rows, 'div', datasets.column, `${classPrefix}-legend-columns`);\n columns.style(WIDTH, measures.column.width);\n columns.style('padding', measures.column.padding);\n\n return columns;\n};\n\n/**\n *\n *\n * @param {*} container\n * @param {*} classPrefix\n * @param {*} data\n * @returns\n * @memberof DiscreteLegend\n */\nexport const createLegendSkeleton = (context, container, classPrefix, data) => {\n let gradWidth = 0;\n let gradHeight = 0;\n let maxGradHeight = 0;\n let maxGradWidth = 0;\n const measurement = context.measurement();\n const {\n margin,\n border,\n titleSpaces,\n width,\n height,\n maxWidth,\n maxHeight\n } = measurement;\n\n gradHeight = height - (titleSpaces.height + 2 * margin + 2 * border);\n gradWidth = width - (margin * 2 + border * 2);\n\n maxGradHeight = maxHeight - (titleSpaces.height + margin * 2 + border * 2);\n maxGradWidth = maxWidth - (margin * 2 + border * 2);\n\n let legendBody = makeElement(container, 'div', [1], `${classPrefix}-legend-body`);\n legendBody.select(`.${classPrefix}-legend-overflow`).remove();\n // Create a div with scroll when overflow\n if (maxGradWidth && maxGradWidth < gradWidth) {\n legendBody = legendBody.style(WIDTH, `${maxGradWidth}px`).style('overflow-x', 'scroll');\n }\n // Create a div with scroll when overflow\n if (maxGradHeight && maxGradHeight < gradHeight) {\n legendBody.style(HEIGHT, `${maxGradHeight}px`).style('overflow-y', 'scroll');\n }\n\n legendBody = makeElement(legendBody, 'div', [1], `${classPrefix}-legend-overflow`);\n\n legendBody.style(WIDTH, `${gradWidth}px`);\n legendBody.style(HEIGHT, `${gradHeight}px`);\n\n const legendItem = getItemContainers(legendBody, data, context);\n return { legendItem };\n};\n\n/**\n * Creates legend item based on alignment and text orientation\n *\n * @param {Selection} container Point where items are to be mounted\n * @return {Instance} Current instance\n * @memberof Legend\n */\nexport const createItemSkeleton = (context, container) => {\n const {\n classPrefix,\n item\n } = context.config();\n const textOrientation = item.text.orientation;\n\n const stack = itemStack[textOrientation];\n const itemSkeleton = makeElement(container, 'div', (d, i) => stack.map(e => [e, d[e], d.color, d.size,\n d.value, context.fieldName(), i]), `${classPrefix}-legend-item-info`);\n\n const alignClass = alignmentMap[textOrientation];\n\n itemSkeleton.classed(alignClass, true);\n return { itemSkeleton };\n};\n\n/**\n *\n *\n * @param {*} measureType\n * @param {*} stepColorCheck\n */\nexport const applyItemStyle = (item, measureType, stepColorCheck, context) => {\n const {\n padding,\n labelSpaces,\n iconSpaces,\n maxIconWidth\n } = context.measurement();\n const diff = stepColorCheck ? -padding * 2 : 0;\n\n if (item[0] === VALUE) {\n return `${labelSpaces[item[6]][measureType]}px`;\n }\n return `${measureType === 'width' && !stepColorCheck ? maxIconWidth : iconSpaces[item[6]][measureType] - diff}px`;\n};\n\n/**\n *\n *\n * @param {*} str\n * @returns\n */\nconst checkPath = (str) => {\n if (/^[mzlhvcsqta]\\s*[-+.0-9][^mlhvzcsqta]+/i.test(str) && /[\\dz]$/i.test(str) && str.length > 4) {\n return true;\n }\n return false;\n};\n\n/**\n *\n *\n * @param {*} d\n * @param {*} elem\n */\nconst createShape = function (d, elem, defaultIcon, width, height) {\n const groupElement = elem;\n // const { shape, size, update } = d;\n const size = d[3] || Math.min(width, height) * Math.PI;\n const shape = d[1] || defaultIcon;\n\n if (shape instanceof Promise) {\n shape.then((res) => {\n d.shape = res;\n return createShape(d, elem);\n });\n } else if (shape instanceof Element) {\n let newShape = shape.cloneNode(true);\n\n if (newShape.nodeName.toLowerCase() === 'img') {\n const src = newShape.src || newShape.href;\n newShape = document.createElementNS('http://www.w3.org/2000/svg', 'image');\n newShape.setAttribute('href', src);\n }\n const shapeElement = selectElement(newShape);\n shapeElement.attr('transform', `scale(${size / 100})`);\n return selectElement(groupElement.node().appendChild(newShape));\n } else if (typeof shape === 'string') {\n let pathStr;\n if (checkPath(shape)) {\n pathStr = shape;\n } else {\n pathStr = ICON_MAP(shape).size(size)();\n }\n return makeElement(groupElement, 'path', data => [data]).attr('d', pathStr);\n }\n d[1] = 'circle';\n return createShape(d, elem, 'circle');\n};\n\n/**\n * Returns the icon of the legend item\n *\n * @param {Object} datum Data property attached to the item\n * @param {number} width width of the item\n * @param {number} height height of the item\n * @return {Object|string} returns the path string or the string name of the icon\n * @memberof Legend\n */\nexport const getLegendIcon = (datum, width, height, defaultIcon) => {\n const icon = ICON_MAP(datum[1]);\n\n if (icon) {\n return icon.size(datum[3] || Math.min(width, height) * Math.PI);\n }\n return ICON_MAP(datum[3] ? 'circle' : defaultIcon).size(datum[3] || Math.min(width, height) * Math.PI);\n};\n\n/**\n *\n *\n */\nexport const renderIcon = (icon, container, datum, context) => {\n const {\n classPrefix,\n iconHeight,\n iconWidth,\n maxIconWidth,\n padding,\n color\n } = context;\n const svg = makeElement(container, 'svg', f => [f], `${classPrefix}-legend-icon-svg`)\n .attr(WIDTH, maxIconWidth)\n .attr(HEIGHT, iconHeight)\n .style(WIDTH, `${maxIconWidth}px`)\n .style(HEIGHT, `${iconHeight}px`);\n\n if (icon !== RECT) {\n const group = makeElement(svg, 'g', [datum[1]], `${classPrefix}-legend-icon`);\n createShape(datum, group, datum[3] ? 'circle' : 'square', iconWidth, iconHeight)\n .attr('transform', `translate(${maxIconWidth / 2 - padding} ${iconHeight / 2})`)\n .attr('fill', datum[2] || color);\n } else {\n makeElement(svg, RECT, [datum[1]], `${classPrefix}-legend-icon`)\n .attr('x', 0)\n .attr('y', 0)\n .attr(WIDTH, maxIconWidth)\n .attr(HEIGHT, iconHeight)\n .attr('fill', datum[2] || color);\n }\n};\n\n/**\n * Renders the items in the legend i.e, icon and text\n *\n * @param {DOM} container Point where item is to be mounted\n * @memberof Legend\n */\nexport const renderDiscreteItem = (context, container) => {\n const labelManager = context._labelManager;\n const {\n item,\n classPrefix\n } = context.config();\n const {\n maxIconWidth,\n padding\n } = context.measurement();\n const {\n width: iconWidth,\n height: iconHeight,\n color,\n className\n } = item.icon;\n\n const textOrientation = item.text.orientation;\n const formatter = item.text.formatter;\n\n labelManager.useEllipsesOnOverflow(true);\n applyStyle(container, {\n width: d => applyItemStyle(d, WIDTH, false, context),\n height: d => applyItemStyle(d, HEIGHT, false, context),\n 'text-align': CENTER,\n padding: `${padding}px`\n });\n\n labelManager.setStyle(context._computedStyle);\n container.each(function (d, i) {\n if (d[0] === VALUE) {\n selectElement(this).text(formatter(d[1]))\n .style(`padding-${textOrientation === RIGHT ? LEFT : RIGHT}`, '0px');\n } else {\n // const icon = getLegendIcon(d, iconWidth, iconHeight, type);\n selectElement(this).classed(`${classPrefix}-${className}`, true);\n selectElement(this).classed(`${classPrefix}-${className}-${i}`, true);\n renderIcon('circle', selectElement(this), d, {\n classPrefix,\n iconWidth,\n // iconWidth: 2 * Math.sqrt(d[3] / Math.PI) || iconWidth,\n iconHeight,\n maxIconWidth,\n padding,\n color\n });\n }\n });\n};\n\n/**\n* Renders the items in the legend i.e, icon and text\n*\n* @param {DOM} container Point where item is to be mounted\n* @memberof Legend\n*/\nexport const renderStepItem = (context, container) => {\n const labelManager = context._labelManager;\n const {\n item,\n position,\n classPrefix\n } = context.config();\n const {\n maxItemSpaces,\n maxIconWidth,\n padding\n } = context.measurement();\n const {\n width,\n height,\n color\n } = item.icon;\n const {\n formatter\n } = item.text;\n\n labelManager.useEllipsesOnOverflow(true);\n const { iconHeight, iconWidth, stepPadding } = positionConfig[position].getStepSpacesInfo({\n maxItemSpaces, height, width\n });\n\n applyStyle(container, {\n width: d => applyItemStyle(d, WIDTH, stepPadding.horizontal, context),\n height: d => applyItemStyle(d, HEIGHT, stepPadding.vertical, context),\n 'text-align': 'center',\n padding: `${padding}px`\n });\n\n labelManager.setStyle(context._computedStyle);\n container.each(function (d) {\n if (d[0] === VALUE) {\n selectElement(this).text(formatter(d[1]));\n } else {\n renderIcon(RECT, selectElement(this), d, {\n classPrefix,\n iconWidth,\n iconHeight,\n maxIconWidth,\n color\n });\n }\n });\n};\n","import SimpleLegend from './simple-legend';\nimport { DISCRETE, LEFT, SIZE } from '../enums/constants';\nimport { getScaleInfo } from './legend-helper';\nimport { createLegendSkeleton, createItemSkeleton, renderDiscreteItem } from './renderer';\nimport '../styles.scss';\n\n/**\n * Creates a Legend from the axes of a canvas\n *\n * @param {Object} dependencies : legend data\n * @class Legend\n */\nexport default class DiscreteLegend extends SimpleLegend {\n\n /**\n * Initializes an instance of the class\n *\n * @static\n * @param {Object} dependencies Set of dependencies required by the legend\n * @return {Instance} returns a new instance of Legend\n * @memberof Legend\n */\n static create (dependencies) {\n return new DiscreteLegend(dependencies);\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof DiscreteLegend\n */\n static type () {\n return DISCRETE;\n }\n\n /**\n *\n *\n * @param {*} scale\n * @returns\n * @memberof DiscreteLegend\n */\n dataFromScale (scale) {\n const { scaleType, domain, scaleFn } = getScaleInfo(scale);\n let domainForLegend = [...new Set(domain)];\n const type = this.metaData().getData().schema[0].type;\n\n domainForLegend = domainForLegend.map((ele, i) => {\n let value = 0;\n let range = 0;\n if (type === 'measure') {\n value = (+domainForLegend[i]).toFixed(0);\n const nextVal = domainForLegend[i + 1] ? +domainForLegend[i + 1] : +value;\n range = [value, nextVal.toFixed(0)];\n } else {\n value = domainForLegend[i];\n range = [domainForLegend[i]];\n }\n return {\n [scaleType]: scale[scaleFn](ele),\n value,\n id: i,\n range\n };\n }).filter(d => d.value !== null);\n\n domainForLegend = scaleType === SIZE ? domainForLegend.sort((a, b) => a[scaleType] - b[scaleType])\n : domainForLegend;\n return domainForLegend;\n }\n\n /**\n * Render the legend with its title\n *\n * @param {DOM} mountPoint Point where the legend and title are to be appended\n * @return {Instance} Current instance of legend\n * @memberof Legend\n */\n render () {\n const firebolt = this.firebolt();\n const data = this.data();\n const { classPrefix } = this.config();\n const legendContainer = super.render(this.mount());\n // create Legend\n const { legendItem } = createLegendSkeleton(this, legendContainer, classPrefix, data);\n const { itemSkeleton } = createItemSkeleton(this, legendItem);\n renderDiscreteItem(this, itemSkeleton);\n legendContainer.selectAll('div').style('float', LEFT);\n firebolt.mapActionsAndBehaviour();\n firebolt.createSelectionSet(this.data().map(d => d.id));\n return legendContainer;\n }\n}\n","import { makeElement, applyStyle } from 'muze-utils';\nimport { ContinousAxis } from '@chartshq/muze-axis';\nimport { BOTTOM, RIGHT } from '../enums/constants';\nimport { ALIGN } from './defaults';\nimport '../styles.scss';\n\n/**\n *\n *\n * @param {*} data\n * @returns\n */\nexport const getGradientDomain = (data) => {\n if (typeof data[0].value === 'number') {\n return data.reduce((accumulator, currentValue) =>\n [Math.min(currentValue.value, accumulator[0]), Math.max(currentValue.value, accumulator[1])],\n [Number.MAX_VALUE, Number.MIN_VALUE]);\n }\n return data.map(e => e.value);\n};\n\n/**\n *\n *\n * @param {*} container\n * @param {*} data\n * @param {*} domain\n * @returns\n */\nexport const makeLinearGradient = (container, data, domain) => {\n const defs = makeElement(container, 'defs', [1]);\n const linearGradient = makeElement(defs, 'linearGradient', [1])\n .attr('id', 'linear-gradient')\n .attr('x1', '0%')\n .attr('y2', '0%');\n makeElement(linearGradient, 'stop', data, 'stop-gradient')\n .attr('offset', d => `${(d.value - domain[0]) * 100 / (domain[1] - domain[0])}%`)\n .attr('stop-color', d => d.color);\n return linearGradient;\n};\n\n/**\n * Creates an axis cell with a linear axis for computing space and\n * creating gradient legend\n *\n * @return {AxisCell} Instance of Axis Cell for the gradient axis\n * @memberof Legend\n */\nexport const createAxis = (context) => {\n const data = context.data();\n const { align } = context.config();\n const AxisCell = context._cells.AxisCell;\n const newAxis = new ContinousAxis({\n id: `legend-${context._id}`,\n orientation: align === ALIGN.VERTICAL ? RIGHT : BOTTOM,\n style: context._computedStyle,\n nice: false,\n showAxisName: false,\n tickValues: data.map(d => d.value),\n fixedBaseline: false\n }, { labelManager: context._labelManager });\n\n newAxis.domain(getGradientDomain(data));\n newAxis.range([1, 1]);\n return new AxisCell().source(newAxis).config({\n margin: { left: 0, bottom: 0, top: 0, right: 0 }\n });\n};\n\n/**\n *\n *\n * @param {*} container\n * @param {*} data\n * @param {*} classPrefix\n * @returns\n * @memberof GradientLegend\n */\nconst createLegendSkeleton = (container, classPrefix, data) => {\n const domain = getGradientDomain(data);\n const legendContainer = makeElement(container, 'div', [1], `${classPrefix}-legend-body`);\n const legendGradSvg = makeElement(legendContainer, 'svg', [1], `${classPrefix}-gradient`);\n const legendGradCont = makeElement(legendGradSvg, 'g', [1], `${classPrefix}-gradient-group`);\n const linearGradient = makeLinearGradient(legendGradSvg, data, domain);\n const legendRect = makeElement(legendGradCont, 'rect', [1], `${classPrefix}-gradient-rect`);\n\n return {\n legendContainer,\n legendGradCont,\n legendGradSvg,\n linearGradient,\n legendRect\n };\n};\n\n/**\n * Renders the axis for the gradient\n *\n * @param {Selection} container Point where axis is to be mounted\n * @param {number} height Height for axis\n * @param {number} width Width for axis\n * @memberof Legend\n */\nexport const renderAxis = (context, container, height, width) => {\n const axis = context.axis();\n\n axis.setAvailableSpace(width, height);\n axis.render(container.node());\n};\n\n/**\n * Renders gradient legends\n *\n * @param {Selection} container Point where the legend is to be appended\n * @memberof GradientLegend\n */\nexport const renderGradient = (context, container) => {\n let gradHeight = 0;\n let gradWidth = 0;\n const {\n align,\n classPrefix,\n item\n } = context.config();\n const data = context.data();\n // Create the skeleton for the legend\n const {\n legendContainer,\n legendGradSvg,\n legendGradCont,\n linearGradient,\n legendRect\n } = createLegendSkeleton(container, classPrefix, data);\n const labelDim = context.axis().source().getAxisDimensions().tickLabelDim;\n const {\n padding,\n margin,\n border,\n titleSpaces,\n maxHeight,\n maxWidth,\n height,\n width\n } = context.measurement();\n const gradientDimensions = {};\n\n gradHeight = Math.floor(height - (titleSpaces.height + 2 * margin + 2 * border));\n gradWidth = Math.floor(width - (margin * 2 + border * 2));\n\n if (align === ALIGN.HORIZONTAL) {\n gradientDimensions.height = item.icon.height;\n gradientDimensions.width = gradWidth - 2 * padding - labelDim.width / 2;\n linearGradient.attr('x2', '100%').attr('y1', '0%');\n legendGradCont.attr('transform', `translate( ${labelDim.width / 2} 0)`);\n renderAxis(context, legendContainer, gradHeight - item.icon.height - padding, gradWidth - 2 * padding - 1);\n legendContainer.classed(`${classPrefix}-overflow-x`, width > maxWidth);\n\n applyStyle(legendContainer, {\n height: `${height}px`,\n width: `${Math.min(width, maxWidth)}px`,\n padding: `${padding}px`\n });\n\n legendRect.attr('height', gradientDimensions.height);\n legendRect.attr('width', gradientDimensions.width - labelDim.width / 2);\n } else {\n gradientDimensions.height = gradHeight - 2 * padding - labelDim.height / 2;\n gradientDimensions.width = item.icon.width;\n linearGradient.attr('x2', '0%').attr('y1', '100%');\n legendGradCont.attr('transform', `translate(0 ${labelDim.height / 2})`);\n renderAxis(context, legendContainer, gradHeight - 2 * padding - 1, gradWidth - item.icon.width - padding * 2);\n legendContainer.classed(`${classPrefix}-overflow-y`, height > maxHeight);\n applyStyle(legendContainer, {\n height: `${Math.min(height, maxHeight)}px`,\n width: `${width}px`,\n padding: `${padding}px`\n });\n legendRect.attr('height', gradientDimensions.height - labelDim.height / 2);\n legendRect.attr('width', gradientDimensions.width);\n }\n\n // Apply Styles to the legend plot area\n applyStyle(legendGradSvg, {\n height: `${gradientDimensions.height}px`,\n width: `${gradientDimensions.width}px`\n });\n\n // Apply styles to the legend rect\n applyStyle(legendRect, {\n fill: 'url(#linear-gradient)'\n });\n legendGradSvg.attr('height', gradientDimensions.height);\n legendGradSvg.attr('width', gradientDimensions.width);\n\n context.measurement({\n gradientDimensions\n });\n context._legendGradientSvg = legendGradSvg;\n return context;\n};\n","import SimpleLegend from './simple-legend';\nimport { getScaleInfo, getInterpolatedData } from './legend-helper';\nimport { GRADIENT, LEFT, SIZE } from '../enums/constants';\nimport { renderGradient, createAxis } from './gradient-helper';\nimport '../styles.scss';\n\n/**\n * Creates a Legend from the axes of a canvas\n *\n * @param {Object} dependencies : legend data\n * @class Legend\n */\nexport default class GradientLegend extends SimpleLegend {\n\n /**\n * Initializes an instance of the class\n *\n * @static\n * @param {Object} dependencies Set of dependencies required by the legend\n * @return {Instance} returns a new instance of Legend\n * @memberof Legend\n */\n static create (dependencies) {\n return new GradientLegend(dependencies);\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof GradientLegend\n */\n static type () {\n return GRADIENT;\n }\n\n /**\n *\n *\n * @param {*} axis\n * @returns\n * @memberof GradientLegend\n */\n axis (...axis) {\n if (axis.length) {\n this._axis = axis[0];\n return this;\n }\n return this._axis;\n }\n\n /**\n *\n *\n * @param {*} scale\n * @returns\n * @memberof GradientLegend\n */\n dataFromScale (scale) {\n let domainForLegend = [];\n const { scaleType, domain, steps, scaleFn } = getScaleInfo(scale);\n\n if (steps instanceof Array) {\n if (domain[0] < steps[0]) {\n domainForLegend[0] = domain[0];\n }\n domainForLegend = [...domainForLegend, ...steps];\n if (domain[domain.length - 1] > steps[steps.length - 1]) {\n domainForLegend.push(domain[1]);\n }\n } else {\n domainForLegend = getInterpolatedData(domain, steps - 1);\n }\n domainForLegend = [...new Set(domainForLegend)].sort((a, b) => a - b);\n\n return domainForLegend.map((ele, i) => {\n const value = domainForLegend[i];\n return {\n [scaleType]: scaleType === SIZE ? scale[scaleFn](ele) * scale.getScaleFactor()\n : scale[scaleFn](Math.floor(ele)),\n value: +value.toFixed(2),\n id: i\n };\n }).filter(d => d.value !== null);\n }\n\n /**\n *\n *\n * @param {*} effPadding\n * @param {*} align\n * @return\n * @memberof Legend\n */\n getLabelSpaces (effPadding) {\n this.config({\n item: {\n text: {\n orientation: this.config().position\n }\n }\n });\n const axis = createAxis(this);\n const axisSpace = axis.getLogicalSpace();\n const space = { width: axisSpace.width - effPadding, height: axisSpace.height - effPadding };\n const axisDomainLength = axis.source().domain().length;\n const labelSpaces = new Array(axisDomainLength).fill(space);\n\n this.axis(axis);\n return labelSpaces;\n }\n\n /**\n *\n *\n * @returns\n * @memberof GradientLegend\n */\n getDrawingContext () {\n return {\n svgContainer: this._legendGradientSvg\n };\n }\n\n /**\n * Render the legend with its title\n *\n * @param {DOM} mountPoint Point where the legend and title are to be appended\n * @return {Instance} Current instance of legend\n * @memberof Legend\n */\n render () {\n const firebolt = this.firebolt();\n const legendContainer = super.render(this.mount());\n // create Legend\n renderGradient(this, legendContainer);\n legendContainer.selectAll('div').style('float', LEFT);\n firebolt.mapActionsAndBehaviour();\n firebolt.createSelectionSet(this.data().map(d => d.id));\n return legendContainer;\n }\n /**\n *\n *\n * @param {*} data\n * @returns\n * @memberof SimpleLegend\n */\n getCriteriaFromData (data) {\n return [[this.fieldName()], [data.value]];\n }\n}\n","import SimpleLegend from './simple-legend';\nimport {\n getScaleInfo,\n getInterpolatedData,\n getDomainBounds\n} from './legend-helper';\nimport {\n createLegendSkeleton,\n createItemSkeleton,\n renderStepItem\n} from './renderer';\nimport { STEP, RECT, LEFT, SIZE, UPPER, LOWER } from '../enums/constants';\nimport { stepData } from './position-config';\nimport '../styles.scss';\n\n/**\n * Creates a Legend from the axes of a canvas\n *\n * @param {Object} dependencies : legend data\n * @class Legend\n */\nexport default class StepLegend extends SimpleLegend {\n\n /**\n * Initializes an instance of the class\n *\n * @static\n * @param {Object} dependencies Set of dependencies required by the legend\n * @return {Instance} returns a new instance of Legend\n * @memberof Legend\n */\n static create (dependencies) {\n return new StepLegend(dependencies);\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof StepLegend\n */\n static type () {\n return STEP;\n }\n\n /**\n *\n *\n * @param {*} scale\n * @returns\n * @memberof StepLegend\n */\n dataFromScale (scale) {\n let domainLeg = [];\n const { scaleType, domain, steps, scaleFn } = getScaleInfo(scale);\n\n const { formatter } = this.config();\n const domainBounds = {\n lower: null, upper: null\n };\n\n if (steps instanceof Array) {\n if (domain[0] < steps[0]) {\n domainBounds.lower = [`${formatter.bounds.lower} ${steps[0]}`];\n }\n domainLeg = [...domainLeg, ...steps];\n if (domain[domain.length - 1] > steps[steps.length - 1]) {\n domainBounds.upper = [`${formatter.bounds.upper} ${steps[steps.length - 1]}`];\n }\n } else {\n domainLeg = getInterpolatedData(domain, steps);\n }\n\n domainLeg = [...new Set(domainLeg)].sort((a, b) => a - b);\n domainLeg = domainLeg.map((ele, i) => {\n let value = null;\n if (i < domainLeg.length - 1) {\n value = `${(ele.toFixed(1))} - ${(+domainLeg[i + 1].toFixed(1))}`;\n }\n return {\n [scaleType]: scaleType === SIZE ? scale[scaleFn](ele) * scale.getScaleFactor() : scale[scaleFn](ele),\n value,\n id: i + 1,\n range: [ele, domainLeg[i + 1]]\n };\n }).filter(d => d.value !== null);\n\n if (domainBounds.lower) {\n const lowerBounds = getDomainBounds(LOWER, { scale, scaleFn, scaleType },\n { domain, steps, domainBounds });\n domainLeg = [lowerBounds, ...domainLeg];\n }\n if (domainBounds.upper) {\n const upperBounds = getDomainBounds(UPPER, { scale, scaleFn, scaleType },\n { domain, steps, domainBounds, domainLeg });\n domainLeg = [...domainLeg, upperBounds];\n }\n return domainLeg;\n }\n\n /**\n *\n *\n * @param {*} effPadding\n * @param {*} align\n * @return\n * @memberof Legend\n */\n getLabelSpaces (effPadding, align) {\n this.config({\n item: {\n text: {\n orientation: this.config().position\n }\n }\n });\n return super.getLabelSpaces(effPadding, align);\n }\n\n /**\n *\n *\n * @return\n * @memberof Legend\n */\n elemType () {\n return RECT;\n }\n\n /**\n * Render the legend with its title\n *\n * @param {DOM} mountPoint Point where the legend and title are to be appended\n * @return {Instance} Current instance of legend\n * @memberof Legend\n */\n render () {\n const firebolt = this.firebolt();\n const { classPrefix, position } = this.config();\n const data = stepData(this.data())[position];\n\n const legendContainer = super.render(this.mount());\n\n // create Legend\n const { legendItem } = createLegendSkeleton(this, legendContainer, classPrefix, data);\n const { itemSkeleton } = createItemSkeleton(this, legendItem);\n\n renderStepItem(this, itemSkeleton);\n legendContainer.selectAll('div').style('float', LEFT);\n firebolt.mapActionsAndBehaviour();\n firebolt.createSelectionSet(this.data().map(d => d.id));\n return legendContainer;\n }\n\n /**\n *\n *\n * @param {*} data\n * @returns\n * @memberof StepLegend\n */\n getCriteriaFromData (data) {\n const fieldName = this.fieldName();\n return {\n [fieldName]: data.range\n };\n }\n}\n","import { GradientLegend, DiscreteLegend, StepLegend } from '@chartshq/muze-legend';\n\n/**\n * Contants to be used as attr\n */\nexport const ROWS = 'rows';\nexport const COLUMNS = 'columns';\nexport const DATA = 'data';\nexport const COLOR = 'color';\nexport const SHAPE = 'shape';\nexport const SIZE = 'size';\nexport const DETAIL = 'detail';\nexport const LAYERS = 'layers';\nexport const TRANSFORM = 'transform';\nexport const INITIALIZED = 'isInitialized';\nexport const SOURCE = 'source';\nexport const WIDTH = 'width';\nexport const HEIGHT = 'height';\nexport const PADDING = 'padding';\nexport const BORDER = 'border';\nexport const MARGIN = 'margin';\nexport const CONFIG = 'config';\nexport const MOUNT = 'mount';\nexport const CANVAS_UPDATED = 'canvasUpdated';\nexport const CLASSPREFIX = 'classPrefix';\nexport const POLICIES = '_policies';\nexport const LEGEND = 'legend';\nexport const TITLE = 'title';\nexport const SUB_TITLE = 'subtitle';\nexport const RESOLVE = 'resolve';\nexport const DISCRETE = 'discrete';\nexport const STEP_COLOR = 'step-color';\nexport const GRADIENT = 'gradient';\nexport const LINEAR = 'linear';\nexport const ORDINAL = 'ordinal';\n\nexport const TITLE_TEMPLATE_NOT_ALLOWED_TAGS = [\n 'script',\n 'style'\n];\n\nexport const LEGEND_TYPE_MAP = {\n [`${ORDINAL}-${true}-${COLOR}`]: DiscreteLegend,\n [`${ORDINAL}-${true}-${SIZE}`]: DiscreteLegend,\n [`${ORDINAL}-${true}-${SHAPE}`]: DiscreteLegend,\n [`${ORDINAL}-${false}-${COLOR}`]: DiscreteLegend,\n [`${ORDINAL}-${false}-${SHAPE}`]: DiscreteLegend,\n [`${ORDINAL}-${false}-${SIZE}`]: DiscreteLegend,\n [`${LINEAR}-${false}-${SIZE}`]: DiscreteLegend,\n [`${LINEAR}-${true}-${SIZE}`]: DiscreteLegend,\n [`${LINEAR}-${false}-${SHAPE}`]: DiscreteLegend,\n [`${LINEAR}-${true}-${COLOR}`]: StepLegend,\n [`${LINEAR}-${false}-${COLOR}`]: GradientLegend\n};\n\nexport const LEFT = 'left';\nexport const RIGHT = 'right';\nexport const BOTTOM = 'bottom';\nexport const TOP = 'top';\nexport const GROUP = 'group';\nexport const LAYOUT = 'layout';\nexport const RETINAL = 'retinal';\nexport const DIMENSION = 'dimension';\nexport const MEASURE = 'measure';\nexport const VERTICAL = 'vertical';\nexport const HORIZONTAL = 'horizontal';\n\n","import { ComposedVars, SimpleVariable } from '@chartshq/visual-group';\nimport { TITLE_TEMPLATE_NOT_ALLOWED_TAGS } from './constants';\n\n/**\n * This method creates a new composed variable instance from multiple variables.\n * @param {Array} vars Variable names\n * @return {ComposedVars} Instance of composed variable\n */\nexport const share = (...vars) => new ComposedVars(...vars.map(variable => new SimpleVariable(variable)));\n\n/**\n *\n *\n * @param {*} node\n * @returns\n */\nfunction treeShakeNode (node) {\n if (node.nodeType !== Node.ELEMENT_NODE) { return; }\n\n if (TITLE_TEMPLATE_NOT_ALLOWED_TAGS.indexOf(node.tagName.toLowerCase()) !== -1) {\n node.parentNode.removeChild(node);\n } else {\n for (const childNode of node.childNodes) {\n treeShakeNode(childNode);\n }\n }\n}\n\n/**\n * A string template tagged function which sanitizes input html formatted\n * string according to the allowed html tags.\n *\n * @param {Array.} strings - The string parts of the template.\n * @param {Array} exps - The list of evaluated expression values.\n * @return {Function} Returns a function which returns the sanitized html string.\n */\nexport function html (strings, ...exps) {\n let htmlCode = '';\n const expLn = exps.length;\n let i = 0;\n\n for (; i < expLn; ++i) {\n htmlCode += strings[i] + exps[i];\n }\n htmlCode += strings[i];\n\n const frag = document.createDocumentFragment();\n const wrapper = document.createElement('div');\n\n frag.appendChild(wrapper);\n wrapper.innerHTML = htmlCode;\n\n treeShakeNode(wrapper);\n const { innerHTML } = wrapper;\n\n return () => innerHTML;\n}\n","import { mergeRecursive } from 'muze-utils';\n\nconst defaultPolicy = (registrableComponents) => {\n const aliases = registrableComponents.map(comp => comp.alias());\n return {\n behaviours: {\n '*': (propagationPayload) => {\n const propagationCanvas = propagationPayload.sourceCanvas;\n return propagationCanvas ? aliases.indexOf(propagationCanvas) !== -1 : true;\n }\n }\n };\n};\n\nclass ActionModel {\n constructor () {\n this._registrableComponents = [];\n }\n\n registerPhysicalActions (action) {\n const canvases = this._registrableComponents;\n\n canvases.forEach((canvas) => {\n canvas.once('canvas.updated').then((args) => {\n const matrix = args.client.composition().visualGroup.matrixInstance().value;\n matrix.each(cell => cell.valueOf().firebolt().registerPhysicalActions(action));\n });\n });\n return this;\n }\n\n registerBehaviouralActions (...actions) {\n const canvases = this._registrableComponents;\n\n canvases.forEach((canvas) => {\n canvas.once('canvas.updated').then(() => {\n const matrix = canvas.composition().visualGroup.matrixInstance().value;\n matrix.each(cell => cell.valueOf().firebolt().registerBehaviouralActions(...actions));\n });\n });\n return this;\n }\n\n /**\n *\n *\n * @param {*} map\n * @returns\n * @memberof ActionModel\n */\n registerPhysicalBehaviouralMap (map) {\n const canvases = this._registrableComponents;\n\n canvases.forEach((canvas) => {\n canvas.once('canvas.updated').then((args) => {\n const matrix = args.client.composition().visualGroup.matrixInstance().value;\n matrix.each(cell => cell.valueOf().firebolt().registerPhysicalBehaviouralMap(map));\n });\n });\n return this;\n }\n\n registerPropagationBehaviourMap (map) {\n const canvases = this._registrableComponents;\n\n canvases.forEach((canvas) => {\n canvas.once('canvas.updated').then((args) => {\n const matrix = args.client.composition().visualGroup.matrixInstance().value;\n matrix.each(cell => cell.valueOf().firebolt().registerPropagationBehaviourMap(map));\n });\n });\n return this;\n }\n\n mapSideEffects (map) {\n const canvases = this._registrableComponents;\n\n canvases.forEach((canvas) => {\n canvas.once('canvas.updated').then(() => {\n const matrix = canvas.composition().visualGroup.matrixInstance().value;\n matrix.each(cell => cell.valueOf().firebolt().mapSideEffects(map));\n });\n });\n return this;\n }\n\n for (...components) {\n this._registrableComponents = components;\n return this;\n }\n\n registerSideEffects (...sideEffects) {\n const registrableComponents = this._registrableComponents;\n\n registrableComponents.forEach((canvas) => {\n canvas.once('canvas.updated').then((args) => {\n const matrix = args.client.composition().visualGroup.matrixInstance().value;\n matrix.each(cell => cell.valueOf().firebolt().registerSideEffects(sideEffects));\n });\n });\n\n return this;\n }\n\n dissociateBehaviour (...maps) {\n const registrableComponents = this._registrableComponents;\n\n registrableComponents.forEach((canvas) => {\n canvas.once('canvas.updated').then((args) => {\n const matrix = args.client.composition().visualGroup.matrixInstance().value;\n matrix.each((cell) => {\n maps.forEach(val => cell.valueOf().firebolt().dissociateBehaviour(val[0], val[1]));\n });\n });\n });\n\n return this;\n }\n\n dissociateSideEffect (...maps) {\n const registrableComponents = this._registrableComponents;\n\n registrableComponents.forEach((canvas) => {\n canvas.once('canvas.updated').then((args) => {\n const matrix = args.client.composition().visualGroup.matrixInstance().value;\n matrix.each((cell) => {\n maps.forEach(val => cell.valueOf().firebolt().dissociateSideEffect(val[0], val[1]));\n });\n });\n });\n\n return this;\n }\n\n enableCrossInteractivity (policy = {}) {\n const registrableComponents = this._registrableComponents;\n const mergedPolicy = mergeRecursive(mergeRecursive({}, defaultPolicy(registrableComponents)), policy);\n\n registrableComponents.forEach((canvas) => {\n canvas.firebolt().crossInteractionPolicy(mergedPolicy);\n });\n\n return this;\n }\n}\n\nexport const actionModel = (() => new ActionModel())();\n","export const DEFAULT_CONFIG = {\n classPrefix: 'muze',\n interaction: {\n sideEffect: 'individual'\n },\n legend: {\n position: 'right',\n color: {\n show: true,\n padding: 2,\n margin: 2,\n border: 1,\n height: 30,\n width: 30\n },\n shape: {\n show: true,\n padding: 2,\n margin: 2,\n border: 1,\n height: 30,\n width: 30\n },\n size: {\n show: true,\n padding: 2,\n margin: 2,\n border: 1,\n height: 30,\n width: 30\n }\n },\n showHeaders: false,\n minWidth: 100,\n minHeight: 100,\n border: {\n style: 'solid',\n color: '#d6d6d6',\n width: 2,\n collapse: true,\n spacing: 0\n },\n autoGroupBy: {\n disabled: false\n }\n};\n","/**\n * @module\n * This is the global options semantics based on which setters getters are created and reactivity is initiated.\n * Format\n * PROPERTRY_NAME: {\n * value: // default value of the property,\n * meta: {\n * typeCheck: // The setter value will be checked using this. If the value is function then the setter value\n * // is passed as args.\n * typeExpected: // The output of typecheck action will be tested against this. Truthy value will set the\n * // value to the setter\n * sanitizaiton: // Need for sanitization before type is checked\n * }\n * }\n */\n\nimport { intSanitizer, mergeRecursive, DataModel } from 'muze-utils';\nimport { DEFAULT_CONFIG } from './defaults';\n\nexport default {\n data: {\n value: null,\n meta: {\n typeCheck: d => d instanceof DataModel\n }\n },\n width: {\n value: 0,\n meta: {\n sanitization: intSanitizer,\n typeCheck: Number.isInteger\n }\n },\n height: {\n value: 0,\n meta: {\n sanitization: intSanitizer,\n typeCheck: Number.isInteger\n }\n },\n minUnitWidth: {\n value: 50,\n meta: {\n sanitization: intSanitizer,\n typeCheck: Number.isInteger\n }\n },\n minUnitHeight: {\n value: 50,\n meta: {\n sanitization: intSanitizer,\n typeCheck: Number.isInteger\n }\n },\n config: {\n value: null,\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Object',\n sanitization: (config, oldConfig) => {\n const oldConf = mergeRecursive({}, oldConfig);\n const defConfig = mergeRecursive(oldConf, DEFAULT_CONFIG);\n const newConf = mergeRecursive(defConfig, config);\n return newConf;\n }\n\n }\n }\n};\n","/**\n * This file exports constants that will be used to\n * create the state store of the table layout.\n */\n/**\n * The index of top, bottom and center in the matrix\n */\nexport const VIEW_INDEX = {\n top: 0,\n center: 1,\n bottom: 2\n};\n\n/**\n * The width of the grid suppied by the user.\n */\nexport const GRID_WIDTH = 'width';\n\n/**\n * The height of the grid supplied by the user.\n */\nexport const GRID_HEIGHT = 'height';\n\n/**\n * The border for the grid\n */\nexport const BORDER = 'border';\n\n /**\n * The index of the first visible row in view matrix.\n */\nexport const ROW_POINTER = 'rowPointer';\n\n/**\n * The index of the first visible column in the view matrix.\n */\nexport const COLUMN_POINTER = 'columnPointer';\n\n/**\n * Flag to specify whether row sizes should be equal.\n */\nexport const ROW_SIZE_IS_EQUAL = 'isRowSizeEqual';\n\n/**\n * Flag to specify whether column sizes are equal.\n */\nexport const COLUMN_SIZE_IS_EQUAL = 'isColumnSizeEqual';\n\n/**\n * Field to store an array an of the widths of visible columns.\n * @computed\n */\nexport const COLUMN_WIDTHS = 'visibleColumnWidths';\n\n/**\n * Field to store an array of heights of visible rows.\n * @computed\n */\nexport const ROW_HEIGHTS = 'visibleRowHeights';\n\n/**\n * Field to store the width of the left matrix.\n * @computed\n */\nexport const LEFT_MATRIX_WIDTH = 'leftMatrixWidth';\n\n/**\n * Field to store the width of the right matrix.\n * @computed\n */\nexport const RIGHT_MATRIX_WIDTH = 'rightMatrixWidth';\n\n/**\n * Field to store the height of the top matrix.\n * @computed\n */\nexport const TOP_MATRIX_HEIGHT = 'topMatrixHeight';\n\n/**\n * Field to store the height of the bottom matrix.\n * @computed\n */\nexport const BOTTOM_MATRIX_HEIGHT = 'bottomMatrixHeight';\n\n/**\n * The dom element to render the layout inside.\n */\nexport const MOUNT_POINT = 'mount';\n\n/**\n * The id attribute of the left table element.\n */\nexport const LEFT_TABLE_ID = 'grid-left';\n\n/**\n * The id attribute of the right table element.\n */\nexport const RIGHT_TABLE_ID = 'grid-right';\n\n/**\n * The id attribute of the top table.\n */\nexport const TOP_TABLE_ID = 'grid-top';\n\n/**\n * The id attribute of the bottom table.\n */\nexport const BOTTOM_TABLE_ID = 'grid-bottom';\n\n/**\n * The id attribute of the center table.\n */\nexport const CENTER_TABLE_ID = 'grid-center';\n\n/**\n * The id attribute of the top div.\n */\nexport const TOP_DIV_ID = 'muze-div-top';\n\n/**\n * The id attribute of the bottom div.\n */\nexport const BOTTOM_DIV_ID = 'muze-div-bottom';\n\n/**\n * The id attribute of the center div.\n */\nexport const CENTER_DIV_ID = 'muze-div-center';\n\n/**\n * Field that indicates if the row configuration has changed\n */\nexport const HAVE_ROWS_CHANGED = 'haveRowsChanged';\n\n/**\n * Field that indicates if the column configuration has changed\n */\nexport const HAVE_COLUMNS_CHANGED = 'haveColumnsChanged';\n\n/**\n * Field that indicates if the values configuration for the center matrix has changed\n */\nexport const HAVE_VALUES_CHANGED = 'haveValuesChanged';\n\n/**\n * Field that indicates the width of row matrix\n */\nexport const ROW_MATRIX_WIDTH = 'rowMatrixWidth';\n\n/**\n * Field that indicates the height of row matrix\n */\nexport const COLUMN_MATRIX_HEIGHT = 'columnMatrixHeight';\n\n/**\n * Field that indicates the unit width of layout\n */\nexport const UNIT_WIDTH = 'unitWidth';\n\n/**\n * Field that indicates the unit height of layout\n */\nexport const UNIT_HEIGHT = 'unitHeight';\n\n/**\n * Field that indicates the style object\n */\nexport const STYLE = 'style';\n\n/**\n * Field that indicates the color configuration\n */\nexport const COLOR = 'color';\n\n/**\n * Field that indicates width\n */\nexport const WIDTH = 'width';\n\n/**\n * Field that indicates collpase property for border\n */\nexport const COLLAPSE = 'collapse';\n\n/**\n * Field that indicates spacing property for border\n */\nexport const SPACING = 'spacing';\n\n/**\n * Field that indicates spacing property for border\n */\nexport const DISTRIBUTION = 'distribution';\n\n/**\n * Field that indicates spacing property for border\n */\nexport const GUTTERSPACE = 'gutterSpace';\n\n/**\n * Field that indicates spacing property for border\n */\nexport const BREAK_PAGE = 'breakPage';\n\n/**\n * Field that indicates spacing property for border\n */\nexport const SHOW_ROW_BORDERS = 'showRowBorders';\n\n/**\n * Field that indicates spacing property for border\n */\nexport const SHOW_COL_BORDERS = 'showColBorders';\n\n/**\n * Field that indicates spacing property for border\n */\nexport const SHOW_VALUE_BORDERS = 'showValueBorders';\n\nexport const HEIGHT = 'height';\nexport const COLUMN = 'column';\nexport const ROW = 'row';\nexport const TOP = 'top';\nexport const LEFT = 'left';\nexport const RIGHT = 'right';\nexport const BOTTOM = 'bottom';\nexport const CENTER = 'center';\nexport const CLICK = 'click';\nexport const ROW_LEFT = 'rowLeft';\nexport const ROW_RIGHT = 'rowRight';\nexport const COLUMN_BOTTOM = 'colBottom';\nexport const COLUMN_TOP = 'colTop';\nexport const AUTO = 'auto';\nexport const ROW_SPAN = 'rowSpan';\nexport const COL_SPAN = 'colSpan';\nexport const ROW_ROOT = 'rowRoot';\nexport const COLUMN_ROOT = 'columnRoot';\nexport const PRIMARY = 'primary';\nexport const SECONDARY = 'secondary';\n","import { sanitizeIP, mergeRecursive } from 'muze-utils';\nimport { TOP, CENTER, BOTTOM } from '../enums/constants';\n\n/*\n * This is the abstract implementation of the root layout. This takes care of common work which all the layouts\n * has to handle. The common work includes sanitizaion of inputs, update, rerender, dispose etc. This class can't be\n * used directly (as ofcourse this is an abstract implementaiton), the class which is implementing it has to implement\n * the necessary methods and gives its on visual.\n */\n\n/**\n * This class is used to create a generic layout. It can be extended to create layouts\n * of different types\n * @class GenericLayout\n */\nexport default class GenericLayout {\n\n /**\n * Creates an instance of TableLayout.\n * @param {HTMLElement} mountPoint DOM element/d3 selection where the layout is to be mounted\n * @param {Object} measurement The dimensions of the layout\n * @param {Object} config configuration to be given for the layout\n * @param {Object} dependencies external dependencies.\n * @memberof GenericLayout\n *\n * measurement : {\n * width : number => width of the container\n * height : number => height of the container\n * unitHeight : number => height of unit of the cells\n * unitWidth : number => width of unit of the cells\n * }\n *\n */\n constructor (mountPoint, measurement, config, dependencies) {\n this._config = {};\n this._measurement = {};\n this._matrices = [];\n // External dependencies to be included for the layout. This includes the ext global dependencies like\n // smartlabel which has one single implementation of throughout the page or per isntance\n this._dependencies = dependencies;\n\n this.measurement(measurement);\n this.mountPoint(mountPoint);\n this.config(config);\n }\n\n /**\n * Returns an object which is used to recreate the layout.\n * @return {Object} the serialized components\n */\n serialize () {\n return {\n measurement: this.measurement(),\n config: this.config(),\n matrices: this.matrices()\n };\n }\n\n /**\n * Sets/Gets the config for the layout\n * @param {Object} config configuration for the layout\n * @return {Layout|Object} Gets the Config/ Returns this instance when set\n */\n config (config) {\n if (config) {\n this._config = mergeRecursive(this._config || {}, config);\n return this;\n }\n return this._config;\n }\n\n /**\n * Sets/Gets the measurement for the layout\n * @param {Object} measurement measurement for the layout\n * @return {Layout|Object} Gets the measurement/ Returns this instance when set\n */\n measurement (measurement) {\n if (measurement) {\n this._measurement = mergeRecursive(this._measurement || {}, measurement);\n\n return this;\n }\n return this._measurement;\n }\n\n /**\n * Sets/Gets the matrices for the layout\n * @param {Object} matrices matrices for the layout\n * @return {Layout|Object} Gets the matrices/ Returns this instance when set\n */\n matrices (matrices) {\n if (matrices) {\n this._matrices = sanitizeIP.typeObj([TOP, CENTER, BOTTOM], matrices);\n\n return this;\n }\n return this._matrices;\n }\n\n /**\n * Sets/Gets the matrix for row\n * @param {Object} matrix matrices for the layout\n * @return {Layout|Object} Gets the matrix/ Returns this instance when set\n */\n rowMatrix (matrix) {\n if (matrix) {\n this._rowMatrix = matrix;\n return this;\n }\n return this._rowMatrix;\n }\n\n /**\n * Sets/Gets the matrix for columns\n * @param {Object} matrix matrices for the layout\n * @return {Layout|Object} Gets the matrix/ Returns this instance when set\n */\n columnMatrix (matrix) {\n if (matrix) {\n this._columnMatrix = matrix;\n return this;\n }\n return this._columnMatrix;\n }\n\n /**\n * Sets/Gets the matrix for value\n * @param {Object} matrix matrices for the layout\n * @return {Layout|Object} Gets the matrix/ Returns this instance when set\n */\n centerMatrix (matrix) {\n if (matrix) {\n this._centerMatrix = matrix;\n return this;\n }\n return this._centerMatrix;\n }\n\n /**\n * Sets/Gets the mountPoint for the layout\n * @param {Object} mountPoint mountPoint for the layout\n * @return {Layout|Object} Gets the mountPoint/ Returns this instance when set\n */\n mountPoint (mountPoint) {\n if (mountPoint) {\n this._mountPoint = mountPoint;\n\n return this;\n }\n return this._mountPoint;\n }\n}\n","import * as FieldNames from '../enums/constants';\n\n/**\n * Default configuration of the layout\n * @return {Object} returns the default configuration\n */\nexport const DEFAULT_CONFIGURATION = {\n [FieldNames.BORDER]: {\n [FieldNames.STYLE]: 'solid',\n [FieldNames.COLOR]: '#d6d6d6',\n [FieldNames.WIDTH]: 2,\n [FieldNames.COLLAPSE]: true,\n [FieldNames.SPACING]: 0\n },\n [FieldNames.GUTTERSPACE]: { rows: [], columns: [] },\n [FieldNames.DISTRIBUTION]: { rows: [], columns: [] },\n [FieldNames.BREAK_PAGE]: { rows: [], columns: [] },\n [FieldNames.ROW_SIZE_IS_EQUAL]: false,\n [FieldNames.COLUMN_SIZE_IS_EQUAL]: false,\n [FieldNames.COLUMN_POINTER]: 0,\n [FieldNames.ROW_POINTER]: 0\n};\n\n/**\n * Default measurements for the layout\n * @return {Object} returns the default measurements\n */\nexport const DEFAULT_MEASUREMENTS = {\n [FieldNames.GRID_WIDTH]: 100,\n [FieldNames.GRID_HEIGHT]: 100,\n [FieldNames.UNIT_WIDTH]: 100,\n [FieldNames.UNIT_HEIGHT]: 100\n};\n\nexport const BLANK_BORDERS = 'rgba(0,0,0,0)';\n","import { ROW_LEFT, ROW_RIGHT, COLUMN_BOTTOM, COLUMN_TOP, TOP, BOTTOM } from '../enums/constants';\n/**\n * This callback is used to filter the array of\n * placeholder cells and filter out cells which have\n * appeared in a previous row.\n *\n * @param {Placeholder} colData Instance of placeholder.\n * @param {number} colIdx The index of the placeholder in array.\n * @param {Array} matrix The 2d array for which filtering is to be done\n * @param {number} rIdx The index of the row of the placeholder in array.\n * @param {string} type The type of matrix it is (rowLeft, rowRight, colTop, colBottom)\n * @return {boolean} flag to keep/remove element.\n */\nconst columnFilter = (colData, colIdx, matrix, rIdx, type) => {\n const previousRow = matrix[rIdx - 1];\n const currentRow = matrix[rIdx];\n\n // Row Span for left\n if (type === ROW_LEFT) {\n if (!previousRow) {\n return colData;\n }\n let i = 0;\n for (;i <= colIdx; i += 1) {\n if (currentRow[i].valueOf() !== previousRow[i].valueOf()) {\n break;\n }\n }\n return (i - 1 === colIdx) ? null : colData;\n } else if (type === ROW_RIGHT) {\n if (!previousRow || colIdx === 0) {\n return colData;\n }\n let j = colIdx;\n for (; j < currentRow.length; j += 1) {\n if (previousRow[j].valueOf() !== currentRow[j].valueOf()) {\n break;\n }\n }\n return (j === currentRow.length) ? null : colData;\n } else if (type === COLUMN_BOTTOM) {\n if (rIdx === 0) {\n return colData;\n }\n const prevCell = currentRow[colIdx - 1];\n if (prevCell) {\n if (prevCell.valueOf() === colData.valueOf()) {\n const nextRow = matrix[rIdx + 1];\n if (!nextRow) {\n return null;\n }\n if (nextRow[colIdx].valueOf() === nextRow[colIdx - 1].valueOf()) {\n return null;\n }\n return colData;\n }\n return colData;\n }\n return colData;\n } else if (type === COLUMN_TOP) {\n if (rIdx === matrix.length - 1 && matrix.length > 1) {\n return colData;\n }\n const prevCell = currentRow[colIdx - 1];\n if (prevCell && (prevCell.valueOf() === colData.valueOf())) {\n const prevRow = matrix[rIdx - 1];\n if (prevRow) {\n if (prevRow[colIdx].valueOf() === prevRow[colIdx - 1].valueOf()) {\n return null;\n }\n return colData;\n }\n return null;\n }\n return colData;\n }\n return colData;\n};\n\n/**\n * This callback is used to calculate the rowspan\n * by checking for repeating entries in subsequent rows\n * at the specified column.\n *\n * @param {Placeholder} colData Instance of placeholder.\n * @param {number} colIdx The index of the placeholder in the array.\n * @param {Array} matrix The 2d array for which filtering is to be done\n * @param {number} rIdx The index of the row of the placeholder in array.\n * @return {number} The row span.\n */\nconst calcRowSpan = (colData, colIdx, matrix, rIdx) => {\n let count = 1;\n // if data is not header cell then rowspan\n // has to be 1\n if (!colData || typeof colData.valueOf() !== 'string') {\n return 1;\n }\n let isNull = false;\n while (!isNull) {\n if (matrix[rIdx + count] && matrix[rIdx + count][colIdx] === null) {\n count += 1;\n } else {\n isNull = true;\n }\n }\n return count;\n};\n/**\n * This callback is used to calculate the rowspan\n * by checking for repeating entries in subsequent rows\n * at the specified column.\n *\n * @param {Placeholder} colData Instance of placeholder.\n * @param {number} colIdx The index of the placeholder in the array.\n * @param {Array} matrix The 2d array for which filtering is to be done\n * @param {number} rIdx The index of the row of the placeholder in array.\n * @return {number} The row span.\n */\nconst calcColSpan = (colData, colIdx, matrix, rIdx) => {\n let count = 1;\n // if data is not header cell then rowspan\n // has to be 1\n if (!colData || typeof colData.valueOf() !== 'string') {\n return 1;\n }\n let isNull = false;\n while (!isNull) {\n if (matrix[rIdx][colIdx + count] === null) {\n count += 1;\n } else {\n isNull = true;\n }\n }\n return count;\n};\n\n// create a masking matrix to strip out repeating columns\n// and calculate rowspan.\nconst mask = function (matrix, type) {\n return matrix.map((row, rIdx) => {\n if (type === ROW_LEFT || type === ROW_RIGHT) {\n const filteredRow = row.map((col, colIndex) => columnFilter(col, colIndex, matrix, rIdx, type));\n const temp = [];\n const diff = row.length - filteredRow.length;\n for (let i = 0; i < diff; i += 1) {\n temp.push(null);\n }\n if (type === ROW_RIGHT) {\n temp.unshift(...filteredRow);\n return temp;\n }\n temp.push(...filteredRow);\n return temp;\n }\n\n const filteredRow = row.map((col, colIndex) => columnFilter(col, colIndex, matrix, rIdx, type));\n const temp = [];\n temp.push(...filteredRow);\n return temp;\n });\n};\n\n/**\n * This function is used to set the col and row spans\n * for the matrices based on repeated/hierarchichal data\n *\n * @export\n * @param {Array} matrix The 2d array for which filtering is to be done\n * @param {string} type Type of array (center, top, bottom)\n * @param {number} index Index of array in the row\n * @return {Object} containing the view matrix and their spans\n */\nexport function cellSpanMaker (matrix, type, index) {\n let span = '';\n if (type === TOP || type === BOTTOM) {\n span = type === TOP ? COLUMN_TOP : COLUMN_BOTTOM;\n const viewMatrix = mask(matrix, span);\n const spans = viewMatrix.map((row, ridx) => row.map((col, i) => calcColSpan(col, i, viewMatrix, ridx))\n .filter(col => col !== 1));\n return { viewMatrix, spans };\n } else if (index === 0 || index === 2) {\n span = index === 0 ? ROW_LEFT : ROW_RIGHT;\n const viewMatrix = mask(matrix, span);\n const spans = [];\n viewMatrix.forEach((row, ridx) => {\n spans[ridx] = spans[ridx] || [];\n row.forEach((col, i) => {\n if (viewMatrix[ridx][i]) {\n const currSpan = calcRowSpan(col, i, viewMatrix, ridx);\n currSpan && spans[ridx].push(currSpan);\n }\n });\n });\n return { viewMatrix, spans };\n }\n return { viewMatrix: matrix };\n}\n","import { makeElement, selectElement } from 'muze-utils';\nimport { cellSpanMaker } from './span-maker';\nimport {\n TOP, LEFT, RIGHT, BOTTOM, CENTER, WIDTH, ROW_SPAN, COL_SPAN\n} from '../enums/constants';\nimport { BLANK_BORDERS } from './defaults';\n\n/**\n * Creates a table element of the layout\n *\n * @param {Object} mount Mount point for table elements\n * @param {string} className defines class name\n * @param {Array} rowData set of rows for the table\n * @return {Selection} set of selections for the table\n */\nfunction renderTable (mount, className, rowData) {\n const table = makeElement(mount, 'table', ['layout'], `${className}-table`);\n const body = makeElement(table, 'tbody', ['layout'], `${className}-body`);\n const rows = makeElement(body, 'tr', rowData, `${className}-tr`);\n const cells = makeElement(rows, 'td', (d, i) => d.filter(e => e !== null && e.config().show).map(e =>\n ({ placeholder: e, rowIndex: i })), `${className}-td`, {}, key => key.placeholder.id);\n\n return { table, body, rows, cells };\n}\n\nfunction applyRowBorders (cells, borderStyle, showBorders, color) {\n [TOP, BOTTOM].forEach((borderType) => {\n const style = `${borderStyle} ${showBorders[borderType] ? color : BLANK_BORDERS}`;\n cells.style(`border-${borderType}`, style);\n });\n}\n\nfunction applyColBorders (cells, borderStyle, showBorders, color) {\n [LEFT, RIGHT].forEach((borderType) => {\n const style = `${borderStyle} ${showBorders[borderType] ? color : BLANK_BORDERS}`;\n cells.style(`border-${borderType}`, style);\n });\n}\n\n/**\n * Applies borders to the cells in a matrix\n *\n * @param {Selection} cells Set of cells made from the matrix\n * @param {Object} border Border info for layout\n * @param {string} type Type of matrix(top/center/bottom)\n * @param {number} index Column index of matrix in the row\n */\nfunction applyBorders (cells, border, type, index) {\n const {\n width,\n style,\n color,\n showRowBorders,\n showColBorders,\n showValueBorders\n } = border;\n const borderStyle = `${width}px ${style}`;\n\n if (type === CENTER && index === 1) {\n [TOP, BOTTOM, LEFT, RIGHT].forEach((borderType) => {\n cells.style(`border-${borderType}`, `${borderStyle} ${showValueBorders[borderType] ?\n color : BLANK_BORDERS}`);\n });\n } else if (type === CENTER) {\n applyRowBorders(cells, borderStyle, showRowBorders, color);\n } else if (index === 1) {\n applyColBorders(cells, borderStyle, showColBorders, color);\n }\n}\n\n/**\n * Renders a set of matrices in a row\n *\n * @param {Array} matrices Set of matrices in a row\n * @param {Selection} mountPoint Mount point for the row\n * @param {string} type top/center/bottom\n * @param {Object} dimensions dimensions of the matrix\n */\nfunction renderMatrix (matrices, mountPoint, type, dimensions, classPrefix) {\n matrices.forEach((matrix, index) => {\n if (dimensions.viewWidth[index]) {\n // Creating containers for each matrix individually\n const containerForMatrix = makeElement(mountPoint, 'div', [1], `${classPrefix}-grid-${type}-${index + 1}`)\n .classed(`${classPrefix}-grid-${type}`, true)\n .classed(`${classPrefix}-grid`, true);\n\n const {\n viewMatrix,\n spans\n } = cellSpanMaker(matrix, type, index);\n\n // Rendering the table components\n const { cells } = renderTable(containerForMatrix, `${classPrefix}-grid`, viewMatrix);\n\n if (type === CENTER && spans) {\n cells.attr(ROW_SPAN, function (cell, colIndex) {\n const placeholder = cell.placeholder;\n selectElement(this).style('height', `${placeholder.availHeight() + dimensions.border.width}px`);\n return spans[cell.rowIndex][colIndex];\n });\n } else if ((type === TOP || type === BOTTOM) && index === 1) {\n cells.attr(COL_SPAN, function (cell, colIndex) {\n const span = spans[cell.rowIndex][colIndex];\n const placeholder = cell.placeholder;\n if (span > 1) {\n placeholder.setAvailableSpace(0, placeholder.availHeight());\n }\n selectElement(this).style('height', `${placeholder.availHeight()}px`);\n return span;\n });\n }\n // Rendering content within placeholders\n cells.each(function (cell) {\n cell.placeholder && cell.placeholder.render(this);\n }).exit().each((cell) => {\n cell.placeholder && cell.placeholder.remove();\n });\n\n applyBorders(cells, dimensions.border, type, index);\n }\n });\n}\n\n/**\n * Renders all the matrices of the layout\n *\n * @export\n * @param {Array} matrices Set of matrices in the layout\n * @param {Array} mountPoints Mount points for each row of matrix\n * @param {Array} layoutDimensions Dimensions(height/width) of all the matrices\n */\nexport function renderMatrices (context, matrices, layoutDimensions) {\n const {\n top,\n center,\n bottom\n } = matrices;\n const {\n classPrefix\n } = context.config();\n const {\n width\n } = context.measurement();\n const mount = context.mountPoint();\n\n const data = [\n { type: TOP, matrix: top },\n { type: CENTER, matrix: center },\n { type: BOTTOM, matrix: bottom }\n ];\n makeElement(mount, 'div', data, `${classPrefix}-grid-layout-row`)\n .each(function (d, i) {\n const row = selectElement(this);\n row.classed(`${classPrefix}-grid-layout-row-${i}`, true);\n renderMatrix(d.matrix, row, d.type, layoutDimensions, classPrefix);\n })\n .style(WIDTH, `${Math.ceil(width)}px`);\n}\n","/**\n * This file exports utility functions that are used across the layout module\n */\nimport { Symbols } from 'muze-utils';\nimport { PRIMARY, SECONDARY, HEIGHT, WIDTH } from '../enums/constants';\n\nconst nest = Symbols.nest;\n/**\n *\n *\n * @param {*} isTransposed\n * @returns\n */\nconst getMeasureInfo = (isTransposed) => {\n if (isTransposed) {\n return {\n firstMeasure: HEIGHT,\n secondMeasure: WIDTH\n };\n }\n return {\n firstMeasure: WIDTH,\n secondMeasure: HEIGHT\n };\n};\n\n/**\n *\n *\n * @param {*} i\n * @param {*} page\n * @returns\n */\nconst findInPage = (i, page) => {\n let count = 0;\n for (const x in page) {\n if (i < page[x]) {\n count = x;\n break;\n }\n }\n return count;\n};\n\n/**\n * Creates a single matrix from two matrices\n *\n * @param {Array} matrix Input matrix\n * @return {Array} Joined matrix\n * @memberof VisualMatrix\n */\nexport const combineMatrices = (matrix, config) => {\n const { isTransposed } = config;\n let joinedMatrix = matrix[0].length > 0 ? matrix[0] : matrix[1];\n if (isTransposed) {\n joinedMatrix = matrix[0].length > 0 ? [...matrix[0]] : [];\n joinedMatrix = matrix[1].length > 0 ? [...joinedMatrix, ...matrix[1]] : joinedMatrix;\n } else {\n joinedMatrix = joinedMatrix.map((row, rowIndex) => {\n let rowData = [];\n if (matrix[0].length > 0) {\n rowData = [...matrix[0][rowIndex]];\n }\n if (matrix[1].length > 0) {\n rowData = [...rowData, ...matrix[1][rowIndex]];\n }\n return rowData;\n });\n }\n return joinedMatrix;\n};\n\n/**\n * Creates a hirachical tree from the context\n *\n * @param {Object} context context for creating tree\n * @return {Object} nested tree\n */\nexport const createTree = (context) => {\n let matrixTree = {};\n let lastLevelKey = 0;\n let facet = PRIMARY;\n const nestFn = nest();\n const keys = [];\n const layoutMatrix = context._layoutMatrix;\n const primaryMatrix = context.primaryMatrix();\n const secondaryMatrix = context.secondaryMatrix();\n const { isTransposed, breakPage } = context.config();\n\n if (!isTransposed) {\n if (primaryMatrix.length === 0) {\n facet = PRIMARY;\n } else if (secondaryMatrix.length === 0) {\n facet = SECONDARY;\n } else {\n facet = primaryMatrix.length >= secondaryMatrix.length ? PRIMARY : SECONDARY;\n }\n if (primaryMatrix.length > 0) {\n for (let i = 0; i < primaryMatrix[0].length - 1; i++) {\n keys.push(i);\n }\n keys.push(primaryMatrix[0].length - 1);\n if (facet === SECONDARY || secondaryMatrix.length === 0) {\n lastLevelKey = primaryMatrix[0].length - 1;\n }\n }\n if (secondaryMatrix.length > 0) {\n const keyLength = primaryMatrix.length > 0 ? primaryMatrix[0].length : 0;\n for (let i = secondaryMatrix[0].length - 1; i > 0; i--) {\n keys.push(i + keyLength);\n }\n keys.push(keyLength);\n\n if (facet === PRIMARY) {\n lastLevelKey = keyLength;\n }\n } else {\n lastLevelKey = primaryMatrix.length > 0 ? primaryMatrix[0].length - 1 : 0;\n }\n keys.forEach((key) => {\n let counter = -1;\n return nestFn.key((d) => {\n counter++;\n return `${d[key].valueOf()}-${findInPage(counter, breakPage)}`;\n });\n });\n matrixTree = nestFn.entries(layoutMatrix);\n } else {\n if (primaryMatrix.length === 0) {\n facet = PRIMARY;\n } else if (secondaryMatrix.length === 0) {\n facet = SECONDARY;\n } else {\n facet = primaryMatrix.length >= secondaryMatrix.length ? PRIMARY : SECONDARY;\n }\n if (primaryMatrix.length > 0) {\n for (let i = 0; i < primaryMatrix.length - 1; i++) {\n keys.push(i);\n }\n // if (facet === PRIMARY) {\n keys.push(primaryMatrix.length - 1);\n // } else {\n if (facet === SECONDARY) {\n lastLevelKey = primaryMatrix.length - 1;\n }\n }\n if (secondaryMatrix.length > 0) {\n const primaryMatrixLength = primaryMatrix.length;\n for (let i = secondaryMatrix.length - 1; i > 0; i--) {\n keys.push(i + primaryMatrixLength);\n }\n // if (facet === SECONDARY) {\n keys.push(primaryMatrixLength);\n // }\n if (facet === PRIMARY) {\n lastLevelKey = primaryMatrixLength;\n }\n }\n keys.forEach((key) => {\n let counter = -1;\n return nestFn.key((d) => {\n counter++;\n return `${d[key].valueOf()}-${findInPage(counter, breakPage)}`;\n });\n });\n let newMatrix = [];\n newMatrix = layoutMatrix[0].map((col, colIndex) => layoutMatrix.map(row => row[colIndex]));\n matrixTree = nestFn.entries(newMatrix);\n }\n return { tree: matrixTree, lastLevelKey };\n};\n\n/**\n * Gives the min measues\n *\n * @param {boolean} isTransposed is column matrix\n * @param {Object} unitMeasures min measures to be given to cells\n * @return {Object} dimension min cell\n */\nexport const getMinMeasures = (isTransposed, unitMeasures) => {\n if (!isTransposed) {\n return {\n height: unitMeasures.height,\n width: 0\n };\n }\n return {\n height: 0,\n width: unitMeasures.width\n };\n};\n\n/**\n * Get the logical space from the tree\n *\n * @param {Node} item tree to be calculated\n * @param {number} measures width and height\n * @param {Array} minMeasures min measures for a cell\n * @param {Array} maxMeasure max measures for a col/row\n * @return {Object} dimension\n */\nexport const getLogicalSpace = (item, measures, minMeasures, maxMeasure = []) => {\n const { firstMeasure, secondMeasure } = measures;\n let firstMeasureValue = 0;\n let secondMeasureValue = 0;\n item.values.forEach((valueArray) => {\n let fMeasure = 0;\n let sMeasure = 0;\n valueArray.forEach((placeholder, colIndex) => {\n placeholder.logicalSpace(null);\n const space = placeholder.getLogicalSpace();\n sMeasure = Math.max(sMeasure, +space[secondMeasure], minMeasures[secondMeasure]);\n maxMeasure[colIndex] = Math.max(maxMeasure[colIndex] || 0, space[firstMeasure]);\n fMeasure += +maxMeasure[colIndex];\n });\n secondMeasureValue += sMeasure;\n firstMeasureValue = Math.max(firstMeasureValue, fMeasure);\n item.space = {\n [secondMeasure]: Math.ceil(secondMeasureValue),\n [firstMeasure]: Math.ceil(firstMeasureValue)\n };\n });\n return {\n [secondMeasure]: secondMeasureValue,\n [firstMeasure]: firstMeasureValue\n };\n};\n\n/**\n * Computes the logical spcae taken by the matrix tree\n *\n * @param {*} [item={}] tree to be viewed\n * @param {boolean} [isTransposed=false] is column matrix\n * @param {*} unitMeasures min measues for a cell\n * @param {Array} maxMeasure max measures for a col/row\n * @return {Object} logical space taken\n */\nexport const computeLogicalSpace = (item = {}, config, maxMeasures) => {\n const { isTransposed = false, unitMeasures } = config;\n const { firstMeasure, secondMeasure } = getMeasureInfo(isTransposed);\n const { values } = item;\n const minMeasures = getMinMeasures(isTransposed, unitMeasures);\n if (values[0].key) {\n const logicalSpace = { [firstMeasure]: 0, [secondMeasure]: 0 };\n\n values.forEach((valueItem) => {\n // Compute logical space for lowest level\n const space = computeLogicalSpace(valueItem, config, maxMeasures);\n // Set logical space for first measure\n logicalSpace[firstMeasure] = Math.max(logicalSpace[firstMeasure], space[firstMeasure],\n minMeasures[firstMeasure]);\n // Set logical space for second measure\n logicalSpace[secondMeasure] += +space[secondMeasure];\n });\n item.space = logicalSpace;\n return logicalSpace;\n }\n return getLogicalSpace(item, { firstMeasure, secondMeasure }, minMeasures, maxMeasures);\n};\n\n/**\n * Gives the space taken by a row\n *\n * @param {Array} row matrix array of rows\n * @return {Object} dimension of the row\n */\nexport const spaceTakenByRow = (row) => {\n let height = 0;\n let width = 0;\n row.forEach((col) => {\n const spaces = col.getLogicalSpace();\n height = Math.max(height, spaces.height);\n width += spaces.width;\n });\n return {\n width,\n height\n };\n};\n\n/**\n * Gives the space taken by a column\n *\n * @param {Array} matrix column matrix\n * @param {number} colIndex column index\n * @return {Object} dimension of the column\n */\nexport const spaceTakenByColumn = (matrix, colIndex) => {\n let height = 0;\n let width = 0;\n matrix.forEach((row) => {\n const col = row[colIndex];\n const spaces = col.getLogicalSpace();\n width = Math.max(width, spaces.width);\n height += spaces.height;\n });\n return {\n width,\n height\n };\n};\n\n/**\n * Creates different level matrices\n *\n * @param {Object} item matrix tree\n * @param {boolean} isTransposed is column matrix\n * @return {Object} matrix of each level\n */\nexport const createMatrixEachLevel = (item, isTransposed) => {\n if (item.values[0].key) {\n const arr = [];\n item.values.forEach((child) => {\n if (!isTransposed) {\n arr.push(...createMatrixEachLevel(child, isTransposed));\n } else {\n const eachLevel = createMatrixEachLevel(child, isTransposed);\n eachLevel.forEach((e, i) => {\n arr[i] = arr[i] || [];\n arr[i].push(...e);\n });\n }\n });\n item.matrix = arr;\n return arr;\n }\n if (!isTransposed) {\n item.matrix = item.values;\n } else {\n item.matrix = item.values[0].map((col, colIndex) => item.values.map(row => row[colIndex]));\n }\n return item.matrix;\n};\n\n/**\n * Breaks the matrix into two part\n *\n * @param {Array} matrix input matrix\n * @param {boolean} isTransposed is column matrix\n * @param {number} breakPointer point in matrix where it is to be broken\n * @return {Array} two broken matrix\n */\nexport const breakMatrix = (matrix, isTransposed, breakPointer) => {\n const primaryMatrix = [];\n const secondaryMatrix = [];\n if (isTransposed) {\n matrix.forEach((row, rowIndex) => {\n if (rowIndex >= breakPointer) {\n secondaryMatrix.push(row);\n } else {\n primaryMatrix.push(row);\n }\n });\n } else {\n matrix.forEach((row, rowIndex) => {\n row.forEach((column, columnIndex) => {\n if (columnIndex >= breakPointer) {\n secondaryMatrix[rowIndex] = secondaryMatrix[rowIndex] || [];\n secondaryMatrix[rowIndex].push(column);\n } else {\n primaryMatrix[rowIndex] = primaryMatrix[rowIndex] || [];\n primaryMatrix[rowIndex].push(column);\n }\n });\n });\n }\n return [primaryMatrix, secondaryMatrix];\n};\n\n/**\n * Distributed width returned\n *\n * @param {Object} context context for the width distibution\n * @return {number} distributed widths\n */\nexport const getDistributedWidth = (context, layoutConfig) => {\n const {\n availableWidth,\n width,\n row\n } = context;\n const {\n isDistributionEqual,\n isTransposed,\n distribution\n } = layoutConfig;\n let distSum = 0;\n if (distribution && distribution[0]) {\n distSum = distribution.reduce((t, n) => {\n t += n;\n return t;\n });\n }\n return row.map((col, colIndex) => {\n const space = col.getLogicalSpace().width;\n let distWidth = (space + (availableWidth - width) * (space / width));\n if (isTransposed) {\n if (distribution.length > 0) {\n distWidth = (availableWidth * distribution[colIndex] / distSum);\n } else if (isDistributionEqual || width === 0) {\n const rowLen = row.length;\n distWidth = (availableWidth / rowLen);\n }\n }\n return Math.floor(distWidth);\n });\n};\n\n/**\n * Distributeed heights returned\n *\n * @param {Object} context input for the height distribution\n * @return {Object} distribured heights\n */\nexport const getDistributedHeight = (context) => {\n let distSum = 0;\n let gutterSum = 0;\n let heightWithoutGutter = 0;\n const {\n isTransposed,\n distribution,\n availableHeight,\n height,\n isDistributionEqual,\n gutter,\n matrix,\n cIdx\n } = context;\n\n if (distribution && distribution[0] !== undefined) {\n distSum = distribution.reduce((t, n) => {\n t += n;\n return t;\n });\n }\n if (gutter && gutter[0] !== undefined) {\n gutterSum = gutter.reduce((t, n) => {\n t += n;\n return t;\n });\n }\n heightWithoutGutter = availableHeight - Math.floor(availableHeight * gutterSum);\n\n const colLen = matrix.length;\n return matrix.map((row, rIdx) => {\n const col = row[cIdx];\n const space = col.getLogicalSpace().height;\n let distHeight = (space + (heightWithoutGutter - height) * (space / height));\n\n if (!isTransposed) {\n if (distribution.length > 0 && colLen === distribution.length) {\n distHeight = (heightWithoutGutter * distribution[rIdx] / distSum);\n } else if (isDistributionEqual || context.height === 0) {\n distHeight = (heightWithoutGutter / colLen);\n }\n }\n return Math.floor(distHeight);\n });\n};\n\n/**\n *\n *\n * @param {*} arr\n * @param {*} beg\n * @param {*} end\n */\nexport const extraCellsRemover = (arr, beg, end) => arr.slice(beg, -end);\n\n/**\n * Creates matrix instancess\n *\n * @param {Array} [arr=[]] mutated arry\n * @param {number} depth depth of the tree\n * @param {Array} matrixInfo Details about the matrix(tree, etc) to be inserted\n * @param {boolean} layout Instance of layout\n */\nexport const createMatrixInstances = (arr = [], depth, matrixInfo, layout) => {\n const breakPointer = layout._breakPointer;\n const config = layout.config();\n const {\n isTransposed\n } = config;\n const {\n tree,\n layoutMatrix\n } = matrixInfo;\n\n if (depth === 0) {\n const brokenMatrix = breakMatrix(tree.matrix, isTransposed, breakPointer);\n arr.push({\n matrix: tree.matrix,\n primaryMatrix: brokenMatrix[0],\n secondaryMatrix: brokenMatrix[1],\n space: tree.space\n });\n return arr;\n }\n const nextLevel = depth - 1;\n tree.values.forEach((e) => {\n createMatrixInstances(arr, nextLevel, {\n tree: e,\n layoutMatrix\n }, layout);\n });\n return arr;\n};\n","import { mergeRecursive } from 'muze-utils';\n\nexport const PROPS = {\n config: {\n sanitization: (context, value) => mergeRecursive(context._config || {}, value)\n },\n maxMeasures: {},\n availableSpace: {},\n logicalSpace: {}\n};\n","import { PRIMARY } from '../enums/constants';\n/**\n *\n *\n */\nexport const defaultConfig = {\n distribution: [],\n classPrefix: 'muze',\n isDistributionEqual: true,\n unitMeasures: {\n height: 100,\n width: 100,\n border: 1\n },\n isTransposed: false,\n facet: PRIMARY,\n extraCellLengths: []\n};\n","import { mergeRecursive, generateGetterSetters } from 'muze-utils';\nimport {\n createTree,\n extraCellsRemover,\n combineMatrices,\n spaceTakenByColumn,\n getDistributedHeight,\n getDistributedWidth,\n spaceTakenByRow,\n computeLogicalSpace,\n createMatrixEachLevel,\n createMatrixInstances\n } from '../utils';\nimport { PROPS } from './props';\nimport { COLUMN_ROOT, ROW_ROOT, HEIGHT, WIDTH } from '../enums/constants';\nimport { defaultConfig } from './default-config';\n\n/**\n * This class used to create column / row matrix for GridLayout\n *\n * @class VisualMatrix\n */\nexport default class VisualMatrix {\n\n /**\n *Creates an instance of VisualMatrix.\n * @param {any} matrix Two set of matrices\n * @param {any} [config={}] Configuration for VisualMatrix\n * @memberof VisualMatrix\n */\n constructor (matrix, config = {}) {\n // Prepare matrices\n this._lastLevelKey = 0;\n this._primaryMatrix = matrix[0] || [];\n this._secondaryMatrix = matrix[1] || [];\n this._maxMeasures = [];\n this._availableSpace = {};\n\n // Store the config\n generateGetterSetters(this, PROPS);\n const defCon = Object.assign({}, this.constructor.defaultConfig());\n this.config(mergeRecursive(defCon, config));\n\n this._breakPointer = this.config().isTransposed ? matrix[0].length :\n (matrix[0].length > 0 ? matrix[0][0].length : 0);\n this._layoutMatrix = combineMatrices([matrix[0] || [], matrix[1] || []], this.config());\n\n // Create Tree\n this._tree = {\n key: this.config().isTransposed ? COLUMN_ROOT : ROW_ROOT,\n values: this.createTree()\n };\n this._logicalSpace = this.setLogicalSpace();\n }\n\n /**\n *\n *\n * @param {*} params\n * @returns\n * @memberof VisualMatrix\n */\n primaryMatrix (...params) {\n if (params.length) {\n return this;\n }\n return this._primaryMatrix;\n }\n\n /**\n *\n *\n * @param {*} params\n * @returns\n * @memberof VisualMatrix\n */\n secondaryMatrix (...params) {\n if (params.length) {\n return this;\n }\n return this._secondaryMatrix;\n }\n\n /**\n *\n *\n * @param {*} params\n * @returns\n * @memberof VisualMatrix\n */\n tree (...params) {\n if (params.length) {\n return this;\n }\n return this._tree;\n }\n\n /**\n *\n *\n * @static\n * @return\n * @memberof VisualMatrix\n */\n static defaultConfig () {\n return defaultConfig;\n }\n\n /**\n *\n *\n * @return\n * @memberof VisualMatrix\n */\n createTree () {\n const { tree, lastLevelKey } = createTree(this);\n this._lastLevelKey = lastLevelKey;\n return tree;\n }\n\n /**\n * Computes the logical space taken by the entire matrixTree\n *\n * @return {Object} Logical space taken\n * @memberof VisualMatrix\n */\n setLogicalSpace () {\n const {\n isTransposed\n } = this.config();\n const matrixTree = this.tree();\n createMatrixEachLevel(matrixTree, isTransposed);\n return computeLogicalSpace(matrixTree, this.config(), this.maxMeasures());\n }\n\n /**\n * Returns the space taken by visual matrix\n *\n * @return {Object} space taken by the matrix\n * @memberof VisualMatrix\n */\n getLogicalSpace () {\n return this.logicalSpace();\n }\n\n /**\n * Sets the provied space to the visual matrix\n *\n * @param {number} width width provided\n * @param {number} height height provided\n * @memberof VisualMatrix\n */\n setAvailableSpace (width, height) {\n this.availableSpace({ width, height });\n const tree = this.tree();\n const heightMeasures = this.populateMaxMeasures(HEIGHT, tree);\n const widthMeasures = this.populateMaxMeasures(WIDTH, tree);\n const depth = this.calculateDepth(widthMeasures, heightMeasures);\n\n this.viewableMatrix = this.createViewPortMatrix(depth);\n this.viewableMeasures = this.redistribute(this.viewableMatrix, width, height);\n return this;\n }\n\n /**\n * Populate the max measures in the array\n *\n * @param {Array} measures array to be filled with max measures\n * @param {Object} matrixTree matrix tree of visual matrix\n * @param {number} measure width or height\n * @param {number} [depth=0] depth of the tree that to be calculated\n * @memberof VisualMatrix\n */\n populateMaxMeasures (type, matrixTree, depth = 0, measures = []) {\n measures[depth] = Math.max(measures[depth] || 0, matrixTree.space[type]);\n if (matrixTree.values) {\n const childDepth = depth + 1;\n matrixTree.values.forEach((child) => {\n if (child.space) {\n measures = this.populateMaxMeasures(type, child, childDepth, measures);\n }\n });\n }\n return measures;\n }\n\n /**\n * Calculates the depth of the tree that can be viewed\n *\n * @param {Array} widthMeasures array of widths\n * @param {Array} heightMeasures array of heights\n * @return {number} depth of the tree\n * @memberof VisualMatrix\n */\n calculateDepth (widthMeasures, heightMeasures) {\n let i;\n let j;\n const { height, width } = this.availableSpace();\n\n for (i = 0; i < heightMeasures.length; i++) {\n if (heightMeasures[i] <= height) break;\n }\n for (j = 0; j < widthMeasures.length; j++) {\n if (widthMeasures[j] <= width) break;\n }\n return Math.min(widthMeasures.length - 1, Math.max(i, j));\n }\n\n /**\n * Redistributes the provied space to all cells\n *\n * @param {*} viewableMatrix current viewport matrix\n * @param {*} width provied width\n * @param {*} height provied height\n * @return {Object} current viewports matrixes with measures\n * @memberof VisualMatrix\n */\n redistribute (viewableMatrix, width, height) {\n let maxHeights = [];\n let maxWidths = [];\n const {\n isTransposed\n } = this.config();\n\n viewableMatrix.forEach((matrixInst) => {\n const matrix = matrixInst.matrix;\n const mWidth = 0;\n const mHeight = 0;\n const options = { mWidth, mHeight, matrix, width, height, maxHeights, maxWidths };\n const maxMeasures = isTransposed ? this.redistributeColumnWise(options) : this.redistributeRowWise(options);\n maxWidths = maxMeasures.maxWidths;\n maxHeights = maxMeasures.maxHeights;\n });\n\n const measurements = viewableMatrix.map((matrixInst, i) => {\n let heightMeasures;\n let columnMeasures;\n const cellDimOptions = { matrixInst, maxWidths, maxHeights, matrixIndex: i };\n const { heights, widths, rowHeights, columnWidths } = this.getCellDimensions(cellDimOptions);\n\n if (!isTransposed) {\n heightMeasures = [height, height];\n columnMeasures = widths;\n } else {\n heightMeasures = heights;\n columnMeasures = [width, width];\n }\n return {\n rowHeights: {\n primary: rowHeights[0],\n secondary: rowHeights[1]\n },\n columnWidths: {\n primary: columnWidths[0],\n secondary: columnWidths[1]\n },\n height: {\n primary: heightMeasures[0],\n secondary: heightMeasures[1]\n },\n width: {\n primary: columnMeasures[0],\n secondary: columnMeasures[1]\n }\n };\n });\n\n return measurements;\n }\n\n /**\n * Gets the viewable measures for the current viewable matrix\n *\n * @return {Object} Set of viewable measures\n * @memberof VisualMatrix\n */\n getViewableSpaces () {\n return this.viewableMeasures;\n }\n\n /**\n * Returns the matrix that can be viewed in the current viewport\n *\n * @return {Array} Set of matrices that can be viewed\n * @memberof VisualMatrix\n */\n getViewableData () {\n return this.viewableMatrix;\n }\n\n /**\n *\n *\n * @return\n * @memberof VisualMatrix\n */\n removeExtraCells () {\n const {\n isTransposed,\n extraCellLengths\n } = this.config();\n const matrix = this._layoutMatrix;\n const tree = mergeRecursive({}, this.tree());\n const begCellLen = extraCellLengths[0];\n const endCellLen = extraCellLengths[1] || Number.NEGATIVE_INFINITY;\n const layoutMatrix = !isTransposed ? extraCellsRemover(matrix, begCellLen, endCellLen) :\n matrix.slice(0).map(e => extraCellsRemover(e, begCellLen, endCellLen));\n\n tree.values = extraCellsRemover(tree.values, begCellLen, endCellLen);\n if (!isTransposed) {\n tree.matrix = extraCellsRemover(tree.matrix, begCellLen, endCellLen);\n } else {\n tree.matrix = tree.matrix.map(e => extraCellsRemover(e, begCellLen, endCellLen));\n }\n return {\n tree,\n layoutMatrix\n };\n }\n\n /**\n * Creates the viewport that can be viewed together\n *\n * @param {number} depth maxDepth that can be viewed in the viewport\n * @return {Array} Set of matrices that can be viewed\n * @memberof VisualMatrix\n */\n createViewPortMatrix (depth) {\n const arr = [];\n createMatrixInstances(arr, depth, this.removeExtraCells(), this);\n return arr;\n }\n\n /**\n * Distibutes the given space row wisely\n *\n * @param {Object} options Redistribution information\n * @memberof VisualMatrix\n */\n redistributeRowWise (options) {\n let cWidths = [];\n let rHeights = [];\n let mHeight = 0;\n const maxMeasures = this.maxMeasures();\n const {\n isDistributionEqual,\n distribution,\n isTransposed,\n gutter\n } = this.config();\n const { matrix, width, height, maxHeights, maxWidths } = options;\n\n mHeight = spaceTakenByColumn(matrix, this._lastLevelKey).height;\n\n const maxWidth = maxMeasures.reduce((t, n) => {\n t += n;\n return t;\n });\n if (maxWidth > 0) {\n cWidths = maxMeasures.map(space => space + (width - maxWidth) * (space / maxWidth));\n } else {\n cWidths = maxMeasures.map(() => 0);\n }\n rHeights = getDistributedHeight({\n matrix,\n cIdx: this._lastLevelKey,\n height: mHeight,\n availableHeight: height,\n isDistributionEqual,\n distribution,\n isTransposed,\n gutter\n });\n maxWidths.push(cWidths);\n maxHeights.push(rHeights);\n return { maxWidths, maxHeights };\n }\n\n /**\n * Distibutes the given space column wisely\n *\n * @param {Object} options Redistribution information\n * @memberof VisualMatrix\n */\n redistributeColumnWise (options) {\n let rHeights = [];\n const { matrix, width, maxHeights, maxWidths } = options;\n const borderWidth = this.config().unitMeasures.border;\n const mWidth = spaceTakenByRow(matrix[this._lastLevelKey]).width;\n const cWidths = getDistributedWidth({\n row: matrix[this._lastLevelKey],\n width: mWidth,\n availableWidth: width\n }, this.config());\n\n matrix.forEach((row, rIdx) => row.forEach((col, cIdx) => {\n const oldLogicalSpace = col.getLogicalSpace().height;\n col.setAvailableSpace(cWidths[cIdx] - borderWidth, oldLogicalSpace);\n rHeights[rIdx] = Math.max(rHeights[rIdx] || 0, col.getLogicalSpace().height);\n }));\n\n if (maxHeights.length > 0) {\n rHeights = rHeights.map((e, i) => Math.max(e, maxHeights[0][i]));\n }\n\n maxHeights.push(rHeights);\n\n for (let x = 0; x < maxHeights.length; x++) {\n maxHeights[x] = rHeights;\n }\n maxWidths.push(cWidths);\n return { maxHeights, maxWidths };\n }\n\n /**\n * Dispatch the calculated cell dimensions to all the cells\n *\n * @param {Object} options cell dimension information\n * @return {Object} row and column heights / widths\n * @memberof VisualMatrix\n */\n getCellDimensions (options) {\n let indices = [];\n let unitMeasures = [];\n let mainMeasures = [];\n let computedMeasures = [];\n const {\n isTransposed,\n unitMeasures: measures\n } = this.config();\n const borderWidth = measures.border;\n const { matrixInst, maxWidths, maxHeights, matrixIndex } = options;\n const matrix = matrixInst.matrix;\n const rowHeights = [[0], [0]];\n const columnWidths = [[0], [0]];\n const heights = [0, 0];\n const widths = [0, 0];\n const breakPointer = this._breakPointer;\n\n matrix.forEach((row, rIdx) => {\n row.forEach((cell, cIdx) => {\n const colHeight = maxHeights[matrixIndex][rIdx] || 0;\n const colWidth = maxWidths[matrixIndex][cIdx];\n\n if (!isTransposed) {\n cell.setAvailableSpace(colWidth, colHeight - borderWidth);\n indices = [rIdx, cIdx];\n unitMeasures = [columnWidths, rowHeights];\n mainMeasures = [widths, heights];\n computedMeasures = [colWidth, colHeight];\n } else {\n cell.setAvailableSpace(colWidth - borderWidth, colHeight);\n indices = [cIdx, rIdx];\n unitMeasures = [rowHeights, columnWidths];\n mainMeasures = [heights, widths];\n computedMeasures = [colHeight, colWidth];\n }\n\n if (indices[0] === 0 && indices[1] < breakPointer) {\n unitMeasures[0][0][indices[1]] = computedMeasures[0];\n mainMeasures[0][0] = (mainMeasures[0][0] || 0) + computedMeasures[0];\n } else if (indices[0] === 0 && indices[1] >= breakPointer) {\n unitMeasures[0][1][indices[1] - breakPointer] = computedMeasures[0];\n mainMeasures[0][1] = (mainMeasures[0][1] || 0) + computedMeasures[0];\n }\n if (indices[1] === this._lastLevelKey) {\n unitMeasures[1][0][indices[0]] = computedMeasures[1];\n unitMeasures[1][1][indices[0]] = computedMeasures[1];\n }\n });\n });\n return {\n heights,\n widths,\n rowHeights,\n columnWidths\n };\n }\n}\n\n","import { HEIGHT, WIDTH, COLUMN, ROW } from '../enums/constants';\n\n/**\n * Gets measurement for an instance of visual matrix\n *\n * @param {Array} matrix instance of visual matrix\n * @param {string} type height/width\n * @return {Object} Logical height/width of the matrix\n */\nexport function getMatrixMeasurement (matrix, type) {\n if (matrix) {\n return matrix.getLogicalSpace()[type];\n }\n return 0;\n}\n\n/**\n * Sets available space for an instance of visual matrix\n *\n * @param {Array} matrix instance of visual matrix\n * @param {string} type height/width\n * @param {number} value Value of measurement\n */\nexport function setMatrixMeasurement (matrix, type, value) {\n if (matrix) {\n const spaces = matrix.getLogicalSpace();\n if (value && spaces[type] !== value) {\n type === HEIGHT ? matrix.setAvailableSpace(spaces.width, value) :\n matrix.setAvailableSpace(value, spaces.height);\n }\n }\n}\n\n/**\n *\n *\n * @param {*} matrix\n * @param {*} widths\n * @param {*} heights\n */\nconst setAvailableSpace = (matrix, widths, heights) => {\n matrix.forEach((row, rIdx) => {\n row.forEach((placeholder, cIdx) => {\n placeholder.setAvailableSpace(widths[cIdx], heights[rIdx]);\n });\n });\n};\n\n/**\n *\n *\n * @param {*} layout\n * @param {*} matrix\n * @param {*} pointer\n * @returns\n */\nconst setViewSpaces = (layout, pointerType, viewSpaces) => {\n let pointer = layout.config()[`${pointerType}Pointer`];\n if (viewSpaces.length - 1 < pointer) {\n pointer = 0;\n layout.config({ [`${pointerType}Pointer`]: pointer });\n }\n return pointer;\n};\n\n/**\n * Computes the measurements of space for all matrices in the\n * layout\n *\n * @param {Object} layout Instance of grid layout\n * @return {Object} set of measurements for the layout\n */\nexport const computeLayoutMeasurements = (layout) => {\n const rowMatrix = layout.rowMatrix();\n const columnMatrix = layout.columnMatrix();\n const centerMatrix = layout.centerMatrix();\n const {\n width,\n height\n } = layout.measurement();\n const {\n border\n } = layout.config();\n const matrices = layout.matrices();\n const {\n top,\n bottom\n } = matrices;\n\n // Get width of row matrix\n const rowMatrixWidth = getMatrixMeasurement(rowMatrix, WIDTH);\n\n // Set width for column matrix\n\n // Border adjustment for each cell in the central matrix\n const borderWidth = border.width;\n\n const columnMatrixWidth = width - rowMatrixWidth - borderWidth;\n setMatrixMeasurement(columnMatrix, WIDTH, columnMatrixWidth);\n const columnViewPages = columnMatrix.getViewableSpaces();\n setViewSpaces(layout, COLUMN, columnViewPages);\n\n // Figuring out total space needed by current view space\n const columnViewSpace = columnViewPages[layout.config().columnPointer];\n\n // Getting height of column matrix\n const columnMatrixHeight = columnViewSpace.height.primary + columnViewSpace.height.secondary;\n\n // Set height for row matrix\n const rowMatrixHeight = height - columnMatrixHeight;\n\n setMatrixMeasurement(rowMatrix, HEIGHT, rowMatrixHeight);\n\n // Get heights of each cell of row matrix\n const rowViewableSpaces = rowMatrix.getViewableSpaces();\n setViewSpaces(layout, ROW, rowViewableSpaces);\n const rowHeights = [].concat(...rowViewableSpaces.map(e => e.rowHeights.primary));\n const rowWidthsPrimary = [].concat(...rowViewableSpaces.map(e => e.columnWidths.primary));\n const rowWidthsSecondary = [].concat(...rowViewableSpaces.map(e => e.columnWidths.secondary));\n const columnViewableSpaces = columnMatrix.getViewableSpaces();\n // Get widths of each cell of column matrix\n const columnWidths = [].concat(...columnViewableSpaces.map(e => e.columnWidths.primary));\n const columnHeightsPrimary = columnViewableSpaces[0].rowHeights.primary;\n\n const columnHeightsSecondary = [].concat(...columnViewableSpaces.map(e => e.rowHeights.secondary));\n\n // Setting the available space for each cell in the centre matrix\n centerMatrix.forEach((matrix, rIdx) => {\n matrix.forEach((placeholder, cIdx) => {\n placeholder.setAvailableSpace(columnWidths[cIdx] - borderWidth, rowHeights[rIdx] - borderWidth);\n });\n });\n setAvailableSpace(top[0], rowWidthsPrimary, columnHeightsPrimary);\n setAvailableSpace(top[2], rowWidthsSecondary, columnHeightsPrimary);\n setAvailableSpace(bottom[0], rowWidthsPrimary, columnHeightsSecondary);\n setAvailableSpace(bottom[2], rowWidthsSecondary, columnHeightsSecondary);\n\n return {\n rowMatrixHeight,\n rowMatrixWidth,\n columnMatrixHeight,\n columnMatrixWidth\n };\n};\n\n/**\n * Gets view matrices based on current pointers for row and column\n *\n * @param {Object} layout instance of layout\n * @param {number} rowPointer current row pointer\n * @param {number} columnPointer current column pointer\n * @return {Object} returns the view matrix and its relevant information\n */\nexport const getViewMatrices = (layout, rowPointer, columnPointer) => {\n const rowMatrix = layout.rowMatrix();\n const columnMatrix = layout.columnMatrix();\n const centerMatrix = layout.centerMatrix();\n const matrices = layout.matrices();\n const rowMatrices = rowMatrix.getViewableData();\n const columnMatrices = columnMatrix.getViewableData();\n const centralMatrixPointer = {\n row: 0,\n column: 0\n };\n\n for (let i = rowPointer - 1; i >= 0; i--) {\n const length = Math.max(rowMatrices[i].primaryMatrix.length,\n rowMatrices[i].secondaryMatrix.length);\n centralMatrixPointer.row += length;\n }\n /* istanbul ignore next */\n for (let i = columnPointer - 1; i >= 0; i--) {\n const matrix = columnMatrices[i];\n const { primaryMatrix, secondaryMatrix } = matrix;\n const length = Math.max(primaryMatrix[0] ? primaryMatrix[0].length : 0,\n secondaryMatrix[0] ? secondaryMatrix[0].length : 0);\n centralMatrixPointer.column += length;\n }\n\n matrices.top[1] = columnMatrices[columnPointer].primaryMatrix;\n matrices.bottom[1] = columnMatrices[columnPointer].secondaryMatrix;\n\n matrices.center[0] = rowMatrices[rowPointer].primaryMatrix;\n matrices.center[2] = rowMatrices[rowPointer].secondaryMatrix;\n\n const rowMatrixLen = Math.max(matrices.center[0].length, matrices.center[2].length);\n /* istanbul ignore next */\n const columnMatrixLen = Math.max(matrices.top[1][0] ? matrices.top[1][0].length : 0, matrices.bottom[1][0] ?\n matrices.bottom[1][0].length : 0);\n matrices.center[1] = centerMatrix.slice(centralMatrixPointer.row, centralMatrixPointer.row + rowMatrixLen)\n .map(matrix => matrix.slice(centralMatrixPointer.column, centralMatrixPointer.column + columnMatrixLen));\n\n return {\n matrices,\n rowPages: rowMatrices.length,\n columnPages: columnMatrices.length\n };\n};\n/**\n * Returns measurements of the cells of the current matrix\n *\n * @param {Object} layout instance of layout\n * @return {Object} returns the measurements for current view matrix\n */\nexport const getViewMeasurements = (layout) => {\n const rowMatrix = layout.rowMatrix();\n const columnMatrix = layout.columnMatrix();\n const {\n width,\n height\n } = layout.measurement();\n const {\n columnPointer,\n rowPointer\n } = layout.config();\n\n const rowMatrixWidth = rowMatrix.getViewableSpaces()[rowPointer].width;\n const { primary: leftWidth, secondary: rightWidth } = rowMatrixWidth;\n\n const columnMatrixHeight = columnMatrix.getViewableSpaces()[columnPointer].height;\n const { primary: topHeight, secondary: bottomHeight } = columnMatrixHeight;\n\n const centerHeight = height - (topHeight + bottomHeight);\n const centerWidth = width - (leftWidth + rightWidth);\n\n return {\n viewWidth: [leftWidth, centerWidth, rightWidth],\n viewHeight: [topHeight, centerHeight, bottomHeight]\n };\n};\n","/**\n * This file declares a table that can be extended to create a Datagrid, crosstab\n * and man other visualzations that require a tabular structure.\n */\n\nimport { getUniqueId } from 'muze-utils';\nimport GenericLayout from '../generic-layout';\nimport { DEFAULT_CONFIGURATION, DEFAULT_MEASUREMENTS } from './defaults';\nimport {\n renderMatrices\n} from './renderer';\nimport { generateVisualMatrices } from './layout-helper';\nimport { computeLayoutMeasurements, getViewMeasurements, getViewMatrices } from './computations';\n/**\n * This class is used to create a tabular structure that\n * can house charts and values.\n *\n * @class GridLayout\n */\nexport default class GridLayout extends GenericLayout {\n\n /**\n * Creates an instance of TableLayout.\n * @param {HTMLElement} matrices Set of upto 9 matrices containing the cells to be rendered\n * @param {HTMLElement} mountPoint DOM element/d3 selection where the layout is to be mounted\n * @param {Object} measurement The dimensions of the layout\n * @param {Object} config external configurations.\n * @memberof GenericLayout\n *\n * measurement : {\n * width : number => width of the container\n * height : number => height of the container\n * unitHeight : number => height of unit of the cells\n * unitWidth : number => width of unit of the cells\n * }\n *\n */\n constructor (matrices, mountPoint, measurement, config) {\n super(mountPoint, measurement, config);\n this.matrices(matrices);\n this.config(this.constructor.defaultConfig());\n this._layoutId = getUniqueId();\n }\n\n /**\n * Returns initial set of measurements for the grid layout\n *\n * @static\n * @return {Object} Returns initial set of measurements\n * @memberof GridLayout\n */\n static defaultMeasurement () {\n return DEFAULT_MEASUREMENTS;\n }\n\n /**\n * Returns initialconfiguration for grid layout\n *\n * @static\n * @return {Object} Returns initial configuration for grid layout\n * @memberof GridLayout\n */\n static defaultConfig () {\n return DEFAULT_CONFIGURATION;\n }\n\n /**\n * This function is used to return an instance of GridLayout\n *\n * @return {GridLayout} Instance of grid layout.\n * @static\n * @memberof GridLayout\n */\n static create () {\n return new GridLayout(null, null, this.defaultMeasurement(), this.defaultConfig());\n }\n\n /**\n * Sets/Gets the matrices for the layout\n *\n * @param {Array} matrices Set of matrices\n * @return {Object} Getter/Setter\n * @memberof GridLayout\n */\n matrices (matrices) {\n if (matrices) {\n this._matrices = generateVisualMatrices(this, matrices);\n return this;\n }\n return super.matrices(matrices);\n }\n\n /**\n * Triggers the computations for the layout based on the matrices available\n * This causes a reflow in the entire layout system.\n *\n * @return {Object} Layout instance\n * @memberof GridLayout\n */\n triggerReflow () {\n computeLayoutMeasurements(this);\n this.setViewInformation();\n return this;\n }\n\n /**\n *\n *\n * @param {*} type\n * @param {*} pageNumber\n * @returns\n * @memberof GridLayout\n */\n gotoPage (type, pageNumber) {\n const pageType = type.toLowerCase();\n const { viewMatricesInfo } = this.getViewInformation();\n const totalPages = viewMatricesInfo[`${pageType}Pages`];\n const pointer = Math.min(Math.max(1, pageNumber), totalPages);\n this.config({\n [`${pageType}Pointer`]: pointer - 1\n });\n this.setViewInformation();\n this.renderGrid();\n return this;\n }\n\n /**\n *\n *\n * @param {*} type\n * @returns\n * @memberof GridLayout\n */\n pages (type) {\n const { viewMatricesInfo } = this.getViewInformation();\n const pageType = type.toLowerCase();\n return {\n totalPages: viewMatricesInfo[`${pageType}Pages`],\n currentPage: this.config()[`${pageType}Pointer`] + 1\n };\n }\n\n /**\n *\n *\n * @returns\n * @memberof GridLayout\n */\n setViewInformation () {\n const {\n rowPointer,\n columnPointer,\n border\n } = this.config();\n const viewMatricesInfo = getViewMatrices(this, rowPointer, columnPointer);\n const layoutDimensions = getViewMeasurements(this);\n layoutDimensions.border = border;\n this.viewInfo = {\n viewMatricesInfo,\n layoutDimensions\n };\n return this;\n }\n\n /**\n *\n *\n * @returns\n * @memberof GridLayout\n */\n getViewInformation () {\n return this.viewInfo;\n }\n\n /**\n * Renders the layout\n *\n * @return {Object} current instance\n * @memberof GridLayout\n */\n renderGrid (mountPoint) {\n this.mountPoint(mountPoint);\n if (!this.mountPoint()) {\n return this;\n }\n const {\n viewMatricesInfo,\n layoutDimensions\n } = this.getViewInformation();\n // Render matrices\n renderMatrices(this, viewMatricesInfo.matrices, layoutDimensions);\n return this;\n }\n}\n","import VisualMatrix from '../visual-matrix/visual-matrix';\n\n/**\n * Generates the set of visual matrices for pagination and layouting algorithms\n *\n * @param {*} context\n * @param {*} matrices\n * @returns\n */\nexport const generateVisualMatrices = (context, matrices) => {\n // Set of matrices for layout is generated starting with the left matrix\n let leftMatrix = [];\n let rightMatrix = [];\n let topMatrix = [];\n let bottomMatrix = [];\n let begColCells;\n let endColCells;\n const {\n isRowSizeEqual,\n isColumnSizeEqual,\n gutterSpace,\n distribution,\n border,\n breakPage\n } = context.config();\n const {\n minUnitHeight,\n minUnitWidth\n } = context.measurement();\n const { top, center, bottom } = matrices;\n const [topLeft, topColumns, topRight] = top;\n const [leftRows, valueMatrix, rightRows] = center;\n const [bottomLeft, bottomColumns, bottomRight] = bottom;\n\n if (leftRows.length > 0) {\n // If no left matrix is present, context will be empty\n leftMatrix = [...topLeft, ...leftRows, ...bottomLeft];\n }\n if (rightRows.length > 0) {\n // If no right matrix is present, context will be empty\n rightMatrix = [...topRight, ...rightRows, ...bottomRight];\n }\n if (topColumns.length > 0 && topColumns[0].length > 0) {\n // If no top matrix is present, context will be empty\n topMatrix = topColumns.map((d, i) => [...topLeft[i], ...d, ...topRight[i]]);\n }\n if (bottomColumns.length > 0 && bottomColumns[0].length > 0) {\n // If no bottom matrix is present, context will be empty\n bottomMatrix = bottomColumns.map((d, i) => [...bottomLeft[i], ...d, ...bottomRight[i]]);\n }\n context.rowMatrix(new VisualMatrix([leftMatrix, rightMatrix], {\n isDistributionEqual: isRowSizeEqual,\n distribution: distribution.rows,\n gutter: gutterSpace.rows,\n unitMeasures: {\n width: minUnitWidth,\n height: minUnitHeight,\n border: border.width\n },\n breakPage: breakPage.rows.map(e => e + Math.max(topLeft.length, topRight.length)),\n extraCellLengths: [topLeft.length, bottomLeft.length]\n }));\n\n if (topLeft.length > 0) {\n begColCells = topLeft[0].length;\n } else {\n begColCells = bottomLeft.length > 0 ? bottomLeft[0].length : 0;\n }\n\n if (topRight.length > 0) {\n endColCells = topRight[0].length;\n } else {\n endColCells = bottomRight.length > 0 ? bottomRight[0].length : 0;\n }\n\n context.columnMatrix(new VisualMatrix([topMatrix, bottomMatrix], {\n isDistributionEqual: isColumnSizeEqual,\n distribution: distribution.columns,\n gutter: gutterSpace.columns,\n isTransposed: true,\n unitMeasures: {\n width: minUnitWidth,\n height: minUnitHeight,\n border: border.width\n },\n breakPage: breakPage.columns,\n extraCellLengths: [begColCells, endColCells]\n }));\n context.centerMatrix(valueMatrix);\n\n return matrices;\n};\n","import { ERROR_MSG } from 'muze-utils';\n/**\n * An Interface to be implemented if the transaction support is necessary. This class ensures reactivity to\n * global properties.\n */\nexport default class TransactionSupport {\n /**\n * Property accessor for data member of the class. Data is passed to the system by calling this method.\n */\n data () {\n throw new Error(ERROR_MSG.INTERFACE_IMPl);\n }\n\n /**\n * Property accessor for width of the class. Width is passed as an integer.\n */\n width () {\n throw new Error(ERROR_MSG.INTERFACE_IMPl);\n }\n\n /**\n * Property accessor for height of the class. Height is passed as an integer.\n */\n height () {\n throw new Error(ERROR_MSG.INTERFACE_IMPl);\n }\n\n /**\n * Property accessor for config of the class. Config is passed as an object.\n */\n config () {\n throw new Error(ERROR_MSG.INTERFACE_IMPl);\n }\n}\n","import { TOP, BOTTOM, LEFT, TITLE, SUB_TITLE, GROUP, LAYOUT, LEGEND } from '../constants';\n\n/**\n *\n *\n * @param {*} context\n * @returns\n */\nexport const arrangeComponents = (context) => {\n const legendConfig = context.config().legend;\n const titleConfig = context.title()[1];\n const subtitleConfig = context.subtitle()[1];\n const titleLayouts = {\n [`${TOP}-${TOP}`]: [TITLE, SUB_TITLE, GROUP],\n [`${BOTTOM}-${BOTTOM}`]: [GROUP, SUB_TITLE, TITLE],\n [`${TOP}-${BOTTOM}`]: [TITLE, GROUP, SUB_TITLE],\n [`${BOTTOM}-${TOP}`]: [SUB_TITLE, GROUP, TITLE]\n };\n const legendLayouts = [\n [LEGEND, LAYOUT],\n [LAYOUT, LEGEND]\n ];\n const titlePosition = titleConfig.position || TOP;\n const subtitlePosition = subtitleConfig.position || TOP;\n\n return {\n headers: titleLayouts[`${titlePosition}-${subtitlePosition}`],\n legends: legendConfig.position === LEFT || legendConfig.position === TOP ?\n legendLayouts[0] : legendLayouts[1]\n };\n};\n","/**\n * Flag to specify whether direction is vertical.\n */\nexport const MARGIN = 'margin';\nexport const LEFT = 'left';\nexport const RIGHT = 'right';\nexport const BOTTOM = 'bottom';\nexport const TOP = 'top';\nexport const SPACE_FIXER = 'spaceFixer';\nexport const CLASSPREFIX = 'muze';\nexport const VERTICAL_ALIGN = 'verticalAlign';\nexport const TEXT_ALIGN = 'textAlign';\nexport const IS_OFFSET = 'isOffset';\nexport const MIDDLE = 'middle';\nexport const BASELINE = 'baseline';\nexport const SHOW = 'show';\nexport const CENTER = 'center';\nexport const TEXT = 'text';\nexport const HEADER = 'header';\nexport const HEIGHT = 'height';\nexport const WIDTH = 'width';\nexport const DATA = 'data';\nexport const AXES = 'axes';\nexport const FACET_BY_FIELDS = 'facetByFields';\nexport const FIELDS = 'fields';\nexport const TRANSFORM = 'transform';\nexport const LAYER_DEF = 'layerDef';\nexport const CONFIG = 'config';\nexport const DETAIL_FIELDS = 'detailFields';\n\nexport const TEXT_CELL = 'text-cell';\nexport const AXIS_CELL = 'axis-cell';\nexport const GEOM_CELL = 'geom-cell';\nexport const BLANK_CELL = 'blank-cell';\n","// eneum to refer to simple cell\nexport const SIMPLE = 'simple';\n// eneum to refer to header cell\nexport const TEXT = 'text';\n// enum to refer to axis cell\nexport const AXIS = 'axis';\n// enum to refer to visual cell\nexport const GEOM = 'geom';\n// enum to refer blank cell\nexport const BLANK = 'blank';\n","import {\n ERROR_MSG,\n getUniqueId,\n mergeRecursive\n} from 'muze-utils';\nimport { SIMPLE } from './enums/cell-type';\n\n/**\n * This file declares a class that is used as an interface to create new\n * SimpleCell elements.\n * @module SimpleCell\n */\n/**\n * Base class for all table cells.\n *\n * @interface\n * @class SimpleCell\n */\nclass SimpleCell {\n\n /**\n * Creates an instance of SimpleCell.\n *\n * @param {*} config The input configuration.\n * @memberof SimpleCell\n */\n constructor (config) {\n this._id = getUniqueId();\n\n const defConfig = mergeRecursive({}, this.constructor.defaultConfig());\n this._config = mergeRecursive(defConfig, config || {});\n\n this._mount = null;\n }\n\n /**\n * Returns the type of the placehlder.\n *\n * @readonly\n * @memberof SimpleCell\n */\n get type () {\n return SIMPLE;\n }\n\n /**\n * Returns the type of the placehlder.\n *\n * @readonly\n * @memberof SimpleCell\n * @return {Object} Default config for the placeholder\n */\n static defaultConfig () {\n return {};\n }\n\n /**\n * Returns the value contained by the SimpleCell.\n *\n * @memberof SimpleCell\n */\n valueOf () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Returns a unique identifier for the instance used\n * to control selective rendering.\n *\n * @memberof SimpleCell\n */\n id () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Returns a serialized representation of the instance.\n *\n * @memberof SimpleCell\n */\n serialize () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Returns an object with width and height fields\n * specifying the space taken up by this metod.\n *\n * @memberof SimpleCell\n */\n getLogicalSpace () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Method used to set the space available to render the SimpleCell\n *\n * @param {number} width The available width.\n * @param {number} height The available height.\n * @memberof SimpleCell\n */\n setAvailableSpace () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Render the SimpleCell inthe supplied mount point.\n *\n * @param {HTMLElement} mount The mount point to render in.\n * @memberof SimpleCell\n */\n render () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Render the SimpleCell inthe supplied mount point.\n *\n * @param {HTMLElement} mount The mount point to render in.\n * @memberof SimpleCell\n */\n remove () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n}\n\nexport default SimpleCell;\n","/**\n * This file exports variables that are used as defaults for\n * the placeholders\n */\nimport * as CONSTANTS from './constants';\n\n /**\n * Default Configuration for the cells\n * @return {Object} Default configuration\n */\nexport const DEFAULT_CONFIG = {\n [CONSTANTS.MARGIN]: {\n [CONSTANTS.LEFT]: 0,\n [CONSTANTS.RIGHT]: 0,\n [CONSTANTS.TOP]: 0,\n [CONSTANTS.BOTTOM]: 0\n },\n [CONSTANTS.SPACE_FIXER]: 2,\n [CONSTANTS.IS_OFFSET]: false,\n [CONSTANTS.VERTICAL_ALIGN]: CONSTANTS.TOP,\n [CONSTANTS.TEXT_ALIGN]: CONSTANTS.CENTER,\n [CONSTANTS.SHOW]: true\n};\n","import { mergeRecursive } from 'muze-utils';\nimport { GEOM, TEXT, AXIS, BLANK } from './enums/cell-type';\n\nconst DEFAULT_PROPS = {\n mount: {},\n availHeight: {},\n availWidth: {},\n config: {\n sanitization: (context, value) => mergeRecursive(context._config, value)\n },\n logicalSpace: {},\n source: {}\n};\n\nconst geomProps = {\n data: {},\n caption: {},\n config: {},\n axes: {\n sanitization: (context, value) => Object.assign(context._axes, value)\n },\n facetByFields: {},\n fields: {},\n transform: {},\n layerDef: {},\n detailFields: {}\n};\n\nexport const PROPS = {\n [TEXT]: DEFAULT_PROPS,\n [GEOM]: mergeRecursive(geomProps, DEFAULT_PROPS),\n [AXIS]: DEFAULT_PROPS,\n [BLANK]: DEFAULT_PROPS\n};\n","/**\n * This file declares a class that represents a table cell\n * used to house an axis.\n * @module VisualCell\n */\nimport { selectElement, makeElement, generateGetterSetters } from 'muze-utils';\nimport { CLASSPREFIX, HEIGHT, WIDTH, AXIS_CELL } from './enums/constants';\nimport SimpleCell from './simple-cell';\nimport { DEFAULT_CONFIG } from './enums/defaults';\nimport { AXIS } from './enums/cell-type';\nimport { PROPS } from './props';\n\n/**\n * Computes the logical space of the an axis instance within an axis cell\n *\n * @param {Object} context Required to get the needed parameters to compute axis space\n * @return {Object} Returns the logical space for axis\n */\nconst computeAxisSpace = (context) => {\n let logicalWidth;\n let logicalHeight;\n const axis = context.source();\n const {\n spaceFixer,\n margin\n } = context.config();\n const {\n width,\n height\n } = axis.getLogicalSpace();\n const {\n show\n } = axis.config();\n if (show === true) {\n logicalHeight = Math.floor(height + margin.top + margin.bottom + spaceFixer);\n logicalWidth = Math.floor(width + margin.left + margin.right + spaceFixer);\n } else {\n [logicalWidth, logicalHeight] = [width, height];\n }\n return {\n width: logicalWidth,\n height: logicalHeight\n };\n};\n\n/**\n * Represents an axis cell.\n *\n * @class Axis\n */\nclass AxisCell extends SimpleCell {\n\n /**\n * Creates an instance of AxisCell.\n *\n * @param {Object} config The input config.\n * @memberof AxisCell\n */\n constructor (config) {\n super(config);\n\n this._axis = null;\n this._availHeight = null;\n this._availWidth = null;\n this._logicalSpace = null;\n\n generateGetterSetters(this, PROPS[AXIS]);\n }\n\n /**\n * return the type pf SimpleCell cell.\n *\n * @readonly\n * @memberof AxisCell\n */\n get type () {\n return AXIS;\n }\n\n /**\n * This method return the value conatined by this SimpleCell.\n *\n * @return {SimpleAxis | ColorAxis} Instance of SimpleAxis or ColorAxis.\n * @memberof AxisCell\n */\n valueOf () {\n return this.source().id;\n }\n\n /**\n * This method return the unique identififer of the axis\n *\n * @return {string} Id of the axis.\n * @memberof AxisCell\n */\n get id () {\n return this._id;\n }\n\n /**\n * Retrns the serialized representation of this cell.\n *\n * @return {Object}Object with serializable props.\n * @memberof AxisCell\n */\n serialize () {\n return {\n type: AXIS,\n axis: this.source().serialize()\n };\n }\n\n /**\n * return the default configuration for the text cell\n *\n * @static\n * @return {Object} Default configuration of the cell\n * @memberof AxisCell\n */\n static defaultConfig () {\n return DEFAULT_CONFIG;\n }\n\n /**\n * return the space taken up by an axis element in the dom.\n *\n * @return {Object} Object with width and height fields.\n * @memberof AxisCell\n */\n getLogicalSpace () {\n if (!this.logicalSpace()) {\n this.logicalSpace(computeAxisSpace(this));\n }\n return this.logicalSpace();\n }\n\n /**\n * This method is used to set the space availiable to render\n * the SimpleCell.\n *\n * @param {number} width The width of SimpleCell.\n * @param {number} height The height of SimpleCell.\n * @return {Instance} Returns current Instance\n * @memberof AxisCell\n */\n setAvailableSpace (width, height) {\n this.availWidth(width);\n this.availHeight(height);\n const {\n margin,\n isOffset\n } = this.config();\n this.source().setAvailableSpace(width, height, margin, isOffset);\n this.logicalSpace(null);\n this.source().logicalSpace(null);\n return this;\n }\n\n /**\n * This method is used to render the axis inside the axis cell.\n *\n * @param {HTMLElement} mount The mount point.\n * @return {Selection} node where axis mounted\n * @memberof AxisCell\n */\n /* istanbul ignore next */render (mount) {\n if (!mount) {\n return this;\n }\n const axis = this.source();\n const availHeight = this.availHeight();\n const availWidth = this.availWidth();\n const {\n margin\n } = this.config();\n const {\n top,\n bottom,\n left,\n right\n } = margin;\n const {\n show\n } = axis.config();\n const wrapperDiv = makeElement(selectElement(mount), 'div', [this], `${CLASSPREFIX}-${AXIS_CELL}`);\n const selection = makeElement(wrapperDiv, 'svg', [1], `${CLASSPREFIX}-axis-container`);\n\n this.mount(mount);\n if (availWidth === 0 || !availWidth) {\n selection.attr(WIDTH, `${0}px`);\n }\n if (availHeight === 0 || !availHeight) {\n selection.attr(HEIGHT, `${0}px`);\n }\n wrapperDiv.style(WIDTH, `${show ? availWidth : 0}px`)\n .style(HEIGHT, `${show ? availHeight : 0}px`)\n .style('margin-top', top)\n .style('margin-bottom', bottom)\n .style('margin-left', left)\n .style('margin-right', right);\n\n axis.mount(selection.node());\n return selection;\n }\n\n /**\n * Disposes the cell\n *\n * @return {Instance} Current instance of AxisCell\n * @memberof AxisCell\n */\n remove () {\n this.source() && this.source().remove();\n this.mount() && this.mount().remove();\n return this;\n }\n}\n\nexport default AxisCell;\n\n","/**\n * This file declares a class that represents a BLANK element in a table.\n * @module VisualCell\n */\nimport {\n selectElement,\n makeElement,\n applyStyle,\n generateGetterSetters\n } from 'muze-utils';\nimport SimpleCell from './simple-cell';\nimport { CLASSPREFIX, BLANK_CELL } from './enums/constants';\nimport { BLANK } from './enums/cell-type';\nimport { DEFAULT_CONFIG } from './enums/defaults';\nimport { PROPS } from './props';\n\n/**\n * Represents a table haeder.\n *\n * @class BLANK\n */\nclass BlankCell extends SimpleCell {\n\n /**\n * Creates an instance of BLANK.\n * @param {Object} config The input configuration.\n * @memberof BLANK\n */\n constructor (config) {\n super(config);\n\n generateGetterSetters(this, PROPS[BLANK]);\n }\n\n /**\n * return the type pf SimpleCell cell.\n *\n * @readonly\n * @memberof BlankCell\n */\n get type () {\n return BLANK;\n }\n\n /**\n * This method return the value contained by this SimpleCell.\n *\n * @return {string} The text value contained by this cell.\n * @memberof BlankCell\n */\n valueOf () {\n return this.id;\n }\n\n /**\n * return the default configuration for the text cell\n *\n * @static\n * @return {Object} Default configuration of the cell\n * @memberof BlankCell\n */\n static defaultConfig () {\n return DEFAULT_CONFIG;\n }\n\n /**\n * This method is used to return a unique identifier for\n * the BLANK cell.\n *\n * @return {string} The unique identifier for the BLANK.\n * @memberof BlankCell\n */\n get id () {\n return this._id;\n }\n\n /**\n * This method is used to obtain a serialized representation of this instance.\n *\n * @return {Object} Object with serilizable props.\n * @memberof BLANK\n */\n serialize () {\n return {\n type: BLANK\n };\n }\n\n /**\n * This method return the space taken up\n * by the text with the style applied.\n *\n * @return {Object} width and height taken up by the text.\n * @memberof BLANK\n */\n getLogicalSpace () {\n if (!this.logicalSpace()) {\n return {\n width: this.width || 0,\n height: this.height || 0\n };\n }\n return this.logicalSpace();\n }\n\n /**\n * This method is used to set the available space.\n *\n * @param {number} width The available width.\n * @param {number} height The available height.\n * @return {Instance} Returns current Instance\n * @memberof BlankCell\n */\n setAvailableSpace (width, height) {\n this.availWidth(width);\n this.availHeight(height);\n this.logicalSpace(null);\n return this;\n }\n\n /**\n * This method is used to render the BLANK cell inside\n * the provided mount point.\n *\n * @param {HTMLElement} mount The mount point for this cell.\n * @return {Instance} Returns current Instance\n * @memberof BLANK\n */\n /* istanbul ignore next */render (mount) {\n if (mount) {\n const { style } = this.config();\n // append span element to mount point\n this.mount(mount);\n const container = selectElement(mount);\n const elem = makeElement(container, 'div', [this.id]);\n elem.classed(`${CLASSPREFIX}-${BLANK_CELL}`, true);\n elem.style('width', `${this.availWidth()}px`);\n elem.style('height', `${this.availHeight()}px`);\n elem.html('');\n // apply style on the returned element\n if (style) {\n applyStyle(elem, style);\n }\n } return this;\n }\n\n /**\n * Removes the cell(Disposal)\n *\n * @return {Instance} Returns current Instance\n * @memberof BlankCell\n */\n remove () {\n this.mount() && this.mount().remove();\n return this;\n }\n }\nexport default BlankCell;\n","/**\n * This file declares a class that represents a Text element in a table.\n * @module VisualCell\n */\n\nimport {\n selectElement,\n makeElement,\n getSmartComputedStyle,\n generateGetterSetters\n} from 'muze-utils';\nimport SimpleCell from './simple-cell';\nimport { TEXT } from './enums/cell-type';\nimport { PROPS } from './props';\nimport { DEFAULT_CONFIG } from './enums/defaults';\nimport { CLASSPREFIX, TOP, BOTTOM, LEFT, RIGHT, HEADER, WIDTH, TEXT_CELL } from './enums/constants';\nimport './text-cell.scss';\n\n/**\n* Computes the Logical Space for the text\n*\n* @param {Object} context Required to get the needed parameters to compute text space\n* @return {Object} Logical space taken up by text\n* @memberof TextCell\n*/\nconst computeTextSpace = (context) => {\n const { labelManager } = context.dependencies();\n const space = labelManager.getOriSize(context.source());\n const {\n margin,\n show\n } = context.config();\n\n labelManager.setStyle(context._computedStyle);\n if (show) {\n return {\n width: space.width + margin.left + margin.right + context._minTickDiff.width,\n height: space.height + margin.top + margin.bottom + context._minTickDiff.height\n };\n } return {\n width: 0,\n height: 0\n };\n};\n\n/**\n * Represents a table haeder.\n *\n * @class Text\n */\nclass TextCell extends SimpleCell {\n\n /**\n * Creates an instance of Text.\n * @param {Object} config The input configuration.\n * @param {string} dependencies Dependencies for the class(labelManager)\n * @memberof Text\n */\n constructor (config, dependencies) {\n super(config);\n\n this._dependencies = dependencies;\n this._className = this._config.className ||\n (this._config.type === HEADER ? `${CLASSPREFIX}-${HEADER}-cell` : `${CLASSPREFIX}-${TEXT}-cell`);\n this._computedStyle = getSmartComputedStyle(selectElement('body'), this._className);\n this._dependencies.labelManager.setStyle(this._computedStyle);\n this._minTickDiff = this._dependencies.labelManager.getOriSize('WW');\n\n generateGetterSetters(this, PROPS[TEXT]);\n }\n\n /**\n * return the type pf SimpleCell cell.\n *\n * @readonly\n * @memberof TextCell\n */\n get type () {\n return TEXT;\n }\n\n /**\n * This method return the value contained by this SimpleCell.\n *\n * @return {string} The text value contained by this cell.\n * @memberof TextCell\n */\n valueOf () {\n return this.source();\n }\n\n /**\n * This method is used to return a unique identifier for\n * the Text cell.\n *\n * @return {string} The unique identifier for the Text.\n * @memberof TextCell\n */\n get id () {\n return this._id;\n }\n\n /**\n * Returns the dependencies of the instance\n *\n * @return {Object} Dependencies needed by the class\n * @memberof TextCell\n */\n dependencies () {\n return this._dependencies;\n }\n\n /**\n * This method is used to obtain a serialized representation of this instance.\n *\n * @return {Object} Object with serilizable props.\n * @memberof TextCell\n */\n serialize () {\n return {\n text: this.source(),\n type: TEXT\n };\n }\n\n /**\n * return the default configuration for the text cell\n *\n * @static\n * @return {Object} Default configuration of the cell\n * @memberof TextCell\n */\n static defaultConfig () {\n return DEFAULT_CONFIG;\n }\n\n /**\n * This method return the space taken up\n * by the text with the style applied.\n *\n * @return {Object} width and height taken up by the text.\n * @memberof Text\n */\n getLogicalSpace () {\n if (!this.logicalSpace()) {\n this.logicalSpace(computeTextSpace(this));\n }\n return this.logicalSpace();\n }\n\n /**\n * This method is used to set the available space.\n *\n * @param {number} width The available width.\n * @param {number} height The available height.\n * @return {Instance} Returns current Instance\n * @memberof TextCell\n */\n setAvailableSpace (width, height) {\n this.availWidth(width);\n this.availHeight(height);\n this.logicalSpace(null);\n return this;\n }\n\n /**\n * This method is used to render the Text cell inside\n * the provided mount point.\n *\n * @param {HTMLElement} mount The mount point for this cell.\n * @return {Instance} Returns current Instance\n * @memberof Text\n */\n render (mount) {\n const availWidth = this.availWidth();\n const {\n margin,\n show,\n verticalAlign,\n textAlign\n } = this.config();\n\n this.mount(mount);\n if (show) {\n const container = selectElement(mount);\n const elem = makeElement(container, 'div', [this.id], `${CLASSPREFIX}-${TEXT_CELL}`);\n\n container.style('vertical-align', verticalAlign);\n elem.classed(this._className, true);\n // apply style on the returned element\n elem.style(WIDTH, availWidth ? `${availWidth}px` : '100%');\n [TOP, BOTTOM, LEFT, RIGHT].forEach((type) => {\n elem.style(`padding-${type}`, `${margin[type]}px`);\n });\n elem.style('text-align', textAlign);\n elem.style('display', 'inline');\n // set the text as the innerHTML\n elem.html(this.source());\n }\n return this;\n }\n\n /**\n * Disposes the cell\n *\n * @return {Instance} Returns current Instance\n * @memberof TextCell\n */\n remove () {\n this.mount() && this.mount().remove();\n return this;\n }\n }\n\nexport default TextCell;\n","/**\n * This file declares a class that is used to represent a table cell\n * that houses a visual unit.\n * @module VisualCell\n */\n\nimport { selectElement, makeElement, generateGetterSetters } from 'muze-utils';\nimport SimpleCell from './simple-cell';\nimport { GEOM } from './enums/cell-type';\nimport { PROPS } from './props';\nimport {\n CLASSPREFIX, HEIGHT, WIDTH, DATA, AXES, FACET_BY_FIELDS, FIELDS, TRANSFORM, LAYER_DEF, CONFIG, GEOM_CELL,\n DETAIL_FIELDS\n} from './enums/constants';\nimport { DEFAULT_CONFIG } from './enums/defaults';\n\n/**\n * Calculates the logical space of the cell\n *\n * @param {Object} context Required to get the needed parameters to compute unit space\n * @return {Object} Logical space taken up by the unit\n * @memberof GeomCell\n */\nconst computeGeomSpace = (context) => {\n const config = context.source().config();\n const { width, height } = config;\n return {\n width: Math.ceil(width),\n height: Math.ceil(height + context.getCaptionSpace().height)\n };\n};\n\n /**\n * This class represents a SimpleCell for visual unit.\n *\n * @class GeomCell\n */\nclass GeomCell extends SimpleCell {\n\n /**\n * Creates an instance of GeomCell.\n * @param {Object} config The input configuration.\n * @memberof GeomCell\n */\n constructor (config) {\n super(config);\n\n this._unit = null;\n this._layers = null;\n this._axes = {};\n this._datamodel = {};\n this._facetByFields = {};\n this._fields = null;\n this._transform = null;\n this._caption = null;\n\n generateGetterSetters(this, PROPS[GEOM]);\n }\n\n /**\n * return the type pf SimpleCell cell.\n *\n * @readonly\n * @memberof GeomCell\n */\n get type () {\n return GEOM;\n }\n\n /**\n * This method return the value contained by this cell.\n *\n * @return {VisualUnit} Instance of visual unit contained by visual unit.\n * @memberof GeomCell\n */\n valueOf () {\n return this.source();\n }\n\n /**\n * This method is used to return the id of the\n * visual unit housed by this cell.\n *\n * @return {string} The unique id of the visual unit.\n * @memberof GeomCell\n */\n get id () {\n return this.source().id();\n }\n\n /**\n * This method return a serialized representation of\n * this instance.\n *\n * @return {Object} Object with serializable props.\n * @memberof GeomCell\n */\n serialize () {\n return {\n type: GEOM,\n unit: this.source().serialize(),\n caption: this.caption()\n };\n }\n\n /**\n * return the default configuration for the geom cell\n *\n * @static\n * @return {Object} Default configuration of the cell\n * @memberof GeomCell\n */\n static defaultConfig () {\n return DEFAULT_CONFIG;\n }\n\n /**\n * Updates the model based on the changed parameters\n *\n * @return {Instance} return instance\n * @memberof GeomCell\n */\n updateModel () {\n const unit = this.source();\n unit.lockModel();\n [DATA, AXES, FACET_BY_FIELDS, FIELDS, TRANSFORM, LAYER_DEF, CONFIG, DETAIL_FIELDS].forEach((prop) => {\n this[prop]() && unit[prop](this[prop]());\n });\n unit.unlockModel();\n return this;\n }\n\n /**\n * It gives the space taken by the caption of the unit\n *\n * @return {Object} return the space taken by caption\n * @memberof GeomCell\n */\n getCaptionSpace () {\n const caption = this.caption();\n\n let captionSpace = { width: 0, height: 0 };\n if (caption) {\n captionSpace = caption.getLogicalSpace();\n }\n return captionSpace;\n }\n\n /**\n * return the space taken up by the element in the dom.\n *\n * @return {Object} Object with width and height fields.\n * @memberof GeomCell\n */\n getLogicalSpace () {\n if (!this.logicalSpace()) {\n this.logicalSpace(computeGeomSpace(this));\n }\n return this.logicalSpace();\n }\n\n /**\n * This method is used to set the space available to\n * render the SimpleCell.\n *\n * @param {number} width The available width.\n * @param {number} height The available height.\n * @return {Instance} Returns current Instance\n * @memberof GeomCell\n */\n setAvailableSpace (width, height) {\n const unit = this.source();\n\n this.availWidth(width);\n this.availHeight(height);\n unit.lockModel();\n unit.width(width).height(height - this.getCaptionSpace().height);\n unit.unlockModel();\n this.logicalSpace(null);\n return this;\n }\n\n /**\n * his method is used to render the visual unit inside the provided cell.\n *\n * @param {HTMLElement} mount The mountpoint in the table.\n * @return {Instance} Returns current Instance\n * @memberof GeomCell\n */\n render (mount) {\n if (mount) {\n this.mount(mount);\n const availHeight = this.availHeight();\n const availWidth = this.availWidth();\n const caption = this.caption();\n const wrapperDiv = makeElement(selectElement(mount), 'div', [1], `${CLASSPREFIX}-${GEOM_CELL}`);\n\n if (caption) {\n const captionDom = makeElement(wrapperDiv, 'div', [caption], `${CLASSPREFIX}-unit-caption`).node();\n caption.render(captionDom);\n }\n const selection = makeElement(wrapperDiv, 'div', [1], `${CLASSPREFIX}-unit`);\n wrapperDiv.style(WIDTH, `${availWidth}px`).style(HEIGHT, `${availHeight}px`);\n selection.style(WIDTH, `${availWidth}px`)\n .style(HEIGHT, `${availHeight - this.getCaptionSpace().height}px`);\n this.source().mount(selection.node());\n }\n return this;\n }\n\n /**\n * Disposes the cell\n *\n * @return {Object} Current instance\n * @memberof GeomCell\n */\n remove () {\n this.mount() && this.mount().remove();\n this.source().remove();\n return this;\n }\n}\n\nexport default GeomCell;\n","import AxisCell from './axis-cell';\nimport BlankCell from './blank-cell';\nimport TextCell from './text-cell';\nimport GeomCell from './geom-cell';\nimport SimpleCell from './simple-cell';\n\nimport * as CONSTANTS from './constants';\n\nexport const DEFAULT_PLACEHOLDERS = {\n [CONSTANTS.SIMPLE_CELL]: SimpleCell,\n [CONSTANTS.TEXT_CELL]: TextCell,\n [CONSTANTS.AXIS_CELL]: AxisCell,\n [CONSTANTS.GEOM_CELL]: GeomCell,\n [CONSTANTS.BLANK_CELL]: BlankCell\n};\n\n","export const SIMPLE_CELL = 'SimpleCell';\nexport const TEXT_CELL = 'TextCell';\nexport const AXIS_CELL = 'AxisCell';\nexport const BLANK_CELL = 'BlankCell';\nexport const GEOM_CELL = 'GeomCell';\n\n","import { DEFAULT_PLACEHOLDERS } from './defaults';\n\n/**\n * Creates a registry for the cells, which can be used for\n * setting a new cell or getting the registered cells\n *\n * @return {Object} Setters and getters for registered cells\n */\nconst cellRegistry = () => {\n const reg = DEFAULT_PLACEHOLDERS;\n return {\n set: (key, def) => {\n if (key in reg) {\n reg[key] = def;\n }\n return cellRegistry;\n },\n get: () => reg\n };\n};\nexport default cellRegistry;\n","import { TextCell } from '@chartshq/visual-cell';\nimport { escapeHTML } from 'muze-utils';\n\n/**\n *\n *\n * @param {*} rawContent\n * @returns\n */\nconst resolveTitleSubTitleContent = (rawContent) => {\n if (typeof rawContent === 'function' && !rawContent._sanitize) {\n return rawContent();\n }\n return escapeHTML(rawContent());\n};\n\n/**\n *\n *\n * @param {*} config\n * @param {*} cellType\n * @param {*} labelManager\n * @param {*} prevCell\n * @returns\n */\nconst headerCreator = (config, cellType, labelManager, prevCell) => {\n const {\n content\n } = config;\n const cell = prevCell || new TextCell({ type: cellType }, { labelManager });\n\n cell.source(content);\n\n return {\n height: cell.getLogicalSpace().height,\n cell\n };\n};\n\n/**\n *\n *\n * @param {*} config\n * @param {*} type\n * @param {*} labelManager\n * @param {*} cell\n * @returns\n */\nconst createHeading = (config, type, labelManager, prevCell) => {\n if (!config) { return ''; }\n\n return headerCreator(\n config,\n type === 'title' ? 'header' : 'text',\n labelManager,\n prevCell\n );\n};\n\n/**\n *\n *\n * @param {*} context\n */\nexport const createHeaders = (context, canvasHeight, canvasWidth) => {\n let headerHeight = 0;\n const headers = {};\n\n canvasHeight >= 200 && canvasWidth >= 200 && ['title', 'subtitle'].forEach((type) => {\n const headerOptions = context[type]();\n const content = resolveTitleSubTitleContent(headerOptions[0]);\n if (content.length) {\n const config = headerOptions[1];\n\n config.width = context.width();\n config.content = content;\n\n const { height, cell } = createHeading(config, type, context.dependencies().smartlabel,\n context[`${type}Cell`]);\n\n headers[`${type}Cell`] = cell;\n context._composition[type] = cell;\n headerHeight += height + config.padding;\n }\n });\n return { headerHeight, headers };\n};\n\n","import { TextCell, AxisCell } from '@chartshq/visual-cell';\nimport {\n VERTICAL, HORIZONTAL, LEFT, RIGHT, LEGEND_TYPE_MAP, PADDING, BORDER, MARGIN\n} from '../constants';\n\n/**\n *\n *\n * @param {*} legendConfig\n * @param {*} canvases\n * @returns\n */\nexport const legendCreator = (canvas) => {\n let LegendCls;\n const dataset = [];\n const axes = canvas.getRetinalAxes();\n\n Object.entries(axes).forEach((axisInfo) => {\n const scale = axisInfo[1][0];\n const scaleType = axisInfo[0];\n const scaleProps = canvas[scaleType]();\n\n if (scaleProps.field) {\n const {\n type,\n step\n } = scale.config();\n\n const stepMapper = typeof step === 'boolean' ? step : false;\n LegendCls = LEGEND_TYPE_MAP[`${type}-${stepMapper}-${scaleType}`];\n dataset.push({ scale, canvas, fieldName: scaleProps.field, LegendCls, scaleType });\n }\n });\n\n return dataset;\n};\n\n/**\n *\n *\n * @param {*} legendConfig\n * @param {*} canvases\n * @param {*} measurement\n * @param {*} prevLegends\n * @returns\n */\nexport const legendInitializer = (legendConfig, canvas, measurement, prevLegends) => {\n const legends = [];\n const {\n height,\n width,\n headerHeight\n } = measurement;\n const {\n position,\n align\n } = legendConfig;\n\n const legendInfo = legendCreator(canvas);\n\n legendInfo.forEach((dataInfo, index) => {\n let legend = {};\n\n const legendMeasures = {};\n const {\n LegendCls,\n scale,\n fieldName,\n scaleType\n } = dataInfo;\n const config = legendConfig[scaleType] || {};\n const title = config.title || {};\n title.text = title.text || fieldName;\n if (config.show) {\n config.position = position;\n config.align = align;\n\n if (prevLegends[index]) {\n legend = prevLegends[index].legend;\n } else {\n legend = LegendCls.create({\n labelManager: canvas._dependencies.smartlabel,\n cells: {\n AxisCell, TextCell\n }\n });\n }\n legendMeasures.maxHeight = align === VERTICAL ? (height - headerHeight) : height * 0.2;\n legendMeasures.maxWidth = align === HORIZONTAL ? width : width * 0.2;\n legendMeasures.width = Math.min(legendMeasures.maxWidth, config.width);\n legendMeasures.height = Math.min(legendMeasures.maxHeight, config.height);\n\n [PADDING, BORDER, MARGIN].forEach((e) => {\n legendMeasures[e] = config[e];\n });\n legend.scale(scale)\n .title(title)\n .fieldName(fieldName)\n .config(config)\n .metaData(canvas.composition().visualGroup.getGroupByData().project([fieldName]))\n .measurement(legendMeasures)\n .canvasAlias(canvas.alias())\n .setLegendMeasures();\n\n legends.push({ canvas, legend, scaleType });\n }\n });\n return legends;\n};\n\n/**\n *\n *\n * @param {*} legends\n * @param {*} legendConfig\n * @param {*} availableHeight\n * @param {*} availableWidth\n * @returns\n */\nexport const getLegendSpace = (legends, legendConfig, availableHeight, availableWidth) => {\n const legendMeasures = legends.map(legendInfo => legendInfo.legend.measurement());\n const legendSpace = { width: 0, height: 0 };\n\n legendMeasures.forEach((space) => {\n let height = 0;\n let width = 0;\n width = Math.min(space.width, space.maxWidth);\n height = Math.min(space.height, space.maxHeight);\n\n if (legendConfig.align === HORIZONTAL) {\n if (legendSpace.width + width > availableWidth) {\n legendSpace.width = availableWidth;\n legendSpace.height += height;\n } else {\n legendSpace.width += width;\n legendSpace.height = Math.max(legendSpace.height, height);\n }\n } else if (legendSpace.height + height > availableHeight) {\n legendSpace.height = height;\n legendSpace.width += width;\n } else {\n legendSpace.height += height;\n legendSpace.width = Math.max(legendSpace.width, width);\n }\n });\n if (legendConfig.align === HORIZONTAL) {\n legendSpace.width = availableWidth;\n }\n return legendSpace;\n};\n\n/**\n *\n *\n * @param {*} context\n * @param {*} headerHeight\n * @returns\n */\nexport const createLegend = (context, headerHeight, height, width) => {\n const measurement = {\n height,\n width,\n headerHeight\n };\n const { legend } = context.config();\n const { show, position } = legend;\n\n legend.classPrefix = context.config().classPrefix;\n const align = (position === LEFT || position === RIGHT) ? VERTICAL : HORIZONTAL;\n\n legend.show = show ? ((align === VERTICAL && width > 200) || (align === HORIZONTAL && height > 200)) : show;\n legend.align = align;\n return legendInitializer(legend, context, measurement, context.legends || []);\n};\n","import { mergeRecursive } from 'muze-utils';\nimport { arrangeComponents } from './component-resolver';\nimport { createHeaders } from './title-maker';\nimport { createLegend, getLegendSpace } from './legend-maker';\nimport { TOP, BOTTOM, LEFT, RIGHT } from '../constants';\n\n/**\n *\n *\n * @param {*} context\n * @returns\n */\nexport const prepareLayout = (layout, components, config, measurement) => {\n const {\n rows,\n columns,\n values,\n cornerMatrices\n } = components;\n\n const {\n topLeft,\n topRight,\n bottomLeft,\n bottomRight\n } = cornerMatrices;\n\n layout.measurement(measurement)\n .config(config)\n .matrices({\n top: [topLeft, columns[0], topRight],\n center: [rows[0], values, rows[1]],\n bottom: [bottomLeft, columns[1], bottomRight]\n })\n .triggerReflow();\n};\n\n/**\n *\n *\n * @param {*} context\n * @param {*} mount\n * @returns\n */\nexport const getRenderDetails = (context, mount) => {\n let layoutConfig = mergeRecursive({}, context.config());\n // Get height width of the mount point\n let { height, width } = mount.getBoundingClientRect();\n const heightAttr = context.height();\n const widthAttr = context.width();\n const visGroup = context.composition().visualGroup;\n const {\n isColumnSizeEqual,\n isRowSizeEqual,\n rows,\n columns,\n values\n } = visGroup.placeholderInfo();\n const {\n minWidth,\n minHeight,\n classPrefix,\n showHeaders,\n legend\n } = context.config();\n // Get title configuration\n const titleConfig = context.title()[1];\n // Get subtitle configuration\n const subtitleConfig = context.subtitle()[1];\n // Get legend position\n const legendPosition = legend.position;\n // Arrange components according to config\n const layoutArrangement = arrangeComponents(context);\n\n height = Math.floor(height);\n width = Math.floor(width);\n\n const availableHeightForCanvas = Math.max(heightAttr > 0 ? heightAttr : height, minHeight);\n const availableWidthForCanvas = Math.max(widthAttr > 0 ? widthAttr : width, minWidth);\n\n // Create headers and determine header height\n const { headers, headerHeight } = createHeaders(context, availableHeightForCanvas, availableWidthForCanvas);\n\n // Create legends and determine legend space\n const legends = createLegend(context, headerHeight, availableHeightForCanvas, availableWidthForCanvas);\n context._composition.legend = {};\n legends.forEach((e) => {\n context._composition.legend[e.scaleType] = e.legend;\n });\n\n const legendSpace = getLegendSpace(legends, legend, availableHeightForCanvas, availableWidthForCanvas);\n const legendWidth = (legendPosition === LEFT || legendPosition === RIGHT) ? legendSpace.width : 0;\n const legendHeight = (legendPosition === TOP || legendPosition === BOTTOM) ? legendSpace.height : 0;\n\n // Set components for layouting\n const components = {\n headers,\n legends,\n canvases: [context],\n rows,\n columns,\n values,\n cornerMatrices: visGroup.cornerMatrices()\n };\n const measurement = {\n mountSpace: {\n height,\n width\n },\n headerHeight,\n legendSpace,\n canvasWidth: availableWidthForCanvas,\n canvasHeight: availableHeightForCanvas,\n width: availableWidthForCanvas - legendWidth,\n height: availableHeightForCanvas - headerHeight - legendHeight,\n minUnitHeight: context.minUnitHeight(),\n minUnitWidth: context.minUnitWidth()\n };\n layoutConfig = mergeRecursive(layoutConfig, {\n classPrefix,\n showHeaders,\n border: mergeRecursive(visGroup.metaData().border, context.config().border),\n layoutArrangement,\n legend,\n title: titleConfig,\n subtitle: subtitleConfig,\n isColumnSizeEqual,\n isRowSizeEqual\n });\n return {\n layoutConfig,\n components,\n measurement\n };\n};\n","export const TITLE_CONFIG = {\n position: 'top',\n align: 'left',\n padding: 8\n};\n\nexport const SUB_TITLE_CONFIG = {\n position: 'top',\n align: 'left',\n padding: 16\n};\n","import { mergeRecursive, selectElement } from 'muze-utils';\nimport {\n ROWS,\n COLUMNS,\n COLOR,\n SHAPE,\n SIZE,\n DETAIL,\n LAYERS,\n TRANSFORM,\n MOUNT,\n TITLE,\n SUB_TITLE\n} from '../constants';\nimport { TITLE_CONFIG, SUB_TITLE_CONFIG } from './defaults';\n/**\n * @module\n * This is the local options semantics based on which setters getters are created and reactivity is initiated.\n * This local object is only valid for Canvas.\n * Canvas merges global and local object both to the model\n *\n * Format\n * PROPERTRY_NAME: {\n * value: // default value of the property,\n * meta: {\n * typeCheck: // The setter value will be checked using this. If the value is function then the setter value\n * // is passed as args.\n * typeExpected: // The output of typecheck action will be tested against this. Truthy value will set the\n * // value to the setter\n * sanitizaiton: // Need for sanitization before type is checked\n * }\n * }\n */\n\nexport const localOptions = {\n [ROWS]: {\n value: null,\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Array'\n }\n },\n [COLUMNS]: {\n value: null,\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Array'\n }\n },\n [COLOR]: {\n value: null,\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Object',\n sanitization: (config) => {\n if (typeof config === 'string') {\n return {\n field: config\n };\n }\n return config;\n }\n }\n },\n [SHAPE]: {\n value: null,\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Object',\n sanitization: (config) => {\n if (typeof config === 'string') {\n return {\n field: config\n };\n }\n return config;\n }\n }\n },\n [SIZE]: {\n value: null,\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Object',\n sanitization: (config) => {\n if (typeof config === 'string') {\n return {\n field: config\n };\n }\n return config;\n }\n }\n },\n [DETAIL]: {\n value: [],\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Array'\n }\n },\n\n [LAYERS]: {\n value: null,\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Array'\n }\n },\n [TRANSFORM]: {\n value: null,\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Object'\n }\n },\n [MOUNT]: {\n value: null,\n meta: {\n sanitization: (value) => {\n if (typeof value === 'string') {\n return selectElement(value).node();\n }\n return value;\n }\n }\n }\n};\n\nexport const canvasOptions = {\n [TITLE]: {\n value: [null, null],\n meta: {\n typeCheck: ['constructor', 'constructor'],\n typeExpected: ['Function', 'Object'],\n spreadParams: true,\n sanitization: [(title) => {\n if (typeof title === 'string') {\n const t = () => title;\n t._sanitized = true;\n return t;\n }\n return title;\n }, (titleConfig) => {\n const defConfig = mergeRecursive({}, TITLE_CONFIG);\n return mergeRecursive(defConfig, titleConfig);\n }]\n }\n },\n [SUB_TITLE]: {\n value: [null, null],\n meta: {\n typeCheck: ['constructor', 'constructor'],\n typeExpected: ['Function', 'Object'],\n spreadParams: true,\n sanitization: [(subtitle) => {\n if (typeof subtitle === 'string') {\n const sub = () => subtitle;\n sub._sanitized = true;\n return sub;\n }\n return subtitle;\n }, (subtitleConfig) => {\n const defConfig = mergeRecursive({}, SUB_TITLE_CONFIG);\n return mergeRecursive(defConfig, subtitleConfig);\n }]\n }\n }\n};\n","import { makeElement, selectElement } from 'muze-utils';\nimport { VERTICAL, HORIZONTAL, TOP, LEFT, RIGHT, BOTTOM } from '../constants';\n\n/**\n * Sets the rotation for all x axes if any axis has the rotation config set in the\n * entire view\n *\n * @param {Array} columns Column cells that contain the axes cells\n */\nconst setLabelRotationForAxes = (context) => {\n let rotation = 0;\n\n const xAxes = context.xAxes() || [];\n\n (() => {\n for (let i = 0; i < xAxes.length; i++) {\n for (let j = 0; j < xAxes[i].length; j++) {\n if (xAxes[i][j].config().labels.rotation !== 0) {\n rotation = xAxes[i][j].config().labels.rotation;\n return;\n }\n }\n }\n })();\n\n if (rotation) {\n xAxes.forEach((axes) => {\n axes.forEach((axis) => {\n axis.config({ labels: { rotation, smartTicks: false } });\n });\n });\n }\n};\n\n/**\n *\n *\n * @param {*} context\n * @param {*} mount\n * @returns\n */\nconst getSkeletons = (mount, layoutConfig, measurement) => {\n const {\n layoutArrangement,\n classPrefix\n } = layoutConfig;\n const {\n headers,\n legends\n } = layoutArrangement;\n const {\n canvasWidth,\n canvasHeight\n } = measurement;\n const container = selectElement(mount);\n const components = {};\n const mountPoint = makeElement(container, 'div', [1], `${classPrefix}-viz`)\n .style('width', `${canvasWidth}px`)\n .style('height', `${canvasHeight}px`);\n const containers = mountPoint\n .selectAll(`.${classPrefix}-container`)\n .data(headers);\n containers.exit().remove();\n const containersEnter = containers.enter().append('div');\n\n const mergedContainer = containersEnter.merge(containers)\n .attr('class', `${classPrefix}-container`)\n .style('width', `${canvasWidth}px`)\n .style('padding', `${null}px`)\n .style('margin', null)\n .each(function (type) {\n components[type] = selectElement(this).classed(`${classPrefix}-${type}-container`, true);\n });\n const innerContainer = mergedContainer\n .selectAll(`.${classPrefix}-inner-container`)\n .data((d) => {\n if (d === 'group') {\n return legends;\n } return [];\n });\n innerContainer.exit().remove();\n const innerContainerEnter = innerContainer.enter().append('div');\n\n innerContainerEnter\n .merge(innerContainer)\n .attr('class', `${classPrefix}-inner-container`)\n .style('width', 'auto')\n .style('height', 'auto')\n .each(function (layoutType) {\n components[layoutType] = selectElement(this)\n .classed(`${classPrefix}-${layoutType}-container`, true);\n });\n return components;\n};\n\n/**\n *\n *\n * @param {*} context\n * @param {*} container\n * @param {*} legendComponents\n */\nconst renderLegend = (legendConfig, container, legendComponents, measurement) => {\n const sectionComponents = [];\n const { legendSpace, headerHeight, height, width } = measurement;\n const { legend, classPrefix } = legendConfig;\n const { position } = legend;\n const legendMount = makeElement(container, 'div', [legendComponents], `${classPrefix}-inner-content`, {}, d => d);\n legendMount.classed(`${classPrefix}-legend`, true);\n const align = (position === LEFT || position === RIGHT) ? VERTICAL : HORIZONTAL;\n const legWidth = align === VERTICAL ? legendSpace.width : width;\n const legHeight = align === VERTICAL ? height - headerHeight : legendSpace.height;\n\n [container, legendMount].forEach((elem) => {\n elem.style('width', `${Math.floor(legWidth)}px`)\n .style('height', `${legHeight}px`)\n .style('float', LEFT);\n });\n\n if (align === VERTICAL) {\n let sections = -1;\n let currHeight = legHeight;\n let currWidth = 0;\n\n legendComponents.forEach((legendInfo) => {\n const leg = legendInfo.legend;\n if (leg.measurement().height > currHeight) {\n sections++;\n currWidth = 0;\n currHeight = legHeight;\n } else {\n sections < 0 && sections++;\n }\n sectionComponents[sections] = sectionComponents[sections] || [];\n currHeight -= Math.min(leg.measurement().height, currHeight);\n currWidth = Math.max(Math.min(leg.measurement().width, leg.measurement().maxWidth), currWidth);\n sectionComponents[sections].push({\n legend: leg,\n legendHeight: legHeight,\n legendWidth: currWidth\n });\n });\n\n const mount = makeElement(legendMount, ['div'], sectionComponents, `${classPrefix}-legend-section`)\n .each((d, i) => selectElement(this).classed(`${classPrefix}-legend-section-${i}`, true))\n .classed(`${classPrefix}-legend-vertical-section`, true)\n .style('width', d => `${d[0].legendWidth}px`);\n makeElement(mount, ['div'], d => d, `${classPrefix}-legend-components`, {}, d => d.legend.id())\n .each(function (d) {\n d.legend.mount(this);\n })\n .style('width', d => `${d.legendWidth}px`);\n } else {\n const mount = makeElement(legendMount, 'div', [1], `${classPrefix}-legend-section`)\n .classed(`${classPrefix}-legend-horizontal-section`, true)\n .classed(`${classPrefix}-legend-section-${0}`, true)\n .style('width', `${legWidth}px`);\n\n makeElement(mount, 'div', legendComponents, `${classPrefix}-legend-components`, {}, d => d.legend.id())\n .each(function (d) { d.legend.mount(this); })\n .style('width', d => `${d.legend.measurement().width}px`);\n }\n};\n\n/**\n *\n *\n * @param {*} context\n * @param {*} container\n * @param {*} type\n * @param {*} headers\n */\nconst renderHeader = (layoutConfig, container, type, headers) => {\n const headerCell = headers[`${type}Cell`];\n const config = layoutConfig[`${type}`];\n const { position, align, padding } = config;\n const sel = container\n .selectAll(`.${layoutConfig.classPrefix}-inner-container`)\n .data([type]);\n sel.exit().remove();\n const selEnter = sel.enter().append('div');\n\n const cont = selEnter.merge(sel);\n cont.classed(`${layoutConfig.classPrefix}-inner-container`, true);\n\n headerCell && headerCell.render(cont.node());\n\n cont.selectAll('div').classed(`${layoutConfig.classPrefix}-inner-content`, true);\n cont.style('width', `${100}%`);\n\n if (config && headerCell) {\n cont.style('float', LEFT)\n .style('text-align', align)\n .style(`padding-${position === TOP ? BOTTOM : TOP}`, `${padding}px`);\n }\n};\n\n/**\n *\n *\n * @param {*} context\n * @param {*} shifter\n */\nconst shiftHeaders = (config, shifter, measurement, mount) => {\n const { classPrefix, title, subtitle, legend } = config;\n const { legendSpace } = measurement;\n const { position } = legend;\n\n shifter += position === LEFT ? legendSpace.width : 0;\n title && selectElement(mount).select(`.${classPrefix}-title-container`)\n .style('width', title.align === LEFT ? `calc(100% - ${shifter}px` : '100%')\n .style('margin-left', title.align === LEFT ? `${shifter}px` : 0);\n subtitle && selectElement(mount).select(`.${classPrefix}-subtitle-container`)\n .style('width', subtitle.align === LEFT ? `calc(100% - ${shifter}px` : '100%')\n .style('margin-left', subtitle.align === LEFT ? `${shifter}px` : 0);\n\n selectElement(mount).select(`.${classPrefix}-legend-horizontal-section`)\n .style('margin-left', `${shifter}px`)\n .style('width', `${legendSpace.width - shifter}px`)\n .selectAll(`.${classPrefix}-legend-body, .${classPrefix}-legend-title`)\n .style('max-width', `${legendSpace.width - shifter}px`);\n selectElement(mount).select(`.${classPrefix}-legend-vertical-section`)\n .style('margin-left', null)\n .selectAll(`.${classPrefix}-legend-body, .${classPrefix}-legend-title`)\n .style('max-width', null);\n};\n\n/**\n *\n *\n * @param {*} mountPoint\n * @param {*} measurement\n * @param {*} classPrefix\n * @returns\n */\nconst prepareGridContainer = (mountPoint, measurement, classPrefix, alias) => {\n if (!mountPoint) {\n return this;\n }\n\n const {\n height,\n width\n } = measurement;\n // Create container for the layout\n\n const sel = selectElement(mountPoint)\n .selectAll(`.${classPrefix}-inner-content`)\n .data(['layout'], d => d);\n sel.exit().remove();\n const selEnter = sel.enter().append('div');\n\n const container = selEnter.merge(sel)\n .attr('class', `${classPrefix}-inner-content`)\n .classed(`${classPrefix}-grid-layout`, true)\n .attr('id', `${classPrefix}-grid-layout-${alias}`)\n .style('height', `${height}px`)\n .style('padding', null)\n .style('width', `${Math.ceil(width)}px`);\n // Mount for matrices\n const innerSel = container.selectAll(`.${classPrefix}-layout-grid-container`)\n .data(['layout2']);\n innerSel.exit().remove();\n const innerSelEnter = innerSel.enter().append('div');\n\n const mount = innerSelEnter.merge(innerSel);\n mount.classed(`${classPrefix}-layout-grid-container`, true)\n .attr('id', `${classPrefix}-layout-grid-container-${alias}`)\n .style('height', `${height}px`)\n .style('width', `${Math.ceil(width)}px`);\n\n return {\n mount,\n container\n };\n};\n\n/**\n *\n *\n * @param {*} context\n * @param {*} components\n * @param {*} layoutConfig\n * @param {*} measurement\n */\nexport const renderComponents = (context, components, layoutConfig, measurement) => {\n const mountPoint = context.mount();\n const {\n headers,\n legends\n } = components;\n const {\n classPrefix\n } = layoutConfig;\n const {\n title,\n legend,\n subtitle,\n layout\n } = getSkeletons(mountPoint, layoutConfig, measurement);\n const {\n mount\n } = prepareGridContainer(layout.node(), measurement, classPrefix, context.alias());\n const padding = context.layout().getViewInformation().layoutDimensions.viewWidth[0];\n measurement.padding = padding;\n setLabelRotationForAxes(context);\n\n // Render layout\n context.layout().renderGrid(mount);\n context.once('layer.drawn').then(() => {\n renderHeader(layoutConfig, title, 'title', headers);\n renderHeader(layoutConfig, subtitle, 'subtitle', headers);\n renderLegend(layoutConfig, legend, legends, measurement);\n shiftHeaders(layoutConfig, padding, measurement, mountPoint);\n });\n context.composition().visualGroup.matrixInstance().value.each((el) => {\n el.valueOf().parentContainer(layout.node());\n });\n};\n","import { isEqual } from 'muze-utils';\nimport { ROWS, COLUMNS, COLOR, SHAPE, SIZE, MOUNT, DETAIL, DATA, CONFIG } from '../constants';\nimport { canvasOptions } from './local-options';\n\n/**\n * Instantiate high level components. Canvas knows what all high level component it has.\n * @nice-to-have dynamic high level components.\n * - Is it even required ?\n * - Reactive to source (canvas) streaming ?\n * @param {*} context Canvas instance\n * @return {Object.fArray>} Arrays of Title, visualGroup, Legend\n */\nexport const initCanvas = (context) => {\n const reg = context._registry.components;\n\n return [new reg.VisualGroup(context._registry, context.dependencies())];\n};\n\n/**\n *\n *\n * @memberof Canvas\n */\nexport const dispatchProps = (context) => {\n const lifeCycleManager = context.dependencies().lifeCycleManager;\n lifeCycleManager.notify({ client: context, action: 'beforeupdate' });\n const visualGroup = context.composition().visualGroup;\n\n visualGroup.lockModel();\n const allOptions = context._allOptions;\n for (const key in allOptions) {\n const value = context[key]();\n if (value !== null) {\n visualGroup[key] && visualGroup[key](value);\n }\n }\n visualGroup.unlockModel();\n\n context._cachedProps = {};\n lifeCycleManager.notify({ client: context, action: 'initialized' });\n lifeCycleManager.notify({ client: context, action: 'updated' });\n};\n\n/**\n *\n *\n */\nexport const setupChangeListener = (context) => {\n const store = context._store;\n\n store.registerImmediateListener(MOUNT, () => {\n const allOptions = Object.keys(context._allOptions);\n const props = [...allOptions, ...Object.keys(canvasOptions)];\n let equalityChecker = () => false;\n store.registerChangeListener(props, (...params) => {\n const updateProps = props.every((option, i) => {\n switch (option) {\n case ROWS:\n case COLUMNS:\n case DETAIL:\n equalityChecker = isEqual('Array');\n break;\n\n case SHAPE:\n case SIZE:\n case COLOR:\n case DATA:\n case CONFIG:\n equalityChecker = isEqual('Object');\n break;\n default:\n equalityChecker = () => true;\n break;\n }\n const oldVal = params[i][0];\n const newVal = params[i][1];\n\n return equalityChecker(oldVal, newVal);\n });\n // inform attached board to rerender\n !updateProps && dispatchProps(context);\n context.render();\n }, true);\n });\n};\n\nexport const applyInteractionPolicy = (policies, firebolt) => {\n const canvas = firebolt.context;\n const visualGroup = canvas.composition().visualGroup;\n const valueMatrix = visualGroup.composition().matrices.value;\n policies.forEach(policy => policy(valueMatrix, firebolt));\n};\n","import {\n getDataModelFromIdentifiers,\n FieldType,\n mergeRecursive\n} from 'muze-utils';\n\nimport { applyInteractionPolicy } from './helper';\n\nconst defaultInteractionPolicy = (valueMatrix, firebolt) => {\n const isMeasure = field => field.type() === FieldType.MEASURE;\n const canvas = firebolt.context;\n const visualGroup = canvas.composition().visualGroup;\n const xFields = [].concat(...visualGroup.getFieldsFromChannel('x'));\n const yFields = [].concat(...visualGroup.getFieldsFromChannel('y'));\n const colDim = xFields.every(field => field.type() === FieldType.DIMENSION);\n const fieldInf = visualGroup.resolver().getAllFields();\n const rowFacets = fieldInf.rowFacets;\n const colFacets = fieldInf.colFacets;\n valueMatrix.each((cell) => {\n const unitFireBolt = cell.valueOf().firebolt();\n\n if (!(xFields.every(isMeasure) && yFields.every(isMeasure))) {\n const facetFields = cell.valueOf().facetByFields()[0];\n const unitColFacets = facetFields.filter(d => colFacets.findIndex(v => v.equals(d)) !== -1);\n const unitRowFacets = facetFields.filter(d => rowFacets.findIndex(v => v.equals(d)) !== -1);\n let propFields;\n if (colDim) {\n propFields = unitColFacets.map(d => `${d}`);\n } else {\n propFields = unitRowFacets.map(d => `${d}`);\n }\n\n unitFireBolt.propagateWith('*', propFields, true);\n }\n });\n};\n\nconst defaultCrossInteractionPolicy = {\n behaviours: {\n '*': (propagationPayload, context) => {\n const propagationCanvasAlias = propagationPayload.sourceCanvas;\n const canvasAlias = context.parentAlias();\n return propagationCanvasAlias ? canvasAlias === propagationCanvasAlias : true;\n }\n },\n sideEffects: {\n tooltip: (propagationPayload, context) => {\n const propagationUnit = propagationPayload.sourceUnit;\n const propagationCanvas = propagationPayload.sourceCanvas;\n const unitId = context.id();\n const canvasAlias = context.parentAlias();\n if (propagationCanvas) {\n return propagationCanvas !== canvasAlias ? true : unitId === propagationUnit;\n }\n return true;\n }\n }\n};\n\nexport default class GroupFireBolt {\n constructor (context) {\n this.context = context;\n this._interactionPolicy = this.constructor.defaultInteractionPolicy();\n this._crossInteractionPolicy = this.constructor.defaultCrossInteractionPolicy();\n this.context.once('canvas.updated').then(() => {\n applyInteractionPolicy([this._interactionPolicy], this);\n const crossInteractionPolicy = this._crossInteractionPolicy;\n const behaviours = crossInteractionPolicy.behaviours;\n const sideEffects = crossInteractionPolicy.sideEffects;\n const visualGroup = context.composition().visualGroup;\n const valueMatrix = visualGroup.composition().matrices.value;\n valueMatrix.each((cell) => {\n const unitFireBolt = cell.valueOf().firebolt();\n for (const key in behaviours) {\n unitFireBolt.changeBehaviourStateOnPropagation(key, behaviours[key]);\n }\n for (const key in sideEffects) {\n unitFireBolt.changeSideEffectStateOnPropagation(key, sideEffects[key]);\n }\n });\n });\n }\n\n static defaultInteractionPolicy () {\n return defaultInteractionPolicy;\n }\n\n static defaultCrossInteractionPolicy () {\n return defaultCrossInteractionPolicy;\n }\n\n interactionPolicy (...policy) {\n if (policy.length) {\n this._interactionPolicy = policy[0] || this.constructor.defaultInteractionPolicy();\n return this;\n }\n return this._interactionPolicy;\n }\n\n crossInteractionPolicy (...policy) {\n if (policy.length) {\n this._crossInteractionPolicy = mergeRecursive(mergeRecursive({},\n this.constructor.defaultCrossInteractionPolicy()), policy[0] || {});\n return this;\n }\n return this._crossInteractionPolicy;\n }\n\n dispatchBehaviour (behaviour, payload) {\n const propPayload = Object.assign(payload);\n const criteria = propPayload.criteria;\n const data = this.context.data();\n\n propPayload.action = behaviour;\n const model = getDataModelFromIdentifiers(data, criteria);\n data.propagate(model, propPayload, {\n sourceId: this.context.alias()\n });\n return this;\n }\n\n}\n","import { GridLayout } from '@chartshq/layout';\nimport { transactor, Store, getUniqueId } from 'muze-utils';\nimport { RETINAL } from '../constants';\nimport TransactionSupport from '../transaction-support';\nimport { getRenderDetails, prepareLayout } from './layout-maker';\nimport { localOptions, canvasOptions } from './local-options';\nimport { renderComponents } from './renderer';\nimport GroupFireBolt from './firebolt';\nimport options from '../options';\nimport { initCanvas, setupChangeListener } from './helper';\n\n/**\n * This is the primary class which manages highlevel components like visualGroup, Titles, Legend, Extensions\n * (in future). Global level Muze functionality is subset this. Every time user works with an instance of\n * canvas in dom which provides instance level settings.\n *\n */\nexport default class Canvas extends TransactionSupport {\n\n /**\n * Creates reactive property accessors.\n * - data\n * - height\n * - width\n * - config\n * This configs are retrieved from options.\n */\n constructor (globalDependencies) {\n super();\n\n this._allOptions = Object.assign({}, options, localOptions);\n this._registry = {};\n this._composition = {};\n this._cachedProps = {};\n this._alias = null;\n this._renderedResolve = null;\n this._renderedPromise = new Promise((resolve) => {\n this._renderedResolve = resolve;\n });\n this._composition.layout = new GridLayout();\n this._store = new Store({});\n\n // Setters and getters will be mounted on this. The object will be mutated.\n const [, store] = transactor(this, options, this._store.model);\n transactor(this, localOptions, store);\n transactor(this, canvasOptions, store);\n this.dependencies(Object.assign({}, globalDependencies, this._dependencies));\n this.firebolt(new GroupFireBolt(this));\n this.alias(`canvas-${getUniqueId()}`);\n this.title('', {});\n this.subtitle('', {});\n this.legend({});\n this.color({});\n this.shape({});\n this.size({});\n setupChangeListener(this);\n }\n\n /**\n *\n *\n * @readonly\n * @memberof Canvas\n */\n layout (...params) {\n if (params.length) {\n return this;\n }\n return this.composition().layout;\n }\n\n /**\n *\n *\n * @readonly\n * @memberof Canvas\n */\n composition (...params) {\n if (params.length) {\n return this;\n }\n return this._composition;\n }\n\n done () {\n return this._renderedPromise;\n }\n\n /**\n *\n *\n * @param {*} params\n * @returns\n * @memberof Canvas\n */\n alias (...params) {\n if (params.length) {\n const visualGroup = this.composition().visualGroup;\n this._alias = params[0];\n visualGroup && visualGroup.alias(this.alias());\n return this;\n }\n return this._alias;\n }\n\n /**\n * Creates an instance initiated with given settings.\n *\n * @param {Object} initialSettings Initial settings to be populated in the model\n * @param {Object} regEntry newly created instance with the initial settings\n * @param {Object} globalDependencies dependencies which will be created only once in the page\n *\n * @return {Object} newly created instance with the initial settings\n */\n static withSettings (initialSettings, regEntry, globalDependencies) {\n const instance = new Canvas(globalDependencies);\n\n for (const key in initialSettings) {\n instance[key](initialSettings[key]);\n }\n // set registry for instance\n instance.registry(regEntry);\n return instance;\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof Canvas\n */\n static formalName () {\n return 'canvas';\n }\n\n /**\n *\n *\n * @readonly\n * @memberof Canvas\n */\n firebolt (...firebolt) {\n if (firebolt.length) {\n this._firebolt = firebolt[0];\n return this;\n }\n return this._firebolt;\n }\n\n /**\n * Registry peoperty accessor\n *\n * @param {Object} reg plain old javascript object keyvalue pairs. Key containing module name and value contains\n * module definition class. The reg object has to be flat object of level 1.\n */\n registry (...params) {\n if (params.length) {\n const components = Object.assign({}, params[0].components);\n const componentSubRegistry = Object.assign({}, params[0].componentSubRegistry);\n\n this._registry = { components, componentSubRegistry };\n const initedComponents = initCanvas(this);\n // @todo is it okay to continue this tight behaviour? If not use a resolver to resolve diff component type.\n this._composition.visualGroup = initedComponents[0];\n\n this.composition().visualGroup.alias(this.alias());\n return this;\n }\n return this._registry;\n }\n\n /*\n * Prepare dependencies for top level elements\n */\n dependencies (...param) {\n if (param.length) {\n this._dependencies = param[0];\n return this;\n }\n // @todo prepare dependencies here.\n return this._dependencies;\n }\n\n /**\n *\n *\n * @param {*} lifeCycles\n * @returns\n * @memberof Canvas\n */\n lifeCycle (lifeCycles) {\n const lifeCycleManager = this.dependencies().lifeCycleManager;\n if (lifeCycles) {\n lifeCycleManager.register(lifeCycles);\n return this;\n }\n return lifeCycleManager;\n }\n\n /**\n *\n *\n * @readonly\n * @memberof Canvas\n */\n legend (...params) {\n if (params.length) {\n return this;\n }\n return this.composition().legend;\n }\n\n /**\n *\n *\n * @param {*} eventName\n * @returns\n * @memberof Canvas\n */\n once (eventName) {\n const lifeCycleManager = this.dependencies().lifeCycleManager;\n return lifeCycleManager.retrieve(eventName);\n }\n\n /**\n * Internal function to trigger render, this method is cognizant of all the properties of the core modules and\n * establish a passive reactivity. Passive reactivity is not always a bad thing :)\n * @internal\n */\n render () {\n const mount = this.mount();\n const visGroup = this.composition().visualGroup;\n const lifeCycleManager = this.dependencies().lifeCycleManager;\n // Get render details including arrangement and measurement\n const { components, layoutConfig, measurement } = getRenderDetails(this, mount);\n\n lifeCycleManager.notify({ client: this, action: 'beforedraw' });\n // Prepare the layout by triggering the matrix calculation\n prepareLayout(this.layout(), components, layoutConfig, measurement);\n // Render each component\n renderComponents(this, components, layoutConfig, measurement);\n // Update life cycle\n lifeCycleManager.notify({ client: this, action: 'drawn' });\n const promises = [];\n visGroup.matrixInstance().value.each((el) => {\n promises.push(el.valueOf().done());\n });\n Promise.all(promises).then(() => {\n this._renderedResolve();\n });\n }\n\n /**\n *\n *\n * @returns\n * @memberof Canvas\n */\n xAxes () {\n return this.composition().visualGroup.getAxes('x');\n }\n\n /**\n *\n *\n * @returns\n * @memberof Canvas\n */\n yAxes () {\n return this.composition().visualGroup.getAxes('y');\n }\n\n /**\n *\n *\n * @returns\n * @memberof Canvas\n */\n getRetinalAxes () {\n const visualGroup = this.composition().visualGroup;\n return visualGroup.getAxes(RETINAL);\n }\n}\n","import { cellRegistry, SimpleCell } from '@chartshq/visual-cell';\nimport { VisualUnit } from '@chartshq/visual-unit';\nimport { layerRegistry } from '@chartshq/visual-layer';\nimport { SimpleGroup, VisualGroup } from '@chartshq/visual-group';\n\nexport const COMPONENTS = {\n VisualGroup,\n VisualUnit\n};\nexport const SUBREGISTRIES = {\n cellRegistry,\n layerRegistry\n};\nexport const INTERFACES = {\n SimpleGroup,\n SimpleCell\n};\n\n","import { DEFAULT_LAYERS } from './defaults';\n\nexport default () => {\n const reg = DEFAULT_LAYERS;\n const regObj = {\n set: (key, def) => {\n reg[key] = def;\n return regObj;\n },\n get: () => reg\n };\n return regObj;\n};\n","import {\n transactor,\n Smartlabel,\n enableChainedTransaction,\n LifeCycleManager,\n DataModel,\n makeElement,\n getClientPoint,\n selectElement,\n getEvent,\n require,\n DateTimeFormatter\n} from 'muze-utils';\n\nimport {\n SurrogateSideEffect,\n SpawnableSideEffect,\n sideEffects,\n PersistentBehaviour,\n GenericBehaviour,\n VolatileBehaviour,\n behaviouralActions,\n GenericSideEffect\n} from '@chartshq/muze-firebolt';\nimport { layerFactory } from '@chartshq/visual-layer';\nimport pkg from '../package.json';\nimport * as operators from './operators';\nimport { actionModel as ActionModel } from './action-model';\nimport options from './options';\nimport { Canvas } from './canvas';\nimport { COMPONENTS, SUBREGISTRIES } from './default-registry';\nimport './muze.scss';\n\n// Cache singleton instances which should be included only once in a page\nconst globalCache = {};\nconst defaultRegistry = COMPONENTS;\n\nconst overrideRegistryDefinitions = (overrideRegistry, registry) => {\n for (const prop in overrideRegistry) {\n registry.set(prop, overrideRegistry[prop]);\n }\n};\n\n/**\n * Entry point to renderer. Initializes an environment with settings and registries for canvas. This is a simple wrapper\n * over {@link Canvas} which enables common configuration passing to multiple such canvases.\n *\n * Everytime `muze()` is called it creates an environment. These environment supports subset of APIs of Canvas. If\n * common configuration is used to render multiple canvases then it can be set directly in the env. Like if data is\n * common across all the visulization then its better to set the data in env. When a canvas is created it receives all\n * those configuration from env.\n *\n * ```\n * // Creates an environment\n * const env = muze()\n * // Set data property in environment, so that all the canvas created from the same environment gets this data\n * // automatically\n * env.data(dm);\n * // Creates canvas, by default env pushes data to canvas instance\n * const canvas = env.canvas();\n * ```\n *\n * If a property is set on both environment and canvas instance, property set on canvas instance gets more priority.\n *\n * @public\n * @module muze\n * @namespace Muze\n *\n * @return {Env} Instance of an environment\n */\nconst muze = () => {\n // Setters and getters will be mounted on this. Object will be mutated.\n const [env, globalStore] = transactor({}, options);\n const components = Object.assign({}, COMPONENTS);\n const componentSubRegistryDef = Object.assign(SUBREGISTRIES);\n const componentSubRegistry = {};\n\n for (const prop in componentSubRegistryDef) {\n componentSubRegistry[prop] = componentSubRegistryDef[prop]();\n }\n\n // Apart form the setter getter, an instance method is injected to create real renderer instances\n env.canvas = () => {\n // Create a canvas instance with this settings\n const settings = globalStore.serialize();\n const canvas = Canvas.withSettings(settings, { /* registry */\n components,\n componentSubRegistry\n }, env.globalDependencies());\n\n // Whenever settings is changed canvas is updated\n enableChainedTransaction(globalStore, canvas, Object.keys(settings));\n\n return canvas;\n };\n\n // Global dependencies for for compositions. Only one copy of the same should be in the page\n env.globalDependencies = () => {\n if (!globalCache.smartlabel) {\n globalCache.smartlabel = new Smartlabel(1, 'body');\n }\n return {\n smartlabel: globalCache.smartlabel,\n lifeCycleManager: new LifeCycleManager()\n };\n };\n\n // Retrieves global settings. This getter is readonly so that user can't change this as change should happen\n // only from setter to avoid unwanted sync issues.\n env.settings = () => globalStore.serialize();\n\n env.registry = (...overrideRegistry) => {\n // Selectively copy the properties from COMPONENTS\n if (overrideRegistry.length) {\n for (const prop in overrideRegistry) {\n if (prop in defaultRegistry) {\n components[prop] = overrideRegistry[prop];\n }\n }\n return env;\n }\n return components;\n };\n\n env.cellRegistry = (...overrideRegistry) => {\n const cellRegistry = componentSubRegistry.cellRegistry;\n if (overrideRegistry.length) {\n overrideRegistryDefinitions(overrideRegistry[0], cellRegistry);\n return env;\n }\n return cellRegistry.get();\n };\n\n env.layerRegistry = (...overrideRegistry) => {\n const layerRegistry = componentSubRegistry.layerRegistry;\n if (overrideRegistry.length) {\n overrideRegistryDefinitions(overrideRegistry[0], layerRegistry);\n return env;\n }\n return layerRegistry.get();\n };\n\n return env;\n};\n\nconst SideEffects = {\n sideEffects,\n standards: {\n SurrogateSideEffect,\n SpawnableSideEffect,\n GenericSideEffect\n }\n};\n\nconst Behaviours = {\n behaviouralActions,\n standards: {\n GenericBehaviour,\n PersistentBehaviour,\n VolatileBehaviour\n }\n};\n\nmuze.DataModel = DataModel;\nmuze.version = pkg.version;\nmuze.SideEffects = SideEffects;\nmuze.ActionModel = ActionModel;\nmuze.layerFactory = layerFactory;\nmuze.Operators = operators;\nmuze.Behaviours = Behaviours;\nmuze.utils = {\n getClientPoint,\n getEvent,\n makeElement,\n selectElement,\n DateTimeFormatter,\n require\n};\n\nexport default muze;\n"],"sourceRoot":""} \ No newline at end of file diff --git a/examples/index.html b/examples/index.html index 85af720e..02f4dcfb 100644 --- a/examples/index.html +++ b/examples/index.html @@ -120,7 +120,7 @@ .dotted-line { stroke-dasharray: 2,4; } - + /* .muze-tooltip-content-container { padding-left: 0px; padding-right: 0px; diff --git a/examples/js/sample.js b/examples/js/sample.js index 57f32b25..6362d1a4 100644 --- a/examples/js/sample.js +++ b/examples/js/sample.js @@ -50,13 +50,13 @@ d3.json('../data/cars.json', (data) => { { name: 'Year', type: 'dimension' - // subtype: 'temporal', - // format: '%Y-%m-%d' + // subtype: 'temporal', + // format: '%Y-%m-%d' } ]; const dataModel = new DataModel(jsonData, schema); - // Create a new variable which will keep count of cars per cylinder for a particular origin + // Create a new variable which will keep count of cars per cylinder for a particular origin const rootData = dataModel.calculateVariable( { name: 'CountVehicle', @@ -64,185 +64,228 @@ d3.json('../data/cars.json', (data) => { defAggFn: 'count', // When ever aggregation happens, it counts the number of elements in the bin numberFormat: val => parseInt(val, 10) }, - ['Name', () => 1] - ); + ['Name', () => 1] + ); - env = env.data(rootData).minUnitHeight(10).minUnitWidth(10); + env = env + .data(rootData) + .minUnitHeight(10) + .minUnitWidth(10); - const crosstab = env.canvas() - .rows(['Cylinders', 'Origin']) - .columns(['Miles_per_Gallon', 'Horsepower']) - .data(rootData) - .color('Origin') - .width(600) - .height(500) - .config({ - border: { - color: '#f6f6f6' - } - }) - .title('Avg Mileage of cars by Country faceted by Cylinders', { - align: 'center' - }) - .subtitle('Click on the bars to see how the charts in right gets filtered', { - align: 'center' - }) - .mount('#chart2'); - - const lineChart = env.canvas() - .rows(['Miles_per_Gallon']) - .columns(['Year']) - .data(rootData) - .width(400) - .height(300) - .config({ - axes: { - y: { - domain: [10, 50] - } - }, - border: { - color: '#f6f6f6' - }, - interaction: { - tooltip: { - formatter: (dm) => { - const valueMatrix = lineChart.composition() - .visualGroup.composition().matrices.value.matrix(); - const selectedLineLayer = valueMatrix[0][0].valueOf().getLayerByName('lineLayer'); - const selectedLineLayerData = selectedLineLayer.data(); - const fullData = dm.getData().data; - const fieldsConf = dm.getFieldsConfig(); - const yearIndex = fieldsConf.Year.index; - let selectedData; + const crosstab = env + .canvas() + .rows(['Cylinders', 'Origin']) + .columns(['Miles_per_Gallon', 'Horsepower']) + .data(rootData) + .color('Origin') + .width(600) + .height(500) + .config({ + border: { + color: '#f6f6f6' + } + }) + .title('Avg Mileage of cars by Country faceted by Cylinders', { + align: 'center' + }) + .subtitle( + 'Click on the bars to see how the charts in right gets filtered', + { + align: 'center' + } + ) + .mount('#chart2'); - if (selectedLineLayerData) { - selectedData = selectedLineLayerData.select(fields => - fullData.findIndex(d => d[yearIndex] === fields.Year.value) !== -1, { - saveChild: false - }); - } - const { DateTimeFormatter } = muze.utils; - const tooltipData = [ - [{ - value: 'Year', - className: 'muze-tooltip-key' - }, { - value: DateTimeFormatter.formatAs(fullData[0][yearIndex], '%Y'), - className: 'muze-tooltip-value' - }], - [{ - value: 'Miles_per_Gallon', - className: 'muze-tooltip-key' - }, { - value: fullData[0][fieldsConf.Miles_per_Gallon.index].toFixed(2), - className: 'muze-tooltip-value' - }] - ]; + const lineChart = env + .canvas() + .rows(['Miles_per_Gallon']) + .columns(['Year']) + .data(rootData) + .width(400) + .height(300) + .config({ + axes: { + y: { + domain: [10, 50] + } + }, + border: { + color: '#f6f6f6' + }, + interaction: { + tooltip: { + formatter: (dm) => { + const valueMatrix = lineChart + .composition() + .visualGroup.composition() + .matrices.value.matrix(); + const selectedLineLayer = valueMatrix[0][0] + .valueOf() + .getLayerByName('lineLayer'); + const selectedLineLayerData = selectedLineLayer.data(); + const fullData = dm.getData().data; + const fieldsConf = dm.getFieldsConfig(); + const yearIndex = fieldsConf.Year.index; + let selectedData; - if (selectedData && !selectedData.isEmpty()) { - const mpgData = selectedData.getData().data; - const mpgIndex = selectedData.getFieldsConfig().Miles_per_Gallon.index; - tooltipData.push([{ - value: 'Selected_Miles_per_Gallon', - className: 'muze-tooltip-key' - }, { - value: mpgData[0][mpgIndex].toFixed(2), - className: 'muze-tooltip-value' - }]); - } - return tooltipData; - } - } + if (selectedLineLayerData) { + selectedData = selectedLineLayerData.select( + fields => + fullData.findIndex( + d => d[yearIndex] === fields.Year.value + ) !== -1, + { + saveChild: false } - }) - .title('Change of Avg Mileage of Cars over 12 Years', { - align: 'center' - }) - .layers([{ - mark: 'line', - encoding: { - color: { - value: () => '#9e9e9e' - } + ); + } + const { DateTimeFormatter } = muze.utils; + const tooltipData = [ + [ + { + value: 'Year', + className: 'muze-tooltip-key' + }, + { + value: DateTimeFormatter.formatAs( + fullData[0][yearIndex], + '%Y' + ), + className: 'muze-tooltip-value' } - }]) - .mount('#chart'); - - const pieChart = env.canvas() - .rows([]) - .columns([]) - .data(rootData) - .width(300) - .height(300) - .layers([{ - mark: 'arc', - encoding: { - angle: 'CountVehicle' + ], + [ + { + value: 'Miles_per_Gallon', + className: 'muze-tooltip-key' + }, + { + value: fullData[0][fieldsConf.Miles_per_Gallon.index].toFixed(2), + className: 'muze-tooltip-value' } - }]) - .config({ legend: { position: 'bottom' } }) - .color('Origin') - .title('Count of Cars by Country', { - align: 'center' - }) - .mount('#chart4'); + ] + ]; - muze.ActionModel.for(crosstab, lineChart, pieChart).enableCrossInteractivity({ - behaviours: { - // Disable all behaviours if any propagation is initiated from pie chart. - '*': (propagationPayload, context) => { - const sourcePropagationCanvas = propagationPayload.sourceCanvas; - const sourceCanvas = context.parentAlias(); - if (sourcePropagationCanvas) { - return sourceCanvas !== sourcePropagationCanvas ? - [lineChart.alias()] - .indexOf(sourcePropagationCanvas) === -1 : - true; + if (selectedData && !selectedData.isEmpty()) { + const mpgData = selectedData.getData().data; + const mpgIndex = selectedData.getFieldsConfig().Miles_per_Gallon + .index; + tooltipData.push([ + { + value: 'Selected_Miles_per_Gallon', + className: 'muze-tooltip-key' + }, + { + value: mpgData[0][mpgIndex].toFixed(2), + className: 'muze-tooltip-value' + } + ]); + } + return tooltipData; } - return true; } - }, - sideEffects: { - // Disable tooltip on propagation - tooltip: () => false } }) + .title('Change of Avg Mileage of Cars over 12 Years', { + align: 'center' + }) + .layers([ + { + mark: 'line', + encoding: { + color: { + value: () => '#9e9e9e' + } + } + } + ]) + .mount('#chart'); + + const pieChart = env + .canvas() + .rows([]) + .columns([]) + .data(rootData) + .width(300) + .height(300) + .layers([ + { + mark: 'arc', + encoding: { + angle: 'CountVehicle' + } + } + ]) + .config({ legend: { position: 'bottom' } }) + .color('Origin') + .title('Count of Cars by Country', { + align: 'center' + }) + .mount('#chart4'); + + muze.ActionModel.for(crosstab, lineChart, pieChart) + .enableCrossInteractivity({ + behaviours: { + // Disable all behaviours if any propagation is initiated from pie chart. + '*': (propagationPayload, context) => { + const sourcePropagationCanvas = propagationPayload.sourceCanvas; + const sourceCanvas = context.parentAlias(); + if (sourcePropagationCanvas) { + return sourceCanvas !== sourcePropagationCanvas + ? [lineChart.alias()].indexOf(sourcePropagationCanvas) === -1 + : true; + } + return true; + } + }, + sideEffects: { + // Disable tooltip on propagation + tooltip: () => false + } + }) .for(crosstab, pieChart) .registerPropagationBehaviourMap({ select: 'filter' }) - .for(lineChart).registerSideEffects(class NewSideEffect extends SpawnableSideEffect { - constructor (...params) { - super(...params); - this._layers = this.firebolt.context.addLayer({ - name: 'lineLayer', - mark: 'line', - className: 'linelayer', - encoding: { - x: 'Year', - y: 'Miles_per_Gallon', - color: { - value: () => '#414141' - } - }, - render: false - }); - } + .for(lineChart) + .registerSideEffects( + class NewSideEffect extends SpawnableSideEffect { + constructor (...params) { + super(...params); + this._layers = this.firebolt.context.addLayer({ + name: 'lineLayer', + mark: 'line', + className: 'linelayer', + encoding: { + x: 'Year', + y: 'Miles_per_Gallon', + color: { + value: () => '#414141' + } + }, + render: false + }); + } - static formalName () { - return 'lineLayer'; - } + static formalName () { + return 'lineLayer'; + } - apply (selectionSet) { - const { sideEffectGroup } = this.drawingContext(); - const layerGroups = this.createElement(sideEffectGroup, 'g', this._layers, '.extra-layers'); - layerGroups.each(function (layer) { - layer.mount(this).data(selectionSet.mergedEnter.model); - }); - } - }) + apply (selectionSet) { + const { sideEffectGroup } = this.drawingContext(); + const layerGroups = this.createElement( + sideEffectGroup, + 'g', + this._layers, + '.extra-layers' + ); + layerGroups.each(function (layer) { + layer.mount(this).data(selectionSet.mergedEnter.model); + }); + } + } + ) .mapSideEffects({ filter: { effects: ['lineLayer'], diff --git a/packages/layout/src/grid-layout/renderer.js b/packages/layout/src/grid-layout/renderer.js index 645ff508..dd6823cc 100644 --- a/packages/layout/src/grid-layout/renderer.js +++ b/packages/layout/src/grid-layout/renderer.js @@ -17,7 +17,7 @@ function renderTable (mount, className, rowData) { const table = makeElement(mount, 'table', ['layout'], `${className}-table`); const body = makeElement(table, 'tbody', ['layout'], `${className}-body`); const rows = makeElement(body, 'tr', rowData, `${className}-tr`); - const cells = makeElement(rows, 'td', (d, i) => d.filter(e => e !== null).map(e => + const cells = makeElement(rows, 'td', (d, i) => d.filter(e => e !== null && e.config().show).map(e => ({ placeholder: e, rowIndex: i })), `${className}-td`, {}, key => key.placeholder.id); return { table, body, rows, cells }; diff --git a/packages/muze/npm/dist/muze.js b/packages/muze/npm/dist/muze.js index 0030fd46..79814fb1 100644 --- a/packages/muze/npm/dist/muze.js +++ b/packages/muze/npm/dist/muze.js @@ -1,2 +1,2 @@ -!function webpackUniversalModuleDefinition(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define("muze",[],t):"object"==typeof exports?exports.muze=t():e.muze=t()}(window,function(){return function(e){var t={};function __webpack_require__(n){if(t[n])return t[n].exports;var r=t[n]={i:n,l:!1,exports:{}};return e[n].call(r.exports,r,r.exports,__webpack_require__),r.l=!0,r.exports}return __webpack_require__.m=e,__webpack_require__.c=t,__webpack_require__.d=function(e,t,n){__webpack_require__.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},__webpack_require__.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},__webpack_require__.t=function(e,t){if(1&t&&(e=__webpack_require__(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(__webpack_require__.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var r in e)__webpack_require__.d(n,r,function(t){return e[t]}.bind(null,r));return n},__webpack_require__.n=function(e){var t=e&&e.__esModule?function getDefault(){return e.default}:function getModuleExports(){return e};return __webpack_require__.d(t,"a",t),t},__webpack_require__.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},__webpack_require__.p="",__webpack_require__(__webpack_require__.s=7)}([function(e,t,n){(function(e){var r,i,a,o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};!function(n,u){"object"==o(t)&&"object"==o(e)?e.exports=u():(i=[],void 0===(a="function"==typeof(r=u)?r.apply(t,i):r)||(e.exports=a))}(window,function(){return function(e){var t={};function n(r){if(t[r])return t[r].exports;var i=t[r]={i:r,l:!1,exports:{}};return e[r].call(i.exports,i,i.exports,n),i.l=!0,i.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==(void 0===e?"undefined":o(e))&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var i in e)n.d(r,i,function(t){return e[t]}.bind(null,i));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=1)}([function(e){e.exports={name:"datamodel",description:"Relational algebra compliant in-memory tabular data store",homepage:"https://github.com/chartshq/datamodel",version:"2.0.2",license:"MIT",main:"dist/datamodel.js",author:"Charts.com ",keywords:["datamodel","data","relational","algebra","model","muze","fusioncharts","table","tabular","operation"],repository:{type:"git",url:"https://github.com/chartshq/datamodel.git"},contributors:[{name:"Akash Goswami",email:"akash@charts.com"},{name:"Subhash Haldar",email:"subhash@charts.com"},{name:"Rousan Ali",email:"rousan@charts.com",url:"https://rousan.io"},{name:"Ujjal Kumar Dutta",email:"ujjal@charts.com"}],dependencies:{"d3-dsv":"^1.0.8"},devDependencies:{"babel-cli":"6.26.0","babel-core":"^6.26.3","babel-eslint":"6.1.2","babel-loader":"^7.1.4","babel-plugin-transform-runtime":"^6.23.0","babel-preset-env":"^1.7.0","babel-preset-es2015":"^6.24.1","babel-preset-flow":"^6.23.0",chai:"3.5.0","cross-env":"^5.0.5",eslint:"3.19.0","eslint-config-airbnb":"15.1.0","eslint-plugin-import":"2.7.0","eslint-plugin-jsx-a11y":"5.1.1","eslint-plugin-react":"7.3.0","istanbul-instrumenter-loader":"^3.0.0",jsdoc:"3.5.5",json2yaml:"^1.1.0",karma:"1.7.1","karma-chai":"0.1.0","karma-chrome-launcher":"2.1.1","karma-coverage-istanbul-reporter":"^1.3.0","karma-mocha":"1.3.0","karma-spec-reporter":"0.0.31","karma-webpack":"2.0.3",marked:"^0.5.0",mocha:"3.4.2","mocha-webpack":"0.7.0","transform-runtime":"0.0.0",webpack:"^4.12.0","webpack-cli":"^3.0.7","webpack-dev-server":"^3.1.4"},scripts:{test:"npm run lint && npm run ut",ut:"karma start karma.conf.js",utd:"karma start --single-run false --browsers Chrome karma.conf.js ",build:"webpack --mode production",start:"webpack-dev-server --config webpack.config.dev.js --mode development --open",lint:"eslint ./src","lint-errors":"eslint --quiet ./src",docs:"rm -rf yaml && mkdir yaml && jsdoc -c jsdoc.conf.json"}}},function(e,t,n){var r=n(2);e.exports=r.default?r.default:r},function(n,c,f){"use strict";f.r(c);var p={};f.r(p),f.d(p,"DataFormat",function(){return b}),f.d(p,"DimensionSubtype",function(){return _}),f.d(p,"MeasureSubtype",function(){return C}),f.d(p,"FieldType",function(){return P}),f.d(p,"FilteringMode",function(){return A});var y={};f.r(y),f.d(y,"DSVArr",function(){return Je}),f.d(y,"DSVStr",function(){return lt}),f.d(y,"FlatJSON",function(){return ft}),f.d(y,"Auto",function(){return ht});var g={};f.r(g),f.d(g,"sum",function(){return Et}),f.d(g,"avg",function(){return Mt}),f.d(g,"min",function(){return Ot}),f.d(g,"max",function(){return Tt}),f.d(g,"first",function(){return Ft}),f.d(g,"last",function(){return Nt}),f.d(g,"count",function(){return jt}),f.d(g,"sd",function(){return It});var b={FLAT_JSON:"FlatJSON",DSV_STR:"DSVStr",DSV_ARR:"DSVArr",AUTO:"Auto"},_={CATEGORICAL:"categorical",TEMPORAL:"temporal",GEO:"geo"},C={DISCRETE:"discrete"},P={MEASURE:"measure",DIMENSION:"dimension"},A={NORMAL:"normal",INVERSE:"inverse",ALL:"all"};function l(e,t){e.length>0&&e.split(",").forEach(function(e){var n=e.split("-"),r=+n[0],i=+(n[1]||n[0]);if(i>=r)for(var a=r;a<=i;a+=1)t(a)})}var O=function(){function e(e,t){for(var n=0;n=0;)o=e[a+1],-1!==r.indexOf(o)&&i.push({index:a,token:o});return i},m.formatAs=function(e,t){var n,r=h(e),i=m.findTokens(t),a=m.getTokenDefinitions(),o=String(t),u=m.TOKEN_PREFIX,c=void 0,s=void 0,l=void 0;for(l=0,n=i.length;l=0;h--)(s=a[h].index)+1!==f.length-1?(void 0===u&&(u=f.length),l=f.substring(s+2,u),f=f.substring(0,s+2)+RegExp.escape(l)+f.substring(u,f.length),u=s):u=s;for(h=0;h1){r=Math.abs(n[1]-n[0]);for(var i=2,a=n.length;i3&&void 0!==arguments[3]&&arguments[3],i=arguments.length>4&&void 0!==arguments[4]?arguments[4]:ye.CROSS,a=[],o=[],u=n||K,c=e.getFieldspace(),s=t.getFieldspace(),f=c.name,h=s.name,d=c.name+"."+s.name,p=L(c,s);if(f===h)throw new Error("DataModels must have different alias names");return c.fields.forEach(function(e){var t=E({},e.schema);-1===p.indexOf(t.name)||r||(t.name=c.name+"."+t.name),a.push(t)}),s.fields.forEach(function(e){var t=E({},e.schema);-1!==p.indexOf(t.name)?r||(t.name=s.name+"."+t.name,a.push(t)):a.push(t)}),l(e._rowDiffset,function(e){var n=!1,d=void 0;l(t._rowDiffset,function(t){var l=[],y={};y[f]={},y[h]={},c.fields.forEach(function(t){l.push(t.data[e]),y[f][t.name]=t.data[e]}),s.fields.forEach(function(e){-1!==p.indexOf(e.schema.name)&&r||l.push(e.data[t]),y[h][e.name]=e.data[t]});var g=Ke(y[f]),v=Ke(y[h]);if(u(g,v)){var m={};l.forEach(function(e,t){m[a[t].name]=e}),n&&ye.CROSS!==i?o[d]=m:(o.push(m),n=!0,d=e)}else if((i===ye.LEFTOUTER||i===ye.RIGHTOUTER)&&!n){var b={},_=c.fields.length-1;l.forEach(function(e,t){b[a[t].name]=t<=_?e:null}),n=!0,d=e,o.push(b)}})}),new At(o,a,{name:d})}function z(e,t){var n=""+e,r=""+t;return nr?1:0}function X(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:z;return e.length>1&&function e(t,n,r,i){if(r===n)return t;var a=n+Math.floor((r-n)/2);return e(t,n,a,i),e(t,a+1,r,i),function(e,t,n,r,i){for(var a=e,o=[],u=t;u<=r;u+=1)o[u]=a[u];for(var c=t,s=n+1,l=t;l<=r;l+=1)c>n?(a[l]=o[s],s+=1):s>r?(a[l]=o[c],c+=1):i(o[c],o[s])<=0?(a[l]=o[c],c+=1):(a[l]=o[s],s+=1)}(t,n,a,r,i),t}(e,0,e.length-1,t),e}function Q(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);to?"desc"===t?-1:1:0}}return i}function Z(e,t){var n=new Map,r=[];return e.forEach(function(e){var i=e[t];n.has(i)?r[n.get(i)][1].push(e):(r.push([i,[e]]),n.set(i,r.length-1))}),r}function ee(e,t,n){var r={label:e[0]};return t.reduce(function(t,r,i){return t[r]=e[1].map(function(e){return e[n[i].index]}),t},r),r}function ne(e,t){var n={},r=[],i=[],a=[],o=e.getFieldspace(),u=t.getFieldspace(),c=o.fieldsObj(),s=u.fieldsObj(),f=o.name+" union "+u.name;if(!M(e._colIdentifier.split(",").sort(),t._colIdentifier.split(",").sort()))return null;function d(e,t,r){l(e._rowDiffset,function(e){var o={},u="";i.forEach(function(n){var r=t[n].data[e];u+="-"+r,o[n]=r}),n[u]||(r&&a.push(o),n[u]=!0)})}return e._colIdentifier.split(",").forEach(function(e){var t=c[e];r.push(E({},t.schema)),i.push(t.schema.name)}),d(t,s,!1),d(e,c,!0),new At(a,r,{name:f})}function re(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);tn&&(n=e)}),[t,n]}(this.data)}},{key:"parse",value:function value(e){return e=parseFloat(e,10),Number.isNaN(e)?null:e}},{key:"unit",value:function value(){return this.fieldUnit}},{key:"scale",value:function value(){return this.fieldScale}},{key:"numberFormat",value:function value(){var e=this.fieldNumberformat;return function(t){return e(t)}}},{key:"defAggFn",value:function value(){return this.fieldDefAggFn}}]),t}(),Ee=function(){function e(e,t){for(var n=0;n=a?c=!0:(r=e.charCodeAt(o++))===at?l=!0:r===ot&&(l=!0,e.charCodeAt(o)===at&&++o),e.slice(i+1,t-1).replace(/""/g,'"')}for(;o2&&void 0!==arguments[2]?arguments[2]:{},i=arguments[3],a=void 0;t!==fe?(a={op:t,meta:r,criteria:i},e._derivation.push(a)):(a=[].concat(Ge(i)),e._derivation.length=0,(n=e._derivation).push.apply(n,Ge(a)))},yt=function ze(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=n.operation||"and",i=n.filterByMeasure||!1,a=[];a=t.length?t.map(function(e){return function(e){var t=e.getData(),n=t.schema,r=e.getFieldsConfig(),a=e.getFieldspace().fieldsObj(),o=t.data,u=Object.values(r).reduce(function(e,t){return e[t.def.name]=a[t.def.name].domain(),e},{});return function(e){return!!o.length&&o.some(function(t){return n.every(function(n){if(!(n.name in e))return!0;var a=e[n.name].valueOf();if(i&&n.type===P.MEASURE)return a>=u[n.name][0]&&a<=u[n.name][1];if(n.type!==P.DIMENSION)return!0;var o=r[n.name].index;return t[o]===e[n.name].valueOf()})})}}(e)}):[function(){return!1}];return"and"===r?e.clone(!1,!1).select(function(e){return a.every(function(t){return t(e)})},{saveChild:!1,mode:A.ALL}):e.clone(!1,!1).select(function(e){return a.some(function(t){return t(e)})},{mode:A.ALL,saveChild:!1})},gt=function Xe(e,t,n,r){var i=e.clone(r.saveChild),a=function(e,t,n,r){var i=[],a=-1,o=void 0,c=function u(e){return n(qe(t,e),e)};return r.mode===A.INVERSE&&(c=function u(e){return!n(qe(t,e))}),l(e,function(e){c(e)&&(-1!==a&&e===a+1?(o=i.length-1,i[o]=i[o].split("-")[0]+"-"+e):i.push(""+e),a=e)}),i.join(",")}(i._rowDiffset,i.getPartialFieldspace().fields,t,n);return i._rowDiffset=a,i.__calculateFieldspace().calculateFieldsConfig(),r.saveChild&&pt(i,ce,{config:n},t),i},vt=function Qe(e,t,n,r){var i=e.clone(n.saveChild),a=t;return n.mode===A.INVERSE&&(a=r.filter(function(e){return-1===t.indexOf(e)})),i._colIdentifier=a.join(","),i.__calculateFieldspace().calculateFieldsConfig(),n.saveChild&&pt(i,se,{projField:t,config:n,actualProjField:a},null),i},mt=function $e(e,t,n,r){r=Object.assign(Object.assign({},Ze),r);var i=y[r.dataFormat];if(!i||"function"!=typeof i)throw new Error("No converter function found for "+r.dataFormat+" format");var a=i(t,r),o=dt(a,2),u=o[0],c=o[1],s=Ue(c,n,u),l=Y.createNamespace(s,r.name);return e._partialFieldspace=l,e._rowDiffset=c.length&&c[0].length?"0-"+(c[0].length-1):"",e._colIdentifier=n.map(function(e){return e.name}).join(),e},bt=function Ze(e,t){for(var n=0;n2&&void 0!==arguments[2]?arguments[2]:{},i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},a=i.nonTraversingModel,o=i.excludeModels||[];t!==a&&((!o.length||-1===o.indexOf(t))&&t.handlePropagation(n,r),t._children.forEach(function(t){var a=_t(n,t),o=dt(a,2),u=o[0],c=o[1];e(t,[u,c],r,i)}))},wt=function nt(e,t,n,r){var i=void 0,a=void 0,o=n.propagationNameSpace,u=n.propagateToSource,c=n.sourceId,s=r.propagateInterpolatedValues,l=[];if(null===e&&!0!==r.persistent)l=[{criteria:[]}];else{var f,h=Object.values(o.mutableActions);!1!==u&&(h=h.filter(function(e){return e.config.sourceId!==c}));var d=h.filter(function(e){return(r.filterFn||function(){return!0})(e,r)}).map(function(e){return e.config.criteria}),p=[];if(!1!==u){var y=Object.values(o.mutableActions);y.forEach(function(e){var t=e.config;!1===t.applyOnSource&&t.action===r.action&&t.sourceId!==c&&(p.push(e.model),(i=y.filter(function(t){return t!==e}).map(function(e){return e.config.criteria})).length&&l.push({criteria:i,models:e.model,path:function e(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];return null!==t._parent&&(n.push(t),e(t._parent,n)),n}(e.model)}))})}i=(f=[]).concat.apply(f,[].concat(Ge(d),[e])).filter(function(e){return null!==e}),l.push({criteria:i,excludeModels:[].concat(p,Ge(r.excludeModels||[]))})}var g=t.model,v=Object.assign({sourceIdentifiers:e,propagationSourceId:c},r),m=t.groupByModel;s&&m&&(a=yt(m,i,{filterByMeasure:s}),xt(m,a,v)),l.forEach(function(e){var t=yt(g,e.criteria),n=e.path;if(n){var r=function(e,t){for(var n=0,r=t.length;n0&&void 0!==arguments[0])||arguments[0],t=void 0;if(!1===(!(arguments.length>1&&void 0!==arguments[1])||arguments[1])){var n=this.getData({getAllFields:!0}),r=n.data,i=n.schema,a=r.map(function(e){var t={};return i.forEach(function(n,r){t[n.name]=e[r]}),t});t=new this.constructor(a,i)}else t=new this.constructor(this);return e&&this._children.push(t),t}},{key:"project",value:function value(e,t){var n={mode:A.NORMAL,saveChild:!0};t=Object.assign({},n,t);var r=this.getFieldsConfig(),i=Object.keys(r),a=t.mode,o=e.reduce(function(e,t){return"RegExp"===t.constructor.name?e.push.apply(e,function(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t1&&void 0!==arguments[1]?arguments[1]:[];pt(this,fe,null,t),this._parent=e,e._children.push(this)}}]),e}(),St=function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function(e,t){var n=[],r=!0,i=!1,a=void 0;try{for(var o,u=e[Symbol.iterator]();!(r=(o=u.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){i=!0,a=e}finally{try{!r&&u.return&&u.return()}finally{if(i)throw a}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")},Pt=function(){function e(e,t){for(var n=0;n0,c=[];if(n.split(",").forEach(function(t){for(var n=0;n=0;u--)i=t[u][0],a=t[u][1],(o=bt(r,i))&&(S(a)?X(n,function(e,t){return a(e[o.index],t[o.index])}):j(a)?function(){var e=Z(n,o.index),t=a[a.length-1],i=a.slice(0,a.length-1),u=i.map(function(e){return bt(r,e)});e.forEach(function(e){e.push(ee(e,i,u))}),X(e,function(e,n){var r=e[2],i=n[2];return t(r,i)}),n.length=0,e.forEach(function(e){n.push.apply(n,Q(e[1]))})}():(a="desc"===String(a).toLowerCase()?"desc":"asc",X(n,$(o.type,a,o.index))));e.uids=[],n.forEach(function(t){e.uids.push(t.pop())})}(a,r),i.columnWise){var s=Array.apply(void 0,Q(Array(a.schema.length))).map(function(){return[]});a.data.forEach(function(e){e.forEach(function(e,t){s[t].push(e)})}),a.data=s}return a}.call(this,this.getPartialFieldspace().fields,this._rowDiffset,e.getAllFields?t.map(function(e){return e.name}).join():this._colIdentifier,e.sort,{columnWise:"column"===e.order,addUid:!!e.withUid});if(!e.formatter)return n;var r=e.formatter,i=n.data,a=n.schema,o=n.uids,u=a.map(function(e){return e.name}),c=Object.keys(r).reduce(function(e,t){var n=u.indexOf(t);return-1!==n&&e.push([n,r[t]]),e},[]);return"column"===e.order?c.forEach(function(e){var t=e[0],n=e[1];i[t].forEach(function(e,r){i[t][r]=n.call(void 0,e,o[r],a[t])})}):i.forEach(function(e,t){c.forEach(function(n){var r=n[0],i=n[1];e[r]=i.call(void 0,e[r],o[t],a[r])})}),n}},{key:"groupBy",value:function value(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{saveChild:!0},r=""+e.join(),i=function de(e,t,n,r){var i=function(e,t){var n=[],r=e.getPartialFieldspace(),i=r.getDimension(),a=r.getMeasure();return Object.entries(i).forEach(function(e){var r=ke(e,1)[0];t&&t.length?-1!==t.indexOf(r)&&n.push(r):n.push(r)}),Object.entries(a).forEach(function(e){var r=ke(e,1)[0];"discrete"===a[r].subType()&&(t&&t.length?-1!==t.indexOf(r)&&n.push(r):n.push(r))}),n}(e,t),a=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n={},r=t,i=e.getPartialFieldspace().getMeasure(),a=we.defaultReducer();return"function"==typeof t&&(a=t),Object.entries(i).forEach(function(e){var o=ke(e,1)[0];"string"==typeof t[o]&&(r[o]=we.resolve(r[o])?we.resolve(r[o]):a),"function"!=typeof t[o]&&(r[o]=void 0),n[o]=r[o]||we.resolve(i[o].defAggFn())||a}),n}(e,n),o=e.getPartialFieldspace(),u=o.fieldsObj(),c=o.name,s=[],f=[],h=[],d={},p=[],y=void 0;Object.entries(u).forEach(function(e){var t=ke(e,2),n=t[0],r=t[1];(-1!==i.indexOf(n)||a[n])&&(h.push(E({},r.schema)),"measure"===r.schema.type&&"discrete"!==r.schema.subtype?f.push(n):"dimension"!==r.schema.type&&"discrete"!==r.schema.subtype||s.push(n))});var g=0;return l(e._rowDiffset,function(e){var t="";s.forEach(function(n){t=t+"-"+u[n].data[e]}),void 0===d[t]?(d[t]=g,p.push({}),s.forEach(function(t){p[g][t]=u[t].data[e]}),f.forEach(function(t){p[g][t]=[u[t].data[e]]}),g+=1):f.forEach(function(n){p[d[t]][n].push(u[n].data[e])})}),p.forEach(function(e){var t=e;f.forEach(function(n){t[n]=a[n](e[n])})}),r?(r.__calculateFieldspace(),y=r):y=new Lt(p,h,{name:c}),y}.apply(void 0,[this,e,t]);return n.saveChild&&(this._children.push(i),pt(i,le,{fieldsArr:e,groupByString:r,defaultReducer:we.defaultReducer()},t)),i._parent=this,i}},{key:"sort",value:function value(e){var t=this.getData({order:"row",sort:e}),n=[t.schema.map(function(e){return e.name})].concat(t.data),r=new this.constructor(n,t.schema,{dataFormat:"DSVArr"});return r._sortingDetails=e,r}},{key:"addField",value:function value(e){var t=e.fieldName();this._colIdentifier+=","+t;var n=this._partialFieldspace;if(n.fieldsObj()[e.fieldName()]){var r=n.fields.findIndex(function(e){return e.name===t});r>=0&&(n.fields[r]=e)}else n.fields.push(e);return this.__calculateFieldspace().calculateFieldsConfig(),this}},{key:"calculateVariable",value:function value(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{saveChild:!0,replaceVar:!1},r=this.getFieldsConfig(),i=t.slice(0,t.length-1),a=t[t.length-1];if(r[e.name]&&!n.replaceVar)throw new Error(e.name+" field already exists in model.");var o=i.map(function(e){var t=r[e];if(!t)throw new Error(e+" is not a valid column name.");return t.index}),u=this.clone(),c=u.getFieldspace().fields,s=o.map(function(e){return c[e]}),f=[];l(u._rowDiffset,function(e){var t=s.map(function(t){return t.data[e]});f[e]=a.apply(void 0,function(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t1&&void 0!==arguments[1]?arguments[1]:{},n=arguments[2],r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},i=t.isMutableAction,a=t.sourceId,o=t.payload,u=function e(t){return t._parent?e(t._parent):t}(this),c=u._propagationNameSpace,s={groupByModel:function e(t){return t._parent&&t._derivation.find(function(e){return"group"!==e.op})?e(t._parent):t}(this),model:u};return n&&function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments[2],r=void 0,i=t.isMutableAction,a=t.criteria,o=t.action+"-"+t.sourceId;r=i?e.mutableActions:e.immutableActions,null===a?delete r[o]:r[o]={model:n,config:t}}(c,t,this),wt(e,s,{propagationNameSpace:c,sourceId:a},Object.assign({payload:o},t)),i&&function(e,t,n){var r=e.immutableActions;for(var i in r){var a=r[i].config,o=n.config.sourceId,u=!n.propConfig.filterImmutableAction||n.propConfig.filterImmutableAction(a,n.config);if(a.sourceId!==o&&u){var c=a.criteria;wt(c,t,{propagationNameSpace:e,propagateToSource:!1,sourceId:o},a)}}}(c,s,{config:t,propConfig:r}),this}},{key:"on",value:function value(e,t){switch(e){case"propagation":this._onPropagation.push(t)}return this}},{key:"unsubscribe",value:function value(e){switch(e){case"propagation":this._onPropagation=[]}return this}},{key:"handlePropagation",value:function value(e,t){var n=this;this._onPropagation.forEach(function(r){return r.call(n,e,t)})}},{key:"bin",value:function value(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=this.clone(),r=t.name||e+"_binned";if(this.getFieldsConfig()[r]||!this.getFieldsConfig()[e])throw new Error("Field "+e+" already exists.");var i=function I(e,t,n){var r=n.buckets,i=n.binCount,a=n.binSize,o=n.start,u=[],c=[],s=e.domain(),f=ue(s,2),h=f[0],d=f[1],p=d,y=[],g=void 0,v=void 0,m=void 0,b=void 0;if(l(t,function(t){u.push({data:e.data[t],index:t})}),!r){var _=((d+=1)-h)%(a=a||(d-h)/i);for(i||0===_||(d=d+a-_),g=h+a;g<=d;)y.push(g),g+=a;r={start:o=o||h,stops:y}}v=0===r.start?0:r.start||h,r.stops.forEach(function(e){u.filter(function(t){return t.data>=v&&t.data=r.stops[r.stops.length-1]}).forEach(function(e){c[e.index]=r.stops[r.stops.length-1]+"-"+p}),r.stops.unshift(r.start),b=new Set(r.stops),hr.stops[r.stops.length-1]&&b.add(p),b=[].concat(function(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t1&&void 0!==arguments[1]?arguments[1]:{saveChild:!0}).saveChild;return t.forEach(function(e){n=e(n),i.push.apply(i,function(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t1&&r.dispose(),n}},bin:function bin(){for(var e=arguments.length,t=Array(e),n=0;n2?(i=arguments.length<=0?void 0:arguments[0],r=arguments.length<=1?void 0:arguments[1],a=arguments.length<=2?void 0:arguments[2]):(i=null,r=arguments.length<=0?void 0:arguments[0],a=arguments.length<=1?void 0:arguments[1]),t=a(w),(e=n=new A(t.fn)).addDependencies.apply(e,P(t.dependencies)),this._addPropInModel(i,function(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}({},r,n)),this}},{key:"_addPropInModel",value:function value(e,t){return this._graph.createNodesFrom(t,e),this}},{key:"on",value:function value(e,t,n){var r,i=e instanceof Array?e:[e],a=this._graph.createElectricNodeOf(i,{type:"CurrFrame",fn:t});return n&&(r=this._graph.stopPropagation().setPropagationOverride("nextFrame")).resetNodeValue.apply(r,P(e)),a}},{key:"next",value:function value(e,t,n){var r,i=e instanceof Array?e:[e],a=this._graph.createElectricNodeOf(i,{type:"NextFrame",fn:t});return n&&(r=this._graph.stopPropagation().setPropagationOverride("currentFrame")).resetNodeValue.apply(r,P(e)),a}},{key:"lock",value:function value(){return this._lockFlag=!0,this._reqQ.length=0,this}},{key:"unlock",value:function value(){return this._lockFlag=!1,this.setProp.apply(this,P(this._reqQ)),this._reqQ.length=0,this}},{key:"prop",value:function value(){var e,t=void 0,n=void 0;switch(e=arguments.length){case 1:t=arguments.length<=0?void 0:arguments[0];break;case 2:t=arguments.length<=0?void 0:arguments[0],n=arguments.length<=1?void 0:arguments[1];break;default:return this}return 2===e?(this._lockFlag?this._reqQ.push([t,n]):this.setProp([t,n]),this):this._graph.getNodeValue(t)}},{key:"setProp",value:function value(){for(var e,t=this,n=arguments.length,r=Array(n),i=0;i/gi),e},SmartLabelManager.store={},SmartLabelManager.prototype._calCharDimWithCache=function(e,t,n){if(!this._init)return!1;var r,i,a,o,u,c,s=this.options.maxCacheLimit,l=this._container,h=this.style||{},d=this._advancedCache||(this._advancedCache={}),p=this._advancedCacheKey||(this._advancedCacheKey=[]),y=e+(h.fontSize||"")+(h.fontFamily||"")+(h.fontWeight||"")+(h.fontStyle||""),g=e+"init"+(h.fontSize||"")+(h.fontFamily||"")+(h.fontWeight||"")+(h.fontStyle||"");return f[e]&&(e=f[e]),t?void 0===(c=d[g])&&(l.innerHTML=e.repeat?e.repeat(n):Array(n+1).join(e),a=l.offsetWidth,l.innerHTML=e,o=l.offsetWidth,c=d[g]=(a-n*o)/(n+1),p.push(g),p.length>s&&delete d[p.shift()]):c=0,(u=d[y])?(i=u.split(","),{width:parseFloat(i[0],10),height:parseFloat(i[1],10)}):(l.innerHTML=e,r={height:l.offsetHeight,width:l.offsetWidth+c},d[y]=r.width+","+r.height,p.push(y),p.length>s&&delete d[p.shift()],r)},SmartLabelManager.prototype._getWidthFn=function(){var e=this._containerObj,t=this._container,n=e.svgText;return n?function(e){var t,r;return n.textContent=e,(r=(t=n.getBBox()).width-d)<1&&(r=t.width),r}:function(e){return t.innerHTML=e,t.offsetWidth}},SmartLabelManager.prototype.setStyle=function(e){return this._init?e!==this.style||this._styleNotSet?(e||(e=this.style),o.setLineHeight(e),this.style=e,this._containerObj=t=this._containerManager.get(e),this._containerObj?(this._container=t.node,this._context=t.context,this._cache=t.charCache,this._lineHeight=t.lineHeight,this._styleNotSet=!1):this._styleNotSet=!0,this):void 0:this;var t},SmartLabelManager.prototype.useEllipsesOnOverflow=function(e){return this._init?(this._showNoEllipses=!e,this):this},SmartLabelManager.prototype.getSmartText=function(e,t,n,r){if(!this._init)return!1;void 0===e||null===e?e="":"string"!=typeof e&&(e=e.toString());var i,a,c,l,f,d,p,y,g,v,m,b,_,x,w,k,C,S,P,A,E,M,O,T,F,N,j=!1,I=0,D=-1,L=-1,R=-1,B=0,z=0,H=[],V=0,U=this._showNoEllipses?"":"...",W=this._lineHeight,q=this._context,G=this._container,Y=this._containerObj,X=Y.ellipsesWidth,K=Y.dotWidth,$=[],Q=-1,Z=-1,J=-1,ee=function fastTrim(e){for(var t=/\s/,n=(e=e.replace(/^\s\s*/,"")).length;t.test(e.charAt(n-=1)););return e.slice(0,n+1)},te={text:e,maxWidth:t,maxHeight:n,width:null,height:null,oriTextWidth:null,oriTextHeight:null,oriText:e,isTruncated:!1};if(b=this._getWidthFn(),n===W&&(n*=1.2),G){if(!h.isBrowserLess){if((j=o.xmlTagRegEx.test(e))?(G.innerHTML=e,te.oriTextWidth=p=G.offsetWidth,te.oriTextHeight=y=G.offsetHeight):(l=e.replace(o.ltgtRegex,function(e){return"<"===e?"<":">"}),w=this.getOriSize(l,!0),te.oriTextWidth=p=w.width,te.oriTextHeight=y=w.height),y<=n&&p<=t)return te.width=te.oriTextWidth=p,te.height=te.oriTextHeight=y,te;if(W>n)return te.text="",te.width=te.oriTextWidth=0,te.height=te.oriTextHeight=0,te}if(e=ee(e).replace(/(\s+)/g," "),f=this._showNoEllipses?t:t-X,!j){if(i=(H=e.split("")).length,a="",c=[],m=H[0],this._cache[m]?P=this._cache[m].width:(P=b(m),this._cache[m]={width:P}),f>P)V=(c=e.substr(0,o.getNearestBreakIndex(e,f,this)).split("")).length;else{if(P>t)return te.text="",te.width=te.oriTextWidth=te.height=te.oriTextHeight=0,te;U&&((f=t-2*K)>P?U="..":(f=t-K)>P?U=".":(f=0,U=""))}if(B=b(c.join("")),z=this._lineHeight,r){for(;Vf&&(a||(a=c.slice(0,-1).join("")),B>t))return te.text=ee(a)+U,te.tooltext=te.oriText,te.width=b(te.text),te.height=this._lineHeight,te;return te.text=c.join(""),te.width=B,te.height=this._lineHeight,te}for(;Vf&&(a||(a=c.slice(0,-1).join("")),B>t)){if(L=e.substr(0,c.length).lastIndexOf(" "),D=e.substr(0,c.length).lastIndexOf("-"),L>R?(B=b(c.slice(R+1,L).join("")),c.splice(L,1,"
"),R=L,g=L+1):D>R?(D===c.length-1?(B=b(c.slice(R+1,L).join("")),c.splice(D,1,"
-")):(B=b(c.slice(R+1,L).join("")),c.splice(D,1,"-
")),R=D,g=D+1):(c.splice(c.length-1,1,"
"+H[V]),J=c.length-2,B=b(c.slice(R+1,J+1).join("")),R=J,g=V),(z+=this._lineHeight)>n)return te.text=ee(a)+U,te.tooltext=te.oriText,te.width=t,te.height=z-this._lineHeight,te;I=s(I,B),a=null,v=o.getNearestBreakIndex(e.substr(g),f,this),B=b(e.substr(g,v||1)),c.length)/g,'$1'),G.innerHTML=e,C=0,S=(k=G[h.childRetriverFn](h.childRetriverString)).length;Ct)return te.text="",te.width=te.oriTextWidth=te.height=te.oriTextHeight=0,te;if(P>f&&!this._showNoEllipses&&((f=t-2*K)>P?U="..":(f=t-K)>P?U=".":(f=0,U="")),_=$[0].elem.offsetLeft,x=$[0].elem.offsetTop,r)for(;Vf&&(N||(N=V),G.offsetWidth>t&&(F=V,V=i));else for(;Vf?(N||(N=V),M>t&&(L=$[V].spaceIdx,D=$[V].dashIdx,L>R?($[L].elem.innerHTML="
",R=L):D>R?($[D].elem.innerHTML=D===V?"
-":"-
",R=D):A.parentNode.insertBefore(T=u.createElement("br"),A),A.offsetHeight+A.offsetTop>n?(T?T.parentNode.removeChild(T):R===D?$[D].elem.innerHTML="-":$[L].elem.innerHTML=" ",F=V,V=i):N=null)):O>n&&(F=V,V=i);if(F=N;V-=1)(A=$[V].elem).parentNode.removeChild(A);for(;V>=0;V-=1)A=$[V].elem,o.classNameBrReg.test(A.className)?A.parentNode.removeChild(A):V=0}return te.text=G.innerHTML.replace(o.spanRemovalRegx,"$1").replace(/\&\;/g,"&"),te.isTruncated&&(te.text+=U,te.tooltext=d),te.height=G.offsetHeight,te.width=G.offsetWidth,te}return te.error=new Error("Body Tag Missing!"),te},SmartLabelManager.prototype.getOriSize=function(e,t){if(!this._init)return!1;var n,r,i,a,o,u=0,c=0,f={};if(!t)return this._calCharDimWithCache(e);for(a=0,o=(n=e.split("")).length;a]+?\>)|(&(?:[a-z]+|#[0-9]+);|.)/gi,spanAdditionReplacer:'$1$2',spanRemovalRegx:new RegExp("\\]+?"+c+"[^\\>]{0,}\\>(.*?)\\<\\/span\\>","ig"),xmlTagRegEx:new RegExp("<[^>][^<]*[^>]+>","i"),ltgtRegex:/<|>/g,brReplaceRegex://gi,testStrAvg:"WgI",parentContainerStyle:{position:"absolute",top:"-9999em",whiteSpace:"nowrap",padding:"0px",width:"1px",height:"1px",overflow:"hidden"},supportedStyle:{font:"font",fontFamily:"font-family","font-family":"font-family",fontWeight:"font-weight","font-weight":"font-weight",fontSize:"font-size","font-size":"font-size",lineHeight:"line-height","line-height":"line-height",fontStyle:"font-style","font-style":"font-style"},getDocumentSupport:function getDocumentSupport(){var r,i,a;return t.getElementsByClassName?(r="getElementsByClassName",i=c,a=!0):(r="getElementsByTagName",i="span",a=!1),{isIE:/msie/i.test(n)&&!e.opera,hasSVG:Boolean(e.SVGAngle||t.implementation.hasFeature("http://www.w3.org/TR/SVG11/feature#BasicStructure","1.1")),isHeadLess:new RegExp(" HtmlUnit").test(n),isWebKit:new RegExp(" AppleWebKit/").test(n),childRetriverFn:r,childRetriverString:i,noClassTesting:a}},createContainer:function createContainer(e){var n,r;if(e&&(e.offsetWidth||e.offsetHeight)){if(e.appendChild)return e.appendChild(r=t.createElement("DIV")),r.className=u,r.setAttribute("aria-hidden","true"),r.setAttribute("role","presentation"),r}else if((n=t.getElementsByTagName("body")[0])&&n.appendChild)return(r=t.createElement("DIV")).className=u,r.setAttribute("aria-hidden","true"),r.setAttribute("role","presentation"),1,n.appendChild(r),r},getNearestBreakIndex:function getNearestBreakIndex(e,t,n){if(!e||!e.length)return 0;var r,o=n._getWidthFn(),u=0,c=0,s=o(e),l=s/e.length;if(r=t,u=i(t/l),se.length&&(r=t-s,u=e.length);r>0;){if(r=t-o(e.substr(0,u)),!(c=a(r/l)))return u;u+=c}for(;r<0;){if(r=t-o(e.substr(0,u)),!(c=a(r/l)))return u;u+=c}return u},setLineHeight:function setLineHeight(e){var t=e.fontSize=e.fontSize||"12px";return e.lineHeight=e.lineHeight||e["line-height"]||1.2*parseInt(t,10)+"px",e}}}};t.default=r,e.exports=t.default},function(e){e.exports={name:"muze",private:!0,version:"1.0.2",description:"Composable visualisation library for web with a data-first approach",homepage:"https://www.charts.com/muze",license:"MIT",author:"Charts.com ",contributors:[{name:"Akash Ghoswami",email:"akash@charts.com"},{name:"Ranajit Banerjee",email:"ranajit.banerjee@charts.com",url:"https://github.com/ranajitbanerjee"},{name:"Mridul Meharia",email:"mridul@charts.com",url:"https://github.com/mridulmeh"},{name:"Subhash Haldar",email:"subhash@charts.com"},{name:"Sandeep Acharya",email:"sandeep@charts.com"},{name:"Rousan Ali",email:"rousan@charts.com",url:"https://rousan.io"},{name:"Ujjal Kumar Dutta",email:"ujjal@charts.com"}],main:"src/index.js",keywords:["muze","svg","vector","graphics","data-visualization","visualization","renderer","fusioncharts","relational","algebra","relation"],repository:{type:"git",url:"https://github.com/chartshq/muze"},dependencies:{"@chartshq/layout":"^1.0.0","@chartshq/muze-firebolt":"^1.0.0","@chartshq/muze-legend":"^1.0.0","muze-utils":"^1.0.0","@chartshq/visual-cell":"^1.0.0","@chartshq/visual-group":"^1.0.0","@chartshq/visual-layer":"^1.0.0","@chartshq/visual-unit":"^1.0.0"}}},function(e,t,n){var r=n(44);e.exports=r.default?r.default:r},function(e,t,n){"use strict";var r=function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}(n(5)).default.init("undefined"!=typeof window?window:void 0),i=r.win.document,a=r.getDocumentSupport(),o=a.isWebKit?0:4.5;function ContainerManager(e,t,n){var r;n=(n=n>5?n:5)<20?n:20,this.maxContainers=n,this.first=null,this.last=null,this.containers={},this.length=0,this.rootNode=e,t&&((r=i.createElementNS("http://www.w3.org/2000/svg","svg")).setAttributeNS("http://www.w3.org/2000/svg","xlink","http://www.w3.org/1999/xlink"),r.setAttributeNS("http://www.w3.org/2000/svg","height","0"),r.setAttributeNS("http://www.w3.org/2000/svg","width","0"),this.svgRoot=r,this.rootNode.appendChild(r))}ContainerManager.prototype.get=function(e){var t,n,i,a=this.containers,o=this.length,u=this.maxContainers,c="";for(n in r.supportedStyle)void 0!==e[n]&&(c+=r.supportedStyle[n]+":"+e[n]+";");if(!c)return!1;if(i=a[c])this.first!==i&&(i.prev&&(i.prev.next=i.next),i.next&&(i.next.prev=i.prev),i.next=this.first,i.next.prev=i,this.last===i&&(this.last=i.prev),i.prev=null,this.first=i);else{if(o>=u)for(t=o-u+1;t--;)this.removeContainer(this.last);i=this.addContainer(c)}return i},ContainerManager.prototype.addContainer=function(e){var t,n;return this.containers[e]=n={next:null,prev:null,node:null,ellipsesWidth:0,lineHeight:0,dotWidth:0,avgCharWidth:4,keyStr:e,charCache:{}},n.next=this.first,n.next&&(n.next.prev=n),this.first=n,this.last||(this.last=n),this.length+=1,t=n.node=i.createElement("div"),this.rootNode.appendChild(t),a.isIE&&!a.hasSVG?t.style.setAttribute("cssText",e):t.setAttribute("style",e),t.setAttribute("aria-hidden","true"),t.setAttribute("role","presentation"),t.style.display="inline-block",t.innerHTML=r.testStrAvg,n.lineHeight=t.offsetHeight,n.avgCharWidth=t.offsetWidth/3,a.isBrowserLess?((t=n.svgText=i.createElementNS("http://www.w3.org/2000/svg","text")).setAttribute("style",e),this.svgRoot.appendChild(t),t.textContent=r.testStrAvg,n.lineHeight=t.getBBox().height,n.avgCharWidth=(t.getBBox().width-o)/3,t.textContent="...",n.ellipsesWidth=t.getBBox().width-o,t.textContent=".",n.dotWidth=t.getBBox().width-o):(t.innerHTML="...",n.ellipsesWidth=t.offsetWidth,t.innerHTML=".",n.dotWidth=t.offsetWidth,t.innerHTML=""),n},ContainerManager.prototype.removeContainer=function(e){var t=e.keyStr;t&&this.length&&e&&(this.length-=1,e.prev&&(e.prev.next=e.next),e.next&&(e.next.prev=e.prev),this.first===e&&(this.first=e.next),this.last===e&&(this.last=e.prev),e.node.parentNode.removeChild(e.node),delete this.containers[t])},ContainerManager.prototype.dispose=function(){var e,t=this.containers;for(e in this.maxContainers=null,t)this.removeContainer(t[e]);this.rootNode.parentNode.removeChild(this.rootNode),this.rootNode=null,this.first=null,this.last=null},e.exports=ContainerManager},function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,,function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,function(e,t,n){"use strict";n.r(t);var r={};n.r(r),n.d(r,"scaleLinear",function(){return linear_linear}),n.d(r,"scaleThreshold",function(){return threshold_threshold}),n.d(r,"scaleLog",function(){return log}),n.d(r,"scalePow",function(){return pow}),n.d(r,"scaleIdentity",function(){return identity_identity}),n.d(r,"scaleOrdinal",function(){return ordinal}),n.d(r,"scaleSequential",function(){return sequential}),n.d(r,"scaleQuantize",function(){return quantize_quantize}),n.d(r,"scaleQuantile",function(){return quantile_quantile}),n.d(r,"schemeCategory10",function(){return tn}),n.d(r,"schemeCategory20",function(){return rn}),n.d(r,"schemeCategory20b",function(){return nn}),n.d(r,"scaleBand",function(){return band}),n.d(r,"scaleTime",function(){return Jt});var i={};n.r(i),n.d(i,"schemeDark2",function(){return cn}),n.d(i,"schemePaired",function(){return sn}),n.d(i,"schemeAccent",function(){return un}),n.d(i,"schemePastel1",function(){return ln}),n.d(i,"schemePastel2",function(){return fn}),n.d(i,"schemeSet1",function(){return hn}),n.d(i,"schemeSet2",function(){return dn}),n.d(i,"schemeSet3",function(){return pn}),n.d(i,"schemeBlues",function(){return zn}),n.d(i,"schemeBrBG",function(){return gn}),n.d(i,"schemePRGn",function(){return mn}),n.d(i,"schemePiYG",function(){return _n}),n.d(i,"interpolateBrBG",function(){return vn}),n.d(i,"interpolatePRGn",function(){return bn}),n.d(i,"interpolatePiYG",function(){return xn}),n.d(i,"interpolatePuOr",function(){return wn}),n.d(i,"interpolateRdBu",function(){return kn}),n.d(i,"interpolateRdGy",function(){return Cn}),n.d(i,"interpolateRdYlBu",function(){return Sn}),n.d(i,"interpolateRdYlGn",function(){return Pn}),n.d(i,"interpolateSpectral",function(){return An}),n.d(i,"interpolateBlues",function(){return Hn}),n.d(i,"interpolateGreens",function(){return Vn}),n.d(i,"interpolateGreys",function(){return Un}),n.d(i,"interpolateOranges",function(){return Gn}),n.d(i,"interpolatePurples",function(){return Wn}),n.d(i,"interpolateReds",function(){return qn}),n.d(i,"interpolateViridis",function(){return Zn}),n.d(i,"interpolateInferno",function(){return er}),n.d(i,"interpolateMagma",function(){return Jn}),n.d(i,"interpolatePlasma",function(){return tr}),n.d(i,"interpolateWarm",function(){return Xn}),n.d(i,"interpolateCool",function(){return Kn}),n.d(i,"interpolateCubehelixDefault",function(){return Yn}),n.d(i,"interpolateBuGn",function(){return En}),n.d(i,"interpolateBuPu",function(){return Mn}),n.d(i,"interpolateGnBu",function(){return On}),n.d(i,"interpolateOrRd",function(){return Tn}),n.d(i,"interpolatePuBuGn",function(){return Fn}),n.d(i,"interpolatePuBu",function(){return Nn}),n.d(i,"interpolatePuRd",function(){return jn}),n.d(i,"interpolateRdPu",function(){return In}),n.d(i,"interpolateYlGnBu",function(){return Dn}),n.d(i,"interpolateYlGn",function(){return Ln}),n.d(i,"interpolateYlOrBr",function(){return Rn}),n.d(i,"interpolateYlOrRd",function(){return Bn}),n.d(i,"interpolateRainbow",function(){return Qn});var a={};n.r(a),n.d(a,"DRAG",function(){return Qo}),n.d(a,"HOVER",function(){return Zo}),n.d(a,"SELECTIONDRAG",function(){return Jo}),n.d(a,"CLICK",function(){return eu}),n.d(a,"LONGTOUCH",function(){return tu}),n.d(a,"TOUCHDRAG",function(){return nu}),n.d(a,"ALL_ACTIONS",function(){return ru});var o={};n.r(o),n.d(o,"SELECTION_NEW_ENTRY",function(){return iu}),n.d(o,"SELECTION_NEW_EXIT",function(){return au}),n.d(o,"SELECTION_NULL",function(){return ou}),n.d(o,"SELECTION_OLD_ENTRY",function(){return uu}),n.d(o,"SELECTION_OLD_EXIT",function(){return cu});var u={};n.r(u),n.d(u,"BRUSH",function(){return wu}),n.d(u,"HIGHLIGHT",function(){return ku}),n.d(u,"TOOLTIP",function(){return Cu}),n.d(u,"FILTER",function(){return Su}),n.d(u,"SELECT",function(){return Pu});var c={};n.r(c),n.d(c,"HighlightBeahviour",function(){return Eu}),n.d(c,"BrushBehaviour",function(){return Ou}),n.d(c,"FilterBehaviour",function(){return Fu}),n.d(c,"SelectBehaviour",function(){return Lu});var s={};n.r(s),n.d(s,"SelectionBox",function(){return Ju}),n.d(s,"Tooltip",function(){return gc}),n.d(s,"Crossline",function(){return mc}),n.d(s,"PlotHighlighter",function(){return xc}),n.d(s,"FilterEffect",function(){return kc}),n.d(s,"PersistentAnchors",function(){return Ec}),n.d(s,"BrushAnchors",function(){return Tc}),n.d(s,"AnchorEffect",function(){return Pc});var l={};n.r(l),n.d(l,"BOTTOM",function(){return Gc}),n.d(l,"TOP",function(){return Yc}),n.d(l,"LEFT",function(){return Xc}),n.d(l,"RIGHT",function(){return Kc}),n.d(l,"axisOrientationMap",function(){return $c});var f={};n.r(f),n.d(f,"LINEAR",function(){return Qc}),n.d(f,"BAND",function(){return Zc}),n.d(f,"TIME",function(){return Jc}),n.d(f,"COLOR",function(){return es}),n.d(f,"ORDINAL",function(){return ts}),n.d(f,"QUANTIZE",function(){return ns}),n.d(f,"QUANTILE",function(){return rs}),n.d(f,"LOG",function(){return is}),n.d(f,"POW",function(){return as}),n.d(f,"IDENTITY",function(){return os}),n.d(f,"SEQUENTIAL",function(){return us}),n.d(f,"THRESHOLD",function(){return cs});var h={};n.r(h),n.d(h,"CONFIG",function(){return ad}),n.d(h,"DATA",function(){return od}),n.d(h,"AXES",function(){return ud}),n.d(h,"LAYERDEFS",function(){return cd}),n.d(h,"WIDTH",function(){return sd}),n.d(h,"HEIGHT",function(){return ld}),n.d(h,"MOUNT",function(){return fd}),n.d(h,"primaryXAxisUpdated",function(){return hd}),n.d(h,"primaryYAxisUpdated",function(){return dd}),n.d(h,"secondaryXAxisUpdated",function(){return pd}),n.d(h,"secondaryYAxisUpdated",function(){return yd}),n.d(h,"TRANSFORM",function(){return gd}),n.d(h,"DATADOMAIN",function(){return vd}),n.d(h,"LAYERSCREATED",function(){return md}),n.d(h,"FIELDS",function(){return bd}),n.d(h,"TIMEDIFFS",function(){return _d}),n.d(h,"LAYERAXISINDEX",function(){return xd});var d={};n.r(d),n.d(d,"SelectBehaviour",function(){return wp});var y={};n.r(y),n.d(y,"SelectionBox",function(){return zp}),n.d(y,"LegendHighlighter",function(){return Up});var g={};n.r(g),n.d(g,"share",function(){return Oy}),n.d(g,"html",function(){return operators_html});var v=function(e,t){return et?1:e>=t?0:NaN},m=function(e){return 1===e.length&&(e=function ascendingComparator(e){return function(t,n){return v(e(t),n)}}(e)),{left:function left(t,n,r,i){for(null==r&&(r=0),null==i&&(i=t.length);r>>1;e(t[a],n)<0?r=a+1:i=a}return r},right:function right(t,n,r,i){for(null==r&&(r=0),null==i&&(i=t.length);r>>1;e(t[a],n)>0?i=a:r=a+1}return r}}};var b=m(v),_=b.right,x=(b.left,_);var w=function(e){return null===e?NaN:+e},k=Array.prototype,C=(k.slice,k.map,function(e,t,n){e=+e,t=+t,n=(i=arguments.length)<2?(t=e,e=0,1):i<3?1:+n;for(var r=-1,i=0|Math.max(0,Math.ceil((t-e)/n)),a=new Array(i);++r0)return[e];if((r=t0)for(e=Math.ceil(e/o),t=Math.floor(t/o),a=new Array(i=Math.ceil(t-e+1));++u=0?(a>=S?10:a>=P?5:a>=A?2:1)*Math.pow(10,i):-Math.pow(10,-i)/(a>=S?10:a>=P?5:a>=A?2:1)}function tickStep(e,t,n){var r=Math.abs(t-e)/Math.max(0,n),i=Math.pow(10,Math.floor(Math.log(r)/Math.LN10)),a=r/i;return a>=S?i*=10:a>=P?i*=5:a>=A&&(i*=2),t=1)return+n(e[r-1],r-1,e);var r,i=(r-1)*t,a=Math.floor(i),o=+n(e[a],a,e);return o+(+n(e[a+1],a+1,e)-o)*(i-a)}};function map_Map(){}function map_map(e,t){var n=new map_Map;if(e instanceof map_Map)e.each(function(e,t){n.set(t,e)});else if(Array.isArray(e)){var r,i=-1,a=e.length;if(null==t)for(;++i=r.length)return null!=e&&n.sort(e),null!=t?t(n):n;for(var u,c,s,l=-1,f=n.length,h=r[i++],d=O(),p=a();++lr.length)return e;var a,o=i[n-1];return null!=t&&n>=r.length?a=e.entries():(a=[],e.each(function(e,t){a.push({key:t,values:_entries(e,n)})})),null!=o?a.sort(function(e,t){return o(e.key,t.key)}):a}(apply(e,0,createMap,setMap),0)},key:function key(e){return r.push(e),n},sortKeys:function sortKeys(e){return i[r.length-1]=e,n},sortValues:function sortValues(t){return e=t,n},rollup:function rollup(e){return t=e,n}}};function createObject(){return{}}function setObject(e,t,n){e[t]=n}function createMap(){return O()}function setMap(e,t,n){e.set(t,n)}function set_Set(){}var F=O.prototype;function set_set(e,t){var n=new set_Set;if(e instanceof set_Set)e.each(function(e){n.add(e)});else if(e){var r=-1,i=e.length;if(null==t)for(;++r1?+t:s,f=a[1]a[1-f]))return n=Math.max(0,getClosestIndexOf(h,s)),c=getClosestIndexOf(h,l),o=s===l?n:Math.max(n,c-1),f&&(u=n,n=d-o,o=d-u),n>o?void 0:r().slice(n,o+1)},n.invert=function(e,t){var n,o,u=+e,c=arguments.length>1?+t:u,s=a[1]a[1-s]))return n=Math.max(0,getClosestIndexOf(l,u,"left")),r()[s?f-n:n]},rescale()}function getClosestIndexOf(e,t,n){for(var r,i,a,o=0,u=e.length-1;ot?0===u?u:"left"===n?u-1:u:u===e.length-1?u:"left"===n?u:u+1:u}var L=function(e,t,n){e.prototype=t.prototype=n,n.constructor=e};function extend(e,t){var n=Object.create(e.prototype);for(var r in t)n[r]=t[r];return n}function Color(){}var R="\\s*([+-]?\\d+)\\s*",B="\\s*([+-]?\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)\\s*",z="\\s*([+-]?\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)%\\s*",H=/^#([0-9a-f]{3})$/,V=/^#([0-9a-f]{6})$/,U=new RegExp("^rgb\\("+[R,R,R]+"\\)$"),W=new RegExp("^rgb\\("+[z,z,z]+"\\)$"),q=new RegExp("^rgba\\("+[R,R,R,B]+"\\)$"),G=new RegExp("^rgba\\("+[z,z,z,B]+"\\)$"),Y=new RegExp("^hsl\\("+[B,z,z]+"\\)$"),X=new RegExp("^hsla\\("+[B,z,z,B]+"\\)$"),K={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};function color_color(e){var t;return e=(e+"").trim().toLowerCase(),(t=H.exec(e))?new Rgb((t=parseInt(t[1],16))>>8&15|t>>4&240,t>>4&15|240&t,(15&t)<<4|15&t,1):(t=V.exec(e))?rgbn(parseInt(t[1],16)):(t=U.exec(e))?new Rgb(t[1],t[2],t[3],1):(t=W.exec(e))?new Rgb(255*t[1]/100,255*t[2]/100,255*t[3]/100,1):(t=q.exec(e))?rgba(t[1],t[2],t[3],t[4]):(t=G.exec(e))?rgba(255*t[1]/100,255*t[2]/100,255*t[3]/100,t[4]):(t=Y.exec(e))?hsla(t[1],t[2]/100,t[3]/100,1):(t=X.exec(e))?hsla(t[1],t[2]/100,t[3]/100,t[4]):K.hasOwnProperty(e)?rgbn(K[e]):"transparent"===e?new Rgb(NaN,NaN,NaN,0):null}function rgbn(e){return new Rgb(e>>16&255,e>>8&255,255&e,1)}function rgba(e,t,n,r){return r<=0&&(e=t=n=NaN),new Rgb(e,t,n,r)}function rgbConvert(e){return e instanceof Color||(e=color_color(e)),e?new Rgb((e=e.rgb()).r,e.g,e.b,e.opacity):new Rgb}function color_rgb(e,t,n,r){return 1===arguments.length?rgbConvert(e):new Rgb(e,t,n,null==r?1:r)}function Rgb(e,t,n,r){this.r=+e,this.g=+t,this.b=+n,this.opacity=+r}function _hex(e){return((e=Math.max(0,Math.min(255,Math.round(e)||0)))<16?"0":"")+e.toString(16)}function hsla(e,t,n,r){return r<=0?e=t=n=NaN:n<=0||n>=1?e=t=NaN:t<=0&&(e=NaN),new Hsl(e,t,n,r)}function hsl(e,t,n,r){return 1===arguments.length?function hslConvert(e){if(e instanceof Hsl)return new Hsl(e.h,e.s,e.l,e.opacity);if(e instanceof Color||(e=color_color(e)),!e)return new Hsl;if(e instanceof Hsl)return e;var t=(e=e.rgb()).r/255,n=e.g/255,r=e.b/255,i=Math.min(t,n,r),a=Math.max(t,n,r),o=NaN,u=a-i,c=(a+i)/2;return u?(o=t===a?(n-r)/u+6*(n0&&c<1?0:o,new Hsl(o,u,c,e.opacity)}(e):new Hsl(e,t,n,null==r?1:r)}function Hsl(e,t,n,r){this.h=+e,this.s=+t,this.l=+n,this.opacity=+r}function hsl2rgb(e,t,n){return 255*(e<60?t+(n-t)*e/60:e<180?n:e<240?t+(n-t)*(240-e)/60:t)}L(Color,color_color,{displayable:function displayable(){return this.rgb().displayable()},hex:function hex(){return this.rgb().hex()},toString:function toString(){return this.rgb()+""}}),L(Rgb,color_rgb,extend(Color,{brighter:function brighter(e){return e=null==e?1/.7:Math.pow(1/.7,e),new Rgb(this.r*e,this.g*e,this.b*e,this.opacity)},darker:function darker(e){return e=null==e?.7:Math.pow(.7,e),new Rgb(this.r*e,this.g*e,this.b*e,this.opacity)},rgb:function rgb(){return this},displayable:function displayable(){return 0<=this.r&&this.r<=255&&0<=this.g&&this.g<=255&&0<=this.b&&this.b<=255&&0<=this.opacity&&this.opacity<=1},hex:function hex(){return"#"+_hex(this.r)+_hex(this.g)+_hex(this.b)},toString:function toString(){var e=this.opacity;return(1===(e=isNaN(e)?1:Math.max(0,Math.min(1,e)))?"rgb(":"rgba(")+Math.max(0,Math.min(255,Math.round(this.r)||0))+", "+Math.max(0,Math.min(255,Math.round(this.g)||0))+", "+Math.max(0,Math.min(255,Math.round(this.b)||0))+(1===e?")":", "+e+")")}})),L(Hsl,hsl,extend(Color,{brighter:function brighter(e){return e=null==e?1/.7:Math.pow(1/.7,e),new Hsl(this.h,this.s,this.l*e,this.opacity)},darker:function darker(e){return e=null==e?.7:Math.pow(.7,e),new Hsl(this.h,this.s,this.l*e,this.opacity)},rgb:function rgb(){var e=this.h%360+360*(this.h<0),t=isNaN(e)||isNaN(this.s)?0:this.s,n=this.l,r=n+(n<.5?n:1-n)*t,i=2*n-r;return new Rgb(hsl2rgb(e>=240?e-240:e+120,i,r),hsl2rgb(e,i,r),hsl2rgb(e<120?e+240:e-120,i,r),this.opacity)},displayable:function displayable(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1}}));var $=Math.PI/180,Q=180/Math.PI,Z=.96422,J=1,ee=.82521,te=4/29,ne=6/29,re=3*ne*ne,ie=ne*ne*ne;function labConvert(e){if(e instanceof Lab)return new Lab(e.l,e.a,e.b,e.opacity);if(e instanceof Hcl){if(isNaN(e.h))return new Lab(e.l,0,0,e.opacity);var t=e.h*$;return new Lab(e.l,Math.cos(t)*e.c,Math.sin(t)*e.c,e.opacity)}e instanceof Rgb||(e=rgbConvert(e));var n,r,i=rgb2lrgb(e.r),a=rgb2lrgb(e.g),o=rgb2lrgb(e.b),u=xyz2lab((.2225045*i+.7168786*a+.0606169*o)/J);return i===a&&a===o?n=r=u:(n=xyz2lab((.4360747*i+.3850649*a+.1430804*o)/Z),r=xyz2lab((.0139322*i+.0971045*a+.7141733*o)/ee)),new Lab(116*u-16,500*(n-u),200*(u-r),e.opacity)}function lab(e,t,n,r){return 1===arguments.length?labConvert(e):new Lab(e,t,n,null==r?1:r)}function Lab(e,t,n,r){this.l=+e,this.a=+t,this.b=+n,this.opacity=+r}function xyz2lab(e){return e>ie?Math.pow(e,1/3):e/re+te}function lab2xyz(e){return e>ne?e*e*e:re*(e-te)}function lrgb2rgb(e){return 255*(e<=.0031308?12.92*e:1.055*Math.pow(e,1/2.4)-.055)}function rgb2lrgb(e){return(e/=255)<=.04045?e/12.92:Math.pow((e+.055)/1.055,2.4)}function hclConvert(e){if(e instanceof Hcl)return new Hcl(e.h,e.c,e.l,e.opacity);if(e instanceof Lab||(e=labConvert(e)),0===e.a&&0===e.b)return new Hcl(NaN,0,e.l,e.opacity);var t=Math.atan2(e.b,e.a)*Q;return new Hcl(t<0?t+360:t,Math.sqrt(e.a*e.a+e.b*e.b),e.l,e.opacity)}function hcl(e,t,n,r){return 1===arguments.length?hclConvert(e):new Hcl(e,t,n,null==r?1:r)}function Hcl(e,t,n,r){this.h=+e,this.c=+t,this.l=+n,this.opacity=+r}L(Lab,lab,extend(Color,{brighter:function brighter(e){return new Lab(this.l+18*(null==e?1:e),this.a,this.b,this.opacity)},darker:function darker(e){return new Lab(this.l-18*(null==e?1:e),this.a,this.b,this.opacity)},rgb:function rgb(){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 new Rgb(lrgb2rgb(3.1338561*(t=Z*lab2xyz(t))-1.6168667*(e=J*lab2xyz(e))-.4906146*(n=ee*lab2xyz(n))),lrgb2rgb(-.9787684*t+1.9161415*e+.033454*n),lrgb2rgb(.0719453*t-.2289914*e+1.4052427*n),this.opacity)}})),L(Hcl,hcl,extend(Color,{brighter:function brighter(e){return new Hcl(this.h,this.c,this.l+18*(null==e?1:e),this.opacity)},darker:function darker(e){return new Hcl(this.h,this.c,this.l-18*(null==e?1:e),this.opacity)},rgb:function rgb(){return labConvert(this).rgb()}}));var ae=-.14861,oe=1.78277,ue=-.29227,ce=-.90649,se=1.97294,le=se*ce,fe=se*oe,he=oe*ue-ce*ae;function cubehelix_cubehelix(e,t,n,r){return 1===arguments.length?function cubehelixConvert(e){if(e instanceof Cubehelix)return new Cubehelix(e.h,e.s,e.l,e.opacity);e instanceof Rgb||(e=rgbConvert(e));var t=e.r/255,n=e.g/255,r=e.b/255,i=(he*r+le*t-fe*n)/(he+le-fe),a=r-i,o=(se*(n-i)-ue*a)/ce,u=Math.sqrt(o*o+a*a)/(se*i*(1-i)),c=u?Math.atan2(o,a)*Q-120:NaN;return new Cubehelix(c<0?c+360:c,u,i,e.opacity)}(e):new Cubehelix(e,t,n,null==r?1:r)}function Cubehelix(e,t,n,r){this.h=+e,this.s=+t,this.l=+n,this.opacity=+r}function basis(e,t,n,r,i){var a=e*e,o=a*e;return((1-3*e+3*a-o)*t+(4-6*a+3*o)*n+(1+3*e+3*a-3*o)*r+o*i)/6}L(Cubehelix,cubehelix_cubehelix,extend(Color,{brighter:function brighter(e){return e=null==e?1/.7:Math.pow(1/.7,e),new Cubehelix(this.h,this.s,this.l*e,this.opacity)},darker:function darker(e){return e=null==e?.7:Math.pow(.7,e),new Cubehelix(this.h,this.s,this.l*e,this.opacity)},rgb:function rgb(){var e=isNaN(this.h)?0:(this.h+120)*$,t=+this.l,n=isNaN(this.s)?0:this.s*t*(1-t),r=Math.cos(e),i=Math.sin(e);return new Rgb(255*(t+n*(ae*r+oe*i)),255*(t+n*(ue*r+ce*i)),255*(t+n*(se*r)),this.opacity)}}));var de=function(e){return function(){return e}};function linear(e,t){return function(n){return e+n*t}}function color_hue(e,t){var n=t-e;return n?linear(e,n>180||n<-180?n-360*Math.round(n/360):n):de(isNaN(e)?t:e)}function gamma(e){return 1==(e=+e)?nogamma:function(t,n){return n-t?function exponential(e,t,n){return e=Math.pow(e,n),t=Math.pow(t,n)-e,n=1/n,function(r){return Math.pow(e+r*t,n)}}(t,n,e):de(isNaN(t)?n:t)}}function nogamma(e,t){var n=t-e;return n?linear(e,n):de(isNaN(e)?t:e)}var pe=function rgbGamma(e){var t=gamma(e);function rgb(e,n){var r=t((e=color_rgb(e)).r,(n=color_rgb(n)).r),i=t(e.g,n.g),a=t(e.b,n.b),o=nogamma(e.opacity,n.opacity);return function(t){return e.r=r(t),e.g=i(t),e.b=a(t),e.opacity=o(t),e+""}}return rgb.gamma=rgbGamma,rgb}(1);function rgbSpline(e){return function(t){var n,r,i=t.length,a=new Array(i),o=new Array(i),u=new Array(i);for(n=0;n=1?(n=1,t-1):Math.floor(n*t),i=e[r],a=e[r+1],o=r>0?e[r-1]:2*i-a,u=ra&&(i=t.slice(a,i),u[o]?u[o]+=i:u[++o]=i),(n=n[0])===(r=r[0])?u[o]?u[o]+=r:u[++o]=r:(u[++o]=null,c.push({i:o,x:ge(n,r)})),a=be.lastIndex;return a180?t+=360:t-e>180&&(e+=360),i.push({i:n.push(pop(n)+"rotate(",null,r)-2,x:ge(e,t)})):t&&n.push(pop(n)+"rotate("+t+r)}(i.rotate,a.rotate,o,u),function skewX(e,t,n,i){e!==t?i.push({i:n.push(pop(n)+"skewX(",null,r)-2,x:ge(e,t)}):t&&n.push(pop(n)+"skewX("+t+r)}(i.skewX,a.skewX,o,u),function scale(e,t,n,r,i,a){if(e!==n||t!==r){var o=i.push(pop(i)+"scale(",null,",",null,")");a.push({i:o-4,x:ge(e,n)},{i:o-2,x:ge(t,r)})}else 1===n&&1===r||i.push(pop(i)+"scale("+n+","+r+")")}(i.scaleX,i.scaleY,a.scaleX,a.scaleY,o,u),i=a=null,function(e){for(var t,n=-1,r=u.length;++n2?polymap:bimap,r=i=null,scale}function scale(t){return(r||(r=n(a,o,c?function deinterpolateClamp(e){return function(t,n){var r=e(t=+t,n=+n);return function(e){return e<=t?0:e>=n?1:r(e)}}}(e):e,u)))(+t)}return scale.invert=function(e){return(i||(i=n(o,a,deinterpolateLinear,c?function reinterpolateClamp(e){return function(t,n){var r=e(t=+t,n=+n);return function(e){return e<=0?t:e>=1?n:r(e)}}}(t):t)))(+e)},scale.domain=function(e){return arguments.length?(a=j.call(e,De),rescale()):a.slice()},scale.range=function(e){return arguments.length?(o=I.call(e),rescale()):o.slice()},scale.rangeRound=function(e){return o=I.call(e),u=Ae,rescale()},scale.clamp=function(e){return arguments.length?(c=!!e,rescale()):c},scale.interpolate=function(e){return arguments.length?(u=e,rescale()):u},rescale()}var Re=function(e,t){if((n=(e=t?e.toExponential(t-1):e.toExponential()).indexOf("e"))<0)return null;var n,r=e.slice(0,n);return[r.length>1?r[0]+r.slice(2):r,+e.slice(n+1)]},Be=function(e){return(e=Re(Math.abs(e)))?e[1]:NaN},ze=/^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;function formatSpecifier(e){return new FormatSpecifier(e)}function FormatSpecifier(e){if(!(t=ze.exec(e)))throw new Error("invalid format: "+e);var t;this.fill=t[1]||" ",this.align=t[2]||">",this.sign=t[3]||"-",this.symbol=t[4]||"",this.zero=!!t[5],this.width=t[6]&&+t[6],this.comma=!!t[7],this.precision=t[8]&&+t[8].slice(1),this.trim=!!t[9],this.type=t[10]||""}formatSpecifier.prototype=FormatSpecifier.prototype,FormatSpecifier.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.trim?"~":"")+this.type};var He,Ve,Ue,We,qe=function(e){e:for(var t,n=e.length,r=1,i=-1;r0){if(!+e[r])break e;i=0}}return i>0?e.slice(0,i)+e.slice(t+1):e},Ge=function(e,t){var n=Re(e,t);if(!n)return e+"";var r=n[0],i=n[1];return i<0?"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")},Ye={"%":function _(e,t){return(100*e).toFixed(t)},b:function b(e){return Math.round(e).toString(2)},c:function c(e){return e+""},d:function d(e){return Math.round(e).toString(10)},e:function e(t,n){return t.toExponential(n)},f:function f(e,t){return e.toFixed(t)},g:function g(e,t){return e.toPrecision(t)},o:function o(e){return Math.round(e).toString(8)},p:function p(e,t){return Ge(100*e,t)},r:Ge,s:function(e,t){var n=Re(e,t);if(!n)return e+"";var r=n[0],i=n[1],a=i-(He=3*Math.max(-8,Math.min(8,Math.floor(i/3))))+1,o=r.length;return a===o?r:a>o?r+new Array(a-o+1).join("0"):a>0?r.slice(0,a)+"."+r.slice(a):"0."+new Array(1-a).join("0")+Re(e,Math.max(0,t+a-1))[0]},X:function X(e){return Math.round(e).toString(16).toUpperCase()},x:function x(e){return Math.round(e).toString(16)}},Xe=function(e){return e},Ke=["y","z","a","f","p","n","µ","m","","k","M","G","T","P","E","Z","Y"],$e=function(e){var t=e.grouping&&e.thousands?function(e,t){return function(n,r){for(var i=n.length,a=[],o=0,u=e[0],c=0;i>0&&u>0&&(c+u+1>r&&(u=Math.max(1,r-c)),a.push(n.substring(i-=u,i+u)),!((c+=u+1)>r));)u=e[o=(o+1)%e.length];return a.reverse().join(t)}}(e.grouping,e.thousands):Xe,n=e.currency,r=e.decimal,i=e.numerals?function(e){return function(t){return t.replace(/[0-9]/g,function(t){return e[+t]})}}(e.numerals):Xe,a=e.percent||"%";function newFormat(e){var o=(e=formatSpecifier(e)).fill,u=e.align,c=e.sign,s=e.symbol,l=e.zero,f=e.width,h=e.comma,d=e.precision,p=e.trim,y=e.type;"n"===y?(h=!0,y="g"):Ye[y]||(null==d&&(d=12),p=!0,y="g"),(l||"0"===o&&"="===u)&&(l=!0,o="0",u="=");var g="$"===s?n[0]:"#"===s&&/[boxX]/.test(y)?"0"+y.toLowerCase():"",v="$"===s?n[1]:/[%p]/.test(y)?a:"",m=Ye[y],b=/[defgprs%]/.test(y);function format(e){var n,a,s,_=g,x=v;if("c"===y)x=m(e)+x,e="";else{var w=(e=+e)<0;if(e=m(Math.abs(e),d),p&&(e=qe(e)),w&&0==+e&&(w=!1),_=(w?"("===c?c:"-":"-"===c||"("===c?"":c)+_,x=("s"===y?Ke[8+He/3]:"")+x+(w&&"("===c?")":""),b)for(n=-1,a=e.length;++n(s=e.charCodeAt(n))||s>57){x=(46===s?r+e.slice(n+1):e.slice(n))+x,e=e.slice(0,n);break}}h&&!l&&(e=t(e,1/0));var k=_.length+e.length+x.length,C=k>1)+_+e+x+C.slice(k);break;default:e=C+_+e+x}return i(e)}return d=null==d?6:/[gprs]/.test(y)?Math.max(1,Math.min(21,d)):Math.max(0,Math.min(20,d)),format.toString=function(){return e+""},format}return{format:newFormat,formatPrefix:function formatPrefix(e,t){var n=newFormat(((e=formatSpecifier(e)).type="f",e)),r=3*Math.max(-8,Math.min(8,Math.floor(Be(t)/3))),i=Math.pow(10,-r),a=Ke[8+r/3];return function(e){return n(i*e)+a}}}};!function defaultLocale(e){return Ve=$e(e),Ue=Ve.format,We=Ve.formatPrefix,Ve}({decimal:".",thousands:",",grouping:[3],currency:["$",""]});var Qe=function(e,t,n){var r,i=e[0],a=e[e.length-1],o=tickStep(i,a,null==t?10:t);switch((n=formatSpecifier(null==n?",f":n)).type){case"s":var u=Math.max(Math.abs(i),Math.abs(a));return null!=n.precision||isNaN(r=function(e,t){return Math.max(0,3*Math.max(-8,Math.min(8,Math.floor(Be(t)/3)))-Be(Math.abs(e)))}(o,u))||(n.precision=r),We(n,u);case"":case"e":case"g":case"p":case"r":null!=n.precision||isNaN(r=function(e,t){return e=Math.abs(e),t=Math.abs(t)-e,Math.max(0,Be(t)-Be(e))+1}(o,Math.max(Math.abs(i),Math.abs(a))))||(n.precision=r-("e"===n.type));break;case"f":case"%":null!=n.precision||isNaN(r=function(e){return Math.max(0,-Be(Math.abs(e)))}(o))||(n.precision=r-2*("%"===n.type))}return Ue(n)};function linearish(e){var t=e.domain;return e.ticks=function(e){var n=t();return E(n[0],n[n.length-1],null==e?10:e)},e.tickFormat=function(e,n){return Qe(t(),e,n)},e.nice=function(n){null==n&&(n=10);var r,i=t(),a=0,o=i.length-1,u=i[a],c=i[o];return c0?r=tickIncrement(u=Math.floor(u/r)*r,c=Math.ceil(c/r)*r,n):r<0&&(r=tickIncrement(u=Math.ceil(u*r)/r,c=Math.floor(c*r)/r,n)),r>0?(i[a]=Math.floor(u/r)*r,i[o]=Math.ceil(c/r)*r,t(i)):r<0&&(i[a]=Math.ceil(u*r)/r,i[o]=Math.floor(c*r)/r,t(i)),e},e}function linear_linear(){var e=continuous(deinterpolateLinear,ge);return e.copy=function(){return copy(e,linear_linear())},linearish(e)}function identity_identity(){var e=[0,1];function scale(e){return+e}return scale.invert=scale,scale.domain=scale.range=function(t){return arguments.length?(e=j.call(t,De),scale):e.slice()},scale.copy=function(){return identity_identity().domain(e)},linearish(scale)}var Ze=function(e,t){var n,r=0,i=(e=e.slice()).length-1,a=e[r],o=e[i];return o0){for(;hc)break;y.push(f)}}else for(;h=1;--l)if(!((f=s*l)c)break;y.push(f)}}else y=E(h,d,Math.min(d-h,p)).map(i);return a?y.reverse():y},e.tickFormat=function(t,a){if(null==a&&(a=10===n?".0e":","),"function"!=typeof a&&(a=Ue(a)),t===1/0)return a;null==t&&(t=10);var o=Math.max(1,n*t/e.ticks().length);return function(e){var t=e/i(Math.round(r(e)));return t*n0?n[i-1]:e[0],i=n?[r[n-1],t]:[r[o-1],r[o]]},scale.copy=function(){return quantize_quantize().domain([e,t]).range(i)},linearish(scale)}function threshold_threshold(){var e=[.5],t=[0,1],n=1;function scale(r){if(r<=r)return t[x(e,r,0,n)]}return scale.domain=function(r){return arguments.length?(e=I.call(r),n=Math.min(e.length,t.length-1),scale):e.slice()},scale.range=function(r){return arguments.length?(t=I.call(r),n=Math.min(e.length,t.length-1),scale):t.slice()},scale.invertExtent=function(n){var r=t.indexOf(n);return[e[r-1],e[r]]},scale.copy=function(){return threshold_threshold().domain(e).range(t)},scale}var Je=new Date,et=new Date;function newInterval(e,t,n,r){function interval(t){return e(t=new Date(+t)),t}return interval.floor=interval,interval.ceil=function(n){return e(n=new Date(n-1)),t(n,1),e(n),n},interval.round=function(e){var t=interval(e),n=interval.ceil(e);return e-t0))return o;do{o.push(a=new Date(+n)),t(n,i),e(n)}while(a=t)for(;e(t),!n(t);)t.setTime(t-1)},function(e,r){if(e>=e)if(r<0)for(;++r<=0;)for(;t(e,-1),!n(e););else for(;--r>=0;)for(;t(e,1),!n(e););})},n&&(interval.count=function(t,r){return Je.setTime(+t),et.setTime(+r),e(Je),e(et),Math.floor(n(Je,et))},interval.every=function(e){return e=Math.floor(e),isFinite(e)&&e>0?e>1?interval.filter(r?function(t){return r(t)%e==0}:function(t){return interval.count(0,t)%e==0}):interval:null}),interval}var tt=newInterval(function(){},function(e,t){e.setTime(+e+t)},function(e,t){return t-e});tt.every=function(e){return e=Math.floor(e),isFinite(e)&&e>0?e>1?newInterval(function(t){t.setTime(Math.floor(t/e)*e)},function(t,n){t.setTime(+t+n*e)},function(t,n){return(n-t)/e}):tt:null};var nt=tt,rt=(tt.range,6e4),it=6048e5,at=newInterval(function(e){e.setTime(1e3*Math.floor(e/1e3))},function(e,t){e.setTime(+e+1e3*t)},function(e,t){return(t-e)/1e3},function(e){return e.getUTCSeconds()}),ot=at,ut=(at.range,newInterval(function(e){e.setTime(Math.floor(e/rt)*rt)},function(e,t){e.setTime(+e+t*rt)},function(e,t){return(t-e)/rt},function(e){return e.getMinutes()})),ct=ut,st=(ut.range,newInterval(function(e){var t=e.getTimezoneOffset()*rt%36e5;t<0&&(t+=36e5),e.setTime(36e5*Math.floor((+e-t)/36e5)+t)},function(e,t){e.setTime(+e+36e5*t)},function(e,t){return(t-e)/36e5},function(e){return e.getHours()})),lt=st,ft=(st.range,newInterval(function(e){e.setHours(0,0,0,0)},function(e,t){e.setDate(e.getDate()+t)},function(e,t){return(t-e-(t.getTimezoneOffset()-e.getTimezoneOffset())*rt)/864e5},function(e){return e.getDate()-1})),ht=ft;ft.range;function weekday(e){return newInterval(function(t){t.setDate(t.getDate()-(t.getDay()+7-e)%7),t.setHours(0,0,0,0)},function(e,t){e.setDate(e.getDate()+7*t)},function(e,t){return(t-e-(t.getTimezoneOffset()-e.getTimezoneOffset())*rt)/it})}var dt=weekday(0),pt=weekday(1),yt=weekday(2),gt=weekday(3),vt=weekday(4),mt=weekday(5),bt=weekday(6),_t=(dt.range,pt.range,yt.range,gt.range,vt.range,mt.range,bt.range,newInterval(function(e){e.setDate(1),e.setHours(0,0,0,0)},function(e,t){e.setMonth(e.getMonth()+t)},function(e,t){return t.getMonth()-e.getMonth()+12*(t.getFullYear()-e.getFullYear())},function(e){return e.getMonth()})),xt=_t,wt=(_t.range,newInterval(function(e){e.setMonth(0,1),e.setHours(0,0,0,0)},function(e,t){e.setFullYear(e.getFullYear()+t)},function(e,t){return t.getFullYear()-e.getFullYear()},function(e){return e.getFullYear()}));wt.every=function(e){return isFinite(e=Math.floor(e))&&e>0?newInterval(function(t){t.setFullYear(Math.floor(t.getFullYear()/e)*e),t.setMonth(0,1),t.setHours(0,0,0,0)},function(t,n){t.setFullYear(t.getFullYear()+n*e)}):null};var kt=wt,Ct=(wt.range,newInterval(function(e){e.setUTCSeconds(0,0)},function(e,t){e.setTime(+e+t*rt)},function(e,t){return(t-e)/rt},function(e){return e.getUTCMinutes()})),St=(Ct.range,newInterval(function(e){e.setUTCMinutes(0,0,0)},function(e,t){e.setTime(+e+36e5*t)},function(e,t){return(t-e)/36e5},function(e){return e.getUTCHours()})),Pt=(St.range,newInterval(function(e){e.setUTCHours(0,0,0,0)},function(e,t){e.setUTCDate(e.getUTCDate()+t)},function(e,t){return(t-e)/864e5},function(e){return e.getUTCDate()-1})),At=Pt;Pt.range;function utcWeekday(e){return newInterval(function(t){t.setUTCDate(t.getUTCDate()-(t.getUTCDay()+7-e)%7),t.setUTCHours(0,0,0,0)},function(e,t){e.setUTCDate(e.getUTCDate()+7*t)},function(e,t){return(t-e)/it})}var Et=utcWeekday(0),Mt=utcWeekday(1),Ot=utcWeekday(2),Tt=utcWeekday(3),Ft=utcWeekday(4),Nt=utcWeekday(5),jt=utcWeekday(6),It=(Et.range,Mt.range,Ot.range,Tt.range,Ft.range,Nt.range,jt.range,newInterval(function(e){e.setUTCDate(1),e.setUTCHours(0,0,0,0)},function(e,t){e.setUTCMonth(e.getUTCMonth()+t)},function(e,t){return t.getUTCMonth()-e.getUTCMonth()+12*(t.getUTCFullYear()-e.getUTCFullYear())},function(e){return e.getUTCMonth()})),Dt=(It.range,newInterval(function(e){e.setUTCMonth(0,1),e.setUTCHours(0,0,0,0)},function(e,t){e.setUTCFullYear(e.getUTCFullYear()+t)},function(e,t){return t.getUTCFullYear()-e.getUTCFullYear()},function(e){return e.getUTCFullYear()}));Dt.every=function(e){return isFinite(e=Math.floor(e))&&e>0?newInterval(function(t){t.setUTCFullYear(Math.floor(t.getUTCFullYear()/e)*e),t.setUTCMonth(0,1),t.setUTCHours(0,0,0,0)},function(t,n){t.setUTCFullYear(t.getUTCFullYear()+n*e)}):null};var Lt=Dt;Dt.range;function localDate(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 utcDate(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 newYear(e){return{y:e,m:0,d:1,H:0,M:0,S:0,L:0}}var Rt,Bt,zt,Ht,Vt={"-":"",_:" ",0:"0"},Ut=/^\s*\d+/,Wt=/^%/,qt=/[\\^$*+?|[\]().{}]/g;function locale_pad(e,t,n){var r=e<0?"-":"",i=(r?-e:e)+"",a=i.length;return r+(a68?1900:2e3),n+r[0].length):-1}function parseZone(e,t,n){var r=/^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(t.slice(n,n+6));return r?(e.Z=r[1]?0:-(r[2]+(r[3]||"00")),n+r[0].length):-1}function parseMonthNumber(e,t,n){var r=Ut.exec(t.slice(n,n+2));return r?(e.m=r[0]-1,n+r[0].length):-1}function parseDayOfMonth(e,t,n){var r=Ut.exec(t.slice(n,n+2));return r?(e.d=+r[0],n+r[0].length):-1}function parseDayOfYear(e,t,n){var r=Ut.exec(t.slice(n,n+3));return r?(e.m=0,e.d=+r[0],n+r[0].length):-1}function parseHour24(e,t,n){var r=Ut.exec(t.slice(n,n+2));return r?(e.H=+r[0],n+r[0].length):-1}function parseMinutes(e,t,n){var r=Ut.exec(t.slice(n,n+2));return r?(e.M=+r[0],n+r[0].length):-1}function parseSeconds(e,t,n){var r=Ut.exec(t.slice(n,n+2));return r?(e.S=+r[0],n+r[0].length):-1}function parseMilliseconds(e,t,n){var r=Ut.exec(t.slice(n,n+3));return r?(e.L=+r[0],n+r[0].length):-1}function parseMicroseconds(e,t,n){var r=Ut.exec(t.slice(n,n+6));return r?(e.L=Math.floor(r[0]/1e3),n+r[0].length):-1}function parseLiteralPercent(e,t,n){var r=Wt.exec(t.slice(n,n+1));return r?n+r[0].length:-1}function parseUnixTimestamp(e,t,n){var r=Ut.exec(t.slice(n));return r?(e.Q=+r[0],n+r[0].length):-1}function parseUnixTimestampSeconds(e,t,n){var r=Ut.exec(t.slice(n));return r?(e.Q=1e3*+r[0],n+r[0].length):-1}function formatDayOfMonth(e,t){return locale_pad(e.getDate(),t,2)}function formatHour24(e,t){return locale_pad(e.getHours(),t,2)}function formatHour12(e,t){return locale_pad(e.getHours()%12||12,t,2)}function formatDayOfYear(e,t){return locale_pad(1+ht.count(kt(e),e),t,3)}function formatMilliseconds(e,t){return locale_pad(e.getMilliseconds(),t,3)}function formatMicroseconds(e,t){return formatMilliseconds(e,t)+"000"}function formatMonthNumber(e,t){return locale_pad(e.getMonth()+1,t,2)}function formatMinutes(e,t){return locale_pad(e.getMinutes(),t,2)}function formatSeconds(e,t){return locale_pad(e.getSeconds(),t,2)}function formatWeekdayNumberMonday(e){var t=e.getDay();return 0===t?7:t}function formatWeekNumberSunday(e,t){return locale_pad(dt.count(kt(e),e),t,2)}function formatWeekNumberISO(e,t){var n=e.getDay();return e=n>=4||0===n?vt(e):vt.ceil(e),locale_pad(vt.count(kt(e),e)+(4===kt(e).getDay()),t,2)}function formatWeekdayNumberSunday(e){return e.getDay()}function formatWeekNumberMonday(e,t){return locale_pad(pt.count(kt(e),e),t,2)}function locale_formatYear(e,t){return locale_pad(e.getFullYear()%100,t,2)}function formatFullYear(e,t){return locale_pad(e.getFullYear()%1e4,t,4)}function formatZone(e){var t=e.getTimezoneOffset();return(t>0?"-":(t*=-1,"+"))+locale_pad(t/60|0,"0",2)+locale_pad(t%60,"0",2)}function formatUTCDayOfMonth(e,t){return locale_pad(e.getUTCDate(),t,2)}function formatUTCHour24(e,t){return locale_pad(e.getUTCHours(),t,2)}function formatUTCHour12(e,t){return locale_pad(e.getUTCHours()%12||12,t,2)}function formatUTCDayOfYear(e,t){return locale_pad(1+At.count(Lt(e),e),t,3)}function formatUTCMilliseconds(e,t){return locale_pad(e.getUTCMilliseconds(),t,3)}function formatUTCMicroseconds(e,t){return formatUTCMilliseconds(e,t)+"000"}function formatUTCMonthNumber(e,t){return locale_pad(e.getUTCMonth()+1,t,2)}function formatUTCMinutes(e,t){return locale_pad(e.getUTCMinutes(),t,2)}function formatUTCSeconds(e,t){return locale_pad(e.getUTCSeconds(),t,2)}function formatUTCWeekdayNumberMonday(e){var t=e.getUTCDay();return 0===t?7:t}function formatUTCWeekNumberSunday(e,t){return locale_pad(Et.count(Lt(e),e),t,2)}function formatUTCWeekNumberISO(e,t){var n=e.getUTCDay();return e=n>=4||0===n?Ft(e):Ft.ceil(e),locale_pad(Ft.count(Lt(e),e)+(4===Lt(e).getUTCDay()),t,2)}function formatUTCWeekdayNumberSunday(e){return e.getUTCDay()}function formatUTCWeekNumberMonday(e,t){return locale_pad(Mt.count(Lt(e),e),t,2)}function formatUTCYear(e,t){return locale_pad(e.getUTCFullYear()%100,t,2)}function formatUTCFullYear(e,t){return locale_pad(e.getUTCFullYear()%1e4,t,4)}function formatUTCZone(){return"+0000"}function formatLiteralPercent(){return"%"}function formatUnixTimestamp(e){return+e}function formatUnixTimestampSeconds(e){return Math.floor(+e/1e3)}!function defaultLocale_defaultLocale(e){return Rt=function formatLocale(e){var t=e.dateTime,n=e.date,r=e.time,i=e.periods,a=e.days,o=e.shortDays,u=e.months,c=e.shortMonths,s=formatRe(i),l=formatLookup(i),f=formatRe(a),h=formatLookup(a),d=formatRe(o),p=formatLookup(o),y=formatRe(u),g=formatLookup(u),v=formatRe(c),m=formatLookup(c),b={a:function formatShortWeekday(e){return o[e.getDay()]},A:function formatWeekday(e){return a[e.getDay()]},b:function formatShortMonth(e){return c[e.getMonth()]},B:function formatMonth(e){return u[e.getMonth()]},c:null,d:formatDayOfMonth,e:formatDayOfMonth,f:formatMicroseconds,H:formatHour24,I:formatHour12,j:formatDayOfYear,L:formatMilliseconds,m:formatMonthNumber,M:formatMinutes,p:function formatPeriod(e){return i[+(e.getHours()>=12)]},Q:formatUnixTimestamp,s:formatUnixTimestampSeconds,S:formatSeconds,u:formatWeekdayNumberMonday,U:formatWeekNumberSunday,V:formatWeekNumberISO,w:formatWeekdayNumberSunday,W:formatWeekNumberMonday,x:null,X:null,y:locale_formatYear,Y:formatFullYear,Z:formatZone,"%":formatLiteralPercent},_={a:function formatUTCShortWeekday(e){return o[e.getUTCDay()]},A:function formatUTCWeekday(e){return a[e.getUTCDay()]},b:function formatUTCShortMonth(e){return c[e.getUTCMonth()]},B:function formatUTCMonth(e){return u[e.getUTCMonth()]},c:null,d:formatUTCDayOfMonth,e:formatUTCDayOfMonth,f:formatUTCMicroseconds,H:formatUTCHour24,I:formatUTCHour12,j:formatUTCDayOfYear,L:formatUTCMilliseconds,m:formatUTCMonthNumber,M:formatUTCMinutes,p:function formatUTCPeriod(e){return i[+(e.getUTCHours()>=12)]},Q:formatUnixTimestamp,s:formatUnixTimestampSeconds,S:formatUTCSeconds,u:formatUTCWeekdayNumberMonday,U:formatUTCWeekNumberSunday,V:formatUTCWeekNumberISO,w:formatUTCWeekdayNumberSunday,W:formatUTCWeekNumberMonday,x:null,X:null,y:formatUTCYear,Y:formatUTCFullYear,Z:formatUTCZone,"%":formatLiteralPercent},x={a:function parseShortWeekday(e,t,n){var r=d.exec(t.slice(n));return r?(e.w=p[r[0].toLowerCase()],n+r[0].length):-1},A:function parseWeekday(e,t,n){var r=f.exec(t.slice(n));return r?(e.w=h[r[0].toLowerCase()],n+r[0].length):-1},b:function parseShortMonth(e,t,n){var r=v.exec(t.slice(n));return r?(e.m=m[r[0].toLowerCase()],n+r[0].length):-1},B:function parseMonth(e,t,n){var r=y.exec(t.slice(n));return r?(e.m=g[r[0].toLowerCase()],n+r[0].length):-1},c:function parseLocaleDateTime(e,n,r){return parseSpecifier(e,t,n,r)},d:parseDayOfMonth,e:parseDayOfMonth,f:parseMicroseconds,H:parseHour24,I:parseHour24,j:parseDayOfYear,L:parseMilliseconds,m:parseMonthNumber,M:parseMinutes,p:function parsePeriod(e,t,n){var r=s.exec(t.slice(n));return r?(e.p=l[r[0].toLowerCase()],n+r[0].length):-1},Q:parseUnixTimestamp,s:parseUnixTimestampSeconds,S:parseSeconds,u:parseWeekdayNumberMonday,U:parseWeekNumberSunday,V:parseWeekNumberISO,w:parseWeekdayNumberSunday,W:parseWeekNumberMonday,x:function parseLocaleDate(e,t,r){return parseSpecifier(e,n,t,r)},X:function parseLocaleTime(e,t,n){return parseSpecifier(e,r,t,n)},y:parseYear,Y:parseFullYear,Z:parseZone,"%":parseLiteralPercent};function newFormat(e,t){return function(n){var r,i,a,o=[],u=-1,c=0,s=e.length;for(n instanceof Date||(n=new Date(+n));++u53)return null;"w"in a||(a.w=1),"Z"in a?(r=(i=(r=utcDate(newYear(a.y))).getUTCDay())>4||0===i?Mt.ceil(r):Mt(r),r=At.offset(r,7*(a.V-1)),a.y=r.getUTCFullYear(),a.m=r.getUTCMonth(),a.d=r.getUTCDate()+(a.w+6)%7):(r=(i=(r=t(newYear(a.y))).getDay())>4||0===i?pt.ceil(r):pt(r),r=ht.offset(r,7*(a.V-1)),a.y=r.getFullYear(),a.m=r.getMonth(),a.d=r.getDate()+(a.w+6)%7)}else("W"in a||"U"in a)&&("w"in a||(a.w="u"in a?a.u%7:"W"in a?1:0),i="Z"in a?utcDate(newYear(a.y)).getUTCDay():t(newYear(a.y)).getDay(),a.m=0,a.d="W"in a?(a.w+6)%7+7*a.W-(i+5)%7:a.w+7*a.U-(i+6)%7);return"Z"in a?(a.H+=a.Z/100|0,a.M+=a.Z%100,utcDate(a)):t(a)}}function parseSpecifier(e,t,n,r){for(var i,a,o=0,u=t.length,c=n.length;o=c)return-1;if(37===(i=t.charCodeAt(o++))){if(i=t.charAt(o++),!(a=x[i in Vt?t.charAt(o++):i])||(r=a(e,n,r))<0)return-1}else if(i!=n.charCodeAt(r++))return-1}return r}return b.x=newFormat(n,b),b.X=newFormat(r,b),b.c=newFormat(t,b),_.x=newFormat(n,_),_.X=newFormat(r,_),_.c=newFormat(t,_),{format:function format(e){var t=newFormat(e+="",b);return t.toString=function(){return e},t},parse:function parse(e){var t=newParse(e+="",localDate);return t.toString=function(){return e},t},utcFormat:function utcFormat(e){var t=newFormat(e+="",_);return t.toString=function(){return e},t},utcParse:function utcParse(e){var t=newParse(e,utcDate);return t.toString=function(){return e},t}}}(e),Bt=Rt.format,Rt.parse,zt=Rt.utcFormat,Ht=Rt.utcParse,Rt}({dateTime:"%x, %X",date:"%-m/%-d/%Y",time:"%-I:%M:%S %p",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"]});Date.prototype.toISOString||zt("%Y-%m-%dT%H:%M:%S.%LZ");+new Date("2000-01-01T00:00:00.000Z")||Ht("%Y-%m-%dT%H:%M:%S.%LZ");var Gt=1e3,Yt=60*Gt,Xt=60*Yt,Kt=24*Xt,$t=7*Kt,Qt=30*Kt,Zt=365*Kt;function time_date(e){return new Date(e)}function time_number(e){return e instanceof Date?+e:+new Date(+e)}function calendar(e,t,n,r,i,a,o,u,c){var s=continuous(deinterpolateLinear,ge),l=s.invert,f=s.domain,h=c(".%L"),d=c(":%S"),p=c("%I:%M"),y=c("%I %p"),g=c("%a %d"),v=c("%b %d"),b=c("%B"),_=c("%Y"),x=[[o,1,Gt],[o,5,5*Gt],[o,15,15*Gt],[o,30,30*Gt],[a,1,Yt],[a,5,5*Yt],[a,15,15*Yt],[a,30,30*Yt],[i,1,Xt],[i,3,3*Xt],[i,6,6*Xt],[i,12,12*Xt],[r,1,Kt],[r,2,2*Kt],[n,1,$t],[t,1,Qt],[t,3,3*Qt],[e,1,Zt]];function tickFormat(u){return(o(u)1)&&(e-=Math.floor(e));var t=Math.abs(e-.5);return $n.h=360*e-100,$n.s=1.5-1.5*t,$n.l=.8-.9*t,$n+""};color_rgb(),Math.PI,Math.PI;function viridis_ramp(e){var t=e.length;return function(n){return e[Math.max(0,Math.min(t-1,Math.floor(n*t)))]}}var Zn=viridis_ramp(an("44015444025645045745055946075a46085c460a5d460b5e470d60470e6147106347116447136548146748166848176948186a481a6c481b6d481c6e481d6f481f70482071482173482374482475482576482677482878482979472a7a472c7a472d7b472e7c472f7d46307e46327e46337f463480453581453781453882443983443a83443b84433d84433e85423f854240864241864142874144874045884046883f47883f48893e49893e4a893e4c8a3d4d8a3d4e8a3c4f8a3c508b3b518b3b528b3a538b3a548c39558c39568c38588c38598c375a8c375b8d365c8d365d8d355e8d355f8d34608d34618d33628d33638d32648e32658e31668e31678e31688e30698e306a8e2f6b8e2f6c8e2e6d8e2e6e8e2e6f8e2d708e2d718e2c718e2c728e2c738e2b748e2b758e2a768e2a778e2a788e29798e297a8e297b8e287c8e287d8e277e8e277f8e27808e26818e26828e26828e25838e25848e25858e24868e24878e23888e23898e238a8d228b8d228c8d228d8d218e8d218f8d21908d21918c20928c20928c20938c1f948c1f958b1f968b1f978b1f988b1f998a1f9a8a1e9b8a1e9c891e9d891f9e891f9f881fa0881fa1881fa1871fa28720a38620a48621a58521a68522a78522a88423a98324aa8325ab8225ac8226ad8127ad8128ae8029af7f2ab07f2cb17e2db27d2eb37c2fb47c31b57b32b67a34b67935b77937b87838b9773aba763bbb753dbc743fbc7340bd7242be7144bf7046c06f48c16e4ac16d4cc26c4ec36b50c46a52c56954c56856c66758c7655ac8645cc8635ec96260ca6063cb5f65cb5e67cc5c69cd5b6ccd5a6ece5870cf5773d05675d05477d1537ad1517cd2507fd34e81d34d84d44b86d54989d5488bd6468ed64590d74393d74195d84098d83e9bd93c9dd93ba0da39a2da37a5db36a8db34aadc32addc30b0dd2fb2dd2db5de2bb8de29bade28bddf26c0df25c2df23c5e021c8e020cae11fcde11dd0e11cd2e21bd5e21ad8e219dae319dde318dfe318e2e418e5e419e7e419eae51aece51befe51cf1e51df4e61ef6e620f8e621fbe723fde725")),Jn=viridis_ramp(an("00000401000501010601010802010902020b02020d03030f03031204041405041606051806051a07061c08071e0907200a08220b09240c09260d0a290e0b2b100b2d110c2f120d31130d34140e36150e38160f3b180f3d19103f1a10421c10441d11471e114920114b21114e22115024125325125527125829115a2a115c2c115f2d11612f116331116533106734106936106b38106c390f6e3b0f703d0f713f0f72400f74420f75440f764510774710784910784a10794c117a4e117b4f127b51127c52137c54137d56147d57157e59157e5a167e5c167f5d177f5f187f601880621980641a80651a80671b80681c816a1c816b1d816d1d816e1e81701f81721f817320817521817621817822817922827b23827c23827e24828025828125818326818426818627818827818928818b29818c29818e2a81902a81912b81932b80942c80962c80982d80992d809b2e7f9c2e7f9e2f7fa02f7fa1307ea3307ea5317ea6317da8327daa337dab337cad347cae347bb0357bb2357bb3367ab5367ab73779b83779ba3878bc3978bd3977bf3a77c03a76c23b75c43c75c53c74c73d73c83e73ca3e72cc3f71cd4071cf4070d0416fd2426fd3436ed5446dd6456cd8456cd9466bdb476adc4869de4968df4a68e04c67e24d66e34e65e44f64e55064e75263e85362e95462ea5661eb5760ec5860ed5a5fee5b5eef5d5ef05f5ef1605df2625df2645cf3655cf4675cf4695cf56b5cf66c5cf66e5cf7705cf7725cf8745cf8765cf9785df9795df97b5dfa7d5efa7f5efa815ffb835ffb8560fb8761fc8961fc8a62fc8c63fc8e64fc9065fd9266fd9467fd9668fd9869fd9a6afd9b6bfe9d6cfe9f6dfea16efea36ffea571fea772fea973feaa74feac76feae77feb078feb27afeb47bfeb67cfeb77efeb97ffebb81febd82febf84fec185fec287fec488fec68afec88cfeca8dfecc8ffecd90fecf92fed194fed395fed597fed799fed89afdda9cfddc9efddea0fde0a1fde2a3fde3a5fde5a7fde7a9fde9aafdebacfcecaefceeb0fcf0b2fcf2b4fcf4b6fcf6b8fcf7b9fcf9bbfcfbbdfcfdbf")),er=viridis_ramp(an("00000401000501010601010802010a02020c02020e03021004031204031405041706041907051b08051d09061f0a07220b07240c08260d08290e092b10092d110a30120a32140b34150b37160b39180c3c190c3e1b0c411c0c431e0c451f0c48210c4a230c4c240c4f260c51280b53290b552b0b572d0b592f0a5b310a5c320a5e340a5f3609613809623909633b09643d09653e0966400a67420a68440a68450a69470b6a490b6a4a0c6b4c0c6b4d0d6c4f0d6c510e6c520e6d540f6d550f6d57106e59106e5a116e5c126e5d126e5f136e61136e62146e64156e65156e67166e69166e6a176e6c186e6d186e6f196e71196e721a6e741a6e751b6e771c6d781c6d7a1d6d7c1d6d7d1e6d7f1e6c801f6c82206c84206b85216b87216b88226a8a226a8c23698d23698f24699025689225689326679526679727669827669a28659b29649d29649f2a63a02a63a22b62a32c61a52c60a62d60a82e5fa92e5eab2f5ead305dae305cb0315bb1325ab3325ab43359b63458b73557b93556ba3655bc3754bd3853bf3952c03a51c13a50c33b4fc43c4ec63d4dc73e4cc83f4bca404acb4149cc4248ce4347cf4446d04545d24644d34743d44842d54a41d74b3fd84c3ed94d3dda4e3cdb503bdd513ade5238df5337e05536e15635e25734e35933e45a31e55c30e65d2fe75e2ee8602de9612bea632aeb6429eb6628ec6726ed6925ee6a24ef6c23ef6e21f06f20f1711ff1731df2741cf3761bf37819f47918f57b17f57d15f67e14f68013f78212f78410f8850ff8870ef8890cf98b0bf98c0af98e09fa9008fa9207fa9407fb9606fb9706fb9906fb9b06fb9d07fc9f07fca108fca309fca50afca60cfca80dfcaa0ffcac11fcae12fcb014fcb216fcb418fbb61afbb81dfbba1ffbbc21fbbe23fac026fac228fac42afac62df9c72ff9c932f9cb35f8cd37f8cf3af7d13df7d340f6d543f6d746f5d949f5db4cf4dd4ff4df53f4e156f3e35af3e55df2e661f2e865f2ea69f1ec6df1ed71f1ef75f1f179f2f27df2f482f3f586f3f68af4f88ef5f992f6fa96f8fb9af9fc9dfafda1fcffa4")),tr=viridis_ramp(an("0d088710078813078916078a19068c1b068d1d068e20068f2206902406912605912805922a05932c05942e05952f059631059733059735049837049938049a3a049a3c049b3e049c3f049c41049d43039e44039e46039f48039f4903a04b03a14c02a14e02a25002a25102a35302a35502a45601a45801a45901a55b01a55c01a65e01a66001a66100a76300a76400a76600a76700a86900a86a00a86c00a86e00a86f00a87100a87201a87401a87501a87701a87801a87a02a87b02a87d03a87e03a88004a88104a78305a78405a78606a68707a68808a68a09a58b0aa58d0ba58e0ca48f0da4910ea3920fa39410a29511a19613a19814a099159f9a169f9c179e9d189d9e199da01a9ca11b9ba21d9aa31e9aa51f99a62098a72197a82296aa2395ab2494ac2694ad2793ae2892b02991b12a90b22b8fb32c8eb42e8db52f8cb6308bb7318ab83289ba3388bb3488bc3587bd3786be3885bf3984c03a83c13b82c23c81c33d80c43e7fc5407ec6417dc7427cc8437bc9447aca457acb4679cc4778cc4977cd4a76ce4b75cf4c74d04d73d14e72d24f71d35171d45270d5536fd5546ed6556dd7566cd8576bd9586ada5a6ada5b69db5c68dc5d67dd5e66de5f65de6164df6263e06363e16462e26561e26660e3685fe4695ee56a5de56b5de66c5ce76e5be76f5ae87059e97158e97257ea7457eb7556eb7655ec7754ed7953ed7a52ee7b51ef7c51ef7e50f07f4ff0804ef1814df1834cf2844bf3854bf3874af48849f48948f58b47f58c46f68d45f68f44f79044f79143f79342f89441f89540f9973ff9983ef99a3efa9b3dfa9c3cfa9e3bfb9f3afba139fba238fca338fca537fca636fca835fca934fdab33fdac33fdae32fdaf31fdb130fdb22ffdb42ffdb52efeb72dfeb82cfeba2cfebb2bfebd2afebe2afec029fdc229fdc328fdc527fdc627fdc827fdca26fdcb26fccd25fcce25fcd025fcd225fbd324fbd524fbd724fad824fada24f9dc24f9dd25f8df25f8e125f7e225f7e425f6e626f6e826f5e926f5eb27f4ed27f3ee27f3f027f2f227f1f426f1f525f0f724f0f921")),nr={ROW_ID:"__id__"},rr={ACTION_INF:"actionInf",ON_LAYER_DRAW:"onlayerdraw"},ir=n(0),ar=n.n(ir),or=Array.prototype.slice,ur=function(e){return e},cr=1,sr=2,lr=3,fr=4,hr=1e-6;function translateX(e){return"translate("+(e+.5)+",0)"}function translateY(e){return"translate(0,"+(e+.5)+")"}function entering(){return!this.__axis}function axis_axis(e,t){var n=[],r=null,i=null,a=null,o=6,u=6,c=3,s=e===cr||e===fr?-1:1,l=e===fr||e===sr?"x":"y",f=e===cr||e===lr?translateX:translateY;function axis(h){var d=null==r?t.ticks?t.ticks.apply(t,n):t.domain():r,p=null==i?t.tickFormat?t.tickFormat.apply(t,n):ur:i,y=Math.max(o,0)+c,g=t.range(),v=+g[0]+.5,m=+g[g.length-1]+.5,b=(t.bandwidth?function axis_center(e){var t=Math.max(0,e.bandwidth()-1)/2;return e.round()&&(t=Math.round(t)),function(n){return+e(n)+t}}:function axis_number(e){return function(t){return+e(t)}})(t.copy()),_=h.selection?h.selection():h,x=_.selectAll(".domain").data([null]),w=_.selectAll(".tick").data(d,t).order(),k=w.exit(),C=w.enter().append("g").attr("class","tick"),S=w.select("line"),P=w.select("text");x=x.merge(x.enter().insert("path",".tick").attr("class","domain").attr("stroke","#000")),w=w.merge(C),S=S.merge(C.append("line").attr("stroke","#000").attr(l+"2",s*o)),P=P.merge(C.append("text").attr("fill","#000").attr(l,s*y).attr("dy",e===cr?"0em":e===lr?"0.71em":"0.32em")).style("transform",a),h!==_&&(x=x.transition(h),w=w.transition(h),S=S.transition(h),P=P.transition(h),k=k.transition(h).attr("opacity",hr).attr("transform",function(e){return isFinite(e=b(e))?f(e):this.getAttribute("transform")}),C.attr("opacity",hr).attr("transform",function(e){var t=this.parentNode.__axis;return f(t&&isFinite(t=t(e))?t:b(e))})),k.remove(),x.attr("d",e===fr||e==sr?"M"+s*u+","+v+"H0.5V"+m+"H"+s*u:"M"+v+","+s*u+"V0.5H"+m+"V"+s*u),w.attr("opacity",1).attr("transform",function(e){return f(b(e))}),S.attr(l+"2",s*o),P.attr(l,s*y).text(p),_.filter(entering).attr("fill","none").attr("font-size",10).attr("font-family","sans-serif").attr("text-anchor",e===sr?"start":e===fr?"end":"middle"),_.each(function(){this.__axis=b})}return axis.scale=function(e){return arguments.length?(t=e,axis):t},axis.tickTransform=function(e){return arguments.length?(a=e,axis):a},axis.ticks=function(){return n=or.call(arguments),axis},axis.tickArguments=function(e){return arguments.length?(n=null==e?[]:or.call(e),axis):n.slice()},axis.tickValues=function(e){return arguments.length?(r=null==e?null:or.call(e),axis):r&&r.slice()},axis.tickFormat=function(e){return arguments.length?(i=e,axis):i},axis.tickSize=function(e){return arguments.length?(o=u=+e,axis):o},axis.tickSizeInner=function(e){return arguments.length?(o=+e,axis):o},axis.tickSizeOuter=function(e){return arguments.length?(u=+e,axis):u},axis.tickPadding=function(e){return arguments.length?(c=+e,axis):c},axis}var dr=Math.PI,pr=2*dr,yr=pr-1e-6;function Path(){this._x0=this._y0=this._x1=this._y1=null,this._=""}function path_path(){return new Path}Path.prototype=path_path.prototype={constructor:Path,moveTo:function moveTo(e,t){this._+="M"+(this._x0=this._x1=+e)+","+(this._y0=this._y1=+t)},closePath:function closePath(){null!==this._x1&&(this._x1=this._x0,this._y1=this._y0,this._+="Z")},lineTo:function lineTo(e,t){this._+="L"+(this._x1=+e)+","+(this._y1=+t)},quadraticCurveTo:function quadraticCurveTo(e,t,n,r){this._+="Q"+ +e+","+ +t+","+(this._x1=+n)+","+(this._y1=+r)},bezierCurveTo:function bezierCurveTo(e,t,n,r,i,a){this._+="C"+ +e+","+ +t+","+ +n+","+ +r+","+(this._x1=+i)+","+(this._y1=+a)},arcTo:function arcTo(e,t,n,r,i){e=+e,t=+t,n=+n,r=+r,i=+i;var a=this._x1,o=this._y1,u=n-e,c=r-t,s=a-e,l=o-t,f=s*s+l*l;if(i<0)throw new Error("negative radius: "+i);if(null===this._x1)this._+="M"+(this._x1=e)+","+(this._y1=t);else if(f>1e-6)if(Math.abs(l*u-c*s)>1e-6&&i){var h=n-a,d=r-o,p=u*u+c*c,y=h*h+d*d,g=Math.sqrt(p),v=Math.sqrt(f),m=i*Math.tan((dr-Math.acos((p+f-y)/(2*g*v)))/2),b=m/v,_=m/g;Math.abs(b-1)>1e-6&&(this._+="L"+(e+b*s)+","+(t+b*l)),this._+="A"+i+","+i+",0,0,"+ +(l*h>s*d)+","+(this._x1=e+_*u)+","+(this._y1=t+_*c)}else this._+="L"+(this._x1=e)+","+(this._y1=t);else;},arc:function arc(e,t,n,r,i,a){e=+e,t=+t;var o=(n=+n)*Math.cos(r),u=n*Math.sin(r),c=e+o,s=t+u,l=1^a,f=a?r-i:i-r;if(n<0)throw new Error("negative radius: "+n);null===this._x1?this._+="M"+c+","+s:(Math.abs(this._x1-c)>1e-6||Math.abs(this._y1-s)>1e-6)&&(this._+="L"+c+","+s),n&&(f<0&&(f=f%pr+pr),f>yr?this._+="A"+n+","+n+",0,1,"+l+","+(e-o)+","+(t-u)+"A"+n+","+n+",0,1,"+l+","+(this._x1=c)+","+(this._y1=s):f>1e-6&&(this._+="A"+n+","+n+",0,"+ +(f>=dr)+","+l+","+(this._x1=e+n*Math.cos(i))+","+(this._y1=t+n*Math.sin(i))))},rect:function rect(e,t,n,r){this._+="M"+(this._x0=this._x1=+e)+","+(this._y0=this._y1=+t)+"h"+ +n+"v"+ +r+"h"+-n+"Z"},toString:function toString(){return this._}};var gr=path_path,vr=function(e){return function constant(){return e}},mr=Math.abs,br=Math.atan2,_r=Math.cos,xr=Math.max,wr=Math.min,kr=Math.sin,Cr=Math.sqrt,Sr=1e-12,Pr=Math.PI,Ar=Pr/2,Er=2*Pr;function asin(e){return e>=1?Ar:e<=-1?-Ar:Math.asin(e)}function arcInnerRadius(e){return e.innerRadius}function arcOuterRadius(e){return e.outerRadius}function arcStartAngle(e){return e.startAngle}function arcEndAngle(e){return e.endAngle}function arcPadAngle(e){return e&&e.padAngle}function cornerTangents(e,t,n,r,i,a,o){var u=e-n,c=t-r,s=(o?a:-a)/Cr(u*u+c*c),l=s*c,f=-s*u,h=e+l,d=t+f,p=n+l,y=r+f,g=(h+p)/2,v=(d+y)/2,m=p-h,b=y-d,_=m*m+b*b,x=i-a,w=h*y-p*d,k=(b<0?-1:1)*Cr(xr(0,x*x*_-w*w)),C=(w*b-m*k)/_,S=(-w*m-b*k)/_,P=(w*b+m*k)/_,A=(-w*m+b*k)/_,E=C-g,M=S-v,O=P-g,T=A-v;return E*E+M*M>O*O+T*T&&(C=P,S=A),{cx:C,cy:S,x01:-l,y01:-f,x11:C*(i/x-1),y11:S*(i/x-1)}}function Linear(e){this._context=e}Linear.prototype={areaStart:function areaStart(){this._line=0},areaEnd:function areaEnd(){this._line=NaN},lineStart:function lineStart(){this._point=0},lineEnd:function lineEnd(){(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function point(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;default:this._context.lineTo(e,t)}}};var Mr=function(e){return new Linear(e)};function point_x(e){return e[0]}function point_y(e){return e[1]}var Or=function(){var e=point_x,t=point_y,n=vr(!0),r=null,i=Mr,a=null;function line(o){var u,c,s,l=o.length,f=!1;for(null==r&&(a=i(s=gr())),u=0;u<=l;++u)!(u=l;--f)u.point(g[f],v[f]);u.lineEnd(),u.areaEnd()}y&&(g[s]=+e(h,s,c),v[s]=+n(h,s,c),u.point(t?+t(h,s,c):g[s],r?+r(h,s,c):v[s]))}if(d)return u=null,d+""||null}function arealine(){return Or().defined(i).curve(o).context(a)}return area.x=function(n){return arguments.length?(e="function"==typeof n?n:vr(+n),t=null,area):e},area.x0=function(t){return arguments.length?(e="function"==typeof t?t:vr(+t),area):e},area.x1=function(e){return arguments.length?(t=null==e?null:"function"==typeof e?e:vr(+e),area):t},area.y=function(e){return arguments.length?(n="function"==typeof e?e:vr(+e),r=null,area):n},area.y0=function(e){return arguments.length?(n="function"==typeof e?e:vr(+e),area):n},area.y1=function(e){return arguments.length?(r=null==e?null:"function"==typeof e?e:vr(+e),area):r},area.lineX0=area.lineY0=function(){return arealine().x(e).y(n)},area.lineY1=function(){return arealine().x(e).y(r)},area.lineX1=function(){return arealine().x(t).y(n)},area.defined=function(e){return arguments.length?(i="function"==typeof e?e:vr(!!e),area):i},area.curve=function(e){return arguments.length?(o=e,null!=a&&(u=o(a)),area):o},area.context=function(e){return arguments.length?(null==e?a=u=null:u=o(a=e),area):a},area},Fr=function(e,t){return te?1:t>=e?0:NaN},Nr=function(e){return e};curveRadial(Mr);function Radial(e){this._curve=e}function curveRadial(e){function radial(t){return new Radial(e(t))}return radial._curve=e,radial}Radial.prototype={areaStart:function areaStart(){this._curve.areaStart()},areaEnd:function areaEnd(){this._curve.areaEnd()},lineStart:function lineStart(){this._curve.lineStart()},lineEnd:function lineEnd(){this._curve.lineEnd()},point:function point(e,t){this._curve.point(t*Math.sin(e),t*-Math.cos(e))}};var jr=Array.prototype.slice;var Ir={draw:function draw(e,t){var n=Math.sqrt(t/Pr);e.moveTo(n,0),e.arc(0,0,n,0,Er)}},Dr={draw:function draw(e,t){var n=Math.sqrt(t/5)/2;e.moveTo(-3*n,-n),e.lineTo(-n,-n),e.lineTo(-n,-3*n),e.lineTo(n,-3*n),e.lineTo(n,-n),e.lineTo(3*n,-n),e.lineTo(3*n,n),e.lineTo(n,n),e.lineTo(n,3*n),e.lineTo(-n,3*n),e.lineTo(-n,n),e.lineTo(-3*n,n),e.closePath()}},Lr=Math.sqrt(1/3),Rr=2*Lr,Br={draw:function draw(e,t){var n=Math.sqrt(t/Rr),r=n*Lr;e.moveTo(0,-n),e.lineTo(r,0),e.lineTo(0,n),e.lineTo(-r,0),e.closePath()}},zr=Math.sin(Pr/10)/Math.sin(7*Pr/10),Hr=Math.sin(Er/10)*zr,Vr=-Math.cos(Er/10)*zr,Ur={draw:function draw(e,t){var n=Math.sqrt(.8908130915292852*t),r=Hr*n,i=Vr*n;e.moveTo(0,-n),e.lineTo(r,i);for(var a=1;a<5;++a){var o=Er*a/5,u=Math.cos(o),c=Math.sin(o);e.lineTo(c*n,-u*n),e.lineTo(u*r-c*i,c*r+u*i)}e.closePath()}},Wr={draw:function draw(e,t){var n=Math.sqrt(t),r=-n/2;e.rect(r,r,n,n)}},qr=Math.sqrt(3),Gr={draw:function draw(e,t){var n=-Math.sqrt(t/(3*qr));e.moveTo(0,2*n),e.lineTo(-qr*n,-n),e.lineTo(qr*n,-n),e.closePath()}},Yr=Math.sqrt(3)/2,Xr=1/Math.sqrt(12),Kr=3*(Xr/2+1),$r={draw:function draw(e,t){var n=Math.sqrt(t/Kr),r=n/2,i=n*Xr,a=r,o=n*Xr+n,u=-a,c=o;e.moveTo(r,i),e.lineTo(a,o),e.lineTo(u,c),e.lineTo(-.5*r-Yr*i,Yr*r+-.5*i),e.lineTo(-.5*a-Yr*o,Yr*a+-.5*o),e.lineTo(-.5*u-Yr*c,Yr*u+-.5*c),e.lineTo(-.5*r+Yr*i,-.5*i-Yr*r),e.lineTo(-.5*a+Yr*o,-.5*o-Yr*a),e.lineTo(-.5*u+Yr*c,-.5*c-Yr*u),e.closePath()}},Qr=function(){};function _point(e,t,n){e._context.bezierCurveTo((2*e._x0+e._x1)/3,(2*e._y0+e._y1)/3,(e._x0+2*e._x1)/3,(e._y0+2*e._y1)/3,(e._x0+4*e._x1+t)/6,(e._y0+4*e._y1+n)/6)}function Basis(e){this._context=e}Basis.prototype={areaStart:function areaStart(){this._line=0},areaEnd:function areaEnd(){this._line=NaN},lineStart:function lineStart(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function lineEnd(){switch(this._point){case 3:_point(this,this._x1,this._y1);case 2:this._context.lineTo(this._x1,this._y1)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function point(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;break;case 2:this._point=3,this._context.lineTo((5*this._x0+this._x1)/6,(5*this._y0+this._y1)/6);default:_point(this,e,t)}this._x0=this._x1,this._x1=e,this._y0=this._y1,this._y1=t}};function BasisClosed(e){this._context=e}BasisClosed.prototype={areaStart:Qr,areaEnd:Qr,lineStart:function lineStart(){this._x0=this._x1=this._x2=this._x3=this._x4=this._y0=this._y1=this._y2=this._y3=this._y4=NaN,this._point=0},lineEnd:function lineEnd(){switch(this._point){case 1:this._context.moveTo(this._x2,this._y2),this._context.closePath();break;case 2:this._context.moveTo((this._x2+2*this._x3)/3,(this._y2+2*this._y3)/3),this._context.lineTo((this._x3+2*this._x2)/3,(this._y3+2*this._y2)/3),this._context.closePath();break;case 3:this.point(this._x2,this._y2),this.point(this._x3,this._y3),this.point(this._x4,this._y4)}},point:function point(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._x2=e,this._y2=t;break;case 1:this._point=2,this._x3=e,this._y3=t;break;case 2:this._point=3,this._x4=e,this._y4=t,this._context.moveTo((this._x0+4*this._x1+e)/6,(this._y0+4*this._y1+t)/6);break;default:_point(this,e,t)}this._x0=this._x1,this._x1=e,this._y0=this._y1,this._y1=t}};function BasisOpen(e){this._context=e}BasisOpen.prototype={areaStart:function areaStart(){this._line=0},areaEnd:function areaEnd(){this._line=NaN},lineStart:function lineStart(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function lineEnd(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function point(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3;var n=(this._x0+4*this._x1+e)/6,r=(this._y0+4*this._y1+t)/6;this._line?this._context.lineTo(n,r):this._context.moveTo(n,r);break;case 3:this._point=4;default:_point(this,e,t)}this._x0=this._x1,this._x1=e,this._y0=this._y1,this._y1=t}};function Bundle(e,t){this._basis=new Basis(e),this._beta=t}Bundle.prototype={lineStart:function lineStart(){this._x=[],this._y=[],this._basis.lineStart()},lineEnd:function lineEnd(){var e=this._x,t=this._y,n=e.length-1;if(n>0)for(var r,i=e[0],a=t[0],o=e[n]-i,u=t[n]-a,c=-1;++c<=n;)r=c/n,this._basis.point(this._beta*e[c]+(1-this._beta)*(i+r*o),this._beta*t[c]+(1-this._beta)*(a+r*u));this._x=this._y=null,this._basis.lineEnd()},point:function point(e,t){this._x.push(+e),this._y.push(+t)}};(function custom(e){function bundle(t){return 1===e?new Basis(t):new Bundle(t,e)}return bundle.beta=function(e){return custom(+e)},bundle})(.85);function cardinal_point(e,t,n){e._context.bezierCurveTo(e._x1+e._k*(e._x2-e._x0),e._y1+e._k*(e._y2-e._y0),e._x2+e._k*(e._x1-t),e._y2+e._k*(e._y1-n),e._x2,e._y2)}function Cardinal(e,t){this._context=e,this._k=(1-t)/6}Cardinal.prototype={areaStart:function areaStart(){this._line=0},areaEnd:function areaEnd(){this._line=NaN},lineStart:function lineStart(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},lineEnd:function lineEnd(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:cardinal_point(this,this._x1,this._y1)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function point(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2,this._x1=e,this._y1=t;break;case 2:this._point=3;default:cardinal_point(this,e,t)}this._x0=this._x1,this._x1=this._x2,this._x2=e,this._y0=this._y1,this._y1=this._y2,this._y2=t}};(function custom(e){function cardinal(t){return new Cardinal(t,e)}return cardinal.tension=function(e){return custom(+e)},cardinal})(0);function CardinalClosed(e,t){this._context=e,this._k=(1-t)/6}CardinalClosed.prototype={areaStart:Qr,areaEnd:Qr,lineStart:function lineStart(){this._x0=this._x1=this._x2=this._x3=this._x4=this._x5=this._y0=this._y1=this._y2=this._y3=this._y4=this._y5=NaN,this._point=0},lineEnd:function lineEnd(){switch(this._point){case 1:this._context.moveTo(this._x3,this._y3),this._context.closePath();break;case 2:this._context.lineTo(this._x3,this._y3),this._context.closePath();break;case 3:this.point(this._x3,this._y3),this.point(this._x4,this._y4),this.point(this._x5,this._y5)}},point:function point(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._x3=e,this._y3=t;break;case 1:this._point=2,this._context.moveTo(this._x4=e,this._y4=t);break;case 2:this._point=3,this._x5=e,this._y5=t;break;default:cardinal_point(this,e,t)}this._x0=this._x1,this._x1=this._x2,this._x2=e,this._y0=this._y1,this._y1=this._y2,this._y2=t}};(function custom(e){function cardinal(t){return new CardinalClosed(t,e)}return cardinal.tension=function(e){return custom(+e)},cardinal})(0);function CardinalOpen(e,t){this._context=e,this._k=(1-t)/6}CardinalOpen.prototype={areaStart:function areaStart(){this._line=0},areaEnd:function areaEnd(){this._line=NaN},lineStart:function lineStart(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},lineEnd:function lineEnd(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function point(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3,this._line?this._context.lineTo(this._x2,this._y2):this._context.moveTo(this._x2,this._y2);break;case 3:this._point=4;default:cardinal_point(this,e,t)}this._x0=this._x1,this._x1=this._x2,this._x2=e,this._y0=this._y1,this._y1=this._y2,this._y2=t}};(function custom(e){function cardinal(t){return new CardinalOpen(t,e)}return cardinal.tension=function(e){return custom(+e)},cardinal})(0);function catmullRom_point(e,t,n){var r=e._x1,i=e._y1,a=e._x2,o=e._y2;if(e._l01_a>Sr){var u=2*e._l01_2a+3*e._l01_a*e._l12_a+e._l12_2a,c=3*e._l01_a*(e._l01_a+e._l12_a);r=(r*u-e._x0*e._l12_2a+e._x2*e._l01_2a)/c,i=(i*u-e._y0*e._l12_2a+e._y2*e._l01_2a)/c}if(e._l23_a>Sr){var s=2*e._l23_2a+3*e._l23_a*e._l12_a+e._l12_2a,l=3*e._l23_a*(e._l23_a+e._l12_a);a=(a*s+e._x1*e._l23_2a-t*e._l12_2a)/l,o=(o*s+e._y1*e._l23_2a-n*e._l12_2a)/l}e._context.bezierCurveTo(r,i,a,o,e._x2,e._y2)}function CatmullRom(e,t){this._context=e,this._alpha=t}CatmullRom.prototype={areaStart:function areaStart(){this._line=0},areaEnd:function areaEnd(){this._line=NaN},lineStart:function lineStart(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function lineEnd(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:this.point(this._x2,this._y2)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function point(e,t){if(e=+e,t=+t,this._point){var n=this._x2-e,r=this._y2-t;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(n*n+r*r,this._alpha))}switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;break;case 2:this._point=3;default:catmullRom_point(this,e,t)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=e,this._y0=this._y1,this._y1=this._y2,this._y2=t}};var Zr=function custom(e){function catmullRom(t){return e?new CatmullRom(t,e):new Cardinal(t,0)}return catmullRom.alpha=function(e){return custom(+e)},catmullRom}(.5);function CatmullRomClosed(e,t){this._context=e,this._alpha=t}CatmullRomClosed.prototype={areaStart:Qr,areaEnd:Qr,lineStart:function lineStart(){this._x0=this._x1=this._x2=this._x3=this._x4=this._x5=this._y0=this._y1=this._y2=this._y3=this._y4=this._y5=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function lineEnd(){switch(this._point){case 1:this._context.moveTo(this._x3,this._y3),this._context.closePath();break;case 2:this._context.lineTo(this._x3,this._y3),this._context.closePath();break;case 3:this.point(this._x3,this._y3),this.point(this._x4,this._y4),this.point(this._x5,this._y5)}},point:function point(e,t){if(e=+e,t=+t,this._point){var n=this._x2-e,r=this._y2-t;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(n*n+r*r,this._alpha))}switch(this._point){case 0:this._point=1,this._x3=e,this._y3=t;break;case 1:this._point=2,this._context.moveTo(this._x4=e,this._y4=t);break;case 2:this._point=3,this._x5=e,this._y5=t;break;default:catmullRom_point(this,e,t)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=e,this._y0=this._y1,this._y1=this._y2,this._y2=t}};(function custom(e){function catmullRom(t){return e?new CatmullRomClosed(t,e):new CardinalClosed(t,0)}return catmullRom.alpha=function(e){return custom(+e)},catmullRom})(.5);function CatmullRomOpen(e,t){this._context=e,this._alpha=t}CatmullRomOpen.prototype={areaStart:function areaStart(){this._line=0},areaEnd:function areaEnd(){this._line=NaN},lineStart:function lineStart(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function lineEnd(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function point(e,t){if(e=+e,t=+t,this._point){var n=this._x2-e,r=this._y2-t;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(n*n+r*r,this._alpha))}switch(this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3,this._line?this._context.lineTo(this._x2,this._y2):this._context.moveTo(this._x2,this._y2);break;case 3:this._point=4;default:catmullRom_point(this,e,t)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=e,this._y0=this._y1,this._y1=this._y2,this._y2=t}};(function custom(e){function catmullRom(t){return e?new CatmullRomOpen(t,e):new CardinalOpen(t,0)}return catmullRom.alpha=function(e){return custom(+e)},catmullRom})(.5);function LinearClosed(e){this._context=e}LinearClosed.prototype={areaStart:Qr,areaEnd:Qr,lineStart:function lineStart(){this._point=0},lineEnd:function lineEnd(){this._point&&this._context.closePath()},point:function point(e,t){e=+e,t=+t,this._point?this._context.lineTo(e,t):(this._point=1,this._context.moveTo(e,t))}};function monotone_sign(e){return e<0?-1:1}function slope3(e,t,n){var r=e._x1-e._x0,i=t-e._x1,a=(e._y1-e._y0)/(r||i<0&&-0),o=(n-e._y1)/(i||r<0&&-0),u=(a*i+o*r)/(r+i);return(monotone_sign(a)+monotone_sign(o))*Math.min(Math.abs(a),Math.abs(o),.5*Math.abs(u))||0}function slope2(e,t){var n=e._x1-e._x0;return n?(3*(e._y1-e._y0)/n-t)/2:t}function monotone_point(e,t,n){var r=e._x0,i=e._y0,a=e._x1,o=e._y1,u=(a-r)/3;e._context.bezierCurveTo(r+u,i+u*t,a-u,o-u*n,a,o)}function MonotoneX(e){this._context=e}function MonotoneY(e){this._context=new ReflectContext(e)}function ReflectContext(e){this._context=e}function Natural(e){this._context=e}function controlPoints(e){var t,n,r=e.length-1,i=new Array(r),a=new Array(r),o=new Array(r);for(i[0]=0,a[0]=2,o[0]=e[0]+2*e[1],t=1;t=0;--t)i[t]=(o[t]-i[t+1])/a[t];for(a[r-1]=(e[r]+i[r-1])/2,t=0;t=0&&(this._t=1-this._t,this._line=1-this._line)},point:function point(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;default:if(this._t<=0)this._context.lineTo(this._x,t),this._context.lineTo(e,t);else{var n=this._x*(1-this._t)+e*this._t;this._context.lineTo(n,this._y),this._context.lineTo(n,t)}}this._x=e,this._y=t}};var Jr=function(e){return new Step(e,.5)};function stepBefore(e){return new Step(e,0)}function stepAfter(e){return new Step(e,1)}var ei=function(e,t){if((i=e.length)>1)for(var n,r,i,a=1,o=e[t[0]],u=o.length;a=0;)n[t]=t;return n};function stackValue(e,t){return e[t]}var ni=function(e){var t=e.map(ascending_sum);return ti(e).sort(function(e,n){return t[e]-t[n]})};function ascending_sum(e){for(var t,n=0,r=-1,i=e.length;++r0)){if(a/=h,h<0){if(a0){if(a>f)return;a>l&&(l=a)}if(a=r-c,h||!(a<0)){if(a/=h,h<0){if(a>f)return;a>l&&(l=a)}else if(h>0){if(a0)){if(a/=d,d<0){if(a0){if(a>f)return;a>l&&(l=a)}if(a=i-s,d||!(a<0)){if(a/=d,d<0){if(a>f)return;a>l&&(l=a)}else if(d>0){if(a0||f<1)||(l>0&&(e[0]=[c+l*h,s+l*d]),f<1&&(e[1]=[c+f*h,s+f*d]),!0)}}}}}function connectEdge(e,t,n,r,i){var a=e[1];if(a)return!0;var o,u,c=e[0],s=e.left,l=e.right,f=s[0],h=s[1],d=l[0],p=l[1],y=(f+d)/2,g=(h+p)/2;if(p===h){if(y=r)return;if(f>d){if(c){if(c[1]>=i)return}else c=[y,n];a=[y,i]}else{if(c){if(c[1]1)if(f>d){if(c){if(c[1]>=i)return}else c=[(n-u)/o,n];a=[(i-u)/o,i]}else{if(c){if(c[1]=r)return}else c=[t,o*t+u];a=[r,o*r+u]}else{if(c){if(c[0]=-Ai)){var d=c*c+s*s,p=l*l+f*f,y=(f*d-s*p)/h,g=(c*p-l*d)/h,v=_i.pop()||new function Circle(){RedBlackNode(this),this.x=this.y=this.arc=this.site=this.cy=null};v.arc=e,v.site=i,v.x=y+o,v.y=(v.cy=g+u)+Math.sqrt(y*y+g*g),e.circle=v;for(var m=null,b=Ci._;b;)if(v.yPi)u=u.L;else{if(!((i=a-rightBreakPoint(u,o))>Pi)){r>-Pi?(t=u.P,n=u):i>-Pi?(t=u,n=u.N):t=n=u;break}if(!u.R){t=u;break}u=u.R}!function createCell(e){return ki[e.index]={site:e,halfedges:[]}}(e);var c=createBeach(e);if(wi.insert(t,c),t||n){if(t===n)return detachCircle(t),n=createBeach(t.site),wi.insert(c,n),c.edge=n.edge=createEdge(t.site,c.site),attachCircle(t),void attachCircle(n);if(n){detachCircle(t),detachCircle(n);var s=t.site,l=s[0],f=s[1],h=e[0]-l,d=e[1]-f,p=n.site,y=p[0]-l,g=p[1]-f,v=2*(h*g-d*y),m=h*h+d*d,b=y*y+g*g,_=[(g*m-d*b)/v+l,(h*b-y*m)/v+f];setEdgeEnd(n.edge,s,p,_),c.edge=createEdge(s,e,null,_),n.edge=createEdge(e,p,null,_),attachCircle(t),attachCircle(n)}else c.edge=createEdge(t.site,c.site)}}function leftBreakPoint(e,t){var n=e.site,r=n[0],i=n[1],a=i-t;if(!a)return r;var o=e.P;if(!o)return-1/0;var u=(n=o.site)[0],c=n[1],s=c-t;if(!s)return u;var l=u-r,f=1/a-1/s,h=l/s;return f?(-h+Math.sqrt(h*h-2*f*(l*l/(-2*s)-c+s/2+i-a/2)))/f+r:(r+u)/2}function rightBreakPoint(e,t){var n=e.N;if(n)return leftBreakPoint(n,t);var r=e.site;return r[1]===t?r[0]:1/0}var wi,ki,Ci,Si,Pi=1e-6,Ai=1e-12;function triangleArea(e,t,n){return(e[0]-n[0])*(t[1]-e[1])-(e[0]-t[0])*(n[1]-e[1])}function lexicographic(e,t){return t[1]-e[1]||t[0]-e[0]}function Diagram(e,t){var n,r,i,a=e.sort(lexicographic).pop();for(Si=[],ki=new Array(e.length),wi=new mi,Ci=new mi;;)if(i=bi,a&&(!i||a[1]Pi||Math.abs(i[0][1]-i[1][1])>Pi)||delete Si[a]}(o,u,c,s),function clipCells(e,t,n,r){var i,a,o,u,c,s,l,f,h,d,p,y,g=ki.length,v=!0;for(i=0;iPi||Math.abs(y-h)>Pi)&&(c.splice(u,0,Si.push(createBorderEdge(o,d,Math.abs(p-e)Pi?[e,Math.abs(f-e)Pi?[Math.abs(h-r)Pi?[n,Math.abs(f-n)Pi?[Math.abs(h-t)=u)return null;var c=e-i.site[0],s=t-i.site[1],l=c*c+s*s;do{i=a.cells[r=o],o=null,i.halfedges.forEach(function(n){var r=a.edges[n],u=r.left;if(u!==i.site&&u||(u=r.right)){var c=e-u[0],s=t-u[1],f=c*c+s*s;ft?0===i?i:"left"===n?i-1:i:i===e.length-1?i:"left"===n?i:i+1},Gi=(requestAnimationFrame,cancelAnimationFrame,function getQualifiedClassName(e,t,n){return[n+"-"+(e=e.replace(/^\.*/,"")),n+"-"+e+"-"+t]}),Yi=function defaultValue(e,t){return void 0===e||"object"===(void 0===e?"undefined":Ii(e))&&!e?t:e},Xi=function objectIterator(e,t){for(var n in e)Object.hasOwnProperty.call(e,n)&&t(n,e)},Ki=function(){function Voronoi(e){_classCallCheck(this,Voronoi),this._voronoi=Oi().x(function(e){return e.x}).y(function(e){return e.y}),this.data(e)}return ji(Voronoi,[{key:"data",value:function data(e){return e&&(this._voronoiFn=this._voronoi(e)),this}},{key:"find",value:function find(e,t,n){return this._voronoiFn.find(e,t,n)}}]),Voronoi}(),$i=function(){function Store(e){_classCallCheck(this,Store),this.model=Fi.a.create(e),this._listeners=[]}return ji(Store,[{key:"serialize",value:function serialize(){return this.model.serialize()}},{key:"commit",value:function commit(e,t){this.model.prop(e,t)}},{key:"registerChangeListener",value:function registerChangeListener(e,t,n){var r=e;Array.isArray(e)||(r=[e]);var i=this.model.next(r,t,n);return this._listeners.push(i),this}},{key:"registerImmediateListener",value:function registerImmediateListener(e,t,n){var r=e;Array.isArray(e)||(r=[e]);var i=this.model.on(r,t,n);return this._listeners.push(i),this}},{key:"get",value:function get(e){return this.model.prop(e)}},{key:"computed",value:function computed(e,t){return this.model.calculatedProp(e,t)}},{key:"unsubscribeAll",value:function unsubscribeAll(){this._listeners.forEach(function(e){return e()})}}]),Store}(),Qi=function intSanitizer(e){var t=e.toString().match(/(\d+)(px)*/g);return t?parseInt(t[0],10):null},Zi=function transactor(e,t,n){var r=void 0,i=n&&n instanceof Fi.a?n:Fi.a.create({}),a=function _loop(n){({}).hasOwnProperty.call(t,n)&&(r=t[n],i.prop(n)||i.append(_defineProperty({},n,r.value)),e[n]=function(t,r,a){return function(){for(var o=arguments.length,u=Array(o),c=0;c=0;n--)if(e[n]!==t[n])return!1;return!0}(t,n):"Object"===e?Object.is(t,n):t===n}},ta={INTERFACE_IMPL:"Method not implemented"},na=function mergeRecursive(e,t){for(var n in t)Di(e[n])&&Di(t[n])?mergeRecursive(e[n],t[n]):t[n]instanceof Object&&t[n].constructor===Object?(e[n]={},mergeRecursive(e[n],t[n])):e[n]=t[n];return e},ra=function interpolator(){return Pe},ia=function numberInterpolator(){return ge},aa=function piecewiseInterpolator(){return piecewise_piecewise};var oa=function rgbToHsv(e,t,n){var r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:1;e=+e,t=+t,n=+n,r=+r,e/=255,t/=255,n/=255;var i=Math.max(e,t,n),a=Math.min(e,t,n),o=void 0,u=void 0,c=(i+a)/2;if(i===a)o=u=0;else{var s=i-a;switch(u=c>.5?s/(2-i-a):s/(i+a),i){case e:o=(t-n)/s+(t=i[0]&&r<=i[1]})},{saveChild:!1,mode:n})},sa=function getDataModelFromIdentifiers(e,t,n){var r=void 0;if(t instanceof Array){var i=e.getFieldsConfig(),a=t.slice(1,t.length);if(t instanceof Function)r=t(e,{},!1);else if(t instanceof Array&&t[0].length){var o=t[0].filter(function(e){return e in i});r=e.select(function(e){var t=!0;return o.forEach(function(n,r){var i=e[n].valueOf(),o=a.findIndex(function(e){return e[r]===i});t=t&&-1!==o}),t},{saveChild:!1,mode:n})}}else r=ca(e,t,n);return r},la=function registerListeners(e,t){var n=t(e);for(var r in n)if({}.hasOwnProperty.call(n,r)){var i=n[r],a=i.type,o=i.props,u=i.listener;e.store()[a](o,u)}},fa=function isValidValue(e){return!isNaN(e)&&e!==-1/0&&e!==1/0},ha=function getObjProp(e){for(var t=arguments.length,n=Array(t>1?t-1:0),r=1;r1)for(var n,r,i,a,o,u,c=0,s=e[t[0]].length;c=0?(r[0]=a,r[1]=a+=i):i<0?(r[1]=o,r[0]=o+=i):r[0]=a}),_defineProperty(Mi,"none",ei),_defineProperty(Mi,"expand",function(e,t){if((r=e.length)>0){for(var n,r,i,a=0,o=e[0].length;a0&&(r=(n=e[t[0]]).length)>0){for(var n,r,i,a=0,o=1;o0&&(d+=f);for(null!=t?p.sort(function(e,n){return t(y[e],y[n])}):null!=n&&p.sort(function(e,t){return n(o[e],o[t])}),u=0,s=d?(v-h*b)/d:0;u0?f*s:0)+b,y[c]={data:o[c],index:u,value:f,startAngle:g,endAngle:l,padAngle:m};return y}return pie.value=function(t){return arguments.length?(e="function"==typeof t?t:vr(+t),pie):e},pie.sortValues=function(e){return arguments.length?(t=e,n=null,pie):t},pie.sort=function(e){return arguments.length?(n=e,t=null,pie):n},pie.startAngle=function(e){return arguments.length?(r="function"==typeof e?e:vr(+e),pie):r},pie.endAngle=function(e){return arguments.length?(i="function"==typeof e?e:vr(+e),pie):i},pie.padAngle=function(e){return arguments.length?(a="function"==typeof e?e:vr(+e),pie):a},pie},arc:function(){var e=arcInnerRadius,t=arcOuterRadius,n=vr(0),r=null,i=arcStartAngle,a=arcEndAngle,o=arcPadAngle,u=null;function arc(){var c,s,l=+e.apply(this,arguments),f=+t.apply(this,arguments),h=i.apply(this,arguments)-Ar,d=a.apply(this,arguments)-Ar,p=mr(d-h),y=d>h;if(u||(u=c=gr()),fSr)if(p>Er-Sr)u.moveTo(f*_r(h),f*kr(h)),u.arc(0,0,f,h,d,!y),l>Sr&&(u.moveTo(l*_r(d),l*kr(d)),u.arc(0,0,l,d,h,y));else{var g,v,m=h,b=d,_=h,x=d,w=p,k=p,C=o.apply(this,arguments)/2,S=C>Sr&&(r?+r.apply(this,arguments):Cr(l*l+f*f)),P=wr(mr(f-l)/2,+n.apply(this,arguments)),A=P,E=P;if(S>Sr){var M=asin(S/l*kr(C)),O=asin(S/f*kr(C));(w-=2*M)>Sr?(_+=M*=y?1:-1,x-=M):(w=0,_=x=(h+d)/2),(k-=2*O)>Sr?(m+=O*=y?1:-1,b-=O):(k=0,m=b=(h+d)/2)}var T=f*_r(m),F=f*kr(m),N=l*_r(x),j=l*kr(x);if(P>Sr){var I=f*_r(b),D=f*kr(b),L=l*_r(_),R=l*kr(_);if(pSr?function intersect(e,t,n,r,i,a,o,u){var c=n-e,s=r-t,l=o-i,f=u-a,h=(l*(t-a)-f*(e-i))/(f*c-l*s);return[e+h*c,t+h*s]}(T,F,L,R,I,D,N,j):[N,j],z=T-B[0],H=F-B[1],V=I-B[0],U=D-B[1],W=1/kr(function acos(e){return e>1?0:e<-1?Pr:Math.acos(e)}((z*V+H*U)/(Cr(z*z+H*H)*Cr(V*V+U*U)))/2),q=Cr(B[0]*B[0]+B[1]*B[1]);A=wr(P,(l-q)/(W-1)),E=wr(P,(f-q)/(W+1))}}k>Sr?E>Sr?(g=cornerTangents(L,R,T,F,f,E,y),v=cornerTangents(I,D,N,j,f,E,y),u.moveTo(g.cx+g.x01,g.cy+g.y01),ESr&&w>Sr?A>Sr?(g=cornerTangents(N,j,I,D,l,-A,y),v=cornerTangents(T,F,L,R,l,-A,y),u.lineTo(g.cx+g.x01,g.cy+g.y01),A=0&&"xmlns"!==(t=e.slice(0,n))&&(e=e.slice(n+1)),ka.hasOwnProperty(t)?{space:ka[t],local:e}:e};var Sa=function(e){var t=Ca(e);return(t.local?function creatorFixed(e){return function(){return this.ownerDocument.createElementNS(e.space,e.local)}}:function creatorInherit(e){return function(){var t=this.ownerDocument,n=this.namespaceURI;return n===wa&&t.documentElement.namespaceURI===wa?t.createElement(e):t.createElementNS(n,e)}})(t)};function selector_none(){}var Pa=function(e){return null==e?selector_none:function(){return this.querySelector(e)}};function selectorAll_empty(){return[]}var Aa=function(e){return null==e?selectorAll_empty:function(){return this.querySelectorAll(e)}},Ea=function matcher(e){return function(){return this.matches(e)}};if("undefined"!=typeof document){var Ma=document.documentElement;if(!Ma.matches){var Oa=Ma.webkitMatchesSelector||Ma.msMatchesSelector||Ma.mozMatchesSelector||Ma.oMatchesSelector;Ea=function matcher(e){return function(){return Oa.call(this,e)}}}}var Ta=Ea,Fa=function(e){return new Array(e.length)};function EnterNode(e,t){this.ownerDocument=e.ownerDocument,this.namespaceURI=e.namespaceURI,this._next=null,this._parent=e,this.__data__=t}EnterNode.prototype={constructor:EnterNode,appendChild:function appendChild(e){return this._parent.insertBefore(e,this._next)},insertBefore:function insertBefore(e,t){return this._parent.insertBefore(e,t)},querySelector:function querySelector(e){return this._parent.querySelector(e)},querySelectorAll:function querySelectorAll(e){return this._parent.querySelectorAll(e)}};var Na="$";function bindIndex(e,t,n,r,i,a){for(var o,u=0,c=t.length,s=a.length;ut?1:e>=t?0:NaN}var ja=function(e){return e.ownerDocument&&e.ownerDocument.defaultView||e.document&&e||e.defaultView};function styleValue(e,t){return e.style.getPropertyValue(t)||ja(e).getComputedStyle(e,null).getPropertyValue(t)}function classArray(e){return e.trim().split(/^|\s+/)}function classList(e){return e.classList||new ClassList(e)}function ClassList(e){this._node=e,this._names=classArray(e.getAttribute("class")||"")}function classedAdd(e,t){for(var n=classList(e),r=-1,i=t.length;++r=0&&(this._names.splice(t,1),this._node.setAttribute("class",this._names.join(" ")))},contains:function contains(e){return this._names.indexOf(e)>=0}};function textRemove(){this.textContent=""}function htmlRemove(){this.innerHTML=""}function raise_raise(){this.nextSibling&&this.parentNode.appendChild(this)}function lower(){this.previousSibling&&this.parentNode.insertBefore(this,this.parentNode.firstChild)}function constantNull(){return null}function remove_remove(){var e=this.parentNode;e&&e.removeChild(this)}function selection_cloneShallow(){return this.parentNode.insertBefore(this.cloneNode(!1),this.nextSibling)}function selection_cloneDeep(){return this.parentNode.insertBefore(this.cloneNode(!0),this.nextSibling)}var Ia={},Da=null;"undefined"!=typeof document&&("onmouseenter"in document.documentElement||(Ia={mouseenter:"mouseover",mouseleave:"mouseout"}));function filterContextListener(e,t,n){return e=contextListener(e,t,n),function(t){var n=t.relatedTarget;n&&(n===this||8&n.compareDocumentPosition(this))||e.call(this,t)}}function contextListener(e,t,n){return function(r){var i=Da;Da=r;try{e.call(this,this.__data__,t,n)}finally{Da=i}}}function onRemove(e){return function(){var t=this.__on;if(t){for(var n,r=0,i=-1,a=t.length;r=_&&(_=b+1);!(m=g[_])&&++_=0;)(r=i[a])&&(o&&o!==r.nextSibling&&o.parentNode.insertBefore(r,o),o=r);return this},sort:function(e){function compareNode(t,n){return t&&n?e(t.__data__,n.__data__):!t-!n}e||(e=sort_ascending);for(var t=this._groups,n=t.length,r=new Array(n),i=0;i1?this.each((null==t?function styleRemove(e){return function(){this.style.removeProperty(e)}}:"function"==typeof t?function styleFunction(e,t,n){return function(){var r=t.apply(this,arguments);null==r?this.style.removeProperty(e):this.style.setProperty(e,r,n)}}:function styleConstant(e,t,n){return function(){this.style.setProperty(e,t,n)}})(e,t,null==n?"":n)):styleValue(this.node(),e)},property:function(e,t){return arguments.length>1?this.each((null==t?function propertyRemove(e){return function(){delete this[e]}}:"function"==typeof t?function propertyFunction(e,t){return function(){var n=t.apply(this,arguments);null==n?delete this[e]:this[e]=n}}:function propertyConstant(e,t){return function(){this[e]=t}})(e,t)):this.node()[e]},classed:function(e,t){var n=classArray(e+"");if(arguments.length<2){for(var r=classList(this.node()),i=-1,a=n.length;++i=0&&(t=e.slice(n+1),e=e.slice(0,n)),{type:e,name:t}})}(e+""),o=a.length;if(!(arguments.length<2)){for(u=t?onAdd:onRemove,null==n&&(n=!1),r=0;r=0&&(n=e.slice(r+1),e=e.slice(0,r)),e&&!t.hasOwnProperty(e))throw new Error("unknown type: "+e);return{type:e,name:n}})}(e+"",r),a=-1,o=i.length;if(!(arguments.length<2)){if(null!=t&&"function"!=typeof t)throw new Error("invalid callback: "+t);for(;++a0)for(var n,r,i=new Array(n),a=0;af}c.mouse("drag")}function mouseupped(){Ba(Da.view).on("mousemove.drag mouseup.drag",null),function yesdrag(e,t){var n=e.document.documentElement,r=Ba(e).on("dragstart.drag",null);t&&(r.on("click.drag",Ya,!0),setTimeout(function(){r.on("click.drag",null)},0)),"onselectstart"in n?r.on("selectstart.drag",null):(n.style.MozUserSelect=n.__noselect,delete n.__noselect)}(Da.view,n),Ya(),c.mouse("end")}function touchstarted(){if(i.apply(this,arguments)){var e,t,n=Da.changedTouches,r=a.apply(this,arguments),o=n.length;for(e=0;e=0&&t._call.call(null,e),t=t._next;--eo}()}finally{eo=0,function nap(){var e,t,n=$a,r=1/0;for(;n;)n._call?(r>n._time&&(r=n._time),e=n,n=n._next):(t=n._next,n._next=null,n=e?e._next=t:$a=t);Qa=e,sleep(r)}(),ao=0}}function poke(){var e=uo.now(),t=e-io;t>ro&&(oo-=t,io=e)}function sleep(e){eo||(to&&(to=clearTimeout(to)),e-ao>24?(e<1/0&&(to=setTimeout(wake,e-uo.now()-oo)),no&&(no=clearInterval(no))):(no||(io=uo.now(),no=setInterval(poke,ro)),eo=1,co(wake)))}Timer.prototype=timer.prototype={constructor:Timer,restart:function restart(e,t,n){if("function"!=typeof e)throw new TypeError("callback is not a function");n=(null==n?now():+n)+(null==t?0:+t),this._next||Qa===this||(Qa?Qa._next=this:$a=this,Qa=this),this._call=e,this._time=n,sleep()},stop:function stop(){this._call&&(this._call=null,this._time=1/0,sleep())}};var so=function(e,t,n){var r=new Timer;return t=null==t?0:+t,r.restart(function(n){r.stop(),e(n+t)},t,n),r},lo=Ga("start","end","interrupt"),fo=[],ho=0,po=1,yo=2,go=3,vo=4,mo=5,bo=6,_o=function(e,t,n,r,i,a){var o=e.__transition;if(o){if(n in o)return}else e.__transition={};!function schedule_create(e,t,n){var r,i=e.__transition;function start(a){var o,u,c,s;if(n.state!==po)return stop();for(o in i)if((s=i[o]).name===n.name){if(s.state===go)return so(start);s.state===vo?(s.state=bo,s.timer.stop(),s.on.call("interrupt",e,e.__data__,s.index,s.group),delete i[o]):+oho)throw new Error("too late; already scheduled");return n}function schedule_set(e,t){var n=schedule_get(e,t);if(n.state>yo)throw new Error("too late; already started");return n}function schedule_get(e,t){var n=e.__transition;if(!n||!(n=n[t]))throw new Error("transition not found");return n}function tweenValue(e,t,n){var r=e._id;return e.each(function(){var e=schedule_set(this,r);(e.value||(e.value={}))[t]=n.apply(this,arguments)}),function(e){return schedule_get(e,r).value[t]}}var xo=function(e,t){var n;return("number"==typeof t?ge:t instanceof color_color?pe:(n=color_color(t))?(t=n,pe):Ce)(e,t)};var wo=Ra.prototype.constructor;var ko=0;function Transition(e,t,n,r){this._groups=e,this._parents=t,this._name=n,this._id=r}function newId(){return++ko}var Co=Ra.prototype;Transition.prototype=function src_transition_transition(e){return Ra().transition(e)}.prototype={constructor:Transition,select:function(e){var t=this._name,n=this._id;"function"!=typeof e&&(e=Pa(e));for(var r=this._groups,i=r.length,a=new Array(i),o=0;o=0&&(e=e.slice(0,t)),!e||"start"===e})}(t)?init:schedule_set;return function(){var o=a(this,e),u=o.on;u!==r&&(i=(r=u).copy()).on(t,n),o.on=i}}(n,e,t))},attr:function(e,t){var n=Ca(e),r="transform"===n?Fe:xo;return this.attrTween(e,"function"==typeof t?(n.local?function attr_attrFunctionNS(e,t,n){var r,i,a;return function(){var o,u=n(this);if(null!=u)return(o=this.getAttributeNS(e.space,e.local))===u?null:o===r&&u===i?a:a=t(r=o,i=u);this.removeAttributeNS(e.space,e.local)}}:function attr_attrFunction(e,t,n){var r,i,a;return function(){var o,u=n(this);if(null!=u)return(o=this.getAttribute(e))===u?null:o===r&&u===i?a:a=t(r=o,i=u);this.removeAttribute(e)}})(n,r,tweenValue(this,"attr."+e,t)):null==t?(n.local?function attr_attrRemoveNS(e){return function(){this.removeAttributeNS(e.space,e.local)}}:function attr_attrRemove(e){return function(){this.removeAttribute(e)}})(n):(n.local?function attr_attrConstantNS(e,t,n){var r,i;return function(){var a=this.getAttributeNS(e.space,e.local);return a===n?null:a===r?i:i=t(r=a,n)}}:function attr_attrConstant(e,t,n){var r,i;return function(){var a=this.getAttribute(e);return a===n?null:a===r?i:i=t(r=a,n)}})(n,r,t+""))},attrTween:function(e,t){var n="attr."+e;if(arguments.length<2)return(n=this.tween(n))&&n._value;if(null==t)return this.tween(n,null);if("function"!=typeof t)throw new Error;var r=Ca(e);return this.tween(n,(r.local?function attrTweenNS(e,t){function tween(){var n=this,r=t.apply(n,arguments);return r&&function(t){n.setAttributeNS(e.space,e.local,r(t))}}return tween._value=t,tween}:function attrTween(e,t){function tween(){var n=this,r=t.apply(n,arguments);return r&&function(t){n.setAttribute(e,r(t))}}return tween._value=t,tween})(r,t))},style:function(e,t,n){var r="transform"==(e+="")?Te:xo;return null==t?this.styleTween(e,function style_styleRemove(e,t){var n,r,i;return function(){var a=styleValue(this,e),o=(this.style.removeProperty(e),styleValue(this,e));return a===o?null:a===n&&o===r?i:i=t(n=a,r=o)}}(e,r)).on("end.style."+e,function styleRemoveEnd(e){return function(){this.style.removeProperty(e)}}(e)):this.styleTween(e,"function"==typeof t?function style_styleFunction(e,t,n){var r,i,a;return function(){var o=styleValue(this,e),u=n(this);return null==u&&(this.style.removeProperty(e),u=styleValue(this,e)),o===u?null:o===r&&u===i?a:a=t(r=o,i=u)}}(e,r,tweenValue(this,"style."+e,t)):function style_styleConstant(e,t,n){var r,i;return function(){var a=styleValue(this,e);return a===n?null:a===r?i:i=t(r=a,n)}}(e,r,t+""),n)},styleTween:function(e,t,n){var r="style."+(e+="");if(arguments.length<2)return(r=this.tween(r))&&r._value;if(null==t)return this.tween(r,null);if("function"!=typeof t)throw new Error;return this.tween(r,function styleTween(e,t,n){function tween(){var r=this,i=t.apply(r,arguments);return i&&function(t){r.style.setProperty(e,i(t),n)}}return tween._value=t,tween}(e,t,null==n?"":n))},text:function(e){return this.tween("text","function"==typeof e?function text_textFunction(e){return function(){var t=e(this);this.textContent=null==t?"":t}}(tweenValue(this,"text",e)):function text_textConstant(e){return function(){this.textContent=e}}(null==e?"":e+""))},remove:function(){return this.on("end.remove",function removeFunction(e){return function(){var t=this.parentNode;for(var n in this.__transition)if(+n!==e)return;t&&t.removeChild(this)}}(this._id))},tween:function(e,t){var n=this._id;if(e+="",arguments.length<2){for(var r,i=schedule_get(this.node(),n).tween,a=0,o=i.length;ayo&&n.state4&&void 0!==arguments[4]?arguments[4]:{},a=arguments[5];(e instanceof HTMLElement||e instanceof SVGElement)&&(e=Ao(e));var o=r?r[0]:null,u=null,c=null,s=null,l=null,f=null,h=void 0;o?"#"===o?(u="id",c=r):(u="class",c="."===r[0]?r:"."+r):(c=t,h=!0),s=e.selectAll(c),h&&(s=s.filter(function(){return this.parentNode===e.node()})),l=(s=s.data(n,a)).enter().append(t||"div"),i.enter&&l.each(function(){for(var e=arguments.length,t=Array(e),n=0;nthis._data.length)for(var a=this._data.length;a0&&void 0!==arguments[0]?arguments[0]:{};this._lifeCycles=e,this._releasePromisesFromCache()}},{key:"_resetTargetPromise",value:function _resetTargetPromise(e){var t=this;setTimeout(function(){t._notifiers[e]=Xo,t._promises.set(e,t._makeNotifierPromise(e))},0)}}]),LifeCycleManager}(),Qo="drag",Zo="hover",Jo="selectiondrag",eu="click",tu="longtouch",nu="touchdrag",ru="*",iu=1,au=-1,ou=0,uu=2,cu=-2,su=function(){function defineProperties(e,t){for(var n=0;n0?(e[n]===uu&&t.entrySet[0].push(n),e[n]===iu&&t.entrySet[1].push(n)):e[n]<0&&(e[n]===cu&&t.exitSet[0].push(n),e[n]===au&&t.exitSet[1].push(n)),t.completeSet.push(n);return["entrySet","exitSet"].forEach(function(e){t[e]=t[e].map(function(e){return e.map(Number)})}),t.completeSet=t.completeSet.map(Number),t}},{key:"reset",value:function reset(e){var t=this._set;if(e)e.forEach(function(e){t[e]=ou});else{var n=this._lockedSelection;for(var r in t)r in n||(t[r]=ou)}return this._resetted=!0,this}},{key:"getEntrySet",value:function getEntrySet(){var e=this._set,t=[];for(var n in e)e[n]===iu&&t.push(n);return t}},{key:"getExistingEntrySet",value:function getExistingEntrySet(e){var t=this._set;return e.filter(function(e){return t[e]===iu||t[e]===uu})}},{key:"getExistingExitSet",value:function getExistingExitSet(e){var t=this._set;return e.filter(function(e){return t[e]===au||t[e]===cu})}},{key:"getOldEntry",value:function getOldEntry(){var e=this._set,t=[];for(var n in e)e[n]===uu&&t.push(n);return t}},{key:"getOldExit",value:function getOldExit(){var e=this._set,t=[];for(var n in e)e[n]===cu&&t.push(n);return t}},{key:"getExitSet",value:function getExitSet(){var e=this._set,t=[];for(var n in e)e[n]===au&&t.push(n);return t}},{key:"getCompleteSet",value:function getCompleteSet(){var e=this._set,t=[];for(var n in e)t.push(n);return t}},{key:"getCompleteSetCount",value:function getCompleteSetCount(){return this._completeSetCount}},{key:"resetted",value:function resetted(){return this._resetted}},{key:"toggle",value:function toggle(){var e=this._set;for(var t in e)e[t]===iu?e[t]=au:e[t]===au?e[t]=iu:e[t]===uu?e[t]=cu:e[t]=uu;return this}}]),SelectionSet}();function helper_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t3&&void 0!==arguments[3]?arguments[3]:{},i=this.sideEffects(),a=i[e],o=!1;r.filter&&r.filter(a)&&(o=!0),!o&&i[e].apply(t,n,r)}},{key:"registerPropagationBehaviourMap",value:function registerPropagationBehaviourMap(e){return this._propagationBehaviourMap=Object.assign(this._propagationBehaviourMap,e||{}),this}},{key:"dispatchBehaviour",value:function dispatchBehaviour(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=void 0===n.propagate||n.propagate,i=this._actions.behavioural[e],a=function getSideEffects(e,t){var n=[];for(var r in t){var i=r.split(",");i.some(function(t){return t===e})&&n.push({effects:t[r],behaviours:i})}return n}(e,this._behaviourEffectMap);if(this._propagationInf=n,i){var o=i.dispatch(t),u=this.getPropagationSelectionSet(o);this._entryExitSet[e]=u;var c=this.shouldApplySideEffects(r);if(r&&this.propagate(e,t,o.find(function(e){return e.sourceSelectionSet}),a),c){var s=this.getApplicableSideEffects(a,t,n);this.applySideEffects(s,u,t)}}return this}},{key:"getPropagationSelectionSet",value:function getPropagationSelectionSet(e){return e.find(function(e){return!e.sourceSelectionSet})}},{key:"shouldApplySideEffects",value:function shouldApplySideEffects(){return!0}},{key:"changeBehaviourStateOnPropagation",value:function changeBehaviourStateOnPropagation(e,t){return t instanceof Function?this._sourceBehaviours[e]=t:this._sourceBehaviours[e]=function(){return t},this}},{key:"changeSideEffectStateOnPropagation",value:function changeSideEffectStateOnPropagation(e,t){t instanceof Function?this._sourceSideEffects[e]=t:this._sourceSideEffects[e]=function(){return t}}},{key:"propagate",value:function propagate(){return this}},{key:"sideEffects",value:function sideEffects(){return arguments.length?(this._sideEffects=arguments.length<=0?void 0:arguments[0],this):this._sideEffects}},{key:"enableSideEffects",value:function enableSideEffects(e){return fu(this,e,!0),this}},{key:"disableSideEffects",value:function disableSideEffects(e){return fu(this,e,!1),this}},{key:"dissociateBehaviour",value:function dissociateBehaviour(e,t){var n=this._actionBehaviourMap;for(var r in n)if(r===t){var i=n[r];i.behaviours=i.behaviours.filter(function(t){return t!==e})}return this}},{key:"dissociateSideEffect",value:function dissociateSideEffect(e,t){var n=this._behaviourEffectMap;return n[t]=n[t].filter(function(t){return(t.name||t)!==e}),this}},{key:"getApplicableSideEffects",value:function getApplicableSideEffects(e){return e}},{key:"attachPropagationListener",value:function attachPropagationListener(e){return e.unsubscribe("propagation"),e.on("propagation",this.onDataModelPropagation()),this}},{key:"onDataModelPropagation",value:function onDataModelPropagation(){var e=this;return function(t){var n=t.payload,r=n.action;e.dispatchBehaviour(r,n,{propagate:!1})}}},{key:"createSelectionSet",value:function createSelectionSet(e,t){var n=t||this._actions.behavioural,r=this._selectionSet,i=this._volatileSelectionSet;for(var a in n)({}).hasOwnProperty.call(n,a)&&(r[a]=new lu(e),i[a]=new lu(e,!0));return this._volatileSelectionSet=i,this.selectionSet(r),this}},{key:"selectionSet",value:function selectionSet(){return arguments.length?(this._selectionSet=arguments.length<=0?void 0:arguments[0],this):this._selectionSet}},{key:"initializeSideEffects",value:function initializeSideEffects(){var e=this._sideEffectDefinitions;return this.sideEffects(function initializeSideEffects(e,t){var n=e._sideEffects;return(t=t instanceof Array?t:Object.values(t)).forEach(function(t){var r=n[t.formalName()];n[t.formalName()]=r||new t(e)}),n}(this,e)),this}},{key:"registerPhysicalActions",value:function registerPhysicalActions(e){var t=function initializePhysicalActions(e,t){var n={};for(var r in t)({}).hasOwnProperty.call(r,t)||(n[r]=t[r](e));return n}(this,e);return Object.assign(this._actions.physical,t),this}},{key:"propagateWith",value:function propagateWith(e,t){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],r=this._actions.behavioural;if(t.length){if(e===ru)for(var i in r)this._propagationFields[i]={fields:t,append:n};else this._propagationFields[e]={fields:t,append:n};return this}return this._propagationFields}},{key:"mapActionsAndBehaviour",value:function mapActionsAndBehaviour(){var e=this._actions.physical,t=this._actionBehaviourMap,n=this._mappedActions;for(var r in t)if(!{}.hasOwnProperty.call(r,t)){var i=void 0,a=t[r];i=a.target;var o=a.touch;i||(i=this.context.getDefaultTargetContainer());var u=Ro()?!0===o||void 0===o:!o,c=r+"-"+a.behaviours.join();u&&!n[c]&&this.bindActionWithBehaviour(e[r],i,a.behaviours),n[c]=!0}return this}},{key:"registerPhysicalBehaviouralMap",value:function registerPhysicalBehaviouralMap(e){return Object.assign(this._actionBehaviourMap,e),this}},{key:"bindActionWithBehaviour",value:function bindActionWithBehaviour(e,t,n){var r=this;return"string"==typeof t&&(t=[t]),t.forEach(function(t){var i=r.context.mount(),a=t.node instanceof Function?t:Ao(i).selectAll(t);n.length&&!a.empty()&&(a instanceof Array?a.forEach(function(t){e(Ao(t),n)}):e(a,n))}),this}},{key:"getPropagationInf",value:function getPropagationInf(){return this._propagationInf}},{key:"getAddSetFromCriteria",value:function getAddSetFromCriteria(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=this.context,r=t.data?t.data:n.getDataModelFromIdentifiers(e,"all"),i=n.fields().x||[],a=n.fields().y||[],o=i.every(function(e){return e.type()===ir.FieldType.MEASURE}),u=a.every(function(e){return e.type()===ir.FieldType.MEASURE});return{model:r,uids:null===e?null:t.data?function filterPropagationModel(e,t,n){var r=t.getData(),i=r.data,a=r.schema,o=void 0;if(a.length){var u=e.getFieldsConfig();o=e.select(function(e){return i.some(function(t){return a.every(function(r,i){return!(n||r.name in u&&u[r.name].def.type!==ir.FieldType.MEASURE)||t[i]===e[r.name].valueOf()})})},{saveChild:!1})}else o=t;return o}(this.getFullData(),t.data[0],o&&u).getData().uids:r[0].getData().uids}}},{key:"getSelectionSets",value:function getSelectionSets(e){var t=this.context.id(),n=(this._propagationInf||{}).sourceId,r=[];return n!==t&&(r=[this._volatileSelectionSet[e]]),n&&r.push(this.selectionSet()[e]),r}},{key:"getFullData",value:function getFullData(){return this.context.data()}},{key:"resetted",value:function resetted(){return this._resetted}},{key:"getEntryExitSet",value:function getEntryExitSet(e){return this._entryExitSet[e]}}]),Firebolt}(),mu=function(){function defineProperties(e,t){for(var n=0;n1&&void 0!==arguments[1]?arguments[1]:{},n=e.sourceIdentifiers;return n?n.getSchema().map(function(e){return e.name}):t instanceof Array?t[0]:Object.keys(t||{})}(u,n.criteria),sourceSelectionSet:!0===e._volatile}}},{key:"enable",value:function enable(){this._enabled=!0}},{key:"disable",value:function disable(){this._enabled=!1}},{key:"isEnabled",value:function isEnabled(){return this._enabled}}],[{key:"mutates",value:function mutates(){return!1}}]),GenericBehaviour}(),_u=function(){function defineProperties(e,t){for(var n=0;nk[0]?k:w,S=C===k?w:k;C[1]100&&Math.abs(i.x-a.x)<=5)){a.x=Math.max(0,Math.min(a.x,o.width)),a.y=Math.max(0,Math.min(a.y,o.height));var s=Ru(n.context.getSourceInfo(),{startPos:i,endPos:a,snap:!0},n.context.data().getFieldsConfig());s.dragEnd=!0,t.forEach(function(e){return n.dispatchBehaviour(e,s)})}}))},zu=function hover(e){return function(t,n){var r=function dispatchBehaviour(t){var r=Io(),i=e.context,a=i.config().interaction.tooltip.mode,o=jo(i.getDrawingContext().svgContainer,r),u=i.getNearestPoint(o.x,o.y,{getAllPoints:"consolidated"===a||"fragmented"===a,data:t,event:r}),c={criteria:u?u.id:null,showInPosition:u.showInPosition,target:u.target,position:o,mode:a};n.forEach(function(t){return e.dispatchBehaviour(t,c)}),r.stopPropagation()};t.on("mouseover",r).on("mousemove",r).on("mouseout",function(){n.forEach(function(t){return e.dispatchBehaviour(t,{criteria:null})})})}},Hu=function generatePayloadFromEvent(e,t,n){var r=n.context,i=jo(r.getDrawingContext().svgContainer,t.touches?t.touches[0]:t),a=r.getNearestPoint(i.x,i.y,{data:e,event:t});return{criteria:a?a.id:null,showInPosition:a.showInPosition,target:a.target,position:i}},Vu=function click(e){return function(t,n){t.on("click",function dispatchBehaviour(t){var r=Io(),i=Hu(t,r,e);n.forEach(function(t){return e.dispatchBehaviour(t,i)}),r.stopPropagation()})}};function physical_defineProperty(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var Uu=(physical_defineProperty(Du={},Qo,function drag(e){return function(t,n){Bu(t,n,e)}}),physical_defineProperty(Du,Zo,zu),physical_defineProperty(Du,eu,Vu),physical_defineProperty(Du,tu,function longtouch(e){return function(t,n){var r=void 0,i=void 0;i=!1,r=Io(),t.on("touchstart",function(t){r=Io(),i=!1,setTimeout(function(){i?n.forEach(function(t){return e.dispatchBehaviour(t,{criteria:null})}):function dispatchBehaviour(t){var i=Hu(t,r,e);n.forEach(function(t){return e.dispatchBehaviour(t,i)}),r.stopPropagation()}(t)},100)}).on("touchend",function(){i=!0})}}),physical_defineProperty(Du,nu,function touchdrag(e){return function(t,n){Bu(t,n,e,!0)}}),Du),Wu=function(){function defineProperties(e,t){for(var n=0;n1&&void 0!==arguments[1]&&arguments[1];var t=arguments[2],n=arguments[3];this.firebolt.context.layers().forEach(function(r){return!1!==r.config().interactive&&r.applyInteractionStyle(t,e.uids,n)})}}]),SurrogateSideEffect}(),Xu=function(){function defineProperties(e,t){for(var n=0;n=0&&l<=t&&c>=0&&s<=n){var f=Ru(a.getSourceInfo(),{startPos:{x:u,y:c},endPos:{x:l,y:s}},a.data().getFieldsConfig());o(f)}}).on("end",function(){var e=i.width,t=i.height,n=Math.min(e-r.width,Math.max(r.x,0)),u=Math.min(t-r.height,Math.max(r.y,0)),c=u+r.height,s=n+r.width;if(n>=0&&s<=e&&u>=0&&c<=t){var l=Ru(a.getSourceInfo(),{startPos:{x:n,y:u},endPos:{x:s,y:c},snap:!0},a.data().getFieldsConfig());l.dragEnd=!0,o(l)}}))}}(c)(Ao(this),["brush"],x)}).merge(w).each(function(e){var t=Ao(this);for(var n in b&&(t=t.transition().duration(b.duration)),e)({}).hasOwnProperty.call(e,n)&&fa(e[n])&&t.attr(n,e[n])}),C=Gi(u.defClassName,this._id,d);return k.classed(C.join(" "),!0),k.classed(u.className,!0),this}},{key:"hide",value:function hide(e){Qu(this,e.sideEffectGroup,!1)}},{key:"show",value:function show(e){Qu(this,e.sideEffectGroup,!0)}}],[{key:"defaultConfig",value:function defaultConfig(){return{defClassName:"selection-box-group",className:"",classPrefix:"muze",box:{defClassName:"selection-box",className:""},transition:{duration:200}}}},{key:"formalName",value:function formalName(){return"selectionBox"}}]),SelectionBox}(),ec={position:"absolute",width:0,height:0},tc={classPrefix:"muze",defClassName:"tooltip-box",connectorClassName:"tooltip-connectors",className:"",row:{margin:0},content:{spacing:5,iconContainerSize:10,iconScale:1,iconShape:"circle",iconColor:"#ff0000",rowMargin:"0px",margin:10,separator:":",className:"tooltip-content-container",parentClassName:"tooltip-content-parent-container"},arrow:{size:10,disabled:!1,defClassName:"tooltip-arrow",className:"",color:"rgba(195,195,195,0.85)"}},nc=function getArrowPos(e,t,n,r){var i=void 0,a=n.x,o=n.y,u=n.boxHeight,c=n.boxWidth,s=r.arrow.disabled?0:r.arrow.size;if("left"===e||"right"===e){var l=0,f=u/2,h=t.y+t.height,d=o+u;t.y>o?(l=t.y-o,f=(h>=d?d-t.y:t.height)/2):d>h&&(f=Math.abs(o-(t.y+t.height))/2),i=l+f-s/2}else{var p=0,y=c/2,g=t.x+t.width,v=a+c;t.x>a?(p=t.x-a,y=(g>=v?v-t.x:t.width)/2):v>g&&(y=Math.abs(a-(t.x+t.width))/2),i=p+y-s/2}return i},rc=function placeArrow(e,t,n){var r=e._tooltipArrow,i=e._tooltipBackground,a=e._config,o=a.classPrefix,u=a.arrow,c=Gi(u.defClassName,e._id,a.classPrefix);r.style("display","block"),r.attr("class",""+c.join(" ")),"left"===t||"right"===t?(r.style("top",n+"px"),r.style("left",""),i.style("top",n+"px"),i.style("left","")):("bottom"===t?r.style("top","100%"):r.style("top","-"+u.size+"px"),r.style("left",n+"px"),"bottom"===t?i.style("top","100%"):i.style("top","-"+(u.size+3)+"px"),i.style("left",n+"px")),r.classed(o+"-tooltip-arrow",!0),r.classed(o+"-tooltip-arrow-"+e._arrowOrientation,!1),r.classed(o+"-tooltip-arrow-"+t,!0),i.classed(o+"-tooltip-background-arrow",!0),i.classed(o+"-tooltip-background-arrow-"+e._arrowOrientation,!1),i.classed(o+"-tooltip-background-arrow-"+t,!0)};n(11);function strategy_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t1&&void 0!==arguments[1]?arguments[1]:{},n=arguments[2],r=[],i=e.getData(),a=i.data,o=i.schema,u=t.formatters,c=t.separator,s=e.getFieldsConfig(),l=e.getFieldspace(),f=l.fieldsObj(),h=n.dimensionMeasureMap,d=n.axes,p=n.detailFields||[],y=o.filter(function(e){return e.type===ir.FieldType.DIMENSION}),g=o.filter(function(e){return e.type===ir.FieldType.MEASURE}),v=o.find(function(e){return-1!==p.indexOf(e.name)}),m=a.length,b=function getRowContent(e,n){var r=void 0,i=void 0,o=void 0,p=[],y=s[e].index,g=s[e].def.subtype===ir.DimensionSubtype.TEMPORAL?f[e].getMinDiff():0,v=u&&u[e]||oc(n,function(e){return e});if(null!==r){var b=n===ir.FieldType.MEASURE?a.map(function(e){return e[y]}):[].concat(strategy_toConsumableArray(new Set(a.map(function(e){return e[y]}))));b=b.filter(function(e){return""!==e});var _=d.color[0],x=d.shape[0],w=d.size[0],k=(_||x||w)&&m>1&&n!==ir.FieldType.MEASURE;b.forEach(function(n,u){var f=void 0,d=h[e];if(d&&d.length&&m>1){f=n;var y={value:""};k&&(y={type:"icon",color:_.getColor(n),shape:x.getShape(n),size:w.getSize(n)*t.iconScale}),d.length>1?(p.push([y,""+f]),d.forEach(function(e){o=s[e].index,r=a[u][o],i=oc("measure",l.fields[o]._ref.numberFormat())(r,g),p.push([{value:""+e+c,style:{"margin-left":t.margin+"px}"},className:t.classPrefix+"-tooltip-key"},{value:""+i,className:t.classPrefix+"-tooltip-value"}])})):(o=s[d[0]].index,r=a[u][o],i=oc("measure",l.fields[o]._ref.numberFormat())(r,g),p.push([y,{value:""+f+c,className:t.classPrefix+"-tooltip-key"},{value:""+i,className:t.classPrefix+"-tooltip-value"}]))}else f=e,i=v(r=n,g),p.push([{value:""+f+c,className:t.classPrefix+"-tooltip-key"},{value:""+i,className:t.classPrefix+"-tooltip-value"}])})}return p},_="keyValue";if(m>1&&v)r=function getTabularData(e,t,n,r){var i=[];return i.push(t.map(function(e){return e.name})),e.forEach(function(e){var a=[];t.forEach(function(t,i){var o=t.subtype===ir.DimensionSubtype.TEMPORAL?r[t.name]:0,u=t.type===ir.FieldType.MEASURE&&n.fields[i]._ref.numberFormat(),c=oc(t.subtype||t.type,u)(e[i],o);a.push(c)}),i.push(a)}),i}(a,o,l,n.timeDiffs),_="table";else{y.forEach(function(e){var t=e.subtype?e.subtype:e.type;r=[].concat(strategy_toConsumableArray(r),strategy_toConsumableArray(b(e.name,t)))});var x=[].concat(strategy_toConsumableArray(new(Function.prototype.bind.apply(Set,[null].concat(strategy_toConsumableArray(Object.values(h)))))));(m>1?g.filter(function(e){return-1===x.indexOf(e.name)}):g).forEach(function(e){var t=e.subtype?e.subtype:e.type;r=[].concat(strategy_toConsumableArray(r),strategy_toConsumableArray(b(e.name,t)))})}return{content:r,displayFormat:_}},cc={keyValue:function keyValue(e,t,n){return uc(e,t,n)}},sc="keyValue",lc=function(){function defineProperties(e,t){for(var n=0;n0?(this._config=na(this._config,arguments.length<=0?void 0:arguments[0]),this):this._config}},{key:"update",value:function update(e){return this._model=e.model,this._strategy=void 0!==e.strategy?e.strategy:sc,this._formatter=e.formatter,this}},{key:"context",value:function context(e){return this._context=e,this}},{key:"render",value:function render(e){var t=void 0,n=this._config,r=n.iconContainerSize,i=this._formatter,a=n.rowMargin,o=this._model;if(this._mount=e,(t=o instanceof Array?o:i instanceof Function?i(this._model,this._context):cc[this._strategy](this._model,this.config(),this._context))instanceof Function)e.html(t());else{var u=t,c="default";Di(t)&&(u=t.content,c=t.displayFormat);var s=Eo(e,"div",[c],n.classPrefix+"-tooltip-content",{},function(e){return e});if("table"===c){var l=Eo(s,"table",[1],n.classPrefix+"-tooltip-table"),f=Eo(l,"tbody",[1],n.classPrefix+"-tooltip-table-tbody"),h=Eo(f,"tr",u,n.classPrefix+"-tooltip-table-row");h.each(function(e,t){Ao(this).classed(n.classPrefix+"-tooltip-table-row-"+t,!0)}),Eo(h,"td",function(e){return e},n.classPrefix+"-tooltip-table-cell").each(function(e){Ao(this).html(e)})}else{var d=Eo(s,"div",u,n.classPrefix+"-tooltip-row"),p=Eo(d,"span",function(e){return e},n.classPrefix+"-tooltip-content");p.attr("class",n.classPrefix+"-tooltip-content"),Fo(d,{margin:a}),Fo(p,{display:"inline-block","margin-right":n.spacing+"px"}),p.each(function(e){var t=Ao(this);if(t.html(""),e instanceof Object)if("icon"===e.type){var n=Eo(t,"svg",[1]),i=Eo(n,"path",[1]),a=e.shape instanceof Function?e.shape:pa(e.shape);To(n,{x:0,y:0,width:r,height:r}),To(i,{d:a.size(e.size)(),transform:"translate("+r/2+", "+r/2+")"}),Fo(i,{fill:e.color}),Fo(n,{width:r+"px",height:r+"px"})}else t.html(e.value),e.className&&t.classed(e.className,!0),Fo(t,e.style);else t.html(e)})}}return this}},{key:"clear",value:function clear(){return this._model=null,this}}],[{key:"defaultConfig",value:function defaultConfig(){var e=tc.content;return e.classPrefix=tc.classPrefix,e}}]),Content}(),hc=function(){function defineProperties(e,t){for(var n=0;n0){var e=na({},this.constructor.defaultConfig());return this._config=na(e,arguments.length<=0?void 0:arguments[0]),this}return this._config}},{key:"addClass",value:function addClass(e){return this._tooltipContainer.classed(e,!0),this}},{key:"context",value:function context(){return arguments.length?(this._context=arguments.length<=0?void 0:arguments[0],this):this._context}},{key:"content",value:function content(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=this.config(),i=r.classPrefix,a=r.content.className,o=r.formatter,u=n.className||i+"-"+a+"-"+e,content=this._contents[e]=this._contents[e]||new fc,c=Eo(this._contentContainer,"div",[n.order],u);c.attr("class",i+"-"+a+" "+u),function reorderContainers(e,t){e.selectAll(t).sort(function(e,t){return e-t})}(this._contentContainer,"."+i+"-"+a);var s=r.content;return n.classPrefix=this._config.classPrefix,content.config(s),null===t?(content.clear(),c.remove(),delete this._contents[e]):(content.update({model:t,formatter:n.formatter||o}),content.context(this._context),content.render(c)),Object.keys(this._contents).length||this.hide(),this}},{key:"getContents",value:function getContents(){return Object.values(this._contents)}},{key:"position",value:function position(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(!Object.keys(this._contents).length)return this.hide(),this;this.show();var r=this._target,i=n.repositionArrow;if(r&&i){var a=this._tooltipContainer.node(),o=this._config,u=o.arrow.disabled,c=u?0:o.arrow.size,s=this._arrowOrientation,l="left"===s||"right"===s?t+a.offsetHeight-cr.y+r.height:e+a.offsetWidth-cr.x+r.width;if(!u)if(l){var f=void 0;this._tooltipArrow.style("display","none"),this._tooltipBackground.style("display","none"),this._tooltipConnectorContainer.style("display","block");var h=this._tooltipConnectorContainer.selectAll("path").data([1]),d=h.enter().append("path");"left"===s?f="M "+e+" "+(t+a.offsetHeight/2)+" L "+(r.x+r.width)+" "+(r.y+r.height/2):"right"===s?f="M "+(e+a.offsetWidth)+" "+(t+a.offsetHeight/2)+" L "+r.x+" "+(r.y+r.height/2):"bottom"===s&&(f="M "+(e+a.offsetWidth/2)+" "+(t+a.offsetHeight)+" L "+(r.x+r.width/2)+" "+r.y),d.merge(h).attr("d",f).style("display","block")}else{var p=nc(s,r,{x:e,y:t,boxHeight:a.offsetHeight,boxWidth:a.offsetWidth},this._config);rc(this,this._arrowOrientation,p),this._tooltipConnectorContainer.style("display","none")}}var y=this._offset||{x:0,y:0};return this._tooltipContainer.style("left",y.x+e+"px").style("top",y.y+t+"px"),this}},{key:"positionRelativeTo",value:function positionRelativeTo(e){var t=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=void 0,i=n.orientation;if(this.show(),!e)return this.hide(),this;var a=this._extent,o=this._tooltipContainer.node();this._tooltipContainer.style("top","0px").style("left","0px");var u=o.offsetWidth+2,c=o.offsetHeight+2,s=this._config,l=this._offset,f=s.arrow.disabled,h=f?0:s.arrow.size,d=void 0===n.draw||n.draw,p=e.y,y=e.x+e.width+l.x,g=a.width-y,v=e.x+l.x-a.x,m=p>c+h,b=g>=u+h,_=v>=u+h;return this._target=e,i||(i=m?"vertical":b||_?"horizontal":"vertical"),"horizontal"===i?r=function positionHorizontal(){var n=void 0,r=e.x+e.width,i=e.y;return b?(n="left",r+=h):_?(r=e.x-u,n="right",r-=h):(n="left",r+=h),e.height2&&void 0!==arguments[2]?arguments[2]:{},r=0,i=0,a=e.mergedEnter.model,o=this.firebolt.context,u=this.drawingContext();if(a.isEmpty()||null===t.criteria||!1===e.isSourceFieldPresent)return this.hide(n,null),this;var c=this._tooltips,s=this.config(),l={width:u.width,height:u.height},f=t.showInPosition,h=s.padding,d=[],p="fragmented"===s.mode,y=o.getSourceInfo(),g=y.fields,v=!!(!!g.x[0]&&g.x[0].type()===ir.FieldType.DIMENSION),m=t.position,b=[],_={},x=a.getData().uids;p?d.push.apply(d,function tooltip_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);tu.height:i>u.width)break;b.push({x:z.x,y:z.y,width:H.width,height:H.height,tooltip:R})}}for(var V in c)if(!_[V]){var U=c[V];U.content(t.action,null),U.getContents().length||(U.remove(),delete c[V])}return p&&(!function spaceOutBoxes(e,t,n){var r=void 0,i=void 0,a=void 0,o=void 0,u=void 0,c=e.length,s=function spaceOutIfOverlap(e,t,u){a=e.x,o=e.width,r=e.y,i=e.height;var c=r+i,s=a+o;n?(u?rt.y)&&(t.y=u?e.y-t.height-5:c+5):(u?at.x)&&(t.x=u?e.x-t.width-5:s+5)};for(e.sort(function(e,t){return n?e.y-t.y:e.x-t.x}),u=0,u=0;ut.height||e[u].x+e[u].width>t.width)for(n?e[u].y-=e[u].height+e[u].y-t.height:e[u].x-=e[u].width+e[u].x-t.width,u=c-1;u>0;u--)s(e[u],e[u-1],!0)}(b,l,v),b.forEach(function(e){return e.tooltip.position(e.x,e.y,{repositionArrow:!0})})),this}},{key:"hide",value:function hide(e){var t=this._tooltips;for(var n in t)if({}.hasOwnProperty.call(t,n)){var r=e.strategy||this._strategy;t[n].content(r,null),t[n].hide()}}}],[{key:"defaultConfig",value:function defaultConfig(){return{padding:5,offset:{x:0,y:0}}}},{key:"formalName",value:function formalName(){return"tooltip"}}]),Tooltip}(),vc=(n(15),function(){function defineProperties(e,t){for(var n=0;n2&&void 0!==arguments[2]?arguments[2]:{},r=this._strategies[n.strategy||this._strategy];return!1!==e.isSourceFieldPresent&&r(e,this,n.strategy||this._strategy),this}}],[{key:"formalName",value:function formalName(){return"highlighter"}},{key:"target",value:function target(){return"visual-unit"}}]),PlotHighlighter}(),wc=function(){function defineProperties(e,t){for(var n=0;n67.5&&v<=90||(r+=2*y),u=p,u=90===l?y:270===l?-y:0,o===Yc?(u=0===t&&c&&s===ds?u+u/2:u,Ao(this).attr("transform","translate("+(-u+f)+" \n "+(-r-f)+") rotate("+l+")")):(u=0===t&&c&&s===ds?u-u/2:u,Ao(this).attr("transform","translate("+(u-f)+" \n "+(r+f)+") rotate("+l+")"))}),t},Os=function changeTickOrientation(e,t,n){var r=t._smartTicks,i=t.config(),a=t.dependencies().labelManager,o=i.labels,u=i.orientation,c=o.rotation,s=o.smartTicks,l=e.selectAll(".tick text");if(l.selectAll("tspan").remove(),0===c||!1!==s||"top"!==u&&"bottom"!==u)if(0===c&&!1===s)l.attr("transform","");else{l.attr("y",0).attr("x",0).text(""),Eo(l,"tspan",function(e,t){return r[t].lines},"smart-text").attr("dy","0").style("opacity","0").transition().duration(1e3).attr("dy",function(e,t){return"bottom"===u||0!==t?r[t].oriTextHeight:-r[t].oriTextHeight*(r[t].lines.length-1)-n}).style("opacity",1).attr("x",0).text(function(e){return e})}else Ms(t,l,a,i);return l},Ts=function setFixedBaseline(e){e.config().fixedBaseline&&e.setFixedBaseline()},Fs=function setAxisNamePos(e,t,n){var r=n.axisNameHeight,i=n.yOffset,a=n.labelOffset,o=n.availableSpace;switch(t){case Xc:e.attr("transform","translate("+-(o.width-r)+","+(i+a)+")rotate(-90)");break;case Kc:e.attr("transform","translate("+(o.width-r)+","+(i+a)+")rotate(90)");break;case Yc:e.attr("transform","translate("+o.width/2+","+(-o.height+r)+")");break;case Gc:e.attr("transform","translate("+o.width/2+","+(o.height-r/2)+")")}return e};function cartesian_axis_helper_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);tt.length&&(t=p,r=e.smartTicks()?e.smartTicks()[s]:{},n=o[s]),d}),n=h.getOriSize(t),{largestLabel:t,largestLabelDim:n,axisTickLabels:i,allLabelLengths:o,smartTick:r}},js=function setOffset(e){var t=0,n=0,r=e.logicalSpace(),i=e.config(),a=i.orientation,o=i.xOffset,u=i.yOffset;a===Xc&&(t=void 0===o?r.width:o),a===Yc&&(n=void 0===u?r.height:u),e.config({xOffset:t,yOffset:n})},Is=function adjustRange(e,t,n,r){var i=function getAxisOffset(e,t,n){var r=Math.abs(t[1]-t[0])/(n[1]-n[0])*e,i=t[1]-t[0],a=i/r;return(i-i/(a+1)*a)/2}(e,t,n);return r===Yc||r===Gc?(t[0]+=i,t[1]-=i):(t[0]-=i,t[1]+=i),t},Ds=function registerChangeListeners(e){return e.store().model.next(["domain","range","mount","config"],function(){for(var t=arguments.length,n=Array(t),r=0;r0&&e.length*(t+this._minTickDistance.width)>i&&this.config({labels:{rotation:-90}})}return this}},{key:"adjustRange",value:function adjustRange(){return this}},{key:"getScaleValue",value:function getScaleValue(e){if(null!==e&&void 0!==e)return this.scale()(e)}},{key:"getTickSize",value:function getTickSize(){return this.axis().tickSize()}},{key:"getAxisDimensions",value:function getAxisDimensions(){return this.axisDimensions(function computeAxisDimensions(e){var t={},n=e.config(),r=n.name,i=n.labels,a=n.tickValues,o=(i.smartTicks?0:i.rotation)*Math.PI/180,u=e.dependencies().labelManager,c=Ns(e),s=c.largestLabelDim,l=c.axisTickLabels,f=c.smartTick,h=s.height,d=s.width;return 0===e.domain().length?null:(!1===e._rotationLock&&(e.setRotationConfig(a||l,s.width),e._rotationLock=!1),t=i.smartTicks?f:{width:Math.abs(h*Math.sin(o))+Math.abs(d*Math.cos(o)),height:Math.abs(d*Math.sin(o))+Math.abs(h*Math.cos(o))},u.setStyle(e._axisNameStyle),{tickSize:e.getTickSize(),tickLabelDim:t,axisLabelDim:u.getOriSize(r),largestLabelDim:s,axisTickLabels:l})}(this)),this.axisDimensions()}},{key:"getLogicalSpace",value:function getLogicalSpace(){return this.logicalSpace()||(this.logicalSpace(function calculateContinousSpace(e){e.range();var t=e.config(),n=e.getAxisDimensions(),r=t.orientation,i=t.show,a=t.showAxisName,o=n.axisLabelDim;if(!1===i)return{width:0,height:0};var u=o.width;if(r===Yc||r===Gc){var c=Ls(e,n,t),s=c.width,l=c.height;return{width:Math.max(s,u),height:l}}var f=Rs(e,n,t),h=f.width,d=f.height;return{width:h,height:Math.max(d,a?u:0)}}(this)),js(this),this.logicalSpace()),this.logicalSpace()}},{key:"invert",value:function invert(){for(var e=this,t=arguments.length,n=Array(t),r=0;ra[1];return"band"===r?(n=i.invertExtent(e,t),[i(o?n[n.length-1]:n[0]),i(o?n[0]:n[n.length-1])+i.bandwidth()]):[e,t]}},{key:"updateDomainBounds",value:function updateDomainBounds(e){var t=this.domain();return this.config().domain?t=this.config().domain:(0===t.length&&(t=e),e.length&&(t=[Math.min(t[0],e[0]),Math.max(t[1],e[1])])),this.domain(t)}},{key:"updateDomainCache",value:function updateDomainCache(e){!1===this._domainLock&&(this.domain([]),this._domainLock=!0);var t=[];return e&&e.forEach(function(e){void 0!==e&&null!==e&&t.push(e)}),this.updateDomainBounds(t)}},{key:"getMinTickDifference",value:function getMinTickDifference(){return this.domain()}},{key:"getFormattedTickValues",value:function getFormattedTickValues(e){return e}},{key:"setTickValues",value:function setTickValues(){var e=this.config().tickValues;return e?(e instanceof Array&&this.axis().tickValues(e),this):this}},{key:"getUnitWidth",value:function getUnitWidth(){return 0}},{key:"serialize",value:function serialize(){return{name:this.name,type:this.type,range:this.range(),config:this.config()}}},{key:"registerEvent",value:function registerEvent(e,t){this._eventList.push({name:e,action:t})}},{key:"on",value:function on(e,t){e=e||"update",this.registerEvent(e,t)}},{key:"render",value:function render(){return this.mount()&&function renderAxis(e){var t=e.config(),n=e.dependencies().labelManager,r=e.mount(),i=e.range(),a=e.axis(),o=e.scale(),u=e._axisNameStyle,c=e._tickLabelStyle,s=e.formatter,l=e.tickValues,f=t.orientation,h=t.name,d=t.labels,p=t.xOffset,y=t.yOffset,g=t.axisNamePadding,v=t.className,m=t.showAxisName,b=t.show,_=t.id,x=t.interpolator,w=t.classPrefix;if(b){var k=e.getTickSize(),C=Eo(Ao(r),"g",[e],""+v,{},function(e){return e.config().id});n.setStyle(c),"linear"===x&&e.setTickValues();var S=o.ticks||o.quantile||o.domain;s&&a.tickFormat(s(l||a.tickValues()||S()));var P=Math.abs(i[0]-i[1]),A=e.axisDimensions().tickLabelDim;C.attr("transform","translate("+p+","+y+")"),Ts(e),!1===d.smartTicks?C.transition().duration(1e3).call(a):C.call(a),C.selectAll(".tick").classed(w+"-ticks",!0),C.selectAll(".tick line").classed(w+"-tick-lines",!0),C.selectAll(".tick text").classed(w+"-ticks",!0).classed(w+"-ticks-"+_,!0),Os(C,e,k);var E=Eo(C,"text",[h],w+"-axis-name").attr("text-anchor","middle").classed(w+"-axis-name-"+_,!0).text(function(e){return e});E.classed(ys,!m);var M=P/2;n.setStyle(u);var O=n.getOriSize(h),T={labelProps:A,tickSize:k,axisNamePadding:g,axisNameHeight:O.height,axisNameWidth:O.width,yOffset:y,xOffset:p,labelOffset:M,availableSpace:e.availableSpace()};Fs(E,f,T)}}(this),this}},{key:"remove",value:function remove(){return this.store().unsubscribeAll(),Ao(this.mount()).remove(),this}},{key:"unsubscribe",value:function unsubscribe(){return this.store().unsubscribeAll(),this}},{key:"isReverse",value:function isReverse(){var e=this.range();return e[0]>e[1]}},{key:"getPixelToValueRatio",value:function getPixelToValueRatio(){var e=this.scale(),t=e.range(),n=e.domain();return Math.abs(t[1]-t[0])/(n[1]-n[0])}},{key:"id",get:function get(){return this._id}}],[{key:"defaultConfig",value:function defaultConfig(){return Es}}]),SimpleAxis}(),Vs=function(){function defineProperties(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:0,t=arguments[1],n=arguments[2],r=arguments[3],i=n.left,a=n.right,o=n.top,u=n.bottom,c=this.config(),s=c.orientation,l=c.fixedBaseline,f=this.getAxisDimensions().tickLabelDim;if(this.availableSpace({width:e,height:t}),s===Yc||s===Gc){var h=f.width;this.range([(l?0:h/2)+i,e-a-h/2]);var d=this.getLogicalSpace().height;r&&this.config({yOffset:Math.max(d,t)})}else{var p=f.height;this.range([t-u-(l?1:p/2),p/2+o]);var y=this.getLogicalSpace().width;r&&this.config({xOffset:Math.max(y,e)})}return this}},{key:"setTickValues",value:function setTickValues(){var e=this.config().tickValues,t=this.axis();return e?(e instanceof Array&&this.axis().tickValues(e),this):(t.tickValues(this.getTickValues()),this)}},{key:"getTickValues",value:function getTickValues(){var e=this.config(),t=e.orientation,n=e.tickValues,r=this.range(),i=this.axis(),a=Math.abs(r[0]-r[1]),o=Ns(this).largestLabelDim;return n?i.scale().ticks(n):function getNumberOfTicks(e,t,n,r){var i=n.scale().ticks(),a=r.config().numberOfTicks,o=i.length,u=o;return o*(1.5*t)>e&&(u=Math.floor(e/(1.5*t))),u=Math.min(a,Math.max(1,u)),n.scale().ticks(u)}(a,o[t===Gc||t===Yc?"width":"height"],i,this)}},{key:"getMinTickDifference",value:function getMinTickDifference(){return xa(this.config().tickValues)}},{key:"setFixedBaseline",value:function setFixedBaseline(e){var t=this.config(),n=t.orientation,r=t.labels.rotation,i=this.axis(),a=this._axisDimensions.largestLabelDim,o=a.width,u=a.height;return i.tickTransform(function(e,t){return 0!==t||n!==Xc&&n!==Kc?0!==t||n!==Yc&&n!==Gc||0!==r?"":"translate("+o/2+"px, 0px) rotate("+r+"deg)":"translate(0, -"+u/3+"px)"}),e}}],[{key:"type",value:function type(){return Qc}}]),ContinousAxis}(),Zs=function(){function defineProperties(e,t){for(var n=0;n0&&e.length*(t+this._minTickDistance.width)>a&&(a&&o0&&e.length*t>i&&(i&&1.25*a1?t.range:[al].concat(props_toConsumableArray(t.range)));var r=na(n,e.config()),i=na(r,t);return i.range instanceof Array&&(i.range=i.range.map(function(e,t){return sl(e,il[t])}),i.stops=t.stops||i.range.length),i.value=sl(i.value,i.value),i}},domain:{},scale:{},uniqueValues:{}};function color_strategy_defineProperty(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function color_strategy_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);tMath.min(t.length,18))for(var r=aa()(function hslInterpolator(){return Ne}(),t.map(function(e){return ul(e)})),i=0;i0&&void 0!==arguments[0]?arguments[0]:[];if(e.length){var t=this.scale(),n=t.range?t.range():null,r=this._colorStrategy.domainRange()(e,this.config().stops,n);this.domain(r.domain),r.range&&this.scale().range(r.range),this.uniqueValues(r.uniqueVals),this.scale().domain(r.scaleDomain||this.domain())}return this}},{key:"serialize",value:function serialize(){return{type:this.constructor.type(),scale:this.scale(),domain:this.domain(),config:this.config()}}},{key:"transformColor",value:function transformColor(e,t){var n=360*e[0],r=100*e[1],i=100*e[2],a=e[3]||1,o=n+t[0],u=r+t[1],c=i+t[2],s=a+t[3]||0;return{color:"hsla("+o+","+u+"%,"+c+"%,"+s+")",hsla:[o/360,u/100,c/100,s]}}},{key:"id",value:function id(){return this._id}}],[{key:"defaultConfig",value:function defaultConfig(){return ol}},{key:"type",value:function type(){return"color"}}]),ColorAxis}(),Sl={value:36,range:[36,1e3]};function size_strategy_defineProperty(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function size_strategy_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t0&&void 0!==arguments[0]?arguments[0]:0,t=this.config().value,n=this.scale(),r=this.domain()||[1,1];return n&&r[0]!==r[1]?this._sizeStrategy.range(e,n,this.domain(),this.uniqueValues()):t}},{key:"updateDomain",value:function updateDomain(e){if(e){var t=(0,this._sizeStrategy.domain)(e,this.config().intervals);this.domain(t.domain),this.uniqueValues(t.uniqueVals),this.scale().domain(t.scaleDomain||this.domain())}return this}},{key:"serialize",value:function serialize(){return{type:this.constructor.type(),scale:this.scale(),domain:this.domain(),range:this.range(),config:this.config()}}},{key:"id",value:function id(){return this._id}}],[{key:"defaultConfig",value:function defaultConfig(){return Sl}},{key:"type",value:function type(){return"size"}}]),SizeAxis}(),Ol={generator:null,value:"circle",range:["circle","diamond","star","cross","square","wye","triangle"]},Tl={config:{},domain:{},scale:{},uniqueValues:{},generator:{}},Fl=function(){function defineProperties(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:[];return e.length&&(this.uniqueValues(e),this.domain(e),this.scale().domain(e),this.config().generator&&(this._generatedShapes=function shapeGenerator(e,t){var n={};return e.forEach(function(e){n[e]=t(e)}),n}(e,this.config().generator))),this}},{key:"serialize",value:function serialize(){return{type:this.constructor.type(),scale:this.scale(),domain:this.domain(),range:this.config().range,config:this.config()}}},{key:"id",value:function id(){return this._id}}],[{key:"defaultConfig",value:function defaultConfig(){return Ol}},{key:"type",value:function type(){return"shape"}}]),ShapeAxis}();function data_type_scale_map_defineProperty(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var Il="measure",Dl="temporal",Ll=(data_type_scale_map_defineProperty(Nl={},"dimension",Zc),data_type_scale_map_defineProperty(Nl,Il,Qc),data_type_scale_map_defineProperty(Nl,Dl,Jc),function(e,t,n){var r=n.groupBy instanceof Array?n.groupBy:[n.groupBy],i=r.map(function(t){return e.findIndex(function(e){return e.name===t})});if(void 0!==i.find(function(e){return-1===e}))throw new Error("Groupby field "+r+" not found in schema");return function nestCollection(e){var t=T();return e.keys.forEach(function(e){return t.key(function(t){return t[e]})}),t.entries(e.data)}({keys:i,data:t})});var Rl;function transform_factory_defineProperty(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var Bl=(transform_factory_defineProperty(Rl={},"identity",function identityTransform(e,t,n){return t}),transform_factory_defineProperty(Rl,"group",Ll),transform_factory_defineProperty(Rl,"stack",function(e,t,n){var r=n.uniqueField,i=n.value,a=n.groupBy,o=n.sort||"descending",u=function normalizeData(e,t,n,r,i){var a=Ll(t,e,{groupBy:r}),o=t.findIndex(function(e){return e.name===r}),u=t.findIndex(function(e){return e.name===n}),c=t.findIndex(function(e){return e.name===i}),s=e.map(function(e){return e[c]}).filter(function(e,t,n){return n.indexOf(e)===t}).sort(),l=t.reduce(function(e,t,n){return e[n]=t.name,e},{});return{data:a.map(function(e){var t={},n=e.values.reduce(function(e,n){return e=n.reduce(function(e,r,i){return i===c?(e[r]=n[u],t[r]=n):i!==u&&(e[l[i]]=r),e},e)},{});return n._tuple=t,s.forEach(function(t){if(void 0===n[t]){n[t]=0;var r=new Array(e.values[0].length);r[o]=e.key,r[c]=t,n._tuple[t]=r}}),n}),keys:s}}(t,e,i,r,a),c=u.keys,s={},l=n.orderBy,f=e.findIndex(function(e){return e.name===l}),h=e.findIndex(function(e){return e.name===a});-1!==f&&(c.forEach(function(e){var n=t.find(function(t){return t[h]===e});s[e]=n[f]}),u.keys.sort(function(e,t){return s[e].localeCompare(s[t])}));var d=va({keys:u.keys,offset:n.offset||"diverging",order:o,data:u.data});return d.forEach(function(e){e.forEach(function(t){t.data=t.data._tuple[e.key]})}),d}),Rl);var zl=function transformFactory(e){var t=Bl[e];if("function"!=typeof t)throw new Error("Invalid transform type supplied.");return t},Hl=function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function sliceIterator(e,t){var n=[],r=!0,i=!1,a=void 0;try{for(var o,u=e[Symbol.iterator]();!(r=(o=u.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){i=!0,a=e}finally{try{!r&&u.return&&u.return()}finally{if(i)throw a}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}();var Vl,Ul=f.BAND,Wl=function getLayerColor(e,t){var n=e.datum,r=e.index,i=t.colorEncoding,a=t.colorAxis,o=t.colorFieldIndex,u="",c="";return i&&i.value instanceof Function?(c=i.value(n,r),u=i.value(n,r)):(u=a.getRawColor(n._data[o]),c=a.getHslString(u)),{color:c,rawColor:u}},ql=function transfromColor(e,t,n,r){t.meta.stateColor[n]=t.meta.stateColor[n]||t.meta.originalColor;var i=e.transformColor(t.meta.stateColor[n],r);return t.meta.stateColor[n]=i.hsla,i},Gl=function applyInteractionStyle(e,t,n,r){var i=e.getPlotElementsFromSet(t),a=e.axes().color,o=r.apply,u=r.interactionType;n.forEach(function(e){var t=e.type;i.style(t,function(n){var r=n.meta,i=r.colorTransform,c=r.stateColor,s=r.originalColor;if(i[u]=i[u]||{},o&&!i[u][t])return i[u][t]=e.intensity,ql(a,n,t,e.intensity).color;if(!o&&i[u][t])return i[u][t]=null,ql(a,n,t,e.intensity.map(function(e){return-e})).color;var l=c[t]?c[t]:s,f=Hl(l,4);return"hsla("+360*f[0]+","+100*f[1]+"%,"+100*f[2]+"%, "+(f[3]||1)+")"})})},Yl=function getAxesScales(e){var t=[Bc.X,Bc.Y].map(function(t){return e[t]}),n=Hl(t,2),r=n[0],i=n[1],a=[r,i].map(function(e){return e&&e.scale()}),o=Hl(a,2);return{xAxis:r,yAxis:i,xScale:o[0],yScale:o[1]}},Xl=function getIndividualClassName(e,t,n,r){var i=r.config().individualClassName,a="";return i instanceof Function&&(a=i(e,t,n,r)),a},Kl=function attachDataToVoronoi(e,t){var n;e.data((n=[]).concat.apply(n,function helpers_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t=e[0]?(i=d=e[1],h=f=e[0]):(i=d=e[0],h=f=e[1]),(t=a===ir.FieldType.MEASURE?{x:h,x0:d,y:n[u],y0:n[u]}:{x:n[o],x0:n[o],y:i,y0:f})._data=n,t._id=n[l]}else(t={x:e[o],y:e[u],x0:e[c],y0:e[s]})._data=e,t._id=e[l];return t})}).filter(function(e){return e.length})}(e,t,this.encodingFieldsInf(),this.transformType())}},{key:"getNearestPoint",value:function getNearestPoint(){return null}},{key:"applyInteractionStyle",value:function applyInteractionStyle(e,t,n){var r=(this.config().interaction||{})[e];r&&Gl(this,t,r,{apply:n,interactionType:e})}},{key:"transformType",value:function transformType(){return arguments.length?(this._transformType=arguments.length<=0?void 0:arguments[0],this):this._transformType}},{key:"render",value:function render(){return this}},{key:"elemType",value:function elemType(){return"g"}},{key:"remove",value:function remove(){return this.store().unsubscribeAll(),Ao(this.mount()).remove(),this}},{key:"cachePoint",value:function cachePoint(e,t){if(null===e)return this;var n=this._pointMap;return!n[e]&&(n[e]=[]),n[e].push(t),this}},{key:"dataProps",value:function dataProps(){return arguments.length?(this._dataProps=arguments.length<=0?void 0:arguments[0],this):this._dataProps}},{key:"getIdentifiersFromData",value:function getIdentifiersFromData(e){var t=this.data().getData().schema,n=this.data().getFieldsConfig(),r=[[],[]],i=this.encodingFieldsInf(),a=i.xFieldType,o=i.yFieldType,u=i.xField,c=i.yField,s=[a,o].map(function(e){return e===ir.FieldType.MEASURE}),l=tf(s,2),f=l[0],h=l[1];if(t.forEach(function(t,i){var a=t.name;n[a].def.type===ir.FieldType.DIMENSION&&(r[0].push(a),r[1].push(e[i]))}),f&&h){var d,p,y=n[u].index,g=n[c].index;(d=r[0]).push.apply(d,[u,c]),(p=r[1]).push.apply(p,[e[y],e[g]])}return r}},{key:"getPlotSpan",value:function getPlotSpan(){return{x:0,y:0}}},{key:"getPlotPadding",value:function getPlotPadding(){return{x:0,y:0}}},{key:"getPointsFromIdentifiers",value:function getPointsFromIdentifiers(e){var t,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=n.getAllAttrs,i=n.getBBox;if(!this.data())return[];var a=void 0,o=void 0;if(e instanceof ar.a){var u=e.getData();a=u.schema.map(function(e){return e.name}),o=u.data}else a=e[0],o=e.slice(1,e.length);var c=this._points,s=this.data().getFieldsConfig(),l=(t=[]).concat.apply(t,function base_layer_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t2&&void 0!==arguments[2]?arguments[2]:{},r=Ao(n.event.target).data()[0];if(Di(r)){var i=r.datum,a=i.data,o=i.uid;return{id:this.getIdentifiersFromData(a,o),layerId:this.id()}}return null}},{key:"getPlotElementsFromSet",value:function getPlotElementsFromSet(e){return Ao(this.mount()).selectAll(this.elemType()).filter(function(t){return-1!==e.indexOf(t.datum.uid)})}},{key:"render",value:function render(e){var t=this,n=this.measurement(),r=n.height,i=n.width,a=this.config(),o=a.classPrefix,u=a.defClassName,c=a.minOuterRadius,s=a.innerRadius,l=a.outerRadius,f=a.cornerRadius,h=a.padAngle,d=a.padRadius,p=a.padding,y=a.transition,g=a.innerRadiusFixer,v=this.axes().size,m=this._store,b=m.get("transformedData"),_=r-p.top-p.bottom,x=i-p.left-p.right,w=Gi(u,this.id(),o),k=function getRadiusRange(e,t,n){var r=n.minOuterRadius,i=n.innerRadius,a=n.outerRadius,o=n.innerRadiusFixer;return[Math.max(i+o||0,r),a||Math.min(t,e)/2]}(x,_,{minOuterRadius:c,innerRadius:s,outerRadius:l,innerRadiusFixer:g}),C=this.axes().color,S=l||Math.min(_,x)/2,P=m.get("domain").radius,A=function rangeValueGetter(e){return function getRangeValue(e,t,n,r,i){var a=1,o=e.outerRadiusValue,u=e.sizeVal,c=i.domain(),s=i.getSize(u)/(c?i.range()[1]:i.config().value);return a*=(t[1]-t[0])/(n[1]-n[0]),(t[0]+(o-n[0])*a||r)*s}(e,k,P,S,v)},E=bf().innerRadius(s?Math.min(_/2,x/2,s):0).cornerRadius(f).padAngle(h).padRadius(d);this._chartWidth=x,this._chartHeight=_;var M=Eo(Ao(e),"g",[1],w[0]+"-group").classed(w[1]+"-group",!0).attr("transform","translate("+x/2+","+_/2+")"),O=[],T=0;return Eo(M,"g",b,""+w[0],{update:function tween(e){Eo(e,"path",function(e,t){return[{datum:e,index:t,arcFn:E,meta:{originalColor:C.getRawColor(e.colorVal),stateColor:{},colorTransform:{}}}]},w[0]+"-path").style("fill",function(e){return C.getColor(e.datum.colorVal)}).transition().duration(y.duration).attrTween("d",function(){for(var e=arguments.length,t=Array(e),n=0;n0&&e.forEach(function(e){var i=e[0].datum.startAngle,a=e[e.length-1].datum.endAngle,o=2*Math.PI*i/(2*Math.PI+i-a);e.forEach(function(e){var i=e.elem,a=e.datum;i.each(function(){var e=Ao(this);e.selectAll("path").transition().duration(t.duration).attrTween("d",function(){return function(e){var t=n(a);return a.outerRadius=t,r(ra()(a,{startAngle:o,endAngle:o,outerRadius:t})(e))}}).remove(),e.remove()})})})}(O,y,A,E),this}},{key:"getPointsFromIdentifiers",value:function getPointsFromIdentifiers(e){if(!this.data())return[];var t=e[0],n=e.slice(1,e.length),r=Ao(this.mount()).selectAll("path").data(),i=this.data().getFieldsConfig(),a=r.filter(function(e){var r=e.datum.data,a=e.datum.uid;return t.every(function(e,t){return e in i&&i[e].def.type===ir.FieldType.DIMENSION?-1!==n.findIndex(function(n){return n[t]===r[i[e].index]}):e!==nr.ROW_ID||-1!==n.findIndex(function(e){return e[t]===a})})})[0];if(a){var o=a.arcFn.centroid(a.datum);return[{x:o[0]+this._chartWidth/2,y:o[1]+this._chartHeight/2,width:2,height:2}]}return[]}}],[{key:"defaultConfig",value:function defaultConfig(){return yf}},{key:"formalName",value:function formalName(){return"arc"}}]),ArcLayer}(),xf=function drawText(e,t,n,r){var i=Ao(e).selectAll("g").data(t),a=i.enter().append("g").each(function(e){To(this,e.enter)}).merge(i),o=Lo(Ao(e),n.className),u=parseInt(o.fontSize,10);return r.setStyle(o),a.each(function(e){var t,n=Ao(this),i=e.update,a=e.text,o=e.color,c=e.textanchor,s=e.style,l=e.background;if(t=l.value){var f=l.padding,h=void 0,d=r.getOriSize(e.text),p=d.width,y=d.height,g=Eo(n,"rect",[1]);h="end"===c?p:"start"===c?0:p/2,To(g.node(),{x:i.x-h-f/2,y:i.y-u-f/2,width:p+f,height:y+f}),l&&Fo(g,{background:t})}var v=Eo(n,"text",function(e){return[e]}).text(a),m=v.node();s&&Fo(m,s),o&&Fo(m,{fill:o}),e.className&&v.classed(e.className,!0),To(m,i),v.attr("text-anchor",c)}),i.exit().remove(),i},wf={defClassName:"layer-text",classPrefix:"muze",className:"",transform:{type:"identity"},interaction:{highlight:[{type:"fill",intensity:[0,0,-15,0]}],fade:[{type:"fill",intensity:[0,0,15,0]}],focus:[{type:"fill",intensity:[0,0,15,0]}]},transition:{effect:"cubic",duration:1e3},encoding:{color:{},text:{value:"",background:{padding:10}}},states:{highlight:{className:"muze-layer-text-highlight"},fadeout:{className:"muze-layer-text-fadeout"},selected:{className:"muze-layer-text-selected"}}},kf=(n(27),function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function sliceIterator(e,t){var n=[],r=!0,i=!1,a=void 0;try{for(var o,u=e[Symbol.iterator]();!(r=(o=u.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){i=!0,a=e}finally{try{!r&&u.return&&u.return()}finally{if(i)throw a}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}()),Cf=function(){function defineProperties(e,t){for(var n=0;n4)}(r)?r:pa(r).size(i)(a),Eo(n,"path",function(e){return[e]}).attr("d",s)}else e.shape="circle",createShape(e,t)}(e,this)}),(t=c?t:t.transition().duration(c?0:i.duration)).attr("transform",function(e){return"translate("+e.update.x+","+e.update.y+")"}).each(function(e){var t=e.style,n=Ao(this);Xi(t,function(e){return n.style(e,t[e])}),n.attr("class",""+a),n.classed(e.className,!0)});var h=l.exit();c?h.remove():h.transition().ease(Wi[u]).duration(o).on("end",function(){Ao(this).remove()}).style("fill-opacity",0).style("stroke-opacity",0)},Af={defClassName:"layer-point",className:"",classPrefix:"muze",defColorStyle:"stroke",interaction:{highlight:[{type:"fill",intensity:[0,0,-20,0]}],fade:[{type:"fill",intensity:[0,0,20,0]}],focus:[{type:"fill",intensity:[0,0,20,0]}]},innerPadding:.1,nearestPointThreshold:10,transform:{type:"identity"},transition:{effect:"cubic",duration:1e3},encoding:{size:{value:30},color:{},shape:{value:"circle"},x:{},y:{},strokeOpacity:{value:.5},fillOpacity:{value:.5}},shapes:["circle","cross","diamond","square","star","wye","triangle"],sizes:[20,30,40,50,60,70]},Ef=(n(29),function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function sliceIterator(e,t){var n=[],r=!0,i=!1,a=void 0;try{for(var o,u=e[Symbol.iterator]();!(r=(o=u.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){i=!0,a=e}finally{try{!r&&u.return&&u.return()}finally{if(i)throw a}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}()),Mf=function(){function defineProperties(e,t){for(var n=0;n3&&void 0!==arguments[3]?arguments[3]:{},a=[],o=t.size,u=t.shape,c=t.color,s=t.x,l=t.y,f=o.field,h=o.value,d=u.field,p=s.field,y=l.field,g=n.size,v=n.shape,m=this.data().getFieldsConfig(),b=m[p]&&m[p].def.type===ir.FieldType.DIMENSION,_=m[y]&&m[y].def.type===ir.FieldType.DIMENSION,x=b?Bc.X:_?Bc.Y:null,w=c&&c.field,k=m[w]&&m[w].index,C=this._store.get("measurement"),S=m[d]&&m[d].index,P=m[f]&&m[f].index,A=n.color,E=i.offset,M=E.x,O=E.y,T=function _loop(i,o){var u=e[i],s=u._data,l=h instanceof Function?h(u,i):g.getSize(s[P]),f=v.getShape(s[S]),d=[Bc.X,Bc.Y].map(function(e){var r=null===u[e]?void 0:u[e],i=e===Bc.X?C.width:C.height;return t[e].field?n[e].getScaleValue(r):i/2}),p=Ef(d,2),y=p[0],m=p[1];y+=M,m+=O;var b=Wl({datum:u,index:i},{colorEncoding:c,colorAxis:A,colorFieldIndex:k}),_=b.color,w=b.rawColor,E={fill:_,stroke:_};if(!isNaN(y)&&!isNaN(m)){var T={enter:{x:y,y:m},update:{x:y,y:m},shape:f,size:Math.abs(l),meta:{stateColor:{},originalColor:w,colorTransform:{}},style:E,_data:s,_id:u._id,source:u._data,rowId:u._id};T.className=Xl(u,i,e,r),a.push(T),r.cachePoint(u[x],T)}},F=0,N=e.length;F=0?C:k))):(p=c===Nc||r[e]>=0?C:k,y=Math.abs(p-(c===Nc?S:r[e]>=0?k:C))),d=k}else p=0,y=f[i];return{enterSpace:g,enter:d,pos:p,space:y}}),jf=function resolveDimensions(e,t,n){var r={xAxis:n.x,yAxis:n.y},i=Nf("x",r,t,e),a=i.enterSpace,o=i.enter,u=i.pos,c=i.space,s=Nf("y",r,t,e),l=s.enterSpace;return{enter:{x:o,y:s.enter,width:a,height:l},update:{x:u,y:s.pos,width:c,height:s.space}}},If=function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function sliceIterator(e,t){var n=[],r=!0,i=!1,a=void 0;try{for(var o,u=e[Symbol.iterator]();!(r=(o=u.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){i=!0,a=e}finally{try{!r&&u.return&&u.return()}finally{if(i)throw a}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),Df=function(){function defineProperties(e,t){for(var n=0;n=k.x&&e<=k.width+k.x&&t>=k.y&&t<=k.height+k.y){c=w;break}c=null}var C=c&&c._data;return C&&(u=this.getIdentifiersFromData(C,c._id)),c?{dimensions:[c.update],id:u,layerId:this.id()}:c}},{key:"getPlotSpan",value:function getPlotSpan(){return this._plotSpan}}],[{key:"formalName",value:function formalName(){return"bar"}},{key:"defaultConfig",value:function defaultConfig(){return Ff}},{key:"defaultPolicy",value:function defaultPolicy(e,t){var n=rf.defaultPolicy(e,t),r=n.encoding.color.field,i=n.transform;return r&&(i.groupBy=r),n}}]),BarLayer}(),zf={defClassName:"layer-tick",className:"",classPrefix:"muze",interaction:{highlight:[{type:"stroke",intensity:[0,0,-15,0]}],fade:[{type:"stroke",intensity:[0,0,15,0]}],focus:[{type:"stroke",intensity:[0,0,15,0]}]},innerPadding:.1,transform:{type:"identity"},transition:{effect:"cubic",duration:1e3},encoding:{color:{},x:{},y:{},x0:{},y0:{},strokeOpacity:{value:.5},fillOpacity:{value:.5}},states:{highlight:{className:"muze-layer-tick-highlight"},fadeout:{className:"muze-layer-tick-fadeout"},selected:{className:"muze-layer-tick-selected"}}},Hf=function(e){var t=e.points,n=e.container,r=e.keyFn,i=e.className,a=Ao(n),o=a.selectAll("path").data(t,r),u=o.enter().append("path");return a.attr("class",i||""),u.each(function(e){var t=Ao(this),n=e.enter||{};Object.entries(n).forEach(function(e){return!isNaN(e[1])&&t.attr(e[0],e[1])})}),o.exit().remove(),o.merge(u).each(function(e){var t=Ao(this),n=e.update,r=e.style||{},i=void 0!==n.x0?n.x0:n.x,a=void 0!==n.y0?n.y0:n.y,o="M "+n.x+" "+n.y+" L "+i+" "+a;e.className&&t.classed(e.className,!0),t.attr("d",o),Object.entries(r).forEach(function(e){return t.style(e[0],e[1])})})},Vf=(n(33),function(){function defineProperties(e,t){for(var n=0;n3&&void 0!==arguments[3]?arguments[3]:{},i=[],a=Yl(n),o=a.xAxis,u=a.yAxis,c=this.data().getFieldsConfig(),s=this.encodingFieldsInf(),l=s.xField,f=s.yField,h=s.x0Field,d=s.y0Field,p=s.xFieldType,y=s.yFieldType,g=p===ir.FieldType.DIMENSION,v=y===ir.FieldType.DIMENSION,m=g?Bc.X:v?Bc.Y:null,b=t.color,_=b&&b.field,x=c[_]&&c[_].index,w=this._store.get("measurement"),k=n.color,C=r.offset,S=C.x,P=C.y,A=r.span,E=A.x,M=A.y,O=0,T=e.length;O0&&(n[0]=[].concat(field_sanitizer_toConsumableArray(n[0]),field_sanitizer_toConsumableArray(n[1])),n[1]=[]),{fields:n.map(function(e,t){return 1===t?r[t].concat(n[t]):n[t].concat(r[t])}),dimensions:[].concat(field_sanitizer_toConsumableArray(n[0]),field_sanitizer_toConsumableArray(n[1])),measures:[].concat(field_sanitizer_toConsumableArray(r[0]),field_sanitizer_toConsumableArray(r[1])),temporal:[].concat(field_sanitizer_toConsumableArray(i[0]),field_sanitizer_toConsumableArray(i[1])),categorical:[].concat(field_sanitizer_toConsumableArray(a[0]),field_sanitizer_toConsumableArray(a[1]))}}(i,n)}),r=Sh(n,2),i=r[0],a=r[1],o=i.fields,u=i.dimensions,c=i.measures,s=i.temporal,l=i.categorical,f=a.fields,h=a.dimensions,d=a.measures;return{rows:o,rowDimensions:u,rowMeasures:c,rowTemporalFields:s,rowCategoricalFields:l,columns:f,columnTemporalFields:a.temporal,columnCategoricalFields:a.categorical,columnDimensions:h,columnMeasures:d}},Eh=function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function sliceIterator(e,t){var n=[],r=!0,i=!1,a=void 0;try{for(var o,u=e[Symbol.iterator]();!(r=(o=u.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){i=!0,a=e}finally{try{!r&&u.return&&u.return()}finally{if(i)throw a}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),Mh=function(){function defineProperties(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:{},t=arguments[1],n=Jh(th,t.rows,e),r=Eh(n,2),i=r[0],a=r[1],o=Jh("column",t.columns,e),u=Eh(o,2),c=u[0],s=u[1];return this.axisFrom({row:a,column:s}),this.headerFrom({row:i,column:c}),this}}]),VisualEncoder}(),Th={linear:Qs,band:Js,temporal:nl,size:Ml,color:Cl,shape:jl},Fh={dimension:f.BAND,categorical:f.BAND,measure:f.LINEAR,temporal:f.TIME},Nh=function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function sliceIterator(e,t){var n=[],r=!0,i=!1,a=void 0;try{for(var o,u=e[Symbol.iterator]();!(r=(o=u.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){i=!0,a=e}finally{try{!r&&u.return&&u.return()}finally{if(i)throw a}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}();function encoder_helper_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t1?e.position="both":e.position=n.axisFrom()[a],r[o]=Ih(o,s[i],e,o===$f?l:f)}),r}},{key:"getFacetsAndProjections",value:function getFacetsAndProjections(e,t){for(var n=[],r=[],i=0,a=[],o=[],u=e[0],c=e[1],s=u.length,l=c.length,f=this.axisFrom(),h=0;hi)for(var g=i;g-1&&(r=[[b,b]],a.splice(_,1)),o.splice(0,1)}else{var x=a.length-1,w=a[x];r=[[w]];var k=Dh(o,w);k>-1&&(r=[[w,w]],o.splice(k,1)),a.splice(x,1)}return{facets:n=(n=[].concat(a,o)).filter(function(e,t,n){return t===n.findIndex(function(t){return t.toString()===e.toString()})}),projections:r}}},{key:"fieldSanitizer",value:function fieldSanitizer(e,t){return function get(e,t,n){null===e&&(e=Function.prototype);var r=Object.getOwnPropertyDescriptor(e,t);if(void 0===r){var i=Object.getPrototypeOf(e);return null===i?void 0:get(i,t,n)}if("value"in r)return r.value;var a=r.get;return void 0!==a?a.call(n):void 0}(CartesianEncoder.prototype.__proto__||Object.getPrototypeOf(CartesianEncoder.prototype),"fieldSanitizer",this).call(this,e,t)}},{key:"getRetinalFieldsDomain",value:function getRetinalFieldsDomain(e,t){var n=e.groupedModel,r={};for(var i in t)if({}.hasOwnProperty.call(t,i)){var a=t[i],o=a.field;if(!a.domain&&o){var u=Zh(n,o);r[o]=u}}return r}},{key:"serializeLayerConfig",value:function serializeLayerConfig(e){var t=[];return e.length&&e.forEach(function(e,n){var r=Gf.sanitizeLayerConfig(e);r.order=n,t.push(r)}),t}},{key:"getLayerConfig",value:function getLayerConfig(e,t){var n=[],r=e.columnFields,i=e.rowFields;return r.forEach(function(e){var r=e.toString();i.forEach(function(i){var a=[],o=i.toString(),u={x:{field:r},y:{field:o}},c=i.subtype(),s=function getDefaultMark(e,t){return"categorical"===e||"categorical"===t?"bar":"temporal"===e||"temporal"===t?"line":"point"}(e.subtype(),c),l=[{mark:s,def:{mark:s,encoding:u}}],f=function getLayerConfFromFields(e,t,n){return n.filter(function(n){var r,i,a,o=n instanceof Array?n:[n],u=(r=[]).concat.apply(r,encoder_helper_toConsumableArray(o.map(function(e){return e.encoding}).filter(function(e){return void 0!==e})));if(!u.length)return!0;var c=(i=[]).concat.apply(i,encoder_helper_toConsumableArray(u.map(function(e){return[e.x&&e.x.field,e.x0&&e.x0.field]}))).filter(function(e){return void 0!==e&&null!==e}),s=(a=[]).concat.apply(a,encoder_helper_toConsumableArray(u.map(function(e){return[e.y&&e.y.field,e.y0&&e.y0.field]}))).filter(function(e){return void 0!==e&&null!==e});if(!c.length&&!s.length)return!0;var l=!!c.length&&c.every(function(t){return-1!==e.indexOf(t)}),f=!!s.length&&s.every(function(e){return-1!==t.indexOf(e)});return c.length&&s.length?l&&f:l||f})}(e.getMembers(),i.getMembers(),t||[]);a=f.length?f.map(function(e){var t=na(na({},l[0].def),e),n=Gf.getSerializedConf(t.mark,t);return{mark:t.mark,order:t.order,def:n}}):l,n.push.apply(n,function cartesian_encoder_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);tt)for(var h=t;h0&&(e=na(e,t[0])),n.push(e)}),0===n.length&&(n=t),this.layers(n),n}},{key:"serializeLayerConfig",value:function serializeLayerConfig(e){var t=[];return e.length&&e.forEach(function(e){var n=Gf.getSerializedConf(e.mark,e);t.push({mark:e.mark,def:n})}),t}}],[{key:"type",value:function type(){return"polar"}}]),PolarEncoder}(),Hh=function(){function defineProperties(e,t){for(var n=0;n1&&void 0!==arguments[1]?arguments[1]:{},n=e.axisType,r=e.fieldsConfig,i=t.field,a=[],o=Th[n];return t.type=t.type?t.type:Qh(r,i||null),a.push(new o(t)),a}({axisType:e,fieldsConfig:t},n[e])}),r}},{key:"getLayerConfig",value:function getLayerConfig(e,t){var n=[];return t.forEach(function(t){var r=t;[nh,rh,ih].forEach(function(t){if(e[t]&&e[t].field){var n=r.def;r.def instanceof Array?n.forEach(function(n){n.encoding=n.encoding||{},!n.encoding[t]&&(n.encoding[t]={}),n.encoding[t].field=e[t].field}):(n.encoding=n.encoding||{},!n.encoding[t]&&(n.encoding[t]={}),n.encoding[t].field=e[t].field)}}),n.push(r)}),n}},{key:"setCommonDomain",value:function setCommonDomain(e){var t=e.domains,n=e.axes,r=e.encoding;return Object.entries(r).forEach(function(e){if(e[1]&&e[1].field){var r=e[0],i=e[1].field;i&&n[r].forEach(function(n){var r=t[i];!e[1].domain&&n.updateDomain(r)})}}),n}}],[{key:"type",value:function type(){return"retinal"}}]),RetinalEncoder}(),Uh=function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function sliceIterator(e,t){var n=[],r=!0,i=!1,a=void 0;try{for(var o,u=e[Symbol.iterator]();!(r=(o=u.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){i=!0,a=e}finally{try{!r&&u.return&&u.return()}finally{if(i)throw a}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),Wh=void 0;function group_utils_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t0?e[0].map(function(i,a){return new n({type:"header"},{labelManager:r}).source(function getHeaderText(e,t,n){var r="";if(t===n-1&&e.length>n){for(var i=t;i0&&void 0!==arguments[0]?arguments[0]:[];return new Vo(e)}([]),a=(i=i.data(n,r)).enter().append(t).merge(i);return i.exit()&&i.exit().remove(),a},nd=function getBorders(e,t){var n={top:!1,bottom:!1},r={left:!1,right:!1},i={top:!1,bottom:!1,left:!1,right:!1},a=e.rows,o=e.columns,u=e.values,c=Uh(a,2),s=c[0],l=c[1],f=Uh(o,2),h=f[0],d=f[1],p=t.fieldInfo(),y=p.rowDimensions,g=p.columnDimensions,v=p.rowTemporalFields,m=p.columnTemporalFields,b=p.columnMeasures,_=p.rowMeasures,x=y.length+g.length,w=_.length+b.length,k=v.length+m.length;if("polar"===t.constructor.type()){if(!x)return{showRowBorders:n,showColBorders:r,showValueBorders:i}}else if(!w&&!k&&x<=2)return{showRowBorders:n,showColBorders:r,showValueBorders:i};return n=function getRowBorders(e,t){var n={top:!1,bottom:!1};return(e.length>1||t.length>1)&&(n.top=!0,n.bottom=!0),n}(s,l),r=function getColumnsBorders(e,t){var n={left:!1,right:!1};return(e.length||t.length)&&(e[0]&&e[0].length>1||t[0]&&t[0].length>1)&&(n.left=!0,n.right=!0),n}(h,d),i=function getValueBorders(e,t){var n={top:!0,left:!0,bottom:!0,right:!0},r=[ah,oh],i=["top","bottom"];return e.forEach(function(e,t){e[0]&&e[0].length?n[r[t]]=!0:n[r[t]]=!1}),t.forEach(function(e,t){e.length?n[i[t]]=!0:n[i[t]]=!1}),n}([s,l],[h,d]),u.length>1&&(i.top=!0,i.bottom=!0),u.length&&u[0].length>1&&(i.left=!0,i.right=!0),{showRowBorders:n,showColBorders:r,showValueBorders:i}};function action_behaviour_map_defineProperty(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var rd=(action_behaviour_map_defineProperty(qh={},a.DRAG,{behaviours:[u.BRUSH],touch:!1}),action_behaviour_map_defineProperty(qh,a.HOVER,{behaviours:[u.HIGHLIGHT]}),action_behaviour_map_defineProperty(qh,a.LONGTOUCH,{behaviours:[u.SELECT],touch:!0}),action_behaviour_map_defineProperty(qh,a.TOUCHDRAG,{behaviours:[u.BRUSH],touch:!0}),action_behaviour_map_defineProperty(qh,a.CLICK,{behaviours:[u.SELECT],touch:!1}),qh),ad="config",od="data",ud="axes",cd="layerDef",sd="width",ld="height",fd="mount",hd="primaryXAxisUpdated",dd="primaryYAxisUpdated",pd="secondaryXAxisUpdated",yd="secondaryYAxisUpdated",gd="transform",vd="dataDomain",md="layersCreated",bd="fields",_d="timeDiffs",xd="layerAxisIndex";function src_helper_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t2&&void 0!==arguments[2]?arguments[2]:{},r=void 0,i=n.payload,a=n.selectionSet,o=n.propagationFields[t]||{},u=o.fields||[],c=o.append,s=i.criteria,l=e.context,f=l.cachedData()[0],h=l.id(),d=e.sideEffects(),p=e._behaviourEffectMap,y=a.mergedEnter.model,g=f.getFieldsConfig();i.sourceUnit=h,i.action=t,i.sourceCanvas=l.parentAlias();var v=e._propagationBehaviourMap[t]||t,m=[];null===s?r=null:Di(s)?(m=Object.keys(s||{}),r=y?y.project(m):null):(m=s[0],r=y?y.project(m):null);var b=l.facetByFields();if(null!==r&&u.length){var _=r.getData().schema.map(function(e){return e.name});r=function getModelWithFacetData(e,t){var n=e.getData(),r=n.schema,i=n.data,a=[],o=t[0].map(function(e){return{name:""+e,type:ir.FieldType.DIMENSION}}),u=t[1];return i.forEach(function(e){var t={};r.forEach(function(n,r){t[n.name]=e[r]}),o.forEach(function(e,n){t[e.name]=u[n]}),a.push(t)}),new ar.a(a,[].concat(data_propagator_toConsumableArray(r),data_propagator_toConsumableArray(o)))}(r,b),m=c?[].concat(data_propagator_toConsumableArray(_),data_propagator_toConsumableArray(u)):u,r=r.project(m)}var x=!1;m.length&&m.every(function(e){return g[e]&&g[e].def.type===ir.FieldType.MEASURE})&&(x=!0);var w=l.parentAlias();i.action=t;var k=e._actions.behavioural[v],C=!!k&&k.constructor.mutates(),S=function filterFn(e,t){var n=p[e.config.action],r=!e.config.groupId||n.some(function(e){return d[e.name||e].constructor.mutates()});return e.config.groupId!==t.groupId&&r},P=e._actions.behavioural[t],A=!!P&&P.constructor.mutates(),E={payload:i,action:t,criteria:r,isMutableAction:A,propagateInterpolatedValues:x,groupId:w,sourceId:A?w:h,filterFn:S,enabled:function enabled(e,n){return t===v||e.payload.sourceCanvas===n.context.parentAlias()}};f.propagate(r,E,!0),t!==v&&(E={payload:i,sourceId:C?w:h,criteria:r,isMutableAction:C,propagateInterpolatedValues:x,action:v,groupId:w,applyOnSource:t===v,enabled:function enabled(e,t){return e.payload.sourceCanvas!==t.context.parentAlias()},filterFn:S},f.propagate(r,E,!0,{filterImmutableAction:function filterImmutableAction(e,t){return e.groupId!==t.groupId}}))},Xd=function(){function defineProperties(e,t){for(var n=0;n1){var u=r[0].config();if("linear"===r[0].constructor.type()){if(u.alignZeroLine){r.forEach(function(e){return e.config({nice:!1})});var c=function getAdjustedDomain(e,t){var n=e[0]/(e[0]-t[0]),r=e[1]/(e[1]-t[1]),i=!1;return t[0]>0&&t[1]>0&&t[1]>0&&e[1]>0&&(i=!0,t[0]=0,t[1]=0),t[0]<0&&t[1]<0&&t[1]<0&&e[1]<0&&(i=!0,e[0]=0,e[1]=0),i||n===r||(n1&&void 0!==arguments[1]?arguments[1]:{},n=[],r=e;if(null===e)return[];var i=this.layers(),a=i.length;Di(e)&&(r=[Object.keys(e)],r=[].concat(visual_unit_toConsumableArray(r),visual_unit_toConsumableArray(function transposeArray(e){return e[0].map(function(t,n){return e.map(function(e){return e[n]})})}(Object.values(e)))));for(var o=0;o1&&void 0!==arguments[1]?arguments[1]:[]].map(function(e){return e.reduce(function(e,t){return e=[].concat(matrix_model_toConsumableArray(e),matrix_model_toConsumableArray(t.getMembers()))},[])})},ep=function createSelectedDataModel(e,t,n){return e.select(function(e){return t.every(function(t,r){return e[t].value===n[r]})})},tp=function uniqueKeyGenerator(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:[],i=t.facets,a=t.dataModel,o=t.uniqueValues;if(i[n+1]){var u=i[n];o.forEach(function(t){var o=a.select(function(e){return e[u].value===t}),c=Zh(o,i[n+1]);uniqueKeyGenerator(e,{facets:i,dataModel:o,uniqueValues:c},n+1,[].concat(matrix_model_toConsumableArray(r),[t]))})}else o.forEach(function(t){e.push([].concat(matrix_model_toConsumableArray(r),[t]))})},np=function projectRows(e,t){var n=t.allColumnProjections,r=t.rowProjections,i=t.optionalProjections;return r.length>0?r.map(function(t){var r=Jd(t,n),a=Zd(r,2),o=a[0],u=a[1];return e.project([].concat(matrix_model_toConsumableArray(o),matrix_model_toConsumableArray(u),matrix_model_toConsumableArray(i)))}):[e]},rp=function pushToMatrix(e,t){var n,r=[],i=e.matrix,a=e.datamodel,o=e.facetInfo,u=e.fieldInfo,c=u.rowProjections,s=u.colProjections,l=u.optionalProjections,f=o.rowIndex,h=o.columnIndex,d=c[f%c.length]||[];s.length>0?r=s.map(function(e,n){var r=Jd(e,d),i=Zd(r,2),u=i[0],c=i[1],p=a.project([].concat(matrix_model_toConsumableArray(u),matrix_model_toConsumableArray(c),matrix_model_toConsumableArray(l))),y={rowFields:d,columnFields:e},g={rowIndex:f,columnIndex:h*s.length+n};return t(p,{projections:y,indices:g},o)}):r=[t(a,{projections:{rowFields:d,columnFields:[]},indices:{rowIndex:f,columnIndex:h}},o)];i[f]=i[f]||[],(n=i[f]).push.apply(n,matrix_model_toConsumableArray(r))},ip=function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function sliceIterator(e,t){var n=[],r=!0,i=!1,a=void 0;try{for(var o,u=e[Symbol.iterator]();!(r=(o=u.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){i=!0,a=e}finally{try{!r&&u.return&&u.return()}finally{if(i)throw a}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}();function cell_creator_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t0?d.length:1):(a=g,o=p.length>0?p.length:1),s.length&&f===u&&l&&a.length){var h={axis:l,length:o,type:u},v=[];i<2?(h.keys=a,h.facetConfig=c.rows,v=up(h,r,t,n)):(h.facetConfig=c.columns,h.keys=a[0].map(function(e,t){return a.map(function(e){return e[t]})}),v=up(h,r,t,n)),r[u+"Headers"]=v}else r[u+"Headers"]=null}),r},sp=function computeMatrices(e,t){var n=e.resolver,r=e.datamodel,i=e.componentRegistry,a=e.encoders,o=t.globalConfig,u=t.selection,c=t.transform,s=o.autoGroupBy,l=n.dependencies().smartlabel,f=r.getFieldsConfig(),h=n.layerConfig(),d=n.registry(),p=n.horizontalAxis().fields,y=n.verticalAxis().fields,g=n.optionalProjections(t,h),v=n.getAllFields(),m={normalizedColumns:y,normalizedRows:p,facetsAndProjections:v,layers:h,fieldMap:f,otherEncodings:g,encoders:a,facetConfig:o.facetConfig||{},axisFrom:o.axisFrom||{},selection:u},b={GeomCell:n.getCellDef(d.GeomCell),AxisCell:n.getCellDef(d.AxisCell),BlankCell:n.getCellDef(d.BlankCell),TextCell:n.getCellDef(d.TextCell)},_=Yh(p),x=Yh(y);n.colCells({}),n.rowCells({}),n.datamodelTransform(c||{}),n.resetSimpleAxes();var w={exitCellMap:n.cacheMaps().entryCellMap,entryCellMap:new Map};n.cacheMaps(w);var k={config:o,suppliedLayers:a.simpleEncoder.serializeLayerConfig(n.layerConfig()),resolver:n,cell:b.GeomCell,encoder:a.simpleEncoder,newCacheMap:w,detailFields:t.detail},C=r.getFieldsConfig(),S=r;if(!s.disabled){var P=function extractFields(e,t){var n,r=Object.values(e).map(function(e){var t,n,r=(t=[]).concat.apply(t,group_utils_toConsumableArray(e));return(n=[]).concat.apply(n,group_utils_toConsumableArray(r.map(function(e){return e instanceof _h?e.getMembers():e})))});return(n=[]).concat.apply(n,group_utils_toConsumableArray(r).concat(group_utils_toConsumableArray(t)))}(v,function getFieldsFromSuppliedLayers(e,t){var n,r=[],i=e.map(function(e){return e.encoding||{}});return r=(r=[].concat(group_utils_toConsumableArray(r),[(n=[]).concat.apply(n,group_utils_toConsumableArray(i.map(function(e){return Object.values(e).map(function(e){return e.field})})))])).filter(function(e){return t[e]&&t[e].def.type===ir.FieldType.DIMENSION})}(k.suppliedLayers,r.getFieldsConfig())),A=P.filter(function(e){return C[e]&&C[e].def.type===ir.FieldType.DIMENSION}),E=s.measures;S=r.groupBy(A.length?A:[""],E).project(P)}var M=function getMatrixModel(e,t,n){var r=[],i=[],a=[],o=[],u=[],c=[],s=t.rowFacets,l=t.colFacets;if(t.colProjections.forEach(function(e){o.push.apply(o,matrix_model_toConsumableArray(e))}),t.allColumnProjections=o,s.length>0){var f=s[0].toString(),h=Zh(e,f);tp(i,{facets:s,dataModel:e,uniqueValues:h}),i.forEach(function(n){var i,a=Jd(s),o=Zd(a,1)[0],u=ep(e,o,n);c.push([s,n]),(i=r).push.apply(i,matrix_model_toConsumableArray(np(u,t)))})}else{var d;(d=r).push.apply(d,matrix_model_toConsumableArray(np(e,t)))}if(r=r.length>0?r:[[]],l.length>0){var p=l.map(function(e){return""+e}),y=p[0],g=Zh(e,y);tp(a,{facets:p,dataModel:e,uniqueValues:g}),r.forEach(function(r,i){c[i]=c[i]||[[],[]],a.forEach(function(a,o){u[i]=u[i]||[];var s=r instanceof ar.a?r:e,f=ep(s,p,a),h={matrix:u,datamodel:f,facetInfo:{rowFacets:c[i],colFacets:[l,a],rowIndex:i,columnIndex:o},fieldInfo:t};rp(h,n)})})}else r.forEach(function(r,i){c[i]=c[i]||[[],[]];var a={matrix:u,datamodel:r||e,facetInfo:{rowFacets:c[i],colFacets:[[],[]],rowIndex:i,columnIndex:0},fieldInfo:t};rp(a,n)});var v=a.length>0?a[0].map(function(e,t){return a.map(function(e){return e[t]})}):a;return{matrix:u,rowKeys:i,columnKeys:v}}(S,v,n.valueCellsCreator(k));n.cacheMaps().exitCellMap.forEach(function(e){e.remove()}),n.cacheMaps().exitCellMap.clear(),n.valueMatrix(M.matrix),n.createUnits(i,t);var O=function mutateAxesFromMap(e,t){var n=null,r=null,i=e.xAxesMap,a=e.yAxesMap,o=t.x,u=t.y;return o&&o.forEach(function(e){var t=i.get(e);(n=n||[]).push(t)}),u&&u.forEach(function(e){var t=a.get(e);(r=r||[]).push(t)}),{xAxes:n,yAxes:r}}(n.cacheMaps(),n.axes()),T=O.xAxes,F=O.yAxes;n.axes({x:T,y:F});var N=function generateMatrices(e,t,n,r){var i=e.unitHeight,a=e.unitWidth,o=e.facetsAndProjections,u=e.normalizedRows,c=e.normalizedColumns,s=e.selection,l=e.axisFrom,f=e.facetConfig,h=e.encoders,d=cp({fields:{rows:u,columns:c},matrices:t,facetsAndProjections:o,selection:s,axisFrom:l,facetConfig:f,encoders:h},n,r),p=d.columnsPrimary,y=d.columnsSecondary,g=d.rowsPrimary,v=d.rowsSecondary,m=d.leftHeaders,b=d.topHeaders,_=d.bottomHeaders,x=d.rightHeaders,w=[g,v,p,y].map(function(e){return e?e.getObjects():[]}),k=ip(w,4),C=k[0],S=k[1],P=k[2],A=k[3],E=[m,x].map(function(e){return e?e.getObjects().map(function(e){return e.getObjects()}):[]}),M=ip(E,2),O=M[0],T=M[1],F=O.length?O.map(function(e,t){return C[t]=C[t]?[C[t]]:[],[].concat(cell_creator_toConsumableArray(e),cell_creator_toConsumableArray(C[t]))}):C?C.map(function(e){return[e]}):[],N=S.length?S.map(function(e,t){return[e].concat(cell_creator_toConsumableArray(T[t]||[]))}):T.length?T.map(function(e){return[].concat(cell_creator_toConsumableArray(e))}):[],j=[];b&&b.getObjects().forEach(function(e){e.getObjects().forEach(function(e,t){j[t]=j[t]||[],j[t].push(e)})});P.length&&j.push(P);var I=[];A.length&&I.push(A);var D=I.length;_&&_.getObjects().forEach(function(e){e.getObjects().forEach(function(e,t){I[t+D]=I[t+D]||[],I[t+D].push(e)})});if(!F.length&&!N.length){var L=new n.BlankCell;L.setAvailableSpace(a,i),F=[[L]]}if(!(j.length||I.length&&I[0].length)){var R=new n.BlankCell;R.setAvailableSpace(a,i),I=[[R]]}return{rows:[F,N],columns:[j,I],selectionObj:d}}(m,{valuesMatrix:M,axesMatrix:n.axes()},b,l),j=N.rows,I=N.columns,D=N.selectionObj;return n.rowMatrix(j),n.columnMatrix(I),{rows:n.rowMatrix(),columns:n.columnMatrix(),values:n.valueMatrix(),isColumnSizeEqual:x,isRowSizeEqual:_,selection:D,dataModels:{groupedModel:S,parentModel:r}}},lp=function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function sliceIterator(e,t){var n=[],r=!0,i=!1,a=void 0;try{for(var o,u=e[Symbol.iterator]();!(r=(o=u.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){i=!0,a=e}finally{try{!r&&u.return&&u.return()}finally{if(i)throw a}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),fp=function(){function defineProperties(e,t){for(var n=0;n0?h[0].map(function(){return new l}):[],right:d.length>0?d[0].map(function(){return new l}):[]},_=[ah,oh].map(function(e){return y.map(function(t,n){return n===y.length-1?m[e]:b[e]})}),x=lp(_,2),w=x[0],k=x[1];if(0===y.length){var C=[ah,oh].map(function(e){return g.map(function(t,n){return 0===n?m[e]:b[e]})}),S=lp(C,2);n=S[0],r=S[1]}else n=g.map(function(){return h.length>0?h[0].map(function(){return new l}):[]}),r=g.map(function(){return d.length>0?d[0].map(function(){return new l}):[]});return c.notify({client:[w,k,n,r],action:"initialized",formalName:"facet-headers"}),{topLeft:w,topRight:k,bottomLeft:n,bottomRight:r}}},{key:"getMatrices",value:function getMatrices(e,t,n,r){return sp({datamodel:e,componentRegistry:n,encoders:r,resolver:this},t)}}]),MatrixResolver}(),dp=function(){function defineProperties(e,t){for(var n=0;n3&&void 0!==arguments[3]?arguments[3]:{},i=void 0,a=e.context.constructor.type(),o=r.payload,u=e.context.data(),c=e.context.metaData(),s=c.getData().schema[0].type,l={},f=e.context._id;l.action=Pp[t]||t,l.sideEffects=Ep[t],l.sourceCanvas=e.context.canvasAlias();var h=e._actions.behavioural[l.action].constructor.mutates();if(null===o.criteria)i=null;else{var d=n.mergedEnter,p=u.filter(function(e){return-1!==d.uids.indexOf(e.id)}).map(function(e){return e.value});if("step"===a||"discrete"===a&&"measure"===s){var y=Object.keys(o.criteria||{})[0];i=(p=u.filter(function(e){return-1!==d.uids.indexOf(e.id)}).map(function(e){return e.range})).length?c.select(function(e){for(var t=!1,n=0;n=p[n][0]&&e[y].value<=p[n][1]);n++);return t},{saveChild:!1}):null}else"gradient"===a?i=ca(c,o.criteria):p.length?i=function assembleModelFromIdentifiers(e,t){var n=[],r=void 0,i=e.getFieldsConfig();return t.length?function(){for(var e=t[0],a=e.length,o=0;o=s+l?[i.invert(s+l-c),i.invert(s+l)]:f-l1&&void 0!==arguments[1]?arguments[1]:{},i=t.config().classPrefix;e.mergedEnter.length||e.mergedExit.length?(n(e.mergedExit,r.className||i+"-legend-brighten",!1),n(e.mergedExit,r.className||i+"-legend-fadeout",!0),n(e.mergedEnter,r.className||i+"-legend-fadeout",!1)):n(e.completeSet,r.className||i+"-legend-fadeout",!1)},brighten:function brighten(e){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},i=t.config().classPrefix;e.mergedEnter.length||e.mergedExit.length?(n(e.mergedEnter,r.className||i+"-legend-brighten",!0),n(e.mergedExit,r.className||i+"-legend-brighten",!1)):n(e.completeSet,r.className||i+"-legend-brighten",!1)}}},Vp=function(){function defineProperties(e,t){for(var n=0;n2&&void 0!==arguments[2]?arguments[2]:{};(0,this._strategies[n.strategy||this._strategy])(e,this)}}],[{key:"formalName",value:function formalName(){return"highlighter"}}]),LegendHighlighter}(),Wp={config:{sanitization:function sanitization(e,t){return na(e._config||{},t)}},data:{},fieldName:{},legendContainer:{},measurement:{sanitization:function sanitization(e,t){var n=na(e._measurement,t);return["padding","border","margin"].forEach(function(e){n[e]=Math.min(n[e]>0?n[e]:0,.1*n.maxWidth,.1*n.maxHeight)}),n}},logicalSpace:{},metaData:{},range:{sanitization:function sanitization(e,t){return e.scale().range(t),e.resetLogicalSpace(),e.store().commit("range",t),t}},scale:{},smartTicks:{},store:{},title:{sanitization:function sanitization(e,t){return na(e._title||{},t)}}},qp="horizontal",Gp="vertical",Yp={height:30,width:30,maxWidth:1/0,maxHeight:1/0,padding:2,margin:2,border:1},Xp={text:"",orientation:function orientation(e){return"left"===e||"right"===e?"left":"center"}},Kp={classPrefix:"muze",formatter:{bounds:{lower:"less than",upper:"more than"}},item:{text:{orientation:"right",width:10,formatter:function formatter(e){return e}},icon:{className:"legend-icon",height:20,width:20,color:"rgba(0,0,0,.5)",type:"square"}}},$p=function ICON_MAP(e){return e&&"string"==typeof e?pa(e):e};function legend_helper_defineProperty(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var Qp=function getScaleInfo(e){var t=e.constructor.type();return{scaleType:t,domain:e.uniqueValues(),steps:e.config().stops||1,scaleFn:Mp[t]}},Zp=function getInterpolatedData(e,t){for(var n=[],r=ia()(e[0],e[1]),i=0;i<=t;i++)n[i]=r(i/t);return n},Jp=function getDomainBounds(e,t,n){var r,i=t.scaleFn,a=t.scaleType,o=t.scale,u=n.domain,c=n.domainBounds,s=n.domainLeg,l=n.steps,f=u["lower"===e?0:u.length-1],h=l["lower"===e?0:l.length-1];return legend_helper_defineProperty(r={},a,"size"===a?o[i](f)*o.getScaleFactor():o[i](f)),legend_helper_defineProperty(r,"value",c[e]),legend_helper_defineProperty(r,"id","lower"===e?0:s.length+2),legend_helper_defineProperty(r,"range",[f,h]),r},ey=function(){function defineProperties(e,t){for(var n=0;n0?1.25*h.height:0,p=h.width,y=this.getLabelSpaces(s,c),g=function computeItemSpaces(e,t,n){var r=0,i=0,a={width:0,height:0},o=t.effPadding,u=t.titleWidth,c=t.labelSpaces,s=t.titleHeight,l=t.maxWidth,f=e.item,h=e.align,d=f.icon,p=f.text.orientation,y=[],g=[],v=0;return c.forEach(function(e,t){var c={width:0,height:0},s={width:0,height:0},l=n[t]||{};"left"===p||"right"===p?(e.width+=o,s.width=(l.size?2*Math.sqrt(l.size/Math.PI):d.width)+o,v=Math.max(s.width,v),c.width=e.width+v,e.height=Math.max(e.height,d.height)+o,s.height=e.height,c.height=e.height):(e.width=Math.max(e.width,l.size?2*Math.sqrt(l.size/Math.PI):d.width)+o,s.width=e.width,c.width=e.width,v=Math.max(s.width,v),e.height+=o,s.height=d.height+o,c.height=e.height+s.height),"horizontal"===h?r=Math.max(r,c.height):(r+=c.height,i=Math.max(i,c.width,u)+o),a={width:Math.max(c.width,a.width),height:Math.max(c.height,a.height)},y.push(c),g.push(s)}),y.forEach(function(e,t){"horizontal"===h?(e.height=r,g[t].width=v,"left"===p||"right"===p?(c[t].height=r,g[t].height=r,y[t].width=c[t].width+v):(c[t].width=v,y[t].width=v,c[t].width=v),i=Math.max(i+y[t].width,u)):(e.width=Math.max(i,l),"top"===p||"bottom"===p?(c[t].width=i,g[t].width=i,v=i):(g[t].width=v,y[t].width=c[t].width+v,c[t].width=a.width-v,i=Math.max(i,e.width,u)+o))}),{totalHeight:r+=s+o,totalWidth:i,itemSpaces:y,iconSpaces:g,maxItemSpaces:a,maxIconWidth:v}}(this.config(),{effPadding:s,titleWidth:p,labelSpaces:y,titleHeight:d,maxWidth:r,maxHeight:i},this.data()),v=g.totalHeight,m=g.totalWidth,b=g.itemSpaces,_=g.iconSpaces,x=g.maxItemSpaces,w=g.maxIconWidth;return this.measurement({width:Math.max(m,t)+f+l,height:Math.max(v,n)+f+l,labelSpaces:y,iconSpaces:_,itemSpaces:b,maxItemSpaces:x,maxIconWidth:w,titleSpaces:{width:Math.min(r,this.measurement().width)-f-l,height:d}}),this}},{key:"getTitleSpace",value:function getTitleSpace(){return this._labelManager.setStyle(Lo(Ao("body"),this.config().classPrefix+"-legend-title")),this._labelManager.getOriSize(this.title().text?this.title().text:"")}},{key:"renderTitle",value:function renderTitle(e){var t=this.measurement(),n=t.titleSpaces,r=t.border,i=t.padding;return function titleCreator(e,t,n,r){return Eo(e,"div",[1],r.classPrefix+"-legend-title").style("width","100%").style("height",n.height+"px").style("padding-left",n.padding+"px").style("padding-right",n.padding+"px").style("border-bottom-width",n.border+"px").style("text-align",t.orientation instanceof Function?t.orientation(r.position):t.orientation).text(t.text).node()}(e,this.title(),{height:n.height,border:r,padding:i},this.config())}},{key:"render",value:function render(){var e=this.firebolt(),t=this.config().classPrefix,n=this.measurement(),r=n.maxWidth,i=n.maxHeight,a=n.width,o=n.height,u=n.margin,c=n.border,s=Eo(Ao(this.mount()),"div",[1],t+"-legend-box");return s.classed(t+"-legend-box-"+this._id,!0),s.style("float","left"),s.style("width",Math.min(r,a)-2*u+"px").style("height",Math.min(i,o)-2*u+"px").style("margin",u+"px").style("border-width",c+"px"),this.legendContainer(s.node()),this.renderTitle(s),e.createSelectionSet(this.data().map(function(e){return e.id})),s}},{key:"getCriteriaFromData",value:function getCriteriaFromData(e){var t=this.fieldName();return"measure"===this.metaData().getData().schema[0].type?function simple_legend_defineProperty(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}({},t,e.range):[[t],[e.value]]}}],[{key:"create",value:function create(e){return new SimpleLegend(e)}},{key:"defaultConfig",value:function defaultConfig(){return Kp}},{key:"defaultMeasurement",value:function defaultMeasurement(){return Yp}}]),SimpleLegend}();function position_config_defineProperty(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var oy=(position_config_defineProperty(ty={},"horizontal",{datasets:function datasets(e){return{row:[1],column:e}},itemContainerMeasures:function itemContainerMeasures(e){var t=e.itemSpaces;return{row:{width:e.width+"px",padding:"0px"},column:{width:function width(e,n){return t[n].width+"px"},padding:"0px"}}},getStepSpacesInfo:function getStepSpacesInfo(e){var t=e.maxItemSpaces;return{iconHeight:e.height,iconWidth:t.width,stepPadding:{horizontal:!0,vertical:!1}}}}),position_config_defineProperty(ty,"vertical",{datasets:function datasets(e){return{row:e,column:function column(e){return[e]}}},itemContainerMeasures:function itemContainerMeasures(e,t){var n=e.width;return{row:{width:n+"px",padding:t.padding+"px"},column:{width:n+"px",padding:"0px"}}},getStepSpacesInfo:function getStepSpacesInfo(e){var t=e.maxItemSpaces,n=e.width;return{iconHeight:t.height,iconWidth:n,stepPadding:{horizontal:!1,vertical:!0}}}}),ty),uy=(position_config_defineProperty(ny={},"left",oy.vertical),position_config_defineProperty(ny,"right",oy.vertical),position_config_defineProperty(ny,"top",oy.horizontal),position_config_defineProperty(ny,"bottom",oy.horizontal),ny),cy=(position_config_defineProperty(ry={},"left","end"),position_config_defineProperty(ry,"right","start"),position_config_defineProperty(ry,"top","center"),position_config_defineProperty(ry,"bottom","center"),ry),sy=(position_config_defineProperty(iy={},"left",[Op,"shape"]),position_config_defineProperty(iy,"right",["shape",Op]),position_config_defineProperty(iy,"top",[Op,"shape"]),position_config_defineProperty(iy,"bottom",["shape",Op]),iy),ly=function createLegendSkeleton(e,t,n,r){var i,a,o,u,c=e.measurement(),s=c.margin,l=c.border,f=c.titleSpaces,h=c.width,d=c.height,p=c.maxWidth,y=c.maxHeight;a=d-(f.height+2*s+2*l),i=h-(2*s+2*l),o=y-(f.height+2*s+2*l),u=p-(2*s+2*l);var g=Eo(t,"div",[1],n+"-legend-body");return g.select("."+n+"-legend-overflow").remove(),u&&u4)}(u)?u:$p(u).size(o)(),Eo(a,"path",function(e){return[e]}).attr("d",l)}}return e[1]="circle",createShape(e,t,"circle")}(n,Eo(l,"g",[n[1]],i+"-legend-icon"),n[3]?"circle":"square",o,a).attr("transform","translate("+(u/2-c)+" "+a/2+")").attr("fill",n[2]||s):Eo(l,"rect",[n[1]],i+"-legend-icon").attr("x",0).attr("y",0).attr("width",u).attr("height",a).attr("fill",n[2]||s)},py=function(){function defineProperties(e,t){for(var n=0;na[a.length-1]&&t.push(i[1])):t=Zp(i,a-1),(t=[].concat(gradient_legend_toConsumableArray(new Set(t))).sort(function(e,t){return e-t})).map(function(n,i){var a,u=t[i];return gradient_legend_defineProperty(a={},r,"size"===r?e[o](n)*e.getScaleFactor():e[o](Math.floor(n))),gradient_legend_defineProperty(a,"value",+u.toFixed(2)),gradient_legend_defineProperty(a,"id",i),a}).filter(function(e){return null!==e.value})}},{key:"getLabelSpaces",value:function getLabelSpaces(e){this.config({item:{text:{orientation:this.config().position}}});var t=function createAxis(e){var t=e.data(),n=e.config().align,r=e._cells.AxisCell,i=new Qs({id:"legend-"+e._id,orientation:n===Gp?"right":"bottom",style:e._computedStyle,nice:!1,showAxisName:!1,tickValues:t.map(function(e){return e.value}),fixedBaseline:!1},{labelManager:e._labelManager});return i.domain(gy(t)),i.range([1,1]),(new r).source(i).config({margin:{left:0,bottom:0,top:0,right:0}})}(this),n=t.getLogicalSpace(),r={width:n.width-e,height:n.height-e},i=t.source().domain().length,a=new Array(i).fill(r);return this.axis(t),a}},{key:"getDrawingContext",value:function getDrawingContext(){return{svgContainer:this._legendGradientSvg}}},{key:"render",value:function render(){var e=this.firebolt(),t=function get(e,t,n){null===e&&(e=Function.prototype);var r=Object.getOwnPropertyDescriptor(e,t);if(void 0===r){var i=Object.getPrototypeOf(e);return null===i?void 0:get(i,t,n)}if("value"in r)return r.value;var a=r.get;return void 0!==a?a.call(n):void 0}(GradientLegend.prototype.__proto__||Object.getPrototypeOf(GradientLegend.prototype),"render",this).call(this,this.mount());return function renderGradient(e,t){var n,r,i=e.config(),a=i.align,o=i.classPrefix,u=i.item,c=e.data(),s=vy(t,o,c),l=s.legendContainer,f=s.legendGradSvg,h=s.legendGradCont,d=s.linearGradient,p=s.legendRect,y=e.axis().source().getAxisDimensions().tickLabelDim,g=e.measurement(),v=g.padding,m=g.margin,b=g.border,_=g.titleSpaces,x=g.maxHeight,w=g.maxWidth,k=g.height,C=g.width,S={};n=Math.floor(k-(_.height+2*m+2*b)),r=Math.floor(C-(2*m+2*b)),a===qp?(S.height=u.icon.height,S.width=r-2*v-y.width/2,d.attr("x2","100%").attr("y1","0%"),h.attr("transform","translate( "+y.width/2+" 0)"),my(e,l,n-u.icon.height-v,r-2*v-1),l.classed(o+"-overflow-x",C>w),Mo(l,{height:k+"px",width:Math.min(C,w)+"px",padding:v+"px"}),p.attr("height",S.height),p.attr("width",S.width-y.width/2)):(S.height=n-2*v-y.height/2,S.width=u.icon.width,d.attr("x2","0%").attr("y1","100%"),h.attr("transform","translate(0 "+y.height/2+")"),my(e,l,n-2*v-1,r-u.icon.width-2*v),l.classed(o+"-overflow-y",k>x),Mo(l,{height:Math.min(k,x)+"px",width:C+"px",padding:v+"px"}),p.attr("height",S.height-y.height/2),p.attr("width",S.width)),Mo(f,{height:S.height+"px",width:S.width+"px"}),Mo(p,{fill:"url(#linear-gradient)"}),f.attr("height",S.height),f.attr("width",S.width),e.measurement({gradientDimensions:S}),e._legendGradientSvg=f}(this,t),t.selectAll("div").style("float","left"),e.mapActionsAndBehaviour(),e.createSelectionSet(this.data().map(function(e){return e.id})),t}},{key:"getCriteriaFromData",value:function getCriteriaFromData(e){return[[this.fieldName()],[e.value]]}}],[{key:"create",value:function create(e){return new GradientLegend(e)}},{key:"type",value:function type(){return"gradient"}}]),GradientLegend}(),xy=function(){function defineProperties(e,t){for(var n=0;na[a.length-1]&&(c.upper=[u.bounds.upper+" "+a[a.length-1]])):t=Zp(i,a),t=(t=[].concat(step_legend_toConsumableArray(new Set(t))).sort(function(e,t){return e-t})).map(function(n,i){var a,u=null;return i0&&void 0!==arguments[0]?arguments[0]:{},t=this._registrableComponents,n=na(na({},function defaultPolicy(e){var t=e.map(function(e){return e.alias()});return{behaviours:{"*":function _(e){var n=e.sourceCanvas;return!n||-1!==t.indexOf(n)}}}}(t)),e);return t.forEach(function(e){e.firebolt().crossInteractionPolicy(n)}),this}}]),ActionModel}()),Ny={classPrefix:"muze",interaction:{sideEffect:"individual"},legend:{position:"right",color:{show:!0,padding:2,margin:2,border:1,height:30,width:30},shape:{show:!0,padding:2,margin:2,border:1,height:30,width:30},size:{show:!0,padding:2,margin:2,border:1,height:30,width:30}},showHeaders:!1,minWidth:100,minHeight:100,border:{style:"solid",color:"#d6d6d6",width:2,collapse:!0,spacing:0},autoGroupBy:{disabled:!1}},jy={data:{value:null,meta:{typeCheck:function typeCheck(e){return e instanceof ar.a}}},width:{value:0,meta:{sanitization:Qi,typeCheck:Number.isInteger}},height:{value:0,meta:{sanitization:Qi,typeCheck:Number.isInteger}},minUnitWidth:{value:50,meta:{sanitization:Qi,typeCheck:Number.isInteger}},minUnitHeight:{value:50,meta:{sanitization:Qi,typeCheck:Number.isInteger}},config:{value:null,meta:{typeCheck:"constructor",typeExpected:"Object",sanitization:function sanitization(e,t){var n=na({},t),r=na(n,Ny);return na(r,e)}}}},Iy="width",Dy="height",Ly="top",Ry="left",By="right",zy="bottom",Hy="center",Vy="rowLeft",Uy="rowRight",Wy="colBottom",qy="colTop",Gy="rowSpan",Yy="colSpan",Xy="rowRoot",Ky="columnRoot",$y=function(){function defineProperties(e,t){for(var n=0;n1)return e;var f=o[t-1];if(f&&f.valueOf()===e.valueOf()){var h=n[r-1];return h?h[t].valueOf()===h[t-1].valueOf()?null:e:null}return e}return e},ag=function calcRowSpan(e,t,n,r){var i=1;if(!e||"string"!=typeof e.valueOf())return 1;for(var a=!1;!a;)n[r+i]&&null===n[r+i][t]?i+=1:a=!0;return i},og=function calcColSpan(e,t,n,r){var i=1;if(!e||"string"!=typeof e.valueOf())return 1;for(var a=!1;!a;)null===n[r][t+i]?i+=1:a=!0;return i},ug=function mask(e,t){return e.map(function(n,r){if(t===Vy||t===Uy){for(var i=n.map(function(n,i){return ig(n,i,e,r,t)}),a=[],o=n.length-i.length,u=0;u1&&r.setAvailableSpace(0,r.availHeight()),Ao(this).style("height",r.availHeight()+"px"),n}),l.each(function(e){e.placeholder&&e.placeholder.render(this)}).exit().each(function(e){e.placeholder&&e.placeholder.remove()}),applyBorders(l,r.border,n,a)})}function utils_defineProperty(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function utils_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t0?e[0]:e[1];return n?(r=e[0].length>0?[].concat(utils_toConsumableArray(e[0])):[],r=e[1].length>0?[].concat(utils_toConsumableArray(r),utils_toConsumableArray(e[1])):r):r=r.map(function(t,n){var r=[];return e[0].length>0&&(r=[].concat(utils_toConsumableArray(e[0][n]))),e[1].length>0&&(r=[].concat(utils_toConsumableArray(r),utils_toConsumableArray(e[1][n]))),r}),r},fg=function computeLogicalSpace(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments[1],n=arguments[2],r=t.isTransposed,i=void 0!==r&&r,a=t.unitMeasures,o=function getMeasureInfo(e){return e?{firstMeasure:Dy,secondMeasure:Iy}:{firstMeasure:Iy,secondMeasure:Dy}}(i),u=o.firstMeasure,c=o.secondMeasure,s=e.values,l=function getMinMeasures(e,t){return e?{height:0,width:t.width}:{height:t.height,width:0}}(i,a);if(s[0].key){var f,h=(utils_defineProperty(f={},u,0),utils_defineProperty(f,c,0),f);return s.forEach(function(e){var r=computeLogicalSpace(e,t,n);h[u]=Math.max(h[u],r[u],l[u]),h[c]+=+r[c]}),e.space=h,h}return function getLogicalSpace(e,t,n){var r,i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:[],a=t.firstMeasure,o=t.secondMeasure,u=0,c=0;return e.values.forEach(function(t){var r,s=0,l=0;t.forEach(function(e,t){e.logicalSpace(null);var r=e.getLogicalSpace();l=Math.max(l,+r[o],n[o]),i[t]=Math.max(i[t]||0,r[a]),s+=+i[t]}),c+=l,u=Math.max(u,s),e.space=(utils_defineProperty(r={},o,Math.ceil(c)),utils_defineProperty(r,a,Math.ceil(u)),r)}),utils_defineProperty(r={},o,c),utils_defineProperty(r,a,u),r}(e,{firstMeasure:u,secondMeasure:c},l,n)},hg=function extraCellsRemover(e,t,n){return e.slice(t,-n)},dg={config:{sanitization:function sanitization(e,t){return na(e._config||{},t)}},maxMeasures:{},availableSpace:{},logicalSpace:{}},pg={distribution:[],classPrefix:"muze",isDistributionEqual:!0,unitMeasures:{height:100,width:100,border:1},isTransposed:!1,facet:"primary",extraCellLengths:[]},yg=function(){function defineProperties(e,t){for(var n=0;n1&&void 0!==arguments[1]?arguments[1]:{};!function visual_matrix_classCallCheck(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,VisualMatrix),this._lastLevelKey=0,this._primaryMatrix=e[0]||[],this._secondaryMatrix=e[1]||[],this._maxMeasures=[],this._availableSpace={},Ji(this,dg);var n=Object.assign({},this.constructor.defaultConfig());this.config(na(n,t)),this._breakPointer=this.config().isTransposed?e[0].length:e[0].length>0?e[0][0].length:0,this._layoutMatrix=lg([e[0]||[],e[1]||[]],this.config()),this._tree={key:this.config().isTransposed?Ky:Xy,values:this.createTree()},this._logicalSpace=this.setLogicalSpace()}return yg(VisualMatrix,[{key:"primaryMatrix",value:function primaryMatrix(){return arguments.length?this:this._primaryMatrix}},{key:"secondaryMatrix",value:function secondaryMatrix(){return arguments.length?this:this._secondaryMatrix}},{key:"tree",value:function tree(){return arguments.length?this:this._tree}},{key:"createTree",value:function createTree(){var e=function createTree(e){var t={},n=0,r="primary",i=cg(),a=[],o=e._layoutMatrix,u=e.primaryMatrix(),c=e.secondaryMatrix(),s=e.config(),l=s.isTransposed,f=s.breakPage;if(l){if(r=0===u.length?"primary":0===c.length?"secondary":u.length>=c.length?"primary":"secondary",u.length>0){for(var h=0;h0){for(var d=u.length,p=c.length-1;p>0;p--)a.push(p+d);a.push(d),"primary"===r&&(n=d)}var y;a.forEach(function(e){var t=-1;return i.key(function(n){return t++,n[e].valueOf()+"-"+sg(t,f)})}),y=o[0].map(function(e,t){return o.map(function(e){return e[t]})}),t=i.entries(y)}else{if(r=0===u.length?"primary":0===c.length?"secondary":u.length>=c.length?"primary":"secondary",u.length>0){for(var g=0;g0){for(var v=u.length>0?u[0].length:0,m=c[0].length-1;m>0;m--)a.push(m+v);a.push(v),"primary"===r&&(n=v)}else n=u.length>0?u[0].length-1:0;a.forEach(function(e){var t=-1;return i.key(function(n){return t++,n[e].valueOf()+"-"+sg(t,f)})}),t=i.entries(o)}return{tree:t,lastLevelKey:n}}(this),t=e.tree,n=e.lastLevelKey;return this._lastLevelKey=n,t}},{key:"setLogicalSpace",value:function setLogicalSpace(){var e=this.config().isTransposed,t=this.tree();return function createMatrixEachLevel(e,t){if(e.values[0].key){var n=[];return e.values.forEach(function(e){t?createMatrixEachLevel(e,t).forEach(function(e,t){var r;n[t]=n[t]||[],(r=n[t]).push.apply(r,utils_toConsumableArray(e))}):n.push.apply(n,utils_toConsumableArray(createMatrixEachLevel(e,t)))}),e.matrix=n,n}return e.matrix=t?e.values[0].map(function(t,n){return e.values.map(function(e){return e[n]})}):e.values,e.matrix}(t,e),fg(t,this.config(),this.maxMeasures())}},{key:"getLogicalSpace",value:function getLogicalSpace(){return this.logicalSpace()}},{key:"setAvailableSpace",value:function setAvailableSpace(e,t){this.availableSpace({width:e,height:t});var n=this.tree(),r=this.populateMaxMeasures(Dy,n),i=this.populateMaxMeasures(Iy,n),a=this.calculateDepth(i,r);return this.viewableMatrix=this.createViewPortMatrix(a),this.viewableMeasures=this.redistribute(this.viewableMatrix,e,t),this}},{key:"populateMaxMeasures",value:function populateMaxMeasures(e,t){var n=this,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:[];if(i[r]=Math.max(i[r]||0,t.space[e]),t.values){var a=r+1;t.values.forEach(function(t){t.space&&(i=n.populateMaxMeasures(e,t,a,i))})}return i}},{key:"calculateDepth",value:function calculateDepth(e,t){var n=void 0,r=void 0,i=this.availableSpace(),a=i.height,o=i.width;for(n=0;n0&&void 0!==arguments[0]?arguments[0]:[],t=arguments[1],n=arguments[2],r=arguments[3],i=r._breakPointer,a=r.config().isTransposed,o=n.tree,u=n.layoutMatrix;if(0===t){var c=function breakMatrix(e,t,n){var r=[],i=[];return t?e.forEach(function(e,t){t>=n?i.push(e):r.push(e)}):e.forEach(function(e,t){e.forEach(function(e,a){a>=n?(i[t]=i[t]||[],i[t].push(e)):(r[t]=r[t]||[],r[t].push(e))})}),[r,i]}(o.matrix,a,i);return e.push({matrix:o.matrix,primaryMatrix:c[0],secondaryMatrix:c[1],space:o.space}),e}var s=t-1;return o.values.forEach(function(t){createMatrixInstances(e,s,{tree:t,layoutMatrix:u},r)}),e}(t,e,this.removeExtraCells(),this),t}},{key:"redistributeRowWise",value:function redistributeRowWise(e){var t,n,r=[],i=this.maxMeasures(),a=this.config(),o=a.isDistributionEqual,u=a.distribution,c=a.isTransposed,s=a.gutter,l=e.matrix,f=e.width,h=e.height,d=e.maxHeights,p=e.maxWidths;n=function spaceTakenByColumn(e,t){var n=0,r=0;return e.forEach(function(e){var i=e[t].getLogicalSpace();r=Math.max(r,i.width),n+=i.height}),{width:r,height:n}}(l,this._lastLevelKey).height;var y=i.reduce(function(e,t){return e+=t});return r=y>0?i.map(function(e){return e+e/y*(f-y)}):i.map(function(){return 0}),t=function getDistributedHeight(e){var t,n=0,r=0,i=e.isTransposed,a=e.distribution,o=e.availableHeight,u=e.height,c=e.isDistributionEqual,s=e.gutter,l=e.matrix,f=e.cIdx;a&&void 0!==a[0]&&(n=a.reduce(function(e,t){return e+=t})),s&&void 0!==s[0]&&(r=s.reduce(function(e,t){return e+=t})),t=o-Math.floor(o*r);var h=l.length;return l.map(function(r,o){var s=r[f].getLogicalSpace().height,l=s+s/u*(t-u);return i||(a.length>0&&h===a.length?l=t*a[o]/n:(c||0===e.height)&&(l=t/h)),Math.floor(l)})}({matrix:l,cIdx:this._lastLevelKey,height:n,availableHeight:h,isDistributionEqual:o,distribution:u,isTransposed:c,gutter:s}),p.push(r),d.push(t),{maxWidths:p,maxHeights:d}}},{key:"redistributeColumnWise",value:function redistributeColumnWise(e){var t=[],n=e.matrix,r=e.width,i=e.maxHeights,a=e.maxWidths,o=this.config().unitMeasures.border,u=function spaceTakenByRow(e){var t=0,n=0;return e.forEach(function(e){var r=e.getLogicalSpace();t=Math.max(t,r.height),n+=r.width}),{width:n,height:t}}(n[this._lastLevelKey]).width,c=function getDistributedWidth(e,t){var n=e.availableWidth,r=e.width,i=e.row,a=t.isDistributionEqual,o=t.isTransposed,u=t.distribution,c=0;return u&&u[0]&&(c=u.reduce(function(e,t){return e+=t})),i.map(function(e,t){var s=e.getLogicalSpace().width,l=s+s/r*(n-r);if(o)if(u.length>0)l=n*u[t]/c;else if(a||0===r){var f=i.length;l=n/f}return Math.floor(l)})}({row:n[this._lastLevelKey],width:u,availableWidth:r},this.config());n.forEach(function(e,n){return e.forEach(function(e,r){var i=e.getLogicalSpace().height;e.setAvailableSpace(c[r]-o,i),t[n]=Math.max(t[n]||0,e.getLogicalSpace().height)})}),i.length>0&&(t=t.map(function(e,t){return Math.max(e,i[0][t])})),i.push(t);for(var s=0;s=m&&(r[0][1][n[1]-m]=a[0],i[0][1]=(i[0][1]||0)+a[0]),n[1]===t._lastLevelKey&&(r[1][0][n[0]]=a[1],r[1][1][n[0]]=a[1])})}),{heights:g,widths:v,rowHeights:p,columnWidths:y}}}],[{key:"defaultConfig",value:function defaultConfig(){return pg}}]),VisualMatrix}(),vg=function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function sliceIterator(e,t){var n=[],r=!0,i=!1,a=void 0;try{for(var o,u=e[Symbol.iterator]();!(r=(o=u.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){i=!0,a=e}finally{try{!r&&u.return&&u.return()}finally{if(i)throw a}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}();function layout_helper_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t0&&(n=[].concat(layout_helper_toConsumableArray(w),layout_helper_toConsumableArray(P),layout_helper_toConsumableArray(O))),E.length>0&&(r=[].concat(layout_helper_toConsumableArray(C),layout_helper_toConsumableArray(E),layout_helper_toConsumableArray(F))),k.length>0&&k[0].length>0&&(i=k.map(function(e,t){return[].concat(layout_helper_toConsumableArray(w[t]),layout_helper_toConsumableArray(e),layout_helper_toConsumableArray(C[t]))})),T.length>0&&T[0].length>0&&(a=T.map(function(e,t){return[].concat(layout_helper_toConsumableArray(O[t]),layout_helper_toConsumableArray(e),layout_helper_toConsumableArray(F[t]))})),e.rowMatrix(new gg([n,r],{isDistributionEqual:s,distribution:h.rows,gutter:f.rows,unitMeasures:{width:v,height:g,border:d.width},breakPage:p.rows.map(function(e){return e+Math.max(w.length,C.length)}),extraCellLengths:[w.length,O.length]})),o=w.length>0?w[0].length:O.length>0?O[0].length:0,u=C.length>0?C[0].length:F.length>0?F[0].length:0,e.columnMatrix(new gg([i,a],{isDistributionEqual:l,distribution:h.columns,gutter:f.columns,isTransposed:!0,unitMeasures:{width:v,height:g,border:d.width},breakPage:p.columns,extraCellLengths:[o,u]})),e.centerMatrix(A),t}(this,e),this):function get(e,t,n){null===e&&(e=Function.prototype);var r=Object.getOwnPropertyDescriptor(e,t);if(void 0===r){var i=Object.getPrototypeOf(e);return null===i?void 0:get(i,t,n)}if("value"in r)return r.value;var a=r.get;return void 0!==a?a.call(n):void 0}(GridLayout.prototype.__proto__||Object.getPrototypeOf(GridLayout.prototype),"matrices",this).call(this,e)}},{key:"triggerReflow",value:function triggerReflow(){return function computeLayoutMeasurements(e){var t,n,r,i,a,o=e.rowMatrix(),u=e.columnMatrix(),c=e.centerMatrix(),s=e.measurement(),l=s.width,f=s.height,h=e.config().border,d=e.matrices(),p=d.top,y=d.bottom,g=function getMatrixMeasurement(e,t){return e?e.getLogicalSpace()[t]:0}(o,Iy),v=h.width,m=l-g-v;setMatrixMeasurement(u,Iy,m);var b=u.getViewableSpaces();bg(e,"column",b);var _=b[e.config().columnPointer],x=_.height.primary+_.height.secondary,w=f-x;setMatrixMeasurement(o,Dy,w);var k=o.getViewableSpaces();bg(e,"row",k);var C=(t=[]).concat.apply(t,computations_toConsumableArray(k.map(function(e){return e.rowHeights.primary}))),S=(n=[]).concat.apply(n,computations_toConsumableArray(k.map(function(e){return e.columnWidths.primary}))),P=(r=[]).concat.apply(r,computations_toConsumableArray(k.map(function(e){return e.columnWidths.secondary}))),A=u.getViewableSpaces(),E=(i=[]).concat.apply(i,computations_toConsumableArray(A.map(function(e){return e.columnWidths.primary}))),M=A[0].rowHeights.primary,O=(a=[]).concat.apply(a,computations_toConsumableArray(A.map(function(e){return e.rowHeights.secondary})));c.forEach(function(e,t){e.forEach(function(e,n){e.setAvailableSpace(E[n]-v,C[t]-v)})}),mg(p[0],S,M),mg(p[2],P,M),mg(y[0],S,O),mg(y[2],P,O)}(this),this.setViewInformation(),this}},{key:"gotoPage",value:function gotoPage(e,t){var n=e.toLowerCase(),r=this.getViewInformation().viewMatricesInfo[n+"Pages"],i=Math.min(Math.max(1,t),r);return this.config(function layout_defineProperty(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}({},n+"Pointer",i-1)),this.setViewInformation(),this.renderGrid(),this}},{key:"pages",value:function pages(e){var t=this.getViewInformation().viewMatricesInfo,n=e.toLowerCase();return{totalPages:t[n+"Pages"],currentPage:this.config()[n+"Pointer"]+1}}},{key:"setViewInformation",value:function setViewInformation(){var e=this.config(),t=e.rowPointer,n=e.columnPointer,r=e.border,i=function getViewMatrices(e,t,n){for(var r=e.rowMatrix(),i=e.columnMatrix(),a=e.centerMatrix(),o=e.matrices(),u=r.getViewableData(),c=i.getViewableData(),s={row:0,column:0},l=t-1;l>=0;l--){var f=Math.max(u[l].primaryMatrix.length,u[l].secondaryMatrix.length);s.row+=f}for(var h=n-1;h>=0;h--){var d=c[h],p=d.primaryMatrix,y=d.secondaryMatrix,g=Math.max(p[0]?p[0].length:0,y[0]?y[0].length:0);s.column+=g}o.top[1]=c[n].primaryMatrix,o.bottom[1]=c[n].secondaryMatrix,o.center[0]=u[t].primaryMatrix,o.center[2]=u[t].secondaryMatrix;var v=Math.max(o.center[0].length,o.center[2].length),m=Math.max(o.top[1][0]?o.top[1][0].length:0,o.bottom[1][0]?o.bottom[1][0].length:0);return o.center[1]=a.slice(s.row,s.row+v).map(function(e){return e.slice(s.column,s.column+m)}),{matrices:o,rowPages:u.length,columnPages:c.length}}(this,t,n),a=function getViewMeasurements(e){var t=e.rowMatrix(),n=e.columnMatrix(),r=e.measurement(),i=r.width,a=r.height,o=e.config(),u=o.columnPointer,c=o.rowPointer,s=t.getViewableSpaces()[c].width,l=s.primary,f=s.secondary,h=n.getViewableSpaces()[u].height,d=h.primary,p=h.secondary;return{viewWidth:[l,i-(l+f),f],viewHeight:[d,a-(d+p),p]}}(this);return a.border=r,this.viewInfo={viewMatricesInfo:i,layoutDimensions:a},this}},{key:"getViewInformation",value:function getViewInformation(){return this.viewInfo}},{key:"renderGrid",value:function renderGrid(e){if(this.mountPoint(e),!this.mountPoint())return this;var t=this.getViewInformation(),n=t.viewMatricesInfo,r=t.layoutDimensions;return function renderMatrices(e,t,n){var r=t.top,i=t.center,a=t.bottom,o=e.config().classPrefix,u=e.measurement().width,c=e.mountPoint();Eo(c,"div",[{type:Ly,matrix:r},{type:Hy,matrix:i},{type:zy,matrix:a}],o+"-grid-layout-row").each(function(e,t){var r=Ao(this);r.classed(o+"-grid-layout-row-"+t,!0),renderMatrix(e.matrix,r,e.type,n,o)}).style(Iy,Math.ceil(u)+"px")}(this,n.matrices,r),this}}],[{key:"defaultMeasurement",value:function defaultMeasurement(){return ng}},{key:"defaultConfig",value:function defaultConfig(){return tg}},{key:"create",value:function create(){return new GridLayout(null,null,this.defaultMeasurement(),this.defaultConfig())}}]),GridLayout}(),wg=function(){function defineProperties(e,t){for(var n=0;n0){var i=Math.max(e[0].length,e[1].length);return gv(i,t[r],pv)}return n.length>0?n[0]&&n[0].length<=t[r]?n.map(function(e){var i=new Array(t[r]-n[0].length).fill(1);return i=yv(i,pv),[].concat(layout_maker_toConsumableArray(i),layout_maker_toConsumableArray(e))}):gv(n.length,t[r],pv):n})},mv=function prepareLayout(e,t,n,r){var i=void 0,a=void 0,o=void 0,u=void 0,c=t.rows,s=t.columns,l=t.values,f=t.cornerMatrices,h=n.showHeaders,d=function getMaxRows(e){var t=[0,0];return t[0]=Math.max(t[0],e[0].length?e[0][0].length:0),t[1]=Math.max(t[1],e[1].length?e[1][0].length:0),t}(c),p=f.topLeft,y=f.topRight,g=f.bottomLeft,v=f.bottomRight;if(h)i=p,a=y,o=g,u=v;else{var m=[s[0].length,s[1].length],b=vv([new Array(m[0]),new Array(m[0])],d),_=lv(b,2);i=_[0],a=_[1];var x=vv([new Array(m[1]),new Array(m[1])],d),w=lv(x,2);o=w[0],u=w[1]}e.measurement(r).config(n).matrices({top:[i,s[0],a],center:[c[0],l,c[1]],bottom:[o,s[1],u]}).triggerReflow()},bv=function getRenderDetails(e,t){var n=na({},e.config()),r=t.getBoundingClientRect(),i=r.height,a=r.width,o=e.height(),u=e.width(),c=e.composition().visualGroup,s=c.placeholderInfo(),l=s.isColumnSizeEqual,f=s.isRowSizeEqual,h=s.rows,d=s.columns,p=s.values,y=e.config(),g=y.minWidth,v=y.minHeight,m=y.classPrefix,b=y.showHeaders,_=y.legend,x=e.title()[1],w=e.subtitle()[1],k=_.position,C=function arrangeComponents(e){var t,n=e.config().legend,r=e.title()[1],i=e.subtitle()[1],a=[["legend","layout"],["layout","legend"]];return{headers:(component_resolver_defineProperty(t={},"top-top",["title","subtitle","group"]),component_resolver_defineProperty(t,"bottom-bottom",["group","subtitle","title"]),component_resolver_defineProperty(t,"top-bottom",["title","group","subtitle"]),component_resolver_defineProperty(t,"bottom-top",["subtitle","group","title"]),t)[(r.position||"top")+"-"+(i.position||"top")],legends:"left"===n.position||"top"===n.position?a[0]:a[1]}}(e);i=Math.floor(i),a=Math.floor(a);var S=Math.max(o>0?o:i,v),P=Math.max(u>0?u:a,g),A=function createHeaders(e,t,n){var r=0,i={};return t>=200&&n>=200&&["title","subtitle"].forEach(function(t){var n=e[t](),a=function resolveTitleSubTitleContent(e){return"function"!=typeof e||e._sanitize?function escapeHTML(e){var t={"&":"&","<":"<",">":">",'"':""","'":"'","/":"/"};return(""+e).replace(/[&<>"'/]/g,function(e){return t[e]})}(e()):e()}(n[0]);if(a.length){var o=n[1];o.width=e.width(),o.content=a;var u=cv(o,t,e.dependencies().smartlabel,e[t+"Cell"]),c=u.height,s=u.cell;i[t+"Cell"]=s,e._composition[t]=s,r+=c+o.padding}}),{headerHeight:r,headers:i}}(e,S,P),E=A.headers,M=A.headerHeight,O=function createLegend(e,t,n,r){var i={height:n,width:r,headerHeight:t},a=e.config().legend,o=a.show,u=a.position;a.classPrefix=e.config().classPrefix;var c="left"===u||"right"===u?"vertical":"horizontal";return a.show=o?"vertical"===c&&r>200||"horizontal"===c&&n>200:o,a.align=c,sv(a,e,i,e.legends||[])}(e,M,S,P);e._composition.legend={},O.forEach(function(t){e._composition.legend[t.scaleType]=t.legend});var T=function getLegendSpace(e,t,n,r){var i={width:0,height:0};return e.map(function(e){return e.legend.measurement()}).forEach(function(e){var a,o;o=Math.min(e.width,e.maxWidth),a=Math.min(e.height,e.maxHeight),"horizontal"===t.align?i.width+o>r?(i.width=r,i.height+=a):(i.width+=o,i.height=Math.max(i.height,a)):i.height+a>n?(i.height=a,i.width+=o):(i.height+=a,i.width=Math.max(i.width,o))}),"horizontal"===t.align&&(i.width=r),i}(O,_,S,P),F="left"===k||"right"===k?T.width:0,N="top"===k||"bottom"===k?T.height:0,j={headers:E,legends:O,canvases:[e],rows:h,columns:d,values:p,cornerMatrices:c.cornerMatrices()},I={mountSpace:{height:i,width:a},headerHeight:M,legendSpace:T,canvasWidth:P,canvasHeight:S,width:P-F,height:S-M-N,minUnitHeight:e.minUnitHeight(),minUnitWidth:e.minUnitWidth()};return{layoutConfig:n=na(n,{classPrefix:m,showHeaders:b,border:na(c.metaData().border,e.config().border),layoutArrangement:C,legend:_,title:x,subtitle:w,isColumnSizeEqual:l,isRowSizeEqual:f}),components:j,measurement:I}},_v={position:"top",align:"left",padding:8},xv={position:"top",align:"left",padding:16};function canvas_local_options_defineProperty(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var wv=(canvas_local_options_defineProperty(fv={},"rows",{value:null,meta:{typeCheck:"constructor",typeExpected:"Array"}}),canvas_local_options_defineProperty(fv,"columns",{value:null,meta:{typeCheck:"constructor",typeExpected:"Array"}}),canvas_local_options_defineProperty(fv,"color",{value:null,meta:{typeCheck:"constructor",typeExpected:"Object",sanitization:function sanitization(e){return"string"==typeof e?{field:e}:e}}}),canvas_local_options_defineProperty(fv,"shape",{value:null,meta:{typeCheck:"constructor",typeExpected:"Object",sanitization:function sanitization(e){return"string"==typeof e?{field:e}:e}}}),canvas_local_options_defineProperty(fv,"size",{value:null,meta:{typeCheck:"constructor",typeExpected:"Object",sanitization:function sanitization(e){return"string"==typeof e?{field:e}:e}}}),canvas_local_options_defineProperty(fv,"detail",{value:[],meta:{typeCheck:"constructor",typeExpected:"Array"}}),canvas_local_options_defineProperty(fv,"layers",{value:null,meta:{typeCheck:"constructor",typeExpected:"Array"}}),canvas_local_options_defineProperty(fv,"transform",{value:null,meta:{typeCheck:"constructor",typeExpected:"Object"}}),canvas_local_options_defineProperty(fv,"mount",{value:null,meta:{sanitization:function sanitization(e){return"string"==typeof e?Ao(e).node():e}}}),fv),kv=(canvas_local_options_defineProperty(hv={},"title",{value:[null,null],meta:{typeCheck:["constructor","constructor"],typeExpected:["Function","Object"],spreadParams:!0,sanitization:[function(e){if("string"==typeof e){var n=function t(){return e};return n._sanitized=!0,n}return e},function(e){var t=na({},_v);return na(t,e)}]}}),canvas_local_options_defineProperty(hv,"subtitle",{value:[null,null],meta:{typeCheck:["constructor","constructor"],typeExpected:["Function","Object"],spreadParams:!0,sanitization:[function(e){if("string"==typeof e){var t=function sub(){return e};return t._sanitized=!0,t}return e},function(e){var t=na({},xv);return na(t,e)}]}}),hv),Cv=function renderHeader(e,t,n,r){var i=r[n+"Cell"],a=e[""+n],o=a.position,u=a.align,c=a.padding,s=t.selectAll("."+e.classPrefix+"-inner-container").data([n]);s.exit().remove();var l=s.enter().append("div").merge(s);l.classed(e.classPrefix+"-inner-container",!0),i&&i.render(l.node()),l.selectAll("div").classed(e.classPrefix+"-inner-content",!0),l.style("width","100%"),a&&i&&l.style("float","left").style("text-align",u).style("padding-"+("top"===o?"bottom":"top"),c+"px")},Sv=function renderComponents(e,t,n,r){var i=e.mount(),a=t.headers,o=t.legends,u=n.classPrefix,c=function getSkeletons(e,t,n){var r=t.layoutArrangement,i=t.classPrefix,a=r.headers,o=r.legends,u=n.canvasWidth,c=n.canvasHeight,s=Ao(e),l={},f=Eo(s,"div",[1],i+"-viz").style("width",u+"px").style("height",c+"px").selectAll("."+i+"-container").data(a);f.exit().remove();var h=f.enter().append("div").merge(f).attr("class",i+"-container").style("width",u+"px").style("padding","nullpx").style("margin",null).each(function(e){l[e]=Ao(this).classed(i+"-"+e+"-container",!0)}).selectAll("."+i+"-inner-container").data(function(e){return"group"===e?o:[]});return h.exit().remove(),h.enter().append("div").merge(h).attr("class",i+"-inner-container").style("width","auto").style("height","auto").each(function(e){l[e]=Ao(this).classed(i+"-"+e+"-container",!0)}),l}(i,n,r),s=c.title,l=c.legend,f=c.subtitle,h=c.layout,d=function prepareGridContainer(e,t,n,r){if(e){var i=t.height,a=t.width,o=Ao(e).selectAll("."+n+"-inner-content").data(["layout"],function(e){return e});o.exit().remove();var u=o.enter().append("div").merge(o).attr("class",n+"-inner-content").classed(n+"-grid-layout",!0).attr("id",n+"-grid-layout-"+r).style("height",i+"px").style("padding",null).style("width",Math.ceil(a)+"px"),c=u.selectAll("."+n+"-layout-grid-container").data(["layout2"]);c.exit().remove();var s=c.enter().append("div").merge(c);return s.classed(n+"-layout-grid-container",!0).attr("id",n+"-layout-grid-container-"+r).style("height",i+"px").style("width",Math.ceil(a)+"px"),{mount:s,container:u}}}(h.node(),r,u,e.alias()).mount,p=e.layout().getViewInformation().layoutDimensions.viewWidth[0];r.padding=p,function setLabelRotationForAxes(e){var t=0,n=e.xAxes()||[];!function(){for(var e=0;ev?(g++,m=0,v=y):g<0&&g++,i[g]=i[g]||[],v-=Math.min(t.measurement().height,v),m=Math.max(Math.min(t.measurement().width,t.measurement().maxWidth),m),i[g].push({legend:t,legendHeight:y,legendWidth:m})});var b=Eo(h,["div"],i,l+"-legend-section").each(function(e,t){return Ao(void 0).classed(l+"-legend-section-"+t,!0)}).classed(l+"-legend-vertical-section",!0).style("width",function(e){return e[0].legendWidth+"px"});Eo(b,["div"],function(e){return e},l+"-legend-components",{},function(e){return e.legend.id()}).each(function(e){e.legend.mount(this)}).style("width",function(e){return e.legendWidth+"px"})}else{var _=Eo(h,"div",[1],l+"-legend-section").classed(l+"-legend-horizontal-section",!0).classed(l+"-legend-section-0",!0).style("width",p+"px");Eo(_,"div",n,l+"-legend-components",{},function(e){return e.legend.id()}).each(function(e){e.legend.mount(this)}).style("width",function(e){return e.legend.measurement().width+"px"})}}(n,l,o,r),function shiftHeaders(e,t,n,r){var i=e.classPrefix,a=e.title,o=e.subtitle,u=e.legend,c=n.legendSpace;t+="left"===u.position?c.width:0,a&&Ao(r).select("."+i+"-title-container").style("width","left"===a.align?"calc(100% - "+t+"px":"100%").style("margin-left","left"===a.align?t+"px":0),o&&Ao(r).select("."+i+"-subtitle-container").style("width","left"===o.align?"calc(100% - "+t+"px":"100%").style("margin-left","left"===o.align?t+"px":0),Ao(r).select("."+i+"-legend-horizontal-section").style("margin-left",t+"px").style("width",c.width-t+"px").selectAll("."+i+"-legend-body, ."+i+"-legend-title").style("max-width",c.width-t+"px"),Ao(r).select("."+i+"-legend-vertical-section").style("margin-left",null).selectAll("."+i+"-legend-body, ."+i+"-legend-title").style("max-width",null)}(n,p,r,i)}),e.composition().visualGroup.matrixInstance().value.each(function(e){e.valueOf().parentContainer(h.node())})};function canvas_helper_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t",keywords:["datamodel","data","relational","algebra","model","muze","fusioncharts","table","tabular","operation"],repository:{type:"git",url:"https://github.com/chartshq/datamodel.git"},contributors:[{name:"Akash Goswami",email:"akash@charts.com"},{name:"Subhash Haldar",email:"subhash@charts.com"},{name:"Rousan Ali",email:"rousan@charts.com",url:"https://rousan.io"},{name:"Ujjal Kumar Dutta",email:"ujjal@charts.com"}],dependencies:{"d3-dsv":"^1.0.8"},devDependencies:{"babel-cli":"6.26.0","babel-core":"^6.26.3","babel-eslint":"6.1.2","babel-loader":"^7.1.4","babel-plugin-transform-runtime":"^6.23.0","babel-preset-env":"^1.7.0","babel-preset-es2015":"^6.24.1","babel-preset-flow":"^6.23.0",chai:"3.5.0","cross-env":"^5.0.5",eslint:"3.19.0","eslint-config-airbnb":"15.1.0","eslint-plugin-import":"2.7.0","eslint-plugin-jsx-a11y":"5.1.1","eslint-plugin-react":"7.3.0","istanbul-instrumenter-loader":"^3.0.0",jsdoc:"3.5.5",json2yaml:"^1.1.0",karma:"1.7.1","karma-chai":"0.1.0","karma-chrome-launcher":"2.1.1","karma-coverage-istanbul-reporter":"^1.3.0","karma-mocha":"1.3.0","karma-spec-reporter":"0.0.31","karma-webpack":"2.0.3",marked:"^0.5.0",mocha:"3.4.2","mocha-webpack":"0.7.0","transform-runtime":"0.0.0",webpack:"^4.12.0","webpack-cli":"^3.0.7","webpack-dev-server":"^3.1.4"},scripts:{test:"npm run lint && npm run ut",ut:"karma start karma.conf.js",utd:"karma start --single-run false --browsers Chrome karma.conf.js ",build:"webpack --mode production","build:dev":"webpack --mode development",start:"webpack-dev-server --config webpack.config.dev.js --mode development --open",lint:"eslint ./src","lint-errors":"eslint --quiet ./src",docs:"rm -rf yaml && mkdir yaml && jsdoc -c jsdoc.conf.json"}}},function(e,t,n){var r=n(2);e.exports=r.default?r.default:r},function(n,c,f){"use strict";f.r(c);var p={};f.r(p),f.d(p,"DataFormat",function(){return b}),f.d(p,"DimensionSubtype",function(){return _}),f.d(p,"MeasureSubtype",function(){return C}),f.d(p,"FieldType",function(){return P}),f.d(p,"FilteringMode",function(){return A});var y={};f.r(y),f.d(y,"DSVArr",function(){return Je}),f.d(y,"DSVStr",function(){return lt}),f.d(y,"FlatJSON",function(){return ft}),f.d(y,"Auto",function(){return ht});var g={};f.r(g),f.d(g,"sum",function(){return Et}),f.d(g,"avg",function(){return Mt}),f.d(g,"min",function(){return Ot}),f.d(g,"max",function(){return Tt}),f.d(g,"first",function(){return Ft}),f.d(g,"last",function(){return Nt}),f.d(g,"count",function(){return jt}),f.d(g,"sd",function(){return It});var b={FLAT_JSON:"FlatJSON",DSV_STR:"DSVStr",DSV_ARR:"DSVArr",AUTO:"Auto"},_={CATEGORICAL:"categorical",TEMPORAL:"temporal",GEO:"geo"},C={DISCRETE:"discrete"},P={MEASURE:"measure",DIMENSION:"dimension"},A={NORMAL:"normal",INVERSE:"inverse",ALL:"all"};function l(e,t){e.length>0&&e.split(",").forEach(function(e){var n=e.split("-"),r=+n[0],i=+(n[1]||n[0]);if(i>=r)for(var a=r;a<=i;a+=1)t(a)})}var O=function(){function e(e,t){for(var n=0;n=0;)o=e[a+1],-1!==r.indexOf(o)&&i.push({index:a,token:o});return i},m.formatAs=function(e,t){var n,r=h(e),i=m.findTokens(t),a=m.getTokenDefinitions(),o=String(t),u=m.TOKEN_PREFIX,c=void 0,s=void 0,l=void 0;for(l=0,n=i.length;l=0;h--)(s=a[h].index)+1!==f.length-1?(void 0===u&&(u=f.length),l=f.substring(s+2,u),f=f.substring(0,s+2)+RegExp.escape(l)+f.substring(u,f.length),u=s):u=s;for(h=0;h1){r=Math.abs(n[1]-n[0]);for(var i=2,a=n.length;i3&&void 0!==arguments[3]&&arguments[3],i=arguments.length>4&&void 0!==arguments[4]?arguments[4]:ye.CROSS,a=[],o=[],u=n||K,c=e.getFieldspace(),s=t.getFieldspace(),f=c.name,h=s.name,d=c.name+"."+s.name,p=L(c,s);if(f===h)throw new Error("DataModels must have different alias names");return c.fields.forEach(function(e){var t=E({},e.schema);-1===p.indexOf(t.name)||r||(t.name=c.name+"."+t.name),a.push(t)}),s.fields.forEach(function(e){var t=E({},e.schema);-1!==p.indexOf(t.name)?r||(t.name=s.name+"."+t.name,a.push(t)):a.push(t)}),l(e._rowDiffset,function(e){var n=!1,d=void 0;l(t._rowDiffset,function(t){var l=[],y={};y[f]={},y[h]={},c.fields.forEach(function(t){l.push(t.data[e]),y[f][t.name]=t.data[e]}),s.fields.forEach(function(e){-1!==p.indexOf(e.schema.name)&&r||l.push(e.data[t]),y[h][e.name]=e.data[t]});var g=Ke(y[f]),v=Ke(y[h]);if(u(g,v)){var m={};l.forEach(function(e,t){m[a[t].name]=e}),n&&ye.CROSS!==i?o[d]=m:(o.push(m),n=!0,d=e)}else if((i===ye.LEFTOUTER||i===ye.RIGHTOUTER)&&!n){var b={},_=c.fields.length-1;l.forEach(function(e,t){b[a[t].name]=t<=_?e:null}),n=!0,d=e,o.push(b)}})}),new At(o,a,{name:d})}function z(e,t){var n=""+e,r=""+t;return nr?1:0}function X(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:z;return e.length>1&&function e(t,n,r,i){if(r===n)return t;var a=n+Math.floor((r-n)/2);return e(t,n,a,i),e(t,a+1,r,i),function(e,t,n,r,i){for(var a=e,o=[],u=t;u<=r;u+=1)o[u]=a[u];for(var c=t,s=n+1,l=t;l<=r;l+=1)c>n?(a[l]=o[s],s+=1):s>r?(a[l]=o[c],c+=1):i(o[c],o[s])<=0?(a[l]=o[c],c+=1):(a[l]=o[s],s+=1)}(t,n,a,r,i),t}(e,0,e.length-1,t),e}function Q(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);to?"desc"===t?-1:1:0}}return i}function Z(e,t){var n=new Map,r=[];return e.forEach(function(e){var i=e[t];n.has(i)?r[n.get(i)][1].push(e):(r.push([i,[e]]),n.set(i,r.length-1))}),r}function ee(e,t,n){var r={label:e[0]};return t.reduce(function(t,r,i){return t[r]=e[1].map(function(e){return e[n[i].index]}),t},r),r}function ne(e,t){var n={},r=[],i=[],a=[],o=e.getFieldspace(),u=t.getFieldspace(),c=o.fieldsObj(),s=u.fieldsObj(),f=o.name+" union "+u.name;if(!M(e._colIdentifier.split(",").sort(),t._colIdentifier.split(",").sort()))return null;function d(e,t,r){l(e._rowDiffset,function(e){var o={},u="";i.forEach(function(n){var r=t[n].data[e];u+="-"+r,o[n]=r}),n[u]||(r&&a.push(o),n[u]=!0)})}return e._colIdentifier.split(",").forEach(function(e){var t=c[e];r.push(E({},t.schema)),i.push(t.schema.name)}),d(t,s,!1),d(e,c,!0),new At(a,r,{name:f})}function re(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);tn&&(n=e)}),[t,n]}(this.data)}},{key:"parse",value:function value(e){return e=parseFloat(e,10),Number.isNaN(e)?null:e}},{key:"unit",value:function value(){return this.fieldUnit}},{key:"scale",value:function value(){return this.fieldScale}},{key:"numberFormat",value:function value(){var e=this.fieldNumberformat;return function(t){return e(t)}}},{key:"defAggFn",value:function value(){return this.fieldDefAggFn}}]),t}(),Ee=function(){function e(e,t){for(var n=0;n=a?c=!0:(r=e.charCodeAt(o++))===at?l=!0:r===ot&&(l=!0,e.charCodeAt(o)===at&&++o),e.slice(i+1,t-1).replace(/""/g,'"')}for(;o2&&void 0!==arguments[2]?arguments[2]:{},i=arguments[3],a=void 0;t!==fe?(a={op:t,meta:r,criteria:i},e._derivation.push(a)):(a=[].concat(Ge(i)),e._derivation.length=0,(n=e._derivation).push.apply(n,Ge(a)))},yt=function ze(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=n.operation||"and",i=n.filterByMeasure||!1,a=[];a=t.length?t.map(function(e){return function(e){var t=e.getData(),n=t.schema,r=e.getFieldsConfig(),a=e.getFieldspace().fieldsObj(),o=t.data,u=Object.values(r).reduce(function(e,t){return e[t.def.name]=a[t.def.name].domain(),e},{});return function(e){return!!o.length&&o.some(function(t){return n.every(function(n){if(!(n.name in e))return!0;var a=e[n.name].valueOf();if(i&&n.type===P.MEASURE)return a>=u[n.name][0]&&a<=u[n.name][1];if(n.type!==P.DIMENSION)return!0;var o=r[n.name].index;return t[o]===e[n.name].valueOf()})})}}(e)}):[function(){return!1}];return"and"===r?e.clone(!1,!1).select(function(e){return a.every(function(t){return t(e)})},{saveChild:!1,mode:A.ALL}):e.clone(!1,!1).select(function(e){return a.some(function(t){return t(e)})},{mode:A.ALL,saveChild:!1})},gt=function Xe(e,t,n,r){var i=e.clone(r.saveChild),a=function(e,t,n,r){var i=[],a=-1,o=void 0,c=function u(e){return n(qe(t,e),e)};return r.mode===A.INVERSE&&(c=function u(e){return!n(qe(t,e))}),l(e,function(e){c(e)&&(-1!==a&&e===a+1?(o=i.length-1,i[o]=i[o].split("-")[0]+"-"+e):i.push(""+e),a=e)}),i.join(",")}(i._rowDiffset,i.getPartialFieldspace().fields,t,n);return i._rowDiffset=a,i.__calculateFieldspace().calculateFieldsConfig(),r.saveChild&&pt(i,ce,{config:n},t),i},vt=function Qe(e,t,n,r){var i=e.clone(n.saveChild),a=t;return n.mode===A.INVERSE&&(a=r.filter(function(e){return-1===t.indexOf(e)})),i._colIdentifier=a.join(","),i.__calculateFieldspace().calculateFieldsConfig(),n.saveChild&&pt(i,se,{projField:t,config:n,actualProjField:a},null),i},mt=function $e(e,t,n,r){r=Object.assign(Object.assign({},Ze),r);var i=y[r.dataFormat];if(!i||"function"!=typeof i)throw new Error("No converter function found for "+r.dataFormat+" format");var a=i(t,r),o=dt(a,2),u=o[0],c=o[1],s=Ue(c,n,u),l=Y.createNamespace(s,r.name);return e._partialFieldspace=l,e._rowDiffset=c.length&&c[0].length?"0-"+(c[0].length-1):"",e._colIdentifier=n.map(function(e){return e.name}).join(),e},bt=function Ze(e,t){for(var n=0;n2&&void 0!==arguments[2]?arguments[2]:{},i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},a=i.nonTraversingModel,o=i.excludeModels||[];t!==a&&((!o.length||-1===o.indexOf(t))&&t.handlePropagation(n,r),t._children.forEach(function(t){var a=_t(n,t),o=dt(a,2),u=o[0],c=o[1];e(t,[u,c],r,i)}))},wt=function nt(e,t,n,r){var i=void 0,a=void 0,o=n.propagationNameSpace,u=n.propagateToSource,c=n.sourceId,s=r.propagateInterpolatedValues,l=[];if(null===e&&!0!==r.persistent)l=[{criteria:[]}];else{var f,h=Object.values(o.mutableActions);!1!==u&&(h=h.filter(function(e){return e.config.sourceId!==c}));var d=h.filter(function(e){return(r.filterFn||function(){return!0})(e,r)}).map(function(e){return e.config.criteria}),p=[];if(!1!==u){var y=Object.values(o.mutableActions);y.forEach(function(e){var t=e.config;!1===t.applyOnSource&&t.action===r.action&&t.sourceId!==c&&(p.push(e.model),(i=y.filter(function(t){return t!==e}).map(function(e){return e.config.criteria})).length&&l.push({criteria:i,models:e.model,path:function e(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];return null!==t._parent&&(n.push(t),e(t._parent,n)),n}(e.model)}))})}i=(f=[]).concat.apply(f,[].concat(Ge(d),[e])).filter(function(e){return null!==e}),l.push({criteria:i,excludeModels:[].concat(p,Ge(r.excludeModels||[]))})}var g=t.model,v=Object.assign({sourceIdentifiers:e,propagationSourceId:c},r),m=t.groupByModel;s&&m&&(a=yt(m,i,{filterByMeasure:s}),xt(m,a,v)),l.forEach(function(e){var t=yt(g,e.criteria),n=e.path;if(n){var r=function(e,t){for(var n=0,r=t.length;n0&&void 0!==arguments[0])||arguments[0],t=void 0;if(!1===(!(arguments.length>1&&void 0!==arguments[1])||arguments[1])){var n=this.getData({getAllFields:!0}),r=n.data,i=n.schema,a=r.map(function(e){var t={};return i.forEach(function(n,r){t[n.name]=e[r]}),t});t=new this.constructor(a,i)}else t=new this.constructor(this);return e&&this._children.push(t),t}},{key:"project",value:function value(e,t){var n={mode:A.NORMAL,saveChild:!0};t=Object.assign({},n,t);var r=this.getFieldsConfig(),i=Object.keys(r),a=t.mode,o=e.reduce(function(e,t){return"RegExp"===t.constructor.name?e.push.apply(e,function(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t1&&void 0!==arguments[1]?arguments[1]:[];pt(this,fe,null,t),this._parent=e,e._children.push(this)}}]),e}(),St=function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function(e,t){var n=[],r=!0,i=!1,a=void 0;try{for(var o,u=e[Symbol.iterator]();!(r=(o=u.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){i=!0,a=e}finally{try{!r&&u.return&&u.return()}finally{if(i)throw a}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")},Pt=function(){function e(e,t){for(var n=0;n0,c=[];if(n.split(",").forEach(function(t){for(var n=0;n=0;u--)i=t[u][0],a=t[u][1],(o=bt(r,i))&&(S(a)?X(n,function(e,t){return a(e[o.index],t[o.index])}):j(a)?function(){var e=Z(n,o.index),t=a[a.length-1],i=a.slice(0,a.length-1),u=i.map(function(e){return bt(r,e)});e.forEach(function(e){e.push(ee(e,i,u))}),X(e,function(e,n){var r=e[2],i=n[2];return t(r,i)}),n.length=0,e.forEach(function(e){n.push.apply(n,Q(e[1]))})}():(a="desc"===String(a).toLowerCase()?"desc":"asc",X(n,$(o.type,a,o.index))));e.uids=[],n.forEach(function(t){e.uids.push(t.pop())})}(a,r),i.columnWise){var s=Array.apply(void 0,Q(Array(a.schema.length))).map(function(){return[]});a.data.forEach(function(e){e.forEach(function(e,t){s[t].push(e)})}),a.data=s}return a}.call(this,this.getPartialFieldspace().fields,this._rowDiffset,e.getAllFields?t.map(function(e){return e.name}).join():this._colIdentifier,e.sort,{columnWise:"column"===e.order,addUid:!!e.withUid});if(!e.formatter)return n;var r=e.formatter,i=n.data,a=n.schema,o=n.uids,u=a.map(function(e){return e.name}),c=Object.keys(r).reduce(function(e,t){var n=u.indexOf(t);return-1!==n&&e.push([n,r[t]]),e},[]);return"column"===e.order?c.forEach(function(e){var t=e[0],n=e[1];i[t].forEach(function(e,r){i[t][r]=n.call(void 0,e,o[r],a[t])})}):i.forEach(function(e,t){c.forEach(function(n){var r=n[0],i=n[1];e[r]=i.call(void 0,e[r],o[t],a[r])})}),n}},{key:"groupBy",value:function value(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{saveChild:!0},r=""+e.join(),i=function de(e,t,n,r){var i=function(e,t){var n=[],r=e.getPartialFieldspace(),i=r.getDimension(),a=r.getMeasure();return Object.entries(i).forEach(function(e){var r=ke(e,1)[0];t&&t.length?-1!==t.indexOf(r)&&n.push(r):n.push(r)}),Object.entries(a).forEach(function(e){var r=ke(e,1)[0];"discrete"===a[r].subType()&&(t&&t.length?-1!==t.indexOf(r)&&n.push(r):n.push(r))}),n}(e,t),a=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n={},r=t,i=e.getPartialFieldspace().getMeasure(),a=we.defaultReducer();return"function"==typeof t&&(a=t),Object.entries(i).forEach(function(e){var o=ke(e,1)[0];"string"==typeof t[o]&&(r[o]=we.resolve(r[o])?we.resolve(r[o]):a),"function"!=typeof t[o]&&(r[o]=void 0),n[o]=r[o]||we.resolve(i[o].defAggFn())||a}),n}(e,n),o=e.getPartialFieldspace(),u=o.fieldsObj(),c=o.name,s=[],f=[],h=[],d={},p=[],y=void 0;Object.entries(u).forEach(function(e){var t=ke(e,2),n=t[0],r=t[1];(-1!==i.indexOf(n)||a[n])&&(h.push(E({},r.schema)),"measure"===r.schema.type&&"discrete"!==r.schema.subtype?f.push(n):"dimension"!==r.schema.type&&"discrete"!==r.schema.subtype||s.push(n))});var g=0;return l(e._rowDiffset,function(e){var t="";s.forEach(function(n){t=t+"-"+u[n].data[e]}),void 0===d[t]?(d[t]=g,p.push({}),s.forEach(function(t){p[g][t]=u[t].data[e]}),f.forEach(function(t){p[g][t]=[u[t].data[e]]}),g+=1):f.forEach(function(n){p[d[t]][n].push(u[n].data[e])})}),p.forEach(function(e){var t=e;f.forEach(function(n){t[n]=a[n](e[n])})}),r?(r.__calculateFieldspace(),y=r):y=new Lt(p,h,{name:c}),y}.apply(void 0,[this,e,t]);return n.saveChild&&(this._children.push(i),pt(i,le,{fieldsArr:e,groupByString:r,defaultReducer:we.defaultReducer()},t)),i._parent=this,i}},{key:"sort",value:function value(e){var t=this.getData({order:"row",sort:e}),n=[t.schema.map(function(e){return e.name})].concat(t.data),r=new this.constructor(n,t.schema,{dataFormat:"DSVArr"});return r._sortingDetails=e,r}},{key:"addField",value:function value(e){var t=e.fieldName();this._colIdentifier+=","+t;var n=this._partialFieldspace;if(n.fieldsObj()[e.fieldName()]){var r=n.fields.findIndex(function(e){return e.name===t});r>=0&&(n.fields[r]=e)}else n.fields.push(e);return this.__calculateFieldspace().calculateFieldsConfig(),this}},{key:"calculateVariable",value:function value(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{saveChild:!0,replaceVar:!1},r=this.getFieldsConfig(),i=t.slice(0,t.length-1),a=t[t.length-1];if(r[e.name]&&!n.replaceVar)throw new Error(e.name+" field already exists in model.");var o=i.map(function(e){var t=r[e];if(!t)throw new Error(e+" is not a valid column name.");return t.index}),u=this.clone(),c=u.getFieldspace().fields,s=o.map(function(e){return c[e]}),f=[];l(u._rowDiffset,function(e){var t=s.map(function(t){return t.data[e]});f[e]=a.apply(void 0,function(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t1&&void 0!==arguments[1]?arguments[1]:{},n=arguments[2],r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},i=t.isMutableAction,a=t.sourceId,o=t.payload,u=function e(t){return t._parent?e(t._parent):t}(this),c=u._propagationNameSpace,s={groupByModel:function e(t){return t._parent&&t._derivation.find(function(e){return"group"!==e.op})?e(t._parent):t}(this),model:u};return n&&function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments[2],r=void 0,i=t.isMutableAction,a=t.criteria,o=t.action+"-"+t.sourceId;r=i?e.mutableActions:e.immutableActions,null===a?delete r[o]:r[o]={model:n,config:t}}(c,t,this),wt(e,s,{propagationNameSpace:c,sourceId:a},Object.assign({payload:o},t)),i&&function(e,t,n){var r=e.immutableActions;for(var i in r){var a=r[i].config,o=n.config.sourceId,u=!n.propConfig.filterImmutableAction||n.propConfig.filterImmutableAction(a,n.config);if(a.sourceId!==o&&u){var c=a.criteria;wt(c,t,{propagationNameSpace:e,propagateToSource:!1,sourceId:o},a)}}}(c,s,{config:t,propConfig:r}),this}},{key:"on",value:function value(e,t){switch(e){case"propagation":this._onPropagation.push(t)}return this}},{key:"unsubscribe",value:function value(e){switch(e){case"propagation":this._onPropagation=[]}return this}},{key:"handlePropagation",value:function value(e,t){var n=this;this._onPropagation.forEach(function(r){return r.call(n,e,t)})}},{key:"bin",value:function value(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=this.clone(),r=t.name||e+"_binned";if(this.getFieldsConfig()[r]||!this.getFieldsConfig()[e])throw new Error("Field "+e+" already exists.");var i=function I(e,t,n){var r=n.buckets,i=n.binCount,a=n.binSize,o=n.start,u=[],c=[],s=e.domain(),f=ue(s,2),h=f[0],d=f[1],p=d,y=[],g=void 0,v=void 0,m=void 0,b=void 0;if(l(t,function(t){u.push({data:e.data[t],index:t})}),!r){var _=((d+=1)-h)%(a=a||(d-h)/i);for(i||0===_||(d=d+a-_),g=h+a;g<=d;)y.push(g),g+=a;r={start:o=o||h,stops:y}}v=0===r.start?0:r.start||h,r.stops.forEach(function(e){u.filter(function(t){return t.data>=v&&t.data=r.stops[r.stops.length-1]}).forEach(function(e){c[e.index]=r.stops[r.stops.length-1]+"-"+p}),r.stops.unshift(r.start),b=new Set(r.stops),hr.stops[r.stops.length-1]&&b.add(p),b=[].concat(function(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t1&&void 0!==arguments[1]?arguments[1]:{saveChild:!0}).saveChild;return t.forEach(function(e){n=e(n),i.push.apply(i,function(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t1&&r.dispose(),n}},bin:function bin(){for(var e=arguments.length,t=Array(e),n=0;n2?(i=arguments.length<=0?void 0:arguments[0],r=arguments.length<=1?void 0:arguments[1],a=arguments.length<=2?void 0:arguments[2]):(i=null,r=arguments.length<=0?void 0:arguments[0],a=arguments.length<=1?void 0:arguments[1]),t=a(w),(e=n=new A(t.fn)).addDependencies.apply(e,P(t.dependencies)),this._addPropInModel(i,function(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}({},r,n)),this}},{key:"_addPropInModel",value:function value(e,t){return this._graph.createNodesFrom(t,e),this}},{key:"on",value:function value(e,t,n){var r,i=e instanceof Array?e:[e],a=this._graph.createElectricNodeOf(i,{type:"CurrFrame",fn:t});return n&&(r=this._graph.stopPropagation().setPropagationOverride("nextFrame")).resetNodeValue.apply(r,P(e)),a}},{key:"next",value:function value(e,t,n){var r,i=e instanceof Array?e:[e],a=this._graph.createElectricNodeOf(i,{type:"NextFrame",fn:t});return n&&(r=this._graph.stopPropagation().setPropagationOverride("currentFrame")).resetNodeValue.apply(r,P(e)),a}},{key:"lock",value:function value(){return this._lockFlag=!0,this._reqQ.length=0,this}},{key:"unlock",value:function value(){return this._lockFlag=!1,this.setProp.apply(this,P(this._reqQ)),this._reqQ.length=0,this}},{key:"prop",value:function value(){var e,t=void 0,n=void 0;switch(e=arguments.length){case 1:t=arguments.length<=0?void 0:arguments[0];break;case 2:t=arguments.length<=0?void 0:arguments[0],n=arguments.length<=1?void 0:arguments[1];break;default:return this}return 2===e?(this._lockFlag?this._reqQ.push([t,n]):this.setProp([t,n]),this):this._graph.getNodeValue(t)}},{key:"setProp",value:function value(){for(var e,t=this,n=arguments.length,r=Array(n),i=0;i/gi),e},SmartLabelManager.store={},SmartLabelManager.prototype._calCharDimWithCache=function(e,t,n){if(!this._init)return!1;var r,i,a,o,u,c,s=this.options.maxCacheLimit,l=this._container,h=this.style||{},d=this._advancedCache||(this._advancedCache={}),p=this._advancedCacheKey||(this._advancedCacheKey=[]),y=e+(h.fontSize||"")+(h.fontFamily||"")+(h.fontWeight||"")+(h.fontStyle||""),g=e+"init"+(h.fontSize||"")+(h.fontFamily||"")+(h.fontWeight||"")+(h.fontStyle||"");return f[e]&&(e=f[e]),t?void 0===(c=d[g])&&(l.innerHTML=e.repeat?e.repeat(n):Array(n+1).join(e),a=l.offsetWidth,l.innerHTML=e,o=l.offsetWidth,c=d[g]=(a-n*o)/(n+1),p.push(g),p.length>s&&delete d[p.shift()]):c=0,(u=d[y])?(i=u.split(","),{width:parseFloat(i[0],10),height:parseFloat(i[1],10)}):(l.innerHTML=e,r={height:l.offsetHeight,width:l.offsetWidth+c},d[y]=r.width+","+r.height,p.push(y),p.length>s&&delete d[p.shift()],r)},SmartLabelManager.prototype._getWidthFn=function(){var e=this._containerObj,t=this._container,n=e.svgText;return n?function(e){var t,r;return n.textContent=e,(r=(t=n.getBBox()).width-d)<1&&(r=t.width),r}:function(e){return t.innerHTML=e,t.offsetWidth}},SmartLabelManager.prototype.setStyle=function(e){return this._init?e!==this.style||this._styleNotSet?(e||(e=this.style),o.setLineHeight(e),this.style=e,this._containerObj=t=this._containerManager.get(e),this._containerObj?(this._container=t.node,this._context=t.context,this._cache=t.charCache,this._lineHeight=t.lineHeight,this._styleNotSet=!1):this._styleNotSet=!0,this):void 0:this;var t},SmartLabelManager.prototype.useEllipsesOnOverflow=function(e){return this._init?(this._showNoEllipses=!e,this):this},SmartLabelManager.prototype.getSmartText=function(e,t,n,r){if(!this._init)return!1;void 0===e||null===e?e="":"string"!=typeof e&&(e=e.toString());var i,a,c,l,f,d,p,y,g,v,m,b,_,x,w,k,C,S,P,A,E,M,O,T,F,N,j=!1,I=0,D=-1,L=-1,R=-1,B=0,z=0,H=[],V=0,U=this._showNoEllipses?"":"...",W=this._lineHeight,q=this._context,G=this._container,Y=this._containerObj,X=Y.ellipsesWidth,K=Y.dotWidth,$=[],Q=-1,Z=-1,J=-1,ee=function fastTrim(e){for(var t=/\s/,n=(e=e.replace(/^\s\s*/,"")).length;t.test(e.charAt(n-=1)););return e.slice(0,n+1)},te={text:e,maxWidth:t,maxHeight:n,width:null,height:null,oriTextWidth:null,oriTextHeight:null,oriText:e,isTruncated:!1};if(b=this._getWidthFn(),n===W&&(n*=1.2),G){if(!h.isBrowserLess){if((j=o.xmlTagRegEx.test(e))?(G.innerHTML=e,te.oriTextWidth=p=G.offsetWidth,te.oriTextHeight=y=G.offsetHeight):(l=e.replace(o.ltgtRegex,function(e){return"<"===e?"<":">"}),w=this.getOriSize(l,!0),te.oriTextWidth=p=w.width,te.oriTextHeight=y=w.height),y<=n&&p<=t)return te.width=te.oriTextWidth=p,te.height=te.oriTextHeight=y,te;if(W>n)return te.text="",te.width=te.oriTextWidth=0,te.height=te.oriTextHeight=0,te}if(e=ee(e).replace(/(\s+)/g," "),f=this._showNoEllipses?t:t-X,!j){if(i=(H=e.split("")).length,a="",c=[],m=H[0],this._cache[m]?P=this._cache[m].width:(P=b(m),this._cache[m]={width:P}),f>P)V=(c=e.substr(0,o.getNearestBreakIndex(e,f,this)).split("")).length;else{if(P>t)return te.text="",te.width=te.oriTextWidth=te.height=te.oriTextHeight=0,te;U&&((f=t-2*K)>P?U="..":(f=t-K)>P?U=".":(f=0,U=""))}if(B=b(c.join("")),z=this._lineHeight,r){for(;Vf&&(a||(a=c.slice(0,-1).join("")),B>t))return te.text=ee(a)+U,te.tooltext=te.oriText,te.width=b(te.text),te.height=this._lineHeight,te;return te.text=c.join(""),te.width=B,te.height=this._lineHeight,te}for(;Vf&&(a||(a=c.slice(0,-1).join("")),B>t)){if(L=e.substr(0,c.length).lastIndexOf(" "),D=e.substr(0,c.length).lastIndexOf("-"),L>R?(B=b(c.slice(R+1,L).join("")),c.splice(L,1,"
"),R=L,g=L+1):D>R?(D===c.length-1?(B=b(c.slice(R+1,L).join("")),c.splice(D,1,"
-")):(B=b(c.slice(R+1,L).join("")),c.splice(D,1,"-
")),R=D,g=D+1):(c.splice(c.length-1,1,"
"+H[V]),J=c.length-2,B=b(c.slice(R+1,J+1).join("")),R=J,g=V),(z+=this._lineHeight)>n)return te.text=ee(a)+U,te.tooltext=te.oriText,te.width=t,te.height=z-this._lineHeight,te;I=s(I,B),a=null,v=o.getNearestBreakIndex(e.substr(g),f,this),B=b(e.substr(g,v||1)),c.length)/g,'$1'),G.innerHTML=e,C=0,S=(k=G[h.childRetriverFn](h.childRetriverString)).length;Ct)return te.text="",te.width=te.oriTextWidth=te.height=te.oriTextHeight=0,te;if(P>f&&!this._showNoEllipses&&((f=t-2*K)>P?U="..":(f=t-K)>P?U=".":(f=0,U="")),_=$[0].elem.offsetLeft,x=$[0].elem.offsetTop,r)for(;Vf&&(N||(N=V),G.offsetWidth>t&&(F=V,V=i));else for(;Vf?(N||(N=V),M>t&&(L=$[V].spaceIdx,D=$[V].dashIdx,L>R?($[L].elem.innerHTML="
",R=L):D>R?($[D].elem.innerHTML=D===V?"
-":"-
",R=D):A.parentNode.insertBefore(T=u.createElement("br"),A),A.offsetHeight+A.offsetTop>n?(T?T.parentNode.removeChild(T):R===D?$[D].elem.innerHTML="-":$[L].elem.innerHTML=" ",F=V,V=i):N=null)):O>n&&(F=V,V=i);if(F=N;V-=1)(A=$[V].elem).parentNode.removeChild(A);for(;V>=0;V-=1)A=$[V].elem,o.classNameBrReg.test(A.className)?A.parentNode.removeChild(A):V=0}return te.text=G.innerHTML.replace(o.spanRemovalRegx,"$1").replace(/\&\;/g,"&"),te.isTruncated&&(te.text+=U,te.tooltext=d),te.height=G.offsetHeight,te.width=G.offsetWidth,te}return te.error=new Error("Body Tag Missing!"),te},SmartLabelManager.prototype.getOriSize=function(e,t){if(!this._init)return!1;var n,r,i,a,o,u=0,c=0,f={};if(!t)return this._calCharDimWithCache(e);for(a=0,o=(n=e.split("")).length;a]+?\>)|(&(?:[a-z]+|#[0-9]+);|.)/gi,spanAdditionReplacer:'$1$2',spanRemovalRegx:new RegExp("\\]+?"+c+"[^\\>]{0,}\\>(.*?)\\<\\/span\\>","ig"),xmlTagRegEx:new RegExp("<[^>][^<]*[^>]+>","i"),ltgtRegex:/<|>/g,brReplaceRegex://gi,testStrAvg:"WgI",parentContainerStyle:{position:"absolute",top:"-9999em",whiteSpace:"nowrap",padding:"0px",width:"1px",height:"1px",overflow:"hidden"},supportedStyle:{font:"font",fontFamily:"font-family","font-family":"font-family",fontWeight:"font-weight","font-weight":"font-weight",fontSize:"font-size","font-size":"font-size",lineHeight:"line-height","line-height":"line-height",fontStyle:"font-style","font-style":"font-style"},getDocumentSupport:function getDocumentSupport(){var r,i,a;return t.getElementsByClassName?(r="getElementsByClassName",i=c,a=!0):(r="getElementsByTagName",i="span",a=!1),{isIE:/msie/i.test(n)&&!e.opera,hasSVG:Boolean(e.SVGAngle||t.implementation.hasFeature("http://www.w3.org/TR/SVG11/feature#BasicStructure","1.1")),isHeadLess:new RegExp(" HtmlUnit").test(n),isWebKit:new RegExp(" AppleWebKit/").test(n),childRetriverFn:r,childRetriverString:i,noClassTesting:a}},createContainer:function createContainer(e){var n,r;if(e&&(e.offsetWidth||e.offsetHeight)){if(e.appendChild)return e.appendChild(r=t.createElement("DIV")),r.className=u,r.setAttribute("aria-hidden","true"),r.setAttribute("role","presentation"),r}else if((n=t.getElementsByTagName("body")[0])&&n.appendChild)return(r=t.createElement("DIV")).className=u,r.setAttribute("aria-hidden","true"),r.setAttribute("role","presentation"),1,n.appendChild(r),r},getNearestBreakIndex:function getNearestBreakIndex(e,t,n){if(!e||!e.length)return 0;var r,o=n._getWidthFn(),u=0,c=0,s=o(e),l=s/e.length;if(r=t,u=i(t/l),se.length&&(r=t-s,u=e.length);r>0;){if(r=t-o(e.substr(0,u)),!(c=a(r/l)))return u;u+=c}for(;r<0;){if(r=t-o(e.substr(0,u)),!(c=a(r/l)))return u;u+=c}return u},setLineHeight:function setLineHeight(e){var t=e.fontSize=e.fontSize||"12px";return e.lineHeight=e.lineHeight||e["line-height"]||1.2*parseInt(t,10)+"px",e}}}};t.default=r,e.exports=t.default},function(e){e.exports={name:"muze",private:!0,version:"1.0.2",description:"Composable visualisation library for web with a data-first approach",homepage:"https://www.charts.com/muze",license:"MIT",author:"Charts.com ",contributors:[{name:"Akash Ghoswami",email:"akash@charts.com"},{name:"Ranajit Banerjee",email:"ranajit.banerjee@charts.com",url:"https://github.com/ranajitbanerjee"},{name:"Mridul Meharia",email:"mridul@charts.com",url:"https://github.com/mridulmeh"},{name:"Subhash Haldar",email:"subhash@charts.com"},{name:"Sandeep Acharya",email:"sandeep@charts.com"},{name:"Rousan Ali",email:"rousan@charts.com",url:"https://rousan.io"},{name:"Ujjal Kumar Dutta",email:"ujjal@charts.com"}],main:"src/index.js",keywords:["muze","svg","vector","graphics","data-visualization","visualization","renderer","fusioncharts","relational","algebra","relation"],repository:{type:"git",url:"https://github.com/chartshq/muze"},dependencies:{"@chartshq/layout":"^1.0.0","@chartshq/muze-firebolt":"^1.0.0","@chartshq/muze-legend":"^1.0.0","muze-utils":"^1.0.0","@chartshq/visual-cell":"^1.0.0","@chartshq/visual-group":"^1.0.0","@chartshq/visual-layer":"^1.0.0","@chartshq/visual-unit":"^1.0.0"}}},function(e,t,n){var r=n(44);e.exports=r.default?r.default:r},function(e,t,n){"use strict";var r=function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}(n(5)).default.init("undefined"!=typeof window?window:void 0),i=r.win.document,a=r.getDocumentSupport(),o=a.isWebKit?0:4.5;function ContainerManager(e,t,n){var r;n=(n=n>5?n:5)<20?n:20,this.maxContainers=n,this.first=null,this.last=null,this.containers={},this.length=0,this.rootNode=e,t&&((r=i.createElementNS("http://www.w3.org/2000/svg","svg")).setAttributeNS("http://www.w3.org/2000/svg","xlink","http://www.w3.org/1999/xlink"),r.setAttributeNS("http://www.w3.org/2000/svg","height","0"),r.setAttributeNS("http://www.w3.org/2000/svg","width","0"),this.svgRoot=r,this.rootNode.appendChild(r))}ContainerManager.prototype.get=function(e){var t,n,i,a=this.containers,o=this.length,u=this.maxContainers,c="";for(n in r.supportedStyle)void 0!==e[n]&&(c+=r.supportedStyle[n]+":"+e[n]+";");if(!c)return!1;if(i=a[c])this.first!==i&&(i.prev&&(i.prev.next=i.next),i.next&&(i.next.prev=i.prev),i.next=this.first,i.next.prev=i,this.last===i&&(this.last=i.prev),i.prev=null,this.first=i);else{if(o>=u)for(t=o-u+1;t--;)this.removeContainer(this.last);i=this.addContainer(c)}return i},ContainerManager.prototype.addContainer=function(e){var t,n;return this.containers[e]=n={next:null,prev:null,node:null,ellipsesWidth:0,lineHeight:0,dotWidth:0,avgCharWidth:4,keyStr:e,charCache:{}},n.next=this.first,n.next&&(n.next.prev=n),this.first=n,this.last||(this.last=n),this.length+=1,t=n.node=i.createElement("div"),this.rootNode.appendChild(t),a.isIE&&!a.hasSVG?t.style.setAttribute("cssText",e):t.setAttribute("style",e),t.setAttribute("aria-hidden","true"),t.setAttribute("role","presentation"),t.style.display="inline-block",t.innerHTML=r.testStrAvg,n.lineHeight=t.offsetHeight,n.avgCharWidth=t.offsetWidth/3,a.isBrowserLess?((t=n.svgText=i.createElementNS("http://www.w3.org/2000/svg","text")).setAttribute("style",e),this.svgRoot.appendChild(t),t.textContent=r.testStrAvg,n.lineHeight=t.getBBox().height,n.avgCharWidth=(t.getBBox().width-o)/3,t.textContent="...",n.ellipsesWidth=t.getBBox().width-o,t.textContent=".",n.dotWidth=t.getBBox().width-o):(t.innerHTML="...",n.ellipsesWidth=t.offsetWidth,t.innerHTML=".",n.dotWidth=t.offsetWidth,t.innerHTML=""),n},ContainerManager.prototype.removeContainer=function(e){var t=e.keyStr;t&&this.length&&e&&(this.length-=1,e.prev&&(e.prev.next=e.next),e.next&&(e.next.prev=e.prev),this.first===e&&(this.first=e.next),this.last===e&&(this.last=e.prev),e.node.parentNode.removeChild(e.node),delete this.containers[t])},ContainerManager.prototype.dispose=function(){var e,t=this.containers;for(e in this.maxContainers=null,t)this.removeContainer(t[e]);this.rootNode.parentNode.removeChild(this.rootNode),this.rootNode=null,this.first=null,this.last=null},e.exports=ContainerManager},function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,,function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,function(e,t,n){"use strict";n.r(t);var r={};n.r(r),n.d(r,"scaleLinear",function(){return linear_linear}),n.d(r,"scaleThreshold",function(){return threshold_threshold}),n.d(r,"scaleLog",function(){return log}),n.d(r,"scalePow",function(){return pow}),n.d(r,"scaleIdentity",function(){return identity_identity}),n.d(r,"scaleOrdinal",function(){return ordinal}),n.d(r,"scaleSequential",function(){return sequential}),n.d(r,"scaleQuantize",function(){return quantize_quantize}),n.d(r,"scaleQuantile",function(){return quantile_quantile}),n.d(r,"schemeCategory10",function(){return tn}),n.d(r,"schemeCategory20",function(){return rn}),n.d(r,"schemeCategory20b",function(){return nn}),n.d(r,"scaleBand",function(){return band}),n.d(r,"scaleTime",function(){return Jt});var i={};n.r(i),n.d(i,"schemeDark2",function(){return cn}),n.d(i,"schemePaired",function(){return sn}),n.d(i,"schemeAccent",function(){return un}),n.d(i,"schemePastel1",function(){return ln}),n.d(i,"schemePastel2",function(){return fn}),n.d(i,"schemeSet1",function(){return hn}),n.d(i,"schemeSet2",function(){return dn}),n.d(i,"schemeSet3",function(){return pn}),n.d(i,"schemeBlues",function(){return zn}),n.d(i,"schemeBrBG",function(){return gn}),n.d(i,"schemePRGn",function(){return mn}),n.d(i,"schemePiYG",function(){return _n}),n.d(i,"interpolateBrBG",function(){return vn}),n.d(i,"interpolatePRGn",function(){return bn}),n.d(i,"interpolatePiYG",function(){return xn}),n.d(i,"interpolatePuOr",function(){return wn}),n.d(i,"interpolateRdBu",function(){return kn}),n.d(i,"interpolateRdGy",function(){return Cn}),n.d(i,"interpolateRdYlBu",function(){return Sn}),n.d(i,"interpolateRdYlGn",function(){return Pn}),n.d(i,"interpolateSpectral",function(){return An}),n.d(i,"interpolateBlues",function(){return Hn}),n.d(i,"interpolateGreens",function(){return Vn}),n.d(i,"interpolateGreys",function(){return Un}),n.d(i,"interpolateOranges",function(){return Gn}),n.d(i,"interpolatePurples",function(){return Wn}),n.d(i,"interpolateReds",function(){return qn}),n.d(i,"interpolateViridis",function(){return Zn}),n.d(i,"interpolateInferno",function(){return er}),n.d(i,"interpolateMagma",function(){return Jn}),n.d(i,"interpolatePlasma",function(){return tr}),n.d(i,"interpolateWarm",function(){return Xn}),n.d(i,"interpolateCool",function(){return Kn}),n.d(i,"interpolateCubehelixDefault",function(){return Yn}),n.d(i,"interpolateBuGn",function(){return En}),n.d(i,"interpolateBuPu",function(){return Mn}),n.d(i,"interpolateGnBu",function(){return On}),n.d(i,"interpolateOrRd",function(){return Tn}),n.d(i,"interpolatePuBuGn",function(){return Fn}),n.d(i,"interpolatePuBu",function(){return Nn}),n.d(i,"interpolatePuRd",function(){return jn}),n.d(i,"interpolateRdPu",function(){return In}),n.d(i,"interpolateYlGnBu",function(){return Dn}),n.d(i,"interpolateYlGn",function(){return Ln}),n.d(i,"interpolateYlOrBr",function(){return Rn}),n.d(i,"interpolateYlOrRd",function(){return Bn}),n.d(i,"interpolateRainbow",function(){return Qn});var a={};n.r(a),n.d(a,"DRAG",function(){return Qo}),n.d(a,"HOVER",function(){return Zo}),n.d(a,"SELECTIONDRAG",function(){return Jo}),n.d(a,"CLICK",function(){return eu}),n.d(a,"LONGTOUCH",function(){return tu}),n.d(a,"TOUCHDRAG",function(){return nu}),n.d(a,"ALL_ACTIONS",function(){return ru});var o={};n.r(o),n.d(o,"SELECTION_NEW_ENTRY",function(){return iu}),n.d(o,"SELECTION_NEW_EXIT",function(){return au}),n.d(o,"SELECTION_NULL",function(){return ou}),n.d(o,"SELECTION_OLD_ENTRY",function(){return uu}),n.d(o,"SELECTION_OLD_EXIT",function(){return cu});var u={};n.r(u),n.d(u,"BRUSH",function(){return wu}),n.d(u,"HIGHLIGHT",function(){return ku}),n.d(u,"TOOLTIP",function(){return Cu}),n.d(u,"FILTER",function(){return Su}),n.d(u,"SELECT",function(){return Pu});var c={};n.r(c),n.d(c,"HighlightBeahviour",function(){return Eu}),n.d(c,"BrushBehaviour",function(){return Ou}),n.d(c,"FilterBehaviour",function(){return Fu}),n.d(c,"SelectBehaviour",function(){return Lu});var s={};n.r(s),n.d(s,"SelectionBox",function(){return Ju}),n.d(s,"Tooltip",function(){return gc}),n.d(s,"Crossline",function(){return mc}),n.d(s,"PlotHighlighter",function(){return xc}),n.d(s,"FilterEffect",function(){return kc}),n.d(s,"PersistentAnchors",function(){return Ec}),n.d(s,"BrushAnchors",function(){return Tc}),n.d(s,"AnchorEffect",function(){return Pc});var l={};n.r(l),n.d(l,"BOTTOM",function(){return Gc}),n.d(l,"TOP",function(){return Yc}),n.d(l,"LEFT",function(){return Xc}),n.d(l,"RIGHT",function(){return Kc}),n.d(l,"axisOrientationMap",function(){return $c});var f={};n.r(f),n.d(f,"LINEAR",function(){return Qc}),n.d(f,"BAND",function(){return Zc}),n.d(f,"TIME",function(){return Jc}),n.d(f,"COLOR",function(){return es}),n.d(f,"ORDINAL",function(){return ts}),n.d(f,"QUANTIZE",function(){return ns}),n.d(f,"QUANTILE",function(){return rs}),n.d(f,"LOG",function(){return is}),n.d(f,"POW",function(){return as}),n.d(f,"IDENTITY",function(){return os}),n.d(f,"SEQUENTIAL",function(){return us}),n.d(f,"THRESHOLD",function(){return cs});var h={};n.r(h),n.d(h,"CONFIG",function(){return ad}),n.d(h,"DATA",function(){return od}),n.d(h,"AXES",function(){return ud}),n.d(h,"LAYERDEFS",function(){return cd}),n.d(h,"WIDTH",function(){return sd}),n.d(h,"HEIGHT",function(){return ld}),n.d(h,"MOUNT",function(){return fd}),n.d(h,"primaryXAxisUpdated",function(){return hd}),n.d(h,"primaryYAxisUpdated",function(){return dd}),n.d(h,"secondaryXAxisUpdated",function(){return pd}),n.d(h,"secondaryYAxisUpdated",function(){return yd}),n.d(h,"TRANSFORM",function(){return gd}),n.d(h,"DATADOMAIN",function(){return vd}),n.d(h,"LAYERSCREATED",function(){return md}),n.d(h,"FIELDS",function(){return bd}),n.d(h,"TIMEDIFFS",function(){return _d}),n.d(h,"LAYERAXISINDEX",function(){return xd});var d={};n.r(d),n.d(d,"SelectBehaviour",function(){return wp});var y={};n.r(y),n.d(y,"SelectionBox",function(){return zp}),n.d(y,"LegendHighlighter",function(){return Up});var g={};n.r(g),n.d(g,"share",function(){return Oy}),n.d(g,"html",function(){return operators_html});var v=function(e,t){return et?1:e>=t?0:NaN},m=function(e){return 1===e.length&&(e=function ascendingComparator(e){return function(t,n){return v(e(t),n)}}(e)),{left:function left(t,n,r,i){for(null==r&&(r=0),null==i&&(i=t.length);r>>1;e(t[a],n)<0?r=a+1:i=a}return r},right:function right(t,n,r,i){for(null==r&&(r=0),null==i&&(i=t.length);r>>1;e(t[a],n)>0?i=a:r=a+1}return r}}};var b=m(v),_=b.right,x=(b.left,_);var w=function(e){return null===e?NaN:+e},k=Array.prototype,C=(k.slice,k.map,function(e,t,n){e=+e,t=+t,n=(i=arguments.length)<2?(t=e,e=0,1):i<3?1:+n;for(var r=-1,i=0|Math.max(0,Math.ceil((t-e)/n)),a=new Array(i);++r0)return[e];if((r=t0)for(e=Math.ceil(e/o),t=Math.floor(t/o),a=new Array(i=Math.ceil(t-e+1));++u=0?(a>=S?10:a>=P?5:a>=A?2:1)*Math.pow(10,i):-Math.pow(10,-i)/(a>=S?10:a>=P?5:a>=A?2:1)}function tickStep(e,t,n){var r=Math.abs(t-e)/Math.max(0,n),i=Math.pow(10,Math.floor(Math.log(r)/Math.LN10)),a=r/i;return a>=S?i*=10:a>=P?i*=5:a>=A&&(i*=2),t=1)return+n(e[r-1],r-1,e);var r,i=(r-1)*t,a=Math.floor(i),o=+n(e[a],a,e);return o+(+n(e[a+1],a+1,e)-o)*(i-a)}};function map_Map(){}function map_map(e,t){var n=new map_Map;if(e instanceof map_Map)e.each(function(e,t){n.set(t,e)});else if(Array.isArray(e)){var r,i=-1,a=e.length;if(null==t)for(;++i=r.length)return null!=e&&n.sort(e),null!=t?t(n):n;for(var u,c,s,l=-1,f=n.length,h=r[i++],d=O(),p=a();++lr.length)return e;var a,o=i[n-1];return null!=t&&n>=r.length?a=e.entries():(a=[],e.each(function(e,t){a.push({key:t,values:_entries(e,n)})})),null!=o?a.sort(function(e,t){return o(e.key,t.key)}):a}(apply(e,0,createMap,setMap),0)},key:function key(e){return r.push(e),n},sortKeys:function sortKeys(e){return i[r.length-1]=e,n},sortValues:function sortValues(t){return e=t,n},rollup:function rollup(e){return t=e,n}}};function createObject(){return{}}function setObject(e,t,n){e[t]=n}function createMap(){return O()}function setMap(e,t,n){e.set(t,n)}function set_Set(){}var F=O.prototype;function set_set(e,t){var n=new set_Set;if(e instanceof set_Set)e.each(function(e){n.add(e)});else if(e){var r=-1,i=e.length;if(null==t)for(;++r1?+t:s,f=a[1]a[1-f]))return n=Math.max(0,getClosestIndexOf(h,s)),c=getClosestIndexOf(h,l),o=s===l?n:Math.max(n,c-1),f&&(u=n,n=d-o,o=d-u),n>o?void 0:r().slice(n,o+1)},n.invert=function(e,t){var n,o,u=+e,c=arguments.length>1?+t:u,s=a[1]a[1-s]))return n=Math.max(0,getClosestIndexOf(l,u,"left")),r()[s?f-n:n]},rescale()}function getClosestIndexOf(e,t,n){for(var r,i,a,o=0,u=e.length-1;ot?0===u?u:"left"===n?u-1:u:u===e.length-1?u:"left"===n?u:u+1:u}var L=function(e,t,n){e.prototype=t.prototype=n,n.constructor=e};function extend(e,t){var n=Object.create(e.prototype);for(var r in t)n[r]=t[r];return n}function Color(){}var R="\\s*([+-]?\\d+)\\s*",B="\\s*([+-]?\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)\\s*",z="\\s*([+-]?\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)%\\s*",H=/^#([0-9a-f]{3})$/,V=/^#([0-9a-f]{6})$/,U=new RegExp("^rgb\\("+[R,R,R]+"\\)$"),W=new RegExp("^rgb\\("+[z,z,z]+"\\)$"),q=new RegExp("^rgba\\("+[R,R,R,B]+"\\)$"),G=new RegExp("^rgba\\("+[z,z,z,B]+"\\)$"),Y=new RegExp("^hsl\\("+[B,z,z]+"\\)$"),X=new RegExp("^hsla\\("+[B,z,z,B]+"\\)$"),K={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};function color_color(e){var t;return e=(e+"").trim().toLowerCase(),(t=H.exec(e))?new Rgb((t=parseInt(t[1],16))>>8&15|t>>4&240,t>>4&15|240&t,(15&t)<<4|15&t,1):(t=V.exec(e))?rgbn(parseInt(t[1],16)):(t=U.exec(e))?new Rgb(t[1],t[2],t[3],1):(t=W.exec(e))?new Rgb(255*t[1]/100,255*t[2]/100,255*t[3]/100,1):(t=q.exec(e))?rgba(t[1],t[2],t[3],t[4]):(t=G.exec(e))?rgba(255*t[1]/100,255*t[2]/100,255*t[3]/100,t[4]):(t=Y.exec(e))?hsla(t[1],t[2]/100,t[3]/100,1):(t=X.exec(e))?hsla(t[1],t[2]/100,t[3]/100,t[4]):K.hasOwnProperty(e)?rgbn(K[e]):"transparent"===e?new Rgb(NaN,NaN,NaN,0):null}function rgbn(e){return new Rgb(e>>16&255,e>>8&255,255&e,1)}function rgba(e,t,n,r){return r<=0&&(e=t=n=NaN),new Rgb(e,t,n,r)}function rgbConvert(e){return e instanceof Color||(e=color_color(e)),e?new Rgb((e=e.rgb()).r,e.g,e.b,e.opacity):new Rgb}function color_rgb(e,t,n,r){return 1===arguments.length?rgbConvert(e):new Rgb(e,t,n,null==r?1:r)}function Rgb(e,t,n,r){this.r=+e,this.g=+t,this.b=+n,this.opacity=+r}function _hex(e){return((e=Math.max(0,Math.min(255,Math.round(e)||0)))<16?"0":"")+e.toString(16)}function hsla(e,t,n,r){return r<=0?e=t=n=NaN:n<=0||n>=1?e=t=NaN:t<=0&&(e=NaN),new Hsl(e,t,n,r)}function hsl(e,t,n,r){return 1===arguments.length?function hslConvert(e){if(e instanceof Hsl)return new Hsl(e.h,e.s,e.l,e.opacity);if(e instanceof Color||(e=color_color(e)),!e)return new Hsl;if(e instanceof Hsl)return e;var t=(e=e.rgb()).r/255,n=e.g/255,r=e.b/255,i=Math.min(t,n,r),a=Math.max(t,n,r),o=NaN,u=a-i,c=(a+i)/2;return u?(o=t===a?(n-r)/u+6*(n0&&c<1?0:o,new Hsl(o,u,c,e.opacity)}(e):new Hsl(e,t,n,null==r?1:r)}function Hsl(e,t,n,r){this.h=+e,this.s=+t,this.l=+n,this.opacity=+r}function hsl2rgb(e,t,n){return 255*(e<60?t+(n-t)*e/60:e<180?n:e<240?t+(n-t)*(240-e)/60:t)}L(Color,color_color,{displayable:function displayable(){return this.rgb().displayable()},hex:function hex(){return this.rgb().hex()},toString:function toString(){return this.rgb()+""}}),L(Rgb,color_rgb,extend(Color,{brighter:function brighter(e){return e=null==e?1/.7:Math.pow(1/.7,e),new Rgb(this.r*e,this.g*e,this.b*e,this.opacity)},darker:function darker(e){return e=null==e?.7:Math.pow(.7,e),new Rgb(this.r*e,this.g*e,this.b*e,this.opacity)},rgb:function rgb(){return this},displayable:function displayable(){return 0<=this.r&&this.r<=255&&0<=this.g&&this.g<=255&&0<=this.b&&this.b<=255&&0<=this.opacity&&this.opacity<=1},hex:function hex(){return"#"+_hex(this.r)+_hex(this.g)+_hex(this.b)},toString:function toString(){var e=this.opacity;return(1===(e=isNaN(e)?1:Math.max(0,Math.min(1,e)))?"rgb(":"rgba(")+Math.max(0,Math.min(255,Math.round(this.r)||0))+", "+Math.max(0,Math.min(255,Math.round(this.g)||0))+", "+Math.max(0,Math.min(255,Math.round(this.b)||0))+(1===e?")":", "+e+")")}})),L(Hsl,hsl,extend(Color,{brighter:function brighter(e){return e=null==e?1/.7:Math.pow(1/.7,e),new Hsl(this.h,this.s,this.l*e,this.opacity)},darker:function darker(e){return e=null==e?.7:Math.pow(.7,e),new Hsl(this.h,this.s,this.l*e,this.opacity)},rgb:function rgb(){var e=this.h%360+360*(this.h<0),t=isNaN(e)||isNaN(this.s)?0:this.s,n=this.l,r=n+(n<.5?n:1-n)*t,i=2*n-r;return new Rgb(hsl2rgb(e>=240?e-240:e+120,i,r),hsl2rgb(e,i,r),hsl2rgb(e<120?e+240:e-120,i,r),this.opacity)},displayable:function displayable(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1}}));var $=Math.PI/180,Q=180/Math.PI,Z=.96422,J=1,ee=.82521,te=4/29,ne=6/29,re=3*ne*ne,ie=ne*ne*ne;function labConvert(e){if(e instanceof Lab)return new Lab(e.l,e.a,e.b,e.opacity);if(e instanceof Hcl){if(isNaN(e.h))return new Lab(e.l,0,0,e.opacity);var t=e.h*$;return new Lab(e.l,Math.cos(t)*e.c,Math.sin(t)*e.c,e.opacity)}e instanceof Rgb||(e=rgbConvert(e));var n,r,i=rgb2lrgb(e.r),a=rgb2lrgb(e.g),o=rgb2lrgb(e.b),u=xyz2lab((.2225045*i+.7168786*a+.0606169*o)/J);return i===a&&a===o?n=r=u:(n=xyz2lab((.4360747*i+.3850649*a+.1430804*o)/Z),r=xyz2lab((.0139322*i+.0971045*a+.7141733*o)/ee)),new Lab(116*u-16,500*(n-u),200*(u-r),e.opacity)}function lab(e,t,n,r){return 1===arguments.length?labConvert(e):new Lab(e,t,n,null==r?1:r)}function Lab(e,t,n,r){this.l=+e,this.a=+t,this.b=+n,this.opacity=+r}function xyz2lab(e){return e>ie?Math.pow(e,1/3):e/re+te}function lab2xyz(e){return e>ne?e*e*e:re*(e-te)}function lrgb2rgb(e){return 255*(e<=.0031308?12.92*e:1.055*Math.pow(e,1/2.4)-.055)}function rgb2lrgb(e){return(e/=255)<=.04045?e/12.92:Math.pow((e+.055)/1.055,2.4)}function hclConvert(e){if(e instanceof Hcl)return new Hcl(e.h,e.c,e.l,e.opacity);if(e instanceof Lab||(e=labConvert(e)),0===e.a&&0===e.b)return new Hcl(NaN,0,e.l,e.opacity);var t=Math.atan2(e.b,e.a)*Q;return new Hcl(t<0?t+360:t,Math.sqrt(e.a*e.a+e.b*e.b),e.l,e.opacity)}function hcl(e,t,n,r){return 1===arguments.length?hclConvert(e):new Hcl(e,t,n,null==r?1:r)}function Hcl(e,t,n,r){this.h=+e,this.c=+t,this.l=+n,this.opacity=+r}L(Lab,lab,extend(Color,{brighter:function brighter(e){return new Lab(this.l+18*(null==e?1:e),this.a,this.b,this.opacity)},darker:function darker(e){return new Lab(this.l-18*(null==e?1:e),this.a,this.b,this.opacity)},rgb:function rgb(){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 new Rgb(lrgb2rgb(3.1338561*(t=Z*lab2xyz(t))-1.6168667*(e=J*lab2xyz(e))-.4906146*(n=ee*lab2xyz(n))),lrgb2rgb(-.9787684*t+1.9161415*e+.033454*n),lrgb2rgb(.0719453*t-.2289914*e+1.4052427*n),this.opacity)}})),L(Hcl,hcl,extend(Color,{brighter:function brighter(e){return new Hcl(this.h,this.c,this.l+18*(null==e?1:e),this.opacity)},darker:function darker(e){return new Hcl(this.h,this.c,this.l-18*(null==e?1:e),this.opacity)},rgb:function rgb(){return labConvert(this).rgb()}}));var ae=-.14861,oe=1.78277,ue=-.29227,ce=-.90649,se=1.97294,le=se*ce,fe=se*oe,he=oe*ue-ce*ae;function cubehelix_cubehelix(e,t,n,r){return 1===arguments.length?function cubehelixConvert(e){if(e instanceof Cubehelix)return new Cubehelix(e.h,e.s,e.l,e.opacity);e instanceof Rgb||(e=rgbConvert(e));var t=e.r/255,n=e.g/255,r=e.b/255,i=(he*r+le*t-fe*n)/(he+le-fe),a=r-i,o=(se*(n-i)-ue*a)/ce,u=Math.sqrt(o*o+a*a)/(se*i*(1-i)),c=u?Math.atan2(o,a)*Q-120:NaN;return new Cubehelix(c<0?c+360:c,u,i,e.opacity)}(e):new Cubehelix(e,t,n,null==r?1:r)}function Cubehelix(e,t,n,r){this.h=+e,this.s=+t,this.l=+n,this.opacity=+r}function basis(e,t,n,r,i){var a=e*e,o=a*e;return((1-3*e+3*a-o)*t+(4-6*a+3*o)*n+(1+3*e+3*a-3*o)*r+o*i)/6}L(Cubehelix,cubehelix_cubehelix,extend(Color,{brighter:function brighter(e){return e=null==e?1/.7:Math.pow(1/.7,e),new Cubehelix(this.h,this.s,this.l*e,this.opacity)},darker:function darker(e){return e=null==e?.7:Math.pow(.7,e),new Cubehelix(this.h,this.s,this.l*e,this.opacity)},rgb:function rgb(){var e=isNaN(this.h)?0:(this.h+120)*$,t=+this.l,n=isNaN(this.s)?0:this.s*t*(1-t),r=Math.cos(e),i=Math.sin(e);return new Rgb(255*(t+n*(ae*r+oe*i)),255*(t+n*(ue*r+ce*i)),255*(t+n*(se*r)),this.opacity)}}));var de=function(e){return function(){return e}};function linear(e,t){return function(n){return e+n*t}}function color_hue(e,t){var n=t-e;return n?linear(e,n>180||n<-180?n-360*Math.round(n/360):n):de(isNaN(e)?t:e)}function gamma(e){return 1==(e=+e)?nogamma:function(t,n){return n-t?function exponential(e,t,n){return e=Math.pow(e,n),t=Math.pow(t,n)-e,n=1/n,function(r){return Math.pow(e+r*t,n)}}(t,n,e):de(isNaN(t)?n:t)}}function nogamma(e,t){var n=t-e;return n?linear(e,n):de(isNaN(e)?t:e)}var pe=function rgbGamma(e){var t=gamma(e);function rgb(e,n){var r=t((e=color_rgb(e)).r,(n=color_rgb(n)).r),i=t(e.g,n.g),a=t(e.b,n.b),o=nogamma(e.opacity,n.opacity);return function(t){return e.r=r(t),e.g=i(t),e.b=a(t),e.opacity=o(t),e+""}}return rgb.gamma=rgbGamma,rgb}(1);function rgbSpline(e){return function(t){var n,r,i=t.length,a=new Array(i),o=new Array(i),u=new Array(i);for(n=0;n=1?(n=1,t-1):Math.floor(n*t),i=e[r],a=e[r+1],o=r>0?e[r-1]:2*i-a,u=ra&&(i=t.slice(a,i),u[o]?u[o]+=i:u[++o]=i),(n=n[0])===(r=r[0])?u[o]?u[o]+=r:u[++o]=r:(u[++o]=null,c.push({i:o,x:ge(n,r)})),a=be.lastIndex;return a180?t+=360:t-e>180&&(e+=360),i.push({i:n.push(pop(n)+"rotate(",null,r)-2,x:ge(e,t)})):t&&n.push(pop(n)+"rotate("+t+r)}(i.rotate,a.rotate,o,u),function skewX(e,t,n,i){e!==t?i.push({i:n.push(pop(n)+"skewX(",null,r)-2,x:ge(e,t)}):t&&n.push(pop(n)+"skewX("+t+r)}(i.skewX,a.skewX,o,u),function scale(e,t,n,r,i,a){if(e!==n||t!==r){var o=i.push(pop(i)+"scale(",null,",",null,")");a.push({i:o-4,x:ge(e,n)},{i:o-2,x:ge(t,r)})}else 1===n&&1===r||i.push(pop(i)+"scale("+n+","+r+")")}(i.scaleX,i.scaleY,a.scaleX,a.scaleY,o,u),i=a=null,function(e){for(var t,n=-1,r=u.length;++n2?polymap:bimap,r=i=null,scale}function scale(t){return(r||(r=n(a,o,c?function deinterpolateClamp(e){return function(t,n){var r=e(t=+t,n=+n);return function(e){return e<=t?0:e>=n?1:r(e)}}}(e):e,u)))(+t)}return scale.invert=function(e){return(i||(i=n(o,a,deinterpolateLinear,c?function reinterpolateClamp(e){return function(t,n){var r=e(t=+t,n=+n);return function(e){return e<=0?t:e>=1?n:r(e)}}}(t):t)))(+e)},scale.domain=function(e){return arguments.length?(a=j.call(e,De),rescale()):a.slice()},scale.range=function(e){return arguments.length?(o=I.call(e),rescale()):o.slice()},scale.rangeRound=function(e){return o=I.call(e),u=Ae,rescale()},scale.clamp=function(e){return arguments.length?(c=!!e,rescale()):c},scale.interpolate=function(e){return arguments.length?(u=e,rescale()):u},rescale()}var Re=function(e,t){if((n=(e=t?e.toExponential(t-1):e.toExponential()).indexOf("e"))<0)return null;var n,r=e.slice(0,n);return[r.length>1?r[0]+r.slice(2):r,+e.slice(n+1)]},Be=function(e){return(e=Re(Math.abs(e)))?e[1]:NaN},ze=/^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;function formatSpecifier(e){return new FormatSpecifier(e)}function FormatSpecifier(e){if(!(t=ze.exec(e)))throw new Error("invalid format: "+e);var t;this.fill=t[1]||" ",this.align=t[2]||">",this.sign=t[3]||"-",this.symbol=t[4]||"",this.zero=!!t[5],this.width=t[6]&&+t[6],this.comma=!!t[7],this.precision=t[8]&&+t[8].slice(1),this.trim=!!t[9],this.type=t[10]||""}formatSpecifier.prototype=FormatSpecifier.prototype,FormatSpecifier.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.trim?"~":"")+this.type};var He,Ve,Ue,We,qe=function(e){e:for(var t,n=e.length,r=1,i=-1;r0){if(!+e[r])break e;i=0}}return i>0?e.slice(0,i)+e.slice(t+1):e},Ge=function(e,t){var n=Re(e,t);if(!n)return e+"";var r=n[0],i=n[1];return i<0?"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")},Ye={"%":function _(e,t){return(100*e).toFixed(t)},b:function b(e){return Math.round(e).toString(2)},c:function c(e){return e+""},d:function d(e){return Math.round(e).toString(10)},e:function e(t,n){return t.toExponential(n)},f:function f(e,t){return e.toFixed(t)},g:function g(e,t){return e.toPrecision(t)},o:function o(e){return Math.round(e).toString(8)},p:function p(e,t){return Ge(100*e,t)},r:Ge,s:function(e,t){var n=Re(e,t);if(!n)return e+"";var r=n[0],i=n[1],a=i-(He=3*Math.max(-8,Math.min(8,Math.floor(i/3))))+1,o=r.length;return a===o?r:a>o?r+new Array(a-o+1).join("0"):a>0?r.slice(0,a)+"."+r.slice(a):"0."+new Array(1-a).join("0")+Re(e,Math.max(0,t+a-1))[0]},X:function X(e){return Math.round(e).toString(16).toUpperCase()},x:function x(e){return Math.round(e).toString(16)}},Xe=function(e){return e},Ke=["y","z","a","f","p","n","µ","m","","k","M","G","T","P","E","Z","Y"],$e=function(e){var t=e.grouping&&e.thousands?function(e,t){return function(n,r){for(var i=n.length,a=[],o=0,u=e[0],c=0;i>0&&u>0&&(c+u+1>r&&(u=Math.max(1,r-c)),a.push(n.substring(i-=u,i+u)),!((c+=u+1)>r));)u=e[o=(o+1)%e.length];return a.reverse().join(t)}}(e.grouping,e.thousands):Xe,n=e.currency,r=e.decimal,i=e.numerals?function(e){return function(t){return t.replace(/[0-9]/g,function(t){return e[+t]})}}(e.numerals):Xe,a=e.percent||"%";function newFormat(e){var o=(e=formatSpecifier(e)).fill,u=e.align,c=e.sign,s=e.symbol,l=e.zero,f=e.width,h=e.comma,d=e.precision,p=e.trim,y=e.type;"n"===y?(h=!0,y="g"):Ye[y]||(null==d&&(d=12),p=!0,y="g"),(l||"0"===o&&"="===u)&&(l=!0,o="0",u="=");var g="$"===s?n[0]:"#"===s&&/[boxX]/.test(y)?"0"+y.toLowerCase():"",v="$"===s?n[1]:/[%p]/.test(y)?a:"",m=Ye[y],b=/[defgprs%]/.test(y);function format(e){var n,a,s,_=g,x=v;if("c"===y)x=m(e)+x,e="";else{var w=(e=+e)<0;if(e=m(Math.abs(e),d),p&&(e=qe(e)),w&&0==+e&&(w=!1),_=(w?"("===c?c:"-":"-"===c||"("===c?"":c)+_,x=("s"===y?Ke[8+He/3]:"")+x+(w&&"("===c?")":""),b)for(n=-1,a=e.length;++n(s=e.charCodeAt(n))||s>57){x=(46===s?r+e.slice(n+1):e.slice(n))+x,e=e.slice(0,n);break}}h&&!l&&(e=t(e,1/0));var k=_.length+e.length+x.length,C=k>1)+_+e+x+C.slice(k);break;default:e=C+_+e+x}return i(e)}return d=null==d?6:/[gprs]/.test(y)?Math.max(1,Math.min(21,d)):Math.max(0,Math.min(20,d)),format.toString=function(){return e+""},format}return{format:newFormat,formatPrefix:function formatPrefix(e,t){var n=newFormat(((e=formatSpecifier(e)).type="f",e)),r=3*Math.max(-8,Math.min(8,Math.floor(Be(t)/3))),i=Math.pow(10,-r),a=Ke[8+r/3];return function(e){return n(i*e)+a}}}};!function defaultLocale(e){return Ve=$e(e),Ue=Ve.format,We=Ve.formatPrefix,Ve}({decimal:".",thousands:",",grouping:[3],currency:["$",""]});var Qe=function(e,t,n){var r,i=e[0],a=e[e.length-1],o=tickStep(i,a,null==t?10:t);switch((n=formatSpecifier(null==n?",f":n)).type){case"s":var u=Math.max(Math.abs(i),Math.abs(a));return null!=n.precision||isNaN(r=function(e,t){return Math.max(0,3*Math.max(-8,Math.min(8,Math.floor(Be(t)/3)))-Be(Math.abs(e)))}(o,u))||(n.precision=r),We(n,u);case"":case"e":case"g":case"p":case"r":null!=n.precision||isNaN(r=function(e,t){return e=Math.abs(e),t=Math.abs(t)-e,Math.max(0,Be(t)-Be(e))+1}(o,Math.max(Math.abs(i),Math.abs(a))))||(n.precision=r-("e"===n.type));break;case"f":case"%":null!=n.precision||isNaN(r=function(e){return Math.max(0,-Be(Math.abs(e)))}(o))||(n.precision=r-2*("%"===n.type))}return Ue(n)};function linearish(e){var t=e.domain;return e.ticks=function(e){var n=t();return E(n[0],n[n.length-1],null==e?10:e)},e.tickFormat=function(e,n){return Qe(t(),e,n)},e.nice=function(n){null==n&&(n=10);var r,i=t(),a=0,o=i.length-1,u=i[a],c=i[o];return c0?r=tickIncrement(u=Math.floor(u/r)*r,c=Math.ceil(c/r)*r,n):r<0&&(r=tickIncrement(u=Math.ceil(u*r)/r,c=Math.floor(c*r)/r,n)),r>0?(i[a]=Math.floor(u/r)*r,i[o]=Math.ceil(c/r)*r,t(i)):r<0&&(i[a]=Math.ceil(u*r)/r,i[o]=Math.floor(c*r)/r,t(i)),e},e}function linear_linear(){var e=continuous(deinterpolateLinear,ge);return e.copy=function(){return copy(e,linear_linear())},linearish(e)}function identity_identity(){var e=[0,1];function scale(e){return+e}return scale.invert=scale,scale.domain=scale.range=function(t){return arguments.length?(e=j.call(t,De),scale):e.slice()},scale.copy=function(){return identity_identity().domain(e)},linearish(scale)}var Ze=function(e,t){var n,r=0,i=(e=e.slice()).length-1,a=e[r],o=e[i];return o0){for(;hc)break;y.push(f)}}else for(;h=1;--l)if(!((f=s*l)c)break;y.push(f)}}else y=E(h,d,Math.min(d-h,p)).map(i);return a?y.reverse():y},e.tickFormat=function(t,a){if(null==a&&(a=10===n?".0e":","),"function"!=typeof a&&(a=Ue(a)),t===1/0)return a;null==t&&(t=10);var o=Math.max(1,n*t/e.ticks().length);return function(e){var t=e/i(Math.round(r(e)));return t*n0?n[i-1]:e[0],i=n?[r[n-1],t]:[r[o-1],r[o]]},scale.copy=function(){return quantize_quantize().domain([e,t]).range(i)},linearish(scale)}function threshold_threshold(){var e=[.5],t=[0,1],n=1;function scale(r){if(r<=r)return t[x(e,r,0,n)]}return scale.domain=function(r){return arguments.length?(e=I.call(r),n=Math.min(e.length,t.length-1),scale):e.slice()},scale.range=function(r){return arguments.length?(t=I.call(r),n=Math.min(e.length,t.length-1),scale):t.slice()},scale.invertExtent=function(n){var r=t.indexOf(n);return[e[r-1],e[r]]},scale.copy=function(){return threshold_threshold().domain(e).range(t)},scale}var Je=new Date,et=new Date;function newInterval(e,t,n,r){function interval(t){return e(t=new Date(+t)),t}return interval.floor=interval,interval.ceil=function(n){return e(n=new Date(n-1)),t(n,1),e(n),n},interval.round=function(e){var t=interval(e),n=interval.ceil(e);return e-t0))return o;do{o.push(a=new Date(+n)),t(n,i),e(n)}while(a=t)for(;e(t),!n(t);)t.setTime(t-1)},function(e,r){if(e>=e)if(r<0)for(;++r<=0;)for(;t(e,-1),!n(e););else for(;--r>=0;)for(;t(e,1),!n(e););})},n&&(interval.count=function(t,r){return Je.setTime(+t),et.setTime(+r),e(Je),e(et),Math.floor(n(Je,et))},interval.every=function(e){return e=Math.floor(e),isFinite(e)&&e>0?e>1?interval.filter(r?function(t){return r(t)%e==0}:function(t){return interval.count(0,t)%e==0}):interval:null}),interval}var tt=newInterval(function(){},function(e,t){e.setTime(+e+t)},function(e,t){return t-e});tt.every=function(e){return e=Math.floor(e),isFinite(e)&&e>0?e>1?newInterval(function(t){t.setTime(Math.floor(t/e)*e)},function(t,n){t.setTime(+t+n*e)},function(t,n){return(n-t)/e}):tt:null};var nt=tt,rt=(tt.range,6e4),it=6048e5,at=newInterval(function(e){e.setTime(1e3*Math.floor(e/1e3))},function(e,t){e.setTime(+e+1e3*t)},function(e,t){return(t-e)/1e3},function(e){return e.getUTCSeconds()}),ot=at,ut=(at.range,newInterval(function(e){e.setTime(Math.floor(e/rt)*rt)},function(e,t){e.setTime(+e+t*rt)},function(e,t){return(t-e)/rt},function(e){return e.getMinutes()})),ct=ut,st=(ut.range,newInterval(function(e){var t=e.getTimezoneOffset()*rt%36e5;t<0&&(t+=36e5),e.setTime(36e5*Math.floor((+e-t)/36e5)+t)},function(e,t){e.setTime(+e+36e5*t)},function(e,t){return(t-e)/36e5},function(e){return e.getHours()})),lt=st,ft=(st.range,newInterval(function(e){e.setHours(0,0,0,0)},function(e,t){e.setDate(e.getDate()+t)},function(e,t){return(t-e-(t.getTimezoneOffset()-e.getTimezoneOffset())*rt)/864e5},function(e){return e.getDate()-1})),ht=ft;ft.range;function weekday(e){return newInterval(function(t){t.setDate(t.getDate()-(t.getDay()+7-e)%7),t.setHours(0,0,0,0)},function(e,t){e.setDate(e.getDate()+7*t)},function(e,t){return(t-e-(t.getTimezoneOffset()-e.getTimezoneOffset())*rt)/it})}var dt=weekday(0),pt=weekday(1),yt=weekday(2),gt=weekday(3),vt=weekday(4),mt=weekday(5),bt=weekday(6),_t=(dt.range,pt.range,yt.range,gt.range,vt.range,mt.range,bt.range,newInterval(function(e){e.setDate(1),e.setHours(0,0,0,0)},function(e,t){e.setMonth(e.getMonth()+t)},function(e,t){return t.getMonth()-e.getMonth()+12*(t.getFullYear()-e.getFullYear())},function(e){return e.getMonth()})),xt=_t,wt=(_t.range,newInterval(function(e){e.setMonth(0,1),e.setHours(0,0,0,0)},function(e,t){e.setFullYear(e.getFullYear()+t)},function(e,t){return t.getFullYear()-e.getFullYear()},function(e){return e.getFullYear()}));wt.every=function(e){return isFinite(e=Math.floor(e))&&e>0?newInterval(function(t){t.setFullYear(Math.floor(t.getFullYear()/e)*e),t.setMonth(0,1),t.setHours(0,0,0,0)},function(t,n){t.setFullYear(t.getFullYear()+n*e)}):null};var kt=wt,Ct=(wt.range,newInterval(function(e){e.setUTCSeconds(0,0)},function(e,t){e.setTime(+e+t*rt)},function(e,t){return(t-e)/rt},function(e){return e.getUTCMinutes()})),St=(Ct.range,newInterval(function(e){e.setUTCMinutes(0,0,0)},function(e,t){e.setTime(+e+36e5*t)},function(e,t){return(t-e)/36e5},function(e){return e.getUTCHours()})),Pt=(St.range,newInterval(function(e){e.setUTCHours(0,0,0,0)},function(e,t){e.setUTCDate(e.getUTCDate()+t)},function(e,t){return(t-e)/864e5},function(e){return e.getUTCDate()-1})),At=Pt;Pt.range;function utcWeekday(e){return newInterval(function(t){t.setUTCDate(t.getUTCDate()-(t.getUTCDay()+7-e)%7),t.setUTCHours(0,0,0,0)},function(e,t){e.setUTCDate(e.getUTCDate()+7*t)},function(e,t){return(t-e)/it})}var Et=utcWeekday(0),Mt=utcWeekday(1),Ot=utcWeekday(2),Tt=utcWeekday(3),Ft=utcWeekday(4),Nt=utcWeekday(5),jt=utcWeekday(6),It=(Et.range,Mt.range,Ot.range,Tt.range,Ft.range,Nt.range,jt.range,newInterval(function(e){e.setUTCDate(1),e.setUTCHours(0,0,0,0)},function(e,t){e.setUTCMonth(e.getUTCMonth()+t)},function(e,t){return t.getUTCMonth()-e.getUTCMonth()+12*(t.getUTCFullYear()-e.getUTCFullYear())},function(e){return e.getUTCMonth()})),Dt=(It.range,newInterval(function(e){e.setUTCMonth(0,1),e.setUTCHours(0,0,0,0)},function(e,t){e.setUTCFullYear(e.getUTCFullYear()+t)},function(e,t){return t.getUTCFullYear()-e.getUTCFullYear()},function(e){return e.getUTCFullYear()}));Dt.every=function(e){return isFinite(e=Math.floor(e))&&e>0?newInterval(function(t){t.setUTCFullYear(Math.floor(t.getUTCFullYear()/e)*e),t.setUTCMonth(0,1),t.setUTCHours(0,0,0,0)},function(t,n){t.setUTCFullYear(t.getUTCFullYear()+n*e)}):null};var Lt=Dt;Dt.range;function localDate(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 utcDate(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 newYear(e){return{y:e,m:0,d:1,H:0,M:0,S:0,L:0}}var Rt,Bt,zt,Ht,Vt={"-":"",_:" ",0:"0"},Ut=/^\s*\d+/,Wt=/^%/,qt=/[\\^$*+?|[\]().{}]/g;function locale_pad(e,t,n){var r=e<0?"-":"",i=(r?-e:e)+"",a=i.length;return r+(a68?1900:2e3),n+r[0].length):-1}function parseZone(e,t,n){var r=/^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(t.slice(n,n+6));return r?(e.Z=r[1]?0:-(r[2]+(r[3]||"00")),n+r[0].length):-1}function parseMonthNumber(e,t,n){var r=Ut.exec(t.slice(n,n+2));return r?(e.m=r[0]-1,n+r[0].length):-1}function parseDayOfMonth(e,t,n){var r=Ut.exec(t.slice(n,n+2));return r?(e.d=+r[0],n+r[0].length):-1}function parseDayOfYear(e,t,n){var r=Ut.exec(t.slice(n,n+3));return r?(e.m=0,e.d=+r[0],n+r[0].length):-1}function parseHour24(e,t,n){var r=Ut.exec(t.slice(n,n+2));return r?(e.H=+r[0],n+r[0].length):-1}function parseMinutes(e,t,n){var r=Ut.exec(t.slice(n,n+2));return r?(e.M=+r[0],n+r[0].length):-1}function parseSeconds(e,t,n){var r=Ut.exec(t.slice(n,n+2));return r?(e.S=+r[0],n+r[0].length):-1}function parseMilliseconds(e,t,n){var r=Ut.exec(t.slice(n,n+3));return r?(e.L=+r[0],n+r[0].length):-1}function parseMicroseconds(e,t,n){var r=Ut.exec(t.slice(n,n+6));return r?(e.L=Math.floor(r[0]/1e3),n+r[0].length):-1}function parseLiteralPercent(e,t,n){var r=Wt.exec(t.slice(n,n+1));return r?n+r[0].length:-1}function parseUnixTimestamp(e,t,n){var r=Ut.exec(t.slice(n));return r?(e.Q=+r[0],n+r[0].length):-1}function parseUnixTimestampSeconds(e,t,n){var r=Ut.exec(t.slice(n));return r?(e.Q=1e3*+r[0],n+r[0].length):-1}function formatDayOfMonth(e,t){return locale_pad(e.getDate(),t,2)}function formatHour24(e,t){return locale_pad(e.getHours(),t,2)}function formatHour12(e,t){return locale_pad(e.getHours()%12||12,t,2)}function formatDayOfYear(e,t){return locale_pad(1+ht.count(kt(e),e),t,3)}function formatMilliseconds(e,t){return locale_pad(e.getMilliseconds(),t,3)}function formatMicroseconds(e,t){return formatMilliseconds(e,t)+"000"}function formatMonthNumber(e,t){return locale_pad(e.getMonth()+1,t,2)}function formatMinutes(e,t){return locale_pad(e.getMinutes(),t,2)}function formatSeconds(e,t){return locale_pad(e.getSeconds(),t,2)}function formatWeekdayNumberMonday(e){var t=e.getDay();return 0===t?7:t}function formatWeekNumberSunday(e,t){return locale_pad(dt.count(kt(e),e),t,2)}function formatWeekNumberISO(e,t){var n=e.getDay();return e=n>=4||0===n?vt(e):vt.ceil(e),locale_pad(vt.count(kt(e),e)+(4===kt(e).getDay()),t,2)}function formatWeekdayNumberSunday(e){return e.getDay()}function formatWeekNumberMonday(e,t){return locale_pad(pt.count(kt(e),e),t,2)}function locale_formatYear(e,t){return locale_pad(e.getFullYear()%100,t,2)}function formatFullYear(e,t){return locale_pad(e.getFullYear()%1e4,t,4)}function formatZone(e){var t=e.getTimezoneOffset();return(t>0?"-":(t*=-1,"+"))+locale_pad(t/60|0,"0",2)+locale_pad(t%60,"0",2)}function formatUTCDayOfMonth(e,t){return locale_pad(e.getUTCDate(),t,2)}function formatUTCHour24(e,t){return locale_pad(e.getUTCHours(),t,2)}function formatUTCHour12(e,t){return locale_pad(e.getUTCHours()%12||12,t,2)}function formatUTCDayOfYear(e,t){return locale_pad(1+At.count(Lt(e),e),t,3)}function formatUTCMilliseconds(e,t){return locale_pad(e.getUTCMilliseconds(),t,3)}function formatUTCMicroseconds(e,t){return formatUTCMilliseconds(e,t)+"000"}function formatUTCMonthNumber(e,t){return locale_pad(e.getUTCMonth()+1,t,2)}function formatUTCMinutes(e,t){return locale_pad(e.getUTCMinutes(),t,2)}function formatUTCSeconds(e,t){return locale_pad(e.getUTCSeconds(),t,2)}function formatUTCWeekdayNumberMonday(e){var t=e.getUTCDay();return 0===t?7:t}function formatUTCWeekNumberSunday(e,t){return locale_pad(Et.count(Lt(e),e),t,2)}function formatUTCWeekNumberISO(e,t){var n=e.getUTCDay();return e=n>=4||0===n?Ft(e):Ft.ceil(e),locale_pad(Ft.count(Lt(e),e)+(4===Lt(e).getUTCDay()),t,2)}function formatUTCWeekdayNumberSunday(e){return e.getUTCDay()}function formatUTCWeekNumberMonday(e,t){return locale_pad(Mt.count(Lt(e),e),t,2)}function formatUTCYear(e,t){return locale_pad(e.getUTCFullYear()%100,t,2)}function formatUTCFullYear(e,t){return locale_pad(e.getUTCFullYear()%1e4,t,4)}function formatUTCZone(){return"+0000"}function formatLiteralPercent(){return"%"}function formatUnixTimestamp(e){return+e}function formatUnixTimestampSeconds(e){return Math.floor(+e/1e3)}!function defaultLocale_defaultLocale(e){return Rt=function formatLocale(e){var t=e.dateTime,n=e.date,r=e.time,i=e.periods,a=e.days,o=e.shortDays,u=e.months,c=e.shortMonths,s=formatRe(i),l=formatLookup(i),f=formatRe(a),h=formatLookup(a),d=formatRe(o),p=formatLookup(o),y=formatRe(u),g=formatLookup(u),v=formatRe(c),m=formatLookup(c),b={a:function formatShortWeekday(e){return o[e.getDay()]},A:function formatWeekday(e){return a[e.getDay()]},b:function formatShortMonth(e){return c[e.getMonth()]},B:function formatMonth(e){return u[e.getMonth()]},c:null,d:formatDayOfMonth,e:formatDayOfMonth,f:formatMicroseconds,H:formatHour24,I:formatHour12,j:formatDayOfYear,L:formatMilliseconds,m:formatMonthNumber,M:formatMinutes,p:function formatPeriod(e){return i[+(e.getHours()>=12)]},Q:formatUnixTimestamp,s:formatUnixTimestampSeconds,S:formatSeconds,u:formatWeekdayNumberMonday,U:formatWeekNumberSunday,V:formatWeekNumberISO,w:formatWeekdayNumberSunday,W:formatWeekNumberMonday,x:null,X:null,y:locale_formatYear,Y:formatFullYear,Z:formatZone,"%":formatLiteralPercent},_={a:function formatUTCShortWeekday(e){return o[e.getUTCDay()]},A:function formatUTCWeekday(e){return a[e.getUTCDay()]},b:function formatUTCShortMonth(e){return c[e.getUTCMonth()]},B:function formatUTCMonth(e){return u[e.getUTCMonth()]},c:null,d:formatUTCDayOfMonth,e:formatUTCDayOfMonth,f:formatUTCMicroseconds,H:formatUTCHour24,I:formatUTCHour12,j:formatUTCDayOfYear,L:formatUTCMilliseconds,m:formatUTCMonthNumber,M:formatUTCMinutes,p:function formatUTCPeriod(e){return i[+(e.getUTCHours()>=12)]},Q:formatUnixTimestamp,s:formatUnixTimestampSeconds,S:formatUTCSeconds,u:formatUTCWeekdayNumberMonday,U:formatUTCWeekNumberSunday,V:formatUTCWeekNumberISO,w:formatUTCWeekdayNumberSunday,W:formatUTCWeekNumberMonday,x:null,X:null,y:formatUTCYear,Y:formatUTCFullYear,Z:formatUTCZone,"%":formatLiteralPercent},x={a:function parseShortWeekday(e,t,n){var r=d.exec(t.slice(n));return r?(e.w=p[r[0].toLowerCase()],n+r[0].length):-1},A:function parseWeekday(e,t,n){var r=f.exec(t.slice(n));return r?(e.w=h[r[0].toLowerCase()],n+r[0].length):-1},b:function parseShortMonth(e,t,n){var r=v.exec(t.slice(n));return r?(e.m=m[r[0].toLowerCase()],n+r[0].length):-1},B:function parseMonth(e,t,n){var r=y.exec(t.slice(n));return r?(e.m=g[r[0].toLowerCase()],n+r[0].length):-1},c:function parseLocaleDateTime(e,n,r){return parseSpecifier(e,t,n,r)},d:parseDayOfMonth,e:parseDayOfMonth,f:parseMicroseconds,H:parseHour24,I:parseHour24,j:parseDayOfYear,L:parseMilliseconds,m:parseMonthNumber,M:parseMinutes,p:function parsePeriod(e,t,n){var r=s.exec(t.slice(n));return r?(e.p=l[r[0].toLowerCase()],n+r[0].length):-1},Q:parseUnixTimestamp,s:parseUnixTimestampSeconds,S:parseSeconds,u:parseWeekdayNumberMonday,U:parseWeekNumberSunday,V:parseWeekNumberISO,w:parseWeekdayNumberSunday,W:parseWeekNumberMonday,x:function parseLocaleDate(e,t,r){return parseSpecifier(e,n,t,r)},X:function parseLocaleTime(e,t,n){return parseSpecifier(e,r,t,n)},y:parseYear,Y:parseFullYear,Z:parseZone,"%":parseLiteralPercent};function newFormat(e,t){return function(n){var r,i,a,o=[],u=-1,c=0,s=e.length;for(n instanceof Date||(n=new Date(+n));++u53)return null;"w"in a||(a.w=1),"Z"in a?(r=(i=(r=utcDate(newYear(a.y))).getUTCDay())>4||0===i?Mt.ceil(r):Mt(r),r=At.offset(r,7*(a.V-1)),a.y=r.getUTCFullYear(),a.m=r.getUTCMonth(),a.d=r.getUTCDate()+(a.w+6)%7):(r=(i=(r=t(newYear(a.y))).getDay())>4||0===i?pt.ceil(r):pt(r),r=ht.offset(r,7*(a.V-1)),a.y=r.getFullYear(),a.m=r.getMonth(),a.d=r.getDate()+(a.w+6)%7)}else("W"in a||"U"in a)&&("w"in a||(a.w="u"in a?a.u%7:"W"in a?1:0),i="Z"in a?utcDate(newYear(a.y)).getUTCDay():t(newYear(a.y)).getDay(),a.m=0,a.d="W"in a?(a.w+6)%7+7*a.W-(i+5)%7:a.w+7*a.U-(i+6)%7);return"Z"in a?(a.H+=a.Z/100|0,a.M+=a.Z%100,utcDate(a)):t(a)}}function parseSpecifier(e,t,n,r){for(var i,a,o=0,u=t.length,c=n.length;o=c)return-1;if(37===(i=t.charCodeAt(o++))){if(i=t.charAt(o++),!(a=x[i in Vt?t.charAt(o++):i])||(r=a(e,n,r))<0)return-1}else if(i!=n.charCodeAt(r++))return-1}return r}return b.x=newFormat(n,b),b.X=newFormat(r,b),b.c=newFormat(t,b),_.x=newFormat(n,_),_.X=newFormat(r,_),_.c=newFormat(t,_),{format:function format(e){var t=newFormat(e+="",b);return t.toString=function(){return e},t},parse:function parse(e){var t=newParse(e+="",localDate);return t.toString=function(){return e},t},utcFormat:function utcFormat(e){var t=newFormat(e+="",_);return t.toString=function(){return e},t},utcParse:function utcParse(e){var t=newParse(e,utcDate);return t.toString=function(){return e},t}}}(e),Bt=Rt.format,Rt.parse,zt=Rt.utcFormat,Ht=Rt.utcParse,Rt}({dateTime:"%x, %X",date:"%-m/%-d/%Y",time:"%-I:%M:%S %p",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"]});Date.prototype.toISOString||zt("%Y-%m-%dT%H:%M:%S.%LZ");+new Date("2000-01-01T00:00:00.000Z")||Ht("%Y-%m-%dT%H:%M:%S.%LZ");var Gt=1e3,Yt=60*Gt,Xt=60*Yt,Kt=24*Xt,$t=7*Kt,Qt=30*Kt,Zt=365*Kt;function time_date(e){return new Date(e)}function time_number(e){return e instanceof Date?+e:+new Date(+e)}function calendar(e,t,n,r,i,a,o,u,c){var s=continuous(deinterpolateLinear,ge),l=s.invert,f=s.domain,h=c(".%L"),d=c(":%S"),p=c("%I:%M"),y=c("%I %p"),g=c("%a %d"),v=c("%b %d"),b=c("%B"),_=c("%Y"),x=[[o,1,Gt],[o,5,5*Gt],[o,15,15*Gt],[o,30,30*Gt],[a,1,Yt],[a,5,5*Yt],[a,15,15*Yt],[a,30,30*Yt],[i,1,Xt],[i,3,3*Xt],[i,6,6*Xt],[i,12,12*Xt],[r,1,Kt],[r,2,2*Kt],[n,1,$t],[t,1,Qt],[t,3,3*Qt],[e,1,Zt]];function tickFormat(u){return(o(u)1)&&(e-=Math.floor(e));var t=Math.abs(e-.5);return $n.h=360*e-100,$n.s=1.5-1.5*t,$n.l=.8-.9*t,$n+""};color_rgb(),Math.PI,Math.PI;function viridis_ramp(e){var t=e.length;return function(n){return e[Math.max(0,Math.min(t-1,Math.floor(n*t)))]}}var Zn=viridis_ramp(an("44015444025645045745055946075a46085c460a5d460b5e470d60470e6147106347116447136548146748166848176948186a481a6c481b6d481c6e481d6f481f70482071482173482374482475482576482677482878482979472a7a472c7a472d7b472e7c472f7d46307e46327e46337f463480453581453781453882443983443a83443b84433d84433e85423f854240864241864142874144874045884046883f47883f48893e49893e4a893e4c8a3d4d8a3d4e8a3c4f8a3c508b3b518b3b528b3a538b3a548c39558c39568c38588c38598c375a8c375b8d365c8d365d8d355e8d355f8d34608d34618d33628d33638d32648e32658e31668e31678e31688e30698e306a8e2f6b8e2f6c8e2e6d8e2e6e8e2e6f8e2d708e2d718e2c718e2c728e2c738e2b748e2b758e2a768e2a778e2a788e29798e297a8e297b8e287c8e287d8e277e8e277f8e27808e26818e26828e26828e25838e25848e25858e24868e24878e23888e23898e238a8d228b8d228c8d228d8d218e8d218f8d21908d21918c20928c20928c20938c1f948c1f958b1f968b1f978b1f988b1f998a1f9a8a1e9b8a1e9c891e9d891f9e891f9f881fa0881fa1881fa1871fa28720a38620a48621a58521a68522a78522a88423a98324aa8325ab8225ac8226ad8127ad8128ae8029af7f2ab07f2cb17e2db27d2eb37c2fb47c31b57b32b67a34b67935b77937b87838b9773aba763bbb753dbc743fbc7340bd7242be7144bf7046c06f48c16e4ac16d4cc26c4ec36b50c46a52c56954c56856c66758c7655ac8645cc8635ec96260ca6063cb5f65cb5e67cc5c69cd5b6ccd5a6ece5870cf5773d05675d05477d1537ad1517cd2507fd34e81d34d84d44b86d54989d5488bd6468ed64590d74393d74195d84098d83e9bd93c9dd93ba0da39a2da37a5db36a8db34aadc32addc30b0dd2fb2dd2db5de2bb8de29bade28bddf26c0df25c2df23c5e021c8e020cae11fcde11dd0e11cd2e21bd5e21ad8e219dae319dde318dfe318e2e418e5e419e7e419eae51aece51befe51cf1e51df4e61ef6e620f8e621fbe723fde725")),Jn=viridis_ramp(an("00000401000501010601010802010902020b02020d03030f03031204041405041606051806051a07061c08071e0907200a08220b09240c09260d0a290e0b2b100b2d110c2f120d31130d34140e36150e38160f3b180f3d19103f1a10421c10441d11471e114920114b21114e22115024125325125527125829115a2a115c2c115f2d11612f116331116533106734106936106b38106c390f6e3b0f703d0f713f0f72400f74420f75440f764510774710784910784a10794c117a4e117b4f127b51127c52137c54137d56147d57157e59157e5a167e5c167f5d177f5f187f601880621980641a80651a80671b80681c816a1c816b1d816d1d816e1e81701f81721f817320817521817621817822817922827b23827c23827e24828025828125818326818426818627818827818928818b29818c29818e2a81902a81912b81932b80942c80962c80982d80992d809b2e7f9c2e7f9e2f7fa02f7fa1307ea3307ea5317ea6317da8327daa337dab337cad347cae347bb0357bb2357bb3367ab5367ab73779b83779ba3878bc3978bd3977bf3a77c03a76c23b75c43c75c53c74c73d73c83e73ca3e72cc3f71cd4071cf4070d0416fd2426fd3436ed5446dd6456cd8456cd9466bdb476adc4869de4968df4a68e04c67e24d66e34e65e44f64e55064e75263e85362e95462ea5661eb5760ec5860ed5a5fee5b5eef5d5ef05f5ef1605df2625df2645cf3655cf4675cf4695cf56b5cf66c5cf66e5cf7705cf7725cf8745cf8765cf9785df9795df97b5dfa7d5efa7f5efa815ffb835ffb8560fb8761fc8961fc8a62fc8c63fc8e64fc9065fd9266fd9467fd9668fd9869fd9a6afd9b6bfe9d6cfe9f6dfea16efea36ffea571fea772fea973feaa74feac76feae77feb078feb27afeb47bfeb67cfeb77efeb97ffebb81febd82febf84fec185fec287fec488fec68afec88cfeca8dfecc8ffecd90fecf92fed194fed395fed597fed799fed89afdda9cfddc9efddea0fde0a1fde2a3fde3a5fde5a7fde7a9fde9aafdebacfcecaefceeb0fcf0b2fcf2b4fcf4b6fcf6b8fcf7b9fcf9bbfcfbbdfcfdbf")),er=viridis_ramp(an("00000401000501010601010802010a02020c02020e03021004031204031405041706041907051b08051d09061f0a07220b07240c08260d08290e092b10092d110a30120a32140b34150b37160b39180c3c190c3e1b0c411c0c431e0c451f0c48210c4a230c4c240c4f260c51280b53290b552b0b572d0b592f0a5b310a5c320a5e340a5f3609613809623909633b09643d09653e0966400a67420a68440a68450a69470b6a490b6a4a0c6b4c0c6b4d0d6c4f0d6c510e6c520e6d540f6d550f6d57106e59106e5a116e5c126e5d126e5f136e61136e62146e64156e65156e67166e69166e6a176e6c186e6d186e6f196e71196e721a6e741a6e751b6e771c6d781c6d7a1d6d7c1d6d7d1e6d7f1e6c801f6c82206c84206b85216b87216b88226a8a226a8c23698d23698f24699025689225689326679526679727669827669a28659b29649d29649f2a63a02a63a22b62a32c61a52c60a62d60a82e5fa92e5eab2f5ead305dae305cb0315bb1325ab3325ab43359b63458b73557b93556ba3655bc3754bd3853bf3952c03a51c13a50c33b4fc43c4ec63d4dc73e4cc83f4bca404acb4149cc4248ce4347cf4446d04545d24644d34743d44842d54a41d74b3fd84c3ed94d3dda4e3cdb503bdd513ade5238df5337e05536e15635e25734e35933e45a31e55c30e65d2fe75e2ee8602de9612bea632aeb6429eb6628ec6726ed6925ee6a24ef6c23ef6e21f06f20f1711ff1731df2741cf3761bf37819f47918f57b17f57d15f67e14f68013f78212f78410f8850ff8870ef8890cf98b0bf98c0af98e09fa9008fa9207fa9407fb9606fb9706fb9906fb9b06fb9d07fc9f07fca108fca309fca50afca60cfca80dfcaa0ffcac11fcae12fcb014fcb216fcb418fbb61afbb81dfbba1ffbbc21fbbe23fac026fac228fac42afac62df9c72ff9c932f9cb35f8cd37f8cf3af7d13df7d340f6d543f6d746f5d949f5db4cf4dd4ff4df53f4e156f3e35af3e55df2e661f2e865f2ea69f1ec6df1ed71f1ef75f1f179f2f27df2f482f3f586f3f68af4f88ef5f992f6fa96f8fb9af9fc9dfafda1fcffa4")),tr=viridis_ramp(an("0d088710078813078916078a19068c1b068d1d068e20068f2206902406912605912805922a05932c05942e05952f059631059733059735049837049938049a3a049a3c049b3e049c3f049c41049d43039e44039e46039f48039f4903a04b03a14c02a14e02a25002a25102a35302a35502a45601a45801a45901a55b01a55c01a65e01a66001a66100a76300a76400a76600a76700a86900a86a00a86c00a86e00a86f00a87100a87201a87401a87501a87701a87801a87a02a87b02a87d03a87e03a88004a88104a78305a78405a78606a68707a68808a68a09a58b0aa58d0ba58e0ca48f0da4910ea3920fa39410a29511a19613a19814a099159f9a169f9c179e9d189d9e199da01a9ca11b9ba21d9aa31e9aa51f99a62098a72197a82296aa2395ab2494ac2694ad2793ae2892b02991b12a90b22b8fb32c8eb42e8db52f8cb6308bb7318ab83289ba3388bb3488bc3587bd3786be3885bf3984c03a83c13b82c23c81c33d80c43e7fc5407ec6417dc7427cc8437bc9447aca457acb4679cc4778cc4977cd4a76ce4b75cf4c74d04d73d14e72d24f71d35171d45270d5536fd5546ed6556dd7566cd8576bd9586ada5a6ada5b69db5c68dc5d67dd5e66de5f65de6164df6263e06363e16462e26561e26660e3685fe4695ee56a5de56b5de66c5ce76e5be76f5ae87059e97158e97257ea7457eb7556eb7655ec7754ed7953ed7a52ee7b51ef7c51ef7e50f07f4ff0804ef1814df1834cf2844bf3854bf3874af48849f48948f58b47f58c46f68d45f68f44f79044f79143f79342f89441f89540f9973ff9983ef99a3efa9b3dfa9c3cfa9e3bfb9f3afba139fba238fca338fca537fca636fca835fca934fdab33fdac33fdae32fdaf31fdb130fdb22ffdb42ffdb52efeb72dfeb82cfeba2cfebb2bfebd2afebe2afec029fdc229fdc328fdc527fdc627fdc827fdca26fdcb26fccd25fcce25fcd025fcd225fbd324fbd524fbd724fad824fada24f9dc24f9dd25f8df25f8e125f7e225f7e425f6e626f6e826f5e926f5eb27f4ed27f3ee27f3f027f2f227f1f426f1f525f0f724f0f921")),nr={ROW_ID:"__id__"},rr={ACTION_INF:"actionInf",ON_LAYER_DRAW:"onlayerdraw"},ir=n(0),ar=n.n(ir),or=Array.prototype.slice,ur=function(e){return e},cr=1,sr=2,lr=3,fr=4,hr=1e-6;function translateX(e){return"translate("+(e+.5)+",0)"}function translateY(e){return"translate(0,"+(e+.5)+")"}function entering(){return!this.__axis}function axis_axis(e,t){var n=[],r=null,i=null,a=null,o=6,u=6,c=3,s=e===cr||e===fr?-1:1,l=e===fr||e===sr?"x":"y",f=e===cr||e===lr?translateX:translateY;function axis(h){var d=null==r?t.ticks?t.ticks.apply(t,n):t.domain():r,p=null==i?t.tickFormat?t.tickFormat.apply(t,n):ur:i,y=Math.max(o,0)+c,g=t.range(),v=+g[0]+.5,m=+g[g.length-1]+.5,b=(t.bandwidth?function axis_center(e){var t=Math.max(0,e.bandwidth()-1)/2;return e.round()&&(t=Math.round(t)),function(n){return+e(n)+t}}:function axis_number(e){return function(t){return+e(t)}})(t.copy()),_=h.selection?h.selection():h,x=_.selectAll(".domain").data([null]),w=_.selectAll(".tick").data(d,t).order(),k=w.exit(),C=w.enter().append("g").attr("class","tick"),S=w.select("line"),P=w.select("text");x=x.merge(x.enter().insert("path",".tick").attr("class","domain").attr("stroke","#000")),w=w.merge(C),S=S.merge(C.append("line").attr("stroke","#000").attr(l+"2",s*o)),P=P.merge(C.append("text").attr("fill","#000").attr(l,s*y).attr("dy",e===cr?"0em":e===lr?"0.71em":"0.32em")).style("transform",a),h!==_&&(x=x.transition(h),w=w.transition(h),S=S.transition(h),P=P.transition(h),k=k.transition(h).attr("opacity",hr).attr("transform",function(e){return isFinite(e=b(e))?f(e):this.getAttribute("transform")}),C.attr("opacity",hr).attr("transform",function(e){var t=this.parentNode.__axis;return f(t&&isFinite(t=t(e))?t:b(e))})),k.remove(),x.attr("d",e===fr||e==sr?"M"+s*u+","+v+"H0.5V"+m+"H"+s*u:"M"+v+","+s*u+"V0.5H"+m+"V"+s*u),w.attr("opacity",1).attr("transform",function(e){return f(b(e))}),S.attr(l+"2",s*o),P.attr(l,s*y).text(p),_.filter(entering).attr("fill","none").attr("font-size",10).attr("font-family","sans-serif").attr("text-anchor",e===sr?"start":e===fr?"end":"middle"),_.each(function(){this.__axis=b})}return axis.scale=function(e){return arguments.length?(t=e,axis):t},axis.tickTransform=function(e){return arguments.length?(a=e,axis):a},axis.ticks=function(){return n=or.call(arguments),axis},axis.tickArguments=function(e){return arguments.length?(n=null==e?[]:or.call(e),axis):n.slice()},axis.tickValues=function(e){return arguments.length?(r=null==e?null:or.call(e),axis):r&&r.slice()},axis.tickFormat=function(e){return arguments.length?(i=e,axis):i},axis.tickSize=function(e){return arguments.length?(o=u=+e,axis):o},axis.tickSizeInner=function(e){return arguments.length?(o=+e,axis):o},axis.tickSizeOuter=function(e){return arguments.length?(u=+e,axis):u},axis.tickPadding=function(e){return arguments.length?(c=+e,axis):c},axis}var dr=Math.PI,pr=2*dr,yr=pr-1e-6;function Path(){this._x0=this._y0=this._x1=this._y1=null,this._=""}function path_path(){return new Path}Path.prototype=path_path.prototype={constructor:Path,moveTo:function moveTo(e,t){this._+="M"+(this._x0=this._x1=+e)+","+(this._y0=this._y1=+t)},closePath:function closePath(){null!==this._x1&&(this._x1=this._x0,this._y1=this._y0,this._+="Z")},lineTo:function lineTo(e,t){this._+="L"+(this._x1=+e)+","+(this._y1=+t)},quadraticCurveTo:function quadraticCurveTo(e,t,n,r){this._+="Q"+ +e+","+ +t+","+(this._x1=+n)+","+(this._y1=+r)},bezierCurveTo:function bezierCurveTo(e,t,n,r,i,a){this._+="C"+ +e+","+ +t+","+ +n+","+ +r+","+(this._x1=+i)+","+(this._y1=+a)},arcTo:function arcTo(e,t,n,r,i){e=+e,t=+t,n=+n,r=+r,i=+i;var a=this._x1,o=this._y1,u=n-e,c=r-t,s=a-e,l=o-t,f=s*s+l*l;if(i<0)throw new Error("negative radius: "+i);if(null===this._x1)this._+="M"+(this._x1=e)+","+(this._y1=t);else if(f>1e-6)if(Math.abs(l*u-c*s)>1e-6&&i){var h=n-a,d=r-o,p=u*u+c*c,y=h*h+d*d,g=Math.sqrt(p),v=Math.sqrt(f),m=i*Math.tan((dr-Math.acos((p+f-y)/(2*g*v)))/2),b=m/v,_=m/g;Math.abs(b-1)>1e-6&&(this._+="L"+(e+b*s)+","+(t+b*l)),this._+="A"+i+","+i+",0,0,"+ +(l*h>s*d)+","+(this._x1=e+_*u)+","+(this._y1=t+_*c)}else this._+="L"+(this._x1=e)+","+(this._y1=t);else;},arc:function arc(e,t,n,r,i,a){e=+e,t=+t;var o=(n=+n)*Math.cos(r),u=n*Math.sin(r),c=e+o,s=t+u,l=1^a,f=a?r-i:i-r;if(n<0)throw new Error("negative radius: "+n);null===this._x1?this._+="M"+c+","+s:(Math.abs(this._x1-c)>1e-6||Math.abs(this._y1-s)>1e-6)&&(this._+="L"+c+","+s),n&&(f<0&&(f=f%pr+pr),f>yr?this._+="A"+n+","+n+",0,1,"+l+","+(e-o)+","+(t-u)+"A"+n+","+n+",0,1,"+l+","+(this._x1=c)+","+(this._y1=s):f>1e-6&&(this._+="A"+n+","+n+",0,"+ +(f>=dr)+","+l+","+(this._x1=e+n*Math.cos(i))+","+(this._y1=t+n*Math.sin(i))))},rect:function rect(e,t,n,r){this._+="M"+(this._x0=this._x1=+e)+","+(this._y0=this._y1=+t)+"h"+ +n+"v"+ +r+"h"+-n+"Z"},toString:function toString(){return this._}};var gr=path_path,vr=function(e){return function constant(){return e}},mr=Math.abs,br=Math.atan2,_r=Math.cos,xr=Math.max,wr=Math.min,kr=Math.sin,Cr=Math.sqrt,Sr=1e-12,Pr=Math.PI,Ar=Pr/2,Er=2*Pr;function asin(e){return e>=1?Ar:e<=-1?-Ar:Math.asin(e)}function arcInnerRadius(e){return e.innerRadius}function arcOuterRadius(e){return e.outerRadius}function arcStartAngle(e){return e.startAngle}function arcEndAngle(e){return e.endAngle}function arcPadAngle(e){return e&&e.padAngle}function cornerTangents(e,t,n,r,i,a,o){var u=e-n,c=t-r,s=(o?a:-a)/Cr(u*u+c*c),l=s*c,f=-s*u,h=e+l,d=t+f,p=n+l,y=r+f,g=(h+p)/2,v=(d+y)/2,m=p-h,b=y-d,_=m*m+b*b,x=i-a,w=h*y-p*d,k=(b<0?-1:1)*Cr(xr(0,x*x*_-w*w)),C=(w*b-m*k)/_,S=(-w*m-b*k)/_,P=(w*b+m*k)/_,A=(-w*m+b*k)/_,E=C-g,M=S-v,O=P-g,T=A-v;return E*E+M*M>O*O+T*T&&(C=P,S=A),{cx:C,cy:S,x01:-l,y01:-f,x11:C*(i/x-1),y11:S*(i/x-1)}}function Linear(e){this._context=e}Linear.prototype={areaStart:function areaStart(){this._line=0},areaEnd:function areaEnd(){this._line=NaN},lineStart:function lineStart(){this._point=0},lineEnd:function lineEnd(){(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function point(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;default:this._context.lineTo(e,t)}}};var Mr=function(e){return new Linear(e)};function point_x(e){return e[0]}function point_y(e){return e[1]}var Or=function(){var e=point_x,t=point_y,n=vr(!0),r=null,i=Mr,a=null;function line(o){var u,c,s,l=o.length,f=!1;for(null==r&&(a=i(s=gr())),u=0;u<=l;++u)!(u=l;--f)u.point(g[f],v[f]);u.lineEnd(),u.areaEnd()}y&&(g[s]=+e(h,s,c),v[s]=+n(h,s,c),u.point(t?+t(h,s,c):g[s],r?+r(h,s,c):v[s]))}if(d)return u=null,d+""||null}function arealine(){return Or().defined(i).curve(o).context(a)}return area.x=function(n){return arguments.length?(e="function"==typeof n?n:vr(+n),t=null,area):e},area.x0=function(t){return arguments.length?(e="function"==typeof t?t:vr(+t),area):e},area.x1=function(e){return arguments.length?(t=null==e?null:"function"==typeof e?e:vr(+e),area):t},area.y=function(e){return arguments.length?(n="function"==typeof e?e:vr(+e),r=null,area):n},area.y0=function(e){return arguments.length?(n="function"==typeof e?e:vr(+e),area):n},area.y1=function(e){return arguments.length?(r=null==e?null:"function"==typeof e?e:vr(+e),area):r},area.lineX0=area.lineY0=function(){return arealine().x(e).y(n)},area.lineY1=function(){return arealine().x(e).y(r)},area.lineX1=function(){return arealine().x(t).y(n)},area.defined=function(e){return arguments.length?(i="function"==typeof e?e:vr(!!e),area):i},area.curve=function(e){return arguments.length?(o=e,null!=a&&(u=o(a)),area):o},area.context=function(e){return arguments.length?(null==e?a=u=null:u=o(a=e),area):a},area},Fr=function(e,t){return te?1:t>=e?0:NaN},Nr=function(e){return e};curveRadial(Mr);function Radial(e){this._curve=e}function curveRadial(e){function radial(t){return new Radial(e(t))}return radial._curve=e,radial}Radial.prototype={areaStart:function areaStart(){this._curve.areaStart()},areaEnd:function areaEnd(){this._curve.areaEnd()},lineStart:function lineStart(){this._curve.lineStart()},lineEnd:function lineEnd(){this._curve.lineEnd()},point:function point(e,t){this._curve.point(t*Math.sin(e),t*-Math.cos(e))}};var jr=Array.prototype.slice;var Ir={draw:function draw(e,t){var n=Math.sqrt(t/Pr);e.moveTo(n,0),e.arc(0,0,n,0,Er)}},Dr={draw:function draw(e,t){var n=Math.sqrt(t/5)/2;e.moveTo(-3*n,-n),e.lineTo(-n,-n),e.lineTo(-n,-3*n),e.lineTo(n,-3*n),e.lineTo(n,-n),e.lineTo(3*n,-n),e.lineTo(3*n,n),e.lineTo(n,n),e.lineTo(n,3*n),e.lineTo(-n,3*n),e.lineTo(-n,n),e.lineTo(-3*n,n),e.closePath()}},Lr=Math.sqrt(1/3),Rr=2*Lr,Br={draw:function draw(e,t){var n=Math.sqrt(t/Rr),r=n*Lr;e.moveTo(0,-n),e.lineTo(r,0),e.lineTo(0,n),e.lineTo(-r,0),e.closePath()}},zr=Math.sin(Pr/10)/Math.sin(7*Pr/10),Hr=Math.sin(Er/10)*zr,Vr=-Math.cos(Er/10)*zr,Ur={draw:function draw(e,t){var n=Math.sqrt(.8908130915292852*t),r=Hr*n,i=Vr*n;e.moveTo(0,-n),e.lineTo(r,i);for(var a=1;a<5;++a){var o=Er*a/5,u=Math.cos(o),c=Math.sin(o);e.lineTo(c*n,-u*n),e.lineTo(u*r-c*i,c*r+u*i)}e.closePath()}},Wr={draw:function draw(e,t){var n=Math.sqrt(t),r=-n/2;e.rect(r,r,n,n)}},qr=Math.sqrt(3),Gr={draw:function draw(e,t){var n=-Math.sqrt(t/(3*qr));e.moveTo(0,2*n),e.lineTo(-qr*n,-n),e.lineTo(qr*n,-n),e.closePath()}},Yr=Math.sqrt(3)/2,Xr=1/Math.sqrt(12),Kr=3*(Xr/2+1),$r={draw:function draw(e,t){var n=Math.sqrt(t/Kr),r=n/2,i=n*Xr,a=r,o=n*Xr+n,u=-a,c=o;e.moveTo(r,i),e.lineTo(a,o),e.lineTo(u,c),e.lineTo(-.5*r-Yr*i,Yr*r+-.5*i),e.lineTo(-.5*a-Yr*o,Yr*a+-.5*o),e.lineTo(-.5*u-Yr*c,Yr*u+-.5*c),e.lineTo(-.5*r+Yr*i,-.5*i-Yr*r),e.lineTo(-.5*a+Yr*o,-.5*o-Yr*a),e.lineTo(-.5*u+Yr*c,-.5*c-Yr*u),e.closePath()}},Qr=function(){};function _point(e,t,n){e._context.bezierCurveTo((2*e._x0+e._x1)/3,(2*e._y0+e._y1)/3,(e._x0+2*e._x1)/3,(e._y0+2*e._y1)/3,(e._x0+4*e._x1+t)/6,(e._y0+4*e._y1+n)/6)}function Basis(e){this._context=e}Basis.prototype={areaStart:function areaStart(){this._line=0},areaEnd:function areaEnd(){this._line=NaN},lineStart:function lineStart(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function lineEnd(){switch(this._point){case 3:_point(this,this._x1,this._y1);case 2:this._context.lineTo(this._x1,this._y1)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function point(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;break;case 2:this._point=3,this._context.lineTo((5*this._x0+this._x1)/6,(5*this._y0+this._y1)/6);default:_point(this,e,t)}this._x0=this._x1,this._x1=e,this._y0=this._y1,this._y1=t}};function BasisClosed(e){this._context=e}BasisClosed.prototype={areaStart:Qr,areaEnd:Qr,lineStart:function lineStart(){this._x0=this._x1=this._x2=this._x3=this._x4=this._y0=this._y1=this._y2=this._y3=this._y4=NaN,this._point=0},lineEnd:function lineEnd(){switch(this._point){case 1:this._context.moveTo(this._x2,this._y2),this._context.closePath();break;case 2:this._context.moveTo((this._x2+2*this._x3)/3,(this._y2+2*this._y3)/3),this._context.lineTo((this._x3+2*this._x2)/3,(this._y3+2*this._y2)/3),this._context.closePath();break;case 3:this.point(this._x2,this._y2),this.point(this._x3,this._y3),this.point(this._x4,this._y4)}},point:function point(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._x2=e,this._y2=t;break;case 1:this._point=2,this._x3=e,this._y3=t;break;case 2:this._point=3,this._x4=e,this._y4=t,this._context.moveTo((this._x0+4*this._x1+e)/6,(this._y0+4*this._y1+t)/6);break;default:_point(this,e,t)}this._x0=this._x1,this._x1=e,this._y0=this._y1,this._y1=t}};function BasisOpen(e){this._context=e}BasisOpen.prototype={areaStart:function areaStart(){this._line=0},areaEnd:function areaEnd(){this._line=NaN},lineStart:function lineStart(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function lineEnd(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function point(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3;var n=(this._x0+4*this._x1+e)/6,r=(this._y0+4*this._y1+t)/6;this._line?this._context.lineTo(n,r):this._context.moveTo(n,r);break;case 3:this._point=4;default:_point(this,e,t)}this._x0=this._x1,this._x1=e,this._y0=this._y1,this._y1=t}};function Bundle(e,t){this._basis=new Basis(e),this._beta=t}Bundle.prototype={lineStart:function lineStart(){this._x=[],this._y=[],this._basis.lineStart()},lineEnd:function lineEnd(){var e=this._x,t=this._y,n=e.length-1;if(n>0)for(var r,i=e[0],a=t[0],o=e[n]-i,u=t[n]-a,c=-1;++c<=n;)r=c/n,this._basis.point(this._beta*e[c]+(1-this._beta)*(i+r*o),this._beta*t[c]+(1-this._beta)*(a+r*u));this._x=this._y=null,this._basis.lineEnd()},point:function point(e,t){this._x.push(+e),this._y.push(+t)}};(function custom(e){function bundle(t){return 1===e?new Basis(t):new Bundle(t,e)}return bundle.beta=function(e){return custom(+e)},bundle})(.85);function cardinal_point(e,t,n){e._context.bezierCurveTo(e._x1+e._k*(e._x2-e._x0),e._y1+e._k*(e._y2-e._y0),e._x2+e._k*(e._x1-t),e._y2+e._k*(e._y1-n),e._x2,e._y2)}function Cardinal(e,t){this._context=e,this._k=(1-t)/6}Cardinal.prototype={areaStart:function areaStart(){this._line=0},areaEnd:function areaEnd(){this._line=NaN},lineStart:function lineStart(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},lineEnd:function lineEnd(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:cardinal_point(this,this._x1,this._y1)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function point(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2,this._x1=e,this._y1=t;break;case 2:this._point=3;default:cardinal_point(this,e,t)}this._x0=this._x1,this._x1=this._x2,this._x2=e,this._y0=this._y1,this._y1=this._y2,this._y2=t}};(function custom(e){function cardinal(t){return new Cardinal(t,e)}return cardinal.tension=function(e){return custom(+e)},cardinal})(0);function CardinalClosed(e,t){this._context=e,this._k=(1-t)/6}CardinalClosed.prototype={areaStart:Qr,areaEnd:Qr,lineStart:function lineStart(){this._x0=this._x1=this._x2=this._x3=this._x4=this._x5=this._y0=this._y1=this._y2=this._y3=this._y4=this._y5=NaN,this._point=0},lineEnd:function lineEnd(){switch(this._point){case 1:this._context.moveTo(this._x3,this._y3),this._context.closePath();break;case 2:this._context.lineTo(this._x3,this._y3),this._context.closePath();break;case 3:this.point(this._x3,this._y3),this.point(this._x4,this._y4),this.point(this._x5,this._y5)}},point:function point(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._x3=e,this._y3=t;break;case 1:this._point=2,this._context.moveTo(this._x4=e,this._y4=t);break;case 2:this._point=3,this._x5=e,this._y5=t;break;default:cardinal_point(this,e,t)}this._x0=this._x1,this._x1=this._x2,this._x2=e,this._y0=this._y1,this._y1=this._y2,this._y2=t}};(function custom(e){function cardinal(t){return new CardinalClosed(t,e)}return cardinal.tension=function(e){return custom(+e)},cardinal})(0);function CardinalOpen(e,t){this._context=e,this._k=(1-t)/6}CardinalOpen.prototype={areaStart:function areaStart(){this._line=0},areaEnd:function areaEnd(){this._line=NaN},lineStart:function lineStart(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},lineEnd:function lineEnd(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function point(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3,this._line?this._context.lineTo(this._x2,this._y2):this._context.moveTo(this._x2,this._y2);break;case 3:this._point=4;default:cardinal_point(this,e,t)}this._x0=this._x1,this._x1=this._x2,this._x2=e,this._y0=this._y1,this._y1=this._y2,this._y2=t}};(function custom(e){function cardinal(t){return new CardinalOpen(t,e)}return cardinal.tension=function(e){return custom(+e)},cardinal})(0);function catmullRom_point(e,t,n){var r=e._x1,i=e._y1,a=e._x2,o=e._y2;if(e._l01_a>Sr){var u=2*e._l01_2a+3*e._l01_a*e._l12_a+e._l12_2a,c=3*e._l01_a*(e._l01_a+e._l12_a);r=(r*u-e._x0*e._l12_2a+e._x2*e._l01_2a)/c,i=(i*u-e._y0*e._l12_2a+e._y2*e._l01_2a)/c}if(e._l23_a>Sr){var s=2*e._l23_2a+3*e._l23_a*e._l12_a+e._l12_2a,l=3*e._l23_a*(e._l23_a+e._l12_a);a=(a*s+e._x1*e._l23_2a-t*e._l12_2a)/l,o=(o*s+e._y1*e._l23_2a-n*e._l12_2a)/l}e._context.bezierCurveTo(r,i,a,o,e._x2,e._y2)}function CatmullRom(e,t){this._context=e,this._alpha=t}CatmullRom.prototype={areaStart:function areaStart(){this._line=0},areaEnd:function areaEnd(){this._line=NaN},lineStart:function lineStart(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function lineEnd(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:this.point(this._x2,this._y2)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function point(e,t){if(e=+e,t=+t,this._point){var n=this._x2-e,r=this._y2-t;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(n*n+r*r,this._alpha))}switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;break;case 2:this._point=3;default:catmullRom_point(this,e,t)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=e,this._y0=this._y1,this._y1=this._y2,this._y2=t}};var Zr=function custom(e){function catmullRom(t){return e?new CatmullRom(t,e):new Cardinal(t,0)}return catmullRom.alpha=function(e){return custom(+e)},catmullRom}(.5);function CatmullRomClosed(e,t){this._context=e,this._alpha=t}CatmullRomClosed.prototype={areaStart:Qr,areaEnd:Qr,lineStart:function lineStart(){this._x0=this._x1=this._x2=this._x3=this._x4=this._x5=this._y0=this._y1=this._y2=this._y3=this._y4=this._y5=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function lineEnd(){switch(this._point){case 1:this._context.moveTo(this._x3,this._y3),this._context.closePath();break;case 2:this._context.lineTo(this._x3,this._y3),this._context.closePath();break;case 3:this.point(this._x3,this._y3),this.point(this._x4,this._y4),this.point(this._x5,this._y5)}},point:function point(e,t){if(e=+e,t=+t,this._point){var n=this._x2-e,r=this._y2-t;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(n*n+r*r,this._alpha))}switch(this._point){case 0:this._point=1,this._x3=e,this._y3=t;break;case 1:this._point=2,this._context.moveTo(this._x4=e,this._y4=t);break;case 2:this._point=3,this._x5=e,this._y5=t;break;default:catmullRom_point(this,e,t)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=e,this._y0=this._y1,this._y1=this._y2,this._y2=t}};(function custom(e){function catmullRom(t){return e?new CatmullRomClosed(t,e):new CardinalClosed(t,0)}return catmullRom.alpha=function(e){return custom(+e)},catmullRom})(.5);function CatmullRomOpen(e,t){this._context=e,this._alpha=t}CatmullRomOpen.prototype={areaStart:function areaStart(){this._line=0},areaEnd:function areaEnd(){this._line=NaN},lineStart:function lineStart(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function lineEnd(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function point(e,t){if(e=+e,t=+t,this._point){var n=this._x2-e,r=this._y2-t;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(n*n+r*r,this._alpha))}switch(this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3,this._line?this._context.lineTo(this._x2,this._y2):this._context.moveTo(this._x2,this._y2);break;case 3:this._point=4;default:catmullRom_point(this,e,t)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=e,this._y0=this._y1,this._y1=this._y2,this._y2=t}};(function custom(e){function catmullRom(t){return e?new CatmullRomOpen(t,e):new CardinalOpen(t,0)}return catmullRom.alpha=function(e){return custom(+e)},catmullRom})(.5);function LinearClosed(e){this._context=e}LinearClosed.prototype={areaStart:Qr,areaEnd:Qr,lineStart:function lineStart(){this._point=0},lineEnd:function lineEnd(){this._point&&this._context.closePath()},point:function point(e,t){e=+e,t=+t,this._point?this._context.lineTo(e,t):(this._point=1,this._context.moveTo(e,t))}};function monotone_sign(e){return e<0?-1:1}function slope3(e,t,n){var r=e._x1-e._x0,i=t-e._x1,a=(e._y1-e._y0)/(r||i<0&&-0),o=(n-e._y1)/(i||r<0&&-0),u=(a*i+o*r)/(r+i);return(monotone_sign(a)+monotone_sign(o))*Math.min(Math.abs(a),Math.abs(o),.5*Math.abs(u))||0}function slope2(e,t){var n=e._x1-e._x0;return n?(3*(e._y1-e._y0)/n-t)/2:t}function monotone_point(e,t,n){var r=e._x0,i=e._y0,a=e._x1,o=e._y1,u=(a-r)/3;e._context.bezierCurveTo(r+u,i+u*t,a-u,o-u*n,a,o)}function MonotoneX(e){this._context=e}function MonotoneY(e){this._context=new ReflectContext(e)}function ReflectContext(e){this._context=e}function Natural(e){this._context=e}function controlPoints(e){var t,n,r=e.length-1,i=new Array(r),a=new Array(r),o=new Array(r);for(i[0]=0,a[0]=2,o[0]=e[0]+2*e[1],t=1;t=0;--t)i[t]=(o[t]-i[t+1])/a[t];for(a[r-1]=(e[r]+i[r-1])/2,t=0;t=0&&(this._t=1-this._t,this._line=1-this._line)},point:function point(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;default:if(this._t<=0)this._context.lineTo(this._x,t),this._context.lineTo(e,t);else{var n=this._x*(1-this._t)+e*this._t;this._context.lineTo(n,this._y),this._context.lineTo(n,t)}}this._x=e,this._y=t}};var Jr=function(e){return new Step(e,.5)};function stepBefore(e){return new Step(e,0)}function stepAfter(e){return new Step(e,1)}var ei=function(e,t){if((i=e.length)>1)for(var n,r,i,a=1,o=e[t[0]],u=o.length;a=0;)n[t]=t;return n};function stackValue(e,t){return e[t]}var ni=function(e){var t=e.map(ascending_sum);return ti(e).sort(function(e,n){return t[e]-t[n]})};function ascending_sum(e){for(var t,n=0,r=-1,i=e.length;++r0)){if(a/=h,h<0){if(a0){if(a>f)return;a>l&&(l=a)}if(a=r-c,h||!(a<0)){if(a/=h,h<0){if(a>f)return;a>l&&(l=a)}else if(h>0){if(a0)){if(a/=d,d<0){if(a0){if(a>f)return;a>l&&(l=a)}if(a=i-s,d||!(a<0)){if(a/=d,d<0){if(a>f)return;a>l&&(l=a)}else if(d>0){if(a0||f<1)||(l>0&&(e[0]=[c+l*h,s+l*d]),f<1&&(e[1]=[c+f*h,s+f*d]),!0)}}}}}function connectEdge(e,t,n,r,i){var a=e[1];if(a)return!0;var o,u,c=e[0],s=e.left,l=e.right,f=s[0],h=s[1],d=l[0],p=l[1],y=(f+d)/2,g=(h+p)/2;if(p===h){if(y=r)return;if(f>d){if(c){if(c[1]>=i)return}else c=[y,n];a=[y,i]}else{if(c){if(c[1]1)if(f>d){if(c){if(c[1]>=i)return}else c=[(n-u)/o,n];a=[(i-u)/o,i]}else{if(c){if(c[1]=r)return}else c=[t,o*t+u];a=[r,o*r+u]}else{if(c){if(c[0]=-Ai)){var d=c*c+s*s,p=l*l+f*f,y=(f*d-s*p)/h,g=(c*p-l*d)/h,v=_i.pop()||new function Circle(){RedBlackNode(this),this.x=this.y=this.arc=this.site=this.cy=null};v.arc=e,v.site=i,v.x=y+o,v.y=(v.cy=g+u)+Math.sqrt(y*y+g*g),e.circle=v;for(var m=null,b=Ci._;b;)if(v.yPi)u=u.L;else{if(!((i=a-rightBreakPoint(u,o))>Pi)){r>-Pi?(t=u.P,n=u):i>-Pi?(t=u,n=u.N):t=n=u;break}if(!u.R){t=u;break}u=u.R}!function createCell(e){return ki[e.index]={site:e,halfedges:[]}}(e);var c=createBeach(e);if(wi.insert(t,c),t||n){if(t===n)return detachCircle(t),n=createBeach(t.site),wi.insert(c,n),c.edge=n.edge=createEdge(t.site,c.site),attachCircle(t),void attachCircle(n);if(n){detachCircle(t),detachCircle(n);var s=t.site,l=s[0],f=s[1],h=e[0]-l,d=e[1]-f,p=n.site,y=p[0]-l,g=p[1]-f,v=2*(h*g-d*y),m=h*h+d*d,b=y*y+g*g,_=[(g*m-d*b)/v+l,(h*b-y*m)/v+f];setEdgeEnd(n.edge,s,p,_),c.edge=createEdge(s,e,null,_),n.edge=createEdge(e,p,null,_),attachCircle(t),attachCircle(n)}else c.edge=createEdge(t.site,c.site)}}function leftBreakPoint(e,t){var n=e.site,r=n[0],i=n[1],a=i-t;if(!a)return r;var o=e.P;if(!o)return-1/0;var u=(n=o.site)[0],c=n[1],s=c-t;if(!s)return u;var l=u-r,f=1/a-1/s,h=l/s;return f?(-h+Math.sqrt(h*h-2*f*(l*l/(-2*s)-c+s/2+i-a/2)))/f+r:(r+u)/2}function rightBreakPoint(e,t){var n=e.N;if(n)return leftBreakPoint(n,t);var r=e.site;return r[1]===t?r[0]:1/0}var wi,ki,Ci,Si,Pi=1e-6,Ai=1e-12;function triangleArea(e,t,n){return(e[0]-n[0])*(t[1]-e[1])-(e[0]-t[0])*(n[1]-e[1])}function lexicographic(e,t){return t[1]-e[1]||t[0]-e[0]}function Diagram(e,t){var n,r,i,a=e.sort(lexicographic).pop();for(Si=[],ki=new Array(e.length),wi=new mi,Ci=new mi;;)if(i=bi,a&&(!i||a[1]Pi||Math.abs(i[0][1]-i[1][1])>Pi)||delete Si[a]}(o,u,c,s),function clipCells(e,t,n,r){var i,a,o,u,c,s,l,f,h,d,p,y,g=ki.length,v=!0;for(i=0;iPi||Math.abs(y-h)>Pi)&&(c.splice(u,0,Si.push(createBorderEdge(o,d,Math.abs(p-e)Pi?[e,Math.abs(f-e)Pi?[Math.abs(h-r)Pi?[n,Math.abs(f-n)Pi?[Math.abs(h-t)=u)return null;var c=e-i.site[0],s=t-i.site[1],l=c*c+s*s;do{i=a.cells[r=o],o=null,i.halfedges.forEach(function(n){var r=a.edges[n],u=r.left;if(u!==i.site&&u||(u=r.right)){var c=e-u[0],s=t-u[1],f=c*c+s*s;ft?0===i?i:"left"===n?i-1:i:i===e.length-1?i:"left"===n?i:i+1},Gi=(requestAnimationFrame,cancelAnimationFrame,function getQualifiedClassName(e,t,n){return[n+"-"+(e=e.replace(/^\.*/,"")),n+"-"+e+"-"+t]}),Yi=function defaultValue(e,t){return void 0===e||"object"===(void 0===e?"undefined":Ii(e))&&!e?t:e},Xi=function objectIterator(e,t){for(var n in e)Object.hasOwnProperty.call(e,n)&&t(n,e)},Ki=function(){function Voronoi(e){_classCallCheck(this,Voronoi),this._voronoi=Oi().x(function(e){return e.x}).y(function(e){return e.y}),this.data(e)}return ji(Voronoi,[{key:"data",value:function data(e){return e&&(this._voronoiFn=this._voronoi(e)),this}},{key:"find",value:function find(e,t,n){return this._voronoiFn.find(e,t,n)}}]),Voronoi}(),$i=function(){function Store(e){_classCallCheck(this,Store),this.model=Fi.a.create(e),this._listeners=[]}return ji(Store,[{key:"serialize",value:function serialize(){return this.model.serialize()}},{key:"commit",value:function commit(e,t){this.model.prop(e,t)}},{key:"registerChangeListener",value:function registerChangeListener(e,t,n){var r=e;Array.isArray(e)||(r=[e]);var i=this.model.next(r,t,n);return this._listeners.push(i),this}},{key:"registerImmediateListener",value:function registerImmediateListener(e,t,n){var r=e;Array.isArray(e)||(r=[e]);var i=this.model.on(r,t,n);return this._listeners.push(i),this}},{key:"get",value:function get(e){return this.model.prop(e)}},{key:"computed",value:function computed(e,t){return this.model.calculatedProp(e,t)}},{key:"unsubscribeAll",value:function unsubscribeAll(){this._listeners.forEach(function(e){return e()})}}]),Store}(),Qi=function intSanitizer(e){var t=e.toString().match(/(\d+)(px)*/g);return t?parseInt(t[0],10):null},Zi=function transactor(e,t,n){var r=void 0,i=n&&n instanceof Fi.a?n:Fi.a.create({}),a=function _loop(n){({}).hasOwnProperty.call(t,n)&&(r=t[n],i.prop(n)||i.append(_defineProperty({},n,r.value)),e[n]=function(t,r,a){return function(){for(var o=arguments.length,u=Array(o),c=0;c=0;n--)if(e[n]!==t[n])return!1;return!0}(t,n):"Object"===e?Object.is(t,n):t===n}},ta={INTERFACE_IMPL:"Method not implemented"},na=function mergeRecursive(e,t){for(var n in t)Di(e[n])&&Di(t[n])?mergeRecursive(e[n],t[n]):t[n]instanceof Object&&t[n].constructor===Object?(e[n]={},mergeRecursive(e[n],t[n])):e[n]=t[n];return e},ra=function interpolator(){return Pe},ia=function numberInterpolator(){return ge},aa=function piecewiseInterpolator(){return piecewise_piecewise};var oa=function rgbToHsv(e,t,n){var r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:1;e=+e,t=+t,n=+n,r=+r,e/=255,t/=255,n/=255;var i=Math.max(e,t,n),a=Math.min(e,t,n),o=void 0,u=void 0,c=(i+a)/2;if(i===a)o=u=0;else{var s=i-a;switch(u=c>.5?s/(2-i-a):s/(i+a),i){case e:o=(t-n)/s+(t=i[0]&&r<=i[1]})},{saveChild:!1,mode:n})},sa=function getDataModelFromIdentifiers(e,t,n){var r=void 0;if(t instanceof Array){var i=e.getFieldsConfig(),a=t.slice(1,t.length);if(t instanceof Function)r=t(e,{},!1);else if(t instanceof Array&&t[0].length){var o=t[0].filter(function(e){return e in i});r=e.select(function(e){var t=!0;return o.forEach(function(n,r){var i=e[n].valueOf(),o=a.findIndex(function(e){return e[r]===i});t=t&&-1!==o}),t},{saveChild:!1,mode:n})}}else r=ca(e,t,n);return r},la=function registerListeners(e,t){var n=t(e);for(var r in n)if({}.hasOwnProperty.call(n,r)){var i=n[r],a=i.type,o=i.props,u=i.listener;e.store()[a](o,u)}},fa=function isValidValue(e){return!isNaN(e)&&e!==-1/0&&e!==1/0},ha=function getObjProp(e){for(var t=arguments.length,n=Array(t>1?t-1:0),r=1;r1)for(var n,r,i,a,o,u,c=0,s=e[t[0]].length;c=0?(r[0]=a,r[1]=a+=i):i<0?(r[1]=o,r[0]=o+=i):r[0]=a}),_defineProperty(Mi,"none",ei),_defineProperty(Mi,"expand",function(e,t){if((r=e.length)>0){for(var n,r,i,a=0,o=e[0].length;a0&&(r=(n=e[t[0]]).length)>0){for(var n,r,i,a=0,o=1;o0&&(d+=f);for(null!=t?p.sort(function(e,n){return t(y[e],y[n])}):null!=n&&p.sort(function(e,t){return n(o[e],o[t])}),u=0,s=d?(v-h*b)/d:0;u0?f*s:0)+b,y[c]={data:o[c],index:u,value:f,startAngle:g,endAngle:l,padAngle:m};return y}return pie.value=function(t){return arguments.length?(e="function"==typeof t?t:vr(+t),pie):e},pie.sortValues=function(e){return arguments.length?(t=e,n=null,pie):t},pie.sort=function(e){return arguments.length?(n=e,t=null,pie):n},pie.startAngle=function(e){return arguments.length?(r="function"==typeof e?e:vr(+e),pie):r},pie.endAngle=function(e){return arguments.length?(i="function"==typeof e?e:vr(+e),pie):i},pie.padAngle=function(e){return arguments.length?(a="function"==typeof e?e:vr(+e),pie):a},pie},arc:function(){var e=arcInnerRadius,t=arcOuterRadius,n=vr(0),r=null,i=arcStartAngle,a=arcEndAngle,o=arcPadAngle,u=null;function arc(){var c,s,l=+e.apply(this,arguments),f=+t.apply(this,arguments),h=i.apply(this,arguments)-Ar,d=a.apply(this,arguments)-Ar,p=mr(d-h),y=d>h;if(u||(u=c=gr()),fSr)if(p>Er-Sr)u.moveTo(f*_r(h),f*kr(h)),u.arc(0,0,f,h,d,!y),l>Sr&&(u.moveTo(l*_r(d),l*kr(d)),u.arc(0,0,l,d,h,y));else{var g,v,m=h,b=d,_=h,x=d,w=p,k=p,C=o.apply(this,arguments)/2,S=C>Sr&&(r?+r.apply(this,arguments):Cr(l*l+f*f)),P=wr(mr(f-l)/2,+n.apply(this,arguments)),A=P,E=P;if(S>Sr){var M=asin(S/l*kr(C)),O=asin(S/f*kr(C));(w-=2*M)>Sr?(_+=M*=y?1:-1,x-=M):(w=0,_=x=(h+d)/2),(k-=2*O)>Sr?(m+=O*=y?1:-1,b-=O):(k=0,m=b=(h+d)/2)}var T=f*_r(m),F=f*kr(m),N=l*_r(x),j=l*kr(x);if(P>Sr){var I=f*_r(b),D=f*kr(b),L=l*_r(_),R=l*kr(_);if(pSr?function intersect(e,t,n,r,i,a,o,u){var c=n-e,s=r-t,l=o-i,f=u-a,h=(l*(t-a)-f*(e-i))/(f*c-l*s);return[e+h*c,t+h*s]}(T,F,L,R,I,D,N,j):[N,j],z=T-B[0],H=F-B[1],V=I-B[0],U=D-B[1],W=1/kr(function acos(e){return e>1?0:e<-1?Pr:Math.acos(e)}((z*V+H*U)/(Cr(z*z+H*H)*Cr(V*V+U*U)))/2),q=Cr(B[0]*B[0]+B[1]*B[1]);A=wr(P,(l-q)/(W-1)),E=wr(P,(f-q)/(W+1))}}k>Sr?E>Sr?(g=cornerTangents(L,R,T,F,f,E,y),v=cornerTangents(I,D,N,j,f,E,y),u.moveTo(g.cx+g.x01,g.cy+g.y01),ESr&&w>Sr?A>Sr?(g=cornerTangents(N,j,I,D,l,-A,y),v=cornerTangents(T,F,L,R,l,-A,y),u.lineTo(g.cx+g.x01,g.cy+g.y01),A=0&&"xmlns"!==(t=e.slice(0,n))&&(e=e.slice(n+1)),ka.hasOwnProperty(t)?{space:ka[t],local:e}:e};var Sa=function(e){var t=Ca(e);return(t.local?function creatorFixed(e){return function(){return this.ownerDocument.createElementNS(e.space,e.local)}}:function creatorInherit(e){return function(){var t=this.ownerDocument,n=this.namespaceURI;return n===wa&&t.documentElement.namespaceURI===wa?t.createElement(e):t.createElementNS(n,e)}})(t)};function selector_none(){}var Pa=function(e){return null==e?selector_none:function(){return this.querySelector(e)}};function selectorAll_empty(){return[]}var Aa=function(e){return null==e?selectorAll_empty:function(){return this.querySelectorAll(e)}},Ea=function matcher(e){return function(){return this.matches(e)}};if("undefined"!=typeof document){var Ma=document.documentElement;if(!Ma.matches){var Oa=Ma.webkitMatchesSelector||Ma.msMatchesSelector||Ma.mozMatchesSelector||Ma.oMatchesSelector;Ea=function matcher(e){return function(){return Oa.call(this,e)}}}}var Ta=Ea,Fa=function(e){return new Array(e.length)};function EnterNode(e,t){this.ownerDocument=e.ownerDocument,this.namespaceURI=e.namespaceURI,this._next=null,this._parent=e,this.__data__=t}EnterNode.prototype={constructor:EnterNode,appendChild:function appendChild(e){return this._parent.insertBefore(e,this._next)},insertBefore:function insertBefore(e,t){return this._parent.insertBefore(e,t)},querySelector:function querySelector(e){return this._parent.querySelector(e)},querySelectorAll:function querySelectorAll(e){return this._parent.querySelectorAll(e)}};var Na="$";function bindIndex(e,t,n,r,i,a){for(var o,u=0,c=t.length,s=a.length;ut?1:e>=t?0:NaN}var ja=function(e){return e.ownerDocument&&e.ownerDocument.defaultView||e.document&&e||e.defaultView};function styleValue(e,t){return e.style.getPropertyValue(t)||ja(e).getComputedStyle(e,null).getPropertyValue(t)}function classArray(e){return e.trim().split(/^|\s+/)}function classList(e){return e.classList||new ClassList(e)}function ClassList(e){this._node=e,this._names=classArray(e.getAttribute("class")||"")}function classedAdd(e,t){for(var n=classList(e),r=-1,i=t.length;++r=0&&(this._names.splice(t,1),this._node.setAttribute("class",this._names.join(" ")))},contains:function contains(e){return this._names.indexOf(e)>=0}};function textRemove(){this.textContent=""}function htmlRemove(){this.innerHTML=""}function raise_raise(){this.nextSibling&&this.parentNode.appendChild(this)}function lower(){this.previousSibling&&this.parentNode.insertBefore(this,this.parentNode.firstChild)}function constantNull(){return null}function remove_remove(){var e=this.parentNode;e&&e.removeChild(this)}function selection_cloneShallow(){return this.parentNode.insertBefore(this.cloneNode(!1),this.nextSibling)}function selection_cloneDeep(){return this.parentNode.insertBefore(this.cloneNode(!0),this.nextSibling)}var Ia={},Da=null;"undefined"!=typeof document&&("onmouseenter"in document.documentElement||(Ia={mouseenter:"mouseover",mouseleave:"mouseout"}));function filterContextListener(e,t,n){return e=contextListener(e,t,n),function(t){var n=t.relatedTarget;n&&(n===this||8&n.compareDocumentPosition(this))||e.call(this,t)}}function contextListener(e,t,n){return function(r){var i=Da;Da=r;try{e.call(this,this.__data__,t,n)}finally{Da=i}}}function onRemove(e){return function(){var t=this.__on;if(t){for(var n,r=0,i=-1,a=t.length;r=_&&(_=b+1);!(m=g[_])&&++_=0;)(r=i[a])&&(o&&o!==r.nextSibling&&o.parentNode.insertBefore(r,o),o=r);return this},sort:function(e){function compareNode(t,n){return t&&n?e(t.__data__,n.__data__):!t-!n}e||(e=sort_ascending);for(var t=this._groups,n=t.length,r=new Array(n),i=0;i1?this.each((null==t?function styleRemove(e){return function(){this.style.removeProperty(e)}}:"function"==typeof t?function styleFunction(e,t,n){return function(){var r=t.apply(this,arguments);null==r?this.style.removeProperty(e):this.style.setProperty(e,r,n)}}:function styleConstant(e,t,n){return function(){this.style.setProperty(e,t,n)}})(e,t,null==n?"":n)):styleValue(this.node(),e)},property:function(e,t){return arguments.length>1?this.each((null==t?function propertyRemove(e){return function(){delete this[e]}}:"function"==typeof t?function propertyFunction(e,t){return function(){var n=t.apply(this,arguments);null==n?delete this[e]:this[e]=n}}:function propertyConstant(e,t){return function(){this[e]=t}})(e,t)):this.node()[e]},classed:function(e,t){var n=classArray(e+"");if(arguments.length<2){for(var r=classList(this.node()),i=-1,a=n.length;++i=0&&(t=e.slice(n+1),e=e.slice(0,n)),{type:e,name:t}})}(e+""),o=a.length;if(!(arguments.length<2)){for(u=t?onAdd:onRemove,null==n&&(n=!1),r=0;r=0&&(n=e.slice(r+1),e=e.slice(0,r)),e&&!t.hasOwnProperty(e))throw new Error("unknown type: "+e);return{type:e,name:n}})}(e+"",r),a=-1,o=i.length;if(!(arguments.length<2)){if(null!=t&&"function"!=typeof t)throw new Error("invalid callback: "+t);for(;++a0)for(var n,r,i=new Array(n),a=0;af}c.mouse("drag")}function mouseupped(){Ba(Da.view).on("mousemove.drag mouseup.drag",null),function yesdrag(e,t){var n=e.document.documentElement,r=Ba(e).on("dragstart.drag",null);t&&(r.on("click.drag",Ya,!0),setTimeout(function(){r.on("click.drag",null)},0)),"onselectstart"in n?r.on("selectstart.drag",null):(n.style.MozUserSelect=n.__noselect,delete n.__noselect)}(Da.view,n),Ya(),c.mouse("end")}function touchstarted(){if(i.apply(this,arguments)){var e,t,n=Da.changedTouches,r=a.apply(this,arguments),o=n.length;for(e=0;e=0&&t._call.call(null,e),t=t._next;--eo}()}finally{eo=0,function nap(){var e,t,n=$a,r=1/0;for(;n;)n._call?(r>n._time&&(r=n._time),e=n,n=n._next):(t=n._next,n._next=null,n=e?e._next=t:$a=t);Qa=e,sleep(r)}(),ao=0}}function poke(){var e=uo.now(),t=e-io;t>ro&&(oo-=t,io=e)}function sleep(e){eo||(to&&(to=clearTimeout(to)),e-ao>24?(e<1/0&&(to=setTimeout(wake,e-uo.now()-oo)),no&&(no=clearInterval(no))):(no||(io=uo.now(),no=setInterval(poke,ro)),eo=1,co(wake)))}Timer.prototype=timer.prototype={constructor:Timer,restart:function restart(e,t,n){if("function"!=typeof e)throw new TypeError("callback is not a function");n=(null==n?now():+n)+(null==t?0:+t),this._next||Qa===this||(Qa?Qa._next=this:$a=this,Qa=this),this._call=e,this._time=n,sleep()},stop:function stop(){this._call&&(this._call=null,this._time=1/0,sleep())}};var so=function(e,t,n){var r=new Timer;return t=null==t?0:+t,r.restart(function(n){r.stop(),e(n+t)},t,n),r},lo=Ga("start","end","interrupt"),fo=[],ho=0,po=1,yo=2,go=3,vo=4,mo=5,bo=6,_o=function(e,t,n,r,i,a){var o=e.__transition;if(o){if(n in o)return}else e.__transition={};!function schedule_create(e,t,n){var r,i=e.__transition;function start(a){var o,u,c,s;if(n.state!==po)return stop();for(o in i)if((s=i[o]).name===n.name){if(s.state===go)return so(start);s.state===vo?(s.state=bo,s.timer.stop(),s.on.call("interrupt",e,e.__data__,s.index,s.group),delete i[o]):+oho)throw new Error("too late; already scheduled");return n}function schedule_set(e,t){var n=schedule_get(e,t);if(n.state>yo)throw new Error("too late; already started");return n}function schedule_get(e,t){var n=e.__transition;if(!n||!(n=n[t]))throw new Error("transition not found");return n}function tweenValue(e,t,n){var r=e._id;return e.each(function(){var e=schedule_set(this,r);(e.value||(e.value={}))[t]=n.apply(this,arguments)}),function(e){return schedule_get(e,r).value[t]}}var xo=function(e,t){var n;return("number"==typeof t?ge:t instanceof color_color?pe:(n=color_color(t))?(t=n,pe):Ce)(e,t)};var wo=Ra.prototype.constructor;var ko=0;function Transition(e,t,n,r){this._groups=e,this._parents=t,this._name=n,this._id=r}function newId(){return++ko}var Co=Ra.prototype;Transition.prototype=function src_transition_transition(e){return Ra().transition(e)}.prototype={constructor:Transition,select:function(e){var t=this._name,n=this._id;"function"!=typeof e&&(e=Pa(e));for(var r=this._groups,i=r.length,a=new Array(i),o=0;o=0&&(e=e.slice(0,t)),!e||"start"===e})}(t)?init:schedule_set;return function(){var o=a(this,e),u=o.on;u!==r&&(i=(r=u).copy()).on(t,n),o.on=i}}(n,e,t))},attr:function(e,t){var n=Ca(e),r="transform"===n?Fe:xo;return this.attrTween(e,"function"==typeof t?(n.local?function attr_attrFunctionNS(e,t,n){var r,i,a;return function(){var o,u=n(this);if(null!=u)return(o=this.getAttributeNS(e.space,e.local))===u?null:o===r&&u===i?a:a=t(r=o,i=u);this.removeAttributeNS(e.space,e.local)}}:function attr_attrFunction(e,t,n){var r,i,a;return function(){var o,u=n(this);if(null!=u)return(o=this.getAttribute(e))===u?null:o===r&&u===i?a:a=t(r=o,i=u);this.removeAttribute(e)}})(n,r,tweenValue(this,"attr."+e,t)):null==t?(n.local?function attr_attrRemoveNS(e){return function(){this.removeAttributeNS(e.space,e.local)}}:function attr_attrRemove(e){return function(){this.removeAttribute(e)}})(n):(n.local?function attr_attrConstantNS(e,t,n){var r,i;return function(){var a=this.getAttributeNS(e.space,e.local);return a===n?null:a===r?i:i=t(r=a,n)}}:function attr_attrConstant(e,t,n){var r,i;return function(){var a=this.getAttribute(e);return a===n?null:a===r?i:i=t(r=a,n)}})(n,r,t+""))},attrTween:function(e,t){var n="attr."+e;if(arguments.length<2)return(n=this.tween(n))&&n._value;if(null==t)return this.tween(n,null);if("function"!=typeof t)throw new Error;var r=Ca(e);return this.tween(n,(r.local?function attrTweenNS(e,t){function tween(){var n=this,r=t.apply(n,arguments);return r&&function(t){n.setAttributeNS(e.space,e.local,r(t))}}return tween._value=t,tween}:function attrTween(e,t){function tween(){var n=this,r=t.apply(n,arguments);return r&&function(t){n.setAttribute(e,r(t))}}return tween._value=t,tween})(r,t))},style:function(e,t,n){var r="transform"==(e+="")?Te:xo;return null==t?this.styleTween(e,function style_styleRemove(e,t){var n,r,i;return function(){var a=styleValue(this,e),o=(this.style.removeProperty(e),styleValue(this,e));return a===o?null:a===n&&o===r?i:i=t(n=a,r=o)}}(e,r)).on("end.style."+e,function styleRemoveEnd(e){return function(){this.style.removeProperty(e)}}(e)):this.styleTween(e,"function"==typeof t?function style_styleFunction(e,t,n){var r,i,a;return function(){var o=styleValue(this,e),u=n(this);return null==u&&(this.style.removeProperty(e),u=styleValue(this,e)),o===u?null:o===r&&u===i?a:a=t(r=o,i=u)}}(e,r,tweenValue(this,"style."+e,t)):function style_styleConstant(e,t,n){var r,i;return function(){var a=styleValue(this,e);return a===n?null:a===r?i:i=t(r=a,n)}}(e,r,t+""),n)},styleTween:function(e,t,n){var r="style."+(e+="");if(arguments.length<2)return(r=this.tween(r))&&r._value;if(null==t)return this.tween(r,null);if("function"!=typeof t)throw new Error;return this.tween(r,function styleTween(e,t,n){function tween(){var r=this,i=t.apply(r,arguments);return i&&function(t){r.style.setProperty(e,i(t),n)}}return tween._value=t,tween}(e,t,null==n?"":n))},text:function(e){return this.tween("text","function"==typeof e?function text_textFunction(e){return function(){var t=e(this);this.textContent=null==t?"":t}}(tweenValue(this,"text",e)):function text_textConstant(e){return function(){this.textContent=e}}(null==e?"":e+""))},remove:function(){return this.on("end.remove",function removeFunction(e){return function(){var t=this.parentNode;for(var n in this.__transition)if(+n!==e)return;t&&t.removeChild(this)}}(this._id))},tween:function(e,t){var n=this._id;if(e+="",arguments.length<2){for(var r,i=schedule_get(this.node(),n).tween,a=0,o=i.length;ayo&&n.state4&&void 0!==arguments[4]?arguments[4]:{},a=arguments[5];(e instanceof HTMLElement||e instanceof SVGElement)&&(e=Ao(e));var o=r?r[0]:null,u=null,c=null,s=null,l=null,f=null,h=void 0;o?"#"===o?(u="id",c=r):(u="class",c="."===r[0]?r:"."+r):(c=t,h=!0),s=e.selectAll(c),h&&(s=s.filter(function(){return this.parentNode===e.node()})),l=(s=s.data(n,a)).enter().append(t||"div"),i.enter&&l.each(function(){for(var e=arguments.length,t=Array(e),n=0;nthis._data.length)for(var a=this._data.length;a0&&void 0!==arguments[0]?arguments[0]:{};this._lifeCycles=e,this._releasePromisesFromCache()}},{key:"_resetTargetPromise",value:function _resetTargetPromise(e){var t=this;setTimeout(function(){t._notifiers[e]=Xo,t._promises.set(e,t._makeNotifierPromise(e))},0)}}]),LifeCycleManager}(),Qo="drag",Zo="hover",Jo="selectiondrag",eu="click",tu="longtouch",nu="touchdrag",ru="*",iu=1,au=-1,ou=0,uu=2,cu=-2,su=function(){function defineProperties(e,t){for(var n=0;n0?(e[n]===uu&&t.entrySet[0].push(n),e[n]===iu&&t.entrySet[1].push(n)):e[n]<0&&(e[n]===cu&&t.exitSet[0].push(n),e[n]===au&&t.exitSet[1].push(n)),t.completeSet.push(n);return["entrySet","exitSet"].forEach(function(e){t[e]=t[e].map(function(e){return e.map(Number)})}),t.completeSet=t.completeSet.map(Number),t}},{key:"reset",value:function reset(e){var t=this._set;if(e)e.forEach(function(e){t[e]=ou});else{var n=this._lockedSelection;for(var r in t)r in n||(t[r]=ou)}return this._resetted=!0,this}},{key:"getEntrySet",value:function getEntrySet(){var e=this._set,t=[];for(var n in e)e[n]===iu&&t.push(n);return t}},{key:"getExistingEntrySet",value:function getExistingEntrySet(e){var t=this._set;return e.filter(function(e){return t[e]===iu||t[e]===uu})}},{key:"getExistingExitSet",value:function getExistingExitSet(e){var t=this._set;return e.filter(function(e){return t[e]===au||t[e]===cu})}},{key:"getOldEntry",value:function getOldEntry(){var e=this._set,t=[];for(var n in e)e[n]===uu&&t.push(n);return t}},{key:"getOldExit",value:function getOldExit(){var e=this._set,t=[];for(var n in e)e[n]===cu&&t.push(n);return t}},{key:"getExitSet",value:function getExitSet(){var e=this._set,t=[];for(var n in e)e[n]===au&&t.push(n);return t}},{key:"getCompleteSet",value:function getCompleteSet(){var e=this._set,t=[];for(var n in e)t.push(n);return t}},{key:"getCompleteSetCount",value:function getCompleteSetCount(){return this._completeSetCount}},{key:"resetted",value:function resetted(){return this._resetted}},{key:"toggle",value:function toggle(){var e=this._set;for(var t in e)e[t]===iu?e[t]=au:e[t]===au?e[t]=iu:e[t]===uu?e[t]=cu:e[t]=uu;return this}}]),SelectionSet}();function helper_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t3&&void 0!==arguments[3]?arguments[3]:{},i=this.sideEffects(),a=i[e],o=!1;r.filter&&r.filter(a)&&(o=!0),!o&&i[e].apply(t,n,r)}},{key:"registerPropagationBehaviourMap",value:function registerPropagationBehaviourMap(e){return this._propagationBehaviourMap=Object.assign(this._propagationBehaviourMap,e||{}),this}},{key:"dispatchBehaviour",value:function dispatchBehaviour(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=void 0===n.propagate||n.propagate,i=this._actions.behavioural[e],a=function getSideEffects(e,t){var n=[];for(var r in t){var i=r.split(",");i.some(function(t){return t===e})&&n.push({effects:t[r],behaviours:i})}return n}(e,this._behaviourEffectMap);if(this._propagationInf=n,i){var o=i.dispatch(t),u=this.getPropagationSelectionSet(o);this._entryExitSet[e]=u;var c=this.shouldApplySideEffects(r);if(r&&this.propagate(e,t,o.find(function(e){return e.sourceSelectionSet}),a),c){var s=this.getApplicableSideEffects(a,t,n);this.applySideEffects(s,u,t)}}return this}},{key:"getPropagationSelectionSet",value:function getPropagationSelectionSet(e){return e.find(function(e){return!e.sourceSelectionSet})}},{key:"shouldApplySideEffects",value:function shouldApplySideEffects(){return!0}},{key:"changeBehaviourStateOnPropagation",value:function changeBehaviourStateOnPropagation(e,t){return t instanceof Function?this._sourceBehaviours[e]=t:this._sourceBehaviours[e]=function(){return t},this}},{key:"changeSideEffectStateOnPropagation",value:function changeSideEffectStateOnPropagation(e,t){t instanceof Function?this._sourceSideEffects[e]=t:this._sourceSideEffects[e]=function(){return t}}},{key:"propagate",value:function propagate(){return this}},{key:"sideEffects",value:function sideEffects(){return arguments.length?(this._sideEffects=arguments.length<=0?void 0:arguments[0],this):this._sideEffects}},{key:"enableSideEffects",value:function enableSideEffects(e){return fu(this,e,!0),this}},{key:"disableSideEffects",value:function disableSideEffects(e){return fu(this,e,!1),this}},{key:"dissociateBehaviour",value:function dissociateBehaviour(e,t){var n=this._actionBehaviourMap;for(var r in n)if(r===t){var i=n[r];i.behaviours=i.behaviours.filter(function(t){return t!==e})}return this}},{key:"dissociateSideEffect",value:function dissociateSideEffect(e,t){var n=this._behaviourEffectMap;return n[t]=n[t].filter(function(t){return(t.name||t)!==e}),this}},{key:"getApplicableSideEffects",value:function getApplicableSideEffects(e){return e}},{key:"attachPropagationListener",value:function attachPropagationListener(e){return e.unsubscribe("propagation"),e.on("propagation",this.onDataModelPropagation()),this}},{key:"onDataModelPropagation",value:function onDataModelPropagation(){var e=this;return function(t){var n=t.payload,r=n.action;e.dispatchBehaviour(r,n,{propagate:!1})}}},{key:"createSelectionSet",value:function createSelectionSet(e,t){var n=t||this._actions.behavioural,r=this._selectionSet,i=this._volatileSelectionSet;for(var a in n)({}).hasOwnProperty.call(n,a)&&(r[a]=new lu(e),i[a]=new lu(e,!0));return this._volatileSelectionSet=i,this.selectionSet(r),this}},{key:"selectionSet",value:function selectionSet(){return arguments.length?(this._selectionSet=arguments.length<=0?void 0:arguments[0],this):this._selectionSet}},{key:"initializeSideEffects",value:function initializeSideEffects(){var e=this._sideEffectDefinitions;return this.sideEffects(function initializeSideEffects(e,t){var n=e._sideEffects;return(t=t instanceof Array?t:Object.values(t)).forEach(function(t){var r=n[t.formalName()];n[t.formalName()]=r||new t(e)}),n}(this,e)),this}},{key:"registerPhysicalActions",value:function registerPhysicalActions(e){var t=function initializePhysicalActions(e,t){var n={};for(var r in t)({}).hasOwnProperty.call(r,t)||(n[r]=t[r](e));return n}(this,e);return Object.assign(this._actions.physical,t),this}},{key:"propagateWith",value:function propagateWith(e,t){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],r=this._actions.behavioural;if(t.length){if(e===ru)for(var i in r)this._propagationFields[i]={fields:t,append:n};else this._propagationFields[e]={fields:t,append:n};return this}return this._propagationFields}},{key:"mapActionsAndBehaviour",value:function mapActionsAndBehaviour(){var e=this._actions.physical,t=this._actionBehaviourMap,n=this._mappedActions;for(var r in t)if(!{}.hasOwnProperty.call(r,t)){var i=void 0,a=t[r];i=a.target;var o=a.touch;i||(i=this.context.getDefaultTargetContainer());var u=Ro()?!0===o||void 0===o:!o,c=r+"-"+a.behaviours.join();u&&!n[c]&&this.bindActionWithBehaviour(e[r],i,a.behaviours),n[c]=!0}return this}},{key:"registerPhysicalBehaviouralMap",value:function registerPhysicalBehaviouralMap(e){return Object.assign(this._actionBehaviourMap,e),this}},{key:"bindActionWithBehaviour",value:function bindActionWithBehaviour(e,t,n){var r=this;return"string"==typeof t&&(t=[t]),t.forEach(function(t){var i=r.context.mount(),a=t.node instanceof Function?t:Ao(i).selectAll(t);n.length&&!a.empty()&&(a instanceof Array?a.forEach(function(t){e(Ao(t),n)}):e(a,n))}),this}},{key:"getPropagationInf",value:function getPropagationInf(){return this._propagationInf}},{key:"getAddSetFromCriteria",value:function getAddSetFromCriteria(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=this.context,r=t.data?t.data:n.getDataModelFromIdentifiers(e,"all"),i=n.fields().x||[],a=n.fields().y||[],o=i.every(function(e){return e.type()===ir.FieldType.MEASURE}),u=a.every(function(e){return e.type()===ir.FieldType.MEASURE});return{model:r,uids:null===e?null:t.data?function filterPropagationModel(e,t,n){var r=t.getData(),i=r.data,a=r.schema,o=void 0;if(a.length){var u=e.getFieldsConfig();o=e.select(function(e){return i.some(function(t){return a.every(function(r,i){return!(n||r.name in u&&u[r.name].def.type!==ir.FieldType.MEASURE)||t[i]===e[r.name].valueOf()})})},{saveChild:!1})}else o=t;return o}(this.getFullData(),t.data[0],o&&u).getData().uids:r[0].getData().uids}}},{key:"getSelectionSets",value:function getSelectionSets(e){var t=this.context.id(),n=(this._propagationInf||{}).sourceId,r=[];return n!==t&&(r=[this._volatileSelectionSet[e]]),n&&r.push(this.selectionSet()[e]),r}},{key:"getFullData",value:function getFullData(){return this.context.data()}},{key:"resetted",value:function resetted(){return this._resetted}},{key:"getEntryExitSet",value:function getEntryExitSet(e){return this._entryExitSet[e]}}]),Firebolt}(),mu=function(){function defineProperties(e,t){for(var n=0;n1&&void 0!==arguments[1]?arguments[1]:{},n=e.sourceIdentifiers;return n?n.getSchema().map(function(e){return e.name}):t instanceof Array?t[0]:Object.keys(t||{})}(u,n.criteria),sourceSelectionSet:!0===e._volatile}}},{key:"enable",value:function enable(){this._enabled=!0}},{key:"disable",value:function disable(){this._enabled=!1}},{key:"isEnabled",value:function isEnabled(){return this._enabled}}],[{key:"mutates",value:function mutates(){return!1}}]),GenericBehaviour}(),_u=function(){function defineProperties(e,t){for(var n=0;nk[0]?k:w,S=C===k?w:k;C[1]100&&Math.abs(i.x-a.x)<=5)){a.x=Math.max(0,Math.min(a.x,o.width)),a.y=Math.max(0,Math.min(a.y,o.height));var s=Ru(n.context.getSourceInfo(),{startPos:i,endPos:a,snap:!0},n.context.data().getFieldsConfig());s.dragEnd=!0,t.forEach(function(e){return n.dispatchBehaviour(e,s)})}}))},zu=function hover(e){return function(t,n){var r=function dispatchBehaviour(t){var r=Io(),i=e.context,a=i.config().interaction.tooltip.mode,o=jo(i.getDrawingContext().svgContainer,r),u=i.getNearestPoint(o.x,o.y,{getAllPoints:"consolidated"===a||"fragmented"===a,data:t,event:r}),c={criteria:u?u.id:null,showInPosition:u.showInPosition,target:u.target,position:o,mode:a};n.forEach(function(t){return e.dispatchBehaviour(t,c)}),r.stopPropagation()};t.on("mouseover",r).on("mousemove",r).on("mouseout",function(){n.forEach(function(t){return e.dispatchBehaviour(t,{criteria:null})})})}},Hu=function generatePayloadFromEvent(e,t,n){var r=n.context,i=jo(r.getDrawingContext().svgContainer,t.touches?t.touches[0]:t),a=r.getNearestPoint(i.x,i.y,{data:e,event:t});return{criteria:a?a.id:null,showInPosition:a.showInPosition,target:a.target,position:i}},Vu=function click(e){return function(t,n){t.on("click",function dispatchBehaviour(t){var r=Io(),i=Hu(t,r,e);n.forEach(function(t){return e.dispatchBehaviour(t,i)}),r.stopPropagation()})}};function physical_defineProperty(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var Uu=(physical_defineProperty(Du={},Qo,function drag(e){return function(t,n){Bu(t,n,e)}}),physical_defineProperty(Du,Zo,zu),physical_defineProperty(Du,eu,Vu),physical_defineProperty(Du,tu,function longtouch(e){return function(t,n){var r=void 0,i=void 0;i=!1,r=Io(),t.on("touchstart",function(t){r=Io(),i=!1,setTimeout(function(){i?n.forEach(function(t){return e.dispatchBehaviour(t,{criteria:null})}):function dispatchBehaviour(t){var i=Hu(t,r,e);n.forEach(function(t){return e.dispatchBehaviour(t,i)}),r.stopPropagation()}(t)},100)}).on("touchend",function(){i=!0})}}),physical_defineProperty(Du,nu,function touchdrag(e){return function(t,n){Bu(t,n,e,!0)}}),Du),Wu=function(){function defineProperties(e,t){for(var n=0;n1&&void 0!==arguments[1]&&arguments[1];var t=arguments[2],n=arguments[3];this.firebolt.context.layers().forEach(function(r){return!1!==r.config().interactive&&r.applyInteractionStyle(t,e.uids,n)})}}]),SurrogateSideEffect}(),Xu=function(){function defineProperties(e,t){for(var n=0;n=0&&l<=t&&c>=0&&s<=n){var f=Ru(a.getSourceInfo(),{startPos:{x:u,y:c},endPos:{x:l,y:s}},a.data().getFieldsConfig());o(f)}}).on("end",function(){var e=i.width,t=i.height,n=Math.min(e-r.width,Math.max(r.x,0)),u=Math.min(t-r.height,Math.max(r.y,0)),c=u+r.height,s=n+r.width;if(n>=0&&s<=e&&u>=0&&c<=t){var l=Ru(a.getSourceInfo(),{startPos:{x:n,y:u},endPos:{x:s,y:c},snap:!0},a.data().getFieldsConfig());l.dragEnd=!0,o(l)}}))}}(c)(Ao(this),["brush"],x)}).merge(w).each(function(e){var t=Ao(this);for(var n in b&&(t=t.transition().duration(b.duration)),e)({}).hasOwnProperty.call(e,n)&&fa(e[n])&&t.attr(n,e[n])}),C=Gi(u.defClassName,this._id,d);return k.classed(C.join(" "),!0),k.classed(u.className,!0),this}},{key:"hide",value:function hide(e){Qu(this,e.sideEffectGroup,!1)}},{key:"show",value:function show(e){Qu(this,e.sideEffectGroup,!0)}}],[{key:"defaultConfig",value:function defaultConfig(){return{defClassName:"selection-box-group",className:"",classPrefix:"muze",box:{defClassName:"selection-box",className:""},transition:{duration:200}}}},{key:"formalName",value:function formalName(){return"selectionBox"}}]),SelectionBox}(),ec={position:"absolute",width:0,height:0},tc={classPrefix:"muze",defClassName:"tooltip-box",connectorClassName:"tooltip-connectors",className:"",row:{margin:0},content:{spacing:5,iconContainerSize:10,iconScale:1,iconShape:"circle",iconColor:"#ff0000",rowMargin:"0px",margin:10,separator:":",className:"tooltip-content-container",parentClassName:"tooltip-content-parent-container"},arrow:{size:10,disabled:!1,defClassName:"tooltip-arrow",className:"",color:"rgba(195,195,195,0.85)"}},nc=function getArrowPos(e,t,n,r){var i=void 0,a=n.x,o=n.y,u=n.boxHeight,c=n.boxWidth,s=r.arrow.disabled?0:r.arrow.size;if("left"===e||"right"===e){var l=0,f=u/2,h=t.y+t.height,d=o+u;t.y>o?(l=t.y-o,f=(h>=d?d-t.y:t.height)/2):d>h&&(f=Math.abs(o-(t.y+t.height))/2),i=l+f-s/2}else{var p=0,y=c/2,g=t.x+t.width,v=a+c;t.x>a?(p=t.x-a,y=(g>=v?v-t.x:t.width)/2):v>g&&(y=Math.abs(a-(t.x+t.width))/2),i=p+y-s/2}return i},rc=function placeArrow(e,t,n){var r=e._tooltipArrow,i=e._tooltipBackground,a=e._config,o=a.classPrefix,u=a.arrow,c=Gi(u.defClassName,e._id,a.classPrefix);r.style("display","block"),r.attr("class",""+c.join(" ")),"left"===t||"right"===t?(r.style("top",n+"px"),r.style("left",""),i.style("top",n+"px"),i.style("left","")):("bottom"===t?r.style("top","100%"):r.style("top","-"+u.size+"px"),r.style("left",n+"px"),"bottom"===t?i.style("top","100%"):i.style("top","-"+(u.size+3)+"px"),i.style("left",n+"px")),r.classed(o+"-tooltip-arrow",!0),r.classed(o+"-tooltip-arrow-"+e._arrowOrientation,!1),r.classed(o+"-tooltip-arrow-"+t,!0),i.classed(o+"-tooltip-background-arrow",!0),i.classed(o+"-tooltip-background-arrow-"+e._arrowOrientation,!1),i.classed(o+"-tooltip-background-arrow-"+t,!0)};n(11);function strategy_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t1&&void 0!==arguments[1]?arguments[1]:{},n=arguments[2],r=[],i=e.getData(),a=i.data,o=i.schema,u=t.formatters,c=t.separator,s=e.getFieldsConfig(),l=e.getFieldspace(),f=l.fieldsObj(),h=n.dimensionMeasureMap,d=n.axes,p=n.detailFields||[],y=o.filter(function(e){return e.type===ir.FieldType.DIMENSION}),g=o.filter(function(e){return e.type===ir.FieldType.MEASURE}),v=o.find(function(e){return-1!==p.indexOf(e.name)}),m=a.length,b=function getRowContent(e,n){var r=void 0,i=void 0,o=void 0,p=[],y=s[e].index,g=s[e].def.subtype===ir.DimensionSubtype.TEMPORAL?f[e].getMinDiff():0,v=u&&u[e]||oc(n,function(e){return e});if(null!==r){var b=n===ir.FieldType.MEASURE?a.map(function(e){return e[y]}):[].concat(strategy_toConsumableArray(new Set(a.map(function(e){return e[y]}))));b=b.filter(function(e){return""!==e});var _=d.color[0],x=d.shape[0],w=d.size[0],k=(_||x||w)&&m>1&&n!==ir.FieldType.MEASURE;b.forEach(function(n,u){var f=void 0,d=h[e];if(d&&d.length&&m>1){f=n;var y={value:""};k&&(y={type:"icon",color:_.getColor(n),shape:x.getShape(n),size:w.getSize(n)*t.iconScale}),d.length>1?(p.push([y,""+f]),d.forEach(function(e){o=s[e].index,r=a[u][o],i=oc("measure",l.fields[o]._ref.numberFormat())(r,g),p.push([{value:""+e+c,style:{"margin-left":t.margin+"px}"},className:t.classPrefix+"-tooltip-key"},{value:""+i,className:t.classPrefix+"-tooltip-value"}])})):(o=s[d[0]].index,r=a[u][o],i=oc("measure",l.fields[o]._ref.numberFormat())(r,g),p.push([y,{value:""+f+c,className:t.classPrefix+"-tooltip-key"},{value:""+i,className:t.classPrefix+"-tooltip-value"}]))}else f=e,i=v(r=n,g),p.push([{value:""+f+c,className:t.classPrefix+"-tooltip-key"},{value:""+i,className:t.classPrefix+"-tooltip-value"}])})}return p},_="keyValue";if(m>1&&v)r=function getTabularData(e,t,n,r){var i=[];return i.push(t.map(function(e){return e.name})),e.forEach(function(e){var a=[];t.forEach(function(t,i){var o=t.subtype===ir.DimensionSubtype.TEMPORAL?r[t.name]:0,u=t.type===ir.FieldType.MEASURE&&n.fields[i]._ref.numberFormat(),c=oc(t.subtype||t.type,u)(e[i],o);a.push(c)}),i.push(a)}),i}(a,o,l,n.timeDiffs),_="table";else{y.forEach(function(e){var t=e.subtype?e.subtype:e.type;r=[].concat(strategy_toConsumableArray(r),strategy_toConsumableArray(b(e.name,t)))});var x=[].concat(strategy_toConsumableArray(new(Function.prototype.bind.apply(Set,[null].concat(strategy_toConsumableArray(Object.values(h)))))));(m>1?g.filter(function(e){return-1===x.indexOf(e.name)}):g).forEach(function(e){var t=e.subtype?e.subtype:e.type;r=[].concat(strategy_toConsumableArray(r),strategy_toConsumableArray(b(e.name,t)))})}return{content:r,displayFormat:_}},cc={keyValue:function keyValue(e,t,n){return uc(e,t,n)}},sc="keyValue",lc=function(){function defineProperties(e,t){for(var n=0;n0?(this._config=na(this._config,arguments.length<=0?void 0:arguments[0]),this):this._config}},{key:"update",value:function update(e){return this._model=e.model,this._strategy=void 0!==e.strategy?e.strategy:sc,this._formatter=e.formatter,this}},{key:"context",value:function context(e){return this._context=e,this}},{key:"render",value:function render(e){var t=void 0,n=this._config,r=n.iconContainerSize,i=this._formatter,a=n.rowMargin,o=this._model;if(this._mount=e,(t=o instanceof Array?o:i instanceof Function?i(this._model,this._context):cc[this._strategy](this._model,this.config(),this._context))instanceof Function)e.html(t());else{var u=t,c="default";Di(t)&&(u=t.content,c=t.displayFormat);var s=Eo(e,"div",[c],n.classPrefix+"-tooltip-content",{},function(e){return e});if("table"===c){var l=Eo(s,"table",[1],n.classPrefix+"-tooltip-table"),f=Eo(l,"tbody",[1],n.classPrefix+"-tooltip-table-tbody"),h=Eo(f,"tr",u,n.classPrefix+"-tooltip-table-row");h.each(function(e,t){Ao(this).classed(n.classPrefix+"-tooltip-table-row-"+t,!0)}),Eo(h,"td",function(e){return e},n.classPrefix+"-tooltip-table-cell").each(function(e){Ao(this).html(e)})}else{var d=Eo(s,"div",u,n.classPrefix+"-tooltip-row"),p=Eo(d,"span",function(e){return e},n.classPrefix+"-tooltip-content");p.attr("class",n.classPrefix+"-tooltip-content"),Fo(d,{margin:a}),Fo(p,{display:"inline-block","margin-right":n.spacing+"px"}),p.each(function(e){var t=Ao(this);if(t.html(""),e instanceof Object)if("icon"===e.type){var n=Eo(t,"svg",[1]),i=Eo(n,"path",[1]),a=e.shape instanceof Function?e.shape:pa(e.shape);To(n,{x:0,y:0,width:r,height:r}),To(i,{d:a.size(e.size)(),transform:"translate("+r/2+", "+r/2+")"}),Fo(i,{fill:e.color}),Fo(n,{width:r+"px",height:r+"px"})}else t.html(e.value),e.className&&t.classed(e.className,!0),Fo(t,e.style);else t.html(e)})}}return this}},{key:"clear",value:function clear(){return this._model=null,this}}],[{key:"defaultConfig",value:function defaultConfig(){var e=tc.content;return e.classPrefix=tc.classPrefix,e}}]),Content}(),hc=function(){function defineProperties(e,t){for(var n=0;n0){var e=na({},this.constructor.defaultConfig());return this._config=na(e,arguments.length<=0?void 0:arguments[0]),this}return this._config}},{key:"addClass",value:function addClass(e){return this._tooltipContainer.classed(e,!0),this}},{key:"context",value:function context(){return arguments.length?(this._context=arguments.length<=0?void 0:arguments[0],this):this._context}},{key:"content",value:function content(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=this.config(),i=r.classPrefix,a=r.content.className,o=r.formatter,u=n.className||i+"-"+a+"-"+e,content=this._contents[e]=this._contents[e]||new fc,c=Eo(this._contentContainer,"div",[n.order],u);c.attr("class",i+"-"+a+" "+u),function reorderContainers(e,t){e.selectAll(t).sort(function(e,t){return e-t})}(this._contentContainer,"."+i+"-"+a);var s=r.content;return n.classPrefix=this._config.classPrefix,content.config(s),null===t?(content.clear(),c.remove(),delete this._contents[e]):(content.update({model:t,formatter:n.formatter||o}),content.context(this._context),content.render(c)),Object.keys(this._contents).length||this.hide(),this}},{key:"getContents",value:function getContents(){return Object.values(this._contents)}},{key:"position",value:function position(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(!Object.keys(this._contents).length)return this.hide(),this;this.show();var r=this._target,i=n.repositionArrow;if(r&&i){var a=this._tooltipContainer.node(),o=this._config,u=o.arrow.disabled,c=u?0:o.arrow.size,s=this._arrowOrientation,l="left"===s||"right"===s?t+a.offsetHeight-cr.y+r.height:e+a.offsetWidth-cr.x+r.width;if(!u)if(l){var f=void 0;this._tooltipArrow.style("display","none"),this._tooltipBackground.style("display","none"),this._tooltipConnectorContainer.style("display","block");var h=this._tooltipConnectorContainer.selectAll("path").data([1]),d=h.enter().append("path");"left"===s?f="M "+e+" "+(t+a.offsetHeight/2)+" L "+(r.x+r.width)+" "+(r.y+r.height/2):"right"===s?f="M "+(e+a.offsetWidth)+" "+(t+a.offsetHeight/2)+" L "+r.x+" "+(r.y+r.height/2):"bottom"===s&&(f="M "+(e+a.offsetWidth/2)+" "+(t+a.offsetHeight)+" L "+(r.x+r.width/2)+" "+r.y),d.merge(h).attr("d",f).style("display","block")}else{var p=nc(s,r,{x:e,y:t,boxHeight:a.offsetHeight,boxWidth:a.offsetWidth},this._config);rc(this,this._arrowOrientation,p),this._tooltipConnectorContainer.style("display","none")}}var y=this._offset||{x:0,y:0};return this._tooltipContainer.style("left",y.x+e+"px").style("top",y.y+t+"px"),this}},{key:"positionRelativeTo",value:function positionRelativeTo(e){var t=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=void 0,i=n.orientation;if(this.show(),!e)return this.hide(),this;var a=this._extent,o=this._tooltipContainer.node();this._tooltipContainer.style("top","0px").style("left","0px");var u=o.offsetWidth+2,c=o.offsetHeight+2,s=this._config,l=this._offset,f=s.arrow.disabled,h=f?0:s.arrow.size,d=void 0===n.draw||n.draw,p=e.y,y=e.x+e.width+l.x,g=a.width-y,v=e.x+l.x-a.x,m=p>c+h,b=g>=u+h,_=v>=u+h;return this._target=e,i||(i=m?"vertical":b||_?"horizontal":"vertical"),"horizontal"===i?r=function positionHorizontal(){var n=void 0,r=e.x+e.width,i=e.y;return b?(n="left",r+=h):_?(r=e.x-u,n="right",r-=h):(n="left",r+=h),e.height2&&void 0!==arguments[2]?arguments[2]:{},r=0,i=0,a=e.mergedEnter.model,o=this.firebolt.context,u=this.drawingContext();if(a.isEmpty()||null===t.criteria||!1===e.isSourceFieldPresent)return this.hide(n,null),this;var c=this._tooltips,s=this.config(),l={width:u.width,height:u.height},f=t.showInPosition,h=s.padding,d=[],p="fragmented"===s.mode,y=o.getSourceInfo(),g=y.fields,v=!!(!!g.x[0]&&g.x[0].type()===ir.FieldType.DIMENSION),m=t.position,b=[],_={},x=a.getData().uids;p?d.push.apply(d,function tooltip_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);tu.height:i>u.width)break;b.push({x:z.x,y:z.y,width:H.width,height:H.height,tooltip:R})}}for(var V in c)if(!_[V]){var U=c[V];U.content(t.action,null),U.getContents().length||(U.remove(),delete c[V])}return p&&(!function spaceOutBoxes(e,t,n){var r=void 0,i=void 0,a=void 0,o=void 0,u=void 0,c=e.length,s=function spaceOutIfOverlap(e,t,u){a=e.x,o=e.width,r=e.y,i=e.height;var c=r+i,s=a+o;n?(u?rt.y)&&(t.y=u?e.y-t.height-5:c+5):(u?at.x)&&(t.x=u?e.x-t.width-5:s+5)};for(e.sort(function(e,t){return n?e.y-t.y:e.x-t.x}),u=0,u=0;ut.height||e[u].x+e[u].width>t.width)for(n?e[u].y-=e[u].height+e[u].y-t.height:e[u].x-=e[u].width+e[u].x-t.width,u=c-1;u>0;u--)s(e[u],e[u-1],!0)}(b,l,v),b.forEach(function(e){return e.tooltip.position(e.x,e.y,{repositionArrow:!0})})),this}},{key:"hide",value:function hide(e){var t=this._tooltips;for(var n in t)if({}.hasOwnProperty.call(t,n)){var r=e.strategy||this._strategy;t[n].content(r,null),t[n].hide()}}}],[{key:"defaultConfig",value:function defaultConfig(){return{padding:5,offset:{x:0,y:0}}}},{key:"formalName",value:function formalName(){return"tooltip"}}]),Tooltip}(),vc=(n(15),function(){function defineProperties(e,t){for(var n=0;n2&&void 0!==arguments[2]?arguments[2]:{},r=this._strategies[n.strategy||this._strategy];return!1!==e.isSourceFieldPresent&&r(e,this,n.strategy||this._strategy),this}}],[{key:"formalName",value:function formalName(){return"highlighter"}},{key:"target",value:function target(){return"visual-unit"}}]),PlotHighlighter}(),wc=function(){function defineProperties(e,t){for(var n=0;n67.5&&v<=90||(r+=2*y),u=p,u=90===l?y:270===l?-y:0,o===Yc?(u=0===t&&c&&s===ds?u+u/2:u,Ao(this).attr("transform","translate("+(-u+f)+" \n "+(-r-f)+") rotate("+l+")")):(u=0===t&&c&&s===ds?u-u/2:u,Ao(this).attr("transform","translate("+(u-f)+" \n "+(r+f)+") rotate("+l+")"))}),t},Os=function changeTickOrientation(e,t,n){var r=t._smartTicks,i=t.config(),a=t.dependencies().labelManager,o=i.labels,u=i.orientation,c=o.rotation,s=o.smartTicks,l=e.selectAll(".tick text");if(l.selectAll("tspan").remove(),0===c||!1!==s||"top"!==u&&"bottom"!==u)if(0===c&&!1===s)l.attr("transform","");else{l.attr("y",0).attr("x",0).text(""),Eo(l,"tspan",function(e,t){return r[t].lines},"smart-text").attr("dy","0").style("opacity","0").transition().duration(1e3).attr("dy",function(e,t){return"bottom"===u||0!==t?r[t].oriTextHeight:-r[t].oriTextHeight*(r[t].lines.length-1)-n}).style("opacity",1).attr("x",0).text(function(e){return e})}else Ms(t,l,a,i);return l},Ts=function setFixedBaseline(e){e.config().fixedBaseline&&e.setFixedBaseline()},Fs=function setAxisNamePos(e,t,n){var r=n.axisNameHeight,i=n.yOffset,a=n.labelOffset,o=n.availableSpace;switch(t){case Xc:e.attr("transform","translate("+-(o.width-r)+","+(i+a)+")rotate(-90)");break;case Kc:e.attr("transform","translate("+(o.width-r)+","+(i+a)+")rotate(90)");break;case Yc:e.attr("transform","translate("+o.width/2+","+(-o.height+r)+")");break;case Gc:e.attr("transform","translate("+o.width/2+","+(o.height-r/2)+")")}return e};function cartesian_axis_helper_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);tt.length&&(t=p,r=e.smartTicks()?e.smartTicks()[s]:{},n=o[s]),d}),n=h.getOriSize(t),{largestLabel:t,largestLabelDim:n,axisTickLabels:i,allLabelLengths:o,smartTick:r}},js=function setOffset(e){var t=0,n=0,r=e.logicalSpace(),i=e.config(),a=i.orientation,o=i.xOffset,u=i.yOffset;a===Xc&&(t=void 0===o?r.width:o),a===Yc&&(n=void 0===u?r.height:u),e.config({xOffset:t,yOffset:n})},Is=function adjustRange(e,t,n,r){var i=function getAxisOffset(e,t,n){var r=Math.abs(t[1]-t[0])/(n[1]-n[0])*e,i=t[1]-t[0],a=i/r;return(i-i/(a+1)*a)/2}(e,t,n);return r===Yc||r===Gc?(t[0]+=i,t[1]-=i):(t[0]-=i,t[1]+=i),t},Ds=function registerChangeListeners(e){return e.store().model.next(["domain","range","mount","config"],function(){for(var t=arguments.length,n=Array(t),r=0;r0&&e.length*(t+this._minTickDistance.width)>i&&this.config({labels:{rotation:-90}})}return this}},{key:"adjustRange",value:function adjustRange(){return this}},{key:"getScaleValue",value:function getScaleValue(e){if(null!==e&&void 0!==e)return this.scale()(e)}},{key:"getTickSize",value:function getTickSize(){return this.axis().tickSize()}},{key:"getAxisDimensions",value:function getAxisDimensions(){return this.axisDimensions(function computeAxisDimensions(e){var t={},n=e.config(),r=n.name,i=n.labels,a=n.tickValues,o=(i.smartTicks?0:i.rotation)*Math.PI/180,u=e.dependencies().labelManager,c=Ns(e),s=c.largestLabelDim,l=c.axisTickLabels,f=c.smartTick,h=s.height,d=s.width;return 0===e.domain().length?null:(!1===e._rotationLock&&(e.setRotationConfig(a||l,s.width),e._rotationLock=!1),t=i.smartTicks?f:{width:Math.abs(h*Math.sin(o))+Math.abs(d*Math.cos(o)),height:Math.abs(d*Math.sin(o))+Math.abs(h*Math.cos(o))},u.setStyle(e._axisNameStyle),{tickSize:e.getTickSize(),tickLabelDim:t,axisLabelDim:u.getOriSize(r),largestLabelDim:s,axisTickLabels:l})}(this)),this.axisDimensions()}},{key:"getLogicalSpace",value:function getLogicalSpace(){return this.logicalSpace()||(this.logicalSpace(function calculateContinousSpace(e){e.range();var t=e.config(),n=e.getAxisDimensions(),r=t.orientation,i=t.show,a=t.showAxisName,o=n.axisLabelDim;if(!1===i)return{width:0,height:0};var u=o.width;if(r===Yc||r===Gc){var c=Ls(e,n,t),s=c.width,l=c.height;return{width:Math.max(s,u),height:l}}var f=Rs(e,n,t),h=f.width,d=f.height;return{width:h,height:Math.max(d,a?u:0)}}(this)),js(this),this.logicalSpace()),this.logicalSpace()}},{key:"invert",value:function invert(){for(var e=this,t=arguments.length,n=Array(t),r=0;ra[1];return"band"===r?(n=i.invertExtent(e,t),[i(o?n[n.length-1]:n[0]),i(o?n[0]:n[n.length-1])+i.bandwidth()]):[e,t]}},{key:"updateDomainBounds",value:function updateDomainBounds(e){var t=this.domain();return this.config().domain?t=this.config().domain:(0===t.length&&(t=e),e.length&&(t=[Math.min(t[0],e[0]),Math.max(t[1],e[1])])),this.domain(t)}},{key:"updateDomainCache",value:function updateDomainCache(e){!1===this._domainLock&&(this.domain([]),this._domainLock=!0);var t=[];return e&&e.forEach(function(e){void 0!==e&&null!==e&&t.push(e)}),this.updateDomainBounds(t)}},{key:"getMinTickDifference",value:function getMinTickDifference(){return this.domain()}},{key:"getFormattedTickValues",value:function getFormattedTickValues(e){return e}},{key:"setTickValues",value:function setTickValues(){var e=this.config().tickValues;return e?(e instanceof Array&&this.axis().tickValues(e),this):this}},{key:"getUnitWidth",value:function getUnitWidth(){return 0}},{key:"serialize",value:function serialize(){return{name:this.name,type:this.type,range:this.range(),config:this.config()}}},{key:"registerEvent",value:function registerEvent(e,t){this._eventList.push({name:e,action:t})}},{key:"on",value:function on(e,t){e=e||"update",this.registerEvent(e,t)}},{key:"render",value:function render(){return this.mount()&&function renderAxis(e){var t=e.config(),n=e.dependencies().labelManager,r=e.mount(),i=e.range(),a=e.axis(),o=e.scale(),u=e._axisNameStyle,c=e._tickLabelStyle,s=e.formatter,l=e.tickValues,f=t.orientation,h=t.name,d=t.labels,p=t.xOffset,y=t.yOffset,g=t.axisNamePadding,v=t.className,m=t.showAxisName,b=t.show,_=t.id,x=t.interpolator,w=t.classPrefix;if(b){var k=e.getTickSize(),C=Eo(Ao(r),"g",[e],""+v,{},function(e){return e.config().id});n.setStyle(c),"linear"===x&&e.setTickValues();var S=o.ticks||o.quantile||o.domain;s&&a.tickFormat(s(l||a.tickValues()||S()));var P=Math.abs(i[0]-i[1]),A=e.axisDimensions().tickLabelDim;C.attr("transform","translate("+p+","+y+")"),Ts(e),!1===d.smartTicks?C.transition().duration(1e3).call(a):C.call(a),C.selectAll(".tick").classed(w+"-ticks",!0),C.selectAll(".tick line").classed(w+"-tick-lines",!0),C.selectAll(".tick text").classed(w+"-ticks",!0).classed(w+"-ticks-"+_,!0),Os(C,e,k);var E=Eo(C,"text",[h],w+"-axis-name").attr("text-anchor","middle").classed(w+"-axis-name-"+_,!0).text(function(e){return e});E.classed(ys,!m);var M=P/2;n.setStyle(u);var O=n.getOriSize(h),T={labelProps:A,tickSize:k,axisNamePadding:g,axisNameHeight:O.height,axisNameWidth:O.width,yOffset:y,xOffset:p,labelOffset:M,availableSpace:e.availableSpace()};Fs(E,f,T)}}(this),this}},{key:"remove",value:function remove(){return this.store().unsubscribeAll(),Ao(this.mount()).remove(),this}},{key:"unsubscribe",value:function unsubscribe(){return this.store().unsubscribeAll(),this}},{key:"isReverse",value:function isReverse(){var e=this.range();return e[0]>e[1]}},{key:"getPixelToValueRatio",value:function getPixelToValueRatio(){var e=this.scale(),t=e.range(),n=e.domain();return Math.abs(t[1]-t[0])/(n[1]-n[0])}},{key:"id",get:function get(){return this._id}}],[{key:"defaultConfig",value:function defaultConfig(){return Es}}]),SimpleAxis}(),Vs=function(){function defineProperties(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:0,t=arguments[1],n=arguments[2],r=arguments[3],i=n.left,a=n.right,o=n.top,u=n.bottom,c=this.config(),s=c.orientation,l=c.fixedBaseline,f=this.getAxisDimensions().tickLabelDim;if(this.availableSpace({width:e,height:t}),s===Yc||s===Gc){var h=f.width;this.range([(l?0:h/2)+i,e-a-h/2]);var d=this.getLogicalSpace().height;r&&this.config({yOffset:Math.max(d,t)})}else{var p=f.height;this.range([t-u-(l?1:p/2),p/2+o]);var y=this.getLogicalSpace().width;r&&this.config({xOffset:Math.max(y,e)})}return this}},{key:"setTickValues",value:function setTickValues(){var e=this.config().tickValues,t=this.axis();return e?(e instanceof Array&&this.axis().tickValues(e),this):(t.tickValues(this.getTickValues()),this)}},{key:"getTickValues",value:function getTickValues(){var e=this.config(),t=e.orientation,n=e.tickValues,r=this.range(),i=this.axis(),a=Math.abs(r[0]-r[1]),o=Ns(this).largestLabelDim;return n?i.scale().ticks(n):function getNumberOfTicks(e,t,n,r){var i=n.scale().ticks(),a=r.config().numberOfTicks,o=i.length,u=o;return o*(1.5*t)>e&&(u=Math.floor(e/(1.5*t))),u=Math.min(a,Math.max(1,u)),n.scale().ticks(u)}(a,o[t===Gc||t===Yc?"width":"height"],i,this)}},{key:"getMinTickDifference",value:function getMinTickDifference(){return xa(this.config().tickValues)}},{key:"setFixedBaseline",value:function setFixedBaseline(e){var t=this.config(),n=t.orientation,r=t.labels.rotation,i=this.axis(),a=this._axisDimensions.largestLabelDim,o=a.width,u=a.height;return i.tickTransform(function(e,t){return 0!==t||n!==Xc&&n!==Kc?0!==t||n!==Yc&&n!==Gc||0!==r?"":"translate("+o/2+"px, 0px) rotate("+r+"deg)":"translate(0, -"+u/3+"px)"}),e}}],[{key:"type",value:function type(){return Qc}}]),ContinousAxis}(),Zs=function(){function defineProperties(e,t){for(var n=0;n0&&e.length*(t+this._minTickDistance.width)>a&&(a&&o0&&e.length*t>i&&(i&&1.25*a1?t.range:[al].concat(props_toConsumableArray(t.range)));var r=na(n,e.config()),i=na(r,t);return i.range instanceof Array&&(i.range=i.range.map(function(e,t){return sl(e,il[t])}),i.stops=t.stops||i.range.length),i.value=sl(i.value,i.value),i}},domain:{},scale:{},uniqueValues:{}};function color_strategy_defineProperty(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function color_strategy_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);tMath.min(t.length,18))for(var r=aa()(function hslInterpolator(){return Ne}(),t.map(function(e){return ul(e)})),i=0;i0&&void 0!==arguments[0]?arguments[0]:[];if(e.length){var t=this.scale(),n=t.range?t.range():null,r=this._colorStrategy.domainRange()(e,this.config().stops,n);this.domain(r.domain),r.range&&this.scale().range(r.range),this.uniqueValues(r.uniqueVals),this.scale().domain(r.scaleDomain||this.domain())}return this}},{key:"serialize",value:function serialize(){return{type:this.constructor.type(),scale:this.scale(),domain:this.domain(),config:this.config()}}},{key:"transformColor",value:function transformColor(e,t){var n=360*e[0],r=100*e[1],i=100*e[2],a=e[3]||1,o=n+t[0],u=r+t[1],c=i+t[2],s=a+t[3]||0;return{color:"hsla("+o+","+u+"%,"+c+"%,"+s+")",hsla:[o/360,u/100,c/100,s]}}},{key:"id",value:function id(){return this._id}}],[{key:"defaultConfig",value:function defaultConfig(){return ol}},{key:"type",value:function type(){return"color"}}]),ColorAxis}(),Sl={value:36,range:[36,1e3]};function size_strategy_defineProperty(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function size_strategy_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t0&&void 0!==arguments[0]?arguments[0]:0,t=this.config().value,n=this.scale(),r=this.domain()||[1,1];return n&&r[0]!==r[1]?this._sizeStrategy.range(e,n,this.domain(),this.uniqueValues()):t}},{key:"updateDomain",value:function updateDomain(e){if(e){var t=(0,this._sizeStrategy.domain)(e,this.config().intervals);this.domain(t.domain),this.uniqueValues(t.uniqueVals),this.scale().domain(t.scaleDomain||this.domain())}return this}},{key:"serialize",value:function serialize(){return{type:this.constructor.type(),scale:this.scale(),domain:this.domain(),range:this.range(),config:this.config()}}},{key:"id",value:function id(){return this._id}}],[{key:"defaultConfig",value:function defaultConfig(){return Sl}},{key:"type",value:function type(){return"size"}}]),SizeAxis}(),Ol={generator:null,value:"circle",range:["circle","diamond","star","cross","square","wye","triangle"]},Tl={config:{},domain:{},scale:{},uniqueValues:{},generator:{}},Fl=function(){function defineProperties(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:[];return e.length&&(this.uniqueValues(e),this.domain(e),this.scale().domain(e),this.config().generator&&(this._generatedShapes=function shapeGenerator(e,t){var n={};return e.forEach(function(e){n[e]=t(e)}),n}(e,this.config().generator))),this}},{key:"serialize",value:function serialize(){return{type:this.constructor.type(),scale:this.scale(),domain:this.domain(),range:this.config().range,config:this.config()}}},{key:"id",value:function id(){return this._id}}],[{key:"defaultConfig",value:function defaultConfig(){return Ol}},{key:"type",value:function type(){return"shape"}}]),ShapeAxis}();function data_type_scale_map_defineProperty(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var Il="measure",Dl="temporal",Ll=(data_type_scale_map_defineProperty(Nl={},"dimension",Zc),data_type_scale_map_defineProperty(Nl,Il,Qc),data_type_scale_map_defineProperty(Nl,Dl,Jc),function(e,t,n){var r=n.groupBy instanceof Array?n.groupBy:[n.groupBy],i=r.map(function(t){return e.findIndex(function(e){return e.name===t})});if(void 0!==i.find(function(e){return-1===e}))throw new Error("Groupby field "+r+" not found in schema");return function nestCollection(e){var t=T();return e.keys.forEach(function(e){return t.key(function(t){return t[e]})}),t.entries(e.data)}({keys:i,data:t})});var Rl;function transform_factory_defineProperty(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var Bl=(transform_factory_defineProperty(Rl={},"identity",function identityTransform(e,t,n){return t}),transform_factory_defineProperty(Rl,"group",Ll),transform_factory_defineProperty(Rl,"stack",function(e,t,n){var r=n.uniqueField,i=n.value,a=n.groupBy,o=n.sort||"descending",u=function normalizeData(e,t,n,r,i){var a=Ll(t,e,{groupBy:r}),o=t.findIndex(function(e){return e.name===r}),u=t.findIndex(function(e){return e.name===n}),c=t.findIndex(function(e){return e.name===i}),s=e.map(function(e){return e[c]}).filter(function(e,t,n){return n.indexOf(e)===t}).sort(),l=t.reduce(function(e,t,n){return e[n]=t.name,e},{});return{data:a.map(function(e){var t={},n=e.values.reduce(function(e,n){return e=n.reduce(function(e,r,i){return i===c?(e[r]=n[u],t[r]=n):i!==u&&(e[l[i]]=r),e},e)},{});return n._tuple=t,s.forEach(function(t){if(void 0===n[t]){n[t]=0;var r=new Array(e.values[0].length);r[o]=e.key,r[c]=t,n._tuple[t]=r}}),n}),keys:s}}(t,e,i,r,a),c=u.keys,s={},l=n.orderBy,f=e.findIndex(function(e){return e.name===l}),h=e.findIndex(function(e){return e.name===a});-1!==f&&(c.forEach(function(e){var n=t.find(function(t){return t[h]===e});s[e]=n[f]}),u.keys.sort(function(e,t){return s[e].localeCompare(s[t])}));var d=va({keys:u.keys,offset:n.offset||"diverging",order:o,data:u.data});return d.forEach(function(e){e.forEach(function(t){t.data=t.data._tuple[e.key]})}),d}),Rl);var zl=function transformFactory(e){var t=Bl[e];if("function"!=typeof t)throw new Error("Invalid transform type supplied.");return t},Hl=function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function sliceIterator(e,t){var n=[],r=!0,i=!1,a=void 0;try{for(var o,u=e[Symbol.iterator]();!(r=(o=u.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){i=!0,a=e}finally{try{!r&&u.return&&u.return()}finally{if(i)throw a}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}();var Vl,Ul=f.BAND,Wl=function getLayerColor(e,t){var n=e.datum,r=e.index,i=t.colorEncoding,a=t.colorAxis,o=t.colorFieldIndex,u="",c="";return i&&i.value instanceof Function?(c=i.value(n,r),u=i.value(n,r)):(u=a.getRawColor(n._data[o]),c=a.getHslString(u)),{color:c,rawColor:u}},ql=function transfromColor(e,t,n,r){t.meta.stateColor[n]=t.meta.stateColor[n]||t.meta.originalColor;var i=e.transformColor(t.meta.stateColor[n],r);return t.meta.stateColor[n]=i.hsla,i},Gl=function applyInteractionStyle(e,t,n,r){var i=e.getPlotElementsFromSet(t),a=e.axes().color,o=r.apply,u=r.interactionType;n.forEach(function(e){var t=e.type;i.style(t,function(n){var r=n.meta,i=r.colorTransform,c=r.stateColor,s=r.originalColor;if(i[u]=i[u]||{},o&&!i[u][t])return i[u][t]=e.intensity,ql(a,n,t,e.intensity).color;if(!o&&i[u][t])return i[u][t]=null,ql(a,n,t,e.intensity.map(function(e){return-e})).color;var l=c[t]?c[t]:s,f=Hl(l,4);return"hsla("+360*f[0]+","+100*f[1]+"%,"+100*f[2]+"%, "+(f[3]||1)+")"})})},Yl=function getAxesScales(e){var t=[Bc.X,Bc.Y].map(function(t){return e[t]}),n=Hl(t,2),r=n[0],i=n[1],a=[r,i].map(function(e){return e&&e.scale()}),o=Hl(a,2);return{xAxis:r,yAxis:i,xScale:o[0],yScale:o[1]}},Xl=function getIndividualClassName(e,t,n,r){var i=r.config().individualClassName,a="";return i instanceof Function&&(a=i(e,t,n,r)),a},Kl=function attachDataToVoronoi(e,t){var n;e.data((n=[]).concat.apply(n,function helpers_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t=e[0]?(i=d=e[1],h=f=e[0]):(i=d=e[0],h=f=e[1]),(t=a===ir.FieldType.MEASURE?{x:h,x0:d,y:n[u],y0:n[u]}:{x:n[o],x0:n[o],y:i,y0:f})._data=n,t._id=n[l]}else(t={x:e[o],y:e[u],x0:e[c],y0:e[s]})._data=e,t._id=e[l];return t})}).filter(function(e){return e.length})}(e,t,this.encodingFieldsInf(),this.transformType())}},{key:"getNearestPoint",value:function getNearestPoint(){return null}},{key:"applyInteractionStyle",value:function applyInteractionStyle(e,t,n){var r=(this.config().interaction||{})[e];r&&Gl(this,t,r,{apply:n,interactionType:e})}},{key:"transformType",value:function transformType(){return arguments.length?(this._transformType=arguments.length<=0?void 0:arguments[0],this):this._transformType}},{key:"render",value:function render(){return this}},{key:"elemType",value:function elemType(){return"g"}},{key:"remove",value:function remove(){return this.store().unsubscribeAll(),Ao(this.mount()).remove(),this}},{key:"cachePoint",value:function cachePoint(e,t){if(null===e)return this;var n=this._pointMap;return!n[e]&&(n[e]=[]),n[e].push(t),this}},{key:"dataProps",value:function dataProps(){return arguments.length?(this._dataProps=arguments.length<=0?void 0:arguments[0],this):this._dataProps}},{key:"getIdentifiersFromData",value:function getIdentifiersFromData(e){var t=this.data().getData().schema,n=this.data().getFieldsConfig(),r=[[],[]],i=this.encodingFieldsInf(),a=i.xFieldType,o=i.yFieldType,u=i.xField,c=i.yField,s=[a,o].map(function(e){return e===ir.FieldType.MEASURE}),l=tf(s,2),f=l[0],h=l[1];if(t.forEach(function(t,i){var a=t.name;n[a].def.type===ir.FieldType.DIMENSION&&(r[0].push(a),r[1].push(e[i]))}),f&&h){var d,p,y=n[u].index,g=n[c].index;(d=r[0]).push.apply(d,[u,c]),(p=r[1]).push.apply(p,[e[y],e[g]])}return r}},{key:"getPlotSpan",value:function getPlotSpan(){return{x:0,y:0}}},{key:"getPlotPadding",value:function getPlotPadding(){return{x:0,y:0}}},{key:"getPointsFromIdentifiers",value:function getPointsFromIdentifiers(e){var t,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=n.getAllAttrs,i=n.getBBox;if(!this.data())return[];var a=void 0,o=void 0;if(e instanceof ar.a){var u=e.getData();a=u.schema.map(function(e){return e.name}),o=u.data}else a=e[0],o=e.slice(1,e.length);var c=this._points,s=this.data().getFieldsConfig(),l=(t=[]).concat.apply(t,function base_layer_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t2&&void 0!==arguments[2]?arguments[2]:{},r=Ao(n.event.target).data()[0];if(Di(r)){var i=r.datum,a=i.data,o=i.uid;return{id:this.getIdentifiersFromData(a,o),layerId:this.id()}}return null}},{key:"getPlotElementsFromSet",value:function getPlotElementsFromSet(e){return Ao(this.mount()).selectAll(this.elemType()).filter(function(t){return-1!==e.indexOf(t.datum.uid)})}},{key:"render",value:function render(e){var t=this,n=this.measurement(),r=n.height,i=n.width,a=this.config(),o=a.classPrefix,u=a.defClassName,c=a.minOuterRadius,s=a.innerRadius,l=a.outerRadius,f=a.cornerRadius,h=a.padAngle,d=a.padRadius,p=a.padding,y=a.transition,g=a.innerRadiusFixer,v=this.axes().size,m=this._store,b=m.get("transformedData"),_=r-p.top-p.bottom,x=i-p.left-p.right,w=Gi(u,this.id(),o),k=function getRadiusRange(e,t,n){var r=n.minOuterRadius,i=n.innerRadius,a=n.outerRadius,o=n.innerRadiusFixer;return[Math.max(i+o||0,r),a||Math.min(t,e)/2]}(x,_,{minOuterRadius:c,innerRadius:s,outerRadius:l,innerRadiusFixer:g}),C=this.axes().color,S=l||Math.min(_,x)/2,P=m.get("domain").radius,A=function rangeValueGetter(e){return function getRangeValue(e,t,n,r,i){var a=1,o=e.outerRadiusValue,u=e.sizeVal,c=i.domain(),s=i.getSize(u)/(c?i.range()[1]:i.config().value);return a*=(t[1]-t[0])/(n[1]-n[0]),(t[0]+(o-n[0])*a||r)*s}(e,k,P,S,v)},E=bf().innerRadius(s?Math.min(_/2,x/2,s):0).cornerRadius(f).padAngle(h).padRadius(d);this._chartWidth=x,this._chartHeight=_;var M=Eo(Ao(e),"g",[1],w[0]+"-group").classed(w[1]+"-group",!0).attr("transform","translate("+x/2+","+_/2+")"),O=[],T=0;return Eo(M,"g",b,""+w[0],{update:function tween(e){Eo(e,"path",function(e,t){return[{datum:e,index:t,arcFn:E,meta:{originalColor:C.getRawColor(e.colorVal),stateColor:{},colorTransform:{}}}]},w[0]+"-path").style("fill",function(e){return C.getColor(e.datum.colorVal)}).transition().duration(y.duration).attrTween("d",function(){for(var e=arguments.length,t=Array(e),n=0;n0&&e.forEach(function(e){var i=e[0].datum.startAngle,a=e[e.length-1].datum.endAngle,o=2*Math.PI*i/(2*Math.PI+i-a);e.forEach(function(e){var i=e.elem,a=e.datum;i.each(function(){var e=Ao(this);e.selectAll("path").transition().duration(t.duration).attrTween("d",function(){return function(e){var t=n(a);return a.outerRadius=t,r(ra()(a,{startAngle:o,endAngle:o,outerRadius:t})(e))}}).remove(),e.remove()})})})}(O,y,A,E),this}},{key:"getPointsFromIdentifiers",value:function getPointsFromIdentifiers(e){if(!this.data())return[];var t=e[0],n=e.slice(1,e.length),r=Ao(this.mount()).selectAll("path").data(),i=this.data().getFieldsConfig(),a=r.filter(function(e){var r=e.datum.data,a=e.datum.uid;return t.every(function(e,t){return e in i&&i[e].def.type===ir.FieldType.DIMENSION?-1!==n.findIndex(function(n){return n[t]===r[i[e].index]}):e!==nr.ROW_ID||-1!==n.findIndex(function(e){return e[t]===a})})})[0];if(a){var o=a.arcFn.centroid(a.datum);return[{x:o[0]+this._chartWidth/2,y:o[1]+this._chartHeight/2,width:2,height:2}]}return[]}}],[{key:"defaultConfig",value:function defaultConfig(){return yf}},{key:"formalName",value:function formalName(){return"arc"}}]),ArcLayer}(),xf=function drawText(e,t,n,r){var i=Ao(e).selectAll("g").data(t),a=i.enter().append("g").each(function(e){To(this,e.enter)}).merge(i),o=Lo(Ao(e),n.className),u=parseInt(o.fontSize,10);return r.setStyle(o),a.each(function(e){var t,n=Ao(this),i=e.update,a=e.text,o=e.color,c=e.textanchor,s=e.style,l=e.background;if(t=l.value){var f=l.padding,h=void 0,d=r.getOriSize(e.text),p=d.width,y=d.height,g=Eo(n,"rect",[1]);h="end"===c?p:"start"===c?0:p/2,To(g.node(),{x:i.x-h-f/2,y:i.y-u-f/2,width:p+f,height:y+f}),l&&Fo(g,{background:t})}var v=Eo(n,"text",function(e){return[e]}).text(a),m=v.node();s&&Fo(m,s),o&&Fo(m,{fill:o}),e.className&&v.classed(e.className,!0),To(m,i),v.attr("text-anchor",c)}),i.exit().remove(),i},wf={defClassName:"layer-text",classPrefix:"muze",className:"",transform:{type:"identity"},interaction:{highlight:[{type:"fill",intensity:[0,0,-15,0]}],fade:[{type:"fill",intensity:[0,0,15,0]}],focus:[{type:"fill",intensity:[0,0,15,0]}]},transition:{effect:"cubic",duration:1e3},encoding:{color:{},text:{value:"",background:{padding:10}}},states:{highlight:{className:"muze-layer-text-highlight"},fadeout:{className:"muze-layer-text-fadeout"},selected:{className:"muze-layer-text-selected"}}},kf=(n(27),function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function sliceIterator(e,t){var n=[],r=!0,i=!1,a=void 0;try{for(var o,u=e[Symbol.iterator]();!(r=(o=u.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){i=!0,a=e}finally{try{!r&&u.return&&u.return()}finally{if(i)throw a}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}()),Cf=function(){function defineProperties(e,t){for(var n=0;n4)}(r)?r:pa(r).size(i)(a),Eo(n,"path",function(e){return[e]}).attr("d",s)}else e.shape="circle",createShape(e,t)}(e,this)}),(t=c?t:t.transition().duration(c?0:i.duration)).attr("transform",function(e){return"translate("+e.update.x+","+e.update.y+")"}).each(function(e){var t=e.style,n=Ao(this);Xi(t,function(e){return n.style(e,t[e])}),n.attr("class",""+a),n.classed(e.className,!0)});var h=l.exit();c?h.remove():h.transition().ease(Wi[u]).duration(o).on("end",function(){Ao(this).remove()}).style("fill-opacity",0).style("stroke-opacity",0)},Af={defClassName:"layer-point",className:"",classPrefix:"muze",defColorStyle:"stroke",interaction:{highlight:[{type:"fill",intensity:[0,0,-20,0]}],fade:[{type:"fill",intensity:[0,0,20,0]}],focus:[{type:"fill",intensity:[0,0,20,0]}]},innerPadding:.1,nearestPointThreshold:10,transform:{type:"identity"},transition:{effect:"cubic",duration:1e3},encoding:{size:{value:30},color:{},shape:{value:"circle"},x:{},y:{},strokeOpacity:{value:.5},fillOpacity:{value:.5}},shapes:["circle","cross","diamond","square","star","wye","triangle"],sizes:[20,30,40,50,60,70]},Ef=(n(29),function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function sliceIterator(e,t){var n=[],r=!0,i=!1,a=void 0;try{for(var o,u=e[Symbol.iterator]();!(r=(o=u.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){i=!0,a=e}finally{try{!r&&u.return&&u.return()}finally{if(i)throw a}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}()),Mf=function(){function defineProperties(e,t){for(var n=0;n3&&void 0!==arguments[3]?arguments[3]:{},a=[],o=t.size,u=t.shape,c=t.color,s=t.x,l=t.y,f=o.field,h=o.value,d=u.field,p=s.field,y=l.field,g=n.size,v=n.shape,m=this.data().getFieldsConfig(),b=m[p]&&m[p].def.type===ir.FieldType.DIMENSION,_=m[y]&&m[y].def.type===ir.FieldType.DIMENSION,x=b?Bc.X:_?Bc.Y:null,w=c&&c.field,k=m[w]&&m[w].index,C=this._store.get("measurement"),S=m[d]&&m[d].index,P=m[f]&&m[f].index,A=n.color,E=i.offset,M=E.x,O=E.y,T=function _loop(i,o){var u=e[i],s=u._data,l=h instanceof Function?h(u,i):g.getSize(s[P]),f=v.getShape(s[S]),d=[Bc.X,Bc.Y].map(function(e){var r=null===u[e]?void 0:u[e],i=e===Bc.X?C.width:C.height;return t[e].field?n[e].getScaleValue(r):i/2}),p=Ef(d,2),y=p[0],m=p[1];y+=M,m+=O;var b=Wl({datum:u,index:i},{colorEncoding:c,colorAxis:A,colorFieldIndex:k}),_=b.color,w=b.rawColor,E={fill:_,stroke:_};if(!isNaN(y)&&!isNaN(m)){var T={enter:{x:y,y:m},update:{x:y,y:m},shape:f,size:Math.abs(l),meta:{stateColor:{},originalColor:w,colorTransform:{}},style:E,_data:s,_id:u._id,source:u._data,rowId:u._id};T.className=Xl(u,i,e,r),a.push(T),r.cachePoint(u[x],T)}},F=0,N=e.length;F=0?C:k))):(p=c===Nc||r[e]>=0?C:k,y=Math.abs(p-(c===Nc?S:r[e]>=0?k:C))),d=k}else p=0,y=f[i];return{enterSpace:g,enter:d,pos:p,space:y}}),jf=function resolveDimensions(e,t,n){var r={xAxis:n.x,yAxis:n.y},i=Nf("x",r,t,e),a=i.enterSpace,o=i.enter,u=i.pos,c=i.space,s=Nf("y",r,t,e),l=s.enterSpace;return{enter:{x:o,y:s.enter,width:a,height:l},update:{x:u,y:s.pos,width:c,height:s.space}}},If=function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function sliceIterator(e,t){var n=[],r=!0,i=!1,a=void 0;try{for(var o,u=e[Symbol.iterator]();!(r=(o=u.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){i=!0,a=e}finally{try{!r&&u.return&&u.return()}finally{if(i)throw a}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),Df=function(){function defineProperties(e,t){for(var n=0;n=k.x&&e<=k.width+k.x&&t>=k.y&&t<=k.height+k.y){c=w;break}c=null}var C=c&&c._data;return C&&(u=this.getIdentifiersFromData(C,c._id)),c?{dimensions:[c.update],id:u,layerId:this.id()}:c}},{key:"getPlotSpan",value:function getPlotSpan(){return this._plotSpan}}],[{key:"formalName",value:function formalName(){return"bar"}},{key:"defaultConfig",value:function defaultConfig(){return Ff}},{key:"defaultPolicy",value:function defaultPolicy(e,t){var n=rf.defaultPolicy(e,t),r=n.encoding.color.field,i=n.transform;return r&&(i.groupBy=r),n}}]),BarLayer}(),zf={defClassName:"layer-tick",className:"",classPrefix:"muze",interaction:{highlight:[{type:"stroke",intensity:[0,0,-15,0]}],fade:[{type:"stroke",intensity:[0,0,15,0]}],focus:[{type:"stroke",intensity:[0,0,15,0]}]},innerPadding:.1,transform:{type:"identity"},transition:{effect:"cubic",duration:1e3},encoding:{color:{},x:{},y:{},x0:{},y0:{},strokeOpacity:{value:.5},fillOpacity:{value:.5}},states:{highlight:{className:"muze-layer-tick-highlight"},fadeout:{className:"muze-layer-tick-fadeout"},selected:{className:"muze-layer-tick-selected"}}},Hf=function(e){var t=e.points,n=e.container,r=e.keyFn,i=e.className,a=Ao(n),o=a.selectAll("path").data(t,r),u=o.enter().append("path");return a.attr("class",i||""),u.each(function(e){var t=Ao(this),n=e.enter||{};Object.entries(n).forEach(function(e){return!isNaN(e[1])&&t.attr(e[0],e[1])})}),o.exit().remove(),o.merge(u).each(function(e){var t=Ao(this),n=e.update,r=e.style||{},i=void 0!==n.x0?n.x0:n.x,a=void 0!==n.y0?n.y0:n.y,o="M "+n.x+" "+n.y+" L "+i+" "+a;e.className&&t.classed(e.className,!0),t.attr("d",o),Object.entries(r).forEach(function(e){return t.style(e[0],e[1])})})},Vf=(n(33),function(){function defineProperties(e,t){for(var n=0;n3&&void 0!==arguments[3]?arguments[3]:{},i=[],a=Yl(n),o=a.xAxis,u=a.yAxis,c=this.data().getFieldsConfig(),s=this.encodingFieldsInf(),l=s.xField,f=s.yField,h=s.x0Field,d=s.y0Field,p=s.xFieldType,y=s.yFieldType,g=p===ir.FieldType.DIMENSION,v=y===ir.FieldType.DIMENSION,m=g?Bc.X:v?Bc.Y:null,b=t.color,_=b&&b.field,x=c[_]&&c[_].index,w=this._store.get("measurement"),k=n.color,C=r.offset,S=C.x,P=C.y,A=r.span,E=A.x,M=A.y,O=0,T=e.length;O0&&(n[0]=[].concat(field_sanitizer_toConsumableArray(n[0]),field_sanitizer_toConsumableArray(n[1])),n[1]=[]),{fields:n.map(function(e,t){return 1===t?r[t].concat(n[t]):n[t].concat(r[t])}),dimensions:[].concat(field_sanitizer_toConsumableArray(n[0]),field_sanitizer_toConsumableArray(n[1])),measures:[].concat(field_sanitizer_toConsumableArray(r[0]),field_sanitizer_toConsumableArray(r[1])),temporal:[].concat(field_sanitizer_toConsumableArray(i[0]),field_sanitizer_toConsumableArray(i[1])),categorical:[].concat(field_sanitizer_toConsumableArray(a[0]),field_sanitizer_toConsumableArray(a[1]))}}(i,n)}),r=Sh(n,2),i=r[0],a=r[1],o=i.fields,u=i.dimensions,c=i.measures,s=i.temporal,l=i.categorical,f=a.fields,h=a.dimensions,d=a.measures;return{rows:o,rowDimensions:u,rowMeasures:c,rowTemporalFields:s,rowCategoricalFields:l,columns:f,columnTemporalFields:a.temporal,columnCategoricalFields:a.categorical,columnDimensions:h,columnMeasures:d}},Eh=function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function sliceIterator(e,t){var n=[],r=!0,i=!1,a=void 0;try{for(var o,u=e[Symbol.iterator]();!(r=(o=u.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){i=!0,a=e}finally{try{!r&&u.return&&u.return()}finally{if(i)throw a}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),Mh=function(){function defineProperties(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:{},t=arguments[1],n=Jh(th,t.rows,e),r=Eh(n,2),i=r[0],a=r[1],o=Jh("column",t.columns,e),u=Eh(o,2),c=u[0],s=u[1];return this.axisFrom({row:a,column:s}),this.headerFrom({row:i,column:c}),this}}]),VisualEncoder}(),Th={linear:Qs,band:Js,temporal:nl,size:Ml,color:Cl,shape:jl},Fh={dimension:f.BAND,categorical:f.BAND,measure:f.LINEAR,temporal:f.TIME},Nh=function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function sliceIterator(e,t){var n=[],r=!0,i=!1,a=void 0;try{for(var o,u=e[Symbol.iterator]();!(r=(o=u.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){i=!0,a=e}finally{try{!r&&u.return&&u.return()}finally{if(i)throw a}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}();function encoder_helper_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t1?e.position="both":e.position=n.axisFrom()[a],r[o]=Ih(o,s[i],e,o===$f?l:f)}),r}},{key:"getFacetsAndProjections",value:function getFacetsAndProjections(e,t){for(var n=[],r=[],i=0,a=[],o=[],u=e[0],c=e[1],s=u.length,l=c.length,f=this.axisFrom(),h=0;hi)for(var g=i;g-1&&(r=[[b,b]],a.splice(_,1)),o.splice(0,1)}else{var x=a.length-1,w=a[x];r=[[w]];var k=Dh(o,w);k>-1&&(r=[[w,w]],o.splice(k,1)),a.splice(x,1)}return{facets:n=(n=[].concat(a,o)).filter(function(e,t,n){return t===n.findIndex(function(t){return t.toString()===e.toString()})}),projections:r}}},{key:"fieldSanitizer",value:function fieldSanitizer(e,t){return function get(e,t,n){null===e&&(e=Function.prototype);var r=Object.getOwnPropertyDescriptor(e,t);if(void 0===r){var i=Object.getPrototypeOf(e);return null===i?void 0:get(i,t,n)}if("value"in r)return r.value;var a=r.get;return void 0!==a?a.call(n):void 0}(CartesianEncoder.prototype.__proto__||Object.getPrototypeOf(CartesianEncoder.prototype),"fieldSanitizer",this).call(this,e,t)}},{key:"getRetinalFieldsDomain",value:function getRetinalFieldsDomain(e,t){var n=e.groupedModel,r={};for(var i in t)if({}.hasOwnProperty.call(t,i)){var a=t[i],o=a.field;if(!a.domain&&o){var u=Zh(n,o);r[o]=u}}return r}},{key:"serializeLayerConfig",value:function serializeLayerConfig(e){var t=[];return e.length&&e.forEach(function(e,n){var r=Gf.sanitizeLayerConfig(e);r.order=n,t.push(r)}),t}},{key:"getLayerConfig",value:function getLayerConfig(e,t){var n=[],r=e.columnFields,i=e.rowFields;return r.forEach(function(e){var r=e.toString();i.forEach(function(i){var a=[],o=i.toString(),u={x:{field:r},y:{field:o}},c=i.subtype(),s=function getDefaultMark(e,t){return"categorical"===e||"categorical"===t?"bar":"temporal"===e||"temporal"===t?"line":"point"}(e.subtype(),c),l=[{mark:s,def:{mark:s,encoding:u}}],f=function getLayerConfFromFields(e,t,n){return n.filter(function(n){var r,i,a,o=n instanceof Array?n:[n],u=(r=[]).concat.apply(r,encoder_helper_toConsumableArray(o.map(function(e){return e.encoding}).filter(function(e){return void 0!==e})));if(!u.length)return!0;var c=(i=[]).concat.apply(i,encoder_helper_toConsumableArray(u.map(function(e){return[e.x&&e.x.field,e.x0&&e.x0.field]}))).filter(function(e){return void 0!==e&&null!==e}),s=(a=[]).concat.apply(a,encoder_helper_toConsumableArray(u.map(function(e){return[e.y&&e.y.field,e.y0&&e.y0.field]}))).filter(function(e){return void 0!==e&&null!==e});if(!c.length&&!s.length)return!0;var l=!!c.length&&c.every(function(t){return-1!==e.indexOf(t)}),f=!!s.length&&s.every(function(e){return-1!==t.indexOf(e)});return c.length&&s.length?l&&f:l||f})}(e.getMembers(),i.getMembers(),t||[]);a=f.length?f.map(function(e){var t=na(na({},l[0].def),e),n=Gf.getSerializedConf(t.mark,t);return{mark:t.mark,order:t.order,def:n}}):l,n.push.apply(n,function cartesian_encoder_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);tt)for(var h=t;h0&&(e=na(e,t[0])),n.push(e)}),0===n.length&&(n=t),this.layers(n),n}},{key:"serializeLayerConfig",value:function serializeLayerConfig(e){var t=[];return e.length&&e.forEach(function(e){var n=Gf.getSerializedConf(e.mark,e);t.push({mark:e.mark,def:n})}),t}}],[{key:"type",value:function type(){return"polar"}}]),PolarEncoder}(),Hh=function(){function defineProperties(e,t){for(var n=0;n1&&void 0!==arguments[1]?arguments[1]:{},n=e.axisType,r=e.fieldsConfig,i=t.field,a=[],o=Th[n];return t.type=t.type?t.type:Qh(r,i||null),a.push(new o(t)),a}({axisType:e,fieldsConfig:t},n[e])}),r}},{key:"getLayerConfig",value:function getLayerConfig(e,t){var n=[];return t.forEach(function(t){var r=t;[nh,rh,ih].forEach(function(t){if(e[t]&&e[t].field){var n=r.def;r.def instanceof Array?n.forEach(function(n){n.encoding=n.encoding||{},!n.encoding[t]&&(n.encoding[t]={}),n.encoding[t].field=e[t].field}):(n.encoding=n.encoding||{},!n.encoding[t]&&(n.encoding[t]={}),n.encoding[t].field=e[t].field)}}),n.push(r)}),n}},{key:"setCommonDomain",value:function setCommonDomain(e){var t=e.domains,n=e.axes,r=e.encoding;return Object.entries(r).forEach(function(e){if(e[1]&&e[1].field){var r=e[0],i=e[1].field;i&&n[r].forEach(function(n){var r=t[i];!e[1].domain&&n.updateDomain(r)})}}),n}}],[{key:"type",value:function type(){return"retinal"}}]),RetinalEncoder}(),Uh=function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function sliceIterator(e,t){var n=[],r=!0,i=!1,a=void 0;try{for(var o,u=e[Symbol.iterator]();!(r=(o=u.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){i=!0,a=e}finally{try{!r&&u.return&&u.return()}finally{if(i)throw a}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),Wh=void 0;function group_utils_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t0?e[0].map(function(i,a){return new n({type:"header"},{labelManager:r}).source(function getHeaderText(e,t,n){var r="";if(t===n-1&&e.length>n){for(var i=t;i0&&void 0!==arguments[0]?arguments[0]:[];return new Vo(e)}([]),a=(i=i.data(n,r)).enter().append(t).merge(i);return i.exit()&&i.exit().remove(),a},nd=function getBorders(e,t){var n={top:!1,bottom:!1},r={left:!1,right:!1},i={top:!1,bottom:!1,left:!1,right:!1},a=e.rows,o=e.columns,u=e.values,c=Uh(a,2),s=c[0],l=c[1],f=Uh(o,2),h=f[0],d=f[1],p=t.fieldInfo(),y=p.rowDimensions,g=p.columnDimensions,v=p.rowTemporalFields,m=p.columnTemporalFields,b=p.columnMeasures,_=p.rowMeasures,x=y.length+g.length,w=_.length+b.length,k=v.length+m.length;if("polar"===t.constructor.type()){if(!x)return{showRowBorders:n,showColBorders:r,showValueBorders:i}}else if(!w&&!k&&x<=2)return{showRowBorders:n,showColBorders:r,showValueBorders:i};return n=function getRowBorders(e,t){var n={top:!1,bottom:!1};return(e.length>1||t.length>1)&&(n.top=!0,n.bottom=!0),n}(s,l),r=function getColumnsBorders(e,t){var n={left:!1,right:!1};return(e.length||t.length)&&(e[0]&&e[0].length>1||t[0]&&t[0].length>1)&&(n.left=!0,n.right=!0),n}(h,d),i=function getValueBorders(e,t){var n={top:!0,left:!0,bottom:!0,right:!0},r=[ah,oh],i=["top","bottom"];return e.forEach(function(e,t){e[0]&&e[0].length?n[r[t]]=!0:n[r[t]]=!1}),t.forEach(function(e,t){e.length?n[i[t]]=!0:n[i[t]]=!1}),n}([s,l],[h,d]),u.length>1&&(i.top=!0,i.bottom=!0),u.length&&u[0].length>1&&(i.left=!0,i.right=!0),{showRowBorders:n,showColBorders:r,showValueBorders:i}};function action_behaviour_map_defineProperty(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var rd=(action_behaviour_map_defineProperty(qh={},a.DRAG,{behaviours:[u.BRUSH],touch:!1}),action_behaviour_map_defineProperty(qh,a.HOVER,{behaviours:[u.HIGHLIGHT]}),action_behaviour_map_defineProperty(qh,a.LONGTOUCH,{behaviours:[u.SELECT],touch:!0}),action_behaviour_map_defineProperty(qh,a.TOUCHDRAG,{behaviours:[u.BRUSH],touch:!0}),action_behaviour_map_defineProperty(qh,a.CLICK,{behaviours:[u.SELECT],touch:!1}),qh),ad="config",od="data",ud="axes",cd="layerDef",sd="width",ld="height",fd="mount",hd="primaryXAxisUpdated",dd="primaryYAxisUpdated",pd="secondaryXAxisUpdated",yd="secondaryYAxisUpdated",gd="transform",vd="dataDomain",md="layersCreated",bd="fields",_d="timeDiffs",xd="layerAxisIndex";function src_helper_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t2&&void 0!==arguments[2]?arguments[2]:{},r=void 0,i=n.payload,a=n.selectionSet,o=n.propagationFields[t]||{},u=o.fields||[],c=o.append,s=i.criteria,l=e.context,f=l.cachedData()[0],h=l.id(),d=e.sideEffects(),p=e._behaviourEffectMap,y=a.mergedEnter.model,g=f.getFieldsConfig();i.sourceUnit=h,i.action=t,i.sourceCanvas=l.parentAlias();var v=e._propagationBehaviourMap[t]||t,m=[];null===s?r=null:Di(s)?(m=Object.keys(s||{}),r=y?y.project(m):null):(m=s[0],r=y?y.project(m):null);var b=l.facetByFields();if(null!==r&&u.length){var _=r.getData().schema.map(function(e){return e.name});r=function getModelWithFacetData(e,t){var n=e.getData(),r=n.schema,i=n.data,a=[],o=t[0].map(function(e){return{name:""+e,type:ir.FieldType.DIMENSION}}),u=t[1];return i.forEach(function(e){var t={};r.forEach(function(n,r){t[n.name]=e[r]}),o.forEach(function(e,n){t[e.name]=u[n]}),a.push(t)}),new ar.a(a,[].concat(data_propagator_toConsumableArray(r),data_propagator_toConsumableArray(o)))}(r,b),m=c?[].concat(data_propagator_toConsumableArray(_),data_propagator_toConsumableArray(u)):u,r=r.project(m)}var x=!1;m.length&&m.every(function(e){return g[e]&&g[e].def.type===ir.FieldType.MEASURE})&&(x=!0);var w=l.parentAlias();i.action=t;var k=e._actions.behavioural[v],C=!!k&&k.constructor.mutates(),S=function filterFn(e,t){var n=p[e.config.action],r=!e.config.groupId||n.some(function(e){return d[e.name||e].constructor.mutates()});return e.config.groupId!==t.groupId&&r},P=e._actions.behavioural[t],A=!!P&&P.constructor.mutates(),E={payload:i,action:t,criteria:r,isMutableAction:A,propagateInterpolatedValues:x,groupId:w,sourceId:A?w:h,filterFn:S,enabled:function enabled(e,n){return t===v||e.payload.sourceCanvas===n.context.parentAlias()}};f.propagate(r,E,!0),t!==v&&(E={payload:i,sourceId:C?w:h,criteria:r,isMutableAction:C,propagateInterpolatedValues:x,action:v,groupId:w,applyOnSource:t===v,enabled:function enabled(e,t){return e.payload.sourceCanvas!==t.context.parentAlias()},filterFn:S},f.propagate(r,E,!0,{filterImmutableAction:function filterImmutableAction(e,t){return e.groupId!==t.groupId}}))},Xd=function(){function defineProperties(e,t){for(var n=0;n1){var u=r[0].config();if("linear"===r[0].constructor.type()){if(u.alignZeroLine){r.forEach(function(e){return e.config({nice:!1})});var c=function getAdjustedDomain(e,t){var n=e[0]/(e[0]-t[0]),r=e[1]/(e[1]-t[1]),i=!1;return t[0]>0&&t[1]>0&&t[1]>0&&e[1]>0&&(i=!0,t[0]=0,t[1]=0),t[0]<0&&t[1]<0&&t[1]<0&&e[1]<0&&(i=!0,e[0]=0,e[1]=0),i||n===r||(n1&&void 0!==arguments[1]?arguments[1]:{},n=[],r=e;if(null===e)return[];var i=this.layers(),a=i.length;Di(e)&&(r=[Object.keys(e)],r=[].concat(visual_unit_toConsumableArray(r),visual_unit_toConsumableArray(function transposeArray(e){return e[0].map(function(t,n){return e.map(function(e){return e[n]})})}(Object.values(e)))));for(var o=0;o1&&void 0!==arguments[1]?arguments[1]:[]].map(function(e){return e.reduce(function(e,t){return e=[].concat(matrix_model_toConsumableArray(e),matrix_model_toConsumableArray(t.getMembers()))},[])})},ep=function createSelectedDataModel(e,t,n){return e.select(function(e){return t.every(function(t,r){return e[t].value===n[r]})})},tp=function uniqueKeyGenerator(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:[],i=t.facets,a=t.dataModel,o=t.uniqueValues;if(i[n+1]){var u=i[n];o.forEach(function(t){var o=a.select(function(e){return e[u].value===t}),c=Zh(o,i[n+1]);uniqueKeyGenerator(e,{facets:i,dataModel:o,uniqueValues:c},n+1,[].concat(matrix_model_toConsumableArray(r),[t]))})}else o.forEach(function(t){e.push([].concat(matrix_model_toConsumableArray(r),[t]))})},np=function projectRows(e,t){var n=t.allColumnProjections,r=t.rowProjections,i=t.optionalProjections;return r.length>0?r.map(function(t){var r=Jd(t,n),a=Zd(r,2),o=a[0],u=a[1];return e.project([].concat(matrix_model_toConsumableArray(o),matrix_model_toConsumableArray(u),matrix_model_toConsumableArray(i)))}):[e]},rp=function pushToMatrix(e,t){var n,r=[],i=e.matrix,a=e.datamodel,o=e.facetInfo,u=e.fieldInfo,c=u.rowProjections,s=u.colProjections,l=u.optionalProjections,f=o.rowIndex,h=o.columnIndex,d=c[f%c.length]||[];s.length>0?r=s.map(function(e,n){var r=Jd(e,d),i=Zd(r,2),u=i[0],c=i[1],p=a.project([].concat(matrix_model_toConsumableArray(u),matrix_model_toConsumableArray(c),matrix_model_toConsumableArray(l))),y={rowFields:d,columnFields:e},g={rowIndex:f,columnIndex:h*s.length+n};return t(p,{projections:y,indices:g},o)}):r=[t(a,{projections:{rowFields:d,columnFields:[]},indices:{rowIndex:f,columnIndex:h}},o)];i[f]=i[f]||[],(n=i[f]).push.apply(n,matrix_model_toConsumableArray(r))},ip=function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function sliceIterator(e,t){var n=[],r=!0,i=!1,a=void 0;try{for(var o,u=e[Symbol.iterator]();!(r=(o=u.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){i=!0,a=e}finally{try{!r&&u.return&&u.return()}finally{if(i)throw a}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}();function cell_creator_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t0?d.length:1):(a=g,o=p.length>0?p.length:1),s.length&&f===u&&l&&a.length){var h={axis:l,length:o,type:u},v=[];i<2?(h.keys=a,h.facetConfig=c.rows,v=up(h,r,t,n)):(h.facetConfig=c.columns,h.keys=a[0].map(function(e,t){return a.map(function(e){return e[t]})}),v=up(h,r,t,n)),r[u+"Headers"]=v}else r[u+"Headers"]=null}),r},sp=function computeMatrices(e,t){var n=e.resolver,r=e.datamodel,i=e.componentRegistry,a=e.encoders,o=t.globalConfig,u=t.selection,c=t.transform,s=o.autoGroupBy,l=n.dependencies().smartlabel,f=r.getFieldsConfig(),h=n.layerConfig(),d=n.registry(),p=n.horizontalAxis().fields,y=n.verticalAxis().fields,g=n.optionalProjections(t,h),v=n.getAllFields(),m={normalizedColumns:y,normalizedRows:p,facetsAndProjections:v,layers:h,fieldMap:f,otherEncodings:g,encoders:a,facetConfig:o.facetConfig||{},axisFrom:o.axisFrom||{},selection:u},b={GeomCell:n.getCellDef(d.GeomCell),AxisCell:n.getCellDef(d.AxisCell),BlankCell:n.getCellDef(d.BlankCell),TextCell:n.getCellDef(d.TextCell)},_=Yh(p),x=Yh(y);n.colCells({}),n.rowCells({}),n.datamodelTransform(c||{}),n.resetSimpleAxes();var w={exitCellMap:n.cacheMaps().entryCellMap,entryCellMap:new Map};n.cacheMaps(w);var k={config:o,suppliedLayers:a.simpleEncoder.serializeLayerConfig(n.layerConfig()),resolver:n,cell:b.GeomCell,encoder:a.simpleEncoder,newCacheMap:w,detailFields:t.detail},C=r.getFieldsConfig(),S=r;if(!s.disabled){var P=function extractFields(e,t){var n,r=Object.values(e).map(function(e){var t,n,r=(t=[]).concat.apply(t,group_utils_toConsumableArray(e));return(n=[]).concat.apply(n,group_utils_toConsumableArray(r.map(function(e){return e instanceof _h?e.getMembers():e})))});return(n=[]).concat.apply(n,group_utils_toConsumableArray(r).concat(group_utils_toConsumableArray(t)))}(v,function getFieldsFromSuppliedLayers(e,t){var n,r=[],i=e.map(function(e){return e.encoding||{}});return r=(r=[].concat(group_utils_toConsumableArray(r),[(n=[]).concat.apply(n,group_utils_toConsumableArray(i.map(function(e){return Object.values(e).map(function(e){return e.field})})))])).filter(function(e){return t[e]&&t[e].def.type===ir.FieldType.DIMENSION})}(k.suppliedLayers,r.getFieldsConfig())),A=P.filter(function(e){return C[e]&&C[e].def.type===ir.FieldType.DIMENSION}),E=s.measures;S=r.groupBy(A.length?A:[""],E).project(P)}var M=function getMatrixModel(e,t,n){var r=[],i=[],a=[],o=[],u=[],c=[],s=t.rowFacets,l=t.colFacets;if(t.colProjections.forEach(function(e){o.push.apply(o,matrix_model_toConsumableArray(e))}),t.allColumnProjections=o,s.length>0){var f=s[0].toString(),h=Zh(e,f);tp(i,{facets:s,dataModel:e,uniqueValues:h}),i.forEach(function(n){var i,a=Jd(s),o=Zd(a,1)[0],u=ep(e,o,n);c.push([s,n]),(i=r).push.apply(i,matrix_model_toConsumableArray(np(u,t)))})}else{var d;(d=r).push.apply(d,matrix_model_toConsumableArray(np(e,t)))}if(r=r.length>0?r:[[]],l.length>0){var p=l.map(function(e){return""+e}),y=p[0],g=Zh(e,y);tp(a,{facets:p,dataModel:e,uniqueValues:g}),r.forEach(function(r,i){c[i]=c[i]||[[],[]],a.forEach(function(a,o){u[i]=u[i]||[];var s=r instanceof ar.a?r:e,f=ep(s,p,a),h={matrix:u,datamodel:f,facetInfo:{rowFacets:c[i],colFacets:[l,a],rowIndex:i,columnIndex:o},fieldInfo:t};rp(h,n)})})}else r.forEach(function(r,i){c[i]=c[i]||[[],[]];var a={matrix:u,datamodel:r||e,facetInfo:{rowFacets:c[i],colFacets:[[],[]],rowIndex:i,columnIndex:0},fieldInfo:t};rp(a,n)});var v=a.length>0?a[0].map(function(e,t){return a.map(function(e){return e[t]})}):a;return{matrix:u,rowKeys:i,columnKeys:v}}(S,v,n.valueCellsCreator(k));n.cacheMaps().exitCellMap.forEach(function(e){e.remove()}),n.cacheMaps().exitCellMap.clear(),n.valueMatrix(M.matrix),n.createUnits(i,t);var O=function mutateAxesFromMap(e,t){var n=null,r=null,i=e.xAxesMap,a=e.yAxesMap,o=t.x,u=t.y;return o&&o.forEach(function(e){var t=i.get(e);(n=n||[]).push(t)}),u&&u.forEach(function(e){var t=a.get(e);(r=r||[]).push(t)}),{xAxes:n,yAxes:r}}(n.cacheMaps(),n.axes()),T=O.xAxes,F=O.yAxes;n.axes({x:T,y:F});var N=function generateMatrices(e,t,n,r){var i=e.unitHeight,a=e.unitWidth,o=e.facetsAndProjections,u=e.normalizedRows,c=e.normalizedColumns,s=e.selection,l=e.axisFrom,f=e.facetConfig,h=e.encoders,d=cp({fields:{rows:u,columns:c},matrices:t,facetsAndProjections:o,selection:s,axisFrom:l,facetConfig:f,encoders:h},n,r),p=d.columnsPrimary,y=d.columnsSecondary,g=d.rowsPrimary,v=d.rowsSecondary,m=d.leftHeaders,b=d.topHeaders,_=d.bottomHeaders,x=d.rightHeaders,w=[g,v,p,y].map(function(e){return e?e.getObjects():[]}),k=ip(w,4),C=k[0],S=k[1],P=k[2],A=k[3],E=[m,x].map(function(e){return e?e.getObjects().map(function(e){return e.getObjects()}):[]}),M=ip(E,2),O=M[0],T=M[1],F=O.length?O.map(function(e,t){return C[t]=C[t]?[C[t]]:[],[].concat(cell_creator_toConsumableArray(e),cell_creator_toConsumableArray(C[t]))}):C?C.map(function(e){return[e]}):[],N=S.length?S.map(function(e,t){return[e].concat(cell_creator_toConsumableArray(T[t]||[]))}):T.length?T.map(function(e){return[].concat(cell_creator_toConsumableArray(e))}):[],j=[];b&&b.getObjects().forEach(function(e){e.getObjects().forEach(function(e,t){j[t]=j[t]||[],j[t].push(e)})});P.length&&j.push(P);var I=[];A.length&&I.push(A);var D=I.length;_&&_.getObjects().forEach(function(e){e.getObjects().forEach(function(e,t){I[t+D]=I[t+D]||[],I[t+D].push(e)})});if(!F.length&&!N.length){var L=new n.BlankCell;L.setAvailableSpace(a,i),F=[[L]]}if(!(j.length||I.length&&I[0].length)){var R=new n.BlankCell;R.setAvailableSpace(a,i),I=[[R]]}return{rows:[F,N],columns:[j,I],selectionObj:d}}(m,{valuesMatrix:M,axesMatrix:n.axes()},b,l),j=N.rows,I=N.columns,D=N.selectionObj;return n.rowMatrix(j),n.columnMatrix(I),{rows:n.rowMatrix(),columns:n.columnMatrix(),values:n.valueMatrix(),isColumnSizeEqual:x,isRowSizeEqual:_,selection:D,dataModels:{groupedModel:S,parentModel:r}}},lp=function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function sliceIterator(e,t){var n=[],r=!0,i=!1,a=void 0;try{for(var o,u=e[Symbol.iterator]();!(r=(o=u.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){i=!0,a=e}finally{try{!r&&u.return&&u.return()}finally{if(i)throw a}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),fp=function(){function defineProperties(e,t){for(var n=0;n0?d[0].map(b):[],right:p.length>0?p[0].map(b):[]},w=[ah,oh].map(function(e){return g.map(function(t,n){return n===g.length-1?_[e]:x[e]})}),k=lp(w,2),C=k[0],S=k[1];if(0===g.length){var P=[ah,oh].map(function(e){return v.map(function(t,n){return 0===n?_[e]:x[e]})}),A=lp(P,2);r=A[0],i=A[1]}else r=v.map(function(){return d.length>0?d[0].map(b):[]}),i=v.map(function(){return p.length>0?p[0].map(b):[]});return s.notify({client:[C,S,r,i],action:"initialized",formalName:"facet-headers"}),{topLeft:C,topRight:S,bottomLeft:r,bottomRight:i}}},{key:"getMatrices",value:function getMatrices(e,t,n,r){return sp({datamodel:e,componentRegistry:n,encoders:r,resolver:this},t)}}]),MatrixResolver}(),dp=function(){function defineProperties(e,t){for(var n=0;n3&&void 0!==arguments[3]?arguments[3]:{},i=void 0,a=e.context.constructor.type(),o=r.payload,u=e.context.data(),c=e.context.metaData(),s=c.getData().schema[0].type,l={},f=e.context._id;l.action=Pp[t]||t,l.sideEffects=Ep[t],l.sourceCanvas=e.context.canvasAlias();var h=e._actions.behavioural[l.action].constructor.mutates();if(null===o.criteria)i=null;else{var d=n.mergedEnter,p=u.filter(function(e){return-1!==d.uids.indexOf(e.id)}).map(function(e){return e.value});if("step"===a||"discrete"===a&&"measure"===s){var y=Object.keys(o.criteria||{})[0];i=(p=u.filter(function(e){return-1!==d.uids.indexOf(e.id)}).map(function(e){return e.range})).length?c.select(function(e){for(var t=!1,n=0;n=p[n][0]&&e[y].value<=p[n][1]);n++);return t},{saveChild:!1}):null}else"gradient"===a?i=ca(c,o.criteria):p.length?i=function assembleModelFromIdentifiers(e,t){var n=[],r=void 0,i=e.getFieldsConfig();return t.length?function(){for(var e=t[0],a=e.length,o=0;o=s+l?[i.invert(s+l-c),i.invert(s+l)]:f-l1&&void 0!==arguments[1]?arguments[1]:{},i=t.config().classPrefix;e.mergedEnter.length||e.mergedExit.length?(n(e.mergedExit,r.className||i+"-legend-brighten",!1),n(e.mergedExit,r.className||i+"-legend-fadeout",!0),n(e.mergedEnter,r.className||i+"-legend-fadeout",!1)):n(e.completeSet,r.className||i+"-legend-fadeout",!1)},brighten:function brighten(e){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},i=t.config().classPrefix;e.mergedEnter.length||e.mergedExit.length?(n(e.mergedEnter,r.className||i+"-legend-brighten",!0),n(e.mergedExit,r.className||i+"-legend-brighten",!1)):n(e.completeSet,r.className||i+"-legend-brighten",!1)}}},Vp=function(){function defineProperties(e,t){for(var n=0;n2&&void 0!==arguments[2]?arguments[2]:{};(0,this._strategies[n.strategy||this._strategy])(e,this)}}],[{key:"formalName",value:function formalName(){return"highlighter"}}]),LegendHighlighter}(),Wp={config:{sanitization:function sanitization(e,t){return na(e._config||{},t)}},data:{},fieldName:{},legendContainer:{},measurement:{sanitization:function sanitization(e,t){var n=na(e._measurement,t);return["padding","border","margin"].forEach(function(e){n[e]=Math.min(n[e]>0?n[e]:0,.1*n.maxWidth,.1*n.maxHeight)}),n}},logicalSpace:{},metaData:{},range:{sanitization:function sanitization(e,t){return e.scale().range(t),e.resetLogicalSpace(),e.store().commit("range",t),t}},scale:{},smartTicks:{},store:{},title:{sanitization:function sanitization(e,t){return na(e._title||{},t)}}},qp="horizontal",Gp="vertical",Yp={height:30,width:30,maxWidth:1/0,maxHeight:1/0,padding:2,margin:2,border:1},Xp={text:"",orientation:function orientation(e){return"left"===e||"right"===e?"left":"center"}},Kp={classPrefix:"muze",formatter:{bounds:{lower:"less than",upper:"more than"}},item:{text:{orientation:"right",width:10,formatter:function formatter(e){return e}},icon:{className:"legend-icon",height:20,width:20,color:"rgba(0,0,0,.5)",type:"square"}}},$p=function ICON_MAP(e){return e&&"string"==typeof e?pa(e):e};function legend_helper_defineProperty(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var Qp=function getScaleInfo(e){var t=e.constructor.type();return{scaleType:t,domain:e.uniqueValues(),steps:e.config().stops||1,scaleFn:Mp[t]}},Zp=function getInterpolatedData(e,t){for(var n=[],r=ia()(e[0],e[1]),i=0;i<=t;i++)n[i]=r(i/t);return n},Jp=function getDomainBounds(e,t,n){var r,i=t.scaleFn,a=t.scaleType,o=t.scale,u=n.domain,c=n.domainBounds,s=n.domainLeg,l=n.steps,f=u["lower"===e?0:u.length-1],h=l["lower"===e?0:l.length-1];return legend_helper_defineProperty(r={},a,"size"===a?o[i](f)*o.getScaleFactor():o[i](f)),legend_helper_defineProperty(r,"value",c[e]),legend_helper_defineProperty(r,"id","lower"===e?0:s.length+2),legend_helper_defineProperty(r,"range",[f,h]),r},ey=function(){function defineProperties(e,t){for(var n=0;n0?1.25*h.height:0,p=h.width,y=this.getLabelSpaces(s,c),g=function computeItemSpaces(e,t,n){var r=0,i=0,a={width:0,height:0},o=t.effPadding,u=t.titleWidth,c=t.labelSpaces,s=t.titleHeight,l=t.maxWidth,f=e.item,h=e.align,d=f.icon,p=f.text.orientation,y=[],g=[],v=0;return c.forEach(function(e,t){var c={width:0,height:0},s={width:0,height:0},l=n[t]||{};"left"===p||"right"===p?(e.width+=o,s.width=(l.size?2*Math.sqrt(l.size/Math.PI):d.width)+o,v=Math.max(s.width,v),c.width=e.width+v,e.height=Math.max(e.height,d.height)+o,s.height=e.height,c.height=e.height):(e.width=Math.max(e.width,l.size?2*Math.sqrt(l.size/Math.PI):d.width)+o,s.width=e.width,c.width=e.width,v=Math.max(s.width,v),e.height+=o,s.height=d.height+o,c.height=e.height+s.height),"horizontal"===h?r=Math.max(r,c.height):(r+=c.height,i=Math.max(i,c.width,u)+o),a={width:Math.max(c.width,a.width),height:Math.max(c.height,a.height)},y.push(c),g.push(s)}),y.forEach(function(e,t){"horizontal"===h?(e.height=r,g[t].width=v,"left"===p||"right"===p?(c[t].height=r,g[t].height=r,y[t].width=c[t].width+v):(c[t].width=v,y[t].width=v,c[t].width=v),i=Math.max(i+y[t].width,u)):(e.width=Math.max(i,l),"top"===p||"bottom"===p?(c[t].width=i,g[t].width=i,v=i):(g[t].width=v,y[t].width=c[t].width+v,c[t].width=a.width-v,i=Math.max(i,e.width,u)+o))}),{totalHeight:r+=s+o,totalWidth:i,itemSpaces:y,iconSpaces:g,maxItemSpaces:a,maxIconWidth:v}}(this.config(),{effPadding:s,titleWidth:p,labelSpaces:y,titleHeight:d,maxWidth:r,maxHeight:i},this.data()),v=g.totalHeight,m=g.totalWidth,b=g.itemSpaces,_=g.iconSpaces,x=g.maxItemSpaces,w=g.maxIconWidth;return this.measurement({width:Math.max(m,t)+f+l,height:Math.max(v,n)+f+l,labelSpaces:y,iconSpaces:_,itemSpaces:b,maxItemSpaces:x,maxIconWidth:w,titleSpaces:{width:Math.min(r,this.measurement().width)-f-l,height:d}}),this}},{key:"getTitleSpace",value:function getTitleSpace(){return this._labelManager.setStyle(Lo(Ao("body"),this.config().classPrefix+"-legend-title")),this._labelManager.getOriSize(this.title().text?this.title().text:"")}},{key:"renderTitle",value:function renderTitle(e){var t=this.measurement(),n=t.titleSpaces,r=t.border,i=t.padding;return function titleCreator(e,t,n,r){return Eo(e,"div",[1],r.classPrefix+"-legend-title").style("width","100%").style("height",n.height+"px").style("padding-left",n.padding+"px").style("padding-right",n.padding+"px").style("border-bottom-width",n.border+"px").style("text-align",t.orientation instanceof Function?t.orientation(r.position):t.orientation).text(t.text).node()}(e,this.title(),{height:n.height,border:r,padding:i},this.config())}},{key:"render",value:function render(){var e=this.firebolt(),t=this.config().classPrefix,n=this.measurement(),r=n.maxWidth,i=n.maxHeight,a=n.width,o=n.height,u=n.margin,c=n.border,s=Eo(Ao(this.mount()),"div",[1],t+"-legend-box");return s.classed(t+"-legend-box-"+this._id,!0),s.style("float","left"),s.style("width",Math.min(r,a)-2*u+"px").style("height",Math.min(i,o)-2*u+"px").style("margin",u+"px").style("border-width",c+"px"),this.legendContainer(s.node()),this.renderTitle(s),e.createSelectionSet(this.data().map(function(e){return e.id})),s}},{key:"getCriteriaFromData",value:function getCriteriaFromData(e){var t=this.fieldName();return"measure"===this.metaData().getData().schema[0].type?function simple_legend_defineProperty(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}({},t,e.range):[[t],[e.value]]}}],[{key:"create",value:function create(e){return new SimpleLegend(e)}},{key:"defaultConfig",value:function defaultConfig(){return Kp}},{key:"defaultMeasurement",value:function defaultMeasurement(){return Yp}}]),SimpleLegend}();function position_config_defineProperty(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var oy=(position_config_defineProperty(ty={},"horizontal",{datasets:function datasets(e){return{row:[1],column:e}},itemContainerMeasures:function itemContainerMeasures(e){var t=e.itemSpaces;return{row:{width:e.width+"px",padding:"0px"},column:{width:function width(e,n){return t[n].width+"px"},padding:"0px"}}},getStepSpacesInfo:function getStepSpacesInfo(e){var t=e.maxItemSpaces;return{iconHeight:e.height,iconWidth:t.width,stepPadding:{horizontal:!0,vertical:!1}}}}),position_config_defineProperty(ty,"vertical",{datasets:function datasets(e){return{row:e,column:function column(e){return[e]}}},itemContainerMeasures:function itemContainerMeasures(e,t){var n=e.width;return{row:{width:n+"px",padding:t.padding+"px"},column:{width:n+"px",padding:"0px"}}},getStepSpacesInfo:function getStepSpacesInfo(e){var t=e.maxItemSpaces,n=e.width;return{iconHeight:t.height,iconWidth:n,stepPadding:{horizontal:!1,vertical:!0}}}}),ty),uy=(position_config_defineProperty(ny={},"left",oy.vertical),position_config_defineProperty(ny,"right",oy.vertical),position_config_defineProperty(ny,"top",oy.horizontal),position_config_defineProperty(ny,"bottom",oy.horizontal),ny),cy=(position_config_defineProperty(ry={},"left","end"),position_config_defineProperty(ry,"right","start"),position_config_defineProperty(ry,"top","center"),position_config_defineProperty(ry,"bottom","center"),ry),sy=(position_config_defineProperty(iy={},"left",[Op,"shape"]),position_config_defineProperty(iy,"right",["shape",Op]),position_config_defineProperty(iy,"top",[Op,"shape"]),position_config_defineProperty(iy,"bottom",["shape",Op]),iy),ly=function createLegendSkeleton(e,t,n,r){var i,a,o,u,c=e.measurement(),s=c.margin,l=c.border,f=c.titleSpaces,h=c.width,d=c.height,p=c.maxWidth,y=c.maxHeight;a=d-(f.height+2*s+2*l),i=h-(2*s+2*l),o=y-(f.height+2*s+2*l),u=p-(2*s+2*l);var g=Eo(t,"div",[1],n+"-legend-body");return g.select("."+n+"-legend-overflow").remove(),u&&u4)}(u)?u:$p(u).size(o)(),Eo(a,"path",function(e){return[e]}).attr("d",l)}}return e[1]="circle",createShape(e,t,"circle")}(n,Eo(l,"g",[n[1]],i+"-legend-icon"),n[3]?"circle":"square",o,a).attr("transform","translate("+(u/2-c)+" "+a/2+")").attr("fill",n[2]||s):Eo(l,"rect",[n[1]],i+"-legend-icon").attr("x",0).attr("y",0).attr("width",u).attr("height",a).attr("fill",n[2]||s)},py=function(){function defineProperties(e,t){for(var n=0;na[a.length-1]&&t.push(i[1])):t=Zp(i,a-1),(t=[].concat(gradient_legend_toConsumableArray(new Set(t))).sort(function(e,t){return e-t})).map(function(n,i){var a,u=t[i];return gradient_legend_defineProperty(a={},r,"size"===r?e[o](n)*e.getScaleFactor():e[o](Math.floor(n))),gradient_legend_defineProperty(a,"value",+u.toFixed(2)),gradient_legend_defineProperty(a,"id",i),a}).filter(function(e){return null!==e.value})}},{key:"getLabelSpaces",value:function getLabelSpaces(e){this.config({item:{text:{orientation:this.config().position}}});var t=function createAxis(e){var t=e.data(),n=e.config().align,r=e._cells.AxisCell,i=new Qs({id:"legend-"+e._id,orientation:n===Gp?"right":"bottom",style:e._computedStyle,nice:!1,showAxisName:!1,tickValues:t.map(function(e){return e.value}),fixedBaseline:!1},{labelManager:e._labelManager});return i.domain(gy(t)),i.range([1,1]),(new r).source(i).config({margin:{left:0,bottom:0,top:0,right:0}})}(this),n=t.getLogicalSpace(),r={width:n.width-e,height:n.height-e},i=t.source().domain().length,a=new Array(i).fill(r);return this.axis(t),a}},{key:"getDrawingContext",value:function getDrawingContext(){return{svgContainer:this._legendGradientSvg}}},{key:"render",value:function render(){var e=this.firebolt(),t=function get(e,t,n){null===e&&(e=Function.prototype);var r=Object.getOwnPropertyDescriptor(e,t);if(void 0===r){var i=Object.getPrototypeOf(e);return null===i?void 0:get(i,t,n)}if("value"in r)return r.value;var a=r.get;return void 0!==a?a.call(n):void 0}(GradientLegend.prototype.__proto__||Object.getPrototypeOf(GradientLegend.prototype),"render",this).call(this,this.mount());return function renderGradient(e,t){var n,r,i=e.config(),a=i.align,o=i.classPrefix,u=i.item,c=e.data(),s=vy(t,o,c),l=s.legendContainer,f=s.legendGradSvg,h=s.legendGradCont,d=s.linearGradient,p=s.legendRect,y=e.axis().source().getAxisDimensions().tickLabelDim,g=e.measurement(),v=g.padding,m=g.margin,b=g.border,_=g.titleSpaces,x=g.maxHeight,w=g.maxWidth,k=g.height,C=g.width,S={};n=Math.floor(k-(_.height+2*m+2*b)),r=Math.floor(C-(2*m+2*b)),a===qp?(S.height=u.icon.height,S.width=r-2*v-y.width/2,d.attr("x2","100%").attr("y1","0%"),h.attr("transform","translate( "+y.width/2+" 0)"),my(e,l,n-u.icon.height-v,r-2*v-1),l.classed(o+"-overflow-x",C>w),Mo(l,{height:k+"px",width:Math.min(C,w)+"px",padding:v+"px"}),p.attr("height",S.height),p.attr("width",S.width-y.width/2)):(S.height=n-2*v-y.height/2,S.width=u.icon.width,d.attr("x2","0%").attr("y1","100%"),h.attr("transform","translate(0 "+y.height/2+")"),my(e,l,n-2*v-1,r-u.icon.width-2*v),l.classed(o+"-overflow-y",k>x),Mo(l,{height:Math.min(k,x)+"px",width:C+"px",padding:v+"px"}),p.attr("height",S.height-y.height/2),p.attr("width",S.width)),Mo(f,{height:S.height+"px",width:S.width+"px"}),Mo(p,{fill:"url(#linear-gradient)"}),f.attr("height",S.height),f.attr("width",S.width),e.measurement({gradientDimensions:S}),e._legendGradientSvg=f}(this,t),t.selectAll("div").style("float","left"),e.mapActionsAndBehaviour(),e.createSelectionSet(this.data().map(function(e){return e.id})),t}},{key:"getCriteriaFromData",value:function getCriteriaFromData(e){return[[this.fieldName()],[e.value]]}}],[{key:"create",value:function create(e){return new GradientLegend(e)}},{key:"type",value:function type(){return"gradient"}}]),GradientLegend}(),xy=function(){function defineProperties(e,t){for(var n=0;na[a.length-1]&&(c.upper=[u.bounds.upper+" "+a[a.length-1]])):t=Zp(i,a),t=(t=[].concat(step_legend_toConsumableArray(new Set(t))).sort(function(e,t){return e-t})).map(function(n,i){var a,u=null;return i0&&void 0!==arguments[0]?arguments[0]:{},t=this._registrableComponents,n=na(na({},function defaultPolicy(e){var t=e.map(function(e){return e.alias()});return{behaviours:{"*":function _(e){var n=e.sourceCanvas;return!n||-1!==t.indexOf(n)}}}}(t)),e);return t.forEach(function(e){e.firebolt().crossInteractionPolicy(n)}),this}}]),ActionModel}()),Ny={classPrefix:"muze",interaction:{sideEffect:"individual"},legend:{position:"right",color:{show:!0,padding:2,margin:2,border:1,height:30,width:30},shape:{show:!0,padding:2,margin:2,border:1,height:30,width:30},size:{show:!0,padding:2,margin:2,border:1,height:30,width:30}},showHeaders:!1,minWidth:100,minHeight:100,border:{style:"solid",color:"#d6d6d6",width:2,collapse:!0,spacing:0},autoGroupBy:{disabled:!1}},jy={data:{value:null,meta:{typeCheck:function typeCheck(e){return e instanceof ar.a}}},width:{value:0,meta:{sanitization:Qi,typeCheck:Number.isInteger}},height:{value:0,meta:{sanitization:Qi,typeCheck:Number.isInteger}},minUnitWidth:{value:50,meta:{sanitization:Qi,typeCheck:Number.isInteger}},minUnitHeight:{value:50,meta:{sanitization:Qi,typeCheck:Number.isInteger}},config:{value:null,meta:{typeCheck:"constructor",typeExpected:"Object",sanitization:function sanitization(e,t){var n=na({},t),r=na(n,Ny);return na(r,e)}}}},Iy="width",Dy="height",Ly="top",Ry="left",By="right",zy="bottom",Hy="center",Vy="rowLeft",Uy="rowRight",Wy="colBottom",qy="colTop",Gy="rowSpan",Yy="colSpan",Xy="rowRoot",Ky="columnRoot",$y=function(){function defineProperties(e,t){for(var n=0;n1)return e;var f=o[t-1];if(f&&f.valueOf()===e.valueOf()){var h=n[r-1];return h?h[t].valueOf()===h[t-1].valueOf()?null:e:null}return e}return e},ag=function calcRowSpan(e,t,n,r){var i=1;if(!e||"string"!=typeof e.valueOf())return 1;for(var a=!1;!a;)n[r+i]&&null===n[r+i][t]?i+=1:a=!0;return i},og=function calcColSpan(e,t,n,r){var i=1;if(!e||"string"!=typeof e.valueOf())return 1;for(var a=!1;!a;)null===n[r][t+i]?i+=1:a=!0;return i},ug=function mask(e,t){return e.map(function(n,r){if(t===Vy||t===Uy){for(var i=n.map(function(n,i){return ig(n,i,e,r,t)}),a=[],o=n.length-i.length,u=0;u1&&r.setAvailableSpace(0,r.availHeight()),Ao(this).style("height",r.availHeight()+"px"),n}),l.each(function(e){e.placeholder&&e.placeholder.render(this)}).exit().each(function(e){e.placeholder&&e.placeholder.remove()}),applyBorders(l,r.border,n,a)}})}function utils_defineProperty(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function utils_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t0?e[0]:e[1];return n?(r=e[0].length>0?[].concat(utils_toConsumableArray(e[0])):[],r=e[1].length>0?[].concat(utils_toConsumableArray(r),utils_toConsumableArray(e[1])):r):r=r.map(function(t,n){var r=[];return e[0].length>0&&(r=[].concat(utils_toConsumableArray(e[0][n]))),e[1].length>0&&(r=[].concat(utils_toConsumableArray(r),utils_toConsumableArray(e[1][n]))),r}),r},fg=function computeLogicalSpace(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments[1],n=arguments[2],r=t.isTransposed,i=void 0!==r&&r,a=t.unitMeasures,o=function getMeasureInfo(e){return e?{firstMeasure:Dy,secondMeasure:Iy}:{firstMeasure:Iy,secondMeasure:Dy}}(i),u=o.firstMeasure,c=o.secondMeasure,s=e.values,l=function getMinMeasures(e,t){return e?{height:0,width:t.width}:{height:t.height,width:0}}(i,a);if(s[0].key){var f,h=(utils_defineProperty(f={},u,0),utils_defineProperty(f,c,0),f);return s.forEach(function(e){var r=computeLogicalSpace(e,t,n);h[u]=Math.max(h[u],r[u],l[u]),h[c]+=+r[c]}),e.space=h,h}return function getLogicalSpace(e,t,n){var r,i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:[],a=t.firstMeasure,o=t.secondMeasure,u=0,c=0;return e.values.forEach(function(t){var r,s=0,l=0;t.forEach(function(e,t){e.logicalSpace(null);var r=e.getLogicalSpace();l=Math.max(l,+r[o],n[o]),i[t]=Math.max(i[t]||0,r[a]),s+=+i[t]}),c+=l,u=Math.max(u,s),e.space=(utils_defineProperty(r={},o,Math.ceil(c)),utils_defineProperty(r,a,Math.ceil(u)),r)}),utils_defineProperty(r={},o,c),utils_defineProperty(r,a,u),r}(e,{firstMeasure:u,secondMeasure:c},l,n)},hg=function extraCellsRemover(e,t,n){return e.slice(t,-n)},dg={config:{sanitization:function sanitization(e,t){return na(e._config||{},t)}},maxMeasures:{},availableSpace:{},logicalSpace:{}},pg={distribution:[],classPrefix:"muze",isDistributionEqual:!0,unitMeasures:{height:100,width:100,border:1},isTransposed:!1,facet:"primary",extraCellLengths:[]},yg=function(){function defineProperties(e,t){for(var n=0;n1&&void 0!==arguments[1]?arguments[1]:{};!function visual_matrix_classCallCheck(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,VisualMatrix),this._lastLevelKey=0,this._primaryMatrix=e[0]||[],this._secondaryMatrix=e[1]||[],this._maxMeasures=[],this._availableSpace={},Ji(this,dg);var n=Object.assign({},this.constructor.defaultConfig());this.config(na(n,t)),this._breakPointer=this.config().isTransposed?e[0].length:e[0].length>0?e[0][0].length:0,this._layoutMatrix=lg([e[0]||[],e[1]||[]],this.config()),this._tree={key:this.config().isTransposed?Ky:Xy,values:this.createTree()},this._logicalSpace=this.setLogicalSpace()}return yg(VisualMatrix,[{key:"primaryMatrix",value:function primaryMatrix(){return arguments.length?this:this._primaryMatrix}},{key:"secondaryMatrix",value:function secondaryMatrix(){return arguments.length?this:this._secondaryMatrix}},{key:"tree",value:function tree(){return arguments.length?this:this._tree}},{key:"createTree",value:function createTree(){var e=function createTree(e){var t={},n=0,r="primary",i=cg(),a=[],o=e._layoutMatrix,u=e.primaryMatrix(),c=e.secondaryMatrix(),s=e.config(),l=s.isTransposed,f=s.breakPage;if(l){if(r=0===u.length?"primary":0===c.length?"secondary":u.length>=c.length?"primary":"secondary",u.length>0){for(var h=0;h0){for(var d=u.length,p=c.length-1;p>0;p--)a.push(p+d);a.push(d),"primary"===r&&(n=d)}var y;a.forEach(function(e){var t=-1;return i.key(function(n){return t++,n[e].valueOf()+"-"+sg(t,f)})}),y=o[0].map(function(e,t){return o.map(function(e){return e[t]})}),t=i.entries(y)}else{if(r=0===u.length?"primary":0===c.length?"secondary":u.length>=c.length?"primary":"secondary",u.length>0){for(var g=0;g0){for(var v=u.length>0?u[0].length:0,m=c[0].length-1;m>0;m--)a.push(m+v);a.push(v),"primary"===r&&(n=v)}else n=u.length>0?u[0].length-1:0;a.forEach(function(e){var t=-1;return i.key(function(n){return t++,n[e].valueOf()+"-"+sg(t,f)})}),t=i.entries(o)}return{tree:t,lastLevelKey:n}}(this),t=e.tree,n=e.lastLevelKey;return this._lastLevelKey=n,t}},{key:"setLogicalSpace",value:function setLogicalSpace(){var e=this.config().isTransposed,t=this.tree();return function createMatrixEachLevel(e,t){if(e.values[0].key){var n=[];return e.values.forEach(function(e){t?createMatrixEachLevel(e,t).forEach(function(e,t){var r;n[t]=n[t]||[],(r=n[t]).push.apply(r,utils_toConsumableArray(e))}):n.push.apply(n,utils_toConsumableArray(createMatrixEachLevel(e,t)))}),e.matrix=n,n}return e.matrix=t?e.values[0].map(function(t,n){return e.values.map(function(e){return e[n]})}):e.values,e.matrix}(t,e),fg(t,this.config(),this.maxMeasures())}},{key:"getLogicalSpace",value:function getLogicalSpace(){return this.logicalSpace()}},{key:"setAvailableSpace",value:function setAvailableSpace(e,t){this.availableSpace({width:e,height:t});var n=this.tree(),r=this.populateMaxMeasures(Dy,n),i=this.populateMaxMeasures(Iy,n),a=this.calculateDepth(i,r);return this.viewableMatrix=this.createViewPortMatrix(a),this.viewableMeasures=this.redistribute(this.viewableMatrix,e,t),this}},{key:"populateMaxMeasures",value:function populateMaxMeasures(e,t){var n=this,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:[];if(i[r]=Math.max(i[r]||0,t.space[e]),t.values){var a=r+1;t.values.forEach(function(t){t.space&&(i=n.populateMaxMeasures(e,t,a,i))})}return i}},{key:"calculateDepth",value:function calculateDepth(e,t){var n=void 0,r=void 0,i=this.availableSpace(),a=i.height,o=i.width;for(n=0;n0&&void 0!==arguments[0]?arguments[0]:[],t=arguments[1],n=arguments[2],r=arguments[3],i=r._breakPointer,a=r.config().isTransposed,o=n.tree,u=n.layoutMatrix;if(0===t){var c=function breakMatrix(e,t,n){var r=[],i=[];return t?e.forEach(function(e,t){t>=n?i.push(e):r.push(e)}):e.forEach(function(e,t){e.forEach(function(e,a){a>=n?(i[t]=i[t]||[],i[t].push(e)):(r[t]=r[t]||[],r[t].push(e))})}),[r,i]}(o.matrix,a,i);return e.push({matrix:o.matrix,primaryMatrix:c[0],secondaryMatrix:c[1],space:o.space}),e}var s=t-1;return o.values.forEach(function(t){createMatrixInstances(e,s,{tree:t,layoutMatrix:u},r)}),e}(t,e,this.removeExtraCells(),this),t}},{key:"redistributeRowWise",value:function redistributeRowWise(e){var t,n,r=[],i=this.maxMeasures(),a=this.config(),o=a.isDistributionEqual,u=a.distribution,c=a.isTransposed,s=a.gutter,l=e.matrix,f=e.width,h=e.height,d=e.maxHeights,p=e.maxWidths;n=function spaceTakenByColumn(e,t){var n=0,r=0;return e.forEach(function(e){var i=e[t].getLogicalSpace();r=Math.max(r,i.width),n+=i.height}),{width:r,height:n}}(l,this._lastLevelKey).height;var y=i.reduce(function(e,t){return e+=t});return r=y>0?i.map(function(e){return e+e/y*(f-y)}):i.map(function(){return 0}),t=function getDistributedHeight(e){var t,n=0,r=0,i=e.isTransposed,a=e.distribution,o=e.availableHeight,u=e.height,c=e.isDistributionEqual,s=e.gutter,l=e.matrix,f=e.cIdx;a&&void 0!==a[0]&&(n=a.reduce(function(e,t){return e+=t})),s&&void 0!==s[0]&&(r=s.reduce(function(e,t){return e+=t})),t=o-Math.floor(o*r);var h=l.length;return l.map(function(r,o){var s=r[f].getLogicalSpace().height,l=s+s/u*(t-u);return i||(a.length>0&&h===a.length?l=t*a[o]/n:(c||0===e.height)&&(l=t/h)),Math.floor(l)})}({matrix:l,cIdx:this._lastLevelKey,height:n,availableHeight:h,isDistributionEqual:o,distribution:u,isTransposed:c,gutter:s}),p.push(r),d.push(t),{maxWidths:p,maxHeights:d}}},{key:"redistributeColumnWise",value:function redistributeColumnWise(e){var t=[],n=e.matrix,r=e.width,i=e.maxHeights,a=e.maxWidths,o=this.config().unitMeasures.border,u=function spaceTakenByRow(e){var t=0,n=0;return e.forEach(function(e){var r=e.getLogicalSpace();t=Math.max(t,r.height),n+=r.width}),{width:n,height:t}}(n[this._lastLevelKey]).width,c=function getDistributedWidth(e,t){var n=e.availableWidth,r=e.width,i=e.row,a=t.isDistributionEqual,o=t.isTransposed,u=t.distribution,c=0;return u&&u[0]&&(c=u.reduce(function(e,t){return e+=t})),i.map(function(e,t){var s=e.getLogicalSpace().width,l=s+s/r*(n-r);if(o)if(u.length>0)l=n*u[t]/c;else if(a||0===r){var f=i.length;l=n/f}return Math.floor(l)})}({row:n[this._lastLevelKey],width:u,availableWidth:r},this.config());n.forEach(function(e,n){return e.forEach(function(e,r){var i=e.getLogicalSpace().height;e.setAvailableSpace(c[r]-o,i),t[n]=Math.max(t[n]||0,e.getLogicalSpace().height)})}),i.length>0&&(t=t.map(function(e,t){return Math.max(e,i[0][t])})),i.push(t);for(var s=0;s=m&&(r[0][1][n[1]-m]=a[0],i[0][1]=(i[0][1]||0)+a[0]),n[1]===t._lastLevelKey&&(r[1][0][n[0]]=a[1],r[1][1][n[0]]=a[1])})}),{heights:g,widths:v,rowHeights:p,columnWidths:y}}}],[{key:"defaultConfig",value:function defaultConfig(){return pg}}]),VisualMatrix}(),vg=function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function sliceIterator(e,t){var n=[],r=!0,i=!1,a=void 0;try{for(var o,u=e[Symbol.iterator]();!(r=(o=u.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){i=!0,a=e}finally{try{!r&&u.return&&u.return()}finally{if(i)throw a}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}();function layout_helper_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t0&&(n=[].concat(layout_helper_toConsumableArray(w),layout_helper_toConsumableArray(P),layout_helper_toConsumableArray(O))),E.length>0&&(r=[].concat(layout_helper_toConsumableArray(C),layout_helper_toConsumableArray(E),layout_helper_toConsumableArray(F))),k.length>0&&k[0].length>0&&(i=k.map(function(e,t){return[].concat(layout_helper_toConsumableArray(w[t]),layout_helper_toConsumableArray(e),layout_helper_toConsumableArray(C[t]))})),T.length>0&&T[0].length>0&&(a=T.map(function(e,t){return[].concat(layout_helper_toConsumableArray(O[t]),layout_helper_toConsumableArray(e),layout_helper_toConsumableArray(F[t]))})),e.rowMatrix(new gg([n,r],{isDistributionEqual:s,distribution:h.rows,gutter:f.rows,unitMeasures:{width:v,height:g,border:d.width},breakPage:p.rows.map(function(e){return e+Math.max(w.length,C.length)}),extraCellLengths:[w.length,O.length]})),o=w.length>0?w[0].length:O.length>0?O[0].length:0,u=C.length>0?C[0].length:F.length>0?F[0].length:0,e.columnMatrix(new gg([i,a],{isDistributionEqual:l,distribution:h.columns,gutter:f.columns,isTransposed:!0,unitMeasures:{width:v,height:g,border:d.width},breakPage:p.columns,extraCellLengths:[o,u]})),e.centerMatrix(A),t}(this,e),this):function get(e,t,n){null===e&&(e=Function.prototype);var r=Object.getOwnPropertyDescriptor(e,t);if(void 0===r){var i=Object.getPrototypeOf(e);return null===i?void 0:get(i,t,n)}if("value"in r)return r.value;var a=r.get;return void 0!==a?a.call(n):void 0}(GridLayout.prototype.__proto__||Object.getPrototypeOf(GridLayout.prototype),"matrices",this).call(this,e)}},{key:"triggerReflow",value:function triggerReflow(){return function computeLayoutMeasurements(e){var t,n,r,i,a,o=e.rowMatrix(),u=e.columnMatrix(),c=e.centerMatrix(),s=e.measurement(),l=s.width,f=s.height,h=e.config().border,d=e.matrices(),p=d.top,y=d.bottom,g=function getMatrixMeasurement(e,t){return e?e.getLogicalSpace()[t]:0}(o,Iy),v=h.width,m=l-g-v;setMatrixMeasurement(u,Iy,m);var b=u.getViewableSpaces();bg(e,"column",b);var _=b[e.config().columnPointer],x=_.height.primary+_.height.secondary,w=f-x;setMatrixMeasurement(o,Dy,w);var k=o.getViewableSpaces();bg(e,"row",k);var C=(t=[]).concat.apply(t,computations_toConsumableArray(k.map(function(e){return e.rowHeights.primary}))),S=(n=[]).concat.apply(n,computations_toConsumableArray(k.map(function(e){return e.columnWidths.primary}))),P=(r=[]).concat.apply(r,computations_toConsumableArray(k.map(function(e){return e.columnWidths.secondary}))),A=u.getViewableSpaces(),E=(i=[]).concat.apply(i,computations_toConsumableArray(A.map(function(e){return e.columnWidths.primary}))),M=A[0].rowHeights.primary,O=(a=[]).concat.apply(a,computations_toConsumableArray(A.map(function(e){return e.rowHeights.secondary})));c.forEach(function(e,t){e.forEach(function(e,n){e.setAvailableSpace(E[n]-v,C[t]-v)})}),mg(p[0],S,M),mg(p[2],P,M),mg(y[0],S,O),mg(y[2],P,O)}(this),this.setViewInformation(),this}},{key:"gotoPage",value:function gotoPage(e,t){var n=e.toLowerCase(),r=this.getViewInformation().viewMatricesInfo[n+"Pages"],i=Math.min(Math.max(1,t),r);return this.config(function layout_defineProperty(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}({},n+"Pointer",i-1)),this.setViewInformation(),this.renderGrid(),this}},{key:"pages",value:function pages(e){var t=this.getViewInformation().viewMatricesInfo,n=e.toLowerCase();return{totalPages:t[n+"Pages"],currentPage:this.config()[n+"Pointer"]+1}}},{key:"setViewInformation",value:function setViewInformation(){var e=this.config(),t=e.rowPointer,n=e.columnPointer,r=e.border,i=function getViewMatrices(e,t,n){for(var r=e.rowMatrix(),i=e.columnMatrix(),a=e.centerMatrix(),o=e.matrices(),u=r.getViewableData(),c=i.getViewableData(),s={row:0,column:0},l=t-1;l>=0;l--){var f=Math.max(u[l].primaryMatrix.length,u[l].secondaryMatrix.length);s.row+=f}for(var h=n-1;h>=0;h--){var d=c[h],p=d.primaryMatrix,y=d.secondaryMatrix,g=Math.max(p[0]?p[0].length:0,y[0]?y[0].length:0);s.column+=g}o.top[1]=c[n].primaryMatrix,o.bottom[1]=c[n].secondaryMatrix,o.center[0]=u[t].primaryMatrix,o.center[2]=u[t].secondaryMatrix;var v=Math.max(o.center[0].length,o.center[2].length),m=Math.max(o.top[1][0]?o.top[1][0].length:0,o.bottom[1][0]?o.bottom[1][0].length:0);return o.center[1]=a.slice(s.row,s.row+v).map(function(e){return e.slice(s.column,s.column+m)}),{matrices:o,rowPages:u.length,columnPages:c.length}}(this,t,n),a=function getViewMeasurements(e){var t=e.rowMatrix(),n=e.columnMatrix(),r=e.measurement(),i=r.width,a=r.height,o=e.config(),u=o.columnPointer,c=o.rowPointer,s=t.getViewableSpaces()[c].width,l=s.primary,f=s.secondary,h=n.getViewableSpaces()[u].height,d=h.primary,p=h.secondary;return{viewWidth:[l,i-(l+f),f],viewHeight:[d,a-(d+p),p]}}(this);return a.border=r,this.viewInfo={viewMatricesInfo:i,layoutDimensions:a},this}},{key:"getViewInformation",value:function getViewInformation(){return this.viewInfo}},{key:"renderGrid",value:function renderGrid(e){if(this.mountPoint(e),!this.mountPoint())return this;var t=this.getViewInformation(),n=t.viewMatricesInfo,r=t.layoutDimensions;return function renderMatrices(e,t,n){var r=t.top,i=t.center,a=t.bottom,o=e.config().classPrefix,u=e.measurement().width,c=e.mountPoint();Eo(c,"div",[{type:Ly,matrix:r},{type:Hy,matrix:i},{type:zy,matrix:a}],o+"-grid-layout-row").each(function(e,t){var r=Ao(this);r.classed(o+"-grid-layout-row-"+t,!0),renderMatrix(e.matrix,r,e.type,n,o)}).style(Iy,Math.ceil(u)+"px")}(this,n.matrices,r),this}}],[{key:"defaultMeasurement",value:function defaultMeasurement(){return ng}},{key:"defaultConfig",value:function defaultConfig(){return tg}},{key:"create",value:function create(){return new GridLayout(null,null,this.defaultMeasurement(),this.defaultConfig())}}]),GridLayout}(),wg=function(){function defineProperties(e,t){for(var n=0;n0?o:i,v),P=Math.max(u>0?u:a,g),A=function createHeaders(e,t,n){var r=0,i={};return t>=200&&n>=200&&["title","subtitle"].forEach(function(t){var n=e[t](),a=function resolveTitleSubTitleContent(e){return"function"!=typeof e||e._sanitize?function escapeHTML(e){var t={"&":"&","<":"<",">":">",'"':""","'":"'","/":"/"};return(""+e).replace(/[&<>"'/]/g,function(e){return t[e]})}(e()):e()}(n[0]);if(a.length){var o=n[1];o.width=e.width(),o.content=a;var u=lv(o,t,e.dependencies().smartlabel,e[t+"Cell"]),c=u.height,s=u.cell;i[t+"Cell"]=s,e._composition[t]=s,r+=c+o.padding}}),{headerHeight:r,headers:i}}(e,S,P),E=A.headers,M=A.headerHeight,O=function createLegend(e,t,n,r){var i={height:n,width:r,headerHeight:t},a=e.config().legend,o=a.show,u=a.position;a.classPrefix=e.config().classPrefix;var c="left"===u||"right"===u?"vertical":"horizontal";return a.show=o?"vertical"===c&&r>200||"horizontal"===c&&n>200:o,a.align=c,fv(a,e,i,e.legends||[])}(e,M,S,P);e._composition.legend={},O.forEach(function(t){e._composition.legend[t.scaleType]=t.legend});var T=function getLegendSpace(e,t,n,r){var i={width:0,height:0};return e.map(function(e){return e.legend.measurement()}).forEach(function(e){var a,o;o=Math.min(e.width,e.maxWidth),a=Math.min(e.height,e.maxHeight),"horizontal"===t.align?i.width+o>r?(i.width=r,i.height+=a):(i.width+=o,i.height=Math.max(i.height,a)):i.height+a>n?(i.height=a,i.width+=o):(i.height+=a,i.width=Math.max(i.width,o))}),"horizontal"===t.align&&(i.width=r),i}(O,_,S,P),F="left"===k||"right"===k?T.width:0,N="top"===k||"bottom"===k?T.height:0,j={headers:E,legends:O,canvases:[e],rows:h,columns:d,values:p,cornerMatrices:c.cornerMatrices()},I={mountSpace:{height:i,width:a},headerHeight:M,legendSpace:T,canvasWidth:P,canvasHeight:S,width:P-F,height:S-M-N,minUnitHeight:e.minUnitHeight(),minUnitWidth:e.minUnitWidth()};return{layoutConfig:n=na(n,{classPrefix:m,showHeaders:b,border:na(c.metaData().border,e.config().border),layoutArrangement:C,legend:_,title:x,subtitle:w,isColumnSizeEqual:l,isRowSizeEqual:f}),components:j,measurement:I}},dv={position:"top",align:"left",padding:8},pv={position:"top",align:"left",padding:16};function canvas_local_options_defineProperty(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var yv=(canvas_local_options_defineProperty(ov={},"rows",{value:null,meta:{typeCheck:"constructor",typeExpected:"Array"}}),canvas_local_options_defineProperty(ov,"columns",{value:null,meta:{typeCheck:"constructor",typeExpected:"Array"}}),canvas_local_options_defineProperty(ov,"color",{value:null,meta:{typeCheck:"constructor",typeExpected:"Object",sanitization:function sanitization(e){return"string"==typeof e?{field:e}:e}}}),canvas_local_options_defineProperty(ov,"shape",{value:null,meta:{typeCheck:"constructor",typeExpected:"Object",sanitization:function sanitization(e){return"string"==typeof e?{field:e}:e}}}),canvas_local_options_defineProperty(ov,"size",{value:null,meta:{typeCheck:"constructor",typeExpected:"Object",sanitization:function sanitization(e){return"string"==typeof e?{field:e}:e}}}),canvas_local_options_defineProperty(ov,"detail",{value:[],meta:{typeCheck:"constructor",typeExpected:"Array"}}),canvas_local_options_defineProperty(ov,"layers",{value:null,meta:{typeCheck:"constructor",typeExpected:"Array"}}),canvas_local_options_defineProperty(ov,"transform",{value:null,meta:{typeCheck:"constructor",typeExpected:"Object"}}),canvas_local_options_defineProperty(ov,"mount",{value:null,meta:{sanitization:function sanitization(e){return"string"==typeof e?Ao(e).node():e}}}),ov),gv=(canvas_local_options_defineProperty(uv={},"title",{value:[null,null],meta:{typeCheck:["constructor","constructor"],typeExpected:["Function","Object"],spreadParams:!0,sanitization:[function(e){if("string"==typeof e){var n=function t(){return e};return n._sanitized=!0,n}return e},function(e){var t=na({},dv);return na(t,e)}]}}),canvas_local_options_defineProperty(uv,"subtitle",{value:[null,null],meta:{typeCheck:["constructor","constructor"],typeExpected:["Function","Object"],spreadParams:!0,sanitization:[function(e){if("string"==typeof e){var t=function sub(){return e};return t._sanitized=!0,t}return e},function(e){var t=na({},pv);return na(t,e)}]}}),uv),vv=function renderHeader(e,t,n,r){var i=r[n+"Cell"],a=e[""+n],o=a.position,u=a.align,c=a.padding,s=t.selectAll("."+e.classPrefix+"-inner-container").data([n]);s.exit().remove();var l=s.enter().append("div").merge(s);l.classed(e.classPrefix+"-inner-container",!0),i&&i.render(l.node()),l.selectAll("div").classed(e.classPrefix+"-inner-content",!0),l.style("width","100%"),a&&i&&l.style("float","left").style("text-align",u).style("padding-"+("top"===o?"bottom":"top"),c+"px")},mv=function renderComponents(e,t,n,r){var i=e.mount(),a=t.headers,o=t.legends,u=n.classPrefix,c=function getSkeletons(e,t,n){var r=t.layoutArrangement,i=t.classPrefix,a=r.headers,o=r.legends,u=n.canvasWidth,c=n.canvasHeight,s=Ao(e),l={},f=Eo(s,"div",[1],i+"-viz").style("width",u+"px").style("height",c+"px").selectAll("."+i+"-container").data(a);f.exit().remove();var h=f.enter().append("div").merge(f).attr("class",i+"-container").style("width",u+"px").style("padding","nullpx").style("margin",null).each(function(e){l[e]=Ao(this).classed(i+"-"+e+"-container",!0)}).selectAll("."+i+"-inner-container").data(function(e){return"group"===e?o:[]});return h.exit().remove(),h.enter().append("div").merge(h).attr("class",i+"-inner-container").style("width","auto").style("height","auto").each(function(e){l[e]=Ao(this).classed(i+"-"+e+"-container",!0)}),l}(i,n,r),s=c.title,l=c.legend,f=c.subtitle,h=c.layout,d=function prepareGridContainer(e,t,n,r){if(e){var i=t.height,a=t.width,o=Ao(e).selectAll("."+n+"-inner-content").data(["layout"],function(e){return e});o.exit().remove();var u=o.enter().append("div").merge(o).attr("class",n+"-inner-content").classed(n+"-grid-layout",!0).attr("id",n+"-grid-layout-"+r).style("height",i+"px").style("padding",null).style("width",Math.ceil(a)+"px"),c=u.selectAll("."+n+"-layout-grid-container").data(["layout2"]);c.exit().remove();var s=c.enter().append("div").merge(c);return s.classed(n+"-layout-grid-container",!0).attr("id",n+"-layout-grid-container-"+r).style("height",i+"px").style("width",Math.ceil(a)+"px"),{mount:s,container:u}}}(h.node(),r,u,e.alias()).mount,p=e.layout().getViewInformation().layoutDimensions.viewWidth[0];r.padding=p,function setLabelRotationForAxes(e){var t=0,n=e.xAxes()||[];!function(){for(var e=0;ev?(g++,m=0,v=y):g<0&&g++,i[g]=i[g]||[],v-=Math.min(t.measurement().height,v),m=Math.max(Math.min(t.measurement().width,t.measurement().maxWidth),m),i[g].push({legend:t,legendHeight:y,legendWidth:m})});var b=Eo(h,["div"],i,l+"-legend-section").each(function(e,t){return Ao(void 0).classed(l+"-legend-section-"+t,!0)}).classed(l+"-legend-vertical-section",!0).style("width",function(e){return e[0].legendWidth+"px"});Eo(b,["div"],function(e){return e},l+"-legend-components",{},function(e){return e.legend.id()}).each(function(e){e.legend.mount(this)}).style("width",function(e){return e.legendWidth+"px"})}else{var _=Eo(h,"div",[1],l+"-legend-section").classed(l+"-legend-horizontal-section",!0).classed(l+"-legend-section-0",!0).style("width",p+"px");Eo(_,"div",n,l+"-legend-components",{},function(e){return e.legend.id()}).each(function(e){e.legend.mount(this)}).style("width",function(e){return e.legend.measurement().width+"px"})}}(n,l,o,r),function shiftHeaders(e,t,n,r){var i=e.classPrefix,a=e.title,o=e.subtitle,u=e.legend,c=n.legendSpace;t+="left"===u.position?c.width:0,a&&Ao(r).select("."+i+"-title-container").style("width","left"===a.align?"calc(100% - "+t+"px":"100%").style("margin-left","left"===a.align?t+"px":0),o&&Ao(r).select("."+i+"-subtitle-container").style("width","left"===o.align?"calc(100% - "+t+"px":"100%").style("margin-left","left"===o.align?t+"px":0),Ao(r).select("."+i+"-legend-horizontal-section").style("margin-left",t+"px").style("width",c.width-t+"px").selectAll("."+i+"-legend-body, ."+i+"-legend-title").style("max-width",c.width-t+"px"),Ao(r).select("."+i+"-legend-vertical-section").style("margin-left",null).selectAll("."+i+"-legend-body, ."+i+"-legend-title").style("max-width",null)}(n,p,r,i)}),e.composition().visualGroup.matrixInstance().value.each(function(e){e.valueOf().parentContainer(h.node())})};function canvas_helper_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t","\"","'","/","title_maker_resolveTitleSubTitleContent","_createHeading","title_maker_createHeaders","createLegend","legend_maker_createLegend","legendSpace","getLegendSpace","legendInfo","legend_maker_getLegendSpace","legendWidth","legendHeight","canvases","mountSpace","TITLE_CONFIG","SUB_TITLE_CONFIG","localOptions","canvas_local_options_defineProperty","_localOptions","canvasOptions","_sanitized","_canvasOptions","sub","renderer_renderHeader","renderHeader","headerCell","cont","renderComponents","_getSkeletons","getSkeletons","innerContainer","layoutType","renderer_getSkeletons","prepareGridContainer","innerSel","renderer_prepareGridContainer","setLabelRotationForAxes","renderLegend","legendComponents","sectionComponents","legendMount","legWidth","legHeight","sections","currHeight","currWidth","leg","renderer_renderLegend","shiftHeaders","shifter","renderer_shiftHeaders","helper_setupChangeListener","setupChangeListener","allOptions","_allOptions","canvas_helper_toConsumableArray","equalityChecker","option","dispatchProps","_cachedProps","applyInteractionPolicy","policies","firebolt_defaultInteractionPolicy","defaultInteractionPolicy","isMeasure","canvas_firebolt_toConsumableArray","getFieldsFromChannel","colDim","fieldInf","unitFireBolt","unitColFacets","equals","unitRowFacets","propagateWith","defaultCrossInteractionPolicy","propagationCanvasAlias","propagationUnit","canvas_firebolt","GroupFireBolt","canvas_firebolt_classCallCheck","_interactionPolicy","_crossInteractionPolicy","changeBehaviourStateOnPropagation","changeSideEffectStateOnPropagation","canvas_canvas","Canvas","globalDependencies","canvas_classCallCheck","canvas_possibleConstructorReturn","_transactor","canvas_slicedToArray","initedComponents","initCanvas","register","_getRenderDetails","promises","all","getAxes","initialSettings","regEntry","COMPONENTS","SUBREGISTRIES","regObj","globalCache","defaultRegistry","overrideRegistryDefinitions","overrideRegistry","muze_muze","muze","_transactor2","muze_slicedToArray","env","globalStore","componentSubRegistryDef","settings","withSettings","enableChainedTransaction","transactionModel","transactionEndpoint","transactionItems","_slicedToArray","SmartlabelManager_default","SideEffects","standards","SurrogateSideEffect","SpawnableSideEffect","Behaviours","PersistentBehaviour","VolatileBehaviour","DataModel","muze_package","layerFactory","operators_namespaceObject","utils","require","lookupWhat","lookupDetails","lookupTarget","deps","__webpack_exports__"],"mappings":"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","file":"muze.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"muze\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"muze\"] = factory();\n\telse\n\t\troot[\"muze\"] = factory();\n})(window, function() {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 7);\n","!function(e,t){\"object\"==typeof exports&&\"object\"==typeof module?module.exports=t():\"function\"==typeof define&&define.amd?define(\"DataModel\",[],t):\"object\"==typeof exports?exports.DataModel=t():e.DataModel=t()}(window,function(){return function(e){var t={};function n(r){if(t[r])return t[r].exports;var i=t[r]={i:r,l:!1,exports:{}};return e[r].call(i.exports,i,i.exports,n),i.l=!0,i.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(e,\"__esModule\",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&\"object\"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,\"default\",{enumerable:!0,value:e}),2&t&&\"string\"!=typeof e)for(var i in e)n.d(r,i,function(t){return e[t]}.bind(null,i));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,\"a\",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p=\"\",n(n.s=1)}([function(e){e.exports={name:\"datamodel\",description:\"Relational algebra compliant in-memory tabular data store\",homepage:\"https://github.com/chartshq/datamodel\",version:\"2.0.2\",license:\"MIT\",main:\"dist/datamodel.js\",author:\"Charts.com \",keywords:[\"datamodel\",\"data\",\"relational\",\"algebra\",\"model\",\"muze\",\"fusioncharts\",\"table\",\"tabular\",\"operation\"],repository:{type:\"git\",url:\"https://github.com/chartshq/datamodel.git\"},contributors:[{name:\"Akash Goswami\",email:\"akash@charts.com\"},{name:\"Subhash Haldar\",email:\"subhash@charts.com\"},{name:\"Rousan Ali\",email:\"rousan@charts.com\",url:\"https://rousan.io\"},{name:\"Ujjal Kumar Dutta\",email:\"ujjal@charts.com\"}],dependencies:{\"d3-dsv\":\"^1.0.8\"},devDependencies:{\"babel-cli\":\"6.26.0\",\"babel-core\":\"^6.26.3\",\"babel-eslint\":\"6.1.2\",\"babel-loader\":\"^7.1.4\",\"babel-plugin-transform-runtime\":\"^6.23.0\",\"babel-preset-env\":\"^1.7.0\",\"babel-preset-es2015\":\"^6.24.1\",\"babel-preset-flow\":\"^6.23.0\",chai:\"3.5.0\",\"cross-env\":\"^5.0.5\",eslint:\"3.19.0\",\"eslint-config-airbnb\":\"15.1.0\",\"eslint-plugin-import\":\"2.7.0\",\"eslint-plugin-jsx-a11y\":\"5.1.1\",\"eslint-plugin-react\":\"7.3.0\",\"istanbul-instrumenter-loader\":\"^3.0.0\",jsdoc:\"3.5.5\",json2yaml:\"^1.1.0\",karma:\"1.7.1\",\"karma-chai\":\"0.1.0\",\"karma-chrome-launcher\":\"2.1.1\",\"karma-coverage-istanbul-reporter\":\"^1.3.0\",\"karma-mocha\":\"1.3.0\",\"karma-spec-reporter\":\"0.0.31\",\"karma-webpack\":\"2.0.3\",marked:\"^0.5.0\",mocha:\"3.4.2\",\"mocha-webpack\":\"0.7.0\",\"transform-runtime\":\"0.0.0\",webpack:\"^4.12.0\",\"webpack-cli\":\"^3.0.7\",\"webpack-dev-server\":\"^3.1.4\"},scripts:{test:\"npm run lint && npm run ut\",ut:\"karma start karma.conf.js\",utd:\"karma start --single-run false --browsers Chrome karma.conf.js \",build:\"webpack --mode production\",start:\"webpack-dev-server --config webpack.config.dev.js --mode development --open\",lint:\"eslint ./src\",\"lint-errors\":\"eslint --quiet ./src\",docs:\"rm -rf yaml && mkdir yaml && jsdoc -c jsdoc.conf.json\"}}},function(e,t,n){var r=n(2);e.exports=r.default?r.default:r},function(e,t,n){\"use strict\";n.r(t);var r={};n.r(r),n.d(r,\"DataFormat\",function(){return o}),n.d(r,\"DimensionSubtype\",function(){return u}),n.d(r,\"MeasureSubtype\",function(){return c}),n.d(r,\"FieldType\",function(){return f}),n.d(r,\"FilteringMode\",function(){return s});var i={};n.r(i),n.d(i,\"DSVArr\",function(){return Me}),n.d(i,\"DSVStr\",function(){return Ve}),n.d(i,\"FlatJSON\",function(){return Ye}),n.d(i,\"Auto\",function(){return Be});var a={};n.r(a),n.d(a,\"sum\",function(){return ct}),n.d(a,\"avg\",function(){return ft}),n.d(a,\"min\",function(){return st}),n.d(a,\"max\",function(){return lt}),n.d(a,\"first\",function(){return dt}),n.d(a,\"last\",function(){return pt}),n.d(a,\"count\",function(){return ht}),n.d(a,\"sd\",function(){return vt});var o={FLAT_JSON:\"FlatJSON\",DSV_STR:\"DSVStr\",DSV_ARR:\"DSVArr\",AUTO:\"Auto\"},u={CATEGORICAL:\"categorical\",TEMPORAL:\"temporal\",GEO:\"geo\"},c={DISCRETE:\"discrete\"},f={MEASURE:\"measure\",DIMENSION:\"dimension\"},s={NORMAL:\"normal\",INVERSE:\"inverse\",ALL:\"all\"};function l(e,t){e.length>0&&e.split(\",\").forEach(function(e){var n=e.split(\"-\"),r=+n[0],i=+(n[1]||n[0]);if(i>=r)for(var a=r;a<=i;a+=1)t(a)})}var d=function(){function e(e,t){for(var n=0;n=0;)o=e[a+1],-1!==r.indexOf(o)&&i.push({index:a,token:o});return i},m.formatAs=function(e,t){var n,r=h(e),i=m.findTokens(t),a=m.getTokenDefinitions(),o=String(t),u=m.TOKEN_PREFIX,c=void 0,f=void 0,s=void 0;for(s=0,n=i.length;s=0;d--)(f=a[d].index)+1!==l.length-1?(void 0===u&&(u=l.length),s=l.substring(f+2,u),l=l.substring(0,f+2)+RegExp.escape(s)+l.substring(u,l.length),u=f):u=f;for(d=0;d1){n=Math.abs(r[1]-r[0]);for(var i=2,a=r.length;i=y&&t.data=r.stops[r.stops.length-1]}).forEach(function(e){c[e.index]=r.stops[r.stops.length-1]+\"-\"+h}),r.stops.unshift(r.start),b=new Set(r.stops),dr.stops[r.stops.length-1]&&b.add(h),b=[].concat(function(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t3&&void 0!==arguments[3]&&arguments[3],i=arguments.length>4&&void 0!==arguments[4]?arguments[4]:G.CROSS,a=[],o=[],u=n||K,c=e.getFieldspace(),f=t.getFieldspace(),s=c.name,d=f.name,p=c.name+\".\"+f.name,h=L(c,f);if(s===d)throw new Error(\"DataModels must have different alias names\");return c.fields.forEach(function(e){var t=E({},e.schema);-1===h.indexOf(t.name)||r||(t.name=c.name+\".\"+t.name),a.push(t)}),f.fields.forEach(function(e){var t=E({},e.schema);-1!==h.indexOf(t.name)?r||(t.name=f.name+\".\"+t.name,a.push(t)):a.push(t)}),l(e._rowDiffset,function(e){var n=!1,p=void 0;l(t._rowDiffset,function(t){var l=[],v={};v[s]={},v[d]={},c.fields.forEach(function(t){l.push(t.data[e]),v[s][t.name]=t.data[e]}),f.fields.forEach(function(e){-1!==h.indexOf(e.schema.name)&&r||l.push(e.data[t]),v[d][e.name]=e.data[t]});var m=Ke(v[s]),y=Ke(v[d]);if(u(m,y)){var g={};l.forEach(function(e,t){g[a[t].name]=e}),n&&G.CROSS!==i?o[p]=g:(o.push(g),n=!0,p=e)}else if((i===G.LEFTOUTER||i===G.RIGHTOUTER)&&!n){var b={},_=c.fields.length-1;l.forEach(function(e,t){b[a[t].name]=t<=_?e:null}),n=!0,p=e,o.push(b)}})}),new ut(o,a,{name:p})}function z(e,t){var n=\"\"+e,r=\"\"+t;return nr?1:0}function X(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:z;return e.length>1&&function e(t,n,r,i){if(r===n)return t;var a=n+Math.floor((r-n)/2);return e(t,n,a,i),e(t,a+1,r,i),function(e,t,n,r,i){for(var a=e,o=[],u=t;u<=r;u+=1)o[u]=a[u];for(var c=t,f=n+1,s=t;s<=r;s+=1)c>n?(a[s]=o[f],f+=1):f>r?(a[s]=o[c],c+=1):i(o[c],o[f])<=0?(a[s]=o[c],c+=1):(a[s]=o[f],f+=1)}(t,n,a,r,i),t}(e,0,e.length-1,t),e}function Q(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);ta?\"desc\"===t?-1:1:0}}return r}function Z(e,t){var n=new Map,r=[];return e.forEach(function(e){var i=e[t];n.has(i)?r[n.get(i)][1].push(e):(r.push([i,[e]]),n.set(i,r.length-1))}),r}function ee(e,t,n){var r={label:e[0]};return t.reduce(function(t,r,i){return t[r]=e[1].map(function(e){return e[n[i].index]}),t},r),r}function te(e,t,n,r,i){var a={schema:[],data:[],uids:[]},o=(i=Object.assign({},{addUid:!1,columnWise:!1},i)).addUid,u=r&&r.length>0,c=[];if(n.split(\",\").forEach(function(t){for(var n=0;n=0;u--)i=t[u][0],a=t[u][1],(o=Ze(r,i))&&(S(a)?X(n,function(e,t){return a(e[o.index],t[o.index])}):j(a)?function(){var e=Z(n,o.index),t=a[a.length-1],i=a.slice(0,a.length-1),u=i.map(function(e){return Ze(r,e)});e.forEach(function(e){e.push(ee(e,i,u))}),X(e,function(e,n){var r=e[2],i=n[2];return t(r,i)}),n.length=0,e.forEach(function(e){n.push.apply(n,Q(e[1]))})}():(a=\"desc\"===String(a).toLowerCase()?\"desc\":\"asc\",X(n,$(o.type,a,o.index))));e.uids=[],n.forEach(function(t){e.uids.push(t.pop())})}(a,r),i.columnWise){var f=Array.apply(void 0,Q(Array(a.schema.length))).map(function(){return[]});a.data.forEach(function(e){e.forEach(function(e,t){f[t].push(e)})}),a.data=f}return a}function ne(e,t){var n={},r=[],i=[],a=[],o=e.getFieldspace(),u=t.getFieldspace(),c=o.fieldsObj(),f=u.fieldsObj(),s=o.name+\" union \"+u.name;if(!M(e._colIdentifier.split(\",\").sort(),t._colIdentifier.split(\",\").sort()))return null;function d(e,t,r){l(e._rowDiffset,function(e){var o={},u=\"\";i.forEach(function(n){var r=t[n].data[e];u+=\"-\"+r,o[n]=r}),n[u]||(r&&a.push(o),n[u]=!0)})}return e._colIdentifier.split(\",\").forEach(function(e){var t=c[e];r.push(E({},t.schema)),i.push(t.schema.name)}),d(t,f,!1),d(e,c,!0),new ut(a,r,{name:s})}function re(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t1&&void 0!==arguments[1]?arguments[1]:{},n={},r=t,i=e.getPartialFieldspace().getMeasure(),a=se.defaultReducer();return\"function\"==typeof t&&(a=t),Object.entries(i).forEach(function(e){var o=le(e,1)[0];\"string\"==typeof t[o]&&(r[o]=se.resolve(r[o])?se.resolve(r[o]):a),\"function\"!=typeof t[o]&&(r[o]=void 0),n[o]=r[o]||se.resolve(i[o].defAggFn())||a}),n}(e,n),o=e.getPartialFieldspace(),u=o.fieldsObj(),c=o.name,f=[],s=[],d=[],p={},h=[],v=void 0;Object.entries(u).forEach(function(e){var t=le(e,2),n=t[0],r=t[1];(-1!==i.indexOf(n)||a[n])&&(d.push(E({},r.schema)),\"measure\"===r.schema.type&&\"discrete\"!==r.schema.subtype?s.push(n):\"dimension\"!==r.schema.type&&\"discrete\"!==r.schema.subtype||f.push(n))});var m=0;return l(e._rowDiffset,function(e){var t=\"\";f.forEach(function(n){t=t+\"-\"+u[n].data[e]}),void 0===p[t]?(p[t]=m,h.push({}),f.forEach(function(t){h[m][t]=u[t].data[e]}),s.forEach(function(t){h[m][t]=[u[t].data[e]]}),m+=1):s.forEach(function(n){h[p[t]][n].push(u[n].data[e])})}),h.forEach(function(e){var t=e;s.forEach(function(n){t[n]=a[n](e[n])})}),r?(r.__calculateFieldspace(),v=r):v=new yt(h,d,{name:c}),v}function pe(e,t){var n=L(e.getFieldspace(),t.getFieldspace());return function(e,t){var r=!0;return n.forEach(function(n){r=!(e[n].value!==t[n].value||!r)}),r}}function he(e,t){var n={},r=[],i=[],a=[],o=e.getFieldspace(),u=t.getFieldspace(),c=o.fieldsObj(),f=u.fieldsObj(),s=o.name+\" union \"+u.name;if(!M(e._colIdentifier.split(\",\").sort(),t._colIdentifier.split(\",\").sort()))return null;function d(e,t){l(e._rowDiffset,function(e){var r={},o=\"\";i.forEach(function(n){var i=t[n].data[e];o+=\"-\"+i,r[n]=i}),n[o]||(a.push(r),n[o]=!0)})}return e._colIdentifier.split(\",\").forEach(function(e){var t=c[e];r.push(E({},t.schema)),i.push(t.schema.name)}),d(e,c),d(t,f),new yt(a,r,{name:s})}function ve(e,t,n){return W(e,t,n,!1,G.LEFTOUTER)}function me(e,t,n){return W(t,e,n,!1,G.RIGHTOUTER)}var ye=function(){function e(e,t){for(var n=0;nn&&(n=e)}),[t,n]}(this.data)}},{key:\"parse\",value:function(e){return e=parseFloat(e,10),Number.isNaN(e)?null:e}},{key:\"unit\",value:function(){return this.fieldUnit}},{key:\"scale\",value:function(){return this.fieldScale}},{key:\"numberFormat\",value:function(){var e=this.fieldNumberformat;return function(t){return e(t)}}},{key:\"defAggFn\",value:function(){return this.fieldDefAggFn}}]),t}(),Oe=function(){function e(e,t){for(var n=0;n=a?c=!0:(r=e.charCodeAt(o++))===Pe?f=!0:r===Ce&&(f=!0,e.charCodeAt(o)===Pe&&++o),e.slice(i+1,t-1).replace(/\"\"/g,'\"')}for(;o2&&void 0!==arguments[2]?arguments[2]:{},i=arguments[3],a=void 0;t!==Y?(a={op:t,meta:r,criteria:i},e._derivation.push(a)):(a=[].concat(Ge(i)),e._derivation.length=0,(n=e._derivation).push.apply(n,Ge(a)))},ze=function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=n.operation||q,i=n.filterByMeasure||!1,a=[];a=t.length?t.map(function(e){return function(e){var t=e.getData(),n=t.schema,r=e.getFieldsConfig(),a=e.getFieldspace().fieldsObj(),o=t.data,u=Object.values(r).reduce(function(e,t){return e[t.def.name]=a[t.def.name].domain(),e},{});return function(e){return!!o.length&&o.some(function(t){return n.every(function(n){if(!(n.name in e))return!0;var a=e[n.name].valueOf();if(i&&n.type===f.MEASURE)return a>=u[n.name][0]&&a<=u[n.name][1];if(n.type!==f.DIMENSION)return!0;var o=r[n.name].index;return t[o]===e[n.name].valueOf()})})}}(e)}):[function(){return!1}];var o=void 0;r===q?o=e.clone(!1,!1).select(function(e){return a.every(function(t){return t(e)})},{saveChild:!1,mode:s.ALL}):o=e.clone(!1,!1).select(function(e){return a.some(function(t){return t(e)})},{mode:s.ALL,saveChild:!1});return o},Xe=function(e,t,n,r){var i=e.clone(r.saveChild),a=function(e,t,n,r){var i=[],a=-1,o=void 0,u=function(e){return n(qe(t,e),e)};return r.mode===s.INVERSE&&(u=function(e){return!n(qe(t,e))}),l(e,function(e){u(e)&&(-1!==a&&e===a+1?(o=i.length-1,i[o]=i[o].split(\"-\")[0]+\"-\"+e):i.push(\"\"+e),a=e)}),i.join(\",\")}(i._rowDiffset,i.getPartialFieldspace().fields,t,n);return i._rowDiffset=a,i.__calculateFieldspace().calculateFieldsConfig(),r.saveChild&&We(i,U,{config:n},t),i},Qe=function(e,t,n,r){var i=e.clone(n.saveChild),a=t;return n.mode===s.INVERSE&&(a=r.filter(function(e){return-1===t.indexOf(e)})),i._colIdentifier=a.join(\",\"),i.__calculateFieldspace().calculateFieldsConfig(),n.saveChild&&We(i,H,{projField:t,config:n,actualProjField:a},null),i},$e=function(e,t,n,r){r=Object.assign(Object.assign({},xe),r);var a=i[r.dataFormat];if(!a||\"function\"!=typeof a)throw new Error(\"No converter function found for \"+r.dataFormat+\" format\");var o=a(t,r),u=Je(o,2),c=u[0],f=u[1],s=Fe(f,n,c),l=R.createNamespace(s,r.name);return e._partialFieldspace=l,e._rowDiffset=f.length&&f[0].length?\"0-\"+(f[0].length-1):\"\",e._colIdentifier=n.map(function(e){return e.name}).join(),e},Ze=function(e,t){for(var n=0;n2&&void 0!==arguments[2]?arguments[2]:{},i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},a=i.nonTraversingModel,o=i.excludeModels||[];t!==a&&((!o.length||-1===o.indexOf(t))&&t.handlePropagation(n,r),t._children.forEach(function(t){var a=et(n,t),o=Je(a,2),u=o[0],c=o[1];e(t,[u,c],r,i)}))},nt=function(e,t,n,r){var i=void 0,a=void 0,o=n.propagationNameSpace,u=n.propagateToSource,c=n.sourceId,f=r.propagateInterpolatedValues,s=[];if(null===e&&!0!==r.persistent)s=[{criteria:[]}];else{var l,d=Object.values(o.mutableActions);!1!==u&&(d=d.filter(function(e){return e.config.sourceId!==c}));var p=d.filter(function(e){return(r.filterFn||function(){return!0})(e,r)}).map(function(e){return e.config.criteria}),h=[];if(!1!==u){var v=Object.values(o.mutableActions);v.forEach(function(e){var t=e.config;!1===t.applyOnSource&&t.action===r.action&&t.sourceId!==c&&(h.push(e.model),(i=v.filter(function(t){return t!==e}).map(function(e){return e.config.criteria})).length&&s.push({criteria:i,models:e.model,path:function e(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];return null!==t._parent&&(n.push(t),e(t._parent,n)),n}(e.model)}))})}i=(l=[]).concat.apply(l,[].concat(Ge(p),[e])).filter(function(e){return null!==e}),s.push({criteria:i,excludeModels:[].concat(h,Ge(r.excludeModels||[]))})}var m=t.model,y=Object.assign({sourceIdentifiers:e,propagationSourceId:c},r),g=t.groupByModel;f&&g&&(a=ze(g,i,{filterByMeasure:f}),tt(g,a,y)),s.forEach(function(e){var t=ze(m,e.criteria),n=e.path;if(n){var r=function(e,t){for(var n=0,r=t.length;n0&&void 0!==arguments[0])||arguments[0],t=void 0;if(!1===(!(arguments.length>1&&void 0!==arguments[1])||arguments[1])){var n=this.getData({getAllFields:!0}),r=n.data,i=n.schema,a=r.map(function(e){var t={};return i.forEach(function(n,r){t[n.name]=e[r]}),t});t=new this.constructor(a,i)}else t=new this.constructor(this);return e&&this._children.push(t),t}},{key:\"project\",value:function(e,t){var n={mode:s.NORMAL,saveChild:!0};t=Object.assign({},n,t);var r=this.getFieldsConfig(),i=Object.keys(r),a=t.mode,o=e.reduce(function(e,t){return\"RegExp\"===t.constructor.name?e.push.apply(e,function(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t1&&void 0!==arguments[1]?arguments[1]:[];We(this,Y,null,t),this._parent=e,e._children.push(this)}}]),e}(),at=function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function(e,t){var n=[],r=!0,i=!1,a=void 0;try{for(var o,u=e[Symbol.iterator]();!(r=(o=u.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){i=!0,a=e}finally{try{!r&&u.return&&u.return()}finally{if(i)throw a}}return n}(e,t);throw new TypeError(\"Invalid attempt to destructure non-iterable instance\")}}(),ot=function(){function e(e,t){for(var n=0;n1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{saveChild:!0},r=\"\"+e.join(),i=[this,e,t],a=de.apply(void 0,i);return n.saveChild&&(this._children.push(a),We(a,V,{fieldsArr:e,groupByString:r,defaultReducer:se.defaultReducer()},t)),a._parent=this,a}},{key:\"sort\",value:function(e){var t=this.getData({order:\"row\",sort:e}),n=[t.schema.map(function(e){return e.name})].concat(t.data),r=new this.constructor(n,t.schema,{dataFormat:\"DSVArr\"});return r._sortingDetails=e,r}},{key:\"addField\",value:function(e){var t=e.fieldName();this._colIdentifier+=\",\"+t;var n=this._partialFieldspace;if(n.fieldsObj()[e.fieldName()]){var r=n.fields.findIndex(function(e){return e.name===t});r>=0&&(n.fields[r]=e)}else n.fields.push(e);return this.__calculateFieldspace().calculateFieldsConfig(),this}},{key:\"calculateVariable\",value:function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{saveChild:!0,replaceVar:!1},r=this.getFieldsConfig(),i=t.slice(0,t.length-1),a=t[t.length-1];if(r[e.name]&&!n.replaceVar)throw new Error(e.name+\" field already exists in model.\");var o=i.map(function(e){var t=r[e];if(!t)throw new Error(e+\" is not a valid column name.\");return t.index}),u=this.clone(),c=u.getFieldspace().fields,f=o.map(function(e){return c[e]}),s=[];l(u._rowDiffset,function(e){var t=f.map(function(t){return t.data[e]});s[e]=a.apply(void 0,function(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t1&&void 0!==arguments[1]?arguments[1]:{},n=arguments[2],r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},i=t.isMutableAction,a=t.sourceId,o=t.payload,u=function e(t){return t._parent?e(t._parent):t}(this),c=u._propagationNameSpace,f={groupByModel:function e(t){return t._parent&&t._derivation.find(function(e){return\"group\"!==e.op})?e(t._parent):t}(this),model:u};return n&&function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments[2],r=void 0,i=t.isMutableAction,a=t.criteria,o=t.action+\"-\"+t.sourceId;r=i?e.mutableActions:e.immutableActions,null===a?delete r[o]:r[o]={model:n,config:t}}(c,t,this),nt(e,f,{propagationNameSpace:c,sourceId:a},Object.assign({payload:o},t)),i&&function(e,t,n){var r=e.immutableActions;for(var i in r){var a=r[i].config,o=n.config.sourceId,u=!n.propConfig.filterImmutableAction||n.propConfig.filterImmutableAction(a,n.config);if(a.sourceId!==o&&u){var c=a.criteria;nt(c,t,{propagationNameSpace:e,propagateToSource:!1,sourceId:o},a)}}}(c,f,{config:t,propConfig:r}),this}},{key:\"on\",value:function(e,t){switch(e){case\"propagation\":this._onPropagation.push(t)}return this}},{key:\"unsubscribe\",value:function(e){switch(e){case\"propagation\":this._onPropagation=[]}return this}},{key:\"handlePropagation\",value:function(e,t){var n=this;this._onPropagation.forEach(function(r){return r.call(n,e,t)})}},{key:\"bin\",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=this.clone(),r=t.name||e+\"_binned\";if(this.getFieldsConfig()[r]||!this.getFieldsConfig()[e])throw new Error(\"Field \"+e+\" already exists.\");var i=I(this._partialFieldspace.fields.find(function(t){return t.name===e}),this._rowDiffset,t),a=Fe([i.data],[{name:r,type:f.MEASURE,subtype:\"discrete\",bins:{range:i.range,mid:i.mid}}],[r])[0];return n.addField(a),We(n,J,{measureName:e,config:t,binFieldName:r},null),n}}],[{key:\"Reducers\",get:function(){return se}}]),t}(),ct=oe.sum,ft=oe.avg,st=oe.min,lt=oe.max,dt=oe.first,pt=oe.last,ht=oe.count,vt=oe.std,mt=n(0);ut.Operators={compose:function(){for(var e=arguments.length,t=Array(e),n=0;n1&&void 0!==arguments[1]?arguments[1]:{saveChild:!0}).saveChild;return t.forEach(function(e){n=e(n),i.push.apply(i,function(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t1&&r.dispose(),n}},bin:function(){for(var e=arguments.length,t=Array(e),n=0;n2?(i=arguments.length<=0?void 0:arguments[0],n=arguments.length<=1?void 0:arguments[1],o=arguments.length<=2?void 0:arguments[2]):(i=null,n=arguments.length<=0?void 0:arguments[0],o=arguments.length<=1?void 0:arguments[1]),t=o(y),(e=r=new _(t.fn)).addDependencies.apply(e,P(t.dependencies)),this._addPropInModel(i,function(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}({},n,r)),this}},{key:\"_addPropInModel\",value:function(e,t){return this._graph.createNodesFrom(t,e),this}},{key:\"on\",value:function(e,t,r){var n,i=e instanceof Array?e:[e],o=this._graph.createElectricNodeOf(i,{type:\"CurrFrame\",fn:t});r&&(n=this._graph.stopPropagation().setPropagationOverride(\"nextFrame\")).resetNodeValue.apply(n,P(e));return o}},{key:\"next\",value:function(e,t,r){var n,i=e instanceof Array?e:[e],o=this._graph.createElectricNodeOf(i,{type:\"NextFrame\",fn:t});r&&(n=this._graph.stopPropagation().setPropagationOverride(\"currentFrame\")).resetNodeValue.apply(n,P(e));return o}},{key:\"lock\",value:function(){return this._lockFlag=!0,this._reqQ.length=0,this}},{key:\"unlock\",value:function(){return this._lockFlag=!1,this.setProp.apply(this,P(this._reqQ)),this._reqQ.length=0,this}},{key:\"prop\",value:function(){var e,t=void 0,r=void 0;switch(e=arguments.length){case 1:t=arguments.length<=0?void 0:arguments[0];break;case 2:t=arguments.length<=0?void 0:arguments[0],r=arguments.length<=1?void 0:arguments[1];break;default:return this}return 2===e?(this._lockFlag?this._reqQ.push([t,r]):this.setProp([t,r]),this):this._graph.getNodeValue(t)}},{key:\"setProp\",value:function(){for(var e,t=this,r=arguments.length,n=Array(r),i=0;i whenever a break is necessary. This is to recgonize one\n * generalized format independent of the implementation (canvas based solution, svg based solution). This method\n * converts the output of getSmartText().text to array of lines if the text is wrapped. It sets a named property\n * `lines` on the object passed as parameter.\n *\n * @param {Object} smartlabel - the object returned by getSmartText based on which line arr which to be formed.\n *\n * @return {Object} - The same object which was passed in the arguments. Also a named property `lines` is set.\n */\nSmartLabelManager.textToLines = function (smartlabel) {\n smartlabel = smartlabel || {};\n\n if (!smartlabel.text) {\n smartlabel.text = '';\n } else if (typeof smartlabel.text !== 'string') {\n smartlabel.text = smartlabel.text.toString();\n }\n\n smartlabel.lines = smartlabel.text.split(/\\n|/ig);\n return smartlabel;\n};\n\n// Saves all the instance created so far\nSmartLabelManager.store = {};\n\n// Calculates space taken by a character with an approximation value which is calculated by repeating the\n// character by string length times.\nSmartLabelManager.prototype._calCharDimWithCache = function (text, calculateDifference, length) {\n if (!this._init) {\n return false;\n }\n\n var size,\n csArr,\n tw,\n twi,\n cachedStyle,\n asymmetricDifference,\n maxAdvancedCacheLimit = this.options.maxCacheLimit,\n container = this._container,\n style = this.style || {},\n cache = this._advancedCache || (this._advancedCache = {}),\n advancedCacheKey = this._advancedCacheKey || (this._advancedCacheKey = []),\n cacheName = text + (style.fontSize || BLANK) + (style.fontFamily || BLANK) + (style.fontWeight || BLANK) + (style.fontStyle || BLANK),\n cacheInitName = text + 'init' + (style.fontSize || BLANK) + (style.fontFamily || BLANK) + (style.fontWeight || BLANK) + (style.fontStyle || BLANK);\n\n htmlSplCharSpace[text] && (text = htmlSplCharSpace[text]);\n\n if (!calculateDifference) {\n asymmetricDifference = 0;\n } else {\n if ((asymmetricDifference = cache[cacheInitName]) === undefined) {\n container.innerHTML = text.repeat ? text.repeat(length) : Array(length + 1).join(text); // jshint ignore:line\n tw = container.offsetWidth;\n\n container.innerHTML = text;\n twi = container.offsetWidth;\n\n asymmetricDifference = cache[cacheInitName] = (tw - length * twi) / (length + 1);\n advancedCacheKey.push(cacheInitName);\n if (advancedCacheKey.length > maxAdvancedCacheLimit) {\n delete cache[advancedCacheKey.shift()];\n }\n }\n }\n\n if (cachedStyle = cache[cacheName]) {\n csArr = cachedStyle.split(',');\n return {\n width: parseFloat(csArr[0], 10),\n height: parseFloat(csArr[1], 10)\n };\n }\n\n container.innerHTML = text;\n\n size = {\n height: container.offsetHeight,\n width: container.offsetWidth + asymmetricDifference\n };\n\n cache[cacheName] = size.width + ',' + size.height;\n advancedCacheKey.push(cacheName);\n if (advancedCacheKey.length > maxAdvancedCacheLimit) {\n delete cache[advancedCacheKey.shift()];\n }\n\n return size;\n};\n\n// Provide function to calculate the height and width based on the environment and available support from dom.\nSmartLabelManager.prototype._getWidthFn = function () {\n var contObj = this._containerObj,\n container = this._container,\n svgText = contObj.svgText;\n\n if (svgText) {\n return function (str) {\n var bbox, width;\n\n svgText.textContent = str;\n bbox = svgText.getBBox();\n width = bbox.width - SVG_BBOX_CORRECTION;\n if (width < 1) {\n width = bbox.width;\n }\n\n return width;\n };\n } else {\n return function (str) {\n container.innerHTML = str;\n return container.offsetWidth;\n };\n }\n};\n\n/*\n * Sets the style based on which the text's metrics to be calculated.\n *\n * @param {Object} style - The style object which affects the text size\n * {\n * fontSize / 'font-size' : MUST BE FOLLOWED BY PX (10px, 11px)\n * fontFamily / 'font-family'\n * fontWeight / 'font-weight'\n * fontStyle / 'font-style'\n * }\n *\n * @return {SmartLabelManager} - Current instance of SmartLabelManager\n */\nSmartLabelManager.prototype.setStyle = function (style) {\n if (!this._init) {\n return this;\n }\n\n var sCont;\n\n if (style === this.style && !this._styleNotSet) {\n return;\n }\n\n if (!style) {\n style = this.style;\n }\n\n slLib.setLineHeight(style);\n this.style = style;\n\n this._containerObj = sCont = this._containerManager.get(style);\n\n if (this._containerObj) {\n this._container = sCont.node;\n this._context = sCont.context;\n this._cache = sCont.charCache;\n this._lineHeight = sCont.lineHeight;\n this._styleNotSet = false;\n } else {\n this._styleNotSet = true;\n }\n\n return this;\n};\n\n/*\n * Decides whether ellipses to be shown if the node is truncated\n *\n * @param {Boolean} useEllipses - decides if a ellipses to be appended if the text is truncated. Default: false\n *\n * @return {SmartLabelManager} - Current instance of SmartLabelManager\n */\nSmartLabelManager.prototype.useEllipsesOnOverflow = function (useEllipses) {\n if (!this._init) {\n return this;\n }\n this._showNoEllipses = !useEllipses;\n return this;\n};\n\n/*\n * Get wrapped or truncated text if a bound box is defined around it. The result text would be separated by
\n * if wrapped\n *\n * @param {String} text - the subject text\n * @param {Number} maxWidth - width in px of the the bound box\n * @param {Number} maxHeight - height in px of the the bound box\n * @param {Boolean} noWrap - whether the text to be wrapped. Default false.\n *\n * @return {Object} - The metrics of the text bounded by the box\n * {\n * height : height of the wrapped text\n * width : width of the wrapped text\n * isTruncated : whether the text is truncated\n * maxHeight : Maximum height given\n * maxWidth : Maximum width given\n * oriText : Original text sent\n * oriTextHeight : Original text height\n * oriTextWidth : Original text width\n * text : SMART TEXT\n * }\n */\nSmartLabelManager.prototype.getSmartText = function (text, maxWidth, maxHeight, noWrap) {\n if (!this._init) {\n return false;\n }\n\n if (text === undefined || text === null) {\n text = '';\n } else if (typeof text !== 'string') {\n text = text.toString();\n }\n\n var len,\n trimStr,\n tempArr,\n tmpText,\n maxWidthWithEll,\n toolText,\n oriWidth,\n oriHeight,\n newCharIndex,\n nearestChar,\n tempChar,\n getWidth,\n initialLeft,\n initialTop,\n getOriSizeImproveObj,\n spanArr,\n x,\n y,\n minWidth,\n elem,\n chr,\n elemRightMostPoint,\n elemLowestPoint,\n lastBR,\n removeFromIndex,\n removeFromIndexForEllipses,\n hasHTMLTag = false,\n maxStrWidth = 0,\n lastDash = -1,\n lastSpace = -1,\n lastIndexBroken = -1,\n strWidth = 0,\n strHeight = 0,\n oriTextArr = [],\n i = 0,\n ellipsesStr = this._showNoEllipses ? '' : '...',\n lineHeight = this._lineHeight,\n context = this._context,\n container = this._container,\n sCont = this._containerObj,\n ellipsesWidth = sCont.ellipsesWidth,\n dotWidth = sCont.dotWidth,\n characterArr = [],\n dashIndex = -1,\n spaceIndex = -1,\n lastLineBreak = -1,\n fastTrim = function fastTrim(str) {\n str = str.replace(/^\\s\\s*/, '');\n var ws = /\\s/,\n i = str.length;\n while (ws.test(str.charAt(i -= 1))) {/* jshint noempty:false */}\n return str.slice(0, i + 1);\n },\n smartLabel = {\n text: text,\n maxWidth: maxWidth,\n maxHeight: maxHeight,\n width: null,\n height: null,\n oriTextWidth: null,\n oriTextHeight: null,\n oriText: text,\n isTruncated: false\n };\n\n getWidth = this._getWidthFn();\n\n // In some browsers, offsetheight of a single-line text is getting little (1 px) heigher value of the\n // lineheight. As a result, smartLabel is unable to return single-line text.\n // To fix this, increase the maxHeight a little amount. Hence maxHeight = lineHeight * 1.2\n if (maxHeight === lineHeight) {\n maxHeight *= 1.2;\n }\n\n if (container) {\n if (!documentSupport.isBrowserLess) {\n hasHTMLTag = slLib.xmlTagRegEx.test(text);\n if (!hasHTMLTag) {\n // Due to support of <,> for xml we convert <, > to <,> respectively so to get the correct\n // width it is required to convert the same before calculation for the new improve version of the\n // get text width.\n tmpText = text.replace(slLib.ltgtRegex, function (match) {\n return match === '<' ? '<' : '>';\n });\n getOriSizeImproveObj = this.getOriSize(tmpText, true);\n\n smartLabel.oriTextWidth = oriWidth = getOriSizeImproveObj.width;\n smartLabel.oriTextHeight = oriHeight = getOriSizeImproveObj.height;\n } else {\n container.innerHTML = text;\n smartLabel.oriTextWidth = oriWidth = container.offsetWidth;\n smartLabel.oriTextHeight = oriHeight = container.offsetHeight;\n }\n\n if (oriHeight <= maxHeight && oriWidth <= maxWidth) {\n smartLabel.width = smartLabel.oriTextWidth = oriWidth;\n smartLabel.height = smartLabel.oriTextHeight = oriHeight;\n return smartLabel;\n }\n\n if (lineHeight > maxHeight) {\n smartLabel.text = '';\n smartLabel.width = smartLabel.oriTextWidth = 0;\n smartLabel.height = smartLabel.oriTextHeight = 0;\n return smartLabel;\n }\n }\n\n // Calculate width with ellipses\n text = fastTrim(text).replace(/(\\s+)/g, ' ');\n maxWidthWithEll = this._showNoEllipses ? maxWidth : maxWidth - ellipsesWidth;\n\n if (!hasHTMLTag) {\n oriTextArr = text.split('');\n len = oriTextArr.length;\n trimStr = '', tempArr = [];\n tempChar = oriTextArr[0];\n\n if (this._cache[tempChar]) {\n minWidth = this._cache[tempChar].width;\n } else {\n minWidth = getWidth(tempChar);\n this._cache[tempChar] = { width: minWidth };\n }\n\n if (maxWidthWithEll > minWidth) {\n tempArr = text.substr(0, slLib.getNearestBreakIndex(text, maxWidthWithEll, this)).split('');\n i = tempArr.length;\n } else if (minWidth > maxWidth) {\n smartLabel.text = '';\n smartLabel.width = smartLabel.oriTextWidth = smartLabel.height = smartLabel.oriTextHeight = 0;\n return smartLabel;\n } else if (ellipsesStr) {\n maxWidthWithEll = maxWidth - 2 * dotWidth;\n if (maxWidthWithEll > minWidth) {\n ellipsesStr = '..';\n } else {\n maxWidthWithEll = maxWidth - dotWidth;\n if (maxWidthWithEll > minWidth) {\n ellipsesStr = '.';\n } else {\n maxWidthWithEll = 0;\n ellipsesStr = '';\n }\n }\n }\n\n strWidth = getWidth(tempArr.join(''));\n strHeight = this._lineHeight;\n\n if (noWrap) {\n for (; i < len; i += 1) {\n tempChar = tempArr[i] = oriTextArr[i];\n if (this._cache[tempChar]) {\n minWidth = this._cache[tempChar].width;\n } else {\n if (!getOriSizeImproveObj || !(minWidth = getOriSizeImproveObj.detailObj[tempChar])) {\n minWidth = getWidth(tempChar);\n }\n this._cache[tempChar] = {\n width: minWidth\n };\n }\n strWidth += minWidth;\n if (strWidth > maxWidthWithEll) {\n if (!trimStr) {\n trimStr = tempArr.slice(0, -1).join('');\n }\n if (strWidth > maxWidth) {\n smartLabel.text = fastTrim(trimStr) + ellipsesStr;\n smartLabel.tooltext = smartLabel.oriText;\n smartLabel.width = getWidth(smartLabel.text);\n smartLabel.height = this._lineHeight;\n return smartLabel;\n }\n }\n }\n\n smartLabel.text = tempArr.join('');\n smartLabel.width = strWidth;\n smartLabel.height = this._lineHeight;\n return smartLabel;\n } else {\n for (; i < len; i += 1) {\n tempChar = tempArr[i] = oriTextArr[i];\n if (tempChar === ' ' && !context) {\n tempChar = ' ';\n }\n\n if (this._cache[tempChar]) {\n minWidth = this._cache[tempChar].width;\n } else {\n if (!getOriSizeImproveObj || !(minWidth = getOriSizeImproveObj.detailObj[tempChar])) {\n minWidth = getWidth(tempChar);\n }\n this._cache[tempChar] = {\n width: minWidth\n };\n }\n strWidth += minWidth;\n\n if (strWidth > maxWidthWithEll) {\n if (!trimStr) {\n trimStr = tempArr.slice(0, -1).join('');\n }\n if (strWidth > maxWidth) {\n /** @todo use regular expressions for better performance. */\n lastSpace = text.substr(0, tempArr.length).lastIndexOf(' ');\n lastDash = text.substr(0, tempArr.length).lastIndexOf('-');\n if (lastSpace > lastIndexBroken) {\n strWidth = getWidth(tempArr.slice(lastIndexBroken + 1, lastSpace).join(''));\n tempArr.splice(lastSpace, 1, '
');\n lastIndexBroken = lastSpace;\n newCharIndex = lastSpace + 1;\n } else if (lastDash > lastIndexBroken) {\n if (lastDash === tempArr.length - 1) {\n strWidth = getWidth(tempArr.slice(lastIndexBroken + 1, lastSpace).join(''));\n tempArr.splice(lastDash, 1, '
-');\n } else {\n strWidth = getWidth(tempArr.slice(lastIndexBroken + 1, lastSpace).join(''));\n tempArr.splice(lastDash, 1, '-
');\n }\n lastIndexBroken = lastDash;\n newCharIndex = lastDash + 1;\n } else {\n tempArr.splice(tempArr.length - 1, 1, '
' + oriTextArr[i]);\n lastLineBreak = tempArr.length - 2;\n strWidth = getWidth(tempArr.slice(lastIndexBroken + 1, lastLineBreak + 1).join(''));\n lastIndexBroken = lastLineBreak;\n newCharIndex = i;\n }\n strHeight += this._lineHeight;\n if (strHeight > maxHeight) {\n smartLabel.text = fastTrim(trimStr) + ellipsesStr;\n smartLabel.tooltext = smartLabel.oriText;\n // The max width among all the lines will be the width of the string.\n smartLabel.width = maxWidth;\n smartLabel.height = strHeight - this._lineHeight;\n return smartLabel;\n } else {\n maxStrWidth = max(maxStrWidth, strWidth);\n trimStr = null;\n nearestChar = slLib.getNearestBreakIndex(text.substr(newCharIndex), maxWidthWithEll, this);\n strWidth = getWidth(text.substr(newCharIndex, nearestChar || 1));\n if (tempArr.length < newCharIndex + nearestChar) {\n tempArr = tempArr.concat(text.substr(tempArr.length, newCharIndex + nearestChar - tempArr.length).split(''));\n i = tempArr.length - 1;\n }\n }\n }\n }\n }\n\n maxStrWidth = max(maxStrWidth, strWidth);\n\n smartLabel.text = tempArr.join('');\n smartLabel.width = maxStrWidth;\n smartLabel.height = strHeight;\n return smartLabel;\n }\n } else {\n toolText = text.replace(slLib.spanAdditionRegx, '$2');\n text = text.replace(slLib.spanAdditionRegx, slLib.spanAdditionReplacer);\n text = text.replace(/()/g, '$1');\n\n container.innerHTML = text;\n\n spanArr = container[documentSupport.childRetriverFn](documentSupport.childRetriverString);\n\n for (x = 0, y = spanArr.length; x < y; x += 1) {\n elem = spanArr[x];\n //chech whether this span is temporary inserted span from it's class\n if (documentSupport.noClassTesting || slLib.classNameReg.test(elem.className)) {\n chr = elem.innerHTML;\n if (chr !== '') {\n if (chr === ' ') {\n spaceIndex = characterArr.length;\n } else if (chr === '-') {\n dashIndex = characterArr.length;\n }\n\n characterArr.push({\n spaceIdx: spaceIndex,\n dashIdx: dashIndex,\n elem: elem\n });\n oriTextArr.push(chr);\n }\n }\n }\n\n i = 0;\n len = characterArr.length;\n minWidth = characterArr[0].elem.offsetWidth;\n\n if (minWidth > maxWidth) {\n smartLabel.text = '';\n smartLabel.width = smartLabel.oriTextWidth = smartLabel.height = smartLabel.oriTextHeight = 0;\n\n return smartLabel;\n } else if (minWidth > maxWidthWithEll && !this._showNoEllipses) {\n\n maxWidthWithEll = maxWidth - 2 * dotWidth;\n if (maxWidthWithEll > minWidth) {\n ellipsesStr = '..';\n } else {\n maxWidthWithEll = maxWidth - dotWidth;\n if (maxWidthWithEll > minWidth) {\n ellipsesStr = '.';\n } else {\n maxWidthWithEll = 0;\n ellipsesStr = '';\n }\n }\n }\n\n initialLeft = characterArr[0].elem.offsetLeft;\n initialTop = characterArr[0].elem.offsetTop;\n\n if (noWrap) {\n for (; i < len; i += 1) {\n elem = characterArr[i].elem;\n elemRightMostPoint = elem.offsetLeft - initialLeft + elem.offsetWidth;\n\n if (elemRightMostPoint > maxWidthWithEll) {\n if (!removeFromIndexForEllipses) {\n removeFromIndexForEllipses = i;\n }\n if (container.offsetWidth > maxWidth) {\n removeFromIndex = i;\n i = len;\n }\n }\n }\n } else {\n for (; i < len; i += 1) {\n elem = characterArr[i].elem;\n elemLowestPoint = elem.offsetHeight + (elem.offsetTop - initialTop);\n elemRightMostPoint = elem.offsetLeft - initialLeft + elem.offsetWidth;\n\n lastBR = null;\n\n if (elemRightMostPoint > maxWidthWithEll) {\n if (!removeFromIndexForEllipses) {\n removeFromIndexForEllipses = i;\n }\n\n if (elemRightMostPoint > maxWidth) {\n lastSpace = characterArr[i].spaceIdx;\n lastDash = characterArr[i].dashIdx;\n if (lastSpace > lastIndexBroken) {\n characterArr[lastSpace].elem.innerHTML = '
';\n lastIndexBroken = lastSpace;\n } else if (lastDash > lastIndexBroken) {\n if (lastDash === i) {\n // in case the overflowing character itself is the '-'\n characterArr[lastDash].elem.innerHTML = '
-';\n } else {\n characterArr[lastDash].elem.innerHTML = '-
';\n }\n lastIndexBroken = lastDash;\n } else {\n elem.parentNode.insertBefore(lastBR = doc.createElement('br'), elem);\n }\n\n //check whether this break made current element outside the area height\n if (elem.offsetHeight + elem.offsetTop > maxHeight) {\n //remove the lastly inserted line break\n if (lastBR) {\n lastBR.parentNode.removeChild(lastBR);\n } else if (lastIndexBroken === lastDash) {\n characterArr[lastDash].elem.innerHTML = '-';\n } else {\n characterArr[lastSpace].elem.innerHTML = ' ';\n }\n removeFromIndex = i;\n //break the looping condition\n i = len;\n } else {\n removeFromIndexForEllipses = null;\n }\n }\n } else {\n //check whether this break made current element outside the area height\n if (elemLowestPoint > maxHeight) {\n removeFromIndex = i;\n i = len;\n }\n }\n }\n }\n\n if (removeFromIndex < len) {\n //set the trancated property of the smartlabel\n smartLabel.isTruncated = true;\n\n /** @todo is this really needed? */\n removeFromIndexForEllipses = removeFromIndexForEllipses ? removeFromIndexForEllipses : removeFromIndex;\n\n for (i = len - 1; i >= removeFromIndexForEllipses; i -= 1) {\n elem = characterArr[i].elem;\n //chech whether this span is temporary inserted span from it's class\n elem.parentNode.removeChild(elem);\n }\n\n for (; i >= 0; i -= 1) {\n elem = characterArr[i].elem;\n if (slLib.classNameBrReg.test(elem.className)) {\n //chech whether this span is temporary inserted span from it's class\n elem.parentNode.removeChild(elem);\n } else {\n i = 0;\n }\n }\n }\n\n //get the smart text\n smartLabel.text = container.innerHTML.replace(slLib.spanRemovalRegx, '$1').replace(/\\&\\;/g, '&');\n if (smartLabel.isTruncated) {\n smartLabel.text += ellipsesStr;\n smartLabel.tooltext = toolText;\n }\n }\n\n smartLabel.height = container.offsetHeight;\n smartLabel.width = container.offsetWidth;\n\n return smartLabel;\n } else {\n smartLabel.error = new Error('Body Tag Missing!');\n return smartLabel;\n }\n};\n\n/*\n * Get the height and width of a text.\n *\n * @param {String} text - Text whose metrics to be measured\n * @param {Boolean} Optional detailedCalculationFlag - this flag if set it calculates per letter position\n * information and returns it. Ideally you dont need it unless you want to post process the\n * string. And its an EXPENSIVE OPERATION.\n *\n * @return {Object} - If detailedCalculationFlag is set to true the returned object would be\n * {\n * height: height of the text\n * width: width of the text\n * detailObj: detail calculation of letters in the format {lettername: width}\n * }\n * If detailedCalculationFlag is set to false the returned object wont have the detailObj prop.\n */\nSmartLabelManager.prototype.getOriSize = function (text, detailedCalculationFlag) {\n if (!this._init) {\n return false;\n }\n\n var textArr,\n letter,\n lSize,\n i,\n l,\n cumulativeSize = 0,\n height = 0,\n indiSizeStore = {};\n\n if (!detailedCalculationFlag) {\n return this._calCharDimWithCache(text);\n }\n\n // Calculate the width of every letter with an approximation\n textArr = text.split('');\n for (i = 0, l = textArr.length; i < l; i++) {\n letter = textArr[i];\n lSize = this._calCharDimWithCache(letter, true, textArr.length);\n height = max(height, lSize.height);\n cumulativeSize += lSize.width;\n indiSizeStore[letter] = lSize.width;\n }\n\n return {\n width: round(cumulativeSize),\n height: height,\n detailObj: indiSizeStore\n };\n};\n\n/*\n * Dispose the container and object allocated by the smartlabel\n */\nSmartLabelManager.prototype.dispose = function () {\n if (!this._init) {\n return this;\n }\n\n this._containerManager && this._containerManager.dispose && this._containerManager.dispose();\n\n delete this._container;\n delete this._context;\n delete this._cache;\n delete this._containerManager;\n delete this._containerObj;\n delete this.id;\n delete this.style;\n delete this.parentContainer;\n delete this._showNoEllipses;\n\n return this;\n};\n\nexports['default'] = SmartLabelManager;\nmodule.exports = exports['default'];","'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n\tvalue: true\n});\nvar lib = {\n\tinit: function init(win) {\n\t\tvar doc = win.document,\n\t\t nav = win.navigator,\n\t\t userAgent = nav.userAgent,\n\t\t DIV = 'DIV',\n\t\t ceil = Math.ceil,\n\t\t floor = Math.floor,\n\t\t containerInstanceCount = 0,\n\t\t clsNameSpace = 'fusioncharts-smartlabel-',\n\t\t containerClass = clsNameSpace + 'container',\n\t\t classNameWithTag = clsNameSpace + 'tag',\n\t\t classNameWithTagBR = clsNameSpace + 'br';\n\n\t\tlib = {\n\t\t\twin: win,\n\n\t\t\tcontainerClass: containerClass,\n\n\t\t\tclassNameWithTag: classNameWithTag,\n\n\t\t\tclassNameWithTagBR: classNameWithTagBR,\n\n\t\t\tmaxDefaultCacheLimit: 500,\n\n\t\t\tclassNameReg: new RegExp('\\b' + classNameWithTag + '\\b'),\n\n\t\t\tclassNameBrReg: new RegExp('\\b' + classNameWithTagBR + '\\b'),\n\n\t\t\tspanAdditionRegx: /(<[^<\\>]+?\\>)|(&(?:[a-z]+|#[0-9]+);|.)/ig,\n\n\t\t\tspanAdditionReplacer: '$1$2',\n\n\t\t\tspanRemovalRegx: new RegExp('\\\\]+?' + classNameWithTag + '[^\\\\>]{0,}\\\\>(.*?)\\\\<\\\\/span\\\\>', 'ig'),\n\n\t\t\txmlTagRegEx: new RegExp('<[^>][^<]*[^>]+>', 'i'),\n\n\t\t\tltgtRegex: /<|>/g,\n\n\t\t\tbrReplaceRegex: //ig,\n\n\t\t\ttestStrAvg: 'WgI',\n\n\t\t\t// This style is applied over the parent smartlabel container. The container is kept hidden from the viewport\n\t\t\tparentContainerStyle: {\n\t\t\t\tposition: 'absolute',\n\t\t\t\ttop: '-9999em',\n\t\t\t\twhiteSpace: 'nowrap',\n\t\t\t\tpadding: '0px',\n\t\t\t\twidth: '1px',\n\t\t\t\theight: '1px',\n\t\t\t\toverflow: 'hidden'\n\t\t\t},\n\n\t\t\t// All the style which might affect the text metrics\n\t\t\tsupportedStyle: {\n\t\t\t\tfont: 'font',\n\t\t\t\tfontFamily: 'font-family',\n\t\t\t\t'font-family': 'font-family',\n\t\t\t\tfontWeight: 'font-weight',\n\t\t\t\t'font-weight': 'font-weight',\n\t\t\t\tfontSize: 'font-size',\n\t\t\t\t'font-size': 'font-size',\n\t\t\t\tlineHeight: 'line-height',\n\t\t\t\t'line-height': 'line-height',\n\t\t\t\tfontStyle: 'font-style',\n\t\t\t\t'font-style': 'font-style'\n\t\t\t},\n\n\t\t\t// Get the support list for html the document where the text calcution is to be done.\n\t\t\tgetDocumentSupport: function getDocumentSupport() {\n\t\t\t\tvar childRetriverFn, childRetriverString, noClassTesting;\n\n\t\t\t\tif (doc.getElementsByClassName) {\n\t\t\t\t\tchildRetriverFn = 'getElementsByClassName';\n\t\t\t\t\tchildRetriverString = classNameWithTag;\n\t\t\t\t\tnoClassTesting = true;\n\t\t\t\t} else {\n\t\t\t\t\tchildRetriverFn = 'getElementsByTagName';\n\t\t\t\t\tchildRetriverString = 'span';\n\t\t\t\t\tnoClassTesting = false;\n\t\t\t\t}\n\n\t\t\t\treturn {\n\t\t\t\t\tisIE: /msie/i.test(userAgent) && !win.opera,\n\t\t\t\t\thasSVG: Boolean(win.SVGAngle || doc.implementation.hasFeature('http://www.w3.org/TR/SVG11/feature#BasicStructure', '1.1')),\n\t\t\t\t\tisHeadLess: new RegExp(' HtmlUnit').test(userAgent),\n\t\t\t\t\tisWebKit: new RegExp(' AppleWebKit/').test(userAgent),\n\t\t\t\t\tchildRetriverFn: childRetriverFn,\n\t\t\t\t\tchildRetriverString: childRetriverString,\n\t\t\t\t\tnoClassTesting: noClassTesting\n\t\t\t\t};\n\t\t\t},\n\n\t\t\t/*\n * Create a html div element and attach it with a parent. All the subsequent operations are performed\n * by upding this dom tree only.\n *\n * @param {HTMLElement} - The html element where the newly created div is to be attached. If not passed,\n * the new div is appended on the body.\n */\n\t\t\tcreateContainer: function createContainer(containerParent) {\n\t\t\t\tvar body, container;\n\n\t\t\t\tif (containerParent && (containerParent.offsetWidth || containerParent.offsetHeight)) {\n\t\t\t\t\tif (containerParent.appendChild) {\n\t\t\t\t\t\tcontainerParent.appendChild(container = doc.createElement(DIV));\n\t\t\t\t\t\tcontainer.className = containerClass;\n\t\t\t\t\t\tcontainer.setAttribute('aria-hidden', 'true');\n\t\t\t\t\t\tcontainer.setAttribute('role', 'presentation');\n\t\t\t\t\t\treturn container;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tbody = doc.getElementsByTagName('body')[0];\n\n\t\t\t\t\tif (body && body.appendChild) {\n\t\t\t\t\t\tcontainer = doc.createElement(DIV);\n\t\t\t\t\t\tcontainer.className = containerClass;\n\t\t\t\t\t\tcontainer.setAttribute('aria-hidden', 'true');\n\t\t\t\t\t\tcontainer.setAttribute('role', 'presentation');\n\t\t\t\t\t\tcontainerInstanceCount += 1;\n\t\t\t\t\t\tbody.appendChild(container);\n\t\t\t\t\t\treturn container;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// Finds a approximate position where the text is to be broken\n\t\t\tgetNearestBreakIndex: function getNearestBreakIndex(text, maxWidth, sl) {\n\t\t\t\tif (!text || !text.length) {\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\n\t\t\t\tvar difference,\n\t\t\t\t getWidth = sl._getWidthFn(),\n\t\t\t\t charLen = 0,\n\t\t\t\t increment = 0,\n\t\t\t\t oriWidth = getWidth(text),\n\t\t\t\t avgWidth = oriWidth / text.length;\n\n\t\t\t\tdifference = maxWidth;\n\t\t\t\tcharLen = ceil(maxWidth / avgWidth);\n\n\t\t\t\tif (oriWidth < maxWidth) {\n\t\t\t\t\treturn text.length - 1;\n\t\t\t\t}\n\n\t\t\t\tif (charLen > text.length) {\n\t\t\t\t\tdifference = maxWidth - oriWidth;\n\t\t\t\t\tcharLen = text.length;\n\t\t\t\t}\n\n\t\t\t\twhile (difference > 0) {\n\t\t\t\t\tdifference = maxWidth - getWidth(text.substr(0, charLen));\n\t\t\t\t\tincrement = floor(difference / avgWidth);\n\t\t\t\t\tif (increment) {\n\t\t\t\t\t\tcharLen += increment;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn charLen;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\twhile (difference < 0) {\n\t\t\t\t\tdifference = maxWidth - getWidth(text.substr(0, charLen));\n\t\t\t\t\tincrement = floor(difference / avgWidth);\n\t\t\t\t\tif (increment) {\n\t\t\t\t\t\tcharLen += increment;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn charLen;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn charLen;\n\t\t\t},\n\n\t\t\t/*\n * Determine lineheight of a text for a given style. It adds propery lineHeight to the style passed\n *\n * @param {Object} - The style based on which the text's metric needs to be calculated. The calculation happens\n * based on fontSize property, if its not present a default font size is assumed.\n *\n * @return {Object} - The style that was passed with lineHeight as a named propery set on the object.\n */\n\t\t\tsetLineHeight: function setLineHeight(styleObj) {\n\t\t\t\tvar fSize = styleObj.fontSize = styleObj.fontSize || '12px';\n\t\t\t\tstyleObj.lineHeight = styleObj.lineHeight || styleObj['line-height'] || parseInt(fSize, 10) * 1.2 + 'px';\n\t\t\t\treturn styleObj;\n\t\t\t}\n\t\t};\n\n\t\treturn lib;\n\t}\n};\n\nexports['default'] = lib;\nmodule.exports = exports['default'];","const Muze = require('./muze');\n\nmodule.exports = Muze.default ? Muze.default : Muze;\n","'use strict';\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _lib = require('./lib');\n\nvar _lib2 = _interopRequireDefault(_lib);\n\nvar slLib = _lib2['default'].init(typeof window !== \"undefined\" ? window : undefined),\n doc = slLib.win.document,\n documentSupport = slLib.getDocumentSupport(),\n SVG_BBOX_CORRECTION = documentSupport.isWebKit ? 0 : 4.5;\n\nfunction ContainerManager(parentContainer, isBrowserLess, maxContainers) {\n var svg;\n\n maxContainers = maxContainers > 5 ? maxContainers : 5;\n maxContainers = maxContainers < 20 ? maxContainers : 20;\n\n this.maxContainers = maxContainers;\n this.first = null;\n this.last = null;\n this.containers = {};\n this.length = 0;\n this.rootNode = parentContainer;\n\n if (isBrowserLess) {\n svg = doc.createElementNS('http://www.w3.org/2000/svg', 'svg');\n svg.setAttributeNS('http://www.w3.org/2000/svg', 'xlink', 'http://www.w3.org/1999/xlink');\n svg.setAttributeNS('http://www.w3.org/2000/svg', 'height', '0');\n svg.setAttributeNS('http://www.w3.org/2000/svg', 'width', '0');\n this.svgRoot = svg;\n this.rootNode.appendChild(svg);\n }\n}\n\nContainerManager.prototype.get = function (style) {\n var diff,\n key,\n containerObj,\n containers = this.containers,\n len = this.length,\n max = this.maxContainers,\n keyStr = '';\n\n for (key in slLib.supportedStyle) {\n if (style[key] !== undefined) {\n keyStr += slLib.supportedStyle[key] + ':' + style[key] + ';';\n }\n }\n\n if (!keyStr) {\n return false;\n }\n\n if (containerObj = containers[keyStr]) {\n if (this.first !== containerObj) {\n containerObj.prev && (containerObj.prev.next = containerObj.next);\n containerObj.next && (containerObj.next.prev = containerObj.prev);\n containerObj.next = this.first;\n containerObj.next.prev = containerObj;\n this.last === containerObj && (this.last = containerObj.prev);\n containerObj.prev = null;\n this.first = containerObj;\n }\n } else {\n if (len >= max) {\n diff = len - max + 1;\n // +1 is to remove an extra entry to make space for the new container to be added.\n while (diff--) {\n this.removeContainer(this.last);\n }\n }\n containerObj = this.addContainer(keyStr);\n }\n\n return containerObj;\n};\n\nContainerManager.prototype.addContainer = function (keyStr) {\n var node, container;\n\n this.containers[keyStr] = container = {\n next: null,\n prev: null,\n node: null,\n ellipsesWidth: 0,\n lineHeight: 0,\n dotWidth: 0,\n avgCharWidth: 4,\n keyStr: keyStr,\n charCache: {}\n };\n\n // Since the container objects are arranged from most recent to least recent order, we need to add the new\n // object at the beginning of the list.\n container.next = this.first;\n container.next && (container.next.prev = container);\n this.first = container;\n if (!this.last) {\n this.last = container;\n }\n this.length += 1;\n\n node = container.node = doc.createElement('div');\n this.rootNode.appendChild(node);\n\n if (documentSupport.isIE && !documentSupport.hasSVG) {\n node.style.setAttribute('cssText', keyStr);\n } else {\n node.setAttribute('style', keyStr);\n }\n\n node.setAttribute('aria-hidden', 'true');\n node.setAttribute('role', 'presentation');\n node.style.display = 'inline-block';\n\n node.innerHTML = slLib.testStrAvg; // A test string.\n container.lineHeight = node.offsetHeight;\n container.avgCharWidth = node.offsetWidth / 3;\n\n if (documentSupport.isBrowserLess) {\n node = container.svgText = doc.createElementNS('http://www.w3.org/2000/svg', 'text');\n node.setAttribute('style', keyStr);\n this.svgRoot.appendChild(node);\n\n node.textContent = slLib.testStrAvg; // A test string.\n container.lineHeight = node.getBBox().height;\n container.avgCharWidth = (node.getBBox().width - SVG_BBOX_CORRECTION) / 3;\n\n node.textContent = '...';\n container.ellipsesWidth = node.getBBox().width - SVG_BBOX_CORRECTION;\n node.textContent = '.';\n container.dotWidth = node.getBBox().width - SVG_BBOX_CORRECTION;\n } else {\n node.innerHTML = '...';\n container.ellipsesWidth = node.offsetWidth;\n node.innerHTML = '.';\n container.dotWidth = node.offsetWidth;\n node.innerHTML = '';\n }\n\n return container;\n};\n\nContainerManager.prototype.removeContainer = function (cObj) {\n var keyStr = cObj.keyStr;\n\n if (!keyStr || !this.length || !cObj) {\n return;\n }\n this.length -= 1;\n\n cObj.prev && (cObj.prev.next = cObj.next);\n cObj.next && (cObj.next.prev = cObj.prev);\n this.first === cObj && (this.first = cObj.next);\n this.last === cObj && (this.last = cObj.prev);\n\n cObj.node.parentNode.removeChild(cObj.node);\n\n delete this.containers[keyStr];\n};\n\nContainerManager.prototype.dispose = function () {\n var key,\n containers = this.containers;\n\n this.maxContainers = null;\n for (key in containers) {\n this.removeContainer(containers[key]);\n }\n\n this.rootNode.parentNode.removeChild(this.rootNode);\n\n this.rootNode = null;\n this.first = null;\n this.last = null;\n};\n\nmodule.exports = ContainerManager;","export default function(a, b) {\n return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","import ascending from \"./ascending\";\n\nexport default function(compare) {\n if (compare.length === 1) compare = ascendingComparator(compare);\n return {\n left: function(a, x, lo, hi) {\n if (lo == null) lo = 0;\n if (hi == null) hi = a.length;\n while (lo < hi) {\n var mid = lo + hi >>> 1;\n if (compare(a[mid], x) < 0) lo = mid + 1;\n else hi = mid;\n }\n return lo;\n },\n right: function(a, x, lo, hi) {\n if (lo == null) lo = 0;\n if (hi == null) hi = a.length;\n while (lo < hi) {\n var mid = lo + hi >>> 1;\n if (compare(a[mid], x) > 0) hi = mid;\n else lo = mid + 1;\n }\n return lo;\n }\n };\n}\n\nfunction ascendingComparator(f) {\n return function(d, x) {\n return ascending(f(d), x);\n };\n}\n","import ascending from \"./ascending\";\nimport bisector from \"./bisector\";\n\nvar ascendingBisect = bisector(ascending);\nexport var bisectRight = ascendingBisect.right;\nexport var bisectLeft = ascendingBisect.left;\nexport default bisectRight;\n","import {pair} from \"./pairs\";\n\nexport default function(values0, values1, reduce) {\n var n0 = values0.length,\n n1 = values1.length,\n values = new Array(n0 * n1),\n i0,\n i1,\n i,\n value0;\n\n if (reduce == null) reduce = pair;\n\n for (i0 = i = 0; i0 < n0; ++i0) {\n for (value0 = values0[i0], i1 = 0; i1 < n1; ++i1, ++i) {\n values[i] = reduce(value0, values1[i1]);\n }\n }\n\n return values;\n}\n","export default function(x) {\n return x === null ? NaN : +x;\n}\n","var array = Array.prototype;\n\nexport var slice = array.slice;\nexport var map = array.map;\n","export default function(start, stop, step) {\n start = +start, stop = +stop, step = (n = arguments.length) < 2 ? (stop = start, start = 0, 1) : n < 3 ? 1 : +step;\n\n var i = -1,\n n = Math.max(0, Math.ceil((stop - start) / step)) | 0,\n range = new Array(n);\n\n while (++i < n) {\n range[i] = start + i * step;\n }\n\n return range;\n}\n","var e10 = Math.sqrt(50),\n e5 = Math.sqrt(10),\n e2 = Math.sqrt(2);\n\nexport default function(start, stop, count) {\n var reverse,\n i = -1,\n n,\n ticks,\n step;\n\n stop = +stop, start = +start, count = +count;\n if (start === stop && count > 0) return [start];\n if (reverse = stop < start) n = start, start = stop, stop = n;\n if ((step = tickIncrement(start, stop, count)) === 0 || !isFinite(step)) return [];\n\n if (step > 0) {\n start = Math.ceil(start / step);\n stop = Math.floor(stop / step);\n ticks = new Array(n = Math.ceil(stop - start + 1));\n while (++i < n) ticks[i] = (start + i) * step;\n } else {\n start = Math.floor(start * step);\n stop = Math.ceil(stop * step);\n ticks = new Array(n = Math.ceil(start - stop + 1));\n while (++i < n) ticks[i] = (start - i) / step;\n }\n\n if (reverse) ticks.reverse();\n\n return ticks;\n}\n\nexport function tickIncrement(start, stop, count) {\n var step = (stop - start) / Math.max(0, count),\n power = Math.floor(Math.log(step) / Math.LN10),\n error = step / Math.pow(10, power);\n return power >= 0\n ? (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1) * Math.pow(10, power)\n : -Math.pow(10, -power) / (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1);\n}\n\nexport function tickStep(start, stop, count) {\n var step0 = Math.abs(stop - start) / Math.max(0, count),\n step1 = Math.pow(10, Math.floor(Math.log(step0) / Math.LN10)),\n error = step0 / step1;\n if (error >= e10) step1 *= 10;\n else if (error >= e5) step1 *= 5;\n else if (error >= e2) step1 *= 2;\n return stop < start ? -step1 : step1;\n}\n","export default function(values) {\n return Math.ceil(Math.log(values.length) / Math.LN2) + 1;\n}\n","import number from \"./number\";\n\nexport default function(values, p, valueof) {\n if (valueof == null) valueof = number;\n if (!(n = values.length)) return;\n if ((p = +p) <= 0 || n < 2) return +valueof(values[0], 0, values);\n if (p >= 1) return +valueof(values[n - 1], n - 1, values);\n var n,\n i = (n - 1) * p,\n i0 = Math.floor(i),\n value0 = +valueof(values[i0], i0, values),\n value1 = +valueof(values[i0 + 1], i0 + 1, values);\n return value0 + (value1 - value0) * (i - i0);\n}\n","export var prefix = \"$\";\n\nfunction Map() {}\n\nMap.prototype = map.prototype = {\n constructor: Map,\n has: function(key) {\n return (prefix + key) in this;\n },\n get: function(key) {\n return this[prefix + key];\n },\n set: function(key, value) {\n this[prefix + key] = value;\n return this;\n },\n remove: function(key) {\n var property = prefix + key;\n return property in this && delete this[property];\n },\n clear: function() {\n for (var property in this) if (property[0] === prefix) delete this[property];\n },\n keys: function() {\n var keys = [];\n for (var property in this) if (property[0] === prefix) keys.push(property.slice(1));\n return keys;\n },\n values: function() {\n var values = [];\n for (var property in this) if (property[0] === prefix) values.push(this[property]);\n return values;\n },\n entries: function() {\n var entries = [];\n for (var property in this) if (property[0] === prefix) entries.push({key: property.slice(1), value: this[property]});\n return entries;\n },\n size: function() {\n var size = 0;\n for (var property in this) if (property[0] === prefix) ++size;\n return size;\n },\n empty: function() {\n for (var property in this) if (property[0] === prefix) return false;\n return true;\n },\n each: function(f) {\n for (var property in this) if (property[0] === prefix) f(this[property], property.slice(1), this);\n }\n};\n\nfunction map(object, f) {\n var map = new Map;\n\n // Copy constructor.\n if (object instanceof Map) object.each(function(value, key) { map.set(key, value); });\n\n // Index array by numeric index or specified key function.\n else if (Array.isArray(object)) {\n var i = -1,\n n = object.length,\n o;\n\n if (f == null) while (++i < n) map.set(i, object[i]);\n else while (++i < n) map.set(f(o = object[i], i, object), o);\n }\n\n // Convert object to map.\n else if (object) for (var key in object) map.set(key, object[key]);\n\n return map;\n}\n\nexport default map;\n","import map from \"./map\";\n\nexport default function() {\n var keys = [],\n sortKeys = [],\n sortValues,\n rollup,\n nest;\n\n function apply(array, depth, createResult, setResult) {\n if (depth >= keys.length) {\n if (sortValues != null) array.sort(sortValues);\n return rollup != null ? rollup(array) : array;\n }\n\n var i = -1,\n n = array.length,\n key = keys[depth++],\n keyValue,\n value,\n valuesByKey = map(),\n values,\n result = createResult();\n\n while (++i < n) {\n if (values = valuesByKey.get(keyValue = key(value = array[i]) + \"\")) {\n values.push(value);\n } else {\n valuesByKey.set(keyValue, [value]);\n }\n }\n\n valuesByKey.each(function(values, key) {\n setResult(result, key, apply(values, depth, createResult, setResult));\n });\n\n return result;\n }\n\n function entries(map, depth) {\n if (++depth > keys.length) return map;\n var array, sortKey = sortKeys[depth - 1];\n if (rollup != null && depth >= keys.length) array = map.entries();\n else array = [], map.each(function(v, k) { array.push({key: k, values: entries(v, depth)}); });\n return sortKey != null ? array.sort(function(a, b) { return sortKey(a.key, b.key); }) : array;\n }\n\n return nest = {\n object: function(array) { return apply(array, 0, createObject, setObject); },\n map: function(array) { return apply(array, 0, createMap, setMap); },\n entries: function(array) { return entries(apply(array, 0, createMap, setMap), 0); },\n key: function(d) { keys.push(d); return nest; },\n sortKeys: function(order) { sortKeys[keys.length - 1] = order; return nest; },\n sortValues: function(order) { sortValues = order; return nest; },\n rollup: function(f) { rollup = f; return nest; }\n };\n}\n\nfunction createObject() {\n return {};\n}\n\nfunction setObject(object, key, value) {\n object[key] = value;\n}\n\nfunction createMap() {\n return map();\n}\n\nfunction setMap(map, key, value) {\n map.set(key, value);\n}\n","import {default as map, prefix} from \"./map\";\n\nfunction Set() {}\n\nvar proto = map.prototype;\n\nSet.prototype = set.prototype = {\n constructor: Set,\n has: proto.has,\n add: function(value) {\n value += \"\";\n this[prefix + value] = value;\n return this;\n },\n remove: proto.remove,\n clear: proto.clear,\n values: proto.keys,\n size: proto.size,\n empty: proto.empty,\n each: proto.each\n};\n\nfunction set(object, f) {\n var set = new Set;\n\n // Copy constructor.\n if (object instanceof Set) object.each(function(value) { set.add(value); });\n\n // Otherwise, assume it’s an array.\n else if (object) {\n var i = -1, n = object.length;\n if (f == null) while (++i < n) set.add(object[i]);\n else while (++i < n) set.add(f(object[i], i, object));\n }\n\n return set;\n}\n\nexport default set;\n","var array = Array.prototype;\n\nexport var map = array.map;\nexport var slice = array.slice;\n","import {map} from \"d3-collection\";\nimport {slice} from \"./array\";\n\nexport var implicit = {name: \"implicit\"};\n\nexport default function ordinal(range) {\n var index = map(),\n domain = [],\n unknown = implicit;\n\n range = range == null ? [] : slice.call(range);\n\n function scale(d) {\n var key = d + \"\", i = index.get(key);\n if (!i) {\n if (unknown !== implicit) return unknown;\n index.set(key, i = domain.push(d));\n }\n return range[(i - 1) % range.length];\n }\n\n scale.domain = function(_) {\n if (!arguments.length) return domain.slice();\n domain = [], index = map();\n var i = -1, n = _.length, d, key;\n while (++i < n) if (!index.has(key = (d = _[i]) + \"\")) index.set(key, domain.push(d));\n return scale;\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = slice.call(_), scale) : range.slice();\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n scale.copy = function() {\n return ordinal()\n .domain(domain)\n .range(range)\n .unknown(unknown);\n };\n\n return scale;\n}\n","import {range as sequence} from \"d3-array\";\nimport ordinal from \"./ordinal\";\n\nexport default function band() {\n var scale = ordinal().unknown(undefined),\n domain = scale.domain,\n ordinalRange = scale.range,\n range = [0, 1],\n step,\n bandwidth,\n round = false,\n paddingInner = 0,\n paddingOuter = 0,\n align = 0.5;\n\n delete scale.unknown;\n function rescale() {\n var n = domain().length,\n reverse = range[1] < range[0],\n start = range[reverse - 0],\n stop = range[1 - reverse];\n step = (stop - start) / Math.max(1, n - paddingInner + paddingOuter * 2);\n if (round) step = Math.floor(step);\n start += (stop - start - step * (n - paddingInner)) * align;\n bandwidth = step * (1 - paddingInner);\n if (round) start = Math.round(start), bandwidth = Math.round(bandwidth);\n var values = sequence(n).map(function(i) { return start + step * i; });\n return ordinalRange(reverse ? values.reverse() : values);\n }\n\n scale.domain = function(_) {\n return arguments.length ? (domain(_), rescale()) : domain();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = [+_[0], +_[1]], rescale()) : range.slice();\n };\n\n scale.rangeRound = function(_) {\n return range = [+_[0], +_[1]], round = true, rescale();\n };\n\n scale.bandwidth = function() {\n return bandwidth;\n };\n\n scale.step = function() {\n return step;\n };\n\n scale.round = function(_) {\n return arguments.length ? (round = !!_, rescale()) : round;\n };\n\n scale.padding = function(_) {\n return arguments.length ? (paddingInner = paddingOuter = Math.max(0, Math.min(1, _)), rescale()) : paddingInner;\n };\n\n scale.paddingInner = function(_) {\n return arguments.length ? (paddingInner = Math.max(0, Math.min(1, _)), rescale()) : paddingInner;\n };\n\n scale.paddingOuter = function(_) {\n return arguments.length ? (paddingOuter = Math.max(0, Math.min(1, _)), rescale()) : paddingOuter;\n };\n\n scale.align = function(_) {\n return arguments.length ? (align = Math.max(0, Math.min(1, _)), rescale()) : align;\n };\n\n scale.copy = function() {\n return band()\n .domain(domain())\n .range(range)\n .round(round)\n .paddingInner(paddingInner)\n .paddingOuter(paddingOuter)\n .align(align);\n };\n\n scale.invertExtent = function(r0, r1) {\n var lo = +r0,\n hi = arguments.length > 1 ? +r1 : lo,\n reverse = range[1] < range[0],\n values = reverse ? ordinalRange().reverse() : ordinalRange(),\n n = values.length - 1, a, b, t,\n hiIndex;\n values.push(values[n] + this.step());\n // order range inputs, bail if outside of scale range\n if (hi < lo) t = lo, lo = hi, hi = t;\n if (hi < values[0] || lo > range[1-reverse]) return undefined;\n\n // binary search to index into scale range\n a = Math.max(0, getClosestIndexOf(values, lo));\n hiIndex = getClosestIndexOf(values, hi);\n b = lo===hi ? a : Math.max(a, hiIndex - 1);\n\n // increment index a if lo is within padding gap\n // if (lo - values[a] > bandwidth + 1e-10) ++a;\n\n if (reverse) t = a, a = n - b, b = n - t; // map + swap\n return (a > b) ? undefined : domain().slice(a, b+1);\n };\n\n scale.invert = function (r0, r1) {\n var lo = +r0,\n hi = arguments.length > 1 ? +r1 : lo,\n reverse = range[1] < range[0],\n values = reverse ? ordinalRange().reverse() : ordinalRange(),\n n = values.length - 1,\n a,\n t;\n\n // order range inputs, bail if outside of scale range\n if (hi < lo) t = lo, lo = hi, hi = t;\n if (hi < values[0] || lo > range[1-reverse]) return undefined;\n\n // binary search to index into scale range\n a = Math.max(0, getClosestIndexOf(values, lo, 'left'));\n\n // increment index a if lo is within padding gap\n // if (lo - values[a] > bandwidth + 1e-10) ++a;\n\n return domain()[reverse ? n - a : a];\n }\n return rescale();\n}\n\nfunction pointish(scale) {\n var copy = scale.copy;\n\n scale.padding = scale.paddingOuter;\n delete scale.paddingInner;\n delete scale.paddingOuter;\n\n scale.copy = function() {\n return pointish(copy());\n };\n\n return scale;\n}\n\nexport function point() {\n return pointish(band().paddingInner(1));\n}\n\nfunction getClosestIndexOf (arr, value, side) {\n var low = 0,\n arrLen = arr.length,\n high = arrLen - 1,\n highVal,\n mid,\n d1,\n d2;\n\n while (low < high) {\n mid = Math.floor((low + high) / 2);\n d1 = Math.abs(arr[mid] - value);\n d2 = Math.abs(arr[mid + 1] - value);\n\n if (d2 <= d1) {\n low = mid + 1;\n }\n else {\n high = mid;\n }\n }\n\n if (!side) {\n return high;\n }\n\n highVal = arr[high];\n if (highVal === value) {\n return high;\n } else if (highVal > value) {\n if (high === 0) { return high; }\n return side === 'left'? high - 1 : high;\n } else {\n if (high === arr.length - 1) { return high; }\n return side === 'left'? high : high + 1;\n }\n}","export default function(constructor, factory, prototype) {\n constructor.prototype = factory.prototype = prototype;\n prototype.constructor = constructor;\n}\n\nexport function extend(parent, definition) {\n var prototype = Object.create(parent.prototype);\n for (var key in definition) prototype[key] = definition[key];\n return prototype;\n}\n","import define, {extend} from \"./define\";\n\nexport function Color() {}\n\nexport var darker = 0.7;\nexport var brighter = 1 / darker;\n\nvar reI = \"\\\\s*([+-]?\\\\d+)\\\\s*\",\n reN = \"\\\\s*([+-]?\\\\d*\\\\.?\\\\d+(?:[eE][+-]?\\\\d+)?)\\\\s*\",\n reP = \"\\\\s*([+-]?\\\\d*\\\\.?\\\\d+(?:[eE][+-]?\\\\d+)?)%\\\\s*\",\n reHex3 = /^#([0-9a-f]{3})$/,\n reHex6 = /^#([0-9a-f]{6})$/,\n reRgbInteger = new RegExp(\"^rgb\\\\(\" + [reI, reI, reI] + \"\\\\)$\"),\n reRgbPercent = new RegExp(\"^rgb\\\\(\" + [reP, reP, reP] + \"\\\\)$\"),\n reRgbaInteger = new RegExp(\"^rgba\\\\(\" + [reI, reI, reI, reN] + \"\\\\)$\"),\n reRgbaPercent = new RegExp(\"^rgba\\\\(\" + [reP, reP, reP, reN] + \"\\\\)$\"),\n reHslPercent = new RegExp(\"^hsl\\\\(\" + [reN, reP, reP] + \"\\\\)$\"),\n reHslaPercent = new RegExp(\"^hsla\\\\(\" + [reN, reP, reP, reN] + \"\\\\)$\");\n\nvar 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\ndefine(Color, color, {\n displayable: function() {\n return this.rgb().displayable();\n },\n hex: function() {\n return this.rgb().hex();\n },\n toString: function() {\n return this.rgb() + \"\";\n }\n});\n\nexport default function color(format) {\n var m;\n format = (format + \"\").trim().toLowerCase();\n return (m = reHex3.exec(format)) ? (m = parseInt(m[1], 16), new Rgb((m >> 8 & 0xf) | (m >> 4 & 0x0f0), (m >> 4 & 0xf) | (m & 0xf0), ((m & 0xf) << 4) | (m & 0xf), 1)) // #f00\n : (m = reHex6.exec(format)) ? rgbn(parseInt(m[1], 16)) // #ff0000\n : (m = reRgbInteger.exec(format)) ? new Rgb(m[1], m[2], m[3], 1) // rgb(255, 0, 0)\n : (m = reRgbPercent.exec(format)) ? new Rgb(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, 1) // rgb(100%, 0%, 0%)\n : (m = reRgbaInteger.exec(format)) ? rgba(m[1], m[2], m[3], m[4]) // rgba(255, 0, 0, 1)\n : (m = reRgbaPercent.exec(format)) ? rgba(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, m[4]) // rgb(100%, 0%, 0%, 1)\n : (m = reHslPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, 1) // hsl(120, 50%, 50%)\n : (m = reHslaPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, m[4]) // hsla(120, 50%, 50%, 1)\n : named.hasOwnProperty(format) ? rgbn(named[format])\n : format === \"transparent\" ? new Rgb(NaN, NaN, NaN, 0)\n : null;\n}\n\nfunction rgbn(n) {\n return new Rgb(n >> 16 & 0xff, n >> 8 & 0xff, n & 0xff, 1);\n}\n\nfunction rgba(r, g, b, a) {\n if (a <= 0) r = g = b = NaN;\n return new Rgb(r, g, b, a);\n}\n\nexport function rgbConvert(o) {\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Rgb;\n o = o.rgb();\n return new Rgb(o.r, o.g, o.b, o.opacity);\n}\n\nexport function rgb(r, g, b, opacity) {\n return arguments.length === 1 ? rgbConvert(r) : new Rgb(r, g, b, opacity == null ? 1 : opacity);\n}\n\nexport function Rgb(r, g, b, opacity) {\n this.r = +r;\n this.g = +g;\n this.b = +b;\n this.opacity = +opacity;\n}\n\ndefine(Rgb, rgb, extend(Color, {\n 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, this.opacity);\n },\n 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, this.opacity);\n },\n rgb: function() {\n return this;\n },\n 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 && (0 <= this.opacity && this.opacity <= 1);\n },\n hex: function() {\n return \"#\" + hex(this.r) + hex(this.g) + hex(this.b);\n },\n toString: function() {\n var a = this.opacity; a = isNaN(a) ? 1 : Math.max(0, Math.min(1, a));\n return (a === 1 ? \"rgb(\" : \"rgba(\")\n + Math.max(0, Math.min(255, Math.round(this.r) || 0)) + \", \"\n + Math.max(0, Math.min(255, Math.round(this.g) || 0)) + \", \"\n + Math.max(0, Math.min(255, Math.round(this.b) || 0))\n + (a === 1 ? \")\" : \", \" + a + \")\");\n }\n}));\n\nfunction hex(value) {\n value = Math.max(0, Math.min(255, Math.round(value) || 0));\n return (value < 16 ? \"0\" : \"\") + value.toString(16);\n}\n\nfunction hsla(h, s, l, a) {\n if (a <= 0) h = s = l = NaN;\n else if (l <= 0 || l >= 1) h = s = NaN;\n else if (s <= 0) h = NaN;\n return new Hsl(h, s, l, a);\n}\n\nexport function hslConvert(o) {\n if (o instanceof Hsl) return new Hsl(o.h, o.s, o.l, o.opacity);\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Hsl;\n if (o instanceof Hsl) return o;\n o = o.rgb();\n var r = o.r / 255,\n g = o.g / 255,\n b = o.b / 255,\n min = Math.min(r, g, b),\n max = Math.max(r, g, b),\n h = NaN,\n s = max - min,\n l = (max + min) / 2;\n if (s) {\n if (r === max) h = (g - b) / s + (g < b) * 6;\n else if (g === max) h = (b - r) / s + 2;\n else h = (r - g) / s + 4;\n s /= l < 0.5 ? max + min : 2 - max - min;\n h *= 60;\n } else {\n s = l > 0 && l < 1 ? 0 : h;\n }\n return new Hsl(h, s, l, o.opacity);\n}\n\nexport function hsl(h, s, l, opacity) {\n return arguments.length === 1 ? hslConvert(h) : new Hsl(h, s, l, opacity == null ? 1 : opacity);\n}\n\nfunction Hsl(h, s, l, opacity) {\n this.h = +h;\n this.s = +s;\n this.l = +l;\n this.opacity = +opacity;\n}\n\ndefine(Hsl, hsl, extend(Color, {\n brighter: function(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n darker: function(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n 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 < 0.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 this.opacity\n );\n },\n displayable: function() {\n return (0 <= this.s && this.s <= 1 || isNaN(this.s))\n && (0 <= this.l && this.l <= 1)\n && (0 <= this.opacity && this.opacity <= 1);\n }\n}));\n\n/* From FvD 13.37, CSS Color Module Level 3 */\nfunction 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","export var deg2rad = Math.PI / 180;\nexport var rad2deg = 180 / Math.PI;\n","import define, {extend} from \"./define\";\nimport {Color, rgbConvert, Rgb} from \"./color\";\nimport {deg2rad, rad2deg} from \"./math\";\n\n// https://beta.observablehq.com/@mbostock/lab-and-rgb\nvar K = 18,\n Xn = 0.96422,\n Yn = 1,\n Zn = 0.82521,\n t0 = 4 / 29,\n t1 = 6 / 29,\n t2 = 3 * t1 * t1,\n t3 = t1 * t1 * t1;\n\nfunction labConvert(o) {\n if (o instanceof Lab) return new Lab(o.l, o.a, o.b, o.opacity);\n if (o instanceof Hcl) {\n if (isNaN(o.h)) return new Lab(o.l, 0, 0, o.opacity);\n var h = o.h * deg2rad;\n return new Lab(o.l, Math.cos(h) * o.c, Math.sin(h) * o.c, o.opacity);\n }\n if (!(o instanceof Rgb)) o = rgbConvert(o);\n var r = rgb2lrgb(o.r),\n g = rgb2lrgb(o.g),\n b = rgb2lrgb(o.b),\n y = xyz2lab((0.2225045 * r + 0.7168786 * g + 0.0606169 * b) / Yn), x, z;\n if (r === g && g === b) x = z = y; else {\n x = xyz2lab((0.4360747 * r + 0.3850649 * g + 0.1430804 * b) / Xn);\n z = xyz2lab((0.0139322 * r + 0.0971045 * g + 0.7141733 * b) / Zn);\n }\n return new Lab(116 * y - 16, 500 * (x - y), 200 * (y - z), o.opacity);\n}\n\nexport function gray(l, opacity) {\n return new Lab(l, 0, 0, opacity == null ? 1 : opacity);\n}\n\nexport default function lab(l, a, b, opacity) {\n return arguments.length === 1 ? labConvert(l) : new Lab(l, a, b, opacity == null ? 1 : opacity);\n}\n\nexport function Lab(l, a, b, opacity) {\n this.l = +l;\n this.a = +a;\n this.b = +b;\n this.opacity = +opacity;\n}\n\ndefine(Lab, lab, extend(Color, {\n brighter: function(k) {\n return new Lab(this.l + K * (k == null ? 1 : k), this.a, this.b, this.opacity);\n },\n darker: function(k) {\n return new Lab(this.l - K * (k == null ? 1 : k), this.a, this.b, this.opacity);\n },\n 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 x = Xn * lab2xyz(x);\n y = Yn * lab2xyz(y);\n z = Zn * lab2xyz(z);\n return new Rgb(\n lrgb2rgb( 3.1338561 * x - 1.6168667 * y - 0.4906146 * z),\n lrgb2rgb(-0.9787684 * x + 1.9161415 * y + 0.0334540 * z),\n lrgb2rgb( 0.0719453 * x - 0.2289914 * y + 1.4052427 * z),\n this.opacity\n );\n }\n}));\n\nfunction xyz2lab(t) {\n return t > t3 ? Math.pow(t, 1 / 3) : t / t2 + t0;\n}\n\nfunction lab2xyz(t) {\n return t > t1 ? t * t * t : t2 * (t - t0);\n}\n\nfunction lrgb2rgb(x) {\n return 255 * (x <= 0.0031308 ? 12.92 * x : 1.055 * Math.pow(x, 1 / 2.4) - 0.055);\n}\n\nfunction rgb2lrgb(x) {\n return (x /= 255) <= 0.04045 ? x / 12.92 : Math.pow((x + 0.055) / 1.055, 2.4);\n}\n\nfunction hclConvert(o) {\n if (o instanceof Hcl) return new Hcl(o.h, o.c, o.l, o.opacity);\n if (!(o instanceof Lab)) o = labConvert(o);\n if (o.a === 0 && o.b === 0) return new Hcl(NaN, 0, o.l, o.opacity);\n var h = Math.atan2(o.b, o.a) * rad2deg;\n return new Hcl(h < 0 ? h + 360 : h, Math.sqrt(o.a * o.a + o.b * o.b), o.l, o.opacity);\n}\n\nexport function lch(l, c, h, opacity) {\n return arguments.length === 1 ? hclConvert(l) : new Hcl(h, c, l, opacity == null ? 1 : opacity);\n}\n\nexport function hcl(h, c, l, opacity) {\n return arguments.length === 1 ? hclConvert(h) : new Hcl(h, c, l, opacity == null ? 1 : opacity);\n}\n\nexport function Hcl(h, c, l, opacity) {\n this.h = +h;\n this.c = +c;\n this.l = +l;\n this.opacity = +opacity;\n}\n\ndefine(Hcl, hcl, extend(Color, {\n brighter: function(k) {\n return new Hcl(this.h, this.c, this.l + K * (k == null ? 1 : k), this.opacity);\n },\n darker: function(k) {\n return new Hcl(this.h, this.c, this.l - K * (k == null ? 1 : k), this.opacity);\n },\n rgb: function() {\n return labConvert(this).rgb();\n }\n}));\n","import define, {extend} from \"./define\";\nimport {Color, rgbConvert, Rgb, darker, brighter} from \"./color\";\nimport {deg2rad, rad2deg} from \"./math\";\n\nvar A = -0.14861,\n B = +1.78277,\n C = -0.29227,\n D = -0.90649,\n E = +1.97294,\n ED = E * D,\n EB = E * B,\n BC_DA = B * C - D * A;\n\nfunction cubehelixConvert(o) {\n if (o instanceof Cubehelix) return new Cubehelix(o.h, o.s, o.l, o.opacity);\n if (!(o instanceof Rgb)) o = rgbConvert(o);\n var r = o.r / 255,\n g = o.g / 255,\n b = o.b / 255,\n l = (BC_DA * b + ED * r - EB * g) / (BC_DA + ED - EB),\n bl = b - l,\n 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 return new Cubehelix(h < 0 ? h + 360 : h, s, l, o.opacity);\n}\n\nexport default function cubehelix(h, s, l, opacity) {\n return arguments.length === 1 ? cubehelixConvert(h) : new Cubehelix(h, s, l, opacity == null ? 1 : opacity);\n}\n\nexport function Cubehelix(h, s, l, opacity) {\n this.h = +h;\n this.s = +s;\n this.l = +l;\n this.opacity = +opacity;\n}\n\ndefine(Cubehelix, cubehelix, extend(Color, {\n brighter: function(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Cubehelix(this.h, this.s, this.l * k, this.opacity);\n },\n darker: function(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Cubehelix(this.h, this.s, this.l * k, this.opacity);\n },\n 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 this.opacity\n );\n }\n}));\n","export function basis(t1, v0, v1, v2, v3) {\n var t2 = t1 * t1, t3 = t2 * t1;\n return ((1 - 3 * t1 + 3 * t2 - t3) * v0\n + (4 - 6 * t2 + 3 * t3) * v1\n + (1 + 3 * t1 + 3 * t2 - 3 * t3) * v2\n + t3 * v3) / 6;\n}\n\nexport default function(values) {\n var n = values.length - 1;\n return function(t) {\n var i = t <= 0 ? (t = 0) : t >= 1 ? (t = 1, n - 1) : Math.floor(t * n),\n v1 = values[i],\n v2 = values[i + 1],\n v0 = i > 0 ? values[i - 1] : 2 * v1 - v2,\n v3 = i < n - 1 ? values[i + 2] : 2 * v2 - v1;\n return basis((t - i / n) * n, v0, v1, v2, v3);\n };\n}\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","import constant from \"./constant\";\n\nfunction linear(a, d) {\n return function(t) {\n return a + t * d;\n };\n}\n\nfunction exponential(a, b, y) {\n return a = Math.pow(a, y), b = Math.pow(b, y) - a, y = 1 / y, function(t) {\n return Math.pow(a + t * b, y);\n };\n}\n\nexport function hue(a, b) {\n var d = b - a;\n return d ? linear(a, d > 180 || d < -180 ? d - 360 * Math.round(d / 360) : d) : constant(isNaN(a) ? b : a);\n}\n\nexport function gamma(y) {\n return (y = +y) === 1 ? nogamma : function(a, b) {\n return b - a ? exponential(a, b, y) : constant(isNaN(a) ? b : a);\n };\n}\n\nexport default function nogamma(a, b) {\n var d = b - a;\n return d ? linear(a, d) : constant(isNaN(a) ? b : a);\n}\n","import {rgb as colorRgb} from \"d3-color\";\nimport basis from \"./basis\";\nimport basisClosed from \"./basisClosed\";\nimport nogamma, {gamma} from \"./color\";\n\nexport default (function rgbGamma(y) {\n var color = gamma(y);\n\n function rgb(start, end) {\n var r = color((start = colorRgb(start)).r, (end = colorRgb(end)).r),\n g = color(start.g, end.g),\n b = color(start.b, end.b),\n opacity = nogamma(start.opacity, end.opacity);\n return function(t) {\n start.r = r(t);\n start.g = g(t);\n start.b = b(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n\n rgb.gamma = rgbGamma;\n\n return rgb;\n})(1);\n\nfunction rgbSpline(spline) {\n return function(colors) {\n var n = colors.length,\n r = new Array(n),\n g = new Array(n),\n b = new Array(n),\n i, color;\n for (i = 0; i < n; ++i) {\n color = colorRgb(colors[i]);\n r[i] = color.r || 0;\n g[i] = color.g || 0;\n b[i] = color.b || 0;\n }\n r = spline(r);\n g = spline(g);\n b = spline(b);\n color.opacity = 1;\n return function(t) {\n color.r = r(t);\n color.g = g(t);\n color.b = b(t);\n return color + \"\";\n };\n };\n}\n\nexport var rgbBasis = rgbSpline(basis);\nexport var rgbBasisClosed = rgbSpline(basisClosed);\n","export default function(a, b) {\n return a = +a, b -= a, function(t) {\n return a + b * t;\n };\n}\n","import {basis} from \"./basis\";\n\nexport default function(values) {\n var n = values.length;\n return function(t) {\n var i = Math.floor(((t %= 1) < 0 ? ++t : t) * n),\n v0 = values[(i + n - 1) % n],\n v1 = values[i % n],\n v2 = values[(i + 1) % n],\n v3 = values[(i + 2) % n];\n return basis((t - i / n) * n, v0, v1, v2, v3);\n };\n}\n","import number from \"./number\";\n\nvar reA = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n reB = new RegExp(reA.source, \"g\");\n\nfunction zero(b) {\n return function() {\n return b;\n };\n}\n\nfunction one(b) {\n return function(t) {\n return b(t) + \"\";\n };\n}\n\nexport default function(a, b) {\n var bi = reA.lastIndex = reB.lastIndex = 0, // scan index for next number in b\n am, // current match in a\n bm, // current match in b\n bs, // string preceding current number in b, if any\n i = -1, // index in s\n s = [], // string constants and placeholders\n q = []; // number interpolators\n\n // Coerce inputs to strings.\n a = a + \"\", b = b + \"\";\n\n // Interpolate pairs of numbers in a & b.\n while ((am = reA.exec(a))\n && (bm = reB.exec(b))) {\n if ((bs = bm.index) > bi) { // a string precedes the next number in b\n bs = b.slice(bi, bs);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n if ((am = am[0]) === (bm = bm[0])) { // numbers in a & b match\n if (s[i]) s[i] += bm; // coalesce with previous string\n else s[++i] = bm;\n } else { // interpolate non-matching numbers\n s[++i] = null;\n q.push({i: i, x: number(am, bm)});\n }\n bi = reB.lastIndex;\n }\n\n // Add remains of b.\n if (bi < b.length) {\n bs = b.slice(bi);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n\n // Special optimization for only a single match.\n // Otherwise, interpolate each of the numbers and rejoin the string.\n return s.length < 2 ? (q[0]\n ? one(q[0].x)\n : zero(b))\n : (b = q.length, function(t) {\n for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t);\n return s.join(\"\");\n });\n}\n","import decompose, {identity} from \"./decompose\";\n\nvar cssNode,\n cssRoot,\n cssView,\n svgNode;\n\nexport function parseCss(value) {\n if (value === \"none\") return identity;\n if (!cssNode) cssNode = document.createElement(\"DIV\"), cssRoot = document.documentElement, cssView = document.defaultView;\n cssNode.style.transform = value;\n value = cssView.getComputedStyle(cssRoot.appendChild(cssNode), null).getPropertyValue(\"transform\");\n cssRoot.removeChild(cssNode);\n value = value.slice(7, -1).split(\",\");\n return decompose(+value[0], +value[1], +value[2], +value[3], +value[4], +value[5]);\n}\n\nexport function parseSvg(value) {\n if (value == null) return identity;\n if (!svgNode) svgNode = document.createElementNS(\"http://www.w3.org/2000/svg\", \"g\");\n svgNode.setAttribute(\"transform\", value);\n if (!(value = svgNode.transform.baseVal.consolidate())) return identity;\n value = value.matrix;\n return decompose(value.a, value.b, value.c, value.d, value.e, value.f);\n}\n","import {color} from \"d3-color\";\nimport rgb from \"./rgb\";\nimport array from \"./array\";\nimport date from \"./date\";\nimport number from \"./number\";\nimport object from \"./object\";\nimport string from \"./string\";\nimport constant from \"./constant\";\n\nexport default function(a, b) {\n var t = typeof b, c;\n return b == null || t === \"boolean\" ? constant(b)\n : (t === \"number\" ? number\n : t === \"string\" ? ((c = color(b)) ? (b = c, rgb) : string)\n : b instanceof color ? rgb\n : b instanceof Date ? date\n : Array.isArray(b) ? array\n : typeof b.valueOf !== \"function\" && typeof b.toString !== \"function\" || isNaN(b) ? object\n : number)(a, b);\n}\n","export default function(a, b) {\n var d = new Date;\n return a = +a, b -= a, function(t) {\n return d.setTime(a + b * t), d;\n };\n}\n","import value from \"./value\";\n\nexport default function(a, b) {\n var nb = b ? b.length : 0,\n na = a ? Math.min(nb, a.length) : 0,\n x = new Array(na),\n c = new Array(nb),\n i;\n\n for (i = 0; i < na; ++i) x[i] = value(a[i], b[i]);\n for (; i < nb; ++i) c[i] = b[i];\n\n return function(t) {\n for (i = 0; i < na; ++i) c[i] = x[i](t);\n return c;\n };\n}\n","import value from \"./value\";\n\nexport default function(a, b) {\n var i = {},\n c = {},\n k;\n\n if (a === null || typeof a !== \"object\") a = {};\n if (b === null || typeof b !== \"object\") b = {};\n\n for (k in b) {\n if (k in a) {\n i[k] = value(a[k], b[k]);\n } else {\n c[k] = b[k];\n }\n }\n\n return function(t) {\n for (k in i) c[k] = i[k](t);\n return c;\n };\n}\n","export default function(a, b) {\n return a = +a, b -= a, function(t) {\n return Math.round(a + b * t);\n };\n}\n","var degrees = 180 / Math.PI;\n\nexport var identity = {\n translateX: 0,\n translateY: 0,\n rotate: 0,\n skewX: 0,\n scaleX: 1,\n scaleY: 1\n};\n\nexport default function(a, b, c, d, e, f) {\n var scaleX, scaleY, skewX;\n if (scaleX = Math.sqrt(a * a + b * b)) a /= scaleX, b /= scaleX;\n if (skewX = a * c + b * d) c -= a * skewX, d -= b * skewX;\n if (scaleY = Math.sqrt(c * c + d * d)) c /= scaleY, d /= scaleY, skewX /= scaleY;\n if (a * d < b * c) a = -a, b = -b, skewX = -skewX, scaleX = -scaleX;\n return {\n translateX: e,\n translateY: f,\n rotate: Math.atan2(b, a) * degrees,\n skewX: Math.atan(skewX) * degrees,\n scaleX: scaleX,\n scaleY: scaleY\n };\n}\n","import number from \"../number\";\nimport {parseCss, parseSvg} from \"./parse\";\n\nfunction interpolateTransform(parse, pxComma, pxParen, degParen) {\n\n function pop(s) {\n return s.length ? s.pop() + \" \" : \"\";\n }\n\n function translate(xa, ya, xb, yb, s, q) {\n if (xa !== xb || ya !== yb) {\n var i = s.push(\"translate(\", null, pxComma, null, pxParen);\n q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\n } else if (xb || yb) {\n s.push(\"translate(\" + xb + pxComma + yb + pxParen);\n }\n }\n\n function rotate(a, b, s, q) {\n if (a !== b) {\n if (a - b > 180) b += 360; else if (b - a > 180) a += 360; // shortest path\n q.push({i: s.push(pop(s) + \"rotate(\", null, degParen) - 2, x: number(a, b)});\n } else if (b) {\n s.push(pop(s) + \"rotate(\" + b + degParen);\n }\n }\n\n function skewX(a, b, s, q) {\n if (a !== b) {\n q.push({i: s.push(pop(s) + \"skewX(\", null, degParen) - 2, x: number(a, b)});\n } else if (b) {\n s.push(pop(s) + \"skewX(\" + b + degParen);\n }\n }\n\n function scale(xa, ya, xb, yb, s, q) {\n if (xa !== xb || ya !== yb) {\n var i = s.push(pop(s) + \"scale(\", null, \",\", null, \")\");\n q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\n } else if (xb !== 1 || yb !== 1) {\n s.push(pop(s) + \"scale(\" + xb + \",\" + yb + \")\");\n }\n }\n\n return function(a, b) {\n var s = [], // string constants and placeholders\n q = []; // number interpolators\n a = parse(a), b = parse(b);\n translate(a.translateX, a.translateY, b.translateX, b.translateY, s, q);\n rotate(a.rotate, b.rotate, s, q);\n skewX(a.skewX, b.skewX, s, q);\n scale(a.scaleX, a.scaleY, b.scaleX, b.scaleY, s, q);\n a = b = null; // gc\n return function(t) {\n var i = -1, n = q.length, o;\n while (++i < n) s[(o = q[i]).i] = o.x(t);\n return s.join(\"\");\n };\n };\n}\n\nexport var interpolateTransformCss = interpolateTransform(parseCss, \"px, \", \"px)\", \"deg)\");\nexport var interpolateTransformSvg = interpolateTransform(parseSvg, \", \", \")\", \")\");\n","var rho = Math.SQRT2,\n rho2 = 2,\n rho4 = 4,\n epsilon2 = 1e-12;\n\nfunction cosh(x) {\n return ((x = Math.exp(x)) + 1 / x) / 2;\n}\n\nfunction sinh(x) {\n return ((x = Math.exp(x)) - 1 / x) / 2;\n}\n\nfunction tanh(x) {\n return ((x = Math.exp(2 * x)) - 1) / (x + 1);\n}\n\n// p0 = [ux0, uy0, w0]\n// p1 = [ux1, uy1, w1]\nexport default function(p0, p1) {\n var ux0 = p0[0], uy0 = p0[1], w0 = p0[2],\n ux1 = p1[0], uy1 = p1[1], w1 = p1[2],\n dx = ux1 - ux0,\n dy = uy1 - uy0,\n d2 = dx * dx + dy * dy,\n i,\n S;\n\n // Special case for u0 ≅ u1.\n if (d2 < epsilon2) {\n S = Math.log(w1 / w0) / rho;\n i = function(t) {\n return [\n ux0 + t * dx,\n uy0 + t * dy,\n w0 * Math.exp(rho * t * S)\n ];\n }\n }\n\n // General case.\n else {\n var d1 = Math.sqrt(d2),\n b0 = (w1 * w1 - w0 * w0 + rho4 * d2) / (2 * w0 * rho2 * d1),\n b1 = (w1 * w1 - w0 * w0 - rho4 * d2) / (2 * w1 * rho2 * d1),\n r0 = Math.log(Math.sqrt(b0 * b0 + 1) - b0),\n r1 = Math.log(Math.sqrt(b1 * b1 + 1) - b1);\n S = (r1 - r0) / rho;\n i = function(t) {\n var s = t * S,\n coshr0 = cosh(r0),\n u = w0 / (rho2 * d1) * (coshr0 * tanh(rho * s + r0) - sinh(r0));\n return [\n ux0 + u * dx,\n uy0 + u * dy,\n w0 * coshr0 / cosh(rho * s + r0)\n ];\n }\n }\n\n i.duration = S * 1000;\n\n return i;\n}\n","import {hsl as colorHsl} from \"d3-color\";\nimport color, {hue} from \"./color\";\n\nfunction hsl(hue) {\n return function(start, end) {\n var h = hue((start = colorHsl(start)).h, (end = colorHsl(end)).h),\n s = color(start.s, end.s),\n l = color(start.l, end.l),\n opacity = color(start.opacity, end.opacity);\n return function(t) {\n start.h = h(t);\n start.s = s(t);\n start.l = l(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n}\n\nexport default hsl(hue);\nexport var hslLong = hsl(color);\n","import {hcl as colorHcl} from \"d3-color\";\nimport color, {hue} from \"./color\";\n\nfunction hcl(hue) {\n return function(start, end) {\n var h = hue((start = colorHcl(start)).h, (end = colorHcl(end)).h),\n c = color(start.c, end.c),\n l = color(start.l, end.l),\n opacity = color(start.opacity, end.opacity);\n return function(t) {\n start.h = h(t);\n start.c = c(t);\n start.l = l(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n}\n\nexport default hcl(hue);\nexport var hclLong = hcl(color);\n","import {cubehelix as colorCubehelix} from \"d3-color\";\nimport color, {hue} from \"./color\";\n\nfunction cubehelix(hue) {\n return (function cubehelixGamma(y) {\n y = +y;\n\n function cubehelix(start, end) {\n var h = hue((start = colorCubehelix(start)).h, (end = colorCubehelix(end)).h),\n s = color(start.s, end.s),\n l = color(start.l, end.l),\n opacity = color(start.opacity, end.opacity);\n return function(t) {\n start.h = h(t);\n start.s = s(t);\n start.l = l(Math.pow(t, y));\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n\n cubehelix.gamma = cubehelixGamma;\n\n return cubehelix;\n })(1);\n}\n\nexport default cubehelix(hue);\nexport var cubehelixLong = cubehelix(color);\n","export default function piecewise(interpolate, values) {\n var i = 0, n = values.length - 1, v = values[0], I = new Array(n < 0 ? 0 : n);\n while (i < n) I[i] = interpolate(v, v = values[++i]);\n return function(t) {\n var i = Math.max(0, Math.min(n - 1, Math.floor(t *= n)));\n return I[i](t - i);\n };\n}\n","export default function(interpolator, n) {\n var samples = new Array(n);\n for (var i = 0; i < n; ++i) samples[i] = interpolator(i / (n - 1));\n return samples;\n}\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","export default function(x) {\n return +x;\n}\n","import {bisect} from \"d3-array\";\nimport {interpolate as interpolateValue, interpolateRound} from \"d3-interpolate\";\nimport {map, slice} from \"./array\";\nimport constant from \"./constant\";\nimport number from \"./number\";\n\nvar unit = [0, 1];\n\nexport function deinterpolateLinear(a, b) {\n return (b -= (a = +a))\n ? function(x) { return (x - a) / b; }\n : constant(b);\n}\n\nfunction deinterpolateClamp(deinterpolate) {\n return function(a, b) {\n var d = deinterpolate(a = +a, b = +b);\n return function(x) { return x <= a ? 0 : x >= b ? 1 : d(x); };\n };\n}\n\nfunction reinterpolateClamp(reinterpolate) {\n return function(a, b) {\n var r = reinterpolate(a = +a, b = +b);\n return function(t) { return t <= 0 ? a : t >= 1 ? b : r(t); };\n };\n}\n\nfunction bimap(domain, range, deinterpolate, reinterpolate) {\n var d0 = domain[0], d1 = domain[1], r0 = range[0], r1 = range[1];\n if (d1 < d0) d0 = deinterpolate(d1, d0), r0 = reinterpolate(r1, r0);\n else d0 = deinterpolate(d0, d1), r0 = reinterpolate(r0, r1);\n return function(x) { return r0(d0(x)); };\n}\n\nfunction polymap(domain, range, deinterpolate, reinterpolate) {\n var j = Math.min(domain.length, range.length) - 1,\n d = new Array(j),\n r = new Array(j),\n i = -1;\n\n // Reverse descending domains.\n if (domain[j] < domain[0]) {\n domain = domain.slice().reverse();\n range = range.slice().reverse();\n }\n\n while (++i < j) {\n d[i] = deinterpolate(domain[i], domain[i + 1]);\n r[i] = reinterpolate(range[i], range[i + 1]);\n }\n\n return function(x) {\n var i = bisect(domain, x, 1, j) - 1;\n return r[i](d[i](x));\n };\n}\n\nexport function copy(source, target) {\n return target\n .domain(source.domain())\n .range(source.range())\n .interpolate(source.interpolate())\n .clamp(source.clamp());\n}\n\n// deinterpolate(a, b)(x) takes a domain value x in [a,b] and returns the corresponding parameter t in [0,1].\n// reinterpolate(a, b)(t) takes a parameter t in [0,1] and returns the corresponding domain value x in [a,b].\nexport default function continuous(deinterpolate, reinterpolate) {\n var domain = unit,\n range = unit,\n interpolate = interpolateValue,\n clamp = false,\n piecewise,\n output,\n input;\n\n function rescale() {\n piecewise = Math.min(domain.length, range.length) > 2 ? polymap : bimap;\n output = input = null;\n return scale;\n }\n\n function scale(x) {\n return (output || (output = piecewise(domain, range, clamp ? deinterpolateClamp(deinterpolate) : deinterpolate, interpolate)))(+x);\n }\n\n scale.invert = function(y) {\n return (input || (input = piecewise(range, domain, deinterpolateLinear, clamp ? reinterpolateClamp(reinterpolate) : reinterpolate)))(+y);\n };\n\n scale.domain = function(_) {\n return arguments.length ? (domain = map.call(_, number), rescale()) : domain.slice();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = slice.call(_), rescale()) : range.slice();\n };\n\n scale.rangeRound = function(_) {\n return range = slice.call(_), interpolate = interpolateRound, rescale();\n };\n\n scale.clamp = function(_) {\n return arguments.length ? (clamp = !!_, rescale()) : clamp;\n };\n\n scale.interpolate = function(_) {\n return arguments.length ? (interpolate = _, rescale()) : interpolate;\n };\n\n return rescale();\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].\nexport default function(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","import formatDecimal from \"./formatDecimal\";\n\nexport default function(x) {\n return x = formatDecimal(Math.abs(x)), x ? x[1] : NaN;\n}\n","// [[fill]align][sign][symbol][0][width][,][.precision][~][type]\nvar re = /^(?:(.)?([<>=^]))?([+\\-( ])?([$#])?(0)?(\\d+)?(,)?(\\.\\d+)?(~)?([a-z%])?$/i;\n\nexport default function formatSpecifier(specifier) {\n return new FormatSpecifier(specifier);\n}\n\nformatSpecifier.prototype = FormatSpecifier.prototype; // instanceof\n\nfunction FormatSpecifier(specifier) {\n if (!(match = re.exec(specifier))) throw new Error(\"invalid format: \" + specifier);\n var match;\n this.fill = match[1] || \" \";\n this.align = match[2] || \">\";\n this.sign = match[3] || \"-\";\n this.symbol = match[4] || \"\";\n this.zero = !!match[5];\n this.width = match[6] && +match[6];\n this.comma = !!match[7];\n this.precision = match[8] && +match[8].slice(1);\n this.trim = !!match[9];\n this.type = match[10] || \"\";\n}\n\nFormatSpecifier.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.trim ? \"~\" : \"\")\n + this.type;\n};\n","// Trims insignificant zeros, e.g., replaces 1.2000k with 1.2k.\nexport default function(s) {\n out: for (var n = s.length, i = 1, i0 = -1, i1; i < n; ++i) {\n switch (s[i]) {\n case \".\": i0 = i1 = i; break;\n case \"0\": if (i0 === 0) i0 = i; i1 = i; break;\n default: if (i0 > 0) { if (!+s[i]) break out; i0 = 0; } break;\n }\n }\n return i0 > 0 ? s.slice(0, i0) + s.slice(i1 + 1) : s;\n}\n","import formatDecimal from \"./formatDecimal\";\n\nexport var prefixExponent;\n\nexport default function(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, Math.max(0, p + i - 1))[0]; // less than 1y!\n}\n","import formatLocale from \"./locale\";\n\nvar locale;\nexport var format;\nexport var formatPrefix;\n\ndefaultLocale({\n decimal: \".\",\n thousands: \",\",\n grouping: [3],\n currency: [\"$\", \"\"]\n});\n\nexport default function defaultLocale(definition) {\n locale = formatLocale(definition);\n format = locale.format;\n formatPrefix = locale.formatPrefix;\n return locale;\n}\n","import formatDecimal from \"./formatDecimal\";\n\nexport default function(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","import formatPrefixAuto from \"./formatPrefixAuto\";\nimport formatRounded from \"./formatRounded\";\n\nexport default {\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","export default function(x) {\n return x;\n}\n","import exponent from \"./exponent\";\nimport formatGroup from \"./formatGroup\";\nimport formatNumerals from \"./formatNumerals\";\nimport formatSpecifier from \"./formatSpecifier\";\nimport formatTrim from \"./formatTrim\";\nimport formatTypes from \"./formatTypes\";\nimport {prefixExponent} from \"./formatPrefixAuto\";\nimport identity from \"./identity\";\n\nvar prefixes = [\"y\",\"z\",\"a\",\"f\",\"p\",\"n\",\"µ\",\"m\",\"\",\"k\",\"M\",\"G\",\"T\",\"P\",\"E\",\"Z\",\"Y\"];\n\nexport default function(locale) {\n var group = locale.grouping && locale.thousands ? formatGroup(locale.grouping, locale.thousands) : identity,\n currency = locale.currency,\n decimal = locale.decimal,\n numerals = locale.numerals ? formatNumerals(locale.numerals) : identity,\n percent = locale.percent || \"%\";\n\n function newFormat(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 trim = specifier.trim,\n type = specifier.type;\n\n // The \"n\" type is an alias for \",g\".\n if (type === \"n\") comma = true, type = \"g\";\n\n // The \"\" type, and any invalid type, is an alias for \".12~g\".\n else if (!formatTypes[type]) precision == null && (precision = 12), trim = true, type = \"g\";\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 // 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) ? percent : \"\";\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 = /[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 ? 6\n : /[gprs]/.test(type) ? Math.max(1, Math.min(21, precision))\n : Math.max(0, Math.min(20, precision));\n\n function format(value) {\n var valuePrefix = prefix,\n valueSuffix = suffix,\n i, n, c;\n\n if (type === \"c\") {\n valueSuffix = formatType(value) + valueSuffix;\n value = \"\";\n } else {\n value = +value;\n\n // Perform the initial formatting.\n var valueNegative = value < 0;\n value = formatType(Math.abs(value), precision);\n\n // Trim insignificant zeros.\n if (trim) value = formatTrim(value);\n\n // If a negative value rounds to zero during formatting, treat as positive.\n if (valueNegative && +value === 0) valueNegative = false;\n\n // Compute the prefix and suffix.\n valuePrefix = (valueNegative ? (sign === \"(\" ? sign : \"-\") : sign === \"-\" || sign === \"(\" ? \"\" : sign) + valuePrefix;\n valueSuffix = (type === \"s\" ? prefixes[8 + prefixExponent / 3] : \"\") + valueSuffix + (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 i = -1, n = value.length;\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 \"<\": value = valuePrefix + value + valueSuffix + padding; break;\n case \"=\": value = valuePrefix + padding + value + valueSuffix; break;\n case \"^\": value = padding.slice(0, length = padding.length >> 1) + valuePrefix + value + valueSuffix + padding.slice(length); break;\n default: value = padding + valuePrefix + value + valueSuffix; break;\n }\n\n return numerals(value);\n }\n\n format.toString = function() {\n return specifier + \"\";\n };\n\n return format;\n }\n\n function formatPrefix(specifier, value) {\n var f = newFormat((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: newFormat,\n formatPrefix: formatPrefix\n };\n}\n","export default function(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","export default function(numerals) {\n return function(value) {\n return value.replace(/[0-9]/g, function(i) {\n return numerals[+i];\n });\n };\n}\n","import exponent from \"./exponent\";\n\nexport default function(step) {\n return Math.max(0, -exponent(Math.abs(step)));\n}\n","import {tickStep} from \"d3-array\";\nimport {format, formatPrefix, formatSpecifier, precisionFixed, precisionPrefix, precisionRound} from \"d3-format\";\n\nexport default function(domain, count, specifier) {\n var start = domain[0],\n stop = domain[domain.length - 1],\n step = tickStep(start, stop, count == null ? 10 : count),\n precision;\n specifier = formatSpecifier(specifier == null ? \",f\" : specifier);\n switch (specifier.type) {\n case \"s\": {\n var value = Math.max(Math.abs(start), Math.abs(stop));\n if (specifier.precision == null && !isNaN(precision = precisionPrefix(step, value))) specifier.precision = precision;\n return formatPrefix(specifier, value);\n }\n case \"\":\n case \"e\":\n case \"g\":\n case \"p\":\n case \"r\": {\n if (specifier.precision == null && !isNaN(precision = precisionRound(step, Math.max(Math.abs(start), Math.abs(stop))))) specifier.precision = precision - (specifier.type === \"e\");\n break;\n }\n case \"f\":\n case \"%\": {\n if (specifier.precision == null && !isNaN(precision = precisionFixed(step))) specifier.precision = precision - (specifier.type === \"%\") * 2;\n break;\n }\n }\n return format(specifier);\n}\n","import exponent from \"./exponent\";\n\nexport default function(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","import exponent from \"./exponent\";\n\nexport default function(step, max) {\n step = Math.abs(step), max = Math.abs(max) - step;\n return Math.max(0, exponent(max) - exponent(step)) + 1;\n}\n","import {ticks, tickIncrement} from \"d3-array\";\nimport {interpolateNumber as reinterpolate} from \"d3-interpolate\";\nimport {default as continuous, copy, deinterpolateLinear as deinterpolate} from \"./continuous\";\nimport tickFormat from \"./tickFormat\";\n\nexport function linearish(scale) {\n var domain = scale.domain;\n\n scale.ticks = function(count) {\n var d = domain();\n return ticks(d[0], d[d.length - 1], count == null ? 10 : count);\n };\n\n scale.tickFormat = function(count, specifier) {\n return tickFormat(domain(), count, specifier);\n };\n\n scale.nice = function(count) {\n if (count == null) count = 10;\n\n var d = domain(),\n i0 = 0,\n i1 = d.length - 1,\n start = d[i0],\n stop = d[i1],\n step;\n\n if (stop < start) {\n step = start, start = stop, stop = step;\n step = i0, i0 = i1, i1 = step;\n }\n\n step = tickIncrement(start, stop, count);\n\n if (step > 0) {\n start = Math.floor(start / step) * step;\n stop = Math.ceil(stop / step) * step;\n step = tickIncrement(start, stop, count);\n } else if (step < 0) {\n start = Math.ceil(start * step) / step;\n stop = Math.floor(stop * step) / step;\n step = tickIncrement(start, stop, count);\n }\n\n if (step > 0) {\n d[i0] = Math.floor(start / step) * step;\n d[i1] = Math.ceil(stop / step) * step;\n domain(d);\n } else if (step < 0) {\n d[i0] = Math.ceil(start * step) / step;\n d[i1] = Math.floor(stop * step) / step;\n domain(d);\n }\n\n return scale;\n };\n\n return scale;\n}\n\nexport default function linear() {\n var scale = continuous(deinterpolate, reinterpolate);\n\n scale.copy = function() {\n return copy(scale, linear());\n };\n\n return linearish(scale);\n}\n","import {map} from \"./array\";\nimport {linearish} from \"./linear\";\nimport number from \"./number\";\n\nexport default function identity() {\n var domain = [0, 1];\n\n function scale(x) {\n return +x;\n }\n\n scale.invert = scale;\n\n scale.domain = scale.range = function(_) {\n return arguments.length ? (domain = map.call(_, number), scale) : domain.slice();\n };\n\n scale.copy = function() {\n return identity().domain(domain);\n };\n\n return linearish(scale);\n}\n","export default function(domain, interval) {\n domain = domain.slice();\n\n var i0 = 0,\n i1 = domain.length - 1,\n x0 = domain[i0],\n x1 = domain[i1],\n t;\n\n if (x1 < x0) {\n t = i0, i0 = i1, i1 = t;\n t = x0, x0 = x1, x1 = t;\n }\n\n domain[i0] = interval.floor(x0);\n domain[i1] = interval.ceil(x1);\n return domain;\n}\n","import {ticks} from \"d3-array\";\nimport {format} from \"d3-format\";\nimport constant from \"./constant\";\nimport nice from \"./nice\";\nimport {default as continuous, copy} from \"./continuous\";\n\nfunction deinterpolate(a, b) {\n return (b = Math.log(b / a))\n ? function(x) { return Math.log(x / a) / b; }\n : constant(b);\n}\n\nfunction reinterpolate(a, b) {\n return a < 0\n ? function(t) { return -Math.pow(-b, t) * Math.pow(-a, 1 - t); }\n : function(t) { return Math.pow(b, t) * Math.pow(a, 1 - t); };\n}\n\nfunction pow10(x) {\n return isFinite(x) ? +(\"1e\" + x) : x < 0 ? 0 : x;\n}\n\nfunction powp(base) {\n return base === 10 ? pow10\n : base === Math.E ? Math.exp\n : function(x) { return Math.pow(base, x); };\n}\n\nfunction logp(base) {\n return base === Math.E ? Math.log\n : base === 10 && Math.log10\n || base === 2 && Math.log2\n || (base = Math.log(base), function(x) { return Math.log(x) / base; });\n}\n\nfunction reflect(f) {\n return function(x) {\n return -f(-x);\n };\n}\n\nexport default function log() {\n var scale = continuous(deinterpolate, reinterpolate).domain([1, 10]),\n domain = scale.domain,\n base = 10,\n logs = logp(10),\n pows = powp(10);\n\n function rescale() {\n logs = logp(base), pows = powp(base);\n if (domain()[0] < 0) logs = reflect(logs), pows = reflect(pows);\n return scale;\n }\n\n scale.base = function(_) {\n return arguments.length ? (base = +_, rescale()) : base;\n };\n\n scale.domain = function(_) {\n return arguments.length ? (domain(_), rescale()) : domain();\n };\n\n scale.ticks = function(count) {\n var d = domain(),\n u = d[0],\n v = d[d.length - 1],\n r;\n\n if (r = v < u) i = u, u = v, v = i;\n\n var i = logs(u),\n j = logs(v),\n p,\n k,\n t,\n n = count == null ? 10 : +count,\n z = [];\n\n if (!(base % 1) && j - i < n) {\n i = Math.round(i) - 1, j = Math.round(j) + 1;\n if (u > 0) for (; i < j; ++i) {\n for (k = 1, p = pows(i); k < base; ++k) {\n t = p * k;\n if (t < u) continue;\n if (t > v) break;\n z.push(t);\n }\n } else for (; i < j; ++i) {\n for (k = base - 1, p = pows(i); k >= 1; --k) {\n t = p * k;\n if (t < u) continue;\n if (t > v) break;\n z.push(t);\n }\n }\n } else {\n z = ticks(i, j, Math.min(j - i, n)).map(pows);\n }\n\n return r ? z.reverse() : z;\n };\n\n scale.tickFormat = function(count, specifier) {\n if (specifier == null) specifier = base === 10 ? \".0e\" : \",\";\n if (typeof specifier !== \"function\") specifier = format(specifier);\n if (count === Infinity) return specifier;\n if (count == null) count = 10;\n var k = Math.max(1, base * count / scale.ticks().length); // TODO fast estimate?\n return function(d) {\n var i = d / pows(Math.round(logs(d)));\n if (i * base < base - 0.5) i *= base;\n return i <= k ? specifier(d) : \"\";\n };\n };\n\n scale.nice = function() {\n return domain(nice(domain(), {\n floor: function(x) { return pows(Math.floor(logs(x))); },\n ceil: function(x) { return pows(Math.ceil(logs(x))); }\n }));\n };\n\n scale.copy = function() {\n return copy(scale, log().base(base));\n };\n\n return scale;\n}\n","import constant from \"./constant\";\nimport {linearish} from \"./linear\";\nimport {default as continuous, copy} from \"./continuous\";\n\nfunction raise(x, exponent) {\n return x < 0 ? -Math.pow(-x, exponent) : Math.pow(x, exponent);\n}\n\nexport default function pow() {\n var exponent = 1,\n scale = continuous(deinterpolate, reinterpolate),\n domain = scale.domain;\n\n function deinterpolate(a, b) {\n return (b = raise(b, exponent) - (a = raise(a, exponent)))\n ? function(x) { return (raise(x, exponent) - a) / b; }\n : constant(b);\n }\n\n function reinterpolate(a, b) {\n b = raise(b, exponent) - (a = raise(a, exponent));\n return function(t) { return raise(a + b * t, 1 / exponent); };\n }\n\n scale.exponent = function(_) {\n return arguments.length ? (exponent = +_, domain(domain())) : exponent;\n };\n\n scale.copy = function() {\n return copy(scale, pow().exponent(exponent));\n };\n\n return linearish(scale);\n}\n\nexport function sqrt() {\n return pow().exponent(0.5);\n}\n","import {ascending, bisect, quantile as threshold} from \"d3-array\";\nimport {slice} from \"./array\";\n\nexport default function quantile() {\n var domain = [],\n range = [],\n thresholds = [];\n\n function rescale() {\n var i = 0, n = Math.max(1, range.length);\n thresholds = new Array(n - 1);\n while (++i < n) thresholds[i - 1] = threshold(domain, i / n);\n return scale;\n }\n\n function scale(x) {\n if (!isNaN(x = +x)) return range[bisect(thresholds, x)];\n }\n\n scale.invertExtent = function(y) {\n var i = range.indexOf(y);\n return i < 0 ? [NaN, NaN] : [\n i > 0 ? thresholds[i - 1] : domain[0],\n i < thresholds.length ? thresholds[i] : domain[domain.length - 1]\n ];\n };\n\n scale.domain = function(_) {\n if (!arguments.length) return domain.slice();\n domain = [];\n for (var i = 0, n = _.length, d; i < n; ++i) if (d = _[i], d != null && !isNaN(d = +d)) domain.push(d);\n domain.sort(ascending);\n return rescale();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = slice.call(_), rescale()) : range.slice();\n };\n\n scale.quantiles = function() {\n return thresholds.slice();\n };\n\n scale.copy = function() {\n return quantile()\n .domain(domain)\n .range(range);\n };\n\n return scale;\n}\n","import {bisect} from \"d3-array\";\nimport {slice} from \"./array\";\nimport {linearish} from \"./linear\";\n\nexport default function quantize() {\n var x0 = 0,\n x1 = 1,\n n = 1,\n domain = [0.5],\n range = [0, 1];\n\n function scale(x) {\n if (x <= x) return range[bisect(domain, x, 0, n)];\n }\n\n function rescale() {\n var i = -1;\n domain = new Array(n);\n while (++i < n) domain[i] = ((i + 1) * x1 - (i - n) * x0) / (n + 1);\n return scale;\n }\n\n scale.domain = function(_) {\n return arguments.length ? (x0 = +_[0], x1 = +_[1], rescale()) : [x0, x1];\n };\n\n scale.range = function(_) {\n return arguments.length ? (n = (range = slice.call(_)).length - 1, rescale()) : range.slice();\n };\n\n scale.invertExtent = function(y) {\n var i = range.indexOf(y);\n return i < 0 ? [NaN, NaN]\n : i < 1 ? [x0, domain[0]]\n : i >= n ? [domain[n - 1], x1]\n : [domain[i - 1], domain[i]];\n };\n\n scale.copy = function() {\n return quantize()\n .domain([x0, x1])\n .range(range);\n };\n\n return linearish(scale);\n}\n","import {bisect} from \"d3-array\";\nimport {slice} from \"./array\";\n\nexport default function threshold() {\n var domain = [0.5],\n range = [0, 1],\n n = 1;\n\n function scale(x) {\n if (x <= x) return range[bisect(domain, x, 0, n)];\n }\n\n scale.domain = function(_) {\n return arguments.length ? (domain = slice.call(_), n = Math.min(domain.length, range.length - 1), scale) : domain.slice();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = slice.call(_), n = Math.min(domain.length, range.length - 1), scale) : range.slice();\n };\n\n scale.invertExtent = function(y) {\n var i = range.indexOf(y);\n return [domain[i - 1], domain[i]];\n };\n\n scale.copy = function() {\n return threshold()\n .domain(domain)\n .range(range);\n };\n\n return scale;\n}\n","var t0 = new Date,\n t1 = new Date;\n\nexport default function newInterval(floori, offseti, count, field) {\n\n function interval(date) {\n return floori(date = new Date(+date)), date;\n }\n\n interval.floor = interval;\n\n interval.ceil = function(date) {\n return floori(date = new Date(date - 1)), offseti(date, 1), floori(date), date;\n };\n\n interval.round = function(date) {\n var d0 = interval(date),\n d1 = interval.ceil(date);\n return date - d0 < d1 - date ? d0 : d1;\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 = [], previous;\n start = interval.ceil(start);\n step = step == null ? 1 : Math.floor(step);\n if (!(start < stop) || !(step > 0)) return range; // also handles Invalid Date\n do range.push(previous = new Date(+start)), offseti(start, step), floori(start);\n while (previous < start && start < stop);\n return range;\n };\n\n interval.filter = function(test) {\n return newInterval(function(date) {\n if (date >= date) while (floori(date), !test(date)) date.setTime(date - 1);\n }, function(date, step) {\n if (date >= date) {\n if (step < 0) while (++step <= 0) {\n while (offseti(date, -1), !test(date)) {} // eslint-disable-line no-empty\n } else while (--step >= 0) {\n while (offseti(date, +1), !test(date)) {} // eslint-disable-line no-empty\n }\n }\n });\n };\n\n if (count) {\n 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 interval.every = function(step) {\n step = Math.floor(step);\n return !isFinite(step) || !(step > 0) ? null\n : !(step > 1) ? interval\n : interval.filter(field\n ? function(d) { return field(d) % step === 0; }\n : function(d) { return interval.count(0, d) % step === 0; });\n };\n }\n\n return interval;\n}\n","import interval from \"./interval\";\n\nvar millisecond = interval(function() {\n // noop\n}, function(date, step) {\n date.setTime(+date + step);\n}, function(start, end) {\n return end - start;\n});\n\n// An optimized implementation for this simple case.\nmillisecond.every = function(k) {\n k = Math.floor(k);\n if (!isFinite(k) || !(k > 0)) return null;\n if (!(k > 1)) return millisecond;\n return interval(function(date) {\n date.setTime(Math.floor(date / k) * k);\n }, function(date, step) {\n date.setTime(+date + step * k);\n }, function(start, end) {\n return (end - start) / k;\n });\n};\n\nexport default millisecond;\nexport var milliseconds = millisecond.range;\n","export var durationSecond = 1e3;\nexport var durationMinute = 6e4;\nexport var durationHour = 36e5;\nexport var durationDay = 864e5;\nexport var durationWeek = 6048e5;\n","import interval from \"./interval\";\nimport {durationSecond} from \"./duration\";\n\nvar second = interval(function(date) {\n date.setTime(Math.floor(date / durationSecond) * durationSecond);\n}, function(date, step) {\n date.setTime(+date + step * durationSecond);\n}, function(start, end) {\n return (end - start) / durationSecond;\n}, function(date) {\n return date.getUTCSeconds();\n});\n\nexport default second;\nexport var seconds = second.range;\n","import interval from \"./interval\";\nimport {durationMinute} from \"./duration\";\n\nvar minute = interval(function(date) {\n date.setTime(Math.floor(date / durationMinute) * durationMinute);\n}, function(date, step) {\n date.setTime(+date + step * durationMinute);\n}, function(start, end) {\n return (end - start) / durationMinute;\n}, function(date) {\n return date.getMinutes();\n});\n\nexport default minute;\nexport var minutes = minute.range;\n","import interval from \"./interval\";\nimport {durationHour, durationMinute} from \"./duration\";\n\nvar hour = interval(function(date) {\n var offset = date.getTimezoneOffset() * durationMinute % durationHour;\n if (offset < 0) offset += durationHour;\n date.setTime(Math.floor((+date - offset) / durationHour) * durationHour + offset);\n}, function(date, step) {\n date.setTime(+date + step * durationHour);\n}, function(start, end) {\n return (end - start) / durationHour;\n}, function(date) {\n return date.getHours();\n});\n\nexport default hour;\nexport var hours = hour.range;\n","import interval from \"./interval\";\nimport {durationDay, durationMinute} from \"./duration\";\n\nvar day = interval(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()) * durationMinute) / durationDay;\n}, function(date) {\n return date.getDate() - 1;\n});\n\nexport default day;\nexport var days = day.range;\n","import interval from \"./interval\";\nimport {durationMinute, durationWeek} from \"./duration\";\n\nfunction weekday(i) {\n return interval(function(date) {\n date.setDate(date.getDate() - (date.getDay() + 7 - i) % 7);\n date.setHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setDate(date.getDate() + step * 7);\n }, function(start, end) {\n return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationWeek;\n });\n}\n\nexport var sunday = weekday(0);\nexport var monday = weekday(1);\nexport var tuesday = weekday(2);\nexport var wednesday = weekday(3);\nexport var thursday = weekday(4);\nexport var friday = weekday(5);\nexport var saturday = weekday(6);\n\nexport var sundays = sunday.range;\nexport var mondays = monday.range;\nexport var tuesdays = tuesday.range;\nexport var wednesdays = wednesday.range;\nexport var thursdays = thursday.range;\nexport var fridays = friday.range;\nexport var saturdays = saturday.range;\n","import interval from \"./interval\";\n\nvar month = interval(function(date) {\n date.setDate(1);\n date.setHours(0, 0, 0, 0);\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}, function(date) {\n return date.getMonth();\n});\n\nexport default month;\nexport var months = month.range;\n","import interval from \"./interval\";\n\nvar year = interval(function(date) {\n date.setMonth(0, 1);\n date.setHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setFullYear(date.getFullYear() + step);\n}, function(start, end) {\n return end.getFullYear() - start.getFullYear();\n}, function(date) {\n return date.getFullYear();\n});\n\n// An optimized implementation for this simple case.\nyear.every = function(k) {\n return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : interval(function(date) {\n date.setFullYear(Math.floor(date.getFullYear() / k) * k);\n date.setMonth(0, 1);\n date.setHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setFullYear(date.getFullYear() + step * k);\n });\n};\n\nexport default year;\nexport var years = year.range;\n","import interval from \"./interval\";\nimport {durationMinute} from \"./duration\";\n\nvar utcMinute = interval(function(date) {\n date.setUTCSeconds(0, 0);\n}, function(date, step) {\n date.setTime(+date + step * durationMinute);\n}, function(start, end) {\n return (end - start) / durationMinute;\n}, function(date) {\n return date.getUTCMinutes();\n});\n\nexport default utcMinute;\nexport var utcMinutes = utcMinute.range;\n","import interval from \"./interval\";\nimport {durationHour} from \"./duration\";\n\nvar utcHour = interval(function(date) {\n date.setUTCMinutes(0, 0, 0);\n}, function(date, step) {\n date.setTime(+date + step * durationHour);\n}, function(start, end) {\n return (end - start) / durationHour;\n}, function(date) {\n return date.getUTCHours();\n});\n\nexport default utcHour;\nexport var utcHours = utcHour.range;\n","import interval from \"./interval\";\nimport {durationDay} from \"./duration\";\n\nvar utcDay = interval(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) / durationDay;\n}, function(date) {\n return date.getUTCDate() - 1;\n});\n\nexport default utcDay;\nexport var utcDays = utcDay.range;\n","import interval from \"./interval\";\nimport {durationWeek} from \"./duration\";\n\nfunction utcWeekday(i) {\n return interval(function(date) {\n date.setUTCDate(date.getUTCDate() - (date.getUTCDay() + 7 - i) % 7);\n date.setUTCHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setUTCDate(date.getUTCDate() + step * 7);\n }, function(start, end) {\n return (end - start) / durationWeek;\n });\n}\n\nexport var utcSunday = utcWeekday(0);\nexport var utcMonday = utcWeekday(1);\nexport var utcTuesday = utcWeekday(2);\nexport var utcWednesday = utcWeekday(3);\nexport var utcThursday = utcWeekday(4);\nexport var utcFriday = utcWeekday(5);\nexport var utcSaturday = utcWeekday(6);\n\nexport var utcSundays = utcSunday.range;\nexport var utcMondays = utcMonday.range;\nexport var utcTuesdays = utcTuesday.range;\nexport var utcWednesdays = utcWednesday.range;\nexport var utcThursdays = utcThursday.range;\nexport var utcFridays = utcFriday.range;\nexport var utcSaturdays = utcSaturday.range;\n","import interval from \"./interval\";\n\nvar utcMonth = interval(function(date) {\n date.setUTCDate(1);\n date.setUTCHours(0, 0, 0, 0);\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}, function(date) {\n return date.getUTCMonth();\n});\n\nexport default utcMonth;\nexport var utcMonths = utcMonth.range;\n","import interval from \"./interval\";\n\nvar utcYear = interval(function(date) {\n date.setUTCMonth(0, 1);\n date.setUTCHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setUTCFullYear(date.getUTCFullYear() + step);\n}, function(start, end) {\n return end.getUTCFullYear() - start.getUTCFullYear();\n}, function(date) {\n return date.getUTCFullYear();\n});\n\n// An optimized implementation for this simple case.\nutcYear.every = function(k) {\n return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : interval(function(date) {\n date.setUTCFullYear(Math.floor(date.getUTCFullYear() / k) * k);\n date.setUTCMonth(0, 1);\n date.setUTCHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setUTCFullYear(date.getUTCFullYear() + step * k);\n });\n};\n\nexport default utcYear;\nexport var utcYears = utcYear.range;\n","import {\n timeDay,\n timeSunday,\n timeMonday,\n timeThursday,\n timeYear,\n utcDay,\n utcSunday,\n utcMonday,\n utcThursday,\n utcYear\n} from \"d3-time\";\n\nfunction 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\nfunction 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\nfunction newYear(y) {\n return {y: y, m: 0, d: 1, H: 0, M: 0, S: 0, L: 0};\n}\n\nexport default function formatLocale(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 periodRe = formatRe(locale_periods),\n 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 \"f\": formatMicroseconds,\n \"H\": formatHour24,\n \"I\": formatHour12,\n \"j\": formatDayOfYear,\n \"L\": formatMilliseconds,\n \"m\": formatMonthNumber,\n \"M\": formatMinutes,\n \"p\": formatPeriod,\n \"Q\": formatUnixTimestamp,\n \"s\": formatUnixTimestampSeconds,\n \"S\": formatSeconds,\n \"u\": formatWeekdayNumberMonday,\n \"U\": formatWeekNumberSunday,\n \"V\": formatWeekNumberISO,\n \"w\": formatWeekdayNumberSunday,\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 \"f\": formatUTCMicroseconds,\n \"H\": formatUTCHour24,\n \"I\": formatUTCHour12,\n \"j\": formatUTCDayOfYear,\n \"L\": formatUTCMilliseconds,\n \"m\": formatUTCMonthNumber,\n \"M\": formatUTCMinutes,\n \"p\": formatUTCPeriod,\n \"Q\": formatUnixTimestamp,\n \"s\": formatUnixTimestampSeconds,\n \"S\": formatUTCSeconds,\n \"u\": formatUTCWeekdayNumberMonday,\n \"U\": formatUTCWeekNumberSunday,\n \"V\": formatUTCWeekNumberISO,\n \"w\": formatUTCWeekdayNumberSunday,\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 \"f\": parseMicroseconds,\n \"H\": parseHour24,\n \"I\": parseHour24,\n \"j\": parseDayOfYear,\n \"L\": parseMilliseconds,\n \"m\": parseMonthNumber,\n \"M\": parseMinutes,\n \"p\": parsePeriod,\n \"Q\": parseUnixTimestamp,\n \"s\": parseUnixTimestampSeconds,\n \"S\": parseSeconds,\n \"u\": parseWeekdayNumberMonday,\n \"U\": parseWeekNumberSunday,\n \"V\": parseWeekNumberISO,\n \"w\": parseWeekdayNumberSunday,\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 if (!(date instanceof Date)) date = new Date(+date);\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 else pad = c === \"e\" ? \" \" : \"0\";\n if (format = formats[c]) c = format(date, 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 week, day;\n if (i != string.length) return null;\n\n // If a UNIX timestamp is specified, return it.\n if (\"Q\" in d) return new Date(d.Q);\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 // Convert day-of-week and week-of-year to day-of-year.\n if (\"V\" in d) {\n if (d.V < 1 || d.V > 53) return null;\n if (!(\"w\" in d)) d.w = 1;\n if (\"Z\" in d) {\n week = utcDate(newYear(d.y)), day = week.getUTCDay();\n week = day > 4 || day === 0 ? utcMonday.ceil(week) : utcMonday(week);\n week = utcDay.offset(week, (d.V - 1) * 7);\n d.y = week.getUTCFullYear();\n d.m = week.getUTCMonth();\n d.d = week.getUTCDate() + (d.w + 6) % 7;\n } else {\n week = newDate(newYear(d.y)), day = week.getDay();\n week = day > 4 || day === 0 ? timeMonday.ceil(week) : timeMonday(week);\n week = timeDay.offset(week, (d.V - 1) * 7);\n d.y = week.getFullYear();\n d.m = week.getMonth();\n d.d = week.getDate() + (d.w + 6) % 7;\n }\n } else if (\"W\" in d || \"U\" in d) {\n if (!(\"w\" in d)) d.w = \"u\" in d ? d.u % 7 : \"W\" in d ? 1 : 0;\n day = \"Z\" in d ? utcDate(newYear(d.y)).getUTCDay() : newDate(newYear(d.y)).getDay();\n d.m = 0;\n d.d = \"W\" in d ? (d.w + 6) % 7 + d.W * 7 - (day + 5) % 7 : d.w + d.U * 7 - (day + 6) % 7;\n }\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 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 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 parsePeriod(d, string, i) {\n var n = periodRe.exec(string.slice(i));\n return n ? (d.p = periodLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n }\n\n function parseShortWeekday(d, string, i) {\n var n = shortWeekdayRe.exec(string.slice(i));\n return n ? (d.w = shortWeekdayLookup[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[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[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[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 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.toString = function() { return specifier; };\n return f;\n },\n parse: function(specifier) {\n var p = newParse(specifier += \"\", localDate);\n p.toString = function() { return specifier; };\n return p;\n },\n utcFormat: function(specifier) {\n var f = newFormat(specifier += \"\", utcFormats);\n f.toString = function() { return specifier; };\n return f;\n },\n utcParse: function(specifier) {\n var p = newParse(specifier, utcDate);\n p.toString = function() { return specifier; };\n return p;\n }\n };\n}\n\nvar pads = {\"-\": \"\", \"_\": \" \", \"0\": \"0\"},\n numberRe = /^\\s*\\d+/, // note: ignores next directive\n percentRe = /^%/,\n requoteRe = /[\\\\^$*+?|[\\]().{}]/g;\n\nfunction 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\nfunction requote(s) {\n return s.replace(requoteRe, \"\\\\$&\");\n}\n\nfunction formatRe(names) {\n return new RegExp(\"^(?:\" + names.map(requote).join(\"|\") + \")\", \"i\");\n}\n\nfunction formatLookup(names) {\n var map = {}, i = -1, n = names.length;\n while (++i < n) map[names[i].toLowerCase()] = i;\n return map;\n}\n\nfunction parseWeekdayNumberSunday(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\nfunction parseWeekdayNumberMonday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 1));\n return n ? (d.u = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberSunday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.U = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberISO(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.V = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberMonday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.W = +n[0], i + n[0].length) : -1;\n}\n\nfunction 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\nfunction 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\nfunction parseZone(d, string, i) {\n var n = /^(Z)|([+-]\\d\\d)(?::?(\\d\\d))?/.exec(string.slice(i, i + 6));\n return n ? (d.Z = n[1] ? 0 : -(n[2] + (n[3] || \"00\")), i + n[0].length) : -1;\n}\n\nfunction 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\nfunction 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\nfunction 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\nfunction 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\nfunction 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\nfunction 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\nfunction 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\nfunction parseMicroseconds(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 6));\n return n ? (d.L = Math.floor(n[0] / 1000), i + n[0].length) : -1;\n}\n\nfunction parseLiteralPercent(d, string, i) {\n var n = percentRe.exec(string.slice(i, i + 1));\n return n ? i + n[0].length : -1;\n}\n\nfunction parseUnixTimestamp(d, string, i) {\n var n = numberRe.exec(string.slice(i));\n return n ? (d.Q = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseUnixTimestampSeconds(d, string, i) {\n var n = numberRe.exec(string.slice(i));\n return n ? (d.Q = (+n[0]) * 1000, i + n[0].length) : -1;\n}\n\nfunction formatDayOfMonth(d, p) {\n return pad(d.getDate(), p, 2);\n}\n\nfunction formatHour24(d, p) {\n return pad(d.getHours(), p, 2);\n}\n\nfunction formatHour12(d, p) {\n return pad(d.getHours() % 12 || 12, p, 2);\n}\n\nfunction formatDayOfYear(d, p) {\n return pad(1 + timeDay.count(timeYear(d), d), p, 3);\n}\n\nfunction formatMilliseconds(d, p) {\n return pad(d.getMilliseconds(), p, 3);\n}\n\nfunction formatMicroseconds(d, p) {\n return formatMilliseconds(d, p) + \"000\";\n}\n\nfunction formatMonthNumber(d, p) {\n return pad(d.getMonth() + 1, p, 2);\n}\n\nfunction formatMinutes(d, p) {\n return pad(d.getMinutes(), p, 2);\n}\n\nfunction formatSeconds(d, p) {\n return pad(d.getSeconds(), p, 2);\n}\n\nfunction formatWeekdayNumberMonday(d) {\n var day = d.getDay();\n return day === 0 ? 7 : day;\n}\n\nfunction formatWeekNumberSunday(d, p) {\n return pad(timeSunday.count(timeYear(d), d), p, 2);\n}\n\nfunction formatWeekNumberISO(d, p) {\n var day = d.getDay();\n d = (day >= 4 || day === 0) ? timeThursday(d) : timeThursday.ceil(d);\n return pad(timeThursday.count(timeYear(d), d) + (timeYear(d).getDay() === 4), p, 2);\n}\n\nfunction formatWeekdayNumberSunday(d) {\n return d.getDay();\n}\n\nfunction formatWeekNumberMonday(d, p) {\n return pad(timeMonday.count(timeYear(d), d), p, 2);\n}\n\nfunction formatYear(d, p) {\n return pad(d.getFullYear() % 100, p, 2);\n}\n\nfunction formatFullYear(d, p) {\n return pad(d.getFullYear() % 10000, p, 4);\n}\n\nfunction 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\nfunction formatUTCDayOfMonth(d, p) {\n return pad(d.getUTCDate(), p, 2);\n}\n\nfunction formatUTCHour24(d, p) {\n return pad(d.getUTCHours(), p, 2);\n}\n\nfunction formatUTCHour12(d, p) {\n return pad(d.getUTCHours() % 12 || 12, p, 2);\n}\n\nfunction formatUTCDayOfYear(d, p) {\n return pad(1 + utcDay.count(utcYear(d), d), p, 3);\n}\n\nfunction formatUTCMilliseconds(d, p) {\n return pad(d.getUTCMilliseconds(), p, 3);\n}\n\nfunction formatUTCMicroseconds(d, p) {\n return formatUTCMilliseconds(d, p) + \"000\";\n}\n\nfunction formatUTCMonthNumber(d, p) {\n return pad(d.getUTCMonth() + 1, p, 2);\n}\n\nfunction formatUTCMinutes(d, p) {\n return pad(d.getUTCMinutes(), p, 2);\n}\n\nfunction formatUTCSeconds(d, p) {\n return pad(d.getUTCSeconds(), p, 2);\n}\n\nfunction formatUTCWeekdayNumberMonday(d) {\n var dow = d.getUTCDay();\n return dow === 0 ? 7 : dow;\n}\n\nfunction formatUTCWeekNumberSunday(d, p) {\n return pad(utcSunday.count(utcYear(d), d), p, 2);\n}\n\nfunction formatUTCWeekNumberISO(d, p) {\n var day = d.getUTCDay();\n d = (day >= 4 || day === 0) ? utcThursday(d) : utcThursday.ceil(d);\n return pad(utcThursday.count(utcYear(d), d) + (utcYear(d).getUTCDay() === 4), p, 2);\n}\n\nfunction formatUTCWeekdayNumberSunday(d) {\n return d.getUTCDay();\n}\n\nfunction formatUTCWeekNumberMonday(d, p) {\n return pad(utcMonday.count(utcYear(d), d), p, 2);\n}\n\nfunction formatUTCYear(d, p) {\n return pad(d.getUTCFullYear() % 100, p, 2);\n}\n\nfunction formatUTCFullYear(d, p) {\n return pad(d.getUTCFullYear() % 10000, p, 4);\n}\n\nfunction formatUTCZone() {\n return \"+0000\";\n}\n\nfunction formatLiteralPercent() {\n return \"%\";\n}\n\nfunction formatUnixTimestamp(d) {\n return +d;\n}\n\nfunction formatUnixTimestampSeconds(d) {\n return Math.floor(+d / 1000);\n}\n","import formatLocale from \"./locale\";\n\nvar locale;\nexport var timeFormat;\nexport var timeParse;\nexport var utcFormat;\nexport var utcParse;\n\ndefaultLocale({\n dateTime: \"%x, %X\",\n date: \"%-m/%-d/%Y\",\n time: \"%-I:%M:%S %p\",\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\nexport default function defaultLocale(definition) {\n locale = formatLocale(definition);\n timeFormat = locale.format;\n timeParse = locale.parse;\n utcFormat = locale.utcFormat;\n utcParse = locale.utcParse;\n return locale;\n}\n","import {utcFormat} from \"./defaultLocale\";\n\nexport var isoSpecifier = \"%Y-%m-%dT%H:%M:%S.%LZ\";\n\nfunction formatIsoNative(date) {\n return date.toISOString();\n}\n\nvar formatIso = Date.prototype.toISOString\n ? formatIsoNative\n : utcFormat(isoSpecifier);\n\nexport default formatIso;\n","import {isoSpecifier} from \"./isoFormat\";\nimport {utcParse} from \"./defaultLocale\";\n\nfunction parseIsoNative(string) {\n var date = new Date(string);\n return isNaN(date) ? null : date;\n}\n\nvar parseIso = +new Date(\"2000-01-01T00:00:00.000Z\")\n ? parseIsoNative\n : utcParse(isoSpecifier);\n\nexport default parseIso;\n","import {bisector, tickStep} from \"d3-array\";\nimport {interpolateNumber as reinterpolate} from \"d3-interpolate\";\nimport {timeYear, timeMonth, timeWeek, timeDay, timeHour, timeMinute, timeSecond, timeMillisecond} from \"d3-time\";\nimport {timeFormat} from \"d3-time-format\";\nimport {map} from \"./array\";\nimport {default as continuous, copy, deinterpolateLinear as deinterpolate} from \"./continuous\";\nimport nice from \"./nice\";\n\nvar durationSecond = 1000,\n durationMinute = durationSecond * 60,\n durationHour = durationMinute * 60,\n durationDay = durationHour * 24,\n durationWeek = durationDay * 7,\n durationMonth = durationDay * 30,\n durationYear = durationDay * 365;\n\nfunction date(t) {\n return new Date(t);\n}\n\nfunction number(t) {\n return t instanceof Date ? +t : +new Date(+t);\n}\n\nexport function calendar(year, month, week, day, hour, minute, second, millisecond, format) {\n var scale = continuous(deinterpolate, reinterpolate),\n invert = scale.invert,\n domain = scale.domain;\n\n var formatMillisecond = format(\".%L\"),\n formatSecond = format(\":%S\"),\n formatMinute = format(\"%I:%M\"),\n formatHour = format(\"%I %p\"),\n formatDay = format(\"%a %d\"),\n formatWeek = format(\"%b %d\"),\n formatMonth = format(\"%B\"),\n formatYear = format(\"%Y\");\n\n var tickIntervals = [\n [second, 1, durationSecond],\n [second, 5, 5 * durationSecond],\n [second, 15, 15 * durationSecond],\n [second, 30, 30 * durationSecond],\n [minute, 1, durationMinute],\n [minute, 5, 5 * durationMinute],\n [minute, 15, 15 * durationMinute],\n [minute, 30, 30 * durationMinute],\n [ hour, 1, durationHour ],\n [ hour, 3, 3 * durationHour ],\n [ hour, 6, 6 * durationHour ],\n [ hour, 12, 12 * durationHour ],\n [ day, 1, durationDay ],\n [ day, 2, 2 * durationDay ],\n [ week, 1, durationWeek ],\n [ month, 1, durationMonth ],\n [ month, 3, 3 * durationMonth ],\n [ year, 1, durationYear ]\n ];\n\n function tickFormat(date) {\n return (second(date) < date ? formatMillisecond\n : minute(date) < date ? formatSecond\n : hour(date) < date ? formatMinute\n : day(date) < date ? formatHour\n : month(date) < date ? (week(date) < date ? formatDay : formatWeek)\n : year(date) < date ? formatMonth\n : formatYear)(date);\n }\n\n function tickInterval(interval, start, stop, step) {\n if (interval == null) interval = 10;\n\n // If a desired tick count is specified, pick a reasonable tick interval\n // based on the extent of the domain and a rough estimate of tick size.\n // Otherwise, assume interval is already a time interval and use it.\n if (typeof interval === \"number\") {\n var target = Math.abs(stop - start) / interval,\n i = bisector(function(i) { return i[2]; }).right(tickIntervals, target);\n if (i === tickIntervals.length) {\n step = tickStep(start / durationYear, stop / durationYear, interval);\n interval = year;\n } else if (i) {\n i = tickIntervals[target / tickIntervals[i - 1][2] < tickIntervals[i][2] / target ? i - 1 : i];\n step = i[1];\n interval = i[0];\n } else {\n step = Math.max(tickStep(start, stop, interval), 1);\n interval = millisecond;\n }\n }\n\n return step == null ? interval : interval.every(step);\n }\n\n scale.invert = function(y) {\n return new Date(invert(y));\n };\n\n scale.domain = function(_) {\n return arguments.length ? domain(map.call(_, number)) : domain().map(date);\n };\n\n scale.ticks = function(interval, step) {\n var d = domain(),\n t0 = d[0],\n t1 = d[d.length - 1],\n r = t1 < t0,\n t;\n if (r) t = t0, t0 = t1, t1 = t;\n t = tickInterval(interval, t0, t1, step);\n t = t ? t.range(t0, t1 + 1) : []; // inclusive stop\n return r ? t.reverse() : t;\n };\n\n scale.tickFormat = function(count, specifier) {\n return specifier == null ? tickFormat : format(specifier);\n };\n\n scale.nice = function(interval, step) {\n var d = domain();\n return (interval = tickInterval(interval, d[0], d[d.length - 1], step))\n ? domain(nice(d, interval))\n : scale;\n };\n\n scale.copy = function() {\n return copy(scale, calendar(year, month, week, day, hour, minute, second, millisecond, format));\n };\n\n return scale;\n}\n\nexport default function() {\n return calendar(timeYear, timeMonth, timeWeek, timeDay, timeHour, timeMinute, timeSecond, timeMillisecond, timeFormat).domain([new Date(2000, 0, 1), new Date(2000, 0, 2)]);\n}\n","export default function(s) {\n return s.match(/.{6}/g).map(function(x) {\n return \"#\" + x;\n });\n}\n","import colors from \"./colors\";\n\nexport default colors(\"1f77b4ff7f0e2ca02cd627289467bd8c564be377c27f7f7fbcbd2217becf\");\n","import colors from \"./colors\";\n\nexport default colors(\"393b795254a36b6ecf9c9ede6379398ca252b5cf6bcedb9c8c6d31bd9e39e7ba52e7cb94843c39ad494ad6616be7969c7b4173a55194ce6dbdde9ed6\");\n","import colors from \"./colors\";\n\nexport default colors(\"1f77b4aec7e8ff7f0effbb782ca02c98df8ad62728ff98969467bdc5b0d58c564bc49c94e377c2f7b6d27f7f7fc7c7c7bcbd22dbdb8d17becf9edae5\");\n","import colors from \"./colors\";\n\nexport default colors(\"3182bd6baed69ecae1c6dbefe6550dfd8d3cfdae6bfdd0a231a35474c476a1d99bc7e9c0756bb19e9ac8bcbddcdadaeb636363969696bdbdbdd9d9d9\");\n","import {cubehelix} from \"d3-color\";\nimport {interpolateCubehelixLong} from \"d3-interpolate\";\n\nexport default interpolateCubehelixLong(cubehelix(300, 0.5, 0.0), cubehelix(-240, 0.5, 1.0));\n","import {cubehelix} from \"d3-color\";\nimport {interpolateCubehelixLong} from \"d3-interpolate\";\n\nexport var warm = interpolateCubehelixLong(cubehelix(-100, 0.75, 0.35), cubehelix(80, 1.50, 0.8));\n\nexport var cool = interpolateCubehelixLong(cubehelix(260, 0.75, 0.35), cubehelix(80, 1.50, 0.8));\n\nvar rainbow = cubehelix();\n\nexport default function(t) {\n if (t < 0 || t > 1) t -= Math.floor(t);\n var ts = Math.abs(t - 0.5);\n rainbow.h = 360 * t - 100;\n rainbow.s = 1.5 - 1.5 * ts;\n rainbow.l = 0.8 - 0.9 * ts;\n return rainbow + \"\";\n}\n","import colors from \"./colors\";\n\nfunction ramp(range) {\n var n = range.length;\n return function(t) {\n return range[Math.max(0, Math.min(n - 1, Math.floor(t * n)))];\n };\n}\n\nexport default ramp(colors(\"44015444025645045745055946075a46085c460a5d460b5e470d60470e6147106347116447136548146748166848176948186a481a6c481b6d481c6e481d6f481f70482071482173482374482475482576482677482878482979472a7a472c7a472d7b472e7c472f7d46307e46327e46337f463480453581453781453882443983443a83443b84433d84433e85423f854240864241864142874144874045884046883f47883f48893e49893e4a893e4c8a3d4d8a3d4e8a3c4f8a3c508b3b518b3b528b3a538b3a548c39558c39568c38588c38598c375a8c375b8d365c8d365d8d355e8d355f8d34608d34618d33628d33638d32648e32658e31668e31678e31688e30698e306a8e2f6b8e2f6c8e2e6d8e2e6e8e2e6f8e2d708e2d718e2c718e2c728e2c738e2b748e2b758e2a768e2a778e2a788e29798e297a8e297b8e287c8e287d8e277e8e277f8e27808e26818e26828e26828e25838e25848e25858e24868e24878e23888e23898e238a8d228b8d228c8d228d8d218e8d218f8d21908d21918c20928c20928c20938c1f948c1f958b1f968b1f978b1f988b1f998a1f9a8a1e9b8a1e9c891e9d891f9e891f9f881fa0881fa1881fa1871fa28720a38620a48621a58521a68522a78522a88423a98324aa8325ab8225ac8226ad8127ad8128ae8029af7f2ab07f2cb17e2db27d2eb37c2fb47c31b57b32b67a34b67935b77937b87838b9773aba763bbb753dbc743fbc7340bd7242be7144bf7046c06f48c16e4ac16d4cc26c4ec36b50c46a52c56954c56856c66758c7655ac8645cc8635ec96260ca6063cb5f65cb5e67cc5c69cd5b6ccd5a6ece5870cf5773d05675d05477d1537ad1517cd2507fd34e81d34d84d44b86d54989d5488bd6468ed64590d74393d74195d84098d83e9bd93c9dd93ba0da39a2da37a5db36a8db34aadc32addc30b0dd2fb2dd2db5de2bb8de29bade28bddf26c0df25c2df23c5e021c8e020cae11fcde11dd0e11cd2e21bd5e21ad8e219dae319dde318dfe318e2e418e5e419e7e419eae51aece51befe51cf1e51df4e61ef6e620f8e621fbe723fde725\"));\n\nexport var magma = ramp(colors(\"00000401000501010601010802010902020b02020d03030f03031204041405041606051806051a07061c08071e0907200a08220b09240c09260d0a290e0b2b100b2d110c2f120d31130d34140e36150e38160f3b180f3d19103f1a10421c10441d11471e114920114b21114e22115024125325125527125829115a2a115c2c115f2d11612f116331116533106734106936106b38106c390f6e3b0f703d0f713f0f72400f74420f75440f764510774710784910784a10794c117a4e117b4f127b51127c52137c54137d56147d57157e59157e5a167e5c167f5d177f5f187f601880621980641a80651a80671b80681c816a1c816b1d816d1d816e1e81701f81721f817320817521817621817822817922827b23827c23827e24828025828125818326818426818627818827818928818b29818c29818e2a81902a81912b81932b80942c80962c80982d80992d809b2e7f9c2e7f9e2f7fa02f7fa1307ea3307ea5317ea6317da8327daa337dab337cad347cae347bb0357bb2357bb3367ab5367ab73779b83779ba3878bc3978bd3977bf3a77c03a76c23b75c43c75c53c74c73d73c83e73ca3e72cc3f71cd4071cf4070d0416fd2426fd3436ed5446dd6456cd8456cd9466bdb476adc4869de4968df4a68e04c67e24d66e34e65e44f64e55064e75263e85362e95462ea5661eb5760ec5860ed5a5fee5b5eef5d5ef05f5ef1605df2625df2645cf3655cf4675cf4695cf56b5cf66c5cf66e5cf7705cf7725cf8745cf8765cf9785df9795df97b5dfa7d5efa7f5efa815ffb835ffb8560fb8761fc8961fc8a62fc8c63fc8e64fc9065fd9266fd9467fd9668fd9869fd9a6afd9b6bfe9d6cfe9f6dfea16efea36ffea571fea772fea973feaa74feac76feae77feb078feb27afeb47bfeb67cfeb77efeb97ffebb81febd82febf84fec185fec287fec488fec68afec88cfeca8dfecc8ffecd90fecf92fed194fed395fed597fed799fed89afdda9cfddc9efddea0fde0a1fde2a3fde3a5fde5a7fde7a9fde9aafdebacfcecaefceeb0fcf0b2fcf2b4fcf4b6fcf6b8fcf7b9fcf9bbfcfbbdfcfdbf\"));\n\nexport var inferno = ramp(colors(\"00000401000501010601010802010a02020c02020e03021004031204031405041706041907051b08051d09061f0a07220b07240c08260d08290e092b10092d110a30120a32140b34150b37160b39180c3c190c3e1b0c411c0c431e0c451f0c48210c4a230c4c240c4f260c51280b53290b552b0b572d0b592f0a5b310a5c320a5e340a5f3609613809623909633b09643d09653e0966400a67420a68440a68450a69470b6a490b6a4a0c6b4c0c6b4d0d6c4f0d6c510e6c520e6d540f6d550f6d57106e59106e5a116e5c126e5d126e5f136e61136e62146e64156e65156e67166e69166e6a176e6c186e6d186e6f196e71196e721a6e741a6e751b6e771c6d781c6d7a1d6d7c1d6d7d1e6d7f1e6c801f6c82206c84206b85216b87216b88226a8a226a8c23698d23698f24699025689225689326679526679727669827669a28659b29649d29649f2a63a02a63a22b62a32c61a52c60a62d60a82e5fa92e5eab2f5ead305dae305cb0315bb1325ab3325ab43359b63458b73557b93556ba3655bc3754bd3853bf3952c03a51c13a50c33b4fc43c4ec63d4dc73e4cc83f4bca404acb4149cc4248ce4347cf4446d04545d24644d34743d44842d54a41d74b3fd84c3ed94d3dda4e3cdb503bdd513ade5238df5337e05536e15635e25734e35933e45a31e55c30e65d2fe75e2ee8602de9612bea632aeb6429eb6628ec6726ed6925ee6a24ef6c23ef6e21f06f20f1711ff1731df2741cf3761bf37819f47918f57b17f57d15f67e14f68013f78212f78410f8850ff8870ef8890cf98b0bf98c0af98e09fa9008fa9207fa9407fb9606fb9706fb9906fb9b06fb9d07fc9f07fca108fca309fca50afca60cfca80dfcaa0ffcac11fcae12fcb014fcb216fcb418fbb61afbb81dfbba1ffbbc21fbbe23fac026fac228fac42afac62df9c72ff9c932f9cb35f8cd37f8cf3af7d13df7d340f6d543f6d746f5d949f5db4cf4dd4ff4df53f4e156f3e35af3e55df2e661f2e865f2ea69f1ec6df1ed71f1ef75f1f179f2f27df2f482f3f586f3f68af4f88ef5f992f6fa96f8fb9af9fc9dfafda1fcffa4\"));\n\nexport var plasma = ramp(colors(\"0d088710078813078916078a19068c1b068d1d068e20068f2206902406912605912805922a05932c05942e05952f059631059733059735049837049938049a3a049a3c049b3e049c3f049c41049d43039e44039e46039f48039f4903a04b03a14c02a14e02a25002a25102a35302a35502a45601a45801a45901a55b01a55c01a65e01a66001a66100a76300a76400a76600a76700a86900a86a00a86c00a86e00a86f00a87100a87201a87401a87501a87701a87801a87a02a87b02a87d03a87e03a88004a88104a78305a78405a78606a68707a68808a68a09a58b0aa58d0ba58e0ca48f0da4910ea3920fa39410a29511a19613a19814a099159f9a169f9c179e9d189d9e199da01a9ca11b9ba21d9aa31e9aa51f99a62098a72197a82296aa2395ab2494ac2694ad2793ae2892b02991b12a90b22b8fb32c8eb42e8db52f8cb6308bb7318ab83289ba3388bb3488bc3587bd3786be3885bf3984c03a83c13b82c23c81c33d80c43e7fc5407ec6417dc7427cc8437bc9447aca457acb4679cc4778cc4977cd4a76ce4b75cf4c74d04d73d14e72d24f71d35171d45270d5536fd5546ed6556dd7566cd8576bd9586ada5a6ada5b69db5c68dc5d67dd5e66de5f65de6164df6263e06363e16462e26561e26660e3685fe4695ee56a5de56b5de66c5ce76e5be76f5ae87059e97158e97257ea7457eb7556eb7655ec7754ed7953ed7a52ee7b51ef7c51ef7e50f07f4ff0804ef1814df1834cf2844bf3854bf3874af48849f48948f58b47f58c46f68d45f68f44f79044f79143f79342f89441f89540f9973ff9983ef99a3efa9b3dfa9c3cfa9e3bfb9f3afba139fba238fca338fca537fca636fca835fca934fdab33fdac33fdae32fdaf31fdb130fdb22ffdb42ffdb52efeb72dfeb82cfeba2cfebb2bfebd2afebe2afec029fdc229fdc328fdc527fdc627fdc827fdca26fdcb26fccd25fcce25fcd025fcd225fbd324fbd524fbd724fad824fada24f9dc24f9dd25f8df25f8e125f7e225f7e425f6e626f6e826f5e926f5eb27f4ed27f3ee27f3f027f2f227f1f426f1f525f0f724f0f921\"));\n","import {linearish} from \"./linear\";\n\nexport default function sequential(interpolator) {\n var x0 = 0,\n x1 = 1,\n clamp = false;\n\n function scale(x) {\n var t = (x - x0) / (x1 - x0);\n return interpolator(clamp ? Math.max(0, Math.min(1, t)) : t);\n }\n\n scale.domain = function(_) {\n return arguments.length ? (x0 = +_[0], x1 = +_[1], scale) : [x0, x1];\n };\n\n scale.clamp = function(_) {\n return arguments.length ? (clamp = !!_, scale) : clamp;\n };\n\n scale.interpolator = function(_) {\n return arguments.length ? (interpolator = _, scale) : interpolator;\n };\n\n scale.copy = function() {\n return sequential(interpolator).domain([x0, x1]).clamp(clamp);\n };\n\n return linearish(scale);\n}\n","export default function(specifier) {\n var n = specifier.length / 6 | 0, colors = new Array(n), i = 0;\n while (i < n) colors[i] = \"#\" + specifier.slice(i * 6, ++i * 6);\n return colors;\n}\n","import colors from \"../colors\";\n\nexport default colors(\"7fc97fbeaed4fdc086ffff99386cb0f0027fbf5b17666666\");\n","import colors from \"../colors\";\n\nexport default colors(\"1f77b4ff7f0e2ca02cd627289467bd8c564be377c27f7f7fbcbd2217becf\");\n","import colors from \"../colors\";\n\nexport default colors(\"1b9e77d95f027570b3e7298a66a61ee6ab02a6761d666666\");\n","import colors from \"../colors\";\n\nexport default colors(\"a6cee31f78b4b2df8a33a02cfb9a99e31a1cfdbf6fff7f00cab2d66a3d9affff99b15928\");\n","import colors from \"../colors\";\n\nexport default colors(\"fbb4aeb3cde3ccebc5decbe4fed9a6ffffcce5d8bdfddaecf2f2f2\");\n","import colors from \"../colors\";\n\nexport default colors(\"b3e2cdfdcdaccbd5e8f4cae4e6f5c9fff2aef1e2cccccccc\");\n","import colors from \"../colors\";\n\nexport default colors(\"e41a1c377eb84daf4a984ea3ff7f00ffff33a65628f781bf999999\");\n","import colors from \"../colors\";\n\nexport default colors(\"66c2a5fc8d628da0cbe78ac3a6d854ffd92fe5c494b3b3b3\");\n","import colors from \"../colors\";\n\nexport default colors(\"8dd3c7ffffb3bebadafb807280b1d3fdb462b3de69fccde5d9d9d9bc80bdccebc5ffed6f\");\n","import {interpolateRgbBasis} from \"d3-interpolate\";\n\nexport default function(scheme) {\n return interpolateRgbBasis(scheme[scheme.length - 1]);\n}\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"d8b365f5f5f55ab4ac\",\n \"a6611adfc27d80cdc1018571\",\n \"a6611adfc27df5f5f580cdc1018571\",\n \"8c510ad8b365f6e8c3c7eae55ab4ac01665e\",\n \"8c510ad8b365f6e8c3f5f5f5c7eae55ab4ac01665e\",\n \"8c510abf812ddfc27df6e8c3c7eae580cdc135978f01665e\",\n \"8c510abf812ddfc27df6e8c3f5f5f5c7eae580cdc135978f01665e\",\n \"5430058c510abf812ddfc27df6e8c3c7eae580cdc135978f01665e003c30\",\n \"5430058c510abf812ddfc27df6e8c3f5f5f5c7eae580cdc135978f01665e003c30\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"af8dc3f7f7f77fbf7b\",\n \"7b3294c2a5cfa6dba0008837\",\n \"7b3294c2a5cff7f7f7a6dba0008837\",\n \"762a83af8dc3e7d4e8d9f0d37fbf7b1b7837\",\n \"762a83af8dc3e7d4e8f7f7f7d9f0d37fbf7b1b7837\",\n \"762a839970abc2a5cfe7d4e8d9f0d3a6dba05aae611b7837\",\n \"762a839970abc2a5cfe7d4e8f7f7f7d9f0d3a6dba05aae611b7837\",\n \"40004b762a839970abc2a5cfe7d4e8d9f0d3a6dba05aae611b783700441b\",\n \"40004b762a839970abc2a5cfe7d4e8f7f7f7d9f0d3a6dba05aae611b783700441b\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"e9a3c9f7f7f7a1d76a\",\n \"d01c8bf1b6dab8e1864dac26\",\n \"d01c8bf1b6daf7f7f7b8e1864dac26\",\n \"c51b7de9a3c9fde0efe6f5d0a1d76a4d9221\",\n \"c51b7de9a3c9fde0eff7f7f7e6f5d0a1d76a4d9221\",\n \"c51b7dde77aef1b6dafde0efe6f5d0b8e1867fbc414d9221\",\n \"c51b7dde77aef1b6dafde0eff7f7f7e6f5d0b8e1867fbc414d9221\",\n \"8e0152c51b7dde77aef1b6dafde0efe6f5d0b8e1867fbc414d9221276419\",\n \"8e0152c51b7dde77aef1b6dafde0eff7f7f7e6f5d0b8e1867fbc414d9221276419\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"998ec3f7f7f7f1a340\",\n \"5e3c99b2abd2fdb863e66101\",\n \"5e3c99b2abd2f7f7f7fdb863e66101\",\n \"542788998ec3d8daebfee0b6f1a340b35806\",\n \"542788998ec3d8daebf7f7f7fee0b6f1a340b35806\",\n \"5427888073acb2abd2d8daebfee0b6fdb863e08214b35806\",\n \"5427888073acb2abd2d8daebf7f7f7fee0b6fdb863e08214b35806\",\n \"2d004b5427888073acb2abd2d8daebfee0b6fdb863e08214b358067f3b08\",\n \"2d004b5427888073acb2abd2d8daebf7f7f7fee0b6fdb863e08214b358067f3b08\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"ef8a62f7f7f767a9cf\",\n \"ca0020f4a58292c5de0571b0\",\n \"ca0020f4a582f7f7f792c5de0571b0\",\n \"b2182bef8a62fddbc7d1e5f067a9cf2166ac\",\n \"b2182bef8a62fddbc7f7f7f7d1e5f067a9cf2166ac\",\n \"b2182bd6604df4a582fddbc7d1e5f092c5de4393c32166ac\",\n \"b2182bd6604df4a582fddbc7f7f7f7d1e5f092c5de4393c32166ac\",\n \"67001fb2182bd6604df4a582fddbc7d1e5f092c5de4393c32166ac053061\",\n \"67001fb2182bd6604df4a582fddbc7f7f7f7d1e5f092c5de4393c32166ac053061\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"ef8a62ffffff999999\",\n \"ca0020f4a582bababa404040\",\n \"ca0020f4a582ffffffbababa404040\",\n \"b2182bef8a62fddbc7e0e0e09999994d4d4d\",\n \"b2182bef8a62fddbc7ffffffe0e0e09999994d4d4d\",\n \"b2182bd6604df4a582fddbc7e0e0e0bababa8787874d4d4d\",\n \"b2182bd6604df4a582fddbc7ffffffe0e0e0bababa8787874d4d4d\",\n \"67001fb2182bd6604df4a582fddbc7e0e0e0bababa8787874d4d4d1a1a1a\",\n \"67001fb2182bd6604df4a582fddbc7ffffffe0e0e0bababa8787874d4d4d1a1a1a\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"fc8d59ffffbf91bfdb\",\n \"d7191cfdae61abd9e92c7bb6\",\n \"d7191cfdae61ffffbfabd9e92c7bb6\",\n \"d73027fc8d59fee090e0f3f891bfdb4575b4\",\n \"d73027fc8d59fee090ffffbfe0f3f891bfdb4575b4\",\n \"d73027f46d43fdae61fee090e0f3f8abd9e974add14575b4\",\n \"d73027f46d43fdae61fee090ffffbfe0f3f8abd9e974add14575b4\",\n \"a50026d73027f46d43fdae61fee090e0f3f8abd9e974add14575b4313695\",\n \"a50026d73027f46d43fdae61fee090ffffbfe0f3f8abd9e974add14575b4313695\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"fc8d59ffffbf91cf60\",\n \"d7191cfdae61a6d96a1a9641\",\n \"d7191cfdae61ffffbfa6d96a1a9641\",\n \"d73027fc8d59fee08bd9ef8b91cf601a9850\",\n \"d73027fc8d59fee08bffffbfd9ef8b91cf601a9850\",\n \"d73027f46d43fdae61fee08bd9ef8ba6d96a66bd631a9850\",\n \"d73027f46d43fdae61fee08bffffbfd9ef8ba6d96a66bd631a9850\",\n \"a50026d73027f46d43fdae61fee08bd9ef8ba6d96a66bd631a9850006837\",\n \"a50026d73027f46d43fdae61fee08bffffbfd9ef8ba6d96a66bd631a9850006837\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"fc8d59ffffbf99d594\",\n \"d7191cfdae61abdda42b83ba\",\n \"d7191cfdae61ffffbfabdda42b83ba\",\n \"d53e4ffc8d59fee08be6f59899d5943288bd\",\n \"d53e4ffc8d59fee08bffffbfe6f59899d5943288bd\",\n \"d53e4ff46d43fdae61fee08be6f598abdda466c2a53288bd\",\n \"d53e4ff46d43fdae61fee08bffffbfe6f598abdda466c2a53288bd\",\n \"9e0142d53e4ff46d43fdae61fee08be6f598abdda466c2a53288bd5e4fa2\",\n \"9e0142d53e4ff46d43fdae61fee08bffffbfe6f598abdda466c2a53288bd5e4fa2\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"e5f5f999d8c92ca25f\",\n \"edf8fbb2e2e266c2a4238b45\",\n \"edf8fbb2e2e266c2a42ca25f006d2c\",\n \"edf8fbccece699d8c966c2a42ca25f006d2c\",\n \"edf8fbccece699d8c966c2a441ae76238b45005824\",\n \"f7fcfde5f5f9ccece699d8c966c2a441ae76238b45005824\",\n \"f7fcfde5f5f9ccece699d8c966c2a441ae76238b45006d2c00441b\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"e0ecf49ebcda8856a7\",\n \"edf8fbb3cde38c96c688419d\",\n \"edf8fbb3cde38c96c68856a7810f7c\",\n \"edf8fbbfd3e69ebcda8c96c68856a7810f7c\",\n \"edf8fbbfd3e69ebcda8c96c68c6bb188419d6e016b\",\n \"f7fcfde0ecf4bfd3e69ebcda8c96c68c6bb188419d6e016b\",\n \"f7fcfde0ecf4bfd3e69ebcda8c96c68c6bb188419d810f7c4d004b\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"e0f3dba8ddb543a2ca\",\n \"f0f9e8bae4bc7bccc42b8cbe\",\n \"f0f9e8bae4bc7bccc443a2ca0868ac\",\n \"f0f9e8ccebc5a8ddb57bccc443a2ca0868ac\",\n \"f0f9e8ccebc5a8ddb57bccc44eb3d32b8cbe08589e\",\n \"f7fcf0e0f3dbccebc5a8ddb57bccc44eb3d32b8cbe08589e\",\n \"f7fcf0e0f3dbccebc5a8ddb57bccc44eb3d32b8cbe0868ac084081\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"fee8c8fdbb84e34a33\",\n \"fef0d9fdcc8afc8d59d7301f\",\n \"fef0d9fdcc8afc8d59e34a33b30000\",\n \"fef0d9fdd49efdbb84fc8d59e34a33b30000\",\n \"fef0d9fdd49efdbb84fc8d59ef6548d7301f990000\",\n \"fff7ecfee8c8fdd49efdbb84fc8d59ef6548d7301f990000\",\n \"fff7ecfee8c8fdd49efdbb84fc8d59ef6548d7301fb300007f0000\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"ece2f0a6bddb1c9099\",\n \"f6eff7bdc9e167a9cf02818a\",\n \"f6eff7bdc9e167a9cf1c9099016c59\",\n \"f6eff7d0d1e6a6bddb67a9cf1c9099016c59\",\n \"f6eff7d0d1e6a6bddb67a9cf3690c002818a016450\",\n \"fff7fbece2f0d0d1e6a6bddb67a9cf3690c002818a016450\",\n \"fff7fbece2f0d0d1e6a6bddb67a9cf3690c002818a016c59014636\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"ece7f2a6bddb2b8cbe\",\n \"f1eef6bdc9e174a9cf0570b0\",\n \"f1eef6bdc9e174a9cf2b8cbe045a8d\",\n \"f1eef6d0d1e6a6bddb74a9cf2b8cbe045a8d\",\n \"f1eef6d0d1e6a6bddb74a9cf3690c00570b0034e7b\",\n \"fff7fbece7f2d0d1e6a6bddb74a9cf3690c00570b0034e7b\",\n \"fff7fbece7f2d0d1e6a6bddb74a9cf3690c00570b0045a8d023858\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"e7e1efc994c7dd1c77\",\n \"f1eef6d7b5d8df65b0ce1256\",\n \"f1eef6d7b5d8df65b0dd1c77980043\",\n \"f1eef6d4b9dac994c7df65b0dd1c77980043\",\n \"f1eef6d4b9dac994c7df65b0e7298ace125691003f\",\n \"f7f4f9e7e1efd4b9dac994c7df65b0e7298ace125691003f\",\n \"f7f4f9e7e1efd4b9dac994c7df65b0e7298ace125698004367001f\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"fde0ddfa9fb5c51b8a\",\n \"feebe2fbb4b9f768a1ae017e\",\n \"feebe2fbb4b9f768a1c51b8a7a0177\",\n \"feebe2fcc5c0fa9fb5f768a1c51b8a7a0177\",\n \"feebe2fcc5c0fa9fb5f768a1dd3497ae017e7a0177\",\n \"fff7f3fde0ddfcc5c0fa9fb5f768a1dd3497ae017e7a0177\",\n \"fff7f3fde0ddfcc5c0fa9fb5f768a1dd3497ae017e7a017749006a\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"edf8b17fcdbb2c7fb8\",\n \"ffffcca1dab441b6c4225ea8\",\n \"ffffcca1dab441b6c42c7fb8253494\",\n \"ffffccc7e9b47fcdbb41b6c42c7fb8253494\",\n \"ffffccc7e9b47fcdbb41b6c41d91c0225ea80c2c84\",\n \"ffffd9edf8b1c7e9b47fcdbb41b6c41d91c0225ea80c2c84\",\n \"ffffd9edf8b1c7e9b47fcdbb41b6c41d91c0225ea8253494081d58\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"f7fcb9addd8e31a354\",\n \"ffffccc2e69978c679238443\",\n \"ffffccc2e69978c67931a354006837\",\n \"ffffccd9f0a3addd8e78c67931a354006837\",\n \"ffffccd9f0a3addd8e78c67941ab5d238443005a32\",\n \"ffffe5f7fcb9d9f0a3addd8e78c67941ab5d238443005a32\",\n \"ffffe5f7fcb9d9f0a3addd8e78c67941ab5d238443006837004529\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"fff7bcfec44fd95f0e\",\n \"ffffd4fed98efe9929cc4c02\",\n \"ffffd4fed98efe9929d95f0e993404\",\n \"ffffd4fee391fec44ffe9929d95f0e993404\",\n \"ffffd4fee391fec44ffe9929ec7014cc4c028c2d04\",\n \"ffffe5fff7bcfee391fec44ffe9929ec7014cc4c028c2d04\",\n \"ffffe5fff7bcfee391fec44ffe9929ec7014cc4c02993404662506\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"ffeda0feb24cf03b20\",\n \"ffffb2fecc5cfd8d3ce31a1c\",\n \"ffffb2fecc5cfd8d3cf03b20bd0026\",\n \"ffffb2fed976feb24cfd8d3cf03b20bd0026\",\n \"ffffb2fed976feb24cfd8d3cfc4e2ae31a1cb10026\",\n \"ffffccffeda0fed976feb24cfd8d3cfc4e2ae31a1cb10026\",\n \"ffffccffeda0fed976feb24cfd8d3cfc4e2ae31a1cbd0026800026\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"deebf79ecae13182bd\",\n \"eff3ffbdd7e76baed62171b5\",\n \"eff3ffbdd7e76baed63182bd08519c\",\n \"eff3ffc6dbef9ecae16baed63182bd08519c\",\n \"eff3ffc6dbef9ecae16baed64292c62171b5084594\",\n \"f7fbffdeebf7c6dbef9ecae16baed64292c62171b5084594\",\n \"f7fbffdeebf7c6dbef9ecae16baed64292c62171b508519c08306b\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"e5f5e0a1d99b31a354\",\n \"edf8e9bae4b374c476238b45\",\n \"edf8e9bae4b374c47631a354006d2c\",\n \"edf8e9c7e9c0a1d99b74c47631a354006d2c\",\n \"edf8e9c7e9c0a1d99b74c47641ab5d238b45005a32\",\n \"f7fcf5e5f5e0c7e9c0a1d99b74c47641ab5d238b45005a32\",\n \"f7fcf5e5f5e0c7e9c0a1d99b74c47641ab5d238b45006d2c00441b\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"f0f0f0bdbdbd636363\",\n \"f7f7f7cccccc969696525252\",\n \"f7f7f7cccccc969696636363252525\",\n \"f7f7f7d9d9d9bdbdbd969696636363252525\",\n \"f7f7f7d9d9d9bdbdbd969696737373525252252525\",\n \"fffffff0f0f0d9d9d9bdbdbd969696737373525252252525\",\n \"fffffff0f0f0d9d9d9bdbdbd969696737373525252252525000000\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"efedf5bcbddc756bb1\",\n \"f2f0f7cbc9e29e9ac86a51a3\",\n \"f2f0f7cbc9e29e9ac8756bb154278f\",\n \"f2f0f7dadaebbcbddc9e9ac8756bb154278f\",\n \"f2f0f7dadaebbcbddc9e9ac8807dba6a51a34a1486\",\n \"fcfbfdefedf5dadaebbcbddc9e9ac8807dba6a51a34a1486\",\n \"fcfbfdefedf5dadaebbcbddc9e9ac8807dba6a51a354278f3f007d\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"fee0d2fc9272de2d26\",\n \"fee5d9fcae91fb6a4acb181d\",\n \"fee5d9fcae91fb6a4ade2d26a50f15\",\n \"fee5d9fcbba1fc9272fb6a4ade2d26a50f15\",\n \"fee5d9fcbba1fc9272fb6a4aef3b2ccb181d99000d\",\n \"fff5f0fee0d2fcbba1fc9272fb6a4aef3b2ccb181d99000d\",\n \"fff5f0fee0d2fcbba1fc9272fb6a4aef3b2ccb181da50f1567000d\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"fee6cefdae6be6550d\",\n \"feeddefdbe85fd8d3cd94701\",\n \"feeddefdbe85fd8d3ce6550da63603\",\n \"feeddefdd0a2fdae6bfd8d3ce6550da63603\",\n \"feeddefdd0a2fdae6bfd8d3cf16913d948018c2d04\",\n \"fff5ebfee6cefdd0a2fdae6bfd8d3cf16913d948018c2d04\",\n \"fff5ebfee6cefdd0a2fdae6bfd8d3cf16913d94801a636037f2704\"\n).map(colors);\n\nexport default ramp(scheme);\n","import {cubehelix} from \"d3-color\";\nimport {interpolateCubehelixLong} from \"d3-interpolate\";\n\nexport default interpolateCubehelixLong(cubehelix(300, 0.5, 0.0), cubehelix(-240, 0.5, 1.0));\n","import {cubehelix} from \"d3-color\";\nimport {interpolateCubehelixLong} from \"d3-interpolate\";\n\nexport var warm = interpolateCubehelixLong(cubehelix(-100, 0.75, 0.35), cubehelix(80, 1.50, 0.8));\n\nexport var cool = interpolateCubehelixLong(cubehelix(260, 0.75, 0.35), cubehelix(80, 1.50, 0.8));\n\nvar c = cubehelix();\n\nexport default function(t) {\n if (t < 0 || t > 1) t -= Math.floor(t);\n var ts = Math.abs(t - 0.5);\n c.h = 360 * t - 100;\n c.s = 1.5 - 1.5 * ts;\n c.l = 0.8 - 0.9 * ts;\n return c + \"\";\n}\n","import {rgb} from \"d3-color\";\n\nvar c = rgb(),\n pi_1_3 = Math.PI / 3,\n pi_2_3 = Math.PI * 2 / 3;\n\nexport default function(t) {\n var x;\n t = (0.5 - t) * Math.PI;\n c.r = 255 * (x = Math.sin(t)) * x;\n c.g = 255 * (x = Math.sin(t + pi_1_3)) * x;\n c.b = 255 * (x = Math.sin(t + pi_2_3)) * x;\n return c + \"\";\n}\n","import colors from \"../colors\";\n\nfunction ramp(range) {\n var n = range.length;\n return function(t) {\n return range[Math.max(0, Math.min(n - 1, Math.floor(t * n)))];\n };\n}\n\nexport default ramp(colors(\"44015444025645045745055946075a46085c460a5d460b5e470d60470e6147106347116447136548146748166848176948186a481a6c481b6d481c6e481d6f481f70482071482173482374482475482576482677482878482979472a7a472c7a472d7b472e7c472f7d46307e46327e46337f463480453581453781453882443983443a83443b84433d84433e85423f854240864241864142874144874045884046883f47883f48893e49893e4a893e4c8a3d4d8a3d4e8a3c4f8a3c508b3b518b3b528b3a538b3a548c39558c39568c38588c38598c375a8c375b8d365c8d365d8d355e8d355f8d34608d34618d33628d33638d32648e32658e31668e31678e31688e30698e306a8e2f6b8e2f6c8e2e6d8e2e6e8e2e6f8e2d708e2d718e2c718e2c728e2c738e2b748e2b758e2a768e2a778e2a788e29798e297a8e297b8e287c8e287d8e277e8e277f8e27808e26818e26828e26828e25838e25848e25858e24868e24878e23888e23898e238a8d228b8d228c8d228d8d218e8d218f8d21908d21918c20928c20928c20938c1f948c1f958b1f968b1f978b1f988b1f998a1f9a8a1e9b8a1e9c891e9d891f9e891f9f881fa0881fa1881fa1871fa28720a38620a48621a58521a68522a78522a88423a98324aa8325ab8225ac8226ad8127ad8128ae8029af7f2ab07f2cb17e2db27d2eb37c2fb47c31b57b32b67a34b67935b77937b87838b9773aba763bbb753dbc743fbc7340bd7242be7144bf7046c06f48c16e4ac16d4cc26c4ec36b50c46a52c56954c56856c66758c7655ac8645cc8635ec96260ca6063cb5f65cb5e67cc5c69cd5b6ccd5a6ece5870cf5773d05675d05477d1537ad1517cd2507fd34e81d34d84d44b86d54989d5488bd6468ed64590d74393d74195d84098d83e9bd93c9dd93ba0da39a2da37a5db36a8db34aadc32addc30b0dd2fb2dd2db5de2bb8de29bade28bddf26c0df25c2df23c5e021c8e020cae11fcde11dd0e11cd2e21bd5e21ad8e219dae319dde318dfe318e2e418e5e419e7e419eae51aece51befe51cf1e51df4e61ef6e620f8e621fbe723fde725\"));\n\nexport var magma = ramp(colors(\"00000401000501010601010802010902020b02020d03030f03031204041405041606051806051a07061c08071e0907200a08220b09240c09260d0a290e0b2b100b2d110c2f120d31130d34140e36150e38160f3b180f3d19103f1a10421c10441d11471e114920114b21114e22115024125325125527125829115a2a115c2c115f2d11612f116331116533106734106936106b38106c390f6e3b0f703d0f713f0f72400f74420f75440f764510774710784910784a10794c117a4e117b4f127b51127c52137c54137d56147d57157e59157e5a167e5c167f5d177f5f187f601880621980641a80651a80671b80681c816a1c816b1d816d1d816e1e81701f81721f817320817521817621817822817922827b23827c23827e24828025828125818326818426818627818827818928818b29818c29818e2a81902a81912b81932b80942c80962c80982d80992d809b2e7f9c2e7f9e2f7fa02f7fa1307ea3307ea5317ea6317da8327daa337dab337cad347cae347bb0357bb2357bb3367ab5367ab73779b83779ba3878bc3978bd3977bf3a77c03a76c23b75c43c75c53c74c73d73c83e73ca3e72cc3f71cd4071cf4070d0416fd2426fd3436ed5446dd6456cd8456cd9466bdb476adc4869de4968df4a68e04c67e24d66e34e65e44f64e55064e75263e85362e95462ea5661eb5760ec5860ed5a5fee5b5eef5d5ef05f5ef1605df2625df2645cf3655cf4675cf4695cf56b5cf66c5cf66e5cf7705cf7725cf8745cf8765cf9785df9795df97b5dfa7d5efa7f5efa815ffb835ffb8560fb8761fc8961fc8a62fc8c63fc8e64fc9065fd9266fd9467fd9668fd9869fd9a6afd9b6bfe9d6cfe9f6dfea16efea36ffea571fea772fea973feaa74feac76feae77feb078feb27afeb47bfeb67cfeb77efeb97ffebb81febd82febf84fec185fec287fec488fec68afec88cfeca8dfecc8ffecd90fecf92fed194fed395fed597fed799fed89afdda9cfddc9efddea0fde0a1fde2a3fde3a5fde5a7fde7a9fde9aafdebacfcecaefceeb0fcf0b2fcf2b4fcf4b6fcf6b8fcf7b9fcf9bbfcfbbdfcfdbf\"));\n\nexport var inferno = ramp(colors(\"00000401000501010601010802010a02020c02020e03021004031204031405041706041907051b08051d09061f0a07220b07240c08260d08290e092b10092d110a30120a32140b34150b37160b39180c3c190c3e1b0c411c0c431e0c451f0c48210c4a230c4c240c4f260c51280b53290b552b0b572d0b592f0a5b310a5c320a5e340a5f3609613809623909633b09643d09653e0966400a67420a68440a68450a69470b6a490b6a4a0c6b4c0c6b4d0d6c4f0d6c510e6c520e6d540f6d550f6d57106e59106e5a116e5c126e5d126e5f136e61136e62146e64156e65156e67166e69166e6a176e6c186e6d186e6f196e71196e721a6e741a6e751b6e771c6d781c6d7a1d6d7c1d6d7d1e6d7f1e6c801f6c82206c84206b85216b87216b88226a8a226a8c23698d23698f24699025689225689326679526679727669827669a28659b29649d29649f2a63a02a63a22b62a32c61a52c60a62d60a82e5fa92e5eab2f5ead305dae305cb0315bb1325ab3325ab43359b63458b73557b93556ba3655bc3754bd3853bf3952c03a51c13a50c33b4fc43c4ec63d4dc73e4cc83f4bca404acb4149cc4248ce4347cf4446d04545d24644d34743d44842d54a41d74b3fd84c3ed94d3dda4e3cdb503bdd513ade5238df5337e05536e15635e25734e35933e45a31e55c30e65d2fe75e2ee8602de9612bea632aeb6429eb6628ec6726ed6925ee6a24ef6c23ef6e21f06f20f1711ff1731df2741cf3761bf37819f47918f57b17f57d15f67e14f68013f78212f78410f8850ff8870ef8890cf98b0bf98c0af98e09fa9008fa9207fa9407fb9606fb9706fb9906fb9b06fb9d07fc9f07fca108fca309fca50afca60cfca80dfcaa0ffcac11fcae12fcb014fcb216fcb418fbb61afbb81dfbba1ffbbc21fbbe23fac026fac228fac42afac62df9c72ff9c932f9cb35f8cd37f8cf3af7d13df7d340f6d543f6d746f5d949f5db4cf4dd4ff4df53f4e156f3e35af3e55df2e661f2e865f2ea69f1ec6df1ed71f1ef75f1f179f2f27df2f482f3f586f3f68af4f88ef5f992f6fa96f8fb9af9fc9dfafda1fcffa4\"));\n\nexport var plasma = ramp(colors(\"0d088710078813078916078a19068c1b068d1d068e20068f2206902406912605912805922a05932c05942e05952f059631059733059735049837049938049a3a049a3c049b3e049c3f049c41049d43039e44039e46039f48039f4903a04b03a14c02a14e02a25002a25102a35302a35502a45601a45801a45901a55b01a55c01a65e01a66001a66100a76300a76400a76600a76700a86900a86a00a86c00a86e00a86f00a87100a87201a87401a87501a87701a87801a87a02a87b02a87d03a87e03a88004a88104a78305a78405a78606a68707a68808a68a09a58b0aa58d0ba58e0ca48f0da4910ea3920fa39410a29511a19613a19814a099159f9a169f9c179e9d189d9e199da01a9ca11b9ba21d9aa31e9aa51f99a62098a72197a82296aa2395ab2494ac2694ad2793ae2892b02991b12a90b22b8fb32c8eb42e8db52f8cb6308bb7318ab83289ba3388bb3488bc3587bd3786be3885bf3984c03a83c13b82c23c81c33d80c43e7fc5407ec6417dc7427cc8437bc9447aca457acb4679cc4778cc4977cd4a76ce4b75cf4c74d04d73d14e72d24f71d35171d45270d5536fd5546ed6556dd7566cd8576bd9586ada5a6ada5b69db5c68dc5d67dd5e66de5f65de6164df6263e06363e16462e26561e26660e3685fe4695ee56a5de56b5de66c5ce76e5be76f5ae87059e97158e97257ea7457eb7556eb7655ec7754ed7953ed7a52ee7b51ef7c51ef7e50f07f4ff0804ef1814df1834cf2844bf3854bf3874af48849f48948f58b47f58c46f68d45f68f44f79044f79143f79342f89441f89540f9973ff9983ef99a3efa9b3dfa9c3cfa9e3bfb9f3afba139fba238fca338fca537fca636fca835fca934fdab33fdac33fdae32fdaf31fdb130fdb22ffdb42ffdb52efeb72dfeb82cfeba2cfebb2bfebd2afebe2afec029fdc229fdc328fdc527fdc627fdc827fdca26fdcb26fccd25fcce25fcd025fcd225fbd324fbd524fbd724fad824fada24f9dc24f9dd25f8df25f8e125f7e225f7e425f6e626f6e826f5e926f5eb27f4ed27f3ee27f3f027f2f227f1f426f1f525f0f724f0f921\"));\n","const ReservedFields = {\n ROW_ID: '__id__'\n};\n\nexport default ReservedFields;\n","const CommonProps = {\n ACTION_INF: 'actionInf',\n ON_LAYER_DRAW: 'onlayerdraw'\n};\n\nexport default CommonProps;\n","export var slice = Array.prototype.slice;\n","export default function(x) {\n return x;\n}\n","import {slice} from \"./array\";\nimport identity from \"./identity\";\n\nvar top = 1,\n right = 2,\n bottom = 3,\n left = 4,\n epsilon = 1e-6;\n\nfunction translateX(x) {\n return \"translate(\" + (x + 0.5) + \",0)\";\n}\n\nfunction translateY(y) {\n return \"translate(0,\" + (y + 0.5) + \")\";\n}\n\nfunction number(scale) {\n return function(d) {\n return +scale(d);\n };\n}\n\nfunction center(scale) {\n var offset = Math.max(0, scale.bandwidth() - 1) / 2; // Adjust for 0.5px offset.\n if (scale.round()) offset = Math.round(offset);\n return function(d) {\n return +scale(d) + offset;\n };\n}\n\nfunction entering() {\n return !this.__axis;\n}\n\nfunction axis(orient, scale) {\n var tickArguments = [],\n tickValues = null,\n tickFormat = null,\n tickTransform = null,\n tickSizeInner = 6,\n tickSizeOuter = 6,\n tickPadding = 3,\n k = orient === top || orient === left ? -1 : 1,\n x = orient === left || orient === right ? \"x\" : \"y\",\n transform = orient === top || orient === bottom ? translateX : translateY;\n\n function axis(context) {\n var values = tickValues == null ? (scale.ticks ? scale.ticks.apply(scale, tickArguments) : scale.domain()) : tickValues,\n format = tickFormat == null ? (scale.tickFormat ? scale.tickFormat.apply(scale, tickArguments) : identity) : tickFormat,\n spacing = Math.max(tickSizeInner, 0) + tickPadding,\n range = scale.range(),\n range0 = +range[0] + 0.5,\n range1 = +range[range.length - 1] + 0.5,\n position = (scale.bandwidth ? center : number)(scale.copy()),\n selection = context.selection ? context.selection() : context,\n path = selection.selectAll(\".domain\").data([null]),\n tick = selection.selectAll(\".tick\").data(values, scale).order(),\n tickExit = tick.exit(),\n tickEnter = tick.enter().append(\"g\").attr(\"class\", \"tick\"),\n line = tick.select(\"line\"),\n text = tick.select(\"text\");\n\n path = path.merge(path.enter().insert(\"path\", \".tick\")\n .attr(\"class\", \"domain\")\n .attr(\"stroke\", \"#000\"));\n\n tick = tick.merge(tickEnter);\n\n line = line.merge(tickEnter.append(\"line\")\n .attr(\"stroke\", \"#000\")\n .attr(x + \"2\", k * tickSizeInner));\n\n text = text.merge(tickEnter.append(\"text\")\n .attr(\"fill\", \"#000\")\n .attr(x, k * spacing)\n .attr(\"dy\", orient === top ? \"0em\" : orient === bottom ? \"0.71em\" : \"0.32em\"))\n .style('transform', tickTransform);\n\n if (context !== selection) {\n path = path.transition(context);\n tick = tick.transition(context);\n line = line.transition(context);\n text = text.transition(context);\n\n tickExit = tickExit.transition(context)\n .attr(\"opacity\", epsilon)\n .attr(\"transform\", function(d) { return isFinite(d = position(d)) ? transform(d) : this.getAttribute(\"transform\"); });\n\n tickEnter\n .attr(\"opacity\", epsilon)\n .attr(\"transform\", function(d) { var p = this.parentNode.__axis; return transform(p && isFinite(p = p(d)) ? p : position(d)); });\n }\n\n tickExit.remove();\n\n path\n .attr(\"d\", orient === left || orient == right\n ? \"M\" + k * tickSizeOuter + \",\" + range0 + \"H0.5V\" + range1 + \"H\" + k * tickSizeOuter\n : \"M\" + range0 + \",\" + k * tickSizeOuter + \"V0.5H\" + range1 + \"V\" + k * tickSizeOuter);\n\n tick\n .attr(\"opacity\", 1)\n .attr(\"transform\", function(d) { return transform(position(d)); });\n\n line\n .attr(x + \"2\", k * tickSizeInner);\n\n text\n .attr(x, k * spacing)\n .text(format);\n\n selection.filter(entering)\n .attr(\"fill\", \"none\")\n .attr(\"font-size\", 10)\n .attr(\"font-family\", \"sans-serif\")\n .attr(\"text-anchor\", orient === right ? \"start\" : orient === left ? \"end\" : \"middle\");\n\n selection\n .each(function() { this.__axis = position; });\n }\n\n axis.scale = function(_) {\n return arguments.length ? (scale = _, axis) : scale;\n };\n\n axis.tickTransform = function(_) {\n return arguments.length ? (tickTransform = _, axis) : tickTransform;\n };\n\n axis.ticks = function() {\n return tickArguments = slice.call(arguments), axis;\n };\n\n axis.tickArguments = function(_) {\n return arguments.length ? (tickArguments = _ == null ? [] : slice.call(_), axis) : tickArguments.slice();\n };\n\n axis.tickValues = function(_) {\n return arguments.length ? (tickValues = _ == null ? null : slice.call(_), axis) : tickValues && tickValues.slice();\n };\n\n axis.tickFormat = function(_) {\n return arguments.length ? (tickFormat = _, axis) : tickFormat;\n };\n\n axis.tickSize = function(_) {\n return arguments.length ? (tickSizeInner = tickSizeOuter = +_, axis) : tickSizeInner;\n };\n\n axis.tickSizeInner = function(_) {\n return arguments.length ? (tickSizeInner = +_, axis) : tickSizeInner;\n };\n\n axis.tickSizeOuter = function(_) {\n return arguments.length ? (tickSizeOuter = +_, axis) : tickSizeOuter;\n };\n\n axis.tickPadding = function(_) {\n return arguments.length ? (tickPadding = +_, axis) : tickPadding;\n };\n\n return axis;\n}\n\nexport function axisTop(scale) {\n return axis(top, scale);\n}\n\nexport function axisRight(scale) {\n return axis(right, scale);\n}\n\nexport function axisBottom(scale) {\n return axis(bottom, scale);\n}\n\nexport function axisLeft(scale) {\n return axis(left, scale);\n}\n","var pi = Math.PI,\n tau = 2 * pi,\n epsilon = 1e-6,\n tauEpsilon = tau - epsilon;\n\nfunction Path() {\n this._x0 = this._y0 = // start of current subpath\n this._x1 = this._y1 = null; // end of current subpath\n this._ = \"\";\n}\n\nfunction path() {\n return new Path;\n}\n\nPath.prototype = path.prototype = {\n constructor: Path,\n moveTo: function(x, y) {\n this._ += \"M\" + (this._x0 = this._x1 = +x) + \",\" + (this._y0 = this._y1 = +y);\n },\n closePath: function() {\n if (this._x1 !== null) {\n this._x1 = this._x0, this._y1 = this._y0;\n this._ += \"Z\";\n }\n },\n lineTo: function(x, y) {\n this._ += \"L\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n },\n quadraticCurveTo: function(x1, y1, x, y) {\n this._ += \"Q\" + (+x1) + \",\" + (+y1) + \",\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n },\n bezierCurveTo: function(x1, y1, x2, y2, x, y) {\n this._ += \"C\" + (+x1) + \",\" + (+y1) + \",\" + (+x2) + \",\" + (+y2) + \",\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n },\n arcTo: function(x1, y1, x2, y2, r) {\n x1 = +x1, y1 = +y1, x2 = +x2, y2 = +y2, r = +r;\n var x0 = this._x1,\n y0 = this._y1,\n x21 = x2 - x1,\n y21 = y2 - y1,\n x01 = x0 - x1,\n y01 = y0 - y1,\n l01_2 = x01 * x01 + y01 * y01;\n\n // Is the radius negative? Error.\n if (r < 0) throw new Error(\"negative radius: \" + r);\n\n // Is this path empty? Move to (x1,y1).\n if (this._x1 === null) {\n this._ += \"M\" + (this._x1 = x1) + \",\" + (this._y1 = y1);\n }\n\n // Or, is (x1,y1) coincident with (x0,y0)? Do nothing.\n else if (!(l01_2 > epsilon));\n\n // Or, are (x0,y0), (x1,y1) and (x2,y2) collinear?\n // Equivalently, is (x1,y1) coincident with (x2,y2)?\n // Or, is the radius zero? Line to (x1,y1).\n else if (!(Math.abs(y01 * x21 - y21 * x01) > epsilon) || !r) {\n this._ += \"L\" + (this._x1 = x1) + \",\" + (this._y1 = y1);\n }\n\n // Otherwise, draw an arc!\n else {\n var x20 = x2 - x0,\n y20 = y2 - y0,\n l21_2 = x21 * x21 + y21 * y21,\n l20_2 = x20 * x20 + y20 * y20,\n l21 = Math.sqrt(l21_2),\n l01 = Math.sqrt(l01_2),\n l = r * Math.tan((pi - Math.acos((l21_2 + l01_2 - l20_2) / (2 * l21 * l01))) / 2),\n t01 = l / l01,\n t21 = l / l21;\n\n // If the start tangent is not coincident with (x0,y0), line to.\n if (Math.abs(t01 - 1) > epsilon) {\n this._ += \"L\" + (x1 + t01 * x01) + \",\" + (y1 + t01 * y01);\n }\n\n this._ += \"A\" + r + \",\" + r + \",0,0,\" + (+(y01 * x20 > x01 * y20)) + \",\" + (this._x1 = x1 + t21 * x21) + \",\" + (this._y1 = y1 + t21 * y21);\n }\n },\n arc: function(x, y, r, a0, a1, ccw) {\n x = +x, y = +y, r = +r;\n var dx = r * Math.cos(a0),\n dy = r * Math.sin(a0),\n x0 = x + dx,\n y0 = y + dy,\n cw = 1 ^ ccw,\n da = ccw ? a0 - a1 : a1 - a0;\n\n // Is the radius negative? Error.\n if (r < 0) throw new Error(\"negative radius: \" + r);\n\n // Is this path empty? Move to (x0,y0).\n if (this._x1 === null) {\n this._ += \"M\" + x0 + \",\" + y0;\n }\n\n // Or, is (x0,y0) not coincident with the previous point? Line to (x0,y0).\n else if (Math.abs(this._x1 - x0) > epsilon || Math.abs(this._y1 - y0) > epsilon) {\n this._ += \"L\" + x0 + \",\" + y0;\n }\n\n // Is this arc empty? We’re done.\n if (!r) return;\n\n // Does the angle go the wrong way? Flip the direction.\n if (da < 0) da = da % tau + tau;\n\n // Is this a complete circle? Draw two arcs to complete the circle.\n if (da > tauEpsilon) {\n this._ += \"A\" + r + \",\" + r + \",0,1,\" + cw + \",\" + (x - dx) + \",\" + (y - dy) + \"A\" + r + \",\" + r + \",0,1,\" + cw + \",\" + (this._x1 = x0) + \",\" + (this._y1 = y0);\n }\n\n // Is this arc non-empty? Draw an arc!\n else if (da > epsilon) {\n this._ += \"A\" + r + \",\" + r + \",0,\" + (+(da >= pi)) + \",\" + cw + \",\" + (this._x1 = x + r * Math.cos(a1)) + \",\" + (this._y1 = y + r * Math.sin(a1));\n }\n },\n rect: function(x, y, w, h) {\n this._ += \"M\" + (this._x0 = this._x1 = +x) + \",\" + (this._y0 = this._y1 = +y) + \"h\" + (+w) + \"v\" + (+h) + \"h\" + (-w) + \"Z\";\n },\n toString: function() {\n return this._;\n }\n};\n\nexport default path;\n","export default function(x) {\n return function constant() {\n return x;\n };\n}\n","export var abs = Math.abs;\nexport var atan2 = Math.atan2;\nexport var cos = Math.cos;\nexport var max = Math.max;\nexport var min = Math.min;\nexport var sin = Math.sin;\nexport var sqrt = Math.sqrt;\n\nexport var epsilon = 1e-12;\nexport var pi = Math.PI;\nexport var halfPi = pi / 2;\nexport var tau = 2 * pi;\n\nexport function acos(x) {\n return x > 1 ? 0 : x < -1 ? pi : Math.acos(x);\n}\n\nexport function asin(x) {\n return x >= 1 ? halfPi : x <= -1 ? -halfPi : Math.asin(x);\n}\n","import {path} from \"d3-path\";\nimport constant from \"./constant\";\nimport {abs, acos, asin, atan2, cos, epsilon, halfPi, max, min, pi, sin, sqrt, tau} from \"./math\";\n\nfunction arcInnerRadius(d) {\n return d.innerRadius;\n}\n\nfunction arcOuterRadius(d) {\n return d.outerRadius;\n}\n\nfunction arcStartAngle(d) {\n return d.startAngle;\n}\n\nfunction arcEndAngle(d) {\n return d.endAngle;\n}\n\nfunction arcPadAngle(d) {\n return d && d.padAngle; // Note: optional!\n}\n\nfunction intersect(x0, y0, x1, y1, x2, y2, x3, y3) {\n var x10 = x1 - x0, y10 = y1 - y0,\n x32 = x3 - x2, y32 = y3 - y2,\n t = (x32 * (y0 - y2) - y32 * (x0 - x2)) / (y32 * x10 - x32 * y10);\n return [x0 + t * x10, y0 + t * y10];\n}\n\n// Compute perpendicular offset line of length rc.\n// http://mathworld.wolfram.com/Circle-LineIntersection.html\nfunction cornerTangents(x0, y0, x1, y1, r1, rc, cw) {\n var x01 = x0 - x1,\n y01 = y0 - y1,\n lo = (cw ? rc : -rc) / sqrt(x01 * x01 + y01 * y01),\n ox = lo * y01,\n oy = -lo * x01,\n x11 = x0 + ox,\n y11 = y0 + oy,\n x10 = x1 + ox,\n y10 = y1 + oy,\n x00 = (x11 + x10) / 2,\n y00 = (y11 + y10) / 2,\n dx = x10 - x11,\n dy = y10 - y11,\n d2 = dx * dx + dy * dy,\n r = r1 - rc,\n D = x11 * y10 - x10 * y11,\n d = (dy < 0 ? -1 : 1) * sqrt(max(0, r * r * d2 - D * D)),\n cx0 = (D * dy - dx * d) / d2,\n cy0 = (-D * dx - dy * d) / d2,\n cx1 = (D * dy + dx * d) / d2,\n cy1 = (-D * dx + dy * d) / d2,\n dx0 = cx0 - x00,\n dy0 = cy0 - y00,\n dx1 = cx1 - x00,\n dy1 = cy1 - y00;\n\n // Pick the closer of the two intersection points.\n // TODO Is there a faster way to determine which intersection to use?\n if (dx0 * dx0 + dy0 * dy0 > dx1 * dx1 + dy1 * dy1) cx0 = cx1, cy0 = cy1;\n\n return {\n cx: cx0,\n cy: cy0,\n x01: -ox,\n y01: -oy,\n x11: cx0 * (r1 / r - 1),\n y11: cy0 * (r1 / r - 1)\n };\n}\n\nexport default function() {\n var innerRadius = arcInnerRadius,\n outerRadius = arcOuterRadius,\n cornerRadius = constant(0),\n padRadius = null,\n startAngle = arcStartAngle,\n endAngle = arcEndAngle,\n padAngle = arcPadAngle,\n context = null;\n\n function arc() {\n var buffer,\n r,\n r0 = +innerRadius.apply(this, arguments),\n r1 = +outerRadius.apply(this, arguments),\n a0 = startAngle.apply(this, arguments) - halfPi,\n a1 = endAngle.apply(this, arguments) - halfPi,\n da = abs(a1 - a0),\n cw = a1 > a0;\n\n if (!context) context = buffer = path();\n\n // Ensure that the outer radius is always larger than the inner radius.\n if (r1 < r0) r = r1, r1 = r0, r0 = r;\n\n // Is it a point?\n if (!(r1 > epsilon)) context.moveTo(0, 0);\n\n // Or is it a circle or annulus?\n else if (da > tau - epsilon) {\n context.moveTo(r1 * cos(a0), r1 * sin(a0));\n context.arc(0, 0, r1, a0, a1, !cw);\n if (r0 > epsilon) {\n context.moveTo(r0 * cos(a1), r0 * sin(a1));\n context.arc(0, 0, r0, a1, a0, cw);\n }\n }\n\n // Or is it a circular or annular sector?\n else {\n var a01 = a0,\n a11 = a1,\n a00 = a0,\n a10 = a1,\n da0 = da,\n da1 = da,\n ap = padAngle.apply(this, arguments) / 2,\n rp = (ap > epsilon) && (padRadius ? +padRadius.apply(this, arguments) : sqrt(r0 * r0 + r1 * r1)),\n rc = min(abs(r1 - r0) / 2, +cornerRadius.apply(this, arguments)),\n rc0 = rc,\n rc1 = rc,\n t0,\n t1;\n\n // Apply padding? Note that since r1 ≥ r0, da1 ≥ da0.\n if (rp > epsilon) {\n var p0 = asin(rp / r0 * sin(ap)),\n p1 = asin(rp / r1 * sin(ap));\n if ((da0 -= p0 * 2) > epsilon) p0 *= (cw ? 1 : -1), a00 += p0, a10 -= p0;\n else da0 = 0, a00 = a10 = (a0 + a1) / 2;\n if ((da1 -= p1 * 2) > epsilon) p1 *= (cw ? 1 : -1), a01 += p1, a11 -= p1;\n else da1 = 0, a01 = a11 = (a0 + a1) / 2;\n }\n\n var x01 = r1 * cos(a01),\n y01 = r1 * sin(a01),\n x10 = r0 * cos(a10),\n y10 = r0 * sin(a10);\n\n // Apply rounded corners?\n if (rc > epsilon) {\n var x11 = r1 * cos(a11),\n y11 = r1 * sin(a11),\n x00 = r0 * cos(a00),\n y00 = r0 * sin(a00);\n\n // Restrict the corner radius according to the sector angle.\n if (da < pi) {\n var oc = da0 > epsilon ? intersect(x01, y01, x00, y00, x11, y11, x10, y10) : [x10, y10],\n ax = x01 - oc[0],\n ay = y01 - oc[1],\n bx = x11 - oc[0],\n by = y11 - oc[1],\n kc = 1 / sin(acos((ax * bx + ay * by) / (sqrt(ax * ax + ay * ay) * sqrt(bx * bx + by * by))) / 2),\n lc = sqrt(oc[0] * oc[0] + oc[1] * oc[1]);\n rc0 = min(rc, (r0 - lc) / (kc - 1));\n rc1 = min(rc, (r1 - lc) / (kc + 1));\n }\n }\n\n // Is the sector collapsed to a line?\n if (!(da1 > epsilon)) context.moveTo(x01, y01);\n\n // Does the sector’s outer ring have rounded corners?\n else if (rc1 > epsilon) {\n t0 = cornerTangents(x00, y00, x01, y01, r1, rc1, cw);\n t1 = cornerTangents(x11, y11, x10, y10, r1, rc1, cw);\n\n context.moveTo(t0.cx + t0.x01, t0.cy + t0.y01);\n\n // Have the corners merged?\n if (rc1 < rc) context.arc(t0.cx, t0.cy, rc1, atan2(t0.y01, t0.x01), atan2(t1.y01, t1.x01), !cw);\n\n // Otherwise, draw the two corners and the ring.\n else {\n context.arc(t0.cx, t0.cy, rc1, atan2(t0.y01, t0.x01), atan2(t0.y11, t0.x11), !cw);\n context.arc(0, 0, r1, atan2(t0.cy + t0.y11, t0.cx + t0.x11), atan2(t1.cy + t1.y11, t1.cx + t1.x11), !cw);\n context.arc(t1.cx, t1.cy, rc1, atan2(t1.y11, t1.x11), atan2(t1.y01, t1.x01), !cw);\n }\n }\n\n // Or is the outer ring just a circular arc?\n else context.moveTo(x01, y01), context.arc(0, 0, r1, a01, a11, !cw);\n\n // Is there no inner ring, and it’s a circular sector?\n // Or perhaps it’s an annular sector collapsed due to padding?\n if (!(r0 > epsilon) || !(da0 > epsilon)) context.lineTo(x10, y10);\n\n // Does the sector’s inner ring (or point) have rounded corners?\n else if (rc0 > epsilon) {\n t0 = cornerTangents(x10, y10, x11, y11, r0, -rc0, cw);\n t1 = cornerTangents(x01, y01, x00, y00, r0, -rc0, cw);\n\n context.lineTo(t0.cx + t0.x01, t0.cy + t0.y01);\n\n // Have the corners merged?\n if (rc0 < rc) context.arc(t0.cx, t0.cy, rc0, atan2(t0.y01, t0.x01), atan2(t1.y01, t1.x01), !cw);\n\n // Otherwise, draw the two corners and the ring.\n else {\n context.arc(t0.cx, t0.cy, rc0, atan2(t0.y01, t0.x01), atan2(t0.y11, t0.x11), !cw);\n context.arc(0, 0, r0, atan2(t0.cy + t0.y11, t0.cx + t0.x11), atan2(t1.cy + t1.y11, t1.cx + t1.x11), cw);\n context.arc(t1.cx, t1.cy, rc0, atan2(t1.y11, t1.x11), atan2(t1.y01, t1.x01), !cw);\n }\n }\n\n // Or is the inner ring just a circular arc?\n else context.arc(0, 0, r0, a10, a00, cw);\n }\n\n context.closePath();\n\n if (buffer) return context = null, buffer + \"\" || null;\n }\n\n arc.centroid = function() {\n var r = (+innerRadius.apply(this, arguments) + +outerRadius.apply(this, arguments)) / 2,\n a = (+startAngle.apply(this, arguments) + +endAngle.apply(this, arguments)) / 2 - pi / 2;\n return [cos(a) * r, sin(a) * r];\n };\n\n arc.innerRadius = function(_) {\n return arguments.length ? (innerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : innerRadius;\n };\n\n arc.outerRadius = function(_) {\n return arguments.length ? (outerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : outerRadius;\n };\n\n arc.cornerRadius = function(_) {\n return arguments.length ? (cornerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : cornerRadius;\n };\n\n arc.padRadius = function(_) {\n return arguments.length ? (padRadius = _ == null ? null : typeof _ === \"function\" ? _ : constant(+_), arc) : padRadius;\n };\n\n arc.startAngle = function(_) {\n return arguments.length ? (startAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : startAngle;\n };\n\n arc.endAngle = function(_) {\n return arguments.length ? (endAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : endAngle;\n };\n\n arc.padAngle = function(_) {\n return arguments.length ? (padAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : padAngle;\n };\n\n arc.context = function(_) {\n return arguments.length ? ((context = _ == null ? null : _), arc) : context;\n };\n\n return arc;\n}\n","function Linear(context) {\n this._context = context;\n}\n\nLinear.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; // proceed\n default: this._context.lineTo(x, y); break;\n }\n }\n};\n\nexport default function(context) {\n return new Linear(context);\n}\n","export function x(p) {\n return p[0];\n}\n\nexport function y(p) {\n return p[1];\n}\n","import {path} from \"d3-path\";\nimport constant from \"./constant\";\nimport curveLinear from \"./curve/linear\";\nimport {x as pointX, y as pointY} from \"./point\";\n\nexport default function() {\n var x = pointX,\n y = pointY,\n defined = constant(true),\n context = null,\n curve = curveLinear,\n output = null;\n\n function line(data) {\n var i,\n n = data.length,\n d,\n defined0 = false,\n buffer;\n\n if (context == null) output = curve(buffer = path());\n\n for (i = 0; i <= n; ++i) {\n if (!(i < n && defined(d = data[i], i, data)) === defined0) {\n if (defined0 = !defined0) output.lineStart();\n else output.lineEnd();\n }\n if (defined0) output.point(+x(d, i, data), +y(d, i, data));\n }\n\n if (buffer) return output = null, buffer + \"\" || null;\n }\n\n line.x = function(_) {\n return arguments.length ? (x = typeof _ === \"function\" ? _ : constant(+_), line) : x;\n };\n\n line.y = function(_) {\n return arguments.length ? (y = typeof _ === \"function\" ? _ : constant(+_), line) : y;\n };\n\n line.defined = function(_) {\n return arguments.length ? (defined = typeof _ === \"function\" ? _ : constant(!!_), line) : defined;\n };\n\n line.curve = function(_) {\n return arguments.length ? (curve = _, context != null && (output = curve(context)), line) : curve;\n };\n\n line.context = function(_) {\n return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), line) : context;\n };\n\n return line;\n}\n","import {path} from \"d3-path\";\nimport constant from \"./constant\";\nimport curveLinear from \"./curve/linear\";\nimport line from \"./line\";\nimport {x as pointX, y as pointY} from \"./point\";\n\nexport default function() {\n var x0 = pointX,\n x1 = null,\n y0 = constant(0),\n y1 = pointY,\n defined = constant(true),\n context = null,\n curve = curveLinear,\n output = null;\n\n function area(data) {\n var i,\n j,\n k,\n n = data.length,\n d,\n defined0 = false,\n buffer,\n x0z = new Array(n),\n y0z = new Array(n);\n\n if (context == null) output = curve(buffer = path());\n\n for (i = 0; i <= n; ++i) {\n if (!(i < n && defined(d = data[i], i, data)) === defined0) {\n if (defined0 = !defined0) {\n j = i;\n output.areaStart();\n output.lineStart();\n } else {\n output.lineEnd();\n output.lineStart();\n for (k = i - 1; k >= j; --k) {\n output.point(x0z[k], y0z[k]);\n }\n output.lineEnd();\n output.areaEnd();\n }\n }\n if (defined0) {\n x0z[i] = +x0(d, i, data), y0z[i] = +y0(d, i, data);\n output.point(x1 ? +x1(d, i, data) : x0z[i], y1 ? +y1(d, i, data) : y0z[i]);\n }\n }\n\n if (buffer) return output = null, buffer + \"\" || null;\n }\n\n function arealine() {\n return line().defined(defined).curve(curve).context(context);\n }\n\n area.x = function(_) {\n return arguments.length ? (x0 = typeof _ === \"function\" ? _ : constant(+_), x1 = null, area) : x0;\n };\n\n area.x0 = function(_) {\n return arguments.length ? (x0 = typeof _ === \"function\" ? _ : constant(+_), area) : x0;\n };\n\n area.x1 = function(_) {\n return arguments.length ? (x1 = _ == null ? null : typeof _ === \"function\" ? _ : constant(+_), area) : x1;\n };\n\n area.y = function(_) {\n return arguments.length ? (y0 = typeof _ === \"function\" ? _ : constant(+_), y1 = null, area) : y0;\n };\n\n area.y0 = function(_) {\n return arguments.length ? (y0 = typeof _ === \"function\" ? _ : constant(+_), area) : y0;\n };\n\n area.y1 = function(_) {\n return arguments.length ? (y1 = _ == null ? null : typeof _ === \"function\" ? _ : constant(+_), area) : y1;\n };\n\n area.lineX0 =\n area.lineY0 = function() {\n return arealine().x(x0).y(y0);\n };\n\n area.lineY1 = function() {\n return arealine().x(x0).y(y1);\n };\n\n area.lineX1 = function() {\n return arealine().x(x1).y(y0);\n };\n\n area.defined = function(_) {\n return arguments.length ? (defined = typeof _ === \"function\" ? _ : constant(!!_), area) : defined;\n };\n\n area.curve = function(_) {\n return arguments.length ? (curve = _, context != null && (output = curve(context)), area) : curve;\n };\n\n area.context = function(_) {\n return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), area) : context;\n };\n\n return area;\n}\n","export default function(a, b) {\n return b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN;\n}\n","export default function(d) {\n return d;\n}\n","import curveLinear from \"./linear\";\n\nexport var curveRadialLinear = curveRadial(curveLinear);\n\nfunction Radial(curve) {\n this._curve = curve;\n}\n\nRadial.prototype = {\n areaStart: function() {\n this._curve.areaStart();\n },\n areaEnd: function() {\n this._curve.areaEnd();\n },\n lineStart: function() {\n this._curve.lineStart();\n },\n lineEnd: function() {\n this._curve.lineEnd();\n },\n point: function(a, r) {\n this._curve.point(r * Math.sin(a), r * -Math.cos(a));\n }\n};\n\nexport default function curveRadial(curve) {\n\n function radial(context) {\n return new Radial(curve(context));\n }\n\n radial._curve = curve;\n\n return radial;\n}\n","import curveRadial, {curveRadialLinear} from \"./curve/radial\";\nimport line from \"./line\";\n\nexport function lineRadial(l) {\n var c = l.curve;\n\n l.angle = l.x, delete l.x;\n l.radius = l.y, delete l.y;\n\n l.curve = function(_) {\n return arguments.length ? c(curveRadial(_)) : c()._curve;\n };\n\n return l;\n}\n\nexport default function() {\n return lineRadial(line().curve(curveRadialLinear));\n}\n","export var slice = Array.prototype.slice;\n","import {pi, tau} from \"../math\";\n\nexport default {\n draw: function(context, size) {\n var r = Math.sqrt(size / pi);\n context.moveTo(r, 0);\n context.arc(0, 0, r, 0, tau);\n }\n};\n","export default {\n draw: function(context, size) {\n var r = Math.sqrt(size / 5) / 2;\n context.moveTo(-3 * r, -r);\n context.lineTo(-r, -r);\n context.lineTo(-r, -3 * r);\n context.lineTo(r, -3 * r);\n context.lineTo(r, -r);\n context.lineTo(3 * r, -r);\n context.lineTo(3 * r, r);\n context.lineTo(r, r);\n context.lineTo(r, 3 * r);\n context.lineTo(-r, 3 * r);\n context.lineTo(-r, r);\n context.lineTo(-3 * r, r);\n context.closePath();\n }\n};\n","var tan30 = Math.sqrt(1 / 3),\n tan30_2 = tan30 * 2;\n\nexport default {\n draw: function(context, size) {\n var y = Math.sqrt(size / tan30_2),\n x = y * tan30;\n context.moveTo(0, -y);\n context.lineTo(x, 0);\n context.lineTo(0, y);\n context.lineTo(-x, 0);\n context.closePath();\n }\n};\n","import {pi, tau} from \"../math\";\n\nvar ka = 0.89081309152928522810,\n kr = Math.sin(pi / 10) / Math.sin(7 * pi / 10),\n kx = Math.sin(tau / 10) * kr,\n ky = -Math.cos(tau / 10) * kr;\n\nexport default {\n draw: function(context, size) {\n var r = Math.sqrt(size * ka),\n x = kx * r,\n y = ky * r;\n context.moveTo(0, -r);\n context.lineTo(x, y);\n for (var i = 1; i < 5; ++i) {\n var a = tau * i / 5,\n c = Math.cos(a),\n s = Math.sin(a);\n context.lineTo(s * r, -c * r);\n context.lineTo(c * x - s * y, s * x + c * y);\n }\n context.closePath();\n }\n};\n","export default {\n draw: function(context, size) {\n var w = Math.sqrt(size),\n x = -w / 2;\n context.rect(x, x, w, w);\n }\n};\n","var sqrt3 = Math.sqrt(3);\n\nexport default {\n draw: function(context, size) {\n var y = -Math.sqrt(size / (sqrt3 * 3));\n context.moveTo(0, y * 2);\n context.lineTo(-sqrt3 * y, -y);\n context.lineTo(sqrt3 * y, -y);\n context.closePath();\n }\n};\n","var c = -0.5,\n s = Math.sqrt(3) / 2,\n k = 1 / Math.sqrt(12),\n a = (k / 2 + 1) * 3;\n\nexport default {\n draw: function(context, size) {\n var r = Math.sqrt(size / a),\n x0 = r / 2,\n y0 = r * k,\n x1 = x0,\n y1 = r * k + r,\n x2 = -x1,\n y2 = y1;\n context.moveTo(x0, y0);\n context.lineTo(x1, y1);\n context.lineTo(x2, y2);\n context.lineTo(c * x0 - s * y0, s * x0 + c * y0);\n context.lineTo(c * x1 - s * y1, s * x1 + c * y1);\n context.lineTo(c * x2 - s * y2, s * x2 + c * y2);\n context.lineTo(c * x0 + s * y0, c * y0 - s * x0);\n context.lineTo(c * x1 + s * y1, c * y1 - s * x1);\n context.lineTo(c * x2 + s * y2, c * y2 - s * x2);\n context.closePath();\n }\n};\n","export default function() {}\n","export function point(that, x, y) {\n that._context.bezierCurveTo(\n (2 * that._x0 + that._x1) / 3,\n (2 * that._y0 + that._y1) / 3,\n (that._x0 + 2 * that._x1) / 3,\n (that._y0 + 2 * that._y1) / 3,\n (that._x0 + 4 * that._x1 + x) / 6,\n (that._y0 + 4 * that._y1 + y) / 6\n );\n}\n\nexport function Basis(context) {\n this._context = context;\n}\n\nBasis.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 =\n this._y0 = this._y1 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 3: point(this, this._x1, this._y1); // proceed\n case 2: this._context.lineTo(this._x1, this._y1); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; this._context.lineTo((5 * this._x0 + this._x1) / 6, (5 * this._y0 + this._y1) / 6); // proceed\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n }\n};\n\nexport default function(context) {\n return new Basis(context);\n}\n","import noop from \"../noop\";\nimport {point} from \"./basis\";\n\nfunction BasisClosed(context) {\n this._context = context;\n}\n\nBasisClosed.prototype = {\n areaStart: noop,\n areaEnd: noop,\n lineStart: function() {\n this._x0 = this._x1 = this._x2 = this._x3 = this._x4 =\n this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 1: {\n this._context.moveTo(this._x2, this._y2);\n this._context.closePath();\n break;\n }\n case 2: {\n this._context.moveTo((this._x2 + 2 * this._x3) / 3, (this._y2 + 2 * this._y3) / 3);\n this._context.lineTo((this._x3 + 2 * this._x2) / 3, (this._y3 + 2 * this._y2) / 3);\n this._context.closePath();\n break;\n }\n case 3: {\n this.point(this._x2, this._y2);\n this.point(this._x3, this._y3);\n this.point(this._x4, this._y4);\n break;\n }\n }\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._x2 = x, this._y2 = y; break;\n case 1: this._point = 2; this._x3 = x, this._y3 = y; break;\n case 2: this._point = 3; this._x4 = x, this._y4 = y; this._context.moveTo((this._x0 + 4 * this._x1 + x) / 6, (this._y0 + 4 * this._y1 + y) / 6); break;\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n }\n};\n\nexport default function(context) {\n return new BasisClosed(context);\n}\n","import {point} from \"./basis\";\n\nfunction BasisOpen(context) {\n this._context = context;\n}\n\nBasisOpen.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 =\n this._y0 = this._y1 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; var x0 = (this._x0 + 4 * this._x1 + x) / 6, y0 = (this._y0 + 4 * this._y1 + y) / 6; this._line ? this._context.lineTo(x0, y0) : this._context.moveTo(x0, y0); break;\n case 3: this._point = 4; // proceed\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n }\n};\n\nexport default function(context) {\n return new BasisOpen(context);\n}\n","import {Basis} from \"./basis\";\n\nfunction Bundle(context, beta) {\n this._basis = new Basis(context);\n this._beta = beta;\n}\n\nBundle.prototype = {\n lineStart: function() {\n this._x = [];\n this._y = [];\n this._basis.lineStart();\n },\n lineEnd: function() {\n var x = this._x,\n y = this._y,\n j = x.length - 1;\n\n if (j > 0) {\n var x0 = x[0],\n y0 = y[0],\n dx = x[j] - x0,\n dy = y[j] - y0,\n i = -1,\n t;\n\n while (++i <= j) {\n t = i / j;\n this._basis.point(\n this._beta * x[i] + (1 - this._beta) * (x0 + t * dx),\n this._beta * y[i] + (1 - this._beta) * (y0 + t * dy)\n );\n }\n }\n\n this._x = this._y = null;\n this._basis.lineEnd();\n },\n point: function(x, y) {\n this._x.push(+x);\n this._y.push(+y);\n }\n};\n\nexport default (function custom(beta) {\n\n function bundle(context) {\n return beta === 1 ? new Basis(context) : new Bundle(context, beta);\n }\n\n bundle.beta = function(beta) {\n return custom(+beta);\n };\n\n return bundle;\n})(0.85);\n","export function point(that, x, y) {\n that._context.bezierCurveTo(\n that._x1 + that._k * (that._x2 - that._x0),\n that._y1 + that._k * (that._y2 - that._y0),\n that._x2 + that._k * (that._x1 - x),\n that._y2 + that._k * (that._y1 - y),\n that._x2,\n that._y2\n );\n}\n\nexport function Cardinal(context, tension) {\n this._context = context;\n this._k = (1 - tension) / 6;\n}\n\nCardinal.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 2: this._context.lineTo(this._x2, this._y2); break;\n case 3: point(this, this._x1, this._y1); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; this._x1 = x, this._y1 = y; break;\n case 2: this._point = 3; // proceed\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(tension) {\n\n function cardinal(context) {\n return new Cardinal(context, tension);\n }\n\n cardinal.tension = function(tension) {\n return custom(+tension);\n };\n\n return cardinal;\n})(0);\n","import noop from \"../noop\";\nimport {point} from \"./cardinal\";\n\nexport function CardinalClosed(context, tension) {\n this._context = context;\n this._k = (1 - tension) / 6;\n}\n\nCardinalClosed.prototype = {\n areaStart: noop,\n areaEnd: noop,\n lineStart: function() {\n this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = this._x5 =\n this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = this._y5 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 1: {\n this._context.moveTo(this._x3, this._y3);\n this._context.closePath();\n break;\n }\n case 2: {\n this._context.lineTo(this._x3, this._y3);\n this._context.closePath();\n break;\n }\n case 3: {\n this.point(this._x3, this._y3);\n this.point(this._x4, this._y4);\n this.point(this._x5, this._y5);\n break;\n }\n }\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._x3 = x, this._y3 = y; break;\n case 1: this._point = 2; this._context.moveTo(this._x4 = x, this._y4 = y); break;\n case 2: this._point = 3; this._x5 = x, this._y5 = y; break;\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(tension) {\n\n function cardinal(context) {\n return new CardinalClosed(context, tension);\n }\n\n cardinal.tension = function(tension) {\n return custom(+tension);\n };\n\n return cardinal;\n})(0);\n","import {point} from \"./cardinal\";\n\nexport function CardinalOpen(context, tension) {\n this._context = context;\n this._k = (1 - tension) / 6;\n}\n\nCardinalOpen.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; this._line ? this._context.lineTo(this._x2, this._y2) : this._context.moveTo(this._x2, this._y2); break;\n case 3: this._point = 4; // proceed\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(tension) {\n\n function cardinal(context) {\n return new CardinalOpen(context, tension);\n }\n\n cardinal.tension = function(tension) {\n return custom(+tension);\n };\n\n return cardinal;\n})(0);\n","import {epsilon} from \"../math\";\nimport {Cardinal} from \"./cardinal\";\n\nexport function point(that, x, y) {\n var x1 = that._x1,\n y1 = that._y1,\n x2 = that._x2,\n y2 = that._y2;\n\n if (that._l01_a > epsilon) {\n var a = 2 * that._l01_2a + 3 * that._l01_a * that._l12_a + that._l12_2a,\n n = 3 * that._l01_a * (that._l01_a + that._l12_a);\n x1 = (x1 * a - that._x0 * that._l12_2a + that._x2 * that._l01_2a) / n;\n y1 = (y1 * a - that._y0 * that._l12_2a + that._y2 * that._l01_2a) / n;\n }\n\n if (that._l23_a > epsilon) {\n var b = 2 * that._l23_2a + 3 * that._l23_a * that._l12_a + that._l12_2a,\n m = 3 * that._l23_a * (that._l23_a + that._l12_a);\n x2 = (x2 * b + that._x1 * that._l23_2a - x * that._l12_2a) / m;\n y2 = (y2 * b + that._y1 * that._l23_2a - y * that._l12_2a) / m;\n }\n\n that._context.bezierCurveTo(x1, y1, x2, y2, that._x2, that._y2);\n}\n\nfunction CatmullRom(context, alpha) {\n this._context = context;\n this._alpha = alpha;\n}\n\nCatmullRom.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._l01_a = this._l12_a = this._l23_a =\n this._l01_2a = this._l12_2a = this._l23_2a =\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 2: this._context.lineTo(this._x2, this._y2); break;\n case 3: this.point(this._x2, this._y2); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n\n if (this._point) {\n var x23 = this._x2 - x,\n y23 = this._y2 - y;\n this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));\n }\n\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; // proceed\n default: point(this, x, y); break;\n }\n\n this._l01_a = this._l12_a, this._l12_a = this._l23_a;\n this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(alpha) {\n\n function catmullRom(context) {\n return alpha ? new CatmullRom(context, alpha) : new Cardinal(context, 0);\n }\n\n catmullRom.alpha = function(alpha) {\n return custom(+alpha);\n };\n\n return catmullRom;\n})(0.5);\n","import {CardinalClosed} from \"./cardinalClosed\";\nimport noop from \"../noop\";\nimport {point} from \"./catmullRom\";\n\nfunction CatmullRomClosed(context, alpha) {\n this._context = context;\n this._alpha = alpha;\n}\n\nCatmullRomClosed.prototype = {\n areaStart: noop,\n areaEnd: noop,\n lineStart: function() {\n this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = this._x5 =\n this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = this._y5 = NaN;\n this._l01_a = this._l12_a = this._l23_a =\n this._l01_2a = this._l12_2a = this._l23_2a =\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 1: {\n this._context.moveTo(this._x3, this._y3);\n this._context.closePath();\n break;\n }\n case 2: {\n this._context.lineTo(this._x3, this._y3);\n this._context.closePath();\n break;\n }\n case 3: {\n this.point(this._x3, this._y3);\n this.point(this._x4, this._y4);\n this.point(this._x5, this._y5);\n break;\n }\n }\n },\n point: function(x, y) {\n x = +x, y = +y;\n\n if (this._point) {\n var x23 = this._x2 - x,\n y23 = this._y2 - y;\n this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));\n }\n\n switch (this._point) {\n case 0: this._point = 1; this._x3 = x, this._y3 = y; break;\n case 1: this._point = 2; this._context.moveTo(this._x4 = x, this._y4 = y); break;\n case 2: this._point = 3; this._x5 = x, this._y5 = y; break;\n default: point(this, x, y); break;\n }\n\n this._l01_a = this._l12_a, this._l12_a = this._l23_a;\n this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(alpha) {\n\n function catmullRom(context) {\n return alpha ? new CatmullRomClosed(context, alpha) : new CardinalClosed(context, 0);\n }\n\n catmullRom.alpha = function(alpha) {\n return custom(+alpha);\n };\n\n return catmullRom;\n})(0.5);\n","import {CardinalOpen} from \"./cardinalOpen\";\nimport {point} from \"./catmullRom\";\n\nfunction CatmullRomOpen(context, alpha) {\n this._context = context;\n this._alpha = alpha;\n}\n\nCatmullRomOpen.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._l01_a = this._l12_a = this._l23_a =\n this._l01_2a = this._l12_2a = this._l23_2a =\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n\n if (this._point) {\n var x23 = this._x2 - x,\n y23 = this._y2 - y;\n this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));\n }\n\n switch (this._point) {\n case 0: this._point = 1; break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; this._line ? this._context.lineTo(this._x2, this._y2) : this._context.moveTo(this._x2, this._y2); break;\n case 3: this._point = 4; // proceed\n default: point(this, x, y); break;\n }\n\n this._l01_a = this._l12_a, this._l12_a = this._l23_a;\n this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(alpha) {\n\n function catmullRom(context) {\n return alpha ? new CatmullRomOpen(context, alpha) : new CardinalOpen(context, 0);\n }\n\n catmullRom.alpha = function(alpha) {\n return custom(+alpha);\n };\n\n return catmullRom;\n})(0.5);\n","import noop from \"../noop\";\n\nfunction LinearClosed(context) {\n this._context = context;\n}\n\nLinearClosed.prototype = {\n areaStart: noop,\n areaEnd: noop,\n lineStart: function() {\n this._point = 0;\n },\n lineEnd: function() {\n if (this._point) this._context.closePath();\n },\n point: function(x, y) {\n x = +x, y = +y;\n if (this._point) this._context.lineTo(x, y);\n else this._point = 1, this._context.moveTo(x, y);\n }\n};\n\nexport default function(context) {\n return new LinearClosed(context);\n}\n","function sign(x) {\n return x < 0 ? -1 : 1;\n}\n\n// Calculate the slopes of the tangents (Hermite-type interpolation) based on\n// the following paper: Steffen, M. 1990. A Simple Method for Monotonic\n// Interpolation in One Dimension. Astronomy and Astrophysics, Vol. 239, NO.\n// NOV(II), P. 443, 1990.\nfunction slope3(that, x2, y2) {\n var h0 = that._x1 - that._x0,\n h1 = x2 - that._x1,\n s0 = (that._y1 - that._y0) / (h0 || h1 < 0 && -0),\n s1 = (y2 - that._y1) / (h1 || h0 < 0 && -0),\n p = (s0 * h1 + s1 * h0) / (h0 + h1);\n return (sign(s0) + sign(s1)) * Math.min(Math.abs(s0), Math.abs(s1), 0.5 * Math.abs(p)) || 0;\n}\n\n// Calculate a one-sided slope.\nfunction slope2(that, t) {\n var h = that._x1 - that._x0;\n return h ? (3 * (that._y1 - that._y0) / h - t) / 2 : t;\n}\n\n// According to https://en.wikipedia.org/wiki/Cubic_Hermite_spline#Representations\n// \"you can express cubic Hermite interpolation in terms of cubic Bézier curves\n// with respect to the four values p0, p0 + m0 / 3, p1 - m1 / 3, p1\".\nfunction point(that, t0, t1) {\n var x0 = that._x0,\n y0 = that._y0,\n x1 = that._x1,\n y1 = that._y1,\n dx = (x1 - x0) / 3;\n that._context.bezierCurveTo(x0 + dx, y0 + dx * t0, x1 - dx, y1 - dx * t1, x1, y1);\n}\n\nfunction MonotoneX(context) {\n this._context = context;\n}\n\nMonotoneX.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 =\n this._y0 = this._y1 =\n this._t0 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 2: this._context.lineTo(this._x1, this._y1); break;\n case 3: point(this, this._t0, slope2(this, this._t0)); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n var t1 = NaN;\n\n x = +x, y = +y;\n if (x === this._x1 && y === this._y1) return; // Ignore coincident points.\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; point(this, slope2(this, t1 = slope3(this, x, y)), t1); break;\n default: point(this, this._t0, t1 = slope3(this, x, y)); break;\n }\n\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n this._t0 = t1;\n }\n}\n\nfunction MonotoneY(context) {\n this._context = new ReflectContext(context);\n}\n\n(MonotoneY.prototype = Object.create(MonotoneX.prototype)).point = function(x, y) {\n MonotoneX.prototype.point.call(this, y, x);\n};\n\nfunction ReflectContext(context) {\n this._context = context;\n}\n\nReflectContext.prototype = {\n moveTo: function(x, y) { this._context.moveTo(y, x); },\n closePath: function() { this._context.closePath(); },\n lineTo: function(x, y) { this._context.lineTo(y, x); },\n bezierCurveTo: function(x1, y1, x2, y2, x, y) { this._context.bezierCurveTo(y1, x1, y2, x2, y, x); }\n};\n\nexport function monotoneX(context) {\n return new MonotoneX(context);\n}\n\nexport function monotoneY(context) {\n return new MonotoneY(context);\n}\n","function Natural(context) {\n this._context = context;\n}\n\nNatural.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x = [];\n this._y = [];\n },\n lineEnd: function() {\n var x = this._x,\n y = this._y,\n n = x.length;\n\n if (n) {\n this._line ? this._context.lineTo(x[0], y[0]) : this._context.moveTo(x[0], y[0]);\n if (n === 2) {\n this._context.lineTo(x[1], y[1]);\n } else {\n var px = controlPoints(x),\n py = controlPoints(y);\n for (var i0 = 0, i1 = 1; i1 < n; ++i0, ++i1) {\n this._context.bezierCurveTo(px[0][i0], py[0][i0], px[1][i0], py[1][i0], x[i1], y[i1]);\n }\n }\n }\n\n if (this._line || (this._line !== 0 && n === 1)) this._context.closePath();\n this._line = 1 - this._line;\n this._x = this._y = null;\n },\n point: function(x, y) {\n this._x.push(+x);\n this._y.push(+y);\n }\n};\n\n// See https://www.particleincell.com/2012/bezier-splines/ for derivation.\nfunction controlPoints(x) {\n var i,\n n = x.length - 1,\n m,\n a = new Array(n),\n b = new Array(n),\n r = new Array(n);\n a[0] = 0, b[0] = 2, r[0] = x[0] + 2 * x[1];\n for (i = 1; i < n - 1; ++i) a[i] = 1, b[i] = 4, r[i] = 4 * x[i] + 2 * x[i + 1];\n a[n - 1] = 2, b[n - 1] = 7, r[n - 1] = 8 * x[n - 1] + x[n];\n for (i = 1; i < n; ++i) m = a[i] / b[i - 1], b[i] -= m, r[i] -= m * r[i - 1];\n a[n - 1] = r[n - 1] / b[n - 1];\n for (i = n - 2; i >= 0; --i) a[i] = (r[i] - a[i + 1]) / b[i];\n b[n - 1] = (x[n] + a[n - 1]) / 2;\n for (i = 0; i < n - 1; ++i) b[i] = 2 * x[i + 1] - a[i + 1];\n return [a, b];\n}\n\nexport default function(context) {\n return new Natural(context);\n}\n","function Step(context, t) {\n this._context = context;\n this._t = t;\n}\n\nStep.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x = this._y = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n if (0 < this._t && this._t < 1 && this._point === 2) this._context.lineTo(this._x, this._y);\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n if (this._line >= 0) this._t = 1 - this._t, this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; // proceed\n default: {\n if (this._t <= 0) {\n this._context.lineTo(this._x, y);\n this._context.lineTo(x, y);\n } else {\n var x1 = this._x * (1 - this._t) + x * this._t;\n this._context.lineTo(x1, this._y);\n this._context.lineTo(x1, y);\n }\n break;\n }\n }\n this._x = x, this._y = y;\n }\n};\n\nexport default function(context) {\n return new Step(context, 0.5);\n}\n\nexport function stepBefore(context) {\n return new Step(context, 0);\n}\n\nexport function stepAfter(context) {\n return new Step(context, 1);\n}\n","export default function(series, order) {\n if (!((n = series.length) > 1)) return;\n for (var i = 1, j, s0, s1 = series[order[0]], n, m = s1.length; i < n; ++i) {\n s0 = s1, s1 = series[order[i]];\n for (j = 0; j < m; ++j) {\n s1[j][1] += s1[j][0] = isNaN(s0[j][1]) ? s0[j][0] : s0[j][1];\n }\n }\n}\n","export default function(series) {\n var n = series.length, o = new Array(n);\n while (--n >= 0) o[n] = n;\n return o;\n}\n","import {slice} from \"./array\";\nimport constant from \"./constant\";\nimport offsetNone from \"./offset/none\";\nimport orderNone from \"./order/none\";\n\nfunction stackValue(d, key) {\n return d[key];\n}\n\nexport default function() {\n var keys = constant([]),\n order = orderNone,\n offset = offsetNone,\n value = stackValue;\n\n function stack(data) {\n var kz = keys.apply(this, arguments),\n i,\n m = data.length,\n n = kz.length,\n sz = new Array(n),\n oz;\n\n for (i = 0; i < n; ++i) {\n for (var ki = kz[i], si = sz[i] = new Array(m), j = 0, sij; j < m; ++j) {\n si[j] = sij = [0, +value(data[j], ki, j, data)];\n sij.data = data[j];\n }\n si.key = ki;\n }\n\n for (i = 0, oz = order(sz); i < n; ++i) {\n sz[oz[i]].index = i;\n }\n\n offset(sz, oz);\n return sz;\n }\n\n stack.keys = function(_) {\n return arguments.length ? (keys = typeof _ === \"function\" ? _ : constant(slice.call(_)), stack) : keys;\n };\n\n stack.value = function(_) {\n return arguments.length ? (value = typeof _ === \"function\" ? _ : constant(+_), stack) : value;\n };\n\n stack.order = function(_) {\n return arguments.length ? (order = _ == null ? orderNone : typeof _ === \"function\" ? _ : constant(slice.call(_)), stack) : order;\n };\n\n stack.offset = function(_) {\n return arguments.length ? (offset = _ == null ? offsetNone : _, stack) : offset;\n };\n\n return stack;\n}\n","import none from \"./none\";\n\nexport default function(series) {\n var sums = series.map(sum);\n return none(series).sort(function(a, b) { return sums[a] - sums[b]; });\n}\n\nexport function sum(series) {\n var s = 0, i = -1, n = series.length, v;\n while (++i < n) if (v = +series[i][1]) s += v;\n return s;\n}\n","export function cubicIn(t) {\n return t * t * t;\n}\n\nexport function cubicOut(t) {\n return --t * t * t + 1;\n}\n\nexport function cubicInOut(t) {\n return ((t *= 2) <= 1 ? t * t * t : (t -= 2) * t * t + 2) / 2;\n}\n","var exponent = 3;\n\nexport var polyIn = (function custom(e) {\n e = +e;\n\n function polyIn(t) {\n return Math.pow(t, e);\n }\n\n polyIn.exponent = custom;\n\n return polyIn;\n})(exponent);\n\nexport var polyOut = (function custom(e) {\n e = +e;\n\n function polyOut(t) {\n return 1 - Math.pow(1 - t, e);\n }\n\n polyOut.exponent = custom;\n\n return polyOut;\n})(exponent);\n\nexport var polyInOut = (function custom(e) {\n e = +e;\n\n function polyInOut(t) {\n return ((t *= 2) <= 1 ? Math.pow(t, e) : 2 - Math.pow(2 - t, e)) / 2;\n }\n\n polyInOut.exponent = custom;\n\n return polyInOut;\n})(exponent);\n","var pi = Math.PI,\n halfPi = pi / 2;\n\nexport function sinIn(t) {\n return 1 - Math.cos(t * halfPi);\n}\n\nexport function sinOut(t) {\n return Math.sin(t * halfPi);\n}\n\nexport function sinInOut(t) {\n return (1 - Math.cos(pi * t)) / 2;\n}\n","var b1 = 4 / 11,\n b2 = 6 / 11,\n b3 = 8 / 11,\n b4 = 3 / 4,\n b5 = 9 / 11,\n b6 = 10 / 11,\n b7 = 15 / 16,\n b8 = 21 / 22,\n b9 = 63 / 64,\n b0 = 1 / b1 / b1;\n\nexport function bounceIn(t) {\n return 1 - bounceOut(1 - t);\n}\n\nexport function bounceOut(t) {\n return (t = +t) < b1 ? b0 * t * t : t < b3 ? b0 * (t -= b2) * t + b4 : t < b6 ? b0 * (t -= b5) * t + b7 : b0 * (t -= b8) * t + b9;\n}\n\nexport function bounceInOut(t) {\n return ((t *= 2) <= 1 ? 1 - bounceOut(1 - t) : bounceOut(t - 1) + 1) / 2;\n}\n","var overshoot = 1.70158;\n\nexport var backIn = (function custom(s) {\n s = +s;\n\n function backIn(t) {\n return t * t * ((s + 1) * t - s);\n }\n\n backIn.overshoot = custom;\n\n return backIn;\n})(overshoot);\n\nexport var backOut = (function custom(s) {\n s = +s;\n\n function backOut(t) {\n return --t * t * ((s + 1) * t + s) + 1;\n }\n\n backOut.overshoot = custom;\n\n return backOut;\n})(overshoot);\n\nexport var backInOut = (function custom(s) {\n s = +s;\n\n function backInOut(t) {\n return ((t *= 2) < 1 ? t * t * ((s + 1) * t - s) : (t -= 2) * t * ((s + 1) * t + s) + 2) / 2;\n }\n\n backInOut.overshoot = custom;\n\n return backInOut;\n})(overshoot);\n","var tau = 2 * Math.PI,\n amplitude = 1,\n period = 0.3;\n\nexport var elasticIn = (function custom(a, p) {\n var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau);\n\n function elasticIn(t) {\n return a * Math.pow(2, 10 * --t) * Math.sin((s - t) / p);\n }\n\n elasticIn.amplitude = function(a) { return custom(a, p * tau); };\n elasticIn.period = function(p) { return custom(a, p); };\n\n return elasticIn;\n})(amplitude, period);\n\nexport var elasticOut = (function custom(a, p) {\n var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau);\n\n function elasticOut(t) {\n return 1 - a * Math.pow(2, -10 * (t = +t)) * Math.sin((t + s) / p);\n }\n\n elasticOut.amplitude = function(a) { return custom(a, p * tau); };\n elasticOut.period = function(p) { return custom(a, p); };\n\n return elasticOut;\n})(amplitude, period);\n\nexport var elasticInOut = (function custom(a, p) {\n var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau);\n\n function elasticInOut(t) {\n return ((t = t * 2 - 1) < 0\n ? a * Math.pow(2, 10 * t) * Math.sin((s - t) / p)\n : 2 - a * Math.pow(2, -10 * t) * Math.sin((s + t) / p)) / 2;\n }\n\n elasticInOut.amplitude = function(a) { return custom(a, p * tau); };\n elasticInOut.period = function(p) { return custom(a, p); };\n\n return elasticInOut;\n})(amplitude, period);\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","export function x(d) {\n return d[0];\n}\n\nexport function y(d) {\n return d[1];\n}\n","function RedBlackTree() {\n this._ = null; // root node\n}\n\nexport function RedBlackNode(node) {\n node.U = // parent node\n node.C = // color - true for red, false for black\n node.L = // left node\n node.R = // right node\n node.P = // previous node\n node.N = null; // next node\n}\n\nRedBlackTree.prototype = {\n constructor: RedBlackTree,\n\n insert: function(after, node) {\n var parent, grandpa, uncle;\n\n if (after) {\n node.P = after;\n node.N = after.N;\n if (after.N) after.N.P = node;\n after.N = node;\n if (after.R) {\n after = after.R;\n while (after.L) after = after.L;\n after.L = node;\n } else {\n after.R = node;\n }\n parent = after;\n } else if (this._) {\n after = RedBlackFirst(this._);\n node.P = null;\n node.N = after;\n after.P = after.L = node;\n parent = after;\n } else {\n node.P = node.N = null;\n this._ = node;\n parent = null;\n }\n node.L = node.R = null;\n node.U = parent;\n node.C = true;\n\n after = node;\n while (parent && parent.C) {\n grandpa = parent.U;\n if (parent === grandpa.L) {\n uncle = grandpa.R;\n if (uncle && uncle.C) {\n parent.C = uncle.C = false;\n grandpa.C = true;\n after = grandpa;\n } else {\n if (after === parent.R) {\n RedBlackRotateLeft(this, parent);\n after = parent;\n parent = after.U;\n }\n parent.C = false;\n grandpa.C = true;\n RedBlackRotateRight(this, grandpa);\n }\n } else {\n uncle = grandpa.L;\n if (uncle && uncle.C) {\n parent.C = uncle.C = false;\n grandpa.C = true;\n after = grandpa;\n } else {\n if (after === parent.L) {\n RedBlackRotateRight(this, parent);\n after = parent;\n parent = after.U;\n }\n parent.C = false;\n grandpa.C = true;\n RedBlackRotateLeft(this, grandpa);\n }\n }\n parent = after.U;\n }\n this._.C = false;\n },\n\n remove: function(node) {\n if (node.N) node.N.P = node.P;\n if (node.P) node.P.N = node.N;\n node.N = node.P = null;\n\n var parent = node.U,\n sibling,\n left = node.L,\n right = node.R,\n next,\n red;\n\n if (!left) next = right;\n else if (!right) next = left;\n else next = RedBlackFirst(right);\n\n if (parent) {\n if (parent.L === node) parent.L = next;\n else parent.R = next;\n } else {\n this._ = next;\n }\n\n if (left && right) {\n red = next.C;\n next.C = node.C;\n next.L = left;\n left.U = next;\n if (next !== right) {\n parent = next.U;\n next.U = node.U;\n node = next.R;\n parent.L = node;\n next.R = right;\n right.U = next;\n } else {\n next.U = parent;\n parent = next;\n node = next.R;\n }\n } else {\n red = node.C;\n node = next;\n }\n\n if (node) node.U = parent;\n if (red) return;\n if (node && node.C) { node.C = false; return; }\n\n do {\n if (node === this._) break;\n if (node === parent.L) {\n sibling = parent.R;\n if (sibling.C) {\n sibling.C = false;\n parent.C = true;\n RedBlackRotateLeft(this, parent);\n sibling = parent.R;\n }\n if ((sibling.L && sibling.L.C)\n || (sibling.R && sibling.R.C)) {\n if (!sibling.R || !sibling.R.C) {\n sibling.L.C = false;\n sibling.C = true;\n RedBlackRotateRight(this, sibling);\n sibling = parent.R;\n }\n sibling.C = parent.C;\n parent.C = sibling.R.C = false;\n RedBlackRotateLeft(this, parent);\n node = this._;\n break;\n }\n } else {\n sibling = parent.L;\n if (sibling.C) {\n sibling.C = false;\n parent.C = true;\n RedBlackRotateRight(this, parent);\n sibling = parent.L;\n }\n if ((sibling.L && sibling.L.C)\n || (sibling.R && sibling.R.C)) {\n if (!sibling.L || !sibling.L.C) {\n sibling.R.C = false;\n sibling.C = true;\n RedBlackRotateLeft(this, sibling);\n sibling = parent.L;\n }\n sibling.C = parent.C;\n parent.C = sibling.L.C = false;\n RedBlackRotateRight(this, parent);\n node = this._;\n break;\n }\n }\n sibling.C = true;\n node = parent;\n parent = parent.U;\n } while (!node.C);\n\n if (node) node.C = false;\n }\n};\n\nfunction RedBlackRotateLeft(tree, node) {\n var p = node,\n q = node.R,\n parent = p.U;\n\n if (parent) {\n if (parent.L === p) parent.L = q;\n else parent.R = q;\n } else {\n tree._ = q;\n }\n\n q.U = parent;\n p.U = q;\n p.R = q.L;\n if (p.R) p.R.U = p;\n q.L = p;\n}\n\nfunction RedBlackRotateRight(tree, node) {\n var p = node,\n q = node.L,\n parent = p.U;\n\n if (parent) {\n if (parent.L === p) parent.L = q;\n else parent.R = q;\n } else {\n tree._ = q;\n }\n\n q.U = parent;\n p.U = q;\n p.L = q.R;\n if (p.L) p.L.U = p;\n q.R = p;\n}\n\nfunction RedBlackFirst(node) {\n while (node.L) node = node.L;\n return node;\n}\n\nexport default RedBlackTree;\n","import {cells, edges, epsilon} from \"./Diagram\";\n\nexport function createEdge(left, right, v0, v1) {\n var edge = [null, null],\n index = edges.push(edge) - 1;\n edge.left = left;\n edge.right = right;\n if (v0) setEdgeEnd(edge, left, right, v0);\n if (v1) setEdgeEnd(edge, right, left, v1);\n cells[left.index].halfedges.push(index);\n cells[right.index].halfedges.push(index);\n return edge;\n}\n\nexport function createBorderEdge(left, v0, v1) {\n var edge = [v0, v1];\n edge.left = left;\n return edge;\n}\n\nexport function setEdgeEnd(edge, left, right, vertex) {\n if (!edge[0] && !edge[1]) {\n edge[0] = vertex;\n edge.left = left;\n edge.right = right;\n } else if (edge.left === right) {\n edge[1] = vertex;\n } else {\n edge[0] = vertex;\n }\n}\n\n// Liang–Barsky line clipping.\nfunction clipEdge(edge, x0, y0, x1, y1) {\n var a = edge[0],\n b = edge[1],\n ax = a[0],\n ay = a[1],\n bx = b[0],\n by = b[1],\n t0 = 0,\n t1 = 1,\n dx = bx - ax,\n dy = by - ay,\n r;\n\n r = x0 - ax;\n if (!dx && r > 0) return;\n r /= dx;\n if (dx < 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n } else if (dx > 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n }\n\n r = x1 - ax;\n if (!dx && r < 0) return;\n r /= dx;\n if (dx < 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n } else if (dx > 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n }\n\n r = y0 - ay;\n if (!dy && r > 0) return;\n r /= dy;\n if (dy < 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n } else if (dy > 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n }\n\n r = y1 - ay;\n if (!dy && r < 0) return;\n r /= dy;\n if (dy < 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n } else if (dy > 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n }\n\n if (!(t0 > 0) && !(t1 < 1)) return true; // TODO Better check?\n\n if (t0 > 0) edge[0] = [ax + t0 * dx, ay + t0 * dy];\n if (t1 < 1) edge[1] = [ax + t1 * dx, ay + t1 * dy];\n return true;\n}\n\nfunction connectEdge(edge, x0, y0, x1, y1) {\n var v1 = edge[1];\n if (v1) return true;\n\n var v0 = edge[0],\n left = edge.left,\n right = edge.right,\n lx = left[0],\n ly = left[1],\n rx = right[0],\n ry = right[1],\n fx = (lx + rx) / 2,\n fy = (ly + ry) / 2,\n fm,\n fb;\n\n if (ry === ly) {\n if (fx < x0 || fx >= x1) return;\n if (lx > rx) {\n if (!v0) v0 = [fx, y0];\n else if (v0[1] >= y1) return;\n v1 = [fx, y1];\n } else {\n if (!v0) v0 = [fx, y1];\n else if (v0[1] < y0) return;\n v1 = [fx, y0];\n }\n } else {\n fm = (lx - rx) / (ry - ly);\n fb = fy - fm * fx;\n if (fm < -1 || fm > 1) {\n if (lx > rx) {\n if (!v0) v0 = [(y0 - fb) / fm, y0];\n else if (v0[1] >= y1) return;\n v1 = [(y1 - fb) / fm, y1];\n } else {\n if (!v0) v0 = [(y1 - fb) / fm, y1];\n else if (v0[1] < y0) return;\n v1 = [(y0 - fb) / fm, y0];\n }\n } else {\n if (ly < ry) {\n if (!v0) v0 = [x0, fm * x0 + fb];\n else if (v0[0] >= x1) return;\n v1 = [x1, fm * x1 + fb];\n } else {\n if (!v0) v0 = [x1, fm * x1 + fb];\n else if (v0[0] < x0) return;\n v1 = [x0, fm * x0 + fb];\n }\n }\n }\n\n edge[0] = v0;\n edge[1] = v1;\n return true;\n}\n\nexport function clipEdges(x0, y0, x1, y1) {\n var i = edges.length,\n edge;\n\n while (i--) {\n if (!connectEdge(edge = edges[i], x0, y0, x1, y1)\n || !clipEdge(edge, x0, y0, x1, y1)\n || !(Math.abs(edge[0][0] - edge[1][0]) > epsilon\n || Math.abs(edge[0][1] - edge[1][1]) > epsilon)) {\n delete edges[i];\n }\n }\n}\n","import {createBorderEdge} from \"./Edge\";\nimport {cells, edges, epsilon} from \"./Diagram\";\n\nexport function createCell(site) {\n return cells[site.index] = {\n site: site,\n halfedges: []\n };\n}\n\nfunction cellHalfedgeAngle(cell, edge) {\n var site = cell.site,\n va = edge.left,\n vb = edge.right;\n if (site === vb) vb = va, va = site;\n if (vb) return Math.atan2(vb[1] - va[1], vb[0] - va[0]);\n if (site === va) va = edge[1], vb = edge[0];\n else va = edge[0], vb = edge[1];\n return Math.atan2(va[0] - vb[0], vb[1] - va[1]);\n}\n\nexport function cellHalfedgeStart(cell, edge) {\n return edge[+(edge.left !== cell.site)];\n}\n\nexport function cellHalfedgeEnd(cell, edge) {\n return edge[+(edge.left === cell.site)];\n}\n\nexport function sortCellHalfedges() {\n for (var i = 0, n = cells.length, cell, halfedges, j, m; i < n; ++i) {\n if ((cell = cells[i]) && (m = (halfedges = cell.halfedges).length)) {\n var index = new Array(m),\n array = new Array(m);\n for (j = 0; j < m; ++j) index[j] = j, array[j] = cellHalfedgeAngle(cell, edges[halfedges[j]]);\n index.sort(function(i, j) { return array[j] - array[i]; });\n for (j = 0; j < m; ++j) array[j] = halfedges[index[j]];\n for (j = 0; j < m; ++j) halfedges[j] = array[j];\n }\n }\n}\n\nexport function clipCells(x0, y0, x1, y1) {\n var nCells = cells.length,\n iCell,\n cell,\n site,\n iHalfedge,\n halfedges,\n nHalfedges,\n start,\n startX,\n startY,\n end,\n endX,\n endY,\n cover = true;\n\n for (iCell = 0; iCell < nCells; ++iCell) {\n if (cell = cells[iCell]) {\n site = cell.site;\n halfedges = cell.halfedges;\n iHalfedge = halfedges.length;\n\n // Remove any dangling clipped edges.\n while (iHalfedge--) {\n if (!edges[halfedges[iHalfedge]]) {\n halfedges.splice(iHalfedge, 1);\n }\n }\n\n // Insert any border edges as necessary.\n iHalfedge = 0, nHalfedges = halfedges.length;\n while (iHalfedge < nHalfedges) {\n end = cellHalfedgeEnd(cell, edges[halfedges[iHalfedge]]), endX = end[0], endY = end[1];\n start = cellHalfedgeStart(cell, edges[halfedges[++iHalfedge % nHalfedges]]), startX = start[0], startY = start[1];\n if (Math.abs(endX - startX) > epsilon || Math.abs(endY - startY) > epsilon) {\n halfedges.splice(iHalfedge, 0, edges.push(createBorderEdge(site, end,\n Math.abs(endX - x0) < epsilon && y1 - endY > epsilon ? [x0, Math.abs(startX - x0) < epsilon ? startY : y1]\n : Math.abs(endY - y1) < epsilon && x1 - endX > epsilon ? [Math.abs(startY - y1) < epsilon ? startX : x1, y1]\n : Math.abs(endX - x1) < epsilon && endY - y0 > epsilon ? [x1, Math.abs(startX - x1) < epsilon ? startY : y0]\n : Math.abs(endY - y0) < epsilon && endX - x0 > epsilon ? [Math.abs(startY - y0) < epsilon ? startX : x0, y0]\n : null)) - 1);\n ++nHalfedges;\n }\n }\n\n if (nHalfedges) cover = false;\n }\n }\n\n // If there weren’t any edges, have the closest site cover the extent.\n // It doesn’t matter which corner of the extent we measure!\n if (cover) {\n var dx, dy, d2, dc = Infinity;\n\n for (iCell = 0, cover = null; iCell < nCells; ++iCell) {\n if (cell = cells[iCell]) {\n site = cell.site;\n dx = site[0] - x0;\n dy = site[1] - y0;\n d2 = dx * dx + dy * dy;\n if (d2 < dc) dc = d2, cover = cell;\n }\n }\n\n if (cover) {\n var v00 = [x0, y0], v01 = [x0, y1], v11 = [x1, y1], v10 = [x1, y0];\n cover.halfedges.push(\n edges.push(createBorderEdge(site = cover.site, v00, v01)) - 1,\n edges.push(createBorderEdge(site, v01, v11)) - 1,\n edges.push(createBorderEdge(site, v11, v10)) - 1,\n edges.push(createBorderEdge(site, v10, v00)) - 1\n );\n }\n }\n\n // Lastly delete any cells with no edges; these were entirely clipped.\n for (iCell = 0; iCell < nCells; ++iCell) {\n if (cell = cells[iCell]) {\n if (!cell.halfedges.length) {\n delete cells[iCell];\n }\n }\n }\n}\n","import {RedBlackNode} from \"./RedBlackTree\";\nimport {circles, epsilon2} from \"./Diagram\";\n\nvar circlePool = [];\n\nexport var firstCircle;\n\nfunction Circle() {\n RedBlackNode(this);\n this.x =\n this.y =\n this.arc =\n this.site =\n this.cy = null;\n}\n\nexport function attachCircle(arc) {\n var lArc = arc.P,\n rArc = arc.N;\n\n if (!lArc || !rArc) return;\n\n var lSite = lArc.site,\n cSite = arc.site,\n rSite = rArc.site;\n\n if (lSite === rSite) return;\n\n var bx = cSite[0],\n by = cSite[1],\n ax = lSite[0] - bx,\n ay = lSite[1] - by,\n cx = rSite[0] - bx,\n cy = rSite[1] - by;\n\n var d = 2 * (ax * cy - ay * cx);\n if (d >= -epsilon2) return;\n\n var ha = ax * ax + ay * ay,\n hc = cx * cx + cy * cy,\n x = (cy * ha - ay * hc) / d,\n y = (ax * hc - cx * ha) / d;\n\n var circle = circlePool.pop() || new Circle;\n circle.arc = arc;\n circle.site = cSite;\n circle.x = x + bx;\n circle.y = (circle.cy = y + by) + Math.sqrt(x * x + y * y); // y bottom\n\n arc.circle = circle;\n\n var before = null,\n node = circles._;\n\n while (node) {\n if (circle.y < node.y || (circle.y === node.y && circle.x <= node.x)) {\n if (node.L) node = node.L;\n else { before = node.P; break; }\n } else {\n if (node.R) node = node.R;\n else { before = node; break; }\n }\n }\n\n circles.insert(before, circle);\n if (!before) firstCircle = circle;\n}\n\nexport function detachCircle(arc) {\n var circle = arc.circle;\n if (circle) {\n if (!circle.P) firstCircle = circle.N;\n circles.remove(circle);\n circlePool.push(circle);\n RedBlackNode(circle);\n arc.circle = null;\n }\n}\n","import {RedBlackNode} from \"./RedBlackTree\";\nimport {createCell} from \"./Cell\";\nimport {attachCircle, detachCircle} from \"./Circle\";\nimport {createEdge, setEdgeEnd} from \"./Edge\";\nimport {beaches, epsilon} from \"./Diagram\";\n\nvar beachPool = [];\n\nfunction Beach() {\n RedBlackNode(this);\n this.edge =\n this.site =\n this.circle = null;\n}\n\nfunction createBeach(site) {\n var beach = beachPool.pop() || new Beach;\n beach.site = site;\n return beach;\n}\n\nfunction detachBeach(beach) {\n detachCircle(beach);\n beaches.remove(beach);\n beachPool.push(beach);\n RedBlackNode(beach);\n}\n\nexport function removeBeach(beach) {\n var circle = beach.circle,\n x = circle.x,\n y = circle.cy,\n vertex = [x, y],\n previous = beach.P,\n next = beach.N,\n disappearing = [beach];\n\n detachBeach(beach);\n\n var lArc = previous;\n while (lArc.circle\n && Math.abs(x - lArc.circle.x) < epsilon\n && Math.abs(y - lArc.circle.cy) < epsilon) {\n previous = lArc.P;\n disappearing.unshift(lArc);\n detachBeach(lArc);\n lArc = previous;\n }\n\n disappearing.unshift(lArc);\n detachCircle(lArc);\n\n var rArc = next;\n while (rArc.circle\n && Math.abs(x - rArc.circle.x) < epsilon\n && Math.abs(y - rArc.circle.cy) < epsilon) {\n next = rArc.N;\n disappearing.push(rArc);\n detachBeach(rArc);\n rArc = next;\n }\n\n disappearing.push(rArc);\n detachCircle(rArc);\n\n var nArcs = disappearing.length,\n iArc;\n for (iArc = 1; iArc < nArcs; ++iArc) {\n rArc = disappearing[iArc];\n lArc = disappearing[iArc - 1];\n setEdgeEnd(rArc.edge, lArc.site, rArc.site, vertex);\n }\n\n lArc = disappearing[0];\n rArc = disappearing[nArcs - 1];\n rArc.edge = createEdge(lArc.site, rArc.site, null, vertex);\n\n attachCircle(lArc);\n attachCircle(rArc);\n}\n\nexport function addBeach(site) {\n var x = site[0],\n directrix = site[1],\n lArc,\n rArc,\n dxl,\n dxr,\n node = beaches._;\n\n while (node) {\n dxl = leftBreakPoint(node, directrix) - x;\n if (dxl > epsilon) node = node.L; else {\n dxr = x - rightBreakPoint(node, directrix);\n if (dxr > epsilon) {\n if (!node.R) {\n lArc = node;\n break;\n }\n node = node.R;\n } else {\n if (dxl > -epsilon) {\n lArc = node.P;\n rArc = node;\n } else if (dxr > -epsilon) {\n lArc = node;\n rArc = node.N;\n } else {\n lArc = rArc = node;\n }\n break;\n }\n }\n }\n\n createCell(site);\n var newArc = createBeach(site);\n beaches.insert(lArc, newArc);\n\n if (!lArc && !rArc) return;\n\n if (lArc === rArc) {\n detachCircle(lArc);\n rArc = createBeach(lArc.site);\n beaches.insert(newArc, rArc);\n newArc.edge = rArc.edge = createEdge(lArc.site, newArc.site);\n attachCircle(lArc);\n attachCircle(rArc);\n return;\n }\n\n if (!rArc) { // && lArc\n newArc.edge = createEdge(lArc.site, newArc.site);\n return;\n }\n\n // else lArc !== rArc\n detachCircle(lArc);\n detachCircle(rArc);\n\n var lSite = lArc.site,\n ax = lSite[0],\n ay = lSite[1],\n bx = site[0] - ax,\n by = site[1] - ay,\n rSite = rArc.site,\n cx = rSite[0] - ax,\n cy = rSite[1] - ay,\n d = 2 * (bx * cy - by * cx),\n hb = bx * bx + by * by,\n hc = cx * cx + cy * cy,\n vertex = [(cy * hb - by * hc) / d + ax, (bx * hc - cx * hb) / d + ay];\n\n setEdgeEnd(rArc.edge, lSite, rSite, vertex);\n newArc.edge = createEdge(lSite, site, null, vertex);\n rArc.edge = createEdge(site, rSite, null, vertex);\n attachCircle(lArc);\n attachCircle(rArc);\n}\n\nfunction leftBreakPoint(arc, directrix) {\n var site = arc.site,\n rfocx = site[0],\n rfocy = site[1],\n pby2 = rfocy - directrix;\n\n if (!pby2) return rfocx;\n\n var lArc = arc.P;\n if (!lArc) return -Infinity;\n\n site = lArc.site;\n var lfocx = site[0],\n lfocy = site[1],\n plby2 = lfocy - directrix;\n\n if (!plby2) return lfocx;\n\n var hl = lfocx - rfocx,\n aby2 = 1 / pby2 - 1 / plby2,\n b = hl / plby2;\n\n if (aby2) return (-b + Math.sqrt(b * b - 2 * aby2 * (hl * hl / (-2 * plby2) - lfocy + plby2 / 2 + rfocy - pby2 / 2))) / aby2 + rfocx;\n\n return (rfocx + lfocx) / 2;\n}\n\nfunction rightBreakPoint(arc, directrix) {\n var rArc = arc.N;\n if (rArc) return leftBreakPoint(rArc, directrix);\n var site = arc.site;\n return site[1] === directrix ? site[0] : Infinity;\n}\n","import {addBeach, removeBeach} from \"./Beach\";\nimport {sortCellHalfedges, cellHalfedgeStart, clipCells} from \"./Cell\";\nimport {firstCircle} from \"./Circle\";\nimport {clipEdges} from \"./Edge\";\nimport RedBlackTree from \"./RedBlackTree\";\n\nexport var epsilon = 1e-6;\nexport var epsilon2 = 1e-12;\nexport var beaches;\nexport var cells;\nexport var circles;\nexport var edges;\n\nfunction triangleArea(a, b, c) {\n return (a[0] - c[0]) * (b[1] - a[1]) - (a[0] - b[0]) * (c[1] - a[1]);\n}\n\nfunction lexicographic(a, b) {\n return b[1] - a[1]\n || b[0] - a[0];\n}\n\nexport default function Diagram(sites, extent) {\n var site = sites.sort(lexicographic).pop(),\n x,\n y,\n circle;\n\n edges = [];\n cells = new Array(sites.length);\n beaches = new RedBlackTree;\n circles = new RedBlackTree;\n\n while (true) {\n circle = firstCircle;\n if (site && (!circle || site[1] < circle.y || (site[1] === circle.y && site[0] < circle.x))) {\n if (site[0] !== x || site[1] !== y) {\n addBeach(site);\n x = site[0], y = site[1];\n }\n site = sites.pop();\n } else if (circle) {\n removeBeach(circle.arc);\n } else {\n break;\n }\n }\n\n sortCellHalfedges();\n\n if (extent) {\n var x0 = +extent[0][0],\n y0 = +extent[0][1],\n x1 = +extent[1][0],\n y1 = +extent[1][1];\n clipEdges(x0, y0, x1, y1);\n clipCells(x0, y0, x1, y1);\n }\n\n this.edges = edges;\n this.cells = cells;\n\n beaches =\n circles =\n edges =\n cells = null;\n}\n\nDiagram.prototype = {\n constructor: Diagram,\n\n polygons: function() {\n var edges = this.edges;\n\n return this.cells.map(function(cell) {\n var polygon = cell.halfedges.map(function(i) { return cellHalfedgeStart(cell, edges[i]); });\n polygon.data = cell.site.data;\n return polygon;\n });\n },\n\n triangles: function() {\n var triangles = [],\n edges = this.edges;\n\n this.cells.forEach(function(cell, i) {\n if (!(m = (halfedges = cell.halfedges).length)) return;\n var site = cell.site,\n halfedges,\n j = -1,\n m,\n s0,\n e1 = edges[halfedges[m - 1]],\n s1 = e1.left === site ? e1.right : e1.left;\n\n while (++j < m) {\n s0 = s1;\n e1 = edges[halfedges[j]];\n s1 = e1.left === site ? e1.right : e1.left;\n if (s0 && s1 && i < s0.index && i < s1.index && triangleArea(site, s0, s1) < 0) {\n triangles.push([site.data, s0.data, s1.data]);\n }\n }\n });\n\n return triangles;\n },\n\n links: function() {\n return this.edges.filter(function(edge) {\n return edge.right;\n }).map(function(edge) {\n return {\n source: edge.left.data,\n target: edge.right.data\n };\n });\n },\n\n find: function(x, y, radius) {\n var that = this, i0, i1 = that._found || 0, n = that.cells.length, cell;\n\n // Use the previously-found cell, or start with an arbitrary one.\n while (!(cell = that.cells[i1])) if (++i1 >= n) return null;\n var dx = x - cell.site[0], dy = y - cell.site[1], d2 = dx * dx + dy * dy;\n\n // Traverse the half-edges to find a closer cell, if any.\n do {\n cell = that.cells[i0 = i1], i1 = null;\n cell.halfedges.forEach(function(e) {\n var edge = that.edges[e], v = edge.left;\n if ((v === cell.site || !v) && !(v = edge.right)) return;\n var vx = x - v[0], vy = y - v[1], v2 = vx * vx + vy * vy;\n if (v2 < d2) d2 = v2, i1 = v.index;\n });\n } while (i1 !== null);\n\n that._found = i0;\n\n return radius == null || d2 <= radius * radius ? cell.site : null;\n }\n}\n","import constant from \"./constant\";\nimport {x as pointX, y as pointY} from \"./point\";\nimport Diagram, {epsilon} from \"./Diagram\";\n\nexport default function() {\n var x = pointX,\n y = pointY,\n extent = null;\n\n function voronoi(data) {\n return new Diagram(data.map(function(d, i) {\n var s = [Math.round(x(d, i, data) / epsilon) * epsilon, Math.round(y(d, i, data) / epsilon) * epsilon];\n s.index = i;\n s.data = d;\n return s;\n }), extent);\n }\n\n voronoi.polygons = function(data) {\n return voronoi(data).polygons();\n };\n\n voronoi.links = function(data) {\n return voronoi(data).links();\n };\n\n voronoi.triangles = function(data) {\n return voronoi(data).triangles();\n };\n\n voronoi.x = function(_) {\n return arguments.length ? (x = typeof _ === \"function\" ? _ : constant(+_), voronoi) : x;\n };\n\n voronoi.y = function(_) {\n return arguments.length ? (y = typeof _ === \"function\" ? _ : constant(+_), voronoi) : y;\n };\n\n voronoi.extent = function(_) {\n return arguments.length ? (extent = _ == null ? null : [[+_[0][0], +_[0][1]], [+_[1][0], +_[1][1]]], voronoi) : extent && [[extent[0][0], extent[0][1]], [extent[1][0], extent[1][1]]];\n };\n\n voronoi.size = function(_) {\n return arguments.length ? (extent = _ == null ? null : [[0, 0], [+_[0], +_[1]]], voronoi) : extent && [extent[1][0] - extent[0][0], extent[1][1] - extent[0][1]];\n };\n\n return voronoi;\n}\n","/* global window, requestAnimationFrame, cancelAnimationFrame */\nimport { FieldType, DimensionSubtype } from 'datamodel';\nimport {\n axisLeft,\n axisRight,\n axisTop,\n axisBottom\n} from 'd3-axis';\nimport {\n symbolCircle,\n symbolCross,\n symbolDiamond,\n symbolSquare,\n symbolStar,\n symbolWye,\n symbolTriangle,\n symbol,\n stack as d3Stack,\n stackOffsetDiverging,\n stackOrderNone,\n stackOrderAscending,\n stackOrderDescending,\n stackOffsetNone,\n stackOffsetExpand,\n stackOffsetWiggle,\n pie,\n arc,\n line,\n curveLinear,\n curveStepAfter,\n curveStepBefore,\n curveStep,\n curveCatmullRom,\n area\n} from 'd3-shape';\nimport { scaleBand } from 'd3-scale';\nimport { nest } from 'd3-collection';\nimport {\n interpolate,\n interpolateRgb,\n piecewise,\n interpolateNumber,\n interpolateHslLong\n} from 'd3-interpolate';\nimport {\n easeCubic,\n easeBounce,\n easePoly,\n easeBack,\n easeCircle,\n easeLinear,\n easeElastic\n} from 'd3-ease';\nimport {\n color,\n rgb,\n hsl\n} from 'd3-color';\nimport { voronoi } from 'd3-voronoi';\nimport Model from 'hyperdis';\nimport * as STACK_CONFIG from './enums/stack-config';\n\nconst HTMLElement = window.HTMLElement;\n\nconst isSimpleObject = (obj) => {\n let token;\n if (typeof obj === 'object') {\n if (obj === null) { return false; }\n token = Object.prototype.toString.call(obj);\n if (token === '[object Object]') {\n return (obj.constructor.toString().match(/^function (.*)\\(\\)/m) || [])[1] === 'Object';\n }\n }\n return false;\n};\n\n/**\n * Returns unique id\n * @return {string} Unique id string\n */\nconst\n getUniqueId = () => `id-${new Date().getTime()}${Math.round(Math.random() * 10000)}`;\n\n/**\n * Deep copies an object and returns a new object.\n * @param {Object} o Object to clone\n * @return {Object} New Object.\n */\nconst clone = (o) => {\n const output = {};\n let v;\n for (const key in o) {\n if ({}.hasOwnProperty.call(o, key)) {\n v = o[key];\n output[key] = isSimpleObject(v) ? clone(v) : v;\n }\n }\n return output;\n};\n\n/**\n* Checks the existence of keys in an object\n* @param {Array} keys Set of keys which are to be checked\n* @param {Object} obj whose keys are checked from the set of keys provided\n* @return {Object} Error if the keys are absent, or the object itself\n*/\nconst checkExistence = (keys, obj) => {\n const nonExistentKeys = [];\n keys.forEach((key) => {\n if (key in obj) {\n return;\n }\n nonExistentKeys.push(key);\n });\n return nonExistentKeys;\n};\n\nconst sanitizeIP = {\n typeObj: (keys, obj) => {\n if (typeof obj !== 'object') {\n return Error('Argument type object expected');\n }\n\n const nonExistentKeys = checkExistence(keys, obj);\n if (nonExistentKeys.length) {\n return Error(`Missing keys from parameter ${nonExistentKeys.join(', ')}`);\n }\n return obj;\n },\n\n /* istanbul ignore next */ htmlElem: (elem) => {\n if (!(elem instanceof HTMLElement)) {\n return Error('HTMLElement required');\n }\n return elem;\n }\n};\n\n/**\n * Gets the maximum value from an array of objects for a given property name\n * @param {Array.} data Array of objects\n * @param {string} field Field name\n * @return {number} Maximum value\n */\nconst getMax = (data, field) => Math.max(...data.filter(d => !isNaN(d[field])).map(d => d[field]));\n\n/**\n * Gets the minimum value from an array of objects for a given property name\n * @param {Array.} data Array of objects\n * @param {string} field Field name\n * @return {number} Minimum value\n */\nconst getMin = (data, field) => Math.min(...data.filter(d => !isNaN(d[field])).map(d => d[field]));\n\n/**\n * Gets the domain from the data based on the field name and type of field\n * @param {Array. | Array.} data Data Array\n * @param {Array.} fields Array of fields from where the domain will be calculated\n * @param {string} fieldType Type of field - nominal, quantitiative, temporal.\n * @return {Array} Usually contains a min and max value if field is quantitative or\n * an array of values if field type is nominal or ordinal\n */\nconst getDomainFromData = (data, fields, fieldType) => {\n let domain;\n let domArr;\n data = data[0] instanceof Array ? data : [data];\n switch (fieldType) {\n case DimensionSubtype.CATEGORICAL:\n domain = [].concat(...data.map(arr => arr.map(d => d[fields[0]]).filter(d => d !== undefined)));\n break;\n default:\n domArr = data.map((arr) => {\n const firstMin = getMin(arr, fields[0]);\n const secondMin = getMin(arr, fields[1]);\n const firstMax = getMax(arr, fields[0]);\n const secondMax = getMax(arr, fields[1]);\n return [Math.min(firstMin, secondMin), Math.max(firstMax, secondMax)];\n });\n domain = [Math.min(...domArr.map(d => d[0])), Math.max(...domArr.map(d => d[1]))];\n break;\n }\n return domain;\n};\n\n/**\n * Union Domain values\n * @param {Array.} domains Array of domain values\n * @param {string} fieldType type of field - dimension,measure or datetime.\n * @return {Array} Unioned domain of all domain values.\n */\nconst unionDomain = (domains, fieldType) => {\n let domain;\n domains = domains.filter(dom => dom.length);\n if (fieldType === DimensionSubtype.CATEGORICAL) {\n domain = domain = [].concat(...domains);\n } else {\n domain = [Math.min(...domains.map(d => d[0])), Math.max(...domains.map(d => d[1]))];\n }\n\n return domain;\n};\n\nconst symbolFns = {\n circle: symbolCircle,\n cross: symbolCross,\n diamond: symbolDiamond,\n square: symbolSquare,\n star: symbolStar,\n wye: symbolWye,\n triangle: symbolTriangle\n};\n\nconst easeFns = {\n cubic: easeCubic,\n bounce: easeBounce,\n linear: easeLinear,\n elastic: easeElastic,\n back: easeBack,\n poly: easePoly,\n circle: easeCircle\n};\n\n/**\n * Returns the maximum or minimum points of a compare value from an array of objects.\n * @param {Array} points Array of objects\n * @param {string} compareValue Key in the object on which the comparing will be done.\n * @param {string} minOrMax minimum or maximum.\n * @return {Object} Minimum or maximum point.\n */\nconst getExtremePoint = (points, compareValue, minOrMax) => {\n let extremePoint;\n let point;\n const len = points.length;\n let minOrMaxVal = minOrMax === 'max' ? -Infinity : Infinity;\n let val;\n\n for (let i = 0; i < len; i++) {\n point = points[i];\n val = point[compareValue];\n if (minOrMax === 'min' ? val < minOrMaxVal : val > minOrMaxVal) {\n minOrMaxVal = val;\n extremePoint = point;\n }\n }\n\n return extremePoint;\n};\n\n/**\n * Returns the minimum point of a compare value from an array of objects.\n * @param {Array} points Array of objects\n * @param {string} compareValue Key in the object on which the comparing will be done.\n * @return {Object} Minimum point.\n */\nconst getMinPoint = (points, compareValue) => getExtremePoint(points, compareValue, 'min');\n\n/**\n * Returns the maximum point of a compare value from an array of objects.\n * @param {Array} points Array of objects\n * @param {string} compareValue Key in the object on which the comparing will be done.\n * @return {Object} Maximum point.\n */\nconst getMaxPoint = (points, compareValue) => getExtremePoint(points, compareValue, 'max');\n\n/**\n * Gets the index of the closest value of the given value from the array.\n * @param {Array} arr Array of values\n * @param {number} value Value from which the nearest value will be calculated.\n * @param {string} side side property.\n * @return {number} index of the closest value\n */\n/* istanbul ignore next */const getClosestIndexOf = (arr, value, side) => {\n let low = 0;\n const arrLen = arr.length;\n let high = arrLen - 1;\n\n let mid;\n let d1;\n let d2;\n\n while (low < high) {\n mid = Math.floor((low + high) / 2);\n d1 = Math.abs(arr[mid] - value);\n d2 = Math.abs(arr[mid + 1] - value);\n\n if (d2 <= d1) {\n low = mid + 1;\n } else {\n high = mid;\n }\n }\n\n if (!side) {\n return high;\n }\n\n const highVal = arr[high];\n if (highVal === value) {\n return high;\n } else if (highVal > value) {\n if (high === 0) { return high; }\n return side === 'left' ? high - 1 : high;\n }\n if (high === arr.length - 1) { return high; }\n return side === 'left' ? high : high + 1;\n};\n\n/**\n * Returns the browser window object\n * @return {Window} Window object\n*/\nconst getWindow = () => window;\n\n/**\n * Returns the browser window object\n * @return {Window} Window object\n*/\nconst reqAnimFrame = (() => requestAnimationFrame)();\n\nconst cancelAnimFrame = (() => cancelAnimationFrame)();\n\n/**\n * Capitalizes the first letter of the word\n * @param {string} text word\n * @return {string} Capitalized word\n */\nconst capitalizeFirst = (text) => {\n text = text.toLowerCase();\n\n return text.replace(/\\w\\S*/g, txt => txt.charAt(0).toUpperCase() + txt.substr(1));\n};\n\n/**\n *\n *\n * @param {*} arr\n */\nconst unique = arr => ([...new Set(arr)]);\n\n/**\n * Gets the minimum difference between two consecutive numbers in an array.\n * @param {Array} arr Array of numbers\n * @param {number} index index of the value\n * @return {number} minimum difference between values\n */\n/* istanbul ignore next */ const getMinDiff = (arr, index) => {\n let diff;\n let uniqueVals;\n if (index !== undefined) {\n uniqueVals = unique(arr.map(d => d[index]));\n } else {\n uniqueVals = unique(arr);\n }\n if (uniqueVals.length > 1) {\n diff = Math.abs(uniqueVals[1] - uniqueVals[0]);\n for (let i = 2, len = uniqueVals.length; i < len; i++) {\n diff = Math.min(diff, Math.abs(uniqueVals[i] - uniqueVals[i - 1]));\n }\n } else {\n diff = uniqueVals[0];\n }\n\n return diff;\n};\n\n/**\n * Returns the class name appended with a given id.\n * @param {string} cls class name\n * @param {string} id unique identifier\n * @param {string} prefix string needed to add before the classname\n * @return {string} qualified class name\n */\n/* istanbul ignore next */const getQualifiedClassName = (cls, id, prefix) => {\n cls = cls.replace(/^\\.*/, '');\n return [`${prefix}-${cls}`, `${prefix}-${cls}-${id}`];\n};\n\n/**\n * This method is used to set the default value for variables\n * without sullying the code with conditional statements.\n *\n * @export\n * @param {any} param The parameter to test.\n * @param {any} value The default value to assign.\n * @return {any} The value.\n */\n/* istanbul ignore next */ const defaultValue = (param, value) => {\n if (typeof param === 'undefined' || (typeof param === 'object' && !param)) {\n return value;\n }\n return param;\n};\n\n/**\n * DESCRIPTION TODO\n * @todo\n *\n * @export\n * @param {Object} graph graph whose dependency order has to be generated\n * @return {Object} @todo\n */\nconst getDependencyOrder = (graph) => {\n const dependencyOrder = [];\n const visited = {};\n const keys = Object.keys(graph);\n /**\n * DESCRIPTION TODO\n * @todo\n *\n * @export\n * @param {Object} name @todo\n * @return {Object} @todo\n */\n const visit = (name) => {\n if (dependencyOrder.length === keys.length) {\n return true;\n }\n visited[name] = true;\n const edges = graph[name];\n for (let e = 0; e < edges.length; e++) {\n const dep = edges[e];\n if (!visited[dep]) {\n visit(dep);\n }\n }\n\n dependencyOrder.push(name);\n return false;\n };\n\n for (let i = 0; i < keys.length; i++) {\n if (visit(keys[i], i)) break;\n }\n\n return dependencyOrder;\n};\n\n/**\n * Iterates over the properties of an object and applies the function\n *\n * @param {any} obj object to be iterated upon\n * @param {any} fn function to be applied on it\n */\nconst objectIterator = (obj, fn) => {\n for (const key in obj) {\n if (Object.hasOwnProperty.call(obj, key)) {\n fn(key, obj);\n }\n }\n};\n\n/**\n * This class creates a d3 voronoi for retrieving the nearest neighbour of any point from a set of two\n * dimensional points\n * @class Voronoi\n */\n/* istanbul ignore next */ class Voronoi {\n /**\n * Initialize the voronoi with the data given.\n * @param {Array.} data Array of points.\n */\n constructor (data) {\n this._voronoi = voronoi().x(d => d.x).y(d => d.y);\n this.data(data);\n }\n\n /**\n * Sets the data to voronoi\n * @param {Array.} data Array of objects.\n * @return {Voronoi} Instance of voronoi.\n */\n data (data) {\n if (data) {\n this._voronoiFn = this._voronoi(data);\n }\n return this;\n }\n\n /**\n * Finds the closest point to the x and y position given.\n * @param {number} x x value\n * @param {number} y y value\n * @param {number} radius search radius.\n * @return {Object} Details of the nearest point.\n */\n find (x, y, radius) {\n return this._voronoiFn.find(x, y, radius);\n }\n}\n\n/**\n * Methods to handle changes to table configuration and reactivity are handled by this\n * class.\n */\n/**\n * Common store class\n *\n * @class Store\n */\nclass Store {\n /**\n * Creates an instance of Store.\n * @param {Object} config The object to create the state store with.\n * @memberof Store\n */\n constructor (config) {\n // create reactive model\n this.model = Model.create(config);\n this._listeners = [];\n }\n\n /**\n * This method returns a plain JSON object\n * with all the fields in the state store.\n *\n * @return {Object} Serialized representation of state store.\n * @memberof Store\n */\n serialize () {\n return this.model.serialize();\n }\n\n /**\n * This method is used to update the value of a property in the state store.\n *\n * @param {string} propName The name of the property.\n * @param {number} value The new value of the property.\n * @memberof Store\n */\n commit (propName, value) {\n // check if appropriate enum has been used\n this.model.prop(propName, value);\n }\n\n /**\n * This method is used to register a callbacl that will execute\n * when one or more properties change.\n *\n * @param {string | Array} propNames name of property or array of props.\n * @param {Function} callBack The callback to execute.\n * @memberof Store\n */\n /* istanbul ignore next */registerChangeListener (propNames, callBack, instantCall) {\n let props = propNames;\n if (!Array.isArray(propNames)) {\n props = [propNames];\n }\n const fn = this.model.next(props, callBack, instantCall);\n this._listeners.push(fn);\n return this;\n }\n /**\n * This method is used to register a callbacl that will execute\n * when one or more properties change.\n *\n * @param {string | Array} propNames name of property or array of props.\n * @param {Function} callBack The callback to execute.\n * @memberof Store\n */\n /* istanbul ignore next */ registerImmediateListener (propNames, callBack, instantCall) {\n let props = propNames;\n if (!Array.isArray(propNames)) {\n props = [propNames];\n }\n const fn = this.model.on(props, callBack, instantCall);\n this._listeners.push(fn);\n return this;\n }\n /**\n * This method is used to get the name of the property\n * from the state store.\n *\n * @param {string} propName The name of the field in state store.\n * @return {any} The value of the field.\n * @memberof Store\n */\n get (propName) {\n return this.model.prop(propName);\n }\n\n /**\n * This method is used to register a computed property that is computed every time\n * the store value changes.\n *\n * @param {string} propName The name of the property to create.\n * @param {Function} callBack The function to execute when depemdent props change.\n * @memberof Store\n */\n computed (propName, callBack) {\n return this.model.calculatedProp(propName, callBack);\n }\n\n unsubscribeAll () {\n this._listeners.forEach(fn => fn());\n }\n}\n\n/**\n * Sanitize an input number / string mixed number. Currently dot in the no is not supported.\n *\n * @param {number | string} val pure number or string mixed number\n * @return {number | null} Number if it can be extracted. Otherwise null\n */\nconst intSanitizer = (val) => {\n const arr = val.toString().match(/(\\d+)(px)*/g);\n if (!arr) {\n // If only characters are passed\n return null;\n }\n\n return parseInt(arr[0], 10);\n};\n\n/**\n * Setter getter creator from config\n * Format\n * PROPERTRY_NAME: {\n * value: // default value of the property,\n * meta: {\n * typeCheck: // The setter value will be checked using this. If the value is function then the setter value\n * // is passed as args. (Optional)\n * typeExpected: // The output of typecheck action will be tested against this. Truthy value will set the\n * // value to the setter\n * sanitizaiton: // Need for sanitization before type is checked\n * }\n * }\n *\n * @param {Object} holder an empty object on which the getters and setters will be mounted\n * @param {Object} options options config based on which the getters and setters are determined.\n * @param {Hyperdis} model optional model to attach the property. If not sent new moel is created.\n * @return {Array} @todo\n */\nconst transactor = (holder, options, model) => {\n let conf;\n const store = model && model instanceof Model ? model : Model.create({});\n\n for (const prop in options) {\n if ({}.hasOwnProperty.call(options, prop)) {\n conf = options[prop];\n if (!store.prop(prop)) {\n store.append({ [prop]: conf.value });\n }\n holder[prop] = ((context, key, meta) => (...params) => {\n let val;\n let compareTo;\n const paramsLen = params.length;\n const prevVal = store.prop(prop);\n if (paramsLen) {\n // If parameters are passed then it's a setter\n const spreadParams = meta && meta.spreadParams;\n val = params;\n const values = [];\n if (meta) {\n for (let i = 0; i < paramsLen; i++) {\n val = params[i];\n const sanitization = meta.sanitization && (spreadParams ? meta.sanitization[i] :\n meta.sanitization);\n const typeCheck = meta.typeCheck && (spreadParams ? meta.typeCheck[i] : meta.typeCheck);\n if (sanitization && typeof sanitization === 'function') {\n // Sanitize if required\n val = sanitization(val, prevVal, holder);\n }\n\n if (typeCheck) {\n // Checking if a setter is valid\n if (typeof typeCheck === 'function') {\n let typeExpected = meta.typeExpected;\n if (typeExpected && spreadParams) {\n typeExpected = typeExpected[i];\n }\n if (typeExpected) {\n compareTo = typeExpected;\n } else {\n compareTo = true;\n }\n\n if (typeCheck(val) === compareTo) {\n values.push(val);\n }\n } else if (typeof typeCheck === 'string') {\n if (typeCheck === 'constructor') {\n const typeExpected = spreadParams ? meta.typeExpected[i] : meta.typeExpected;\n if (val && (val.constructor.name === typeExpected)) {\n values.push(val);\n }\n }\n } else {\n // context.prop(key, val);\n values.push(val);\n }\n } else {\n values.push(val);\n }\n }\n const preset = meta.preset;\n const oldValues = context.prop(key);\n preset && preset(values[0], holder);\n if (spreadParams) {\n oldValues.forEach((value, i) => {\n if (values[i] === undefined) {\n values[i] = value;\n }\n });\n }\n values.length && context.prop(key, spreadParams ? values : values[0]);\n } else {\n context.prop(key, spreadParams ? val : val[0]);\n }\n return holder;\n }\n // No parameters are passed hence its a getter\n return context.prop(key);\n })(store, prop, conf.meta);\n }\n }\n\n return [holder, store];\n};\n\n/**\n *\n *\n * @param {*} context\n * @param {*} props\n */\nconst generateGetterSetters = (context, props) => {\n Object.entries(props).forEach((propInfo) => {\n const prop = propInfo[0];\n const typeChecker = propInfo[1].typeChecker;\n const sanitization = propInfo[1].sanitization;\n const prototype = context.constructor.prototype;\n if (!(Object.hasOwnProperty.call(prototype, prop))) {\n context[prop] = (...params) => {\n if (params.length) {\n let value = params[0];\n if (sanitization) {\n value = sanitization(context, params[0]);\n }\n if (typeChecker && !typeChecker(value)) {\n return context[`_${prop}`];\n }\n context[`_${prop}`] = value;\n return context;\n } return context[`_${prop}`];\n };\n }\n });\n};\n\n/**\n *\n *\n * @param {*} arr\n * @param {*} prop\n */\nconst getArraySum = (arr, prop) => arr.reduce((total, elem) => {\n total += prop ? elem[prop] : elem;\n return total;\n}, 0);\n\n/**\n *\n *\n * @param {*} arr1\n * @param {*} arr2\n * @returns\n */\nconst arraysEqual = (arr1, arr2) => {\n if (arr1.length !== arr2.length) { return false; }\n for (let i = arr1.length; i >= 0; i--) {\n if (arr1[i] !== arr2[i]) { return false; }\n }\n\n return true;\n};\n\n/* eslint valid-typeof:0 */\n/**\n * Returns a validation function which can be used to validate variables against a type and value\n *\n * @param {any} type type of value that the object should have\n * @return {Object} validation function\n */\nconst isEqual = type => (oldVal, newVal) => {\n if (type === 'Array') {\n if (!oldVal) {\n return false;\n }\n return arraysEqual(oldVal, newVal);\n } else if (type === 'Object') {\n return Object.is(oldVal, newVal);\n } return oldVal === newVal;\n};\n\n/**\n * Description @todo\n *\n * @param {any} transactionModel @todo\n * @param {any} transactionEndpoint @todo\n * @param {any} transactionItems @todo\n * @return {any} @todo\n */\nconst enableChainedTransaction = (transactionModel, transactionEndpoint, transactionItems) =>\n transactionItems.forEach(item => transactionModel.on(item, ([, newVal]) => transactionEndpoint[item](newVal)));\n\n/**\n * Chceks if the element is istanceof HTMLElement\n *\n * @param {Object} elem any JS Object\n */\nconst isHTMLElem = elem => elem instanceof HTMLElement;\n\nconst ERROR_MSG = {\n INTERFACE_IMPL: 'Method not implemented'\n};\n\n/**\n * Merges the sink object in the source by recursively iterating through the object properties\n * @param {Object} source Source Object\n * @param {Object} sink Sink Object\n * @return {Object} Merged object\n */\nconst mergeRecursive = (source, sink) => {\n for (const prop in sink) {\n if (isSimpleObject(source[prop]) && isSimpleObject(sink[prop])) {\n mergeRecursive(source[prop], sink[prop]);\n } else if (sink[prop] instanceof Object && sink[prop].constructor === Object) {\n source[prop] = {};\n mergeRecursive(source[prop], sink[prop]);\n } else {\n source[prop] = sink[prop];\n }\n }\n return source;\n};\n\nconst interpolateArray = (data, fitCount) => {\n const linearInterpolate = function (before, after, atPoint) {\n return before + (after - before) * atPoint;\n };\n const newData = [];\n const springFactor = ((data.length - 1) / (fitCount - 1));\n newData[0] = data[0]; // for new allocation\n for (let i = 1; i < fitCount - 1; i++) {\n const tmp = i * springFactor;\n const before = (Math.floor(tmp)).toFixed();\n const after = (Math.ceil(tmp)).toFixed();\n const atPoint = tmp - before;\n newData[i] = linearInterpolate(data[before], data[after], atPoint);\n }\n newData[fitCount - 1] = data[data.length - 1]; // for new allocation\n return newData;\n};\n\n/**\n *\n *\n * @param {*} fn\n */\nconst nextFrame = (fn) => {\n setTimeout(() => {\n fn();\n }, 0);\n};\n\n/**\n *\n *\n * @param {*} angle\n */\nconst angleToRadian = angle => angle * Math.PI / 180;\n\n/**\n *\n *\n * @param {*} newName\n * @param {*} oldName\n */\nconst replaceCSSPrefix = () => {\n // @todo\n};\n\n/**\n * Gets the interpolator function from d3 color\n *\n */\nconst interpolator = () => interpolate;\n\n/**\n * Gets the number interpolator from d3 color\n *\n */\nconst numberInterpolator = () => interpolateNumber;\n\n/**\n * Gets the rgb interpolator from d3 color\n *\n */\nconst colorInterpolator = () => interpolateRgb;\n\n/**\n * Gets the hsl interpolator from d3 color\n *\n */\nconst hslInterpolator = () => interpolateHslLong;\n\nconst transformColors = () => ({\n color,\n rgb,\n hsl\n});\n\n/**\n * Gets the piecewise interpolator from d3 color\n *\n */\nconst piecewiseInterpolator = () => piecewise;\n\nfunction hue2rgb (p, q, t) {\n if (t < 0) t += 1;\n if (t > 1) t -= 1;\n if (t < 1 / 6) return p + (q - p) * 6 * t;\n if (t < 1 / 2) return q;\n if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n return p;\n}\n\n /**\n * Converts an HSL color value to RGB. Conversion formula\n * adapted from http://en.wikipedia.org/wiki/HSL_color_space.\n * Assumes h, s, and l are contained in the set [0, 1] and\n * returns r, g, and b in the set [0, 255].\n *\n * @param Number h The hue\n * @param Number s The saturation\n * @param Number l The lightness\n * @return Array The RGB representation\n */\nconst hslToRgb = (h, s, l, a = 1) => {\n let r;\n let g;\n let b;\n\n if (s === 0) {\n r = g = b = l; // achromatic\n } else {\n const q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n const p = 2 * l - q;\n\n r = hue2rgb(p, q, h + 1 / 3);\n g = hue2rgb(p, q, h);\n b = hue2rgb(p, q, h - 1 / 3);\n }\n\n return [r * 255, g * 255, b * 255, a];\n};\n\n /**\n * Converts an RGB color value to HSV. Conversion formula\n * adapted from http://en.wikipedia.org/wiki/HSV_color_space.\n * Assumes r, g, and b are contained in the set [0, 255] and\n * returns h, s, and v in the set [0, 1].\n *\n * @param Number r The red color value\n * @param Number g The green color value\n * @param Number b The blue color value\n * @return Array The HSV representation\n */\nconst rgbToHsv = (r, g, b, a = 1) => {\n r = +r; g = +g; b = +b; a = +a;\n r /= 255; g /= 255; b /= 255;\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n let h;\n let s;\n const l = (max + min) / 2;\n\n if (max === min) {\n h = s = 0; // achromatic\n } else {\n const d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n switch (max) {\n case r: h = (g - b) / d + (g < b ? 6 : 0); break;\n case g: h = (b - r) / d + 2; break;\n case b: h = (r - g) / d + 4; break;\n default: break;\n }\n h /= 6;\n }\n return [h, s, l, a];\n};\n\n /**\n * Converts an HSV color value to RGB. Conversion formula\n * adapted from http://en.wikipedia.org/wiki/HSV_color_space.\n * Assumes h, s, and v are contained in the set [0, 1] and\n * returns r, g, and b in the set [0, 255].\n *\n * @param Number h The hue\n * @param Number s The saturation\n * @param Number v The value\n * @return Array The RGB representation\n */\nconst hsvToRgb = (h, s, v, a = 1) => {\n let r;\n let g;\n let b;\n\n const i = Math.floor(h * 6);\n const f = h * 6 - i;\n const p = v * (1 - s);\n const q = v * (1 - f * s);\n const t = v * (1 - (1 - f) * s);\n\n switch (i % 6) {\n case 0: r = v; g = t; b = p; break;\n case 1: r = q; g = v; b = p; break;\n case 2: r = p; g = v; b = t; break;\n case 3: r = p; g = q; b = v; break;\n case 4: r = t; g = p; b = v; break;\n case 5: r = v; g = p; b = q; break;\n default: break;\n }\n\n return [r * 255, g * 255, b * 255, a];\n};\n\nconst hexToHsv = (hex) => {\n const result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\n\n const r = parseInt(result[1], 16);\n const g = parseInt(result[2], 16);\n const b = parseInt(result[3], 16);\n const a = result[4] ? parseInt(result[4], 16) : 1;\n return rgbToHsv(r, g, b, a);\n};\n\nconst detectColor = (col) => {\n const matchRgb = /rgb\\((\\d{1,3}), (\\d{1,3}), (\\d{1,3})\\)/;\n const matchHsl = /hsl\\((\\d+),\\s*([\\d.]+)%,\\s*([\\d.]+)%\\)/g;\n\n // Source : https://gist.github.com/sethlopezme/d072b945969a3cc2cc11\n // eslint-disable-next-line\n const matchRgba = /rgba?\\(((25[0-5]|2[0-4]\\d|1\\d{1,2}|\\d\\d?)\\s*,\\s*?){2}(25[0-5]|2[0-4]\\d|1\\d{1,2}|\\d\\d?)\\s*,?\\s*([01]\\.?\\d*?)?\\)/;\n // eslint-disable-next-line\n const matchHsla = /^hsla\\((0|360|35\\d|3[0-4]\\d|[12]\\d\\d|0?\\d?\\d),(0|100|\\d{1,2})%,(0|100|\\d{1,2})%,(0?\\.\\d|1(\\.0)?)\\)$/;\n const matchHex = /^#([0-9a-f]{3}){1,2}$/i;\n\n if (matchRgb.test(col) || matchRgba.test(col)) {\n return 'rgb';\n } else if (matchHsl.test(col) || matchHsla.test(col)) {\n return 'hsl';\n } else if (matchHex.test(col)) {\n return 'hex';\n } return col;\n};\n\n/**\n *\n *\n * @param {*} model\n * @param {*} propModel\n * @returns\n */\nconst filterPropagationModel = (model, propModel, measures) => {\n const { data, schema } = propModel.getData();\n let filteredModel;\n if (schema.length) {\n const fieldMap = model.getFieldsConfig();\n filteredModel = model.select((fields) => {\n const include = data.some(row => schema.every((propField, idx) => {\n if (!measures && (!(propField.name in fieldMap) ||\n fieldMap[propField.name].def.type === FieldType.MEASURE)) {\n return true;\n }\n return row[idx] === fields[propField.name].valueOf();\n }));\n return include;\n }, {\n saveChild: false\n });\n } else {\n filteredModel = propModel;\n }\n\n return filteredModel;\n};\n\nconst assembleModelFromIdentifiers = (model, identifiers) => {\n let schema = [];\n let data;\n const fieldMap = model.getFieldsConfig();\n if (identifiers.length) {\n const fields = identifiers[0];\n const len = fields.length;\n for (let i = 0; i < len; i++) {\n const field = fields[i];\n const fieldObj = fieldMap[field] && Object.assign({}, fieldMap[field].def);\n if (fieldObj) {\n schema.push(Object.assign(fieldObj));\n }\n }\n\n data = [];\n const header = identifiers[0];\n for (let i = 1; i < identifiers.length; i += 1) {\n const vals = identifiers[i];\n const temp = {};\n vals.forEach((fieldVal, cIdx) => {\n temp[header[cIdx]] = fieldVal;\n });\n data.push(temp);\n }\n } else {\n data = [];\n schema = [];\n }\n\n return new model.constructor(data, schema);\n};\n\n/**\n *\n *\n * @param {*} dataModel\n * @param {*} criteria\n * @returns\n */\nconst getDataModelFromRange = (dataModel, criteria, mode) => {\n if (criteria === null) {\n return null;\n }\n const selFields = Object.keys(criteria);\n const selFn = fields => selFields.every((field) => {\n const val = fields[field].value;\n const range = criteria[field][0] instanceof Array ? criteria[field][0] : criteria[field];\n if (typeof range[0] === 'string') {\n return range.find(d => d === val) !== undefined;\n }\n return range ? val >= range[0] && val <= range[1] : true;\n });\n\n return dataModel.select(selFn, {\n saveChild: false,\n mode\n });\n};\n\n/**\n *\n *\n * @param {*} dataModel\n * @param {*} identifiers\n * @returns\n */\nconst getDataModelFromIdentifiers = (dataModel, identifiers, mode) => {\n let filteredDataModel;\n if (identifiers instanceof Array) {\n const fieldsConfig = dataModel.getFieldsConfig();\n\n const dataArr = identifiers.slice(1, identifiers.length);\n if (identifiers instanceof Function) {\n filteredDataModel = identifiers(dataModel, {}, false);\n } else if (identifiers instanceof Array && identifiers[0].length) {\n const filteredSchema = identifiers[0].filter(d => d in fieldsConfig);\n filteredDataModel = dataModel.select((fields) => {\n let include = true;\n filteredSchema.forEach((propField, idx) => {\n const value = fields[propField].valueOf();\n const index = dataArr.findIndex(d => d[idx] === value);\n include = include && index !== -1;\n });\n return include;\n }, {\n saveChild: false,\n mode\n });\n }\n } else {\n filteredDataModel = getDataModelFromRange(dataModel, identifiers, mode);\n }\n return filteredDataModel;\n};\n\n/**\n *\n *\n * @param {*} context\n * @param {*} listenerMap\n */\nconst registerListeners = (context, listenerMap) => {\n const propListenerMap = listenerMap(context);\n for (const key in propListenerMap) {\n if ({}.hasOwnProperty.call(propListenerMap, key)) {\n const mapObj = propListenerMap[key];\n const propType = mapObj.type;\n const props = mapObj.props;\n const listenerFn = mapObj.listener;\n context.store()[propType](props, listenerFn);\n }\n }\n};\n\nconst isValidValue = value => !isNaN(value) && value !== -Infinity && value !== Infinity;\n/**\n *\n *\n * @param {*} obj\n * @param {*} fields\n * @returns\n */\nconst getObjProp = (obj, ...fields) => {\n if (obj === undefined || obj === null) {\n return obj;\n }\n let retObj = obj;\n for (let i = 0, len = fields.length; i < len; i++) {\n retObj = retObj[fields[i]];\n if (retObj === undefined || retObj === null) {\n break;\n }\n }\n return retObj;\n};\n\n/**\n *\n *\n * @param {*} str\n * @returns\n */\nconst escapeHTML = (str) => {\n const htmlEscapes = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": ''',\n '/': '/'\n };\n const htmlEscaper = /[&<>\"'/]/g;\n return (`${str}`).replace(htmlEscaper, match => htmlEscapes[match]);\n};\n\n/**\n *\n *\n * @param {*} arr\n */\nconst transposeArray = arr => arr[0].map((col, i) => arr.map(row => row[i]));\nconst toArray = arr => (arr instanceof Array ? arr : [arr]);\nconst extendsClass = (cls, extendsFrom, found) => {\n if (!cls) {\n return false;\n }\n const prototype = cls.prototype;\n if (prototype instanceof extendsFrom) {\n found = true;\n } else {\n found = extendsClass(prototype, extendsFrom, found);\n }\n return found;\n};\n\n/**\n *\n * @param {*} dm1\n * @param {*} dm2\n */\nconst concatModels = (dm1, dm2) => {\n const dataObj1 = dm1.getData();\n const dataObj2 = dm2.getData();\n const data1 = dataObj1.data;\n const data2 = dataObj2.data;\n const schema1 = dataObj1.schema;\n const schema2 = dataObj2.schema;\n const tuples1 = {};\n const tuples2 = {};\n const commonTuples = {};\n for (let i = 0; i < data1.length; i++) {\n for (let ii = 0; ii < data2.length; ii++) {\n const row1 = data1[i];\n const row2 = data2[ii];\n const dim1Values = row1.filter((d, idx) => schema1[idx].type === FieldType.DIMENSION);\n const dim2Values = row2.filter((d, idx) => schema2[idx].type === FieldType.DIMENSION);\n const allDimSame = dim1Values.every(value => dim2Values.indexOf(value) !== -1);\n if (allDimSame) {\n const key = dim1Values.join();\n !commonTuples[key] && (commonTuples[key] = {});\n row1.forEach((value, idx) => {\n commonTuples[key][schema1[idx].name] = value;\n });\n row2.forEach((value, idx) => {\n commonTuples[key][schema2[idx].name] = value;\n });\n } else {\n const dm1Key = dim1Values.join();\n const dm2Key = dim2Values.join();\n if (!commonTuples[dm1Key] && !commonTuples[dm2Key]) {\n !tuples1[dm1Key] && (tuples1[dm1Key] = {});\n !tuples2[dm2Key] && (tuples2[dm2Key] = {});\n row1.forEach((value, idx) => {\n tuples1[dm1Key][schema1[idx].name] = value;\n });\n row2.forEach((value, idx) => {\n tuples2[dm2Key][schema2[idx].name] = value;\n });\n }\n }\n }\n }\n\n const commonSchema = [...schema1, ...schema2.filter(s2 => schema1.findIndex(s1 => s1.name === s2.name) === -1)];\n const data = [...Object.values(tuples1), ...Object.values(tuples2), ...Object.values(commonTuples)];\n return [data, commonSchema];\n};\n\nconst getSymbol = type => symbol().type(symbolFns[type]);\n\nconst stackOrders = {\n [STACK_CONFIG.ORDER_NONE]: stackOrderNone,\n [STACK_CONFIG.ORDER_ASCENDING]: stackOrderAscending,\n [STACK_CONFIG.ORDER_DESCENDING]: stackOrderDescending\n};\nconst stackOffsets = {\n [STACK_CONFIG.OFFSET_DIVERGING]: stackOffsetDiverging,\n [STACK_CONFIG.OFFSET_NONE]: stackOffsetNone,\n [STACK_CONFIG.OFFSET_EXPAND]: stackOffsetExpand,\n [STACK_CONFIG.OFFSET_WIGGLE]: stackOffsetWiggle\n};\n\n// eslint-disable-next-line require-jsdoc\nconst stack = params => d3Stack().keys(params.keys).offset(stackOffsets[params.offset])\n .order(stackOrders[params.order])(params.data);\n\n/**\n * Groups the data into a hierarchical tree structure based on one or more fields.\n * @param { Object } params Configuration properties for nesting data\n * @param { Array. } params.data Data which needs to be grouped\n * @param { Array. } params.keys Field indices by which the data will be grouped\n * @return { Array. } Grouped data array\n */\nconst nestCollection = (params) => {\n const nestFn = nest();\n params.keys.forEach(key => nestFn.key(d => d[key]));\n return nestFn.entries(params.data);\n};\n\nconst pathInterpolators = {\n curveLinear,\n curveStepAfter,\n curveStepBefore,\n curveStep,\n curveCatmullRom,\n stepAfter: curveStepAfter,\n catmullRom: curveCatmullRom,\n step: curveStep,\n stepBefore: curveStepBefore,\n linear: curveLinear\n};\n\nconst Symbols = {\n axisLeft,\n axisRight,\n axisTop,\n axisBottom,\n line,\n area,\n pie,\n arc,\n nest\n};\n\nconst Scales = {\n band: scaleBand\n};\n\nconst getSmallestDiff = (points) => {\n points = points.sort((a, b) => a - b);\n let minDiff = points[1] - points[0];\n for (let i = 2; i < points.length; i++) {\n minDiff = Math.min(minDiff, points[i] - points[i - 1]);\n }\n\n return minDiff;\n};\n\nconst require = (lookupWhat, lookupDetails) => ({\n resolvable: (store) => {\n const lookupTarget = store[lookupWhat];\n const depArr = lookupDetails.slice(0, lookupDetails.length - 1);\n const fn = lookupDetails[lookupDetails.length - 1]; // fn\n\n const deps = depArr.map(str => lookupTarget[str]);\n return {\n fn: fn(...deps),\n depArr\n };\n }\n});\n\nconst nextAnimFrame = window.requestAnimationFrame || window.webkitRequestAnimationFrame ||\n window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame ||\n function (callback) {\n setTimeout(callback, 16);\n };\n\nexport {\n require,\n Scales,\n Symbols,\n pathInterpolators,\n stack,\n nestCollection,\n getSymbol,\n transformColors,\n detectColor,\n hexToHsv,\n hslToRgb,\n rgbToHsv,\n hsvToRgb,\n concatModels,\n toArray,\n angleToRadian,\n escapeHTML,\n generateGetterSetters,\n getArraySum,\n interpolator,\n piecewiseInterpolator,\n getDataModelFromIdentifiers,\n getDataModelFromRange,\n colorInterpolator,\n numberInterpolator,\n ERROR_MSG,\n reqAnimFrame,\n nextAnimFrame,\n filterPropagationModel,\n transposeArray,\n cancelAnimFrame,\n getMax,\n getMin,\n getDomainFromData,\n getUniqueId,\n mergeRecursive,\n unionDomain,\n symbolFns,\n easeFns,\n clone,\n isEqual,\n interpolateArray,\n getMinPoint,\n defaultValue,\n getMaxPoint,\n getClosestIndexOf,\n Voronoi,\n checkExistence,\n sanitizeIP,\n getMinDiff,\n capitalizeFirst,\n getWindow,\n getQualifiedClassName,\n Store,\n getDependencyOrder,\n objectIterator,\n intSanitizer,\n transactor,\n enableChainedTransaction,\n isHTMLElem,\n isSimpleObject,\n nextFrame,\n registerListeners,\n replaceCSSPrefix,\n getObjProp,\n extendsClass,\n assembleModelFromIdentifiers,\n isValidValue,\n hslInterpolator,\n getSmallestDiff\n};\n","export function linear(t) {\n return +t;\n}\n","export function circleIn(t) {\n return 1 - Math.sqrt(1 - t * t);\n}\n\nexport function circleOut(t) {\n return Math.sqrt(1 - --t * t);\n}\n\nexport function circleInOut(t) {\n return ((t *= 2) <= 1 ? 1 - Math.sqrt(1 - t * t) : Math.sqrt(1 - (t -= 2) * t) + 1) / 2;\n}\n","import {path} from \"d3-path\";\nimport circle from \"./symbol/circle\";\nimport cross from \"./symbol/cross\";\nimport diamond from \"./symbol/diamond\";\nimport star from \"./symbol/star\";\nimport square from \"./symbol/square\";\nimport triangle from \"./symbol/triangle\";\nimport wye from \"./symbol/wye\";\nimport constant from \"./constant\";\n\nexport var symbols = [\n circle,\n cross,\n diamond,\n square,\n star,\n triangle,\n wye\n];\n\nexport default function() {\n var type = constant(circle),\n size = constant(64),\n context = null;\n\n function symbol() {\n var buffer;\n if (!context) context = buffer = path();\n type.apply(this, arguments).draw(context, +size.apply(this, arguments));\n if (buffer) return context = null, buffer + \"\" || null;\n }\n\n symbol.type = function(_) {\n return arguments.length ? (type = typeof _ === \"function\" ? _ : constant(_), symbol) : type;\n };\n\n symbol.size = function(_) {\n return arguments.length ? (size = typeof _ === \"function\" ? _ : constant(+_), symbol) : size;\n };\n\n symbol.context = function(_) {\n return arguments.length ? (context = _ == null ? null : _, symbol) : context;\n };\n\n return symbol;\n}\n","export const ORDER_ASCENDING = 'ascending';\nexport const ORDER_DESCENDING = 'descending';\nexport const ORDER_NONE = 'none';\nexport const OFFSET_DIVERGING = 'diverging';\nexport const OFFSET_NONE = 'none';\nexport const OFFSET_EXPAND = 'expand';\nexport const OFFSET_WIGGLE = 'wiggle';\n","import ascending from \"./ascending\";\n\nexport default function(series) {\n return ascending(series).reverse();\n}\n","export default function(series, order) {\n if (!((n = series.length) > 1)) return;\n for (var i, j = 0, d, dy, yp, yn, n, m = series[order[0]].length; j < m; ++j) {\n for (yp = yn = 0, i = 0; i < n; ++i) {\n if ((dy = (d = series[order[i]][j])[1] - d[0]) >= 0) {\n d[0] = yp, d[1] = yp += dy;\n } else if (dy < 0) {\n d[1] = yn, d[0] = yn += dy;\n } else {\n d[0] = yp;\n }\n }\n }\n}\n","import none from \"./none\";\n\nexport default function(series, order) {\n if (!((n = series.length) > 0)) return;\n for (var i, n, j = 0, m = series[0].length, y; j < m; ++j) {\n for (y = i = 0; i < n; ++i) y += series[i][j][1] || 0;\n if (y) for (i = 0; i < n; ++i) series[i][j][1] /= y;\n }\n none(series, order);\n}\n","import none from \"./none\";\n\nexport default function(series, order) {\n if (!((n = series.length) > 0) || !((m = (s0 = series[order[0]]).length) > 0)) return;\n for (var y = 0, j = 1, s0, m, n; j < m; ++j) {\n for (var i = 0, s1 = 0, s2 = 0; i < n; ++i) {\n var si = series[order[i]],\n sij0 = si[j][1] || 0,\n sij1 = si[j - 1][1] || 0,\n s3 = (sij0 - sij1) / 2;\n for (var k = 0; k < i; ++k) {\n var sk = series[order[k]],\n skj0 = sk[j][1] || 0,\n skj1 = sk[j - 1][1] || 0;\n s3 += skj0 - skj1;\n }\n s1 += sij0, s2 += s3 * sij0;\n }\n s0[j - 1][1] += s0[j - 1][0] = y;\n if (s1) y -= s2 / s1;\n }\n s0[j - 1][1] += s0[j - 1][0] = y;\n none(series, order);\n}\n","import constant from \"./constant\";\nimport descending from \"./descending\";\nimport identity from \"./identity\";\nimport {tau} from \"./math\";\n\nexport default function() {\n var value = identity,\n sortValues = descending,\n sort = null,\n startAngle = constant(0),\n endAngle = constant(tau),\n padAngle = constant(0);\n\n function pie(data) {\n var i,\n n = data.length,\n j,\n k,\n sum = 0,\n index = new Array(n),\n arcs = new Array(n),\n a0 = +startAngle.apply(this, arguments),\n da = Math.min(tau, Math.max(-tau, endAngle.apply(this, arguments) - a0)),\n a1,\n p = Math.min(Math.abs(da) / n, padAngle.apply(this, arguments)),\n pa = p * (da < 0 ? -1 : 1),\n v;\n\n for (i = 0; i < n; ++i) {\n if ((v = arcs[index[i] = i] = +value(data[i], i, data)) > 0) {\n sum += v;\n }\n }\n\n // Optionally sort the arcs by previously-computed values or by data.\n if (sortValues != null) index.sort(function(i, j) { return sortValues(arcs[i], arcs[j]); });\n else if (sort != null) index.sort(function(i, j) { return sort(data[i], data[j]); });\n\n // Compute the arcs! They are stored in the original data's order.\n for (i = 0, k = sum ? (da - n * pa) / sum : 0; i < n; ++i, a0 = a1) {\n j = index[i], v = arcs[j], a1 = a0 + (v > 0 ? v * k : 0) + pa, arcs[j] = {\n data: data[j],\n index: i,\n value: v,\n startAngle: a0,\n endAngle: a1,\n padAngle: p\n };\n }\n\n return arcs;\n }\n\n pie.value = function(_) {\n return arguments.length ? (value = typeof _ === \"function\" ? _ : constant(+_), pie) : value;\n };\n\n pie.sortValues = function(_) {\n return arguments.length ? (sortValues = _, sort = null, pie) : sortValues;\n };\n\n pie.sort = function(_) {\n return arguments.length ? (sort = _, sortValues = null, pie) : sort;\n };\n\n pie.startAngle = function(_) {\n return arguments.length ? (startAngle = typeof _ === \"function\" ? _ : constant(+_), pie) : startAngle;\n };\n\n pie.endAngle = function(_) {\n return arguments.length ? (endAngle = typeof _ === \"function\" ? _ : constant(+_), pie) : endAngle;\n };\n\n pie.padAngle = function(_) {\n return arguments.length ? (padAngle = typeof _ === \"function\" ? _ : constant(+_), pie) : padAngle;\n };\n\n return pie;\n}\n","export var xhtml = \"http://www.w3.org/1999/xhtml\";\n\nexport default {\n svg: \"http://www.w3.org/2000/svg\",\n xhtml: xhtml,\n xlink: \"http://www.w3.org/1999/xlink\",\n xml: \"http://www.w3.org/XML/1998/namespace\",\n xmlns: \"http://www.w3.org/2000/xmlns/\"\n};\n","import namespaces from \"./namespaces\";\n\nexport default function(name) {\n var prefix = name += \"\", i = prefix.indexOf(\":\");\n if (i >= 0 && (prefix = name.slice(0, i)) !== \"xmlns\") name = name.slice(i + 1);\n return namespaces.hasOwnProperty(prefix) ? {space: namespaces[prefix], local: name} : name;\n}\n","import namespace from \"./namespace\";\nimport {xhtml} from \"./namespaces\";\n\nfunction creatorInherit(name) {\n return function() {\n var document = this.ownerDocument,\n uri = this.namespaceURI;\n return uri === xhtml && document.documentElement.namespaceURI === xhtml\n ? document.createElement(name)\n : document.createElementNS(uri, name);\n };\n}\n\nfunction creatorFixed(fullname) {\n return function() {\n return this.ownerDocument.createElementNS(fullname.space, fullname.local);\n };\n}\n\nexport default function(name) {\n var fullname = namespace(name);\n return (fullname.local\n ? creatorFixed\n : creatorInherit)(fullname);\n}\n","function none() {}\n\nexport default function(selector) {\n return selector == null ? none : function() {\n return this.querySelector(selector);\n };\n}\n","function empty() {\n return [];\n}\n\nexport default function(selector) {\n return selector == null ? empty : function() {\n return this.querySelectorAll(selector);\n };\n}\n","var matcher = function(selector) {\n return function() {\n return this.matches(selector);\n };\n};\n\nif (typeof document !== \"undefined\") {\n var element = document.documentElement;\n if (!element.matches) {\n var vendorMatches = element.webkitMatchesSelector\n || element.msMatchesSelector\n || element.mozMatchesSelector\n || element.oMatchesSelector;\n matcher = function(selector) {\n return function() {\n return vendorMatches.call(this, selector);\n };\n };\n }\n}\n\nexport default matcher;\n","export default function(update) {\n return new Array(update.length);\n}\n","import sparse from \"./sparse\";\nimport {Selection} from \"./index\";\n\nexport default function() {\n return new Selection(this._enter || this._groups.map(sparse), this._parents);\n}\n\nexport function EnterNode(parent, datum) {\n this.ownerDocument = parent.ownerDocument;\n this.namespaceURI = parent.namespaceURI;\n this._next = null;\n this._parent = parent;\n this.__data__ = datum;\n}\n\nEnterNode.prototype = {\n constructor: EnterNode,\n appendChild: function(child) { return this._parent.insertBefore(child, this._next); },\n insertBefore: function(child, next) { return this._parent.insertBefore(child, next); },\n querySelector: function(selector) { return this._parent.querySelector(selector); },\n querySelectorAll: function(selector) { return this._parent.querySelectorAll(selector); }\n};\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","import {Selection} from \"./index\";\nimport {EnterNode} from \"./enter\";\nimport constant from \"../constant\";\n\nvar keyPrefix = \"$\"; // Protect against keys like “__proto__”.\n\nfunction bindIndex(parent, group, enter, update, exit, data) {\n var i = 0,\n node,\n groupLength = group.length,\n dataLength = data.length;\n\n // Put any non-null nodes that fit into update.\n // Put any null nodes into enter.\n // Put any remaining data into enter.\n for (; i < dataLength; ++i) {\n if (node = group[i]) {\n node.__data__ = data[i];\n update[i] = node;\n } else {\n enter[i] = new EnterNode(parent, data[i]);\n }\n }\n\n // Put any non-null nodes that don’t fit into exit.\n for (; i < groupLength; ++i) {\n if (node = group[i]) {\n exit[i] = node;\n }\n }\n}\n\nfunction bindKey(parent, group, enter, update, exit, data, key) {\n var i,\n node,\n nodeByKeyValue = {},\n groupLength = group.length,\n dataLength = data.length,\n keyValues = new Array(groupLength),\n keyValue;\n\n // Compute the key for each node.\n // If multiple nodes have the same key, the duplicates are added to exit.\n for (i = 0; i < groupLength; ++i) {\n if (node = group[i]) {\n keyValues[i] = keyValue = keyPrefix + key.call(node, node.__data__, i, group);\n if (keyValue in nodeByKeyValue) {\n exit[i] = node;\n } else {\n nodeByKeyValue[keyValue] = node;\n }\n }\n }\n\n // Compute the key for each datum.\n // If there a node associated with this key, join and add it to update.\n // If there is not (or the key is a duplicate), add it to enter.\n for (i = 0; i < dataLength; ++i) {\n keyValue = keyPrefix + key.call(parent, data[i], i, data);\n if (node = nodeByKeyValue[keyValue]) {\n update[i] = node;\n node.__data__ = data[i];\n nodeByKeyValue[keyValue] = null;\n } else {\n enter[i] = new EnterNode(parent, data[i]);\n }\n }\n\n // Add any remaining nodes that were not bound to data to exit.\n for (i = 0; i < groupLength; ++i) {\n if ((node = group[i]) && (nodeByKeyValue[keyValues[i]] === node)) {\n exit[i] = node;\n }\n }\n}\n\nexport default function(value, key) {\n if (!value) {\n data = new Array(this.size()), j = -1;\n this.each(function(d) { data[++j] = d; });\n return data;\n }\n\n var bind = key ? bindKey : bindIndex,\n parents = this._parents,\n groups = this._groups;\n\n if (typeof value !== \"function\") value = constant(value);\n\n for (var m = groups.length, update = new Array(m), enter = new Array(m), exit = new Array(m), j = 0; j < m; ++j) {\n var parent = parents[j],\n group = groups[j],\n groupLength = group.length,\n data = value.call(parent, parent && parent.__data__, j, parents),\n dataLength = data.length,\n enterGroup = enter[j] = new Array(dataLength),\n updateGroup = update[j] = new Array(dataLength),\n exitGroup = exit[j] = new Array(groupLength);\n\n bind(parent, group, enterGroup, updateGroup, exitGroup, data, key);\n\n // Now connect the enter nodes to their following update node, such that\n // appendChild can insert the materialized enter node before this node,\n // rather than at the end of the parent node.\n for (var i0 = 0, i1 = 0, previous, next; i0 < dataLength; ++i0) {\n if (previous = enterGroup[i0]) {\n if (i0 >= i1) i1 = i0 + 1;\n while (!(next = updateGroup[i1]) && ++i1 < dataLength);\n previous._next = next || null;\n }\n }\n }\n\n update = new Selection(update, parents);\n update._enter = enter;\n update._exit = exit;\n return update;\n}\n","import {Selection} from \"./index\";\n\nexport default function(compare) {\n if (!compare) compare = ascending;\n\n function compareNode(a, b) {\n return a && b ? compare(a.__data__, b.__data__) : !a - !b;\n }\n\n for (var groups = this._groups, m = groups.length, sortgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, sortgroup = sortgroups[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n sortgroup[i] = node;\n }\n }\n sortgroup.sort(compareNode);\n }\n\n return new Selection(sortgroups, this._parents).order();\n}\n\nfunction ascending(a, b) {\n return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","import namespace from \"../namespace\";\n\nfunction attrRemove(name) {\n return function() {\n this.removeAttribute(name);\n };\n}\n\nfunction attrRemoveNS(fullname) {\n return function() {\n this.removeAttributeNS(fullname.space, fullname.local);\n };\n}\n\nfunction attrConstant(name, value) {\n return function() {\n this.setAttribute(name, value);\n };\n}\n\nfunction attrConstantNS(fullname, value) {\n return function() {\n this.setAttributeNS(fullname.space, fullname.local, value);\n };\n}\n\nfunction attrFunction(name, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.removeAttribute(name);\n else this.setAttribute(name, v);\n };\n}\n\nfunction attrFunctionNS(fullname, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.removeAttributeNS(fullname.space, fullname.local);\n else this.setAttributeNS(fullname.space, fullname.local, v);\n };\n}\n\nexport default function(name, value) {\n var fullname = namespace(name);\n\n if (arguments.length < 2) {\n var node = this.node();\n return fullname.local\n ? node.getAttributeNS(fullname.space, fullname.local)\n : node.getAttribute(fullname);\n }\n\n return this.each((value == null\n ? (fullname.local ? attrRemoveNS : attrRemove) : (typeof value === \"function\"\n ? (fullname.local ? attrFunctionNS : attrFunction)\n : (fullname.local ? attrConstantNS : attrConstant)))(fullname, value));\n}\n","export default function(node) {\n return (node.ownerDocument && node.ownerDocument.defaultView) // node is a Node\n || (node.document && node) // node is a Window\n || node.defaultView; // node is a Document\n}\n","import defaultView from \"../window\";\n\nfunction styleRemove(name) {\n return function() {\n this.style.removeProperty(name);\n };\n}\n\nfunction styleConstant(name, value, priority) {\n return function() {\n this.style.setProperty(name, value, priority);\n };\n}\n\nfunction styleFunction(name, value, priority) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.style.removeProperty(name);\n else this.style.setProperty(name, v, priority);\n };\n}\n\nexport default function(name, value, priority) {\n return arguments.length > 1\n ? this.each((value == null\n ? styleRemove : typeof value === \"function\"\n ? styleFunction\n : styleConstant)(name, value, priority == null ? \"\" : priority))\n : styleValue(this.node(), name);\n}\n\nexport function styleValue(node, name) {\n return node.style.getPropertyValue(name)\n || defaultView(node).getComputedStyle(node, null).getPropertyValue(name);\n}\n","function classArray(string) {\n return string.trim().split(/^|\\s+/);\n}\n\nfunction classList(node) {\n return node.classList || new ClassList(node);\n}\n\nfunction ClassList(node) {\n this._node = node;\n this._names = classArray(node.getAttribute(\"class\") || \"\");\n}\n\nClassList.prototype = {\n add: function(name) {\n var i = this._names.indexOf(name);\n if (i < 0) {\n this._names.push(name);\n this._node.setAttribute(\"class\", this._names.join(\" \"));\n }\n },\n remove: function(name) {\n var i = this._names.indexOf(name);\n if (i >= 0) {\n this._names.splice(i, 1);\n this._node.setAttribute(\"class\", this._names.join(\" \"));\n }\n },\n contains: function(name) {\n return this._names.indexOf(name) >= 0;\n }\n};\n\nfunction classedAdd(node, names) {\n var list = classList(node), i = -1, n = names.length;\n while (++i < n) list.add(names[i]);\n}\n\nfunction classedRemove(node, names) {\n var list = classList(node), i = -1, n = names.length;\n while (++i < n) list.remove(names[i]);\n}\n\nfunction classedTrue(names) {\n return function() {\n classedAdd(this, names);\n };\n}\n\nfunction classedFalse(names) {\n return function() {\n classedRemove(this, names);\n };\n}\n\nfunction classedFunction(names, value) {\n return function() {\n (value.apply(this, arguments) ? classedAdd : classedRemove)(this, names);\n };\n}\n\nexport default function(name, value) {\n var names = classArray(name + \"\");\n\n if (arguments.length < 2) {\n var list = classList(this.node()), i = -1, n = names.length;\n while (++i < n) if (!list.contains(names[i])) return false;\n return true;\n }\n\n return this.each((typeof value === \"function\"\n ? classedFunction : value\n ? classedTrue\n : classedFalse)(names, value));\n}\n","function textRemove() {\n this.textContent = \"\";\n}\n\nfunction textConstant(value) {\n return function() {\n this.textContent = value;\n };\n}\n\nfunction textFunction(value) {\n return function() {\n var v = value.apply(this, arguments);\n this.textContent = v == null ? \"\" : v;\n };\n}\n\nexport default function(value) {\n return arguments.length\n ? this.each(value == null\n ? textRemove : (typeof value === \"function\"\n ? textFunction\n : textConstant)(value))\n : this.node().textContent;\n}\n","function htmlRemove() {\n this.innerHTML = \"\";\n}\n\nfunction htmlConstant(value) {\n return function() {\n this.innerHTML = value;\n };\n}\n\nfunction htmlFunction(value) {\n return function() {\n var v = value.apply(this, arguments);\n this.innerHTML = v == null ? \"\" : v;\n };\n}\n\nexport default function(value) {\n return arguments.length\n ? this.each(value == null\n ? htmlRemove : (typeof value === \"function\"\n ? htmlFunction\n : htmlConstant)(value))\n : this.node().innerHTML;\n}\n","function raise() {\n if (this.nextSibling) this.parentNode.appendChild(this);\n}\n\nexport default function() {\n return this.each(raise);\n}\n","function lower() {\n if (this.previousSibling) this.parentNode.insertBefore(this, this.parentNode.firstChild);\n}\n\nexport default function() {\n return this.each(lower);\n}\n","import creator from \"../creator\";\nimport selector from \"../selector\";\n\nfunction constantNull() {\n return null;\n}\n\nexport default function(name, before) {\n var create = typeof name === \"function\" ? name : creator(name),\n select = before == null ? constantNull : typeof before === \"function\" ? before : selector(before);\n return this.select(function() {\n return this.insertBefore(create.apply(this, arguments), select.apply(this, arguments) || null);\n });\n}\n","function remove() {\n var parent = this.parentNode;\n if (parent) parent.removeChild(this);\n}\n\nexport default function() {\n return this.each(remove);\n}\n","function selection_cloneShallow() {\n return this.parentNode.insertBefore(this.cloneNode(false), this.nextSibling);\n}\n\nfunction selection_cloneDeep() {\n return this.parentNode.insertBefore(this.cloneNode(true), this.nextSibling);\n}\n\nexport default function(deep) {\n return this.select(deep ? selection_cloneDeep : selection_cloneShallow);\n}\n","var filterEvents = {};\n\nexport var event = null;\n\nif (typeof document !== \"undefined\") {\n var element = document.documentElement;\n if (!(\"onmouseenter\" in element)) {\n filterEvents = {mouseenter: \"mouseover\", mouseleave: \"mouseout\"};\n }\n}\n\nfunction filterContextListener(listener, index, group) {\n listener = contextListener(listener, index, group);\n return function(event) {\n var related = event.relatedTarget;\n if (!related || (related !== this && !(related.compareDocumentPosition(this) & 8))) {\n listener.call(this, event);\n }\n };\n}\n\nfunction contextListener(listener, index, group) {\n return function(event1) {\n var event0 = event; // Events can be reentrant (e.g., focus).\n event = event1;\n try {\n listener.call(this, this.__data__, index, group);\n } finally {\n event = event0;\n }\n };\n}\n\nfunction parseTypenames(typenames) {\n return typenames.trim().split(/^|\\s+/).map(function(t) {\n var name = \"\", i = t.indexOf(\".\");\n if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n return {type: t, name: name};\n });\n}\n\nfunction onRemove(typename) {\n return function() {\n var on = this.__on;\n if (!on) return;\n for (var j = 0, i = -1, m = on.length, o; j < m; ++j) {\n if (o = on[j], (!typename.type || o.type === typename.type) && o.name === typename.name) {\n this.removeEventListener(o.type, o.listener, o.capture);\n } else {\n on[++i] = o;\n }\n }\n if (++i) on.length = i;\n else delete this.__on;\n };\n}\n\nfunction onAdd(typename, value, capture) {\n var wrap = filterEvents.hasOwnProperty(typename.type) ? filterContextListener : contextListener;\n return function(d, i, group) {\n var on = this.__on, o, listener = wrap(value, i, group);\n if (on) for (var j = 0, m = on.length; j < m; ++j) {\n if ((o = on[j]).type === typename.type && o.name === typename.name) {\n this.removeEventListener(o.type, o.listener, o.capture);\n this.addEventListener(o.type, o.listener = listener, o.capture = capture);\n o.value = value;\n return;\n }\n }\n this.addEventListener(typename.type, listener, capture);\n o = {type: typename.type, name: typename.name, value: value, listener: listener, capture: capture};\n if (!on) this.__on = [o];\n else on.push(o);\n };\n}\n\nexport default function(typename, value, capture) {\n var typenames = parseTypenames(typename + \"\"), i, n = typenames.length, t;\n\n if (arguments.length < 2) {\n var on = this.node().__on;\n if (on) for (var j = 0, m = on.length, o; j < m; ++j) {\n for (i = 0, o = on[j]; i < n; ++i) {\n if ((t = typenames[i]).type === o.type && t.name === o.name) {\n return o.value;\n }\n }\n }\n return;\n }\n\n on = value ? onAdd : onRemove;\n if (capture == null) capture = false;\n for (i = 0; i < n; ++i) this.each(on(typenames[i], value, capture));\n return this;\n}\n\nexport function customEvent(event1, listener, that, args) {\n var event0 = event;\n event1.sourceEvent = event;\n event = event1;\n try {\n return listener.apply(that, args);\n } finally {\n event = event0;\n }\n}\n","import defaultView from \"../window\";\n\nfunction dispatchEvent(node, type, params) {\n var window = defaultView(node),\n event = window.CustomEvent;\n\n if (typeof event === \"function\") {\n event = new event(type, params);\n } else {\n event = window.document.createEvent(\"Event\");\n if (params) event.initEvent(type, params.bubbles, params.cancelable), event.detail = params.detail;\n else event.initEvent(type, false, false);\n }\n\n node.dispatchEvent(event);\n}\n\nfunction dispatchConstant(type, params) {\n return function() {\n return dispatchEvent(this, type, params);\n };\n}\n\nfunction dispatchFunction(type, params) {\n return function() {\n return dispatchEvent(this, type, params.apply(this, arguments));\n };\n}\n\nexport default function(type, params) {\n return this.each((typeof params === \"function\"\n ? dispatchFunction\n : dispatchConstant)(type, params));\n}\n","import selection_select from \"./select\";\nimport selection_selectAll from \"./selectAll\";\nimport selection_filter from \"./filter\";\nimport selection_data from \"./data\";\nimport selection_enter from \"./enter\";\nimport selection_exit from \"./exit\";\nimport selection_merge from \"./merge\";\nimport selection_order from \"./order\";\nimport selection_sort from \"./sort\";\nimport selection_call from \"./call\";\nimport selection_nodes from \"./nodes\";\nimport selection_node from \"./node\";\nimport selection_size from \"./size\";\nimport selection_empty from \"./empty\";\nimport selection_each from \"./each\";\nimport selection_attr from \"./attr\";\nimport selection_style from \"./style\";\nimport selection_property from \"./property\";\nimport selection_classed from \"./classed\";\nimport selection_text from \"./text\";\nimport selection_html from \"./html\";\nimport selection_raise from \"./raise\";\nimport selection_lower from \"./lower\";\nimport selection_append from \"./append\";\nimport selection_insert from \"./insert\";\nimport selection_remove from \"./remove\";\nimport selection_clone from \"./clone\";\nimport selection_datum from \"./datum\";\nimport selection_on from \"./on\";\nimport selection_dispatch from \"./dispatch\";\n\nexport var root = [null];\n\nexport function Selection(groups, parents) {\n this._groups = groups;\n this._parents = parents;\n}\n\nfunction selection() {\n return new Selection([[document.documentElement]], root);\n}\n\nSelection.prototype = selection.prototype = {\n constructor: Selection,\n select: selection_select,\n selectAll: selection_selectAll,\n filter: selection_filter,\n data: selection_data,\n enter: selection_enter,\n exit: selection_exit,\n merge: selection_merge,\n order: selection_order,\n sort: selection_sort,\n call: selection_call,\n nodes: selection_nodes,\n node: selection_node,\n size: selection_size,\n empty: selection_empty,\n each: selection_each,\n attr: selection_attr,\n style: selection_style,\n property: selection_property,\n classed: selection_classed,\n text: selection_text,\n html: selection_html,\n raise: selection_raise,\n lower: selection_lower,\n append: selection_append,\n insert: selection_insert,\n remove: selection_remove,\n clone: selection_clone,\n datum: selection_datum,\n on: selection_on,\n dispatch: selection_dispatch\n};\n\nexport default selection;\n","import {Selection} from \"./index\";\nimport selector from \"../selector\";\n\nexport default function(select) {\n if (typeof select !== \"function\") select = selector(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {\n if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {\n if (\"__data__\" in node) subnode.__data__ = node.__data__;\n subgroup[i] = subnode;\n }\n }\n }\n\n return new Selection(subgroups, this._parents);\n}\n","import {Selection} from \"./index\";\nimport selectorAll from \"../selectorAll\";\n\nexport default function(select) {\n if (typeof select !== \"function\") select = selectorAll(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n subgroups.push(select.call(node, node.__data__, i, group));\n parents.push(node);\n }\n }\n }\n\n return new Selection(subgroups, parents);\n}\n","import {Selection} from \"./index\";\nimport matcher from \"../matcher\";\n\nexport default function(match) {\n if (typeof match !== \"function\") match = matcher(match);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {\n if ((node = group[i]) && match.call(node, node.__data__, i, group)) {\n subgroup.push(node);\n }\n }\n }\n\n return new Selection(subgroups, this._parents);\n}\n","import sparse from \"./sparse\";\nimport {Selection} from \"./index\";\n\nexport default function() {\n return new Selection(this._exit || this._groups.map(sparse), this._parents);\n}\n","import {Selection} from \"./index\";\n\nexport default function(selection) {\n\n for (var groups0 = this._groups, groups1 = selection._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {\n for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group0[i] || group1[i]) {\n merge[i] = node;\n }\n }\n }\n\n for (; j < m0; ++j) {\n merges[j] = groups0[j];\n }\n\n return new Selection(merges, this._parents);\n}\n","export default function() {\n\n for (var groups = this._groups, j = -1, m = groups.length; ++j < m;) {\n for (var group = groups[j], i = group.length - 1, next = group[i], node; --i >= 0;) {\n if (node = group[i]) {\n if (next && next !== node.nextSibling) next.parentNode.insertBefore(node, next);\n next = node;\n }\n }\n }\n\n return this;\n}\n","export default function() {\n var callback = arguments[0];\n arguments[0] = this;\n callback.apply(null, arguments);\n return this;\n}\n","export default function() {\n var nodes = new Array(this.size()), i = -1;\n this.each(function() { nodes[++i] = this; });\n return nodes;\n}\n","export default function() {\n\n for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n for (var group = groups[j], i = 0, n = group.length; i < n; ++i) {\n var node = group[i];\n if (node) return node;\n }\n }\n\n return null;\n}\n","export default function() {\n var size = 0;\n this.each(function() { ++size; });\n return size;\n}\n","export default function() {\n return !this.node();\n}\n","export default function(callback) {\n\n for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n for (var group = groups[j], i = 0, n = group.length, node; i < n; ++i) {\n if (node = group[i]) callback.call(node, node.__data__, i, group);\n }\n }\n\n return this;\n}\n","function propertyRemove(name) {\n return function() {\n delete this[name];\n };\n}\n\nfunction propertyConstant(name, value) {\n return function() {\n this[name] = value;\n };\n}\n\nfunction propertyFunction(name, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) delete this[name];\n else this[name] = v;\n };\n}\n\nexport default function(name, value) {\n return arguments.length > 1\n ? this.each((value == null\n ? propertyRemove : typeof value === \"function\"\n ? propertyFunction\n : propertyConstant)(name, value))\n : this.node()[name];\n}\n","import creator from \"../creator\";\n\nexport default function(name) {\n var create = typeof name === \"function\" ? name : creator(name);\n return this.select(function() {\n return this.appendChild(create.apply(this, arguments));\n });\n}\n","export default function(value) {\n return arguments.length\n ? this.property(\"__data__\", value)\n : this.node().__data__;\n}\n","import {Selection, root} from \"./selection/index\";\n\nexport default function(selector) {\n return typeof selector === \"string\"\n ? new Selection([[document.querySelector(selector)]], [document.documentElement])\n : new Selection([[selector]], root);\n}\n","var nextId = 0;\n\nexport default function local() {\n return new Local;\n}\n\nfunction Local() {\n this._ = \"@\" + (++nextId).toString(36);\n}\n\nLocal.prototype = local.prototype = {\n constructor: Local,\n get: function(node) {\n var id = this._;\n while (!(id in node)) if (!(node = node.parentNode)) return;\n return node[id];\n },\n set: function(node, value) {\n return node[this._] = value;\n },\n remove: function(node) {\n return this._ in node && delete node[this._];\n },\n toString: function() {\n return this._;\n }\n};\n","import {event} from \"./selection/on\";\n\nexport default function() {\n var current = event, source;\n while (source = current.sourceEvent) current = source;\n return current;\n}\n","export default function(node, event) {\n var svg = node.ownerSVGElement || node;\n\n if (svg.createSVGPoint) {\n var point = svg.createSVGPoint();\n point.x = event.clientX, point.y = event.clientY;\n point = point.matrixTransform(node.getScreenCTM().inverse());\n return [point.x, point.y];\n }\n\n var rect = node.getBoundingClientRect();\n return [event.clientX - rect.left - node.clientLeft, event.clientY - rect.top - node.clientTop];\n}\n","import sourceEvent from \"./sourceEvent\";\nimport point from \"./point\";\n\nexport default function(node) {\n var event = sourceEvent();\n if (event.changedTouches) event = event.changedTouches[0];\n return point(node, event);\n}\n","import sourceEvent from \"./sourceEvent\";\nimport point from \"./point\";\n\nexport default function(node, touches, identifier) {\n if (arguments.length < 3) identifier = touches, touches = sourceEvent().changedTouches;\n\n for (var i = 0, n = touches ? touches.length : 0, touch; i < n; ++i) {\n if ((touch = touches[i]).identifier === identifier) {\n return point(node, touch);\n }\n }\n\n return null;\n}\n","var noop = {value: function() {}};\n\nfunction dispatch() {\n for (var i = 0, n = arguments.length, _ = {}, t; i < n; ++i) {\n if (!(t = arguments[i] + \"\") || (t in _)) throw new Error(\"illegal type: \" + t);\n _[t] = [];\n }\n return new Dispatch(_);\n}\n\nfunction Dispatch(_) {\n this._ = _;\n}\n\nfunction parseTypenames(typenames, types) {\n return typenames.trim().split(/^|\\s+/).map(function(t) {\n var name = \"\", i = t.indexOf(\".\");\n if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n if (t && !types.hasOwnProperty(t)) throw new Error(\"unknown type: \" + t);\n return {type: t, name: name};\n });\n}\n\nDispatch.prototype = dispatch.prototype = {\n constructor: Dispatch,\n on: function(typename, callback) {\n var _ = this._,\n T = parseTypenames(typename + \"\", _),\n t,\n i = -1,\n n = T.length;\n\n // If no callback was specified, return the callback of the given type and name.\n if (arguments.length < 2) {\n while (++i < n) if ((t = (typename = T[i]).type) && (t = get(_[t], typename.name))) return t;\n return;\n }\n\n // If a type was specified, set the callback for the given type and name.\n // Otherwise, if a null callback was specified, remove callbacks of the given name.\n if (callback != null && typeof callback !== \"function\") throw new Error(\"invalid callback: \" + callback);\n while (++i < n) {\n if (t = (typename = T[i]).type) _[t] = set(_[t], typename.name, callback);\n else if (callback == null) for (t in _) _[t] = set(_[t], typename.name, null);\n }\n\n return this;\n },\n copy: function() {\n var copy = {}, _ = this._;\n for (var t in _) copy[t] = _[t].slice();\n return new Dispatch(copy);\n },\n call: function(type, that) {\n if ((n = arguments.length - 2) > 0) for (var args = new Array(n), i = 0, n, t; i < n; ++i) args[i] = arguments[i + 2];\n if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n for (t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n },\n apply: function(type, that, args) {\n if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n for (var t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n }\n};\n\nfunction get(type, name) {\n for (var i = 0, n = type.length, c; i < n; ++i) {\n if ((c = type[i]).name === name) {\n return c.value;\n }\n }\n}\n\nfunction set(type, name, callback) {\n for (var i = 0, n = type.length; i < n; ++i) {\n if (type[i].name === name) {\n type[i] = noop, type = type.slice(0, i).concat(type.slice(i + 1));\n break;\n }\n }\n if (callback != null) type.push({name: name, value: callback});\n return type;\n}\n\nexport default dispatch;\n","import {event} from \"d3-selection\";\n\nexport function nopropagation() {\n event.stopImmediatePropagation();\n}\n\nexport default function() {\n event.preventDefault();\n event.stopImmediatePropagation();\n}\n","import {select} from \"d3-selection\";\nimport noevent from \"./noevent\";\n\nexport default function(view) {\n var root = view.document.documentElement,\n selection = select(view).on(\"dragstart.drag\", noevent, true);\n if (\"onselectstart\" in root) {\n selection.on(\"selectstart.drag\", noevent, true);\n } else {\n root.__noselect = root.style.MozUserSelect;\n root.style.MozUserSelect = \"none\";\n }\n}\n\nexport function yesdrag(view, noclick) {\n var root = view.document.documentElement,\n selection = select(view).on(\"dragstart.drag\", null);\n if (noclick) {\n selection.on(\"click.drag\", noevent, true);\n setTimeout(function() { selection.on(\"click.drag\", null); }, 0);\n }\n if (\"onselectstart\" in root) {\n selection.on(\"selectstart.drag\", null);\n } else {\n root.style.MozUserSelect = root.__noselect;\n delete root.__noselect;\n }\n}\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","export default function DragEvent(target, type, subject, id, active, x, y, dx, dy, dispatch) {\n this.target = target;\n this.type = type;\n this.subject = subject;\n this.identifier = id;\n this.active = active;\n this.x = x;\n this.y = y;\n this.dx = dx;\n this.dy = dy;\n this._ = dispatch;\n}\n\nDragEvent.prototype.on = function() {\n var value = this._.on.apply(this._, arguments);\n return value === this._ ? this : value;\n};\n","import {dispatch} from \"d3-dispatch\";\nimport {event, customEvent, select, mouse, touch} from \"d3-selection\";\nimport nodrag, {yesdrag} from \"./nodrag\";\nimport noevent, {nopropagation} from \"./noevent\";\nimport constant from \"./constant\";\nimport DragEvent from \"./event\";\n\n// Ignore right-click, since that should open the context menu.\nfunction defaultFilter() {\n return !event.button;\n}\n\nfunction defaultContainer() {\n return this.parentNode;\n}\n\nfunction defaultSubject(d) {\n return d == null ? {x: event.x, y: event.y} : d;\n}\n\nfunction defaultTouchable() {\n return \"ontouchstart\" in this;\n}\n\nexport default function() {\n var filter = defaultFilter,\n container = defaultContainer,\n subject = defaultSubject,\n touchable = defaultTouchable,\n gestures = {},\n listeners = dispatch(\"start\", \"drag\", \"end\"),\n active = 0,\n mousedownx,\n mousedowny,\n mousemoving,\n touchending,\n clickDistance2 = 0;\n\n function drag(selection) {\n selection\n .on(\"mousedown.drag\", mousedowned)\n .filter(touchable)\n .on(\"touchstart.drag\", touchstarted)\n .on(\"touchmove.drag\", touchmoved)\n .on(\"touchend.drag touchcancel.drag\", touchended)\n .style(\"touch-action\", \"none\")\n .style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\");\n }\n\n function mousedowned() {\n if (touchending || !filter.apply(this, arguments)) return;\n var gesture = beforestart(\"mouse\", container.apply(this, arguments), mouse, this, arguments);\n if (!gesture) return;\n select(event.view).on(\"mousemove.drag\", mousemoved, true).on(\"mouseup.drag\", mouseupped, true);\n nodrag(event.view);\n nopropagation();\n mousemoving = false;\n mousedownx = event.clientX;\n mousedowny = event.clientY;\n gesture(\"start\");\n }\n\n function mousemoved() {\n noevent();\n if (!mousemoving) {\n var dx = event.clientX - mousedownx, dy = event.clientY - mousedowny;\n mousemoving = dx * dx + dy * dy > clickDistance2;\n }\n gestures.mouse(\"drag\");\n }\n\n function mouseupped() {\n select(event.view).on(\"mousemove.drag mouseup.drag\", null);\n yesdrag(event.view, mousemoving);\n noevent();\n gestures.mouse(\"end\");\n }\n\n function touchstarted() {\n if (!filter.apply(this, arguments)) return;\n var touches = event.changedTouches,\n c = container.apply(this, arguments),\n n = touches.length, i, gesture;\n\n for (i = 0; i < n; ++i) {\n if (gesture = beforestart(touches[i].identifier, c, touch, this, arguments)) {\n nopropagation();\n gesture(\"start\");\n }\n }\n }\n\n function touchmoved() {\n var touches = event.changedTouches,\n n = touches.length, i, gesture;\n\n for (i = 0; i < n; ++i) {\n if (gesture = gestures[touches[i].identifier]) {\n noevent();\n gesture(\"drag\");\n }\n }\n }\n\n function touchended() {\n var touches = event.changedTouches,\n n = touches.length, i, gesture;\n\n if (touchending) clearTimeout(touchending);\n touchending = setTimeout(function() { touchending = null; }, 500); // Ghost clicks are delayed!\n for (i = 0; i < n; ++i) {\n if (gesture = gestures[touches[i].identifier]) {\n nopropagation();\n gesture(\"end\");\n }\n }\n }\n\n function beforestart(id, container, point, that, args) {\n var p = point(container, id), s, dx, dy,\n sublisteners = listeners.copy();\n\n if (!customEvent(new DragEvent(drag, \"beforestart\", s, id, active, p[0], p[1], 0, 0, sublisteners), function() {\n if ((event.subject = s = subject.apply(that, args)) == null) return false;\n dx = s.x - p[0] || 0;\n dy = s.y - p[1] || 0;\n return true;\n })) return;\n\n return function gesture(type) {\n var p0 = p, n;\n switch (type) {\n case \"start\": gestures[id] = gesture, n = active++; break;\n case \"end\": delete gestures[id], --active; // nobreak\n case \"drag\": p = point(container, id), n = active; break;\n }\n customEvent(new DragEvent(drag, type, s, id, n, p[0] + dx, p[1] + dy, p[0] - p0[0], p[1] - p0[1], sublisteners), sublisteners.apply, sublisteners, [type, that, args]);\n };\n }\n\n drag.filter = function(_) {\n return arguments.length ? (filter = typeof _ === \"function\" ? _ : constant(!!_), drag) : filter;\n };\n\n drag.container = function(_) {\n return arguments.length ? (container = typeof _ === \"function\" ? _ : constant(_), drag) : container;\n };\n\n drag.subject = function(_) {\n return arguments.length ? (subject = typeof _ === \"function\" ? _ : constant(_), drag) : subject;\n };\n\n drag.touchable = function(_) {\n return arguments.length ? (touchable = typeof _ === \"function\" ? _ : constant(!!_), drag) : touchable;\n };\n\n drag.on = function() {\n var value = listeners.on.apply(listeners, arguments);\n return value === listeners ? drag : value;\n };\n\n drag.clickDistance = function(_) {\n return arguments.length ? (clickDistance2 = (_ = +_) * _, drag) : Math.sqrt(clickDistance2);\n };\n\n return drag;\n}\n","var frame = 0, // is an animation frame pending?\n timeout = 0, // is a timeout pending?\n interval = 0, // are any timers active?\n pokeDelay = 1000, // how frequently we check for clock skew\n taskHead,\n taskTail,\n clockLast = 0,\n clockNow = 0,\n clockSkew = 0,\n clock = typeof performance === \"object\" && performance.now ? performance : Date,\n setFrame = typeof window === \"object\" && window.requestAnimationFrame ? window.requestAnimationFrame.bind(window) : function(f) { setTimeout(f, 17); };\n\nexport function now() {\n return clockNow || (setFrame(clearNow), clockNow = clock.now() + clockSkew);\n}\n\nfunction clearNow() {\n clockNow = 0;\n}\n\nexport function Timer() {\n this._call =\n this._time =\n this._next = null;\n}\n\nTimer.prototype = timer.prototype = {\n constructor: Timer,\n restart: function(callback, delay, time) {\n if (typeof callback !== \"function\") throw new TypeError(\"callback is not a function\");\n time = (time == null ? now() : +time) + (delay == null ? 0 : +delay);\n if (!this._next && taskTail !== this) {\n if (taskTail) taskTail._next = this;\n else taskHead = this;\n taskTail = this;\n }\n this._call = callback;\n this._time = time;\n sleep();\n },\n stop: function() {\n if (this._call) {\n this._call = null;\n this._time = Infinity;\n sleep();\n }\n }\n};\n\nexport function timer(callback, delay, time) {\n var t = new Timer;\n t.restart(callback, delay, time);\n return t;\n}\n\nexport function timerFlush() {\n now(); // Get the current time, if not already set.\n ++frame; // Pretend we’ve set an alarm, if we haven’t already.\n var t = taskHead, e;\n while (t) {\n if ((e = clockNow - t._time) >= 0) t._call.call(null, e);\n t = t._next;\n }\n --frame;\n}\n\nfunction wake() {\n clockNow = (clockLast = clock.now()) + clockSkew;\n frame = timeout = 0;\n try {\n timerFlush();\n } finally {\n frame = 0;\n nap();\n clockNow = 0;\n }\n}\n\nfunction poke() {\n var now = clock.now(), delay = now - clockLast;\n if (delay > pokeDelay) clockSkew -= delay, clockLast = now;\n}\n\nfunction nap() {\n var t0, t1 = taskHead, t2, time = Infinity;\n while (t1) {\n if (t1._call) {\n if (time > t1._time) time = t1._time;\n t0 = t1, t1 = t1._next;\n } else {\n t2 = t1._next, t1._next = null;\n t1 = t0 ? t0._next = t2 : taskHead = t2;\n }\n }\n taskTail = t0;\n sleep(time);\n}\n\nfunction sleep(time) {\n if (frame) return; // Soonest alarm already set, or will be.\n if (timeout) timeout = clearTimeout(timeout);\n var delay = time - clockNow; // Strictly less than if we recomputed clockNow.\n if (delay > 24) {\n if (time < Infinity) timeout = setTimeout(wake, time - clock.now() - clockSkew);\n if (interval) interval = clearInterval(interval);\n } else {\n if (!interval) clockLast = clock.now(), interval = setInterval(poke, pokeDelay);\n frame = 1, setFrame(wake);\n }\n}\n","import {Timer} from \"./timer\";\n\nexport default function(callback, delay, time) {\n var t = new Timer;\n delay = delay == null ? 0 : +delay;\n t.restart(function(elapsed) {\n t.stop();\n callback(elapsed + delay);\n }, delay, time);\n return t;\n}\n","import {dispatch} from \"d3-dispatch\";\nimport {timer, timeout} from \"d3-timer\";\n\nvar emptyOn = dispatch(\"start\", \"end\", \"interrupt\");\nvar emptyTween = [];\n\nexport var CREATED = 0;\nexport var SCHEDULED = 1;\nexport var STARTING = 2;\nexport var STARTED = 3;\nexport var RUNNING = 4;\nexport var ENDING = 5;\nexport var ENDED = 6;\n\nexport default function(node, name, id, index, group, timing) {\n var schedules = node.__transition;\n if (!schedules) node.__transition = {};\n else if (id in schedules) return;\n create(node, id, {\n name: name,\n index: index, // For context during callback.\n group: group, // For context during callback.\n on: emptyOn,\n tween: emptyTween,\n time: timing.time,\n delay: timing.delay,\n duration: timing.duration,\n ease: timing.ease,\n timer: null,\n state: CREATED\n });\n}\n\nexport function init(node, id) {\n var schedule = get(node, id);\n if (schedule.state > CREATED) throw new Error(\"too late; already scheduled\");\n return schedule;\n}\n\nexport function set(node, id) {\n var schedule = get(node, id);\n if (schedule.state > STARTING) throw new Error(\"too late; already started\");\n return schedule;\n}\n\nexport function get(node, id) {\n var schedule = node.__transition;\n if (!schedule || !(schedule = schedule[id])) throw new Error(\"transition not found\");\n return schedule;\n}\n\nfunction create(node, id, self) {\n var schedules = node.__transition,\n tween;\n\n // Initialize the self timer when the transition is created.\n // Note the actual delay is not known until the first callback!\n schedules[id] = self;\n self.timer = timer(schedule, 0, self.time);\n\n function schedule(elapsed) {\n self.state = SCHEDULED;\n self.timer.restart(start, self.delay, self.time);\n\n // If the elapsed delay is less than our first sleep, start immediately.\n if (self.delay <= elapsed) start(elapsed - self.delay);\n }\n\n function start(elapsed) {\n var i, j, n, o;\n\n // If the state is not SCHEDULED, then we previously errored on start.\n if (self.state !== SCHEDULED) return stop();\n\n for (i in schedules) {\n o = schedules[i];\n if (o.name !== self.name) continue;\n\n // While this element already has a starting transition during this frame,\n // defer starting an interrupting transition until that transition has a\n // chance to tick (and possibly end); see d3/d3-transition#54!\n if (o.state === STARTED) return timeout(start);\n\n // Interrupt the active transition, if any.\n // Dispatch the interrupt event.\n if (o.state === RUNNING) {\n o.state = ENDED;\n o.timer.stop();\n o.on.call(\"interrupt\", node, node.__data__, o.index, o.group);\n delete schedules[i];\n }\n\n // Cancel any pre-empted transitions. No interrupt event is dispatched\n // because the cancelled transitions never started. Note that this also\n // removes this transition from the pending list!\n else if (+i < id) {\n o.state = ENDED;\n o.timer.stop();\n delete schedules[i];\n }\n }\n\n // Defer the first tick to end of the current frame; see d3/d3#1576.\n // Note the transition may be canceled after start and before the first tick!\n // Note this must be scheduled before the start event; see d3/d3-transition#16!\n // Assuming this is successful, subsequent callbacks go straight to tick.\n timeout(function() {\n if (self.state === STARTED) {\n self.state = RUNNING;\n self.timer.restart(tick, self.delay, self.time);\n tick(elapsed);\n }\n });\n\n // Dispatch the start event.\n // Note this must be done before the tween are initialized.\n self.state = STARTING;\n self.on.call(\"start\", node, node.__data__, self.index, self.group);\n if (self.state !== STARTING) return; // interrupted\n self.state = STARTED;\n\n // Initialize the tween, deleting null tween.\n tween = new Array(n = self.tween.length);\n for (i = 0, j = -1; i < n; ++i) {\n if (o = self.tween[i].value.call(node, node.__data__, self.index, self.group)) {\n tween[++j] = o;\n }\n }\n tween.length = j + 1;\n }\n\n function tick(elapsed) {\n var t = elapsed < self.duration ? self.ease.call(null, elapsed / self.duration) : (self.timer.restart(stop), self.state = ENDING, 1),\n i = -1,\n n = tween.length;\n\n while (++i < n) {\n tween[i].call(null, t);\n }\n\n // Dispatch the end event.\n if (self.state === ENDING) {\n self.on.call(\"end\", node, node.__data__, self.index, self.group);\n stop();\n }\n }\n\n function stop() {\n self.state = ENDED;\n self.timer.stop();\n delete schedules[id];\n for (var i in schedules) return; // eslint-disable-line no-unused-vars\n delete node.__transition;\n }\n}\n","import {get, set} from \"./schedule\";\n\nfunction tweenRemove(id, name) {\n var tween0, tween1;\n return function() {\n var schedule = set(this, id),\n tween = schedule.tween;\n\n // If this node shared tween with the previous node,\n // just assign the updated shared tween and we’re done!\n // Otherwise, copy-on-write.\n if (tween !== tween0) {\n tween1 = tween0 = tween;\n for (var i = 0, n = tween1.length; i < n; ++i) {\n if (tween1[i].name === name) {\n tween1 = tween1.slice();\n tween1.splice(i, 1);\n break;\n }\n }\n }\n\n schedule.tween = tween1;\n };\n}\n\nfunction tweenFunction(id, name, value) {\n var tween0, tween1;\n if (typeof value !== \"function\") throw new Error;\n return function() {\n var schedule = set(this, id),\n tween = schedule.tween;\n\n // If this node shared tween with the previous node,\n // just assign the updated shared tween and we’re done!\n // Otherwise, copy-on-write.\n if (tween !== tween0) {\n tween1 = (tween0 = tween).slice();\n for (var t = {name: name, value: value}, i = 0, n = tween1.length; i < n; ++i) {\n if (tween1[i].name === name) {\n tween1[i] = t;\n break;\n }\n }\n if (i === n) tween1.push(t);\n }\n\n schedule.tween = tween1;\n };\n}\n\nexport default function(name, value) {\n var id = this._id;\n\n name += \"\";\n\n if (arguments.length < 2) {\n var tween = get(this.node(), id).tween;\n for (var i = 0, n = tween.length, t; i < n; ++i) {\n if ((t = tween[i]).name === name) {\n return t.value;\n }\n }\n return null;\n }\n\n return this.each((value == null ? tweenRemove : tweenFunction)(id, name, value));\n}\n\nexport function tweenValue(transition, name, value) {\n var id = transition._id;\n\n transition.each(function() {\n var schedule = set(this, id);\n (schedule.value || (schedule.value = {}))[name] = value.apply(this, arguments);\n });\n\n return function(node) {\n return get(node, id).value[name];\n };\n}\n","import {color} from \"d3-color\";\nimport {interpolateNumber, interpolateRgb, interpolateString} from \"d3-interpolate\";\n\nexport default function(a, b) {\n var c;\n return (typeof b === \"number\" ? interpolateNumber\n : b instanceof color ? interpolateRgb\n : (c = color(b)) ? (b = c, interpolateRgb)\n : interpolateString)(a, b);\n}\n","function removeFunction(id) {\n return function() {\n var parent = this.parentNode;\n for (var i in this.__transition) if (+i !== id) return;\n if (parent) parent.removeChild(this);\n };\n}\n\nexport default function() {\n return this.on(\"end.remove\", removeFunction(this._id));\n}\n","import {selection} from \"d3-selection\";\n\nvar Selection = selection.prototype.constructor;\n\nexport default function() {\n return new Selection(this._groups, this._parents);\n}\n","import {tweenValue} from \"./tween\";\n\nfunction textConstant(value) {\n return function() {\n this.textContent = value;\n };\n}\n\nfunction textFunction(value) {\n return function() {\n var value1 = value(this);\n this.textContent = value1 == null ? \"\" : value1;\n };\n}\n\nexport default function(value) {\n return this.tween(\"text\", typeof value === \"function\"\n ? textFunction(tweenValue(this, \"text\", value))\n : textConstant(value == null ? \"\" : value + \"\"));\n}\n","import {selection} from \"d3-selection\";\nimport transition_attr from \"./attr\";\nimport transition_attrTween from \"./attrTween\";\nimport transition_delay from \"./delay\";\nimport transition_duration from \"./duration\";\nimport transition_ease from \"./ease\";\nimport transition_filter from \"./filter\";\nimport transition_merge from \"./merge\";\nimport transition_on from \"./on\";\nimport transition_remove from \"./remove\";\nimport transition_select from \"./select\";\nimport transition_selectAll from \"./selectAll\";\nimport transition_selection from \"./selection\";\nimport transition_style from \"./style\";\nimport transition_styleTween from \"./styleTween\";\nimport transition_text from \"./text\";\nimport transition_transition from \"./transition\";\nimport transition_tween from \"./tween\";\n\nvar id = 0;\n\nexport function Transition(groups, parents, name, id) {\n this._groups = groups;\n this._parents = parents;\n this._name = name;\n this._id = id;\n}\n\nexport default function transition(name) {\n return selection().transition(name);\n}\n\nexport function newId() {\n return ++id;\n}\n\nvar selection_prototype = selection.prototype;\n\nTransition.prototype = transition.prototype = {\n constructor: Transition,\n select: transition_select,\n selectAll: transition_selectAll,\n filter: transition_filter,\n merge: transition_merge,\n selection: transition_selection,\n transition: transition_transition,\n call: selection_prototype.call,\n nodes: selection_prototype.nodes,\n node: selection_prototype.node,\n size: selection_prototype.size,\n empty: selection_prototype.empty,\n each: selection_prototype.each,\n on: transition_on,\n attr: transition_attr,\n attrTween: transition_attrTween,\n style: transition_style,\n styleTween: transition_styleTween,\n text: transition_text,\n remove: transition_remove,\n tween: transition_tween,\n delay: transition_delay,\n duration: transition_duration,\n ease: transition_ease\n};\n","import {selector} from \"d3-selection\";\nimport {Transition} from \"./index\";\nimport schedule, {get} from \"./schedule\";\n\nexport default function(select) {\n var name = this._name,\n id = this._id;\n\n if (typeof select !== \"function\") select = selector(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {\n if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {\n if (\"__data__\" in node) subnode.__data__ = node.__data__;\n subgroup[i] = subnode;\n schedule(subgroup[i], name, id, i, subgroup, get(node, id));\n }\n }\n }\n\n return new Transition(subgroups, this._parents, name, id);\n}\n","import {selectorAll} from \"d3-selection\";\nimport {Transition} from \"./index\";\nimport schedule, {get} from \"./schedule\";\n\nexport default function(select) {\n var name = this._name,\n id = this._id;\n\n if (typeof select !== \"function\") select = selectorAll(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n for (var children = select.call(node, node.__data__, i, group), child, inherit = get(node, id), k = 0, l = children.length; k < l; ++k) {\n if (child = children[k]) {\n schedule(child, name, id, k, children, inherit);\n }\n }\n subgroups.push(children);\n parents.push(node);\n }\n }\n }\n\n return new Transition(subgroups, parents, name, id);\n}\n","import {matcher} from \"d3-selection\";\nimport {Transition} from \"./index\";\n\nexport default function(match) {\n if (typeof match !== \"function\") match = matcher(match);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {\n if ((node = group[i]) && match.call(node, node.__data__, i, group)) {\n subgroup.push(node);\n }\n }\n }\n\n return new Transition(subgroups, this._parents, this._name, this._id);\n}\n","import {Transition} from \"./index\";\n\nexport default function(transition) {\n if (transition._id !== this._id) throw new Error;\n\n for (var groups0 = this._groups, groups1 = transition._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {\n for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group0[i] || group1[i]) {\n merge[i] = node;\n }\n }\n }\n\n for (; j < m0; ++j) {\n merges[j] = groups0[j];\n }\n\n return new Transition(merges, this._parents, this._name, this._id);\n}\n","import {Transition, newId} from \"./index\";\nimport schedule, {get} from \"./schedule\";\n\nexport default function() {\n var name = this._name,\n id0 = this._id,\n id1 = newId();\n\n for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n var inherit = get(node, id0);\n schedule(node, name, id1, i, group, {\n time: inherit.time + inherit.delay + inherit.duration,\n delay: 0,\n duration: inherit.duration,\n ease: inherit.ease\n });\n }\n }\n }\n\n return new Transition(groups, this._parents, name, id1);\n}\n","import {get, set, init} from \"./schedule\";\n\nfunction start(name) {\n return (name + \"\").trim().split(/^|\\s+/).every(function(t) {\n var i = t.indexOf(\".\");\n if (i >= 0) t = t.slice(0, i);\n return !t || t === \"start\";\n });\n}\n\nfunction onFunction(id, name, listener) {\n var on0, on1, sit = start(name) ? init : set;\n return function() {\n var schedule = sit(this, id),\n on = schedule.on;\n\n // If this node shared a dispatch with the previous node,\n // just assign the updated shared dispatch and we’re done!\n // Otherwise, copy-on-write.\n if (on !== on0) (on1 = (on0 = on).copy()).on(name, listener);\n\n schedule.on = on1;\n };\n}\n\nexport default function(name, listener) {\n var id = this._id;\n\n return arguments.length < 2\n ? get(this.node(), id).on.on(name)\n : this.each(onFunction(id, name, listener));\n}\n","import {interpolateTransformSvg as interpolateTransform} from \"d3-interpolate\";\nimport {namespace} from \"d3-selection\";\nimport {tweenValue} from \"./tween\";\nimport interpolate from \"./interpolate\";\n\nfunction attrRemove(name) {\n return function() {\n this.removeAttribute(name);\n };\n}\n\nfunction attrRemoveNS(fullname) {\n return function() {\n this.removeAttributeNS(fullname.space, fullname.local);\n };\n}\n\nfunction attrConstant(name, interpolate, value1) {\n var value00,\n interpolate0;\n return function() {\n var value0 = this.getAttribute(name);\n return value0 === value1 ? null\n : value0 === value00 ? interpolate0\n : interpolate0 = interpolate(value00 = value0, value1);\n };\n}\n\nfunction attrConstantNS(fullname, interpolate, value1) {\n var value00,\n interpolate0;\n return function() {\n var value0 = this.getAttributeNS(fullname.space, fullname.local);\n return value0 === value1 ? null\n : value0 === value00 ? interpolate0\n : interpolate0 = interpolate(value00 = value0, value1);\n };\n}\n\nfunction attrFunction(name, interpolate, value) {\n var value00,\n value10,\n interpolate0;\n return function() {\n var value0, value1 = value(this);\n if (value1 == null) return void this.removeAttribute(name);\n value0 = this.getAttribute(name);\n return value0 === value1 ? null\n : value0 === value00 && value1 === value10 ? interpolate0\n : interpolate0 = interpolate(value00 = value0, value10 = value1);\n };\n}\n\nfunction attrFunctionNS(fullname, interpolate, value) {\n var value00,\n value10,\n interpolate0;\n return function() {\n var value0, value1 = value(this);\n if (value1 == null) return void this.removeAttributeNS(fullname.space, fullname.local);\n value0 = this.getAttributeNS(fullname.space, fullname.local);\n return value0 === value1 ? null\n : value0 === value00 && value1 === value10 ? interpolate0\n : interpolate0 = interpolate(value00 = value0, value10 = value1);\n };\n}\n\nexport default function(name, value) {\n var fullname = namespace(name), i = fullname === \"transform\" ? interpolateTransform : interpolate;\n return this.attrTween(name, typeof value === \"function\"\n ? (fullname.local ? attrFunctionNS : attrFunction)(fullname, i, tweenValue(this, \"attr.\" + name, value))\n : value == null ? (fullname.local ? attrRemoveNS : attrRemove)(fullname)\n : (fullname.local ? attrConstantNS : attrConstant)(fullname, i, value + \"\"));\n}\n","import {namespace} from \"d3-selection\";\n\nfunction attrTweenNS(fullname, value) {\n function tween() {\n var node = this, i = value.apply(node, arguments);\n return i && function(t) {\n node.setAttributeNS(fullname.space, fullname.local, i(t));\n };\n }\n tween._value = value;\n return tween;\n}\n\nfunction attrTween(name, value) {\n function tween() {\n var node = this, i = value.apply(node, arguments);\n return i && function(t) {\n node.setAttribute(name, i(t));\n };\n }\n tween._value = value;\n return tween;\n}\n\nexport default function(name, value) {\n var key = \"attr.\" + name;\n if (arguments.length < 2) return (key = this.tween(key)) && key._value;\n if (value == null) return this.tween(key, null);\n if (typeof value !== \"function\") throw new Error;\n var fullname = namespace(name);\n return this.tween(key, (fullname.local ? attrTweenNS : attrTween)(fullname, value));\n}\n","import {interpolateTransformCss as interpolateTransform} from \"d3-interpolate\";\nimport {style} from \"d3-selection\";\nimport {tweenValue} from \"./tween\";\nimport interpolate from \"./interpolate\";\n\nfunction styleRemove(name, interpolate) {\n var value00,\n value10,\n interpolate0;\n return function() {\n var value0 = style(this, name),\n value1 = (this.style.removeProperty(name), style(this, name));\n return value0 === value1 ? null\n : value0 === value00 && value1 === value10 ? interpolate0\n : interpolate0 = interpolate(value00 = value0, value10 = value1);\n };\n}\n\nfunction styleRemoveEnd(name) {\n return function() {\n this.style.removeProperty(name);\n };\n}\n\nfunction styleConstant(name, interpolate, value1) {\n var value00,\n interpolate0;\n return function() {\n var value0 = style(this, name);\n return value0 === value1 ? null\n : value0 === value00 ? interpolate0\n : interpolate0 = interpolate(value00 = value0, value1);\n };\n}\n\nfunction styleFunction(name, interpolate, value) {\n var value00,\n value10,\n interpolate0;\n return function() {\n var value0 = style(this, name),\n value1 = value(this);\n if (value1 == null) value1 = (this.style.removeProperty(name), style(this, name));\n return value0 === value1 ? null\n : value0 === value00 && value1 === value10 ? interpolate0\n : interpolate0 = interpolate(value00 = value0, value10 = value1);\n };\n}\n\nexport default function(name, value, priority) {\n var i = (name += \"\") === \"transform\" ? interpolateTransform : interpolate;\n return value == null ? this\n .styleTween(name, styleRemove(name, i))\n .on(\"end.style.\" + name, styleRemoveEnd(name))\n : this.styleTween(name, typeof value === \"function\"\n ? styleFunction(name, i, tweenValue(this, \"style.\" + name, value))\n : styleConstant(name, i, value + \"\"), priority);\n}\n","function styleTween(name, value, priority) {\n function tween() {\n var node = this, i = value.apply(node, arguments);\n return i && function(t) {\n node.style.setProperty(name, i(t), priority);\n };\n }\n tween._value = value;\n return tween;\n}\n\nexport default function(name, value, priority) {\n var key = \"style.\" + (name += \"\");\n if (arguments.length < 2) return (key = this.tween(key)) && key._value;\n if (value == null) return this.tween(key, null);\n if (typeof value !== \"function\") throw new Error;\n return this.tween(key, styleTween(name, value, priority == null ? \"\" : priority));\n}\n","import {get, init} from \"./schedule\";\n\nfunction delayFunction(id, value) {\n return function() {\n init(this, id).delay = +value.apply(this, arguments);\n };\n}\n\nfunction delayConstant(id, value) {\n return value = +value, function() {\n init(this, id).delay = value;\n };\n}\n\nexport default function(value) {\n var id = this._id;\n\n return arguments.length\n ? this.each((typeof value === \"function\"\n ? delayFunction\n : delayConstant)(id, value))\n : get(this.node(), id).delay;\n}\n","import {get, set} from \"./schedule\";\n\nfunction durationFunction(id, value) {\n return function() {\n set(this, id).duration = +value.apply(this, arguments);\n };\n}\n\nfunction durationConstant(id, value) {\n return value = +value, function() {\n set(this, id).duration = value;\n };\n}\n\nexport default function(value) {\n var id = this._id;\n\n return arguments.length\n ? this.each((typeof value === \"function\"\n ? durationFunction\n : durationConstant)(id, value))\n : get(this.node(), id).duration;\n}\n","import {get, set} from \"./schedule\";\n\nfunction easeConstant(id, value) {\n if (typeof value !== \"function\") throw new Error;\n return function() {\n set(this, id).ease = value;\n };\n}\n\nexport default function(value) {\n var id = this._id;\n\n return arguments.length\n ? this.each(easeConstant(id, value))\n : get(this.node(), id).ease;\n}\n","import {Transition, newId} from \"../transition/index\";\nimport schedule from \"../transition/schedule\";\nimport {easeCubicInOut} from \"d3-ease\";\nimport {now} from \"d3-timer\";\n\nvar defaultTiming = {\n time: null, // Set on use.\n delay: 0,\n duration: 250,\n ease: easeCubicInOut\n};\n\nfunction inherit(node, id) {\n var timing;\n while (!(timing = node.__transition) || !(timing = timing[id])) {\n if (!(node = node.parentNode)) {\n return defaultTiming.time = now(), defaultTiming;\n }\n }\n return timing;\n}\n\nexport default function(name) {\n var id,\n timing;\n\n if (name instanceof Transition) {\n id = name._id, name = name._name;\n } else {\n id = newId(), (timing = defaultTiming).time = now(), name = name == null ? null : name + \"\";\n }\n\n for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n schedule(node, name, id, i, group, timing || inherit(node, id));\n }\n }\n }\n\n return new Transition(groups, this._parents, name, id);\n}\n","import {selection} from \"d3-selection\";\nimport selection_interrupt from \"./interrupt\";\nimport selection_transition from \"./transition\";\n\nselection.prototype.interrupt = selection_interrupt;\nselection.prototype.transition = selection_transition;\n","import interrupt from \"../interrupt\";\n\nexport default function(name) {\n return this.each(function() {\n interrupt(this, name);\n });\n}\n","import {STARTING, ENDING, ENDED} from \"./transition/schedule\";\n\nexport default function(node, name) {\n var schedules = node.__transition,\n schedule,\n active,\n empty = true,\n i;\n\n if (!schedules) return;\n\n name = name == null ? null : name + \"\";\n\n for (i in schedules) {\n if ((schedule = schedules[i]).name !== name) { empty = false; continue; }\n active = schedule.state > STARTING && schedule.state < ENDING;\n schedule.state = ENDED;\n schedule.timer.stop();\n if (active) schedule.on.call(\"interrupt\", node, node.__data__, schedule.index, schedule.group);\n delete schedules[i];\n }\n\n if (empty) delete node.__transition;\n}\n","import {Transition} from \"./transition/index\";\nimport {SCHEDULED} from \"./transition/schedule\";\n\nvar root = [null];\n\nexport default function(node, name) {\n var schedules = node.__transition,\n schedule,\n i;\n\n if (schedules) {\n name = name == null ? null : name + \"\";\n for (i in schedules) {\n if ((schedule = schedules[i]).state > SCHEDULED && schedule.name === name) {\n return new Transition([[node]], root, name, +i);\n }\n }\n }\n\n return null;\n}\n","import { select, event as d3event, selection, clientPoint } from 'd3-selection';\nimport { drag as d3drag } from 'd3-drag';\nimport 'd3-transition';\nimport { mergeRecursive } from './common-utils';\n/**\n * This function takes a raw DOM element or\n * a string and returns a d3 selection of that element.\n *\n * @param {HTMLElement | string} element The element to wrap in d3 selection.\n * @return {Selection} Instance of d3 selection.\n */\nconst selectElement = element => select(element);\n\n/**\n * It creates a new d3 element on the parent element\n * @param {Selection} parent Element to which the element is to be appended\n * @param {Object} elemType Type of the new element\n * @param {Array} data Data for the new element\n * @param {Object} selector classname/id/tagname for the element\n * @return {HTMLElement} Newly Created Element\n */\nconst makeElement = (parent, elemType, data, selector, callbacks = {}, keyFn) => {\n if ((parent instanceof HTMLElement || parent instanceof SVGElement)) {\n parent = selectElement(parent);\n }\n\n const selectorVal = selector ? selector[0] : null;\n let selectorType = null;\n let actualSelector = null;\n let element = null;\n let enterSel = null;\n let mergeSel = null;\n let filter;\n if (selectorVal) {\n if (selectorVal === '#') {\n selectorType = 'id';\n actualSelector = selector;\n } else {\n selectorType = 'class';\n actualSelector = selector[0] === '.' ? selector : `.${selector}`;\n }\n } else {\n actualSelector = elemType;\n filter = true;\n }\n element = parent.selectAll(actualSelector);\n\n filter && (element = element.filter(function () {\n return this.parentNode === parent.node();\n }));\n element = element.data(data, keyFn);\n\n enterSel = element.enter()\n .append(elemType || 'div');\n callbacks.enter && enterSel.each(function (...params) {\n callbacks.enter(selectElement(this), ...params);\n });\n\n mergeSel = enterSel.merge(element);\n callbacks.update && mergeSel.each(function (...params) {\n callbacks.update(selectElement(this), ...params);\n });\n if (selectorType === 'class') {\n mergeSel.classed(selectorVal === '.' ? selector.substring(1, selector.length) : selector, true);\n } else if (selectorType === 'id') {\n mergeSel.attr('id', selector.substring(1, selector.length));\n }\n const exitSel = element.exit();\n\n if (callbacks.exit) {\n exitSel.each(function (...params) {\n callbacks.exit(selectElement(this), ...params);\n });\n } else {\n exitSel.remove();\n }\n return mergeSel;\n};\n\n/**\n * This function applies styles to an element\n * @param {Object} elem Element Selection\n * @param {Object} styleObj Style Object to be applied\n * @return {Element} Newly Created Element\n*/\nconst applyStyle = (elem, styleObj) => {\n Object.entries(styleObj).forEach((d) => {\n elem.style(d[0], d[1]);\n }, this);\n return elem;\n};\n\n/**\n * This function appends a dom element in another element.\n * @param {HTMLElement | SVGElement} element1 The element in which to append the second element\n * @param {HTMLElement | SVGElement} element2 The element which will be appended.\n */\nconst appendElement = (element1, element2) => {\n element1.appendChild(element2);\n};\n\n/**\n * Sets the attributes to the element.\n * @param {HTMLElement | SVGElement} element Element on which attributes will be applied\n * @param {Object} attrs Attributes which need to be applied\n */\nconst setElementAttrs = (element, attrs) => {\n for (const key in attrs) {\n if ({}.hasOwnProperty.call(attrs, key)) {\n element.attr(key, attrs[key]);\n }\n }\n};\n\n/**\n * Sets attributes in the svg or html element\n * @param {SVGElement | HTMLElement} element The element on which attrs will be applied\n * @param {Array.} attrs Array of attributes\n * @param {string} className className of elements to select.\n * @return {SVGElement | HTMLElement} SVGElement or html element.\n */\nconst setAttrs = (element, attrs, className) => {\n if (!(element instanceof selection)) {\n element = selectElement(element);\n }\n className !== undefined ? element.selectAll(`.${className}`).each(function () {\n setElementAttrs(select(this), attrs);\n }) : setElementAttrs(element, attrs);\n return element;\n};\n\n/**\n * Adds a css class to elements which passes the filter function.If filter function is not given,\n * then all elements will be applied the class.\n * @param {HTMLElement | SVGElement} element element\n * @param {string} className css class\n * @param {string} selector css selector\n * @param {Function} filterFn filter method.\n */\nconst addClass = (element, className, selector, filterFn) => {\n select(element).selectAll(selector).each(function (data) {\n const elem = select(this);\n filterFn ? filterFn(data) && elem.classed(className, true) :\n elem.classed(className, true);\n });\n};\n\n/**\n * Removes the css class from elements which passes the filter function.If filter function is not given,\n * then all elements will be applied the class.\n * @param {HTMLElement | SVGElement} element element\n * @param {string} className css class\n * @param {string} selector css selector\n * @param {Function} filterFn filter method.\n */\nconst removeClass = (element, className, selector, filterFn) => {\n select(element).selectAll(selector).each(function (data) {\n const elem = select(this);\n filterFn ? filterFn(data) && elem.classed(className, false) :\n elem.classed(className, false);\n });\n};\n\n/**\n * Sets styles in the svg or html element\n * @param {SVGElement | HTMLElement} element The element on which styles will be applied\n * @param {Array.} styles Array of style attributes\n * @return {SVGElement | HTMLElement} SVGElement or html element.\n */\nconst setStyles = (element, styles) => {\n if (!(element instanceof selection)) {\n element = selectElement(element);\n }\n for (const key in styles) {\n if ({}.hasOwnProperty.call(styles, key)) {\n element.style(key, styles[key]);\n }\n }\n return element;\n};\n\n/**\n * Creates svg or html elements by binding data to the selection.Removes extra elements\n * on exit.\n * @param {Object} params Parameter object\n * @param {SVGElement | HTMLElement} params.container Container element where all elements will be appended\n * @param {string} params.selector Selector by which elements will be selected from dom\n * @param {string} params.append Append tag\n * @param {Function} params.each Function which will be executed for each data point and element.\n */\nconst createElements = (params) => {\n const container = select(params.container);\n let data;\n let sel;\n\n data = params.data;\n if (typeof data === 'number') {\n data = Array(data).fill().map((d, i) => i);\n }\n sel = container.selectAll(params.selector).data(data);\n\n sel = container.selectAll(params.selector).filter(function () {\n return this.parentNode === container.node();\n }).data(params.data);\n\n const selectionMerge = sel.enter().append(params.append).merge(sel).each(function (d, i) {\n params.each(d, select(this), i);\n });\n\n selectionMerge.attr('class', params.className || '');\n sel.exit().remove();\n};\n\n/**\n * Clips an element with given measurement. Basically it is used to hide overflowing portions\n * of any element.\n * @param {SVGElement} container svg element which needs to be clipped.\n * @param {Object} measurement Dimensions of the clipped rectangle.\n * @param {string} id Unique id of the clip element\n */\nconst clipElement = (container, measurement, id) => {\n const clipPathElement = makeElement(select(container), 'clipPath', [1], `#${id}`);\n const clipPathRect = makeElement(clipPathElement, 'rect', [1]);\n clipPathRect.attr('x', measurement.x)\n .attr('y', measurement.x)\n .attr('width', measurement.width)\n .attr('height', measurement.height);\n clipPathElement.attr('clip-path', `url(#${id})`);\n};\n\n/**\n * Returns the element of the corresponding classname.\n * @param {HTMLElement | SVGElement} node html or svg node element.\n * @param {string} className css class to be applied.\n * @return {HTMLElement | SVGElement} html or svg element.\n */\nconst getElementsByClassName = (node, className) => select(node).selectAll(className).nodes();\n\n/**\n * Gets the mouse position relative to an svg type of element\n * @param {SVGElement} element Any svg element like rect, circle, etc.\n * @param {Event} event Event object.\n * @return {Object} x and y position relative to the container element passed.\n */\nconst getMousePos = (element, event) => {\n const boundingClientRect = element.getBoundingClientRect();\n return {\n x: event.x - boundingClientRect.x,\n y: event.y - boundingClientRect.y\n };\n};\n\nconst getClientPoint = (...params) => {\n const pos = clientPoint(...params);\n return {\n x: pos[0],\n y: pos[1]\n };\n};\n\n/** This function appends a dom element in another element.\n * @param {Object} tag The tag name of the element to append\n * @param {Object} mount Mount point fo the element\n * @return {Object} selection of the appended element\n */\nconst createElement = (tag, mount) => select(mount).append(tag).node();\n\n/**\n * Gets the d3 event function\n * @return {Object} d3 event\n */\nconst getEvent = () => d3event;\n\n/**\n * Gets the d3 drag function\n * @return {Object} d3 drag\n */\nconst getD3Drag = () => d3drag;\n\nconst getSmartComputedStyle = (group, css) => {\n let textEl;\n const testText = 'W';\n const mandatoryStyle = {\n 'fill-opacity': 0\n };\n const className = typeof css === 'string' ? css : (css instanceof Array ? css.join(' ') : undefined);\n\n if (group.node() instanceof HTMLElement) {\n textEl = group.append('div').html(testText);\n } else {\n textEl = group.append('text').text(testText);\n }\n\n if (className) {\n textEl.attr('class', className);\n } else if (typeof css === 'object') {\n delete css['fill-opacity'];\n mergeRecursive(mandatoryStyle, css);\n }\n\n textEl.style(mandatoryStyle);\n\n const computedStyle = window.getComputedStyle(textEl.node());\n const styleForSmartLabel = {\n fontSize: computedStyle.fontSize,\n fontFamily: computedStyle.fontFamily,\n fontWeight: computedStyle.fontWeight,\n fontStyle: computedStyle.fontStyle\n };\n\n textEl.remove();\n\n return styleForSmartLabel;\n};\n\nconst hasTouch = () => 'ontouchstart' in document.documentElement;\n\nexport {\n hasTouch,\n selectElement,\n makeElement,\n applyStyle,\n addClass,\n removeClass,\n appendElement,\n setAttrs,\n setStyles,\n createElement,\n createElements,\n clipElement,\n getElementsByClassName,\n getMousePos,\n getEvent,\n getD3Drag,\n getSmartComputedStyle,\n getClientPoint\n};\n","/**\n * This class represents a selection applied on a data array.\n *\n * @class Selection\n */\nclass Selection {\n /**\n * Creates an instance of Selection.\n * @param {Array} data Array of DataObjects.\n * @memberof Selection\n */\n constructor () {\n this._data = [];\n // // map of id to data\n this._idMap = {};\n\n this._mode = '';\n // data.forEach((item, idx) => {\n // const index = item.id || idx;\n // this._idMap[index] = item;\n // });\n // // array to store data in enter phase\n this._enterdata = [];\n // // array to store data in exit phase\n this._exitdata = [];\n }\n /**\n * Gets the object bound to a class\n *\n * @return {Object} current data set bound to the class\n * @memberof Selection\n */\n getObjects () {\n return Object.keys(this._idMap).map(e => this._idMap[e]);\n }\n\n /**\n * This method is used to supply seed data to a selection.\n *\n * @param {Array} newData Seed data to create the enter selection.\n * @param {Functon | undefined } idGetter This function is used to uniqely identify a data entry.\n * @return {Selection} Modified selection.\n * @memberof Selection\n */\n data (newData, idGetter) {\n if (idGetter) {\n this._data = [];\n this._idGetter = idGetter;\n const tempMap = {};\n\n newData.forEach((...params) => {\n const index = idGetter(...params);\n tempMap[index] = params[0];\n });\n // check if any data items have been removed\n const purgedIds = [];\n\n Object.keys(this._idMap).forEach((id) => {\n if (!tempMap[id]) {\n purgedIds.push(id);\n }\n });\n\n Object.keys(tempMap).forEach((id) => {\n if (!this._idMap[id]) {\n this._enterdata.push(tempMap[id]);\n } else {\n this._idMap[id] = tempMap[id];\n this._data.push(tempMap[id]);\n }\n });\n // move the purged items to exit selection\n purgedIds.forEach((id) => {\n const purged = this._idMap[id];\n this._exitdata.push(purged);\n // this._data = this._data.slice(id, 1);\n delete this._idMap[id];\n });\n // this._data = this._data.slice(temp, this._data.length);\n\n return this;\n }\n // no id getter supplied so use indices\n if (newData.length > this._data.length) {\n const startIdx = this._data.length;\n for (let i = startIdx; i < newData.length; i += 1) {\n this._enterdata.push(newData[i]);\n }\n } else {\n // push to exit selection\n const temp = newData.length;\n for (let i = temp; i < this._data.length; i += 1) {\n const purged = this._data[i];\n delete this._idMap[purged.id];\n this._exitdata.push(purged);\n }\n this._data = this._data.slice(temp, this._data.length);\n }\n return this;\n }\n\n /**\n * Applies the supplied callback to each data element\n * and returns a new selection.\n *\n * @param {Function} callback Callback to execute on each item.\n * @return {Selection} New selection with data created using callback.\n * @memberof EnterSelection\n */\n append (callback) {\n this[`_${this._mode}data`].forEach((...params) => {\n const data = params[0];\n const id = this._idGetter ? this._idGetter(...params) : (data.id || params[1]);\n this._idMap[id] = callback(...params);\n });\n this._mode = '';\n return this;\n }\n\n /**\n * This method returns an enter selection that\n * allows or update operations.\n *\n * @return {EnterSelection} Instance of enter selection.\n * @memberof Selection\n */\n enter () {\n this._mode = 'enter';\n return this;\n // return new EnterSelection(this._enterdata, this._idMap, this._idGetter);\n }\n\n /**\n * This method is used to set key value pairs\n * on data objects.\n *\n * @param {string} key Name of property.\n * @param {any} value Value of property.\n * @return {Selection} Modified selection.\n * @memberof Selection\n */\n attr (key, value) {\n this._data.forEach(item => item.attr(key, value));\n return this;\n }\n\n /**\n * This method merges the data of one selection with another.\n *\n * @param {Selection} selection Instance of selection.\n * @return {Selection} Modified selection.\n * @memberof Selection\n */\n merge (selection) {\n selection._data.forEach((...params) => {\n const id = this._idGetter ? this._idGetter(...params) : (params[0].id || params[1]);\n this._idMap[id] = params[0];\n this._data.push(params[0]);\n });\n // reset enter selection\n this._enterdata = [];\n return this;\n }\n\n /**\n * Returns a selection with exit data.\n *\n * @return {Selection} Instance of selection.\n * @memberof Selection\n */\n exit () {\n this._mode = 'exit';\n // const exitdata = this._exitdata;\n // const exitSelection = new Selection(exitdata);\n // this._exitdata = [];\n return this;\n }\n\n each (fn) {\n Object.keys(this._idMap).forEach((e) => {\n fn(this._idMap[e]);\n });\n return this;\n }\n\n map (fn) {\n Object.keys(this._idMap).forEach((...params) => {\n this._idMap[params[0]] = fn(this._idMap[params[0]], ...params);\n });\n return this;\n }\n\n /**\n * Executes the cleanup operation associated with data objets.\n *\n * @memberof Selection\n */\n remove () {\n // do cleanup on DDO's\n const data = this[`_${this._mode}data`];\n\n data.forEach(item => item.remove());\n if (this._mode === '') {\n this.each(e => e.remove());\n }\n this[`_${this._mode}data`] = [];\n this._mode = '';\n }\n}\n\nexport default Selection;\n","import { getUniqueId } from '../index';\n/**\n * Represents the base class that all objects that form\n * the data for a selection must inherit from.\n *\n * @class DataObject\n */\nclass DataObject {\n/**\n * Creates an instance of DataObject.\n * @memberof DataObject\n */\n constructor () {\n this._id = getUniqueId();\n }\n /**\n * Returns the id.\n *\n * @readonly\n * @memberof DataObject\n */\n get id () {\n return this._id;\n }\n\n /**\n * Sets the value corresponding to supplied key.\n *\n * @param {string} key The property name.\n * @param {any} value Value associated with prop.\n * @memberof DataObject\n */\n attr (key, value) {\n this[key] = value;\n }\n\n /**\n * Clean up code to be executed by each object.\n *\n * @override\n * @memberof DataObject\n */\n remove () {\n // cleanup\n }\n}\n\nexport default DataObject;\n","const events = [\n 'initialized',\n 'beforeupdate',\n 'updated',\n 'beforedraw',\n 'drawn',\n 'beforeremove',\n 'removed'\n];\n\nconst compositions = [\n 'canvas',\n 'unit',\n 'layer',\n 'axis',\n 'facet-headers',\n 'legend',\n 'caption'\n];\n\nconst EVENT_LIST = [];\n\ncompositions.forEach((composition) => {\n events.forEach((event) => {\n EVENT_LIST.push(`${composition}.${event}`);\n });\n});\n\nexport default EVENT_LIST;\n","import EVENT_LIST from './event-list';\n\n/**\n * At first call it accepts one function\n * calling it second time accepts notification object.\n * notification object then called with first accepted function\n *\n * @param {Function} resolveFn a promise's resolve function\n * @return {Function} a function to accept notification object\n */\nconst resolver = resolveFn => notification => resolveFn(notification);\n\n/**\n * Checks if the property string is present in the source object\n *\n * @param {Object} source source object whom you want to check the property\n * @param {string} property key name that need to be checked\n * @return {boolean} returns true if the property found in the source object\n */\nconst hasOwn = (source, property) => Object.prototype.hasOwnProperty.call(source, property);\n\n/**\n * LifeCycleManager which goes as a dependendecy to a muze\n * it accepts notification from the entire library throughout\n * the exeecution life\n *\n * @export\n * @class LifeCycleManager\n */\nexport default class LifeCycleManager {\n\n /**\n * Creates an instance of LifeCycleManager.\n * @memberof LifeCycleManager\n */\n constructor () {\n this._eventList = EVENT_LIST;\n this._promises = new Map();\n this._notifiers = {};\n this._lifeCycles = {};\n this._unreleasedLifeCycles = {};\n this._boot();\n }\n\n /**\n * Fills all the notifiers with resolver callback\n *\n * @memberof LifeCycleManager\n */\n _boot () {\n this._notifiers = this._eventList.reduce((acc, name) => {\n acc[name] = resolver;\n return acc;\n }, {});\n this._preparePromises();\n }\n\n /**\n * Public method which gives the promise corresponding\n * to the event name\n *\n * @param {string} eventName name of the event like `canvas.drawn`\n * @return {promise} promise that is passed to the user\n * @memberof LifeCycleManager\n */\n retrieve (eventName) {\n return this._promises.get(eventName);\n }\n\n /**\n * Creates a promise that will be passed to user's callback\n *\n * @param {string} eventName name of the event like `canvas.drawn`\n * @return {promise} a pending promise waiting for resolve to be called\n * @memberof LifeCycleManager\n */\n _makeNotifierPromise (eventName) {\n return new Promise((resolve) => {\n this._notifiers[eventName] = this._notifiers[eventName](resolve);\n });\n }\n\n /**\n * Prepares the promise map with pending promises\n * all the promises are in a pending state where their's\n * resolve function waiting to be called with notification object\n * @memberof LifeCycleManager\n */\n _preparePromises () {\n this._eventList.forEach((eventName) => {\n this._promises.set(eventName, this._makeNotifierPromise(eventName));\n });\n }\n\n /**\n * Resolves the promise with notification object\n *\n * @param {string} eventName name of the event in the system\n * @param {Object} notification notification object\n * @param {string} notification.formalName name of the sender creating the notification\n * @param {Object} notification.client instance or array of instances sending the notification\n * @param {string} notification.action the stage name when the event happened like `beforedraw`\n *\n * @memberof LifeCycleManager\n */\n _resolvePromise (eventName, notification) {\n this._notifiers[eventName](notification);\n }\n\n /**\n * Public method which is being called by different\n * subcompoents of the system at different execution atages\n * @param {Object} notification notification object\n * @param {string} notification.formalName name of the sender creating the notification\n * @param {Object} notification.client instance or array of instances sending the notification\n * @param {string} notification.action the stage name when the event happened like `beforedraw`\n * @memberof LifeCycleManager\n */\n notify (notification) {\n // get the composition name from notification\n // or from static formalName() method\n const composition = notification.formalName || notification.client.constructor.formalName();\n notification.formalName = composition;\n this._releasePromisesFromCache();\n this._notify(composition, notification);\n }\n\n /**\n * Notify user the with promsie in a callback\n * if callback not found then cache it\n *\n * @param {string} composition\n * @param {Object} notification notification object\n * @param {string} notification.formalName name of the sender creating the notification\n * @param {Object} notification.client instance or array of instances sending the notification\n * @param {string} notification.action the stage name when the event happened like `beforedraw`\n * @memberof LifeCycleManager\n */\n _notify (composition, notification) {\n const stage = notification.action;\n const eventName = `${composition}.${stage}`;\n\n // resolves promise with the notification object\n this._resolvePromise(eventName, notification);\n\n // get the promise from the promise map\n const promise = this.retrieve(eventName);\n\n if (this._lifeCycles[composition]) {\n if (this._lifeCycles[composition][stage]) {\n // if user given call back exists, then call with promise\n this._callLifeCycleCallback(composition, stage, promise);\n } else {\n // otherwise cache the promise\n this._cachePromise(composition, stage, promise);\n }\n } else {\n this._cachePromise(composition, stage, promise);\n }\n }\n\n /**\n * Calls the user's callback with callback\n *\n * @param {string} composition name of the compositon like `canvas`\n * @param {string} stage the stage name when the event happened like `beforedraw`\n * @param {promise} promise promise that is passed to the user\n * @memberof LifeCycleManager\n */\n _callLifeCycleCallback (composition, stage, promise) {\n const eventName = `${composition}.${stage}`;\n this._lifeCycles[composition][stage](promise);\n this._resetTargetPromise(eventName);\n }\n\n /**\n * Try to clear the cached promsies once we have\n * macthed callbacks from the user\n *\n * @memberof LifeCycleManager\n */\n _releasePromisesFromCache () {\n const compositions = Object.keys(this._unreleasedLifeCycles);\n compositions.forEach((composition) => {\n const stages = Object.keys(this._unreleasedLifeCycles[composition]);\n stages.forEach((stage) => {\n if (this._lifeCycles[composition]) {\n if (this._lifeCycles[composition][stage]) {\n // take the promise from unreleased lifeCycles\n const promise = this._unreleasedLifeCycles[composition][stage];\n // call the user given callback with that promise\n this._callLifeCycleCallback(composition, stage, promise);\n // delete promise from unreleased lifeCycles\n delete this._unreleasedLifeCycles[composition][stage];\n }\n }\n });\n });\n }\n\n /**\n * Cache the promise in the map. This cache\n * then get consumed if we get user callbacks\n * @param {string} composition name of the compositon like `canvas`\n * @param {string} stage the stage name when the event happened like `beforedraw`\n * @param {promise} promise promise that is passed to the user\n * @memberof LifeCycleManager\n */\n _cachePromise (composition, stage, promise) {\n if (!hasOwn(this._unreleasedLifeCycles, composition)) {\n this._unreleasedLifeCycles[composition] = {};\n }\n\n if (!hasOwn(this._unreleasedLifeCycles[composition], stage)) {\n this._unreleasedLifeCycles[composition][stage] = {};\n }\n this._unreleasedLifeCycles[composition][stage] = promise;\n }\n\n /**\n * It register's the callbacks gievn the user\n *\n * @param {Object} [lifeCycles={}] a object with list of callbacks\n * @memberof LifeCycleManager\n */\n register (lifeCycles = {}) {\n this._lifeCycles = lifeCycles;\n // as we get all the callbacks, try to call them\n // from unreleased promise map\n this._releasePromisesFromCache();\n }\n\n /**\n * Reset the promise into pending state\n *\n * @param {string} eventName name of the event happening\n * @memberof LifeCycleManager\n */\n _resetTargetPromise (eventName) {\n setTimeout(() => {\n this._notifiers[eventName] = resolver;\n this._promises.set(eventName, this._makeNotifierPromise(eventName));\n }, 0);\n }\n}\n","import LifeCycleManager from './lifecycle-manager';\n\nexport default LifeCycleManager;\n","export const DRAG = 'drag';\nexport const HOVER = 'hover';\nexport const SELECTIONDRAG = 'selectiondrag';\nexport const CLICK = 'click';\nexport const LONGTOUCH = 'longtouch';\nexport const TOUCHDRAG = 'touchdrag';\nexport const ALL_ACTIONS = '*';\n","const SELECTION_NEW_ENTRY = 1;\nconst SELECTION_NEW_EXIT = -1;\nconst SELECTION_NULL = 0;\nconst SELECTION_OLD_ENTRY = 2;\nconst SELECTION_OLD_EXIT = -2;\n\nexport {\n SELECTION_NEW_ENTRY,\n SELECTION_NEW_EXIT,\n SELECTION_NULL,\n SELECTION_OLD_ENTRY,\n SELECTION_OLD_EXIT\n};\n","import {\n SELECTION_NEW_ENTRY, SELECTION_NEW_EXIT, SELECTION_NULL, SELECTION_OLD_ENTRY, SELECTION_OLD_EXIT\n} from '../enums/selection';\n/* eslint-disable guard-for-in */\n\n/**\n * This component is used to keep track of the row tuples of the data which gets added and removed.\n * @class SelectionSet\n */\nclass SelectionSet {\n /**\n * Creates an instance of selection set\n * @param {Array.} completeSet Set of unique ids.\n */\n constructor (completeSet, _volatile) {\n this.completeSet = completeSet;\n this._set = completeSet.reduce((obj, key) => {\n obj[key] = SELECTION_NULL;\n return obj;\n }, {});\n this._volatile = _volatile;\n this._completeSetCount = completeSet.length;\n this._lockedSelection = {};\n this._resetted = true;\n }\n\n /**\n * Adds a set of ids to the selection set.\n * @param {Array.} ids Array of unique ids\n * @return {SelectionSet} Instance of selection set.\n */\n add (ids) {\n this._resetted = false;\n\n const set = this._set;\n // from exitset to entryset\n ids.forEach((i) => {\n set[i] = SELECTION_NEW_ENTRY;\n });\n\n for (const key in set) {\n if (set[key] !== SELECTION_NEW_ENTRY && set[key] !== SELECTION_OLD_ENTRY) {\n set[key] = set[key] < 0 ? SELECTION_OLD_EXIT : SELECTION_NEW_EXIT;\n }\n }\n return this;\n }\n\n /**\n * Adds a set of ids to the selection set.\n * @param {Array.} ids Array of unique ids\n * @return {SelectionSet} Instance of selection set.\n */\n update (ids) {\n const set = this._set;\n // from exitset to entryset\n ids.forEach((i) => {\n set[i] = SELECTION_OLD_ENTRY;\n });\n\n return this;\n }\n\n /**\n * Adds a set of ids to the selection set.\n * @param {Array.} ids Array of unique ids\n * @return {SelectionSet} Instance of selection set.\n */\n updateEntry () {\n const set = this._set;\n\n // from exitset to entryset\n for (const key in set) {\n set[key] = set[key] === SELECTION_NEW_ENTRY ? SELECTION_OLD_ENTRY : set[key];\n }\n return this;\n }\n\n /**\n * Adds a set of ids to the selection set.\n * @param {Array.} ids Array of unique ids\n * @return {SelectionSet} Instance of selection set.\n */\n updateExit () {\n const set = this._set;\n // from exitset to entryset\n for (const key in set) {\n set[key] = set[key] === SELECTION_NEW_EXIT ? SELECTION_OLD_EXIT : set[key];\n }\n return this;\n }\n\n /**\n * Removes the ids from the selection set.\n * @param {Array.} ids Array of unique ids\n * @return {SelectionSet} Instance of selection set\n */\n remove (ids) {\n this._resetted = false;\n\n const set = this._set;\n ids.forEach((i) => {\n set[i] = SELECTION_NEW_EXIT;\n });\n\n for (const key in set) {\n if (set[key] !== SELECTION_NEW_EXIT && set[key] !== SELECTION_OLD_EXIT) {\n set[key] = set[key] === 0 ? SELECTION_NEW_ENTRY : SELECTION_OLD_ENTRY;\n }\n }\n\n return this;\n }\n\n getSets () {\n const set = this._set;\n const retObj = {\n entrySet: [[], []],\n exitSet: [[], []],\n completeSet: []\n };\n\n for (const key in set) {\n if (set[key] > 0) {\n set[key] === SELECTION_OLD_ENTRY && retObj.entrySet[0].push(key);\n set[key] === SELECTION_NEW_ENTRY && retObj.entrySet[1].push(key);\n } else if (set[key] < 0) {\n set[key] === SELECTION_OLD_EXIT && retObj.exitSet[0].push(key);\n set[key] === SELECTION_NEW_EXIT && retObj.exitSet[1].push(key);\n }\n retObj.completeSet.push(key);\n }\n\n ['entrySet', 'exitSet'].forEach((type) => {\n retObj[type] = retObj[type].map(e => e.map(Number));\n });\n retObj.completeSet = retObj.completeSet.map(Number);\n\n return retObj;\n }\n\n /**\n * Resets the selection set to initial state. It sets the value of every unique id value to\n * null in the selection set.\n * @return {SelectionSet} Instance of selection set.\n */\n reset (ids) {\n const set = this._set;\n if (ids) {\n ids.forEach((i) => {\n set[i] = SELECTION_NULL;\n });\n } else {\n const lockedSel = this._lockedSelection;\n for (const key in set) {\n if (!(key in lockedSel)) {\n set[key] = SELECTION_NULL;\n }\n }\n }\n this._resetted = true;\n return this;\n }\n\n /**\n * Gets the set of ids which are added in the selection set.\n * @return {Array.} Array of unique ids\n */\n getEntrySet () {\n const set = this._set;\n const addSet = [];\n\n for (const key in set) {\n set[key] === SELECTION_NEW_ENTRY && addSet.push(key);\n }\n\n return addSet;\n }\n\n /**\n * Returns a set of unique ids which are already present in entry set\n * @param {Array} addSet Array of unique ids which are added\n *\n * @return {Array} Array of unique ids which are already in old entry set or new entry set\n */\n getExistingEntrySet (addSet) {\n const set = this._set;\n return addSet.filter(d => set[d] === SELECTION_NEW_ENTRY || set[d] === SELECTION_OLD_ENTRY);\n }\n\n getExistingExitSet (removeSet) {\n const set = this._set;\n return removeSet.filter(d => set[d] === SELECTION_NEW_EXIT || set[d] === SELECTION_OLD_EXIT);\n }\n\n /**\n * Gets the set of ids which are added in the selection set.\n * @return {Array.} Array of unique ids\n */\n getOldEntry () {\n const set = this._set;\n const updateSet = [];\n\n for (const key in set) {\n set[key] === SELECTION_OLD_ENTRY && updateSet.push(key);\n }\n return updateSet;\n }\n\n /**\n * Gets the set of ids which are added in the selection set.\n * @return {Array.} Array of unique ids\n */\n getOldExit () {\n const set = this._set;\n const updateSet = [];\n\n for (const key in set) {\n set[key] === SELECTION_OLD_EXIT && updateSet.push(key);\n }\n\n return updateSet;\n }\n\n /**\n * Gets the set of ids which are in the remove set.\n * @return {Array.} Array of unique ids\n */\n getExitSet () {\n const set = this._set;\n const removeSet = [];\n\n for (const key in set) {\n set[key] === SELECTION_NEW_EXIT && removeSet.push(key);\n }\n return removeSet;\n }\n\n getCompleteSet () {\n const set = this._set;\n const completeSet = [];\n\n for (const key in set) {\n completeSet.push(key);\n }\n\n return completeSet;\n }\n\n getCompleteSetCount () {\n return this._completeSetCount;\n }\n\n resetted () {\n return this._resetted;\n }\n\n /**\n * Swaps the add set and remove set in the selection set.\n * @return {SelectionSet} Instance of selection set.\n */\n toggle () {\n const set = this._set;\n\n for (const key in set) {\n if (set[key] === SELECTION_NEW_ENTRY) {\n set[key] = SELECTION_NEW_EXIT;\n } else if (set[key] === SELECTION_NEW_EXIT) {\n set[key] = SELECTION_NEW_ENTRY;\n } else if (set[key] === SELECTION_OLD_ENTRY) {\n set[key] = SELECTION_OLD_EXIT;\n } else {\n set[key] = SELECTION_OLD_ENTRY;\n }\n }\n\n return this;\n }\n}\n\nexport default SelectionSet;\n","import { clone } from 'muze-utils';\nimport * as SELECTION from '../enums/selection';\n\nexport const initializeSideEffects = (context, sideEffects) => {\n const sideEffectsMap = context._sideEffects;\n\n sideEffects = sideEffects instanceof Array ? sideEffects : Object.values(sideEffects);\n sideEffects.forEach((SideEffect) => {\n const sideEffectInstance = sideEffectsMap[SideEffect.formalName()];\n sideEffectsMap[SideEffect.formalName()] = sideEffectInstance || new SideEffect(context);\n });\n return sideEffectsMap;\n};\n\nexport const initializeBehaviouralActions = (context, actions) => {\n const dispatchableBehaviours = {};\n\n actions = actions instanceof Array ? actions : Object.values(actions);\n actions.forEach((Action) => {\n dispatchableBehaviours[Action.formalName()] = new Action(context);\n });\n return dispatchableBehaviours;\n};\n\nexport const initializePhysicalActions = (context, actions) => {\n const physicalActions = {};\n\n for (const name in actions) {\n if (!({}).hasOwnProperty.call(name, actions)) {\n physicalActions[name] = actions[name](context);\n }\n }\n return physicalActions;\n};\n\nexport const changeSideEffectAvailability = (context, fn, toEnable) => {\n const sideEffects = context.sideEffects();\n for (const key in sideEffects) {\n if ({}.hasOwnProperty.call(sideEffects, key)) {\n let change = true;\n if (fn && fn(key) === false) {\n change = false;\n }\n if (change) {\n toEnable ? sideEffects[key].enable() : sideEffects[key].disable();\n }\n }\n }\n};\n\nexport const getMergedSet = set => [...new Set([...set[0], ...set[1]])];\n\nexport const getSourceFields = (propagationInf, criteria = {}) => {\n const sourceIdentifiers = propagationInf.sourceIdentifiers;\n let sourceFields;\n if (sourceIdentifiers) {\n sourceFields = sourceIdentifiers.getSchema().map(d => d.name);\n } else if (criteria instanceof Array) {\n sourceFields = criteria[0];\n } else {\n sourceFields = Object.keys(criteria || {});\n }\n return sourceFields;\n};\n\nconst conditionsMap = {\n newEntry: [SELECTION.SELECTION_NEW_ENTRY],\n oldEntry: [SELECTION.SELECTION_OLD_ENTRY],\n mergedEnter: [SELECTION.SELECTION_NEW_ENTRY, SELECTION.SELECTION_OLD_ENTRY],\n newExit: [SELECTION.SELECTION_NEW_EXIT],\n oldExit: [SELECTION.SELECTION_OLD_EXIT],\n mergedExit: [SELECTION.SELECTION_NEW_EXIT, SELECTION.SELECTION_OLD_EXIT],\n complete: []\n};\n\nexport const getModelFromSet = (type, model, set) => {\n if (model) {\n return model.select((fields, i) =>\n (conditionsMap[type].some(condition => set[i] === condition)), {\n saveChild: false\n });\n }\n return null;\n};\n\nexport const getSetInfo = (type, set, config) => {\n let model = null;\n const filteredDataModel = config.filteredDataModel;\n const selectionSet = config.selectionSet;\n if (!config.propagationData) {\n if (selectionSet.resetted()) {\n model = null;\n } else {\n model = getModelFromSet(type, config.dataModel, config.selectionSet._set);\n }\n } else if (filteredDataModel) {\n model = type === 'mergedEnter' ? filteredDataModel[0] : filteredDataModel[1];\n }\n return {\n uids: set,\n length: set.length,\n model\n };\n};\n\nexport const getSideEffects = (behaviour, behaviourEffectMap) => {\n const sideEffects = [];\n for (const key in behaviourEffectMap) {\n const behaviours = key.split(',');\n const found = behaviours.some(d => d === behaviour);\n if (found) {\n sideEffects.push({\n effects: behaviourEffectMap[key],\n behaviours\n });\n }\n }\n return sideEffects;\n};\n\nexport const unionSets = (context, behaviours) => {\n let combinedSet = {};\n const models = {\n mergedEnter: null,\n mergedExit: null\n };\n behaviours.forEach((behaviour) => {\n const entryExitSet = context._entryExitSet[behaviour];\n if (entryExitSet) {\n combinedSet = Object.assign(combinedSet, clone(entryExitSet));\n ['mergedEnter', 'mergedExit'].forEach((type) => {\n const model = entryExitSet[type].model;\n let existingModel = models[type];\n if (!existingModel) {\n existingModel = models[type] = model;\n } else {\n existingModel = models[type] = model.union(existingModel);\n }\n combinedSet[type].model = existingModel;\n });\n }\n });\n return combinedSet;\n};\n","import {\n mergeRecursive,\n hasTouch,\n filterPropagationModel,\n FieldType,\n selectElement,\n isSimpleObject\n} from 'muze-utils';\nimport { ALL_ACTIONS } from './enums/actions';\nimport SelectionSet from './selection-set';\nimport {\n initializeBehaviouralActions,\n initializeSideEffects,\n changeSideEffectAvailability,\n initializePhysicalActions,\n unionSets,\n getSideEffects\n} from './helper';\n\n/**\n * Relient firebolt is responsible for dispatching behaviours. It has only behaviours which can be\n * dispatched without any physical action being triggered.\n */\nexport default class Firebolt {\n constructor (context, actions, sideEffects, behaviourEffectMap) {\n this.context = context;\n this._sideEffectDefinitions = {};\n this._sideEffects = {};\n this._propagationInf = {};\n this._actions = {\n behavioural: {},\n physical: {}\n };\n this._selectionSet = {};\n this._volatileSelectionSet = {};\n this._propagationFields = {};\n this._sourceSideEffects = {\n selectionBox: () => false\n };\n this._propagationBehaviourMap = {};\n this._sourceBehaviours = {};\n this._actionBehaviourMap = {};\n this._config = {};\n this._behaviourEffectMap = {};\n this._entryExitSet = {};\n this._actionHistory = {};\n this._queuedSideEffects = {};\n this._mappedActions = {};\n\n this.mapSideEffects(behaviourEffectMap);\n this.registerBehaviouralActions(actions.behavioural);\n this.registerSideEffects(sideEffects);\n this.registerPhysicalBehaviouralMap(actions.physicalBehaviouralMap);\n this.registerPhysicalActions(actions.physical);\n }\n\n config (...config) {\n if (config.length) {\n const conf = this._config = mergeRecursive(this._config, config[0]);\n const sideEffects = this.sideEffects();\n for (const key in sideEffects) {\n if ({}.hasOwnProperty.call(sideEffects, key)) {\n const sideEffectConf = conf[key];\n sideEffectConf && sideEffects[key].config(sideEffectConf);\n }\n }\n return this;\n }\n return this._config;\n }\n\n mapSideEffects (behEffectMap) {\n const behaviourEffectMap = this._behaviourEffectMap;\n for (const key in behEffectMap) {\n if ({}.hasOwnProperty.call(behEffectMap, key)) {\n const sideEffects = behEffectMap[key] || [];\n let preventDefaultActions = false;\n let effectNames;\n if (isSimpleObject(sideEffects)) {\n effectNames = sideEffects.effects;\n preventDefaultActions = sideEffects.preventDefaultActions;\n } else {\n effectNames = sideEffects;\n }\n !behaviourEffectMap[key] && (behaviourEffectMap[key] = []);\n this._behaviourEffectMap[key] = [...new Set(preventDefaultActions ? effectNames :\n [...behaviourEffectMap[key], ...effectNames])];\n }\n }\n return this;\n }\n\n registerBehaviouralActions (actions) {\n const behaviours = initializeBehaviouralActions(this, actions);\n this.prepareSelectionSets(behaviours);\n Object.assign(this._actions.behavioural, behaviours);\n return this;\n }\n\n prepareSelectionSets () {\n return this;\n }\n\n registerSideEffects (sideEffects) {\n for (const key in sideEffects) {\n this._sideEffectDefinitions[sideEffects[key].formalName()] = sideEffects[key];\n }\n return this;\n }\n\n applySideEffects (sideEffects, selectionSet, payload) {\n const sideEffectStore = this.sideEffects();\n const actionHistory = this._actionHistory;\n const queuedSideEffects = this._queuedSideEffects;\n sideEffects.forEach((sideEffect) => {\n let options;\n let name;\n const effects = sideEffect.effects;\n const behaviours = sideEffect.behaviours;\n const combinedSet = unionSets(this, behaviours, selectionSet);\n effects.forEach((effect) => {\n if (typeof effect === 'object') {\n name = effect.name;\n options = effect.options;\n } else {\n name = effect;\n }\n\n const sideEffectInstance = sideEffectStore[name];\n if (sideEffectInstance.isEnabled()) {\n if (!sideEffectInstance.constructor.mutates() &&\n Object.values(actionHistory).some(d => d.isMutableAction)) {\n queuedSideEffects[`${name}-${behaviours.join()}`] = {\n name,\n params: [combinedSet, payload, options]\n };\n } else {\n this.dispatchSideEffect(name, combinedSet, payload, options);\n }\n }\n });\n });\n return this;\n }\n\n dispatchSideEffect (name, selectionSet, payload, options = {}) {\n const sideEffectStore = this.sideEffects();\n const sideEffect = sideEffectStore[name];\n let disable = false;\n if (options.filter && options.filter(sideEffect)) {\n disable = true;\n }\n !disable && sideEffectStore[name].apply(selectionSet, payload, options);\n }\n\n registerPropagationBehaviourMap (map) {\n this._propagationBehaviourMap = Object.assign(this._propagationBehaviourMap, map || {});\n return this;\n }\n\n dispatchBehaviour (behaviour, payload, propagationInfo = {}) {\n const propagate = propagationInfo.propagate !== undefined ? propagationInfo.propagate : true;\n const behaviouralActions = this._actions.behavioural;\n const action = behaviouralActions[behaviour];\n const behaviourEffectMap = this._behaviourEffectMap;\n const sideEffects = getSideEffects(behaviour, behaviourEffectMap);\n this._propagationInf = propagationInfo;\n\n if (action) {\n const selectionSet = action.dispatch(payload);\n const propagationSelectionSet = this.getPropagationSelectionSet(selectionSet);\n this._entryExitSet[behaviour] = propagationSelectionSet;\n const shouldApplySideEffects = this.shouldApplySideEffects(propagate);\n\n if (propagate) {\n this.propagate(behaviour, payload, selectionSet.find(d => d.sourceSelectionSet), sideEffects);\n }\n if (shouldApplySideEffects) {\n const applicableSideEffects = this.getApplicableSideEffects(sideEffects, payload, propagationInfo);\n this.applySideEffects(applicableSideEffects, propagationSelectionSet, payload);\n }\n }\n\n return this;\n }\n\n getPropagationSelectionSet (selectionSet) {\n return selectionSet.find(d => !d.sourceSelectionSet);\n }\n\n shouldApplySideEffects () {\n return true;\n }\n\n changeBehaviourStateOnPropagation (behaviour, value) {\n if (value instanceof Function) {\n this._sourceBehaviours[behaviour] = value;\n } else {\n this._sourceBehaviours[behaviour] = () => value;\n }\n return this;\n }\n\n changeSideEffectStateOnPropagation (sideEffect, value) {\n if (value instanceof Function) {\n this._sourceSideEffects[sideEffect] = value;\n } else {\n this._sourceSideEffects[sideEffect] = () => value;\n }\n }\n\n propagate () {\n return this;\n }\n\n sideEffects (...sideEffects) {\n if (sideEffects.length) {\n this._sideEffects = sideEffects[0];\n return this;\n }\n return this._sideEffects;\n }\n\n enableSideEffects (fn) {\n changeSideEffectAvailability(this, fn, true);\n return this;\n }\n\n disableSideEffects (fn) {\n changeSideEffectAvailability(this, fn, false);\n return this;\n }\n\n dissociateBehaviour (behaviour, physicalAction) {\n const actionBehaviourMap = this._actionBehaviourMap;\n for (const key in actionBehaviourMap) {\n if (key === physicalAction) {\n const behaviourMap = actionBehaviourMap[key];\n behaviourMap.behaviours = behaviourMap.behaviours.filter(d => d !== behaviour);\n }\n }\n\n return this;\n }\n\n dissociateSideEffect (sideEffect, behaviour) {\n const behaviourEffectMap = this._behaviourEffectMap;\n behaviourEffectMap[behaviour] = behaviourEffectMap[behaviour].filter(d => (d.name || d) !== sideEffect);\n return this;\n }\n\n getApplicableSideEffects (sideEffects) {\n return sideEffects;\n }\n\n attachPropagationListener (dataModel) {\n dataModel.unsubscribe('propagation');\n dataModel.on('propagation', this.onDataModelPropagation());\n return this;\n }\n\n onDataModelPropagation () {\n return (propValue) => {\n const payload = propValue.payload;\n const action = payload.action;\n\n this.dispatchBehaviour(action, payload, {\n propagate: false\n });\n };\n }\n\n createSelectionSet (uniqueIds, behaviouralActions) {\n const behaviours = behaviouralActions || this._actions.behavioural;\n const selectionSet = this._selectionSet;\n const volatileSelectionSet = this._volatileSelectionSet;\n\n for (const key in behaviours) {\n if ({}.hasOwnProperty.call(behaviours, key)) {\n selectionSet[key] = new SelectionSet(uniqueIds);\n volatileSelectionSet[key] = new SelectionSet(uniqueIds, true);\n }\n }\n this._volatileSelectionSet = volatileSelectionSet;\n this.selectionSet(selectionSet);\n return this;\n }\n\n selectionSet (...selectionSet) {\n if (selectionSet.length) {\n this._selectionSet = selectionSet[0];\n return this;\n }\n return this._selectionSet;\n }\n\n initializeSideEffects () {\n const sideEffectDefinitions = this._sideEffectDefinitions;\n this.sideEffects(initializeSideEffects(this, sideEffectDefinitions));\n return this;\n }\n\n registerPhysicalActions (actions) {\n const initedActions = initializePhysicalActions(this, actions);\n Object.assign(this._actions.physical, initedActions);\n return this;\n }\n\n propagateWith (action, fields, append = false) {\n const behaviouralActions = this._actions.behavioural;\n if (fields.length) {\n if (action === ALL_ACTIONS) {\n for (const key in behaviouralActions) {\n this._propagationFields[key] = {\n fields,\n append\n };\n }\n } else {\n this._propagationFields[action] = {\n fields,\n append\n };\n }\n return this;\n }\n return this._propagationFields;\n }\n\n /**\n * Map actions and behaviours\n * @return {Firebolt} Firebolt instance\n */\n mapActionsAndBehaviour () {\n const initedPhysicalActions = this._actions.physical;\n const map = this._actionBehaviourMap;\n const mappedActions = this._mappedActions;\n\n for (const action in map) {\n if (!({}).hasOwnProperty.call(action, map)) {\n let target;\n const mapObj = map[action];\n target = mapObj.target;\n const touch = mapObj.touch;\n if (!target) {\n target = this.context.getDefaultTargetContainer();\n }\n const bind = hasTouch() ? touch === true || touch === undefined : !touch;\n const keyName = `${action}-${mapObj.behaviours.join()}`;\n bind && !mappedActions[keyName] && this.bindActionWithBehaviour(initedPhysicalActions[action],\n target, mapObj.behaviours);\n mappedActions[keyName] = true;\n }\n }\n return this;\n }\n\n registerPhysicalBehaviouralMap (map) {\n Object.assign(this._actionBehaviourMap, map);\n return this;\n }\n\n /**\n * Binds a target element with an action.\n *\n * @param {Function} action Action method\n * @param {string} target Class name of element\n * @param {Array} behaviourList Array of behaviours\n * @return {FireBolt} Instance of firebolt\n */\n bindActionWithBehaviour (action, targets, behaviourList) {\n if (typeof (targets) === 'string') {\n targets = [targets];\n }\n targets.forEach((target) => {\n const mount = this.context.mount();\n const nodes = target.node instanceof Function ? target : selectElement(mount).selectAll(target);\n if (behaviourList.length && !nodes.empty()) {\n if (nodes instanceof Array) {\n nodes.forEach((node) => {\n action(selectElement(node), behaviourList);\n });\n } else {\n action(nodes, behaviourList);\n }\n }\n });\n return this;\n }\n\n getPropagationInf () {\n return this._propagationInf;\n }\n\n getAddSetFromCriteria (criteria, propagationInf = {}) {\n const context = this.context;\n const filteredDataModel = propagationInf.data ? propagationInf.data :\n context.getDataModelFromIdentifiers(criteria, 'all');\n const xFields = context.fields().x || [];\n const yFields = context.fields().y || [];\n const xMeasures = xFields.every(field => field.type() === FieldType.MEASURE);\n const yMeasures = yFields.every(field => field.type() === FieldType.MEASURE);\n return {\n model: filteredDataModel,\n uids: criteria === null ? null : (propagationInf.data ? filterPropagationModel(this.getFullData(),\n propagationInf.data[0], xMeasures && yMeasures).getData().uids : filteredDataModel[0].getData().uids)\n };\n }\n\n getSelectionSets (action) {\n const sourceId = this.context.id();\n const propagationInf = this._propagationInf || {};\n const propagationSource = propagationInf.sourceId;\n let applicableSelectionSets = [];\n if (propagationSource !== sourceId) {\n applicableSelectionSets = [this._volatileSelectionSet[action]];\n }\n\n if (propagationSource) {\n applicableSelectionSets.push(this.selectionSet()[action]);\n }\n return applicableSelectionSets;\n }\n\n getFullData () {\n return this.context.data();\n }\n\n resetted () {\n return this._resetted;\n }\n\n getEntryExitSet (behaviour) {\n return this._entryExitSet[behaviour];\n }\n}\n","import { getSetInfo, getMergedSet, getSourceFields } from '../../helper';\n\nexport default class GenericBehaviour {\n constructor (firebolt) {\n this.firebolt = firebolt;\n this._enabled = true;\n }\n\n dispatch (payload) {\n const criteria = payload.criteria;\n const firebolt = this.firebolt;\n const formalName = this.constructor.formalName();\n const selectionSets = firebolt.getSelectionSets(formalName);\n const {\n model: filteredDataModel,\n uids\n } = this.firebolt.getAddSetFromCriteria(criteria, this.firebolt.getPropagationInf());\n const entryExitSets = selectionSets.map((selectionSet) => {\n this.setSelectionSet(uids, selectionSet);\n return this.getEntryExitSet(selectionSet, filteredDataModel, payload);\n });\n\n return entryExitSets;\n }\n\n setSelectionSet () {\n return this;\n }\n\n getEntryExitSet (selectionSet, filteredDataModel, payload) {\n const {\n entrySet,\n exitSet,\n completeSet\n } = selectionSet.getSets();\n const propagationInf = this.firebolt.getPropagationInf();\n const dataModel = this.firebolt.getFullData();\n const setConfig = {\n isSourceFieldPresent: propagationInf.isSourceFieldPresent,\n dataModel,\n filteredDataModel,\n propagationData: propagationInf.data,\n selectionSet\n };\n\n return {\n entrySet: [getSetInfo('oldEntry', entrySet[0], setConfig),\n getSetInfo('newEntry', entrySet[1], setConfig)],\n exitSet: [getSetInfo('oldEntry', exitSet[0], setConfig),\n getSetInfo('newExit', exitSet[1], setConfig)],\n mergedEnter: getSetInfo('mergedEnter', getMergedSet(entrySet), setConfig),\n mergedExit: getSetInfo('mergedExit', getMergedSet(exitSet), setConfig),\n completeSet: getSetInfo('complete', completeSet, setConfig),\n isSourceFieldPresent: propagationInf.isSourceFieldPresent,\n fields: getSourceFields(propagationInf, payload.criteria),\n sourceSelectionSet: selectionSet._volatile === true\n };\n }\n\n static mutates () {\n return false;\n }\n\n enable () {\n this._enabled = true;\n }\n\n disable () {\n this._enabled = false;\n }\n\n isEnabled () {\n return this._enabled;\n }\n}\n\n","import GenericBehaviour from './generic';\nimport { getMergedSet } from '../../helper';\nimport * as SELECTION from '../../enums/selection';\n\nexport default class VolatileBehaviour extends GenericBehaviour {\n setSelectionSet (addSet, selectionSet) {\n if (addSet === null) {\n selectionSet.reset();\n } else if (addSet.length) {\n // new add set\n const existingAddSet = addSet.filter(d => selectionSet._set[d] === SELECTION.SELECTION_NEW_ENTRY\n || selectionSet._set[d] === SELECTION.SELECTION_OLD_ENTRY);\n selectionSet.updateExit();\n const { entrySet } = selectionSet.getSets();\n selectionSet.reset(getMergedSet(entrySet));\n selectionSet.add(addSet);\n selectionSet.update(existingAddSet);\n } else {\n selectionSet.remove(selectionSet.getCompleteSet());\n }\n }\n}\n","export const BRUSH = 'brush';\nexport const HIGHLIGHT = 'highlight';\nexport const TOOLTIP = 'tooltip';\nexport const FILTER = 'filter';\nexport const SELECT = 'select';\n","import VolatileBehaviour from './volatile';\nimport { HIGHLIGHT } from '../../enums/behaviours';\n\nexport default class HighlightBehaviour extends VolatileBehaviour {\n static formalName () {\n return HIGHLIGHT;\n }\n}\n","import VolatileBehaviour from './volatile';\nimport * as BEHAVIOURNAMES from '../../enums/behaviours';\n\n/**\n * This is the behaviour for brushing a region on the chart. It accepts a payload\n * which contains the x and y range of the data and other configuration. It will then\n * create a selection box from the range and select the points which fall within the range.\n */\nexport default class BrushBehaviour extends VolatileBehaviour {\n static formalName () {\n return BEHAVIOURNAMES.BRUSH;\n }\n}\n","import VolatileBehaviour from './volatile';\nimport { FILTER } from '../../enums/behaviours';\n\nexport default class FilterBehaviour extends VolatileBehaviour {\n static formalName () {\n return FILTER;\n }\n\n static mutates () {\n return true;\n }\n}\n","import GenericBehaviour from './generic';\nimport { getMergedSet } from '../../helper';\nimport * as SELECTION from '../../enums/selection';\n\nexport default class PersistentBehaviour extends GenericBehaviour {\n setSelectionSet (addSet, selectionSet) {\n if (addSet === null) {\n selectionSet.reset();\n } else if (addSet.length) {\n const propagationInf = this.firebolt.getPropagationInf();\n // new add set\n const existingAddSet = addSet.filter(d => selectionSet._set[d] === SELECTION.SELECTION_NEW_ENTRY\n || selectionSet._set[d] === SELECTION.SELECTION_OLD_ENTRY);\n if (propagationInf.propagate === false) {\n selectionSet.updateExit();\n const { entrySet } = selectionSet.getSets();\n selectionSet.reset(getMergedSet(entrySet));\n selectionSet.add(addSet);\n selectionSet.update(existingAddSet);\n } else {\n // existing add set\n if (existingAddSet.length) {\n selectionSet.updateExit();\n selectionSet.remove(existingAddSet);\n } else {\n selectionSet.updateEntry();\n selectionSet.add(addSet);\n }\n const { exitSet } = selectionSet.getSets();\n const mergedExitSet = getMergedSet(exitSet);\n const completeSetCount = selectionSet.getCompleteSet().length;\n if (mergedExitSet.length === completeSetCount) {\n selectionSet.reset();\n }\n }\n } else {\n selectionSet.remove(selectionSet.getCompleteSet());\n }\n\n return this;\n }\n}\n","import PersistentBehaviour from './persistent';\nimport { SELECT } from '../../enums/behaviours';\n\nexport default class SelectBehaviour extends PersistentBehaviour {\n static formalName () {\n return SELECT;\n }\n}\n\n","import { DimensionSubtype, FieldType } from 'muze-utils';\n/**\n * Gets the drag action configuration\n * @param {VisualUnit} instance instance of visual unit\n * @param {Object} config x y positions\n * @return {Object} Payload of behaviour\n*/\n/* istanbul ignore next */ const getDragActionConfig = (sourceInfo, config, fieldsConfig) => {\n if (!(sourceInfo.axes.x || sourceInfo.axes.y)) {\n return {\n criteria: null\n };\n }\n\n const axes = sourceInfo.axes;\n const xAxis = axes.x[0];\n const yAxis = axes.y[0];\n const axisFields = sourceInfo.fields;\n const xField = axisFields.x[0].getMembers()[0];\n const yField = axisFields.y[0].getMembers()[0];\n const xFieldType = fieldsConfig[xField].def.subtype ? fieldsConfig[xField].def.subtype :\n fieldsConfig[xField].def.type;\n const yFieldType = fieldsConfig[yField].def.subtype ? fieldsConfig[yField].def.subtype :\n fieldsConfig[yField].def.type;\n const dimensions = {};\n const stPos = config.startPos;\n const endPos = config.endPos;\n\n if (stPos.x === endPos.x && stPos.y === endPos.y) {\n return {\n criteria: null\n };\n }\n\n const dragDim = xFieldType === FieldType.MEASURE ? (yFieldType === FieldType.MEASURE ? ['x', 'y'] : ['y']) : ['x'];\n const criteria = {};\n const isXDimension = xFieldType === DimensionSubtype.CATEGORICAL;\n const isYDimension = yFieldType === DimensionSubtype.CATEGORICAL;\n const xRange = xAxis.constructor.type() === 'band' ? xAxis.scale().invertExtent(stPos.x, endPos.x) :\n xAxis.invert(stPos.x, endPos.x);\n const yRange = yAxis.constructor.type() === 'band' ? yAxis.scale().invertExtent(stPos.y, endPos.y) :\n yAxis.invert(stPos.y, endPos.y);\n const selectedDomains = {\n x: stPos.x === endPos.x ? [] : (isXDimension ? xRange : xRange.sort((a, b) => a - b)),\n y: stPos.y === endPos.y ? [] : (isYDimension ? yRange : yRange.sort((a, b) => a - b))\n };\n const rangeObj = {};\n\n if (dragDim.length === 2) {\n rangeObj[xField] = selectedDomains.x;\n rangeObj[yField] = selectedDomains.y;\n if (xField === yField) {\n const xdom = selectedDomains.x;\n const ydom = selectedDomains.y;\n const min = xdom[0] > ydom[0] ? ydom : xdom;\n const max = min === ydom ? xdom : ydom;\n if (min[1] < max[0]) {\n rangeObj[xField] = [];\n } else {\n rangeObj[xField] = [max[0], min[1] < max[1] ? min[1] : max[1]];\n }\n dimensions.x = [stPos.x, endPos.x];\n dimensions.y = [stPos.y, endPos.y];\n }\n } else {\n criteria[dragDim[0]] = selectedDomains[dragDim[0]] || [];\n\n if (dragDim[0] === 'x') {\n rangeObj[xField] = criteria.x;\n if (xFieldType === DimensionSubtype.CATEGORICAL) {\n dimensions.x = (config.snap && stPos.x !== endPos.x) ? xAxis.getNearestRange(stPos.x, endPos.x) :\n [stPos.x, endPos.x];\n }\n } else {\n rangeObj[yField] = criteria.y;\n if (yFieldType === DimensionSubtype.CATEGORICAL) {\n dimensions.y = (config.snap && stPos.y !== endPos.y) ? yAxis.getNearestRange(stPos.y, endPos.y) :\n [stPos.y, endPos.y];\n }\n }\n }\n\n return {\n criteria: rangeObj,\n dimensions\n };\n};\n\nexport default getDragActionConfig;\n","import {\n getEvent,\n getD3Drag\n } from 'muze-utils';\n\nimport getDragActionConfig from './drag-action-config';\n\n/**\n * Adds dragging action to the target element.\n * @param {VisualUnit} instance Instance of visual unit.\n * @param {SVGElement} targetEl Element on which brushing action is needed.\n * @param {Array} behaviours Array of behaviours\n */\nexport const attachDragEvent = (targetEl, behaviours, firebolt, touch) => {\n let startPos = {};\n let endPos = {};\n let drawingInf;\n\n const d3Drag = getD3Drag();\n let touchStart;\n targetEl.call(d3Drag().on('start', () => {\n const event = getEvent();\n startPos = {\n x: event.x,\n y: event.y\n };\n drawingInf = firebolt.context.getDrawingContext();\n touchStart = new Date().getTime();\n }).on('drag', () => {\n const event = getEvent();\n endPos = {\n x: event.x,\n y: event.y\n };\n if (touch && Math.abs(startPos.x - endPos.x) <= 5) {\n return;\n }\n endPos.x = Math.max(0, Math.min(endPos.x, drawingInf.width));\n endPos.y = Math.max(0, Math.min(endPos.y, drawingInf.height));\n\n const payload = getDragActionConfig(firebolt.context.getSourceInfo(), {\n startPos,\n endPos\n }, firebolt.context.data().getFieldsConfig());\n behaviours.forEach(beh => firebolt.dispatchBehaviour(beh, payload));\n }).on('end', () => {\n const event = getEvent();\n endPos = {\n x: event.x,\n y: event.y\n };\n const duration = new Date().getTime() - touchStart;\n\n if (touch && duration > 100 && Math.abs(startPos.x - endPos.x) <= 5) {\n return;\n }\n endPos.x = Math.max(0, Math.min(endPos.x, drawingInf.width));\n endPos.y = Math.max(0, Math.min(endPos.y, drawingInf.height));\n\n const payload = getDragActionConfig(firebolt.context.getSourceInfo(), {\n startPos,\n endPos,\n snap: true\n }, firebolt.context.data().getFieldsConfig());\n payload.dragEnd = true;\n behaviours.forEach(beh => firebolt.dispatchBehaviour(beh, payload));\n }));\n};\n\n","import { getClientPoint, getEvent } from 'muze-utils';\nimport { CONSOLIDATED, FRAGMENTED } from '../../enums/constants';\n\n/**\n * Adds mouse interactions to target element.\n * @param {Firebolt} instance instance of firebolt.\n * @param {SVGElement} targetEl Element on which the event listeners will be attached.\n * @param {Array} behaviours Array of behaviours\n */\n/* istanbul ignore next */ const hover = firebolt => (targetEl, behaviours) => {\n const dispatchBehaviour = function (args) {\n const event = getEvent();\n const context = firebolt.context;\n const tooltipConf = context.config().interaction.tooltip;\n const mode = tooltipConf.mode;\n const pos = getClientPoint(context.getDrawingContext().svgContainer, event);\n const nearestPoint = context.getNearestPoint(pos.x, pos.y, {\n getAllPoints: mode === CONSOLIDATED || mode === FRAGMENTED,\n data: args,\n event\n });\n const payload = {\n criteria: nearestPoint ? nearestPoint.id : null,\n showInPosition: nearestPoint.showInPosition,\n target: nearestPoint.target,\n position: pos,\n mode\n };\n\n behaviours.forEach(beh => firebolt.dispatchBehaviour(beh, payload));\n event.stopPropagation();\n };\n\n targetEl.on('mouseover', dispatchBehaviour)\n .on('mousemove', dispatchBehaviour)\n .on('mouseout', () => {\n behaviours.forEach(beh => firebolt.dispatchBehaviour(beh, {\n criteria: null\n }));\n });\n};\n\nexport default hover;\n","export const CLASSPREFIX = 'muze';\nexport const CONSOLIDATED = 'consolidated';\nexport const FRAGMENTED = 'fragmented';\n\n","import { getClientPoint } from 'muze-utils';\n\nexport const generatePayloadFromEvent = function (args, event, firebolt) {\n const context = firebolt.context;\n const pos = getClientPoint(context.getDrawingContext().svgContainer, event.touches ? event.touches[0] : event);\n const nearestPoint = context.getNearestPoint(pos.x, pos.y, {\n data: args,\n event\n });\n return {\n criteria: nearestPoint ? nearestPoint.id : null,\n showInPosition: nearestPoint.showInPosition,\n target: nearestPoint.target,\n position: pos\n };\n};\n","import { getEvent } from 'muze-utils';\nimport { generatePayloadFromEvent } from './helpers';\n\n/**\n * Adds mouse interactions to target element.\n * @param {VisualUnit} instance instance of visual unit.\n * @param {SVGElement} targetEl Element on which the event listeners will be attached.\n * @param {Array} behaviours Array of behaviours\n */\n/* istanbul ignore next */ const click = firebolt => (targetEl, behaviours) => {\n const dispatchBehaviour = function (args) {\n const event = getEvent();\n const payload = generatePayloadFromEvent(args, event, firebolt);\n behaviours.forEach(beh => firebolt.dispatchBehaviour(beh, payload));\n event.stopPropagation();\n };\n\n targetEl.on('click', dispatchBehaviour);\n};\nexport default click;\n","import drag from './drag';\nimport hover from './hover';\nimport { longtouch } from './longtouch';\nimport { touchdrag } from './touch-drag';\nimport * as ACTIONNAMES from '../../enums/actions';\nimport click from './click';\n\nexport const physicalActions = {\n [ACTIONNAMES.DRAG]: drag,\n [ACTIONNAMES.HOVER]: hover,\n [ACTIONNAMES.CLICK]: click,\n [ACTIONNAMES.LONGTOUCH]: longtouch,\n [ACTIONNAMES.TOUCHDRAG]: touchdrag\n};\n\n","import { attachDragEvent } from './helpers/drag-event';\n\n/**\n * Adds dragging action to the target element.\n * @param {VisualUnit} instance Instance of visual unit.\n * @param {SVGElement} targetEl Element on which brushing action is needed.\n * @param {Array} behaviours Array of behaviours\n */\n/* istanbul ignore next */ const drag = firebolt => (targetEl, behaviours) => {\n attachDragEvent(targetEl, behaviours, firebolt);\n};\n\nexport default drag;\n","/* global setTimeout */\nimport { getEvent } from 'muze-utils';\nimport { generatePayloadFromEvent } from './helpers';\n\n/**\n * Adds mouse interactions to target element.\n * @param {VisualUnit} instance instance of visual unit.\n * @param {SVGElement} targetEl Element on which the event listeners will be attached.\n * @param {Array} behaviours Array of behaviours\n */\nexport const longtouch = firebolt => (targetEl, behaviours) => {\n let event;\n let touchEnd;\n const dispatchBehaviour = function (args) {\n const payload = generatePayloadFromEvent(args, event, firebolt);\n behaviours.forEach(beh => firebolt.dispatchBehaviour(beh, payload));\n event.stopPropagation();\n };\n\n touchEnd = false;\n event = getEvent();\n targetEl.on('touchstart', (args) => {\n event = getEvent();\n touchEnd = false;\n setTimeout(() => {\n if (!touchEnd) {\n dispatchBehaviour(args);\n } else {\n behaviours.forEach(beh => firebolt.dispatchBehaviour(beh, {\n criteria: null\n }));\n }\n }, 100);\n }).on('touchend', () => {\n touchEnd = true;\n });\n};\n","import { attachDragEvent } from './helpers/drag-event';\n\n/**\n * Adds dragging action to the target element.\n * @param {VisualUnit} instance Instance of visual unit.\n * @param {SVGElement} targetEl Element on which brushing action is needed.\n * @param {Array} behaviours Array of behaviours\n */\nexport const touchdrag = firebolt => (targetEl, behaviours) => {\n attachDragEvent(targetEl, behaviours, firebolt, true);\n};\n\n","import { mergeRecursive, getUniqueId } from 'muze-utils';\n\nexport default class GenericSideEffect {\n constructor (firebolt) {\n this.firebolt = firebolt;\n this._enabled = true;\n this._strategy = 'default';\n this._config = {};\n this._id = getUniqueId();\n this._strategies = {};\n this.config(this.constructor.defaultConfig());\n }\n\n static defaultConfig () {\n return {};\n }\n\n static target () {\n return 'all';\n }\n\n static mutates () {\n return false;\n }\n\n config (...params) {\n if (params.length) {\n this._config = mergeRecursive(this._config, params[0]);\n return this;\n }\n return this._config;\n }\n\n disable () {\n this._enabled = false;\n return this;\n }\n\n enable () {\n this._enabled = true;\n return this;\n }\n\n isEnabled () {\n return this._enabled;\n }\n\n apply () {\n return this;\n }\n\n addStrategy (name, fn) {\n this._strategies[name] = fn;\n return this;\n }\n}\n","import GenericSideEffect from './generic';\n\nexport default class SurrogateSideEffect extends GenericSideEffect {\n applyInteractionStyle (set, config = {}, interactionType, apply) {\n const layers = this.firebolt.context.layers();\n layers.forEach(layer => layer.config().interactive !== false &&\n layer.applyInteractionStyle(interactionType, set.uids, apply));\n }\n}\n","import { makeElement } from 'muze-utils';\n\nimport GenericSideEffect from './generic';\n\nexport default class SpawnableSideEffect extends GenericSideEffect {\n createElement (container, elemType, data, className, callbacks) {\n return makeElement(container, elemType, data, className, callbacks);\n }\n\n drawingContext (...drawingContext) {\n if (drawingContext.length) {\n this._drawingContext = drawingContext[0];\n return this;\n }\n return this._drawingContext();\n }\n\n show () {\n return this;\n }\n\n hide () {\n return this;\n }\n}\n","import { selectElement } from 'muze-utils';\n\nexport const getBoxDimensionsFromPayload = (payload, axes, axisFields) => {\n let x1;\n let x2;\n let y1;\n let y2;\n let xRange;\n let yRange;\n let direction;\n const criteria = payload.criteria;\n const dimensions = payload.dimensions || {};\n const xDim = dimensions.x;\n const yDim = dimensions.y;\n\n if (criteria === null) {\n return null;\n }\n\n const xAxis = axes.x[0];\n const yAxis = axes.y[0];\n const xLinear = xAxis.constructor.type() === 'linear';\n const yLinear = yAxis.constructor.type() === 'linear';\n const xField = `${axisFields.x[0]}`;\n const yField = `${axisFields.y[0]}`;\n const xCriteria = criteria[xField];\n const yCriteria = criteria[yField];\n\n if (xCriteria && xCriteria[0] instanceof Array) {\n xRange = xCriteria[0];\n yRange = xCriteria[1];\n } else {\n xRange = xCriteria || [];\n yRange = yCriteria || [];\n }\n direction = xCriteria && yCriteria ? 'both' : (xCriteria ? 'vertical' : 'horizontal');\n if (xRange && xRange.length) {\n if ((yAxis.constructor.type() === 'band' && xLinear)) {\n x1 = x2 = undefined;\n direction = 'horizontal';\n } else {\n const domain = xAxis.domain();\n const bandScale = xAxis.constructor.type() === 'band';\n let x1Val;\n let x2Val;\n if (bandScale) {\n let x1DomainIndex = domain.indexOf(xRange[0]);\n let x2DomainIndex = domain.indexOf(xRange[xRange.length - 1]);\n [x1DomainIndex, x2DomainIndex] = [x1DomainIndex, x2DomainIndex].sort((a, b) => a - b);\n x1Val = domain[x1DomainIndex];\n x2Val = domain[x2DomainIndex];\n } else {\n x1Val = xRange[0];\n x2Val = xRange[xRange.length - 1];\n }\n x1 = xAxis.getScaleValue(x1Val);\n x2 = xAxis.getScaleValue(x2Val);\n x2 += bandScale ? xAxis.getUnitWidth() : 0;\n }\n } else {\n x1 = x2 = undefined;\n }\n if (yRange && yRange.length) {\n if ((xAxis.constructor.type() === 'band' && yLinear)) {\n y1 = y2 = undefined;\n direction = 'vertical';\n } else {\n const domain = yAxis.domain();\n const bandScale = yAxis.constructor.type() === 'band';\n let y1Val;\n let y2Val;\n if (bandScale) {\n let y1DomainIndex = domain.indexOf(yRange[0]);\n let y2DomainIndex = domain.indexOf(yRange[yRange.length - 1]);\n [y1DomainIndex, y2DomainIndex] = [y1DomainIndex, y2DomainIndex].sort(((a, b) => b - a));\n y1Val = domain[y1DomainIndex];\n y2Val = domain[y2DomainIndex];\n } else {\n y1Val = yRange[0];\n y2Val = yRange[yRange.length - 1];\n }\n y1 = yAxis.getScaleValue(y1Val);\n y2 = yAxis.getScaleValue(y2Val);\n y2 += yAxis.constructor.type() === 'band' ? yAxis.getUnitWidth() : 0;\n }\n } else {\n y1 = y2 = undefined;\n }\n\n if ((yLinear && xLinear) || !payload.dragEnd) {\n if (xDim) {\n [x1, x2] = xDim;\n }\n if (yDim) {\n [y1, y2] = yDim;\n }\n }\n\n return {\n dimension: {\n x1,\n x2,\n y1,\n y2\n },\n direction\n };\n};\n\nexport const changeVisibility = (context, sideEffectGroup, visible) => {\n const config = context.config();\n const className = config.defClassName;\n const classPrefix = config.classPrefix;\n selectElement(sideEffectGroup).selectAll(`.${classPrefix}-${className}`)\n .style('display', visible ? 'block' : 'none');\n};\n","import {\n getQualifiedClassName,\n selectElement,\n makeElement,\n isValidValue\n} from 'muze-utils';\nimport { CLASSPREFIX } from '../../enums/constants';\nimport './styles.scss';\nimport SpawnableSideEffect from '../spawnable';\nimport { selectionBoxDrag } from '../../actions/physical/selection-box-drag';\nimport { getBoxDimensionsFromPayload, changeVisibility } from './helper';\n\n/**\n * This class is used to create a selection box which is used by visual unit for brushing and\n * selection in the canvas.\n * @class SelectionBox\n */\nclass SelectionBox extends SpawnableSideEffect {\n /**\n * It returns the default configuration needed by selectionbox.\n * @return {Object} Default configuration of the selection box.\n */\n static defaultConfig () {\n return {\n defClassName: 'selection-box-group',\n className: '',\n classPrefix: CLASSPREFIX,\n box: {\n defClassName: 'selection-box',\n className: ''\n },\n transition: {\n duration: 200\n }\n };\n }\n\n static formalName () {\n return 'selectionBox';\n }\n\n /**\n * Draws the selectionbox with the specified dimensions.\n * @param {Object} dimension Dimensions of the selection box.\n * @param {number} dimension.x1 Starting x position\n * @param {number} dimension.x2 Ending x position\n * @param {number} dimension.y1 Starting y position\n * @param {number} dimension.y2 Ending y position\n * @param {Object} conf Configuration needed to draw the selection box\n * @param {number} unitWidth Width of the visual unit.\n * @param {number} unitHeight Height of the visual unit.\n */\n apply (selectionSet, payload) {\n let x;\n let y;\n let width;\n let height;\n const config = this._config;\n const boxConf = config.box;\n const firebolt = this.firebolt;\n const drawingInf = this.drawingContext();\n const mountPoint = drawingInf.sideEffectGroup;\n const unitWidth = drawingInf.width;\n const unitHeight = drawingInf.height;\n const classPrefix = config.classPrefix;\n const selectionGroupClassName = config.defClassName;\n\n if (payload.criteria === null) {\n this.hide(drawingInf);\n return this;\n }\n\n const sourceInf = firebolt.context.getSourceInfo();\n const { dimension, direction } = getBoxDimensionsFromPayload(payload, sourceInf.axes,\n sourceInf.fields);\n const transition = payload.dragEnd && config.transition;\n\n if (direction === 'both' || direction === 'vertical') {\n x = Math.min(dimension.x1, dimension.x2);\n width = Math.abs(dimension.x2 - dimension.x1);\n } else {\n x = 0;\n width = unitWidth;\n }\n if (direction === 'both' || direction === 'horizontal') {\n y = Math.min(dimension.y1, dimension.y2);\n height = Math.abs(dimension.y2 - dimension.y1);\n } else {\n height = unitHeight;\n y = 0;\n }\n this.show(drawingInf);\n // Create the data array for drawing the rectangle\n const points = [\n {\n x,\n y,\n width,\n height\n }\n ];\n // Create the container group for selection box.\n const selectionGroup = makeElement(selectElement(mountPoint), 'g', [1],\n `.${classPrefix}-${selectionGroupClassName}`);\n const sideEffect = this;\n const selection = selectionGroup.selectAll('rect').data(points);\n const selectionBox = selection.enter().append('rect')\n .each(function () {\n selectionBoxDrag(firebolt)(selectElement(this), ['brush'], sideEffect);\n })\n .merge(selection)\n .each(function (attrs) {\n let element = selectElement(this);\n transition && (element = element.transition().duration(transition.duration));\n for (const key in attrs) {\n if ({}.hasOwnProperty.call(attrs, key)) {\n isValidValue(attrs[key]) && element.attr(key, attrs[key]);\n }\n }\n });\n // Get the qualified class name for selection box rectangle\n const boxClassName = getQualifiedClassName(boxConf.defClassName, this._id, classPrefix);\n selectionBox.classed(boxClassName.join(' '), true);\n selectionBox.classed(boxConf.className, true);\n\n return this;\n }\n\n hide (drawingInf) {\n changeVisibility(this, drawingInf.sideEffectGroup, false);\n }\n\n show (drawingInf) {\n changeVisibility(this, drawingInf.sideEffectGroup, true);\n }\n}\n\nexport default SelectionBox;\n\n","import {\n getEvent,\n getD3Drag\n } from 'muze-utils';\n\nimport getDragActionConfig from './helpers/drag-action-config';\n\nexport const selectionBoxDrag = firebolt => (targetEl, behaviours) => {\n let subject;\n let drawingInf;\n const context = firebolt.context;\n const onDrag = (payload) => {\n behaviours.forEach(action => firebolt.dispatchBehaviour(action, payload));\n };\n const d3Drag = getD3Drag();\n\n targetEl.call(d3Drag().on('start', () => {\n const event = getEvent();\n drawingInf = context.getDrawingContext();\n subject = event.subject;\n }).on('drag', () => {\n const event = getEvent();\n subject.x += event.dx;\n subject.y += event.dy;\n const width = drawingInf.width;\n const height = drawingInf.height;\n const x = Math.min(width - subject.width, Math.max(subject.x, 0));\n const y = Math.min(height - subject.height, Math.max(subject.y, 0));\n const y2 = y + subject.height;\n const x2 = x + subject.width;\n\n if (x >= 0 && x2 <= width && y >= 0 && y2 <= height) {\n const payload = getDragActionConfig(context.getSourceInfo(), {\n startPos: {\n x,\n y\n },\n endPos: {\n x: x2,\n y: y2\n }\n }, context.data().getFieldsConfig());\n onDrag(payload);\n }\n }).on('end', () => {\n const width = drawingInf.width;\n const height = drawingInf.height;\n const x = Math.min(width - subject.width, Math.max(subject.x, 0));\n const y = Math.min(height - subject.height, Math.max(subject.y, 0));\n const y2 = y + subject.height;\n const x2 = x + subject.width;\n\n if (x >= 0 && x2 <= width && y >= 0 && y2 <= height) {\n const payload = getDragActionConfig(context.getSourceInfo(), {\n startPos: {\n x,\n y\n },\n endPos: {\n x: x2,\n y: y2\n },\n snap: true\n }, context.data().getFieldsConfig());\n payload.dragEnd = true;\n onDrag(payload);\n }\n }));\n};\n","export const CLASSPREFIX = 'muze';\nexport const ARROW_RIGHT = 'right';\nexport const ARROW_TOP = 'top';\nexport const ARROW_BOTTOM = 'bottom';\nexport const ARROW_LEFT = 'left';\nexport const TOOLTIP_LEFT = 'left';\nexport const TOOLTIP_RIGHT = 'right';\nexport const TOOLTIP_BOTTOM = 'bottom';\nexport const TOOLTIP_TOP = 'top';\nexport const INITIAL_STYLE = {\n position: 'absolute',\n width: 0,\n height: 0\n};\n","import { CLASSPREFIX } from './constants';\n\nexport const defaultConfig = {\n classPrefix: CLASSPREFIX,\n defClassName: 'tooltip-box',\n connectorClassName: 'tooltip-connectors',\n className: '',\n row: {\n margin: 0\n },\n content: {\n spacing: 5,\n iconContainerSize: 10,\n iconScale: 1,\n iconShape: 'circle',\n iconColor: '#ff0000',\n rowMargin: '0px',\n margin: 10,\n separator: ':',\n className: 'tooltip-content-container',\n parentClassName: 'tooltip-content-parent-container'\n },\n arrow: {\n size: 10,\n disabled: false,\n defClassName: 'tooltip-arrow',\n className: '',\n color: 'rgba(195,195,195,0.85)'\n }\n};\n","import { getQualifiedClassName } from 'muze-utils';\nimport { TOOLTIP_LEFT, TOOLTIP_RIGHT, ARROW_RIGHT, ARROW_LEFT, TOOLTIP_BOTTOM } from './constants';\n\nexport const getArrowPos = (orient, dim, measurement, config) => {\n let arrowPos;\n const { x, y, boxHeight, boxWidth } = measurement;\n const arrowDisabled = config.arrow.disabled;\n const arrowWidth = arrowDisabled ? 0 : config.arrow.size;\n\n if (orient === ARROW_LEFT || orient === ARROW_RIGHT) {\n let start = 0;\n let diff = boxHeight / 2;\n const plotBottom = dim.y + dim.height;\n const boxBottom = y + boxHeight;\n\n if (dim.y > y) {\n start = dim.y - y;\n diff = (plotBottom >= boxBottom ? (boxBottom - dim.y) : dim.height) / 2;\n } else if (boxBottom > plotBottom) {\n diff = Math.abs(y - (dim.y + dim.height)) / 2;\n }\n arrowPos = start + diff - arrowWidth / 2;\n } else {\n let start = 0;\n let diff = boxWidth / 2;\n const plotRight = dim.x + dim.width;\n const boxRight = x + boxWidth;\n\n if (dim.x > x) {\n start = dim.x - x;\n diff = (plotRight >= boxRight ? (boxRight - dim.x) : dim.width) / 2;\n } else if (boxRight > plotRight) {\n diff = Math.abs(x - (dim.x + dim.width)) / 2;\n }\n arrowPos = start + diff - arrowWidth / 2;\n }\n return arrowPos;\n};\n\n/**\n * Places the arrow in the specified arrow position. It also applies appropriate arrow\n * class name to the arrow element.\n * @param {string} position Left, bottom or right position of the arrow;\n * @param {number} arrowPos position of arrow in pixels\n * @return {Tooltip} Instance of tooltip.\n */\nexport const placeArrow = (context, position, arrowPos) => {\n const tooltipArrow = context._tooltipArrow;\n const tooltipBackground = context._tooltipBackground;\n const config = context._config;\n const classPrefix = config.classPrefix;\n const arrowConf = config.arrow;\n const className = getQualifiedClassName(arrowConf.defClassName, context._id, config.classPrefix);\n\n tooltipArrow.style('display', 'block');\n tooltipArrow.attr('class', `${className.join(' ')}`);\n if (position === TOOLTIP_LEFT || position === TOOLTIP_RIGHT) {\n tooltipArrow.style('top', `${arrowPos}px`);\n tooltipArrow.style('left', '');\n tooltipBackground.style('top', `${arrowPos}px`);\n tooltipBackground.style('left', '');\n } else {\n position === TOOLTIP_BOTTOM ? tooltipArrow.style('top', '100%') : tooltipArrow.style('top',\n `-${arrowConf.size}px`);\n tooltipArrow.style('left', `${arrowPos}px`);\n position === TOOLTIP_BOTTOM ? tooltipBackground.style('top', '100%') : tooltipBackground.style('top',\n `-${arrowConf.size + 3}px`);\n tooltipBackground.style('left', `${arrowPos}px`);\n }\n tooltipArrow.classed(`${classPrefix}-tooltip-arrow`, true);\n tooltipArrow.classed(`${classPrefix}-tooltip-arrow-${context._arrowOrientation}`, false);\n tooltipArrow.classed(`${classPrefix}-tooltip-arrow-${position}`, true);\n tooltipBackground.classed(`${classPrefix}-tooltip-background-arrow`, true);\n tooltipBackground.classed(`${classPrefix}-tooltip-background-arrow-${context._arrowOrientation}`, false);\n tooltipBackground.classed(`${classPrefix}-tooltip-background-arrow-${position}`, true);\n return this;\n};\n\nexport const reorderContainers = (parentContainer, className) => {\n parentContainer.selectAll(className).sort((a, b) => a - b);\n};\n","import {\n getClosestIndexOf,\n DateTimeFormatter,\n DimensionSubtype,\n FieldType\n} from 'muze-utils';\n\nconst timeFormats = {\n millisecond: '%A, %b %e, %H:%M:%S.%L',\n second: '%A, %b %e, %H:%M:%S',\n minute: '%A, %b %e, %H:%M',\n hour: '%A, %b %e, %H:%M',\n day: '%A, %b %e, %Y',\n month: '%B %Y',\n year: '%Y'\n};\nconst timeDurations = [\n ['millisecond', 'second', 'minute', 'hour', 'day', 'month', 'year'],\n [1, 1000, 60000, 3600000, 86400000, 2592000000, 31536000000]\n];\nconst getNearestInterval = (interval) => {\n const index = getClosestIndexOf(timeDurations[1], interval);\n return timeDurations[0][index];\n};\nconst defaultTooltipFormatters = (type, formatter) => {\n const formatters = {\n [DimensionSubtype.TEMPORAL]: (value, interval) => {\n const nearestInterval = getNearestInterval(interval);\n return DateTimeFormatter.formatAs(value, timeFormats[nearestInterval]);\n },\n [FieldType.MEASURE]: value => formatter(value ? value.toFixed(2) : value),\n [FieldType.DIMENSION]: value => value\n };\n return formatters[type];\n};\n\nconst getTabularData = (data, schema, fieldspace, timeDiffs) => {\n const rows = [];\n rows.push(schema.map(d => d.name));\n data.forEach((d) => {\n const row = [];\n schema.forEach((fieldObj, i) => {\n const interval = fieldObj.subtype === DimensionSubtype.TEMPORAL ? timeDiffs[fieldObj.name] : 0;\n const numberFormat = fieldObj.type === FieldType.MEASURE && fieldspace.fields[i]._ref.numberFormat();\n const formatterFn = defaultTooltipFormatters(fieldObj.subtype || fieldObj.type, numberFormat);\n const value = formatterFn(d[i], interval);\n row.push(value);\n });\n rows.push(row);\n });\n return rows;\n};\n\nexport const buildTooltipData = (dataModel, config = {}, context) => {\n let fieldValues = [];\n const dataObj = dataModel.getData();\n const data = dataObj.data;\n const schema = dataObj.schema;\n const formatters = config.formatters;\n const separator = config.separator;\n const fieldsConfig = dataModel.getFieldsConfig();\n const fieldspace = dataModel.getFieldspace();\n const fieldsObj = fieldspace.fieldsObj();\n const dimensionMeasureMap = context.dimensionMeasureMap;\n const axes = context.axes;\n const detailFields = context.detailFields || [];\n const dimensions = schema.filter(d => d.type === FieldType.DIMENSION);\n const measures = schema.filter(d => d.type === FieldType.MEASURE);\n // const containsRetinalField = schema.find(d => d.name in dimensionMeasureMap);\n const containsDetailField = schema.find(d => detailFields.indexOf(d.name) !== -1);\n const dataLen = data.length;\n const getRowContent = (field, type) => {\n let value;\n let formattedValue;\n let measureIndex;\n const values = [];\n const index = fieldsConfig[field].index;\n const interval = fieldsConfig[field].def.subtype === DimensionSubtype.TEMPORAL ?\n fieldsObj[field].getMinDiff() : 0;\n const formatterFn = (formatters && formatters[field]) || defaultTooltipFormatters(type, val => val);\n\n if (value !== null) {\n let uniqueVals = type === FieldType.MEASURE ? data.map(d => d[index]) :\n [...new Set(data.map(d => d[index]))];\n uniqueVals = uniqueVals.filter(d => d !== '');\n const colorAxis = axes.color[0];\n const shapeAxis = axes.shape[0];\n const sizeAxis = axes.size[0];\n const isRetinalField = (colorAxis || shapeAxis || sizeAxis) && dataLen > 1 &&\n type !== FieldType.MEASURE;\n\n uniqueVals.forEach((val, i) => {\n let key;\n const associatedMeasures = dimensionMeasureMap[field];\n\n if (associatedMeasures && associatedMeasures.length && dataLen > 1) {\n key = val;\n let icon = {\n value: ''\n };\n\n if (isRetinalField) {\n icon = {\n type: 'icon',\n color: colorAxis.getColor(val),\n shape: shapeAxis.getShape(val),\n size: sizeAxis.getSize(val) * config.iconScale\n };\n }\n if (associatedMeasures.length > 1) {\n values.push([icon, `${key}`]);\n associatedMeasures.forEach((measure) => {\n measureIndex = fieldsConfig[measure].index;\n value = data[i][measureIndex];\n formattedValue = defaultTooltipFormatters('measure',\n fieldspace.fields[measureIndex]._ref.numberFormat())(value, interval);\n values.push([{\n value: `${measure}${separator}`,\n style: {\n 'margin-left': `${config.margin}px}`\n },\n className: `${config.classPrefix}-tooltip-key`\n }, {\n value: `${formattedValue}`,\n className: `${config.classPrefix}-tooltip-value`\n }]);\n });\n } else {\n measureIndex = fieldsConfig[associatedMeasures[0]].index;\n value = data[i][measureIndex];\n formattedValue = defaultTooltipFormatters('measure',\n fieldspace.fields[measureIndex]._ref.numberFormat())(value, interval);\n values.push([icon, {\n value: `${key}${separator}`,\n className: `${config.classPrefix}-tooltip-key`\n }, {\n value: `${formattedValue}`,\n className: `${config.classPrefix}-tooltip-value`\n }]);\n }\n } else {\n key = field;\n value = val;\n formattedValue = formatterFn(value, interval);\n values.push([{\n value: `${key}${separator}`,\n className: `${config.classPrefix}-tooltip-key`\n }, {\n value: `${formattedValue}`,\n className: `${config.classPrefix}-tooltip-value`\n }]);\n }\n });\n }\n return values;\n };\n let displayFormat = 'keyValue';\n\n if (dataLen > 1 && containsDetailField) {\n fieldValues = getTabularData(data, schema, fieldspace, context.timeDiffs);\n displayFormat = 'table';\n } else {\n dimensions.forEach((item) => {\n const type = item.subtype ? item.subtype : item.type;\n fieldValues = [...fieldValues, ...getRowContent(item.name, type)];\n });\n\n const allMeasures = [...new Set(...Object.values(dimensionMeasureMap))];\n const filteredMeasures = dataLen > 1 ? measures.filter(d => allMeasures.indexOf(d.name) === -1)\n : measures;\n\n filteredMeasures.forEach((item) => {\n const type = item.subtype ? item.subtype : item.type;\n fieldValues = [...fieldValues, ...getRowContent(item.name, type)];\n });\n }\n\n return {\n content: fieldValues,\n displayFormat\n };\n};\n\n/**\n * This contains the strategy methods for showing tooltip in the chart.\n * @param {VisualUnit} context Attached instance.\n */\nexport const strategy = {\n keyValue: (data, config, context) => {\n const values = buildTooltipData(data, config, context);\n return values;\n }\n};\n\nexport const DEFAULT_STRATEGY = 'keyValue';\n","import {\n selectElement,\n mergeRecursive,\n makeElement,\n setAttrs,\n setStyles,\n getSymbol,\n isSimpleObject\n} from 'muze-utils';\nimport { DEFAULT_STRATEGY, strategy } from './strategy';\nimport { defaultConfig } from './default-config';\n\n/**\n * This class is used to manage the content of tooltip.\n */\nexport default class Content {\n /**\n * Creates an instance of content.\n */\n constructor () {\n this._model = null;\n this._strategy = DEFAULT_STRATEGY;\n this._formatter = null;\n this._config = this.constructor.defaultConfig();\n }\n /**\n * Returns the default configuration of tooltip\n * @return {Object} Configuration of tooltip.\n */\n static defaultConfig () {\n const config = defaultConfig.content;\n config.classPrefix = defaultConfig.classPrefix;\n return config;\n }\n\n config (...c) {\n if (c.length > 0) {\n this._config = mergeRecursive(this._config, c[0]);\n return this;\n }\n return this._config;\n }\n\n /**\n * Update model. The format contains presentation strategy which determines how to show the content.\n * If no strategy is mentioned then default is to show key value pair\n */\n update (item) {\n this._model = item.model;\n this._strategy = item.strategy !== undefined ? item.strategy : DEFAULT_STRATEGY;\n this._formatter = item.formatter;\n return this;\n }\n\n context (ctx) {\n this._context = ctx;\n return this;\n }\n\n render (mount) {\n let data;\n const config = this._config;\n const iconContainerSize = config.iconContainerSize;\n const formatter = this._formatter;\n const rowMargin = config.rowMargin;\n const model = this._model;\n\n this._mount = mount;\n if (model instanceof Array) {\n data = model;\n } else {\n data = formatter instanceof Function ? formatter(this._model, this._context) :\n strategy[this._strategy](this._model, this.config(), this._context);\n }\n\n if (data instanceof Function) {\n mount.html(data());\n } else {\n let content = data;\n let displayFormat = 'default';\n\n if (isSimpleObject(data)) {\n content = data.content;\n displayFormat = data.displayFormat;\n }\n\n const body = makeElement(mount, 'div', [displayFormat], `${config.classPrefix}-tooltip-content`, {},\n d => d);\n\n if (displayFormat === 'table') {\n const table = makeElement(body, 'table', [1], `${config.classPrefix}-tooltip-table`);\n const tbody = makeElement(table, 'tbody', [1], `${config.classPrefix}-tooltip-table-tbody`);\n const rows = makeElement(tbody, 'tr', content, `${config.classPrefix}-tooltip-table-row`);\n rows.each(function (d, i) {\n selectElement(this).classed(`${config.classPrefix}-tooltip-table-row-${i}`, true);\n });\n const cells = makeElement(rows, 'td', d => d, `${config.classPrefix}-tooltip-table-cell`);\n cells.each(function (d) {\n selectElement(this).html(d);\n });\n } else {\n const rows = makeElement(body, 'div', content, `${config.classPrefix}-tooltip-row`);\n const cells = makeElement(rows, 'span', d => d, `${config.classPrefix}-tooltip-content`);\n cells.attr('class', `${config.classPrefix}-tooltip-content`);\n setStyles(rows, {\n margin: rowMargin\n });\n setStyles(cells, {\n display: 'inline-block',\n 'margin-right': `${config.spacing}px`\n });\n\n cells.each(function (d) {\n const el = selectElement(this);\n el.html('');\n if (d instanceof Object) {\n if (d.type === 'icon') {\n const svg = makeElement(el, 'svg', [1]);\n const path = makeElement(svg, 'path', [1]);\n const shape = d.shape instanceof Function ? d.shape : getSymbol(d.shape);\n\n setAttrs(svg, {\n x: 0,\n y: 0,\n width: iconContainerSize,\n height: iconContainerSize\n });\n setAttrs(path, {\n d: shape.size(d.size)(),\n transform: `translate(${iconContainerSize / 2}, ${iconContainerSize / 2})`\n });\n setStyles(path, {\n fill: d.color\n });\n setStyles(svg, {\n width: `${iconContainerSize}px`,\n height: `${iconContainerSize}px`\n });\n } else {\n el.html(d.value);\n d.className && el.classed(d.className, true);\n setStyles(el, d.style);\n }\n } else {\n el.html(d);\n }\n });\n }\n }\n return this;\n }\n\n clear () {\n this._model = null;\n return this;\n }\n}\n","import {\n mergeRecursive,\n getQualifiedClassName,\n getUniqueId,\n selectElement,\n setStyles,\n makeElement\n} from 'muze-utils';\nimport { ARROW_BOTTOM, ARROW_LEFT, ARROW_RIGHT, TOOLTIP_LEFT, TOOLTIP_RIGHT, TOOLTIP_BOTTOM, TOOLTIP_TOP,\n INITIAL_STYLE } from './constants';\nimport { defaultConfig } from './default-config';\nimport { getArrowPos, placeArrow, reorderContainers } from './helper';\nimport './styles.scss';\nimport Content from './content';\n\n/**\n * This component is responsible for creating a tooltip element. It appends the tooltip\n * in the body element.\n * @class Tooltip\n */\nexport default class Tooltip {\n /**\n * Initializes the tooltip with the container element and configuration\n * @param {HTMLElement} container container where the tooltip will be mounted.\n * @param {string} className Class name of the tooltip.\n */\n constructor (htmlContainer, svgContainer) {\n let connectorContainer = svgContainer;\n this._id = getUniqueId();\n this._config = {};\n this.config({});\n const tooltipConf = this._config;\n const classPrefix = tooltipConf.classPrefix;\n const contentClass = tooltipConf.content.parentClassName;\n const container = makeElement(htmlContainer, 'div', [1], `${classPrefix}-tooltip-container`);\n this._container = container;\n this._tooltipContainer = container.append('div').style('position', 'absolute');\n this._contentContainer = this._tooltipContainer.append('div').attr('class', `${classPrefix}-${contentClass}`);\n this._tooltipBackground = this._tooltipContainer.append('div').style('position', 'relative');\n this._tooltipArrow = this._tooltipContainer.append('div');\n\n if (!svgContainer) {\n connectorContainer = htmlContainer.append('svg').style('pointer-events', 'none');\n }\n this._contents = {};\n this._tooltipConnectorContainer = selectElement(connectorContainer)\n .append('g')\n .attr('class', `${tooltipConf.classPrefix}-${tooltipConf.connectorClassName}`);\n const id = this._id;\n const defClassName = tooltipConf.defClassName;\n const qualifiedClassName = getQualifiedClassName(defClassName, id, tooltipConf.classPrefix);\n\n setStyles(this._tooltipArrow, INITIAL_STYLE);\n setStyles(this._tooltipBackground, INITIAL_STYLE);\n this.addClass(qualifiedClassName.join(' '));\n this.addClass(tooltipConf.className);\n this.hide();\n }\n\n /**\n * Sets the configuration of tooltip.\n * @param {Object} config Configuration of tooltip\n * @return {Tooltip} Instance of tooltip\n */\n config (...config) {\n if (config.length > 0) {\n const defConf = mergeRecursive({}, this.constructor.defaultConfig());\n this._config = mergeRecursive(defConf, config[0]);\n return this;\n }\n return this._config;\n }\n\n /**\n * Returns the default configuration of tooltip\n * @return {Object} Configuration of tooltip.\n */\n static defaultConfig () {\n return defaultConfig;\n }\n /**\n * Sets the class name of tooltip\n * @param {string} className tooltip class name\n * @return {Tooltip} Instance of tooltip.\n */\n addClass (className) {\n this._tooltipContainer.classed(className, true);\n return this;\n }\n\n context (...ctx) {\n if (ctx.length) {\n this._context = ctx[0];\n return this;\n }\n return this._context;\n }\n\n content (name, data, contentConfig = {}) {\n const config = this.config();\n const { classPrefix } = config;\n const contentClass = config.content.className;\n const formatter = config.formatter;\n const className = contentConfig.className || `${classPrefix}-${contentClass}-${name}`;\n const content = this._contents[name] = this._contents[name] || new Content();\n const container = makeElement(this._contentContainer, 'div', [contentConfig.order], className);\n container.attr('class', `${classPrefix}-${contentClass} ${className}`);\n reorderContainers(this._contentContainer, `.${classPrefix}-${contentClass}`);\n const contentConf = config.content;\n contentConfig.classPrefix = this._config.classPrefix;\n content.config(contentConf);\n\n if (data === null) {\n content.clear();\n container.remove();\n delete this._contents[name];\n } else {\n content.update({\n model: data,\n formatter: contentConfig.formatter || formatter\n });\n content.context(this._context);\n content.render(container);\n }\n\n if (!Object.keys(this._contents).length) {\n this.hide();\n }\n return this;\n }\n\n getContents () {\n return Object.values(this._contents);\n }\n\n /**\n * Positions the tooltip at the given x and y position.\n * @param {number} x x position\n * @param {number} y y position\n * @return {Tooltip} Instance of tooltip.\n */\n position (x, y, conf = {}) {\n if (!Object.keys(this._contents).length) {\n this.hide();\n return this;\n }\n this.show();\n const target = this._target;\n const repositionArrow = conf.repositionArrow;\n\n if (target && repositionArrow) {\n const node = this._tooltipContainer.node();\n const config = this._config;\n const arrowDisabled = config.arrow.disabled;\n const arrowWidth = arrowDisabled ? 0 : config.arrow.size;\n const arrowOrient = this._arrowOrientation;\n const outsidePlot = arrowOrient === ARROW_LEFT || arrowOrient === ARROW_RIGHT ?\n (y + node.offsetHeight - arrowWidth) < target.y || y > (target.y + target.height) :\n (x + node.offsetWidth - arrowWidth) < target.x || x > (target.x + target.width);\n\n if (!arrowDisabled) {\n if (outsidePlot) {\n let path;\n this._tooltipArrow.style('display', 'none');\n this._tooltipBackground.style('display', 'none');\n this._tooltipConnectorContainer.style('display', 'block');\n const connector = this._tooltipConnectorContainer.selectAll('path').data([1]);\n const enter = connector.enter().append('path');\n if (arrowOrient === ARROW_LEFT) {\n path = `M ${x} ${y + node.offsetHeight / 2} L ${target.x + target.width}`\n + ` ${target.y + target.height / 2}`;\n } else if (arrowOrient === ARROW_RIGHT) {\n path = `M ${x + node.offsetWidth} ${y + node.offsetHeight / 2}`\n + ` L ${target.x} ${target.y + target.height / 2}`;\n } else if (arrowOrient === ARROW_BOTTOM) {\n path = `M ${x + node.offsetWidth / 2} ${y + node.offsetHeight}`\n + ` L ${target.x + target.width / 2} ${target.y}`;\n }\n enter.merge(connector).attr('d', path).style('display', 'block');\n } else {\n const arrowPos = getArrowPos(arrowOrient, target, {\n x,\n y,\n boxHeight: node.offsetHeight,\n boxWidth: node.offsetWidth\n }, this._config);\n\n placeArrow(this, this._arrowOrientation, arrowPos);\n this._tooltipConnectorContainer.style('display', 'none');\n }\n }\n }\n\n const offset = this._offset || {\n x: 0,\n y: 0\n };\n this._tooltipContainer.style('left', `${offset.x + x}px`).style('top',\n `${offset.y + y}px`);\n\n return this;\n }\n\n /**\n * Positions the tooltip relative to a rectangular box. It takes care of tooltip overflowing the\n * boundaries.\n * @param {Object} dim Dimensions of the plot.\n */\n positionRelativeTo (dim, tooltipConf = {}) {\n let obj;\n let orientation = tooltipConf.orientation;\n this.show();\n if (!dim) {\n this.hide();\n return this;\n }\n\n const extent = this._extent;\n const node = this._tooltipContainer.node();\n\n this._tooltipContainer.style('top', '0px')\n .style('left', '0px');\n const offsetWidth = node.offsetWidth + 2;\n const offsetHeight = node.offsetHeight + 2;\n const config = this._config;\n const offset = this._offset;\n const arrowDisabled = config.arrow.disabled;\n const arrowSize = arrowDisabled ? 0 : config.arrow.size;\n const draw = tooltipConf.draw !== undefined ? tooltipConf.draw : true;\n const topSpace = dim.y;\n // When there is no space in right\n const dimX = dim.x + dim.width + offset.x;\n const rightSpace = extent.width - dimX;\n const leftSpace = dim.x + offset.x - extent.x;\n const positionTop = topSpace > (offsetHeight + arrowSize);\n const positionRight = rightSpace >= offsetWidth + arrowSize;\n const positionLeft = leftSpace >= offsetWidth + arrowSize;\n\n const positionHorizontal = () => {\n let position;\n let x = dim.x + dim.width;\n let y = dim.y;\n\n if (positionRight) {\n position = TOOLTIP_LEFT;\n x += arrowSize;\n } else if (positionLeft) {\n x = dim.x - offsetWidth;\n position = TOOLTIP_RIGHT;\n x -= arrowSize;\n } else {\n position = 'left';\n x += arrowSize;\n }\n if (dim.height < offsetHeight) {\n y = Math.max(0, dim.y + dim.height / 2 - offsetHeight / 2);\n }\n\n const arrowPos = getArrowPos(position, dim, {\n x,\n y,\n boxHeight: offsetHeight,\n boxWidth: offsetWidth\n }, this._config);\n\n return {\n position,\n arrowPos,\n x,\n y\n };\n };\n\n const positionVertical = () => {\n let position;\n let y;\n // Position tooltip at the center of plot\n let x = dim.x - offsetWidth / 2 + dim.width / 2;\n\n // Overflows to the right\n if ((extent.width - (dim.x + offset.x)) < offsetWidth) {\n x = extent.width - offsetWidth - offset.x;\n } else if ((x + offset.x) < extent.x) { // Overflows to the left\n x = extent.x;\n }\n\n if (positionTop) {\n y = dim.y - offsetHeight - arrowSize;\n position = TOOLTIP_BOTTOM;\n } else {\n y = dim.y + dim.height + arrowSize;\n position = TOOLTIP_TOP;\n }\n\n const arrowPos = getArrowPos(position, dim, {\n x,\n y,\n boxHeight: offsetHeight,\n boxWidth: offsetWidth\n }, this._config);\n\n return {\n position,\n arrowPos,\n x,\n y\n };\n };\n\n this._target = dim;\n if (!orientation) {\n if (positionTop) {\n orientation = 'vertical';\n } else if (positionRight || positionLeft) {\n orientation = 'horizontal';\n } else {\n orientation = 'vertical';\n }\n }\n\n if (orientation === 'horizontal') {\n obj = positionHorizontal();\n } else if (orientation === 'vertical') {\n obj = positionVertical();\n }\n\n this._position = {\n x: obj.x,\n y: obj.y\n };\n\n this._arrowPos = obj.arrowPos;\n if (!arrowDisabled) {\n placeArrow(this, obj.position, obj.arrowPos);\n } else {\n this._tooltipArrow.style('display', 'none');\n this._tooltipBackground.style('display', 'none');\n }\n this._arrowOrientation = obj.position;\n draw && this.position(obj.x, obj.y);\n return this;\n }\n\n /**\n * Hides the tooltip element.\n * @return {Tooltip} Instance of tooltip.\n */\n hide () {\n this._tooltipContainer.style('display', 'none');\n this._tooltipConnectorContainer.style('display', 'none');\n return this;\n }\n\n /**\n * Shows the tooltip element.\n * @return {Tooltip} Instance of tooltip.\n */\n show () {\n this._tooltipContainer.style('display', 'block');\n return this;\n }\n\n extent (extent) {\n this._extent = extent;\n return this;\n }\n\n offset (offset) {\n this._offset = offset;\n return this;\n }\n\n remove () {\n this._tooltipContainer.remove();\n this._tooltipBackground.remove();\n this._tooltipConnectorContainer.remove();\n return this;\n }\n}\n","import { FieldType } from 'muze-utils';\n\nexport const strategies = {\n showSelectedItems: (dm) => {\n const dataObj = dm.getData();\n const measures = dataObj.schema.filter(d => d.type === FieldType.MEASURE);\n const aggregatedModel = dm.groupBy([''], measures.reduce((acc, v) => {\n acc[v.name] = v.defAggFn === 'count' ? 'sum' : v.defAggFn;\n return acc;\n }, {}));\n const fieldsObj = dm.getFieldspace().fieldsObj();\n const fieldsConf = aggregatedModel.getFieldsConfig();\n let values = [{\n value: `${dataObj.data.length}`,\n style: {\n 'font-weight': 'bold'\n }\n }, 'Items Selected'];\n const measureNames = measures.map(d => d.name);\n if (measureNames.length) {\n values = [...values, ...[`(${fieldsObj[measureNames[0]].defAggFn().toUpperCase()}) ${measureNames[0]}`,\n {\n value: `${aggregatedModel.getData().data[0][fieldsConf[measureNames[0]].index].toFixed(2)}`,\n style: {\n 'font-weight': 'bold'\n }\n }]];\n }\n return [values];\n }\n};\n","import { Tooltip as TooltipRenderer } from '@chartshq/muze-tooltip';\nimport { FieldType } from 'muze-utils';\nimport { spaceOutBoxes } from '../helper';\nimport { strategies } from './strategies';\nimport { FRAGMENTED } from '../../enums/constants';\nimport SpawnableSideEffect from '../spawnable';\n\nimport './styles.scss';\n\nexport default class Tooltip extends SpawnableSideEffect {\n constructor (...params) {\n super(...params);\n this._tooltips = {};\n this._strategies = strategies;\n this._strategy = 'default';\n }\n\n static defaultConfig () {\n return {\n padding: 5,\n offset: {\n x: 0,\n y: 0\n }\n };\n }\n\n static formalName () {\n return 'tooltip';\n }\n\n apply (selectionSet, payload, options = {}) {\n let totalHeight = 0;\n let totalWidth = 0;\n const dataModel = selectionSet.mergedEnter.model;\n const context = this.firebolt.context;\n const drawingInf = this.drawingContext();\n if ((dataModel.isEmpty() || payload.criteria === null) || selectionSet.isSourceFieldPresent === false) {\n this.hide(options, null);\n return this;\n }\n\n const tooltips = this._tooltips;\n const config = this.config();\n const boundBox = {\n width: drawingInf.width,\n height: drawingInf.height\n };\n const showInPosition = payload.showInPosition;\n const pad = config.padding;\n const dataModels = [];\n const fragmented = config.mode === FRAGMENTED;\n const sourceInf = context.getSourceInfo();\n const fields = sourceInf.fields;\n const xFieldDim = fields.x[0] ? fields.x[0].type() === FieldType.DIMENSION : false;\n const showVertically = !!xFieldDim;\n const tooltipPos = payload.position;\n const boxes = [];\n const enter = {};\n const uids = dataModel.getData().uids;\n if (fragmented) {\n dataModels.push(...uids.map(d => dataModel.select((fieldsArr, i) => i === d, {\n saveChild: false\n })));\n } else {\n dataModels.push(dataModel);\n }\n\n let target = payload.target;\n let targetFields = [];\n if (target) {\n targetFields = target[0] || [];\n const sourceFields = payload.sourceFields;\n const indices = [];\n for (let i = 0, len = targetFields.length; i < len; i++) {\n if (sourceFields.indexOf(targetFields[i]) !== -1) {\n indices.push(i);\n }\n }\n target = target.map(d => d.filter((v, i) => indices.indexOf(i) !== -1));\n }\n\n const plotDimensions = context.getPlotPointsFromIdentifiers(target || payload.criteria, {\n getBBox: true\n });\n\n // Show tooltip for each datamodel\n for (let i = 0; i < dataModels.length; i++) {\n let plotDim = plotDimensions[i];\n if (fragmented) {\n const dimensions = dataModels[i].getData().schema.filter(d => d.type === FieldType.DIMENSION)\n .map(d => d.name);\n plotDim = context.getPlotPointsFromIdentifiers(dataModels[i].project(dimensions), { getBBox: true });\n plotDim = plotDim && plotDim[0];\n }\n\n let dt = dataModels[i];\n if (config.fields) {\n dt = dt.project(config.fields, {\n saveChild: false\n });\n }\n if (config.dataTransform) {\n dt = config.dataTransform(dt, i);\n }\n\n enter[i] = true;\n const layoutContainer = drawingInf.parentContainer;\n const layoutBoundBox = layoutContainer.getBoundingClientRect();\n const unitBoundBox = drawingInf.htmlContainer.getBoundingClientRect();\n\n const offsetLeft = unitBoundBox.left - layoutBoundBox.left;\n const offsetTop = unitBoundBox.top - layoutBoundBox.top;\n const tooltipInst = tooltips[i] = tooltips[i] || new TooltipRenderer(layoutContainer,\n drawingInf.svgContainer);\n\n sourceInf.payload = payload;\n sourceInf.firebolt = this.firebolt;\n sourceInf.detailFields = context.detailFields();\n sourceInf.timeDiffs = context.timeDiffsByField();\n tooltipInst.context(sourceInf);\n const strategy = strategies[options.strategy];\n tooltipInst.content(options.strategy || this._strategy, dt, {\n formatter: strategy,\n order: options.order\n })\n .config(this.config())\n .extent({\n x: 0,\n y: 0,\n width: layoutBoundBox.width,\n height: layoutBoundBox.height\n })\n .offset({\n x: offsetLeft + (config.offset.x || 0),\n y: offsetTop + (config.offset.y || 0)\n });\n\n if (showInPosition) {\n tooltipInst.position(tooltipPos.x + pad, tooltipPos.y + pad);\n } else if (plotDim) {\n tooltipInst.positionRelativeTo({\n x: plotDim.x,\n y: plotDim.y,\n width: plotDim.width || 0,\n height: plotDim.height || 0\n }, {\n orientation: fragmented ?\n (showVertically ? 'horizontal' : 'vertical') : undefined\n });\n } else {\n tooltipInst.hide();\n break;\n }\n\n if (fragmented) {\n const position = tooltipInst._position;\n const tooltipBoundBox = tooltipInst._tooltipContainer.node().getBoundingClientRect();\n\n totalHeight += tooltipBoundBox.height + pad;\n totalWidth += tooltipBoundBox.width + pad;\n if (showVertically ? totalHeight > drawingInf.height : totalWidth > drawingInf.width) {\n break;\n }\n boxes.push({\n x: position.x,\n y: position.y,\n width: tooltipBoundBox.width,\n height: tooltipBoundBox.height,\n tooltip: tooltipInst\n });\n }\n }\n\n for (const key in tooltips) {\n if (!enter[key]) {\n const tooltip = tooltips[key];\n tooltip.content(payload.action, null);\n if (!tooltip.getContents().length) {\n tooltip.remove();\n delete tooltips[key];\n }\n }\n }\n if (fragmented) {\n spaceOutBoxes(boxes, boundBox, showVertically);\n boxes.forEach(box => box.tooltip.position(box.x, box.y, {\n repositionArrow: true\n }));\n }\n return this;\n }\n\n hide (options) {\n const tooltips = this._tooltips;\n for (const key in tooltips) {\n if ({}.hasOwnProperty.call(tooltips, key)) {\n const strategy = options.strategy || this._strategy;\n tooltips[key].content(strategy, null);\n tooltips[key].hide();\n }\n }\n }\n}\n","export const spaceOutBoxes = (boxes, extent, showVertically) => {\n let y;\n let height;\n let x;\n let width;\n let i;\n const pad = 5;\n const len = boxes.length;\n const spaceOutIfOverlap = (firstBox, secondBox, opposite) => {\n x = firstBox.x;\n width = firstBox.width;\n y = firstBox.y;\n height = firstBox.height;\n const bottom = y + height;\n const right = x + width;\n\n if (showVertically) {\n if (opposite ? y < (secondBox.y + secondBox.height) : bottom > secondBox.y) {\n secondBox.y = opposite ? firstBox.y - secondBox.height - pad :\n bottom + pad;\n }\n } else if (opposite ? x < (secondBox.x + secondBox.width) : right > secondBox.x) {\n secondBox.x = opposite ? firstBox.x - secondBox.width - pad :\n right + pad;\n }\n };\n\n boxes.sort((a, b) => (showVertically ? a.y - b.y : a.x - b.x));\n i = 0;\n\n for (i = 0; i < len - 1; i++) {\n spaceOutIfOverlap(boxes[i], boxes[i + 1]);\n }\n\n if ((boxes[i].y + boxes[i].height) > extent.height ||\n (boxes[i].x + boxes[i].width) > extent.width) {\n if (showVertically) {\n boxes[i].y -= (boxes[i].height + boxes[i].y) - extent.height;\n } else {\n boxes[i].x -= (boxes[i].width + boxes[i].x) - extent.width;\n }\n for (i = len - 1; i > 0; i--) {\n spaceOutIfOverlap(boxes[i], boxes[i - 1], true);\n }\n }\n return boxes;\n}\n;\n","import { selectElement, FieldType } from 'muze-utils';\n\nimport './styles.scss';\nimport { CLASSPREFIX } from '../../enums/constants';\nimport SpawnableSideEffect from '../spawnable';\n\nexport default class Crossline extends SpawnableSideEffect {\n static defaultConfig () {\n return {\n className: `${CLASSPREFIX}-crossline-group`,\n bandClass: `${CLASSPREFIX}-crossband`,\n lineClass: `${CLASSPREFIX}-crossline`\n };\n }\n\n static formalName () {\n return 'crossline';\n }\n\n apply (selectionSet, payload) {\n let height;\n let bandWidth;\n let px;\n let width;\n const {\n className,\n bandClass,\n lineClass\n } = this.config();\n const dataModel = selectionSet.mergedEnter.model;\n const drawingInf = this.drawingContext();\n if (payload.criteria && dataModel && dataModel.isEmpty()) {\n return this;\n }\n if (payload.criteria === null || !dataModel) {\n this.hide();\n return this;\n }\n\n const dataObj = dataModel.getData();\n const sourceInf = this.firebolt.context.getSourceInfo();\n const axes = sourceInf.axes;\n const axisFields = sourceInf.fields;\n const fields = selectionSet.fields;\n const data = dataObj.data;\n const fieldsConfig = dataModel.getFieldsConfig();\n const svgContainer = drawingInf.sideEffectGroup;\n\n const elemData = [];\n fields.forEach((field) => {\n const fieldIndex = fieldsConfig[field] && fieldsConfig[field].index;\n const dataArr = data.map(d => d[fieldIndex]);\n const axisIndex = [['x', 0], ['x', 1], ['y', 0], ['y', 1]].find((arr) => {\n const fieldInst = axisFields[arr[0]][arr[1]];\n return fieldInst && fieldInst.type() === FieldType.DIMENSION &&\n fieldInst.getMembers().indexOf(field) !== -1;\n });\n if (axisIndex !== undefined && data.length) {\n const type = axisIndex[0];\n const axis = axes[type][axisIndex[1]];\n const value = dataArr[0];\n bandWidth = axis.getUnitWidth() || 0;\n px = axis.getScaleValue(value) + bandWidth / 2 + drawingInf.xOffset;\n const plotWidth = Math.max(...this.firebolt.context.layers().map(layer => layer.getPlotSpan()[type]));\n const pad = Math.max(...this.firebolt.context.layers().map(layer => layer.getPlotPadding()[type]));\n height = drawingInf.height;\n width = drawingInf.width;\n const startPx = px - plotWidth / 2 - pad / 2;\n const endPx = px + plotWidth / 2 + pad / 2;\n const dataPoint = {};\n if (type === 'y') {\n dataPoint.d = `M 0 ${startPx} L 0 ${endPx} L ${width} ${endPx} L ${width} ${startPx} Z`;\n } else {\n dataPoint.d = `M ${startPx} 0 L ${endPx} 0 L ${endPx} ${height} L ${startPx} ${height} Z`;\n }\n dataPoint.className = plotWidth ? bandClass : lineClass;\n elemData.push(dataPoint);\n }\n });\n if (elemData.length) {\n const parentGroup = this.createElement(svgContainer, 'g', [1], className);\n const elem = this.createElement(parentGroup, 'path', elemData);\n elem.attr('d', d => d.d).style('pointer-events', 'none')\n .attr('class', d => d.className);\n }\n return this;\n }\n\n hide () {\n const className = this.config().className;\n const drawingInf = this.drawingContext();\n selectElement(drawingInf.sideEffectGroup).selectAll(`.${className}`).remove();\n }\n}\n","const fadeFn = (set, context, strategy) => {\n const {\n mergedEnter,\n mergedExit,\n exitSet,\n completeSet\n } = set;\n\n if (!mergedEnter.length && !mergedExit.length) {\n context.applyInteractionStyle(completeSet, {}, strategy, false);\n } else {\n context.applyInteractionStyle(exitSet[1], {}, strategy, true);\n context.applyInteractionStyle(mergedEnter, {}, strategy, false);\n }\n};\n\nexport const strategies = {\n fade: fadeFn,\n focus: (set, context) => {\n const {\n mergedEnter,\n mergedExit,\n completeSet\n } = set;\n if (!mergedEnter.length && !mergedExit.length) {\n context.applyInteractionStyle(completeSet, {}, 'focus', false);\n } else {\n context.applyInteractionStyle(mergedExit, {}, 'focus', true);\n context.applyInteractionStyle(mergedEnter, {}, 'focus', false);\n }\n },\n highlight: (set, context) => {\n const {\n mergedEnter,\n mergedExit,\n entrySet,\n exitSet,\n completeSet\n } = set;\n if (!mergedEnter.length && !mergedExit.length) {\n context.applyInteractionStyle(completeSet, {}, 'highlight', false);\n } else {\n context.applyInteractionStyle(entrySet[1], {}, 'highlight', true);\n context.applyInteractionStyle(exitSet[1], {}, 'highlight', false);\n }\n }\n};\n","import SurrogateSideEffect from '../surrogate';\nimport { strategies } from './strategy';\n\nexport default class PlotHighlighter extends SurrogateSideEffect {\n constructor (...params) {\n super(...params);\n this._strategy = 'highlight';\n this._strategies = strategies;\n }\n\n static formalName () {\n return 'highlighter';\n }\n\n static target () {\n return 'visual-unit';\n }\n\n apply (selectionSet, payload, options = {}) {\n const strategy = this._strategies[options.strategy || this._strategy];\n\n if (selectionSet.isSourceFieldPresent !== false) {\n strategy(selectionSet, this, options.strategy || this._strategy);\n }\n\n return this;\n }\n}\n","import SurrogateSideEffect from '../surrogate';\n\nexport default class FilterEffect extends SurrogateSideEffect {\n static formalName () {\n return 'filter';\n }\n\n static target () {\n return 'visual-unit';\n }\n\n static mutates () {\n return true;\n }\n\n apply (selectionSet, payload) {\n const context = this.firebolt.context;\n const entryModel = selectionSet.mergedEnter.model;\n if (payload.criteria === null) {\n context.clearCaching().resetData();\n } else {\n context.enableCaching().data(entryModel);\n }\n return this;\n }\n}\n","import { DataModel } from 'muze-utils';\n\nimport { CLASSPREFIX } from '../../enums/constants';\nimport SpawnableSideEffect from '../spawnable';\n\nimport './styles.scss';\n\nexport default class AnchorEffect extends SpawnableSideEffect {\n constructor (...params) {\n super(...params);\n const context = this.firebolt.context;\n this._layers = this.addAnchorLayers(context);\n }\n\n static target () {\n return 'visual-unit';\n }\n\n static defaultConfig () {\n return {\n className: `${CLASSPREFIX}-anchors-group`\n };\n }\n\n static formalName () {\n return 'anchors';\n }\n\n addAnchorLayers (context) {\n const layers = [];\n this.firebolt.context.layers().forEach((layer, idx) => {\n const shouldDrawAnchors = layer.shouldDrawAnchors();\n if (shouldDrawAnchors) {\n const encodingFieldsInf = layer.encodingFieldsInf();\n const layerObj = {\n instances: context.addLayer({\n name: `${layer.alias()}-${this.constructor.formalName()}-${idx}`,\n mark: 'point',\n encoding: {\n x: encodingFieldsInf.xField,\n y: encodingFieldsInf.yField,\n color: {\n field: encodingFieldsInf.colorField\n },\n size: {\n field: encodingFieldsInf.sizeField,\n value: this.defaultSizeValue()\n }\n },\n transform: {\n type: 'identity'\n },\n transition: this.getTransitionConfig(),\n calculateDomain: false,\n source: dt => dt.select(() => false, {\n saveChild: false\n }),\n interactive: false,\n render: false\n }),\n linkedLayer: layer\n };\n\n layers.push(layerObj);\n }\n });\n return layers;\n }\n\n getTransitionConfig () {\n return {\n disabled: true\n };\n }\n\n /**\n * Returns the default area value of the anchor point.\n * @return { number } Default area value of anchor.\n */\n defaultSizeValue () {\n return 100;\n }\n\n apply (selectionSet) {\n const self = this;\n const dataModel = selectionSet.mergedEnter.model;\n if (selectionSet.isSourceFieldPresent !== false) {\n const drawingInf = this.drawingContext();\n const sideEffectGroup = drawingInf.sideEffectGroup;\n const className = `${this.config().className}`;\n const layers = this._layers;\n const parentGroup = this.createElement(sideEffectGroup, 'g', [1], `${className}-container`);\n const anchorGroups = this.createElement(parentGroup, 'g', layers);\n anchorGroups.each(function (layer) {\n const instances = layer.instances;\n const elems = self.createElement(this, 'g', instances, className);\n const linkedLayer = layer.linkedLayer;\n const [transformedData, schema] = linkedLayer.getTransformedDataFromIdentifiers(dataModel);\n const transformedDataModel = new DataModel(transformedData, schema);\n elems.each(function (d, i) {\n instances[i].data(transformedDataModel).mount(this);\n });\n });\n }\n return this;\n }\n}\n","import AnchorEffect from './anchors';\nimport { CLASSPREFIX } from '../enums/constants';\n\nexport default class PersistentAnchors extends AnchorEffect {\n static formalName () {\n return 'persistent-anchors';\n }\n\n static defaultConfig () {\n return {\n className: `${CLASSPREFIX}-persistent-anchors`\n };\n }\n\n getTransitionConfig () {\n return {\n disabled: true\n };\n }\n}\n","import AnchorEffect from './anchors';\nimport { CLASSPREFIX } from '../enums/constants';\n\nexport default class BrushAnchors extends AnchorEffect {\n static formalName () {\n return 'brush-anchors';\n }\n\n static defaultConfig () {\n return {\n className: `${CLASSPREFIX}-brush-anchors`\n };\n }\n\n getTransitionConfig () {\n return {\n disabled: true\n };\n }\n}\n","import * as BEHAVIOURS from './enums/behaviours';\n\nexport const behaviourEffectMap = {\n [BEHAVIOURS.BRUSH]: ['selectionBox', {\n name: 'highlighter',\n options: {\n strategy: 'fade'\n }\n }, 'brush-anchors'],\n [`${BEHAVIOURS.BRUSH},${BEHAVIOURS.SELECT}`]: [{\n name: 'tooltip',\n options: {\n strategy: 'showSelectedItems',\n order: 0,\n filter: context => context.config().mode === 'fragmented'\n }\n }],\n [BEHAVIOURS.HIGHLIGHT]: [{\n name: 'highlighter',\n options: {\n strategy: 'highlight'\n }\n }, 'crossline', {\n name: 'tooltip',\n options: {\n order: 9999\n }\n }, 'anchors'],\n [BEHAVIOURS.FILTER]: ['filter'],\n [BEHAVIOURS.SELECT]: [{\n name: 'highlighter',\n options: {\n strategy: 'focus'\n }\n }, 'persistent-anchors']\n};\n","export const CLASSPREFIX = 'muze';\nexport const STACK = 'stack';\nexport const GROUP = 'group';\nexport const IDENTITY = 'identity';\nexport const ANGLE = 'angle';\nexport const RADIUS = 'radius';\nexport const SIZE = 'size';\nexport const COLOR = 'color';\nexport const SHAPE = 'shape';\nexport const OUTER_RADIUS_VALUE = 'outerRadiusValue';\nexport const TEXT_ANCHOR_MIDDLE = 'middle';\nexport const ENCODING = {\n X: 'x',\n Y: 'y',\n X0: 'x0',\n Y0: 'y0'\n};\n\nexport const ASCENDING = 'asc';\n\nexport const AREA_LAYER = 'area';\nexport const ARC_LAYER = 'arc';\nexport const LINE_LAYER = 'line';\nexport const TEXT_LAYER = 'text';\nexport const POINT_LAYER = 'point';\nexport const BAR_LAYER = 'bar';\nexport const TICK_LAYER = 'tick';\nexport const SIMPLE_LAYER = 'simple';\nexport const BASE_LAYER = 'base';\n","import { CLASSPREFIX, STACK } from '../../enums/constants';\n\nexport const defaultConfig = {\n classPrefix: CLASSPREFIX,\n defClassName: 'layer-area',\n className: '',\n interpolate: 'linear',\n transform: {\n type: STACK\n },\n interaction: {\n\n },\n nearestPointThreshold: 10,\n encoding: {\n color: {},\n x: {},\n y: {},\n y0: {},\n strokeOpacity: {\n value: 1\n }\n },\n transition: {\n effect: 'cubic',\n duration: 1000\n },\n connectNullData: false\n};\n","import { ERROR_MSG } from 'muze-utils';\n\n/**\n * This is an interface class which any new layer class has to extend.\n *\n * @example\n * class BarLayer extends BaseLayer {\n * update (params) {\n * // super.update(params);\n * // Update the bar layer\n * }\n * }\n * @class\n */\nexport default class SimpleLayer {\n\n formalName () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Sets or gets the dependencies.\n * @param {Object} dependencies Dependencies needed by layer\n * @return {BaseLayer} Instance of base layer.\n */\n dependencies () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Returns the config of the layer\n *\n * @param {Object} config Configuration of layer\n * @return {Object} configuration of layer\n */\n config () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Acts as a getter or setter function\n * When setter\n * Returns the datamodel of the layer\n * @param { DataModel } dataModel instance of DataModel\n * @return { DataModel } DataModel instance of the layer\n */\n data () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Returns a serialized schema of the layer\n * @return {Object} Serialized schema\n */\n serialize () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Returns the unique identifier of this layer\n * @return {string} id of the layer\n */\n id () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n /*\n * This method resolves the x, y, x0 and y0 values from the transformed data.\n * It also checks the type of transformed data for example, if it is a stacked data\n * then it fetches the y and y0 values from the stacked data.\n * @param {Array.} transformedData transformed data\n * @param {Object} fieldMap field definitions\n * @param {string} transformType type of transformed data - stack, group or identity.\n * @return {Array.} Normalized data\n * @private\n */\n normalizeTransformedData () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Gets the transform method from transform factory based on type of transform. It then calls the\n * transform method with the data and passes the configuration parameters of transform such as\n * groupBy, value field, etc.\n *\n * @param {DataModel} dataModel Instance of dataModel\n * @param {Object} config configuration for transforming data\n * @return {Array.} Transformed data.\n * @private\n */\n getTransformedData () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Calculates the domain from the data.\n * It checks the type of field and calculates the domain based on that. For example, if it\n * is a quantitative or temporal field, then it calculates the min and max from the data or\n * if it is a nominal field then it gets all the values from the data of that field.\n * @param {Array} data DataArray\n * @return {Array} Domain values array.\n */\n _calculateDomainFromData () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Returns the domain for the axis.\n *\n * @param {string} encodingType type of encoding x, y, color, etc.\n * @return {Object} Axis domains\n */\n getDomain () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Abstract method for getting nearest point\n * @return {BaseLayer} Instance of base layer\n */\n getNearestPoint () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Abstract method for highlighting points\n * @return {BaseLayer} Instance of base layer\n */\n highlightPoint () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Abstract method for deselecting points\n * @return {BaseLayer} Instance of base layer\n */\n dehighlightPoint () {\n return this;\n }\n\n linkLayerStore () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Sets the container element for the layer to be renderered.\n * @param {SVGElement} mountPoint SVG element or group element.\n */\n mount () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n render () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n}\n","export const DATA = 'data';\nexport const CONFIG = 'config';\nexport const MEASUREMENT = 'measurement';\nexport const AXES = 'axes';\nexport const NORMALIZED_DATA = 'normalizedData';\nexport const TRANSFORMED_DATA = 'transformedData';\nexport const DOMAIN = 'domain';\nexport const MOUNT = 'mount';\nexport const FIELDMAP = 'fieldMap';\nexport const DATA_UPDATED = 'dataUpdated';\n","/**\n * @module Axis\n * This file declares a class that is used to render an axis to add meaning to\n * plots.\n */\nimport { Symbols } from 'muze-utils';\nimport * as AxisOrientation from '../enums/axis-orientation';\n\n/**\n * @module Axis\n * This file exports constants that are used to reference axis orientations\n * in a consistent manner.\n */\nexport const BOTTOM = 'bottom';\nexport const TOP = 'top';\nexport const LEFT = 'left';\nexport const RIGHT = 'right';\n\n/**\n * This object is used to associate the axis orientation with the d3 class\n * used to represent that axis.\n */\nexport const axisOrientationMap = {\n [AxisOrientation.LEFT]: Symbols.axisLeft,\n [AxisOrientation.BOTTOM]: Symbols.axisBottom,\n [AxisOrientation.RIGHT]: Symbols.axisRight,\n [AxisOrientation.TOP]: Symbols.axisTop\n};\n","/**\n * @module axis\n * This file exports constants used to reference scale type\n * consistently throughout the project.\n */\nexport const LINEAR = 'linear';\nexport const BAND = 'band';\nexport const TIME = 'temporal';\nexport const COLOR = 'color';\nexport const ORDINAL = 'ordinal';\nexport const QUANTIZE = 'quantize';\nexport const QUANTILE = 'quantile';\nexport const LOG = 'log';\nexport const POW = 'pow';\nexport const IDENTITY = 'identity';\nexport const SEQUENTIAL = 'sequential';\nexport const THRESHOLD = 'threshold';\n","export const CLASSPREFIX = 'muze';\n\nexport const CONTINOUS = 'continous';\nexport const DISCRETE = 'discrete';\nexport const SEQUENTIAL = 'sequential';\nexport const ORDINAL = 'ordinal';\nexport const LINEAR = 'linear';\nexport const THRESHOLD = 'threshold';\nexport const QUANTIZE = 'quantize';\nexport const QUANTILE = 'quantile';\n\nexport const COLOR = 'color';\nexport const SHAPE = 'shape';\nexport const SIZE = 'size';\n\nexport const DOMAIN = 'domain';\nexport const BAND = 'band';\nexport const HIDDEN = 'hidden';\nexport const NUMBER = 'number';\nexport const BOTTOM = 'bottom';\nexport const TOP = 'top';\n\nexport const RGB = 'rgb';\nexport const HEX = 'hex';\nexport const HSLA = 'hsla';\nexport const HSL = 'hsl';\n\n","import { scales, colorSchemes } from 'muze-utils';\n\nimport {\n SEQUENTIAL,\n ORDINAL,\n LINEAR,\n CONTINOUS,\n THRESHOLD,\n QUANTIZE\n} from './enums/constants';\n\nimport * as ScaleType from './enums/scale-type';\n\nconst {\n scaleLinear,\n scaleThreshold,\n scaleLog,\n scalePow,\n scaleIdentity,\n scaleOrdinal,\n scaleSequential,\n scaleQuantize,\n scaleQuantile,\n schemeCategory10,\n schemeCategory20,\n schemeCategory20b,\n scaleBand,\n scaleTime\n} = scales;\nexport const scaleMap = {\n [ScaleType.LINEAR]: scaleLinear,\n [ScaleType.BAND]: scaleBand,\n [ScaleType.QUANTIZE]: scaleQuantize,\n [ScaleType.QUANTILE]: scaleQuantile,\n [ScaleType.THRESHOLD]: scaleThreshold,\n [ScaleType.SEQUENTIAL]: scaleSequential,\n [ScaleType.LOG]: scaleLog,\n [ScaleType.POW]: scalePow,\n [ScaleType.IDENTITY]: scaleIdentity,\n [ScaleType.TIME]: scaleTime,\n [ScaleType.COLOR]: scaleLinear,\n [ScaleType.ORDINAL]: scaleOrdinal\n};\nexport const SCHEMES = {\n SCHEME1: schemeCategory10,\n SCHEME2: schemeCategory20,\n SCHEME3: schemeCategory20b\n};\n\n/**\n * Accepts a scheme in a string format and returns the scale from d3-scale-chromatic\n *\n * @export\n * @param {string} scheme a string representing the kind of scheme for the color axis\n * @return {Object} The corresponding scale from a scheme type from d3 chromatic scale\n */\nexport function getScheme (scheme) {\n if (scheme[0] === 'i') {\n return scaleSequential(colorSchemes[scheme]);\n }\n return scaleOrdinal(colorSchemes[scheme]);\n}\n\n/**\n *\n *\n * @export\n * @param {*} scheme\n * @returns\n */\nexport function getSchemeType (scheme) {\n let schemeType = '';\n if (scheme && typeof (scheme) === 'string') {\n schemeType = scheme[0] === 'i' ? SEQUENTIAL : ORDINAL;\n } else {\n schemeType = ORDINAL;\n }\n return schemeType;\n}\n\n/**\n * This function is used to create a scale that is assigned to\n * an instance of axis.\n *\n * @export\n * @param {Object} params the input parameters to create a Scale object\n * @param {string} params.type the type of scale\n * @param {Array} params.range the range of scale\n * @return {Object} instance of scale\n */\nexport function createScale (params) {\n if (!params.type || !scaleMap[params.type]) {\n throw new Error(`${params.type} is not a valid scale type`);\n }\n if (!Array.isArray(params.range)) {\n throw new Error('range parameter must be an array');\n }\n let scaleFactory = null;\n const range = params.range;\n // @todo: do it using scale decorator\n if (params.type === LINEAR && params.interpolator) {\n scaleFactory = scaleMap[params.interpolator];\n if (params.interpolator === ScaleType.POW) {\n return scaleFactory().range(range).exponent(params.exponent);\n } else if (params.interpolator === ScaleType.LOG) {\n return scaleFactory().range(range).base([params.base]);\n }\n } else {\n scaleFactory = scaleMap[params.type];\n }\n\n if (params.type === QUANTIZE) {\n scaleFactory().nice();\n }\n return scaleFactory().range(range);\n}\n\n/**\n * This method is used to update the range of a scale\n * so that the core module can remain agnostic of the d3\n * scale api.\n *\n * @export\n * @param {Scale} scale Instance of d3 Scale.\n * @param {Array} range new range of the scale.\n * @return {Scale} Updated scale.\n */\nexport function updateScaleRange (scale, range) {\n return scale.range(range);\n}\n\n/**\n *\n *\n * @export\n * @param {*} domainType\n * @param {*} rangeType\n * @param {*} steps\n * @returns\n */\nexport function getScaleType (domainType, rangeType, steps) {\n if (rangeType === CONTINOUS) {\n return LINEAR;\n }\n if (domainType === CONTINOUS) {\n if (steps instanceof Array) {\n return THRESHOLD;\n }\n return QUANTIZE;\n }\n return ORDINAL;\n}\n","import { getUniqueId } from 'muze-utils';\nimport { CLASSPREFIX } from '../enums/constants';\n\n/**\n *\n *\n */\nexport const defaultConfig = {\n id: getUniqueId(),\n axisName: {\n defClassName: 'axis-name'\n },\n axisNamePadding: 12,\n base: 10,\n classPrefix: CLASSPREFIX,\n className: `${CLASSPREFIX}-axis`,\n exponent: 1,\n interpolator: 'linear',\n fixedBaseline: true,\n labels: {\n rotation: 0,\n smartTicks: false\n },\n orientation: 'left',\n maxHeight: 50, // @todo: height and width wont be hardcoded\n maxWidth: 40,\n numberFormat: val => val,\n padding: 0.3,\n nice: true,\n numberOfTicks: 10,\n rotate: false,\n show: true,\n showAxisName: true,\n showInnerTicks: null,\n showOuterTicks: null,\n style: {},\n type: 'linear',\n tickFormat: null,\n tickValues: null,\n xOffset: undefined,\n yOffset: undefined\n};\n\n","/**\n * This file exports functionality that is used to render axis.\n */\nimport { selectElement, makeElement, angleToRadian } from 'muze-utils';\nimport * as AxisOrientation from './enums/axis-orientation';\nimport { LINEAR, HIDDEN, BOTTOM, TOP } from './enums/constants';\n\n/**\n *\n *\n * @param {*} instance\n * @param {*} container\n * @param {*} labelManager\n * @param {*} config\n */\nconst rotateAxis = (instance, tickText, labelManager, config) => {\n const axis = instance.axis();\n const scale = instance.scale();\n const {\n orientation,\n labels,\n fixedBaseline,\n type\n } = config;\n let { rotation } = labels;\n\n const tickSize = instance.getTickSize();\n\n tickText.each(function (datum, index) {\n let yShift;\n let xShift;\n const tickFormatter = axis.tickFormat() ? axis.tickFormat : scale.tickFormat;\n const temp = tickFormatter ? tickFormatter()(datum) : datum;\n\n datum = temp.toString();\n\n const tickLabelDim = labelManager.getOriSize(datum);\n const width = tickLabelDim.width * 0.5;\n const height = tickLabelDim.height * 0.5;\n\n if (rotation < 0) {\n rotation = 360 + rotation;\n }\n\n const quadrant = 4 - Math.floor(rotation / 90);\n const rotationNormalizer = ((quadrant % 2 === 0) ? rotation : 180 * Math.ceil(rotation / 180) - rotation) % 180;\n\n yShift = Math.sqrt(height ** 2 + width ** 2) * Math.sin(angleToRadian(rotationNormalizer));\n\n if ((quadrant === 3 || quadrant === 2) && !(rotationNormalizer > 67.5 && rotationNormalizer <= 90)) {\n yShift += height * 2;\n }\n xShift = width;\n\n if (rotation === 90) {\n xShift = height;\n } else if (rotation === 270) {\n xShift = -height;\n } else {\n xShift = 0;\n }\n\n if (orientation === AxisOrientation.TOP) {\n xShift = (index === 0 && fixedBaseline && type === LINEAR) ? xShift + xShift / 2 : xShift;\n selectElement(this)\n .attr('transform', `translate(${-xShift + tickSize} \n ${-yShift - tickSize}) rotate(${rotation})`);\n } else {\n xShift = (index === 0 && fixedBaseline && type === LINEAR) ? xShift - xShift / 2 : xShift;\n selectElement(this)\n .attr('transform', `translate(${xShift - tickSize} \n ${yShift + tickSize}) rotate(${rotation})`);\n }\n });\n return tickText;\n};\n\n/**\n *\n *\n * @param {*} tickText\n * @param {*} axisInstance\n */\nconst changeTickOrientation = (selectContainer, axisInstance, tickSize) => {\n const {\n _smartTicks\n } = axisInstance;\n const config = axisInstance.config();\n const labelManager = axisInstance.dependencies().labelManager;\n const {\n labels,\n orientation\n } = config;\n const {\n rotation,\n smartTicks: isSmartTicks\n } = labels;\n\n const tickText = selectContainer.selectAll('.tick text');\n tickText.selectAll('tspan').remove();\n\n // rotate labels if not enough space is available\n if (rotation !== 0 && isSmartTicks === false && (orientation === TOP || orientation === BOTTOM)) {\n rotateAxis(axisInstance, tickText, labelManager, config);\n } else if (rotation === 0 && isSmartTicks === false) {\n tickText.attr('transform', '');\n } else {\n tickText.attr('y', 0)\n .attr('x', 0)\n .text('');\n const tspan = makeElement(tickText, 'tspan', (d, i) => _smartTicks[i].lines, 'smart-text');\n tspan.attr('dy', '0')\n .style('opacity', '0')\n .transition()\n .duration(1000)\n .attr('dy', (d, i) => {\n if (orientation === BOTTOM || i !== 0) {\n return _smartTicks[i].oriTextHeight;\n }\n return -_smartTicks[i].oriTextHeight * (_smartTicks[i].lines.length - 1) - tickSize;\n })\n .style('opacity', 1)\n .attr('x', 0)\n .text(e => e);\n }\n\n return tickText;\n};\n\nconst setFixedBaseline = (axisInstance) => {\n const {\n fixedBaseline\n } = axisInstance.config();\n if (fixedBaseline) {\n axisInstance.setFixedBaseline();\n }\n};\n\n/**\n *\n *\n * @param {*} textNode\n * @param {*} orientation\n * @param {*} measures\n */\nconst setAxisNamePos = (textNode, orientation, measures) => {\n const {\n axisNameHeight,\n yOffset,\n labelOffset,\n availableSpace\n } = measures;\n switch (orientation) {\n case AxisOrientation.LEFT:\n textNode.attr('transform',\n `translate(${-(availableSpace.width - axisNameHeight)},${yOffset + labelOffset})rotate(-90)`);\n break;\n case AxisOrientation.RIGHT:\n textNode.attr('transform',\n `translate(${(availableSpace.width - axisNameHeight)},${yOffset + labelOffset})rotate(90)`);\n break;\n case AxisOrientation.TOP:\n textNode.attr('transform',\n `translate(${availableSpace.width / 2},${-availableSpace.height + axisNameHeight})`);\n break;\n case AxisOrientation.BOTTOM:\n textNode.attr('transform',\n `translate(${availableSpace.width / 2},${availableSpace.height - axisNameHeight / 2})`);\n break;\n default:\n }\n return textNode;\n};\n\n/**\n * This method is used to render the axis inside an\n * svg container.\n *\n * @export\n * @param {Object} axisInstance the nput object required to render axis\n * @param {string} axisInstance.orientation the orientation of axis\n * @param {Object} axisInstance.scale instance of d3 scale\n * @param {SVGElement} axisInstance.container the container in which to render\n */\nexport function renderAxis (axisInstance) {\n const config = axisInstance.config();\n const labelManager = axisInstance.dependencies().labelManager;\n const mount = axisInstance.mount();\n const range = axisInstance.range();\n const axis = axisInstance.axis();\n const scale = axisInstance.scale();\n const {\n _axisNameStyle,\n _tickLabelStyle,\n formatter,\n tickValues\n } = axisInstance;\n const {\n orientation,\n name,\n labels,\n xOffset,\n yOffset,\n axisNamePadding,\n className,\n showAxisName,\n show,\n id,\n interpolator,\n classPrefix\n } = config;\n\n if (!show) {\n return;\n }\n\n const tickSize = axisInstance.getTickSize();\n\n const selectContainer = makeElement(selectElement(mount), 'g', [axisInstance], `${className}`, {},\n key => key.config().id);\n\n // Set style for tick labels\n labelManager.setStyle(_tickLabelStyle);\n\n // @to-do: Need to write a configuration override using decorator pattern\n if (interpolator === 'linear') {\n // Set ticks for the axis\n axisInstance.setTickValues();\n }\n\n const labelFunc = scale.ticks || scale.quantile || scale.domain;\n\n formatter && axis.tickFormat(formatter(tickValues || axis.tickValues() || labelFunc()));\n\n // Get range(length of range)\n const availableSpace = Math.abs(range[0] - range[1]);\n\n // Get width and height taken by axis labels\n const labelProps = axisInstance.axisDimensions().tickLabelDim;\n\n // Draw axis ticks\n selectContainer.attr('transform', `translate(${xOffset},${yOffset})`);\n setFixedBaseline(axisInstance);\n if (labels.smartTicks === false) {\n selectContainer.transition()\n .duration(1000).call(axis);\n } else {\n selectContainer.call(axis);\n }\n selectContainer.selectAll('.tick').classed(`${classPrefix}-ticks`, true);\n selectContainer.selectAll('.tick line').classed(`${classPrefix}-tick-lines`, true);\n\n // Set classes for ticks\n const tickText = selectContainer.selectAll('.tick text');\n tickText.classed(`${classPrefix}-ticks`, true)\n .classed(`${classPrefix}-ticks-${id}`, true);\n changeTickOrientation(selectContainer, axisInstance, tickSize);\n\n // Create axis name\n const textNode = makeElement(selectContainer, 'text', [name], `${classPrefix}-axis-name`)\n .attr('text-anchor', 'middle')\n .classed(`${classPrefix}-axis-name-${id}`, true)\n .text(d => d);\n\n // Hide axis name if show is off\n textNode.classed(HIDDEN, !showAxisName);\n\n // render labels based on orientation of axis\n const labelOffset = availableSpace / 2;\n\n // Set style for axis name\n labelManager.setStyle(_axisNameStyle);\n const axisNameSpace = labelManager.getOriSize(name);\n const measures = {\n labelProps,\n tickSize,\n axisNamePadding,\n axisNameHeight: axisNameSpace.height,\n axisNameWidth: axisNameSpace.width,\n yOffset,\n xOffset,\n labelOffset,\n availableSpace: axisInstance.availableSpace()\n };\n // Set position for axis name\n setAxisNamePos(textNode, orientation, measures);\n}\n","import { TOP, LEFT, BOTTOM } from '../enums/axis-orientation';\nimport { LOG } from '../enums/scale-type';\n\nexport const getNumberOfTicks = (availableSpace, labelDim, axis, axisInstance) => {\n const ticks = axis.scale().ticks();\n const { numberOfTicks } = axisInstance.config();\n const tickLength = ticks.length;\n let numberOfValues = tickLength;\n\n if (tickLength * (labelDim * 1.5) > availableSpace) {\n numberOfValues = Math.floor(availableSpace / (labelDim * 1.5));\n }\n\n numberOfValues = Math.min(numberOfTicks, Math.max(1, numberOfValues));\n return axis.scale().ticks(numberOfValues);\n};\n\nexport const sanitizeDomain = (domain, context) => {\n const interpolator = context.config().interpolator;\n // @todo: Get from scale decorator\n if (interpolator === LOG && domain[0] >= 0) {\n return [Math.max(1, domain[0]), Math.max(1, domain[1])];\n }\n return domain;\n};\n\nexport const getTickFormatter = (tickFormat, numberFormat) => {\n if (tickFormat) {\n return ticks => (val, i) => tickFormat(numberFormat(val), i, ticks);\n }\n return () => val => numberFormat(val);\n};\n\n/**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\nexport const getTickLabelInfo = (context) => {\n let largestLabel = '';\n let labelProps;\n let smartTick = {};\n let axisTickLabels;\n const scale = context.scale();\n const allLabelLengths = [];\n const { tickFormat, tickValues, numberFormat } = context.config();\n const labelFunc = scale.ticks || scale.quantile || scale.domain;\n // set the style on the shared label manager instance\n const { labelManager } = context.dependencies();\n\n labelManager.setStyle(context._tickLabelStyle);\n // get the values along the domain\n\n axisTickLabels = tickValues || labelFunc();\n // Get the tick labels\n axisTickLabels = axisTickLabels.map((originalLabel, i) => {\n const formattedLabel = numberFormat(originalLabel);\n\n // get formats of tick if any\n const label = tickFormat ? tickFormat(formattedLabel, i, axisTickLabels) : (scale.tickFormat ?\n numberFormat(scale.tickFormat()(originalLabel)) : formattedLabel);\n\n // convert to string for quant values\n const temp = label.toString();\n // Get spaces for all labels\n allLabelLengths.push(labelManager.getOriSize(temp));\n // Getting largest label\n if (temp.length > largestLabel.length) {\n largestLabel = temp;\n smartTick = context.smartTicks() ? context.smartTicks()[i] : {};\n labelProps = allLabelLengths[i];\n }\n return label;\n });\n\n labelProps = labelManager.getOriSize(largestLabel);\n\n return { largestLabel, largestLabelDim: labelProps, axisTickLabels, allLabelLengths, smartTick };\n};\n\n/**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\nexport const computeAxisDimensions = (context) => {\n let tickLabelDim = {};\n const {\n name,\n labels,\n tickValues\n } = context.config();\n const angle = ((labels.smartTicks) ? 0 : labels.rotation) * Math.PI / 180;\n const { labelManager } = context.dependencies();\n const {\n largestLabelDim,\n axisTickLabels,\n smartTick\n } = getTickLabelInfo(context);\n const { height: labelHeight, width: labelWidth } = largestLabelDim;\n // get the domain of axis\n const domain = context.domain();\n\n if (domain.length === 0) {\n return null;\n }\n if (context._rotationLock === false) {\n context.setRotationConfig(tickValues || axisTickLabels, largestLabelDim.width);\n context._rotationLock = false;\n }\n if (labels.smartTicks) {\n tickLabelDim = smartTick;\n } else {\n tickLabelDim = {\n width: Math.abs(labelHeight * Math.sin(angle)) + Math.abs(labelWidth * Math.cos(angle)),\n height: Math.abs(labelWidth * Math.sin(angle)) + Math.abs(labelHeight * Math.cos(angle))\n };\n }\n\n labelManager.setStyle(context._axisNameStyle);\n return {\n tickSize: context.getTickSize(),\n tickLabelDim,\n axisLabelDim: labelManager.getOriSize(name),\n largestLabelDim,\n axisTickLabels\n };\n};\n\n/**\n*\n*\n* @memberof SimpleAxis\n*/\nexport const setOffset = (context) => {\n let x = 0;\n let y = 0;\n const logicalSpace = context.logicalSpace();\n const config = context.config();\n const {\n orientation,\n xOffset,\n yOffset\n } = config;\n if (orientation === LEFT) {\n x = xOffset === undefined ? logicalSpace.width : xOffset;\n }\n if (orientation === TOP) {\n y = yOffset === undefined ? logicalSpace.height : yOffset;\n }\n context.config({ xOffset: x, yOffset: y });\n};\n\n/**\n *\n *\n * @param {*} timeDiff\n * @param {*} range\n * @param {*} domain\n * @returns\n */\nconst getAxisOffset = (timeDiff, range, domain) => {\n const pvr = Math.abs(range[1] - range[0]) / (domain[1] - domain[0]);\n const width = (pvr * timeDiff);\n const avWidth = (range[1] - range[0]);\n const bars = avWidth / width;\n const barWidth = avWidth / (bars + 1);\n const diff = avWidth - barWidth * bars;\n\n return diff / 2;\n};\n\nexport const adjustRange = (minDiff, range, domain, orientation) => {\n const diff = getAxisOffset(minDiff, range, domain);\n\n if (orientation === TOP || orientation === BOTTOM) {\n range[0] += diff;\n range[1] -= diff;\n } else {\n range[0] -= diff;\n range[1] += diff;\n }\n return range;\n};\n\n /**\n * Listener attached to the axis on change of parameters.\n *\n * @param {Function} callback to be excuted on change of domain range etc\n * @memberof SimpleAxis\n */\nexport const registerChangeListeners = (context) => {\n const store = context.store();\n\n store.model.next(['domain', 'range', 'mount', 'config'], (...params) => {\n context.render();\n context._domainLock = false;\n context._eventList.forEach((e) => {\n e.action instanceof Function && e.action(...params);\n });\n }, true);\n return context;\n};\n\n/**\n *\n *\n * @param {*} axisDimensions\n * @param {*} config\n * @param {*} range\n * @returns\n */\nexport const getHorizontalAxisSpace = (context, axisDimensions, config, range) => {\n let width;\n let height;\n const {\n tickSize,\n tickLabelDim,\n axisLabelDim\n } = axisDimensions;\n const {\n axisNamePadding,\n showAxisName,\n tickValues\n } = config;\n const domain = context.domain();\n const { height: axisDimHeight } = axisLabelDim;\n const { height: tickDimHeight, width: tickDimWidth } = tickLabelDim;\n\n width = range && range.length ? range[1] - range[0] : 0;\n\n height = 0;\n if (tickValues) {\n const minTickDiff = context.getMinTickDifference();\n const [min, max] = [Math.min(...tickValues, ...domain), Math.max(...tickValues, ...domain)];\n\n width = ((max - min) / Math.abs(minTickDiff)) * (tickDimWidth + context._minTickDistance.width);\n }\n if (!width || width === 0) {\n height = Math.max(tickDimWidth, tickDimHeight);\n } else {\n height = tickDimHeight;\n }\n height += (showAxisName ? (axisDimHeight + axisNamePadding) : 0) + tickSize;\n return {\n width,\n height\n };\n};\n\n/**\n *\n *\n * @param {*} axisDimensions\n * @param {*} config\n * @param {*} range\n * @returns\n */\nexport const getVerticalAxisSpace = (context, axisDimensions, config) => {\n let height;\n let width;\n const {\n tickSize,\n tickLabelDim,\n axisLabelDim\n } = axisDimensions;\n const {\n axisNamePadding,\n showAxisName,\n tickValues\n } = config;\n const domain = context.domain();\n const { height: axisDimHeight } = axisLabelDim;\n const { height: tickDimHeight, width: tickDimWidth } = tickLabelDim;\n\n height = 0;\n width = tickDimWidth;\n if (tickValues) {\n const minTickDiff = context.getMinTickDifference();\n const [min, max] = [Math.min(...tickValues, ...domain), Math.max(...tickValues, ...domain)];\n\n height = ((max - min) / Math.abs(minTickDiff)) * (tickDimHeight);\n }\n width += (showAxisName ? axisDimHeight : 0) + tickSize + axisNamePadding;\n\n return {\n height,\n width\n };\n};\n\n /**\n * Calculates the logical space of the axis\n * @return {Object} Width and height occupied by the axis.\n */\nexport const calculateBandSpace = (context) => {\n const range = context.range();\n const config = context.config();\n const {\n orientation,\n show\n } = config;\n const axisDimensions = context.getAxisDimensions();\n const {\n largestLabelDim,\n axisTickLabels\n } = axisDimensions;\n const { height: largestDimHeight, width: largestDimWidth } = largestLabelDim;\n\n if (orientation === TOP || orientation === BOTTOM) {\n let { width, height } = getHorizontalAxisSpace(context, axisDimensions, config, range);\n if (!width || width === 0) {\n width = axisTickLabels.length * (Math.min(largestDimWidth + context._minTickDistance.width,\n largestDimHeight + context._minTickDistance.width));\n }\n if (show === false) {\n height = 0;\n }\n return {\n width,\n height\n };\n }\n\n let { width, height } = getVerticalAxisSpace(context, axisDimensions, config, range);\n\n if (!height || height === 0) {\n height = axisTickLabels.length * (largestDimHeight + largestDimHeight / 2) + largestDimHeight;\n }\n if (show === false) {\n width = 0;\n }\n return {\n width,\n height\n };\n};\n\n/**\n * Calculates the logical space of the axis\n * @return {Object} Width and height occupied by the axis.\n */\nexport const calculateContinousSpace = (context) => {\n const range = context.range();\n const config = context.config();\n const axisDimensions = context.getAxisDimensions();\n\n const {\n orientation,\n show,\n showAxisName\n } = config;\n const {\n axisLabelDim\n } = axisDimensions;\n\n if (show === false) {\n return {\n width: 0,\n height: 0\n };\n }\n\n const { width: axisDimWidth } = axisLabelDim;\n\n if (orientation === TOP || orientation === BOTTOM) {\n const { width, height } = getHorizontalAxisSpace(context, axisDimensions, config);\n const axisWidth = Math.max(width, axisDimWidth);\n\n return {\n width: axisWidth,\n height\n };\n }\n\n const { width, height } = getVerticalAxisSpace(context, axisDimensions, config, range);\n\n const effHeight = Math.max(height, showAxisName ? axisDimWidth : 0);\n\n return {\n width,\n height: effHeight\n };\n};\n\n","import { mergeRecursive } from 'muze-utils';\n\nexport const PROPS = {\n availableSpace: {},\n axisDimensions: {},\n config: {\n sanitization: (context, value) => {\n if (value.labels && value.labels.rotation) {\n context._rotationLock = true;\n }\n value = mergeRecursive(context._config || {}, value);\n value.axisNamePadding = Math.max(value.axisNamePadding, 0);\n context.axis(context.createAxis(value));\n context.store().commit('config', value);\n return value;\n }\n },\n logicalSpace: {},\n mount: {\n sanitization: (context, value) => {\n context.store().commit('mount', value);\n return value;\n }\n },\n range: {\n sanitization: (context, value) => {\n context.scale().range(value);\n context.logicalSpace(null);\n context.store().commit('range', value);\n return value;\n }\n },\n\n smartTicks: {},\n store: {},\n tickSize: {}\n};\n","import {\n Store,\n mergeRecursive,\n getSmartComputedStyle,\n selectElement,\n generateGetterSetters,\n getUniqueId\n} from 'muze-utils';\nimport { createScale } from '../scale-creator';\nimport { axisOrientationMap, BOTTOM, TOP } from '../enums/axis-orientation';\nimport { defaultConfig } from './default-config';\nimport { renderAxis } from '../axis-renderer';\nimport { DOMAIN, BAND } from '../enums/constants';\nimport {\n computeAxisDimensions,\n setOffset,\n registerChangeListeners,\n calculateContinousSpace\n} from './helper';\nimport { PROPS } from './props';\n\nexport default class SimpleAxis {\n\n /**\n * Creates an instance of SimpleAxis.\n * @memberof SimpleAxis\n */\n constructor (config, dependencies) {\n this._id = getUniqueId();\n\n this._dependencies = dependencies;\n this._mount = null;\n this._range = [];\n this._domain = [];\n this._domainLock = false;\n this._rotationLock = false;\n this._axisDimensions = {};\n this._eventList = [];\n\n const defCon = mergeRecursive({}, this.constructor.defaultConfig());\n const simpleConfig = mergeRecursive(defCon, config);\n\n const bodyElem = selectElement('body');\n const classPrefix = simpleConfig.classPrefix;\n this._tickLabelStyle = getSmartComputedStyle(bodyElem, `${classPrefix}-ticks`);\n this._axisNameStyle = getSmartComputedStyle(bodyElem, `${classPrefix}-axis-name`);\n dependencies.labelManager.setStyle(this._tickLabelStyle);\n this._minTickDistance = dependencies.labelManager.getOriSize('ww');\n\n generateGetterSetters(this, PROPS);\n this.store(new Store({\n domain: this.domain(),\n range: this.range(),\n config: simpleConfig,\n mount: this.mount()\n }));\n this.config(simpleConfig);\n\n this._scale = this.createScale(this._config);\n this._axis = this.createAxis(this._config);\n\n registerChangeListeners(this);\n }\n\n /**\n * Returns the default configuration of simple axis\n * @return {Object} default configurations\n */\n static defaultConfig () {\n return defaultConfig;\n }\n\n /**\n * Sets a fixed baseline for the first ticks so that they can render effectively within\n * the given area\n *\n * @param {*} tickText\n * @param {*} config\n * @param {*} labelManager\n */\n setFixedBaseline () {\n return this;\n }\n\n /**\n *\n *\n * @readonly\n * @memberof SimpleAxis\n */\n scale (...params) {\n if (params.length) {\n this._scale = params[0];\n return this;\n }\n return this._scale;\n }\n\n /**\n *\n *\n * @readonly\n * @memberof SimpleAxis\n */\n axis (...params) {\n if (params.length) {\n this._axis = params[0];\n return this;\n }\n return this._axis;\n }\n\n /**\n *\n *\n * @param {*} d\n * @returns\n * @memberof SimpleAxis\n */\n domain (...domain) {\n if (domain.length) {\n this.scale().domain(domain[0]);\n this._domain = this.scale().domain();\n this.smartTicks(this.setTickConfig());\n this.store().commit(DOMAIN, this._domain);\n this.logicalSpace(null);\n return this;\n }\n return this._domain;\n }\n\n /**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\n dependencies () {\n return this._dependencies;\n }\n\n /**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\n createScale (config) {\n const {\n base,\n padding,\n interpolator,\n exponent\n } = config;\n const range = this.range();\n const scale = createScale({\n padding,\n interpolator,\n exponent,\n base,\n range,\n type: this.constructor.type()\n });\n\n return scale;\n }\n\n getTickFormatter (tickFormat, numberFormat) {\n if (tickFormat) {\n return ticks => (val, i) => tickFormat(numberFormat(val), i, ticks);\n }\n return () => val => numberFormat(val);\n }\n\n /**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\n createAxis (config) {\n const {\n tickFormat,\n numberFormat,\n orientation\n } = config;\n const axisClass = axisOrientationMap[orientation];\n\n if (axisClass) {\n const axis = axisClass(this.scale());\n this.formatter = this.getTickFormatter(tickFormat, numberFormat);\n\n return axis;\n }\n return null;\n }\n\n /**\n *\n *\n * @memberof SimpleAxis\n */\n setTickConfig () {\n return this;\n }\n\n /**\n *\n *\n * @param {*} axisTickLabels\n * @param {*} labelWidth\n * @returns\n * @memberof SimpleAxis\n */\n setRotationConfig (axisTickLabels, labelWidth) {\n const { orientation } = this.config();\n\n if (orientation === TOP || orientation === BOTTOM) {\n const range = this.range();\n const length = Math.abs(range[0] - range[1]);\n this.config({ labels: { rotation: 0 } });\n if (length > 0 && axisTickLabels.length * (labelWidth + this._minTickDistance.width) > length) {\n this.config({ labels: { rotation: -90 } });\n }\n }\n return this;\n }\n\n /**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\n adjustRange () {\n return this;\n }\n\n getScaleValue (domainVal) {\n if (domainVal === null || domainVal === undefined) {\n return undefined;\n }\n return this.scale()(domainVal);\n }\n\n /**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\n getTickSize () {\n return this.axis().tickSize();\n }\n\n /**\n * Gets the space occupied by the parts of an axis\n *\n * @return {Object} object with details about sizes of the axis.\n * @memberof SimpleAxis\n */\n getAxisDimensions () {\n this.axisDimensions(computeAxisDimensions(this));\n return this.axisDimensions();\n }\n\n /**\n * Gets the space occupied by the axis\n *\n * @return {Object} object with details about size of the axis.\n * @memberof SimpleAxis\n */\n getLogicalSpace () {\n if (!this.logicalSpace()) {\n this.logicalSpace(calculateContinousSpace(this));\n setOffset(this);\n this.logicalSpace();\n }\n return this.logicalSpace();\n }\n\n /**\n * Returns the value from the domain when given a value from the range.\n * @param {number} value Value from the range.\n * @return {number} Value\n */\n invert (...value) {\n const values = value.map(d => this.scale().invert(d)) || [];\n return value.length === 1 ? values[0] : values;\n }\n\n /**\n * Gets the nearest range value from the given range values.\n * @param {number} v1 Start range value\n * @param {number} v2 End range value\n * @return {Array} range values\n */\n getNearestRange (v1, v2) {\n let p1;\n let p2;\n let extent;\n const {\n type\n } = this.config();\n const scale = this.scale();\n const range = scale.range();\n const reverse = range[0] > range[1];\n\n if (type === BAND) {\n extent = scale.invertExtent(v1, v2);\n p1 = scale(reverse ? extent[extent.length - 1] : extent[0]);\n p2 = scale(reverse ? extent[0] : extent[extent.length - 1]) + scale.bandwidth();\n return [p1, p2];\n }\n return [v1, v2];\n }\n\n /**\n * This method is used to assign a domain to the axis.\n *\n * @param {Array} domain the domain of the scale\n * @memberof SimpleAxis\n */\n updateDomainBounds (domain) {\n let currentDomain = this.domain();\n if (this.config().domain) {\n currentDomain = this.config().domain;\n } else {\n if (currentDomain.length === 0) {\n currentDomain = domain;\n }\n if (domain.length) {\n currentDomain = [Math.min(currentDomain[0], domain[0]), Math.max(currentDomain[1], domain[1])];\n }\n }\n\n return this.domain(currentDomain);\n }\n\n /**\n *\n *\n * @param {*} domain\n * @returns\n * @memberof SimpleAxis\n */\n updateDomainCache (domain) {\n if (this._domainLock === false) {\n this.domain([]);\n this._domainLock = true;\n }\n const cachedDomain = [];\n domain && domain.forEach((d) => {\n d !== undefined && d !== null && cachedDomain.push(d);\n });\n return this.updateDomainBounds(cachedDomain);\n }\n\n getMinTickDifference () {\n return this.domain();\n }\n\n getFormattedTickValues (tickValues) {\n return tickValues;\n }\n\n /**\n *\n *\n * @param {*} tickValues\n * @returns\n * @memberof SimpleAxis\n */\n setTickValues () {\n const {\n tickValues\n } = this.config();\n\n if (tickValues) {\n tickValues instanceof Array && this.axis().tickValues(tickValues);\n return this;\n }\n return this;\n }\n\n /**\n * This method returns the width in pixels for one\n * unit along the axis. It is only applicable to band scale\n * and returns undefined for other scale type.\n *\n * @return {number} the width of one band along band scale axis\n * @memberof SimpleAxis\n */\n getUnitWidth () {\n return 0;\n }\n\n /**\n * This method returns an object that can be used to\n * reconstruct this instance.\n *\n * @return {Object} the serializable props of axis\n * @memberof SimpleAxis\n */\n serialize () {\n return {\n name: this.name,\n type: this.type,\n range: this.range(),\n config: this.config()\n };\n }\n\n /**\n * Returns the id of the axis.\n * @return {string} Unique identifier of the axis.\n */\n get id () {\n return this._id;\n }\n\n registerEvent (event, fn) {\n this._eventList.push({ name: event, action: fn });\n }\n\n /**\n *\n *\n * @param {*} fn\n * @memberof SimpleAxis\n */\n on (event, fn) {\n event = event || 'update';\n this.registerEvent(event, fn);\n }\n\n /**\n * This method is used to render the axis inside\n * the supplied svg container.\n *\n * @param {SVGElement} svg the svg element in which to render the path\n * @memberof SimpleAxis\n */\n /* istanbul ignore next */render () {\n if (this.mount()) {\n renderAxis(this);\n }\n return this;\n }\n\n /**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\n remove () {\n this.store().unsubscribeAll();\n selectElement(this.mount()).remove();\n return this;\n }\n\n /**\n *\n *\n * @memberof SimpleAxis\n */\n unsubscribe () {\n this.store().unsubscribeAll();\n return this;\n }\n\n /**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\n isReverse () {\n const range = this.range();\n return range[0] > range[1];\n }\n\n /**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\n getPixelToValueRatio () {\n const scale = this.scale();\n const range = scale.range();\n const domain = scale.domain();\n\n return Math.abs(range[1] - range[0]) / (domain[1] - domain[0]);\n }\n}\n\n","import { scaleMap } from '../../scale-creator';\n\nexport default class LinearInterpolator {\n\n createScale (config) {\n const {\n range\n } = config;\n const scaleFactory = scaleMap.linear;\n this._scale = scaleFactory().range(range);\n return this._scale;\n }\n\n getScaleValue (domainVal) {\n return this._scale(domainVal) + 0.5;\n }\n\n sanitizeDomain (domain) {\n return domain;\n }\n}\n","import { scaleMap } from '../../scale-creator';\n\nexport default class LogInterpolator {\n\n createScale (config) {\n const {\n range,\n base\n } = config;\n const scaleFactory = scaleMap.log;\n this._scale = scaleFactory().range(range).base(base);\n return this._scale;\n }\n\n getScaleValue (domainVal) {\n if (domainVal <= 0) {\n return 1;\n }\n\n return this._scale(domainVal) + 0.5;\n }\n\n sanitizeDomain (domain) {\n if (domain[0] <= 0) {\n return [Math.max(1, domain[0]), Math.max(1, domain[1])];\n } return domain;\n }\n}\n","import { scaleMap } from '../../scale-creator';\n\nexport default class PowInterpolator {\n\n createScale (config) {\n const {\n range,\n exponent\n } = config;\n const scaleFactory = scaleMap.pow;\n this._scale = scaleFactory().range(range).exponent(exponent);\n return this._scale;\n }\n\n getScaleValue (domainVal) {\n return this._scale(domainVal) + 0.5;\n }\n\n sanitizeDomain (domain) {\n return domain;\n }\n}\n","import { getSmallestDiff } from 'muze-utils';\nimport SimpleAxis from './simple-axis';\nimport { BOTTOM, TOP, LEFT, RIGHT } from '../enums/axis-orientation';\nimport { LINEAR, LOG, POW } from '../enums/scale-type';\nimport { LogInterpolator, PowInterpolator, LinearInterpolator } from './interpolators';\nimport { DOMAIN } from '../enums/constants';\nimport {\n getTickLabelInfo,\n getNumberOfTicks\n} from './helper';\n\nexport const interpolatorMap = {\n [LOG]: LogInterpolator,\n [POW]: PowInterpolator,\n [LINEAR]: LinearInterpolator\n};\n\nexport default class ContinousAxis extends SimpleAxis {\n constructor (config, dependencies) {\n config.tickFormat = config.tickFormat || (val => val);\n super(config, dependencies);\n }\n /**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\n createScale (config) {\n const {\n base,\n padding,\n interpolator,\n exponent\n } = config;\n const range = this.range();\n const InterpolatorCls = interpolatorMap[interpolator];\n\n this._interpolator = new InterpolatorCls();\n let scale = this._interpolator.createScale({\n padding,\n exponent,\n base,\n range\n });\n\n scale = scale.nice();\n return scale;\n }\n\n /**\n * This method is used to assign a domain to the axis.\n *\n * @param {Array} domain the domain of the scale\n * @memberof SimpleAxis\n */\n updateDomainBounds (domain) {\n let currentDomain = this.domain();\n if (this.config().domain) {\n currentDomain = this.config().domain;\n } else {\n if (currentDomain.length === 0) {\n currentDomain = domain;\n }\n if (domain.length) {\n currentDomain = [Math.min(currentDomain[0], domain[0]), Math.max(currentDomain[1], domain[1])];\n }\n }\n\n return this.domain(currentDomain);\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof ContinousAxis\n */\n static type () {\n return LINEAR;\n }\n\n getScaleValue (domainVal) {\n if (domainVal === null || domainVal === undefined) {\n return undefined;\n }\n return this._interpolator.getScaleValue(domainVal);\n }\n /**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\n getTickSize () {\n const {\n showInnerTicks,\n showOuterTicks\n } = this.config();\n const axis = this.axis();\n axis.tickSizeInner(showInnerTicks === false ? 0 : 6);\n axis.tickSizeOuter(showOuterTicks === false ? 0 : 6);\n return axis.tickSize();\n }\n\n /**\n *\n *\n * @param {*} d\n * @returns\n * @memberof SimpleAxis\n */\n domain (domain) {\n if (domain && domain.length) {\n const { nice } = this.config();\n if (domain.length && domain[0] === domain[1]) {\n domain = [0, +domain[0] * 2];\n }\n this.scale().domain(domain);\n nice && this.scale().nice();\n this._domain = this.scale().domain();\n this.store().commit(DOMAIN, this._domain);\n this.logicalSpace(null);\n return this;\n } return this._domain;\n }\n\n /**\n * This method is used to set the space availiable to render\n * the SimpleCell.\n *\n * @param {number} width The width of SimpleCell.\n * @param {number} height The height of SimpleCell.\n * @memberof AxisCell\n */\n setAvailableSpace (width = 0, height, padding, isOffset) {\n const {\n left,\n right,\n top,\n bottom\n } = padding;\n const {\n orientation,\n fixedBaseline\n } = this.config();\n const { tickLabelDim } = this.getAxisDimensions();\n this.availableSpace({ width, height });\n\n if (orientation === TOP || orientation === BOTTOM) {\n const labelSpace = tickLabelDim.width;\n this.range([(fixedBaseline ? 0 : (labelSpace / 2)) + left, width - right - labelSpace / 2]);\n const axisHeight = this.getLogicalSpace().height;\n isOffset && this.config({ yOffset: Math.max(axisHeight, height) });\n } else {\n const labelSpace = tickLabelDim.height;\n this.range([height - bottom - (fixedBaseline ? 1 : (labelSpace / 2)), labelSpace / 2 + top]);\n const axisWidth = this.getLogicalSpace().width;\n isOffset && this.config({ xOffset: Math.max(axisWidth, width) });\n }\n return this;\n }\n\n /**\n *\n *\n * @param {*} tickValues\n * @returns\n * @memberof SimpleAxis\n */\n setTickValues () {\n const {\n tickValues\n } = this.config();\n const axis = this.axis();\n\n if (tickValues) {\n tickValues instanceof Array && this.axis().tickValues(tickValues);\n return this;\n }\n axis.tickValues(this.getTickValues());\n return this;\n }\n\n /**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\n getTickValues () {\n let labelDim = 0;\n const {\n orientation,\n tickValues\n } = this.config();\n const range = this.range();\n const axis = this.axis();\n\n const availableSpace = Math.abs(range[0] - range[1]);\n\n const labelProps = getTickLabelInfo(this).largestLabelDim;\n\n if (tickValues) {\n return axis.scale().ticks(tickValues);\n }\n labelDim = labelProps[orientation === BOTTOM || orientation === TOP ? 'width' : 'height'];\n\n return getNumberOfTicks(availableSpace, labelDim, axis, this);\n }\n\n getMinTickDifference () {\n return getSmallestDiff(this.config().tickValues);\n }\n\n /**\n * Sets a fixed baseline for the first ticks so that they can render effectively within\n * the given area\n *\n * @param {*} tickText\n * @param {*} config\n * @param {*} labelManager\n */\n setFixedBaseline (tickText) {\n const {\n orientation,\n labels\n } = this.config();\n const {\n rotation\n } = labels;\n const axis = this.axis();\n const { width, height } = this._axisDimensions.largestLabelDim;\n axis.tickTransform((d, i) => {\n if (i === 0 && (orientation === LEFT || orientation === RIGHT)) {\n return `translate(0, -${(height) / 3}px)`;\n }\n if (i === 0 && (orientation === TOP || orientation === BOTTOM) && rotation === 0) {\n return `translate(${width / 2}px, ${0}px) rotate(${rotation}deg)`;\n } return '';\n });\n return tickText;\n }\n\n}\n","import SimpleAxis from './simple-axis';\nimport { BAND } from '../enums/scale-type';\nimport { TOP, BOTTOM } from '../enums/axis-orientation';\nimport { calculateBandSpace, setOffset } from './helper';\n\nexport default class BandAxis extends SimpleAxis {\n\n /**\n *\n *\n * @param {*} range\n * @returns\n * @memberof BandAxis\n */\n createScale (range) {\n const scale = super.createScale(range);\n const { padding } = this.config();\n if (typeof padding === 'number') {\n scale.padding(padding);\n }\n return scale;\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof BandAxis\n */\n static type () {\n return BAND;\n }\n\n /**\n *\n *\n * @param {*} width\n * @param {*} height\n * @param {*} padding\n * @param {*} isOffset\n * @memberof BandAxis\n */\n setAvailableSpace (width, height, padding, isOffset) {\n const {\n left,\n right,\n top,\n bottom\n } = padding;\n const {\n orientation,\n showAxisName,\n axisNamePadding\n } = this.config();\n const { axisLabelDim } = this.getAxisDimensions();\n const { height: axisDimHeight } = axisLabelDim;\n\n this.availableSpace({ width, height });\n if (orientation === TOP || orientation === BOTTOM) {\n // Set x axis range\n this.range([0, width - left - right]);\n const axisHeight = this.getLogicalSpace().height - (showAxisName === false ?\n (axisDimHeight + axisNamePadding) : 0);\n isOffset && this.config({ yOffset: Math.max(axisHeight, height) });\n } else {\n // Set y axis range\n this.range([height - bottom, top]);\n const axisWidth = this.getLogicalSpace().width - (showAxisName === false ? axisDimHeight : 0);\n isOffset && this.config({ xOffset: Math.max(axisWidth, width) });\n }\n return this;\n }\n\n /**\n *\n *\n * @returns\n * @memberof BandAxis\n */\n getUnitWidth () {\n return this.scale().bandwidth();\n }\n\n /**\n *\n *\n * @returns\n * @memberof BandAxis\n */\n setTickConfig () {\n let smartTicks = '';\n let smartlabel;\n const { maxWidth, maxHeight, tickFormat } = this.config();\n const { labelManager } = this._dependencies;\n const domain = this.axis().scale().domain();\n\n smartTicks = domain;\n const tickFormatter = tickFormat || (val => val);\n\n if (domain && domain.length) {\n smartTicks = domain.map((d, i) => {\n labelManager.useEllipsesOnOverflow(true);\n smartlabel = labelManager.getSmartText(tickFormatter(d, i, domain), maxWidth, maxHeight);\n return labelManager.constructor.textToLines(smartlabel);\n });\n }\n return smartTicks;\n }\n\n/**\n * Gets the space occupied by the axis\n *\n * @return {Object} object with details about size of the axis.\n * @memberof SimpleAxis\n */\n getLogicalSpace () {\n if (!this.logicalSpace()) {\n this.logicalSpace(calculateBandSpace(this));\n setOffset(this);\n this.logicalSpace();\n }\n return this.logicalSpace();\n }\n /**\n *\n *\n * @param {*} axisTickLabels\n * @param {*} labelWidth\n * @returns\n * @memberof BandAxis\n */\n setRotationConfig (axisTickLabels, labelWidth) {\n const { orientation } = this.config();\n const range = this.range();\n const availSpace = Math.abs(range[0] - range[1]);\n\n this.config({ labels: { rotation: 0, smartTicks: false } });\n if (orientation === TOP || orientation === BOTTOM) {\n const smartWidth = this.smartTicks().reduce((acc, n) => acc + n.width + this._minTickDistance.width, 0);\n // set multiline config\n if (availSpace > 0 && axisTickLabels.length * (labelWidth + this._minTickDistance.width) > availSpace) {\n if (availSpace && smartWidth < availSpace) {\n this.config({ labels: { smartTicks: true } });\n } else {\n this.config({ labels: { rotation: -90 } });\n }\n }\n }\n return this;\n }\n\n /**\n *\n *\n * @returns\n * @memberof BandAxis\n */\n getTickValues () {\n return this.axis().scale().domain();\n }\n\n /**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\n getTickSize () {\n const {\n showInnerTicks,\n showOuterTicks\n } = this.config();\n const axis = this.axis();\n\n axis.tickSizeInner(showInnerTicks ? 6 : 0);\n axis.tickSizeOuter(showOuterTicks ? 6 : 0);\n return axis.tickSize();\n }\n\n /**\n * This method is used to assign a domain to the axis.\n *\n * @param {Array} domain the domain of the scale\n * @memberof SimpleAxis\n */\n updateDomainBounds (domain) {\n let currentDomain = this.domain();\n if (this.config().domain) {\n currentDomain = this.config().domain;\n } else {\n if (currentDomain.length === 0) {\n currentDomain = domain;\n }\n currentDomain = currentDomain.concat(domain);\n }\n this.domain(currentDomain);\n return this;\n }\n\n /**\n * Returns the value from the domain when given a value from the range.\n * @param {number} value Value from the range.\n * @return {number} Value\n */\n invert (...value) {\n const values = value.map(d => this.scale().invert(d)) || [];\n return value.length === 1 ? values[0] && values[0].toString() : values.map(d => d.toString());\n }\n}\n","import { getSmallestDiff } from 'muze-utils';\nimport SimpleAxis from './simple-axis';\nimport { adjustRange } from './helper';\nimport { TIME } from '../enums/scale-type';\nimport { axisOrientationMap, BOTTOM, TOP } from '../enums/axis-orientation';\nimport { DOMAIN } from '../enums/constants';\n\n/**\n *\n *\n * @export\n * @class TimeAxis\n * @extends {SimpleAxis}\n */\nexport default class TimeAxis extends SimpleAxis {\n\n constructor (...params) {\n super(...params);\n this._minDiff = Infinity;\n }\n\n /**\n *\n *\n * @param {*} range\n * @returns\n * @memberof TimeAxis\n */\n createScale (range) {\n let scale = super.createScale(range);\n\n scale = scale.nice();\n return scale;\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof TimeAxis\n */\n static type () {\n return TIME;\n }\n\n /**\n *\n *\n * @returns\n * @memberof BandAxis\n */\n setTickConfig () {\n let smartTicks;\n let smartlabel;\n const { maxWidth, maxHeight, tickFormat } = this.config();\n const { labelManager } = this._dependencies;\n const domain = this.getTickValues();\n const scale = this.scale();\n\n smartTicks = domain;\n const tickFormatter = tickFormat || scale.tickFormat();\n\n if (domain && domain.length) {\n smartTicks = domain.map((d, i) => {\n smartlabel = labelManager.getSmartText(tickFormatter(d, i, domain), maxWidth, maxHeight);\n return labelManager.constructor.textToLines(smartlabel);\n });\n }\n return smartTicks;\n }\n\n /**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\n createAxis (config) {\n const {\n tickFormat,\n orientation\n } = config;\n const axisClass = axisOrientationMap[orientation];\n\n if (axisClass) {\n const axis = axisClass(this.scale());\n this.formatter = this.getTickFormatter(tickFormat);\n return axis;\n }\n return null;\n }\n\n getTickFormatter (tickFormat) {\n if (tickFormat) {\n return ticks => (val, i) => tickFormat(val, i, ticks);\n }\n return null;\n }\n\n /**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\n getTickSize () {\n const {\n showInnerTicks,\n showOuterTicks\n } = this.config();\n const axis = this.axis();\n axis.tickSizeInner(showInnerTicks === false ? 0 : 6);\n axis.tickSizeOuter(showOuterTicks === false ? 0 : 6);\n return super.getTickSize();\n }\n\n /**\n *\n *\n * @returns\n * @memberof TimeAxis\n */\n getTickValues () {\n return this.scale().ticks();\n }\n\n /**\n *\n *\n * @param {*} diff\n * @returns\n * @memberof TimeAxis\n */\n minDiff (diff) {\n this._minDiff = Math.min(this._minDiff, diff);\n return this;\n }\n\n /**\n *\n *\n * @param {*} axisTickLabels\n * @param {*} labelWidth\n * @returns\n * @memberof BandAxis\n */\n setRotationConfig (axisTickLabels, labelWidth) {\n const { orientation } = this.config();\n const range = this.range();\n const availSpace = Math.abs(range[0] - range[1]);\n\n this.config({ labels: { rotation: 0, smartTicks: false } });\n if (orientation === TOP || orientation === BOTTOM) {\n const smartWidth = this.smartTicks().reduce((acc, n) => acc + n.width, 0);\n // set multiline config\n if (availSpace > 0 && axisTickLabels.length * labelWidth > availSpace) {\n if (availSpace && smartWidth * 1.25 < availSpace) {\n this.config({ labels: { smartTicks: true } });\n }\n this.config({ labels: { rotation: -90 } });\n }\n }\n return this;\n }\n\n /**\n *\n *\n * @param {*} d\n * @returns\n * @memberof SimpleAxis\n */\n domain (domain) {\n if (domain) {\n const { nice } = this.config();\n\n if (domain.length && domain[0] === domain[1]) {\n domain = [0, +domain[0] * 2];\n }\n this.scale().domain(domain);\n nice && this.scale().nice();\n this._domain = this.scale().domain();\n this.smartTicks(this.setTickConfig());\n this.store().commit(DOMAIN, this._domain);\n this.logicalSpace(null);\n return this;\n } return this._domain;\n }\n\n getMinTickDifference () {\n return getSmallestDiff(this.config().tickValues);\n }\n\n /**\n *\n *\n * @param {*} width\n * @param {*} height\n * @param {*} padding\n * @param {*} isOffset\n * @memberof TimeAxis\n */\n setAvailableSpace (width, height, padding, isOffset) {\n const {\n left,\n right,\n top,\n bottom\n } = padding;\n const {\n orientation,\n showAxisName,\n axisNamePadding\n } = this.config();\n const domain = this.domain();\n const { axisLabelDim, tickLabelDim } = this.getAxisDimensions();\n const { height: axisDimHeight } = axisLabelDim;\n const { height: tickDimHeight, width: tickDimWidth } = tickLabelDim;\n\n this.availableSpace({ width, height });\n if (orientation === TOP || orientation === BOTTOM) {\n const labelSpace = tickDimWidth;\n this.range(adjustRange(this._minDiff, [labelSpace / 2, width - left - right - labelSpace / 2],\n domain, orientation));\n const axisHeight = this.getLogicalSpace().height - (showAxisName === false ?\n (axisDimHeight + axisNamePadding) : 0);\n isOffset && this.config({ yOffset: Math.max(axisHeight, height) });\n } else {\n const labelSpace = tickDimHeight;\n this.range(adjustRange(this._minDiff, [height - top - bottom - labelSpace / 2, labelSpace / 2],\n domain, orientation));\n const axisWidth = this.getLogicalSpace().width - (showAxisName === false ? axisDimHeight : 0);\n this.isOffset && this.config({ xOffset: Math.max(axisWidth, width) });\n }\n return this;\n }\n\n}\n","export const x11Colors = {\n Pink: { hex: 'ffc0cb', rgb: '255,192,203' },\n LightPink: { hex: 'ffb6c1', rgb: '255,182,193' },\n HotPink: { hex: 'ff69b4', rgb: '255,105,180' },\n DeepPink: { hex: 'ff1493', rgb: '255,20,147' },\n PaleVioletRed: { hex: 'db7093', rgb: '219,112,147' },\n MediumVioletRed: { hex: 'c71585', rgb: '199,21,133' },\n LightSalmon: { hex: 'ffa07a', rgb: '255,160,122' },\n Salmon: { hex: 'fa8072', rgb: '250,128,114' },\n DarkSalmon: { hex: 'e9967a', rgb: '233,150,122' },\n LightCoral: { hex: 'f08080', rgb: '240,128,128' },\n IndianRed: { hex: 'cd5c5c', rgb: '205,92,92' },\n Crimson: { hex: 'dc143c', rgb: '220,20,60' },\n FireBrick: { hex: 'b22222', rgb: '178,34,34' },\n DarkRed: { hex: '8b0000', rgb: '139,0,0' },\n Red: { hex: 'ff0000', rgb: '255,0,0' },\n OrangeRed: { hex: 'ff4500', rgb: '255,69,0' },\n Tomato: { hex: 'ff6347', rgb: '255,99,71' },\n Coral: { hex: 'ff7f50', rgb: '255,127,80' },\n DarkOrange: { hex: 'ff8c00', rgb: '255,140,0' },\n Orange: { hex: 'ffa500', rgb: '255,165,0' },\n Gold: { hex: 'ffd700', rgb: '255,215,0' },\n Yellow: { hex: 'ffff00', rgb: '255,255,0' },\n LightYellow: { hex: 'ffffe0', rgb: '255,255,224' },\n LemonChiffon: { hex: 'fffacd', rgb: '255,250,205' },\n LightGoldenrodYellow: { hex: 'fafad2', rgb: '250,250,210' },\n PapayaWhip: { hex: 'ffefd5', rgb: '255,239,213' },\n Moccasin: { hex: 'ffe4b5', rgb: '255,228,181' },\n PeachPuff: { hex: 'ffdab9', rgb: '255,218,185' },\n PaleGoldenrod: { hex: 'eee8aa', rgb: '238,232,170' },\n Khaki: { hex: 'f0e68c', rgb: '240,230,140' },\n DarkKhaki: { hex: 'bdb76b', rgb: '189,183,107' },\n Cornsilk: { hex: 'fff8dc', rgb: '255,248,220' },\n BlanchedAlmond: { hex: 'ffebcd', rgb: '255,235,205' },\n Bisque: { hex: 'ffe4c4', rgb: '255,228,196' },\n NavajoWhite: { hex: 'ffdead', rgb: '255,222,173' },\n Wheat: { hex: 'f5deb3', rgb: '245,222,179' },\n BurlyWood: { hex: 'deb887', rgb: '222,184,135' },\n Tan: { hex: 'd2b48c', rgb: '210,180,140' },\n RosyBrown: { hex: 'bc8f8f', rgb: '188,143,143' },\n SandyBrown: { hex: 'f4a460', rgb: '244,164,96' },\n Goldenrod: { hex: 'daa520', rgb: '218,165,32' },\n DarkGoldenrod: { hex: 'b8860b', rgb: '184,134,11' },\n Peru: { hex: 'cd853f', rgb: '205,133,63' },\n Chocolate: { hex: 'd2691e', rgb: '210,105,30' },\n SaddleBrown: { hex: '8b4513', rgb: '139,69,19' },\n Sienna: { hex: 'a0522d', rgb: '160,82,45' },\n Brown: { hex: 'a52a2a', rgb: '165,42,42' },\n Maroon: { hex: '800000', rgb: '128,0,0' },\n DarkOliveGreen: { hex: '556b2f', rgb: '85,107,47' },\n Olive: { hex: '808000', rgb: '128,128,0' },\n OliveDrab: { hex: '6b8e23', rgb: '107,142,35' },\n YellowGreen: { hex: '9acd32', rgb: '154,205,50' },\n LimeGreen: { hex: '32cd32', rgb: '50,205,50' },\n Lime: { hex: '00ff00', rgb: '0,255,0' },\n LawnGreen: { hex: '7cfc00', rgb: '124,252,0' },\n Chartreuse: { hex: '7fff00', rgb: '127,255,0' },\n GreenYellow: { hex: 'adff2f', rgb: '173,255,47' },\n SpringGreen: { hex: '00ff7f', rgb: '0,255,127' },\n MediumSpringGreen: { hex: '00fa9a', rgb: '0,250,154' },\n LightGreen: { hex: '90ee90', rgb: '144,238,144' },\n PaleGreen: { hex: '98fb98', rgb: '152,251,152' },\n DarkSeaGreen: { hex: '8fbc8f', rgb: '143,188,143' },\n MediumSeaGreen: { hex: '3cb371', rgb: '60,179,113' },\n SeaGreen: { hex: '2e8b57', rgb: '46,139,87' },\n ForestGreen: { hex: '228b22', rgb: '34,139,34' },\n Green: { hex: '008000', rgb: '0,128,0' },\n DarkGreen: { hex: '006400', rgb: '0,100,0' },\n MediumAquamarine: { hex: '66cdaa', rgb: '102,205,170' },\n Aqua: { hex: '00ffff', rgb: '0,255,255' },\n Cyan: { hex: '00ffff', rgb: '0,255,255' },\n LightCyan: { hex: 'e0ffff', rgb: '224,255,255' },\n PaleTurquoise: { hex: 'afeeee', rgb: '175,238,238' },\n Aquamarine: { hex: '7fffd4', rgb: '127,255,212' },\n Turquoise: { hex: '40e0d0', rgb: '64,224,208' },\n MediumTurquoise: { hex: '48d1cc', rgb: '72,209,204' },\n DarkTurquoise: { hex: '00ced1', rgb: '0,206,209' },\n LightSeaGreen: { hex: '20b2aa', rgb: '32,178,170' },\n CadetBlue: { hex: '5f9ea0', rgb: '95,158,160' },\n DarkCyan: { hex: '008b8b', rgb: '0,139,139' },\n Teal: { hex: '008080', rgb: '0,128,128' },\n LightSteelBlue: { hex: 'b0c4de', rgb: '176,196,222' },\n PowderBlue: { hex: 'b0e0e6', rgb: '176,224,230' },\n LightBlue: { hex: 'add8e6', rgb: '173,216,230' },\n SkyBlue: { hex: '87ceeb', rgb: '135,206,235' },\n LightSkyBlue: { hex: '87cefa', rgb: '135,206,250' },\n DeepSkyBlue: { hex: '00bfff', rgb: '0,191,255' },\n DodgerBlue: { hex: '1e90ff', rgb: '30,144,255' },\n CornflowerBlue: { hex: '6495ed', rgb: '100,149,237' },\n SteelBlue: { hex: '4682b4', rgb: '70,130,180' },\n RoyalBlue: { hex: '4169e1', rgb: '65,105,225' },\n Blue: { hex: '0000ff', rgb: '0,0,255' },\n MediumBlue: { hex: '0000cd', rgb: '0,0,205' },\n DarkBlue: { hex: '00008b', rgb: '0,0,139' },\n Navy: { hex: '000080', rgb: '0,0,128' },\n MidnightBlue: { hex: '191970', rgb: '25,25,112' },\n Lavender: { hex: 'e6e6fa', rgb: '230,230,250' },\n Thistle: { hex: 'd8bfd8', rgb: '216,191,216' },\n Plum: { hex: 'dda0dd', rgb: '221,160,221' },\n Violet: { hex: 'ee82ee', rgb: '238,130,238' },\n Orchid: { hex: 'da70d6', rgb: '218,112,214' },\n Fuchsia: { hex: 'ff00ff', rgb: '255,0,255' },\n Magenta: { hex: 'ff00ff', rgb: '255,0,255' },\n MediumOrchid: { hex: 'ba55d3', rgb: '186,85,211' },\n MediumPurple: { hex: '9370db', rgb: '147,112,219' },\n BlueViolet: { hex: '8a2be2', rgb: '138,43,226' },\n DarkViolet: { hex: '9400d3', rgb: '148,0,211' },\n DarkOrchid: { hex: '9932cc', rgb: '153,50,204' },\n DarkMagenta: { hex: '8b008b', rgb: '139,0,139' },\n Purple: { hex: '800080', rgb: '128,0,128' },\n Indigo: { hex: '4b0082', rgb: '75,0,130' },\n DarkSlateBlue: { hex: '483d8b', rgb: '72,61,139' },\n SlateBlue: { hex: '6a5acd', rgb: '106,90,205' },\n MediumSlateBlue: { hex: '7b68ee', rgb: '123,104,238' },\n White: { hex: 'ffffff', rgb: '255,255,255' },\n Snow: { hex: 'fffafa', rgb: '255,250,250' },\n Honeydew: { hex: 'f0fff0', rgb: '240,255,240' },\n MintCream: { hex: 'f5fffa', rgb: '245,255,250' },\n Azure: { hex: 'f0ffff', rgb: '240,255,255' },\n AliceBlue: { hex: 'f0f8ff', rgb: '240,248,255' },\n GhostWhite: { hex: 'f8f8ff', rgb: '248,248,255' },\n WhiteSmoke: { hex: 'f5f5f5', rgb: '245,245,245' },\n Seashell: { hex: 'fff5ee', rgb: '255,245,238' },\n Beige: { hex: 'f5f5dc', rgb: '245,245,220' },\n OldLace: { hex: 'fdf5e6', rgb: '253,245,230' },\n FloralWhite: { hex: 'fffaf0', rgb: '255,250,240' },\n Ivory: { hex: 'fffff0', rgb: '255,255,240' },\n AntiqueWhite: { hex: 'faebd7', rgb: '250,235,215' },\n Linen: { hex: 'faf0e6', rgb: '250,240,230' },\n LavenderBlush: { hex: 'fff0f5', rgb: '255,240,245' },\n MistyRose: { hex: 'ffe4e1', rgb: '255,228,225' },\n Gainsboro: { hex: 'dcdcdc', rgb: '220,220,220' },\n LightGray: { hex: 'd3d3d3', rgb: '211,211,211' },\n Silver: { hex: 'c0c0c0', rgb: '192,192,192' },\n DarkGrey: { hex: 'a9a9a9', rgb: '169,169,169' },\n Grey: { hex: '808080', rgb: '128,128,128' },\n DimGrey: { hex: '696969', rgb: '105,105,105' },\n LightSlateGrey: { hex: '778899', rgb: '119,136,153' },\n SlateGrey: { hex: '708090', rgb: '112,128,144' },\n DarkSlateGrey: { hex: '2f4f4f', rgb: '47,79,79' },\n Black: { hex: '000000', rgb: '0,0,0' }\n};\n","import {\n LINEAR\n} from '../enums/constants';\n/**\n * Set of default colors\n */\nexport const palette = [\n '#086bb6',\n '#f37d45',\n '#f5ce02',\n '#67bda0',\n '#c54e4e',\n '#ae70af'\n];\n\nexport const DEFAULT_GRADIENT_COLOR = '#eaeaea';\n\nexport const DEFAULT_CONFIG = {\n range: palette,\n value: palette[0],\n step: false,\n stops: 5,\n type: LINEAR\n};\n","import { mergeRecursive, detectColor, hexToHsv, rgbToHsv } from 'muze-utils';\nimport { x11Colors } from './color-maps';\nimport { palette, DEFAULT_GRADIENT_COLOR } from './defaults';\nimport { LINEAR, RGB, HEX, HSL, HSLA } from '../enums/constants';\n\nexport const getHslString = hslArr => `hsla(${hslArr[0] * 360},${hslArr[1] * 100}%,${hslArr[2] * 100}%,\\\n${hslArr[3] || 1})`;\n\nexport const convertToXllString = baseString => (baseString.split(' ') || [])\n .reduce((x, e) => `${x}${e.charAt(0).toUpperCase()}${e.slice(1)}`, '');\n\nexport const getActualHslColor = (e, paletteColor) => {\n let color = '';\n if (typeof e === 'string') {\n e = e.replace(/ /g, '');\n e = e.toLowerCase();\n if (detectColor(e) === HSL || detectColor(e) === HSLA) {\n color = e.match(/(\\d+(\\.\\d+)?)/g);\n color = [color[0] / 360, color[1] / 100, color[2] / 100, color[3] || 1];\n } else if (detectColor(e) === HEX) {\n color = hexToHsv(e);\n } else if (detectColor(e) === RGB) {\n const col = e.substring(e.indexOf('(') + 1, e.lastIndexOf(')')).split(/,\\s*/);\n color = rgbToHsv(...col);\n } else if (x11Colors[convertToXllString(e)]) {\n color = rgbToHsv(...x11Colors[convertToXllString(e)].rgb.split(','));\n }\n } else if (!(e instanceof Array)) {\n color = rgbToHsv(paletteColor);\n } else {\n color = e;\n }\n return color;\n};\n\nexport const PROPS = {\n config: {\n sanitization: (context, config) => {\n const defCon = mergeRecursive({}, context.constructor.defaultConfig());\n if (config.type === LINEAR) {\n config.range = config.range || [defCon.range[0]];\n config.range = config.range.length > 1 ? config.range : [DEFAULT_GRADIENT_COLOR, ...config.range];\n }\n const oldConfig = mergeRecursive(defCon, context.config());\n const newConfig = mergeRecursive(oldConfig, config);\n\n if (newConfig.range instanceof Array) {\n newConfig.range = newConfig.range.map((e, i) => getActualHslColor(e, palette[i]));\n newConfig.stops = config.stops || newConfig.range.length;\n }\n newConfig.value = getActualHslColor(newConfig.value, newConfig.value);\n return newConfig;\n }\n },\n domain: {},\n scale: {},\n uniqueValues: {}\n};\n","import { numberInterpolator, piecewiseInterpolator, hslInterpolator } from 'muze-utils';\nimport { CONTINOUS, DISCRETE } from '../enums/constants';\nimport { LINEAR, SEQUENTIAL, ORDINAL, QUANTILE } from '../enums/scale-type';\nimport { getHslString } from './props';\n\nconst getStops = (domain, stops) => {\n let newStops = [];\n\n if (stops instanceof Array) {\n newStops = stops.slice().sort();\n newStops = [...new Set([domain[0], ...stops, domain[1]])].sort();\n } else {\n const interpolator = numberInterpolator()(...domain);\n for (let i = 0; i <= stops; i++) {\n newStops[i] = interpolator(i / stops);\n }\n }\n\n if (newStops[0] < domain[0]) {\n newStops.shift();\n }\n return { domain, newStops };\n};\n\nconst rangeStops = (newStopsLength, range) => {\n let newRange = [];\n const maxRangeLength = Math.min(range.length, 18);\n\n if (newStopsLength > maxRangeLength) {\n const interpolator = piecewiseInterpolator()(hslInterpolator(), range.map(e => getHslString(e)));\n for (let i = 0; i < newStopsLength; i++) {\n newRange[i] = interpolator(i / (newStopsLength - 1));\n }\n } else {\n newRange = range.slice(0, newStopsLength);\n }\n return { newRange };\n};\n\n/**\n*\n*\n* @param {*} domain\n* @returns\n*/\nconst indexedDomain = (domain) => {\n const uniqueVals = domain;\n const retDomain = domain.map((d, i) => (i) / (domain.length - 1));\n return { domain: retDomain, uniqueVals, scaleDomain: [0, 1] };\n};\n\n/**\n *\n *\n * @param {*} domain\n * @returns\n */\nconst indexedDomainMeasure = (domain, stops, range) => {\n const uniqueVals = domain;\n return { domain, uniqueVals, scaleDomain: [0, 1], range };\n};\n\n/**\n *\n *\n * @param {*} domain\n * @returns\n */\nconst normalDomain = (domain, stops, range) => {\n const uniqueVals = domain;\n return { uniqueVals, domain, nice: true, range };\n};\n\n/**\n *\n *\n * @param {*} domain\n * @param {*} stops\n * @returns\n */\nconst steppedDomain = (domain, stops, range) => {\n const { domain: uniqueVals, newStops } = getStops(domain, stops);\n const { newRange } = rangeStops(newStops.length - 1, range);\n\n return { uniqueVals, domain: newStops, nice: true, range: newRange };\n};\n\nconst continousSteppedDomain = (domain, stops, range) => {\n const { domain: uniqueVals, newStops } = getStops(domain, range.length - 1);\n const hslRange = range.map(e => getHslString(e));\n return { uniqueVals, domain: newStops, nice: true, range: hslRange };\n};\n\n/**\n *\n *\n * @param {*} domainValue\n * @param {*} scale\n * @param {*} domain\n * @param {*} uniqueVals\n * @returns\n */\nconst uniqueRange = (domainValue, scale, domain, uniqueVals) => {\n const index = uniqueVals.indexOf(domainValue);\n const numVal = domain[index];\n return scale(numVal);\n};\n\n/**\n *\n *\n * @param {*} domainValue\n * @param {*} scale\n * @param {*} domain\n * @returns\n */\nconst indexedRange = (domainValue, scale, domain) => {\n const numVal = (domainValue - domain[0]) / (domain[domain.length - 1] - domain[0]);\n\n return scale(numVal);\n};\n\n/**\n *\n *\n * @param {*} domainValue\n * @param {*} scale\n */\nconst normalRange = (domainValue, scale) => scale(domainValue);\n\n/**\n *\n *\n * @param {*} stops\n */\nconst strategies = () => ({\n [`${CONTINOUS}-${CONTINOUS}-${SEQUENTIAL}`]: {\n scale: SEQUENTIAL,\n domainRange: () => indexedDomainMeasure,\n value: () => indexedRange\n },\n [`${CONTINOUS}-${DISCRETE}-${SEQUENTIAL}`]: {\n scale: SEQUENTIAL,\n domainRange: () => indexedDomainMeasure,\n value: () => indexedRange\n },\n [`${DISCRETE}-${DISCRETE}-${SEQUENTIAL}`]: {\n scale: SEQUENTIAL,\n domainRange: () => indexedDomain,\n value: () => uniqueRange\n },\n [`${DISCRETE}-${DISCRETE}-${ORDINAL}`]: {\n scale: ORDINAL,\n domainRange: () => normalDomain,\n value: () => normalRange\n },\n [`${CONTINOUS}-${CONTINOUS}-${ORDINAL}`]: {\n scale: LINEAR,\n domainRange: () => continousSteppedDomain,\n value: () => normalRange\n },\n [`${CONTINOUS}-${DISCRETE}-${ORDINAL}`]: {\n scale: QUANTILE,\n domainRange: () => steppedDomain,\n value: () => normalRange\n\n }\n});\n\n/**\n *\n *\n * @param {*} domainType\n * @param {*} rangeType\n * @param {*} schemeType\n * @param {*} stops\n */\nexport const strategyGetter = (domainType, rangeType, schemeType, stops) =>\n strategies(stops)[`${domainType}-${rangeType}-${schemeType || ''}`];\n","/**\n * @module Axis\n * This file declares a class that is used to render an axis to add meaning to\n * plots.\n */\nimport { getUniqueId, generateGetterSetters, rgbToHsv } from 'muze-utils';\nimport { createScale, getScheme, getSchemeType } from '../scale-creator';\nimport { CONTINOUS, DISCRETE, COLOR } from '../enums/constants';\nimport { strategyGetter } from './color-strategy';\nimport { DEFAULT_CONFIG } from './defaults';\nimport { PROPS, getHslString } from './props';\n\n/**\n* This class is used to instantiate a SimpleAxis.\n* @class SimpleAxis\n*/\nexport default class ColorAxis {\n\n /**\n * Creates an instance of SimpleAxis.\n * @param {Object} config input parameters.\n * @param {Object | undefined} params.range Type of color range.\n * @param {string} params.name the label to show on axis.\n * @param {string} params.type The type of scale to handle.\n * @memberof ColorAxis\n */\n constructor (config) {\n generateGetterSetters(this, PROPS);\n this.config(config);\n\n this._domainType = this._config.type === 'linear' ? CONTINOUS : DISCRETE;\n this._rangeType = (this._config.type === 'linear' && !this._config.step) ? CONTINOUS : DISCRETE;\n\n this._schemeType = getSchemeType(this._config.range);\n\n this._colorStrategy = this.setColorStrategy(this._domainType, this._rangeType, this._schemeType);\n this._scale = this.createScale(this._colorStrategy);\n\n this._id = getUniqueId();\n\n this.updateDomain(config.domain);\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof ColorAxis\n */\n static defaultConfig () {\n return DEFAULT_CONFIG;\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof ColorAxis\n */\n static type () {\n return COLOR;\n }\n\n /**\n *\n *\n * @param {*} colorStrategy\n * @returns\n * @memberof ColorAxis\n */\n createScale (colorStrategy) {\n const { range } = this.config();\n if (range && typeof (range) === 'string') {\n return getScheme(range);\n }\n return createScale({\n type: colorStrategy.scale,\n range\n });\n }\n\n /**\n *\n *\n * @param {*} domainType\n * @param {*} rangeType\n * @param {*} schemeType\n * @returns\n * @memberof ColorAxis\n */\n setColorStrategy (domainType, rangeType, schemeType) {\n const { stops } = this.config();\n\n return strategyGetter(domainType, rangeType, schemeType, stops);\n }\n\n /**\n *\n *\n * @param {*} domainVal\n * @returns\n * @memberof ColorAxis\n */\n getHslString (hslColorArray) {\n return getHslString(hslColorArray);\n }\n /**\n *\n *\n * @param {*} domainVal\n * @returns\n * @memberof ColorAxis\n */\n getColor (domainVal) {\n return this.getHslString(this.getRawColor(domainVal));\n }\n /**\n *\n *\n * @param {*} domainVal\n * @returns\n * @memberof ColorAxis\n */\n getRawColor (domainVal) {\n if (this.domain() && domainVal !== undefined) {\n const scale = this.scale();\n const range = scale.range ? scale.range() : null;\n const color = this._colorStrategy.value(range)(domainVal, scale, this.domain(), this.uniqueValues());\n\n if (typeof color === 'string') {\n const col = color.substring(color.indexOf('(') + 1, color.lastIndexOf(')')).split(/,\\s*/);\n return rgbToHsv(...col);\n }\n return [...color];\n }\n return [...this.config().value];\n }\n\n /**\n *\n *\n * @param {*} [domain=[]]\n * @returns\n * @memberof ColorAxis\n */\n updateDomain (domain = []) {\n if (domain.length) {\n const scale = this.scale();\n const range = scale.range ? scale.range() : null;\n const domainRangeFn = this._colorStrategy.domainRange();\n const scaleInfo = domainRangeFn(domain, this.config().stops, range);\n\n this.domain(scaleInfo.domain);\n scaleInfo.range && this.scale().range(scaleInfo.range);\n this.uniqueValues(scaleInfo.uniqueVals);\n this.scale().domain(scaleInfo.scaleDomain || this.domain());\n }\n return this;\n }\n\n /**\n * This method returns an object that can be used to\n * reconstruct this instance.\n *\n * @return {Object} the serializable props of axis\n * @memberof ShapeAxis\n */\n serialize () {\n return {\n type: this.constructor.type(),\n scale: this.scale(),\n domain: this.domain(),\n config: this.config()\n };\n }\n\n transformColor (color, transformationArr) {\n const h = color[0] * 360;\n const s = color[1] * 100;\n const l = color[2] * 100;\n const a = color[3] || 1;\n const newH = h + transformationArr[0];\n const newS = s + transformationArr[1];\n const newL = l + transformationArr[2];\n const newA = a + transformationArr[3] || 0;\n\n return { color: `hsla(${newH},${newS}%,${newL}%,${newA})`, hsla: [newH / 360, newS / 100, newL / 100, newA] };\n }\n\n /**\n * Returns the id of the axis.\n * @return {string} Unique identifier of the axis.\n */\n id () {\n return this._id;\n }\n\n}\n","export const DEFAULT_CONFIG = {\n value: 36,\n range: [36, 1000]\n};\n","import { numberInterpolator, piecewiseInterpolator } from 'muze-utils';\nimport { CONTINOUS, DISCRETE } from '../enums/constants';\nimport { LINEAR, THRESHOLD } from '../enums/scale-type';\n\n/**\n *\n *\n * @param {*} domain\n * @returns\n */\nconst indexedDomain = (domain) => {\n const uniqueVals = domain;\n const retDomain = domain.map((d, i) => (i) / (domain.length - 1));\n return { domain: retDomain, uniqueVals, scaleDomain: [0, 1] };\n};\n\n/**\n *\n *\n * @param {*} domain\n * @returns\n */\nconst normalDomain = (domain) => {\n const uniqueVals = domain;\n return { uniqueVals, domain };\n};\n\n/**\n *\n *\n * @param {*} domain\n * @param {*} intervals\n * @returns\n */\nconst steppedDomain = (domain, intervals) => {\n let newIntervals = [];\n if (intervals instanceof Array) {\n newIntervals = intervals.slice().sort();\n } else {\n const interpolator = numberInterpolator()(...domain);\n for (let i = 0; i < intervals; i++) {\n newIntervals[i] = interpolator(i / (intervals - 1));\n }\n }\n if (newIntervals[0] < domain[0]) {\n newIntervals.shift();\n }\n const retDomain = newIntervals;\n return { uniqueVals: newIntervals, domain: retDomain, nice: true };\n};\n\n/**\n *\n *\n * @param {*} domainValue\n * @param {*} scale\n * @param {*} domain\n * @param {*} uniqueVals\n * @returns\n */\nconst discreteRange = (domainValue, scale, domain) => {\n const numVal = (domainValue - domain[0]) / (domain[domain.length - 1] - domain[0]);\n const interpolator = numberInterpolator()(...scale.range());\n return interpolator(numVal);\n};\n\n/**\n *\n *\n * @param {*} domainValue\n * @param {*} scale\n * @param {*} domain\n * @returns\n */\nconst pieceWiseRange = (domainValue, scale, domain, uniqueVals) => {\n const index = uniqueVals.indexOf(domainValue);\n const numVal = domain[index];\n const fn = piecewiseInterpolator()(numberInterpolator(), [...scale.range()]);\n return fn(numVal);\n};\n\n/**\n *\n *\n * @param {*} domainValue\n * @param {*} scale\n */\nconst normalRange = (domainValue, scale) => scale(domainValue);\n\n/**\n *\n *\n * @param {*} intervals\n */\nconst strategies = {\n [`${DISCRETE}-${CONTINOUS}`]: {\n scale: LINEAR,\n domain: indexedDomain,\n range: pieceWiseRange\n },\n [`${CONTINOUS}-${CONTINOUS}`]: {\n scale: LINEAR,\n domain: normalDomain,\n range: normalRange\n },\n [`${CONTINOUS}-${DISCRETE}`]: {\n scale: THRESHOLD,\n domain: steppedDomain,\n range: discreteRange\n }\n};\n\n/**\n *\n *\n * @param {*} domainType\n * @param {*} rangeType\n * @param {*} schemeType\n * @param {*} intervals\n */\nexport const strategyGetter = (domainType, rangeType) =>\n strategies[`${domainType}-${rangeType}`];\n","export const PROPS = {\n config: {},\n domain: {\n sanitization: (context, value) => {\n context.scale().domain(value);\n return value;\n }\n },\n range: {},\n scale: {},\n uniqueValues: {}\n};\n","/**\n * @module Axis\n * This file declares a class that is used to render an axis to add meaning to\n * plots.\n */\nimport { getUniqueId, generateGetterSetters } from 'muze-utils';\nimport { createScale } from '../scale-creator';\nimport { DEFAULT_CONFIG } from './defaults';\nimport { SIZE, CONTINOUS, DISCRETE } from '../enums/constants';\nimport { strategyGetter } from './size-strategy';\nimport { PROPS } from './props';\n\n/**\n* This class is used to instantiate a SimpleAxis.\n* @class SimpleAxis\n*/\nexport default class SizeAxis {\n\n /**\n * Creates an instance of SimpleAxis.\n * @param {Object} config input parameters.\n * @memberof SizeAxis\n */\n constructor (config) {\n generateGetterSetters(this, PROPS);\n\n this._id = getUniqueId();\n this._config = Object.assign({}, this.constructor.defaultConfig(), config);\n // @todo: Will use configuration override using scale decorator\n this._domainType = this._config.type === 'linear' ? CONTINOUS : DISCRETE;\n this._rangeType = CONTINOUS;\n\n this._sizeStrategy = this.setStrategy(this._domainType, this._rangeType);\n this._scale = this.createScale(this._sizeStrategy);\n this._range = this._config.range;\n\n this.updateDomain(config.domain);\n }\n\n /**\n *\n *\n * @param {*} domainType\n * @param {*} rangeType\n * @param {*} schemeType\n * @returns\n * @memberof ColorAxis\n */\n setStrategy (domainType, rangeType) {\n return strategyGetter(domainType, rangeType);\n }\n\n /**\n *\n *\n * @returns\n * @memberof SizeAxis\n */\n createScale (strategy) {\n const {\n range\n } = this.config();\n return createScale({\n type: strategy.scale,\n range\n });\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof ColorAxis\n */\n static defaultConfig () {\n return DEFAULT_CONFIG;\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof ColorAxis\n */\n static type () {\n return SIZE;\n }\n\n /**\n *\n *\n * @param {*} domainVal\n * @returns\n * @memberof SizeAxis\n */\n getSize (domainVal = 0) {\n let sizeVal = 1;\n const {\n value\n } = this.config();\n const scale = this.scale();\n const domain = this.domain() || [1, 1];\n\n if (!scale || domain[0] === domain[1]) {\n sizeVal = value;\n } else {\n return this._sizeStrategy.range(domainVal, scale, this.domain(), this.uniqueValues());\n }\n return sizeVal;\n }\n\n /**\n * This method is used to assign a domain to the axis.\n *\n * @param {Array} domain the domain of the scale\n * @memberof SizeAxis\n */\n updateDomain (domain) {\n if (domain) {\n const domainFn = this._sizeStrategy.domain;\n\n const domainInfo = domainFn(domain, this.config().intervals);\n\n this.domain(domainInfo.domain);\n this.uniqueValues(domainInfo.uniqueVals);\n\n this.scale().domain(domainInfo.scaleDomain || this.domain());\n }\n return this;\n }\n\n /**\n * This method returns an object that can be used to\n * reconstruct this instance.\n *\n * @return {Object} the serializable props of axis\n * @memberof ShapeAxis\n */\n serialize () {\n return {\n type: this.constructor.type(),\n scale: this.scale(),\n domain: this.domain(),\n range: this.range(),\n config: this.config()\n };\n }\n\n /**\n * Returns the id of the axis.\n * @return {string} Unique identifier of the axis.\n */\n id () {\n return this._id;\n }\n}\n","export const DEFAULT_CONFIG = {\n generator: null,\n value: 'circle',\n range: ['circle', 'diamond', 'star', 'cross', 'square', 'wye', 'triangle']\n};\n","export const PROPS = {\n config: {},\n domain: {},\n scale: {},\n uniqueValues: {},\n generator: {}\n};\n\n","/**\n * @module Axis\n * This file declares a class that is used to render an axis to add meaning to\n * plots.\n */\nimport { getUniqueId, getSymbol, generateGetterSetters, mergeRecursive } from 'muze-utils';\nimport { createScale } from '../scale-creator';\nimport { DEFAULT_CONFIG } from './defaults';\nimport { SHAPE } from '../enums/constants';\nimport { shapeGenerator } from './helper';\nimport { PROPS } from './props';\n\n/**\n* This class is used to instantiate a SimpleAxis.\n* @class SimpleAxis\n*/\nexport default class ShapeAxis {\n /**\n * Creates an instance of SimpleAxis.\n * @param {Object} params input parameters.\n * @param {Object | undefined} params.range Type of color scheme.\n * @memberof ShapeAxis\n */\n constructor (config) {\n generateGetterSetters(this, PROPS);\n\n this._id = getUniqueId();\n this._config = Object.assign({}, this.constructor.defaultConfig());\n this._config = mergeRecursive(this._config, config);\n\n this._scale = createScale({\n type: 'ordinal',\n range: this._config.range\n });\n this.updateDomain(config.domain);\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof ColorAxis\n */\n static defaultConfig () {\n return DEFAULT_CONFIG;\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof ColorAxis\n */\n static type () {\n return SHAPE;\n }\n\n /**\n *\n *\n * @param {*} value\n * @returns\n * @memberof ShapeAxis\n */\n getShape (value) {\n if (!this.scale() || !this.domain() || !value) {\n return this.config().value;\n }\n\n if (this._generatedShapes) {\n return this._generatedShapes[value];\n }\n\n const shapeType = this.scale()(value);\n if (shapeType === 'string') {\n return getSymbol(shapeType);\n }\n\n return shapeType;\n }\n\n /**\n * This method is used to assign a domain to the axis.\n *\n * @param {Array} domain the domain of the scale\n * @memberof ShapeAxis\n */\n updateDomain (domain = []) {\n if (domain.length) {\n this.uniqueValues(domain);\n this.domain(domain);\n this.scale().domain(domain);\n\n if (this.config().generator) {\n this._generatedShapes = shapeGenerator(domain, this.config().generator);\n }\n }\n return this;\n }\n\n /**\n * This method returns an object that can be used to\n * reconstruct this instance.\n *\n * @return {Object} the serializable props of axis\n * @memberof ShapeAxis\n */\n serialize () {\n return {\n type: this.constructor.type(),\n scale: this.scale(),\n domain: this.domain(),\n range: this.config().range,\n config: this.config()\n };\n }\n\n /**\n * Returns the id of the axis.\n * @return {string} Unique identifier of the axis.\n */\n id () {\n return this._id;\n }\n}\n","/**\n *\n *\n * @param {*} domain\n * @param {*} generatorFn\n * @returns\n */\nexport const shapeGenerator = (domain, generatorFn) => {\n const generatedShapes = {};\n domain.forEach((value) => {\n generatedShapes[value] = generatorFn(value);\n });\n return generatedShapes;\n};\n","import * as ScaleType from './enums/scale-type';\n\nconst DATA_TYPES = {\n DIMENSION: 'dimension',\n CATEGORICAL: 'categorical',\n MEASURE: 'measure',\n DATETIME: 'temporal'\n};\n\n/**\n * Map of DataModel types to associated field types.\n */\nexport const dataTypeScaleMap = {\n [DATA_TYPES.DIMENSION]: ScaleType.BAND,\n [DATA_TYPES.MEASURE]: ScaleType.LINEAR,\n [DATA_TYPES.DATETIME]: ScaleType.TIME\n};\n\n","import { nestCollection } from 'muze-utils';\n\n/**\n * Create multiple datasets from a single dataset by grouping the data using\n * a dimensional field.\n * @param {Array} schema Name and type of fields are stored in schema\n * @param {Array} data Data array\n * @param {Object} config Configuration object\n * @return {Array} Grouped data array\n */\nexport default (schema, data, config) => {\n const groupBy = config.groupBy instanceof Array ? config.groupBy : [config.groupBy];\n const groupByIndices = groupBy.map(fieldName => schema.findIndex(d => d.name === fieldName));\n\n if (groupByIndices.find(d => d === -1) !== undefined) {\n throw new Error(`Groupby field ${groupBy} not found in schema`);\n }\n\n return nestCollection({\n keys: groupByIndices,\n data\n });\n};\n","/**\n * @module Transform\n * This file exports a function that is used to implement\n * the identity transform\n */\n /* eslint no-unused-vars: 0 */\n /**\n * This function accepts data and returns the data unchanged.\n * @param {Object} schema The schema.\n * @param {Array} data The data array.\n * @param {Object} config The config object.\n * @return {Array} The unchanged data.\n */\n function identityTransform (schema, data, config) {\n return data;\n }\n\n export default identityTransform;\n","/**\n * @module Transform\n * This file exports the transform factory.\n */\nimport * as TransformType from '../enums/transform-type';\nimport identity from '../identity-transform';\nimport group from '../group-transform';\nimport stack from '../stack-transform';\n\n/* istanbul ignore next */\nconst transformMap = {\n [TransformType.IDENTITY]: identity,\n [TransformType.GROUP]: group,\n [TransformType.STACK]: stack\n};\n\n/**\n * This function is used to retirn a transform associated\n * with the given type.\n *\n * @param {string} type The type of the transform.\n * @return {Function} The transform function.\n */\nfunction transformFactory (type) {\n const transform = transformMap[type];\n if (typeof transform !== 'function') {\n throw new Error('Invalid transform type supplied.');\n }\n return transform;\n}\n\nexport default transformFactory;\n","/**\n * @module Transform\n * This module exports constants that are used to reference transforms in\n * a consistent manner throughout the project.\n */\n/* eslint one-var: 0 */\n export const IDENTITY = 'identity';\n export const GROUP = 'group';\n export const STACK = 'stack';\n export const FRACTURE = 'fracture';\n","import { stack } from 'muze-utils';\n\nimport group from '../group-transform';\n/*\n Normalize the data to a form which can be given to d3 stack for stacking the data\n ['Product', 'Sales', 'Region'],\n 0 ['A', 2000, 'North'],\n 1 ['A', 3000, 'South'],\n 2 ['B', 3000, 'South'],\n 3 ['B', 2000, 'North'],\n 4 ['C', 3000, 'South'],\n 5 ['C', 2000, 'North']\n |\n |\n ['Product', 'North', 'South'],\n ['A', 2000, 3000],\n ['B', 2000, 3000],\n ['C', 2000, 3000]\n*/\n// eslint-disable-next-line require-jsdoc\nconst normalizeData = (data, schema, valueField, uniqueField, groupBy) => {\n const groupedData = group(schema, data, {\n groupBy: uniqueField\n });\n const uniqueFieldIndex = schema.findIndex(d => d.name === uniqueField);\n const valueFieldIndex = schema.findIndex(d => d.name === valueField);\n const seriesKeyIndex = schema.findIndex(d => d.name === groupBy);\n const seriesKeys = data.map(d => d[seriesKeyIndex]).filter((item, pos, arr) => arr.indexOf(item) === pos).sort();\n const fieldNames = schema.reduce((acc, obj, i) => {\n acc[i] = obj.name;\n return acc;\n }, {});\n const dataArr = groupedData.map((arr) => {\n const tuples = {};\n const rowObj = arr.values.reduce((acc, row) => {\n acc = row.reduce((obj, value, i) => {\n if (i === seriesKeyIndex) {\n obj[value] = row[valueFieldIndex];\n tuples[value] = row;\n } else if (i !== valueFieldIndex) {\n obj[fieldNames[i]] = value;\n }\n return obj;\n }, acc);\n return acc;\n }, {});\n rowObj._tuple = tuples;\n // Set missing values field to zero value\n seriesKeys.forEach((seriesKey) => {\n if (rowObj[seriesKey] === undefined) {\n rowObj[seriesKey] = 0;\n const newArr = new Array(arr.values[0].length);\n newArr[uniqueFieldIndex] = arr.key;\n newArr[seriesKeyIndex] = seriesKey;\n rowObj._tuple[seriesKey] = newArr;\n }\n });\n return rowObj;\n });\n\n return {\n data: dataArr,\n keys: seriesKeys\n };\n};\n/**\n * Generate a stacked representation of data\n * @param {Array} schema schema Array\n * @param {Array} data data array\n * @param {Object} config Configuration object\n * @return {Array} stacked data\n */\nexport default (schema, data, config) => {\n const uniqueField = config.uniqueField;\n const valueField = config.value;\n const groupBy = config.groupBy;\n const sort = config.sort || 'descending';\n const normalizedData = normalizeData(data, schema, valueField, uniqueField, groupBy);\n const keys = normalizedData.keys;\n const map = {};\n const orderBy = config.orderBy;\n const orderIndex = schema.findIndex(d => d.name === orderBy);\n const groupByIndex = schema.findIndex(d => d.name === groupBy);\n if (orderIndex !== -1) {\n keys.forEach((key) => {\n const name = data.find(d => d[groupByIndex] === key);\n map[key] = name[orderIndex];\n });\n normalizedData.keys.sort((a, b) => map[a].localeCompare(map[b]));\n }\n\n const stackData = stack({\n keys: normalizedData.keys,\n offset: config.offset || 'diverging',\n order: sort,\n data: normalizedData.data\n });\n stackData.forEach((seriesData) => {\n seriesData.forEach((dataObj) => {\n dataObj.data = dataObj.data._tuple[seriesData.key];\n });\n });\n return stackData;\n};\n\n","import {\n FieldType,\n getDomainFromData,\n setStyles,\n easeFns,\n selectElement,\n DimensionSubtype\n} from 'muze-utils';\nimport { ScaleType } from '@chartshq/muze-axis';\nimport { transformFactory } from '@chartshq/transform';\nimport { IDENTITY, STACK, GROUP, COLOR, SHAPE, SIZE, ENCODING } from '../enums/constants';\n\nconst BAND = ScaleType.BAND;\n\nexport const getLayerColor = ({ datum, index }, { colorEncoding, colorAxis, colorFieldIndex }) => {\n let rawColor = '';\n let color = '';\n if (colorEncoding && colorEncoding.value instanceof Function) {\n color = colorEncoding.value(datum, index);\n rawColor = colorEncoding.value(datum, index);\n } else {\n rawColor = colorAxis.getRawColor(datum._data[colorFieldIndex]);\n color = colorAxis.getHslString(rawColor);\n }\n return { color, rawColor };\n};\n\nconst transfromColor = (colorAxis, datum, styleType, intensity) => {\n datum.meta.stateColor[styleType] = datum.meta.stateColor[styleType] || datum.meta.originalColor;\n const fillColorInfo = colorAxis.transformColor(datum.meta.stateColor[styleType], intensity);\n datum.meta.stateColor[styleType] = fillColorInfo.hsla;\n\n return fillColorInfo;\n};\n\nexport const applyInteractionStyle = (context, selectionSet, interactionStyles, config) => {\n const elements = context.getPlotElementsFromSet(selectionSet);\n const axes = context.axes();\n const colorAxis = axes.color;\n const apply = config.apply;\n const interactionType = config.interactionType;\n interactionStyles.forEach((style) => {\n const styleType = style.type;\n elements.style(styleType, ((d) => {\n const { colorTransform, stateColor, originalColor } = d.meta;\n colorTransform[interactionType] = colorTransform[interactionType] || {};\n if (apply && !colorTransform[interactionType][styleType]) {\n // fade selections\n colorTransform[interactionType][styleType] = style.intensity;\n const color = transfromColor(colorAxis, d, styleType, style.intensity).color;\n return color;\n }\n if (!apply && colorTransform[interactionType][styleType]) {\n // unfade selections\n colorTransform[interactionType][styleType] = null;\n return transfromColor(colorAxis, d, styleType, style.intensity.map(e => -e)).color;\n }\n const [h, s, l, a] = stateColor[styleType] ? stateColor[styleType] : originalColor;\n return `hsla(${h * 360},${s * 100}%,${l * 100}%, ${a || 1})`;\n }));\n });\n};\n\n/**\n *\n *\n * @param {*} selectionSet\n * @param {*} className\n * @param {*} hasFaded\n */\nexport const fadeUnfadeSelection = (context, selectionSet, hasFaded, interaction) => {\n const interactionConfig = { interaction, apply: hasFaded };\n applyInteractionStyle(context, selectionSet, 'fade', interactionConfig);\n};\n\n/**\n *\n *\n * @param {*} selectionSet\n * @param {*} className\n * @param {*} hasFaded\n */\nexport const focusUnfocusSelection = (context, selectionSet, isFocussed, interaction) => {\n const interactionConfig = { interaction, apply: isFocussed };\n applyInteractionStyle(context, selectionSet, 'focus', interactionConfig);\n};\n\n/**\n *\n *\n * @param {*} axes\n * @returns\n */\nexport const getAxesScales = (axes) => {\n const [xAxis, yAxis] = [ENCODING.X, ENCODING.Y].map(e => axes[e]);\n const [xScale, yScale] = [xAxis, yAxis].map(e => e && e.scale());\n return {\n xAxis,\n yAxis,\n xScale,\n yScale\n };\n};\n\n/**\n *\n *\n * @param {*} encoding\n * @param {*} fieldsConfig\n * @returns\n */\nexport const getEncodingFieldInf = (encoding, fieldsConfig) => {\n const [xField, yField, x0Field, y0Field, colorField, shapeField, sizeField] =\n [ENCODING.X, ENCODING.Y, ENCODING.X0, ENCODING.Y0, COLOR, SHAPE, SIZE].map(e => encoding[e] &&\n encoding[e].field);\n\n const [xFieldType, yFieldType] = [xField, yField, x0Field, y0Field].map(e => fieldsConfig[e] &&\n fieldsConfig[e].def.type);\n\n const [xFieldSubType, yFieldSubType] = [xField, yField].map(e => fieldsConfig[e] && (fieldsConfig[e].def.subtype ||\n fieldsConfig[e].def.type));\n\n const [xFieldIndex, yFieldIndex, x0FieldIndex, y0FieldIndex] = [xField, yField, x0Field, y0Field]\n .map(e => fieldsConfig[e] && fieldsConfig[e].index);\n\n return {\n xField,\n yField,\n colorField,\n shapeField,\n sizeField,\n x0Field,\n y0Field,\n xFieldType,\n yFieldType,\n xFieldSubType,\n yFieldSubType,\n xFieldIndex,\n yFieldIndex,\n x0FieldIndex,\n y0FieldIndex\n };\n};\n\n/**\n *\n *\n * @param {*} layerConfig\n * @param {*} fieldsConfig\n * @returns\n */\nexport const getValidTransform = (layerConfig, fieldsConfig, encodingFieldInf) => {\n let transformType;\n const {\n transform\n } = layerConfig;\n const {\n xField,\n yField,\n xFieldType,\n yFieldType\n } = encodingFieldInf;\n const groupByField = transform.groupBy;\n const groupByFieldMeasure = fieldsConfig[groupByField] && fieldsConfig[groupByField].def.type === FieldType.MEASURE;\n transformType = transform.type;\n if (!xField || !yField || groupByFieldMeasure || !groupByField || xFieldType === FieldType.DIMENSION &&\n yFieldType === FieldType.DIMENSION) {\n transformType = IDENTITY;\n }\n return transformType;\n};\n\n/**\n *\n *\n * @param {*} dataModel\n * @param {*} config\n * @param {*} transformType\n * @returns\n */\nexport const transformData = (dataModel, config, transformType, encodingFieldInf) => {\n const data = dataModel.getData({ withUid: true });\n const schema = data.schema;\n const transform = config.transform;\n const {\n xField,\n yField,\n xFieldType,\n yFieldType\n } = encodingFieldInf;\n const uniqueField = xFieldType === FieldType.MEASURE ? yField : xField;\n\n return transformFactory(transformType)(schema, data.data, {\n groupBy: transform.groupBy,\n uniqueField,\n sort: transform.sort || 'none',\n offset: transform.offset,\n orderBy: transform.orderBy,\n value: yFieldType === FieldType.MEASURE ? yField : xField\n }, data.uids);\n};\n\nexport const getIndividualClassName = (d, i, data, context) => {\n const className = context.config().individualClassName;\n let classNameStr = '';\n if (className instanceof Function) {\n classNameStr = className(d, i, data, context);\n }\n return classNameStr;\n};\n\n/*\n * This method resolves the x, y, x0 and y0 values from the transformed data.\n * It also checks the type of transformed data for example, if it is a stacked data\n * then it fetches the y and y0 values from the stacked data.\n * @param {Array.} transformedData transformed data\n * @param {Object} fieldsConfig field definitions\n * @param {string} transformType type of transformed data - stack, group or identity.\n * @return {Array.} Normalized data\n*/\nexport const getNormalizedData = (transformedData, fieldsConfig, encodingFieldInf, transformType) => {\n const transformedDataArr = transformType === IDENTITY ? [transformedData] : transformedData;\n const {\n xFieldType,\n xFieldIndex,\n yFieldIndex,\n x0FieldIndex,\n y0FieldIndex\n } = encodingFieldInf;\n const fieldsLen = Object.keys(fieldsConfig).length;\n /**\n * Returns normalized data from transformed data. It recursively traverses through\n * the transformed data if there it is nested.\n */\n return transformedDataArr.map((data) => {\n const values = transformType === GROUP ? data.values : data;\n return values.map((d) => {\n let pointObj = {};\n let tuple;\n if (transformType === STACK) {\n tuple = d.data || [];\n let y;\n let y0;\n let x;\n let x0;\n if (d[1] >= d[0]) {\n y = x0 = d[1];\n x = y0 = d[0];\n } else {\n y = x0 = d[0];\n x = y0 = d[1];\n }\n\n pointObj = xFieldType === FieldType.MEASURE ? {\n x,\n x0,\n y: tuple[yFieldIndex],\n y0: tuple[yFieldIndex]\n } : {\n x: tuple[xFieldIndex],\n x0: tuple[xFieldIndex],\n y,\n y0\n };\n pointObj._data = tuple;\n pointObj._id = tuple[fieldsLen];\n } else {\n pointObj = {\n x: d[xFieldIndex],\n y: d[yFieldIndex],\n x0: d[x0FieldIndex],\n y0: d[y0FieldIndex]\n };\n pointObj._data = d;\n pointObj._id = d[fieldsLen];\n }\n return pointObj;\n });\n }).filter(d => d.length);\n};\n\nexport const calculateDomainFromData = (data, encodingFieldInf, transformType) => {\n const {\n xFieldSubType,\n yFieldSubType,\n xField,\n yField,\n x0Field,\n y0Field\n } = encodingFieldInf;\n const domains = {};\n const yEnc = ENCODING.Y;\n const xEnc = ENCODING.X;\n if (xField) {\n domains.x = getDomainFromData(data, x0Field || transformType === STACK ? [xEnc, ENCODING.X0] : [xEnc, xEnc],\n xFieldSubType);\n }\n if (yField) {\n domains.y = getDomainFromData(data, y0Field || transformType === STACK ? [ENCODING.Y0, ENCODING.Y] :\n [yEnc, yEnc], yFieldSubType);\n }\n\n return domains;\n};\n\nexport const attachDataToVoronoi = (voronoi, points) => {\n voronoi.data([].concat(...points).filter(d => d._id !== undefined).map((d) => {\n const point = d.update;\n return {\n x: point.x,\n y: point.y,\n data: d\n };\n }));\n};\n\n/**\n *\n *\n * @param {*} target\n * @param {*} styles\n * @param {*} remove\n */\nexport const updateStyle = (target, styles, remove) => {\n for (const key in styles) {\n if ({}.hasOwnProperty.call(styles, key)) {\n target.style(key, remove ? null : styles[key]);\n }\n }\n};\n\n/**\n *\n *\n * @param {*} mount\n * @param {*} context\n */\nexport const animateGroup = (mount, context) => {\n let groupTransition;\n let update;\n const { transition, groupAnimateStyle } = context;\n const { duration, effect, disabled } = transition;\n if (groupAnimateStyle) {\n setStyles(mount.node(), groupAnimateStyle.enter);\n update = groupAnimateStyle.update;\n if (!disabled) {\n groupTransition = mount.transition()\n .ease(easeFns[effect])\n .duration(duration)\n .on('end', function () {\n updateStyle(selectElement(this), update, true);\n });\n } else {\n groupTransition = mount;\n }\n updateStyle(groupTransition, update);\n }\n};\n\nexport const positionPoints = (context, points) => {\n const positioner = context.encodingTransform();\n if (positioner) {\n return positioner(points, context, { smartLabel: context._dependencies.smartLabel });\n }\n return points;\n};\n\n/**\n * Gets the width of each group. It gets the width from axis if it is available for\n * example when the scale is nominal else it calculates the width from the\n * range of the axis and number of data points.\n *\n * @param {SimpleAxis} axis instance of axis\n * @param {number} minDiff Minimum difference between data points\n * @return {number} width of each bar\n * @private\n*/\nexport const getGroupSpan = (axis, minDiff) => {\n let groupSpan;\n const width = axis.getUnitWidth();\n const scale = axis.scale();\n const range = scale.range();\n const domain = scale.domain();\n !width ? groupSpan = (Math.abs(range[1] - range[0]) / Math.abs(domain[1] - domain[0])) * minDiff :\n (groupSpan = width);\n\n return groupSpan;\n};\n\nexport const getPlotMeasurement = (context, dimensionalValues) => {\n const fieldInfo = context.encodingFieldsInf();\n const axes = context.axes();\n const transformType = context.transformType();\n const config = context.config();\n const bandScale = context._bandScale;\n\n return ['x', 'y'].map((type) => {\n let span = 0;\n let groupSpan = 0;\n let padding = 0;\n let offsetValues = [];\n if (fieldInfo[`${type}FieldType`] === FieldType.DIMENSION) {\n let actualGroupWidth;\n const isTemporal = fieldInfo[`${type}FieldSubType`] === DimensionSubtype.TEMPORAL;\n const timeDiff = isTemporal ? context.dataProps().timeDiffs[type] : 0;\n const axis = axes[type];\n const pad = config[`pad${type.toUpperCase()}`];\n const innerPadding = config.innerPadding;\n const keys = dimensionalValues;\n const scale = axis.scale();\n groupSpan = getGroupSpan(axis, timeDiff);\n const isAxisBandScale = axis.constructor.type() === BAND;\n const axisPadding = axis.config().padding;\n // If it is a grouped bar then the width of each bar in a grouping is retrieved from\n // a band scale. The band scale will have range equal to width of one group of bars and\n // the domain is set to series keys.\n if (transformType === 'group') {\n const groupPadding = isAxisBandScale ? 0 : axisPadding * groupSpan / 2;\n bandScale.range([groupPadding, groupSpan - groupPadding]).domain(keys).paddingInner(innerPadding);\n span = bandScale.bandwidth();\n actualGroupWidth = groupSpan - (isAxisBandScale ? 0 : axisPadding * groupSpan);\n offsetValues = keys.map(key => bandScale(key) - (isAxisBandScale ? 0 : (groupSpan / 2)));\n } else if (pad !== undefined) {\n let offset;\n if (isAxisBandScale) {\n const step = scale.step();\n offset = scale.padding() * step;\n span = scale.bandwidth() + offset;\n } else {\n span = groupSpan;\n }\n offsetValues = keys.map(() => (isAxisBandScale ? -(offset / 2) : -(span / 2)));\n } else {\n padding = isAxisBandScale ? 0 : axisPadding * groupSpan;\n span = groupSpan - padding;\n actualGroupWidth = span;\n offsetValues = keys.map(() => (isAxisBandScale ? 0 : -(span / 2)));\n }\n\n groupSpan = actualGroupWidth;\n padding = isAxisBandScale ? axisPadding * axis.scale().step() : axisPadding * groupSpan;\n }\n\n return {\n span,\n offsetValues,\n groupSpan,\n padding\n };\n });\n};\n","import { nextFrame } from 'muze-utils';\nimport { getValidTransform, getEncodingFieldInf } from '../helpers';\nimport * as PROPS from '../enums/props';\n\nexport const listenerMap = context => [\n {\n props: [PROPS.TRANSFORMED_DATA],\n listener: fetch => fetch(PROPS.DATA, PROPS.CONFIG, (dataModel, config) => {\n const dataModelValue = dataModel.value;\n const configValue = config.value;\n const encodingValue = configValue && configValue.encoding;\n if (dataModelValue && encodingValue) {\n const fieldsConfig = dataModelValue.getFieldsConfig();\n const encodingFieldsInf = getEncodingFieldInf(encodingValue, fieldsConfig);\n context.encodingFieldsInf(encodingFieldsInf);\n context.transformType(getValidTransform(configValue, fieldsConfig, encodingFieldsInf));\n return context.getTransformedData(dataModelValue, configValue, context.transformType(),\n encodingFieldsInf);\n }\n return null;\n }),\n type: 'computed'\n },\n {\n props: [PROPS.NORMALIZED_DATA],\n listener: fetch => fetch(PROPS.TRANSFORMED_DATA, (transformedData) => {\n const transformedDataValue = transformedData.value;\n if (transformedDataValue) {\n const fieldsConfig = context.data().getFieldsConfig();\n return context.getNormalizedData(transformedDataValue, fieldsConfig);\n }\n return null;\n }),\n type: 'computed'\n },\n {\n props: [PROPS.DOMAIN],\n listener: fetch => fetch(PROPS.NORMALIZED_DATA, (normalizedData) => {\n const normalizedDataValue = normalizedData.value;\n if (normalizedDataValue) {\n return context.calculateDomainFromData(normalizedDataValue, context.encodingFieldsInf(),\n context.data().getFieldsConfig());\n }\n return null;\n }),\n type: 'computed'\n },\n {\n props: [PROPS.DATA],\n listener: (data) => {\n if (data[1]) {\n nextFrame(() => {\n context.store().commit(PROPS.DATA_UPDATED, true);\n });\n }\n },\n type: 'registerImmediateListener'\n },\n {\n props: [PROPS.MOUNT, PROPS.DATA_UPDATED],\n listener: (mount, dataUpdated) => {\n if (mount[1] && dataUpdated[1]) {\n context.render(mount[1]);\n context.dependencies().throwback.commit('onlayerdraw', true);\n }\n },\n type: 'registerChangeListener'\n }\n];\n\n","import { mergeRecursive } from 'muze-utils';\nimport * as PROPS from '../enums/props';\n\nexport const defaultOptions = {\n [PROPS.CONFIG]: {\n value: null,\n meta: {\n sanitization: (config, oldConfig, context) => {\n const constructor = context.constructor;\n const newConf = mergeRecursive({}, constructor.defaultConfig());\n return constructor.defaultPolicy(newConf, config);\n }\n }\n },\n [PROPS.DATA]: {\n value: null,\n meta: {\n preset: (data, context) => {\n if (context._cacheEnabled) {\n context._cachedData.push(data);\n } else {\n context._cachedData = [data];\n }\n }\n }\n },\n [PROPS.MOUNT]: {\n value: null\n },\n [PROPS.AXES]: {\n value: null\n },\n [PROPS.MEASUREMENT]: {\n value: null\n }\n};\n","import {\n getUniqueId,\n mergeRecursive,\n Store,\n FieldType,\n selectElement,\n ReservedFields,\n registerListeners,\n transactor,\n DataModel,\n clone\n} from 'muze-utils';\nimport { SimpleLayer } from '../simple-layer';\nimport * as PROPS from '../enums/props';\nimport {\n transformData,\n calculateDomainFromData,\n getNormalizedData,\n applyInteractionStyle\n} from '../helpers';\nimport { listenerMap } from './listener-map';\nimport { defaultOptions } from './default-options';\n\n/**\n * An abstract class which gives defination of common layer functionality like\n * - transfromation data for various {@link mode}\n * - calculating data domain\n * - linking dependent layers\n * - merging policy of configuration\n * - interaction sideffect helpers\n * - retrieving dom elements from data using id\n * - retrieving the physical dimensions of marks\n * - disposing layer\n *\n * Every layer has to extend base layer and give concrete definition.\n * This layer does not have any default visual. A new layer has to define the logic of `render` for rendering the\n * visuals\n *\n * @public\n * @class\n * @namespace Muze\n */\nexport default class BaseLayer extends SimpleLayer {\n\n /**\n * Creates a layer using a configuration and data.\n *\n * @public\n *\n * @param {DataModel} data Instance of DataModel to be used. This DataModel instance serves as the data for a layer.\n * @param {Object} axes Axes instances to be used for rendering the layer. Axes are used for mapping data from\n * value to px.\n * @param {SimpleAxis} axes.x X axis of the layer. Based on the type of variable it gets instance of BandAxis,\n * TimeAxis, ContinuousAxis\n * @param {SimpleAxis} axes.y X axis of the layer. Based on the type of variable it gets instance of BandAxis,\n * TimeAxis, ContinuousAxis\n * @param {ColorAxis} axes.color Axis for coloring a layer using color interpolators\n * @param {ShapeAxis} axes.shape Axis for providing a shape\n * @param {SizeAxis} axes.shape Axis for determining size of a mark using size interpolator\n * @param {LayerConfig} config Configuration of the layer\n * @param {Object} dependencies Dependencies of the layer\n * @param {SmartLabel} smartLabel Smartlabel singleton instance\n */\n constructor (data, axes, config, dependencies) {\n super();\n this.store(new Store({\n DATA: null,\n [PROPS.DATA_UPDATED]: null\n }));\n transactor(this, defaultOptions, this.store().model);\n this.data(data);\n this.axes(axes);\n this.config(config);\n this.alias(this.constructor.formalName() + getUniqueId());\n this.dependencies(dependencies);\n this._points = [];\n this._cachedData = [];\n this._id = getUniqueId();\n this._measurement = {};\n registerListeners(this, listenerMap);\n }\n\n /**\n * Creates a layer instance\n * @return {BaseLayer} Instance of a layer\n */\n static create (...params) {\n return new this(...params);\n }\n\n /**\n * Default configuration of the layer. This configuration gets merged to the user passed configuration using a\n * plolicy. Base layer only returns part of configuraion, any layer overridding base layer should return its own\n * configuration.\n *\n * @public\n * @static\n *\n * @return {Object} Default configuration\n */\n static defaultConfig () {\n return {\n transform: {\n type: 'identity'\n }\n };\n }\n\n /**\n * Policy defines how user config gets merged to default config. The default policy here does a deep copy\n * operation.\n * Any policy which does more than deep copying should define the policy as a static member.\n *\n * @static\n * @public\n *\n * @param {LayerConfig} conf Configuration with which the user config will be merged\n * @param {LayerConfig} userConf Configuration given by the user\n *\n * @return {LayerConfig} Merged layer configuration\n */\n static defaultPolicy (conf, userConf) {\n return mergeRecursive(conf, userConf);\n }\n\n /**\n * Determines a name for a layer. This name of the layer is used in the input data to refer to this layer.\n * ```\n * .layer([\n * mark: 'bar',\n * encoding: { ... }\n * ])\n * ```\n *\n * @static\n * @public\n *\n * @returns {string} name of layer\n */\n static formalName () {\n return 'base';\n }\n\n store (...store) {\n if (store.length) {\n this._store = store[0];\n return this;\n }\n return this._store;\n }\n\n encodingFieldsInf (...fieldsInf) {\n if (fieldsInf.length) {\n this._encodingFieldsInf = fieldsInf[0];\n return this;\n }\n return this._encodingFieldsInf;\n }\n\n encodingTransform (...encodingTransform) {\n if (encodingTransform.length) {\n this._encodingTransform = encodingTransform[0];\n return this;\n }\n return this._encodingTransform;\n }\n\n /**\n * Provides a alias for a layer. Like it's possible to have same layer (like bar) multiple times, but among multiple\n * layers of same type if one layer has to be referred, alias is used. If no alias is given then `formalName` is set\n * as the alias name.\n *\n * @public\n *\n * If used as setter\n * @param {string} alias Name of the alias\n * @return {BaseLayer} Instance of current base layer\n *\n * If used as getter\n * @return {string} Alias of the current layer\n */\n alias (...params) {\n if (params.length) {\n this._alias = params[0];\n return this;\n }\n return this._alias || this.constructor.formalName();\n }\n\n dependencies (...params) {\n if (params.length) {\n this._dependencies = params[0];\n return this;\n }\n return this._dependencies;\n }\n\n enableCaching () {\n this._cacheEnabled = true;\n return this;\n }\n\n clearCaching () {\n this._cacheEnabled = false;\n return this.data(this._cachedData[0]);\n }\n\n /**\n * Serialize the schema. Merge config is used for serialization.\n *\n * @public\n *\n * @return {LayerConfig} Serialized schema\n */\n serialize () {\n return this.config();\n }\n\n /**\n * Returns the unique identifier of this layer. Id is auto generated during the creation proceess of a schema.\n *\n * @return {string} id of the layer\n */\n id () {\n return this._id;\n }\n\n /**\n * Gets the transform method from transform factory based on type of transform. It then calls the\n * transform method with the data and passes the configuration parameters of transform such as\n * groupBy, value field, etc.\n *\n * @public\n *\n * @param {DataModel} dataModel Instance of DataModel\n * @param {Object} config Configuration for transforming data\n * @return {Array.} Transformed data.\n */\n getTransformedData (dataModel, config, transformType, encodingFieldsInf) {\n return transformData(dataModel, config, transformType, encodingFieldsInf);\n }\n\n /**\n * Calculates the domain from the data.\n * It checks the type of field and calculates the domain based on that. For example, if it\n * is a quantitative or temporal field, then it calculates the min and max from the data or\n * if it is a nominal field then it gets all the values from the data of that field.\n * @param {Array} data DataArray\n * @param {Object} fieldsConfig Configuration of fields\n * @return {Array} Domain values array.\n */\n calculateDomainFromData (data) {\n let domains = {};\n const isEmpty = this.data().isEmpty();\n\n if (!isEmpty) {\n domains = calculateDomainFromData(data, this.encodingFieldsInf(), this.transformType());\n }\n return domains;\n }\n\n shouldDrawAnchors () {\n return false;\n }\n\n /**\n * Returns the domain for the axis.\n *\n * @param {string} encodingType type of encoding x, y, etc.\n * @return {Object} Axis domains\n */\n getDataDomain (encodingType) {\n const domains = this.store().get(PROPS.DOMAIN);\n return encodingType !== undefined ? domains[encodingType] || [] : domains;\n }\n\n /**\n * Returns the domain for the axis.\n *\n * @param {string} encodingType type of encoding x, y, etc.\n * @return {Object} Axis domains\n */\n getNormalizedData (transformedData, fieldsConfig) {\n return getNormalizedData(transformedData, fieldsConfig, this.encodingFieldsInf(), this.transformType());\n }\n\n /**\n * Abstract method for getting nearest point\n * @return {BaseLayer} Instance of base layer\n */\n getNearestPoint () {\n return null;\n }\n\n applyInteractionStyle (interactionType, selectionSet, apply) {\n const interactionConfig = this.config().interaction || {};\n\n const interactionStyles = interactionConfig[interactionType];\n if (interactionStyles) {\n applyInteractionStyle(this, selectionSet, interactionStyles, {\n apply,\n interactionType\n });\n }\n }\n\n /**\n *\n *\n * @returns\n * @memberof BaseLayer\n */\n transformType (...transformType) {\n if (transformType.length) {\n this._transformType = transformType[0];\n return this;\n }\n return this._transformType;\n }\n\n /**\n * Renders the layer\n * @return {BaseLayer} Instance of the layer.\n */\n render () {\n return this;\n }\n\n /**\n *\n *\n * @returns\n * @memberof BaseLayer\n */\n elemType () {\n return 'g';\n }\n\n /**\n * Disposes the entire layer\n * @return {BaseLayer} Instance of layer.\n */\n remove () {\n this.store().unsubscribeAll();\n selectElement(this.mount()).remove();\n return this;\n }\n\n /**\n * Stores point in an object with key as the categorical value or temporal value\n *\n * @param {string} key categorical value or temporal value\n * @param {Object} data Information of the data point\n * @return {BarLayer} Instance of bar layer\n */\n cachePoint (key, data) {\n if (key === null) {\n return this;\n }\n const pointMap = this._pointMap;\n !pointMap[key] && (pointMap[key] = []);\n pointMap[key].push(data);\n return this;\n }\n\n /**\n *\n *\n * @param {*} dataProps\n * @returns\n * @memberof BaseLayer\n */\n dataProps (...dataProps) {\n if (dataProps.length) {\n this._dataProps = dataProps[0];\n return this;\n }\n return this._dataProps;\n }\n\n /**\n *\n *\n * @param {*} data\n * @param {*} id\n * @returns\n * @memberof BaseLayer\n */\n getIdentifiersFromData (data) {\n const schema = this.data().getData().schema;\n const fieldsConfig = this.data().getFieldsConfig();\n const identifiers = [[], []];\n const {\n xFieldType,\n yFieldType,\n xField,\n yField\n } = this.encodingFieldsInf();\n\n const [xMeasure, yMeasure] = [xFieldType, yFieldType].map(type => type === FieldType.MEASURE);\n schema.forEach((d, i) => {\n const name = d.name;\n if (fieldsConfig[name].def.type === FieldType.DIMENSION) {\n identifiers[0].push(name);\n identifiers[1].push(data[i]);\n }\n });\n\n if (xMeasure && yMeasure) {\n const xMeasureIndex = fieldsConfig[xField].index;\n const yMeasureIndex = fieldsConfig[yField].index;\n identifiers[0].push(...[xField, yField]);\n identifiers[1].push(...[data[xMeasureIndex], data[yMeasureIndex]]);\n }\n return identifiers;\n }\n\n getPlotSpan () {\n return {\n x: 0,\n y: 0\n };\n }\n\n getPlotPadding () {\n return {\n x: 0,\n y: 0\n };\n }\n\n /**\n *\n *\n * @param {*} identifiers\n * @returns\n * @memberof BaseLayer\n */\n getPointsFromIdentifiers (identifiers, config = {}) {\n const getAllAttrs = config.getAllAttrs;\n const getBBox = config.getBBox;\n if (!this.data()) {\n return [];\n }\n let fieldNames;\n let values;\n if (identifiers instanceof DataModel) {\n const dataObj = identifiers.getData();\n fieldNames = dataObj.schema.map(d => d.name);\n values = dataObj.data;\n } else {\n fieldNames = identifiers[0];\n values = identifiers.slice(1, identifiers.length);\n }\n\n const points = this._points;\n const fieldsConfig = this.data().getFieldsConfig();\n\n const filteredPoints = [].concat(...points).filter((point) => {\n const { _data, _id } = point;\n\n return fieldNames.every((field, idx) => {\n if (field in fieldsConfig && fieldsConfig[field].def.type === FieldType.DIMENSION) {\n return values.findIndex(d => d[idx] === _data[fieldsConfig[field].index]) !== -1;\n } else if (field === ReservedFields.ROW_ID) {\n return values.findIndex(d => d[idx] === _id) !== -1;\n } return true;\n });\n });\n return getAllAttrs ? filteredPoints : filteredPoints.map((d) => {\n const obj = clone(d);\n if (getBBox) {\n const update = obj.update || obj;\n if (obj.size !== undefined) {\n const sizeVal = Math.sqrt(obj.size / Math.PI) * 2;\n update.width = sizeVal;\n update.height = sizeVal;\n update.x -= sizeVal / 2;\n update.y -= sizeVal / 2;\n } else {\n if (update.width === undefined) {\n update.width = 2;\n }\n if (update.height === undefined) {\n update.height = 2;\n }\n }\n }\n\n return obj.update || obj;\n }).sort((a, b) => a.y - b.y);\n }\n\n getTransformedDataFromIdentifiers (identifiers) {\n const { data: identifierData, schema: identifierSchema } = identifiers.getData();\n const normalizedData = this.store().get(PROPS.NORMALIZED_DATA);\n const fieldsConfig = this.data().getFieldsConfig();\n const {\n yField,\n xField,\n yFieldType,\n xFieldType\n } = this.encodingFieldsInf();\n let measureIndex;\n let enc;\n if (xFieldType === FieldType.MEASURE) {\n measureIndex = fieldsConfig[xField].index;\n enc = 'x';\n } else if (yFieldType === FieldType.MEASURE) {\n measureIndex = fieldsConfig[yField].index;\n enc = 'y';\n }\n\n const transformedData = [];\n normalizedData.forEach((dataArr) => {\n dataArr.forEach((dataObj) => {\n const tupleArr = dataObj._data;\n const exist = identifierSchema.every((obj, i) =>\n identifierData.findIndex(d => tupleArr[fieldsConfig[obj.name].index] === d[i]) !== -1);\n if (exist) {\n const transformedVal = dataObj[enc];\n const row = dataObj._data;\n const tuple = {};\n for (const key in fieldsConfig) {\n const index = fieldsConfig[key].index;\n tuple[key] = row[index];\n if (index === measureIndex) {\n tuple[key] = transformedVal;\n }\n }\n transformedData.push(tuple);\n }\n });\n });\n\n return [transformedData, this.data().getData().schema];\n }\n\n /**\n *\n *\n * @param {*} set\n * @returns\n * @memberof BaseLayer\n */\n getPlotElementsFromSet (set) {\n return selectElement(this.mount()).selectAll(this.elemType()).filter(data =>\n (data ? set.indexOf(data._id) !== -1 : false));\n }\n}\n","import {\n selectElement,\n makeElement,\n pathInterpolators,\n Symbols\n} from 'muze-utils';\nimport { updateStyle } from '../../helpers';\n\nconst line = Symbols.line;\n\n/**\n * Draws a line from the points\n * Generates a svg path string\n * @param {Object} params Contains container, points and interpolate attribute.\n */\nexport const drawLine = (context) => {\n let filteredPoints;\n const { container, points, interpolate, connectNullData, className, style, transition } = context;\n const mount = selectElement(container).attr('class', className);\n const curveInterpolatorFn = pathInterpolators[interpolate];\n const linepath = line()\n .curve(curveInterpolatorFn)\n .x(d => d.update.x)\n .y(d => d.update.y)\n .defined(d => d.update.y !== null);\n\n filteredPoints = points;\n if (connectNullData) {\n filteredPoints = points.filter(d => d.update.y !== null);\n }\n\n updateStyle(mount, style);\n let element = makeElement(mount, 'path', [1]);\n element.classed(points[0].className, true);\n if (!transition.disabled) {\n element = element.transition().duration(transition.duration);\n }\n element.attr('d', linepath(filteredPoints))\n .style('fill-opacity', 0);\n return element;\n};\n","import { CLASSPREFIX } from '../../enums/constants';\n\nexport const defaultConfig = {\n classPrefix: CLASSPREFIX,\n defClassName: 'layer-line',\n className: '',\n interpolate: 'linear',\n transform: {\n type: 'group'\n },\n interaction: {\n highlight: [{\n type: 'stroke',\n intensity: [0, 0, -15, 0]\n }],\n fade: [{\n type: 'stroke',\n intensity: [0, 0, +15, 0]\n }],\n focus: [{\n type: 'stroke',\n intensity: [0, 0, +15, 0]\n }]\n },\n nearestPointThreshold: 20,\n encoding: {\n color: {},\n x: {},\n y: {},\n strokeOpacity: {\n value: 1\n }\n },\n transition: {\n effect: 'cubic',\n duration: 1000\n },\n connectNullData: false\n};\n\n","import {\n Voronoi,\n getQualifiedClassName,\n selectElement,\n makeElement,\n FieldType,\n getObjProp\n} from 'muze-utils';\nimport { BaseLayer } from '../../base-layer';\nimport { drawLine } from './renderer';\nimport { defaultConfig } from './default-config';\nimport { ENCODING } from '../../enums/constants';\nimport * as PROPS from '../../enums/props';\nimport {\n attachDataToVoronoi,\n animateGroup,\n getLayerColor,\n positionPoints,\n getIndividualClassName\n} from '../../helpers';\n\nimport './styles.scss';\n\n/**\n * Line Layer creates a line plot.\n * Example :-\n * const config = {\n * encoding = {\n * x: {\n * field: 'date'\n * },\n * y: {\n * field: 'sales'\n * }\n * }\n * };\n * const linelayer = layerFactory.getLayer('line', [dataModel, axes, config]);\n * linelayer.render(container);\n * @class\n */\nexport default class LineLayer extends BaseLayer {\n\n /**\n *Creates an instance of LineLayer.\n * @param {*} args\n * @memberof LineLayer\n */\n constructor (...args) {\n super(...args);\n this._voronoi = new Voronoi();\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof LineLayer\n */\n static formalName () {\n return 'line';\n }\n\n /**\n *\n *\n * @returns\n * @memberof LineLayer\n */\n elemType () {\n return 'path';\n }\n\n /**\n * Default configuration of line layer\n * @return {Object} Default configuration of layer\n */\n static defaultConfig () {\n return defaultConfig;\n }\n\n /**\n *\n *\n * @static\n * @param {*} conf\n * @param {*} userConf\n * @returns\n * @memberof LineLayer\n */\n static defaultPolicy (conf, userConf) {\n const config = BaseLayer.defaultPolicy(conf, userConf);\n const encoding = config.encoding;\n const transform = config.transform;\n const colorField = encoding.color && encoding.color.field;\n\n if (colorField && !transform.groupBy) {\n transform.groupBy = colorField;\n }\n return config;\n }\n\n /**\n * Returns the draw method for line\n * @return {Function} Draw method of line layer\n */\n getDrawFn () {\n return drawLine;\n }\n\n /**\n * Applies selection styles to the elements that fall within the selection set.\n * @param {Array} selectionSet Array of tuple ids.\n * @param {Object} config Configuration for selection.\n * @return {BarLayer} Instance of bar layer.\n */\n highlightPoint () {\n return this;\n }\n\n /**\n * Removes selection styles to the elements that fall within the selection set.\n * @param {Array} selectionSet Array of tuple ids.\n * @param {Object} config Configuration for selection.\n * @return {BarLayer} Instance of bar layer.\n */\n dehighlightPoint () {\n return this;\n }\n\n focusSelection () {\n return this;\n }\n\n focusOutSelection () {\n return this;\n }\n\n fadeOutSelection () {\n return this;\n }\n\n unfadeSelection () {\n return this;\n }\n\n shouldDrawAnchors () {\n return true;\n }\n\n /**\n * Generates the x and y positions for each point\n * @param {Array} data Data Array\n * @param {Object} encoding Visual Encodings of the layer\n * @param {Object} axes Contains the axis\n * @param {number} seriesIndex index of series\n * @return {Array} Array of points\n */\n translatePoints (data, encodingFieldsInf, axes) {\n let points = [];\n const xAxis = axes.x;\n const yAxis = axes.y;\n const colorAxis = axes.color;\n const encoding = this.config().encoding;\n const { xFieldType, yFieldType } = encodingFieldsInf;\n const isXDim = xFieldType === FieldType.DIMENSION;\n const isYDim = yFieldType === FieldType.DIMENSION;\n const key = isXDim ? ENCODING.X : (isYDim ? ENCODING.Y : null);\n const colorEncoding = encoding.color;\n const colorField = colorEncoding.field;\n const fieldsConfig = this.data().getFieldsConfig();\n const colorFieldIndex = colorField && fieldsConfig[colorField].index;\n const style = {};\n const meta = {};\n\n points = data.map((d, i) => {\n const xPx = xAxis.getScaleValue(d.x) + xAxis.getUnitWidth() / 2;\n const yPx = yAxis.getScaleValue(d.y);\n const { color, rawColor } = getLayerColor({ datum: d, index: i }, {\n colorEncoding, colorAxis, colorFieldIndex });\n\n style.stroke = color;\n style['fill-opacity'] = 0;\n meta.stateColor = {};\n meta.originalColor = rawColor;\n meta.colorTransform = {};\n\n const point = {\n enter: {},\n update: {\n x: xPx,\n y: d.y === null ? null : yPx\n },\n style,\n _data: d._data,\n _id: d._id,\n rowId: d._id,\n source: d._data,\n meta\n };\n point.className = getIndividualClassName(d, i, data, this);\n this.cachePoint(d[key], point);\n return point;\n });\n points = positionPoints(this, points);\n return points;\n }\n\n /**\n * Renders the line plot\n * @param {SVGElement} container svg element\n * @return {LineLayer} instance of line layer\n */\n render (container) {\n let points;\n let seriesClassName;\n let style;\n\n const config = this.config();\n const {\n encoding,\n interpolate,\n className,\n defClassName,\n transition\n } = config;\n const store = this._store;\n const normalizedData = store.get(PROPS.NORMALIZED_DATA);\n const transformedData = store.get(PROPS.TRANSFORMED_DATA);\n const fieldsConfig = this.data().getFieldsConfig();\n const axes = this.axes();\n const keys = transformedData.map(d => d.key);\n const qualifiedClassName = getQualifiedClassName(defClassName, this.id(), config.classPrefix);\n const containerSelection = selectElement(container);\n const colorField = encoding.color.field;\n const colorFieldIndex = fieldsConfig[colorField] && fieldsConfig[colorField].index;\n\n this._points = [];\n this._pointMap = {};\n containerSelection.classed(qualifiedClassName.join(' '), true);\n containerSelection.classed(className, true);\n makeElement(container, 'g', normalizedData, null, {\n enter: (group) => {\n animateGroup(group, {\n transition,\n groupAnimateStyle: {\n enter: {\n 'stroke-opacity': 0,\n 'fill-opacity': this.getPathStyle()['fill-opacity']\n },\n update: {\n 'stroke-opacity': encoding.strokeOpacity.value\n }\n }\n });\n },\n update: (group, dataArr, i) => {\n points = this.translatePoints(dataArr, this.encodingFieldsInf(), axes, i);\n this._points.push(points);\n seriesClassName = `${qualifiedClassName[0]}-${keys[i] || i}`.toLowerCase();\n\n let color;\n const colorValFn = encoding.color.value;\n const colorVal = points.find(d => d._data[colorFieldIndex] !== null &&\n d._data[colorFieldIndex] !== undefined);\n\n if (colorValFn) {\n color = colorValFn(dataArr, i, normalizedData);\n } else {\n color = axes.color.getColor(colorVal && colorVal._data[colorFieldIndex]);\n }\n\n style = this.getPathStyle(color);\n this.getDrawFn()({\n container: group.node(),\n interpolate,\n points,\n className: seriesClassName,\n transition,\n style: style || {},\n connectNullData: config.connectNullData\n });\n }\n }, d => d[0]._data[colorFieldIndex] || d[0]._id);\n\n attachDataToVoronoi(this._voronoi, this._points);\n return this;\n }\n\n /**\n * Get the css styles need to be applied on the line path\n * @param {string} color Color value\n * @return {Object} Path styles\n */\n getPathStyle (color) {\n return {\n stroke: color,\n 'fill-opacity': '0'\n };\n }\n\n /**\n * Gets the nearest point closest to the given position\n * @param {number} x x position\n * @param {number} y y position\n * @return {Object} Nearest point information\n */\n getNearestPoint (x, y, config) {\n let searchRadius = config.searchRadius;\n const data = this.data();\n\n if (!data || (data && data.isEmpty())) {\n return null;\n }\n\n searchRadius = searchRadius !== undefined ? searchRadius : this.config().nearestPointThreshold;\n const point = this._voronoi.find(x, y, searchRadius);\n const dimensions = getObjProp(point, 'data', 'data', 'update');\n\n if (point) {\n const { _data, _id } = point.data.data;\n const identifiers = this.getIdentifiersFromData(_data, _id);\n return {\n id: identifiers,\n dimensions: [{\n x: dimensions.x,\n y: dimensions.y,\n width: 2,\n height: 2\n }],\n layerId: this.id()\n };\n }\n return null;\n }\n}\n","import {\n easeFns,\n selectElement,\n pathInterpolators,\n Symbols\n} from 'muze-utils';\n\nconst area = Symbols.area;\n/**\n * Draws a line from the points\n * Generates a svg path string\n * @param {Object} params Contains container, points and interpolate attribute.\n */\nconst /* istanbul ignore next */ drawArea = (params) => {\n let filteredPoints;\n const { container, points, style, transition, className, connectNullData, interpolate } = params;\n\n const { effect: easeEffect, duration } = transition;\n const mount = selectElement(container);\n const curveInterpolatorFn = pathInterpolators[interpolate];\n const selection = mount.selectAll('path').data([params.points]);\n const [enterAreaPath, updateAreaPath] = ['enter', 'update'].map(e => area().curve(curveInterpolatorFn)\n .x(d => d[e].x)\n .y1(d => d[e].y)\n .y0(d => d[e].y0)\n .defined(d => d[e].y !== null\n ));\n\n filteredPoints = points;\n mount.attr('class', className);\n if (connectNullData) {\n filteredPoints = points.filter(d => d.update.y !== null);\n }\n const selectionEnter = selection.enter().append('path').attr('d', enterAreaPath(filteredPoints));\n selection.merge(selectionEnter).transition().ease(easeFns[easeEffect])\n .duration(duration)\n .attr('d', updateAreaPath(filteredPoints))\n .each(function (d) {\n const element = selectElement(this);\n\n element.classed(d[0].className, true);\n Object.keys(style).forEach(key => element.style(key, style[key]));\n });\n};\n\nexport default drawArea;\n","import { FieldType } from 'muze-utils';\nimport { defaultConfig } from './default-config';\nimport { LineLayer } from '../line';\nimport drawArea from './renderer';\nimport './styles.scss';\nimport { STACK, ENCODING } from '../../enums/constants';\nimport { getAxesScales, positionPoints, getLayerColor, getIndividualClassName } from '../../helpers';\n\n/**\n * Area Layer creates a area plot.\n * @example\n * const config = {\n * encoding = {\n * x: {\n * field: 'date'\n * },\n * // Top y value\n * y: {\n * field: 'maxTemp'\n * },\n * // Base y value\n * y0: {\n * field: 'minTemp\n * }\n * }\n * };\n * const areaLayer = layerFactory.getLayer('area', [dataModel, axes, config]);\n * areaLayer.render(container);\n * @class\n */\nexport default class AreaLayer extends LineLayer {\n /** oation of line layer\n * @return {Object} Default configuration of layer\n */\n static defaultConfig () {\n return defaultConfig;\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof AreaLayer\n */\n static formalName () {\n return 'area';\n }\n\n /**\n * Calculates the domain from data. It calls its parent class's method which is line layer\n * to get the domain and overwrites the domain according to its need.\n * @return {Array} Domain values\n */\n calculateDomainFromData (data, encodingFieldsInf, fieldsConfig) {\n const domains = super.calculateDomainFromData(data, fieldsConfig);\n [ENCODING.X, ENCODING.Y].forEach((type) => {\n const { [`${type}FieldType`]: fieldType } = encodingFieldsInf;\n if (fieldType === FieldType.MEASURE) {\n domains[type][0] = Math.min(domains[type][0], 0);\n }\n });\n return domains;\n }\n\n /**\n * Returns the drawing method of this layer\n * @return {Function} Draw method\n */\n getDrawFn () {\n return drawArea;\n }\n\n /**\n * Generates the x and y positions for each point\n * @param {Array} data Data Array\n * @param {Object} encoding Visual Encodings of the layer\n * @param {Object} axes Contains the axis\n * @return {Array} Array of points\n */\n translatePoints (data, encodingFieldsInf, axes) {\n let points = [];\n const transformType = this.transformType();\n const colorAxis = axes.color;\n const config = this.config();\n const encoding = config.encoding;\n const colorEncoding = encoding.color;\n const colorField = colorEncoding.field;\n const fieldsConfig = this.data().getFieldsConfig();\n const colorFieldIndex = colorField && fieldsConfig[colorField].index;\n const { xField, yField, y0Field } = encodingFieldsInf;\n const {\n xAxis,\n yAxis\n } = getAxesScales(axes);\n const classNameFn = config.individualClassName;\n const isXDim = fieldsConfig[xField] && fieldsConfig[xField].def.type === FieldType.DIMENSION;\n const isYDim = fieldsConfig[yField] && fieldsConfig[yField].def.type === FieldType.DIMENSION;\n const key = isXDim ? 'x' : (isYDim ? 'y' : null);\n points = data.map((d, i) => {\n const xPx = xAxis.getScaleValue(d.x) + xAxis.getUnitWidth() / 2;\n const yPx = yAxis.getScaleValue(d.y);\n const y0Px = (y0Field || transformType === STACK) ? yAxis.getScaleValue(d.y0) : yAxis.getScaleValue(0);\n const { color, rawColor } = getLayerColor({ datum: d, index: i }, {\n colorEncoding, colorAxis, colorFieldIndex });\n const style = {};\n const meta = {};\n style.fill = color;\n // style['fill-opacity'] = 0;\n meta.stateColor = {};\n meta.originalColor = rawColor;\n meta.colorTransform = {};\n const point = {\n enter: {\n x: xPx,\n y: d.y === null ? d.y : yAxis.getScaleValue(0),\n y0: d.y0 === null ? d.y0 : yAxis.getScaleValue(0)\n },\n update: {\n x: xPx,\n y: d.y === null ? d.y : yPx,\n y0: d.y0 === null ? d.y0 : y0Px\n },\n _id: d._id,\n _data: d._data,\n source: d._data,\n rowId: d._id,\n className: classNameFn ? classNameFn(d, i, data, this) : '',\n style,\n meta\n };\n point.className = getIndividualClassName(d, i, data, this);\n this.cachePoint(d[key], point);\n return point;\n });\n points = positionPoints(this, points);\n return points;\n }\n\n /**\n * Get the css styles need to be applied on the line path\n * @param {string} color Color value\n * @return {Object} Path styles\n */\n getPathStyle (color) {\n return {\n fill: color\n };\n }\n}\n\n","import { CLASSPREFIX } from '../../enums/constants';\n\nexport const defaultConfig = {\n classPrefix: CLASSPREFIX,\n defClassName: 'layer-arc',\n padding: { top: 1, bottom: 1, left: 1, right: 1 },\n className: '',\n minOuterRadius: 10,\n interaction: {\n highlight: [{\n type: 'fill',\n intensity: [0, 0, -15, 0]\n }],\n fade: [{\n type: 'fill',\n intensity: [0, 0, +15, 0]\n }],\n focus: [{\n type: 'fill',\n intensity: [0, 0, +15, 0]\n }]\n },\n height: 100,\n width: 100,\n sort: '',\n cornerRadius: 0,\n padAngle: 0,\n padRadius: 0,\n startAngle: 0,\n endAngle: 360,\n colors: ['#F44336', 'blue', 'green', 'yellow', 'orange', 'purple'],\n transform: {\n type: 'identity'\n },\n encoding: {\n 'stroke-width': {\n value: '2px'\n },\n 'stroke-linejoin': {\n value: 'round'\n },\n angle: {\n value: '1'\n },\n radius: {\n value: '1'\n },\n opacity: {\n value: '1'\n },\n color: {\n value: '1'\n },\n shape: {\n value: '1'\n },\n size: {\n value: '1'\n }\n },\n innerRadiusFixer: 10,\n transition: {\n effect: 'cubic',\n duration: 500\n },\n states: {\n highlight: {\n className: `${CLASSPREFIX}-layer-arc-highlight`\n },\n fadeout: {\n className: `${CLASSPREFIX}-layer-arc-fadeout`\n },\n selected: {\n className: `${CLASSPREFIX}-layer-arc-selected`\n }\n }\n};\n\n","import {\n makeElement,\n selectElement,\n getQualifiedClassName,\n isSimpleObject,\n getDomainFromData,\n Symbols,\n FieldType,\n ReservedFields\n} from 'muze-utils';\nimport { defaultConfig } from './default-config';\nimport { BaseLayer } from '../../base-layer';\nimport * as PROPS from '../../enums/props';\nimport { ASCENDING, OUTER_RADIUS_VALUE } from '../../enums/constants';\nimport { getIndividualClassName } from '../../helpers';\nimport { getRangeValue, getRadiusRange, tweenPie, tweenExitPie, getFieldIndices, getPreviousPoint } from './arc-helper';\nimport './styles.scss';\n\nconst pie = Symbols.pie;\nconst arc = Symbols.arc;\n\n/**\n * Arc Layer creates a plot with polar coordinates\n * Example :-\n * const config = {\n * height: 100,\n * width: 100,\n * startAngle: 0,\n * endAngle: Math.PI,\n * cornerRadius: 10,\n * minOuterRadius: 10,\n * outerRadius: 10,\n * innerRadius: 5,\n * padAngle: 2,\n * padRadius: 2,\n * colors: []\n * padding: {top: 10, bottom: 10, left: 10, right: 10},\n * encoding = {\n * angle: {\n * field: 'date' //Maps to angle of arc\n * },\n * radius: {\n * field: 'sales' // Maps to radius of arc\n * }\n * }\n * };\n * @class\n */\nexport default class ArcLayer extends BaseLayer {\n\n constructor (data, axes, config, dependencies) {\n super(data, axes, config, dependencies);\n this._prevPieData = {};\n }\n\n /**\n * returns the default configuration of the layer\n *\n * @static\n * @return {Object} Default configuration for arc layer\n * @memberof ArcLayer\n */\n static defaultConfig () {\n return defaultConfig;\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof ArcLayer\n */\n static formalName () {\n return 'arc';\n }\n\n /**\n *\n *\n * @returns\n * @memberof ArcLayer\n */\n elemType () {\n return 'path';\n }\n\n /**\n * Transforms data in the appropriate data structure to be consumed by the layer for rendering\n *\n * @param {Object} data data model associated with the layer\n * @param {Object} config configuration of the layer that contains encoding and other parameters\n * @return {Object} Transformed pie data\n * @memberof ArcLayer\n */\n getTransformedData (dataModel, config) {\n let pieData = [];\n const pieIndex = {};\n const {\n startAngle,\n endAngle,\n encoding,\n sort,\n minOuterRadius\n } = config;\n const prevData = this._store.get(PROPS.TRANSFORMED_DATA) || [];\n const fieldsConfig = this.data().getFieldsConfig();\n const {\n angleIndex,\n sizeIndex,\n radiusIndex,\n colorIndex\n } = getFieldIndices(encoding, fieldsConfig);\n const dataVal = dataModel.getData();\n const data = dataVal.data;\n const uids = dataVal.uids;\n\n this._prevPieData = {};\n\n prevData.forEach((e, index) => {\n this._prevPieData[e.uid] = [e, index];\n pieIndex[e.index] = e;\n });\n // Creating pie data using angle field provided. If the angle field is a dimension,\n // all the angles will be equal(360/number of dimensions)\n\n pieData = pie()\n .startAngle((startAngle / 180) * Math.PI)\n .endAngle(Math.PI * endAngle / 180)\n .value(d => d[angleIndex] || 1)\n .sortValues(null);\n\n sort.length && radiusIndex && pieData.sort((a, b) => {\n if (sort === ASCENDING) {\n return a[radiusIndex] - b[radiusIndex];\n } return b[radiusIndex] - a[radiusIndex];\n });\n const sizeVal = data.reduce((acc, d) => acc + (d[sizeIndex] || 0), 1);\n\n // Adding the radius field values to each data point in pie data\n pieData = pieData(data).map((d, i) => {\n d.outerRadiusValue = data[i][radiusIndex] || minOuterRadius;\n d.innerRadius = config.innerRadius;\n d.colorVal = data[i][colorIndex];\n d.angleVal = data[i][angleIndex];\n d.sizeVal = sizeVal;\n d.uid = uids[i];\n d.rowId = d.uid;\n d.source = data[i];\n d._previousInfo = this._prevPieData[d.uid] ? this._prevPieData[d.uid][0] :\n getPreviousPoint(pieIndex, d.index, config);\n return d;\n });\n return pieData;\n }\n\n /**\n * Returns normalized data after transformation (it is the same in the case of pie layer)\n *\n * @param {Object} data transformed data\n * @return {Object} normalized data\n * @memberof ArcLayer\n */\n getNormalizedData (data) {\n return data;\n }\n\n /**\n *\n *\n * @param {Object} data\n * @return {}\n * @memberof ArcLayer\n */\n calculateDomainFromData (data) {\n const domainKey = OUTER_RADIUS_VALUE;\n return {\n radius: getDomainFromData([data], [domainKey, domainKey])\n };\n }\n\n /**\n *\n *\n * @param {Object} x\n * @param {Object} y\n * @return {}\n * @memberof ArcLayer\n */\n getNearestPoint (x, y, config = {}) {\n const dataPoint = selectElement(config.event.target).data()[0];\n if (isSimpleObject(dataPoint)) {\n const { data, uid } = dataPoint.datum;\n return {\n id: this.getIdentifiersFromData(data, uid),\n layerId: this.id()\n };\n }\n return null;\n }\n\n /**\n *\n *\n * @param {*} set\n * @returns\n * @memberof ArcLayer\n */\n getPlotElementsFromSet (set) {\n return selectElement(this.mount()).selectAll(this.elemType()).filter(d => set.indexOf(d.datum.uid) !== -1);\n }\n\n /**\n *\n *\n * @param {Object} container\n * @return {}\n * @memberof ArcLayer\n */\n render (container) {\n const {\n height,\n width\n } = this.measurement();\n const {\n classPrefix,\n defClassName,\n minOuterRadius,\n innerRadius,\n outerRadius,\n cornerRadius,\n padAngle,\n padRadius,\n padding,\n transition,\n innerRadiusFixer\n } = this.config();\n const sizeAxis = this.axes().size;\n const store = this._store;\n const transformedData = store.get(PROPS.TRANSFORMED_DATA);\n const chartHeight = height - padding.top - padding.bottom;\n const chartWidth = width - padding.left - padding.right;\n const qualClassName = getQualifiedClassName(defClassName, this.id(), classPrefix);\n // Sets range for radius\n const range = getRadiusRange(chartWidth, chartHeight, {\n minOuterRadius,\n innerRadius,\n outerRadius,\n innerRadiusFixer\n });\n const colorAxis = this.axes().color;\n const defaultRadius = outerRadius || Math.min(chartHeight, chartWidth) / 2;\n const radiusDomain = store.get(PROPS.DOMAIN).radius;\n const rangeValueGetter = d => getRangeValue(d, range, radiusDomain, defaultRadius, sizeAxis);\n // This returns a function that generates the arc path based on the datum provided\n const path = arc()\n // .outerRadius(d => rangeValueGetter(d))\n .innerRadius(innerRadius ? Math.min(chartHeight / 2, chartWidth / 2, innerRadius) : 0)\n .cornerRadius(cornerRadius)\n .padAngle(padAngle)\n .padRadius(padRadius);\n this._chartWidth = chartWidth;\n this._chartHeight = chartHeight;\n // Creating the group that holds all the arcs\n const g = makeElement(selectElement(container), 'g', [1], `${qualClassName[0]}-group`)\n .classed(`${qualClassName[1]}-group`, true)\n .attr('transform', `translate(${chartWidth / 2},${chartHeight / 2})`);\n const tween = (elem) => {\n makeElement(elem, 'path', (d, i) => [{\n datum: d,\n index: i,\n arcFn: path,\n meta: {\n originalColor: colorAxis.getRawColor(d.colorVal),\n stateColor: {},\n colorTransform: {}\n }\n }], `${qualClassName[0]}-path`)\n .style('fill', d => colorAxis.getColor(d.datum.colorVal))\n .transition()\n .duration(transition.duration)\n .attrTween('d', (...params) => tweenPie(path, rangeValueGetter, params))\n .attr('class', (d, i) => {\n const individualClass = getIndividualClassName(d, i, transformedData, this);\n return `${qualClassName[0]}-path ${qualClassName[1]}-path-${d.index}\n ${individualClass}`;\n });\n };\n const consecutiveExits = [];\n let exitCounter = 0;\n const tweenExit = (elem, d) => {\n let exitArr = consecutiveExits[exitCounter];\n const oldExitCounter = exitCounter;\n if (!exitArr) {\n exitArr = [{ elem, datum: d }];\n } else if (exitArr[exitArr.length - 1].datum.index === d.index - 1) {\n exitArr.push({ elem, datum: d });\n } else {\n exitCounter++;\n }\n consecutiveExits[oldExitCounter] = exitArr;\n };\n // Creating groups for all the arcs present individually\n makeElement(g, 'g', transformedData, `${qualClassName[0]}`,\n {\n update: tween,\n exit: tweenExit\n })\n .attr('class', (d, i) => `${qualClassName[0]} ${qualClassName[1]}-${i}`);\n tweenExitPie(consecutiveExits, transition, rangeValueGetter, path);\n return this;\n }\n\n /**\n *\n *\n * @param {*} identifiers\n * @returns\n * @memberof BaseLayer\n */\n getPointsFromIdentifiers (identifiers) {\n if (!this.data()) {\n return [];\n }\n const fieldNames = identifiers[0];\n const values = identifiers.slice(1, identifiers.length);\n const pieSlices = selectElement(this.mount()).selectAll('path').data();\n const fieldsConfig = this.data().getFieldsConfig();\n\n const filteredPies = pieSlices.filter((tData) => {\n const data = tData.datum.data;\n const uid = tData.datum.uid;\n return fieldNames.every((field, idx) => {\n if (field in fieldsConfig && fieldsConfig[field].def.type === FieldType.DIMENSION) {\n return values.findIndex(d => d[idx] === data[fieldsConfig[field].index]) !== -1;\n } else if (field === ReservedFields.ROW_ID) {\n return values.findIndex(d => d[idx] === uid) !== -1;\n } return true;\n });\n });\n\n const pieSliceInf = filteredPies[0];\n if (pieSliceInf) {\n const centroid = pieSliceInf.arcFn.centroid(pieSliceInf.datum);\n return [{\n x: centroid[0] + this._chartWidth / 2,\n y: centroid[1] + this._chartHeight / 2,\n width: 2,\n height: 2\n }];\n }\n return [];\n }\n}\n\n","import { getObjProp, interpolator, FieldType, selectElement } from 'muze-utils';\nimport { ANGLE, RADIUS, SIZE, COLOR } from '../../enums/constants';\n\n/**\n * Returns the range value from a value inside the domain\n *\n * @param {Object} domainValue Value whose range has to be returned\n * @return {number} range value\n * @memberof ArcLayer\n */\nexport const getRangeValue = (datum, range, domain, defaultRadius, sizeAxis) => {\n let domainMultiplier = 1;\n const {\n outerRadiusValue,\n sizeVal\n } = datum;\n const sizeAxisDomain = sizeAxis.domain();\n const sizeMultiplier = sizeAxis.getSize(sizeVal) / (sizeAxisDomain ? sizeAxis.range()[1] : sizeAxis.config().value);\n\n domainMultiplier *= (range[1] - range[0]) / (domain[1] - domain[0]);\n const rangeVal = (range[0] + (outerRadiusValue - domain[0]) * domainMultiplier);\n return (rangeVal || defaultRadius) * sizeMultiplier;\n};\n\n/**\n *\n *\n * @memberof ArcLayer\n */\nexport const getRadiusRange = (width, height, config) => {\n const {\n minOuterRadius,\n innerRadius,\n outerRadius,\n innerRadiusFixer\n } = config;\n\n return [Math.max((innerRadius + innerRadiusFixer || 0), minOuterRadius), outerRadius || Math.min(height,\n width) / 2];\n};\nexport const getPreviousPoint = (prevData, currIndex, config) => {\n const prevArc = prevData[currIndex - 1];\n const nextArc = prevData[currIndex];\n\n if (prevArc && nextArc) {\n return {\n startAngle: prevArc.endAngle,\n endAngle: nextArc.startAngle\n };\n } else if (!nextArc) {\n return {\n startAngle: config.endAngle * Math.PI * 2 / 360,\n endAngle: config.endAngle * Math.PI * 2 / 360\n };\n }\n return {\n startAngle: config.startAngle * Math.PI * 2 / 360,\n endAngle: config.startAngle * Math.PI * 2 / 360\n };\n};\n\n/**\n *\n *\n * @param {*} path\n * @param {*} b\n * @returns\n * @memberof ArcLayer\n */\nexport const tweenPie = (path, rangeValueGetter, b) => {\n const { datum } = b[0];\n const outerRadius = rangeValueGetter(datum);\n datum.outerRadius = outerRadius;\n datum._previousInfo.outerRadius = datum._previousInfo.outerRadius || outerRadius;\n return function (t) {\n return path(interpolator()(datum._previousInfo, datum)(t));\n };\n};\n\n/**\n *\n *\n * @param {*} path\n * @param {*} b\n * @returns\n * @memberof ArcLayer\n */\nexport const tweenExitPie = (consecutiveExits, transition, rangeValueGetter, path) => {\n if (consecutiveExits.length > 0) {\n consecutiveExits.forEach((consecutiveExitArr) => {\n const startAngle = consecutiveExitArr[0].datum.startAngle;\n const endAngle = consecutiveExitArr[consecutiveExitArr.length - 1].datum.endAngle;\n const mid = (Math.PI * 2 * startAngle) / ((Math.PI * 2) + startAngle - endAngle);\n\n consecutiveExitArr.forEach((e) => {\n const { elem, datum } = e;\n\n elem.each(function () {\n const gElem = selectElement(this);\n gElem.selectAll('path')\n .transition()\n .duration(transition.duration)\n .attrTween('d', () => function (t) {\n const outerRadius = rangeValueGetter(datum);\n datum.outerRadius = outerRadius;\n return path(interpolator()(datum, {\n startAngle: mid,\n endAngle: mid,\n outerRadius\n })(t));\n })\n .remove();\n gElem.remove();\n });\n });\n });\n }\n};\n\nexport const getFieldIndices = (encoding, fieldsConfig) => {\n const [angleField, radiusField, colorField, sizeField] = [ANGLE, RADIUS, COLOR, SIZE]\n .map(e => encoding[e].field);\n const [angleIndex, sizeIndex, radiusIndex] = [angleField, sizeField, radiusField]\n .map((e) => {\n const conf = fieldsConfig[e];\n if (conf && conf.def.type === FieldType.MEASURE) {\n return conf.index;\n }\n return null;\n });\n const colorIndex = getObjProp(fieldsConfig, colorField, 'index');\n return {\n angleIndex,\n sizeIndex,\n radiusIndex,\n colorIndex\n };\n};\n","import {\n setAttrs,\n setStyles,\n selectElement,\n makeElement,\n getSmartComputedStyle\n} from 'muze-utils';\n\n/**\n * Draws svg text in the specified container.\n * @param {SVGElement} container Container where labels will be appended.\n * @param {Array.} data Data of the elements.\n * @return {Selection} d3 selection of the elements.\n */\nconst drawText = (container, data, config, smartLabel) => {\n const selection = selectElement(container).selectAll('g').data(data);\n\n const selectionMerge = selection.enter().append('g')\n .each(function (dataObj) {\n setAttrs(this, dataObj.enter);\n })\n .merge(selection);\n const style = getSmartComputedStyle(selectElement(container), config.className);\n const fontSize = parseInt(style.fontSize, 10);\n\n smartLabel.setStyle(style);\n selectionMerge.each(function (dataObj) {\n const element = selectElement(this);\n const { update, text, color, textanchor, style: textStyle } = dataObj;\n const background = dataObj.background;\n let backgroundVal;\n if (backgroundVal = background.value) {\n const backgroundPadding = background.padding;\n let diff;\n const { width, height } = smartLabel.getOriSize(dataObj.text);\n const backgroundEl = makeElement(element, 'rect', [1]);\n\n if (textanchor === 'end') {\n diff = width;\n } else if (textanchor === 'start') {\n diff = 0;\n } else {\n diff = width / 2;\n }\n\n setAttrs(backgroundEl.node(), {\n x: update.x - diff - backgroundPadding / 2,\n y: update.y - fontSize - backgroundPadding / 2,\n width: width + backgroundPadding,\n height: height + backgroundPadding\n });\n background && setStyles(backgroundEl, {\n background: backgroundVal\n });\n }\n const textEl = makeElement(element, 'text', d => [d]).text(text);\n const textNode = textEl.node();\n textStyle && setStyles(textNode, textStyle);\n color && setStyles(textNode, {\n fill: color\n });\n dataObj.className && textEl.classed(dataObj.className, true);\n setAttrs(textNode, update);\n textEl.attr('text-anchor', textanchor);\n });\n selection.exit().remove();\n return selection;\n};\n\nexport default drawText;\n","import { CLASSPREFIX } from '../../enums/constants';\n\nexport const defaultConfig = {\n defClassName: 'layer-text',\n classPrefix: CLASSPREFIX,\n className: '',\n transform: {\n type: 'identity'\n },\n interaction: {\n highlight: [{\n type: 'fill',\n intensity: [0, 0, -15, 0]\n }],\n fade: [{\n type: 'fill',\n intensity: [0, 0, +15, 0]\n }],\n focus: [{\n type: 'fill',\n intensity: [0, 0, +15, 0]\n }]\n },\n transition: {\n effect: 'cubic',\n duration: 1000\n },\n encoding: {\n color: {},\n text: {\n value: '',\n background: {\n padding: 10\n }\n }\n },\n states: {\n highlight: {\n className: `${CLASSPREFIX}-layer-text-highlight`\n },\n fadeout: {\n className: `${CLASSPREFIX}-layer-text-fadeout`\n },\n selected: {\n className: `${CLASSPREFIX}-layer-text-selected`\n }\n }\n};\n","import {\n getQualifiedClassName,\n selectElement,\n setStyles,\n createElements\n} from 'muze-utils';\nimport { BaseLayer } from '../../base-layer';\nimport drawText from './renderer';\nimport { defaultConfig } from './default-config';\nimport { getLayerColor, positionPoints, getIndividualClassName } from '../../helpers';\nimport { TEXT_ANCHOR_MIDDLE, ENCODING } from '../../enums/constants';\nimport * as PROPS from '../../enums/props';\n\nimport './styles.scss';\n\n/**\n * Text Layer creates labels. It needs to be passed a data table, axes and configuration\n * of the layer.\n * Example :-\n * const textLayer = layerFactory.getLayer('text', [dataModel, axes, config]);\n * textLayer.render(container);\n * @class\n */\nexport default class TextLayer extends BaseLayer {\n /**\n * Returns the default configuration of the text layer\n * @return {Object} Default configuration of the text layer\n */\n static defaultConfig () {\n return defaultConfig;\n }\n\n static formalName () {\n return 'text';\n }\n\n elemType () {\n return 'text';\n }\n\n /**\n * Generates an array of objects containing x, y, width and height of the points from the data\n * @param {Array.} data Data Array\n * @param {Object} encoding Config\n * @param {Object} axes Axes object\n * @return {Array.} Array of points\n */\n translatePoints (data, encoding, axes) {\n let points = [];\n const colorAxis = axes.color;\n const textEncoding = encoding.text;\n const { field: textField, value, formatter: textFormatter } = textEncoding;\n const colorEncoding = encoding.color;\n const colorField = colorEncoding && colorEncoding.field;\n const fieldsConfig = this.data().getFieldsConfig();\n\n const backgroundEncoding = encoding.text.background;\n const backgroundPadding = backgroundEncoding.padding;\n const backgroundValue = backgroundEncoding.value;\n const colorFieldIndex = fieldsConfig[colorField] ? fieldsConfig[colorField].index : -1;\n const textFieldIndex = textField ? fieldsConfig[textField] && fieldsConfig[textField].index : -1;\n const xEnc = ENCODING.X;\n const yEnc = ENCODING.Y;\n for (let i = 0, len = data.length; i < len; i++) {\n const d = data[i];\n const row = d._data;\n const textValue = textField ? row[textFieldIndex] : value;\n\n const [xPx, yPx] = [xEnc, yEnc].map(type => (axes[type] ? axes[type].getScaleValue(d[type]) +\n axes[type].getUnitWidth() / 2 : 0));\n\n const { color, rawColor } = getLayerColor({ datum: d, index: i },\n { colorEncoding, colorAxis, colorFieldIndex });\n\n const point = {\n enter: {},\n update: {\n x: xPx,\n y: yPx\n },\n text: textFormatter ? textFormatter(textValue) : textValue,\n color,\n background: {\n value: backgroundValue instanceof Function ? backgroundValue(d, i, data, this) : null,\n padding: backgroundPadding\n },\n meta: {\n stateColor: {},\n originalColor: rawColor,\n colorTransform: {}\n },\n style: {},\n _data: row,\n _id: d._id,\n source: d._data,\n rowId: d._id\n };\n\n if (d.x !== null && d.y !== null) {\n points.push(point);\n }\n\n point.className = getIndividualClassName(d, i, data, this);\n }\n\n points = positionPoints(this, points);\n\n return points;\n }\n\n /**\n * Renders the plot in the given container\n * @param {SVGElement} container SVGElement which will hold the plot\n * @return {textLayer} Instance of text layer\n */\n render (container) {\n let points;\n const config = this.config();\n const encoding = config.encoding;\n const normalizedData = this._store.get(PROPS.NORMALIZED_DATA);\n const className = config.className;\n const qualifiedClassName = getQualifiedClassName(config.defClassName, this.id(), config.classPrefix);\n const axes = this.axes();\n const containerSelection = selectElement(container);\n\n containerSelection.classed(`${qualifiedClassName.join(' ')} ${className}`, true);\n createElements({\n data: normalizedData,\n append: 'g',\n selector: 'g',\n container,\n each: (dataArr, group, i) => {\n const node = group.node();\n points = this.translatePoints(dataArr, encoding, axes, i);\n setStyles(node, {\n 'text-anchor': TEXT_ANCHOR_MIDDLE\n });\n drawText(node, points, {\n className: qualifiedClassName[0]\n }, this._dependencies.smartLabel);\n }\n });\n return this;\n }\n}\n","/* global Element, document */\nimport {\n makeElement,\n selectElement,\n easeFns,\n objectIterator,\n getSymbol\n} from 'muze-utils';\n\n/**\n *\n *\n * @param {*} str\n * @returns\n */\nconst checkPath = (str) => {\n if (/^[mzlhvcsqta]\\s*[-+.0-9][^mlhvzcsqta]+/i.test(str) && /[\\dz]$/i.test(str) && str.length > 4) {\n return true;\n }\n return false;\n};\n\n/**\n *\n *\n * @param {*} d\n * @param {*} elem\n */\nconst createShape = function (d, elem) {\n const groupElement = selectElement(elem);\n const { shape, size, update } = d;\n\n if (shape instanceof Promise) {\n shape.then((res) => {\n d.shape = res;\n createShape(d, elem);\n });\n } else if (shape instanceof Element) {\n let newShape = shape.cloneNode(true);\n\n if (newShape.nodeName.toLowerCase() === 'img') {\n const src = newShape.src || newShape.href;\n newShape = document.createElementNS('http://www.w3.org/2000/svg', 'image');\n newShape.setAttribute('href', src);\n }\n const shapeElement = selectElement(newShape);\n if (newShape.nodeName === 'path' || newShape.nodeName === 'image') {\n shapeElement.attr('transform', `scale(${size / 100})`);\n } else {\n shapeElement.attr('height', size);\n shapeElement.attr('width', size);\n }\n shapeElement.attr('x', -size / 2);\n shapeElement.attr('y', -size / 2);\n selectElement(groupElement.node().appendChild(newShape));\n } else if (typeof shape === 'string') {\n let pathStr;\n if (checkPath(shape)) {\n pathStr = shape;\n } else {\n pathStr = getSymbol(shape).size(size)(update);\n }\n makeElement(groupElement, 'path', data => [data]).attr('d', pathStr);\n } else {\n d.shape = 'circle';\n createShape(d, elem);\n }\n};\n\n/**\n * Draws symbols using d3 symbol api\n * @param {Object} params Contains the svg container, points and other symbol related attributes.\n */\n/* istanbul ignore next */ const drawSymbols = (params) => {\n let mergedGroups;\n const { container, points, transition, className } = params;\n const { duration, effect, disabled } = transition;\n const mount = selectElement(container);\n\n mount.attr('class', className);\n const symbolGroups = mount.selectAll('g').data(points, params.keyFn);\n const symbolEnter = symbolGroups.enter().append('g').attr('transform', d => `translate(${d.enter.x},${d.enter.y})`);\n mergedGroups = symbolGroups.merge(symbolEnter)\n .each(function (d) {\n createShape(d, this);\n });\n mergedGroups = disabled ? mergedGroups : mergedGroups.transition().duration(disabled ? 0 : transition.duration);\n mergedGroups.attr('transform', d => `translate(${d.update.x},${d.update.y})`)\n .each(function (d) {\n const style = d.style;\n const element = selectElement(this);\n objectIterator(style, key => element.style(key, style[key]));\n element.attr('class', `${className}`);\n element.classed(d.className, true);\n });\n\n const exitGroups = symbolGroups.exit();\n if (!disabled) {\n exitGroups.transition().ease(easeFns[effect])\n .duration(duration)\n .on('end', function () {\n selectElement(this).remove();\n })\n .style('fill-opacity', 0)\n .style('stroke-opacity', 0);\n } else {\n exitGroups.remove();\n }\n};\n\nexport default drawSymbols;\n","import { CLASSPREFIX } from '../../enums/constants';\n\nexport const defaultConfig = {\n defClassName: 'layer-point',\n className: '',\n classPrefix: CLASSPREFIX,\n defColorStyle: 'stroke',\n interaction: {\n highlight: [{\n type: 'fill',\n intensity: [0, 0, -20, 0]\n }],\n fade: [{\n type: 'fill',\n intensity: [0, 0, +20, 0]\n }],\n focus: [{\n type: 'fill',\n intensity: [0, 0, +20, 0]\n }\n ]\n },\n innerPadding: 0.1,\n nearestPointThreshold: 10,\n transform: {\n type: 'identity'\n },\n transition: {\n effect: 'cubic',\n duration: 1000\n },\n encoding: {\n size: {\n value: 30\n },\n color: { },\n shape: {\n value: 'circle'\n },\n x: {},\n y: {},\n strokeOpacity: {\n value: 0.5\n },\n fillOpacity: {\n value: 0.5\n }\n },\n shapes: ['circle', 'cross', 'diamond', 'square', 'star', 'wye', 'triangle'],\n sizes: [20, 30, 40, 50, 60, 70]\n};\n","import {\n Voronoi,\n selectElement,\n getQualifiedClassName,\n makeElement,\n FieldType,\n Scales\n} from 'muze-utils';\nimport { BaseLayer } from '../../base-layer';\nimport drawSymbols from './renderer';\nimport { defaultConfig } from './default-config';\nimport { ENCODING } from '../../enums/constants';\nimport * as PROPS from '../../enums/props';\nimport {\n attachDataToVoronoi,\n getLayerColor,\n positionPoints,\n getPlotMeasurement,\n getIndividualClassName\n} from '../../helpers';\n\nimport './styles.scss';\n\n/**\n * Point Layer creates point. Itt needs to be passed a data table, axes and configuration\n * of the layer.\n * Example :-\n * const pointLayer = layerFactory.getLayer('point', [data, axes, config]);\n * pointLayer.render(container);\n * @class\n */\nexport default class PointLayer extends BaseLayer {\n\n /**\n * Creates an instance of PointLayer.\n * @param {*} args\n * @memberof PointLayer\n */\n constructor (...args) {\n super(...args);\n this._voronoi = new Voronoi();\n this._bandScale = Scales.band();\n }\n\n /**\n *\n *\n * @returns\n * @memberof PointLayer\n */\n elemType () {\n return 'g';\n }\n\n /**\n * Returns the default configuration of the point layer\n * @return {Object} Default configuration of the point layer\n */\n static defaultConfig () {\n return defaultConfig;\n }\n\n static defaultPolicy (conf, userConf) {\n const config = BaseLayer.defaultPolicy(conf, userConf);\n const encoding = config.encoding;\n const transform = config.transform;\n const colorField = encoding.color && encoding.color.field;\n\n if (colorField) {\n transform.groupBy = colorField;\n }\n return config;\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof PointLayer\n */\n static formalName () {\n return 'point';\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof PointLayer\n */\n static drawFn () {\n return drawSymbols;\n }\n\n /**\n * Generates an array of objects containing x, y, width and height of the points from the data\n * @param {Array.} data Data Array\n * @param {Object} encoding Config\n * @param {Object} axes Axes object\n * @return {Array.} Array of points\n */\n translatePoints (data, encoding, axes, config = {}) {\n let points = [];\n const {\n size: sizeEncoding,\n shape: shapeEncoding,\n color: colorEncoding,\n x,\n y\n } = encoding;\n const sizeField = sizeEncoding.field;\n const sizeValue = sizeEncoding.value;\n const shapeField = shapeEncoding.field;\n const xField = x.field;\n const yField = y.field;\n const { size: sizeAxis, shape: shapeAxis } = axes;\n const fieldsConfig = this.data().getFieldsConfig();\n const isXDim = fieldsConfig[xField] && fieldsConfig[xField].def.type === FieldType.DIMENSION;\n const isYDim = fieldsConfig[yField] && fieldsConfig[yField].def.type === FieldType.DIMENSION;\n const key = isXDim ? ENCODING.X : (isYDim ? ENCODING.Y : null);\n const colorField = colorEncoding && colorEncoding.field;\n const colorFieldIndex = fieldsConfig[colorField] && fieldsConfig[colorField].index;\n const measurement = this._store.get(PROPS.MEASUREMENT);\n const shapeFieldIndex = fieldsConfig[shapeField] && fieldsConfig[shapeField].index;\n const sizeFieldIndex = fieldsConfig[sizeField] && fieldsConfig[sizeField].index;\n const colorAxis = axes.color;\n const { x: offsetX, y: offsetY } = config.offset;\n\n for (let i = 0, len = data.length; i < len; i++) {\n const d = data[i];\n const row = d._data;\n const size = sizeValue instanceof Function ? sizeValue(d, i) : sizeAxis.getSize(row[sizeFieldIndex]);\n const shape = shapeAxis.getShape(row[shapeFieldIndex]);\n\n let [xPx, yPx] = [ENCODING.X, ENCODING.Y].map((type) => {\n const value = d[type] === null ? undefined : d[type];\n const measure = type === ENCODING.X ? measurement.width : measurement.height;\n return !encoding[type].field ? measure / 2 : axes[type].getScaleValue(value);\n });\n\n xPx += offsetX;\n yPx += offsetY;\n\n const { color, rawColor } = getLayerColor({ datum: d, index: i },\n { colorEncoding, colorAxis, colorFieldIndex });\n\n const style = {\n fill: color,\n stroke: color\n };\n\n if (!isNaN(xPx) && !isNaN(yPx)) {\n const point = {\n enter: {\n x: xPx,\n y: yPx\n },\n update: {\n x: xPx,\n y: yPx\n },\n shape,\n size: Math.abs(size),\n meta: {\n stateColor: {},\n originalColor: rawColor,\n colorTransform: {}\n },\n style,\n _data: row,\n _id: d._id,\n source: d._data,\n rowId: d._id\n };\n point.className = getIndividualClassName(d, i, data, this);\n points.push(point);\n this.cachePoint(d[key], point);\n }\n }\n points = positionPoints(this, points);\n return points;\n }\n\n /**\n * Renders the plot in the given container.\n *\n * @param {SVGElement} container SVGElement which will hold the plot\n * @return {BarLayer} Instance of bar layer\n */\n render (container) {\n let maxSize = 0;\n let seriesClassName;\n const config = this.config();\n const keys = this._store.get(PROPS.TRANSFORMED_DATA).map(d => d.key);\n const { transition, className, defClassName, classPrefix } = config;\n const normalizedData = this._store.get(PROPS.NORMALIZED_DATA);\n const containerSelection = selectElement(container);\n const qualifiedClassName = getQualifiedClassName(defClassName, this.id(), classPrefix);\n this._points = [];\n this._pointMap = {};\n\n containerSelection.classed(qualifiedClassName.join(' '), true).classed(className, true);\n\n this._points = this.generateDataPoints(normalizedData, keys);\n\n makeElement(container, 'g', this._points, null, {\n update: (group, points) => {\n maxSize = Math.max(maxSize, ...points.map(d => d.size));\n seriesClassName = `${qualifiedClassName[0]}`;\n this.constructor.drawFn()({\n container: group.node(),\n points,\n className: seriesClassName,\n transition,\n keyFn: d => d._id\n });\n }\n }, data => data[0]._id);\n this._maxSize = Math.sqrt(maxSize / Math.PI) * 2;\n attachDataToVoronoi(this._voronoi, this._points);\n return this;\n }\n\n generateDataPoints (normalizedData, keys) {\n const encoding = this.config().encoding;\n const axes = this.axes();\n const [widthMetrics, heightMetrics] = getPlotMeasurement(this, keys);\n const offsetXValues = widthMetrics.offsetValues || [];\n const offsetYValues = heightMetrics.offsetValues || [];\n return normalizedData.map((dataArr, i) => {\n const measurementConf = this.getMeasurementConfig(offsetXValues[i], offsetYValues[i], widthMetrics.span,\n heightMetrics.span);\n return this.translatePoints(dataArr, encoding, axes, measurementConf);\n }).filter(d => d.length);\n }\n\n getMeasurementConfig (offsetX, offsetY, widthSpan, heightSpan) {\n return {\n offset: {\n x: (offsetX || 0) + widthSpan / 2,\n y: (offsetY || 0) + heightSpan / 2\n },\n span: {\n x: widthSpan,\n y: heightSpan\n }\n };\n }\n\n /**\n * Gets the nearest point from a position.\n * @param {number} x x position\n * @param {number} y y position\n * @return {Object} Point details\n */\n getNearestPoint (x, y) {\n const distanceLimit = Math.max(this._maxSize, this.config().nearestPointThreshold);\n\n if (!this.data()) {\n return null;\n }\n\n const point = this._voronoi.find(x, y, distanceLimit);\n const dimensions = point && point.data.data.update;\n const radius = point ? Math.sqrt(point.data.data.size / Math.PI) : 0;\n\n if (point) {\n const { _data, _id } = point.data.data;\n const identifiers = this.getIdentifiersFromData(_data, _id);\n return {\n id: identifiers,\n dimensions: [{\n x: dimensions.x,\n y: dimensions.y,\n width: radius,\n height: radius\n }],\n layerId: this.id()\n };\n }\n return null;\n }\n}\n","import { makeElement, easeFns } from 'muze-utils';\n\n/**\n *\n *\n * @param {*} elem\n * @param {*} datum\n * @param {*} index\n * @param {*} context\n */\nconst transitionBars = (elem, datum, index, context) => {\n const { transition } = context;\n const { duration, disabled, effect } = transition;\n const selection = elem;\n const selTransition = disabled ? selection : selection.transition().duration(duration).ease(easeFns[effect]);\n const update = datum.update || datum;\n const updateStyle = datum.style || {};\n datum.className && selection.classed(datum.className, true);\n Object.entries(update).forEach(attr => (!isNaN(attr[1]) && selTransition.attr(attr[0], attr[1])));\n Object.entries(updateStyle).forEach(styleObj => selection.style(styleObj[0], styleObj[1]));\n};\n\n/**\n *\n *\n * @param {*} elem\n * @param {*} d\n */\nconst barEnterFn = (elem, d) => {\n const selection = elem;\n const enter = d.enter || {};\n Object.entries(enter).forEach(attr => (!isNaN(attr[1]) && selection.attr(attr[0], attr[1])));\n};\n\n/**\n * Draws rectangles by using d3 selection\n * @param {Object} params Contains container element and points\n * @return {Selection} Bar Selection\n */\n/* istanbul ignore next */ export const drawRects = (params) => {\n const { points, container, keyFn } = params;\n const updateFns = {\n enter (elem, d) { barEnterFn(elem, d); },\n update (elem, d, i) { transitionBars(elem, d, i, params); }\n };\n return makeElement(container, 'rect', points, null, updateFns, keyFn);\n};\n","import { CLASSPREFIX } from '../../enums/constants';\n\nexport const defaultConfig = {\n classPrefix: CLASSPREFIX,\n defClassName: 'layer-bar',\n className: '',\n interaction: {\n highlight: [{\n type: 'fill',\n intensity: [0, 0, -15, 0]\n }],\n fade: [{\n type: 'fill',\n intensity: [0, 0, +15, 0]\n }],\n focus: [{\n type: 'fill',\n intensity: [0, 0, +15, 0]\n }]\n },\n transform: {\n type: 'stack'\n },\n transition: {\n effect: 'cubic',\n duration: 1000\n },\n innerPadding: 0.1,\n encoding: {\n color: {},\n x: {},\n y: {},\n x0: {},\n y0: {}\n },\n states: {\n highlight: {\n className: `${CLASSPREFIX}-layer-bar-highlight`\n },\n fadeout: {\n className: `${CLASSPREFIX}-layer-bar-fadeout`\n },\n selected: {\n className: `${CLASSPREFIX}-layer-bar-selected`\n }\n }\n};\n\n","import { FieldType, DimensionSubtype } from 'muze-utils';\nimport * as PROPS from '../../enums/props';\nimport { STACK } from '../../enums/constants';\nimport { getLayerColor, positionPoints, getIndividualClassName } from '../../helpers';\n\n/**\n *\n *\n * @param {*} type\n * @param {*} fieldInfo\n * @param {*} config\n * @param {*} data\n * @returns\n */\nconst resolveDimByField = (type, axesInfo, config, data) => {\n const spaceType = type === 'x' ? 'width' : 'height';\n const [fieldType, axis] = [config[`${type}FieldType`], axesInfo[`${type}Axis`]];\n const {\n transformType,\n sizeEncoding,\n sizeConfig,\n measurement\n } = config;\n\n const sizeValue = sizeEncoding.value;\n let enter = 0;\n let pos;\n let space = 0;\n let enterSpace = 0;\n if (fieldType !== undefined) {\n if (config[`${type}0Field`]) {\n const minVal = data[type];\n const maxVal = data[`${type}0`];\n let min;\n let max;\n if (minVal === null || maxVal === null) {\n return {\n enterSpace: undefined,\n enter: undefined,\n pos: undefined,\n space: undefined\n };\n } else if (fieldType === FieldType.MEASURE || fieldType === DimensionSubtype.TEMPORAL) {\n min = Math.min(minVal, maxVal);\n max = Math.max(minVal, maxVal);\n } else {\n min = minVal;\n max = maxVal;\n }\n const scales = type === 'x' ? [min, max] : [max, min];\n pos = axis.getScaleValue(scales[0]) + axis.getUnitWidth() / 2;\n space = Math.abs(axis.getScaleValue(scales[1]) - pos) + axis.getUnitWidth() / 2;\n\n enter = pos;\n enterSpace = 0;\n } else if (fieldType === DimensionSubtype.CATEGORICAL || fieldType === DimensionSubtype.TEMPORAL) {\n pos = axis.getScaleValue(data[type]) +\n (sizeConfig[type === 'x' ? 'barWidthOffset' : 'barHeightOffset'] || 0);\n\n space = sizeConfig[type === 'x' ? 'barWidth' : 'barHeight'];\n if (sizeValue !== undefined) {\n const diffPx = sizeValue * space;\n space -= diffPx;\n pos += diffPx / 2;\n }\n enter = pos;\n enterSpace = space;\n } else {\n const zeroPos = axis.getScaleValue(0);\n const axisType = axis.getScaleValue(data[type]);\n const axisType0 = axis.getScaleValue(data[`${type}0`]);\n\n enterSpace = 0;\n if (type === 'x') {\n pos = data[type] < 0 || transformType === STACK ? axisType : zeroPos;\n space = Math.abs(pos - (transformType === STACK ? axisType0 : (data[type] >= 0 ? axisType : zeroPos)));\n } else {\n pos = transformType === STACK || data[type] >= 0 ? axisType : zeroPos;\n space = Math.abs(pos - (transformType === STACK ? axisType0 : (data[type] >= 0 ? zeroPos : axisType)));\n }\n enter = zeroPos;\n }\n } else {\n pos = 0;\n space = measurement[spaceType];\n }\n\n return {\n enterSpace,\n enter,\n pos,\n space\n };\n};\n\n/**\n *\n *\n * @param {*} data\n * @param {*} config\n * @param {*} axes\n * @returns\n */\nconst resolveDimensions = (data, config, axes) => {\n const axesInfo = {\n xAxis: axes.x,\n yAxis: axes.y\n };\n const {\n enterSpace: enterWidth,\n enter: enterX,\n pos: xPos,\n space: width\n } = resolveDimByField('x', axesInfo, config, data);\n\n const {\n enterSpace: enterHeight,\n enter: enterY,\n pos: yPos,\n space: height\n } = resolveDimByField('y', axesInfo, config, data);\n return {\n enter: {\n x: enterX,\n y: enterY,\n width: enterWidth,\n height: enterHeight\n },\n update: {\n x: xPos,\n y: yPos,\n width,\n height\n }\n };\n};\n\n/**\n * Generates an array of objects containing x, y, width and height of the bars from the data\n * @param {Array.} data Data Array\n * @param {Object} encoding Config\n * @param {Object} axes Axes object\n * @param {Object} conf config object for point generation\n * @return {Array.} Array of points\n */\nexport const getTranslatedPoints = (context, data, sizeConfig) => {\n let points = [];\n const encoding = context.config().encoding;\n const axes = context.axes();\n const colorAxis = axes.color;\n const fieldsConfig = context.data().getFieldsConfig();\n const colorEncoding = encoding.color;\n const colorField = colorEncoding.field;\n const sizeEncoding = encoding.size || {};\n const {\n x0Field,\n y0Field,\n xFieldSubType,\n yFieldSubType\n } = context.encodingFieldsInf();\n const measurement = context._store.get(PROPS.MEASUREMENT);\n const isXDim = xFieldSubType === DimensionSubtype.CATEGORICAL || xFieldSubType === DimensionSubtype.TEMPORAL;\n const isYDim = yFieldSubType === DimensionSubtype.CATEGORICAL || yFieldSubType === DimensionSubtype.TEMPORAL;\n const key = isXDim ? 'x' : (isYDim ? 'y' : null);\n const transformType = context.transformType();\n const colorFieldIndex = colorField && fieldsConfig[colorField] && fieldsConfig[colorField].index;\n\n for (let i = 0, len = data.length; i < len; i++) {\n const d = data[i];\n const style = {};\n const meta = {};\n const dimensions = resolveDimensions(d, {\n xFieldType: xFieldSubType,\n yFieldType: yFieldSubType,\n x0Field,\n y0Field,\n transformType,\n measurement,\n sizeConfig,\n sizeEncoding\n }, axes);\n\n const { color, rawColor } = getLayerColor({ datum: d, index: i },\n { colorEncoding, colorAxis, colorFieldIndex });\n\n style.fill = color;\n meta.stateColor = {};\n meta.originalColor = rawColor;\n meta.colorTransform = {};\n\n const update = dimensions.update;\n\n if (!isNaN(update.x) && !isNaN(update.y) && d._id !== undefined) {\n let point = null;\n point = {\n enter: dimensions.enter,\n update,\n style,\n _data: d._data,\n _id: d._id,\n source: d._data,\n rowId: d._id,\n meta\n };\n point.className = getIndividualClassName(d, i, data, context);\n points.push(point);\n // Store each point in a hashmap with key as the dimensional or temporal field value\n context.cachePoint(d[key], point);\n }\n }\n\n points = positionPoints(context, points);\n return points;\n};\n","import {\n getClosestIndexOf,\n getQualifiedClassName,\n selectElement,\n createElements,\n clipElement,\n DimensionSubtype,\n FieldType,\n Scales\n} from 'muze-utils';\nimport { BaseLayer } from '../../base-layer';\nimport { drawRects } from './renderer';\nimport { defaultConfig } from './default-config';\nimport * as PROPS from '../../enums/props';\nimport { getPlotMeasurement } from '../../helpers';\nimport './styles.scss';\nimport { getTranslatedPoints } from './bar-helper';\n\nconst MEASURE = FieldType.MEASURE;\nconst scaleBand = Scales.band;\n\n/**\n * Bar Layer creates a bar plot. It needs to be passed a data table, axes and configuration of the layer.\n *\n * @example\n * const BarLayer = layerFactory.getLayer('bar');\n * BarLayer.create()\n * .config(config)\n * .data(dt)\n * .mountPoint(container);\n * @class\n */\nexport default class BarLayer extends BaseLayer {\n /**\n * Creates an instance of bar layer\n */\n constructor (...params) {\n super(...params);\n this._bandScale = scaleBand();\n this._plotPadding = {\n x: 0,\n y: 0\n };\n this._plotSpan = {\n x: 0,\n y: 0\n };\n this._pointMap = {};\n }\n\n /**\n *\n *\n * @returns\n * @memberof BarLayer\n */\n elemType () {\n return 'rect';\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof BarLayer\n */\n static formalName () {\n return 'bar';\n }\n\n /**\n * Returns the default configuration of the bar layer\n * @return {Object} Default configuration of the bar layer\n */\n static defaultConfig () {\n return defaultConfig;\n }\n\n /**\n *\n *\n * @static\n * @param {*} conf\n * @param {*} userConf\n * @returns\n * @memberof BarLayer\n */\n static defaultPolicy (conf, userConf) {\n const config = BaseLayer.defaultPolicy(conf, userConf);\n const encoding = config.encoding;\n const colorField = encoding.color.field;\n const transform = config.transform;\n\n if (colorField) {\n transform.groupBy = colorField;\n }\n return config;\n }\n\n /**\n *\n *\n * @param {*} data\n * @param {*} fieldsConfig\n * @returns\n * @memberof BarLayer\n */\n calculateDomainFromData (data, encodingFieldInf, fieldsConfig) {\n const domain = super.calculateDomainFromData(data, encodingFieldInf, fieldsConfig);\n ['x', 'y'].forEach((d) => {\n if (encodingFieldInf[`${d}FieldType`] === MEASURE && domain[d]) {\n encodingFieldInf[`${d}0Field}`] ? domain[d] = domain[d].sort((a, b) => a - b) :\n (domain[d][0] = Math.min(domain[d][0], 0));\n }\n });\n return domain;\n }\n\n /**\n * Generates an array of objects containing x, y, width and height of the bars from the data\n * @param {Array.} data Data Array\n * @param {Object} encoding Config\n * @param {Object} axes Axes object\n * @param {Object} conf config object for point generation\n * @return {Array.} Array of points\n */\n translatePoints (data, sizeConfig) {\n return getTranslatedPoints(this, data, sizeConfig);\n }\n\n /**\n * Renders the plot in the given container\n * @param {SVGGroup} container SVGGroup where plot will be rendered.\n * @return {BarLayer} Instance of bar layer.\n */\n render (container) {\n const config = this.config();\n const transition = config.transition;\n const store = this._store;\n const normalizedDataArr = store.get(PROPS.NORMALIZED_DATA);\n const transformedData = store.get(PROPS.TRANSFORMED_DATA);\n const keys = transformedData.map(d => d.key);\n const fieldsConfig = this.data().getFieldsConfig();\n const axes = this.axes();\n const height = axes.y && axes.y.scale().range()[0];\n const width = axes.x && axes.x.scale().range()[1];\n const defClassName = config.defClassName;\n const qualifiedClassName = getQualifiedClassName(defClassName, this.id(), config.classPrefix);\n const className = config.className;\n const containerSelection = selectElement(container);\n const dimensions = Object.values(fieldsConfig).filter(e => e.def.type === FieldType.DIMENSION)\n .map(e => e.index);\n containerSelection.classed(qualifiedClassName.join(' '), true);\n containerSelection.classed(className, true);\n clipElement(container, {\n x: 0,\n y: 0,\n width,\n height\n }, `id-${this.id()}`);\n\n this._points = this.generateDataPoints(normalizedDataArr, keys);\n\n createElements({\n data: this._points,\n container,\n selector: 'g',\n append: 'g',\n each: (points, group, i) => {\n const seriesClassName = `${qualifiedClassName[0]}-${keys[i] || i}`.toLowerCase();\n group.style('display', 'block');\n drawRects({\n container: group.node(),\n points,\n className: seriesClassName,\n transition,\n style: {},\n keyFn: d => dimensions.map(key => d._data[key]).join('-')\n });\n }\n });\n return this;\n }\n\n /**\n *\n *\n * @param {*} normalizedData\n * @param {*} keys\n * @returns\n * @memberof BarLayer\n */\n generateDataPoints (normalizedData, keys) {\n const [barWidthMetrics, barHeightMetrics] = getPlotMeasurement(this, keys);\n const barWidthOffsets = barWidthMetrics.offsetValues || [];\n const barHeightOffsets = barHeightMetrics.offsetValues || [];\n this._plotSpan = {\n x: barWidthMetrics.groupSpan || 0,\n y: barHeightMetrics.groupSpan || 0\n };\n this._plotPadding = {\n x: barWidthMetrics.padding || 0,\n y: barHeightMetrics.padding || 0\n };\n\n this._pointMap = {};\n return normalizedData.map((data, i) => this.translatePoints(data,\n {\n barWidth: barWidthMetrics.span,\n barWidthOffset: barWidthOffsets[i] || 0,\n barHeight: barHeightMetrics.span,\n barHeightOffset: barHeightOffsets[i] || 0\n }));\n }\n\n getPlotPadding () {\n return this._plotPadding;\n }\n\n /**\n * Gets the nearest point of the position passed.\n * @param {number} x x position\n * @param {number} y y position\n * @return {Object} Nearest point.\n */\n getNearestPoint (x, y) {\n if (!this.data()) {\n return null;\n }\n let axis;\n let value;\n let index;\n let points;\n let uniqueFieldType;\n let uniqueFieldIndex;\n let filterData;\n let identifiers;\n let pointFound = null;\n const dataModel = this.data();\n const dataObj = dataModel.getData();\n const fieldsConfig = dataModel.getFieldsConfig();\n const axes = this.axes();\n const data = dataObj.data;\n const pointMap = this._pointMap;\n const {\n xField,\n yField,\n xFieldSubType,\n yFieldSubType\n } = this.encodingFieldsInf();\n\n if (xFieldSubType === FieldType.MEASURE) {\n axis = axes.y;\n value = axis.invert(y);\n uniqueFieldIndex = fieldsConfig[yField].index;\n uniqueFieldType = yFieldSubType;\n } else {\n axis = axes.x;\n value = axis.invert(x);\n uniqueFieldIndex = fieldsConfig[xField].index;\n uniqueFieldType = xFieldSubType;\n }\n\n if (uniqueFieldType === DimensionSubtype.CATEGORICAL) {\n points = pointMap[value];\n }\n\n if (uniqueFieldType === DimensionSubtype.TEMPORAL) {\n filterData = [...new Set(data.map(d => d[uniqueFieldIndex]))];\n index = getClosestIndexOf(filterData, value);\n value = filterData[index];\n points = pointMap[value];\n }\n const len = points && points.length;\n points && points.sort((p1, p2) => p1.update.y - p2.update.y);\n for (let i = 0; i < len; i++) {\n const point = points[i];\n const update = point.update;\n if (x >= update.x && x <= (update.width + update.x) && y >= update.y && y <= (update.height + update.y)) {\n pointFound = point;\n break;\n }\n pointFound = null;\n }\n\n const values = pointFound && pointFound._data;\n if (values) {\n identifiers = this.getIdentifiersFromData(values, pointFound._id);\n }\n return pointFound ? {\n dimensions: [pointFound.update],\n id: identifiers,\n layerId: this.id()\n } : pointFound;\n }\n\n getPlotSpan () {\n return this._plotSpan;\n }\n}\n","import { CLASSPREFIX } from '../../enums/constants';\n\nexport const defaultConfig = {\n defClassName: 'layer-tick',\n className: '',\n classPrefix: CLASSPREFIX,\n interaction: {\n highlight: [{\n type: 'stroke',\n intensity: [0, 0, -15, 0]\n }],\n fade: [{\n type: 'stroke',\n intensity: [0, 0, 15, 0]\n }],\n focus: [{\n type: 'stroke',\n intensity: [0, 0, 15, 0]\n }]\n },\n innerPadding: 0.1,\n transform: {\n type: 'identity'\n },\n transition: {\n effect: 'cubic',\n duration: 1000\n },\n encoding: {\n color: { },\n x: {},\n y: {},\n x0: {},\n y0: {},\n strokeOpacity: {\n value: 0.5\n },\n fillOpacity: {\n value: 0.5\n }\n },\n states: {\n highlight: {\n className: `${CLASSPREFIX}-layer-tick-highlight`\n },\n fadeout: {\n className: `${CLASSPREFIX}-layer-tick-fadeout`\n },\n selected: {\n className: `${CLASSPREFIX}-layer-tick-selected`\n }\n }\n};\n","import { selectElement } from 'muze-utils';\n\n/**\n * Draws ticks by using d3 selection\n * @param {Object} params Contains container element and points\n * @return {Selection} Ticks Selection\n */\nexport default /* istanbul ignore next */ (params) => {\n const { points, container, keyFn, className } = params;\n const mount = selectElement(container);\n const ticks = mount.selectAll('path').data(points, keyFn);\n const ticksEnter = ticks.enter().append('path');\n\n mount.attr('class', className || '');\n ticksEnter.each(function (d) {\n const selection = selectElement(this);\n const enter = d.enter || {};\n Object.entries(enter).forEach(attr => (!isNaN(attr[1]) && selection.attr(attr[0], attr[1])));\n });\n\n ticks.exit().remove();\n return ticks.merge(ticksEnter)\n .each(function (d) {\n const selection = selectElement(this);\n const update = d.update;\n const updateStyle = d.style || {};\n const x0 = update.x0 !== undefined ? update.x0 : update.x;\n const y0 = update.y0 !== undefined ? update.y0 : update.y;\n const path = `M ${update.x} ${update.y} L ${x0} ${y0}`;\n d.className && selection.classed(d.className, true);\n selection.attr('d', path);\n Object.entries(updateStyle).forEach(styleObj => selection.style(styleObj[0], styleObj[1]));\n });\n};\n\n","import { FieldType } from 'muze-utils';\nimport { PointLayer } from '../point';\nimport { defaultConfig } from './default-config';\nimport * as PROPS from '../../enums/props';\nimport { ENCODING } from '../../enums/constants';\nimport drawTicks from './renderer';\nimport './styles.scss';\nimport { getAxesScales, getLayerColor, positionPoints, getIndividualClassName } from '../../helpers';\n\nexport default class TickLayer extends PointLayer {\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof TickLayer\n */\n static defaultConfig () {\n return defaultConfig;\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof TickLayer\n */\n static formalName () {\n return 'tick';\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof TickLayer\n */\n static drawFn () {\n return drawTicks;\n }\n\n /**\n *\n *\n * @returns\n * @memberof TickLayer\n */\n elemType () {\n return 'path';\n }\n\n /**\n * Generates an array of objects containing x, y, width and height of the points from the data\n * @param {Array.} data Data Array\n * @param {Object} encoding Config\n * @param {Object} axes Axes object\n * @return {Array.} Array of points\n */\n translatePoints (data, encoding, axes, config = {}) {\n let points = [];\n const {\n xAxis,\n yAxis\n } = getAxesScales(axes);\n const fieldsConfig = this.data().getFieldsConfig();\n const {\n xField,\n yField,\n x0Field,\n y0Field,\n xFieldType,\n yFieldType\n } = this.encodingFieldsInf();\n const isXDim = xFieldType === FieldType.DIMENSION;\n const isYDim = yFieldType === FieldType.DIMENSION;\n const key = isXDim ? ENCODING.X : (isYDim ? ENCODING.Y : null);\n const colorEncoding = encoding.color;\n const colorField = colorEncoding && colorEncoding.field;\n const colorFieldIndex = fieldsConfig[colorField] && fieldsConfig[colorField].index;\n const measurement = this._store.get(PROPS.MEASUREMENT);\n const colorAxis = axes.color;\n const { x: offsetX, y: offsetY } = config.offset;\n const { x: xSpan, y: ySpan } = config.span;\n for (let i = 0, len = data.length; i < len; i++) {\n let xPx;\n let x0Px;\n let y0Px;\n let yPx;\n const d = data[i];\n const row = d._data;\n if (xField) {\n xPx = xAxis.getScaleValue(d.x) + offsetX;\n x0Px = xPx + xSpan;\n }\n\n if (yField) {\n yPx = yAxis.getScaleValue(d.y) + offsetY;\n y0Px = yPx !== null ? yPx + ySpan : null;\n }\n\n if (!xField) {\n xPx = 0;\n x0Px = measurement.width;\n if (!isNaN(yPx)) {\n yPx += ySpan / 2;\n y0Px = yPx;\n }\n }\n\n if (!yField) {\n yPx = 0;\n y0Px = measurement.height;\n x0Px = xPx += xSpan / 2;\n }\n\n if (x0Field) {\n x0Px = xAxis.getScaleValue(d.x0) + xSpan;\n yPx += ySpan / 2;\n y0Px -= ySpan / 2;\n }\n\n if (y0Field) {\n y0Px = yAxis.getScaleValue(d.y0) + ySpan;\n xPx += xSpan / 2;\n x0Px -= xSpan / 2;\n }\n const style = {};\n const meta = {};\n const { color, rawColor } = getLayerColor({ datum: d, index: i },\n { colorEncoding, colorAxis, colorFieldIndex });\n\n style.stroke = color;\n meta.stateColor = {};\n meta.originalColor = rawColor;\n meta.colorTransform = {};\n if (!isNaN(xPx) && !isNaN(yPx)) {\n const point = {\n enter: {},\n update: {\n x: xPx,\n y: yPx,\n x0: x0Px,\n y0: y0Px\n },\n style,\n _data: row,\n _id: d._id,\n source: row,\n rowId: d._id,\n meta\n };\n point.className = getIndividualClassName(d, i, data, this);\n points.push(point);\n this.cachePoint(d[key], point);\n }\n }\n points = positionPoints(this, points);\n return points;\n }\n\n getMeasurementConfig (offsetX, offsetY, widthSpan, heightSpan) {\n return {\n offset: {\n x: (offsetX || 0),\n y: (offsetY || 0)\n },\n span: {\n x: widthSpan,\n y: heightSpan\n }\n };\n }\n}\n","import { isSimpleObject, mergeRecursive, getObjProp } from 'muze-utils';\n\nconst parseLayerDefinition = (sink, definition, layerDef, layerType) => {\n for (const key in definition) {\n if (Object.hasOwnProperty.call(definition, key)) {\n let strs;\n let propValue;\n const def = definition[key];\n if (isSimpleObject(def)) {\n sink[key] = {};\n parseLayerDefinition(sink[key], def, layerDef, layerType);\n } else if (typeof def === 'string' && (strs = def.split('.')) && strs[0] === layerType) {\n propValue = getObjProp(layerDef, ...strs.slice(1, strs.length));\n if (propValue !== undefined) {\n sink[key] = propValue;\n }\n } else {\n sink[key] = def;\n }\n }\n }\n};\n\nconst sanitizeEncoding = (encoding) => {\n // Create object for each encoding value if encoding value is a string\n for (const key in encoding) {\n if (typeof encoding[key] === 'string') {\n encoding[key] = {\n field: encoding[key]\n };\n }\n }\n};\n\n/**\n * Layer Factory creates layers based on the layer type. All types of layers needs to register in\n * the layer factory. For getting a layer instance, getLayer method needs to invoked with the\n * layerType and other arguments.\n */\nconst layerFactory = (() => {\n const compositeLayers = {};\n const factoryObj = {\n setLayerRegistry: (reg) => {\n factoryObj._layerRegistry = reg;\n },\n getSerializedConf: (mark, layerDef) => {\n let serializedDefs;\n const defs = compositeLayers[mark];\n const newConf = mergeRecursive({}, layerDef);\n\n // If it is a composite layer then resolve all the definitions of each unit layer\n if (defs) {\n serializedDefs = defs.map((unitLayerDef) => {\n const sDef = {};\n parseLayerDefinition(sDef, unitLayerDef, newConf, mark);\n sanitizeEncoding(sDef.encoding);\n return sDef;\n });\n } else {\n const encoding = newConf.encoding;\n // Create object for each encoding value if encoding value is a string\n sanitizeEncoding(encoding);\n serializedDefs = newConf;\n }\n\n return serializedDefs;\n },\n getLayerInstance: (layerDef) => {\n const layerRegistry = factoryObj._layerRegistry;\n layerDef = !(layerDef instanceof Array) ? [layerDef] : layerDef;\n const instances = layerDef.map((layerObj) => {\n const layerConstructor = layerRegistry[layerObj.mark];\n return layerConstructor.create();\n });\n return instances.length === 1 ? instances[0] : instances;\n },\n composeLayers: (layerType, layerDefs) => {\n compositeLayers[layerType] = layerDefs;\n },\n sanitizeLayerConfig: (layerDef) => {\n const newConf = mergeRecursive({}, layerDef);\n sanitizeEncoding(newConf.encoding);\n return newConf;\n }\n };\n return factoryObj;\n})();\n\nexport default layerFactory;\n","import { AreaLayer } from './layers/area';\nimport { ArcLayer } from './layers/arc';\nimport { LineLayer } from './layers/line';\nimport { TextLayer } from './layers/text';\nimport { PointLayer } from './layers/point';\nimport { BarLayer } from './layers/bar';\nimport { BaseLayer } from './base-layer';\nimport * as CONSTANTS from './enums/constants';\nimport { TickLayer } from './layers/tick';\n\nexport const DEFAULT_LAYERS = {\n [CONSTANTS.AREA_LAYER]: AreaLayer,\n [CONSTANTS.ARC_LAYER]: ArcLayer,\n [CONSTANTS.LINE_LAYER]: LineLayer,\n [CONSTANTS.TEXT_LAYER]: TextLayer,\n [CONSTANTS.POINT_LAYER]: PointLayer,\n [CONSTANTS.TICK_LAYER]: TickLayer,\n [CONSTANTS.BAR_LAYER]: BarLayer,\n [CONSTANTS.BASE_LAYER]: BaseLayer\n};\n","/**\n * This file exports constants that are used as enums in the\n * crosstab group implementation.\n */\n/**\n * Width of the crosstab.\n */\nexport const X = 'x';\n/**\n * Width of the crosstab.\n */\nexport const Y = 'y';\n/**\n * Width of the crosstab.\n */\nexport const WIDTH = 'width';\n\n/**\n * Height of the crosstab.\n */\nexport const HEIGHT = 'height';\n\n/**\n * Field referring to object storing measurement configuration.\n */\nexport const MEASUREMENT = 'measurement';\n\n/**\n * Field referring to object storing configuration properties.\n */\nexport const CONFIG = 'config';\n\n/**\n * Width of visual unit in crosstab.\n */\nexport const MIN_UNIT_WIDTH = 'minUnitWidth';\n\n/**\n * Height of visual unit.\n */\nexport const MIN_UNIT_HEIGHT = 'minUnitHeight';\n\n/**\n * Field to store the array of dimensions to facet by.\n */\nexport const DIMENSIONS = 'dimensions';\n\n/**\n * Field to store array of measures to use as x axis.\n */\nexport const MEASURES = 'measures';\n\n/**\n * Field to store the array of dimensions to facet by.\n */\nexport const DIMENSION = 'dimension';\n\n/**\n * Field to store array of measures to use as x axis.\n */\nexport const MEASURE = 'measure';\n\n/**\n * Flag to specify if model should be pivoted.\n */\nexport const PIVOT = 'pivot';\n\n/**\n * Flag to specify format\n */\nexport const FORMAT = 'format';\n\n/**\n * Mount point where the variable will be hosted\n */\nexport const MOUNT = 'mount';\n\n/**\n * Data update flag\n */\nexport const HAS_DATA_UPDATED = 'hasDataUpdated';\n\n/**\n * Field referring to object storing set of rows\n */\nexport const ROWS = 'rows';\n\n/**\n * Field referring to object storing set of columns\n */\nexport const COLUMNS = 'columns';\n\n/**\n * Field referring to object storing set of columns\n */\nexport const COL = 'col';\n\n/**\n * Field referring to object storing set of rows\n */\nexport const ROW = 'row';\n\n/**\n * Field referring to object storing set of columns\n */\nexport const COLUMN = 'column';\n\n/**\n * Field referring to object storing color field\n */\nexport const COLOR = 'color';\n\n/**\n * Field referring to object storing shape field\n */\nexport const SHAPE = 'shape';\n\n/**\n * Field referring to object storing size field\n */\nexport const SIZE = 'size';\n\n/**\n * Field referring to object storing detail field\n */\nexport const DETAIL = 'detail';\n\n/**\n * Field referring to object storing set of layers\n */\nexport const LAYERS = 'layers';\n\n/**\n * Field referring to object storing the transforms\n */\nexport const TRANSFORM = 'transform';\n\n/**\n * Field referring to object storing the transforms\n */\nexport const ORDINAL = 'ordinal';\n\n/**\n * Field referring to object storing the transforms\n */\nexport const LINEAR = 'linear';\n/**\n * Field referring to object storing the transforms\n */\nexport const LEFT = 'left';\n/**\n * Field referring to object storing the transforms\n */\nexport const RIGHT = 'right';\n/**\n * Field referring to object storing the transforms\n */\nexport const TOP = 'top';\n/**\n * Field referring to object storing the transforms\n */\nexport const BOTTOM = 'bottom';\n\n/**\n * Field referring to object storing the transforms\n */\nexport const RETINAL = 'retinal';\n/**\n * Field referring to object storing the transforms\n */\nexport const CELL = 'cell';\n/**\n * Field referring to object storing the transforms\n */\nexport const X_AXES = 'xAxes';\n/**\n * Field referring to object storing the transforms\n */\nexport const Y_AXES = 'yAxes';\n/**\n * Field referring to object storing the transforms\n */\nexport const ENTRY_CELLS = 'entryCell';\n/**\n * Field referring to object storing the transforms\n */\nexport const INITIALIZED = 'initialized';\n/**\n * Field referring to object storing the transforms\n */\nexport const EXIT_CELLS = 'exitCell';\n/**\n * Field referring to object storing the transforms\n */\nexport const AXIS = 'axis';\n/**\n * Field referring to object storing the transforms\n */\nexport const UNIT = 'unit';\n/**\n * Field referring to object storing the transforms\n */\nexport const UPDATED = 'updated';\n/**\n * Field referring to object storing the transforms\n */\nexport const BEFORE_UPDATE = 'beforeupdate';\n/**\n * Field referring to object storing the transforms\n */\nexport const VALUE_MATRIX = 'valueMatrix';\n/**\n * Field referring to object storing the transforms\n */\nexport const FACET_HEADERS = 'facet-headers';\n/**\n * Field referring to object storing the transforms\n */\nexport const RADIUS = 'radius';\n/**\n * Field referring to object storing the transforms\n */\nexport const ANGLE = 'angle';\n/**\n * Field referring to object storing the transforms\n */\nexport const ARC = 'arc';\n/**\n * Field referring to object storing the transforms\n */\nexport const CARTESIAN = 'cartesian';\n/**\n * Field referring to object storing the transforms\n */\nexport const POLAR = 'polar';\n/**\n * Field referring to object storing the transforms\n */\nexport const CATEGORICAL = 'categorical';\n/**\n * Field referring to object storing the transforms\n */\nexport const TEMPORAL = 'temporal';\n/**\n * Field referring to object storing the transforms\n */\nexport const BAR = 'bar';\n/**\n * Field referring to object storing the transforms\n */\nexport const LINE = 'line';\n/**\n * Field referring to object storing the transforms\n */\nexport const POINT = 'point';\n/**\n * Field referring to object storing the transforms\n */\nexport const PRIMARY = 'Primary';\n/**\n * Field referring to object storing the transforms\n */\nexport const SECONDARY = 'Secondary';\n/**\n * Field referring to object storing the transforms\n */\nexport const BOTH = 'both';\n/**\n * Field referring to object storing the transforms\n */\nexport const INTERACTION = 'interaction';\n/**\n * Field referring to object storing the transforms\n */\nexport const GRID_LINES = 'gridLines';\n/**\n * Field referring to object storing the transforms\n */\nexport const GRID_BANDS = 'gridBands';\n/**\n * Field referring to object storing the transforms\n */\nexport const HEADER = 'header';\n/**\n * Field referring to object storing the transforms\n */\nexport const FACET = 'facet';\n\n","import { ROWS, COLUMNS, COLOR, SHAPE, SIZE, DETAIL, LAYERS, TRANSFORM, CONFIG } from '../enums/constants';\n\n/**\n * @module\n * This is the local options semantics based on which setters getters are created and reactivity is initiated.\n * This local object is only valid for Artboard.\n * Artboard merges global and local object both to the model\n *\n * Format\n * PROPERTRY_NAME: {\n * value: // default value of the property,\n * meta: {\n * typeCheck: // The setter value will be checked using this. If the value is function then the setter value\n * // is passed as args.\n * typeExpected: // The output of typecheck action will be tested against this. Truthy value will set the\n * // value to the setter\n * sanitizaiton: // Need for sanitization before type is checked\n * }\n * }\n */\n\nexport default {\n [CONFIG]: {},\n [ROWS]: [],\n [COLUMNS]: [],\n [COLOR]: '',\n [SHAPE]: '',\n [SIZE]: '',\n [DETAIL]: '',\n [LAYERS]: '',\n [TRANSFORM]: []\n};\n","import { ERROR_MSG } from 'muze-utils';\n\n/**\n * Interfaces for VisualGroup. Any new VisualGroup has to implement this class.\n * @class SimpleGroup\n */\nclass SimpleGroup {\n\n /**\n * This method is used to set or get the DataModel instance.\n *\n * @param {DataModel | undefined} dataModel Instance of datamodel.\n\n * @memberof SimpleGroup\n */\n data () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * This method is used to set or get the group specific configuration\n * properties\n *\n * @param {Object | undefined} configObj The input configuration.\n * or instance of visual group.\n * @memberof SimpleGroup\n */\n config () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * This method is used to return a serialized representation of the\n * instance's properties.\n *\n * @memberof SimpleGroup\n */\n serialize () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * This method is used to get or set the measurement object which houses\n * layout properties like width and height.\n *\n * @param {Object | undefined} mObj The measurement properties.\n * @memberof SimpleGroup\n */\n measurement () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n}\n\nexport default SimpleGroup;\n","import { ERROR_MSG } from 'muze-utils';\n\n/**\n *\n *\n * @export\n * @class Variable\n */\nexport default class Variable {\n\n /**\n *\n *\n * @memberof Variable\n */\n type () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n *\n *\n * @memberof Variable\n */\n toString () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n}\n","import Variable from './variable';\n\n/**\n *\n *\n * @class ComposeVars\n * @extends {Variable}\n */\nclass ComposedVars extends Variable {\n\n /**\n *Creates an instance of ComposeVars.\n * @param {*} texts\n * @memberof ComposeVars\n */\n constructor (...texts) {\n super(...texts);\n this.vars(texts);\n }\n\n /**\n *\n *\n * @param {*} params\n * @returns\n * @memberof ComposeVars\n */\n vars (...params) {\n if (params.length) {\n this._vars = params[0];\n return this;\n }\n return this._vars;\n }\n\n /**\n *\n *\n * @param {*} dm\n * @returns\n * @memberof ComposeVars\n */\n data (...dm) {\n if (dm.length) {\n this.vars().forEach(d => d.data(dm[0]));\n return this;\n }\n return this._data;\n }\n\n /**\n *\n *\n * @returns\n * @memberof ComposeVars\n */\n getMembers () {\n const vars = this.vars();\n return vars.map(member => member.getMembers()[0]);\n }\n\n /**\n *\n *\n * @returns\n * @memberof ComposeVars\n */\n type () {\n return this.vars()[0].type();\n }\n\n /**\n *\n *\n * @returns\n * @memberof ComposeVars\n */\n toString () {\n return this.vars().map(d => d.toString()).join(',');\n }\n\n /**\n *\n *\n * @returns\n * @memberof ComposeVars\n */\n numberFormat () {\n return this.vars()[0].numberFormat();\n }\n\n /**\n *\n *\n * @returns\n * @memberof ComposeVars\n */\n format (values) {\n return this.vars()[0].format(values);\n }\n\n /**\n *\n *\n * @returns\n * @memberof ComposedVars\n */\n subtype () {\n return this.vars()[0].subtype();\n }\n\n /**\n *\n *\n * @returns\n * @memberof ComposedVars\n */\n getMinDiff () {\n return this.vars()[0].getMinDiff();\n }\n}\n\nexport default ComposedVars;\n","import { DateTimeFormatter } from 'muze-utils';\nimport Variable from './variable';\n\n/**\n *\n *\n * @export\n * @class Vars\n * @extends {Variable}\n */\nexport default class SimpleVariable extends Variable {\n\n /**\n *Creates an instance of Vars.\n * @param {*} text\n * @memberof Vars\n */\n constructor (text) {\n super();\n this.oneVar(text);\n }\n\n /**\n *\n *\n * @param {*} params\n * @returns\n * @memberof Vars\n */\n oneVar (...oneV) {\n if (oneV.length) {\n this._oneVar = oneV[0];\n return this;\n }\n return this._oneVar;\n }\n\n /**\n *\n *\n * @param {*} dm\n * @returns\n * @memberof Vars\n */\n data (...dm) {\n if (dm.length) {\n this._data = dm[0];\n return this;\n }\n return this._data;\n }\n\n /**\n *\n *\n * @returns\n * @memberof Vars\n */\n toString () {\n return this.oneVar();\n }\n\n /**\n *\n *\n * @memberof SimpleVariable\n */\n numberFormat () {\n if (this.type() === 'measure') {\n const formatter = this.data().getFieldspace().getMeasure()[this.oneVar()]._ref;\n return formatter.numberFormat();\n } return val => val;\n }\n\n /**\n *\n *\n * @memberof SimpleVariable\n */\n format (values) {\n if (values && this.subtype() === 'temporal') {\n const formatter = this.data().getFieldspace().getDimension()[this.oneVar()]._ref.schema.format;\n const dtFormat = new DateTimeFormatter(formatter);\n values = values.map(e => dtFormat.getNativeDate(e));\n }\n return values;\n }\n\n /**\n *\n *\n * @returns\n * @memberof Vars\n */\n getMembers () {\n return [this.oneVar()];\n }\n\n /**\n *\n *\n * @returns\n * @memberof Vars\n */\n type () {\n const fieldDef = this.data().getFieldsConfig()[this.oneVar()].def;\n return fieldDef.type;\n }\n\n /**\n *\n *\n * @returns\n * @memberof Vars\n */\n subtype () {\n const fieldDef = this.data().getFieldsConfig()[this.oneVar()].def;\n return fieldDef.subtype || fieldDef.type;\n }\n\n /**\n *\n *\n * @returns\n * @memberof SimpleVariable\n */\n getMinDiff () {\n const fieldSpace = this.data().getFieldspace();\n return fieldSpace.fieldsObj()[this.oneVar()].getMinDiff();\n }\n\n equals (varInst) {\n return this.oneVar() === varInst.oneVar();\n }\n}\n","import { ComposedVars, SimpleVariable } from '../variable';\nimport { DIMENSION, COLUMNS, ROWS, TEMPORAL } from '../enums/constants';\n\n/**\n * Gets the list of fields in a sorted order by measurement and dimension\n *\n * @param {Array} fieldList List of fields in the view\n * @param {Object} fieldMap Mapping of fields in the datamodel\n * @return {Array} fields sorted by measurement and dimensions\n */\nconst orderFields = (fieldArray, type) => {\n const dimensionArr = [[], []];\n const measureArr = [[], []];\n const temporalArr = [[], []];\n const categoricalArr = [[], []];\n\n fieldArray.forEach((fieldList, index) => {\n fieldList.forEach((field) => {\n if (field.type() === DIMENSION) {\n dimensionArr[index].push(field);\n field.subtype() === TEMPORAL ? temporalArr[index].push(field) : categoricalArr[index].push(field);\n } else {\n measureArr[index].push(field);\n }\n });\n });\n\n const numOfMeasures = measureArr[0].length + (measureArr[1] ? measureArr[1].length : 0);\n\n // Single array of fields\n if (!fieldArray[1]) {\n // Push measures to bottom\n measureArr[1] = type === COLUMNS ? measureArr[0] : [];\n // Push measures to left\n measureArr[0] = type !== COLUMNS ? measureArr[0] : [];\n // Bottom and right dimensions empty\n dimensionArr[1] = [];\n // Left and top filled with dimensions\n dimensionArr[0] = dimensionArr[0];\n if (numOfMeasures === 0) {\n const allDimensions = [...dimensionArr[0], ...dimensionArr[1]];\n if (type === COLUMNS) {\n dimensionArr[1] = allDimensions[allDimensions.length - 1] ? [allDimensions[allDimensions.length - 1]]\n : [];\n allDimensions.splice(-1, 1);\n } else {\n dimensionArr[1] = [];\n }\n dimensionArr[0] = [...allDimensions];\n }\n }\n\n if (dimensionArr[0].length && dimensionArr[1].length && numOfMeasures > 0) {\n dimensionArr[0] = [...dimensionArr[0], ...dimensionArr[1]];\n dimensionArr[1] = [];\n }\n return {\n fields: dimensionArr.map((list, i) => (i === 1 ?\n measureArr[i].concat(dimensionArr[i]) : dimensionArr[i].concat(measureArr[i]))),\n dimensions: [...dimensionArr[0], ...dimensionArr[1]],\n measures: [...measureArr[0], ...measureArr[1]],\n temporal: [...temporalArr[0], ...temporalArr[1]],\n categorical: [...categoricalArr[0], ...categoricalArr[1]]\n };\n};\n\n/**\n * Gets the list of normalized fields\n *\n * @param {Array} fields List of fields in the view\n * @param {Object} fieldMap Mapping of fields in the datamodel\n * @return {Array} fields normalized by measurement and dimensions\n */\nconst normalizeFields = (config, type) => {\n const fieldsArr = [];\n const fields = config[type];\n\n if (!(fields[0] instanceof Array)) {\n fieldsArr[0] = fields;\n } else {\n fieldsArr[0] = fields[0] || [];\n fieldsArr[1] = fields[1] || [];\n }\n return fieldsArr;\n};\n\n/**\n *\n *\n * @param {*} fields\n * @param {*} datamodel\n * @return\n */\nconst convertToVar = (datamodel, fields) => {\n const vars = [];\n\n fields && fields.forEach((field) => {\n if (field instanceof ComposedVars) {\n vars.push(field);\n field.data(datamodel);\n } else {\n vars.push(new SimpleVariable(field).data(datamodel));\n }\n });\n return vars;\n};\n\n/**\n *\n *\n * @param {*} rows\n * @param {*} columns\n * @param {*} datamodel\n * @return\n */\nexport const transformFields = (datamodel, config) => {\n const [rowsInfo, columnsInfo] = [ROWS, COLUMNS].map((fields) => {\n const normalizedFields = normalizeFields(config, fields);\n const norFields = [convertToVar(datamodel, normalizedFields[0])];\n\n if (normalizedFields[1]) {\n norFields[1] = convertToVar(datamodel, normalizedFields[1]);\n }\n return orderFields(norFields, fields);\n });\n const {\n fields: rows,\n dimensions: rowDimensions,\n measures: rowMeasures,\n temporal: rowTemporalFields,\n categorical: rowCategoricalFields\n } = rowsInfo;\n const {\n fields: columns,\n dimensions: columnDimensions,\n measures: columnMeasures,\n temporal: columnTemporalFields,\n categorical: columnCategoricalFields\n } = columnsInfo;\n return {\n rows,\n rowDimensions,\n rowMeasures,\n rowTemporalFields,\n rowCategoricalFields,\n columns,\n columnTemporalFields,\n columnCategoricalFields,\n columnDimensions,\n columnMeasures\n };\n};\n","import { ERROR_MSG, mergeRecursive } from 'muze-utils';\nimport { transformFields } from './field-sanitizer';\nimport { getHeaderAxisFrom } from '../group-helper/group-utils';\nimport { ROW, COLUMN } from '../enums/constants';\n\n/**\n *\n *\n * @export\n * @class VisualEncoder\n */\nexport default class VisualEncoder {\n\n /**\n *\n *\n * @memberof VisualEncoder\n */\n createAxis () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n *\n *\n * @memberof VisualEncoder\n */\n setCommonDomain () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n *\n *\n * @memberof VisualEncoder\n */\n getLayerConfig () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n fieldInfo (...info) {\n if (info.length) {\n this._fieldInfo = mergeRecursive(this._fieldInfo || {}, info[0]);\n return this;\n }\n return this._fieldInfo;\n }\n\n /**\n *\n *\n * @param {*} datamodel\n * @param {*} config\n * @return\n * @memberof VisualEncoder\n */\n fieldSanitizer (datamodel, config) {\n this.fieldInfo(transformFields(datamodel, config));\n return this.fieldInfo();\n }\n\n /**\n *\n *\n * @param {*} params\n * @return\n * @memberof VisualEncoder\n */\n axisFrom (...params) {\n if (params.length) {\n this._axisFrom = params[0];\n return this;\n }\n return this._axisFrom;\n }\n\n /**\n *\n *\n * @param {*} params\n * @return\n * @memberof VisualEncoder\n */\n headerFrom (...params) {\n if (params.length) {\n this._headerFrom = params[0];\n return this;\n }\n return this.__headerFrom;\n }\n\n /**\n *\n *\n * @param {*} axisFrom\n * @return\n * @memberof CartesianEncoder\n */\n setAxisAndHeaders (axisFrom = {}, fields) {\n const [rowHeader, rowAxis] = getHeaderAxisFrom(ROW, fields.rows, axisFrom);\n const [colHeader, colAxis] = getHeaderAxisFrom(COLUMN, fields.columns, axisFrom);\n\n this.axisFrom({\n row: rowAxis,\n column: colAxis\n });\n this.headerFrom({\n row: rowHeader,\n column: colHeader\n });\n return this;\n }\n}\n","import { ContinousAxis, BandAxis, TimeAxis, ColorAxis, SizeAxis, ShapeAxis } from '@chartshq/muze-axis';\n\nexport const scaleMaps = {\n linear: ContinousAxis,\n band: BandAxis,\n temporal: TimeAxis,\n size: SizeAxis,\n color: ColorAxis,\n shape: ShapeAxis\n};\n","import { ScaleType } from '@chartshq/muze-axis';\n\n/**\n * Map of DataModel types to associated field types.\n */\nexport const dataTypeScaleMap = {\n dimension: ScaleType.BAND,\n categorical: ScaleType.BAND,\n measure: ScaleType.LINEAR,\n temporal: ScaleType.TIME\n};\n\n","import { mergeRecursive } from 'muze-utils';\nimport { AxisOrientation } from '@chartshq/muze-axis';\nimport { scaleMaps } from '../enums/scale-maps';\nimport { getAxisType, getAxisKey } from '../group-helper';\nimport { dataTypeScaleMap } from '../data-type-scale-map';\nimport { CATEGORICAL, TEMPORAL, BAR, LINE, POINT, BOTH, Y } from '../enums/constants';\n\n/**\n *\n *\n * @param {*} axisInfo\n * @param {*} field\n * @param {*} axesCreators\n * @return\n */\nconst getAxisConfig = (axisInfo, field, axesCreators) => {\n let axisOrientation;\n const { index, axisIndex, axisType } = axisInfo;\n const { config, position } = axesCreators;\n const userAxisConfig = config.axes ? (config.axes[axisType] || {}) : {};\n const {\n LEFT,\n RIGHT,\n TOP,\n BOTTOM\n } = AxisOrientation;\n const allOrientations = axisType === Y ? [LEFT, RIGHT] : [TOP, BOTTOM];\n\n if (position === BOTH) {\n axisOrientation = allOrientations[axisIndex];\n } else {\n axisOrientation = position;\n }\n const axisConfig = {\n id: `${axisType}-${index}-${axisIndex}`,\n name: field.toString(),\n field: field.toString(),\n labels: { rotation: 0 },\n numberFormat: field.numberFormat(),\n orientation: axisOrientation,\n type: dataTypeScaleMap[field.subtype()]\n };\n userAxisConfig.tickValues = field.format(userAxisConfig.tickValues);\n userAxisConfig.domain = field.format(userAxisConfig.domain);\n\n return mergeRecursive(axisConfig, userAxisConfig);\n};\n\n/**\n *\n *\n * @param {*} axisInfo\n * @param {*} field\n * @param {*} axesCreators\n * @return\n */\nconst createSimpleAxis = (axisConfig, field, axesCreators) => {\n const { labelManager } = axesCreators;\n const Cls = scaleMaps[dataTypeScaleMap[field.subtype()]];\n const simpleAxis = new Cls(axisConfig, { labelManager });\n return simpleAxis;\n};\n\n/**\n *\n *\n * @param {*} axisType\n * @param {*} fieldInfo\n * @param {*} axesCreators\n * @param {*} groupAxes\n * @return\n */\nexport const generateAxisFromMap = (axisType, fieldInfo, axesCreators, groupAxes) => {\n let axisKey;\n const currentAxes = [];\n const { fields, index } = fieldInfo;\n const { cacheMaps } = axesCreators;\n const map = cacheMaps[`${axisType}AxesMap`];\n\n fields.forEach((field, axisIndex) => {\n axisKey = getAxisKey(axisType, index, dataTypeScaleMap[field.subtype()]);\n const axisConfig = getAxisConfig({ index, axisIndex, axisType }, field, axesCreators);\n\n if (!map.has(axisKey)) {\n const xAxis = createSimpleAxis(axisConfig, field, axesCreators);\n currentAxes.push(xAxis);\n } else {\n const axes = map.get(axisKey);\n axes[axisIndex] = axes[axisIndex] ? axes[axisIndex] : createSimpleAxis(axisConfig, field, axesCreators);\n axes[axisIndex]._rotationLock = false;\n axes[axisIndex] && axes[axisIndex].config(axisConfig).domain(axisConfig.domain || []);\n }\n });\n\n if (currentAxes.length) {\n map.set(axisKey, currentAxes);\n }\n\n for (const [key] of map.entries()) {\n if (key === axisKey) {\n groupAxes.add(axisKey);\n }\n }\n return map.get(axisKey);\n};\n\n/**\n *\n *\n * @memberof MatrixResolver\n */\nexport const mutateAxesFromMap = (cacheMaps, axes) => {\n const {\n xAxesMap,\n yAxesMap\n } = cacheMaps;\n const {\n x: xAxisSet,\n y: yAxisSet\n } = axes;\n const xAxes = [];\n const yAxes = [];\n\n xAxisSet.forEach((axisId) => {\n const xAxis = xAxesMap.get(axisId);\n xAxes.push(xAxis);\n });\n yAxisSet.forEach((axisId) => {\n const yAxis = yAxesMap.get(axisId);\n yAxes.push(yAxis);\n });\n return {\n xAxes, yAxes\n };\n};\n\n/**\n * return a default mark based on predefined set of rules of type and subtype of the fields\n *\n * @param {string} colFieldType dimension/measure - temporal/ordinal/nominal\n * @param {string} rowFieldType dimension/measure - temporal/ordinal/nominal\n * @return {Object} return mark type\n */\nexport const getDefaultMark = (colFieldType, rowFieldType) => {\n let mark;\n\n if (colFieldType === CATEGORICAL || rowFieldType === CATEGORICAL) {\n mark = BAR;\n } else if (colFieldType === TEMPORAL || rowFieldType === TEMPORAL) {\n mark = LINE;\n } else {\n mark = POINT;\n }\n\n return mark;\n};\n\n/**\n *\n *\n * @param {*} axesCreators\n * @param {*} [fieldInfo=[]]\n * @return\n */\nexport const createRetinalAxis = (axesCreators, fieldProps = {}) => {\n const { axisType, fieldsConfig } = axesCreators;\n const field = fieldProps.field;\n const axis = [];\n const Cls = scaleMaps[axisType];\n\n fieldProps.type = fieldProps.type ? fieldProps.type : getAxisType(fieldsConfig, field || null);\n axis.push(new Cls(fieldProps));\n return axis;\n};\n\n/**\n *\n *\n * @param {*} arr\n * @param {*} val\n * @return\n */\nexport const getIndex = (arr, val) => {\n let i = 0;\n let arrIndex = -1;\n\n while (arrIndex === -1 && i < arr.length) {\n if (arr[i].toString() === val.toString()) {\n arrIndex = i;\n }\n i++;\n }\n return arrIndex;\n};\n\n/**\n *\n *\n * @param {*} colFields\n * @param {*} rowFields\n * @param {*} userLayerConfig\n * @return\n * @memberof CartesianEncoder\n */\nexport const getLayerConfFromFields = (colFields, rowFields, userLayerConfig) => userLayerConfig.filter((conf) => {\n const userConf = conf instanceof Array ? conf : [conf];\n const encodingArr = [].concat(...userConf.map(d => d.encoding).filter(d => d !== undefined));\n\n if (!encodingArr.length) {\n return true;\n }\n\n const xFields = [].concat(...encodingArr.map(d => [d.x && d.x.field, d.x0 && d.x0.field]))\n .filter(d => d !== undefined && d !== null);\n const yFields = [].concat(...encodingArr.map(d => [d.y && d.y.field, d.y0 && d.y0.field]))\n .filter(d => d !== undefined && d !== null);\n\n if (!xFields.length && !yFields.length) {\n return true;\n }\n\n const colFieldExist = xFields.length ? xFields.every(d => colFields.indexOf(d) !== -1) : false;\n const rowFieldExist = yFields.length ? yFields.every(d => rowFields.indexOf(d) !== -1) : false;\n if (xFields.length && yFields.length) {\n return colFieldExist && rowFieldExist;\n }\n return colFieldExist || rowFieldExist;\n});\n","import { layerFactory } from '@chartshq/visual-layer';\nimport { mergeRecursive } from 'muze-utils';\nimport { generateAxisFromMap, getDefaultMark, getIndex, getLayerConfFromFields } from './encoder-helper';\nimport { retriveDomainFromData } from '../group-helper';\n\nimport { ROW, COLUMN, COL, LEFT, TOP, CARTESIAN, MEASURE, BOTH, X, Y } from '../enums/constants';\nimport VisualEncoder from './visual-encoder';\n\n/**\n *\n *\n * @export\n * @class CartesianEncoder\n * @extends {VisualEncoder}\n */\nexport default class CartesianEncoder extends VisualEncoder {\n\n /**\n *\n *\n * @return\n * @memberof CartesianEncoder\n */\n static type () {\n return CARTESIAN;\n }\n\n /**\n *\n *\n * @param {*} axesCreators\n * @param {*} fieldInfo\n * @return\n * @memberof CartesianEncoder\n */\n createAxis (axesCreators, fieldInfo) {\n const geomCellAxes = {};\n const {\n axes\n } = axesCreators;\n const {\n projections,\n indices\n } = fieldInfo;\n const {\n rowFields,\n columnFields\n } = projections;\n const {\n rowIndex,\n columnIndex\n } = indices;\n const axisFields = [{\n fields: rowFields,\n index: rowIndex\n }, {\n fields: columnFields,\n index: columnIndex\n }];\n const xAxes = axes.x || [];\n const yAxes = axes.y || [];\n\n [rowFields, columnFields].forEach((fields, i) => {\n const type = i === 0 ? ROW : COLUMN;\n const axis = i === 0 ? Y : X;\n\n if (fields.length > 1) {\n axesCreators.position = BOTH;\n } else {\n axesCreators.position = this.axisFrom()[type];\n }\n geomCellAxes[axis] = generateAxisFromMap(axis, axisFields[i], axesCreators, axis === X ? xAxes : yAxes);\n });\n return geomCellAxes;\n }\n\n /**\n *\n *\n * @param {*} fields\n * @return\n * @memberof CartesianEncoder\n */\n getFacetsAndProjections (fields, type) {\n let facets = [];\n let projections = [];\n let counter = 0;\n const primaryFacets = [];\n const secondaryFacets = [];\n const primaryFields = fields[0];\n const secondaryFields = fields[1];\n const primaryLen = primaryFields.length;\n const secondaryLen = secondaryFields.length;\n const axisFrom = this.axisFrom();\n\n for (let i = 0; i < primaryLen; i++) {\n let projArr = [primaryFields[i]];\n const primaryField = primaryFields[i];\n\n if (primaryField.type() === MEASURE) {\n const secondaryField = secondaryFields[counter];\n if (secondaryField && secondaryField.type() === MEASURE) {\n counter++;\n projArr = [primaryField, secondaryField];\n }\n projections.push(projArr);\n } else {\n facets.push(primaryField);\n primaryFacets.push(primaryField);\n }\n }\n if (secondaryLen > counter) {\n for (let i = counter; i < secondaryLen; i++) {\n const secondaryField = secondaryFields[i];\n const projArr = [secondaryField];\n if (secondaryField.type() === MEASURE) {\n projections.push(projArr);\n } else {\n facets.push(secondaryField);\n secondaryFacets.push(secondaryField);\n }\n }\n }\n if ((primaryFacets.length || secondaryFacets.length) && !projections.length) {\n type = type === COL ? COLUMN : type;\n if ((axisFrom[type] === LEFT || axisFrom[type] === TOP) && primaryFacets.length) {\n const axisFromIndex = primaryFacets.length - 1;\n const facet = primaryFacets[axisFromIndex];\n projections = [[facet]];\n const existIndex = getIndex(secondaryFacets, facet);\n if (existIndex > -1) {\n projections = [[facet, facet]];\n secondaryFacets.splice(existIndex, 1);\n }\n primaryFacets.splice(axisFromIndex, 1);\n } else {\n const axisFromIndex = 0;\n const facet = secondaryFacets[axisFromIndex];\n projections = [[facet]];\n const existIndex = getIndex(primaryFacets, facet);\n if (existIndex > -1) {\n projections = [[facet, facet]];\n primaryFacets.splice(existIndex, 1);\n }\n secondaryFacets.splice(axisFromIndex, 1);\n }\n }\n\n facets = [...primaryFacets, ...secondaryFacets];\n facets = facets.filter((el, index, self) => index === self.findIndex(t => (t.toString() === el.toString())));\n return {\n facets,\n projections\n };\n }\n\n /**\n *\n *\n * @param {*} datamodel\n * @param {*} config\n * @return\n * @memberof CartesianEncoder\n */\n fieldSanitizer (datamodel, config) {\n return super.fieldSanitizer(datamodel, config);\n }\n\n /**\n *\n *\n * @param {*} datamodel\n * @return\n * @memberof CartesianEncoder\n */\n getRetinalFieldsDomain (dataModels, encoding) {\n const groupedModel = dataModels.groupedModel;\n const domains = {};\n for (const key in encoding) {\n if ({}.hasOwnProperty.call(encoding, key)) {\n const encodingObj = encoding[key];\n const field = encodingObj.field;\n if (!encodingObj.domain && field) {\n const domain = retriveDomainFromData(groupedModel, field);\n domains[field] = domain;\n }\n }\n }\n return domains;\n }\n\n /**\n *\n *\n * @param {*} layerArray\n * @memberof CartesianEncoder\n */\n serializeLayerConfig (layerArray) {\n const serializedLayers = [];\n // let currentLayerIndex = 0;\n layerArray.length && layerArray.forEach((layer, i) => {\n const def = layerFactory.sanitizeLayerConfig(layer);\n def.order = i;\n serializedLayers.push(def);\n });\n return serializedLayers;\n }\n\n /**\n *\n *\n * @param {*} fields\n * @param {*} userLayerConfig\n * @return\n * @memberof CartesianEncoder\n */\n getLayerConfig (fields, userLayerConfig) {\n const layerConfig = [];\n const {\n columnFields,\n rowFields\n } = fields;\n\n // let currentLayerIndex = 0;\n columnFields.forEach((colField) => {\n const colFieldName = colField.toString();\n rowFields.forEach((rowField) => {\n let configs = [];\n const rowFieldName = rowField.toString();\n const encoding = {\n x: {\n field: colFieldName\n },\n y: {\n field: rowFieldName\n }\n };\n const rowFieldType = rowField.subtype();\n const colFieldType = colField.subtype();\n const mark = getDefaultMark(colFieldType, rowFieldType);\n\n const defConfigs = [{\n mark,\n def: {\n mark,\n encoding\n }\n }];\n\n const layerConfigs = getLayerConfFromFields(colField.getMembers(),\n rowField.getMembers(), userLayerConfig || []);\n if (layerConfigs.length) {\n configs = layerConfigs.map((layerConf) => {\n const mergedLayerConf = mergeRecursive(mergeRecursive({}, defConfigs[0].def), layerConf);\n const serializedLayerConfig = layerFactory.getSerializedConf(mergedLayerConf.mark,\n mergedLayerConf);\n return {\n mark: mergedLayerConf.mark,\n order: mergedLayerConf.order,\n def: serializedLayerConfig\n };\n });\n } else {\n configs = defConfigs;\n }\n\n layerConfig.push(...configs);\n });\n });\n return layerConfig;\n }\n}\n\n","import { layerFactory } from '@chartshq/visual-layer';\nimport { mergeRecursive } from 'muze-utils';\nimport VisualEncoder from './visual-encoder';\nimport { RADIUS, ANGLE, SIZE, MEASURE, ARC, POLAR, COLOR } from '../enums/constants';\n/**\n *\n *\n * @export\n * @class PolarEncoder\n * @extends {VisualEncoder}\n */\nexport default class PolarEncoder extends VisualEncoder {\n\n /**\n *\n *\n * @param {*} axesCreators\n * @param {*} fieldInfo\n * @return\n * @memberof PolarEncoder\n */\n createAxis (axesCreators, fieldInfo) {\n const {\n axes\n } = axesCreators;\n const geomCellAxes = axes;\n const {\n indices\n } = fieldInfo;\n const {\n rowIndex,\n columnIndex\n } = indices;\n // Dummy axes for polar, to create blank cells\n const pieAxes = geomCellAxes.pie || [];\n\n pieAxes[rowIndex] = pieAxes[rowIndex] || [];\n pieAxes[rowIndex][columnIndex] = [];\n\n geomCellAxes.pie = pieAxes;\n geomCellAxes.x = null;\n geomCellAxes.y = null;\n\n return geomCellAxes;\n }\n\n /**\n *\n *\n * @param {*} fields\n * @return\n * @memberof CartesianEncoder\n */\n getFacetsAndProjections (fields) {\n let counter = 0;\n const facets = [];\n const projections = [];\n const primaryFields = fields[0];\n const secondaryFields = fields[1];\n const primaryLen = primaryFields.length;\n const secondaryLen = secondaryFields.length;\n\n for (let i = 0; i < primaryLen; i++) {\n const primaryField = primaryFields[i];\n if (primaryField.type() === MEASURE) {\n const secondaryField = secondaryFields[counter++];\n const projArr = secondaryField ? [primaryField, secondaryField] : [primaryField];\n projections.push(projArr);\n } else {\n facets.push(primaryField);\n }\n }\n if (secondaryLen > counter) {\n for (let i = counter; i < secondaryLen; i++) {\n const secondaryField = secondaryFields[i];\n const projArr = [secondaryField];\n if (secondaryField.type() === MEASURE) {\n projections.push(projArr);\n } else {\n facets.push(secondaryField);\n }\n }\n }\n return {\n facets,\n projections\n };\n }\n\n /**\n *\n *\n * @return\n * @memberof PolarEncoder\n */\n setCommonDomain () {\n // No domain to be set\n return this;\n }\n\n /**\n *\n *\n * @return\n * @memberof PolarEncoder\n */\n static type () {\n return POLAR;\n }\n\n layers (...layers) {\n if (layers.length) {\n this._layers = layers[0];\n return this;\n }\n return this._layers;\n }\n\n /**\n *\n *\n * @param {*} datamodel\n * @param {*} config\n * @memberof PolarEncoder\n */\n fieldSanitizer (datamodel, config) {\n let sanitizedRows = [[], []];\n let sanitizedColumns = [[], []];\n const fields = super.fieldSanitizer(datamodel, config);\n const {\n layers\n } = config;\n const {\n rows,\n columns\n } = fields;\n const layer = layers[0];\n const encoding = layer.encoding;\n const radius = encoding && encoding.radius ? encoding.radius.field : null;\n const angle = encoding && encoding.angle ? encoding.angle.field : null;\n const sanitizedFields = [sanitizedRows, sanitizedColumns];\n\n [rows, columns].forEach((fieldType, typeIndex) => {\n fieldType.forEach((fieldSet, i) => fieldSet.forEach((field) => {\n if (field.toString() !== radius && field.toString() !== angle && field.type() !== MEASURE) {\n sanitizedFields[typeIndex][i].push(field);\n }\n }));\n });\n sanitizedColumns = [...new Set(sanitizedColumns)];\n sanitizedRows = [...new Set(sanitizedRows)];\n this.fieldInfo({ rows: sanitizedRows, columns: sanitizedColumns });\n return this.fieldInfo();\n }\n\n getRetinalFieldsDomain (dataModels, encoding, facetFields, groupBy) {\n let sizeField;\n let colorField;\n const fields = [];\n const layers = this.layers();\n const dataModel = dataModels.parentModel;\n const fieldsConfig = dataModel.getFieldsConfig();\n const domains = {};\n if (layers && layers[0]) {\n const layer = layers[0];\n const layerEncoding = layer.def.encoding || {};\n\n [RADIUS, ANGLE, SIZE, COLOR].forEach((encType) => {\n const field = layerEncoding[encType] ? layerEncoding[encType].field : '';\n const measureField = fieldsConfig[field] && fieldsConfig[field].def.type === MEASURE;\n if (encType === SIZE && measureField) {\n sizeField = field;\n }\n if (encType === COLOR) {\n colorField = field;\n }\n fieldsConfig[field] && !measureField && fields.push(field);\n });\n }\n\n if (sizeField) {\n domains[sizeField] = dataModel.groupBy(facetFields, {\n [sizeField]: 'sum'\n }).getFieldspace().fieldsObj()[sizeField].domain();\n }\n\n if (colorField) {\n const dm = dataModel.groupBy([...facetFields, ...fields], groupBy.measures);\n domains[colorField] = dm.getFieldspace().fieldsObj()[colorField].domain();\n }\n return domains;\n }\n /**\n *\n *\n * @param {*} fields\n * @param {*} userLayerConfig\n * @return\n * @memberof PolarEncoder\n */\n getLayerConfig (fields, userLayerConfig) {\n let layerConfig = [];\n const {\n columnFields,\n rowFields\n } = fields;\n const allFields = [...columnFields, ...rowFields];\n\n allFields.forEach(() => {\n const encoding = {};\n let config = {\n mark: ARC,\n def: {\n encoding\n }\n };\n if (userLayerConfig && userLayerConfig.length > 0) {\n config = mergeRecursive(config, userLayerConfig[0]);\n }\n layerConfig.push(config);\n });\n if (layerConfig.length === 0) {\n layerConfig = userLayerConfig;\n }\n\n this.layers(layerConfig);\n return layerConfig;\n }\n\n /**\n *\n *\n * @param {*} layerArray\n * @returns\n * @memberof PolarEncoder\n */\n serializeLayerConfig (layerArray) {\n const serializedLayers = [];\n\n layerArray.length && layerArray.forEach((layer) => {\n const def = layerFactory.getSerializedConf(layer.mark, layer);\n serializedLayers.push({\n mark: layer.mark,\n def\n });\n });\n return serializedLayers;\n }\n}\n","import { createRetinalAxis } from './encoder-helper';\nimport { COLOR, SHAPE, SIZE } from '../enums/constants';\nimport VisualEncoder from './visual-encoder';\n\n/**\n *\n *\n * @export\n * @class RetinalEncoder\n * @extends {VisualEncoder}\n */\nexport default class RetinalEncoder extends VisualEncoder {\n\n /**\n *\n *\n * @param {*} axesCreators\n * @return\n * @memberof RetinalEncoder\n */\n createAxis (axesCreators) {\n const { fieldsConfig, config } = axesCreators;\n const newAxes = {};\n\n [COLOR, SHAPE, SIZE].forEach((axisType) => {\n newAxes[`${axisType}`] = createRetinalAxis({ axisType, fieldsConfig }, config[axisType]);\n });\n return newAxes;\n }\n\n /**\n *\n *\n * @static\n * @return\n * @memberof RetinalEncoder\n */\n static type () {\n return 'retinal';\n }\n\n /**\n *\n *\n * @param {*} fields\n * @param {*} userLayerConfig\n * @return\n * @memberof RetinalEncoder\n */\n getLayerConfig (encodingConfigs, userLayerConfig) {\n const layerConfig = [];\n userLayerConfig.forEach((e) => {\n const config = e;\n [COLOR, SHAPE, SIZE].forEach((axis) => {\n if (encodingConfigs[axis] && encodingConfigs[axis].field) {\n const def = config.def;\n if (config.def instanceof Array) {\n def.forEach((conf) => {\n conf.encoding = conf.encoding || {};\n !conf.encoding[axis] && (conf.encoding[axis] = {});\n conf.encoding[axis].field = encodingConfigs[axis].field;\n });\n } else {\n def.encoding = def.encoding || {};\n !def.encoding[axis] && (def.encoding[axis] = {});\n def.encoding[axis].field = encodingConfigs[axis].field;\n }\n }\n });\n layerConfig.push(config);\n });\n return layerConfig;\n }\n\n /**\n *\n *\n * @param {*} context\n * @return\n * @memberof RetinalEncoder\n */\n setCommonDomain (context) {\n const { domains, axes, encoding } = context;\n\n Object.entries(encoding).forEach((enc) => {\n if (enc[1] && enc[1].field) {\n const encType = enc[0];\n const field = enc[1].field;\n\n if (field) {\n axes[encType].forEach((axis) => {\n const domain = domains[field];\n !enc[1].domain && axis.updateDomain(domain);\n });\n }\n }\n });\n return axes;\n }\n}\n","import { Store, dataSelect, FieldType } from 'muze-utils';\nimport { DATA_UPDATE_COUNTER } from '../enums/defaults';\nimport { Variable } from '../variable';\nimport { PolarEncoder, CartesianEncoder } from '../encoder';\nimport {\n DIMENSION,\n MEASURE,\n ORDINAL,\n LINEAR,\n ROW,\n COLUMN,\n COL,\n LEFT,\n RIGHT,\n TOP,\n BOTTOM,\n COLOR,\n SIZE,\n TEMPORAL,\n SHAPE,\n INTERACTION,\n GRID_LINES,\n GRID_BANDS,\n HEADER,\n FACET,\n X,\n Y,\n POLAR\n} from '../enums/constants';\n\n/**\n * Creates an instance of a store which contains the arguments to make the class reactive\n *\n * @return {Object} instance of store\n * @memberof VisualGroup\n */\nexport const initStore = () => new Store({\n [DATA_UPDATE_COUNTER]: DATA_UPDATE_COUNTER\n});\n\n/**\n *\n *\n * @param {*} arr\n */\nexport const isDistributionEqual = arr => [...arr[0], ...arr[1]].reduce((isEqual, row) => {\n const rowType = row.type();\n\n if (rowType === MEASURE || rowType === TEMPORAL) {\n isEqual = true;\n }\n return isEqual;\n}, false);\n\n/**\n *\n *\n */\nexport const initializeCacheMaps = () => ({\n cellMap: new Map(),\n xAxesMap: new Map(),\n yAxesMap: new Map(),\n entryCellMap: new Map(),\n exitCellMap: new Map()\n});\n\n/**\n *\n *\n * @param {*} axisName\n * @param {*} id\n */\nexport const getAxisKey = (axisName, id, scaleType) => `${axisName}-axis-${id}-${scaleType}`;\n\n/**\n *\n *\n * @param {*} rowId\n * @param {*} columnId\n */\nexport const getCellKey = (rowId, columnId) => `cell-${rowId}-${columnId}`;\n\n/**\n *\n *\n * @param {*} config\n * @return\n */\nexport const extractUnitConfig = (config) => {\n const unitConfig = {};\n const attrNames = [INTERACTION, GRID_LINES, GRID_BANDS];\n\n attrNames.forEach((attr) => {\n if (config[attr] !== undefined) {\n unitConfig[attr] = config[attr];\n }\n });\n return unitConfig;\n};\n\n/**\n *\n *\n * @param {*} headers\n * @param {*} index\n * @param {*} rowLength\n * @return\n * @memberof MatrixResolver\n */\nexport const getHeaderText = (headers, index, rowLength) => {\n let header = '';\n\n if (index === rowLength - 1 && headers.length > rowLength) {\n for (let i = index; i < headers.length - 1; i++) {\n header += `${headers[i].toString()} / `;\n }\n header += headers[headers.length - 1].toString();\n return header;\n } else if (headers[index]) {\n return headers[index].toString();\n }\n return '';\n};\n\n/**\n *\n *\n * @param {*} fields\n * @param {*} fieldHeaders\n * @param {*} TextCell\n * @param {*} labelManager\n * @return\n */\nexport const headerCreator = (fields, fieldHeaders, TextCell, labelManager) => {\n const headers = fields.length > 0 ? fields[0].map((label, i) => new TextCell({ type: HEADER }, { labelManager })\n .source(getHeaderText(fieldHeaders, i, fields[0].length))) : [];\n return headers;\n};\n\n/**\n *\n *\n * @param {*} variable\n * @param {*} allFields\n * @return\n */\nexport const findInGroup = (variable, allFields) => {\n let channel = null;\n\n [COLOR, SIZE, SHAPE].forEach((e) => {\n if (this.store.get(e) && variable === this.store.get(e)[0]) {\n channel = e;\n }\n });\n\n if (channel) {\n return { channel };\n }\n [ROW, COL].forEach((facetType) => {\n allFields[`${facetType}Facets`].forEach((e) => {\n if (e.toString() === variable) {\n channel = { channel: FACET, type: facetType === COL ? COLUMN : ROW };\n }\n });\n });\n\n if (channel) {\n return channel;\n }\n\n [ROW, COL].forEach((projType) => {\n allFields[`${projType}Projections`].forEach((e) => {\n e.forEach((m) => {\n if (m.toString() === variable) {\n channel = projType === COL ? X : Y;\n }\n });\n });\n });\n\n if (channel) {\n return { channel };\n }\n return null;\n};\n\n/**\n *\n *\n * @param {*} datamodel\n * @param {*} field\n */\nexport const getAxisType = (fieldsConfig, field) => {\n let fieldType = ORDINAL;\n\n if (field && fieldsConfig[field].def.type !== DIMENSION) {\n fieldType = LINEAR;\n }\n return fieldType;\n};\n\n/**\n *\n *\n * @param {*} datamodel\n * @param {*} fieldName\n * @return\n */\nexport const retriveDomainFromData = (datamodel, fieldName) => {\n const field = datamodel.getFieldspace().fields.find(d => d._ref.name === fieldName.toString());\n return field.domain();\n};\n\n/**\n *\n *\n * @memberof MatrixResolver\n */\nexport const mutateAxesFromMap = (cacheMaps, axes) => {\n let xAxes = null;\n let yAxes = null;\n const {\n xAxesMap,\n yAxesMap\n } = cacheMaps;\n const {\n x: xAxisSet,\n y: yAxisSet\n } = axes;\n\n xAxisSet && xAxisSet.forEach((axisId) => {\n const xAxis = xAxesMap.get(axisId);\n xAxes = xAxes || [];\n xAxes.push(xAxis);\n });\n\n yAxisSet && yAxisSet.forEach((axisId) => {\n const yAxis = yAxesMap.get(axisId);\n yAxes = yAxes || [];\n yAxes.push(yAxis);\n });\n\n return {\n xAxes, yAxes\n };\n};\n\n/**\n *\n *\n * @param {*} layers\n * @return\n */\nexport const getEncoder = (layers) => {\n let encoder = new CartesianEncoder();\n\n if (layers) {\n // Figuring out the kind of layers the group will have\n encoder = layers.every(e => e.mark === 'arc') ? new PolarEncoder() : encoder;\n }\n return encoder;\n};\n\n/**\n *\n *\n * @param {*} type\n * @param {*} fields\n * @param {*} userAxisFromConfig\n * @return\n */\nexport const getHeaderAxisFrom = (type, fields, userAxisFromConfig) => {\n let axisFrom = userAxisFromConfig[type];\n let headerFrom = '';\n const options = type === ROW ? [LEFT, RIGHT] : [BOTTOM, TOP];\n const [firstField, secondField] = fields;\n const firstFieldType = i => (firstField.length ? firstField[i].type() : null);\n const secondFieldType = i => (secondField.length ? secondField[i].type() : null);\n\n if (firstFieldType(firstField.length - 1) === DIMENSION && secondFieldType(0) === DIMENSION) {\n headerFrom = axisFrom ? options[1 - options.indexOf(axisFrom)] : options[1];\n\n if (type === COLUMN && (firstField[firstField.length - 1].toString() === secondField[0].toString())) {\n axisFrom = TOP;\n } else {\n axisFrom = axisFrom || options[0];\n }\n } else if (secondFieldType(secondField.length - 1) === DIMENSION) {\n headerFrom = type === ROW ? RIGHT : BOTTOM;\n axisFrom = type === ROW ? RIGHT : BOTTOM;\n } else {\n headerFrom = type === ROW ? LEFT : TOP;\n axisFrom = type === ROW ? LEFT : TOP;\n }\n if (firstFieldType(firstField.length - 1) === MEASURE && secondFieldType(0) === MEASURE) {\n axisFrom = type === ROW ? LEFT : TOP;\n } else if (secondFieldType(0) === MEASURE) {\n axisFrom = type === ROW ? RIGHT : BOTTOM;\n } else if (firstFieldType(firstField.length - 1) === MEASURE) {\n axisFrom = type === ROW ? LEFT : TOP;\n }\n return [headerFrom, axisFrom];\n};\n\n/**\n *\n *\n * @param {*} type\n * @param {*} fields\n * @param {*} layers\n * @return\n * @memberof MatrixResolver\n */\nexport const setFacetsAndProjections = (context, fieldInfo, encoder) => {\n const {\n fields,\n type\n } = fieldInfo;\n const { facets, projections } = encoder.simpleEncoder.getFacetsAndProjections(fields, type);\n\n context.facets({ [`${type}Facets`]: facets });\n context.projections({ [`${type}Projections`]: projections });\n\n return { facets, projections, fields };\n};\n\n/**\n * Creates a selection set from a data set with corresponding attributes\n *\n * @export\n * @param {Selection} sel contains previous selection\n * @param {Object} appendObj Object to be appended\n * @param {Array} data Data based on which the selection is entered/updated/removed\n * @param {Object} [attrs={}] Attributes to be set on the data\n * @return {Selection} Merged selection\n */\nexport const createSelection = (sel, appendObj, data, idFn) => {\n let selection = sel || dataSelect([]);\n\n selection = selection.data(data, idFn);\n\n const enter = selection.enter().append(appendObj);\n const mergedSelection = enter.merge(selection);\n\n selection.exit() && selection.exit().remove();\n return mergedSelection;\n};\n\nconst getRowBorders = (left, right) => {\n const borders = {};\n borders.top = false;\n borders.bottom = false;\n if (left.length > 1 || right.length > 1) {\n borders.top = true;\n borders.bottom = true;\n }\n return borders;\n};\n\nconst getColumnsBorders = (top, bottom) => {\n const borders = {};\n borders.left = false;\n borders.right = false;\n if (top.length || bottom.length) {\n if ((top[0] && top[0].length > 1) || (bottom[0] && bottom[0].length > 1)) {\n borders.left = true;\n borders.right = true;\n }\n }\n return borders;\n};\n\nconst getValueBorders = (rows, columns) => {\n const borders = { top: true, left: true, bottom: true, right: true };\n const borderTypeRow = [LEFT, RIGHT];\n const borderTypeCol = [TOP, BOTTOM];\n rows.forEach((e, i) => {\n if (e[0] && e[0].length) {\n borders[borderTypeRow[i]] = true;\n } else {\n borders[borderTypeRow[i]] = false;\n }\n });\n columns.forEach((e, i) => {\n if (e.length) {\n borders[borderTypeCol[i]] = true;\n } else {\n borders[borderTypeCol[i]] = false;\n }\n });\n\n return borders;\n};\n\nexport const getBorders = (matrices, encoder) => {\n let showRowBorders = { top: false, bottom: false };\n let showColBorders = { left: false, right: false };\n let showValueBorders = { top: false, bottom: false, left: false, right: false };\n const {\n rows,\n columns,\n values: valueMatrix\n } = matrices;\n const [leftRows, rightRows] = rows;\n const [topColumns, bottomColumns] = columns;\n const {\n rowDimensions,\n columnDimensions,\n rowTemporalFields,\n columnTemporalFields,\n columnMeasures,\n rowMeasures\n } = encoder.fieldInfo();\n const allDimensionLength = rowDimensions.length + columnDimensions.length;\n const allMeasuresLength = rowMeasures.length + columnMeasures.length;\n const allTemporalFieldsLength = rowTemporalFields.length + columnTemporalFields.length;\n\n if (encoder.constructor.type() === POLAR) {\n if (!allDimensionLength) {\n return { showRowBorders, showColBorders, showValueBorders };\n }\n } else if (!allMeasuresLength && !allTemporalFieldsLength && allDimensionLength <= 2) {\n return { showRowBorders, showColBorders, showValueBorders };\n }\n\n showRowBorders = getRowBorders(leftRows, rightRows);\n showColBorders = getColumnsBorders(topColumns, bottomColumns);\n showValueBorders = getValueBorders([leftRows, rightRows], [topColumns, bottomColumns]);\n\n if (valueMatrix.length > 1) {\n showValueBorders.top = true;\n showValueBorders.bottom = true;\n }\n if (valueMatrix.length && valueMatrix[0].length > 1) {\n showValueBorders.left = true;\n showValueBorders.right = true;\n }\n return { showRowBorders, showColBorders, showValueBorders };\n};\n\nexport const getFieldsFromSuppliedLayers = (suppliedLayerConfig, fieldsConfig) => {\n let fields = [];\n const encodingArr = suppliedLayerConfig.map(conf => (conf.encoding || {}));\n fields = [...fields, [].concat(...encodingArr.map(enc => Object.values(enc).map(d => d.field)))];\n fields = fields.filter(field => fieldsConfig[field] && fieldsConfig[field].def.type === FieldType.DIMENSION);\n return fields;\n};\n\nexport const extractFields = (facetsAndProjections, layerFields) => {\n const fields = Object.values(facetsAndProjections).map((arr) => {\n const flattenArray = [].concat(...arr);\n return [].concat(...flattenArray.map((field) => {\n if (field instanceof Variable) {\n return field.getMembers();\n }\n return field;\n }));\n });\n return [].concat(...fields, ...layerFields);\n};\n","/**\n * This file exports variables that are used as defaults for the crosstab group.\n */\nexport const DATA_UPDATE_COUNTER = 0;\n\nexport const DEFAULT_LAYER_TYPE = 'cartesian';\n\n","import Selection from './selection';\n/**\n * This function applies a selection operation on a data array.\n *\n * @export\n * @param {Array} [data=[]] The data array to be observed.\n * @return {Selection} Instance of a selection.\n */\nexport default function dataSelect (data = []) {\n return new Selection(data);\n}\n\n","import { BEHAVIOURS, ACTIONS } from '@chartshq/muze-firebolt';\n\nexport const actionBehaviourMap = {\n [ACTIONS.DRAG]: {\n behaviours: [BEHAVIOURS.BRUSH],\n touch: false\n },\n [ACTIONS.HOVER]: {\n behaviours: [BEHAVIOURS.HIGHLIGHT]\n },\n [ACTIONS.LONGTOUCH]: {\n behaviours: [BEHAVIOURS.SELECT],\n touch: true\n },\n [ACTIONS.TOUCHDRAG]: {\n behaviours: [BEHAVIOURS.BRUSH],\n touch: true\n },\n [ACTIONS.CLICK]: {\n behaviours: [BEHAVIOURS.SELECT],\n touch: false\n }\n};\n\n","export const CONFIG = 'config';\nexport const DATA = 'data';\nexport const AXES = 'axes';\nexport const LAYERDEFS = 'layerDef';\nexport const WIDTH = 'width';\nexport const HEIGHT = 'height';\nexport const MOUNT = 'mount';\nexport const primaryXAxisUpdated = 'primaryXAxisUpdated';\nexport const primaryYAxisUpdated = 'primaryYAxisUpdated';\nexport const secondaryXAxisUpdated = 'secondaryXAxisUpdated';\nexport const secondaryYAxisUpdated = 'secondaryYAxisUpdated';\nexport const TRANSFORM = 'transform';\nexport const DATADOMAIN = 'dataDomain';\nexport const LAYERSCREATED = 'layersCreated';\nexport const FIELDS = 'fields';\nexport const TIMEDIFFS = 'timeDiffs';\nexport const LAYERAXISINDEX = 'layerAxisIndex';\n\n","import { FieldType, getDependencyOrder, getObjProp,\n defaultValue, objectIterator, unionDomain, makeElement,\n DimensionSubtype, getClosestIndexOf, toArray } from 'muze-utils';\nimport { layerFactory } from '@chartshq/visual-layer';\nimport { TIMEDIFFS } from '../enums/reactive-props';\n\nexport const getDimensionMeasureMap = (layers, fieldsConfig) => {\n const retinalEncodingsAndMeasures = {};\n\n layers.forEach((layer) => {\n const {\n colorField,\n sizeField,\n shapeField,\n xField,\n yField\n } = layer.encodingFieldsInf();\n const measures = [xField, yField].filter(field => fieldsConfig[field] && fieldsConfig[field].def.type ===\n FieldType.MEASURE);\n [colorField, sizeField, shapeField].forEach((field) => {\n if (fieldsConfig[field] && fieldsConfig[field].def.type === FieldType.DIMENSION) {\n !retinalEncodingsAndMeasures[field] && (retinalEncodingsAndMeasures[field] = []);\n retinalEncodingsAndMeasures[field].push(...measures);\n }\n });\n });\n\n for (const key in retinalEncodingsAndMeasures) {\n if ({}.hasOwnProperty.call(retinalEncodingsAndMeasures, key)) {\n retinalEncodingsAndMeasures[key] = [...new Set(retinalEncodingsAndMeasures[key])];\n }\n }\n return retinalEncodingsAndMeasures;\n};\n\nexport const transformDataModels = (transform, dataModel) => {\n const dataModels = {};\n for (const key in transform) {\n if ({}.hasOwnProperty.call(transform, key)) {\n const transformVal = transform[key];\n dataModels[key] = transformVal(dataModel);\n }\n }\n\n return dataModels;\n};\n\nexport const getLayerFromDef = (context, definition, existingLayer) => {\n let instances = existingLayer;\n const dependencies = context._layerDeps;\n if (!existingLayer) {\n instances = layerFactory.getLayerInstance(definition);\n }\n const layers = {};\n const instanceArr = toArray(instances);\n definition = toArray(definition);\n definition.reduce((acc, def, idx) => {\n const instance = instanceArr[idx];\n instance.config(def);\n instance.dependencies(dependencies);\n if (def.name) {\n instance.alias(def.name);\n }\n layers[instance.alias()] = instance;\n return acc;\n }, {});\n return layers;\n};\n\nexport const resolveEncodingTransform = (layerInst, store) => {\n const encodingTransform = layerInst.config().encodingTransform || {};\n const resolvable = encodingTransform.resolvable;\n let depArr = [];\n if (resolvable) {\n const resolved = resolvable(store);\n depArr = resolved.depArr;\n layerInst.encodingTransform(resolved.fn);\n } else if (encodingTransform instanceof Function) {\n layerInst.encodingTransform(encodingTransform);\n }\n return depArr;\n};\n\nexport const createLayers = (context, layerDefinitions) => {\n const layersMap = context._layersMap;\n const markSet = {};\n const store = {\n layers: {},\n components: {\n unit: context\n }\n };\n let layerIndex = 0;\n let layers = layerDefinitions.sort((a, b) => a.order - b.order).reduce((layersArr, layerDef, i) => {\n const mark = layerDef.mark;\n const definition = layerDef.def;\n const markId = `${mark}-${i}`;\n const defArr = toArray(definition);\n defArr.forEach((def) => {\n def.order = layerDef.order + layerIndex;\n });\n layerIndex += defArr.length;\n const instances = getLayerFromDef(context, definition, layersMap[markId]);\n store.layers = Object.assign(store.layers, instances);\n const instanceValues = Object.values(instances);\n layersArr = layersArr.concat(...instanceValues);\n layersMap[markId] = instanceValues;\n markSet[markId] = markId;\n return layersArr;\n }, []);\n store.unit = context;\n const layerdeps = {};\n layers.forEach((layer) => {\n const depArr = resolveEncodingTransform(layer, store);\n layerdeps[layer.alias()] = depArr;\n });\n\n const order = getDependencyOrder(layerdeps);\n layers = order.map(name => store.layers[name]);\n for (const key in layersMap) {\n if (!(key in markSet)) {\n layersMap[key].forEach(layer => layer.remove());\n delete layersMap[key];\n }\n }\n return layers;\n};\n\nexport const attachDataToLayers = (layers, dm, transformedDataModels) => {\n layers.forEach((layer) => {\n const dataSource = layer.config().source;\n const dataModel = dataSource instanceof Function ? dataSource(dm) : (transformedDataModels[dataSource] || dm);\n layer.data(dataModel);\n });\n};\n\nexport const attachAxisToLayers = (axes, layers, layerAxisIndex) => {\n layers.forEach((layer) => {\n const layerId = layer.id();\n const axesObj = {};\n\n objectIterator(axes, (key) => {\n const axisInf = layerAxisIndex[layerId];\n if (axisInf) {\n axes[key] && (axesObj[key] = axes[key][axisInf[key] || 0]);\n }\n });\n Object.keys(axesObj).length && layer.axes(axesObj);\n });\n};\n\nexport const getLayerAxisIndex = (layers, fields) => {\n const layerAxisIndex = {};\n layers.forEach((layer) => {\n const { axis, encoding } = layer.config();\n const id = layer.id();\n ['x', 'y'].forEach((type) => {\n let index;\n const field = defaultValue(getObjProp(axis, type), encoding[type] && encoding[type].field);\n if (fields[type]) {\n index = fields[type].findIndex(fieldInst => fieldInst.getMembers().indexOf(field) !== -1);\n } else {\n index = 0;\n }\n !layerAxisIndex[id] && (layerAxisIndex[id] = {});\n layerAxisIndex[id][type] = index;\n });\n });\n return layerAxisIndex;\n};\n\nexport const unionDomainFromLayers = (layers, axisFields, layerAxisIndex, fieldsConfig) => {\n let domains = {};\n layers = layers.filter(layer => layer.getDataDomain() !== null);\n layers.forEach((layer) => {\n let domainValues = {};\n const config = layer.config();\n const encoding = config.encoding;\n const layerDomain = layer.getDataDomain();\n const layerId = layer.id();\n\n if (layerDomain !== null && config.calculateDomain !== false) {\n domainValues = Object.entries(layerDomain);\n if (layerDomain.x || layerDomain.y) {\n domains = domainValues.reduce((fieldDomain, domain) => {\n const encodingType = domain[0];\n const field = encoding[encodingType].field;\n const axisIndex = layerAxisIndex[layerId][encodingType];\n const fieldStr = `${axisFields[encodingType][axisIndex]}`;\n fieldDomain[fieldStr] = fieldDomain[fieldStr] || [];\n fieldDomain[fieldStr] = unionDomain(([fieldDomain[fieldStr], domain[1]]),\n fieldsConfig[field].def.subtype ? fieldsConfig[field].def.subtype :\n fieldsConfig[field].def.type);\n\n return fieldDomain;\n }, domains);\n } else { domains = domainValues; }\n }\n });\n return domains;\n};\n\nexport const renderLayers = (context, container, layers, measurement) => {\n context._lifeCycleManager.notify({ client: layers, action: 'beforedraw', formalName: 'layer' });\n const config = context.config();\n const classPrefix = config.classPrefix;\n const orderedLayers = context.layers().sort((a, b) => a.config().order - b.config().order);\n const layerParentGroup = makeElement(container, 'g', [1], `${classPrefix}-layer-group`);\n makeElement(layerParentGroup, 'g', orderedLayers, null, {\n update: (group, layer) => {\n layer.measurement(measurement);\n layer.dataProps({\n timeDiffs: context.store().get(TIMEDIFFS)\n });\n layer.config().render !== false && layer.mount(group.node());\n }\n });\n return this;\n};\n\nexport const getNearestDimensionalValue = (context, position) => {\n const fields = context.fields();\n if (!fields.x.length || !fields.y.length) {\n return null;\n }\n const data = context.data();\n const axes = context.axes();\n const fieldsConfig = data.getFieldsConfig();\n const xField = getObjProp(fields, 'x', 0).getMembers()[0];\n const yField = getObjProp(fields, 'y', 0).getMembers()[0];\n const xFieldType = fieldsConfig[xField] && (fieldsConfig[xField].def.subtype ? fieldsConfig[xField].def.subtype :\n fieldsConfig[xField].def.type);\n const yFieldType = fieldsConfig[yField] && (fieldsConfig[yField].def.subtype ? fieldsConfig[yField].def.subtype :\n fieldsConfig[yField].def.type);\n\n const entryVal = [['x', xFieldType, xField], ['y', yFieldType, yField]].find(entry =>\n entry[1] === DimensionSubtype.CATEGORICAL || entry[1] === DimensionSubtype.TEMPORAL);\n\n if (!entryVal || (xFieldType !== FieldType.MEASURE && yFieldType !== FieldType.MEASURE)) {\n return null;\n }\n const field = entryVal[2];\n const index = fieldsConfig[field].index;\n let key = axes[entryVal[0]][0].invert(position[entryVal[0]]);\n if (entryVal[1] === DimensionSubtype.TEMPORAL) {\n const filterData = [...new Set(data.getData().data.map(d => d[index]))];\n key = filterData[getClosestIndexOf(filterData, key)];\n }\n\n return key !== undefined ? [[field], [key]] : null;\n};\n\nexport const getLayersBy = (layers, searchBy, value) => layers.filter((layer) => {\n const name = searchBy === 'type' ? layer.constructor.formalName() : layer.alias();\n return name === value;\n});\n\nexport const removeLayersBy = (layers, searchBy, value) => {\n layers.filter((inst) => {\n const name = searchBy === 'type' ? inst.config().mark : inst.alias();\n if (name === value) {\n inst.remove();\n return false;\n }\n return true;\n });\n};\n\nexport const createSideEffectGroup = (container, className) => makeElement(container, 'g', [1], className).node();\n\nexport const getAdjustedDomain = (max, min) => {\n const y1ratio = max[0] / (max[0] - min[0]);\n const y2ratio = max[1] / (max[1] - min[1]);\n\n // adjust min/max values for positive negative values zero line etc\n let allSameSign = false;\n\n // if all numbers are positive set floor to zero\n if (min[0] > 0 && min[1] > 0 && min[1] > 0 && max[1] > 0) {\n allSameSign = true;\n min[0] = 0;\n min[1] = 0;\n }\n\n // if all numbers are negative set ceiling to zero\n if (min[0] < 0 && min[1] < 0 && min[1] < 0 && max[1] < 0) {\n allSameSign = true;\n max[0] = 0;\n max[1] = 0;\n }\n\n // align zero line if necessary\n if (!allSameSign && y1ratio !== y2ratio) {\n if (y1ratio < y2ratio) {\n // adjust min[1]\n min[1] = min[0] / max[0] * max[1];\n } else {\n // adjust min[0]\n min[0] = min[1] / max[1] * max[0];\n }\n }\n return {\n max,\n min\n };\n};\n","import { getObjProp, defaultValue, makeElement, DimensionSubtype, DataModel } from 'muze-utils';\nimport { ScaleType } from '@chartshq/muze-axis';\nimport { layerFactory } from '@chartshq/visual-layer';\nimport { GRIDLINEPARENTGROUPCLASS, GRIDBANDPARENTGROUPCLASS } from '../enums/constants';\nimport { TIMEDIFFS } from '../enums/reactive-props';\n\nconst LINEAR = ScaleType.LINEAR;\n\nconst getLayerDefinition = (context, axes, type, orientation) => {\n let encoding;\n const config = context.config();\n const { classPrefix, gridLines, gridBands } = config;\n const gridLineColor = gridLines.color;\n const zeroLineColor = gridLines.zeroLineColor;\n const defClassName = type === 'band' ? gridBands.defClassName : gridLines.defClassName;\n const gridBandColor = gridBands[orientation].color;\n const axis = axes[orientation][0];\n const isLinearScale = axis.constructor.type() === LINEAR;\n\n if (type === 'band' && isLinearScale) {\n encoding = {\n [orientation]: `${orientation}value`,\n [`${orientation}0`]: `${orientation}value0`\n };\n } else {\n encoding = {\n [orientation]: isLinearScale ? `${orientation}value` : `${orientation}dim`\n };\n }\n encoding.color = {\n value: (data, i) => {\n const isNegativeDomain = isLinearScale && axis.domain()[0] < 0;\n if (type === 'band') {\n return gridBandColor[i % 2];\n }\n return isNegativeDomain && data[orientation] === 0 ? zeroLineColor : gridLineColor;\n }\n };\n\n return {\n definition: {\n defClassName: `${defClassName}-${orientation}`,\n className: config.className,\n individualClassName: (data, i) => {\n let className;\n const isNegativeDomain = isLinearScale && axis.domain()[0] < 0;\n if (isNegativeDomain && data.y === 0 && type !== 'band') {\n className = `${classPrefix}-axis-zero-line`;\n } else {\n className = `${classPrefix}-grid-${type}-${orientation}-${i % 2}`;\n }\n return className;\n },\n [`pad${orientation.toUpperCase()}`]: type === 'band' ? 0 : undefined,\n encoding\n },\n axes: {\n [orientation]: axis\n },\n interactive: false\n };\n};\n\nconst getDefaultVisibilty = (show, axis) => {\n if (axis.constructor.type() === LINEAR) {\n return show;\n }\n return false;\n};\n\nexport const getGridLayerDefinitions = (context, config, type) => ['x', 'y'].map((axisType) => {\n const show = defaultValue(config[axisType] && config[axisType].show,\n getDefaultVisibilty(config.show, context.axes()[axisType][0]));\n\n return show ? getLayerDefinition(context, context.axes(), type, axisType) : undefined;\n}).filter(d => d !== undefined);\n\nexport const getGridLayerData = (axes, fields, fieldsConfig) => {\n const gridData = {};\n ['x', 'y'].forEach((type) => {\n let ticks = axes[type][0].getTickValues();\n const subtype = getObjProp(fieldsConfig, getObjProp(fields, type, 0).getMembers()[0], 'def', 'subtype');\n const jsonData = [];\n const schema = [\n {\n name: 'yvalue',\n type: 'measure'\n }, {\n name: 'xvalue',\n type: 'measure'\n },\n {\n name: 'yvalue0',\n type: 'measure'\n }, {\n name: 'xvalue0',\n type: 'measure'\n }, {\n name: 'xdim',\n type: 'dimension',\n subtype\n }, {\n name: 'ydim',\n type: 'dimension',\n subtype\n }\n ];\n const len = Math.max(ticks.length);\n ticks = subtype === DimensionSubtype.TEMPORAL ? ticks.map(d => d.getTime()) : ticks;\n for (let i = 0; i < len; i += 1) {\n jsonData.push({\n [`${type}value`]: ticks[i],\n [`${type}value0`]: ticks[i + 1],\n [`${type}dim`]: ticks[i],\n [`${type}dim`]: ticks[i]\n });\n }\n gridData[type] = new DataModel(jsonData, schema);\n });\n return gridData;\n};\n\nexport const createGridLineLayer = (context, data) => {\n const vuConf = context.config();\n const dependencies = context._layerDeps;\n const measurement = {\n width: context.width(),\n height: context.height()\n };\n\n ['band', 'line'].forEach((type) => {\n let mark;\n let config;\n let instances;\n if (type === 'band') {\n mark = 'bar';\n config = vuConf.gridBands;\n instances = context._gridbands;\n } else {\n mark = 'tick';\n config = vuConf.gridLines;\n instances = context._gridlines;\n }\n const definitions = getGridLayerDefinitions(context, config, type);\n\n definitions.forEach((atomicDef, i) => {\n let layer;\n const definition = atomicDef.definition;\n const axesObj = atomicDef.axes;\n const sConf = layerFactory.getSerializedConf(mark, definition);\n sConf.mark = mark;\n if (!instances[i]) {\n layer = layerFactory.getLayerInstance(sConf);\n layer.dependencies(dependencies);\n } else {\n layer = instances[i];\n }\n\n layer.config(sConf)\n .measurement(measurement)\n .data(axesObj.y ? data.y : data.x)\n .dataProps({\n timeDiffs: context.store().get(TIMEDIFFS)\n })\n .axes(axesObj);\n instances[i] = layer;\n });\n });\n};\n\nexport const renderGridLineLayers = (context, container) => {\n const axes = context.axes();\n const config = context.config();\n const classPrefix = config.classPrefix;\n\n if (axes && ((axes.x && axes.x.length) || (axes.y && axes.y.length))) {\n const gridBandData = getGridLayerData(axes, context.fields(), context.data().getFieldsConfig());\n createGridLineLayer(context, gridBandData);\n [[context._gridlines, `${classPrefix}-${GRIDLINEPARENTGROUPCLASS}`],\n [context._gridbands, `${classPrefix}-${GRIDBANDPARENTGROUPCLASS}`]].forEach((entry) => {\n const [instances, parentGroupClass] = entry;\n const mountPoint = makeElement(container, 'g', [1], `.${parentGroupClass}`);\n const className = `${parentGroupClass}-group`;\n makeElement(mountPoint, 'g', instances, `.${className}`, {\n update: (group, instance) => {\n instance.mount(group.node());\n }\n });\n });\n }\n};\n","import { CLASSPREFIX, CONSOLIDATED } from './enums/constants';\n\n/**\n * Returns the default configuration of the visual unit\n * @return {Object} Default configuration of visual unit\n */\nexport const defaultConfig = {\n classPrefix: CLASSPREFIX,\n defClassName: 'visual-unit',\n className: '',\n trackerClassName: 'visual-unit-tracker',\n gridLines: {\n defClassName: 'axis-grid-lines',\n className: '',\n show: true,\n color: '#efefef',\n zeroLineColor: '#b6b6b6'\n },\n gridBands: {\n defClassName: 'axis-grid-bands',\n className: '',\n show: false,\n y: {\n color: ['#fff', '#fbfbfb']\n },\n x: {\n color: ['#fff', '#f9f9f9']\n }\n },\n arcLayerClassName: 'layer-arc',\n interaction: {\n tooltip: {\n mode: CONSOLIDATED\n }\n },\n sideEffectClassName: 'side-effect-container'\n};\n","export const CLASSPREFIX = 'muze';\nexport const IDFIELD = '__id__';\nexport const GRIDLINEPARENTGROUPCLASS = 'grid-lines';\nexport const GRIDBANDPARENTGROUPCLASS = 'grid-bands';\nexport const CONSOLIDATED = 'consolidated';\nexport const FRAGMENTED = 'fragmented';\nexport const FACET_BY_FIELDS = 'facetByFields';\nexport const RETINAL_FIELDS = 'retinalFields';\nexport const PARENT_ALIAS = 'parentAlias';\nexport const LAYERS = 'layers';\nexport const CACHED_DATA = 'cachedData';\nexport const STORE = 'store';\n\n","import { mergeRecursive } from 'muze-utils';\nimport { defaultConfig } from './default-config';\nimport { CONFIG, LAYERDEFS, AXES, WIDTH, HEIGHT, MOUNT, TRANSFORM, FIELDS, DATA } from './enums/reactive-props';\n\nexport default {\n [CONFIG]: {\n value: null,\n meta: {\n sanitization: (config, oldConfig) => (\n mergeRecursive(oldConfig || mergeRecursive({}, defaultConfig), config)\n )\n }\n },\n [LAYERDEFS]: {\n value: null\n },\n [AXES]: {\n value: null,\n meta: {\n sanitization: (axes, prevAxes) => Object.assign(prevAxes || {}, axes)\n }\n },\n [WIDTH]: {\n value: null\n },\n [HEIGHT]: {\n value: null\n },\n [MOUNT]: {\n value: null\n },\n [TRANSFORM]: {\n value: null\n },\n [FIELDS]: {\n value: null\n },\n [DATA]: {\n value: null,\n meta: {\n preset: (data, context) => {\n if (context._cache) {\n const cachedData = context.cachedData();\n context.cachedData([...cachedData, data]);\n } else {\n const oldData = context.data();\n oldData && oldData.unsubscribe('propagation');\n context.cachedData([data]);\n }\n }\n }\n }\n};\n","import { DimensionSubtype } from 'muze-utils';\nimport * as PROPS from './enums/reactive-props';\nimport {\n transformDataModels,\n getDimensionMeasureMap,\n createLayers,\n attachDataToLayers,\n attachAxisToLayers,\n unionDomainFromLayers,\n getLayerAxisIndex\n} from './helper';\n\nconst axisMap = {\n 0: 'primary',\n 1: 'secondary'\n};\nconst axisProps = [PROPS.primaryXAxisUpdated, PROPS.secondaryXAxisUpdated, PROPS.primaryYAxisUpdated,\n PROPS.secondaryYAxisUpdated];\n\nexport const listenerMap = context => ([\n {\n type: 'registerImmediateListener',\n props: [PROPS.AXES],\n listener: ([, axes]) => {\n ['x', 'y'].forEach((type) => {\n const axesArr = axes[type] || [];\n axesArr.forEach((axis, i) => {\n axis.on('update', () => {\n context.store().commit(PROPS[`${axisMap[i]}${axis.isReverse() ? 'Y' : 'X'}AxisUpdated`], true);\n });\n });\n });\n }\n },\n {\n type: 'registerImmediateListener',\n props: [PROPS.CONFIG],\n listener: ([, config]) => {\n config && context.firebolt().config(config.interaction);\n }\n },\n {\n type: 'computed',\n props: [PROPS.LAYERSCREATED],\n listener: fetch => fetch(PROPS.LAYERDEFS, PROPS.FIELDS, (layerDefs, fields) => {\n const layerDefsValue = layerDefs.value;\n const fieldsVal = fields.value;\n if (layerDefsValue && fieldsVal) {\n const layers = createLayers(context, layerDefs.value);\n context.layers(layers);\n context._layerAxisIndex = getLayerAxisIndex(context.layers(), fieldsVal);\n context._lifeCycleManager.notify({ client: layers, action: 'initialized', formalName: 'layer' });\n return true;\n }\n return null;\n })\n },\n {\n type: 'computed',\n props: [PROPS.TIMEDIFFS],\n listener: fetch => fetch(PROPS.DATA, PROPS.FIELDS, PROPS.AXES, (data, fields, axes) => {\n const dataModel = data.value;\n const axisFields = fields.value;\n const axesObj = axes.value;\n if (dataModel && axisFields && axesObj) {\n const timeDiffs = {};\n const timeDiffsByField = {};\n ['x', 'y'].forEach((type) => {\n const field = axisFields[type][0];\n if (field && field.subtype() === DimensionSubtype.TEMPORAL) {\n timeDiffs[type] = field.getMinDiff();\n timeDiffsByField[field] = timeDiffs[type];\n axesObj[type].forEach(axis => axis.minDiff(timeDiffs[type]));\n }\n });\n context._timeDiffsByField = timeDiffsByField;\n return timeDiffs;\n }\n return null;\n })\n },\n {\n type: 'computed',\n props: [PROPS.DATADOMAIN],\n listener: fetch => fetch(PROPS.DATA, PROPS.LAYERSCREATED, PROPS.AXES, PROPS.TRANSFORM,\n (dataModel, layersCreated, axes, transform) => {\n const dataModelVal = dataModel.value;\n const layerAxisIndexVal = context._layerAxisIndex;\n const axesVal = axes.value;\n if (dataModelVal && layersCreated.value && axesVal && layerAxisIndexVal) {\n const layers = context.layers();\n const dataModels = transformDataModels(transform.value, dataModelVal);\n context._transformedDataModels = dataModels;\n context._lifeCycleManager.notify({ client: layers, action: 'beforeupdate', formalName: 'layer' });\n attachDataToLayers(layers, dataModelVal, context._transformedDataModels);\n context._dimensionMeasureMap = getDimensionMeasureMap(layers,\n dataModelVal.getFieldsConfig(), context.retinalFields());\n attachAxisToLayers(axesVal, layers, layerAxisIndexVal);\n context._lifeCycleManager.notify({ client: layers, action: 'updated', formalName: 'layer' });\n return unionDomainFromLayers(layers, context.fields(),\n layerAxisIndexVal, dataModelVal.getFieldsConfig());\n }\n return null;\n })\n },\n {\n type: 'registerImmediateListener',\n props: [PROPS.DATADOMAIN],\n listener: ([, dataDomain]) => {\n dataDomain !== null && context.updateAxisDomain(dataDomain);\n }\n },\n {\n type: 'registerChangeListener',\n props: [PROPS.MOUNT, PROPS.DATA, ...axisProps],\n listener: (mount, data) => {\n const container = mount[1];\n if (container && data[1]) {\n context.render(container);\n }\n }\n }\n]);\n","import { FACET_BY_FIELDS, RETINAL_FIELDS, PARENT_ALIAS, LAYERS, STORE, CACHED_DATA } from './enums/constants';\n\nexport const PROPS = {\n [FACET_BY_FIELDS]: {},\n [RETINAL_FIELDS]: {},\n [PARENT_ALIAS]: {},\n [LAYERS]: {},\n [STORE]: {},\n [CACHED_DATA]: {},\n detailFields: {}\n};\n","import { CommonProps } from 'muze-utils';\nimport { DATA, MOUNT } from '../enums/reactive-props';\n\nexport const clearActionHistory = (context) => {\n const actionHistory = context._actionHistory;\n for (const key in actionHistory) {\n if (actionHistory[key].isMutableAction) {\n delete context._actionHistory[key];\n }\n }\n};\n\nexport const dispatchQueuedSideEffects = (context) => {\n const queuedSideEffects = context._queuedSideEffects;\n Object.entries(queuedSideEffects).forEach((entry) => {\n const sideEffect = entry[1];\n context.dispatchSideEffect(sideEffect.name, ...sideEffect.params);\n });\n context._queuedSideEffects = {};\n};\n\nexport const registerListeners = (firebolt) => {\n const context = firebolt.context;\n const store = context.store();\n\n store.registerImmediateListener([DATA, MOUNT], (dataModel, mount) => {\n const dm = dataModel[1];\n\n if (dm && mount[1]) {\n const originalData = firebolt.context.cachedData()[0];\n firebolt.createSelectionSet(firebolt.context.data().getData().uids);\n firebolt.attachPropagationListener(originalData);\n }\n }, true);\n\n context._layerDeps.throwback.registerChangeListener([CommonProps.ON_LAYER_DRAW],\n ([, onlayerdraw]) => {\n if (onlayerdraw) {\n firebolt.initializeSideEffects();\n firebolt.config(context.config().interaction);\n firebolt.mapActionsAndBehaviour();\n dispatchQueuedSideEffects(firebolt);\n clearActionHistory(firebolt);\n }\n });\n};\n\n","import { DimensionSubtype } from 'muze-utils';\n\nconst getRangeFromData = (instance, selectionDataModel, propConfig) => {\n let criteria;\n const dataObj = selectionDataModel[0].getData();\n const propCriteria = propConfig.payload.criteria;\n const sourceIdentifiers = propConfig.sourceIdentifiers;\n const schema = dataObj.schema;\n const fieldMap = instance.data().getFieldsConfig();\n const data = dataObj.data;\n const isActionSourceSame = instance.id() === propConfig.sourceId;\n\n if (isActionSourceSame) {\n criteria = propCriteria;\n } else {\n criteria = (sourceIdentifiers !== null) ? schema.reduce((acc, obj, index) => {\n let range;\n const field = obj.name;\n const fieldObj = fieldMap[field];\n const type = fieldObj && (fieldObj.def.subtype ? fieldObj.def.subtype : fieldObj.def.type);\n const isDimension = type === DimensionSubtype.CATEGORICAL;\n\n if (!fieldObj) {\n return acc;\n }\n\n if (!isDimension) {\n range = [Math.min(...data.map(d => d[index])), Math.max(...data.map(d => d[index]))];\n } else {\n range = data.map(d => d[index]);\n }\n acc[field] = range;\n return acc;\n }, {}) : null;\n }\n return criteria;\n};\n\nexport const payloadGenerator = {\n brush: (instance, selectionDataModel, propConfig) => {\n const propPayload = propConfig.payload;\n const criteria = getRangeFromData(instance, selectionDataModel, propConfig);\n const payload = Object.assign({}, propPayload);\n payload.criteria = criteria;\n return payload;\n },\n\n __default: (instance, selectionDataModel, propConfig) => {\n const propPayload = propConfig.payload;\n const sourceIdentifiers = propConfig.sourceIdentifiers;\n const dataObj = selectionDataModel[0].getData();\n let schema = dataObj.schema;\n const payload = Object.assign({}, propPayload);\n schema = dataObj.schema;\n const data = dataObj.data;\n const sourceFields = schema.map(d => d.name);\n payload.criteria = !sourceIdentifiers && selectionDataModel[0].isEmpty() ? null :\n [sourceFields, ...data];\n payload.sourceFields = sourceIdentifiers ? sourceIdentifiers.getSchema().map(d => d.name) : [];\n return payload;\n }\n};\n\n","import { isSimpleObject, FieldType, DataModel } from 'muze-utils';\n\nconst getModelWithFacetData = (dm, data) => {\n const dataObj = dm.getData();\n const schema1 = dataObj.schema;\n const data1 = dataObj.data;\n const jsonData = [];\n const schema2 = data[0].map(d => ({\n name: `${d}`,\n type: FieldType.DIMENSION\n }));\n const data2 = data[1];\n\n data1.forEach((d) => {\n const tuple = {};\n schema1.forEach((obj, i) => {\n tuple[obj.name] = d[i];\n });\n schema2.forEach((obj, i) => {\n tuple[obj.name] = data2[i];\n });\n jsonData.push(tuple);\n });\n\n return new DataModel(jsonData, [...schema1, ...schema2]);\n};\n\nexport const propagateValues = (instance, action, config = {}) => {\n let propagationData;\n const payload = config.payload;\n const selectionSet = config.selectionSet;\n const propagationFieldInf = config.propagationFields[action] || {};\n const propagationFields = propagationFieldInf.fields || [];\n const append = propagationFieldInf.append;\n const criteria = payload.criteria;\n const context = instance.context;\n const dataModel = context.cachedData()[0];\n const sourceId = context.id();\n const sideEfffects = instance.sideEffects();\n const behaviourEffectMap = instance._behaviourEffectMap;\n const mergedModel = selectionSet.mergedEnter.model;\n const fieldsConfig = dataModel.getFieldsConfig();\n payload.sourceUnit = sourceId;\n payload.action = action;\n payload.sourceCanvas = context.parentAlias();\n const propagationBehaviourMap = instance._propagationBehaviourMap;\n const propagationBehaviour = propagationBehaviourMap[action] || action;\n\n let propFields = [];\n if (criteria === null) {\n propagationData = null;\n } else if (isSimpleObject(criteria)) {\n propFields = Object.keys(criteria || {});\n propagationData = mergedModel ? mergedModel.project(propFields) : null;\n } else {\n propFields = criteria[0];\n propagationData = mergedModel ? mergedModel.project(propFields) : null;\n }\n\n const facetByFields = context.facetByFields();\n if (propagationData !== null && propagationFields.length) {\n const fields = propagationData.getData().schema.map(d => d.name);\n propagationData = getModelWithFacetData(propagationData, facetByFields);\n propFields = append ? [...fields, ...propagationFields] : propagationFields;\n propagationData = propagationData.project(propFields);\n }\n\n let propagateInterpolatedValues = false;\n if (propFields.length && propFields.every(field => fieldsConfig[field] &&\n fieldsConfig[field].def.type === FieldType.MEASURE)) {\n propagateInterpolatedValues = true;\n }\n\n const groupId = context.parentAlias();\n payload.action = action;\n const behaviourInstance = instance._actions.behavioural[propagationBehaviour];\n const isMutableAction = behaviourInstance ? behaviourInstance.constructor.mutates() : false;\n\n const filterFn = (entry, propagationConf) => {\n const effects = behaviourEffectMap[entry.config.action];\n const mutates = entry.config.groupId ?\n effects.some(d => sideEfffects[d.name || d].constructor.mutates()) : true;\n return entry.config.groupId !== propagationConf.groupId && mutates;\n };\n\n const sourceBehaviour = instance._actions.behavioural[action];\n const mutates = sourceBehaviour ? sourceBehaviour.constructor.mutates() : false;\n let propConfig = {\n payload,\n action,\n criteria: propagationData,\n isMutableAction: mutates,\n propagateInterpolatedValues,\n groupId,\n sourceId: mutates ? groupId : sourceId,\n filterFn,\n enabled: (propConf, firebolt) => (action !== propagationBehaviour ?\n propConf.payload.sourceCanvas === firebolt.context.parentAlias() : true)\n };\n\n dataModel.propagate(propagationData, propConfig, true);\n\n if (action !== propagationBehaviour) {\n propConfig = {\n payload,\n sourceId: isMutableAction ? groupId : sourceId,\n criteria: propagationData,\n isMutableAction,\n propagateInterpolatedValues,\n action: propagationBehaviour,\n groupId,\n applyOnSource: action === propagationBehaviour,\n enabled: (propConf, firebolt) => propConf.payload.sourceCanvas !== firebolt.context.parentAlias(),\n filterFn\n };\n\n dataModel.propagate(propagationData, propConfig, true, {\n filterImmutableAction: (actionInf, propInf) => actionInf.groupId !== propInf.groupId\n });\n }\n};\n","import { FieldType } from 'muze-utils';\nimport { Firebolt, SpawnableSideEffect } from '@chartshq/muze-firebolt';\nimport { registerListeners } from './helper';\nimport { payloadGenerator } from './payload-generator';\nimport { propagateValues } from './data-propagator';\n\n/**\n * This class manages the interactions of visual unit. It associates physical actions with\n * behavioural actions. It also propagates the behavioural actions to other datamodels.\n */\nexport default class UnitFireBolt extends Firebolt {\n constructor (...params) {\n super(...params);\n registerListeners(this);\n }\n\n propagate (behaviour, payload, selectionSet, sideEffects) {\n propagateValues(this, behaviour, {\n payload,\n selectionSet,\n sideEffects,\n propagationFields: this._propagationFields\n });\n }\n\n getApplicableSideEffects (sideEffects, payload, propagationInf) {\n const context = this.context;\n const unitId = context.id();\n const aliasName = context.parentAlias();\n const propagationSourceCanvas = propagationInf.propPayload && propagationInf.propPayload.sourceCanvas;\n const sourceUnitId = propagationInf.propPayload && propagationInf.propPayload.sourceUnit;\n const sourceSideEffects = this._sourceSideEffects;\n const sideEffectInstances = this.sideEffects();\n const actionOnSource = sourceUnitId ? sourceUnitId === unitId : true;\n\n const applicableSideEffects = payload.sideEffects ? [{\n effects: payload.sideEffects,\n behaviours: [payload.action]\n }] : sideEffects;\n applicableSideEffects.forEach((d) => {\n let mappedEffects = d.effects;\n mappedEffects = mappedEffects.filter((se) => {\n const mutates = sideEffectInstances[se.name || se].constructor.mutates();\n if (mutates && propagationInf.isMutableAction === false) {\n return false;\n }\n if (!actionOnSource && payload.criteria !== null) {\n const sideEffectChecker = sourceSideEffects[se.name || se];\n return sideEffectChecker ? sideEffectChecker(propagationInf.propPayload, context) : true;\n }\n if (propagationSourceCanvas === aliasName || actionOnSource) {\n return se.applyOnSource !== false;\n }\n\n return true;\n });\n d.effects = mappedEffects;\n });\n return applicableSideEffects;\n }\n\n shouldApplySideEffects (propagate) {\n return propagate === false;\n }\n\n onDataModelPropagation () {\n return (data, config) => {\n let isSourceFieldPresent = true;\n let isMutableAction = false;\n const propPayload = config.payload;\n const sourceIdentifiers = config.sourceIdentifiers;\n const enabledFn = config.enabled;\n const action = config.action;\n const payloadFn = payloadGenerator[action] || payloadGenerator.__default;\n\n if (sourceIdentifiers) {\n const fieldsConfig = sourceIdentifiers.getFieldsConfig();\n const sourceIdentifierFields = Object.keys(fieldsConfig);\n const propFields = Object.keys(data[0].getFieldsConfig());\n if (!Object.values(fieldsConfig).some(d => d.def.type === FieldType.MEASURE)) {\n isSourceFieldPresent = sourceIdentifierFields.some(d => propFields.indexOf(d) !== -1);\n }\n }\n\n const payload = payloadFn(this.context, data, config);\n const sourceBehaviours = this._sourceBehaviours;\n const filterFn = sourceBehaviours[action] || sourceBehaviours['*'];\n let enabled = true;\n\n if (filterFn) {\n enabled = filterFn(propPayload || {}, this.context);\n }\n\n if (enabledFn) {\n enabled = enabledFn(config, this) && enabled !== false;\n }\n\n if (enabled) {\n const effects = this._behaviourEffectMap[action];\n const sideEffectInstances = this.sideEffects();\n isMutableAction = config.groupId ?\n effects.some(d => sideEffectInstances[d.name || d].constructor.mutates()) : config.isMutableAction;\n\n const propagationInf = {\n propagate: false,\n data,\n propPayload,\n sourceIdentifiers,\n persistent: false,\n isSourceFieldPresent,\n sourceId: config.propagationSourceId,\n isMutableAction: config.isMutableAction\n };\n\n this._actionHistory[action] = {\n payload,\n propagationInf,\n isMutableAction\n };\n this.dispatchBehaviour(action, payload, propagationInf);\n }\n };\n }\n\n initializeSideEffects () {\n super.initializeSideEffects();\n const sideEffects = this.sideEffects();\n for (const key in sideEffects) {\n if ({}.hasOwnProperty.call(sideEffects, key)) {\n sideEffects[key] instanceof SpawnableSideEffect && sideEffects[key].drawingContext(() => {\n const context = this.context;\n return context.getDrawingContext();\n });\n }\n }\n }\n\n prepareSelectionSets (behaviours) {\n const data = this.context.data();\n if (data) {\n this.createSelectionSet(data.getData().uids, behaviours);\n }\n return this;\n }\n\n remove () {\n this.context.cachedData()[0].unsubscribe('propagation');\n return this;\n }\n}\n","import { layerFactory } from '@chartshq/visual-layer';\nimport {\n setAttrs,\n CommonProps,\n getUniqueId,\n getQualifiedClassName,\n selectElement,\n transactor,\n Store,\n makeElement,\n registerListeners,\n generateGetterSetters,\n getDataModelFromIdentifiers,\n isSimpleObject,\n transposeArray,\n FieldType\n} from 'muze-utils';\nimport { physicalActions, sideEffects, behaviouralActions, behaviourEffectMap } from '@chartshq/muze-firebolt';\nimport { actionBehaviourMap } from './firebolt/action-behaviour-map';\nimport {\n renderLayers,\n getNearestDimensionalValue,\n removeLayersBy,\n getLayersBy,\n getLayerFromDef,\n attachAxisToLayers,\n getLayerAxisIndex,\n createSideEffectGroup,\n getAdjustedDomain,\n resolveEncodingTransform\n} from './helper';\nimport { renderGridLineLayers } from './helper/grid-lines';\nimport localOptions from './local-options';\nimport { listenerMap } from './listener-map';\nimport {\n primaryYAxisUpdated,\n primaryXAxisUpdated,\n secondaryXAxisUpdated,\n secondaryYAxisUpdated,\n DATADOMAIN,\n TIMEDIFFS\n} from './enums/reactive-props';\nimport { PROPS } from './props';\nimport UnitFireBolt from './firebolt';\nimport './styles.scss';\n\nconst FORMAL_NAME = 'unit';\n\n/**\n * @module VisualUnit\n * A hierarchical component of renderer which manages multiple layers. This logical\n * module is responsible for layouting layers, attach axis with them, resolving conflicts of layers.\n */\n\n/**\n * Basic unit implementaiton\n * @class VisualUnit\n */\nexport default class VisualUnit {\n\n /**\n * Creates instance of visualization unit\n * @param registry {Object} Component registry\n * @param dependencies {Object} Dependencies required by visual unit.\n */\n constructor (registry, dependencies) {\n this._id = getUniqueId();\n this._dependencies = dependencies;\n this._layerDeps = {\n throwback: new Store({\n onlayerdraw: false\n }),\n smartLabel: dependencies.smartLabel\n };\n this._renderedResolve = null;\n this._renderedPromise = new Promise((resolve) => {\n this._renderedResolve = resolve;\n });\n this._layerDeps.throwback.registerChangeListener([CommonProps.ON_LAYER_DRAW], () => {\n this._renderedResolve();\n this._lifeCycleManager.notify({ client: this.layers(), action: 'drawn', formalName: 'layer' });\n });\n\n this._lifeCycleManager = dependencies.lifeCycleManager;\n this._layersMap = {};\n this._gridlines = [];\n this._gridbands = [];\n this._layerAxisIndex = {};\n this._transformedDataModels = {};\n\n layerFactory.setLayerRegistry(registry.layerRegistry);\n generateGetterSetters(this, PROPS);\n this.cachedData([]);\n this.store(new Store({\n [primaryXAxisUpdated]: null,\n [primaryYAxisUpdated]: null,\n [secondaryXAxisUpdated]: null,\n [secondaryYAxisUpdated]: null\n }));\n transactor(this, localOptions, this.store().model);\n this.firebolt(new UnitFireBolt(this, {\n physical: physicalActions,\n behavioural: behaviouralActions,\n physicalBehaviouralMap: actionBehaviourMap\n }, sideEffects, behaviourEffectMap));\n registerListeners(this, listenerMap);\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof VisualUnit\n */\n static formalName () {\n return FORMAL_NAME;\n }\n\n /**\n * Static helper for creates a unit instance\n *\n * @param {Object} [id] optional unique identifier for a unit; , id is calculated internally\n * @param {DataModel} data instance of datamodel\n * @param {Array.} layers layer configuration\n * @param {Object} config configurtion for the visual unit\n * @return {VisualUnit} Instance of a unit\n */\n static create (...params) {\n return new this(...params);\n }\n\n /**\n *\n *\n * @readonly\n * @memberof VisualUnit\n */\n firebolt (...firebolt) {\n if (firebolt.length) {\n this._firebolt = firebolt[0];\n return this;\n }\n return this._firebolt;\n }\n\n /**\n * Gets the domain for all axes of this visual unit.\n * @return {Object} Domains of each data field.\n */\n getDataDomain () {\n return this.store().get(DATADOMAIN);\n }\n\n /**\n * Retrieves the id created for this instance of visual unit\n * @return {string} id associated with the instance\n */\n id () {\n return this._id;\n }\n\n /**\n *\n *\n * @returns\n * @memberof VisualUnit\n */\n lockModel () {\n this._store.model.lock();\n return this;\n }\n\n /**\n *\n *\n * @returns\n * @memberof VisualUnit\n */\n unlockModel () {\n this._store.model.unlock();\n return this;\n }\n\n timeDiffsByField (...params) {\n if (params.length) {\n return this;\n }\n return this._timeDiffsByField;\n }\n\n /**\n * Renders the visual unit. It creates the layout and renders the axes and layers.\n * @return {VisualUnit} Instance of visual unit.\n */\n render (container) {\n const config = this.config();\n const { className, defClassName, sideEffectClassName, classPrefix } = config;\n const qualifiedClassName = getQualifiedClassName(defClassName, this.id(), config.classPrefix);\n const width = this.width();\n const height = this.height();\n const containerSelection = selectElement(container).style('position', 'relative');\n\n this._rootSvg = makeElement(containerSelection, 'svg', [null], className)\n .style('width', `${width}px`).style('height', `${height}px`);\n\n const node = this._rootSvg.node();\n setAttrs(node, {\n width,\n height,\n class: qualifiedClassName.join(' ')\n });\n renderGridLineLayers(this, node);\n renderLayers(this, node, this.layers(), {\n width,\n height\n });\n this._sideEffectGroup = createSideEffectGroup(node, `${classPrefix}-${sideEffectClassName}`);\n return this;\n }\n\n done () {\n return this._renderedPromise;\n }\n /**\n *\n *\n * @returns\n * @memberof VisualUnit\n */\n enableCaching () {\n this._cache = true;\n return this;\n }\n\n /**\n *\n *\n * @returns\n * @memberof VisualUnit\n */\n clearCaching () {\n this._cache = false;\n this.cachedData([this.cachedData()[0]]);\n return this;\n }\n\n /**\n *\n *\n * @returns\n * @memberof VisualUnit\n */\n getDrawingContext () {\n const rootSvg = this._rootSvg && this._rootSvg.node();\n const width = this.width();\n const height = this.height();\n return {\n htmlContainer: this.mount(),\n svgContainer: rootSvg,\n width,\n height,\n sideEffectGroup: this._sideEffectGroup,\n parentContainer: this.parentContainer(),\n xOffset: 0,\n yOffset: 0\n };\n }\n\n /**\n * Returns the serialized configuration of visual unit.\n * @return {Object} serialized configuration\n */\n serialize () {\n return {\n layers: this.layers().map(layer => layer.serialize()),\n config: this.config(),\n axes: this.store().get('axes').map(axis => axis.serialize())\n };\n }\n\n /**\n *\n *\n * @param {*} layerDef\n * @returns\n * @memberof VisualUnit\n */\n addLayer (layerDef) {\n const layerName = layerDef.name;\n const layer = this.getLayerByName(layerName);\n const measurement = {\n width: this.width(),\n height: this.height()\n };\n\n if (layer) {\n return [layer];\n }\n const serializedDef = layerFactory.getSerializedConf(layerDef.mark, layerDef);\n const instances = Object.values(getLayerFromDef(this, serializedDef));\n this.layers().push(...instances);\n const layerAxisIndex = getLayerAxisIndex(instances, this.fields());\n this._layerAxisIndex = Object.assign(this._layerAxisIndex, layerAxisIndex);\n attachAxisToLayers(this.axes(), instances, layerAxisIndex);\n const store = { unit: this, layers: {} };\n this.layers().forEach((inst) => {\n store.layers[inst.alias()] = inst;\n });\n instances.forEach((lyr) => {\n resolveEncodingTransform(lyr, store);\n lyr.measurement(measurement);\n lyr.dataProps({\n timeDiffs: this.store().get(TIMEDIFFS)\n });\n });\n return instances;\n }\n\n /**\n *\n *\n * @returns\n * @memberof VisualUnit\n */\n remove () {\n const lifeCycleManager = this._dependencies.lifeCycleManager;\n lifeCycleManager.notify({ client: this, action: 'beforeremove', formalName: 'unit' });\n this.store().unsubscribeAll();\n selectElement(this.mount()).remove();\n this.firebolt().remove();\n // Remove layers\n lifeCycleManager.notify({ client: this.layers(), action: 'beforeremove', formalName: 'layer' });\n this.layers().forEach(layer => layer.remove());\n lifeCycleManager.notify({ client: this.layers(), action: 'removed', formalName: 'layer' });\n lifeCycleManager.notify({ client: this, action: 'removed', formalName: 'unit' });\n return this;\n }\n\n /**\n *\n *\n * @param {*} identifiers\n * @returns\n * @memberof VisualUnit\n */\n getDataModelFromIdentifiers (identifiers, mode, parentModel) {\n if (identifiers === null) {\n return null;\n }\n const dataModel = parentModel || this.data();\n return getDataModelFromIdentifiers(dataModel, identifiers, mode);\n }\n\n /**\n *\n *\n * @returns\n * @memberof VisualUnit\n */\n resetData () {\n this.data(this.cachedData()[0]);\n return this;\n }\n\n /**\n *\n *\n * @returns\n * @memberof VisualUnit\n */\n getSourceInfo () {\n return {\n dimensionMeasureMap: this._dimensionMeasureMap,\n fields: this.fields(),\n data: this.data(),\n axes: this.axes()\n };\n }\n\n /**\n *\n *\n * @returns\n * @memberof VisualUnit\n */\n getDefaultTargetContainer () {\n const { classPrefix, defClassName } = this.config();\n return [`.${classPrefix}-${defClassName}`];\n }\n\n /**\n *\n *\n * @param {*} type\n * @returns\n * @memberof VisualUnit\n */\n getLayersByType (type) {\n const layers = getLayersBy(this.layers(), 'type', type);\n return layers;\n }\n\n /**\n *\n *\n * @param {*} name\n * @returns\n * @memberof VisualUnit\n */\n getLayerByName (name) {\n const layers = getLayersBy(this.layers(), 'name', name);\n return layers[0];\n }\n\n /**\n *\n *\n * @param {*} domain\n * @returns\n * @memberof VisualUnit\n */\n updateAxisDomain (domain) {\n ['x', 'y'].forEach((type) => {\n const axes = this.axes()[type];\n let min = [];\n let max = [];\n let dom;\n axes && axes.forEach((axis, i) => {\n const field = this.fields()[type][i];\n dom = domain[`${this.fields()[type][i]}`];\n\n if (field.type() !== FieldType.DIMENSION && dom) {\n min[i] = dom[0];\n max[i] = dom[1];\n }\n });\n if (axes) {\n if (axes.length > 1) {\n const axisConf = axes[0].config();\n if (axes[0].constructor.type() === 'linear') {\n if (axisConf.alignZeroLine) {\n axes.forEach(axis => axis.config({\n nice: false\n }));\n const adjustedDomain = getAdjustedDomain(max, min);\n min = adjustedDomain.min;\n max = adjustedDomain.max;\n }\n\n axes[0].updateDomainCache([min[0], max[0]]);\n axes[1].updateDomainCache([min[1], max[1]]);\n } else {\n axes[0].updateDomainCache(dom);\n axes[1].updateDomainCache(dom);\n }\n } else {\n axes[0].updateDomainCache(dom);\n }\n }\n });\n return this;\n }\n\n /**\n * Finds the nearest point closest to the x and y position.\n * @param {number} x x position.\n * @param {number} y y position.\n * @return {Object} Nearest point.\n */\n getNearestPoint (x, y, args) {\n let pointObj = {\n id: null\n };\n const dimValue = getNearestDimensionalValue(this, {\n x,\n y\n });\n\n if (dimValue !== null && args.getAllPoints) {\n pointObj.id = dimValue;\n const pointInf = this.getMarkInfFromLayers(x, y, args);\n pointObj.target = pointInf && pointInf.id ? pointInf.id : pointObj.id;\n return pointObj;\n }\n\n const markInf = this.getMarkInfFromLayers(x, y, args) || { id: null };\n pointObj = Object.assign({}, markInf);\n\n pointObj.target = markInf.id;\n return pointObj;\n }\n\n getMarkInfFromLayers (x, y, args) {\n const layers = this.layers();\n const len = layers.length;\n let point = null;\n // Iterate through the layers array and fetch the nearest point from each layer. If a valid\n // nearest point is found from any layer, then return that point.\n for (let i = 0; i < len; i++) {\n const layer = layers[i];\n const config = layer.config();\n if (config.interactive !== false) {\n point = layer.getNearestPoint(x, y, args);\n }\n if (point) {\n return point;\n }\n }\n return point;\n }\n\n /**\n *\n *\n * @param {*} identifiers\n * @returns\n * @memberof VisualUnit\n */\n getPlotPointsFromIdentifiers (identifiers, config = {}) {\n let points = [];\n let parsedIdentifiers = identifiers;\n if (identifiers === null) {\n return [];\n }\n const layers = this.layers();\n const len = layers.length;\n if (isSimpleObject(identifiers)) {\n parsedIdentifiers = [Object.keys(identifiers)];\n parsedIdentifiers = [...parsedIdentifiers, ...transposeArray(Object.values(identifiers))];\n }\n for (let i = 0; i < len; i++) {\n const layer = layers[i];\n if (layer.config().interactive !== false) {\n points = [...points, ...layer.getPointsFromIdentifiers(parsedIdentifiers, config)];\n }\n }\n return points;\n }\n\n /**\n *\n *\n * @param {*} name\n * @returns\n * @memberof VisualUnit\n */\n removeLayerByName (name) {\n removeLayersBy('name', name);\n return this;\n }\n\n /**\n *\n *\n * @param {*} type\n * @returns\n * @memberof VisualUnit\n */\n removeLayersByType (type) {\n removeLayersBy('type', type);\n return this;\n }\n\n parentContainer (...container) {\n if (container.length) {\n this._parentContainer = container[0];\n\n return this;\n }\n return this._parentContainer;\n }\n}\n","import { DataModel } from 'muze-utils';\n\nimport { retriveDomainFromData } from './group-utils';\n\n/**\n * Gets name of fields form the variables\n *\n * @param {*} fields1\n * @param {*} [fields2=[]]\n * @return\n */\nconst getFieldNames = (fields1, fields2 = []) => [fields1, fields2].map(fields => fields.reduce((acc, d) => {\n acc = [...acc, ...d.getMembers()];\n return acc;\n}, []));\n\n/**\n * Creates a selected datamodel from a parent datamodel and a set of field names\n *\n * @param {Object} datamodel provided as input\n * @param {Array} fieldNames schema names\n * @param {Array} fieldValues values of those schema names to be selected\n * @return {Object} creates a new selected datamodel\n */\nconst createSelectedDataModel = (datamodel, fieldNames, fieldValues) =>\n datamodel.select(fields => fieldNames.every((field, k) => fields[field].value === fieldValues[k]));\n\n/**\n *\n *\n * @param {*} facets\n * @param {*} keyArray\n * @return\n */\nconst uniqueKeyGenerator = (keyArray, context, depth = 0, val = []) => {\n const {\n facets,\n dataModel,\n uniqueValues\n } = context;\n\n // Get unique keys for the next depth recursively if required\n if (facets[depth + 1]) {\n const field = facets[depth];\n uniqueValues.forEach((value) => {\n const newDm = dataModel.select(fields => fields[field].value === value);\n const nextDepthUniqueValues = retriveDomainFromData(newDm, facets[depth + 1]);\n const newContext = {\n facets,\n dataModel: newDm,\n uniqueValues: nextDepthUniqueValues\n };\n\n uniqueKeyGenerator(keyArray, newContext, depth + 1, [...val, value]);\n });\n } else {\n uniqueValues.forEach((value) => {\n keyArray.push([...val, value]);\n });\n }\n};\n\n/**\n * projects row model based on the set of row and/or column and other projection fields\n *\n * @param {Object} datamodel provided as input\n * @return {Object} Projected datamodel\n */\nconst projectRows = (datamodel, projections) => {\n const {\n allColumnProjections,\n rowProjections,\n optionalProjections\n } = projections;\n\n if (rowProjections.length > 0) {\n return rowProjections.map((projectFields) => {\n const [projFieldNames, colProjFieldNames] = getFieldNames(projectFields, allColumnProjections);\n return datamodel.project([...projFieldNames, ...colProjFieldNames, ...optionalProjections]);\n });\n }\n return [datamodel];\n};\n\n/**\n * Adds the datamodels to current row index based on column fields\n *\n * @param {Array} context current context\n * @param {Array} callback List of facets applied to the current datamodel\n */\nconst pushToMatrix = (context, callback) => {\n let cells = [];\n const {\n matrix,\n datamodel,\n facetInfo,\n fieldInfo\n } = context;\n // Get projected fields for current row\n const {\n rowProjections,\n colProjections,\n optionalProjections\n } = fieldInfo;\n const {\n rowIndex,\n columnIndex\n } = facetInfo;\n const rowProj = rowProjections[(rowIndex) % rowProjections.length] || [];\n\n // Get the cells for the matrix from the return function of the callback on the datamodel.\n // callback function -> (datamodel, {projections, indices}, facets)\n if (colProjections.length > 0) {\n cells = colProjections.map((projectFields, projIdx) => {\n const [colProjFieldNames, rowProjFieldNames] = getFieldNames(projectFields, rowProj);\n const projectedDm = datamodel.project([...colProjFieldNames, ...rowProjFieldNames, ...optionalProjections]);\n const projections = { rowFields: rowProj, columnFields: projectFields };\n const indices = { rowIndex, columnIndex: columnIndex * colProjections.length + projIdx };\n\n return callback(projectedDm, { projections, indices }, facetInfo);\n });\n } else {\n const projections = { rowFields: rowProj, columnFields: [] };\n const indices = { rowIndex, columnIndex };\n\n cells = [callback(datamodel, { projections, indices }, facetInfo)];\n }\n\n matrix[rowIndex] = matrix[rowIndex] || [];\n matrix[rowIndex].push(...cells);\n};\n\n/**\n * Gets Matrixes for corresponding datamodel, facets and projections\n *\n * @param {Object} dataModel input datamodel\n * @param {Object} fieldMap corresponding fieldmap\n * @param {Array} facetsAndProjections contains the set of facets and projections for the matrices\n * @param {Function} callback Callback executed after datamodels are prepared after sel/proj\n * @return {Object} set of matrices with the corresponding row and column keys\n */\nexport const getMatrixModel = (dataModel, fieldInfo, callback) => {\n let rowDataModels = [];\n const rowKeys = [];\n const columnKeys = [];\n const allColumnProjections = [];\n const matrix = [];\n const facetInfo = [];\n const {\n rowFacets,\n colFacets,\n colProjections\n } = fieldInfo;\n\n colProjections.forEach((colProj) => {\n allColumnProjections.push(...colProj);\n });\n fieldInfo.allColumnProjections = allColumnProjections;\n\n // Performing row selection and projection\n if (rowFacets.length > 0) {\n // Get unique values for the root level of facet\n const field = rowFacets[0].toString();\n const firstLevelRowKeys = retriveDomainFromData(dataModel, field);\n\n // Get unique keys in the form of an array of arrays for each row\n uniqueKeyGenerator(rowKeys, { facets: rowFacets, dataModel, uniqueValues: firstLevelRowKeys });\n\n // Apply selection -> projection -> row datamodels\n rowKeys.forEach((val) => {\n // Create faceted datamodel\n const [rowFacetFieldNames] = getFieldNames(rowFacets);\n const selectedDataModel = createSelectedDataModel(dataModel, rowFacetFieldNames, val);\n\n // Project the datamodel based on the number of projections (based on last levels)\n facetInfo.push([rowFacets, val]);\n rowDataModels.push(...projectRows(selectedDataModel, fieldInfo));\n });\n } else {\n // No row facets, hence only row projection\n rowDataModels.push(...projectRows(dataModel, fieldInfo));\n }\n\n // Maintaining set of row datamodels for column resolution\n rowDataModels = rowDataModels.length > 0 ? rowDataModels : [[]];\n\n // Performing column selection and projection\n if (colFacets.length > 0) {\n const colFacetNames = colFacets.map(d => `${d}`);\n // Get unique values for the root level of facet\n const field = colFacetNames[0];\n const firstLevelColumnKeys = retriveDomainFromData(dataModel, field);\n\n // Get unique keys to create faceted datamodels: this time for columns\n uniqueKeyGenerator(columnKeys, {\n facets: colFacetNames,\n dataModel,\n uniqueValues: firstLevelColumnKeys\n });\n\n // For each row in the datamodel, apply selection -> projection -> push the projection to matri\n rowDataModels.forEach((dme, rIndex) => {\n facetInfo[rIndex] = facetInfo[rIndex] || [[], []];\n columnKeys.forEach((val, cIndex) => {\n matrix[rIndex] = matrix[rIndex] || [];\n\n // If datamodel is not present in current row, choose parent datamodel\n const datamodel = dme instanceof DataModel ? dme : dataModel;\n\n // Selection is made on the datamodel for the current row\n const selectedDataModel = createSelectedDataModel(datamodel, colFacetNames, val);\n const context = {\n matrix,\n datamodel: selectedDataModel,\n facetInfo: {\n rowFacets: facetInfo[rIndex],\n colFacets: [colFacets, val],\n rowIndex: rIndex,\n columnIndex: cIndex\n },\n fieldInfo\n };\n pushToMatrix(context, callback);\n });\n });\n } else {\n // No column facets, hence only row projection\n rowDataModels.forEach((dme, rIndex) => {\n facetInfo[rIndex] = facetInfo[rIndex] || [[], []];\n const context = {\n matrix,\n datamodel: dme || dataModel,\n facetInfo: {\n rowFacets: facetInfo[rIndex],\n colFacets: [[], []],\n rowIndex: rIndex,\n columnIndex: 0\n },\n fieldInfo\n };\n\n pushToMatrix(context, callback);\n });\n }\n\n // Getting column keys\n const transposedColKeys = columnKeys.length > 0 ? columnKeys[0].map((col, i) =>\n columnKeys.map(row => row[i])) : columnKeys;\n\n return { matrix, rowKeys, columnKeys: transposedColKeys };\n};\n","import { AxisOrientation } from '@chartshq/muze-axis';\nimport { getObjProp, FieldType } from 'muze-utils';\nimport { getMatrixModel } from './matrix-model';\nimport {\n getCellKey,\n isDistributionEqual,\n mutateAxesFromMap,\n createSelection,\n getFieldsFromSuppliedLayers,\n extractFields\n} from './group-utils';\nimport { ROW, ROWS, COLUMNS, COL, LEFT, RIGHT, TOP, BOTTOM, PRIMARY, SECONDARY, X, Y } from '../enums/constants';\n\n/**\n * Updates row and column cells with the geom cell corresponding to the facet keys\n *\n * @param {*} resolver\n * @param {*} facets\n */\nconst updateCells = (resolver, facets, geomCell) => {\n [ROW, COL].forEach((field) => {\n const cells = resolver[`${field}Cells`]();\n const facetKey = facets[`${field}Facets`][1].join();\n\n !cells[facetKey] && (cells[facetKey] = []);\n cells[facetKey].push(geomCell);\n resolver[`${field}Cells`](cells);\n });\n};\n\n/**\n *\n *\n * @param {*} context\n * @param {*} datamodel\n * @param {*} fieldInfo\n * @param {*} facets\n * @return\n */\nexport const createValueCells = (context, datamodel, fieldInfo, facets) => {\n const {\n projections,\n indices\n } = fieldInfo;\n const {\n rowFields,\n columnFields\n } = projections;\n const {\n rowIndex,\n columnIndex\n } = indices;\n const {\n suppliedLayers,\n cell: GeomCell,\n resolver,\n config,\n encoder,\n detailFields\n } = context;\n const axes = resolver.axes();\n const cacheMaps = resolver.cacheMaps();\n const matrixLayers = resolver.matrixLayers();\n const labelManager = resolver.dependencies().smartlabel;\n const horizontalAxis = resolver.horizontalAxis();\n const verticalAxis = resolver.verticalAxis();\n const datamodelTransform = resolver.datamodelTransform();\n const {\n entryCellMap,\n exitCellMap\n } = cacheMaps;\n const layerConfigArr = encoder.getLayerConfig({ columnFields, rowFields }, suppliedLayers || []);\n const axesCreators = { config, labelManager, axes, cacheMaps };\n\n fieldInfo.normalizedColumns = verticalAxis.fields;\n fieldInfo.normalizedRows = horizontalAxis.fields;\n\n const groupAxes = encoder.createAxis(axesCreators, fieldInfo);\n\n matrixLayers[rowIndex] = matrixLayers[rowIndex] ? matrixLayers[rowIndex] : [];\n matrixLayers[rowIndex][columnIndex] = layerConfigArr;\n\n // return from map if already there otherwise create and put in map\n const geomCellKey = getCellKey(rowIndex, columnIndex);\n const fields = {\n y: rowFields,\n x: columnFields\n };\n const allFacets = [\n [...facets.rowFacets[0], ...facets.colFacets[0]],\n [...facets.rowFacets[1], ...facets.colFacets[1]]\n ];\n const geomCell = !exitCellMap.has(geomCellKey) ? new GeomCell() : exitCellMap.get(geomCellKey);\n\n geomCell.data(datamodel)\n .axes(groupAxes)\n .fields(fields)\n .transform(datamodelTransform)\n .detailFields(detailFields)\n .facetByFields(allFacets);\n entryCellMap.set(geomCellKey, geomCell);\n exitCellMap.delete(geomCellKey);\n\n updateCells(resolver, facets, geomCell);\n\n return entryCellMap.get(geomCellKey);\n};\n\n/**\n * Creates axis cells based on the set of axes\n *\n * @param {Selection} selection Contains a selection of the axis units\n * @param {Array} axes Actual axis units\n * @param {number} axisIndex 0-> primary axis, 1-> secondary axis(when dual axis is made)\n * @param {Object} cells Contains a collection of the cells\n * @return {Object} return either set of axis/blank cells depending on the config\n */\n\nconst createAxisCells = (selection, axes, axisIndex, cells) =>\n createSelection(selection, axis => axis, axes, (item, i) => i + item.reduce((e, n) => {\n const id = n.id + axisIndex;\n return e + id;\n }, '')).map((axis) => {\n if (axis && axis[axisIndex]) {\n const axisInst = axis[axisIndex];\n const { orientation } = axisInst.config();\n\n return new cells.AxisCell().source(axisInst).config({\n isOffset: orientation === AxisOrientation.LEFT || orientation === AxisOrientation.TOP\n });\n }\n return new cells.BlankCell();\n });\n\n/**\n *\n *\n * @param {*} context\n * @param {*} selectionObj\n * @param {*} cells\n * @retur\n */\nconst axisPlaceholderGn = (context, selObj, cells) => {\n const {\n matrices\n } = context;\n const {\n axesMatrix\n } = matrices;\n\n return (type, axisFrom) => {\n const axes = axesMatrix[`${type}`];\n\n if (axes && axes.length) {\n if (type === X || type === Y) {\n const fieldNames = type === Y ? ROWS : COLUMNS;\n\n [PRIMARY, SECONDARY].forEach((fieldType, index) => {\n const selObjProp = `${fieldNames}${fieldType}`;\n let axisIndex = index;\n let axesForDraw = axes;\n if (axisFrom === RIGHT || axisFrom === BOTTOM) {\n axisIndex = 1 - axisIndex;\n }\n if (!getObjProp(axes, 0, axisIndex)) {\n axesForDraw = [];\n }\n selObj[selObjProp] = createAxisCells(selObj[selObjProp], axesForDraw, axisIndex, cells);\n });\n } else {\n selObj.rowsPrimary = createAxisCells(selObj.rowPrime, axes.map(() => []), 0, cells);\n selObj.columnsPrimary = createAxisCells(selObj.colPrime, axes[0], 0, cells);\n }\n }\n return selObj;\n };\n};\n\n/**\n * Creates header cells based on the set of headers\n *\n * @param {Object} selection Contains a selection of the header units\n * @param {string} headers Contains a list of the headers\n * @param {Object} cells Contains a collection of the cells\n * @param {Object} labelManager smart label instance\n * @return {Object} return either set of header cells depending on the config\n */\nconst createTextCells = (selection, headers, cells, labelManager) => createSelection(selection,\n label => new cells.TextCell({}, { labelManager }).source(label), headers, (key, i) => key + i);\n\n/**\n *\n *\n * @param {*} context\n * @param {*} selectionObj\n * @param {*} cells\n * @param {*} labelManager\n * @return\n */\nconst headerPlaceholderGn = (context, selectionObj, cells, labelManager) => {\n const {\n axis,\n keys,\n type,\n facetConfig\n } = context;\n const counter = axis.length / keys.length;\n const selectionKeys = keys.length ? axis.map((d, i) => keys[Math.floor(i / counter)]) : [];\n return createSelection(selectionObj[`${type}Headers`], keySet => keySet, selectionKeys, (keySet, i) =>\n `${keySet.join(',')}-${i}`).map(keySet => createTextCells(null, keySet, cells, labelManager)\n .map((cell, k, i) => cell.source(keySet[i]).config(facetConfig || {})));\n};\n\n/**\n * Creates a set of placeholders as a part of selection object\n *\n * @param {Array} normalizedOptions contains normalized rows and columns\n * @param {Array} matrices contains axis and value matrices\n * @param {aArrayny} projections contains set of row and column projections\n * @param {Object} cells Contains a collection of the cells\n * @param {Object} labelManager smart label instance\n * @return {Object} Creates a set of placeholders as a part of selections\n */\nconst generatePlaceholders = (context, cells, labelManager) => {\n let selectionObj;\n const {\n matrices,\n fields,\n facetsAndProjections,\n selection,\n facetConfig,\n encoders\n } = context;\n const {\n rows,\n columns\n } = fields;\n const {\n valuesMatrix\n } = matrices;\n const {\n rowProjections,\n colProjections\n } = facetsAndProjections;\n const {\n rowKeys,\n columnKeys\n } = valuesMatrix;\n const takeAxisFrom = encoders.simpleEncoder._axisFrom;\n const takeHeaderFrom = encoders.simpleEncoder._headerFrom;\n\n selectionObj = selection || {};\n\n ['pie', X, Y].forEach((axis) => {\n const axisFrom = axis === X ? takeAxisFrom.column : takeAxisFrom.row;\n selectionObj = axisPlaceholderGn(context, selectionObj, cells)(axis, axisFrom);\n });\n\n const {\n rowsPrimary,\n rowsSecondary,\n columnsPrimary,\n columnsSecondary\n } = selectionObj;\n\n const rowAxis = rowsPrimary && rowsPrimary.getObjects().length ? rowsPrimary.getObjects() :\n (rowsSecondary && rowsSecondary.getObjects().length ? rowsSecondary.getObjects() : []);\n const colAxis = columnsPrimary && columnsPrimary.getObjects().length ? columnsPrimary.getObjects() :\n (columnsSecondary && columnsSecondary.getObjects().length ? columnsSecondary.getObjects() : []);\n\n const headerConfig = [\n { type: LEFT, section: rows[0], axis: rowAxis, headerFrom: takeHeaderFrom.row },\n { type: RIGHT, section: rows[1], axis: rowAxis, headerFrom: takeHeaderFrom.row },\n { type: TOP, section: columns[0], axis: colAxis, headerFrom: takeHeaderFrom.column },\n { type: BOTTOM, section: columns[1], axis: colAxis, headerFrom: takeHeaderFrom.column }\n ];\n\n headerConfig.forEach((config, index) => {\n let keys;\n let length;\n const {\n type,\n section,\n axis,\n headerFrom\n } = config;\n\n if (index < 2) {\n keys = rowKeys;\n length = rowProjections.length > 0 ? rowProjections.length : 1;\n } else {\n keys = columnKeys;\n length = colProjections.length > 0 ? colProjections.length : 1;\n }\n\n if (section.length && headerFrom === type && axis && keys.length) {\n const hContext = { axis, length, type };\n let headers = [];\n if (index < 2) {\n hContext.keys = keys;\n hContext.facetConfig = facetConfig.rows;\n headers = headerPlaceholderGn(hContext, selectionObj, cells, labelManager);\n } else {\n hContext.facetConfig = facetConfig.columns;\n hContext.keys = keys[0].map((key, i) => keys.map(e => e[i]));\n headers = headerPlaceholderGn(hContext, selectionObj, cells, labelManager);\n }\n selectionObj[`${type}Headers`] = headers;\n } else {\n selectionObj[`${type}Headers`] = null;\n }\n });\n return selectionObj;\n};\n\n/**\n * Generates matrices\n *\n * @param {Object} config Configuration to generate matrices\n * @param {Array} matrices Matrices containing the set of visual units and axes units\n * @param {Object} cells Contains a collection of the cells\n * @param {Object} labelManager smart label instance\n * @return {Object} contains a collection of matrices\n */\nexport const generateMatrices = (context, matrices, cells, labelManager) => {\n const {\n unitHeight,\n unitWidth,\n facetsAndProjections,\n normalizedRows,\n normalizedColumns,\n selection,\n axisFrom,\n facetConfig,\n encoders\n } = context;\n const placeholderContext = {\n fields: {\n rows: normalizedRows,\n columns: normalizedColumns\n },\n matrices,\n facetsAndProjections,\n selection,\n axisFrom,\n facetConfig,\n encoders\n };\n // Generate placeholders for all matrices\n const selectionObj = generatePlaceholders(placeholderContext, cells, labelManager);\n const {\n columnsPrimary,\n columnsSecondary,\n rowsPrimary,\n rowsSecondary,\n leftHeaders,\n topHeaders,\n bottomHeaders,\n rightHeaders\n } = selectionObj;\n const [rowPrime, rowSec, colPrime, colSec] = [rowsPrimary, rowsSecondary, columnsPrimary, columnsSecondary]\n .map(d => (d ? d.getObjects() : []));\n const [leftFacets, rightFacets] = [leftHeaders, rightHeaders].map(e => (e ? e.getObjects()\n .map(f => f.getObjects()) : []));\n\n // Compute left matrix using left headers and the axes on the rows\n let leftMatrix = leftFacets.length ? leftFacets.map((d, i) => {\n rowPrime[i] = rowPrime[i] ? [rowPrime[i]] : [];\n return [...d, ...rowPrime[i]];\n }) : (rowPrime ? rowPrime.map(d => [d]) : []);\n\n // Compute right matrix using right headers and the axes on the rows\n const rightMatrix = rowSec.length ? rowSec.map((d, i) => [d, ...(rightFacets[i] || [])]) : (rightFacets.length ?\n rightFacets.map(d => [...d]) : []);\n\n const topMatrix = [];\n if (topHeaders) {\n const headers = topHeaders.getObjects();\n headers.forEach((e) => {\n const innerHeaders = e.getObjects();\n innerHeaders.forEach((x, i) => {\n topMatrix[i] = topMatrix[i] || [];\n topMatrix[i].push(x);\n });\n });\n }\n // Compute top matrix using the top headers and axes on the columns\n if (colPrime.length) {\n topMatrix.push(colPrime);\n }\n\n // Bottom and right matrices are prepared using the user config.\n let bottomMatrix = [];\n if (colSec.length) {\n bottomMatrix.push(colSec);\n }\n const currentBottomLength = bottomMatrix.length;\n if (bottomHeaders) {\n const headers = bottomHeaders.getObjects();\n headers.forEach((e) => {\n const innerHeaders = e.getObjects();\n innerHeaders.forEach((x, i) => {\n bottomMatrix[i + currentBottomLength] = bottomMatrix[i + currentBottomLength] || [];\n bottomMatrix[i + currentBottomLength].push(x);\n });\n });\n }\n\n if (!leftMatrix.length && !rightMatrix.length) {\n const cell = new cells.BlankCell();\n cell.setAvailableSpace(unitWidth, unitHeight);\n leftMatrix = [[cell]];\n }\n\n if (!topMatrix.length && (!bottomMatrix.length || !bottomMatrix[0].length)) {\n const cell = new cells.BlankCell();\n cell.setAvailableSpace(unitWidth, unitHeight);\n bottomMatrix = [[cell]];\n }\n\n return {\n rows: [leftMatrix, rightMatrix],\n columns: [topMatrix, bottomMatrix],\n selectionObj\n };\n};\n\n/**\n * Computes matrices for a group\n *\n * @param {Object} datamodel on which the matrices are to be computed\n * @param {Object} config configuration of the matrices\n * @param {Object} layerRegistry contains the registered layers\n * @return {Object} conputed matrices\n * @memberof MatrixResolver\n */\nexport const computeMatrices = (context, config) => {\n const {\n resolver,\n datamodel,\n componentRegistry,\n encoders\n } = context;\n const {\n globalConfig,\n selection,\n transform\n } = config;\n const groupBy = globalConfig.autoGroupBy;\n const { smartlabel: labelManager } = resolver.dependencies();\n const fieldMap = datamodel.getFieldsConfig();\n const layerConfig = resolver.layerConfig();\n const registry = resolver.registry();\n const { fields: normalizedRows } = resolver.horizontalAxis();\n const { fields: normalizedColumns } = resolver.verticalAxis();\n const otherEncodings = resolver.optionalProjections(config, layerConfig);\n const facetsAndProjections = resolver.getAllFields();\n const matrixGnContext = {\n // Configuration to be passed to generate the different matrices.\n // A common config is used for both value matrices and other matrices\n normalizedColumns,\n normalizedRows,\n facetsAndProjections,\n layers: layerConfig,\n fieldMap,\n otherEncodings,\n encoders,\n facetConfig: globalConfig.facetConfig || {},\n axisFrom: globalConfig.axisFrom || {},\n selection\n };\n const cells = {\n GeomCell: resolver.getCellDef(registry.GeomCell),\n AxisCell: resolver.getCellDef(registry.AxisCell),\n BlankCell: resolver.getCellDef(registry.BlankCell),\n TextCell: resolver.getCellDef(registry.TextCell)\n };\n const isRowSizeEqual = isDistributionEqual(normalizedRows);\n const isColumnSizeEqual = isDistributionEqual(normalizedColumns);\n\n resolver.colCells({});\n resolver.rowCells({});\n resolver.datamodelTransform(transform || {});\n\n // Cell creation begins here\n resolver.resetSimpleAxes();\n\n const {\n entryCellMap\n } = resolver.cacheMaps();\n const newCacheMap = {\n exitCellMap: entryCellMap,\n entryCellMap: new Map()\n };\n\n resolver.cacheMaps(newCacheMap);\n\n const valueCellContext = {\n config: globalConfig,\n suppliedLayers: encoders.simpleEncoder.serializeLayerConfig(resolver.layerConfig()),\n resolver,\n cell: cells.GeomCell,\n encoder: encoders.simpleEncoder,\n newCacheMap,\n detailFields: config.detail\n };\n const fieldsConfig = datamodel.getFieldsConfig();\n let groupedModel = datamodel;\n if (!groupBy.disabled) {\n const fields = getFieldsFromSuppliedLayers(valueCellContext.suppliedLayers, datamodel.getFieldsConfig());\n const allFields = extractFields(facetsAndProjections, fields);\n\n const dimensions = allFields.filter(field =>\n fieldsConfig[field] && fieldsConfig[field].def.type === FieldType.DIMENSION);\n const aggregationFns = groupBy.measures;\n\n groupedModel = datamodel.groupBy(dimensions.length ? dimensions : [''], aggregationFns).project(allFields);\n }\n\n // return a callback function to create the cells from the matrix\n const cellCreator = resolver.valueCellsCreator(valueCellContext);\n // Creates value matrices from the datamodel and configs\n const valueMatrixInfo = getMatrixModel(groupedModel, facetsAndProjections, cellCreator);\n\n resolver.cacheMaps().exitCellMap.forEach((placeholder) => {\n placeholder.remove();\n });\n resolver.cacheMaps().exitCellMap.clear();\n resolver.valueMatrix(valueMatrixInfo.matrix);\n resolver.createUnits(componentRegistry, config);\n\n const { xAxes, yAxes } = mutateAxesFromMap(resolver.cacheMaps(), resolver.axes());\n\n resolver.axes({\n x: xAxes,\n y: yAxes\n });\n\n const matrices = {\n valuesMatrix: valueMatrixInfo,\n axesMatrix: resolver.axes()\n };\n // Create all matrices\n const { rows, columns, selectionObj } = generateMatrices(matrixGnContext, matrices, cells, labelManager);\n\n resolver.rowMatrix(rows);\n resolver.columnMatrix(columns);\n\n return {\n rows: resolver.rowMatrix(),\n columns: resolver.columnMatrix(),\n values: resolver.valueMatrix(),\n isColumnSizeEqual,\n isRowSizeEqual,\n selection: selectionObj,\n dataModels: {\n groupedModel,\n parentModel: datamodel\n }\n };\n};\n","import { VisualUnit } from '@chartshq/visual-unit';\nimport {\n initializeCacheMaps,\n headerCreator,\n extractUnitConfig,\n setFacetsAndProjections\n} from './group-utils';\nimport {\n ROW, COL, LEFT, RIGHT, COLOR, SIZE, SHAPE, DETAIL, CELL, X_AXES, Y_AXES, ENTRY_CELLS, EXIT_CELLS, INITIALIZED,\n AXIS, UNIT, BEFORE_UPDATE, UPDATED, VALUE_MATRIX, FACET_HEADERS\n} from '../enums/constants';\nimport { createValueCells, computeMatrices } from './cell-creator';\n/**\n * Resolves the matrices from configuration provided\n *\n * @export\n * @class MatrixResolver\n */\nexport default class MatrixResolver {\n\n /**\n * Creates an instance of MatrixResolver.\n * @param {Object} dependencies needed to run the resolver\n * @memberof MatrixResolver\n */\n constructor (dependencies) {\n this._registry = {};\n this._layerConfig = [];\n this._matrixLayers = [];\n this._dependencies = dependencies;\n this._rowMatrix = [];\n this._columnMatrix = [];\n this._valueMatrix = [];\n this._facets = {};\n this._projections = {};\n this._datamodelTransform = {};\n this._units = [];\n this._cacheMaps = {};\n this._axes = {\n x: {},\n y: {},\n color: [],\n size: [],\n shape: []\n };\n\n this.cacheMaps(initializeCacheMaps());\n }\n\n /**\n * Set: Registers placeholders, Get: return {Object} those placeholders\n *\n * @param {Object} placeholders cells that will construct the group\n * @return {Object} Either current instance or the set of placeholders\n * @memberof MatrixResolver\n */\n registry (...placeholders) {\n if (placeholders.length) {\n Object.entries(placeholders[0]).forEach((val) => {\n this._registry[val[0]] = val[1];\n });\n return this;\n }\n return this._registry;\n }\n\n /**\n * Used to set the layer config from outside or get current layer info\n *\n * @param {Object} type configuration of layer provided externally\n * @return {Object} either the layer or current instance\n * @memberof MatrixResolver\n */\n dependencies (...dep) {\n if (dep.length) {\n this._dependencies = dep[0];\n return this;\n }\n return this._dependencies;\n }\n\n /**\n * Used to set the layer config from outside or get current layer info\n *\n * @param {Object} type configuration of layer provided externally\n * @return {Object} either the layer or current instance\n * @memberof MatrixResolver\n */\n units (...unitArr) {\n if (unitArr.length) {\n this._units = unitArr[0];\n return this;\n }\n return this._units;\n }\n\n /**\n * Used to set the layer config from outside or get current layer info\n *\n * @param {Object} layer configuration of layer provided externally\n * @return {Object} either the layer or current instance\n * @memberof MatrixResolver\n */\n layerConfig (...config) {\n if (config.length) {\n this._layerConfig = config[0];\n return this;\n }\n return this._layerConfig;\n }\n\n /**\n * Used to set the layer config from outside or get current layer info\n *\n * @param {Object} type configuration of layer provided externally\n * @return {Object} either the layer or current instance\n * @memberof MatrixResolver\n */\n matrixLayers (...layers) {\n if (layers.length) {\n this._matrixLayers = layers[0];\n return this;\n }\n return this._matrixLayers;\n }\n\n /**\n * Used to set the layer config from outside or get current layer info\n *\n * @param {Object} type configuration of layer provided externally\n * @return {Object} either the layer or current instance\n * @memberof MatrixResolver\n */\n datamodelTransform (...transform) {\n if (transform.length) {\n this._datamodelTransform = transform[0];\n return this;\n }\n return this._datamodelTransform;\n }\n\n /**\n * Used to set the layer config from outside or get current layer info\n *\n * @param {Object} type configuration of layer provided externally\n * @return {Object} either the layer or current instance\n * @memberof MatrixResolver\n */\n cacheMaps (...maps) {\n if (maps.length) {\n [CELL, X_AXES, Y_AXES, ENTRY_CELLS, EXIT_CELLS].forEach((e) => {\n this._cacheMaps[`${e}Map`] = maps[0][`${e}Map`] || this._cacheMaps[`${e}Map`];\n });\n return this;\n }\n return this._cacheMaps;\n }\n\n /**\n * Used to set the layer config from outside or get current layer info\n *\n * @param {Object} type configuration of layer provided externally\n * @return {Object} either the layer or current instance\n * @memberof MatrixResolver\n */\n rowCells (...cells) {\n if (cells.length) {\n this._rowCells = cells[0];\n return this;\n }\n return this._rowCells;\n }\n\n /**\n * Used to set the layer config from outside or get current layer info\n *\n * @param {Object} type configuration of layer provided externally\n * @return {Object} either the layer or current instance\n * @memberof MatrixResolver\n */\n colCells (...cells) {\n if (cells.length) {\n this._colCells = cells[0];\n return this;\n }\n return this._colCells;\n }\n\n /**\n * Used to set the layer config from outside or get current layer info\n *\n * @param {Object} type configuration of layer provided externally\n * @return {Object} either the layer or current instance\n * @memberof MatrixResolver\n */\n axes (...axes) {\n if (axes.length) {\n this._axes = Object.assign({}, this._axes, axes[0]);\n return this;\n }\n return this._axes;\n }\n\n /**\n * Used to set the layer config from outside or get current layer info\n *\n * @param {Object} type configuration of layer provided externally\n * @return {Object} either the layer or current instance\n * @memberof MatrixResolver\n */\n rowMatrix (...rowMat) {\n if (rowMat.length) {\n this._rowMatrix = rowMat[0];\n return this;\n }\n return this._rowMatrix;\n }\n\n /**\n * Used to set the layer config from outside or get current layer info\n *\n * @param {Object} type configuration of layer provided externally\n * @return {Object} either the layer or current instance\n * @memberof MatrixResolver\n */\n columnMatrix (...colMat) {\n if (colMat.length) {\n this._columnMatrix = colMat[0];\n return this;\n }\n return this._columnMatrix;\n }\n\n /**\n * Used to set the layer config from outside or get current layer info\n *\n * @param {Object} type configuration of layer provided externally\n * @return {Object} either the layer or current instance\n * @memberof MatrixResolver\n */\n valueMatrix (...valMat) {\n if (valMat.length) {\n this._valueMatrix = valMat[0];\n return this;\n }\n return this._valueMatrix;\n }\n\n /**\n *\n *\n * @param {*} facets\n * @return\n * @memberof MatrixResolver\n */\n facets (...facets) {\n if (facets.length) {\n Object.entries(facets[0]).forEach((e) => {\n this._facets[e[0]] = e[1];\n });\n return this;\n }\n return this._facets;\n }\n\n /**\n *\n *\n * @param {*} projections\n * @return\n * @memberof MatrixResolver\n */\n projections (...projections) {\n if (projections.length) {\n Object.entries(projections[0]).forEach((e) => {\n this._projections[e[0]] = e[1];\n });\n return this;\n }\n return this._projections;\n }\n\n /**\n *\n *\n * @param {*} config\n * @param {*} layerConfig\n * @return\n * @memberof MatrixResolver\n */\n optionalProjections (config, layerConfig) {\n const otherEncodings = {};\n const optionalProjections = [];\n const otherEncodingTypes = [SIZE, COLOR, SHAPE];\n\n otherEncodingTypes.forEach((type) => {\n if (config[type] && config[type].field) {\n const enc = config[type];\n otherEncodings[type] = enc.field;\n optionalProjections.push(enc.field);\n }\n });\n\n if (config[DETAIL]) {\n optionalProjections.push(...config.detail);\n }\n\n if (layerConfig.length) {\n layerConfig.forEach((layer) => {\n if (layer.encoding) {\n Object.values(layer.encoding).forEach((enc) => {\n if (enc && optionalProjections.indexOf(enc.field) === -1) {\n optionalProjections.push(enc.field ? enc.field : enc);\n }\n });\n }\n });\n }\n this.projections({ optionalProjections });\n return otherEncodings;\n }\n\n /**\n * return the normalized set of rows and facets and projections\n *\n * @param {Object} rows parameters needed to set horizontal axis consisiting of rows\n * @return {Object} facets, projections and normalized rows\n * @memberof MatrixResolver\n */\n horizontalAxis (rows, encoder) {\n if (rows) {\n this._horizontalAxis = setFacetsAndProjections(this, { type: ROW, fields: rows }, encoder);\n return this;\n }\n return this._horizontalAxis;\n }\n\n /**\n * return the normalized set of columns and facets and projections\n *\n * @param {Object} columns parameters needed to set vertical axis consisiting of columns\n * @return {Object} facets, projections and normalized columns\n * @memberof MatrixResolver\n */\n verticalAxis (columns, encoder) {\n if (columns) {\n this._verticalAxis = setFacetsAndProjections(this, { type: COL, fields: columns }, encoder);\n return this;\n }\n return this._verticalAxis;\n }\n\n /**\n * Gets the class definition of a particular cell type(if the particular type has been extended, that particular\n * definition is returned)\n *\n * @param {Object} cell cell whose class definition is to be retrieved\n * @return {Object} cell definition\n * @memberof MatrixResolver\n */\n getCellDef (cell) {\n const registry = this.registry();\n\n Object.values(registry).forEach((e) => {\n if (e.prototype instanceof cell) {\n cell = e;\n }\n });\n return cell;\n }\n\n /**\n * return a visual cell creator along with its axis information to be injected to the datamodel creation\n * function\n *\n * @param {Object} GeomCell Type of cell to be created\n * @return {Object} Created cell\n * @memberof MatrixResolver\n */\n valueCellsCreator (context) {\n // reset matrix layers\n this.matrixLayers([]);\n\n return (datamodel, fieldInfo, facets) => createValueCells(context, datamodel, fieldInfo, facets);\n }\n\n /**\n * Callback to be applied on each cell of a matrix of a particular type\n *\n * @param {string} matrixType type of matrix on which callback is to be applied\n * @param {Function} callback function to be applied to each cell\n * @memberof MatrixResolver\n */\n forEach (matrixType, callback) {\n this[matrixType]().forEach((row, rIndex) => {\n row.forEach((col, cIndex) => {\n callback(rIndex, cIndex, col);\n });\n });\n }\n\n /**\n *\n *\n * @return\n * @memberof MatrixResolver\n */\n getAllFields () {\n const retObj = this.projections();\n\n Object.entries(this.facets()).forEach((e) => {\n retObj[e[0]] = e[1];\n });\n return retObj;\n }\n\n /**\n *\n *\n * @memberof MatrixResolver\n */\n resetSimpleAxes () {\n return this.axes({\n x: new Set(),\n y: new Set()\n });\n }\n\n /**\n *\n *\n * @param {*} componentRegistry\n * @param {*} config\n * @memberof MatrixResolver\n */\n createUnits (componentRegistry, config) {\n const {\n globalConfig,\n alias\n } = config;\n const {\n layerRegistry,\n sideEffectRegistry\n } = componentRegistry;\n const {\n smartlabel: smartLabel,\n lifeCycleManager\n } = this.dependencies();\n // Provide the source for the matrix\n const units = [];\n // Setting unit configuration\n const unitConfig = extractUnitConfig(globalConfig || {});\n\n this.forEach(VALUE_MATRIX, (i, j, el) => {\n let unit = el.source();\n if (!unit) {\n unit = VisualUnit.create({\n layerRegistry,\n sideEffectRegistry\n }, {\n smartLabel,\n lifeCycleManager\n });\n el.source(unit);\n units.push(unit);\n }\n unit.parentAlias(alias);\n el.config(unitConfig);\n });\n\n lifeCycleManager.notify({ client: units, action: INITIALIZED, formalName: UNIT });\n return this.units(units);\n }\n\n /**\n *\n *\n * @param {*} config\n * @memberof MatrixResolver\n */\n setDomains (config, datamodel, encoders) {\n const {\n color,\n shape,\n size,\n globalConfig\n } = config;\n const groupBy = globalConfig.autoGroupBy;\n const {\n rowFacets,\n colFacets\n } = this.getAllFields();\n const encoding = {\n color,\n shape,\n size\n };\n const facetFields = [...rowFacets.map(e => e.toString()), ...colFacets.map(e => e.toString())];\n const retContext = {\n domains: encoders.simpleEncoder.getRetinalFieldsDomain(datamodel, encoding, facetFields, groupBy),\n axes: this.axes(),\n encoding\n };\n encoders.retinalEncoder.setCommonDomain(retContext);\n return this;\n }\n\n /**\n *\n *\n * @return\n * @memberof MatrixResolver\n */\n getRetinalAxes () {\n const {\n color,\n shape,\n size\n } = this.axes();\n\n return {\n color: [...color],\n shape: [...shape],\n size: [...size]\n };\n }\n\n /**\n *\n *\n * @param {*} type\n * @return\n * @memberof MatrixResolver\n */\n getSimpleAxes (type) {\n return this.axes()[`${type}`];\n }\n\n /**\n *\n *\n * @param {*} datamodel\n * @param {*} config\n * @memberof MatrixResolver\n */\n createRetinalAxes (fieldsConfig, config, encoders) {\n const layerConfig = this.layerConfig();\n this.optionalProjections(config, layerConfig);\n const retinalAxes = encoders.retinalEncoder.createAxis({\n fieldsConfig,\n config,\n axes: this.axes()\n });\n const {\n lifeCycleManager\n } = this.dependencies();\n\n [COLOR, SHAPE, SIZE].forEach((e) => {\n this.axes()[e] = retinalAxes[e];\n });\n\n lifeCycleManager.notify({ client: this.axes(), action: INITIALIZED, formalName: AXIS });\n lifeCycleManager.notify({ client: this.units(), action: BEFORE_UPDATE, formalName: UNIT });\n\n const units = [];\n const matrixLayers = this.matrixLayers();\n\n this.forEach(VALUE_MATRIX, (i, j, el) => {\n el.axes(retinalAxes);\n el.source() && el.source().retinalFields(config);\n el.layerDef(encoders.retinalEncoder.getLayerConfig(config, matrixLayers[i][j]));\n el.updateModel();\n\n units.push(el.source());\n });\n\n lifeCycleManager.notify({ client: units, action: UPDATED, formalName: UNIT });\n return this;\n }\n\n /**\n *\n *\n * @param {*} placeholders\n * @param {*} fieldNames\n * @return\n * @memberof MatrixResolver\n */\n createHeaders (placeholders, fieldNames) {\n let bottomLeft = [];\n let bottomRight = [];\n const {\n rows,\n columns\n } = placeholders;\n const {\n smartlabel: labelManager,\n lifeCycleManager\n } = this.dependencies();\n const TextCell = this.getCellDef(this.registry().TextCell);\n const BlankCell = this.getCellDef(this.registry().BlankCell);\n const [leftRows, rightRows] = rows;\n const [topCols, bottomCols] = columns;\n const rowHeaders = fieldNames.rows;\n // Headers and footers are created based on the rows. Thereafter, using the column information\n // they are tabularized into the current structure\n const headers = {\n left: headerCreator(leftRows, rowHeaders[0], TextCell, labelManager),\n right: headerCreator(rightRows, rowHeaders[1], TextCell, labelManager)\n };\n const footers = {\n left: leftRows.length > 0 ? leftRows[0].map(() => new BlankCell()) : [],\n right: rightRows.length > 0 ? rightRows[0].map(() => new BlankCell()) : []\n };\n const [topLeft, topRight] = [LEFT, RIGHT].map(type => topCols.map((col, i) => {\n if (i === topCols.length - 1) {\n return headers[type];\n }\n return footers[type];\n }));\n\n // Creating only bottom matrices if there is no information on the top\n if (topCols.length === 0) {\n [bottomLeft, bottomRight] = [LEFT, RIGHT].map(type => bottomCols.map((col, i) => {\n if (i === 0) {\n return headers[type];\n }\n return footers[type];\n }));\n } else {\n bottomLeft = bottomCols.map(() => (leftRows.length > 0 ? leftRows[0].map(() => new BlankCell()) : []));\n bottomRight = bottomCols.map(() => (rightRows.length > 0 ? rightRows[0].map(() => new BlankCell()) : []));\n }\n\n lifeCycleManager.notify({\n client: [topLeft, topRight, bottomLeft, bottomRight],\n action: INITIALIZED,\n formalName: FACET_HEADERS\n });\n\n return { topLeft, topRight, bottomLeft, bottomRight };\n }\n\n /**\n *\n *\n * @param {*} datamodel\n * @param {*} config\n * @param {*} componentRegistry\n * @param {*} encoders\n * @return\n * @memberof MatrixResolver\n */\n getMatrices (datamodel, config, componentRegistry, encoders) {\n const context = {\n datamodel,\n componentRegistry,\n encoders,\n resolver: this\n };\n\n return computeMatrices(context, config);\n }\n}\n","/**\n *\n *\n * @export\n * @class ValueMatrix\n */\nclass ValueMatrix {\n\n /**\n *Creates an instance of ValueMatrix.\n * @param {*} matrixArr\n * @memberof ValueMatrix\n */\n constructor (matrixArr) {\n const instancesById = {};\n\n this.matrix(matrixArr);\n this.filter(() => true);\n\n this.each((el, rIdx, cIdx) => {\n const cellValue = el.valueOf();\n if (cellValue && cellValue.id) {\n const id = cellValue.id();\n instancesById[id] = {\n instance: cellValue,\n rowIndex: rIdx,\n colIndex: cIdx\n };\n }\n });\n\n this.instancesById(instancesById);\n }\n\n /**\n *\n *\n * @param {*} id\n * @return\n * @memberof ValueMatrix\n */\n instancesById (...id) {\n if (id.length) {\n this._instancesById = id[0];\n return this;\n }\n return this._instancesById;\n }\n\n /**\n *\n *\n * @param {*} m\n * @return\n * @memberof ValueMatrix\n */\n matrix (...matrix) {\n if (matrix.length) {\n this._matrix = matrix[0];\n return this;\n }\n return this._matrix;\n }\n\n /**\n *\n *\n * @param {*} fn\n * @return\n * @memberof ValueMatrix\n */\n filter (...fn) {\n if (fn.length) {\n this._filterFn = fn[0];\n return this;\n }\n return this._filterFn;\n }\n\n /**\n *\n *\n * @return\n * @memberof ValueMatrix\n */\n width () {\n let rowWidth = 0;\n\n this.matrix().forEach((row) => {\n let currentRowWidth = 0;\n row.forEach((cell) => {\n currentRowWidth += cell.getLogicalSpace().width;\n });\n rowWidth = Math.max(rowWidth, currentRowWidth);\n });\n return rowWidth;\n }\n\n /**\n *\n *\n * @return\n * @memberof ValueMatrix\n */\n height () {\n let rowHeight = 0;\n\n this.matrix().forEach((row) => {\n let currentRowHeight = 0;\n row.forEach((cell) => {\n currentRowHeight = Math.max(currentRowHeight, cell.getLogicalSpace().height);\n });\n rowHeight += currentRowHeight;\n });\n return rowHeight;\n }\n\n /**\n *\n *\n * @param {*} fn\n * @return\n * @memberof ValueMatrix\n */\n each (fn) {\n const matrix = this.matrix();\n const filterFn = this.filter();\n\n matrix.forEach((row, rIndex) => {\n row.forEach((col, cIndex) => {\n if (filterFn(col)) {\n fn(col, rIndex, cIndex, matrix);\n }\n });\n });\n return this;\n }\n\n /**\n *\n *\n * @param {*} id\n * @return\n * @memberof ValueMatrix\n */\n findPlaceHolderById (id) {\n return this.instancesById()[id];\n }\n\n /**\n *\n *\n * @return\n * @memberof ValueMatrix\n */\n getMatrixArray () {\n return this.matrix();\n }\n}\n\nexport default ValueMatrix;\n","import { RetinalEncoder } from '../encoder';\nimport { DATA_UPDATE_COUNTER } from '../enums/defaults';\nimport { getEncoder, getBorders } from '../group-helper';\nimport ValueMatrix from './value-matrix';\nimport localOptions from './local-options';\n\nconst sanitizeRetinalConfig = (retinalConf) => {\n const conf = {};\n for (const key in retinalConf) {\n const confValue = retinalConf[key];\n if (typeof confValue === 'string' || !confValue) {\n conf[key] = {\n field: retinalConf[key]\n };\n } else {\n conf[key] = confValue;\n }\n }\n return conf;\n};\n\n/**\n *\n *\n * @param {*} placeholder\n * @memberof VisualGroup\n */\nconst setMatrixInstances = (context, placeholder) => {\n context._composition.matrices = {\n value: new ValueMatrix(placeholder.values),\n left: new ValueMatrix(placeholder.rows[0]),\n right: new ValueMatrix(placeholder.rows[1]),\n top: new ValueMatrix(placeholder.columns[0]),\n bottom: new ValueMatrix(placeholder.columns[1])\n };\n return context;\n};\n\n/**\n *\n *\n * @param {*} context\n * @returns\n */\nexport const setupChangeListeners = (context) => {\n context.store().registerImmediateListener([...Object.keys(localOptions), DATA_UPDATE_COUNTER], (...params) => {\n const datamodel = context.data();\n const [config, rows, columns, color, shape, size, detail, layers, transform] = params;\n\n if (datamodel && rows[1] && columns[1]) {\n // Get the resolver for the matrices\n const resolver = context.resolver();\n // Prepare configuration for matrix preparation\n let matrixConfig = {\n selection: context.selection(),\n alias: context.alias(),\n globalConfig: config[1] || {},\n rows: rows[1],\n columns: columns[1],\n detail: detail[1],\n layers: layers[1],\n transform: transform[1]\n };\n\n const retinalConfig = sanitizeRetinalConfig({\n color: color[1],\n shape: shape[1],\n size: size[1]\n });\n\n matrixConfig = Object.assign(matrixConfig, retinalConfig);\n // Create the encoders for the group\n const encoders = {};\n encoders.retinalEncoder = new RetinalEncoder();\n encoders.simpleEncoder = getEncoder(layers[1]);\n\n // Set the group type\n context.groupType(encoders.simpleEncoder.constructor.type());\n\n // Get sanitized fields as instances of the Vars Class\n const fields = encoders.simpleEncoder.fieldSanitizer(datamodel, matrixConfig);\n encoders.simpleEncoder.setAxisAndHeaders(config[1] ? config[1].axisFrom : {}, fields);\n // Setting layers for the code\n layers[1] && resolver.layerConfig(layers[1]);\n // Set the row and column axes\n resolver.horizontalAxis(fields.rows, encoders).verticalAxis(fields.columns, encoders);\n // Getting the placeholders\n const placeholderInfo = resolver.getMatrices(datamodel, matrixConfig, context.registry(), encoders);\n context._groupedDataModel = placeholderInfo.dataModels.groupedModel;\n // Set the selection object\n context.selection(placeholderInfo.selection);\n\n // Create retinal axes\n resolver.createRetinalAxes(placeholderInfo.dataModels.parentModel.getFieldsConfig(), retinalConfig,\n encoders);\n\n // Domains are evaluated for each of the axes for commonality\n resolver.setDomains(matrixConfig, placeholderInfo.dataModels, encoders);\n\n // Create matrix instances\n setMatrixInstances(context, placeholderInfo);\n\n // Prepare corner matrices\n context.cornerMatrices(resolver.createHeaders(placeholderInfo, fields));\n\n // Set placeholder information\n context.placeholderInfo(placeholderInfo);\n\n context._composition.axes = resolver.axes();\n context.metaData({\n border: getBorders(placeholderInfo, encoders.simpleEncoder)\n });\n }\n return context;\n });\n return context;\n};\n","import { DATA_UPDATE_COUNTER } from '../enums/defaults';\n\nexport const PROPS = {\n alias: {},\n data: {\n sanitization: (context, value) => {\n if (context._data !== value) {\n const store = context.store();\n let hasDataUpdated = store.get(DATA_UPDATE_COUNTER);\n store.commit(DATA_UPDATE_COUNTER, ++hasDataUpdated);\n }\n return value;\n }\n },\n cornerMatrices: {},\n groupType: {},\n matrixInstance: {},\n metaData: {},\n placeholderInfo: {},\n resolver: {},\n registry: {\n sanitization: (context, value) => {\n if (context.resolver) {\n context.resolver().registry(value.cellRegistry);\n }\n return value;\n }\n },\n selection: {},\n store: {}\n};\n","import { transactor, generateGetterSetters } from 'muze-utils';\nimport localOptions from './local-options';\nimport { SimpleGroup } from '../simple-group';\nimport {\n MatrixResolver,\n initStore,\n findInGroup\n} from '../group-helper';\nimport { setupChangeListeners } from './change-listener';\nimport { PROPS } from './props';\nimport {\n CONFIG,\n MOUNT,\n RETINAL,\n Y\n} from '../enums/constants';\n\n/**\n * This class is used to create an instance of a visual group.\n * It extends the SimpleGroup (which is an interface). The visual group takes in a datamodel,\n * and a set of rows and columns, alongwith optional paramters (like color, size, shape).\n *\n * @class VisualGroup\n */\nclass VisualGroup extends SimpleGroup {\n\n /**\n * Creates an instance of VisualGroup. Requires dependencies and other registry options for placeholders\n * and layers that create individual units\n * @param {Object} registry Key value pair of compostions for the group\n * @param {Object} dependencies Dependencies needed to run the group\n * @memberof VisualGroup\n */\n constructor (registry, dependencies) {\n super();\n\n const {\n componentSubRegistry\n } = registry;\n\n this._dependencies = dependencies;\n // Generate getter/setter methods for all properties of the class\n // One can get each property by calling the method and can set it\n // by passing paramaters for the same. Thus, one can chain setter\n // getter methods.\n generateGetterSetters(this, PROPS);\n // Populate the store with default values\n this.store(initStore());\n\n // initialize group compositions\n this._composition = {};\n // store reference to data\n this._data = [];\n // matrix instance store each of the matrices\n this._matrixInstance = {};\n // store reference to mountpoint\n this._mount = null;\n // selection object that takes care of updating of components\n this._selection = {};\n // stores info about the placeholders generated after creation of matrices\n this._placeholderInfo = {};\n // corner matrices are the headers/footers for the application\n this._cornerMatrices = {};\n // Create instance of matrix resolver\n this.resolver(new MatrixResolver(this._dependencies));\n\n // Getting indiviual registered items\n this.registry({\n layerRegistry: componentSubRegistry.layerRegistry.get(),\n cellRegistry: componentSubRegistry.cellRegistry.get()\n });\n // Add local options to the store\n transactor(this, localOptions, this.store().model);\n // Register listeners\n setupChangeListeners(this);\n }\n\n matrixInstance (...matrices) {\n if (matrices.length) {\n return this;\n }\n return this.composition().matrices;\n }\n\n /**\n * Returns the composition of the Group\n *\n * @readonly\n * @memberof VisualGroup\n */\n composition (...params) {\n if (params.length) {\n return this;\n }\n return this._composition;\n }\n\n /**\n * Locks the model to prevent change listeners to be triggered until unlocked\n *\n * @return {Object} Instance of class VisualGroup\n * @memberof VisualGroup\n */\n lockModel () {\n this.store().model.lock();\n return this;\n }\n\n /**\n * Unlocks the model so that all change listeners can be triggered\n *\n * @return {Object} Instance of class VisualGroup\n * @memberof VisualGroup\n */\n unlockModel () {\n this.store().model.unlock();\n return this;\n }\n\n /**\n *\n *\n * @param {*} variable\n * @return\n * @memberof VisualGroup\n */\n where (variable) {\n return findInGroup(variable, this.resolver().getAllFields());\n }\n\n /**\n *\n *\n * @param {*} type\n * @return\n * @memberof VisualGroup\n */\n getAxes (type) {\n if (type === RETINAL) {\n return this.resolver().getRetinalAxes();\n }\n return this.resolver().getSimpleAxes(type);\n }\n\n /**\n *\n *\n * @return\n * @memberof VisualGroup\n */\n getCells (type) {\n return this.resolver()[`${type}Cells`]();\n }\n\n /**\n *\n *\n * @param {*} channel\n * @return\n * @memberof VisualGroup\n */\n getFieldsFromChannel (channel) {\n const {\n rowProjections,\n colProjections\n } = this.resolver().getAllFields();\n\n return channel === Y ? rowProjections : colProjections;\n }\n\n /**\n *\n *\n * @param {*} facetKey\n * @return\n * @memberof VisualGroup\n */\n getCellsByFacetKey (facetKey) {\n const resolver = this.resolver();\n const cells = resolver.rowCells()[facetKey] || resolver.colCells()[facetKey] || [];\n return cells;\n }\n\n /**\n *\n *\n * @param {*} facetKey\n * @return\n * @memberof VisualGroup\n */\n getAxesByFacetKey (axisType, facetKey) {\n const resolver = this.resolver();\n const cells = resolver.rowCells()[facetKey] || resolver.colCells()[facetKey];\n const axes = cells[0].valueOf().axes()[axisType] || [];\n\n return axes;\n }\n\n /**\n * This method is used to return a serialized representation of the instance's properties.\n *\n * @return {Object} Object with config proprties.\n * @memberof VisualGroup\n */\n serialize () {\n const store = this.store();\n\n return {\n [CONFIG]: store.get(CONFIG),\n [MOUNT]: store.get(MOUNT)\n };\n }\n\n getGroupByData () {\n return this._groupedDataModel;\n }\n}\n\nexport default VisualGroup;\n","import { PersistentBehaviour, SELECTION } from '@chartshq/muze-firebolt';\n\nexport default class SelectBehaviour extends PersistentBehaviour {\n static formalName () {\n return 'select';\n }\n\n setSelectionSet (addSet, selectionSet) {\n if (addSet === null) {\n selectionSet.reset();\n } else if (addSet.length) {\n // new add set\n const existingRemoveSet = addSet.filter(d => selectionSet._set[d] === SELECTION.SELECTION_OLD_EXIT\n || selectionSet._set[d] === SELECTION.SELECTION_NEW_EXIT);\n // existing add set\n if (existingRemoveSet.length) {\n selectionSet.updateEntry();\n selectionSet.add(existingRemoveSet);\n } else {\n selectionSet.updateExit();\n selectionSet.remove(addSet);\n }\n const { exitSet } = selectionSet.getSets();\n const mergedExitSet = [...new Set(exitSet[1]), ...new Set(exitSet[0])];\n const completeSetCount = selectionSet.getCompleteSet().length;\n if (exitSet[1].length !== completeSetCount && mergedExitSet.length === completeSetCount) {\n selectionSet.reset();\n }\n } else {\n selectionSet.remove(selectionSet.getCompleteSet());\n }\n return this;\n }\n}\n","import { BEHAVIOURS, ACTIONS } from '@chartshq/muze-firebolt';\n\nconst CLASSPREFIX = 'muze';\n\nexport const actionBehaviourMap = {\n [ACTIONS.DRAG]: {\n target: `.${CLASSPREFIX}-gradient-rect`,\n behaviours: [BEHAVIOURS.BRUSH]\n },\n [ACTIONS.HOVER]: {\n target: [`.${CLASSPREFIX}-legend-columns`],\n behaviours: [BEHAVIOURS.HIGHLIGHT]\n },\n [ACTIONS.CLICK]: {\n target: [`.${CLASSPREFIX}-legend-columns`],\n behaviours: [BEHAVIOURS.SELECT]\n }\n};\n\nexport const propagationBehaviourMap = {\n [BEHAVIOURS.SELECT]: BEHAVIOURS.FILTER,\n [BEHAVIOURS.BRUSH]: BEHAVIOURS.HIGHLIGHT\n};\n","import * as BEHAVIOURS from '../enums/behaviours';\nimport * as sideEffects from '../enums/side-effects';\n\nexport const behaviourEffectMap = {\n [BEHAVIOURS.BRUSH]: [sideEffects.SELECTIONBOX, {\n name: sideEffects.Highlighter,\n options: {\n strategy: 'fade'\n }\n }],\n [BEHAVIOURS.HIGHLIGHT]: [sideEffects.Highlighter],\n select: [{\n name: sideEffects.Highlighter,\n options: {\n strategy: 'fade'\n }\n }]\n};\n\nexport const propagationSideEffects = {\n [BEHAVIOURS.BRUSH]: [{\n name: sideEffects.Highlighter,\n options: {\n strategy: 'fade'\n }\n }],\n [BEHAVIOURS.HIGHLIGHT]: [{\n name: sideEffects.Highlighter,\n options: {\n strategy: 'fade'\n }\n }],\n [BEHAVIOURS.SELECT]: ['filter']\n};\n\n","export const BRUSH = 'brush';\nexport const HIGHLIGHT = 'highlight';\nexport const TOOLTIP = 'tooltip';\nexport const FILTER = 'filter';\nexport const SELECT = 'select';\n\n","export const SELECTIONBOX = 'selectionBox';\nexport const Highlighter = 'highlighter';\n\n","export const CLASSPREFIX = 'muze';\nexport const IDFIELD = '__id__';\nexport const CONFIG = 'config';\nexport const DATAMODEL = 'dataModel';\nexport const AXES = 'axes';\nexport const LAYERDEFS = 'layerDef';\nexport const WIDTH = 'width';\nexport const HEIGHT = 'height';\nexport const MOUNTPOINT = 'mountPoint';\nexport const GRIDLINEPARENTGROUPCLASS = 'grid-lines';\nexport const TRANSFORM = 'transform';\nexport const CONSOLIDATED = 'consolidated';\nexport const FRAGMENTED = 'fragmented';\nexport const DEFAULTCOLOR = '#F44336';\nexport const DEFAULTSIZE = 50;\nexport const DEFAULTSHAPE = 'circle';\nexport const STEP = 'step';\nexport const GRADIENT = 'gradient';\nexport const ORDINAL = 'ordinal';\nexport const SCALE_FUNCTIONS = {\n size: 'getSize',\n shape: 'getShape',\n color: 'getColor'\n};\nexport const TOP = 'top';\nexport const LEFT = 'left';\nexport const RIGHT = 'right';\nexport const BOTTOM = 'bottom';\nexport const HORIZONTAL = 'horizontal';\nexport const VERTICAL = 'vertical';\nexport const CENTER = 'center';\nexport const VALUE = 'value';\nexport const PATH = 'path';\nexport const SHAPE = 'shape';\nexport const ICON = 'icon';\nexport const RECT = 'rect';\nexport const START = 'start';\nexport const UPPER = 'upper';\nexport const LOWER = 'lower';\nexport const END = 'end';\nexport const SIZE = 'size';\nexport const DISCRETE = 'discrete';\nexport const MEASURE = 'measure';\n\n","import { assembleModelFromIdentifiers, getDataModelFromRange } from 'muze-utils';\nimport { propagationBehaviourMap } from './action-behaviour-map';\nimport { propagationSideEffects } from './behaviour-effect-map';\nimport { STEP, GRADIENT, DISCRETE, MEASURE } from '../enums/constants';\n\nexport const propagate = (firebolt, action, selectionSet, config = {}) => {\n let propagationData;\n const type = firebolt.context.constructor.type();\n const payload = config.payload;\n const data = firebolt.context.data();\n const metaData = firebolt.context.metaData();\n const fieldType = metaData.getData().schema[0].type;\n\n const propPayload = {};\n const sourceId = firebolt.context._id;\n propPayload.action = propagationBehaviourMap[action] || action;\n propPayload.sideEffects = propagationSideEffects[action];\n propPayload.sourceCanvas = firebolt.context.canvasAlias();\n const isMutableAction = firebolt._actions.behavioural[propPayload.action].constructor.mutates();\n if (payload.criteria === null) {\n propagationData = null;\n } else {\n const entrySet = selectionSet.mergedEnter;\n let values = data.filter(d => entrySet.uids.indexOf(d.id) !== -1).map(d => d.value);\n if (type === STEP || (type === DISCRETE && fieldType === MEASURE)) {\n const field = Object.keys(payload.criteria || {})[0];\n values = data.filter(d => entrySet.uids.indexOf(d.id) !== -1).map(d => d.range);\n propagationData = values.length ? metaData.select((fields) => {\n let check = false;\n for (let i = 0; i < values.length; i++) {\n check = fields[field].value >= values[i][0] && fields[field].value <= values[i][1];\n if (check === true) {\n break;\n }\n }\n return check;\n }, {\n saveChild: false\n }) : null;\n } else if (type === GRADIENT) {\n propagationData = getDataModelFromRange(metaData, payload.criteria);\n } else if (values.length) {\n propagationData = assembleModelFromIdentifiers(metaData, [payload.criteria[0], ...values.map(d => [d])]);\n } else {\n propPayload.criteria = null;\n propagationData = metaData.select(() => true, {\n saveChild: false\n });\n }\n }\n\n let propagateInterpolatedValues = false;\n\n if (propagationData) {\n const schema = propagationData.getSchema();\n propagateInterpolatedValues = schema.every(d => d.type === fieldType.MEASURE);\n }\n\n const propConfig = {\n sourceId: `legend-${sourceId}`,\n payload: propPayload,\n criteria: propPayload.criteria === null ? null : propagationData,\n isMutableAction,\n propagateInterpolatedValues,\n action: propPayload.action\n };\n\n metaData.propagate(propagationData, propConfig, true);\n};\n","import { Firebolt } from '@chartshq/muze-firebolt';\nimport { propagate } from './helper';\nimport { STEP, GRADIENT } from '../enums/constants';\n\n/**\n * This class manages the interactions of legend.\n * @export\n * @class LegendFireBolt\n * @extends {Firebolt}\n */\nexport class LegendFireBolt extends Firebolt {\n constructor (...params) {\n super(...params);\n this.initializeSideEffects();\n }\n\n getPropagationSelectionSet (selectionSet) {\n return selectionSet[0];\n }\n\n propagate (behaviourName, payload, selectionSet) {\n propagate(this, behaviourName, selectionSet, {\n payload\n });\n }\n\n getAddSetFromCriteria (criteria) {\n let values;\n let uniqueIds;\n const type = this.context.constructor.type();\n\n if (criteria === null) {\n uniqueIds = null;\n } else if (type === STEP) {\n values = Object.values(criteria);\n uniqueIds = this.context.data().filter(d => values.indexOf(d.range) !== -1).map(d => d.id);\n } else if (type === GRADIENT) {\n uniqueIds = [];\n } else {\n values = criteria[1];\n if (values) {\n uniqueIds = this.context.data().filter(d => values.indexOf(d.value) !== -1).map(d => d.id);\n } else {\n values = Object.values(criteria);\n uniqueIds = this.context.data().filter(d => values.indexOf(d.range) !== -1).map(d => d.id);\n }\n }\n return {\n uids: uniqueIds,\n model: null\n };\n }\n\n getFullData () {\n return null;\n }\n}\n","import {\n getEvent,\n getD3Drag\n } from 'muze-utils';\n\n/**\n * Adds dragging action to the target element.\n * @param {firebolt} firebolt firebolt\n * @param {SVGElement} targetEl Element on which brushing action is needed.\n * @param {Array} behaviours Array of behaviours\n */\n/* istanbul ignore next */ const drag = firebolt => (targetEl, behaviours) => {\n let startPos = {};\n let endPos = {};\n let payload;\n const d3Drag = getD3Drag();\n const context = firebolt.context;\n const boundingBox = context.measurement().gradientDimensions;\n const axisType = context.config().align === 'horizontal' ? 'x' : 'y';\n const axisScale = context.axis().source().scale();\n const rangeShifter = axisScale.range()[axisType === 'x' ? 0 : 1];\n\n targetEl.call(d3Drag().on('start', () => {\n const event = getEvent();\n startPos = {\n x: event.x,\n y: event.y\n };\n }).on('drag', () => {\n const event = getEvent();\n\n endPos = {\n x: event.x,\n y: event.y\n };\n endPos.x = Math.max(0, Math.min(endPos.x, boundingBox.width));\n endPos.y = Math.max(0, Math.min(endPos.y, boundingBox.height));\n\n payload = {\n criteria: {\n [context.fieldName()]: [axisScale.invert(startPos[axisType] + rangeShifter * 2),\n axisScale.invert(endPos[axisType] + rangeShifter * 2)].sort((a, b) => a - b)\n }\n };\n behaviours.forEach(behaviour => firebolt.dispatchBehaviour(behaviour, payload));\n }).on('end', () => {\n const event = getEvent();\n\n endPos = {\n x: event.x,\n y: event.y\n };\n endPos.x = Math.max(0, Math.min(endPos.x, boundingBox.width));\n endPos.y = Math.max(0, Math.min(endPos.y, boundingBox.height));\n if (startPos[axisType] === endPos[axisType]) {\n payload = {\n criteria: {}\n };\n } else {\n payload = {\n criteria: {\n [context.fieldName()]: [axisScale.invert(startPos[axisType] + rangeShifter * 2),\n axisScale.invert(endPos[axisType] + rangeShifter * 2)].sort((a, b) => a - b)\n }\n };\n }\n behaviours.forEach(behaviour => firebolt.dispatchBehaviour(behaviour, payload));\n }));\n};\n\nexport default drag;\n","/**\n * Adds mouse interactions to target element.\n * @param {Firebolt} Firebolt instance of firebolt.\n * @param {SVGElement} targetEl Element on which the event listeners will be attached.\n * @param {Array} behaviours Array of behaviours\n */\n/* istanbul ignore next */ const hover = firebolt => (targetEl, behaviours) => {\n const dispatchBehaviour = function (args) {\n const payload = {\n criteria: firebolt.context.getCriteriaFromData(args)\n };\n behaviours.forEach(behaviour => firebolt.dispatchBehaviour(behaviour, payload));\n event.stopPropagation();\n };\n\n targetEl.on('mouseover', dispatchBehaviour)\n .on('mousemove', dispatchBehaviour)\n .on('mouseout', () => {\n behaviours.forEach(behaviour => firebolt.dispatchBehaviour(behaviour, {\n criteria: null\n }));\n event.stopPropagation();\n });\n};\n\nexport default hover;\n","/**\n * Adds mouse interactions to target element.\n * @param {VisualUnit} instance instance of visual unit.\n * @param {SVGElement} targetEl Element on which the event listeners will be attached.\n * @param {Array} behaviours Array of behaviours\n */\nconst click = firebolt => (targetEl, behaviours) => {\n const dispatchBehaviour = function (args) {\n const payload = {\n criteria: firebolt.context.getCriteriaFromData(args)\n };\n behaviours.forEach(behaviour => firebolt.dispatchBehaviour(behaviour, payload));\n };\n\n targetEl.on('click', dispatchBehaviour);\n};\n\nexport default click;\n","import drag from './drag';\nimport hover from './hover';\nimport click from './click';\nimport * as ACTIONNAMES from '../../enums/actions';\n\nexport const physicalActions = {\n [ACTIONNAMES.DRAG]: drag,\n [ACTIONNAMES.HOVER]: hover,\n [ACTIONNAMES.CLICK]: click\n};\n\n","export const DRAG = 'drag';\nexport const HOVER = 'hover';\nexport const SELECTIONDRAG = 'selectiondrag';\nexport const CLICK = 'click';\n","import {\n getMousePos,\n getEvent,\n getD3Drag\n } from 'muze-utils';\nimport { HEIGHT, WIDTH, HORIZONTAL } from '../../enums/constants';\n\nconst getSelectionCriteria = (subject, axis, measures) => {\n let criteria = [];\n const {\n axisScale,\n axisType\n } = axis;\n const {\n startPos,\n endPos,\n selectionBoxMeasure,\n drawingInfMeasure,\n offset\n } = measures;\n const subjectStartPoint = subject[axisType];\n\n if (startPos[axisType] === endPos[axisType]) {\n criteria = [];\n } else if (subjectStartPoint + selectionBoxMeasure >= drawingInfMeasure + offset) {\n criteria = [axisScale.invert(drawingInfMeasure + offset - selectionBoxMeasure),\n axisScale.invert(drawingInfMeasure + offset)];\n } else if (subjectStartPoint - offset < offset) {\n criteria = [axisScale.invert(offset * 2), axisScale.invert(selectionBoxMeasure + offset * 2)];\n } else {\n criteria = [axisScale.invert(subjectStartPoint), axisScale.invert(subjectStartPoint + selectionBoxMeasure)];\n }\n axisType === 'x' ? criteria : criteria.reverse();\n return criteria;\n};\n\nexport const selectionBoxDrag = firebolt => (targetEl, behaviours) => {\n let startPos = {};\n let payload;\n const endPos = {};\n const d3Drag = getD3Drag();\n const context = firebolt.context;\n const axisScale = context.axis().source().scale();\n const axisType = context.config().align === HORIZONTAL ? 'x' : 'y';\n const drawingInfMeasure = context.measurement().gradientDimensions[axisType === 'x' ?\n WIDTH : HEIGHT];\n const offset = axisScale.range()[axisType === 'x' ? 0 : 1];\n const measures = {\n drawingInfMeasure,\n offset\n };\n let subject = {};\n\n targetEl.call(d3Drag().on('start', function () {\n const event = getEvent();\n startPos = getMousePos(this, event.sourceEvent);\n subject = event.subject;\n }).on('drag', () => {\n const event = getEvent();\n const selectionBoxMeasure = subject[axisType === 'x' ? WIDTH : HEIGHT];\n\n subject.x += event.dx;\n subject.y += event.dy;\n\n measures.selectionBoxMeasure = selectionBoxMeasure;\n measures.startPos = startPos;\n measures.endPos = endPos;\n const criteria = getSelectionCriteria(subject, { axisScale, axisType }, measures);\n\n payload = {\n criteria: {\n [context.fieldName()]: criteria\n },\n fadeOut: true\n };\n firebolt.dispatchBehaviour(behaviours[0], payload);\n }).on('end', () => {\n const event = getEvent();\n const selectionBoxMeasure = subject[axisType === 'x' ? WIDTH : HEIGHT];\n measures.selectionBoxMeasure = selectionBoxMeasure;\n measures.startPos = startPos;\n measures.endPos = endPos;\n const criteria = getSelectionCriteria(event, { axisScale, axisType }, measures);\n payload = {\n criteria: {\n [context.fieldName()]: criteria\n },\n fadeOut: true,\n config: {\n transition: {\n duration: 200\n }\n }\n };\n firebolt.dispatchBehaviour(behaviours[0], payload);\n }));\n};\n\n","import { makeElement } from 'muze-utils';\nimport { SpawnableSideEffect } from '@chartshq/muze-firebolt';\nimport { CLASSPREFIX, HEIGHT, WIDTH, HORIZONTAL, RECT } from '../../../enums/constants';\nimport { SELECTIONBOX } from '../../../enums/side-effects';\nimport { selectionBoxDrag } from '../../physical/selection-box-drag';\nimport './styles.scss';\n\n/**\n * This class is used to create a selection box which is used by visual unit for brushing and\n * selection in the canvas.\n * @class SelectionBox\n */\n/* istanbul ignore next */ class SelectionBox extends SpawnableSideEffect {\n static formalName () {\n return SELECTIONBOX;\n }\n\n /**\n * It returns the default configuration needed by selectionbox.\n * @return {Object} Default configuration of the selection box.\n */\n static defaultConfig () {\n return {\n className: 'legend-selection-box',\n classPrefix: CLASSPREFIX\n };\n }\n\n /**\n * Draws the selectionbox with the specified dimensions.\n */\n /* istanbul ignore next */ apply (selectionSet, payload) {\n let x;\n let y;\n let width;\n let height;\n const firebolt = this.firebolt;\n const context = firebolt.context;\n const config = this.config();\n const axis = context.axis().source();\n const className = `${config.classPrefix}-${config.className}`;\n\n const domain = payload.criteria[firebolt.context.fieldName()];\n const axisScale = axis.scale();\n const range = domain ? [axis.getScaleValue(domain[0]), axis.getScaleValue(domain[1])] : [];\n\n const axisType = context.config().align === HORIZONTAL ? 'x' : 'y';\n\n const gradientDimension = firebolt.context.measurement().gradientDimensions[axisType === 'x' ?\n HEIGHT : WIDTH];\n\n const rangeShifter = axisScale.range()[axisType === 'x' ? 0 : 1];\n const legendGradContainer = context.getDrawingContext().svgContainer;\n const legendSelGroup = makeElement(legendGradContainer, 'g', [1], `${config.classPrefix}-selection-box-group`);\n\n if (firebolt.context.config().align === HORIZONTAL) {\n x = range[0] - rangeShifter || 0;\n y = 0;\n width = range[1] - range[0] || 0;\n height = gradientDimension;\n } else {\n x = 0;\n y = range[1] - rangeShifter || 0;\n height = range[0] - range[1] || 0;\n width = gradientDimension;\n }\n const enterFn = function (el) {\n selectionBoxDrag(firebolt)(el, ['brush']);\n };\n const selBox = makeElement(legendSelGroup, RECT, [{ domain, x, y, width, height }], className,\n { enter: enterFn });\n selBox.attr('y', y)\n .attr('x', x)\n .attr(WIDTH, width)\n .attr(HEIGHT, height);\n }\n}\n\nexport default SelectionBox;\n\n","import { selectElement } from 'muze-utils';\n\nexport const strategies = (firebolt) => {\n const context = firebolt.context;\n const classed = (set, className, change) => {\n const classPrefix = context.config().classPrefix;\n selectElement(context.mount())\n .selectAll(`.${classPrefix}-legend-columns`)\n .filter(d => set.uids.indexOf(d.id) !== -1)\n .selectAll('div')\n .classed(className, change);\n };\n\n return {\n fade: (set, config = {}) => {\n const classPrefix = context.config().classPrefix;\n if (!set.mergedEnter.length && !set.mergedExit.length) {\n classed(set.completeSet, config.className || `${classPrefix}-legend-fadeout`, false);\n } else {\n classed(set.mergedExit, config.className || `${classPrefix}-legend-brighten`, false);\n classed(set.mergedExit, config.className || `${classPrefix}-legend-fadeout`, true);\n classed(set.mergedEnter, config.className || `${classPrefix}-legend-fadeout`, false);\n }\n },\n brighten: (set, config = {}) => {\n const classPrefix = context.config().classPrefix;\n if (!set.mergedEnter.length && !set.mergedExit.length) {\n classed(set.completeSet, config.className || `${classPrefix}-legend-brighten`, false);\n } else {\n classed(set.mergedEnter, config.className || `${classPrefix}-legend-brighten`, true);\n classed(set.mergedExit, config.className || `${classPrefix}-legend-brighten`, false);\n }\n }\n };\n};\n","import { GenericSideEffect } from '@chartshq/muze-firebolt';\nimport { strategies } from './strategies';\nimport { Highlighter } from '../../../enums/side-effects';\n\nexport default class LegendHighlighter extends GenericSideEffect {\n constructor (...params) {\n super(...params);\n this._strategies = strategies(this.firebolt);\n this._strategy = 'brighten';\n }\n\n static formalName () {\n return Highlighter;\n }\n\n apply (selectionSet, payload, options = {}) {\n const strategy = this._strategies[options.strategy || this._strategy];\n\n strategy(selectionSet, this);\n }\n}\n","import { mergeRecursive } from 'muze-utils';\n\nexport const PROPS = {\n config: {\n sanitization: (context, value) => mergeRecursive(context._config || {}, value)\n },\n data: {},\n fieldName: {},\n legendContainer: {},\n measurement: {\n sanitization: (context, value) => {\n const measurement = mergeRecursive(context._measurement, value);\n ['padding', 'border', 'margin'].forEach((space) => {\n measurement[space] = Math.min(measurement[space] > 0 ? measurement[space] : 0,\n measurement.maxWidth * 0.1, measurement.maxHeight * 0.1);\n });\n return measurement;\n }\n },\n logicalSpace: {},\n metaData: {},\n range: {\n sanitization: (context, value) => {\n context.scale().range(value);\n context.resetLogicalSpace();\n context.store().commit('range', value);\n return value;\n }\n },\n scale: {},\n smartTicks: {},\n store: {},\n title: {\n sanitization: (context, value) => mergeRecursive(context._title || {}, value)\n }\n};\n","import { getSymbol } from 'muze-utils';\nimport {\n CENTER,\n LEFT,\n RIGHT\n} from '../enums/constants';\n\nexport const ALIGN = {\n HORIZONTAL: 'horizontal',\n VERTICAL: 'vertical'\n};\n\nexport const DEFAULT_MEASUREMENT = {\n height: 30,\n width: 30,\n maxWidth: Infinity,\n maxHeight: Infinity,\n padding: 2,\n margin: 2,\n border: 1\n};\n\nexport const LEGEND_TITLE = {\n text: '',\n orientation: (pos) => {\n if (pos === LEFT || pos === RIGHT) {\n return LEFT;\n } return CENTER;\n }\n};\n\nexport const DEFAULT_CONFIG = {\n classPrefix: 'muze',\n\n formatter: {\n bounds: {\n lower: 'less than',\n upper: 'more than'\n }\n },\n item: {\n text: {\n orientation: 'right',\n width: 10,\n formatter: val => val\n },\n icon: {\n className: 'legend-icon',\n height: 20,\n width: 20,\n color: 'rgba(0,0,0,.5)',\n type: 'square'\n }\n }\n};\n\n/**\n * Creates a map of pre defined icons\n *\n * @param {string} icon Accepts a icon name like 'square', 'cross', 'diamond' etc\n * @return {Object} icon object which can be used to draw the icons\n */\nexport const ICON_MAP = (icon) => {\n if (icon && typeof (icon) === 'string') {\n return getSymbol(icon);\n } return icon;\n};\n","import { makeElement, numberInterpolator } from 'muze-utils';\n\nimport {\n SCALE_FUNCTIONS,\n WIDTH,\n HEIGHT,\n LEFT,\n RIGHT,\n TOP,\n BOTTOM\n} from '../enums/constants';\n\n/**\n *\n *\n * @param {*} scale\n * @returns\n */\nexport const getScaleInfo = (scale) => {\n const scaleType = scale.constructor.type();\n const domain = scale.uniqueValues();\n const steps = scale.config().stops || 1;\n const scaleFn = SCALE_FUNCTIONS[scaleType];\n\n return { scaleType, domain, steps, scaleFn };\n};\n\n/**\n *\n *\n * @param {*} domain\n * @param {*} steps\n * @returns\n */\nexport const getInterpolatedData = (domain, steps) => {\n const domainForLegend = [];\n const interpolatedFn = numberInterpolator()(domain[0], domain[1]);\n\n for (let i = 0; i <= steps; i++) {\n domainForLegend[i] = interpolatedFn(i / steps);\n }\n return domainForLegend;\n};\n\n/**\n *\n *\n * @param {*} container\n * @param {*} text\n * @param {*} measurement\n * @param {*} classPrefix\n */\nexport const titleCreator = (container, title, measurement, config) =>\n makeElement(container, 'div', [1], `${config.classPrefix}-legend-title`)\n .style(WIDTH, '100%')\n .style(HEIGHT, `${measurement.height}px`)\n .style('padding-left', `${measurement.padding}px`)\n .style('padding-right', `${measurement.padding}px`)\n .style('border-bottom-width', `${measurement.border}px`)\n .style('text-align', title.orientation instanceof Function ?\n title.orientation(config.position) : title.orientation)\n .text(title.text)\n .node();\n\n/**\n *\n *\n * @param {*} data\n * @param {*} prop\n * @param {*} labelManager\n * @return\n */\nexport const getMaxMeasures = (data, prop, labelManager) => {\n let maxHeight = -Infinity;\n let maxWidth = -Infinity;\n\n data.forEach((item) => {\n const value = prop ? item[prop] : item;\n const space = labelManager.getOriSize(value);\n maxHeight = Math.max(space.height + 2, maxHeight);\n maxWidth = Math.max(space.width + 2, maxWidth);\n });\n\n return { height: maxHeight, width: maxWidth };\n};\n\n/**\n *\n *\n * @param {*} data\n * @param {*} prop\n * @param {*} labelManager\n * @return\n */\nexport const getItemMeasures = (data, prop, labelManager, formatter) => {\n const space = [];\n\n data.forEach((item, index) => {\n const value = prop ? item[prop] : item;\n const { height, width } = labelManager.getOriSize(formatter(value));\n space[index] = { height: height + 1, width: width + 1 };\n });\n return space;\n};\n\n/**\n *\n *\n * @param {*} textOrientation\n * @param {*} effPadding\n * @param {*} titleSpace\n * @return\n * @memberof Legend\n */\nexport const computeItemSpaces = (config, measures, data) => {\n let totalHeight = 0;\n let totalWidth = 0;\n let maxItemSpaces = {\n width: 0, height: 0\n };\n const {\n effPadding,\n titleWidth,\n labelSpaces,\n titleHeight,\n maxWidth\n } = measures;\n const {\n item,\n align\n } = config;\n const {\n icon,\n text\n } = item;\n const textOrientation = text.orientation;\n const itemSpaces = [];\n const iconSpaces = [];\n let maxIconWidth = 0;\n labelSpaces.forEach((labelSpace, i) => {\n const itemSpace = { width: 0, height: 0 };\n const iconSpace = { width: 0, height: 0 };\n const datum = data[i] || {};\n // Compute each legend item height/width\n if (textOrientation === LEFT || textOrientation === RIGHT) {\n // Get label, icon and item widths\n labelSpace.width += effPadding;\n iconSpace.width = (datum.size ? 2 * Math.sqrt(datum.size / Math.PI) : icon.width) + effPadding;\n maxIconWidth = Math.max(iconSpace.width, maxIconWidth);\n itemSpace.width = labelSpace.width + maxIconWidth;\n\n // Get label, icon and item heights\n labelSpace.height = Math.max(labelSpace.height, icon.height) + effPadding;\n iconSpace.height = labelSpace.height;\n itemSpace.height = labelSpace.height;\n } else {\n // Get label, icon and item widths\n labelSpace.width = Math.max(labelSpace.width, datum.size ? 2 * Math.sqrt(datum.size / Math.PI)\n : icon.width) + effPadding;\n iconSpace.width = labelSpace.width;\n itemSpace.width = labelSpace.width;\n maxIconWidth = Math.max(iconSpace.width, maxIconWidth);\n\n // Get label, icon and item heights\n labelSpace.height += effPadding;\n iconSpace.height = icon.height + effPadding;\n itemSpace.height = labelSpace.height + iconSpace.height;\n }\n // Compute height and width of legend for each alignment\n if (align === 'horizontal') {\n totalHeight = Math.max(totalHeight, itemSpace.height);\n } else {\n totalHeight += itemSpace.height;\n totalWidth = Math.max(totalWidth, itemSpace.width, titleWidth) + effPadding;\n }\n maxItemSpaces = {\n width: Math.max(itemSpace.width, maxItemSpaces.width),\n height: Math.max(itemSpace.height, maxItemSpaces.height)\n };\n itemSpaces.push(itemSpace);\n iconSpaces.push(iconSpace);\n });\n\n itemSpaces.forEach((itemSpace, i) => {\n if (align === 'horizontal') {\n itemSpace.height = totalHeight;\n iconSpaces[i].width = maxIconWidth;\n if (textOrientation === LEFT || textOrientation === RIGHT) {\n labelSpaces[i].height = totalHeight;\n iconSpaces[i].height = totalHeight;\n itemSpaces[i].width = labelSpaces[i].width + maxIconWidth;\n } else {\n labelSpaces[i].width = maxIconWidth;\n itemSpaces[i].width = maxIconWidth;\n labelSpaces[i].width = maxIconWidth;\n }\n totalWidth = Math.max(totalWidth + itemSpaces[i].width, titleWidth);\n } else {\n itemSpace.width = Math.max(totalWidth, maxWidth);\n if (textOrientation === TOP || textOrientation === BOTTOM) {\n labelSpaces[i].width = totalWidth;\n iconSpaces[i].width = totalWidth;\n maxIconWidth = totalWidth;\n } else {\n iconSpaces[i].width = maxIconWidth;\n itemSpaces[i].width = labelSpaces[i].width + maxIconWidth;\n labelSpaces[i].width = maxItemSpaces.width - maxIconWidth;\n totalWidth = Math.max(totalWidth, itemSpace.width, titleWidth) + effPadding;\n }\n }\n });\n totalHeight += titleHeight + effPadding;\n\n return { totalHeight, totalWidth, itemSpaces, iconSpaces, maxItemSpaces, maxIconWidth };\n};\n\n/**\n *\n *\n * @param {*} type\n * @param {*} scaleInfo\n * @param {*} domainInfo\n * @returns\n */\nexport const getDomainBounds = (type, scaleInfo, domainInfo) => {\n const {\n scaleFn,\n scaleType,\n scale\n } = scaleInfo;\n const {\n domain,\n domainBounds,\n domainLeg,\n steps\n } = domainInfo;\n const ele = domain[type === 'lower' ? 0 : domain.length - 1];\n const step = steps[type === 'lower' ? 0 : steps.length - 1];\n\n return {\n [scaleType]: scaleType === 'size' ? scale[scaleFn](ele) * scale.getScaleFactor() : scale[scaleFn](ele),\n value: domainBounds[type],\n id: type === 'lower' ? 0 : domainLeg.length + 2,\n range: [ele, step]\n };\n};\n","import {\n makeElement,\n selectElement,\n getUniqueId,\n getSmartComputedStyle,\n generateGetterSetters,\n mergeRecursive\n} from 'muze-utils';\nimport { behaviouralActions } from '@chartshq/muze-firebolt';\nimport * as legendBehaviours from '../firebolt/behavioural';\n\nimport { LegendFireBolt } from '../firebolt/legend-firebolt';\nimport { actionBehaviourMap } from '../firebolt/action-behaviour-map';\nimport { physicalActions } from '../firebolt/physical';\nimport * as sideEffects from '../firebolt/side-effects';\nimport { behaviourEffectMap } from '../firebolt/behaviour-effect-map';\nimport { VALUE, PATH } from '../enums/constants';\nimport { PROPS } from './props';\nimport { DEFAULT_MEASUREMENT, DEFAULT_CONFIG, LEGEND_TITLE } from './defaults';\nimport { getItemMeasures, titleCreator, computeItemSpaces } from './legend-helper';\n\n/**\n * Creates a Legend from the axes of a canvas\n *\n * @param {Object} dependencies : legend data\n * @class SimpleLegend\n */\nexport default class SimpleLegend {\n\n /**\n * Creates an instance of Legend.\n * @param {Object} dependencies Set of dependencies required by the legend\n * @memberof Legend\n */\n constructor (dependencies) {\n this._data = [];\n this._metaData = [];\n this._mount = null;\n this._fieldName = null;\n this._title = Object.assign({}, LEGEND_TITLE);\n this._metaData = null;\n this._labelManager = dependencies.labelManager;\n this._cells = dependencies.cells;\n this._id = getUniqueId();\n this._measurement = Object.assign({}, this.constructor.defaultMeasurement());\n this._config = mergeRecursive({}, this.constructor.defaultConfig());\n\n generateGetterSetters(this, PROPS);\n this._computedStyle = getSmartComputedStyle(selectElement('body'),\n `${this.config().classPrefix}-legend-item-info`);\n\n this._firebolt = new LegendFireBolt(this, {\n behavioural: Object.assign({}, behaviouralActions, legendBehaviours),\n physical: physicalActions,\n physicalBehaviouralMap: actionBehaviourMap\n }, sideEffects, behaviourEffectMap);\n }\n\n id () {\n return this._id;\n }\n /**\n * Initializes an instance of the class\n *\n * @static\n * @param {Object} dependencies Set of dependencies required by the legend\n * @return {Instance} returns a new instance of Legend\n * @memberof Legend\n */\n static create (dependencies) {\n return new SimpleLegend(dependencies);\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof SimpleLegend\n */\n static defaultConfig () {\n return DEFAULT_CONFIG;\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof SimpleLegend\n */\n static defaultMeasurement () {\n return DEFAULT_MEASUREMENT;\n }\n\n /**\n *\n *\n * @readonly\n * @memberof SimpleLegend\n */\n firebolt (...params) {\n if (params.length) {\n return this;\n }\n return this._firebolt;\n }\n\n /**\n *\n *\n * @return\n * @memberof Legend\n */\n elemType () {\n return PATH;\n }\n\n canvasAlias (...alias) {\n if (alias.length) {\n this._canvasAlias = alias[0];\n return this;\n }\n return this._canvasAlias;\n }\n\n /**\n *\n *\n * @return\n * @memberof Legend\n */\n mount (...params) {\n if (params.length) {\n this._mount = params[0];\n this.render();\n return this;\n }\n return this._mount;\n }\n\n /**\n *\n *\n * @param {*} effPadding\n * @param {*} align\n * @return\n * @memberof Legend\n */\n getLabelSpaces () {\n const {\n item,\n classPrefix\n } = this.config();\n this._labelManager.setStyle(getSmartComputedStyle(selectElement('body'),\n `${classPrefix}-legend-item-info`));\n return getItemMeasures(this.data(), VALUE, this._labelManager, item.text.formatter);\n }\n\n /**\n * Sets the height and width of a legend based on provided max\n * height and width and based on its contents\n *\n * @return {Instance} Current instance\n * @memberof Legend\n */\n setLegendMeasures () {\n const {\n width,\n height,\n maxWidth,\n maxHeight,\n padding,\n margin,\n border\n } = this.measurement();\n const {\n align\n } = this.config();\n\n // Effective padding, margin and padding\n const effPadding = padding * 2;\n const effBorder = border * 2;\n const effMargin = margin * 2;\n\n this.data(this.dataFromScale(this.scale()));\n // Get space occupied by title\n const titleSpace = this.getTitleSpace();\n const titleHeight = titleSpace.height > 0 ? titleSpace.height * 1.25 : 0;\n const titleWidth = titleSpace.width;\n\n // Get space occupied by labels\n const labelSpaces = this.getLabelSpaces(effPadding, align);\n\n const {\n totalHeight, totalWidth, itemSpaces, iconSpaces, maxItemSpaces, maxIconWidth\n } = computeItemSpaces(this.config(),\n { effPadding, titleWidth, labelSpaces, titleHeight, maxWidth, maxHeight }, this.data());\n\n this.measurement({\n width: Math.max(totalWidth, width) + effMargin + effBorder,\n height: Math.max(totalHeight, height) + effMargin + effBorder,\n labelSpaces,\n iconSpaces,\n itemSpaces,\n maxItemSpaces,\n maxIconWidth,\n titleSpaces: {\n width: Math.min(maxWidth, this.measurement().width) - effMargin - effBorder,\n height: titleHeight\n }\n });\n return this;\n }\n\n /**\n * Returns the space occupied by the legend title\n *\n * @return {Object} Space occupied by title\n * @memberof Legend\n */\n getTitleSpace () {\n this._labelManager.setStyle(getSmartComputedStyle(selectElement('body'),\n `${this.config().classPrefix}-legend-title`));\n return this._labelManager.getOriSize(this.title().text ? this.title().text : '');\n }\n\n /**\n * Creates the title for the legend\n *\n * @param {DOM} container Container made for the title\n * @return {Selection} Title and it's node\n * @memberof Legend\n */\n renderTitle (container) {\n const { titleSpaces, border, padding } = this.measurement();\n return titleCreator(container, this.title(), {\n height: titleSpaces.height,\n border,\n padding\n }, this.config());\n }\n\n /**\n * Render the legend with its title\n *\n * @param {DOM} mountPoint Point where the legend and title are to be appended\n * @return {Instance} Current instance of legend\n * @memberof Legend\n */\n render () {\n const firebolt = this.firebolt();\n const {\n classPrefix\n } = this.config();\n const {\n maxWidth,\n maxHeight,\n width,\n height,\n margin,\n border\n } = this.measurement();\n const legendContainer = makeElement(selectElement(this.mount()), 'div', [1], `${classPrefix}-legend-box`);\n\n legendContainer.classed(`${classPrefix}-legend-box-${this._id}`, true);\n legendContainer.style('float', 'left');\n // set height and width\n legendContainer.style('width', `${Math.min(maxWidth, width) - margin * 2}px`)\n .style('height', `${Math.min(maxHeight, height) - margin * 2}px`)\n .style('margin', `${margin}px`)\n .style('border-width', `${border}px`);\n this.legendContainer(legendContainer.node());\n\n // create title\n this.renderTitle(legendContainer);\n firebolt.createSelectionSet(this.data().map(d => d.id));\n return legendContainer;\n }\n /**\n *\n *\n * @param {*} data\n * @returns\n * @memberof StepLegend\n */\n getCriteriaFromData (data) {\n const fieldName = this.fieldName();\n const type = this.metaData().getData().schema[0].type;\n if (type === 'measure') {\n return {\n [fieldName]: data.range\n };\n }\n return [[fieldName], [data.value]];\n }\n}\n","import {\n LEFT,\n RIGHT,\n START,\n END,\n TOP,\n BOTTOM,\n HORIZONTAL,\n VERTICAL,\n CENTER,\n SHAPE,\n VALUE\n} from '../enums/constants';\n\nconst legendOrientation = {\n [HORIZONTAL]: {\n datasets: data => ({\n row: [1],\n column: data\n }),\n itemContainerMeasures: (measurement) => {\n const {\n itemSpaces,\n width\n } = measurement;\n return {\n row: {\n width: `${width}px`,\n padding: `${0}px`\n },\n column: {\n width: (d, i) => `${itemSpaces[i].width}px`,\n padding: `${0}px`\n }\n };\n },\n getStepSpacesInfo: (measurement) => {\n const { maxItemSpaces, height } = measurement;\n return {\n iconHeight: height,\n iconWidth: maxItemSpaces.width,\n stepPadding: {\n horizontal: true,\n vertical: false\n }\n };\n }\n },\n [VERTICAL]: {\n datasets: data => ({\n row: data,\n column: d => [d]\n }),\n itemContainerMeasures: (measurement, config) => {\n const {\n width\n } = measurement;\n const { padding } = config;\n return {\n row: {\n width: `${width}px`,\n padding: `${padding}px`\n },\n column: {\n width: `${width}px`,\n padding: `${0}px`\n }\n };\n },\n getStepSpacesInfo: (measurement) => {\n const { maxItemSpaces, width } = measurement;\n return {\n iconHeight: maxItemSpaces.height,\n iconWidth: width,\n stepPadding: {\n horizontal: false,\n vertical: true\n }\n };\n }\n }\n};\n\nexport const positionConfig = {\n [LEFT]: legendOrientation[VERTICAL],\n [RIGHT]: legendOrientation[VERTICAL],\n [TOP]: legendOrientation[HORIZONTAL],\n [BOTTOM]: legendOrientation[HORIZONTAL]\n};\n\nexport const alignmentMap = {\n [LEFT]: END,\n [RIGHT]: START,\n [TOP]: CENTER,\n [BOTTOM]: CENTER\n};\n\n// Reverses data for step legend\nexport const stepData = data => ({\n [LEFT]: data.reverse(),\n [RIGHT]: data.reverse(),\n [TOP]: data,\n [BOTTOM]: data\n});\n\n// Changes the item layout based on the position of the text\nexport const itemStack = {\n [LEFT]: [VALUE, SHAPE],\n [RIGHT]: [SHAPE, VALUE],\n [TOP]: [VALUE, SHAPE],\n [BOTTOM]: [SHAPE, VALUE]\n};\n","import { makeElement, selectElement, applyStyle } from 'muze-utils';\nimport { ICON_MAP } from './defaults';\nimport { positionConfig, alignmentMap, itemStack } from './position-config';\nimport {\n WIDTH,\n HEIGHT,\n CENTER,\n VALUE,\n RECT,\n LEFT,\n RIGHT\n} from '../enums/constants';\n\n/**\n *\n *\n * @param {*} container\n * @param {*} data\n * @param {*} legendInstance\n * @param {*} align\n * @return\n */\nexport const getItemContainers = (container, data, legendInstance) => {\n const measurement = legendInstance.measurement();\n const config = legendInstance.config();\n const {\n itemSpaces\n } = measurement;\n const {\n classPrefix,\n position\n } = config;\n const positionObj = positionConfig[position];\n const datasets = positionObj.datasets(data);\n const measures = positionObj.itemContainerMeasures(measurement, config);\n\n const rows = makeElement(container, 'div', datasets.row, `${classPrefix}-legend-row`);\n rows.style(HEIGHT, (d, i) => `${itemSpaces[i].height}px`);\n rows.style(WIDTH, measures.row.width);\n rows.style('padding', measures.row.padding);\n\n const columns = makeElement(rows, 'div', datasets.column, `${classPrefix}-legend-columns`);\n columns.style(WIDTH, measures.column.width);\n columns.style('padding', measures.column.padding);\n\n return columns;\n};\n\n/**\n *\n *\n * @param {*} container\n * @param {*} classPrefix\n * @param {*} data\n * @returns\n * @memberof DiscreteLegend\n */\nexport const createLegendSkeleton = (context, container, classPrefix, data) => {\n let gradWidth = 0;\n let gradHeight = 0;\n let maxGradHeight = 0;\n let maxGradWidth = 0;\n const measurement = context.measurement();\n const {\n margin,\n border,\n titleSpaces,\n width,\n height,\n maxWidth,\n maxHeight\n } = measurement;\n\n gradHeight = height - (titleSpaces.height + 2 * margin + 2 * border);\n gradWidth = width - (margin * 2 + border * 2);\n\n maxGradHeight = maxHeight - (titleSpaces.height + margin * 2 + border * 2);\n maxGradWidth = maxWidth - (margin * 2 + border * 2);\n\n let legendBody = makeElement(container, 'div', [1], `${classPrefix}-legend-body`);\n legendBody.select(`.${classPrefix}-legend-overflow`).remove();\n // Create a div with scroll when overflow\n if (maxGradWidth && maxGradWidth < gradWidth) {\n legendBody = legendBody.style(WIDTH, `${maxGradWidth}px`).style('overflow-x', 'scroll');\n }\n // Create a div with scroll when overflow\n if (maxGradHeight && maxGradHeight < gradHeight) {\n legendBody.style(HEIGHT, `${maxGradHeight}px`).style('overflow-y', 'scroll');\n }\n\n legendBody = makeElement(legendBody, 'div', [1], `${classPrefix}-legend-overflow`);\n\n legendBody.style(WIDTH, `${gradWidth}px`);\n legendBody.style(HEIGHT, `${gradHeight}px`);\n\n const legendItem = getItemContainers(legendBody, data, context);\n return { legendItem };\n};\n\n/**\n * Creates legend item based on alignment and text orientation\n *\n * @param {Selection} container Point where items are to be mounted\n * @return {Instance} Current instance\n * @memberof Legend\n */\nexport const createItemSkeleton = (context, container) => {\n const {\n classPrefix,\n item\n } = context.config();\n const textOrientation = item.text.orientation;\n\n const stack = itemStack[textOrientation];\n const itemSkeleton = makeElement(container, 'div', (d, i) => stack.map(e => [e, d[e], d.color, d.size,\n d.value, context.fieldName(), i]), `${classPrefix}-legend-item-info`);\n\n const alignClass = alignmentMap[textOrientation];\n\n itemSkeleton.classed(alignClass, true);\n return { itemSkeleton };\n};\n\n/**\n *\n *\n * @param {*} measureType\n * @param {*} stepColorCheck\n */\nexport const applyItemStyle = (item, measureType, stepColorCheck, context) => {\n const {\n padding,\n labelSpaces,\n iconSpaces,\n maxIconWidth\n } = context.measurement();\n const diff = stepColorCheck ? -padding * 2 : 0;\n\n if (item[0] === VALUE) {\n return `${labelSpaces[item[6]][measureType]}px`;\n }\n return `${measureType === 'width' && !stepColorCheck ? maxIconWidth : iconSpaces[item[6]][measureType] - diff}px`;\n};\n\n/**\n *\n *\n * @param {*} str\n * @returns\n */\nconst checkPath = (str) => {\n if (/^[mzlhvcsqta]\\s*[-+.0-9][^mlhvzcsqta]+/i.test(str) && /[\\dz]$/i.test(str) && str.length > 4) {\n return true;\n }\n return false;\n};\n\n/**\n *\n *\n * @param {*} d\n * @param {*} elem\n */\nconst createShape = function (d, elem, defaultIcon, width, height) {\n const groupElement = elem;\n // const { shape, size, update } = d;\n const size = d[3] || Math.min(width, height) * Math.PI;\n const shape = d[1] || defaultIcon;\n\n if (shape instanceof Promise) {\n shape.then((res) => {\n d.shape = res;\n return createShape(d, elem);\n });\n } else if (shape instanceof Element) {\n let newShape = shape.cloneNode(true);\n\n if (newShape.nodeName.toLowerCase() === 'img') {\n const src = newShape.src || newShape.href;\n newShape = document.createElementNS('http://www.w3.org/2000/svg', 'image');\n newShape.setAttribute('href', src);\n }\n const shapeElement = selectElement(newShape);\n shapeElement.attr('transform', `scale(${size / 100})`);\n return selectElement(groupElement.node().appendChild(newShape));\n } else if (typeof shape === 'string') {\n let pathStr;\n if (checkPath(shape)) {\n pathStr = shape;\n } else {\n pathStr = ICON_MAP(shape).size(size)();\n }\n return makeElement(groupElement, 'path', data => [data]).attr('d', pathStr);\n }\n d[1] = 'circle';\n return createShape(d, elem, 'circle');\n};\n\n/**\n * Returns the icon of the legend item\n *\n * @param {Object} datum Data property attached to the item\n * @param {number} width width of the item\n * @param {number} height height of the item\n * @return {Object|string} returns the path string or the string name of the icon\n * @memberof Legend\n */\nexport const getLegendIcon = (datum, width, height, defaultIcon) => {\n const icon = ICON_MAP(datum[1]);\n\n if (icon) {\n return icon.size(datum[3] || Math.min(width, height) * Math.PI);\n }\n return ICON_MAP(datum[3] ? 'circle' : defaultIcon).size(datum[3] || Math.min(width, height) * Math.PI);\n};\n\n/**\n *\n *\n */\nexport const renderIcon = (icon, container, datum, context) => {\n const {\n classPrefix,\n iconHeight,\n iconWidth,\n maxIconWidth,\n padding,\n color\n } = context;\n const svg = makeElement(container, 'svg', f => [f], `${classPrefix}-legend-icon-svg`)\n .attr(WIDTH, maxIconWidth)\n .attr(HEIGHT, iconHeight)\n .style(WIDTH, `${maxIconWidth}px`)\n .style(HEIGHT, `${iconHeight}px`);\n\n if (icon !== RECT) {\n const group = makeElement(svg, 'g', [datum[1]], `${classPrefix}-legend-icon`);\n createShape(datum, group, datum[3] ? 'circle' : 'square', iconWidth, iconHeight)\n .attr('transform', `translate(${maxIconWidth / 2 - padding} ${iconHeight / 2})`)\n .attr('fill', datum[2] || color);\n } else {\n makeElement(svg, RECT, [datum[1]], `${classPrefix}-legend-icon`)\n .attr('x', 0)\n .attr('y', 0)\n .attr(WIDTH, maxIconWidth)\n .attr(HEIGHT, iconHeight)\n .attr('fill', datum[2] || color);\n }\n};\n\n/**\n * Renders the items in the legend i.e, icon and text\n *\n * @param {DOM} container Point where item is to be mounted\n * @memberof Legend\n */\nexport const renderDiscreteItem = (context, container) => {\n const labelManager = context._labelManager;\n const {\n item,\n classPrefix\n } = context.config();\n const {\n maxIconWidth,\n padding\n } = context.measurement();\n const {\n width: iconWidth,\n height: iconHeight,\n color,\n className\n } = item.icon;\n\n const textOrientation = item.text.orientation;\n const formatter = item.text.formatter;\n\n labelManager.useEllipsesOnOverflow(true);\n applyStyle(container, {\n width: d => applyItemStyle(d, WIDTH, false, context),\n height: d => applyItemStyle(d, HEIGHT, false, context),\n 'text-align': CENTER,\n padding: `${padding}px`\n });\n\n labelManager.setStyle(context._computedStyle);\n container.each(function (d, i) {\n if (d[0] === VALUE) {\n selectElement(this).text(formatter(d[1]))\n .style(`padding-${textOrientation === RIGHT ? LEFT : RIGHT}`, '0px');\n } else {\n // const icon = getLegendIcon(d, iconWidth, iconHeight, type);\n selectElement(this).classed(`${classPrefix}-${className}`, true);\n selectElement(this).classed(`${classPrefix}-${className}-${i}`, true);\n renderIcon('circle', selectElement(this), d, {\n classPrefix,\n iconWidth,\n // iconWidth: 2 * Math.sqrt(d[3] / Math.PI) || iconWidth,\n iconHeight,\n maxIconWidth,\n padding,\n color\n });\n }\n });\n};\n\n/**\n* Renders the items in the legend i.e, icon and text\n*\n* @param {DOM} container Point where item is to be mounted\n* @memberof Legend\n*/\nexport const renderStepItem = (context, container) => {\n const labelManager = context._labelManager;\n const {\n item,\n position,\n classPrefix\n } = context.config();\n const {\n maxItemSpaces,\n maxIconWidth,\n padding\n } = context.measurement();\n const {\n width,\n height,\n color\n } = item.icon;\n const {\n formatter\n } = item.text;\n\n labelManager.useEllipsesOnOverflow(true);\n const { iconHeight, iconWidth, stepPadding } = positionConfig[position].getStepSpacesInfo({\n maxItemSpaces, height, width\n });\n\n applyStyle(container, {\n width: d => applyItemStyle(d, WIDTH, stepPadding.horizontal, context),\n height: d => applyItemStyle(d, HEIGHT, stepPadding.vertical, context),\n 'text-align': 'center',\n padding: `${padding}px`\n });\n\n labelManager.setStyle(context._computedStyle);\n container.each(function (d) {\n if (d[0] === VALUE) {\n selectElement(this).text(formatter(d[1]));\n } else {\n renderIcon(RECT, selectElement(this), d, {\n classPrefix,\n iconWidth,\n iconHeight,\n maxIconWidth,\n color\n });\n }\n });\n};\n","import SimpleLegend from './simple-legend';\nimport { DISCRETE, LEFT, SIZE } from '../enums/constants';\nimport { getScaleInfo } from './legend-helper';\nimport { createLegendSkeleton, createItemSkeleton, renderDiscreteItem } from './renderer';\nimport '../styles.scss';\n\n/**\n * Creates a Legend from the axes of a canvas\n *\n * @param {Object} dependencies : legend data\n * @class Legend\n */\nexport default class DiscreteLegend extends SimpleLegend {\n\n /**\n * Initializes an instance of the class\n *\n * @static\n * @param {Object} dependencies Set of dependencies required by the legend\n * @return {Instance} returns a new instance of Legend\n * @memberof Legend\n */\n static create (dependencies) {\n return new DiscreteLegend(dependencies);\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof DiscreteLegend\n */\n static type () {\n return DISCRETE;\n }\n\n /**\n *\n *\n * @param {*} scale\n * @returns\n * @memberof DiscreteLegend\n */\n dataFromScale (scale) {\n const { scaleType, domain, scaleFn } = getScaleInfo(scale);\n let domainForLegend = [...new Set(domain)];\n const type = this.metaData().getData().schema[0].type;\n\n domainForLegend = domainForLegend.map((ele, i) => {\n let value = 0;\n let range = 0;\n if (type === 'measure') {\n value = (+domainForLegend[i]).toFixed(0);\n const nextVal = domainForLegend[i + 1] ? +domainForLegend[i + 1] : +value;\n range = [value, nextVal.toFixed(0)];\n } else {\n value = domainForLegend[i];\n range = [domainForLegend[i]];\n }\n return {\n [scaleType]: scale[scaleFn](ele),\n value,\n id: i,\n range\n };\n }).filter(d => d.value !== null);\n\n domainForLegend = scaleType === SIZE ? domainForLegend.sort((a, b) => a[scaleType] - b[scaleType])\n : domainForLegend;\n return domainForLegend;\n }\n\n /**\n * Render the legend with its title\n *\n * @param {DOM} mountPoint Point where the legend and title are to be appended\n * @return {Instance} Current instance of legend\n * @memberof Legend\n */\n render () {\n const firebolt = this.firebolt();\n const data = this.data();\n const { classPrefix } = this.config();\n const legendContainer = super.render(this.mount());\n // create Legend\n const { legendItem } = createLegendSkeleton(this, legendContainer, classPrefix, data);\n const { itemSkeleton } = createItemSkeleton(this, legendItem);\n renderDiscreteItem(this, itemSkeleton);\n legendContainer.selectAll('div').style('float', LEFT);\n firebolt.mapActionsAndBehaviour();\n firebolt.createSelectionSet(this.data().map(d => d.id));\n return legendContainer;\n }\n}\n","import { makeElement, applyStyle } from 'muze-utils';\nimport { ContinousAxis } from '@chartshq/muze-axis';\nimport { BOTTOM, RIGHT } from '../enums/constants';\nimport { ALIGN } from './defaults';\nimport '../styles.scss';\n\n/**\n *\n *\n * @param {*} data\n * @returns\n */\nexport const getGradientDomain = (data) => {\n if (typeof data[0].value === 'number') {\n return data.reduce((accumulator, currentValue) =>\n [Math.min(currentValue.value, accumulator[0]), Math.max(currentValue.value, accumulator[1])],\n [Number.MAX_VALUE, Number.MIN_VALUE]);\n }\n return data.map(e => e.value);\n};\n\n/**\n *\n *\n * @param {*} container\n * @param {*} data\n * @param {*} domain\n * @returns\n */\nexport const makeLinearGradient = (container, data, domain) => {\n const defs = makeElement(container, 'defs', [1]);\n const linearGradient = makeElement(defs, 'linearGradient', [1])\n .attr('id', 'linear-gradient')\n .attr('x1', '0%')\n .attr('y2', '0%');\n makeElement(linearGradient, 'stop', data, 'stop-gradient')\n .attr('offset', d => `${(d.value - domain[0]) * 100 / (domain[1] - domain[0])}%`)\n .attr('stop-color', d => d.color);\n return linearGradient;\n};\n\n/**\n * Creates an axis cell with a linear axis for computing space and\n * creating gradient legend\n *\n * @return {AxisCell} Instance of Axis Cell for the gradient axis\n * @memberof Legend\n */\nexport const createAxis = (context) => {\n const data = context.data();\n const { align } = context.config();\n const AxisCell = context._cells.AxisCell;\n const newAxis = new ContinousAxis({\n id: `legend-${context._id}`,\n orientation: align === ALIGN.VERTICAL ? RIGHT : BOTTOM,\n style: context._computedStyle,\n nice: false,\n showAxisName: false,\n tickValues: data.map(d => d.value),\n fixedBaseline: false\n }, { labelManager: context._labelManager });\n\n newAxis.domain(getGradientDomain(data));\n newAxis.range([1, 1]);\n return new AxisCell().source(newAxis).config({\n margin: { left: 0, bottom: 0, top: 0, right: 0 }\n });\n};\n\n/**\n *\n *\n * @param {*} container\n * @param {*} data\n * @param {*} classPrefix\n * @returns\n * @memberof GradientLegend\n */\nconst createLegendSkeleton = (container, classPrefix, data) => {\n const domain = getGradientDomain(data);\n const legendContainer = makeElement(container, 'div', [1], `${classPrefix}-legend-body`);\n const legendGradSvg = makeElement(legendContainer, 'svg', [1], `${classPrefix}-gradient`);\n const legendGradCont = makeElement(legendGradSvg, 'g', [1], `${classPrefix}-gradient-group`);\n const linearGradient = makeLinearGradient(legendGradSvg, data, domain);\n const legendRect = makeElement(legendGradCont, 'rect', [1], `${classPrefix}-gradient-rect`);\n\n return {\n legendContainer,\n legendGradCont,\n legendGradSvg,\n linearGradient,\n legendRect\n };\n};\n\n/**\n * Renders the axis for the gradient\n *\n * @param {Selection} container Point where axis is to be mounted\n * @param {number} height Height for axis\n * @param {number} width Width for axis\n * @memberof Legend\n */\nexport const renderAxis = (context, container, height, width) => {\n const axis = context.axis();\n\n axis.setAvailableSpace(width, height);\n axis.render(container.node());\n};\n\n/**\n * Renders gradient legends\n *\n * @param {Selection} container Point where the legend is to be appended\n * @memberof GradientLegend\n */\nexport const renderGradient = (context, container) => {\n let gradHeight = 0;\n let gradWidth = 0;\n const {\n align,\n classPrefix,\n item\n } = context.config();\n const data = context.data();\n // Create the skeleton for the legend\n const {\n legendContainer,\n legendGradSvg,\n legendGradCont,\n linearGradient,\n legendRect\n } = createLegendSkeleton(container, classPrefix, data);\n const labelDim = context.axis().source().getAxisDimensions().tickLabelDim;\n const {\n padding,\n margin,\n border,\n titleSpaces,\n maxHeight,\n maxWidth,\n height,\n width\n } = context.measurement();\n const gradientDimensions = {};\n\n gradHeight = Math.floor(height - (titleSpaces.height + 2 * margin + 2 * border));\n gradWidth = Math.floor(width - (margin * 2 + border * 2));\n\n if (align === ALIGN.HORIZONTAL) {\n gradientDimensions.height = item.icon.height;\n gradientDimensions.width = gradWidth - 2 * padding - labelDim.width / 2;\n linearGradient.attr('x2', '100%').attr('y1', '0%');\n legendGradCont.attr('transform', `translate( ${labelDim.width / 2} 0)`);\n renderAxis(context, legendContainer, gradHeight - item.icon.height - padding, gradWidth - 2 * padding - 1);\n legendContainer.classed(`${classPrefix}-overflow-x`, width > maxWidth);\n\n applyStyle(legendContainer, {\n height: `${height}px`,\n width: `${Math.min(width, maxWidth)}px`,\n padding: `${padding}px`\n });\n\n legendRect.attr('height', gradientDimensions.height);\n legendRect.attr('width', gradientDimensions.width - labelDim.width / 2);\n } else {\n gradientDimensions.height = gradHeight - 2 * padding - labelDim.height / 2;\n gradientDimensions.width = item.icon.width;\n linearGradient.attr('x2', '0%').attr('y1', '100%');\n legendGradCont.attr('transform', `translate(0 ${labelDim.height / 2})`);\n renderAxis(context, legendContainer, gradHeight - 2 * padding - 1, gradWidth - item.icon.width - padding * 2);\n legendContainer.classed(`${classPrefix}-overflow-y`, height > maxHeight);\n applyStyle(legendContainer, {\n height: `${Math.min(height, maxHeight)}px`,\n width: `${width}px`,\n padding: `${padding}px`\n });\n legendRect.attr('height', gradientDimensions.height - labelDim.height / 2);\n legendRect.attr('width', gradientDimensions.width);\n }\n\n // Apply Styles to the legend plot area\n applyStyle(legendGradSvg, {\n height: `${gradientDimensions.height}px`,\n width: `${gradientDimensions.width}px`\n });\n\n // Apply styles to the legend rect\n applyStyle(legendRect, {\n fill: 'url(#linear-gradient)'\n });\n legendGradSvg.attr('height', gradientDimensions.height);\n legendGradSvg.attr('width', gradientDimensions.width);\n\n context.measurement({\n gradientDimensions\n });\n context._legendGradientSvg = legendGradSvg;\n return context;\n};\n","import SimpleLegend from './simple-legend';\nimport { getScaleInfo, getInterpolatedData } from './legend-helper';\nimport { GRADIENT, LEFT, SIZE } from '../enums/constants';\nimport { renderGradient, createAxis } from './gradient-helper';\nimport '../styles.scss';\n\n/**\n * Creates a Legend from the axes of a canvas\n *\n * @param {Object} dependencies : legend data\n * @class Legend\n */\nexport default class GradientLegend extends SimpleLegend {\n\n /**\n * Initializes an instance of the class\n *\n * @static\n * @param {Object} dependencies Set of dependencies required by the legend\n * @return {Instance} returns a new instance of Legend\n * @memberof Legend\n */\n static create (dependencies) {\n return new GradientLegend(dependencies);\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof GradientLegend\n */\n static type () {\n return GRADIENT;\n }\n\n /**\n *\n *\n * @param {*} axis\n * @returns\n * @memberof GradientLegend\n */\n axis (...axis) {\n if (axis.length) {\n this._axis = axis[0];\n return this;\n }\n return this._axis;\n }\n\n /**\n *\n *\n * @param {*} scale\n * @returns\n * @memberof GradientLegend\n */\n dataFromScale (scale) {\n let domainForLegend = [];\n const { scaleType, domain, steps, scaleFn } = getScaleInfo(scale);\n\n if (steps instanceof Array) {\n if (domain[0] < steps[0]) {\n domainForLegend[0] = domain[0];\n }\n domainForLegend = [...domainForLegend, ...steps];\n if (domain[domain.length - 1] > steps[steps.length - 1]) {\n domainForLegend.push(domain[1]);\n }\n } else {\n domainForLegend = getInterpolatedData(domain, steps - 1);\n }\n domainForLegend = [...new Set(domainForLegend)].sort((a, b) => a - b);\n\n return domainForLegend.map((ele, i) => {\n const value = domainForLegend[i];\n return {\n [scaleType]: scaleType === SIZE ? scale[scaleFn](ele) * scale.getScaleFactor()\n : scale[scaleFn](Math.floor(ele)),\n value: +value.toFixed(2),\n id: i\n };\n }).filter(d => d.value !== null);\n }\n\n /**\n *\n *\n * @param {*} effPadding\n * @param {*} align\n * @return\n * @memberof Legend\n */\n getLabelSpaces (effPadding) {\n this.config({\n item: {\n text: {\n orientation: this.config().position\n }\n }\n });\n const axis = createAxis(this);\n const axisSpace = axis.getLogicalSpace();\n const space = { width: axisSpace.width - effPadding, height: axisSpace.height - effPadding };\n const axisDomainLength = axis.source().domain().length;\n const labelSpaces = new Array(axisDomainLength).fill(space);\n\n this.axis(axis);\n return labelSpaces;\n }\n\n /**\n *\n *\n * @returns\n * @memberof GradientLegend\n */\n getDrawingContext () {\n return {\n svgContainer: this._legendGradientSvg\n };\n }\n\n /**\n * Render the legend with its title\n *\n * @param {DOM} mountPoint Point where the legend and title are to be appended\n * @return {Instance} Current instance of legend\n * @memberof Legend\n */\n render () {\n const firebolt = this.firebolt();\n const legendContainer = super.render(this.mount());\n // create Legend\n renderGradient(this, legendContainer);\n legendContainer.selectAll('div').style('float', LEFT);\n firebolt.mapActionsAndBehaviour();\n firebolt.createSelectionSet(this.data().map(d => d.id));\n return legendContainer;\n }\n /**\n *\n *\n * @param {*} data\n * @returns\n * @memberof SimpleLegend\n */\n getCriteriaFromData (data) {\n return [[this.fieldName()], [data.value]];\n }\n}\n","import SimpleLegend from './simple-legend';\nimport {\n getScaleInfo,\n getInterpolatedData,\n getDomainBounds\n} from './legend-helper';\nimport {\n createLegendSkeleton,\n createItemSkeleton,\n renderStepItem\n} from './renderer';\nimport { STEP, RECT, LEFT, SIZE, UPPER, LOWER } from '../enums/constants';\nimport { stepData } from './position-config';\nimport '../styles.scss';\n\n/**\n * Creates a Legend from the axes of a canvas\n *\n * @param {Object} dependencies : legend data\n * @class Legend\n */\nexport default class StepLegend extends SimpleLegend {\n\n /**\n * Initializes an instance of the class\n *\n * @static\n * @param {Object} dependencies Set of dependencies required by the legend\n * @return {Instance} returns a new instance of Legend\n * @memberof Legend\n */\n static create (dependencies) {\n return new StepLegend(dependencies);\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof StepLegend\n */\n static type () {\n return STEP;\n }\n\n /**\n *\n *\n * @param {*} scale\n * @returns\n * @memberof StepLegend\n */\n dataFromScale (scale) {\n let domainLeg = [];\n const { scaleType, domain, steps, scaleFn } = getScaleInfo(scale);\n\n const { formatter } = this.config();\n const domainBounds = {\n lower: null, upper: null\n };\n\n if (steps instanceof Array) {\n if (domain[0] < steps[0]) {\n domainBounds.lower = [`${formatter.bounds.lower} ${steps[0]}`];\n }\n domainLeg = [...domainLeg, ...steps];\n if (domain[domain.length - 1] > steps[steps.length - 1]) {\n domainBounds.upper = [`${formatter.bounds.upper} ${steps[steps.length - 1]}`];\n }\n } else {\n domainLeg = getInterpolatedData(domain, steps);\n }\n\n domainLeg = [...new Set(domainLeg)].sort((a, b) => a - b);\n domainLeg = domainLeg.map((ele, i) => {\n let value = null;\n if (i < domainLeg.length - 1) {\n value = `${(ele.toFixed(1))} - ${(+domainLeg[i + 1].toFixed(1))}`;\n }\n return {\n [scaleType]: scaleType === SIZE ? scale[scaleFn](ele) * scale.getScaleFactor() : scale[scaleFn](ele),\n value,\n id: i + 1,\n range: [ele, domainLeg[i + 1]]\n };\n }).filter(d => d.value !== null);\n\n if (domainBounds.lower) {\n const lowerBounds = getDomainBounds(LOWER, { scale, scaleFn, scaleType },\n { domain, steps, domainBounds });\n domainLeg = [lowerBounds, ...domainLeg];\n }\n if (domainBounds.upper) {\n const upperBounds = getDomainBounds(UPPER, { scale, scaleFn, scaleType },\n { domain, steps, domainBounds, domainLeg });\n domainLeg = [...domainLeg, upperBounds];\n }\n return domainLeg;\n }\n\n /**\n *\n *\n * @param {*} effPadding\n * @param {*} align\n * @return\n * @memberof Legend\n */\n getLabelSpaces (effPadding, align) {\n this.config({\n item: {\n text: {\n orientation: this.config().position\n }\n }\n });\n return super.getLabelSpaces(effPadding, align);\n }\n\n /**\n *\n *\n * @return\n * @memberof Legend\n */\n elemType () {\n return RECT;\n }\n\n /**\n * Render the legend with its title\n *\n * @param {DOM} mountPoint Point where the legend and title are to be appended\n * @return {Instance} Current instance of legend\n * @memberof Legend\n */\n render () {\n const firebolt = this.firebolt();\n const { classPrefix, position } = this.config();\n const data = stepData(this.data())[position];\n\n const legendContainer = super.render(this.mount());\n\n // create Legend\n const { legendItem } = createLegendSkeleton(this, legendContainer, classPrefix, data);\n const { itemSkeleton } = createItemSkeleton(this, legendItem);\n\n renderStepItem(this, itemSkeleton);\n legendContainer.selectAll('div').style('float', LEFT);\n firebolt.mapActionsAndBehaviour();\n firebolt.createSelectionSet(this.data().map(d => d.id));\n return legendContainer;\n }\n\n /**\n *\n *\n * @param {*} data\n * @returns\n * @memberof StepLegend\n */\n getCriteriaFromData (data) {\n const fieldName = this.fieldName();\n return {\n [fieldName]: data.range\n };\n }\n}\n","import { GradientLegend, DiscreteLegend, StepLegend } from '@chartshq/muze-legend';\n\n/**\n * Contants to be used as attr\n */\nexport const ROWS = 'rows';\nexport const COLUMNS = 'columns';\nexport const DATA = 'data';\nexport const COLOR = 'color';\nexport const SHAPE = 'shape';\nexport const SIZE = 'size';\nexport const DETAIL = 'detail';\nexport const LAYERS = 'layers';\nexport const TRANSFORM = 'transform';\nexport const INITIALIZED = 'isInitialized';\nexport const SOURCE = 'source';\nexport const WIDTH = 'width';\nexport const HEIGHT = 'height';\nexport const PADDING = 'padding';\nexport const BORDER = 'border';\nexport const MARGIN = 'margin';\nexport const CONFIG = 'config';\nexport const MOUNT = 'mount';\nexport const CANVAS_UPDATED = 'canvasUpdated';\nexport const CLASSPREFIX = 'classPrefix';\nexport const POLICIES = '_policies';\nexport const LEGEND = 'legend';\nexport const TITLE = 'title';\nexport const SUB_TITLE = 'subtitle';\nexport const RESOLVE = 'resolve';\nexport const DISCRETE = 'discrete';\nexport const STEP_COLOR = 'step-color';\nexport const GRADIENT = 'gradient';\nexport const LINEAR = 'linear';\nexport const ORDINAL = 'ordinal';\n\nexport const TITLE_TEMPLATE_NOT_ALLOWED_TAGS = [\n 'script',\n 'style'\n];\n\nexport const LEGEND_TYPE_MAP = {\n [`${ORDINAL}-${true}-${COLOR}`]: DiscreteLegend,\n [`${ORDINAL}-${true}-${SIZE}`]: DiscreteLegend,\n [`${ORDINAL}-${true}-${SHAPE}`]: DiscreteLegend,\n [`${ORDINAL}-${false}-${COLOR}`]: DiscreteLegend,\n [`${ORDINAL}-${false}-${SHAPE}`]: DiscreteLegend,\n [`${ORDINAL}-${false}-${SIZE}`]: DiscreteLegend,\n [`${LINEAR}-${false}-${SIZE}`]: DiscreteLegend,\n [`${LINEAR}-${true}-${SIZE}`]: DiscreteLegend,\n [`${LINEAR}-${false}-${SHAPE}`]: DiscreteLegend,\n [`${LINEAR}-${true}-${COLOR}`]: StepLegend,\n [`${LINEAR}-${false}-${COLOR}`]: GradientLegend\n};\n\nexport const LEFT = 'left';\nexport const RIGHT = 'right';\nexport const BOTTOM = 'bottom';\nexport const TOP = 'top';\nexport const GROUP = 'group';\nexport const LAYOUT = 'layout';\nexport const RETINAL = 'retinal';\nexport const DIMENSION = 'dimension';\nexport const MEASURE = 'measure';\nexport const VERTICAL = 'vertical';\nexport const HORIZONTAL = 'horizontal';\n\n","import { ComposedVars, SimpleVariable } from '@chartshq/visual-group';\nimport { TITLE_TEMPLATE_NOT_ALLOWED_TAGS } from './constants';\n\n/**\n * This method creates a new composed variable instance from multiple variables.\n * @param {Array} vars Variable names\n * @return {ComposedVars} Instance of composed variable\n */\nexport const share = (...vars) => new ComposedVars(...vars.map(variable => new SimpleVariable(variable)));\n\n/**\n *\n *\n * @param {*} node\n * @returns\n */\nfunction treeShakeNode (node) {\n if (node.nodeType !== Node.ELEMENT_NODE) { return; }\n\n if (TITLE_TEMPLATE_NOT_ALLOWED_TAGS.indexOf(node.tagName.toLowerCase()) !== -1) {\n node.parentNode.removeChild(node);\n } else {\n for (const childNode of node.childNodes) {\n treeShakeNode(childNode);\n }\n }\n}\n\n/**\n * A string template tagged function which sanitizes input html formatted\n * string according to the allowed html tags.\n *\n * @param {Array.} strings - The string parts of the template.\n * @param {Array} exps - The list of evaluated expression values.\n * @return {Function} Returns a function which returns the sanitized html string.\n */\nexport function html (strings, ...exps) {\n let htmlCode = '';\n const expLn = exps.length;\n let i = 0;\n\n for (; i < expLn; ++i) {\n htmlCode += strings[i] + exps[i];\n }\n htmlCode += strings[i];\n\n const frag = document.createDocumentFragment();\n const wrapper = document.createElement('div');\n\n frag.appendChild(wrapper);\n wrapper.innerHTML = htmlCode;\n\n treeShakeNode(wrapper);\n const { innerHTML } = wrapper;\n\n return () => innerHTML;\n}\n","import { mergeRecursive } from 'muze-utils';\n\nconst defaultPolicy = (registrableComponents) => {\n const aliases = registrableComponents.map(comp => comp.alias());\n return {\n behaviours: {\n '*': (propagationPayload) => {\n const propagationCanvas = propagationPayload.sourceCanvas;\n return propagationCanvas ? aliases.indexOf(propagationCanvas) !== -1 : true;\n }\n }\n };\n};\n\nclass ActionModel {\n constructor () {\n this._registrableComponents = [];\n }\n\n registerPhysicalActions (action) {\n const canvases = this._registrableComponents;\n\n canvases.forEach((canvas) => {\n canvas.once('canvas.updated').then((args) => {\n const matrix = args.client.composition().visualGroup.matrixInstance().value;\n matrix.each(cell => cell.valueOf().firebolt().registerPhysicalActions(action));\n });\n });\n return this;\n }\n\n registerBehaviouralActions (...actions) {\n const canvases = this._registrableComponents;\n\n canvases.forEach((canvas) => {\n canvas.once('canvas.updated').then(() => {\n const matrix = canvas.composition().visualGroup.matrixInstance().value;\n matrix.each(cell => cell.valueOf().firebolt().registerBehaviouralActions(...actions));\n });\n });\n return this;\n }\n\n /**\n *\n *\n * @param {*} map\n * @returns\n * @memberof ActionModel\n */\n registerPhysicalBehaviouralMap (map) {\n const canvases = this._registrableComponents;\n\n canvases.forEach((canvas) => {\n canvas.once('canvas.updated').then((args) => {\n const matrix = args.client.composition().visualGroup.matrixInstance().value;\n matrix.each(cell => cell.valueOf().firebolt().registerPhysicalBehaviouralMap(map));\n });\n });\n return this;\n }\n\n registerPropagationBehaviourMap (map) {\n const canvases = this._registrableComponents;\n\n canvases.forEach((canvas) => {\n canvas.once('canvas.updated').then((args) => {\n const matrix = args.client.composition().visualGroup.matrixInstance().value;\n matrix.each(cell => cell.valueOf().firebolt().registerPropagationBehaviourMap(map));\n });\n });\n return this;\n }\n\n mapSideEffects (map) {\n const canvases = this._registrableComponents;\n\n canvases.forEach((canvas) => {\n canvas.once('canvas.updated').then(() => {\n const matrix = canvas.composition().visualGroup.matrixInstance().value;\n matrix.each(cell => cell.valueOf().firebolt().mapSideEffects(map));\n });\n });\n return this;\n }\n\n for (...components) {\n this._registrableComponents = components;\n return this;\n }\n\n registerSideEffects (...sideEffects) {\n const registrableComponents = this._registrableComponents;\n\n registrableComponents.forEach((canvas) => {\n canvas.once('canvas.updated').then((args) => {\n const matrix = args.client.composition().visualGroup.matrixInstance().value;\n matrix.each(cell => cell.valueOf().firebolt().registerSideEffects(sideEffects));\n });\n });\n\n return this;\n }\n\n dissociateBehaviour (...maps) {\n const registrableComponents = this._registrableComponents;\n\n registrableComponents.forEach((canvas) => {\n canvas.once('canvas.updated').then((args) => {\n const matrix = args.client.composition().visualGroup.matrixInstance().value;\n matrix.each((cell) => {\n maps.forEach(val => cell.valueOf().firebolt().dissociateBehaviour(val[0], val[1]));\n });\n });\n });\n\n return this;\n }\n\n dissociateSideEffect (...maps) {\n const registrableComponents = this._registrableComponents;\n\n registrableComponents.forEach((canvas) => {\n canvas.once('canvas.updated').then((args) => {\n const matrix = args.client.composition().visualGroup.matrixInstance().value;\n matrix.each((cell) => {\n maps.forEach(val => cell.valueOf().firebolt().dissociateSideEffect(val[0], val[1]));\n });\n });\n });\n\n return this;\n }\n\n enableCrossInteractivity (policy = {}) {\n const registrableComponents = this._registrableComponents;\n const mergedPolicy = mergeRecursive(mergeRecursive({}, defaultPolicy(registrableComponents)), policy);\n\n registrableComponents.forEach((canvas) => {\n canvas.firebolt().crossInteractionPolicy(mergedPolicy);\n });\n\n return this;\n }\n}\n\nexport const actionModel = (() => new ActionModel())();\n","export const DEFAULT_CONFIG = {\n classPrefix: 'muze',\n interaction: {\n sideEffect: 'individual'\n },\n legend: {\n position: 'right',\n color: {\n show: true,\n padding: 2,\n margin: 2,\n border: 1,\n height: 30,\n width: 30\n },\n shape: {\n show: true,\n padding: 2,\n margin: 2,\n border: 1,\n height: 30,\n width: 30\n },\n size: {\n show: true,\n padding: 2,\n margin: 2,\n border: 1,\n height: 30,\n width: 30\n }\n },\n showHeaders: false,\n minWidth: 100,\n minHeight: 100,\n border: {\n style: 'solid',\n color: '#d6d6d6',\n width: 2,\n collapse: true,\n spacing: 0\n },\n autoGroupBy: {\n disabled: false\n }\n};\n","/**\n * @module\n * This is the global options semantics based on which setters getters are created and reactivity is initiated.\n * Format\n * PROPERTRY_NAME: {\n * value: // default value of the property,\n * meta: {\n * typeCheck: // The setter value will be checked using this. If the value is function then the setter value\n * // is passed as args.\n * typeExpected: // The output of typecheck action will be tested against this. Truthy value will set the\n * // value to the setter\n * sanitizaiton: // Need for sanitization before type is checked\n * }\n * }\n */\n\nimport { intSanitizer, mergeRecursive, DataModel } from 'muze-utils';\nimport { DEFAULT_CONFIG } from './defaults';\n\nexport default {\n data: {\n value: null,\n meta: {\n typeCheck: d => d instanceof DataModel\n }\n },\n width: {\n value: 0,\n meta: {\n sanitization: intSanitizer,\n typeCheck: Number.isInteger\n }\n },\n height: {\n value: 0,\n meta: {\n sanitization: intSanitizer,\n typeCheck: Number.isInteger\n }\n },\n minUnitWidth: {\n value: 50,\n meta: {\n sanitization: intSanitizer,\n typeCheck: Number.isInteger\n }\n },\n minUnitHeight: {\n value: 50,\n meta: {\n sanitization: intSanitizer,\n typeCheck: Number.isInteger\n }\n },\n config: {\n value: null,\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Object',\n sanitization: (config, oldConfig) => {\n const oldConf = mergeRecursive({}, oldConfig);\n const defConfig = mergeRecursive(oldConf, DEFAULT_CONFIG);\n const newConf = mergeRecursive(defConfig, config);\n return newConf;\n }\n\n }\n }\n};\n","/**\n * This file exports constants that will be used to\n * create the state store of the table layout.\n */\n/**\n * The index of top, bottom and center in the matrix\n */\nexport const VIEW_INDEX = {\n top: 0,\n center: 1,\n bottom: 2\n};\n\n/**\n * The width of the grid suppied by the user.\n */\nexport const GRID_WIDTH = 'width';\n\n/**\n * The height of the grid supplied by the user.\n */\nexport const GRID_HEIGHT = 'height';\n\n/**\n * The border for the grid\n */\nexport const BORDER = 'border';\n\n /**\n * The index of the first visible row in view matrix.\n */\nexport const ROW_POINTER = 'rowPointer';\n\n/**\n * The index of the first visible column in the view matrix.\n */\nexport const COLUMN_POINTER = 'columnPointer';\n\n/**\n * Flag to specify whether row sizes should be equal.\n */\nexport const ROW_SIZE_IS_EQUAL = 'isRowSizeEqual';\n\n/**\n * Flag to specify whether column sizes are equal.\n */\nexport const COLUMN_SIZE_IS_EQUAL = 'isColumnSizeEqual';\n\n/**\n * Field to store an array an of the widths of visible columns.\n * @computed\n */\nexport const COLUMN_WIDTHS = 'visibleColumnWidths';\n\n/**\n * Field to store an array of heights of visible rows.\n * @computed\n */\nexport const ROW_HEIGHTS = 'visibleRowHeights';\n\n/**\n * Field to store the width of the left matrix.\n * @computed\n */\nexport const LEFT_MATRIX_WIDTH = 'leftMatrixWidth';\n\n/**\n * Field to store the width of the right matrix.\n * @computed\n */\nexport const RIGHT_MATRIX_WIDTH = 'rightMatrixWidth';\n\n/**\n * Field to store the height of the top matrix.\n * @computed\n */\nexport const TOP_MATRIX_HEIGHT = 'topMatrixHeight';\n\n/**\n * Field to store the height of the bottom matrix.\n * @computed\n */\nexport const BOTTOM_MATRIX_HEIGHT = 'bottomMatrixHeight';\n\n/**\n * The dom element to render the layout inside.\n */\nexport const MOUNT_POINT = 'mount';\n\n/**\n * The id attribute of the left table element.\n */\nexport const LEFT_TABLE_ID = 'grid-left';\n\n/**\n * The id attribute of the right table element.\n */\nexport const RIGHT_TABLE_ID = 'grid-right';\n\n/**\n * The id attribute of the top table.\n */\nexport const TOP_TABLE_ID = 'grid-top';\n\n/**\n * The id attribute of the bottom table.\n */\nexport const BOTTOM_TABLE_ID = 'grid-bottom';\n\n/**\n * The id attribute of the center table.\n */\nexport const CENTER_TABLE_ID = 'grid-center';\n\n/**\n * The id attribute of the top div.\n */\nexport const TOP_DIV_ID = 'muze-div-top';\n\n/**\n * The id attribute of the bottom div.\n */\nexport const BOTTOM_DIV_ID = 'muze-div-bottom';\n\n/**\n * The id attribute of the center div.\n */\nexport const CENTER_DIV_ID = 'muze-div-center';\n\n/**\n * Field that indicates if the row configuration has changed\n */\nexport const HAVE_ROWS_CHANGED = 'haveRowsChanged';\n\n/**\n * Field that indicates if the column configuration has changed\n */\nexport const HAVE_COLUMNS_CHANGED = 'haveColumnsChanged';\n\n/**\n * Field that indicates if the values configuration for the center matrix has changed\n */\nexport const HAVE_VALUES_CHANGED = 'haveValuesChanged';\n\n/**\n * Field that indicates the width of row matrix\n */\nexport const ROW_MATRIX_WIDTH = 'rowMatrixWidth';\n\n/**\n * Field that indicates the height of row matrix\n */\nexport const COLUMN_MATRIX_HEIGHT = 'columnMatrixHeight';\n\n/**\n * Field that indicates the unit width of layout\n */\nexport const UNIT_WIDTH = 'unitWidth';\n\n/**\n * Field that indicates the unit height of layout\n */\nexport const UNIT_HEIGHT = 'unitHeight';\n\n/**\n * Field that indicates the style object\n */\nexport const STYLE = 'style';\n\n/**\n * Field that indicates the color configuration\n */\nexport const COLOR = 'color';\n\n/**\n * Field that indicates width\n */\nexport const WIDTH = 'width';\n\n/**\n * Field that indicates collpase property for border\n */\nexport const COLLAPSE = 'collapse';\n\n/**\n * Field that indicates spacing property for border\n */\nexport const SPACING = 'spacing';\n\n/**\n * Field that indicates spacing property for border\n */\nexport const DISTRIBUTION = 'distribution';\n\n/**\n * Field that indicates spacing property for border\n */\nexport const GUTTERSPACE = 'gutterSpace';\n\n/**\n * Field that indicates spacing property for border\n */\nexport const BREAK_PAGE = 'breakPage';\n\n/**\n * Field that indicates spacing property for border\n */\nexport const SHOW_ROW_BORDERS = 'showRowBorders';\n\n/**\n * Field that indicates spacing property for border\n */\nexport const SHOW_COL_BORDERS = 'showColBorders';\n\n/**\n * Field that indicates spacing property for border\n */\nexport const SHOW_VALUE_BORDERS = 'showValueBorders';\n\nexport const HEIGHT = 'height';\nexport const COLUMN = 'column';\nexport const ROW = 'row';\nexport const TOP = 'top';\nexport const LEFT = 'left';\nexport const RIGHT = 'right';\nexport const BOTTOM = 'bottom';\nexport const CENTER = 'center';\nexport const CLICK = 'click';\nexport const ROW_LEFT = 'rowLeft';\nexport const ROW_RIGHT = 'rowRight';\nexport const COLUMN_BOTTOM = 'colBottom';\nexport const COLUMN_TOP = 'colTop';\nexport const AUTO = 'auto';\nexport const ROW_SPAN = 'rowSpan';\nexport const COL_SPAN = 'colSpan';\nexport const ROW_ROOT = 'rowRoot';\nexport const COLUMN_ROOT = 'columnRoot';\nexport const PRIMARY = 'primary';\nexport const SECONDARY = 'secondary';\n","import { sanitizeIP, mergeRecursive } from 'muze-utils';\nimport { TOP, CENTER, BOTTOM } from '../enums/constants';\n\n/*\n * This is the abstract implementation of the root layout. This takes care of common work which all the layouts\n * has to handle. The common work includes sanitizaion of inputs, update, rerender, dispose etc. This class can't be\n * used directly (as ofcourse this is an abstract implementaiton), the class which is implementing it has to implement\n * the necessary methods and gives its on visual.\n */\n\n/**\n * This class is used to create a generic layout. It can be extended to create layouts\n * of different types\n * @class GenericLayout\n */\nexport default class GenericLayout {\n\n /**\n * Creates an instance of TableLayout.\n * @param {HTMLElement} mountPoint DOM element/d3 selection where the layout is to be mounted\n * @param {Object} measurement The dimensions of the layout\n * @param {Object} config configuration to be given for the layout\n * @param {Object} dependencies external dependencies.\n * @memberof GenericLayout\n *\n * measurement : {\n * width : number => width of the container\n * height : number => height of the container\n * unitHeight : number => height of unit of the cells\n * unitWidth : number => width of unit of the cells\n * }\n *\n */\n constructor (mountPoint, measurement, config, dependencies) {\n this._config = {};\n this._measurement = {};\n this._matrices = [];\n // External dependencies to be included for the layout. This includes the ext global dependencies like\n // smartlabel which has one single implementation of throughout the page or per isntance\n this._dependencies = dependencies;\n\n this.measurement(measurement);\n this.mountPoint(mountPoint);\n this.config(config);\n }\n\n /**\n * Returns an object which is used to recreate the layout.\n * @return {Object} the serialized components\n */\n serialize () {\n return {\n measurement: this.measurement(),\n config: this.config(),\n matrices: this.matrices()\n };\n }\n\n /**\n * Sets/Gets the config for the layout\n * @param {Object} config configuration for the layout\n * @return {Layout|Object} Gets the Config/ Returns this instance when set\n */\n config (config) {\n if (config) {\n this._config = mergeRecursive(this._config || {}, config);\n return this;\n }\n return this._config;\n }\n\n /**\n * Sets/Gets the measurement for the layout\n * @param {Object} measurement measurement for the layout\n * @return {Layout|Object} Gets the measurement/ Returns this instance when set\n */\n measurement (measurement) {\n if (measurement) {\n this._measurement = mergeRecursive(this._measurement || {}, measurement);\n\n return this;\n }\n return this._measurement;\n }\n\n /**\n * Sets/Gets the matrices for the layout\n * @param {Object} matrices matrices for the layout\n * @return {Layout|Object} Gets the matrices/ Returns this instance when set\n */\n matrices (matrices) {\n if (matrices) {\n this._matrices = sanitizeIP.typeObj([TOP, CENTER, BOTTOM], matrices);\n\n return this;\n }\n return this._matrices;\n }\n\n /**\n * Sets/Gets the matrix for row\n * @param {Object} matrix matrices for the layout\n * @return {Layout|Object} Gets the matrix/ Returns this instance when set\n */\n rowMatrix (matrix) {\n if (matrix) {\n this._rowMatrix = matrix;\n return this;\n }\n return this._rowMatrix;\n }\n\n /**\n * Sets/Gets the matrix for columns\n * @param {Object} matrix matrices for the layout\n * @return {Layout|Object} Gets the matrix/ Returns this instance when set\n */\n columnMatrix (matrix) {\n if (matrix) {\n this._columnMatrix = matrix;\n return this;\n }\n return this._columnMatrix;\n }\n\n /**\n * Sets/Gets the matrix for value\n * @param {Object} matrix matrices for the layout\n * @return {Layout|Object} Gets the matrix/ Returns this instance when set\n */\n centerMatrix (matrix) {\n if (matrix) {\n this._centerMatrix = matrix;\n return this;\n }\n return this._centerMatrix;\n }\n\n /**\n * Sets/Gets the mountPoint for the layout\n * @param {Object} mountPoint mountPoint for the layout\n * @return {Layout|Object} Gets the mountPoint/ Returns this instance when set\n */\n mountPoint (mountPoint) {\n if (mountPoint) {\n this._mountPoint = mountPoint;\n\n return this;\n }\n return this._mountPoint;\n }\n}\n","import * as FieldNames from '../enums/constants';\n\n/**\n * Default configuration of the layout\n * @return {Object} returns the default configuration\n */\nexport const DEFAULT_CONFIGURATION = {\n [FieldNames.BORDER]: {\n [FieldNames.STYLE]: 'solid',\n [FieldNames.COLOR]: '#d6d6d6',\n [FieldNames.WIDTH]: 2,\n [FieldNames.COLLAPSE]: true,\n [FieldNames.SPACING]: 0\n },\n [FieldNames.GUTTERSPACE]: { rows: [], columns: [] },\n [FieldNames.DISTRIBUTION]: { rows: [], columns: [] },\n [FieldNames.BREAK_PAGE]: { rows: [], columns: [] },\n [FieldNames.ROW_SIZE_IS_EQUAL]: false,\n [FieldNames.COLUMN_SIZE_IS_EQUAL]: false,\n [FieldNames.COLUMN_POINTER]: 0,\n [FieldNames.ROW_POINTER]: 0\n};\n\n/**\n * Default measurements for the layout\n * @return {Object} returns the default measurements\n */\nexport const DEFAULT_MEASUREMENTS = {\n [FieldNames.GRID_WIDTH]: 100,\n [FieldNames.GRID_HEIGHT]: 100,\n [FieldNames.UNIT_WIDTH]: 100,\n [FieldNames.UNIT_HEIGHT]: 100\n};\n\nexport const BLANK_BORDERS = 'rgba(0,0,0,0)';\n","import { ROW_LEFT, ROW_RIGHT, COLUMN_BOTTOM, COLUMN_TOP, TOP, BOTTOM } from '../enums/constants';\n/**\n * This callback is used to filter the array of\n * placeholder cells and filter out cells which have\n * appeared in a previous row.\n *\n * @param {Placeholder} colData Instance of placeholder.\n * @param {number} colIdx The index of the placeholder in array.\n * @param {Array} matrix The 2d array for which filtering is to be done\n * @param {number} rIdx The index of the row of the placeholder in array.\n * @param {string} type The type of matrix it is (rowLeft, rowRight, colTop, colBottom)\n * @return {boolean} flag to keep/remove element.\n */\nconst columnFilter = (colData, colIdx, matrix, rIdx, type) => {\n const previousRow = matrix[rIdx - 1];\n const currentRow = matrix[rIdx];\n\n // Row Span for left\n if (type === ROW_LEFT) {\n if (!previousRow) {\n return colData;\n }\n let i = 0;\n for (;i <= colIdx; i += 1) {\n if (currentRow[i].valueOf() !== previousRow[i].valueOf()) {\n break;\n }\n }\n return (i - 1 === colIdx) ? null : colData;\n } else if (type === ROW_RIGHT) {\n if (!previousRow || colIdx === 0) {\n return colData;\n }\n let j = colIdx;\n for (; j < currentRow.length; j += 1) {\n if (previousRow[j].valueOf() !== currentRow[j].valueOf()) {\n break;\n }\n }\n return (j === currentRow.length) ? null : colData;\n } else if (type === COLUMN_BOTTOM) {\n if (rIdx === 0) {\n return colData;\n }\n const prevCell = currentRow[colIdx - 1];\n if (prevCell) {\n if (prevCell.valueOf() === colData.valueOf()) {\n const nextRow = matrix[rIdx + 1];\n if (!nextRow) {\n return null;\n }\n if (nextRow[colIdx].valueOf() === nextRow[colIdx - 1].valueOf()) {\n return null;\n }\n return colData;\n }\n return colData;\n }\n return colData;\n } else if (type === COLUMN_TOP) {\n if (rIdx === matrix.length - 1 && matrix.length > 1) {\n return colData;\n }\n const prevCell = currentRow[colIdx - 1];\n if (prevCell && (prevCell.valueOf() === colData.valueOf())) {\n const prevRow = matrix[rIdx - 1];\n if (prevRow) {\n if (prevRow[colIdx].valueOf() === prevRow[colIdx - 1].valueOf()) {\n return null;\n }\n return colData;\n }\n return null;\n }\n return colData;\n }\n return colData;\n};\n\n/**\n * This callback is used to calculate the rowspan\n * by checking for repeating entries in subsequent rows\n * at the specified column.\n *\n * @param {Placeholder} colData Instance of placeholder.\n * @param {number} colIdx The index of the placeholder in the array.\n * @param {Array} matrix The 2d array for which filtering is to be done\n * @param {number} rIdx The index of the row of the placeholder in array.\n * @return {number} The row span.\n */\nconst calcRowSpan = (colData, colIdx, matrix, rIdx) => {\n let count = 1;\n // if data is not header cell then rowspan\n // has to be 1\n if (!colData || typeof colData.valueOf() !== 'string') {\n return 1;\n }\n let isNull = false;\n while (!isNull) {\n if (matrix[rIdx + count] && matrix[rIdx + count][colIdx] === null) {\n count += 1;\n } else {\n isNull = true;\n }\n }\n return count;\n};\n/**\n * This callback is used to calculate the rowspan\n * by checking for repeating entries in subsequent rows\n * at the specified column.\n *\n * @param {Placeholder} colData Instance of placeholder.\n * @param {number} colIdx The index of the placeholder in the array.\n * @param {Array} matrix The 2d array for which filtering is to be done\n * @param {number} rIdx The index of the row of the placeholder in array.\n * @return {number} The row span.\n */\nconst calcColSpan = (colData, colIdx, matrix, rIdx) => {\n let count = 1;\n // if data is not header cell then rowspan\n // has to be 1\n if (!colData || typeof colData.valueOf() !== 'string') {\n return 1;\n }\n let isNull = false;\n while (!isNull) {\n if (matrix[rIdx][colIdx + count] === null) {\n count += 1;\n } else {\n isNull = true;\n }\n }\n return count;\n};\n\n// create a masking matrix to strip out repeating columns\n// and calculate rowspan.\nconst mask = function (matrix, type) {\n return matrix.map((row, rIdx) => {\n if (type === ROW_LEFT || type === ROW_RIGHT) {\n const filteredRow = row.map((col, colIndex) => columnFilter(col, colIndex, matrix, rIdx, type));\n const temp = [];\n const diff = row.length - filteredRow.length;\n for (let i = 0; i < diff; i += 1) {\n temp.push(null);\n }\n if (type === ROW_RIGHT) {\n temp.unshift(...filteredRow);\n return temp;\n }\n temp.push(...filteredRow);\n return temp;\n }\n\n const filteredRow = row.map((col, colIndex) => columnFilter(col, colIndex, matrix, rIdx, type));\n const temp = [];\n temp.push(...filteredRow);\n return temp;\n });\n};\n\n/**\n * This function is used to set the col and row spans\n * for the matrices based on repeated/hierarchichal data\n *\n * @export\n * @param {Array} matrix The 2d array for which filtering is to be done\n * @param {string} type Type of array (center, top, bottom)\n * @param {number} index Index of array in the row\n * @return {Object} containing the view matrix and their spans\n */\nexport function cellSpanMaker (matrix, type, index) {\n let span = '';\n if (type === TOP || type === BOTTOM) {\n span = type === TOP ? COLUMN_TOP : COLUMN_BOTTOM;\n const viewMatrix = mask(matrix, span);\n const spans = viewMatrix.map((row, ridx) => row.map((col, i) => calcColSpan(col, i, viewMatrix, ridx))\n .filter(col => col !== 1));\n return { viewMatrix, spans };\n } else if (index === 0 || index === 2) {\n span = index === 0 ? ROW_LEFT : ROW_RIGHT;\n const viewMatrix = mask(matrix, span);\n const spans = [];\n viewMatrix.forEach((row, ridx) => {\n spans[ridx] = spans[ridx] || [];\n row.forEach((col, i) => {\n if (viewMatrix[ridx][i]) {\n const currSpan = calcRowSpan(col, i, viewMatrix, ridx);\n currSpan && spans[ridx].push(currSpan);\n }\n });\n });\n return { viewMatrix, spans };\n }\n return { viewMatrix: matrix };\n}\n","import { makeElement, selectElement } from 'muze-utils';\nimport { cellSpanMaker } from './span-maker';\nimport {\n TOP, LEFT, RIGHT, BOTTOM, CENTER, WIDTH, ROW_SPAN, COL_SPAN\n} from '../enums/constants';\nimport { BLANK_BORDERS } from './defaults';\n\n/**\n * Creates a table element of the layout\n *\n * @param {Object} mount Mount point for table elements\n * @param {string} className defines class name\n * @param {Array} rowData set of rows for the table\n * @return {Selection} set of selections for the table\n */\nfunction renderTable (mount, className, rowData) {\n const table = makeElement(mount, 'table', ['layout'], `${className}-table`);\n const body = makeElement(table, 'tbody', ['layout'], `${className}-body`);\n const rows = makeElement(body, 'tr', rowData, `${className}-tr`);\n const cells = makeElement(rows, 'td', (d, i) => d.filter(e => e !== null).map(e =>\n ({ placeholder: e, rowIndex: i })), `${className}-td`, {}, key => key.placeholder.id);\n\n return { table, body, rows, cells };\n}\n\nfunction applyRowBorders (cells, borderStyle, showBorders, color) {\n [TOP, BOTTOM].forEach((borderType) => {\n const style = `${borderStyle} ${showBorders[borderType] ? color : BLANK_BORDERS}`;\n cells.style(`border-${borderType}`, style);\n });\n}\n\nfunction applyColBorders (cells, borderStyle, showBorders, color) {\n [LEFT, RIGHT].forEach((borderType) => {\n const style = `${borderStyle} ${showBorders[borderType] ? color : BLANK_BORDERS}`;\n cells.style(`border-${borderType}`, style);\n });\n}\n\n/**\n * Applies borders to the cells in a matrix\n *\n * @param {Selection} cells Set of cells made from the matrix\n * @param {Object} border Border info for layout\n * @param {string} type Type of matrix(top/center/bottom)\n * @param {number} index Column index of matrix in the row\n */\nfunction applyBorders (cells, border, type, index) {\n const {\n width,\n style,\n color,\n showRowBorders,\n showColBorders,\n showValueBorders\n } = border;\n const borderStyle = `${width}px ${style}`;\n\n if (type === CENTER && index === 1) {\n [TOP, BOTTOM, LEFT, RIGHT].forEach((borderType) => {\n cells.style(`border-${borderType}`, `${borderStyle} ${showValueBorders[borderType] ?\n color : BLANK_BORDERS}`);\n });\n } else if (type === CENTER) {\n applyRowBorders(cells, borderStyle, showRowBorders, color);\n } else if (index === 1) {\n applyColBorders(cells, borderStyle, showColBorders, color);\n }\n}\n\n/**\n * Renders a set of matrices in a row\n *\n * @param {Array} matrices Set of matrices in a row\n * @param {Selection} mountPoint Mount point for the row\n * @param {string} type top/center/bottom\n * @param {Object} dimensions dimensions of the matrix\n */\nfunction renderMatrix (matrices, mountPoint, type, dimensions, classPrefix) {\n matrices.forEach((matrix, index) => {\n // Creating containers for each matrix individually\n const containerForMatrix = makeElement(mountPoint, 'div', [1], `${classPrefix}-grid-${type}-${index + 1}`)\n .classed(`${classPrefix}-grid-${type}`, true)\n .classed(`${classPrefix}-grid`, true);\n\n const {\n viewMatrix,\n spans\n } = cellSpanMaker(matrix, type, index);\n\n // Rendering the table components\n const { cells } = renderTable(containerForMatrix, `${classPrefix}-grid`, viewMatrix);\n\n if (type === CENTER && spans) {\n cells.attr(ROW_SPAN, function (cell, colIndex) {\n const placeholder = cell.placeholder;\n selectElement(this).style('height', `${placeholder.availHeight() + dimensions.border.width}px`);\n return spans[cell.rowIndex][colIndex];\n });\n } else if ((type === TOP || type === BOTTOM) && index === 1) {\n cells.attr(COL_SPAN, function (cell, colIndex) {\n const span = spans[cell.rowIndex][colIndex];\n const placeholder = cell.placeholder;\n if (span > 1) {\n placeholder.setAvailableSpace(0, placeholder.availHeight());\n }\n selectElement(this).style('height', `${placeholder.availHeight()}px`);\n return span;\n });\n }\n // Rendering content within placeholders\n cells.each(function (cell) {\n cell.placeholder && cell.placeholder.render(this);\n }).exit().each((cell) => {\n cell.placeholder && cell.placeholder.remove();\n });\n\n applyBorders(cells, dimensions.border, type, index);\n });\n}\n\n/**\n * Renders all the matrices of the layout\n *\n * @export\n * @param {Array} matrices Set of matrices in the layout\n * @param {Array} mountPoints Mount points for each row of matrix\n * @param {Array} layoutDimensions Dimensions(height/width) of all the matrices\n */\nexport function renderMatrices (context, matrices, layoutDimensions) {\n const {\n top,\n center,\n bottom\n } = matrices;\n const {\n classPrefix\n } = context.config();\n const {\n width\n } = context.measurement();\n const mount = context.mountPoint();\n\n const data = [\n { type: TOP, matrix: top },\n { type: CENTER, matrix: center },\n { type: BOTTOM, matrix: bottom }\n ];\n makeElement(mount, 'div', data, `${classPrefix}-grid-layout-row`)\n .each(function (d, i) {\n const row = selectElement(this);\n row.classed(`${classPrefix}-grid-layout-row-${i}`, true);\n renderMatrix(d.matrix, row, d.type, layoutDimensions, classPrefix);\n })\n .style(WIDTH, `${Math.ceil(width)}px`);\n}\n","/**\n * This file exports utility functions that are used across the layout module\n */\nimport { Symbols } from 'muze-utils';\nimport { PRIMARY, SECONDARY, HEIGHT, WIDTH } from '../enums/constants';\n\nconst nest = Symbols.nest;\n/**\n *\n *\n * @param {*} isTransposed\n * @returns\n */\nconst getMeasureInfo = (isTransposed) => {\n if (isTransposed) {\n return {\n firstMeasure: HEIGHT,\n secondMeasure: WIDTH\n };\n }\n return {\n firstMeasure: WIDTH,\n secondMeasure: HEIGHT\n };\n};\n\n/**\n *\n *\n * @param {*} i\n * @param {*} page\n * @returns\n */\nconst findInPage = (i, page) => {\n let count = 0;\n for (const x in page) {\n if (i < page[x]) {\n count = x;\n break;\n }\n }\n return count;\n};\n\n/**\n * Creates a single matrix from two matrices\n *\n * @param {Array} matrix Input matrix\n * @return {Array} Joined matrix\n * @memberof VisualMatrix\n */\nexport const combineMatrices = (matrix, config) => {\n const { isTransposed } = config;\n let joinedMatrix = matrix[0].length > 0 ? matrix[0] : matrix[1];\n if (isTransposed) {\n joinedMatrix = matrix[0].length > 0 ? [...matrix[0]] : [];\n joinedMatrix = matrix[1].length > 0 ? [...joinedMatrix, ...matrix[1]] : joinedMatrix;\n } else {\n joinedMatrix = joinedMatrix.map((row, rowIndex) => {\n let rowData = [];\n if (matrix[0].length > 0) {\n rowData = [...matrix[0][rowIndex]];\n }\n if (matrix[1].length > 0) {\n rowData = [...rowData, ...matrix[1][rowIndex]];\n }\n return rowData;\n });\n }\n return joinedMatrix;\n};\n\n/**\n * Creates a hirachical tree from the context\n *\n * @param {Object} context context for creating tree\n * @return {Object} nested tree\n */\nexport const createTree = (context) => {\n let matrixTree = {};\n let lastLevelKey = 0;\n let facet = PRIMARY;\n const nestFn = nest();\n const keys = [];\n const layoutMatrix = context._layoutMatrix;\n const primaryMatrix = context.primaryMatrix();\n const secondaryMatrix = context.secondaryMatrix();\n const { isTransposed, breakPage } = context.config();\n\n if (!isTransposed) {\n if (primaryMatrix.length === 0) {\n facet = PRIMARY;\n } else if (secondaryMatrix.length === 0) {\n facet = SECONDARY;\n } else {\n facet = primaryMatrix.length >= secondaryMatrix.length ? PRIMARY : SECONDARY;\n }\n if (primaryMatrix.length > 0) {\n for (let i = 0; i < primaryMatrix[0].length - 1; i++) {\n keys.push(i);\n }\n keys.push(primaryMatrix[0].length - 1);\n if (facet === SECONDARY || secondaryMatrix.length === 0) {\n lastLevelKey = primaryMatrix[0].length - 1;\n }\n }\n if (secondaryMatrix.length > 0) {\n const keyLength = primaryMatrix.length > 0 ? primaryMatrix[0].length : 0;\n for (let i = secondaryMatrix[0].length - 1; i > 0; i--) {\n keys.push(i + keyLength);\n }\n keys.push(keyLength);\n\n if (facet === PRIMARY) {\n lastLevelKey = keyLength;\n }\n } else {\n lastLevelKey = primaryMatrix.length > 0 ? primaryMatrix[0].length - 1 : 0;\n }\n keys.forEach((key) => {\n let counter = -1;\n return nestFn.key((d) => {\n counter++;\n return `${d[key].valueOf()}-${findInPage(counter, breakPage)}`;\n });\n });\n matrixTree = nestFn.entries(layoutMatrix);\n } else {\n if (primaryMatrix.length === 0) {\n facet = PRIMARY;\n } else if (secondaryMatrix.length === 0) {\n facet = SECONDARY;\n } else {\n facet = primaryMatrix.length >= secondaryMatrix.length ? PRIMARY : SECONDARY;\n }\n if (primaryMatrix.length > 0) {\n for (let i = 0; i < primaryMatrix.length - 1; i++) {\n keys.push(i);\n }\n // if (facet === PRIMARY) {\n keys.push(primaryMatrix.length - 1);\n // } else {\n if (facet === SECONDARY) {\n lastLevelKey = primaryMatrix.length - 1;\n }\n }\n if (secondaryMatrix.length > 0) {\n const primaryMatrixLength = primaryMatrix.length;\n for (let i = secondaryMatrix.length - 1; i > 0; i--) {\n keys.push(i + primaryMatrixLength);\n }\n // if (facet === SECONDARY) {\n keys.push(primaryMatrixLength);\n // }\n if (facet === PRIMARY) {\n lastLevelKey = primaryMatrixLength;\n }\n }\n keys.forEach((key) => {\n let counter = -1;\n return nestFn.key((d) => {\n counter++;\n return `${d[key].valueOf()}-${findInPage(counter, breakPage)}`;\n });\n });\n let newMatrix = [];\n newMatrix = layoutMatrix[0].map((col, colIndex) => layoutMatrix.map(row => row[colIndex]));\n matrixTree = nestFn.entries(newMatrix);\n }\n return { tree: matrixTree, lastLevelKey };\n};\n\n/**\n * Gives the min measues\n *\n * @param {boolean} isTransposed is column matrix\n * @param {Object} unitMeasures min measures to be given to cells\n * @return {Object} dimension min cell\n */\nexport const getMinMeasures = (isTransposed, unitMeasures) => {\n if (!isTransposed) {\n return {\n height: unitMeasures.height,\n width: 0\n };\n }\n return {\n height: 0,\n width: unitMeasures.width\n };\n};\n\n/**\n * Get the logical space from the tree\n *\n * @param {Node} item tree to be calculated\n * @param {number} measures width and height\n * @param {Array} minMeasures min measures for a cell\n * @param {Array} maxMeasure max measures for a col/row\n * @return {Object} dimension\n */\nexport const getLogicalSpace = (item, measures, minMeasures, maxMeasure = []) => {\n const { firstMeasure, secondMeasure } = measures;\n let firstMeasureValue = 0;\n let secondMeasureValue = 0;\n item.values.forEach((valueArray) => {\n let fMeasure = 0;\n let sMeasure = 0;\n valueArray.forEach((placeholder, colIndex) => {\n placeholder.logicalSpace(null);\n const space = placeholder.getLogicalSpace();\n sMeasure = Math.max(sMeasure, +space[secondMeasure], minMeasures[secondMeasure]);\n maxMeasure[colIndex] = Math.max(maxMeasure[colIndex] || 0, space[firstMeasure]);\n fMeasure += +maxMeasure[colIndex];\n });\n secondMeasureValue += sMeasure;\n firstMeasureValue = Math.max(firstMeasureValue, fMeasure);\n item.space = {\n [secondMeasure]: Math.ceil(secondMeasureValue),\n [firstMeasure]: Math.ceil(firstMeasureValue)\n };\n });\n return {\n [secondMeasure]: secondMeasureValue,\n [firstMeasure]: firstMeasureValue\n };\n};\n\n/**\n * Computes the logical spcae taken by the matrix tree\n *\n * @param {*} [item={}] tree to be viewed\n * @param {boolean} [isTransposed=false] is column matrix\n * @param {*} unitMeasures min measues for a cell\n * @param {Array} maxMeasure max measures for a col/row\n * @return {Object} logical space taken\n */\nexport const computeLogicalSpace = (item = {}, config, maxMeasures) => {\n const { isTransposed = false, unitMeasures } = config;\n const { firstMeasure, secondMeasure } = getMeasureInfo(isTransposed);\n const { values } = item;\n const minMeasures = getMinMeasures(isTransposed, unitMeasures);\n if (values[0].key) {\n const logicalSpace = { [firstMeasure]: 0, [secondMeasure]: 0 };\n\n values.forEach((valueItem) => {\n // Compute logical space for lowest level\n const space = computeLogicalSpace(valueItem, config, maxMeasures);\n // Set logical space for first measure\n logicalSpace[firstMeasure] = Math.max(logicalSpace[firstMeasure], space[firstMeasure],\n minMeasures[firstMeasure]);\n // Set logical space for second measure\n logicalSpace[secondMeasure] += +space[secondMeasure];\n });\n item.space = logicalSpace;\n return logicalSpace;\n }\n return getLogicalSpace(item, { firstMeasure, secondMeasure }, minMeasures, maxMeasures);\n};\n\n/**\n * Gives the space taken by a row\n *\n * @param {Array} row matrix array of rows\n * @return {Object} dimension of the row\n */\nexport const spaceTakenByRow = (row) => {\n let height = 0;\n let width = 0;\n row.forEach((col) => {\n const spaces = col.getLogicalSpace();\n height = Math.max(height, spaces.height);\n width += spaces.width;\n });\n return {\n width,\n height\n };\n};\n\n/**\n * Gives the space taken by a column\n *\n * @param {Array} matrix column matrix\n * @param {number} colIndex column index\n * @return {Object} dimension of the column\n */\nexport const spaceTakenByColumn = (matrix, colIndex) => {\n let height = 0;\n let width = 0;\n matrix.forEach((row) => {\n const col = row[colIndex];\n const spaces = col.getLogicalSpace();\n width = Math.max(width, spaces.width);\n height += spaces.height;\n });\n return {\n width,\n height\n };\n};\n\n/**\n * Creates different level matrices\n *\n * @param {Object} item matrix tree\n * @param {boolean} isTransposed is column matrix\n * @return {Object} matrix of each level\n */\nexport const createMatrixEachLevel = (item, isTransposed) => {\n if (item.values[0].key) {\n const arr = [];\n item.values.forEach((child) => {\n if (!isTransposed) {\n arr.push(...createMatrixEachLevel(child, isTransposed));\n } else {\n const eachLevel = createMatrixEachLevel(child, isTransposed);\n eachLevel.forEach((e, i) => {\n arr[i] = arr[i] || [];\n arr[i].push(...e);\n });\n }\n });\n item.matrix = arr;\n return arr;\n }\n if (!isTransposed) {\n item.matrix = item.values;\n } else {\n item.matrix = item.values[0].map((col, colIndex) => item.values.map(row => row[colIndex]));\n }\n return item.matrix;\n};\n\n/**\n * Breaks the matrix into two part\n *\n * @param {Array} matrix input matrix\n * @param {boolean} isTransposed is column matrix\n * @param {number} breakPointer point in matrix where it is to be broken\n * @return {Array} two broken matrix\n */\nexport const breakMatrix = (matrix, isTransposed, breakPointer) => {\n const primaryMatrix = [];\n const secondaryMatrix = [];\n if (isTransposed) {\n matrix.forEach((row, rowIndex) => {\n if (rowIndex >= breakPointer) {\n secondaryMatrix.push(row);\n } else {\n primaryMatrix.push(row);\n }\n });\n } else {\n matrix.forEach((row, rowIndex) => {\n row.forEach((column, columnIndex) => {\n if (columnIndex >= breakPointer) {\n secondaryMatrix[rowIndex] = secondaryMatrix[rowIndex] || [];\n secondaryMatrix[rowIndex].push(column);\n } else {\n primaryMatrix[rowIndex] = primaryMatrix[rowIndex] || [];\n primaryMatrix[rowIndex].push(column);\n }\n });\n });\n }\n return [primaryMatrix, secondaryMatrix];\n};\n\n/**\n * Distributed width returned\n *\n * @param {Object} context context for the width distibution\n * @return {number} distributed widths\n */\nexport const getDistributedWidth = (context, layoutConfig) => {\n const {\n availableWidth,\n width,\n row\n } = context;\n const {\n isDistributionEqual,\n isTransposed,\n distribution\n } = layoutConfig;\n let distSum = 0;\n if (distribution && distribution[0]) {\n distSum = distribution.reduce((t, n) => {\n t += n;\n return t;\n });\n }\n return row.map((col, colIndex) => {\n const space = col.getLogicalSpace().width;\n let distWidth = (space + (availableWidth - width) * (space / width));\n if (isTransposed) {\n if (distribution.length > 0) {\n distWidth = (availableWidth * distribution[colIndex] / distSum);\n } else if (isDistributionEqual || width === 0) {\n const rowLen = row.length;\n distWidth = (availableWidth / rowLen);\n }\n }\n return Math.floor(distWidth);\n });\n};\n\n/**\n * Distributeed heights returned\n *\n * @param {Object} context input for the height distribution\n * @return {Object} distribured heights\n */\nexport const getDistributedHeight = (context) => {\n let distSum = 0;\n let gutterSum = 0;\n let heightWithoutGutter = 0;\n const {\n isTransposed,\n distribution,\n availableHeight,\n height,\n isDistributionEqual,\n gutter,\n matrix,\n cIdx\n } = context;\n\n if (distribution && distribution[0] !== undefined) {\n distSum = distribution.reduce((t, n) => {\n t += n;\n return t;\n });\n }\n if (gutter && gutter[0] !== undefined) {\n gutterSum = gutter.reduce((t, n) => {\n t += n;\n return t;\n });\n }\n heightWithoutGutter = availableHeight - Math.floor(availableHeight * gutterSum);\n\n const colLen = matrix.length;\n return matrix.map((row, rIdx) => {\n const col = row[cIdx];\n const space = col.getLogicalSpace().height;\n let distHeight = (space + (heightWithoutGutter - height) * (space / height));\n\n if (!isTransposed) {\n if (distribution.length > 0 && colLen === distribution.length) {\n distHeight = (heightWithoutGutter * distribution[rIdx] / distSum);\n } else if (isDistributionEqual || context.height === 0) {\n distHeight = (heightWithoutGutter / colLen);\n }\n }\n return Math.floor(distHeight);\n });\n};\n\n/**\n *\n *\n * @param {*} arr\n * @param {*} beg\n * @param {*} end\n */\nexport const extraCellsRemover = (arr, beg, end) => arr.slice(beg, -end);\n\n/**\n * Creates matrix instancess\n *\n * @param {Array} [arr=[]] mutated arry\n * @param {number} depth depth of the tree\n * @param {Array} matrixInfo Details about the matrix(tree, etc) to be inserted\n * @param {boolean} layout Instance of layout\n */\nexport const createMatrixInstances = (arr = [], depth, matrixInfo, layout) => {\n const breakPointer = layout._breakPointer;\n const config = layout.config();\n const {\n isTransposed\n } = config;\n const {\n tree,\n layoutMatrix\n } = matrixInfo;\n\n if (depth === 0) {\n const brokenMatrix = breakMatrix(tree.matrix, isTransposed, breakPointer);\n arr.push({\n matrix: tree.matrix,\n primaryMatrix: brokenMatrix[0],\n secondaryMatrix: brokenMatrix[1],\n space: tree.space\n });\n return arr;\n }\n const nextLevel = depth - 1;\n tree.values.forEach((e) => {\n createMatrixInstances(arr, nextLevel, {\n tree: e,\n layoutMatrix\n }, layout);\n });\n return arr;\n};\n","import { mergeRecursive } from 'muze-utils';\n\nexport const PROPS = {\n config: {\n sanitization: (context, value) => mergeRecursive(context._config || {}, value)\n },\n maxMeasures: {},\n availableSpace: {},\n logicalSpace: {}\n};\n","import { PRIMARY } from '../enums/constants';\n/**\n *\n *\n */\nexport const defaultConfig = {\n distribution: [],\n classPrefix: 'muze',\n isDistributionEqual: true,\n unitMeasures: {\n height: 100,\n width: 100,\n border: 1\n },\n isTransposed: false,\n facet: PRIMARY,\n extraCellLengths: []\n};\n","import { mergeRecursive, generateGetterSetters } from 'muze-utils';\nimport {\n createTree,\n extraCellsRemover,\n combineMatrices,\n spaceTakenByColumn,\n getDistributedHeight,\n getDistributedWidth,\n spaceTakenByRow,\n computeLogicalSpace,\n createMatrixEachLevel,\n createMatrixInstances\n } from '../utils';\nimport { PROPS } from './props';\nimport { COLUMN_ROOT, ROW_ROOT, HEIGHT, WIDTH } from '../enums/constants';\nimport { defaultConfig } from './default-config';\n\n/**\n * This class used to create column / row matrix for GridLayout\n *\n * @class VisualMatrix\n */\nexport default class VisualMatrix {\n\n /**\n *Creates an instance of VisualMatrix.\n * @param {any} matrix Two set of matrices\n * @param {any} [config={}] Configuration for VisualMatrix\n * @memberof VisualMatrix\n */\n constructor (matrix, config = {}) {\n // Prepare matrices\n this._lastLevelKey = 0;\n this._primaryMatrix = matrix[0] || [];\n this._secondaryMatrix = matrix[1] || [];\n this._maxMeasures = [];\n this._availableSpace = {};\n\n // Store the config\n generateGetterSetters(this, PROPS);\n const defCon = Object.assign({}, this.constructor.defaultConfig());\n this.config(mergeRecursive(defCon, config));\n\n this._breakPointer = this.config().isTransposed ? matrix[0].length :\n (matrix[0].length > 0 ? matrix[0][0].length : 0);\n this._layoutMatrix = combineMatrices([matrix[0] || [], matrix[1] || []], this.config());\n\n // Create Tree\n this._tree = {\n key: this.config().isTransposed ? COLUMN_ROOT : ROW_ROOT,\n values: this.createTree()\n };\n this._logicalSpace = this.setLogicalSpace();\n }\n\n /**\n *\n *\n * @param {*} params\n * @returns\n * @memberof VisualMatrix\n */\n primaryMatrix (...params) {\n if (params.length) {\n return this;\n }\n return this._primaryMatrix;\n }\n\n /**\n *\n *\n * @param {*} params\n * @returns\n * @memberof VisualMatrix\n */\n secondaryMatrix (...params) {\n if (params.length) {\n return this;\n }\n return this._secondaryMatrix;\n }\n\n /**\n *\n *\n * @param {*} params\n * @returns\n * @memberof VisualMatrix\n */\n tree (...params) {\n if (params.length) {\n return this;\n }\n return this._tree;\n }\n\n /**\n *\n *\n * @static\n * @return\n * @memberof VisualMatrix\n */\n static defaultConfig () {\n return defaultConfig;\n }\n\n /**\n *\n *\n * @return\n * @memberof VisualMatrix\n */\n createTree () {\n const { tree, lastLevelKey } = createTree(this);\n this._lastLevelKey = lastLevelKey;\n return tree;\n }\n\n /**\n * Computes the logical space taken by the entire matrixTree\n *\n * @return {Object} Logical space taken\n * @memberof VisualMatrix\n */\n setLogicalSpace () {\n const {\n isTransposed\n } = this.config();\n const matrixTree = this.tree();\n createMatrixEachLevel(matrixTree, isTransposed);\n return computeLogicalSpace(matrixTree, this.config(), this.maxMeasures());\n }\n\n /**\n * Returns the space taken by visual matrix\n *\n * @return {Object} space taken by the matrix\n * @memberof VisualMatrix\n */\n getLogicalSpace () {\n return this.logicalSpace();\n }\n\n /**\n * Sets the provied space to the visual matrix\n *\n * @param {number} width width provided\n * @param {number} height height provided\n * @memberof VisualMatrix\n */\n setAvailableSpace (width, height) {\n this.availableSpace({ width, height });\n const tree = this.tree();\n const heightMeasures = this.populateMaxMeasures(HEIGHT, tree);\n const widthMeasures = this.populateMaxMeasures(WIDTH, tree);\n const depth = this.calculateDepth(widthMeasures, heightMeasures);\n\n this.viewableMatrix = this.createViewPortMatrix(depth);\n this.viewableMeasures = this.redistribute(this.viewableMatrix, width, height);\n return this;\n }\n\n /**\n * Populate the max measures in the array\n *\n * @param {Array} measures array to be filled with max measures\n * @param {Object} matrixTree matrix tree of visual matrix\n * @param {number} measure width or height\n * @param {number} [depth=0] depth of the tree that to be calculated\n * @memberof VisualMatrix\n */\n populateMaxMeasures (type, matrixTree, depth = 0, measures = []) {\n measures[depth] = Math.max(measures[depth] || 0, matrixTree.space[type]);\n if (matrixTree.values) {\n const childDepth = depth + 1;\n matrixTree.values.forEach((child) => {\n if (child.space) {\n measures = this.populateMaxMeasures(type, child, childDepth, measures);\n }\n });\n }\n return measures;\n }\n\n /**\n * Calculates the depth of the tree that can be viewed\n *\n * @param {Array} widthMeasures array of widths\n * @param {Array} heightMeasures array of heights\n * @return {number} depth of the tree\n * @memberof VisualMatrix\n */\n calculateDepth (widthMeasures, heightMeasures) {\n let i;\n let j;\n const { height, width } = this.availableSpace();\n\n for (i = 0; i < heightMeasures.length; i++) {\n if (heightMeasures[i] <= height) break;\n }\n for (j = 0; j < widthMeasures.length; j++) {\n if (widthMeasures[j] <= width) break;\n }\n return Math.min(widthMeasures.length - 1, Math.max(i, j));\n }\n\n /**\n * Redistributes the provied space to all cells\n *\n * @param {*} viewableMatrix current viewport matrix\n * @param {*} width provied width\n * @param {*} height provied height\n * @return {Object} current viewports matrixes with measures\n * @memberof VisualMatrix\n */\n redistribute (viewableMatrix, width, height) {\n let maxHeights = [];\n let maxWidths = [];\n const {\n isTransposed\n } = this.config();\n\n viewableMatrix.forEach((matrixInst) => {\n const matrix = matrixInst.matrix;\n const mWidth = 0;\n const mHeight = 0;\n const options = { mWidth, mHeight, matrix, width, height, maxHeights, maxWidths };\n const maxMeasures = isTransposed ? this.redistributeColumnWise(options) : this.redistributeRowWise(options);\n maxWidths = maxMeasures.maxWidths;\n maxHeights = maxMeasures.maxHeights;\n });\n\n const measurements = viewableMatrix.map((matrixInst, i) => {\n let heightMeasures;\n let columnMeasures;\n const cellDimOptions = { matrixInst, maxWidths, maxHeights, matrixIndex: i };\n const { heights, widths, rowHeights, columnWidths } = this.getCellDimensions(cellDimOptions);\n\n if (!isTransposed) {\n heightMeasures = [height, height];\n columnMeasures = widths;\n } else {\n heightMeasures = heights;\n columnMeasures = [width, width];\n }\n return {\n rowHeights: {\n primary: rowHeights[0],\n secondary: rowHeights[1]\n },\n columnWidths: {\n primary: columnWidths[0],\n secondary: columnWidths[1]\n },\n height: {\n primary: heightMeasures[0],\n secondary: heightMeasures[1]\n },\n width: {\n primary: columnMeasures[0],\n secondary: columnMeasures[1]\n }\n };\n });\n\n return measurements;\n }\n\n /**\n * Gets the viewable measures for the current viewable matrix\n *\n * @return {Object} Set of viewable measures\n * @memberof VisualMatrix\n */\n getViewableSpaces () {\n return this.viewableMeasures;\n }\n\n /**\n * Returns the matrix that can be viewed in the current viewport\n *\n * @return {Array} Set of matrices that can be viewed\n * @memberof VisualMatrix\n */\n getViewableData () {\n return this.viewableMatrix;\n }\n\n /**\n *\n *\n * @return\n * @memberof VisualMatrix\n */\n removeExtraCells () {\n const {\n isTransposed,\n extraCellLengths\n } = this.config();\n const matrix = this._layoutMatrix;\n const tree = mergeRecursive({}, this.tree());\n const begCellLen = extraCellLengths[0];\n const endCellLen = extraCellLengths[1] || Number.NEGATIVE_INFINITY;\n const layoutMatrix = !isTransposed ? extraCellsRemover(matrix, begCellLen, endCellLen) :\n matrix.slice(0).map(e => extraCellsRemover(e, begCellLen, endCellLen));\n\n tree.values = extraCellsRemover(tree.values, begCellLen, endCellLen);\n if (!isTransposed) {\n tree.matrix = extraCellsRemover(tree.matrix, begCellLen, endCellLen);\n } else {\n tree.matrix = tree.matrix.map(e => extraCellsRemover(e, begCellLen, endCellLen));\n }\n return {\n tree,\n layoutMatrix\n };\n }\n\n /**\n * Creates the viewport that can be viewed together\n *\n * @param {number} depth maxDepth that can be viewed in the viewport\n * @return {Array} Set of matrices that can be viewed\n * @memberof VisualMatrix\n */\n createViewPortMatrix (depth) {\n const arr = [];\n createMatrixInstances(arr, depth, this.removeExtraCells(), this);\n return arr;\n }\n\n /**\n * Distibutes the given space row wisely\n *\n * @param {Object} options Redistribution information\n * @memberof VisualMatrix\n */\n redistributeRowWise (options) {\n let cWidths = [];\n let rHeights = [];\n let mHeight = 0;\n const maxMeasures = this.maxMeasures();\n const {\n isDistributionEqual,\n distribution,\n isTransposed,\n gutter\n } = this.config();\n const { matrix, width, height, maxHeights, maxWidths } = options;\n\n mHeight = spaceTakenByColumn(matrix, this._lastLevelKey).height;\n\n const maxWidth = maxMeasures.reduce((t, n) => {\n t += n;\n return t;\n });\n if (maxWidth > 0) {\n cWidths = maxMeasures.map(space => space + (width - maxWidth) * (space / maxWidth));\n } else {\n cWidths = maxMeasures.map(() => 0);\n }\n rHeights = getDistributedHeight({\n matrix,\n cIdx: this._lastLevelKey,\n height: mHeight,\n availableHeight: height,\n isDistributionEqual,\n distribution,\n isTransposed,\n gutter\n });\n maxWidths.push(cWidths);\n maxHeights.push(rHeights);\n return { maxWidths, maxHeights };\n }\n\n /**\n * Distibutes the given space column wisely\n *\n * @param {Object} options Redistribution information\n * @memberof VisualMatrix\n */\n redistributeColumnWise (options) {\n let rHeights = [];\n const { matrix, width, maxHeights, maxWidths } = options;\n const borderWidth = this.config().unitMeasures.border;\n const mWidth = spaceTakenByRow(matrix[this._lastLevelKey]).width;\n const cWidths = getDistributedWidth({\n row: matrix[this._lastLevelKey],\n width: mWidth,\n availableWidth: width\n }, this.config());\n\n matrix.forEach((row, rIdx) => row.forEach((col, cIdx) => {\n const oldLogicalSpace = col.getLogicalSpace().height;\n col.setAvailableSpace(cWidths[cIdx] - borderWidth, oldLogicalSpace);\n rHeights[rIdx] = Math.max(rHeights[rIdx] || 0, col.getLogicalSpace().height);\n }));\n\n if (maxHeights.length > 0) {\n rHeights = rHeights.map((e, i) => Math.max(e, maxHeights[0][i]));\n }\n\n maxHeights.push(rHeights);\n\n for (let x = 0; x < maxHeights.length; x++) {\n maxHeights[x] = rHeights;\n }\n maxWidths.push(cWidths);\n return { maxHeights, maxWidths };\n }\n\n /**\n * Dispatch the calculated cell dimensions to all the cells\n *\n * @param {Object} options cell dimension information\n * @return {Object} row and column heights / widths\n * @memberof VisualMatrix\n */\n getCellDimensions (options) {\n let indices = [];\n let unitMeasures = [];\n let mainMeasures = [];\n let computedMeasures = [];\n const {\n isTransposed,\n unitMeasures: measures\n } = this.config();\n const borderWidth = measures.border;\n const { matrixInst, maxWidths, maxHeights, matrixIndex } = options;\n const matrix = matrixInst.matrix;\n const rowHeights = [[0], [0]];\n const columnWidths = [[0], [0]];\n const heights = [0, 0];\n const widths = [0, 0];\n const breakPointer = this._breakPointer;\n\n matrix.forEach((row, rIdx) => {\n row.forEach((cell, cIdx) => {\n const colHeight = maxHeights[matrixIndex][rIdx] || 0;\n const colWidth = maxWidths[matrixIndex][cIdx];\n\n if (!isTransposed) {\n cell.setAvailableSpace(colWidth, colHeight - borderWidth);\n indices = [rIdx, cIdx];\n unitMeasures = [columnWidths, rowHeights];\n mainMeasures = [widths, heights];\n computedMeasures = [colWidth, colHeight];\n } else {\n cell.setAvailableSpace(colWidth - borderWidth, colHeight);\n indices = [cIdx, rIdx];\n unitMeasures = [rowHeights, columnWidths];\n mainMeasures = [heights, widths];\n computedMeasures = [colHeight, colWidth];\n }\n\n if (indices[0] === 0 && indices[1] < breakPointer) {\n unitMeasures[0][0][indices[1]] = computedMeasures[0];\n mainMeasures[0][0] = (mainMeasures[0][0] || 0) + computedMeasures[0];\n } else if (indices[0] === 0 && indices[1] >= breakPointer) {\n unitMeasures[0][1][indices[1] - breakPointer] = computedMeasures[0];\n mainMeasures[0][1] = (mainMeasures[0][1] || 0) + computedMeasures[0];\n }\n if (indices[1] === this._lastLevelKey) {\n unitMeasures[1][0][indices[0]] = computedMeasures[1];\n unitMeasures[1][1][indices[0]] = computedMeasures[1];\n }\n });\n });\n return {\n heights,\n widths,\n rowHeights,\n columnWidths\n };\n }\n}\n\n","import { HEIGHT, WIDTH, COLUMN, ROW } from '../enums/constants';\n\n/**\n * Gets measurement for an instance of visual matrix\n *\n * @param {Array} matrix instance of visual matrix\n * @param {string} type height/width\n * @return {Object} Logical height/width of the matrix\n */\nexport function getMatrixMeasurement (matrix, type) {\n if (matrix) {\n return matrix.getLogicalSpace()[type];\n }\n return 0;\n}\n\n/**\n * Sets available space for an instance of visual matrix\n *\n * @param {Array} matrix instance of visual matrix\n * @param {string} type height/width\n * @param {number} value Value of measurement\n */\nexport function setMatrixMeasurement (matrix, type, value) {\n if (matrix) {\n const spaces = matrix.getLogicalSpace();\n if (value && spaces[type] !== value) {\n type === HEIGHT ? matrix.setAvailableSpace(spaces.width, value) :\n matrix.setAvailableSpace(value, spaces.height);\n }\n }\n}\n\n/**\n *\n *\n * @param {*} matrix\n * @param {*} widths\n * @param {*} heights\n */\nconst setAvailableSpace = (matrix, widths, heights) => {\n matrix.forEach((row, rIdx) => {\n row.forEach((placeholder, cIdx) => {\n placeholder.setAvailableSpace(widths[cIdx], heights[rIdx]);\n });\n });\n};\n\n/**\n *\n *\n * @param {*} layout\n * @param {*} matrix\n * @param {*} pointer\n * @returns\n */\nconst setViewSpaces = (layout, pointerType, viewSpaces) => {\n let pointer = layout.config()[`${pointerType}Pointer`];\n if (viewSpaces.length - 1 < pointer) {\n pointer = 0;\n layout.config({ [`${pointerType}Pointer`]: pointer });\n }\n return pointer;\n};\n\n/**\n * Computes the measurements of space for all matrices in the\n * layout\n *\n * @param {Object} layout Instance of grid layout\n * @return {Object} set of measurements for the layout\n */\nexport const computeLayoutMeasurements = (layout) => {\n const rowMatrix = layout.rowMatrix();\n const columnMatrix = layout.columnMatrix();\n const centerMatrix = layout.centerMatrix();\n const {\n width,\n height\n } = layout.measurement();\n const {\n border\n } = layout.config();\n const matrices = layout.matrices();\n const {\n top,\n bottom\n } = matrices;\n\n // Get width of row matrix\n const rowMatrixWidth = getMatrixMeasurement(rowMatrix, WIDTH);\n\n // Set width for column matrix\n\n // Border adjustment for each cell in the central matrix\n const borderWidth = border.width;\n\n const columnMatrixWidth = width - rowMatrixWidth - borderWidth;\n setMatrixMeasurement(columnMatrix, WIDTH, columnMatrixWidth);\n const columnViewPages = columnMatrix.getViewableSpaces();\n setViewSpaces(layout, COLUMN, columnViewPages);\n\n // Figuring out total space needed by current view space\n const columnViewSpace = columnViewPages[layout.config().columnPointer];\n\n // Getting height of column matrix\n const columnMatrixHeight = columnViewSpace.height.primary + columnViewSpace.height.secondary;\n\n // Set height for row matrix\n const rowMatrixHeight = height - columnMatrixHeight;\n\n setMatrixMeasurement(rowMatrix, HEIGHT, rowMatrixHeight);\n\n // Get heights of each cell of row matrix\n const rowViewableSpaces = rowMatrix.getViewableSpaces();\n setViewSpaces(layout, ROW, rowViewableSpaces);\n const rowHeights = [].concat(...rowViewableSpaces.map(e => e.rowHeights.primary));\n const rowWidthsPrimary = [].concat(...rowViewableSpaces.map(e => e.columnWidths.primary));\n const rowWidthsSecondary = [].concat(...rowViewableSpaces.map(e => e.columnWidths.secondary));\n const columnViewableSpaces = columnMatrix.getViewableSpaces();\n // Get widths of each cell of column matrix\n const columnWidths = [].concat(...columnViewableSpaces.map(e => e.columnWidths.primary));\n const columnHeightsPrimary = columnViewableSpaces[0].rowHeights.primary;\n\n const columnHeightsSecondary = [].concat(...columnViewableSpaces.map(e => e.rowHeights.secondary));\n\n // Setting the available space for each cell in the centre matrix\n centerMatrix.forEach((matrix, rIdx) => {\n matrix.forEach((placeholder, cIdx) => {\n placeholder.setAvailableSpace(columnWidths[cIdx] - borderWidth, rowHeights[rIdx] - borderWidth);\n });\n });\n setAvailableSpace(top[0], rowWidthsPrimary, columnHeightsPrimary);\n setAvailableSpace(top[2], rowWidthsSecondary, columnHeightsPrimary);\n setAvailableSpace(bottom[0], rowWidthsPrimary, columnHeightsSecondary);\n setAvailableSpace(bottom[2], rowWidthsSecondary, columnHeightsSecondary);\n\n return {\n rowMatrixHeight,\n rowMatrixWidth,\n columnMatrixHeight,\n columnMatrixWidth\n };\n};\n\n/**\n * Gets view matrices based on current pointers for row and column\n *\n * @param {Object} layout instance of layout\n * @param {number} rowPointer current row pointer\n * @param {number} columnPointer current column pointer\n * @return {Object} returns the view matrix and its relevant information\n */\nexport const getViewMatrices = (layout, rowPointer, columnPointer) => {\n const rowMatrix = layout.rowMatrix();\n const columnMatrix = layout.columnMatrix();\n const centerMatrix = layout.centerMatrix();\n const matrices = layout.matrices();\n const rowMatrices = rowMatrix.getViewableData();\n const columnMatrices = columnMatrix.getViewableData();\n const centralMatrixPointer = {\n row: 0,\n column: 0\n };\n\n for (let i = rowPointer - 1; i >= 0; i--) {\n const length = Math.max(rowMatrices[i].primaryMatrix.length,\n rowMatrices[i].secondaryMatrix.length);\n centralMatrixPointer.row += length;\n }\n /* istanbul ignore next */\n for (let i = columnPointer - 1; i >= 0; i--) {\n const matrix = columnMatrices[i];\n const { primaryMatrix, secondaryMatrix } = matrix;\n const length = Math.max(primaryMatrix[0] ? primaryMatrix[0].length : 0,\n secondaryMatrix[0] ? secondaryMatrix[0].length : 0);\n centralMatrixPointer.column += length;\n }\n\n matrices.top[1] = columnMatrices[columnPointer].primaryMatrix;\n matrices.bottom[1] = columnMatrices[columnPointer].secondaryMatrix;\n\n matrices.center[0] = rowMatrices[rowPointer].primaryMatrix;\n matrices.center[2] = rowMatrices[rowPointer].secondaryMatrix;\n\n const rowMatrixLen = Math.max(matrices.center[0].length, matrices.center[2].length);\n /* istanbul ignore next */\n const columnMatrixLen = Math.max(matrices.top[1][0] ? matrices.top[1][0].length : 0, matrices.bottom[1][0] ?\n matrices.bottom[1][0].length : 0);\n matrices.center[1] = centerMatrix.slice(centralMatrixPointer.row, centralMatrixPointer.row + rowMatrixLen)\n .map(matrix => matrix.slice(centralMatrixPointer.column, centralMatrixPointer.column + columnMatrixLen));\n\n return {\n matrices,\n rowPages: rowMatrices.length,\n columnPages: columnMatrices.length\n };\n};\n/**\n * Returns measurements of the cells of the current matrix\n *\n * @param {Object} layout instance of layout\n * @return {Object} returns the measurements for current view matrix\n */\nexport const getViewMeasurements = (layout) => {\n const rowMatrix = layout.rowMatrix();\n const columnMatrix = layout.columnMatrix();\n const {\n width,\n height\n } = layout.measurement();\n const {\n columnPointer,\n rowPointer\n } = layout.config();\n\n const rowMatrixWidth = rowMatrix.getViewableSpaces()[rowPointer].width;\n const { primary: leftWidth, secondary: rightWidth } = rowMatrixWidth;\n\n const columnMatrixHeight = columnMatrix.getViewableSpaces()[columnPointer].height;\n const { primary: topHeight, secondary: bottomHeight } = columnMatrixHeight;\n\n const centerHeight = height - (topHeight + bottomHeight);\n const centerWidth = width - (leftWidth + rightWidth);\n\n return {\n viewWidth: [leftWidth, centerWidth, rightWidth],\n viewHeight: [topHeight, centerHeight, bottomHeight]\n };\n};\n","/**\n * This file declares a table that can be extended to create a Datagrid, crosstab\n * and man other visualzations that require a tabular structure.\n */\n\nimport { getUniqueId } from 'muze-utils';\nimport GenericLayout from '../generic-layout';\nimport { DEFAULT_CONFIGURATION, DEFAULT_MEASUREMENTS } from './defaults';\nimport {\n renderMatrices\n} from './renderer';\nimport { generateVisualMatrices } from './layout-helper';\nimport { computeLayoutMeasurements, getViewMeasurements, getViewMatrices } from './computations';\n/**\n * This class is used to create a tabular structure that\n * can house charts and values.\n *\n * @class GridLayout\n */\nexport default class GridLayout extends GenericLayout {\n\n /**\n * Creates an instance of TableLayout.\n * @param {HTMLElement} matrices Set of upto 9 matrices containing the cells to be rendered\n * @param {HTMLElement} mountPoint DOM element/d3 selection where the layout is to be mounted\n * @param {Object} measurement The dimensions of the layout\n * @param {Object} config external configurations.\n * @memberof GenericLayout\n *\n * measurement : {\n * width : number => width of the container\n * height : number => height of the container\n * unitHeight : number => height of unit of the cells\n * unitWidth : number => width of unit of the cells\n * }\n *\n */\n constructor (matrices, mountPoint, measurement, config) {\n super(mountPoint, measurement, config);\n this.matrices(matrices);\n this.config(this.constructor.defaultConfig());\n this._layoutId = getUniqueId();\n }\n\n /**\n * Returns initial set of measurements for the grid layout\n *\n * @static\n * @return {Object} Returns initial set of measurements\n * @memberof GridLayout\n */\n static defaultMeasurement () {\n return DEFAULT_MEASUREMENTS;\n }\n\n /**\n * Returns initialconfiguration for grid layout\n *\n * @static\n * @return {Object} Returns initial configuration for grid layout\n * @memberof GridLayout\n */\n static defaultConfig () {\n return DEFAULT_CONFIGURATION;\n }\n\n /**\n * This function is used to return an instance of GridLayout\n *\n * @return {GridLayout} Instance of grid layout.\n * @static\n * @memberof GridLayout\n */\n static create () {\n return new GridLayout(null, null, this.defaultMeasurement(), this.defaultConfig());\n }\n\n /**\n * Sets/Gets the matrices for the layout\n *\n * @param {Array} matrices Set of matrices\n * @return {Object} Getter/Setter\n * @memberof GridLayout\n */\n matrices (matrices) {\n if (matrices) {\n this._matrices = generateVisualMatrices(this, matrices);\n return this;\n }\n return super.matrices(matrices);\n }\n\n /**\n * Triggers the computations for the layout based on the matrices available\n * This causes a reflow in the entire layout system.\n *\n * @return {Object} Layout instance\n * @memberof GridLayout\n */\n triggerReflow () {\n computeLayoutMeasurements(this);\n this.setViewInformation();\n return this;\n }\n\n /**\n *\n *\n * @param {*} type\n * @param {*} pageNumber\n * @returns\n * @memberof GridLayout\n */\n gotoPage (type, pageNumber) {\n const pageType = type.toLowerCase();\n const { viewMatricesInfo } = this.getViewInformation();\n const totalPages = viewMatricesInfo[`${pageType}Pages`];\n const pointer = Math.min(Math.max(1, pageNumber), totalPages);\n this.config({\n [`${pageType}Pointer`]: pointer - 1\n });\n this.setViewInformation();\n this.renderGrid();\n return this;\n }\n\n /**\n *\n *\n * @param {*} type\n * @returns\n * @memberof GridLayout\n */\n pages (type) {\n const { viewMatricesInfo } = this.getViewInformation();\n const pageType = type.toLowerCase();\n return {\n totalPages: viewMatricesInfo[`${pageType}Pages`],\n currentPage: this.config()[`${pageType}Pointer`] + 1\n };\n }\n\n /**\n *\n *\n * @returns\n * @memberof GridLayout\n */\n setViewInformation () {\n const {\n rowPointer,\n columnPointer,\n border\n } = this.config();\n const viewMatricesInfo = getViewMatrices(this, rowPointer, columnPointer);\n const layoutDimensions = getViewMeasurements(this);\n layoutDimensions.border = border;\n this.viewInfo = {\n viewMatricesInfo,\n layoutDimensions\n };\n return this;\n }\n\n /**\n *\n *\n * @returns\n * @memberof GridLayout\n */\n getViewInformation () {\n return this.viewInfo;\n }\n\n /**\n * Renders the layout\n *\n * @return {Object} current instance\n * @memberof GridLayout\n */\n renderGrid (mountPoint) {\n this.mountPoint(mountPoint);\n if (!this.mountPoint()) {\n return this;\n }\n const {\n viewMatricesInfo,\n layoutDimensions\n } = this.getViewInformation();\n // Render matrices\n renderMatrices(this, viewMatricesInfo.matrices, layoutDimensions);\n return this;\n }\n}\n","import VisualMatrix from '../visual-matrix/visual-matrix';\n\n/**\n * Generates the set of visual matrices for pagination and layouting algorithms\n *\n * @param {*} context\n * @param {*} matrices\n * @returns\n */\nexport const generateVisualMatrices = (context, matrices) => {\n // Set of matrices for layout is generated starting with the left matrix\n let leftMatrix = [];\n let rightMatrix = [];\n let topMatrix = [];\n let bottomMatrix = [];\n let begColCells;\n let endColCells;\n const {\n isRowSizeEqual,\n isColumnSizeEqual,\n gutterSpace,\n distribution,\n border,\n breakPage\n } = context.config();\n const {\n minUnitHeight,\n minUnitWidth\n } = context.measurement();\n const { top, center, bottom } = matrices;\n const [topLeft, topColumns, topRight] = top;\n const [leftRows, valueMatrix, rightRows] = center;\n const [bottomLeft, bottomColumns, bottomRight] = bottom;\n\n if (leftRows.length > 0) {\n // If no left matrix is present, context will be empty\n leftMatrix = [...topLeft, ...leftRows, ...bottomLeft];\n }\n if (rightRows.length > 0) {\n // If no right matrix is present, context will be empty\n rightMatrix = [...topRight, ...rightRows, ...bottomRight];\n }\n if (topColumns.length > 0 && topColumns[0].length > 0) {\n // If no top matrix is present, context will be empty\n topMatrix = topColumns.map((d, i) => [...topLeft[i], ...d, ...topRight[i]]);\n }\n if (bottomColumns.length > 0 && bottomColumns[0].length > 0) {\n // If no bottom matrix is present, context will be empty\n bottomMatrix = bottomColumns.map((d, i) => [...bottomLeft[i], ...d, ...bottomRight[i]]);\n }\n context.rowMatrix(new VisualMatrix([leftMatrix, rightMatrix], {\n isDistributionEqual: isRowSizeEqual,\n distribution: distribution.rows,\n gutter: gutterSpace.rows,\n unitMeasures: {\n width: minUnitWidth,\n height: minUnitHeight,\n border: border.width\n },\n breakPage: breakPage.rows.map(e => e + Math.max(topLeft.length, topRight.length)),\n extraCellLengths: [topLeft.length, bottomLeft.length]\n }));\n\n if (topLeft.length > 0) {\n begColCells = topLeft[0].length;\n } else {\n begColCells = bottomLeft.length > 0 ? bottomLeft[0].length : 0;\n }\n\n if (topRight.length > 0) {\n endColCells = topRight[0].length;\n } else {\n endColCells = bottomRight.length > 0 ? bottomRight[0].length : 0;\n }\n\n context.columnMatrix(new VisualMatrix([topMatrix, bottomMatrix], {\n isDistributionEqual: isColumnSizeEqual,\n distribution: distribution.columns,\n gutter: gutterSpace.columns,\n isTransposed: true,\n unitMeasures: {\n width: minUnitWidth,\n height: minUnitHeight,\n border: border.width\n },\n breakPage: breakPage.columns,\n extraCellLengths: [begColCells, endColCells]\n }));\n context.centerMatrix(valueMatrix);\n\n return matrices;\n};\n","import { ERROR_MSG } from 'muze-utils';\n/**\n * An Interface to be implemented if the transaction support is necessary. This class ensures reactivity to\n * global properties.\n */\nexport default class TransactionSupport {\n /**\n * Property accessor for data member of the class. Data is passed to the system by calling this method.\n */\n data () {\n throw new Error(ERROR_MSG.INTERFACE_IMPl);\n }\n\n /**\n * Property accessor for width of the class. Width is passed as an integer.\n */\n width () {\n throw new Error(ERROR_MSG.INTERFACE_IMPl);\n }\n\n /**\n * Property accessor for height of the class. Height is passed as an integer.\n */\n height () {\n throw new Error(ERROR_MSG.INTERFACE_IMPl);\n }\n\n /**\n * Property accessor for config of the class. Config is passed as an object.\n */\n config () {\n throw new Error(ERROR_MSG.INTERFACE_IMPl);\n }\n}\n","/**\n * Flag to specify whether direction is vertical.\n */\nexport const MARGIN = 'margin';\nexport const LEFT = 'left';\nexport const RIGHT = 'right';\nexport const BOTTOM = 'bottom';\nexport const TOP = 'top';\nexport const SPACE_FIXER = 'spaceFixer';\nexport const CLASSPREFIX = 'muze';\nexport const VERTICAL_ALIGN = 'verticalAlign';\nexport const TEXT_ALIGN = 'textAlign';\nexport const IS_OFFSET = 'isOffset';\nexport const MIDDLE = 'middle';\nexport const BASELINE = 'baseline';\nexport const SHOW = 'show';\nexport const CENTER = 'center';\nexport const TEXT = 'text';\nexport const HEADER = 'header';\nexport const HEIGHT = 'height';\nexport const WIDTH = 'width';\nexport const DATA = 'data';\nexport const AXES = 'axes';\nexport const FACET_BY_FIELDS = 'facetByFields';\nexport const FIELDS = 'fields';\nexport const TRANSFORM = 'transform';\nexport const LAYER_DEF = 'layerDef';\nexport const CONFIG = 'config';\nexport const DETAIL_FIELDS = 'detailFields';\n\nexport const TEXT_CELL = 'text-cell';\nexport const AXIS_CELL = 'axis-cell';\nexport const GEOM_CELL = 'geom-cell';\nexport const BLANK_CELL = 'blank-cell';\n","// eneum to refer to simple cell\nexport const SIMPLE = 'simple';\n// eneum to refer to header cell\nexport const TEXT = 'text';\n// enum to refer to axis cell\nexport const AXIS = 'axis';\n// enum to refer to visual cell\nexport const GEOM = 'geom';\n// enum to refer blank cell\nexport const BLANK = 'blank';\n","import {\n ERROR_MSG,\n getUniqueId,\n mergeRecursive\n} from 'muze-utils';\nimport { SIMPLE } from './enums/cell-type';\n\n/**\n * This file declares a class that is used as an interface to create new\n * SimpleCell elements.\n * @module SimpleCell\n */\n/**\n * Base class for all table cells.\n *\n * @interface\n * @class SimpleCell\n */\nclass SimpleCell {\n\n /**\n * Creates an instance of SimpleCell.\n *\n * @param {*} config The input configuration.\n * @memberof SimpleCell\n */\n constructor (config) {\n this._id = getUniqueId();\n\n const defConfig = mergeRecursive({}, this.constructor.defaultConfig());\n this._config = mergeRecursive(defConfig, config || {});\n\n this._mount = null;\n }\n\n /**\n * Returns the type of the placehlder.\n *\n * @readonly\n * @memberof SimpleCell\n */\n get type () {\n return SIMPLE;\n }\n\n /**\n * Returns the type of the placehlder.\n *\n * @readonly\n * @memberof SimpleCell\n * @return {Object} Default config for the placeholder\n */\n static defaultConfig () {\n return {};\n }\n\n /**\n * Returns the value contained by the SimpleCell.\n *\n * @memberof SimpleCell\n */\n valueOf () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Returns a unique identifier for the instance used\n * to control selective rendering.\n *\n * @memberof SimpleCell\n */\n id () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Returns a serialized representation of the instance.\n *\n * @memberof SimpleCell\n */\n serialize () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Returns an object with width and height fields\n * specifying the space taken up by this metod.\n *\n * @memberof SimpleCell\n */\n getLogicalSpace () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Method used to set the space available to render the SimpleCell\n *\n * @param {number} width The available width.\n * @param {number} height The available height.\n * @memberof SimpleCell\n */\n setAvailableSpace () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Render the SimpleCell inthe supplied mount point.\n *\n * @param {HTMLElement} mount The mount point to render in.\n * @memberof SimpleCell\n */\n render () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Render the SimpleCell inthe supplied mount point.\n *\n * @param {HTMLElement} mount The mount point to render in.\n * @memberof SimpleCell\n */\n remove () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n}\n\nexport default SimpleCell;\n","/**\n * This file exports variables that are used as defaults for\n * the placeholders\n */\nimport * as CONSTANTS from './constants';\n\n /**\n * Default Configuration for the cells\n * @return {Object} Default configuration\n */\nexport const DEFAULT_CONFIG = {\n [CONSTANTS.MARGIN]: {\n [CONSTANTS.LEFT]: 0,\n [CONSTANTS.RIGHT]: 0,\n [CONSTANTS.TOP]: 0,\n [CONSTANTS.BOTTOM]: 0\n },\n [CONSTANTS.SPACE_FIXER]: 2,\n [CONSTANTS.IS_OFFSET]: false,\n [CONSTANTS.VERTICAL_ALIGN]: CONSTANTS.TOP,\n [CONSTANTS.TEXT_ALIGN]: CONSTANTS.CENTER,\n [CONSTANTS.SHOW]: true\n};\n","import { mergeRecursive } from 'muze-utils';\nimport { GEOM, TEXT, AXIS, BLANK } from './enums/cell-type';\n\nconst DEFAULT_PROPS = {\n mount: {},\n availHeight: {},\n availWidth: {},\n config: {\n sanitization: (context, value) => mergeRecursive(context._config, value)\n },\n logicalSpace: {},\n source: {}\n};\n\nconst geomProps = {\n data: {},\n caption: {},\n config: {},\n axes: {\n sanitization: (context, value) => Object.assign(context._axes, value)\n },\n facetByFields: {},\n fields: {},\n transform: {},\n layerDef: {},\n detailFields: {}\n};\n\nexport const PROPS = {\n [TEXT]: DEFAULT_PROPS,\n [GEOM]: mergeRecursive(geomProps, DEFAULT_PROPS),\n [AXIS]: DEFAULT_PROPS,\n [BLANK]: DEFAULT_PROPS\n};\n","/**\n * This file declares a class that represents a table cell\n * used to house an axis.\n * @module VisualCell\n */\nimport { selectElement, makeElement, generateGetterSetters } from 'muze-utils';\nimport { CLASSPREFIX, HEIGHT, WIDTH, AXIS_CELL } from './enums/constants';\nimport SimpleCell from './simple-cell';\nimport { DEFAULT_CONFIG } from './enums/defaults';\nimport { AXIS } from './enums/cell-type';\nimport { PROPS } from './props';\n\n/**\n * Computes the logical space of the an axis instance within an axis cell\n *\n * @param {Object} context Required to get the needed parameters to compute axis space\n * @return {Object} Returns the logical space for axis\n */\nconst computeAxisSpace = (context) => {\n let logicalWidth;\n let logicalHeight;\n const axis = context.source();\n const {\n spaceFixer,\n margin\n } = context.config();\n const {\n width,\n height\n } = axis.getLogicalSpace();\n const {\n show\n } = axis.config();\n if (show === true) {\n logicalHeight = Math.floor(height + margin.top + margin.bottom + spaceFixer);\n logicalWidth = Math.floor(width + margin.left + margin.right + spaceFixer);\n } else {\n [logicalWidth, logicalHeight] = [width, height];\n }\n return {\n width: logicalWidth,\n height: logicalHeight\n };\n};\n\n/**\n * Represents an axis cell.\n *\n * @class Axis\n */\nclass AxisCell extends SimpleCell {\n\n /**\n * Creates an instance of AxisCell.\n *\n * @param {Object} config The input config.\n * @memberof AxisCell\n */\n constructor (config) {\n super(config);\n\n this._axis = null;\n this._availHeight = null;\n this._availWidth = null;\n this._logicalSpace = null;\n\n generateGetterSetters(this, PROPS[AXIS]);\n }\n\n /**\n * return the type pf SimpleCell cell.\n *\n * @readonly\n * @memberof AxisCell\n */\n get type () {\n return AXIS;\n }\n\n /**\n * This method return the value conatined by this SimpleCell.\n *\n * @return {SimpleAxis | ColorAxis} Instance of SimpleAxis or ColorAxis.\n * @memberof AxisCell\n */\n valueOf () {\n return this.source().id;\n }\n\n /**\n * This method return the unique identififer of the axis\n *\n * @return {string} Id of the axis.\n * @memberof AxisCell\n */\n get id () {\n return this._id;\n }\n\n /**\n * Retrns the serialized representation of this cell.\n *\n * @return {Object}Object with serializable props.\n * @memberof AxisCell\n */\n serialize () {\n return {\n type: AXIS,\n axis: this.source().serialize()\n };\n }\n\n /**\n * return the default configuration for the text cell\n *\n * @static\n * @return {Object} Default configuration of the cell\n * @memberof AxisCell\n */\n static defaultConfig () {\n return DEFAULT_CONFIG;\n }\n\n /**\n * return the space taken up by an axis element in the dom.\n *\n * @return {Object} Object with width and height fields.\n * @memberof AxisCell\n */\n getLogicalSpace () {\n if (!this.logicalSpace()) {\n this.logicalSpace(computeAxisSpace(this));\n }\n return this.logicalSpace();\n }\n\n /**\n * This method is used to set the space availiable to render\n * the SimpleCell.\n *\n * @param {number} width The width of SimpleCell.\n * @param {number} height The height of SimpleCell.\n * @return {Instance} Returns current Instance\n * @memberof AxisCell\n */\n setAvailableSpace (width, height) {\n this.availWidth(width);\n this.availHeight(height);\n const {\n margin,\n isOffset\n } = this.config();\n this.source().setAvailableSpace(width, height, margin, isOffset);\n this.logicalSpace(null);\n this.source().logicalSpace(null);\n return this;\n }\n\n /**\n * This method is used to render the axis inside the axis cell.\n *\n * @param {HTMLElement} mount The mount point.\n * @return {Selection} node where axis mounted\n * @memberof AxisCell\n */\n /* istanbul ignore next */render (mount) {\n if (!mount) {\n return this;\n }\n const axis = this.source();\n const availHeight = this.availHeight();\n const availWidth = this.availWidth();\n const {\n margin\n } = this.config();\n const {\n top,\n bottom,\n left,\n right\n } = margin;\n const {\n show\n } = axis.config();\n const wrapperDiv = makeElement(selectElement(mount), 'div', [this], `${CLASSPREFIX}-${AXIS_CELL}`);\n const selection = makeElement(wrapperDiv, 'svg', [1], `${CLASSPREFIX}-axis-container`);\n\n this.mount(mount);\n if (availWidth === 0 || !availWidth) {\n selection.attr(WIDTH, `${0}px`);\n }\n if (availHeight === 0 || !availHeight) {\n selection.attr(HEIGHT, `${0}px`);\n }\n wrapperDiv.style(WIDTH, `${show ? availWidth : 0}px`)\n .style(HEIGHT, `${show ? availHeight : 0}px`)\n .style('margin-top', top)\n .style('margin-bottom', bottom)\n .style('margin-left', left)\n .style('margin-right', right);\n\n axis.mount(selection.node());\n return selection;\n }\n\n /**\n * Disposes the cell\n *\n * @return {Instance} Current instance of AxisCell\n * @memberof AxisCell\n */\n remove () {\n this.source() && this.source().remove();\n this.mount() && this.mount().remove();\n return this;\n }\n}\n\nexport default AxisCell;\n\n","/**\n * This file declares a class that represents a BLANK element in a table.\n * @module VisualCell\n */\nimport {\n selectElement,\n makeElement,\n applyStyle,\n generateGetterSetters\n } from 'muze-utils';\nimport SimpleCell from './simple-cell';\nimport { CLASSPREFIX, BLANK_CELL } from './enums/constants';\nimport { BLANK } from './enums/cell-type';\nimport { DEFAULT_CONFIG } from './enums/defaults';\nimport { PROPS } from './props';\n\n/**\n * Represents a table haeder.\n *\n * @class BLANK\n */\nclass BlankCell extends SimpleCell {\n\n /**\n * Creates an instance of BLANK.\n * @param {Object} config The input configuration.\n * @memberof BLANK\n */\n constructor (config) {\n super(config);\n\n generateGetterSetters(this, PROPS[BLANK]);\n }\n\n /**\n * return the type pf SimpleCell cell.\n *\n * @readonly\n * @memberof BlankCell\n */\n get type () {\n return BLANK;\n }\n\n /**\n * This method return the value contained by this SimpleCell.\n *\n * @return {string} The text value contained by this cell.\n * @memberof BlankCell\n */\n valueOf () {\n return this.id;\n }\n\n /**\n * return the default configuration for the text cell\n *\n * @static\n * @return {Object} Default configuration of the cell\n * @memberof BlankCell\n */\n static defaultConfig () {\n return DEFAULT_CONFIG;\n }\n\n /**\n * This method is used to return a unique identifier for\n * the BLANK cell.\n *\n * @return {string} The unique identifier for the BLANK.\n * @memberof BlankCell\n */\n get id () {\n return this._id;\n }\n\n /**\n * This method is used to obtain a serialized representation of this instance.\n *\n * @return {Object} Object with serilizable props.\n * @memberof BLANK\n */\n serialize () {\n return {\n type: BLANK\n };\n }\n\n /**\n * This method return the space taken up\n * by the text with the style applied.\n *\n * @return {Object} width and height taken up by the text.\n * @memberof BLANK\n */\n getLogicalSpace () {\n if (!this.logicalSpace()) {\n return {\n width: this.width || 0,\n height: this.height || 0\n };\n }\n return this.logicalSpace();\n }\n\n /**\n * This method is used to set the available space.\n *\n * @param {number} width The available width.\n * @param {number} height The available height.\n * @return {Instance} Returns current Instance\n * @memberof BlankCell\n */\n setAvailableSpace (width, height) {\n this.availWidth(width);\n this.availHeight(height);\n this.logicalSpace(null);\n return this;\n }\n\n /**\n * This method is used to render the BLANK cell inside\n * the provided mount point.\n *\n * @param {HTMLElement} mount The mount point for this cell.\n * @return {Instance} Returns current Instance\n * @memberof BLANK\n */\n /* istanbul ignore next */render (mount) {\n if (mount) {\n const { style } = this.config();\n // append span element to mount point\n this.mount(mount);\n const container = selectElement(mount);\n const elem = makeElement(container, 'div', [this.id]);\n elem.classed(`${CLASSPREFIX}-${BLANK_CELL}`, true);\n elem.style('width', `${this.availWidth()}px`);\n elem.style('height', `${this.availHeight()}px`);\n elem.html('');\n // apply style on the returned element\n if (style) {\n applyStyle(elem, style);\n }\n } return this;\n }\n\n /**\n * Removes the cell(Disposal)\n *\n * @return {Instance} Returns current Instance\n * @memberof BlankCell\n */\n remove () {\n this.mount() && this.mount().remove();\n return this;\n }\n }\nexport default BlankCell;\n","/**\n * This file declares a class that represents a Text element in a table.\n * @module VisualCell\n */\n\nimport {\n selectElement,\n makeElement,\n getSmartComputedStyle,\n generateGetterSetters\n} from 'muze-utils';\nimport SimpleCell from './simple-cell';\nimport { TEXT } from './enums/cell-type';\nimport { PROPS } from './props';\nimport { DEFAULT_CONFIG } from './enums/defaults';\nimport { CLASSPREFIX, TOP, BOTTOM, LEFT, RIGHT, HEADER, WIDTH, TEXT_CELL } from './enums/constants';\nimport './text-cell.scss';\n\n/**\n* Computes the Logical Space for the text\n*\n* @param {Object} context Required to get the needed parameters to compute text space\n* @return {Object} Logical space taken up by text\n* @memberof TextCell\n*/\nconst computeTextSpace = (context) => {\n const { labelManager } = context.dependencies();\n const space = labelManager.getOriSize(context.source());\n const {\n margin,\n show\n } = context.config();\n\n labelManager.setStyle(context._computedStyle);\n if (show) {\n return {\n width: space.width + margin.left + margin.right + context._minTickDiff.width,\n height: space.height + margin.top + margin.bottom + context._minTickDiff.height\n };\n } return {\n width: 0,\n height: 0\n };\n};\n\n/**\n * Represents a table haeder.\n *\n * @class Text\n */\nclass TextCell extends SimpleCell {\n\n /**\n * Creates an instance of Text.\n * @param {Object} config The input configuration.\n * @param {string} dependencies Dependencies for the class(labelManager)\n * @memberof Text\n */\n constructor (config, dependencies) {\n super(config);\n\n this._dependencies = dependencies;\n this._className = this._config.className ||\n (this._config.type === HEADER ? `${CLASSPREFIX}-${HEADER}-cell` : `${CLASSPREFIX}-${TEXT}-cell`);\n this._computedStyle = getSmartComputedStyle(selectElement('body'), this._className);\n this._dependencies.labelManager.setStyle(this._computedStyle);\n this._minTickDiff = this._dependencies.labelManager.getOriSize('WW');\n\n generateGetterSetters(this, PROPS[TEXT]);\n }\n\n /**\n * return the type pf SimpleCell cell.\n *\n * @readonly\n * @memberof TextCell\n */\n get type () {\n return TEXT;\n }\n\n /**\n * This method return the value contained by this SimpleCell.\n *\n * @return {string} The text value contained by this cell.\n * @memberof TextCell\n */\n valueOf () {\n return this.source();\n }\n\n /**\n * This method is used to return a unique identifier for\n * the Text cell.\n *\n * @return {string} The unique identifier for the Text.\n * @memberof TextCell\n */\n get id () {\n return this._id;\n }\n\n /**\n * Returns the dependencies of the instance\n *\n * @return {Object} Dependencies needed by the class\n * @memberof TextCell\n */\n dependencies () {\n return this._dependencies;\n }\n\n /**\n * This method is used to obtain a serialized representation of this instance.\n *\n * @return {Object} Object with serilizable props.\n * @memberof TextCell\n */\n serialize () {\n return {\n text: this.source(),\n type: TEXT\n };\n }\n\n /**\n * return the default configuration for the text cell\n *\n * @static\n * @return {Object} Default configuration of the cell\n * @memberof TextCell\n */\n static defaultConfig () {\n return DEFAULT_CONFIG;\n }\n\n /**\n * This method return the space taken up\n * by the text with the style applied.\n *\n * @return {Object} width and height taken up by the text.\n * @memberof Text\n */\n getLogicalSpace () {\n if (!this.logicalSpace()) {\n this.logicalSpace(computeTextSpace(this));\n }\n return this.logicalSpace();\n }\n\n /**\n * This method is used to set the available space.\n *\n * @param {number} width The available width.\n * @param {number} height The available height.\n * @return {Instance} Returns current Instance\n * @memberof TextCell\n */\n setAvailableSpace (width, height) {\n this.availWidth(width);\n this.availHeight(height);\n this.logicalSpace(null);\n return this;\n }\n\n /**\n * This method is used to render the Text cell inside\n * the provided mount point.\n *\n * @param {HTMLElement} mount The mount point for this cell.\n * @return {Instance} Returns current Instance\n * @memberof Text\n */\n render (mount) {\n const availWidth = this.availWidth();\n const {\n margin,\n show,\n verticalAlign,\n textAlign\n } = this.config();\n\n this.mount(mount);\n if (show) {\n const container = selectElement(mount);\n const elem = makeElement(container, 'div', [this.id], `${CLASSPREFIX}-${TEXT_CELL}`);\n\n container.style('vertical-align', verticalAlign);\n elem.classed(this._className, true);\n // apply style on the returned element\n elem.style(WIDTH, availWidth ? `${availWidth}px` : '100%');\n [TOP, BOTTOM, LEFT, RIGHT].forEach((type) => {\n elem.style(`padding-${type}`, `${margin[type]}px`);\n });\n elem.style('text-align', textAlign);\n elem.style('display', 'inline');\n // set the text as the innerHTML\n elem.html(this.source());\n }\n return this;\n }\n\n /**\n * Disposes the cell\n *\n * @return {Instance} Returns current Instance\n * @memberof TextCell\n */\n remove () {\n this.mount() && this.mount().remove();\n return this;\n }\n }\n\nexport default TextCell;\n","/**\n * This file declares a class that is used to represent a table cell\n * that houses a visual unit.\n * @module VisualCell\n */\n\nimport { selectElement, makeElement, generateGetterSetters } from 'muze-utils';\nimport SimpleCell from './simple-cell';\nimport { GEOM } from './enums/cell-type';\nimport { PROPS } from './props';\nimport {\n CLASSPREFIX, HEIGHT, WIDTH, DATA, AXES, FACET_BY_FIELDS, FIELDS, TRANSFORM, LAYER_DEF, CONFIG, GEOM_CELL,\n DETAIL_FIELDS\n} from './enums/constants';\nimport { DEFAULT_CONFIG } from './enums/defaults';\n\n/**\n * Calculates the logical space of the cell\n *\n * @param {Object} context Required to get the needed parameters to compute unit space\n * @return {Object} Logical space taken up by the unit\n * @memberof GeomCell\n */\nconst computeGeomSpace = (context) => {\n const config = context.source().config();\n const { width, height } = config;\n return {\n width: Math.ceil(width),\n height: Math.ceil(height + context.getCaptionSpace().height)\n };\n};\n\n /**\n * This class represents a SimpleCell for visual unit.\n *\n * @class GeomCell\n */\nclass GeomCell extends SimpleCell {\n\n /**\n * Creates an instance of GeomCell.\n * @param {Object} config The input configuration.\n * @memberof GeomCell\n */\n constructor (config) {\n super(config);\n\n this._unit = null;\n this._layers = null;\n this._axes = {};\n this._datamodel = {};\n this._facetByFields = {};\n this._fields = null;\n this._transform = null;\n this._caption = null;\n\n generateGetterSetters(this, PROPS[GEOM]);\n }\n\n /**\n * return the type pf SimpleCell cell.\n *\n * @readonly\n * @memberof GeomCell\n */\n get type () {\n return GEOM;\n }\n\n /**\n * This method return the value contained by this cell.\n *\n * @return {VisualUnit} Instance of visual unit contained by visual unit.\n * @memberof GeomCell\n */\n valueOf () {\n return this.source();\n }\n\n /**\n * This method is used to return the id of the\n * visual unit housed by this cell.\n *\n * @return {string} The unique id of the visual unit.\n * @memberof GeomCell\n */\n get id () {\n return this.source().id();\n }\n\n /**\n * This method return a serialized representation of\n * this instance.\n *\n * @return {Object} Object with serializable props.\n * @memberof GeomCell\n */\n serialize () {\n return {\n type: GEOM,\n unit: this.source().serialize(),\n caption: this.caption()\n };\n }\n\n /**\n * return the default configuration for the geom cell\n *\n * @static\n * @return {Object} Default configuration of the cell\n * @memberof GeomCell\n */\n static defaultConfig () {\n return DEFAULT_CONFIG;\n }\n\n /**\n * Updates the model based on the changed parameters\n *\n * @return {Instance} return instance\n * @memberof GeomCell\n */\n updateModel () {\n const unit = this.source();\n unit.lockModel();\n [DATA, AXES, FACET_BY_FIELDS, FIELDS, TRANSFORM, LAYER_DEF, CONFIG, DETAIL_FIELDS].forEach((prop) => {\n this[prop]() && unit[prop](this[prop]());\n });\n unit.unlockModel();\n return this;\n }\n\n /**\n * It gives the space taken by the caption of the unit\n *\n * @return {Object} return the space taken by caption\n * @memberof GeomCell\n */\n getCaptionSpace () {\n const caption = this.caption();\n\n let captionSpace = { width: 0, height: 0 };\n if (caption) {\n captionSpace = caption.getLogicalSpace();\n }\n return captionSpace;\n }\n\n /**\n * return the space taken up by the element in the dom.\n *\n * @return {Object} Object with width and height fields.\n * @memberof GeomCell\n */\n getLogicalSpace () {\n if (!this.logicalSpace()) {\n this.logicalSpace(computeGeomSpace(this));\n }\n return this.logicalSpace();\n }\n\n /**\n * This method is used to set the space available to\n * render the SimpleCell.\n *\n * @param {number} width The available width.\n * @param {number} height The available height.\n * @return {Instance} Returns current Instance\n * @memberof GeomCell\n */\n setAvailableSpace (width, height) {\n const unit = this.source();\n\n this.availWidth(width);\n this.availHeight(height);\n unit.lockModel();\n unit.width(width).height(height - this.getCaptionSpace().height);\n unit.unlockModel();\n this.logicalSpace(null);\n return this;\n }\n\n /**\n * his method is used to render the visual unit inside the provided cell.\n *\n * @param {HTMLElement} mount The mountpoint in the table.\n * @return {Instance} Returns current Instance\n * @memberof GeomCell\n */\n render (mount) {\n if (mount) {\n this.mount(mount);\n const availHeight = this.availHeight();\n const availWidth = this.availWidth();\n const caption = this.caption();\n const wrapperDiv = makeElement(selectElement(mount), 'div', [1], `${CLASSPREFIX}-${GEOM_CELL}`);\n\n if (caption) {\n const captionDom = makeElement(wrapperDiv, 'div', [caption], `${CLASSPREFIX}-unit-caption`).node();\n caption.render(captionDom);\n }\n const selection = makeElement(wrapperDiv, 'div', [1], `${CLASSPREFIX}-unit`);\n wrapperDiv.style(WIDTH, `${availWidth}px`).style(HEIGHT, `${availHeight}px`);\n selection.style(WIDTH, `${availWidth}px`)\n .style(HEIGHT, `${availHeight - this.getCaptionSpace().height}px`);\n this.source().mount(selection.node());\n }\n return this;\n }\n\n /**\n * Disposes the cell\n *\n * @return {Object} Current instance\n * @memberof GeomCell\n */\n remove () {\n this.mount() && this.mount().remove();\n this.source().remove();\n return this;\n }\n}\n\nexport default GeomCell;\n","import AxisCell from './axis-cell';\nimport BlankCell from './blank-cell';\nimport TextCell from './text-cell';\nimport GeomCell from './geom-cell';\nimport SimpleCell from './simple-cell';\n\nimport * as CONSTANTS from './constants';\n\nexport const DEFAULT_PLACEHOLDERS = {\n [CONSTANTS.SIMPLE_CELL]: SimpleCell,\n [CONSTANTS.TEXT_CELL]: TextCell,\n [CONSTANTS.AXIS_CELL]: AxisCell,\n [CONSTANTS.GEOM_CELL]: GeomCell,\n [CONSTANTS.BLANK_CELL]: BlankCell\n};\n\n","export const SIMPLE_CELL = 'SimpleCell';\nexport const TEXT_CELL = 'TextCell';\nexport const AXIS_CELL = 'AxisCell';\nexport const BLANK_CELL = 'BlankCell';\nexport const GEOM_CELL = 'GeomCell';\n\n","import { DEFAULT_PLACEHOLDERS } from './defaults';\n\n/**\n * Creates a registry for the cells, which can be used for\n * setting a new cell or getting the registered cells\n *\n * @return {Object} Setters and getters for registered cells\n */\nconst cellRegistry = () => {\n const reg = DEFAULT_PLACEHOLDERS;\n return {\n set: (key, def) => {\n if (key in reg) {\n reg[key] = def;\n }\n return cellRegistry;\n },\n get: () => reg\n };\n};\nexport default cellRegistry;\n","import { TOP, BOTTOM, LEFT, TITLE, SUB_TITLE, GROUP, LAYOUT, LEGEND } from '../constants';\n\n/**\n *\n *\n * @param {*} context\n * @returns\n */\nexport const arrangeComponents = (context) => {\n const legendConfig = context.config().legend;\n const titleConfig = context.title()[1];\n const subtitleConfig = context.subtitle()[1];\n const titleLayouts = {\n [`${TOP}-${TOP}`]: [TITLE, SUB_TITLE, GROUP],\n [`${BOTTOM}-${BOTTOM}`]: [GROUP, SUB_TITLE, TITLE],\n [`${TOP}-${BOTTOM}`]: [TITLE, GROUP, SUB_TITLE],\n [`${BOTTOM}-${TOP}`]: [SUB_TITLE, GROUP, TITLE]\n };\n const legendLayouts = [\n [LEGEND, LAYOUT],\n [LAYOUT, LEGEND]\n ];\n const titlePosition = titleConfig.position || TOP;\n const subtitlePosition = subtitleConfig.position || TOP;\n\n return {\n headers: titleLayouts[`${titlePosition}-${subtitlePosition}`],\n legends: legendConfig.position === LEFT || legendConfig.position === TOP ?\n legendLayouts[0] : legendLayouts[1]\n };\n};\n","import { TextCell } from '@chartshq/visual-cell';\nimport { escapeHTML } from 'muze-utils';\n\n/**\n *\n *\n * @param {*} rawContent\n * @returns\n */\nconst resolveTitleSubTitleContent = (rawContent) => {\n if (typeof rawContent === 'function' && !rawContent._sanitize) {\n return rawContent();\n }\n return escapeHTML(rawContent());\n};\n\n/**\n *\n *\n * @param {*} config\n * @param {*} cellType\n * @param {*} labelManager\n * @param {*} prevCell\n * @returns\n */\nconst headerCreator = (config, cellType, labelManager, prevCell) => {\n const {\n content\n } = config;\n const cell = prevCell || new TextCell({ type: cellType }, { labelManager });\n\n cell.source(content);\n\n return {\n height: cell.getLogicalSpace().height,\n cell\n };\n};\n\n/**\n *\n *\n * @param {*} config\n * @param {*} type\n * @param {*} labelManager\n * @param {*} cell\n * @returns\n */\nconst createHeading = (config, type, labelManager, prevCell) => {\n if (!config) { return ''; }\n\n return headerCreator(\n config,\n type === 'title' ? 'header' : 'text',\n labelManager,\n prevCell\n );\n};\n\n/**\n *\n *\n * @param {*} context\n */\nexport const createHeaders = (context, canvasHeight, canvasWidth) => {\n let headerHeight = 0;\n const headers = {};\n\n canvasHeight >= 200 && canvasWidth >= 200 && ['title', 'subtitle'].forEach((type) => {\n const headerOptions = context[type]();\n const content = resolveTitleSubTitleContent(headerOptions[0]);\n if (content.length) {\n const config = headerOptions[1];\n\n config.width = context.width();\n config.content = content;\n\n const { height, cell } = createHeading(config, type, context.dependencies().smartlabel,\n context[`${type}Cell`]);\n\n headers[`${type}Cell`] = cell;\n context._composition[type] = cell;\n headerHeight += height + config.padding;\n }\n });\n return { headerHeight, headers };\n};\n\n","import { TextCell, AxisCell } from '@chartshq/visual-cell';\nimport {\n VERTICAL, HORIZONTAL, LEFT, RIGHT, LEGEND_TYPE_MAP, PADDING, BORDER, MARGIN\n} from '../constants';\n\n/**\n *\n *\n * @param {*} legendConfig\n * @param {*} canvases\n * @returns\n */\nexport const legendCreator = (canvas) => {\n let LegendCls;\n const dataset = [];\n const axes = canvas.getRetinalAxes();\n\n Object.entries(axes).forEach((axisInfo) => {\n const scale = axisInfo[1][0];\n const scaleType = axisInfo[0];\n const scaleProps = canvas[scaleType]();\n\n if (scaleProps.field) {\n const {\n type,\n step\n } = scale.config();\n\n const stepMapper = typeof step === 'boolean' ? step : false;\n LegendCls = LEGEND_TYPE_MAP[`${type}-${stepMapper}-${scaleType}`];\n dataset.push({ scale, canvas, fieldName: scaleProps.field, LegendCls, scaleType });\n }\n });\n\n return dataset;\n};\n\n/**\n *\n *\n * @param {*} legendConfig\n * @param {*} canvases\n * @param {*} measurement\n * @param {*} prevLegends\n * @returns\n */\nexport const legendInitializer = (legendConfig, canvas, measurement, prevLegends) => {\n const legends = [];\n const {\n height,\n width,\n headerHeight\n } = measurement;\n const {\n position,\n align\n } = legendConfig;\n\n const legendInfo = legendCreator(canvas);\n\n legendInfo.forEach((dataInfo, index) => {\n let legend = {};\n\n const legendMeasures = {};\n const {\n LegendCls,\n scale,\n fieldName,\n scaleType\n } = dataInfo;\n const config = legendConfig[scaleType] || {};\n const title = config.title || {};\n title.text = title.text || fieldName;\n if (config.show) {\n config.position = position;\n config.align = align;\n\n if (prevLegends[index]) {\n legend = prevLegends[index].legend;\n } else {\n legend = LegendCls.create({\n labelManager: canvas._dependencies.smartlabel,\n cells: {\n AxisCell, TextCell\n }\n });\n }\n legendMeasures.maxHeight = align === VERTICAL ? (height - headerHeight) : height * 0.2;\n legendMeasures.maxWidth = align === HORIZONTAL ? width : width * 0.2;\n legendMeasures.width = Math.min(legendMeasures.maxWidth, config.width);\n legendMeasures.height = Math.min(legendMeasures.maxHeight, config.height);\n\n [PADDING, BORDER, MARGIN].forEach((e) => {\n legendMeasures[e] = config[e];\n });\n legend.scale(scale)\n .title(title)\n .fieldName(fieldName)\n .config(config)\n .metaData(canvas.composition().visualGroup.getGroupByData().project([fieldName]))\n .measurement(legendMeasures)\n .canvasAlias(canvas.alias())\n .setLegendMeasures();\n\n legends.push({ canvas, legend, scaleType });\n }\n });\n return legends;\n};\n\n/**\n *\n *\n * @param {*} legends\n * @param {*} legendConfig\n * @param {*} availableHeight\n * @param {*} availableWidth\n * @returns\n */\nexport const getLegendSpace = (legends, legendConfig, availableHeight, availableWidth) => {\n const legendMeasures = legends.map(legendInfo => legendInfo.legend.measurement());\n const legendSpace = { width: 0, height: 0 };\n\n legendMeasures.forEach((space) => {\n let height = 0;\n let width = 0;\n width = Math.min(space.width, space.maxWidth);\n height = Math.min(space.height, space.maxHeight);\n\n if (legendConfig.align === HORIZONTAL) {\n if (legendSpace.width + width > availableWidth) {\n legendSpace.width = availableWidth;\n legendSpace.height += height;\n } else {\n legendSpace.width += width;\n legendSpace.height = Math.max(legendSpace.height, height);\n }\n } else if (legendSpace.height + height > availableHeight) {\n legendSpace.height = height;\n legendSpace.width += width;\n } else {\n legendSpace.height += height;\n legendSpace.width = Math.max(legendSpace.width, width);\n }\n });\n if (legendConfig.align === HORIZONTAL) {\n legendSpace.width = availableWidth;\n }\n return legendSpace;\n};\n\n/**\n *\n *\n * @param {*} context\n * @param {*} headerHeight\n * @returns\n */\nexport const createLegend = (context, headerHeight, height, width) => {\n const measurement = {\n height,\n width,\n headerHeight\n };\n const { legend } = context.config();\n const { show, position } = legend;\n\n legend.classPrefix = context.config().classPrefix;\n const align = (position === LEFT || position === RIGHT) ? VERTICAL : HORIZONTAL;\n\n legend.show = show ? ((align === VERTICAL && width > 200) || (align === HORIZONTAL && height > 200)) : show;\n legend.align = align;\n return legendInitializer(legend, context, measurement, context.legends || []);\n};\n","import { cellRegistry } from '@chartshq/visual-cell';\nimport { mergeRecursive } from 'muze-utils';\nimport { arrangeComponents } from './component-resolver';\nimport { createHeaders } from './title-maker';\nimport { createLegend, getLegendSpace } from './legend-maker';\nimport { TOP, BOTTOM, LEFT, RIGHT } from '../constants';\n\nconst BlankCell = cellRegistry().get().BlankCell;\n\nconst createBlankCell = () => new BlankCell();\n\n/**\n *\n *\n * @param {*} canvases\n * @returns\n */\nconst getMaxRows = (rows) => {\n const maxRows = [0, 0];\n\n maxRows[0] = Math.max(maxRows[0], rows[0].length ? rows[0][0].length : 0);\n maxRows[1] = Math.max(maxRows[1], rows[1].length ? rows[1][0].length : 0);\n return maxRows;\n};\n\n/**\n *\n *\n * @param {*} arr\n * @param {*} value\n */\nconst fillArray = (arr, value) => arr.map(() => value());\n\n/**\n *\n *\n * @param {*} rows\n * @param {*} columns\n * @param {*} blankCellCreator\n * @returns\n */\nconst blankMatrixCreator = (rows, columns, blankCellCreator) => {\n const arr = [];\n\n for (let i = 0; i < rows; i++) {\n let array = new Array(columns).fill([]);\n array = fillArray(array, blankCellCreator);\n arr.push(array);\n }\n return arr;\n};\n\n/**\n *\n *\n * @param {*} rowMatrices\n * @param {*} maxRows\n */\nconst blankCellCreator = (rowMatrices, maxRows) => rowMatrices.map((rowMatrix, rowMatrixIndex) => {\n if (rowMatrix.length === 0 && maxRows[rowMatrixIndex] > 0) {\n const numberOfRows = Math.max(rowMatrices[0].length, rowMatrices[1].length);\n return blankMatrixCreator(numberOfRows, maxRows[rowMatrixIndex], createBlankCell);\n }\n if (rowMatrix.length > 0) {\n if (rowMatrix[0] && rowMatrix[0].length <= maxRows[rowMatrixIndex]) {\n return rowMatrix.map((row) => {\n let arr = new Array(maxRows[rowMatrixIndex] - rowMatrix[0].length).fill(1);\n arr = fillArray(arr, createBlankCell);\n return [...arr, ...row];\n });\n }\n return blankMatrixCreator(rowMatrix.length, maxRows[rowMatrixIndex], createBlankCell);\n }\n return rowMatrix;\n});\n\n/**\n *\n *\n * @param {*} context\n * @returns\n */\nexport const prepareLayout = (layout, components, config, measurement) => {\n let topL;\n let topR;\n let bottomL;\n let bottomR;\n const {\n rows,\n columns,\n values,\n cornerMatrices\n } = components;\n const {\n showHeaders\n } = config;\n const maxRows = getMaxRows(rows);\n const {\n topLeft,\n topRight,\n bottomLeft,\n bottomRight\n } = cornerMatrices;\n\n if (!showHeaders) {\n const colLengths = [columns[0].length, columns[1].length];\n // Create blank cells for corener matrices\n [topL, topR] = blankCellCreator([new Array(colLengths[0]), new Array(colLengths[0])], maxRows);\n [bottomL, bottomR] = blankCellCreator([new Array(colLengths[1]), new Array(colLengths[1])], maxRows);\n } else {\n [topL, topR, bottomL, bottomR] = [topLeft, topRight, bottomLeft, bottomRight];\n }\n\n layout.measurement(measurement)\n .config(config)\n .matrices({\n top: [topL, columns[0], topR],\n center: [rows[0], values, rows[1]],\n bottom: [bottomL, columns[1], bottomR]\n })\n .triggerReflow();\n};\n\n/**\n *\n *\n * @param {*} context\n * @param {*} mount\n * @returns\n */\nexport const getRenderDetails = (context, mount) => {\n let layoutConfig = mergeRecursive({}, context.config());\n // Get height width of the mount point\n let { height, width } = mount.getBoundingClientRect();\n const heightAttr = context.height();\n const widthAttr = context.width();\n const visGroup = context.composition().visualGroup;\n const {\n isColumnSizeEqual,\n isRowSizeEqual,\n rows,\n columns,\n values\n } = visGroup.placeholderInfo();\n const {\n minWidth,\n minHeight,\n classPrefix,\n showHeaders,\n legend\n } = context.config();\n // Get title configuration\n const titleConfig = context.title()[1];\n // Get subtitle configuration\n const subtitleConfig = context.subtitle()[1];\n // Get legend position\n const legendPosition = legend.position;\n // Arrange components according to config\n const layoutArrangement = arrangeComponents(context);\n\n height = Math.floor(height);\n width = Math.floor(width);\n\n const availableHeightForCanvas = Math.max(heightAttr > 0 ? heightAttr : height, minHeight);\n const availableWidthForCanvas = Math.max(widthAttr > 0 ? widthAttr : width, minWidth);\n\n // Create headers and determine header height\n const { headers, headerHeight } = createHeaders(context, availableHeightForCanvas, availableWidthForCanvas);\n\n // Create legends and determine legend space\n const legends = createLegend(context, headerHeight, availableHeightForCanvas, availableWidthForCanvas);\n context._composition.legend = {};\n legends.forEach((e) => {\n context._composition.legend[e.scaleType] = e.legend;\n });\n\n const legendSpace = getLegendSpace(legends, legend, availableHeightForCanvas, availableWidthForCanvas);\n const legendWidth = (legendPosition === LEFT || legendPosition === RIGHT) ? legendSpace.width : 0;\n const legendHeight = (legendPosition === TOP || legendPosition === BOTTOM) ? legendSpace.height : 0;\n\n // Set components for layouting\n const components = {\n headers,\n legends,\n canvases: [context],\n rows,\n columns,\n values,\n cornerMatrices: visGroup.cornerMatrices()\n };\n const measurement = {\n mountSpace: {\n height,\n width\n },\n headerHeight,\n legendSpace,\n canvasWidth: availableWidthForCanvas,\n canvasHeight: availableHeightForCanvas,\n width: availableWidthForCanvas - legendWidth,\n height: availableHeightForCanvas - headerHeight - legendHeight,\n minUnitHeight: context.minUnitHeight(),\n minUnitWidth: context.minUnitWidth()\n };\n layoutConfig = mergeRecursive(layoutConfig, {\n classPrefix,\n showHeaders,\n border: mergeRecursive(visGroup.metaData().border, context.config().border),\n layoutArrangement,\n legend,\n title: titleConfig,\n subtitle: subtitleConfig,\n isColumnSizeEqual,\n isRowSizeEqual\n });\n return {\n layoutConfig,\n components,\n measurement\n };\n};\n","export const TITLE_CONFIG = {\n position: 'top',\n align: 'left',\n padding: 8\n};\n\nexport const SUB_TITLE_CONFIG = {\n position: 'top',\n align: 'left',\n padding: 16\n};\n","import { mergeRecursive, selectElement } from 'muze-utils';\nimport {\n ROWS,\n COLUMNS,\n COLOR,\n SHAPE,\n SIZE,\n DETAIL,\n LAYERS,\n TRANSFORM,\n MOUNT,\n TITLE,\n SUB_TITLE\n} from '../constants';\nimport { TITLE_CONFIG, SUB_TITLE_CONFIG } from './defaults';\n/**\n * @module\n * This is the local options semantics based on which setters getters are created and reactivity is initiated.\n * This local object is only valid for Canvas.\n * Canvas merges global and local object both to the model\n *\n * Format\n * PROPERTRY_NAME: {\n * value: // default value of the property,\n * meta: {\n * typeCheck: // The setter value will be checked using this. If the value is function then the setter value\n * // is passed as args.\n * typeExpected: // The output of typecheck action will be tested against this. Truthy value will set the\n * // value to the setter\n * sanitizaiton: // Need for sanitization before type is checked\n * }\n * }\n */\n\nexport const localOptions = {\n [ROWS]: {\n value: null,\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Array'\n }\n },\n [COLUMNS]: {\n value: null,\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Array'\n }\n },\n [COLOR]: {\n value: null,\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Object',\n sanitization: (config) => {\n if (typeof config === 'string') {\n return {\n field: config\n };\n }\n return config;\n }\n }\n },\n [SHAPE]: {\n value: null,\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Object',\n sanitization: (config) => {\n if (typeof config === 'string') {\n return {\n field: config\n };\n }\n return config;\n }\n }\n },\n [SIZE]: {\n value: null,\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Object',\n sanitization: (config) => {\n if (typeof config === 'string') {\n return {\n field: config\n };\n }\n return config;\n }\n }\n },\n [DETAIL]: {\n value: [],\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Array'\n }\n },\n\n [LAYERS]: {\n value: null,\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Array'\n }\n },\n [TRANSFORM]: {\n value: null,\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Object'\n }\n },\n [MOUNT]: {\n value: null,\n meta: {\n sanitization: (value) => {\n if (typeof value === 'string') {\n return selectElement(value).node();\n }\n return value;\n }\n }\n }\n};\n\nexport const canvasOptions = {\n [TITLE]: {\n value: [null, null],\n meta: {\n typeCheck: ['constructor', 'constructor'],\n typeExpected: ['Function', 'Object'],\n spreadParams: true,\n sanitization: [(title) => {\n if (typeof title === 'string') {\n const t = () => title;\n t._sanitized = true;\n return t;\n }\n return title;\n }, (titleConfig) => {\n const defConfig = mergeRecursive({}, TITLE_CONFIG);\n return mergeRecursive(defConfig, titleConfig);\n }]\n }\n },\n [SUB_TITLE]: {\n value: [null, null],\n meta: {\n typeCheck: ['constructor', 'constructor'],\n typeExpected: ['Function', 'Object'],\n spreadParams: true,\n sanitization: [(subtitle) => {\n if (typeof subtitle === 'string') {\n const sub = () => subtitle;\n sub._sanitized = true;\n return sub;\n }\n return subtitle;\n }, (subtitleConfig) => {\n const defConfig = mergeRecursive({}, SUB_TITLE_CONFIG);\n return mergeRecursive(defConfig, subtitleConfig);\n }]\n }\n }\n};\n","import { makeElement, selectElement } from 'muze-utils';\nimport { VERTICAL, HORIZONTAL, TOP, LEFT, RIGHT, BOTTOM } from '../constants';\n\n/**\n * Sets the rotation for all x axes if any axis has the rotation config set in the\n * entire view\n *\n * @param {Array} columns Column cells that contain the axes cells\n */\nconst setLabelRotationForAxes = (context) => {\n let rotation = 0;\n\n const xAxes = context.xAxes() || [];\n\n (() => {\n for (let i = 0; i < xAxes.length; i++) {\n for (let j = 0; j < xAxes[i].length; j++) {\n if (xAxes[i][j].config().labels.rotation !== 0) {\n rotation = xAxes[i][j].config().labels.rotation;\n return;\n }\n }\n }\n })();\n\n if (rotation) {\n xAxes.forEach((axes) => {\n axes.forEach((axis) => {\n axis.config({ labels: { rotation, smartTicks: false } });\n });\n });\n }\n};\n\n/**\n *\n *\n * @param {*} context\n * @param {*} mount\n * @returns\n */\nconst getSkeletons = (mount, layoutConfig, measurement) => {\n const {\n layoutArrangement,\n classPrefix\n } = layoutConfig;\n const {\n headers,\n legends\n } = layoutArrangement;\n const {\n canvasWidth,\n canvasHeight\n } = measurement;\n const container = selectElement(mount);\n const components = {};\n const mountPoint = makeElement(container, 'div', [1], `${classPrefix}-viz`)\n .style('width', `${canvasWidth}px`)\n .style('height', `${canvasHeight}px`);\n const containers = mountPoint\n .selectAll(`.${classPrefix}-container`)\n .data(headers);\n containers.exit().remove();\n const containersEnter = containers.enter().append('div');\n\n const mergedContainer = containersEnter.merge(containers)\n .attr('class', `${classPrefix}-container`)\n .style('width', `${canvasWidth}px`)\n .style('padding', `${null}px`)\n .style('margin', null)\n .each(function (type) {\n components[type] = selectElement(this).classed(`${classPrefix}-${type}-container`, true);\n });\n const innerContainer = mergedContainer\n .selectAll(`.${classPrefix}-inner-container`)\n .data((d) => {\n if (d === 'group') {\n return legends;\n } return [];\n });\n innerContainer.exit().remove();\n const innerContainerEnter = innerContainer.enter().append('div');\n\n innerContainerEnter\n .merge(innerContainer)\n .attr('class', `${classPrefix}-inner-container`)\n .style('width', 'auto')\n .style('height', 'auto')\n .each(function (layoutType) {\n components[layoutType] = selectElement(this)\n .classed(`${classPrefix}-${layoutType}-container`, true);\n });\n return components;\n};\n\n/**\n *\n *\n * @param {*} context\n * @param {*} container\n * @param {*} legendComponents\n */\nconst renderLegend = (legendConfig, container, legendComponents, measurement) => {\n const sectionComponents = [];\n const { legendSpace, headerHeight, height, width } = measurement;\n const { legend, classPrefix } = legendConfig;\n const { position } = legend;\n const legendMount = makeElement(container, 'div', [legendComponents], `${classPrefix}-inner-content`, {}, d => d);\n legendMount.classed(`${classPrefix}-legend`, true);\n const align = (position === LEFT || position === RIGHT) ? VERTICAL : HORIZONTAL;\n const legWidth = align === VERTICAL ? legendSpace.width : width;\n const legHeight = align === VERTICAL ? height - headerHeight : legendSpace.height;\n\n [container, legendMount].forEach((elem) => {\n elem.style('width', `${Math.floor(legWidth)}px`)\n .style('height', `${legHeight}px`)\n .style('float', LEFT);\n });\n\n if (align === VERTICAL) {\n let sections = -1;\n let currHeight = legHeight;\n let currWidth = 0;\n\n legendComponents.forEach((legendInfo) => {\n const leg = legendInfo.legend;\n if (leg.measurement().height > currHeight) {\n sections++;\n currWidth = 0;\n currHeight = legHeight;\n } else {\n sections < 0 && sections++;\n }\n sectionComponents[sections] = sectionComponents[sections] || [];\n currHeight -= Math.min(leg.measurement().height, currHeight);\n currWidth = Math.max(Math.min(leg.measurement().width, leg.measurement().maxWidth), currWidth);\n sectionComponents[sections].push({\n legend: leg,\n legendHeight: legHeight,\n legendWidth: currWidth\n });\n });\n\n const mount = makeElement(legendMount, ['div'], sectionComponents, `${classPrefix}-legend-section`)\n .each((d, i) => selectElement(this).classed(`${classPrefix}-legend-section-${i}`, true))\n .classed(`${classPrefix}-legend-vertical-section`, true)\n .style('width', d => `${d[0].legendWidth}px`);\n makeElement(mount, ['div'], d => d, `${classPrefix}-legend-components`, {}, d => d.legend.id())\n .each(function (d) {\n d.legend.mount(this);\n })\n .style('width', d => `${d.legendWidth}px`);\n } else {\n const mount = makeElement(legendMount, 'div', [1], `${classPrefix}-legend-section`)\n .classed(`${classPrefix}-legend-horizontal-section`, true)\n .classed(`${classPrefix}-legend-section-${0}`, true)\n .style('width', `${legWidth}px`);\n\n makeElement(mount, 'div', legendComponents, `${classPrefix}-legend-components`, {}, d => d.legend.id())\n .each(function (d) { d.legend.mount(this); })\n .style('width', d => `${d.legend.measurement().width}px`);\n }\n};\n\n/**\n *\n *\n * @param {*} context\n * @param {*} container\n * @param {*} type\n * @param {*} headers\n */\nconst renderHeader = (layoutConfig, container, type, headers) => {\n const headerCell = headers[`${type}Cell`];\n const config = layoutConfig[`${type}`];\n const { position, align, padding } = config;\n const sel = container\n .selectAll(`.${layoutConfig.classPrefix}-inner-container`)\n .data([type]);\n sel.exit().remove();\n const selEnter = sel.enter().append('div');\n\n const cont = selEnter.merge(sel);\n cont.classed(`${layoutConfig.classPrefix}-inner-container`, true);\n\n headerCell && headerCell.render(cont.node());\n\n cont.selectAll('div').classed(`${layoutConfig.classPrefix}-inner-content`, true);\n cont.style('width', `${100}%`);\n\n if (config && headerCell) {\n cont.style('float', LEFT)\n .style('text-align', align)\n .style(`padding-${position === TOP ? BOTTOM : TOP}`, `${padding}px`);\n }\n};\n\n/**\n *\n *\n * @param {*} context\n * @param {*} shifter\n */\nconst shiftHeaders = (config, shifter, measurement, mount) => {\n const { classPrefix, title, subtitle, legend } = config;\n const { legendSpace } = measurement;\n const { position } = legend;\n\n shifter += position === LEFT ? legendSpace.width : 0;\n title && selectElement(mount).select(`.${classPrefix}-title-container`)\n .style('width', title.align === LEFT ? `calc(100% - ${shifter}px` : '100%')\n .style('margin-left', title.align === LEFT ? `${shifter}px` : 0);\n subtitle && selectElement(mount).select(`.${classPrefix}-subtitle-container`)\n .style('width', subtitle.align === LEFT ? `calc(100% - ${shifter}px` : '100%')\n .style('margin-left', subtitle.align === LEFT ? `${shifter}px` : 0);\n\n selectElement(mount).select(`.${classPrefix}-legend-horizontal-section`)\n .style('margin-left', `${shifter}px`)\n .style('width', `${legendSpace.width - shifter}px`)\n .selectAll(`.${classPrefix}-legend-body, .${classPrefix}-legend-title`)\n .style('max-width', `${legendSpace.width - shifter}px`);\n selectElement(mount).select(`.${classPrefix}-legend-vertical-section`)\n .style('margin-left', null)\n .selectAll(`.${classPrefix}-legend-body, .${classPrefix}-legend-title`)\n .style('max-width', null);\n};\n\n/**\n *\n *\n * @param {*} mountPoint\n * @param {*} measurement\n * @param {*} classPrefix\n * @returns\n */\nconst prepareGridContainer = (mountPoint, measurement, classPrefix, alias) => {\n if (!mountPoint) {\n return this;\n }\n\n const {\n height,\n width\n } = measurement;\n // Create container for the layout\n\n const sel = selectElement(mountPoint)\n .selectAll(`.${classPrefix}-inner-content`)\n .data(['layout'], d => d);\n sel.exit().remove();\n const selEnter = sel.enter().append('div');\n\n const container = selEnter.merge(sel)\n .attr('class', `${classPrefix}-inner-content`)\n .classed(`${classPrefix}-grid-layout`, true)\n .attr('id', `${classPrefix}-grid-layout-${alias}`)\n .style('height', `${height}px`)\n .style('padding', null)\n .style('width', `${Math.ceil(width)}px`);\n // Mount for matrices\n const innerSel = container.selectAll(`.${classPrefix}-layout-grid-container`)\n .data(['layout2']);\n innerSel.exit().remove();\n const innerSelEnter = innerSel.enter().append('div');\n\n const mount = innerSelEnter.merge(innerSel);\n mount.classed(`${classPrefix}-layout-grid-container`, true)\n .attr('id', `${classPrefix}-layout-grid-container-${alias}`)\n .style('height', `${height}px`)\n .style('width', `${Math.ceil(width)}px`);\n\n return {\n mount,\n container\n };\n};\n\n/**\n *\n *\n * @param {*} context\n * @param {*} components\n * @param {*} layoutConfig\n * @param {*} measurement\n */\nexport const renderComponents = (context, components, layoutConfig, measurement) => {\n const mountPoint = context.mount();\n const {\n headers,\n legends\n } = components;\n const {\n classPrefix\n } = layoutConfig;\n const {\n title,\n legend,\n subtitle,\n layout\n } = getSkeletons(mountPoint, layoutConfig, measurement);\n const {\n mount\n } = prepareGridContainer(layout.node(), measurement, classPrefix, context.alias());\n const padding = context.layout().getViewInformation().layoutDimensions.viewWidth[0];\n measurement.padding = padding;\n setLabelRotationForAxes(context);\n\n // Render layout\n context.layout().renderGrid(mount);\n context.once('layer.drawn').then(() => {\n renderHeader(layoutConfig, title, 'title', headers);\n renderHeader(layoutConfig, subtitle, 'subtitle', headers);\n renderLegend(layoutConfig, legend, legends, measurement);\n shiftHeaders(layoutConfig, padding, measurement, mountPoint);\n });\n context.composition().visualGroup.matrixInstance().value.each((el) => {\n el.valueOf().parentContainer(layout.node());\n });\n};\n","import { isEqual } from 'muze-utils';\nimport { ROWS, COLUMNS, COLOR, SHAPE, SIZE, MOUNT, DETAIL, DATA, CONFIG } from '../constants';\nimport { canvasOptions } from './local-options';\n\n/**\n * Instantiate high level components. Canvas knows what all high level component it has.\n * @nice-to-have dynamic high level components.\n * - Is it even required ?\n * - Reactive to source (canvas) streaming ?\n * @param {*} context Canvas instance\n * @return {Object.fArray>} Arrays of Title, visualGroup, Legend\n */\nexport const initCanvas = (context) => {\n const reg = context._registry.components;\n\n return [new reg.VisualGroup(context._registry, context.dependencies())];\n};\n\n/**\n *\n *\n * @memberof Canvas\n */\nexport const dispatchProps = (context) => {\n const lifeCycleManager = context.dependencies().lifeCycleManager;\n lifeCycleManager.notify({ client: context, action: 'beforeupdate' });\n const visualGroup = context.composition().visualGroup;\n\n visualGroup.lockModel();\n const allOptions = context._allOptions;\n for (const key in allOptions) {\n const value = context[key]();\n if (value !== null) {\n visualGroup[key] && visualGroup[key](value);\n }\n }\n visualGroup.unlockModel();\n\n context._cachedProps = {};\n lifeCycleManager.notify({ client: context, action: 'initialized' });\n lifeCycleManager.notify({ client: context, action: 'updated' });\n};\n\n/**\n *\n *\n */\nexport const setupChangeListener = (context) => {\n const store = context._store;\n\n store.registerImmediateListener(MOUNT, () => {\n const allOptions = Object.keys(context._allOptions);\n const props = [...allOptions, ...Object.keys(canvasOptions)];\n let equalityChecker = () => false;\n store.registerChangeListener(props, (...params) => {\n const updateProps = props.every((option, i) => {\n switch (option) {\n case ROWS:\n case COLUMNS:\n case DETAIL:\n equalityChecker = isEqual('Array');\n break;\n\n case SHAPE:\n case SIZE:\n case COLOR:\n case DATA:\n case CONFIG:\n equalityChecker = isEqual('Object');\n break;\n default:\n equalityChecker = () => true;\n break;\n }\n const oldVal = params[i][0];\n const newVal = params[i][1];\n\n return equalityChecker(oldVal, newVal);\n });\n // inform attached board to rerender\n !updateProps && dispatchProps(context);\n context.render();\n }, true);\n });\n};\n\nexport const applyInteractionPolicy = (policies, firebolt) => {\n const canvas = firebolt.context;\n const visualGroup = canvas.composition().visualGroup;\n const valueMatrix = visualGroup.composition().matrices.value;\n policies.forEach(policy => policy(valueMatrix, firebolt));\n};\n","import {\n getDataModelFromIdentifiers,\n FieldType,\n mergeRecursive\n} from 'muze-utils';\n\nimport { applyInteractionPolicy } from './helper';\n\nconst defaultInteractionPolicy = (valueMatrix, firebolt) => {\n const isMeasure = field => field.type() === FieldType.MEASURE;\n const canvas = firebolt.context;\n const visualGroup = canvas.composition().visualGroup;\n const xFields = [].concat(...visualGroup.getFieldsFromChannel('x'));\n const yFields = [].concat(...visualGroup.getFieldsFromChannel('y'));\n const colDim = xFields.every(field => field.type() === FieldType.DIMENSION);\n const fieldInf = visualGroup.resolver().getAllFields();\n const rowFacets = fieldInf.rowFacets;\n const colFacets = fieldInf.colFacets;\n valueMatrix.each((cell) => {\n const unitFireBolt = cell.valueOf().firebolt();\n\n if (!(xFields.every(isMeasure) && yFields.every(isMeasure))) {\n const facetFields = cell.valueOf().facetByFields()[0];\n const unitColFacets = facetFields.filter(d => colFacets.findIndex(v => v.equals(d)) !== -1);\n const unitRowFacets = facetFields.filter(d => rowFacets.findIndex(v => v.equals(d)) !== -1);\n let propFields;\n if (colDim) {\n propFields = unitColFacets.map(d => `${d}`);\n } else {\n propFields = unitRowFacets.map(d => `${d}`);\n }\n\n unitFireBolt.propagateWith('*', propFields, true);\n }\n });\n};\n\nconst defaultCrossInteractionPolicy = {\n behaviours: {\n '*': (propagationPayload, context) => {\n const propagationCanvasAlias = propagationPayload.sourceCanvas;\n const canvasAlias = context.parentAlias();\n return propagationCanvasAlias ? canvasAlias === propagationCanvasAlias : true;\n }\n },\n sideEffects: {\n tooltip: (propagationPayload, context) => {\n const propagationUnit = propagationPayload.sourceUnit;\n const propagationCanvas = propagationPayload.sourceCanvas;\n const unitId = context.id();\n const canvasAlias = context.parentAlias();\n if (propagationCanvas) {\n return propagationCanvas !== canvasAlias ? true : unitId === propagationUnit;\n }\n return true;\n }\n }\n};\n\nexport default class GroupFireBolt {\n constructor (context) {\n this.context = context;\n this._interactionPolicy = this.constructor.defaultInteractionPolicy();\n this._crossInteractionPolicy = this.constructor.defaultCrossInteractionPolicy();\n this.context.once('canvas.updated').then(() => {\n applyInteractionPolicy([this._interactionPolicy], this);\n const crossInteractionPolicy = this._crossInteractionPolicy;\n const behaviours = crossInteractionPolicy.behaviours;\n const sideEffects = crossInteractionPolicy.sideEffects;\n const visualGroup = context.composition().visualGroup;\n const valueMatrix = visualGroup.composition().matrices.value;\n valueMatrix.each((cell) => {\n const unitFireBolt = cell.valueOf().firebolt();\n for (const key in behaviours) {\n unitFireBolt.changeBehaviourStateOnPropagation(key, behaviours[key]);\n }\n for (const key in sideEffects) {\n unitFireBolt.changeSideEffectStateOnPropagation(key, sideEffects[key]);\n }\n });\n });\n }\n\n static defaultInteractionPolicy () {\n return defaultInteractionPolicy;\n }\n\n static defaultCrossInteractionPolicy () {\n return defaultCrossInteractionPolicy;\n }\n\n interactionPolicy (...policy) {\n if (policy.length) {\n this._interactionPolicy = policy[0] || this.constructor.defaultInteractionPolicy();\n return this;\n }\n return this._interactionPolicy;\n }\n\n crossInteractionPolicy (...policy) {\n if (policy.length) {\n this._crossInteractionPolicy = mergeRecursive(mergeRecursive({},\n this.constructor.defaultCrossInteractionPolicy()), policy[0] || {});\n return this;\n }\n return this._crossInteractionPolicy;\n }\n\n dispatchBehaviour (behaviour, payload) {\n const propPayload = Object.assign(payload);\n const criteria = propPayload.criteria;\n const data = this.context.data();\n\n propPayload.action = behaviour;\n const model = getDataModelFromIdentifiers(data, criteria);\n data.propagate(model, propPayload, {\n sourceId: this.context.alias()\n });\n return this;\n }\n\n}\n","import { GridLayout } from '@chartshq/layout';\nimport { transactor, Store, getUniqueId } from 'muze-utils';\nimport { RETINAL } from '../constants';\nimport TransactionSupport from '../transaction-support';\nimport { getRenderDetails, prepareLayout } from './layout-maker';\nimport { localOptions, canvasOptions } from './local-options';\nimport { renderComponents } from './renderer';\nimport GroupFireBolt from './firebolt';\nimport options from '../options';\nimport { initCanvas, setupChangeListener } from './helper';\n\n/**\n * This is the primary class which manages highlevel components like visualGroup, Titles, Legend, Extensions\n * (in future). Global level Muze functionality is subset this. Every time user works with an instance of\n * canvas in dom which provides instance level settings.\n *\n */\nexport default class Canvas extends TransactionSupport {\n\n /**\n * Creates reactive property accessors.\n * - data\n * - height\n * - width\n * - config\n * This configs are retrieved from options.\n */\n constructor (globalDependencies) {\n super();\n\n this._allOptions = Object.assign({}, options, localOptions);\n this._registry = {};\n this._composition = {};\n this._cachedProps = {};\n this._alias = null;\n this._renderedResolve = null;\n this._renderedPromise = new Promise((resolve) => {\n this._renderedResolve = resolve;\n });\n this._composition.layout = new GridLayout();\n this._store = new Store({});\n\n // Setters and getters will be mounted on this. The object will be mutated.\n const [, store] = transactor(this, options, this._store.model);\n transactor(this, localOptions, store);\n transactor(this, canvasOptions, store);\n this.dependencies(Object.assign({}, globalDependencies, this._dependencies));\n this.firebolt(new GroupFireBolt(this));\n this.alias(`canvas-${getUniqueId()}`);\n this.title('', {});\n this.subtitle('', {});\n this.legend({});\n this.color({});\n this.shape({});\n this.size({});\n setupChangeListener(this);\n }\n\n /**\n *\n *\n * @readonly\n * @memberof Canvas\n */\n layout (...params) {\n if (params.length) {\n return this;\n }\n return this.composition().layout;\n }\n\n /**\n *\n *\n * @readonly\n * @memberof Canvas\n */\n composition (...params) {\n if (params.length) {\n return this;\n }\n return this._composition;\n }\n\n done () {\n return this._renderedPromise;\n }\n\n /**\n *\n *\n * @param {*} params\n * @returns\n * @memberof Canvas\n */\n alias (...params) {\n if (params.length) {\n const visualGroup = this.composition().visualGroup;\n this._alias = params[0];\n visualGroup && visualGroup.alias(this.alias());\n return this;\n }\n return this._alias;\n }\n\n /**\n * Creates an instance initiated with given settings.\n *\n * @param {Object} initialSettings Initial settings to be populated in the model\n * @param {Object} regEntry newly created instance with the initial settings\n * @param {Object} globalDependencies dependencies which will be created only once in the page\n *\n * @return {Object} newly created instance with the initial settings\n */\n static withSettings (initialSettings, regEntry, globalDependencies) {\n const instance = new Canvas(globalDependencies);\n\n for (const key in initialSettings) {\n instance[key](initialSettings[key]);\n }\n // set registry for instance\n instance.registry(regEntry);\n return instance;\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof Canvas\n */\n static formalName () {\n return 'canvas';\n }\n\n /**\n *\n *\n * @readonly\n * @memberof Canvas\n */\n firebolt (...firebolt) {\n if (firebolt.length) {\n this._firebolt = firebolt[0];\n return this;\n }\n return this._firebolt;\n }\n\n /**\n * Registry peoperty accessor\n *\n * @param {Object} reg plain old javascript object keyvalue pairs. Key containing module name and value contains\n * module definition class. The reg object has to be flat object of level 1.\n */\n registry (...params) {\n if (params.length) {\n const components = Object.assign({}, params[0].components);\n const componentSubRegistry = Object.assign({}, params[0].componentSubRegistry);\n\n this._registry = { components, componentSubRegistry };\n const initedComponents = initCanvas(this);\n // @todo is it okay to continue this tight behaviour? If not use a resolver to resolve diff component type.\n this._composition.visualGroup = initedComponents[0];\n\n this.composition().visualGroup.alias(this.alias());\n return this;\n }\n return this._registry;\n }\n\n /*\n * Prepare dependencies for top level elements\n */\n dependencies (...param) {\n if (param.length) {\n this._dependencies = param[0];\n return this;\n }\n // @todo prepare dependencies here.\n return this._dependencies;\n }\n\n /**\n *\n *\n * @param {*} lifeCycles\n * @returns\n * @memberof Canvas\n */\n lifeCycle (lifeCycles) {\n const lifeCycleManager = this.dependencies().lifeCycleManager;\n if (lifeCycles) {\n lifeCycleManager.register(lifeCycles);\n return this;\n }\n return lifeCycleManager;\n }\n\n /**\n *\n *\n * @readonly\n * @memberof Canvas\n */\n legend (...params) {\n if (params.length) {\n return this;\n }\n return this.composition().legend;\n }\n\n /**\n *\n *\n * @param {*} eventName\n * @returns\n * @memberof Canvas\n */\n once (eventName) {\n const lifeCycleManager = this.dependencies().lifeCycleManager;\n return lifeCycleManager.retrieve(eventName);\n }\n\n /**\n * Internal function to trigger render, this method is cognizant of all the properties of the core modules and\n * establish a passive reactivity. Passive reactivity is not always a bad thing :)\n * @internal\n */\n render () {\n const mount = this.mount();\n const visGroup = this.composition().visualGroup;\n const lifeCycleManager = this.dependencies().lifeCycleManager;\n // Get render details including arrangement and measurement\n const { components, layoutConfig, measurement } = getRenderDetails(this, mount);\n\n lifeCycleManager.notify({ client: this, action: 'beforedraw' });\n // Prepare the layout by triggering the matrix calculation\n prepareLayout(this.layout(), components, layoutConfig, measurement);\n // Render each component\n renderComponents(this, components, layoutConfig, measurement);\n // Update life cycle\n lifeCycleManager.notify({ client: this, action: 'drawn' });\n const promises = [];\n visGroup.matrixInstance().value.each((el) => {\n promises.push(el.valueOf().done());\n });\n Promise.all(promises).then(() => {\n this._renderedResolve();\n });\n }\n\n /**\n *\n *\n * @returns\n * @memberof Canvas\n */\n xAxes () {\n return this.composition().visualGroup.getAxes('x');\n }\n\n /**\n *\n *\n * @returns\n * @memberof Canvas\n */\n yAxes () {\n return this.composition().visualGroup.getAxes('y');\n }\n\n /**\n *\n *\n * @returns\n * @memberof Canvas\n */\n getRetinalAxes () {\n const visualGroup = this.composition().visualGroup;\n return visualGroup.getAxes(RETINAL);\n }\n}\n","import { cellRegistry, SimpleCell } from '@chartshq/visual-cell';\nimport { VisualUnit } from '@chartshq/visual-unit';\nimport { layerRegistry } from '@chartshq/visual-layer';\nimport { SimpleGroup, VisualGroup } from '@chartshq/visual-group';\n\nexport const COMPONENTS = {\n VisualGroup,\n VisualUnit\n};\nexport const SUBREGISTRIES = {\n cellRegistry,\n layerRegistry\n};\nexport const INTERFACES = {\n SimpleGroup,\n SimpleCell\n};\n\n","import { DEFAULT_LAYERS } from './defaults';\n\nexport default () => {\n const reg = DEFAULT_LAYERS;\n const regObj = {\n set: (key, def) => {\n reg[key] = def;\n return regObj;\n },\n get: () => reg\n };\n return regObj;\n};\n","import {\n transactor,\n Smartlabel,\n enableChainedTransaction,\n LifeCycleManager,\n DataModel,\n makeElement,\n getClientPoint,\n selectElement,\n getEvent,\n require,\n DateTimeFormatter\n} from 'muze-utils';\n\nimport {\n SurrogateSideEffect,\n SpawnableSideEffect,\n sideEffects,\n PersistentBehaviour,\n GenericBehaviour,\n VolatileBehaviour,\n behaviouralActions,\n GenericSideEffect\n} from '@chartshq/muze-firebolt';\nimport { layerFactory } from '@chartshq/visual-layer';\nimport pkg from '../package.json';\nimport * as operators from './operators';\nimport { actionModel as ActionModel } from './action-model';\nimport options from './options';\nimport { Canvas } from './canvas';\nimport { COMPONENTS, SUBREGISTRIES } from './default-registry';\nimport './muze.scss';\n\n// Cache singleton instances which should be included only once in a page\nconst globalCache = {};\nconst defaultRegistry = COMPONENTS;\n\nconst overrideRegistryDefinitions = (overrideRegistry, registry) => {\n for (const prop in overrideRegistry) {\n registry.set(prop, overrideRegistry[prop]);\n }\n};\n\n/**\n * Entry point to renderer. Initializes an environment with settings and registries for canvas. This is a simple wrapper\n * over {@link Canvas} which enables common configuration passing to multiple such canvases.\n *\n * Everytime `muze()` is called it creates an environment. These environment supports subset of APIs of Canvas. If\n * common configuration is used to render multiple canvases then it can be set directly in the env. Like if data is\n * common across all the visulization then its better to set the data in env. When a canvas is created it receives all\n * those configuration from env.\n *\n * ```\n * // Creates an environment\n * const env = muze()\n * // Set data property in environment, so that all the canvas created from the same environment gets this data\n * // automatically\n * env.data(dm);\n * // Creates canvas, by default env pushes data to canvas instance\n * const canvas = env.canvas();\n * ```\n *\n * If a property is set on both environment and canvas instance, property set on canvas instance gets more priority.\n *\n * @public\n * @module muze\n * @namespace Muze\n *\n * @return {Env} Instance of an environment\n */\nconst muze = () => {\n // Setters and getters will be mounted on this. Object will be mutated.\n const [env, globalStore] = transactor({}, options);\n const components = Object.assign({}, COMPONENTS);\n const componentSubRegistryDef = Object.assign(SUBREGISTRIES);\n const componentSubRegistry = {};\n\n for (const prop in componentSubRegistryDef) {\n componentSubRegistry[prop] = componentSubRegistryDef[prop]();\n }\n\n // Apart form the setter getter, an instance method is injected to create real renderer instances\n env.canvas = () => {\n // Create a canvas instance with this settings\n const settings = globalStore.serialize();\n const canvas = Canvas.withSettings(settings, { /* registry */\n components,\n componentSubRegistry\n }, env.globalDependencies());\n\n // Whenever settings is changed canvas is updated\n enableChainedTransaction(globalStore, canvas, Object.keys(settings));\n\n return canvas;\n };\n\n // Global dependencies for for compositions. Only one copy of the same should be in the page\n env.globalDependencies = () => {\n if (!globalCache.smartlabel) {\n globalCache.smartlabel = new Smartlabel(1, 'body');\n }\n return {\n smartlabel: globalCache.smartlabel,\n lifeCycleManager: new LifeCycleManager()\n };\n };\n\n // Retrieves global settings. This getter is readonly so that user can't change this as change should happen\n // only from setter to avoid unwanted sync issues.\n env.settings = () => globalStore.serialize();\n\n env.registry = (...overrideRegistry) => {\n // Selectively copy the properties from COMPONENTS\n if (overrideRegistry.length) {\n for (const prop in overrideRegistry) {\n if (prop in defaultRegistry) {\n components[prop] = overrideRegistry[prop];\n }\n }\n return env;\n }\n return components;\n };\n\n env.cellRegistry = (...overrideRegistry) => {\n const cellRegistry = componentSubRegistry.cellRegistry;\n if (overrideRegistry.length) {\n overrideRegistryDefinitions(overrideRegistry[0], cellRegistry);\n return env;\n }\n return cellRegistry.get();\n };\n\n env.layerRegistry = (...overrideRegistry) => {\n const layerRegistry = componentSubRegistry.layerRegistry;\n if (overrideRegistry.length) {\n overrideRegistryDefinitions(overrideRegistry[0], layerRegistry);\n return env;\n }\n return layerRegistry.get();\n };\n\n return env;\n};\n\nconst SideEffects = {\n sideEffects,\n standards: {\n SurrogateSideEffect,\n SpawnableSideEffect,\n GenericSideEffect\n }\n};\n\nconst Behaviours = {\n behaviouralActions,\n standards: {\n GenericBehaviour,\n PersistentBehaviour,\n VolatileBehaviour\n }\n};\n\nmuze.DataModel = DataModel;\nmuze.version = pkg.version;\nmuze.SideEffects = SideEffects;\nmuze.ActionModel = ActionModel;\nmuze.layerFactory = layerFactory;\nmuze.Operators = operators;\nmuze.Behaviours = Behaviours;\nmuze.utils = {\n getClientPoint,\n getEvent,\n makeElement,\n selectElement,\n DateTimeFormatter,\n require\n};\n\nexport default muze;\n"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack://muze/webpack/universalModuleDefinition","webpack://muze/webpack/bootstrap","webpack://muze/../Documents/Muze/datamodel/dist/datamodel.js","webpack://muze/./packages/muze-utils/node_modules/hyperdis/dist/hyperdis.js","webpack://muze/(webpack)/buildin/module.js","webpack://muze/./packages/muze-utils/node_modules/fusioncharts-smartlabel/lib/SmartlabelManager.js","webpack://muze/./packages/muze-utils/node_modules/fusioncharts-smartlabel/lib/lib.js","webpack://muze/./packages/muze/src/index.js","webpack://muze/./packages/muze-utils/node_modules/fusioncharts-smartlabel/lib/container-manager.js","webpack://muze/./packages/muze-utils/node_modules/d3-array/src/ascending.js","webpack://muze/./packages/muze-utils/node_modules/d3-array/src/bisector.js","webpack://muze/./packages/muze-utils/node_modules/d3-array/src/bisect.js","webpack://muze/./packages/muze-utils/node_modules/d3-array/src/cross.js","webpack://muze/./packages/muze-utils/node_modules/d3-array/src/number.js","webpack://muze/./packages/muze-utils/node_modules/d3-array/src/array.js","webpack://muze/./packages/muze-utils/node_modules/d3-array/src/range.js","webpack://muze/./packages/muze-utils/node_modules/d3-array/src/ticks.js","webpack://muze/./packages/muze-utils/node_modules/d3-array/src/threshold/sturges.js","webpack://muze/./packages/muze-utils/node_modules/d3-array/src/quantile.js","webpack://muze/./packages/muze-utils/node_modules/d3-collection/src/map.js","webpack://muze/./packages/muze-utils/node_modules/d3-collection/src/nest.js","webpack://muze/./packages/muze-utils/node_modules/d3-collection/src/set.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/array.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/ordinal.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/band.js","webpack://muze/./packages/muze-utils/node_modules/d3-color/src/define.js","webpack://muze/./packages/muze-utils/node_modules/d3-color/src/color.js","webpack://muze/./packages/muze-utils/node_modules/d3-color/src/math.js","webpack://muze/./packages/muze-utils/node_modules/d3-color/src/lab.js","webpack://muze/./packages/muze-utils/node_modules/d3-color/src/cubehelix.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/basis.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/constant.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/color.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/rgb.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/number.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/basisClosed.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/string.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/transform/parse.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/value.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/date.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/array.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/object.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/round.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/transform/decompose.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/transform/index.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/zoom.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/hsl.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/hcl.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/cubehelix.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/piecewise.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/quantize.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/constant.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/number.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/continuous.js","webpack://muze/./packages/muze-utils/node_modules/d3-format/src/formatDecimal.js","webpack://muze/./packages/muze-utils/node_modules/d3-format/src/exponent.js","webpack://muze/./packages/muze-utils/node_modules/d3-format/src/formatSpecifier.js","webpack://muze/./packages/muze-utils/node_modules/d3-format/src/formatTrim.js","webpack://muze/./packages/muze-utils/node_modules/d3-format/src/formatPrefixAuto.js","webpack://muze/./packages/muze-utils/node_modules/d3-format/src/defaultLocale.js","webpack://muze/./packages/muze-utils/node_modules/d3-format/src/formatRounded.js","webpack://muze/./packages/muze-utils/node_modules/d3-format/src/formatTypes.js","webpack://muze/./packages/muze-utils/node_modules/d3-format/src/identity.js","webpack://muze/./packages/muze-utils/node_modules/d3-format/src/locale.js","webpack://muze/./packages/muze-utils/node_modules/d3-format/src/formatGroup.js","webpack://muze/./packages/muze-utils/node_modules/d3-format/src/formatNumerals.js","webpack://muze/./packages/muze-utils/node_modules/d3-format/src/precisionFixed.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/tickFormat.js","webpack://muze/./packages/muze-utils/node_modules/d3-format/src/precisionPrefix.js","webpack://muze/./packages/muze-utils/node_modules/d3-format/src/precisionRound.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/linear.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/identity.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/nice.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/log.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/pow.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/quantile.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/quantize.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/threshold.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/interval.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/millisecond.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/duration.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/second.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/minute.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/hour.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/day.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/week.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/month.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/year.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/utcMinute.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/utcHour.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/utcDay.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/utcWeek.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/utcMonth.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/utcYear.js","webpack://muze/./packages/muze-utils/node_modules/d3-time-format/src/locale.js","webpack://muze/./packages/muze-utils/node_modules/d3-time-format/src/defaultLocale.js","webpack://muze/./packages/muze-utils/node_modules/d3-time-format/src/isoFormat.js","webpack://muze/./packages/muze-utils/node_modules/d3-time-format/src/isoParse.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/time.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/colors.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/category10.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/category20b.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/category20.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/category20c.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/cubehelix.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/rainbow.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/viridis.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/sequential.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/colors.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/categorical/Accent.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/categorical/category10.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/categorical/Dark2.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/categorical/Paired.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/categorical/Pastel1.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/categorical/Pastel2.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/categorical/Set1.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/categorical/Set2.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/categorical/Set3.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/ramp.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/diverging/BrBG.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/diverging/PRGn.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/diverging/PiYG.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/diverging/PuOr.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/diverging/RdBu.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/diverging/RdGy.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/diverging/RdYlBu.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/diverging/RdYlGn.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/diverging/Spectral.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/BuGn.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/BuPu.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/GnBu.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/OrRd.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/PuBuGn.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/PuBu.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/PuRd.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/RdPu.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/YlGnBu.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/YlGn.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/YlOrBr.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/YlOrRd.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-single/Blues.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-single/Greens.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-single/Greys.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-single/Purples.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-single/Reds.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-single/Oranges.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/cubehelix.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/rainbow.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/sinebow.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/viridis.js","webpack://muze/./packages/muze-utils/src/enums/reserved-fields.js","webpack://muze/./packages/muze-utils/src/enums/common-props.js","webpack://muze/./packages/muze-utils/node_modules/d3-axis/src/array.js","webpack://muze/./packages/muze-utils/node_modules/d3-axis/src/identity.js","webpack://muze/./packages/muze-utils/node_modules/d3-axis/src/axis.js","webpack://muze/./packages/muze-utils/node_modules/d3-path/src/path.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/constant.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/math.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/arc.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/curve/linear.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/point.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/line.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/area.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/descending.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/identity.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/curve/radial.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/lineRadial.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/array.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/symbol/circle.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/symbol/cross.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/symbol/diamond.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/symbol/star.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/symbol/square.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/symbol/triangle.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/symbol/wye.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/noop.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/curve/basis.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/curve/basisClosed.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/curve/basisOpen.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/curve/bundle.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/curve/cardinal.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/curve/cardinalClosed.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/curve/cardinalOpen.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/curve/catmullRom.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/curve/catmullRomClosed.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/curve/catmullRomOpen.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/curve/linearClosed.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/curve/monotone.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/curve/natural.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/curve/step.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/offset/none.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/order/none.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/stack.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/order/ascending.js","webpack://muze/./packages/muze-utils/node_modules/d3-ease/src/cubic.js","webpack://muze/./packages/muze-utils/node_modules/d3-ease/src/poly.js","webpack://muze/./packages/muze-utils/node_modules/d3-ease/src/sin.js","webpack://muze/./packages/muze-utils/node_modules/d3-ease/src/bounce.js","webpack://muze/./packages/muze-utils/node_modules/d3-ease/src/back.js","webpack://muze/./packages/muze-utils/node_modules/d3-ease/src/elastic.js","webpack://muze/./packages/muze-utils/node_modules/d3-voronoi/src/constant.js","webpack://muze/./packages/muze-utils/node_modules/d3-voronoi/src/point.js","webpack://muze/./packages/muze-utils/node_modules/d3-voronoi/src/RedBlackTree.js","webpack://muze/./packages/muze-utils/node_modules/d3-voronoi/src/Edge.js","webpack://muze/./packages/muze-utils/node_modules/d3-voronoi/src/Cell.js","webpack://muze/./packages/muze-utils/node_modules/d3-voronoi/src/Circle.js","webpack://muze/./packages/muze-utils/node_modules/d3-voronoi/src/Beach.js","webpack://muze/./packages/muze-utils/node_modules/d3-voronoi/src/Diagram.js","webpack://muze/./packages/muze-utils/node_modules/d3-voronoi/src/voronoi.js","webpack://muze/./packages/muze-utils/src/common-utils.js","webpack://muze/./packages/muze-utils/node_modules/d3-ease/src/linear.js","webpack://muze/./packages/muze-utils/node_modules/d3-ease/src/circle.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/symbol.js","webpack://muze/./packages/muze-utils/src/enums/stack-config.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/order/descending.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/offset/diverging.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/offset/expand.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/offset/wiggle.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/pie.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/namespaces.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/namespace.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/creator.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selector.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selectorAll.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/matcher.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/sparse.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/enter.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/constant.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/data.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/sort.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/attr.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/window.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/style.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/classed.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/text.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/html.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/raise.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/lower.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/insert.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/remove.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/clone.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/on.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/dispatch.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/index.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/select.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/selectAll.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/filter.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/exit.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/merge.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/order.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/call.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/nodes.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/node.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/size.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/empty.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/each.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/property.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/append.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/datum.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/select.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/local.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/sourceEvent.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/point.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/mouse.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/touch.js","webpack://muze/./packages/muze-utils/node_modules/d3-dispatch/src/dispatch.js","webpack://muze/./packages/muze-utils/node_modules/d3-drag/src/noevent.js","webpack://muze/./packages/muze-utils/node_modules/d3-drag/src/nodrag.js","webpack://muze/./packages/muze-utils/node_modules/d3-drag/src/constant.js","webpack://muze/./packages/muze-utils/node_modules/d3-drag/src/event.js","webpack://muze/./packages/muze-utils/node_modules/d3-drag/src/drag.js","webpack://muze/./packages/muze-utils/node_modules/d3-timer/src/timer.js","webpack://muze/./packages/muze-utils/node_modules/d3-timer/src/timeout.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/schedule.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/tween.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/interpolate.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/remove.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/selection.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/text.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/index.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/select.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/selectAll.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/filter.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/merge.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/transition.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/on.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/attr.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/attrTween.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/style.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/styleTween.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/delay.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/duration.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/ease.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/selection/transition.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/selection/index.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/selection/interrupt.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/interrupt.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/active.js","webpack://muze/./packages/muze-utils/src/renderer-utils.js","webpack://muze/./packages/muze-utils/src/DataSystem/selection.js","webpack://muze/./packages/muze-utils/src/DataSystem/data-object.js","webpack://muze/./packages/muze-utils/src/lifecycle-manager/event-list.js","webpack://muze/./packages/muze-utils/src/lifecycle-manager/lifecycle-manager.js","webpack://muze/./packages/muze-utils/src/lifecycle-manager/index.js","webpack://muze/./packages/muze-firebolt/src/enums/actions.js","webpack://muze/./packages/muze-firebolt/src/enums/selection.js","webpack://muze/./packages/muze-firebolt/src/selection-set/index.js","webpack://muze/./packages/muze-firebolt/src/helper/index.js","webpack://muze/./packages/muze-firebolt/src/firebolt.js","webpack://muze/./packages/muze-firebolt/src/actions/behavioural/generic.js","webpack://muze/./packages/muze-firebolt/src/actions/behavioural/volatile.js","webpack://muze/./packages/muze-firebolt/src/enums/behaviours.js","webpack://muze/./packages/muze-firebolt/src/actions/behavioural/highlight.js","webpack://muze/./packages/muze-firebolt/src/actions/behavioural/brush.js","webpack://muze/./packages/muze-firebolt/src/actions/behavioural/filter.js","webpack://muze/./packages/muze-firebolt/src/actions/behavioural/persistent.js","webpack://muze/./packages/muze-firebolt/src/actions/behavioural/select.js","webpack://muze/./packages/muze-firebolt/src/actions/physical/helpers/drag-action-config.js","webpack://muze/./packages/muze-firebolt/src/actions/physical/helpers/drag-event.js","webpack://muze/./packages/muze-firebolt/src/actions/physical/hover.js","webpack://muze/./packages/muze-firebolt/src/enums/constants.js","webpack://muze/./packages/muze-firebolt/src/actions/physical/helpers/index.js","webpack://muze/./packages/muze-firebolt/src/actions/physical/click.js","webpack://muze/./packages/muze-firebolt/src/actions/physical/index.js","webpack://muze/./packages/muze-firebolt/src/actions/physical/drag.js","webpack://muze/./packages/muze-firebolt/src/actions/physical/longtouch.js","webpack://muze/./packages/muze-firebolt/src/actions/physical/touch-drag.js","webpack://muze/./packages/muze-firebolt/src/side-effects/generic.js","webpack://muze/./packages/muze-firebolt/src/side-effects/surrogate.js","webpack://muze/./packages/muze-firebolt/src/side-effects/spawnable.js","webpack://muze/./packages/muze-firebolt/src/side-effects/selection-box/helper.js","webpack://muze/./packages/muze-firebolt/src/side-effects/selection-box/index.js","webpack://muze/./packages/muze-firebolt/src/actions/physical/selection-box-drag.js","webpack://muze/./packages/muze-tooltip/src/constants.js","webpack://muze/./packages/muze-tooltip/src/default-config.js","webpack://muze/./packages/muze-tooltip/src/helper.js","webpack://muze/./packages/muze-tooltip/src/strategy.js","webpack://muze/./packages/muze-tooltip/src/content.js","webpack://muze/./packages/muze-tooltip/src/tooltip.js","webpack://muze/./packages/muze-firebolt/src/side-effects/tooltip/strategies.js","webpack://muze/./packages/muze-firebolt/src/side-effects/tooltip/index.js","webpack://muze/./packages/muze-firebolt/src/side-effects/helper/index.js","webpack://muze/./packages/muze-firebolt/src/side-effects/crossline/index.js","webpack://muze/./packages/muze-firebolt/src/side-effects/plot-highlighter/strategy.js","webpack://muze/./packages/muze-firebolt/src/side-effects/plot-highlighter/index.js","webpack://muze/./packages/muze-firebolt/src/side-effects/filter/index.js","webpack://muze/./packages/muze-firebolt/src/side-effects/anchors/index.js","webpack://muze/./packages/muze-firebolt/src/side-effects/persistent-anchors.js","webpack://muze/./packages/muze-firebolt/src/side-effects/brush-anchors.js","webpack://muze/./packages/muze-firebolt/src/behaviour-effect-map.js","webpack://muze/./packages/visual-layer/src/enums/constants.js","webpack://muze/./packages/visual-layer/src/layers/area/default-config.js","webpack://muze/./packages/visual-layer/src/simple-layer/simple-layer.js","webpack://muze/./packages/visual-layer/src/enums/props.js","webpack://muze/./packages/muze-axis/src/enums/axis-orientation.js","webpack://muze/./packages/muze-axis/src/enums/scale-type.js","webpack://muze/./packages/muze-axis/src/enums/constants.js","webpack://muze/./packages/muze-axis/src/scale-creator.js","webpack://muze/./packages/muze-axis/src/cartesian-axis/default-config.js","webpack://muze/./packages/muze-axis/src/axis-renderer.js","webpack://muze/./packages/muze-axis/src/cartesian-axis/helper.js","webpack://muze/./packages/muze-axis/src/cartesian-axis/props.js","webpack://muze/./packages/muze-axis/src/cartesian-axis/simple-axis.js","webpack://muze/./packages/muze-axis/src/cartesian-axis/interpolators/linear.js","webpack://muze/./packages/muze-axis/src/cartesian-axis/interpolators/log.js","webpack://muze/./packages/muze-axis/src/cartesian-axis/interpolators/pow.js","webpack://muze/./packages/muze-axis/src/cartesian-axis/continous-axis.js","webpack://muze/./packages/muze-axis/src/cartesian-axis/band-axis.js","webpack://muze/./packages/muze-axis/src/cartesian-axis/time-axis.js","webpack://muze/./packages/muze-axis/src/color-axis/color-maps.js","webpack://muze/./packages/muze-axis/src/color-axis/defaults.js","webpack://muze/./packages/muze-axis/src/color-axis/props.js","webpack://muze/./packages/muze-axis/src/color-axis/color-strategy.js","webpack://muze/./packages/muze-axis/src/color-axis/color-axis.js","webpack://muze/./packages/muze-axis/src/size-axis/defaults.js","webpack://muze/./packages/muze-axis/src/size-axis/size-strategy.js","webpack://muze/./packages/muze-axis/src/size-axis/props.js","webpack://muze/./packages/muze-axis/src/size-axis/size-axis.js","webpack://muze/./packages/muze-axis/src/shape-axis/defaults.js","webpack://muze/./packages/muze-axis/src/shape-axis/props.js","webpack://muze/./packages/muze-axis/src/shape-axis/shape-axis.js","webpack://muze/./packages/muze-axis/src/shape-axis/helper.js","webpack://muze/./packages/muze-axis/src/data-type-scale-map.js","webpack://muze/./packages/transform/src/group-transform/index.js","webpack://muze/./packages/transform/src/identity-transform/index.js","webpack://muze/./packages/transform/src/transform-factory/index.js","webpack://muze/./packages/transform/src/enums/transform-type.js","webpack://muze/./packages/transform/src/stack-transform/index.js","webpack://muze/./packages/visual-layer/src/helpers/index.js","webpack://muze/./packages/visual-layer/src/base-layer/listener-map.js","webpack://muze/./packages/visual-layer/src/base-layer/default-options.js","webpack://muze/./packages/visual-layer/src/base-layer/base-layer.js","webpack://muze/./packages/visual-layer/src/layers/line/renderer.js","webpack://muze/./packages/visual-layer/src/layers/line/default-config.js","webpack://muze/./packages/visual-layer/src/layers/line/line.js","webpack://muze/./packages/visual-layer/src/layers/area/renderer.js","webpack://muze/./packages/visual-layer/src/layers/area/area.js","webpack://muze/./packages/visual-layer/src/layers/arc/default-config.js","webpack://muze/./packages/visual-layer/src/layers/arc/arc.js","webpack://muze/./packages/visual-layer/src/layers/arc/arc-helper.js","webpack://muze/./packages/visual-layer/src/layers/text/renderer.js","webpack://muze/./packages/visual-layer/src/layers/text/default-config.js","webpack://muze/./packages/visual-layer/src/layers/text/text.js","webpack://muze/./packages/visual-layer/src/layers/point/renderer.js","webpack://muze/./packages/visual-layer/src/layers/point/default-config.js","webpack://muze/./packages/visual-layer/src/layers/point/point.js","webpack://muze/./packages/visual-layer/src/layers/bar/renderer.js","webpack://muze/./packages/visual-layer/src/layers/bar/default-config.js","webpack://muze/./packages/visual-layer/src/layers/bar/bar-helper.js","webpack://muze/./packages/visual-layer/src/layers/bar/bar.js","webpack://muze/./packages/visual-layer/src/layers/tick/default-config.js","webpack://muze/./packages/visual-layer/src/layers/tick/renderer.js","webpack://muze/./packages/visual-layer/src/layers/tick/tick.js","webpack://muze/./packages/visual-layer/src/layer-factory/index.js","webpack://muze/./packages/visual-layer/src/defaults.js","webpack://muze/./packages/visual-group/src/enums/constants.js","webpack://muze/./packages/visual-group/src/visual-group/local-options.js","webpack://muze/./packages/visual-group/src/simple-group/simple-group.js","webpack://muze/./packages/visual-group/src/variable/variable.js","webpack://muze/./packages/visual-group/src/variable/composed-vars.js","webpack://muze/./packages/visual-group/src/variable/simple-var.js","webpack://muze/./packages/visual-group/src/encoder/field-sanitizer.js","webpack://muze/./packages/visual-group/src/encoder/visual-encoder.js","webpack://muze/./packages/visual-group/src/enums/scale-maps.js","webpack://muze/./packages/visual-group/src/data-type-scale-map.js","webpack://muze/./packages/visual-group/src/encoder/encoder-helper.js","webpack://muze/./packages/visual-group/src/encoder/cartesian-encoder.js","webpack://muze/./packages/visual-group/src/encoder/polar-encoder.js","webpack://muze/./packages/visual-group/src/encoder/retinal-encoder.js","webpack://muze/./packages/visual-group/src/group-helper/group-utils.js","webpack://muze/./packages/visual-group/src/enums/defaults.js","webpack://muze/./packages/muze-utils/src/DataSystem/dataSelect.js","webpack://muze/./packages/visual-unit/src/firebolt/action-behaviour-map.js","webpack://muze/./packages/visual-unit/src/enums/reactive-props.js","webpack://muze/./packages/visual-unit/src/helper/index.js","webpack://muze/./packages/visual-unit/src/helper/grid-lines.js","webpack://muze/./packages/visual-unit/src/default-config.js","webpack://muze/./packages/visual-unit/src/enums/constants.js","webpack://muze/./packages/visual-unit/src/local-options.js","webpack://muze/./packages/visual-unit/src/listener-map.js","webpack://muze/./packages/visual-unit/src/props.js","webpack://muze/./packages/visual-unit/src/firebolt/helper.js","webpack://muze/./packages/visual-unit/src/firebolt/payload-generator.js","webpack://muze/./packages/visual-unit/src/firebolt/data-propagator.js","webpack://muze/./packages/visual-unit/src/firebolt/index.js","webpack://muze/./packages/visual-unit/src/visual-unit.js","webpack://muze/./packages/visual-group/src/group-helper/matrix-model.js","webpack://muze/./packages/visual-group/src/group-helper/cell-creator.js","webpack://muze/./packages/visual-group/src/group-helper/matrix-resolver.js","webpack://muze/./packages/visual-group/src/visual-group/value-matrix.js","webpack://muze/./packages/visual-group/src/visual-group/change-listener.js","webpack://muze/./packages/visual-group/src/visual-group/props.js","webpack://muze/./packages/visual-group/src/visual-group/visual-group.js","webpack://muze/./packages/muze-legend/src/firebolt/behavioural/select.js","webpack://muze/./packages/muze-legend/src/firebolt/action-behaviour-map.js","webpack://muze/./packages/muze-legend/src/firebolt/behaviour-effect-map.js","webpack://muze/./packages/muze-legend/src/enums/behaviours.js","webpack://muze/./packages/muze-legend/src/enums/side-effects.js","webpack://muze/./packages/muze-legend/src/enums/constants.js","webpack://muze/./packages/muze-legend/src/firebolt/helper.js","webpack://muze/./packages/muze-legend/src/firebolt/legend-firebolt.js","webpack://muze/./packages/muze-legend/src/firebolt/physical/drag.js","webpack://muze/./packages/muze-legend/src/firebolt/physical/hover.js","webpack://muze/./packages/muze-legend/src/firebolt/physical/click.js","webpack://muze/./packages/muze-legend/src/firebolt/physical/index.js","webpack://muze/./packages/muze-legend/src/enums/actions.js","webpack://muze/./packages/muze-legend/src/firebolt/physical/selection-box-drag.js","webpack://muze/./packages/muze-legend/src/firebolt/side-effects/selection-box/index.js","webpack://muze/./packages/muze-legend/src/firebolt/side-effects/legend-highlighter/strategies.js","webpack://muze/./packages/muze-legend/src/firebolt/side-effects/legend-highlighter/index.js","webpack://muze/./packages/muze-legend/src/legend/props.js","webpack://muze/./packages/muze-legend/src/legend/defaults.js","webpack://muze/./packages/muze-legend/src/legend/legend-helper.js","webpack://muze/./packages/muze-legend/src/legend/simple-legend.js","webpack://muze/./packages/muze-legend/src/legend/position-config.js","webpack://muze/./packages/muze-legend/src/legend/renderer.js","webpack://muze/./packages/muze-legend/src/legend/discrete-legend.js","webpack://muze/./packages/muze-legend/src/legend/gradient-helper.js","webpack://muze/./packages/muze-legend/src/legend/gradient-legend.js","webpack://muze/./packages/muze-legend/src/legend/step-legend.js","webpack://muze/./packages/muze/src/constants.js","webpack://muze/./packages/muze/src/operators.js","webpack://muze/./packages/muze/src/action-model.js","webpack://muze/./packages/muze/src/defaults.js","webpack://muze/./packages/muze/src/options.js","webpack://muze/./packages/layout/src/enums/constants.js","webpack://muze/./packages/layout/src/generic-layout/index.js","webpack://muze/./packages/layout/src/grid-layout/defaults.js","webpack://muze/./packages/layout/src/grid-layout/span-maker.js","webpack://muze/./packages/layout/src/grid-layout/renderer.js","webpack://muze/./packages/layout/src/utils/index.js","webpack://muze/./packages/layout/src/visual-matrix/props.js","webpack://muze/./packages/layout/src/visual-matrix/default-config.js","webpack://muze/./packages/layout/src/visual-matrix/visual-matrix.js","webpack://muze/./packages/layout/src/grid-layout/computations.js","webpack://muze/./packages/layout/src/grid-layout/layout.js","webpack://muze/./packages/layout/src/grid-layout/layout-helper.js","webpack://muze/./packages/muze/src/transaction-support.js","webpack://muze/./packages/muze/src/canvas/component-resolver.js","webpack://muze/./packages/visual-cell/src/enums/constants.js","webpack://muze/./packages/visual-cell/src/enums/cell-type.js","webpack://muze/./packages/visual-cell/src/simple-cell.js","webpack://muze/./packages/visual-cell/src/enums/defaults.js","webpack://muze/./packages/visual-cell/src/props.js","webpack://muze/./packages/visual-cell/src/axis-cell.js","webpack://muze/./packages/visual-cell/src/blank-cell.js","webpack://muze/./packages/visual-cell/src/text-cell.js","webpack://muze/./packages/visual-cell/src/geom-cell.js","webpack://muze/./packages/visual-cell/src/defaults.js","webpack://muze/./packages/visual-cell/src/constants.js","webpack://muze/./packages/visual-cell/src/cell-registry.js","webpack://muze/./packages/muze/src/canvas/title-maker.js","webpack://muze/./packages/muze/src/canvas/legend-maker.js","webpack://muze/./packages/muze/src/canvas/layout-maker.js","webpack://muze/./packages/muze/src/canvas/defaults.js","webpack://muze/./packages/muze/src/canvas/local-options.js","webpack://muze/./packages/muze/src/canvas/renderer.js","webpack://muze/./packages/muze/src/canvas/helper.js","webpack://muze/./packages/muze/src/canvas/firebolt.js","webpack://muze/./packages/muze/src/canvas/canvas.js","webpack://muze/./packages/muze/src/default-registry.js","webpack://muze/./packages/visual-layer/src/layer-registry.js","webpack://muze/./packages/muze/src/muze.js"],"names":["webpackUniversalModuleDefinition","root","factory","exports","module","define","amd","window","installedModules","__webpack_require__","moduleId","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","getDefault","getModuleExports","object","property","prototype","hasOwnProperty","p","s","e","_typeof","__WEBPACK_AMD_DEFINE_ARRAY__","undefined","__WEBPACK_AMD_DEFINE_RESULT__","__WEBPACK_AMD_DEFINE_FACTORY__","apply","default","description","homepage","version","license","main","author","keywords","repository","type","url","contributors","email","dependencies","d3-dsv","devDependencies","babel-cli","babel-core","babel-eslint","babel-loader","babel-plugin-transform-runtime","babel-preset-env","babel-preset-es2015","babel-preset-flow","chai","cross-env","eslint","eslint-config-airbnb","eslint-plugin-import","eslint-plugin-jsx-a11y","eslint-plugin-react","istanbul-instrumenter-loader","jsdoc","json2yaml","karma","karma-chai","karma-chrome-launcher","karma-coverage-istanbul-reporter","karma-mocha","karma-spec-reporter","karma-webpack","marked","mocha","mocha-webpack","transform-runtime","webpack","webpack-cli","webpack-dev-server","scripts","test","ut","utd","build","build:dev","start","lint","lint-errors","docs","u","f","Me","Ve","Ye","Be","a","ct","ft","st","lt","dt","pt","ht","vt","FLAT_JSON","DSV_STR","DSV_ARR","AUTO","CATEGORICAL","TEMPORAL","GEO","DISCRETE","MEASURE","DIMENSION","NORMAL","INVERSE","ALL","length","split","forEach","configurable","writable","TypeError","this","_ref","_rowDiff","sanitize","parsed","getData","fieldType","subType","concat","Array","isArray","from","Set","Math","min","max","parse","clone","fieldName","getMinDiff","unit","scale","defAggFn","push","data","bins","schema","h","Date","v","format","dtParams","nativeDate","RegExp","escape","replace","TOKEN_PREFIX","DATETIME_PARAM_SEQUENCE","YEAR","MONTH","DAY","HOUR","MINUTE","SECOND","MILLISECOND","defaultNumberParser","isFinite","parseInt","defaultRangeParser","toLowerCase","getTokenDefinitions","short","long","H","index","extract","parser","formatter","getHours","toString","P","M","getMinutes","S","getSeconds","K","getMilliseconds","join","getDay","A","getDate","b","getMonth","B","y","substring","getFullYear","Y","getTokenFormalNames","HOUR_12","AMPM_UPPERCASE","AMPM_LOWERCASE","SHORT_DAY","LONG_DAY","DAY_OF_MONTH","DAY_OF_MONTH_CONSTANT_WIDTH","SHORT_MONTH","LONG_MONTH","MONTH_OF_YEAR","SHORT_YEAR","LONG_YEAR","tokenResolver","arguments","findTokens","keys","indexOf","token","formatAs","String","extractTokenValue","noBreak","splice","map","match","shift","getNativeDate","unshift","Function","g","iterator","constructor","_","O","w","E","k","j","T","getTime","round","random","x","F","abs","N","R","createNamespace","fields","fieldsObj","getMeasure","getDimension","D","field","_value","C","next","done","return","L","U","V","G","CROSS","LEFTOUTER","RIGHTOUTER","NATURAL","FULLOUTER","W","getFieldspace","Error","_rowDiffset","Ke","z","X","floor","Q","$","Z","Map","has","set","ee","label","reduce","ne","_colIdentifier","sort","re","ie","ae","oe","sum","avg","every","first","last","count","std","sqrt","pow","ue","ce","fe","store","entries","__unregister","delete","se","le","pe","he","yt","ve","me","ye","ge","fieldDescription","be","_e","ReferenceError","__proto__","getPrototypeOf","fieldUnit","fieldScale","fieldDefAggFn","fieldNumberformat","numberFormat","setPrototypeOf","Number","POSITIVE_INFINITY","NEGATIVE_INFINITY","parseFloat","isNaN","Oe","Ae","trim","_unique","we","Ee","subtype","ke","je","minDiff","_dtf","Se","Te","bin","Fe","xe","dataFormat","assign","firstRowHeader","Ne","Re","De","Pe","Ce","Ie","JSON","stringify","Le","charCodeAt","slice","columns","parseRows","formatRows","Ue","He","fieldSeparator","Je","Ge","qe","We","op","meta","criteria","_derivation","ze","operation","filterByMeasure","getFieldsConfig","values","def","domain","some","valueOf","select","saveChild","Xe","getPartialFieldspace","__calculateFieldspace","calculateFieldsConfig","config","Qe","filter","projField","actualProjField","$e","_partialFieldspace","Ze","et","groupByString","params","tt","nonTraversingModel","excludeModels","handlePropagation","_children","nt","propagationNameSpace","propagateToSource","sourceId","propagateInterpolatedValues","persistent","mutableActions","filterFn","applyOnSource","action","model","models","path","_parent","sourceIdentifiers","propagationSourceId","groupByModel","reverse","rt","it","_fieldStoreName","_propagationNameSpace","immutableActions","_fieldspace","getAllFields","search","_fieldConfig","removeChild","findIndex","at","ot","_onPropagation","_sortingDetails","order","withUid","te","uids","addUid","columnWise","pop","de","defaultReducer","resolve","fieldsArr","replaceVar","addField","isMutableAction","payload","find","propConfig","filterImmutableAction","I","buckets","binCount","binSize","stops","add","mid","range","measureName","binFieldName","mt","Operators","compose","addParent","dispose","project","groupBy","calculateVariable","crossProduct","difference","naturalJoin","leftOuterJoin","rightOuterJoin","fullOuterJoin","union","Stats","DateTimeFormatter","DataFormat","FilteringMode","_set","requestAnimationFrame","webkitRequestAnimationFrame","mozRequestAnimationFrame","oRequestAnimationFrame","msRequestAnimationFrame","setTimeout","__lastTime","__id","unique","qualifiedName","seed","fn","outgoingEdges","accumulate","identity","dep","edges","_seed","requireResolve","retriever","history","resolver","electricEdges","retrieveDetails","q","listeners","nextFrame","currentFrame","qualifiedNodeMap","_wholeSet","_propagate","propagationOverride","currentFrameListeners","nextFrameListeners","_schedule","flush","perv","addDependencies","getDependencies","getResolvedList","addEdges","addElectricNode","append","__execUniqueElectricEdges","toArray","repeatHead","resetPropagationOverride","update","isRoot","_graph","_lockFlag","_reqQ","_addPropInModel","createNodesFrom","createElectricNodeOf","stopPropagation","setPropagationOverride","resetNodeValue","setProp","getNodeValue","getNodeFromQualifiedName","webpackPolyfill","deprecate","paths","children","_interopRequireDefault","obj","_lib2","_containerManager2","slLib","init","doc","win","document","htmlSplCharSpace"," ","documentSupport","getDocumentSupport","SVG_BBOX_CORRECTION","isWebKit","SmartLabelManager","id","container","useEllipses","options","wrapper","prop","prevInstance","isBrowserLess","maxCacheLimit","maxDefaultCacheLimit","getElementById","createContainer","innerHTML","testStrAvg","isHeadLess","isIE","offsetHeight","offsetWidth","parentContainerStyle","style","parentContainer","_containerManager","_showNoEllipses","_init","setStyle","textToLines","smartlabel","text","lines","_calCharDimWithCache","calculateDifference","size","csArr","tw","twi","cachedStyle","asymmetricDifference","maxAdvancedCacheLimit","_container","cache","_advancedCache","advancedCacheKey","_advancedCacheKey","cacheName","fontSize","fontFamily","fontWeight","fontStyle","cacheInitName","repeat","width","height","_getWidthFn","contObj","_containerObj","svgText","str","bbox","textContent","getBBox","_styleNotSet","setLineHeight","sCont","node","_context","context","_cache","charCache","_lineHeight","lineHeight","useEllipsesOnOverflow","getSmartText","maxWidth","maxHeight","noWrap","len","trimStr","tempArr","tmpText","maxWidthWithEll","toolText","oriWidth","oriHeight","newCharIndex","nearestChar","tempChar","getWidth","initialLeft","initialTop","getOriSizeImproveObj","spanArr","minWidth","elem","chr","elemRightMostPoint","elemLowestPoint","lastBR","removeFromIndex","removeFromIndexForEllipses","hasHTMLTag","maxStrWidth","lastDash","lastSpace","lastIndexBroken","strWidth","strHeight","oriTextArr","ellipsesStr","ellipsesWidth","dotWidth","characterArr","dashIndex","spaceIndex","lastLineBreak","fastTrim","ws","charAt","smartLabel","oriTextWidth","oriTextHeight","oriText","isTruncated","xmlTagRegEx","ltgtRegex","getOriSize","substr","getNearestBreakIndex","detailObj","tooltext","lastIndexOf","spanAdditionRegx","spanAdditionReplacer","classNameWithTag","classNameWithTagBR","childRetriverFn","childRetriverString","noClassTesting","classNameReg","className","spaceIdx","dashIdx","offsetLeft","offsetTop","parentNode","insertBefore","createElement","classNameBrReg","spanRemovalRegx","error","detailedCalculationFlag","textArr","letter","lSize","cumulativeSize","indiSizeStore","lib","userAgent","navigator","ceil","clsNameSpace","containerClass","brReplaceRegex","position","top","whiteSpace","padding","overflow","supportedStyle","font","font-family","font-weight","font-size","line-height","font-style","getElementsByClassName","opera","hasSVG","Boolean","SVGAngle","implementation","hasFeature","containerParent","body","appendChild","setAttribute","getElementsByTagName","sl","charLen","increment","avgWidth","styleObj","fSize","Muze","ContainerManager","maxContainers","svg","containers","rootNode","createElementNS","setAttributeNS","svgRoot","diff","containerObj","keyStr","prev","removeContainer","addContainer","avgCharWidth","display","cObj","ascending","NaN","bisector","compare","ascendingComparator","left","lo","hi","right","ascendingBisect","bisectRight","bisect","number","array_array","src_range","stop","step","e10","e5","e2","src_ticks","ticks","tickIncrement","power","log","LN10","tickStep","step0","step1","quantile","valueof","i0","value0","map_Map","map_map","each","remove","clear","empty","src_map","src_nest","sortValues","rollup","nest","sortKeys","array","depth","createResult","setResult","keyValue","valuesByKey","result","createObject","setObject","createMap","setMap","sortKey","set_Set","proto","set_set","src_array_array","src_array_map","array_slice","implicit","ordinal","unknown","copy","band","bandwidth","ordinalRange","paddingInner","paddingOuter","align","rescale","rangeRound","invertExtent","r0","r1","hiIndex","getClosestIndexOf","invert","arr","side","highVal","d1","low","high","extend","parent","definition","Color","reI","reN","reP","reHex3","reHex6","reRgbInteger","reRgbPercent","reRgbaInteger","reRgbaPercent","reHslPercent","reHslaPercent","named","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","color_color","exec","Rgb","rgbn","rgba","hsla","rgbConvert","rgb","opacity","color_rgb","hex","Hsl","hsl","hslConvert","hsl2rgb","m1","m2","displayable","brighter","darker","deg2rad","PI","rad2deg","Xn","Yn","Zn","lab_t0","lab_t1","t2","t3","labConvert","Lab","Hcl","cos","sin","rgb2lrgb","xyz2lab","lab","lab2xyz","lrgb2rgb","hclConvert","atan2","hcl","cubehelix_D","ED","EB","BC_DA","cubehelix_cubehelix","cubehelixConvert","Cubehelix","bl","basis","t1","v0","v1","v2","v3","cosh","sinh","src_constant","linear","color_hue","gamma","nogamma","exponential","src_rgb","rgbGamma","color","end","rgbSpline","spline","colors","rgbBasis","src_number","reA","reB","source","cssNode","cssRoot","cssView","svgNode","src_string","am","bm","bs","bi","lastIndex","one","string_zero","src_value","value_typeof","setTime","nb","na","src_round","degrees","decompose_identity","translateX","translateY","rotate","skewX","scaleX","scaleY","decompose","atan","interpolateTransform","pxComma","pxParen","degParen","translate","xa","ya","xb","yb","interpolateTransformCss","parseCss","documentElement","defaultView","transform","getComputedStyle","getPropertyValue","interpolateTransformSvg","parseSvg","baseVal","consolidate","matrix","SQRT2","hsl_hsl","hue","hslLong","hcl_hcl","src_cubehelix_cubehelix","cubehelixGamma","cubehelix","cubehelixLong","piecewise_piecewise","interpolate","d3_scale_src_constant","d3_scale_src_number","continuous_unit","deinterpolateLinear","bimap","deinterpolate","reinterpolate","d0","polymap","target","clamp","continuous","piecewise","output","input","deinterpolateClamp","reinterpolateClamp","formatDecimal","toExponential","coefficient","src_exponent","formatSpecifier","specifier","FormatSpecifier","fill","sign","symbol","zero","comma","precision","prefixExponent","defaultLocale_locale","defaultLocale_format","defaultLocale_formatPrefix","formatTrim","out","i1","formatRounded","exponent","formatTypes","%","toFixed","toPrecision","toUpperCase","src_identity","prefixes","src_locale","locale","group","grouping","thousands","formatGroup","currency","decimal","numerals","formatNumerals","percent","newFormat","prefix","suffix","formatType","maybeSuffix","valuePrefix","valueSuffix","valueNegative","Infinity","formatPrefix","defaultLocale","src_tickFormat","precisionPrefix","precisionRound","precisionFixed","linearish","tickFormat","nice","linear_linear","identity_identity","src_nice","interval","x0","x1","log_deinterpolate","log_reinterpolate","pow10","powp","base","exp","logp","log10","log2","reflect","logs","pows","raise","quantile_quantile","thresholds","quantiles","quantize_quantize","threshold_threshold","interval_t0","interval_t1","newInterval","floori","offseti","date","offset","previous","millisecond_millisecond","src_millisecond","durationMinute","durationWeek","second_second","getUTCSeconds","src_second","minute_minute","src_minute","hour_hour","getTimezoneOffset","src_hour","day_day","setHours","setDate","src_day","weekday","sunday","monday","tuesday","wednesday","thursday","friday","saturday","month_month","setMonth","src_month","year_year","setFullYear","src_year","utcMinute","setUTCSeconds","getUTCMinutes","utcHour","setUTCMinutes","getUTCHours","utcDay","setUTCHours","setUTCDate","getUTCDate","src_utcDay","utcWeekday","getUTCDay","utcSunday","utcMonday","utcTuesday","utcWednesday","utcThursday","utcFriday","utcSaturday","utcMonth","setUTCMonth","getUTCMonth","getUTCFullYear","utcYear","setUTCFullYear","src_utcYear","localDate","utcDate","UTC","newYear","src_defaultLocale_locale","timeFormat","utcFormat","utcParse","pads","-","0","numberRe","percentRe","requoteRe","locale_pad","string","requote","formatRe","names","formatLookup","parseWeekdayNumberSunday","parseWeekdayNumberMonday","parseWeekNumberSunday","parseWeekNumberISO","parseWeekNumberMonday","parseFullYear","parseYear","parseZone","parseMonthNumber","parseDayOfMonth","parseDayOfYear","parseHour24","parseMinutes","parseSeconds","parseMilliseconds","parseMicroseconds","parseLiteralPercent","parseUnixTimestamp","parseUnixTimestampSeconds","formatDayOfMonth","formatHour24","formatHour12","formatDayOfYear","formatMilliseconds","formatMicroseconds","formatMonthNumber","formatMinutes","formatSeconds","formatWeekdayNumberMonday","day","formatWeekNumberSunday","formatWeekNumberISO","formatWeekdayNumberSunday","formatWeekNumberMonday","locale_formatYear","formatFullYear","formatZone","formatUTCDayOfMonth","formatUTCHour24","formatUTCHour12","formatUTCDayOfYear","formatUTCMilliseconds","getUTCMilliseconds","formatUTCMicroseconds","formatUTCMonthNumber","formatUTCMinutes","formatUTCSeconds","formatUTCWeekdayNumberMonday","dow","formatUTCWeekNumberSunday","formatUTCWeekNumberISO","formatUTCWeekdayNumberSunday","formatUTCWeekNumberMonday","formatUTCYear","formatUTCFullYear","formatUTCZone","formatLiteralPercent","formatUnixTimestamp","formatUnixTimestampSeconds","defaultLocale_defaultLocale","formatLocale","locale_dateTime","dateTime","locale_date","locale_time","time","locale_periods","periods","locale_weekdays","days","locale_shortWeekdays","shortDays","locale_months","months","locale_shortMonths","shortMonths","periodRe","periodLookup","weekdayRe","weekdayLookup","shortWeekdayRe","shortWeekdayLookup","monthRe","monthLookup","shortMonthRe","shortMonthLookup","formats","formatShortWeekday","formatWeekday","formatShortMonth","formatMonth","formatPeriod","utcFormats","formatUTCShortWeekday","formatUTCWeekday","formatUTCShortMonth","formatUTCMonth","formatUTCPeriod","parses","parseShortWeekday","parseWeekday","parseShortMonth","parseMonth","parseLocaleDateTime","parseSpecifier","parsePeriod","parseLocaleDate","parseLocaleTime","pad","newParse","newDate","week","toISOString","time_durationSecond","time_durationMinute","time_durationHour","time_durationDay","time_durationWeek","durationMonth","durationYear","time_date","time_number","calendar","year","month","hour","minute","second","millisecond","formatMillisecond","formatSecond","formatMinute","formatHour","formatDay","formatWeek","formatYear","tickIntervals","tickInterval","t0","src_time","src_colors","category10","category20b","category20","ramp","sequential","interpolator","d3_scale_chromatic_src_colors","Accent","Dark2","Paired","Pastel1","Pastel2","Set1","Set2","Set3","src_ramp","scheme","BrBG_scheme","BrBG","PRGn_scheme","PRGn","PiYG_scheme","PiYG","PuOr","RdBu","RdGy","RdYlBu","RdYlGn","Spectral","BuGn","BuPu","GnBu","OrRd","PuBuGn","PuBu","PuRd","RdPu","YlGnBu","YlGn","YlOrBr","YlOrRd","Blues_scheme","Blues","Greens","Greys","Purples","Reds","Oranges","sequential_multi_cubehelix","rainbow_warm","rainbow_cool","rainbow_c","sequential_multi_rainbow","ts","viridis_ramp","sequential_multi_viridis","viridis_magma","viridis_inferno","viridis_plasma","reserved_fields","ROW_ID","common_props","ACTION_INF","ON_LAYER_DRAW","src_array_slice","d3_axis_src_identity","axis_top","axis_right","axis_bottom","axis_left","epsilon","entering","__axis","axis_axis","orient","tickArguments","tickValues","tickTransform","tickSizeInner","tickSizeOuter","tickPadding","axis","spacing","range0","range1","axis_center","axis_number","selection","selectAll","tick","tickExit","exit","tickEnter","enter","attr","line","merge","insert","transition","getAttribute","tickSize","pi","tau","tauEpsilon","Path","_x0","_y0","_x1","_y1","path_path","moveTo","closePath","lineTo","quadraticCurveTo","y1","bezierCurveTo","x2","y2","arcTo","y0","x21","y21","x01","y01","l01_2","x20","y20","l21_2","l20_2","l21","l01","acos","t01","t21","arc","a0","a1","ccw","dx","dy","cw","da","rect","src_path","d3_shape_src_constant","constant","math_max","math_min","math_sqrt","math_epsilon","math_pi","halfPi","math_tau","asin","arcInnerRadius","innerRadius","arcOuterRadius","outerRadius","arcStartAngle","startAngle","arcEndAngle","endAngle","arcPadAngle","padAngle","cornerTangents","rc","ox","oy","x11","y11","x10","y10","x00","y00","d2","cx0","cy0","cx1","cy1","dx0","dy0","dx1","dy1","cx","cy","Linear","areaStart","_line","areaEnd","lineStart","_point","lineEnd","point","curve_linear","point_x","point_y","src_line","defined","curve","buffer","defined0","src_area","area","x0z","y0z","arealine","lineX0","lineY0","lineY1","lineX1","src_descending","d3_shape_src_identity","curveRadial","Radial","_curve","radial","d3_shape_src_array_slice","symbol_circle","draw","symbol_cross","tan30","tan30_2","diamond","kr","kx","ky","star","square","sqrt3","triangle","wye_s","wye_k","wye_a","wye","noop","that","Basis","BasisClosed","_x2","_x3","_x4","_y2","_y3","_y4","BasisOpen","Bundle","beta","_basis","_beta","_x","_y","custom","bundle","cardinal_point","_k","Cardinal","tension","cardinal","CardinalClosed","_x5","_y5","CardinalOpen","catmullRom_point","_l01_a","_l01_2a","_l12_a","_l12_2a","_l23_a","_l23_2a","CatmullRom","alpha","_alpha","x23","y23","curve_catmullRom","catmullRom","CatmullRomClosed","CatmullRomOpen","LinearClosed","monotone_sign","slope3","h0","h1","s0","s1","slope2","monotone_point","MonotoneX","MonotoneY","ReflectContext","Natural","controlPoints","_t0","px","py","Step","_t","curve_step","stepBefore","stepAfter","none","series","order_none","stackValue","order_ascending","sums","ascending_sum","cubicInOut","polyIn","polyOut","polyInOut","b1","b2","b3","b4","b5","b6","b7","b8","b9","b0","bounceOut","backIn","overshoot","backOut","backInOut","elastic_tau","elasticOut","elasticIn","amplitude","period","d3_voronoi_src_constant","elasticInOut","src_point_x","src_point_y","RedBlackTree","RedBlackNode","RedBlackRotateLeft","tree","RedBlackRotateRight","RedBlackFirst","after","grandpa","uncle","sibling","src_RedBlackTree","createEdge","edge","Diagram_edges","setEdgeEnd","Diagram_cells","halfedges","createBorderEdge","vertex","clipEdge","ax","ay","connectEdge","fm","fb","lx","ly","rx","ry","fx","fy","cellHalfedgeAngle","cell","site","va","vb","cellHalfedgeStart","cellHalfedgeEnd","firstCircle","circlePool","attachCircle","lArc","rArc","lSite","cSite","rSite","bx","by","Diagram_epsilon2","ha","hc","circle","Circle","before","circles","detachCircle","beachPool","createBeach","beach","Beach","detachBeach","beaches","removeBeach","disappearing","Diagram_epsilon","iArc","nArcs","addBeach","dxl","dxr","directrix","leftBreakPoint","rightBreakPoint","createCell","newArc","hb","rfocx","rfocy","pby2","lfocx","lfocy","plby2","hl","aby2","triangleArea","lexicographic","Diagram","sites","extent","sortCellHalfedges","clipEdges","clipCells","iCell","iHalfedge","nHalfedges","startX","startY","endX","endY","nCells","cover","dc","v00","v01","v11","v10","cells","polygons","polygon","triangles","e1","links","radius","_found","vx","vy","src_voronoi","voronoi","HTMLElement","isSimpleObject","common_utils_typeof","getUniqueId","sanitizeIP","typeObj","nonExistentKeys","checkExistence","getMax","_toConsumableArray","getMin","common_utils_getDomainFromData","getDomainFromData","domArr","dist_datamodel","firstMin","secondMin","firstMax","secondMax","symbolFns","cross","easeFns","cubic","bounce","src_linear_linear","elastic","back","poly","circleInOut","common_utils_getClosestIndexOf","getQualifiedClassName","cancelAnimationFrame","cls","defaultValue","param","objectIterator","common_utils_Voronoi","Voronoi","_classCallCheck","_voronoi","_voronoiFn","common_utils_Store","Store","hyperdis_default","_listeners","serialize","propName","propNames","callBack","instantCall","props","on","calculatedProp","intSanitizer","val","common_utils_transactor","transactor","holder","conf","_loop","_defineProperty","_len","_key","compareTo","paramsLen","prevVal","spreadParams","sanitization","typeCheck","typeExpected","preset","oldValues","generateGetterSetters","propInfo","typeChecker","common_utils_isEqual","isEqual","oldVal","newVal","arraysEqual","arr1","arr2","is","ERROR_MSG","INTERFACE_IMPL","mergeRecursive","sink","common_utils_interpolator","common_utils_numberInterpolator","numberInterpolator","common_utils_piecewiseInterpolator","piecewiseInterpolator","rgbToHsv","detectColor","col","getDataModelFromRange","dataModel","selFields","selFn","common_utils_getDataModelFromIdentifiers","getDataModelFromIdentifiers","identifiers","filteredDataModel","fieldsConfig","dataArr","filteredSchema","include","propField","idx","common_utils_registerListeners","registerListeners","listenerMap","propListenerMap","mapObj","propType","listenerFn","listener","isValidValue","getObjProp","_len2","_key2","retObj","common_utils_getSymbol","getSymbol","src_symbol","stackOrders","_stackOrders","stackOffsets","yp","yn","_stackOffsets","s2","si","sij0","s3","sk","common_utils_stack","stack","oz","kz","sz","sij","ki","src_stack","pathInterpolators","curveLinear","curveStepAfter","curveStepBefore","curveStep","curveCatmullRom","Symbols","axisLeft","axisRight","axisTop","axisBottom","pie","arcs","pa","cornerRadius","padRadius","a01","a11","a00","a10","da0","da1","ap","rp","rc0","rc1","p0","p1","oc","intersect","x3","y3","x32","y32","kc","lc","centroid","Scales","getSmallestDiff","points","xhtml","namespaces","xlink","xml","xmlns","namespace","space","local","creator","fullname","creatorFixed","ownerDocument","creatorInherit","uri","namespaceURI","selector_none","src_selector","selector","querySelector","selectorAll_empty","selectorAll","querySelectorAll","matcher","matches","matcher_element","vendorMatches","webkitMatchesSelector","msMatchesSelector","mozMatchesSelector","oMatchesSelector","src_matcher","sparse","EnterNode","datum","_next","__data__","child","keyPrefix","bindIndex","groupLength","dataLength","bindKey","nodeByKeyValue","keyValues","sort_ascending","src_window","styleValue","classArray","classList","ClassList","_node","_names","classedAdd","list","classedRemove","contains","textRemove","htmlRemove","raise_raise","nextSibling","lower","previousSibling","firstChild","constantNull","remove_remove","selection_cloneShallow","cloneNode","selection_cloneDeep","filterEvents","on_event","mouseenter","mouseleave","filterContextListener","contextListener","event","related","relatedTarget","compareDocumentPosition","event1","event0","onRemove","typename","__on","removeEventListener","capture","onAdd","wrap","addEventListener","customEvent","args","sourceEvent","dispatchEvent","CustomEvent","createEvent","initEvent","bubbles","cancelable","detail","selection_root","Selection","groups","parents","_groups","_parents","selection_selection","subgroups","subnode","subgroup","d3_selection_src_constant","enterGroup","updateGroup","_enter","_exit","groups0","groups1","m0","merges","group0","group1","compareNode","sortgroups","sortgroup","callback","nodes","getAttributeNS","attrRemoveNS","removeAttributeNS","attrRemove","removeAttribute","attrFunctionNS","attrFunction","attrConstantNS","attrConstant","priority","styleRemove","removeProperty","styleFunction","setProperty","styleConstant","propertyRemove","propertyFunction","propertyConstant","classed","classedFunction","classedTrue","classedFalse","textFunction","textConstant","html","htmlFunction","htmlConstant","deep","typenames","parseTypenames","dispatch","dispatchFunction","dispatchConstant","src_selection","src_select","nextId","Local","current","src_point","ownerSVGElement","createSVGPoint","clientX","clientY","matrixTransform","getScreenCTM","inverse","getBoundingClientRect","clientLeft","clientTop","mouse","changedTouches","src_touch","touches","identifier","touch","dispatch_noop","dispatch_dispatch","Dispatch","dispatch_get","dispatch_set","dispatch_parseTypenames","types","src_dispatch","nopropagation","stopImmediatePropagation","noevent","preventDefault","nodrag","view","__noselect","MozUserSelect","d3_drag_src_constant","DragEvent","subject","active","defaultFilter","button","defaultContainer","defaultSubject","defaultTouchable","taskHead","taskTail","src_drag","mousedownx","mousedowny","mousemoving","touchending","touchable","gestures","clickDistance2","drag","mousedowned","touchstarted","touchmoved","touchended","gesture","beforestart","mousemoved","mouseupped","yesdrag","noclick","clearTimeout","sublisteners","clickDistance","timer_frame","timeout","timer_interval","pokeDelay","clockLast","clockNow","clockSkew","clock","performance","timer_typeof","now","setFrame","clearNow","Timer","_call","_time","timer","delay","restart","wake","timerFlush","nap","sleep","poke","clearInterval","setInterval","src_timeout","elapsed","emptyOn","emptyTween","CREATED","SCHEDULED","STARTING","STARTED","RUNNING","ENDING","ENDED","transition_schedule","timing","schedules","__transition","schedule_create","self","tween","state","duration","ease","schedule","schedule_get","schedule_set","tweenValue","_id","transition_interpolate","selection_Selection","transition_id","Transition","_name","newId","selection_prototype","src_transition_transition","inherit","id0","id1","onFunction","on0","on1","sit","on_start","attrTween","attr_attrFunctionNS","value00","value10","interpolate0","value1","attr_attrFunction","attr_attrRemoveNS","attr_attrRemove","attr_attrConstantNS","attr_attrConstant","attrTweenNS","styleTween","style_styleRemove","styleRemoveEnd","style_styleFunction","style_styleConstant","text_textFunction","text_textConstant","removeFunction","tweenRemove","tween0","tween1","tweenFunction","delayFunction","delayConstant","durationFunction","durationConstant","easeConstant","defaultTiming","transition_inherit","interrupt","renderer_utils_selectElement","selectElement","element","makeElement","elemType","callbacks","keyFn","SVGElement","selectorVal","selectorType","actualSelector","enterSel","mergeSel","exitSel","_len3","_key3","applyStyle","setElementAttrs","attrs","renderer_utils_setAttrs","setAttrs","renderer_utils_setStyles","setStyles","styles","renderer_utils_createElements","createElements","sel","renderer_utils_getClientPoint","getClientPoint","pos","clientPoint","renderer_utils_getEvent","getEvent","renderer_utils_getD3Drag","getD3Drag","renderer_utils_getSmartComputedStyle","getSmartComputedStyle","css","textEl","mandatoryStyle","fill-opacity","renderer_utils_typeof","computedStyle","styleForSmartLabel","hasTouch","DataSystem_selection","selection_classCallCheck","_data","_idMap","_mode","_enterdata","_exitdata","_this","newData","idGetter","_this2","_idGetter","tempMap","purgedIds","purged","temp","_this3","item","_this4","_this5","_this6","DataObject","data_object_classCallCheck","events","EVENT_LIST","composition","event_list","lifecycle_manager_resolver","resolveFn","notification","hasOwn","src_lifecycle_manager","LifeCycleManager","lifecycle_manager_classCallCheck","_eventList","_promises","_notifiers","_lifeCycles","_unreleasedLifeCycles","_boot","acc","_preparePromises","eventName","Promise","_makeNotifierPromise","formalName","client","_releasePromisesFromCache","_notify","stage","_resolvePromise","promise","retrieve","_callLifeCycleCallback","_cachePromise","_resetTargetPromise","lifeCycles","DRAG","HOVER","SELECTIONDRAG","CLICK","LONGTOUCH","TOUCHDRAG","ALL_ACTIONS","SELECTION_NEW_ENTRY","SELECTION_NEW_EXIT","SELECTION_NULL","SELECTION_OLD_ENTRY","SELECTION_OLD_EXIT","selection_set","SelectionSet","completeSet","_volatile","selection_set_classCallCheck","_completeSetCount","_lockedSelection","_resetted","ids","entrySet","exitSet","lockedSel","addSet","removeSet","updateSet","changeSideEffectAvailability","toEnable","sideEffects","change","enable","disable","getMergedSet","helper_toConsumableArray","conditionsMap","newEntry","oldEntry","mergedEnter","newExit","oldExit","mergedExit","complete","getSetInfo","selectionSet","propagationData","resetted","getModelFromSet","condition","src_firebolt","Firebolt","actions","behaviourEffectMap","firebolt_classCallCheck","_sideEffectDefinitions","_sideEffects","_propagationInf","_actions","behavioural","physical","_selectionSet","_volatileSelectionSet","_propagationFields","_sourceSideEffects","selectionBox","_propagationBehaviourMap","_sourceBehaviours","_actionBehaviourMap","_config","_behaviourEffectMap","_entryExitSet","_actionHistory","_queuedSideEffects","_mappedActions","mapSideEffects","registerBehaviouralActions","registerSideEffects","registerPhysicalBehaviouralMap","physicalBehaviouralMap","registerPhysicalActions","sideEffectConf","behEffectMap","preventDefaultActions","effectNames","effects","firebolt_toConsumableArray","behaviours","initializeBehaviouralActions","dispatchableBehaviours","Action","prepareSelectionSets","sideEffectStore","actionHistory","queuedSideEffects","sideEffect","combinedSet","unionSets","behaviour","entryExitSet","existingModel","helper_unionSets","effect","firebolt_typeof","sideEffectInstance","isEnabled","mutates","dispatchSideEffect","propagationInfo","propagate","getSideEffects","propagationSelectionSet","getPropagationSelectionSet","shouldApplySideEffects","sourceSelectionSet","applicableSideEffects","getApplicableSideEffects","applySideEffects","physicalAction","actionBehaviourMap","behaviourMap","unsubscribe","onDataModelPropagation","propValue","dispatchBehaviour","uniqueIds","behaviouralActions","volatileSelectionSet","sideEffectDefinitions","initializeSideEffects","sideEffectsMap","SideEffect","helper_initializeSideEffects","initedActions","initializePhysicalActions","physicalActions","initedPhysicalActions","mappedActions","getDefaultTargetContainer","keyName","bindActionWithBehaviour","targets","behaviourList","mount","propagationInf","xFields","yFields","xMeasures","yMeasures","filterPropagationModel","propModel","measures","_propModel$getData","filteredModel","fieldMap","row","common_utils_filterPropagationModel","getFullData","propagationSource","applicableSelectionSets","generic","GenericBehaviour","firebolt","generic_classCallCheck","_enabled","selectionSets","getSelectionSets","_firebolt$getAddSetFr","getAddSetFromCriteria","getPropagationInf","setSelectionSet","getEntryExitSet","_selectionSet$getSets","getSets","setConfig","isSourceFieldPresent","getSourceFields","getSchema","behavioural_volatile","reset","existingAddSet","updateExit","getCompleteSet","BRUSH","HIGHLIGHT","TOOLTIP","FILTER","SELECT","highlight","brush","behavioural_filter","updateEntry","mergedExitSet","completeSetCount","behavioural_select","drag_action_config","getDragActionConfig","sourceInfo","axes","xAxis","yAxis","axisFields","xField","getMembers","yField","xFieldType","yFieldType","dimensions","stPos","startPos","endPos","dragDim","isXDimension","isYDimension","xRange","yRange","selectedDomains","rangeObj","xdom","ydom","snap","getNearestRange","drag_event_attachDragEvent","attachDragEvent","targetEl","drawingInf","d3Drag","touchStart","getDrawingContext","getSourceInfo","beh","dragEnd","physical_hover","hover","interaction","tooltip","svgContainer","nearestPoint","getNearestPoint","getAllPoints","showInPosition","helpers_generatePayloadFromEvent","generatePayloadFromEvent","physical_click","click","physical_defineProperty","_physicalActions","longtouch","touchEnd","touchdrag","side_effects_generic","GenericSideEffect","side_effects_generic_classCallCheck","_strategy","_strategies","defaultConfig","surrogate","interactionType","layers","layer","interactive","applyInteractionStyle","spawnable","_drawingContext","helper_changeVisibility","changeVisibility","sideEffectGroup","visible","defClassName","classPrefix","selection_box","boxConf","box","drawingContext","mountPoint","unitWidth","unitHeight","selectionGroupClassName","hide","sourceInf","_getBoxDimensionsFrom","getBoxDimensionsFromPayload","direction","xDim","yDim","xLinear","yLinear","xCriteria","yCriteria","bandScale","x1Val","x2Val","x1DomainIndex","x2DomainIndex","_sort","_sort2","helper_slicedToArray","getScaleValue","getUnitWidth","y1Val","y2Val","y1DomainIndex","y2DomainIndex","_sort3","_sort4","_xDim","_yDim","dimension","show","selectionBoxDrag","onDrag","selection_box_drag_selectionBoxDrag","boxClassName","INITIAL_STYLE","default_config_defaultConfig","connectorClassName","margin","content","iconContainerSize","iconScale","iconShape","iconColor","rowMargin","separator","parentClassName","arrow","disabled","helper_getArrowPos","getArrowPos","dim","measurement","arrowPos","boxHeight","boxWidth","arrowWidth","plotBottom","boxBottom","plotRight","boxRight","helper_placeArrow","placeArrow","tooltipArrow","_tooltipArrow","tooltipBackground","_tooltipBackground","arrowConf","_arrowOrientation","timeFormats","timeDurations","strategy_defaultTooltipFormatters","defaultTooltipFormatters","_formatters","strategy_defineProperty","formatters","nearestInterval","getNearestInterval","strategy_getNearestInterval","strategy_buildTooltipData","buildTooltipData","fieldValues","dataObj","fieldspace","dimensionMeasureMap","detailFields","containsDetailField","dataLen","getRowContent","formattedValue","measureIndex","formatterFn","uniqueVals","strategy_toConsumableArray","colorAxis","shapeAxis","shape","sizeAxis","isRetinalField","associatedMeasures","icon","getColor","getShape","getSize","measure","margin-left","displayFormat","getTabularData","timeDiffs","rows","fieldObj","strategy_getTabularData","allMeasures","strategy_strategy","DEFAULT_STRATEGY","src_content","Content","content_classCallCheck","_model","_formatter","strategy","ctx","_mount","table","tbody","margin-right","el","src_tooltip","Tooltip","htmlContainer","tooltip_classCallCheck","connectorContainer","tooltipConf","contentClass","_tooltipContainer","_contentContainer","_contents","_tooltipConnectorContainer","qualifiedClassName","addClass","defConf","contentConfig","reorderContainers","contentConf","render","_target","repositionArrow","arrowDisabled","arrowOrient","outsidePlot","connector","_offset","orientation","_extent","arrowSize","topSpace","dimX","rightSpace","leftSpace","positionTop","positionRight","positionLeft","positionHorizontal","positionVertical","_position","_arrowPos","strategies_strategies","showSelectedItems","dm","aggregatedModel","fieldsConf","measureNames","strategies_toConsumableArray","side_effects_tooltip","side_effects_tooltip_classCallCheck","tooltip_possibleConstructorReturn","_tooltips","totalHeight","totalWidth","isEmpty","tooltips","boundBox","dataModels","fragmented","showVertically","tooltipPos","boxes","tooltip_toConsumableArray","targetFields","sourceFields","indices","plotDimensions","getPlotPointsFromIdentifiers","plotDim","dataTransform","layoutContainer","layoutBoundBox","unitBoundBox","tooltipInst","timeDiffsByField","positionRelativeTo","tooltipBoundBox","getContents","spaceOutBoxes","spaceOutIfOverlap","firstBox","secondBox","opposite","bottom","crossline","bandWidth","bandClass","lineClass","elemData","fieldIndex","axisIndex","fieldInst","xOffset","plotWidth","crossline_toConsumableArray","getPlotSpan","getPlotPadding","startPx","endPx","dataPoint","parentGroup","CLASSPREFIX","strategy_strategies","fade","fadeFn","focus","plot_highlighter","PlotHighlighter","plot_highlighter_classCallCheck","plot_highlighter_possibleConstructorReturn","side_effects_filter","entryModel","clearCaching","resetData","enableCaching","side_effects_anchors","AnchorEffect","anchors_classCallCheck","anchors_possibleConstructorReturn","_layers","addAnchorLayers","shouldDrawAnchors","encodingFieldsInf","layerObj","instances","addLayer","alias","mark","encoding","colorField","sizeField","defaultSizeValue","getTransitionConfig","calculateDomain","linkedLayer","elems","_linkedLayer$getTrans","getTransformedDataFromIdentifiers","_linkedLayer$getTrans2","anchors_slicedToArray","transformedData","transformedDataModel","datamodel_default","persistent_anchors","brush_anchors","behaviour_effect_map_behaviourEffectMap","behaviour_effect_map_defineProperty","STACK","ANGLE","RADIUS","SIZE","COLOR","SHAPE","ENCODING","X0","Y0","area_default_config_defaultConfig","nearestPointThreshold","strokeOpacity","connectNullData","simple_layer","DATA_UPDATED","axis_orientation_BOTTOM","axis_orientation_TOP","axis_orientation_LEFT","axis_orientation_RIGHT","axisOrientationMap","axis_orientation_defineProperty","_axisOrientationMap","LINEAR","BAND","TIME","scale_type_COLOR","ORDINAL","QUANTIZE","QUANTILE","LOG","POW","scale_type_IDENTITY","SEQUENTIAL","THRESHOLD","CONTINOUS","constants_SEQUENTIAL","constants_ORDINAL","constants_LINEAR","constants_QUANTIZE","HIDDEN","scaleLinear","scales_namespaceObject","scaleThreshold","scaleLog","scalePow","scaleIdentity","scaleOrdinal","scaleSequential","scaleQuantize","scaleQuantile","scaleBand","scaleTime","scaleMap","scale_creator_defineProperty","_scaleMap","scale_creator_createScale","scaleFactory","cartesian_axis_default_config_defaultConfig","axisName","axisNamePadding","src_enums_constants_CLASSPREFIX","fixedBaseline","labels","rotation","smartTicks","numberOfTicks","showAxisName","showInnerTicks","showOuterTicks","yOffset","axis_renderer_rotateAxis","rotateAxis","instance","tickText","labelManager","getTickSize","yShift","xShift","tickFormatter","tickLabelDim","quadrant","rotationNormalizer","angleToRadian","angle","axis_renderer_changeTickOrientation","changeTickOrientation","selectContainer","axisInstance","_smartTicks","isSmartTicks","axis_renderer_setFixedBaseline","setFixedBaseline","axis_renderer_setAxisNamePos","setAxisNamePos","textNode","axisNameHeight","labelOffset","availableSpace","getTickLabelInfo","largestLabel","labelProps","smartTick","axisTickLabels","allLabelLengths","_context$config","labelFunc","_tickLabelStyle","originalLabel","formattedLabel","largestLabelDim","helper_setOffset","setOffset","logicalSpace","helper_adjustRange","adjustRange","getAxisOffset","timeDiff","avWidth","bars","registerChangeListeners","_domainLock","getHorizontalAxisSpace","axisDimensions","axisLabelDim","axisDimHeight","tickDimHeight","tickDimWidth","minTickDiff","getMinTickDifference","cartesian_axis_helper_toConsumableArray","_minTickDistance","getVerticalAxisSpace","_ref2","PROPS","_rotationLock","createAxis","commit","simple_axis","SimpleAxis","simple_axis_classCallCheck","_dependencies","_range","_domain","_axisDimensions","defCon","simpleConfig","bodyElem","_axisNameStyle","_scale","createScale","_axis","setTickConfig","axisClass","getTickFormatter","labelWidth","domainVal","computeAxisDimensions","_context$config2","_getTickLabelInfo","labelHeight","setRotationConfig","calculateContinousSpace","getAxisDimensions","axisDimWidth","_getHorizontalAxisSpa2","_getVerticalAxisSpace2","helper_calculateContinousSpace","currentDomain","cachedDomain","updateDomainBounds","registerEvent","renderAxis","setTickValues","axisNameSpace","axisNameWidth","unsubscribeAll","interpolators_linear","interpolators_log","interpolators_pow","interpolatorMap","continous_axis_defineProperty","_interpolatorMap","continous_axis","ContinousAxis","continous_axis_classCallCheck","continous_axis_possibleConstructorReturn","InterpolatorCls","_interpolator","isOffset","_config3","labelSpace","axisHeight","getLogicalSpace","axisWidth","getTickValues","_config5","getNumberOfTicks","labelDim","tickLength","numberOfValues","_config6","_axisDimensions$large","band_axis","_config2","calculateBandSpace","largestDimHeight","largestDimWidth","_getHorizontalAxisSpa","_getVerticalAxisSpace","helper_calculateBandSpace","availSpace","smartWidth","time_axis","TimeAxis","time_axis_classCallCheck","time_axis_possibleConstructorReturn","_minDiff","time_axis_get","_getAxisDimensions","x11Colors","Pink","LightPink","HotPink","DeepPink","PaleVioletRed","MediumVioletRed","LightSalmon","Salmon","DarkSalmon","LightCoral","IndianRed","Crimson","FireBrick","DarkRed","Red","OrangeRed","Tomato","Coral","DarkOrange","Orange","Gold","Yellow","LightYellow","LemonChiffon","LightGoldenrodYellow","PapayaWhip","Moccasin","PeachPuff","PaleGoldenrod","Khaki","DarkKhaki","Cornsilk","BlanchedAlmond","Bisque","NavajoWhite","Wheat","BurlyWood","Tan","RosyBrown","SandyBrown","Goldenrod","DarkGoldenrod","Peru","Chocolate","SaddleBrown","Sienna","Brown","Maroon","DarkOliveGreen","Olive","OliveDrab","YellowGreen","LimeGreen","Lime","LawnGreen","Chartreuse","GreenYellow","SpringGreen","MediumSpringGreen","LightGreen","PaleGreen","DarkSeaGreen","MediumSeaGreen","SeaGreen","ForestGreen","Green","DarkGreen","MediumAquamarine","Aqua","Cyan","LightCyan","PaleTurquoise","Aquamarine","Turquoise","MediumTurquoise","DarkTurquoise","LightSeaGreen","CadetBlue","DarkCyan","Teal","LightSteelBlue","PowderBlue","LightBlue","SkyBlue","LightSkyBlue","DeepSkyBlue","DodgerBlue","CornflowerBlue","SteelBlue","RoyalBlue","Blue","MediumBlue","DarkBlue","Navy","MidnightBlue","Lavender","Thistle","Plum","Violet","Orchid","Fuchsia","Magenta","MediumOrchid","MediumPurple","BlueViolet","DarkViolet","DarkOrchid","DarkMagenta","Purple","Indigo","DarkSlateBlue","SlateBlue","MediumSlateBlue","White","Snow","Honeydew","MintCream","Azure","AliceBlue","GhostWhite","WhiteSmoke","Seashell","Beige","OldLace","FloralWhite","Ivory","AntiqueWhite","Linen","LavenderBlush","MistyRose","Gainsboro","LightGray","Silver","DarkGrey","Grey","DimGrey","LightSlateGrey","SlateGrey","DarkSlateGrey","Black","palette","DEFAULT_GRADIENT_COLOR","DEFAULT_CONFIG","props_getHslString","getHslString","hslArr","convertToXllString","baseString","props_getActualHslColor","getActualHslColor","paletteColor","hexToHsv","props_toConsumableArray","props_PROPS","oldConfig","newConfig","uniqueValues","color_strategy_getStops","getStops","newStops","color_strategy_toConsumableArray","color_strategy_rangeStops","rangeStops","newStopsLength","newRange","hslInterpolator","common_utils_hslInterpolator","indexedDomain","scaleDomain","indexedDomainMeasure","normalDomain","color_strategy_steppedDomain","steppedDomain","_getStops","color_strategy_continousSteppedDomain","continousSteppedDomain","_getStops2","uniqueRange","domainValue","indexedRange","normalRange","strategyGetter","domainType","rangeType","schemeType","strategies","color_strategy_defineProperty","domainRange","color_strategy_strategies","color_axis","ColorAxis","color_axis_classCallCheck","_domainType","_rangeType","_schemeType","getSchemeType","_colorStrategy","setColorStrategy","updateDomain","colorStrategy","getScheme","color_schemes_namespaceObject","hslColorArray","getRawColor","color_axis_toConsumableArray","scaleInfo","domainRangeFn","transformationArr","newH","newS","newL","newA","defaults_DEFAULT_CONFIG","size_strategy_strategies","size_strategy_defineProperty","pieceWiseRange","numVal","size_strategy_toConsumableArray","intervals","newIntervals","discreteRange","size_axis_props_PROPS","size_axis","SizeAxis","size_axis_classCallCheck","_sizeStrategy","setStrategy","size_strategy_strategyGetter","domainInfo","domainFn","shape_axis_defaults_DEFAULT_CONFIG","generator","shape_axis_props_PROPS","shape_axis","ShapeAxis","shape_axis_classCallCheck","_generatedShapes","shapeType","shapeGenerator","generatorFn","generatedShapes","DATA_TYPES","group_transform","data_type_scale_map_defineProperty","dataTypeScaleMap","_dataTypeScaleMap","groupByIndices","nestCollection","nestFn","common_utils_nestCollection","transformMap","transform_factory_defineProperty","identityTransform","_transformMap","uniqueField","valueField","normalizedData","normalizeData","groupedData","uniqueFieldIndex","valueFieldIndex","seriesKeyIndex","seriesKeys","fieldNames","tuples","rowObj","_tuple","seriesKey","newArr","stack_transform_normalizeData","orderBy","orderIndex","groupByIndex","localeCompare","stackData","seriesData","transform_factory","transformFactory","helpers_BAND","scale_type_namespaceObject","getLayerColor","colorEncoding","colorFieldIndex","rawColor","transfromColor","styleType","intensity","stateColor","originalColor","fillColorInfo","transformColor","helpers_applyInteractionStyle","interactionStyles","elements","getPlotElementsFromSet","_d$meta","colorTransform","_ref3","_ref4","helpers_slicedToArray","helpers_getAxesScales","getAxesScales","_map","_map2","_map3","_map4","xScale","yScale","getIndividualClassName","individualClassName","classNameStr","attachDataToVoronoi","_ref5","helpers_toConsumableArray","helpers_updateStyle","updateStyle","positionPoints","positioner","encodingTransform","helpers_getPlotMeasurement","getPlotMeasurement","dimensionalValues","fieldInfo","transformType","_bandScale","span","groupSpan","offsetValues","actualGroupWidth","dataProps","innerPadding","getGroupSpan","isAxisBandScale","axisPadding","groupPadding","listener_map_listenerMap","fetch","dataModelValue","configValue","encodingValue","getEncodingFieldInf","_map5","_map6","x0Field","y0Field","shapeField","_map7","_map8","_map9","_map10","xFieldSubType","yFieldSubType","_map11","_map12","xFieldIndex","yFieldIndex","x0FieldIndex","y0FieldIndex","helpers_getEncodingFieldInf","getValidTransform","layerConfig","encodingFieldInf","groupByField","groupByFieldMeasure","helpers_getValidTransform","getTransformedData","transformedDataValue","getNormalizedData","normalizedDataValue","calculateDomainFromData","dataUpdated","throwback","defaultOptions","default_options_defineProperty","newConf","defaultPolicy","_defaultOptions","_cacheEnabled","_cachedData","base_layer","BaseLayer","base_layer_classCallCheck","base_layer_possibleConstructorReturn","base_layer_defineProperty","DATA","_points","_measurement","_store","_encodingFieldsInf","_encodingTransform","_alias","transformData","helpers_transformData","domains","yEnc","xEnc","helpers_calculateDomainFromData","encodingType","transformedDataArr","fieldsLen","pointObj","tuple","helpers_getNormalizedData","_transformType","pointMap","_pointMap","_dataProps","base_layer_slicedToArray","xMeasure","yMeasure","_identifiers$","_identifiers$2","xMeasureIndex","yMeasureIndex","getAllAttrs","filteredPoints","base_layer_toConsumableArray","sizeVal","_identifiers$getData","identifierData","identifierSchema","_encodingFieldsInf2","enc","tupleArr","transformedVal","userConf","renderer_line","renderer_drawLine","drawLine","curveInterpolatorFn","linepath","line_default_config_defaultConfig","line_line","LineLayer","line_classCallCheck","line_possibleConstructorReturn","isXDim","isYDim","xPx","yPx","_getLayerColor","stroke","rowId","cachePoint","seriesClassName","containerSelection","animateGroup","groupTransition","groupAnimateStyle","helpers_animateGroup","stroke-opacity","getPathStyle","translatePoints","colorValFn","colorVal","getDrawFn","searchRadius","_point$data$data","getIdentifiersFromData","layerId","renderer_area","renderer","drawArea","easeEffect","renderer_slicedToArray","enterAreaPath","updateAreaPath","selectionEnter","area_area","area_get","_getAxesScales","classNameFn","y0Px","arc_default_config_defaultConfig","minOuterRadius","stroke-width","stroke-linejoin","innerRadiusFixer","states","enums_constants_CLASSPREFIX","fadeout","selected","arc_pie","arc_arc","layers_arc_arc","ArcLayer","arc_classCallCheck","arc_possibleConstructorReturn","_prevPieData","pieData","pieIndex","prevData","_getFieldIndices","getFieldIndices","arc_helper_slicedToArray","angleField","radiusField","angleIndex","sizeIndex","radiusIndex","colorIndex","arc_helper_getFieldIndices","dataVal","uid","outerRadiusValue","angleVal","_previousInfo","getPreviousPoint","currIndex","prevArc","nextArc","_dataPoint$datum","chartHeight","chartWidth","qualClassName","getRadiusRange","defaultRadius","radiusDomain","rangeValueGetter","getRangeValue","domainMultiplier","sizeAxisDomain","sizeMultiplier","_chartWidth","_chartHeight","consecutiveExits","exitCounter","arcFn","tweenPie","arc_helper_tweenPie","individualClass","tweenExit","exitArr","oldExitCounter","tweenExitPie","consecutiveExitArr","gElem","arc_helper_tweenExitPie","pieSlices","pieSliceInf","tData","text_renderer","drawText","selectionMerge","backgroundVal","textanchor","textStyle","background","backgroundPadding","_smartLabel$getOriSiz","backgroundEl","text_default_config_defaultConfig","text_text","textEncoding","textField","textFormatter","backgroundEncoding","backgroundValue","textFieldIndex","textValue","text_slicedToArray","text-anchor","point_renderer","drawSymbols","mergedGroups","symbolGroups","symbolEnter","createShape","groupElement","then","res","Element","newShape","nodeName","src","href","shapeElement","pathStr","checkPath","renderer_createShape","exitGroups","point_default_config_defaultConfig","defColorStyle","fillOpacity","shapes","sizes","point_point","PointLayer","point_classCallCheck","point_possibleConstructorReturn","sizeEncoding","shapeEncoding","sizeValue","shapeFieldIndex","sizeFieldIndex","_config$offset","offsetX","offsetY","point_slicedToArray","maxSize","generateDataPoints","point_toConsumableArray","drawFn","_maxSize","_getPlotMeasurement","_getPlotMeasurement2","widthMetrics","heightMetrics","offsetXValues","offsetYValues","measurementConf","getMeasurementConfig","widthSpan","heightSpan","distanceLimit","renderer_drawRects","drawRects","barEnterFn","transitionBars","selTransition","renderer_transitionBars","bar_default_config_defaultConfig","bar_helper_resolveDimByField","resolveDimByField","axesInfo","spaceType","sizeConfig","enterSpace","minVal","maxVal","scales","diffPx","zeroPos","axisType","axisType0","resolveDimensions","_resolveDimByField","enterWidth","enterX","xPos","_resolveDimByField2","enterHeight","bar_scaleBand","bar","BarLayer","bar_classCallCheck","bar_possibleConstructorReturn","_plotPadding","_plotSpan","bar_get","getTranslatedPoints","_context$encodingFiel","bar_helper_getTranslatedPoints","normalizedDataArr","clipElement","clipPathElement","renderer_utils_clipElement","bar_slicedToArray","barWidthMetrics","barHeightMetrics","barWidthOffsets","barHeightOffsets","barWidth","barWidthOffset","barHeight","barHeightOffset","uniqueFieldType","filterData","pointFound","bar_toConsumableArray","p2","tick_default_config_defaultConfig","tick_renderer","ticksEnter","tick_tick","_config$span","xSpan","ySpan","x0Px","sanitizeEncoding","layer_factory","compositeLayers","factoryObj","setLayerRegistry","reg","_layerRegistry","getSerializedConf","layerDef","serializedDefs","defs","unitLayerDef","sDef","parseLayerDefinition","layerType","strs","layer_factory_toConsumableArray","layer_factory_parseLayerDefinition","getLayerInstance","layerRegistry","composeLayers","layerDefs","sanitizeLayerConfig","DEFAULT_LAYERS","defaults_defineProperty","_DEFAULT_LAYERS","ROWS","COLUMNS","COL","ROW","enums_constants_COLOR","enums_constants_SHAPE","enums_constants_SIZE","constants_LEFT","constants_RIGHT","CELL","X_AXES","Y_AXES","ENTRY_CELLS","EXIT_CELLS","constants_RADIUS","constants_ANGLE","PRIMARY","SECONDARY","local_options","local_options_defineProperty","_CONFIG$ROWS$COLUMNS$","simple_group","variable_variable","composed_vars","ComposedVars","composed_vars_classCallCheck","texts","composed_vars_possibleConstructorReturn","vars","_vars","member","simple_var","SimpleVariable","simple_var_classCallCheck","simple_var_possibleConstructorReturn","oneVar","_oneVar","dtFormat","fieldDef","varInst","field_sanitizer_convertToVar","convertToVar","datamodel","field_sanitizer_transformFields","transformFields","normalizedFields","normalizeFields","norFields","orderFields","fieldArray","dimensionArr","measureArr","temporalArr","categoricalArr","fieldList","numOfMeasures","allDimensions","field_sanitizer_toConsumableArray","temporal","categorical","field_sanitizer_orderFields","field_sanitizer_slicedToArray","rowsInfo","columnsInfo","rowDimensions","rowMeasures","rowTemporalFields","rowCategoricalFields","columnDimensions","columnMeasures","columnTemporalFields","columnCategoricalFields","visual_encoder","_fieldInfo","_axisFrom","_headerFrom","__headerFrom","axisFrom","_getHeaderAxisFrom","group_utils_getHeaderAxisFrom","_getHeaderAxisFrom2","visual_encoder_slicedToArray","rowHeader","rowAxis","_getHeaderAxisFrom3","_getHeaderAxisFrom4","colHeader","colAxis","column","headerFrom","scaleMaps","data_type_scale_map_dataTypeScaleMap","encoder_helper_createSimpleAxis","createSimpleAxis","axisConfig","axesCreators","Cls","encoder_helper_generateAxisFromMap","generateAxisFromMap","groupAxes","axisKey","currentAxes","cacheMaps","getAxisKey","getAxisConfig","axisInfo","axisOrientation","userAxisConfig","axis_orientation_namespaceObject","LEFT","RIGHT","TOP","BOTTOM","encoder_helper_getAxisConfig","_iteratorNormalCompletion","_didIteratorError","_iteratorError","_step","_iterator","encoder_helper_slicedToArray","err","getIndex","arrIndex","cartesian_encoder","geomCellAxes","projections","rowFields","columnFields","rowIndex","columnIndex","xAxes","yAxes","facets","counter","primaryFacets","secondaryFacets","primaryFields","secondaryFields","primaryLen","secondaryLen","projArr","primaryField","secondaryField","facet","existIndex","axisFromIndex","cartesian_encoder_get","CartesianEncoder","groupedModel","encodingObj","retriveDomainFromData","layerArray","serializedLayers","userLayerConfig","colField","colFieldName","rowField","configs","rowFieldName","rowFieldType","getDefaultMark","colFieldType","encoder_helper_getDefaultMark","defConfigs","layerConfigs","getLayerConfFromFields","colFields","encodingArr","encoder_helper_toConsumableArray","colFieldExist","rowFieldExist","layerConf","mergedLayerConf","serializedLayerConfig","cartesian_encoder_toConsumableArray","polar_encoder","pieAxes","sanitizedRows","sanitizedColumns","polar_encoder_get","sanitizedFields","typeIndex","fieldSet","polar_encoder_toConsumableArray","facetFields","parentModel","layerEncoding","encType","measureField","polar_encoder_defineProperty","allFields","retinal_encoder","newAxes","createRetinalAxis","fieldProps","group_utils_getAxisType","encoder_helper_createRetinalAxis","encodingConfigs","group_utils_initStore","initStore","group_utils_defineProperty","group_utils_isDistributionEqual","isDistributionEqual","group_utils_toConsumableArray","rowType","initializeCacheMaps","cellMap","xAxesMap","yAxesMap","entryCellMap","exitCellMap","scaleType","group_utils_headerCreator","headerCreator","fieldHeaders","TextCell","getHeaderText","headers","rowLength","header","getAxisType","getHeaderAxisFrom","userAxisFromConfig","_fields","group_utils_slicedToArray","firstField","secondField","firstFieldType","secondFieldType","setFacetsAndProjections","encoder","_encoder$simpleEncode","simpleEncoder","getFacetsAndProjections","group_utils_createSelection","createSelection","appendObj","idFn","dataSelect","mergedSelection","group_utils_getBorders","getBorders","matrices","showRowBorders","showColBorders","showValueBorders","valueMatrix","_rows","leftRows","rightRows","_columns","topColumns","bottomColumns","_encoder$fieldInfo","allDimensionLength","allMeasuresLength","allTemporalFieldsLength","getRowBorders","borders","getColumnsBorders","getValueBorders","borderTypeRow","borderTypeCol","group_utils_getValueBorders","action_behaviour_map_defineProperty","actions_namespaceObject","behaviours_namespaceObject","reactive_props_CONFIG","reactive_props_DATA","reactive_props_AXES","LAYERDEFS","reactive_props_WIDTH","reactive_props_HEIGHT","reactive_props_MOUNT","primaryXAxisUpdated","primaryYAxisUpdated","secondaryXAxisUpdated","secondaryYAxisUpdated","reactive_props_TRANSFORM","DATADOMAIN","LAYERSCREATED","FIELDS","TIMEDIFFS","LAYERAXISINDEX","helper_getLayerFromDef","getLayerFromDef","existingLayer","_layerDeps","instanceArr","resolveEncodingTransform","layerInst","resolvable","depArr","resolved","helper_createLayers","createLayers","layerDefinitions","layersMap","_layersMap","markSet","components","layerIndex","layersArr","_layersArr","markId","defArr","instanceValues","src_helper_toConsumableArray","layerdeps","getDependencyOrder","graph","dependencyOrder","visited","visit","helper_attachAxisToLayers","attachAxisToLayers","layerAxisIndex","axesObj","axisInf","helper_getLayerAxisIndex","getLayerAxisIndex","_layer$config","helper_unionDomainFromLayers","unionDomainFromLayers","getDataDomain","domainValues","layerDomain","fieldDomain","fieldStr","unionDomain","dom","common_utils_unionDomain","getLayersBy","searchBy","removeLayersBy","inst","grid_lines_LINEAR","grid_lines_getGridLayerDefinitions","getGridLayerDefinitions","getDefaultVisibilty","getLayerDefinition","_definition","_encoding","gridLines","gridBands","gridLineColor","zeroLineColor","gridBandColor","isLinearScale","grid_lines_defineProperty","isNegativeDomain","grid_lines_renderGridLineLayers","renderGridLineLayers","createGridLineLayer","vuConf","_gridbands","_gridlines","atomicDef","sConf","grid_lines_createGridLineLayer","getGridLayerData","gridData","jsonData","_jsonData$push","grid_lines_getGridLayerData","entry","_entry","grid_lines_slicedToArray","parentGroupClass","src_default_config_defaultConfig","trackerClassName","arcLayerClassName","sideEffectClassName","src_local_options","src_local_options_defineProperty","_CONFIG$LAYERDEFS$AXE","prevAxes","cachedData","local_options_toConsumableArray","oldData","axisMap","1","axisProps","src_listener_map_listenerMap","listener_map_slicedToArray","reactive_props_namespaceObject","isReverse","layerDefsValue","fieldsVal","_layerAxisIndex","_lifeCycleManager","notify","_timeDiffsByField","layersCreated","dataModelVal","layerAxisIndexVal","axesVal","transformDataModels","transformVal","_transformedDataModels","attachDataToLayers","transformedDataModels","dataSource","_dimensionMeasureMap","getDimensionMeasureMap","retinalEncodingsAndMeasures","_layer$encodingFields","_retinalEncodingsAndM","helper_getDimensionMeasureMap","retinalFields","dataDomain","updateAxisDomain","src_props_PROPS","props_defineProperty","_PROPS","dispatchQueuedSideEffects","firebolt_helper_toConsumableArray","helper_registerListeners","registerImmediateListener","originalData","createSelectionSet","attachPropagationListener","registerChangeListener","firebolt_helper_slicedToArray","mapActionsAndBehaviour","clearActionHistory","payloadGenerator","selectionDataModel","propPayload","getRangeFromData","propCriteria","isDimension","payload_generator_toConsumableArray","payload_generator_getRangeFromData","__default","data_propagator_propagateValues","propagateValues","propagationFieldInf","propagationFields","sideEfffects","mergedModel","sourceUnit","sourceCanvas","parentAlias","propagationBehaviour","propFields","facetByFields","getModelWithFacetData","schema1","data1","schema2","data2","data_propagator_toConsumableArray","data_propagator_getModelWithFacetData","groupId","behaviourInstance","propagationConf","sourceBehaviour","enabled","propConf","actionInf","propInf","visual_unit_src_firebolt","UnitFireBolt","src_firebolt_classCallCheck","firebolt_possibleConstructorReturn","unitId","aliasName","propagationSourceCanvas","sourceUnitId","sourceSideEffects","sideEffectInstances","actionOnSource","mappedEffects","sideEffectChecker","enabledFn","payloadFn","sourceIdentifierFields","sourceBehaviours","firebolt_get","visual_unit","VisualUnit","registry","visual_unit_classCallCheck","onlayerdraw","_renderedResolve","_renderedPromise","lifeCycleManager","visual_unit_defineProperty","behavioural_namespaceObject","side_effects_namespaceObject","_firebolt","lock","unlock","_rootSvg","class","renderLayers","orderedLayers","layerParentGroup","helper_renderLayers","_sideEffectGroup","createSideEffectGroup","helper_createSideEffectGroup","rootSvg","layerName","getLayerByName","serializedDef","visual_unit_toConsumableArray","lyr","axisConf","alignZeroLine","adjustedDomain","getAdjustedDomain","y1ratio","y2ratio","allSameSign","updateDomainCache","dimValue","getNearestDimensionalValue","entryVal","helper_getNearestDimensionalValue","pointInf","getMarkInfFromLayers","markInf","parsedIdentifiers","transposeArray","getPointsFromIdentifiers","_parentContainer","getFieldNames","fields1","matrix_model_toConsumableArray","createSelectedDataModel","matrix_model_uniqueKeyGenerator","uniqueKeyGenerator","keyArray","newDm","nextDepthUniqueValues","projectRows","allColumnProjections","rowProjections","optionalProjections","projectFields","_getFieldNames","_getFieldNames2","matrix_model_slicedToArray","projFieldNames","colProjFieldNames","pushToMatrix","_matrix$rowIndex","facetInfo","colProjections","rowProj","projIdx","_getFieldNames3","_getFieldNames4","rowProjFieldNames","projectedDm","cell_creator_createValueCells","createValueCells","suppliedLayers","GeomCell","matrixLayers","horizontalAxis","verticalAxis","datamodelTransform","layerConfigArr","getLayerConfig","normalizedColumns","normalizedRows","geomCellKey","getCellKey","columnId","allFacets","cell_creator_toConsumableArray","rowFacets","colFacets","geomCell","updateCells","facetKey","cell_creator_updateCells","cell_creator_createAxisCells","createAxisCells","axisInst","_axisInst$config","AxisCell","BlankCell","cell_creator_headerPlaceholderGn","headerPlaceholderGn","selectionObj","facetConfig","selectionKeys","keySet","createTextCells","cell_creator_createTextCells","cell_creator_generatePlaceholders","generatePlaceholders","facetsAndProjections","encoders","valuesMatrix","rowKeys","columnKeys","takeAxisFrom","takeHeaderFrom","axisPlaceholderGn","selObj","axesMatrix","selObjProp","axesForDraw","rowsPrimary","rowPrime","columnsPrimary","colPrime","cell_creator_axisPlaceholderGn","_selectionObj","rowsSecondary","columnsSecondary","getObjects","section","hContext","cell_creator_computeMatrices","computeMatrices","componentRegistry","globalConfig","autoGroupBy","otherEncodings","matrixGnContext","getCellDef","isRowSizeEqual","isColumnSizeEqual","colCells","rowCells","resetSimpleAxes","newCacheMap","valueCellContext","serializeLayerConfig","extractFields","layerFields","flattenArray","group_utils_extractFields","getFieldsFromSuppliedLayers","suppliedLayerConfig","group_utils_getFieldsFromSuppliedLayers","aggregationFns","valueMatrixInfo","getMatrixModel","rowDataModels","colProj","firstLevelRowKeys","_rowDataModels","_getFieldNames5","rowFacetFieldNames","selectedDataModel","_rowDataModels2","colFacetNames","firstLevelColumnKeys","dme","rIndex","cIndex","transposedColKeys","matrix_model_getMatrixModel","valueCellsCreator","placeholder","createUnits","_mutateAxesFromMap","mutateAxesFromMap","xAxisSet","yAxisSet","axisId","group_utils_mutateAxesFromMap","_generateMatrices","generateMatrices","leftHeaders","topHeaders","bottomHeaders","rightHeaders","cell_creator_slicedToArray","rowSec","colSec","leftFacets","rightFacets","leftMatrix","rightMatrix","topMatrix","bottomMatrix","currentBottomLength","setAvailableSpace","rowMatrix","columnMatrix","matrix_resolver","MatrixResolver","matrix_resolver_classCallCheck","_registry","_layerConfig","_matrixLayers","_rowMatrix","_columnMatrix","_valueMatrix","_facets","_projections","_datamodelTransform","_units","_cacheMaps","_axes","maps","_rowCells","_colCells","matrix_resolver_toConsumableArray","_horizontalAxis","_verticalAxis","matrixType","sideEffectRegistry","units","unitConfig","extractUnitConfig","group_utils_extractUnitConfig","_getAllFields","retContext","getRetinalFieldsDomain","retinalEncoder","setCommonDomain","_axes2","retinalAxes","updateModel","placeholders","bottomLeft","bottomRight","_dependencies3","matrix_resolver_slicedToArray","topCols","bottomCols","rowHeaders","blankCellCreator","showHeaders","footers","topLeft","topRight","value_matrix","ValueMatrix","matrixArr","value_matrix_classCallCheck","instancesById","rIdx","cIdx","cellValue","colIndex","_instancesById","_matrix","_filterFn","rowWidth","currentRowWidth","rowHeight","currentRowHeight","change_listener_setupChangeListeners","setupChangeListeners","change_listener_toConsumableArray","matrixConfig","retinalConfig","sanitizeRetinalConfig","retinalConf","confValue","getEncoder","group_utils_getEncoder","groupType","fieldSanitizer","setAxisAndHeaders","placeholderInfo","getMatrices","_groupedDataModel","createRetinalAxes","setDomains","setMatrixInstances","_composition","change_listener_setMatrixInstances","cornerMatrices","createHeaders","metaData","border","visual_group_props_PROPS","hasDataUpdated","matrixInstance","cellRegistry","visual_group","VisualGroup","visual_group_classCallCheck","visual_group_possibleConstructorReturn","componentSubRegistry","_matrixInstance","_selection","_placeholderInfo","_cornerMatrices","variable","findInGroup","channel","group_utils_this","facetType","projType","group_utils_findInGroup","getRetinalAxes","getSimpleAxes","_resolver$getAllField","visual_group_defineProperty","firebolt_behavioural_select","existingRemoveSet","enums_selection_namespaceObject","select_toConsumableArray","firebolt_action_behaviour_map_actionBehaviourMap","firebolt_action_behaviour_map_defineProperty","action_behaviour_map_actionBehaviourMap","action_behaviour_map_propagationBehaviourMap","propagationBehaviourMap","_propagationBehaviour","src_firebolt_behaviour_effect_map_behaviourEffectMap","firebolt_behaviour_effect_map_defineProperty","firebolt_behaviour_effect_map_behaviourEffectMap","propagationSideEffects","_propagationSideEffec","SCALE_FUNCTIONS","VALUE","helper_propagate","canvasAlias","check","assembleModelFromIdentifiers","_loop2","fieldVal","src_firebolt_helper_toConsumableArray","legend_firebolt_LegendFireBolt","_Firebolt","LegendFireBolt","legend_firebolt_classCallCheck","legend_firebolt_possibleConstructorReturn","legend_firebolt_inherits","legend_firebolt_createClass","behaviourName","firebolt_physical_hover","getCriteriaFromData","firebolt_physical_click","firebolt_physical_physicalActions","firebolt_physical_defineProperty","physical_physicalActions","boundingBox","gradientDimensions","axisScale","rangeShifter","drag_defineProperty","getSelectionCriteria","selectionBoxMeasure","drawingInfMeasure","subjectStartPoint","side_effects_selection_box","gradientDimension","legendGradContainer","legendSelGroup","enterFn","getMousePos","boundingClientRect","selection_box_drag_defineProperty","fadeOut","physical_selection_box_drag_selectionBoxDrag","legend_highlighter_strategies_strategies","brighten","legend_highlighter","LegendHighlighter","legend_highlighter_classCallCheck","legend_highlighter_possibleConstructorReturn","legend_props_PROPS","legendContainer","resetLogicalSpace","title","_title","ALIGN","DEFAULT_MEASUREMENT","LEGEND_TITLE","legend_defaults_DEFAULT_CONFIG","bounds","upper","defaults_ICON_MAP","ICON_MAP","legend_helper_getScaleInfo","getScaleInfo","steps","scaleFn","legend_helper_getInterpolatedData","getInterpolatedData","domainForLegend","interpolatedFn","getDomainBounds","domainBounds","domainLeg","ele","legend_helper_defineProperty","getScaleFactor","simple_legend","SimpleLegend","simple_legend_classCallCheck","_metaData","_fieldName","_labelManager","_cells","defaultMeasurement","_computedStyle","firebolt_behavioural_namespaceObject","firebolt_side_effects_namespaceObject","_canvasAlias","getItemMeasures","_labelManager$getOriS","effPadding","effBorder","effMargin","dataFromScale","titleSpace","getTitleSpace","titleHeight","titleWidth","labelSpaces","getLabelSpaces","_computeItemSpaces","computeItemSpaces","maxItemSpaces","textOrientation","itemSpaces","iconSpaces","maxIconWidth","itemSpace","iconSpace","legend_helper_computeItemSpaces","titleSpaces","_measurement2","titleCreator","legend_helper_titleCreator","_measurement3","renderTitle","simple_legend_defineProperty","legendOrientation","position_config_defineProperty","datasets","itemContainerMeasures","getStepSpacesInfo","iconHeight","iconWidth","stepPadding","horizontal","vertical","_legendOrientation","positionConfig","_positionConfig","alignmentMap","_alignmentMap","itemStack","_itemStack","renderer_createLegendSkeleton","createLegendSkeleton","gradWidth","gradHeight","maxGradHeight","maxGradWidth","legendBody","legendItem","getItemContainers","legendInstance","positionObj","renderer_getItemContainers","renderer_createItemSkeleton","createItemSkeleton","itemSkeleton","alignClass","renderer_applyItemStyle","applyItemStyle","measureType","stepColorCheck","_context$measurement","renderer_renderIcon","renderIcon","defaultIcon","renderer_checkPath","legend_renderer_createShape","discrete_legend","_getScaleInfo","discrete_legend_toConsumableArray","discrete_legend_defineProperty","discrete_legend_get","renderDiscreteItem","_context$measurement2","_item$icon","text-align","renderer_renderDiscreteItem","DiscreteLegend","getGradientDomain","accumulator","currentValue","MAX_VALUE","MIN_VALUE","gradient_helper_createLegendSkeleton","legendGradSvg","legendGradCont","linearGradient","makeLinearGradient","gradient_helper_makeLinearGradient","legendRect","gradient_helper_renderAxis","gradient_legend","gradient_legend_toConsumableArray","gradient_legend_defineProperty","newAxis","gradient_helper_createAxis","axisSpace","axisDomainLength","_legendGradientSvg","gradient_legend_get","renderGradient","_createLegendSkeleton","gradient_helper_renderGradient","GradientLegend","step_legend","step_legend_toConsumableArray","step_legend_defineProperty","lowerBounds","upperBounds","step_legend_get","StepLegend","stepData","position_config_stepData","renderStepItem","_context$config3","_context$measurement3","_item$icon2","_positionConfig$posit","renderer_renderStepItem","PADDING","BORDER","MARGIN","TITLE_TEMPLATE_NOT_ALLOWED_TAGS","LEGEND_TYPE_MAP","constants_defineProperty","src_constants_ORDINAL","_LEGEND_TYPE_MAP","src_constants_LINEAR","operators_share","share","operators_toConsumableArray","operators_html","strings","htmlCode","expLn","frag","createDocumentFragment","treeShakeNode","nodeType","Node","ELEMENT_NODE","tagName","childNodes","actionModel","ActionModel","action_model_classCallCheck","_registrableComponents","canvas","once","visualGroup","_cell$valueOf$firebol","registerPropagationBehaviourMap","_len4","_key4","dissociateBehaviour","_len5","_key5","dissociateSideEffect","policy","registrableComponents","mergedPolicy","aliases","comp","*","propagationPayload","propagationCanvas","action_model_defaultPolicy","crossInteractionPolicy","src_defaults_DEFAULT_CONFIG","legend","minHeight","collapse","src_options","isInteger","minUnitWidth","minUnitHeight","oldConf","defConfig","enums_constants_WIDTH","enums_constants_HEIGHT","layout_src_enums_constants_TOP","src_enums_constants_LEFT","src_enums_constants_RIGHT","layout_src_enums_constants_BOTTOM","constants_CENTER","ROW_LEFT","ROW_RIGHT","COLUMN_BOTTOM","COLUMN_TOP","ROW_SPAN","COL_SPAN","ROW_ROOT","COLUMN_ROOT","generic_layout","GenericLayout","generic_layout_classCallCheck","_matrices","_centerMatrix","_mountPoint","DEFAULT_CONFIGURATION","grid_layout_defaults_defineProperty","_FieldNames$BORDER","_DEFAULT_CONFIGURATIO","DEFAULT_MEASUREMENTS","_DEFAULT_MEASUREMENTS","BLANK_BORDERS","span_maker_columnFilter","columnFilter","colData","colIdx","previousRow","currentRow","prevCell","nextRow","prevRow","calcRowSpan","isNull","calcColSpan","span_maker_mask","mask","filteredRow","_temp","span_maker_toConsumableArray","applyBorders","borderStyle","borderType","applyRowBorders","showBorders","applyColBorders","renderMatrix","viewWidth","containerForMatrix","_cellSpanMaker","cellSpanMaker","viewMatrix","spans","ridx","currSpan","renderTable","rowData","availHeight","utils_nest","findInPage","page","combineMatrices","isTransposed","joinedMatrix","utils_toConsumableArray","computeLogicalSpace","maxMeasures","_config$isTransposed","unitMeasures","_getMeasureInfo","getMeasureInfo","firstMeasure","secondMeasure","utils_getMeasureInfo","minMeasures","getMinMeasures","_logicalSpace","utils_defineProperty","valueItem","maxMeasure","firstMeasureValue","secondMeasureValue","valueArray","_item$space","fMeasure","sMeasure","utils_getLogicalSpace","extraCellsRemover","beg","visual_matrix_props_PROPS","visual_matrix_default_config_defaultConfig","distribution","extraCellLengths","visual_matrix","VisualMatrix","visual_matrix_classCallCheck","_lastLevelKey","_primaryMatrix","_secondaryMatrix","_maxMeasures","_availableSpace","_breakPointer","_layoutMatrix","_tree","createTree","setLogicalSpace","_createTree2","matrixTree","lastLevelKey","layoutMatrix","primaryMatrix","secondaryMatrix","breakPage","primaryMatrixLength","newMatrix","keyLength","utils_createTree","createMatrixEachLevel","_arr$i","heightMeasures","populateMaxMeasures","widthMeasures","calculateDepth","viewableMatrix","createViewPortMatrix","viewableMeasures","redistribute","childDepth","maxHeights","maxWidths","matrixInst","mWidth","mHeight","redistributeColumnWise","redistributeRowWise","cellDimOptions","matrixIndex","_getCellDimensions","getCellDimensions","heights","widths","rowHeights","columnWidths","primary","secondary","begCellLen","endCellLen","createMatrixInstances","matrixInfo","layout","breakPointer","brokenMatrix","breakMatrix","nextLevel","removeExtraCells","rHeights","cWidths","_config4","gutter","spaceTakenByColumn","spaces","getDistributedHeight","heightWithoutGutter","distSum","gutterSum","availableHeight","colLen","distHeight","borderWidth","spaceTakenByRow","getDistributedWidth","layoutConfig","availableWidth","distWidth","rowLen","oldLogicalSpace","mainMeasures","computedMeasures","colHeight","colWidth","setMatrixMeasurement","computations_setAvailableSpace","setViewSpaces","pointerType","viewSpaces","pointer","computations_defineProperty","grid_layout_layout","GridLayout","layout_classCallCheck","layout_possibleConstructorReturn","_layoutId","generateVisualMatrices","begColCells","endColCells","gutterSpace","center","_top","layout_helper_slicedToArray","_center","_bottom","layout_helper_toConsumableArray","centerMatrix","layout_helper_generateVisualMatrices","layout_get","computeLayoutMeasurements","_layout$measurement","rowMatrixWidth","getMatrixMeasurement","columnMatrixWidth","columnViewPages","getViewableSpaces","columnViewSpace","columnPointer","columnMatrixHeight","rowMatrixHeight","rowViewableSpaces","computations_toConsumableArray","rowWidthsPrimary","rowWidthsSecondary","columnViewableSpaces","columnHeightsPrimary","columnHeightsSecondary","computations_computeLayoutMeasurements","setViewInformation","pageNumber","pageType","totalPages","getViewInformation","viewMatricesInfo","layout_defineProperty","renderGrid","currentPage","rowPointer","getViewMatrices","rowMatrices","getViewableData","columnMatrices","centralMatrixPointer","rowMatrixLen","columnMatrixLen","rowPages","columnPages","layoutDimensions","getViewMeasurements","_layout$measurement2","_layout$config3","leftWidth","rightWidth","topHeight","bottomHeight","viewHeight","viewInfo","_getViewInformation3","renderMatrices","transaction_support","INTERFACE_IMPl","visual_cell_src_enums_constants_LEFT","visual_cell_src_enums_constants_RIGHT","visual_cell_src_enums_constants_BOTTOM","visual_cell_src_enums_constants_TOP","visual_cell_src_enums_constants_CLASSPREFIX","constants_HEADER","enums_constants_DATA","enums_constants_AXES","constants_FACET_BY_FIELDS","constants_FIELDS","enums_constants_TRANSFORM","LAYER_DEF","src_enums_constants_CONFIG","DETAIL_FIELDS","cell_type_TEXT","cell_type_AXIS","GEOM","BLANK","simple_cell","SimpleCell","simple_cell_classCallCheck","enums_defaults_DEFAULT_CONFIG","enums_defaults_defineProperty","_CONSTANTS$MARGIN","_DEFAULT_CONFIG","DEFAULT_PROPS","availWidth","geomProps","caption","packages_visual_cell_src_props_PROPS","src_props_defineProperty","visual_cell_src_props_PROPS","axis_cell","axis_cell_classCallCheck","axis_cell_possibleConstructorReturn","_availHeight","_availWidth","computeAxisSpace","logicalWidth","logicalHeight","spaceFixer","_axis$getLogicalSpace","wrapperDiv","blank_cell","blank_cell_classCallCheck","blank_cell_possibleConstructorReturn","src_text_cell","text_cell_classCallCheck","text_cell_possibleConstructorReturn","_className","_minTickDiff","computeTextSpace","verticalAlign","textAlign","geom_cell","geom_cell_classCallCheck","geom_cell_possibleConstructorReturn","_unit","_datamodel","_facetByFields","_transform","_caption","lockModel","unlockModel","captionSpace","computeGeomSpace","getCaptionSpace","captionDom","DEFAULT_PLACEHOLDERS","src_defaults_defineProperty","_DEFAULT_PLACEHOLDERS","cell_registry","createHeading","cellType","title_maker_headerCreator","legend_maker_legendInitializer","legendInitializer","legendConfig","prevLegends","legends","headerHeight","legendCreator","LegendCls","dataset","scaleProps","_scale$config","legend_maker_legendCreator","dataInfo","legendMeasures","getGroupByData","setLegendMeasures","layout_maker_getRenderDetails","getRenderDetails","_mount$getBoundingCli","heightAttr","widthAttr","visGroup","_visGroup$placeholder","titleConfig","subtitleConfig","subtitle","legendPosition","layoutArrangement","arrangeComponents","_titleLayouts","legendLayouts","component_resolver_defineProperty","titleLayouts","src_constants_TOP","src_constants_BOTTOM","component_resolver_arrangeComponents","availableHeightForCanvas","availableWidthForCanvas","_createHeaders","canvasHeight","canvasWidth","headerOptions","resolveTitleSubTitleContent","rawContent","_sanitize","escapeHTML","htmlEscapes","&","<",">","\"","'","/","title_maker_resolveTitleSubTitleContent","_createHeading","title_maker_createHeaders","createLegend","legend_maker_createLegend","legendSpace","getLegendSpace","legendInfo","legend_maker_getLegendSpace","legendWidth","legendHeight","canvases","mountSpace","TITLE_CONFIG","SUB_TITLE_CONFIG","localOptions","canvas_local_options_defineProperty","_localOptions","canvasOptions","_sanitized","_canvasOptions","sub","renderer_renderHeader","renderHeader","headerCell","cont","renderComponents","_getSkeletons","getSkeletons","innerContainer","layoutType","renderer_getSkeletons","prepareGridContainer","innerSel","renderer_prepareGridContainer","setLabelRotationForAxes","renderLegend","legendComponents","sectionComponents","legendMount","legWidth","legHeight","sections","currHeight","currWidth","leg","renderer_renderLegend","shiftHeaders","shifter","renderer_shiftHeaders","helper_setupChangeListener","setupChangeListener","allOptions","_allOptions","canvas_helper_toConsumableArray","equalityChecker","option","dispatchProps","_cachedProps","applyInteractionPolicy","policies","firebolt_defaultInteractionPolicy","defaultInteractionPolicy","isMeasure","canvas_firebolt_toConsumableArray","getFieldsFromChannel","colDim","fieldInf","unitFireBolt","unitColFacets","equals","unitRowFacets","propagateWith","defaultCrossInteractionPolicy","propagationCanvasAlias","propagationUnit","canvas_firebolt","GroupFireBolt","canvas_firebolt_classCallCheck","_interactionPolicy","_crossInteractionPolicy","changeBehaviourStateOnPropagation","changeSideEffectStateOnPropagation","canvas_canvas","Canvas","globalDependencies","canvas_classCallCheck","canvas_possibleConstructorReturn","_transactor","canvas_slicedToArray","initedComponents","initCanvas","register","_getRenderDetails","prepareLayout","triggerReflow","promises","all","getAxes","initialSettings","regEntry","COMPONENTS","SUBREGISTRIES","regObj","globalCache","defaultRegistry","overrideRegistryDefinitions","overrideRegistry","muze_muze","muze","_transactor2","muze_slicedToArray","env","globalStore","componentSubRegistryDef","settings","withSettings","enableChainedTransaction","transactionModel","transactionEndpoint","transactionItems","_slicedToArray","SmartlabelManager_default","SideEffects","standards","SurrogateSideEffect","SpawnableSideEffect","Behaviours","PersistentBehaviour","VolatileBehaviour","DataModel","muze_package","layerFactory","operators_namespaceObject","utils","require","lookupWhat","lookupDetails","lookupTarget","deps","__webpack_exports__"],"mappings":"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","file":"muze.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"muze\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"muze\"] = factory();\n\telse\n\t\troot[\"muze\"] = factory();\n})(window, function() {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 7);\n","!function(e,t){\"object\"==typeof exports&&\"object\"==typeof module?module.exports=t():\"function\"==typeof define&&define.amd?define(\"DataModel\",[],t):\"object\"==typeof exports?exports.DataModel=t():e.DataModel=t()}(window,function(){return function(e){var t={};function n(r){if(t[r])return t[r].exports;var i=t[r]={i:r,l:!1,exports:{}};return e[r].call(i.exports,i,i.exports,n),i.l=!0,i.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(e,\"__esModule\",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&\"object\"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,\"default\",{enumerable:!0,value:e}),2&t&&\"string\"!=typeof e)for(var i in e)n.d(r,i,function(t){return e[t]}.bind(null,i));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,\"a\",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p=\"\",n(n.s=1)}([function(e){e.exports={name:\"datamodel\",description:\"Relational algebra compliant in-memory tabular data store\",homepage:\"https://github.com/chartshq/datamodel\",version:\"2.0.2\",license:\"MIT\",main:\"dist/datamodel.js\",author:\"Charts.com \",keywords:[\"datamodel\",\"data\",\"relational\",\"algebra\",\"model\",\"muze\",\"fusioncharts\",\"table\",\"tabular\",\"operation\"],repository:{type:\"git\",url:\"https://github.com/chartshq/datamodel.git\"},contributors:[{name:\"Akash Goswami\",email:\"akash@charts.com\"},{name:\"Subhash Haldar\",email:\"subhash@charts.com\"},{name:\"Rousan Ali\",email:\"rousan@charts.com\",url:\"https://rousan.io\"},{name:\"Ujjal Kumar Dutta\",email:\"ujjal@charts.com\"}],dependencies:{\"d3-dsv\":\"^1.0.8\"},devDependencies:{\"babel-cli\":\"6.26.0\",\"babel-core\":\"^6.26.3\",\"babel-eslint\":\"6.1.2\",\"babel-loader\":\"^7.1.4\",\"babel-plugin-transform-runtime\":\"^6.23.0\",\"babel-preset-env\":\"^1.7.0\",\"babel-preset-es2015\":\"^6.24.1\",\"babel-preset-flow\":\"^6.23.0\",chai:\"3.5.0\",\"cross-env\":\"^5.0.5\",eslint:\"3.19.0\",\"eslint-config-airbnb\":\"15.1.0\",\"eslint-plugin-import\":\"2.7.0\",\"eslint-plugin-jsx-a11y\":\"5.1.1\",\"eslint-plugin-react\":\"7.3.0\",\"istanbul-instrumenter-loader\":\"^3.0.0\",jsdoc:\"3.5.5\",json2yaml:\"^1.1.0\",karma:\"1.7.1\",\"karma-chai\":\"0.1.0\",\"karma-chrome-launcher\":\"2.1.1\",\"karma-coverage-istanbul-reporter\":\"^1.3.0\",\"karma-mocha\":\"1.3.0\",\"karma-spec-reporter\":\"0.0.31\",\"karma-webpack\":\"2.0.3\",marked:\"^0.5.0\",mocha:\"3.4.2\",\"mocha-webpack\":\"0.7.0\",\"transform-runtime\":\"0.0.0\",webpack:\"^4.12.0\",\"webpack-cli\":\"^3.0.7\",\"webpack-dev-server\":\"^3.1.4\"},scripts:{test:\"npm run lint && npm run ut\",ut:\"karma start karma.conf.js\",utd:\"karma start --single-run false --browsers Chrome karma.conf.js \",build:\"webpack --mode production\",\"build:dev\":\"webpack --mode development\",start:\"webpack-dev-server --config webpack.config.dev.js --mode development --open\",lint:\"eslint ./src\",\"lint-errors\":\"eslint --quiet ./src\",docs:\"rm -rf yaml && mkdir yaml && jsdoc -c jsdoc.conf.json\"}}},function(e,t,n){var r=n(2);e.exports=r.default?r.default:r},function(e,t,n){\"use strict\";n.r(t);var r={};n.r(r),n.d(r,\"DataFormat\",function(){return o}),n.d(r,\"DimensionSubtype\",function(){return u}),n.d(r,\"MeasureSubtype\",function(){return c}),n.d(r,\"FieldType\",function(){return f}),n.d(r,\"FilteringMode\",function(){return s});var i={};n.r(i),n.d(i,\"DSVArr\",function(){return Me}),n.d(i,\"DSVStr\",function(){return Ve}),n.d(i,\"FlatJSON\",function(){return Ye}),n.d(i,\"Auto\",function(){return Be});var a={};n.r(a),n.d(a,\"sum\",function(){return ct}),n.d(a,\"avg\",function(){return ft}),n.d(a,\"min\",function(){return st}),n.d(a,\"max\",function(){return lt}),n.d(a,\"first\",function(){return dt}),n.d(a,\"last\",function(){return pt}),n.d(a,\"count\",function(){return ht}),n.d(a,\"sd\",function(){return vt});var o={FLAT_JSON:\"FlatJSON\",DSV_STR:\"DSVStr\",DSV_ARR:\"DSVArr\",AUTO:\"Auto\"},u={CATEGORICAL:\"categorical\",TEMPORAL:\"temporal\",GEO:\"geo\"},c={DISCRETE:\"discrete\"},f={MEASURE:\"measure\",DIMENSION:\"dimension\"},s={NORMAL:\"normal\",INVERSE:\"inverse\",ALL:\"all\"};function l(e,t){e.length>0&&e.split(\",\").forEach(function(e){var n=e.split(\"-\"),r=+n[0],i=+(n[1]||n[0]);if(i>=r)for(var a=r;a<=i;a+=1)t(a)})}var d=function(){function e(e,t){for(var n=0;n=0;)o=e[a+1],-1!==r.indexOf(o)&&i.push({index:a,token:o});return i},m.formatAs=function(e,t){var n,r=h(e),i=m.findTokens(t),a=m.getTokenDefinitions(),o=String(t),u=m.TOKEN_PREFIX,c=void 0,f=void 0,s=void 0;for(s=0,n=i.length;s=0;d--)(f=a[d].index)+1!==l.length-1?(void 0===u&&(u=l.length),s=l.substring(f+2,u),l=l.substring(0,f+2)+RegExp.escape(s)+l.substring(u,l.length),u=f):u=f;for(d=0;d1){n=Math.abs(r[1]-r[0]);for(var i=2,a=r.length;i=y&&t.data=r.stops[r.stops.length-1]}).forEach(function(e){c[e.index]=r.stops[r.stops.length-1]+\"-\"+h}),r.stops.unshift(r.start),b=new Set(r.stops),dr.stops[r.stops.length-1]&&b.add(h),b=[].concat(function(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t3&&void 0!==arguments[3]&&arguments[3],i=arguments.length>4&&void 0!==arguments[4]?arguments[4]:G.CROSS,a=[],o=[],u=n||K,c=e.getFieldspace(),f=t.getFieldspace(),s=c.name,d=f.name,p=c.name+\".\"+f.name,h=L(c,f);if(s===d)throw new Error(\"DataModels must have different alias names\");return c.fields.forEach(function(e){var t=E({},e.schema);-1===h.indexOf(t.name)||r||(t.name=c.name+\".\"+t.name),a.push(t)}),f.fields.forEach(function(e){var t=E({},e.schema);-1!==h.indexOf(t.name)?r||(t.name=f.name+\".\"+t.name,a.push(t)):a.push(t)}),l(e._rowDiffset,function(e){var n=!1,p=void 0;l(t._rowDiffset,function(t){var l=[],v={};v[s]={},v[d]={},c.fields.forEach(function(t){l.push(t.data[e]),v[s][t.name]=t.data[e]}),f.fields.forEach(function(e){-1!==h.indexOf(e.schema.name)&&r||l.push(e.data[t]),v[d][e.name]=e.data[t]});var m=Ke(v[s]),y=Ke(v[d]);if(u(m,y)){var g={};l.forEach(function(e,t){g[a[t].name]=e}),n&&G.CROSS!==i?o[p]=g:(o.push(g),n=!0,p=e)}else if((i===G.LEFTOUTER||i===G.RIGHTOUTER)&&!n){var b={},_=c.fields.length-1;l.forEach(function(e,t){b[a[t].name]=t<=_?e:null}),n=!0,p=e,o.push(b)}})}),new ut(o,a,{name:p})}function z(e,t){var n=\"\"+e,r=\"\"+t;return nr?1:0}function X(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:z;return e.length>1&&function e(t,n,r,i){if(r===n)return t;var a=n+Math.floor((r-n)/2);return e(t,n,a,i),e(t,a+1,r,i),function(e,t,n,r,i){for(var a=e,o=[],u=t;u<=r;u+=1)o[u]=a[u];for(var c=t,f=n+1,s=t;s<=r;s+=1)c>n?(a[s]=o[f],f+=1):f>r?(a[s]=o[c],c+=1):i(o[c],o[f])<=0?(a[s]=o[c],c+=1):(a[s]=o[f],f+=1)}(t,n,a,r,i),t}(e,0,e.length-1,t),e}function Q(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);ta?\"desc\"===t?-1:1:0}}return r}function Z(e,t){var n=new Map,r=[];return e.forEach(function(e){var i=e[t];n.has(i)?r[n.get(i)][1].push(e):(r.push([i,[e]]),n.set(i,r.length-1))}),r}function ee(e,t,n){var r={label:e[0]};return t.reduce(function(t,r,i){return t[r]=e[1].map(function(e){return e[n[i].index]}),t},r),r}function te(e,t,n,r,i){var a={schema:[],data:[],uids:[]},o=(i=Object.assign({},{addUid:!1,columnWise:!1},i)).addUid,u=r&&r.length>0,c=[];if(n.split(\",\").forEach(function(t){for(var n=0;n=0;u--)i=t[u][0],a=t[u][1],(o=Ze(r,i))&&(S(a)?X(n,function(e,t){return a(e[o.index],t[o.index])}):j(a)?function(){var e=Z(n,o.index),t=a[a.length-1],i=a.slice(0,a.length-1),u=i.map(function(e){return Ze(r,e)});e.forEach(function(e){e.push(ee(e,i,u))}),X(e,function(e,n){var r=e[2],i=n[2];return t(r,i)}),n.length=0,e.forEach(function(e){n.push.apply(n,Q(e[1]))})}():(a=\"desc\"===String(a).toLowerCase()?\"desc\":\"asc\",X(n,$(o.type,a,o.index))));e.uids=[],n.forEach(function(t){e.uids.push(t.pop())})}(a,r),i.columnWise){var f=Array.apply(void 0,Q(Array(a.schema.length))).map(function(){return[]});a.data.forEach(function(e){e.forEach(function(e,t){f[t].push(e)})}),a.data=f}return a}function ne(e,t){var n={},r=[],i=[],a=[],o=e.getFieldspace(),u=t.getFieldspace(),c=o.fieldsObj(),f=u.fieldsObj(),s=o.name+\" union \"+u.name;if(!M(e._colIdentifier.split(\",\").sort(),t._colIdentifier.split(\",\").sort()))return null;function d(e,t,r){l(e._rowDiffset,function(e){var o={},u=\"\";i.forEach(function(n){var r=t[n].data[e];u+=\"-\"+r,o[n]=r}),n[u]||(r&&a.push(o),n[u]=!0)})}return e._colIdentifier.split(\",\").forEach(function(e){var t=c[e];r.push(E({},t.schema)),i.push(t.schema.name)}),d(t,f,!1),d(e,c,!0),new ut(a,r,{name:s})}function re(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t1&&void 0!==arguments[1]?arguments[1]:{},n={},r=t,i=e.getPartialFieldspace().getMeasure(),a=se.defaultReducer();return\"function\"==typeof t&&(a=t),Object.entries(i).forEach(function(e){var o=le(e,1)[0];\"string\"==typeof t[o]&&(r[o]=se.resolve(r[o])?se.resolve(r[o]):a),\"function\"!=typeof t[o]&&(r[o]=void 0),n[o]=r[o]||se.resolve(i[o].defAggFn())||a}),n}(e,n),o=e.getPartialFieldspace(),u=o.fieldsObj(),c=o.name,f=[],s=[],d=[],p={},h=[],v=void 0;Object.entries(u).forEach(function(e){var t=le(e,2),n=t[0],r=t[1];(-1!==i.indexOf(n)||a[n])&&(d.push(E({},r.schema)),\"measure\"===r.schema.type&&\"discrete\"!==r.schema.subtype?s.push(n):\"dimension\"!==r.schema.type&&\"discrete\"!==r.schema.subtype||f.push(n))});var m=0;return l(e._rowDiffset,function(e){var t=\"\";f.forEach(function(n){t=t+\"-\"+u[n].data[e]}),void 0===p[t]?(p[t]=m,h.push({}),f.forEach(function(t){h[m][t]=u[t].data[e]}),s.forEach(function(t){h[m][t]=[u[t].data[e]]}),m+=1):s.forEach(function(n){h[p[t]][n].push(u[n].data[e])})}),h.forEach(function(e){var t=e;s.forEach(function(n){t[n]=a[n](e[n])})}),r?(r.__calculateFieldspace(),v=r):v=new yt(h,d,{name:c}),v}function pe(e,t){var n=L(e.getFieldspace(),t.getFieldspace());return function(e,t){var r=!0;return n.forEach(function(n){r=!(e[n].value!==t[n].value||!r)}),r}}function he(e,t){var n={},r=[],i=[],a=[],o=e.getFieldspace(),u=t.getFieldspace(),c=o.fieldsObj(),f=u.fieldsObj(),s=o.name+\" union \"+u.name;if(!M(e._colIdentifier.split(\",\").sort(),t._colIdentifier.split(\",\").sort()))return null;function d(e,t){l(e._rowDiffset,function(e){var r={},o=\"\";i.forEach(function(n){var i=t[n].data[e];o+=\"-\"+i,r[n]=i}),n[o]||(a.push(r),n[o]=!0)})}return e._colIdentifier.split(\",\").forEach(function(e){var t=c[e];r.push(E({},t.schema)),i.push(t.schema.name)}),d(e,c),d(t,f),new yt(a,r,{name:s})}function ve(e,t,n){return W(e,t,n,!1,G.LEFTOUTER)}function me(e,t,n){return W(t,e,n,!1,G.RIGHTOUTER)}var ye=function(){function e(e,t){for(var n=0;nn&&(n=e)}),[t,n]}(this.data)}},{key:\"parse\",value:function(e){return e=parseFloat(e,10),Number.isNaN(e)?null:e}},{key:\"unit\",value:function(){return this.fieldUnit}},{key:\"scale\",value:function(){return this.fieldScale}},{key:\"numberFormat\",value:function(){var e=this.fieldNumberformat;return function(t){return e(t)}}},{key:\"defAggFn\",value:function(){return this.fieldDefAggFn}}]),t}(),Oe=function(){function e(e,t){for(var n=0;n=a?c=!0:(r=e.charCodeAt(o++))===Pe?f=!0:r===Ce&&(f=!0,e.charCodeAt(o)===Pe&&++o),e.slice(i+1,t-1).replace(/\"\"/g,'\"')}for(;o2&&void 0!==arguments[2]?arguments[2]:{},i=arguments[3],a=void 0;t!==Y?(a={op:t,meta:r,criteria:i},e._derivation.push(a)):(a=[].concat(Ge(i)),e._derivation.length=0,(n=e._derivation).push.apply(n,Ge(a)))},ze=function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=n.operation||q,i=n.filterByMeasure||!1,a=[];a=t.length?t.map(function(e){return function(e){var t=e.getData(),n=t.schema,r=e.getFieldsConfig(),a=e.getFieldspace().fieldsObj(),o=t.data,u=Object.values(r).reduce(function(e,t){return e[t.def.name]=a[t.def.name].domain(),e},{});return function(e){return!!o.length&&o.some(function(t){return n.every(function(n){if(!(n.name in e))return!0;var a=e[n.name].valueOf();if(i&&n.type===f.MEASURE)return a>=u[n.name][0]&&a<=u[n.name][1];if(n.type!==f.DIMENSION)return!0;var o=r[n.name].index;return t[o]===e[n.name].valueOf()})})}}(e)}):[function(){return!1}];var o=void 0;r===q?o=e.clone(!1,!1).select(function(e){return a.every(function(t){return t(e)})},{saveChild:!1,mode:s.ALL}):o=e.clone(!1,!1).select(function(e){return a.some(function(t){return t(e)})},{mode:s.ALL,saveChild:!1});return o},Xe=function(e,t,n,r){var i=e.clone(r.saveChild),a=function(e,t,n,r){var i=[],a=-1,o=void 0,u=function(e){return n(qe(t,e),e)};return r.mode===s.INVERSE&&(u=function(e){return!n(qe(t,e))}),l(e,function(e){u(e)&&(-1!==a&&e===a+1?(o=i.length-1,i[o]=i[o].split(\"-\")[0]+\"-\"+e):i.push(\"\"+e),a=e)}),i.join(\",\")}(i._rowDiffset,i.getPartialFieldspace().fields,t,n);return i._rowDiffset=a,i.__calculateFieldspace().calculateFieldsConfig(),r.saveChild&&We(i,U,{config:n},t),i},Qe=function(e,t,n,r){var i=e.clone(n.saveChild),a=t;return n.mode===s.INVERSE&&(a=r.filter(function(e){return-1===t.indexOf(e)})),i._colIdentifier=a.join(\",\"),i.__calculateFieldspace().calculateFieldsConfig(),n.saveChild&&We(i,H,{projField:t,config:n,actualProjField:a},null),i},$e=function(e,t,n,r){r=Object.assign(Object.assign({},xe),r);var a=i[r.dataFormat];if(!a||\"function\"!=typeof a)throw new Error(\"No converter function found for \"+r.dataFormat+\" format\");var o=a(t,r),u=Je(o,2),c=u[0],f=u[1],s=Fe(f,n,c),l=R.createNamespace(s,r.name);return e._partialFieldspace=l,e._rowDiffset=f.length&&f[0].length?\"0-\"+(f[0].length-1):\"\",e._colIdentifier=n.map(function(e){return e.name}).join(),e},Ze=function(e,t){for(var n=0;n2&&void 0!==arguments[2]?arguments[2]:{},i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},a=i.nonTraversingModel,o=i.excludeModels||[];t!==a&&((!o.length||-1===o.indexOf(t))&&t.handlePropagation(n,r),t._children.forEach(function(t){var a=et(n,t),o=Je(a,2),u=o[0],c=o[1];e(t,[u,c],r,i)}))},nt=function(e,t,n,r){var i=void 0,a=void 0,o=n.propagationNameSpace,u=n.propagateToSource,c=n.sourceId,f=r.propagateInterpolatedValues,s=[];if(null===e&&!0!==r.persistent)s=[{criteria:[]}];else{var l,d=Object.values(o.mutableActions);!1!==u&&(d=d.filter(function(e){return e.config.sourceId!==c}));var p=d.filter(function(e){return(r.filterFn||function(){return!0})(e,r)}).map(function(e){return e.config.criteria}),h=[];if(!1!==u){var v=Object.values(o.mutableActions);v.forEach(function(e){var t=e.config;!1===t.applyOnSource&&t.action===r.action&&t.sourceId!==c&&(h.push(e.model),(i=v.filter(function(t){return t!==e}).map(function(e){return e.config.criteria})).length&&s.push({criteria:i,models:e.model,path:function e(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];return null!==t._parent&&(n.push(t),e(t._parent,n)),n}(e.model)}))})}i=(l=[]).concat.apply(l,[].concat(Ge(p),[e])).filter(function(e){return null!==e}),s.push({criteria:i,excludeModels:[].concat(h,Ge(r.excludeModels||[]))})}var m=t.model,y=Object.assign({sourceIdentifiers:e,propagationSourceId:c},r),g=t.groupByModel;f&&g&&(a=ze(g,i,{filterByMeasure:f}),tt(g,a,y)),s.forEach(function(e){var t=ze(m,e.criteria),n=e.path;if(n){var r=function(e,t){for(var n=0,r=t.length;n0&&void 0!==arguments[0])||arguments[0],t=void 0;if(!1===(!(arguments.length>1&&void 0!==arguments[1])||arguments[1])){var n=this.getData({getAllFields:!0}),r=n.data,i=n.schema,a=r.map(function(e){var t={};return i.forEach(function(n,r){t[n.name]=e[r]}),t});t=new this.constructor(a,i)}else t=new this.constructor(this);return e&&this._children.push(t),t}},{key:\"project\",value:function(e,t){var n={mode:s.NORMAL,saveChild:!0};t=Object.assign({},n,t);var r=this.getFieldsConfig(),i=Object.keys(r),a=t.mode,o=e.reduce(function(e,t){return\"RegExp\"===t.constructor.name?e.push.apply(e,function(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t1&&void 0!==arguments[1]?arguments[1]:[];We(this,Y,null,t),this._parent=e,e._children.push(this)}}]),e}(),at=function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function(e,t){var n=[],r=!0,i=!1,a=void 0;try{for(var o,u=e[Symbol.iterator]();!(r=(o=u.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){i=!0,a=e}finally{try{!r&&u.return&&u.return()}finally{if(i)throw a}}return n}(e,t);throw new TypeError(\"Invalid attempt to destructure non-iterable instance\")}}(),ot=function(){function e(e,t){for(var n=0;n1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{saveChild:!0},r=\"\"+e.join(),i=[this,e,t],a=de.apply(void 0,i);return n.saveChild&&(this._children.push(a),We(a,V,{fieldsArr:e,groupByString:r,defaultReducer:se.defaultReducer()},t)),a._parent=this,a}},{key:\"sort\",value:function(e){var t=this.getData({order:\"row\",sort:e}),n=[t.schema.map(function(e){return e.name})].concat(t.data),r=new this.constructor(n,t.schema,{dataFormat:\"DSVArr\"});return r._sortingDetails=e,r}},{key:\"addField\",value:function(e){var t=e.fieldName();this._colIdentifier+=\",\"+t;var n=this._partialFieldspace;if(n.fieldsObj()[e.fieldName()]){var r=n.fields.findIndex(function(e){return e.name===t});r>=0&&(n.fields[r]=e)}else n.fields.push(e);return this.__calculateFieldspace().calculateFieldsConfig(),this}},{key:\"calculateVariable\",value:function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{saveChild:!0,replaceVar:!1},r=this.getFieldsConfig(),i=t.slice(0,t.length-1),a=t[t.length-1];if(r[e.name]&&!n.replaceVar)throw new Error(e.name+\" field already exists in model.\");var o=i.map(function(e){var t=r[e];if(!t)throw new Error(e+\" is not a valid column name.\");return t.index}),u=this.clone(),c=u.getFieldspace().fields,f=o.map(function(e){return c[e]}),s=[];l(u._rowDiffset,function(e){var t=f.map(function(t){return t.data[e]});s[e]=a.apply(void 0,function(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t1&&void 0!==arguments[1]?arguments[1]:{},n=arguments[2],r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},i=t.isMutableAction,a=t.sourceId,o=t.payload,u=function e(t){return t._parent?e(t._parent):t}(this),c=u._propagationNameSpace,f={groupByModel:function e(t){return t._parent&&t._derivation.find(function(e){return\"group\"!==e.op})?e(t._parent):t}(this),model:u};return n&&function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments[2],r=void 0,i=t.isMutableAction,a=t.criteria,o=t.action+\"-\"+t.sourceId;r=i?e.mutableActions:e.immutableActions,null===a?delete r[o]:r[o]={model:n,config:t}}(c,t,this),nt(e,f,{propagationNameSpace:c,sourceId:a},Object.assign({payload:o},t)),i&&function(e,t,n){var r=e.immutableActions;for(var i in r){var a=r[i].config,o=n.config.sourceId,u=!n.propConfig.filterImmutableAction||n.propConfig.filterImmutableAction(a,n.config);if(a.sourceId!==o&&u){var c=a.criteria;nt(c,t,{propagationNameSpace:e,propagateToSource:!1,sourceId:o},a)}}}(c,f,{config:t,propConfig:r}),this}},{key:\"on\",value:function(e,t){switch(e){case\"propagation\":this._onPropagation.push(t)}return this}},{key:\"unsubscribe\",value:function(e){switch(e){case\"propagation\":this._onPropagation=[]}return this}},{key:\"handlePropagation\",value:function(e,t){var n=this;this._onPropagation.forEach(function(r){return r.call(n,e,t)})}},{key:\"bin\",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=this.clone(),r=t.name||e+\"_binned\";if(this.getFieldsConfig()[r]||!this.getFieldsConfig()[e])throw new Error(\"Field \"+e+\" already exists.\");var i=I(this._partialFieldspace.fields.find(function(t){return t.name===e}),this._rowDiffset,t),a=Fe([i.data],[{name:r,type:f.MEASURE,subtype:\"discrete\",bins:{range:i.range,mid:i.mid}}],[r])[0];return n.addField(a),We(n,J,{measureName:e,config:t,binFieldName:r},null),n}}],[{key:\"Reducers\",get:function(){return se}}]),t}(),ct=oe.sum,ft=oe.avg,st=oe.min,lt=oe.max,dt=oe.first,pt=oe.last,ht=oe.count,vt=oe.std,mt=n(0);ut.Operators={compose:function(){for(var e=arguments.length,t=Array(e),n=0;n1&&void 0!==arguments[1]?arguments[1]:{saveChild:!0}).saveChild;return t.forEach(function(e){n=e(n),i.push.apply(i,function(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t1&&r.dispose(),n}},bin:function(){for(var e=arguments.length,t=Array(e),n=0;n2?(i=arguments.length<=0?void 0:arguments[0],n=arguments.length<=1?void 0:arguments[1],o=arguments.length<=2?void 0:arguments[2]):(i=null,n=arguments.length<=0?void 0:arguments[0],o=arguments.length<=1?void 0:arguments[1]),t=o(y),(e=r=new _(t.fn)).addDependencies.apply(e,P(t.dependencies)),this._addPropInModel(i,function(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}({},n,r)),this}},{key:\"_addPropInModel\",value:function(e,t){return this._graph.createNodesFrom(t,e),this}},{key:\"on\",value:function(e,t,r){var n,i=e instanceof Array?e:[e],o=this._graph.createElectricNodeOf(i,{type:\"CurrFrame\",fn:t});r&&(n=this._graph.stopPropagation().setPropagationOverride(\"nextFrame\")).resetNodeValue.apply(n,P(e));return o}},{key:\"next\",value:function(e,t,r){var n,i=e instanceof Array?e:[e],o=this._graph.createElectricNodeOf(i,{type:\"NextFrame\",fn:t});r&&(n=this._graph.stopPropagation().setPropagationOverride(\"currentFrame\")).resetNodeValue.apply(n,P(e));return o}},{key:\"lock\",value:function(){return this._lockFlag=!0,this._reqQ.length=0,this}},{key:\"unlock\",value:function(){return this._lockFlag=!1,this.setProp.apply(this,P(this._reqQ)),this._reqQ.length=0,this}},{key:\"prop\",value:function(){var e,t=void 0,r=void 0;switch(e=arguments.length){case 1:t=arguments.length<=0?void 0:arguments[0];break;case 2:t=arguments.length<=0?void 0:arguments[0],r=arguments.length<=1?void 0:arguments[1];break;default:return this}return 2===e?(this._lockFlag?this._reqQ.push([t,r]):this.setProp([t,r]),this):this._graph.getNodeValue(t)}},{key:\"setProp\",value:function(){for(var e,t=this,r=arguments.length,n=Array(r),i=0;i whenever a break is necessary. This is to recgonize one\n * generalized format independent of the implementation (canvas based solution, svg based solution). This method\n * converts the output of getSmartText().text to array of lines if the text is wrapped. It sets a named property\n * `lines` on the object passed as parameter.\n *\n * @param {Object} smartlabel - the object returned by getSmartText based on which line arr which to be formed.\n *\n * @return {Object} - The same object which was passed in the arguments. Also a named property `lines` is set.\n */\nSmartLabelManager.textToLines = function (smartlabel) {\n smartlabel = smartlabel || {};\n\n if (!smartlabel.text) {\n smartlabel.text = '';\n } else if (typeof smartlabel.text !== 'string') {\n smartlabel.text = smartlabel.text.toString();\n }\n\n smartlabel.lines = smartlabel.text.split(/\\n|/ig);\n return smartlabel;\n};\n\n// Saves all the instance created so far\nSmartLabelManager.store = {};\n\n// Calculates space taken by a character with an approximation value which is calculated by repeating the\n// character by string length times.\nSmartLabelManager.prototype._calCharDimWithCache = function (text, calculateDifference, length) {\n if (!this._init) {\n return false;\n }\n\n var size,\n csArr,\n tw,\n twi,\n cachedStyle,\n asymmetricDifference,\n maxAdvancedCacheLimit = this.options.maxCacheLimit,\n container = this._container,\n style = this.style || {},\n cache = this._advancedCache || (this._advancedCache = {}),\n advancedCacheKey = this._advancedCacheKey || (this._advancedCacheKey = []),\n cacheName = text + (style.fontSize || BLANK) + (style.fontFamily || BLANK) + (style.fontWeight || BLANK) + (style.fontStyle || BLANK),\n cacheInitName = text + 'init' + (style.fontSize || BLANK) + (style.fontFamily || BLANK) + (style.fontWeight || BLANK) + (style.fontStyle || BLANK);\n\n htmlSplCharSpace[text] && (text = htmlSplCharSpace[text]);\n\n if (!calculateDifference) {\n asymmetricDifference = 0;\n } else {\n if ((asymmetricDifference = cache[cacheInitName]) === undefined) {\n container.innerHTML = text.repeat ? text.repeat(length) : Array(length + 1).join(text); // jshint ignore:line\n tw = container.offsetWidth;\n\n container.innerHTML = text;\n twi = container.offsetWidth;\n\n asymmetricDifference = cache[cacheInitName] = (tw - length * twi) / (length + 1);\n advancedCacheKey.push(cacheInitName);\n if (advancedCacheKey.length > maxAdvancedCacheLimit) {\n delete cache[advancedCacheKey.shift()];\n }\n }\n }\n\n if (cachedStyle = cache[cacheName]) {\n csArr = cachedStyle.split(',');\n return {\n width: parseFloat(csArr[0], 10),\n height: parseFloat(csArr[1], 10)\n };\n }\n\n container.innerHTML = text;\n\n size = {\n height: container.offsetHeight,\n width: container.offsetWidth + asymmetricDifference\n };\n\n cache[cacheName] = size.width + ',' + size.height;\n advancedCacheKey.push(cacheName);\n if (advancedCacheKey.length > maxAdvancedCacheLimit) {\n delete cache[advancedCacheKey.shift()];\n }\n\n return size;\n};\n\n// Provide function to calculate the height and width based on the environment and available support from dom.\nSmartLabelManager.prototype._getWidthFn = function () {\n var contObj = this._containerObj,\n container = this._container,\n svgText = contObj.svgText;\n\n if (svgText) {\n return function (str) {\n var bbox, width;\n\n svgText.textContent = str;\n bbox = svgText.getBBox();\n width = bbox.width - SVG_BBOX_CORRECTION;\n if (width < 1) {\n width = bbox.width;\n }\n\n return width;\n };\n } else {\n return function (str) {\n container.innerHTML = str;\n return container.offsetWidth;\n };\n }\n};\n\n/*\n * Sets the style based on which the text's metrics to be calculated.\n *\n * @param {Object} style - The style object which affects the text size\n * {\n * fontSize / 'font-size' : MUST BE FOLLOWED BY PX (10px, 11px)\n * fontFamily / 'font-family'\n * fontWeight / 'font-weight'\n * fontStyle / 'font-style'\n * }\n *\n * @return {SmartLabelManager} - Current instance of SmartLabelManager\n */\nSmartLabelManager.prototype.setStyle = function (style) {\n if (!this._init) {\n return this;\n }\n\n var sCont;\n\n if (style === this.style && !this._styleNotSet) {\n return;\n }\n\n if (!style) {\n style = this.style;\n }\n\n slLib.setLineHeight(style);\n this.style = style;\n\n this._containerObj = sCont = this._containerManager.get(style);\n\n if (this._containerObj) {\n this._container = sCont.node;\n this._context = sCont.context;\n this._cache = sCont.charCache;\n this._lineHeight = sCont.lineHeight;\n this._styleNotSet = false;\n } else {\n this._styleNotSet = true;\n }\n\n return this;\n};\n\n/*\n * Decides whether ellipses to be shown if the node is truncated\n *\n * @param {Boolean} useEllipses - decides if a ellipses to be appended if the text is truncated. Default: false\n *\n * @return {SmartLabelManager} - Current instance of SmartLabelManager\n */\nSmartLabelManager.prototype.useEllipsesOnOverflow = function (useEllipses) {\n if (!this._init) {\n return this;\n }\n this._showNoEllipses = !useEllipses;\n return this;\n};\n\n/*\n * Get wrapped or truncated text if a bound box is defined around it. The result text would be separated by
\n * if wrapped\n *\n * @param {String} text - the subject text\n * @param {Number} maxWidth - width in px of the the bound box\n * @param {Number} maxHeight - height in px of the the bound box\n * @param {Boolean} noWrap - whether the text to be wrapped. Default false.\n *\n * @return {Object} - The metrics of the text bounded by the box\n * {\n * height : height of the wrapped text\n * width : width of the wrapped text\n * isTruncated : whether the text is truncated\n * maxHeight : Maximum height given\n * maxWidth : Maximum width given\n * oriText : Original text sent\n * oriTextHeight : Original text height\n * oriTextWidth : Original text width\n * text : SMART TEXT\n * }\n */\nSmartLabelManager.prototype.getSmartText = function (text, maxWidth, maxHeight, noWrap) {\n if (!this._init) {\n return false;\n }\n\n if (text === undefined || text === null) {\n text = '';\n } else if (typeof text !== 'string') {\n text = text.toString();\n }\n\n var len,\n trimStr,\n tempArr,\n tmpText,\n maxWidthWithEll,\n toolText,\n oriWidth,\n oriHeight,\n newCharIndex,\n nearestChar,\n tempChar,\n getWidth,\n initialLeft,\n initialTop,\n getOriSizeImproveObj,\n spanArr,\n x,\n y,\n minWidth,\n elem,\n chr,\n elemRightMostPoint,\n elemLowestPoint,\n lastBR,\n removeFromIndex,\n removeFromIndexForEllipses,\n hasHTMLTag = false,\n maxStrWidth = 0,\n lastDash = -1,\n lastSpace = -1,\n lastIndexBroken = -1,\n strWidth = 0,\n strHeight = 0,\n oriTextArr = [],\n i = 0,\n ellipsesStr = this._showNoEllipses ? '' : '...',\n lineHeight = this._lineHeight,\n context = this._context,\n container = this._container,\n sCont = this._containerObj,\n ellipsesWidth = sCont.ellipsesWidth,\n dotWidth = sCont.dotWidth,\n characterArr = [],\n dashIndex = -1,\n spaceIndex = -1,\n lastLineBreak = -1,\n fastTrim = function fastTrim(str) {\n str = str.replace(/^\\s\\s*/, '');\n var ws = /\\s/,\n i = str.length;\n while (ws.test(str.charAt(i -= 1))) {/* jshint noempty:false */}\n return str.slice(0, i + 1);\n },\n smartLabel = {\n text: text,\n maxWidth: maxWidth,\n maxHeight: maxHeight,\n width: null,\n height: null,\n oriTextWidth: null,\n oriTextHeight: null,\n oriText: text,\n isTruncated: false\n };\n\n getWidth = this._getWidthFn();\n\n // In some browsers, offsetheight of a single-line text is getting little (1 px) heigher value of the\n // lineheight. As a result, smartLabel is unable to return single-line text.\n // To fix this, increase the maxHeight a little amount. Hence maxHeight = lineHeight * 1.2\n if (maxHeight === lineHeight) {\n maxHeight *= 1.2;\n }\n\n if (container) {\n if (!documentSupport.isBrowserLess) {\n hasHTMLTag = slLib.xmlTagRegEx.test(text);\n if (!hasHTMLTag) {\n // Due to support of <,> for xml we convert <, > to <,> respectively so to get the correct\n // width it is required to convert the same before calculation for the new improve version of the\n // get text width.\n tmpText = text.replace(slLib.ltgtRegex, function (match) {\n return match === '<' ? '<' : '>';\n });\n getOriSizeImproveObj = this.getOriSize(tmpText, true);\n\n smartLabel.oriTextWidth = oriWidth = getOriSizeImproveObj.width;\n smartLabel.oriTextHeight = oriHeight = getOriSizeImproveObj.height;\n } else {\n container.innerHTML = text;\n smartLabel.oriTextWidth = oriWidth = container.offsetWidth;\n smartLabel.oriTextHeight = oriHeight = container.offsetHeight;\n }\n\n if (oriHeight <= maxHeight && oriWidth <= maxWidth) {\n smartLabel.width = smartLabel.oriTextWidth = oriWidth;\n smartLabel.height = smartLabel.oriTextHeight = oriHeight;\n return smartLabel;\n }\n\n if (lineHeight > maxHeight) {\n smartLabel.text = '';\n smartLabel.width = smartLabel.oriTextWidth = 0;\n smartLabel.height = smartLabel.oriTextHeight = 0;\n return smartLabel;\n }\n }\n\n // Calculate width with ellipses\n text = fastTrim(text).replace(/(\\s+)/g, ' ');\n maxWidthWithEll = this._showNoEllipses ? maxWidth : maxWidth - ellipsesWidth;\n\n if (!hasHTMLTag) {\n oriTextArr = text.split('');\n len = oriTextArr.length;\n trimStr = '', tempArr = [];\n tempChar = oriTextArr[0];\n\n if (this._cache[tempChar]) {\n minWidth = this._cache[tempChar].width;\n } else {\n minWidth = getWidth(tempChar);\n this._cache[tempChar] = { width: minWidth };\n }\n\n if (maxWidthWithEll > minWidth) {\n tempArr = text.substr(0, slLib.getNearestBreakIndex(text, maxWidthWithEll, this)).split('');\n i = tempArr.length;\n } else if (minWidth > maxWidth) {\n smartLabel.text = '';\n smartLabel.width = smartLabel.oriTextWidth = smartLabel.height = smartLabel.oriTextHeight = 0;\n return smartLabel;\n } else if (ellipsesStr) {\n maxWidthWithEll = maxWidth - 2 * dotWidth;\n if (maxWidthWithEll > minWidth) {\n ellipsesStr = '..';\n } else {\n maxWidthWithEll = maxWidth - dotWidth;\n if (maxWidthWithEll > minWidth) {\n ellipsesStr = '.';\n } else {\n maxWidthWithEll = 0;\n ellipsesStr = '';\n }\n }\n }\n\n strWidth = getWidth(tempArr.join(''));\n strHeight = this._lineHeight;\n\n if (noWrap) {\n for (; i < len; i += 1) {\n tempChar = tempArr[i] = oriTextArr[i];\n if (this._cache[tempChar]) {\n minWidth = this._cache[tempChar].width;\n } else {\n if (!getOriSizeImproveObj || !(minWidth = getOriSizeImproveObj.detailObj[tempChar])) {\n minWidth = getWidth(tempChar);\n }\n this._cache[tempChar] = {\n width: minWidth\n };\n }\n strWidth += minWidth;\n if (strWidth > maxWidthWithEll) {\n if (!trimStr) {\n trimStr = tempArr.slice(0, -1).join('');\n }\n if (strWidth > maxWidth) {\n smartLabel.text = fastTrim(trimStr) + ellipsesStr;\n smartLabel.tooltext = smartLabel.oriText;\n smartLabel.width = getWidth(smartLabel.text);\n smartLabel.height = this._lineHeight;\n return smartLabel;\n }\n }\n }\n\n smartLabel.text = tempArr.join('');\n smartLabel.width = strWidth;\n smartLabel.height = this._lineHeight;\n return smartLabel;\n } else {\n for (; i < len; i += 1) {\n tempChar = tempArr[i] = oriTextArr[i];\n if (tempChar === ' ' && !context) {\n tempChar = ' ';\n }\n\n if (this._cache[tempChar]) {\n minWidth = this._cache[tempChar].width;\n } else {\n if (!getOriSizeImproveObj || !(minWidth = getOriSizeImproveObj.detailObj[tempChar])) {\n minWidth = getWidth(tempChar);\n }\n this._cache[tempChar] = {\n width: minWidth\n };\n }\n strWidth += minWidth;\n\n if (strWidth > maxWidthWithEll) {\n if (!trimStr) {\n trimStr = tempArr.slice(0, -1).join('');\n }\n if (strWidth > maxWidth) {\n /** @todo use regular expressions for better performance. */\n lastSpace = text.substr(0, tempArr.length).lastIndexOf(' ');\n lastDash = text.substr(0, tempArr.length).lastIndexOf('-');\n if (lastSpace > lastIndexBroken) {\n strWidth = getWidth(tempArr.slice(lastIndexBroken + 1, lastSpace).join(''));\n tempArr.splice(lastSpace, 1, '
');\n lastIndexBroken = lastSpace;\n newCharIndex = lastSpace + 1;\n } else if (lastDash > lastIndexBroken) {\n if (lastDash === tempArr.length - 1) {\n strWidth = getWidth(tempArr.slice(lastIndexBroken + 1, lastSpace).join(''));\n tempArr.splice(lastDash, 1, '
-');\n } else {\n strWidth = getWidth(tempArr.slice(lastIndexBroken + 1, lastSpace).join(''));\n tempArr.splice(lastDash, 1, '-
');\n }\n lastIndexBroken = lastDash;\n newCharIndex = lastDash + 1;\n } else {\n tempArr.splice(tempArr.length - 1, 1, '
' + oriTextArr[i]);\n lastLineBreak = tempArr.length - 2;\n strWidth = getWidth(tempArr.slice(lastIndexBroken + 1, lastLineBreak + 1).join(''));\n lastIndexBroken = lastLineBreak;\n newCharIndex = i;\n }\n strHeight += this._lineHeight;\n if (strHeight > maxHeight) {\n smartLabel.text = fastTrim(trimStr) + ellipsesStr;\n smartLabel.tooltext = smartLabel.oriText;\n // The max width among all the lines will be the width of the string.\n smartLabel.width = maxWidth;\n smartLabel.height = strHeight - this._lineHeight;\n return smartLabel;\n } else {\n maxStrWidth = max(maxStrWidth, strWidth);\n trimStr = null;\n nearestChar = slLib.getNearestBreakIndex(text.substr(newCharIndex), maxWidthWithEll, this);\n strWidth = getWidth(text.substr(newCharIndex, nearestChar || 1));\n if (tempArr.length < newCharIndex + nearestChar) {\n tempArr = tempArr.concat(text.substr(tempArr.length, newCharIndex + nearestChar - tempArr.length).split(''));\n i = tempArr.length - 1;\n }\n }\n }\n }\n }\n\n maxStrWidth = max(maxStrWidth, strWidth);\n\n smartLabel.text = tempArr.join('');\n smartLabel.width = maxStrWidth;\n smartLabel.height = strHeight;\n return smartLabel;\n }\n } else {\n toolText = text.replace(slLib.spanAdditionRegx, '$2');\n text = text.replace(slLib.spanAdditionRegx, slLib.spanAdditionReplacer);\n text = text.replace(/()/g, '$1');\n\n container.innerHTML = text;\n\n spanArr = container[documentSupport.childRetriverFn](documentSupport.childRetriverString);\n\n for (x = 0, y = spanArr.length; x < y; x += 1) {\n elem = spanArr[x];\n //chech whether this span is temporary inserted span from it's class\n if (documentSupport.noClassTesting || slLib.classNameReg.test(elem.className)) {\n chr = elem.innerHTML;\n if (chr !== '') {\n if (chr === ' ') {\n spaceIndex = characterArr.length;\n } else if (chr === '-') {\n dashIndex = characterArr.length;\n }\n\n characterArr.push({\n spaceIdx: spaceIndex,\n dashIdx: dashIndex,\n elem: elem\n });\n oriTextArr.push(chr);\n }\n }\n }\n\n i = 0;\n len = characterArr.length;\n minWidth = characterArr[0].elem.offsetWidth;\n\n if (minWidth > maxWidth) {\n smartLabel.text = '';\n smartLabel.width = smartLabel.oriTextWidth = smartLabel.height = smartLabel.oriTextHeight = 0;\n\n return smartLabel;\n } else if (minWidth > maxWidthWithEll && !this._showNoEllipses) {\n\n maxWidthWithEll = maxWidth - 2 * dotWidth;\n if (maxWidthWithEll > minWidth) {\n ellipsesStr = '..';\n } else {\n maxWidthWithEll = maxWidth - dotWidth;\n if (maxWidthWithEll > minWidth) {\n ellipsesStr = '.';\n } else {\n maxWidthWithEll = 0;\n ellipsesStr = '';\n }\n }\n }\n\n initialLeft = characterArr[0].elem.offsetLeft;\n initialTop = characterArr[0].elem.offsetTop;\n\n if (noWrap) {\n for (; i < len; i += 1) {\n elem = characterArr[i].elem;\n elemRightMostPoint = elem.offsetLeft - initialLeft + elem.offsetWidth;\n\n if (elemRightMostPoint > maxWidthWithEll) {\n if (!removeFromIndexForEllipses) {\n removeFromIndexForEllipses = i;\n }\n if (container.offsetWidth > maxWidth) {\n removeFromIndex = i;\n i = len;\n }\n }\n }\n } else {\n for (; i < len; i += 1) {\n elem = characterArr[i].elem;\n elemLowestPoint = elem.offsetHeight + (elem.offsetTop - initialTop);\n elemRightMostPoint = elem.offsetLeft - initialLeft + elem.offsetWidth;\n\n lastBR = null;\n\n if (elemRightMostPoint > maxWidthWithEll) {\n if (!removeFromIndexForEllipses) {\n removeFromIndexForEllipses = i;\n }\n\n if (elemRightMostPoint > maxWidth) {\n lastSpace = characterArr[i].spaceIdx;\n lastDash = characterArr[i].dashIdx;\n if (lastSpace > lastIndexBroken) {\n characterArr[lastSpace].elem.innerHTML = '
';\n lastIndexBroken = lastSpace;\n } else if (lastDash > lastIndexBroken) {\n if (lastDash === i) {\n // in case the overflowing character itself is the '-'\n characterArr[lastDash].elem.innerHTML = '
-';\n } else {\n characterArr[lastDash].elem.innerHTML = '-
';\n }\n lastIndexBroken = lastDash;\n } else {\n elem.parentNode.insertBefore(lastBR = doc.createElement('br'), elem);\n }\n\n //check whether this break made current element outside the area height\n if (elem.offsetHeight + elem.offsetTop > maxHeight) {\n //remove the lastly inserted line break\n if (lastBR) {\n lastBR.parentNode.removeChild(lastBR);\n } else if (lastIndexBroken === lastDash) {\n characterArr[lastDash].elem.innerHTML = '-';\n } else {\n characterArr[lastSpace].elem.innerHTML = ' ';\n }\n removeFromIndex = i;\n //break the looping condition\n i = len;\n } else {\n removeFromIndexForEllipses = null;\n }\n }\n } else {\n //check whether this break made current element outside the area height\n if (elemLowestPoint > maxHeight) {\n removeFromIndex = i;\n i = len;\n }\n }\n }\n }\n\n if (removeFromIndex < len) {\n //set the trancated property of the smartlabel\n smartLabel.isTruncated = true;\n\n /** @todo is this really needed? */\n removeFromIndexForEllipses = removeFromIndexForEllipses ? removeFromIndexForEllipses : removeFromIndex;\n\n for (i = len - 1; i >= removeFromIndexForEllipses; i -= 1) {\n elem = characterArr[i].elem;\n //chech whether this span is temporary inserted span from it's class\n elem.parentNode.removeChild(elem);\n }\n\n for (; i >= 0; i -= 1) {\n elem = characterArr[i].elem;\n if (slLib.classNameBrReg.test(elem.className)) {\n //chech whether this span is temporary inserted span from it's class\n elem.parentNode.removeChild(elem);\n } else {\n i = 0;\n }\n }\n }\n\n //get the smart text\n smartLabel.text = container.innerHTML.replace(slLib.spanRemovalRegx, '$1').replace(/\\&\\;/g, '&');\n if (smartLabel.isTruncated) {\n smartLabel.text += ellipsesStr;\n smartLabel.tooltext = toolText;\n }\n }\n\n smartLabel.height = container.offsetHeight;\n smartLabel.width = container.offsetWidth;\n\n return smartLabel;\n } else {\n smartLabel.error = new Error('Body Tag Missing!');\n return smartLabel;\n }\n};\n\n/*\n * Get the height and width of a text.\n *\n * @param {String} text - Text whose metrics to be measured\n * @param {Boolean} Optional detailedCalculationFlag - this flag if set it calculates per letter position\n * information and returns it. Ideally you dont need it unless you want to post process the\n * string. And its an EXPENSIVE OPERATION.\n *\n * @return {Object} - If detailedCalculationFlag is set to true the returned object would be\n * {\n * height: height of the text\n * width: width of the text\n * detailObj: detail calculation of letters in the format {lettername: width}\n * }\n * If detailedCalculationFlag is set to false the returned object wont have the detailObj prop.\n */\nSmartLabelManager.prototype.getOriSize = function (text, detailedCalculationFlag) {\n if (!this._init) {\n return false;\n }\n\n var textArr,\n letter,\n lSize,\n i,\n l,\n cumulativeSize = 0,\n height = 0,\n indiSizeStore = {};\n\n if (!detailedCalculationFlag) {\n return this._calCharDimWithCache(text);\n }\n\n // Calculate the width of every letter with an approximation\n textArr = text.split('');\n for (i = 0, l = textArr.length; i < l; i++) {\n letter = textArr[i];\n lSize = this._calCharDimWithCache(letter, true, textArr.length);\n height = max(height, lSize.height);\n cumulativeSize += lSize.width;\n indiSizeStore[letter] = lSize.width;\n }\n\n return {\n width: round(cumulativeSize),\n height: height,\n detailObj: indiSizeStore\n };\n};\n\n/*\n * Dispose the container and object allocated by the smartlabel\n */\nSmartLabelManager.prototype.dispose = function () {\n if (!this._init) {\n return this;\n }\n\n this._containerManager && this._containerManager.dispose && this._containerManager.dispose();\n\n delete this._container;\n delete this._context;\n delete this._cache;\n delete this._containerManager;\n delete this._containerObj;\n delete this.id;\n delete this.style;\n delete this.parentContainer;\n delete this._showNoEllipses;\n\n return this;\n};\n\nexports['default'] = SmartLabelManager;\nmodule.exports = exports['default'];","'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n\tvalue: true\n});\nvar lib = {\n\tinit: function init(win) {\n\t\tvar doc = win.document,\n\t\t nav = win.navigator,\n\t\t userAgent = nav.userAgent,\n\t\t DIV = 'DIV',\n\t\t ceil = Math.ceil,\n\t\t floor = Math.floor,\n\t\t containerInstanceCount = 0,\n\t\t clsNameSpace = 'fusioncharts-smartlabel-',\n\t\t containerClass = clsNameSpace + 'container',\n\t\t classNameWithTag = clsNameSpace + 'tag',\n\t\t classNameWithTagBR = clsNameSpace + 'br';\n\n\t\tlib = {\n\t\t\twin: win,\n\n\t\t\tcontainerClass: containerClass,\n\n\t\t\tclassNameWithTag: classNameWithTag,\n\n\t\t\tclassNameWithTagBR: classNameWithTagBR,\n\n\t\t\tmaxDefaultCacheLimit: 500,\n\n\t\t\tclassNameReg: new RegExp('\\b' + classNameWithTag + '\\b'),\n\n\t\t\tclassNameBrReg: new RegExp('\\b' + classNameWithTagBR + '\\b'),\n\n\t\t\tspanAdditionRegx: /(<[^<\\>]+?\\>)|(&(?:[a-z]+|#[0-9]+);|.)/ig,\n\n\t\t\tspanAdditionReplacer: '$1$2',\n\n\t\t\tspanRemovalRegx: new RegExp('\\\\]+?' + classNameWithTag + '[^\\\\>]{0,}\\\\>(.*?)\\\\<\\\\/span\\\\>', 'ig'),\n\n\t\t\txmlTagRegEx: new RegExp('<[^>][^<]*[^>]+>', 'i'),\n\n\t\t\tltgtRegex: /<|>/g,\n\n\t\t\tbrReplaceRegex: //ig,\n\n\t\t\ttestStrAvg: 'WgI',\n\n\t\t\t// This style is applied over the parent smartlabel container. The container is kept hidden from the viewport\n\t\t\tparentContainerStyle: {\n\t\t\t\tposition: 'absolute',\n\t\t\t\ttop: '-9999em',\n\t\t\t\twhiteSpace: 'nowrap',\n\t\t\t\tpadding: '0px',\n\t\t\t\twidth: '1px',\n\t\t\t\theight: '1px',\n\t\t\t\toverflow: 'hidden'\n\t\t\t},\n\n\t\t\t// All the style which might affect the text metrics\n\t\t\tsupportedStyle: {\n\t\t\t\tfont: 'font',\n\t\t\t\tfontFamily: 'font-family',\n\t\t\t\t'font-family': 'font-family',\n\t\t\t\tfontWeight: 'font-weight',\n\t\t\t\t'font-weight': 'font-weight',\n\t\t\t\tfontSize: 'font-size',\n\t\t\t\t'font-size': 'font-size',\n\t\t\t\tlineHeight: 'line-height',\n\t\t\t\t'line-height': 'line-height',\n\t\t\t\tfontStyle: 'font-style',\n\t\t\t\t'font-style': 'font-style'\n\t\t\t},\n\n\t\t\t// Get the support list for html the document where the text calcution is to be done.\n\t\t\tgetDocumentSupport: function getDocumentSupport() {\n\t\t\t\tvar childRetriverFn, childRetriverString, noClassTesting;\n\n\t\t\t\tif (doc.getElementsByClassName) {\n\t\t\t\t\tchildRetriverFn = 'getElementsByClassName';\n\t\t\t\t\tchildRetriverString = classNameWithTag;\n\t\t\t\t\tnoClassTesting = true;\n\t\t\t\t} else {\n\t\t\t\t\tchildRetriverFn = 'getElementsByTagName';\n\t\t\t\t\tchildRetriverString = 'span';\n\t\t\t\t\tnoClassTesting = false;\n\t\t\t\t}\n\n\t\t\t\treturn {\n\t\t\t\t\tisIE: /msie/i.test(userAgent) && !win.opera,\n\t\t\t\t\thasSVG: Boolean(win.SVGAngle || doc.implementation.hasFeature('http://www.w3.org/TR/SVG11/feature#BasicStructure', '1.1')),\n\t\t\t\t\tisHeadLess: new RegExp(' HtmlUnit').test(userAgent),\n\t\t\t\t\tisWebKit: new RegExp(' AppleWebKit/').test(userAgent),\n\t\t\t\t\tchildRetriverFn: childRetriverFn,\n\t\t\t\t\tchildRetriverString: childRetriverString,\n\t\t\t\t\tnoClassTesting: noClassTesting\n\t\t\t\t};\n\t\t\t},\n\n\t\t\t/*\n * Create a html div element and attach it with a parent. All the subsequent operations are performed\n * by upding this dom tree only.\n *\n * @param {HTMLElement} - The html element where the newly created div is to be attached. If not passed,\n * the new div is appended on the body.\n */\n\t\t\tcreateContainer: function createContainer(containerParent) {\n\t\t\t\tvar body, container;\n\n\t\t\t\tif (containerParent && (containerParent.offsetWidth || containerParent.offsetHeight)) {\n\t\t\t\t\tif (containerParent.appendChild) {\n\t\t\t\t\t\tcontainerParent.appendChild(container = doc.createElement(DIV));\n\t\t\t\t\t\tcontainer.className = containerClass;\n\t\t\t\t\t\tcontainer.setAttribute('aria-hidden', 'true');\n\t\t\t\t\t\tcontainer.setAttribute('role', 'presentation');\n\t\t\t\t\t\treturn container;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tbody = doc.getElementsByTagName('body')[0];\n\n\t\t\t\t\tif (body && body.appendChild) {\n\t\t\t\t\t\tcontainer = doc.createElement(DIV);\n\t\t\t\t\t\tcontainer.className = containerClass;\n\t\t\t\t\t\tcontainer.setAttribute('aria-hidden', 'true');\n\t\t\t\t\t\tcontainer.setAttribute('role', 'presentation');\n\t\t\t\t\t\tcontainerInstanceCount += 1;\n\t\t\t\t\t\tbody.appendChild(container);\n\t\t\t\t\t\treturn container;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// Finds a approximate position where the text is to be broken\n\t\t\tgetNearestBreakIndex: function getNearestBreakIndex(text, maxWidth, sl) {\n\t\t\t\tif (!text || !text.length) {\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\n\t\t\t\tvar difference,\n\t\t\t\t getWidth = sl._getWidthFn(),\n\t\t\t\t charLen = 0,\n\t\t\t\t increment = 0,\n\t\t\t\t oriWidth = getWidth(text),\n\t\t\t\t avgWidth = oriWidth / text.length;\n\n\t\t\t\tdifference = maxWidth;\n\t\t\t\tcharLen = ceil(maxWidth / avgWidth);\n\n\t\t\t\tif (oriWidth < maxWidth) {\n\t\t\t\t\treturn text.length - 1;\n\t\t\t\t}\n\n\t\t\t\tif (charLen > text.length) {\n\t\t\t\t\tdifference = maxWidth - oriWidth;\n\t\t\t\t\tcharLen = text.length;\n\t\t\t\t}\n\n\t\t\t\twhile (difference > 0) {\n\t\t\t\t\tdifference = maxWidth - getWidth(text.substr(0, charLen));\n\t\t\t\t\tincrement = floor(difference / avgWidth);\n\t\t\t\t\tif (increment) {\n\t\t\t\t\t\tcharLen += increment;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn charLen;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\twhile (difference < 0) {\n\t\t\t\t\tdifference = maxWidth - getWidth(text.substr(0, charLen));\n\t\t\t\t\tincrement = floor(difference / avgWidth);\n\t\t\t\t\tif (increment) {\n\t\t\t\t\t\tcharLen += increment;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn charLen;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn charLen;\n\t\t\t},\n\n\t\t\t/*\n * Determine lineheight of a text for a given style. It adds propery lineHeight to the style passed\n *\n * @param {Object} - The style based on which the text's metric needs to be calculated. The calculation happens\n * based on fontSize property, if its not present a default font size is assumed.\n *\n * @return {Object} - The style that was passed with lineHeight as a named propery set on the object.\n */\n\t\t\tsetLineHeight: function setLineHeight(styleObj) {\n\t\t\t\tvar fSize = styleObj.fontSize = styleObj.fontSize || '12px';\n\t\t\t\tstyleObj.lineHeight = styleObj.lineHeight || styleObj['line-height'] || parseInt(fSize, 10) * 1.2 + 'px';\n\t\t\t\treturn styleObj;\n\t\t\t}\n\t\t};\n\n\t\treturn lib;\n\t}\n};\n\nexports['default'] = lib;\nmodule.exports = exports['default'];","const Muze = require('./muze');\n\nmodule.exports = Muze.default ? Muze.default : Muze;\n","'use strict';\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _lib = require('./lib');\n\nvar _lib2 = _interopRequireDefault(_lib);\n\nvar slLib = _lib2['default'].init(typeof window !== \"undefined\" ? window : undefined),\n doc = slLib.win.document,\n documentSupport = slLib.getDocumentSupport(),\n SVG_BBOX_CORRECTION = documentSupport.isWebKit ? 0 : 4.5;\n\nfunction ContainerManager(parentContainer, isBrowserLess, maxContainers) {\n var svg;\n\n maxContainers = maxContainers > 5 ? maxContainers : 5;\n maxContainers = maxContainers < 20 ? maxContainers : 20;\n\n this.maxContainers = maxContainers;\n this.first = null;\n this.last = null;\n this.containers = {};\n this.length = 0;\n this.rootNode = parentContainer;\n\n if (isBrowserLess) {\n svg = doc.createElementNS('http://www.w3.org/2000/svg', 'svg');\n svg.setAttributeNS('http://www.w3.org/2000/svg', 'xlink', 'http://www.w3.org/1999/xlink');\n svg.setAttributeNS('http://www.w3.org/2000/svg', 'height', '0');\n svg.setAttributeNS('http://www.w3.org/2000/svg', 'width', '0');\n this.svgRoot = svg;\n this.rootNode.appendChild(svg);\n }\n}\n\nContainerManager.prototype.get = function (style) {\n var diff,\n key,\n containerObj,\n containers = this.containers,\n len = this.length,\n max = this.maxContainers,\n keyStr = '';\n\n for (key in slLib.supportedStyle) {\n if (style[key] !== undefined) {\n keyStr += slLib.supportedStyle[key] + ':' + style[key] + ';';\n }\n }\n\n if (!keyStr) {\n return false;\n }\n\n if (containerObj = containers[keyStr]) {\n if (this.first !== containerObj) {\n containerObj.prev && (containerObj.prev.next = containerObj.next);\n containerObj.next && (containerObj.next.prev = containerObj.prev);\n containerObj.next = this.first;\n containerObj.next.prev = containerObj;\n this.last === containerObj && (this.last = containerObj.prev);\n containerObj.prev = null;\n this.first = containerObj;\n }\n } else {\n if (len >= max) {\n diff = len - max + 1;\n // +1 is to remove an extra entry to make space for the new container to be added.\n while (diff--) {\n this.removeContainer(this.last);\n }\n }\n containerObj = this.addContainer(keyStr);\n }\n\n return containerObj;\n};\n\nContainerManager.prototype.addContainer = function (keyStr) {\n var node, container;\n\n this.containers[keyStr] = container = {\n next: null,\n prev: null,\n node: null,\n ellipsesWidth: 0,\n lineHeight: 0,\n dotWidth: 0,\n avgCharWidth: 4,\n keyStr: keyStr,\n charCache: {}\n };\n\n // Since the container objects are arranged from most recent to least recent order, we need to add the new\n // object at the beginning of the list.\n container.next = this.first;\n container.next && (container.next.prev = container);\n this.first = container;\n if (!this.last) {\n this.last = container;\n }\n this.length += 1;\n\n node = container.node = doc.createElement('div');\n this.rootNode.appendChild(node);\n\n if (documentSupport.isIE && !documentSupport.hasSVG) {\n node.style.setAttribute('cssText', keyStr);\n } else {\n node.setAttribute('style', keyStr);\n }\n\n node.setAttribute('aria-hidden', 'true');\n node.setAttribute('role', 'presentation');\n node.style.display = 'inline-block';\n\n node.innerHTML = slLib.testStrAvg; // A test string.\n container.lineHeight = node.offsetHeight;\n container.avgCharWidth = node.offsetWidth / 3;\n\n if (documentSupport.isBrowserLess) {\n node = container.svgText = doc.createElementNS('http://www.w3.org/2000/svg', 'text');\n node.setAttribute('style', keyStr);\n this.svgRoot.appendChild(node);\n\n node.textContent = slLib.testStrAvg; // A test string.\n container.lineHeight = node.getBBox().height;\n container.avgCharWidth = (node.getBBox().width - SVG_BBOX_CORRECTION) / 3;\n\n node.textContent = '...';\n container.ellipsesWidth = node.getBBox().width - SVG_BBOX_CORRECTION;\n node.textContent = '.';\n container.dotWidth = node.getBBox().width - SVG_BBOX_CORRECTION;\n } else {\n node.innerHTML = '...';\n container.ellipsesWidth = node.offsetWidth;\n node.innerHTML = '.';\n container.dotWidth = node.offsetWidth;\n node.innerHTML = '';\n }\n\n return container;\n};\n\nContainerManager.prototype.removeContainer = function (cObj) {\n var keyStr = cObj.keyStr;\n\n if (!keyStr || !this.length || !cObj) {\n return;\n }\n this.length -= 1;\n\n cObj.prev && (cObj.prev.next = cObj.next);\n cObj.next && (cObj.next.prev = cObj.prev);\n this.first === cObj && (this.first = cObj.next);\n this.last === cObj && (this.last = cObj.prev);\n\n cObj.node.parentNode.removeChild(cObj.node);\n\n delete this.containers[keyStr];\n};\n\nContainerManager.prototype.dispose = function () {\n var key,\n containers = this.containers;\n\n this.maxContainers = null;\n for (key in containers) {\n this.removeContainer(containers[key]);\n }\n\n this.rootNode.parentNode.removeChild(this.rootNode);\n\n this.rootNode = null;\n this.first = null;\n this.last = null;\n};\n\nmodule.exports = ContainerManager;","export default function(a, b) {\n return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","import ascending from \"./ascending\";\n\nexport default function(compare) {\n if (compare.length === 1) compare = ascendingComparator(compare);\n return {\n left: function(a, x, lo, hi) {\n if (lo == null) lo = 0;\n if (hi == null) hi = a.length;\n while (lo < hi) {\n var mid = lo + hi >>> 1;\n if (compare(a[mid], x) < 0) lo = mid + 1;\n else hi = mid;\n }\n return lo;\n },\n right: function(a, x, lo, hi) {\n if (lo == null) lo = 0;\n if (hi == null) hi = a.length;\n while (lo < hi) {\n var mid = lo + hi >>> 1;\n if (compare(a[mid], x) > 0) hi = mid;\n else lo = mid + 1;\n }\n return lo;\n }\n };\n}\n\nfunction ascendingComparator(f) {\n return function(d, x) {\n return ascending(f(d), x);\n };\n}\n","import ascending from \"./ascending\";\nimport bisector from \"./bisector\";\n\nvar ascendingBisect = bisector(ascending);\nexport var bisectRight = ascendingBisect.right;\nexport var bisectLeft = ascendingBisect.left;\nexport default bisectRight;\n","import {pair} from \"./pairs\";\n\nexport default function(values0, values1, reduce) {\n var n0 = values0.length,\n n1 = values1.length,\n values = new Array(n0 * n1),\n i0,\n i1,\n i,\n value0;\n\n if (reduce == null) reduce = pair;\n\n for (i0 = i = 0; i0 < n0; ++i0) {\n for (value0 = values0[i0], i1 = 0; i1 < n1; ++i1, ++i) {\n values[i] = reduce(value0, values1[i1]);\n }\n }\n\n return values;\n}\n","export default function(x) {\n return x === null ? NaN : +x;\n}\n","var array = Array.prototype;\n\nexport var slice = array.slice;\nexport var map = array.map;\n","export default function(start, stop, step) {\n start = +start, stop = +stop, step = (n = arguments.length) < 2 ? (stop = start, start = 0, 1) : n < 3 ? 1 : +step;\n\n var i = -1,\n n = Math.max(0, Math.ceil((stop - start) / step)) | 0,\n range = new Array(n);\n\n while (++i < n) {\n range[i] = start + i * step;\n }\n\n return range;\n}\n","var e10 = Math.sqrt(50),\n e5 = Math.sqrt(10),\n e2 = Math.sqrt(2);\n\nexport default function(start, stop, count) {\n var reverse,\n i = -1,\n n,\n ticks,\n step;\n\n stop = +stop, start = +start, count = +count;\n if (start === stop && count > 0) return [start];\n if (reverse = stop < start) n = start, start = stop, stop = n;\n if ((step = tickIncrement(start, stop, count)) === 0 || !isFinite(step)) return [];\n\n if (step > 0) {\n start = Math.ceil(start / step);\n stop = Math.floor(stop / step);\n ticks = new Array(n = Math.ceil(stop - start + 1));\n while (++i < n) ticks[i] = (start + i) * step;\n } else {\n start = Math.floor(start * step);\n stop = Math.ceil(stop * step);\n ticks = new Array(n = Math.ceil(start - stop + 1));\n while (++i < n) ticks[i] = (start - i) / step;\n }\n\n if (reverse) ticks.reverse();\n\n return ticks;\n}\n\nexport function tickIncrement(start, stop, count) {\n var step = (stop - start) / Math.max(0, count),\n power = Math.floor(Math.log(step) / Math.LN10),\n error = step / Math.pow(10, power);\n return power >= 0\n ? (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1) * Math.pow(10, power)\n : -Math.pow(10, -power) / (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1);\n}\n\nexport function tickStep(start, stop, count) {\n var step0 = Math.abs(stop - start) / Math.max(0, count),\n step1 = Math.pow(10, Math.floor(Math.log(step0) / Math.LN10)),\n error = step0 / step1;\n if (error >= e10) step1 *= 10;\n else if (error >= e5) step1 *= 5;\n else if (error >= e2) step1 *= 2;\n return stop < start ? -step1 : step1;\n}\n","export default function(values) {\n return Math.ceil(Math.log(values.length) / Math.LN2) + 1;\n}\n","import number from \"./number\";\n\nexport default function(values, p, valueof) {\n if (valueof == null) valueof = number;\n if (!(n = values.length)) return;\n if ((p = +p) <= 0 || n < 2) return +valueof(values[0], 0, values);\n if (p >= 1) return +valueof(values[n - 1], n - 1, values);\n var n,\n i = (n - 1) * p,\n i0 = Math.floor(i),\n value0 = +valueof(values[i0], i0, values),\n value1 = +valueof(values[i0 + 1], i0 + 1, values);\n return value0 + (value1 - value0) * (i - i0);\n}\n","export var prefix = \"$\";\n\nfunction Map() {}\n\nMap.prototype = map.prototype = {\n constructor: Map,\n has: function(key) {\n return (prefix + key) in this;\n },\n get: function(key) {\n return this[prefix + key];\n },\n set: function(key, value) {\n this[prefix + key] = value;\n return this;\n },\n remove: function(key) {\n var property = prefix + key;\n return property in this && delete this[property];\n },\n clear: function() {\n for (var property in this) if (property[0] === prefix) delete this[property];\n },\n keys: function() {\n var keys = [];\n for (var property in this) if (property[0] === prefix) keys.push(property.slice(1));\n return keys;\n },\n values: function() {\n var values = [];\n for (var property in this) if (property[0] === prefix) values.push(this[property]);\n return values;\n },\n entries: function() {\n var entries = [];\n for (var property in this) if (property[0] === prefix) entries.push({key: property.slice(1), value: this[property]});\n return entries;\n },\n size: function() {\n var size = 0;\n for (var property in this) if (property[0] === prefix) ++size;\n return size;\n },\n empty: function() {\n for (var property in this) if (property[0] === prefix) return false;\n return true;\n },\n each: function(f) {\n for (var property in this) if (property[0] === prefix) f(this[property], property.slice(1), this);\n }\n};\n\nfunction map(object, f) {\n var map = new Map;\n\n // Copy constructor.\n if (object instanceof Map) object.each(function(value, key) { map.set(key, value); });\n\n // Index array by numeric index or specified key function.\n else if (Array.isArray(object)) {\n var i = -1,\n n = object.length,\n o;\n\n if (f == null) while (++i < n) map.set(i, object[i]);\n else while (++i < n) map.set(f(o = object[i], i, object), o);\n }\n\n // Convert object to map.\n else if (object) for (var key in object) map.set(key, object[key]);\n\n return map;\n}\n\nexport default map;\n","import map from \"./map\";\n\nexport default function() {\n var keys = [],\n sortKeys = [],\n sortValues,\n rollup,\n nest;\n\n function apply(array, depth, createResult, setResult) {\n if (depth >= keys.length) {\n if (sortValues != null) array.sort(sortValues);\n return rollup != null ? rollup(array) : array;\n }\n\n var i = -1,\n n = array.length,\n key = keys[depth++],\n keyValue,\n value,\n valuesByKey = map(),\n values,\n result = createResult();\n\n while (++i < n) {\n if (values = valuesByKey.get(keyValue = key(value = array[i]) + \"\")) {\n values.push(value);\n } else {\n valuesByKey.set(keyValue, [value]);\n }\n }\n\n valuesByKey.each(function(values, key) {\n setResult(result, key, apply(values, depth, createResult, setResult));\n });\n\n return result;\n }\n\n function entries(map, depth) {\n if (++depth > keys.length) return map;\n var array, sortKey = sortKeys[depth - 1];\n if (rollup != null && depth >= keys.length) array = map.entries();\n else array = [], map.each(function(v, k) { array.push({key: k, values: entries(v, depth)}); });\n return sortKey != null ? array.sort(function(a, b) { return sortKey(a.key, b.key); }) : array;\n }\n\n return nest = {\n object: function(array) { return apply(array, 0, createObject, setObject); },\n map: function(array) { return apply(array, 0, createMap, setMap); },\n entries: function(array) { return entries(apply(array, 0, createMap, setMap), 0); },\n key: function(d) { keys.push(d); return nest; },\n sortKeys: function(order) { sortKeys[keys.length - 1] = order; return nest; },\n sortValues: function(order) { sortValues = order; return nest; },\n rollup: function(f) { rollup = f; return nest; }\n };\n}\n\nfunction createObject() {\n return {};\n}\n\nfunction setObject(object, key, value) {\n object[key] = value;\n}\n\nfunction createMap() {\n return map();\n}\n\nfunction setMap(map, key, value) {\n map.set(key, value);\n}\n","import {default as map, prefix} from \"./map\";\n\nfunction Set() {}\n\nvar proto = map.prototype;\n\nSet.prototype = set.prototype = {\n constructor: Set,\n has: proto.has,\n add: function(value) {\n value += \"\";\n this[prefix + value] = value;\n return this;\n },\n remove: proto.remove,\n clear: proto.clear,\n values: proto.keys,\n size: proto.size,\n empty: proto.empty,\n each: proto.each\n};\n\nfunction set(object, f) {\n var set = new Set;\n\n // Copy constructor.\n if (object instanceof Set) object.each(function(value) { set.add(value); });\n\n // Otherwise, assume it’s an array.\n else if (object) {\n var i = -1, n = object.length;\n if (f == null) while (++i < n) set.add(object[i]);\n else while (++i < n) set.add(f(object[i], i, object));\n }\n\n return set;\n}\n\nexport default set;\n","var array = Array.prototype;\n\nexport var map = array.map;\nexport var slice = array.slice;\n","import {map} from \"d3-collection\";\nimport {slice} from \"./array\";\n\nexport var implicit = {name: \"implicit\"};\n\nexport default function ordinal(range) {\n var index = map(),\n domain = [],\n unknown = implicit;\n\n range = range == null ? [] : slice.call(range);\n\n function scale(d) {\n var key = d + \"\", i = index.get(key);\n if (!i) {\n if (unknown !== implicit) return unknown;\n index.set(key, i = domain.push(d));\n }\n return range[(i - 1) % range.length];\n }\n\n scale.domain = function(_) {\n if (!arguments.length) return domain.slice();\n domain = [], index = map();\n var i = -1, n = _.length, d, key;\n while (++i < n) if (!index.has(key = (d = _[i]) + \"\")) index.set(key, domain.push(d));\n return scale;\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = slice.call(_), scale) : range.slice();\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n scale.copy = function() {\n return ordinal()\n .domain(domain)\n .range(range)\n .unknown(unknown);\n };\n\n return scale;\n}\n","import {range as sequence} from \"d3-array\";\nimport ordinal from \"./ordinal\";\n\nexport default function band() {\n var scale = ordinal().unknown(undefined),\n domain = scale.domain,\n ordinalRange = scale.range,\n range = [0, 1],\n step,\n bandwidth,\n round = false,\n paddingInner = 0,\n paddingOuter = 0,\n align = 0.5;\n\n delete scale.unknown;\n function rescale() {\n var n = domain().length,\n reverse = range[1] < range[0],\n start = range[reverse - 0],\n stop = range[1 - reverse];\n step = (stop - start) / Math.max(1, n - paddingInner + paddingOuter * 2);\n if (round) step = Math.floor(step);\n start += (stop - start - step * (n - paddingInner)) * align;\n bandwidth = step * (1 - paddingInner);\n if (round) start = Math.round(start), bandwidth = Math.round(bandwidth);\n var values = sequence(n).map(function(i) { return start + step * i; });\n return ordinalRange(reverse ? values.reverse() : values);\n }\n\n scale.domain = function(_) {\n return arguments.length ? (domain(_), rescale()) : domain();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = [+_[0], +_[1]], rescale()) : range.slice();\n };\n\n scale.rangeRound = function(_) {\n return range = [+_[0], +_[1]], round = true, rescale();\n };\n\n scale.bandwidth = function() {\n return bandwidth;\n };\n\n scale.step = function() {\n return step;\n };\n\n scale.round = function(_) {\n return arguments.length ? (round = !!_, rescale()) : round;\n };\n\n scale.padding = function(_) {\n return arguments.length ? (paddingInner = paddingOuter = Math.max(0, Math.min(1, _)), rescale()) : paddingInner;\n };\n\n scale.paddingInner = function(_) {\n return arguments.length ? (paddingInner = Math.max(0, Math.min(1, _)), rescale()) : paddingInner;\n };\n\n scale.paddingOuter = function(_) {\n return arguments.length ? (paddingOuter = Math.max(0, Math.min(1, _)), rescale()) : paddingOuter;\n };\n\n scale.align = function(_) {\n return arguments.length ? (align = Math.max(0, Math.min(1, _)), rescale()) : align;\n };\n\n scale.copy = function() {\n return band()\n .domain(domain())\n .range(range)\n .round(round)\n .paddingInner(paddingInner)\n .paddingOuter(paddingOuter)\n .align(align);\n };\n\n scale.invertExtent = function(r0, r1) {\n var lo = +r0,\n hi = arguments.length > 1 ? +r1 : lo,\n reverse = range[1] < range[0],\n values = reverse ? ordinalRange().reverse() : ordinalRange(),\n n = values.length - 1, a, b, t,\n hiIndex;\n values.push(values[n] + this.step());\n // order range inputs, bail if outside of scale range\n if (hi < lo) t = lo, lo = hi, hi = t;\n if (hi < values[0] || lo > range[1-reverse]) return undefined;\n\n // binary search to index into scale range\n a = Math.max(0, getClosestIndexOf(values, lo));\n hiIndex = getClosestIndexOf(values, hi);\n b = lo===hi ? a : Math.max(a, hiIndex - 1);\n\n // increment index a if lo is within padding gap\n // if (lo - values[a] > bandwidth + 1e-10) ++a;\n\n if (reverse) t = a, a = n - b, b = n - t; // map + swap\n return (a > b) ? undefined : domain().slice(a, b+1);\n };\n\n scale.invert = function (r0, r1) {\n var lo = +r0,\n hi = arguments.length > 1 ? +r1 : lo,\n reverse = range[1] < range[0],\n values = reverse ? ordinalRange().reverse() : ordinalRange(),\n n = values.length - 1,\n a,\n t;\n\n // order range inputs, bail if outside of scale range\n if (hi < lo) t = lo, lo = hi, hi = t;\n if (hi < values[0] || lo > range[1-reverse]) return undefined;\n\n // binary search to index into scale range\n a = Math.max(0, getClosestIndexOf(values, lo, 'left'));\n\n // increment index a if lo is within padding gap\n // if (lo - values[a] > bandwidth + 1e-10) ++a;\n\n return domain()[reverse ? n - a : a];\n }\n return rescale();\n}\n\nfunction pointish(scale) {\n var copy = scale.copy;\n\n scale.padding = scale.paddingOuter;\n delete scale.paddingInner;\n delete scale.paddingOuter;\n\n scale.copy = function() {\n return pointish(copy());\n };\n\n return scale;\n}\n\nexport function point() {\n return pointish(band().paddingInner(1));\n}\n\nfunction getClosestIndexOf (arr, value, side) {\n var low = 0,\n arrLen = arr.length,\n high = arrLen - 1,\n highVal,\n mid,\n d1,\n d2;\n\n while (low < high) {\n mid = Math.floor((low + high) / 2);\n d1 = Math.abs(arr[mid] - value);\n d2 = Math.abs(arr[mid + 1] - value);\n\n if (d2 <= d1) {\n low = mid + 1;\n }\n else {\n high = mid;\n }\n }\n\n if (!side) {\n return high;\n }\n\n highVal = arr[high];\n if (highVal === value) {\n return high;\n } else if (highVal > value) {\n if (high === 0) { return high; }\n return side === 'left'? high - 1 : high;\n } else {\n if (high === arr.length - 1) { return high; }\n return side === 'left'? high : high + 1;\n }\n}","export default function(constructor, factory, prototype) {\n constructor.prototype = factory.prototype = prototype;\n prototype.constructor = constructor;\n}\n\nexport function extend(parent, definition) {\n var prototype = Object.create(parent.prototype);\n for (var key in definition) prototype[key] = definition[key];\n return prototype;\n}\n","import define, {extend} from \"./define\";\n\nexport function Color() {}\n\nexport var darker = 0.7;\nexport var brighter = 1 / darker;\n\nvar reI = \"\\\\s*([+-]?\\\\d+)\\\\s*\",\n reN = \"\\\\s*([+-]?\\\\d*\\\\.?\\\\d+(?:[eE][+-]?\\\\d+)?)\\\\s*\",\n reP = \"\\\\s*([+-]?\\\\d*\\\\.?\\\\d+(?:[eE][+-]?\\\\d+)?)%\\\\s*\",\n reHex3 = /^#([0-9a-f]{3})$/,\n reHex6 = /^#([0-9a-f]{6})$/,\n reRgbInteger = new RegExp(\"^rgb\\\\(\" + [reI, reI, reI] + \"\\\\)$\"),\n reRgbPercent = new RegExp(\"^rgb\\\\(\" + [reP, reP, reP] + \"\\\\)$\"),\n reRgbaInteger = new RegExp(\"^rgba\\\\(\" + [reI, reI, reI, reN] + \"\\\\)$\"),\n reRgbaPercent = new RegExp(\"^rgba\\\\(\" + [reP, reP, reP, reN] + \"\\\\)$\"),\n reHslPercent = new RegExp(\"^hsl\\\\(\" + [reN, reP, reP] + \"\\\\)$\"),\n reHslaPercent = new RegExp(\"^hsla\\\\(\" + [reN, reP, reP, reN] + \"\\\\)$\");\n\nvar 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\ndefine(Color, color, {\n displayable: function() {\n return this.rgb().displayable();\n },\n hex: function() {\n return this.rgb().hex();\n },\n toString: function() {\n return this.rgb() + \"\";\n }\n});\n\nexport default function color(format) {\n var m;\n format = (format + \"\").trim().toLowerCase();\n return (m = reHex3.exec(format)) ? (m = parseInt(m[1], 16), new Rgb((m >> 8 & 0xf) | (m >> 4 & 0x0f0), (m >> 4 & 0xf) | (m & 0xf0), ((m & 0xf) << 4) | (m & 0xf), 1)) // #f00\n : (m = reHex6.exec(format)) ? rgbn(parseInt(m[1], 16)) // #ff0000\n : (m = reRgbInteger.exec(format)) ? new Rgb(m[1], m[2], m[3], 1) // rgb(255, 0, 0)\n : (m = reRgbPercent.exec(format)) ? new Rgb(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, 1) // rgb(100%, 0%, 0%)\n : (m = reRgbaInteger.exec(format)) ? rgba(m[1], m[2], m[3], m[4]) // rgba(255, 0, 0, 1)\n : (m = reRgbaPercent.exec(format)) ? rgba(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, m[4]) // rgb(100%, 0%, 0%, 1)\n : (m = reHslPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, 1) // hsl(120, 50%, 50%)\n : (m = reHslaPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, m[4]) // hsla(120, 50%, 50%, 1)\n : named.hasOwnProperty(format) ? rgbn(named[format])\n : format === \"transparent\" ? new Rgb(NaN, NaN, NaN, 0)\n : null;\n}\n\nfunction rgbn(n) {\n return new Rgb(n >> 16 & 0xff, n >> 8 & 0xff, n & 0xff, 1);\n}\n\nfunction rgba(r, g, b, a) {\n if (a <= 0) r = g = b = NaN;\n return new Rgb(r, g, b, a);\n}\n\nexport function rgbConvert(o) {\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Rgb;\n o = o.rgb();\n return new Rgb(o.r, o.g, o.b, o.opacity);\n}\n\nexport function rgb(r, g, b, opacity) {\n return arguments.length === 1 ? rgbConvert(r) : new Rgb(r, g, b, opacity == null ? 1 : opacity);\n}\n\nexport function Rgb(r, g, b, opacity) {\n this.r = +r;\n this.g = +g;\n this.b = +b;\n this.opacity = +opacity;\n}\n\ndefine(Rgb, rgb, extend(Color, {\n 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, this.opacity);\n },\n 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, this.opacity);\n },\n rgb: function() {\n return this;\n },\n 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 && (0 <= this.opacity && this.opacity <= 1);\n },\n hex: function() {\n return \"#\" + hex(this.r) + hex(this.g) + hex(this.b);\n },\n toString: function() {\n var a = this.opacity; a = isNaN(a) ? 1 : Math.max(0, Math.min(1, a));\n return (a === 1 ? \"rgb(\" : \"rgba(\")\n + Math.max(0, Math.min(255, Math.round(this.r) || 0)) + \", \"\n + Math.max(0, Math.min(255, Math.round(this.g) || 0)) + \", \"\n + Math.max(0, Math.min(255, Math.round(this.b) || 0))\n + (a === 1 ? \")\" : \", \" + a + \")\");\n }\n}));\n\nfunction hex(value) {\n value = Math.max(0, Math.min(255, Math.round(value) || 0));\n return (value < 16 ? \"0\" : \"\") + value.toString(16);\n}\n\nfunction hsla(h, s, l, a) {\n if (a <= 0) h = s = l = NaN;\n else if (l <= 0 || l >= 1) h = s = NaN;\n else if (s <= 0) h = NaN;\n return new Hsl(h, s, l, a);\n}\n\nexport function hslConvert(o) {\n if (o instanceof Hsl) return new Hsl(o.h, o.s, o.l, o.opacity);\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Hsl;\n if (o instanceof Hsl) return o;\n o = o.rgb();\n var r = o.r / 255,\n g = o.g / 255,\n b = o.b / 255,\n min = Math.min(r, g, b),\n max = Math.max(r, g, b),\n h = NaN,\n s = max - min,\n l = (max + min) / 2;\n if (s) {\n if (r === max) h = (g - b) / s + (g < b) * 6;\n else if (g === max) h = (b - r) / s + 2;\n else h = (r - g) / s + 4;\n s /= l < 0.5 ? max + min : 2 - max - min;\n h *= 60;\n } else {\n s = l > 0 && l < 1 ? 0 : h;\n }\n return new Hsl(h, s, l, o.opacity);\n}\n\nexport function hsl(h, s, l, opacity) {\n return arguments.length === 1 ? hslConvert(h) : new Hsl(h, s, l, opacity == null ? 1 : opacity);\n}\n\nfunction Hsl(h, s, l, opacity) {\n this.h = +h;\n this.s = +s;\n this.l = +l;\n this.opacity = +opacity;\n}\n\ndefine(Hsl, hsl, extend(Color, {\n brighter: function(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n darker: function(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n 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 < 0.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 this.opacity\n );\n },\n displayable: function() {\n return (0 <= this.s && this.s <= 1 || isNaN(this.s))\n && (0 <= this.l && this.l <= 1)\n && (0 <= this.opacity && this.opacity <= 1);\n }\n}));\n\n/* From FvD 13.37, CSS Color Module Level 3 */\nfunction 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","export var deg2rad = Math.PI / 180;\nexport var rad2deg = 180 / Math.PI;\n","import define, {extend} from \"./define\";\nimport {Color, rgbConvert, Rgb} from \"./color\";\nimport {deg2rad, rad2deg} from \"./math\";\n\n// https://beta.observablehq.com/@mbostock/lab-and-rgb\nvar K = 18,\n Xn = 0.96422,\n Yn = 1,\n Zn = 0.82521,\n t0 = 4 / 29,\n t1 = 6 / 29,\n t2 = 3 * t1 * t1,\n t3 = t1 * t1 * t1;\n\nfunction labConvert(o) {\n if (o instanceof Lab) return new Lab(o.l, o.a, o.b, o.opacity);\n if (o instanceof Hcl) {\n if (isNaN(o.h)) return new Lab(o.l, 0, 0, o.opacity);\n var h = o.h * deg2rad;\n return new Lab(o.l, Math.cos(h) * o.c, Math.sin(h) * o.c, o.opacity);\n }\n if (!(o instanceof Rgb)) o = rgbConvert(o);\n var r = rgb2lrgb(o.r),\n g = rgb2lrgb(o.g),\n b = rgb2lrgb(o.b),\n y = xyz2lab((0.2225045 * r + 0.7168786 * g + 0.0606169 * b) / Yn), x, z;\n if (r === g && g === b) x = z = y; else {\n x = xyz2lab((0.4360747 * r + 0.3850649 * g + 0.1430804 * b) / Xn);\n z = xyz2lab((0.0139322 * r + 0.0971045 * g + 0.7141733 * b) / Zn);\n }\n return new Lab(116 * y - 16, 500 * (x - y), 200 * (y - z), o.opacity);\n}\n\nexport function gray(l, opacity) {\n return new Lab(l, 0, 0, opacity == null ? 1 : opacity);\n}\n\nexport default function lab(l, a, b, opacity) {\n return arguments.length === 1 ? labConvert(l) : new Lab(l, a, b, opacity == null ? 1 : opacity);\n}\n\nexport function Lab(l, a, b, opacity) {\n this.l = +l;\n this.a = +a;\n this.b = +b;\n this.opacity = +opacity;\n}\n\ndefine(Lab, lab, extend(Color, {\n brighter: function(k) {\n return new Lab(this.l + K * (k == null ? 1 : k), this.a, this.b, this.opacity);\n },\n darker: function(k) {\n return new Lab(this.l - K * (k == null ? 1 : k), this.a, this.b, this.opacity);\n },\n 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 x = Xn * lab2xyz(x);\n y = Yn * lab2xyz(y);\n z = Zn * lab2xyz(z);\n return new Rgb(\n lrgb2rgb( 3.1338561 * x - 1.6168667 * y - 0.4906146 * z),\n lrgb2rgb(-0.9787684 * x + 1.9161415 * y + 0.0334540 * z),\n lrgb2rgb( 0.0719453 * x - 0.2289914 * y + 1.4052427 * z),\n this.opacity\n );\n }\n}));\n\nfunction xyz2lab(t) {\n return t > t3 ? Math.pow(t, 1 / 3) : t / t2 + t0;\n}\n\nfunction lab2xyz(t) {\n return t > t1 ? t * t * t : t2 * (t - t0);\n}\n\nfunction lrgb2rgb(x) {\n return 255 * (x <= 0.0031308 ? 12.92 * x : 1.055 * Math.pow(x, 1 / 2.4) - 0.055);\n}\n\nfunction rgb2lrgb(x) {\n return (x /= 255) <= 0.04045 ? x / 12.92 : Math.pow((x + 0.055) / 1.055, 2.4);\n}\n\nfunction hclConvert(o) {\n if (o instanceof Hcl) return new Hcl(o.h, o.c, o.l, o.opacity);\n if (!(o instanceof Lab)) o = labConvert(o);\n if (o.a === 0 && o.b === 0) return new Hcl(NaN, 0, o.l, o.opacity);\n var h = Math.atan2(o.b, o.a) * rad2deg;\n return new Hcl(h < 0 ? h + 360 : h, Math.sqrt(o.a * o.a + o.b * o.b), o.l, o.opacity);\n}\n\nexport function lch(l, c, h, opacity) {\n return arguments.length === 1 ? hclConvert(l) : new Hcl(h, c, l, opacity == null ? 1 : opacity);\n}\n\nexport function hcl(h, c, l, opacity) {\n return arguments.length === 1 ? hclConvert(h) : new Hcl(h, c, l, opacity == null ? 1 : opacity);\n}\n\nexport function Hcl(h, c, l, opacity) {\n this.h = +h;\n this.c = +c;\n this.l = +l;\n this.opacity = +opacity;\n}\n\ndefine(Hcl, hcl, extend(Color, {\n brighter: function(k) {\n return new Hcl(this.h, this.c, this.l + K * (k == null ? 1 : k), this.opacity);\n },\n darker: function(k) {\n return new Hcl(this.h, this.c, this.l - K * (k == null ? 1 : k), this.opacity);\n },\n rgb: function() {\n return labConvert(this).rgb();\n }\n}));\n","import define, {extend} from \"./define\";\nimport {Color, rgbConvert, Rgb, darker, brighter} from \"./color\";\nimport {deg2rad, rad2deg} from \"./math\";\n\nvar A = -0.14861,\n B = +1.78277,\n C = -0.29227,\n D = -0.90649,\n E = +1.97294,\n ED = E * D,\n EB = E * B,\n BC_DA = B * C - D * A;\n\nfunction cubehelixConvert(o) {\n if (o instanceof Cubehelix) return new Cubehelix(o.h, o.s, o.l, o.opacity);\n if (!(o instanceof Rgb)) o = rgbConvert(o);\n var r = o.r / 255,\n g = o.g / 255,\n b = o.b / 255,\n l = (BC_DA * b + ED * r - EB * g) / (BC_DA + ED - EB),\n bl = b - l,\n 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 return new Cubehelix(h < 0 ? h + 360 : h, s, l, o.opacity);\n}\n\nexport default function cubehelix(h, s, l, opacity) {\n return arguments.length === 1 ? cubehelixConvert(h) : new Cubehelix(h, s, l, opacity == null ? 1 : opacity);\n}\n\nexport function Cubehelix(h, s, l, opacity) {\n this.h = +h;\n this.s = +s;\n this.l = +l;\n this.opacity = +opacity;\n}\n\ndefine(Cubehelix, cubehelix, extend(Color, {\n brighter: function(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Cubehelix(this.h, this.s, this.l * k, this.opacity);\n },\n darker: function(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Cubehelix(this.h, this.s, this.l * k, this.opacity);\n },\n 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 this.opacity\n );\n }\n}));\n","export function basis(t1, v0, v1, v2, v3) {\n var t2 = t1 * t1, t3 = t2 * t1;\n return ((1 - 3 * t1 + 3 * t2 - t3) * v0\n + (4 - 6 * t2 + 3 * t3) * v1\n + (1 + 3 * t1 + 3 * t2 - 3 * t3) * v2\n + t3 * v3) / 6;\n}\n\nexport default function(values) {\n var n = values.length - 1;\n return function(t) {\n var i = t <= 0 ? (t = 0) : t >= 1 ? (t = 1, n - 1) : Math.floor(t * n),\n v1 = values[i],\n v2 = values[i + 1],\n v0 = i > 0 ? values[i - 1] : 2 * v1 - v2,\n v3 = i < n - 1 ? values[i + 2] : 2 * v2 - v1;\n return basis((t - i / n) * n, v0, v1, v2, v3);\n };\n}\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","import constant from \"./constant\";\n\nfunction linear(a, d) {\n return function(t) {\n return a + t * d;\n };\n}\n\nfunction exponential(a, b, y) {\n return a = Math.pow(a, y), b = Math.pow(b, y) - a, y = 1 / y, function(t) {\n return Math.pow(a + t * b, y);\n };\n}\n\nexport function hue(a, b) {\n var d = b - a;\n return d ? linear(a, d > 180 || d < -180 ? d - 360 * Math.round(d / 360) : d) : constant(isNaN(a) ? b : a);\n}\n\nexport function gamma(y) {\n return (y = +y) === 1 ? nogamma : function(a, b) {\n return b - a ? exponential(a, b, y) : constant(isNaN(a) ? b : a);\n };\n}\n\nexport default function nogamma(a, b) {\n var d = b - a;\n return d ? linear(a, d) : constant(isNaN(a) ? b : a);\n}\n","import {rgb as colorRgb} from \"d3-color\";\nimport basis from \"./basis\";\nimport basisClosed from \"./basisClosed\";\nimport nogamma, {gamma} from \"./color\";\n\nexport default (function rgbGamma(y) {\n var color = gamma(y);\n\n function rgb(start, end) {\n var r = color((start = colorRgb(start)).r, (end = colorRgb(end)).r),\n g = color(start.g, end.g),\n b = color(start.b, end.b),\n opacity = nogamma(start.opacity, end.opacity);\n return function(t) {\n start.r = r(t);\n start.g = g(t);\n start.b = b(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n\n rgb.gamma = rgbGamma;\n\n return rgb;\n})(1);\n\nfunction rgbSpline(spline) {\n return function(colors) {\n var n = colors.length,\n r = new Array(n),\n g = new Array(n),\n b = new Array(n),\n i, color;\n for (i = 0; i < n; ++i) {\n color = colorRgb(colors[i]);\n r[i] = color.r || 0;\n g[i] = color.g || 0;\n b[i] = color.b || 0;\n }\n r = spline(r);\n g = spline(g);\n b = spline(b);\n color.opacity = 1;\n return function(t) {\n color.r = r(t);\n color.g = g(t);\n color.b = b(t);\n return color + \"\";\n };\n };\n}\n\nexport var rgbBasis = rgbSpline(basis);\nexport var rgbBasisClosed = rgbSpline(basisClosed);\n","export default function(a, b) {\n return a = +a, b -= a, function(t) {\n return a + b * t;\n };\n}\n","import {basis} from \"./basis\";\n\nexport default function(values) {\n var n = values.length;\n return function(t) {\n var i = Math.floor(((t %= 1) < 0 ? ++t : t) * n),\n v0 = values[(i + n - 1) % n],\n v1 = values[i % n],\n v2 = values[(i + 1) % n],\n v3 = values[(i + 2) % n];\n return basis((t - i / n) * n, v0, v1, v2, v3);\n };\n}\n","import number from \"./number\";\n\nvar reA = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n reB = new RegExp(reA.source, \"g\");\n\nfunction zero(b) {\n return function() {\n return b;\n };\n}\n\nfunction one(b) {\n return function(t) {\n return b(t) + \"\";\n };\n}\n\nexport default function(a, b) {\n var bi = reA.lastIndex = reB.lastIndex = 0, // scan index for next number in b\n am, // current match in a\n bm, // current match in b\n bs, // string preceding current number in b, if any\n i = -1, // index in s\n s = [], // string constants and placeholders\n q = []; // number interpolators\n\n // Coerce inputs to strings.\n a = a + \"\", b = b + \"\";\n\n // Interpolate pairs of numbers in a & b.\n while ((am = reA.exec(a))\n && (bm = reB.exec(b))) {\n if ((bs = bm.index) > bi) { // a string precedes the next number in b\n bs = b.slice(bi, bs);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n if ((am = am[0]) === (bm = bm[0])) { // numbers in a & b match\n if (s[i]) s[i] += bm; // coalesce with previous string\n else s[++i] = bm;\n } else { // interpolate non-matching numbers\n s[++i] = null;\n q.push({i: i, x: number(am, bm)});\n }\n bi = reB.lastIndex;\n }\n\n // Add remains of b.\n if (bi < b.length) {\n bs = b.slice(bi);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n\n // Special optimization for only a single match.\n // Otherwise, interpolate each of the numbers and rejoin the string.\n return s.length < 2 ? (q[0]\n ? one(q[0].x)\n : zero(b))\n : (b = q.length, function(t) {\n for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t);\n return s.join(\"\");\n });\n}\n","import decompose, {identity} from \"./decompose\";\n\nvar cssNode,\n cssRoot,\n cssView,\n svgNode;\n\nexport function parseCss(value) {\n if (value === \"none\") return identity;\n if (!cssNode) cssNode = document.createElement(\"DIV\"), cssRoot = document.documentElement, cssView = document.defaultView;\n cssNode.style.transform = value;\n value = cssView.getComputedStyle(cssRoot.appendChild(cssNode), null).getPropertyValue(\"transform\");\n cssRoot.removeChild(cssNode);\n value = value.slice(7, -1).split(\",\");\n return decompose(+value[0], +value[1], +value[2], +value[3], +value[4], +value[5]);\n}\n\nexport function parseSvg(value) {\n if (value == null) return identity;\n if (!svgNode) svgNode = document.createElementNS(\"http://www.w3.org/2000/svg\", \"g\");\n svgNode.setAttribute(\"transform\", value);\n if (!(value = svgNode.transform.baseVal.consolidate())) return identity;\n value = value.matrix;\n return decompose(value.a, value.b, value.c, value.d, value.e, value.f);\n}\n","import {color} from \"d3-color\";\nimport rgb from \"./rgb\";\nimport array from \"./array\";\nimport date from \"./date\";\nimport number from \"./number\";\nimport object from \"./object\";\nimport string from \"./string\";\nimport constant from \"./constant\";\n\nexport default function(a, b) {\n var t = typeof b, c;\n return b == null || t === \"boolean\" ? constant(b)\n : (t === \"number\" ? number\n : t === \"string\" ? ((c = color(b)) ? (b = c, rgb) : string)\n : b instanceof color ? rgb\n : b instanceof Date ? date\n : Array.isArray(b) ? array\n : typeof b.valueOf !== \"function\" && typeof b.toString !== \"function\" || isNaN(b) ? object\n : number)(a, b);\n}\n","export default function(a, b) {\n var d = new Date;\n return a = +a, b -= a, function(t) {\n return d.setTime(a + b * t), d;\n };\n}\n","import value from \"./value\";\n\nexport default function(a, b) {\n var nb = b ? b.length : 0,\n na = a ? Math.min(nb, a.length) : 0,\n x = new Array(na),\n c = new Array(nb),\n i;\n\n for (i = 0; i < na; ++i) x[i] = value(a[i], b[i]);\n for (; i < nb; ++i) c[i] = b[i];\n\n return function(t) {\n for (i = 0; i < na; ++i) c[i] = x[i](t);\n return c;\n };\n}\n","import value from \"./value\";\n\nexport default function(a, b) {\n var i = {},\n c = {},\n k;\n\n if (a === null || typeof a !== \"object\") a = {};\n if (b === null || typeof b !== \"object\") b = {};\n\n for (k in b) {\n if (k in a) {\n i[k] = value(a[k], b[k]);\n } else {\n c[k] = b[k];\n }\n }\n\n return function(t) {\n for (k in i) c[k] = i[k](t);\n return c;\n };\n}\n","export default function(a, b) {\n return a = +a, b -= a, function(t) {\n return Math.round(a + b * t);\n };\n}\n","var degrees = 180 / Math.PI;\n\nexport var identity = {\n translateX: 0,\n translateY: 0,\n rotate: 0,\n skewX: 0,\n scaleX: 1,\n scaleY: 1\n};\n\nexport default function(a, b, c, d, e, f) {\n var scaleX, scaleY, skewX;\n if (scaleX = Math.sqrt(a * a + b * b)) a /= scaleX, b /= scaleX;\n if (skewX = a * c + b * d) c -= a * skewX, d -= b * skewX;\n if (scaleY = Math.sqrt(c * c + d * d)) c /= scaleY, d /= scaleY, skewX /= scaleY;\n if (a * d < b * c) a = -a, b = -b, skewX = -skewX, scaleX = -scaleX;\n return {\n translateX: e,\n translateY: f,\n rotate: Math.atan2(b, a) * degrees,\n skewX: Math.atan(skewX) * degrees,\n scaleX: scaleX,\n scaleY: scaleY\n };\n}\n","import number from \"../number\";\nimport {parseCss, parseSvg} from \"./parse\";\n\nfunction interpolateTransform(parse, pxComma, pxParen, degParen) {\n\n function pop(s) {\n return s.length ? s.pop() + \" \" : \"\";\n }\n\n function translate(xa, ya, xb, yb, s, q) {\n if (xa !== xb || ya !== yb) {\n var i = s.push(\"translate(\", null, pxComma, null, pxParen);\n q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\n } else if (xb || yb) {\n s.push(\"translate(\" + xb + pxComma + yb + pxParen);\n }\n }\n\n function rotate(a, b, s, q) {\n if (a !== b) {\n if (a - b > 180) b += 360; else if (b - a > 180) a += 360; // shortest path\n q.push({i: s.push(pop(s) + \"rotate(\", null, degParen) - 2, x: number(a, b)});\n } else if (b) {\n s.push(pop(s) + \"rotate(\" + b + degParen);\n }\n }\n\n function skewX(a, b, s, q) {\n if (a !== b) {\n q.push({i: s.push(pop(s) + \"skewX(\", null, degParen) - 2, x: number(a, b)});\n } else if (b) {\n s.push(pop(s) + \"skewX(\" + b + degParen);\n }\n }\n\n function scale(xa, ya, xb, yb, s, q) {\n if (xa !== xb || ya !== yb) {\n var i = s.push(pop(s) + \"scale(\", null, \",\", null, \")\");\n q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\n } else if (xb !== 1 || yb !== 1) {\n s.push(pop(s) + \"scale(\" + xb + \",\" + yb + \")\");\n }\n }\n\n return function(a, b) {\n var s = [], // string constants and placeholders\n q = []; // number interpolators\n a = parse(a), b = parse(b);\n translate(a.translateX, a.translateY, b.translateX, b.translateY, s, q);\n rotate(a.rotate, b.rotate, s, q);\n skewX(a.skewX, b.skewX, s, q);\n scale(a.scaleX, a.scaleY, b.scaleX, b.scaleY, s, q);\n a = b = null; // gc\n return function(t) {\n var i = -1, n = q.length, o;\n while (++i < n) s[(o = q[i]).i] = o.x(t);\n return s.join(\"\");\n };\n };\n}\n\nexport var interpolateTransformCss = interpolateTransform(parseCss, \"px, \", \"px)\", \"deg)\");\nexport var interpolateTransformSvg = interpolateTransform(parseSvg, \", \", \")\", \")\");\n","var rho = Math.SQRT2,\n rho2 = 2,\n rho4 = 4,\n epsilon2 = 1e-12;\n\nfunction cosh(x) {\n return ((x = Math.exp(x)) + 1 / x) / 2;\n}\n\nfunction sinh(x) {\n return ((x = Math.exp(x)) - 1 / x) / 2;\n}\n\nfunction tanh(x) {\n return ((x = Math.exp(2 * x)) - 1) / (x + 1);\n}\n\n// p0 = [ux0, uy0, w0]\n// p1 = [ux1, uy1, w1]\nexport default function(p0, p1) {\n var ux0 = p0[0], uy0 = p0[1], w0 = p0[2],\n ux1 = p1[0], uy1 = p1[1], w1 = p1[2],\n dx = ux1 - ux0,\n dy = uy1 - uy0,\n d2 = dx * dx + dy * dy,\n i,\n S;\n\n // Special case for u0 ≅ u1.\n if (d2 < epsilon2) {\n S = Math.log(w1 / w0) / rho;\n i = function(t) {\n return [\n ux0 + t * dx,\n uy0 + t * dy,\n w0 * Math.exp(rho * t * S)\n ];\n }\n }\n\n // General case.\n else {\n var d1 = Math.sqrt(d2),\n b0 = (w1 * w1 - w0 * w0 + rho4 * d2) / (2 * w0 * rho2 * d1),\n b1 = (w1 * w1 - w0 * w0 - rho4 * d2) / (2 * w1 * rho2 * d1),\n r0 = Math.log(Math.sqrt(b0 * b0 + 1) - b0),\n r1 = Math.log(Math.sqrt(b1 * b1 + 1) - b1);\n S = (r1 - r0) / rho;\n i = function(t) {\n var s = t * S,\n coshr0 = cosh(r0),\n u = w0 / (rho2 * d1) * (coshr0 * tanh(rho * s + r0) - sinh(r0));\n return [\n ux0 + u * dx,\n uy0 + u * dy,\n w0 * coshr0 / cosh(rho * s + r0)\n ];\n }\n }\n\n i.duration = S * 1000;\n\n return i;\n}\n","import {hsl as colorHsl} from \"d3-color\";\nimport color, {hue} from \"./color\";\n\nfunction hsl(hue) {\n return function(start, end) {\n var h = hue((start = colorHsl(start)).h, (end = colorHsl(end)).h),\n s = color(start.s, end.s),\n l = color(start.l, end.l),\n opacity = color(start.opacity, end.opacity);\n return function(t) {\n start.h = h(t);\n start.s = s(t);\n start.l = l(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n}\n\nexport default hsl(hue);\nexport var hslLong = hsl(color);\n","import {hcl as colorHcl} from \"d3-color\";\nimport color, {hue} from \"./color\";\n\nfunction hcl(hue) {\n return function(start, end) {\n var h = hue((start = colorHcl(start)).h, (end = colorHcl(end)).h),\n c = color(start.c, end.c),\n l = color(start.l, end.l),\n opacity = color(start.opacity, end.opacity);\n return function(t) {\n start.h = h(t);\n start.c = c(t);\n start.l = l(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n}\n\nexport default hcl(hue);\nexport var hclLong = hcl(color);\n","import {cubehelix as colorCubehelix} from \"d3-color\";\nimport color, {hue} from \"./color\";\n\nfunction cubehelix(hue) {\n return (function cubehelixGamma(y) {\n y = +y;\n\n function cubehelix(start, end) {\n var h = hue((start = colorCubehelix(start)).h, (end = colorCubehelix(end)).h),\n s = color(start.s, end.s),\n l = color(start.l, end.l),\n opacity = color(start.opacity, end.opacity);\n return function(t) {\n start.h = h(t);\n start.s = s(t);\n start.l = l(Math.pow(t, y));\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n\n cubehelix.gamma = cubehelixGamma;\n\n return cubehelix;\n })(1);\n}\n\nexport default cubehelix(hue);\nexport var cubehelixLong = cubehelix(color);\n","export default function piecewise(interpolate, values) {\n var i = 0, n = values.length - 1, v = values[0], I = new Array(n < 0 ? 0 : n);\n while (i < n) I[i] = interpolate(v, v = values[++i]);\n return function(t) {\n var i = Math.max(0, Math.min(n - 1, Math.floor(t *= n)));\n return I[i](t - i);\n };\n}\n","export default function(interpolator, n) {\n var samples = new Array(n);\n for (var i = 0; i < n; ++i) samples[i] = interpolator(i / (n - 1));\n return samples;\n}\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","export default function(x) {\n return +x;\n}\n","import {bisect} from \"d3-array\";\nimport {interpolate as interpolateValue, interpolateRound} from \"d3-interpolate\";\nimport {map, slice} from \"./array\";\nimport constant from \"./constant\";\nimport number from \"./number\";\n\nvar unit = [0, 1];\n\nexport function deinterpolateLinear(a, b) {\n return (b -= (a = +a))\n ? function(x) { return (x - a) / b; }\n : constant(b);\n}\n\nfunction deinterpolateClamp(deinterpolate) {\n return function(a, b) {\n var d = deinterpolate(a = +a, b = +b);\n return function(x) { return x <= a ? 0 : x >= b ? 1 : d(x); };\n };\n}\n\nfunction reinterpolateClamp(reinterpolate) {\n return function(a, b) {\n var r = reinterpolate(a = +a, b = +b);\n return function(t) { return t <= 0 ? a : t >= 1 ? b : r(t); };\n };\n}\n\nfunction bimap(domain, range, deinterpolate, reinterpolate) {\n var d0 = domain[0], d1 = domain[1], r0 = range[0], r1 = range[1];\n if (d1 < d0) d0 = deinterpolate(d1, d0), r0 = reinterpolate(r1, r0);\n else d0 = deinterpolate(d0, d1), r0 = reinterpolate(r0, r1);\n return function(x) { return r0(d0(x)); };\n}\n\nfunction polymap(domain, range, deinterpolate, reinterpolate) {\n var j = Math.min(domain.length, range.length) - 1,\n d = new Array(j),\n r = new Array(j),\n i = -1;\n\n // Reverse descending domains.\n if (domain[j] < domain[0]) {\n domain = domain.slice().reverse();\n range = range.slice().reverse();\n }\n\n while (++i < j) {\n d[i] = deinterpolate(domain[i], domain[i + 1]);\n r[i] = reinterpolate(range[i], range[i + 1]);\n }\n\n return function(x) {\n var i = bisect(domain, x, 1, j) - 1;\n return r[i](d[i](x));\n };\n}\n\nexport function copy(source, target) {\n return target\n .domain(source.domain())\n .range(source.range())\n .interpolate(source.interpolate())\n .clamp(source.clamp());\n}\n\n// deinterpolate(a, b)(x) takes a domain value x in [a,b] and returns the corresponding parameter t in [0,1].\n// reinterpolate(a, b)(t) takes a parameter t in [0,1] and returns the corresponding domain value x in [a,b].\nexport default function continuous(deinterpolate, reinterpolate) {\n var domain = unit,\n range = unit,\n interpolate = interpolateValue,\n clamp = false,\n piecewise,\n output,\n input;\n\n function rescale() {\n piecewise = Math.min(domain.length, range.length) > 2 ? polymap : bimap;\n output = input = null;\n return scale;\n }\n\n function scale(x) {\n return (output || (output = piecewise(domain, range, clamp ? deinterpolateClamp(deinterpolate) : deinterpolate, interpolate)))(+x);\n }\n\n scale.invert = function(y) {\n return (input || (input = piecewise(range, domain, deinterpolateLinear, clamp ? reinterpolateClamp(reinterpolate) : reinterpolate)))(+y);\n };\n\n scale.domain = function(_) {\n return arguments.length ? (domain = map.call(_, number), rescale()) : domain.slice();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = slice.call(_), rescale()) : range.slice();\n };\n\n scale.rangeRound = function(_) {\n return range = slice.call(_), interpolate = interpolateRound, rescale();\n };\n\n scale.clamp = function(_) {\n return arguments.length ? (clamp = !!_, rescale()) : clamp;\n };\n\n scale.interpolate = function(_) {\n return arguments.length ? (interpolate = _, rescale()) : interpolate;\n };\n\n return rescale();\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].\nexport default function(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","import formatDecimal from \"./formatDecimal\";\n\nexport default function(x) {\n return x = formatDecimal(Math.abs(x)), x ? x[1] : NaN;\n}\n","// [[fill]align][sign][symbol][0][width][,][.precision][~][type]\nvar re = /^(?:(.)?([<>=^]))?([+\\-( ])?([$#])?(0)?(\\d+)?(,)?(\\.\\d+)?(~)?([a-z%])?$/i;\n\nexport default function formatSpecifier(specifier) {\n return new FormatSpecifier(specifier);\n}\n\nformatSpecifier.prototype = FormatSpecifier.prototype; // instanceof\n\nfunction FormatSpecifier(specifier) {\n if (!(match = re.exec(specifier))) throw new Error(\"invalid format: \" + specifier);\n var match;\n this.fill = match[1] || \" \";\n this.align = match[2] || \">\";\n this.sign = match[3] || \"-\";\n this.symbol = match[4] || \"\";\n this.zero = !!match[5];\n this.width = match[6] && +match[6];\n this.comma = !!match[7];\n this.precision = match[8] && +match[8].slice(1);\n this.trim = !!match[9];\n this.type = match[10] || \"\";\n}\n\nFormatSpecifier.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.trim ? \"~\" : \"\")\n + this.type;\n};\n","// Trims insignificant zeros, e.g., replaces 1.2000k with 1.2k.\nexport default function(s) {\n out: for (var n = s.length, i = 1, i0 = -1, i1; i < n; ++i) {\n switch (s[i]) {\n case \".\": i0 = i1 = i; break;\n case \"0\": if (i0 === 0) i0 = i; i1 = i; break;\n default: if (i0 > 0) { if (!+s[i]) break out; i0 = 0; } break;\n }\n }\n return i0 > 0 ? s.slice(0, i0) + s.slice(i1 + 1) : s;\n}\n","import formatDecimal from \"./formatDecimal\";\n\nexport var prefixExponent;\n\nexport default function(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, Math.max(0, p + i - 1))[0]; // less than 1y!\n}\n","import formatLocale from \"./locale\";\n\nvar locale;\nexport var format;\nexport var formatPrefix;\n\ndefaultLocale({\n decimal: \".\",\n thousands: \",\",\n grouping: [3],\n currency: [\"$\", \"\"]\n});\n\nexport default function defaultLocale(definition) {\n locale = formatLocale(definition);\n format = locale.format;\n formatPrefix = locale.formatPrefix;\n return locale;\n}\n","import formatDecimal from \"./formatDecimal\";\n\nexport default function(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","import formatPrefixAuto from \"./formatPrefixAuto\";\nimport formatRounded from \"./formatRounded\";\n\nexport default {\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","export default function(x) {\n return x;\n}\n","import exponent from \"./exponent\";\nimport formatGroup from \"./formatGroup\";\nimport formatNumerals from \"./formatNumerals\";\nimport formatSpecifier from \"./formatSpecifier\";\nimport formatTrim from \"./formatTrim\";\nimport formatTypes from \"./formatTypes\";\nimport {prefixExponent} from \"./formatPrefixAuto\";\nimport identity from \"./identity\";\n\nvar prefixes = [\"y\",\"z\",\"a\",\"f\",\"p\",\"n\",\"µ\",\"m\",\"\",\"k\",\"M\",\"G\",\"T\",\"P\",\"E\",\"Z\",\"Y\"];\n\nexport default function(locale) {\n var group = locale.grouping && locale.thousands ? formatGroup(locale.grouping, locale.thousands) : identity,\n currency = locale.currency,\n decimal = locale.decimal,\n numerals = locale.numerals ? formatNumerals(locale.numerals) : identity,\n percent = locale.percent || \"%\";\n\n function newFormat(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 trim = specifier.trim,\n type = specifier.type;\n\n // The \"n\" type is an alias for \",g\".\n if (type === \"n\") comma = true, type = \"g\";\n\n // The \"\" type, and any invalid type, is an alias for \".12~g\".\n else if (!formatTypes[type]) precision == null && (precision = 12), trim = true, type = \"g\";\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 // 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) ? percent : \"\";\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 = /[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 ? 6\n : /[gprs]/.test(type) ? Math.max(1, Math.min(21, precision))\n : Math.max(0, Math.min(20, precision));\n\n function format(value) {\n var valuePrefix = prefix,\n valueSuffix = suffix,\n i, n, c;\n\n if (type === \"c\") {\n valueSuffix = formatType(value) + valueSuffix;\n value = \"\";\n } else {\n value = +value;\n\n // Perform the initial formatting.\n var valueNegative = value < 0;\n value = formatType(Math.abs(value), precision);\n\n // Trim insignificant zeros.\n if (trim) value = formatTrim(value);\n\n // If a negative value rounds to zero during formatting, treat as positive.\n if (valueNegative && +value === 0) valueNegative = false;\n\n // Compute the prefix and suffix.\n valuePrefix = (valueNegative ? (sign === \"(\" ? sign : \"-\") : sign === \"-\" || sign === \"(\" ? \"\" : sign) + valuePrefix;\n valueSuffix = (type === \"s\" ? prefixes[8 + prefixExponent / 3] : \"\") + valueSuffix + (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 i = -1, n = value.length;\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 \"<\": value = valuePrefix + value + valueSuffix + padding; break;\n case \"=\": value = valuePrefix + padding + value + valueSuffix; break;\n case \"^\": value = padding.slice(0, length = padding.length >> 1) + valuePrefix + value + valueSuffix + padding.slice(length); break;\n default: value = padding + valuePrefix + value + valueSuffix; break;\n }\n\n return numerals(value);\n }\n\n format.toString = function() {\n return specifier + \"\";\n };\n\n return format;\n }\n\n function formatPrefix(specifier, value) {\n var f = newFormat((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: newFormat,\n formatPrefix: formatPrefix\n };\n}\n","export default function(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","export default function(numerals) {\n return function(value) {\n return value.replace(/[0-9]/g, function(i) {\n return numerals[+i];\n });\n };\n}\n","import exponent from \"./exponent\";\n\nexport default function(step) {\n return Math.max(0, -exponent(Math.abs(step)));\n}\n","import {tickStep} from \"d3-array\";\nimport {format, formatPrefix, formatSpecifier, precisionFixed, precisionPrefix, precisionRound} from \"d3-format\";\n\nexport default function(domain, count, specifier) {\n var start = domain[0],\n stop = domain[domain.length - 1],\n step = tickStep(start, stop, count == null ? 10 : count),\n precision;\n specifier = formatSpecifier(specifier == null ? \",f\" : specifier);\n switch (specifier.type) {\n case \"s\": {\n var value = Math.max(Math.abs(start), Math.abs(stop));\n if (specifier.precision == null && !isNaN(precision = precisionPrefix(step, value))) specifier.precision = precision;\n return formatPrefix(specifier, value);\n }\n case \"\":\n case \"e\":\n case \"g\":\n case \"p\":\n case \"r\": {\n if (specifier.precision == null && !isNaN(precision = precisionRound(step, Math.max(Math.abs(start), Math.abs(stop))))) specifier.precision = precision - (specifier.type === \"e\");\n break;\n }\n case \"f\":\n case \"%\": {\n if (specifier.precision == null && !isNaN(precision = precisionFixed(step))) specifier.precision = precision - (specifier.type === \"%\") * 2;\n break;\n }\n }\n return format(specifier);\n}\n","import exponent from \"./exponent\";\n\nexport default function(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","import exponent from \"./exponent\";\n\nexport default function(step, max) {\n step = Math.abs(step), max = Math.abs(max) - step;\n return Math.max(0, exponent(max) - exponent(step)) + 1;\n}\n","import {ticks, tickIncrement} from \"d3-array\";\nimport {interpolateNumber as reinterpolate} from \"d3-interpolate\";\nimport {default as continuous, copy, deinterpolateLinear as deinterpolate} from \"./continuous\";\nimport tickFormat from \"./tickFormat\";\n\nexport function linearish(scale) {\n var domain = scale.domain;\n\n scale.ticks = function(count) {\n var d = domain();\n return ticks(d[0], d[d.length - 1], count == null ? 10 : count);\n };\n\n scale.tickFormat = function(count, specifier) {\n return tickFormat(domain(), count, specifier);\n };\n\n scale.nice = function(count) {\n if (count == null) count = 10;\n\n var d = domain(),\n i0 = 0,\n i1 = d.length - 1,\n start = d[i0],\n stop = d[i1],\n step;\n\n if (stop < start) {\n step = start, start = stop, stop = step;\n step = i0, i0 = i1, i1 = step;\n }\n\n step = tickIncrement(start, stop, count);\n\n if (step > 0) {\n start = Math.floor(start / step) * step;\n stop = Math.ceil(stop / step) * step;\n step = tickIncrement(start, stop, count);\n } else if (step < 0) {\n start = Math.ceil(start * step) / step;\n stop = Math.floor(stop * step) / step;\n step = tickIncrement(start, stop, count);\n }\n\n if (step > 0) {\n d[i0] = Math.floor(start / step) * step;\n d[i1] = Math.ceil(stop / step) * step;\n domain(d);\n } else if (step < 0) {\n d[i0] = Math.ceil(start * step) / step;\n d[i1] = Math.floor(stop * step) / step;\n domain(d);\n }\n\n return scale;\n };\n\n return scale;\n}\n\nexport default function linear() {\n var scale = continuous(deinterpolate, reinterpolate);\n\n scale.copy = function() {\n return copy(scale, linear());\n };\n\n return linearish(scale);\n}\n","import {map} from \"./array\";\nimport {linearish} from \"./linear\";\nimport number from \"./number\";\n\nexport default function identity() {\n var domain = [0, 1];\n\n function scale(x) {\n return +x;\n }\n\n scale.invert = scale;\n\n scale.domain = scale.range = function(_) {\n return arguments.length ? (domain = map.call(_, number), scale) : domain.slice();\n };\n\n scale.copy = function() {\n return identity().domain(domain);\n };\n\n return linearish(scale);\n}\n","export default function(domain, interval) {\n domain = domain.slice();\n\n var i0 = 0,\n i1 = domain.length - 1,\n x0 = domain[i0],\n x1 = domain[i1],\n t;\n\n if (x1 < x0) {\n t = i0, i0 = i1, i1 = t;\n t = x0, x0 = x1, x1 = t;\n }\n\n domain[i0] = interval.floor(x0);\n domain[i1] = interval.ceil(x1);\n return domain;\n}\n","import {ticks} from \"d3-array\";\nimport {format} from \"d3-format\";\nimport constant from \"./constant\";\nimport nice from \"./nice\";\nimport {default as continuous, copy} from \"./continuous\";\n\nfunction deinterpolate(a, b) {\n return (b = Math.log(b / a))\n ? function(x) { return Math.log(x / a) / b; }\n : constant(b);\n}\n\nfunction reinterpolate(a, b) {\n return a < 0\n ? function(t) { return -Math.pow(-b, t) * Math.pow(-a, 1 - t); }\n : function(t) { return Math.pow(b, t) * Math.pow(a, 1 - t); };\n}\n\nfunction pow10(x) {\n return isFinite(x) ? +(\"1e\" + x) : x < 0 ? 0 : x;\n}\n\nfunction powp(base) {\n return base === 10 ? pow10\n : base === Math.E ? Math.exp\n : function(x) { return Math.pow(base, x); };\n}\n\nfunction logp(base) {\n return base === Math.E ? Math.log\n : base === 10 && Math.log10\n || base === 2 && Math.log2\n || (base = Math.log(base), function(x) { return Math.log(x) / base; });\n}\n\nfunction reflect(f) {\n return function(x) {\n return -f(-x);\n };\n}\n\nexport default function log() {\n var scale = continuous(deinterpolate, reinterpolate).domain([1, 10]),\n domain = scale.domain,\n base = 10,\n logs = logp(10),\n pows = powp(10);\n\n function rescale() {\n logs = logp(base), pows = powp(base);\n if (domain()[0] < 0) logs = reflect(logs), pows = reflect(pows);\n return scale;\n }\n\n scale.base = function(_) {\n return arguments.length ? (base = +_, rescale()) : base;\n };\n\n scale.domain = function(_) {\n return arguments.length ? (domain(_), rescale()) : domain();\n };\n\n scale.ticks = function(count) {\n var d = domain(),\n u = d[0],\n v = d[d.length - 1],\n r;\n\n if (r = v < u) i = u, u = v, v = i;\n\n var i = logs(u),\n j = logs(v),\n p,\n k,\n t,\n n = count == null ? 10 : +count,\n z = [];\n\n if (!(base % 1) && j - i < n) {\n i = Math.round(i) - 1, j = Math.round(j) + 1;\n if (u > 0) for (; i < j; ++i) {\n for (k = 1, p = pows(i); k < base; ++k) {\n t = p * k;\n if (t < u) continue;\n if (t > v) break;\n z.push(t);\n }\n } else for (; i < j; ++i) {\n for (k = base - 1, p = pows(i); k >= 1; --k) {\n t = p * k;\n if (t < u) continue;\n if (t > v) break;\n z.push(t);\n }\n }\n } else {\n z = ticks(i, j, Math.min(j - i, n)).map(pows);\n }\n\n return r ? z.reverse() : z;\n };\n\n scale.tickFormat = function(count, specifier) {\n if (specifier == null) specifier = base === 10 ? \".0e\" : \",\";\n if (typeof specifier !== \"function\") specifier = format(specifier);\n if (count === Infinity) return specifier;\n if (count == null) count = 10;\n var k = Math.max(1, base * count / scale.ticks().length); // TODO fast estimate?\n return function(d) {\n var i = d / pows(Math.round(logs(d)));\n if (i * base < base - 0.5) i *= base;\n return i <= k ? specifier(d) : \"\";\n };\n };\n\n scale.nice = function() {\n return domain(nice(domain(), {\n floor: function(x) { return pows(Math.floor(logs(x))); },\n ceil: function(x) { return pows(Math.ceil(logs(x))); }\n }));\n };\n\n scale.copy = function() {\n return copy(scale, log().base(base));\n };\n\n return scale;\n}\n","import constant from \"./constant\";\nimport {linearish} from \"./linear\";\nimport {default as continuous, copy} from \"./continuous\";\n\nfunction raise(x, exponent) {\n return x < 0 ? -Math.pow(-x, exponent) : Math.pow(x, exponent);\n}\n\nexport default function pow() {\n var exponent = 1,\n scale = continuous(deinterpolate, reinterpolate),\n domain = scale.domain;\n\n function deinterpolate(a, b) {\n return (b = raise(b, exponent) - (a = raise(a, exponent)))\n ? function(x) { return (raise(x, exponent) - a) / b; }\n : constant(b);\n }\n\n function reinterpolate(a, b) {\n b = raise(b, exponent) - (a = raise(a, exponent));\n return function(t) { return raise(a + b * t, 1 / exponent); };\n }\n\n scale.exponent = function(_) {\n return arguments.length ? (exponent = +_, domain(domain())) : exponent;\n };\n\n scale.copy = function() {\n return copy(scale, pow().exponent(exponent));\n };\n\n return linearish(scale);\n}\n\nexport function sqrt() {\n return pow().exponent(0.5);\n}\n","import {ascending, bisect, quantile as threshold} from \"d3-array\";\nimport {slice} from \"./array\";\n\nexport default function quantile() {\n var domain = [],\n range = [],\n thresholds = [];\n\n function rescale() {\n var i = 0, n = Math.max(1, range.length);\n thresholds = new Array(n - 1);\n while (++i < n) thresholds[i - 1] = threshold(domain, i / n);\n return scale;\n }\n\n function scale(x) {\n if (!isNaN(x = +x)) return range[bisect(thresholds, x)];\n }\n\n scale.invertExtent = function(y) {\n var i = range.indexOf(y);\n return i < 0 ? [NaN, NaN] : [\n i > 0 ? thresholds[i - 1] : domain[0],\n i < thresholds.length ? thresholds[i] : domain[domain.length - 1]\n ];\n };\n\n scale.domain = function(_) {\n if (!arguments.length) return domain.slice();\n domain = [];\n for (var i = 0, n = _.length, d; i < n; ++i) if (d = _[i], d != null && !isNaN(d = +d)) domain.push(d);\n domain.sort(ascending);\n return rescale();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = slice.call(_), rescale()) : range.slice();\n };\n\n scale.quantiles = function() {\n return thresholds.slice();\n };\n\n scale.copy = function() {\n return quantile()\n .domain(domain)\n .range(range);\n };\n\n return scale;\n}\n","import {bisect} from \"d3-array\";\nimport {slice} from \"./array\";\nimport {linearish} from \"./linear\";\n\nexport default function quantize() {\n var x0 = 0,\n x1 = 1,\n n = 1,\n domain = [0.5],\n range = [0, 1];\n\n function scale(x) {\n if (x <= x) return range[bisect(domain, x, 0, n)];\n }\n\n function rescale() {\n var i = -1;\n domain = new Array(n);\n while (++i < n) domain[i] = ((i + 1) * x1 - (i - n) * x0) / (n + 1);\n return scale;\n }\n\n scale.domain = function(_) {\n return arguments.length ? (x0 = +_[0], x1 = +_[1], rescale()) : [x0, x1];\n };\n\n scale.range = function(_) {\n return arguments.length ? (n = (range = slice.call(_)).length - 1, rescale()) : range.slice();\n };\n\n scale.invertExtent = function(y) {\n var i = range.indexOf(y);\n return i < 0 ? [NaN, NaN]\n : i < 1 ? [x0, domain[0]]\n : i >= n ? [domain[n - 1], x1]\n : [domain[i - 1], domain[i]];\n };\n\n scale.copy = function() {\n return quantize()\n .domain([x0, x1])\n .range(range);\n };\n\n return linearish(scale);\n}\n","import {bisect} from \"d3-array\";\nimport {slice} from \"./array\";\n\nexport default function threshold() {\n var domain = [0.5],\n range = [0, 1],\n n = 1;\n\n function scale(x) {\n if (x <= x) return range[bisect(domain, x, 0, n)];\n }\n\n scale.domain = function(_) {\n return arguments.length ? (domain = slice.call(_), n = Math.min(domain.length, range.length - 1), scale) : domain.slice();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = slice.call(_), n = Math.min(domain.length, range.length - 1), scale) : range.slice();\n };\n\n scale.invertExtent = function(y) {\n var i = range.indexOf(y);\n return [domain[i - 1], domain[i]];\n };\n\n scale.copy = function() {\n return threshold()\n .domain(domain)\n .range(range);\n };\n\n return scale;\n}\n","var t0 = new Date,\n t1 = new Date;\n\nexport default function newInterval(floori, offseti, count, field) {\n\n function interval(date) {\n return floori(date = new Date(+date)), date;\n }\n\n interval.floor = interval;\n\n interval.ceil = function(date) {\n return floori(date = new Date(date - 1)), offseti(date, 1), floori(date), date;\n };\n\n interval.round = function(date) {\n var d0 = interval(date),\n d1 = interval.ceil(date);\n return date - d0 < d1 - date ? d0 : d1;\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 = [], previous;\n start = interval.ceil(start);\n step = step == null ? 1 : Math.floor(step);\n if (!(start < stop) || !(step > 0)) return range; // also handles Invalid Date\n do range.push(previous = new Date(+start)), offseti(start, step), floori(start);\n while (previous < start && start < stop);\n return range;\n };\n\n interval.filter = function(test) {\n return newInterval(function(date) {\n if (date >= date) while (floori(date), !test(date)) date.setTime(date - 1);\n }, function(date, step) {\n if (date >= date) {\n if (step < 0) while (++step <= 0) {\n while (offseti(date, -1), !test(date)) {} // eslint-disable-line no-empty\n } else while (--step >= 0) {\n while (offseti(date, +1), !test(date)) {} // eslint-disable-line no-empty\n }\n }\n });\n };\n\n if (count) {\n 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 interval.every = function(step) {\n step = Math.floor(step);\n return !isFinite(step) || !(step > 0) ? null\n : !(step > 1) ? interval\n : interval.filter(field\n ? function(d) { return field(d) % step === 0; }\n : function(d) { return interval.count(0, d) % step === 0; });\n };\n }\n\n return interval;\n}\n","import interval from \"./interval\";\n\nvar millisecond = interval(function() {\n // noop\n}, function(date, step) {\n date.setTime(+date + step);\n}, function(start, end) {\n return end - start;\n});\n\n// An optimized implementation for this simple case.\nmillisecond.every = function(k) {\n k = Math.floor(k);\n if (!isFinite(k) || !(k > 0)) return null;\n if (!(k > 1)) return millisecond;\n return interval(function(date) {\n date.setTime(Math.floor(date / k) * k);\n }, function(date, step) {\n date.setTime(+date + step * k);\n }, function(start, end) {\n return (end - start) / k;\n });\n};\n\nexport default millisecond;\nexport var milliseconds = millisecond.range;\n","export var durationSecond = 1e3;\nexport var durationMinute = 6e4;\nexport var durationHour = 36e5;\nexport var durationDay = 864e5;\nexport var durationWeek = 6048e5;\n","import interval from \"./interval\";\nimport {durationSecond} from \"./duration\";\n\nvar second = interval(function(date) {\n date.setTime(Math.floor(date / durationSecond) * durationSecond);\n}, function(date, step) {\n date.setTime(+date + step * durationSecond);\n}, function(start, end) {\n return (end - start) / durationSecond;\n}, function(date) {\n return date.getUTCSeconds();\n});\n\nexport default second;\nexport var seconds = second.range;\n","import interval from \"./interval\";\nimport {durationMinute} from \"./duration\";\n\nvar minute = interval(function(date) {\n date.setTime(Math.floor(date / durationMinute) * durationMinute);\n}, function(date, step) {\n date.setTime(+date + step * durationMinute);\n}, function(start, end) {\n return (end - start) / durationMinute;\n}, function(date) {\n return date.getMinutes();\n});\n\nexport default minute;\nexport var minutes = minute.range;\n","import interval from \"./interval\";\nimport {durationHour, durationMinute} from \"./duration\";\n\nvar hour = interval(function(date) {\n var offset = date.getTimezoneOffset() * durationMinute % durationHour;\n if (offset < 0) offset += durationHour;\n date.setTime(Math.floor((+date - offset) / durationHour) * durationHour + offset);\n}, function(date, step) {\n date.setTime(+date + step * durationHour);\n}, function(start, end) {\n return (end - start) / durationHour;\n}, function(date) {\n return date.getHours();\n});\n\nexport default hour;\nexport var hours = hour.range;\n","import interval from \"./interval\";\nimport {durationDay, durationMinute} from \"./duration\";\n\nvar day = interval(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()) * durationMinute) / durationDay;\n}, function(date) {\n return date.getDate() - 1;\n});\n\nexport default day;\nexport var days = day.range;\n","import interval from \"./interval\";\nimport {durationMinute, durationWeek} from \"./duration\";\n\nfunction weekday(i) {\n return interval(function(date) {\n date.setDate(date.getDate() - (date.getDay() + 7 - i) % 7);\n date.setHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setDate(date.getDate() + step * 7);\n }, function(start, end) {\n return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationWeek;\n });\n}\n\nexport var sunday = weekday(0);\nexport var monday = weekday(1);\nexport var tuesday = weekday(2);\nexport var wednesday = weekday(3);\nexport var thursday = weekday(4);\nexport var friday = weekday(5);\nexport var saturday = weekday(6);\n\nexport var sundays = sunday.range;\nexport var mondays = monday.range;\nexport var tuesdays = tuesday.range;\nexport var wednesdays = wednesday.range;\nexport var thursdays = thursday.range;\nexport var fridays = friday.range;\nexport var saturdays = saturday.range;\n","import interval from \"./interval\";\n\nvar month = interval(function(date) {\n date.setDate(1);\n date.setHours(0, 0, 0, 0);\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}, function(date) {\n return date.getMonth();\n});\n\nexport default month;\nexport var months = month.range;\n","import interval from \"./interval\";\n\nvar year = interval(function(date) {\n date.setMonth(0, 1);\n date.setHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setFullYear(date.getFullYear() + step);\n}, function(start, end) {\n return end.getFullYear() - start.getFullYear();\n}, function(date) {\n return date.getFullYear();\n});\n\n// An optimized implementation for this simple case.\nyear.every = function(k) {\n return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : interval(function(date) {\n date.setFullYear(Math.floor(date.getFullYear() / k) * k);\n date.setMonth(0, 1);\n date.setHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setFullYear(date.getFullYear() + step * k);\n });\n};\n\nexport default year;\nexport var years = year.range;\n","import interval from \"./interval\";\nimport {durationMinute} from \"./duration\";\n\nvar utcMinute = interval(function(date) {\n date.setUTCSeconds(0, 0);\n}, function(date, step) {\n date.setTime(+date + step * durationMinute);\n}, function(start, end) {\n return (end - start) / durationMinute;\n}, function(date) {\n return date.getUTCMinutes();\n});\n\nexport default utcMinute;\nexport var utcMinutes = utcMinute.range;\n","import interval from \"./interval\";\nimport {durationHour} from \"./duration\";\n\nvar utcHour = interval(function(date) {\n date.setUTCMinutes(0, 0, 0);\n}, function(date, step) {\n date.setTime(+date + step * durationHour);\n}, function(start, end) {\n return (end - start) / durationHour;\n}, function(date) {\n return date.getUTCHours();\n});\n\nexport default utcHour;\nexport var utcHours = utcHour.range;\n","import interval from \"./interval\";\nimport {durationDay} from \"./duration\";\n\nvar utcDay = interval(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) / durationDay;\n}, function(date) {\n return date.getUTCDate() - 1;\n});\n\nexport default utcDay;\nexport var utcDays = utcDay.range;\n","import interval from \"./interval\";\nimport {durationWeek} from \"./duration\";\n\nfunction utcWeekday(i) {\n return interval(function(date) {\n date.setUTCDate(date.getUTCDate() - (date.getUTCDay() + 7 - i) % 7);\n date.setUTCHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setUTCDate(date.getUTCDate() + step * 7);\n }, function(start, end) {\n return (end - start) / durationWeek;\n });\n}\n\nexport var utcSunday = utcWeekday(0);\nexport var utcMonday = utcWeekday(1);\nexport var utcTuesday = utcWeekday(2);\nexport var utcWednesday = utcWeekday(3);\nexport var utcThursday = utcWeekday(4);\nexport var utcFriday = utcWeekday(5);\nexport var utcSaturday = utcWeekday(6);\n\nexport var utcSundays = utcSunday.range;\nexport var utcMondays = utcMonday.range;\nexport var utcTuesdays = utcTuesday.range;\nexport var utcWednesdays = utcWednesday.range;\nexport var utcThursdays = utcThursday.range;\nexport var utcFridays = utcFriday.range;\nexport var utcSaturdays = utcSaturday.range;\n","import interval from \"./interval\";\n\nvar utcMonth = interval(function(date) {\n date.setUTCDate(1);\n date.setUTCHours(0, 0, 0, 0);\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}, function(date) {\n return date.getUTCMonth();\n});\n\nexport default utcMonth;\nexport var utcMonths = utcMonth.range;\n","import interval from \"./interval\";\n\nvar utcYear = interval(function(date) {\n date.setUTCMonth(0, 1);\n date.setUTCHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setUTCFullYear(date.getUTCFullYear() + step);\n}, function(start, end) {\n return end.getUTCFullYear() - start.getUTCFullYear();\n}, function(date) {\n return date.getUTCFullYear();\n});\n\n// An optimized implementation for this simple case.\nutcYear.every = function(k) {\n return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : interval(function(date) {\n date.setUTCFullYear(Math.floor(date.getUTCFullYear() / k) * k);\n date.setUTCMonth(0, 1);\n date.setUTCHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setUTCFullYear(date.getUTCFullYear() + step * k);\n });\n};\n\nexport default utcYear;\nexport var utcYears = utcYear.range;\n","import {\n timeDay,\n timeSunday,\n timeMonday,\n timeThursday,\n timeYear,\n utcDay,\n utcSunday,\n utcMonday,\n utcThursday,\n utcYear\n} from \"d3-time\";\n\nfunction 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\nfunction 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\nfunction newYear(y) {\n return {y: y, m: 0, d: 1, H: 0, M: 0, S: 0, L: 0};\n}\n\nexport default function formatLocale(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 periodRe = formatRe(locale_periods),\n 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 \"f\": formatMicroseconds,\n \"H\": formatHour24,\n \"I\": formatHour12,\n \"j\": formatDayOfYear,\n \"L\": formatMilliseconds,\n \"m\": formatMonthNumber,\n \"M\": formatMinutes,\n \"p\": formatPeriod,\n \"Q\": formatUnixTimestamp,\n \"s\": formatUnixTimestampSeconds,\n \"S\": formatSeconds,\n \"u\": formatWeekdayNumberMonday,\n \"U\": formatWeekNumberSunday,\n \"V\": formatWeekNumberISO,\n \"w\": formatWeekdayNumberSunday,\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 \"f\": formatUTCMicroseconds,\n \"H\": formatUTCHour24,\n \"I\": formatUTCHour12,\n \"j\": formatUTCDayOfYear,\n \"L\": formatUTCMilliseconds,\n \"m\": formatUTCMonthNumber,\n \"M\": formatUTCMinutes,\n \"p\": formatUTCPeriod,\n \"Q\": formatUnixTimestamp,\n \"s\": formatUnixTimestampSeconds,\n \"S\": formatUTCSeconds,\n \"u\": formatUTCWeekdayNumberMonday,\n \"U\": formatUTCWeekNumberSunday,\n \"V\": formatUTCWeekNumberISO,\n \"w\": formatUTCWeekdayNumberSunday,\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 \"f\": parseMicroseconds,\n \"H\": parseHour24,\n \"I\": parseHour24,\n \"j\": parseDayOfYear,\n \"L\": parseMilliseconds,\n \"m\": parseMonthNumber,\n \"M\": parseMinutes,\n \"p\": parsePeriod,\n \"Q\": parseUnixTimestamp,\n \"s\": parseUnixTimestampSeconds,\n \"S\": parseSeconds,\n \"u\": parseWeekdayNumberMonday,\n \"U\": parseWeekNumberSunday,\n \"V\": parseWeekNumberISO,\n \"w\": parseWeekdayNumberSunday,\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 if (!(date instanceof Date)) date = new Date(+date);\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 else pad = c === \"e\" ? \" \" : \"0\";\n if (format = formats[c]) c = format(date, 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 week, day;\n if (i != string.length) return null;\n\n // If a UNIX timestamp is specified, return it.\n if (\"Q\" in d) return new Date(d.Q);\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 // Convert day-of-week and week-of-year to day-of-year.\n if (\"V\" in d) {\n if (d.V < 1 || d.V > 53) return null;\n if (!(\"w\" in d)) d.w = 1;\n if (\"Z\" in d) {\n week = utcDate(newYear(d.y)), day = week.getUTCDay();\n week = day > 4 || day === 0 ? utcMonday.ceil(week) : utcMonday(week);\n week = utcDay.offset(week, (d.V - 1) * 7);\n d.y = week.getUTCFullYear();\n d.m = week.getUTCMonth();\n d.d = week.getUTCDate() + (d.w + 6) % 7;\n } else {\n week = newDate(newYear(d.y)), day = week.getDay();\n week = day > 4 || day === 0 ? timeMonday.ceil(week) : timeMonday(week);\n week = timeDay.offset(week, (d.V - 1) * 7);\n d.y = week.getFullYear();\n d.m = week.getMonth();\n d.d = week.getDate() + (d.w + 6) % 7;\n }\n } else if (\"W\" in d || \"U\" in d) {\n if (!(\"w\" in d)) d.w = \"u\" in d ? d.u % 7 : \"W\" in d ? 1 : 0;\n day = \"Z\" in d ? utcDate(newYear(d.y)).getUTCDay() : newDate(newYear(d.y)).getDay();\n d.m = 0;\n d.d = \"W\" in d ? (d.w + 6) % 7 + d.W * 7 - (day + 5) % 7 : d.w + d.U * 7 - (day + 6) % 7;\n }\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 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 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 parsePeriod(d, string, i) {\n var n = periodRe.exec(string.slice(i));\n return n ? (d.p = periodLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n }\n\n function parseShortWeekday(d, string, i) {\n var n = shortWeekdayRe.exec(string.slice(i));\n return n ? (d.w = shortWeekdayLookup[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[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[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[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 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.toString = function() { return specifier; };\n return f;\n },\n parse: function(specifier) {\n var p = newParse(specifier += \"\", localDate);\n p.toString = function() { return specifier; };\n return p;\n },\n utcFormat: function(specifier) {\n var f = newFormat(specifier += \"\", utcFormats);\n f.toString = function() { return specifier; };\n return f;\n },\n utcParse: function(specifier) {\n var p = newParse(specifier, utcDate);\n p.toString = function() { return specifier; };\n return p;\n }\n };\n}\n\nvar pads = {\"-\": \"\", \"_\": \" \", \"0\": \"0\"},\n numberRe = /^\\s*\\d+/, // note: ignores next directive\n percentRe = /^%/,\n requoteRe = /[\\\\^$*+?|[\\]().{}]/g;\n\nfunction 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\nfunction requote(s) {\n return s.replace(requoteRe, \"\\\\$&\");\n}\n\nfunction formatRe(names) {\n return new RegExp(\"^(?:\" + names.map(requote).join(\"|\") + \")\", \"i\");\n}\n\nfunction formatLookup(names) {\n var map = {}, i = -1, n = names.length;\n while (++i < n) map[names[i].toLowerCase()] = i;\n return map;\n}\n\nfunction parseWeekdayNumberSunday(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\nfunction parseWeekdayNumberMonday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 1));\n return n ? (d.u = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberSunday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.U = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberISO(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.V = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberMonday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.W = +n[0], i + n[0].length) : -1;\n}\n\nfunction 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\nfunction 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\nfunction parseZone(d, string, i) {\n var n = /^(Z)|([+-]\\d\\d)(?::?(\\d\\d))?/.exec(string.slice(i, i + 6));\n return n ? (d.Z = n[1] ? 0 : -(n[2] + (n[3] || \"00\")), i + n[0].length) : -1;\n}\n\nfunction 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\nfunction 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\nfunction 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\nfunction 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\nfunction 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\nfunction 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\nfunction 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\nfunction parseMicroseconds(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 6));\n return n ? (d.L = Math.floor(n[0] / 1000), i + n[0].length) : -1;\n}\n\nfunction parseLiteralPercent(d, string, i) {\n var n = percentRe.exec(string.slice(i, i + 1));\n return n ? i + n[0].length : -1;\n}\n\nfunction parseUnixTimestamp(d, string, i) {\n var n = numberRe.exec(string.slice(i));\n return n ? (d.Q = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseUnixTimestampSeconds(d, string, i) {\n var n = numberRe.exec(string.slice(i));\n return n ? (d.Q = (+n[0]) * 1000, i + n[0].length) : -1;\n}\n\nfunction formatDayOfMonth(d, p) {\n return pad(d.getDate(), p, 2);\n}\n\nfunction formatHour24(d, p) {\n return pad(d.getHours(), p, 2);\n}\n\nfunction formatHour12(d, p) {\n return pad(d.getHours() % 12 || 12, p, 2);\n}\n\nfunction formatDayOfYear(d, p) {\n return pad(1 + timeDay.count(timeYear(d), d), p, 3);\n}\n\nfunction formatMilliseconds(d, p) {\n return pad(d.getMilliseconds(), p, 3);\n}\n\nfunction formatMicroseconds(d, p) {\n return formatMilliseconds(d, p) + \"000\";\n}\n\nfunction formatMonthNumber(d, p) {\n return pad(d.getMonth() + 1, p, 2);\n}\n\nfunction formatMinutes(d, p) {\n return pad(d.getMinutes(), p, 2);\n}\n\nfunction formatSeconds(d, p) {\n return pad(d.getSeconds(), p, 2);\n}\n\nfunction formatWeekdayNumberMonday(d) {\n var day = d.getDay();\n return day === 0 ? 7 : day;\n}\n\nfunction formatWeekNumberSunday(d, p) {\n return pad(timeSunday.count(timeYear(d), d), p, 2);\n}\n\nfunction formatWeekNumberISO(d, p) {\n var day = d.getDay();\n d = (day >= 4 || day === 0) ? timeThursday(d) : timeThursday.ceil(d);\n return pad(timeThursday.count(timeYear(d), d) + (timeYear(d).getDay() === 4), p, 2);\n}\n\nfunction formatWeekdayNumberSunday(d) {\n return d.getDay();\n}\n\nfunction formatWeekNumberMonday(d, p) {\n return pad(timeMonday.count(timeYear(d), d), p, 2);\n}\n\nfunction formatYear(d, p) {\n return pad(d.getFullYear() % 100, p, 2);\n}\n\nfunction formatFullYear(d, p) {\n return pad(d.getFullYear() % 10000, p, 4);\n}\n\nfunction 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\nfunction formatUTCDayOfMonth(d, p) {\n return pad(d.getUTCDate(), p, 2);\n}\n\nfunction formatUTCHour24(d, p) {\n return pad(d.getUTCHours(), p, 2);\n}\n\nfunction formatUTCHour12(d, p) {\n return pad(d.getUTCHours() % 12 || 12, p, 2);\n}\n\nfunction formatUTCDayOfYear(d, p) {\n return pad(1 + utcDay.count(utcYear(d), d), p, 3);\n}\n\nfunction formatUTCMilliseconds(d, p) {\n return pad(d.getUTCMilliseconds(), p, 3);\n}\n\nfunction formatUTCMicroseconds(d, p) {\n return formatUTCMilliseconds(d, p) + \"000\";\n}\n\nfunction formatUTCMonthNumber(d, p) {\n return pad(d.getUTCMonth() + 1, p, 2);\n}\n\nfunction formatUTCMinutes(d, p) {\n return pad(d.getUTCMinutes(), p, 2);\n}\n\nfunction formatUTCSeconds(d, p) {\n return pad(d.getUTCSeconds(), p, 2);\n}\n\nfunction formatUTCWeekdayNumberMonday(d) {\n var dow = d.getUTCDay();\n return dow === 0 ? 7 : dow;\n}\n\nfunction formatUTCWeekNumberSunday(d, p) {\n return pad(utcSunday.count(utcYear(d), d), p, 2);\n}\n\nfunction formatUTCWeekNumberISO(d, p) {\n var day = d.getUTCDay();\n d = (day >= 4 || day === 0) ? utcThursday(d) : utcThursday.ceil(d);\n return pad(utcThursday.count(utcYear(d), d) + (utcYear(d).getUTCDay() === 4), p, 2);\n}\n\nfunction formatUTCWeekdayNumberSunday(d) {\n return d.getUTCDay();\n}\n\nfunction formatUTCWeekNumberMonday(d, p) {\n return pad(utcMonday.count(utcYear(d), d), p, 2);\n}\n\nfunction formatUTCYear(d, p) {\n return pad(d.getUTCFullYear() % 100, p, 2);\n}\n\nfunction formatUTCFullYear(d, p) {\n return pad(d.getUTCFullYear() % 10000, p, 4);\n}\n\nfunction formatUTCZone() {\n return \"+0000\";\n}\n\nfunction formatLiteralPercent() {\n return \"%\";\n}\n\nfunction formatUnixTimestamp(d) {\n return +d;\n}\n\nfunction formatUnixTimestampSeconds(d) {\n return Math.floor(+d / 1000);\n}\n","import formatLocale from \"./locale\";\n\nvar locale;\nexport var timeFormat;\nexport var timeParse;\nexport var utcFormat;\nexport var utcParse;\n\ndefaultLocale({\n dateTime: \"%x, %X\",\n date: \"%-m/%-d/%Y\",\n time: \"%-I:%M:%S %p\",\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\nexport default function defaultLocale(definition) {\n locale = formatLocale(definition);\n timeFormat = locale.format;\n timeParse = locale.parse;\n utcFormat = locale.utcFormat;\n utcParse = locale.utcParse;\n return locale;\n}\n","import {utcFormat} from \"./defaultLocale\";\n\nexport var isoSpecifier = \"%Y-%m-%dT%H:%M:%S.%LZ\";\n\nfunction formatIsoNative(date) {\n return date.toISOString();\n}\n\nvar formatIso = Date.prototype.toISOString\n ? formatIsoNative\n : utcFormat(isoSpecifier);\n\nexport default formatIso;\n","import {isoSpecifier} from \"./isoFormat\";\nimport {utcParse} from \"./defaultLocale\";\n\nfunction parseIsoNative(string) {\n var date = new Date(string);\n return isNaN(date) ? null : date;\n}\n\nvar parseIso = +new Date(\"2000-01-01T00:00:00.000Z\")\n ? parseIsoNative\n : utcParse(isoSpecifier);\n\nexport default parseIso;\n","import {bisector, tickStep} from \"d3-array\";\nimport {interpolateNumber as reinterpolate} from \"d3-interpolate\";\nimport {timeYear, timeMonth, timeWeek, timeDay, timeHour, timeMinute, timeSecond, timeMillisecond} from \"d3-time\";\nimport {timeFormat} from \"d3-time-format\";\nimport {map} from \"./array\";\nimport {default as continuous, copy, deinterpolateLinear as deinterpolate} from \"./continuous\";\nimport nice from \"./nice\";\n\nvar durationSecond = 1000,\n durationMinute = durationSecond * 60,\n durationHour = durationMinute * 60,\n durationDay = durationHour * 24,\n durationWeek = durationDay * 7,\n durationMonth = durationDay * 30,\n durationYear = durationDay * 365;\n\nfunction date(t) {\n return new Date(t);\n}\n\nfunction number(t) {\n return t instanceof Date ? +t : +new Date(+t);\n}\n\nexport function calendar(year, month, week, day, hour, minute, second, millisecond, format) {\n var scale = continuous(deinterpolate, reinterpolate),\n invert = scale.invert,\n domain = scale.domain;\n\n var formatMillisecond = format(\".%L\"),\n formatSecond = format(\":%S\"),\n formatMinute = format(\"%I:%M\"),\n formatHour = format(\"%I %p\"),\n formatDay = format(\"%a %d\"),\n formatWeek = format(\"%b %d\"),\n formatMonth = format(\"%B\"),\n formatYear = format(\"%Y\");\n\n var tickIntervals = [\n [second, 1, durationSecond],\n [second, 5, 5 * durationSecond],\n [second, 15, 15 * durationSecond],\n [second, 30, 30 * durationSecond],\n [minute, 1, durationMinute],\n [minute, 5, 5 * durationMinute],\n [minute, 15, 15 * durationMinute],\n [minute, 30, 30 * durationMinute],\n [ hour, 1, durationHour ],\n [ hour, 3, 3 * durationHour ],\n [ hour, 6, 6 * durationHour ],\n [ hour, 12, 12 * durationHour ],\n [ day, 1, durationDay ],\n [ day, 2, 2 * durationDay ],\n [ week, 1, durationWeek ],\n [ month, 1, durationMonth ],\n [ month, 3, 3 * durationMonth ],\n [ year, 1, durationYear ]\n ];\n\n function tickFormat(date) {\n return (second(date) < date ? formatMillisecond\n : minute(date) < date ? formatSecond\n : hour(date) < date ? formatMinute\n : day(date) < date ? formatHour\n : month(date) < date ? (week(date) < date ? formatDay : formatWeek)\n : year(date) < date ? formatMonth\n : formatYear)(date);\n }\n\n function tickInterval(interval, start, stop, step) {\n if (interval == null) interval = 10;\n\n // If a desired tick count is specified, pick a reasonable tick interval\n // based on the extent of the domain and a rough estimate of tick size.\n // Otherwise, assume interval is already a time interval and use it.\n if (typeof interval === \"number\") {\n var target = Math.abs(stop - start) / interval,\n i = bisector(function(i) { return i[2]; }).right(tickIntervals, target);\n if (i === tickIntervals.length) {\n step = tickStep(start / durationYear, stop / durationYear, interval);\n interval = year;\n } else if (i) {\n i = tickIntervals[target / tickIntervals[i - 1][2] < tickIntervals[i][2] / target ? i - 1 : i];\n step = i[1];\n interval = i[0];\n } else {\n step = Math.max(tickStep(start, stop, interval), 1);\n interval = millisecond;\n }\n }\n\n return step == null ? interval : interval.every(step);\n }\n\n scale.invert = function(y) {\n return new Date(invert(y));\n };\n\n scale.domain = function(_) {\n return arguments.length ? domain(map.call(_, number)) : domain().map(date);\n };\n\n scale.ticks = function(interval, step) {\n var d = domain(),\n t0 = d[0],\n t1 = d[d.length - 1],\n r = t1 < t0,\n t;\n if (r) t = t0, t0 = t1, t1 = t;\n t = tickInterval(interval, t0, t1, step);\n t = t ? t.range(t0, t1 + 1) : []; // inclusive stop\n return r ? t.reverse() : t;\n };\n\n scale.tickFormat = function(count, specifier) {\n return specifier == null ? tickFormat : format(specifier);\n };\n\n scale.nice = function(interval, step) {\n var d = domain();\n return (interval = tickInterval(interval, d[0], d[d.length - 1], step))\n ? domain(nice(d, interval))\n : scale;\n };\n\n scale.copy = function() {\n return copy(scale, calendar(year, month, week, day, hour, minute, second, millisecond, format));\n };\n\n return scale;\n}\n\nexport default function() {\n return calendar(timeYear, timeMonth, timeWeek, timeDay, timeHour, timeMinute, timeSecond, timeMillisecond, timeFormat).domain([new Date(2000, 0, 1), new Date(2000, 0, 2)]);\n}\n","export default function(s) {\n return s.match(/.{6}/g).map(function(x) {\n return \"#\" + x;\n });\n}\n","import colors from \"./colors\";\n\nexport default colors(\"1f77b4ff7f0e2ca02cd627289467bd8c564be377c27f7f7fbcbd2217becf\");\n","import colors from \"./colors\";\n\nexport default colors(\"393b795254a36b6ecf9c9ede6379398ca252b5cf6bcedb9c8c6d31bd9e39e7ba52e7cb94843c39ad494ad6616be7969c7b4173a55194ce6dbdde9ed6\");\n","import colors from \"./colors\";\n\nexport default colors(\"1f77b4aec7e8ff7f0effbb782ca02c98df8ad62728ff98969467bdc5b0d58c564bc49c94e377c2f7b6d27f7f7fc7c7c7bcbd22dbdb8d17becf9edae5\");\n","import colors from \"./colors\";\n\nexport default colors(\"3182bd6baed69ecae1c6dbefe6550dfd8d3cfdae6bfdd0a231a35474c476a1d99bc7e9c0756bb19e9ac8bcbddcdadaeb636363969696bdbdbdd9d9d9\");\n","import {cubehelix} from \"d3-color\";\nimport {interpolateCubehelixLong} from \"d3-interpolate\";\n\nexport default interpolateCubehelixLong(cubehelix(300, 0.5, 0.0), cubehelix(-240, 0.5, 1.0));\n","import {cubehelix} from \"d3-color\";\nimport {interpolateCubehelixLong} from \"d3-interpolate\";\n\nexport var warm = interpolateCubehelixLong(cubehelix(-100, 0.75, 0.35), cubehelix(80, 1.50, 0.8));\n\nexport var cool = interpolateCubehelixLong(cubehelix(260, 0.75, 0.35), cubehelix(80, 1.50, 0.8));\n\nvar rainbow = cubehelix();\n\nexport default function(t) {\n if (t < 0 || t > 1) t -= Math.floor(t);\n var ts = Math.abs(t - 0.5);\n rainbow.h = 360 * t - 100;\n rainbow.s = 1.5 - 1.5 * ts;\n rainbow.l = 0.8 - 0.9 * ts;\n return rainbow + \"\";\n}\n","import colors from \"./colors\";\n\nfunction ramp(range) {\n var n = range.length;\n return function(t) {\n return range[Math.max(0, Math.min(n - 1, Math.floor(t * n)))];\n };\n}\n\nexport default ramp(colors(\"44015444025645045745055946075a46085c460a5d460b5e470d60470e6147106347116447136548146748166848176948186a481a6c481b6d481c6e481d6f481f70482071482173482374482475482576482677482878482979472a7a472c7a472d7b472e7c472f7d46307e46327e46337f463480453581453781453882443983443a83443b84433d84433e85423f854240864241864142874144874045884046883f47883f48893e49893e4a893e4c8a3d4d8a3d4e8a3c4f8a3c508b3b518b3b528b3a538b3a548c39558c39568c38588c38598c375a8c375b8d365c8d365d8d355e8d355f8d34608d34618d33628d33638d32648e32658e31668e31678e31688e30698e306a8e2f6b8e2f6c8e2e6d8e2e6e8e2e6f8e2d708e2d718e2c718e2c728e2c738e2b748e2b758e2a768e2a778e2a788e29798e297a8e297b8e287c8e287d8e277e8e277f8e27808e26818e26828e26828e25838e25848e25858e24868e24878e23888e23898e238a8d228b8d228c8d228d8d218e8d218f8d21908d21918c20928c20928c20938c1f948c1f958b1f968b1f978b1f988b1f998a1f9a8a1e9b8a1e9c891e9d891f9e891f9f881fa0881fa1881fa1871fa28720a38620a48621a58521a68522a78522a88423a98324aa8325ab8225ac8226ad8127ad8128ae8029af7f2ab07f2cb17e2db27d2eb37c2fb47c31b57b32b67a34b67935b77937b87838b9773aba763bbb753dbc743fbc7340bd7242be7144bf7046c06f48c16e4ac16d4cc26c4ec36b50c46a52c56954c56856c66758c7655ac8645cc8635ec96260ca6063cb5f65cb5e67cc5c69cd5b6ccd5a6ece5870cf5773d05675d05477d1537ad1517cd2507fd34e81d34d84d44b86d54989d5488bd6468ed64590d74393d74195d84098d83e9bd93c9dd93ba0da39a2da37a5db36a8db34aadc32addc30b0dd2fb2dd2db5de2bb8de29bade28bddf26c0df25c2df23c5e021c8e020cae11fcde11dd0e11cd2e21bd5e21ad8e219dae319dde318dfe318e2e418e5e419e7e419eae51aece51befe51cf1e51df4e61ef6e620f8e621fbe723fde725\"));\n\nexport var magma = ramp(colors(\"00000401000501010601010802010902020b02020d03030f03031204041405041606051806051a07061c08071e0907200a08220b09240c09260d0a290e0b2b100b2d110c2f120d31130d34140e36150e38160f3b180f3d19103f1a10421c10441d11471e114920114b21114e22115024125325125527125829115a2a115c2c115f2d11612f116331116533106734106936106b38106c390f6e3b0f703d0f713f0f72400f74420f75440f764510774710784910784a10794c117a4e117b4f127b51127c52137c54137d56147d57157e59157e5a167e5c167f5d177f5f187f601880621980641a80651a80671b80681c816a1c816b1d816d1d816e1e81701f81721f817320817521817621817822817922827b23827c23827e24828025828125818326818426818627818827818928818b29818c29818e2a81902a81912b81932b80942c80962c80982d80992d809b2e7f9c2e7f9e2f7fa02f7fa1307ea3307ea5317ea6317da8327daa337dab337cad347cae347bb0357bb2357bb3367ab5367ab73779b83779ba3878bc3978bd3977bf3a77c03a76c23b75c43c75c53c74c73d73c83e73ca3e72cc3f71cd4071cf4070d0416fd2426fd3436ed5446dd6456cd8456cd9466bdb476adc4869de4968df4a68e04c67e24d66e34e65e44f64e55064e75263e85362e95462ea5661eb5760ec5860ed5a5fee5b5eef5d5ef05f5ef1605df2625df2645cf3655cf4675cf4695cf56b5cf66c5cf66e5cf7705cf7725cf8745cf8765cf9785df9795df97b5dfa7d5efa7f5efa815ffb835ffb8560fb8761fc8961fc8a62fc8c63fc8e64fc9065fd9266fd9467fd9668fd9869fd9a6afd9b6bfe9d6cfe9f6dfea16efea36ffea571fea772fea973feaa74feac76feae77feb078feb27afeb47bfeb67cfeb77efeb97ffebb81febd82febf84fec185fec287fec488fec68afec88cfeca8dfecc8ffecd90fecf92fed194fed395fed597fed799fed89afdda9cfddc9efddea0fde0a1fde2a3fde3a5fde5a7fde7a9fde9aafdebacfcecaefceeb0fcf0b2fcf2b4fcf4b6fcf6b8fcf7b9fcf9bbfcfbbdfcfdbf\"));\n\nexport var inferno = ramp(colors(\"00000401000501010601010802010a02020c02020e03021004031204031405041706041907051b08051d09061f0a07220b07240c08260d08290e092b10092d110a30120a32140b34150b37160b39180c3c190c3e1b0c411c0c431e0c451f0c48210c4a230c4c240c4f260c51280b53290b552b0b572d0b592f0a5b310a5c320a5e340a5f3609613809623909633b09643d09653e0966400a67420a68440a68450a69470b6a490b6a4a0c6b4c0c6b4d0d6c4f0d6c510e6c520e6d540f6d550f6d57106e59106e5a116e5c126e5d126e5f136e61136e62146e64156e65156e67166e69166e6a176e6c186e6d186e6f196e71196e721a6e741a6e751b6e771c6d781c6d7a1d6d7c1d6d7d1e6d7f1e6c801f6c82206c84206b85216b87216b88226a8a226a8c23698d23698f24699025689225689326679526679727669827669a28659b29649d29649f2a63a02a63a22b62a32c61a52c60a62d60a82e5fa92e5eab2f5ead305dae305cb0315bb1325ab3325ab43359b63458b73557b93556ba3655bc3754bd3853bf3952c03a51c13a50c33b4fc43c4ec63d4dc73e4cc83f4bca404acb4149cc4248ce4347cf4446d04545d24644d34743d44842d54a41d74b3fd84c3ed94d3dda4e3cdb503bdd513ade5238df5337e05536e15635e25734e35933e45a31e55c30e65d2fe75e2ee8602de9612bea632aeb6429eb6628ec6726ed6925ee6a24ef6c23ef6e21f06f20f1711ff1731df2741cf3761bf37819f47918f57b17f57d15f67e14f68013f78212f78410f8850ff8870ef8890cf98b0bf98c0af98e09fa9008fa9207fa9407fb9606fb9706fb9906fb9b06fb9d07fc9f07fca108fca309fca50afca60cfca80dfcaa0ffcac11fcae12fcb014fcb216fcb418fbb61afbb81dfbba1ffbbc21fbbe23fac026fac228fac42afac62df9c72ff9c932f9cb35f8cd37f8cf3af7d13df7d340f6d543f6d746f5d949f5db4cf4dd4ff4df53f4e156f3e35af3e55df2e661f2e865f2ea69f1ec6df1ed71f1ef75f1f179f2f27df2f482f3f586f3f68af4f88ef5f992f6fa96f8fb9af9fc9dfafda1fcffa4\"));\n\nexport var plasma = ramp(colors(\"0d088710078813078916078a19068c1b068d1d068e20068f2206902406912605912805922a05932c05942e05952f059631059733059735049837049938049a3a049a3c049b3e049c3f049c41049d43039e44039e46039f48039f4903a04b03a14c02a14e02a25002a25102a35302a35502a45601a45801a45901a55b01a55c01a65e01a66001a66100a76300a76400a76600a76700a86900a86a00a86c00a86e00a86f00a87100a87201a87401a87501a87701a87801a87a02a87b02a87d03a87e03a88004a88104a78305a78405a78606a68707a68808a68a09a58b0aa58d0ba58e0ca48f0da4910ea3920fa39410a29511a19613a19814a099159f9a169f9c179e9d189d9e199da01a9ca11b9ba21d9aa31e9aa51f99a62098a72197a82296aa2395ab2494ac2694ad2793ae2892b02991b12a90b22b8fb32c8eb42e8db52f8cb6308bb7318ab83289ba3388bb3488bc3587bd3786be3885bf3984c03a83c13b82c23c81c33d80c43e7fc5407ec6417dc7427cc8437bc9447aca457acb4679cc4778cc4977cd4a76ce4b75cf4c74d04d73d14e72d24f71d35171d45270d5536fd5546ed6556dd7566cd8576bd9586ada5a6ada5b69db5c68dc5d67dd5e66de5f65de6164df6263e06363e16462e26561e26660e3685fe4695ee56a5de56b5de66c5ce76e5be76f5ae87059e97158e97257ea7457eb7556eb7655ec7754ed7953ed7a52ee7b51ef7c51ef7e50f07f4ff0804ef1814df1834cf2844bf3854bf3874af48849f48948f58b47f58c46f68d45f68f44f79044f79143f79342f89441f89540f9973ff9983ef99a3efa9b3dfa9c3cfa9e3bfb9f3afba139fba238fca338fca537fca636fca835fca934fdab33fdac33fdae32fdaf31fdb130fdb22ffdb42ffdb52efeb72dfeb82cfeba2cfebb2bfebd2afebe2afec029fdc229fdc328fdc527fdc627fdc827fdca26fdcb26fccd25fcce25fcd025fcd225fbd324fbd524fbd724fad824fada24f9dc24f9dd25f8df25f8e125f7e225f7e425f6e626f6e826f5e926f5eb27f4ed27f3ee27f3f027f2f227f1f426f1f525f0f724f0f921\"));\n","import {linearish} from \"./linear\";\n\nexport default function sequential(interpolator) {\n var x0 = 0,\n x1 = 1,\n clamp = false;\n\n function scale(x) {\n var t = (x - x0) / (x1 - x0);\n return interpolator(clamp ? Math.max(0, Math.min(1, t)) : t);\n }\n\n scale.domain = function(_) {\n return arguments.length ? (x0 = +_[0], x1 = +_[1], scale) : [x0, x1];\n };\n\n scale.clamp = function(_) {\n return arguments.length ? (clamp = !!_, scale) : clamp;\n };\n\n scale.interpolator = function(_) {\n return arguments.length ? (interpolator = _, scale) : interpolator;\n };\n\n scale.copy = function() {\n return sequential(interpolator).domain([x0, x1]).clamp(clamp);\n };\n\n return linearish(scale);\n}\n","export default function(specifier) {\n var n = specifier.length / 6 | 0, colors = new Array(n), i = 0;\n while (i < n) colors[i] = \"#\" + specifier.slice(i * 6, ++i * 6);\n return colors;\n}\n","import colors from \"../colors\";\n\nexport default colors(\"7fc97fbeaed4fdc086ffff99386cb0f0027fbf5b17666666\");\n","import colors from \"../colors\";\n\nexport default colors(\"1f77b4ff7f0e2ca02cd627289467bd8c564be377c27f7f7fbcbd2217becf\");\n","import colors from \"../colors\";\n\nexport default colors(\"1b9e77d95f027570b3e7298a66a61ee6ab02a6761d666666\");\n","import colors from \"../colors\";\n\nexport default colors(\"a6cee31f78b4b2df8a33a02cfb9a99e31a1cfdbf6fff7f00cab2d66a3d9affff99b15928\");\n","import colors from \"../colors\";\n\nexport default colors(\"fbb4aeb3cde3ccebc5decbe4fed9a6ffffcce5d8bdfddaecf2f2f2\");\n","import colors from \"../colors\";\n\nexport default colors(\"b3e2cdfdcdaccbd5e8f4cae4e6f5c9fff2aef1e2cccccccc\");\n","import colors from \"../colors\";\n\nexport default colors(\"e41a1c377eb84daf4a984ea3ff7f00ffff33a65628f781bf999999\");\n","import colors from \"../colors\";\n\nexport default colors(\"66c2a5fc8d628da0cbe78ac3a6d854ffd92fe5c494b3b3b3\");\n","import colors from \"../colors\";\n\nexport default colors(\"8dd3c7ffffb3bebadafb807280b1d3fdb462b3de69fccde5d9d9d9bc80bdccebc5ffed6f\");\n","import {interpolateRgbBasis} from \"d3-interpolate\";\n\nexport default function(scheme) {\n return interpolateRgbBasis(scheme[scheme.length - 1]);\n}\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"d8b365f5f5f55ab4ac\",\n \"a6611adfc27d80cdc1018571\",\n \"a6611adfc27df5f5f580cdc1018571\",\n \"8c510ad8b365f6e8c3c7eae55ab4ac01665e\",\n \"8c510ad8b365f6e8c3f5f5f5c7eae55ab4ac01665e\",\n \"8c510abf812ddfc27df6e8c3c7eae580cdc135978f01665e\",\n \"8c510abf812ddfc27df6e8c3f5f5f5c7eae580cdc135978f01665e\",\n \"5430058c510abf812ddfc27df6e8c3c7eae580cdc135978f01665e003c30\",\n \"5430058c510abf812ddfc27df6e8c3f5f5f5c7eae580cdc135978f01665e003c30\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"af8dc3f7f7f77fbf7b\",\n \"7b3294c2a5cfa6dba0008837\",\n \"7b3294c2a5cff7f7f7a6dba0008837\",\n \"762a83af8dc3e7d4e8d9f0d37fbf7b1b7837\",\n \"762a83af8dc3e7d4e8f7f7f7d9f0d37fbf7b1b7837\",\n \"762a839970abc2a5cfe7d4e8d9f0d3a6dba05aae611b7837\",\n \"762a839970abc2a5cfe7d4e8f7f7f7d9f0d3a6dba05aae611b7837\",\n \"40004b762a839970abc2a5cfe7d4e8d9f0d3a6dba05aae611b783700441b\",\n \"40004b762a839970abc2a5cfe7d4e8f7f7f7d9f0d3a6dba05aae611b783700441b\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"e9a3c9f7f7f7a1d76a\",\n \"d01c8bf1b6dab8e1864dac26\",\n \"d01c8bf1b6daf7f7f7b8e1864dac26\",\n \"c51b7de9a3c9fde0efe6f5d0a1d76a4d9221\",\n \"c51b7de9a3c9fde0eff7f7f7e6f5d0a1d76a4d9221\",\n \"c51b7dde77aef1b6dafde0efe6f5d0b8e1867fbc414d9221\",\n \"c51b7dde77aef1b6dafde0eff7f7f7e6f5d0b8e1867fbc414d9221\",\n \"8e0152c51b7dde77aef1b6dafde0efe6f5d0b8e1867fbc414d9221276419\",\n \"8e0152c51b7dde77aef1b6dafde0eff7f7f7e6f5d0b8e1867fbc414d9221276419\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"998ec3f7f7f7f1a340\",\n \"5e3c99b2abd2fdb863e66101\",\n \"5e3c99b2abd2f7f7f7fdb863e66101\",\n \"542788998ec3d8daebfee0b6f1a340b35806\",\n \"542788998ec3d8daebf7f7f7fee0b6f1a340b35806\",\n \"5427888073acb2abd2d8daebfee0b6fdb863e08214b35806\",\n \"5427888073acb2abd2d8daebf7f7f7fee0b6fdb863e08214b35806\",\n \"2d004b5427888073acb2abd2d8daebfee0b6fdb863e08214b358067f3b08\",\n \"2d004b5427888073acb2abd2d8daebf7f7f7fee0b6fdb863e08214b358067f3b08\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"ef8a62f7f7f767a9cf\",\n \"ca0020f4a58292c5de0571b0\",\n \"ca0020f4a582f7f7f792c5de0571b0\",\n \"b2182bef8a62fddbc7d1e5f067a9cf2166ac\",\n \"b2182bef8a62fddbc7f7f7f7d1e5f067a9cf2166ac\",\n \"b2182bd6604df4a582fddbc7d1e5f092c5de4393c32166ac\",\n \"b2182bd6604df4a582fddbc7f7f7f7d1e5f092c5de4393c32166ac\",\n \"67001fb2182bd6604df4a582fddbc7d1e5f092c5de4393c32166ac053061\",\n \"67001fb2182bd6604df4a582fddbc7f7f7f7d1e5f092c5de4393c32166ac053061\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"ef8a62ffffff999999\",\n \"ca0020f4a582bababa404040\",\n \"ca0020f4a582ffffffbababa404040\",\n \"b2182bef8a62fddbc7e0e0e09999994d4d4d\",\n \"b2182bef8a62fddbc7ffffffe0e0e09999994d4d4d\",\n \"b2182bd6604df4a582fddbc7e0e0e0bababa8787874d4d4d\",\n \"b2182bd6604df4a582fddbc7ffffffe0e0e0bababa8787874d4d4d\",\n \"67001fb2182bd6604df4a582fddbc7e0e0e0bababa8787874d4d4d1a1a1a\",\n \"67001fb2182bd6604df4a582fddbc7ffffffe0e0e0bababa8787874d4d4d1a1a1a\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"fc8d59ffffbf91bfdb\",\n \"d7191cfdae61abd9e92c7bb6\",\n \"d7191cfdae61ffffbfabd9e92c7bb6\",\n \"d73027fc8d59fee090e0f3f891bfdb4575b4\",\n \"d73027fc8d59fee090ffffbfe0f3f891bfdb4575b4\",\n \"d73027f46d43fdae61fee090e0f3f8abd9e974add14575b4\",\n \"d73027f46d43fdae61fee090ffffbfe0f3f8abd9e974add14575b4\",\n \"a50026d73027f46d43fdae61fee090e0f3f8abd9e974add14575b4313695\",\n \"a50026d73027f46d43fdae61fee090ffffbfe0f3f8abd9e974add14575b4313695\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"fc8d59ffffbf91cf60\",\n \"d7191cfdae61a6d96a1a9641\",\n \"d7191cfdae61ffffbfa6d96a1a9641\",\n \"d73027fc8d59fee08bd9ef8b91cf601a9850\",\n \"d73027fc8d59fee08bffffbfd9ef8b91cf601a9850\",\n \"d73027f46d43fdae61fee08bd9ef8ba6d96a66bd631a9850\",\n \"d73027f46d43fdae61fee08bffffbfd9ef8ba6d96a66bd631a9850\",\n \"a50026d73027f46d43fdae61fee08bd9ef8ba6d96a66bd631a9850006837\",\n \"a50026d73027f46d43fdae61fee08bffffbfd9ef8ba6d96a66bd631a9850006837\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"fc8d59ffffbf99d594\",\n \"d7191cfdae61abdda42b83ba\",\n \"d7191cfdae61ffffbfabdda42b83ba\",\n \"d53e4ffc8d59fee08be6f59899d5943288bd\",\n \"d53e4ffc8d59fee08bffffbfe6f59899d5943288bd\",\n \"d53e4ff46d43fdae61fee08be6f598abdda466c2a53288bd\",\n \"d53e4ff46d43fdae61fee08bffffbfe6f598abdda466c2a53288bd\",\n \"9e0142d53e4ff46d43fdae61fee08be6f598abdda466c2a53288bd5e4fa2\",\n \"9e0142d53e4ff46d43fdae61fee08bffffbfe6f598abdda466c2a53288bd5e4fa2\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"e5f5f999d8c92ca25f\",\n \"edf8fbb2e2e266c2a4238b45\",\n \"edf8fbb2e2e266c2a42ca25f006d2c\",\n \"edf8fbccece699d8c966c2a42ca25f006d2c\",\n \"edf8fbccece699d8c966c2a441ae76238b45005824\",\n \"f7fcfde5f5f9ccece699d8c966c2a441ae76238b45005824\",\n \"f7fcfde5f5f9ccece699d8c966c2a441ae76238b45006d2c00441b\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"e0ecf49ebcda8856a7\",\n \"edf8fbb3cde38c96c688419d\",\n \"edf8fbb3cde38c96c68856a7810f7c\",\n \"edf8fbbfd3e69ebcda8c96c68856a7810f7c\",\n \"edf8fbbfd3e69ebcda8c96c68c6bb188419d6e016b\",\n \"f7fcfde0ecf4bfd3e69ebcda8c96c68c6bb188419d6e016b\",\n \"f7fcfde0ecf4bfd3e69ebcda8c96c68c6bb188419d810f7c4d004b\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"e0f3dba8ddb543a2ca\",\n \"f0f9e8bae4bc7bccc42b8cbe\",\n \"f0f9e8bae4bc7bccc443a2ca0868ac\",\n \"f0f9e8ccebc5a8ddb57bccc443a2ca0868ac\",\n \"f0f9e8ccebc5a8ddb57bccc44eb3d32b8cbe08589e\",\n \"f7fcf0e0f3dbccebc5a8ddb57bccc44eb3d32b8cbe08589e\",\n \"f7fcf0e0f3dbccebc5a8ddb57bccc44eb3d32b8cbe0868ac084081\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"fee8c8fdbb84e34a33\",\n \"fef0d9fdcc8afc8d59d7301f\",\n \"fef0d9fdcc8afc8d59e34a33b30000\",\n \"fef0d9fdd49efdbb84fc8d59e34a33b30000\",\n \"fef0d9fdd49efdbb84fc8d59ef6548d7301f990000\",\n \"fff7ecfee8c8fdd49efdbb84fc8d59ef6548d7301f990000\",\n \"fff7ecfee8c8fdd49efdbb84fc8d59ef6548d7301fb300007f0000\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"ece2f0a6bddb1c9099\",\n \"f6eff7bdc9e167a9cf02818a\",\n \"f6eff7bdc9e167a9cf1c9099016c59\",\n \"f6eff7d0d1e6a6bddb67a9cf1c9099016c59\",\n \"f6eff7d0d1e6a6bddb67a9cf3690c002818a016450\",\n \"fff7fbece2f0d0d1e6a6bddb67a9cf3690c002818a016450\",\n \"fff7fbece2f0d0d1e6a6bddb67a9cf3690c002818a016c59014636\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"ece7f2a6bddb2b8cbe\",\n \"f1eef6bdc9e174a9cf0570b0\",\n \"f1eef6bdc9e174a9cf2b8cbe045a8d\",\n \"f1eef6d0d1e6a6bddb74a9cf2b8cbe045a8d\",\n \"f1eef6d0d1e6a6bddb74a9cf3690c00570b0034e7b\",\n \"fff7fbece7f2d0d1e6a6bddb74a9cf3690c00570b0034e7b\",\n \"fff7fbece7f2d0d1e6a6bddb74a9cf3690c00570b0045a8d023858\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"e7e1efc994c7dd1c77\",\n \"f1eef6d7b5d8df65b0ce1256\",\n \"f1eef6d7b5d8df65b0dd1c77980043\",\n \"f1eef6d4b9dac994c7df65b0dd1c77980043\",\n \"f1eef6d4b9dac994c7df65b0e7298ace125691003f\",\n \"f7f4f9e7e1efd4b9dac994c7df65b0e7298ace125691003f\",\n \"f7f4f9e7e1efd4b9dac994c7df65b0e7298ace125698004367001f\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"fde0ddfa9fb5c51b8a\",\n \"feebe2fbb4b9f768a1ae017e\",\n \"feebe2fbb4b9f768a1c51b8a7a0177\",\n \"feebe2fcc5c0fa9fb5f768a1c51b8a7a0177\",\n \"feebe2fcc5c0fa9fb5f768a1dd3497ae017e7a0177\",\n \"fff7f3fde0ddfcc5c0fa9fb5f768a1dd3497ae017e7a0177\",\n \"fff7f3fde0ddfcc5c0fa9fb5f768a1dd3497ae017e7a017749006a\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"edf8b17fcdbb2c7fb8\",\n \"ffffcca1dab441b6c4225ea8\",\n \"ffffcca1dab441b6c42c7fb8253494\",\n \"ffffccc7e9b47fcdbb41b6c42c7fb8253494\",\n \"ffffccc7e9b47fcdbb41b6c41d91c0225ea80c2c84\",\n \"ffffd9edf8b1c7e9b47fcdbb41b6c41d91c0225ea80c2c84\",\n \"ffffd9edf8b1c7e9b47fcdbb41b6c41d91c0225ea8253494081d58\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"f7fcb9addd8e31a354\",\n \"ffffccc2e69978c679238443\",\n \"ffffccc2e69978c67931a354006837\",\n \"ffffccd9f0a3addd8e78c67931a354006837\",\n \"ffffccd9f0a3addd8e78c67941ab5d238443005a32\",\n \"ffffe5f7fcb9d9f0a3addd8e78c67941ab5d238443005a32\",\n \"ffffe5f7fcb9d9f0a3addd8e78c67941ab5d238443006837004529\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"fff7bcfec44fd95f0e\",\n \"ffffd4fed98efe9929cc4c02\",\n \"ffffd4fed98efe9929d95f0e993404\",\n \"ffffd4fee391fec44ffe9929d95f0e993404\",\n \"ffffd4fee391fec44ffe9929ec7014cc4c028c2d04\",\n \"ffffe5fff7bcfee391fec44ffe9929ec7014cc4c028c2d04\",\n \"ffffe5fff7bcfee391fec44ffe9929ec7014cc4c02993404662506\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"ffeda0feb24cf03b20\",\n \"ffffb2fecc5cfd8d3ce31a1c\",\n \"ffffb2fecc5cfd8d3cf03b20bd0026\",\n \"ffffb2fed976feb24cfd8d3cf03b20bd0026\",\n \"ffffb2fed976feb24cfd8d3cfc4e2ae31a1cb10026\",\n \"ffffccffeda0fed976feb24cfd8d3cfc4e2ae31a1cb10026\",\n \"ffffccffeda0fed976feb24cfd8d3cfc4e2ae31a1cbd0026800026\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"deebf79ecae13182bd\",\n \"eff3ffbdd7e76baed62171b5\",\n \"eff3ffbdd7e76baed63182bd08519c\",\n \"eff3ffc6dbef9ecae16baed63182bd08519c\",\n \"eff3ffc6dbef9ecae16baed64292c62171b5084594\",\n \"f7fbffdeebf7c6dbef9ecae16baed64292c62171b5084594\",\n \"f7fbffdeebf7c6dbef9ecae16baed64292c62171b508519c08306b\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"e5f5e0a1d99b31a354\",\n \"edf8e9bae4b374c476238b45\",\n \"edf8e9bae4b374c47631a354006d2c\",\n \"edf8e9c7e9c0a1d99b74c47631a354006d2c\",\n \"edf8e9c7e9c0a1d99b74c47641ab5d238b45005a32\",\n \"f7fcf5e5f5e0c7e9c0a1d99b74c47641ab5d238b45005a32\",\n \"f7fcf5e5f5e0c7e9c0a1d99b74c47641ab5d238b45006d2c00441b\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"f0f0f0bdbdbd636363\",\n \"f7f7f7cccccc969696525252\",\n \"f7f7f7cccccc969696636363252525\",\n \"f7f7f7d9d9d9bdbdbd969696636363252525\",\n \"f7f7f7d9d9d9bdbdbd969696737373525252252525\",\n \"fffffff0f0f0d9d9d9bdbdbd969696737373525252252525\",\n \"fffffff0f0f0d9d9d9bdbdbd969696737373525252252525000000\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"efedf5bcbddc756bb1\",\n \"f2f0f7cbc9e29e9ac86a51a3\",\n \"f2f0f7cbc9e29e9ac8756bb154278f\",\n \"f2f0f7dadaebbcbddc9e9ac8756bb154278f\",\n \"f2f0f7dadaebbcbddc9e9ac8807dba6a51a34a1486\",\n \"fcfbfdefedf5dadaebbcbddc9e9ac8807dba6a51a34a1486\",\n \"fcfbfdefedf5dadaebbcbddc9e9ac8807dba6a51a354278f3f007d\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"fee0d2fc9272de2d26\",\n \"fee5d9fcae91fb6a4acb181d\",\n \"fee5d9fcae91fb6a4ade2d26a50f15\",\n \"fee5d9fcbba1fc9272fb6a4ade2d26a50f15\",\n \"fee5d9fcbba1fc9272fb6a4aef3b2ccb181d99000d\",\n \"fff5f0fee0d2fcbba1fc9272fb6a4aef3b2ccb181d99000d\",\n \"fff5f0fee0d2fcbba1fc9272fb6a4aef3b2ccb181da50f1567000d\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"fee6cefdae6be6550d\",\n \"feeddefdbe85fd8d3cd94701\",\n \"feeddefdbe85fd8d3ce6550da63603\",\n \"feeddefdd0a2fdae6bfd8d3ce6550da63603\",\n \"feeddefdd0a2fdae6bfd8d3cf16913d948018c2d04\",\n \"fff5ebfee6cefdd0a2fdae6bfd8d3cf16913d948018c2d04\",\n \"fff5ebfee6cefdd0a2fdae6bfd8d3cf16913d94801a636037f2704\"\n).map(colors);\n\nexport default ramp(scheme);\n","import {cubehelix} from \"d3-color\";\nimport {interpolateCubehelixLong} from \"d3-interpolate\";\n\nexport default interpolateCubehelixLong(cubehelix(300, 0.5, 0.0), cubehelix(-240, 0.5, 1.0));\n","import {cubehelix} from \"d3-color\";\nimport {interpolateCubehelixLong} from \"d3-interpolate\";\n\nexport var warm = interpolateCubehelixLong(cubehelix(-100, 0.75, 0.35), cubehelix(80, 1.50, 0.8));\n\nexport var cool = interpolateCubehelixLong(cubehelix(260, 0.75, 0.35), cubehelix(80, 1.50, 0.8));\n\nvar c = cubehelix();\n\nexport default function(t) {\n if (t < 0 || t > 1) t -= Math.floor(t);\n var ts = Math.abs(t - 0.5);\n c.h = 360 * t - 100;\n c.s = 1.5 - 1.5 * ts;\n c.l = 0.8 - 0.9 * ts;\n return c + \"\";\n}\n","import {rgb} from \"d3-color\";\n\nvar c = rgb(),\n pi_1_3 = Math.PI / 3,\n pi_2_3 = Math.PI * 2 / 3;\n\nexport default function(t) {\n var x;\n t = (0.5 - t) * Math.PI;\n c.r = 255 * (x = Math.sin(t)) * x;\n c.g = 255 * (x = Math.sin(t + pi_1_3)) * x;\n c.b = 255 * (x = Math.sin(t + pi_2_3)) * x;\n return c + \"\";\n}\n","import colors from \"../colors\";\n\nfunction ramp(range) {\n var n = range.length;\n return function(t) {\n return range[Math.max(0, Math.min(n - 1, Math.floor(t * n)))];\n };\n}\n\nexport default ramp(colors(\"44015444025645045745055946075a46085c460a5d460b5e470d60470e6147106347116447136548146748166848176948186a481a6c481b6d481c6e481d6f481f70482071482173482374482475482576482677482878482979472a7a472c7a472d7b472e7c472f7d46307e46327e46337f463480453581453781453882443983443a83443b84433d84433e85423f854240864241864142874144874045884046883f47883f48893e49893e4a893e4c8a3d4d8a3d4e8a3c4f8a3c508b3b518b3b528b3a538b3a548c39558c39568c38588c38598c375a8c375b8d365c8d365d8d355e8d355f8d34608d34618d33628d33638d32648e32658e31668e31678e31688e30698e306a8e2f6b8e2f6c8e2e6d8e2e6e8e2e6f8e2d708e2d718e2c718e2c728e2c738e2b748e2b758e2a768e2a778e2a788e29798e297a8e297b8e287c8e287d8e277e8e277f8e27808e26818e26828e26828e25838e25848e25858e24868e24878e23888e23898e238a8d228b8d228c8d228d8d218e8d218f8d21908d21918c20928c20928c20938c1f948c1f958b1f968b1f978b1f988b1f998a1f9a8a1e9b8a1e9c891e9d891f9e891f9f881fa0881fa1881fa1871fa28720a38620a48621a58521a68522a78522a88423a98324aa8325ab8225ac8226ad8127ad8128ae8029af7f2ab07f2cb17e2db27d2eb37c2fb47c31b57b32b67a34b67935b77937b87838b9773aba763bbb753dbc743fbc7340bd7242be7144bf7046c06f48c16e4ac16d4cc26c4ec36b50c46a52c56954c56856c66758c7655ac8645cc8635ec96260ca6063cb5f65cb5e67cc5c69cd5b6ccd5a6ece5870cf5773d05675d05477d1537ad1517cd2507fd34e81d34d84d44b86d54989d5488bd6468ed64590d74393d74195d84098d83e9bd93c9dd93ba0da39a2da37a5db36a8db34aadc32addc30b0dd2fb2dd2db5de2bb8de29bade28bddf26c0df25c2df23c5e021c8e020cae11fcde11dd0e11cd2e21bd5e21ad8e219dae319dde318dfe318e2e418e5e419e7e419eae51aece51befe51cf1e51df4e61ef6e620f8e621fbe723fde725\"));\n\nexport var magma = ramp(colors(\"00000401000501010601010802010902020b02020d03030f03031204041405041606051806051a07061c08071e0907200a08220b09240c09260d0a290e0b2b100b2d110c2f120d31130d34140e36150e38160f3b180f3d19103f1a10421c10441d11471e114920114b21114e22115024125325125527125829115a2a115c2c115f2d11612f116331116533106734106936106b38106c390f6e3b0f703d0f713f0f72400f74420f75440f764510774710784910784a10794c117a4e117b4f127b51127c52137c54137d56147d57157e59157e5a167e5c167f5d177f5f187f601880621980641a80651a80671b80681c816a1c816b1d816d1d816e1e81701f81721f817320817521817621817822817922827b23827c23827e24828025828125818326818426818627818827818928818b29818c29818e2a81902a81912b81932b80942c80962c80982d80992d809b2e7f9c2e7f9e2f7fa02f7fa1307ea3307ea5317ea6317da8327daa337dab337cad347cae347bb0357bb2357bb3367ab5367ab73779b83779ba3878bc3978bd3977bf3a77c03a76c23b75c43c75c53c74c73d73c83e73ca3e72cc3f71cd4071cf4070d0416fd2426fd3436ed5446dd6456cd8456cd9466bdb476adc4869de4968df4a68e04c67e24d66e34e65e44f64e55064e75263e85362e95462ea5661eb5760ec5860ed5a5fee5b5eef5d5ef05f5ef1605df2625df2645cf3655cf4675cf4695cf56b5cf66c5cf66e5cf7705cf7725cf8745cf8765cf9785df9795df97b5dfa7d5efa7f5efa815ffb835ffb8560fb8761fc8961fc8a62fc8c63fc8e64fc9065fd9266fd9467fd9668fd9869fd9a6afd9b6bfe9d6cfe9f6dfea16efea36ffea571fea772fea973feaa74feac76feae77feb078feb27afeb47bfeb67cfeb77efeb97ffebb81febd82febf84fec185fec287fec488fec68afec88cfeca8dfecc8ffecd90fecf92fed194fed395fed597fed799fed89afdda9cfddc9efddea0fde0a1fde2a3fde3a5fde5a7fde7a9fde9aafdebacfcecaefceeb0fcf0b2fcf2b4fcf4b6fcf6b8fcf7b9fcf9bbfcfbbdfcfdbf\"));\n\nexport var inferno = ramp(colors(\"00000401000501010601010802010a02020c02020e03021004031204031405041706041907051b08051d09061f0a07220b07240c08260d08290e092b10092d110a30120a32140b34150b37160b39180c3c190c3e1b0c411c0c431e0c451f0c48210c4a230c4c240c4f260c51280b53290b552b0b572d0b592f0a5b310a5c320a5e340a5f3609613809623909633b09643d09653e0966400a67420a68440a68450a69470b6a490b6a4a0c6b4c0c6b4d0d6c4f0d6c510e6c520e6d540f6d550f6d57106e59106e5a116e5c126e5d126e5f136e61136e62146e64156e65156e67166e69166e6a176e6c186e6d186e6f196e71196e721a6e741a6e751b6e771c6d781c6d7a1d6d7c1d6d7d1e6d7f1e6c801f6c82206c84206b85216b87216b88226a8a226a8c23698d23698f24699025689225689326679526679727669827669a28659b29649d29649f2a63a02a63a22b62a32c61a52c60a62d60a82e5fa92e5eab2f5ead305dae305cb0315bb1325ab3325ab43359b63458b73557b93556ba3655bc3754bd3853bf3952c03a51c13a50c33b4fc43c4ec63d4dc73e4cc83f4bca404acb4149cc4248ce4347cf4446d04545d24644d34743d44842d54a41d74b3fd84c3ed94d3dda4e3cdb503bdd513ade5238df5337e05536e15635e25734e35933e45a31e55c30e65d2fe75e2ee8602de9612bea632aeb6429eb6628ec6726ed6925ee6a24ef6c23ef6e21f06f20f1711ff1731df2741cf3761bf37819f47918f57b17f57d15f67e14f68013f78212f78410f8850ff8870ef8890cf98b0bf98c0af98e09fa9008fa9207fa9407fb9606fb9706fb9906fb9b06fb9d07fc9f07fca108fca309fca50afca60cfca80dfcaa0ffcac11fcae12fcb014fcb216fcb418fbb61afbb81dfbba1ffbbc21fbbe23fac026fac228fac42afac62df9c72ff9c932f9cb35f8cd37f8cf3af7d13df7d340f6d543f6d746f5d949f5db4cf4dd4ff4df53f4e156f3e35af3e55df2e661f2e865f2ea69f1ec6df1ed71f1ef75f1f179f2f27df2f482f3f586f3f68af4f88ef5f992f6fa96f8fb9af9fc9dfafda1fcffa4\"));\n\nexport var plasma = ramp(colors(\"0d088710078813078916078a19068c1b068d1d068e20068f2206902406912605912805922a05932c05942e05952f059631059733059735049837049938049a3a049a3c049b3e049c3f049c41049d43039e44039e46039f48039f4903a04b03a14c02a14e02a25002a25102a35302a35502a45601a45801a45901a55b01a55c01a65e01a66001a66100a76300a76400a76600a76700a86900a86a00a86c00a86e00a86f00a87100a87201a87401a87501a87701a87801a87a02a87b02a87d03a87e03a88004a88104a78305a78405a78606a68707a68808a68a09a58b0aa58d0ba58e0ca48f0da4910ea3920fa39410a29511a19613a19814a099159f9a169f9c179e9d189d9e199da01a9ca11b9ba21d9aa31e9aa51f99a62098a72197a82296aa2395ab2494ac2694ad2793ae2892b02991b12a90b22b8fb32c8eb42e8db52f8cb6308bb7318ab83289ba3388bb3488bc3587bd3786be3885bf3984c03a83c13b82c23c81c33d80c43e7fc5407ec6417dc7427cc8437bc9447aca457acb4679cc4778cc4977cd4a76ce4b75cf4c74d04d73d14e72d24f71d35171d45270d5536fd5546ed6556dd7566cd8576bd9586ada5a6ada5b69db5c68dc5d67dd5e66de5f65de6164df6263e06363e16462e26561e26660e3685fe4695ee56a5de56b5de66c5ce76e5be76f5ae87059e97158e97257ea7457eb7556eb7655ec7754ed7953ed7a52ee7b51ef7c51ef7e50f07f4ff0804ef1814df1834cf2844bf3854bf3874af48849f48948f58b47f58c46f68d45f68f44f79044f79143f79342f89441f89540f9973ff9983ef99a3efa9b3dfa9c3cfa9e3bfb9f3afba139fba238fca338fca537fca636fca835fca934fdab33fdac33fdae32fdaf31fdb130fdb22ffdb42ffdb52efeb72dfeb82cfeba2cfebb2bfebd2afebe2afec029fdc229fdc328fdc527fdc627fdc827fdca26fdcb26fccd25fcce25fcd025fcd225fbd324fbd524fbd724fad824fada24f9dc24f9dd25f8df25f8e125f7e225f7e425f6e626f6e826f5e926f5eb27f4ed27f3ee27f3f027f2f227f1f426f1f525f0f724f0f921\"));\n","const ReservedFields = {\n ROW_ID: '__id__'\n};\n\nexport default ReservedFields;\n","const CommonProps = {\n ACTION_INF: 'actionInf',\n ON_LAYER_DRAW: 'onlayerdraw'\n};\n\nexport default CommonProps;\n","export var slice = Array.prototype.slice;\n","export default function(x) {\n return x;\n}\n","import {slice} from \"./array\";\nimport identity from \"./identity\";\n\nvar top = 1,\n right = 2,\n bottom = 3,\n left = 4,\n epsilon = 1e-6;\n\nfunction translateX(x) {\n return \"translate(\" + (x + 0.5) + \",0)\";\n}\n\nfunction translateY(y) {\n return \"translate(0,\" + (y + 0.5) + \")\";\n}\n\nfunction number(scale) {\n return function(d) {\n return +scale(d);\n };\n}\n\nfunction center(scale) {\n var offset = Math.max(0, scale.bandwidth() - 1) / 2; // Adjust for 0.5px offset.\n if (scale.round()) offset = Math.round(offset);\n return function(d) {\n return +scale(d) + offset;\n };\n}\n\nfunction entering() {\n return !this.__axis;\n}\n\nfunction axis(orient, scale) {\n var tickArguments = [],\n tickValues = null,\n tickFormat = null,\n tickTransform = null,\n tickSizeInner = 6,\n tickSizeOuter = 6,\n tickPadding = 3,\n k = orient === top || orient === left ? -1 : 1,\n x = orient === left || orient === right ? \"x\" : \"y\",\n transform = orient === top || orient === bottom ? translateX : translateY;\n\n function axis(context) {\n var values = tickValues == null ? (scale.ticks ? scale.ticks.apply(scale, tickArguments) : scale.domain()) : tickValues,\n format = tickFormat == null ? (scale.tickFormat ? scale.tickFormat.apply(scale, tickArguments) : identity) : tickFormat,\n spacing = Math.max(tickSizeInner, 0) + tickPadding,\n range = scale.range(),\n range0 = +range[0] + 0.5,\n range1 = +range[range.length - 1] + 0.5,\n position = (scale.bandwidth ? center : number)(scale.copy()),\n selection = context.selection ? context.selection() : context,\n path = selection.selectAll(\".domain\").data([null]),\n tick = selection.selectAll(\".tick\").data(values, scale).order(),\n tickExit = tick.exit(),\n tickEnter = tick.enter().append(\"g\").attr(\"class\", \"tick\"),\n line = tick.select(\"line\"),\n text = tick.select(\"text\");\n\n path = path.merge(path.enter().insert(\"path\", \".tick\")\n .attr(\"class\", \"domain\")\n .attr(\"stroke\", \"#000\"));\n\n tick = tick.merge(tickEnter);\n\n line = line.merge(tickEnter.append(\"line\")\n .attr(\"stroke\", \"#000\")\n .attr(x + \"2\", k * tickSizeInner));\n\n text = text.merge(tickEnter.append(\"text\")\n .attr(\"fill\", \"#000\")\n .attr(x, k * spacing)\n .attr(\"dy\", orient === top ? \"0em\" : orient === bottom ? \"0.71em\" : \"0.32em\"))\n .style('transform', tickTransform);\n\n if (context !== selection) {\n path = path.transition(context);\n tick = tick.transition(context);\n line = line.transition(context);\n text = text.transition(context);\n\n tickExit = tickExit.transition(context)\n .attr(\"opacity\", epsilon)\n .attr(\"transform\", function(d) { return isFinite(d = position(d)) ? transform(d) : this.getAttribute(\"transform\"); });\n\n tickEnter\n .attr(\"opacity\", epsilon)\n .attr(\"transform\", function(d) { var p = this.parentNode.__axis; return transform(p && isFinite(p = p(d)) ? p : position(d)); });\n }\n\n tickExit.remove();\n\n path\n .attr(\"d\", orient === left || orient == right\n ? \"M\" + k * tickSizeOuter + \",\" + range0 + \"H0.5V\" + range1 + \"H\" + k * tickSizeOuter\n : \"M\" + range0 + \",\" + k * tickSizeOuter + \"V0.5H\" + range1 + \"V\" + k * tickSizeOuter);\n\n tick\n .attr(\"opacity\", 1)\n .attr(\"transform\", function(d) { return transform(position(d)); });\n\n line\n .attr(x + \"2\", k * tickSizeInner);\n\n text\n .attr(x, k * spacing)\n .text(format);\n\n selection.filter(entering)\n .attr(\"fill\", \"none\")\n .attr(\"font-size\", 10)\n .attr(\"font-family\", \"sans-serif\")\n .attr(\"text-anchor\", orient === right ? \"start\" : orient === left ? \"end\" : \"middle\");\n\n selection\n .each(function() { this.__axis = position; });\n }\n\n axis.scale = function(_) {\n return arguments.length ? (scale = _, axis) : scale;\n };\n\n axis.tickTransform = function(_) {\n return arguments.length ? (tickTransform = _, axis) : tickTransform;\n };\n\n axis.ticks = function() {\n return tickArguments = slice.call(arguments), axis;\n };\n\n axis.tickArguments = function(_) {\n return arguments.length ? (tickArguments = _ == null ? [] : slice.call(_), axis) : tickArguments.slice();\n };\n\n axis.tickValues = function(_) {\n return arguments.length ? (tickValues = _ == null ? null : slice.call(_), axis) : tickValues && tickValues.slice();\n };\n\n axis.tickFormat = function(_) {\n return arguments.length ? (tickFormat = _, axis) : tickFormat;\n };\n\n axis.tickSize = function(_) {\n return arguments.length ? (tickSizeInner = tickSizeOuter = +_, axis) : tickSizeInner;\n };\n\n axis.tickSizeInner = function(_) {\n return arguments.length ? (tickSizeInner = +_, axis) : tickSizeInner;\n };\n\n axis.tickSizeOuter = function(_) {\n return arguments.length ? (tickSizeOuter = +_, axis) : tickSizeOuter;\n };\n\n axis.tickPadding = function(_) {\n return arguments.length ? (tickPadding = +_, axis) : tickPadding;\n };\n\n return axis;\n}\n\nexport function axisTop(scale) {\n return axis(top, scale);\n}\n\nexport function axisRight(scale) {\n return axis(right, scale);\n}\n\nexport function axisBottom(scale) {\n return axis(bottom, scale);\n}\n\nexport function axisLeft(scale) {\n return axis(left, scale);\n}\n","var pi = Math.PI,\n tau = 2 * pi,\n epsilon = 1e-6,\n tauEpsilon = tau - epsilon;\n\nfunction Path() {\n this._x0 = this._y0 = // start of current subpath\n this._x1 = this._y1 = null; // end of current subpath\n this._ = \"\";\n}\n\nfunction path() {\n return new Path;\n}\n\nPath.prototype = path.prototype = {\n constructor: Path,\n moveTo: function(x, y) {\n this._ += \"M\" + (this._x0 = this._x1 = +x) + \",\" + (this._y0 = this._y1 = +y);\n },\n closePath: function() {\n if (this._x1 !== null) {\n this._x1 = this._x0, this._y1 = this._y0;\n this._ += \"Z\";\n }\n },\n lineTo: function(x, y) {\n this._ += \"L\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n },\n quadraticCurveTo: function(x1, y1, x, y) {\n this._ += \"Q\" + (+x1) + \",\" + (+y1) + \",\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n },\n bezierCurveTo: function(x1, y1, x2, y2, x, y) {\n this._ += \"C\" + (+x1) + \",\" + (+y1) + \",\" + (+x2) + \",\" + (+y2) + \",\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n },\n arcTo: function(x1, y1, x2, y2, r) {\n x1 = +x1, y1 = +y1, x2 = +x2, y2 = +y2, r = +r;\n var x0 = this._x1,\n y0 = this._y1,\n x21 = x2 - x1,\n y21 = y2 - y1,\n x01 = x0 - x1,\n y01 = y0 - y1,\n l01_2 = x01 * x01 + y01 * y01;\n\n // Is the radius negative? Error.\n if (r < 0) throw new Error(\"negative radius: \" + r);\n\n // Is this path empty? Move to (x1,y1).\n if (this._x1 === null) {\n this._ += \"M\" + (this._x1 = x1) + \",\" + (this._y1 = y1);\n }\n\n // Or, is (x1,y1) coincident with (x0,y0)? Do nothing.\n else if (!(l01_2 > epsilon));\n\n // Or, are (x0,y0), (x1,y1) and (x2,y2) collinear?\n // Equivalently, is (x1,y1) coincident with (x2,y2)?\n // Or, is the radius zero? Line to (x1,y1).\n else if (!(Math.abs(y01 * x21 - y21 * x01) > epsilon) || !r) {\n this._ += \"L\" + (this._x1 = x1) + \",\" + (this._y1 = y1);\n }\n\n // Otherwise, draw an arc!\n else {\n var x20 = x2 - x0,\n y20 = y2 - y0,\n l21_2 = x21 * x21 + y21 * y21,\n l20_2 = x20 * x20 + y20 * y20,\n l21 = Math.sqrt(l21_2),\n l01 = Math.sqrt(l01_2),\n l = r * Math.tan((pi - Math.acos((l21_2 + l01_2 - l20_2) / (2 * l21 * l01))) / 2),\n t01 = l / l01,\n t21 = l / l21;\n\n // If the start tangent is not coincident with (x0,y0), line to.\n if (Math.abs(t01 - 1) > epsilon) {\n this._ += \"L\" + (x1 + t01 * x01) + \",\" + (y1 + t01 * y01);\n }\n\n this._ += \"A\" + r + \",\" + r + \",0,0,\" + (+(y01 * x20 > x01 * y20)) + \",\" + (this._x1 = x1 + t21 * x21) + \",\" + (this._y1 = y1 + t21 * y21);\n }\n },\n arc: function(x, y, r, a0, a1, ccw) {\n x = +x, y = +y, r = +r;\n var dx = r * Math.cos(a0),\n dy = r * Math.sin(a0),\n x0 = x + dx,\n y0 = y + dy,\n cw = 1 ^ ccw,\n da = ccw ? a0 - a1 : a1 - a0;\n\n // Is the radius negative? Error.\n if (r < 0) throw new Error(\"negative radius: \" + r);\n\n // Is this path empty? Move to (x0,y0).\n if (this._x1 === null) {\n this._ += \"M\" + x0 + \",\" + y0;\n }\n\n // Or, is (x0,y0) not coincident with the previous point? Line to (x0,y0).\n else if (Math.abs(this._x1 - x0) > epsilon || Math.abs(this._y1 - y0) > epsilon) {\n this._ += \"L\" + x0 + \",\" + y0;\n }\n\n // Is this arc empty? We’re done.\n if (!r) return;\n\n // Does the angle go the wrong way? Flip the direction.\n if (da < 0) da = da % tau + tau;\n\n // Is this a complete circle? Draw two arcs to complete the circle.\n if (da > tauEpsilon) {\n this._ += \"A\" + r + \",\" + r + \",0,1,\" + cw + \",\" + (x - dx) + \",\" + (y - dy) + \"A\" + r + \",\" + r + \",0,1,\" + cw + \",\" + (this._x1 = x0) + \",\" + (this._y1 = y0);\n }\n\n // Is this arc non-empty? Draw an arc!\n else if (da > epsilon) {\n this._ += \"A\" + r + \",\" + r + \",0,\" + (+(da >= pi)) + \",\" + cw + \",\" + (this._x1 = x + r * Math.cos(a1)) + \",\" + (this._y1 = y + r * Math.sin(a1));\n }\n },\n rect: function(x, y, w, h) {\n this._ += \"M\" + (this._x0 = this._x1 = +x) + \",\" + (this._y0 = this._y1 = +y) + \"h\" + (+w) + \"v\" + (+h) + \"h\" + (-w) + \"Z\";\n },\n toString: function() {\n return this._;\n }\n};\n\nexport default path;\n","export default function(x) {\n return function constant() {\n return x;\n };\n}\n","export var abs = Math.abs;\nexport var atan2 = Math.atan2;\nexport var cos = Math.cos;\nexport var max = Math.max;\nexport var min = Math.min;\nexport var sin = Math.sin;\nexport var sqrt = Math.sqrt;\n\nexport var epsilon = 1e-12;\nexport var pi = Math.PI;\nexport var halfPi = pi / 2;\nexport var tau = 2 * pi;\n\nexport function acos(x) {\n return x > 1 ? 0 : x < -1 ? pi : Math.acos(x);\n}\n\nexport function asin(x) {\n return x >= 1 ? halfPi : x <= -1 ? -halfPi : Math.asin(x);\n}\n","import {path} from \"d3-path\";\nimport constant from \"./constant\";\nimport {abs, acos, asin, atan2, cos, epsilon, halfPi, max, min, pi, sin, sqrt, tau} from \"./math\";\n\nfunction arcInnerRadius(d) {\n return d.innerRadius;\n}\n\nfunction arcOuterRadius(d) {\n return d.outerRadius;\n}\n\nfunction arcStartAngle(d) {\n return d.startAngle;\n}\n\nfunction arcEndAngle(d) {\n return d.endAngle;\n}\n\nfunction arcPadAngle(d) {\n return d && d.padAngle; // Note: optional!\n}\n\nfunction intersect(x0, y0, x1, y1, x2, y2, x3, y3) {\n var x10 = x1 - x0, y10 = y1 - y0,\n x32 = x3 - x2, y32 = y3 - y2,\n t = (x32 * (y0 - y2) - y32 * (x0 - x2)) / (y32 * x10 - x32 * y10);\n return [x0 + t * x10, y0 + t * y10];\n}\n\n// Compute perpendicular offset line of length rc.\n// http://mathworld.wolfram.com/Circle-LineIntersection.html\nfunction cornerTangents(x0, y0, x1, y1, r1, rc, cw) {\n var x01 = x0 - x1,\n y01 = y0 - y1,\n lo = (cw ? rc : -rc) / sqrt(x01 * x01 + y01 * y01),\n ox = lo * y01,\n oy = -lo * x01,\n x11 = x0 + ox,\n y11 = y0 + oy,\n x10 = x1 + ox,\n y10 = y1 + oy,\n x00 = (x11 + x10) / 2,\n y00 = (y11 + y10) / 2,\n dx = x10 - x11,\n dy = y10 - y11,\n d2 = dx * dx + dy * dy,\n r = r1 - rc,\n D = x11 * y10 - x10 * y11,\n d = (dy < 0 ? -1 : 1) * sqrt(max(0, r * r * d2 - D * D)),\n cx0 = (D * dy - dx * d) / d2,\n cy0 = (-D * dx - dy * d) / d2,\n cx1 = (D * dy + dx * d) / d2,\n cy1 = (-D * dx + dy * d) / d2,\n dx0 = cx0 - x00,\n dy0 = cy0 - y00,\n dx1 = cx1 - x00,\n dy1 = cy1 - y00;\n\n // Pick the closer of the two intersection points.\n // TODO Is there a faster way to determine which intersection to use?\n if (dx0 * dx0 + dy0 * dy0 > dx1 * dx1 + dy1 * dy1) cx0 = cx1, cy0 = cy1;\n\n return {\n cx: cx0,\n cy: cy0,\n x01: -ox,\n y01: -oy,\n x11: cx0 * (r1 / r - 1),\n y11: cy0 * (r1 / r - 1)\n };\n}\n\nexport default function() {\n var innerRadius = arcInnerRadius,\n outerRadius = arcOuterRadius,\n cornerRadius = constant(0),\n padRadius = null,\n startAngle = arcStartAngle,\n endAngle = arcEndAngle,\n padAngle = arcPadAngle,\n context = null;\n\n function arc() {\n var buffer,\n r,\n r0 = +innerRadius.apply(this, arguments),\n r1 = +outerRadius.apply(this, arguments),\n a0 = startAngle.apply(this, arguments) - halfPi,\n a1 = endAngle.apply(this, arguments) - halfPi,\n da = abs(a1 - a0),\n cw = a1 > a0;\n\n if (!context) context = buffer = path();\n\n // Ensure that the outer radius is always larger than the inner radius.\n if (r1 < r0) r = r1, r1 = r0, r0 = r;\n\n // Is it a point?\n if (!(r1 > epsilon)) context.moveTo(0, 0);\n\n // Or is it a circle or annulus?\n else if (da > tau - epsilon) {\n context.moveTo(r1 * cos(a0), r1 * sin(a0));\n context.arc(0, 0, r1, a0, a1, !cw);\n if (r0 > epsilon) {\n context.moveTo(r0 * cos(a1), r0 * sin(a1));\n context.arc(0, 0, r0, a1, a0, cw);\n }\n }\n\n // Or is it a circular or annular sector?\n else {\n var a01 = a0,\n a11 = a1,\n a00 = a0,\n a10 = a1,\n da0 = da,\n da1 = da,\n ap = padAngle.apply(this, arguments) / 2,\n rp = (ap > epsilon) && (padRadius ? +padRadius.apply(this, arguments) : sqrt(r0 * r0 + r1 * r1)),\n rc = min(abs(r1 - r0) / 2, +cornerRadius.apply(this, arguments)),\n rc0 = rc,\n rc1 = rc,\n t0,\n t1;\n\n // Apply padding? Note that since r1 ≥ r0, da1 ≥ da0.\n if (rp > epsilon) {\n var p0 = asin(rp / r0 * sin(ap)),\n p1 = asin(rp / r1 * sin(ap));\n if ((da0 -= p0 * 2) > epsilon) p0 *= (cw ? 1 : -1), a00 += p0, a10 -= p0;\n else da0 = 0, a00 = a10 = (a0 + a1) / 2;\n if ((da1 -= p1 * 2) > epsilon) p1 *= (cw ? 1 : -1), a01 += p1, a11 -= p1;\n else da1 = 0, a01 = a11 = (a0 + a1) / 2;\n }\n\n var x01 = r1 * cos(a01),\n y01 = r1 * sin(a01),\n x10 = r0 * cos(a10),\n y10 = r0 * sin(a10);\n\n // Apply rounded corners?\n if (rc > epsilon) {\n var x11 = r1 * cos(a11),\n y11 = r1 * sin(a11),\n x00 = r0 * cos(a00),\n y00 = r0 * sin(a00);\n\n // Restrict the corner radius according to the sector angle.\n if (da < pi) {\n var oc = da0 > epsilon ? intersect(x01, y01, x00, y00, x11, y11, x10, y10) : [x10, y10],\n ax = x01 - oc[0],\n ay = y01 - oc[1],\n bx = x11 - oc[0],\n by = y11 - oc[1],\n kc = 1 / sin(acos((ax * bx + ay * by) / (sqrt(ax * ax + ay * ay) * sqrt(bx * bx + by * by))) / 2),\n lc = sqrt(oc[0] * oc[0] + oc[1] * oc[1]);\n rc0 = min(rc, (r0 - lc) / (kc - 1));\n rc1 = min(rc, (r1 - lc) / (kc + 1));\n }\n }\n\n // Is the sector collapsed to a line?\n if (!(da1 > epsilon)) context.moveTo(x01, y01);\n\n // Does the sector’s outer ring have rounded corners?\n else if (rc1 > epsilon) {\n t0 = cornerTangents(x00, y00, x01, y01, r1, rc1, cw);\n t1 = cornerTangents(x11, y11, x10, y10, r1, rc1, cw);\n\n context.moveTo(t0.cx + t0.x01, t0.cy + t0.y01);\n\n // Have the corners merged?\n if (rc1 < rc) context.arc(t0.cx, t0.cy, rc1, atan2(t0.y01, t0.x01), atan2(t1.y01, t1.x01), !cw);\n\n // Otherwise, draw the two corners and the ring.\n else {\n context.arc(t0.cx, t0.cy, rc1, atan2(t0.y01, t0.x01), atan2(t0.y11, t0.x11), !cw);\n context.arc(0, 0, r1, atan2(t0.cy + t0.y11, t0.cx + t0.x11), atan2(t1.cy + t1.y11, t1.cx + t1.x11), !cw);\n context.arc(t1.cx, t1.cy, rc1, atan2(t1.y11, t1.x11), atan2(t1.y01, t1.x01), !cw);\n }\n }\n\n // Or is the outer ring just a circular arc?\n else context.moveTo(x01, y01), context.arc(0, 0, r1, a01, a11, !cw);\n\n // Is there no inner ring, and it’s a circular sector?\n // Or perhaps it’s an annular sector collapsed due to padding?\n if (!(r0 > epsilon) || !(da0 > epsilon)) context.lineTo(x10, y10);\n\n // Does the sector’s inner ring (or point) have rounded corners?\n else if (rc0 > epsilon) {\n t0 = cornerTangents(x10, y10, x11, y11, r0, -rc0, cw);\n t1 = cornerTangents(x01, y01, x00, y00, r0, -rc0, cw);\n\n context.lineTo(t0.cx + t0.x01, t0.cy + t0.y01);\n\n // Have the corners merged?\n if (rc0 < rc) context.arc(t0.cx, t0.cy, rc0, atan2(t0.y01, t0.x01), atan2(t1.y01, t1.x01), !cw);\n\n // Otherwise, draw the two corners and the ring.\n else {\n context.arc(t0.cx, t0.cy, rc0, atan2(t0.y01, t0.x01), atan2(t0.y11, t0.x11), !cw);\n context.arc(0, 0, r0, atan2(t0.cy + t0.y11, t0.cx + t0.x11), atan2(t1.cy + t1.y11, t1.cx + t1.x11), cw);\n context.arc(t1.cx, t1.cy, rc0, atan2(t1.y11, t1.x11), atan2(t1.y01, t1.x01), !cw);\n }\n }\n\n // Or is the inner ring just a circular arc?\n else context.arc(0, 0, r0, a10, a00, cw);\n }\n\n context.closePath();\n\n if (buffer) return context = null, buffer + \"\" || null;\n }\n\n arc.centroid = function() {\n var r = (+innerRadius.apply(this, arguments) + +outerRadius.apply(this, arguments)) / 2,\n a = (+startAngle.apply(this, arguments) + +endAngle.apply(this, arguments)) / 2 - pi / 2;\n return [cos(a) * r, sin(a) * r];\n };\n\n arc.innerRadius = function(_) {\n return arguments.length ? (innerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : innerRadius;\n };\n\n arc.outerRadius = function(_) {\n return arguments.length ? (outerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : outerRadius;\n };\n\n arc.cornerRadius = function(_) {\n return arguments.length ? (cornerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : cornerRadius;\n };\n\n arc.padRadius = function(_) {\n return arguments.length ? (padRadius = _ == null ? null : typeof _ === \"function\" ? _ : constant(+_), arc) : padRadius;\n };\n\n arc.startAngle = function(_) {\n return arguments.length ? (startAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : startAngle;\n };\n\n arc.endAngle = function(_) {\n return arguments.length ? (endAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : endAngle;\n };\n\n arc.padAngle = function(_) {\n return arguments.length ? (padAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : padAngle;\n };\n\n arc.context = function(_) {\n return arguments.length ? ((context = _ == null ? null : _), arc) : context;\n };\n\n return arc;\n}\n","function Linear(context) {\n this._context = context;\n}\n\nLinear.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; // proceed\n default: this._context.lineTo(x, y); break;\n }\n }\n};\n\nexport default function(context) {\n return new Linear(context);\n}\n","export function x(p) {\n return p[0];\n}\n\nexport function y(p) {\n return p[1];\n}\n","import {path} from \"d3-path\";\nimport constant from \"./constant\";\nimport curveLinear from \"./curve/linear\";\nimport {x as pointX, y as pointY} from \"./point\";\n\nexport default function() {\n var x = pointX,\n y = pointY,\n defined = constant(true),\n context = null,\n curve = curveLinear,\n output = null;\n\n function line(data) {\n var i,\n n = data.length,\n d,\n defined0 = false,\n buffer;\n\n if (context == null) output = curve(buffer = path());\n\n for (i = 0; i <= n; ++i) {\n if (!(i < n && defined(d = data[i], i, data)) === defined0) {\n if (defined0 = !defined0) output.lineStart();\n else output.lineEnd();\n }\n if (defined0) output.point(+x(d, i, data), +y(d, i, data));\n }\n\n if (buffer) return output = null, buffer + \"\" || null;\n }\n\n line.x = function(_) {\n return arguments.length ? (x = typeof _ === \"function\" ? _ : constant(+_), line) : x;\n };\n\n line.y = function(_) {\n return arguments.length ? (y = typeof _ === \"function\" ? _ : constant(+_), line) : y;\n };\n\n line.defined = function(_) {\n return arguments.length ? (defined = typeof _ === \"function\" ? _ : constant(!!_), line) : defined;\n };\n\n line.curve = function(_) {\n return arguments.length ? (curve = _, context != null && (output = curve(context)), line) : curve;\n };\n\n line.context = function(_) {\n return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), line) : context;\n };\n\n return line;\n}\n","import {path} from \"d3-path\";\nimport constant from \"./constant\";\nimport curveLinear from \"./curve/linear\";\nimport line from \"./line\";\nimport {x as pointX, y as pointY} from \"./point\";\n\nexport default function() {\n var x0 = pointX,\n x1 = null,\n y0 = constant(0),\n y1 = pointY,\n defined = constant(true),\n context = null,\n curve = curveLinear,\n output = null;\n\n function area(data) {\n var i,\n j,\n k,\n n = data.length,\n d,\n defined0 = false,\n buffer,\n x0z = new Array(n),\n y0z = new Array(n);\n\n if (context == null) output = curve(buffer = path());\n\n for (i = 0; i <= n; ++i) {\n if (!(i < n && defined(d = data[i], i, data)) === defined0) {\n if (defined0 = !defined0) {\n j = i;\n output.areaStart();\n output.lineStart();\n } else {\n output.lineEnd();\n output.lineStart();\n for (k = i - 1; k >= j; --k) {\n output.point(x0z[k], y0z[k]);\n }\n output.lineEnd();\n output.areaEnd();\n }\n }\n if (defined0) {\n x0z[i] = +x0(d, i, data), y0z[i] = +y0(d, i, data);\n output.point(x1 ? +x1(d, i, data) : x0z[i], y1 ? +y1(d, i, data) : y0z[i]);\n }\n }\n\n if (buffer) return output = null, buffer + \"\" || null;\n }\n\n function arealine() {\n return line().defined(defined).curve(curve).context(context);\n }\n\n area.x = function(_) {\n return arguments.length ? (x0 = typeof _ === \"function\" ? _ : constant(+_), x1 = null, area) : x0;\n };\n\n area.x0 = function(_) {\n return arguments.length ? (x0 = typeof _ === \"function\" ? _ : constant(+_), area) : x0;\n };\n\n area.x1 = function(_) {\n return arguments.length ? (x1 = _ == null ? null : typeof _ === \"function\" ? _ : constant(+_), area) : x1;\n };\n\n area.y = function(_) {\n return arguments.length ? (y0 = typeof _ === \"function\" ? _ : constant(+_), y1 = null, area) : y0;\n };\n\n area.y0 = function(_) {\n return arguments.length ? (y0 = typeof _ === \"function\" ? _ : constant(+_), area) : y0;\n };\n\n area.y1 = function(_) {\n return arguments.length ? (y1 = _ == null ? null : typeof _ === \"function\" ? _ : constant(+_), area) : y1;\n };\n\n area.lineX0 =\n area.lineY0 = function() {\n return arealine().x(x0).y(y0);\n };\n\n area.lineY1 = function() {\n return arealine().x(x0).y(y1);\n };\n\n area.lineX1 = function() {\n return arealine().x(x1).y(y0);\n };\n\n area.defined = function(_) {\n return arguments.length ? (defined = typeof _ === \"function\" ? _ : constant(!!_), area) : defined;\n };\n\n area.curve = function(_) {\n return arguments.length ? (curve = _, context != null && (output = curve(context)), area) : curve;\n };\n\n area.context = function(_) {\n return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), area) : context;\n };\n\n return area;\n}\n","export default function(a, b) {\n return b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN;\n}\n","export default function(d) {\n return d;\n}\n","import curveLinear from \"./linear\";\n\nexport var curveRadialLinear = curveRadial(curveLinear);\n\nfunction Radial(curve) {\n this._curve = curve;\n}\n\nRadial.prototype = {\n areaStart: function() {\n this._curve.areaStart();\n },\n areaEnd: function() {\n this._curve.areaEnd();\n },\n lineStart: function() {\n this._curve.lineStart();\n },\n lineEnd: function() {\n this._curve.lineEnd();\n },\n point: function(a, r) {\n this._curve.point(r * Math.sin(a), r * -Math.cos(a));\n }\n};\n\nexport default function curveRadial(curve) {\n\n function radial(context) {\n return new Radial(curve(context));\n }\n\n radial._curve = curve;\n\n return radial;\n}\n","import curveRadial, {curveRadialLinear} from \"./curve/radial\";\nimport line from \"./line\";\n\nexport function lineRadial(l) {\n var c = l.curve;\n\n l.angle = l.x, delete l.x;\n l.radius = l.y, delete l.y;\n\n l.curve = function(_) {\n return arguments.length ? c(curveRadial(_)) : c()._curve;\n };\n\n return l;\n}\n\nexport default function() {\n return lineRadial(line().curve(curveRadialLinear));\n}\n","export var slice = Array.prototype.slice;\n","import {pi, tau} from \"../math\";\n\nexport default {\n draw: function(context, size) {\n var r = Math.sqrt(size / pi);\n context.moveTo(r, 0);\n context.arc(0, 0, r, 0, tau);\n }\n};\n","export default {\n draw: function(context, size) {\n var r = Math.sqrt(size / 5) / 2;\n context.moveTo(-3 * r, -r);\n context.lineTo(-r, -r);\n context.lineTo(-r, -3 * r);\n context.lineTo(r, -3 * r);\n context.lineTo(r, -r);\n context.lineTo(3 * r, -r);\n context.lineTo(3 * r, r);\n context.lineTo(r, r);\n context.lineTo(r, 3 * r);\n context.lineTo(-r, 3 * r);\n context.lineTo(-r, r);\n context.lineTo(-3 * r, r);\n context.closePath();\n }\n};\n","var tan30 = Math.sqrt(1 / 3),\n tan30_2 = tan30 * 2;\n\nexport default {\n draw: function(context, size) {\n var y = Math.sqrt(size / tan30_2),\n x = y * tan30;\n context.moveTo(0, -y);\n context.lineTo(x, 0);\n context.lineTo(0, y);\n context.lineTo(-x, 0);\n context.closePath();\n }\n};\n","import {pi, tau} from \"../math\";\n\nvar ka = 0.89081309152928522810,\n kr = Math.sin(pi / 10) / Math.sin(7 * pi / 10),\n kx = Math.sin(tau / 10) * kr,\n ky = -Math.cos(tau / 10) * kr;\n\nexport default {\n draw: function(context, size) {\n var r = Math.sqrt(size * ka),\n x = kx * r,\n y = ky * r;\n context.moveTo(0, -r);\n context.lineTo(x, y);\n for (var i = 1; i < 5; ++i) {\n var a = tau * i / 5,\n c = Math.cos(a),\n s = Math.sin(a);\n context.lineTo(s * r, -c * r);\n context.lineTo(c * x - s * y, s * x + c * y);\n }\n context.closePath();\n }\n};\n","export default {\n draw: function(context, size) {\n var w = Math.sqrt(size),\n x = -w / 2;\n context.rect(x, x, w, w);\n }\n};\n","var sqrt3 = Math.sqrt(3);\n\nexport default {\n draw: function(context, size) {\n var y = -Math.sqrt(size / (sqrt3 * 3));\n context.moveTo(0, y * 2);\n context.lineTo(-sqrt3 * y, -y);\n context.lineTo(sqrt3 * y, -y);\n context.closePath();\n }\n};\n","var c = -0.5,\n s = Math.sqrt(3) / 2,\n k = 1 / Math.sqrt(12),\n a = (k / 2 + 1) * 3;\n\nexport default {\n draw: function(context, size) {\n var r = Math.sqrt(size / a),\n x0 = r / 2,\n y0 = r * k,\n x1 = x0,\n y1 = r * k + r,\n x2 = -x1,\n y2 = y1;\n context.moveTo(x0, y0);\n context.lineTo(x1, y1);\n context.lineTo(x2, y2);\n context.lineTo(c * x0 - s * y0, s * x0 + c * y0);\n context.lineTo(c * x1 - s * y1, s * x1 + c * y1);\n context.lineTo(c * x2 - s * y2, s * x2 + c * y2);\n context.lineTo(c * x0 + s * y0, c * y0 - s * x0);\n context.lineTo(c * x1 + s * y1, c * y1 - s * x1);\n context.lineTo(c * x2 + s * y2, c * y2 - s * x2);\n context.closePath();\n }\n};\n","export default function() {}\n","export function point(that, x, y) {\n that._context.bezierCurveTo(\n (2 * that._x0 + that._x1) / 3,\n (2 * that._y0 + that._y1) / 3,\n (that._x0 + 2 * that._x1) / 3,\n (that._y0 + 2 * that._y1) / 3,\n (that._x0 + 4 * that._x1 + x) / 6,\n (that._y0 + 4 * that._y1 + y) / 6\n );\n}\n\nexport function Basis(context) {\n this._context = context;\n}\n\nBasis.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 =\n this._y0 = this._y1 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 3: point(this, this._x1, this._y1); // proceed\n case 2: this._context.lineTo(this._x1, this._y1); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; this._context.lineTo((5 * this._x0 + this._x1) / 6, (5 * this._y0 + this._y1) / 6); // proceed\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n }\n};\n\nexport default function(context) {\n return new Basis(context);\n}\n","import noop from \"../noop\";\nimport {point} from \"./basis\";\n\nfunction BasisClosed(context) {\n this._context = context;\n}\n\nBasisClosed.prototype = {\n areaStart: noop,\n areaEnd: noop,\n lineStart: function() {\n this._x0 = this._x1 = this._x2 = this._x3 = this._x4 =\n this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 1: {\n this._context.moveTo(this._x2, this._y2);\n this._context.closePath();\n break;\n }\n case 2: {\n this._context.moveTo((this._x2 + 2 * this._x3) / 3, (this._y2 + 2 * this._y3) / 3);\n this._context.lineTo((this._x3 + 2 * this._x2) / 3, (this._y3 + 2 * this._y2) / 3);\n this._context.closePath();\n break;\n }\n case 3: {\n this.point(this._x2, this._y2);\n this.point(this._x3, this._y3);\n this.point(this._x4, this._y4);\n break;\n }\n }\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._x2 = x, this._y2 = y; break;\n case 1: this._point = 2; this._x3 = x, this._y3 = y; break;\n case 2: this._point = 3; this._x4 = x, this._y4 = y; this._context.moveTo((this._x0 + 4 * this._x1 + x) / 6, (this._y0 + 4 * this._y1 + y) / 6); break;\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n }\n};\n\nexport default function(context) {\n return new BasisClosed(context);\n}\n","import {point} from \"./basis\";\n\nfunction BasisOpen(context) {\n this._context = context;\n}\n\nBasisOpen.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 =\n this._y0 = this._y1 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; var x0 = (this._x0 + 4 * this._x1 + x) / 6, y0 = (this._y0 + 4 * this._y1 + y) / 6; this._line ? this._context.lineTo(x0, y0) : this._context.moveTo(x0, y0); break;\n case 3: this._point = 4; // proceed\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n }\n};\n\nexport default function(context) {\n return new BasisOpen(context);\n}\n","import {Basis} from \"./basis\";\n\nfunction Bundle(context, beta) {\n this._basis = new Basis(context);\n this._beta = beta;\n}\n\nBundle.prototype = {\n lineStart: function() {\n this._x = [];\n this._y = [];\n this._basis.lineStart();\n },\n lineEnd: function() {\n var x = this._x,\n y = this._y,\n j = x.length - 1;\n\n if (j > 0) {\n var x0 = x[0],\n y0 = y[0],\n dx = x[j] - x0,\n dy = y[j] - y0,\n i = -1,\n t;\n\n while (++i <= j) {\n t = i / j;\n this._basis.point(\n this._beta * x[i] + (1 - this._beta) * (x0 + t * dx),\n this._beta * y[i] + (1 - this._beta) * (y0 + t * dy)\n );\n }\n }\n\n this._x = this._y = null;\n this._basis.lineEnd();\n },\n point: function(x, y) {\n this._x.push(+x);\n this._y.push(+y);\n }\n};\n\nexport default (function custom(beta) {\n\n function bundle(context) {\n return beta === 1 ? new Basis(context) : new Bundle(context, beta);\n }\n\n bundle.beta = function(beta) {\n return custom(+beta);\n };\n\n return bundle;\n})(0.85);\n","export function point(that, x, y) {\n that._context.bezierCurveTo(\n that._x1 + that._k * (that._x2 - that._x0),\n that._y1 + that._k * (that._y2 - that._y0),\n that._x2 + that._k * (that._x1 - x),\n that._y2 + that._k * (that._y1 - y),\n that._x2,\n that._y2\n );\n}\n\nexport function Cardinal(context, tension) {\n this._context = context;\n this._k = (1 - tension) / 6;\n}\n\nCardinal.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 2: this._context.lineTo(this._x2, this._y2); break;\n case 3: point(this, this._x1, this._y1); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; this._x1 = x, this._y1 = y; break;\n case 2: this._point = 3; // proceed\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(tension) {\n\n function cardinal(context) {\n return new Cardinal(context, tension);\n }\n\n cardinal.tension = function(tension) {\n return custom(+tension);\n };\n\n return cardinal;\n})(0);\n","import noop from \"../noop\";\nimport {point} from \"./cardinal\";\n\nexport function CardinalClosed(context, tension) {\n this._context = context;\n this._k = (1 - tension) / 6;\n}\n\nCardinalClosed.prototype = {\n areaStart: noop,\n areaEnd: noop,\n lineStart: function() {\n this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = this._x5 =\n this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = this._y5 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 1: {\n this._context.moveTo(this._x3, this._y3);\n this._context.closePath();\n break;\n }\n case 2: {\n this._context.lineTo(this._x3, this._y3);\n this._context.closePath();\n break;\n }\n case 3: {\n this.point(this._x3, this._y3);\n this.point(this._x4, this._y4);\n this.point(this._x5, this._y5);\n break;\n }\n }\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._x3 = x, this._y3 = y; break;\n case 1: this._point = 2; this._context.moveTo(this._x4 = x, this._y4 = y); break;\n case 2: this._point = 3; this._x5 = x, this._y5 = y; break;\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(tension) {\n\n function cardinal(context) {\n return new CardinalClosed(context, tension);\n }\n\n cardinal.tension = function(tension) {\n return custom(+tension);\n };\n\n return cardinal;\n})(0);\n","import {point} from \"./cardinal\";\n\nexport function CardinalOpen(context, tension) {\n this._context = context;\n this._k = (1 - tension) / 6;\n}\n\nCardinalOpen.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; this._line ? this._context.lineTo(this._x2, this._y2) : this._context.moveTo(this._x2, this._y2); break;\n case 3: this._point = 4; // proceed\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(tension) {\n\n function cardinal(context) {\n return new CardinalOpen(context, tension);\n }\n\n cardinal.tension = function(tension) {\n return custom(+tension);\n };\n\n return cardinal;\n})(0);\n","import {epsilon} from \"../math\";\nimport {Cardinal} from \"./cardinal\";\n\nexport function point(that, x, y) {\n var x1 = that._x1,\n y1 = that._y1,\n x2 = that._x2,\n y2 = that._y2;\n\n if (that._l01_a > epsilon) {\n var a = 2 * that._l01_2a + 3 * that._l01_a * that._l12_a + that._l12_2a,\n n = 3 * that._l01_a * (that._l01_a + that._l12_a);\n x1 = (x1 * a - that._x0 * that._l12_2a + that._x2 * that._l01_2a) / n;\n y1 = (y1 * a - that._y0 * that._l12_2a + that._y2 * that._l01_2a) / n;\n }\n\n if (that._l23_a > epsilon) {\n var b = 2 * that._l23_2a + 3 * that._l23_a * that._l12_a + that._l12_2a,\n m = 3 * that._l23_a * (that._l23_a + that._l12_a);\n x2 = (x2 * b + that._x1 * that._l23_2a - x * that._l12_2a) / m;\n y2 = (y2 * b + that._y1 * that._l23_2a - y * that._l12_2a) / m;\n }\n\n that._context.bezierCurveTo(x1, y1, x2, y2, that._x2, that._y2);\n}\n\nfunction CatmullRom(context, alpha) {\n this._context = context;\n this._alpha = alpha;\n}\n\nCatmullRom.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._l01_a = this._l12_a = this._l23_a =\n this._l01_2a = this._l12_2a = this._l23_2a =\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 2: this._context.lineTo(this._x2, this._y2); break;\n case 3: this.point(this._x2, this._y2); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n\n if (this._point) {\n var x23 = this._x2 - x,\n y23 = this._y2 - y;\n this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));\n }\n\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; // proceed\n default: point(this, x, y); break;\n }\n\n this._l01_a = this._l12_a, this._l12_a = this._l23_a;\n this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(alpha) {\n\n function catmullRom(context) {\n return alpha ? new CatmullRom(context, alpha) : new Cardinal(context, 0);\n }\n\n catmullRom.alpha = function(alpha) {\n return custom(+alpha);\n };\n\n return catmullRom;\n})(0.5);\n","import {CardinalClosed} from \"./cardinalClosed\";\nimport noop from \"../noop\";\nimport {point} from \"./catmullRom\";\n\nfunction CatmullRomClosed(context, alpha) {\n this._context = context;\n this._alpha = alpha;\n}\n\nCatmullRomClosed.prototype = {\n areaStart: noop,\n areaEnd: noop,\n lineStart: function() {\n this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = this._x5 =\n this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = this._y5 = NaN;\n this._l01_a = this._l12_a = this._l23_a =\n this._l01_2a = this._l12_2a = this._l23_2a =\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 1: {\n this._context.moveTo(this._x3, this._y3);\n this._context.closePath();\n break;\n }\n case 2: {\n this._context.lineTo(this._x3, this._y3);\n this._context.closePath();\n break;\n }\n case 3: {\n this.point(this._x3, this._y3);\n this.point(this._x4, this._y4);\n this.point(this._x5, this._y5);\n break;\n }\n }\n },\n point: function(x, y) {\n x = +x, y = +y;\n\n if (this._point) {\n var x23 = this._x2 - x,\n y23 = this._y2 - y;\n this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));\n }\n\n switch (this._point) {\n case 0: this._point = 1; this._x3 = x, this._y3 = y; break;\n case 1: this._point = 2; this._context.moveTo(this._x4 = x, this._y4 = y); break;\n case 2: this._point = 3; this._x5 = x, this._y5 = y; break;\n default: point(this, x, y); break;\n }\n\n this._l01_a = this._l12_a, this._l12_a = this._l23_a;\n this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(alpha) {\n\n function catmullRom(context) {\n return alpha ? new CatmullRomClosed(context, alpha) : new CardinalClosed(context, 0);\n }\n\n catmullRom.alpha = function(alpha) {\n return custom(+alpha);\n };\n\n return catmullRom;\n})(0.5);\n","import {CardinalOpen} from \"./cardinalOpen\";\nimport {point} from \"./catmullRom\";\n\nfunction CatmullRomOpen(context, alpha) {\n this._context = context;\n this._alpha = alpha;\n}\n\nCatmullRomOpen.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._l01_a = this._l12_a = this._l23_a =\n this._l01_2a = this._l12_2a = this._l23_2a =\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n\n if (this._point) {\n var x23 = this._x2 - x,\n y23 = this._y2 - y;\n this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));\n }\n\n switch (this._point) {\n case 0: this._point = 1; break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; this._line ? this._context.lineTo(this._x2, this._y2) : this._context.moveTo(this._x2, this._y2); break;\n case 3: this._point = 4; // proceed\n default: point(this, x, y); break;\n }\n\n this._l01_a = this._l12_a, this._l12_a = this._l23_a;\n this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(alpha) {\n\n function catmullRom(context) {\n return alpha ? new CatmullRomOpen(context, alpha) : new CardinalOpen(context, 0);\n }\n\n catmullRom.alpha = function(alpha) {\n return custom(+alpha);\n };\n\n return catmullRom;\n})(0.5);\n","import noop from \"../noop\";\n\nfunction LinearClosed(context) {\n this._context = context;\n}\n\nLinearClosed.prototype = {\n areaStart: noop,\n areaEnd: noop,\n lineStart: function() {\n this._point = 0;\n },\n lineEnd: function() {\n if (this._point) this._context.closePath();\n },\n point: function(x, y) {\n x = +x, y = +y;\n if (this._point) this._context.lineTo(x, y);\n else this._point = 1, this._context.moveTo(x, y);\n }\n};\n\nexport default function(context) {\n return new LinearClosed(context);\n}\n","function sign(x) {\n return x < 0 ? -1 : 1;\n}\n\n// Calculate the slopes of the tangents (Hermite-type interpolation) based on\n// the following paper: Steffen, M. 1990. A Simple Method for Monotonic\n// Interpolation in One Dimension. Astronomy and Astrophysics, Vol. 239, NO.\n// NOV(II), P. 443, 1990.\nfunction slope3(that, x2, y2) {\n var h0 = that._x1 - that._x0,\n h1 = x2 - that._x1,\n s0 = (that._y1 - that._y0) / (h0 || h1 < 0 && -0),\n s1 = (y2 - that._y1) / (h1 || h0 < 0 && -0),\n p = (s0 * h1 + s1 * h0) / (h0 + h1);\n return (sign(s0) + sign(s1)) * Math.min(Math.abs(s0), Math.abs(s1), 0.5 * Math.abs(p)) || 0;\n}\n\n// Calculate a one-sided slope.\nfunction slope2(that, t) {\n var h = that._x1 - that._x0;\n return h ? (3 * (that._y1 - that._y0) / h - t) / 2 : t;\n}\n\n// According to https://en.wikipedia.org/wiki/Cubic_Hermite_spline#Representations\n// \"you can express cubic Hermite interpolation in terms of cubic Bézier curves\n// with respect to the four values p0, p0 + m0 / 3, p1 - m1 / 3, p1\".\nfunction point(that, t0, t1) {\n var x0 = that._x0,\n y0 = that._y0,\n x1 = that._x1,\n y1 = that._y1,\n dx = (x1 - x0) / 3;\n that._context.bezierCurveTo(x0 + dx, y0 + dx * t0, x1 - dx, y1 - dx * t1, x1, y1);\n}\n\nfunction MonotoneX(context) {\n this._context = context;\n}\n\nMonotoneX.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 =\n this._y0 = this._y1 =\n this._t0 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 2: this._context.lineTo(this._x1, this._y1); break;\n case 3: point(this, this._t0, slope2(this, this._t0)); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n var t1 = NaN;\n\n x = +x, y = +y;\n if (x === this._x1 && y === this._y1) return; // Ignore coincident points.\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; point(this, slope2(this, t1 = slope3(this, x, y)), t1); break;\n default: point(this, this._t0, t1 = slope3(this, x, y)); break;\n }\n\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n this._t0 = t1;\n }\n}\n\nfunction MonotoneY(context) {\n this._context = new ReflectContext(context);\n}\n\n(MonotoneY.prototype = Object.create(MonotoneX.prototype)).point = function(x, y) {\n MonotoneX.prototype.point.call(this, y, x);\n};\n\nfunction ReflectContext(context) {\n this._context = context;\n}\n\nReflectContext.prototype = {\n moveTo: function(x, y) { this._context.moveTo(y, x); },\n closePath: function() { this._context.closePath(); },\n lineTo: function(x, y) { this._context.lineTo(y, x); },\n bezierCurveTo: function(x1, y1, x2, y2, x, y) { this._context.bezierCurveTo(y1, x1, y2, x2, y, x); }\n};\n\nexport function monotoneX(context) {\n return new MonotoneX(context);\n}\n\nexport function monotoneY(context) {\n return new MonotoneY(context);\n}\n","function Natural(context) {\n this._context = context;\n}\n\nNatural.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x = [];\n this._y = [];\n },\n lineEnd: function() {\n var x = this._x,\n y = this._y,\n n = x.length;\n\n if (n) {\n this._line ? this._context.lineTo(x[0], y[0]) : this._context.moveTo(x[0], y[0]);\n if (n === 2) {\n this._context.lineTo(x[1], y[1]);\n } else {\n var px = controlPoints(x),\n py = controlPoints(y);\n for (var i0 = 0, i1 = 1; i1 < n; ++i0, ++i1) {\n this._context.bezierCurveTo(px[0][i0], py[0][i0], px[1][i0], py[1][i0], x[i1], y[i1]);\n }\n }\n }\n\n if (this._line || (this._line !== 0 && n === 1)) this._context.closePath();\n this._line = 1 - this._line;\n this._x = this._y = null;\n },\n point: function(x, y) {\n this._x.push(+x);\n this._y.push(+y);\n }\n};\n\n// See https://www.particleincell.com/2012/bezier-splines/ for derivation.\nfunction controlPoints(x) {\n var i,\n n = x.length - 1,\n m,\n a = new Array(n),\n b = new Array(n),\n r = new Array(n);\n a[0] = 0, b[0] = 2, r[0] = x[0] + 2 * x[1];\n for (i = 1; i < n - 1; ++i) a[i] = 1, b[i] = 4, r[i] = 4 * x[i] + 2 * x[i + 1];\n a[n - 1] = 2, b[n - 1] = 7, r[n - 1] = 8 * x[n - 1] + x[n];\n for (i = 1; i < n; ++i) m = a[i] / b[i - 1], b[i] -= m, r[i] -= m * r[i - 1];\n a[n - 1] = r[n - 1] / b[n - 1];\n for (i = n - 2; i >= 0; --i) a[i] = (r[i] - a[i + 1]) / b[i];\n b[n - 1] = (x[n] + a[n - 1]) / 2;\n for (i = 0; i < n - 1; ++i) b[i] = 2 * x[i + 1] - a[i + 1];\n return [a, b];\n}\n\nexport default function(context) {\n return new Natural(context);\n}\n","function Step(context, t) {\n this._context = context;\n this._t = t;\n}\n\nStep.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x = this._y = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n if (0 < this._t && this._t < 1 && this._point === 2) this._context.lineTo(this._x, this._y);\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n if (this._line >= 0) this._t = 1 - this._t, this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; // proceed\n default: {\n if (this._t <= 0) {\n this._context.lineTo(this._x, y);\n this._context.lineTo(x, y);\n } else {\n var x1 = this._x * (1 - this._t) + x * this._t;\n this._context.lineTo(x1, this._y);\n this._context.lineTo(x1, y);\n }\n break;\n }\n }\n this._x = x, this._y = y;\n }\n};\n\nexport default function(context) {\n return new Step(context, 0.5);\n}\n\nexport function stepBefore(context) {\n return new Step(context, 0);\n}\n\nexport function stepAfter(context) {\n return new Step(context, 1);\n}\n","export default function(series, order) {\n if (!((n = series.length) > 1)) return;\n for (var i = 1, j, s0, s1 = series[order[0]], n, m = s1.length; i < n; ++i) {\n s0 = s1, s1 = series[order[i]];\n for (j = 0; j < m; ++j) {\n s1[j][1] += s1[j][0] = isNaN(s0[j][1]) ? s0[j][0] : s0[j][1];\n }\n }\n}\n","export default function(series) {\n var n = series.length, o = new Array(n);\n while (--n >= 0) o[n] = n;\n return o;\n}\n","import {slice} from \"./array\";\nimport constant from \"./constant\";\nimport offsetNone from \"./offset/none\";\nimport orderNone from \"./order/none\";\n\nfunction stackValue(d, key) {\n return d[key];\n}\n\nexport default function() {\n var keys = constant([]),\n order = orderNone,\n offset = offsetNone,\n value = stackValue;\n\n function stack(data) {\n var kz = keys.apply(this, arguments),\n i,\n m = data.length,\n n = kz.length,\n sz = new Array(n),\n oz;\n\n for (i = 0; i < n; ++i) {\n for (var ki = kz[i], si = sz[i] = new Array(m), j = 0, sij; j < m; ++j) {\n si[j] = sij = [0, +value(data[j], ki, j, data)];\n sij.data = data[j];\n }\n si.key = ki;\n }\n\n for (i = 0, oz = order(sz); i < n; ++i) {\n sz[oz[i]].index = i;\n }\n\n offset(sz, oz);\n return sz;\n }\n\n stack.keys = function(_) {\n return arguments.length ? (keys = typeof _ === \"function\" ? _ : constant(slice.call(_)), stack) : keys;\n };\n\n stack.value = function(_) {\n return arguments.length ? (value = typeof _ === \"function\" ? _ : constant(+_), stack) : value;\n };\n\n stack.order = function(_) {\n return arguments.length ? (order = _ == null ? orderNone : typeof _ === \"function\" ? _ : constant(slice.call(_)), stack) : order;\n };\n\n stack.offset = function(_) {\n return arguments.length ? (offset = _ == null ? offsetNone : _, stack) : offset;\n };\n\n return stack;\n}\n","import none from \"./none\";\n\nexport default function(series) {\n var sums = series.map(sum);\n return none(series).sort(function(a, b) { return sums[a] - sums[b]; });\n}\n\nexport function sum(series) {\n var s = 0, i = -1, n = series.length, v;\n while (++i < n) if (v = +series[i][1]) s += v;\n return s;\n}\n","export function cubicIn(t) {\n return t * t * t;\n}\n\nexport function cubicOut(t) {\n return --t * t * t + 1;\n}\n\nexport function cubicInOut(t) {\n return ((t *= 2) <= 1 ? t * t * t : (t -= 2) * t * t + 2) / 2;\n}\n","var exponent = 3;\n\nexport var polyIn = (function custom(e) {\n e = +e;\n\n function polyIn(t) {\n return Math.pow(t, e);\n }\n\n polyIn.exponent = custom;\n\n return polyIn;\n})(exponent);\n\nexport var polyOut = (function custom(e) {\n e = +e;\n\n function polyOut(t) {\n return 1 - Math.pow(1 - t, e);\n }\n\n polyOut.exponent = custom;\n\n return polyOut;\n})(exponent);\n\nexport var polyInOut = (function custom(e) {\n e = +e;\n\n function polyInOut(t) {\n return ((t *= 2) <= 1 ? Math.pow(t, e) : 2 - Math.pow(2 - t, e)) / 2;\n }\n\n polyInOut.exponent = custom;\n\n return polyInOut;\n})(exponent);\n","var pi = Math.PI,\n halfPi = pi / 2;\n\nexport function sinIn(t) {\n return 1 - Math.cos(t * halfPi);\n}\n\nexport function sinOut(t) {\n return Math.sin(t * halfPi);\n}\n\nexport function sinInOut(t) {\n return (1 - Math.cos(pi * t)) / 2;\n}\n","var b1 = 4 / 11,\n b2 = 6 / 11,\n b3 = 8 / 11,\n b4 = 3 / 4,\n b5 = 9 / 11,\n b6 = 10 / 11,\n b7 = 15 / 16,\n b8 = 21 / 22,\n b9 = 63 / 64,\n b0 = 1 / b1 / b1;\n\nexport function bounceIn(t) {\n return 1 - bounceOut(1 - t);\n}\n\nexport function bounceOut(t) {\n return (t = +t) < b1 ? b0 * t * t : t < b3 ? b0 * (t -= b2) * t + b4 : t < b6 ? b0 * (t -= b5) * t + b7 : b0 * (t -= b8) * t + b9;\n}\n\nexport function bounceInOut(t) {\n return ((t *= 2) <= 1 ? 1 - bounceOut(1 - t) : bounceOut(t - 1) + 1) / 2;\n}\n","var overshoot = 1.70158;\n\nexport var backIn = (function custom(s) {\n s = +s;\n\n function backIn(t) {\n return t * t * ((s + 1) * t - s);\n }\n\n backIn.overshoot = custom;\n\n return backIn;\n})(overshoot);\n\nexport var backOut = (function custom(s) {\n s = +s;\n\n function backOut(t) {\n return --t * t * ((s + 1) * t + s) + 1;\n }\n\n backOut.overshoot = custom;\n\n return backOut;\n})(overshoot);\n\nexport var backInOut = (function custom(s) {\n s = +s;\n\n function backInOut(t) {\n return ((t *= 2) < 1 ? t * t * ((s + 1) * t - s) : (t -= 2) * t * ((s + 1) * t + s) + 2) / 2;\n }\n\n backInOut.overshoot = custom;\n\n return backInOut;\n})(overshoot);\n","var tau = 2 * Math.PI,\n amplitude = 1,\n period = 0.3;\n\nexport var elasticIn = (function custom(a, p) {\n var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau);\n\n function elasticIn(t) {\n return a * Math.pow(2, 10 * --t) * Math.sin((s - t) / p);\n }\n\n elasticIn.amplitude = function(a) { return custom(a, p * tau); };\n elasticIn.period = function(p) { return custom(a, p); };\n\n return elasticIn;\n})(amplitude, period);\n\nexport var elasticOut = (function custom(a, p) {\n var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau);\n\n function elasticOut(t) {\n return 1 - a * Math.pow(2, -10 * (t = +t)) * Math.sin((t + s) / p);\n }\n\n elasticOut.amplitude = function(a) { return custom(a, p * tau); };\n elasticOut.period = function(p) { return custom(a, p); };\n\n return elasticOut;\n})(amplitude, period);\n\nexport var elasticInOut = (function custom(a, p) {\n var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau);\n\n function elasticInOut(t) {\n return ((t = t * 2 - 1) < 0\n ? a * Math.pow(2, 10 * t) * Math.sin((s - t) / p)\n : 2 - a * Math.pow(2, -10 * t) * Math.sin((s + t) / p)) / 2;\n }\n\n elasticInOut.amplitude = function(a) { return custom(a, p * tau); };\n elasticInOut.period = function(p) { return custom(a, p); };\n\n return elasticInOut;\n})(amplitude, period);\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","export function x(d) {\n return d[0];\n}\n\nexport function y(d) {\n return d[1];\n}\n","function RedBlackTree() {\n this._ = null; // root node\n}\n\nexport function RedBlackNode(node) {\n node.U = // parent node\n node.C = // color - true for red, false for black\n node.L = // left node\n node.R = // right node\n node.P = // previous node\n node.N = null; // next node\n}\n\nRedBlackTree.prototype = {\n constructor: RedBlackTree,\n\n insert: function(after, node) {\n var parent, grandpa, uncle;\n\n if (after) {\n node.P = after;\n node.N = after.N;\n if (after.N) after.N.P = node;\n after.N = node;\n if (after.R) {\n after = after.R;\n while (after.L) after = after.L;\n after.L = node;\n } else {\n after.R = node;\n }\n parent = after;\n } else if (this._) {\n after = RedBlackFirst(this._);\n node.P = null;\n node.N = after;\n after.P = after.L = node;\n parent = after;\n } else {\n node.P = node.N = null;\n this._ = node;\n parent = null;\n }\n node.L = node.R = null;\n node.U = parent;\n node.C = true;\n\n after = node;\n while (parent && parent.C) {\n grandpa = parent.U;\n if (parent === grandpa.L) {\n uncle = grandpa.R;\n if (uncle && uncle.C) {\n parent.C = uncle.C = false;\n grandpa.C = true;\n after = grandpa;\n } else {\n if (after === parent.R) {\n RedBlackRotateLeft(this, parent);\n after = parent;\n parent = after.U;\n }\n parent.C = false;\n grandpa.C = true;\n RedBlackRotateRight(this, grandpa);\n }\n } else {\n uncle = grandpa.L;\n if (uncle && uncle.C) {\n parent.C = uncle.C = false;\n grandpa.C = true;\n after = grandpa;\n } else {\n if (after === parent.L) {\n RedBlackRotateRight(this, parent);\n after = parent;\n parent = after.U;\n }\n parent.C = false;\n grandpa.C = true;\n RedBlackRotateLeft(this, grandpa);\n }\n }\n parent = after.U;\n }\n this._.C = false;\n },\n\n remove: function(node) {\n if (node.N) node.N.P = node.P;\n if (node.P) node.P.N = node.N;\n node.N = node.P = null;\n\n var parent = node.U,\n sibling,\n left = node.L,\n right = node.R,\n next,\n red;\n\n if (!left) next = right;\n else if (!right) next = left;\n else next = RedBlackFirst(right);\n\n if (parent) {\n if (parent.L === node) parent.L = next;\n else parent.R = next;\n } else {\n this._ = next;\n }\n\n if (left && right) {\n red = next.C;\n next.C = node.C;\n next.L = left;\n left.U = next;\n if (next !== right) {\n parent = next.U;\n next.U = node.U;\n node = next.R;\n parent.L = node;\n next.R = right;\n right.U = next;\n } else {\n next.U = parent;\n parent = next;\n node = next.R;\n }\n } else {\n red = node.C;\n node = next;\n }\n\n if (node) node.U = parent;\n if (red) return;\n if (node && node.C) { node.C = false; return; }\n\n do {\n if (node === this._) break;\n if (node === parent.L) {\n sibling = parent.R;\n if (sibling.C) {\n sibling.C = false;\n parent.C = true;\n RedBlackRotateLeft(this, parent);\n sibling = parent.R;\n }\n if ((sibling.L && sibling.L.C)\n || (sibling.R && sibling.R.C)) {\n if (!sibling.R || !sibling.R.C) {\n sibling.L.C = false;\n sibling.C = true;\n RedBlackRotateRight(this, sibling);\n sibling = parent.R;\n }\n sibling.C = parent.C;\n parent.C = sibling.R.C = false;\n RedBlackRotateLeft(this, parent);\n node = this._;\n break;\n }\n } else {\n sibling = parent.L;\n if (sibling.C) {\n sibling.C = false;\n parent.C = true;\n RedBlackRotateRight(this, parent);\n sibling = parent.L;\n }\n if ((sibling.L && sibling.L.C)\n || (sibling.R && sibling.R.C)) {\n if (!sibling.L || !sibling.L.C) {\n sibling.R.C = false;\n sibling.C = true;\n RedBlackRotateLeft(this, sibling);\n sibling = parent.L;\n }\n sibling.C = parent.C;\n parent.C = sibling.L.C = false;\n RedBlackRotateRight(this, parent);\n node = this._;\n break;\n }\n }\n sibling.C = true;\n node = parent;\n parent = parent.U;\n } while (!node.C);\n\n if (node) node.C = false;\n }\n};\n\nfunction RedBlackRotateLeft(tree, node) {\n var p = node,\n q = node.R,\n parent = p.U;\n\n if (parent) {\n if (parent.L === p) parent.L = q;\n else parent.R = q;\n } else {\n tree._ = q;\n }\n\n q.U = parent;\n p.U = q;\n p.R = q.L;\n if (p.R) p.R.U = p;\n q.L = p;\n}\n\nfunction RedBlackRotateRight(tree, node) {\n var p = node,\n q = node.L,\n parent = p.U;\n\n if (parent) {\n if (parent.L === p) parent.L = q;\n else parent.R = q;\n } else {\n tree._ = q;\n }\n\n q.U = parent;\n p.U = q;\n p.L = q.R;\n if (p.L) p.L.U = p;\n q.R = p;\n}\n\nfunction RedBlackFirst(node) {\n while (node.L) node = node.L;\n return node;\n}\n\nexport default RedBlackTree;\n","import {cells, edges, epsilon} from \"./Diagram\";\n\nexport function createEdge(left, right, v0, v1) {\n var edge = [null, null],\n index = edges.push(edge) - 1;\n edge.left = left;\n edge.right = right;\n if (v0) setEdgeEnd(edge, left, right, v0);\n if (v1) setEdgeEnd(edge, right, left, v1);\n cells[left.index].halfedges.push(index);\n cells[right.index].halfedges.push(index);\n return edge;\n}\n\nexport function createBorderEdge(left, v0, v1) {\n var edge = [v0, v1];\n edge.left = left;\n return edge;\n}\n\nexport function setEdgeEnd(edge, left, right, vertex) {\n if (!edge[0] && !edge[1]) {\n edge[0] = vertex;\n edge.left = left;\n edge.right = right;\n } else if (edge.left === right) {\n edge[1] = vertex;\n } else {\n edge[0] = vertex;\n }\n}\n\n// Liang–Barsky line clipping.\nfunction clipEdge(edge, x0, y0, x1, y1) {\n var a = edge[0],\n b = edge[1],\n ax = a[0],\n ay = a[1],\n bx = b[0],\n by = b[1],\n t0 = 0,\n t1 = 1,\n dx = bx - ax,\n dy = by - ay,\n r;\n\n r = x0 - ax;\n if (!dx && r > 0) return;\n r /= dx;\n if (dx < 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n } else if (dx > 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n }\n\n r = x1 - ax;\n if (!dx && r < 0) return;\n r /= dx;\n if (dx < 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n } else if (dx > 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n }\n\n r = y0 - ay;\n if (!dy && r > 0) return;\n r /= dy;\n if (dy < 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n } else if (dy > 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n }\n\n r = y1 - ay;\n if (!dy && r < 0) return;\n r /= dy;\n if (dy < 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n } else if (dy > 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n }\n\n if (!(t0 > 0) && !(t1 < 1)) return true; // TODO Better check?\n\n if (t0 > 0) edge[0] = [ax + t0 * dx, ay + t0 * dy];\n if (t1 < 1) edge[1] = [ax + t1 * dx, ay + t1 * dy];\n return true;\n}\n\nfunction connectEdge(edge, x0, y0, x1, y1) {\n var v1 = edge[1];\n if (v1) return true;\n\n var v0 = edge[0],\n left = edge.left,\n right = edge.right,\n lx = left[0],\n ly = left[1],\n rx = right[0],\n ry = right[1],\n fx = (lx + rx) / 2,\n fy = (ly + ry) / 2,\n fm,\n fb;\n\n if (ry === ly) {\n if (fx < x0 || fx >= x1) return;\n if (lx > rx) {\n if (!v0) v0 = [fx, y0];\n else if (v0[1] >= y1) return;\n v1 = [fx, y1];\n } else {\n if (!v0) v0 = [fx, y1];\n else if (v0[1] < y0) return;\n v1 = [fx, y0];\n }\n } else {\n fm = (lx - rx) / (ry - ly);\n fb = fy - fm * fx;\n if (fm < -1 || fm > 1) {\n if (lx > rx) {\n if (!v0) v0 = [(y0 - fb) / fm, y0];\n else if (v0[1] >= y1) return;\n v1 = [(y1 - fb) / fm, y1];\n } else {\n if (!v0) v0 = [(y1 - fb) / fm, y1];\n else if (v0[1] < y0) return;\n v1 = [(y0 - fb) / fm, y0];\n }\n } else {\n if (ly < ry) {\n if (!v0) v0 = [x0, fm * x0 + fb];\n else if (v0[0] >= x1) return;\n v1 = [x1, fm * x1 + fb];\n } else {\n if (!v0) v0 = [x1, fm * x1 + fb];\n else if (v0[0] < x0) return;\n v1 = [x0, fm * x0 + fb];\n }\n }\n }\n\n edge[0] = v0;\n edge[1] = v1;\n return true;\n}\n\nexport function clipEdges(x0, y0, x1, y1) {\n var i = edges.length,\n edge;\n\n while (i--) {\n if (!connectEdge(edge = edges[i], x0, y0, x1, y1)\n || !clipEdge(edge, x0, y0, x1, y1)\n || !(Math.abs(edge[0][0] - edge[1][0]) > epsilon\n || Math.abs(edge[0][1] - edge[1][1]) > epsilon)) {\n delete edges[i];\n }\n }\n}\n","import {createBorderEdge} from \"./Edge\";\nimport {cells, edges, epsilon} from \"./Diagram\";\n\nexport function createCell(site) {\n return cells[site.index] = {\n site: site,\n halfedges: []\n };\n}\n\nfunction cellHalfedgeAngle(cell, edge) {\n var site = cell.site,\n va = edge.left,\n vb = edge.right;\n if (site === vb) vb = va, va = site;\n if (vb) return Math.atan2(vb[1] - va[1], vb[0] - va[0]);\n if (site === va) va = edge[1], vb = edge[0];\n else va = edge[0], vb = edge[1];\n return Math.atan2(va[0] - vb[0], vb[1] - va[1]);\n}\n\nexport function cellHalfedgeStart(cell, edge) {\n return edge[+(edge.left !== cell.site)];\n}\n\nexport function cellHalfedgeEnd(cell, edge) {\n return edge[+(edge.left === cell.site)];\n}\n\nexport function sortCellHalfedges() {\n for (var i = 0, n = cells.length, cell, halfedges, j, m; i < n; ++i) {\n if ((cell = cells[i]) && (m = (halfedges = cell.halfedges).length)) {\n var index = new Array(m),\n array = new Array(m);\n for (j = 0; j < m; ++j) index[j] = j, array[j] = cellHalfedgeAngle(cell, edges[halfedges[j]]);\n index.sort(function(i, j) { return array[j] - array[i]; });\n for (j = 0; j < m; ++j) array[j] = halfedges[index[j]];\n for (j = 0; j < m; ++j) halfedges[j] = array[j];\n }\n }\n}\n\nexport function clipCells(x0, y0, x1, y1) {\n var nCells = cells.length,\n iCell,\n cell,\n site,\n iHalfedge,\n halfedges,\n nHalfedges,\n start,\n startX,\n startY,\n end,\n endX,\n endY,\n cover = true;\n\n for (iCell = 0; iCell < nCells; ++iCell) {\n if (cell = cells[iCell]) {\n site = cell.site;\n halfedges = cell.halfedges;\n iHalfedge = halfedges.length;\n\n // Remove any dangling clipped edges.\n while (iHalfedge--) {\n if (!edges[halfedges[iHalfedge]]) {\n halfedges.splice(iHalfedge, 1);\n }\n }\n\n // Insert any border edges as necessary.\n iHalfedge = 0, nHalfedges = halfedges.length;\n while (iHalfedge < nHalfedges) {\n end = cellHalfedgeEnd(cell, edges[halfedges[iHalfedge]]), endX = end[0], endY = end[1];\n start = cellHalfedgeStart(cell, edges[halfedges[++iHalfedge % nHalfedges]]), startX = start[0], startY = start[1];\n if (Math.abs(endX - startX) > epsilon || Math.abs(endY - startY) > epsilon) {\n halfedges.splice(iHalfedge, 0, edges.push(createBorderEdge(site, end,\n Math.abs(endX - x0) < epsilon && y1 - endY > epsilon ? [x0, Math.abs(startX - x0) < epsilon ? startY : y1]\n : Math.abs(endY - y1) < epsilon && x1 - endX > epsilon ? [Math.abs(startY - y1) < epsilon ? startX : x1, y1]\n : Math.abs(endX - x1) < epsilon && endY - y0 > epsilon ? [x1, Math.abs(startX - x1) < epsilon ? startY : y0]\n : Math.abs(endY - y0) < epsilon && endX - x0 > epsilon ? [Math.abs(startY - y0) < epsilon ? startX : x0, y0]\n : null)) - 1);\n ++nHalfedges;\n }\n }\n\n if (nHalfedges) cover = false;\n }\n }\n\n // If there weren’t any edges, have the closest site cover the extent.\n // It doesn’t matter which corner of the extent we measure!\n if (cover) {\n var dx, dy, d2, dc = Infinity;\n\n for (iCell = 0, cover = null; iCell < nCells; ++iCell) {\n if (cell = cells[iCell]) {\n site = cell.site;\n dx = site[0] - x0;\n dy = site[1] - y0;\n d2 = dx * dx + dy * dy;\n if (d2 < dc) dc = d2, cover = cell;\n }\n }\n\n if (cover) {\n var v00 = [x0, y0], v01 = [x0, y1], v11 = [x1, y1], v10 = [x1, y0];\n cover.halfedges.push(\n edges.push(createBorderEdge(site = cover.site, v00, v01)) - 1,\n edges.push(createBorderEdge(site, v01, v11)) - 1,\n edges.push(createBorderEdge(site, v11, v10)) - 1,\n edges.push(createBorderEdge(site, v10, v00)) - 1\n );\n }\n }\n\n // Lastly delete any cells with no edges; these were entirely clipped.\n for (iCell = 0; iCell < nCells; ++iCell) {\n if (cell = cells[iCell]) {\n if (!cell.halfedges.length) {\n delete cells[iCell];\n }\n }\n }\n}\n","import {RedBlackNode} from \"./RedBlackTree\";\nimport {circles, epsilon2} from \"./Diagram\";\n\nvar circlePool = [];\n\nexport var firstCircle;\n\nfunction Circle() {\n RedBlackNode(this);\n this.x =\n this.y =\n this.arc =\n this.site =\n this.cy = null;\n}\n\nexport function attachCircle(arc) {\n var lArc = arc.P,\n rArc = arc.N;\n\n if (!lArc || !rArc) return;\n\n var lSite = lArc.site,\n cSite = arc.site,\n rSite = rArc.site;\n\n if (lSite === rSite) return;\n\n var bx = cSite[0],\n by = cSite[1],\n ax = lSite[0] - bx,\n ay = lSite[1] - by,\n cx = rSite[0] - bx,\n cy = rSite[1] - by;\n\n var d = 2 * (ax * cy - ay * cx);\n if (d >= -epsilon2) return;\n\n var ha = ax * ax + ay * ay,\n hc = cx * cx + cy * cy,\n x = (cy * ha - ay * hc) / d,\n y = (ax * hc - cx * ha) / d;\n\n var circle = circlePool.pop() || new Circle;\n circle.arc = arc;\n circle.site = cSite;\n circle.x = x + bx;\n circle.y = (circle.cy = y + by) + Math.sqrt(x * x + y * y); // y bottom\n\n arc.circle = circle;\n\n var before = null,\n node = circles._;\n\n while (node) {\n if (circle.y < node.y || (circle.y === node.y && circle.x <= node.x)) {\n if (node.L) node = node.L;\n else { before = node.P; break; }\n } else {\n if (node.R) node = node.R;\n else { before = node; break; }\n }\n }\n\n circles.insert(before, circle);\n if (!before) firstCircle = circle;\n}\n\nexport function detachCircle(arc) {\n var circle = arc.circle;\n if (circle) {\n if (!circle.P) firstCircle = circle.N;\n circles.remove(circle);\n circlePool.push(circle);\n RedBlackNode(circle);\n arc.circle = null;\n }\n}\n","import {RedBlackNode} from \"./RedBlackTree\";\nimport {createCell} from \"./Cell\";\nimport {attachCircle, detachCircle} from \"./Circle\";\nimport {createEdge, setEdgeEnd} from \"./Edge\";\nimport {beaches, epsilon} from \"./Diagram\";\n\nvar beachPool = [];\n\nfunction Beach() {\n RedBlackNode(this);\n this.edge =\n this.site =\n this.circle = null;\n}\n\nfunction createBeach(site) {\n var beach = beachPool.pop() || new Beach;\n beach.site = site;\n return beach;\n}\n\nfunction detachBeach(beach) {\n detachCircle(beach);\n beaches.remove(beach);\n beachPool.push(beach);\n RedBlackNode(beach);\n}\n\nexport function removeBeach(beach) {\n var circle = beach.circle,\n x = circle.x,\n y = circle.cy,\n vertex = [x, y],\n previous = beach.P,\n next = beach.N,\n disappearing = [beach];\n\n detachBeach(beach);\n\n var lArc = previous;\n while (lArc.circle\n && Math.abs(x - lArc.circle.x) < epsilon\n && Math.abs(y - lArc.circle.cy) < epsilon) {\n previous = lArc.P;\n disappearing.unshift(lArc);\n detachBeach(lArc);\n lArc = previous;\n }\n\n disappearing.unshift(lArc);\n detachCircle(lArc);\n\n var rArc = next;\n while (rArc.circle\n && Math.abs(x - rArc.circle.x) < epsilon\n && Math.abs(y - rArc.circle.cy) < epsilon) {\n next = rArc.N;\n disappearing.push(rArc);\n detachBeach(rArc);\n rArc = next;\n }\n\n disappearing.push(rArc);\n detachCircle(rArc);\n\n var nArcs = disappearing.length,\n iArc;\n for (iArc = 1; iArc < nArcs; ++iArc) {\n rArc = disappearing[iArc];\n lArc = disappearing[iArc - 1];\n setEdgeEnd(rArc.edge, lArc.site, rArc.site, vertex);\n }\n\n lArc = disappearing[0];\n rArc = disappearing[nArcs - 1];\n rArc.edge = createEdge(lArc.site, rArc.site, null, vertex);\n\n attachCircle(lArc);\n attachCircle(rArc);\n}\n\nexport function addBeach(site) {\n var x = site[0],\n directrix = site[1],\n lArc,\n rArc,\n dxl,\n dxr,\n node = beaches._;\n\n while (node) {\n dxl = leftBreakPoint(node, directrix) - x;\n if (dxl > epsilon) node = node.L; else {\n dxr = x - rightBreakPoint(node, directrix);\n if (dxr > epsilon) {\n if (!node.R) {\n lArc = node;\n break;\n }\n node = node.R;\n } else {\n if (dxl > -epsilon) {\n lArc = node.P;\n rArc = node;\n } else if (dxr > -epsilon) {\n lArc = node;\n rArc = node.N;\n } else {\n lArc = rArc = node;\n }\n break;\n }\n }\n }\n\n createCell(site);\n var newArc = createBeach(site);\n beaches.insert(lArc, newArc);\n\n if (!lArc && !rArc) return;\n\n if (lArc === rArc) {\n detachCircle(lArc);\n rArc = createBeach(lArc.site);\n beaches.insert(newArc, rArc);\n newArc.edge = rArc.edge = createEdge(lArc.site, newArc.site);\n attachCircle(lArc);\n attachCircle(rArc);\n return;\n }\n\n if (!rArc) { // && lArc\n newArc.edge = createEdge(lArc.site, newArc.site);\n return;\n }\n\n // else lArc !== rArc\n detachCircle(lArc);\n detachCircle(rArc);\n\n var lSite = lArc.site,\n ax = lSite[0],\n ay = lSite[1],\n bx = site[0] - ax,\n by = site[1] - ay,\n rSite = rArc.site,\n cx = rSite[0] - ax,\n cy = rSite[1] - ay,\n d = 2 * (bx * cy - by * cx),\n hb = bx * bx + by * by,\n hc = cx * cx + cy * cy,\n vertex = [(cy * hb - by * hc) / d + ax, (bx * hc - cx * hb) / d + ay];\n\n setEdgeEnd(rArc.edge, lSite, rSite, vertex);\n newArc.edge = createEdge(lSite, site, null, vertex);\n rArc.edge = createEdge(site, rSite, null, vertex);\n attachCircle(lArc);\n attachCircle(rArc);\n}\n\nfunction leftBreakPoint(arc, directrix) {\n var site = arc.site,\n rfocx = site[0],\n rfocy = site[1],\n pby2 = rfocy - directrix;\n\n if (!pby2) return rfocx;\n\n var lArc = arc.P;\n if (!lArc) return -Infinity;\n\n site = lArc.site;\n var lfocx = site[0],\n lfocy = site[1],\n plby2 = lfocy - directrix;\n\n if (!plby2) return lfocx;\n\n var hl = lfocx - rfocx,\n aby2 = 1 / pby2 - 1 / plby2,\n b = hl / plby2;\n\n if (aby2) return (-b + Math.sqrt(b * b - 2 * aby2 * (hl * hl / (-2 * plby2) - lfocy + plby2 / 2 + rfocy - pby2 / 2))) / aby2 + rfocx;\n\n return (rfocx + lfocx) / 2;\n}\n\nfunction rightBreakPoint(arc, directrix) {\n var rArc = arc.N;\n if (rArc) return leftBreakPoint(rArc, directrix);\n var site = arc.site;\n return site[1] === directrix ? site[0] : Infinity;\n}\n","import {addBeach, removeBeach} from \"./Beach\";\nimport {sortCellHalfedges, cellHalfedgeStart, clipCells} from \"./Cell\";\nimport {firstCircle} from \"./Circle\";\nimport {clipEdges} from \"./Edge\";\nimport RedBlackTree from \"./RedBlackTree\";\n\nexport var epsilon = 1e-6;\nexport var epsilon2 = 1e-12;\nexport var beaches;\nexport var cells;\nexport var circles;\nexport var edges;\n\nfunction triangleArea(a, b, c) {\n return (a[0] - c[0]) * (b[1] - a[1]) - (a[0] - b[0]) * (c[1] - a[1]);\n}\n\nfunction lexicographic(a, b) {\n return b[1] - a[1]\n || b[0] - a[0];\n}\n\nexport default function Diagram(sites, extent) {\n var site = sites.sort(lexicographic).pop(),\n x,\n y,\n circle;\n\n edges = [];\n cells = new Array(sites.length);\n beaches = new RedBlackTree;\n circles = new RedBlackTree;\n\n while (true) {\n circle = firstCircle;\n if (site && (!circle || site[1] < circle.y || (site[1] === circle.y && site[0] < circle.x))) {\n if (site[0] !== x || site[1] !== y) {\n addBeach(site);\n x = site[0], y = site[1];\n }\n site = sites.pop();\n } else if (circle) {\n removeBeach(circle.arc);\n } else {\n break;\n }\n }\n\n sortCellHalfedges();\n\n if (extent) {\n var x0 = +extent[0][0],\n y0 = +extent[0][1],\n x1 = +extent[1][0],\n y1 = +extent[1][1];\n clipEdges(x0, y0, x1, y1);\n clipCells(x0, y0, x1, y1);\n }\n\n this.edges = edges;\n this.cells = cells;\n\n beaches =\n circles =\n edges =\n cells = null;\n}\n\nDiagram.prototype = {\n constructor: Diagram,\n\n polygons: function() {\n var edges = this.edges;\n\n return this.cells.map(function(cell) {\n var polygon = cell.halfedges.map(function(i) { return cellHalfedgeStart(cell, edges[i]); });\n polygon.data = cell.site.data;\n return polygon;\n });\n },\n\n triangles: function() {\n var triangles = [],\n edges = this.edges;\n\n this.cells.forEach(function(cell, i) {\n if (!(m = (halfedges = cell.halfedges).length)) return;\n var site = cell.site,\n halfedges,\n j = -1,\n m,\n s0,\n e1 = edges[halfedges[m - 1]],\n s1 = e1.left === site ? e1.right : e1.left;\n\n while (++j < m) {\n s0 = s1;\n e1 = edges[halfedges[j]];\n s1 = e1.left === site ? e1.right : e1.left;\n if (s0 && s1 && i < s0.index && i < s1.index && triangleArea(site, s0, s1) < 0) {\n triangles.push([site.data, s0.data, s1.data]);\n }\n }\n });\n\n return triangles;\n },\n\n links: function() {\n return this.edges.filter(function(edge) {\n return edge.right;\n }).map(function(edge) {\n return {\n source: edge.left.data,\n target: edge.right.data\n };\n });\n },\n\n find: function(x, y, radius) {\n var that = this, i0, i1 = that._found || 0, n = that.cells.length, cell;\n\n // Use the previously-found cell, or start with an arbitrary one.\n while (!(cell = that.cells[i1])) if (++i1 >= n) return null;\n var dx = x - cell.site[0], dy = y - cell.site[1], d2 = dx * dx + dy * dy;\n\n // Traverse the half-edges to find a closer cell, if any.\n do {\n cell = that.cells[i0 = i1], i1 = null;\n cell.halfedges.forEach(function(e) {\n var edge = that.edges[e], v = edge.left;\n if ((v === cell.site || !v) && !(v = edge.right)) return;\n var vx = x - v[0], vy = y - v[1], v2 = vx * vx + vy * vy;\n if (v2 < d2) d2 = v2, i1 = v.index;\n });\n } while (i1 !== null);\n\n that._found = i0;\n\n return radius == null || d2 <= radius * radius ? cell.site : null;\n }\n}\n","import constant from \"./constant\";\nimport {x as pointX, y as pointY} from \"./point\";\nimport Diagram, {epsilon} from \"./Diagram\";\n\nexport default function() {\n var x = pointX,\n y = pointY,\n extent = null;\n\n function voronoi(data) {\n return new Diagram(data.map(function(d, i) {\n var s = [Math.round(x(d, i, data) / epsilon) * epsilon, Math.round(y(d, i, data) / epsilon) * epsilon];\n s.index = i;\n s.data = d;\n return s;\n }), extent);\n }\n\n voronoi.polygons = function(data) {\n return voronoi(data).polygons();\n };\n\n voronoi.links = function(data) {\n return voronoi(data).links();\n };\n\n voronoi.triangles = function(data) {\n return voronoi(data).triangles();\n };\n\n voronoi.x = function(_) {\n return arguments.length ? (x = typeof _ === \"function\" ? _ : constant(+_), voronoi) : x;\n };\n\n voronoi.y = function(_) {\n return arguments.length ? (y = typeof _ === \"function\" ? _ : constant(+_), voronoi) : y;\n };\n\n voronoi.extent = function(_) {\n return arguments.length ? (extent = _ == null ? null : [[+_[0][0], +_[0][1]], [+_[1][0], +_[1][1]]], voronoi) : extent && [[extent[0][0], extent[0][1]], [extent[1][0], extent[1][1]]];\n };\n\n voronoi.size = function(_) {\n return arguments.length ? (extent = _ == null ? null : [[0, 0], [+_[0], +_[1]]], voronoi) : extent && [extent[1][0] - extent[0][0], extent[1][1] - extent[0][1]];\n };\n\n return voronoi;\n}\n","/* global window, requestAnimationFrame, cancelAnimationFrame */\nimport { FieldType, DimensionSubtype } from 'datamodel';\nimport {\n axisLeft,\n axisRight,\n axisTop,\n axisBottom\n} from 'd3-axis';\nimport {\n symbolCircle,\n symbolCross,\n symbolDiamond,\n symbolSquare,\n symbolStar,\n symbolWye,\n symbolTriangle,\n symbol,\n stack as d3Stack,\n stackOffsetDiverging,\n stackOrderNone,\n stackOrderAscending,\n stackOrderDescending,\n stackOffsetNone,\n stackOffsetExpand,\n stackOffsetWiggle,\n pie,\n arc,\n line,\n curveLinear,\n curveStepAfter,\n curveStepBefore,\n curveStep,\n curveCatmullRom,\n area\n} from 'd3-shape';\nimport { scaleBand } from 'd3-scale';\nimport { nest } from 'd3-collection';\nimport {\n interpolate,\n interpolateRgb,\n piecewise,\n interpolateNumber,\n interpolateHslLong\n} from 'd3-interpolate';\nimport {\n easeCubic,\n easeBounce,\n easePoly,\n easeBack,\n easeCircle,\n easeLinear,\n easeElastic\n} from 'd3-ease';\nimport {\n color,\n rgb,\n hsl\n} from 'd3-color';\nimport { voronoi } from 'd3-voronoi';\nimport Model from 'hyperdis';\nimport * as STACK_CONFIG from './enums/stack-config';\n\nconst HTMLElement = window.HTMLElement;\n\nconst isSimpleObject = (obj) => {\n let token;\n if (typeof obj === 'object') {\n if (obj === null) { return false; }\n token = Object.prototype.toString.call(obj);\n if (token === '[object Object]') {\n return (obj.constructor.toString().match(/^function (.*)\\(\\)/m) || [])[1] === 'Object';\n }\n }\n return false;\n};\n\n/**\n * Returns unique id\n * @return {string} Unique id string\n */\nconst\n getUniqueId = () => `id-${new Date().getTime()}${Math.round(Math.random() * 10000)}`;\n\n/**\n * Deep copies an object and returns a new object.\n * @param {Object} o Object to clone\n * @return {Object} New Object.\n */\nconst clone = (o) => {\n const output = {};\n let v;\n for (const key in o) {\n if ({}.hasOwnProperty.call(o, key)) {\n v = o[key];\n output[key] = isSimpleObject(v) ? clone(v) : v;\n }\n }\n return output;\n};\n\n/**\n* Checks the existence of keys in an object\n* @param {Array} keys Set of keys which are to be checked\n* @param {Object} obj whose keys are checked from the set of keys provided\n* @return {Object} Error if the keys are absent, or the object itself\n*/\nconst checkExistence = (keys, obj) => {\n const nonExistentKeys = [];\n keys.forEach((key) => {\n if (key in obj) {\n return;\n }\n nonExistentKeys.push(key);\n });\n return nonExistentKeys;\n};\n\nconst sanitizeIP = {\n typeObj: (keys, obj) => {\n if (typeof obj !== 'object') {\n return Error('Argument type object expected');\n }\n\n const nonExistentKeys = checkExistence(keys, obj);\n if (nonExistentKeys.length) {\n return Error(`Missing keys from parameter ${nonExistentKeys.join(', ')}`);\n }\n return obj;\n },\n\n /* istanbul ignore next */ htmlElem: (elem) => {\n if (!(elem instanceof HTMLElement)) {\n return Error('HTMLElement required');\n }\n return elem;\n }\n};\n\n/**\n * Gets the maximum value from an array of objects for a given property name\n * @param {Array.} data Array of objects\n * @param {string} field Field name\n * @return {number} Maximum value\n */\nconst getMax = (data, field) => Math.max(...data.filter(d => !isNaN(d[field])).map(d => d[field]));\n\n/**\n * Gets the minimum value from an array of objects for a given property name\n * @param {Array.} data Array of objects\n * @param {string} field Field name\n * @return {number} Minimum value\n */\nconst getMin = (data, field) => Math.min(...data.filter(d => !isNaN(d[field])).map(d => d[field]));\n\n/**\n * Gets the domain from the data based on the field name and type of field\n * @param {Array. | Array.} data Data Array\n * @param {Array.} fields Array of fields from where the domain will be calculated\n * @param {string} fieldType Type of field - nominal, quantitiative, temporal.\n * @return {Array} Usually contains a min and max value if field is quantitative or\n * an array of values if field type is nominal or ordinal\n */\nconst getDomainFromData = (data, fields, fieldType) => {\n let domain;\n let domArr;\n data = data[0] instanceof Array ? data : [data];\n switch (fieldType) {\n case DimensionSubtype.CATEGORICAL:\n domain = [].concat(...data.map(arr => arr.map(d => d[fields[0]]).filter(d => d !== undefined)));\n break;\n default:\n domArr = data.map((arr) => {\n const firstMin = getMin(arr, fields[0]);\n const secondMin = getMin(arr, fields[1]);\n const firstMax = getMax(arr, fields[0]);\n const secondMax = getMax(arr, fields[1]);\n return [Math.min(firstMin, secondMin), Math.max(firstMax, secondMax)];\n });\n domain = [Math.min(...domArr.map(d => d[0])), Math.max(...domArr.map(d => d[1]))];\n break;\n }\n return domain;\n};\n\n/**\n * Union Domain values\n * @param {Array.} domains Array of domain values\n * @param {string} fieldType type of field - dimension,measure or datetime.\n * @return {Array} Unioned domain of all domain values.\n */\nconst unionDomain = (domains, fieldType) => {\n let domain;\n domains = domains.filter(dom => dom.length);\n if (fieldType === DimensionSubtype.CATEGORICAL) {\n domain = domain = [].concat(...domains);\n } else {\n domain = [Math.min(...domains.map(d => d[0])), Math.max(...domains.map(d => d[1]))];\n }\n\n return domain;\n};\n\nconst symbolFns = {\n circle: symbolCircle,\n cross: symbolCross,\n diamond: symbolDiamond,\n square: symbolSquare,\n star: symbolStar,\n wye: symbolWye,\n triangle: symbolTriangle\n};\n\nconst easeFns = {\n cubic: easeCubic,\n bounce: easeBounce,\n linear: easeLinear,\n elastic: easeElastic,\n back: easeBack,\n poly: easePoly,\n circle: easeCircle\n};\n\n/**\n * Returns the maximum or minimum points of a compare value from an array of objects.\n * @param {Array} points Array of objects\n * @param {string} compareValue Key in the object on which the comparing will be done.\n * @param {string} minOrMax minimum or maximum.\n * @return {Object} Minimum or maximum point.\n */\nconst getExtremePoint = (points, compareValue, minOrMax) => {\n let extremePoint;\n let point;\n const len = points.length;\n let minOrMaxVal = minOrMax === 'max' ? -Infinity : Infinity;\n let val;\n\n for (let i = 0; i < len; i++) {\n point = points[i];\n val = point[compareValue];\n if (minOrMax === 'min' ? val < minOrMaxVal : val > minOrMaxVal) {\n minOrMaxVal = val;\n extremePoint = point;\n }\n }\n\n return extremePoint;\n};\n\n/**\n * Returns the minimum point of a compare value from an array of objects.\n * @param {Array} points Array of objects\n * @param {string} compareValue Key in the object on which the comparing will be done.\n * @return {Object} Minimum point.\n */\nconst getMinPoint = (points, compareValue) => getExtremePoint(points, compareValue, 'min');\n\n/**\n * Returns the maximum point of a compare value from an array of objects.\n * @param {Array} points Array of objects\n * @param {string} compareValue Key in the object on which the comparing will be done.\n * @return {Object} Maximum point.\n */\nconst getMaxPoint = (points, compareValue) => getExtremePoint(points, compareValue, 'max');\n\n/**\n * Gets the index of the closest value of the given value from the array.\n * @param {Array} arr Array of values\n * @param {number} value Value from which the nearest value will be calculated.\n * @param {string} side side property.\n * @return {number} index of the closest value\n */\n/* istanbul ignore next */const getClosestIndexOf = (arr, value, side) => {\n let low = 0;\n const arrLen = arr.length;\n let high = arrLen - 1;\n\n let mid;\n let d1;\n let d2;\n\n while (low < high) {\n mid = Math.floor((low + high) / 2);\n d1 = Math.abs(arr[mid] - value);\n d2 = Math.abs(arr[mid + 1] - value);\n\n if (d2 <= d1) {\n low = mid + 1;\n } else {\n high = mid;\n }\n }\n\n if (!side) {\n return high;\n }\n\n const highVal = arr[high];\n if (highVal === value) {\n return high;\n } else if (highVal > value) {\n if (high === 0) { return high; }\n return side === 'left' ? high - 1 : high;\n }\n if (high === arr.length - 1) { return high; }\n return side === 'left' ? high : high + 1;\n};\n\n/**\n * Returns the browser window object\n * @return {Window} Window object\n*/\nconst getWindow = () => window;\n\n/**\n * Returns the browser window object\n * @return {Window} Window object\n*/\nconst reqAnimFrame = (() => requestAnimationFrame)();\n\nconst cancelAnimFrame = (() => cancelAnimationFrame)();\n\n/**\n * Capitalizes the first letter of the word\n * @param {string} text word\n * @return {string} Capitalized word\n */\nconst capitalizeFirst = (text) => {\n text = text.toLowerCase();\n\n return text.replace(/\\w\\S*/g, txt => txt.charAt(0).toUpperCase() + txt.substr(1));\n};\n\n/**\n *\n *\n * @param {*} arr\n */\nconst unique = arr => ([...new Set(arr)]);\n\n/**\n * Gets the minimum difference between two consecutive numbers in an array.\n * @param {Array} arr Array of numbers\n * @param {number} index index of the value\n * @return {number} minimum difference between values\n */\n/* istanbul ignore next */ const getMinDiff = (arr, index) => {\n let diff;\n let uniqueVals;\n if (index !== undefined) {\n uniqueVals = unique(arr.map(d => d[index]));\n } else {\n uniqueVals = unique(arr);\n }\n if (uniqueVals.length > 1) {\n diff = Math.abs(uniqueVals[1] - uniqueVals[0]);\n for (let i = 2, len = uniqueVals.length; i < len; i++) {\n diff = Math.min(diff, Math.abs(uniqueVals[i] - uniqueVals[i - 1]));\n }\n } else {\n diff = uniqueVals[0];\n }\n\n return diff;\n};\n\n/**\n * Returns the class name appended with a given id.\n * @param {string} cls class name\n * @param {string} id unique identifier\n * @param {string} prefix string needed to add before the classname\n * @return {string} qualified class name\n */\n/* istanbul ignore next */const getQualifiedClassName = (cls, id, prefix) => {\n cls = cls.replace(/^\\.*/, '');\n return [`${prefix}-${cls}`, `${prefix}-${cls}-${id}`];\n};\n\n/**\n * This method is used to set the default value for variables\n * without sullying the code with conditional statements.\n *\n * @export\n * @param {any} param The parameter to test.\n * @param {any} value The default value to assign.\n * @return {any} The value.\n */\n/* istanbul ignore next */ const defaultValue = (param, value) => {\n if (typeof param === 'undefined' || (typeof param === 'object' && !param)) {\n return value;\n }\n return param;\n};\n\n/**\n * DESCRIPTION TODO\n * @todo\n *\n * @export\n * @param {Object} graph graph whose dependency order has to be generated\n * @return {Object} @todo\n */\nconst getDependencyOrder = (graph) => {\n const dependencyOrder = [];\n const visited = {};\n const keys = Object.keys(graph);\n /**\n * DESCRIPTION TODO\n * @todo\n *\n * @export\n * @param {Object} name @todo\n * @return {Object} @todo\n */\n const visit = (name) => {\n if (dependencyOrder.length === keys.length) {\n return true;\n }\n visited[name] = true;\n const edges = graph[name];\n for (let e = 0; e < edges.length; e++) {\n const dep = edges[e];\n if (!visited[dep]) {\n visit(dep);\n }\n }\n\n dependencyOrder.push(name);\n return false;\n };\n\n for (let i = 0; i < keys.length; i++) {\n if (visit(keys[i], i)) break;\n }\n\n return dependencyOrder;\n};\n\n/**\n * Iterates over the properties of an object and applies the function\n *\n * @param {any} obj object to be iterated upon\n * @param {any} fn function to be applied on it\n */\nconst objectIterator = (obj, fn) => {\n for (const key in obj) {\n if (Object.hasOwnProperty.call(obj, key)) {\n fn(key, obj);\n }\n }\n};\n\n/**\n * This class creates a d3 voronoi for retrieving the nearest neighbour of any point from a set of two\n * dimensional points\n * @class Voronoi\n */\n/* istanbul ignore next */ class Voronoi {\n /**\n * Initialize the voronoi with the data given.\n * @param {Array.} data Array of points.\n */\n constructor (data) {\n this._voronoi = voronoi().x(d => d.x).y(d => d.y);\n this.data(data);\n }\n\n /**\n * Sets the data to voronoi\n * @param {Array.} data Array of objects.\n * @return {Voronoi} Instance of voronoi.\n */\n data (data) {\n if (data) {\n this._voronoiFn = this._voronoi(data);\n }\n return this;\n }\n\n /**\n * Finds the closest point to the x and y position given.\n * @param {number} x x value\n * @param {number} y y value\n * @param {number} radius search radius.\n * @return {Object} Details of the nearest point.\n */\n find (x, y, radius) {\n return this._voronoiFn.find(x, y, radius);\n }\n}\n\n/**\n * Methods to handle changes to table configuration and reactivity are handled by this\n * class.\n */\n/**\n * Common store class\n *\n * @class Store\n */\nclass Store {\n /**\n * Creates an instance of Store.\n * @param {Object} config The object to create the state store with.\n * @memberof Store\n */\n constructor (config) {\n // create reactive model\n this.model = Model.create(config);\n this._listeners = [];\n }\n\n /**\n * This method returns a plain JSON object\n * with all the fields in the state store.\n *\n * @return {Object} Serialized representation of state store.\n * @memberof Store\n */\n serialize () {\n return this.model.serialize();\n }\n\n /**\n * This method is used to update the value of a property in the state store.\n *\n * @param {string} propName The name of the property.\n * @param {number} value The new value of the property.\n * @memberof Store\n */\n commit (propName, value) {\n // check if appropriate enum has been used\n this.model.prop(propName, value);\n }\n\n /**\n * This method is used to register a callbacl that will execute\n * when one or more properties change.\n *\n * @param {string | Array} propNames name of property or array of props.\n * @param {Function} callBack The callback to execute.\n * @memberof Store\n */\n /* istanbul ignore next */registerChangeListener (propNames, callBack, instantCall) {\n let props = propNames;\n if (!Array.isArray(propNames)) {\n props = [propNames];\n }\n const fn = this.model.next(props, callBack, instantCall);\n this._listeners.push(fn);\n return this;\n }\n /**\n * This method is used to register a callbacl that will execute\n * when one or more properties change.\n *\n * @param {string | Array} propNames name of property or array of props.\n * @param {Function} callBack The callback to execute.\n * @memberof Store\n */\n /* istanbul ignore next */ registerImmediateListener (propNames, callBack, instantCall) {\n let props = propNames;\n if (!Array.isArray(propNames)) {\n props = [propNames];\n }\n const fn = this.model.on(props, callBack, instantCall);\n this._listeners.push(fn);\n return this;\n }\n /**\n * This method is used to get the name of the property\n * from the state store.\n *\n * @param {string} propName The name of the field in state store.\n * @return {any} The value of the field.\n * @memberof Store\n */\n get (propName) {\n return this.model.prop(propName);\n }\n\n /**\n * This method is used to register a computed property that is computed every time\n * the store value changes.\n *\n * @param {string} propName The name of the property to create.\n * @param {Function} callBack The function to execute when depemdent props change.\n * @memberof Store\n */\n computed (propName, callBack) {\n return this.model.calculatedProp(propName, callBack);\n }\n\n unsubscribeAll () {\n this._listeners.forEach(fn => fn());\n }\n}\n\n/**\n * Sanitize an input number / string mixed number. Currently dot in the no is not supported.\n *\n * @param {number | string} val pure number or string mixed number\n * @return {number | null} Number if it can be extracted. Otherwise null\n */\nconst intSanitizer = (val) => {\n const arr = val.toString().match(/(\\d+)(px)*/g);\n if (!arr) {\n // If only characters are passed\n return null;\n }\n\n return parseInt(arr[0], 10);\n};\n\n/**\n * Setter getter creator from config\n * Format\n * PROPERTRY_NAME: {\n * value: // default value of the property,\n * meta: {\n * typeCheck: // The setter value will be checked using this. If the value is function then the setter value\n * // is passed as args. (Optional)\n * typeExpected: // The output of typecheck action will be tested against this. Truthy value will set the\n * // value to the setter\n * sanitizaiton: // Need for sanitization before type is checked\n * }\n * }\n *\n * @param {Object} holder an empty object on which the getters and setters will be mounted\n * @param {Object} options options config based on which the getters and setters are determined.\n * @param {Hyperdis} model optional model to attach the property. If not sent new moel is created.\n * @return {Array} @todo\n */\nconst transactor = (holder, options, model) => {\n let conf;\n const store = model && model instanceof Model ? model : Model.create({});\n\n for (const prop in options) {\n if ({}.hasOwnProperty.call(options, prop)) {\n conf = options[prop];\n if (!store.prop(prop)) {\n store.append({ [prop]: conf.value });\n }\n holder[prop] = ((context, key, meta) => (...params) => {\n let val;\n let compareTo;\n const paramsLen = params.length;\n const prevVal = store.prop(prop);\n if (paramsLen) {\n // If parameters are passed then it's a setter\n const spreadParams = meta && meta.spreadParams;\n val = params;\n const values = [];\n if (meta) {\n for (let i = 0; i < paramsLen; i++) {\n val = params[i];\n const sanitization = meta.sanitization && (spreadParams ? meta.sanitization[i] :\n meta.sanitization);\n const typeCheck = meta.typeCheck && (spreadParams ? meta.typeCheck[i] : meta.typeCheck);\n if (sanitization && typeof sanitization === 'function') {\n // Sanitize if required\n val = sanitization(val, prevVal, holder);\n }\n\n if (typeCheck) {\n // Checking if a setter is valid\n if (typeof typeCheck === 'function') {\n let typeExpected = meta.typeExpected;\n if (typeExpected && spreadParams) {\n typeExpected = typeExpected[i];\n }\n if (typeExpected) {\n compareTo = typeExpected;\n } else {\n compareTo = true;\n }\n\n if (typeCheck(val) === compareTo) {\n values.push(val);\n }\n } else if (typeof typeCheck === 'string') {\n if (typeCheck === 'constructor') {\n const typeExpected = spreadParams ? meta.typeExpected[i] : meta.typeExpected;\n if (val && (val.constructor.name === typeExpected)) {\n values.push(val);\n }\n }\n } else {\n // context.prop(key, val);\n values.push(val);\n }\n } else {\n values.push(val);\n }\n }\n const preset = meta.preset;\n const oldValues = context.prop(key);\n preset && preset(values[0], holder);\n if (spreadParams) {\n oldValues.forEach((value, i) => {\n if (values[i] === undefined) {\n values[i] = value;\n }\n });\n }\n values.length && context.prop(key, spreadParams ? values : values[0]);\n } else {\n context.prop(key, spreadParams ? val : val[0]);\n }\n return holder;\n }\n // No parameters are passed hence its a getter\n return context.prop(key);\n })(store, prop, conf.meta);\n }\n }\n\n return [holder, store];\n};\n\n/**\n *\n *\n * @param {*} context\n * @param {*} props\n */\nconst generateGetterSetters = (context, props) => {\n Object.entries(props).forEach((propInfo) => {\n const prop = propInfo[0];\n const typeChecker = propInfo[1].typeChecker;\n const sanitization = propInfo[1].sanitization;\n const prototype = context.constructor.prototype;\n if (!(Object.hasOwnProperty.call(prototype, prop))) {\n context[prop] = (...params) => {\n if (params.length) {\n let value = params[0];\n if (sanitization) {\n value = sanitization(context, params[0]);\n }\n if (typeChecker && !typeChecker(value)) {\n return context[`_${prop}`];\n }\n context[`_${prop}`] = value;\n return context;\n } return context[`_${prop}`];\n };\n }\n });\n};\n\n/**\n *\n *\n * @param {*} arr\n * @param {*} prop\n */\nconst getArraySum = (arr, prop) => arr.reduce((total, elem) => {\n total += prop ? elem[prop] : elem;\n return total;\n}, 0);\n\n/**\n *\n *\n * @param {*} arr1\n * @param {*} arr2\n * @returns\n */\nconst arraysEqual = (arr1, arr2) => {\n if (arr1.length !== arr2.length) { return false; }\n for (let i = arr1.length; i >= 0; i--) {\n if (arr1[i] !== arr2[i]) { return false; }\n }\n\n return true;\n};\n\n/* eslint valid-typeof:0 */\n/**\n * Returns a validation function which can be used to validate variables against a type and value\n *\n * @param {any} type type of value that the object should have\n * @return {Object} validation function\n */\nconst isEqual = type => (oldVal, newVal) => {\n if (type === 'Array') {\n if (!oldVal) {\n return false;\n }\n return arraysEqual(oldVal, newVal);\n } else if (type === 'Object') {\n return Object.is(oldVal, newVal);\n } return oldVal === newVal;\n};\n\n/**\n * Description @todo\n *\n * @param {any} transactionModel @todo\n * @param {any} transactionEndpoint @todo\n * @param {any} transactionItems @todo\n * @return {any} @todo\n */\nconst enableChainedTransaction = (transactionModel, transactionEndpoint, transactionItems) =>\n transactionItems.forEach(item => transactionModel.on(item, ([, newVal]) => transactionEndpoint[item](newVal)));\n\n/**\n * Chceks if the element is istanceof HTMLElement\n *\n * @param {Object} elem any JS Object\n */\nconst isHTMLElem = elem => elem instanceof HTMLElement;\n\nconst ERROR_MSG = {\n INTERFACE_IMPL: 'Method not implemented'\n};\n\n/**\n * Merges the sink object in the source by recursively iterating through the object properties\n * @param {Object} source Source Object\n * @param {Object} sink Sink Object\n * @return {Object} Merged object\n */\nconst mergeRecursive = (source, sink) => {\n for (const prop in sink) {\n if (isSimpleObject(source[prop]) && isSimpleObject(sink[prop])) {\n mergeRecursive(source[prop], sink[prop]);\n } else if (sink[prop] instanceof Object && sink[prop].constructor === Object) {\n source[prop] = {};\n mergeRecursive(source[prop], sink[prop]);\n } else {\n source[prop] = sink[prop];\n }\n }\n return source;\n};\n\nconst interpolateArray = (data, fitCount) => {\n const linearInterpolate = function (before, after, atPoint) {\n return before + (after - before) * atPoint;\n };\n const newData = [];\n const springFactor = ((data.length - 1) / (fitCount - 1));\n newData[0] = data[0]; // for new allocation\n for (let i = 1; i < fitCount - 1; i++) {\n const tmp = i * springFactor;\n const before = (Math.floor(tmp)).toFixed();\n const after = (Math.ceil(tmp)).toFixed();\n const atPoint = tmp - before;\n newData[i] = linearInterpolate(data[before], data[after], atPoint);\n }\n newData[fitCount - 1] = data[data.length - 1]; // for new allocation\n return newData;\n};\n\n/**\n *\n *\n * @param {*} fn\n */\nconst nextFrame = (fn) => {\n setTimeout(() => {\n fn();\n }, 0);\n};\n\n/**\n *\n *\n * @param {*} angle\n */\nconst angleToRadian = angle => angle * Math.PI / 180;\n\n/**\n *\n *\n * @param {*} newName\n * @param {*} oldName\n */\nconst replaceCSSPrefix = () => {\n // @todo\n};\n\n/**\n * Gets the interpolator function from d3 color\n *\n */\nconst interpolator = () => interpolate;\n\n/**\n * Gets the number interpolator from d3 color\n *\n */\nconst numberInterpolator = () => interpolateNumber;\n\n/**\n * Gets the rgb interpolator from d3 color\n *\n */\nconst colorInterpolator = () => interpolateRgb;\n\n/**\n * Gets the hsl interpolator from d3 color\n *\n */\nconst hslInterpolator = () => interpolateHslLong;\n\nconst transformColors = () => ({\n color,\n rgb,\n hsl\n});\n\n/**\n * Gets the piecewise interpolator from d3 color\n *\n */\nconst piecewiseInterpolator = () => piecewise;\n\nfunction hue2rgb (p, q, t) {\n if (t < 0) t += 1;\n if (t > 1) t -= 1;\n if (t < 1 / 6) return p + (q - p) * 6 * t;\n if (t < 1 / 2) return q;\n if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n return p;\n}\n\n /**\n * Converts an HSL color value to RGB. Conversion formula\n * adapted from http://en.wikipedia.org/wiki/HSL_color_space.\n * Assumes h, s, and l are contained in the set [0, 1] and\n * returns r, g, and b in the set [0, 255].\n *\n * @param Number h The hue\n * @param Number s The saturation\n * @param Number l The lightness\n * @return Array The RGB representation\n */\nconst hslToRgb = (h, s, l, a = 1) => {\n let r;\n let g;\n let b;\n\n if (s === 0) {\n r = g = b = l; // achromatic\n } else {\n const q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n const p = 2 * l - q;\n\n r = hue2rgb(p, q, h + 1 / 3);\n g = hue2rgb(p, q, h);\n b = hue2rgb(p, q, h - 1 / 3);\n }\n\n return [r * 255, g * 255, b * 255, a];\n};\n\n /**\n * Converts an RGB color value to HSV. Conversion formula\n * adapted from http://en.wikipedia.org/wiki/HSV_color_space.\n * Assumes r, g, and b are contained in the set [0, 255] and\n * returns h, s, and v in the set [0, 1].\n *\n * @param Number r The red color value\n * @param Number g The green color value\n * @param Number b The blue color value\n * @return Array The HSV representation\n */\nconst rgbToHsv = (r, g, b, a = 1) => {\n r = +r; g = +g; b = +b; a = +a;\n r /= 255; g /= 255; b /= 255;\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n let h;\n let s;\n const l = (max + min) / 2;\n\n if (max === min) {\n h = s = 0; // achromatic\n } else {\n const d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n switch (max) {\n case r: h = (g - b) / d + (g < b ? 6 : 0); break;\n case g: h = (b - r) / d + 2; break;\n case b: h = (r - g) / d + 4; break;\n default: break;\n }\n h /= 6;\n }\n return [h, s, l, a];\n};\n\n /**\n * Converts an HSV color value to RGB. Conversion formula\n * adapted from http://en.wikipedia.org/wiki/HSV_color_space.\n * Assumes h, s, and v are contained in the set [0, 1] and\n * returns r, g, and b in the set [0, 255].\n *\n * @param Number h The hue\n * @param Number s The saturation\n * @param Number v The value\n * @return Array The RGB representation\n */\nconst hsvToRgb = (h, s, v, a = 1) => {\n let r;\n let g;\n let b;\n\n const i = Math.floor(h * 6);\n const f = h * 6 - i;\n const p = v * (1 - s);\n const q = v * (1 - f * s);\n const t = v * (1 - (1 - f) * s);\n\n switch (i % 6) {\n case 0: r = v; g = t; b = p; break;\n case 1: r = q; g = v; b = p; break;\n case 2: r = p; g = v; b = t; break;\n case 3: r = p; g = q; b = v; break;\n case 4: r = t; g = p; b = v; break;\n case 5: r = v; g = p; b = q; break;\n default: break;\n }\n\n return [r * 255, g * 255, b * 255, a];\n};\n\nconst hexToHsv = (hex) => {\n const result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\n\n const r = parseInt(result[1], 16);\n const g = parseInt(result[2], 16);\n const b = parseInt(result[3], 16);\n const a = result[4] ? parseInt(result[4], 16) : 1;\n return rgbToHsv(r, g, b, a);\n};\n\nconst detectColor = (col) => {\n const matchRgb = /rgb\\((\\d{1,3}), (\\d{1,3}), (\\d{1,3})\\)/;\n const matchHsl = /hsl\\((\\d+),\\s*([\\d.]+)%,\\s*([\\d.]+)%\\)/g;\n\n // Source : https://gist.github.com/sethlopezme/d072b945969a3cc2cc11\n // eslint-disable-next-line\n const matchRgba = /rgba?\\(((25[0-5]|2[0-4]\\d|1\\d{1,2}|\\d\\d?)\\s*,\\s*?){2}(25[0-5]|2[0-4]\\d|1\\d{1,2}|\\d\\d?)\\s*,?\\s*([01]\\.?\\d*?)?\\)/;\n // eslint-disable-next-line\n const matchHsla = /^hsla\\((0|360|35\\d|3[0-4]\\d|[12]\\d\\d|0?\\d?\\d),(0|100|\\d{1,2})%,(0|100|\\d{1,2})%,(0?\\.\\d|1(\\.0)?)\\)$/;\n const matchHex = /^#([0-9a-f]{3}){1,2}$/i;\n\n if (matchRgb.test(col) || matchRgba.test(col)) {\n return 'rgb';\n } else if (matchHsl.test(col) || matchHsla.test(col)) {\n return 'hsl';\n } else if (matchHex.test(col)) {\n return 'hex';\n } return col;\n};\n\n/**\n *\n *\n * @param {*} model\n * @param {*} propModel\n * @returns\n */\nconst filterPropagationModel = (model, propModel, measures) => {\n const { data, schema } = propModel.getData();\n let filteredModel;\n if (schema.length) {\n const fieldMap = model.getFieldsConfig();\n filteredModel = model.select((fields) => {\n const include = data.some(row => schema.every((propField, idx) => {\n if (!measures && (!(propField.name in fieldMap) ||\n fieldMap[propField.name].def.type === FieldType.MEASURE)) {\n return true;\n }\n return row[idx] === fields[propField.name].valueOf();\n }));\n return include;\n }, {\n saveChild: false\n });\n } else {\n filteredModel = propModel;\n }\n\n return filteredModel;\n};\n\nconst assembleModelFromIdentifiers = (model, identifiers) => {\n let schema = [];\n let data;\n const fieldMap = model.getFieldsConfig();\n if (identifiers.length) {\n const fields = identifiers[0];\n const len = fields.length;\n for (let i = 0; i < len; i++) {\n const field = fields[i];\n const fieldObj = fieldMap[field] && Object.assign({}, fieldMap[field].def);\n if (fieldObj) {\n schema.push(Object.assign(fieldObj));\n }\n }\n\n data = [];\n const header = identifiers[0];\n for (let i = 1; i < identifiers.length; i += 1) {\n const vals = identifiers[i];\n const temp = {};\n vals.forEach((fieldVal, cIdx) => {\n temp[header[cIdx]] = fieldVal;\n });\n data.push(temp);\n }\n } else {\n data = [];\n schema = [];\n }\n\n return new model.constructor(data, schema);\n};\n\n/**\n *\n *\n * @param {*} dataModel\n * @param {*} criteria\n * @returns\n */\nconst getDataModelFromRange = (dataModel, criteria, mode) => {\n if (criteria === null) {\n return null;\n }\n const selFields = Object.keys(criteria);\n const selFn = fields => selFields.every((field) => {\n const val = fields[field].value;\n const range = criteria[field][0] instanceof Array ? criteria[field][0] : criteria[field];\n if (typeof range[0] === 'string') {\n return range.find(d => d === val) !== undefined;\n }\n return range ? val >= range[0] && val <= range[1] : true;\n });\n\n return dataModel.select(selFn, {\n saveChild: false,\n mode\n });\n};\n\n/**\n *\n *\n * @param {*} dataModel\n * @param {*} identifiers\n * @returns\n */\nconst getDataModelFromIdentifiers = (dataModel, identifiers, mode) => {\n let filteredDataModel;\n if (identifiers instanceof Array) {\n const fieldsConfig = dataModel.getFieldsConfig();\n\n const dataArr = identifiers.slice(1, identifiers.length);\n if (identifiers instanceof Function) {\n filteredDataModel = identifiers(dataModel, {}, false);\n } else if (identifiers instanceof Array && identifiers[0].length) {\n const filteredSchema = identifiers[0].filter(d => d in fieldsConfig);\n filteredDataModel = dataModel.select((fields) => {\n let include = true;\n filteredSchema.forEach((propField, idx) => {\n const value = fields[propField].valueOf();\n const index = dataArr.findIndex(d => d[idx] === value);\n include = include && index !== -1;\n });\n return include;\n }, {\n saveChild: false,\n mode\n });\n }\n } else {\n filteredDataModel = getDataModelFromRange(dataModel, identifiers, mode);\n }\n return filteredDataModel;\n};\n\n/**\n *\n *\n * @param {*} context\n * @param {*} listenerMap\n */\nconst registerListeners = (context, listenerMap) => {\n const propListenerMap = listenerMap(context);\n for (const key in propListenerMap) {\n if ({}.hasOwnProperty.call(propListenerMap, key)) {\n const mapObj = propListenerMap[key];\n const propType = mapObj.type;\n const props = mapObj.props;\n const listenerFn = mapObj.listener;\n context.store()[propType](props, listenerFn);\n }\n }\n};\n\nconst isValidValue = value => !isNaN(value) && value !== -Infinity && value !== Infinity;\n/**\n *\n *\n * @param {*} obj\n * @param {*} fields\n * @returns\n */\nconst getObjProp = (obj, ...fields) => {\n if (obj === undefined || obj === null) {\n return obj;\n }\n let retObj = obj;\n for (let i = 0, len = fields.length; i < len; i++) {\n retObj = retObj[fields[i]];\n if (retObj === undefined || retObj === null) {\n break;\n }\n }\n return retObj;\n};\n\n/**\n *\n *\n * @param {*} str\n * @returns\n */\nconst escapeHTML = (str) => {\n const htmlEscapes = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": ''',\n '/': '/'\n };\n const htmlEscaper = /[&<>\"'/]/g;\n return (`${str}`).replace(htmlEscaper, match => htmlEscapes[match]);\n};\n\n/**\n *\n *\n * @param {*} arr\n */\nconst transposeArray = arr => arr[0].map((col, i) => arr.map(row => row[i]));\nconst toArray = arr => (arr instanceof Array ? arr : [arr]);\nconst extendsClass = (cls, extendsFrom, found) => {\n if (!cls) {\n return false;\n }\n const prototype = cls.prototype;\n if (prototype instanceof extendsFrom) {\n found = true;\n } else {\n found = extendsClass(prototype, extendsFrom, found);\n }\n return found;\n};\n\n/**\n *\n * @param {*} dm1\n * @param {*} dm2\n */\nconst concatModels = (dm1, dm2) => {\n const dataObj1 = dm1.getData();\n const dataObj2 = dm2.getData();\n const data1 = dataObj1.data;\n const data2 = dataObj2.data;\n const schema1 = dataObj1.schema;\n const schema2 = dataObj2.schema;\n const tuples1 = {};\n const tuples2 = {};\n const commonTuples = {};\n for (let i = 0; i < data1.length; i++) {\n for (let ii = 0; ii < data2.length; ii++) {\n const row1 = data1[i];\n const row2 = data2[ii];\n const dim1Values = row1.filter((d, idx) => schema1[idx].type === FieldType.DIMENSION);\n const dim2Values = row2.filter((d, idx) => schema2[idx].type === FieldType.DIMENSION);\n const allDimSame = dim1Values.every(value => dim2Values.indexOf(value) !== -1);\n if (allDimSame) {\n const key = dim1Values.join();\n !commonTuples[key] && (commonTuples[key] = {});\n row1.forEach((value, idx) => {\n commonTuples[key][schema1[idx].name] = value;\n });\n row2.forEach((value, idx) => {\n commonTuples[key][schema2[idx].name] = value;\n });\n } else {\n const dm1Key = dim1Values.join();\n const dm2Key = dim2Values.join();\n if (!commonTuples[dm1Key] && !commonTuples[dm2Key]) {\n !tuples1[dm1Key] && (tuples1[dm1Key] = {});\n !tuples2[dm2Key] && (tuples2[dm2Key] = {});\n row1.forEach((value, idx) => {\n tuples1[dm1Key][schema1[idx].name] = value;\n });\n row2.forEach((value, idx) => {\n tuples2[dm2Key][schema2[idx].name] = value;\n });\n }\n }\n }\n }\n\n const commonSchema = [...schema1, ...schema2.filter(s2 => schema1.findIndex(s1 => s1.name === s2.name) === -1)];\n const data = [...Object.values(tuples1), ...Object.values(tuples2), ...Object.values(commonTuples)];\n return [data, commonSchema];\n};\n\nconst getSymbol = type => symbol().type(symbolFns[type]);\n\nconst stackOrders = {\n [STACK_CONFIG.ORDER_NONE]: stackOrderNone,\n [STACK_CONFIG.ORDER_ASCENDING]: stackOrderAscending,\n [STACK_CONFIG.ORDER_DESCENDING]: stackOrderDescending\n};\nconst stackOffsets = {\n [STACK_CONFIG.OFFSET_DIVERGING]: stackOffsetDiverging,\n [STACK_CONFIG.OFFSET_NONE]: stackOffsetNone,\n [STACK_CONFIG.OFFSET_EXPAND]: stackOffsetExpand,\n [STACK_CONFIG.OFFSET_WIGGLE]: stackOffsetWiggle\n};\n\n// eslint-disable-next-line require-jsdoc\nconst stack = params => d3Stack().keys(params.keys).offset(stackOffsets[params.offset])\n .order(stackOrders[params.order])(params.data);\n\n/**\n * Groups the data into a hierarchical tree structure based on one or more fields.\n * @param { Object } params Configuration properties for nesting data\n * @param { Array. } params.data Data which needs to be grouped\n * @param { Array. } params.keys Field indices by which the data will be grouped\n * @return { Array. } Grouped data array\n */\nconst nestCollection = (params) => {\n const nestFn = nest();\n params.keys.forEach(key => nestFn.key(d => d[key]));\n return nestFn.entries(params.data);\n};\n\nconst pathInterpolators = {\n curveLinear,\n curveStepAfter,\n curveStepBefore,\n curveStep,\n curveCatmullRom,\n stepAfter: curveStepAfter,\n catmullRom: curveCatmullRom,\n step: curveStep,\n stepBefore: curveStepBefore,\n linear: curveLinear\n};\n\nconst Symbols = {\n axisLeft,\n axisRight,\n axisTop,\n axisBottom,\n line,\n area,\n pie,\n arc,\n nest\n};\n\nconst Scales = {\n band: scaleBand\n};\n\nconst getSmallestDiff = (points) => {\n points = points.sort((a, b) => a - b);\n let minDiff = points[1] - points[0];\n for (let i = 2; i < points.length; i++) {\n minDiff = Math.min(minDiff, points[i] - points[i - 1]);\n }\n\n return minDiff;\n};\n\nconst require = (lookupWhat, lookupDetails) => ({\n resolvable: (store) => {\n const lookupTarget = store[lookupWhat];\n const depArr = lookupDetails.slice(0, lookupDetails.length - 1);\n const fn = lookupDetails[lookupDetails.length - 1]; // fn\n\n const deps = depArr.map(str => lookupTarget[str]);\n return {\n fn: fn(...deps),\n depArr\n };\n }\n});\n\nconst nextAnimFrame = window.requestAnimationFrame || window.webkitRequestAnimationFrame ||\n window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame ||\n function (callback) {\n setTimeout(callback, 16);\n };\n\nexport {\n require,\n Scales,\n Symbols,\n pathInterpolators,\n stack,\n nestCollection,\n getSymbol,\n transformColors,\n detectColor,\n hexToHsv,\n hslToRgb,\n rgbToHsv,\n hsvToRgb,\n concatModels,\n toArray,\n angleToRadian,\n escapeHTML,\n generateGetterSetters,\n getArraySum,\n interpolator,\n piecewiseInterpolator,\n getDataModelFromIdentifiers,\n getDataModelFromRange,\n colorInterpolator,\n numberInterpolator,\n ERROR_MSG,\n reqAnimFrame,\n nextAnimFrame,\n filterPropagationModel,\n transposeArray,\n cancelAnimFrame,\n getMax,\n getMin,\n getDomainFromData,\n getUniqueId,\n mergeRecursive,\n unionDomain,\n symbolFns,\n easeFns,\n clone,\n isEqual,\n interpolateArray,\n getMinPoint,\n defaultValue,\n getMaxPoint,\n getClosestIndexOf,\n Voronoi,\n checkExistence,\n sanitizeIP,\n getMinDiff,\n capitalizeFirst,\n getWindow,\n getQualifiedClassName,\n Store,\n getDependencyOrder,\n objectIterator,\n intSanitizer,\n transactor,\n enableChainedTransaction,\n isHTMLElem,\n isSimpleObject,\n nextFrame,\n registerListeners,\n replaceCSSPrefix,\n getObjProp,\n extendsClass,\n assembleModelFromIdentifiers,\n isValidValue,\n hslInterpolator,\n getSmallestDiff\n};\n","export function linear(t) {\n return +t;\n}\n","export function circleIn(t) {\n return 1 - Math.sqrt(1 - t * t);\n}\n\nexport function circleOut(t) {\n return Math.sqrt(1 - --t * t);\n}\n\nexport function circleInOut(t) {\n return ((t *= 2) <= 1 ? 1 - Math.sqrt(1 - t * t) : Math.sqrt(1 - (t -= 2) * t) + 1) / 2;\n}\n","import {path} from \"d3-path\";\nimport circle from \"./symbol/circle\";\nimport cross from \"./symbol/cross\";\nimport diamond from \"./symbol/diamond\";\nimport star from \"./symbol/star\";\nimport square from \"./symbol/square\";\nimport triangle from \"./symbol/triangle\";\nimport wye from \"./symbol/wye\";\nimport constant from \"./constant\";\n\nexport var symbols = [\n circle,\n cross,\n diamond,\n square,\n star,\n triangle,\n wye\n];\n\nexport default function() {\n var type = constant(circle),\n size = constant(64),\n context = null;\n\n function symbol() {\n var buffer;\n if (!context) context = buffer = path();\n type.apply(this, arguments).draw(context, +size.apply(this, arguments));\n if (buffer) return context = null, buffer + \"\" || null;\n }\n\n symbol.type = function(_) {\n return arguments.length ? (type = typeof _ === \"function\" ? _ : constant(_), symbol) : type;\n };\n\n symbol.size = function(_) {\n return arguments.length ? (size = typeof _ === \"function\" ? _ : constant(+_), symbol) : size;\n };\n\n symbol.context = function(_) {\n return arguments.length ? (context = _ == null ? null : _, symbol) : context;\n };\n\n return symbol;\n}\n","export const ORDER_ASCENDING = 'ascending';\nexport const ORDER_DESCENDING = 'descending';\nexport const ORDER_NONE = 'none';\nexport const OFFSET_DIVERGING = 'diverging';\nexport const OFFSET_NONE = 'none';\nexport const OFFSET_EXPAND = 'expand';\nexport const OFFSET_WIGGLE = 'wiggle';\n","import ascending from \"./ascending\";\n\nexport default function(series) {\n return ascending(series).reverse();\n}\n","export default function(series, order) {\n if (!((n = series.length) > 1)) return;\n for (var i, j = 0, d, dy, yp, yn, n, m = series[order[0]].length; j < m; ++j) {\n for (yp = yn = 0, i = 0; i < n; ++i) {\n if ((dy = (d = series[order[i]][j])[1] - d[0]) >= 0) {\n d[0] = yp, d[1] = yp += dy;\n } else if (dy < 0) {\n d[1] = yn, d[0] = yn += dy;\n } else {\n d[0] = yp;\n }\n }\n }\n}\n","import none from \"./none\";\n\nexport default function(series, order) {\n if (!((n = series.length) > 0)) return;\n for (var i, n, j = 0, m = series[0].length, y; j < m; ++j) {\n for (y = i = 0; i < n; ++i) y += series[i][j][1] || 0;\n if (y) for (i = 0; i < n; ++i) series[i][j][1] /= y;\n }\n none(series, order);\n}\n","import none from \"./none\";\n\nexport default function(series, order) {\n if (!((n = series.length) > 0) || !((m = (s0 = series[order[0]]).length) > 0)) return;\n for (var y = 0, j = 1, s0, m, n; j < m; ++j) {\n for (var i = 0, s1 = 0, s2 = 0; i < n; ++i) {\n var si = series[order[i]],\n sij0 = si[j][1] || 0,\n sij1 = si[j - 1][1] || 0,\n s3 = (sij0 - sij1) / 2;\n for (var k = 0; k < i; ++k) {\n var sk = series[order[k]],\n skj0 = sk[j][1] || 0,\n skj1 = sk[j - 1][1] || 0;\n s3 += skj0 - skj1;\n }\n s1 += sij0, s2 += s3 * sij0;\n }\n s0[j - 1][1] += s0[j - 1][0] = y;\n if (s1) y -= s2 / s1;\n }\n s0[j - 1][1] += s0[j - 1][0] = y;\n none(series, order);\n}\n","import constant from \"./constant\";\nimport descending from \"./descending\";\nimport identity from \"./identity\";\nimport {tau} from \"./math\";\n\nexport default function() {\n var value = identity,\n sortValues = descending,\n sort = null,\n startAngle = constant(0),\n endAngle = constant(tau),\n padAngle = constant(0);\n\n function pie(data) {\n var i,\n n = data.length,\n j,\n k,\n sum = 0,\n index = new Array(n),\n arcs = new Array(n),\n a0 = +startAngle.apply(this, arguments),\n da = Math.min(tau, Math.max(-tau, endAngle.apply(this, arguments) - a0)),\n a1,\n p = Math.min(Math.abs(da) / n, padAngle.apply(this, arguments)),\n pa = p * (da < 0 ? -1 : 1),\n v;\n\n for (i = 0; i < n; ++i) {\n if ((v = arcs[index[i] = i] = +value(data[i], i, data)) > 0) {\n sum += v;\n }\n }\n\n // Optionally sort the arcs by previously-computed values or by data.\n if (sortValues != null) index.sort(function(i, j) { return sortValues(arcs[i], arcs[j]); });\n else if (sort != null) index.sort(function(i, j) { return sort(data[i], data[j]); });\n\n // Compute the arcs! They are stored in the original data's order.\n for (i = 0, k = sum ? (da - n * pa) / sum : 0; i < n; ++i, a0 = a1) {\n j = index[i], v = arcs[j], a1 = a0 + (v > 0 ? v * k : 0) + pa, arcs[j] = {\n data: data[j],\n index: i,\n value: v,\n startAngle: a0,\n endAngle: a1,\n padAngle: p\n };\n }\n\n return arcs;\n }\n\n pie.value = function(_) {\n return arguments.length ? (value = typeof _ === \"function\" ? _ : constant(+_), pie) : value;\n };\n\n pie.sortValues = function(_) {\n return arguments.length ? (sortValues = _, sort = null, pie) : sortValues;\n };\n\n pie.sort = function(_) {\n return arguments.length ? (sort = _, sortValues = null, pie) : sort;\n };\n\n pie.startAngle = function(_) {\n return arguments.length ? (startAngle = typeof _ === \"function\" ? _ : constant(+_), pie) : startAngle;\n };\n\n pie.endAngle = function(_) {\n return arguments.length ? (endAngle = typeof _ === \"function\" ? _ : constant(+_), pie) : endAngle;\n };\n\n pie.padAngle = function(_) {\n return arguments.length ? (padAngle = typeof _ === \"function\" ? _ : constant(+_), pie) : padAngle;\n };\n\n return pie;\n}\n","export var xhtml = \"http://www.w3.org/1999/xhtml\";\n\nexport default {\n svg: \"http://www.w3.org/2000/svg\",\n xhtml: xhtml,\n xlink: \"http://www.w3.org/1999/xlink\",\n xml: \"http://www.w3.org/XML/1998/namespace\",\n xmlns: \"http://www.w3.org/2000/xmlns/\"\n};\n","import namespaces from \"./namespaces\";\n\nexport default function(name) {\n var prefix = name += \"\", i = prefix.indexOf(\":\");\n if (i >= 0 && (prefix = name.slice(0, i)) !== \"xmlns\") name = name.slice(i + 1);\n return namespaces.hasOwnProperty(prefix) ? {space: namespaces[prefix], local: name} : name;\n}\n","import namespace from \"./namespace\";\nimport {xhtml} from \"./namespaces\";\n\nfunction creatorInherit(name) {\n return function() {\n var document = this.ownerDocument,\n uri = this.namespaceURI;\n return uri === xhtml && document.documentElement.namespaceURI === xhtml\n ? document.createElement(name)\n : document.createElementNS(uri, name);\n };\n}\n\nfunction creatorFixed(fullname) {\n return function() {\n return this.ownerDocument.createElementNS(fullname.space, fullname.local);\n };\n}\n\nexport default function(name) {\n var fullname = namespace(name);\n return (fullname.local\n ? creatorFixed\n : creatorInherit)(fullname);\n}\n","function none() {}\n\nexport default function(selector) {\n return selector == null ? none : function() {\n return this.querySelector(selector);\n };\n}\n","function empty() {\n return [];\n}\n\nexport default function(selector) {\n return selector == null ? empty : function() {\n return this.querySelectorAll(selector);\n };\n}\n","var matcher = function(selector) {\n return function() {\n return this.matches(selector);\n };\n};\n\nif (typeof document !== \"undefined\") {\n var element = document.documentElement;\n if (!element.matches) {\n var vendorMatches = element.webkitMatchesSelector\n || element.msMatchesSelector\n || element.mozMatchesSelector\n || element.oMatchesSelector;\n matcher = function(selector) {\n return function() {\n return vendorMatches.call(this, selector);\n };\n };\n }\n}\n\nexport default matcher;\n","export default function(update) {\n return new Array(update.length);\n}\n","import sparse from \"./sparse\";\nimport {Selection} from \"./index\";\n\nexport default function() {\n return new Selection(this._enter || this._groups.map(sparse), this._parents);\n}\n\nexport function EnterNode(parent, datum) {\n this.ownerDocument = parent.ownerDocument;\n this.namespaceURI = parent.namespaceURI;\n this._next = null;\n this._parent = parent;\n this.__data__ = datum;\n}\n\nEnterNode.prototype = {\n constructor: EnterNode,\n appendChild: function(child) { return this._parent.insertBefore(child, this._next); },\n insertBefore: function(child, next) { return this._parent.insertBefore(child, next); },\n querySelector: function(selector) { return this._parent.querySelector(selector); },\n querySelectorAll: function(selector) { return this._parent.querySelectorAll(selector); }\n};\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","import {Selection} from \"./index\";\nimport {EnterNode} from \"./enter\";\nimport constant from \"../constant\";\n\nvar keyPrefix = \"$\"; // Protect against keys like “__proto__”.\n\nfunction bindIndex(parent, group, enter, update, exit, data) {\n var i = 0,\n node,\n groupLength = group.length,\n dataLength = data.length;\n\n // Put any non-null nodes that fit into update.\n // Put any null nodes into enter.\n // Put any remaining data into enter.\n for (; i < dataLength; ++i) {\n if (node = group[i]) {\n node.__data__ = data[i];\n update[i] = node;\n } else {\n enter[i] = new EnterNode(parent, data[i]);\n }\n }\n\n // Put any non-null nodes that don’t fit into exit.\n for (; i < groupLength; ++i) {\n if (node = group[i]) {\n exit[i] = node;\n }\n }\n}\n\nfunction bindKey(parent, group, enter, update, exit, data, key) {\n var i,\n node,\n nodeByKeyValue = {},\n groupLength = group.length,\n dataLength = data.length,\n keyValues = new Array(groupLength),\n keyValue;\n\n // Compute the key for each node.\n // If multiple nodes have the same key, the duplicates are added to exit.\n for (i = 0; i < groupLength; ++i) {\n if (node = group[i]) {\n keyValues[i] = keyValue = keyPrefix + key.call(node, node.__data__, i, group);\n if (keyValue in nodeByKeyValue) {\n exit[i] = node;\n } else {\n nodeByKeyValue[keyValue] = node;\n }\n }\n }\n\n // Compute the key for each datum.\n // If there a node associated with this key, join and add it to update.\n // If there is not (or the key is a duplicate), add it to enter.\n for (i = 0; i < dataLength; ++i) {\n keyValue = keyPrefix + key.call(parent, data[i], i, data);\n if (node = nodeByKeyValue[keyValue]) {\n update[i] = node;\n node.__data__ = data[i];\n nodeByKeyValue[keyValue] = null;\n } else {\n enter[i] = new EnterNode(parent, data[i]);\n }\n }\n\n // Add any remaining nodes that were not bound to data to exit.\n for (i = 0; i < groupLength; ++i) {\n if ((node = group[i]) && (nodeByKeyValue[keyValues[i]] === node)) {\n exit[i] = node;\n }\n }\n}\n\nexport default function(value, key) {\n if (!value) {\n data = new Array(this.size()), j = -1;\n this.each(function(d) { data[++j] = d; });\n return data;\n }\n\n var bind = key ? bindKey : bindIndex,\n parents = this._parents,\n groups = this._groups;\n\n if (typeof value !== \"function\") value = constant(value);\n\n for (var m = groups.length, update = new Array(m), enter = new Array(m), exit = new Array(m), j = 0; j < m; ++j) {\n var parent = parents[j],\n group = groups[j],\n groupLength = group.length,\n data = value.call(parent, parent && parent.__data__, j, parents),\n dataLength = data.length,\n enterGroup = enter[j] = new Array(dataLength),\n updateGroup = update[j] = new Array(dataLength),\n exitGroup = exit[j] = new Array(groupLength);\n\n bind(parent, group, enterGroup, updateGroup, exitGroup, data, key);\n\n // Now connect the enter nodes to their following update node, such that\n // appendChild can insert the materialized enter node before this node,\n // rather than at the end of the parent node.\n for (var i0 = 0, i1 = 0, previous, next; i0 < dataLength; ++i0) {\n if (previous = enterGroup[i0]) {\n if (i0 >= i1) i1 = i0 + 1;\n while (!(next = updateGroup[i1]) && ++i1 < dataLength);\n previous._next = next || null;\n }\n }\n }\n\n update = new Selection(update, parents);\n update._enter = enter;\n update._exit = exit;\n return update;\n}\n","import {Selection} from \"./index\";\n\nexport default function(compare) {\n if (!compare) compare = ascending;\n\n function compareNode(a, b) {\n return a && b ? compare(a.__data__, b.__data__) : !a - !b;\n }\n\n for (var groups = this._groups, m = groups.length, sortgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, sortgroup = sortgroups[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n sortgroup[i] = node;\n }\n }\n sortgroup.sort(compareNode);\n }\n\n return new Selection(sortgroups, this._parents).order();\n}\n\nfunction ascending(a, b) {\n return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","import namespace from \"../namespace\";\n\nfunction attrRemove(name) {\n return function() {\n this.removeAttribute(name);\n };\n}\n\nfunction attrRemoveNS(fullname) {\n return function() {\n this.removeAttributeNS(fullname.space, fullname.local);\n };\n}\n\nfunction attrConstant(name, value) {\n return function() {\n this.setAttribute(name, value);\n };\n}\n\nfunction attrConstantNS(fullname, value) {\n return function() {\n this.setAttributeNS(fullname.space, fullname.local, value);\n };\n}\n\nfunction attrFunction(name, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.removeAttribute(name);\n else this.setAttribute(name, v);\n };\n}\n\nfunction attrFunctionNS(fullname, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.removeAttributeNS(fullname.space, fullname.local);\n else this.setAttributeNS(fullname.space, fullname.local, v);\n };\n}\n\nexport default function(name, value) {\n var fullname = namespace(name);\n\n if (arguments.length < 2) {\n var node = this.node();\n return fullname.local\n ? node.getAttributeNS(fullname.space, fullname.local)\n : node.getAttribute(fullname);\n }\n\n return this.each((value == null\n ? (fullname.local ? attrRemoveNS : attrRemove) : (typeof value === \"function\"\n ? (fullname.local ? attrFunctionNS : attrFunction)\n : (fullname.local ? attrConstantNS : attrConstant)))(fullname, value));\n}\n","export default function(node) {\n return (node.ownerDocument && node.ownerDocument.defaultView) // node is a Node\n || (node.document && node) // node is a Window\n || node.defaultView; // node is a Document\n}\n","import defaultView from \"../window\";\n\nfunction styleRemove(name) {\n return function() {\n this.style.removeProperty(name);\n };\n}\n\nfunction styleConstant(name, value, priority) {\n return function() {\n this.style.setProperty(name, value, priority);\n };\n}\n\nfunction styleFunction(name, value, priority) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.style.removeProperty(name);\n else this.style.setProperty(name, v, priority);\n };\n}\n\nexport default function(name, value, priority) {\n return arguments.length > 1\n ? this.each((value == null\n ? styleRemove : typeof value === \"function\"\n ? styleFunction\n : styleConstant)(name, value, priority == null ? \"\" : priority))\n : styleValue(this.node(), name);\n}\n\nexport function styleValue(node, name) {\n return node.style.getPropertyValue(name)\n || defaultView(node).getComputedStyle(node, null).getPropertyValue(name);\n}\n","function classArray(string) {\n return string.trim().split(/^|\\s+/);\n}\n\nfunction classList(node) {\n return node.classList || new ClassList(node);\n}\n\nfunction ClassList(node) {\n this._node = node;\n this._names = classArray(node.getAttribute(\"class\") || \"\");\n}\n\nClassList.prototype = {\n add: function(name) {\n var i = this._names.indexOf(name);\n if (i < 0) {\n this._names.push(name);\n this._node.setAttribute(\"class\", this._names.join(\" \"));\n }\n },\n remove: function(name) {\n var i = this._names.indexOf(name);\n if (i >= 0) {\n this._names.splice(i, 1);\n this._node.setAttribute(\"class\", this._names.join(\" \"));\n }\n },\n contains: function(name) {\n return this._names.indexOf(name) >= 0;\n }\n};\n\nfunction classedAdd(node, names) {\n var list = classList(node), i = -1, n = names.length;\n while (++i < n) list.add(names[i]);\n}\n\nfunction classedRemove(node, names) {\n var list = classList(node), i = -1, n = names.length;\n while (++i < n) list.remove(names[i]);\n}\n\nfunction classedTrue(names) {\n return function() {\n classedAdd(this, names);\n };\n}\n\nfunction classedFalse(names) {\n return function() {\n classedRemove(this, names);\n };\n}\n\nfunction classedFunction(names, value) {\n return function() {\n (value.apply(this, arguments) ? classedAdd : classedRemove)(this, names);\n };\n}\n\nexport default function(name, value) {\n var names = classArray(name + \"\");\n\n if (arguments.length < 2) {\n var list = classList(this.node()), i = -1, n = names.length;\n while (++i < n) if (!list.contains(names[i])) return false;\n return true;\n }\n\n return this.each((typeof value === \"function\"\n ? classedFunction : value\n ? classedTrue\n : classedFalse)(names, value));\n}\n","function textRemove() {\n this.textContent = \"\";\n}\n\nfunction textConstant(value) {\n return function() {\n this.textContent = value;\n };\n}\n\nfunction textFunction(value) {\n return function() {\n var v = value.apply(this, arguments);\n this.textContent = v == null ? \"\" : v;\n };\n}\n\nexport default function(value) {\n return arguments.length\n ? this.each(value == null\n ? textRemove : (typeof value === \"function\"\n ? textFunction\n : textConstant)(value))\n : this.node().textContent;\n}\n","function htmlRemove() {\n this.innerHTML = \"\";\n}\n\nfunction htmlConstant(value) {\n return function() {\n this.innerHTML = value;\n };\n}\n\nfunction htmlFunction(value) {\n return function() {\n var v = value.apply(this, arguments);\n this.innerHTML = v == null ? \"\" : v;\n };\n}\n\nexport default function(value) {\n return arguments.length\n ? this.each(value == null\n ? htmlRemove : (typeof value === \"function\"\n ? htmlFunction\n : htmlConstant)(value))\n : this.node().innerHTML;\n}\n","function raise() {\n if (this.nextSibling) this.parentNode.appendChild(this);\n}\n\nexport default function() {\n return this.each(raise);\n}\n","function lower() {\n if (this.previousSibling) this.parentNode.insertBefore(this, this.parentNode.firstChild);\n}\n\nexport default function() {\n return this.each(lower);\n}\n","import creator from \"../creator\";\nimport selector from \"../selector\";\n\nfunction constantNull() {\n return null;\n}\n\nexport default function(name, before) {\n var create = typeof name === \"function\" ? name : creator(name),\n select = before == null ? constantNull : typeof before === \"function\" ? before : selector(before);\n return this.select(function() {\n return this.insertBefore(create.apply(this, arguments), select.apply(this, arguments) || null);\n });\n}\n","function remove() {\n var parent = this.parentNode;\n if (parent) parent.removeChild(this);\n}\n\nexport default function() {\n return this.each(remove);\n}\n","function selection_cloneShallow() {\n return this.parentNode.insertBefore(this.cloneNode(false), this.nextSibling);\n}\n\nfunction selection_cloneDeep() {\n return this.parentNode.insertBefore(this.cloneNode(true), this.nextSibling);\n}\n\nexport default function(deep) {\n return this.select(deep ? selection_cloneDeep : selection_cloneShallow);\n}\n","var filterEvents = {};\n\nexport var event = null;\n\nif (typeof document !== \"undefined\") {\n var element = document.documentElement;\n if (!(\"onmouseenter\" in element)) {\n filterEvents = {mouseenter: \"mouseover\", mouseleave: \"mouseout\"};\n }\n}\n\nfunction filterContextListener(listener, index, group) {\n listener = contextListener(listener, index, group);\n return function(event) {\n var related = event.relatedTarget;\n if (!related || (related !== this && !(related.compareDocumentPosition(this) & 8))) {\n listener.call(this, event);\n }\n };\n}\n\nfunction contextListener(listener, index, group) {\n return function(event1) {\n var event0 = event; // Events can be reentrant (e.g., focus).\n event = event1;\n try {\n listener.call(this, this.__data__, index, group);\n } finally {\n event = event0;\n }\n };\n}\n\nfunction parseTypenames(typenames) {\n return typenames.trim().split(/^|\\s+/).map(function(t) {\n var name = \"\", i = t.indexOf(\".\");\n if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n return {type: t, name: name};\n });\n}\n\nfunction onRemove(typename) {\n return function() {\n var on = this.__on;\n if (!on) return;\n for (var j = 0, i = -1, m = on.length, o; j < m; ++j) {\n if (o = on[j], (!typename.type || o.type === typename.type) && o.name === typename.name) {\n this.removeEventListener(o.type, o.listener, o.capture);\n } else {\n on[++i] = o;\n }\n }\n if (++i) on.length = i;\n else delete this.__on;\n };\n}\n\nfunction onAdd(typename, value, capture) {\n var wrap = filterEvents.hasOwnProperty(typename.type) ? filterContextListener : contextListener;\n return function(d, i, group) {\n var on = this.__on, o, listener = wrap(value, i, group);\n if (on) for (var j = 0, m = on.length; j < m; ++j) {\n if ((o = on[j]).type === typename.type && o.name === typename.name) {\n this.removeEventListener(o.type, o.listener, o.capture);\n this.addEventListener(o.type, o.listener = listener, o.capture = capture);\n o.value = value;\n return;\n }\n }\n this.addEventListener(typename.type, listener, capture);\n o = {type: typename.type, name: typename.name, value: value, listener: listener, capture: capture};\n if (!on) this.__on = [o];\n else on.push(o);\n };\n}\n\nexport default function(typename, value, capture) {\n var typenames = parseTypenames(typename + \"\"), i, n = typenames.length, t;\n\n if (arguments.length < 2) {\n var on = this.node().__on;\n if (on) for (var j = 0, m = on.length, o; j < m; ++j) {\n for (i = 0, o = on[j]; i < n; ++i) {\n if ((t = typenames[i]).type === o.type && t.name === o.name) {\n return o.value;\n }\n }\n }\n return;\n }\n\n on = value ? onAdd : onRemove;\n if (capture == null) capture = false;\n for (i = 0; i < n; ++i) this.each(on(typenames[i], value, capture));\n return this;\n}\n\nexport function customEvent(event1, listener, that, args) {\n var event0 = event;\n event1.sourceEvent = event;\n event = event1;\n try {\n return listener.apply(that, args);\n } finally {\n event = event0;\n }\n}\n","import defaultView from \"../window\";\n\nfunction dispatchEvent(node, type, params) {\n var window = defaultView(node),\n event = window.CustomEvent;\n\n if (typeof event === \"function\") {\n event = new event(type, params);\n } else {\n event = window.document.createEvent(\"Event\");\n if (params) event.initEvent(type, params.bubbles, params.cancelable), event.detail = params.detail;\n else event.initEvent(type, false, false);\n }\n\n node.dispatchEvent(event);\n}\n\nfunction dispatchConstant(type, params) {\n return function() {\n return dispatchEvent(this, type, params);\n };\n}\n\nfunction dispatchFunction(type, params) {\n return function() {\n return dispatchEvent(this, type, params.apply(this, arguments));\n };\n}\n\nexport default function(type, params) {\n return this.each((typeof params === \"function\"\n ? dispatchFunction\n : dispatchConstant)(type, params));\n}\n","import selection_select from \"./select\";\nimport selection_selectAll from \"./selectAll\";\nimport selection_filter from \"./filter\";\nimport selection_data from \"./data\";\nimport selection_enter from \"./enter\";\nimport selection_exit from \"./exit\";\nimport selection_merge from \"./merge\";\nimport selection_order from \"./order\";\nimport selection_sort from \"./sort\";\nimport selection_call from \"./call\";\nimport selection_nodes from \"./nodes\";\nimport selection_node from \"./node\";\nimport selection_size from \"./size\";\nimport selection_empty from \"./empty\";\nimport selection_each from \"./each\";\nimport selection_attr from \"./attr\";\nimport selection_style from \"./style\";\nimport selection_property from \"./property\";\nimport selection_classed from \"./classed\";\nimport selection_text from \"./text\";\nimport selection_html from \"./html\";\nimport selection_raise from \"./raise\";\nimport selection_lower from \"./lower\";\nimport selection_append from \"./append\";\nimport selection_insert from \"./insert\";\nimport selection_remove from \"./remove\";\nimport selection_clone from \"./clone\";\nimport selection_datum from \"./datum\";\nimport selection_on from \"./on\";\nimport selection_dispatch from \"./dispatch\";\n\nexport var root = [null];\n\nexport function Selection(groups, parents) {\n this._groups = groups;\n this._parents = parents;\n}\n\nfunction selection() {\n return new Selection([[document.documentElement]], root);\n}\n\nSelection.prototype = selection.prototype = {\n constructor: Selection,\n select: selection_select,\n selectAll: selection_selectAll,\n filter: selection_filter,\n data: selection_data,\n enter: selection_enter,\n exit: selection_exit,\n merge: selection_merge,\n order: selection_order,\n sort: selection_sort,\n call: selection_call,\n nodes: selection_nodes,\n node: selection_node,\n size: selection_size,\n empty: selection_empty,\n each: selection_each,\n attr: selection_attr,\n style: selection_style,\n property: selection_property,\n classed: selection_classed,\n text: selection_text,\n html: selection_html,\n raise: selection_raise,\n lower: selection_lower,\n append: selection_append,\n insert: selection_insert,\n remove: selection_remove,\n clone: selection_clone,\n datum: selection_datum,\n on: selection_on,\n dispatch: selection_dispatch\n};\n\nexport default selection;\n","import {Selection} from \"./index\";\nimport selector from \"../selector\";\n\nexport default function(select) {\n if (typeof select !== \"function\") select = selector(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {\n if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {\n if (\"__data__\" in node) subnode.__data__ = node.__data__;\n subgroup[i] = subnode;\n }\n }\n }\n\n return new Selection(subgroups, this._parents);\n}\n","import {Selection} from \"./index\";\nimport selectorAll from \"../selectorAll\";\n\nexport default function(select) {\n if (typeof select !== \"function\") select = selectorAll(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n subgroups.push(select.call(node, node.__data__, i, group));\n parents.push(node);\n }\n }\n }\n\n return new Selection(subgroups, parents);\n}\n","import {Selection} from \"./index\";\nimport matcher from \"../matcher\";\n\nexport default function(match) {\n if (typeof match !== \"function\") match = matcher(match);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {\n if ((node = group[i]) && match.call(node, node.__data__, i, group)) {\n subgroup.push(node);\n }\n }\n }\n\n return new Selection(subgroups, this._parents);\n}\n","import sparse from \"./sparse\";\nimport {Selection} from \"./index\";\n\nexport default function() {\n return new Selection(this._exit || this._groups.map(sparse), this._parents);\n}\n","import {Selection} from \"./index\";\n\nexport default function(selection) {\n\n for (var groups0 = this._groups, groups1 = selection._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {\n for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group0[i] || group1[i]) {\n merge[i] = node;\n }\n }\n }\n\n for (; j < m0; ++j) {\n merges[j] = groups0[j];\n }\n\n return new Selection(merges, this._parents);\n}\n","export default function() {\n\n for (var groups = this._groups, j = -1, m = groups.length; ++j < m;) {\n for (var group = groups[j], i = group.length - 1, next = group[i], node; --i >= 0;) {\n if (node = group[i]) {\n if (next && next !== node.nextSibling) next.parentNode.insertBefore(node, next);\n next = node;\n }\n }\n }\n\n return this;\n}\n","export default function() {\n var callback = arguments[0];\n arguments[0] = this;\n callback.apply(null, arguments);\n return this;\n}\n","export default function() {\n var nodes = new Array(this.size()), i = -1;\n this.each(function() { nodes[++i] = this; });\n return nodes;\n}\n","export default function() {\n\n for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n for (var group = groups[j], i = 0, n = group.length; i < n; ++i) {\n var node = group[i];\n if (node) return node;\n }\n }\n\n return null;\n}\n","export default function() {\n var size = 0;\n this.each(function() { ++size; });\n return size;\n}\n","export default function() {\n return !this.node();\n}\n","export default function(callback) {\n\n for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n for (var group = groups[j], i = 0, n = group.length, node; i < n; ++i) {\n if (node = group[i]) callback.call(node, node.__data__, i, group);\n }\n }\n\n return this;\n}\n","function propertyRemove(name) {\n return function() {\n delete this[name];\n };\n}\n\nfunction propertyConstant(name, value) {\n return function() {\n this[name] = value;\n };\n}\n\nfunction propertyFunction(name, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) delete this[name];\n else this[name] = v;\n };\n}\n\nexport default function(name, value) {\n return arguments.length > 1\n ? this.each((value == null\n ? propertyRemove : typeof value === \"function\"\n ? propertyFunction\n : propertyConstant)(name, value))\n : this.node()[name];\n}\n","import creator from \"../creator\";\n\nexport default function(name) {\n var create = typeof name === \"function\" ? name : creator(name);\n return this.select(function() {\n return this.appendChild(create.apply(this, arguments));\n });\n}\n","export default function(value) {\n return arguments.length\n ? this.property(\"__data__\", value)\n : this.node().__data__;\n}\n","import {Selection, root} from \"./selection/index\";\n\nexport default function(selector) {\n return typeof selector === \"string\"\n ? new Selection([[document.querySelector(selector)]], [document.documentElement])\n : new Selection([[selector]], root);\n}\n","var nextId = 0;\n\nexport default function local() {\n return new Local;\n}\n\nfunction Local() {\n this._ = \"@\" + (++nextId).toString(36);\n}\n\nLocal.prototype = local.prototype = {\n constructor: Local,\n get: function(node) {\n var id = this._;\n while (!(id in node)) if (!(node = node.parentNode)) return;\n return node[id];\n },\n set: function(node, value) {\n return node[this._] = value;\n },\n remove: function(node) {\n return this._ in node && delete node[this._];\n },\n toString: function() {\n return this._;\n }\n};\n","import {event} from \"./selection/on\";\n\nexport default function() {\n var current = event, source;\n while (source = current.sourceEvent) current = source;\n return current;\n}\n","export default function(node, event) {\n var svg = node.ownerSVGElement || node;\n\n if (svg.createSVGPoint) {\n var point = svg.createSVGPoint();\n point.x = event.clientX, point.y = event.clientY;\n point = point.matrixTransform(node.getScreenCTM().inverse());\n return [point.x, point.y];\n }\n\n var rect = node.getBoundingClientRect();\n return [event.clientX - rect.left - node.clientLeft, event.clientY - rect.top - node.clientTop];\n}\n","import sourceEvent from \"./sourceEvent\";\nimport point from \"./point\";\n\nexport default function(node) {\n var event = sourceEvent();\n if (event.changedTouches) event = event.changedTouches[0];\n return point(node, event);\n}\n","import sourceEvent from \"./sourceEvent\";\nimport point from \"./point\";\n\nexport default function(node, touches, identifier) {\n if (arguments.length < 3) identifier = touches, touches = sourceEvent().changedTouches;\n\n for (var i = 0, n = touches ? touches.length : 0, touch; i < n; ++i) {\n if ((touch = touches[i]).identifier === identifier) {\n return point(node, touch);\n }\n }\n\n return null;\n}\n","var noop = {value: function() {}};\n\nfunction dispatch() {\n for (var i = 0, n = arguments.length, _ = {}, t; i < n; ++i) {\n if (!(t = arguments[i] + \"\") || (t in _)) throw new Error(\"illegal type: \" + t);\n _[t] = [];\n }\n return new Dispatch(_);\n}\n\nfunction Dispatch(_) {\n this._ = _;\n}\n\nfunction parseTypenames(typenames, types) {\n return typenames.trim().split(/^|\\s+/).map(function(t) {\n var name = \"\", i = t.indexOf(\".\");\n if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n if (t && !types.hasOwnProperty(t)) throw new Error(\"unknown type: \" + t);\n return {type: t, name: name};\n });\n}\n\nDispatch.prototype = dispatch.prototype = {\n constructor: Dispatch,\n on: function(typename, callback) {\n var _ = this._,\n T = parseTypenames(typename + \"\", _),\n t,\n i = -1,\n n = T.length;\n\n // If no callback was specified, return the callback of the given type and name.\n if (arguments.length < 2) {\n while (++i < n) if ((t = (typename = T[i]).type) && (t = get(_[t], typename.name))) return t;\n return;\n }\n\n // If a type was specified, set the callback for the given type and name.\n // Otherwise, if a null callback was specified, remove callbacks of the given name.\n if (callback != null && typeof callback !== \"function\") throw new Error(\"invalid callback: \" + callback);\n while (++i < n) {\n if (t = (typename = T[i]).type) _[t] = set(_[t], typename.name, callback);\n else if (callback == null) for (t in _) _[t] = set(_[t], typename.name, null);\n }\n\n return this;\n },\n copy: function() {\n var copy = {}, _ = this._;\n for (var t in _) copy[t] = _[t].slice();\n return new Dispatch(copy);\n },\n call: function(type, that) {\n if ((n = arguments.length - 2) > 0) for (var args = new Array(n), i = 0, n, t; i < n; ++i) args[i] = arguments[i + 2];\n if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n for (t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n },\n apply: function(type, that, args) {\n if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n for (var t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n }\n};\n\nfunction get(type, name) {\n for (var i = 0, n = type.length, c; i < n; ++i) {\n if ((c = type[i]).name === name) {\n return c.value;\n }\n }\n}\n\nfunction set(type, name, callback) {\n for (var i = 0, n = type.length; i < n; ++i) {\n if (type[i].name === name) {\n type[i] = noop, type = type.slice(0, i).concat(type.slice(i + 1));\n break;\n }\n }\n if (callback != null) type.push({name: name, value: callback});\n return type;\n}\n\nexport default dispatch;\n","import {event} from \"d3-selection\";\n\nexport function nopropagation() {\n event.stopImmediatePropagation();\n}\n\nexport default function() {\n event.preventDefault();\n event.stopImmediatePropagation();\n}\n","import {select} from \"d3-selection\";\nimport noevent from \"./noevent\";\n\nexport default function(view) {\n var root = view.document.documentElement,\n selection = select(view).on(\"dragstart.drag\", noevent, true);\n if (\"onselectstart\" in root) {\n selection.on(\"selectstart.drag\", noevent, true);\n } else {\n root.__noselect = root.style.MozUserSelect;\n root.style.MozUserSelect = \"none\";\n }\n}\n\nexport function yesdrag(view, noclick) {\n var root = view.document.documentElement,\n selection = select(view).on(\"dragstart.drag\", null);\n if (noclick) {\n selection.on(\"click.drag\", noevent, true);\n setTimeout(function() { selection.on(\"click.drag\", null); }, 0);\n }\n if (\"onselectstart\" in root) {\n selection.on(\"selectstart.drag\", null);\n } else {\n root.style.MozUserSelect = root.__noselect;\n delete root.__noselect;\n }\n}\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","export default function DragEvent(target, type, subject, id, active, x, y, dx, dy, dispatch) {\n this.target = target;\n this.type = type;\n this.subject = subject;\n this.identifier = id;\n this.active = active;\n this.x = x;\n this.y = y;\n this.dx = dx;\n this.dy = dy;\n this._ = dispatch;\n}\n\nDragEvent.prototype.on = function() {\n var value = this._.on.apply(this._, arguments);\n return value === this._ ? this : value;\n};\n","import {dispatch} from \"d3-dispatch\";\nimport {event, customEvent, select, mouse, touch} from \"d3-selection\";\nimport nodrag, {yesdrag} from \"./nodrag\";\nimport noevent, {nopropagation} from \"./noevent\";\nimport constant from \"./constant\";\nimport DragEvent from \"./event\";\n\n// Ignore right-click, since that should open the context menu.\nfunction defaultFilter() {\n return !event.button;\n}\n\nfunction defaultContainer() {\n return this.parentNode;\n}\n\nfunction defaultSubject(d) {\n return d == null ? {x: event.x, y: event.y} : d;\n}\n\nfunction defaultTouchable() {\n return \"ontouchstart\" in this;\n}\n\nexport default function() {\n var filter = defaultFilter,\n container = defaultContainer,\n subject = defaultSubject,\n touchable = defaultTouchable,\n gestures = {},\n listeners = dispatch(\"start\", \"drag\", \"end\"),\n active = 0,\n mousedownx,\n mousedowny,\n mousemoving,\n touchending,\n clickDistance2 = 0;\n\n function drag(selection) {\n selection\n .on(\"mousedown.drag\", mousedowned)\n .filter(touchable)\n .on(\"touchstart.drag\", touchstarted)\n .on(\"touchmove.drag\", touchmoved)\n .on(\"touchend.drag touchcancel.drag\", touchended)\n .style(\"touch-action\", \"none\")\n .style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\");\n }\n\n function mousedowned() {\n if (touchending || !filter.apply(this, arguments)) return;\n var gesture = beforestart(\"mouse\", container.apply(this, arguments), mouse, this, arguments);\n if (!gesture) return;\n select(event.view).on(\"mousemove.drag\", mousemoved, true).on(\"mouseup.drag\", mouseupped, true);\n nodrag(event.view);\n nopropagation();\n mousemoving = false;\n mousedownx = event.clientX;\n mousedowny = event.clientY;\n gesture(\"start\");\n }\n\n function mousemoved() {\n noevent();\n if (!mousemoving) {\n var dx = event.clientX - mousedownx, dy = event.clientY - mousedowny;\n mousemoving = dx * dx + dy * dy > clickDistance2;\n }\n gestures.mouse(\"drag\");\n }\n\n function mouseupped() {\n select(event.view).on(\"mousemove.drag mouseup.drag\", null);\n yesdrag(event.view, mousemoving);\n noevent();\n gestures.mouse(\"end\");\n }\n\n function touchstarted() {\n if (!filter.apply(this, arguments)) return;\n var touches = event.changedTouches,\n c = container.apply(this, arguments),\n n = touches.length, i, gesture;\n\n for (i = 0; i < n; ++i) {\n if (gesture = beforestart(touches[i].identifier, c, touch, this, arguments)) {\n nopropagation();\n gesture(\"start\");\n }\n }\n }\n\n function touchmoved() {\n var touches = event.changedTouches,\n n = touches.length, i, gesture;\n\n for (i = 0; i < n; ++i) {\n if (gesture = gestures[touches[i].identifier]) {\n noevent();\n gesture(\"drag\");\n }\n }\n }\n\n function touchended() {\n var touches = event.changedTouches,\n n = touches.length, i, gesture;\n\n if (touchending) clearTimeout(touchending);\n touchending = setTimeout(function() { touchending = null; }, 500); // Ghost clicks are delayed!\n for (i = 0; i < n; ++i) {\n if (gesture = gestures[touches[i].identifier]) {\n nopropagation();\n gesture(\"end\");\n }\n }\n }\n\n function beforestart(id, container, point, that, args) {\n var p = point(container, id), s, dx, dy,\n sublisteners = listeners.copy();\n\n if (!customEvent(new DragEvent(drag, \"beforestart\", s, id, active, p[0], p[1], 0, 0, sublisteners), function() {\n if ((event.subject = s = subject.apply(that, args)) == null) return false;\n dx = s.x - p[0] || 0;\n dy = s.y - p[1] || 0;\n return true;\n })) return;\n\n return function gesture(type) {\n var p0 = p, n;\n switch (type) {\n case \"start\": gestures[id] = gesture, n = active++; break;\n case \"end\": delete gestures[id], --active; // nobreak\n case \"drag\": p = point(container, id), n = active; break;\n }\n customEvent(new DragEvent(drag, type, s, id, n, p[0] + dx, p[1] + dy, p[0] - p0[0], p[1] - p0[1], sublisteners), sublisteners.apply, sublisteners, [type, that, args]);\n };\n }\n\n drag.filter = function(_) {\n return arguments.length ? (filter = typeof _ === \"function\" ? _ : constant(!!_), drag) : filter;\n };\n\n drag.container = function(_) {\n return arguments.length ? (container = typeof _ === \"function\" ? _ : constant(_), drag) : container;\n };\n\n drag.subject = function(_) {\n return arguments.length ? (subject = typeof _ === \"function\" ? _ : constant(_), drag) : subject;\n };\n\n drag.touchable = function(_) {\n return arguments.length ? (touchable = typeof _ === \"function\" ? _ : constant(!!_), drag) : touchable;\n };\n\n drag.on = function() {\n var value = listeners.on.apply(listeners, arguments);\n return value === listeners ? drag : value;\n };\n\n drag.clickDistance = function(_) {\n return arguments.length ? (clickDistance2 = (_ = +_) * _, drag) : Math.sqrt(clickDistance2);\n };\n\n return drag;\n}\n","var frame = 0, // is an animation frame pending?\n timeout = 0, // is a timeout pending?\n interval = 0, // are any timers active?\n pokeDelay = 1000, // how frequently we check for clock skew\n taskHead,\n taskTail,\n clockLast = 0,\n clockNow = 0,\n clockSkew = 0,\n clock = typeof performance === \"object\" && performance.now ? performance : Date,\n setFrame = typeof window === \"object\" && window.requestAnimationFrame ? window.requestAnimationFrame.bind(window) : function(f) { setTimeout(f, 17); };\n\nexport function now() {\n return clockNow || (setFrame(clearNow), clockNow = clock.now() + clockSkew);\n}\n\nfunction clearNow() {\n clockNow = 0;\n}\n\nexport function Timer() {\n this._call =\n this._time =\n this._next = null;\n}\n\nTimer.prototype = timer.prototype = {\n constructor: Timer,\n restart: function(callback, delay, time) {\n if (typeof callback !== \"function\") throw new TypeError(\"callback is not a function\");\n time = (time == null ? now() : +time) + (delay == null ? 0 : +delay);\n if (!this._next && taskTail !== this) {\n if (taskTail) taskTail._next = this;\n else taskHead = this;\n taskTail = this;\n }\n this._call = callback;\n this._time = time;\n sleep();\n },\n stop: function() {\n if (this._call) {\n this._call = null;\n this._time = Infinity;\n sleep();\n }\n }\n};\n\nexport function timer(callback, delay, time) {\n var t = new Timer;\n t.restart(callback, delay, time);\n return t;\n}\n\nexport function timerFlush() {\n now(); // Get the current time, if not already set.\n ++frame; // Pretend we’ve set an alarm, if we haven’t already.\n var t = taskHead, e;\n while (t) {\n if ((e = clockNow - t._time) >= 0) t._call.call(null, e);\n t = t._next;\n }\n --frame;\n}\n\nfunction wake() {\n clockNow = (clockLast = clock.now()) + clockSkew;\n frame = timeout = 0;\n try {\n timerFlush();\n } finally {\n frame = 0;\n nap();\n clockNow = 0;\n }\n}\n\nfunction poke() {\n var now = clock.now(), delay = now - clockLast;\n if (delay > pokeDelay) clockSkew -= delay, clockLast = now;\n}\n\nfunction nap() {\n var t0, t1 = taskHead, t2, time = Infinity;\n while (t1) {\n if (t1._call) {\n if (time > t1._time) time = t1._time;\n t0 = t1, t1 = t1._next;\n } else {\n t2 = t1._next, t1._next = null;\n t1 = t0 ? t0._next = t2 : taskHead = t2;\n }\n }\n taskTail = t0;\n sleep(time);\n}\n\nfunction sleep(time) {\n if (frame) return; // Soonest alarm already set, or will be.\n if (timeout) timeout = clearTimeout(timeout);\n var delay = time - clockNow; // Strictly less than if we recomputed clockNow.\n if (delay > 24) {\n if (time < Infinity) timeout = setTimeout(wake, time - clock.now() - clockSkew);\n if (interval) interval = clearInterval(interval);\n } else {\n if (!interval) clockLast = clock.now(), interval = setInterval(poke, pokeDelay);\n frame = 1, setFrame(wake);\n }\n}\n","import {Timer} from \"./timer\";\n\nexport default function(callback, delay, time) {\n var t = new Timer;\n delay = delay == null ? 0 : +delay;\n t.restart(function(elapsed) {\n t.stop();\n callback(elapsed + delay);\n }, delay, time);\n return t;\n}\n","import {dispatch} from \"d3-dispatch\";\nimport {timer, timeout} from \"d3-timer\";\n\nvar emptyOn = dispatch(\"start\", \"end\", \"interrupt\");\nvar emptyTween = [];\n\nexport var CREATED = 0;\nexport var SCHEDULED = 1;\nexport var STARTING = 2;\nexport var STARTED = 3;\nexport var RUNNING = 4;\nexport var ENDING = 5;\nexport var ENDED = 6;\n\nexport default function(node, name, id, index, group, timing) {\n var schedules = node.__transition;\n if (!schedules) node.__transition = {};\n else if (id in schedules) return;\n create(node, id, {\n name: name,\n index: index, // For context during callback.\n group: group, // For context during callback.\n on: emptyOn,\n tween: emptyTween,\n time: timing.time,\n delay: timing.delay,\n duration: timing.duration,\n ease: timing.ease,\n timer: null,\n state: CREATED\n });\n}\n\nexport function init(node, id) {\n var schedule = get(node, id);\n if (schedule.state > CREATED) throw new Error(\"too late; already scheduled\");\n return schedule;\n}\n\nexport function set(node, id) {\n var schedule = get(node, id);\n if (schedule.state > STARTING) throw new Error(\"too late; already started\");\n return schedule;\n}\n\nexport function get(node, id) {\n var schedule = node.__transition;\n if (!schedule || !(schedule = schedule[id])) throw new Error(\"transition not found\");\n return schedule;\n}\n\nfunction create(node, id, self) {\n var schedules = node.__transition,\n tween;\n\n // Initialize the self timer when the transition is created.\n // Note the actual delay is not known until the first callback!\n schedules[id] = self;\n self.timer = timer(schedule, 0, self.time);\n\n function schedule(elapsed) {\n self.state = SCHEDULED;\n self.timer.restart(start, self.delay, self.time);\n\n // If the elapsed delay is less than our first sleep, start immediately.\n if (self.delay <= elapsed) start(elapsed - self.delay);\n }\n\n function start(elapsed) {\n var i, j, n, o;\n\n // If the state is not SCHEDULED, then we previously errored on start.\n if (self.state !== SCHEDULED) return stop();\n\n for (i in schedules) {\n o = schedules[i];\n if (o.name !== self.name) continue;\n\n // While this element already has a starting transition during this frame,\n // defer starting an interrupting transition until that transition has a\n // chance to tick (and possibly end); see d3/d3-transition#54!\n if (o.state === STARTED) return timeout(start);\n\n // Interrupt the active transition, if any.\n // Dispatch the interrupt event.\n if (o.state === RUNNING) {\n o.state = ENDED;\n o.timer.stop();\n o.on.call(\"interrupt\", node, node.__data__, o.index, o.group);\n delete schedules[i];\n }\n\n // Cancel any pre-empted transitions. No interrupt event is dispatched\n // because the cancelled transitions never started. Note that this also\n // removes this transition from the pending list!\n else if (+i < id) {\n o.state = ENDED;\n o.timer.stop();\n delete schedules[i];\n }\n }\n\n // Defer the first tick to end of the current frame; see d3/d3#1576.\n // Note the transition may be canceled after start and before the first tick!\n // Note this must be scheduled before the start event; see d3/d3-transition#16!\n // Assuming this is successful, subsequent callbacks go straight to tick.\n timeout(function() {\n if (self.state === STARTED) {\n self.state = RUNNING;\n self.timer.restart(tick, self.delay, self.time);\n tick(elapsed);\n }\n });\n\n // Dispatch the start event.\n // Note this must be done before the tween are initialized.\n self.state = STARTING;\n self.on.call(\"start\", node, node.__data__, self.index, self.group);\n if (self.state !== STARTING) return; // interrupted\n self.state = STARTED;\n\n // Initialize the tween, deleting null tween.\n tween = new Array(n = self.tween.length);\n for (i = 0, j = -1; i < n; ++i) {\n if (o = self.tween[i].value.call(node, node.__data__, self.index, self.group)) {\n tween[++j] = o;\n }\n }\n tween.length = j + 1;\n }\n\n function tick(elapsed) {\n var t = elapsed < self.duration ? self.ease.call(null, elapsed / self.duration) : (self.timer.restart(stop), self.state = ENDING, 1),\n i = -1,\n n = tween.length;\n\n while (++i < n) {\n tween[i].call(null, t);\n }\n\n // Dispatch the end event.\n if (self.state === ENDING) {\n self.on.call(\"end\", node, node.__data__, self.index, self.group);\n stop();\n }\n }\n\n function stop() {\n self.state = ENDED;\n self.timer.stop();\n delete schedules[id];\n for (var i in schedules) return; // eslint-disable-line no-unused-vars\n delete node.__transition;\n }\n}\n","import {get, set} from \"./schedule\";\n\nfunction tweenRemove(id, name) {\n var tween0, tween1;\n return function() {\n var schedule = set(this, id),\n tween = schedule.tween;\n\n // If this node shared tween with the previous node,\n // just assign the updated shared tween and we’re done!\n // Otherwise, copy-on-write.\n if (tween !== tween0) {\n tween1 = tween0 = tween;\n for (var i = 0, n = tween1.length; i < n; ++i) {\n if (tween1[i].name === name) {\n tween1 = tween1.slice();\n tween1.splice(i, 1);\n break;\n }\n }\n }\n\n schedule.tween = tween1;\n };\n}\n\nfunction tweenFunction(id, name, value) {\n var tween0, tween1;\n if (typeof value !== \"function\") throw new Error;\n return function() {\n var schedule = set(this, id),\n tween = schedule.tween;\n\n // If this node shared tween with the previous node,\n // just assign the updated shared tween and we’re done!\n // Otherwise, copy-on-write.\n if (tween !== tween0) {\n tween1 = (tween0 = tween).slice();\n for (var t = {name: name, value: value}, i = 0, n = tween1.length; i < n; ++i) {\n if (tween1[i].name === name) {\n tween1[i] = t;\n break;\n }\n }\n if (i === n) tween1.push(t);\n }\n\n schedule.tween = tween1;\n };\n}\n\nexport default function(name, value) {\n var id = this._id;\n\n name += \"\";\n\n if (arguments.length < 2) {\n var tween = get(this.node(), id).tween;\n for (var i = 0, n = tween.length, t; i < n; ++i) {\n if ((t = tween[i]).name === name) {\n return t.value;\n }\n }\n return null;\n }\n\n return this.each((value == null ? tweenRemove : tweenFunction)(id, name, value));\n}\n\nexport function tweenValue(transition, name, value) {\n var id = transition._id;\n\n transition.each(function() {\n var schedule = set(this, id);\n (schedule.value || (schedule.value = {}))[name] = value.apply(this, arguments);\n });\n\n return function(node) {\n return get(node, id).value[name];\n };\n}\n","import {color} from \"d3-color\";\nimport {interpolateNumber, interpolateRgb, interpolateString} from \"d3-interpolate\";\n\nexport default function(a, b) {\n var c;\n return (typeof b === \"number\" ? interpolateNumber\n : b instanceof color ? interpolateRgb\n : (c = color(b)) ? (b = c, interpolateRgb)\n : interpolateString)(a, b);\n}\n","function removeFunction(id) {\n return function() {\n var parent = this.parentNode;\n for (var i in this.__transition) if (+i !== id) return;\n if (parent) parent.removeChild(this);\n };\n}\n\nexport default function() {\n return this.on(\"end.remove\", removeFunction(this._id));\n}\n","import {selection} from \"d3-selection\";\n\nvar Selection = selection.prototype.constructor;\n\nexport default function() {\n return new Selection(this._groups, this._parents);\n}\n","import {tweenValue} from \"./tween\";\n\nfunction textConstant(value) {\n return function() {\n this.textContent = value;\n };\n}\n\nfunction textFunction(value) {\n return function() {\n var value1 = value(this);\n this.textContent = value1 == null ? \"\" : value1;\n };\n}\n\nexport default function(value) {\n return this.tween(\"text\", typeof value === \"function\"\n ? textFunction(tweenValue(this, \"text\", value))\n : textConstant(value == null ? \"\" : value + \"\"));\n}\n","import {selection} from \"d3-selection\";\nimport transition_attr from \"./attr\";\nimport transition_attrTween from \"./attrTween\";\nimport transition_delay from \"./delay\";\nimport transition_duration from \"./duration\";\nimport transition_ease from \"./ease\";\nimport transition_filter from \"./filter\";\nimport transition_merge from \"./merge\";\nimport transition_on from \"./on\";\nimport transition_remove from \"./remove\";\nimport transition_select from \"./select\";\nimport transition_selectAll from \"./selectAll\";\nimport transition_selection from \"./selection\";\nimport transition_style from \"./style\";\nimport transition_styleTween from \"./styleTween\";\nimport transition_text from \"./text\";\nimport transition_transition from \"./transition\";\nimport transition_tween from \"./tween\";\n\nvar id = 0;\n\nexport function Transition(groups, parents, name, id) {\n this._groups = groups;\n this._parents = parents;\n this._name = name;\n this._id = id;\n}\n\nexport default function transition(name) {\n return selection().transition(name);\n}\n\nexport function newId() {\n return ++id;\n}\n\nvar selection_prototype = selection.prototype;\n\nTransition.prototype = transition.prototype = {\n constructor: Transition,\n select: transition_select,\n selectAll: transition_selectAll,\n filter: transition_filter,\n merge: transition_merge,\n selection: transition_selection,\n transition: transition_transition,\n call: selection_prototype.call,\n nodes: selection_prototype.nodes,\n node: selection_prototype.node,\n size: selection_prototype.size,\n empty: selection_prototype.empty,\n each: selection_prototype.each,\n on: transition_on,\n attr: transition_attr,\n attrTween: transition_attrTween,\n style: transition_style,\n styleTween: transition_styleTween,\n text: transition_text,\n remove: transition_remove,\n tween: transition_tween,\n delay: transition_delay,\n duration: transition_duration,\n ease: transition_ease\n};\n","import {selector} from \"d3-selection\";\nimport {Transition} from \"./index\";\nimport schedule, {get} from \"./schedule\";\n\nexport default function(select) {\n var name = this._name,\n id = this._id;\n\n if (typeof select !== \"function\") select = selector(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {\n if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {\n if (\"__data__\" in node) subnode.__data__ = node.__data__;\n subgroup[i] = subnode;\n schedule(subgroup[i], name, id, i, subgroup, get(node, id));\n }\n }\n }\n\n return new Transition(subgroups, this._parents, name, id);\n}\n","import {selectorAll} from \"d3-selection\";\nimport {Transition} from \"./index\";\nimport schedule, {get} from \"./schedule\";\n\nexport default function(select) {\n var name = this._name,\n id = this._id;\n\n if (typeof select !== \"function\") select = selectorAll(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n for (var children = select.call(node, node.__data__, i, group), child, inherit = get(node, id), k = 0, l = children.length; k < l; ++k) {\n if (child = children[k]) {\n schedule(child, name, id, k, children, inherit);\n }\n }\n subgroups.push(children);\n parents.push(node);\n }\n }\n }\n\n return new Transition(subgroups, parents, name, id);\n}\n","import {matcher} from \"d3-selection\";\nimport {Transition} from \"./index\";\n\nexport default function(match) {\n if (typeof match !== \"function\") match = matcher(match);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {\n if ((node = group[i]) && match.call(node, node.__data__, i, group)) {\n subgroup.push(node);\n }\n }\n }\n\n return new Transition(subgroups, this._parents, this._name, this._id);\n}\n","import {Transition} from \"./index\";\n\nexport default function(transition) {\n if (transition._id !== this._id) throw new Error;\n\n for (var groups0 = this._groups, groups1 = transition._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {\n for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group0[i] || group1[i]) {\n merge[i] = node;\n }\n }\n }\n\n for (; j < m0; ++j) {\n merges[j] = groups0[j];\n }\n\n return new Transition(merges, this._parents, this._name, this._id);\n}\n","import {Transition, newId} from \"./index\";\nimport schedule, {get} from \"./schedule\";\n\nexport default function() {\n var name = this._name,\n id0 = this._id,\n id1 = newId();\n\n for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n var inherit = get(node, id0);\n schedule(node, name, id1, i, group, {\n time: inherit.time + inherit.delay + inherit.duration,\n delay: 0,\n duration: inherit.duration,\n ease: inherit.ease\n });\n }\n }\n }\n\n return new Transition(groups, this._parents, name, id1);\n}\n","import {get, set, init} from \"./schedule\";\n\nfunction start(name) {\n return (name + \"\").trim().split(/^|\\s+/).every(function(t) {\n var i = t.indexOf(\".\");\n if (i >= 0) t = t.slice(0, i);\n return !t || t === \"start\";\n });\n}\n\nfunction onFunction(id, name, listener) {\n var on0, on1, sit = start(name) ? init : set;\n return function() {\n var schedule = sit(this, id),\n on = schedule.on;\n\n // If this node shared a dispatch with the previous node,\n // just assign the updated shared dispatch and we’re done!\n // Otherwise, copy-on-write.\n if (on !== on0) (on1 = (on0 = on).copy()).on(name, listener);\n\n schedule.on = on1;\n };\n}\n\nexport default function(name, listener) {\n var id = this._id;\n\n return arguments.length < 2\n ? get(this.node(), id).on.on(name)\n : this.each(onFunction(id, name, listener));\n}\n","import {interpolateTransformSvg as interpolateTransform} from \"d3-interpolate\";\nimport {namespace} from \"d3-selection\";\nimport {tweenValue} from \"./tween\";\nimport interpolate from \"./interpolate\";\n\nfunction attrRemove(name) {\n return function() {\n this.removeAttribute(name);\n };\n}\n\nfunction attrRemoveNS(fullname) {\n return function() {\n this.removeAttributeNS(fullname.space, fullname.local);\n };\n}\n\nfunction attrConstant(name, interpolate, value1) {\n var value00,\n interpolate0;\n return function() {\n var value0 = this.getAttribute(name);\n return value0 === value1 ? null\n : value0 === value00 ? interpolate0\n : interpolate0 = interpolate(value00 = value0, value1);\n };\n}\n\nfunction attrConstantNS(fullname, interpolate, value1) {\n var value00,\n interpolate0;\n return function() {\n var value0 = this.getAttributeNS(fullname.space, fullname.local);\n return value0 === value1 ? null\n : value0 === value00 ? interpolate0\n : interpolate0 = interpolate(value00 = value0, value1);\n };\n}\n\nfunction attrFunction(name, interpolate, value) {\n var value00,\n value10,\n interpolate0;\n return function() {\n var value0, value1 = value(this);\n if (value1 == null) return void this.removeAttribute(name);\n value0 = this.getAttribute(name);\n return value0 === value1 ? null\n : value0 === value00 && value1 === value10 ? interpolate0\n : interpolate0 = interpolate(value00 = value0, value10 = value1);\n };\n}\n\nfunction attrFunctionNS(fullname, interpolate, value) {\n var value00,\n value10,\n interpolate0;\n return function() {\n var value0, value1 = value(this);\n if (value1 == null) return void this.removeAttributeNS(fullname.space, fullname.local);\n value0 = this.getAttributeNS(fullname.space, fullname.local);\n return value0 === value1 ? null\n : value0 === value00 && value1 === value10 ? interpolate0\n : interpolate0 = interpolate(value00 = value0, value10 = value1);\n };\n}\n\nexport default function(name, value) {\n var fullname = namespace(name), i = fullname === \"transform\" ? interpolateTransform : interpolate;\n return this.attrTween(name, typeof value === \"function\"\n ? (fullname.local ? attrFunctionNS : attrFunction)(fullname, i, tweenValue(this, \"attr.\" + name, value))\n : value == null ? (fullname.local ? attrRemoveNS : attrRemove)(fullname)\n : (fullname.local ? attrConstantNS : attrConstant)(fullname, i, value + \"\"));\n}\n","import {namespace} from \"d3-selection\";\n\nfunction attrTweenNS(fullname, value) {\n function tween() {\n var node = this, i = value.apply(node, arguments);\n return i && function(t) {\n node.setAttributeNS(fullname.space, fullname.local, i(t));\n };\n }\n tween._value = value;\n return tween;\n}\n\nfunction attrTween(name, value) {\n function tween() {\n var node = this, i = value.apply(node, arguments);\n return i && function(t) {\n node.setAttribute(name, i(t));\n };\n }\n tween._value = value;\n return tween;\n}\n\nexport default function(name, value) {\n var key = \"attr.\" + name;\n if (arguments.length < 2) return (key = this.tween(key)) && key._value;\n if (value == null) return this.tween(key, null);\n if (typeof value !== \"function\") throw new Error;\n var fullname = namespace(name);\n return this.tween(key, (fullname.local ? attrTweenNS : attrTween)(fullname, value));\n}\n","import {interpolateTransformCss as interpolateTransform} from \"d3-interpolate\";\nimport {style} from \"d3-selection\";\nimport {tweenValue} from \"./tween\";\nimport interpolate from \"./interpolate\";\n\nfunction styleRemove(name, interpolate) {\n var value00,\n value10,\n interpolate0;\n return function() {\n var value0 = style(this, name),\n value1 = (this.style.removeProperty(name), style(this, name));\n return value0 === value1 ? null\n : value0 === value00 && value1 === value10 ? interpolate0\n : interpolate0 = interpolate(value00 = value0, value10 = value1);\n };\n}\n\nfunction styleRemoveEnd(name) {\n return function() {\n this.style.removeProperty(name);\n };\n}\n\nfunction styleConstant(name, interpolate, value1) {\n var value00,\n interpolate0;\n return function() {\n var value0 = style(this, name);\n return value0 === value1 ? null\n : value0 === value00 ? interpolate0\n : interpolate0 = interpolate(value00 = value0, value1);\n };\n}\n\nfunction styleFunction(name, interpolate, value) {\n var value00,\n value10,\n interpolate0;\n return function() {\n var value0 = style(this, name),\n value1 = value(this);\n if (value1 == null) value1 = (this.style.removeProperty(name), style(this, name));\n return value0 === value1 ? null\n : value0 === value00 && value1 === value10 ? interpolate0\n : interpolate0 = interpolate(value00 = value0, value10 = value1);\n };\n}\n\nexport default function(name, value, priority) {\n var i = (name += \"\") === \"transform\" ? interpolateTransform : interpolate;\n return value == null ? this\n .styleTween(name, styleRemove(name, i))\n .on(\"end.style.\" + name, styleRemoveEnd(name))\n : this.styleTween(name, typeof value === \"function\"\n ? styleFunction(name, i, tweenValue(this, \"style.\" + name, value))\n : styleConstant(name, i, value + \"\"), priority);\n}\n","function styleTween(name, value, priority) {\n function tween() {\n var node = this, i = value.apply(node, arguments);\n return i && function(t) {\n node.style.setProperty(name, i(t), priority);\n };\n }\n tween._value = value;\n return tween;\n}\n\nexport default function(name, value, priority) {\n var key = \"style.\" + (name += \"\");\n if (arguments.length < 2) return (key = this.tween(key)) && key._value;\n if (value == null) return this.tween(key, null);\n if (typeof value !== \"function\") throw new Error;\n return this.tween(key, styleTween(name, value, priority == null ? \"\" : priority));\n}\n","import {get, init} from \"./schedule\";\n\nfunction delayFunction(id, value) {\n return function() {\n init(this, id).delay = +value.apply(this, arguments);\n };\n}\n\nfunction delayConstant(id, value) {\n return value = +value, function() {\n init(this, id).delay = value;\n };\n}\n\nexport default function(value) {\n var id = this._id;\n\n return arguments.length\n ? this.each((typeof value === \"function\"\n ? delayFunction\n : delayConstant)(id, value))\n : get(this.node(), id).delay;\n}\n","import {get, set} from \"./schedule\";\n\nfunction durationFunction(id, value) {\n return function() {\n set(this, id).duration = +value.apply(this, arguments);\n };\n}\n\nfunction durationConstant(id, value) {\n return value = +value, function() {\n set(this, id).duration = value;\n };\n}\n\nexport default function(value) {\n var id = this._id;\n\n return arguments.length\n ? this.each((typeof value === \"function\"\n ? durationFunction\n : durationConstant)(id, value))\n : get(this.node(), id).duration;\n}\n","import {get, set} from \"./schedule\";\n\nfunction easeConstant(id, value) {\n if (typeof value !== \"function\") throw new Error;\n return function() {\n set(this, id).ease = value;\n };\n}\n\nexport default function(value) {\n var id = this._id;\n\n return arguments.length\n ? this.each(easeConstant(id, value))\n : get(this.node(), id).ease;\n}\n","import {Transition, newId} from \"../transition/index\";\nimport schedule from \"../transition/schedule\";\nimport {easeCubicInOut} from \"d3-ease\";\nimport {now} from \"d3-timer\";\n\nvar defaultTiming = {\n time: null, // Set on use.\n delay: 0,\n duration: 250,\n ease: easeCubicInOut\n};\n\nfunction inherit(node, id) {\n var timing;\n while (!(timing = node.__transition) || !(timing = timing[id])) {\n if (!(node = node.parentNode)) {\n return defaultTiming.time = now(), defaultTiming;\n }\n }\n return timing;\n}\n\nexport default function(name) {\n var id,\n timing;\n\n if (name instanceof Transition) {\n id = name._id, name = name._name;\n } else {\n id = newId(), (timing = defaultTiming).time = now(), name = name == null ? null : name + \"\";\n }\n\n for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n schedule(node, name, id, i, group, timing || inherit(node, id));\n }\n }\n }\n\n return new Transition(groups, this._parents, name, id);\n}\n","import {selection} from \"d3-selection\";\nimport selection_interrupt from \"./interrupt\";\nimport selection_transition from \"./transition\";\n\nselection.prototype.interrupt = selection_interrupt;\nselection.prototype.transition = selection_transition;\n","import interrupt from \"../interrupt\";\n\nexport default function(name) {\n return this.each(function() {\n interrupt(this, name);\n });\n}\n","import {STARTING, ENDING, ENDED} from \"./transition/schedule\";\n\nexport default function(node, name) {\n var schedules = node.__transition,\n schedule,\n active,\n empty = true,\n i;\n\n if (!schedules) return;\n\n name = name == null ? null : name + \"\";\n\n for (i in schedules) {\n if ((schedule = schedules[i]).name !== name) { empty = false; continue; }\n active = schedule.state > STARTING && schedule.state < ENDING;\n schedule.state = ENDED;\n schedule.timer.stop();\n if (active) schedule.on.call(\"interrupt\", node, node.__data__, schedule.index, schedule.group);\n delete schedules[i];\n }\n\n if (empty) delete node.__transition;\n}\n","import {Transition} from \"./transition/index\";\nimport {SCHEDULED} from \"./transition/schedule\";\n\nvar root = [null];\n\nexport default function(node, name) {\n var schedules = node.__transition,\n schedule,\n i;\n\n if (schedules) {\n name = name == null ? null : name + \"\";\n for (i in schedules) {\n if ((schedule = schedules[i]).state > SCHEDULED && schedule.name === name) {\n return new Transition([[node]], root, name, +i);\n }\n }\n }\n\n return null;\n}\n","import { select, event as d3event, selection, clientPoint } from 'd3-selection';\nimport { drag as d3drag } from 'd3-drag';\nimport 'd3-transition';\nimport { mergeRecursive } from './common-utils';\n/**\n * This function takes a raw DOM element or\n * a string and returns a d3 selection of that element.\n *\n * @param {HTMLElement | string} element The element to wrap in d3 selection.\n * @return {Selection} Instance of d3 selection.\n */\nconst selectElement = element => select(element);\n\n/**\n * It creates a new d3 element on the parent element\n * @param {Selection} parent Element to which the element is to be appended\n * @param {Object} elemType Type of the new element\n * @param {Array} data Data for the new element\n * @param {Object} selector classname/id/tagname for the element\n * @return {HTMLElement} Newly Created Element\n */\nconst makeElement = (parent, elemType, data, selector, callbacks = {}, keyFn) => {\n if ((parent instanceof HTMLElement || parent instanceof SVGElement)) {\n parent = selectElement(parent);\n }\n\n const selectorVal = selector ? selector[0] : null;\n let selectorType = null;\n let actualSelector = null;\n let element = null;\n let enterSel = null;\n let mergeSel = null;\n let filter;\n if (selectorVal) {\n if (selectorVal === '#') {\n selectorType = 'id';\n actualSelector = selector;\n } else {\n selectorType = 'class';\n actualSelector = selector[0] === '.' ? selector : `.${selector}`;\n }\n } else {\n actualSelector = elemType;\n filter = true;\n }\n element = parent.selectAll(actualSelector);\n\n filter && (element = element.filter(function () {\n return this.parentNode === parent.node();\n }));\n element = element.data(data, keyFn);\n\n enterSel = element.enter()\n .append(elemType || 'div');\n callbacks.enter && enterSel.each(function (...params) {\n callbacks.enter(selectElement(this), ...params);\n });\n\n mergeSel = enterSel.merge(element);\n callbacks.update && mergeSel.each(function (...params) {\n callbacks.update(selectElement(this), ...params);\n });\n if (selectorType === 'class') {\n mergeSel.classed(selectorVal === '.' ? selector.substring(1, selector.length) : selector, true);\n } else if (selectorType === 'id') {\n mergeSel.attr('id', selector.substring(1, selector.length));\n }\n const exitSel = element.exit();\n\n if (callbacks.exit) {\n exitSel.each(function (...params) {\n callbacks.exit(selectElement(this), ...params);\n });\n } else {\n exitSel.remove();\n }\n return mergeSel;\n};\n\n/**\n * This function applies styles to an element\n * @param {Object} elem Element Selection\n * @param {Object} styleObj Style Object to be applied\n * @return {Element} Newly Created Element\n*/\nconst applyStyle = (elem, styleObj) => {\n Object.entries(styleObj).forEach((d) => {\n elem.style(d[0], d[1]);\n }, this);\n return elem;\n};\n\n/**\n * This function appends a dom element in another element.\n * @param {HTMLElement | SVGElement} element1 The element in which to append the second element\n * @param {HTMLElement | SVGElement} element2 The element which will be appended.\n */\nconst appendElement = (element1, element2) => {\n element1.appendChild(element2);\n};\n\n/**\n * Sets the attributes to the element.\n * @param {HTMLElement | SVGElement} element Element on which attributes will be applied\n * @param {Object} attrs Attributes which need to be applied\n */\nconst setElementAttrs = (element, attrs) => {\n for (const key in attrs) {\n if ({}.hasOwnProperty.call(attrs, key)) {\n element.attr(key, attrs[key]);\n }\n }\n};\n\n/**\n * Sets attributes in the svg or html element\n * @param {SVGElement | HTMLElement} element The element on which attrs will be applied\n * @param {Array.} attrs Array of attributes\n * @param {string} className className of elements to select.\n * @return {SVGElement | HTMLElement} SVGElement or html element.\n */\nconst setAttrs = (element, attrs, className) => {\n if (!(element instanceof selection)) {\n element = selectElement(element);\n }\n className !== undefined ? element.selectAll(`.${className}`).each(function () {\n setElementAttrs(select(this), attrs);\n }) : setElementAttrs(element, attrs);\n return element;\n};\n\n/**\n * Adds a css class to elements which passes the filter function.If filter function is not given,\n * then all elements will be applied the class.\n * @param {HTMLElement | SVGElement} element element\n * @param {string} className css class\n * @param {string} selector css selector\n * @param {Function} filterFn filter method.\n */\nconst addClass = (element, className, selector, filterFn) => {\n select(element).selectAll(selector).each(function (data) {\n const elem = select(this);\n filterFn ? filterFn(data) && elem.classed(className, true) :\n elem.classed(className, true);\n });\n};\n\n/**\n * Removes the css class from elements which passes the filter function.If filter function is not given,\n * then all elements will be applied the class.\n * @param {HTMLElement | SVGElement} element element\n * @param {string} className css class\n * @param {string} selector css selector\n * @param {Function} filterFn filter method.\n */\nconst removeClass = (element, className, selector, filterFn) => {\n select(element).selectAll(selector).each(function (data) {\n const elem = select(this);\n filterFn ? filterFn(data) && elem.classed(className, false) :\n elem.classed(className, false);\n });\n};\n\n/**\n * Sets styles in the svg or html element\n * @param {SVGElement | HTMLElement} element The element on which styles will be applied\n * @param {Array.} styles Array of style attributes\n * @return {SVGElement | HTMLElement} SVGElement or html element.\n */\nconst setStyles = (element, styles) => {\n if (!(element instanceof selection)) {\n element = selectElement(element);\n }\n for (const key in styles) {\n if ({}.hasOwnProperty.call(styles, key)) {\n element.style(key, styles[key]);\n }\n }\n return element;\n};\n\n/**\n * Creates svg or html elements by binding data to the selection.Removes extra elements\n * on exit.\n * @param {Object} params Parameter object\n * @param {SVGElement | HTMLElement} params.container Container element where all elements will be appended\n * @param {string} params.selector Selector by which elements will be selected from dom\n * @param {string} params.append Append tag\n * @param {Function} params.each Function which will be executed for each data point and element.\n */\nconst createElements = (params) => {\n const container = select(params.container);\n let data;\n let sel;\n\n data = params.data;\n if (typeof data === 'number') {\n data = Array(data).fill().map((d, i) => i);\n }\n sel = container.selectAll(params.selector).data(data);\n\n sel = container.selectAll(params.selector).filter(function () {\n return this.parentNode === container.node();\n }).data(params.data);\n\n const selectionMerge = sel.enter().append(params.append).merge(sel).each(function (d, i) {\n params.each(d, select(this), i);\n });\n\n selectionMerge.attr('class', params.className || '');\n sel.exit().remove();\n};\n\n/**\n * Clips an element with given measurement. Basically it is used to hide overflowing portions\n * of any element.\n * @param {SVGElement} container svg element which needs to be clipped.\n * @param {Object} measurement Dimensions of the clipped rectangle.\n * @param {string} id Unique id of the clip element\n */\nconst clipElement = (container, measurement, id) => {\n const clipPathElement = makeElement(select(container), 'clipPath', [1], `#${id}`);\n const clipPathRect = makeElement(clipPathElement, 'rect', [1]);\n clipPathRect.attr('x', measurement.x)\n .attr('y', measurement.x)\n .attr('width', measurement.width)\n .attr('height', measurement.height);\n clipPathElement.attr('clip-path', `url(#${id})`);\n};\n\n/**\n * Returns the element of the corresponding classname.\n * @param {HTMLElement | SVGElement} node html or svg node element.\n * @param {string} className css class to be applied.\n * @return {HTMLElement | SVGElement} html or svg element.\n */\nconst getElementsByClassName = (node, className) => select(node).selectAll(className).nodes();\n\n/**\n * Gets the mouse position relative to an svg type of element\n * @param {SVGElement} element Any svg element like rect, circle, etc.\n * @param {Event} event Event object.\n * @return {Object} x and y position relative to the container element passed.\n */\nconst getMousePos = (element, event) => {\n const boundingClientRect = element.getBoundingClientRect();\n return {\n x: event.x - boundingClientRect.x,\n y: event.y - boundingClientRect.y\n };\n};\n\nconst getClientPoint = (...params) => {\n const pos = clientPoint(...params);\n return {\n x: pos[0],\n y: pos[1]\n };\n};\n\n/** This function appends a dom element in another element.\n * @param {Object} tag The tag name of the element to append\n * @param {Object} mount Mount point fo the element\n * @return {Object} selection of the appended element\n */\nconst createElement = (tag, mount) => select(mount).append(tag).node();\n\n/**\n * Gets the d3 event function\n * @return {Object} d3 event\n */\nconst getEvent = () => d3event;\n\n/**\n * Gets the d3 drag function\n * @return {Object} d3 drag\n */\nconst getD3Drag = () => d3drag;\n\nconst getSmartComputedStyle = (group, css) => {\n let textEl;\n const testText = 'W';\n const mandatoryStyle = {\n 'fill-opacity': 0\n };\n const className = typeof css === 'string' ? css : (css instanceof Array ? css.join(' ') : undefined);\n\n if (group.node() instanceof HTMLElement) {\n textEl = group.append('div').html(testText);\n } else {\n textEl = group.append('text').text(testText);\n }\n\n if (className) {\n textEl.attr('class', className);\n } else if (typeof css === 'object') {\n delete css['fill-opacity'];\n mergeRecursive(mandatoryStyle, css);\n }\n\n textEl.style(mandatoryStyle);\n\n const computedStyle = window.getComputedStyle(textEl.node());\n const styleForSmartLabel = {\n fontSize: computedStyle.fontSize,\n fontFamily: computedStyle.fontFamily,\n fontWeight: computedStyle.fontWeight,\n fontStyle: computedStyle.fontStyle\n };\n\n textEl.remove();\n\n return styleForSmartLabel;\n};\n\nconst hasTouch = () => 'ontouchstart' in document.documentElement;\n\nexport {\n hasTouch,\n selectElement,\n makeElement,\n applyStyle,\n addClass,\n removeClass,\n appendElement,\n setAttrs,\n setStyles,\n createElement,\n createElements,\n clipElement,\n getElementsByClassName,\n getMousePos,\n getEvent,\n getD3Drag,\n getSmartComputedStyle,\n getClientPoint\n};\n","/**\n * This class represents a selection applied on a data array.\n *\n * @class Selection\n */\nclass Selection {\n /**\n * Creates an instance of Selection.\n * @param {Array} data Array of DataObjects.\n * @memberof Selection\n */\n constructor () {\n this._data = [];\n // // map of id to data\n this._idMap = {};\n\n this._mode = '';\n // data.forEach((item, idx) => {\n // const index = item.id || idx;\n // this._idMap[index] = item;\n // });\n // // array to store data in enter phase\n this._enterdata = [];\n // // array to store data in exit phase\n this._exitdata = [];\n }\n /**\n * Gets the object bound to a class\n *\n * @return {Object} current data set bound to the class\n * @memberof Selection\n */\n getObjects () {\n return Object.keys(this._idMap).map(e => this._idMap[e]);\n }\n\n /**\n * This method is used to supply seed data to a selection.\n *\n * @param {Array} newData Seed data to create the enter selection.\n * @param {Functon | undefined } idGetter This function is used to uniqely identify a data entry.\n * @return {Selection} Modified selection.\n * @memberof Selection\n */\n data (newData, idGetter) {\n if (idGetter) {\n this._data = [];\n this._idGetter = idGetter;\n const tempMap = {};\n\n newData.forEach((...params) => {\n const index = idGetter(...params);\n tempMap[index] = params[0];\n });\n // check if any data items have been removed\n const purgedIds = [];\n\n Object.keys(this._idMap).forEach((id) => {\n if (!tempMap[id]) {\n purgedIds.push(id);\n }\n });\n\n Object.keys(tempMap).forEach((id) => {\n if (!this._idMap[id]) {\n this._enterdata.push(tempMap[id]);\n } else {\n this._idMap[id] = tempMap[id];\n this._data.push(tempMap[id]);\n }\n });\n // move the purged items to exit selection\n purgedIds.forEach((id) => {\n const purged = this._idMap[id];\n this._exitdata.push(purged);\n // this._data = this._data.slice(id, 1);\n delete this._idMap[id];\n });\n // this._data = this._data.slice(temp, this._data.length);\n\n return this;\n }\n // no id getter supplied so use indices\n if (newData.length > this._data.length) {\n const startIdx = this._data.length;\n for (let i = startIdx; i < newData.length; i += 1) {\n this._enterdata.push(newData[i]);\n }\n } else {\n // push to exit selection\n const temp = newData.length;\n for (let i = temp; i < this._data.length; i += 1) {\n const purged = this._data[i];\n delete this._idMap[purged.id];\n this._exitdata.push(purged);\n }\n this._data = this._data.slice(temp, this._data.length);\n }\n return this;\n }\n\n /**\n * Applies the supplied callback to each data element\n * and returns a new selection.\n *\n * @param {Function} callback Callback to execute on each item.\n * @return {Selection} New selection with data created using callback.\n * @memberof EnterSelection\n */\n append (callback) {\n this[`_${this._mode}data`].forEach((...params) => {\n const data = params[0];\n const id = this._idGetter ? this._idGetter(...params) : (data.id || params[1]);\n this._idMap[id] = callback(...params);\n });\n this._mode = '';\n return this;\n }\n\n /**\n * This method returns an enter selection that\n * allows or update operations.\n *\n * @return {EnterSelection} Instance of enter selection.\n * @memberof Selection\n */\n enter () {\n this._mode = 'enter';\n return this;\n // return new EnterSelection(this._enterdata, this._idMap, this._idGetter);\n }\n\n /**\n * This method is used to set key value pairs\n * on data objects.\n *\n * @param {string} key Name of property.\n * @param {any} value Value of property.\n * @return {Selection} Modified selection.\n * @memberof Selection\n */\n attr (key, value) {\n this._data.forEach(item => item.attr(key, value));\n return this;\n }\n\n /**\n * This method merges the data of one selection with another.\n *\n * @param {Selection} selection Instance of selection.\n * @return {Selection} Modified selection.\n * @memberof Selection\n */\n merge (selection) {\n selection._data.forEach((...params) => {\n const id = this._idGetter ? this._idGetter(...params) : (params[0].id || params[1]);\n this._idMap[id] = params[0];\n this._data.push(params[0]);\n });\n // reset enter selection\n this._enterdata = [];\n return this;\n }\n\n /**\n * Returns a selection with exit data.\n *\n * @return {Selection} Instance of selection.\n * @memberof Selection\n */\n exit () {\n this._mode = 'exit';\n // const exitdata = this._exitdata;\n // const exitSelection = new Selection(exitdata);\n // this._exitdata = [];\n return this;\n }\n\n each (fn) {\n Object.keys(this._idMap).forEach((e) => {\n fn(this._idMap[e]);\n });\n return this;\n }\n\n map (fn) {\n Object.keys(this._idMap).forEach((...params) => {\n this._idMap[params[0]] = fn(this._idMap[params[0]], ...params);\n });\n return this;\n }\n\n /**\n * Executes the cleanup operation associated with data objets.\n *\n * @memberof Selection\n */\n remove () {\n // do cleanup on DDO's\n const data = this[`_${this._mode}data`];\n\n data.forEach(item => item.remove());\n if (this._mode === '') {\n this.each(e => e.remove());\n }\n this[`_${this._mode}data`] = [];\n this._mode = '';\n }\n}\n\nexport default Selection;\n","import { getUniqueId } from '../index';\n/**\n * Represents the base class that all objects that form\n * the data for a selection must inherit from.\n *\n * @class DataObject\n */\nclass DataObject {\n/**\n * Creates an instance of DataObject.\n * @memberof DataObject\n */\n constructor () {\n this._id = getUniqueId();\n }\n /**\n * Returns the id.\n *\n * @readonly\n * @memberof DataObject\n */\n get id () {\n return this._id;\n }\n\n /**\n * Sets the value corresponding to supplied key.\n *\n * @param {string} key The property name.\n * @param {any} value Value associated with prop.\n * @memberof DataObject\n */\n attr (key, value) {\n this[key] = value;\n }\n\n /**\n * Clean up code to be executed by each object.\n *\n * @override\n * @memberof DataObject\n */\n remove () {\n // cleanup\n }\n}\n\nexport default DataObject;\n","const events = [\n 'initialized',\n 'beforeupdate',\n 'updated',\n 'beforedraw',\n 'drawn',\n 'beforeremove',\n 'removed'\n];\n\nconst compositions = [\n 'canvas',\n 'unit',\n 'layer',\n 'axis',\n 'facet-headers',\n 'legend',\n 'caption'\n];\n\nconst EVENT_LIST = [];\n\ncompositions.forEach((composition) => {\n events.forEach((event) => {\n EVENT_LIST.push(`${composition}.${event}`);\n });\n});\n\nexport default EVENT_LIST;\n","import EVENT_LIST from './event-list';\n\n/**\n * At first call it accepts one function\n * calling it second time accepts notification object.\n * notification object then called with first accepted function\n *\n * @param {Function} resolveFn a promise's resolve function\n * @return {Function} a function to accept notification object\n */\nconst resolver = resolveFn => notification => resolveFn(notification);\n\n/**\n * Checks if the property string is present in the source object\n *\n * @param {Object} source source object whom you want to check the property\n * @param {string} property key name that need to be checked\n * @return {boolean} returns true if the property found in the source object\n */\nconst hasOwn = (source, property) => Object.prototype.hasOwnProperty.call(source, property);\n\n/**\n * LifeCycleManager which goes as a dependendecy to a muze\n * it accepts notification from the entire library throughout\n * the exeecution life\n *\n * @export\n * @class LifeCycleManager\n */\nexport default class LifeCycleManager {\n\n /**\n * Creates an instance of LifeCycleManager.\n * @memberof LifeCycleManager\n */\n constructor () {\n this._eventList = EVENT_LIST;\n this._promises = new Map();\n this._notifiers = {};\n this._lifeCycles = {};\n this._unreleasedLifeCycles = {};\n this._boot();\n }\n\n /**\n * Fills all the notifiers with resolver callback\n *\n * @memberof LifeCycleManager\n */\n _boot () {\n this._notifiers = this._eventList.reduce((acc, name) => {\n acc[name] = resolver;\n return acc;\n }, {});\n this._preparePromises();\n }\n\n /**\n * Public method which gives the promise corresponding\n * to the event name\n *\n * @param {string} eventName name of the event like `canvas.drawn`\n * @return {promise} promise that is passed to the user\n * @memberof LifeCycleManager\n */\n retrieve (eventName) {\n return this._promises.get(eventName);\n }\n\n /**\n * Creates a promise that will be passed to user's callback\n *\n * @param {string} eventName name of the event like `canvas.drawn`\n * @return {promise} a pending promise waiting for resolve to be called\n * @memberof LifeCycleManager\n */\n _makeNotifierPromise (eventName) {\n return new Promise((resolve) => {\n this._notifiers[eventName] = this._notifiers[eventName](resolve);\n });\n }\n\n /**\n * Prepares the promise map with pending promises\n * all the promises are in a pending state where their's\n * resolve function waiting to be called with notification object\n * @memberof LifeCycleManager\n */\n _preparePromises () {\n this._eventList.forEach((eventName) => {\n this._promises.set(eventName, this._makeNotifierPromise(eventName));\n });\n }\n\n /**\n * Resolves the promise with notification object\n *\n * @param {string} eventName name of the event in the system\n * @param {Object} notification notification object\n * @param {string} notification.formalName name of the sender creating the notification\n * @param {Object} notification.client instance or array of instances sending the notification\n * @param {string} notification.action the stage name when the event happened like `beforedraw`\n *\n * @memberof LifeCycleManager\n */\n _resolvePromise (eventName, notification) {\n this._notifiers[eventName](notification);\n }\n\n /**\n * Public method which is being called by different\n * subcompoents of the system at different execution atages\n * @param {Object} notification notification object\n * @param {string} notification.formalName name of the sender creating the notification\n * @param {Object} notification.client instance or array of instances sending the notification\n * @param {string} notification.action the stage name when the event happened like `beforedraw`\n * @memberof LifeCycleManager\n */\n notify (notification) {\n // get the composition name from notification\n // or from static formalName() method\n const composition = notification.formalName || notification.client.constructor.formalName();\n notification.formalName = composition;\n this._releasePromisesFromCache();\n this._notify(composition, notification);\n }\n\n /**\n * Notify user the with promsie in a callback\n * if callback not found then cache it\n *\n * @param {string} composition\n * @param {Object} notification notification object\n * @param {string} notification.formalName name of the sender creating the notification\n * @param {Object} notification.client instance or array of instances sending the notification\n * @param {string} notification.action the stage name when the event happened like `beforedraw`\n * @memberof LifeCycleManager\n */\n _notify (composition, notification) {\n const stage = notification.action;\n const eventName = `${composition}.${stage}`;\n\n // resolves promise with the notification object\n this._resolvePromise(eventName, notification);\n\n // get the promise from the promise map\n const promise = this.retrieve(eventName);\n\n if (this._lifeCycles[composition]) {\n if (this._lifeCycles[composition][stage]) {\n // if user given call back exists, then call with promise\n this._callLifeCycleCallback(composition, stage, promise);\n } else {\n // otherwise cache the promise\n this._cachePromise(composition, stage, promise);\n }\n } else {\n this._cachePromise(composition, stage, promise);\n }\n }\n\n /**\n * Calls the user's callback with callback\n *\n * @param {string} composition name of the compositon like `canvas`\n * @param {string} stage the stage name when the event happened like `beforedraw`\n * @param {promise} promise promise that is passed to the user\n * @memberof LifeCycleManager\n */\n _callLifeCycleCallback (composition, stage, promise) {\n const eventName = `${composition}.${stage}`;\n this._lifeCycles[composition][stage](promise);\n this._resetTargetPromise(eventName);\n }\n\n /**\n * Try to clear the cached promsies once we have\n * macthed callbacks from the user\n *\n * @memberof LifeCycleManager\n */\n _releasePromisesFromCache () {\n const compositions = Object.keys(this._unreleasedLifeCycles);\n compositions.forEach((composition) => {\n const stages = Object.keys(this._unreleasedLifeCycles[composition]);\n stages.forEach((stage) => {\n if (this._lifeCycles[composition]) {\n if (this._lifeCycles[composition][stage]) {\n // take the promise from unreleased lifeCycles\n const promise = this._unreleasedLifeCycles[composition][stage];\n // call the user given callback with that promise\n this._callLifeCycleCallback(composition, stage, promise);\n // delete promise from unreleased lifeCycles\n delete this._unreleasedLifeCycles[composition][stage];\n }\n }\n });\n });\n }\n\n /**\n * Cache the promise in the map. This cache\n * then get consumed if we get user callbacks\n * @param {string} composition name of the compositon like `canvas`\n * @param {string} stage the stage name when the event happened like `beforedraw`\n * @param {promise} promise promise that is passed to the user\n * @memberof LifeCycleManager\n */\n _cachePromise (composition, stage, promise) {\n if (!hasOwn(this._unreleasedLifeCycles, composition)) {\n this._unreleasedLifeCycles[composition] = {};\n }\n\n if (!hasOwn(this._unreleasedLifeCycles[composition], stage)) {\n this._unreleasedLifeCycles[composition][stage] = {};\n }\n this._unreleasedLifeCycles[composition][stage] = promise;\n }\n\n /**\n * It register's the callbacks gievn the user\n *\n * @param {Object} [lifeCycles={}] a object with list of callbacks\n * @memberof LifeCycleManager\n */\n register (lifeCycles = {}) {\n this._lifeCycles = lifeCycles;\n // as we get all the callbacks, try to call them\n // from unreleased promise map\n this._releasePromisesFromCache();\n }\n\n /**\n * Reset the promise into pending state\n *\n * @param {string} eventName name of the event happening\n * @memberof LifeCycleManager\n */\n _resetTargetPromise (eventName) {\n setTimeout(() => {\n this._notifiers[eventName] = resolver;\n this._promises.set(eventName, this._makeNotifierPromise(eventName));\n }, 0);\n }\n}\n","import LifeCycleManager from './lifecycle-manager';\n\nexport default LifeCycleManager;\n","export const DRAG = 'drag';\nexport const HOVER = 'hover';\nexport const SELECTIONDRAG = 'selectiondrag';\nexport const CLICK = 'click';\nexport const LONGTOUCH = 'longtouch';\nexport const TOUCHDRAG = 'touchdrag';\nexport const ALL_ACTIONS = '*';\n","const SELECTION_NEW_ENTRY = 1;\nconst SELECTION_NEW_EXIT = -1;\nconst SELECTION_NULL = 0;\nconst SELECTION_OLD_ENTRY = 2;\nconst SELECTION_OLD_EXIT = -2;\n\nexport {\n SELECTION_NEW_ENTRY,\n SELECTION_NEW_EXIT,\n SELECTION_NULL,\n SELECTION_OLD_ENTRY,\n SELECTION_OLD_EXIT\n};\n","import {\n SELECTION_NEW_ENTRY, SELECTION_NEW_EXIT, SELECTION_NULL, SELECTION_OLD_ENTRY, SELECTION_OLD_EXIT\n} from '../enums/selection';\n/* eslint-disable guard-for-in */\n\n/**\n * This component is used to keep track of the row tuples of the data which gets added and removed.\n * @class SelectionSet\n */\nclass SelectionSet {\n /**\n * Creates an instance of selection set\n * @param {Array.} completeSet Set of unique ids.\n */\n constructor (completeSet, _volatile) {\n this.completeSet = completeSet;\n this._set = completeSet.reduce((obj, key) => {\n obj[key] = SELECTION_NULL;\n return obj;\n }, {});\n this._volatile = _volatile;\n this._completeSetCount = completeSet.length;\n this._lockedSelection = {};\n this._resetted = true;\n }\n\n /**\n * Adds a set of ids to the selection set.\n * @param {Array.} ids Array of unique ids\n * @return {SelectionSet} Instance of selection set.\n */\n add (ids) {\n this._resetted = false;\n\n const set = this._set;\n // from exitset to entryset\n ids.forEach((i) => {\n set[i] = SELECTION_NEW_ENTRY;\n });\n\n for (const key in set) {\n if (set[key] !== SELECTION_NEW_ENTRY && set[key] !== SELECTION_OLD_ENTRY) {\n set[key] = set[key] < 0 ? SELECTION_OLD_EXIT : SELECTION_NEW_EXIT;\n }\n }\n return this;\n }\n\n /**\n * Adds a set of ids to the selection set.\n * @param {Array.} ids Array of unique ids\n * @return {SelectionSet} Instance of selection set.\n */\n update (ids) {\n const set = this._set;\n // from exitset to entryset\n ids.forEach((i) => {\n set[i] = SELECTION_OLD_ENTRY;\n });\n\n return this;\n }\n\n /**\n * Adds a set of ids to the selection set.\n * @param {Array.} ids Array of unique ids\n * @return {SelectionSet} Instance of selection set.\n */\n updateEntry () {\n const set = this._set;\n\n // from exitset to entryset\n for (const key in set) {\n set[key] = set[key] === SELECTION_NEW_ENTRY ? SELECTION_OLD_ENTRY : set[key];\n }\n return this;\n }\n\n /**\n * Adds a set of ids to the selection set.\n * @param {Array.} ids Array of unique ids\n * @return {SelectionSet} Instance of selection set.\n */\n updateExit () {\n const set = this._set;\n // from exitset to entryset\n for (const key in set) {\n set[key] = set[key] === SELECTION_NEW_EXIT ? SELECTION_OLD_EXIT : set[key];\n }\n return this;\n }\n\n /**\n * Removes the ids from the selection set.\n * @param {Array.} ids Array of unique ids\n * @return {SelectionSet} Instance of selection set\n */\n remove (ids) {\n this._resetted = false;\n\n const set = this._set;\n ids.forEach((i) => {\n set[i] = SELECTION_NEW_EXIT;\n });\n\n for (const key in set) {\n if (set[key] !== SELECTION_NEW_EXIT && set[key] !== SELECTION_OLD_EXIT) {\n set[key] = set[key] === 0 ? SELECTION_NEW_ENTRY : SELECTION_OLD_ENTRY;\n }\n }\n\n return this;\n }\n\n getSets () {\n const set = this._set;\n const retObj = {\n entrySet: [[], []],\n exitSet: [[], []],\n completeSet: []\n };\n\n for (const key in set) {\n if (set[key] > 0) {\n set[key] === SELECTION_OLD_ENTRY && retObj.entrySet[0].push(key);\n set[key] === SELECTION_NEW_ENTRY && retObj.entrySet[1].push(key);\n } else if (set[key] < 0) {\n set[key] === SELECTION_OLD_EXIT && retObj.exitSet[0].push(key);\n set[key] === SELECTION_NEW_EXIT && retObj.exitSet[1].push(key);\n }\n retObj.completeSet.push(key);\n }\n\n ['entrySet', 'exitSet'].forEach((type) => {\n retObj[type] = retObj[type].map(e => e.map(Number));\n });\n retObj.completeSet = retObj.completeSet.map(Number);\n\n return retObj;\n }\n\n /**\n * Resets the selection set to initial state. It sets the value of every unique id value to\n * null in the selection set.\n * @return {SelectionSet} Instance of selection set.\n */\n reset (ids) {\n const set = this._set;\n if (ids) {\n ids.forEach((i) => {\n set[i] = SELECTION_NULL;\n });\n } else {\n const lockedSel = this._lockedSelection;\n for (const key in set) {\n if (!(key in lockedSel)) {\n set[key] = SELECTION_NULL;\n }\n }\n }\n this._resetted = true;\n return this;\n }\n\n /**\n * Gets the set of ids which are added in the selection set.\n * @return {Array.} Array of unique ids\n */\n getEntrySet () {\n const set = this._set;\n const addSet = [];\n\n for (const key in set) {\n set[key] === SELECTION_NEW_ENTRY && addSet.push(key);\n }\n\n return addSet;\n }\n\n /**\n * Returns a set of unique ids which are already present in entry set\n * @param {Array} addSet Array of unique ids which are added\n *\n * @return {Array} Array of unique ids which are already in old entry set or new entry set\n */\n getExistingEntrySet (addSet) {\n const set = this._set;\n return addSet.filter(d => set[d] === SELECTION_NEW_ENTRY || set[d] === SELECTION_OLD_ENTRY);\n }\n\n getExistingExitSet (removeSet) {\n const set = this._set;\n return removeSet.filter(d => set[d] === SELECTION_NEW_EXIT || set[d] === SELECTION_OLD_EXIT);\n }\n\n /**\n * Gets the set of ids which are added in the selection set.\n * @return {Array.} Array of unique ids\n */\n getOldEntry () {\n const set = this._set;\n const updateSet = [];\n\n for (const key in set) {\n set[key] === SELECTION_OLD_ENTRY && updateSet.push(key);\n }\n return updateSet;\n }\n\n /**\n * Gets the set of ids which are added in the selection set.\n * @return {Array.} Array of unique ids\n */\n getOldExit () {\n const set = this._set;\n const updateSet = [];\n\n for (const key in set) {\n set[key] === SELECTION_OLD_EXIT && updateSet.push(key);\n }\n\n return updateSet;\n }\n\n /**\n * Gets the set of ids which are in the remove set.\n * @return {Array.} Array of unique ids\n */\n getExitSet () {\n const set = this._set;\n const removeSet = [];\n\n for (const key in set) {\n set[key] === SELECTION_NEW_EXIT && removeSet.push(key);\n }\n return removeSet;\n }\n\n getCompleteSet () {\n const set = this._set;\n const completeSet = [];\n\n for (const key in set) {\n completeSet.push(key);\n }\n\n return completeSet;\n }\n\n getCompleteSetCount () {\n return this._completeSetCount;\n }\n\n resetted () {\n return this._resetted;\n }\n\n /**\n * Swaps the add set and remove set in the selection set.\n * @return {SelectionSet} Instance of selection set.\n */\n toggle () {\n const set = this._set;\n\n for (const key in set) {\n if (set[key] === SELECTION_NEW_ENTRY) {\n set[key] = SELECTION_NEW_EXIT;\n } else if (set[key] === SELECTION_NEW_EXIT) {\n set[key] = SELECTION_NEW_ENTRY;\n } else if (set[key] === SELECTION_OLD_ENTRY) {\n set[key] = SELECTION_OLD_EXIT;\n } else {\n set[key] = SELECTION_OLD_ENTRY;\n }\n }\n\n return this;\n }\n}\n\nexport default SelectionSet;\n","import { clone } from 'muze-utils';\nimport * as SELECTION from '../enums/selection';\n\nexport const initializeSideEffects = (context, sideEffects) => {\n const sideEffectsMap = context._sideEffects;\n\n sideEffects = sideEffects instanceof Array ? sideEffects : Object.values(sideEffects);\n sideEffects.forEach((SideEffect) => {\n const sideEffectInstance = sideEffectsMap[SideEffect.formalName()];\n sideEffectsMap[SideEffect.formalName()] = sideEffectInstance || new SideEffect(context);\n });\n return sideEffectsMap;\n};\n\nexport const initializeBehaviouralActions = (context, actions) => {\n const dispatchableBehaviours = {};\n\n actions = actions instanceof Array ? actions : Object.values(actions);\n actions.forEach((Action) => {\n dispatchableBehaviours[Action.formalName()] = new Action(context);\n });\n return dispatchableBehaviours;\n};\n\nexport const initializePhysicalActions = (context, actions) => {\n const physicalActions = {};\n\n for (const name in actions) {\n if (!({}).hasOwnProperty.call(name, actions)) {\n physicalActions[name] = actions[name](context);\n }\n }\n return physicalActions;\n};\n\nexport const changeSideEffectAvailability = (context, fn, toEnable) => {\n const sideEffects = context.sideEffects();\n for (const key in sideEffects) {\n if ({}.hasOwnProperty.call(sideEffects, key)) {\n let change = true;\n if (fn && fn(key) === false) {\n change = false;\n }\n if (change) {\n toEnable ? sideEffects[key].enable() : sideEffects[key].disable();\n }\n }\n }\n};\n\nexport const getMergedSet = set => [...new Set([...set[0], ...set[1]])];\n\nexport const getSourceFields = (propagationInf, criteria = {}) => {\n const sourceIdentifiers = propagationInf.sourceIdentifiers;\n let sourceFields;\n if (sourceIdentifiers) {\n sourceFields = sourceIdentifiers.getSchema().map(d => d.name);\n } else if (criteria instanceof Array) {\n sourceFields = criteria[0];\n } else {\n sourceFields = Object.keys(criteria || {});\n }\n return sourceFields;\n};\n\nconst conditionsMap = {\n newEntry: [SELECTION.SELECTION_NEW_ENTRY],\n oldEntry: [SELECTION.SELECTION_OLD_ENTRY],\n mergedEnter: [SELECTION.SELECTION_NEW_ENTRY, SELECTION.SELECTION_OLD_ENTRY],\n newExit: [SELECTION.SELECTION_NEW_EXIT],\n oldExit: [SELECTION.SELECTION_OLD_EXIT],\n mergedExit: [SELECTION.SELECTION_NEW_EXIT, SELECTION.SELECTION_OLD_EXIT],\n complete: []\n};\n\nexport const getModelFromSet = (type, model, set) => {\n if (model) {\n return model.select((fields, i) =>\n (conditionsMap[type].some(condition => set[i] === condition)), {\n saveChild: false\n });\n }\n return null;\n};\n\nexport const getSetInfo = (type, set, config) => {\n let model = null;\n const filteredDataModel = config.filteredDataModel;\n const selectionSet = config.selectionSet;\n if (!config.propagationData) {\n if (selectionSet.resetted()) {\n model = null;\n } else {\n model = getModelFromSet(type, config.dataModel, config.selectionSet._set);\n }\n } else if (filteredDataModel) {\n model = type === 'mergedEnter' ? filteredDataModel[0] : filteredDataModel[1];\n }\n return {\n uids: set,\n length: set.length,\n model\n };\n};\n\nexport const getSideEffects = (behaviour, behaviourEffectMap) => {\n const sideEffects = [];\n for (const key in behaviourEffectMap) {\n const behaviours = key.split(',');\n const found = behaviours.some(d => d === behaviour);\n if (found) {\n sideEffects.push({\n effects: behaviourEffectMap[key],\n behaviours\n });\n }\n }\n return sideEffects;\n};\n\nexport const unionSets = (context, behaviours) => {\n let combinedSet = {};\n const models = {\n mergedEnter: null,\n mergedExit: null\n };\n behaviours.forEach((behaviour) => {\n const entryExitSet = context._entryExitSet[behaviour];\n if (entryExitSet) {\n combinedSet = Object.assign(combinedSet, clone(entryExitSet));\n ['mergedEnter', 'mergedExit'].forEach((type) => {\n const model = entryExitSet[type].model;\n let existingModel = models[type];\n if (!existingModel) {\n existingModel = models[type] = model;\n } else {\n existingModel = models[type] = model.union(existingModel);\n }\n combinedSet[type].model = existingModel;\n });\n }\n });\n return combinedSet;\n};\n","import {\n mergeRecursive,\n hasTouch,\n filterPropagationModel,\n FieldType,\n selectElement,\n isSimpleObject\n} from 'muze-utils';\nimport { ALL_ACTIONS } from './enums/actions';\nimport SelectionSet from './selection-set';\nimport {\n initializeBehaviouralActions,\n initializeSideEffects,\n changeSideEffectAvailability,\n initializePhysicalActions,\n unionSets,\n getSideEffects\n} from './helper';\n\n/**\n * Relient firebolt is responsible for dispatching behaviours. It has only behaviours which can be\n * dispatched without any physical action being triggered.\n */\nexport default class Firebolt {\n constructor (context, actions, sideEffects, behaviourEffectMap) {\n this.context = context;\n this._sideEffectDefinitions = {};\n this._sideEffects = {};\n this._propagationInf = {};\n this._actions = {\n behavioural: {},\n physical: {}\n };\n this._selectionSet = {};\n this._volatileSelectionSet = {};\n this._propagationFields = {};\n this._sourceSideEffects = {\n selectionBox: () => false\n };\n this._propagationBehaviourMap = {};\n this._sourceBehaviours = {};\n this._actionBehaviourMap = {};\n this._config = {};\n this._behaviourEffectMap = {};\n this._entryExitSet = {};\n this._actionHistory = {};\n this._queuedSideEffects = {};\n this._mappedActions = {};\n\n this.mapSideEffects(behaviourEffectMap);\n this.registerBehaviouralActions(actions.behavioural);\n this.registerSideEffects(sideEffects);\n this.registerPhysicalBehaviouralMap(actions.physicalBehaviouralMap);\n this.registerPhysicalActions(actions.physical);\n }\n\n config (...config) {\n if (config.length) {\n const conf = this._config = mergeRecursive(this._config, config[0]);\n const sideEffects = this.sideEffects();\n for (const key in sideEffects) {\n if ({}.hasOwnProperty.call(sideEffects, key)) {\n const sideEffectConf = conf[key];\n sideEffectConf && sideEffects[key].config(sideEffectConf);\n }\n }\n return this;\n }\n return this._config;\n }\n\n mapSideEffects (behEffectMap) {\n const behaviourEffectMap = this._behaviourEffectMap;\n for (const key in behEffectMap) {\n if ({}.hasOwnProperty.call(behEffectMap, key)) {\n const sideEffects = behEffectMap[key] || [];\n let preventDefaultActions = false;\n let effectNames;\n if (isSimpleObject(sideEffects)) {\n effectNames = sideEffects.effects;\n preventDefaultActions = sideEffects.preventDefaultActions;\n } else {\n effectNames = sideEffects;\n }\n !behaviourEffectMap[key] && (behaviourEffectMap[key] = []);\n this._behaviourEffectMap[key] = [...new Set(preventDefaultActions ? effectNames :\n [...behaviourEffectMap[key], ...effectNames])];\n }\n }\n return this;\n }\n\n registerBehaviouralActions (actions) {\n const behaviours = initializeBehaviouralActions(this, actions);\n this.prepareSelectionSets(behaviours);\n Object.assign(this._actions.behavioural, behaviours);\n return this;\n }\n\n prepareSelectionSets () {\n return this;\n }\n\n registerSideEffects (sideEffects) {\n for (const key in sideEffects) {\n this._sideEffectDefinitions[sideEffects[key].formalName()] = sideEffects[key];\n }\n return this;\n }\n\n applySideEffects (sideEffects, selectionSet, payload) {\n const sideEffectStore = this.sideEffects();\n const actionHistory = this._actionHistory;\n const queuedSideEffects = this._queuedSideEffects;\n sideEffects.forEach((sideEffect) => {\n let options;\n let name;\n const effects = sideEffect.effects;\n const behaviours = sideEffect.behaviours;\n const combinedSet = unionSets(this, behaviours, selectionSet);\n effects.forEach((effect) => {\n if (typeof effect === 'object') {\n name = effect.name;\n options = effect.options;\n } else {\n name = effect;\n }\n\n const sideEffectInstance = sideEffectStore[name];\n if (sideEffectInstance.isEnabled()) {\n if (!sideEffectInstance.constructor.mutates() &&\n Object.values(actionHistory).some(d => d.isMutableAction)) {\n queuedSideEffects[`${name}-${behaviours.join()}`] = {\n name,\n params: [combinedSet, payload, options]\n };\n } else {\n this.dispatchSideEffect(name, combinedSet, payload, options);\n }\n }\n });\n });\n return this;\n }\n\n dispatchSideEffect (name, selectionSet, payload, options = {}) {\n const sideEffectStore = this.sideEffects();\n const sideEffect = sideEffectStore[name];\n let disable = false;\n if (options.filter && options.filter(sideEffect)) {\n disable = true;\n }\n !disable && sideEffectStore[name].apply(selectionSet, payload, options);\n }\n\n registerPropagationBehaviourMap (map) {\n this._propagationBehaviourMap = Object.assign(this._propagationBehaviourMap, map || {});\n return this;\n }\n\n dispatchBehaviour (behaviour, payload, propagationInfo = {}) {\n const propagate = propagationInfo.propagate !== undefined ? propagationInfo.propagate : true;\n const behaviouralActions = this._actions.behavioural;\n const action = behaviouralActions[behaviour];\n const behaviourEffectMap = this._behaviourEffectMap;\n const sideEffects = getSideEffects(behaviour, behaviourEffectMap);\n this._propagationInf = propagationInfo;\n\n if (action) {\n const selectionSet = action.dispatch(payload);\n const propagationSelectionSet = this.getPropagationSelectionSet(selectionSet);\n this._entryExitSet[behaviour] = propagationSelectionSet;\n const shouldApplySideEffects = this.shouldApplySideEffects(propagate);\n\n if (propagate) {\n this.propagate(behaviour, payload, selectionSet.find(d => d.sourceSelectionSet), sideEffects);\n }\n if (shouldApplySideEffects) {\n const applicableSideEffects = this.getApplicableSideEffects(sideEffects, payload, propagationInfo);\n this.applySideEffects(applicableSideEffects, propagationSelectionSet, payload);\n }\n }\n\n return this;\n }\n\n getPropagationSelectionSet (selectionSet) {\n return selectionSet.find(d => !d.sourceSelectionSet);\n }\n\n shouldApplySideEffects () {\n return true;\n }\n\n changeBehaviourStateOnPropagation (behaviour, value) {\n if (value instanceof Function) {\n this._sourceBehaviours[behaviour] = value;\n } else {\n this._sourceBehaviours[behaviour] = () => value;\n }\n return this;\n }\n\n changeSideEffectStateOnPropagation (sideEffect, value) {\n if (value instanceof Function) {\n this._sourceSideEffects[sideEffect] = value;\n } else {\n this._sourceSideEffects[sideEffect] = () => value;\n }\n }\n\n propagate () {\n return this;\n }\n\n sideEffects (...sideEffects) {\n if (sideEffects.length) {\n this._sideEffects = sideEffects[0];\n return this;\n }\n return this._sideEffects;\n }\n\n enableSideEffects (fn) {\n changeSideEffectAvailability(this, fn, true);\n return this;\n }\n\n disableSideEffects (fn) {\n changeSideEffectAvailability(this, fn, false);\n return this;\n }\n\n dissociateBehaviour (behaviour, physicalAction) {\n const actionBehaviourMap = this._actionBehaviourMap;\n for (const key in actionBehaviourMap) {\n if (key === physicalAction) {\n const behaviourMap = actionBehaviourMap[key];\n behaviourMap.behaviours = behaviourMap.behaviours.filter(d => d !== behaviour);\n }\n }\n\n return this;\n }\n\n dissociateSideEffect (sideEffect, behaviour) {\n const behaviourEffectMap = this._behaviourEffectMap;\n behaviourEffectMap[behaviour] = behaviourEffectMap[behaviour].filter(d => (d.name || d) !== sideEffect);\n return this;\n }\n\n getApplicableSideEffects (sideEffects) {\n return sideEffects;\n }\n\n attachPropagationListener (dataModel) {\n dataModel.unsubscribe('propagation');\n dataModel.on('propagation', this.onDataModelPropagation());\n return this;\n }\n\n onDataModelPropagation () {\n return (propValue) => {\n const payload = propValue.payload;\n const action = payload.action;\n\n this.dispatchBehaviour(action, payload, {\n propagate: false\n });\n };\n }\n\n createSelectionSet (uniqueIds, behaviouralActions) {\n const behaviours = behaviouralActions || this._actions.behavioural;\n const selectionSet = this._selectionSet;\n const volatileSelectionSet = this._volatileSelectionSet;\n\n for (const key in behaviours) {\n if ({}.hasOwnProperty.call(behaviours, key)) {\n selectionSet[key] = new SelectionSet(uniqueIds);\n volatileSelectionSet[key] = new SelectionSet(uniqueIds, true);\n }\n }\n this._volatileSelectionSet = volatileSelectionSet;\n this.selectionSet(selectionSet);\n return this;\n }\n\n selectionSet (...selectionSet) {\n if (selectionSet.length) {\n this._selectionSet = selectionSet[0];\n return this;\n }\n return this._selectionSet;\n }\n\n initializeSideEffects () {\n const sideEffectDefinitions = this._sideEffectDefinitions;\n this.sideEffects(initializeSideEffects(this, sideEffectDefinitions));\n return this;\n }\n\n registerPhysicalActions (actions) {\n const initedActions = initializePhysicalActions(this, actions);\n Object.assign(this._actions.physical, initedActions);\n return this;\n }\n\n propagateWith (action, fields, append = false) {\n const behaviouralActions = this._actions.behavioural;\n if (fields.length) {\n if (action === ALL_ACTIONS) {\n for (const key in behaviouralActions) {\n this._propagationFields[key] = {\n fields,\n append\n };\n }\n } else {\n this._propagationFields[action] = {\n fields,\n append\n };\n }\n return this;\n }\n return this._propagationFields;\n }\n\n /**\n * Map actions and behaviours\n * @return {Firebolt} Firebolt instance\n */\n mapActionsAndBehaviour () {\n const initedPhysicalActions = this._actions.physical;\n const map = this._actionBehaviourMap;\n const mappedActions = this._mappedActions;\n\n for (const action in map) {\n if (!({}).hasOwnProperty.call(action, map)) {\n let target;\n const mapObj = map[action];\n target = mapObj.target;\n const touch = mapObj.touch;\n if (!target) {\n target = this.context.getDefaultTargetContainer();\n }\n const bind = hasTouch() ? touch === true || touch === undefined : !touch;\n const keyName = `${action}-${mapObj.behaviours.join()}`;\n bind && !mappedActions[keyName] && this.bindActionWithBehaviour(initedPhysicalActions[action],\n target, mapObj.behaviours);\n mappedActions[keyName] = true;\n }\n }\n return this;\n }\n\n registerPhysicalBehaviouralMap (map) {\n Object.assign(this._actionBehaviourMap, map);\n return this;\n }\n\n /**\n * Binds a target element with an action.\n *\n * @param {Function} action Action method\n * @param {string} target Class name of element\n * @param {Array} behaviourList Array of behaviours\n * @return {FireBolt} Instance of firebolt\n */\n bindActionWithBehaviour (action, targets, behaviourList) {\n if (typeof (targets) === 'string') {\n targets = [targets];\n }\n targets.forEach((target) => {\n const mount = this.context.mount();\n const nodes = target.node instanceof Function ? target : selectElement(mount).selectAll(target);\n if (behaviourList.length && !nodes.empty()) {\n if (nodes instanceof Array) {\n nodes.forEach((node) => {\n action(selectElement(node), behaviourList);\n });\n } else {\n action(nodes, behaviourList);\n }\n }\n });\n return this;\n }\n\n getPropagationInf () {\n return this._propagationInf;\n }\n\n getAddSetFromCriteria (criteria, propagationInf = {}) {\n const context = this.context;\n const filteredDataModel = propagationInf.data ? propagationInf.data :\n context.getDataModelFromIdentifiers(criteria, 'all');\n const xFields = context.fields().x || [];\n const yFields = context.fields().y || [];\n const xMeasures = xFields.every(field => field.type() === FieldType.MEASURE);\n const yMeasures = yFields.every(field => field.type() === FieldType.MEASURE);\n return {\n model: filteredDataModel,\n uids: criteria === null ? null : (propagationInf.data ? filterPropagationModel(this.getFullData(),\n propagationInf.data[0], xMeasures && yMeasures).getData().uids : filteredDataModel[0].getData().uids)\n };\n }\n\n getSelectionSets (action) {\n const sourceId = this.context.id();\n const propagationInf = this._propagationInf || {};\n const propagationSource = propagationInf.sourceId;\n let applicableSelectionSets = [];\n if (propagationSource !== sourceId) {\n applicableSelectionSets = [this._volatileSelectionSet[action]];\n }\n\n if (propagationSource) {\n applicableSelectionSets.push(this.selectionSet()[action]);\n }\n return applicableSelectionSets;\n }\n\n getFullData () {\n return this.context.data();\n }\n\n resetted () {\n return this._resetted;\n }\n\n getEntryExitSet (behaviour) {\n return this._entryExitSet[behaviour];\n }\n}\n","import { getSetInfo, getMergedSet, getSourceFields } from '../../helper';\n\nexport default class GenericBehaviour {\n constructor (firebolt) {\n this.firebolt = firebolt;\n this._enabled = true;\n }\n\n dispatch (payload) {\n const criteria = payload.criteria;\n const firebolt = this.firebolt;\n const formalName = this.constructor.formalName();\n const selectionSets = firebolt.getSelectionSets(formalName);\n const {\n model: filteredDataModel,\n uids\n } = this.firebolt.getAddSetFromCriteria(criteria, this.firebolt.getPropagationInf());\n const entryExitSets = selectionSets.map((selectionSet) => {\n this.setSelectionSet(uids, selectionSet);\n return this.getEntryExitSet(selectionSet, filteredDataModel, payload);\n });\n\n return entryExitSets;\n }\n\n setSelectionSet () {\n return this;\n }\n\n getEntryExitSet (selectionSet, filteredDataModel, payload) {\n const {\n entrySet,\n exitSet,\n completeSet\n } = selectionSet.getSets();\n const propagationInf = this.firebolt.getPropagationInf();\n const dataModel = this.firebolt.getFullData();\n const setConfig = {\n isSourceFieldPresent: propagationInf.isSourceFieldPresent,\n dataModel,\n filteredDataModel,\n propagationData: propagationInf.data,\n selectionSet\n };\n\n return {\n entrySet: [getSetInfo('oldEntry', entrySet[0], setConfig),\n getSetInfo('newEntry', entrySet[1], setConfig)],\n exitSet: [getSetInfo('oldEntry', exitSet[0], setConfig),\n getSetInfo('newExit', exitSet[1], setConfig)],\n mergedEnter: getSetInfo('mergedEnter', getMergedSet(entrySet), setConfig),\n mergedExit: getSetInfo('mergedExit', getMergedSet(exitSet), setConfig),\n completeSet: getSetInfo('complete', completeSet, setConfig),\n isSourceFieldPresent: propagationInf.isSourceFieldPresent,\n fields: getSourceFields(propagationInf, payload.criteria),\n sourceSelectionSet: selectionSet._volatile === true\n };\n }\n\n static mutates () {\n return false;\n }\n\n enable () {\n this._enabled = true;\n }\n\n disable () {\n this._enabled = false;\n }\n\n isEnabled () {\n return this._enabled;\n }\n}\n\n","import GenericBehaviour from './generic';\nimport { getMergedSet } from '../../helper';\nimport * as SELECTION from '../../enums/selection';\n\nexport default class VolatileBehaviour extends GenericBehaviour {\n setSelectionSet (addSet, selectionSet) {\n if (addSet === null) {\n selectionSet.reset();\n } else if (addSet.length) {\n // new add set\n const existingAddSet = addSet.filter(d => selectionSet._set[d] === SELECTION.SELECTION_NEW_ENTRY\n || selectionSet._set[d] === SELECTION.SELECTION_OLD_ENTRY);\n selectionSet.updateExit();\n const { entrySet } = selectionSet.getSets();\n selectionSet.reset(getMergedSet(entrySet));\n selectionSet.add(addSet);\n selectionSet.update(existingAddSet);\n } else {\n selectionSet.remove(selectionSet.getCompleteSet());\n }\n }\n}\n","export const BRUSH = 'brush';\nexport const HIGHLIGHT = 'highlight';\nexport const TOOLTIP = 'tooltip';\nexport const FILTER = 'filter';\nexport const SELECT = 'select';\n","import VolatileBehaviour from './volatile';\nimport { HIGHLIGHT } from '../../enums/behaviours';\n\nexport default class HighlightBehaviour extends VolatileBehaviour {\n static formalName () {\n return HIGHLIGHT;\n }\n}\n","import VolatileBehaviour from './volatile';\nimport * as BEHAVIOURNAMES from '../../enums/behaviours';\n\n/**\n * This is the behaviour for brushing a region on the chart. It accepts a payload\n * which contains the x and y range of the data and other configuration. It will then\n * create a selection box from the range and select the points which fall within the range.\n */\nexport default class BrushBehaviour extends VolatileBehaviour {\n static formalName () {\n return BEHAVIOURNAMES.BRUSH;\n }\n}\n","import VolatileBehaviour from './volatile';\nimport { FILTER } from '../../enums/behaviours';\n\nexport default class FilterBehaviour extends VolatileBehaviour {\n static formalName () {\n return FILTER;\n }\n\n static mutates () {\n return true;\n }\n}\n","import GenericBehaviour from './generic';\nimport { getMergedSet } from '../../helper';\nimport * as SELECTION from '../../enums/selection';\n\nexport default class PersistentBehaviour extends GenericBehaviour {\n setSelectionSet (addSet, selectionSet) {\n if (addSet === null) {\n selectionSet.reset();\n } else if (addSet.length) {\n const propagationInf = this.firebolt.getPropagationInf();\n // new add set\n const existingAddSet = addSet.filter(d => selectionSet._set[d] === SELECTION.SELECTION_NEW_ENTRY\n || selectionSet._set[d] === SELECTION.SELECTION_OLD_ENTRY);\n if (propagationInf.propagate === false) {\n selectionSet.updateExit();\n const { entrySet } = selectionSet.getSets();\n selectionSet.reset(getMergedSet(entrySet));\n selectionSet.add(addSet);\n selectionSet.update(existingAddSet);\n } else {\n // existing add set\n if (existingAddSet.length) {\n selectionSet.updateExit();\n selectionSet.remove(existingAddSet);\n } else {\n selectionSet.updateEntry();\n selectionSet.add(addSet);\n }\n const { exitSet } = selectionSet.getSets();\n const mergedExitSet = getMergedSet(exitSet);\n const completeSetCount = selectionSet.getCompleteSet().length;\n if (mergedExitSet.length === completeSetCount) {\n selectionSet.reset();\n }\n }\n } else {\n selectionSet.remove(selectionSet.getCompleteSet());\n }\n\n return this;\n }\n}\n","import PersistentBehaviour from './persistent';\nimport { SELECT } from '../../enums/behaviours';\n\nexport default class SelectBehaviour extends PersistentBehaviour {\n static formalName () {\n return SELECT;\n }\n}\n\n","import { DimensionSubtype, FieldType } from 'muze-utils';\n/**\n * Gets the drag action configuration\n * @param {VisualUnit} instance instance of visual unit\n * @param {Object} config x y positions\n * @return {Object} Payload of behaviour\n*/\n/* istanbul ignore next */ const getDragActionConfig = (sourceInfo, config, fieldsConfig) => {\n if (!(sourceInfo.axes.x || sourceInfo.axes.y)) {\n return {\n criteria: null\n };\n }\n\n const axes = sourceInfo.axes;\n const xAxis = axes.x[0];\n const yAxis = axes.y[0];\n const axisFields = sourceInfo.fields;\n const xField = axisFields.x[0].getMembers()[0];\n const yField = axisFields.y[0].getMembers()[0];\n const xFieldType = fieldsConfig[xField].def.subtype ? fieldsConfig[xField].def.subtype :\n fieldsConfig[xField].def.type;\n const yFieldType = fieldsConfig[yField].def.subtype ? fieldsConfig[yField].def.subtype :\n fieldsConfig[yField].def.type;\n const dimensions = {};\n const stPos = config.startPos;\n const endPos = config.endPos;\n\n if (stPos.x === endPos.x && stPos.y === endPos.y) {\n return {\n criteria: null\n };\n }\n\n const dragDim = xFieldType === FieldType.MEASURE ? (yFieldType === FieldType.MEASURE ? ['x', 'y'] : ['y']) : ['x'];\n const criteria = {};\n const isXDimension = xFieldType === DimensionSubtype.CATEGORICAL;\n const isYDimension = yFieldType === DimensionSubtype.CATEGORICAL;\n const xRange = xAxis.constructor.type() === 'band' ? xAxis.scale().invertExtent(stPos.x, endPos.x) :\n xAxis.invert(stPos.x, endPos.x);\n const yRange = yAxis.constructor.type() === 'band' ? yAxis.scale().invertExtent(stPos.y, endPos.y) :\n yAxis.invert(stPos.y, endPos.y);\n const selectedDomains = {\n x: stPos.x === endPos.x ? [] : (isXDimension ? xRange : xRange.sort((a, b) => a - b)),\n y: stPos.y === endPos.y ? [] : (isYDimension ? yRange : yRange.sort((a, b) => a - b))\n };\n const rangeObj = {};\n\n if (dragDim.length === 2) {\n rangeObj[xField] = selectedDomains.x;\n rangeObj[yField] = selectedDomains.y;\n if (xField === yField) {\n const xdom = selectedDomains.x;\n const ydom = selectedDomains.y;\n const min = xdom[0] > ydom[0] ? ydom : xdom;\n const max = min === ydom ? xdom : ydom;\n if (min[1] < max[0]) {\n rangeObj[xField] = [];\n } else {\n rangeObj[xField] = [max[0], min[1] < max[1] ? min[1] : max[1]];\n }\n dimensions.x = [stPos.x, endPos.x];\n dimensions.y = [stPos.y, endPos.y];\n }\n } else {\n criteria[dragDim[0]] = selectedDomains[dragDim[0]] || [];\n\n if (dragDim[0] === 'x') {\n rangeObj[xField] = criteria.x;\n if (xFieldType === DimensionSubtype.CATEGORICAL) {\n dimensions.x = (config.snap && stPos.x !== endPos.x) ? xAxis.getNearestRange(stPos.x, endPos.x) :\n [stPos.x, endPos.x];\n }\n } else {\n rangeObj[yField] = criteria.y;\n if (yFieldType === DimensionSubtype.CATEGORICAL) {\n dimensions.y = (config.snap && stPos.y !== endPos.y) ? yAxis.getNearestRange(stPos.y, endPos.y) :\n [stPos.y, endPos.y];\n }\n }\n }\n\n return {\n criteria: rangeObj,\n dimensions\n };\n};\n\nexport default getDragActionConfig;\n","import {\n getEvent,\n getD3Drag\n } from 'muze-utils';\n\nimport getDragActionConfig from './drag-action-config';\n\n/**\n * Adds dragging action to the target element.\n * @param {VisualUnit} instance Instance of visual unit.\n * @param {SVGElement} targetEl Element on which brushing action is needed.\n * @param {Array} behaviours Array of behaviours\n */\nexport const attachDragEvent = (targetEl, behaviours, firebolt, touch) => {\n let startPos = {};\n let endPos = {};\n let drawingInf;\n\n const d3Drag = getD3Drag();\n let touchStart;\n targetEl.call(d3Drag().on('start', () => {\n const event = getEvent();\n startPos = {\n x: event.x,\n y: event.y\n };\n drawingInf = firebolt.context.getDrawingContext();\n touchStart = new Date().getTime();\n }).on('drag', () => {\n const event = getEvent();\n endPos = {\n x: event.x,\n y: event.y\n };\n if (touch && Math.abs(startPos.x - endPos.x) <= 5) {\n return;\n }\n endPos.x = Math.max(0, Math.min(endPos.x, drawingInf.width));\n endPos.y = Math.max(0, Math.min(endPos.y, drawingInf.height));\n\n const payload = getDragActionConfig(firebolt.context.getSourceInfo(), {\n startPos,\n endPos\n }, firebolt.context.data().getFieldsConfig());\n behaviours.forEach(beh => firebolt.dispatchBehaviour(beh, payload));\n }).on('end', () => {\n const event = getEvent();\n endPos = {\n x: event.x,\n y: event.y\n };\n const duration = new Date().getTime() - touchStart;\n\n if (touch && duration > 100 && Math.abs(startPos.x - endPos.x) <= 5) {\n return;\n }\n endPos.x = Math.max(0, Math.min(endPos.x, drawingInf.width));\n endPos.y = Math.max(0, Math.min(endPos.y, drawingInf.height));\n\n const payload = getDragActionConfig(firebolt.context.getSourceInfo(), {\n startPos,\n endPos,\n snap: true\n }, firebolt.context.data().getFieldsConfig());\n payload.dragEnd = true;\n behaviours.forEach(beh => firebolt.dispatchBehaviour(beh, payload));\n }));\n};\n\n","import { getClientPoint, getEvent } from 'muze-utils';\nimport { CONSOLIDATED, FRAGMENTED } from '../../enums/constants';\n\n/**\n * Adds mouse interactions to target element.\n * @param {Firebolt} instance instance of firebolt.\n * @param {SVGElement} targetEl Element on which the event listeners will be attached.\n * @param {Array} behaviours Array of behaviours\n */\n/* istanbul ignore next */ const hover = firebolt => (targetEl, behaviours) => {\n const dispatchBehaviour = function (args) {\n const event = getEvent();\n const context = firebolt.context;\n const tooltipConf = context.config().interaction.tooltip;\n const mode = tooltipConf.mode;\n const pos = getClientPoint(context.getDrawingContext().svgContainer, event);\n const nearestPoint = context.getNearestPoint(pos.x, pos.y, {\n getAllPoints: mode === CONSOLIDATED || mode === FRAGMENTED,\n data: args,\n event\n });\n const payload = {\n criteria: nearestPoint ? nearestPoint.id : null,\n showInPosition: nearestPoint.showInPosition,\n target: nearestPoint.target,\n position: pos,\n mode\n };\n\n behaviours.forEach(beh => firebolt.dispatchBehaviour(beh, payload));\n event.stopPropagation();\n };\n\n targetEl.on('mouseover', dispatchBehaviour)\n .on('mousemove', dispatchBehaviour)\n .on('mouseout', () => {\n behaviours.forEach(beh => firebolt.dispatchBehaviour(beh, {\n criteria: null\n }));\n });\n};\n\nexport default hover;\n","export const CLASSPREFIX = 'muze';\nexport const CONSOLIDATED = 'consolidated';\nexport const FRAGMENTED = 'fragmented';\n\n","import { getClientPoint } from 'muze-utils';\n\nexport const generatePayloadFromEvent = function (args, event, firebolt) {\n const context = firebolt.context;\n const pos = getClientPoint(context.getDrawingContext().svgContainer, event.touches ? event.touches[0] : event);\n const nearestPoint = context.getNearestPoint(pos.x, pos.y, {\n data: args,\n event\n });\n return {\n criteria: nearestPoint ? nearestPoint.id : null,\n showInPosition: nearestPoint.showInPosition,\n target: nearestPoint.target,\n position: pos\n };\n};\n","import { getEvent } from 'muze-utils';\nimport { generatePayloadFromEvent } from './helpers';\n\n/**\n * Adds mouse interactions to target element.\n * @param {VisualUnit} instance instance of visual unit.\n * @param {SVGElement} targetEl Element on which the event listeners will be attached.\n * @param {Array} behaviours Array of behaviours\n */\n/* istanbul ignore next */ const click = firebolt => (targetEl, behaviours) => {\n const dispatchBehaviour = function (args) {\n const event = getEvent();\n const payload = generatePayloadFromEvent(args, event, firebolt);\n behaviours.forEach(beh => firebolt.dispatchBehaviour(beh, payload));\n event.stopPropagation();\n };\n\n targetEl.on('click', dispatchBehaviour);\n};\nexport default click;\n","import drag from './drag';\nimport hover from './hover';\nimport { longtouch } from './longtouch';\nimport { touchdrag } from './touch-drag';\nimport * as ACTIONNAMES from '../../enums/actions';\nimport click from './click';\n\nexport const physicalActions = {\n [ACTIONNAMES.DRAG]: drag,\n [ACTIONNAMES.HOVER]: hover,\n [ACTIONNAMES.CLICK]: click,\n [ACTIONNAMES.LONGTOUCH]: longtouch,\n [ACTIONNAMES.TOUCHDRAG]: touchdrag\n};\n\n","import { attachDragEvent } from './helpers/drag-event';\n\n/**\n * Adds dragging action to the target element.\n * @param {VisualUnit} instance Instance of visual unit.\n * @param {SVGElement} targetEl Element on which brushing action is needed.\n * @param {Array} behaviours Array of behaviours\n */\n/* istanbul ignore next */ const drag = firebolt => (targetEl, behaviours) => {\n attachDragEvent(targetEl, behaviours, firebolt);\n};\n\nexport default drag;\n","/* global setTimeout */\nimport { getEvent } from 'muze-utils';\nimport { generatePayloadFromEvent } from './helpers';\n\n/**\n * Adds mouse interactions to target element.\n * @param {VisualUnit} instance instance of visual unit.\n * @param {SVGElement} targetEl Element on which the event listeners will be attached.\n * @param {Array} behaviours Array of behaviours\n */\nexport const longtouch = firebolt => (targetEl, behaviours) => {\n let event;\n let touchEnd;\n const dispatchBehaviour = function (args) {\n const payload = generatePayloadFromEvent(args, event, firebolt);\n behaviours.forEach(beh => firebolt.dispatchBehaviour(beh, payload));\n event.stopPropagation();\n };\n\n touchEnd = false;\n event = getEvent();\n targetEl.on('touchstart', (args) => {\n event = getEvent();\n touchEnd = false;\n setTimeout(() => {\n if (!touchEnd) {\n dispatchBehaviour(args);\n } else {\n behaviours.forEach(beh => firebolt.dispatchBehaviour(beh, {\n criteria: null\n }));\n }\n }, 100);\n }).on('touchend', () => {\n touchEnd = true;\n });\n};\n","import { attachDragEvent } from './helpers/drag-event';\n\n/**\n * Adds dragging action to the target element.\n * @param {VisualUnit} instance Instance of visual unit.\n * @param {SVGElement} targetEl Element on which brushing action is needed.\n * @param {Array} behaviours Array of behaviours\n */\nexport const touchdrag = firebolt => (targetEl, behaviours) => {\n attachDragEvent(targetEl, behaviours, firebolt, true);\n};\n\n","import { mergeRecursive, getUniqueId } from 'muze-utils';\n\nexport default class GenericSideEffect {\n constructor (firebolt) {\n this.firebolt = firebolt;\n this._enabled = true;\n this._strategy = 'default';\n this._config = {};\n this._id = getUniqueId();\n this._strategies = {};\n this.config(this.constructor.defaultConfig());\n }\n\n static defaultConfig () {\n return {};\n }\n\n static target () {\n return 'all';\n }\n\n static mutates () {\n return false;\n }\n\n config (...params) {\n if (params.length) {\n this._config = mergeRecursive(this._config, params[0]);\n return this;\n }\n return this._config;\n }\n\n disable () {\n this._enabled = false;\n return this;\n }\n\n enable () {\n this._enabled = true;\n return this;\n }\n\n isEnabled () {\n return this._enabled;\n }\n\n apply () {\n return this;\n }\n\n addStrategy (name, fn) {\n this._strategies[name] = fn;\n return this;\n }\n}\n","import GenericSideEffect from './generic';\n\nexport default class SurrogateSideEffect extends GenericSideEffect {\n applyInteractionStyle (set, config = {}, interactionType, apply) {\n const layers = this.firebolt.context.layers();\n layers.forEach(layer => layer.config().interactive !== false &&\n layer.applyInteractionStyle(interactionType, set.uids, apply));\n }\n}\n","import { makeElement } from 'muze-utils';\n\nimport GenericSideEffect from './generic';\n\nexport default class SpawnableSideEffect extends GenericSideEffect {\n createElement (container, elemType, data, className, callbacks) {\n return makeElement(container, elemType, data, className, callbacks);\n }\n\n drawingContext (...drawingContext) {\n if (drawingContext.length) {\n this._drawingContext = drawingContext[0];\n return this;\n }\n return this._drawingContext();\n }\n\n show () {\n return this;\n }\n\n hide () {\n return this;\n }\n}\n","import { selectElement } from 'muze-utils';\n\nexport const getBoxDimensionsFromPayload = (payload, axes, axisFields) => {\n let x1;\n let x2;\n let y1;\n let y2;\n let xRange;\n let yRange;\n let direction;\n const criteria = payload.criteria;\n const dimensions = payload.dimensions || {};\n const xDim = dimensions.x;\n const yDim = dimensions.y;\n\n if (criteria === null) {\n return null;\n }\n\n const xAxis = axes.x[0];\n const yAxis = axes.y[0];\n const xLinear = xAxis.constructor.type() === 'linear';\n const yLinear = yAxis.constructor.type() === 'linear';\n const xField = `${axisFields.x[0]}`;\n const yField = `${axisFields.y[0]}`;\n const xCriteria = criteria[xField];\n const yCriteria = criteria[yField];\n\n if (xCriteria && xCriteria[0] instanceof Array) {\n xRange = xCriteria[0];\n yRange = xCriteria[1];\n } else {\n xRange = xCriteria || [];\n yRange = yCriteria || [];\n }\n direction = xCriteria && yCriteria ? 'both' : (xCriteria ? 'vertical' : 'horizontal');\n if (xRange && xRange.length) {\n if ((yAxis.constructor.type() === 'band' && xLinear)) {\n x1 = x2 = undefined;\n direction = 'horizontal';\n } else {\n const domain = xAxis.domain();\n const bandScale = xAxis.constructor.type() === 'band';\n let x1Val;\n let x2Val;\n if (bandScale) {\n let x1DomainIndex = domain.indexOf(xRange[0]);\n let x2DomainIndex = domain.indexOf(xRange[xRange.length - 1]);\n [x1DomainIndex, x2DomainIndex] = [x1DomainIndex, x2DomainIndex].sort((a, b) => a - b);\n x1Val = domain[x1DomainIndex];\n x2Val = domain[x2DomainIndex];\n } else {\n x1Val = xRange[0];\n x2Val = xRange[xRange.length - 1];\n }\n x1 = xAxis.getScaleValue(x1Val);\n x2 = xAxis.getScaleValue(x2Val);\n x2 += bandScale ? xAxis.getUnitWidth() : 0;\n }\n } else {\n x1 = x2 = undefined;\n }\n if (yRange && yRange.length) {\n if ((xAxis.constructor.type() === 'band' && yLinear)) {\n y1 = y2 = undefined;\n direction = 'vertical';\n } else {\n const domain = yAxis.domain();\n const bandScale = yAxis.constructor.type() === 'band';\n let y1Val;\n let y2Val;\n if (bandScale) {\n let y1DomainIndex = domain.indexOf(yRange[0]);\n let y2DomainIndex = domain.indexOf(yRange[yRange.length - 1]);\n [y1DomainIndex, y2DomainIndex] = [y1DomainIndex, y2DomainIndex].sort(((a, b) => b - a));\n y1Val = domain[y1DomainIndex];\n y2Val = domain[y2DomainIndex];\n } else {\n y1Val = yRange[0];\n y2Val = yRange[yRange.length - 1];\n }\n y1 = yAxis.getScaleValue(y1Val);\n y2 = yAxis.getScaleValue(y2Val);\n y2 += yAxis.constructor.type() === 'band' ? yAxis.getUnitWidth() : 0;\n }\n } else {\n y1 = y2 = undefined;\n }\n\n if ((yLinear && xLinear) || !payload.dragEnd) {\n if (xDim) {\n [x1, x2] = xDim;\n }\n if (yDim) {\n [y1, y2] = yDim;\n }\n }\n\n return {\n dimension: {\n x1,\n x2,\n y1,\n y2\n },\n direction\n };\n};\n\nexport const changeVisibility = (context, sideEffectGroup, visible) => {\n const config = context.config();\n const className = config.defClassName;\n const classPrefix = config.classPrefix;\n selectElement(sideEffectGroup).selectAll(`.${classPrefix}-${className}`)\n .style('display', visible ? 'block' : 'none');\n};\n","import {\n getQualifiedClassName,\n selectElement,\n makeElement,\n isValidValue\n} from 'muze-utils';\nimport { CLASSPREFIX } from '../../enums/constants';\nimport './styles.scss';\nimport SpawnableSideEffect from '../spawnable';\nimport { selectionBoxDrag } from '../../actions/physical/selection-box-drag';\nimport { getBoxDimensionsFromPayload, changeVisibility } from './helper';\n\n/**\n * This class is used to create a selection box which is used by visual unit for brushing and\n * selection in the canvas.\n * @class SelectionBox\n */\nclass SelectionBox extends SpawnableSideEffect {\n /**\n * It returns the default configuration needed by selectionbox.\n * @return {Object} Default configuration of the selection box.\n */\n static defaultConfig () {\n return {\n defClassName: 'selection-box-group',\n className: '',\n classPrefix: CLASSPREFIX,\n box: {\n defClassName: 'selection-box',\n className: ''\n },\n transition: {\n duration: 200\n }\n };\n }\n\n static formalName () {\n return 'selectionBox';\n }\n\n /**\n * Draws the selectionbox with the specified dimensions.\n * @param {Object} dimension Dimensions of the selection box.\n * @param {number} dimension.x1 Starting x position\n * @param {number} dimension.x2 Ending x position\n * @param {number} dimension.y1 Starting y position\n * @param {number} dimension.y2 Ending y position\n * @param {Object} conf Configuration needed to draw the selection box\n * @param {number} unitWidth Width of the visual unit.\n * @param {number} unitHeight Height of the visual unit.\n */\n apply (selectionSet, payload) {\n let x;\n let y;\n let width;\n let height;\n const config = this._config;\n const boxConf = config.box;\n const firebolt = this.firebolt;\n const drawingInf = this.drawingContext();\n const mountPoint = drawingInf.sideEffectGroup;\n const unitWidth = drawingInf.width;\n const unitHeight = drawingInf.height;\n const classPrefix = config.classPrefix;\n const selectionGroupClassName = config.defClassName;\n\n if (payload.criteria === null) {\n this.hide(drawingInf);\n return this;\n }\n\n const sourceInf = firebolt.context.getSourceInfo();\n const { dimension, direction } = getBoxDimensionsFromPayload(payload, sourceInf.axes,\n sourceInf.fields);\n const transition = payload.dragEnd && config.transition;\n\n if (direction === 'both' || direction === 'vertical') {\n x = Math.min(dimension.x1, dimension.x2);\n width = Math.abs(dimension.x2 - dimension.x1);\n } else {\n x = 0;\n width = unitWidth;\n }\n if (direction === 'both' || direction === 'horizontal') {\n y = Math.min(dimension.y1, dimension.y2);\n height = Math.abs(dimension.y2 - dimension.y1);\n } else {\n height = unitHeight;\n y = 0;\n }\n this.show(drawingInf);\n // Create the data array for drawing the rectangle\n const points = [\n {\n x,\n y,\n width,\n height\n }\n ];\n // Create the container group for selection box.\n const selectionGroup = makeElement(selectElement(mountPoint), 'g', [1],\n `.${classPrefix}-${selectionGroupClassName}`);\n const sideEffect = this;\n const selection = selectionGroup.selectAll('rect').data(points);\n const selectionBox = selection.enter().append('rect')\n .each(function () {\n selectionBoxDrag(firebolt)(selectElement(this), ['brush'], sideEffect);\n })\n .merge(selection)\n .each(function (attrs) {\n let element = selectElement(this);\n transition && (element = element.transition().duration(transition.duration));\n for (const key in attrs) {\n if ({}.hasOwnProperty.call(attrs, key)) {\n isValidValue(attrs[key]) && element.attr(key, attrs[key]);\n }\n }\n });\n // Get the qualified class name for selection box rectangle\n const boxClassName = getQualifiedClassName(boxConf.defClassName, this._id, classPrefix);\n selectionBox.classed(boxClassName.join(' '), true);\n selectionBox.classed(boxConf.className, true);\n\n return this;\n }\n\n hide (drawingInf) {\n changeVisibility(this, drawingInf.sideEffectGroup, false);\n }\n\n show (drawingInf) {\n changeVisibility(this, drawingInf.sideEffectGroup, true);\n }\n}\n\nexport default SelectionBox;\n\n","import {\n getEvent,\n getD3Drag\n } from 'muze-utils';\n\nimport getDragActionConfig from './helpers/drag-action-config';\n\nexport const selectionBoxDrag = firebolt => (targetEl, behaviours) => {\n let subject;\n let drawingInf;\n const context = firebolt.context;\n const onDrag = (payload) => {\n behaviours.forEach(action => firebolt.dispatchBehaviour(action, payload));\n };\n const d3Drag = getD3Drag();\n\n targetEl.call(d3Drag().on('start', () => {\n const event = getEvent();\n drawingInf = context.getDrawingContext();\n subject = event.subject;\n }).on('drag', () => {\n const event = getEvent();\n subject.x += event.dx;\n subject.y += event.dy;\n const width = drawingInf.width;\n const height = drawingInf.height;\n const x = Math.min(width - subject.width, Math.max(subject.x, 0));\n const y = Math.min(height - subject.height, Math.max(subject.y, 0));\n const y2 = y + subject.height;\n const x2 = x + subject.width;\n\n if (x >= 0 && x2 <= width && y >= 0 && y2 <= height) {\n const payload = getDragActionConfig(context.getSourceInfo(), {\n startPos: {\n x,\n y\n },\n endPos: {\n x: x2,\n y: y2\n }\n }, context.data().getFieldsConfig());\n onDrag(payload);\n }\n }).on('end', () => {\n const width = drawingInf.width;\n const height = drawingInf.height;\n const x = Math.min(width - subject.width, Math.max(subject.x, 0));\n const y = Math.min(height - subject.height, Math.max(subject.y, 0));\n const y2 = y + subject.height;\n const x2 = x + subject.width;\n\n if (x >= 0 && x2 <= width && y >= 0 && y2 <= height) {\n const payload = getDragActionConfig(context.getSourceInfo(), {\n startPos: {\n x,\n y\n },\n endPos: {\n x: x2,\n y: y2\n },\n snap: true\n }, context.data().getFieldsConfig());\n payload.dragEnd = true;\n onDrag(payload);\n }\n }));\n};\n","export const CLASSPREFIX = 'muze';\nexport const ARROW_RIGHT = 'right';\nexport const ARROW_TOP = 'top';\nexport const ARROW_BOTTOM = 'bottom';\nexport const ARROW_LEFT = 'left';\nexport const TOOLTIP_LEFT = 'left';\nexport const TOOLTIP_RIGHT = 'right';\nexport const TOOLTIP_BOTTOM = 'bottom';\nexport const TOOLTIP_TOP = 'top';\nexport const INITIAL_STYLE = {\n position: 'absolute',\n width: 0,\n height: 0\n};\n","import { CLASSPREFIX } from './constants';\n\nexport const defaultConfig = {\n classPrefix: CLASSPREFIX,\n defClassName: 'tooltip-box',\n connectorClassName: 'tooltip-connectors',\n className: '',\n row: {\n margin: 0\n },\n content: {\n spacing: 5,\n iconContainerSize: 10,\n iconScale: 1,\n iconShape: 'circle',\n iconColor: '#ff0000',\n rowMargin: '0px',\n margin: 10,\n separator: ':',\n className: 'tooltip-content-container',\n parentClassName: 'tooltip-content-parent-container'\n },\n arrow: {\n size: 10,\n disabled: false,\n defClassName: 'tooltip-arrow',\n className: '',\n color: 'rgba(195,195,195,0.85)'\n }\n};\n","import { getQualifiedClassName } from 'muze-utils';\nimport { TOOLTIP_LEFT, TOOLTIP_RIGHT, ARROW_RIGHT, ARROW_LEFT, TOOLTIP_BOTTOM } from './constants';\n\nexport const getArrowPos = (orient, dim, measurement, config) => {\n let arrowPos;\n const { x, y, boxHeight, boxWidth } = measurement;\n const arrowDisabled = config.arrow.disabled;\n const arrowWidth = arrowDisabled ? 0 : config.arrow.size;\n\n if (orient === ARROW_LEFT || orient === ARROW_RIGHT) {\n let start = 0;\n let diff = boxHeight / 2;\n const plotBottom = dim.y + dim.height;\n const boxBottom = y + boxHeight;\n\n if (dim.y > y) {\n start = dim.y - y;\n diff = (plotBottom >= boxBottom ? (boxBottom - dim.y) : dim.height) / 2;\n } else if (boxBottom > plotBottom) {\n diff = Math.abs(y - (dim.y + dim.height)) / 2;\n }\n arrowPos = start + diff - arrowWidth / 2;\n } else {\n let start = 0;\n let diff = boxWidth / 2;\n const plotRight = dim.x + dim.width;\n const boxRight = x + boxWidth;\n\n if (dim.x > x) {\n start = dim.x - x;\n diff = (plotRight >= boxRight ? (boxRight - dim.x) : dim.width) / 2;\n } else if (boxRight > plotRight) {\n diff = Math.abs(x - (dim.x + dim.width)) / 2;\n }\n arrowPos = start + diff - arrowWidth / 2;\n }\n return arrowPos;\n};\n\n/**\n * Places the arrow in the specified arrow position. It also applies appropriate arrow\n * class name to the arrow element.\n * @param {string} position Left, bottom or right position of the arrow;\n * @param {number} arrowPos position of arrow in pixels\n * @return {Tooltip} Instance of tooltip.\n */\nexport const placeArrow = (context, position, arrowPos) => {\n const tooltipArrow = context._tooltipArrow;\n const tooltipBackground = context._tooltipBackground;\n const config = context._config;\n const classPrefix = config.classPrefix;\n const arrowConf = config.arrow;\n const className = getQualifiedClassName(arrowConf.defClassName, context._id, config.classPrefix);\n\n tooltipArrow.style('display', 'block');\n tooltipArrow.attr('class', `${className.join(' ')}`);\n if (position === TOOLTIP_LEFT || position === TOOLTIP_RIGHT) {\n tooltipArrow.style('top', `${arrowPos}px`);\n tooltipArrow.style('left', '');\n tooltipBackground.style('top', `${arrowPos}px`);\n tooltipBackground.style('left', '');\n } else {\n position === TOOLTIP_BOTTOM ? tooltipArrow.style('top', '100%') : tooltipArrow.style('top',\n `-${arrowConf.size}px`);\n tooltipArrow.style('left', `${arrowPos}px`);\n position === TOOLTIP_BOTTOM ? tooltipBackground.style('top', '100%') : tooltipBackground.style('top',\n `-${arrowConf.size + 3}px`);\n tooltipBackground.style('left', `${arrowPos}px`);\n }\n tooltipArrow.classed(`${classPrefix}-tooltip-arrow`, true);\n tooltipArrow.classed(`${classPrefix}-tooltip-arrow-${context._arrowOrientation}`, false);\n tooltipArrow.classed(`${classPrefix}-tooltip-arrow-${position}`, true);\n tooltipBackground.classed(`${classPrefix}-tooltip-background-arrow`, true);\n tooltipBackground.classed(`${classPrefix}-tooltip-background-arrow-${context._arrowOrientation}`, false);\n tooltipBackground.classed(`${classPrefix}-tooltip-background-arrow-${position}`, true);\n return this;\n};\n\nexport const reorderContainers = (parentContainer, className) => {\n parentContainer.selectAll(className).sort((a, b) => a - b);\n};\n","import {\n getClosestIndexOf,\n DateTimeFormatter,\n DimensionSubtype,\n FieldType\n} from 'muze-utils';\n\nconst timeFormats = {\n millisecond: '%A, %b %e, %H:%M:%S.%L',\n second: '%A, %b %e, %H:%M:%S',\n minute: '%A, %b %e, %H:%M',\n hour: '%A, %b %e, %H:%M',\n day: '%A, %b %e, %Y',\n month: '%B %Y',\n year: '%Y'\n};\nconst timeDurations = [\n ['millisecond', 'second', 'minute', 'hour', 'day', 'month', 'year'],\n [1, 1000, 60000, 3600000, 86400000, 2592000000, 31536000000]\n];\nconst getNearestInterval = (interval) => {\n const index = getClosestIndexOf(timeDurations[1], interval);\n return timeDurations[0][index];\n};\nconst defaultTooltipFormatters = (type, formatter) => {\n const formatters = {\n [DimensionSubtype.TEMPORAL]: (value, interval) => {\n const nearestInterval = getNearestInterval(interval);\n return DateTimeFormatter.formatAs(value, timeFormats[nearestInterval]);\n },\n [FieldType.MEASURE]: value => formatter(value ? value.toFixed(2) : value),\n [FieldType.DIMENSION]: value => value\n };\n return formatters[type];\n};\n\nconst getTabularData = (data, schema, fieldspace, timeDiffs) => {\n const rows = [];\n rows.push(schema.map(d => d.name));\n data.forEach((d) => {\n const row = [];\n schema.forEach((fieldObj, i) => {\n const interval = fieldObj.subtype === DimensionSubtype.TEMPORAL ? timeDiffs[fieldObj.name] : 0;\n const numberFormat = fieldObj.type === FieldType.MEASURE && fieldspace.fields[i]._ref.numberFormat();\n const formatterFn = defaultTooltipFormatters(fieldObj.subtype || fieldObj.type, numberFormat);\n const value = formatterFn(d[i], interval);\n row.push(value);\n });\n rows.push(row);\n });\n return rows;\n};\n\nexport const buildTooltipData = (dataModel, config = {}, context) => {\n let fieldValues = [];\n const dataObj = dataModel.getData();\n const data = dataObj.data;\n const schema = dataObj.schema;\n const formatters = config.formatters;\n const separator = config.separator;\n const fieldsConfig = dataModel.getFieldsConfig();\n const fieldspace = dataModel.getFieldspace();\n const fieldsObj = fieldspace.fieldsObj();\n const dimensionMeasureMap = context.dimensionMeasureMap;\n const axes = context.axes;\n const detailFields = context.detailFields || [];\n const dimensions = schema.filter(d => d.type === FieldType.DIMENSION);\n const measures = schema.filter(d => d.type === FieldType.MEASURE);\n // const containsRetinalField = schema.find(d => d.name in dimensionMeasureMap);\n const containsDetailField = schema.find(d => detailFields.indexOf(d.name) !== -1);\n const dataLen = data.length;\n const getRowContent = (field, type) => {\n let value;\n let formattedValue;\n let measureIndex;\n const values = [];\n const index = fieldsConfig[field].index;\n const interval = fieldsConfig[field].def.subtype === DimensionSubtype.TEMPORAL ?\n fieldsObj[field].getMinDiff() : 0;\n const formatterFn = (formatters && formatters[field]) || defaultTooltipFormatters(type, val => val);\n\n if (value !== null) {\n let uniqueVals = type === FieldType.MEASURE ? data.map(d => d[index]) :\n [...new Set(data.map(d => d[index]))];\n uniqueVals = uniqueVals.filter(d => d !== '');\n const colorAxis = axes.color[0];\n const shapeAxis = axes.shape[0];\n const sizeAxis = axes.size[0];\n const isRetinalField = (colorAxis || shapeAxis || sizeAxis) && dataLen > 1 &&\n type !== FieldType.MEASURE;\n\n uniqueVals.forEach((val, i) => {\n let key;\n const associatedMeasures = dimensionMeasureMap[field];\n\n if (associatedMeasures && associatedMeasures.length && dataLen > 1) {\n key = val;\n let icon = {\n value: ''\n };\n\n if (isRetinalField) {\n icon = {\n type: 'icon',\n color: colorAxis.getColor(val),\n shape: shapeAxis.getShape(val),\n size: sizeAxis.getSize(val) * config.iconScale\n };\n }\n if (associatedMeasures.length > 1) {\n values.push([icon, `${key}`]);\n associatedMeasures.forEach((measure) => {\n measureIndex = fieldsConfig[measure].index;\n value = data[i][measureIndex];\n formattedValue = defaultTooltipFormatters('measure',\n fieldspace.fields[measureIndex]._ref.numberFormat())(value, interval);\n values.push([{\n value: `${measure}${separator}`,\n style: {\n 'margin-left': `${config.margin}px}`\n },\n className: `${config.classPrefix}-tooltip-key`\n }, {\n value: `${formattedValue}`,\n className: `${config.classPrefix}-tooltip-value`\n }]);\n });\n } else {\n measureIndex = fieldsConfig[associatedMeasures[0]].index;\n value = data[i][measureIndex];\n formattedValue = defaultTooltipFormatters('measure',\n fieldspace.fields[measureIndex]._ref.numberFormat())(value, interval);\n values.push([icon, {\n value: `${key}${separator}`,\n className: `${config.classPrefix}-tooltip-key`\n }, {\n value: `${formattedValue}`,\n className: `${config.classPrefix}-tooltip-value`\n }]);\n }\n } else {\n key = field;\n value = val;\n formattedValue = formatterFn(value, interval);\n values.push([{\n value: `${key}${separator}`,\n className: `${config.classPrefix}-tooltip-key`\n }, {\n value: `${formattedValue}`,\n className: `${config.classPrefix}-tooltip-value`\n }]);\n }\n });\n }\n return values;\n };\n let displayFormat = 'keyValue';\n\n if (dataLen > 1 && containsDetailField) {\n fieldValues = getTabularData(data, schema, fieldspace, context.timeDiffs);\n displayFormat = 'table';\n } else {\n dimensions.forEach((item) => {\n const type = item.subtype ? item.subtype : item.type;\n fieldValues = [...fieldValues, ...getRowContent(item.name, type)];\n });\n\n const allMeasures = [...new Set(...Object.values(dimensionMeasureMap))];\n const filteredMeasures = dataLen > 1 ? measures.filter(d => allMeasures.indexOf(d.name) === -1)\n : measures;\n\n filteredMeasures.forEach((item) => {\n const type = item.subtype ? item.subtype : item.type;\n fieldValues = [...fieldValues, ...getRowContent(item.name, type)];\n });\n }\n\n return {\n content: fieldValues,\n displayFormat\n };\n};\n\n/**\n * This contains the strategy methods for showing tooltip in the chart.\n * @param {VisualUnit} context Attached instance.\n */\nexport const strategy = {\n keyValue: (data, config, context) => {\n const values = buildTooltipData(data, config, context);\n return values;\n }\n};\n\nexport const DEFAULT_STRATEGY = 'keyValue';\n","import {\n selectElement,\n mergeRecursive,\n makeElement,\n setAttrs,\n setStyles,\n getSymbol,\n isSimpleObject\n} from 'muze-utils';\nimport { DEFAULT_STRATEGY, strategy } from './strategy';\nimport { defaultConfig } from './default-config';\n\n/**\n * This class is used to manage the content of tooltip.\n */\nexport default class Content {\n /**\n * Creates an instance of content.\n */\n constructor () {\n this._model = null;\n this._strategy = DEFAULT_STRATEGY;\n this._formatter = null;\n this._config = this.constructor.defaultConfig();\n }\n /**\n * Returns the default configuration of tooltip\n * @return {Object} Configuration of tooltip.\n */\n static defaultConfig () {\n const config = defaultConfig.content;\n config.classPrefix = defaultConfig.classPrefix;\n return config;\n }\n\n config (...c) {\n if (c.length > 0) {\n this._config = mergeRecursive(this._config, c[0]);\n return this;\n }\n return this._config;\n }\n\n /**\n * Update model. The format contains presentation strategy which determines how to show the content.\n * If no strategy is mentioned then default is to show key value pair\n */\n update (item) {\n this._model = item.model;\n this._strategy = item.strategy !== undefined ? item.strategy : DEFAULT_STRATEGY;\n this._formatter = item.formatter;\n return this;\n }\n\n context (ctx) {\n this._context = ctx;\n return this;\n }\n\n render (mount) {\n let data;\n const config = this._config;\n const iconContainerSize = config.iconContainerSize;\n const formatter = this._formatter;\n const rowMargin = config.rowMargin;\n const model = this._model;\n\n this._mount = mount;\n if (model instanceof Array) {\n data = model;\n } else {\n data = formatter instanceof Function ? formatter(this._model, this._context) :\n strategy[this._strategy](this._model, this.config(), this._context);\n }\n\n if (data instanceof Function) {\n mount.html(data());\n } else {\n let content = data;\n let displayFormat = 'default';\n\n if (isSimpleObject(data)) {\n content = data.content;\n displayFormat = data.displayFormat;\n }\n\n const body = makeElement(mount, 'div', [displayFormat], `${config.classPrefix}-tooltip-content`, {},\n d => d);\n\n if (displayFormat === 'table') {\n const table = makeElement(body, 'table', [1], `${config.classPrefix}-tooltip-table`);\n const tbody = makeElement(table, 'tbody', [1], `${config.classPrefix}-tooltip-table-tbody`);\n const rows = makeElement(tbody, 'tr', content, `${config.classPrefix}-tooltip-table-row`);\n rows.each(function (d, i) {\n selectElement(this).classed(`${config.classPrefix}-tooltip-table-row-${i}`, true);\n });\n const cells = makeElement(rows, 'td', d => d, `${config.classPrefix}-tooltip-table-cell`);\n cells.each(function (d) {\n selectElement(this).html(d);\n });\n } else {\n const rows = makeElement(body, 'div', content, `${config.classPrefix}-tooltip-row`);\n const cells = makeElement(rows, 'span', d => d, `${config.classPrefix}-tooltip-content`);\n cells.attr('class', `${config.classPrefix}-tooltip-content`);\n setStyles(rows, {\n margin: rowMargin\n });\n setStyles(cells, {\n display: 'inline-block',\n 'margin-right': `${config.spacing}px`\n });\n\n cells.each(function (d) {\n const el = selectElement(this);\n el.html('');\n if (d instanceof Object) {\n if (d.type === 'icon') {\n const svg = makeElement(el, 'svg', [1]);\n const path = makeElement(svg, 'path', [1]);\n const shape = d.shape instanceof Function ? d.shape : getSymbol(d.shape);\n\n setAttrs(svg, {\n x: 0,\n y: 0,\n width: iconContainerSize,\n height: iconContainerSize\n });\n setAttrs(path, {\n d: shape.size(d.size)(),\n transform: `translate(${iconContainerSize / 2}, ${iconContainerSize / 2})`\n });\n setStyles(path, {\n fill: d.color\n });\n setStyles(svg, {\n width: `${iconContainerSize}px`,\n height: `${iconContainerSize}px`\n });\n } else {\n el.html(d.value);\n d.className && el.classed(d.className, true);\n setStyles(el, d.style);\n }\n } else {\n el.html(d);\n }\n });\n }\n }\n return this;\n }\n\n clear () {\n this._model = null;\n return this;\n }\n}\n","import {\n mergeRecursive,\n getQualifiedClassName,\n getUniqueId,\n selectElement,\n setStyles,\n makeElement\n} from 'muze-utils';\nimport { ARROW_BOTTOM, ARROW_LEFT, ARROW_RIGHT, TOOLTIP_LEFT, TOOLTIP_RIGHT, TOOLTIP_BOTTOM, TOOLTIP_TOP,\n INITIAL_STYLE } from './constants';\nimport { defaultConfig } from './default-config';\nimport { getArrowPos, placeArrow, reorderContainers } from './helper';\nimport './styles.scss';\nimport Content from './content';\n\n/**\n * This component is responsible for creating a tooltip element. It appends the tooltip\n * in the body element.\n * @class Tooltip\n */\nexport default class Tooltip {\n /**\n * Initializes the tooltip with the container element and configuration\n * @param {HTMLElement} container container where the tooltip will be mounted.\n * @param {string} className Class name of the tooltip.\n */\n constructor (htmlContainer, svgContainer) {\n let connectorContainer = svgContainer;\n this._id = getUniqueId();\n this._config = {};\n this.config({});\n const tooltipConf = this._config;\n const classPrefix = tooltipConf.classPrefix;\n const contentClass = tooltipConf.content.parentClassName;\n const container = makeElement(htmlContainer, 'div', [1], `${classPrefix}-tooltip-container`);\n this._container = container;\n this._tooltipContainer = container.append('div').style('position', 'absolute');\n this._contentContainer = this._tooltipContainer.append('div').attr('class', `${classPrefix}-${contentClass}`);\n this._tooltipBackground = this._tooltipContainer.append('div').style('position', 'relative');\n this._tooltipArrow = this._tooltipContainer.append('div');\n\n if (!svgContainer) {\n connectorContainer = htmlContainer.append('svg').style('pointer-events', 'none');\n }\n this._contents = {};\n this._tooltipConnectorContainer = selectElement(connectorContainer)\n .append('g')\n .attr('class', `${tooltipConf.classPrefix}-${tooltipConf.connectorClassName}`);\n const id = this._id;\n const defClassName = tooltipConf.defClassName;\n const qualifiedClassName = getQualifiedClassName(defClassName, id, tooltipConf.classPrefix);\n\n setStyles(this._tooltipArrow, INITIAL_STYLE);\n setStyles(this._tooltipBackground, INITIAL_STYLE);\n this.addClass(qualifiedClassName.join(' '));\n this.addClass(tooltipConf.className);\n this.hide();\n }\n\n /**\n * Sets the configuration of tooltip.\n * @param {Object} config Configuration of tooltip\n * @return {Tooltip} Instance of tooltip\n */\n config (...config) {\n if (config.length > 0) {\n const defConf = mergeRecursive({}, this.constructor.defaultConfig());\n this._config = mergeRecursive(defConf, config[0]);\n return this;\n }\n return this._config;\n }\n\n /**\n * Returns the default configuration of tooltip\n * @return {Object} Configuration of tooltip.\n */\n static defaultConfig () {\n return defaultConfig;\n }\n /**\n * Sets the class name of tooltip\n * @param {string} className tooltip class name\n * @return {Tooltip} Instance of tooltip.\n */\n addClass (className) {\n this._tooltipContainer.classed(className, true);\n return this;\n }\n\n context (...ctx) {\n if (ctx.length) {\n this._context = ctx[0];\n return this;\n }\n return this._context;\n }\n\n content (name, data, contentConfig = {}) {\n const config = this.config();\n const { classPrefix } = config;\n const contentClass = config.content.className;\n const formatter = config.formatter;\n const className = contentConfig.className || `${classPrefix}-${contentClass}-${name}`;\n const content = this._contents[name] = this._contents[name] || new Content();\n const container = makeElement(this._contentContainer, 'div', [contentConfig.order], className);\n container.attr('class', `${classPrefix}-${contentClass} ${className}`);\n reorderContainers(this._contentContainer, `.${classPrefix}-${contentClass}`);\n const contentConf = config.content;\n contentConfig.classPrefix = this._config.classPrefix;\n content.config(contentConf);\n\n if (data === null) {\n content.clear();\n container.remove();\n delete this._contents[name];\n } else {\n content.update({\n model: data,\n formatter: contentConfig.formatter || formatter\n });\n content.context(this._context);\n content.render(container);\n }\n\n if (!Object.keys(this._contents).length) {\n this.hide();\n }\n return this;\n }\n\n getContents () {\n return Object.values(this._contents);\n }\n\n /**\n * Positions the tooltip at the given x and y position.\n * @param {number} x x position\n * @param {number} y y position\n * @return {Tooltip} Instance of tooltip.\n */\n position (x, y, conf = {}) {\n if (!Object.keys(this._contents).length) {\n this.hide();\n return this;\n }\n this.show();\n const target = this._target;\n const repositionArrow = conf.repositionArrow;\n\n if (target && repositionArrow) {\n const node = this._tooltipContainer.node();\n const config = this._config;\n const arrowDisabled = config.arrow.disabled;\n const arrowWidth = arrowDisabled ? 0 : config.arrow.size;\n const arrowOrient = this._arrowOrientation;\n const outsidePlot = arrowOrient === ARROW_LEFT || arrowOrient === ARROW_RIGHT ?\n (y + node.offsetHeight - arrowWidth) < target.y || y > (target.y + target.height) :\n (x + node.offsetWidth - arrowWidth) < target.x || x > (target.x + target.width);\n\n if (!arrowDisabled) {\n if (outsidePlot) {\n let path;\n this._tooltipArrow.style('display', 'none');\n this._tooltipBackground.style('display', 'none');\n this._tooltipConnectorContainer.style('display', 'block');\n const connector = this._tooltipConnectorContainer.selectAll('path').data([1]);\n const enter = connector.enter().append('path');\n if (arrowOrient === ARROW_LEFT) {\n path = `M ${x} ${y + node.offsetHeight / 2} L ${target.x + target.width}`\n + ` ${target.y + target.height / 2}`;\n } else if (arrowOrient === ARROW_RIGHT) {\n path = `M ${x + node.offsetWidth} ${y + node.offsetHeight / 2}`\n + ` L ${target.x} ${target.y + target.height / 2}`;\n } else if (arrowOrient === ARROW_BOTTOM) {\n path = `M ${x + node.offsetWidth / 2} ${y + node.offsetHeight}`\n + ` L ${target.x + target.width / 2} ${target.y}`;\n }\n enter.merge(connector).attr('d', path).style('display', 'block');\n } else {\n const arrowPos = getArrowPos(arrowOrient, target, {\n x,\n y,\n boxHeight: node.offsetHeight,\n boxWidth: node.offsetWidth\n }, this._config);\n\n placeArrow(this, this._arrowOrientation, arrowPos);\n this._tooltipConnectorContainer.style('display', 'none');\n }\n }\n }\n\n const offset = this._offset || {\n x: 0,\n y: 0\n };\n this._tooltipContainer.style('left', `${offset.x + x}px`).style('top',\n `${offset.y + y}px`);\n\n return this;\n }\n\n /**\n * Positions the tooltip relative to a rectangular box. It takes care of tooltip overflowing the\n * boundaries.\n * @param {Object} dim Dimensions of the plot.\n */\n positionRelativeTo (dim, tooltipConf = {}) {\n let obj;\n let orientation = tooltipConf.orientation;\n this.show();\n if (!dim) {\n this.hide();\n return this;\n }\n\n const extent = this._extent;\n const node = this._tooltipContainer.node();\n\n this._tooltipContainer.style('top', '0px')\n .style('left', '0px');\n const offsetWidth = node.offsetWidth + 2;\n const offsetHeight = node.offsetHeight + 2;\n const config = this._config;\n const offset = this._offset;\n const arrowDisabled = config.arrow.disabled;\n const arrowSize = arrowDisabled ? 0 : config.arrow.size;\n const draw = tooltipConf.draw !== undefined ? tooltipConf.draw : true;\n const topSpace = dim.y;\n // When there is no space in right\n const dimX = dim.x + dim.width + offset.x;\n const rightSpace = extent.width - dimX;\n const leftSpace = dim.x + offset.x - extent.x;\n const positionTop = topSpace > (offsetHeight + arrowSize);\n const positionRight = rightSpace >= offsetWidth + arrowSize;\n const positionLeft = leftSpace >= offsetWidth + arrowSize;\n\n const positionHorizontal = () => {\n let position;\n let x = dim.x + dim.width;\n let y = dim.y;\n\n if (positionRight) {\n position = TOOLTIP_LEFT;\n x += arrowSize;\n } else if (positionLeft) {\n x = dim.x - offsetWidth;\n position = TOOLTIP_RIGHT;\n x -= arrowSize;\n } else {\n position = 'left';\n x += arrowSize;\n }\n if (dim.height < offsetHeight) {\n y = Math.max(0, dim.y + dim.height / 2 - offsetHeight / 2);\n }\n\n const arrowPos = getArrowPos(position, dim, {\n x,\n y,\n boxHeight: offsetHeight,\n boxWidth: offsetWidth\n }, this._config);\n\n return {\n position,\n arrowPos,\n x,\n y\n };\n };\n\n const positionVertical = () => {\n let position;\n let y;\n // Position tooltip at the center of plot\n let x = dim.x - offsetWidth / 2 + dim.width / 2;\n\n // Overflows to the right\n if ((extent.width - (dim.x + offset.x)) < offsetWidth) {\n x = extent.width - offsetWidth - offset.x;\n } else if ((x + offset.x) < extent.x) { // Overflows to the left\n x = extent.x;\n }\n\n if (positionTop) {\n y = dim.y - offsetHeight - arrowSize;\n position = TOOLTIP_BOTTOM;\n } else {\n y = dim.y + dim.height + arrowSize;\n position = TOOLTIP_TOP;\n }\n\n const arrowPos = getArrowPos(position, dim, {\n x,\n y,\n boxHeight: offsetHeight,\n boxWidth: offsetWidth\n }, this._config);\n\n return {\n position,\n arrowPos,\n x,\n y\n };\n };\n\n this._target = dim;\n if (!orientation) {\n if (positionTop) {\n orientation = 'vertical';\n } else if (positionRight || positionLeft) {\n orientation = 'horizontal';\n } else {\n orientation = 'vertical';\n }\n }\n\n if (orientation === 'horizontal') {\n obj = positionHorizontal();\n } else if (orientation === 'vertical') {\n obj = positionVertical();\n }\n\n this._position = {\n x: obj.x,\n y: obj.y\n };\n\n this._arrowPos = obj.arrowPos;\n if (!arrowDisabled) {\n placeArrow(this, obj.position, obj.arrowPos);\n } else {\n this._tooltipArrow.style('display', 'none');\n this._tooltipBackground.style('display', 'none');\n }\n this._arrowOrientation = obj.position;\n draw && this.position(obj.x, obj.y);\n return this;\n }\n\n /**\n * Hides the tooltip element.\n * @return {Tooltip} Instance of tooltip.\n */\n hide () {\n this._tooltipContainer.style('display', 'none');\n this._tooltipConnectorContainer.style('display', 'none');\n return this;\n }\n\n /**\n * Shows the tooltip element.\n * @return {Tooltip} Instance of tooltip.\n */\n show () {\n this._tooltipContainer.style('display', 'block');\n return this;\n }\n\n extent (extent) {\n this._extent = extent;\n return this;\n }\n\n offset (offset) {\n this._offset = offset;\n return this;\n }\n\n remove () {\n this._tooltipContainer.remove();\n this._tooltipBackground.remove();\n this._tooltipConnectorContainer.remove();\n return this;\n }\n}\n","import { FieldType } from 'muze-utils';\n\nexport const strategies = {\n showSelectedItems: (dm) => {\n const dataObj = dm.getData();\n const measures = dataObj.schema.filter(d => d.type === FieldType.MEASURE);\n const aggregatedModel = dm.groupBy([''], measures.reduce((acc, v) => {\n acc[v.name] = v.defAggFn === 'count' ? 'sum' : v.defAggFn;\n return acc;\n }, {}));\n const fieldsObj = dm.getFieldspace().fieldsObj();\n const fieldsConf = aggregatedModel.getFieldsConfig();\n let values = [{\n value: `${dataObj.data.length}`,\n style: {\n 'font-weight': 'bold'\n }\n }, 'Items Selected'];\n const measureNames = measures.map(d => d.name);\n if (measureNames.length) {\n values = [...values, ...[`(${fieldsObj[measureNames[0]].defAggFn().toUpperCase()}) ${measureNames[0]}`,\n {\n value: `${aggregatedModel.getData().data[0][fieldsConf[measureNames[0]].index].toFixed(2)}`,\n style: {\n 'font-weight': 'bold'\n }\n }]];\n }\n return [values];\n }\n};\n","import { Tooltip as TooltipRenderer } from '@chartshq/muze-tooltip';\nimport { FieldType } from 'muze-utils';\nimport { spaceOutBoxes } from '../helper';\nimport { strategies } from './strategies';\nimport { FRAGMENTED } from '../../enums/constants';\nimport SpawnableSideEffect from '../spawnable';\n\nimport './styles.scss';\n\nexport default class Tooltip extends SpawnableSideEffect {\n constructor (...params) {\n super(...params);\n this._tooltips = {};\n this._strategies = strategies;\n this._strategy = 'default';\n }\n\n static defaultConfig () {\n return {\n padding: 5,\n offset: {\n x: 0,\n y: 0\n }\n };\n }\n\n static formalName () {\n return 'tooltip';\n }\n\n apply (selectionSet, payload, options = {}) {\n let totalHeight = 0;\n let totalWidth = 0;\n const dataModel = selectionSet.mergedEnter.model;\n const context = this.firebolt.context;\n const drawingInf = this.drawingContext();\n if ((dataModel.isEmpty() || payload.criteria === null) || selectionSet.isSourceFieldPresent === false) {\n this.hide(options, null);\n return this;\n }\n\n const tooltips = this._tooltips;\n const config = this.config();\n const boundBox = {\n width: drawingInf.width,\n height: drawingInf.height\n };\n const showInPosition = payload.showInPosition;\n const pad = config.padding;\n const dataModels = [];\n const fragmented = config.mode === FRAGMENTED;\n const sourceInf = context.getSourceInfo();\n const fields = sourceInf.fields;\n const xFieldDim = fields.x[0] ? fields.x[0].type() === FieldType.DIMENSION : false;\n const showVertically = !!xFieldDim;\n const tooltipPos = payload.position;\n const boxes = [];\n const enter = {};\n const uids = dataModel.getData().uids;\n if (fragmented) {\n dataModels.push(...uids.map(d => dataModel.select((fieldsArr, i) => i === d, {\n saveChild: false\n })));\n } else {\n dataModels.push(dataModel);\n }\n\n let target = payload.target;\n let targetFields = [];\n if (target) {\n targetFields = target[0] || [];\n const sourceFields = payload.sourceFields;\n const indices = [];\n for (let i = 0, len = targetFields.length; i < len; i++) {\n if (sourceFields.indexOf(targetFields[i]) !== -1) {\n indices.push(i);\n }\n }\n target = target.map(d => d.filter((v, i) => indices.indexOf(i) !== -1));\n }\n\n const plotDimensions = context.getPlotPointsFromIdentifiers(target || payload.criteria, {\n getBBox: true\n });\n\n // Show tooltip for each datamodel\n for (let i = 0; i < dataModels.length; i++) {\n let plotDim = plotDimensions[i];\n if (fragmented) {\n const dimensions = dataModels[i].getData().schema.filter(d => d.type === FieldType.DIMENSION)\n .map(d => d.name);\n plotDim = context.getPlotPointsFromIdentifiers(dataModels[i].project(dimensions), { getBBox: true });\n plotDim = plotDim && plotDim[0];\n }\n\n let dt = dataModels[i];\n if (config.fields) {\n dt = dt.project(config.fields, {\n saveChild: false\n });\n }\n if (config.dataTransform) {\n dt = config.dataTransform(dt, i);\n }\n\n enter[i] = true;\n const layoutContainer = drawingInf.parentContainer;\n const layoutBoundBox = layoutContainer.getBoundingClientRect();\n const unitBoundBox = drawingInf.htmlContainer.getBoundingClientRect();\n\n const offsetLeft = unitBoundBox.left - layoutBoundBox.left;\n const offsetTop = unitBoundBox.top - layoutBoundBox.top;\n const tooltipInst = tooltips[i] = tooltips[i] || new TooltipRenderer(layoutContainer,\n drawingInf.svgContainer);\n\n sourceInf.payload = payload;\n sourceInf.firebolt = this.firebolt;\n sourceInf.detailFields = context.detailFields();\n sourceInf.timeDiffs = context.timeDiffsByField();\n tooltipInst.context(sourceInf);\n const strategy = strategies[options.strategy];\n tooltipInst.content(options.strategy || this._strategy, dt, {\n formatter: strategy,\n order: options.order\n })\n .config(this.config())\n .extent({\n x: 0,\n y: 0,\n width: layoutBoundBox.width,\n height: layoutBoundBox.height\n })\n .offset({\n x: offsetLeft + (config.offset.x || 0),\n y: offsetTop + (config.offset.y || 0)\n });\n\n if (showInPosition) {\n tooltipInst.position(tooltipPos.x + pad, tooltipPos.y + pad);\n } else if (plotDim) {\n tooltipInst.positionRelativeTo({\n x: plotDim.x,\n y: plotDim.y,\n width: plotDim.width || 0,\n height: plotDim.height || 0\n }, {\n orientation: fragmented ?\n (showVertically ? 'horizontal' : 'vertical') : undefined\n });\n } else {\n tooltipInst.hide();\n break;\n }\n\n if (fragmented) {\n const position = tooltipInst._position;\n const tooltipBoundBox = tooltipInst._tooltipContainer.node().getBoundingClientRect();\n\n totalHeight += tooltipBoundBox.height + pad;\n totalWidth += tooltipBoundBox.width + pad;\n if (showVertically ? totalHeight > drawingInf.height : totalWidth > drawingInf.width) {\n break;\n }\n boxes.push({\n x: position.x,\n y: position.y,\n width: tooltipBoundBox.width,\n height: tooltipBoundBox.height,\n tooltip: tooltipInst\n });\n }\n }\n\n for (const key in tooltips) {\n if (!enter[key]) {\n const tooltip = tooltips[key];\n tooltip.content(payload.action, null);\n if (!tooltip.getContents().length) {\n tooltip.remove();\n delete tooltips[key];\n }\n }\n }\n if (fragmented) {\n spaceOutBoxes(boxes, boundBox, showVertically);\n boxes.forEach(box => box.tooltip.position(box.x, box.y, {\n repositionArrow: true\n }));\n }\n return this;\n }\n\n hide (options) {\n const tooltips = this._tooltips;\n for (const key in tooltips) {\n if ({}.hasOwnProperty.call(tooltips, key)) {\n const strategy = options.strategy || this._strategy;\n tooltips[key].content(strategy, null);\n tooltips[key].hide();\n }\n }\n }\n}\n","export const spaceOutBoxes = (boxes, extent, showVertically) => {\n let y;\n let height;\n let x;\n let width;\n let i;\n const pad = 5;\n const len = boxes.length;\n const spaceOutIfOverlap = (firstBox, secondBox, opposite) => {\n x = firstBox.x;\n width = firstBox.width;\n y = firstBox.y;\n height = firstBox.height;\n const bottom = y + height;\n const right = x + width;\n\n if (showVertically) {\n if (opposite ? y < (secondBox.y + secondBox.height) : bottom > secondBox.y) {\n secondBox.y = opposite ? firstBox.y - secondBox.height - pad :\n bottom + pad;\n }\n } else if (opposite ? x < (secondBox.x + secondBox.width) : right > secondBox.x) {\n secondBox.x = opposite ? firstBox.x - secondBox.width - pad :\n right + pad;\n }\n };\n\n boxes.sort((a, b) => (showVertically ? a.y - b.y : a.x - b.x));\n i = 0;\n\n for (i = 0; i < len - 1; i++) {\n spaceOutIfOverlap(boxes[i], boxes[i + 1]);\n }\n\n if ((boxes[i].y + boxes[i].height) > extent.height ||\n (boxes[i].x + boxes[i].width) > extent.width) {\n if (showVertically) {\n boxes[i].y -= (boxes[i].height + boxes[i].y) - extent.height;\n } else {\n boxes[i].x -= (boxes[i].width + boxes[i].x) - extent.width;\n }\n for (i = len - 1; i > 0; i--) {\n spaceOutIfOverlap(boxes[i], boxes[i - 1], true);\n }\n }\n return boxes;\n}\n;\n","import { selectElement, FieldType } from 'muze-utils';\n\nimport './styles.scss';\nimport { CLASSPREFIX } from '../../enums/constants';\nimport SpawnableSideEffect from '../spawnable';\n\nexport default class Crossline extends SpawnableSideEffect {\n static defaultConfig () {\n return {\n className: `${CLASSPREFIX}-crossline-group`,\n bandClass: `${CLASSPREFIX}-crossband`,\n lineClass: `${CLASSPREFIX}-crossline`\n };\n }\n\n static formalName () {\n return 'crossline';\n }\n\n apply (selectionSet, payload) {\n let height;\n let bandWidth;\n let px;\n let width;\n const {\n className,\n bandClass,\n lineClass\n } = this.config();\n const dataModel = selectionSet.mergedEnter.model;\n const drawingInf = this.drawingContext();\n if (payload.criteria && dataModel && dataModel.isEmpty()) {\n return this;\n }\n if (payload.criteria === null || !dataModel) {\n this.hide();\n return this;\n }\n\n const dataObj = dataModel.getData();\n const sourceInf = this.firebolt.context.getSourceInfo();\n const axes = sourceInf.axes;\n const axisFields = sourceInf.fields;\n const fields = selectionSet.fields;\n const data = dataObj.data;\n const fieldsConfig = dataModel.getFieldsConfig();\n const svgContainer = drawingInf.sideEffectGroup;\n\n const elemData = [];\n fields.forEach((field) => {\n const fieldIndex = fieldsConfig[field] && fieldsConfig[field].index;\n const dataArr = data.map(d => d[fieldIndex]);\n const axisIndex = [['x', 0], ['x', 1], ['y', 0], ['y', 1]].find((arr) => {\n const fieldInst = axisFields[arr[0]][arr[1]];\n return fieldInst && fieldInst.type() === FieldType.DIMENSION &&\n fieldInst.getMembers().indexOf(field) !== -1;\n });\n if (axisIndex !== undefined && data.length) {\n const type = axisIndex[0];\n const axis = axes[type][axisIndex[1]];\n const value = dataArr[0];\n bandWidth = axis.getUnitWidth() || 0;\n px = axis.getScaleValue(value) + bandWidth / 2 + drawingInf.xOffset;\n const plotWidth = Math.max(...this.firebolt.context.layers().map(layer => layer.getPlotSpan()[type]));\n const pad = Math.max(...this.firebolt.context.layers().map(layer => layer.getPlotPadding()[type]));\n height = drawingInf.height;\n width = drawingInf.width;\n const startPx = px - plotWidth / 2 - pad / 2;\n const endPx = px + plotWidth / 2 + pad / 2;\n const dataPoint = {};\n if (type === 'y') {\n dataPoint.d = `M 0 ${startPx} L 0 ${endPx} L ${width} ${endPx} L ${width} ${startPx} Z`;\n } else {\n dataPoint.d = `M ${startPx} 0 L ${endPx} 0 L ${endPx} ${height} L ${startPx} ${height} Z`;\n }\n dataPoint.className = plotWidth ? bandClass : lineClass;\n elemData.push(dataPoint);\n }\n });\n if (elemData.length) {\n const parentGroup = this.createElement(svgContainer, 'g', [1], className);\n const elem = this.createElement(parentGroup, 'path', elemData);\n elem.attr('d', d => d.d).style('pointer-events', 'none')\n .attr('class', d => d.className);\n }\n return this;\n }\n\n hide () {\n const className = this.config().className;\n const drawingInf = this.drawingContext();\n selectElement(drawingInf.sideEffectGroup).selectAll(`.${className}`).remove();\n }\n}\n","const fadeFn = (set, context, strategy) => {\n const {\n mergedEnter,\n mergedExit,\n exitSet,\n completeSet\n } = set;\n\n if (!mergedEnter.length && !mergedExit.length) {\n context.applyInteractionStyle(completeSet, {}, strategy, false);\n } else {\n context.applyInteractionStyle(exitSet[1], {}, strategy, true);\n context.applyInteractionStyle(mergedEnter, {}, strategy, false);\n }\n};\n\nexport const strategies = {\n fade: fadeFn,\n focus: (set, context) => {\n const {\n mergedEnter,\n mergedExit,\n completeSet\n } = set;\n if (!mergedEnter.length && !mergedExit.length) {\n context.applyInteractionStyle(completeSet, {}, 'focus', false);\n } else {\n context.applyInteractionStyle(mergedExit, {}, 'focus', true);\n context.applyInteractionStyle(mergedEnter, {}, 'focus', false);\n }\n },\n highlight: (set, context) => {\n const {\n mergedEnter,\n mergedExit,\n entrySet,\n exitSet,\n completeSet\n } = set;\n if (!mergedEnter.length && !mergedExit.length) {\n context.applyInteractionStyle(completeSet, {}, 'highlight', false);\n } else {\n context.applyInteractionStyle(entrySet[1], {}, 'highlight', true);\n context.applyInteractionStyle(exitSet[1], {}, 'highlight', false);\n }\n }\n};\n","import SurrogateSideEffect from '../surrogate';\nimport { strategies } from './strategy';\n\nexport default class PlotHighlighter extends SurrogateSideEffect {\n constructor (...params) {\n super(...params);\n this._strategy = 'highlight';\n this._strategies = strategies;\n }\n\n static formalName () {\n return 'highlighter';\n }\n\n static target () {\n return 'visual-unit';\n }\n\n apply (selectionSet, payload, options = {}) {\n const strategy = this._strategies[options.strategy || this._strategy];\n\n if (selectionSet.isSourceFieldPresent !== false) {\n strategy(selectionSet, this, options.strategy || this._strategy);\n }\n\n return this;\n }\n}\n","import SurrogateSideEffect from '../surrogate';\n\nexport default class FilterEffect extends SurrogateSideEffect {\n static formalName () {\n return 'filter';\n }\n\n static target () {\n return 'visual-unit';\n }\n\n static mutates () {\n return true;\n }\n\n apply (selectionSet, payload) {\n const context = this.firebolt.context;\n const entryModel = selectionSet.mergedEnter.model;\n if (payload.criteria === null) {\n context.clearCaching().resetData();\n } else {\n context.enableCaching().data(entryModel);\n }\n return this;\n }\n}\n","import { DataModel } from 'muze-utils';\n\nimport { CLASSPREFIX } from '../../enums/constants';\nimport SpawnableSideEffect from '../spawnable';\n\nimport './styles.scss';\n\nexport default class AnchorEffect extends SpawnableSideEffect {\n constructor (...params) {\n super(...params);\n const context = this.firebolt.context;\n this._layers = this.addAnchorLayers(context);\n }\n\n static target () {\n return 'visual-unit';\n }\n\n static defaultConfig () {\n return {\n className: `${CLASSPREFIX}-anchors-group`\n };\n }\n\n static formalName () {\n return 'anchors';\n }\n\n addAnchorLayers (context) {\n const layers = [];\n this.firebolt.context.layers().forEach((layer, idx) => {\n const shouldDrawAnchors = layer.shouldDrawAnchors();\n if (shouldDrawAnchors) {\n const encodingFieldsInf = layer.encodingFieldsInf();\n const layerObj = {\n instances: context.addLayer({\n name: `${layer.alias()}-${this.constructor.formalName()}-${idx}`,\n mark: 'point',\n encoding: {\n x: encodingFieldsInf.xField,\n y: encodingFieldsInf.yField,\n color: {\n field: encodingFieldsInf.colorField\n },\n size: {\n field: encodingFieldsInf.sizeField,\n value: this.defaultSizeValue()\n }\n },\n transform: {\n type: 'identity'\n },\n transition: this.getTransitionConfig(),\n calculateDomain: false,\n source: dt => dt.select(() => false, {\n saveChild: false\n }),\n interactive: false,\n render: false\n }),\n linkedLayer: layer\n };\n\n layers.push(layerObj);\n }\n });\n return layers;\n }\n\n getTransitionConfig () {\n return {\n disabled: true\n };\n }\n\n /**\n * Returns the default area value of the anchor point.\n * @return { number } Default area value of anchor.\n */\n defaultSizeValue () {\n return 100;\n }\n\n apply (selectionSet) {\n const self = this;\n const dataModel = selectionSet.mergedEnter.model;\n if (selectionSet.isSourceFieldPresent !== false) {\n const drawingInf = this.drawingContext();\n const sideEffectGroup = drawingInf.sideEffectGroup;\n const className = `${this.config().className}`;\n const layers = this._layers;\n const parentGroup = this.createElement(sideEffectGroup, 'g', [1], `${className}-container`);\n const anchorGroups = this.createElement(parentGroup, 'g', layers);\n anchorGroups.each(function (layer) {\n const instances = layer.instances;\n const elems = self.createElement(this, 'g', instances, className);\n const linkedLayer = layer.linkedLayer;\n const [transformedData, schema] = linkedLayer.getTransformedDataFromIdentifiers(dataModel);\n const transformedDataModel = new DataModel(transformedData, schema);\n elems.each(function (d, i) {\n instances[i].data(transformedDataModel).mount(this);\n });\n });\n }\n return this;\n }\n}\n","import AnchorEffect from './anchors';\nimport { CLASSPREFIX } from '../enums/constants';\n\nexport default class PersistentAnchors extends AnchorEffect {\n static formalName () {\n return 'persistent-anchors';\n }\n\n static defaultConfig () {\n return {\n className: `${CLASSPREFIX}-persistent-anchors`\n };\n }\n\n getTransitionConfig () {\n return {\n disabled: true\n };\n }\n}\n","import AnchorEffect from './anchors';\nimport { CLASSPREFIX } from '../enums/constants';\n\nexport default class BrushAnchors extends AnchorEffect {\n static formalName () {\n return 'brush-anchors';\n }\n\n static defaultConfig () {\n return {\n className: `${CLASSPREFIX}-brush-anchors`\n };\n }\n\n getTransitionConfig () {\n return {\n disabled: true\n };\n }\n}\n","import * as BEHAVIOURS from './enums/behaviours';\n\nexport const behaviourEffectMap = {\n [BEHAVIOURS.BRUSH]: ['selectionBox', {\n name: 'highlighter',\n options: {\n strategy: 'fade'\n }\n }, 'brush-anchors'],\n [`${BEHAVIOURS.BRUSH},${BEHAVIOURS.SELECT}`]: [{\n name: 'tooltip',\n options: {\n strategy: 'showSelectedItems',\n order: 0,\n filter: context => context.config().mode === 'fragmented'\n }\n }],\n [BEHAVIOURS.HIGHLIGHT]: [{\n name: 'highlighter',\n options: {\n strategy: 'highlight'\n }\n }, 'crossline', {\n name: 'tooltip',\n options: {\n order: 9999\n }\n }, 'anchors'],\n [BEHAVIOURS.FILTER]: ['filter'],\n [BEHAVIOURS.SELECT]: [{\n name: 'highlighter',\n options: {\n strategy: 'focus'\n }\n }, 'persistent-anchors']\n};\n","export const CLASSPREFIX = 'muze';\nexport const STACK = 'stack';\nexport const GROUP = 'group';\nexport const IDENTITY = 'identity';\nexport const ANGLE = 'angle';\nexport const RADIUS = 'radius';\nexport const SIZE = 'size';\nexport const COLOR = 'color';\nexport const SHAPE = 'shape';\nexport const OUTER_RADIUS_VALUE = 'outerRadiusValue';\nexport const TEXT_ANCHOR_MIDDLE = 'middle';\nexport const ENCODING = {\n X: 'x',\n Y: 'y',\n X0: 'x0',\n Y0: 'y0'\n};\n\nexport const ASCENDING = 'asc';\n\nexport const AREA_LAYER = 'area';\nexport const ARC_LAYER = 'arc';\nexport const LINE_LAYER = 'line';\nexport const TEXT_LAYER = 'text';\nexport const POINT_LAYER = 'point';\nexport const BAR_LAYER = 'bar';\nexport const TICK_LAYER = 'tick';\nexport const SIMPLE_LAYER = 'simple';\nexport const BASE_LAYER = 'base';\n","import { CLASSPREFIX, STACK } from '../../enums/constants';\n\nexport const defaultConfig = {\n classPrefix: CLASSPREFIX,\n defClassName: 'layer-area',\n className: '',\n interpolate: 'linear',\n transform: {\n type: STACK\n },\n interaction: {\n\n },\n nearestPointThreshold: 10,\n encoding: {\n color: {},\n x: {},\n y: {},\n y0: {},\n strokeOpacity: {\n value: 1\n }\n },\n transition: {\n effect: 'cubic',\n duration: 1000\n },\n connectNullData: false\n};\n","import { ERROR_MSG } from 'muze-utils';\n\n/**\n * This is an interface class which any new layer class has to extend.\n *\n * @example\n * class BarLayer extends BaseLayer {\n * update (params) {\n * // super.update(params);\n * // Update the bar layer\n * }\n * }\n * @class\n */\nexport default class SimpleLayer {\n\n formalName () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Sets or gets the dependencies.\n * @param {Object} dependencies Dependencies needed by layer\n * @return {BaseLayer} Instance of base layer.\n */\n dependencies () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Returns the config of the layer\n *\n * @param {Object} config Configuration of layer\n * @return {Object} configuration of layer\n */\n config () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Acts as a getter or setter function\n * When setter\n * Returns the datamodel of the layer\n * @param { DataModel } dataModel instance of DataModel\n * @return { DataModel } DataModel instance of the layer\n */\n data () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Returns a serialized schema of the layer\n * @return {Object} Serialized schema\n */\n serialize () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Returns the unique identifier of this layer\n * @return {string} id of the layer\n */\n id () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n /*\n * This method resolves the x, y, x0 and y0 values from the transformed data.\n * It also checks the type of transformed data for example, if it is a stacked data\n * then it fetches the y and y0 values from the stacked data.\n * @param {Array.} transformedData transformed data\n * @param {Object} fieldMap field definitions\n * @param {string} transformType type of transformed data - stack, group or identity.\n * @return {Array.} Normalized data\n * @private\n */\n normalizeTransformedData () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Gets the transform method from transform factory based on type of transform. It then calls the\n * transform method with the data and passes the configuration parameters of transform such as\n * groupBy, value field, etc.\n *\n * @param {DataModel} dataModel Instance of dataModel\n * @param {Object} config configuration for transforming data\n * @return {Array.} Transformed data.\n * @private\n */\n getTransformedData () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Calculates the domain from the data.\n * It checks the type of field and calculates the domain based on that. For example, if it\n * is a quantitative or temporal field, then it calculates the min and max from the data or\n * if it is a nominal field then it gets all the values from the data of that field.\n * @param {Array} data DataArray\n * @return {Array} Domain values array.\n */\n _calculateDomainFromData () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Returns the domain for the axis.\n *\n * @param {string} encodingType type of encoding x, y, color, etc.\n * @return {Object} Axis domains\n */\n getDomain () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Abstract method for getting nearest point\n * @return {BaseLayer} Instance of base layer\n */\n getNearestPoint () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Abstract method for highlighting points\n * @return {BaseLayer} Instance of base layer\n */\n highlightPoint () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Abstract method for deselecting points\n * @return {BaseLayer} Instance of base layer\n */\n dehighlightPoint () {\n return this;\n }\n\n linkLayerStore () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Sets the container element for the layer to be renderered.\n * @param {SVGElement} mountPoint SVG element or group element.\n */\n mount () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n render () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n}\n","export const DATA = 'data';\nexport const CONFIG = 'config';\nexport const MEASUREMENT = 'measurement';\nexport const AXES = 'axes';\nexport const NORMALIZED_DATA = 'normalizedData';\nexport const TRANSFORMED_DATA = 'transformedData';\nexport const DOMAIN = 'domain';\nexport const MOUNT = 'mount';\nexport const FIELDMAP = 'fieldMap';\nexport const DATA_UPDATED = 'dataUpdated';\n","/**\n * @module Axis\n * This file declares a class that is used to render an axis to add meaning to\n * plots.\n */\nimport { Symbols } from 'muze-utils';\nimport * as AxisOrientation from '../enums/axis-orientation';\n\n/**\n * @module Axis\n * This file exports constants that are used to reference axis orientations\n * in a consistent manner.\n */\nexport const BOTTOM = 'bottom';\nexport const TOP = 'top';\nexport const LEFT = 'left';\nexport const RIGHT = 'right';\n\n/**\n * This object is used to associate the axis orientation with the d3 class\n * used to represent that axis.\n */\nexport const axisOrientationMap = {\n [AxisOrientation.LEFT]: Symbols.axisLeft,\n [AxisOrientation.BOTTOM]: Symbols.axisBottom,\n [AxisOrientation.RIGHT]: Symbols.axisRight,\n [AxisOrientation.TOP]: Symbols.axisTop\n};\n","/**\n * @module axis\n * This file exports constants used to reference scale type\n * consistently throughout the project.\n */\nexport const LINEAR = 'linear';\nexport const BAND = 'band';\nexport const TIME = 'temporal';\nexport const COLOR = 'color';\nexport const ORDINAL = 'ordinal';\nexport const QUANTIZE = 'quantize';\nexport const QUANTILE = 'quantile';\nexport const LOG = 'log';\nexport const POW = 'pow';\nexport const IDENTITY = 'identity';\nexport const SEQUENTIAL = 'sequential';\nexport const THRESHOLD = 'threshold';\n","export const CLASSPREFIX = 'muze';\n\nexport const CONTINOUS = 'continous';\nexport const DISCRETE = 'discrete';\nexport const SEQUENTIAL = 'sequential';\nexport const ORDINAL = 'ordinal';\nexport const LINEAR = 'linear';\nexport const THRESHOLD = 'threshold';\nexport const QUANTIZE = 'quantize';\nexport const QUANTILE = 'quantile';\n\nexport const COLOR = 'color';\nexport const SHAPE = 'shape';\nexport const SIZE = 'size';\n\nexport const DOMAIN = 'domain';\nexport const BAND = 'band';\nexport const HIDDEN = 'hidden';\nexport const NUMBER = 'number';\nexport const BOTTOM = 'bottom';\nexport const TOP = 'top';\n\nexport const RGB = 'rgb';\nexport const HEX = 'hex';\nexport const HSLA = 'hsla';\nexport const HSL = 'hsl';\n\n","import { scales, colorSchemes } from 'muze-utils';\n\nimport {\n SEQUENTIAL,\n ORDINAL,\n LINEAR,\n CONTINOUS,\n THRESHOLD,\n QUANTIZE\n} from './enums/constants';\n\nimport * as ScaleType from './enums/scale-type';\n\nconst {\n scaleLinear,\n scaleThreshold,\n scaleLog,\n scalePow,\n scaleIdentity,\n scaleOrdinal,\n scaleSequential,\n scaleQuantize,\n scaleQuantile,\n schemeCategory10,\n schemeCategory20,\n schemeCategory20b,\n scaleBand,\n scaleTime\n} = scales;\nexport const scaleMap = {\n [ScaleType.LINEAR]: scaleLinear,\n [ScaleType.BAND]: scaleBand,\n [ScaleType.QUANTIZE]: scaleQuantize,\n [ScaleType.QUANTILE]: scaleQuantile,\n [ScaleType.THRESHOLD]: scaleThreshold,\n [ScaleType.SEQUENTIAL]: scaleSequential,\n [ScaleType.LOG]: scaleLog,\n [ScaleType.POW]: scalePow,\n [ScaleType.IDENTITY]: scaleIdentity,\n [ScaleType.TIME]: scaleTime,\n [ScaleType.COLOR]: scaleLinear,\n [ScaleType.ORDINAL]: scaleOrdinal\n};\nexport const SCHEMES = {\n SCHEME1: schemeCategory10,\n SCHEME2: schemeCategory20,\n SCHEME3: schemeCategory20b\n};\n\n/**\n * Accepts a scheme in a string format and returns the scale from d3-scale-chromatic\n *\n * @export\n * @param {string} scheme a string representing the kind of scheme for the color axis\n * @return {Object} The corresponding scale from a scheme type from d3 chromatic scale\n */\nexport function getScheme (scheme) {\n if (scheme[0] === 'i') {\n return scaleSequential(colorSchemes[scheme]);\n }\n return scaleOrdinal(colorSchemes[scheme]);\n}\n\n/**\n *\n *\n * @export\n * @param {*} scheme\n * @returns\n */\nexport function getSchemeType (scheme) {\n let schemeType = '';\n if (scheme && typeof (scheme) === 'string') {\n schemeType = scheme[0] === 'i' ? SEQUENTIAL : ORDINAL;\n } else {\n schemeType = ORDINAL;\n }\n return schemeType;\n}\n\n/**\n * This function is used to create a scale that is assigned to\n * an instance of axis.\n *\n * @export\n * @param {Object} params the input parameters to create a Scale object\n * @param {string} params.type the type of scale\n * @param {Array} params.range the range of scale\n * @return {Object} instance of scale\n */\nexport function createScale (params) {\n if (!params.type || !scaleMap[params.type]) {\n throw new Error(`${params.type} is not a valid scale type`);\n }\n if (!Array.isArray(params.range)) {\n throw new Error('range parameter must be an array');\n }\n let scaleFactory = null;\n const range = params.range;\n // @todo: do it using scale decorator\n if (params.type === LINEAR && params.interpolator) {\n scaleFactory = scaleMap[params.interpolator];\n if (params.interpolator === ScaleType.POW) {\n return scaleFactory().range(range).exponent(params.exponent);\n } else if (params.interpolator === ScaleType.LOG) {\n return scaleFactory().range(range).base([params.base]);\n }\n } else {\n scaleFactory = scaleMap[params.type];\n }\n\n if (params.type === QUANTIZE) {\n scaleFactory().nice();\n }\n return scaleFactory().range(range);\n}\n\n/**\n * This method is used to update the range of a scale\n * so that the core module can remain agnostic of the d3\n * scale api.\n *\n * @export\n * @param {Scale} scale Instance of d3 Scale.\n * @param {Array} range new range of the scale.\n * @return {Scale} Updated scale.\n */\nexport function updateScaleRange (scale, range) {\n return scale.range(range);\n}\n\n/**\n *\n *\n * @export\n * @param {*} domainType\n * @param {*} rangeType\n * @param {*} steps\n * @returns\n */\nexport function getScaleType (domainType, rangeType, steps) {\n if (rangeType === CONTINOUS) {\n return LINEAR;\n }\n if (domainType === CONTINOUS) {\n if (steps instanceof Array) {\n return THRESHOLD;\n }\n return QUANTIZE;\n }\n return ORDINAL;\n}\n","import { getUniqueId } from 'muze-utils';\nimport { CLASSPREFIX } from '../enums/constants';\n\n/**\n *\n *\n */\nexport const defaultConfig = {\n id: getUniqueId(),\n axisName: {\n defClassName: 'axis-name'\n },\n axisNamePadding: 12,\n base: 10,\n classPrefix: CLASSPREFIX,\n className: `${CLASSPREFIX}-axis`,\n exponent: 1,\n interpolator: 'linear',\n fixedBaseline: true,\n labels: {\n rotation: 0,\n smartTicks: false\n },\n orientation: 'left',\n maxHeight: 50, // @todo: height and width wont be hardcoded\n maxWidth: 40,\n numberFormat: val => val,\n padding: 0.3,\n nice: true,\n numberOfTicks: 10,\n rotate: false,\n show: true,\n showAxisName: true,\n showInnerTicks: null,\n showOuterTicks: null,\n style: {},\n type: 'linear',\n tickFormat: null,\n tickValues: null,\n xOffset: undefined,\n yOffset: undefined\n};\n\n","/**\n * This file exports functionality that is used to render axis.\n */\nimport { selectElement, makeElement, angleToRadian } from 'muze-utils';\nimport * as AxisOrientation from './enums/axis-orientation';\nimport { LINEAR, HIDDEN, BOTTOM, TOP } from './enums/constants';\n\n/**\n *\n *\n * @param {*} instance\n * @param {*} container\n * @param {*} labelManager\n * @param {*} config\n */\nconst rotateAxis = (instance, tickText, labelManager, config) => {\n const axis = instance.axis();\n const scale = instance.scale();\n const {\n orientation,\n labels,\n fixedBaseline,\n type\n } = config;\n let { rotation } = labels;\n\n const tickSize = instance.getTickSize();\n\n tickText.each(function (datum, index) {\n let yShift;\n let xShift;\n const tickFormatter = axis.tickFormat() ? axis.tickFormat : scale.tickFormat;\n const temp = tickFormatter ? tickFormatter()(datum) : datum;\n\n datum = temp.toString();\n\n const tickLabelDim = labelManager.getOriSize(datum);\n const width = tickLabelDim.width * 0.5;\n const height = tickLabelDim.height * 0.5;\n\n if (rotation < 0) {\n rotation = 360 + rotation;\n }\n\n const quadrant = 4 - Math.floor(rotation / 90);\n const rotationNormalizer = ((quadrant % 2 === 0) ? rotation : 180 * Math.ceil(rotation / 180) - rotation) % 180;\n\n yShift = Math.sqrt(height ** 2 + width ** 2) * Math.sin(angleToRadian(rotationNormalizer));\n\n if ((quadrant === 3 || quadrant === 2) && !(rotationNormalizer > 67.5 && rotationNormalizer <= 90)) {\n yShift += height * 2;\n }\n xShift = width;\n\n if (rotation === 90) {\n xShift = height;\n } else if (rotation === 270) {\n xShift = -height;\n } else {\n xShift = 0;\n }\n\n if (orientation === AxisOrientation.TOP) {\n xShift = (index === 0 && fixedBaseline && type === LINEAR) ? xShift + xShift / 2 : xShift;\n selectElement(this)\n .attr('transform', `translate(${-xShift + tickSize} \n ${-yShift - tickSize}) rotate(${rotation})`);\n } else {\n xShift = (index === 0 && fixedBaseline && type === LINEAR) ? xShift - xShift / 2 : xShift;\n selectElement(this)\n .attr('transform', `translate(${xShift - tickSize} \n ${yShift + tickSize}) rotate(${rotation})`);\n }\n });\n return tickText;\n};\n\n/**\n *\n *\n * @param {*} tickText\n * @param {*} axisInstance\n */\nconst changeTickOrientation = (selectContainer, axisInstance, tickSize) => {\n const {\n _smartTicks\n } = axisInstance;\n const config = axisInstance.config();\n const labelManager = axisInstance.dependencies().labelManager;\n const {\n labels,\n orientation\n } = config;\n const {\n rotation,\n smartTicks: isSmartTicks\n } = labels;\n\n const tickText = selectContainer.selectAll('.tick text');\n tickText.selectAll('tspan').remove();\n\n // rotate labels if not enough space is available\n if (rotation !== 0 && isSmartTicks === false && (orientation === TOP || orientation === BOTTOM)) {\n rotateAxis(axisInstance, tickText, labelManager, config);\n } else if (rotation === 0 && isSmartTicks === false) {\n tickText.attr('transform', '');\n } else {\n tickText.attr('y', 0)\n .attr('x', 0)\n .text('');\n const tspan = makeElement(tickText, 'tspan', (d, i) => _smartTicks[i].lines, 'smart-text');\n tspan.attr('dy', '0')\n .style('opacity', '0')\n .transition()\n .duration(1000)\n .attr('dy', (d, i) => {\n if (orientation === BOTTOM || i !== 0) {\n return _smartTicks[i].oriTextHeight;\n }\n return -_smartTicks[i].oriTextHeight * (_smartTicks[i].lines.length - 1) - tickSize;\n })\n .style('opacity', 1)\n .attr('x', 0)\n .text(e => e);\n }\n\n return tickText;\n};\n\nconst setFixedBaseline = (axisInstance) => {\n const {\n fixedBaseline\n } = axisInstance.config();\n if (fixedBaseline) {\n axisInstance.setFixedBaseline();\n }\n};\n\n/**\n *\n *\n * @param {*} textNode\n * @param {*} orientation\n * @param {*} measures\n */\nconst setAxisNamePos = (textNode, orientation, measures) => {\n const {\n axisNameHeight,\n yOffset,\n labelOffset,\n availableSpace\n } = measures;\n switch (orientation) {\n case AxisOrientation.LEFT:\n textNode.attr('transform',\n `translate(${-(availableSpace.width - axisNameHeight)},${yOffset + labelOffset})rotate(-90)`);\n break;\n case AxisOrientation.RIGHT:\n textNode.attr('transform',\n `translate(${(availableSpace.width - axisNameHeight)},${yOffset + labelOffset})rotate(90)`);\n break;\n case AxisOrientation.TOP:\n textNode.attr('transform',\n `translate(${availableSpace.width / 2},${-availableSpace.height + axisNameHeight})`);\n break;\n case AxisOrientation.BOTTOM:\n textNode.attr('transform',\n `translate(${availableSpace.width / 2},${availableSpace.height - axisNameHeight / 2})`);\n break;\n default:\n }\n return textNode;\n};\n\n/**\n * This method is used to render the axis inside an\n * svg container.\n *\n * @export\n * @param {Object} axisInstance the nput object required to render axis\n * @param {string} axisInstance.orientation the orientation of axis\n * @param {Object} axisInstance.scale instance of d3 scale\n * @param {SVGElement} axisInstance.container the container in which to render\n */\nexport function renderAxis (axisInstance) {\n const config = axisInstance.config();\n const labelManager = axisInstance.dependencies().labelManager;\n const mount = axisInstance.mount();\n const range = axisInstance.range();\n const axis = axisInstance.axis();\n const scale = axisInstance.scale();\n const {\n _axisNameStyle,\n _tickLabelStyle,\n formatter,\n tickValues\n } = axisInstance;\n const {\n orientation,\n name,\n labels,\n xOffset,\n yOffset,\n axisNamePadding,\n className,\n showAxisName,\n show,\n id,\n interpolator,\n classPrefix\n } = config;\n\n if (!show) {\n return;\n }\n\n const tickSize = axisInstance.getTickSize();\n\n const selectContainer = makeElement(selectElement(mount), 'g', [axisInstance], `${className}`, {},\n key => key.config().id);\n\n // Set style for tick labels\n labelManager.setStyle(_tickLabelStyle);\n\n // @to-do: Need to write a configuration override using decorator pattern\n if (interpolator === 'linear') {\n // Set ticks for the axis\n axisInstance.setTickValues();\n }\n\n const labelFunc = scale.ticks || scale.quantile || scale.domain;\n\n formatter && axis.tickFormat(formatter(tickValues || axis.tickValues() || labelFunc()));\n\n // Get range(length of range)\n const availableSpace = Math.abs(range[0] - range[1]);\n\n // Get width and height taken by axis labels\n const labelProps = axisInstance.axisDimensions().tickLabelDim;\n\n // Draw axis ticks\n selectContainer.attr('transform', `translate(${xOffset},${yOffset})`);\n setFixedBaseline(axisInstance);\n if (labels.smartTicks === false) {\n selectContainer.transition()\n .duration(1000).call(axis);\n } else {\n selectContainer.call(axis);\n }\n selectContainer.selectAll('.tick').classed(`${classPrefix}-ticks`, true);\n selectContainer.selectAll('.tick line').classed(`${classPrefix}-tick-lines`, true);\n\n // Set classes for ticks\n const tickText = selectContainer.selectAll('.tick text');\n tickText.classed(`${classPrefix}-ticks`, true)\n .classed(`${classPrefix}-ticks-${id}`, true);\n changeTickOrientation(selectContainer, axisInstance, tickSize);\n\n // Create axis name\n const textNode = makeElement(selectContainer, 'text', [name], `${classPrefix}-axis-name`)\n .attr('text-anchor', 'middle')\n .classed(`${classPrefix}-axis-name-${id}`, true)\n .text(d => d);\n\n // Hide axis name if show is off\n textNode.classed(HIDDEN, !showAxisName);\n\n // render labels based on orientation of axis\n const labelOffset = availableSpace / 2;\n\n // Set style for axis name\n labelManager.setStyle(_axisNameStyle);\n const axisNameSpace = labelManager.getOriSize(name);\n const measures = {\n labelProps,\n tickSize,\n axisNamePadding,\n axisNameHeight: axisNameSpace.height,\n axisNameWidth: axisNameSpace.width,\n yOffset,\n xOffset,\n labelOffset,\n availableSpace: axisInstance.availableSpace()\n };\n // Set position for axis name\n setAxisNamePos(textNode, orientation, measures);\n}\n","import { TOP, LEFT, BOTTOM } from '../enums/axis-orientation';\nimport { LOG } from '../enums/scale-type';\n\nexport const getNumberOfTicks = (availableSpace, labelDim, axis, axisInstance) => {\n const ticks = axis.scale().ticks();\n const { numberOfTicks } = axisInstance.config();\n const tickLength = ticks.length;\n let numberOfValues = tickLength;\n\n if (tickLength * (labelDim * 1.5) > availableSpace) {\n numberOfValues = Math.floor(availableSpace / (labelDim * 1.5));\n }\n\n numberOfValues = Math.min(numberOfTicks, Math.max(1, numberOfValues));\n return axis.scale().ticks(numberOfValues);\n};\n\nexport const sanitizeDomain = (domain, context) => {\n const interpolator = context.config().interpolator;\n // @todo: Get from scale decorator\n if (interpolator === LOG && domain[0] >= 0) {\n return [Math.max(1, domain[0]), Math.max(1, domain[1])];\n }\n return domain;\n};\n\nexport const getTickFormatter = (tickFormat, numberFormat) => {\n if (tickFormat) {\n return ticks => (val, i) => tickFormat(numberFormat(val), i, ticks);\n }\n return () => val => numberFormat(val);\n};\n\n/**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\nexport const getTickLabelInfo = (context) => {\n let largestLabel = '';\n let labelProps;\n let smartTick = {};\n let axisTickLabels;\n const scale = context.scale();\n const allLabelLengths = [];\n const { tickFormat, tickValues, numberFormat } = context.config();\n const labelFunc = scale.ticks || scale.quantile || scale.domain;\n // set the style on the shared label manager instance\n const { labelManager } = context.dependencies();\n\n labelManager.setStyle(context._tickLabelStyle);\n // get the values along the domain\n\n axisTickLabels = tickValues || labelFunc();\n // Get the tick labels\n axisTickLabels = axisTickLabels.map((originalLabel, i) => {\n const formattedLabel = numberFormat(originalLabel);\n\n // get formats of tick if any\n const label = tickFormat ? tickFormat(formattedLabel, i, axisTickLabels) : (scale.tickFormat ?\n numberFormat(scale.tickFormat()(originalLabel)) : formattedLabel);\n\n // convert to string for quant values\n const temp = label.toString();\n // Get spaces for all labels\n allLabelLengths.push(labelManager.getOriSize(temp));\n // Getting largest label\n if (temp.length > largestLabel.length) {\n largestLabel = temp;\n smartTick = context.smartTicks() ? context.smartTicks()[i] : {};\n labelProps = allLabelLengths[i];\n }\n return label;\n });\n\n labelProps = labelManager.getOriSize(largestLabel);\n\n return { largestLabel, largestLabelDim: labelProps, axisTickLabels, allLabelLengths, smartTick };\n};\n\n/**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\nexport const computeAxisDimensions = (context) => {\n let tickLabelDim = {};\n const {\n name,\n labels,\n tickValues\n } = context.config();\n const angle = ((labels.smartTicks) ? 0 : labels.rotation) * Math.PI / 180;\n const { labelManager } = context.dependencies();\n const {\n largestLabelDim,\n axisTickLabels,\n smartTick\n } = getTickLabelInfo(context);\n const { height: labelHeight, width: labelWidth } = largestLabelDim;\n // get the domain of axis\n const domain = context.domain();\n\n if (domain.length === 0) {\n return null;\n }\n if (context._rotationLock === false) {\n context.setRotationConfig(tickValues || axisTickLabels, largestLabelDim.width);\n context._rotationLock = false;\n }\n if (labels.smartTicks) {\n tickLabelDim = smartTick;\n } else {\n tickLabelDim = {\n width: Math.abs(labelHeight * Math.sin(angle)) + Math.abs(labelWidth * Math.cos(angle)),\n height: Math.abs(labelWidth * Math.sin(angle)) + Math.abs(labelHeight * Math.cos(angle))\n };\n }\n\n labelManager.setStyle(context._axisNameStyle);\n return {\n tickSize: context.getTickSize(),\n tickLabelDim,\n axisLabelDim: labelManager.getOriSize(name),\n largestLabelDim,\n axisTickLabels\n };\n};\n\n/**\n*\n*\n* @memberof SimpleAxis\n*/\nexport const setOffset = (context) => {\n let x = 0;\n let y = 0;\n const logicalSpace = context.logicalSpace();\n const config = context.config();\n const {\n orientation,\n xOffset,\n yOffset\n } = config;\n if (orientation === LEFT) {\n x = xOffset === undefined ? logicalSpace.width : xOffset;\n }\n if (orientation === TOP) {\n y = yOffset === undefined ? logicalSpace.height : yOffset;\n }\n context.config({ xOffset: x, yOffset: y });\n};\n\n/**\n *\n *\n * @param {*} timeDiff\n * @param {*} range\n * @param {*} domain\n * @returns\n */\nconst getAxisOffset = (timeDiff, range, domain) => {\n const pvr = Math.abs(range[1] - range[0]) / (domain[1] - domain[0]);\n const width = (pvr * timeDiff);\n const avWidth = (range[1] - range[0]);\n const bars = avWidth / width;\n const barWidth = avWidth / (bars + 1);\n const diff = avWidth - barWidth * bars;\n\n return diff / 2;\n};\n\nexport const adjustRange = (minDiff, range, domain, orientation) => {\n const diff = getAxisOffset(minDiff, range, domain);\n\n if (orientation === TOP || orientation === BOTTOM) {\n range[0] += diff;\n range[1] -= diff;\n } else {\n range[0] -= diff;\n range[1] += diff;\n }\n return range;\n};\n\n /**\n * Listener attached to the axis on change of parameters.\n *\n * @param {Function} callback to be excuted on change of domain range etc\n * @memberof SimpleAxis\n */\nexport const registerChangeListeners = (context) => {\n const store = context.store();\n\n store.model.next(['domain', 'range', 'mount', 'config'], (...params) => {\n context.render();\n context._domainLock = false;\n context._eventList.forEach((e) => {\n e.action instanceof Function && e.action(...params);\n });\n }, true);\n return context;\n};\n\n/**\n *\n *\n * @param {*} axisDimensions\n * @param {*} config\n * @param {*} range\n * @returns\n */\nexport const getHorizontalAxisSpace = (context, axisDimensions, config, range) => {\n let width;\n let height;\n const {\n tickSize,\n tickLabelDim,\n axisLabelDim\n } = axisDimensions;\n const {\n axisNamePadding,\n showAxisName,\n tickValues\n } = config;\n const domain = context.domain();\n const { height: axisDimHeight } = axisLabelDim;\n const { height: tickDimHeight, width: tickDimWidth } = tickLabelDim;\n\n width = range && range.length ? range[1] - range[0] : 0;\n\n height = 0;\n if (tickValues) {\n const minTickDiff = context.getMinTickDifference();\n const [min, max] = [Math.min(...tickValues, ...domain), Math.max(...tickValues, ...domain)];\n\n width = ((max - min) / Math.abs(minTickDiff)) * (tickDimWidth + context._minTickDistance.width);\n }\n if (!width || width === 0) {\n height = Math.max(tickDimWidth, tickDimHeight);\n } else {\n height = tickDimHeight;\n }\n height += (showAxisName ? (axisDimHeight + axisNamePadding) : 0) + tickSize;\n return {\n width,\n height\n };\n};\n\n/**\n *\n *\n * @param {*} axisDimensions\n * @param {*} config\n * @param {*} range\n * @returns\n */\nexport const getVerticalAxisSpace = (context, axisDimensions, config) => {\n let height;\n let width;\n const {\n tickSize,\n tickLabelDim,\n axisLabelDim\n } = axisDimensions;\n const {\n axisNamePadding,\n showAxisName,\n tickValues\n } = config;\n const domain = context.domain();\n const { height: axisDimHeight } = axisLabelDim;\n const { height: tickDimHeight, width: tickDimWidth } = tickLabelDim;\n\n height = 0;\n width = tickDimWidth;\n if (tickValues) {\n const minTickDiff = context.getMinTickDifference();\n const [min, max] = [Math.min(...tickValues, ...domain), Math.max(...tickValues, ...domain)];\n\n height = ((max - min) / Math.abs(minTickDiff)) * (tickDimHeight);\n }\n width += (showAxisName ? axisDimHeight : 0) + tickSize + axisNamePadding;\n\n return {\n height,\n width\n };\n};\n\n /**\n * Calculates the logical space of the axis\n * @return {Object} Width and height occupied by the axis.\n */\nexport const calculateBandSpace = (context) => {\n const range = context.range();\n const config = context.config();\n const {\n orientation,\n show\n } = config;\n const axisDimensions = context.getAxisDimensions();\n const {\n largestLabelDim,\n axisTickLabels\n } = axisDimensions;\n const { height: largestDimHeight, width: largestDimWidth } = largestLabelDim;\n\n if (orientation === TOP || orientation === BOTTOM) {\n let { width, height } = getHorizontalAxisSpace(context, axisDimensions, config, range);\n if (!width || width === 0) {\n width = axisTickLabels.length * (Math.min(largestDimWidth + context._minTickDistance.width,\n largestDimHeight + context._minTickDistance.width));\n }\n if (show === false) {\n height = 0;\n }\n return {\n width,\n height\n };\n }\n\n let { width, height } = getVerticalAxisSpace(context, axisDimensions, config, range);\n\n if (!height || height === 0) {\n height = axisTickLabels.length * (largestDimHeight + largestDimHeight / 2) + largestDimHeight;\n }\n if (show === false) {\n width = 0;\n }\n return {\n width,\n height\n };\n};\n\n/**\n * Calculates the logical space of the axis\n * @return {Object} Width and height occupied by the axis.\n */\nexport const calculateContinousSpace = (context) => {\n const range = context.range();\n const config = context.config();\n const axisDimensions = context.getAxisDimensions();\n\n const {\n orientation,\n show,\n showAxisName\n } = config;\n const {\n axisLabelDim\n } = axisDimensions;\n\n if (show === false) {\n return {\n width: 0,\n height: 0\n };\n }\n\n const { width: axisDimWidth } = axisLabelDim;\n\n if (orientation === TOP || orientation === BOTTOM) {\n const { width, height } = getHorizontalAxisSpace(context, axisDimensions, config);\n const axisWidth = Math.max(width, axisDimWidth);\n\n return {\n width: axisWidth,\n height\n };\n }\n\n const { width, height } = getVerticalAxisSpace(context, axisDimensions, config, range);\n\n const effHeight = Math.max(height, showAxisName ? axisDimWidth : 0);\n\n return {\n width,\n height: effHeight\n };\n};\n\n","import { mergeRecursive } from 'muze-utils';\n\nexport const PROPS = {\n availableSpace: {},\n axisDimensions: {},\n config: {\n sanitization: (context, value) => {\n if (value.labels && value.labels.rotation) {\n context._rotationLock = true;\n }\n value = mergeRecursive(context._config || {}, value);\n value.axisNamePadding = Math.max(value.axisNamePadding, 0);\n context.axis(context.createAxis(value));\n context.store().commit('config', value);\n return value;\n }\n },\n logicalSpace: {},\n mount: {\n sanitization: (context, value) => {\n context.store().commit('mount', value);\n return value;\n }\n },\n range: {\n sanitization: (context, value) => {\n context.scale().range(value);\n context.logicalSpace(null);\n context.store().commit('range', value);\n return value;\n }\n },\n\n smartTicks: {},\n store: {},\n tickSize: {}\n};\n","import {\n Store,\n mergeRecursive,\n getSmartComputedStyle,\n selectElement,\n generateGetterSetters,\n getUniqueId\n} from 'muze-utils';\nimport { createScale } from '../scale-creator';\nimport { axisOrientationMap, BOTTOM, TOP } from '../enums/axis-orientation';\nimport { defaultConfig } from './default-config';\nimport { renderAxis } from '../axis-renderer';\nimport { DOMAIN, BAND } from '../enums/constants';\nimport {\n computeAxisDimensions,\n setOffset,\n registerChangeListeners,\n calculateContinousSpace\n} from './helper';\nimport { PROPS } from './props';\n\nexport default class SimpleAxis {\n\n /**\n * Creates an instance of SimpleAxis.\n * @memberof SimpleAxis\n */\n constructor (config, dependencies) {\n this._id = getUniqueId();\n\n this._dependencies = dependencies;\n this._mount = null;\n this._range = [];\n this._domain = [];\n this._domainLock = false;\n this._rotationLock = false;\n this._axisDimensions = {};\n this._eventList = [];\n\n const defCon = mergeRecursive({}, this.constructor.defaultConfig());\n const simpleConfig = mergeRecursive(defCon, config);\n\n const bodyElem = selectElement('body');\n const classPrefix = simpleConfig.classPrefix;\n this._tickLabelStyle = getSmartComputedStyle(bodyElem, `${classPrefix}-ticks`);\n this._axisNameStyle = getSmartComputedStyle(bodyElem, `${classPrefix}-axis-name`);\n dependencies.labelManager.setStyle(this._tickLabelStyle);\n this._minTickDistance = dependencies.labelManager.getOriSize('ww');\n\n generateGetterSetters(this, PROPS);\n this.store(new Store({\n domain: this.domain(),\n range: this.range(),\n config: simpleConfig,\n mount: this.mount()\n }));\n this.config(simpleConfig);\n\n this._scale = this.createScale(this._config);\n this._axis = this.createAxis(this._config);\n\n registerChangeListeners(this);\n }\n\n /**\n * Returns the default configuration of simple axis\n * @return {Object} default configurations\n */\n static defaultConfig () {\n return defaultConfig;\n }\n\n /**\n * Sets a fixed baseline for the first ticks so that they can render effectively within\n * the given area\n *\n * @param {*} tickText\n * @param {*} config\n * @param {*} labelManager\n */\n setFixedBaseline () {\n return this;\n }\n\n /**\n *\n *\n * @readonly\n * @memberof SimpleAxis\n */\n scale (...params) {\n if (params.length) {\n this._scale = params[0];\n return this;\n }\n return this._scale;\n }\n\n /**\n *\n *\n * @readonly\n * @memberof SimpleAxis\n */\n axis (...params) {\n if (params.length) {\n this._axis = params[0];\n return this;\n }\n return this._axis;\n }\n\n /**\n *\n *\n * @param {*} d\n * @returns\n * @memberof SimpleAxis\n */\n domain (...domain) {\n if (domain.length) {\n this.scale().domain(domain[0]);\n this._domain = this.scale().domain();\n this.smartTicks(this.setTickConfig());\n this.store().commit(DOMAIN, this._domain);\n this.logicalSpace(null);\n return this;\n }\n return this._domain;\n }\n\n /**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\n dependencies () {\n return this._dependencies;\n }\n\n /**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\n createScale (config) {\n const {\n base,\n padding,\n interpolator,\n exponent\n } = config;\n const range = this.range();\n const scale = createScale({\n padding,\n interpolator,\n exponent,\n base,\n range,\n type: this.constructor.type()\n });\n\n return scale;\n }\n\n getTickFormatter (tickFormat, numberFormat) {\n if (tickFormat) {\n return ticks => (val, i) => tickFormat(numberFormat(val), i, ticks);\n }\n return () => val => numberFormat(val);\n }\n\n /**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\n createAxis (config) {\n const {\n tickFormat,\n numberFormat,\n orientation\n } = config;\n const axisClass = axisOrientationMap[orientation];\n\n if (axisClass) {\n const axis = axisClass(this.scale());\n this.formatter = this.getTickFormatter(tickFormat, numberFormat);\n\n return axis;\n }\n return null;\n }\n\n /**\n *\n *\n * @memberof SimpleAxis\n */\n setTickConfig () {\n return this;\n }\n\n /**\n *\n *\n * @param {*} axisTickLabels\n * @param {*} labelWidth\n * @returns\n * @memberof SimpleAxis\n */\n setRotationConfig (axisTickLabels, labelWidth) {\n const { orientation } = this.config();\n\n if (orientation === TOP || orientation === BOTTOM) {\n const range = this.range();\n const length = Math.abs(range[0] - range[1]);\n this.config({ labels: { rotation: 0 } });\n if (length > 0 && axisTickLabels.length * (labelWidth + this._minTickDistance.width) > length) {\n this.config({ labels: { rotation: -90 } });\n }\n }\n return this;\n }\n\n /**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\n adjustRange () {\n return this;\n }\n\n getScaleValue (domainVal) {\n if (domainVal === null || domainVal === undefined) {\n return undefined;\n }\n return this.scale()(domainVal);\n }\n\n /**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\n getTickSize () {\n return this.axis().tickSize();\n }\n\n /**\n * Gets the space occupied by the parts of an axis\n *\n * @return {Object} object with details about sizes of the axis.\n * @memberof SimpleAxis\n */\n getAxisDimensions () {\n this.axisDimensions(computeAxisDimensions(this));\n return this.axisDimensions();\n }\n\n /**\n * Gets the space occupied by the axis\n *\n * @return {Object} object with details about size of the axis.\n * @memberof SimpleAxis\n */\n getLogicalSpace () {\n if (!this.logicalSpace()) {\n this.logicalSpace(calculateContinousSpace(this));\n setOffset(this);\n this.logicalSpace();\n }\n return this.logicalSpace();\n }\n\n /**\n * Returns the value from the domain when given a value from the range.\n * @param {number} value Value from the range.\n * @return {number} Value\n */\n invert (...value) {\n const values = value.map(d => this.scale().invert(d)) || [];\n return value.length === 1 ? values[0] : values;\n }\n\n /**\n * Gets the nearest range value from the given range values.\n * @param {number} v1 Start range value\n * @param {number} v2 End range value\n * @return {Array} range values\n */\n getNearestRange (v1, v2) {\n let p1;\n let p2;\n let extent;\n const {\n type\n } = this.config();\n const scale = this.scale();\n const range = scale.range();\n const reverse = range[0] > range[1];\n\n if (type === BAND) {\n extent = scale.invertExtent(v1, v2);\n p1 = scale(reverse ? extent[extent.length - 1] : extent[0]);\n p2 = scale(reverse ? extent[0] : extent[extent.length - 1]) + scale.bandwidth();\n return [p1, p2];\n }\n return [v1, v2];\n }\n\n /**\n * This method is used to assign a domain to the axis.\n *\n * @param {Array} domain the domain of the scale\n * @memberof SimpleAxis\n */\n updateDomainBounds (domain) {\n let currentDomain = this.domain();\n if (this.config().domain) {\n currentDomain = this.config().domain;\n } else {\n if (currentDomain.length === 0) {\n currentDomain = domain;\n }\n if (domain.length) {\n currentDomain = [Math.min(currentDomain[0], domain[0]), Math.max(currentDomain[1], domain[1])];\n }\n }\n\n return this.domain(currentDomain);\n }\n\n /**\n *\n *\n * @param {*} domain\n * @returns\n * @memberof SimpleAxis\n */\n updateDomainCache (domain) {\n if (this._domainLock === false) {\n this.domain([]);\n this._domainLock = true;\n }\n const cachedDomain = [];\n domain && domain.forEach((d) => {\n d !== undefined && d !== null && cachedDomain.push(d);\n });\n return this.updateDomainBounds(cachedDomain);\n }\n\n getMinTickDifference () {\n return this.domain();\n }\n\n getFormattedTickValues (tickValues) {\n return tickValues;\n }\n\n /**\n *\n *\n * @param {*} tickValues\n * @returns\n * @memberof SimpleAxis\n */\n setTickValues () {\n const {\n tickValues\n } = this.config();\n\n if (tickValues) {\n tickValues instanceof Array && this.axis().tickValues(tickValues);\n return this;\n }\n return this;\n }\n\n /**\n * This method returns the width in pixels for one\n * unit along the axis. It is only applicable to band scale\n * and returns undefined for other scale type.\n *\n * @return {number} the width of one band along band scale axis\n * @memberof SimpleAxis\n */\n getUnitWidth () {\n return 0;\n }\n\n /**\n * This method returns an object that can be used to\n * reconstruct this instance.\n *\n * @return {Object} the serializable props of axis\n * @memberof SimpleAxis\n */\n serialize () {\n return {\n name: this.name,\n type: this.type,\n range: this.range(),\n config: this.config()\n };\n }\n\n /**\n * Returns the id of the axis.\n * @return {string} Unique identifier of the axis.\n */\n get id () {\n return this._id;\n }\n\n registerEvent (event, fn) {\n this._eventList.push({ name: event, action: fn });\n }\n\n /**\n *\n *\n * @param {*} fn\n * @memberof SimpleAxis\n */\n on (event, fn) {\n event = event || 'update';\n this.registerEvent(event, fn);\n }\n\n /**\n * This method is used to render the axis inside\n * the supplied svg container.\n *\n * @param {SVGElement} svg the svg element in which to render the path\n * @memberof SimpleAxis\n */\n /* istanbul ignore next */render () {\n if (this.mount()) {\n renderAxis(this);\n }\n return this;\n }\n\n /**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\n remove () {\n this.store().unsubscribeAll();\n selectElement(this.mount()).remove();\n return this;\n }\n\n /**\n *\n *\n * @memberof SimpleAxis\n */\n unsubscribe () {\n this.store().unsubscribeAll();\n return this;\n }\n\n /**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\n isReverse () {\n const range = this.range();\n return range[0] > range[1];\n }\n\n /**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\n getPixelToValueRatio () {\n const scale = this.scale();\n const range = scale.range();\n const domain = scale.domain();\n\n return Math.abs(range[1] - range[0]) / (domain[1] - domain[0]);\n }\n}\n\n","import { scaleMap } from '../../scale-creator';\n\nexport default class LinearInterpolator {\n\n createScale (config) {\n const {\n range\n } = config;\n const scaleFactory = scaleMap.linear;\n this._scale = scaleFactory().range(range);\n return this._scale;\n }\n\n getScaleValue (domainVal) {\n return this._scale(domainVal) + 0.5;\n }\n\n sanitizeDomain (domain) {\n return domain;\n }\n}\n","import { scaleMap } from '../../scale-creator';\n\nexport default class LogInterpolator {\n\n createScale (config) {\n const {\n range,\n base\n } = config;\n const scaleFactory = scaleMap.log;\n this._scale = scaleFactory().range(range).base(base);\n return this._scale;\n }\n\n getScaleValue (domainVal) {\n if (domainVal <= 0) {\n return 1;\n }\n\n return this._scale(domainVal) + 0.5;\n }\n\n sanitizeDomain (domain) {\n if (domain[0] <= 0) {\n return [Math.max(1, domain[0]), Math.max(1, domain[1])];\n } return domain;\n }\n}\n","import { scaleMap } from '../../scale-creator';\n\nexport default class PowInterpolator {\n\n createScale (config) {\n const {\n range,\n exponent\n } = config;\n const scaleFactory = scaleMap.pow;\n this._scale = scaleFactory().range(range).exponent(exponent);\n return this._scale;\n }\n\n getScaleValue (domainVal) {\n return this._scale(domainVal) + 0.5;\n }\n\n sanitizeDomain (domain) {\n return domain;\n }\n}\n","import { getSmallestDiff } from 'muze-utils';\nimport SimpleAxis from './simple-axis';\nimport { BOTTOM, TOP, LEFT, RIGHT } from '../enums/axis-orientation';\nimport { LINEAR, LOG, POW } from '../enums/scale-type';\nimport { LogInterpolator, PowInterpolator, LinearInterpolator } from './interpolators';\nimport { DOMAIN } from '../enums/constants';\nimport {\n getTickLabelInfo,\n getNumberOfTicks\n} from './helper';\n\nexport const interpolatorMap = {\n [LOG]: LogInterpolator,\n [POW]: PowInterpolator,\n [LINEAR]: LinearInterpolator\n};\n\nexport default class ContinousAxis extends SimpleAxis {\n constructor (config, dependencies) {\n config.tickFormat = config.tickFormat || (val => val);\n super(config, dependencies);\n }\n /**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\n createScale (config) {\n const {\n base,\n padding,\n interpolator,\n exponent\n } = config;\n const range = this.range();\n const InterpolatorCls = interpolatorMap[interpolator];\n\n this._interpolator = new InterpolatorCls();\n let scale = this._interpolator.createScale({\n padding,\n exponent,\n base,\n range\n });\n\n scale = scale.nice();\n return scale;\n }\n\n /**\n * This method is used to assign a domain to the axis.\n *\n * @param {Array} domain the domain of the scale\n * @memberof SimpleAxis\n */\n updateDomainBounds (domain) {\n let currentDomain = this.domain();\n if (this.config().domain) {\n currentDomain = this.config().domain;\n } else {\n if (currentDomain.length === 0) {\n currentDomain = domain;\n }\n if (domain.length) {\n currentDomain = [Math.min(currentDomain[0], domain[0]), Math.max(currentDomain[1], domain[1])];\n }\n }\n\n return this.domain(currentDomain);\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof ContinousAxis\n */\n static type () {\n return LINEAR;\n }\n\n getScaleValue (domainVal) {\n if (domainVal === null || domainVal === undefined) {\n return undefined;\n }\n return this._interpolator.getScaleValue(domainVal);\n }\n /**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\n getTickSize () {\n const {\n showInnerTicks,\n showOuterTicks\n } = this.config();\n const axis = this.axis();\n axis.tickSizeInner(showInnerTicks === false ? 0 : 6);\n axis.tickSizeOuter(showOuterTicks === false ? 0 : 6);\n return axis.tickSize();\n }\n\n /**\n *\n *\n * @param {*} d\n * @returns\n * @memberof SimpleAxis\n */\n domain (domain) {\n if (domain && domain.length) {\n const { nice } = this.config();\n if (domain.length && domain[0] === domain[1]) {\n domain = [0, +domain[0] * 2];\n }\n this.scale().domain(domain);\n nice && this.scale().nice();\n this._domain = this.scale().domain();\n this.store().commit(DOMAIN, this._domain);\n this.logicalSpace(null);\n return this;\n } return this._domain;\n }\n\n /**\n * This method is used to set the space availiable to render\n * the SimpleCell.\n *\n * @param {number} width The width of SimpleCell.\n * @param {number} height The height of SimpleCell.\n * @memberof AxisCell\n */\n setAvailableSpace (width = 0, height, padding, isOffset) {\n const {\n left,\n right,\n top,\n bottom\n } = padding;\n const {\n orientation,\n fixedBaseline\n } = this.config();\n const { tickLabelDim } = this.getAxisDimensions();\n this.availableSpace({ width, height });\n\n if (orientation === TOP || orientation === BOTTOM) {\n const labelSpace = tickLabelDim.width;\n this.range([(fixedBaseline ? 0 : (labelSpace / 2)) + left, width - right - labelSpace / 2]);\n const axisHeight = this.getLogicalSpace().height;\n isOffset && this.config({ yOffset: Math.max(axisHeight, height) });\n } else {\n const labelSpace = tickLabelDim.height;\n this.range([height - bottom - (fixedBaseline ? 1 : (labelSpace / 2)), labelSpace / 2 + top]);\n const axisWidth = this.getLogicalSpace().width;\n isOffset && this.config({ xOffset: Math.max(axisWidth, width) });\n }\n return this;\n }\n\n /**\n *\n *\n * @param {*} tickValues\n * @returns\n * @memberof SimpleAxis\n */\n setTickValues () {\n const {\n tickValues\n } = this.config();\n const axis = this.axis();\n\n if (tickValues) {\n tickValues instanceof Array && this.axis().tickValues(tickValues);\n return this;\n }\n axis.tickValues(this.getTickValues());\n return this;\n }\n\n /**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\n getTickValues () {\n let labelDim = 0;\n const {\n orientation,\n tickValues\n } = this.config();\n const range = this.range();\n const axis = this.axis();\n\n const availableSpace = Math.abs(range[0] - range[1]);\n\n const labelProps = getTickLabelInfo(this).largestLabelDim;\n\n if (tickValues) {\n return axis.scale().ticks(tickValues);\n }\n labelDim = labelProps[orientation === BOTTOM || orientation === TOP ? 'width' : 'height'];\n\n return getNumberOfTicks(availableSpace, labelDim, axis, this);\n }\n\n getMinTickDifference () {\n return getSmallestDiff(this.config().tickValues);\n }\n\n /**\n * Sets a fixed baseline for the first ticks so that they can render effectively within\n * the given area\n *\n * @param {*} tickText\n * @param {*} config\n * @param {*} labelManager\n */\n setFixedBaseline (tickText) {\n const {\n orientation,\n labels\n } = this.config();\n const {\n rotation\n } = labels;\n const axis = this.axis();\n const { width, height } = this._axisDimensions.largestLabelDim;\n axis.tickTransform((d, i) => {\n if (i === 0 && (orientation === LEFT || orientation === RIGHT)) {\n return `translate(0, -${(height) / 3}px)`;\n }\n if (i === 0 && (orientation === TOP || orientation === BOTTOM) && rotation === 0) {\n return `translate(${width / 2}px, ${0}px) rotate(${rotation}deg)`;\n } return '';\n });\n return tickText;\n }\n\n}\n","import SimpleAxis from './simple-axis';\nimport { BAND } from '../enums/scale-type';\nimport { TOP, BOTTOM } from '../enums/axis-orientation';\nimport { calculateBandSpace, setOffset } from './helper';\n\nexport default class BandAxis extends SimpleAxis {\n\n /**\n *\n *\n * @param {*} range\n * @returns\n * @memberof BandAxis\n */\n createScale (range) {\n const scale = super.createScale(range);\n const { padding } = this.config();\n if (typeof padding === 'number') {\n scale.padding(padding);\n }\n return scale;\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof BandAxis\n */\n static type () {\n return BAND;\n }\n\n /**\n *\n *\n * @param {*} width\n * @param {*} height\n * @param {*} padding\n * @param {*} isOffset\n * @memberof BandAxis\n */\n setAvailableSpace (width, height, padding, isOffset) {\n const {\n left,\n right,\n top,\n bottom\n } = padding;\n const {\n orientation,\n showAxisName,\n axisNamePadding\n } = this.config();\n const { axisLabelDim } = this.getAxisDimensions();\n const { height: axisDimHeight } = axisLabelDim;\n\n this.availableSpace({ width, height });\n if (orientation === TOP || orientation === BOTTOM) {\n // Set x axis range\n this.range([0, width - left - right]);\n const axisHeight = this.getLogicalSpace().height - (showAxisName === false ?\n (axisDimHeight + axisNamePadding) : 0);\n isOffset && this.config({ yOffset: Math.max(axisHeight, height) });\n } else {\n // Set y axis range\n this.range([height - bottom, top]);\n const axisWidth = this.getLogicalSpace().width - (showAxisName === false ? axisDimHeight : 0);\n isOffset && this.config({ xOffset: Math.max(axisWidth, width) });\n }\n return this;\n }\n\n /**\n *\n *\n * @returns\n * @memberof BandAxis\n */\n getUnitWidth () {\n return this.scale().bandwidth();\n }\n\n /**\n *\n *\n * @returns\n * @memberof BandAxis\n */\n setTickConfig () {\n let smartTicks = '';\n let smartlabel;\n const { maxWidth, maxHeight, tickFormat } = this.config();\n const { labelManager } = this._dependencies;\n const domain = this.axis().scale().domain();\n\n smartTicks = domain;\n const tickFormatter = tickFormat || (val => val);\n\n if (domain && domain.length) {\n smartTicks = domain.map((d, i) => {\n labelManager.useEllipsesOnOverflow(true);\n smartlabel = labelManager.getSmartText(tickFormatter(d, i, domain), maxWidth, maxHeight);\n return labelManager.constructor.textToLines(smartlabel);\n });\n }\n return smartTicks;\n }\n\n/**\n * Gets the space occupied by the axis\n *\n * @return {Object} object with details about size of the axis.\n * @memberof SimpleAxis\n */\n getLogicalSpace () {\n if (!this.logicalSpace()) {\n this.logicalSpace(calculateBandSpace(this));\n setOffset(this);\n this.logicalSpace();\n }\n return this.logicalSpace();\n }\n /**\n *\n *\n * @param {*} axisTickLabels\n * @param {*} labelWidth\n * @returns\n * @memberof BandAxis\n */\n setRotationConfig (axisTickLabels, labelWidth) {\n const { orientation } = this.config();\n const range = this.range();\n const availSpace = Math.abs(range[0] - range[1]);\n\n this.config({ labels: { rotation: 0, smartTicks: false } });\n if (orientation === TOP || orientation === BOTTOM) {\n const smartWidth = this.smartTicks().reduce((acc, n) => acc + n.width + this._minTickDistance.width, 0);\n // set multiline config\n if (availSpace > 0 && axisTickLabels.length * (labelWidth + this._minTickDistance.width) > availSpace) {\n if (availSpace && smartWidth < availSpace) {\n this.config({ labels: { smartTicks: true } });\n } else {\n this.config({ labels: { rotation: -90 } });\n }\n }\n }\n return this;\n }\n\n /**\n *\n *\n * @returns\n * @memberof BandAxis\n */\n getTickValues () {\n return this.axis().scale().domain();\n }\n\n /**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\n getTickSize () {\n const {\n showInnerTicks,\n showOuterTicks\n } = this.config();\n const axis = this.axis();\n\n axis.tickSizeInner(showInnerTicks ? 6 : 0);\n axis.tickSizeOuter(showOuterTicks ? 6 : 0);\n return axis.tickSize();\n }\n\n /**\n * This method is used to assign a domain to the axis.\n *\n * @param {Array} domain the domain of the scale\n * @memberof SimpleAxis\n */\n updateDomainBounds (domain) {\n let currentDomain = this.domain();\n if (this.config().domain) {\n currentDomain = this.config().domain;\n } else {\n if (currentDomain.length === 0) {\n currentDomain = domain;\n }\n currentDomain = currentDomain.concat(domain);\n }\n this.domain(currentDomain);\n return this;\n }\n\n /**\n * Returns the value from the domain when given a value from the range.\n * @param {number} value Value from the range.\n * @return {number} Value\n */\n invert (...value) {\n const values = value.map(d => this.scale().invert(d)) || [];\n return value.length === 1 ? values[0] && values[0].toString() : values.map(d => d.toString());\n }\n}\n","import { getSmallestDiff } from 'muze-utils';\nimport SimpleAxis from './simple-axis';\nimport { adjustRange } from './helper';\nimport { TIME } from '../enums/scale-type';\nimport { axisOrientationMap, BOTTOM, TOP } from '../enums/axis-orientation';\nimport { DOMAIN } from '../enums/constants';\n\n/**\n *\n *\n * @export\n * @class TimeAxis\n * @extends {SimpleAxis}\n */\nexport default class TimeAxis extends SimpleAxis {\n\n constructor (...params) {\n super(...params);\n this._minDiff = Infinity;\n }\n\n /**\n *\n *\n * @param {*} range\n * @returns\n * @memberof TimeAxis\n */\n createScale (range) {\n let scale = super.createScale(range);\n\n scale = scale.nice();\n return scale;\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof TimeAxis\n */\n static type () {\n return TIME;\n }\n\n /**\n *\n *\n * @returns\n * @memberof BandAxis\n */\n setTickConfig () {\n let smartTicks;\n let smartlabel;\n const { maxWidth, maxHeight, tickFormat } = this.config();\n const { labelManager } = this._dependencies;\n const domain = this.getTickValues();\n const scale = this.scale();\n\n smartTicks = domain;\n const tickFormatter = tickFormat || scale.tickFormat();\n\n if (domain && domain.length) {\n smartTicks = domain.map((d, i) => {\n smartlabel = labelManager.getSmartText(tickFormatter(d, i, domain), maxWidth, maxHeight);\n return labelManager.constructor.textToLines(smartlabel);\n });\n }\n return smartTicks;\n }\n\n /**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\n createAxis (config) {\n const {\n tickFormat,\n orientation\n } = config;\n const axisClass = axisOrientationMap[orientation];\n\n if (axisClass) {\n const axis = axisClass(this.scale());\n this.formatter = this.getTickFormatter(tickFormat);\n return axis;\n }\n return null;\n }\n\n getTickFormatter (tickFormat) {\n if (tickFormat) {\n return ticks => (val, i) => tickFormat(val, i, ticks);\n }\n return null;\n }\n\n /**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\n getTickSize () {\n const {\n showInnerTicks,\n showOuterTicks\n } = this.config();\n const axis = this.axis();\n axis.tickSizeInner(showInnerTicks === false ? 0 : 6);\n axis.tickSizeOuter(showOuterTicks === false ? 0 : 6);\n return super.getTickSize();\n }\n\n /**\n *\n *\n * @returns\n * @memberof TimeAxis\n */\n getTickValues () {\n return this.scale().ticks();\n }\n\n /**\n *\n *\n * @param {*} diff\n * @returns\n * @memberof TimeAxis\n */\n minDiff (diff) {\n this._minDiff = Math.min(this._minDiff, diff);\n return this;\n }\n\n /**\n *\n *\n * @param {*} axisTickLabels\n * @param {*} labelWidth\n * @returns\n * @memberof BandAxis\n */\n setRotationConfig (axisTickLabels, labelWidth) {\n const { orientation } = this.config();\n const range = this.range();\n const availSpace = Math.abs(range[0] - range[1]);\n\n this.config({ labels: { rotation: 0, smartTicks: false } });\n if (orientation === TOP || orientation === BOTTOM) {\n const smartWidth = this.smartTicks().reduce((acc, n) => acc + n.width, 0);\n // set multiline config\n if (availSpace > 0 && axisTickLabels.length * labelWidth > availSpace) {\n if (availSpace && smartWidth * 1.25 < availSpace) {\n this.config({ labels: { smartTicks: true } });\n }\n this.config({ labels: { rotation: -90 } });\n }\n }\n return this;\n }\n\n /**\n *\n *\n * @param {*} d\n * @returns\n * @memberof SimpleAxis\n */\n domain (domain) {\n if (domain) {\n const { nice } = this.config();\n\n if (domain.length && domain[0] === domain[1]) {\n domain = [0, +domain[0] * 2];\n }\n this.scale().domain(domain);\n nice && this.scale().nice();\n this._domain = this.scale().domain();\n this.smartTicks(this.setTickConfig());\n this.store().commit(DOMAIN, this._domain);\n this.logicalSpace(null);\n return this;\n } return this._domain;\n }\n\n getMinTickDifference () {\n return getSmallestDiff(this.config().tickValues);\n }\n\n /**\n *\n *\n * @param {*} width\n * @param {*} height\n * @param {*} padding\n * @param {*} isOffset\n * @memberof TimeAxis\n */\n setAvailableSpace (width, height, padding, isOffset) {\n const {\n left,\n right,\n top,\n bottom\n } = padding;\n const {\n orientation,\n showAxisName,\n axisNamePadding\n } = this.config();\n const domain = this.domain();\n const { axisLabelDim, tickLabelDim } = this.getAxisDimensions();\n const { height: axisDimHeight } = axisLabelDim;\n const { height: tickDimHeight, width: tickDimWidth } = tickLabelDim;\n\n this.availableSpace({ width, height });\n if (orientation === TOP || orientation === BOTTOM) {\n const labelSpace = tickDimWidth;\n this.range(adjustRange(this._minDiff, [labelSpace / 2, width - left - right - labelSpace / 2],\n domain, orientation));\n const axisHeight = this.getLogicalSpace().height - (showAxisName === false ?\n (axisDimHeight + axisNamePadding) : 0);\n isOffset && this.config({ yOffset: Math.max(axisHeight, height) });\n } else {\n const labelSpace = tickDimHeight;\n this.range(adjustRange(this._minDiff, [height - top - bottom - labelSpace / 2, labelSpace / 2],\n domain, orientation));\n const axisWidth = this.getLogicalSpace().width - (showAxisName === false ? axisDimHeight : 0);\n this.isOffset && this.config({ xOffset: Math.max(axisWidth, width) });\n }\n return this;\n }\n\n}\n","export const x11Colors = {\n Pink: { hex: 'ffc0cb', rgb: '255,192,203' },\n LightPink: { hex: 'ffb6c1', rgb: '255,182,193' },\n HotPink: { hex: 'ff69b4', rgb: '255,105,180' },\n DeepPink: { hex: 'ff1493', rgb: '255,20,147' },\n PaleVioletRed: { hex: 'db7093', rgb: '219,112,147' },\n MediumVioletRed: { hex: 'c71585', rgb: '199,21,133' },\n LightSalmon: { hex: 'ffa07a', rgb: '255,160,122' },\n Salmon: { hex: 'fa8072', rgb: '250,128,114' },\n DarkSalmon: { hex: 'e9967a', rgb: '233,150,122' },\n LightCoral: { hex: 'f08080', rgb: '240,128,128' },\n IndianRed: { hex: 'cd5c5c', rgb: '205,92,92' },\n Crimson: { hex: 'dc143c', rgb: '220,20,60' },\n FireBrick: { hex: 'b22222', rgb: '178,34,34' },\n DarkRed: { hex: '8b0000', rgb: '139,0,0' },\n Red: { hex: 'ff0000', rgb: '255,0,0' },\n OrangeRed: { hex: 'ff4500', rgb: '255,69,0' },\n Tomato: { hex: 'ff6347', rgb: '255,99,71' },\n Coral: { hex: 'ff7f50', rgb: '255,127,80' },\n DarkOrange: { hex: 'ff8c00', rgb: '255,140,0' },\n Orange: { hex: 'ffa500', rgb: '255,165,0' },\n Gold: { hex: 'ffd700', rgb: '255,215,0' },\n Yellow: { hex: 'ffff00', rgb: '255,255,0' },\n LightYellow: { hex: 'ffffe0', rgb: '255,255,224' },\n LemonChiffon: { hex: 'fffacd', rgb: '255,250,205' },\n LightGoldenrodYellow: { hex: 'fafad2', rgb: '250,250,210' },\n PapayaWhip: { hex: 'ffefd5', rgb: '255,239,213' },\n Moccasin: { hex: 'ffe4b5', rgb: '255,228,181' },\n PeachPuff: { hex: 'ffdab9', rgb: '255,218,185' },\n PaleGoldenrod: { hex: 'eee8aa', rgb: '238,232,170' },\n Khaki: { hex: 'f0e68c', rgb: '240,230,140' },\n DarkKhaki: { hex: 'bdb76b', rgb: '189,183,107' },\n Cornsilk: { hex: 'fff8dc', rgb: '255,248,220' },\n BlanchedAlmond: { hex: 'ffebcd', rgb: '255,235,205' },\n Bisque: { hex: 'ffe4c4', rgb: '255,228,196' },\n NavajoWhite: { hex: 'ffdead', rgb: '255,222,173' },\n Wheat: { hex: 'f5deb3', rgb: '245,222,179' },\n BurlyWood: { hex: 'deb887', rgb: '222,184,135' },\n Tan: { hex: 'd2b48c', rgb: '210,180,140' },\n RosyBrown: { hex: 'bc8f8f', rgb: '188,143,143' },\n SandyBrown: { hex: 'f4a460', rgb: '244,164,96' },\n Goldenrod: { hex: 'daa520', rgb: '218,165,32' },\n DarkGoldenrod: { hex: 'b8860b', rgb: '184,134,11' },\n Peru: { hex: 'cd853f', rgb: '205,133,63' },\n Chocolate: { hex: 'd2691e', rgb: '210,105,30' },\n SaddleBrown: { hex: '8b4513', rgb: '139,69,19' },\n Sienna: { hex: 'a0522d', rgb: '160,82,45' },\n Brown: { hex: 'a52a2a', rgb: '165,42,42' },\n Maroon: { hex: '800000', rgb: '128,0,0' },\n DarkOliveGreen: { hex: '556b2f', rgb: '85,107,47' },\n Olive: { hex: '808000', rgb: '128,128,0' },\n OliveDrab: { hex: '6b8e23', rgb: '107,142,35' },\n YellowGreen: { hex: '9acd32', rgb: '154,205,50' },\n LimeGreen: { hex: '32cd32', rgb: '50,205,50' },\n Lime: { hex: '00ff00', rgb: '0,255,0' },\n LawnGreen: { hex: '7cfc00', rgb: '124,252,0' },\n Chartreuse: { hex: '7fff00', rgb: '127,255,0' },\n GreenYellow: { hex: 'adff2f', rgb: '173,255,47' },\n SpringGreen: { hex: '00ff7f', rgb: '0,255,127' },\n MediumSpringGreen: { hex: '00fa9a', rgb: '0,250,154' },\n LightGreen: { hex: '90ee90', rgb: '144,238,144' },\n PaleGreen: { hex: '98fb98', rgb: '152,251,152' },\n DarkSeaGreen: { hex: '8fbc8f', rgb: '143,188,143' },\n MediumSeaGreen: { hex: '3cb371', rgb: '60,179,113' },\n SeaGreen: { hex: '2e8b57', rgb: '46,139,87' },\n ForestGreen: { hex: '228b22', rgb: '34,139,34' },\n Green: { hex: '008000', rgb: '0,128,0' },\n DarkGreen: { hex: '006400', rgb: '0,100,0' },\n MediumAquamarine: { hex: '66cdaa', rgb: '102,205,170' },\n Aqua: { hex: '00ffff', rgb: '0,255,255' },\n Cyan: { hex: '00ffff', rgb: '0,255,255' },\n LightCyan: { hex: 'e0ffff', rgb: '224,255,255' },\n PaleTurquoise: { hex: 'afeeee', rgb: '175,238,238' },\n Aquamarine: { hex: '7fffd4', rgb: '127,255,212' },\n Turquoise: { hex: '40e0d0', rgb: '64,224,208' },\n MediumTurquoise: { hex: '48d1cc', rgb: '72,209,204' },\n DarkTurquoise: { hex: '00ced1', rgb: '0,206,209' },\n LightSeaGreen: { hex: '20b2aa', rgb: '32,178,170' },\n CadetBlue: { hex: '5f9ea0', rgb: '95,158,160' },\n DarkCyan: { hex: '008b8b', rgb: '0,139,139' },\n Teal: { hex: '008080', rgb: '0,128,128' },\n LightSteelBlue: { hex: 'b0c4de', rgb: '176,196,222' },\n PowderBlue: { hex: 'b0e0e6', rgb: '176,224,230' },\n LightBlue: { hex: 'add8e6', rgb: '173,216,230' },\n SkyBlue: { hex: '87ceeb', rgb: '135,206,235' },\n LightSkyBlue: { hex: '87cefa', rgb: '135,206,250' },\n DeepSkyBlue: { hex: '00bfff', rgb: '0,191,255' },\n DodgerBlue: { hex: '1e90ff', rgb: '30,144,255' },\n CornflowerBlue: { hex: '6495ed', rgb: '100,149,237' },\n SteelBlue: { hex: '4682b4', rgb: '70,130,180' },\n RoyalBlue: { hex: '4169e1', rgb: '65,105,225' },\n Blue: { hex: '0000ff', rgb: '0,0,255' },\n MediumBlue: { hex: '0000cd', rgb: '0,0,205' },\n DarkBlue: { hex: '00008b', rgb: '0,0,139' },\n Navy: { hex: '000080', rgb: '0,0,128' },\n MidnightBlue: { hex: '191970', rgb: '25,25,112' },\n Lavender: { hex: 'e6e6fa', rgb: '230,230,250' },\n Thistle: { hex: 'd8bfd8', rgb: '216,191,216' },\n Plum: { hex: 'dda0dd', rgb: '221,160,221' },\n Violet: { hex: 'ee82ee', rgb: '238,130,238' },\n Orchid: { hex: 'da70d6', rgb: '218,112,214' },\n Fuchsia: { hex: 'ff00ff', rgb: '255,0,255' },\n Magenta: { hex: 'ff00ff', rgb: '255,0,255' },\n MediumOrchid: { hex: 'ba55d3', rgb: '186,85,211' },\n MediumPurple: { hex: '9370db', rgb: '147,112,219' },\n BlueViolet: { hex: '8a2be2', rgb: '138,43,226' },\n DarkViolet: { hex: '9400d3', rgb: '148,0,211' },\n DarkOrchid: { hex: '9932cc', rgb: '153,50,204' },\n DarkMagenta: { hex: '8b008b', rgb: '139,0,139' },\n Purple: { hex: '800080', rgb: '128,0,128' },\n Indigo: { hex: '4b0082', rgb: '75,0,130' },\n DarkSlateBlue: { hex: '483d8b', rgb: '72,61,139' },\n SlateBlue: { hex: '6a5acd', rgb: '106,90,205' },\n MediumSlateBlue: { hex: '7b68ee', rgb: '123,104,238' },\n White: { hex: 'ffffff', rgb: '255,255,255' },\n Snow: { hex: 'fffafa', rgb: '255,250,250' },\n Honeydew: { hex: 'f0fff0', rgb: '240,255,240' },\n MintCream: { hex: 'f5fffa', rgb: '245,255,250' },\n Azure: { hex: 'f0ffff', rgb: '240,255,255' },\n AliceBlue: { hex: 'f0f8ff', rgb: '240,248,255' },\n GhostWhite: { hex: 'f8f8ff', rgb: '248,248,255' },\n WhiteSmoke: { hex: 'f5f5f5', rgb: '245,245,245' },\n Seashell: { hex: 'fff5ee', rgb: '255,245,238' },\n Beige: { hex: 'f5f5dc', rgb: '245,245,220' },\n OldLace: { hex: 'fdf5e6', rgb: '253,245,230' },\n FloralWhite: { hex: 'fffaf0', rgb: '255,250,240' },\n Ivory: { hex: 'fffff0', rgb: '255,255,240' },\n AntiqueWhite: { hex: 'faebd7', rgb: '250,235,215' },\n Linen: { hex: 'faf0e6', rgb: '250,240,230' },\n LavenderBlush: { hex: 'fff0f5', rgb: '255,240,245' },\n MistyRose: { hex: 'ffe4e1', rgb: '255,228,225' },\n Gainsboro: { hex: 'dcdcdc', rgb: '220,220,220' },\n LightGray: { hex: 'd3d3d3', rgb: '211,211,211' },\n Silver: { hex: 'c0c0c0', rgb: '192,192,192' },\n DarkGrey: { hex: 'a9a9a9', rgb: '169,169,169' },\n Grey: { hex: '808080', rgb: '128,128,128' },\n DimGrey: { hex: '696969', rgb: '105,105,105' },\n LightSlateGrey: { hex: '778899', rgb: '119,136,153' },\n SlateGrey: { hex: '708090', rgb: '112,128,144' },\n DarkSlateGrey: { hex: '2f4f4f', rgb: '47,79,79' },\n Black: { hex: '000000', rgb: '0,0,0' }\n};\n","import {\n LINEAR\n} from '../enums/constants';\n/**\n * Set of default colors\n */\nexport const palette = [\n '#086bb6',\n '#f37d45',\n '#f5ce02',\n '#67bda0',\n '#c54e4e',\n '#ae70af'\n];\n\nexport const DEFAULT_GRADIENT_COLOR = '#eaeaea';\n\nexport const DEFAULT_CONFIG = {\n range: palette,\n value: palette[0],\n step: false,\n stops: 5,\n type: LINEAR\n};\n","import { mergeRecursive, detectColor, hexToHsv, rgbToHsv } from 'muze-utils';\nimport { x11Colors } from './color-maps';\nimport { palette, DEFAULT_GRADIENT_COLOR } from './defaults';\nimport { LINEAR, RGB, HEX, HSL, HSLA } from '../enums/constants';\n\nexport const getHslString = hslArr => `hsla(${hslArr[0] * 360},${hslArr[1] * 100}%,${hslArr[2] * 100}%,\\\n${hslArr[3] || 1})`;\n\nexport const convertToXllString = baseString => (baseString.split(' ') || [])\n .reduce((x, e) => `${x}${e.charAt(0).toUpperCase()}${e.slice(1)}`, '');\n\nexport const getActualHslColor = (e, paletteColor) => {\n let color = '';\n if (typeof e === 'string') {\n e = e.replace(/ /g, '');\n e = e.toLowerCase();\n if (detectColor(e) === HSL || detectColor(e) === HSLA) {\n color = e.match(/(\\d+(\\.\\d+)?)/g);\n color = [color[0] / 360, color[1] / 100, color[2] / 100, color[3] || 1];\n } else if (detectColor(e) === HEX) {\n color = hexToHsv(e);\n } else if (detectColor(e) === RGB) {\n const col = e.substring(e.indexOf('(') + 1, e.lastIndexOf(')')).split(/,\\s*/);\n color = rgbToHsv(...col);\n } else if (x11Colors[convertToXllString(e)]) {\n color = rgbToHsv(...x11Colors[convertToXllString(e)].rgb.split(','));\n }\n } else if (!(e instanceof Array)) {\n color = rgbToHsv(paletteColor);\n } else {\n color = e;\n }\n return color;\n};\n\nexport const PROPS = {\n config: {\n sanitization: (context, config) => {\n const defCon = mergeRecursive({}, context.constructor.defaultConfig());\n if (config.type === LINEAR) {\n config.range = config.range || [defCon.range[0]];\n config.range = config.range.length > 1 ? config.range : [DEFAULT_GRADIENT_COLOR, ...config.range];\n }\n const oldConfig = mergeRecursive(defCon, context.config());\n const newConfig = mergeRecursive(oldConfig, config);\n\n if (newConfig.range instanceof Array) {\n newConfig.range = newConfig.range.map((e, i) => getActualHslColor(e, palette[i]));\n newConfig.stops = config.stops || newConfig.range.length;\n }\n newConfig.value = getActualHslColor(newConfig.value, newConfig.value);\n return newConfig;\n }\n },\n domain: {},\n scale: {},\n uniqueValues: {}\n};\n","import { numberInterpolator, piecewiseInterpolator, hslInterpolator } from 'muze-utils';\nimport { CONTINOUS, DISCRETE } from '../enums/constants';\nimport { LINEAR, SEQUENTIAL, ORDINAL, QUANTILE } from '../enums/scale-type';\nimport { getHslString } from './props';\n\nconst getStops = (domain, stops) => {\n let newStops = [];\n\n if (stops instanceof Array) {\n newStops = stops.slice().sort();\n newStops = [...new Set([domain[0], ...stops, domain[1]])].sort();\n } else {\n const interpolator = numberInterpolator()(...domain);\n for (let i = 0; i <= stops; i++) {\n newStops[i] = interpolator(i / stops);\n }\n }\n\n if (newStops[0] < domain[0]) {\n newStops.shift();\n }\n return { domain, newStops };\n};\n\nconst rangeStops = (newStopsLength, range) => {\n let newRange = [];\n const maxRangeLength = Math.min(range.length, 18);\n\n if (newStopsLength > maxRangeLength) {\n const interpolator = piecewiseInterpolator()(hslInterpolator(), range.map(e => getHslString(e)));\n for (let i = 0; i < newStopsLength; i++) {\n newRange[i] = interpolator(i / (newStopsLength - 1));\n }\n } else {\n newRange = range.slice(0, newStopsLength);\n }\n return { newRange };\n};\n\n/**\n*\n*\n* @param {*} domain\n* @returns\n*/\nconst indexedDomain = (domain) => {\n const uniqueVals = domain;\n const retDomain = domain.map((d, i) => (i) / (domain.length - 1));\n return { domain: retDomain, uniqueVals, scaleDomain: [0, 1] };\n};\n\n/**\n *\n *\n * @param {*} domain\n * @returns\n */\nconst indexedDomainMeasure = (domain, stops, range) => {\n const uniqueVals = domain;\n return { domain, uniqueVals, scaleDomain: [0, 1], range };\n};\n\n/**\n *\n *\n * @param {*} domain\n * @returns\n */\nconst normalDomain = (domain, stops, range) => {\n const uniqueVals = domain;\n return { uniqueVals, domain, nice: true, range };\n};\n\n/**\n *\n *\n * @param {*} domain\n * @param {*} stops\n * @returns\n */\nconst steppedDomain = (domain, stops, range) => {\n const { domain: uniqueVals, newStops } = getStops(domain, stops);\n const { newRange } = rangeStops(newStops.length - 1, range);\n\n return { uniqueVals, domain: newStops, nice: true, range: newRange };\n};\n\nconst continousSteppedDomain = (domain, stops, range) => {\n const { domain: uniqueVals, newStops } = getStops(domain, range.length - 1);\n const hslRange = range.map(e => getHslString(e));\n return { uniqueVals, domain: newStops, nice: true, range: hslRange };\n};\n\n/**\n *\n *\n * @param {*} domainValue\n * @param {*} scale\n * @param {*} domain\n * @param {*} uniqueVals\n * @returns\n */\nconst uniqueRange = (domainValue, scale, domain, uniqueVals) => {\n const index = uniqueVals.indexOf(domainValue);\n const numVal = domain[index];\n return scale(numVal);\n};\n\n/**\n *\n *\n * @param {*} domainValue\n * @param {*} scale\n * @param {*} domain\n * @returns\n */\nconst indexedRange = (domainValue, scale, domain) => {\n const numVal = (domainValue - domain[0]) / (domain[domain.length - 1] - domain[0]);\n\n return scale(numVal);\n};\n\n/**\n *\n *\n * @param {*} domainValue\n * @param {*} scale\n */\nconst normalRange = (domainValue, scale) => scale(domainValue);\n\n/**\n *\n *\n * @param {*} stops\n */\nconst strategies = () => ({\n [`${CONTINOUS}-${CONTINOUS}-${SEQUENTIAL}`]: {\n scale: SEQUENTIAL,\n domainRange: () => indexedDomainMeasure,\n value: () => indexedRange\n },\n [`${CONTINOUS}-${DISCRETE}-${SEQUENTIAL}`]: {\n scale: SEQUENTIAL,\n domainRange: () => indexedDomainMeasure,\n value: () => indexedRange\n },\n [`${DISCRETE}-${DISCRETE}-${SEQUENTIAL}`]: {\n scale: SEQUENTIAL,\n domainRange: () => indexedDomain,\n value: () => uniqueRange\n },\n [`${DISCRETE}-${DISCRETE}-${ORDINAL}`]: {\n scale: ORDINAL,\n domainRange: () => normalDomain,\n value: () => normalRange\n },\n [`${CONTINOUS}-${CONTINOUS}-${ORDINAL}`]: {\n scale: LINEAR,\n domainRange: () => continousSteppedDomain,\n value: () => normalRange\n },\n [`${CONTINOUS}-${DISCRETE}-${ORDINAL}`]: {\n scale: QUANTILE,\n domainRange: () => steppedDomain,\n value: () => normalRange\n\n }\n});\n\n/**\n *\n *\n * @param {*} domainType\n * @param {*} rangeType\n * @param {*} schemeType\n * @param {*} stops\n */\nexport const strategyGetter = (domainType, rangeType, schemeType, stops) =>\n strategies(stops)[`${domainType}-${rangeType}-${schemeType || ''}`];\n","/**\n * @module Axis\n * This file declares a class that is used to render an axis to add meaning to\n * plots.\n */\nimport { getUniqueId, generateGetterSetters, rgbToHsv } from 'muze-utils';\nimport { createScale, getScheme, getSchemeType } from '../scale-creator';\nimport { CONTINOUS, DISCRETE, COLOR } from '../enums/constants';\nimport { strategyGetter } from './color-strategy';\nimport { DEFAULT_CONFIG } from './defaults';\nimport { PROPS, getHslString } from './props';\n\n/**\n* This class is used to instantiate a SimpleAxis.\n* @class SimpleAxis\n*/\nexport default class ColorAxis {\n\n /**\n * Creates an instance of SimpleAxis.\n * @param {Object} config input parameters.\n * @param {Object | undefined} params.range Type of color range.\n * @param {string} params.name the label to show on axis.\n * @param {string} params.type The type of scale to handle.\n * @memberof ColorAxis\n */\n constructor (config) {\n generateGetterSetters(this, PROPS);\n this.config(config);\n\n this._domainType = this._config.type === 'linear' ? CONTINOUS : DISCRETE;\n this._rangeType = (this._config.type === 'linear' && !this._config.step) ? CONTINOUS : DISCRETE;\n\n this._schemeType = getSchemeType(this._config.range);\n\n this._colorStrategy = this.setColorStrategy(this._domainType, this._rangeType, this._schemeType);\n this._scale = this.createScale(this._colorStrategy);\n\n this._id = getUniqueId();\n\n this.updateDomain(config.domain);\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof ColorAxis\n */\n static defaultConfig () {\n return DEFAULT_CONFIG;\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof ColorAxis\n */\n static type () {\n return COLOR;\n }\n\n /**\n *\n *\n * @param {*} colorStrategy\n * @returns\n * @memberof ColorAxis\n */\n createScale (colorStrategy) {\n const { range } = this.config();\n if (range && typeof (range) === 'string') {\n return getScheme(range);\n }\n return createScale({\n type: colorStrategy.scale,\n range\n });\n }\n\n /**\n *\n *\n * @param {*} domainType\n * @param {*} rangeType\n * @param {*} schemeType\n * @returns\n * @memberof ColorAxis\n */\n setColorStrategy (domainType, rangeType, schemeType) {\n const { stops } = this.config();\n\n return strategyGetter(domainType, rangeType, schemeType, stops);\n }\n\n /**\n *\n *\n * @param {*} domainVal\n * @returns\n * @memberof ColorAxis\n */\n getHslString (hslColorArray) {\n return getHslString(hslColorArray);\n }\n /**\n *\n *\n * @param {*} domainVal\n * @returns\n * @memberof ColorAxis\n */\n getColor (domainVal) {\n return this.getHslString(this.getRawColor(domainVal));\n }\n /**\n *\n *\n * @param {*} domainVal\n * @returns\n * @memberof ColorAxis\n */\n getRawColor (domainVal) {\n if (this.domain() && domainVal !== undefined) {\n const scale = this.scale();\n const range = scale.range ? scale.range() : null;\n const color = this._colorStrategy.value(range)(domainVal, scale, this.domain(), this.uniqueValues());\n\n if (typeof color === 'string') {\n const col = color.substring(color.indexOf('(') + 1, color.lastIndexOf(')')).split(/,\\s*/);\n return rgbToHsv(...col);\n }\n return [...color];\n }\n return [...this.config().value];\n }\n\n /**\n *\n *\n * @param {*} [domain=[]]\n * @returns\n * @memberof ColorAxis\n */\n updateDomain (domain = []) {\n if (domain.length) {\n const scale = this.scale();\n const range = scale.range ? scale.range() : null;\n const domainRangeFn = this._colorStrategy.domainRange();\n const scaleInfo = domainRangeFn(domain, this.config().stops, range);\n\n this.domain(scaleInfo.domain);\n scaleInfo.range && this.scale().range(scaleInfo.range);\n this.uniqueValues(scaleInfo.uniqueVals);\n this.scale().domain(scaleInfo.scaleDomain || this.domain());\n }\n return this;\n }\n\n /**\n * This method returns an object that can be used to\n * reconstruct this instance.\n *\n * @return {Object} the serializable props of axis\n * @memberof ShapeAxis\n */\n serialize () {\n return {\n type: this.constructor.type(),\n scale: this.scale(),\n domain: this.domain(),\n config: this.config()\n };\n }\n\n transformColor (color, transformationArr) {\n const h = color[0] * 360;\n const s = color[1] * 100;\n const l = color[2] * 100;\n const a = color[3] || 1;\n const newH = h + transformationArr[0];\n const newS = s + transformationArr[1];\n const newL = l + transformationArr[2];\n const newA = a + transformationArr[3] || 0;\n\n return { color: `hsla(${newH},${newS}%,${newL}%,${newA})`, hsla: [newH / 360, newS / 100, newL / 100, newA] };\n }\n\n /**\n * Returns the id of the axis.\n * @return {string} Unique identifier of the axis.\n */\n id () {\n return this._id;\n }\n\n}\n","export const DEFAULT_CONFIG = {\n value: 36,\n range: [36, 1000]\n};\n","import { numberInterpolator, piecewiseInterpolator } from 'muze-utils';\nimport { CONTINOUS, DISCRETE } from '../enums/constants';\nimport { LINEAR, THRESHOLD } from '../enums/scale-type';\n\n/**\n *\n *\n * @param {*} domain\n * @returns\n */\nconst indexedDomain = (domain) => {\n const uniqueVals = domain;\n const retDomain = domain.map((d, i) => (i) / (domain.length - 1));\n return { domain: retDomain, uniqueVals, scaleDomain: [0, 1] };\n};\n\n/**\n *\n *\n * @param {*} domain\n * @returns\n */\nconst normalDomain = (domain) => {\n const uniqueVals = domain;\n return { uniqueVals, domain };\n};\n\n/**\n *\n *\n * @param {*} domain\n * @param {*} intervals\n * @returns\n */\nconst steppedDomain = (domain, intervals) => {\n let newIntervals = [];\n if (intervals instanceof Array) {\n newIntervals = intervals.slice().sort();\n } else {\n const interpolator = numberInterpolator()(...domain);\n for (let i = 0; i < intervals; i++) {\n newIntervals[i] = interpolator(i / (intervals - 1));\n }\n }\n if (newIntervals[0] < domain[0]) {\n newIntervals.shift();\n }\n const retDomain = newIntervals;\n return { uniqueVals: newIntervals, domain: retDomain, nice: true };\n};\n\n/**\n *\n *\n * @param {*} domainValue\n * @param {*} scale\n * @param {*} domain\n * @param {*} uniqueVals\n * @returns\n */\nconst discreteRange = (domainValue, scale, domain) => {\n const numVal = (domainValue - domain[0]) / (domain[domain.length - 1] - domain[0]);\n const interpolator = numberInterpolator()(...scale.range());\n return interpolator(numVal);\n};\n\n/**\n *\n *\n * @param {*} domainValue\n * @param {*} scale\n * @param {*} domain\n * @returns\n */\nconst pieceWiseRange = (domainValue, scale, domain, uniqueVals) => {\n const index = uniqueVals.indexOf(domainValue);\n const numVal = domain[index];\n const fn = piecewiseInterpolator()(numberInterpolator(), [...scale.range()]);\n return fn(numVal);\n};\n\n/**\n *\n *\n * @param {*} domainValue\n * @param {*} scale\n */\nconst normalRange = (domainValue, scale) => scale(domainValue);\n\n/**\n *\n *\n * @param {*} intervals\n */\nconst strategies = {\n [`${DISCRETE}-${CONTINOUS}`]: {\n scale: LINEAR,\n domain: indexedDomain,\n range: pieceWiseRange\n },\n [`${CONTINOUS}-${CONTINOUS}`]: {\n scale: LINEAR,\n domain: normalDomain,\n range: normalRange\n },\n [`${CONTINOUS}-${DISCRETE}`]: {\n scale: THRESHOLD,\n domain: steppedDomain,\n range: discreteRange\n }\n};\n\n/**\n *\n *\n * @param {*} domainType\n * @param {*} rangeType\n * @param {*} schemeType\n * @param {*} intervals\n */\nexport const strategyGetter = (domainType, rangeType) =>\n strategies[`${domainType}-${rangeType}`];\n","export const PROPS = {\n config: {},\n domain: {\n sanitization: (context, value) => {\n context.scale().domain(value);\n return value;\n }\n },\n range: {},\n scale: {},\n uniqueValues: {}\n};\n","/**\n * @module Axis\n * This file declares a class that is used to render an axis to add meaning to\n * plots.\n */\nimport { getUniqueId, generateGetterSetters } from 'muze-utils';\nimport { createScale } from '../scale-creator';\nimport { DEFAULT_CONFIG } from './defaults';\nimport { SIZE, CONTINOUS, DISCRETE } from '../enums/constants';\nimport { strategyGetter } from './size-strategy';\nimport { PROPS } from './props';\n\n/**\n* This class is used to instantiate a SimpleAxis.\n* @class SimpleAxis\n*/\nexport default class SizeAxis {\n\n /**\n * Creates an instance of SimpleAxis.\n * @param {Object} config input parameters.\n * @memberof SizeAxis\n */\n constructor (config) {\n generateGetterSetters(this, PROPS);\n\n this._id = getUniqueId();\n this._config = Object.assign({}, this.constructor.defaultConfig(), config);\n // @todo: Will use configuration override using scale decorator\n this._domainType = this._config.type === 'linear' ? CONTINOUS : DISCRETE;\n this._rangeType = CONTINOUS;\n\n this._sizeStrategy = this.setStrategy(this._domainType, this._rangeType);\n this._scale = this.createScale(this._sizeStrategy);\n this._range = this._config.range;\n\n this.updateDomain(config.domain);\n }\n\n /**\n *\n *\n * @param {*} domainType\n * @param {*} rangeType\n * @param {*} schemeType\n * @returns\n * @memberof ColorAxis\n */\n setStrategy (domainType, rangeType) {\n return strategyGetter(domainType, rangeType);\n }\n\n /**\n *\n *\n * @returns\n * @memberof SizeAxis\n */\n createScale (strategy) {\n const {\n range\n } = this.config();\n return createScale({\n type: strategy.scale,\n range\n });\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof ColorAxis\n */\n static defaultConfig () {\n return DEFAULT_CONFIG;\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof ColorAxis\n */\n static type () {\n return SIZE;\n }\n\n /**\n *\n *\n * @param {*} domainVal\n * @returns\n * @memberof SizeAxis\n */\n getSize (domainVal = 0) {\n let sizeVal = 1;\n const {\n value\n } = this.config();\n const scale = this.scale();\n const domain = this.domain() || [1, 1];\n\n if (!scale || domain[0] === domain[1]) {\n sizeVal = value;\n } else {\n return this._sizeStrategy.range(domainVal, scale, this.domain(), this.uniqueValues());\n }\n return sizeVal;\n }\n\n /**\n * This method is used to assign a domain to the axis.\n *\n * @param {Array} domain the domain of the scale\n * @memberof SizeAxis\n */\n updateDomain (domain) {\n if (domain) {\n const domainFn = this._sizeStrategy.domain;\n\n const domainInfo = domainFn(domain, this.config().intervals);\n\n this.domain(domainInfo.domain);\n this.uniqueValues(domainInfo.uniqueVals);\n\n this.scale().domain(domainInfo.scaleDomain || this.domain());\n }\n return this;\n }\n\n /**\n * This method returns an object that can be used to\n * reconstruct this instance.\n *\n * @return {Object} the serializable props of axis\n * @memberof ShapeAxis\n */\n serialize () {\n return {\n type: this.constructor.type(),\n scale: this.scale(),\n domain: this.domain(),\n range: this.range(),\n config: this.config()\n };\n }\n\n /**\n * Returns the id of the axis.\n * @return {string} Unique identifier of the axis.\n */\n id () {\n return this._id;\n }\n}\n","export const DEFAULT_CONFIG = {\n generator: null,\n value: 'circle',\n range: ['circle', 'diamond', 'star', 'cross', 'square', 'wye', 'triangle']\n};\n","export const PROPS = {\n config: {},\n domain: {},\n scale: {},\n uniqueValues: {},\n generator: {}\n};\n\n","/**\n * @module Axis\n * This file declares a class that is used to render an axis to add meaning to\n * plots.\n */\nimport { getUniqueId, getSymbol, generateGetterSetters, mergeRecursive } from 'muze-utils';\nimport { createScale } from '../scale-creator';\nimport { DEFAULT_CONFIG } from './defaults';\nimport { SHAPE } from '../enums/constants';\nimport { shapeGenerator } from './helper';\nimport { PROPS } from './props';\n\n/**\n* This class is used to instantiate a SimpleAxis.\n* @class SimpleAxis\n*/\nexport default class ShapeAxis {\n /**\n * Creates an instance of SimpleAxis.\n * @param {Object} params input parameters.\n * @param {Object | undefined} params.range Type of color scheme.\n * @memberof ShapeAxis\n */\n constructor (config) {\n generateGetterSetters(this, PROPS);\n\n this._id = getUniqueId();\n this._config = Object.assign({}, this.constructor.defaultConfig());\n this._config = mergeRecursive(this._config, config);\n\n this._scale = createScale({\n type: 'ordinal',\n range: this._config.range\n });\n this.updateDomain(config.domain);\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof ColorAxis\n */\n static defaultConfig () {\n return DEFAULT_CONFIG;\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof ColorAxis\n */\n static type () {\n return SHAPE;\n }\n\n /**\n *\n *\n * @param {*} value\n * @returns\n * @memberof ShapeAxis\n */\n getShape (value) {\n if (!this.scale() || !this.domain() || !value) {\n return this.config().value;\n }\n\n if (this._generatedShapes) {\n return this._generatedShapes[value];\n }\n\n const shapeType = this.scale()(value);\n if (shapeType === 'string') {\n return getSymbol(shapeType);\n }\n\n return shapeType;\n }\n\n /**\n * This method is used to assign a domain to the axis.\n *\n * @param {Array} domain the domain of the scale\n * @memberof ShapeAxis\n */\n updateDomain (domain = []) {\n if (domain.length) {\n this.uniqueValues(domain);\n this.domain(domain);\n this.scale().domain(domain);\n\n if (this.config().generator) {\n this._generatedShapes = shapeGenerator(domain, this.config().generator);\n }\n }\n return this;\n }\n\n /**\n * This method returns an object that can be used to\n * reconstruct this instance.\n *\n * @return {Object} the serializable props of axis\n * @memberof ShapeAxis\n */\n serialize () {\n return {\n type: this.constructor.type(),\n scale: this.scale(),\n domain: this.domain(),\n range: this.config().range,\n config: this.config()\n };\n }\n\n /**\n * Returns the id of the axis.\n * @return {string} Unique identifier of the axis.\n */\n id () {\n return this._id;\n }\n}\n","/**\n *\n *\n * @param {*} domain\n * @param {*} generatorFn\n * @returns\n */\nexport const shapeGenerator = (domain, generatorFn) => {\n const generatedShapes = {};\n domain.forEach((value) => {\n generatedShapes[value] = generatorFn(value);\n });\n return generatedShapes;\n};\n","import * as ScaleType from './enums/scale-type';\n\nconst DATA_TYPES = {\n DIMENSION: 'dimension',\n CATEGORICAL: 'categorical',\n MEASURE: 'measure',\n DATETIME: 'temporal'\n};\n\n/**\n * Map of DataModel types to associated field types.\n */\nexport const dataTypeScaleMap = {\n [DATA_TYPES.DIMENSION]: ScaleType.BAND,\n [DATA_TYPES.MEASURE]: ScaleType.LINEAR,\n [DATA_TYPES.DATETIME]: ScaleType.TIME\n};\n\n","import { nestCollection } from 'muze-utils';\n\n/**\n * Create multiple datasets from a single dataset by grouping the data using\n * a dimensional field.\n * @param {Array} schema Name and type of fields are stored in schema\n * @param {Array} data Data array\n * @param {Object} config Configuration object\n * @return {Array} Grouped data array\n */\nexport default (schema, data, config) => {\n const groupBy = config.groupBy instanceof Array ? config.groupBy : [config.groupBy];\n const groupByIndices = groupBy.map(fieldName => schema.findIndex(d => d.name === fieldName));\n\n if (groupByIndices.find(d => d === -1) !== undefined) {\n throw new Error(`Groupby field ${groupBy} not found in schema`);\n }\n\n return nestCollection({\n keys: groupByIndices,\n data\n });\n};\n","/**\n * @module Transform\n * This file exports a function that is used to implement\n * the identity transform\n */\n /* eslint no-unused-vars: 0 */\n /**\n * This function accepts data and returns the data unchanged.\n * @param {Object} schema The schema.\n * @param {Array} data The data array.\n * @param {Object} config The config object.\n * @return {Array} The unchanged data.\n */\n function identityTransform (schema, data, config) {\n return data;\n }\n\n export default identityTransform;\n","/**\n * @module Transform\n * This file exports the transform factory.\n */\nimport * as TransformType from '../enums/transform-type';\nimport identity from '../identity-transform';\nimport group from '../group-transform';\nimport stack from '../stack-transform';\n\n/* istanbul ignore next */\nconst transformMap = {\n [TransformType.IDENTITY]: identity,\n [TransformType.GROUP]: group,\n [TransformType.STACK]: stack\n};\n\n/**\n * This function is used to retirn a transform associated\n * with the given type.\n *\n * @param {string} type The type of the transform.\n * @return {Function} The transform function.\n */\nfunction transformFactory (type) {\n const transform = transformMap[type];\n if (typeof transform !== 'function') {\n throw new Error('Invalid transform type supplied.');\n }\n return transform;\n}\n\nexport default transformFactory;\n","/**\n * @module Transform\n * This module exports constants that are used to reference transforms in\n * a consistent manner throughout the project.\n */\n/* eslint one-var: 0 */\n export const IDENTITY = 'identity';\n export const GROUP = 'group';\n export const STACK = 'stack';\n export const FRACTURE = 'fracture';\n","import { stack } from 'muze-utils';\n\nimport group from '../group-transform';\n/*\n Normalize the data to a form which can be given to d3 stack for stacking the data\n ['Product', 'Sales', 'Region'],\n 0 ['A', 2000, 'North'],\n 1 ['A', 3000, 'South'],\n 2 ['B', 3000, 'South'],\n 3 ['B', 2000, 'North'],\n 4 ['C', 3000, 'South'],\n 5 ['C', 2000, 'North']\n |\n |\n ['Product', 'North', 'South'],\n ['A', 2000, 3000],\n ['B', 2000, 3000],\n ['C', 2000, 3000]\n*/\n// eslint-disable-next-line require-jsdoc\nconst normalizeData = (data, schema, valueField, uniqueField, groupBy) => {\n const groupedData = group(schema, data, {\n groupBy: uniqueField\n });\n const uniqueFieldIndex = schema.findIndex(d => d.name === uniqueField);\n const valueFieldIndex = schema.findIndex(d => d.name === valueField);\n const seriesKeyIndex = schema.findIndex(d => d.name === groupBy);\n const seriesKeys = data.map(d => d[seriesKeyIndex]).filter((item, pos, arr) => arr.indexOf(item) === pos).sort();\n const fieldNames = schema.reduce((acc, obj, i) => {\n acc[i] = obj.name;\n return acc;\n }, {});\n const dataArr = groupedData.map((arr) => {\n const tuples = {};\n const rowObj = arr.values.reduce((acc, row) => {\n acc = row.reduce((obj, value, i) => {\n if (i === seriesKeyIndex) {\n obj[value] = row[valueFieldIndex];\n tuples[value] = row;\n } else if (i !== valueFieldIndex) {\n obj[fieldNames[i]] = value;\n }\n return obj;\n }, acc);\n return acc;\n }, {});\n rowObj._tuple = tuples;\n // Set missing values field to zero value\n seriesKeys.forEach((seriesKey) => {\n if (rowObj[seriesKey] === undefined) {\n rowObj[seriesKey] = 0;\n const newArr = new Array(arr.values[0].length);\n newArr[uniqueFieldIndex] = arr.key;\n newArr[seriesKeyIndex] = seriesKey;\n rowObj._tuple[seriesKey] = newArr;\n }\n });\n return rowObj;\n });\n\n return {\n data: dataArr,\n keys: seriesKeys\n };\n};\n/**\n * Generate a stacked representation of data\n * @param {Array} schema schema Array\n * @param {Array} data data array\n * @param {Object} config Configuration object\n * @return {Array} stacked data\n */\nexport default (schema, data, config) => {\n const uniqueField = config.uniqueField;\n const valueField = config.value;\n const groupBy = config.groupBy;\n const sort = config.sort || 'descending';\n const normalizedData = normalizeData(data, schema, valueField, uniqueField, groupBy);\n const keys = normalizedData.keys;\n const map = {};\n const orderBy = config.orderBy;\n const orderIndex = schema.findIndex(d => d.name === orderBy);\n const groupByIndex = schema.findIndex(d => d.name === groupBy);\n if (orderIndex !== -1) {\n keys.forEach((key) => {\n const name = data.find(d => d[groupByIndex] === key);\n map[key] = name[orderIndex];\n });\n normalizedData.keys.sort((a, b) => map[a].localeCompare(map[b]));\n }\n\n const stackData = stack({\n keys: normalizedData.keys,\n offset: config.offset || 'diverging',\n order: sort,\n data: normalizedData.data\n });\n stackData.forEach((seriesData) => {\n seriesData.forEach((dataObj) => {\n dataObj.data = dataObj.data._tuple[seriesData.key];\n });\n });\n return stackData;\n};\n\n","import {\n FieldType,\n getDomainFromData,\n setStyles,\n easeFns,\n selectElement,\n DimensionSubtype\n} from 'muze-utils';\nimport { ScaleType } from '@chartshq/muze-axis';\nimport { transformFactory } from '@chartshq/transform';\nimport { IDENTITY, STACK, GROUP, COLOR, SHAPE, SIZE, ENCODING } from '../enums/constants';\n\nconst BAND = ScaleType.BAND;\n\nexport const getLayerColor = ({ datum, index }, { colorEncoding, colorAxis, colorFieldIndex }) => {\n let rawColor = '';\n let color = '';\n if (colorEncoding && colorEncoding.value instanceof Function) {\n color = colorEncoding.value(datum, index);\n rawColor = colorEncoding.value(datum, index);\n } else {\n rawColor = colorAxis.getRawColor(datum._data[colorFieldIndex]);\n color = colorAxis.getHslString(rawColor);\n }\n return { color, rawColor };\n};\n\nconst transfromColor = (colorAxis, datum, styleType, intensity) => {\n datum.meta.stateColor[styleType] = datum.meta.stateColor[styleType] || datum.meta.originalColor;\n const fillColorInfo = colorAxis.transformColor(datum.meta.stateColor[styleType], intensity);\n datum.meta.stateColor[styleType] = fillColorInfo.hsla;\n\n return fillColorInfo;\n};\n\nexport const applyInteractionStyle = (context, selectionSet, interactionStyles, config) => {\n const elements = context.getPlotElementsFromSet(selectionSet);\n const axes = context.axes();\n const colorAxis = axes.color;\n const apply = config.apply;\n const interactionType = config.interactionType;\n interactionStyles.forEach((style) => {\n const styleType = style.type;\n elements.style(styleType, ((d) => {\n const { colorTransform, stateColor, originalColor } = d.meta;\n colorTransform[interactionType] = colorTransform[interactionType] || {};\n if (apply && !colorTransform[interactionType][styleType]) {\n // fade selections\n colorTransform[interactionType][styleType] = style.intensity;\n const color = transfromColor(colorAxis, d, styleType, style.intensity).color;\n return color;\n }\n if (!apply && colorTransform[interactionType][styleType]) {\n // unfade selections\n colorTransform[interactionType][styleType] = null;\n return transfromColor(colorAxis, d, styleType, style.intensity.map(e => -e)).color;\n }\n const [h, s, l, a] = stateColor[styleType] ? stateColor[styleType] : originalColor;\n return `hsla(${h * 360},${s * 100}%,${l * 100}%, ${a || 1})`;\n }));\n });\n};\n\n/**\n *\n *\n * @param {*} selectionSet\n * @param {*} className\n * @param {*} hasFaded\n */\nexport const fadeUnfadeSelection = (context, selectionSet, hasFaded, interaction) => {\n const interactionConfig = { interaction, apply: hasFaded };\n applyInteractionStyle(context, selectionSet, 'fade', interactionConfig);\n};\n\n/**\n *\n *\n * @param {*} selectionSet\n * @param {*} className\n * @param {*} hasFaded\n */\nexport const focusUnfocusSelection = (context, selectionSet, isFocussed, interaction) => {\n const interactionConfig = { interaction, apply: isFocussed };\n applyInteractionStyle(context, selectionSet, 'focus', interactionConfig);\n};\n\n/**\n *\n *\n * @param {*} axes\n * @returns\n */\nexport const getAxesScales = (axes) => {\n const [xAxis, yAxis] = [ENCODING.X, ENCODING.Y].map(e => axes[e]);\n const [xScale, yScale] = [xAxis, yAxis].map(e => e && e.scale());\n return {\n xAxis,\n yAxis,\n xScale,\n yScale\n };\n};\n\n/**\n *\n *\n * @param {*} encoding\n * @param {*} fieldsConfig\n * @returns\n */\nexport const getEncodingFieldInf = (encoding, fieldsConfig) => {\n const [xField, yField, x0Field, y0Field, colorField, shapeField, sizeField] =\n [ENCODING.X, ENCODING.Y, ENCODING.X0, ENCODING.Y0, COLOR, SHAPE, SIZE].map(e => encoding[e] &&\n encoding[e].field);\n\n const [xFieldType, yFieldType] = [xField, yField, x0Field, y0Field].map(e => fieldsConfig[e] &&\n fieldsConfig[e].def.type);\n\n const [xFieldSubType, yFieldSubType] = [xField, yField].map(e => fieldsConfig[e] && (fieldsConfig[e].def.subtype ||\n fieldsConfig[e].def.type));\n\n const [xFieldIndex, yFieldIndex, x0FieldIndex, y0FieldIndex] = [xField, yField, x0Field, y0Field]\n .map(e => fieldsConfig[e] && fieldsConfig[e].index);\n\n return {\n xField,\n yField,\n colorField,\n shapeField,\n sizeField,\n x0Field,\n y0Field,\n xFieldType,\n yFieldType,\n xFieldSubType,\n yFieldSubType,\n xFieldIndex,\n yFieldIndex,\n x0FieldIndex,\n y0FieldIndex\n };\n};\n\n/**\n *\n *\n * @param {*} layerConfig\n * @param {*} fieldsConfig\n * @returns\n */\nexport const getValidTransform = (layerConfig, fieldsConfig, encodingFieldInf) => {\n let transformType;\n const {\n transform\n } = layerConfig;\n const {\n xField,\n yField,\n xFieldType,\n yFieldType\n } = encodingFieldInf;\n const groupByField = transform.groupBy;\n const groupByFieldMeasure = fieldsConfig[groupByField] && fieldsConfig[groupByField].def.type === FieldType.MEASURE;\n transformType = transform.type;\n if (!xField || !yField || groupByFieldMeasure || !groupByField || xFieldType === FieldType.DIMENSION &&\n yFieldType === FieldType.DIMENSION) {\n transformType = IDENTITY;\n }\n return transformType;\n};\n\n/**\n *\n *\n * @param {*} dataModel\n * @param {*} config\n * @param {*} transformType\n * @returns\n */\nexport const transformData = (dataModel, config, transformType, encodingFieldInf) => {\n const data = dataModel.getData({ withUid: true });\n const schema = data.schema;\n const transform = config.transform;\n const {\n xField,\n yField,\n xFieldType,\n yFieldType\n } = encodingFieldInf;\n const uniqueField = xFieldType === FieldType.MEASURE ? yField : xField;\n\n return transformFactory(transformType)(schema, data.data, {\n groupBy: transform.groupBy,\n uniqueField,\n sort: transform.sort || 'none',\n offset: transform.offset,\n orderBy: transform.orderBy,\n value: yFieldType === FieldType.MEASURE ? yField : xField\n }, data.uids);\n};\n\nexport const getIndividualClassName = (d, i, data, context) => {\n const className = context.config().individualClassName;\n let classNameStr = '';\n if (className instanceof Function) {\n classNameStr = className(d, i, data, context);\n }\n return classNameStr;\n};\n\n/*\n * This method resolves the x, y, x0 and y0 values from the transformed data.\n * It also checks the type of transformed data for example, if it is a stacked data\n * then it fetches the y and y0 values from the stacked data.\n * @param {Array.} transformedData transformed data\n * @param {Object} fieldsConfig field definitions\n * @param {string} transformType type of transformed data - stack, group or identity.\n * @return {Array.} Normalized data\n*/\nexport const getNormalizedData = (transformedData, fieldsConfig, encodingFieldInf, transformType) => {\n const transformedDataArr = transformType === IDENTITY ? [transformedData] : transformedData;\n const {\n xFieldType,\n xFieldIndex,\n yFieldIndex,\n x0FieldIndex,\n y0FieldIndex\n } = encodingFieldInf;\n const fieldsLen = Object.keys(fieldsConfig).length;\n /**\n * Returns normalized data from transformed data. It recursively traverses through\n * the transformed data if there it is nested.\n */\n return transformedDataArr.map((data) => {\n const values = transformType === GROUP ? data.values : data;\n return values.map((d) => {\n let pointObj = {};\n let tuple;\n if (transformType === STACK) {\n tuple = d.data || [];\n let y;\n let y0;\n let x;\n let x0;\n if (d[1] >= d[0]) {\n y = x0 = d[1];\n x = y0 = d[0];\n } else {\n y = x0 = d[0];\n x = y0 = d[1];\n }\n\n pointObj = xFieldType === FieldType.MEASURE ? {\n x,\n x0,\n y: tuple[yFieldIndex],\n y0: tuple[yFieldIndex]\n } : {\n x: tuple[xFieldIndex],\n x0: tuple[xFieldIndex],\n y,\n y0\n };\n pointObj._data = tuple;\n pointObj._id = tuple[fieldsLen];\n } else {\n pointObj = {\n x: d[xFieldIndex],\n y: d[yFieldIndex],\n x0: d[x0FieldIndex],\n y0: d[y0FieldIndex]\n };\n pointObj._data = d;\n pointObj._id = d[fieldsLen];\n }\n return pointObj;\n });\n }).filter(d => d.length);\n};\n\nexport const calculateDomainFromData = (data, encodingFieldInf, transformType) => {\n const {\n xFieldSubType,\n yFieldSubType,\n xField,\n yField,\n x0Field,\n y0Field\n } = encodingFieldInf;\n const domains = {};\n const yEnc = ENCODING.Y;\n const xEnc = ENCODING.X;\n if (xField) {\n domains.x = getDomainFromData(data, x0Field || transformType === STACK ? [xEnc, ENCODING.X0] : [xEnc, xEnc],\n xFieldSubType);\n }\n if (yField) {\n domains.y = getDomainFromData(data, y0Field || transformType === STACK ? [ENCODING.Y0, ENCODING.Y] :\n [yEnc, yEnc], yFieldSubType);\n }\n\n return domains;\n};\n\nexport const attachDataToVoronoi = (voronoi, points) => {\n voronoi.data([].concat(...points).filter(d => d._id !== undefined).map((d) => {\n const point = d.update;\n return {\n x: point.x,\n y: point.y,\n data: d\n };\n }));\n};\n\n/**\n *\n *\n * @param {*} target\n * @param {*} styles\n * @param {*} remove\n */\nexport const updateStyle = (target, styles, remove) => {\n for (const key in styles) {\n if ({}.hasOwnProperty.call(styles, key)) {\n target.style(key, remove ? null : styles[key]);\n }\n }\n};\n\n/**\n *\n *\n * @param {*} mount\n * @param {*} context\n */\nexport const animateGroup = (mount, context) => {\n let groupTransition;\n let update;\n const { transition, groupAnimateStyle } = context;\n const { duration, effect, disabled } = transition;\n if (groupAnimateStyle) {\n setStyles(mount.node(), groupAnimateStyle.enter);\n update = groupAnimateStyle.update;\n if (!disabled) {\n groupTransition = mount.transition()\n .ease(easeFns[effect])\n .duration(duration)\n .on('end', function () {\n updateStyle(selectElement(this), update, true);\n });\n } else {\n groupTransition = mount;\n }\n updateStyle(groupTransition, update);\n }\n};\n\nexport const positionPoints = (context, points) => {\n const positioner = context.encodingTransform();\n if (positioner) {\n return positioner(points, context, { smartLabel: context._dependencies.smartLabel });\n }\n return points;\n};\n\n/**\n * Gets the width of each group. It gets the width from axis if it is available for\n * example when the scale is nominal else it calculates the width from the\n * range of the axis and number of data points.\n *\n * @param {SimpleAxis} axis instance of axis\n * @param {number} minDiff Minimum difference between data points\n * @return {number} width of each bar\n * @private\n*/\nexport const getGroupSpan = (axis, minDiff) => {\n let groupSpan;\n const width = axis.getUnitWidth();\n const scale = axis.scale();\n const range = scale.range();\n const domain = scale.domain();\n !width ? groupSpan = (Math.abs(range[1] - range[0]) / Math.abs(domain[1] - domain[0])) * minDiff :\n (groupSpan = width);\n\n return groupSpan;\n};\n\nexport const getPlotMeasurement = (context, dimensionalValues) => {\n const fieldInfo = context.encodingFieldsInf();\n const axes = context.axes();\n const transformType = context.transformType();\n const config = context.config();\n const bandScale = context._bandScale;\n\n return ['x', 'y'].map((type) => {\n let span = 0;\n let groupSpan = 0;\n let padding = 0;\n let offsetValues = [];\n if (fieldInfo[`${type}FieldType`] === FieldType.DIMENSION) {\n let actualGroupWidth;\n const isTemporal = fieldInfo[`${type}FieldSubType`] === DimensionSubtype.TEMPORAL;\n const timeDiff = isTemporal ? context.dataProps().timeDiffs[type] : 0;\n const axis = axes[type];\n const pad = config[`pad${type.toUpperCase()}`];\n const innerPadding = config.innerPadding;\n const keys = dimensionalValues;\n const scale = axis.scale();\n groupSpan = getGroupSpan(axis, timeDiff);\n const isAxisBandScale = axis.constructor.type() === BAND;\n const axisPadding = axis.config().padding;\n // If it is a grouped bar then the width of each bar in a grouping is retrieved from\n // a band scale. The band scale will have range equal to width of one group of bars and\n // the domain is set to series keys.\n if (transformType === 'group') {\n const groupPadding = isAxisBandScale ? 0 : axisPadding * groupSpan / 2;\n bandScale.range([groupPadding, groupSpan - groupPadding]).domain(keys).paddingInner(innerPadding);\n span = bandScale.bandwidth();\n actualGroupWidth = groupSpan - (isAxisBandScale ? 0 : axisPadding * groupSpan);\n offsetValues = keys.map(key => bandScale(key) - (isAxisBandScale ? 0 : (groupSpan / 2)));\n } else if (pad !== undefined) {\n let offset;\n if (isAxisBandScale) {\n const step = scale.step();\n offset = scale.padding() * step;\n span = scale.bandwidth() + offset;\n } else {\n span = groupSpan;\n }\n offsetValues = keys.map(() => (isAxisBandScale ? -(offset / 2) : -(span / 2)));\n } else {\n padding = isAxisBandScale ? 0 : axisPadding * groupSpan;\n span = groupSpan - padding;\n actualGroupWidth = span;\n offsetValues = keys.map(() => (isAxisBandScale ? 0 : -(span / 2)));\n }\n\n groupSpan = actualGroupWidth;\n padding = isAxisBandScale ? axisPadding * axis.scale().step() : axisPadding * groupSpan;\n }\n\n return {\n span,\n offsetValues,\n groupSpan,\n padding\n };\n });\n};\n","import { nextFrame } from 'muze-utils';\nimport { getValidTransform, getEncodingFieldInf } from '../helpers';\nimport * as PROPS from '../enums/props';\n\nexport const listenerMap = context => [\n {\n props: [PROPS.TRANSFORMED_DATA],\n listener: fetch => fetch(PROPS.DATA, PROPS.CONFIG, (dataModel, config) => {\n const dataModelValue = dataModel.value;\n const configValue = config.value;\n const encodingValue = configValue && configValue.encoding;\n if (dataModelValue && encodingValue) {\n const fieldsConfig = dataModelValue.getFieldsConfig();\n const encodingFieldsInf = getEncodingFieldInf(encodingValue, fieldsConfig);\n context.encodingFieldsInf(encodingFieldsInf);\n context.transformType(getValidTransform(configValue, fieldsConfig, encodingFieldsInf));\n return context.getTransformedData(dataModelValue, configValue, context.transformType(),\n encodingFieldsInf);\n }\n return null;\n }),\n type: 'computed'\n },\n {\n props: [PROPS.NORMALIZED_DATA],\n listener: fetch => fetch(PROPS.TRANSFORMED_DATA, (transformedData) => {\n const transformedDataValue = transformedData.value;\n if (transformedDataValue) {\n const fieldsConfig = context.data().getFieldsConfig();\n return context.getNormalizedData(transformedDataValue, fieldsConfig);\n }\n return null;\n }),\n type: 'computed'\n },\n {\n props: [PROPS.DOMAIN],\n listener: fetch => fetch(PROPS.NORMALIZED_DATA, (normalizedData) => {\n const normalizedDataValue = normalizedData.value;\n if (normalizedDataValue) {\n return context.calculateDomainFromData(normalizedDataValue, context.encodingFieldsInf(),\n context.data().getFieldsConfig());\n }\n return null;\n }),\n type: 'computed'\n },\n {\n props: [PROPS.DATA],\n listener: (data) => {\n if (data[1]) {\n nextFrame(() => {\n context.store().commit(PROPS.DATA_UPDATED, true);\n });\n }\n },\n type: 'registerImmediateListener'\n },\n {\n props: [PROPS.MOUNT, PROPS.DATA_UPDATED],\n listener: (mount, dataUpdated) => {\n if (mount[1] && dataUpdated[1]) {\n context.render(mount[1]);\n context.dependencies().throwback.commit('onlayerdraw', true);\n }\n },\n type: 'registerChangeListener'\n }\n];\n\n","import { mergeRecursive } from 'muze-utils';\nimport * as PROPS from '../enums/props';\n\nexport const defaultOptions = {\n [PROPS.CONFIG]: {\n value: null,\n meta: {\n sanitization: (config, oldConfig, context) => {\n const constructor = context.constructor;\n const newConf = mergeRecursive({}, constructor.defaultConfig());\n return constructor.defaultPolicy(newConf, config);\n }\n }\n },\n [PROPS.DATA]: {\n value: null,\n meta: {\n preset: (data, context) => {\n if (context._cacheEnabled) {\n context._cachedData.push(data);\n } else {\n context._cachedData = [data];\n }\n }\n }\n },\n [PROPS.MOUNT]: {\n value: null\n },\n [PROPS.AXES]: {\n value: null\n },\n [PROPS.MEASUREMENT]: {\n value: null\n }\n};\n","import {\n getUniqueId,\n mergeRecursive,\n Store,\n FieldType,\n selectElement,\n ReservedFields,\n registerListeners,\n transactor,\n DataModel,\n clone\n} from 'muze-utils';\nimport { SimpleLayer } from '../simple-layer';\nimport * as PROPS from '../enums/props';\nimport {\n transformData,\n calculateDomainFromData,\n getNormalizedData,\n applyInteractionStyle\n} from '../helpers';\nimport { listenerMap } from './listener-map';\nimport { defaultOptions } from './default-options';\n\n/**\n * An abstract class which gives defination of common layer functionality like\n * - transfromation data for various {@link mode}\n * - calculating data domain\n * - linking dependent layers\n * - merging policy of configuration\n * - interaction sideffect helpers\n * - retrieving dom elements from data using id\n * - retrieving the physical dimensions of marks\n * - disposing layer\n *\n * Every layer has to extend base layer and give concrete definition.\n * This layer does not have any default visual. A new layer has to define the logic of `render` for rendering the\n * visuals\n *\n * @public\n * @class\n * @namespace Muze\n */\nexport default class BaseLayer extends SimpleLayer {\n\n /**\n * Creates a layer using a configuration and data.\n *\n * @public\n *\n * @param {DataModel} data Instance of DataModel to be used. This DataModel instance serves as the data for a layer.\n * @param {Object} axes Axes instances to be used for rendering the layer. Axes are used for mapping data from\n * value to px.\n * @param {SimpleAxis} axes.x X axis of the layer. Based on the type of variable it gets instance of BandAxis,\n * TimeAxis, ContinuousAxis\n * @param {SimpleAxis} axes.y X axis of the layer. Based on the type of variable it gets instance of BandAxis,\n * TimeAxis, ContinuousAxis\n * @param {ColorAxis} axes.color Axis for coloring a layer using color interpolators\n * @param {ShapeAxis} axes.shape Axis for providing a shape\n * @param {SizeAxis} axes.shape Axis for determining size of a mark using size interpolator\n * @param {LayerConfig} config Configuration of the layer\n * @param {Object} dependencies Dependencies of the layer\n * @param {SmartLabel} smartLabel Smartlabel singleton instance\n */\n constructor (data, axes, config, dependencies) {\n super();\n this.store(new Store({\n DATA: null,\n [PROPS.DATA_UPDATED]: null\n }));\n transactor(this, defaultOptions, this.store().model);\n this.data(data);\n this.axes(axes);\n this.config(config);\n this.alias(this.constructor.formalName() + getUniqueId());\n this.dependencies(dependencies);\n this._points = [];\n this._cachedData = [];\n this._id = getUniqueId();\n this._measurement = {};\n registerListeners(this, listenerMap);\n }\n\n /**\n * Creates a layer instance\n * @return {BaseLayer} Instance of a layer\n */\n static create (...params) {\n return new this(...params);\n }\n\n /**\n * Default configuration of the layer. This configuration gets merged to the user passed configuration using a\n * plolicy. Base layer only returns part of configuraion, any layer overridding base layer should return its own\n * configuration.\n *\n * @public\n * @static\n *\n * @return {Object} Default configuration\n */\n static defaultConfig () {\n return {\n transform: {\n type: 'identity'\n }\n };\n }\n\n /**\n * Policy defines how user config gets merged to default config. The default policy here does a deep copy\n * operation.\n * Any policy which does more than deep copying should define the policy as a static member.\n *\n * @static\n * @public\n *\n * @param {LayerConfig} conf Configuration with which the user config will be merged\n * @param {LayerConfig} userConf Configuration given by the user\n *\n * @return {LayerConfig} Merged layer configuration\n */\n static defaultPolicy (conf, userConf) {\n return mergeRecursive(conf, userConf);\n }\n\n /**\n * Determines a name for a layer. This name of the layer is used in the input data to refer to this layer.\n * ```\n * .layer([\n * mark: 'bar',\n * encoding: { ... }\n * ])\n * ```\n *\n * @static\n * @public\n *\n * @returns {string} name of layer\n */\n static formalName () {\n return 'base';\n }\n\n store (...store) {\n if (store.length) {\n this._store = store[0];\n return this;\n }\n return this._store;\n }\n\n encodingFieldsInf (...fieldsInf) {\n if (fieldsInf.length) {\n this._encodingFieldsInf = fieldsInf[0];\n return this;\n }\n return this._encodingFieldsInf;\n }\n\n encodingTransform (...encodingTransform) {\n if (encodingTransform.length) {\n this._encodingTransform = encodingTransform[0];\n return this;\n }\n return this._encodingTransform;\n }\n\n /**\n * Provides a alias for a layer. Like it's possible to have same layer (like bar) multiple times, but among multiple\n * layers of same type if one layer has to be referred, alias is used. If no alias is given then `formalName` is set\n * as the alias name.\n *\n * @public\n *\n * If used as setter\n * @param {string} alias Name of the alias\n * @return {BaseLayer} Instance of current base layer\n *\n * If used as getter\n * @return {string} Alias of the current layer\n */\n alias (...params) {\n if (params.length) {\n this._alias = params[0];\n return this;\n }\n return this._alias || this.constructor.formalName();\n }\n\n dependencies (...params) {\n if (params.length) {\n this._dependencies = params[0];\n return this;\n }\n return this._dependencies;\n }\n\n enableCaching () {\n this._cacheEnabled = true;\n return this;\n }\n\n clearCaching () {\n this._cacheEnabled = false;\n return this.data(this._cachedData[0]);\n }\n\n /**\n * Serialize the schema. Merge config is used for serialization.\n *\n * @public\n *\n * @return {LayerConfig} Serialized schema\n */\n serialize () {\n return this.config();\n }\n\n /**\n * Returns the unique identifier of this layer. Id is auto generated during the creation proceess of a schema.\n *\n * @return {string} id of the layer\n */\n id () {\n return this._id;\n }\n\n /**\n * Gets the transform method from transform factory based on type of transform. It then calls the\n * transform method with the data and passes the configuration parameters of transform such as\n * groupBy, value field, etc.\n *\n * @public\n *\n * @param {DataModel} dataModel Instance of DataModel\n * @param {Object} config Configuration for transforming data\n * @return {Array.} Transformed data.\n */\n getTransformedData (dataModel, config, transformType, encodingFieldsInf) {\n return transformData(dataModel, config, transformType, encodingFieldsInf);\n }\n\n /**\n * Calculates the domain from the data.\n * It checks the type of field and calculates the domain based on that. For example, if it\n * is a quantitative or temporal field, then it calculates the min and max from the data or\n * if it is a nominal field then it gets all the values from the data of that field.\n * @param {Array} data DataArray\n * @param {Object} fieldsConfig Configuration of fields\n * @return {Array} Domain values array.\n */\n calculateDomainFromData (data) {\n let domains = {};\n const isEmpty = this.data().isEmpty();\n\n if (!isEmpty) {\n domains = calculateDomainFromData(data, this.encodingFieldsInf(), this.transformType());\n }\n return domains;\n }\n\n shouldDrawAnchors () {\n return false;\n }\n\n /**\n * Returns the domain for the axis.\n *\n * @param {string} encodingType type of encoding x, y, etc.\n * @return {Object} Axis domains\n */\n getDataDomain (encodingType) {\n const domains = this.store().get(PROPS.DOMAIN);\n return encodingType !== undefined ? domains[encodingType] || [] : domains;\n }\n\n /**\n * Returns the domain for the axis.\n *\n * @param {string} encodingType type of encoding x, y, etc.\n * @return {Object} Axis domains\n */\n getNormalizedData (transformedData, fieldsConfig) {\n return getNormalizedData(transformedData, fieldsConfig, this.encodingFieldsInf(), this.transformType());\n }\n\n /**\n * Abstract method for getting nearest point\n * @return {BaseLayer} Instance of base layer\n */\n getNearestPoint () {\n return null;\n }\n\n applyInteractionStyle (interactionType, selectionSet, apply) {\n const interactionConfig = this.config().interaction || {};\n\n const interactionStyles = interactionConfig[interactionType];\n if (interactionStyles) {\n applyInteractionStyle(this, selectionSet, interactionStyles, {\n apply,\n interactionType\n });\n }\n }\n\n /**\n *\n *\n * @returns\n * @memberof BaseLayer\n */\n transformType (...transformType) {\n if (transformType.length) {\n this._transformType = transformType[0];\n return this;\n }\n return this._transformType;\n }\n\n /**\n * Renders the layer\n * @return {BaseLayer} Instance of the layer.\n */\n render () {\n return this;\n }\n\n /**\n *\n *\n * @returns\n * @memberof BaseLayer\n */\n elemType () {\n return 'g';\n }\n\n /**\n * Disposes the entire layer\n * @return {BaseLayer} Instance of layer.\n */\n remove () {\n this.store().unsubscribeAll();\n selectElement(this.mount()).remove();\n return this;\n }\n\n /**\n * Stores point in an object with key as the categorical value or temporal value\n *\n * @param {string} key categorical value or temporal value\n * @param {Object} data Information of the data point\n * @return {BarLayer} Instance of bar layer\n */\n cachePoint (key, data) {\n if (key === null) {\n return this;\n }\n const pointMap = this._pointMap;\n !pointMap[key] && (pointMap[key] = []);\n pointMap[key].push(data);\n return this;\n }\n\n /**\n *\n *\n * @param {*} dataProps\n * @returns\n * @memberof BaseLayer\n */\n dataProps (...dataProps) {\n if (dataProps.length) {\n this._dataProps = dataProps[0];\n return this;\n }\n return this._dataProps;\n }\n\n /**\n *\n *\n * @param {*} data\n * @param {*} id\n * @returns\n * @memberof BaseLayer\n */\n getIdentifiersFromData (data) {\n const schema = this.data().getData().schema;\n const fieldsConfig = this.data().getFieldsConfig();\n const identifiers = [[], []];\n const {\n xFieldType,\n yFieldType,\n xField,\n yField\n } = this.encodingFieldsInf();\n\n const [xMeasure, yMeasure] = [xFieldType, yFieldType].map(type => type === FieldType.MEASURE);\n schema.forEach((d, i) => {\n const name = d.name;\n if (fieldsConfig[name].def.type === FieldType.DIMENSION) {\n identifiers[0].push(name);\n identifiers[1].push(data[i]);\n }\n });\n\n if (xMeasure && yMeasure) {\n const xMeasureIndex = fieldsConfig[xField].index;\n const yMeasureIndex = fieldsConfig[yField].index;\n identifiers[0].push(...[xField, yField]);\n identifiers[1].push(...[data[xMeasureIndex], data[yMeasureIndex]]);\n }\n return identifiers;\n }\n\n getPlotSpan () {\n return {\n x: 0,\n y: 0\n };\n }\n\n getPlotPadding () {\n return {\n x: 0,\n y: 0\n };\n }\n\n /**\n *\n *\n * @param {*} identifiers\n * @returns\n * @memberof BaseLayer\n */\n getPointsFromIdentifiers (identifiers, config = {}) {\n const getAllAttrs = config.getAllAttrs;\n const getBBox = config.getBBox;\n if (!this.data()) {\n return [];\n }\n let fieldNames;\n let values;\n if (identifiers instanceof DataModel) {\n const dataObj = identifiers.getData();\n fieldNames = dataObj.schema.map(d => d.name);\n values = dataObj.data;\n } else {\n fieldNames = identifiers[0];\n values = identifiers.slice(1, identifiers.length);\n }\n\n const points = this._points;\n const fieldsConfig = this.data().getFieldsConfig();\n\n const filteredPoints = [].concat(...points).filter((point) => {\n const { _data, _id } = point;\n\n return fieldNames.every((field, idx) => {\n if (field in fieldsConfig && fieldsConfig[field].def.type === FieldType.DIMENSION) {\n return values.findIndex(d => d[idx] === _data[fieldsConfig[field].index]) !== -1;\n } else if (field === ReservedFields.ROW_ID) {\n return values.findIndex(d => d[idx] === _id) !== -1;\n } return true;\n });\n });\n return getAllAttrs ? filteredPoints : filteredPoints.map((d) => {\n const obj = clone(d);\n if (getBBox) {\n const update = obj.update || obj;\n if (obj.size !== undefined) {\n const sizeVal = Math.sqrt(obj.size / Math.PI) * 2;\n update.width = sizeVal;\n update.height = sizeVal;\n update.x -= sizeVal / 2;\n update.y -= sizeVal / 2;\n } else {\n if (update.width === undefined) {\n update.width = 2;\n }\n if (update.height === undefined) {\n update.height = 2;\n }\n }\n }\n\n return obj.update || obj;\n }).sort((a, b) => a.y - b.y);\n }\n\n getTransformedDataFromIdentifiers (identifiers) {\n const { data: identifierData, schema: identifierSchema } = identifiers.getData();\n const normalizedData = this.store().get(PROPS.NORMALIZED_DATA);\n const fieldsConfig = this.data().getFieldsConfig();\n const {\n yField,\n xField,\n yFieldType,\n xFieldType\n } = this.encodingFieldsInf();\n let measureIndex;\n let enc;\n if (xFieldType === FieldType.MEASURE) {\n measureIndex = fieldsConfig[xField].index;\n enc = 'x';\n } else if (yFieldType === FieldType.MEASURE) {\n measureIndex = fieldsConfig[yField].index;\n enc = 'y';\n }\n\n const transformedData = [];\n normalizedData.forEach((dataArr) => {\n dataArr.forEach((dataObj) => {\n const tupleArr = dataObj._data;\n const exist = identifierSchema.every((obj, i) =>\n identifierData.findIndex(d => tupleArr[fieldsConfig[obj.name].index] === d[i]) !== -1);\n if (exist) {\n const transformedVal = dataObj[enc];\n const row = dataObj._data;\n const tuple = {};\n for (const key in fieldsConfig) {\n const index = fieldsConfig[key].index;\n tuple[key] = row[index];\n if (index === measureIndex) {\n tuple[key] = transformedVal;\n }\n }\n transformedData.push(tuple);\n }\n });\n });\n\n return [transformedData, this.data().getData().schema];\n }\n\n /**\n *\n *\n * @param {*} set\n * @returns\n * @memberof BaseLayer\n */\n getPlotElementsFromSet (set) {\n return selectElement(this.mount()).selectAll(this.elemType()).filter(data =>\n (data ? set.indexOf(data._id) !== -1 : false));\n }\n}\n","import {\n selectElement,\n makeElement,\n pathInterpolators,\n Symbols\n} from 'muze-utils';\nimport { updateStyle } from '../../helpers';\n\nconst line = Symbols.line;\n\n/**\n * Draws a line from the points\n * Generates a svg path string\n * @param {Object} params Contains container, points and interpolate attribute.\n */\nexport const drawLine = (context) => {\n let filteredPoints;\n const { container, points, interpolate, connectNullData, className, style, transition } = context;\n const mount = selectElement(container).attr('class', className);\n const curveInterpolatorFn = pathInterpolators[interpolate];\n const linepath = line()\n .curve(curveInterpolatorFn)\n .x(d => d.update.x)\n .y(d => d.update.y)\n .defined(d => d.update.y !== null);\n\n filteredPoints = points;\n if (connectNullData) {\n filteredPoints = points.filter(d => d.update.y !== null);\n }\n\n updateStyle(mount, style);\n let element = makeElement(mount, 'path', [1]);\n element.classed(points[0].className, true);\n if (!transition.disabled) {\n element = element.transition().duration(transition.duration);\n }\n element.attr('d', linepath(filteredPoints))\n .style('fill-opacity', 0);\n return element;\n};\n","import { CLASSPREFIX } from '../../enums/constants';\n\nexport const defaultConfig = {\n classPrefix: CLASSPREFIX,\n defClassName: 'layer-line',\n className: '',\n interpolate: 'linear',\n transform: {\n type: 'group'\n },\n interaction: {\n highlight: [{\n type: 'stroke',\n intensity: [0, 0, -15, 0]\n }],\n fade: [{\n type: 'stroke',\n intensity: [0, 0, +15, 0]\n }],\n focus: [{\n type: 'stroke',\n intensity: [0, 0, +15, 0]\n }]\n },\n nearestPointThreshold: 20,\n encoding: {\n color: {},\n x: {},\n y: {},\n strokeOpacity: {\n value: 1\n }\n },\n transition: {\n effect: 'cubic',\n duration: 1000\n },\n connectNullData: false\n};\n\n","import {\n Voronoi,\n getQualifiedClassName,\n selectElement,\n makeElement,\n FieldType,\n getObjProp\n} from 'muze-utils';\nimport { BaseLayer } from '../../base-layer';\nimport { drawLine } from './renderer';\nimport { defaultConfig } from './default-config';\nimport { ENCODING } from '../../enums/constants';\nimport * as PROPS from '../../enums/props';\nimport {\n attachDataToVoronoi,\n animateGroup,\n getLayerColor,\n positionPoints,\n getIndividualClassName\n} from '../../helpers';\n\nimport './styles.scss';\n\n/**\n * Line Layer creates a line plot.\n * Example :-\n * const config = {\n * encoding = {\n * x: {\n * field: 'date'\n * },\n * y: {\n * field: 'sales'\n * }\n * }\n * };\n * const linelayer = layerFactory.getLayer('line', [dataModel, axes, config]);\n * linelayer.render(container);\n * @class\n */\nexport default class LineLayer extends BaseLayer {\n\n /**\n *Creates an instance of LineLayer.\n * @param {*} args\n * @memberof LineLayer\n */\n constructor (...args) {\n super(...args);\n this._voronoi = new Voronoi();\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof LineLayer\n */\n static formalName () {\n return 'line';\n }\n\n /**\n *\n *\n * @returns\n * @memberof LineLayer\n */\n elemType () {\n return 'path';\n }\n\n /**\n * Default configuration of line layer\n * @return {Object} Default configuration of layer\n */\n static defaultConfig () {\n return defaultConfig;\n }\n\n /**\n *\n *\n * @static\n * @param {*} conf\n * @param {*} userConf\n * @returns\n * @memberof LineLayer\n */\n static defaultPolicy (conf, userConf) {\n const config = BaseLayer.defaultPolicy(conf, userConf);\n const encoding = config.encoding;\n const transform = config.transform;\n const colorField = encoding.color && encoding.color.field;\n\n if (colorField && !transform.groupBy) {\n transform.groupBy = colorField;\n }\n return config;\n }\n\n /**\n * Returns the draw method for line\n * @return {Function} Draw method of line layer\n */\n getDrawFn () {\n return drawLine;\n }\n\n /**\n * Applies selection styles to the elements that fall within the selection set.\n * @param {Array} selectionSet Array of tuple ids.\n * @param {Object} config Configuration for selection.\n * @return {BarLayer} Instance of bar layer.\n */\n highlightPoint () {\n return this;\n }\n\n /**\n * Removes selection styles to the elements that fall within the selection set.\n * @param {Array} selectionSet Array of tuple ids.\n * @param {Object} config Configuration for selection.\n * @return {BarLayer} Instance of bar layer.\n */\n dehighlightPoint () {\n return this;\n }\n\n focusSelection () {\n return this;\n }\n\n focusOutSelection () {\n return this;\n }\n\n fadeOutSelection () {\n return this;\n }\n\n unfadeSelection () {\n return this;\n }\n\n shouldDrawAnchors () {\n return true;\n }\n\n /**\n * Generates the x and y positions for each point\n * @param {Array} data Data Array\n * @param {Object} encoding Visual Encodings of the layer\n * @param {Object} axes Contains the axis\n * @param {number} seriesIndex index of series\n * @return {Array} Array of points\n */\n translatePoints (data, encodingFieldsInf, axes) {\n let points = [];\n const xAxis = axes.x;\n const yAxis = axes.y;\n const colorAxis = axes.color;\n const encoding = this.config().encoding;\n const { xFieldType, yFieldType } = encodingFieldsInf;\n const isXDim = xFieldType === FieldType.DIMENSION;\n const isYDim = yFieldType === FieldType.DIMENSION;\n const key = isXDim ? ENCODING.X : (isYDim ? ENCODING.Y : null);\n const colorEncoding = encoding.color;\n const colorField = colorEncoding.field;\n const fieldsConfig = this.data().getFieldsConfig();\n const colorFieldIndex = colorField && fieldsConfig[colorField].index;\n const style = {};\n const meta = {};\n\n points = data.map((d, i) => {\n const xPx = xAxis.getScaleValue(d.x) + xAxis.getUnitWidth() / 2;\n const yPx = yAxis.getScaleValue(d.y);\n const { color, rawColor } = getLayerColor({ datum: d, index: i }, {\n colorEncoding, colorAxis, colorFieldIndex });\n\n style.stroke = color;\n style['fill-opacity'] = 0;\n meta.stateColor = {};\n meta.originalColor = rawColor;\n meta.colorTransform = {};\n\n const point = {\n enter: {},\n update: {\n x: xPx,\n y: d.y === null ? null : yPx\n },\n style,\n _data: d._data,\n _id: d._id,\n rowId: d._id,\n source: d._data,\n meta\n };\n point.className = getIndividualClassName(d, i, data, this);\n this.cachePoint(d[key], point);\n return point;\n });\n points = positionPoints(this, points);\n return points;\n }\n\n /**\n * Renders the line plot\n * @param {SVGElement} container svg element\n * @return {LineLayer} instance of line layer\n */\n render (container) {\n let points;\n let seriesClassName;\n let style;\n\n const config = this.config();\n const {\n encoding,\n interpolate,\n className,\n defClassName,\n transition\n } = config;\n const store = this._store;\n const normalizedData = store.get(PROPS.NORMALIZED_DATA);\n const transformedData = store.get(PROPS.TRANSFORMED_DATA);\n const fieldsConfig = this.data().getFieldsConfig();\n const axes = this.axes();\n const keys = transformedData.map(d => d.key);\n const qualifiedClassName = getQualifiedClassName(defClassName, this.id(), config.classPrefix);\n const containerSelection = selectElement(container);\n const colorField = encoding.color.field;\n const colorFieldIndex = fieldsConfig[colorField] && fieldsConfig[colorField].index;\n\n this._points = [];\n this._pointMap = {};\n containerSelection.classed(qualifiedClassName.join(' '), true);\n containerSelection.classed(className, true);\n makeElement(container, 'g', normalizedData, null, {\n enter: (group) => {\n animateGroup(group, {\n transition,\n groupAnimateStyle: {\n enter: {\n 'stroke-opacity': 0,\n 'fill-opacity': this.getPathStyle()['fill-opacity']\n },\n update: {\n 'stroke-opacity': encoding.strokeOpacity.value\n }\n }\n });\n },\n update: (group, dataArr, i) => {\n points = this.translatePoints(dataArr, this.encodingFieldsInf(), axes, i);\n this._points.push(points);\n seriesClassName = `${qualifiedClassName[0]}-${keys[i] || i}`.toLowerCase();\n\n let color;\n const colorValFn = encoding.color.value;\n const colorVal = points.find(d => d._data[colorFieldIndex] !== null &&\n d._data[colorFieldIndex] !== undefined);\n\n if (colorValFn) {\n color = colorValFn(dataArr, i, normalizedData);\n } else {\n color = axes.color.getColor(colorVal && colorVal._data[colorFieldIndex]);\n }\n\n style = this.getPathStyle(color);\n this.getDrawFn()({\n container: group.node(),\n interpolate,\n points,\n className: seriesClassName,\n transition,\n style: style || {},\n connectNullData: config.connectNullData\n });\n }\n }, d => d[0]._data[colorFieldIndex] || d[0]._id);\n\n attachDataToVoronoi(this._voronoi, this._points);\n return this;\n }\n\n /**\n * Get the css styles need to be applied on the line path\n * @param {string} color Color value\n * @return {Object} Path styles\n */\n getPathStyle (color) {\n return {\n stroke: color,\n 'fill-opacity': '0'\n };\n }\n\n /**\n * Gets the nearest point closest to the given position\n * @param {number} x x position\n * @param {number} y y position\n * @return {Object} Nearest point information\n */\n getNearestPoint (x, y, config) {\n let searchRadius = config.searchRadius;\n const data = this.data();\n\n if (!data || (data && data.isEmpty())) {\n return null;\n }\n\n searchRadius = searchRadius !== undefined ? searchRadius : this.config().nearestPointThreshold;\n const point = this._voronoi.find(x, y, searchRadius);\n const dimensions = getObjProp(point, 'data', 'data', 'update');\n\n if (point) {\n const { _data, _id } = point.data.data;\n const identifiers = this.getIdentifiersFromData(_data, _id);\n return {\n id: identifiers,\n dimensions: [{\n x: dimensions.x,\n y: dimensions.y,\n width: 2,\n height: 2\n }],\n layerId: this.id()\n };\n }\n return null;\n }\n}\n","import {\n easeFns,\n selectElement,\n pathInterpolators,\n Symbols\n} from 'muze-utils';\n\nconst area = Symbols.area;\n/**\n * Draws a line from the points\n * Generates a svg path string\n * @param {Object} params Contains container, points and interpolate attribute.\n */\nconst /* istanbul ignore next */ drawArea = (params) => {\n let filteredPoints;\n const { container, points, style, transition, className, connectNullData, interpolate } = params;\n\n const { effect: easeEffect, duration } = transition;\n const mount = selectElement(container);\n const curveInterpolatorFn = pathInterpolators[interpolate];\n const selection = mount.selectAll('path').data([params.points]);\n const [enterAreaPath, updateAreaPath] = ['enter', 'update'].map(e => area().curve(curveInterpolatorFn)\n .x(d => d[e].x)\n .y1(d => d[e].y)\n .y0(d => d[e].y0)\n .defined(d => d[e].y !== null\n ));\n\n filteredPoints = points;\n mount.attr('class', className);\n if (connectNullData) {\n filteredPoints = points.filter(d => d.update.y !== null);\n }\n const selectionEnter = selection.enter().append('path').attr('d', enterAreaPath(filteredPoints));\n selection.merge(selectionEnter).transition().ease(easeFns[easeEffect])\n .duration(duration)\n .attr('d', updateAreaPath(filteredPoints))\n .each(function (d) {\n const element = selectElement(this);\n\n element.classed(d[0].className, true);\n Object.keys(style).forEach(key => element.style(key, style[key]));\n });\n};\n\nexport default drawArea;\n","import { FieldType } from 'muze-utils';\nimport { defaultConfig } from './default-config';\nimport { LineLayer } from '../line';\nimport drawArea from './renderer';\nimport './styles.scss';\nimport { STACK, ENCODING } from '../../enums/constants';\nimport { getAxesScales, positionPoints, getLayerColor, getIndividualClassName } from '../../helpers';\n\n/**\n * Area Layer creates a area plot.\n * @example\n * const config = {\n * encoding = {\n * x: {\n * field: 'date'\n * },\n * // Top y value\n * y: {\n * field: 'maxTemp'\n * },\n * // Base y value\n * y0: {\n * field: 'minTemp\n * }\n * }\n * };\n * const areaLayer = layerFactory.getLayer('area', [dataModel, axes, config]);\n * areaLayer.render(container);\n * @class\n */\nexport default class AreaLayer extends LineLayer {\n /** oation of line layer\n * @return {Object} Default configuration of layer\n */\n static defaultConfig () {\n return defaultConfig;\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof AreaLayer\n */\n static formalName () {\n return 'area';\n }\n\n /**\n * Calculates the domain from data. It calls its parent class's method which is line layer\n * to get the domain and overwrites the domain according to its need.\n * @return {Array} Domain values\n */\n calculateDomainFromData (data, encodingFieldsInf, fieldsConfig) {\n const domains = super.calculateDomainFromData(data, fieldsConfig);\n [ENCODING.X, ENCODING.Y].forEach((type) => {\n const { [`${type}FieldType`]: fieldType } = encodingFieldsInf;\n if (fieldType === FieldType.MEASURE) {\n domains[type][0] = Math.min(domains[type][0], 0);\n }\n });\n return domains;\n }\n\n /**\n * Returns the drawing method of this layer\n * @return {Function} Draw method\n */\n getDrawFn () {\n return drawArea;\n }\n\n /**\n * Generates the x and y positions for each point\n * @param {Array} data Data Array\n * @param {Object} encoding Visual Encodings of the layer\n * @param {Object} axes Contains the axis\n * @return {Array} Array of points\n */\n translatePoints (data, encodingFieldsInf, axes) {\n let points = [];\n const transformType = this.transformType();\n const colorAxis = axes.color;\n const config = this.config();\n const encoding = config.encoding;\n const colorEncoding = encoding.color;\n const colorField = colorEncoding.field;\n const fieldsConfig = this.data().getFieldsConfig();\n const colorFieldIndex = colorField && fieldsConfig[colorField].index;\n const { xField, yField, y0Field } = encodingFieldsInf;\n const {\n xAxis,\n yAxis\n } = getAxesScales(axes);\n const classNameFn = config.individualClassName;\n const isXDim = fieldsConfig[xField] && fieldsConfig[xField].def.type === FieldType.DIMENSION;\n const isYDim = fieldsConfig[yField] && fieldsConfig[yField].def.type === FieldType.DIMENSION;\n const key = isXDim ? 'x' : (isYDim ? 'y' : null);\n points = data.map((d, i) => {\n const xPx = xAxis.getScaleValue(d.x) + xAxis.getUnitWidth() / 2;\n const yPx = yAxis.getScaleValue(d.y);\n const y0Px = (y0Field || transformType === STACK) ? yAxis.getScaleValue(d.y0) : yAxis.getScaleValue(0);\n const { color, rawColor } = getLayerColor({ datum: d, index: i }, {\n colorEncoding, colorAxis, colorFieldIndex });\n const style = {};\n const meta = {};\n style.fill = color;\n // style['fill-opacity'] = 0;\n meta.stateColor = {};\n meta.originalColor = rawColor;\n meta.colorTransform = {};\n const point = {\n enter: {\n x: xPx,\n y: d.y === null ? d.y : yAxis.getScaleValue(0),\n y0: d.y0 === null ? d.y0 : yAxis.getScaleValue(0)\n },\n update: {\n x: xPx,\n y: d.y === null ? d.y : yPx,\n y0: d.y0 === null ? d.y0 : y0Px\n },\n _id: d._id,\n _data: d._data,\n source: d._data,\n rowId: d._id,\n className: classNameFn ? classNameFn(d, i, data, this) : '',\n style,\n meta\n };\n point.className = getIndividualClassName(d, i, data, this);\n this.cachePoint(d[key], point);\n return point;\n });\n points = positionPoints(this, points);\n return points;\n }\n\n /**\n * Get the css styles need to be applied on the line path\n * @param {string} color Color value\n * @return {Object} Path styles\n */\n getPathStyle (color) {\n return {\n fill: color\n };\n }\n}\n\n","import { CLASSPREFIX } from '../../enums/constants';\n\nexport const defaultConfig = {\n classPrefix: CLASSPREFIX,\n defClassName: 'layer-arc',\n padding: { top: 1, bottom: 1, left: 1, right: 1 },\n className: '',\n minOuterRadius: 10,\n interaction: {\n highlight: [{\n type: 'fill',\n intensity: [0, 0, -15, 0]\n }],\n fade: [{\n type: 'fill',\n intensity: [0, 0, +15, 0]\n }],\n focus: [{\n type: 'fill',\n intensity: [0, 0, +15, 0]\n }]\n },\n height: 100,\n width: 100,\n sort: '',\n cornerRadius: 0,\n padAngle: 0,\n padRadius: 0,\n startAngle: 0,\n endAngle: 360,\n colors: ['#F44336', 'blue', 'green', 'yellow', 'orange', 'purple'],\n transform: {\n type: 'identity'\n },\n encoding: {\n 'stroke-width': {\n value: '2px'\n },\n 'stroke-linejoin': {\n value: 'round'\n },\n angle: {\n value: '1'\n },\n radius: {\n value: '1'\n },\n opacity: {\n value: '1'\n },\n color: {\n value: '1'\n },\n shape: {\n value: '1'\n },\n size: {\n value: '1'\n }\n },\n innerRadiusFixer: 10,\n transition: {\n effect: 'cubic',\n duration: 500\n },\n states: {\n highlight: {\n className: `${CLASSPREFIX}-layer-arc-highlight`\n },\n fadeout: {\n className: `${CLASSPREFIX}-layer-arc-fadeout`\n },\n selected: {\n className: `${CLASSPREFIX}-layer-arc-selected`\n }\n }\n};\n\n","import {\n makeElement,\n selectElement,\n getQualifiedClassName,\n isSimpleObject,\n getDomainFromData,\n Symbols,\n FieldType,\n ReservedFields\n} from 'muze-utils';\nimport { defaultConfig } from './default-config';\nimport { BaseLayer } from '../../base-layer';\nimport * as PROPS from '../../enums/props';\nimport { ASCENDING, OUTER_RADIUS_VALUE } from '../../enums/constants';\nimport { getIndividualClassName } from '../../helpers';\nimport { getRangeValue, getRadiusRange, tweenPie, tweenExitPie, getFieldIndices, getPreviousPoint } from './arc-helper';\nimport './styles.scss';\n\nconst pie = Symbols.pie;\nconst arc = Symbols.arc;\n\n/**\n * Arc Layer creates a plot with polar coordinates\n * Example :-\n * const config = {\n * height: 100,\n * width: 100,\n * startAngle: 0,\n * endAngle: Math.PI,\n * cornerRadius: 10,\n * minOuterRadius: 10,\n * outerRadius: 10,\n * innerRadius: 5,\n * padAngle: 2,\n * padRadius: 2,\n * colors: []\n * padding: {top: 10, bottom: 10, left: 10, right: 10},\n * encoding = {\n * angle: {\n * field: 'date' //Maps to angle of arc\n * },\n * radius: {\n * field: 'sales' // Maps to radius of arc\n * }\n * }\n * };\n * @class\n */\nexport default class ArcLayer extends BaseLayer {\n\n constructor (data, axes, config, dependencies) {\n super(data, axes, config, dependencies);\n this._prevPieData = {};\n }\n\n /**\n * returns the default configuration of the layer\n *\n * @static\n * @return {Object} Default configuration for arc layer\n * @memberof ArcLayer\n */\n static defaultConfig () {\n return defaultConfig;\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof ArcLayer\n */\n static formalName () {\n return 'arc';\n }\n\n /**\n *\n *\n * @returns\n * @memberof ArcLayer\n */\n elemType () {\n return 'path';\n }\n\n /**\n * Transforms data in the appropriate data structure to be consumed by the layer for rendering\n *\n * @param {Object} data data model associated with the layer\n * @param {Object} config configuration of the layer that contains encoding and other parameters\n * @return {Object} Transformed pie data\n * @memberof ArcLayer\n */\n getTransformedData (dataModel, config) {\n let pieData = [];\n const pieIndex = {};\n const {\n startAngle,\n endAngle,\n encoding,\n sort,\n minOuterRadius\n } = config;\n const prevData = this._store.get(PROPS.TRANSFORMED_DATA) || [];\n const fieldsConfig = this.data().getFieldsConfig();\n const {\n angleIndex,\n sizeIndex,\n radiusIndex,\n colorIndex\n } = getFieldIndices(encoding, fieldsConfig);\n const dataVal = dataModel.getData();\n const data = dataVal.data;\n const uids = dataVal.uids;\n\n this._prevPieData = {};\n\n prevData.forEach((e, index) => {\n this._prevPieData[e.uid] = [e, index];\n pieIndex[e.index] = e;\n });\n // Creating pie data using angle field provided. If the angle field is a dimension,\n // all the angles will be equal(360/number of dimensions)\n\n pieData = pie()\n .startAngle((startAngle / 180) * Math.PI)\n .endAngle(Math.PI * endAngle / 180)\n .value(d => d[angleIndex] || 1)\n .sortValues(null);\n\n sort.length && radiusIndex && pieData.sort((a, b) => {\n if (sort === ASCENDING) {\n return a[radiusIndex] - b[radiusIndex];\n } return b[radiusIndex] - a[radiusIndex];\n });\n const sizeVal = data.reduce((acc, d) => acc + (d[sizeIndex] || 0), 1);\n\n // Adding the radius field values to each data point in pie data\n pieData = pieData(data).map((d, i) => {\n d.outerRadiusValue = data[i][radiusIndex] || minOuterRadius;\n d.innerRadius = config.innerRadius;\n d.colorVal = data[i][colorIndex];\n d.angleVal = data[i][angleIndex];\n d.sizeVal = sizeVal;\n d.uid = uids[i];\n d.rowId = d.uid;\n d.source = data[i];\n d._previousInfo = this._prevPieData[d.uid] ? this._prevPieData[d.uid][0] :\n getPreviousPoint(pieIndex, d.index, config);\n return d;\n });\n return pieData;\n }\n\n /**\n * Returns normalized data after transformation (it is the same in the case of pie layer)\n *\n * @param {Object} data transformed data\n * @return {Object} normalized data\n * @memberof ArcLayer\n */\n getNormalizedData (data) {\n return data;\n }\n\n /**\n *\n *\n * @param {Object} data\n * @return {}\n * @memberof ArcLayer\n */\n calculateDomainFromData (data) {\n const domainKey = OUTER_RADIUS_VALUE;\n return {\n radius: getDomainFromData([data], [domainKey, domainKey])\n };\n }\n\n /**\n *\n *\n * @param {Object} x\n * @param {Object} y\n * @return {}\n * @memberof ArcLayer\n */\n getNearestPoint (x, y, config = {}) {\n const dataPoint = selectElement(config.event.target).data()[0];\n if (isSimpleObject(dataPoint)) {\n const { data, uid } = dataPoint.datum;\n return {\n id: this.getIdentifiersFromData(data, uid),\n layerId: this.id()\n };\n }\n return null;\n }\n\n /**\n *\n *\n * @param {*} set\n * @returns\n * @memberof ArcLayer\n */\n getPlotElementsFromSet (set) {\n return selectElement(this.mount()).selectAll(this.elemType()).filter(d => set.indexOf(d.datum.uid) !== -1);\n }\n\n /**\n *\n *\n * @param {Object} container\n * @return {}\n * @memberof ArcLayer\n */\n render (container) {\n const {\n height,\n width\n } = this.measurement();\n const {\n classPrefix,\n defClassName,\n minOuterRadius,\n innerRadius,\n outerRadius,\n cornerRadius,\n padAngle,\n padRadius,\n padding,\n transition,\n innerRadiusFixer\n } = this.config();\n const sizeAxis = this.axes().size;\n const store = this._store;\n const transformedData = store.get(PROPS.TRANSFORMED_DATA);\n const chartHeight = height - padding.top - padding.bottom;\n const chartWidth = width - padding.left - padding.right;\n const qualClassName = getQualifiedClassName(defClassName, this.id(), classPrefix);\n // Sets range for radius\n const range = getRadiusRange(chartWidth, chartHeight, {\n minOuterRadius,\n innerRadius,\n outerRadius,\n innerRadiusFixer\n });\n const colorAxis = this.axes().color;\n const defaultRadius = outerRadius || Math.min(chartHeight, chartWidth) / 2;\n const radiusDomain = store.get(PROPS.DOMAIN).radius;\n const rangeValueGetter = d => getRangeValue(d, range, radiusDomain, defaultRadius, sizeAxis);\n // This returns a function that generates the arc path based on the datum provided\n const path = arc()\n // .outerRadius(d => rangeValueGetter(d))\n .innerRadius(innerRadius ? Math.min(chartHeight / 2, chartWidth / 2, innerRadius) : 0)\n .cornerRadius(cornerRadius)\n .padAngle(padAngle)\n .padRadius(padRadius);\n this._chartWidth = chartWidth;\n this._chartHeight = chartHeight;\n // Creating the group that holds all the arcs\n const g = makeElement(selectElement(container), 'g', [1], `${qualClassName[0]}-group`)\n .classed(`${qualClassName[1]}-group`, true)\n .attr('transform', `translate(${chartWidth / 2},${chartHeight / 2})`);\n const tween = (elem) => {\n makeElement(elem, 'path', (d, i) => [{\n datum: d,\n index: i,\n arcFn: path,\n meta: {\n originalColor: colorAxis.getRawColor(d.colorVal),\n stateColor: {},\n colorTransform: {}\n }\n }], `${qualClassName[0]}-path`)\n .style('fill', d => colorAxis.getColor(d.datum.colorVal))\n .transition()\n .duration(transition.duration)\n .attrTween('d', (...params) => tweenPie(path, rangeValueGetter, params))\n .attr('class', (d, i) => {\n const individualClass = getIndividualClassName(d, i, transformedData, this);\n return `${qualClassName[0]}-path ${qualClassName[1]}-path-${d.index}\n ${individualClass}`;\n });\n };\n const consecutiveExits = [];\n let exitCounter = 0;\n const tweenExit = (elem, d) => {\n let exitArr = consecutiveExits[exitCounter];\n const oldExitCounter = exitCounter;\n if (!exitArr) {\n exitArr = [{ elem, datum: d }];\n } else if (exitArr[exitArr.length - 1].datum.index === d.index - 1) {\n exitArr.push({ elem, datum: d });\n } else {\n exitCounter++;\n }\n consecutiveExits[oldExitCounter] = exitArr;\n };\n // Creating groups for all the arcs present individually\n makeElement(g, 'g', transformedData, `${qualClassName[0]}`,\n {\n update: tween,\n exit: tweenExit\n })\n .attr('class', (d, i) => `${qualClassName[0]} ${qualClassName[1]}-${i}`);\n tweenExitPie(consecutiveExits, transition, rangeValueGetter, path);\n return this;\n }\n\n /**\n *\n *\n * @param {*} identifiers\n * @returns\n * @memberof BaseLayer\n */\n getPointsFromIdentifiers (identifiers) {\n if (!this.data()) {\n return [];\n }\n const fieldNames = identifiers[0];\n const values = identifiers.slice(1, identifiers.length);\n const pieSlices = selectElement(this.mount()).selectAll('path').data();\n const fieldsConfig = this.data().getFieldsConfig();\n\n const filteredPies = pieSlices.filter((tData) => {\n const data = tData.datum.data;\n const uid = tData.datum.uid;\n return fieldNames.every((field, idx) => {\n if (field in fieldsConfig && fieldsConfig[field].def.type === FieldType.DIMENSION) {\n return values.findIndex(d => d[idx] === data[fieldsConfig[field].index]) !== -1;\n } else if (field === ReservedFields.ROW_ID) {\n return values.findIndex(d => d[idx] === uid) !== -1;\n } return true;\n });\n });\n\n const pieSliceInf = filteredPies[0];\n if (pieSliceInf) {\n const centroid = pieSliceInf.arcFn.centroid(pieSliceInf.datum);\n return [{\n x: centroid[0] + this._chartWidth / 2,\n y: centroid[1] + this._chartHeight / 2,\n width: 2,\n height: 2\n }];\n }\n return [];\n }\n}\n\n","import { getObjProp, interpolator, FieldType, selectElement } from 'muze-utils';\nimport { ANGLE, RADIUS, SIZE, COLOR } from '../../enums/constants';\n\n/**\n * Returns the range value from a value inside the domain\n *\n * @param {Object} domainValue Value whose range has to be returned\n * @return {number} range value\n * @memberof ArcLayer\n */\nexport const getRangeValue = (datum, range, domain, defaultRadius, sizeAxis) => {\n let domainMultiplier = 1;\n const {\n outerRadiusValue,\n sizeVal\n } = datum;\n const sizeAxisDomain = sizeAxis.domain();\n const sizeMultiplier = sizeAxis.getSize(sizeVal) / (sizeAxisDomain ? sizeAxis.range()[1] : sizeAxis.config().value);\n\n domainMultiplier *= (range[1] - range[0]) / (domain[1] - domain[0]);\n const rangeVal = (range[0] + (outerRadiusValue - domain[0]) * domainMultiplier);\n return (rangeVal || defaultRadius) * sizeMultiplier;\n};\n\n/**\n *\n *\n * @memberof ArcLayer\n */\nexport const getRadiusRange = (width, height, config) => {\n const {\n minOuterRadius,\n innerRadius,\n outerRadius,\n innerRadiusFixer\n } = config;\n\n return [Math.max((innerRadius + innerRadiusFixer || 0), minOuterRadius), outerRadius || Math.min(height,\n width) / 2];\n};\nexport const getPreviousPoint = (prevData, currIndex, config) => {\n const prevArc = prevData[currIndex - 1];\n const nextArc = prevData[currIndex];\n\n if (prevArc && nextArc) {\n return {\n startAngle: prevArc.endAngle,\n endAngle: nextArc.startAngle\n };\n } else if (!nextArc) {\n return {\n startAngle: config.endAngle * Math.PI * 2 / 360,\n endAngle: config.endAngle * Math.PI * 2 / 360\n };\n }\n return {\n startAngle: config.startAngle * Math.PI * 2 / 360,\n endAngle: config.startAngle * Math.PI * 2 / 360\n };\n};\n\n/**\n *\n *\n * @param {*} path\n * @param {*} b\n * @returns\n * @memberof ArcLayer\n */\nexport const tweenPie = (path, rangeValueGetter, b) => {\n const { datum } = b[0];\n const outerRadius = rangeValueGetter(datum);\n datum.outerRadius = outerRadius;\n datum._previousInfo.outerRadius = datum._previousInfo.outerRadius || outerRadius;\n return function (t) {\n return path(interpolator()(datum._previousInfo, datum)(t));\n };\n};\n\n/**\n *\n *\n * @param {*} path\n * @param {*} b\n * @returns\n * @memberof ArcLayer\n */\nexport const tweenExitPie = (consecutiveExits, transition, rangeValueGetter, path) => {\n if (consecutiveExits.length > 0) {\n consecutiveExits.forEach((consecutiveExitArr) => {\n const startAngle = consecutiveExitArr[0].datum.startAngle;\n const endAngle = consecutiveExitArr[consecutiveExitArr.length - 1].datum.endAngle;\n const mid = (Math.PI * 2 * startAngle) / ((Math.PI * 2) + startAngle - endAngle);\n\n consecutiveExitArr.forEach((e) => {\n const { elem, datum } = e;\n\n elem.each(function () {\n const gElem = selectElement(this);\n gElem.selectAll('path')\n .transition()\n .duration(transition.duration)\n .attrTween('d', () => function (t) {\n const outerRadius = rangeValueGetter(datum);\n datum.outerRadius = outerRadius;\n return path(interpolator()(datum, {\n startAngle: mid,\n endAngle: mid,\n outerRadius\n })(t));\n })\n .remove();\n gElem.remove();\n });\n });\n });\n }\n};\n\nexport const getFieldIndices = (encoding, fieldsConfig) => {\n const [angleField, radiusField, colorField, sizeField] = [ANGLE, RADIUS, COLOR, SIZE]\n .map(e => encoding[e].field);\n const [angleIndex, sizeIndex, radiusIndex] = [angleField, sizeField, radiusField]\n .map((e) => {\n const conf = fieldsConfig[e];\n if (conf && conf.def.type === FieldType.MEASURE) {\n return conf.index;\n }\n return null;\n });\n const colorIndex = getObjProp(fieldsConfig, colorField, 'index');\n return {\n angleIndex,\n sizeIndex,\n radiusIndex,\n colorIndex\n };\n};\n","import {\n setAttrs,\n setStyles,\n selectElement,\n makeElement,\n getSmartComputedStyle\n} from 'muze-utils';\n\n/**\n * Draws svg text in the specified container.\n * @param {SVGElement} container Container where labels will be appended.\n * @param {Array.} data Data of the elements.\n * @return {Selection} d3 selection of the elements.\n */\nconst drawText = (container, data, config, smartLabel) => {\n const selection = selectElement(container).selectAll('g').data(data);\n\n const selectionMerge = selection.enter().append('g')\n .each(function (dataObj) {\n setAttrs(this, dataObj.enter);\n })\n .merge(selection);\n const style = getSmartComputedStyle(selectElement(container), config.className);\n const fontSize = parseInt(style.fontSize, 10);\n\n smartLabel.setStyle(style);\n selectionMerge.each(function (dataObj) {\n const element = selectElement(this);\n const { update, text, color, textanchor, style: textStyle } = dataObj;\n const background = dataObj.background;\n let backgroundVal;\n if (backgroundVal = background.value) {\n const backgroundPadding = background.padding;\n let diff;\n const { width, height } = smartLabel.getOriSize(dataObj.text);\n const backgroundEl = makeElement(element, 'rect', [1]);\n\n if (textanchor === 'end') {\n diff = width;\n } else if (textanchor === 'start') {\n diff = 0;\n } else {\n diff = width / 2;\n }\n\n setAttrs(backgroundEl.node(), {\n x: update.x - diff - backgroundPadding / 2,\n y: update.y - fontSize - backgroundPadding / 2,\n width: width + backgroundPadding,\n height: height + backgroundPadding\n });\n background && setStyles(backgroundEl, {\n background: backgroundVal\n });\n }\n const textEl = makeElement(element, 'text', d => [d]).text(text);\n const textNode = textEl.node();\n textStyle && setStyles(textNode, textStyle);\n color && setStyles(textNode, {\n fill: color\n });\n dataObj.className && textEl.classed(dataObj.className, true);\n setAttrs(textNode, update);\n textEl.attr('text-anchor', textanchor);\n });\n selection.exit().remove();\n return selection;\n};\n\nexport default drawText;\n","import { CLASSPREFIX } from '../../enums/constants';\n\nexport const defaultConfig = {\n defClassName: 'layer-text',\n classPrefix: CLASSPREFIX,\n className: '',\n transform: {\n type: 'identity'\n },\n interaction: {\n highlight: [{\n type: 'fill',\n intensity: [0, 0, -15, 0]\n }],\n fade: [{\n type: 'fill',\n intensity: [0, 0, +15, 0]\n }],\n focus: [{\n type: 'fill',\n intensity: [0, 0, +15, 0]\n }]\n },\n transition: {\n effect: 'cubic',\n duration: 1000\n },\n encoding: {\n color: {},\n text: {\n value: '',\n background: {\n padding: 10\n }\n }\n },\n states: {\n highlight: {\n className: `${CLASSPREFIX}-layer-text-highlight`\n },\n fadeout: {\n className: `${CLASSPREFIX}-layer-text-fadeout`\n },\n selected: {\n className: `${CLASSPREFIX}-layer-text-selected`\n }\n }\n};\n","import {\n getQualifiedClassName,\n selectElement,\n setStyles,\n createElements\n} from 'muze-utils';\nimport { BaseLayer } from '../../base-layer';\nimport drawText from './renderer';\nimport { defaultConfig } from './default-config';\nimport { getLayerColor, positionPoints, getIndividualClassName } from '../../helpers';\nimport { TEXT_ANCHOR_MIDDLE, ENCODING } from '../../enums/constants';\nimport * as PROPS from '../../enums/props';\n\nimport './styles.scss';\n\n/**\n * Text Layer creates labels. It needs to be passed a data table, axes and configuration\n * of the layer.\n * Example :-\n * const textLayer = layerFactory.getLayer('text', [dataModel, axes, config]);\n * textLayer.render(container);\n * @class\n */\nexport default class TextLayer extends BaseLayer {\n /**\n * Returns the default configuration of the text layer\n * @return {Object} Default configuration of the text layer\n */\n static defaultConfig () {\n return defaultConfig;\n }\n\n static formalName () {\n return 'text';\n }\n\n elemType () {\n return 'text';\n }\n\n /**\n * Generates an array of objects containing x, y, width and height of the points from the data\n * @param {Array.} data Data Array\n * @param {Object} encoding Config\n * @param {Object} axes Axes object\n * @return {Array.} Array of points\n */\n translatePoints (data, encoding, axes) {\n let points = [];\n const colorAxis = axes.color;\n const textEncoding = encoding.text;\n const { field: textField, value, formatter: textFormatter } = textEncoding;\n const colorEncoding = encoding.color;\n const colorField = colorEncoding && colorEncoding.field;\n const fieldsConfig = this.data().getFieldsConfig();\n\n const backgroundEncoding = encoding.text.background;\n const backgroundPadding = backgroundEncoding.padding;\n const backgroundValue = backgroundEncoding.value;\n const colorFieldIndex = fieldsConfig[colorField] ? fieldsConfig[colorField].index : -1;\n const textFieldIndex = textField ? fieldsConfig[textField] && fieldsConfig[textField].index : -1;\n const xEnc = ENCODING.X;\n const yEnc = ENCODING.Y;\n for (let i = 0, len = data.length; i < len; i++) {\n const d = data[i];\n const row = d._data;\n const textValue = textField ? row[textFieldIndex] : value;\n\n const [xPx, yPx] = [xEnc, yEnc].map(type => (axes[type] ? axes[type].getScaleValue(d[type]) +\n axes[type].getUnitWidth() / 2 : 0));\n\n const { color, rawColor } = getLayerColor({ datum: d, index: i },\n { colorEncoding, colorAxis, colorFieldIndex });\n\n const point = {\n enter: {},\n update: {\n x: xPx,\n y: yPx\n },\n text: textFormatter ? textFormatter(textValue) : textValue,\n color,\n background: {\n value: backgroundValue instanceof Function ? backgroundValue(d, i, data, this) : null,\n padding: backgroundPadding\n },\n meta: {\n stateColor: {},\n originalColor: rawColor,\n colorTransform: {}\n },\n style: {},\n _data: row,\n _id: d._id,\n source: d._data,\n rowId: d._id\n };\n\n if (d.x !== null && d.y !== null) {\n points.push(point);\n }\n\n point.className = getIndividualClassName(d, i, data, this);\n }\n\n points = positionPoints(this, points);\n\n return points;\n }\n\n /**\n * Renders the plot in the given container\n * @param {SVGElement} container SVGElement which will hold the plot\n * @return {textLayer} Instance of text layer\n */\n render (container) {\n let points;\n const config = this.config();\n const encoding = config.encoding;\n const normalizedData = this._store.get(PROPS.NORMALIZED_DATA);\n const className = config.className;\n const qualifiedClassName = getQualifiedClassName(config.defClassName, this.id(), config.classPrefix);\n const axes = this.axes();\n const containerSelection = selectElement(container);\n\n containerSelection.classed(`${qualifiedClassName.join(' ')} ${className}`, true);\n createElements({\n data: normalizedData,\n append: 'g',\n selector: 'g',\n container,\n each: (dataArr, group, i) => {\n const node = group.node();\n points = this.translatePoints(dataArr, encoding, axes, i);\n setStyles(node, {\n 'text-anchor': TEXT_ANCHOR_MIDDLE\n });\n drawText(node, points, {\n className: qualifiedClassName[0]\n }, this._dependencies.smartLabel);\n }\n });\n return this;\n }\n}\n","/* global Element, document */\nimport {\n makeElement,\n selectElement,\n easeFns,\n objectIterator,\n getSymbol\n} from 'muze-utils';\n\n/**\n *\n *\n * @param {*} str\n * @returns\n */\nconst checkPath = (str) => {\n if (/^[mzlhvcsqta]\\s*[-+.0-9][^mlhvzcsqta]+/i.test(str) && /[\\dz]$/i.test(str) && str.length > 4) {\n return true;\n }\n return false;\n};\n\n/**\n *\n *\n * @param {*} d\n * @param {*} elem\n */\nconst createShape = function (d, elem) {\n const groupElement = selectElement(elem);\n const { shape, size, update } = d;\n\n if (shape instanceof Promise) {\n shape.then((res) => {\n d.shape = res;\n createShape(d, elem);\n });\n } else if (shape instanceof Element) {\n let newShape = shape.cloneNode(true);\n\n if (newShape.nodeName.toLowerCase() === 'img') {\n const src = newShape.src || newShape.href;\n newShape = document.createElementNS('http://www.w3.org/2000/svg', 'image');\n newShape.setAttribute('href', src);\n }\n const shapeElement = selectElement(newShape);\n if (newShape.nodeName === 'path' || newShape.nodeName === 'image') {\n shapeElement.attr('transform', `scale(${size / 100})`);\n } else {\n shapeElement.attr('height', size);\n shapeElement.attr('width', size);\n }\n shapeElement.attr('x', -size / 2);\n shapeElement.attr('y', -size / 2);\n selectElement(groupElement.node().appendChild(newShape));\n } else if (typeof shape === 'string') {\n let pathStr;\n if (checkPath(shape)) {\n pathStr = shape;\n } else {\n pathStr = getSymbol(shape).size(size)(update);\n }\n makeElement(groupElement, 'path', data => [data]).attr('d', pathStr);\n } else {\n d.shape = 'circle';\n createShape(d, elem);\n }\n};\n\n/**\n * Draws symbols using d3 symbol api\n * @param {Object} params Contains the svg container, points and other symbol related attributes.\n */\n/* istanbul ignore next */ const drawSymbols = (params) => {\n let mergedGroups;\n const { container, points, transition, className } = params;\n const { duration, effect, disabled } = transition;\n const mount = selectElement(container);\n\n mount.attr('class', className);\n const symbolGroups = mount.selectAll('g').data(points, params.keyFn);\n const symbolEnter = symbolGroups.enter().append('g').attr('transform', d => `translate(${d.enter.x},${d.enter.y})`);\n mergedGroups = symbolGroups.merge(symbolEnter)\n .each(function (d) {\n createShape(d, this);\n });\n mergedGroups = disabled ? mergedGroups : mergedGroups.transition().duration(disabled ? 0 : transition.duration);\n mergedGroups.attr('transform', d => `translate(${d.update.x},${d.update.y})`)\n .each(function (d) {\n const style = d.style;\n const element = selectElement(this);\n objectIterator(style, key => element.style(key, style[key]));\n element.attr('class', `${className}`);\n element.classed(d.className, true);\n });\n\n const exitGroups = symbolGroups.exit();\n if (!disabled) {\n exitGroups.transition().ease(easeFns[effect])\n .duration(duration)\n .on('end', function () {\n selectElement(this).remove();\n })\n .style('fill-opacity', 0)\n .style('stroke-opacity', 0);\n } else {\n exitGroups.remove();\n }\n};\n\nexport default drawSymbols;\n","import { CLASSPREFIX } from '../../enums/constants';\n\nexport const defaultConfig = {\n defClassName: 'layer-point',\n className: '',\n classPrefix: CLASSPREFIX,\n defColorStyle: 'stroke',\n interaction: {\n highlight: [{\n type: 'fill',\n intensity: [0, 0, -20, 0]\n }],\n fade: [{\n type: 'fill',\n intensity: [0, 0, +20, 0]\n }],\n focus: [{\n type: 'fill',\n intensity: [0, 0, +20, 0]\n }\n ]\n },\n innerPadding: 0.1,\n nearestPointThreshold: 10,\n transform: {\n type: 'identity'\n },\n transition: {\n effect: 'cubic',\n duration: 1000\n },\n encoding: {\n size: {\n value: 30\n },\n color: { },\n shape: {\n value: 'circle'\n },\n x: {},\n y: {},\n strokeOpacity: {\n value: 0.5\n },\n fillOpacity: {\n value: 0.5\n }\n },\n shapes: ['circle', 'cross', 'diamond', 'square', 'star', 'wye', 'triangle'],\n sizes: [20, 30, 40, 50, 60, 70]\n};\n","import {\n Voronoi,\n selectElement,\n getQualifiedClassName,\n makeElement,\n FieldType,\n Scales\n} from 'muze-utils';\nimport { BaseLayer } from '../../base-layer';\nimport drawSymbols from './renderer';\nimport { defaultConfig } from './default-config';\nimport { ENCODING } from '../../enums/constants';\nimport * as PROPS from '../../enums/props';\nimport {\n attachDataToVoronoi,\n getLayerColor,\n positionPoints,\n getPlotMeasurement,\n getIndividualClassName\n} from '../../helpers';\n\nimport './styles.scss';\n\n/**\n * Point Layer creates point. Itt needs to be passed a data table, axes and configuration\n * of the layer.\n * Example :-\n * const pointLayer = layerFactory.getLayer('point', [data, axes, config]);\n * pointLayer.render(container);\n * @class\n */\nexport default class PointLayer extends BaseLayer {\n\n /**\n * Creates an instance of PointLayer.\n * @param {*} args\n * @memberof PointLayer\n */\n constructor (...args) {\n super(...args);\n this._voronoi = new Voronoi();\n this._bandScale = Scales.band();\n }\n\n /**\n *\n *\n * @returns\n * @memberof PointLayer\n */\n elemType () {\n return 'g';\n }\n\n /**\n * Returns the default configuration of the point layer\n * @return {Object} Default configuration of the point layer\n */\n static defaultConfig () {\n return defaultConfig;\n }\n\n static defaultPolicy (conf, userConf) {\n const config = BaseLayer.defaultPolicy(conf, userConf);\n const encoding = config.encoding;\n const transform = config.transform;\n const colorField = encoding.color && encoding.color.field;\n\n if (colorField) {\n transform.groupBy = colorField;\n }\n return config;\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof PointLayer\n */\n static formalName () {\n return 'point';\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof PointLayer\n */\n static drawFn () {\n return drawSymbols;\n }\n\n /**\n * Generates an array of objects containing x, y, width and height of the points from the data\n * @param {Array.} data Data Array\n * @param {Object} encoding Config\n * @param {Object} axes Axes object\n * @return {Array.} Array of points\n */\n translatePoints (data, encoding, axes, config = {}) {\n let points = [];\n const {\n size: sizeEncoding,\n shape: shapeEncoding,\n color: colorEncoding,\n x,\n y\n } = encoding;\n const sizeField = sizeEncoding.field;\n const sizeValue = sizeEncoding.value;\n const shapeField = shapeEncoding.field;\n const xField = x.field;\n const yField = y.field;\n const { size: sizeAxis, shape: shapeAxis } = axes;\n const fieldsConfig = this.data().getFieldsConfig();\n const isXDim = fieldsConfig[xField] && fieldsConfig[xField].def.type === FieldType.DIMENSION;\n const isYDim = fieldsConfig[yField] && fieldsConfig[yField].def.type === FieldType.DIMENSION;\n const key = isXDim ? ENCODING.X : (isYDim ? ENCODING.Y : null);\n const colorField = colorEncoding && colorEncoding.field;\n const colorFieldIndex = fieldsConfig[colorField] && fieldsConfig[colorField].index;\n const measurement = this._store.get(PROPS.MEASUREMENT);\n const shapeFieldIndex = fieldsConfig[shapeField] && fieldsConfig[shapeField].index;\n const sizeFieldIndex = fieldsConfig[sizeField] && fieldsConfig[sizeField].index;\n const colorAxis = axes.color;\n const { x: offsetX, y: offsetY } = config.offset;\n\n for (let i = 0, len = data.length; i < len; i++) {\n const d = data[i];\n const row = d._data;\n const size = sizeValue instanceof Function ? sizeValue(d, i) : sizeAxis.getSize(row[sizeFieldIndex]);\n const shape = shapeAxis.getShape(row[shapeFieldIndex]);\n\n let [xPx, yPx] = [ENCODING.X, ENCODING.Y].map((type) => {\n const value = d[type] === null ? undefined : d[type];\n const measure = type === ENCODING.X ? measurement.width : measurement.height;\n return !encoding[type].field ? measure / 2 : axes[type].getScaleValue(value);\n });\n\n xPx += offsetX;\n yPx += offsetY;\n\n const { color, rawColor } = getLayerColor({ datum: d, index: i },\n { colorEncoding, colorAxis, colorFieldIndex });\n\n const style = {\n fill: color,\n stroke: color\n };\n\n if (!isNaN(xPx) && !isNaN(yPx)) {\n const point = {\n enter: {\n x: xPx,\n y: yPx\n },\n update: {\n x: xPx,\n y: yPx\n },\n shape,\n size: Math.abs(size),\n meta: {\n stateColor: {},\n originalColor: rawColor,\n colorTransform: {}\n },\n style,\n _data: row,\n _id: d._id,\n source: d._data,\n rowId: d._id\n };\n point.className = getIndividualClassName(d, i, data, this);\n points.push(point);\n this.cachePoint(d[key], point);\n }\n }\n points = positionPoints(this, points);\n return points;\n }\n\n /**\n * Renders the plot in the given container.\n *\n * @param {SVGElement} container SVGElement which will hold the plot\n * @return {BarLayer} Instance of bar layer\n */\n render (container) {\n let maxSize = 0;\n let seriesClassName;\n const config = this.config();\n const keys = this._store.get(PROPS.TRANSFORMED_DATA).map(d => d.key);\n const { transition, className, defClassName, classPrefix } = config;\n const normalizedData = this._store.get(PROPS.NORMALIZED_DATA);\n const containerSelection = selectElement(container);\n const qualifiedClassName = getQualifiedClassName(defClassName, this.id(), classPrefix);\n this._points = [];\n this._pointMap = {};\n\n containerSelection.classed(qualifiedClassName.join(' '), true).classed(className, true);\n\n this._points = this.generateDataPoints(normalizedData, keys);\n\n makeElement(container, 'g', this._points, null, {\n update: (group, points) => {\n maxSize = Math.max(maxSize, ...points.map(d => d.size));\n seriesClassName = `${qualifiedClassName[0]}`;\n this.constructor.drawFn()({\n container: group.node(),\n points,\n className: seriesClassName,\n transition,\n keyFn: d => d._id\n });\n }\n }, data => data[0]._id);\n this._maxSize = Math.sqrt(maxSize / Math.PI) * 2;\n attachDataToVoronoi(this._voronoi, this._points);\n return this;\n }\n\n generateDataPoints (normalizedData, keys) {\n const encoding = this.config().encoding;\n const axes = this.axes();\n const [widthMetrics, heightMetrics] = getPlotMeasurement(this, keys);\n const offsetXValues = widthMetrics.offsetValues || [];\n const offsetYValues = heightMetrics.offsetValues || [];\n return normalizedData.map((dataArr, i) => {\n const measurementConf = this.getMeasurementConfig(offsetXValues[i], offsetYValues[i], widthMetrics.span,\n heightMetrics.span);\n return this.translatePoints(dataArr, encoding, axes, measurementConf);\n }).filter(d => d.length);\n }\n\n getMeasurementConfig (offsetX, offsetY, widthSpan, heightSpan) {\n return {\n offset: {\n x: (offsetX || 0) + widthSpan / 2,\n y: (offsetY || 0) + heightSpan / 2\n },\n span: {\n x: widthSpan,\n y: heightSpan\n }\n };\n }\n\n /**\n * Gets the nearest point from a position.\n * @param {number} x x position\n * @param {number} y y position\n * @return {Object} Point details\n */\n getNearestPoint (x, y) {\n const distanceLimit = Math.max(this._maxSize, this.config().nearestPointThreshold);\n\n if (!this.data()) {\n return null;\n }\n\n const point = this._voronoi.find(x, y, distanceLimit);\n const dimensions = point && point.data.data.update;\n const radius = point ? Math.sqrt(point.data.data.size / Math.PI) : 0;\n\n if (point) {\n const { _data, _id } = point.data.data;\n const identifiers = this.getIdentifiersFromData(_data, _id);\n return {\n id: identifiers,\n dimensions: [{\n x: dimensions.x,\n y: dimensions.y,\n width: radius,\n height: radius\n }],\n layerId: this.id()\n };\n }\n return null;\n }\n}\n","import { makeElement, easeFns } from 'muze-utils';\n\n/**\n *\n *\n * @param {*} elem\n * @param {*} datum\n * @param {*} index\n * @param {*} context\n */\nconst transitionBars = (elem, datum, index, context) => {\n const { transition } = context;\n const { duration, disabled, effect } = transition;\n const selection = elem;\n const selTransition = disabled ? selection : selection.transition().duration(duration).ease(easeFns[effect]);\n const update = datum.update || datum;\n const updateStyle = datum.style || {};\n datum.className && selection.classed(datum.className, true);\n Object.entries(update).forEach(attr => (!isNaN(attr[1]) && selTransition.attr(attr[0], attr[1])));\n Object.entries(updateStyle).forEach(styleObj => selection.style(styleObj[0], styleObj[1]));\n};\n\n/**\n *\n *\n * @param {*} elem\n * @param {*} d\n */\nconst barEnterFn = (elem, d) => {\n const selection = elem;\n const enter = d.enter || {};\n Object.entries(enter).forEach(attr => (!isNaN(attr[1]) && selection.attr(attr[0], attr[1])));\n};\n\n/**\n * Draws rectangles by using d3 selection\n * @param {Object} params Contains container element and points\n * @return {Selection} Bar Selection\n */\n/* istanbul ignore next */ export const drawRects = (params) => {\n const { points, container, keyFn } = params;\n const updateFns = {\n enter (elem, d) { barEnterFn(elem, d); },\n update (elem, d, i) { transitionBars(elem, d, i, params); }\n };\n return makeElement(container, 'rect', points, null, updateFns, keyFn);\n};\n","import { CLASSPREFIX } from '../../enums/constants';\n\nexport const defaultConfig = {\n classPrefix: CLASSPREFIX,\n defClassName: 'layer-bar',\n className: '',\n interaction: {\n highlight: [{\n type: 'fill',\n intensity: [0, 0, -15, 0]\n }],\n fade: [{\n type: 'fill',\n intensity: [0, 0, +15, 0]\n }],\n focus: [{\n type: 'fill',\n intensity: [0, 0, +15, 0]\n }]\n },\n transform: {\n type: 'stack'\n },\n transition: {\n effect: 'cubic',\n duration: 1000\n },\n innerPadding: 0.1,\n encoding: {\n color: {},\n x: {},\n y: {},\n x0: {},\n y0: {}\n },\n states: {\n highlight: {\n className: `${CLASSPREFIX}-layer-bar-highlight`\n },\n fadeout: {\n className: `${CLASSPREFIX}-layer-bar-fadeout`\n },\n selected: {\n className: `${CLASSPREFIX}-layer-bar-selected`\n }\n }\n};\n\n","import { FieldType, DimensionSubtype } from 'muze-utils';\nimport * as PROPS from '../../enums/props';\nimport { STACK } from '../../enums/constants';\nimport { getLayerColor, positionPoints, getIndividualClassName } from '../../helpers';\n\n/**\n *\n *\n * @param {*} type\n * @param {*} fieldInfo\n * @param {*} config\n * @param {*} data\n * @returns\n */\nconst resolveDimByField = (type, axesInfo, config, data) => {\n const spaceType = type === 'x' ? 'width' : 'height';\n const [fieldType, axis] = [config[`${type}FieldType`], axesInfo[`${type}Axis`]];\n const {\n transformType,\n sizeEncoding,\n sizeConfig,\n measurement\n } = config;\n\n const sizeValue = sizeEncoding.value;\n let enter = 0;\n let pos;\n let space = 0;\n let enterSpace = 0;\n if (fieldType !== undefined) {\n if (config[`${type}0Field`]) {\n const minVal = data[type];\n const maxVal = data[`${type}0`];\n let min;\n let max;\n if (minVal === null || maxVal === null) {\n return {\n enterSpace: undefined,\n enter: undefined,\n pos: undefined,\n space: undefined\n };\n } else if (fieldType === FieldType.MEASURE || fieldType === DimensionSubtype.TEMPORAL) {\n min = Math.min(minVal, maxVal);\n max = Math.max(minVal, maxVal);\n } else {\n min = minVal;\n max = maxVal;\n }\n const scales = type === 'x' ? [min, max] : [max, min];\n pos = axis.getScaleValue(scales[0]) + axis.getUnitWidth() / 2;\n space = Math.abs(axis.getScaleValue(scales[1]) - pos) + axis.getUnitWidth() / 2;\n\n enter = pos;\n enterSpace = 0;\n } else if (fieldType === DimensionSubtype.CATEGORICAL || fieldType === DimensionSubtype.TEMPORAL) {\n pos = axis.getScaleValue(data[type]) +\n (sizeConfig[type === 'x' ? 'barWidthOffset' : 'barHeightOffset'] || 0);\n\n space = sizeConfig[type === 'x' ? 'barWidth' : 'barHeight'];\n if (sizeValue !== undefined) {\n const diffPx = sizeValue * space;\n space -= diffPx;\n pos += diffPx / 2;\n }\n enter = pos;\n enterSpace = space;\n } else {\n const zeroPos = axis.getScaleValue(0);\n const axisType = axis.getScaleValue(data[type]);\n const axisType0 = axis.getScaleValue(data[`${type}0`]);\n\n enterSpace = 0;\n if (type === 'x') {\n pos = data[type] < 0 || transformType === STACK ? axisType : zeroPos;\n space = Math.abs(pos - (transformType === STACK ? axisType0 : (data[type] >= 0 ? axisType : zeroPos)));\n } else {\n pos = transformType === STACK || data[type] >= 0 ? axisType : zeroPos;\n space = Math.abs(pos - (transformType === STACK ? axisType0 : (data[type] >= 0 ? zeroPos : axisType)));\n }\n enter = zeroPos;\n }\n } else {\n pos = 0;\n space = measurement[spaceType];\n }\n\n return {\n enterSpace,\n enter,\n pos,\n space\n };\n};\n\n/**\n *\n *\n * @param {*} data\n * @param {*} config\n * @param {*} axes\n * @returns\n */\nconst resolveDimensions = (data, config, axes) => {\n const axesInfo = {\n xAxis: axes.x,\n yAxis: axes.y\n };\n const {\n enterSpace: enterWidth,\n enter: enterX,\n pos: xPos,\n space: width\n } = resolveDimByField('x', axesInfo, config, data);\n\n const {\n enterSpace: enterHeight,\n enter: enterY,\n pos: yPos,\n space: height\n } = resolveDimByField('y', axesInfo, config, data);\n return {\n enter: {\n x: enterX,\n y: enterY,\n width: enterWidth,\n height: enterHeight\n },\n update: {\n x: xPos,\n y: yPos,\n width,\n height\n }\n };\n};\n\n/**\n * Generates an array of objects containing x, y, width and height of the bars from the data\n * @param {Array.} data Data Array\n * @param {Object} encoding Config\n * @param {Object} axes Axes object\n * @param {Object} conf config object for point generation\n * @return {Array.} Array of points\n */\nexport const getTranslatedPoints = (context, data, sizeConfig) => {\n let points = [];\n const encoding = context.config().encoding;\n const axes = context.axes();\n const colorAxis = axes.color;\n const fieldsConfig = context.data().getFieldsConfig();\n const colorEncoding = encoding.color;\n const colorField = colorEncoding.field;\n const sizeEncoding = encoding.size || {};\n const {\n x0Field,\n y0Field,\n xFieldSubType,\n yFieldSubType\n } = context.encodingFieldsInf();\n const measurement = context._store.get(PROPS.MEASUREMENT);\n const isXDim = xFieldSubType === DimensionSubtype.CATEGORICAL || xFieldSubType === DimensionSubtype.TEMPORAL;\n const isYDim = yFieldSubType === DimensionSubtype.CATEGORICAL || yFieldSubType === DimensionSubtype.TEMPORAL;\n const key = isXDim ? 'x' : (isYDim ? 'y' : null);\n const transformType = context.transformType();\n const colorFieldIndex = colorField && fieldsConfig[colorField] && fieldsConfig[colorField].index;\n\n for (let i = 0, len = data.length; i < len; i++) {\n const d = data[i];\n const style = {};\n const meta = {};\n const dimensions = resolveDimensions(d, {\n xFieldType: xFieldSubType,\n yFieldType: yFieldSubType,\n x0Field,\n y0Field,\n transformType,\n measurement,\n sizeConfig,\n sizeEncoding\n }, axes);\n\n const { color, rawColor } = getLayerColor({ datum: d, index: i },\n { colorEncoding, colorAxis, colorFieldIndex });\n\n style.fill = color;\n meta.stateColor = {};\n meta.originalColor = rawColor;\n meta.colorTransform = {};\n\n const update = dimensions.update;\n\n if (!isNaN(update.x) && !isNaN(update.y) && d._id !== undefined) {\n let point = null;\n point = {\n enter: dimensions.enter,\n update,\n style,\n _data: d._data,\n _id: d._id,\n source: d._data,\n rowId: d._id,\n meta\n };\n point.className = getIndividualClassName(d, i, data, context);\n points.push(point);\n // Store each point in a hashmap with key as the dimensional or temporal field value\n context.cachePoint(d[key], point);\n }\n }\n\n points = positionPoints(context, points);\n return points;\n};\n","import {\n getClosestIndexOf,\n getQualifiedClassName,\n selectElement,\n createElements,\n clipElement,\n DimensionSubtype,\n FieldType,\n Scales\n} from 'muze-utils';\nimport { BaseLayer } from '../../base-layer';\nimport { drawRects } from './renderer';\nimport { defaultConfig } from './default-config';\nimport * as PROPS from '../../enums/props';\nimport { getPlotMeasurement } from '../../helpers';\nimport './styles.scss';\nimport { getTranslatedPoints } from './bar-helper';\n\nconst MEASURE = FieldType.MEASURE;\nconst scaleBand = Scales.band;\n\n/**\n * Bar Layer creates a bar plot. It needs to be passed a data table, axes and configuration of the layer.\n *\n * @example\n * const BarLayer = layerFactory.getLayer('bar');\n * BarLayer.create()\n * .config(config)\n * .data(dt)\n * .mountPoint(container);\n * @class\n */\nexport default class BarLayer extends BaseLayer {\n /**\n * Creates an instance of bar layer\n */\n constructor (...params) {\n super(...params);\n this._bandScale = scaleBand();\n this._plotPadding = {\n x: 0,\n y: 0\n };\n this._plotSpan = {\n x: 0,\n y: 0\n };\n this._pointMap = {};\n }\n\n /**\n *\n *\n * @returns\n * @memberof BarLayer\n */\n elemType () {\n return 'rect';\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof BarLayer\n */\n static formalName () {\n return 'bar';\n }\n\n /**\n * Returns the default configuration of the bar layer\n * @return {Object} Default configuration of the bar layer\n */\n static defaultConfig () {\n return defaultConfig;\n }\n\n /**\n *\n *\n * @static\n * @param {*} conf\n * @param {*} userConf\n * @returns\n * @memberof BarLayer\n */\n static defaultPolicy (conf, userConf) {\n const config = BaseLayer.defaultPolicy(conf, userConf);\n const encoding = config.encoding;\n const colorField = encoding.color.field;\n const transform = config.transform;\n\n if (colorField) {\n transform.groupBy = colorField;\n }\n return config;\n }\n\n /**\n *\n *\n * @param {*} data\n * @param {*} fieldsConfig\n * @returns\n * @memberof BarLayer\n */\n calculateDomainFromData (data, encodingFieldInf, fieldsConfig) {\n const domain = super.calculateDomainFromData(data, encodingFieldInf, fieldsConfig);\n ['x', 'y'].forEach((d) => {\n if (encodingFieldInf[`${d}FieldType`] === MEASURE && domain[d]) {\n encodingFieldInf[`${d}0Field}`] ? domain[d] = domain[d].sort((a, b) => a - b) :\n (domain[d][0] = Math.min(domain[d][0], 0));\n }\n });\n return domain;\n }\n\n /**\n * Generates an array of objects containing x, y, width and height of the bars from the data\n * @param {Array.} data Data Array\n * @param {Object} encoding Config\n * @param {Object} axes Axes object\n * @param {Object} conf config object for point generation\n * @return {Array.} Array of points\n */\n translatePoints (data, sizeConfig) {\n return getTranslatedPoints(this, data, sizeConfig);\n }\n\n /**\n * Renders the plot in the given container\n * @param {SVGGroup} container SVGGroup where plot will be rendered.\n * @return {BarLayer} Instance of bar layer.\n */\n render (container) {\n const config = this.config();\n const transition = config.transition;\n const store = this._store;\n const normalizedDataArr = store.get(PROPS.NORMALIZED_DATA);\n const transformedData = store.get(PROPS.TRANSFORMED_DATA);\n const keys = transformedData.map(d => d.key);\n const fieldsConfig = this.data().getFieldsConfig();\n const axes = this.axes();\n const height = axes.y && axes.y.scale().range()[0];\n const width = axes.x && axes.x.scale().range()[1];\n const defClassName = config.defClassName;\n const qualifiedClassName = getQualifiedClassName(defClassName, this.id(), config.classPrefix);\n const className = config.className;\n const containerSelection = selectElement(container);\n const dimensions = Object.values(fieldsConfig).filter(e => e.def.type === FieldType.DIMENSION)\n .map(e => e.index);\n containerSelection.classed(qualifiedClassName.join(' '), true);\n containerSelection.classed(className, true);\n clipElement(container, {\n x: 0,\n y: 0,\n width,\n height\n }, `id-${this.id()}`);\n\n this._points = this.generateDataPoints(normalizedDataArr, keys);\n\n createElements({\n data: this._points,\n container,\n selector: 'g',\n append: 'g',\n each: (points, group, i) => {\n const seriesClassName = `${qualifiedClassName[0]}-${keys[i] || i}`.toLowerCase();\n group.style('display', 'block');\n drawRects({\n container: group.node(),\n points,\n className: seriesClassName,\n transition,\n style: {},\n keyFn: d => dimensions.map(key => d._data[key]).join('-')\n });\n }\n });\n return this;\n }\n\n /**\n *\n *\n * @param {*} normalizedData\n * @param {*} keys\n * @returns\n * @memberof BarLayer\n */\n generateDataPoints (normalizedData, keys) {\n const [barWidthMetrics, barHeightMetrics] = getPlotMeasurement(this, keys);\n const barWidthOffsets = barWidthMetrics.offsetValues || [];\n const barHeightOffsets = barHeightMetrics.offsetValues || [];\n this._plotSpan = {\n x: barWidthMetrics.groupSpan || 0,\n y: barHeightMetrics.groupSpan || 0\n };\n this._plotPadding = {\n x: barWidthMetrics.padding || 0,\n y: barHeightMetrics.padding || 0\n };\n\n this._pointMap = {};\n return normalizedData.map((data, i) => this.translatePoints(data,\n {\n barWidth: barWidthMetrics.span,\n barWidthOffset: barWidthOffsets[i] || 0,\n barHeight: barHeightMetrics.span,\n barHeightOffset: barHeightOffsets[i] || 0\n }));\n }\n\n getPlotPadding () {\n return this._plotPadding;\n }\n\n /**\n * Gets the nearest point of the position passed.\n * @param {number} x x position\n * @param {number} y y position\n * @return {Object} Nearest point.\n */\n getNearestPoint (x, y) {\n if (!this.data()) {\n return null;\n }\n let axis;\n let value;\n let index;\n let points;\n let uniqueFieldType;\n let uniqueFieldIndex;\n let filterData;\n let identifiers;\n let pointFound = null;\n const dataModel = this.data();\n const dataObj = dataModel.getData();\n const fieldsConfig = dataModel.getFieldsConfig();\n const axes = this.axes();\n const data = dataObj.data;\n const pointMap = this._pointMap;\n const {\n xField,\n yField,\n xFieldSubType,\n yFieldSubType\n } = this.encodingFieldsInf();\n\n if (xFieldSubType === FieldType.MEASURE) {\n axis = axes.y;\n value = axis.invert(y);\n uniqueFieldIndex = fieldsConfig[yField].index;\n uniqueFieldType = yFieldSubType;\n } else {\n axis = axes.x;\n value = axis.invert(x);\n uniqueFieldIndex = fieldsConfig[xField].index;\n uniqueFieldType = xFieldSubType;\n }\n\n if (uniqueFieldType === DimensionSubtype.CATEGORICAL) {\n points = pointMap[value];\n }\n\n if (uniqueFieldType === DimensionSubtype.TEMPORAL) {\n filterData = [...new Set(data.map(d => d[uniqueFieldIndex]))];\n index = getClosestIndexOf(filterData, value);\n value = filterData[index];\n points = pointMap[value];\n }\n const len = points && points.length;\n points && points.sort((p1, p2) => p1.update.y - p2.update.y);\n for (let i = 0; i < len; i++) {\n const point = points[i];\n const update = point.update;\n if (x >= update.x && x <= (update.width + update.x) && y >= update.y && y <= (update.height + update.y)) {\n pointFound = point;\n break;\n }\n pointFound = null;\n }\n\n const values = pointFound && pointFound._data;\n if (values) {\n identifiers = this.getIdentifiersFromData(values, pointFound._id);\n }\n return pointFound ? {\n dimensions: [pointFound.update],\n id: identifiers,\n layerId: this.id()\n } : pointFound;\n }\n\n getPlotSpan () {\n return this._plotSpan;\n }\n}\n","import { CLASSPREFIX } from '../../enums/constants';\n\nexport const defaultConfig = {\n defClassName: 'layer-tick',\n className: '',\n classPrefix: CLASSPREFIX,\n interaction: {\n highlight: [{\n type: 'stroke',\n intensity: [0, 0, -15, 0]\n }],\n fade: [{\n type: 'stroke',\n intensity: [0, 0, 15, 0]\n }],\n focus: [{\n type: 'stroke',\n intensity: [0, 0, 15, 0]\n }]\n },\n innerPadding: 0.1,\n transform: {\n type: 'identity'\n },\n transition: {\n effect: 'cubic',\n duration: 1000\n },\n encoding: {\n color: { },\n x: {},\n y: {},\n x0: {},\n y0: {},\n strokeOpacity: {\n value: 0.5\n },\n fillOpacity: {\n value: 0.5\n }\n },\n states: {\n highlight: {\n className: `${CLASSPREFIX}-layer-tick-highlight`\n },\n fadeout: {\n className: `${CLASSPREFIX}-layer-tick-fadeout`\n },\n selected: {\n className: `${CLASSPREFIX}-layer-tick-selected`\n }\n }\n};\n","import { selectElement } from 'muze-utils';\n\n/**\n * Draws ticks by using d3 selection\n * @param {Object} params Contains container element and points\n * @return {Selection} Ticks Selection\n */\nexport default /* istanbul ignore next */ (params) => {\n const { points, container, keyFn, className } = params;\n const mount = selectElement(container);\n const ticks = mount.selectAll('path').data(points, keyFn);\n const ticksEnter = ticks.enter().append('path');\n\n mount.attr('class', className || '');\n ticksEnter.each(function (d) {\n const selection = selectElement(this);\n const enter = d.enter || {};\n Object.entries(enter).forEach(attr => (!isNaN(attr[1]) && selection.attr(attr[0], attr[1])));\n });\n\n ticks.exit().remove();\n return ticks.merge(ticksEnter)\n .each(function (d) {\n const selection = selectElement(this);\n const update = d.update;\n const updateStyle = d.style || {};\n const x0 = update.x0 !== undefined ? update.x0 : update.x;\n const y0 = update.y0 !== undefined ? update.y0 : update.y;\n const path = `M ${update.x} ${update.y} L ${x0} ${y0}`;\n d.className && selection.classed(d.className, true);\n selection.attr('d', path);\n Object.entries(updateStyle).forEach(styleObj => selection.style(styleObj[0], styleObj[1]));\n });\n};\n\n","import { FieldType } from 'muze-utils';\nimport { PointLayer } from '../point';\nimport { defaultConfig } from './default-config';\nimport * as PROPS from '../../enums/props';\nimport { ENCODING } from '../../enums/constants';\nimport drawTicks from './renderer';\nimport './styles.scss';\nimport { getAxesScales, getLayerColor, positionPoints, getIndividualClassName } from '../../helpers';\n\nexport default class TickLayer extends PointLayer {\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof TickLayer\n */\n static defaultConfig () {\n return defaultConfig;\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof TickLayer\n */\n static formalName () {\n return 'tick';\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof TickLayer\n */\n static drawFn () {\n return drawTicks;\n }\n\n /**\n *\n *\n * @returns\n * @memberof TickLayer\n */\n elemType () {\n return 'path';\n }\n\n /**\n * Generates an array of objects containing x, y, width and height of the points from the data\n * @param {Array.} data Data Array\n * @param {Object} encoding Config\n * @param {Object} axes Axes object\n * @return {Array.} Array of points\n */\n translatePoints (data, encoding, axes, config = {}) {\n let points = [];\n const {\n xAxis,\n yAxis\n } = getAxesScales(axes);\n const fieldsConfig = this.data().getFieldsConfig();\n const {\n xField,\n yField,\n x0Field,\n y0Field,\n xFieldType,\n yFieldType\n } = this.encodingFieldsInf();\n const isXDim = xFieldType === FieldType.DIMENSION;\n const isYDim = yFieldType === FieldType.DIMENSION;\n const key = isXDim ? ENCODING.X : (isYDim ? ENCODING.Y : null);\n const colorEncoding = encoding.color;\n const colorField = colorEncoding && colorEncoding.field;\n const colorFieldIndex = fieldsConfig[colorField] && fieldsConfig[colorField].index;\n const measurement = this._store.get(PROPS.MEASUREMENT);\n const colorAxis = axes.color;\n const { x: offsetX, y: offsetY } = config.offset;\n const { x: xSpan, y: ySpan } = config.span;\n for (let i = 0, len = data.length; i < len; i++) {\n let xPx;\n let x0Px;\n let y0Px;\n let yPx;\n const d = data[i];\n const row = d._data;\n if (xField) {\n xPx = xAxis.getScaleValue(d.x) + offsetX;\n x0Px = xPx + xSpan;\n }\n\n if (yField) {\n yPx = yAxis.getScaleValue(d.y) + offsetY;\n y0Px = yPx !== null ? yPx + ySpan : null;\n }\n\n if (!xField) {\n xPx = 0;\n x0Px = measurement.width;\n if (!isNaN(yPx)) {\n yPx += ySpan / 2;\n y0Px = yPx;\n }\n }\n\n if (!yField) {\n yPx = 0;\n y0Px = measurement.height;\n x0Px = xPx += xSpan / 2;\n }\n\n if (x0Field) {\n x0Px = xAxis.getScaleValue(d.x0) + xSpan;\n yPx += ySpan / 2;\n y0Px -= ySpan / 2;\n }\n\n if (y0Field) {\n y0Px = yAxis.getScaleValue(d.y0) + ySpan;\n xPx += xSpan / 2;\n x0Px -= xSpan / 2;\n }\n const style = {};\n const meta = {};\n const { color, rawColor } = getLayerColor({ datum: d, index: i },\n { colorEncoding, colorAxis, colorFieldIndex });\n\n style.stroke = color;\n meta.stateColor = {};\n meta.originalColor = rawColor;\n meta.colorTransform = {};\n if (!isNaN(xPx) && !isNaN(yPx)) {\n const point = {\n enter: {},\n update: {\n x: xPx,\n y: yPx,\n x0: x0Px,\n y0: y0Px\n },\n style,\n _data: row,\n _id: d._id,\n source: row,\n rowId: d._id,\n meta\n };\n point.className = getIndividualClassName(d, i, data, this);\n points.push(point);\n this.cachePoint(d[key], point);\n }\n }\n points = positionPoints(this, points);\n return points;\n }\n\n getMeasurementConfig (offsetX, offsetY, widthSpan, heightSpan) {\n return {\n offset: {\n x: (offsetX || 0),\n y: (offsetY || 0)\n },\n span: {\n x: widthSpan,\n y: heightSpan\n }\n };\n }\n}\n","import { isSimpleObject, mergeRecursive, getObjProp } from 'muze-utils';\n\nconst parseLayerDefinition = (sink, definition, layerDef, layerType) => {\n for (const key in definition) {\n if (Object.hasOwnProperty.call(definition, key)) {\n let strs;\n let propValue;\n const def = definition[key];\n if (isSimpleObject(def)) {\n sink[key] = {};\n parseLayerDefinition(sink[key], def, layerDef, layerType);\n } else if (typeof def === 'string' && (strs = def.split('.')) && strs[0] === layerType) {\n propValue = getObjProp(layerDef, ...strs.slice(1, strs.length));\n if (propValue !== undefined) {\n sink[key] = propValue;\n }\n } else {\n sink[key] = def;\n }\n }\n }\n};\n\nconst sanitizeEncoding = (encoding) => {\n // Create object for each encoding value if encoding value is a string\n for (const key in encoding) {\n if (typeof encoding[key] === 'string') {\n encoding[key] = {\n field: encoding[key]\n };\n }\n }\n};\n\n/**\n * Layer Factory creates layers based on the layer type. All types of layers needs to register in\n * the layer factory. For getting a layer instance, getLayer method needs to invoked with the\n * layerType and other arguments.\n */\nconst layerFactory = (() => {\n const compositeLayers = {};\n const factoryObj = {\n setLayerRegistry: (reg) => {\n factoryObj._layerRegistry = reg;\n },\n getSerializedConf: (mark, layerDef) => {\n let serializedDefs;\n const defs = compositeLayers[mark];\n const newConf = mergeRecursive({}, layerDef);\n\n // If it is a composite layer then resolve all the definitions of each unit layer\n if (defs) {\n serializedDefs = defs.map((unitLayerDef) => {\n const sDef = {};\n parseLayerDefinition(sDef, unitLayerDef, newConf, mark);\n sanitizeEncoding(sDef.encoding);\n return sDef;\n });\n } else {\n const encoding = newConf.encoding;\n // Create object for each encoding value if encoding value is a string\n sanitizeEncoding(encoding);\n serializedDefs = newConf;\n }\n\n return serializedDefs;\n },\n getLayerInstance: (layerDef) => {\n const layerRegistry = factoryObj._layerRegistry;\n layerDef = !(layerDef instanceof Array) ? [layerDef] : layerDef;\n const instances = layerDef.map((layerObj) => {\n const layerConstructor = layerRegistry[layerObj.mark];\n return layerConstructor.create();\n });\n return instances.length === 1 ? instances[0] : instances;\n },\n composeLayers: (layerType, layerDefs) => {\n compositeLayers[layerType] = layerDefs;\n },\n sanitizeLayerConfig: (layerDef) => {\n const newConf = mergeRecursive({}, layerDef);\n sanitizeEncoding(newConf.encoding);\n return newConf;\n }\n };\n return factoryObj;\n})();\n\nexport default layerFactory;\n","import { AreaLayer } from './layers/area';\nimport { ArcLayer } from './layers/arc';\nimport { LineLayer } from './layers/line';\nimport { TextLayer } from './layers/text';\nimport { PointLayer } from './layers/point';\nimport { BarLayer } from './layers/bar';\nimport { BaseLayer } from './base-layer';\nimport * as CONSTANTS from './enums/constants';\nimport { TickLayer } from './layers/tick';\n\nexport const DEFAULT_LAYERS = {\n [CONSTANTS.AREA_LAYER]: AreaLayer,\n [CONSTANTS.ARC_LAYER]: ArcLayer,\n [CONSTANTS.LINE_LAYER]: LineLayer,\n [CONSTANTS.TEXT_LAYER]: TextLayer,\n [CONSTANTS.POINT_LAYER]: PointLayer,\n [CONSTANTS.TICK_LAYER]: TickLayer,\n [CONSTANTS.BAR_LAYER]: BarLayer,\n [CONSTANTS.BASE_LAYER]: BaseLayer\n};\n","/**\n * This file exports constants that are used as enums in the\n * crosstab group implementation.\n */\n/**\n * Width of the crosstab.\n */\nexport const X = 'x';\n/**\n * Width of the crosstab.\n */\nexport const Y = 'y';\n/**\n * Width of the crosstab.\n */\nexport const WIDTH = 'width';\n\n/**\n * Height of the crosstab.\n */\nexport const HEIGHT = 'height';\n\n/**\n * Field referring to object storing measurement configuration.\n */\nexport const MEASUREMENT = 'measurement';\n\n/**\n * Field referring to object storing configuration properties.\n */\nexport const CONFIG = 'config';\n\n/**\n * Width of visual unit in crosstab.\n */\nexport const MIN_UNIT_WIDTH = 'minUnitWidth';\n\n/**\n * Height of visual unit.\n */\nexport const MIN_UNIT_HEIGHT = 'minUnitHeight';\n\n/**\n * Field to store the array of dimensions to facet by.\n */\nexport const DIMENSIONS = 'dimensions';\n\n/**\n * Field to store array of measures to use as x axis.\n */\nexport const MEASURES = 'measures';\n\n/**\n * Field to store the array of dimensions to facet by.\n */\nexport const DIMENSION = 'dimension';\n\n/**\n * Field to store array of measures to use as x axis.\n */\nexport const MEASURE = 'measure';\n\n/**\n * Flag to specify if model should be pivoted.\n */\nexport const PIVOT = 'pivot';\n\n/**\n * Flag to specify format\n */\nexport const FORMAT = 'format';\n\n/**\n * Mount point where the variable will be hosted\n */\nexport const MOUNT = 'mount';\n\n/**\n * Data update flag\n */\nexport const HAS_DATA_UPDATED = 'hasDataUpdated';\n\n/**\n * Field referring to object storing set of rows\n */\nexport const ROWS = 'rows';\n\n/**\n * Field referring to object storing set of columns\n */\nexport const COLUMNS = 'columns';\n\n/**\n * Field referring to object storing set of columns\n */\nexport const COL = 'col';\n\n/**\n * Field referring to object storing set of rows\n */\nexport const ROW = 'row';\n\n/**\n * Field referring to object storing set of columns\n */\nexport const COLUMN = 'column';\n\n/**\n * Field referring to object storing color field\n */\nexport const COLOR = 'color';\n\n/**\n * Field referring to object storing shape field\n */\nexport const SHAPE = 'shape';\n\n/**\n * Field referring to object storing size field\n */\nexport const SIZE = 'size';\n\n/**\n * Field referring to object storing detail field\n */\nexport const DETAIL = 'detail';\n\n/**\n * Field referring to object storing set of layers\n */\nexport const LAYERS = 'layers';\n\n/**\n * Field referring to object storing the transforms\n */\nexport const TRANSFORM = 'transform';\n\n/**\n * Field referring to object storing the transforms\n */\nexport const ORDINAL = 'ordinal';\n\n/**\n * Field referring to object storing the transforms\n */\nexport const LINEAR = 'linear';\n/**\n * Field referring to object storing the transforms\n */\nexport const LEFT = 'left';\n/**\n * Field referring to object storing the transforms\n */\nexport const RIGHT = 'right';\n/**\n * Field referring to object storing the transforms\n */\nexport const TOP = 'top';\n/**\n * Field referring to object storing the transforms\n */\nexport const BOTTOM = 'bottom';\n\n/**\n * Field referring to object storing the transforms\n */\nexport const RETINAL = 'retinal';\n/**\n * Field referring to object storing the transforms\n */\nexport const CELL = 'cell';\n/**\n * Field referring to object storing the transforms\n */\nexport const X_AXES = 'xAxes';\n/**\n * Field referring to object storing the transforms\n */\nexport const Y_AXES = 'yAxes';\n/**\n * Field referring to object storing the transforms\n */\nexport const ENTRY_CELLS = 'entryCell';\n/**\n * Field referring to object storing the transforms\n */\nexport const INITIALIZED = 'initialized';\n/**\n * Field referring to object storing the transforms\n */\nexport const EXIT_CELLS = 'exitCell';\n/**\n * Field referring to object storing the transforms\n */\nexport const AXIS = 'axis';\n/**\n * Field referring to object storing the transforms\n */\nexport const UNIT = 'unit';\n/**\n * Field referring to object storing the transforms\n */\nexport const UPDATED = 'updated';\n/**\n * Field referring to object storing the transforms\n */\nexport const BEFORE_UPDATE = 'beforeupdate';\n/**\n * Field referring to object storing the transforms\n */\nexport const VALUE_MATRIX = 'valueMatrix';\n/**\n * Field referring to object storing the transforms\n */\nexport const FACET_HEADERS = 'facet-headers';\n/**\n * Field referring to object storing the transforms\n */\nexport const RADIUS = 'radius';\n/**\n * Field referring to object storing the transforms\n */\nexport const ANGLE = 'angle';\n/**\n * Field referring to object storing the transforms\n */\nexport const ARC = 'arc';\n/**\n * Field referring to object storing the transforms\n */\nexport const CARTESIAN = 'cartesian';\n/**\n * Field referring to object storing the transforms\n */\nexport const POLAR = 'polar';\n/**\n * Field referring to object storing the transforms\n */\nexport const CATEGORICAL = 'categorical';\n/**\n * Field referring to object storing the transforms\n */\nexport const TEMPORAL = 'temporal';\n/**\n * Field referring to object storing the transforms\n */\nexport const BAR = 'bar';\n/**\n * Field referring to object storing the transforms\n */\nexport const LINE = 'line';\n/**\n * Field referring to object storing the transforms\n */\nexport const POINT = 'point';\n/**\n * Field referring to object storing the transforms\n */\nexport const PRIMARY = 'Primary';\n/**\n * Field referring to object storing the transforms\n */\nexport const SECONDARY = 'Secondary';\n/**\n * Field referring to object storing the transforms\n */\nexport const BOTH = 'both';\n/**\n * Field referring to object storing the transforms\n */\nexport const INTERACTION = 'interaction';\n/**\n * Field referring to object storing the transforms\n */\nexport const GRID_LINES = 'gridLines';\n/**\n * Field referring to object storing the transforms\n */\nexport const GRID_BANDS = 'gridBands';\n/**\n * Field referring to object storing the transforms\n */\nexport const HEADER = 'header';\n/**\n * Field referring to object storing the transforms\n */\nexport const FACET = 'facet';\n\n","import { ROWS, COLUMNS, COLOR, SHAPE, SIZE, DETAIL, LAYERS, TRANSFORM, CONFIG } from '../enums/constants';\n\n/**\n * @module\n * This is the local options semantics based on which setters getters are created and reactivity is initiated.\n * This local object is only valid for Artboard.\n * Artboard merges global and local object both to the model\n *\n * Format\n * PROPERTRY_NAME: {\n * value: // default value of the property,\n * meta: {\n * typeCheck: // The setter value will be checked using this. If the value is function then the setter value\n * // is passed as args.\n * typeExpected: // The output of typecheck action will be tested against this. Truthy value will set the\n * // value to the setter\n * sanitizaiton: // Need for sanitization before type is checked\n * }\n * }\n */\n\nexport default {\n [CONFIG]: {},\n [ROWS]: [],\n [COLUMNS]: [],\n [COLOR]: '',\n [SHAPE]: '',\n [SIZE]: '',\n [DETAIL]: '',\n [LAYERS]: '',\n [TRANSFORM]: []\n};\n","import { ERROR_MSG } from 'muze-utils';\n\n/**\n * Interfaces for VisualGroup. Any new VisualGroup has to implement this class.\n * @class SimpleGroup\n */\nclass SimpleGroup {\n\n /**\n * This method is used to set or get the DataModel instance.\n *\n * @param {DataModel | undefined} dataModel Instance of datamodel.\n\n * @memberof SimpleGroup\n */\n data () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * This method is used to set or get the group specific configuration\n * properties\n *\n * @param {Object | undefined} configObj The input configuration.\n * or instance of visual group.\n * @memberof SimpleGroup\n */\n config () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * This method is used to return a serialized representation of the\n * instance's properties.\n *\n * @memberof SimpleGroup\n */\n serialize () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * This method is used to get or set the measurement object which houses\n * layout properties like width and height.\n *\n * @param {Object | undefined} mObj The measurement properties.\n * @memberof SimpleGroup\n */\n measurement () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n}\n\nexport default SimpleGroup;\n","import { ERROR_MSG } from 'muze-utils';\n\n/**\n *\n *\n * @export\n * @class Variable\n */\nexport default class Variable {\n\n /**\n *\n *\n * @memberof Variable\n */\n type () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n *\n *\n * @memberof Variable\n */\n toString () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n}\n","import Variable from './variable';\n\n/**\n *\n *\n * @class ComposeVars\n * @extends {Variable}\n */\nclass ComposedVars extends Variable {\n\n /**\n *Creates an instance of ComposeVars.\n * @param {*} texts\n * @memberof ComposeVars\n */\n constructor (...texts) {\n super(...texts);\n this.vars(texts);\n }\n\n /**\n *\n *\n * @param {*} params\n * @returns\n * @memberof ComposeVars\n */\n vars (...params) {\n if (params.length) {\n this._vars = params[0];\n return this;\n }\n return this._vars;\n }\n\n /**\n *\n *\n * @param {*} dm\n * @returns\n * @memberof ComposeVars\n */\n data (...dm) {\n if (dm.length) {\n this.vars().forEach(d => d.data(dm[0]));\n return this;\n }\n return this._data;\n }\n\n /**\n *\n *\n * @returns\n * @memberof ComposeVars\n */\n getMembers () {\n const vars = this.vars();\n return vars.map(member => member.getMembers()[0]);\n }\n\n /**\n *\n *\n * @returns\n * @memberof ComposeVars\n */\n type () {\n return this.vars()[0].type();\n }\n\n /**\n *\n *\n * @returns\n * @memberof ComposeVars\n */\n toString () {\n return this.vars().map(d => d.toString()).join(',');\n }\n\n /**\n *\n *\n * @returns\n * @memberof ComposeVars\n */\n numberFormat () {\n return this.vars()[0].numberFormat();\n }\n\n /**\n *\n *\n * @returns\n * @memberof ComposeVars\n */\n format (values) {\n return this.vars()[0].format(values);\n }\n\n /**\n *\n *\n * @returns\n * @memberof ComposedVars\n */\n subtype () {\n return this.vars()[0].subtype();\n }\n\n /**\n *\n *\n * @returns\n * @memberof ComposedVars\n */\n getMinDiff () {\n return this.vars()[0].getMinDiff();\n }\n}\n\nexport default ComposedVars;\n","import { DateTimeFormatter } from 'muze-utils';\nimport Variable from './variable';\n\n/**\n *\n *\n * @export\n * @class Vars\n * @extends {Variable}\n */\nexport default class SimpleVariable extends Variable {\n\n /**\n *Creates an instance of Vars.\n * @param {*} text\n * @memberof Vars\n */\n constructor (text) {\n super();\n this.oneVar(text);\n }\n\n /**\n *\n *\n * @param {*} params\n * @returns\n * @memberof Vars\n */\n oneVar (...oneV) {\n if (oneV.length) {\n this._oneVar = oneV[0];\n return this;\n }\n return this._oneVar;\n }\n\n /**\n *\n *\n * @param {*} dm\n * @returns\n * @memberof Vars\n */\n data (...dm) {\n if (dm.length) {\n this._data = dm[0];\n return this;\n }\n return this._data;\n }\n\n /**\n *\n *\n * @returns\n * @memberof Vars\n */\n toString () {\n return this.oneVar();\n }\n\n /**\n *\n *\n * @memberof SimpleVariable\n */\n numberFormat () {\n if (this.type() === 'measure') {\n const formatter = this.data().getFieldspace().getMeasure()[this.oneVar()]._ref;\n return formatter.numberFormat();\n } return val => val;\n }\n\n /**\n *\n *\n * @memberof SimpleVariable\n */\n format (values) {\n if (values && this.subtype() === 'temporal') {\n const formatter = this.data().getFieldspace().getDimension()[this.oneVar()]._ref.schema.format;\n const dtFormat = new DateTimeFormatter(formatter);\n values = values.map(e => dtFormat.getNativeDate(e));\n }\n return values;\n }\n\n /**\n *\n *\n * @returns\n * @memberof Vars\n */\n getMembers () {\n return [this.oneVar()];\n }\n\n /**\n *\n *\n * @returns\n * @memberof Vars\n */\n type () {\n const fieldDef = this.data().getFieldsConfig()[this.oneVar()].def;\n return fieldDef.type;\n }\n\n /**\n *\n *\n * @returns\n * @memberof Vars\n */\n subtype () {\n const fieldDef = this.data().getFieldsConfig()[this.oneVar()].def;\n return fieldDef.subtype || fieldDef.type;\n }\n\n /**\n *\n *\n * @returns\n * @memberof SimpleVariable\n */\n getMinDiff () {\n const fieldSpace = this.data().getFieldspace();\n return fieldSpace.fieldsObj()[this.oneVar()].getMinDiff();\n }\n\n equals (varInst) {\n return this.oneVar() === varInst.oneVar();\n }\n}\n","import { ComposedVars, SimpleVariable } from '../variable';\nimport { DIMENSION, COLUMNS, ROWS, TEMPORAL } from '../enums/constants';\n\n/**\n * Gets the list of fields in a sorted order by measurement and dimension\n *\n * @param {Array} fieldList List of fields in the view\n * @param {Object} fieldMap Mapping of fields in the datamodel\n * @return {Array} fields sorted by measurement and dimensions\n */\nconst orderFields = (fieldArray, type) => {\n const dimensionArr = [[], []];\n const measureArr = [[], []];\n const temporalArr = [[], []];\n const categoricalArr = [[], []];\n\n fieldArray.forEach((fieldList, index) => {\n fieldList.forEach((field) => {\n if (field.type() === DIMENSION) {\n dimensionArr[index].push(field);\n field.subtype() === TEMPORAL ? temporalArr[index].push(field) : categoricalArr[index].push(field);\n } else {\n measureArr[index].push(field);\n }\n });\n });\n\n const numOfMeasures = measureArr[0].length + (measureArr[1] ? measureArr[1].length : 0);\n\n // Single array of fields\n if (!fieldArray[1]) {\n // Push measures to bottom\n measureArr[1] = type === COLUMNS ? measureArr[0] : [];\n // Push measures to left\n measureArr[0] = type !== COLUMNS ? measureArr[0] : [];\n // Bottom and right dimensions empty\n dimensionArr[1] = [];\n // Left and top filled with dimensions\n dimensionArr[0] = dimensionArr[0];\n if (numOfMeasures === 0) {\n const allDimensions = [...dimensionArr[0], ...dimensionArr[1]];\n if (type === COLUMNS) {\n dimensionArr[1] = allDimensions[allDimensions.length - 1] ? [allDimensions[allDimensions.length - 1]]\n : [];\n allDimensions.splice(-1, 1);\n } else {\n dimensionArr[1] = [];\n }\n dimensionArr[0] = [...allDimensions];\n }\n }\n\n if (dimensionArr[0].length && dimensionArr[1].length && numOfMeasures > 0) {\n dimensionArr[0] = [...dimensionArr[0], ...dimensionArr[1]];\n dimensionArr[1] = [];\n }\n return {\n fields: dimensionArr.map((list, i) => (i === 1 ?\n measureArr[i].concat(dimensionArr[i]) : dimensionArr[i].concat(measureArr[i]))),\n dimensions: [...dimensionArr[0], ...dimensionArr[1]],\n measures: [...measureArr[0], ...measureArr[1]],\n temporal: [...temporalArr[0], ...temporalArr[1]],\n categorical: [...categoricalArr[0], ...categoricalArr[1]]\n };\n};\n\n/**\n * Gets the list of normalized fields\n *\n * @param {Array} fields List of fields in the view\n * @param {Object} fieldMap Mapping of fields in the datamodel\n * @return {Array} fields normalized by measurement and dimensions\n */\nconst normalizeFields = (config, type) => {\n const fieldsArr = [];\n const fields = config[type];\n\n if (!(fields[0] instanceof Array)) {\n fieldsArr[0] = fields;\n } else {\n fieldsArr[0] = fields[0] || [];\n fieldsArr[1] = fields[1] || [];\n }\n return fieldsArr;\n};\n\n/**\n *\n *\n * @param {*} fields\n * @param {*} datamodel\n * @return\n */\nconst convertToVar = (datamodel, fields) => {\n const vars = [];\n\n fields && fields.forEach((field) => {\n if (field instanceof ComposedVars) {\n vars.push(field);\n field.data(datamodel);\n } else {\n vars.push(new SimpleVariable(field).data(datamodel));\n }\n });\n return vars;\n};\n\n/**\n *\n *\n * @param {*} rows\n * @param {*} columns\n * @param {*} datamodel\n * @return\n */\nexport const transformFields = (datamodel, config) => {\n const [rowsInfo, columnsInfo] = [ROWS, COLUMNS].map((fields) => {\n const normalizedFields = normalizeFields(config, fields);\n const norFields = [convertToVar(datamodel, normalizedFields[0])];\n\n if (normalizedFields[1]) {\n norFields[1] = convertToVar(datamodel, normalizedFields[1]);\n }\n return orderFields(norFields, fields);\n });\n const {\n fields: rows,\n dimensions: rowDimensions,\n measures: rowMeasures,\n temporal: rowTemporalFields,\n categorical: rowCategoricalFields\n } = rowsInfo;\n const {\n fields: columns,\n dimensions: columnDimensions,\n measures: columnMeasures,\n temporal: columnTemporalFields,\n categorical: columnCategoricalFields\n } = columnsInfo;\n return {\n rows,\n rowDimensions,\n rowMeasures,\n rowTemporalFields,\n rowCategoricalFields,\n columns,\n columnTemporalFields,\n columnCategoricalFields,\n columnDimensions,\n columnMeasures\n };\n};\n","import { ERROR_MSG, mergeRecursive } from 'muze-utils';\nimport { transformFields } from './field-sanitizer';\nimport { getHeaderAxisFrom } from '../group-helper/group-utils';\nimport { ROW, COLUMN } from '../enums/constants';\n\n/**\n *\n *\n * @export\n * @class VisualEncoder\n */\nexport default class VisualEncoder {\n\n /**\n *\n *\n * @memberof VisualEncoder\n */\n createAxis () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n *\n *\n * @memberof VisualEncoder\n */\n setCommonDomain () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n *\n *\n * @memberof VisualEncoder\n */\n getLayerConfig () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n fieldInfo (...info) {\n if (info.length) {\n this._fieldInfo = mergeRecursive(this._fieldInfo || {}, info[0]);\n return this;\n }\n return this._fieldInfo;\n }\n\n /**\n *\n *\n * @param {*} datamodel\n * @param {*} config\n * @return\n * @memberof VisualEncoder\n */\n fieldSanitizer (datamodel, config) {\n this.fieldInfo(transformFields(datamodel, config));\n return this.fieldInfo();\n }\n\n /**\n *\n *\n * @param {*} params\n * @return\n * @memberof VisualEncoder\n */\n axisFrom (...params) {\n if (params.length) {\n this._axisFrom = params[0];\n return this;\n }\n return this._axisFrom;\n }\n\n /**\n *\n *\n * @param {*} params\n * @return\n * @memberof VisualEncoder\n */\n headerFrom (...params) {\n if (params.length) {\n this._headerFrom = params[0];\n return this;\n }\n return this.__headerFrom;\n }\n\n /**\n *\n *\n * @param {*} axisFrom\n * @return\n * @memberof CartesianEncoder\n */\n setAxisAndHeaders (axisFrom = {}, fields) {\n const [rowHeader, rowAxis] = getHeaderAxisFrom(ROW, fields.rows, axisFrom);\n const [colHeader, colAxis] = getHeaderAxisFrom(COLUMN, fields.columns, axisFrom);\n\n this.axisFrom({\n row: rowAxis,\n column: colAxis\n });\n this.headerFrom({\n row: rowHeader,\n column: colHeader\n });\n return this;\n }\n}\n","import { ContinousAxis, BandAxis, TimeAxis, ColorAxis, SizeAxis, ShapeAxis } from '@chartshq/muze-axis';\n\nexport const scaleMaps = {\n linear: ContinousAxis,\n band: BandAxis,\n temporal: TimeAxis,\n size: SizeAxis,\n color: ColorAxis,\n shape: ShapeAxis\n};\n","import { ScaleType } from '@chartshq/muze-axis';\n\n/**\n * Map of DataModel types to associated field types.\n */\nexport const dataTypeScaleMap = {\n dimension: ScaleType.BAND,\n categorical: ScaleType.BAND,\n measure: ScaleType.LINEAR,\n temporal: ScaleType.TIME\n};\n\n","import { mergeRecursive } from 'muze-utils';\nimport { AxisOrientation } from '@chartshq/muze-axis';\nimport { scaleMaps } from '../enums/scale-maps';\nimport { getAxisType, getAxisKey } from '../group-helper';\nimport { dataTypeScaleMap } from '../data-type-scale-map';\nimport { CATEGORICAL, TEMPORAL, BAR, LINE, POINT, BOTH, Y } from '../enums/constants';\n\n/**\n *\n *\n * @param {*} axisInfo\n * @param {*} field\n * @param {*} axesCreators\n * @return\n */\nconst getAxisConfig = (axisInfo, field, axesCreators) => {\n let axisOrientation;\n const { index, axisIndex, axisType } = axisInfo;\n const { config, position } = axesCreators;\n const userAxisConfig = config.axes ? (config.axes[axisType] || {}) : {};\n const {\n LEFT,\n RIGHT,\n TOP,\n BOTTOM\n } = AxisOrientation;\n const allOrientations = axisType === Y ? [LEFT, RIGHT] : [TOP, BOTTOM];\n\n if (position === BOTH) {\n axisOrientation = allOrientations[axisIndex];\n } else {\n axisOrientation = position;\n }\n const axisConfig = {\n id: `${axisType}-${index}-${axisIndex}`,\n name: field.toString(),\n field: field.toString(),\n labels: { rotation: 0 },\n numberFormat: field.numberFormat(),\n orientation: axisOrientation,\n type: dataTypeScaleMap[field.subtype()]\n };\n userAxisConfig.tickValues = field.format(userAxisConfig.tickValues);\n userAxisConfig.domain = field.format(userAxisConfig.domain);\n\n return mergeRecursive(axisConfig, userAxisConfig);\n};\n\n/**\n *\n *\n * @param {*} axisInfo\n * @param {*} field\n * @param {*} axesCreators\n * @return\n */\nconst createSimpleAxis = (axisConfig, field, axesCreators) => {\n const { labelManager } = axesCreators;\n const Cls = scaleMaps[dataTypeScaleMap[field.subtype()]];\n const simpleAxis = new Cls(axisConfig, { labelManager });\n return simpleAxis;\n};\n\n/**\n *\n *\n * @param {*} axisType\n * @param {*} fieldInfo\n * @param {*} axesCreators\n * @param {*} groupAxes\n * @return\n */\nexport const generateAxisFromMap = (axisType, fieldInfo, axesCreators, groupAxes) => {\n let axisKey;\n const currentAxes = [];\n const { fields, index } = fieldInfo;\n const { cacheMaps } = axesCreators;\n const map = cacheMaps[`${axisType}AxesMap`];\n\n fields.forEach((field, axisIndex) => {\n axisKey = getAxisKey(axisType, index, dataTypeScaleMap[field.subtype()]);\n const axisConfig = getAxisConfig({ index, axisIndex, axisType }, field, axesCreators);\n\n if (!map.has(axisKey)) {\n const xAxis = createSimpleAxis(axisConfig, field, axesCreators);\n currentAxes.push(xAxis);\n } else {\n const axes = map.get(axisKey);\n axes[axisIndex] = axes[axisIndex] ? axes[axisIndex] : createSimpleAxis(axisConfig, field, axesCreators);\n axes[axisIndex]._rotationLock = false;\n axes[axisIndex] && axes[axisIndex].config(axisConfig).domain(axisConfig.domain || []);\n }\n });\n\n if (currentAxes.length) {\n map.set(axisKey, currentAxes);\n }\n\n for (const [key] of map.entries()) {\n if (key === axisKey) {\n groupAxes.add(axisKey);\n }\n }\n return map.get(axisKey);\n};\n\n/**\n *\n *\n * @memberof MatrixResolver\n */\nexport const mutateAxesFromMap = (cacheMaps, axes) => {\n const {\n xAxesMap,\n yAxesMap\n } = cacheMaps;\n const {\n x: xAxisSet,\n y: yAxisSet\n } = axes;\n const xAxes = [];\n const yAxes = [];\n\n xAxisSet.forEach((axisId) => {\n const xAxis = xAxesMap.get(axisId);\n xAxes.push(xAxis);\n });\n yAxisSet.forEach((axisId) => {\n const yAxis = yAxesMap.get(axisId);\n yAxes.push(yAxis);\n });\n return {\n xAxes, yAxes\n };\n};\n\n/**\n * return a default mark based on predefined set of rules of type and subtype of the fields\n *\n * @param {string} colFieldType dimension/measure - temporal/ordinal/nominal\n * @param {string} rowFieldType dimension/measure - temporal/ordinal/nominal\n * @return {Object} return mark type\n */\nexport const getDefaultMark = (colFieldType, rowFieldType) => {\n let mark;\n\n if (colFieldType === CATEGORICAL || rowFieldType === CATEGORICAL) {\n mark = BAR;\n } else if (colFieldType === TEMPORAL || rowFieldType === TEMPORAL) {\n mark = LINE;\n } else {\n mark = POINT;\n }\n\n return mark;\n};\n\n/**\n *\n *\n * @param {*} axesCreators\n * @param {*} [fieldInfo=[]]\n * @return\n */\nexport const createRetinalAxis = (axesCreators, fieldProps = {}) => {\n const { axisType, fieldsConfig } = axesCreators;\n const field = fieldProps.field;\n const axis = [];\n const Cls = scaleMaps[axisType];\n\n fieldProps.type = fieldProps.type ? fieldProps.type : getAxisType(fieldsConfig, field || null);\n axis.push(new Cls(fieldProps));\n return axis;\n};\n\n/**\n *\n *\n * @param {*} arr\n * @param {*} val\n * @return\n */\nexport const getIndex = (arr, val) => {\n let i = 0;\n let arrIndex = -1;\n\n while (arrIndex === -1 && i < arr.length) {\n if (arr[i].toString() === val.toString()) {\n arrIndex = i;\n }\n i++;\n }\n return arrIndex;\n};\n\n/**\n *\n *\n * @param {*} colFields\n * @param {*} rowFields\n * @param {*} userLayerConfig\n * @return\n * @memberof CartesianEncoder\n */\nexport const getLayerConfFromFields = (colFields, rowFields, userLayerConfig) => userLayerConfig.filter((conf) => {\n const userConf = conf instanceof Array ? conf : [conf];\n const encodingArr = [].concat(...userConf.map(d => d.encoding).filter(d => d !== undefined));\n\n if (!encodingArr.length) {\n return true;\n }\n\n const xFields = [].concat(...encodingArr.map(d => [d.x && d.x.field, d.x0 && d.x0.field]))\n .filter(d => d !== undefined && d !== null);\n const yFields = [].concat(...encodingArr.map(d => [d.y && d.y.field, d.y0 && d.y0.field]))\n .filter(d => d !== undefined && d !== null);\n\n if (!xFields.length && !yFields.length) {\n return true;\n }\n\n const colFieldExist = xFields.length ? xFields.every(d => colFields.indexOf(d) !== -1) : false;\n const rowFieldExist = yFields.length ? yFields.every(d => rowFields.indexOf(d) !== -1) : false;\n if (xFields.length && yFields.length) {\n return colFieldExist && rowFieldExist;\n }\n return colFieldExist || rowFieldExist;\n});\n","import { layerFactory } from '@chartshq/visual-layer';\nimport { mergeRecursive } from 'muze-utils';\nimport { generateAxisFromMap, getDefaultMark, getIndex, getLayerConfFromFields } from './encoder-helper';\nimport { retriveDomainFromData } from '../group-helper';\n\nimport { ROW, COLUMN, COL, LEFT, TOP, CARTESIAN, MEASURE, BOTH, X, Y } from '../enums/constants';\nimport VisualEncoder from './visual-encoder';\n\n/**\n *\n *\n * @export\n * @class CartesianEncoder\n * @extends {VisualEncoder}\n */\nexport default class CartesianEncoder extends VisualEncoder {\n\n /**\n *\n *\n * @return\n * @memberof CartesianEncoder\n */\n static type () {\n return CARTESIAN;\n }\n\n /**\n *\n *\n * @param {*} axesCreators\n * @param {*} fieldInfo\n * @return\n * @memberof CartesianEncoder\n */\n createAxis (axesCreators, fieldInfo) {\n const geomCellAxes = {};\n const {\n axes\n } = axesCreators;\n const {\n projections,\n indices\n } = fieldInfo;\n const {\n rowFields,\n columnFields\n } = projections;\n const {\n rowIndex,\n columnIndex\n } = indices;\n const axisFields = [{\n fields: rowFields,\n index: rowIndex\n }, {\n fields: columnFields,\n index: columnIndex\n }];\n const xAxes = axes.x || [];\n const yAxes = axes.y || [];\n\n [rowFields, columnFields].forEach((fields, i) => {\n const type = i === 0 ? ROW : COLUMN;\n const axis = i === 0 ? Y : X;\n\n if (fields.length > 1) {\n axesCreators.position = BOTH;\n } else {\n axesCreators.position = this.axisFrom()[type];\n }\n geomCellAxes[axis] = generateAxisFromMap(axis, axisFields[i], axesCreators, axis === X ? xAxes : yAxes);\n });\n return geomCellAxes;\n }\n\n /**\n *\n *\n * @param {*} fields\n * @return\n * @memberof CartesianEncoder\n */\n getFacetsAndProjections (fields, type) {\n let facets = [];\n let projections = [];\n let counter = 0;\n const primaryFacets = [];\n const secondaryFacets = [];\n const primaryFields = fields[0];\n const secondaryFields = fields[1];\n const primaryLen = primaryFields.length;\n const secondaryLen = secondaryFields.length;\n const axisFrom = this.axisFrom();\n\n for (let i = 0; i < primaryLen; i++) {\n let projArr = [primaryFields[i]];\n const primaryField = primaryFields[i];\n\n if (primaryField.type() === MEASURE) {\n const secondaryField = secondaryFields[counter];\n if (secondaryField && secondaryField.type() === MEASURE) {\n counter++;\n projArr = [primaryField, secondaryField];\n }\n projections.push(projArr);\n } else {\n facets.push(primaryField);\n primaryFacets.push(primaryField);\n }\n }\n if (secondaryLen > counter) {\n for (let i = counter; i < secondaryLen; i++) {\n const secondaryField = secondaryFields[i];\n const projArr = [secondaryField];\n if (secondaryField.type() === MEASURE) {\n projections.push(projArr);\n } else {\n facets.push(secondaryField);\n secondaryFacets.push(secondaryField);\n }\n }\n }\n if ((primaryFacets.length || secondaryFacets.length) && !projections.length) {\n type = type === COL ? COLUMN : type;\n if ((axisFrom[type] === LEFT || axisFrom[type] === TOP) && primaryFacets.length) {\n const axisFromIndex = primaryFacets.length - 1;\n const facet = primaryFacets[axisFromIndex];\n projections = [[facet]];\n const existIndex = getIndex(secondaryFacets, facet);\n if (existIndex > -1) {\n projections = [[facet, facet]];\n secondaryFacets.splice(existIndex, 1);\n }\n primaryFacets.splice(axisFromIndex, 1);\n } else {\n const axisFromIndex = 0;\n const facet = secondaryFacets[axisFromIndex];\n projections = [[facet]];\n const existIndex = getIndex(primaryFacets, facet);\n if (existIndex > -1) {\n projections = [[facet, facet]];\n primaryFacets.splice(existIndex, 1);\n }\n secondaryFacets.splice(axisFromIndex, 1);\n }\n }\n\n facets = [...primaryFacets, ...secondaryFacets];\n facets = facets.filter((el, index, self) => index === self.findIndex(t => (t.toString() === el.toString())));\n return {\n facets,\n projections\n };\n }\n\n /**\n *\n *\n * @param {*} datamodel\n * @param {*} config\n * @return\n * @memberof CartesianEncoder\n */\n fieldSanitizer (datamodel, config) {\n return super.fieldSanitizer(datamodel, config);\n }\n\n /**\n *\n *\n * @param {*} datamodel\n * @return\n * @memberof CartesianEncoder\n */\n getRetinalFieldsDomain (dataModels, encoding) {\n const groupedModel = dataModels.groupedModel;\n const domains = {};\n for (const key in encoding) {\n if ({}.hasOwnProperty.call(encoding, key)) {\n const encodingObj = encoding[key];\n const field = encodingObj.field;\n if (!encodingObj.domain && field) {\n const domain = retriveDomainFromData(groupedModel, field);\n domains[field] = domain;\n }\n }\n }\n return domains;\n }\n\n /**\n *\n *\n * @param {*} layerArray\n * @memberof CartesianEncoder\n */\n serializeLayerConfig (layerArray) {\n const serializedLayers = [];\n // let currentLayerIndex = 0;\n layerArray.length && layerArray.forEach((layer, i) => {\n const def = layerFactory.sanitizeLayerConfig(layer);\n def.order = i;\n serializedLayers.push(def);\n });\n return serializedLayers;\n }\n\n /**\n *\n *\n * @param {*} fields\n * @param {*} userLayerConfig\n * @return\n * @memberof CartesianEncoder\n */\n getLayerConfig (fields, userLayerConfig) {\n const layerConfig = [];\n const {\n columnFields,\n rowFields\n } = fields;\n\n // let currentLayerIndex = 0;\n columnFields.forEach((colField) => {\n const colFieldName = colField.toString();\n rowFields.forEach((rowField) => {\n let configs = [];\n const rowFieldName = rowField.toString();\n const encoding = {\n x: {\n field: colFieldName\n },\n y: {\n field: rowFieldName\n }\n };\n const rowFieldType = rowField.subtype();\n const colFieldType = colField.subtype();\n const mark = getDefaultMark(colFieldType, rowFieldType);\n\n const defConfigs = [{\n mark,\n def: {\n mark,\n encoding\n }\n }];\n\n const layerConfigs = getLayerConfFromFields(colField.getMembers(),\n rowField.getMembers(), userLayerConfig || []);\n if (layerConfigs.length) {\n configs = layerConfigs.map((layerConf) => {\n const mergedLayerConf = mergeRecursive(mergeRecursive({}, defConfigs[0].def), layerConf);\n const serializedLayerConfig = layerFactory.getSerializedConf(mergedLayerConf.mark,\n mergedLayerConf);\n return {\n mark: mergedLayerConf.mark,\n order: mergedLayerConf.order,\n def: serializedLayerConfig\n };\n });\n } else {\n configs = defConfigs;\n }\n\n layerConfig.push(...configs);\n });\n });\n return layerConfig;\n }\n}\n\n","import { layerFactory } from '@chartshq/visual-layer';\nimport { mergeRecursive } from 'muze-utils';\nimport VisualEncoder from './visual-encoder';\nimport { RADIUS, ANGLE, SIZE, MEASURE, ARC, POLAR, COLOR } from '../enums/constants';\n/**\n *\n *\n * @export\n * @class PolarEncoder\n * @extends {VisualEncoder}\n */\nexport default class PolarEncoder extends VisualEncoder {\n\n /**\n *\n *\n * @param {*} axesCreators\n * @param {*} fieldInfo\n * @return\n * @memberof PolarEncoder\n */\n createAxis (axesCreators, fieldInfo) {\n const {\n axes\n } = axesCreators;\n const geomCellAxes = axes;\n const {\n indices\n } = fieldInfo;\n const {\n rowIndex,\n columnIndex\n } = indices;\n // Dummy axes for polar, to create blank cells\n const pieAxes = geomCellAxes.pie || [];\n\n pieAxes[rowIndex] = pieAxes[rowIndex] || [];\n pieAxes[rowIndex][columnIndex] = [];\n\n geomCellAxes.pie = pieAxes;\n geomCellAxes.x = null;\n geomCellAxes.y = null;\n\n return geomCellAxes;\n }\n\n /**\n *\n *\n * @param {*} fields\n * @return\n * @memberof CartesianEncoder\n */\n getFacetsAndProjections (fields) {\n let counter = 0;\n const facets = [];\n const projections = [];\n const primaryFields = fields[0];\n const secondaryFields = fields[1];\n const primaryLen = primaryFields.length;\n const secondaryLen = secondaryFields.length;\n\n for (let i = 0; i < primaryLen; i++) {\n const primaryField = primaryFields[i];\n if (primaryField.type() === MEASURE) {\n const secondaryField = secondaryFields[counter++];\n const projArr = secondaryField ? [primaryField, secondaryField] : [primaryField];\n projections.push(projArr);\n } else {\n facets.push(primaryField);\n }\n }\n if (secondaryLen > counter) {\n for (let i = counter; i < secondaryLen; i++) {\n const secondaryField = secondaryFields[i];\n const projArr = [secondaryField];\n if (secondaryField.type() === MEASURE) {\n projections.push(projArr);\n } else {\n facets.push(secondaryField);\n }\n }\n }\n return {\n facets,\n projections\n };\n }\n\n /**\n *\n *\n * @return\n * @memberof PolarEncoder\n */\n setCommonDomain () {\n // No domain to be set\n return this;\n }\n\n /**\n *\n *\n * @return\n * @memberof PolarEncoder\n */\n static type () {\n return POLAR;\n }\n\n layers (...layers) {\n if (layers.length) {\n this._layers = layers[0];\n return this;\n }\n return this._layers;\n }\n\n /**\n *\n *\n * @param {*} datamodel\n * @param {*} config\n * @memberof PolarEncoder\n */\n fieldSanitizer (datamodel, config) {\n let sanitizedRows = [[], []];\n let sanitizedColumns = [[], []];\n const fields = super.fieldSanitizer(datamodel, config);\n const {\n layers\n } = config;\n const {\n rows,\n columns\n } = fields;\n const layer = layers[0];\n const encoding = layer.encoding;\n const radius = encoding && encoding.radius ? encoding.radius.field : null;\n const angle = encoding && encoding.angle ? encoding.angle.field : null;\n const sanitizedFields = [sanitizedRows, sanitizedColumns];\n\n [rows, columns].forEach((fieldType, typeIndex) => {\n fieldType.forEach((fieldSet, i) => fieldSet.forEach((field) => {\n if (field.toString() !== radius && field.toString() !== angle && field.type() !== MEASURE) {\n sanitizedFields[typeIndex][i].push(field);\n }\n }));\n });\n sanitizedColumns = [...new Set(sanitizedColumns)];\n sanitizedRows = [...new Set(sanitizedRows)];\n this.fieldInfo({ rows: sanitizedRows, columns: sanitizedColumns });\n return this.fieldInfo();\n }\n\n getRetinalFieldsDomain (dataModels, encoding, facetFields, groupBy) {\n let sizeField;\n let colorField;\n const fields = [];\n const layers = this.layers();\n const dataModel = dataModels.parentModel;\n const fieldsConfig = dataModel.getFieldsConfig();\n const domains = {};\n if (layers && layers[0]) {\n const layer = layers[0];\n const layerEncoding = layer.def.encoding || {};\n\n [RADIUS, ANGLE, SIZE, COLOR].forEach((encType) => {\n const field = layerEncoding[encType] ? layerEncoding[encType].field : '';\n const measureField = fieldsConfig[field] && fieldsConfig[field].def.type === MEASURE;\n if (encType === SIZE && measureField) {\n sizeField = field;\n }\n if (encType === COLOR) {\n colorField = field;\n }\n fieldsConfig[field] && !measureField && fields.push(field);\n });\n }\n\n if (sizeField) {\n domains[sizeField] = dataModel.groupBy(facetFields, {\n [sizeField]: 'sum'\n }).getFieldspace().fieldsObj()[sizeField].domain();\n }\n\n if (colorField) {\n const dm = dataModel.groupBy([...facetFields, ...fields], groupBy.measures);\n domains[colorField] = dm.getFieldspace().fieldsObj()[colorField].domain();\n }\n return domains;\n }\n /**\n *\n *\n * @param {*} fields\n * @param {*} userLayerConfig\n * @return\n * @memberof PolarEncoder\n */\n getLayerConfig (fields, userLayerConfig) {\n let layerConfig = [];\n const {\n columnFields,\n rowFields\n } = fields;\n const allFields = [...columnFields, ...rowFields];\n\n allFields.forEach(() => {\n const encoding = {};\n let config = {\n mark: ARC,\n def: {\n encoding\n }\n };\n if (userLayerConfig && userLayerConfig.length > 0) {\n config = mergeRecursive(config, userLayerConfig[0]);\n }\n layerConfig.push(config);\n });\n if (layerConfig.length === 0) {\n layerConfig = userLayerConfig;\n }\n\n this.layers(layerConfig);\n return layerConfig;\n }\n\n /**\n *\n *\n * @param {*} layerArray\n * @returns\n * @memberof PolarEncoder\n */\n serializeLayerConfig (layerArray) {\n const serializedLayers = [];\n\n layerArray.length && layerArray.forEach((layer) => {\n const def = layerFactory.getSerializedConf(layer.mark, layer);\n serializedLayers.push({\n mark: layer.mark,\n def\n });\n });\n return serializedLayers;\n }\n}\n","import { createRetinalAxis } from './encoder-helper';\nimport { COLOR, SHAPE, SIZE } from '../enums/constants';\nimport VisualEncoder from './visual-encoder';\n\n/**\n *\n *\n * @export\n * @class RetinalEncoder\n * @extends {VisualEncoder}\n */\nexport default class RetinalEncoder extends VisualEncoder {\n\n /**\n *\n *\n * @param {*} axesCreators\n * @return\n * @memberof RetinalEncoder\n */\n createAxis (axesCreators) {\n const { fieldsConfig, config } = axesCreators;\n const newAxes = {};\n\n [COLOR, SHAPE, SIZE].forEach((axisType) => {\n newAxes[`${axisType}`] = createRetinalAxis({ axisType, fieldsConfig }, config[axisType]);\n });\n return newAxes;\n }\n\n /**\n *\n *\n * @static\n * @return\n * @memberof RetinalEncoder\n */\n static type () {\n return 'retinal';\n }\n\n /**\n *\n *\n * @param {*} fields\n * @param {*} userLayerConfig\n * @return\n * @memberof RetinalEncoder\n */\n getLayerConfig (encodingConfigs, userLayerConfig) {\n const layerConfig = [];\n userLayerConfig.forEach((e) => {\n const config = e;\n [COLOR, SHAPE, SIZE].forEach((axis) => {\n if (encodingConfigs[axis] && encodingConfigs[axis].field) {\n const def = config.def;\n if (config.def instanceof Array) {\n def.forEach((conf) => {\n conf.encoding = conf.encoding || {};\n !conf.encoding[axis] && (conf.encoding[axis] = {});\n conf.encoding[axis].field = encodingConfigs[axis].field;\n });\n } else {\n def.encoding = def.encoding || {};\n !def.encoding[axis] && (def.encoding[axis] = {});\n def.encoding[axis].field = encodingConfigs[axis].field;\n }\n }\n });\n layerConfig.push(config);\n });\n return layerConfig;\n }\n\n /**\n *\n *\n * @param {*} context\n * @return\n * @memberof RetinalEncoder\n */\n setCommonDomain (context) {\n const { domains, axes, encoding } = context;\n\n Object.entries(encoding).forEach((enc) => {\n if (enc[1] && enc[1].field) {\n const encType = enc[0];\n const field = enc[1].field;\n\n if (field) {\n axes[encType].forEach((axis) => {\n const domain = domains[field];\n !enc[1].domain && axis.updateDomain(domain);\n });\n }\n }\n });\n return axes;\n }\n}\n","import { Store, dataSelect, FieldType } from 'muze-utils';\nimport { DATA_UPDATE_COUNTER } from '../enums/defaults';\nimport { Variable } from '../variable';\nimport { PolarEncoder, CartesianEncoder } from '../encoder';\nimport {\n DIMENSION,\n MEASURE,\n ORDINAL,\n LINEAR,\n ROW,\n COLUMN,\n COL,\n LEFT,\n RIGHT,\n TOP,\n BOTTOM,\n COLOR,\n SIZE,\n TEMPORAL,\n SHAPE,\n INTERACTION,\n GRID_LINES,\n GRID_BANDS,\n HEADER,\n FACET,\n X,\n Y,\n POLAR\n} from '../enums/constants';\n\n/**\n * Creates an instance of a store which contains the arguments to make the class reactive\n *\n * @return {Object} instance of store\n * @memberof VisualGroup\n */\nexport const initStore = () => new Store({\n [DATA_UPDATE_COUNTER]: DATA_UPDATE_COUNTER\n});\n\n/**\n *\n *\n * @param {*} arr\n */\nexport const isDistributionEqual = arr => [...arr[0], ...arr[1]].reduce((isEqual, row) => {\n const rowType = row.type();\n\n if (rowType === MEASURE || rowType === TEMPORAL) {\n isEqual = true;\n }\n return isEqual;\n}, false);\n\n/**\n *\n *\n */\nexport const initializeCacheMaps = () => ({\n cellMap: new Map(),\n xAxesMap: new Map(),\n yAxesMap: new Map(),\n entryCellMap: new Map(),\n exitCellMap: new Map()\n});\n\n/**\n *\n *\n * @param {*} axisName\n * @param {*} id\n */\nexport const getAxisKey = (axisName, id, scaleType) => `${axisName}-axis-${id}-${scaleType}`;\n\n/**\n *\n *\n * @param {*} rowId\n * @param {*} columnId\n */\nexport const getCellKey = (rowId, columnId) => `cell-${rowId}-${columnId}`;\n\n/**\n *\n *\n * @param {*} config\n * @return\n */\nexport const extractUnitConfig = (config) => {\n const unitConfig = {};\n const attrNames = [INTERACTION, GRID_LINES, GRID_BANDS];\n\n attrNames.forEach((attr) => {\n if (config[attr] !== undefined) {\n unitConfig[attr] = config[attr];\n }\n });\n return unitConfig;\n};\n\n/**\n *\n *\n * @param {*} headers\n * @param {*} index\n * @param {*} rowLength\n * @return\n * @memberof MatrixResolver\n */\nexport const getHeaderText = (headers, index, rowLength) => {\n let header = '';\n\n if (index === rowLength - 1 && headers.length > rowLength) {\n for (let i = index; i < headers.length - 1; i++) {\n header += `${headers[i].toString()} / `;\n }\n header += headers[headers.length - 1].toString();\n return header;\n } else if (headers[index]) {\n return headers[index].toString();\n }\n return '';\n};\n\n/**\n *\n *\n * @param {*} fields\n * @param {*} fieldHeaders\n * @param {*} TextCell\n * @param {*} labelManager\n * @return\n */\nexport const headerCreator = (fields, fieldHeaders, TextCell, labelManager) => {\n const headers = fields.length > 0 ? fields[0].map((cell, i) => new TextCell({ type: HEADER }, { labelManager })\n .source(getHeaderText(fieldHeaders, i, fields[0].length))\n .config({ show: cell.config().show })) : [];\n return headers;\n};\n\n/**\n *\n *\n * @param {*} variable\n * @param {*} allFields\n * @return\n */\nexport const findInGroup = (variable, allFields) => {\n let channel = null;\n\n [COLOR, SIZE, SHAPE].forEach((e) => {\n if (this.store.get(e) && variable === this.store.get(e)[0]) {\n channel = e;\n }\n });\n\n if (channel) {\n return { channel };\n }\n [ROW, COL].forEach((facetType) => {\n allFields[`${facetType}Facets`].forEach((e) => {\n if (e.toString() === variable) {\n channel = { channel: FACET, type: facetType === COL ? COLUMN : ROW };\n }\n });\n });\n\n if (channel) {\n return channel;\n }\n\n [ROW, COL].forEach((projType) => {\n allFields[`${projType}Projections`].forEach((e) => {\n e.forEach((m) => {\n if (m.toString() === variable) {\n channel = projType === COL ? X : Y;\n }\n });\n });\n });\n\n if (channel) {\n return { channel };\n }\n return null;\n};\n\n/**\n *\n *\n * @param {*} datamodel\n * @param {*} field\n */\nexport const getAxisType = (fieldsConfig, field) => {\n let fieldType = ORDINAL;\n\n if (field && fieldsConfig[field].def.type !== DIMENSION) {\n fieldType = LINEAR;\n }\n return fieldType;\n};\n\n/**\n *\n *\n * @param {*} datamodel\n * @param {*} fieldName\n * @return\n */\nexport const retriveDomainFromData = (datamodel, fieldName) => {\n const field = datamodel.getFieldspace().fields.find(d => d._ref.name === fieldName.toString());\n return field.domain();\n};\n\n/**\n *\n *\n * @memberof MatrixResolver\n */\nexport const mutateAxesFromMap = (cacheMaps, axes) => {\n let xAxes = null;\n let yAxes = null;\n const {\n xAxesMap,\n yAxesMap\n } = cacheMaps;\n const {\n x: xAxisSet,\n y: yAxisSet\n } = axes;\n\n xAxisSet && xAxisSet.forEach((axisId) => {\n const xAxis = xAxesMap.get(axisId);\n xAxes = xAxes || [];\n xAxes.push(xAxis);\n });\n\n yAxisSet && yAxisSet.forEach((axisId) => {\n const yAxis = yAxesMap.get(axisId);\n yAxes = yAxes || [];\n yAxes.push(yAxis);\n });\n\n return {\n xAxes, yAxes\n };\n};\n\n/**\n *\n *\n * @param {*} layers\n * @return\n */\nexport const getEncoder = (layers) => {\n let encoder = new CartesianEncoder();\n\n if (layers) {\n // Figuring out the kind of layers the group will have\n encoder = layers.every(e => e.mark === 'arc') ? new PolarEncoder() : encoder;\n }\n return encoder;\n};\n\n/**\n *\n *\n * @param {*} type\n * @param {*} fields\n * @param {*} userAxisFromConfig\n * @return\n */\nexport const getHeaderAxisFrom = (type, fields, userAxisFromConfig) => {\n let axisFrom = userAxisFromConfig[type];\n let headerFrom = '';\n const options = type === ROW ? [LEFT, RIGHT] : [BOTTOM, TOP];\n const [firstField, secondField] = fields;\n const firstFieldType = i => (firstField.length ? firstField[i].type() : null);\n const secondFieldType = i => (secondField.length ? secondField[i].type() : null);\n\n if (firstFieldType(firstField.length - 1) === DIMENSION && secondFieldType(0) === DIMENSION) {\n headerFrom = axisFrom ? options[1 - options.indexOf(axisFrom)] : options[1];\n\n if (type === COLUMN && (firstField[firstField.length - 1].toString() === secondField[0].toString())) {\n axisFrom = TOP;\n } else {\n axisFrom = axisFrom || options[0];\n }\n } else if (secondFieldType(secondField.length - 1) === DIMENSION) {\n headerFrom = type === ROW ? RIGHT : BOTTOM;\n axisFrom = type === ROW ? RIGHT : BOTTOM;\n } else {\n headerFrom = type === ROW ? LEFT : TOP;\n axisFrom = type === ROW ? LEFT : TOP;\n }\n if (firstFieldType(firstField.length - 1) === MEASURE && secondFieldType(0) === MEASURE) {\n axisFrom = type === ROW ? LEFT : TOP;\n } else if (secondFieldType(0) === MEASURE) {\n axisFrom = type === ROW ? RIGHT : BOTTOM;\n } else if (firstFieldType(firstField.length - 1) === MEASURE) {\n axisFrom = type === ROW ? LEFT : TOP;\n }\n return [headerFrom, axisFrom];\n};\n\n/**\n *\n *\n * @param {*} type\n * @param {*} fields\n * @param {*} layers\n * @return\n * @memberof MatrixResolver\n */\nexport const setFacetsAndProjections = (context, fieldInfo, encoder) => {\n const {\n fields,\n type\n } = fieldInfo;\n const { facets, projections } = encoder.simpleEncoder.getFacetsAndProjections(fields, type);\n\n context.facets({ [`${type}Facets`]: facets });\n context.projections({ [`${type}Projections`]: projections });\n\n return { facets, projections, fields };\n};\n\n/**\n * Creates a selection set from a data set with corresponding attributes\n *\n * @export\n * @param {Selection} sel contains previous selection\n * @param {Object} appendObj Object to be appended\n * @param {Array} data Data based on which the selection is entered/updated/removed\n * @param {Object} [attrs={}] Attributes to be set on the data\n * @return {Selection} Merged selection\n */\nexport const createSelection = (sel, appendObj, data, idFn) => {\n let selection = sel || dataSelect([]);\n\n selection = selection.data(data, idFn);\n\n const enter = selection.enter().append(appendObj);\n const mergedSelection = enter.merge(selection);\n\n selection.exit() && selection.exit().remove();\n return mergedSelection;\n};\n\nconst getRowBorders = (left, right) => {\n const borders = {};\n borders.top = false;\n borders.bottom = false;\n if (left.length > 1 || right.length > 1) {\n borders.top = true;\n borders.bottom = true;\n }\n return borders;\n};\n\nconst getColumnsBorders = (top, bottom) => {\n const borders = {};\n borders.left = false;\n borders.right = false;\n if (top.length || bottom.length) {\n if ((top[0] && top[0].length > 1) || (bottom[0] && bottom[0].length > 1)) {\n borders.left = true;\n borders.right = true;\n }\n }\n return borders;\n};\n\nconst getValueBorders = (rows, columns) => {\n const borders = { top: true, left: true, bottom: true, right: true };\n const borderTypeRow = [LEFT, RIGHT];\n const borderTypeCol = [TOP, BOTTOM];\n rows.forEach((e, i) => {\n if (e[0] && e[0].length) {\n borders[borderTypeRow[i]] = true;\n } else {\n borders[borderTypeRow[i]] = false;\n }\n });\n columns.forEach((e, i) => {\n if (e.length) {\n borders[borderTypeCol[i]] = true;\n } else {\n borders[borderTypeCol[i]] = false;\n }\n });\n\n return borders;\n};\n\nexport const getBorders = (matrices, encoder) => {\n let showRowBorders = { top: false, bottom: false };\n let showColBorders = { left: false, right: false };\n let showValueBorders = { top: false, bottom: false, left: false, right: false };\n const {\n rows,\n columns,\n values: valueMatrix\n } = matrices;\n const [leftRows, rightRows] = rows;\n const [topColumns, bottomColumns] = columns;\n const {\n rowDimensions,\n columnDimensions,\n rowTemporalFields,\n columnTemporalFields,\n columnMeasures,\n rowMeasures\n } = encoder.fieldInfo();\n const allDimensionLength = rowDimensions.length + columnDimensions.length;\n const allMeasuresLength = rowMeasures.length + columnMeasures.length;\n const allTemporalFieldsLength = rowTemporalFields.length + columnTemporalFields.length;\n\n if (encoder.constructor.type() === POLAR) {\n if (!allDimensionLength) {\n return { showRowBorders, showColBorders, showValueBorders };\n }\n } else if (!allMeasuresLength && !allTemporalFieldsLength && allDimensionLength <= 2) {\n return { showRowBorders, showColBorders, showValueBorders };\n }\n\n showRowBorders = getRowBorders(leftRows, rightRows);\n showColBorders = getColumnsBorders(topColumns, bottomColumns);\n showValueBorders = getValueBorders([leftRows, rightRows], [topColumns, bottomColumns]);\n\n if (valueMatrix.length > 1) {\n showValueBorders.top = true;\n showValueBorders.bottom = true;\n }\n if (valueMatrix.length && valueMatrix[0].length > 1) {\n showValueBorders.left = true;\n showValueBorders.right = true;\n }\n return { showRowBorders, showColBorders, showValueBorders };\n};\n\nexport const getFieldsFromSuppliedLayers = (suppliedLayerConfig, fieldsConfig) => {\n let fields = [];\n const encodingArr = suppliedLayerConfig.map(conf => (conf.encoding || {}));\n fields = [...fields, [].concat(...encodingArr.map(enc => Object.values(enc).map(d => d.field)))];\n fields = fields.filter(field => fieldsConfig[field] && fieldsConfig[field].def.type === FieldType.DIMENSION);\n return fields;\n};\n\nexport const extractFields = (facetsAndProjections, layerFields) => {\n const fields = Object.values(facetsAndProjections).map((arr) => {\n const flattenArray = [].concat(...arr);\n return [].concat(...flattenArray.map((field) => {\n if (field instanceof Variable) {\n return field.getMembers();\n }\n return field;\n }));\n });\n return [].concat(...fields, ...layerFields);\n};\n","/**\n * This file exports variables that are used as defaults for the crosstab group.\n */\nexport const DATA_UPDATE_COUNTER = 0;\n\nexport const DEFAULT_LAYER_TYPE = 'cartesian';\n\n","import Selection from './selection';\n/**\n * This function applies a selection operation on a data array.\n *\n * @export\n * @param {Array} [data=[]] The data array to be observed.\n * @return {Selection} Instance of a selection.\n */\nexport default function dataSelect (data = []) {\n return new Selection(data);\n}\n\n","import { BEHAVIOURS, ACTIONS } from '@chartshq/muze-firebolt';\n\nexport const actionBehaviourMap = {\n [ACTIONS.DRAG]: {\n behaviours: [BEHAVIOURS.BRUSH],\n touch: false\n },\n [ACTIONS.HOVER]: {\n behaviours: [BEHAVIOURS.HIGHLIGHT]\n },\n [ACTIONS.LONGTOUCH]: {\n behaviours: [BEHAVIOURS.SELECT],\n touch: true\n },\n [ACTIONS.TOUCHDRAG]: {\n behaviours: [BEHAVIOURS.BRUSH],\n touch: true\n },\n [ACTIONS.CLICK]: {\n behaviours: [BEHAVIOURS.SELECT],\n touch: false\n }\n};\n\n","export const CONFIG = 'config';\nexport const DATA = 'data';\nexport const AXES = 'axes';\nexport const LAYERDEFS = 'layerDef';\nexport const WIDTH = 'width';\nexport const HEIGHT = 'height';\nexport const MOUNT = 'mount';\nexport const primaryXAxisUpdated = 'primaryXAxisUpdated';\nexport const primaryYAxisUpdated = 'primaryYAxisUpdated';\nexport const secondaryXAxisUpdated = 'secondaryXAxisUpdated';\nexport const secondaryYAxisUpdated = 'secondaryYAxisUpdated';\nexport const TRANSFORM = 'transform';\nexport const DATADOMAIN = 'dataDomain';\nexport const LAYERSCREATED = 'layersCreated';\nexport const FIELDS = 'fields';\nexport const TIMEDIFFS = 'timeDiffs';\nexport const LAYERAXISINDEX = 'layerAxisIndex';\n\n","import { FieldType, getDependencyOrder, getObjProp,\n defaultValue, objectIterator, unionDomain, makeElement,\n DimensionSubtype, getClosestIndexOf, toArray } from 'muze-utils';\nimport { layerFactory } from '@chartshq/visual-layer';\nimport { TIMEDIFFS } from '../enums/reactive-props';\n\nexport const getDimensionMeasureMap = (layers, fieldsConfig) => {\n const retinalEncodingsAndMeasures = {};\n\n layers.forEach((layer) => {\n const {\n colorField,\n sizeField,\n shapeField,\n xField,\n yField\n } = layer.encodingFieldsInf();\n const measures = [xField, yField].filter(field => fieldsConfig[field] && fieldsConfig[field].def.type ===\n FieldType.MEASURE);\n [colorField, sizeField, shapeField].forEach((field) => {\n if (fieldsConfig[field] && fieldsConfig[field].def.type === FieldType.DIMENSION) {\n !retinalEncodingsAndMeasures[field] && (retinalEncodingsAndMeasures[field] = []);\n retinalEncodingsAndMeasures[field].push(...measures);\n }\n });\n });\n\n for (const key in retinalEncodingsAndMeasures) {\n if ({}.hasOwnProperty.call(retinalEncodingsAndMeasures, key)) {\n retinalEncodingsAndMeasures[key] = [...new Set(retinalEncodingsAndMeasures[key])];\n }\n }\n return retinalEncodingsAndMeasures;\n};\n\nexport const transformDataModels = (transform, dataModel) => {\n const dataModels = {};\n for (const key in transform) {\n if ({}.hasOwnProperty.call(transform, key)) {\n const transformVal = transform[key];\n dataModels[key] = transformVal(dataModel);\n }\n }\n\n return dataModels;\n};\n\nexport const getLayerFromDef = (context, definition, existingLayer) => {\n let instances = existingLayer;\n const dependencies = context._layerDeps;\n if (!existingLayer) {\n instances = layerFactory.getLayerInstance(definition);\n }\n const layers = {};\n const instanceArr = toArray(instances);\n definition = toArray(definition);\n definition.reduce((acc, def, idx) => {\n const instance = instanceArr[idx];\n instance.config(def);\n instance.dependencies(dependencies);\n if (def.name) {\n instance.alias(def.name);\n }\n layers[instance.alias()] = instance;\n return acc;\n }, {});\n return layers;\n};\n\nexport const resolveEncodingTransform = (layerInst, store) => {\n const encodingTransform = layerInst.config().encodingTransform || {};\n const resolvable = encodingTransform.resolvable;\n let depArr = [];\n if (resolvable) {\n const resolved = resolvable(store);\n depArr = resolved.depArr;\n layerInst.encodingTransform(resolved.fn);\n } else if (encodingTransform instanceof Function) {\n layerInst.encodingTransform(encodingTransform);\n }\n return depArr;\n};\n\nexport const createLayers = (context, layerDefinitions) => {\n const layersMap = context._layersMap;\n const markSet = {};\n const store = {\n layers: {},\n components: {\n unit: context\n }\n };\n let layerIndex = 0;\n let layers = layerDefinitions.sort((a, b) => a.order - b.order).reduce((layersArr, layerDef, i) => {\n const mark = layerDef.mark;\n const definition = layerDef.def;\n const markId = `${mark}-${i}`;\n const defArr = toArray(definition);\n defArr.forEach((def) => {\n def.order = layerDef.order + layerIndex;\n });\n layerIndex += defArr.length;\n const instances = getLayerFromDef(context, definition, layersMap[markId]);\n store.layers = Object.assign(store.layers, instances);\n const instanceValues = Object.values(instances);\n layersArr = layersArr.concat(...instanceValues);\n layersMap[markId] = instanceValues;\n markSet[markId] = markId;\n return layersArr;\n }, []);\n store.unit = context;\n const layerdeps = {};\n layers.forEach((layer) => {\n const depArr = resolveEncodingTransform(layer, store);\n layerdeps[layer.alias()] = depArr;\n });\n\n const order = getDependencyOrder(layerdeps);\n layers = order.map(name => store.layers[name]);\n for (const key in layersMap) {\n if (!(key in markSet)) {\n layersMap[key].forEach(layer => layer.remove());\n delete layersMap[key];\n }\n }\n return layers;\n};\n\nexport const attachDataToLayers = (layers, dm, transformedDataModels) => {\n layers.forEach((layer) => {\n const dataSource = layer.config().source;\n const dataModel = dataSource instanceof Function ? dataSource(dm) : (transformedDataModels[dataSource] || dm);\n layer.data(dataModel);\n });\n};\n\nexport const attachAxisToLayers = (axes, layers, layerAxisIndex) => {\n layers.forEach((layer) => {\n const layerId = layer.id();\n const axesObj = {};\n\n objectIterator(axes, (key) => {\n const axisInf = layerAxisIndex[layerId];\n if (axisInf) {\n axes[key] && (axesObj[key] = axes[key][axisInf[key] || 0]);\n }\n });\n Object.keys(axesObj).length && layer.axes(axesObj);\n });\n};\n\nexport const getLayerAxisIndex = (layers, fields) => {\n const layerAxisIndex = {};\n layers.forEach((layer) => {\n const { axis, encoding } = layer.config();\n const id = layer.id();\n ['x', 'y'].forEach((type) => {\n let index;\n const field = defaultValue(getObjProp(axis, type), encoding[type] && encoding[type].field);\n if (fields[type]) {\n index = fields[type].findIndex(fieldInst => fieldInst.getMembers().indexOf(field) !== -1);\n } else {\n index = 0;\n }\n !layerAxisIndex[id] && (layerAxisIndex[id] = {});\n layerAxisIndex[id][type] = index;\n });\n });\n return layerAxisIndex;\n};\n\nexport const unionDomainFromLayers = (layers, axisFields, layerAxisIndex, fieldsConfig) => {\n let domains = {};\n layers = layers.filter(layer => layer.getDataDomain() !== null);\n layers.forEach((layer) => {\n let domainValues = {};\n const config = layer.config();\n const encoding = config.encoding;\n const layerDomain = layer.getDataDomain();\n const layerId = layer.id();\n\n if (layerDomain !== null && config.calculateDomain !== false) {\n domainValues = Object.entries(layerDomain);\n if (layerDomain.x || layerDomain.y) {\n domains = domainValues.reduce((fieldDomain, domain) => {\n const encodingType = domain[0];\n const field = encoding[encodingType].field;\n const axisIndex = layerAxisIndex[layerId][encodingType];\n const fieldStr = `${axisFields[encodingType][axisIndex]}`;\n fieldDomain[fieldStr] = fieldDomain[fieldStr] || [];\n fieldDomain[fieldStr] = unionDomain(([fieldDomain[fieldStr], domain[1]]),\n fieldsConfig[field].def.subtype ? fieldsConfig[field].def.subtype :\n fieldsConfig[field].def.type);\n\n return fieldDomain;\n }, domains);\n } else { domains = domainValues; }\n }\n });\n return domains;\n};\n\nexport const renderLayers = (context, container, layers, measurement) => {\n context._lifeCycleManager.notify({ client: layers, action: 'beforedraw', formalName: 'layer' });\n const config = context.config();\n const classPrefix = config.classPrefix;\n const orderedLayers = context.layers().sort((a, b) => a.config().order - b.config().order);\n const layerParentGroup = makeElement(container, 'g', [1], `${classPrefix}-layer-group`);\n makeElement(layerParentGroup, 'g', orderedLayers, null, {\n update: (group, layer) => {\n layer.measurement(measurement);\n layer.dataProps({\n timeDiffs: context.store().get(TIMEDIFFS)\n });\n layer.config().render !== false && layer.mount(group.node());\n }\n });\n return this;\n};\n\nexport const getNearestDimensionalValue = (context, position) => {\n const fields = context.fields();\n if (!fields.x.length || !fields.y.length) {\n return null;\n }\n const data = context.data();\n const axes = context.axes();\n const fieldsConfig = data.getFieldsConfig();\n const xField = getObjProp(fields, 'x', 0).getMembers()[0];\n const yField = getObjProp(fields, 'y', 0).getMembers()[0];\n const xFieldType = fieldsConfig[xField] && (fieldsConfig[xField].def.subtype ? fieldsConfig[xField].def.subtype :\n fieldsConfig[xField].def.type);\n const yFieldType = fieldsConfig[yField] && (fieldsConfig[yField].def.subtype ? fieldsConfig[yField].def.subtype :\n fieldsConfig[yField].def.type);\n\n const entryVal = [['x', xFieldType, xField], ['y', yFieldType, yField]].find(entry =>\n entry[1] === DimensionSubtype.CATEGORICAL || entry[1] === DimensionSubtype.TEMPORAL);\n\n if (!entryVal || (xFieldType !== FieldType.MEASURE && yFieldType !== FieldType.MEASURE)) {\n return null;\n }\n const field = entryVal[2];\n const index = fieldsConfig[field].index;\n let key = axes[entryVal[0]][0].invert(position[entryVal[0]]);\n if (entryVal[1] === DimensionSubtype.TEMPORAL) {\n const filterData = [...new Set(data.getData().data.map(d => d[index]))];\n key = filterData[getClosestIndexOf(filterData, key)];\n }\n\n return key !== undefined ? [[field], [key]] : null;\n};\n\nexport const getLayersBy = (layers, searchBy, value) => layers.filter((layer) => {\n const name = searchBy === 'type' ? layer.constructor.formalName() : layer.alias();\n return name === value;\n});\n\nexport const removeLayersBy = (layers, searchBy, value) => {\n layers.filter((inst) => {\n const name = searchBy === 'type' ? inst.config().mark : inst.alias();\n if (name === value) {\n inst.remove();\n return false;\n }\n return true;\n });\n};\n\nexport const createSideEffectGroup = (container, className) => makeElement(container, 'g', [1], className).node();\n\nexport const getAdjustedDomain = (max, min) => {\n const y1ratio = max[0] / (max[0] - min[0]);\n const y2ratio = max[1] / (max[1] - min[1]);\n\n // adjust min/max values for positive negative values zero line etc\n let allSameSign = false;\n\n // if all numbers are positive set floor to zero\n if (min[0] > 0 && min[1] > 0 && min[1] > 0 && max[1] > 0) {\n allSameSign = true;\n min[0] = 0;\n min[1] = 0;\n }\n\n // if all numbers are negative set ceiling to zero\n if (min[0] < 0 && min[1] < 0 && min[1] < 0 && max[1] < 0) {\n allSameSign = true;\n max[0] = 0;\n max[1] = 0;\n }\n\n // align zero line if necessary\n if (!allSameSign && y1ratio !== y2ratio) {\n if (y1ratio < y2ratio) {\n // adjust min[1]\n min[1] = min[0] / max[0] * max[1];\n } else {\n // adjust min[0]\n min[0] = min[1] / max[1] * max[0];\n }\n }\n return {\n max,\n min\n };\n};\n","import { getObjProp, defaultValue, makeElement, DimensionSubtype, DataModel } from 'muze-utils';\nimport { ScaleType } from '@chartshq/muze-axis';\nimport { layerFactory } from '@chartshq/visual-layer';\nimport { GRIDLINEPARENTGROUPCLASS, GRIDBANDPARENTGROUPCLASS } from '../enums/constants';\nimport { TIMEDIFFS } from '../enums/reactive-props';\n\nconst LINEAR = ScaleType.LINEAR;\n\nconst getLayerDefinition = (context, axes, type, orientation) => {\n let encoding;\n const config = context.config();\n const { classPrefix, gridLines, gridBands } = config;\n const gridLineColor = gridLines.color;\n const zeroLineColor = gridLines.zeroLineColor;\n const defClassName = type === 'band' ? gridBands.defClassName : gridLines.defClassName;\n const gridBandColor = gridBands[orientation].color;\n const axis = axes[orientation][0];\n const isLinearScale = axis.constructor.type() === LINEAR;\n\n if (type === 'band' && isLinearScale) {\n encoding = {\n [orientation]: `${orientation}value`,\n [`${orientation}0`]: `${orientation}value0`\n };\n } else {\n encoding = {\n [orientation]: isLinearScale ? `${orientation}value` : `${orientation}dim`\n };\n }\n encoding.color = {\n value: (data, i) => {\n const isNegativeDomain = isLinearScale && axis.domain()[0] < 0;\n if (type === 'band') {\n return gridBandColor[i % 2];\n }\n return isNegativeDomain && data[orientation] === 0 ? zeroLineColor : gridLineColor;\n }\n };\n\n return {\n definition: {\n defClassName: `${defClassName}-${orientation}`,\n className: config.className,\n individualClassName: (data, i) => {\n let className;\n const isNegativeDomain = isLinearScale && axis.domain()[0] < 0;\n if (isNegativeDomain && data.y === 0 && type !== 'band') {\n className = `${classPrefix}-axis-zero-line`;\n } else {\n className = `${classPrefix}-grid-${type}-${orientation}-${i % 2}`;\n }\n return className;\n },\n [`pad${orientation.toUpperCase()}`]: type === 'band' ? 0 : undefined,\n encoding\n },\n axes: {\n [orientation]: axis\n },\n interactive: false\n };\n};\n\nconst getDefaultVisibilty = (show, axis) => {\n if (axis.constructor.type() === LINEAR) {\n return show;\n }\n return false;\n};\n\nexport const getGridLayerDefinitions = (context, config, type) => ['x', 'y'].map((axisType) => {\n const show = defaultValue(config[axisType] && config[axisType].show,\n getDefaultVisibilty(config.show, context.axes()[axisType][0]));\n\n return show ? getLayerDefinition(context, context.axes(), type, axisType) : undefined;\n}).filter(d => d !== undefined);\n\nexport const getGridLayerData = (axes, fields, fieldsConfig) => {\n const gridData = {};\n ['x', 'y'].forEach((type) => {\n let ticks = axes[type][0].getTickValues();\n const subtype = getObjProp(fieldsConfig, getObjProp(fields, type, 0).getMembers()[0], 'def', 'subtype');\n const jsonData = [];\n const schema = [\n {\n name: 'yvalue',\n type: 'measure'\n }, {\n name: 'xvalue',\n type: 'measure'\n },\n {\n name: 'yvalue0',\n type: 'measure'\n }, {\n name: 'xvalue0',\n type: 'measure'\n }, {\n name: 'xdim',\n type: 'dimension',\n subtype\n }, {\n name: 'ydim',\n type: 'dimension',\n subtype\n }\n ];\n const len = Math.max(ticks.length);\n ticks = subtype === DimensionSubtype.TEMPORAL ? ticks.map(d => d.getTime()) : ticks;\n for (let i = 0; i < len; i += 1) {\n jsonData.push({\n [`${type}value`]: ticks[i],\n [`${type}value0`]: ticks[i + 1],\n [`${type}dim`]: ticks[i],\n [`${type}dim`]: ticks[i]\n });\n }\n gridData[type] = new DataModel(jsonData, schema);\n });\n return gridData;\n};\n\nexport const createGridLineLayer = (context, data) => {\n const vuConf = context.config();\n const dependencies = context._layerDeps;\n const measurement = {\n width: context.width(),\n height: context.height()\n };\n\n ['band', 'line'].forEach((type) => {\n let mark;\n let config;\n let instances;\n if (type === 'band') {\n mark = 'bar';\n config = vuConf.gridBands;\n instances = context._gridbands;\n } else {\n mark = 'tick';\n config = vuConf.gridLines;\n instances = context._gridlines;\n }\n const definitions = getGridLayerDefinitions(context, config, type);\n\n definitions.forEach((atomicDef, i) => {\n let layer;\n const definition = atomicDef.definition;\n const axesObj = atomicDef.axes;\n const sConf = layerFactory.getSerializedConf(mark, definition);\n sConf.mark = mark;\n if (!instances[i]) {\n layer = layerFactory.getLayerInstance(sConf);\n layer.dependencies(dependencies);\n } else {\n layer = instances[i];\n }\n\n layer.config(sConf)\n .measurement(measurement)\n .data(axesObj.y ? data.y : data.x)\n .dataProps({\n timeDiffs: context.store().get(TIMEDIFFS)\n })\n .axes(axesObj);\n instances[i] = layer;\n });\n });\n};\n\nexport const renderGridLineLayers = (context, container) => {\n const axes = context.axes();\n const config = context.config();\n const classPrefix = config.classPrefix;\n\n if (axes && ((axes.x && axes.x.length) || (axes.y && axes.y.length))) {\n const gridBandData = getGridLayerData(axes, context.fields(), context.data().getFieldsConfig());\n createGridLineLayer(context, gridBandData);\n [[context._gridlines, `${classPrefix}-${GRIDLINEPARENTGROUPCLASS}`],\n [context._gridbands, `${classPrefix}-${GRIDBANDPARENTGROUPCLASS}`]].forEach((entry) => {\n const [instances, parentGroupClass] = entry;\n const mountPoint = makeElement(container, 'g', [1], `.${parentGroupClass}`);\n const className = `${parentGroupClass}-group`;\n makeElement(mountPoint, 'g', instances, `.${className}`, {\n update: (group, instance) => {\n instance.mount(group.node());\n }\n });\n });\n }\n};\n","import { CLASSPREFIX, CONSOLIDATED } from './enums/constants';\n\n/**\n * Returns the default configuration of the visual unit\n * @return {Object} Default configuration of visual unit\n */\nexport const defaultConfig = {\n classPrefix: CLASSPREFIX,\n defClassName: 'visual-unit',\n className: '',\n trackerClassName: 'visual-unit-tracker',\n gridLines: {\n defClassName: 'axis-grid-lines',\n className: '',\n show: true,\n color: '#efefef',\n zeroLineColor: '#b6b6b6'\n },\n gridBands: {\n defClassName: 'axis-grid-bands',\n className: '',\n show: false,\n y: {\n color: ['#fff', '#fbfbfb']\n },\n x: {\n color: ['#fff', '#f9f9f9']\n }\n },\n arcLayerClassName: 'layer-arc',\n interaction: {\n tooltip: {\n mode: CONSOLIDATED\n }\n },\n sideEffectClassName: 'side-effect-container'\n};\n","export const CLASSPREFIX = 'muze';\nexport const IDFIELD = '__id__';\nexport const GRIDLINEPARENTGROUPCLASS = 'grid-lines';\nexport const GRIDBANDPARENTGROUPCLASS = 'grid-bands';\nexport const CONSOLIDATED = 'consolidated';\nexport const FRAGMENTED = 'fragmented';\nexport const FACET_BY_FIELDS = 'facetByFields';\nexport const RETINAL_FIELDS = 'retinalFields';\nexport const PARENT_ALIAS = 'parentAlias';\nexport const LAYERS = 'layers';\nexport const CACHED_DATA = 'cachedData';\nexport const STORE = 'store';\n\n","import { mergeRecursive } from 'muze-utils';\nimport { defaultConfig } from './default-config';\nimport { CONFIG, LAYERDEFS, AXES, WIDTH, HEIGHT, MOUNT, TRANSFORM, FIELDS, DATA } from './enums/reactive-props';\n\nexport default {\n [CONFIG]: {\n value: null,\n meta: {\n sanitization: (config, oldConfig) => (\n mergeRecursive(oldConfig || mergeRecursive({}, defaultConfig), config)\n )\n }\n },\n [LAYERDEFS]: {\n value: null\n },\n [AXES]: {\n value: null,\n meta: {\n sanitization: (axes, prevAxes) => Object.assign(prevAxes || {}, axes)\n }\n },\n [WIDTH]: {\n value: null\n },\n [HEIGHT]: {\n value: null\n },\n [MOUNT]: {\n value: null\n },\n [TRANSFORM]: {\n value: null\n },\n [FIELDS]: {\n value: null\n },\n [DATA]: {\n value: null,\n meta: {\n preset: (data, context) => {\n if (context._cache) {\n const cachedData = context.cachedData();\n context.cachedData([...cachedData, data]);\n } else {\n const oldData = context.data();\n oldData && oldData.unsubscribe('propagation');\n context.cachedData([data]);\n }\n }\n }\n }\n};\n","import { DimensionSubtype } from 'muze-utils';\nimport * as PROPS from './enums/reactive-props';\nimport {\n transformDataModels,\n getDimensionMeasureMap,\n createLayers,\n attachDataToLayers,\n attachAxisToLayers,\n unionDomainFromLayers,\n getLayerAxisIndex\n} from './helper';\n\nconst axisMap = {\n 0: 'primary',\n 1: 'secondary'\n};\nconst axisProps = [PROPS.primaryXAxisUpdated, PROPS.secondaryXAxisUpdated, PROPS.primaryYAxisUpdated,\n PROPS.secondaryYAxisUpdated];\n\nexport const listenerMap = context => ([\n {\n type: 'registerImmediateListener',\n props: [PROPS.AXES],\n listener: ([, axes]) => {\n ['x', 'y'].forEach((type) => {\n const axesArr = axes[type] || [];\n axesArr.forEach((axis, i) => {\n axis.on('update', () => {\n context.store().commit(PROPS[`${axisMap[i]}${axis.isReverse() ? 'Y' : 'X'}AxisUpdated`], true);\n });\n });\n });\n }\n },\n {\n type: 'registerImmediateListener',\n props: [PROPS.CONFIG],\n listener: ([, config]) => {\n config && context.firebolt().config(config.interaction);\n }\n },\n {\n type: 'computed',\n props: [PROPS.LAYERSCREATED],\n listener: fetch => fetch(PROPS.LAYERDEFS, PROPS.FIELDS, (layerDefs, fields) => {\n const layerDefsValue = layerDefs.value;\n const fieldsVal = fields.value;\n if (layerDefsValue && fieldsVal) {\n const layers = createLayers(context, layerDefs.value);\n context.layers(layers);\n context._layerAxisIndex = getLayerAxisIndex(context.layers(), fieldsVal);\n context._lifeCycleManager.notify({ client: layers, action: 'initialized', formalName: 'layer' });\n return true;\n }\n return null;\n })\n },\n {\n type: 'computed',\n props: [PROPS.TIMEDIFFS],\n listener: fetch => fetch(PROPS.DATA, PROPS.FIELDS, PROPS.AXES, (data, fields, axes) => {\n const dataModel = data.value;\n const axisFields = fields.value;\n const axesObj = axes.value;\n if (dataModel && axisFields && axesObj) {\n const timeDiffs = {};\n const timeDiffsByField = {};\n ['x', 'y'].forEach((type) => {\n const field = axisFields[type][0];\n if (field && field.subtype() === DimensionSubtype.TEMPORAL) {\n timeDiffs[type] = field.getMinDiff();\n timeDiffsByField[field] = timeDiffs[type];\n axesObj[type].forEach(axis => axis.minDiff(timeDiffs[type]));\n }\n });\n context._timeDiffsByField = timeDiffsByField;\n return timeDiffs;\n }\n return null;\n })\n },\n {\n type: 'computed',\n props: [PROPS.DATADOMAIN],\n listener: fetch => fetch(PROPS.DATA, PROPS.LAYERSCREATED, PROPS.AXES, PROPS.TRANSFORM,\n (dataModel, layersCreated, axes, transform) => {\n const dataModelVal = dataModel.value;\n const layerAxisIndexVal = context._layerAxisIndex;\n const axesVal = axes.value;\n if (dataModelVal && layersCreated.value && axesVal && layerAxisIndexVal) {\n const layers = context.layers();\n const dataModels = transformDataModels(transform.value, dataModelVal);\n context._transformedDataModels = dataModels;\n context._lifeCycleManager.notify({ client: layers, action: 'beforeupdate', formalName: 'layer' });\n attachDataToLayers(layers, dataModelVal, context._transformedDataModels);\n context._dimensionMeasureMap = getDimensionMeasureMap(layers,\n dataModelVal.getFieldsConfig(), context.retinalFields());\n attachAxisToLayers(axesVal, layers, layerAxisIndexVal);\n context._lifeCycleManager.notify({ client: layers, action: 'updated', formalName: 'layer' });\n return unionDomainFromLayers(layers, context.fields(),\n layerAxisIndexVal, dataModelVal.getFieldsConfig());\n }\n return null;\n })\n },\n {\n type: 'registerImmediateListener',\n props: [PROPS.DATADOMAIN],\n listener: ([, dataDomain]) => {\n dataDomain !== null && context.updateAxisDomain(dataDomain);\n }\n },\n {\n type: 'registerChangeListener',\n props: [PROPS.MOUNT, PROPS.DATA, ...axisProps],\n listener: (mount, data) => {\n const container = mount[1];\n if (container && data[1]) {\n context.render(container);\n }\n }\n }\n]);\n","import { FACET_BY_FIELDS, RETINAL_FIELDS, PARENT_ALIAS, LAYERS, STORE, CACHED_DATA } from './enums/constants';\n\nexport const PROPS = {\n [FACET_BY_FIELDS]: {},\n [RETINAL_FIELDS]: {},\n [PARENT_ALIAS]: {},\n [LAYERS]: {},\n [STORE]: {},\n [CACHED_DATA]: {},\n detailFields: {}\n};\n","import { CommonProps } from 'muze-utils';\nimport { DATA, MOUNT } from '../enums/reactive-props';\n\nexport const clearActionHistory = (context) => {\n const actionHistory = context._actionHistory;\n for (const key in actionHistory) {\n if (actionHistory[key].isMutableAction) {\n delete context._actionHistory[key];\n }\n }\n};\n\nexport const dispatchQueuedSideEffects = (context) => {\n const queuedSideEffects = context._queuedSideEffects;\n Object.entries(queuedSideEffects).forEach((entry) => {\n const sideEffect = entry[1];\n context.dispatchSideEffect(sideEffect.name, ...sideEffect.params);\n });\n context._queuedSideEffects = {};\n};\n\nexport const registerListeners = (firebolt) => {\n const context = firebolt.context;\n const store = context.store();\n\n store.registerImmediateListener([DATA, MOUNT], (dataModel, mount) => {\n const dm = dataModel[1];\n\n if (dm && mount[1]) {\n const originalData = firebolt.context.cachedData()[0];\n firebolt.createSelectionSet(firebolt.context.data().getData().uids);\n firebolt.attachPropagationListener(originalData);\n }\n }, true);\n\n context._layerDeps.throwback.registerChangeListener([CommonProps.ON_LAYER_DRAW],\n ([, onlayerdraw]) => {\n if (onlayerdraw) {\n firebolt.initializeSideEffects();\n firebolt.config(context.config().interaction);\n firebolt.mapActionsAndBehaviour();\n dispatchQueuedSideEffects(firebolt);\n clearActionHistory(firebolt);\n }\n });\n};\n\n","import { DimensionSubtype } from 'muze-utils';\n\nconst getRangeFromData = (instance, selectionDataModel, propConfig) => {\n let criteria;\n const dataObj = selectionDataModel[0].getData();\n const propCriteria = propConfig.payload.criteria;\n const sourceIdentifiers = propConfig.sourceIdentifiers;\n const schema = dataObj.schema;\n const fieldMap = instance.data().getFieldsConfig();\n const data = dataObj.data;\n const isActionSourceSame = instance.id() === propConfig.sourceId;\n\n if (isActionSourceSame) {\n criteria = propCriteria;\n } else {\n criteria = (sourceIdentifiers !== null) ? schema.reduce((acc, obj, index) => {\n let range;\n const field = obj.name;\n const fieldObj = fieldMap[field];\n const type = fieldObj && (fieldObj.def.subtype ? fieldObj.def.subtype : fieldObj.def.type);\n const isDimension = type === DimensionSubtype.CATEGORICAL;\n\n if (!fieldObj) {\n return acc;\n }\n\n if (!isDimension) {\n range = [Math.min(...data.map(d => d[index])), Math.max(...data.map(d => d[index]))];\n } else {\n range = data.map(d => d[index]);\n }\n acc[field] = range;\n return acc;\n }, {}) : null;\n }\n return criteria;\n};\n\nexport const payloadGenerator = {\n brush: (instance, selectionDataModel, propConfig) => {\n const propPayload = propConfig.payload;\n const criteria = getRangeFromData(instance, selectionDataModel, propConfig);\n const payload = Object.assign({}, propPayload);\n payload.criteria = criteria;\n return payload;\n },\n\n __default: (instance, selectionDataModel, propConfig) => {\n const propPayload = propConfig.payload;\n const sourceIdentifiers = propConfig.sourceIdentifiers;\n const dataObj = selectionDataModel[0].getData();\n let schema = dataObj.schema;\n const payload = Object.assign({}, propPayload);\n schema = dataObj.schema;\n const data = dataObj.data;\n const sourceFields = schema.map(d => d.name);\n payload.criteria = !sourceIdentifiers && selectionDataModel[0].isEmpty() ? null :\n [sourceFields, ...data];\n payload.sourceFields = sourceIdentifiers ? sourceIdentifiers.getSchema().map(d => d.name) : [];\n return payload;\n }\n};\n\n","import { isSimpleObject, FieldType, DataModel } from 'muze-utils';\n\nconst getModelWithFacetData = (dm, data) => {\n const dataObj = dm.getData();\n const schema1 = dataObj.schema;\n const data1 = dataObj.data;\n const jsonData = [];\n const schema2 = data[0].map(d => ({\n name: `${d}`,\n type: FieldType.DIMENSION\n }));\n const data2 = data[1];\n\n data1.forEach((d) => {\n const tuple = {};\n schema1.forEach((obj, i) => {\n tuple[obj.name] = d[i];\n });\n schema2.forEach((obj, i) => {\n tuple[obj.name] = data2[i];\n });\n jsonData.push(tuple);\n });\n\n return new DataModel(jsonData, [...schema1, ...schema2]);\n};\n\nexport const propagateValues = (instance, action, config = {}) => {\n let propagationData;\n const payload = config.payload;\n const selectionSet = config.selectionSet;\n const propagationFieldInf = config.propagationFields[action] || {};\n const propagationFields = propagationFieldInf.fields || [];\n const append = propagationFieldInf.append;\n const criteria = payload.criteria;\n const context = instance.context;\n const dataModel = context.cachedData()[0];\n const sourceId = context.id();\n const sideEfffects = instance.sideEffects();\n const behaviourEffectMap = instance._behaviourEffectMap;\n const mergedModel = selectionSet.mergedEnter.model;\n const fieldsConfig = dataModel.getFieldsConfig();\n payload.sourceUnit = sourceId;\n payload.action = action;\n payload.sourceCanvas = context.parentAlias();\n const propagationBehaviourMap = instance._propagationBehaviourMap;\n const propagationBehaviour = propagationBehaviourMap[action] || action;\n\n let propFields = [];\n if (criteria === null) {\n propagationData = null;\n } else if (isSimpleObject(criteria)) {\n propFields = Object.keys(criteria || {});\n propagationData = mergedModel ? mergedModel.project(propFields) : null;\n } else {\n propFields = criteria[0];\n propagationData = mergedModel ? mergedModel.project(propFields) : null;\n }\n\n const facetByFields = context.facetByFields();\n if (propagationData !== null && propagationFields.length) {\n const fields = propagationData.getData().schema.map(d => d.name);\n propagationData = getModelWithFacetData(propagationData, facetByFields);\n propFields = append ? [...fields, ...propagationFields] : propagationFields;\n propagationData = propagationData.project(propFields);\n }\n\n let propagateInterpolatedValues = false;\n if (propFields.length && propFields.every(field => fieldsConfig[field] &&\n fieldsConfig[field].def.type === FieldType.MEASURE)) {\n propagateInterpolatedValues = true;\n }\n\n const groupId = context.parentAlias();\n payload.action = action;\n const behaviourInstance = instance._actions.behavioural[propagationBehaviour];\n const isMutableAction = behaviourInstance ? behaviourInstance.constructor.mutates() : false;\n\n const filterFn = (entry, propagationConf) => {\n const effects = behaviourEffectMap[entry.config.action];\n const mutates = entry.config.groupId ?\n effects.some(d => sideEfffects[d.name || d].constructor.mutates()) : true;\n return entry.config.groupId !== propagationConf.groupId && mutates;\n };\n\n const sourceBehaviour = instance._actions.behavioural[action];\n const mutates = sourceBehaviour ? sourceBehaviour.constructor.mutates() : false;\n let propConfig = {\n payload,\n action,\n criteria: propagationData,\n isMutableAction: mutates,\n propagateInterpolatedValues,\n groupId,\n sourceId: mutates ? groupId : sourceId,\n filterFn,\n enabled: (propConf, firebolt) => (action !== propagationBehaviour ?\n propConf.payload.sourceCanvas === firebolt.context.parentAlias() : true)\n };\n\n dataModel.propagate(propagationData, propConfig, true);\n\n if (action !== propagationBehaviour) {\n propConfig = {\n payload,\n sourceId: isMutableAction ? groupId : sourceId,\n criteria: propagationData,\n isMutableAction,\n propagateInterpolatedValues,\n action: propagationBehaviour,\n groupId,\n applyOnSource: action === propagationBehaviour,\n enabled: (propConf, firebolt) => propConf.payload.sourceCanvas !== firebolt.context.parentAlias(),\n filterFn\n };\n\n dataModel.propagate(propagationData, propConfig, true, {\n filterImmutableAction: (actionInf, propInf) => actionInf.groupId !== propInf.groupId\n });\n }\n};\n","import { FieldType } from 'muze-utils';\nimport { Firebolt, SpawnableSideEffect } from '@chartshq/muze-firebolt';\nimport { registerListeners } from './helper';\nimport { payloadGenerator } from './payload-generator';\nimport { propagateValues } from './data-propagator';\n\n/**\n * This class manages the interactions of visual unit. It associates physical actions with\n * behavioural actions. It also propagates the behavioural actions to other datamodels.\n */\nexport default class UnitFireBolt extends Firebolt {\n constructor (...params) {\n super(...params);\n registerListeners(this);\n }\n\n propagate (behaviour, payload, selectionSet, sideEffects) {\n propagateValues(this, behaviour, {\n payload,\n selectionSet,\n sideEffects,\n propagationFields: this._propagationFields\n });\n }\n\n getApplicableSideEffects (sideEffects, payload, propagationInf) {\n const context = this.context;\n const unitId = context.id();\n const aliasName = context.parentAlias();\n const propagationSourceCanvas = propagationInf.propPayload && propagationInf.propPayload.sourceCanvas;\n const sourceUnitId = propagationInf.propPayload && propagationInf.propPayload.sourceUnit;\n const sourceSideEffects = this._sourceSideEffects;\n const sideEffectInstances = this.sideEffects();\n const actionOnSource = sourceUnitId ? sourceUnitId === unitId : true;\n\n const applicableSideEffects = payload.sideEffects ? [{\n effects: payload.sideEffects,\n behaviours: [payload.action]\n }] : sideEffects;\n applicableSideEffects.forEach((d) => {\n let mappedEffects = d.effects;\n mappedEffects = mappedEffects.filter((se) => {\n const mutates = sideEffectInstances[se.name || se].constructor.mutates();\n if (mutates && propagationInf.isMutableAction === false) {\n return false;\n }\n if (!actionOnSource && payload.criteria !== null) {\n const sideEffectChecker = sourceSideEffects[se.name || se];\n return sideEffectChecker ? sideEffectChecker(propagationInf.propPayload, context) : true;\n }\n if (propagationSourceCanvas === aliasName || actionOnSource) {\n return se.applyOnSource !== false;\n }\n\n return true;\n });\n d.effects = mappedEffects;\n });\n return applicableSideEffects;\n }\n\n shouldApplySideEffects (propagate) {\n return propagate === false;\n }\n\n onDataModelPropagation () {\n return (data, config) => {\n let isSourceFieldPresent = true;\n let isMutableAction = false;\n const propPayload = config.payload;\n const sourceIdentifiers = config.sourceIdentifiers;\n const enabledFn = config.enabled;\n const action = config.action;\n const payloadFn = payloadGenerator[action] || payloadGenerator.__default;\n\n if (sourceIdentifiers) {\n const fieldsConfig = sourceIdentifiers.getFieldsConfig();\n const sourceIdentifierFields = Object.keys(fieldsConfig);\n const propFields = Object.keys(data[0].getFieldsConfig());\n if (!Object.values(fieldsConfig).some(d => d.def.type === FieldType.MEASURE)) {\n isSourceFieldPresent = sourceIdentifierFields.some(d => propFields.indexOf(d) !== -1);\n }\n }\n\n const payload = payloadFn(this.context, data, config);\n const sourceBehaviours = this._sourceBehaviours;\n const filterFn = sourceBehaviours[action] || sourceBehaviours['*'];\n let enabled = true;\n\n if (filterFn) {\n enabled = filterFn(propPayload || {}, this.context);\n }\n\n if (enabledFn) {\n enabled = enabledFn(config, this) && enabled !== false;\n }\n\n if (enabled) {\n const effects = this._behaviourEffectMap[action];\n const sideEffectInstances = this.sideEffects();\n isMutableAction = config.groupId ?\n effects.some(d => sideEffectInstances[d.name || d].constructor.mutates()) : config.isMutableAction;\n\n const propagationInf = {\n propagate: false,\n data,\n propPayload,\n sourceIdentifiers,\n persistent: false,\n isSourceFieldPresent,\n sourceId: config.propagationSourceId,\n isMutableAction: config.isMutableAction\n };\n\n this._actionHistory[action] = {\n payload,\n propagationInf,\n isMutableAction\n };\n this.dispatchBehaviour(action, payload, propagationInf);\n }\n };\n }\n\n initializeSideEffects () {\n super.initializeSideEffects();\n const sideEffects = this.sideEffects();\n for (const key in sideEffects) {\n if ({}.hasOwnProperty.call(sideEffects, key)) {\n sideEffects[key] instanceof SpawnableSideEffect && sideEffects[key].drawingContext(() => {\n const context = this.context;\n return context.getDrawingContext();\n });\n }\n }\n }\n\n prepareSelectionSets (behaviours) {\n const data = this.context.data();\n if (data) {\n this.createSelectionSet(data.getData().uids, behaviours);\n }\n return this;\n }\n\n remove () {\n this.context.cachedData()[0].unsubscribe('propagation');\n return this;\n }\n}\n","import { layerFactory } from '@chartshq/visual-layer';\nimport {\n setAttrs,\n CommonProps,\n getUniqueId,\n getQualifiedClassName,\n selectElement,\n transactor,\n Store,\n makeElement,\n registerListeners,\n generateGetterSetters,\n getDataModelFromIdentifiers,\n isSimpleObject,\n transposeArray,\n FieldType\n} from 'muze-utils';\nimport { physicalActions, sideEffects, behaviouralActions, behaviourEffectMap } from '@chartshq/muze-firebolt';\nimport { actionBehaviourMap } from './firebolt/action-behaviour-map';\nimport {\n renderLayers,\n getNearestDimensionalValue,\n removeLayersBy,\n getLayersBy,\n getLayerFromDef,\n attachAxisToLayers,\n getLayerAxisIndex,\n createSideEffectGroup,\n getAdjustedDomain,\n resolveEncodingTransform\n} from './helper';\nimport { renderGridLineLayers } from './helper/grid-lines';\nimport localOptions from './local-options';\nimport { listenerMap } from './listener-map';\nimport {\n primaryYAxisUpdated,\n primaryXAxisUpdated,\n secondaryXAxisUpdated,\n secondaryYAxisUpdated,\n DATADOMAIN,\n TIMEDIFFS\n} from './enums/reactive-props';\nimport { PROPS } from './props';\nimport UnitFireBolt from './firebolt';\nimport './styles.scss';\n\nconst FORMAL_NAME = 'unit';\n\n/**\n * @module VisualUnit\n * A hierarchical component of renderer which manages multiple layers. This logical\n * module is responsible for layouting layers, attach axis with them, resolving conflicts of layers.\n */\n\n/**\n * Basic unit implementaiton\n * @class VisualUnit\n */\nexport default class VisualUnit {\n\n /**\n * Creates instance of visualization unit\n * @param registry {Object} Component registry\n * @param dependencies {Object} Dependencies required by visual unit.\n */\n constructor (registry, dependencies) {\n this._id = getUniqueId();\n this._dependencies = dependencies;\n this._layerDeps = {\n throwback: new Store({\n onlayerdraw: false\n }),\n smartLabel: dependencies.smartLabel\n };\n this._renderedResolve = null;\n this._renderedPromise = new Promise((resolve) => {\n this._renderedResolve = resolve;\n });\n this._layerDeps.throwback.registerChangeListener([CommonProps.ON_LAYER_DRAW], () => {\n this._renderedResolve();\n this._lifeCycleManager.notify({ client: this.layers(), action: 'drawn', formalName: 'layer' });\n });\n\n this._lifeCycleManager = dependencies.lifeCycleManager;\n this._layersMap = {};\n this._gridlines = [];\n this._gridbands = [];\n this._layerAxisIndex = {};\n this._transformedDataModels = {};\n\n layerFactory.setLayerRegistry(registry.layerRegistry);\n generateGetterSetters(this, PROPS);\n this.cachedData([]);\n this.store(new Store({\n [primaryXAxisUpdated]: null,\n [primaryYAxisUpdated]: null,\n [secondaryXAxisUpdated]: null,\n [secondaryYAxisUpdated]: null\n }));\n transactor(this, localOptions, this.store().model);\n this.firebolt(new UnitFireBolt(this, {\n physical: physicalActions,\n behavioural: behaviouralActions,\n physicalBehaviouralMap: actionBehaviourMap\n }, sideEffects, behaviourEffectMap));\n registerListeners(this, listenerMap);\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof VisualUnit\n */\n static formalName () {\n return FORMAL_NAME;\n }\n\n /**\n * Static helper for creates a unit instance\n *\n * @param {Object} [id] optional unique identifier for a unit; , id is calculated internally\n * @param {DataModel} data instance of datamodel\n * @param {Array.} layers layer configuration\n * @param {Object} config configurtion for the visual unit\n * @return {VisualUnit} Instance of a unit\n */\n static create (...params) {\n return new this(...params);\n }\n\n /**\n *\n *\n * @readonly\n * @memberof VisualUnit\n */\n firebolt (...firebolt) {\n if (firebolt.length) {\n this._firebolt = firebolt[0];\n return this;\n }\n return this._firebolt;\n }\n\n /**\n * Gets the domain for all axes of this visual unit.\n * @return {Object} Domains of each data field.\n */\n getDataDomain () {\n return this.store().get(DATADOMAIN);\n }\n\n /**\n * Retrieves the id created for this instance of visual unit\n * @return {string} id associated with the instance\n */\n id () {\n return this._id;\n }\n\n /**\n *\n *\n * @returns\n * @memberof VisualUnit\n */\n lockModel () {\n this._store.model.lock();\n return this;\n }\n\n /**\n *\n *\n * @returns\n * @memberof VisualUnit\n */\n unlockModel () {\n this._store.model.unlock();\n return this;\n }\n\n timeDiffsByField (...params) {\n if (params.length) {\n return this;\n }\n return this._timeDiffsByField;\n }\n\n /**\n * Renders the visual unit. It creates the layout and renders the axes and layers.\n * @return {VisualUnit} Instance of visual unit.\n */\n render (container) {\n const config = this.config();\n const { className, defClassName, sideEffectClassName, classPrefix } = config;\n const qualifiedClassName = getQualifiedClassName(defClassName, this.id(), config.classPrefix);\n const width = this.width();\n const height = this.height();\n const containerSelection = selectElement(container).style('position', 'relative');\n\n this._rootSvg = makeElement(containerSelection, 'svg', [null], className)\n .style('width', `${width}px`).style('height', `${height}px`);\n\n const node = this._rootSvg.node();\n setAttrs(node, {\n width,\n height,\n class: qualifiedClassName.join(' ')\n });\n renderGridLineLayers(this, node);\n renderLayers(this, node, this.layers(), {\n width,\n height\n });\n this._sideEffectGroup = createSideEffectGroup(node, `${classPrefix}-${sideEffectClassName}`);\n return this;\n }\n\n done () {\n return this._renderedPromise;\n }\n /**\n *\n *\n * @returns\n * @memberof VisualUnit\n */\n enableCaching () {\n this._cache = true;\n return this;\n }\n\n /**\n *\n *\n * @returns\n * @memberof VisualUnit\n */\n clearCaching () {\n this._cache = false;\n this.cachedData([this.cachedData()[0]]);\n return this;\n }\n\n /**\n *\n *\n * @returns\n * @memberof VisualUnit\n */\n getDrawingContext () {\n const rootSvg = this._rootSvg && this._rootSvg.node();\n const width = this.width();\n const height = this.height();\n return {\n htmlContainer: this.mount(),\n svgContainer: rootSvg,\n width,\n height,\n sideEffectGroup: this._sideEffectGroup,\n parentContainer: this.parentContainer(),\n xOffset: 0,\n yOffset: 0\n };\n }\n\n /**\n * Returns the serialized configuration of visual unit.\n * @return {Object} serialized configuration\n */\n serialize () {\n return {\n layers: this.layers().map(layer => layer.serialize()),\n config: this.config(),\n axes: this.store().get('axes').map(axis => axis.serialize())\n };\n }\n\n /**\n *\n *\n * @param {*} layerDef\n * @returns\n * @memberof VisualUnit\n */\n addLayer (layerDef) {\n const layerName = layerDef.name;\n const layer = this.getLayerByName(layerName);\n const measurement = {\n width: this.width(),\n height: this.height()\n };\n\n if (layer) {\n return [layer];\n }\n const serializedDef = layerFactory.getSerializedConf(layerDef.mark, layerDef);\n const instances = Object.values(getLayerFromDef(this, serializedDef));\n this.layers().push(...instances);\n const layerAxisIndex = getLayerAxisIndex(instances, this.fields());\n this._layerAxisIndex = Object.assign(this._layerAxisIndex, layerAxisIndex);\n attachAxisToLayers(this.axes(), instances, layerAxisIndex);\n const store = { unit: this, layers: {} };\n this.layers().forEach((inst) => {\n store.layers[inst.alias()] = inst;\n });\n instances.forEach((lyr) => {\n resolveEncodingTransform(lyr, store);\n lyr.measurement(measurement);\n lyr.dataProps({\n timeDiffs: this.store().get(TIMEDIFFS)\n });\n });\n return instances;\n }\n\n /**\n *\n *\n * @returns\n * @memberof VisualUnit\n */\n remove () {\n const lifeCycleManager = this._dependencies.lifeCycleManager;\n lifeCycleManager.notify({ client: this, action: 'beforeremove', formalName: 'unit' });\n this.store().unsubscribeAll();\n selectElement(this.mount()).remove();\n this.firebolt().remove();\n // Remove layers\n lifeCycleManager.notify({ client: this.layers(), action: 'beforeremove', formalName: 'layer' });\n this.layers().forEach(layer => layer.remove());\n lifeCycleManager.notify({ client: this.layers(), action: 'removed', formalName: 'layer' });\n lifeCycleManager.notify({ client: this, action: 'removed', formalName: 'unit' });\n return this;\n }\n\n /**\n *\n *\n * @param {*} identifiers\n * @returns\n * @memberof VisualUnit\n */\n getDataModelFromIdentifiers (identifiers, mode, parentModel) {\n if (identifiers === null) {\n return null;\n }\n const dataModel = parentModel || this.data();\n return getDataModelFromIdentifiers(dataModel, identifiers, mode);\n }\n\n /**\n *\n *\n * @returns\n * @memberof VisualUnit\n */\n resetData () {\n this.data(this.cachedData()[0]);\n return this;\n }\n\n /**\n *\n *\n * @returns\n * @memberof VisualUnit\n */\n getSourceInfo () {\n return {\n dimensionMeasureMap: this._dimensionMeasureMap,\n fields: this.fields(),\n data: this.data(),\n axes: this.axes()\n };\n }\n\n /**\n *\n *\n * @returns\n * @memberof VisualUnit\n */\n getDefaultTargetContainer () {\n const { classPrefix, defClassName } = this.config();\n return [`.${classPrefix}-${defClassName}`];\n }\n\n /**\n *\n *\n * @param {*} type\n * @returns\n * @memberof VisualUnit\n */\n getLayersByType (type) {\n const layers = getLayersBy(this.layers(), 'type', type);\n return layers;\n }\n\n /**\n *\n *\n * @param {*} name\n * @returns\n * @memberof VisualUnit\n */\n getLayerByName (name) {\n const layers = getLayersBy(this.layers(), 'name', name);\n return layers[0];\n }\n\n /**\n *\n *\n * @param {*} domain\n * @returns\n * @memberof VisualUnit\n */\n updateAxisDomain (domain) {\n ['x', 'y'].forEach((type) => {\n const axes = this.axes()[type];\n let min = [];\n let max = [];\n let dom;\n axes && axes.forEach((axis, i) => {\n const field = this.fields()[type][i];\n dom = domain[`${this.fields()[type][i]}`];\n\n if (field.type() !== FieldType.DIMENSION && dom) {\n min[i] = dom[0];\n max[i] = dom[1];\n }\n });\n if (axes) {\n if (axes.length > 1) {\n const axisConf = axes[0].config();\n if (axes[0].constructor.type() === 'linear') {\n if (axisConf.alignZeroLine) {\n axes.forEach(axis => axis.config({\n nice: false\n }));\n const adjustedDomain = getAdjustedDomain(max, min);\n min = adjustedDomain.min;\n max = adjustedDomain.max;\n }\n\n axes[0].updateDomainCache([min[0], max[0]]);\n axes[1].updateDomainCache([min[1], max[1]]);\n } else {\n axes[0].updateDomainCache(dom);\n axes[1].updateDomainCache(dom);\n }\n } else {\n axes[0].updateDomainCache(dom);\n }\n }\n });\n return this;\n }\n\n /**\n * Finds the nearest point closest to the x and y position.\n * @param {number} x x position.\n * @param {number} y y position.\n * @return {Object} Nearest point.\n */\n getNearestPoint (x, y, args) {\n let pointObj = {\n id: null\n };\n const dimValue = getNearestDimensionalValue(this, {\n x,\n y\n });\n\n if (dimValue !== null && args.getAllPoints) {\n pointObj.id = dimValue;\n const pointInf = this.getMarkInfFromLayers(x, y, args);\n pointObj.target = pointInf && pointInf.id ? pointInf.id : pointObj.id;\n return pointObj;\n }\n\n const markInf = this.getMarkInfFromLayers(x, y, args) || { id: null };\n pointObj = Object.assign({}, markInf);\n\n pointObj.target = markInf.id;\n return pointObj;\n }\n\n getMarkInfFromLayers (x, y, args) {\n const layers = this.layers();\n const len = layers.length;\n let point = null;\n // Iterate through the layers array and fetch the nearest point from each layer. If a valid\n // nearest point is found from any layer, then return that point.\n for (let i = 0; i < len; i++) {\n const layer = layers[i];\n const config = layer.config();\n if (config.interactive !== false) {\n point = layer.getNearestPoint(x, y, args);\n }\n if (point) {\n return point;\n }\n }\n return point;\n }\n\n /**\n *\n *\n * @param {*} identifiers\n * @returns\n * @memberof VisualUnit\n */\n getPlotPointsFromIdentifiers (identifiers, config = {}) {\n let points = [];\n let parsedIdentifiers = identifiers;\n if (identifiers === null) {\n return [];\n }\n const layers = this.layers();\n const len = layers.length;\n if (isSimpleObject(identifiers)) {\n parsedIdentifiers = [Object.keys(identifiers)];\n parsedIdentifiers = [...parsedIdentifiers, ...transposeArray(Object.values(identifiers))];\n }\n for (let i = 0; i < len; i++) {\n const layer = layers[i];\n if (layer.config().interactive !== false) {\n points = [...points, ...layer.getPointsFromIdentifiers(parsedIdentifiers, config)];\n }\n }\n return points;\n }\n\n /**\n *\n *\n * @param {*} name\n * @returns\n * @memberof VisualUnit\n */\n removeLayerByName (name) {\n removeLayersBy('name', name);\n return this;\n }\n\n /**\n *\n *\n * @param {*} type\n * @returns\n * @memberof VisualUnit\n */\n removeLayersByType (type) {\n removeLayersBy('type', type);\n return this;\n }\n\n parentContainer (...container) {\n if (container.length) {\n this._parentContainer = container[0];\n\n return this;\n }\n return this._parentContainer;\n }\n}\n","import { DataModel } from 'muze-utils';\n\nimport { retriveDomainFromData } from './group-utils';\n\n/**\n * Gets name of fields form the variables\n *\n * @param {*} fields1\n * @param {*} [fields2=[]]\n * @return\n */\nconst getFieldNames = (fields1, fields2 = []) => [fields1, fields2].map(fields => fields.reduce((acc, d) => {\n acc = [...acc, ...d.getMembers()];\n return acc;\n}, []));\n\n/**\n * Creates a selected datamodel from a parent datamodel and a set of field names\n *\n * @param {Object} datamodel provided as input\n * @param {Array} fieldNames schema names\n * @param {Array} fieldValues values of those schema names to be selected\n * @return {Object} creates a new selected datamodel\n */\nconst createSelectedDataModel = (datamodel, fieldNames, fieldValues) =>\n datamodel.select(fields => fieldNames.every((field, k) => fields[field].value === fieldValues[k]));\n\n/**\n *\n *\n * @param {*} facets\n * @param {*} keyArray\n * @return\n */\nconst uniqueKeyGenerator = (keyArray, context, depth = 0, val = []) => {\n const {\n facets,\n dataModel,\n uniqueValues\n } = context;\n\n // Get unique keys for the next depth recursively if required\n if (facets[depth + 1]) {\n const field = facets[depth];\n uniqueValues.forEach((value) => {\n const newDm = dataModel.select(fields => fields[field].value === value);\n const nextDepthUniqueValues = retriveDomainFromData(newDm, facets[depth + 1]);\n const newContext = {\n facets,\n dataModel: newDm,\n uniqueValues: nextDepthUniqueValues\n };\n\n uniqueKeyGenerator(keyArray, newContext, depth + 1, [...val, value]);\n });\n } else {\n uniqueValues.forEach((value) => {\n keyArray.push([...val, value]);\n });\n }\n};\n\n/**\n * projects row model based on the set of row and/or column and other projection fields\n *\n * @param {Object} datamodel provided as input\n * @return {Object} Projected datamodel\n */\nconst projectRows = (datamodel, projections) => {\n const {\n allColumnProjections,\n rowProjections,\n optionalProjections\n } = projections;\n\n if (rowProjections.length > 0) {\n return rowProjections.map((projectFields) => {\n const [projFieldNames, colProjFieldNames] = getFieldNames(projectFields, allColumnProjections);\n return datamodel.project([...projFieldNames, ...colProjFieldNames, ...optionalProjections]);\n });\n }\n return [datamodel];\n};\n\n/**\n * Adds the datamodels to current row index based on column fields\n *\n * @param {Array} context current context\n * @param {Array} callback List of facets applied to the current datamodel\n */\nconst pushToMatrix = (context, callback) => {\n let cells = [];\n const {\n matrix,\n datamodel,\n facetInfo,\n fieldInfo\n } = context;\n // Get projected fields for current row\n const {\n rowProjections,\n colProjections,\n optionalProjections\n } = fieldInfo;\n const {\n rowIndex,\n columnIndex\n } = facetInfo;\n const rowProj = rowProjections[(rowIndex) % rowProjections.length] || [];\n\n // Get the cells for the matrix from the return function of the callback on the datamodel.\n // callback function -> (datamodel, {projections, indices}, facets)\n if (colProjections.length > 0) {\n cells = colProjections.map((projectFields, projIdx) => {\n const [colProjFieldNames, rowProjFieldNames] = getFieldNames(projectFields, rowProj);\n const projectedDm = datamodel.project([...colProjFieldNames, ...rowProjFieldNames, ...optionalProjections]);\n const projections = { rowFields: rowProj, columnFields: projectFields };\n const indices = { rowIndex, columnIndex: columnIndex * colProjections.length + projIdx };\n\n return callback(projectedDm, { projections, indices }, facetInfo);\n });\n } else {\n const projections = { rowFields: rowProj, columnFields: [] };\n const indices = { rowIndex, columnIndex };\n\n cells = [callback(datamodel, { projections, indices }, facetInfo)];\n }\n\n matrix[rowIndex] = matrix[rowIndex] || [];\n matrix[rowIndex].push(...cells);\n};\n\n/**\n * Gets Matrixes for corresponding datamodel, facets and projections\n *\n * @param {Object} dataModel input datamodel\n * @param {Object} fieldMap corresponding fieldmap\n * @param {Array} facetsAndProjections contains the set of facets and projections for the matrices\n * @param {Function} callback Callback executed after datamodels are prepared after sel/proj\n * @return {Object} set of matrices with the corresponding row and column keys\n */\nexport const getMatrixModel = (dataModel, fieldInfo, callback) => {\n let rowDataModels = [];\n const rowKeys = [];\n const columnKeys = [];\n const allColumnProjections = [];\n const matrix = [];\n const facetInfo = [];\n const {\n rowFacets,\n colFacets,\n colProjections\n } = fieldInfo;\n\n colProjections.forEach((colProj) => {\n allColumnProjections.push(...colProj);\n });\n fieldInfo.allColumnProjections = allColumnProjections;\n\n // Performing row selection and projection\n if (rowFacets.length > 0) {\n // Get unique values for the root level of facet\n const field = rowFacets[0].toString();\n const firstLevelRowKeys = retriveDomainFromData(dataModel, field);\n\n // Get unique keys in the form of an array of arrays for each row\n uniqueKeyGenerator(rowKeys, { facets: rowFacets, dataModel, uniqueValues: firstLevelRowKeys });\n\n // Apply selection -> projection -> row datamodels\n rowKeys.forEach((val) => {\n // Create faceted datamodel\n const [rowFacetFieldNames] = getFieldNames(rowFacets);\n const selectedDataModel = createSelectedDataModel(dataModel, rowFacetFieldNames, val);\n\n // Project the datamodel based on the number of projections (based on last levels)\n facetInfo.push([rowFacets, val]);\n rowDataModels.push(...projectRows(selectedDataModel, fieldInfo));\n });\n } else {\n // No row facets, hence only row projection\n rowDataModels.push(...projectRows(dataModel, fieldInfo));\n }\n\n // Maintaining set of row datamodels for column resolution\n rowDataModels = rowDataModels.length > 0 ? rowDataModels : [[]];\n\n // Performing column selection and projection\n if (colFacets.length > 0) {\n const colFacetNames = colFacets.map(d => `${d}`);\n // Get unique values for the root level of facet\n const field = colFacetNames[0];\n const firstLevelColumnKeys = retriveDomainFromData(dataModel, field);\n\n // Get unique keys to create faceted datamodels: this time for columns\n uniqueKeyGenerator(columnKeys, {\n facets: colFacetNames,\n dataModel,\n uniqueValues: firstLevelColumnKeys\n });\n\n // For each row in the datamodel, apply selection -> projection -> push the projection to matri\n rowDataModels.forEach((dme, rIndex) => {\n facetInfo[rIndex] = facetInfo[rIndex] || [[], []];\n columnKeys.forEach((val, cIndex) => {\n matrix[rIndex] = matrix[rIndex] || [];\n\n // If datamodel is not present in current row, choose parent datamodel\n const datamodel = dme instanceof DataModel ? dme : dataModel;\n\n // Selection is made on the datamodel for the current row\n const selectedDataModel = createSelectedDataModel(datamodel, colFacetNames, val);\n const context = {\n matrix,\n datamodel: selectedDataModel,\n facetInfo: {\n rowFacets: facetInfo[rIndex],\n colFacets: [colFacets, val],\n rowIndex: rIndex,\n columnIndex: cIndex\n },\n fieldInfo\n };\n pushToMatrix(context, callback);\n });\n });\n } else {\n // No column facets, hence only row projection\n rowDataModels.forEach((dme, rIndex) => {\n facetInfo[rIndex] = facetInfo[rIndex] || [[], []];\n const context = {\n matrix,\n datamodel: dme || dataModel,\n facetInfo: {\n rowFacets: facetInfo[rIndex],\n colFacets: [[], []],\n rowIndex: rIndex,\n columnIndex: 0\n },\n fieldInfo\n };\n\n pushToMatrix(context, callback);\n });\n }\n\n // Getting column keys\n const transposedColKeys = columnKeys.length > 0 ? columnKeys[0].map((col, i) =>\n columnKeys.map(row => row[i])) : columnKeys;\n\n return { matrix, rowKeys, columnKeys: transposedColKeys };\n};\n","import { AxisOrientation } from '@chartshq/muze-axis';\nimport { getObjProp, FieldType } from 'muze-utils';\nimport { getMatrixModel } from './matrix-model';\nimport {\n getCellKey,\n isDistributionEqual,\n mutateAxesFromMap,\n createSelection,\n getFieldsFromSuppliedLayers,\n extractFields\n} from './group-utils';\nimport { ROW, ROWS, COLUMNS, COL, LEFT, RIGHT, TOP, BOTTOM, PRIMARY, SECONDARY, X, Y } from '../enums/constants';\n\n/**\n * Updates row and column cells with the geom cell corresponding to the facet keys\n *\n * @param {*} resolver\n * @param {*} facets\n */\nconst updateCells = (resolver, facets, geomCell) => {\n [ROW, COL].forEach((field) => {\n const cells = resolver[`${field}Cells`]();\n const facetKey = facets[`${field}Facets`][1].join();\n\n !cells[facetKey] && (cells[facetKey] = []);\n cells[facetKey].push(geomCell);\n resolver[`${field}Cells`](cells);\n });\n};\n\n/**\n *\n *\n * @param {*} context\n * @param {*} datamodel\n * @param {*} fieldInfo\n * @param {*} facets\n * @return\n */\nexport const createValueCells = (context, datamodel, fieldInfo, facets) => {\n const {\n projections,\n indices\n } = fieldInfo;\n const {\n rowFields,\n columnFields\n } = projections;\n const {\n rowIndex,\n columnIndex\n } = indices;\n const {\n suppliedLayers,\n cell: GeomCell,\n resolver,\n config,\n encoder,\n detailFields\n } = context;\n const axes = resolver.axes();\n const cacheMaps = resolver.cacheMaps();\n const matrixLayers = resolver.matrixLayers();\n const labelManager = resolver.dependencies().smartlabel;\n const horizontalAxis = resolver.horizontalAxis();\n const verticalAxis = resolver.verticalAxis();\n const datamodelTransform = resolver.datamodelTransform();\n const {\n entryCellMap,\n exitCellMap\n } = cacheMaps;\n const layerConfigArr = encoder.getLayerConfig({ columnFields, rowFields }, suppliedLayers || []);\n const axesCreators = { config, labelManager, axes, cacheMaps };\n\n fieldInfo.normalizedColumns = verticalAxis.fields;\n fieldInfo.normalizedRows = horizontalAxis.fields;\n\n const groupAxes = encoder.createAxis(axesCreators, fieldInfo);\n\n matrixLayers[rowIndex] = matrixLayers[rowIndex] ? matrixLayers[rowIndex] : [];\n matrixLayers[rowIndex][columnIndex] = layerConfigArr;\n\n // return from map if already there otherwise create and put in map\n const geomCellKey = getCellKey(rowIndex, columnIndex);\n const fields = {\n y: rowFields,\n x: columnFields\n };\n const allFacets = [\n [...facets.rowFacets[0], ...facets.colFacets[0]],\n [...facets.rowFacets[1], ...facets.colFacets[1]]\n ];\n const geomCell = !exitCellMap.has(geomCellKey) ? new GeomCell() : exitCellMap.get(geomCellKey);\n\n geomCell.data(datamodel)\n .axes(groupAxes)\n .fields(fields)\n .transform(datamodelTransform)\n .detailFields(detailFields)\n .facetByFields(allFacets);\n entryCellMap.set(geomCellKey, geomCell);\n exitCellMap.delete(geomCellKey);\n\n updateCells(resolver, facets, geomCell);\n\n return entryCellMap.get(geomCellKey);\n};\n\n/**\n * Creates axis cells based on the set of axes\n *\n * @param {Selection} selection Contains a selection of the axis units\n * @param {Array} axes Actual axis units\n * @param {number} axisIndex 0-> primary axis, 1-> secondary axis(when dual axis is made)\n * @param {Object} cells Contains a collection of the cells\n * @return {Object} return either set of axis/blank cells depending on the config\n */\n\nconst createAxisCells = (selection, axes, axisIndex, cells) =>\n createSelection(selection, axis => axis, axes, (item, i) => i + item.reduce((e, n) => {\n const id = n.id + axisIndex;\n return e + id;\n }, '')).map((axis) => {\n if (axis && axis[axisIndex]) {\n const axisInst = axis[axisIndex];\n const { orientation, show } = axisInst.config();\n\n return new cells.AxisCell().source(axisInst).config({\n isOffset: orientation === AxisOrientation.LEFT || orientation === AxisOrientation.TOP,\n show\n });\n }\n return new cells.BlankCell();\n });\n\n/**\n *\n *\n * @param {*} context\n * @param {*} selectionObj\n * @param {*} cells\n * @retur\n */\nconst axisPlaceholderGn = (context, selObj, cells) => {\n const {\n matrices\n } = context;\n const {\n axesMatrix\n } = matrices;\n\n return (type, axisFrom) => {\n const axes = axesMatrix[`${type}`];\n\n if (axes && axes.length) {\n if (type === X || type === Y) {\n const fieldNames = type === Y ? ROWS : COLUMNS;\n\n [PRIMARY, SECONDARY].forEach((fieldType, index) => {\n const selObjProp = `${fieldNames}${fieldType}`;\n let axisIndex = index;\n let axesForDraw = axes;\n if (axisFrom === RIGHT || axisFrom === BOTTOM) {\n axisIndex = 1 - axisIndex;\n }\n if (!getObjProp(axes, 0, axisIndex)) {\n axesForDraw = [];\n }\n selObj[selObjProp] = createAxisCells(selObj[selObjProp], axesForDraw, axisIndex, cells);\n });\n } else {\n selObj.rowsPrimary = createAxisCells(selObj.rowPrime, axes.map(() => []), 0, cells);\n selObj.columnsPrimary = createAxisCells(selObj.colPrime, axes[0], 0, cells);\n }\n }\n return selObj;\n };\n};\n\n/**\n * Creates header cells based on the set of headers\n *\n * @param {Object} selection Contains a selection of the header units\n * @param {string} headers Contains a list of the headers\n * @param {Object} cells Contains a collection of the cells\n * @param {Object} labelManager smart label instance\n * @return {Object} return either set of header cells depending on the config\n */\nconst createTextCells = (selection, headers, cells, labelManager) => createSelection(selection,\n label => new cells.TextCell({}, { labelManager }).source(label), headers, (key, i) => key + i);\n\n/**\n *\n *\n * @param {*} context\n * @param {*} selectionObj\n * @param {*} cells\n * @param {*} labelManager\n * @return\n */\nconst headerPlaceholderGn = (context, selectionObj, cells, labelManager) => {\n const {\n axis,\n keys,\n type,\n facetConfig\n } = context;\n const counter = axis.length / keys.length;\n const selectionKeys = keys.length ? axis.map((d, i) => keys[Math.floor(i / counter)]) : [];\n return createSelection(selectionObj[`${type}Headers`], keySet => keySet, selectionKeys, (keySet, i) =>\n `${keySet.join(',')}-${i}`).map(keySet => createTextCells(null, keySet, cells, labelManager)\n .map((cell, k, i) => cell.source(keySet[i]).config(facetConfig || {})));\n};\n\n/**\n * Creates a set of placeholders as a part of selection object\n *\n * @param {Array} normalizedOptions contains normalized rows and columns\n * @param {Array} matrices contains axis and value matrices\n * @param {aArrayny} projections contains set of row and column projections\n * @param {Object} cells Contains a collection of the cells\n * @param {Object} labelManager smart label instance\n * @return {Object} Creates a set of placeholders as a part of selections\n */\nconst generatePlaceholders = (context, cells, labelManager) => {\n let selectionObj;\n const {\n matrices,\n fields,\n facetsAndProjections,\n selection,\n facetConfig,\n encoders\n } = context;\n const {\n rows,\n columns\n } = fields;\n const {\n valuesMatrix\n } = matrices;\n const {\n rowProjections,\n colProjections\n } = facetsAndProjections;\n const {\n rowKeys,\n columnKeys\n } = valuesMatrix;\n const takeAxisFrom = encoders.simpleEncoder._axisFrom;\n const takeHeaderFrom = encoders.simpleEncoder._headerFrom;\n\n selectionObj = selection || {};\n\n ['pie', X, Y].forEach((axis) => {\n const axisFrom = axis === X ? takeAxisFrom.column : takeAxisFrom.row;\n selectionObj = axisPlaceholderGn(context, selectionObj, cells)(axis, axisFrom);\n });\n\n const {\n rowsPrimary,\n rowsSecondary,\n columnsPrimary,\n columnsSecondary\n } = selectionObj;\n\n const rowAxis = rowsPrimary && rowsPrimary.getObjects().length ? rowsPrimary.getObjects() :\n (rowsSecondary && rowsSecondary.getObjects().length ? rowsSecondary.getObjects() : []);\n const colAxis = columnsPrimary && columnsPrimary.getObjects().length ? columnsPrimary.getObjects() :\n (columnsSecondary && columnsSecondary.getObjects().length ? columnsSecondary.getObjects() : []);\n\n const headerConfig = [\n { type: LEFT, section: rows[0], axis: rowAxis, headerFrom: takeHeaderFrom.row },\n { type: RIGHT, section: rows[1], axis: rowAxis, headerFrom: takeHeaderFrom.row },\n { type: TOP, section: columns[0], axis: colAxis, headerFrom: takeHeaderFrom.column },\n { type: BOTTOM, section: columns[1], axis: colAxis, headerFrom: takeHeaderFrom.column }\n ];\n\n headerConfig.forEach((config, index) => {\n let keys;\n let length;\n const {\n type,\n section,\n axis,\n headerFrom\n } = config;\n\n if (index < 2) {\n keys = rowKeys;\n length = rowProjections.length > 0 ? rowProjections.length : 1;\n } else {\n keys = columnKeys;\n length = colProjections.length > 0 ? colProjections.length : 1;\n }\n\n if (section.length && headerFrom === type && axis && keys.length) {\n const hContext = { axis, length, type };\n let headers = [];\n if (index < 2) {\n hContext.keys = keys;\n hContext.facetConfig = facetConfig.rows;\n headers = headerPlaceholderGn(hContext, selectionObj, cells, labelManager);\n } else {\n hContext.facetConfig = facetConfig.columns;\n hContext.keys = keys[0].map((key, i) => keys.map(e => e[i]));\n headers = headerPlaceholderGn(hContext, selectionObj, cells, labelManager);\n }\n selectionObj[`${type}Headers`] = headers;\n } else {\n selectionObj[`${type}Headers`] = null;\n }\n });\n return selectionObj;\n};\n\n/**\n * Generates matrices\n *\n * @param {Object} config Configuration to generate matrices\n * @param {Array} matrices Matrices containing the set of visual units and axes units\n * @param {Object} cells Contains a collection of the cells\n * @param {Object} labelManager smart label instance\n * @return {Object} contains a collection of matrices\n */\nexport const generateMatrices = (context, matrices, cells, labelManager) => {\n const {\n unitHeight,\n unitWidth,\n facetsAndProjections,\n normalizedRows,\n normalizedColumns,\n selection,\n axisFrom,\n facetConfig,\n encoders\n } = context;\n const placeholderContext = {\n fields: {\n rows: normalizedRows,\n columns: normalizedColumns\n },\n matrices,\n facetsAndProjections,\n selection,\n axisFrom,\n facetConfig,\n encoders\n };\n // Generate placeholders for all matrices\n const selectionObj = generatePlaceholders(placeholderContext, cells, labelManager);\n const {\n columnsPrimary,\n columnsSecondary,\n rowsPrimary,\n rowsSecondary,\n leftHeaders,\n topHeaders,\n bottomHeaders,\n rightHeaders\n } = selectionObj;\n const [rowPrime, rowSec, colPrime, colSec] = [rowsPrimary, rowsSecondary, columnsPrimary, columnsSecondary]\n .map(d => (d ? d.getObjects() : []));\n const [leftFacets, rightFacets] = [leftHeaders, rightHeaders].map(e => (e ? e.getObjects()\n .map(f => f.getObjects()) : []));\n\n // Compute left matrix using left headers and the axes on the rows\n let leftMatrix = leftFacets.length ? leftFacets.map((d, i) => {\n rowPrime[i] = rowPrime[i] ? [rowPrime[i]] : [];\n return [...d, ...rowPrime[i]];\n }) : (rowPrime ? rowPrime.map(d => [d]) : []);\n\n // Compute right matrix using right headers and the axes on the rows\n const rightMatrix = rowSec.length ? rowSec.map((d, i) => [d, ...(rightFacets[i] || [])]) : (rightFacets.length ?\n rightFacets.map(d => [...d]) : []);\n\n const topMatrix = [];\n if (topHeaders) {\n const headers = topHeaders.getObjects();\n headers.forEach((e) => {\n const innerHeaders = e.getObjects();\n innerHeaders.forEach((x, i) => {\n topMatrix[i] = topMatrix[i] || [];\n topMatrix[i].push(x);\n });\n });\n }\n // Compute top matrix using the top headers and axes on the columns\n if (colPrime.length) {\n topMatrix.push(colPrime);\n }\n\n // Bottom and right matrices are prepared using the user config.\n let bottomMatrix = [];\n if (colSec.length) {\n bottomMatrix.push(colSec);\n }\n const currentBottomLength = bottomMatrix.length;\n if (bottomHeaders) {\n const headers = bottomHeaders.getObjects();\n headers.forEach((e) => {\n const innerHeaders = e.getObjects();\n innerHeaders.forEach((x, i) => {\n bottomMatrix[i + currentBottomLength] = bottomMatrix[i + currentBottomLength] || [];\n bottomMatrix[i + currentBottomLength].push(x);\n });\n });\n }\n\n if (!leftMatrix.length && !rightMatrix.length) {\n const cell = new cells.BlankCell();\n cell.setAvailableSpace(unitWidth, unitHeight);\n leftMatrix = [[cell]];\n }\n\n if (!topMatrix.length && (!bottomMatrix.length || !bottomMatrix[0].length)) {\n const cell = new cells.BlankCell();\n cell.setAvailableSpace(unitWidth, unitHeight);\n bottomMatrix = [[cell]];\n }\n\n return {\n rows: [leftMatrix, rightMatrix],\n columns: [topMatrix, bottomMatrix],\n selectionObj\n };\n};\n\n/**\n * Computes matrices for a group\n *\n * @param {Object} datamodel on which the matrices are to be computed\n * @param {Object} config configuration of the matrices\n * @param {Object} layerRegistry contains the registered layers\n * @return {Object} conputed matrices\n * @memberof MatrixResolver\n */\nexport const computeMatrices = (context, config) => {\n const {\n resolver,\n datamodel,\n componentRegistry,\n encoders\n } = context;\n const {\n globalConfig,\n selection,\n transform\n } = config;\n const groupBy = globalConfig.autoGroupBy;\n const { smartlabel: labelManager } = resolver.dependencies();\n const fieldMap = datamodel.getFieldsConfig();\n const layerConfig = resolver.layerConfig();\n const registry = resolver.registry();\n const { fields: normalizedRows } = resolver.horizontalAxis();\n const { fields: normalizedColumns } = resolver.verticalAxis();\n const otherEncodings = resolver.optionalProjections(config, layerConfig);\n const facetsAndProjections = resolver.getAllFields();\n const matrixGnContext = {\n // Configuration to be passed to generate the different matrices.\n // A common config is used for both value matrices and other matrices\n normalizedColumns,\n normalizedRows,\n facetsAndProjections,\n layers: layerConfig,\n fieldMap,\n otherEncodings,\n encoders,\n facetConfig: globalConfig.facetConfig || {},\n axisFrom: globalConfig.axisFrom || {},\n selection\n };\n const cells = {\n GeomCell: resolver.getCellDef(registry.GeomCell),\n AxisCell: resolver.getCellDef(registry.AxisCell),\n BlankCell: resolver.getCellDef(registry.BlankCell),\n TextCell: resolver.getCellDef(registry.TextCell)\n };\n const isRowSizeEqual = isDistributionEqual(normalizedRows);\n const isColumnSizeEqual = isDistributionEqual(normalizedColumns);\n\n resolver.colCells({});\n resolver.rowCells({});\n resolver.datamodelTransform(transform || {});\n\n // Cell creation begins here\n resolver.resetSimpleAxes();\n\n const {\n entryCellMap\n } = resolver.cacheMaps();\n const newCacheMap = {\n exitCellMap: entryCellMap,\n entryCellMap: new Map()\n };\n\n resolver.cacheMaps(newCacheMap);\n\n const valueCellContext = {\n config: globalConfig,\n suppliedLayers: encoders.simpleEncoder.serializeLayerConfig(resolver.layerConfig()),\n resolver,\n cell: cells.GeomCell,\n encoder: encoders.simpleEncoder,\n newCacheMap,\n detailFields: config.detail\n };\n const fieldsConfig = datamodel.getFieldsConfig();\n let groupedModel = datamodel;\n if (!groupBy.disabled) {\n const fields = getFieldsFromSuppliedLayers(valueCellContext.suppliedLayers, datamodel.getFieldsConfig());\n const allFields = extractFields(facetsAndProjections, fields);\n\n const dimensions = allFields.filter(field =>\n fieldsConfig[field] && fieldsConfig[field].def.type === FieldType.DIMENSION);\n const aggregationFns = groupBy.measures;\n\n groupedModel = datamodel.groupBy(dimensions.length ? dimensions : [''], aggregationFns).project(allFields);\n }\n\n // return a callback function to create the cells from the matrix\n const cellCreator = resolver.valueCellsCreator(valueCellContext);\n // Creates value matrices from the datamodel and configs\n const valueMatrixInfo = getMatrixModel(groupedModel, facetsAndProjections, cellCreator);\n\n resolver.cacheMaps().exitCellMap.forEach((placeholder) => {\n placeholder.remove();\n });\n resolver.cacheMaps().exitCellMap.clear();\n resolver.valueMatrix(valueMatrixInfo.matrix);\n resolver.createUnits(componentRegistry, config);\n\n const { xAxes, yAxes } = mutateAxesFromMap(resolver.cacheMaps(), resolver.axes());\n\n resolver.axes({\n x: xAxes,\n y: yAxes\n });\n\n const matrices = {\n valuesMatrix: valueMatrixInfo,\n axesMatrix: resolver.axes()\n };\n // Create all matrices\n const { rows, columns, selectionObj } = generateMatrices(matrixGnContext, matrices, cells, labelManager);\n\n resolver.rowMatrix(rows);\n resolver.columnMatrix(columns);\n\n return {\n rows: resolver.rowMatrix(),\n columns: resolver.columnMatrix(),\n values: resolver.valueMatrix(),\n isColumnSizeEqual,\n isRowSizeEqual,\n selection: selectionObj,\n dataModels: {\n groupedModel,\n parentModel: datamodel\n }\n };\n};\n","import { VisualUnit } from '@chartshq/visual-unit';\nimport {\n initializeCacheMaps,\n headerCreator,\n extractUnitConfig,\n setFacetsAndProjections\n} from './group-utils';\nimport {\n ROW, COL, LEFT, RIGHT, COLOR, SIZE, SHAPE, DETAIL, CELL, X_AXES, Y_AXES, ENTRY_CELLS, EXIT_CELLS, INITIALIZED,\n AXIS, UNIT, BEFORE_UPDATE, UPDATED, VALUE_MATRIX, FACET_HEADERS\n} from '../enums/constants';\nimport { createValueCells, computeMatrices } from './cell-creator';\n/**\n * Resolves the matrices from configuration provided\n *\n * @export\n * @class MatrixResolver\n */\nexport default class MatrixResolver {\n\n /**\n * Creates an instance of MatrixResolver.\n * @param {Object} dependencies needed to run the resolver\n * @memberof MatrixResolver\n */\n constructor (dependencies) {\n this._registry = {};\n this._layerConfig = [];\n this._matrixLayers = [];\n this._dependencies = dependencies;\n this._rowMatrix = [];\n this._columnMatrix = [];\n this._valueMatrix = [];\n this._facets = {};\n this._projections = {};\n this._datamodelTransform = {};\n this._units = [];\n this._cacheMaps = {};\n this._axes = {\n x: {},\n y: {},\n color: [],\n size: [],\n shape: []\n };\n\n this.cacheMaps(initializeCacheMaps());\n }\n\n /**\n * Set: Registers placeholders, Get: return {Object} those placeholders\n *\n * @param {Object} placeholders cells that will construct the group\n * @return {Object} Either current instance or the set of placeholders\n * @memberof MatrixResolver\n */\n registry (...placeholders) {\n if (placeholders.length) {\n Object.entries(placeholders[0]).forEach((val) => {\n this._registry[val[0]] = val[1];\n });\n return this;\n }\n return this._registry;\n }\n\n /**\n * Used to set the layer config from outside or get current layer info\n *\n * @param {Object} type configuration of layer provided externally\n * @return {Object} either the layer or current instance\n * @memberof MatrixResolver\n */\n dependencies (...dep) {\n if (dep.length) {\n this._dependencies = dep[0];\n return this;\n }\n return this._dependencies;\n }\n\n /**\n * Used to set the layer config from outside or get current layer info\n *\n * @param {Object} type configuration of layer provided externally\n * @return {Object} either the layer or current instance\n * @memberof MatrixResolver\n */\n units (...unitArr) {\n if (unitArr.length) {\n this._units = unitArr[0];\n return this;\n }\n return this._units;\n }\n\n /**\n * Used to set the layer config from outside or get current layer info\n *\n * @param {Object} layer configuration of layer provided externally\n * @return {Object} either the layer or current instance\n * @memberof MatrixResolver\n */\n layerConfig (...config) {\n if (config.length) {\n this._layerConfig = config[0];\n return this;\n }\n return this._layerConfig;\n }\n\n /**\n * Used to set the layer config from outside or get current layer info\n *\n * @param {Object} type configuration of layer provided externally\n * @return {Object} either the layer or current instance\n * @memberof MatrixResolver\n */\n matrixLayers (...layers) {\n if (layers.length) {\n this._matrixLayers = layers[0];\n return this;\n }\n return this._matrixLayers;\n }\n\n /**\n * Used to set the layer config from outside or get current layer info\n *\n * @param {Object} type configuration of layer provided externally\n * @return {Object} either the layer or current instance\n * @memberof MatrixResolver\n */\n datamodelTransform (...transform) {\n if (transform.length) {\n this._datamodelTransform = transform[0];\n return this;\n }\n return this._datamodelTransform;\n }\n\n /**\n * Used to set the layer config from outside or get current layer info\n *\n * @param {Object} type configuration of layer provided externally\n * @return {Object} either the layer or current instance\n * @memberof MatrixResolver\n */\n cacheMaps (...maps) {\n if (maps.length) {\n [CELL, X_AXES, Y_AXES, ENTRY_CELLS, EXIT_CELLS].forEach((e) => {\n this._cacheMaps[`${e}Map`] = maps[0][`${e}Map`] || this._cacheMaps[`${e}Map`];\n });\n return this;\n }\n return this._cacheMaps;\n }\n\n /**\n * Used to set the layer config from outside or get current layer info\n *\n * @param {Object} type configuration of layer provided externally\n * @return {Object} either the layer or current instance\n * @memberof MatrixResolver\n */\n rowCells (...cells) {\n if (cells.length) {\n this._rowCells = cells[0];\n return this;\n }\n return this._rowCells;\n }\n\n /**\n * Used to set the layer config from outside or get current layer info\n *\n * @param {Object} type configuration of layer provided externally\n * @return {Object} either the layer or current instance\n * @memberof MatrixResolver\n */\n colCells (...cells) {\n if (cells.length) {\n this._colCells = cells[0];\n return this;\n }\n return this._colCells;\n }\n\n /**\n * Used to set the layer config from outside or get current layer info\n *\n * @param {Object} type configuration of layer provided externally\n * @return {Object} either the layer or current instance\n * @memberof MatrixResolver\n */\n axes (...axes) {\n if (axes.length) {\n this._axes = Object.assign({}, this._axes, axes[0]);\n return this;\n }\n return this._axes;\n }\n\n /**\n * Used to set the layer config from outside or get current layer info\n *\n * @param {Object} type configuration of layer provided externally\n * @return {Object} either the layer or current instance\n * @memberof MatrixResolver\n */\n rowMatrix (...rowMat) {\n if (rowMat.length) {\n this._rowMatrix = rowMat[0];\n return this;\n }\n return this._rowMatrix;\n }\n\n /**\n * Used to set the layer config from outside or get current layer info\n *\n * @param {Object} type configuration of layer provided externally\n * @return {Object} either the layer or current instance\n * @memberof MatrixResolver\n */\n columnMatrix (...colMat) {\n if (colMat.length) {\n this._columnMatrix = colMat[0];\n return this;\n }\n return this._columnMatrix;\n }\n\n /**\n * Used to set the layer config from outside or get current layer info\n *\n * @param {Object} type configuration of layer provided externally\n * @return {Object} either the layer or current instance\n * @memberof MatrixResolver\n */\n valueMatrix (...valMat) {\n if (valMat.length) {\n this._valueMatrix = valMat[0];\n return this;\n }\n return this._valueMatrix;\n }\n\n /**\n *\n *\n * @param {*} facets\n * @return\n * @memberof MatrixResolver\n */\n facets (...facets) {\n if (facets.length) {\n Object.entries(facets[0]).forEach((e) => {\n this._facets[e[0]] = e[1];\n });\n return this;\n }\n return this._facets;\n }\n\n /**\n *\n *\n * @param {*} projections\n * @return\n * @memberof MatrixResolver\n */\n projections (...projections) {\n if (projections.length) {\n Object.entries(projections[0]).forEach((e) => {\n this._projections[e[0]] = e[1];\n });\n return this;\n }\n return this._projections;\n }\n\n /**\n *\n *\n * @param {*} config\n * @param {*} layerConfig\n * @return\n * @memberof MatrixResolver\n */\n optionalProjections (config, layerConfig) {\n const otherEncodings = {};\n const optionalProjections = [];\n const otherEncodingTypes = [SIZE, COLOR, SHAPE];\n\n otherEncodingTypes.forEach((type) => {\n if (config[type] && config[type].field) {\n const enc = config[type];\n otherEncodings[type] = enc.field;\n optionalProjections.push(enc.field);\n }\n });\n\n if (config[DETAIL]) {\n optionalProjections.push(...config.detail);\n }\n\n if (layerConfig.length) {\n layerConfig.forEach((layer) => {\n if (layer.encoding) {\n Object.values(layer.encoding).forEach((enc) => {\n if (enc && optionalProjections.indexOf(enc.field) === -1) {\n optionalProjections.push(enc.field ? enc.field : enc);\n }\n });\n }\n });\n }\n this.projections({ optionalProjections });\n return otherEncodings;\n }\n\n /**\n * return the normalized set of rows and facets and projections\n *\n * @param {Object} rows parameters needed to set horizontal axis consisiting of rows\n * @return {Object} facets, projections and normalized rows\n * @memberof MatrixResolver\n */\n horizontalAxis (rows, encoder) {\n if (rows) {\n this._horizontalAxis = setFacetsAndProjections(this, { type: ROW, fields: rows }, encoder);\n return this;\n }\n return this._horizontalAxis;\n }\n\n /**\n * return the normalized set of columns and facets and projections\n *\n * @param {Object} columns parameters needed to set vertical axis consisiting of columns\n * @return {Object} facets, projections and normalized columns\n * @memberof MatrixResolver\n */\n verticalAxis (columns, encoder) {\n if (columns) {\n this._verticalAxis = setFacetsAndProjections(this, { type: COL, fields: columns }, encoder);\n return this;\n }\n return this._verticalAxis;\n }\n\n /**\n * Gets the class definition of a particular cell type(if the particular type has been extended, that particular\n * definition is returned)\n *\n * @param {Object} cell cell whose class definition is to be retrieved\n * @return {Object} cell definition\n * @memberof MatrixResolver\n */\n getCellDef (cell) {\n const registry = this.registry();\n\n Object.values(registry).forEach((e) => {\n if (e.prototype instanceof cell) {\n cell = e;\n }\n });\n return cell;\n }\n\n /**\n * return a visual cell creator along with its axis information to be injected to the datamodel creation\n * function\n *\n * @param {Object} GeomCell Type of cell to be created\n * @return {Object} Created cell\n * @memberof MatrixResolver\n */\n valueCellsCreator (context) {\n // reset matrix layers\n this.matrixLayers([]);\n\n return (datamodel, fieldInfo, facets) => createValueCells(context, datamodel, fieldInfo, facets);\n }\n\n /**\n * Callback to be applied on each cell of a matrix of a particular type\n *\n * @param {string} matrixType type of matrix on which callback is to be applied\n * @param {Function} callback function to be applied to each cell\n * @memberof MatrixResolver\n */\n forEach (matrixType, callback) {\n this[matrixType]().forEach((row, rIndex) => {\n row.forEach((col, cIndex) => {\n callback(rIndex, cIndex, col);\n });\n });\n }\n\n /**\n *\n *\n * @return\n * @memberof MatrixResolver\n */\n getAllFields () {\n const retObj = this.projections();\n\n Object.entries(this.facets()).forEach((e) => {\n retObj[e[0]] = e[1];\n });\n return retObj;\n }\n\n /**\n *\n *\n * @memberof MatrixResolver\n */\n resetSimpleAxes () {\n return this.axes({\n x: new Set(),\n y: new Set()\n });\n }\n\n /**\n *\n *\n * @param {*} componentRegistry\n * @param {*} config\n * @memberof MatrixResolver\n */\n createUnits (componentRegistry, config) {\n const {\n globalConfig,\n alias\n } = config;\n const {\n layerRegistry,\n sideEffectRegistry\n } = componentRegistry;\n const {\n smartlabel: smartLabel,\n lifeCycleManager\n } = this.dependencies();\n // Provide the source for the matrix\n const units = [];\n // Setting unit configuration\n const unitConfig = extractUnitConfig(globalConfig || {});\n\n this.forEach(VALUE_MATRIX, (i, j, el) => {\n let unit = el.source();\n if (!unit) {\n unit = VisualUnit.create({\n layerRegistry,\n sideEffectRegistry\n }, {\n smartLabel,\n lifeCycleManager\n });\n el.source(unit);\n units.push(unit);\n }\n unit.parentAlias(alias);\n el.config(unitConfig);\n });\n\n lifeCycleManager.notify({ client: units, action: INITIALIZED, formalName: UNIT });\n return this.units(units);\n }\n\n /**\n *\n *\n * @param {*} config\n * @memberof MatrixResolver\n */\n setDomains (config, datamodel, encoders) {\n const {\n color,\n shape,\n size,\n globalConfig\n } = config;\n const groupBy = globalConfig.autoGroupBy;\n const {\n rowFacets,\n colFacets\n } = this.getAllFields();\n const encoding = {\n color,\n shape,\n size\n };\n const facetFields = [...rowFacets.map(e => e.toString()), ...colFacets.map(e => e.toString())];\n const retContext = {\n domains: encoders.simpleEncoder.getRetinalFieldsDomain(datamodel, encoding, facetFields, groupBy),\n axes: this.axes(),\n encoding\n };\n encoders.retinalEncoder.setCommonDomain(retContext);\n return this;\n }\n\n /**\n *\n *\n * @return\n * @memberof MatrixResolver\n */\n getRetinalAxes () {\n const {\n color,\n shape,\n size\n } = this.axes();\n\n return {\n color: [...color],\n shape: [...shape],\n size: [...size]\n };\n }\n\n /**\n *\n *\n * @param {*} type\n * @return\n * @memberof MatrixResolver\n */\n getSimpleAxes (type) {\n return this.axes()[`${type}`];\n }\n\n /**\n *\n *\n * @param {*} datamodel\n * @param {*} config\n * @memberof MatrixResolver\n */\n createRetinalAxes (fieldsConfig, config, encoders) {\n const layerConfig = this.layerConfig();\n this.optionalProjections(config, layerConfig);\n const retinalAxes = encoders.retinalEncoder.createAxis({\n fieldsConfig,\n config,\n axes: this.axes()\n });\n const {\n lifeCycleManager\n } = this.dependencies();\n\n [COLOR, SHAPE, SIZE].forEach((e) => {\n this.axes()[e] = retinalAxes[e];\n });\n\n lifeCycleManager.notify({ client: this.axes(), action: INITIALIZED, formalName: AXIS });\n lifeCycleManager.notify({ client: this.units(), action: BEFORE_UPDATE, formalName: UNIT });\n\n const units = [];\n const matrixLayers = this.matrixLayers();\n\n this.forEach(VALUE_MATRIX, (i, j, el) => {\n el.axes(retinalAxes);\n el.source() && el.source().retinalFields(config);\n el.layerDef(encoders.retinalEncoder.getLayerConfig(config, matrixLayers[i][j]));\n el.updateModel();\n\n units.push(el.source());\n });\n\n lifeCycleManager.notify({ client: units, action: UPDATED, formalName: UNIT });\n return this;\n }\n\n /**\n *\n *\n * @param {*} placeholders\n * @param {*} fieldNames\n * @return\n * @memberof MatrixResolver\n */\n createHeaders (placeholders, fieldNames, config) {\n let bottomLeft = [];\n let bottomRight = [];\n const {\n rows,\n columns\n } = placeholders;\n const {\n smartlabel: labelManager,\n lifeCycleManager\n } = this.dependencies();\n const TextCell = this.getCellDef(this.registry().TextCell);\n const BlankCell = this.getCellDef(this.registry().BlankCell);\n const [leftRows, rightRows] = rows;\n const [topCols, bottomCols] = columns;\n const rowHeaders = fieldNames.rows;\n const blankCellCreator = cell => new BlankCell().config({ show: cell.config().show });\n\n // Headers and footers are created based on the rows. Thereafter, using the column information\n // they are tabularized into the current structure\n const headers = {\n left: headerCreator(leftRows, rowHeaders[0], config.showHeaders ? TextCell : BlankCell, labelManager),\n right: headerCreator(rightRows, rowHeaders[1], config.showHeaders ? TextCell : BlankCell, labelManager)\n };\n const footers = {\n left: leftRows.length > 0 ? leftRows[0].map(blankCellCreator) : [],\n right: rightRows.length > 0 ? rightRows[0].map(blankCellCreator) : []\n };\n const [topLeft, topRight] = [LEFT, RIGHT].map(type => topCols.map((col, i) => {\n if (i === topCols.length - 1) {\n return headers[type];\n }\n return footers[type];\n }));\n\n // Creating only bottom matrices if there is no information on the top\n if (topCols.length === 0) {\n [bottomLeft, bottomRight] = [LEFT, RIGHT].map(type => bottomCols.map((col, i) => {\n if (i === 0) {\n return headers[type];\n }\n return footers[type];\n }));\n } else {\n bottomLeft = bottomCols.map(() => (leftRows.length > 0 ? leftRows[0].map(blankCellCreator) : []));\n bottomRight = bottomCols.map(() => (rightRows.length > 0 ? rightRows[0].map(blankCellCreator) : []));\n }\n\n lifeCycleManager.notify({\n client: [topLeft, topRight, bottomLeft, bottomRight],\n action: INITIALIZED,\n formalName: FACET_HEADERS\n });\n\n return { topLeft, topRight, bottomLeft, bottomRight };\n }\n\n /**\n *\n *\n * @param {*} datamodel\n * @param {*} config\n * @param {*} componentRegistry\n * @param {*} encoders\n * @return\n * @memberof MatrixResolver\n */\n getMatrices (datamodel, config, componentRegistry, encoders) {\n const context = {\n datamodel,\n componentRegistry,\n encoders,\n resolver: this\n };\n\n return computeMatrices(context, config);\n }\n}\n","/**\n *\n *\n * @export\n * @class ValueMatrix\n */\nclass ValueMatrix {\n\n /**\n *Creates an instance of ValueMatrix.\n * @param {*} matrixArr\n * @memberof ValueMatrix\n */\n constructor (matrixArr) {\n const instancesById = {};\n\n this.matrix(matrixArr);\n this.filter(() => true);\n\n this.each((el, rIdx, cIdx) => {\n const cellValue = el.valueOf();\n if (cellValue && cellValue.id) {\n const id = cellValue.id();\n instancesById[id] = {\n instance: cellValue,\n rowIndex: rIdx,\n colIndex: cIdx\n };\n }\n });\n\n this.instancesById(instancesById);\n }\n\n /**\n *\n *\n * @param {*} id\n * @return\n * @memberof ValueMatrix\n */\n instancesById (...id) {\n if (id.length) {\n this._instancesById = id[0];\n return this;\n }\n return this._instancesById;\n }\n\n /**\n *\n *\n * @param {*} m\n * @return\n * @memberof ValueMatrix\n */\n matrix (...matrix) {\n if (matrix.length) {\n this._matrix = matrix[0];\n return this;\n }\n return this._matrix;\n }\n\n /**\n *\n *\n * @param {*} fn\n * @return\n * @memberof ValueMatrix\n */\n filter (...fn) {\n if (fn.length) {\n this._filterFn = fn[0];\n return this;\n }\n return this._filterFn;\n }\n\n /**\n *\n *\n * @return\n * @memberof ValueMatrix\n */\n width () {\n let rowWidth = 0;\n\n this.matrix().forEach((row) => {\n let currentRowWidth = 0;\n row.forEach((cell) => {\n currentRowWidth += cell.getLogicalSpace().width;\n });\n rowWidth = Math.max(rowWidth, currentRowWidth);\n });\n return rowWidth;\n }\n\n /**\n *\n *\n * @return\n * @memberof ValueMatrix\n */\n height () {\n let rowHeight = 0;\n\n this.matrix().forEach((row) => {\n let currentRowHeight = 0;\n row.forEach((cell) => {\n currentRowHeight = Math.max(currentRowHeight, cell.getLogicalSpace().height);\n });\n rowHeight += currentRowHeight;\n });\n return rowHeight;\n }\n\n /**\n *\n *\n * @param {*} fn\n * @return\n * @memberof ValueMatrix\n */\n each (fn) {\n const matrix = this.matrix();\n const filterFn = this.filter();\n\n matrix.forEach((row, rIndex) => {\n row.forEach((col, cIndex) => {\n if (filterFn(col)) {\n fn(col, rIndex, cIndex, matrix);\n }\n });\n });\n return this;\n }\n\n /**\n *\n *\n * @param {*} id\n * @return\n * @memberof ValueMatrix\n */\n findPlaceHolderById (id) {\n return this.instancesById()[id];\n }\n\n /**\n *\n *\n * @return\n * @memberof ValueMatrix\n */\n getMatrixArray () {\n return this.matrix();\n }\n}\n\nexport default ValueMatrix;\n","import { RetinalEncoder } from '../encoder';\nimport { DATA_UPDATE_COUNTER } from '../enums/defaults';\nimport { getEncoder, getBorders } from '../group-helper';\nimport ValueMatrix from './value-matrix';\nimport localOptions from './local-options';\n\nconst sanitizeRetinalConfig = (retinalConf) => {\n const conf = {};\n for (const key in retinalConf) {\n const confValue = retinalConf[key];\n if (typeof confValue === 'string' || !confValue) {\n conf[key] = {\n field: retinalConf[key]\n };\n } else {\n conf[key] = confValue;\n }\n }\n return conf;\n};\n\n/**\n *\n *\n * @param {*} placeholder\n * @memberof VisualGroup\n */\nconst setMatrixInstances = (context, placeholder) => {\n context._composition.matrices = {\n value: new ValueMatrix(placeholder.values),\n left: new ValueMatrix(placeholder.rows[0]),\n right: new ValueMatrix(placeholder.rows[1]),\n top: new ValueMatrix(placeholder.columns[0]),\n bottom: new ValueMatrix(placeholder.columns[1])\n };\n return context;\n};\n\n/**\n *\n *\n * @param {*} context\n * @returns\n */\nexport const setupChangeListeners = (context) => {\n context.store().registerImmediateListener([...Object.keys(localOptions), DATA_UPDATE_COUNTER], (...params) => {\n const datamodel = context.data();\n const [config, rows, columns, color, shape, size, detail, layers, transform] = params;\n\n if (datamodel && rows[1] && columns[1]) {\n // Get the resolver for the matrices\n const resolver = context.resolver();\n // Prepare configuration for matrix preparation\n let matrixConfig = {\n selection: context.selection(),\n alias: context.alias(),\n globalConfig: config[1] || {},\n rows: rows[1],\n columns: columns[1],\n detail: detail[1],\n layers: layers[1],\n transform: transform[1]\n };\n\n const retinalConfig = sanitizeRetinalConfig({\n color: color[1],\n shape: shape[1],\n size: size[1]\n });\n\n matrixConfig = Object.assign(matrixConfig, retinalConfig);\n // Create the encoders for the group\n const encoders = {};\n encoders.retinalEncoder = new RetinalEncoder();\n encoders.simpleEncoder = getEncoder(layers[1]);\n\n // Set the group type\n context.groupType(encoders.simpleEncoder.constructor.type());\n\n // Get sanitized fields as instances of the Vars Class\n const fields = encoders.simpleEncoder.fieldSanitizer(datamodel, matrixConfig);\n encoders.simpleEncoder.setAxisAndHeaders(config[1] ? config[1].axisFrom : {}, fields);\n // Setting layers for the code\n layers[1] && resolver.layerConfig(layers[1]);\n // Set the row and column axes\n resolver.horizontalAxis(fields.rows, encoders).verticalAxis(fields.columns, encoders);\n // Getting the placeholders\n const placeholderInfo = resolver.getMatrices(datamodel, matrixConfig, context.registry(), encoders);\n context._groupedDataModel = placeholderInfo.dataModels.groupedModel;\n // Set the selection object\n context.selection(placeholderInfo.selection);\n\n // Create retinal axes\n resolver.createRetinalAxes(placeholderInfo.dataModels.parentModel.getFieldsConfig(), retinalConfig,\n encoders);\n\n // Domains are evaluated for each of the axes for commonality\n resolver.setDomains(matrixConfig, placeholderInfo.dataModels, encoders);\n\n // Create matrix instances\n setMatrixInstances(context, placeholderInfo);\n\n // Prepare corner matrices\n context.cornerMatrices(resolver.createHeaders(placeholderInfo, fields, config[1]));\n\n // Set placeholder information\n context.placeholderInfo(placeholderInfo);\n\n context._composition.axes = resolver.axes();\n context.metaData({\n border: getBorders(placeholderInfo, encoders.simpleEncoder)\n });\n }\n return context;\n });\n return context;\n};\n","import { DATA_UPDATE_COUNTER } from '../enums/defaults';\n\nexport const PROPS = {\n alias: {},\n data: {\n sanitization: (context, value) => {\n if (context._data !== value) {\n const store = context.store();\n let hasDataUpdated = store.get(DATA_UPDATE_COUNTER);\n store.commit(DATA_UPDATE_COUNTER, ++hasDataUpdated);\n }\n return value;\n }\n },\n cornerMatrices: {},\n groupType: {},\n matrixInstance: {},\n metaData: {},\n placeholderInfo: {},\n resolver: {},\n registry: {\n sanitization: (context, value) => {\n if (context.resolver) {\n context.resolver().registry(value.cellRegistry);\n }\n return value;\n }\n },\n selection: {},\n store: {}\n};\n","import { transactor, generateGetterSetters } from 'muze-utils';\nimport localOptions from './local-options';\nimport { SimpleGroup } from '../simple-group';\nimport {\n MatrixResolver,\n initStore,\n findInGroup\n} from '../group-helper';\nimport { setupChangeListeners } from './change-listener';\nimport { PROPS } from './props';\nimport {\n CONFIG,\n MOUNT,\n RETINAL,\n Y\n} from '../enums/constants';\n\n/**\n * This class is used to create an instance of a visual group.\n * It extends the SimpleGroup (which is an interface). The visual group takes in a datamodel,\n * and a set of rows and columns, alongwith optional paramters (like color, size, shape).\n *\n * @class VisualGroup\n */\nclass VisualGroup extends SimpleGroup {\n\n /**\n * Creates an instance of VisualGroup. Requires dependencies and other registry options for placeholders\n * and layers that create individual units\n * @param {Object} registry Key value pair of compostions for the group\n * @param {Object} dependencies Dependencies needed to run the group\n * @memberof VisualGroup\n */\n constructor (registry, dependencies) {\n super();\n\n const {\n componentSubRegistry\n } = registry;\n\n this._dependencies = dependencies;\n // Generate getter/setter methods for all properties of the class\n // One can get each property by calling the method and can set it\n // by passing paramaters for the same. Thus, one can chain setter\n // getter methods.\n generateGetterSetters(this, PROPS);\n // Populate the store with default values\n this.store(initStore());\n\n // initialize group compositions\n this._composition = {};\n // store reference to data\n this._data = [];\n // matrix instance store each of the matrices\n this._matrixInstance = {};\n // store reference to mountpoint\n this._mount = null;\n // selection object that takes care of updating of components\n this._selection = {};\n // stores info about the placeholders generated after creation of matrices\n this._placeholderInfo = {};\n // corner matrices are the headers/footers for the application\n this._cornerMatrices = {};\n // Create instance of matrix resolver\n this.resolver(new MatrixResolver(this._dependencies));\n\n // Getting indiviual registered items\n this.registry({\n layerRegistry: componentSubRegistry.layerRegistry.get(),\n cellRegistry: componentSubRegistry.cellRegistry.get()\n });\n // Add local options to the store\n transactor(this, localOptions, this.store().model);\n // Register listeners\n setupChangeListeners(this);\n }\n\n matrixInstance (...matrices) {\n if (matrices.length) {\n return this;\n }\n return this.composition().matrices;\n }\n\n /**\n * Returns the composition of the Group\n *\n * @readonly\n * @memberof VisualGroup\n */\n composition (...params) {\n if (params.length) {\n return this;\n }\n return this._composition;\n }\n\n /**\n * Locks the model to prevent change listeners to be triggered until unlocked\n *\n * @return {Object} Instance of class VisualGroup\n * @memberof VisualGroup\n */\n lockModel () {\n this.store().model.lock();\n return this;\n }\n\n /**\n * Unlocks the model so that all change listeners can be triggered\n *\n * @return {Object} Instance of class VisualGroup\n * @memberof VisualGroup\n */\n unlockModel () {\n this.store().model.unlock();\n return this;\n }\n\n /**\n *\n *\n * @param {*} variable\n * @return\n * @memberof VisualGroup\n */\n where (variable) {\n return findInGroup(variable, this.resolver().getAllFields());\n }\n\n /**\n *\n *\n * @param {*} type\n * @return\n * @memberof VisualGroup\n */\n getAxes (type) {\n if (type === RETINAL) {\n return this.resolver().getRetinalAxes();\n }\n return this.resolver().getSimpleAxes(type);\n }\n\n /**\n *\n *\n * @return\n * @memberof VisualGroup\n */\n getCells (type) {\n return this.resolver()[`${type}Cells`]();\n }\n\n /**\n *\n *\n * @param {*} channel\n * @return\n * @memberof VisualGroup\n */\n getFieldsFromChannel (channel) {\n const {\n rowProjections,\n colProjections\n } = this.resolver().getAllFields();\n\n return channel === Y ? rowProjections : colProjections;\n }\n\n /**\n *\n *\n * @param {*} facetKey\n * @return\n * @memberof VisualGroup\n */\n getCellsByFacetKey (facetKey) {\n const resolver = this.resolver();\n const cells = resolver.rowCells()[facetKey] || resolver.colCells()[facetKey] || [];\n return cells;\n }\n\n /**\n *\n *\n * @param {*} facetKey\n * @return\n * @memberof VisualGroup\n */\n getAxesByFacetKey (axisType, facetKey) {\n const resolver = this.resolver();\n const cells = resolver.rowCells()[facetKey] || resolver.colCells()[facetKey];\n const axes = cells[0].valueOf().axes()[axisType] || [];\n\n return axes;\n }\n\n /**\n * This method is used to return a serialized representation of the instance's properties.\n *\n * @return {Object} Object with config proprties.\n * @memberof VisualGroup\n */\n serialize () {\n const store = this.store();\n\n return {\n [CONFIG]: store.get(CONFIG),\n [MOUNT]: store.get(MOUNT)\n };\n }\n\n getGroupByData () {\n return this._groupedDataModel;\n }\n}\n\nexport default VisualGroup;\n","import { PersistentBehaviour, SELECTION } from '@chartshq/muze-firebolt';\n\nexport default class SelectBehaviour extends PersistentBehaviour {\n static formalName () {\n return 'select';\n }\n\n setSelectionSet (addSet, selectionSet) {\n if (addSet === null) {\n selectionSet.reset();\n } else if (addSet.length) {\n // new add set\n const existingRemoveSet = addSet.filter(d => selectionSet._set[d] === SELECTION.SELECTION_OLD_EXIT\n || selectionSet._set[d] === SELECTION.SELECTION_NEW_EXIT);\n // existing add set\n if (existingRemoveSet.length) {\n selectionSet.updateEntry();\n selectionSet.add(existingRemoveSet);\n } else {\n selectionSet.updateExit();\n selectionSet.remove(addSet);\n }\n const { exitSet } = selectionSet.getSets();\n const mergedExitSet = [...new Set(exitSet[1]), ...new Set(exitSet[0])];\n const completeSetCount = selectionSet.getCompleteSet().length;\n if (exitSet[1].length !== completeSetCount && mergedExitSet.length === completeSetCount) {\n selectionSet.reset();\n }\n } else {\n selectionSet.remove(selectionSet.getCompleteSet());\n }\n return this;\n }\n}\n","import { BEHAVIOURS, ACTIONS } from '@chartshq/muze-firebolt';\n\nconst CLASSPREFIX = 'muze';\n\nexport const actionBehaviourMap = {\n [ACTIONS.DRAG]: {\n target: `.${CLASSPREFIX}-gradient-rect`,\n behaviours: [BEHAVIOURS.BRUSH]\n },\n [ACTIONS.HOVER]: {\n target: [`.${CLASSPREFIX}-legend-columns`],\n behaviours: [BEHAVIOURS.HIGHLIGHT]\n },\n [ACTIONS.CLICK]: {\n target: [`.${CLASSPREFIX}-legend-columns`],\n behaviours: [BEHAVIOURS.SELECT]\n }\n};\n\nexport const propagationBehaviourMap = {\n [BEHAVIOURS.SELECT]: BEHAVIOURS.FILTER,\n [BEHAVIOURS.BRUSH]: BEHAVIOURS.HIGHLIGHT\n};\n","import * as BEHAVIOURS from '../enums/behaviours';\nimport * as sideEffects from '../enums/side-effects';\n\nexport const behaviourEffectMap = {\n [BEHAVIOURS.BRUSH]: [sideEffects.SELECTIONBOX, {\n name: sideEffects.Highlighter,\n options: {\n strategy: 'fade'\n }\n }],\n [BEHAVIOURS.HIGHLIGHT]: [sideEffects.Highlighter],\n select: [{\n name: sideEffects.Highlighter,\n options: {\n strategy: 'fade'\n }\n }]\n};\n\nexport const propagationSideEffects = {\n [BEHAVIOURS.BRUSH]: [{\n name: sideEffects.Highlighter,\n options: {\n strategy: 'fade'\n }\n }],\n [BEHAVIOURS.HIGHLIGHT]: [{\n name: sideEffects.Highlighter,\n options: {\n strategy: 'fade'\n }\n }],\n [BEHAVIOURS.SELECT]: ['filter']\n};\n\n","export const BRUSH = 'brush';\nexport const HIGHLIGHT = 'highlight';\nexport const TOOLTIP = 'tooltip';\nexport const FILTER = 'filter';\nexport const SELECT = 'select';\n\n","export const SELECTIONBOX = 'selectionBox';\nexport const Highlighter = 'highlighter';\n\n","export const CLASSPREFIX = 'muze';\nexport const IDFIELD = '__id__';\nexport const CONFIG = 'config';\nexport const DATAMODEL = 'dataModel';\nexport const AXES = 'axes';\nexport const LAYERDEFS = 'layerDef';\nexport const WIDTH = 'width';\nexport const HEIGHT = 'height';\nexport const MOUNTPOINT = 'mountPoint';\nexport const GRIDLINEPARENTGROUPCLASS = 'grid-lines';\nexport const TRANSFORM = 'transform';\nexport const CONSOLIDATED = 'consolidated';\nexport const FRAGMENTED = 'fragmented';\nexport const DEFAULTCOLOR = '#F44336';\nexport const DEFAULTSIZE = 50;\nexport const DEFAULTSHAPE = 'circle';\nexport const STEP = 'step';\nexport const GRADIENT = 'gradient';\nexport const ORDINAL = 'ordinal';\nexport const SCALE_FUNCTIONS = {\n size: 'getSize',\n shape: 'getShape',\n color: 'getColor'\n};\nexport const TOP = 'top';\nexport const LEFT = 'left';\nexport const RIGHT = 'right';\nexport const BOTTOM = 'bottom';\nexport const HORIZONTAL = 'horizontal';\nexport const VERTICAL = 'vertical';\nexport const CENTER = 'center';\nexport const VALUE = 'value';\nexport const PATH = 'path';\nexport const SHAPE = 'shape';\nexport const ICON = 'icon';\nexport const RECT = 'rect';\nexport const START = 'start';\nexport const UPPER = 'upper';\nexport const LOWER = 'lower';\nexport const END = 'end';\nexport const SIZE = 'size';\nexport const DISCRETE = 'discrete';\nexport const MEASURE = 'measure';\n\n","import { assembleModelFromIdentifiers, getDataModelFromRange } from 'muze-utils';\nimport { propagationBehaviourMap } from './action-behaviour-map';\nimport { propagationSideEffects } from './behaviour-effect-map';\nimport { STEP, GRADIENT, DISCRETE, MEASURE } from '../enums/constants';\n\nexport const propagate = (firebolt, action, selectionSet, config = {}) => {\n let propagationData;\n const type = firebolt.context.constructor.type();\n const payload = config.payload;\n const data = firebolt.context.data();\n const metaData = firebolt.context.metaData();\n const fieldType = metaData.getData().schema[0].type;\n\n const propPayload = {};\n const sourceId = firebolt.context._id;\n propPayload.action = propagationBehaviourMap[action] || action;\n propPayload.sideEffects = propagationSideEffects[action];\n propPayload.sourceCanvas = firebolt.context.canvasAlias();\n const isMutableAction = firebolt._actions.behavioural[propPayload.action].constructor.mutates();\n if (payload.criteria === null) {\n propagationData = null;\n } else {\n const entrySet = selectionSet.mergedEnter;\n let values = data.filter(d => entrySet.uids.indexOf(d.id) !== -1).map(d => d.value);\n if (type === STEP || (type === DISCRETE && fieldType === MEASURE)) {\n const field = Object.keys(payload.criteria || {})[0];\n values = data.filter(d => entrySet.uids.indexOf(d.id) !== -1).map(d => d.range);\n propagationData = values.length ? metaData.select((fields) => {\n let check = false;\n for (let i = 0; i < values.length; i++) {\n check = fields[field].value >= values[i][0] && fields[field].value <= values[i][1];\n if (check === true) {\n break;\n }\n }\n return check;\n }, {\n saveChild: false\n }) : null;\n } else if (type === GRADIENT) {\n propagationData = getDataModelFromRange(metaData, payload.criteria);\n } else if (values.length) {\n propagationData = assembleModelFromIdentifiers(metaData, [payload.criteria[0], ...values.map(d => [d])]);\n } else {\n propPayload.criteria = null;\n propagationData = metaData.select(() => true, {\n saveChild: false\n });\n }\n }\n\n let propagateInterpolatedValues = false;\n\n if (propagationData) {\n const schema = propagationData.getSchema();\n propagateInterpolatedValues = schema.every(d => d.type === fieldType.MEASURE);\n }\n\n const propConfig = {\n sourceId: `legend-${sourceId}`,\n payload: propPayload,\n criteria: propPayload.criteria === null ? null : propagationData,\n isMutableAction,\n propagateInterpolatedValues,\n action: propPayload.action\n };\n\n metaData.propagate(propagationData, propConfig, true);\n};\n","import { Firebolt } from '@chartshq/muze-firebolt';\nimport { propagate } from './helper';\nimport { STEP, GRADIENT } from '../enums/constants';\n\n/**\n * This class manages the interactions of legend.\n * @export\n * @class LegendFireBolt\n * @extends {Firebolt}\n */\nexport class LegendFireBolt extends Firebolt {\n constructor (...params) {\n super(...params);\n this.initializeSideEffects();\n }\n\n getPropagationSelectionSet (selectionSet) {\n return selectionSet[0];\n }\n\n propagate (behaviourName, payload, selectionSet) {\n propagate(this, behaviourName, selectionSet, {\n payload\n });\n }\n\n getAddSetFromCriteria (criteria) {\n let values;\n let uniqueIds;\n const type = this.context.constructor.type();\n\n if (criteria === null) {\n uniqueIds = null;\n } else if (type === STEP) {\n values = Object.values(criteria);\n uniqueIds = this.context.data().filter(d => values.indexOf(d.range) !== -1).map(d => d.id);\n } else if (type === GRADIENT) {\n uniqueIds = [];\n } else {\n values = criteria[1];\n if (values) {\n uniqueIds = this.context.data().filter(d => values.indexOf(d.value) !== -1).map(d => d.id);\n } else {\n values = Object.values(criteria);\n uniqueIds = this.context.data().filter(d => values.indexOf(d.range) !== -1).map(d => d.id);\n }\n }\n return {\n uids: uniqueIds,\n model: null\n };\n }\n\n getFullData () {\n return null;\n }\n}\n","import {\n getEvent,\n getD3Drag\n } from 'muze-utils';\n\n/**\n * Adds dragging action to the target element.\n * @param {firebolt} firebolt firebolt\n * @param {SVGElement} targetEl Element on which brushing action is needed.\n * @param {Array} behaviours Array of behaviours\n */\n/* istanbul ignore next */ const drag = firebolt => (targetEl, behaviours) => {\n let startPos = {};\n let endPos = {};\n let payload;\n const d3Drag = getD3Drag();\n const context = firebolt.context;\n const boundingBox = context.measurement().gradientDimensions;\n const axisType = context.config().align === 'horizontal' ? 'x' : 'y';\n const axisScale = context.axis().source().scale();\n const rangeShifter = axisScale.range()[axisType === 'x' ? 0 : 1];\n\n targetEl.call(d3Drag().on('start', () => {\n const event = getEvent();\n startPos = {\n x: event.x,\n y: event.y\n };\n }).on('drag', () => {\n const event = getEvent();\n\n endPos = {\n x: event.x,\n y: event.y\n };\n endPos.x = Math.max(0, Math.min(endPos.x, boundingBox.width));\n endPos.y = Math.max(0, Math.min(endPos.y, boundingBox.height));\n\n payload = {\n criteria: {\n [context.fieldName()]: [axisScale.invert(startPos[axisType] + rangeShifter * 2),\n axisScale.invert(endPos[axisType] + rangeShifter * 2)].sort((a, b) => a - b)\n }\n };\n behaviours.forEach(behaviour => firebolt.dispatchBehaviour(behaviour, payload));\n }).on('end', () => {\n const event = getEvent();\n\n endPos = {\n x: event.x,\n y: event.y\n };\n endPos.x = Math.max(0, Math.min(endPos.x, boundingBox.width));\n endPos.y = Math.max(0, Math.min(endPos.y, boundingBox.height));\n if (startPos[axisType] === endPos[axisType]) {\n payload = {\n criteria: {}\n };\n } else {\n payload = {\n criteria: {\n [context.fieldName()]: [axisScale.invert(startPos[axisType] + rangeShifter * 2),\n axisScale.invert(endPos[axisType] + rangeShifter * 2)].sort((a, b) => a - b)\n }\n };\n }\n behaviours.forEach(behaviour => firebolt.dispatchBehaviour(behaviour, payload));\n }));\n};\n\nexport default drag;\n","/**\n * Adds mouse interactions to target element.\n * @param {Firebolt} Firebolt instance of firebolt.\n * @param {SVGElement} targetEl Element on which the event listeners will be attached.\n * @param {Array} behaviours Array of behaviours\n */\n/* istanbul ignore next */ const hover = firebolt => (targetEl, behaviours) => {\n const dispatchBehaviour = function (args) {\n const payload = {\n criteria: firebolt.context.getCriteriaFromData(args)\n };\n behaviours.forEach(behaviour => firebolt.dispatchBehaviour(behaviour, payload));\n event.stopPropagation();\n };\n\n targetEl.on('mouseover', dispatchBehaviour)\n .on('mousemove', dispatchBehaviour)\n .on('mouseout', () => {\n behaviours.forEach(behaviour => firebolt.dispatchBehaviour(behaviour, {\n criteria: null\n }));\n event.stopPropagation();\n });\n};\n\nexport default hover;\n","/**\n * Adds mouse interactions to target element.\n * @param {VisualUnit} instance instance of visual unit.\n * @param {SVGElement} targetEl Element on which the event listeners will be attached.\n * @param {Array} behaviours Array of behaviours\n */\nconst click = firebolt => (targetEl, behaviours) => {\n const dispatchBehaviour = function (args) {\n const payload = {\n criteria: firebolt.context.getCriteriaFromData(args)\n };\n behaviours.forEach(behaviour => firebolt.dispatchBehaviour(behaviour, payload));\n };\n\n targetEl.on('click', dispatchBehaviour);\n};\n\nexport default click;\n","import drag from './drag';\nimport hover from './hover';\nimport click from './click';\nimport * as ACTIONNAMES from '../../enums/actions';\n\nexport const physicalActions = {\n [ACTIONNAMES.DRAG]: drag,\n [ACTIONNAMES.HOVER]: hover,\n [ACTIONNAMES.CLICK]: click\n};\n\n","export const DRAG = 'drag';\nexport const HOVER = 'hover';\nexport const SELECTIONDRAG = 'selectiondrag';\nexport const CLICK = 'click';\n","import {\n getMousePos,\n getEvent,\n getD3Drag\n } from 'muze-utils';\nimport { HEIGHT, WIDTH, HORIZONTAL } from '../../enums/constants';\n\nconst getSelectionCriteria = (subject, axis, measures) => {\n let criteria = [];\n const {\n axisScale,\n axisType\n } = axis;\n const {\n startPos,\n endPos,\n selectionBoxMeasure,\n drawingInfMeasure,\n offset\n } = measures;\n const subjectStartPoint = subject[axisType];\n\n if (startPos[axisType] === endPos[axisType]) {\n criteria = [];\n } else if (subjectStartPoint + selectionBoxMeasure >= drawingInfMeasure + offset) {\n criteria = [axisScale.invert(drawingInfMeasure + offset - selectionBoxMeasure),\n axisScale.invert(drawingInfMeasure + offset)];\n } else if (subjectStartPoint - offset < offset) {\n criteria = [axisScale.invert(offset * 2), axisScale.invert(selectionBoxMeasure + offset * 2)];\n } else {\n criteria = [axisScale.invert(subjectStartPoint), axisScale.invert(subjectStartPoint + selectionBoxMeasure)];\n }\n axisType === 'x' ? criteria : criteria.reverse();\n return criteria;\n};\n\nexport const selectionBoxDrag = firebolt => (targetEl, behaviours) => {\n let startPos = {};\n let payload;\n const endPos = {};\n const d3Drag = getD3Drag();\n const context = firebolt.context;\n const axisScale = context.axis().source().scale();\n const axisType = context.config().align === HORIZONTAL ? 'x' : 'y';\n const drawingInfMeasure = context.measurement().gradientDimensions[axisType === 'x' ?\n WIDTH : HEIGHT];\n const offset = axisScale.range()[axisType === 'x' ? 0 : 1];\n const measures = {\n drawingInfMeasure,\n offset\n };\n let subject = {};\n\n targetEl.call(d3Drag().on('start', function () {\n const event = getEvent();\n startPos = getMousePos(this, event.sourceEvent);\n subject = event.subject;\n }).on('drag', () => {\n const event = getEvent();\n const selectionBoxMeasure = subject[axisType === 'x' ? WIDTH : HEIGHT];\n\n subject.x += event.dx;\n subject.y += event.dy;\n\n measures.selectionBoxMeasure = selectionBoxMeasure;\n measures.startPos = startPos;\n measures.endPos = endPos;\n const criteria = getSelectionCriteria(subject, { axisScale, axisType }, measures);\n\n payload = {\n criteria: {\n [context.fieldName()]: criteria\n },\n fadeOut: true\n };\n firebolt.dispatchBehaviour(behaviours[0], payload);\n }).on('end', () => {\n const event = getEvent();\n const selectionBoxMeasure = subject[axisType === 'x' ? WIDTH : HEIGHT];\n measures.selectionBoxMeasure = selectionBoxMeasure;\n measures.startPos = startPos;\n measures.endPos = endPos;\n const criteria = getSelectionCriteria(event, { axisScale, axisType }, measures);\n payload = {\n criteria: {\n [context.fieldName()]: criteria\n },\n fadeOut: true,\n config: {\n transition: {\n duration: 200\n }\n }\n };\n firebolt.dispatchBehaviour(behaviours[0], payload);\n }));\n};\n\n","import { makeElement } from 'muze-utils';\nimport { SpawnableSideEffect } from '@chartshq/muze-firebolt';\nimport { CLASSPREFIX, HEIGHT, WIDTH, HORIZONTAL, RECT } from '../../../enums/constants';\nimport { SELECTIONBOX } from '../../../enums/side-effects';\nimport { selectionBoxDrag } from '../../physical/selection-box-drag';\nimport './styles.scss';\n\n/**\n * This class is used to create a selection box which is used by visual unit for brushing and\n * selection in the canvas.\n * @class SelectionBox\n */\n/* istanbul ignore next */ class SelectionBox extends SpawnableSideEffect {\n static formalName () {\n return SELECTIONBOX;\n }\n\n /**\n * It returns the default configuration needed by selectionbox.\n * @return {Object} Default configuration of the selection box.\n */\n static defaultConfig () {\n return {\n className: 'legend-selection-box',\n classPrefix: CLASSPREFIX\n };\n }\n\n /**\n * Draws the selectionbox with the specified dimensions.\n */\n /* istanbul ignore next */ apply (selectionSet, payload) {\n let x;\n let y;\n let width;\n let height;\n const firebolt = this.firebolt;\n const context = firebolt.context;\n const config = this.config();\n const axis = context.axis().source();\n const className = `${config.classPrefix}-${config.className}`;\n\n const domain = payload.criteria[firebolt.context.fieldName()];\n const axisScale = axis.scale();\n const range = domain ? [axis.getScaleValue(domain[0]), axis.getScaleValue(domain[1])] : [];\n\n const axisType = context.config().align === HORIZONTAL ? 'x' : 'y';\n\n const gradientDimension = firebolt.context.measurement().gradientDimensions[axisType === 'x' ?\n HEIGHT : WIDTH];\n\n const rangeShifter = axisScale.range()[axisType === 'x' ? 0 : 1];\n const legendGradContainer = context.getDrawingContext().svgContainer;\n const legendSelGroup = makeElement(legendGradContainer, 'g', [1], `${config.classPrefix}-selection-box-group`);\n\n if (firebolt.context.config().align === HORIZONTAL) {\n x = range[0] - rangeShifter || 0;\n y = 0;\n width = range[1] - range[0] || 0;\n height = gradientDimension;\n } else {\n x = 0;\n y = range[1] - rangeShifter || 0;\n height = range[0] - range[1] || 0;\n width = gradientDimension;\n }\n const enterFn = function (el) {\n selectionBoxDrag(firebolt)(el, ['brush']);\n };\n const selBox = makeElement(legendSelGroup, RECT, [{ domain, x, y, width, height }], className,\n { enter: enterFn });\n selBox.attr('y', y)\n .attr('x', x)\n .attr(WIDTH, width)\n .attr(HEIGHT, height);\n }\n}\n\nexport default SelectionBox;\n\n","import { selectElement } from 'muze-utils';\n\nexport const strategies = (firebolt) => {\n const context = firebolt.context;\n const classed = (set, className, change) => {\n const classPrefix = context.config().classPrefix;\n selectElement(context.mount())\n .selectAll(`.${classPrefix}-legend-columns`)\n .filter(d => set.uids.indexOf(d.id) !== -1)\n .selectAll('div')\n .classed(className, change);\n };\n\n return {\n fade: (set, config = {}) => {\n const classPrefix = context.config().classPrefix;\n if (!set.mergedEnter.length && !set.mergedExit.length) {\n classed(set.completeSet, config.className || `${classPrefix}-legend-fadeout`, false);\n } else {\n classed(set.mergedExit, config.className || `${classPrefix}-legend-brighten`, false);\n classed(set.mergedExit, config.className || `${classPrefix}-legend-fadeout`, true);\n classed(set.mergedEnter, config.className || `${classPrefix}-legend-fadeout`, false);\n }\n },\n brighten: (set, config = {}) => {\n const classPrefix = context.config().classPrefix;\n if (!set.mergedEnter.length && !set.mergedExit.length) {\n classed(set.completeSet, config.className || `${classPrefix}-legend-brighten`, false);\n } else {\n classed(set.mergedEnter, config.className || `${classPrefix}-legend-brighten`, true);\n classed(set.mergedExit, config.className || `${classPrefix}-legend-brighten`, false);\n }\n }\n };\n};\n","import { GenericSideEffect } from '@chartshq/muze-firebolt';\nimport { strategies } from './strategies';\nimport { Highlighter } from '../../../enums/side-effects';\n\nexport default class LegendHighlighter extends GenericSideEffect {\n constructor (...params) {\n super(...params);\n this._strategies = strategies(this.firebolt);\n this._strategy = 'brighten';\n }\n\n static formalName () {\n return Highlighter;\n }\n\n apply (selectionSet, payload, options = {}) {\n const strategy = this._strategies[options.strategy || this._strategy];\n\n strategy(selectionSet, this);\n }\n}\n","import { mergeRecursive } from 'muze-utils';\n\nexport const PROPS = {\n config: {\n sanitization: (context, value) => mergeRecursive(context._config || {}, value)\n },\n data: {},\n fieldName: {},\n legendContainer: {},\n measurement: {\n sanitization: (context, value) => {\n const measurement = mergeRecursive(context._measurement, value);\n ['padding', 'border', 'margin'].forEach((space) => {\n measurement[space] = Math.min(measurement[space] > 0 ? measurement[space] : 0,\n measurement.maxWidth * 0.1, measurement.maxHeight * 0.1);\n });\n return measurement;\n }\n },\n logicalSpace: {},\n metaData: {},\n range: {\n sanitization: (context, value) => {\n context.scale().range(value);\n context.resetLogicalSpace();\n context.store().commit('range', value);\n return value;\n }\n },\n scale: {},\n smartTicks: {},\n store: {},\n title: {\n sanitization: (context, value) => mergeRecursive(context._title || {}, value)\n }\n};\n","import { getSymbol } from 'muze-utils';\nimport {\n CENTER,\n LEFT,\n RIGHT\n} from '../enums/constants';\n\nexport const ALIGN = {\n HORIZONTAL: 'horizontal',\n VERTICAL: 'vertical'\n};\n\nexport const DEFAULT_MEASUREMENT = {\n height: 30,\n width: 30,\n maxWidth: Infinity,\n maxHeight: Infinity,\n padding: 2,\n margin: 2,\n border: 1\n};\n\nexport const LEGEND_TITLE = {\n text: '',\n orientation: (pos) => {\n if (pos === LEFT || pos === RIGHT) {\n return LEFT;\n } return CENTER;\n }\n};\n\nexport const DEFAULT_CONFIG = {\n classPrefix: 'muze',\n\n formatter: {\n bounds: {\n lower: 'less than',\n upper: 'more than'\n }\n },\n item: {\n text: {\n orientation: 'right',\n width: 10,\n formatter: val => val\n },\n icon: {\n className: 'legend-icon',\n height: 20,\n width: 20,\n color: 'rgba(0,0,0,.5)',\n type: 'square'\n }\n }\n};\n\n/**\n * Creates a map of pre defined icons\n *\n * @param {string} icon Accepts a icon name like 'square', 'cross', 'diamond' etc\n * @return {Object} icon object which can be used to draw the icons\n */\nexport const ICON_MAP = (icon) => {\n if (icon && typeof (icon) === 'string') {\n return getSymbol(icon);\n } return icon;\n};\n","import { makeElement, numberInterpolator } from 'muze-utils';\n\nimport {\n SCALE_FUNCTIONS,\n WIDTH,\n HEIGHT,\n LEFT,\n RIGHT,\n TOP,\n BOTTOM\n} from '../enums/constants';\n\n/**\n *\n *\n * @param {*} scale\n * @returns\n */\nexport const getScaleInfo = (scale) => {\n const scaleType = scale.constructor.type();\n const domain = scale.uniqueValues();\n const steps = scale.config().stops || 1;\n const scaleFn = SCALE_FUNCTIONS[scaleType];\n\n return { scaleType, domain, steps, scaleFn };\n};\n\n/**\n *\n *\n * @param {*} domain\n * @param {*} steps\n * @returns\n */\nexport const getInterpolatedData = (domain, steps) => {\n const domainForLegend = [];\n const interpolatedFn = numberInterpolator()(domain[0], domain[1]);\n\n for (let i = 0; i <= steps; i++) {\n domainForLegend[i] = interpolatedFn(i / steps);\n }\n return domainForLegend;\n};\n\n/**\n *\n *\n * @param {*} container\n * @param {*} text\n * @param {*} measurement\n * @param {*} classPrefix\n */\nexport const titleCreator = (container, title, measurement, config) =>\n makeElement(container, 'div', [1], `${config.classPrefix}-legend-title`)\n .style(WIDTH, '100%')\n .style(HEIGHT, `${measurement.height}px`)\n .style('padding-left', `${measurement.padding}px`)\n .style('padding-right', `${measurement.padding}px`)\n .style('border-bottom-width', `${measurement.border}px`)\n .style('text-align', title.orientation instanceof Function ?\n title.orientation(config.position) : title.orientation)\n .text(title.text)\n .node();\n\n/**\n *\n *\n * @param {*} data\n * @param {*} prop\n * @param {*} labelManager\n * @return\n */\nexport const getMaxMeasures = (data, prop, labelManager) => {\n let maxHeight = -Infinity;\n let maxWidth = -Infinity;\n\n data.forEach((item) => {\n const value = prop ? item[prop] : item;\n const space = labelManager.getOriSize(value);\n maxHeight = Math.max(space.height + 2, maxHeight);\n maxWidth = Math.max(space.width + 2, maxWidth);\n });\n\n return { height: maxHeight, width: maxWidth };\n};\n\n/**\n *\n *\n * @param {*} data\n * @param {*} prop\n * @param {*} labelManager\n * @return\n */\nexport const getItemMeasures = (data, prop, labelManager, formatter) => {\n const space = [];\n\n data.forEach((item, index) => {\n const value = prop ? item[prop] : item;\n const { height, width } = labelManager.getOriSize(formatter(value));\n space[index] = { height: height + 1, width: width + 1 };\n });\n return space;\n};\n\n/**\n *\n *\n * @param {*} textOrientation\n * @param {*} effPadding\n * @param {*} titleSpace\n * @return\n * @memberof Legend\n */\nexport const computeItemSpaces = (config, measures, data) => {\n let totalHeight = 0;\n let totalWidth = 0;\n let maxItemSpaces = {\n width: 0, height: 0\n };\n const {\n effPadding,\n titleWidth,\n labelSpaces,\n titleHeight,\n maxWidth\n } = measures;\n const {\n item,\n align\n } = config;\n const {\n icon,\n text\n } = item;\n const textOrientation = text.orientation;\n const itemSpaces = [];\n const iconSpaces = [];\n let maxIconWidth = 0;\n labelSpaces.forEach((labelSpace, i) => {\n const itemSpace = { width: 0, height: 0 };\n const iconSpace = { width: 0, height: 0 };\n const datum = data[i] || {};\n // Compute each legend item height/width\n if (textOrientation === LEFT || textOrientation === RIGHT) {\n // Get label, icon and item widths\n labelSpace.width += effPadding;\n iconSpace.width = (datum.size ? 2 * Math.sqrt(datum.size / Math.PI) : icon.width) + effPadding;\n maxIconWidth = Math.max(iconSpace.width, maxIconWidth);\n itemSpace.width = labelSpace.width + maxIconWidth;\n\n // Get label, icon and item heights\n labelSpace.height = Math.max(labelSpace.height, icon.height) + effPadding;\n iconSpace.height = labelSpace.height;\n itemSpace.height = labelSpace.height;\n } else {\n // Get label, icon and item widths\n labelSpace.width = Math.max(labelSpace.width, datum.size ? 2 * Math.sqrt(datum.size / Math.PI)\n : icon.width) + effPadding;\n iconSpace.width = labelSpace.width;\n itemSpace.width = labelSpace.width;\n maxIconWidth = Math.max(iconSpace.width, maxIconWidth);\n\n // Get label, icon and item heights\n labelSpace.height += effPadding;\n iconSpace.height = icon.height + effPadding;\n itemSpace.height = labelSpace.height + iconSpace.height;\n }\n // Compute height and width of legend for each alignment\n if (align === 'horizontal') {\n totalHeight = Math.max(totalHeight, itemSpace.height);\n } else {\n totalHeight += itemSpace.height;\n totalWidth = Math.max(totalWidth, itemSpace.width, titleWidth) + effPadding;\n }\n maxItemSpaces = {\n width: Math.max(itemSpace.width, maxItemSpaces.width),\n height: Math.max(itemSpace.height, maxItemSpaces.height)\n };\n itemSpaces.push(itemSpace);\n iconSpaces.push(iconSpace);\n });\n\n itemSpaces.forEach((itemSpace, i) => {\n if (align === 'horizontal') {\n itemSpace.height = totalHeight;\n iconSpaces[i].width = maxIconWidth;\n if (textOrientation === LEFT || textOrientation === RIGHT) {\n labelSpaces[i].height = totalHeight;\n iconSpaces[i].height = totalHeight;\n itemSpaces[i].width = labelSpaces[i].width + maxIconWidth;\n } else {\n labelSpaces[i].width = maxIconWidth;\n itemSpaces[i].width = maxIconWidth;\n labelSpaces[i].width = maxIconWidth;\n }\n totalWidth = Math.max(totalWidth + itemSpaces[i].width, titleWidth);\n } else {\n itemSpace.width = Math.max(totalWidth, maxWidth);\n if (textOrientation === TOP || textOrientation === BOTTOM) {\n labelSpaces[i].width = totalWidth;\n iconSpaces[i].width = totalWidth;\n maxIconWidth = totalWidth;\n } else {\n iconSpaces[i].width = maxIconWidth;\n itemSpaces[i].width = labelSpaces[i].width + maxIconWidth;\n labelSpaces[i].width = maxItemSpaces.width - maxIconWidth;\n totalWidth = Math.max(totalWidth, itemSpace.width, titleWidth) + effPadding;\n }\n }\n });\n totalHeight += titleHeight + effPadding;\n\n return { totalHeight, totalWidth, itemSpaces, iconSpaces, maxItemSpaces, maxIconWidth };\n};\n\n/**\n *\n *\n * @param {*} type\n * @param {*} scaleInfo\n * @param {*} domainInfo\n * @returns\n */\nexport const getDomainBounds = (type, scaleInfo, domainInfo) => {\n const {\n scaleFn,\n scaleType,\n scale\n } = scaleInfo;\n const {\n domain,\n domainBounds,\n domainLeg,\n steps\n } = domainInfo;\n const ele = domain[type === 'lower' ? 0 : domain.length - 1];\n const step = steps[type === 'lower' ? 0 : steps.length - 1];\n\n return {\n [scaleType]: scaleType === 'size' ? scale[scaleFn](ele) * scale.getScaleFactor() : scale[scaleFn](ele),\n value: domainBounds[type],\n id: type === 'lower' ? 0 : domainLeg.length + 2,\n range: [ele, step]\n };\n};\n","import {\n makeElement,\n selectElement,\n getUniqueId,\n getSmartComputedStyle,\n generateGetterSetters,\n mergeRecursive\n} from 'muze-utils';\nimport { behaviouralActions } from '@chartshq/muze-firebolt';\nimport * as legendBehaviours from '../firebolt/behavioural';\n\nimport { LegendFireBolt } from '../firebolt/legend-firebolt';\nimport { actionBehaviourMap } from '../firebolt/action-behaviour-map';\nimport { physicalActions } from '../firebolt/physical';\nimport * as sideEffects from '../firebolt/side-effects';\nimport { behaviourEffectMap } from '../firebolt/behaviour-effect-map';\nimport { VALUE, PATH } from '../enums/constants';\nimport { PROPS } from './props';\nimport { DEFAULT_MEASUREMENT, DEFAULT_CONFIG, LEGEND_TITLE } from './defaults';\nimport { getItemMeasures, titleCreator, computeItemSpaces } from './legend-helper';\n\n/**\n * Creates a Legend from the axes of a canvas\n *\n * @param {Object} dependencies : legend data\n * @class SimpleLegend\n */\nexport default class SimpleLegend {\n\n /**\n * Creates an instance of Legend.\n * @param {Object} dependencies Set of dependencies required by the legend\n * @memberof Legend\n */\n constructor (dependencies) {\n this._data = [];\n this._metaData = [];\n this._mount = null;\n this._fieldName = null;\n this._title = Object.assign({}, LEGEND_TITLE);\n this._metaData = null;\n this._labelManager = dependencies.labelManager;\n this._cells = dependencies.cells;\n this._id = getUniqueId();\n this._measurement = Object.assign({}, this.constructor.defaultMeasurement());\n this._config = mergeRecursive({}, this.constructor.defaultConfig());\n\n generateGetterSetters(this, PROPS);\n this._computedStyle = getSmartComputedStyle(selectElement('body'),\n `${this.config().classPrefix}-legend-item-info`);\n\n this._firebolt = new LegendFireBolt(this, {\n behavioural: Object.assign({}, behaviouralActions, legendBehaviours),\n physical: physicalActions,\n physicalBehaviouralMap: actionBehaviourMap\n }, sideEffects, behaviourEffectMap);\n }\n\n id () {\n return this._id;\n }\n /**\n * Initializes an instance of the class\n *\n * @static\n * @param {Object} dependencies Set of dependencies required by the legend\n * @return {Instance} returns a new instance of Legend\n * @memberof Legend\n */\n static create (dependencies) {\n return new SimpleLegend(dependencies);\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof SimpleLegend\n */\n static defaultConfig () {\n return DEFAULT_CONFIG;\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof SimpleLegend\n */\n static defaultMeasurement () {\n return DEFAULT_MEASUREMENT;\n }\n\n /**\n *\n *\n * @readonly\n * @memberof SimpleLegend\n */\n firebolt (...params) {\n if (params.length) {\n return this;\n }\n return this._firebolt;\n }\n\n /**\n *\n *\n * @return\n * @memberof Legend\n */\n elemType () {\n return PATH;\n }\n\n canvasAlias (...alias) {\n if (alias.length) {\n this._canvasAlias = alias[0];\n return this;\n }\n return this._canvasAlias;\n }\n\n /**\n *\n *\n * @return\n * @memberof Legend\n */\n mount (...params) {\n if (params.length) {\n this._mount = params[0];\n this.render();\n return this;\n }\n return this._mount;\n }\n\n /**\n *\n *\n * @param {*} effPadding\n * @param {*} align\n * @return\n * @memberof Legend\n */\n getLabelSpaces () {\n const {\n item,\n classPrefix\n } = this.config();\n this._labelManager.setStyle(getSmartComputedStyle(selectElement('body'),\n `${classPrefix}-legend-item-info`));\n return getItemMeasures(this.data(), VALUE, this._labelManager, item.text.formatter);\n }\n\n /**\n * Sets the height and width of a legend based on provided max\n * height and width and based on its contents\n *\n * @return {Instance} Current instance\n * @memberof Legend\n */\n setLegendMeasures () {\n const {\n width,\n height,\n maxWidth,\n maxHeight,\n padding,\n margin,\n border\n } = this.measurement();\n const {\n align\n } = this.config();\n\n // Effective padding, margin and padding\n const effPadding = padding * 2;\n const effBorder = border * 2;\n const effMargin = margin * 2;\n\n this.data(this.dataFromScale(this.scale()));\n // Get space occupied by title\n const titleSpace = this.getTitleSpace();\n const titleHeight = titleSpace.height > 0 ? titleSpace.height * 1.25 : 0;\n const titleWidth = titleSpace.width;\n\n // Get space occupied by labels\n const labelSpaces = this.getLabelSpaces(effPadding, align);\n\n const {\n totalHeight, totalWidth, itemSpaces, iconSpaces, maxItemSpaces, maxIconWidth\n } = computeItemSpaces(this.config(),\n { effPadding, titleWidth, labelSpaces, titleHeight, maxWidth, maxHeight }, this.data());\n\n this.measurement({\n width: Math.max(totalWidth, width) + effMargin + effBorder,\n height: Math.max(totalHeight, height) + effMargin + effBorder,\n labelSpaces,\n iconSpaces,\n itemSpaces,\n maxItemSpaces,\n maxIconWidth,\n titleSpaces: {\n width: Math.min(maxWidth, this.measurement().width) - effMargin - effBorder,\n height: titleHeight\n }\n });\n return this;\n }\n\n /**\n * Returns the space occupied by the legend title\n *\n * @return {Object} Space occupied by title\n * @memberof Legend\n */\n getTitleSpace () {\n this._labelManager.setStyle(getSmartComputedStyle(selectElement('body'),\n `${this.config().classPrefix}-legend-title`));\n return this._labelManager.getOriSize(this.title().text ? this.title().text : '');\n }\n\n /**\n * Creates the title for the legend\n *\n * @param {DOM} container Container made for the title\n * @return {Selection} Title and it's node\n * @memberof Legend\n */\n renderTitle (container) {\n const { titleSpaces, border, padding } = this.measurement();\n return titleCreator(container, this.title(), {\n height: titleSpaces.height,\n border,\n padding\n }, this.config());\n }\n\n /**\n * Render the legend with its title\n *\n * @param {DOM} mountPoint Point where the legend and title are to be appended\n * @return {Instance} Current instance of legend\n * @memberof Legend\n */\n render () {\n const firebolt = this.firebolt();\n const {\n classPrefix\n } = this.config();\n const {\n maxWidth,\n maxHeight,\n width,\n height,\n margin,\n border\n } = this.measurement();\n const legendContainer = makeElement(selectElement(this.mount()), 'div', [1], `${classPrefix}-legend-box`);\n\n legendContainer.classed(`${classPrefix}-legend-box-${this._id}`, true);\n legendContainer.style('float', 'left');\n // set height and width\n legendContainer.style('width', `${Math.min(maxWidth, width) - margin * 2}px`)\n .style('height', `${Math.min(maxHeight, height) - margin * 2}px`)\n .style('margin', `${margin}px`)\n .style('border-width', `${border}px`);\n this.legendContainer(legendContainer.node());\n\n // create title\n this.renderTitle(legendContainer);\n firebolt.createSelectionSet(this.data().map(d => d.id));\n return legendContainer;\n }\n /**\n *\n *\n * @param {*} data\n * @returns\n * @memberof StepLegend\n */\n getCriteriaFromData (data) {\n const fieldName = this.fieldName();\n const type = this.metaData().getData().schema[0].type;\n if (type === 'measure') {\n return {\n [fieldName]: data.range\n };\n }\n return [[fieldName], [data.value]];\n }\n}\n","import {\n LEFT,\n RIGHT,\n START,\n END,\n TOP,\n BOTTOM,\n HORIZONTAL,\n VERTICAL,\n CENTER,\n SHAPE,\n VALUE\n} from '../enums/constants';\n\nconst legendOrientation = {\n [HORIZONTAL]: {\n datasets: data => ({\n row: [1],\n column: data\n }),\n itemContainerMeasures: (measurement) => {\n const {\n itemSpaces,\n width\n } = measurement;\n return {\n row: {\n width: `${width}px`,\n padding: `${0}px`\n },\n column: {\n width: (d, i) => `${itemSpaces[i].width}px`,\n padding: `${0}px`\n }\n };\n },\n getStepSpacesInfo: (measurement) => {\n const { maxItemSpaces, height } = measurement;\n return {\n iconHeight: height,\n iconWidth: maxItemSpaces.width,\n stepPadding: {\n horizontal: true,\n vertical: false\n }\n };\n }\n },\n [VERTICAL]: {\n datasets: data => ({\n row: data,\n column: d => [d]\n }),\n itemContainerMeasures: (measurement, config) => {\n const {\n width\n } = measurement;\n const { padding } = config;\n return {\n row: {\n width: `${width}px`,\n padding: `${padding}px`\n },\n column: {\n width: `${width}px`,\n padding: `${0}px`\n }\n };\n },\n getStepSpacesInfo: (measurement) => {\n const { maxItemSpaces, width } = measurement;\n return {\n iconHeight: maxItemSpaces.height,\n iconWidth: width,\n stepPadding: {\n horizontal: false,\n vertical: true\n }\n };\n }\n }\n};\n\nexport const positionConfig = {\n [LEFT]: legendOrientation[VERTICAL],\n [RIGHT]: legendOrientation[VERTICAL],\n [TOP]: legendOrientation[HORIZONTAL],\n [BOTTOM]: legendOrientation[HORIZONTAL]\n};\n\nexport const alignmentMap = {\n [LEFT]: END,\n [RIGHT]: START,\n [TOP]: CENTER,\n [BOTTOM]: CENTER\n};\n\n// Reverses data for step legend\nexport const stepData = data => ({\n [LEFT]: data.reverse(),\n [RIGHT]: data.reverse(),\n [TOP]: data,\n [BOTTOM]: data\n});\n\n// Changes the item layout based on the position of the text\nexport const itemStack = {\n [LEFT]: [VALUE, SHAPE],\n [RIGHT]: [SHAPE, VALUE],\n [TOP]: [VALUE, SHAPE],\n [BOTTOM]: [SHAPE, VALUE]\n};\n","import { makeElement, selectElement, applyStyle } from 'muze-utils';\nimport { ICON_MAP } from './defaults';\nimport { positionConfig, alignmentMap, itemStack } from './position-config';\nimport {\n WIDTH,\n HEIGHT,\n CENTER,\n VALUE,\n RECT,\n LEFT,\n RIGHT\n} from '../enums/constants';\n\n/**\n *\n *\n * @param {*} container\n * @param {*} data\n * @param {*} legendInstance\n * @param {*} align\n * @return\n */\nexport const getItemContainers = (container, data, legendInstance) => {\n const measurement = legendInstance.measurement();\n const config = legendInstance.config();\n const {\n itemSpaces\n } = measurement;\n const {\n classPrefix,\n position\n } = config;\n const positionObj = positionConfig[position];\n const datasets = positionObj.datasets(data);\n const measures = positionObj.itemContainerMeasures(measurement, config);\n\n const rows = makeElement(container, 'div', datasets.row, `${classPrefix}-legend-row`);\n rows.style(HEIGHT, (d, i) => `${itemSpaces[i].height}px`);\n rows.style(WIDTH, measures.row.width);\n rows.style('padding', measures.row.padding);\n\n const columns = makeElement(rows, 'div', datasets.column, `${classPrefix}-legend-columns`);\n columns.style(WIDTH, measures.column.width);\n columns.style('padding', measures.column.padding);\n\n return columns;\n};\n\n/**\n *\n *\n * @param {*} container\n * @param {*} classPrefix\n * @param {*} data\n * @returns\n * @memberof DiscreteLegend\n */\nexport const createLegendSkeleton = (context, container, classPrefix, data) => {\n let gradWidth = 0;\n let gradHeight = 0;\n let maxGradHeight = 0;\n let maxGradWidth = 0;\n const measurement = context.measurement();\n const {\n margin,\n border,\n titleSpaces,\n width,\n height,\n maxWidth,\n maxHeight\n } = measurement;\n\n gradHeight = height - (titleSpaces.height + 2 * margin + 2 * border);\n gradWidth = width - (margin * 2 + border * 2);\n\n maxGradHeight = maxHeight - (titleSpaces.height + margin * 2 + border * 2);\n maxGradWidth = maxWidth - (margin * 2 + border * 2);\n\n let legendBody = makeElement(container, 'div', [1], `${classPrefix}-legend-body`);\n legendBody.select(`.${classPrefix}-legend-overflow`).remove();\n // Create a div with scroll when overflow\n if (maxGradWidth && maxGradWidth < gradWidth) {\n legendBody = legendBody.style(WIDTH, `${maxGradWidth}px`).style('overflow-x', 'scroll');\n }\n // Create a div with scroll when overflow\n if (maxGradHeight && maxGradHeight < gradHeight) {\n legendBody.style(HEIGHT, `${maxGradHeight}px`).style('overflow-y', 'scroll');\n }\n\n legendBody = makeElement(legendBody, 'div', [1], `${classPrefix}-legend-overflow`);\n\n legendBody.style(WIDTH, `${gradWidth}px`);\n legendBody.style(HEIGHT, `${gradHeight}px`);\n\n const legendItem = getItemContainers(legendBody, data, context);\n return { legendItem };\n};\n\n/**\n * Creates legend item based on alignment and text orientation\n *\n * @param {Selection} container Point where items are to be mounted\n * @return {Instance} Current instance\n * @memberof Legend\n */\nexport const createItemSkeleton = (context, container) => {\n const {\n classPrefix,\n item\n } = context.config();\n const textOrientation = item.text.orientation;\n\n const stack = itemStack[textOrientation];\n const itemSkeleton = makeElement(container, 'div', (d, i) => stack.map(e => [e, d[e], d.color, d.size,\n d.value, context.fieldName(), i]), `${classPrefix}-legend-item-info`);\n\n const alignClass = alignmentMap[textOrientation];\n\n itemSkeleton.classed(alignClass, true);\n return { itemSkeleton };\n};\n\n/**\n *\n *\n * @param {*} measureType\n * @param {*} stepColorCheck\n */\nexport const applyItemStyle = (item, measureType, stepColorCheck, context) => {\n const {\n padding,\n labelSpaces,\n iconSpaces,\n maxIconWidth\n } = context.measurement();\n const diff = stepColorCheck ? -padding * 2 : 0;\n\n if (item[0] === VALUE) {\n return `${labelSpaces[item[6]][measureType]}px`;\n }\n return `${measureType === 'width' && !stepColorCheck ? maxIconWidth : iconSpaces[item[6]][measureType] - diff}px`;\n};\n\n/**\n *\n *\n * @param {*} str\n * @returns\n */\nconst checkPath = (str) => {\n if (/^[mzlhvcsqta]\\s*[-+.0-9][^mlhvzcsqta]+/i.test(str) && /[\\dz]$/i.test(str) && str.length > 4) {\n return true;\n }\n return false;\n};\n\n/**\n *\n *\n * @param {*} d\n * @param {*} elem\n */\nconst createShape = function (d, elem, defaultIcon, width, height) {\n const groupElement = elem;\n // const { shape, size, update } = d;\n const size = d[3] || Math.min(width, height) * Math.PI;\n const shape = d[1] || defaultIcon;\n\n if (shape instanceof Promise) {\n shape.then((res) => {\n d.shape = res;\n return createShape(d, elem);\n });\n } else if (shape instanceof Element) {\n let newShape = shape.cloneNode(true);\n\n if (newShape.nodeName.toLowerCase() === 'img') {\n const src = newShape.src || newShape.href;\n newShape = document.createElementNS('http://www.w3.org/2000/svg', 'image');\n newShape.setAttribute('href', src);\n }\n const shapeElement = selectElement(newShape);\n shapeElement.attr('transform', `scale(${size / 100})`);\n return selectElement(groupElement.node().appendChild(newShape));\n } else if (typeof shape === 'string') {\n let pathStr;\n if (checkPath(shape)) {\n pathStr = shape;\n } else {\n pathStr = ICON_MAP(shape).size(size)();\n }\n return makeElement(groupElement, 'path', data => [data]).attr('d', pathStr);\n }\n d[1] = 'circle';\n return createShape(d, elem, 'circle');\n};\n\n/**\n * Returns the icon of the legend item\n *\n * @param {Object} datum Data property attached to the item\n * @param {number} width width of the item\n * @param {number} height height of the item\n * @return {Object|string} returns the path string or the string name of the icon\n * @memberof Legend\n */\nexport const getLegendIcon = (datum, width, height, defaultIcon) => {\n const icon = ICON_MAP(datum[1]);\n\n if (icon) {\n return icon.size(datum[3] || Math.min(width, height) * Math.PI);\n }\n return ICON_MAP(datum[3] ? 'circle' : defaultIcon).size(datum[3] || Math.min(width, height) * Math.PI);\n};\n\n/**\n *\n *\n */\nexport const renderIcon = (icon, container, datum, context) => {\n const {\n classPrefix,\n iconHeight,\n iconWidth,\n maxIconWidth,\n padding,\n color\n } = context;\n const svg = makeElement(container, 'svg', f => [f], `${classPrefix}-legend-icon-svg`)\n .attr(WIDTH, maxIconWidth)\n .attr(HEIGHT, iconHeight)\n .style(WIDTH, `${maxIconWidth}px`)\n .style(HEIGHT, `${iconHeight}px`);\n\n if (icon !== RECT) {\n const group = makeElement(svg, 'g', [datum[1]], `${classPrefix}-legend-icon`);\n createShape(datum, group, datum[3] ? 'circle' : 'square', iconWidth, iconHeight)\n .attr('transform', `translate(${maxIconWidth / 2 - padding} ${iconHeight / 2})`)\n .attr('fill', datum[2] || color);\n } else {\n makeElement(svg, RECT, [datum[1]], `${classPrefix}-legend-icon`)\n .attr('x', 0)\n .attr('y', 0)\n .attr(WIDTH, maxIconWidth)\n .attr(HEIGHT, iconHeight)\n .attr('fill', datum[2] || color);\n }\n};\n\n/**\n * Renders the items in the legend i.e, icon and text\n *\n * @param {DOM} container Point where item is to be mounted\n * @memberof Legend\n */\nexport const renderDiscreteItem = (context, container) => {\n const labelManager = context._labelManager;\n const {\n item,\n classPrefix\n } = context.config();\n const {\n maxIconWidth,\n padding\n } = context.measurement();\n const {\n width: iconWidth,\n height: iconHeight,\n color,\n className\n } = item.icon;\n\n const textOrientation = item.text.orientation;\n const formatter = item.text.formatter;\n\n labelManager.useEllipsesOnOverflow(true);\n applyStyle(container, {\n width: d => applyItemStyle(d, WIDTH, false, context),\n height: d => applyItemStyle(d, HEIGHT, false, context),\n 'text-align': CENTER,\n padding: `${padding}px`\n });\n\n labelManager.setStyle(context._computedStyle);\n container.each(function (d, i) {\n if (d[0] === VALUE) {\n selectElement(this).text(formatter(d[1]))\n .style(`padding-${textOrientation === RIGHT ? LEFT : RIGHT}`, '0px');\n } else {\n // const icon = getLegendIcon(d, iconWidth, iconHeight, type);\n selectElement(this).classed(`${classPrefix}-${className}`, true);\n selectElement(this).classed(`${classPrefix}-${className}-${i}`, true);\n renderIcon('circle', selectElement(this), d, {\n classPrefix,\n iconWidth,\n // iconWidth: 2 * Math.sqrt(d[3] / Math.PI) || iconWidth,\n iconHeight,\n maxIconWidth,\n padding,\n color\n });\n }\n });\n};\n\n/**\n* Renders the items in the legend i.e, icon and text\n*\n* @param {DOM} container Point where item is to be mounted\n* @memberof Legend\n*/\nexport const renderStepItem = (context, container) => {\n const labelManager = context._labelManager;\n const {\n item,\n position,\n classPrefix\n } = context.config();\n const {\n maxItemSpaces,\n maxIconWidth,\n padding\n } = context.measurement();\n const {\n width,\n height,\n color\n } = item.icon;\n const {\n formatter\n } = item.text;\n\n labelManager.useEllipsesOnOverflow(true);\n const { iconHeight, iconWidth, stepPadding } = positionConfig[position].getStepSpacesInfo({\n maxItemSpaces, height, width\n });\n\n applyStyle(container, {\n width: d => applyItemStyle(d, WIDTH, stepPadding.horizontal, context),\n height: d => applyItemStyle(d, HEIGHT, stepPadding.vertical, context),\n 'text-align': 'center',\n padding: `${padding}px`\n });\n\n labelManager.setStyle(context._computedStyle);\n container.each(function (d) {\n if (d[0] === VALUE) {\n selectElement(this).text(formatter(d[1]));\n } else {\n renderIcon(RECT, selectElement(this), d, {\n classPrefix,\n iconWidth,\n iconHeight,\n maxIconWidth,\n color\n });\n }\n });\n};\n","import SimpleLegend from './simple-legend';\nimport { DISCRETE, LEFT, SIZE } from '../enums/constants';\nimport { getScaleInfo } from './legend-helper';\nimport { createLegendSkeleton, createItemSkeleton, renderDiscreteItem } from './renderer';\nimport '../styles.scss';\n\n/**\n * Creates a Legend from the axes of a canvas\n *\n * @param {Object} dependencies : legend data\n * @class Legend\n */\nexport default class DiscreteLegend extends SimpleLegend {\n\n /**\n * Initializes an instance of the class\n *\n * @static\n * @param {Object} dependencies Set of dependencies required by the legend\n * @return {Instance} returns a new instance of Legend\n * @memberof Legend\n */\n static create (dependencies) {\n return new DiscreteLegend(dependencies);\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof DiscreteLegend\n */\n static type () {\n return DISCRETE;\n }\n\n /**\n *\n *\n * @param {*} scale\n * @returns\n * @memberof DiscreteLegend\n */\n dataFromScale (scale) {\n const { scaleType, domain, scaleFn } = getScaleInfo(scale);\n let domainForLegend = [...new Set(domain)];\n const type = this.metaData().getData().schema[0].type;\n\n domainForLegend = domainForLegend.map((ele, i) => {\n let value = 0;\n let range = 0;\n if (type === 'measure') {\n value = (+domainForLegend[i]).toFixed(0);\n const nextVal = domainForLegend[i + 1] ? +domainForLegend[i + 1] : +value;\n range = [value, nextVal.toFixed(0)];\n } else {\n value = domainForLegend[i];\n range = [domainForLegend[i]];\n }\n return {\n [scaleType]: scale[scaleFn](ele),\n value,\n id: i,\n range\n };\n }).filter(d => d.value !== null);\n\n domainForLegend = scaleType === SIZE ? domainForLegend.sort((a, b) => a[scaleType] - b[scaleType])\n : domainForLegend;\n return domainForLegend;\n }\n\n /**\n * Render the legend with its title\n *\n * @param {DOM} mountPoint Point where the legend and title are to be appended\n * @return {Instance} Current instance of legend\n * @memberof Legend\n */\n render () {\n const firebolt = this.firebolt();\n const data = this.data();\n const { classPrefix } = this.config();\n const legendContainer = super.render(this.mount());\n // create Legend\n const { legendItem } = createLegendSkeleton(this, legendContainer, classPrefix, data);\n const { itemSkeleton } = createItemSkeleton(this, legendItem);\n renderDiscreteItem(this, itemSkeleton);\n legendContainer.selectAll('div').style('float', LEFT);\n firebolt.mapActionsAndBehaviour();\n firebolt.createSelectionSet(this.data().map(d => d.id));\n return legendContainer;\n }\n}\n","import { makeElement, applyStyle } from 'muze-utils';\nimport { ContinousAxis } from '@chartshq/muze-axis';\nimport { BOTTOM, RIGHT } from '../enums/constants';\nimport { ALIGN } from './defaults';\nimport '../styles.scss';\n\n/**\n *\n *\n * @param {*} data\n * @returns\n */\nexport const getGradientDomain = (data) => {\n if (typeof data[0].value === 'number') {\n return data.reduce((accumulator, currentValue) =>\n [Math.min(currentValue.value, accumulator[0]), Math.max(currentValue.value, accumulator[1])],\n [Number.MAX_VALUE, Number.MIN_VALUE]);\n }\n return data.map(e => e.value);\n};\n\n/**\n *\n *\n * @param {*} container\n * @param {*} data\n * @param {*} domain\n * @returns\n */\nexport const makeLinearGradient = (container, data, domain) => {\n const defs = makeElement(container, 'defs', [1]);\n const linearGradient = makeElement(defs, 'linearGradient', [1])\n .attr('id', 'linear-gradient')\n .attr('x1', '0%')\n .attr('y2', '0%');\n makeElement(linearGradient, 'stop', data, 'stop-gradient')\n .attr('offset', d => `${(d.value - domain[0]) * 100 / (domain[1] - domain[0])}%`)\n .attr('stop-color', d => d.color);\n return linearGradient;\n};\n\n/**\n * Creates an axis cell with a linear axis for computing space and\n * creating gradient legend\n *\n * @return {AxisCell} Instance of Axis Cell for the gradient axis\n * @memberof Legend\n */\nexport const createAxis = (context) => {\n const data = context.data();\n const { align } = context.config();\n const AxisCell = context._cells.AxisCell;\n const newAxis = new ContinousAxis({\n id: `legend-${context._id}`,\n orientation: align === ALIGN.VERTICAL ? RIGHT : BOTTOM,\n style: context._computedStyle,\n nice: false,\n showAxisName: false,\n tickValues: data.map(d => d.value),\n fixedBaseline: false\n }, { labelManager: context._labelManager });\n\n newAxis.domain(getGradientDomain(data));\n newAxis.range([1, 1]);\n return new AxisCell().source(newAxis).config({\n margin: { left: 0, bottom: 0, top: 0, right: 0 }\n });\n};\n\n/**\n *\n *\n * @param {*} container\n * @param {*} data\n * @param {*} classPrefix\n * @returns\n * @memberof GradientLegend\n */\nconst createLegendSkeleton = (container, classPrefix, data) => {\n const domain = getGradientDomain(data);\n const legendContainer = makeElement(container, 'div', [1], `${classPrefix}-legend-body`);\n const legendGradSvg = makeElement(legendContainer, 'svg', [1], `${classPrefix}-gradient`);\n const legendGradCont = makeElement(legendGradSvg, 'g', [1], `${classPrefix}-gradient-group`);\n const linearGradient = makeLinearGradient(legendGradSvg, data, domain);\n const legendRect = makeElement(legendGradCont, 'rect', [1], `${classPrefix}-gradient-rect`);\n\n return {\n legendContainer,\n legendGradCont,\n legendGradSvg,\n linearGradient,\n legendRect\n };\n};\n\n/**\n * Renders the axis for the gradient\n *\n * @param {Selection} container Point where axis is to be mounted\n * @param {number} height Height for axis\n * @param {number} width Width for axis\n * @memberof Legend\n */\nexport const renderAxis = (context, container, height, width) => {\n const axis = context.axis();\n\n axis.setAvailableSpace(width, height);\n axis.render(container.node());\n};\n\n/**\n * Renders gradient legends\n *\n * @param {Selection} container Point where the legend is to be appended\n * @memberof GradientLegend\n */\nexport const renderGradient = (context, container) => {\n let gradHeight = 0;\n let gradWidth = 0;\n const {\n align,\n classPrefix,\n item\n } = context.config();\n const data = context.data();\n // Create the skeleton for the legend\n const {\n legendContainer,\n legendGradSvg,\n legendGradCont,\n linearGradient,\n legendRect\n } = createLegendSkeleton(container, classPrefix, data);\n const labelDim = context.axis().source().getAxisDimensions().tickLabelDim;\n const {\n padding,\n margin,\n border,\n titleSpaces,\n maxHeight,\n maxWidth,\n height,\n width\n } = context.measurement();\n const gradientDimensions = {};\n\n gradHeight = Math.floor(height - (titleSpaces.height + 2 * margin + 2 * border));\n gradWidth = Math.floor(width - (margin * 2 + border * 2));\n\n if (align === ALIGN.HORIZONTAL) {\n gradientDimensions.height = item.icon.height;\n gradientDimensions.width = gradWidth - 2 * padding - labelDim.width / 2;\n linearGradient.attr('x2', '100%').attr('y1', '0%');\n legendGradCont.attr('transform', `translate( ${labelDim.width / 2} 0)`);\n renderAxis(context, legendContainer, gradHeight - item.icon.height - padding, gradWidth - 2 * padding - 1);\n legendContainer.classed(`${classPrefix}-overflow-x`, width > maxWidth);\n\n applyStyle(legendContainer, {\n height: `${height}px`,\n width: `${Math.min(width, maxWidth)}px`,\n padding: `${padding}px`\n });\n\n legendRect.attr('height', gradientDimensions.height);\n legendRect.attr('width', gradientDimensions.width - labelDim.width / 2);\n } else {\n gradientDimensions.height = gradHeight - 2 * padding - labelDim.height / 2;\n gradientDimensions.width = item.icon.width;\n linearGradient.attr('x2', '0%').attr('y1', '100%');\n legendGradCont.attr('transform', `translate(0 ${labelDim.height / 2})`);\n renderAxis(context, legendContainer, gradHeight - 2 * padding - 1, gradWidth - item.icon.width - padding * 2);\n legendContainer.classed(`${classPrefix}-overflow-y`, height > maxHeight);\n applyStyle(legendContainer, {\n height: `${Math.min(height, maxHeight)}px`,\n width: `${width}px`,\n padding: `${padding}px`\n });\n legendRect.attr('height', gradientDimensions.height - labelDim.height / 2);\n legendRect.attr('width', gradientDimensions.width);\n }\n\n // Apply Styles to the legend plot area\n applyStyle(legendGradSvg, {\n height: `${gradientDimensions.height}px`,\n width: `${gradientDimensions.width}px`\n });\n\n // Apply styles to the legend rect\n applyStyle(legendRect, {\n fill: 'url(#linear-gradient)'\n });\n legendGradSvg.attr('height', gradientDimensions.height);\n legendGradSvg.attr('width', gradientDimensions.width);\n\n context.measurement({\n gradientDimensions\n });\n context._legendGradientSvg = legendGradSvg;\n return context;\n};\n","import SimpleLegend from './simple-legend';\nimport { getScaleInfo, getInterpolatedData } from './legend-helper';\nimport { GRADIENT, LEFT, SIZE } from '../enums/constants';\nimport { renderGradient, createAxis } from './gradient-helper';\nimport '../styles.scss';\n\n/**\n * Creates a Legend from the axes of a canvas\n *\n * @param {Object} dependencies : legend data\n * @class Legend\n */\nexport default class GradientLegend extends SimpleLegend {\n\n /**\n * Initializes an instance of the class\n *\n * @static\n * @param {Object} dependencies Set of dependencies required by the legend\n * @return {Instance} returns a new instance of Legend\n * @memberof Legend\n */\n static create (dependencies) {\n return new GradientLegend(dependencies);\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof GradientLegend\n */\n static type () {\n return GRADIENT;\n }\n\n /**\n *\n *\n * @param {*} axis\n * @returns\n * @memberof GradientLegend\n */\n axis (...axis) {\n if (axis.length) {\n this._axis = axis[0];\n return this;\n }\n return this._axis;\n }\n\n /**\n *\n *\n * @param {*} scale\n * @returns\n * @memberof GradientLegend\n */\n dataFromScale (scale) {\n let domainForLegend = [];\n const { scaleType, domain, steps, scaleFn } = getScaleInfo(scale);\n\n if (steps instanceof Array) {\n if (domain[0] < steps[0]) {\n domainForLegend[0] = domain[0];\n }\n domainForLegend = [...domainForLegend, ...steps];\n if (domain[domain.length - 1] > steps[steps.length - 1]) {\n domainForLegend.push(domain[1]);\n }\n } else {\n domainForLegend = getInterpolatedData(domain, steps - 1);\n }\n domainForLegend = [...new Set(domainForLegend)].sort((a, b) => a - b);\n\n return domainForLegend.map((ele, i) => {\n const value = domainForLegend[i];\n return {\n [scaleType]: scaleType === SIZE ? scale[scaleFn](ele) * scale.getScaleFactor()\n : scale[scaleFn](Math.floor(ele)),\n value: +value.toFixed(2),\n id: i\n };\n }).filter(d => d.value !== null);\n }\n\n /**\n *\n *\n * @param {*} effPadding\n * @param {*} align\n * @return\n * @memberof Legend\n */\n getLabelSpaces (effPadding) {\n this.config({\n item: {\n text: {\n orientation: this.config().position\n }\n }\n });\n const axis = createAxis(this);\n const axisSpace = axis.getLogicalSpace();\n const space = { width: axisSpace.width - effPadding, height: axisSpace.height - effPadding };\n const axisDomainLength = axis.source().domain().length;\n const labelSpaces = new Array(axisDomainLength).fill(space);\n\n this.axis(axis);\n return labelSpaces;\n }\n\n /**\n *\n *\n * @returns\n * @memberof GradientLegend\n */\n getDrawingContext () {\n return {\n svgContainer: this._legendGradientSvg\n };\n }\n\n /**\n * Render the legend with its title\n *\n * @param {DOM} mountPoint Point where the legend and title are to be appended\n * @return {Instance} Current instance of legend\n * @memberof Legend\n */\n render () {\n const firebolt = this.firebolt();\n const legendContainer = super.render(this.mount());\n // create Legend\n renderGradient(this, legendContainer);\n legendContainer.selectAll('div').style('float', LEFT);\n firebolt.mapActionsAndBehaviour();\n firebolt.createSelectionSet(this.data().map(d => d.id));\n return legendContainer;\n }\n /**\n *\n *\n * @param {*} data\n * @returns\n * @memberof SimpleLegend\n */\n getCriteriaFromData (data) {\n return [[this.fieldName()], [data.value]];\n }\n}\n","import SimpleLegend from './simple-legend';\nimport {\n getScaleInfo,\n getInterpolatedData,\n getDomainBounds\n} from './legend-helper';\nimport {\n createLegendSkeleton,\n createItemSkeleton,\n renderStepItem\n} from './renderer';\nimport { STEP, RECT, LEFT, SIZE, UPPER, LOWER } from '../enums/constants';\nimport { stepData } from './position-config';\nimport '../styles.scss';\n\n/**\n * Creates a Legend from the axes of a canvas\n *\n * @param {Object} dependencies : legend data\n * @class Legend\n */\nexport default class StepLegend extends SimpleLegend {\n\n /**\n * Initializes an instance of the class\n *\n * @static\n * @param {Object} dependencies Set of dependencies required by the legend\n * @return {Instance} returns a new instance of Legend\n * @memberof Legend\n */\n static create (dependencies) {\n return new StepLegend(dependencies);\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof StepLegend\n */\n static type () {\n return STEP;\n }\n\n /**\n *\n *\n * @param {*} scale\n * @returns\n * @memberof StepLegend\n */\n dataFromScale (scale) {\n let domainLeg = [];\n const { scaleType, domain, steps, scaleFn } = getScaleInfo(scale);\n\n const { formatter } = this.config();\n const domainBounds = {\n lower: null, upper: null\n };\n\n if (steps instanceof Array) {\n if (domain[0] < steps[0]) {\n domainBounds.lower = [`${formatter.bounds.lower} ${steps[0]}`];\n }\n domainLeg = [...domainLeg, ...steps];\n if (domain[domain.length - 1] > steps[steps.length - 1]) {\n domainBounds.upper = [`${formatter.bounds.upper} ${steps[steps.length - 1]}`];\n }\n } else {\n domainLeg = getInterpolatedData(domain, steps);\n }\n\n domainLeg = [...new Set(domainLeg)].sort((a, b) => a - b);\n domainLeg = domainLeg.map((ele, i) => {\n let value = null;\n if (i < domainLeg.length - 1) {\n value = `${(ele.toFixed(1))} - ${(+domainLeg[i + 1].toFixed(1))}`;\n }\n return {\n [scaleType]: scaleType === SIZE ? scale[scaleFn](ele) * scale.getScaleFactor() : scale[scaleFn](ele),\n value,\n id: i + 1,\n range: [ele, domainLeg[i + 1]]\n };\n }).filter(d => d.value !== null);\n\n if (domainBounds.lower) {\n const lowerBounds = getDomainBounds(LOWER, { scale, scaleFn, scaleType },\n { domain, steps, domainBounds });\n domainLeg = [lowerBounds, ...domainLeg];\n }\n if (domainBounds.upper) {\n const upperBounds = getDomainBounds(UPPER, { scale, scaleFn, scaleType },\n { domain, steps, domainBounds, domainLeg });\n domainLeg = [...domainLeg, upperBounds];\n }\n return domainLeg;\n }\n\n /**\n *\n *\n * @param {*} effPadding\n * @param {*} align\n * @return\n * @memberof Legend\n */\n getLabelSpaces (effPadding, align) {\n this.config({\n item: {\n text: {\n orientation: this.config().position\n }\n }\n });\n return super.getLabelSpaces(effPadding, align);\n }\n\n /**\n *\n *\n * @return\n * @memberof Legend\n */\n elemType () {\n return RECT;\n }\n\n /**\n * Render the legend with its title\n *\n * @param {DOM} mountPoint Point where the legend and title are to be appended\n * @return {Instance} Current instance of legend\n * @memberof Legend\n */\n render () {\n const firebolt = this.firebolt();\n const { classPrefix, position } = this.config();\n const data = stepData(this.data())[position];\n\n const legendContainer = super.render(this.mount());\n\n // create Legend\n const { legendItem } = createLegendSkeleton(this, legendContainer, classPrefix, data);\n const { itemSkeleton } = createItemSkeleton(this, legendItem);\n\n renderStepItem(this, itemSkeleton);\n legendContainer.selectAll('div').style('float', LEFT);\n firebolt.mapActionsAndBehaviour();\n firebolt.createSelectionSet(this.data().map(d => d.id));\n return legendContainer;\n }\n\n /**\n *\n *\n * @param {*} data\n * @returns\n * @memberof StepLegend\n */\n getCriteriaFromData (data) {\n const fieldName = this.fieldName();\n return {\n [fieldName]: data.range\n };\n }\n}\n","import { GradientLegend, DiscreteLegend, StepLegend } from '@chartshq/muze-legend';\n\n/**\n * Contants to be used as attr\n */\nexport const ROWS = 'rows';\nexport const COLUMNS = 'columns';\nexport const DATA = 'data';\nexport const COLOR = 'color';\nexport const SHAPE = 'shape';\nexport const SIZE = 'size';\nexport const DETAIL = 'detail';\nexport const LAYERS = 'layers';\nexport const TRANSFORM = 'transform';\nexport const INITIALIZED = 'isInitialized';\nexport const SOURCE = 'source';\nexport const WIDTH = 'width';\nexport const HEIGHT = 'height';\nexport const PADDING = 'padding';\nexport const BORDER = 'border';\nexport const MARGIN = 'margin';\nexport const CONFIG = 'config';\nexport const MOUNT = 'mount';\nexport const CANVAS_UPDATED = 'canvasUpdated';\nexport const CLASSPREFIX = 'classPrefix';\nexport const POLICIES = '_policies';\nexport const LEGEND = 'legend';\nexport const TITLE = 'title';\nexport const SUB_TITLE = 'subtitle';\nexport const RESOLVE = 'resolve';\nexport const DISCRETE = 'discrete';\nexport const STEP_COLOR = 'step-color';\nexport const GRADIENT = 'gradient';\nexport const LINEAR = 'linear';\nexport const ORDINAL = 'ordinal';\n\nexport const TITLE_TEMPLATE_NOT_ALLOWED_TAGS = [\n 'script',\n 'style'\n];\n\nexport const LEGEND_TYPE_MAP = {\n [`${ORDINAL}-${true}-${COLOR}`]: DiscreteLegend,\n [`${ORDINAL}-${true}-${SIZE}`]: DiscreteLegend,\n [`${ORDINAL}-${true}-${SHAPE}`]: DiscreteLegend,\n [`${ORDINAL}-${false}-${COLOR}`]: DiscreteLegend,\n [`${ORDINAL}-${false}-${SHAPE}`]: DiscreteLegend,\n [`${ORDINAL}-${false}-${SIZE}`]: DiscreteLegend,\n [`${LINEAR}-${false}-${SIZE}`]: DiscreteLegend,\n [`${LINEAR}-${true}-${SIZE}`]: DiscreteLegend,\n [`${LINEAR}-${false}-${SHAPE}`]: DiscreteLegend,\n [`${LINEAR}-${true}-${COLOR}`]: StepLegend,\n [`${LINEAR}-${false}-${COLOR}`]: GradientLegend\n};\n\nexport const LEFT = 'left';\nexport const RIGHT = 'right';\nexport const BOTTOM = 'bottom';\nexport const TOP = 'top';\nexport const GROUP = 'group';\nexport const LAYOUT = 'layout';\nexport const RETINAL = 'retinal';\nexport const DIMENSION = 'dimension';\nexport const MEASURE = 'measure';\nexport const VERTICAL = 'vertical';\nexport const HORIZONTAL = 'horizontal';\n\n","import { ComposedVars, SimpleVariable } from '@chartshq/visual-group';\nimport { TITLE_TEMPLATE_NOT_ALLOWED_TAGS } from './constants';\n\n/**\n * This method creates a new composed variable instance from multiple variables.\n * @param {Array} vars Variable names\n * @return {ComposedVars} Instance of composed variable\n */\nexport const share = (...vars) => new ComposedVars(...vars.map(variable => new SimpleVariable(variable)));\n\n/**\n *\n *\n * @param {*} node\n * @returns\n */\nfunction treeShakeNode (node) {\n if (node.nodeType !== Node.ELEMENT_NODE) { return; }\n\n if (TITLE_TEMPLATE_NOT_ALLOWED_TAGS.indexOf(node.tagName.toLowerCase()) !== -1) {\n node.parentNode.removeChild(node);\n } else {\n for (const childNode of node.childNodes) {\n treeShakeNode(childNode);\n }\n }\n}\n\n/**\n * A string template tagged function which sanitizes input html formatted\n * string according to the allowed html tags.\n *\n * @param {Array.} strings - The string parts of the template.\n * @param {Array} exps - The list of evaluated expression values.\n * @return {Function} Returns a function which returns the sanitized html string.\n */\nexport function html (strings, ...exps) {\n let htmlCode = '';\n const expLn = exps.length;\n let i = 0;\n\n for (; i < expLn; ++i) {\n htmlCode += strings[i] + exps[i];\n }\n htmlCode += strings[i];\n\n const frag = document.createDocumentFragment();\n const wrapper = document.createElement('div');\n\n frag.appendChild(wrapper);\n wrapper.innerHTML = htmlCode;\n\n treeShakeNode(wrapper);\n const { innerHTML } = wrapper;\n\n return () => innerHTML;\n}\n","import { mergeRecursive } from 'muze-utils';\n\nconst defaultPolicy = (registrableComponents) => {\n const aliases = registrableComponents.map(comp => comp.alias());\n return {\n behaviours: {\n '*': (propagationPayload) => {\n const propagationCanvas = propagationPayload.sourceCanvas;\n return propagationCanvas ? aliases.indexOf(propagationCanvas) !== -1 : true;\n }\n }\n };\n};\n\nclass ActionModel {\n constructor () {\n this._registrableComponents = [];\n }\n\n registerPhysicalActions (action) {\n const canvases = this._registrableComponents;\n\n canvases.forEach((canvas) => {\n canvas.once('canvas.updated').then((args) => {\n const matrix = args.client.composition().visualGroup.matrixInstance().value;\n matrix.each(cell => cell.valueOf().firebolt().registerPhysicalActions(action));\n });\n });\n return this;\n }\n\n registerBehaviouralActions (...actions) {\n const canvases = this._registrableComponents;\n\n canvases.forEach((canvas) => {\n canvas.once('canvas.updated').then(() => {\n const matrix = canvas.composition().visualGroup.matrixInstance().value;\n matrix.each(cell => cell.valueOf().firebolt().registerBehaviouralActions(...actions));\n });\n });\n return this;\n }\n\n /**\n *\n *\n * @param {*} map\n * @returns\n * @memberof ActionModel\n */\n registerPhysicalBehaviouralMap (map) {\n const canvases = this._registrableComponents;\n\n canvases.forEach((canvas) => {\n canvas.once('canvas.updated').then((args) => {\n const matrix = args.client.composition().visualGroup.matrixInstance().value;\n matrix.each(cell => cell.valueOf().firebolt().registerPhysicalBehaviouralMap(map));\n });\n });\n return this;\n }\n\n registerPropagationBehaviourMap (map) {\n const canvases = this._registrableComponents;\n\n canvases.forEach((canvas) => {\n canvas.once('canvas.updated').then((args) => {\n const matrix = args.client.composition().visualGroup.matrixInstance().value;\n matrix.each(cell => cell.valueOf().firebolt().registerPropagationBehaviourMap(map));\n });\n });\n return this;\n }\n\n mapSideEffects (map) {\n const canvases = this._registrableComponents;\n\n canvases.forEach((canvas) => {\n canvas.once('canvas.updated').then(() => {\n const matrix = canvas.composition().visualGroup.matrixInstance().value;\n matrix.each(cell => cell.valueOf().firebolt().mapSideEffects(map));\n });\n });\n return this;\n }\n\n for (...components) {\n this._registrableComponents = components;\n return this;\n }\n\n registerSideEffects (...sideEffects) {\n const registrableComponents = this._registrableComponents;\n\n registrableComponents.forEach((canvas) => {\n canvas.once('canvas.updated').then((args) => {\n const matrix = args.client.composition().visualGroup.matrixInstance().value;\n matrix.each(cell => cell.valueOf().firebolt().registerSideEffects(sideEffects));\n });\n });\n\n return this;\n }\n\n dissociateBehaviour (...maps) {\n const registrableComponents = this._registrableComponents;\n\n registrableComponents.forEach((canvas) => {\n canvas.once('canvas.updated').then((args) => {\n const matrix = args.client.composition().visualGroup.matrixInstance().value;\n matrix.each((cell) => {\n maps.forEach(val => cell.valueOf().firebolt().dissociateBehaviour(val[0], val[1]));\n });\n });\n });\n\n return this;\n }\n\n dissociateSideEffect (...maps) {\n const registrableComponents = this._registrableComponents;\n\n registrableComponents.forEach((canvas) => {\n canvas.once('canvas.updated').then((args) => {\n const matrix = args.client.composition().visualGroup.matrixInstance().value;\n matrix.each((cell) => {\n maps.forEach(val => cell.valueOf().firebolt().dissociateSideEffect(val[0], val[1]));\n });\n });\n });\n\n return this;\n }\n\n enableCrossInteractivity (policy = {}) {\n const registrableComponents = this._registrableComponents;\n const mergedPolicy = mergeRecursive(mergeRecursive({}, defaultPolicy(registrableComponents)), policy);\n\n registrableComponents.forEach((canvas) => {\n canvas.firebolt().crossInteractionPolicy(mergedPolicy);\n });\n\n return this;\n }\n}\n\nexport const actionModel = (() => new ActionModel())();\n","export const DEFAULT_CONFIG = {\n classPrefix: 'muze',\n interaction: {\n sideEffect: 'individual'\n },\n legend: {\n position: 'right',\n color: {\n show: true,\n padding: 2,\n margin: 2,\n border: 1,\n height: 30,\n width: 30\n },\n shape: {\n show: true,\n padding: 2,\n margin: 2,\n border: 1,\n height: 30,\n width: 30\n },\n size: {\n show: true,\n padding: 2,\n margin: 2,\n border: 1,\n height: 30,\n width: 30\n }\n },\n showHeaders: false,\n minWidth: 100,\n minHeight: 100,\n border: {\n style: 'solid',\n color: '#d6d6d6',\n width: 2,\n collapse: true,\n spacing: 0\n },\n autoGroupBy: {\n disabled: false\n }\n};\n","/**\n * @module\n * This is the global options semantics based on which setters getters are created and reactivity is initiated.\n * Format\n * PROPERTRY_NAME: {\n * value: // default value of the property,\n * meta: {\n * typeCheck: // The setter value will be checked using this. If the value is function then the setter value\n * // is passed as args.\n * typeExpected: // The output of typecheck action will be tested against this. Truthy value will set the\n * // value to the setter\n * sanitizaiton: // Need for sanitization before type is checked\n * }\n * }\n */\n\nimport { intSanitizer, mergeRecursive, DataModel } from 'muze-utils';\nimport { DEFAULT_CONFIG } from './defaults';\n\nexport default {\n data: {\n value: null,\n meta: {\n typeCheck: d => d instanceof DataModel\n }\n },\n width: {\n value: 0,\n meta: {\n sanitization: intSanitizer,\n typeCheck: Number.isInteger\n }\n },\n height: {\n value: 0,\n meta: {\n sanitization: intSanitizer,\n typeCheck: Number.isInteger\n }\n },\n minUnitWidth: {\n value: 50,\n meta: {\n sanitization: intSanitizer,\n typeCheck: Number.isInteger\n }\n },\n minUnitHeight: {\n value: 50,\n meta: {\n sanitization: intSanitizer,\n typeCheck: Number.isInteger\n }\n },\n config: {\n value: null,\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Object',\n sanitization: (config, oldConfig) => {\n const oldConf = mergeRecursive({}, oldConfig);\n const defConfig = mergeRecursive(oldConf, DEFAULT_CONFIG);\n const newConf = mergeRecursive(defConfig, config);\n return newConf;\n }\n\n }\n }\n};\n","/**\n * This file exports constants that will be used to\n * create the state store of the table layout.\n */\n/**\n * The index of top, bottom and center in the matrix\n */\nexport const VIEW_INDEX = {\n top: 0,\n center: 1,\n bottom: 2\n};\n\n/**\n * The width of the grid suppied by the user.\n */\nexport const GRID_WIDTH = 'width';\n\n/**\n * The height of the grid supplied by the user.\n */\nexport const GRID_HEIGHT = 'height';\n\n/**\n * The border for the grid\n */\nexport const BORDER = 'border';\n\n /**\n * The index of the first visible row in view matrix.\n */\nexport const ROW_POINTER = 'rowPointer';\n\n/**\n * The index of the first visible column in the view matrix.\n */\nexport const COLUMN_POINTER = 'columnPointer';\n\n/**\n * Flag to specify whether row sizes should be equal.\n */\nexport const ROW_SIZE_IS_EQUAL = 'isRowSizeEqual';\n\n/**\n * Flag to specify whether column sizes are equal.\n */\nexport const COLUMN_SIZE_IS_EQUAL = 'isColumnSizeEqual';\n\n/**\n * Field to store an array an of the widths of visible columns.\n * @computed\n */\nexport const COLUMN_WIDTHS = 'visibleColumnWidths';\n\n/**\n * Field to store an array of heights of visible rows.\n * @computed\n */\nexport const ROW_HEIGHTS = 'visibleRowHeights';\n\n/**\n * Field to store the width of the left matrix.\n * @computed\n */\nexport const LEFT_MATRIX_WIDTH = 'leftMatrixWidth';\n\n/**\n * Field to store the width of the right matrix.\n * @computed\n */\nexport const RIGHT_MATRIX_WIDTH = 'rightMatrixWidth';\n\n/**\n * Field to store the height of the top matrix.\n * @computed\n */\nexport const TOP_MATRIX_HEIGHT = 'topMatrixHeight';\n\n/**\n * Field to store the height of the bottom matrix.\n * @computed\n */\nexport const BOTTOM_MATRIX_HEIGHT = 'bottomMatrixHeight';\n\n/**\n * The dom element to render the layout inside.\n */\nexport const MOUNT_POINT = 'mount';\n\n/**\n * The id attribute of the left table element.\n */\nexport const LEFT_TABLE_ID = 'grid-left';\n\n/**\n * The id attribute of the right table element.\n */\nexport const RIGHT_TABLE_ID = 'grid-right';\n\n/**\n * The id attribute of the top table.\n */\nexport const TOP_TABLE_ID = 'grid-top';\n\n/**\n * The id attribute of the bottom table.\n */\nexport const BOTTOM_TABLE_ID = 'grid-bottom';\n\n/**\n * The id attribute of the center table.\n */\nexport const CENTER_TABLE_ID = 'grid-center';\n\n/**\n * The id attribute of the top div.\n */\nexport const TOP_DIV_ID = 'muze-div-top';\n\n/**\n * The id attribute of the bottom div.\n */\nexport const BOTTOM_DIV_ID = 'muze-div-bottom';\n\n/**\n * The id attribute of the center div.\n */\nexport const CENTER_DIV_ID = 'muze-div-center';\n\n/**\n * Field that indicates if the row configuration has changed\n */\nexport const HAVE_ROWS_CHANGED = 'haveRowsChanged';\n\n/**\n * Field that indicates if the column configuration has changed\n */\nexport const HAVE_COLUMNS_CHANGED = 'haveColumnsChanged';\n\n/**\n * Field that indicates if the values configuration for the center matrix has changed\n */\nexport const HAVE_VALUES_CHANGED = 'haveValuesChanged';\n\n/**\n * Field that indicates the width of row matrix\n */\nexport const ROW_MATRIX_WIDTH = 'rowMatrixWidth';\n\n/**\n * Field that indicates the height of row matrix\n */\nexport const COLUMN_MATRIX_HEIGHT = 'columnMatrixHeight';\n\n/**\n * Field that indicates the unit width of layout\n */\nexport const UNIT_WIDTH = 'unitWidth';\n\n/**\n * Field that indicates the unit height of layout\n */\nexport const UNIT_HEIGHT = 'unitHeight';\n\n/**\n * Field that indicates the style object\n */\nexport const STYLE = 'style';\n\n/**\n * Field that indicates the color configuration\n */\nexport const COLOR = 'color';\n\n/**\n * Field that indicates width\n */\nexport const WIDTH = 'width';\n\n/**\n * Field that indicates collpase property for border\n */\nexport const COLLAPSE = 'collapse';\n\n/**\n * Field that indicates spacing property for border\n */\nexport const SPACING = 'spacing';\n\n/**\n * Field that indicates spacing property for border\n */\nexport const DISTRIBUTION = 'distribution';\n\n/**\n * Field that indicates spacing property for border\n */\nexport const GUTTERSPACE = 'gutterSpace';\n\n/**\n * Field that indicates spacing property for border\n */\nexport const BREAK_PAGE = 'breakPage';\n\n/**\n * Field that indicates spacing property for border\n */\nexport const SHOW_ROW_BORDERS = 'showRowBorders';\n\n/**\n * Field that indicates spacing property for border\n */\nexport const SHOW_COL_BORDERS = 'showColBorders';\n\n/**\n * Field that indicates spacing property for border\n */\nexport const SHOW_VALUE_BORDERS = 'showValueBorders';\n\nexport const HEIGHT = 'height';\nexport const COLUMN = 'column';\nexport const ROW = 'row';\nexport const TOP = 'top';\nexport const LEFT = 'left';\nexport const RIGHT = 'right';\nexport const BOTTOM = 'bottom';\nexport const CENTER = 'center';\nexport const CLICK = 'click';\nexport const ROW_LEFT = 'rowLeft';\nexport const ROW_RIGHT = 'rowRight';\nexport const COLUMN_BOTTOM = 'colBottom';\nexport const COLUMN_TOP = 'colTop';\nexport const AUTO = 'auto';\nexport const ROW_SPAN = 'rowSpan';\nexport const COL_SPAN = 'colSpan';\nexport const ROW_ROOT = 'rowRoot';\nexport const COLUMN_ROOT = 'columnRoot';\nexport const PRIMARY = 'primary';\nexport const SECONDARY = 'secondary';\n","import { sanitizeIP, mergeRecursive } from 'muze-utils';\nimport { TOP, CENTER, BOTTOM } from '../enums/constants';\n\n/*\n * This is the abstract implementation of the root layout. This takes care of common work which all the layouts\n * has to handle. The common work includes sanitizaion of inputs, update, rerender, dispose etc. This class can't be\n * used directly (as ofcourse this is an abstract implementaiton), the class which is implementing it has to implement\n * the necessary methods and gives its on visual.\n */\n\n/**\n * This class is used to create a generic layout. It can be extended to create layouts\n * of different types\n * @class GenericLayout\n */\nexport default class GenericLayout {\n\n /**\n * Creates an instance of TableLayout.\n * @param {HTMLElement} mountPoint DOM element/d3 selection where the layout is to be mounted\n * @param {Object} measurement The dimensions of the layout\n * @param {Object} config configuration to be given for the layout\n * @param {Object} dependencies external dependencies.\n * @memberof GenericLayout\n *\n * measurement : {\n * width : number => width of the container\n * height : number => height of the container\n * unitHeight : number => height of unit of the cells\n * unitWidth : number => width of unit of the cells\n * }\n *\n */\n constructor (mountPoint, measurement, config, dependencies) {\n this._config = {};\n this._measurement = {};\n this._matrices = [];\n // External dependencies to be included for the layout. This includes the ext global dependencies like\n // smartlabel which has one single implementation of throughout the page or per isntance\n this._dependencies = dependencies;\n\n this.measurement(measurement);\n this.mountPoint(mountPoint);\n this.config(config);\n }\n\n /**\n * Returns an object which is used to recreate the layout.\n * @return {Object} the serialized components\n */\n serialize () {\n return {\n measurement: this.measurement(),\n config: this.config(),\n matrices: this.matrices()\n };\n }\n\n /**\n * Sets/Gets the config for the layout\n * @param {Object} config configuration for the layout\n * @return {Layout|Object} Gets the Config/ Returns this instance when set\n */\n config (config) {\n if (config) {\n this._config = mergeRecursive(this._config || {}, config);\n return this;\n }\n return this._config;\n }\n\n /**\n * Sets/Gets the measurement for the layout\n * @param {Object} measurement measurement for the layout\n * @return {Layout|Object} Gets the measurement/ Returns this instance when set\n */\n measurement (measurement) {\n if (measurement) {\n this._measurement = mergeRecursive(this._measurement || {}, measurement);\n\n return this;\n }\n return this._measurement;\n }\n\n /**\n * Sets/Gets the matrices for the layout\n * @param {Object} matrices matrices for the layout\n * @return {Layout|Object} Gets the matrices/ Returns this instance when set\n */\n matrices (matrices) {\n if (matrices) {\n this._matrices = sanitizeIP.typeObj([TOP, CENTER, BOTTOM], matrices);\n\n return this;\n }\n return this._matrices;\n }\n\n /**\n * Sets/Gets the matrix for row\n * @param {Object} matrix matrices for the layout\n * @return {Layout|Object} Gets the matrix/ Returns this instance when set\n */\n rowMatrix (matrix) {\n if (matrix) {\n this._rowMatrix = matrix;\n return this;\n }\n return this._rowMatrix;\n }\n\n /**\n * Sets/Gets the matrix for columns\n * @param {Object} matrix matrices for the layout\n * @return {Layout|Object} Gets the matrix/ Returns this instance when set\n */\n columnMatrix (matrix) {\n if (matrix) {\n this._columnMatrix = matrix;\n return this;\n }\n return this._columnMatrix;\n }\n\n /**\n * Sets/Gets the matrix for value\n * @param {Object} matrix matrices for the layout\n * @return {Layout|Object} Gets the matrix/ Returns this instance when set\n */\n centerMatrix (matrix) {\n if (matrix) {\n this._centerMatrix = matrix;\n return this;\n }\n return this._centerMatrix;\n }\n\n /**\n * Sets/Gets the mountPoint for the layout\n * @param {Object} mountPoint mountPoint for the layout\n * @return {Layout|Object} Gets the mountPoint/ Returns this instance when set\n */\n mountPoint (mountPoint) {\n if (mountPoint) {\n this._mountPoint = mountPoint;\n\n return this;\n }\n return this._mountPoint;\n }\n}\n","import * as FieldNames from '../enums/constants';\n\n/**\n * Default configuration of the layout\n * @return {Object} returns the default configuration\n */\nexport const DEFAULT_CONFIGURATION = {\n [FieldNames.BORDER]: {\n [FieldNames.STYLE]: 'solid',\n [FieldNames.COLOR]: '#d6d6d6',\n [FieldNames.WIDTH]: 2,\n [FieldNames.COLLAPSE]: true,\n [FieldNames.SPACING]: 0\n },\n [FieldNames.GUTTERSPACE]: { rows: [], columns: [] },\n [FieldNames.DISTRIBUTION]: { rows: [], columns: [] },\n [FieldNames.BREAK_PAGE]: { rows: [], columns: [] },\n [FieldNames.ROW_SIZE_IS_EQUAL]: false,\n [FieldNames.COLUMN_SIZE_IS_EQUAL]: false,\n [FieldNames.COLUMN_POINTER]: 0,\n [FieldNames.ROW_POINTER]: 0\n};\n\n/**\n * Default measurements for the layout\n * @return {Object} returns the default measurements\n */\nexport const DEFAULT_MEASUREMENTS = {\n [FieldNames.GRID_WIDTH]: 100,\n [FieldNames.GRID_HEIGHT]: 100,\n [FieldNames.UNIT_WIDTH]: 100,\n [FieldNames.UNIT_HEIGHT]: 100\n};\n\nexport const BLANK_BORDERS = 'rgba(0,0,0,0)';\n","import { ROW_LEFT, ROW_RIGHT, COLUMN_BOTTOM, COLUMN_TOP, TOP, BOTTOM } from '../enums/constants';\n/**\n * This callback is used to filter the array of\n * placeholder cells and filter out cells which have\n * appeared in a previous row.\n *\n * @param {Placeholder} colData Instance of placeholder.\n * @param {number} colIdx The index of the placeholder in array.\n * @param {Array} matrix The 2d array for which filtering is to be done\n * @param {number} rIdx The index of the row of the placeholder in array.\n * @param {string} type The type of matrix it is (rowLeft, rowRight, colTop, colBottom)\n * @return {boolean} flag to keep/remove element.\n */\nconst columnFilter = (colData, colIdx, matrix, rIdx, type) => {\n const previousRow = matrix[rIdx - 1];\n const currentRow = matrix[rIdx];\n\n // Row Span for left\n if (type === ROW_LEFT) {\n if (!previousRow) {\n return colData;\n }\n let i = 0;\n for (;i <= colIdx; i += 1) {\n if (currentRow[i].valueOf() !== previousRow[i].valueOf()) {\n break;\n }\n }\n return (i - 1 === colIdx) ? null : colData;\n } else if (type === ROW_RIGHT) {\n if (!previousRow || colIdx === 0) {\n return colData;\n }\n let j = colIdx;\n for (; j < currentRow.length; j += 1) {\n if (previousRow[j].valueOf() !== currentRow[j].valueOf()) {\n break;\n }\n }\n return (j === currentRow.length) ? null : colData;\n } else if (type === COLUMN_BOTTOM) {\n if (rIdx === 0) {\n return colData;\n }\n const prevCell = currentRow[colIdx - 1];\n if (prevCell) {\n if (prevCell.valueOf() === colData.valueOf()) {\n const nextRow = matrix[rIdx + 1];\n if (!nextRow) {\n return null;\n }\n if (nextRow[colIdx].valueOf() === nextRow[colIdx - 1].valueOf()) {\n return null;\n }\n return colData;\n }\n return colData;\n }\n return colData;\n } else if (type === COLUMN_TOP) {\n if (rIdx === matrix.length - 1 && matrix.length > 1) {\n return colData;\n }\n const prevCell = currentRow[colIdx - 1];\n if (prevCell && (prevCell.valueOf() === colData.valueOf())) {\n const prevRow = matrix[rIdx - 1];\n if (prevRow) {\n if (prevRow[colIdx].valueOf() === prevRow[colIdx - 1].valueOf()) {\n return null;\n }\n return colData;\n }\n return null;\n }\n return colData;\n }\n return colData;\n};\n\n/**\n * This callback is used to calculate the rowspan\n * by checking for repeating entries in subsequent rows\n * at the specified column.\n *\n * @param {Placeholder} colData Instance of placeholder.\n * @param {number} colIdx The index of the placeholder in the array.\n * @param {Array} matrix The 2d array for which filtering is to be done\n * @param {number} rIdx The index of the row of the placeholder in array.\n * @return {number} The row span.\n */\nconst calcRowSpan = (colData, colIdx, matrix, rIdx) => {\n let count = 1;\n // if data is not header cell then rowspan\n // has to be 1\n if (!colData || typeof colData.valueOf() !== 'string') {\n return 1;\n }\n let isNull = false;\n while (!isNull) {\n if (matrix[rIdx + count] && matrix[rIdx + count][colIdx] === null) {\n count += 1;\n } else {\n isNull = true;\n }\n }\n return count;\n};\n/**\n * This callback is used to calculate the rowspan\n * by checking for repeating entries in subsequent rows\n * at the specified column.\n *\n * @param {Placeholder} colData Instance of placeholder.\n * @param {number} colIdx The index of the placeholder in the array.\n * @param {Array} matrix The 2d array for which filtering is to be done\n * @param {number} rIdx The index of the row of the placeholder in array.\n * @return {number} The row span.\n */\nconst calcColSpan = (colData, colIdx, matrix, rIdx) => {\n let count = 1;\n // if data is not header cell then rowspan\n // has to be 1\n if (!colData || typeof colData.valueOf() !== 'string') {\n return 1;\n }\n let isNull = false;\n while (!isNull) {\n if (matrix[rIdx][colIdx + count] === null) {\n count += 1;\n } else {\n isNull = true;\n }\n }\n return count;\n};\n\n// create a masking matrix to strip out repeating columns\n// and calculate rowspan.\nconst mask = function (matrix, type) {\n return matrix.map((row, rIdx) => {\n if (type === ROW_LEFT || type === ROW_RIGHT) {\n const filteredRow = row.map((col, colIndex) => columnFilter(col, colIndex, matrix, rIdx, type));\n const temp = [];\n const diff = row.length - filteredRow.length;\n for (let i = 0; i < diff; i += 1) {\n temp.push(null);\n }\n if (type === ROW_RIGHT) {\n temp.unshift(...filteredRow);\n return temp;\n }\n temp.push(...filteredRow);\n return temp;\n }\n\n const filteredRow = row.map((col, colIndex) => columnFilter(col, colIndex, matrix, rIdx, type));\n const temp = [];\n temp.push(...filteredRow);\n return temp;\n });\n};\n\n/**\n * This function is used to set the col and row spans\n * for the matrices based on repeated/hierarchichal data\n *\n * @export\n * @param {Array} matrix The 2d array for which filtering is to be done\n * @param {string} type Type of array (center, top, bottom)\n * @param {number} index Index of array in the row\n * @return {Object} containing the view matrix and their spans\n */\nexport function cellSpanMaker (matrix, type, index) {\n let span = '';\n if (type === TOP || type === BOTTOM) {\n span = type === TOP ? COLUMN_TOP : COLUMN_BOTTOM;\n const viewMatrix = mask(matrix, span);\n const spans = viewMatrix.map((row, ridx) => row.map((col, i) => calcColSpan(col, i, viewMatrix, ridx))\n .filter(col => col !== 1));\n return { viewMatrix, spans };\n } else if (index === 0 || index === 2) {\n span = index === 0 ? ROW_LEFT : ROW_RIGHT;\n const viewMatrix = mask(matrix, span);\n const spans = [];\n viewMatrix.forEach((row, ridx) => {\n spans[ridx] = spans[ridx] || [];\n row.forEach((col, i) => {\n if (viewMatrix[ridx][i]) {\n const currSpan = calcRowSpan(col, i, viewMatrix, ridx);\n currSpan && spans[ridx].push(currSpan);\n }\n });\n });\n return { viewMatrix, spans };\n }\n return { viewMatrix: matrix };\n}\n","import { makeElement, selectElement } from 'muze-utils';\nimport { cellSpanMaker } from './span-maker';\nimport {\n TOP, LEFT, RIGHT, BOTTOM, CENTER, WIDTH, ROW_SPAN, COL_SPAN\n} from '../enums/constants';\nimport { BLANK_BORDERS } from './defaults';\n\n/**\n * Creates a table element of the layout\n *\n * @param {Object} mount Mount point for table elements\n * @param {string} className defines class name\n * @param {Array} rowData set of rows for the table\n * @return {Selection} set of selections for the table\n */\nfunction renderTable (mount, className, rowData) {\n const table = makeElement(mount, 'table', ['layout'], `${className}-table`);\n const body = makeElement(table, 'tbody', ['layout'], `${className}-body`);\n const rows = makeElement(body, 'tr', rowData, `${className}-tr`);\n const cells = makeElement(rows, 'td', (d, i) => d.filter(e => e !== null && e.config().show).map(e =>\n ({ placeholder: e, rowIndex: i })), `${className}-td`, {}, key => key.placeholder.id);\n\n return { table, body, rows, cells };\n}\n\nfunction applyRowBorders (cells, borderStyle, showBorders, color) {\n [TOP, BOTTOM].forEach((borderType) => {\n const style = `${borderStyle} ${showBorders[borderType] ? color : BLANK_BORDERS}`;\n cells.style(`border-${borderType}`, style);\n });\n}\n\nfunction applyColBorders (cells, borderStyle, showBorders, color) {\n [LEFT, RIGHT].forEach((borderType) => {\n const style = `${borderStyle} ${showBorders[borderType] ? color : BLANK_BORDERS}`;\n cells.style(`border-${borderType}`, style);\n });\n}\n\n/**\n * Applies borders to the cells in a matrix\n *\n * @param {Selection} cells Set of cells made from the matrix\n * @param {Object} border Border info for layout\n * @param {string} type Type of matrix(top/center/bottom)\n * @param {number} index Column index of matrix in the row\n */\nfunction applyBorders (cells, border, type, index) {\n const {\n width,\n style,\n color,\n showRowBorders,\n showColBorders,\n showValueBorders\n } = border;\n const borderStyle = `${width}px ${style}`;\n\n if (type === CENTER && index === 1) {\n [TOP, BOTTOM, LEFT, RIGHT].forEach((borderType) => {\n cells.style(`border-${borderType}`, `${borderStyle} ${showValueBorders[borderType] ?\n color : BLANK_BORDERS}`);\n });\n } else if (type === CENTER) {\n applyRowBorders(cells, borderStyle, showRowBorders, color);\n } else if (index === 1) {\n applyColBorders(cells, borderStyle, showColBorders, color);\n }\n}\n\n/**\n * Renders a set of matrices in a row\n *\n * @param {Array} matrices Set of matrices in a row\n * @param {Selection} mountPoint Mount point for the row\n * @param {string} type top/center/bottom\n * @param {Object} dimensions dimensions of the matrix\n */\nfunction renderMatrix (matrices, mountPoint, type, dimensions, classPrefix) {\n matrices.forEach((matrix, index) => {\n if (dimensions.viewWidth[index]) {\n // Creating containers for each matrix individually\n const containerForMatrix = makeElement(mountPoint, 'div', [1], `${classPrefix}-grid-${type}-${index + 1}`)\n .classed(`${classPrefix}-grid-${type}`, true)\n .classed(`${classPrefix}-grid`, true);\n\n const {\n viewMatrix,\n spans\n } = cellSpanMaker(matrix, type, index);\n\n // Rendering the table components\n const { cells } = renderTable(containerForMatrix, `${classPrefix}-grid`, viewMatrix);\n\n if (type === CENTER && spans) {\n cells.attr(ROW_SPAN, function (cell, colIndex) {\n const placeholder = cell.placeholder;\n selectElement(this).style('height', `${placeholder.availHeight() + dimensions.border.width}px`);\n return spans[cell.rowIndex][colIndex];\n });\n } else if ((type === TOP || type === BOTTOM) && index === 1) {\n cells.attr(COL_SPAN, function (cell, colIndex) {\n const span = spans[cell.rowIndex][colIndex];\n const placeholder = cell.placeholder;\n if (span > 1) {\n placeholder.setAvailableSpace(0, placeholder.availHeight());\n }\n selectElement(this).style('height', `${placeholder.availHeight()}px`);\n return span;\n });\n }\n // Rendering content within placeholders\n cells.each(function (cell) {\n cell.placeholder && cell.placeholder.render(this);\n }).exit().each((cell) => {\n cell.placeholder && cell.placeholder.remove();\n });\n\n applyBorders(cells, dimensions.border, type, index);\n }\n });\n}\n\n/**\n * Renders all the matrices of the layout\n *\n * @export\n * @param {Array} matrices Set of matrices in the layout\n * @param {Array} mountPoints Mount points for each row of matrix\n * @param {Array} layoutDimensions Dimensions(height/width) of all the matrices\n */\nexport function renderMatrices (context, matrices, layoutDimensions) {\n const {\n top,\n center,\n bottom\n } = matrices;\n const {\n classPrefix\n } = context.config();\n const {\n width\n } = context.measurement();\n const mount = context.mountPoint();\n\n const data = [\n { type: TOP, matrix: top },\n { type: CENTER, matrix: center },\n { type: BOTTOM, matrix: bottom }\n ];\n makeElement(mount, 'div', data, `${classPrefix}-grid-layout-row`)\n .each(function (d, i) {\n const row = selectElement(this);\n row.classed(`${classPrefix}-grid-layout-row-${i}`, true);\n renderMatrix(d.matrix, row, d.type, layoutDimensions, classPrefix);\n })\n .style(WIDTH, `${Math.ceil(width)}px`);\n}\n","/**\n * This file exports utility functions that are used across the layout module\n */\nimport { Symbols } from 'muze-utils';\nimport { PRIMARY, SECONDARY, HEIGHT, WIDTH } from '../enums/constants';\n\nconst nest = Symbols.nest;\n/**\n *\n *\n * @param {*} isTransposed\n * @returns\n */\nconst getMeasureInfo = (isTransposed) => {\n if (isTransposed) {\n return {\n firstMeasure: HEIGHT,\n secondMeasure: WIDTH\n };\n }\n return {\n firstMeasure: WIDTH,\n secondMeasure: HEIGHT\n };\n};\n\n/**\n *\n *\n * @param {*} i\n * @param {*} page\n * @returns\n */\nconst findInPage = (i, page) => {\n let count = 0;\n for (const x in page) {\n if (i < page[x]) {\n count = x;\n break;\n }\n }\n return count;\n};\n\n/**\n * Creates a single matrix from two matrices\n *\n * @param {Array} matrix Input matrix\n * @return {Array} Joined matrix\n * @memberof VisualMatrix\n */\nexport const combineMatrices = (matrix, config) => {\n const { isTransposed } = config;\n let joinedMatrix = matrix[0].length > 0 ? matrix[0] : matrix[1];\n if (isTransposed) {\n joinedMatrix = matrix[0].length > 0 ? [...matrix[0]] : [];\n joinedMatrix = matrix[1].length > 0 ? [...joinedMatrix, ...matrix[1]] : joinedMatrix;\n } else {\n joinedMatrix = joinedMatrix.map((row, rowIndex) => {\n let rowData = [];\n if (matrix[0].length > 0) {\n rowData = [...matrix[0][rowIndex]];\n }\n if (matrix[1].length > 0) {\n rowData = [...rowData, ...matrix[1][rowIndex]];\n }\n return rowData;\n });\n }\n return joinedMatrix;\n};\n\n/**\n * Creates a hirachical tree from the context\n *\n * @param {Object} context context for creating tree\n * @return {Object} nested tree\n */\nexport const createTree = (context) => {\n let matrixTree = {};\n let lastLevelKey = 0;\n let facet = PRIMARY;\n const nestFn = nest();\n const keys = [];\n const layoutMatrix = context._layoutMatrix;\n const primaryMatrix = context.primaryMatrix();\n const secondaryMatrix = context.secondaryMatrix();\n const { isTransposed, breakPage } = context.config();\n\n if (!isTransposed) {\n if (primaryMatrix.length === 0) {\n facet = PRIMARY;\n } else if (secondaryMatrix.length === 0) {\n facet = SECONDARY;\n } else {\n facet = primaryMatrix.length >= secondaryMatrix.length ? PRIMARY : SECONDARY;\n }\n if (primaryMatrix.length > 0) {\n for (let i = 0; i < primaryMatrix[0].length - 1; i++) {\n keys.push(i);\n }\n keys.push(primaryMatrix[0].length - 1);\n if (facet === SECONDARY || secondaryMatrix.length === 0) {\n lastLevelKey = primaryMatrix[0].length - 1;\n }\n }\n if (secondaryMatrix.length > 0) {\n const keyLength = primaryMatrix.length > 0 ? primaryMatrix[0].length : 0;\n for (let i = secondaryMatrix[0].length - 1; i > 0; i--) {\n keys.push(i + keyLength);\n }\n keys.push(keyLength);\n\n if (facet === PRIMARY) {\n lastLevelKey = keyLength;\n }\n } else {\n lastLevelKey = primaryMatrix.length > 0 ? primaryMatrix[0].length - 1 : 0;\n }\n keys.forEach((key) => {\n let counter = -1;\n return nestFn.key((d) => {\n counter++;\n return `${d[key].valueOf()}-${findInPage(counter, breakPage)}`;\n });\n });\n matrixTree = nestFn.entries(layoutMatrix);\n } else {\n if (primaryMatrix.length === 0) {\n facet = PRIMARY;\n } else if (secondaryMatrix.length === 0) {\n facet = SECONDARY;\n } else {\n facet = primaryMatrix.length >= secondaryMatrix.length ? PRIMARY : SECONDARY;\n }\n if (primaryMatrix.length > 0) {\n for (let i = 0; i < primaryMatrix.length - 1; i++) {\n keys.push(i);\n }\n // if (facet === PRIMARY) {\n keys.push(primaryMatrix.length - 1);\n // } else {\n if (facet === SECONDARY) {\n lastLevelKey = primaryMatrix.length - 1;\n }\n }\n if (secondaryMatrix.length > 0) {\n const primaryMatrixLength = primaryMatrix.length;\n for (let i = secondaryMatrix.length - 1; i > 0; i--) {\n keys.push(i + primaryMatrixLength);\n }\n // if (facet === SECONDARY) {\n keys.push(primaryMatrixLength);\n // }\n if (facet === PRIMARY) {\n lastLevelKey = primaryMatrixLength;\n }\n }\n keys.forEach((key) => {\n let counter = -1;\n return nestFn.key((d) => {\n counter++;\n return `${d[key].valueOf()}-${findInPage(counter, breakPage)}`;\n });\n });\n let newMatrix = [];\n newMatrix = layoutMatrix[0].map((col, colIndex) => layoutMatrix.map(row => row[colIndex]));\n matrixTree = nestFn.entries(newMatrix);\n }\n return { tree: matrixTree, lastLevelKey };\n};\n\n/**\n * Gives the min measues\n *\n * @param {boolean} isTransposed is column matrix\n * @param {Object} unitMeasures min measures to be given to cells\n * @return {Object} dimension min cell\n */\nexport const getMinMeasures = (isTransposed, unitMeasures) => {\n if (!isTransposed) {\n return {\n height: unitMeasures.height,\n width: 0\n };\n }\n return {\n height: 0,\n width: unitMeasures.width\n };\n};\n\n/**\n * Get the logical space from the tree\n *\n * @param {Node} item tree to be calculated\n * @param {number} measures width and height\n * @param {Array} minMeasures min measures for a cell\n * @param {Array} maxMeasure max measures for a col/row\n * @return {Object} dimension\n */\nexport const getLogicalSpace = (item, measures, minMeasures, maxMeasure = []) => {\n const { firstMeasure, secondMeasure } = measures;\n let firstMeasureValue = 0;\n let secondMeasureValue = 0;\n item.values.forEach((valueArray) => {\n let fMeasure = 0;\n let sMeasure = 0;\n valueArray.forEach((placeholder, colIndex) => {\n placeholder.logicalSpace(null);\n const space = placeholder.getLogicalSpace();\n sMeasure = Math.max(sMeasure, +space[secondMeasure], minMeasures[secondMeasure]);\n maxMeasure[colIndex] = Math.max(maxMeasure[colIndex] || 0, space[firstMeasure]);\n fMeasure += +maxMeasure[colIndex];\n });\n secondMeasureValue += sMeasure;\n firstMeasureValue = Math.max(firstMeasureValue, fMeasure);\n item.space = {\n [secondMeasure]: Math.ceil(secondMeasureValue),\n [firstMeasure]: Math.ceil(firstMeasureValue)\n };\n });\n return {\n [secondMeasure]: secondMeasureValue,\n [firstMeasure]: firstMeasureValue\n };\n};\n\n/**\n * Computes the logical spcae taken by the matrix tree\n *\n * @param {*} [item={}] tree to be viewed\n * @param {boolean} [isTransposed=false] is column matrix\n * @param {*} unitMeasures min measues for a cell\n * @param {Array} maxMeasure max measures for a col/row\n * @return {Object} logical space taken\n */\nexport const computeLogicalSpace = (item = {}, config, maxMeasures) => {\n const { isTransposed = false, unitMeasures } = config;\n const { firstMeasure, secondMeasure } = getMeasureInfo(isTransposed);\n const { values } = item;\n const minMeasures = getMinMeasures(isTransposed, unitMeasures);\n if (values[0].key) {\n const logicalSpace = { [firstMeasure]: 0, [secondMeasure]: 0 };\n\n values.forEach((valueItem) => {\n // Compute logical space for lowest level\n const space = computeLogicalSpace(valueItem, config, maxMeasures);\n // Set logical space for first measure\n logicalSpace[firstMeasure] = Math.max(logicalSpace[firstMeasure], space[firstMeasure],\n minMeasures[firstMeasure]);\n // Set logical space for second measure\n logicalSpace[secondMeasure] += +space[secondMeasure];\n });\n item.space = logicalSpace;\n return logicalSpace;\n }\n return getLogicalSpace(item, { firstMeasure, secondMeasure }, minMeasures, maxMeasures);\n};\n\n/**\n * Gives the space taken by a row\n *\n * @param {Array} row matrix array of rows\n * @return {Object} dimension of the row\n */\nexport const spaceTakenByRow = (row) => {\n let height = 0;\n let width = 0;\n row.forEach((col) => {\n const spaces = col.getLogicalSpace();\n height = Math.max(height, spaces.height);\n width += spaces.width;\n });\n return {\n width,\n height\n };\n};\n\n/**\n * Gives the space taken by a column\n *\n * @param {Array} matrix column matrix\n * @param {number} colIndex column index\n * @return {Object} dimension of the column\n */\nexport const spaceTakenByColumn = (matrix, colIndex) => {\n let height = 0;\n let width = 0;\n matrix.forEach((row) => {\n const col = row[colIndex];\n const spaces = col.getLogicalSpace();\n width = Math.max(width, spaces.width);\n height += spaces.height;\n });\n return {\n width,\n height\n };\n};\n\n/**\n * Creates different level matrices\n *\n * @param {Object} item matrix tree\n * @param {boolean} isTransposed is column matrix\n * @return {Object} matrix of each level\n */\nexport const createMatrixEachLevel = (item, isTransposed) => {\n if (item.values[0].key) {\n const arr = [];\n item.values.forEach((child) => {\n if (!isTransposed) {\n arr.push(...createMatrixEachLevel(child, isTransposed));\n } else {\n const eachLevel = createMatrixEachLevel(child, isTransposed);\n eachLevel.forEach((e, i) => {\n arr[i] = arr[i] || [];\n arr[i].push(...e);\n });\n }\n });\n item.matrix = arr;\n return arr;\n }\n if (!isTransposed) {\n item.matrix = item.values;\n } else {\n item.matrix = item.values[0].map((col, colIndex) => item.values.map(row => row[colIndex]));\n }\n return item.matrix;\n};\n\n/**\n * Breaks the matrix into two part\n *\n * @param {Array} matrix input matrix\n * @param {boolean} isTransposed is column matrix\n * @param {number} breakPointer point in matrix where it is to be broken\n * @return {Array} two broken matrix\n */\nexport const breakMatrix = (matrix, isTransposed, breakPointer) => {\n const primaryMatrix = [];\n const secondaryMatrix = [];\n if (isTransposed) {\n matrix.forEach((row, rowIndex) => {\n if (rowIndex >= breakPointer) {\n secondaryMatrix.push(row);\n } else {\n primaryMatrix.push(row);\n }\n });\n } else {\n matrix.forEach((row, rowIndex) => {\n row.forEach((column, columnIndex) => {\n if (columnIndex >= breakPointer) {\n secondaryMatrix[rowIndex] = secondaryMatrix[rowIndex] || [];\n secondaryMatrix[rowIndex].push(column);\n } else {\n primaryMatrix[rowIndex] = primaryMatrix[rowIndex] || [];\n primaryMatrix[rowIndex].push(column);\n }\n });\n });\n }\n return [primaryMatrix, secondaryMatrix];\n};\n\n/**\n * Distributed width returned\n *\n * @param {Object} context context for the width distibution\n * @return {number} distributed widths\n */\nexport const getDistributedWidth = (context, layoutConfig) => {\n const {\n availableWidth,\n width,\n row\n } = context;\n const {\n isDistributionEqual,\n isTransposed,\n distribution\n } = layoutConfig;\n let distSum = 0;\n if (distribution && distribution[0]) {\n distSum = distribution.reduce((t, n) => {\n t += n;\n return t;\n });\n }\n return row.map((col, colIndex) => {\n const space = col.getLogicalSpace().width;\n let distWidth = (space + (availableWidth - width) * (space / width));\n if (isTransposed) {\n if (distribution.length > 0) {\n distWidth = (availableWidth * distribution[colIndex] / distSum);\n } else if (isDistributionEqual || width === 0) {\n const rowLen = row.length;\n distWidth = (availableWidth / rowLen);\n }\n }\n return Math.floor(distWidth);\n });\n};\n\n/**\n * Distributeed heights returned\n *\n * @param {Object} context input for the height distribution\n * @return {Object} distribured heights\n */\nexport const getDistributedHeight = (context) => {\n let distSum = 0;\n let gutterSum = 0;\n let heightWithoutGutter = 0;\n const {\n isTransposed,\n distribution,\n availableHeight,\n height,\n isDistributionEqual,\n gutter,\n matrix,\n cIdx\n } = context;\n\n if (distribution && distribution[0] !== undefined) {\n distSum = distribution.reduce((t, n) => {\n t += n;\n return t;\n });\n }\n if (gutter && gutter[0] !== undefined) {\n gutterSum = gutter.reduce((t, n) => {\n t += n;\n return t;\n });\n }\n heightWithoutGutter = availableHeight - Math.floor(availableHeight * gutterSum);\n\n const colLen = matrix.length;\n return matrix.map((row, rIdx) => {\n const col = row[cIdx];\n const space = col.getLogicalSpace().height;\n let distHeight = (space + (heightWithoutGutter - height) * (space / height));\n\n if (!isTransposed) {\n if (distribution.length > 0 && colLen === distribution.length) {\n distHeight = (heightWithoutGutter * distribution[rIdx] / distSum);\n } else if (isDistributionEqual || context.height === 0) {\n distHeight = (heightWithoutGutter / colLen);\n }\n }\n return Math.floor(distHeight);\n });\n};\n\n/**\n *\n *\n * @param {*} arr\n * @param {*} beg\n * @param {*} end\n */\nexport const extraCellsRemover = (arr, beg, end) => arr.slice(beg, -end);\n\n/**\n * Creates matrix instancess\n *\n * @param {Array} [arr=[]] mutated arry\n * @param {number} depth depth of the tree\n * @param {Array} matrixInfo Details about the matrix(tree, etc) to be inserted\n * @param {boolean} layout Instance of layout\n */\nexport const createMatrixInstances = (arr = [], depth, matrixInfo, layout) => {\n const breakPointer = layout._breakPointer;\n const config = layout.config();\n const {\n isTransposed\n } = config;\n const {\n tree,\n layoutMatrix\n } = matrixInfo;\n\n if (depth === 0) {\n const brokenMatrix = breakMatrix(tree.matrix, isTransposed, breakPointer);\n arr.push({\n matrix: tree.matrix,\n primaryMatrix: brokenMatrix[0],\n secondaryMatrix: brokenMatrix[1],\n space: tree.space\n });\n return arr;\n }\n const nextLevel = depth - 1;\n tree.values.forEach((e) => {\n createMatrixInstances(arr, nextLevel, {\n tree: e,\n layoutMatrix\n }, layout);\n });\n return arr;\n};\n","import { mergeRecursive } from 'muze-utils';\n\nexport const PROPS = {\n config: {\n sanitization: (context, value) => mergeRecursive(context._config || {}, value)\n },\n maxMeasures: {},\n availableSpace: {},\n logicalSpace: {}\n};\n","import { PRIMARY } from '../enums/constants';\n/**\n *\n *\n */\nexport const defaultConfig = {\n distribution: [],\n classPrefix: 'muze',\n isDistributionEqual: true,\n unitMeasures: {\n height: 100,\n width: 100,\n border: 1\n },\n isTransposed: false,\n facet: PRIMARY,\n extraCellLengths: []\n};\n","import { mergeRecursive, generateGetterSetters } from 'muze-utils';\nimport {\n createTree,\n extraCellsRemover,\n combineMatrices,\n spaceTakenByColumn,\n getDistributedHeight,\n getDistributedWidth,\n spaceTakenByRow,\n computeLogicalSpace,\n createMatrixEachLevel,\n createMatrixInstances\n } from '../utils';\nimport { PROPS } from './props';\nimport { COLUMN_ROOT, ROW_ROOT, HEIGHT, WIDTH } from '../enums/constants';\nimport { defaultConfig } from './default-config';\n\n/**\n * This class used to create column / row matrix for GridLayout\n *\n * @class VisualMatrix\n */\nexport default class VisualMatrix {\n\n /**\n *Creates an instance of VisualMatrix.\n * @param {any} matrix Two set of matrices\n * @param {any} [config={}] Configuration for VisualMatrix\n * @memberof VisualMatrix\n */\n constructor (matrix, config = {}) {\n // Prepare matrices\n this._lastLevelKey = 0;\n this._primaryMatrix = matrix[0] || [];\n this._secondaryMatrix = matrix[1] || [];\n this._maxMeasures = [];\n this._availableSpace = {};\n\n // Store the config\n generateGetterSetters(this, PROPS);\n const defCon = Object.assign({}, this.constructor.defaultConfig());\n this.config(mergeRecursive(defCon, config));\n\n this._breakPointer = this.config().isTransposed ? matrix[0].length :\n (matrix[0].length > 0 ? matrix[0][0].length : 0);\n this._layoutMatrix = combineMatrices([matrix[0] || [], matrix[1] || []], this.config());\n\n // Create Tree\n this._tree = {\n key: this.config().isTransposed ? COLUMN_ROOT : ROW_ROOT,\n values: this.createTree()\n };\n this._logicalSpace = this.setLogicalSpace();\n }\n\n /**\n *\n *\n * @param {*} params\n * @returns\n * @memberof VisualMatrix\n */\n primaryMatrix (...params) {\n if (params.length) {\n return this;\n }\n return this._primaryMatrix;\n }\n\n /**\n *\n *\n * @param {*} params\n * @returns\n * @memberof VisualMatrix\n */\n secondaryMatrix (...params) {\n if (params.length) {\n return this;\n }\n return this._secondaryMatrix;\n }\n\n /**\n *\n *\n * @param {*} params\n * @returns\n * @memberof VisualMatrix\n */\n tree (...params) {\n if (params.length) {\n return this;\n }\n return this._tree;\n }\n\n /**\n *\n *\n * @static\n * @return\n * @memberof VisualMatrix\n */\n static defaultConfig () {\n return defaultConfig;\n }\n\n /**\n *\n *\n * @return\n * @memberof VisualMatrix\n */\n createTree () {\n const { tree, lastLevelKey } = createTree(this);\n this._lastLevelKey = lastLevelKey;\n return tree;\n }\n\n /**\n * Computes the logical space taken by the entire matrixTree\n *\n * @return {Object} Logical space taken\n * @memberof VisualMatrix\n */\n setLogicalSpace () {\n const {\n isTransposed\n } = this.config();\n const matrixTree = this.tree();\n createMatrixEachLevel(matrixTree, isTransposed);\n return computeLogicalSpace(matrixTree, this.config(), this.maxMeasures());\n }\n\n /**\n * Returns the space taken by visual matrix\n *\n * @return {Object} space taken by the matrix\n * @memberof VisualMatrix\n */\n getLogicalSpace () {\n return this.logicalSpace();\n }\n\n /**\n * Sets the provied space to the visual matrix\n *\n * @param {number} width width provided\n * @param {number} height height provided\n * @memberof VisualMatrix\n */\n setAvailableSpace (width, height) {\n this.availableSpace({ width, height });\n const tree = this.tree();\n const heightMeasures = this.populateMaxMeasures(HEIGHT, tree);\n const widthMeasures = this.populateMaxMeasures(WIDTH, tree);\n const depth = this.calculateDepth(widthMeasures, heightMeasures);\n\n this.viewableMatrix = this.createViewPortMatrix(depth);\n this.viewableMeasures = this.redistribute(this.viewableMatrix, width, height);\n return this;\n }\n\n /**\n * Populate the max measures in the array\n *\n * @param {Array} measures array to be filled with max measures\n * @param {Object} matrixTree matrix tree of visual matrix\n * @param {number} measure width or height\n * @param {number} [depth=0] depth of the tree that to be calculated\n * @memberof VisualMatrix\n */\n populateMaxMeasures (type, matrixTree, depth = 0, measures = []) {\n measures[depth] = Math.max(measures[depth] || 0, matrixTree.space[type]);\n if (matrixTree.values) {\n const childDepth = depth + 1;\n matrixTree.values.forEach((child) => {\n if (child.space) {\n measures = this.populateMaxMeasures(type, child, childDepth, measures);\n }\n });\n }\n return measures;\n }\n\n /**\n * Calculates the depth of the tree that can be viewed\n *\n * @param {Array} widthMeasures array of widths\n * @param {Array} heightMeasures array of heights\n * @return {number} depth of the tree\n * @memberof VisualMatrix\n */\n calculateDepth (widthMeasures, heightMeasures) {\n let i;\n let j;\n const { height, width } = this.availableSpace();\n\n for (i = 0; i < heightMeasures.length; i++) {\n if (heightMeasures[i] <= height) break;\n }\n for (j = 0; j < widthMeasures.length; j++) {\n if (widthMeasures[j] <= width) break;\n }\n return Math.min(widthMeasures.length - 1, Math.max(i, j));\n }\n\n /**\n * Redistributes the provied space to all cells\n *\n * @param {*} viewableMatrix current viewport matrix\n * @param {*} width provied width\n * @param {*} height provied height\n * @return {Object} current viewports matrixes with measures\n * @memberof VisualMatrix\n */\n redistribute (viewableMatrix, width, height) {\n let maxHeights = [];\n let maxWidths = [];\n const {\n isTransposed\n } = this.config();\n\n viewableMatrix.forEach((matrixInst) => {\n const matrix = matrixInst.matrix;\n const mWidth = 0;\n const mHeight = 0;\n const options = { mWidth, mHeight, matrix, width, height, maxHeights, maxWidths };\n const maxMeasures = isTransposed ? this.redistributeColumnWise(options) : this.redistributeRowWise(options);\n maxWidths = maxMeasures.maxWidths;\n maxHeights = maxMeasures.maxHeights;\n });\n\n const measurements = viewableMatrix.map((matrixInst, i) => {\n let heightMeasures;\n let columnMeasures;\n const cellDimOptions = { matrixInst, maxWidths, maxHeights, matrixIndex: i };\n const { heights, widths, rowHeights, columnWidths } = this.getCellDimensions(cellDimOptions);\n\n if (!isTransposed) {\n heightMeasures = [height, height];\n columnMeasures = widths;\n } else {\n heightMeasures = heights;\n columnMeasures = [width, width];\n }\n return {\n rowHeights: {\n primary: rowHeights[0],\n secondary: rowHeights[1]\n },\n columnWidths: {\n primary: columnWidths[0],\n secondary: columnWidths[1]\n },\n height: {\n primary: heightMeasures[0],\n secondary: heightMeasures[1]\n },\n width: {\n primary: columnMeasures[0],\n secondary: columnMeasures[1]\n }\n };\n });\n\n return measurements;\n }\n\n /**\n * Gets the viewable measures for the current viewable matrix\n *\n * @return {Object} Set of viewable measures\n * @memberof VisualMatrix\n */\n getViewableSpaces () {\n return this.viewableMeasures;\n }\n\n /**\n * Returns the matrix that can be viewed in the current viewport\n *\n * @return {Array} Set of matrices that can be viewed\n * @memberof VisualMatrix\n */\n getViewableData () {\n return this.viewableMatrix;\n }\n\n /**\n *\n *\n * @return\n * @memberof VisualMatrix\n */\n removeExtraCells () {\n const {\n isTransposed,\n extraCellLengths\n } = this.config();\n const matrix = this._layoutMatrix;\n const tree = mergeRecursive({}, this.tree());\n const begCellLen = extraCellLengths[0];\n const endCellLen = extraCellLengths[1] || Number.NEGATIVE_INFINITY;\n const layoutMatrix = !isTransposed ? extraCellsRemover(matrix, begCellLen, endCellLen) :\n matrix.slice(0).map(e => extraCellsRemover(e, begCellLen, endCellLen));\n\n tree.values = extraCellsRemover(tree.values, begCellLen, endCellLen);\n if (!isTransposed) {\n tree.matrix = extraCellsRemover(tree.matrix, begCellLen, endCellLen);\n } else {\n tree.matrix = tree.matrix.map(e => extraCellsRemover(e, begCellLen, endCellLen));\n }\n return {\n tree,\n layoutMatrix\n };\n }\n\n /**\n * Creates the viewport that can be viewed together\n *\n * @param {number} depth maxDepth that can be viewed in the viewport\n * @return {Array} Set of matrices that can be viewed\n * @memberof VisualMatrix\n */\n createViewPortMatrix (depth) {\n const arr = [];\n createMatrixInstances(arr, depth, this.removeExtraCells(), this);\n return arr;\n }\n\n /**\n * Distibutes the given space row wisely\n *\n * @param {Object} options Redistribution information\n * @memberof VisualMatrix\n */\n redistributeRowWise (options) {\n let cWidths = [];\n let rHeights = [];\n let mHeight = 0;\n const maxMeasures = this.maxMeasures();\n const {\n isDistributionEqual,\n distribution,\n isTransposed,\n gutter\n } = this.config();\n const { matrix, width, height, maxHeights, maxWidths } = options;\n\n mHeight = spaceTakenByColumn(matrix, this._lastLevelKey).height;\n\n const maxWidth = maxMeasures.reduce((t, n) => {\n t += n;\n return t;\n });\n if (maxWidth > 0) {\n cWidths = maxMeasures.map(space => space + (width - maxWidth) * (space / maxWidth));\n } else {\n cWidths = maxMeasures.map(() => 0);\n }\n rHeights = getDistributedHeight({\n matrix,\n cIdx: this._lastLevelKey,\n height: mHeight,\n availableHeight: height,\n isDistributionEqual,\n distribution,\n isTransposed,\n gutter\n });\n maxWidths.push(cWidths);\n maxHeights.push(rHeights);\n return { maxWidths, maxHeights };\n }\n\n /**\n * Distibutes the given space column wisely\n *\n * @param {Object} options Redistribution information\n * @memberof VisualMatrix\n */\n redistributeColumnWise (options) {\n let rHeights = [];\n const { matrix, width, maxHeights, maxWidths } = options;\n const borderWidth = this.config().unitMeasures.border;\n const mWidth = spaceTakenByRow(matrix[this._lastLevelKey]).width;\n const cWidths = getDistributedWidth({\n row: matrix[this._lastLevelKey],\n width: mWidth,\n availableWidth: width\n }, this.config());\n\n matrix.forEach((row, rIdx) => row.forEach((col, cIdx) => {\n const oldLogicalSpace = col.getLogicalSpace().height;\n col.setAvailableSpace(cWidths[cIdx] - borderWidth, oldLogicalSpace);\n rHeights[rIdx] = Math.max(rHeights[rIdx] || 0, col.getLogicalSpace().height);\n }));\n\n if (maxHeights.length > 0) {\n rHeights = rHeights.map((e, i) => Math.max(e, maxHeights[0][i]));\n }\n\n maxHeights.push(rHeights);\n\n for (let x = 0; x < maxHeights.length; x++) {\n maxHeights[x] = rHeights;\n }\n maxWidths.push(cWidths);\n return { maxHeights, maxWidths };\n }\n\n /**\n * Dispatch the calculated cell dimensions to all the cells\n *\n * @param {Object} options cell dimension information\n * @return {Object} row and column heights / widths\n * @memberof VisualMatrix\n */\n getCellDimensions (options) {\n let indices = [];\n let unitMeasures = [];\n let mainMeasures = [];\n let computedMeasures = [];\n const {\n isTransposed,\n unitMeasures: measures\n } = this.config();\n const borderWidth = measures.border;\n const { matrixInst, maxWidths, maxHeights, matrixIndex } = options;\n const matrix = matrixInst.matrix;\n const rowHeights = [[0], [0]];\n const columnWidths = [[0], [0]];\n const heights = [0, 0];\n const widths = [0, 0];\n const breakPointer = this._breakPointer;\n\n matrix.forEach((row, rIdx) => {\n row.forEach((cell, cIdx) => {\n const colHeight = maxHeights[matrixIndex][rIdx] || 0;\n const colWidth = maxWidths[matrixIndex][cIdx];\n\n if (!isTransposed) {\n cell.setAvailableSpace(colWidth, colHeight - borderWidth);\n indices = [rIdx, cIdx];\n unitMeasures = [columnWidths, rowHeights];\n mainMeasures = [widths, heights];\n computedMeasures = [colWidth, colHeight];\n } else {\n cell.setAvailableSpace(colWidth - borderWidth, colHeight);\n indices = [cIdx, rIdx];\n unitMeasures = [rowHeights, columnWidths];\n mainMeasures = [heights, widths];\n computedMeasures = [colHeight, colWidth];\n }\n\n if (indices[0] === 0 && indices[1] < breakPointer) {\n unitMeasures[0][0][indices[1]] = computedMeasures[0];\n mainMeasures[0][0] = (mainMeasures[0][0] || 0) + computedMeasures[0];\n } else if (indices[0] === 0 && indices[1] >= breakPointer) {\n unitMeasures[0][1][indices[1] - breakPointer] = computedMeasures[0];\n mainMeasures[0][1] = (mainMeasures[0][1] || 0) + computedMeasures[0];\n }\n if (indices[1] === this._lastLevelKey) {\n unitMeasures[1][0][indices[0]] = computedMeasures[1];\n unitMeasures[1][1][indices[0]] = computedMeasures[1];\n }\n });\n });\n return {\n heights,\n widths,\n rowHeights,\n columnWidths\n };\n }\n}\n\n","import { HEIGHT, WIDTH, COLUMN, ROW } from '../enums/constants';\n\n/**\n * Gets measurement for an instance of visual matrix\n *\n * @param {Array} matrix instance of visual matrix\n * @param {string} type height/width\n * @return {Object} Logical height/width of the matrix\n */\nexport function getMatrixMeasurement (matrix, type) {\n if (matrix) {\n return matrix.getLogicalSpace()[type];\n }\n return 0;\n}\n\n/**\n * Sets available space for an instance of visual matrix\n *\n * @param {Array} matrix instance of visual matrix\n * @param {string} type height/width\n * @param {number} value Value of measurement\n */\nexport function setMatrixMeasurement (matrix, type, value) {\n if (matrix) {\n const spaces = matrix.getLogicalSpace();\n if (value && spaces[type] !== value) {\n type === HEIGHT ? matrix.setAvailableSpace(spaces.width, value) :\n matrix.setAvailableSpace(value, spaces.height);\n }\n }\n}\n\n/**\n *\n *\n * @param {*} matrix\n * @param {*} widths\n * @param {*} heights\n */\nconst setAvailableSpace = (matrix, widths, heights) => {\n matrix.forEach((row, rIdx) => {\n row.forEach((placeholder, cIdx) => {\n placeholder.setAvailableSpace(widths[cIdx], heights[rIdx]);\n });\n });\n};\n\n/**\n *\n *\n * @param {*} layout\n * @param {*} matrix\n * @param {*} pointer\n * @returns\n */\nconst setViewSpaces = (layout, pointerType, viewSpaces) => {\n let pointer = layout.config()[`${pointerType}Pointer`];\n if (viewSpaces.length - 1 < pointer) {\n pointer = 0;\n layout.config({ [`${pointerType}Pointer`]: pointer });\n }\n return pointer;\n};\n\n/**\n * Computes the measurements of space for all matrices in the\n * layout\n *\n * @param {Object} layout Instance of grid layout\n * @return {Object} set of measurements for the layout\n */\nexport const computeLayoutMeasurements = (layout) => {\n const rowMatrix = layout.rowMatrix();\n const columnMatrix = layout.columnMatrix();\n const centerMatrix = layout.centerMatrix();\n const {\n width,\n height\n } = layout.measurement();\n const {\n border\n } = layout.config();\n const matrices = layout.matrices();\n const {\n top,\n bottom\n } = matrices;\n\n // Get width of row matrix\n const rowMatrixWidth = getMatrixMeasurement(rowMatrix, WIDTH);\n\n // Set width for column matrix\n\n // Border adjustment for each cell in the central matrix\n const borderWidth = border.width;\n\n const columnMatrixWidth = width - rowMatrixWidth - borderWidth;\n setMatrixMeasurement(columnMatrix, WIDTH, columnMatrixWidth);\n const columnViewPages = columnMatrix.getViewableSpaces();\n setViewSpaces(layout, COLUMN, columnViewPages);\n\n // Figuring out total space needed by current view space\n const columnViewSpace = columnViewPages[layout.config().columnPointer];\n\n // Getting height of column matrix\n const columnMatrixHeight = columnViewSpace.height.primary + columnViewSpace.height.secondary;\n\n // Set height for row matrix\n const rowMatrixHeight = height - columnMatrixHeight;\n\n setMatrixMeasurement(rowMatrix, HEIGHT, rowMatrixHeight);\n\n // Get heights of each cell of row matrix\n const rowViewableSpaces = rowMatrix.getViewableSpaces();\n setViewSpaces(layout, ROW, rowViewableSpaces);\n const rowHeights = [].concat(...rowViewableSpaces.map(e => e.rowHeights.primary));\n const rowWidthsPrimary = [].concat(...rowViewableSpaces.map(e => e.columnWidths.primary));\n const rowWidthsSecondary = [].concat(...rowViewableSpaces.map(e => e.columnWidths.secondary));\n const columnViewableSpaces = columnMatrix.getViewableSpaces();\n // Get widths of each cell of column matrix\n const columnWidths = [].concat(...columnViewableSpaces.map(e => e.columnWidths.primary));\n const columnHeightsPrimary = columnViewableSpaces[0].rowHeights.primary;\n\n const columnHeightsSecondary = [].concat(...columnViewableSpaces.map(e => e.rowHeights.secondary));\n\n // Setting the available space for each cell in the centre matrix\n centerMatrix.forEach((matrix, rIdx) => {\n matrix.forEach((placeholder, cIdx) => {\n placeholder.setAvailableSpace(columnWidths[cIdx] - borderWidth, rowHeights[rIdx] - borderWidth);\n });\n });\n setAvailableSpace(top[0], rowWidthsPrimary, columnHeightsPrimary);\n setAvailableSpace(top[2], rowWidthsSecondary, columnHeightsPrimary);\n setAvailableSpace(bottom[0], rowWidthsPrimary, columnHeightsSecondary);\n setAvailableSpace(bottom[2], rowWidthsSecondary, columnHeightsSecondary);\n\n return {\n rowMatrixHeight,\n rowMatrixWidth,\n columnMatrixHeight,\n columnMatrixWidth\n };\n};\n\n/**\n * Gets view matrices based on current pointers for row and column\n *\n * @param {Object} layout instance of layout\n * @param {number} rowPointer current row pointer\n * @param {number} columnPointer current column pointer\n * @return {Object} returns the view matrix and its relevant information\n */\nexport const getViewMatrices = (layout, rowPointer, columnPointer) => {\n const rowMatrix = layout.rowMatrix();\n const columnMatrix = layout.columnMatrix();\n const centerMatrix = layout.centerMatrix();\n const matrices = layout.matrices();\n const rowMatrices = rowMatrix.getViewableData();\n const columnMatrices = columnMatrix.getViewableData();\n const centralMatrixPointer = {\n row: 0,\n column: 0\n };\n\n for (let i = rowPointer - 1; i >= 0; i--) {\n const length = Math.max(rowMatrices[i].primaryMatrix.length,\n rowMatrices[i].secondaryMatrix.length);\n centralMatrixPointer.row += length;\n }\n /* istanbul ignore next */\n for (let i = columnPointer - 1; i >= 0; i--) {\n const matrix = columnMatrices[i];\n const { primaryMatrix, secondaryMatrix } = matrix;\n const length = Math.max(primaryMatrix[0] ? primaryMatrix[0].length : 0,\n secondaryMatrix[0] ? secondaryMatrix[0].length : 0);\n centralMatrixPointer.column += length;\n }\n\n matrices.top[1] = columnMatrices[columnPointer].primaryMatrix;\n matrices.bottom[1] = columnMatrices[columnPointer].secondaryMatrix;\n\n matrices.center[0] = rowMatrices[rowPointer].primaryMatrix;\n matrices.center[2] = rowMatrices[rowPointer].secondaryMatrix;\n\n const rowMatrixLen = Math.max(matrices.center[0].length, matrices.center[2].length);\n /* istanbul ignore next */\n const columnMatrixLen = Math.max(matrices.top[1][0] ? matrices.top[1][0].length : 0, matrices.bottom[1][0] ?\n matrices.bottom[1][0].length : 0);\n matrices.center[1] = centerMatrix.slice(centralMatrixPointer.row, centralMatrixPointer.row + rowMatrixLen)\n .map(matrix => matrix.slice(centralMatrixPointer.column, centralMatrixPointer.column + columnMatrixLen));\n\n return {\n matrices,\n rowPages: rowMatrices.length,\n columnPages: columnMatrices.length\n };\n};\n/**\n * Returns measurements of the cells of the current matrix\n *\n * @param {Object} layout instance of layout\n * @return {Object} returns the measurements for current view matrix\n */\nexport const getViewMeasurements = (layout) => {\n const rowMatrix = layout.rowMatrix();\n const columnMatrix = layout.columnMatrix();\n const {\n width,\n height\n } = layout.measurement();\n const {\n columnPointer,\n rowPointer\n } = layout.config();\n\n const rowMatrixWidth = rowMatrix.getViewableSpaces()[rowPointer].width;\n const { primary: leftWidth, secondary: rightWidth } = rowMatrixWidth;\n\n const columnMatrixHeight = columnMatrix.getViewableSpaces()[columnPointer].height;\n const { primary: topHeight, secondary: bottomHeight } = columnMatrixHeight;\n\n const centerHeight = height - (topHeight + bottomHeight);\n const centerWidth = width - (leftWidth + rightWidth);\n\n return {\n viewWidth: [leftWidth, centerWidth, rightWidth],\n viewHeight: [topHeight, centerHeight, bottomHeight]\n };\n};\n","/**\n * This file declares a table that can be extended to create a Datagrid, crosstab\n * and man other visualzations that require a tabular structure.\n */\n\nimport { getUniqueId } from 'muze-utils';\nimport GenericLayout from '../generic-layout';\nimport { DEFAULT_CONFIGURATION, DEFAULT_MEASUREMENTS } from './defaults';\nimport {\n renderMatrices\n} from './renderer';\nimport { generateVisualMatrices } from './layout-helper';\nimport { computeLayoutMeasurements, getViewMeasurements, getViewMatrices } from './computations';\n/**\n * This class is used to create a tabular structure that\n * can house charts and values.\n *\n * @class GridLayout\n */\nexport default class GridLayout extends GenericLayout {\n\n /**\n * Creates an instance of TableLayout.\n * @param {HTMLElement} matrices Set of upto 9 matrices containing the cells to be rendered\n * @param {HTMLElement} mountPoint DOM element/d3 selection where the layout is to be mounted\n * @param {Object} measurement The dimensions of the layout\n * @param {Object} config external configurations.\n * @memberof GenericLayout\n *\n * measurement : {\n * width : number => width of the container\n * height : number => height of the container\n * unitHeight : number => height of unit of the cells\n * unitWidth : number => width of unit of the cells\n * }\n *\n */\n constructor (matrices, mountPoint, measurement, config) {\n super(mountPoint, measurement, config);\n this.matrices(matrices);\n this.config(this.constructor.defaultConfig());\n this._layoutId = getUniqueId();\n }\n\n /**\n * Returns initial set of measurements for the grid layout\n *\n * @static\n * @return {Object} Returns initial set of measurements\n * @memberof GridLayout\n */\n static defaultMeasurement () {\n return DEFAULT_MEASUREMENTS;\n }\n\n /**\n * Returns initialconfiguration for grid layout\n *\n * @static\n * @return {Object} Returns initial configuration for grid layout\n * @memberof GridLayout\n */\n static defaultConfig () {\n return DEFAULT_CONFIGURATION;\n }\n\n /**\n * This function is used to return an instance of GridLayout\n *\n * @return {GridLayout} Instance of grid layout.\n * @static\n * @memberof GridLayout\n */\n static create () {\n return new GridLayout(null, null, this.defaultMeasurement(), this.defaultConfig());\n }\n\n /**\n * Sets/Gets the matrices for the layout\n *\n * @param {Array} matrices Set of matrices\n * @return {Object} Getter/Setter\n * @memberof GridLayout\n */\n matrices (matrices) {\n if (matrices) {\n this._matrices = generateVisualMatrices(this, matrices);\n return this;\n }\n return super.matrices(matrices);\n }\n\n /**\n * Triggers the computations for the layout based on the matrices available\n * This causes a reflow in the entire layout system.\n *\n * @return {Object} Layout instance\n * @memberof GridLayout\n */\n triggerReflow () {\n computeLayoutMeasurements(this);\n this.setViewInformation();\n return this;\n }\n\n /**\n *\n *\n * @param {*} type\n * @param {*} pageNumber\n * @returns\n * @memberof GridLayout\n */\n gotoPage (type, pageNumber) {\n const pageType = type.toLowerCase();\n const { viewMatricesInfo } = this.getViewInformation();\n const totalPages = viewMatricesInfo[`${pageType}Pages`];\n const pointer = Math.min(Math.max(1, pageNumber), totalPages);\n this.config({\n [`${pageType}Pointer`]: pointer - 1\n });\n this.setViewInformation();\n this.renderGrid();\n return this;\n }\n\n /**\n *\n *\n * @param {*} type\n * @returns\n * @memberof GridLayout\n */\n pages (type) {\n const { viewMatricesInfo } = this.getViewInformation();\n const pageType = type.toLowerCase();\n return {\n totalPages: viewMatricesInfo[`${pageType}Pages`],\n currentPage: this.config()[`${pageType}Pointer`] + 1\n };\n }\n\n /**\n *\n *\n * @returns\n * @memberof GridLayout\n */\n setViewInformation () {\n const {\n rowPointer,\n columnPointer,\n border\n } = this.config();\n const viewMatricesInfo = getViewMatrices(this, rowPointer, columnPointer);\n const layoutDimensions = getViewMeasurements(this);\n layoutDimensions.border = border;\n this.viewInfo = {\n viewMatricesInfo,\n layoutDimensions\n };\n return this;\n }\n\n /**\n *\n *\n * @returns\n * @memberof GridLayout\n */\n getViewInformation () {\n return this.viewInfo;\n }\n\n /**\n * Renders the layout\n *\n * @return {Object} current instance\n * @memberof GridLayout\n */\n renderGrid (mountPoint) {\n this.mountPoint(mountPoint);\n if (!this.mountPoint()) {\n return this;\n }\n const {\n viewMatricesInfo,\n layoutDimensions\n } = this.getViewInformation();\n // Render matrices\n renderMatrices(this, viewMatricesInfo.matrices, layoutDimensions);\n return this;\n }\n}\n","import VisualMatrix from '../visual-matrix/visual-matrix';\n\n/**\n * Generates the set of visual matrices for pagination and layouting algorithms\n *\n * @param {*} context\n * @param {*} matrices\n * @returns\n */\nexport const generateVisualMatrices = (context, matrices) => {\n // Set of matrices for layout is generated starting with the left matrix\n let leftMatrix = [];\n let rightMatrix = [];\n let topMatrix = [];\n let bottomMatrix = [];\n let begColCells;\n let endColCells;\n const {\n isRowSizeEqual,\n isColumnSizeEqual,\n gutterSpace,\n distribution,\n border,\n breakPage\n } = context.config();\n const {\n minUnitHeight,\n minUnitWidth\n } = context.measurement();\n const { top, center, bottom } = matrices;\n const [topLeft, topColumns, topRight] = top;\n const [leftRows, valueMatrix, rightRows] = center;\n const [bottomLeft, bottomColumns, bottomRight] = bottom;\n\n if (leftRows.length > 0) {\n // If no left matrix is present, context will be empty\n leftMatrix = [...topLeft, ...leftRows, ...bottomLeft];\n }\n if (rightRows.length > 0) {\n // If no right matrix is present, context will be empty\n rightMatrix = [...topRight, ...rightRows, ...bottomRight];\n }\n if (topColumns.length > 0 && topColumns[0].length > 0) {\n // If no top matrix is present, context will be empty\n topMatrix = topColumns.map((d, i) => [...topLeft[i], ...d, ...topRight[i]]);\n }\n if (bottomColumns.length > 0 && bottomColumns[0].length > 0) {\n // If no bottom matrix is present, context will be empty\n bottomMatrix = bottomColumns.map((d, i) => [...bottomLeft[i], ...d, ...bottomRight[i]]);\n }\n context.rowMatrix(new VisualMatrix([leftMatrix, rightMatrix], {\n isDistributionEqual: isRowSizeEqual,\n distribution: distribution.rows,\n gutter: gutterSpace.rows,\n unitMeasures: {\n width: minUnitWidth,\n height: minUnitHeight,\n border: border.width\n },\n breakPage: breakPage.rows.map(e => e + Math.max(topLeft.length, topRight.length)),\n extraCellLengths: [topLeft.length, bottomLeft.length]\n }));\n\n if (topLeft.length > 0) {\n begColCells = topLeft[0].length;\n } else {\n begColCells = bottomLeft.length > 0 ? bottomLeft[0].length : 0;\n }\n\n if (topRight.length > 0) {\n endColCells = topRight[0].length;\n } else {\n endColCells = bottomRight.length > 0 ? bottomRight[0].length : 0;\n }\n\n context.columnMatrix(new VisualMatrix([topMatrix, bottomMatrix], {\n isDistributionEqual: isColumnSizeEqual,\n distribution: distribution.columns,\n gutter: gutterSpace.columns,\n isTransposed: true,\n unitMeasures: {\n width: minUnitWidth,\n height: minUnitHeight,\n border: border.width\n },\n breakPage: breakPage.columns,\n extraCellLengths: [begColCells, endColCells]\n }));\n context.centerMatrix(valueMatrix);\n\n return matrices;\n};\n","import { ERROR_MSG } from 'muze-utils';\n/**\n * An Interface to be implemented if the transaction support is necessary. This class ensures reactivity to\n * global properties.\n */\nexport default class TransactionSupport {\n /**\n * Property accessor for data member of the class. Data is passed to the system by calling this method.\n */\n data () {\n throw new Error(ERROR_MSG.INTERFACE_IMPl);\n }\n\n /**\n * Property accessor for width of the class. Width is passed as an integer.\n */\n width () {\n throw new Error(ERROR_MSG.INTERFACE_IMPl);\n }\n\n /**\n * Property accessor for height of the class. Height is passed as an integer.\n */\n height () {\n throw new Error(ERROR_MSG.INTERFACE_IMPl);\n }\n\n /**\n * Property accessor for config of the class. Config is passed as an object.\n */\n config () {\n throw new Error(ERROR_MSG.INTERFACE_IMPl);\n }\n}\n","import { TOP, BOTTOM, LEFT, TITLE, SUB_TITLE, GROUP, LAYOUT, LEGEND } from '../constants';\n\n/**\n *\n *\n * @param {*} context\n * @returns\n */\nexport const arrangeComponents = (context) => {\n const legendConfig = context.config().legend;\n const titleConfig = context.title()[1];\n const subtitleConfig = context.subtitle()[1];\n const titleLayouts = {\n [`${TOP}-${TOP}`]: [TITLE, SUB_TITLE, GROUP],\n [`${BOTTOM}-${BOTTOM}`]: [GROUP, SUB_TITLE, TITLE],\n [`${TOP}-${BOTTOM}`]: [TITLE, GROUP, SUB_TITLE],\n [`${BOTTOM}-${TOP}`]: [SUB_TITLE, GROUP, TITLE]\n };\n const legendLayouts = [\n [LEGEND, LAYOUT],\n [LAYOUT, LEGEND]\n ];\n const titlePosition = titleConfig.position || TOP;\n const subtitlePosition = subtitleConfig.position || TOP;\n\n return {\n headers: titleLayouts[`${titlePosition}-${subtitlePosition}`],\n legends: legendConfig.position === LEFT || legendConfig.position === TOP ?\n legendLayouts[0] : legendLayouts[1]\n };\n};\n","/**\n * Flag to specify whether direction is vertical.\n */\nexport const MARGIN = 'margin';\nexport const LEFT = 'left';\nexport const RIGHT = 'right';\nexport const BOTTOM = 'bottom';\nexport const TOP = 'top';\nexport const SPACE_FIXER = 'spaceFixer';\nexport const CLASSPREFIX = 'muze';\nexport const VERTICAL_ALIGN = 'verticalAlign';\nexport const TEXT_ALIGN = 'textAlign';\nexport const IS_OFFSET = 'isOffset';\nexport const MIDDLE = 'middle';\nexport const BASELINE = 'baseline';\nexport const SHOW = 'show';\nexport const CENTER = 'center';\nexport const TEXT = 'text';\nexport const HEADER = 'header';\nexport const HEIGHT = 'height';\nexport const WIDTH = 'width';\nexport const DATA = 'data';\nexport const AXES = 'axes';\nexport const FACET_BY_FIELDS = 'facetByFields';\nexport const FIELDS = 'fields';\nexport const TRANSFORM = 'transform';\nexport const LAYER_DEF = 'layerDef';\nexport const CONFIG = 'config';\nexport const DETAIL_FIELDS = 'detailFields';\n\nexport const TEXT_CELL = 'text-cell';\nexport const AXIS_CELL = 'axis-cell';\nexport const GEOM_CELL = 'geom-cell';\nexport const BLANK_CELL = 'blank-cell';\n","// eneum to refer to simple cell\nexport const SIMPLE = 'simple';\n// eneum to refer to header cell\nexport const TEXT = 'text';\n// enum to refer to axis cell\nexport const AXIS = 'axis';\n// enum to refer to visual cell\nexport const GEOM = 'geom';\n// enum to refer blank cell\nexport const BLANK = 'blank';\n","import {\n ERROR_MSG,\n getUniqueId,\n mergeRecursive\n} from 'muze-utils';\nimport { SIMPLE } from './enums/cell-type';\n\n/**\n * This file declares a class that is used as an interface to create new\n * SimpleCell elements.\n * @module SimpleCell\n */\n/**\n * Base class for all table cells.\n *\n * @interface\n * @class SimpleCell\n */\nclass SimpleCell {\n\n /**\n * Creates an instance of SimpleCell.\n *\n * @param {*} config The input configuration.\n * @memberof SimpleCell\n */\n constructor (config) {\n this._id = getUniqueId();\n\n const defConfig = mergeRecursive({}, this.constructor.defaultConfig());\n this._config = mergeRecursive(defConfig, config || {});\n\n this._mount = null;\n }\n\n /**\n * Returns the type of the placehlder.\n *\n * @readonly\n * @memberof SimpleCell\n */\n get type () {\n return SIMPLE;\n }\n\n /**\n * Returns the type of the placehlder.\n *\n * @readonly\n * @memberof SimpleCell\n * @return {Object} Default config for the placeholder\n */\n static defaultConfig () {\n return {};\n }\n\n /**\n * Returns the value contained by the SimpleCell.\n *\n * @memberof SimpleCell\n */\n valueOf () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Returns a unique identifier for the instance used\n * to control selective rendering.\n *\n * @memberof SimpleCell\n */\n id () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Returns a serialized representation of the instance.\n *\n * @memberof SimpleCell\n */\n serialize () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Returns an object with width and height fields\n * specifying the space taken up by this metod.\n *\n * @memberof SimpleCell\n */\n getLogicalSpace () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Method used to set the space available to render the SimpleCell\n *\n * @param {number} width The available width.\n * @param {number} height The available height.\n * @memberof SimpleCell\n */\n setAvailableSpace () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Render the SimpleCell inthe supplied mount point.\n *\n * @param {HTMLElement} mount The mount point to render in.\n * @memberof SimpleCell\n */\n render () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Render the SimpleCell inthe supplied mount point.\n *\n * @param {HTMLElement} mount The mount point to render in.\n * @memberof SimpleCell\n */\n remove () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n}\n\nexport default SimpleCell;\n","/**\n * This file exports variables that are used as defaults for\n * the placeholders\n */\nimport * as CONSTANTS from './constants';\n\n /**\n * Default Configuration for the cells\n * @return {Object} Default configuration\n */\nexport const DEFAULT_CONFIG = {\n [CONSTANTS.MARGIN]: {\n [CONSTANTS.LEFT]: 0,\n [CONSTANTS.RIGHT]: 0,\n [CONSTANTS.TOP]: 0,\n [CONSTANTS.BOTTOM]: 0\n },\n [CONSTANTS.SPACE_FIXER]: 2,\n [CONSTANTS.IS_OFFSET]: false,\n [CONSTANTS.VERTICAL_ALIGN]: CONSTANTS.TOP,\n [CONSTANTS.TEXT_ALIGN]: CONSTANTS.CENTER,\n [CONSTANTS.SHOW]: true\n};\n","import { mergeRecursive } from 'muze-utils';\nimport { GEOM, TEXT, AXIS, BLANK } from './enums/cell-type';\n\nconst DEFAULT_PROPS = {\n mount: {},\n availHeight: {},\n availWidth: {},\n config: {\n sanitization: (context, value) => mergeRecursive(context._config, value)\n },\n logicalSpace: {},\n source: {}\n};\n\nconst geomProps = {\n data: {},\n caption: {},\n config: {},\n axes: {\n sanitization: (context, value) => Object.assign(context._axes, value)\n },\n facetByFields: {},\n fields: {},\n transform: {},\n layerDef: {},\n detailFields: {}\n};\n\nexport const PROPS = {\n [TEXT]: DEFAULT_PROPS,\n [GEOM]: mergeRecursive(geomProps, DEFAULT_PROPS),\n [AXIS]: DEFAULT_PROPS,\n [BLANK]: DEFAULT_PROPS\n};\n","/**\n * This file declares a class that represents a table cell\n * used to house an axis.\n * @module VisualCell\n */\nimport { selectElement, makeElement, generateGetterSetters } from 'muze-utils';\nimport { CLASSPREFIX, HEIGHT, WIDTH, AXIS_CELL } from './enums/constants';\nimport SimpleCell from './simple-cell';\nimport { DEFAULT_CONFIG } from './enums/defaults';\nimport { AXIS } from './enums/cell-type';\nimport { PROPS } from './props';\n\n/**\n * Computes the logical space of the an axis instance within an axis cell\n *\n * @param {Object} context Required to get the needed parameters to compute axis space\n * @return {Object} Returns the logical space for axis\n */\nconst computeAxisSpace = (context) => {\n let logicalWidth;\n let logicalHeight;\n const axis = context.source();\n const {\n spaceFixer,\n margin\n } = context.config();\n const {\n width,\n height\n } = axis.getLogicalSpace();\n const {\n show\n } = axis.config();\n if (show === true) {\n logicalHeight = Math.floor(height + margin.top + margin.bottom + spaceFixer);\n logicalWidth = Math.floor(width + margin.left + margin.right + spaceFixer);\n } else {\n [logicalWidth, logicalHeight] = [width, height];\n }\n return {\n width: logicalWidth,\n height: logicalHeight\n };\n};\n\n/**\n * Represents an axis cell.\n *\n * @class Axis\n */\nclass AxisCell extends SimpleCell {\n\n /**\n * Creates an instance of AxisCell.\n *\n * @param {Object} config The input config.\n * @memberof AxisCell\n */\n constructor (config) {\n super(config);\n\n this._axis = null;\n this._availHeight = null;\n this._availWidth = null;\n this._logicalSpace = null;\n\n generateGetterSetters(this, PROPS[AXIS]);\n }\n\n /**\n * return the type pf SimpleCell cell.\n *\n * @readonly\n * @memberof AxisCell\n */\n get type () {\n return AXIS;\n }\n\n /**\n * This method return the value conatined by this SimpleCell.\n *\n * @return {SimpleAxis | ColorAxis} Instance of SimpleAxis or ColorAxis.\n * @memberof AxisCell\n */\n valueOf () {\n return this.source().id;\n }\n\n /**\n * This method return the unique identififer of the axis\n *\n * @return {string} Id of the axis.\n * @memberof AxisCell\n */\n get id () {\n return this._id;\n }\n\n /**\n * Retrns the serialized representation of this cell.\n *\n * @return {Object}Object with serializable props.\n * @memberof AxisCell\n */\n serialize () {\n return {\n type: AXIS,\n axis: this.source().serialize()\n };\n }\n\n /**\n * return the default configuration for the text cell\n *\n * @static\n * @return {Object} Default configuration of the cell\n * @memberof AxisCell\n */\n static defaultConfig () {\n return DEFAULT_CONFIG;\n }\n\n /**\n * return the space taken up by an axis element in the dom.\n *\n * @return {Object} Object with width and height fields.\n * @memberof AxisCell\n */\n getLogicalSpace () {\n if (!this.logicalSpace()) {\n this.logicalSpace(computeAxisSpace(this));\n }\n return this.logicalSpace();\n }\n\n /**\n * This method is used to set the space availiable to render\n * the SimpleCell.\n *\n * @param {number} width The width of SimpleCell.\n * @param {number} height The height of SimpleCell.\n * @return {Instance} Returns current Instance\n * @memberof AxisCell\n */\n setAvailableSpace (width, height) {\n this.availWidth(width);\n this.availHeight(height);\n const {\n margin,\n isOffset\n } = this.config();\n this.source().setAvailableSpace(width, height, margin, isOffset);\n this.logicalSpace(null);\n this.source().logicalSpace(null);\n return this;\n }\n\n /**\n * This method is used to render the axis inside the axis cell.\n *\n * @param {HTMLElement} mount The mount point.\n * @return {Selection} node where axis mounted\n * @memberof AxisCell\n */\n /* istanbul ignore next */render (mount) {\n if (!mount) {\n return this;\n }\n const axis = this.source();\n const availHeight = this.availHeight();\n const availWidth = this.availWidth();\n const {\n margin\n } = this.config();\n const {\n top,\n bottom,\n left,\n right\n } = margin;\n const {\n show\n } = axis.config();\n const wrapperDiv = makeElement(selectElement(mount), 'div', [this], `${CLASSPREFIX}-${AXIS_CELL}`);\n const selection = makeElement(wrapperDiv, 'svg', [1], `${CLASSPREFIX}-axis-container`);\n\n this.mount(mount);\n if (availWidth === 0 || !availWidth) {\n selection.attr(WIDTH, `${0}px`);\n }\n if (availHeight === 0 || !availHeight) {\n selection.attr(HEIGHT, `${0}px`);\n }\n wrapperDiv.style(WIDTH, `${show ? availWidth : 0}px`)\n .style(HEIGHT, `${show ? availHeight : 0}px`)\n .style('margin-top', top)\n .style('margin-bottom', bottom)\n .style('margin-left', left)\n .style('margin-right', right);\n\n axis.mount(selection.node());\n return selection;\n }\n\n /**\n * Disposes the cell\n *\n * @return {Instance} Current instance of AxisCell\n * @memberof AxisCell\n */\n remove () {\n this.source() && this.source().remove();\n this.mount() && this.mount().remove();\n return this;\n }\n}\n\nexport default AxisCell;\n\n","/**\n * This file declares a class that represents a BLANK element in a table.\n * @module VisualCell\n */\nimport {\n selectElement,\n makeElement,\n applyStyle,\n generateGetterSetters\n } from 'muze-utils';\nimport SimpleCell from './simple-cell';\nimport { CLASSPREFIX, BLANK_CELL } from './enums/constants';\nimport { BLANK } from './enums/cell-type';\nimport { DEFAULT_CONFIG } from './enums/defaults';\nimport { PROPS } from './props';\n\n/**\n * Represents a table haeder.\n *\n * @class BLANK\n */\nclass BlankCell extends SimpleCell {\n\n /**\n * Creates an instance of BLANK.\n * @param {Object} config The input configuration.\n * @memberof BLANK\n */\n constructor (config) {\n super(config);\n\n generateGetterSetters(this, PROPS[BLANK]);\n }\n\n /**\n * return the type pf SimpleCell cell.\n *\n * @readonly\n * @memberof BlankCell\n */\n get type () {\n return BLANK;\n }\n\n /**\n * This method return the value contained by this SimpleCell.\n *\n * @return {string} The text value contained by this cell.\n * @memberof BlankCell\n */\n valueOf () {\n return this.id;\n }\n\n /**\n * return the default configuration for the text cell\n *\n * @static\n * @return {Object} Default configuration of the cell\n * @memberof BlankCell\n */\n static defaultConfig () {\n return DEFAULT_CONFIG;\n }\n\n /**\n * This method is used to return a unique identifier for\n * the BLANK cell.\n *\n * @return {string} The unique identifier for the BLANK.\n * @memberof BlankCell\n */\n get id () {\n return this._id;\n }\n\n /**\n * This method is used to obtain a serialized representation of this instance.\n *\n * @return {Object} Object with serilizable props.\n * @memberof BLANK\n */\n serialize () {\n return {\n type: BLANK\n };\n }\n\n /**\n * This method return the space taken up\n * by the text with the style applied.\n *\n * @return {Object} width and height taken up by the text.\n * @memberof BLANK\n */\n getLogicalSpace () {\n if (!this.logicalSpace()) {\n return {\n width: this.width || 0,\n height: this.height || 0\n };\n }\n return this.logicalSpace();\n }\n\n /**\n * This method is used to set the available space.\n *\n * @param {number} width The available width.\n * @param {number} height The available height.\n * @return {Instance} Returns current Instance\n * @memberof BlankCell\n */\n setAvailableSpace (width, height) {\n this.availWidth(width);\n this.availHeight(height);\n this.logicalSpace(null);\n return this;\n }\n\n /**\n * This method is used to render the BLANK cell inside\n * the provided mount point.\n *\n * @param {HTMLElement} mount The mount point for this cell.\n * @return {Instance} Returns current Instance\n * @memberof BLANK\n */\n /* istanbul ignore next */render (mount) {\n if (mount) {\n const { style } = this.config();\n // append span element to mount point\n this.mount(mount);\n const container = selectElement(mount);\n const elem = makeElement(container, 'div', [this.id]);\n elem.classed(`${CLASSPREFIX}-${BLANK_CELL}`, true);\n elem.style('width', `${this.availWidth()}px`);\n elem.style('height', `${this.availHeight()}px`);\n elem.html('');\n // apply style on the returned element\n if (style) {\n applyStyle(elem, style);\n }\n } return this;\n }\n\n /**\n * Removes the cell(Disposal)\n *\n * @return {Instance} Returns current Instance\n * @memberof BlankCell\n */\n remove () {\n this.mount() && this.mount().remove();\n return this;\n }\n }\nexport default BlankCell;\n","/**\n * This file declares a class that represents a Text element in a table.\n * @module VisualCell\n */\n\nimport {\n selectElement,\n makeElement,\n getSmartComputedStyle,\n generateGetterSetters\n} from 'muze-utils';\nimport SimpleCell from './simple-cell';\nimport { TEXT } from './enums/cell-type';\nimport { PROPS } from './props';\nimport { DEFAULT_CONFIG } from './enums/defaults';\nimport { CLASSPREFIX, TOP, BOTTOM, LEFT, RIGHT, HEADER, WIDTH, TEXT_CELL } from './enums/constants';\nimport './text-cell.scss';\n\n/**\n* Computes the Logical Space for the text\n*\n* @param {Object} context Required to get the needed parameters to compute text space\n* @return {Object} Logical space taken up by text\n* @memberof TextCell\n*/\nconst computeTextSpace = (context) => {\n const { labelManager } = context.dependencies();\n const space = labelManager.getOriSize(context.source());\n const {\n margin,\n show\n } = context.config();\n\n labelManager.setStyle(context._computedStyle);\n if (show) {\n return {\n width: space.width + margin.left + margin.right + context._minTickDiff.width,\n height: space.height + margin.top + margin.bottom + context._minTickDiff.height\n };\n } return {\n width: 0,\n height: 0\n };\n};\n\n/**\n * Represents a table haeder.\n *\n * @class Text\n */\nclass TextCell extends SimpleCell {\n\n /**\n * Creates an instance of Text.\n * @param {Object} config The input configuration.\n * @param {string} dependencies Dependencies for the class(labelManager)\n * @memberof Text\n */\n constructor (config, dependencies) {\n super(config);\n\n this._dependencies = dependencies;\n this._className = this._config.className ||\n (this._config.type === HEADER ? `${CLASSPREFIX}-${HEADER}-cell` : `${CLASSPREFIX}-${TEXT}-cell`);\n this._computedStyle = getSmartComputedStyle(selectElement('body'), this._className);\n this._dependencies.labelManager.setStyle(this._computedStyle);\n this._minTickDiff = this._dependencies.labelManager.getOriSize('WW');\n\n generateGetterSetters(this, PROPS[TEXT]);\n }\n\n /**\n * return the type pf SimpleCell cell.\n *\n * @readonly\n * @memberof TextCell\n */\n get type () {\n return TEXT;\n }\n\n /**\n * This method return the value contained by this SimpleCell.\n *\n * @return {string} The text value contained by this cell.\n * @memberof TextCell\n */\n valueOf () {\n return this.source();\n }\n\n /**\n * This method is used to return a unique identifier for\n * the Text cell.\n *\n * @return {string} The unique identifier for the Text.\n * @memberof TextCell\n */\n get id () {\n return this._id;\n }\n\n /**\n * Returns the dependencies of the instance\n *\n * @return {Object} Dependencies needed by the class\n * @memberof TextCell\n */\n dependencies () {\n return this._dependencies;\n }\n\n /**\n * This method is used to obtain a serialized representation of this instance.\n *\n * @return {Object} Object with serilizable props.\n * @memberof TextCell\n */\n serialize () {\n return {\n text: this.source(),\n type: TEXT\n };\n }\n\n /**\n * return the default configuration for the text cell\n *\n * @static\n * @return {Object} Default configuration of the cell\n * @memberof TextCell\n */\n static defaultConfig () {\n return DEFAULT_CONFIG;\n }\n\n /**\n * This method return the space taken up\n * by the text with the style applied.\n *\n * @return {Object} width and height taken up by the text.\n * @memberof Text\n */\n getLogicalSpace () {\n if (!this.logicalSpace()) {\n this.logicalSpace(computeTextSpace(this));\n }\n return this.logicalSpace();\n }\n\n /**\n * This method is used to set the available space.\n *\n * @param {number} width The available width.\n * @param {number} height The available height.\n * @return {Instance} Returns current Instance\n * @memberof TextCell\n */\n setAvailableSpace (width, height) {\n this.availWidth(width);\n this.availHeight(height);\n this.logicalSpace(null);\n return this;\n }\n\n /**\n * This method is used to render the Text cell inside\n * the provided mount point.\n *\n * @param {HTMLElement} mount The mount point for this cell.\n * @return {Instance} Returns current Instance\n * @memberof Text\n */\n render (mount) {\n const availWidth = this.availWidth();\n const {\n margin,\n show,\n verticalAlign,\n textAlign\n } = this.config();\n\n this.mount(mount);\n if (show) {\n const container = selectElement(mount);\n const elem = makeElement(container, 'div', [this.id], `${CLASSPREFIX}-${TEXT_CELL}`);\n\n container.style('vertical-align', verticalAlign);\n elem.classed(this._className, true);\n // apply style on the returned element\n elem.style(WIDTH, availWidth ? `${availWidth}px` : '100%');\n [TOP, BOTTOM, LEFT, RIGHT].forEach((type) => {\n elem.style(`padding-${type}`, `${margin[type]}px`);\n });\n elem.style('text-align', textAlign);\n elem.style('display', 'inline');\n // set the text as the innerHTML\n elem.html(this.source());\n }\n return this;\n }\n\n /**\n * Disposes the cell\n *\n * @return {Instance} Returns current Instance\n * @memberof TextCell\n */\n remove () {\n this.mount() && this.mount().remove();\n return this;\n }\n }\n\nexport default TextCell;\n","/**\n * This file declares a class that is used to represent a table cell\n * that houses a visual unit.\n * @module VisualCell\n */\n\nimport { selectElement, makeElement, generateGetterSetters } from 'muze-utils';\nimport SimpleCell from './simple-cell';\nimport { GEOM } from './enums/cell-type';\nimport { PROPS } from './props';\nimport {\n CLASSPREFIX, HEIGHT, WIDTH, DATA, AXES, FACET_BY_FIELDS, FIELDS, TRANSFORM, LAYER_DEF, CONFIG, GEOM_CELL,\n DETAIL_FIELDS\n} from './enums/constants';\nimport { DEFAULT_CONFIG } from './enums/defaults';\n\n/**\n * Calculates the logical space of the cell\n *\n * @param {Object} context Required to get the needed parameters to compute unit space\n * @return {Object} Logical space taken up by the unit\n * @memberof GeomCell\n */\nconst computeGeomSpace = (context) => {\n const config = context.source().config();\n const { width, height } = config;\n return {\n width: Math.ceil(width),\n height: Math.ceil(height + context.getCaptionSpace().height)\n };\n};\n\n /**\n * This class represents a SimpleCell for visual unit.\n *\n * @class GeomCell\n */\nclass GeomCell extends SimpleCell {\n\n /**\n * Creates an instance of GeomCell.\n * @param {Object} config The input configuration.\n * @memberof GeomCell\n */\n constructor (config) {\n super(config);\n\n this._unit = null;\n this._layers = null;\n this._axes = {};\n this._datamodel = {};\n this._facetByFields = {};\n this._fields = null;\n this._transform = null;\n this._caption = null;\n\n generateGetterSetters(this, PROPS[GEOM]);\n }\n\n /**\n * return the type pf SimpleCell cell.\n *\n * @readonly\n * @memberof GeomCell\n */\n get type () {\n return GEOM;\n }\n\n /**\n * This method return the value contained by this cell.\n *\n * @return {VisualUnit} Instance of visual unit contained by visual unit.\n * @memberof GeomCell\n */\n valueOf () {\n return this.source();\n }\n\n /**\n * This method is used to return the id of the\n * visual unit housed by this cell.\n *\n * @return {string} The unique id of the visual unit.\n * @memberof GeomCell\n */\n get id () {\n return this.source().id();\n }\n\n /**\n * This method return a serialized representation of\n * this instance.\n *\n * @return {Object} Object with serializable props.\n * @memberof GeomCell\n */\n serialize () {\n return {\n type: GEOM,\n unit: this.source().serialize(),\n caption: this.caption()\n };\n }\n\n /**\n * return the default configuration for the geom cell\n *\n * @static\n * @return {Object} Default configuration of the cell\n * @memberof GeomCell\n */\n static defaultConfig () {\n return DEFAULT_CONFIG;\n }\n\n /**\n * Updates the model based on the changed parameters\n *\n * @return {Instance} return instance\n * @memberof GeomCell\n */\n updateModel () {\n const unit = this.source();\n unit.lockModel();\n [DATA, AXES, FACET_BY_FIELDS, FIELDS, TRANSFORM, LAYER_DEF, CONFIG, DETAIL_FIELDS].forEach((prop) => {\n this[prop]() && unit[prop](this[prop]());\n });\n unit.unlockModel();\n return this;\n }\n\n /**\n * It gives the space taken by the caption of the unit\n *\n * @return {Object} return the space taken by caption\n * @memberof GeomCell\n */\n getCaptionSpace () {\n const caption = this.caption();\n\n let captionSpace = { width: 0, height: 0 };\n if (caption) {\n captionSpace = caption.getLogicalSpace();\n }\n return captionSpace;\n }\n\n /**\n * return the space taken up by the element in the dom.\n *\n * @return {Object} Object with width and height fields.\n * @memberof GeomCell\n */\n getLogicalSpace () {\n if (!this.logicalSpace()) {\n this.logicalSpace(computeGeomSpace(this));\n }\n return this.logicalSpace();\n }\n\n /**\n * This method is used to set the space available to\n * render the SimpleCell.\n *\n * @param {number} width The available width.\n * @param {number} height The available height.\n * @return {Instance} Returns current Instance\n * @memberof GeomCell\n */\n setAvailableSpace (width, height) {\n const unit = this.source();\n\n this.availWidth(width);\n this.availHeight(height);\n unit.lockModel();\n unit.width(width).height(height - this.getCaptionSpace().height);\n unit.unlockModel();\n this.logicalSpace(null);\n return this;\n }\n\n /**\n * his method is used to render the visual unit inside the provided cell.\n *\n * @param {HTMLElement} mount The mountpoint in the table.\n * @return {Instance} Returns current Instance\n * @memberof GeomCell\n */\n render (mount) {\n if (mount) {\n this.mount(mount);\n const availHeight = this.availHeight();\n const availWidth = this.availWidth();\n const caption = this.caption();\n const wrapperDiv = makeElement(selectElement(mount), 'div', [1], `${CLASSPREFIX}-${GEOM_CELL}`);\n\n if (caption) {\n const captionDom = makeElement(wrapperDiv, 'div', [caption], `${CLASSPREFIX}-unit-caption`).node();\n caption.render(captionDom);\n }\n const selection = makeElement(wrapperDiv, 'div', [1], `${CLASSPREFIX}-unit`);\n wrapperDiv.style(WIDTH, `${availWidth}px`).style(HEIGHT, `${availHeight}px`);\n selection.style(WIDTH, `${availWidth}px`)\n .style(HEIGHT, `${availHeight - this.getCaptionSpace().height}px`);\n this.source().mount(selection.node());\n }\n return this;\n }\n\n /**\n * Disposes the cell\n *\n * @return {Object} Current instance\n * @memberof GeomCell\n */\n remove () {\n this.mount() && this.mount().remove();\n this.source().remove();\n return this;\n }\n}\n\nexport default GeomCell;\n","import AxisCell from './axis-cell';\nimport BlankCell from './blank-cell';\nimport TextCell from './text-cell';\nimport GeomCell from './geom-cell';\nimport SimpleCell from './simple-cell';\n\nimport * as CONSTANTS from './constants';\n\nexport const DEFAULT_PLACEHOLDERS = {\n [CONSTANTS.SIMPLE_CELL]: SimpleCell,\n [CONSTANTS.TEXT_CELL]: TextCell,\n [CONSTANTS.AXIS_CELL]: AxisCell,\n [CONSTANTS.GEOM_CELL]: GeomCell,\n [CONSTANTS.BLANK_CELL]: BlankCell\n};\n\n","export const SIMPLE_CELL = 'SimpleCell';\nexport const TEXT_CELL = 'TextCell';\nexport const AXIS_CELL = 'AxisCell';\nexport const BLANK_CELL = 'BlankCell';\nexport const GEOM_CELL = 'GeomCell';\n\n","import { DEFAULT_PLACEHOLDERS } from './defaults';\n\n/**\n * Creates a registry for the cells, which can be used for\n * setting a new cell or getting the registered cells\n *\n * @return {Object} Setters and getters for registered cells\n */\nconst cellRegistry = () => {\n const reg = DEFAULT_PLACEHOLDERS;\n return {\n set: (key, def) => {\n if (key in reg) {\n reg[key] = def;\n }\n return cellRegistry;\n },\n get: () => reg\n };\n};\nexport default cellRegistry;\n","import { TextCell } from '@chartshq/visual-cell';\nimport { escapeHTML } from 'muze-utils';\n\n/**\n *\n *\n * @param {*} rawContent\n * @returns\n */\nconst resolveTitleSubTitleContent = (rawContent) => {\n if (typeof rawContent === 'function' && !rawContent._sanitize) {\n return rawContent();\n }\n return escapeHTML(rawContent());\n};\n\n/**\n *\n *\n * @param {*} config\n * @param {*} cellType\n * @param {*} labelManager\n * @param {*} prevCell\n * @returns\n */\nconst headerCreator = (config, cellType, labelManager, prevCell) => {\n const {\n content\n } = config;\n const cell = prevCell || new TextCell({ type: cellType }, { labelManager });\n\n cell.source(content);\n\n return {\n height: cell.getLogicalSpace().height,\n cell\n };\n};\n\n/**\n *\n *\n * @param {*} config\n * @param {*} type\n * @param {*} labelManager\n * @param {*} cell\n * @returns\n */\nconst createHeading = (config, type, labelManager, prevCell) => {\n if (!config) { return ''; }\n\n return headerCreator(\n config,\n type === 'title' ? 'header' : 'text',\n labelManager,\n prevCell\n );\n};\n\n/**\n *\n *\n * @param {*} context\n */\nexport const createHeaders = (context, canvasHeight, canvasWidth) => {\n let headerHeight = 0;\n const headers = {};\n\n canvasHeight >= 200 && canvasWidth >= 200 && ['title', 'subtitle'].forEach((type) => {\n const headerOptions = context[type]();\n const content = resolveTitleSubTitleContent(headerOptions[0]);\n if (content.length) {\n const config = headerOptions[1];\n\n config.width = context.width();\n config.content = content;\n\n const { height, cell } = createHeading(config, type, context.dependencies().smartlabel,\n context[`${type}Cell`]);\n\n headers[`${type}Cell`] = cell;\n context._composition[type] = cell;\n headerHeight += height + config.padding;\n }\n });\n return { headerHeight, headers };\n};\n\n","import { TextCell, AxisCell } from '@chartshq/visual-cell';\nimport {\n VERTICAL, HORIZONTAL, LEFT, RIGHT, LEGEND_TYPE_MAP, PADDING, BORDER, MARGIN\n} from '../constants';\n\n/**\n *\n *\n * @param {*} legendConfig\n * @param {*} canvases\n * @returns\n */\nexport const legendCreator = (canvas) => {\n let LegendCls;\n const dataset = [];\n const axes = canvas.getRetinalAxes();\n\n Object.entries(axes).forEach((axisInfo) => {\n const scale = axisInfo[1][0];\n const scaleType = axisInfo[0];\n const scaleProps = canvas[scaleType]();\n\n if (scaleProps.field) {\n const {\n type,\n step\n } = scale.config();\n\n const stepMapper = typeof step === 'boolean' ? step : false;\n LegendCls = LEGEND_TYPE_MAP[`${type}-${stepMapper}-${scaleType}`];\n dataset.push({ scale, canvas, fieldName: scaleProps.field, LegendCls, scaleType });\n }\n });\n\n return dataset;\n};\n\n/**\n *\n *\n * @param {*} legendConfig\n * @param {*} canvases\n * @param {*} measurement\n * @param {*} prevLegends\n * @returns\n */\nexport const legendInitializer = (legendConfig, canvas, measurement, prevLegends) => {\n const legends = [];\n const {\n height,\n width,\n headerHeight\n } = measurement;\n const {\n position,\n align\n } = legendConfig;\n\n const legendInfo = legendCreator(canvas);\n\n legendInfo.forEach((dataInfo, index) => {\n let legend = {};\n\n const legendMeasures = {};\n const {\n LegendCls,\n scale,\n fieldName,\n scaleType\n } = dataInfo;\n const config = legendConfig[scaleType] || {};\n const title = config.title || {};\n title.text = title.text || fieldName;\n if (config.show) {\n config.position = position;\n config.align = align;\n\n if (prevLegends[index]) {\n legend = prevLegends[index].legend;\n } else {\n legend = LegendCls.create({\n labelManager: canvas._dependencies.smartlabel,\n cells: {\n AxisCell, TextCell\n }\n });\n }\n legendMeasures.maxHeight = align === VERTICAL ? (height - headerHeight) : height * 0.2;\n legendMeasures.maxWidth = align === HORIZONTAL ? width : width * 0.2;\n legendMeasures.width = Math.min(legendMeasures.maxWidth, config.width);\n legendMeasures.height = Math.min(legendMeasures.maxHeight, config.height);\n\n [PADDING, BORDER, MARGIN].forEach((e) => {\n legendMeasures[e] = config[e];\n });\n legend.scale(scale)\n .title(title)\n .fieldName(fieldName)\n .config(config)\n .metaData(canvas.composition().visualGroup.getGroupByData().project([fieldName]))\n .measurement(legendMeasures)\n .canvasAlias(canvas.alias())\n .setLegendMeasures();\n\n legends.push({ canvas, legend, scaleType });\n }\n });\n return legends;\n};\n\n/**\n *\n *\n * @param {*} legends\n * @param {*} legendConfig\n * @param {*} availableHeight\n * @param {*} availableWidth\n * @returns\n */\nexport const getLegendSpace = (legends, legendConfig, availableHeight, availableWidth) => {\n const legendMeasures = legends.map(legendInfo => legendInfo.legend.measurement());\n const legendSpace = { width: 0, height: 0 };\n\n legendMeasures.forEach((space) => {\n let height = 0;\n let width = 0;\n width = Math.min(space.width, space.maxWidth);\n height = Math.min(space.height, space.maxHeight);\n\n if (legendConfig.align === HORIZONTAL) {\n if (legendSpace.width + width > availableWidth) {\n legendSpace.width = availableWidth;\n legendSpace.height += height;\n } else {\n legendSpace.width += width;\n legendSpace.height = Math.max(legendSpace.height, height);\n }\n } else if (legendSpace.height + height > availableHeight) {\n legendSpace.height = height;\n legendSpace.width += width;\n } else {\n legendSpace.height += height;\n legendSpace.width = Math.max(legendSpace.width, width);\n }\n });\n if (legendConfig.align === HORIZONTAL) {\n legendSpace.width = availableWidth;\n }\n return legendSpace;\n};\n\n/**\n *\n *\n * @param {*} context\n * @param {*} headerHeight\n * @returns\n */\nexport const createLegend = (context, headerHeight, height, width) => {\n const measurement = {\n height,\n width,\n headerHeight\n };\n const { legend } = context.config();\n const { show, position } = legend;\n\n legend.classPrefix = context.config().classPrefix;\n const align = (position === LEFT || position === RIGHT) ? VERTICAL : HORIZONTAL;\n\n legend.show = show ? ((align === VERTICAL && width > 200) || (align === HORIZONTAL && height > 200)) : show;\n legend.align = align;\n return legendInitializer(legend, context, measurement, context.legends || []);\n};\n","import { mergeRecursive } from 'muze-utils';\nimport { arrangeComponents } from './component-resolver';\nimport { createHeaders } from './title-maker';\nimport { createLegend, getLegendSpace } from './legend-maker';\nimport { TOP, BOTTOM, LEFT, RIGHT } from '../constants';\n\n/**\n *\n *\n * @param {*} context\n * @returns\n */\nexport const prepareLayout = (layout, components, config, measurement) => {\n const {\n rows,\n columns,\n values,\n cornerMatrices\n } = components;\n\n const {\n topLeft,\n topRight,\n bottomLeft,\n bottomRight\n } = cornerMatrices;\n\n layout.measurement(measurement)\n .config(config)\n .matrices({\n top: [topLeft, columns[0], topRight],\n center: [rows[0], values, rows[1]],\n bottom: [bottomLeft, columns[1], bottomRight]\n })\n .triggerReflow();\n};\n\n/**\n *\n *\n * @param {*} context\n * @param {*} mount\n * @returns\n */\nexport const getRenderDetails = (context, mount) => {\n let layoutConfig = mergeRecursive({}, context.config());\n // Get height width of the mount point\n let { height, width } = mount.getBoundingClientRect();\n const heightAttr = context.height();\n const widthAttr = context.width();\n const visGroup = context.composition().visualGroup;\n const {\n isColumnSizeEqual,\n isRowSizeEqual,\n rows,\n columns,\n values\n } = visGroup.placeholderInfo();\n const {\n minWidth,\n minHeight,\n classPrefix,\n showHeaders,\n legend\n } = context.config();\n // Get title configuration\n const titleConfig = context.title()[1];\n // Get subtitle configuration\n const subtitleConfig = context.subtitle()[1];\n // Get legend position\n const legendPosition = legend.position;\n // Arrange components according to config\n const layoutArrangement = arrangeComponents(context);\n\n height = Math.floor(height);\n width = Math.floor(width);\n\n const availableHeightForCanvas = Math.max(heightAttr > 0 ? heightAttr : height, minHeight);\n const availableWidthForCanvas = Math.max(widthAttr > 0 ? widthAttr : width, minWidth);\n\n // Create headers and determine header height\n const { headers, headerHeight } = createHeaders(context, availableHeightForCanvas, availableWidthForCanvas);\n\n // Create legends and determine legend space\n const legends = createLegend(context, headerHeight, availableHeightForCanvas, availableWidthForCanvas);\n context._composition.legend = {};\n legends.forEach((e) => {\n context._composition.legend[e.scaleType] = e.legend;\n });\n\n const legendSpace = getLegendSpace(legends, legend, availableHeightForCanvas, availableWidthForCanvas);\n const legendWidth = (legendPosition === LEFT || legendPosition === RIGHT) ? legendSpace.width : 0;\n const legendHeight = (legendPosition === TOP || legendPosition === BOTTOM) ? legendSpace.height : 0;\n\n // Set components for layouting\n const components = {\n headers,\n legends,\n canvases: [context],\n rows,\n columns,\n values,\n cornerMatrices: visGroup.cornerMatrices()\n };\n const measurement = {\n mountSpace: {\n height,\n width\n },\n headerHeight,\n legendSpace,\n canvasWidth: availableWidthForCanvas,\n canvasHeight: availableHeightForCanvas,\n width: availableWidthForCanvas - legendWidth,\n height: availableHeightForCanvas - headerHeight - legendHeight,\n minUnitHeight: context.minUnitHeight(),\n minUnitWidth: context.minUnitWidth()\n };\n layoutConfig = mergeRecursive(layoutConfig, {\n classPrefix,\n showHeaders,\n border: mergeRecursive(visGroup.metaData().border, context.config().border),\n layoutArrangement,\n legend,\n title: titleConfig,\n subtitle: subtitleConfig,\n isColumnSizeEqual,\n isRowSizeEqual\n });\n return {\n layoutConfig,\n components,\n measurement\n };\n};\n","export const TITLE_CONFIG = {\n position: 'top',\n align: 'left',\n padding: 8\n};\n\nexport const SUB_TITLE_CONFIG = {\n position: 'top',\n align: 'left',\n padding: 16\n};\n","import { mergeRecursive, selectElement } from 'muze-utils';\nimport {\n ROWS,\n COLUMNS,\n COLOR,\n SHAPE,\n SIZE,\n DETAIL,\n LAYERS,\n TRANSFORM,\n MOUNT,\n TITLE,\n SUB_TITLE\n} from '../constants';\nimport { TITLE_CONFIG, SUB_TITLE_CONFIG } from './defaults';\n/**\n * @module\n * This is the local options semantics based on which setters getters are created and reactivity is initiated.\n * This local object is only valid for Canvas.\n * Canvas merges global and local object both to the model\n *\n * Format\n * PROPERTRY_NAME: {\n * value: // default value of the property,\n * meta: {\n * typeCheck: // The setter value will be checked using this. If the value is function then the setter value\n * // is passed as args.\n * typeExpected: // The output of typecheck action will be tested against this. Truthy value will set the\n * // value to the setter\n * sanitizaiton: // Need for sanitization before type is checked\n * }\n * }\n */\n\nexport const localOptions = {\n [ROWS]: {\n value: null,\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Array'\n }\n },\n [COLUMNS]: {\n value: null,\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Array'\n }\n },\n [COLOR]: {\n value: null,\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Object',\n sanitization: (config) => {\n if (typeof config === 'string') {\n return {\n field: config\n };\n }\n return config;\n }\n }\n },\n [SHAPE]: {\n value: null,\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Object',\n sanitization: (config) => {\n if (typeof config === 'string') {\n return {\n field: config\n };\n }\n return config;\n }\n }\n },\n [SIZE]: {\n value: null,\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Object',\n sanitization: (config) => {\n if (typeof config === 'string') {\n return {\n field: config\n };\n }\n return config;\n }\n }\n },\n [DETAIL]: {\n value: [],\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Array'\n }\n },\n\n [LAYERS]: {\n value: null,\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Array'\n }\n },\n [TRANSFORM]: {\n value: null,\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Object'\n }\n },\n [MOUNT]: {\n value: null,\n meta: {\n sanitization: (value) => {\n if (typeof value === 'string') {\n return selectElement(value).node();\n }\n return value;\n }\n }\n }\n};\n\nexport const canvasOptions = {\n [TITLE]: {\n value: [null, null],\n meta: {\n typeCheck: ['constructor', 'constructor'],\n typeExpected: ['Function', 'Object'],\n spreadParams: true,\n sanitization: [(title) => {\n if (typeof title === 'string') {\n const t = () => title;\n t._sanitized = true;\n return t;\n }\n return title;\n }, (titleConfig) => {\n const defConfig = mergeRecursive({}, TITLE_CONFIG);\n return mergeRecursive(defConfig, titleConfig);\n }]\n }\n },\n [SUB_TITLE]: {\n value: [null, null],\n meta: {\n typeCheck: ['constructor', 'constructor'],\n typeExpected: ['Function', 'Object'],\n spreadParams: true,\n sanitization: [(subtitle) => {\n if (typeof subtitle === 'string') {\n const sub = () => subtitle;\n sub._sanitized = true;\n return sub;\n }\n return subtitle;\n }, (subtitleConfig) => {\n const defConfig = mergeRecursive({}, SUB_TITLE_CONFIG);\n return mergeRecursive(defConfig, subtitleConfig);\n }]\n }\n }\n};\n","import { makeElement, selectElement } from 'muze-utils';\nimport { VERTICAL, HORIZONTAL, TOP, LEFT, RIGHT, BOTTOM } from '../constants';\n\n/**\n * Sets the rotation for all x axes if any axis has the rotation config set in the\n * entire view\n *\n * @param {Array} columns Column cells that contain the axes cells\n */\nconst setLabelRotationForAxes = (context) => {\n let rotation = 0;\n\n const xAxes = context.xAxes() || [];\n\n (() => {\n for (let i = 0; i < xAxes.length; i++) {\n for (let j = 0; j < xAxes[i].length; j++) {\n if (xAxes[i][j].config().labels.rotation !== 0) {\n rotation = xAxes[i][j].config().labels.rotation;\n return;\n }\n }\n }\n })();\n\n if (rotation) {\n xAxes.forEach((axes) => {\n axes.forEach((axis) => {\n axis.config({ labels: { rotation, smartTicks: false } });\n });\n });\n }\n};\n\n/**\n *\n *\n * @param {*} context\n * @param {*} mount\n * @returns\n */\nconst getSkeletons = (mount, layoutConfig, measurement) => {\n const {\n layoutArrangement,\n classPrefix\n } = layoutConfig;\n const {\n headers,\n legends\n } = layoutArrangement;\n const {\n canvasWidth,\n canvasHeight\n } = measurement;\n const container = selectElement(mount);\n const components = {};\n const mountPoint = makeElement(container, 'div', [1], `${classPrefix}-viz`)\n .style('width', `${canvasWidth}px`)\n .style('height', `${canvasHeight}px`);\n const containers = mountPoint\n .selectAll(`.${classPrefix}-container`)\n .data(headers);\n containers.exit().remove();\n const containersEnter = containers.enter().append('div');\n\n const mergedContainer = containersEnter.merge(containers)\n .attr('class', `${classPrefix}-container`)\n .style('width', `${canvasWidth}px`)\n .style('padding', `${null}px`)\n .style('margin', null)\n .each(function (type) {\n components[type] = selectElement(this).classed(`${classPrefix}-${type}-container`, true);\n });\n const innerContainer = mergedContainer\n .selectAll(`.${classPrefix}-inner-container`)\n .data((d) => {\n if (d === 'group') {\n return legends;\n } return [];\n });\n innerContainer.exit().remove();\n const innerContainerEnter = innerContainer.enter().append('div');\n\n innerContainerEnter\n .merge(innerContainer)\n .attr('class', `${classPrefix}-inner-container`)\n .style('width', 'auto')\n .style('height', 'auto')\n .each(function (layoutType) {\n components[layoutType] = selectElement(this)\n .classed(`${classPrefix}-${layoutType}-container`, true);\n });\n return components;\n};\n\n/**\n *\n *\n * @param {*} context\n * @param {*} container\n * @param {*} legendComponents\n */\nconst renderLegend = (legendConfig, container, legendComponents, measurement) => {\n const sectionComponents = [];\n const { legendSpace, headerHeight, height, width } = measurement;\n const { legend, classPrefix } = legendConfig;\n const { position } = legend;\n const legendMount = makeElement(container, 'div', [legendComponents], `${classPrefix}-inner-content`, {}, d => d);\n legendMount.classed(`${classPrefix}-legend`, true);\n const align = (position === LEFT || position === RIGHT) ? VERTICAL : HORIZONTAL;\n const legWidth = align === VERTICAL ? legendSpace.width : width;\n const legHeight = align === VERTICAL ? height - headerHeight : legendSpace.height;\n\n [container, legendMount].forEach((elem) => {\n elem.style('width', `${Math.floor(legWidth)}px`)\n .style('height', `${legHeight}px`)\n .style('float', LEFT);\n });\n\n if (align === VERTICAL) {\n let sections = -1;\n let currHeight = legHeight;\n let currWidth = 0;\n\n legendComponents.forEach((legendInfo) => {\n const leg = legendInfo.legend;\n if (leg.measurement().height > currHeight) {\n sections++;\n currWidth = 0;\n currHeight = legHeight;\n } else {\n sections < 0 && sections++;\n }\n sectionComponents[sections] = sectionComponents[sections] || [];\n currHeight -= Math.min(leg.measurement().height, currHeight);\n currWidth = Math.max(Math.min(leg.measurement().width, leg.measurement().maxWidth), currWidth);\n sectionComponents[sections].push({\n legend: leg,\n legendHeight: legHeight,\n legendWidth: currWidth\n });\n });\n\n const mount = makeElement(legendMount, ['div'], sectionComponents, `${classPrefix}-legend-section`)\n .each((d, i) => selectElement(this).classed(`${classPrefix}-legend-section-${i}`, true))\n .classed(`${classPrefix}-legend-vertical-section`, true)\n .style('width', d => `${d[0].legendWidth}px`);\n makeElement(mount, ['div'], d => d, `${classPrefix}-legend-components`, {}, d => d.legend.id())\n .each(function (d) {\n d.legend.mount(this);\n })\n .style('width', d => `${d.legendWidth}px`);\n } else {\n const mount = makeElement(legendMount, 'div', [1], `${classPrefix}-legend-section`)\n .classed(`${classPrefix}-legend-horizontal-section`, true)\n .classed(`${classPrefix}-legend-section-${0}`, true)\n .style('width', `${legWidth}px`);\n\n makeElement(mount, 'div', legendComponents, `${classPrefix}-legend-components`, {}, d => d.legend.id())\n .each(function (d) { d.legend.mount(this); })\n .style('width', d => `${d.legend.measurement().width}px`);\n }\n};\n\n/**\n *\n *\n * @param {*} context\n * @param {*} container\n * @param {*} type\n * @param {*} headers\n */\nconst renderHeader = (layoutConfig, container, type, headers) => {\n const headerCell = headers[`${type}Cell`];\n const config = layoutConfig[`${type}`];\n const { position, align, padding } = config;\n const sel = container\n .selectAll(`.${layoutConfig.classPrefix}-inner-container`)\n .data([type]);\n sel.exit().remove();\n const selEnter = sel.enter().append('div');\n\n const cont = selEnter.merge(sel);\n cont.classed(`${layoutConfig.classPrefix}-inner-container`, true);\n\n headerCell && headerCell.render(cont.node());\n\n cont.selectAll('div').classed(`${layoutConfig.classPrefix}-inner-content`, true);\n cont.style('width', `${100}%`);\n\n if (config && headerCell) {\n cont.style('float', LEFT)\n .style('text-align', align)\n .style(`padding-${position === TOP ? BOTTOM : TOP}`, `${padding}px`);\n }\n};\n\n/**\n *\n *\n * @param {*} context\n * @param {*} shifter\n */\nconst shiftHeaders = (config, shifter, measurement, mount) => {\n const { classPrefix, title, subtitle, legend } = config;\n const { legendSpace } = measurement;\n const { position } = legend;\n\n shifter += position === LEFT ? legendSpace.width : 0;\n title && selectElement(mount).select(`.${classPrefix}-title-container`)\n .style('width', title.align === LEFT ? `calc(100% - ${shifter}px` : '100%')\n .style('margin-left', title.align === LEFT ? `${shifter}px` : 0);\n subtitle && selectElement(mount).select(`.${classPrefix}-subtitle-container`)\n .style('width', subtitle.align === LEFT ? `calc(100% - ${shifter}px` : '100%')\n .style('margin-left', subtitle.align === LEFT ? `${shifter}px` : 0);\n\n selectElement(mount).select(`.${classPrefix}-legend-horizontal-section`)\n .style('margin-left', `${shifter}px`)\n .style('width', `${legendSpace.width - shifter}px`)\n .selectAll(`.${classPrefix}-legend-body, .${classPrefix}-legend-title`)\n .style('max-width', `${legendSpace.width - shifter}px`);\n selectElement(mount).select(`.${classPrefix}-legend-vertical-section`)\n .style('margin-left', null)\n .selectAll(`.${classPrefix}-legend-body, .${classPrefix}-legend-title`)\n .style('max-width', null);\n};\n\n/**\n *\n *\n * @param {*} mountPoint\n * @param {*} measurement\n * @param {*} classPrefix\n * @returns\n */\nconst prepareGridContainer = (mountPoint, measurement, classPrefix, alias) => {\n if (!mountPoint) {\n return this;\n }\n\n const {\n height,\n width\n } = measurement;\n // Create container for the layout\n\n const sel = selectElement(mountPoint)\n .selectAll(`.${classPrefix}-inner-content`)\n .data(['layout'], d => d);\n sel.exit().remove();\n const selEnter = sel.enter().append('div');\n\n const container = selEnter.merge(sel)\n .attr('class', `${classPrefix}-inner-content`)\n .classed(`${classPrefix}-grid-layout`, true)\n .attr('id', `${classPrefix}-grid-layout-${alias}`)\n .style('height', `${height}px`)\n .style('padding', null)\n .style('width', `${Math.ceil(width)}px`);\n // Mount for matrices\n const innerSel = container.selectAll(`.${classPrefix}-layout-grid-container`)\n .data(['layout2']);\n innerSel.exit().remove();\n const innerSelEnter = innerSel.enter().append('div');\n\n const mount = innerSelEnter.merge(innerSel);\n mount.classed(`${classPrefix}-layout-grid-container`, true)\n .attr('id', `${classPrefix}-layout-grid-container-${alias}`)\n .style('height', `${height}px`)\n .style('width', `${Math.ceil(width)}px`);\n\n return {\n mount,\n container\n };\n};\n\n/**\n *\n *\n * @param {*} context\n * @param {*} components\n * @param {*} layoutConfig\n * @param {*} measurement\n */\nexport const renderComponents = (context, components, layoutConfig, measurement) => {\n const mountPoint = context.mount();\n const {\n headers,\n legends\n } = components;\n const {\n classPrefix\n } = layoutConfig;\n const {\n title,\n legend,\n subtitle,\n layout\n } = getSkeletons(mountPoint, layoutConfig, measurement);\n const {\n mount\n } = prepareGridContainer(layout.node(), measurement, classPrefix, context.alias());\n const padding = context.layout().getViewInformation().layoutDimensions.viewWidth[0];\n measurement.padding = padding;\n setLabelRotationForAxes(context);\n\n // Render layout\n context.layout().renderGrid(mount);\n context.once('layer.drawn').then(() => {\n renderHeader(layoutConfig, title, 'title', headers);\n renderHeader(layoutConfig, subtitle, 'subtitle', headers);\n renderLegend(layoutConfig, legend, legends, measurement);\n shiftHeaders(layoutConfig, padding, measurement, mountPoint);\n });\n context.composition().visualGroup.matrixInstance().value.each((el) => {\n el.valueOf().parentContainer(layout.node());\n });\n};\n","import { isEqual } from 'muze-utils';\nimport { ROWS, COLUMNS, COLOR, SHAPE, SIZE, MOUNT, DETAIL, DATA, CONFIG } from '../constants';\nimport { canvasOptions } from './local-options';\n\n/**\n * Instantiate high level components. Canvas knows what all high level component it has.\n * @nice-to-have dynamic high level components.\n * - Is it even required ?\n * - Reactive to source (canvas) streaming ?\n * @param {*} context Canvas instance\n * @return {Object.fArray>} Arrays of Title, visualGroup, Legend\n */\nexport const initCanvas = (context) => {\n const reg = context._registry.components;\n\n return [new reg.VisualGroup(context._registry, context.dependencies())];\n};\n\n/**\n *\n *\n * @memberof Canvas\n */\nexport const dispatchProps = (context) => {\n const lifeCycleManager = context.dependencies().lifeCycleManager;\n lifeCycleManager.notify({ client: context, action: 'beforeupdate' });\n const visualGroup = context.composition().visualGroup;\n\n visualGroup.lockModel();\n const allOptions = context._allOptions;\n for (const key in allOptions) {\n const value = context[key]();\n if (value !== null) {\n visualGroup[key] && visualGroup[key](value);\n }\n }\n visualGroup.unlockModel();\n\n context._cachedProps = {};\n lifeCycleManager.notify({ client: context, action: 'initialized' });\n lifeCycleManager.notify({ client: context, action: 'updated' });\n};\n\n/**\n *\n *\n */\nexport const setupChangeListener = (context) => {\n const store = context._store;\n\n store.registerImmediateListener(MOUNT, () => {\n const allOptions = Object.keys(context._allOptions);\n const props = [...allOptions, ...Object.keys(canvasOptions)];\n let equalityChecker = () => false;\n store.registerChangeListener(props, (...params) => {\n const updateProps = props.every((option, i) => {\n switch (option) {\n case ROWS:\n case COLUMNS:\n case DETAIL:\n equalityChecker = isEqual('Array');\n break;\n\n case SHAPE:\n case SIZE:\n case COLOR:\n case DATA:\n case CONFIG:\n equalityChecker = isEqual('Object');\n break;\n default:\n equalityChecker = () => true;\n break;\n }\n const oldVal = params[i][0];\n const newVal = params[i][1];\n\n return equalityChecker(oldVal, newVal);\n });\n // inform attached board to rerender\n !updateProps && dispatchProps(context);\n context.render();\n }, true);\n });\n};\n\nexport const applyInteractionPolicy = (policies, firebolt) => {\n const canvas = firebolt.context;\n const visualGroup = canvas.composition().visualGroup;\n const valueMatrix = visualGroup.composition().matrices.value;\n policies.forEach(policy => policy(valueMatrix, firebolt));\n};\n","import {\n getDataModelFromIdentifiers,\n FieldType,\n mergeRecursive\n} from 'muze-utils';\n\nimport { applyInteractionPolicy } from './helper';\n\nconst defaultInteractionPolicy = (valueMatrix, firebolt) => {\n const isMeasure = field => field.type() === FieldType.MEASURE;\n const canvas = firebolt.context;\n const visualGroup = canvas.composition().visualGroup;\n const xFields = [].concat(...visualGroup.getFieldsFromChannel('x'));\n const yFields = [].concat(...visualGroup.getFieldsFromChannel('y'));\n const colDim = xFields.every(field => field.type() === FieldType.DIMENSION);\n const fieldInf = visualGroup.resolver().getAllFields();\n const rowFacets = fieldInf.rowFacets;\n const colFacets = fieldInf.colFacets;\n valueMatrix.each((cell) => {\n const unitFireBolt = cell.valueOf().firebolt();\n\n if (!(xFields.every(isMeasure) && yFields.every(isMeasure))) {\n const facetFields = cell.valueOf().facetByFields()[0];\n const unitColFacets = facetFields.filter(d => colFacets.findIndex(v => v.equals(d)) !== -1);\n const unitRowFacets = facetFields.filter(d => rowFacets.findIndex(v => v.equals(d)) !== -1);\n let propFields;\n if (colDim) {\n propFields = unitColFacets.map(d => `${d}`);\n } else {\n propFields = unitRowFacets.map(d => `${d}`);\n }\n\n unitFireBolt.propagateWith('*', propFields, true);\n }\n });\n};\n\nconst defaultCrossInteractionPolicy = {\n behaviours: {\n '*': (propagationPayload, context) => {\n const propagationCanvasAlias = propagationPayload.sourceCanvas;\n const canvasAlias = context.parentAlias();\n return propagationCanvasAlias ? canvasAlias === propagationCanvasAlias : true;\n }\n },\n sideEffects: {\n tooltip: (propagationPayload, context) => {\n const propagationUnit = propagationPayload.sourceUnit;\n const propagationCanvas = propagationPayload.sourceCanvas;\n const unitId = context.id();\n const canvasAlias = context.parentAlias();\n if (propagationCanvas) {\n return propagationCanvas !== canvasAlias ? true : unitId === propagationUnit;\n }\n return true;\n }\n }\n};\n\nexport default class GroupFireBolt {\n constructor (context) {\n this.context = context;\n this._interactionPolicy = this.constructor.defaultInteractionPolicy();\n this._crossInteractionPolicy = this.constructor.defaultCrossInteractionPolicy();\n this.context.once('canvas.updated').then(() => {\n applyInteractionPolicy([this._interactionPolicy], this);\n const crossInteractionPolicy = this._crossInteractionPolicy;\n const behaviours = crossInteractionPolicy.behaviours;\n const sideEffects = crossInteractionPolicy.sideEffects;\n const visualGroup = context.composition().visualGroup;\n const valueMatrix = visualGroup.composition().matrices.value;\n valueMatrix.each((cell) => {\n const unitFireBolt = cell.valueOf().firebolt();\n for (const key in behaviours) {\n unitFireBolt.changeBehaviourStateOnPropagation(key, behaviours[key]);\n }\n for (const key in sideEffects) {\n unitFireBolt.changeSideEffectStateOnPropagation(key, sideEffects[key]);\n }\n });\n });\n }\n\n static defaultInteractionPolicy () {\n return defaultInteractionPolicy;\n }\n\n static defaultCrossInteractionPolicy () {\n return defaultCrossInteractionPolicy;\n }\n\n interactionPolicy (...policy) {\n if (policy.length) {\n this._interactionPolicy = policy[0] || this.constructor.defaultInteractionPolicy();\n return this;\n }\n return this._interactionPolicy;\n }\n\n crossInteractionPolicy (...policy) {\n if (policy.length) {\n this._crossInteractionPolicy = mergeRecursive(mergeRecursive({},\n this.constructor.defaultCrossInteractionPolicy()), policy[0] || {});\n return this;\n }\n return this._crossInteractionPolicy;\n }\n\n dispatchBehaviour (behaviour, payload) {\n const propPayload = Object.assign(payload);\n const criteria = propPayload.criteria;\n const data = this.context.data();\n\n propPayload.action = behaviour;\n const model = getDataModelFromIdentifiers(data, criteria);\n data.propagate(model, propPayload, {\n sourceId: this.context.alias()\n });\n return this;\n }\n\n}\n","import { GridLayout } from '@chartshq/layout';\nimport { transactor, Store, getUniqueId } from 'muze-utils';\nimport { RETINAL } from '../constants';\nimport TransactionSupport from '../transaction-support';\nimport { getRenderDetails, prepareLayout } from './layout-maker';\nimport { localOptions, canvasOptions } from './local-options';\nimport { renderComponents } from './renderer';\nimport GroupFireBolt from './firebolt';\nimport options from '../options';\nimport { initCanvas, setupChangeListener } from './helper';\n\n/**\n * This is the primary class which manages highlevel components like visualGroup, Titles, Legend, Extensions\n * (in future). Global level Muze functionality is subset this. Every time user works with an instance of\n * canvas in dom which provides instance level settings.\n *\n */\nexport default class Canvas extends TransactionSupport {\n\n /**\n * Creates reactive property accessors.\n * - data\n * - height\n * - width\n * - config\n * This configs are retrieved from options.\n */\n constructor (globalDependencies) {\n super();\n\n this._allOptions = Object.assign({}, options, localOptions);\n this._registry = {};\n this._composition = {};\n this._cachedProps = {};\n this._alias = null;\n this._renderedResolve = null;\n this._renderedPromise = new Promise((resolve) => {\n this._renderedResolve = resolve;\n });\n this._composition.layout = new GridLayout();\n this._store = new Store({});\n\n // Setters and getters will be mounted on this. The object will be mutated.\n const [, store] = transactor(this, options, this._store.model);\n transactor(this, localOptions, store);\n transactor(this, canvasOptions, store);\n this.dependencies(Object.assign({}, globalDependencies, this._dependencies));\n this.firebolt(new GroupFireBolt(this));\n this.alias(`canvas-${getUniqueId()}`);\n this.title('', {});\n this.subtitle('', {});\n this.legend({});\n this.color({});\n this.shape({});\n this.size({});\n setupChangeListener(this);\n }\n\n /**\n *\n *\n * @readonly\n * @memberof Canvas\n */\n layout (...params) {\n if (params.length) {\n return this;\n }\n return this.composition().layout;\n }\n\n /**\n *\n *\n * @readonly\n * @memberof Canvas\n */\n composition (...params) {\n if (params.length) {\n return this;\n }\n return this._composition;\n }\n\n done () {\n return this._renderedPromise;\n }\n\n /**\n *\n *\n * @param {*} params\n * @returns\n * @memberof Canvas\n */\n alias (...params) {\n if (params.length) {\n const visualGroup = this.composition().visualGroup;\n this._alias = params[0];\n visualGroup && visualGroup.alias(this.alias());\n return this;\n }\n return this._alias;\n }\n\n /**\n * Creates an instance initiated with given settings.\n *\n * @param {Object} initialSettings Initial settings to be populated in the model\n * @param {Object} regEntry newly created instance with the initial settings\n * @param {Object} globalDependencies dependencies which will be created only once in the page\n *\n * @return {Object} newly created instance with the initial settings\n */\n static withSettings (initialSettings, regEntry, globalDependencies) {\n const instance = new Canvas(globalDependencies);\n\n for (const key in initialSettings) {\n instance[key](initialSettings[key]);\n }\n // set registry for instance\n instance.registry(regEntry);\n return instance;\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof Canvas\n */\n static formalName () {\n return 'canvas';\n }\n\n /**\n *\n *\n * @readonly\n * @memberof Canvas\n */\n firebolt (...firebolt) {\n if (firebolt.length) {\n this._firebolt = firebolt[0];\n return this;\n }\n return this._firebolt;\n }\n\n /**\n * Registry peoperty accessor\n *\n * @param {Object} reg plain old javascript object keyvalue pairs. Key containing module name and value contains\n * module definition class. The reg object has to be flat object of level 1.\n */\n registry (...params) {\n if (params.length) {\n const components = Object.assign({}, params[0].components);\n const componentSubRegistry = Object.assign({}, params[0].componentSubRegistry);\n\n this._registry = { components, componentSubRegistry };\n const initedComponents = initCanvas(this);\n // @todo is it okay to continue this tight behaviour? If not use a resolver to resolve diff component type.\n this._composition.visualGroup = initedComponents[0];\n\n this.composition().visualGroup.alias(this.alias());\n return this;\n }\n return this._registry;\n }\n\n /*\n * Prepare dependencies for top level elements\n */\n dependencies (...param) {\n if (param.length) {\n this._dependencies = param[0];\n return this;\n }\n // @todo prepare dependencies here.\n return this._dependencies;\n }\n\n /**\n *\n *\n * @param {*} lifeCycles\n * @returns\n * @memberof Canvas\n */\n lifeCycle (lifeCycles) {\n const lifeCycleManager = this.dependencies().lifeCycleManager;\n if (lifeCycles) {\n lifeCycleManager.register(lifeCycles);\n return this;\n }\n return lifeCycleManager;\n }\n\n /**\n *\n *\n * @readonly\n * @memberof Canvas\n */\n legend (...params) {\n if (params.length) {\n return this;\n }\n return this.composition().legend;\n }\n\n /**\n *\n *\n * @param {*} eventName\n * @returns\n * @memberof Canvas\n */\n once (eventName) {\n const lifeCycleManager = this.dependencies().lifeCycleManager;\n return lifeCycleManager.retrieve(eventName);\n }\n\n /**\n * Internal function to trigger render, this method is cognizant of all the properties of the core modules and\n * establish a passive reactivity. Passive reactivity is not always a bad thing :)\n * @internal\n */\n render () {\n const mount = this.mount();\n const visGroup = this.composition().visualGroup;\n const lifeCycleManager = this.dependencies().lifeCycleManager;\n // Get render details including arrangement and measurement\n const { components, layoutConfig, measurement } = getRenderDetails(this, mount);\n\n lifeCycleManager.notify({ client: this, action: 'beforedraw' });\n // Prepare the layout by triggering the matrix calculation\n prepareLayout(this.layout(), components, layoutConfig, measurement);\n // Render each component\n renderComponents(this, components, layoutConfig, measurement);\n // Update life cycle\n lifeCycleManager.notify({ client: this, action: 'drawn' });\n const promises = [];\n visGroup.matrixInstance().value.each((el) => {\n promises.push(el.valueOf().done());\n });\n Promise.all(promises).then(() => {\n this._renderedResolve();\n });\n }\n\n /**\n *\n *\n * @returns\n * @memberof Canvas\n */\n xAxes () {\n return this.composition().visualGroup.getAxes('x');\n }\n\n /**\n *\n *\n * @returns\n * @memberof Canvas\n */\n yAxes () {\n return this.composition().visualGroup.getAxes('y');\n }\n\n /**\n *\n *\n * @returns\n * @memberof Canvas\n */\n getRetinalAxes () {\n const visualGroup = this.composition().visualGroup;\n return visualGroup.getAxes(RETINAL);\n }\n}\n","import { cellRegistry, SimpleCell } from '@chartshq/visual-cell';\nimport { VisualUnit } from '@chartshq/visual-unit';\nimport { layerRegistry } from '@chartshq/visual-layer';\nimport { SimpleGroup, VisualGroup } from '@chartshq/visual-group';\n\nexport const COMPONENTS = {\n VisualGroup,\n VisualUnit\n};\nexport const SUBREGISTRIES = {\n cellRegistry,\n layerRegistry\n};\nexport const INTERFACES = {\n SimpleGroup,\n SimpleCell\n};\n\n","import { DEFAULT_LAYERS } from './defaults';\n\nexport default () => {\n const reg = DEFAULT_LAYERS;\n const regObj = {\n set: (key, def) => {\n reg[key] = def;\n return regObj;\n },\n get: () => reg\n };\n return regObj;\n};\n","import {\n transactor,\n Smartlabel,\n enableChainedTransaction,\n LifeCycleManager,\n DataModel,\n makeElement,\n getClientPoint,\n selectElement,\n getEvent,\n require,\n DateTimeFormatter\n} from 'muze-utils';\n\nimport {\n SurrogateSideEffect,\n SpawnableSideEffect,\n sideEffects,\n PersistentBehaviour,\n GenericBehaviour,\n VolatileBehaviour,\n behaviouralActions,\n GenericSideEffect\n} from '@chartshq/muze-firebolt';\nimport { layerFactory } from '@chartshq/visual-layer';\nimport pkg from '../package.json';\nimport * as operators from './operators';\nimport { actionModel as ActionModel } from './action-model';\nimport options from './options';\nimport { Canvas } from './canvas';\nimport { COMPONENTS, SUBREGISTRIES } from './default-registry';\nimport './muze.scss';\n\n// Cache singleton instances which should be included only once in a page\nconst globalCache = {};\nconst defaultRegistry = COMPONENTS;\n\nconst overrideRegistryDefinitions = (overrideRegistry, registry) => {\n for (const prop in overrideRegistry) {\n registry.set(prop, overrideRegistry[prop]);\n }\n};\n\n/**\n * Entry point to renderer. Initializes an environment with settings and registries for canvas. This is a simple wrapper\n * over {@link Canvas} which enables common configuration passing to multiple such canvases.\n *\n * Everytime `muze()` is called it creates an environment. These environment supports subset of APIs of Canvas. If\n * common configuration is used to render multiple canvases then it can be set directly in the env. Like if data is\n * common across all the visulization then its better to set the data in env. When a canvas is created it receives all\n * those configuration from env.\n *\n * ```\n * // Creates an environment\n * const env = muze()\n * // Set data property in environment, so that all the canvas created from the same environment gets this data\n * // automatically\n * env.data(dm);\n * // Creates canvas, by default env pushes data to canvas instance\n * const canvas = env.canvas();\n * ```\n *\n * If a property is set on both environment and canvas instance, property set on canvas instance gets more priority.\n *\n * @public\n * @module muze\n * @namespace Muze\n *\n * @return {Env} Instance of an environment\n */\nconst muze = () => {\n // Setters and getters will be mounted on this. Object will be mutated.\n const [env, globalStore] = transactor({}, options);\n const components = Object.assign({}, COMPONENTS);\n const componentSubRegistryDef = Object.assign(SUBREGISTRIES);\n const componentSubRegistry = {};\n\n for (const prop in componentSubRegistryDef) {\n componentSubRegistry[prop] = componentSubRegistryDef[prop]();\n }\n\n // Apart form the setter getter, an instance method is injected to create real renderer instances\n env.canvas = () => {\n // Create a canvas instance with this settings\n const settings = globalStore.serialize();\n const canvas = Canvas.withSettings(settings, { /* registry */\n components,\n componentSubRegistry\n }, env.globalDependencies());\n\n // Whenever settings is changed canvas is updated\n enableChainedTransaction(globalStore, canvas, Object.keys(settings));\n\n return canvas;\n };\n\n // Global dependencies for for compositions. Only one copy of the same should be in the page\n env.globalDependencies = () => {\n if (!globalCache.smartlabel) {\n globalCache.smartlabel = new Smartlabel(1, 'body');\n }\n return {\n smartlabel: globalCache.smartlabel,\n lifeCycleManager: new LifeCycleManager()\n };\n };\n\n // Retrieves global settings. This getter is readonly so that user can't change this as change should happen\n // only from setter to avoid unwanted sync issues.\n env.settings = () => globalStore.serialize();\n\n env.registry = (...overrideRegistry) => {\n // Selectively copy the properties from COMPONENTS\n if (overrideRegistry.length) {\n for (const prop in overrideRegistry) {\n if (prop in defaultRegistry) {\n components[prop] = overrideRegistry[prop];\n }\n }\n return env;\n }\n return components;\n };\n\n env.cellRegistry = (...overrideRegistry) => {\n const cellRegistry = componentSubRegistry.cellRegistry;\n if (overrideRegistry.length) {\n overrideRegistryDefinitions(overrideRegistry[0], cellRegistry);\n return env;\n }\n return cellRegistry.get();\n };\n\n env.layerRegistry = (...overrideRegistry) => {\n const layerRegistry = componentSubRegistry.layerRegistry;\n if (overrideRegistry.length) {\n overrideRegistryDefinitions(overrideRegistry[0], layerRegistry);\n return env;\n }\n return layerRegistry.get();\n };\n\n return env;\n};\n\nconst SideEffects = {\n sideEffects,\n standards: {\n SurrogateSideEffect,\n SpawnableSideEffect,\n GenericSideEffect\n }\n};\n\nconst Behaviours = {\n behaviouralActions,\n standards: {\n GenericBehaviour,\n PersistentBehaviour,\n VolatileBehaviour\n }\n};\n\nmuze.DataModel = DataModel;\nmuze.version = pkg.version;\nmuze.SideEffects = SideEffects;\nmuze.ActionModel = ActionModel;\nmuze.layerFactory = layerFactory;\nmuze.Operators = operators;\nmuze.Behaviours = Behaviours;\nmuze.utils = {\n getClientPoint,\n getEvent,\n makeElement,\n selectElement,\n DateTimeFormatter,\n require\n};\n\nexport default muze;\n"],"sourceRoot":""} \ No newline at end of file diff --git a/packages/muze/src/canvas/layout-maker.js b/packages/muze/src/canvas/layout-maker.js index 88095f35..57ac1608 100644 --- a/packages/muze/src/canvas/layout-maker.js +++ b/packages/muze/src/canvas/layout-maker.js @@ -1,79 +1,9 @@ -import { cellRegistry } from '@chartshq/visual-cell'; import { mergeRecursive } from 'muze-utils'; import { arrangeComponents } from './component-resolver'; import { createHeaders } from './title-maker'; import { createLegend, getLegendSpace } from './legend-maker'; import { TOP, BOTTOM, LEFT, RIGHT } from '../constants'; -const BlankCell = cellRegistry().get().BlankCell; - -const createBlankCell = () => new BlankCell(); - -/** - * - * - * @param {*} canvases - * @returns - */ -const getMaxRows = (rows) => { - const maxRows = [0, 0]; - - maxRows[0] = Math.max(maxRows[0], rows[0].length ? rows[0][0].length : 0); - maxRows[1] = Math.max(maxRows[1], rows[1].length ? rows[1][0].length : 0); - return maxRows; -}; - -/** - * - * - * @param {*} arr - * @param {*} value - */ -const fillArray = (arr, value) => arr.map(() => value()); - -/** - * - * - * @param {*} rows - * @param {*} columns - * @param {*} blankCellCreator - * @returns - */ -const blankMatrixCreator = (rows, columns, blankCellCreator) => { - const arr = []; - - for (let i = 0; i < rows; i++) { - let array = new Array(columns).fill([]); - array = fillArray(array, blankCellCreator); - arr.push(array); - } - return arr; -}; - -/** - * - * - * @param {*} rowMatrices - * @param {*} maxRows - */ -const blankCellCreator = (rowMatrices, maxRows) => rowMatrices.map((rowMatrix, rowMatrixIndex) => { - if (rowMatrix.length === 0 && maxRows[rowMatrixIndex] > 0) { - const numberOfRows = Math.max(rowMatrices[0].length, rowMatrices[1].length); - return blankMatrixCreator(numberOfRows, maxRows[rowMatrixIndex], createBlankCell); - } - if (rowMatrix.length > 0) { - if (rowMatrix[0] && rowMatrix[0].length <= maxRows[rowMatrixIndex]) { - return rowMatrix.map((row) => { - let arr = new Array(maxRows[rowMatrixIndex] - rowMatrix[0].length).fill(1); - arr = fillArray(arr, createBlankCell); - return [...arr, ...row]; - }); - } - return blankMatrixCreator(rowMatrix.length, maxRows[rowMatrixIndex], createBlankCell); - } - return rowMatrix; -}); - /** * * @@ -81,20 +11,13 @@ const blankCellCreator = (rowMatrices, maxRows) => rowMatrices.map((rowMatrix, r * @returns */ export const prepareLayout = (layout, components, config, measurement) => { - let topL; - let topR; - let bottomL; - let bottomR; const { rows, columns, values, cornerMatrices } = components; - const { - showHeaders - } = config; - const maxRows = getMaxRows(rows); + const { topLeft, topRight, @@ -102,21 +25,12 @@ export const prepareLayout = (layout, components, config, measurement) => { bottomRight } = cornerMatrices; - if (!showHeaders) { - const colLengths = [columns[0].length, columns[1].length]; - // Create blank cells for corener matrices - [topL, topR] = blankCellCreator([new Array(colLengths[0]), new Array(colLengths[0])], maxRows); - [bottomL, bottomR] = blankCellCreator([new Array(colLengths[1]), new Array(colLengths[1])], maxRows); - } else { - [topL, topR, bottomL, bottomR] = [topLeft, topRight, bottomLeft, bottomRight]; - } - layout.measurement(measurement) .config(config) .matrices({ - top: [topL, columns[0], topR], + top: [topLeft, columns[0], topRight], center: [rows[0], values, rows[1]], - bottom: [bottomL, columns[1], bottomR] + bottom: [bottomLeft, columns[1], bottomRight] }) .triggerReflow(); }; diff --git a/packages/visual-group/src/group-helper/cell-creator.js b/packages/visual-group/src/group-helper/cell-creator.js index 6ee5e5cf..05a86cec 100644 --- a/packages/visual-group/src/group-helper/cell-creator.js +++ b/packages/visual-group/src/group-helper/cell-creator.js @@ -123,10 +123,11 @@ const createAxisCells = (selection, axes, axisIndex, cells) => }, '')).map((axis) => { if (axis && axis[axisIndex]) { const axisInst = axis[axisIndex]; - const { orientation } = axisInst.config(); + const { orientation, show } = axisInst.config(); return new cells.AxisCell().source(axisInst).config({ - isOffset: orientation === AxisOrientation.LEFT || orientation === AxisOrientation.TOP + isOffset: orientation === AxisOrientation.LEFT || orientation === AxisOrientation.TOP, + show }); } return new cells.BlankCell(); diff --git a/packages/visual-group/src/group-helper/group-utils.js b/packages/visual-group/src/group-helper/group-utils.js index c865c192..1868f07b 100644 --- a/packages/visual-group/src/group-helper/group-utils.js +++ b/packages/visual-group/src/group-helper/group-utils.js @@ -132,8 +132,9 @@ export const getHeaderText = (headers, index, rowLength) => { * @return */ export const headerCreator = (fields, fieldHeaders, TextCell, labelManager) => { - const headers = fields.length > 0 ? fields[0].map((label, i) => new TextCell({ type: HEADER }, { labelManager }) - .source(getHeaderText(fieldHeaders, i, fields[0].length))) : []; + const headers = fields.length > 0 ? fields[0].map((cell, i) => new TextCell({ type: HEADER }, { labelManager }) + .source(getHeaderText(fieldHeaders, i, fields[0].length)) + .config({ show: cell.config().show })) : []; return headers; }; diff --git a/packages/visual-group/src/group-helper/matrix-resolver.js b/packages/visual-group/src/group-helper/matrix-resolver.js index 6c60f8d7..2a308872 100644 --- a/packages/visual-group/src/group-helper/matrix-resolver.js +++ b/packages/visual-group/src/group-helper/matrix-resolver.js @@ -586,7 +586,7 @@ export default class MatrixResolver { * @return * @memberof MatrixResolver */ - createHeaders (placeholders, fieldNames) { + createHeaders (placeholders, fieldNames, config) { let bottomLeft = []; let bottomRight = []; const { @@ -602,15 +602,17 @@ export default class MatrixResolver { const [leftRows, rightRows] = rows; const [topCols, bottomCols] = columns; const rowHeaders = fieldNames.rows; + const blankCellCreator = cell => new BlankCell().config({ show: cell.config().show }); + // Headers and footers are created based on the rows. Thereafter, using the column information // they are tabularized into the current structure const headers = { - left: headerCreator(leftRows, rowHeaders[0], TextCell, labelManager), - right: headerCreator(rightRows, rowHeaders[1], TextCell, labelManager) + left: headerCreator(leftRows, rowHeaders[0], config.showHeaders ? TextCell : BlankCell, labelManager), + right: headerCreator(rightRows, rowHeaders[1], config.showHeaders ? TextCell : BlankCell, labelManager) }; const footers = { - left: leftRows.length > 0 ? leftRows[0].map(() => new BlankCell()) : [], - right: rightRows.length > 0 ? rightRows[0].map(() => new BlankCell()) : [] + left: leftRows.length > 0 ? leftRows[0].map(blankCellCreator) : [], + right: rightRows.length > 0 ? rightRows[0].map(blankCellCreator) : [] }; const [topLeft, topRight] = [LEFT, RIGHT].map(type => topCols.map((col, i) => { if (i === topCols.length - 1) { @@ -628,8 +630,8 @@ export default class MatrixResolver { return footers[type]; })); } else { - bottomLeft = bottomCols.map(() => (leftRows.length > 0 ? leftRows[0].map(() => new BlankCell()) : [])); - bottomRight = bottomCols.map(() => (rightRows.length > 0 ? rightRows[0].map(() => new BlankCell()) : [])); + bottomLeft = bottomCols.map(() => (leftRows.length > 0 ? leftRows[0].map(blankCellCreator) : [])); + bottomRight = bottomCols.map(() => (rightRows.length > 0 ? rightRows[0].map(blankCellCreator) : [])); } lifeCycleManager.notify({ diff --git a/packages/visual-group/src/visual-group/change-listener.js b/packages/visual-group/src/visual-group/change-listener.js index 21bf4554..2998c531 100644 --- a/packages/visual-group/src/visual-group/change-listener.js +++ b/packages/visual-group/src/visual-group/change-listener.js @@ -101,7 +101,7 @@ export const setupChangeListeners = (context) => { setMatrixInstances(context, placeholderInfo); // Prepare corner matrices - context.cornerMatrices(resolver.createHeaders(placeholderInfo, fields)); + context.cornerMatrices(resolver.createHeaders(placeholderInfo, fields, config[1])); // Set placeholder information context.placeholderInfo(placeholderInfo); From c6ac5f5ce8253c4bca7d6580810d484b7f64cf14 Mon Sep 17 00:00:00 2001 From: Mridul Date: Tue, 2 Oct 2018 14:11:36 +0530 Subject: [PATCH 2/3] CDC-118: Fixed uneven space in legend causing a weird layout to be displayed --- dist/muze.css | 2 +- dist/muze.js | 2 +- dist/muze.js.map | 2 +- examples/js/sample.js | 48 +++++++++++++------ packages/muze-legend/src/legend/defaults.js | 3 +- .../muze-legend/src/legend/legend-helper.js | 33 +++++++------ .../muze-legend/src/legend/simple-legend.js | 18 ++++--- packages/muze-legend/src/styles.scss | 9 ++-- packages/muze/npm/dist/muze.css | 2 +- packages/muze/npm/dist/muze.js | 2 +- packages/muze/npm/dist/muze.js.map | 2 +- packages/muze/src/defaults.js | 24 +++++----- packages/muze/src/muze.scss | 2 +- .../src/group-helper/cell-creator.js | 2 +- packages/visual-unit/src/styles.scss | 2 +- 15 files changed, 92 insertions(+), 61 deletions(-) diff --git a/dist/muze.css b/dist/muze.css index 72ce6c7b..2ca2bff8 100644 --- a/dist/muze.css +++ b/dist/muze.css @@ -1 +1 @@ -.muze-selection-box-group{cursor:all-scroll;fill:#777;fill-opacity:.3;pointer-events:all;stroke:#fff}.muze-tooltip-box{-webkit-border-radius:1px;-webkit-box-shadow:2px 2px 3px 0 hsla(0,0%,82.7%,.5);background:#fbfbfb;border:1px solid hsla(0,0%,59.2%,.19);border-radius:1px;box-shadow:2px 2px 3px 0 hsla(0,0%,82.7%,.5);color:#5f5f5f;display:inline-block;font-size:12px;opacity:.9;padding-left:8px;padding-right:8px;padding-top:4px;pointer-events:none;text-align:left;z-index:9999999999}.muze-tooltip-row{overflow:auto;padding-bottom:8px}.muze-tooltip-row:last-child{padding-bottom:4px}.muze-tooltip-value{float:right;font-weight:600;margin-left:10px}.muze-tooltip-connectors path{stroke:#c7c7be;stroke-linecap:round;stroke-linejoin:round;stroke-width:2px}.muze-tooltip-arrow-bottom{border-left:5px solid transparent;border-right:5px solid transparent;border-top:10px solid #fbfbfb;right:0}.muze-tooltip-arrow-right{border-left:10px solid #fbfbfb;right:-10px}.muze-tooltip-arrow-left,.muze-tooltip-arrow-right{border-bottom:5px solid transparent;border-top:5px solid transparent}.muze-tooltip-arrow-left{border-right:10px solid #fbfbfb;left:-10px;right:0}.muze-tooltip-arrow-top{border-bottom:10px solid #fbfbfb;border-left:5px solid transparent;border-right:5px solid transparent;right:0}.muze-tooltip-background-arrow-top{border-bottom:12px solid hsla(0,0%,59.2%,.19);top:0}.muze-tooltip-background-arrow-bottom,.muze-tooltip-background-arrow-top{border-left:6px solid transparent;border-right:6px solid transparent;right:0}.muze-tooltip-background-arrow-bottom{border-top:12px solid hsla(0,0%,59.2%,.19);top:102%}.muze-tooltip-background-arrow-right{border-bottom:6px solid transparent;border-left:12px solid hsla(0,0%,59.2%,.19);border-top:6px solid transparent;right:-12px}.muze-tooltip-background-arrow-left{border-bottom:6px solid transparent;border-right:12px solid hsla(0,0%,59.2%,.19);border-top:6px solid transparent;left:-12px;right:0}.muze-tooltip-content-container{float:none!important;padding-left:8px;padding-right:8px;padding-top:4px}.muze--tooltip-value{font-weight:700}.muze-tooltip-table-tbody td{padding:3px}.muze-tooltip-table-row-0{font-weight:700}.muze-tooltip-content-container{border-bottom:1px solid #000}.muze-tooltip-content-parent-container :last-child{border-bottom:none}.muze-crossband{fill:grey;fill-opacity:.2;stroke-opacity:0}.muze-crossline{fill:grey;fill-opacity:.2;stroke:grey;stroke-dasharray:2,4}.muze-anchors-group{pointer-events:none}.muze-simple-axis text{font-family:Source Sans Pro,Helvetica Neue,Helvetica,Arial,sans-serif;text-align:center}.muze-ticks{fill:#858585}.muze-tick-lines,.muze-ticks{font-family:Source Sans Pro,Helvetica Neue,Helvetica,Arial,sans-serif;font-size:12px;font-weight:400;text-align:center}.muze-tick-lines{stroke:#efefef}.muze-axis-name{fill:#5f5f5f;font-family:Source Sans Pro,Helvetica Neue,Helvetica,Arial,sans-serif;font-size:14px;font-weight:400;text-align:center}.muze-axis-name.hidden{display:none}.muze-fadeout-interaction{stroke-opacity:.3}.muze-layer-line{stroke:#086bb6;stroke-linejoin:round;stroke-width:2px}.muze-layer-area{fill:#086bb6;fill-opacity:.7;stroke-linejoin:round}.muze-layer-arc-highlight{fill:#7f7f7f!important}.muze-layer-arc-fadeout{fill-opacity:.3!important}.muze-layer-arc-selected{fill:#e6e6e6!important}.muze-layer-arc{fill:#086bb6}.muze-layer-text text{fill:#000;font-size:12px}.muze-layer-text rect{fill:#7f7f7f;fill-opacity:.3}.muze-layer-text-highlight{fill-opacity:1}.muze-layer-text-fadeout{fill-opacity:.3!important}.muze-layer-text-selected{fill:#000!important}.muze-layer-point{fill:#086bb6;fill-opacity:.5;stroke:#086bb6;stroke-opacity:.5}.muze-layer-point-highlight{fill-opacity:0;stroke-opacity:1;stroke-width:2px!important}.muze-layer-point-fadeout{fill:#7f7f7f!important;fill-opacity:.3!important;stroke:#7f7f7f!important;stroke-opacity:.3!important}.muze-layer-point-selected{fill:#000!important}.muze-layer-bar,.muze-layer-bar-highlight{fill-opacity:1}.muze-layer-bar-fadeout{fill-opacity:.2!important}.muze-layer-bar-selected{fill:#4682b4!important}.muze-layer-tick{stroke:#f44336;stroke-opacity:.7}.muze-layer-tick-highlight{stroke-opacity:1}.muze-layer-tick-fadeout{stroke:#7f7f7f!important;stroke-opacity:.3!important}.muze-layer-tick-selected{stroke:#000!important}.muze-visual-unit{background:"#fff"}.muze-axis-zero-line{stroke-width:1px}.muze-grid-band-x-0,.muze-grid-band-y-0{fill-opacity:0}.muze-unit{-webkit-touch-callout:none;-webkit-user-select:none}.muze-legend-box{border:solid transparent;display:inline-block;float:none!important;font-family:Source Sans Pro,Helvetica Neue,Helvetica,Arial,sans-serif;height:100px;line-height:10px!important}.muze-legend-title{-webkit-align-items:center;-webkit-box-align:center;align-items:center;border-bottom:solid transparent;display:block;fill:#5f5f5f;float:left;font-size:14px;font-weight:600;height:30px;text-align:left}.muze-legend-overflow{text-align:center}.muze-legend-icon,.muze-legend-icon-svg{cursor:pointer}.muze-overflow-y{overflow-y:scroll}.muze-overflow-x{overflow-x:scroll}.muze-legend-fadeout{fill-opacity:.3;opacity:.3}.muze-legend-brighten{fill-opacity:1}.muze-legend-item-info{-webkit-align-items:center;-webkit-box-align:center;align-items:center;cursor:pointer;display:-webkit-box;display:-webkit-flex;display:flex;float:left;font-size:12px}.muze-legend-item-info.center{-webkit-box-pack:center;-webkit-justify-content:center;justify-content:center}.muze-legend-item-info.start{-webkit-box-pack:start;-webkit-justify-content:flex-start;justify-content:flex-start}.muze-legend-item-info.end{-webkit-box-pack:end;-webkit-justify-content:flex-end;justify-content:flex-end}.muze-legend-selection-box{cursor:all-scroll;fill:#777;fill-opacity:.3;pointer-events:all;stroke:#fff}.muze-text-cell{color:#5f5f5f;font-family:inherit;font-size:14px;font-weight:400;text-align:center}.muze-header-cell{font-size:16px}.muze-header-cell,.muze-subheader-cell{color:#858585;font-family:inherit;font-weight:800;text-align:center}.muze-subheader-cell{font-size:15px}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:200;src:local("Source Sans Pro ExtraLight Italic"),local("SourceSansPro-ExtraLightItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZYokSdh18S0xR41YDw.woff2) format("woff2");unicode-range:U+0460-052f,U+1c80-1c88,U+20b4,U+2de0-2dff,U+a640-a69f,U+fe2e-fe2f}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:200;src:local("Source Sans Pro ExtraLight Italic"),local("SourceSansPro-ExtraLightItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZYokSdo18S0xR41YDw.woff2) format("woff2");unicode-range:U+0400-045f,U+0490-0491,U+04b0-04b1,U+2116}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:200;src:local("Source Sans Pro ExtraLight Italic"),local("SourceSansPro-ExtraLightItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZYokSdg18S0xR41YDw.woff2) format("woff2");unicode-range:U+1f??}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:200;src:local("Source Sans Pro ExtraLight Italic"),local("SourceSansPro-ExtraLightItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZYokSdv18S0xR41YDw.woff2) format("woff2");unicode-range:U+0370-03ff}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:200;src:local("Source Sans Pro ExtraLight Italic"),local("SourceSansPro-ExtraLightItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZYokSdj18S0xR41YDw.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+1ea0-1ef9,U+20ab}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:200;src:local("Source Sans Pro ExtraLight Italic"),local("SourceSansPro-ExtraLightItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZYokSdi18S0xR41YDw.woff2) format("woff2");unicode-range:U+0100-024f,U+0259,U+1e??,U+2020,U+20a0-20ab,U+20ad-20cf,U+2113,U+2c60-2c7f,U+a720-a7ff}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:200;src:local("Source Sans Pro ExtraLight Italic"),local("SourceSansPro-ExtraLightItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZYokSds18S0xR41.woff2) format("woff2");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:300;src:local("Source Sans Pro Light Italic"),local("SourceSansPro-LightItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZMkidh18S0xR41YDw.woff2) format("woff2");unicode-range:U+0460-052f,U+1c80-1c88,U+20b4,U+2de0-2dff,U+a640-a69f,U+fe2e-fe2f}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:300;src:local("Source Sans Pro Light Italic"),local("SourceSansPro-LightItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZMkido18S0xR41YDw.woff2) format("woff2");unicode-range:U+0400-045f,U+0490-0491,U+04b0-04b1,U+2116}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:300;src:local("Source Sans Pro Light Italic"),local("SourceSansPro-LightItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZMkidg18S0xR41YDw.woff2) format("woff2");unicode-range:U+1f??}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:300;src:local("Source Sans Pro Light Italic"),local("SourceSansPro-LightItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZMkidv18S0xR41YDw.woff2) format("woff2");unicode-range:U+0370-03ff}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:300;src:local("Source Sans Pro Light Italic"),local("SourceSansPro-LightItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZMkidj18S0xR41YDw.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+1ea0-1ef9,U+20ab}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:300;src:local("Source Sans Pro Light Italic"),local("SourceSansPro-LightItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZMkidi18S0xR41YDw.woff2) format("woff2");unicode-range:U+0100-024f,U+0259,U+1e??,U+2020,U+20a0-20ab,U+20ad-20cf,U+2113,U+2c60-2c7f,U+a720-a7ff}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:300;src:local("Source Sans Pro Light Italic"),local("SourceSansPro-LightItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZMkids18S0xR41.woff2) format("woff2");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:400;src:local("Source Sans Pro Italic"),local("SourceSansPro-Italic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK1dSBYKcSV-LCoeQqfX1RYOo3qPZ7qsDJB9cme_xc.woff2) format("woff2");unicode-range:U+0460-052f,U+1c80-1c88,U+20b4,U+2de0-2dff,U+a640-a69f,U+fe2e-fe2f}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:400;src:local("Source Sans Pro Italic"),local("SourceSansPro-Italic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK1dSBYKcSV-LCoeQqfX1RYOo3qPZ7jsDJB9cme_xc.woff2) format("woff2");unicode-range:U+0400-045f,U+0490-0491,U+04b0-04b1,U+2116}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:400;src:local("Source Sans Pro Italic"),local("SourceSansPro-Italic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK1dSBYKcSV-LCoeQqfX1RYOo3qPZ7rsDJB9cme_xc.woff2) format("woff2");unicode-range:U+1f??}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:400;src:local("Source Sans Pro Italic"),local("SourceSansPro-Italic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK1dSBYKcSV-LCoeQqfX1RYOo3qPZ7ksDJB9cme_xc.woff2) format("woff2");unicode-range:U+0370-03ff}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:400;src:local("Source Sans Pro Italic"),local("SourceSansPro-Italic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK1dSBYKcSV-LCoeQqfX1RYOo3qPZ7osDJB9cme_xc.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+1ea0-1ef9,U+20ab}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:400;src:local("Source Sans Pro Italic"),local("SourceSansPro-Italic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK1dSBYKcSV-LCoeQqfX1RYOo3qPZ7psDJB9cme_xc.woff2) format("woff2");unicode-range:U+0100-024f,U+0259,U+1e??,U+2020,U+20a0-20ab,U+20ad-20cf,U+2113,U+2c60-2c7f,U+a720-a7ff}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:400;src:local("Source Sans Pro Italic"),local("SourceSansPro-Italic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK1dSBYKcSV-LCoeQqfX1RYOo3qPZ7nsDJB9cme.woff2) format("woff2");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:600;src:local("Source Sans Pro SemiBold Italic"),local("SourceSansPro-SemiBoldItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZY4lCdh18S0xR41YDw.woff2) format("woff2");unicode-range:U+0460-052f,U+1c80-1c88,U+20b4,U+2de0-2dff,U+a640-a69f,U+fe2e-fe2f}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:600;src:local("Source Sans Pro SemiBold Italic"),local("SourceSansPro-SemiBoldItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZY4lCdo18S0xR41YDw.woff2) format("woff2");unicode-range:U+0400-045f,U+0490-0491,U+04b0-04b1,U+2116}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:600;src:local("Source Sans Pro SemiBold Italic"),local("SourceSansPro-SemiBoldItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZY4lCdg18S0xR41YDw.woff2) format("woff2");unicode-range:U+1f??}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:600;src:local("Source Sans Pro SemiBold Italic"),local("SourceSansPro-SemiBoldItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZY4lCdv18S0xR41YDw.woff2) format("woff2");unicode-range:U+0370-03ff}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:600;src:local("Source Sans Pro SemiBold Italic"),local("SourceSansPro-SemiBoldItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZY4lCdj18S0xR41YDw.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+1ea0-1ef9,U+20ab}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:600;src:local("Source Sans Pro SemiBold Italic"),local("SourceSansPro-SemiBoldItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZY4lCdi18S0xR41YDw.woff2) format("woff2");unicode-range:U+0100-024f,U+0259,U+1e??,U+2020,U+20a0-20ab,U+20ad-20cf,U+2113,U+2c60-2c7f,U+a720-a7ff}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:600;src:local("Source Sans Pro SemiBold Italic"),local("SourceSansPro-SemiBoldItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZY4lCds18S0xR41.woff2) format("woff2");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:700;src:local("Source Sans Pro Bold Italic"),local("SourceSansPro-BoldItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZclSdh18S0xR41YDw.woff2) format("woff2");unicode-range:U+0460-052f,U+1c80-1c88,U+20b4,U+2de0-2dff,U+a640-a69f,U+fe2e-fe2f}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:700;src:local("Source Sans Pro Bold Italic"),local("SourceSansPro-BoldItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZclSdo18S0xR41YDw.woff2) format("woff2");unicode-range:U+0400-045f,U+0490-0491,U+04b0-04b1,U+2116}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:700;src:local("Source Sans Pro Bold Italic"),local("SourceSansPro-BoldItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZclSdg18S0xR41YDw.woff2) format("woff2");unicode-range:U+1f??}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:700;src:local("Source Sans Pro Bold Italic"),local("SourceSansPro-BoldItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZclSdv18S0xR41YDw.woff2) format("woff2");unicode-range:U+0370-03ff}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:700;src:local("Source Sans Pro Bold Italic"),local("SourceSansPro-BoldItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZclSdj18S0xR41YDw.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+1ea0-1ef9,U+20ab}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:700;src:local("Source Sans Pro Bold Italic"),local("SourceSansPro-BoldItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZclSdi18S0xR41YDw.woff2) format("woff2");unicode-range:U+0100-024f,U+0259,U+1e??,U+2020,U+20a0-20ab,U+20ad-20cf,U+2113,U+2c60-2c7f,U+a720-a7ff}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:700;src:local("Source Sans Pro Bold Italic"),local("SourceSansPro-BoldItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZclSds18S0xR41.woff2) format("woff2");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:900;src:local("Source Sans Pro Black Italic"),local("SourceSansPro-BlackItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZklydh18S0xR41YDw.woff2) format("woff2");unicode-range:U+0460-052f,U+1c80-1c88,U+20b4,U+2de0-2dff,U+a640-a69f,U+fe2e-fe2f}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:900;src:local("Source Sans Pro Black Italic"),local("SourceSansPro-BlackItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZklydo18S0xR41YDw.woff2) format("woff2");unicode-range:U+0400-045f,U+0490-0491,U+04b0-04b1,U+2116}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:900;src:local("Source Sans Pro Black Italic"),local("SourceSansPro-BlackItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZklydg18S0xR41YDw.woff2) format("woff2");unicode-range:U+1f??}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:900;src:local("Source Sans Pro Black Italic"),local("SourceSansPro-BlackItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZklydv18S0xR41YDw.woff2) format("woff2");unicode-range:U+0370-03ff}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:900;src:local("Source Sans Pro Black Italic"),local("SourceSansPro-BlackItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZklydj18S0xR41YDw.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+1ea0-1ef9,U+20ab}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:900;src:local("Source Sans Pro Black Italic"),local("SourceSansPro-BlackItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZklydi18S0xR41YDw.woff2) format("woff2");unicode-range:U+0100-024f,U+0259,U+1e??,U+2020,U+20a0-20ab,U+20ad-20cf,U+2113,U+2c60-2c7f,U+a720-a7ff}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:900;src:local("Source Sans Pro Black Italic"),local("SourceSansPro-BlackItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZklyds18S0xR41.woff2) format("woff2");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:200;src:local("Source Sans Pro ExtraLight"),local("SourceSansPro-ExtraLight"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i94_wmhdu3cOWxy40.woff2) format("woff2");unicode-range:U+0460-052f,U+1c80-1c88,U+20b4,U+2de0-2dff,U+a640-a69f,U+fe2e-fe2f}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:200;src:local("Source Sans Pro ExtraLight"),local("SourceSansPro-ExtraLight"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i94_wkxdu3cOWxy40.woff2) format("woff2");unicode-range:U+0400-045f,U+0490-0491,U+04b0-04b1,U+2116}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:200;src:local("Source Sans Pro ExtraLight"),local("SourceSansPro-ExtraLight"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i94_wmxdu3cOWxy40.woff2) format("woff2");unicode-range:U+1f??}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:200;src:local("Source Sans Pro ExtraLight"),local("SourceSansPro-ExtraLight"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i94_wlBdu3cOWxy40.woff2) format("woff2");unicode-range:U+0370-03ff}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:200;src:local("Source Sans Pro ExtraLight"),local("SourceSansPro-ExtraLight"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i94_wmBdu3cOWxy40.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+1ea0-1ef9,U+20ab}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:200;src:local("Source Sans Pro ExtraLight"),local("SourceSansPro-ExtraLight"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i94_wmRdu3cOWxy40.woff2) format("woff2");unicode-range:U+0100-024f,U+0259,U+1e??,U+2020,U+20a0-20ab,U+20ad-20cf,U+2113,U+2c60-2c7f,U+a720-a7ff}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:200;src:local("Source Sans Pro ExtraLight"),local("SourceSansPro-ExtraLight"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i94_wlxdu3cOWxw.woff2) format("woff2");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:300;src:local("Source Sans Pro Light"),local("SourceSansPro-Light"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ik4zwmhdu3cOWxy40.woff2) format("woff2");unicode-range:U+0460-052f,U+1c80-1c88,U+20b4,U+2de0-2dff,U+a640-a69f,U+fe2e-fe2f}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:300;src:local("Source Sans Pro Light"),local("SourceSansPro-Light"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ik4zwkxdu3cOWxy40.woff2) format("woff2");unicode-range:U+0400-045f,U+0490-0491,U+04b0-04b1,U+2116}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:300;src:local("Source Sans Pro Light"),local("SourceSansPro-Light"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ik4zwmxdu3cOWxy40.woff2) format("woff2");unicode-range:U+1f??}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:300;src:local("Source Sans Pro Light"),local("SourceSansPro-Light"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ik4zwlBdu3cOWxy40.woff2) format("woff2");unicode-range:U+0370-03ff}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:300;src:local("Source Sans Pro Light"),local("SourceSansPro-Light"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ik4zwmBdu3cOWxy40.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+1ea0-1ef9,U+20ab}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:300;src:local("Source Sans Pro Light"),local("SourceSansPro-Light"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ik4zwmRdu3cOWxy40.woff2) format("woff2");unicode-range:U+0100-024f,U+0259,U+1e??,U+2020,U+20a0-20ab,U+20ad-20cf,U+2113,U+2c60-2c7f,U+a720-a7ff}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:300;src:local("Source Sans Pro Light"),local("SourceSansPro-Light"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ik4zwlxdu3cOWxw.woff2) format("woff2");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:400;src:local("Source Sans Pro Regular"),local("SourceSansPro-Regular"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK3dSBYKcSV-LCoeQqfX1RYOo3qNa7lujVj9_mf.woff2) format("woff2");unicode-range:U+0460-052f,U+1c80-1c88,U+20b4,U+2de0-2dff,U+a640-a69f,U+fe2e-fe2f}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:400;src:local("Source Sans Pro Regular"),local("SourceSansPro-Regular"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK3dSBYKcSV-LCoeQqfX1RYOo3qPK7lujVj9_mf.woff2) format("woff2");unicode-range:U+0400-045f,U+0490-0491,U+04b0-04b1,U+2116}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:400;src:local("Source Sans Pro Regular"),local("SourceSansPro-Regular"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK3dSBYKcSV-LCoeQqfX1RYOo3qNK7lujVj9_mf.woff2) format("woff2");unicode-range:U+1f??}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:400;src:local("Source Sans Pro Regular"),local("SourceSansPro-Regular"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK3dSBYKcSV-LCoeQqfX1RYOo3qO67lujVj9_mf.woff2) format("woff2");unicode-range:U+0370-03ff}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:400;src:local("Source Sans Pro Regular"),local("SourceSansPro-Regular"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK3dSBYKcSV-LCoeQqfX1RYOo3qN67lujVj9_mf.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+1ea0-1ef9,U+20ab}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:400;src:local("Source Sans Pro Regular"),local("SourceSansPro-Regular"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK3dSBYKcSV-LCoeQqfX1RYOo3qNq7lujVj9_mf.woff2) format("woff2");unicode-range:U+0100-024f,U+0259,U+1e??,U+2020,U+20a0-20ab,U+20ad-20cf,U+2113,U+2c60-2c7f,U+a720-a7ff}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:400;src:local("Source Sans Pro Regular"),local("SourceSansPro-Regular"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK3dSBYKcSV-LCoeQqfX1RYOo3qOK7lujVj9w.woff2) format("woff2");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:600;src:local("Source Sans Pro SemiBold"),local("SourceSansPro-SemiBold"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i54rwmhdu3cOWxy40.woff2) format("woff2");unicode-range:U+0460-052f,U+1c80-1c88,U+20b4,U+2de0-2dff,U+a640-a69f,U+fe2e-fe2f}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:600;src:local("Source Sans Pro SemiBold"),local("SourceSansPro-SemiBold"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i54rwkxdu3cOWxy40.woff2) format("woff2");unicode-range:U+0400-045f,U+0490-0491,U+04b0-04b1,U+2116}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:600;src:local("Source Sans Pro SemiBold"),local("SourceSansPro-SemiBold"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i54rwmxdu3cOWxy40.woff2) format("woff2");unicode-range:U+1f??}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:600;src:local("Source Sans Pro SemiBold"),local("SourceSansPro-SemiBold"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i54rwlBdu3cOWxy40.woff2) format("woff2");unicode-range:U+0370-03ff}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:600;src:local("Source Sans Pro SemiBold"),local("SourceSansPro-SemiBold"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i54rwmBdu3cOWxy40.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+1ea0-1ef9,U+20ab}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:600;src:local("Source Sans Pro SemiBold"),local("SourceSansPro-SemiBold"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i54rwmRdu3cOWxy40.woff2) format("woff2");unicode-range:U+0100-024f,U+0259,U+1e??,U+2020,U+20a0-20ab,U+20ad-20cf,U+2113,U+2c60-2c7f,U+a720-a7ff}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:600;src:local("Source Sans Pro SemiBold"),local("SourceSansPro-SemiBold"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i54rwlxdu3cOWxw.woff2) format("woff2");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:700;src:local("Source Sans Pro Bold"),local("SourceSansPro-Bold"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ig4vwmhdu3cOWxy40.woff2) format("woff2");unicode-range:U+0460-052f,U+1c80-1c88,U+20b4,U+2de0-2dff,U+a640-a69f,U+fe2e-fe2f}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:700;src:local("Source Sans Pro Bold"),local("SourceSansPro-Bold"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ig4vwkxdu3cOWxy40.woff2) format("woff2");unicode-range:U+0400-045f,U+0490-0491,U+04b0-04b1,U+2116}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:700;src:local("Source Sans Pro Bold"),local("SourceSansPro-Bold"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ig4vwmxdu3cOWxy40.woff2) format("woff2");unicode-range:U+1f??}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:700;src:local("Source Sans Pro Bold"),local("SourceSansPro-Bold"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ig4vwlBdu3cOWxy40.woff2) format("woff2");unicode-range:U+0370-03ff}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:700;src:local("Source Sans Pro Bold"),local("SourceSansPro-Bold"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ig4vwmBdu3cOWxy40.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+1ea0-1ef9,U+20ab}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:700;src:local("Source Sans Pro Bold"),local("SourceSansPro-Bold"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ig4vwmRdu3cOWxy40.woff2) format("woff2");unicode-range:U+0100-024f,U+0259,U+1e??,U+2020,U+20a0-20ab,U+20ad-20cf,U+2113,U+2c60-2c7f,U+a720-a7ff}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:700;src:local("Source Sans Pro Bold"),local("SourceSansPro-Bold"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ig4vwlxdu3cOWxw.woff2) format("woff2");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:900;src:local("Source Sans Pro Black"),local("SourceSansPro-Black"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3iu4nwmhdu3cOWxy40.woff2) format("woff2");unicode-range:U+0460-052f,U+1c80-1c88,U+20b4,U+2de0-2dff,U+a640-a69f,U+fe2e-fe2f}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:900;src:local("Source Sans Pro Black"),local("SourceSansPro-Black"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3iu4nwkxdu3cOWxy40.woff2) format("woff2");unicode-range:U+0400-045f,U+0490-0491,U+04b0-04b1,U+2116}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:900;src:local("Source Sans Pro Black"),local("SourceSansPro-Black"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3iu4nwmxdu3cOWxy40.woff2) format("woff2");unicode-range:U+1f??}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:900;src:local("Source Sans Pro Black"),local("SourceSansPro-Black"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3iu4nwlBdu3cOWxy40.woff2) format("woff2");unicode-range:U+0370-03ff}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:900;src:local("Source Sans Pro Black"),local("SourceSansPro-Black"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3iu4nwmBdu3cOWxy40.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+1ea0-1ef9,U+20ab}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:900;src:local("Source Sans Pro Black"),local("SourceSansPro-Black"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3iu4nwmRdu3cOWxy40.woff2) format("woff2");unicode-range:U+0100-024f,U+0259,U+1e??,U+2020,U+20a0-20ab,U+20ad-20cf,U+2113,U+2c60-2c7f,U+a720-a7ff}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:900;src:local("Source Sans Pro Black"),local("SourceSansPro-Black"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3iu4nwlxdu3cOWxw.woff2) format("woff2");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}.muze-group-container{-webkit-tap-highlight-color:rgba(0,0,0,0);background-color:#fff;color:#333;font-family:Source Sans Pro,Helvetica Neue,Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143;margin:0}.muze-group-container *,.muze-group-container :after,.muze-group-container :before{-webkit-box-sizing:border-box;box-sizing:border-box}.muze-group-container .muze-table-arrow{cursor:pointer;height:0;margin:5px;opacity:.5;position:absolute;width:0;z-index:10}.muze-group-container .muze-table-arrow:hover{opacity:1}.muze-group-container .muze-table-arrow-right{border-left:15px solid #4682b4;left:100%}.muze-group-container .muze-table-arrow-left,.muze-group-container .muze-table-arrow-right{border-bottom:20px solid transparent;border-top:20px solid transparent;top:-webkit-calc(50% - 25px);top:calc(50% - 25px)}.muze-group-container .muze-table-arrow-left{border-right:15px solid #4682b4;right:100%}.muze-group-container .muze-table-arrow-bottom{border-top:15px solid #4682b4;top:100%}.muze-group-container .muze-table-arrow-bottom,.muze-group-container .muze-table-arrow-top{border-left:20px solid transparent;border-right:20px solid transparent;left:-webkit-calc(50% - 25px);left:calc(50% - 25px)}.muze-group-container .muze-table-arrow-top{border-bottom:15px solid #4682b4;bottom:100%}.muze-group-container .table-row-nested{border-top:none;visibility:hidden}.muze-group-container svg{display:block;float:left;height:inherit;vertical-align:top;width:inherit}.muze-group-container .axisName.hidden{opacity:0}.muze-group-container .axisName{opacity:1}.muze-group-container .grid-td svg{max-height:100%;max-width:100%}.muze-group-container .domain{opacity:0}.muze-board{float:left}.muze-layout-container{float:left;position:relative}.muze-board-legend,.muze-legend-section{float:left;text-align:center}.muze-legend-horizontal-section{-webkit-align-items:center;-webkit-box-align:center;-webkit-box-pack:center;-webkit-flex-wrap:wrap;-webkit-justify-content:center;align-items:center;display:-webkit-box;display:-webkit-flex;display:flex;flex-wrap:wrap;justify-content:center}.muze-legend-components{float:left;text-align:center}.muze-grid-layout,.muze-grid-layout-container,.muze-grid-layout-row{float:left;position:relative}.muze-grid-table{background-color:transparent;border-spacing:0;table-layout:fixed}.muze-grid-td,.muze-grid-th{padding:0}.muze-table-header{height:inherit;width:inherit}.muze-grid-layout,.muze-layout-grid-container{float:left;position:relative}.muze-layout-grid-container div,.muze-layout-grid-container table{border-collapse:collapse;float:left}.muze-title-container .muze-header-cell{color:#5f5f5f;font-size:24px;font-weight:700}.muze-subtitle-container .muze-text-cell{color:#b1b1b1;font-size:16px;font-weight:400}.domain{opacity:0}.muze-group-container,.muze-layout-container,.muze-legend-container{float:left}.hidden{display:none} \ No newline at end of file +.muze-selection-box-group{cursor:all-scroll;fill:#777;fill-opacity:.3;pointer-events:all;stroke:#fff}.muze-tooltip-box{-webkit-border-radius:1px;-webkit-box-shadow:2px 2px 3px 0 hsla(0,0%,82.7%,.5);background:#fbfbfb;border:1px solid hsla(0,0%,59.2%,.19);border-radius:1px;box-shadow:2px 2px 3px 0 hsla(0,0%,82.7%,.5);color:#5f5f5f;display:inline-block;font-size:12px;opacity:.9;padding-left:8px;padding-right:8px;padding-top:4px;pointer-events:none;text-align:left;z-index:9999999999}.muze-tooltip-row{overflow:auto;padding-bottom:8px}.muze-tooltip-row:last-child{padding-bottom:4px}.muze-tooltip-value{float:right;font-weight:600;margin-left:10px}.muze-tooltip-connectors path{stroke:#c7c7be;stroke-linecap:round;stroke-linejoin:round;stroke-width:2px}.muze-tooltip-arrow-bottom{border-left:5px solid transparent;border-right:5px solid transparent;border-top:10px solid #fbfbfb;right:0}.muze-tooltip-arrow-right{border-left:10px solid #fbfbfb;right:-10px}.muze-tooltip-arrow-left,.muze-tooltip-arrow-right{border-bottom:5px solid transparent;border-top:5px solid transparent}.muze-tooltip-arrow-left{border-right:10px solid #fbfbfb;left:-10px;right:0}.muze-tooltip-arrow-top{border-bottom:10px solid #fbfbfb;border-left:5px solid transparent;border-right:5px solid transparent;right:0}.muze-tooltip-background-arrow-top{border-bottom:12px solid hsla(0,0%,59.2%,.19);top:0}.muze-tooltip-background-arrow-bottom,.muze-tooltip-background-arrow-top{border-left:6px solid transparent;border-right:6px solid transparent;right:0}.muze-tooltip-background-arrow-bottom{border-top:12px solid hsla(0,0%,59.2%,.19);top:102%}.muze-tooltip-background-arrow-right{border-bottom:6px solid transparent;border-left:12px solid hsla(0,0%,59.2%,.19);border-top:6px solid transparent;right:-12px}.muze-tooltip-background-arrow-left{border-bottom:6px solid transparent;border-right:12px solid hsla(0,0%,59.2%,.19);border-top:6px solid transparent;left:-12px;right:0}.muze-tooltip-content-container{float:none!important;padding-left:8px;padding-right:8px;padding-top:4px}.muze--tooltip-value{font-weight:700}.muze-tooltip-table-tbody td{padding:3px}.muze-tooltip-table-row-0{font-weight:700}.muze-tooltip-content-container{border-bottom:1px solid #000}.muze-tooltip-content-parent-container :last-child{border-bottom:none}.muze-crossband{fill:grey;fill-opacity:.2;stroke-opacity:0}.muze-crossline{fill:grey;fill-opacity:.2;stroke:grey;stroke-dasharray:2,4}.muze-anchors-group{pointer-events:none}.muze-simple-axis text{font-family:Source Sans Pro,Helvetica Neue,Helvetica,Arial,sans-serif;text-align:center}.muze-ticks{fill:#858585}.muze-tick-lines,.muze-ticks{font-family:Source Sans Pro,Helvetica Neue,Helvetica,Arial,sans-serif;font-size:12px;font-weight:400;text-align:center}.muze-tick-lines{stroke:#efefef}.muze-axis-name{fill:#5f5f5f;font-family:Source Sans Pro,Helvetica Neue,Helvetica,Arial,sans-serif;font-size:14px;font-weight:400;text-align:center}.muze-axis-name.hidden{display:none}.muze-fadeout-interaction{stroke-opacity:.3}.muze-layer-line{stroke:#086bb6;stroke-linejoin:round;stroke-width:2px}.muze-layer-area{fill:#086bb6;fill-opacity:.7;stroke-linejoin:round}.muze-layer-arc-highlight{fill:#7f7f7f!important}.muze-layer-arc-fadeout{fill-opacity:.3!important}.muze-layer-arc-selected{fill:#e6e6e6!important}.muze-layer-arc{fill:#086bb6}.muze-layer-text text{fill:#000;font-size:12px}.muze-layer-text rect{fill:#7f7f7f;fill-opacity:.3}.muze-layer-text-highlight{fill-opacity:1}.muze-layer-text-fadeout{fill-opacity:.3!important}.muze-layer-text-selected{fill:#000!important}.muze-layer-point{fill:#086bb6;fill-opacity:.5;stroke:#086bb6;stroke-opacity:.5}.muze-layer-point-highlight{fill-opacity:0;stroke-opacity:1;stroke-width:2px!important}.muze-layer-point-fadeout{fill:#7f7f7f!important;fill-opacity:.3!important;stroke:#7f7f7f!important;stroke-opacity:.3!important}.muze-layer-point-selected{fill:#000!important}.muze-layer-bar,.muze-layer-bar-highlight{fill-opacity:1}.muze-layer-bar-fadeout{fill-opacity:.2!important}.muze-layer-bar-selected{fill:#4682b4!important}.muze-layer-tick{stroke:#f44336;stroke-opacity:.7}.muze-layer-tick-highlight{stroke-opacity:1}.muze-layer-tick-fadeout{stroke:#7f7f7f!important;stroke-opacity:.3!important}.muze-layer-tick-selected{stroke:#000!important}.muze-visual-unit{background:transparent}.muze-axis-zero-line{stroke-width:1px}.muze-grid-band-x-0,.muze-grid-band-y-0{fill-opacity:0}.muze-unit{-webkit-touch-callout:none;-webkit-user-select:none}.muze-legend-box{display:inline-block;float:none!important;font-family:Source Sans Pro,Helvetica Neue,Helvetica,Arial,sans-serif;height:100px;line-height:10px!important}.muze-legend-title{-webkit-align-items:center;-webkit-box-align:center;align-items:center;display:table;fill:#5f5f5f;float:left;font-size:14px;font-weight:600;height:30px;text-align:left}.muze-legend-title-text{display:table-cell;vertical-align:middle}.muze-legend-overflow{text-align:center}.muze-legend-icon,.muze-legend-icon-svg{cursor:pointer}.muze-overflow-y{overflow-y:scroll}.muze-overflow-x{overflow-x:scroll}.muze-legend-fadeout{fill-opacity:.3;opacity:.3}.muze-legend-brighten{fill-opacity:1}.muze-legend-item-info{-webkit-align-items:center;-webkit-box-align:center;align-items:center;cursor:pointer;display:-webkit-box;display:-webkit-flex;display:flex;float:left;font-size:12px}.muze-legend-item-info.center{-webkit-box-pack:center;-webkit-justify-content:center;justify-content:center}.muze-legend-item-info.start{-webkit-box-pack:start;-webkit-justify-content:flex-start;justify-content:flex-start}.muze-legend-item-info.end{-webkit-box-pack:end;-webkit-justify-content:flex-end;justify-content:flex-end}.muze-legend-selection-box{cursor:all-scroll;fill:#777;fill-opacity:.3;pointer-events:all;stroke:#fff}.muze-text-cell{color:#5f5f5f;font-family:inherit;font-size:14px;font-weight:400;text-align:center}.muze-header-cell{font-size:16px}.muze-header-cell,.muze-subheader-cell{color:#858585;font-family:inherit;font-weight:800;text-align:center}.muze-subheader-cell{font-size:15px}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:200;src:local("Source Sans Pro ExtraLight Italic"),local("SourceSansPro-ExtraLightItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZYokSdh18S0xR41YDw.woff2) format("woff2");unicode-range:U+0460-052f,U+1c80-1c88,U+20b4,U+2de0-2dff,U+a640-a69f,U+fe2e-fe2f}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:200;src:local("Source Sans Pro ExtraLight Italic"),local("SourceSansPro-ExtraLightItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZYokSdo18S0xR41YDw.woff2) format("woff2");unicode-range:U+0400-045f,U+0490-0491,U+04b0-04b1,U+2116}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:200;src:local("Source Sans Pro ExtraLight Italic"),local("SourceSansPro-ExtraLightItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZYokSdg18S0xR41YDw.woff2) format("woff2");unicode-range:U+1f??}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:200;src:local("Source Sans Pro ExtraLight Italic"),local("SourceSansPro-ExtraLightItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZYokSdv18S0xR41YDw.woff2) format("woff2");unicode-range:U+0370-03ff}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:200;src:local("Source Sans Pro ExtraLight Italic"),local("SourceSansPro-ExtraLightItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZYokSdj18S0xR41YDw.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+1ea0-1ef9,U+20ab}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:200;src:local("Source Sans Pro ExtraLight Italic"),local("SourceSansPro-ExtraLightItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZYokSdi18S0xR41YDw.woff2) format("woff2");unicode-range:U+0100-024f,U+0259,U+1e??,U+2020,U+20a0-20ab,U+20ad-20cf,U+2113,U+2c60-2c7f,U+a720-a7ff}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:200;src:local("Source Sans Pro ExtraLight Italic"),local("SourceSansPro-ExtraLightItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZYokSds18S0xR41.woff2) format("woff2");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:300;src:local("Source Sans Pro Light Italic"),local("SourceSansPro-LightItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZMkidh18S0xR41YDw.woff2) format("woff2");unicode-range:U+0460-052f,U+1c80-1c88,U+20b4,U+2de0-2dff,U+a640-a69f,U+fe2e-fe2f}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:300;src:local("Source Sans Pro Light Italic"),local("SourceSansPro-LightItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZMkido18S0xR41YDw.woff2) format("woff2");unicode-range:U+0400-045f,U+0490-0491,U+04b0-04b1,U+2116}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:300;src:local("Source Sans Pro Light Italic"),local("SourceSansPro-LightItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZMkidg18S0xR41YDw.woff2) format("woff2");unicode-range:U+1f??}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:300;src:local("Source Sans Pro Light Italic"),local("SourceSansPro-LightItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZMkidv18S0xR41YDw.woff2) format("woff2");unicode-range:U+0370-03ff}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:300;src:local("Source Sans Pro Light Italic"),local("SourceSansPro-LightItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZMkidj18S0xR41YDw.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+1ea0-1ef9,U+20ab}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:300;src:local("Source Sans Pro Light Italic"),local("SourceSansPro-LightItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZMkidi18S0xR41YDw.woff2) format("woff2");unicode-range:U+0100-024f,U+0259,U+1e??,U+2020,U+20a0-20ab,U+20ad-20cf,U+2113,U+2c60-2c7f,U+a720-a7ff}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:300;src:local("Source Sans Pro Light Italic"),local("SourceSansPro-LightItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZMkids18S0xR41.woff2) format("woff2");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:400;src:local("Source Sans Pro Italic"),local("SourceSansPro-Italic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK1dSBYKcSV-LCoeQqfX1RYOo3qPZ7qsDJB9cme_xc.woff2) format("woff2");unicode-range:U+0460-052f,U+1c80-1c88,U+20b4,U+2de0-2dff,U+a640-a69f,U+fe2e-fe2f}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:400;src:local("Source Sans Pro Italic"),local("SourceSansPro-Italic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK1dSBYKcSV-LCoeQqfX1RYOo3qPZ7jsDJB9cme_xc.woff2) format("woff2");unicode-range:U+0400-045f,U+0490-0491,U+04b0-04b1,U+2116}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:400;src:local("Source Sans Pro Italic"),local("SourceSansPro-Italic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK1dSBYKcSV-LCoeQqfX1RYOo3qPZ7rsDJB9cme_xc.woff2) format("woff2");unicode-range:U+1f??}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:400;src:local("Source Sans Pro Italic"),local("SourceSansPro-Italic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK1dSBYKcSV-LCoeQqfX1RYOo3qPZ7ksDJB9cme_xc.woff2) format("woff2");unicode-range:U+0370-03ff}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:400;src:local("Source Sans Pro Italic"),local("SourceSansPro-Italic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK1dSBYKcSV-LCoeQqfX1RYOo3qPZ7osDJB9cme_xc.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+1ea0-1ef9,U+20ab}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:400;src:local("Source Sans Pro Italic"),local("SourceSansPro-Italic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK1dSBYKcSV-LCoeQqfX1RYOo3qPZ7psDJB9cme_xc.woff2) format("woff2");unicode-range:U+0100-024f,U+0259,U+1e??,U+2020,U+20a0-20ab,U+20ad-20cf,U+2113,U+2c60-2c7f,U+a720-a7ff}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:400;src:local("Source Sans Pro Italic"),local("SourceSansPro-Italic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK1dSBYKcSV-LCoeQqfX1RYOo3qPZ7nsDJB9cme.woff2) format("woff2");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:600;src:local("Source Sans Pro SemiBold Italic"),local("SourceSansPro-SemiBoldItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZY4lCdh18S0xR41YDw.woff2) format("woff2");unicode-range:U+0460-052f,U+1c80-1c88,U+20b4,U+2de0-2dff,U+a640-a69f,U+fe2e-fe2f}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:600;src:local("Source Sans Pro SemiBold Italic"),local("SourceSansPro-SemiBoldItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZY4lCdo18S0xR41YDw.woff2) format("woff2");unicode-range:U+0400-045f,U+0490-0491,U+04b0-04b1,U+2116}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:600;src:local("Source Sans Pro SemiBold Italic"),local("SourceSansPro-SemiBoldItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZY4lCdg18S0xR41YDw.woff2) format("woff2");unicode-range:U+1f??}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:600;src:local("Source Sans Pro SemiBold Italic"),local("SourceSansPro-SemiBoldItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZY4lCdv18S0xR41YDw.woff2) format("woff2");unicode-range:U+0370-03ff}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:600;src:local("Source Sans Pro SemiBold Italic"),local("SourceSansPro-SemiBoldItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZY4lCdj18S0xR41YDw.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+1ea0-1ef9,U+20ab}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:600;src:local("Source Sans Pro SemiBold Italic"),local("SourceSansPro-SemiBoldItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZY4lCdi18S0xR41YDw.woff2) format("woff2");unicode-range:U+0100-024f,U+0259,U+1e??,U+2020,U+20a0-20ab,U+20ad-20cf,U+2113,U+2c60-2c7f,U+a720-a7ff}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:600;src:local("Source Sans Pro SemiBold Italic"),local("SourceSansPro-SemiBoldItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZY4lCds18S0xR41.woff2) format("woff2");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:700;src:local("Source Sans Pro Bold Italic"),local("SourceSansPro-BoldItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZclSdh18S0xR41YDw.woff2) format("woff2");unicode-range:U+0460-052f,U+1c80-1c88,U+20b4,U+2de0-2dff,U+a640-a69f,U+fe2e-fe2f}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:700;src:local("Source Sans Pro Bold Italic"),local("SourceSansPro-BoldItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZclSdo18S0xR41YDw.woff2) format("woff2");unicode-range:U+0400-045f,U+0490-0491,U+04b0-04b1,U+2116}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:700;src:local("Source Sans Pro Bold Italic"),local("SourceSansPro-BoldItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZclSdg18S0xR41YDw.woff2) format("woff2");unicode-range:U+1f??}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:700;src:local("Source Sans Pro Bold Italic"),local("SourceSansPro-BoldItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZclSdv18S0xR41YDw.woff2) format("woff2");unicode-range:U+0370-03ff}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:700;src:local("Source Sans Pro Bold Italic"),local("SourceSansPro-BoldItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZclSdj18S0xR41YDw.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+1ea0-1ef9,U+20ab}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:700;src:local("Source Sans Pro Bold Italic"),local("SourceSansPro-BoldItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZclSdi18S0xR41YDw.woff2) format("woff2");unicode-range:U+0100-024f,U+0259,U+1e??,U+2020,U+20a0-20ab,U+20ad-20cf,U+2113,U+2c60-2c7f,U+a720-a7ff}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:700;src:local("Source Sans Pro Bold Italic"),local("SourceSansPro-BoldItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZclSds18S0xR41.woff2) format("woff2");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:900;src:local("Source Sans Pro Black Italic"),local("SourceSansPro-BlackItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZklydh18S0xR41YDw.woff2) format("woff2");unicode-range:U+0460-052f,U+1c80-1c88,U+20b4,U+2de0-2dff,U+a640-a69f,U+fe2e-fe2f}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:900;src:local("Source Sans Pro Black Italic"),local("SourceSansPro-BlackItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZklydo18S0xR41YDw.woff2) format("woff2");unicode-range:U+0400-045f,U+0490-0491,U+04b0-04b1,U+2116}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:900;src:local("Source Sans Pro Black Italic"),local("SourceSansPro-BlackItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZklydg18S0xR41YDw.woff2) format("woff2");unicode-range:U+1f??}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:900;src:local("Source Sans Pro Black Italic"),local("SourceSansPro-BlackItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZklydv18S0xR41YDw.woff2) format("woff2");unicode-range:U+0370-03ff}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:900;src:local("Source Sans Pro Black Italic"),local("SourceSansPro-BlackItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZklydj18S0xR41YDw.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+1ea0-1ef9,U+20ab}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:900;src:local("Source Sans Pro Black Italic"),local("SourceSansPro-BlackItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZklydi18S0xR41YDw.woff2) format("woff2");unicode-range:U+0100-024f,U+0259,U+1e??,U+2020,U+20a0-20ab,U+20ad-20cf,U+2113,U+2c60-2c7f,U+a720-a7ff}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:900;src:local("Source Sans Pro Black Italic"),local("SourceSansPro-BlackItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZklyds18S0xR41.woff2) format("woff2");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:200;src:local("Source Sans Pro ExtraLight"),local("SourceSansPro-ExtraLight"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i94_wmhdu3cOWxy40.woff2) format("woff2");unicode-range:U+0460-052f,U+1c80-1c88,U+20b4,U+2de0-2dff,U+a640-a69f,U+fe2e-fe2f}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:200;src:local("Source Sans Pro ExtraLight"),local("SourceSansPro-ExtraLight"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i94_wkxdu3cOWxy40.woff2) format("woff2");unicode-range:U+0400-045f,U+0490-0491,U+04b0-04b1,U+2116}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:200;src:local("Source Sans Pro ExtraLight"),local("SourceSansPro-ExtraLight"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i94_wmxdu3cOWxy40.woff2) format("woff2");unicode-range:U+1f??}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:200;src:local("Source Sans Pro ExtraLight"),local("SourceSansPro-ExtraLight"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i94_wlBdu3cOWxy40.woff2) format("woff2");unicode-range:U+0370-03ff}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:200;src:local("Source Sans Pro ExtraLight"),local("SourceSansPro-ExtraLight"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i94_wmBdu3cOWxy40.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+1ea0-1ef9,U+20ab}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:200;src:local("Source Sans Pro ExtraLight"),local("SourceSansPro-ExtraLight"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i94_wmRdu3cOWxy40.woff2) format("woff2");unicode-range:U+0100-024f,U+0259,U+1e??,U+2020,U+20a0-20ab,U+20ad-20cf,U+2113,U+2c60-2c7f,U+a720-a7ff}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:200;src:local("Source Sans Pro ExtraLight"),local("SourceSansPro-ExtraLight"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i94_wlxdu3cOWxw.woff2) format("woff2");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:300;src:local("Source Sans Pro Light"),local("SourceSansPro-Light"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ik4zwmhdu3cOWxy40.woff2) format("woff2");unicode-range:U+0460-052f,U+1c80-1c88,U+20b4,U+2de0-2dff,U+a640-a69f,U+fe2e-fe2f}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:300;src:local("Source Sans Pro Light"),local("SourceSansPro-Light"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ik4zwkxdu3cOWxy40.woff2) format("woff2");unicode-range:U+0400-045f,U+0490-0491,U+04b0-04b1,U+2116}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:300;src:local("Source Sans Pro Light"),local("SourceSansPro-Light"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ik4zwmxdu3cOWxy40.woff2) format("woff2");unicode-range:U+1f??}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:300;src:local("Source Sans Pro Light"),local("SourceSansPro-Light"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ik4zwlBdu3cOWxy40.woff2) format("woff2");unicode-range:U+0370-03ff}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:300;src:local("Source Sans Pro Light"),local("SourceSansPro-Light"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ik4zwmBdu3cOWxy40.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+1ea0-1ef9,U+20ab}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:300;src:local("Source Sans Pro Light"),local("SourceSansPro-Light"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ik4zwmRdu3cOWxy40.woff2) format("woff2");unicode-range:U+0100-024f,U+0259,U+1e??,U+2020,U+20a0-20ab,U+20ad-20cf,U+2113,U+2c60-2c7f,U+a720-a7ff}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:300;src:local("Source Sans Pro Light"),local("SourceSansPro-Light"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ik4zwlxdu3cOWxw.woff2) format("woff2");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:400;src:local("Source Sans Pro Regular"),local("SourceSansPro-Regular"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK3dSBYKcSV-LCoeQqfX1RYOo3qNa7lujVj9_mf.woff2) format("woff2");unicode-range:U+0460-052f,U+1c80-1c88,U+20b4,U+2de0-2dff,U+a640-a69f,U+fe2e-fe2f}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:400;src:local("Source Sans Pro Regular"),local("SourceSansPro-Regular"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK3dSBYKcSV-LCoeQqfX1RYOo3qPK7lujVj9_mf.woff2) format("woff2");unicode-range:U+0400-045f,U+0490-0491,U+04b0-04b1,U+2116}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:400;src:local("Source Sans Pro Regular"),local("SourceSansPro-Regular"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK3dSBYKcSV-LCoeQqfX1RYOo3qNK7lujVj9_mf.woff2) format("woff2");unicode-range:U+1f??}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:400;src:local("Source Sans Pro Regular"),local("SourceSansPro-Regular"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK3dSBYKcSV-LCoeQqfX1RYOo3qO67lujVj9_mf.woff2) format("woff2");unicode-range:U+0370-03ff}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:400;src:local("Source Sans Pro Regular"),local("SourceSansPro-Regular"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK3dSBYKcSV-LCoeQqfX1RYOo3qN67lujVj9_mf.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+1ea0-1ef9,U+20ab}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:400;src:local("Source Sans Pro Regular"),local("SourceSansPro-Regular"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK3dSBYKcSV-LCoeQqfX1RYOo3qNq7lujVj9_mf.woff2) format("woff2");unicode-range:U+0100-024f,U+0259,U+1e??,U+2020,U+20a0-20ab,U+20ad-20cf,U+2113,U+2c60-2c7f,U+a720-a7ff}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:400;src:local("Source Sans Pro Regular"),local("SourceSansPro-Regular"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK3dSBYKcSV-LCoeQqfX1RYOo3qOK7lujVj9w.woff2) format("woff2");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:600;src:local("Source Sans Pro SemiBold"),local("SourceSansPro-SemiBold"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i54rwmhdu3cOWxy40.woff2) format("woff2");unicode-range:U+0460-052f,U+1c80-1c88,U+20b4,U+2de0-2dff,U+a640-a69f,U+fe2e-fe2f}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:600;src:local("Source Sans Pro SemiBold"),local("SourceSansPro-SemiBold"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i54rwkxdu3cOWxy40.woff2) format("woff2");unicode-range:U+0400-045f,U+0490-0491,U+04b0-04b1,U+2116}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:600;src:local("Source Sans Pro SemiBold"),local("SourceSansPro-SemiBold"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i54rwmxdu3cOWxy40.woff2) format("woff2");unicode-range:U+1f??}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:600;src:local("Source Sans Pro SemiBold"),local("SourceSansPro-SemiBold"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i54rwlBdu3cOWxy40.woff2) format("woff2");unicode-range:U+0370-03ff}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:600;src:local("Source Sans Pro SemiBold"),local("SourceSansPro-SemiBold"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i54rwmBdu3cOWxy40.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+1ea0-1ef9,U+20ab}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:600;src:local("Source Sans Pro SemiBold"),local("SourceSansPro-SemiBold"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i54rwmRdu3cOWxy40.woff2) format("woff2");unicode-range:U+0100-024f,U+0259,U+1e??,U+2020,U+20a0-20ab,U+20ad-20cf,U+2113,U+2c60-2c7f,U+a720-a7ff}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:600;src:local("Source Sans Pro SemiBold"),local("SourceSansPro-SemiBold"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i54rwlxdu3cOWxw.woff2) format("woff2");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:700;src:local("Source Sans Pro Bold"),local("SourceSansPro-Bold"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ig4vwmhdu3cOWxy40.woff2) format("woff2");unicode-range:U+0460-052f,U+1c80-1c88,U+20b4,U+2de0-2dff,U+a640-a69f,U+fe2e-fe2f}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:700;src:local("Source Sans Pro Bold"),local("SourceSansPro-Bold"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ig4vwkxdu3cOWxy40.woff2) format("woff2");unicode-range:U+0400-045f,U+0490-0491,U+04b0-04b1,U+2116}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:700;src:local("Source Sans Pro Bold"),local("SourceSansPro-Bold"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ig4vwmxdu3cOWxy40.woff2) format("woff2");unicode-range:U+1f??}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:700;src:local("Source Sans Pro Bold"),local("SourceSansPro-Bold"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ig4vwlBdu3cOWxy40.woff2) format("woff2");unicode-range:U+0370-03ff}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:700;src:local("Source Sans Pro Bold"),local("SourceSansPro-Bold"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ig4vwmBdu3cOWxy40.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+1ea0-1ef9,U+20ab}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:700;src:local("Source Sans Pro Bold"),local("SourceSansPro-Bold"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ig4vwmRdu3cOWxy40.woff2) format("woff2");unicode-range:U+0100-024f,U+0259,U+1e??,U+2020,U+20a0-20ab,U+20ad-20cf,U+2113,U+2c60-2c7f,U+a720-a7ff}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:700;src:local("Source Sans Pro Bold"),local("SourceSansPro-Bold"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ig4vwlxdu3cOWxw.woff2) format("woff2");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:900;src:local("Source Sans Pro Black"),local("SourceSansPro-Black"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3iu4nwmhdu3cOWxy40.woff2) format("woff2");unicode-range:U+0460-052f,U+1c80-1c88,U+20b4,U+2de0-2dff,U+a640-a69f,U+fe2e-fe2f}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:900;src:local("Source Sans Pro Black"),local("SourceSansPro-Black"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3iu4nwkxdu3cOWxy40.woff2) format("woff2");unicode-range:U+0400-045f,U+0490-0491,U+04b0-04b1,U+2116}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:900;src:local("Source Sans Pro Black"),local("SourceSansPro-Black"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3iu4nwmxdu3cOWxy40.woff2) format("woff2");unicode-range:U+1f??}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:900;src:local("Source Sans Pro Black"),local("SourceSansPro-Black"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3iu4nwlBdu3cOWxy40.woff2) format("woff2");unicode-range:U+0370-03ff}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:900;src:local("Source Sans Pro Black"),local("SourceSansPro-Black"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3iu4nwmBdu3cOWxy40.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+1ea0-1ef9,U+20ab}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:900;src:local("Source Sans Pro Black"),local("SourceSansPro-Black"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3iu4nwmRdu3cOWxy40.woff2) format("woff2");unicode-range:U+0100-024f,U+0259,U+1e??,U+2020,U+20a0-20ab,U+20ad-20cf,U+2113,U+2c60-2c7f,U+a720-a7ff}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:900;src:local("Source Sans Pro Black"),local("SourceSansPro-Black"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3iu4nwlxdu3cOWxw.woff2) format("woff2");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}.muze-group-container{-webkit-tap-highlight-color:rgba(0,0,0,0);background-color:transparent;color:#333;font-family:Source Sans Pro,Helvetica Neue,Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143;margin:0}.muze-group-container *,.muze-group-container :after,.muze-group-container :before{-webkit-box-sizing:border-box;box-sizing:border-box}.muze-group-container .muze-table-arrow{cursor:pointer;height:0;margin:5px;opacity:.5;position:absolute;width:0;z-index:10}.muze-group-container .muze-table-arrow:hover{opacity:1}.muze-group-container .muze-table-arrow-right{border-left:15px solid #4682b4;left:100%}.muze-group-container .muze-table-arrow-left,.muze-group-container .muze-table-arrow-right{border-bottom:20px solid transparent;border-top:20px solid transparent;top:-webkit-calc(50% - 25px);top:calc(50% - 25px)}.muze-group-container .muze-table-arrow-left{border-right:15px solid #4682b4;right:100%}.muze-group-container .muze-table-arrow-bottom{border-top:15px solid #4682b4;top:100%}.muze-group-container .muze-table-arrow-bottom,.muze-group-container .muze-table-arrow-top{border-left:20px solid transparent;border-right:20px solid transparent;left:-webkit-calc(50% - 25px);left:calc(50% - 25px)}.muze-group-container .muze-table-arrow-top{border-bottom:15px solid #4682b4;bottom:100%}.muze-group-container .table-row-nested{border-top:none;visibility:hidden}.muze-group-container svg{display:block;float:left;height:inherit;vertical-align:top;width:inherit}.muze-group-container .axisName.hidden{opacity:0}.muze-group-container .axisName{opacity:1}.muze-group-container .grid-td svg{max-height:100%;max-width:100%}.muze-group-container .domain{opacity:0}.muze-board{float:left}.muze-layout-container{float:left;position:relative}.muze-board-legend,.muze-legend-section{float:left;text-align:center}.muze-legend-horizontal-section{-webkit-align-items:center;-webkit-box-align:center;-webkit-box-pack:center;-webkit-flex-wrap:wrap;-webkit-justify-content:center;align-items:center;display:-webkit-box;display:-webkit-flex;display:flex;flex-wrap:wrap;justify-content:center}.muze-legend-components{float:left;text-align:center}.muze-grid-layout,.muze-grid-layout-container,.muze-grid-layout-row{float:left;position:relative}.muze-grid-table{background-color:transparent;border-spacing:0;table-layout:fixed}.muze-grid-td,.muze-grid-th{padding:0}.muze-table-header{height:inherit;width:inherit}.muze-grid-layout,.muze-layout-grid-container{float:left;position:relative}.muze-layout-grid-container div,.muze-layout-grid-container table{border-collapse:collapse;float:left}.muze-title-container .muze-header-cell{color:#5f5f5f;font-size:24px;font-weight:700}.muze-subtitle-container .muze-text-cell{color:#b1b1b1;font-size:16px;font-weight:400}.domain{opacity:0}.muze-group-container,.muze-layout-container,.muze-legend-container{float:left}.hidden{display:none} \ No newline at end of file diff --git a/dist/muze.js b/dist/muze.js index 79814fb1..37488f60 100644 --- a/dist/muze.js +++ b/dist/muze.js @@ -1,2 +1,2 @@ -!function webpackUniversalModuleDefinition(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define("muze",[],t):"object"==typeof exports?exports.muze=t():e.muze=t()}(window,function(){return function(e){var t={};function __webpack_require__(n){if(t[n])return t[n].exports;var r=t[n]={i:n,l:!1,exports:{}};return e[n].call(r.exports,r,r.exports,__webpack_require__),r.l=!0,r.exports}return __webpack_require__.m=e,__webpack_require__.c=t,__webpack_require__.d=function(e,t,n){__webpack_require__.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},__webpack_require__.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},__webpack_require__.t=function(e,t){if(1&t&&(e=__webpack_require__(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(__webpack_require__.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var r in e)__webpack_require__.d(n,r,function(t){return e[t]}.bind(null,r));return n},__webpack_require__.n=function(e){var t=e&&e.__esModule?function getDefault(){return e.default}:function getModuleExports(){return e};return __webpack_require__.d(t,"a",t),t},__webpack_require__.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},__webpack_require__.p="",__webpack_require__(__webpack_require__.s=7)}([function(e,t,n){(function(e){var r,i,a,o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};!function(n,u){"object"==o(t)&&"object"==o(e)?e.exports=u():(i=[],void 0===(a="function"==typeof(r=u)?r.apply(t,i):r)||(e.exports=a))}(window,function(){return function(e){var t={};function n(r){if(t[r])return t[r].exports;var i=t[r]={i:r,l:!1,exports:{}};return e[r].call(i.exports,i,i.exports,n),i.l=!0,i.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==(void 0===e?"undefined":o(e))&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var i in e)n.d(r,i,function(t){return e[t]}.bind(null,i));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=1)}([function(e){e.exports={name:"datamodel",description:"Relational algebra compliant in-memory tabular data store",homepage:"https://github.com/chartshq/datamodel",version:"2.0.2",license:"MIT",main:"dist/datamodel.js",author:"Charts.com ",keywords:["datamodel","data","relational","algebra","model","muze","fusioncharts","table","tabular","operation"],repository:{type:"git",url:"https://github.com/chartshq/datamodel.git"},contributors:[{name:"Akash Goswami",email:"akash@charts.com"},{name:"Subhash Haldar",email:"subhash@charts.com"},{name:"Rousan Ali",email:"rousan@charts.com",url:"https://rousan.io"},{name:"Ujjal Kumar Dutta",email:"ujjal@charts.com"}],dependencies:{"d3-dsv":"^1.0.8"},devDependencies:{"babel-cli":"6.26.0","babel-core":"^6.26.3","babel-eslint":"6.1.2","babel-loader":"^7.1.4","babel-plugin-transform-runtime":"^6.23.0","babel-preset-env":"^1.7.0","babel-preset-es2015":"^6.24.1","babel-preset-flow":"^6.23.0",chai:"3.5.0","cross-env":"^5.0.5",eslint:"3.19.0","eslint-config-airbnb":"15.1.0","eslint-plugin-import":"2.7.0","eslint-plugin-jsx-a11y":"5.1.1","eslint-plugin-react":"7.3.0","istanbul-instrumenter-loader":"^3.0.0",jsdoc:"3.5.5",json2yaml:"^1.1.0",karma:"1.7.1","karma-chai":"0.1.0","karma-chrome-launcher":"2.1.1","karma-coverage-istanbul-reporter":"^1.3.0","karma-mocha":"1.3.0","karma-spec-reporter":"0.0.31","karma-webpack":"2.0.3",marked:"^0.5.0",mocha:"3.4.2","mocha-webpack":"0.7.0","transform-runtime":"0.0.0",webpack:"^4.12.0","webpack-cli":"^3.0.7","webpack-dev-server":"^3.1.4"},scripts:{test:"npm run lint && npm run ut",ut:"karma start karma.conf.js",utd:"karma start --single-run false --browsers Chrome karma.conf.js ",build:"webpack --mode production","build:dev":"webpack --mode development",start:"webpack-dev-server --config webpack.config.dev.js --mode development --open",lint:"eslint ./src","lint-errors":"eslint --quiet ./src",docs:"rm -rf yaml && mkdir yaml && jsdoc -c jsdoc.conf.json"}}},function(e,t,n){var r=n(2);e.exports=r.default?r.default:r},function(n,c,f){"use strict";f.r(c);var p={};f.r(p),f.d(p,"DataFormat",function(){return b}),f.d(p,"DimensionSubtype",function(){return _}),f.d(p,"MeasureSubtype",function(){return C}),f.d(p,"FieldType",function(){return P}),f.d(p,"FilteringMode",function(){return A});var y={};f.r(y),f.d(y,"DSVArr",function(){return Je}),f.d(y,"DSVStr",function(){return lt}),f.d(y,"FlatJSON",function(){return ft}),f.d(y,"Auto",function(){return ht});var g={};f.r(g),f.d(g,"sum",function(){return Et}),f.d(g,"avg",function(){return Mt}),f.d(g,"min",function(){return Ot}),f.d(g,"max",function(){return Tt}),f.d(g,"first",function(){return Ft}),f.d(g,"last",function(){return Nt}),f.d(g,"count",function(){return jt}),f.d(g,"sd",function(){return It});var b={FLAT_JSON:"FlatJSON",DSV_STR:"DSVStr",DSV_ARR:"DSVArr",AUTO:"Auto"},_={CATEGORICAL:"categorical",TEMPORAL:"temporal",GEO:"geo"},C={DISCRETE:"discrete"},P={MEASURE:"measure",DIMENSION:"dimension"},A={NORMAL:"normal",INVERSE:"inverse",ALL:"all"};function l(e,t){e.length>0&&e.split(",").forEach(function(e){var n=e.split("-"),r=+n[0],i=+(n[1]||n[0]);if(i>=r)for(var a=r;a<=i;a+=1)t(a)})}var O=function(){function e(e,t){for(var n=0;n=0;)o=e[a+1],-1!==r.indexOf(o)&&i.push({index:a,token:o});return i},m.formatAs=function(e,t){var n,r=h(e),i=m.findTokens(t),a=m.getTokenDefinitions(),o=String(t),u=m.TOKEN_PREFIX,c=void 0,s=void 0,l=void 0;for(l=0,n=i.length;l=0;h--)(s=a[h].index)+1!==f.length-1?(void 0===u&&(u=f.length),l=f.substring(s+2,u),f=f.substring(0,s+2)+RegExp.escape(l)+f.substring(u,f.length),u=s):u=s;for(h=0;h1){r=Math.abs(n[1]-n[0]);for(var i=2,a=n.length;i3&&void 0!==arguments[3]&&arguments[3],i=arguments.length>4&&void 0!==arguments[4]?arguments[4]:ye.CROSS,a=[],o=[],u=n||K,c=e.getFieldspace(),s=t.getFieldspace(),f=c.name,h=s.name,d=c.name+"."+s.name,p=L(c,s);if(f===h)throw new Error("DataModels must have different alias names");return c.fields.forEach(function(e){var t=E({},e.schema);-1===p.indexOf(t.name)||r||(t.name=c.name+"."+t.name),a.push(t)}),s.fields.forEach(function(e){var t=E({},e.schema);-1!==p.indexOf(t.name)?r||(t.name=s.name+"."+t.name,a.push(t)):a.push(t)}),l(e._rowDiffset,function(e){var n=!1,d=void 0;l(t._rowDiffset,function(t){var l=[],y={};y[f]={},y[h]={},c.fields.forEach(function(t){l.push(t.data[e]),y[f][t.name]=t.data[e]}),s.fields.forEach(function(e){-1!==p.indexOf(e.schema.name)&&r||l.push(e.data[t]),y[h][e.name]=e.data[t]});var g=Ke(y[f]),v=Ke(y[h]);if(u(g,v)){var m={};l.forEach(function(e,t){m[a[t].name]=e}),n&&ye.CROSS!==i?o[d]=m:(o.push(m),n=!0,d=e)}else if((i===ye.LEFTOUTER||i===ye.RIGHTOUTER)&&!n){var b={},_=c.fields.length-1;l.forEach(function(e,t){b[a[t].name]=t<=_?e:null}),n=!0,d=e,o.push(b)}})}),new At(o,a,{name:d})}function z(e,t){var n=""+e,r=""+t;return nr?1:0}function X(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:z;return e.length>1&&function e(t,n,r,i){if(r===n)return t;var a=n+Math.floor((r-n)/2);return e(t,n,a,i),e(t,a+1,r,i),function(e,t,n,r,i){for(var a=e,o=[],u=t;u<=r;u+=1)o[u]=a[u];for(var c=t,s=n+1,l=t;l<=r;l+=1)c>n?(a[l]=o[s],s+=1):s>r?(a[l]=o[c],c+=1):i(o[c],o[s])<=0?(a[l]=o[c],c+=1):(a[l]=o[s],s+=1)}(t,n,a,r,i),t}(e,0,e.length-1,t),e}function Q(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);to?"desc"===t?-1:1:0}}return i}function Z(e,t){var n=new Map,r=[];return e.forEach(function(e){var i=e[t];n.has(i)?r[n.get(i)][1].push(e):(r.push([i,[e]]),n.set(i,r.length-1))}),r}function ee(e,t,n){var r={label:e[0]};return t.reduce(function(t,r,i){return t[r]=e[1].map(function(e){return e[n[i].index]}),t},r),r}function ne(e,t){var n={},r=[],i=[],a=[],o=e.getFieldspace(),u=t.getFieldspace(),c=o.fieldsObj(),s=u.fieldsObj(),f=o.name+" union "+u.name;if(!M(e._colIdentifier.split(",").sort(),t._colIdentifier.split(",").sort()))return null;function d(e,t,r){l(e._rowDiffset,function(e){var o={},u="";i.forEach(function(n){var r=t[n].data[e];u+="-"+r,o[n]=r}),n[u]||(r&&a.push(o),n[u]=!0)})}return e._colIdentifier.split(",").forEach(function(e){var t=c[e];r.push(E({},t.schema)),i.push(t.schema.name)}),d(t,s,!1),d(e,c,!0),new At(a,r,{name:f})}function re(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);tn&&(n=e)}),[t,n]}(this.data)}},{key:"parse",value:function value(e){return e=parseFloat(e,10),Number.isNaN(e)?null:e}},{key:"unit",value:function value(){return this.fieldUnit}},{key:"scale",value:function value(){return this.fieldScale}},{key:"numberFormat",value:function value(){var e=this.fieldNumberformat;return function(t){return e(t)}}},{key:"defAggFn",value:function value(){return this.fieldDefAggFn}}]),t}(),Ee=function(){function e(e,t){for(var n=0;n=a?c=!0:(r=e.charCodeAt(o++))===at?l=!0:r===ot&&(l=!0,e.charCodeAt(o)===at&&++o),e.slice(i+1,t-1).replace(/""/g,'"')}for(;o2&&void 0!==arguments[2]?arguments[2]:{},i=arguments[3],a=void 0;t!==fe?(a={op:t,meta:r,criteria:i},e._derivation.push(a)):(a=[].concat(Ge(i)),e._derivation.length=0,(n=e._derivation).push.apply(n,Ge(a)))},yt=function ze(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=n.operation||"and",i=n.filterByMeasure||!1,a=[];a=t.length?t.map(function(e){return function(e){var t=e.getData(),n=t.schema,r=e.getFieldsConfig(),a=e.getFieldspace().fieldsObj(),o=t.data,u=Object.values(r).reduce(function(e,t){return e[t.def.name]=a[t.def.name].domain(),e},{});return function(e){return!!o.length&&o.some(function(t){return n.every(function(n){if(!(n.name in e))return!0;var a=e[n.name].valueOf();if(i&&n.type===P.MEASURE)return a>=u[n.name][0]&&a<=u[n.name][1];if(n.type!==P.DIMENSION)return!0;var o=r[n.name].index;return t[o]===e[n.name].valueOf()})})}}(e)}):[function(){return!1}];return"and"===r?e.clone(!1,!1).select(function(e){return a.every(function(t){return t(e)})},{saveChild:!1,mode:A.ALL}):e.clone(!1,!1).select(function(e){return a.some(function(t){return t(e)})},{mode:A.ALL,saveChild:!1})},gt=function Xe(e,t,n,r){var i=e.clone(r.saveChild),a=function(e,t,n,r){var i=[],a=-1,o=void 0,c=function u(e){return n(qe(t,e),e)};return r.mode===A.INVERSE&&(c=function u(e){return!n(qe(t,e))}),l(e,function(e){c(e)&&(-1!==a&&e===a+1?(o=i.length-1,i[o]=i[o].split("-")[0]+"-"+e):i.push(""+e),a=e)}),i.join(",")}(i._rowDiffset,i.getPartialFieldspace().fields,t,n);return i._rowDiffset=a,i.__calculateFieldspace().calculateFieldsConfig(),r.saveChild&&pt(i,ce,{config:n},t),i},vt=function Qe(e,t,n,r){var i=e.clone(n.saveChild),a=t;return n.mode===A.INVERSE&&(a=r.filter(function(e){return-1===t.indexOf(e)})),i._colIdentifier=a.join(","),i.__calculateFieldspace().calculateFieldsConfig(),n.saveChild&&pt(i,se,{projField:t,config:n,actualProjField:a},null),i},mt=function $e(e,t,n,r){r=Object.assign(Object.assign({},Ze),r);var i=y[r.dataFormat];if(!i||"function"!=typeof i)throw new Error("No converter function found for "+r.dataFormat+" format");var a=i(t,r),o=dt(a,2),u=o[0],c=o[1],s=Ue(c,n,u),l=Y.createNamespace(s,r.name);return e._partialFieldspace=l,e._rowDiffset=c.length&&c[0].length?"0-"+(c[0].length-1):"",e._colIdentifier=n.map(function(e){return e.name}).join(),e},bt=function Ze(e,t){for(var n=0;n2&&void 0!==arguments[2]?arguments[2]:{},i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},a=i.nonTraversingModel,o=i.excludeModels||[];t!==a&&((!o.length||-1===o.indexOf(t))&&t.handlePropagation(n,r),t._children.forEach(function(t){var a=_t(n,t),o=dt(a,2),u=o[0],c=o[1];e(t,[u,c],r,i)}))},wt=function nt(e,t,n,r){var i=void 0,a=void 0,o=n.propagationNameSpace,u=n.propagateToSource,c=n.sourceId,s=r.propagateInterpolatedValues,l=[];if(null===e&&!0!==r.persistent)l=[{criteria:[]}];else{var f,h=Object.values(o.mutableActions);!1!==u&&(h=h.filter(function(e){return e.config.sourceId!==c}));var d=h.filter(function(e){return(r.filterFn||function(){return!0})(e,r)}).map(function(e){return e.config.criteria}),p=[];if(!1!==u){var y=Object.values(o.mutableActions);y.forEach(function(e){var t=e.config;!1===t.applyOnSource&&t.action===r.action&&t.sourceId!==c&&(p.push(e.model),(i=y.filter(function(t){return t!==e}).map(function(e){return e.config.criteria})).length&&l.push({criteria:i,models:e.model,path:function e(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];return null!==t._parent&&(n.push(t),e(t._parent,n)),n}(e.model)}))})}i=(f=[]).concat.apply(f,[].concat(Ge(d),[e])).filter(function(e){return null!==e}),l.push({criteria:i,excludeModels:[].concat(p,Ge(r.excludeModels||[]))})}var g=t.model,v=Object.assign({sourceIdentifiers:e,propagationSourceId:c},r),m=t.groupByModel;s&&m&&(a=yt(m,i,{filterByMeasure:s}),xt(m,a,v)),l.forEach(function(e){var t=yt(g,e.criteria),n=e.path;if(n){var r=function(e,t){for(var n=0,r=t.length;n0&&void 0!==arguments[0])||arguments[0],t=void 0;if(!1===(!(arguments.length>1&&void 0!==arguments[1])||arguments[1])){var n=this.getData({getAllFields:!0}),r=n.data,i=n.schema,a=r.map(function(e){var t={};return i.forEach(function(n,r){t[n.name]=e[r]}),t});t=new this.constructor(a,i)}else t=new this.constructor(this);return e&&this._children.push(t),t}},{key:"project",value:function value(e,t){var n={mode:A.NORMAL,saveChild:!0};t=Object.assign({},n,t);var r=this.getFieldsConfig(),i=Object.keys(r),a=t.mode,o=e.reduce(function(e,t){return"RegExp"===t.constructor.name?e.push.apply(e,function(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t1&&void 0!==arguments[1]?arguments[1]:[];pt(this,fe,null,t),this._parent=e,e._children.push(this)}}]),e}(),St=function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function(e,t){var n=[],r=!0,i=!1,a=void 0;try{for(var o,u=e[Symbol.iterator]();!(r=(o=u.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){i=!0,a=e}finally{try{!r&&u.return&&u.return()}finally{if(i)throw a}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")},Pt=function(){function e(e,t){for(var n=0;n0,c=[];if(n.split(",").forEach(function(t){for(var n=0;n=0;u--)i=t[u][0],a=t[u][1],(o=bt(r,i))&&(S(a)?X(n,function(e,t){return a(e[o.index],t[o.index])}):j(a)?function(){var e=Z(n,o.index),t=a[a.length-1],i=a.slice(0,a.length-1),u=i.map(function(e){return bt(r,e)});e.forEach(function(e){e.push(ee(e,i,u))}),X(e,function(e,n){var r=e[2],i=n[2];return t(r,i)}),n.length=0,e.forEach(function(e){n.push.apply(n,Q(e[1]))})}():(a="desc"===String(a).toLowerCase()?"desc":"asc",X(n,$(o.type,a,o.index))));e.uids=[],n.forEach(function(t){e.uids.push(t.pop())})}(a,r),i.columnWise){var s=Array.apply(void 0,Q(Array(a.schema.length))).map(function(){return[]});a.data.forEach(function(e){e.forEach(function(e,t){s[t].push(e)})}),a.data=s}return a}.call(this,this.getPartialFieldspace().fields,this._rowDiffset,e.getAllFields?t.map(function(e){return e.name}).join():this._colIdentifier,e.sort,{columnWise:"column"===e.order,addUid:!!e.withUid});if(!e.formatter)return n;var r=e.formatter,i=n.data,a=n.schema,o=n.uids,u=a.map(function(e){return e.name}),c=Object.keys(r).reduce(function(e,t){var n=u.indexOf(t);return-1!==n&&e.push([n,r[t]]),e},[]);return"column"===e.order?c.forEach(function(e){var t=e[0],n=e[1];i[t].forEach(function(e,r){i[t][r]=n.call(void 0,e,o[r],a[t])})}):i.forEach(function(e,t){c.forEach(function(n){var r=n[0],i=n[1];e[r]=i.call(void 0,e[r],o[t],a[r])})}),n}},{key:"groupBy",value:function value(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{saveChild:!0},r=""+e.join(),i=function de(e,t,n,r){var i=function(e,t){var n=[],r=e.getPartialFieldspace(),i=r.getDimension(),a=r.getMeasure();return Object.entries(i).forEach(function(e){var r=ke(e,1)[0];t&&t.length?-1!==t.indexOf(r)&&n.push(r):n.push(r)}),Object.entries(a).forEach(function(e){var r=ke(e,1)[0];"discrete"===a[r].subType()&&(t&&t.length?-1!==t.indexOf(r)&&n.push(r):n.push(r))}),n}(e,t),a=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n={},r=t,i=e.getPartialFieldspace().getMeasure(),a=we.defaultReducer();return"function"==typeof t&&(a=t),Object.entries(i).forEach(function(e){var o=ke(e,1)[0];"string"==typeof t[o]&&(r[o]=we.resolve(r[o])?we.resolve(r[o]):a),"function"!=typeof t[o]&&(r[o]=void 0),n[o]=r[o]||we.resolve(i[o].defAggFn())||a}),n}(e,n),o=e.getPartialFieldspace(),u=o.fieldsObj(),c=o.name,s=[],f=[],h=[],d={},p=[],y=void 0;Object.entries(u).forEach(function(e){var t=ke(e,2),n=t[0],r=t[1];(-1!==i.indexOf(n)||a[n])&&(h.push(E({},r.schema)),"measure"===r.schema.type&&"discrete"!==r.schema.subtype?f.push(n):"dimension"!==r.schema.type&&"discrete"!==r.schema.subtype||s.push(n))});var g=0;return l(e._rowDiffset,function(e){var t="";s.forEach(function(n){t=t+"-"+u[n].data[e]}),void 0===d[t]?(d[t]=g,p.push({}),s.forEach(function(t){p[g][t]=u[t].data[e]}),f.forEach(function(t){p[g][t]=[u[t].data[e]]}),g+=1):f.forEach(function(n){p[d[t]][n].push(u[n].data[e])})}),p.forEach(function(e){var t=e;f.forEach(function(n){t[n]=a[n](e[n])})}),r?(r.__calculateFieldspace(),y=r):y=new Lt(p,h,{name:c}),y}.apply(void 0,[this,e,t]);return n.saveChild&&(this._children.push(i),pt(i,le,{fieldsArr:e,groupByString:r,defaultReducer:we.defaultReducer()},t)),i._parent=this,i}},{key:"sort",value:function value(e){var t=this.getData({order:"row",sort:e}),n=[t.schema.map(function(e){return e.name})].concat(t.data),r=new this.constructor(n,t.schema,{dataFormat:"DSVArr"});return r._sortingDetails=e,r}},{key:"addField",value:function value(e){var t=e.fieldName();this._colIdentifier+=","+t;var n=this._partialFieldspace;if(n.fieldsObj()[e.fieldName()]){var r=n.fields.findIndex(function(e){return e.name===t});r>=0&&(n.fields[r]=e)}else n.fields.push(e);return this.__calculateFieldspace().calculateFieldsConfig(),this}},{key:"calculateVariable",value:function value(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{saveChild:!0,replaceVar:!1},r=this.getFieldsConfig(),i=t.slice(0,t.length-1),a=t[t.length-1];if(r[e.name]&&!n.replaceVar)throw new Error(e.name+" field already exists in model.");var o=i.map(function(e){var t=r[e];if(!t)throw new Error(e+" is not a valid column name.");return t.index}),u=this.clone(),c=u.getFieldspace().fields,s=o.map(function(e){return c[e]}),f=[];l(u._rowDiffset,function(e){var t=s.map(function(t){return t.data[e]});f[e]=a.apply(void 0,function(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t1&&void 0!==arguments[1]?arguments[1]:{},n=arguments[2],r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},i=t.isMutableAction,a=t.sourceId,o=t.payload,u=function e(t){return t._parent?e(t._parent):t}(this),c=u._propagationNameSpace,s={groupByModel:function e(t){return t._parent&&t._derivation.find(function(e){return"group"!==e.op})?e(t._parent):t}(this),model:u};return n&&function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments[2],r=void 0,i=t.isMutableAction,a=t.criteria,o=t.action+"-"+t.sourceId;r=i?e.mutableActions:e.immutableActions,null===a?delete r[o]:r[o]={model:n,config:t}}(c,t,this),wt(e,s,{propagationNameSpace:c,sourceId:a},Object.assign({payload:o},t)),i&&function(e,t,n){var r=e.immutableActions;for(var i in r){var a=r[i].config,o=n.config.sourceId,u=!n.propConfig.filterImmutableAction||n.propConfig.filterImmutableAction(a,n.config);if(a.sourceId!==o&&u){var c=a.criteria;wt(c,t,{propagationNameSpace:e,propagateToSource:!1,sourceId:o},a)}}}(c,s,{config:t,propConfig:r}),this}},{key:"on",value:function value(e,t){switch(e){case"propagation":this._onPropagation.push(t)}return this}},{key:"unsubscribe",value:function value(e){switch(e){case"propagation":this._onPropagation=[]}return this}},{key:"handlePropagation",value:function value(e,t){var n=this;this._onPropagation.forEach(function(r){return r.call(n,e,t)})}},{key:"bin",value:function value(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=this.clone(),r=t.name||e+"_binned";if(this.getFieldsConfig()[r]||!this.getFieldsConfig()[e])throw new Error("Field "+e+" already exists.");var i=function I(e,t,n){var r=n.buckets,i=n.binCount,a=n.binSize,o=n.start,u=[],c=[],s=e.domain(),f=ue(s,2),h=f[0],d=f[1],p=d,y=[],g=void 0,v=void 0,m=void 0,b=void 0;if(l(t,function(t){u.push({data:e.data[t],index:t})}),!r){var _=((d+=1)-h)%(a=a||(d-h)/i);for(i||0===_||(d=d+a-_),g=h+a;g<=d;)y.push(g),g+=a;r={start:o=o||h,stops:y}}v=0===r.start?0:r.start||h,r.stops.forEach(function(e){u.filter(function(t){return t.data>=v&&t.data=r.stops[r.stops.length-1]}).forEach(function(e){c[e.index]=r.stops[r.stops.length-1]+"-"+p}),r.stops.unshift(r.start),b=new Set(r.stops),hr.stops[r.stops.length-1]&&b.add(p),b=[].concat(function(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t1&&void 0!==arguments[1]?arguments[1]:{saveChild:!0}).saveChild;return t.forEach(function(e){n=e(n),i.push.apply(i,function(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t1&&r.dispose(),n}},bin:function bin(){for(var e=arguments.length,t=Array(e),n=0;n2?(i=arguments.length<=0?void 0:arguments[0],r=arguments.length<=1?void 0:arguments[1],a=arguments.length<=2?void 0:arguments[2]):(i=null,r=arguments.length<=0?void 0:arguments[0],a=arguments.length<=1?void 0:arguments[1]),t=a(w),(e=n=new A(t.fn)).addDependencies.apply(e,P(t.dependencies)),this._addPropInModel(i,function(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}({},r,n)),this}},{key:"_addPropInModel",value:function value(e,t){return this._graph.createNodesFrom(t,e),this}},{key:"on",value:function value(e,t,n){var r,i=e instanceof Array?e:[e],a=this._graph.createElectricNodeOf(i,{type:"CurrFrame",fn:t});return n&&(r=this._graph.stopPropagation().setPropagationOverride("nextFrame")).resetNodeValue.apply(r,P(e)),a}},{key:"next",value:function value(e,t,n){var r,i=e instanceof Array?e:[e],a=this._graph.createElectricNodeOf(i,{type:"NextFrame",fn:t});return n&&(r=this._graph.stopPropagation().setPropagationOverride("currentFrame")).resetNodeValue.apply(r,P(e)),a}},{key:"lock",value:function value(){return this._lockFlag=!0,this._reqQ.length=0,this}},{key:"unlock",value:function value(){return this._lockFlag=!1,this.setProp.apply(this,P(this._reqQ)),this._reqQ.length=0,this}},{key:"prop",value:function value(){var e,t=void 0,n=void 0;switch(e=arguments.length){case 1:t=arguments.length<=0?void 0:arguments[0];break;case 2:t=arguments.length<=0?void 0:arguments[0],n=arguments.length<=1?void 0:arguments[1];break;default:return this}return 2===e?(this._lockFlag?this._reqQ.push([t,n]):this.setProp([t,n]),this):this._graph.getNodeValue(t)}},{key:"setProp",value:function value(){for(var e,t=this,n=arguments.length,r=Array(n),i=0;i/gi),e},SmartLabelManager.store={},SmartLabelManager.prototype._calCharDimWithCache=function(e,t,n){if(!this._init)return!1;var r,i,a,o,u,c,s=this.options.maxCacheLimit,l=this._container,h=this.style||{},d=this._advancedCache||(this._advancedCache={}),p=this._advancedCacheKey||(this._advancedCacheKey=[]),y=e+(h.fontSize||"")+(h.fontFamily||"")+(h.fontWeight||"")+(h.fontStyle||""),g=e+"init"+(h.fontSize||"")+(h.fontFamily||"")+(h.fontWeight||"")+(h.fontStyle||"");return f[e]&&(e=f[e]),t?void 0===(c=d[g])&&(l.innerHTML=e.repeat?e.repeat(n):Array(n+1).join(e),a=l.offsetWidth,l.innerHTML=e,o=l.offsetWidth,c=d[g]=(a-n*o)/(n+1),p.push(g),p.length>s&&delete d[p.shift()]):c=0,(u=d[y])?(i=u.split(","),{width:parseFloat(i[0],10),height:parseFloat(i[1],10)}):(l.innerHTML=e,r={height:l.offsetHeight,width:l.offsetWidth+c},d[y]=r.width+","+r.height,p.push(y),p.length>s&&delete d[p.shift()],r)},SmartLabelManager.prototype._getWidthFn=function(){var e=this._containerObj,t=this._container,n=e.svgText;return n?function(e){var t,r;return n.textContent=e,(r=(t=n.getBBox()).width-d)<1&&(r=t.width),r}:function(e){return t.innerHTML=e,t.offsetWidth}},SmartLabelManager.prototype.setStyle=function(e){return this._init?e!==this.style||this._styleNotSet?(e||(e=this.style),o.setLineHeight(e),this.style=e,this._containerObj=t=this._containerManager.get(e),this._containerObj?(this._container=t.node,this._context=t.context,this._cache=t.charCache,this._lineHeight=t.lineHeight,this._styleNotSet=!1):this._styleNotSet=!0,this):void 0:this;var t},SmartLabelManager.prototype.useEllipsesOnOverflow=function(e){return this._init?(this._showNoEllipses=!e,this):this},SmartLabelManager.prototype.getSmartText=function(e,t,n,r){if(!this._init)return!1;void 0===e||null===e?e="":"string"!=typeof e&&(e=e.toString());var i,a,c,l,f,d,p,y,g,v,m,b,_,x,w,k,C,S,P,A,E,M,O,T,F,N,j=!1,I=0,D=-1,L=-1,R=-1,B=0,z=0,H=[],V=0,U=this._showNoEllipses?"":"...",W=this._lineHeight,q=this._context,G=this._container,Y=this._containerObj,X=Y.ellipsesWidth,K=Y.dotWidth,$=[],Q=-1,Z=-1,J=-1,ee=function fastTrim(e){for(var t=/\s/,n=(e=e.replace(/^\s\s*/,"")).length;t.test(e.charAt(n-=1)););return e.slice(0,n+1)},te={text:e,maxWidth:t,maxHeight:n,width:null,height:null,oriTextWidth:null,oriTextHeight:null,oriText:e,isTruncated:!1};if(b=this._getWidthFn(),n===W&&(n*=1.2),G){if(!h.isBrowserLess){if((j=o.xmlTagRegEx.test(e))?(G.innerHTML=e,te.oriTextWidth=p=G.offsetWidth,te.oriTextHeight=y=G.offsetHeight):(l=e.replace(o.ltgtRegex,function(e){return"<"===e?"<":">"}),w=this.getOriSize(l,!0),te.oriTextWidth=p=w.width,te.oriTextHeight=y=w.height),y<=n&&p<=t)return te.width=te.oriTextWidth=p,te.height=te.oriTextHeight=y,te;if(W>n)return te.text="",te.width=te.oriTextWidth=0,te.height=te.oriTextHeight=0,te}if(e=ee(e).replace(/(\s+)/g," "),f=this._showNoEllipses?t:t-X,!j){if(i=(H=e.split("")).length,a="",c=[],m=H[0],this._cache[m]?P=this._cache[m].width:(P=b(m),this._cache[m]={width:P}),f>P)V=(c=e.substr(0,o.getNearestBreakIndex(e,f,this)).split("")).length;else{if(P>t)return te.text="",te.width=te.oriTextWidth=te.height=te.oriTextHeight=0,te;U&&((f=t-2*K)>P?U="..":(f=t-K)>P?U=".":(f=0,U=""))}if(B=b(c.join("")),z=this._lineHeight,r){for(;Vf&&(a||(a=c.slice(0,-1).join("")),B>t))return te.text=ee(a)+U,te.tooltext=te.oriText,te.width=b(te.text),te.height=this._lineHeight,te;return te.text=c.join(""),te.width=B,te.height=this._lineHeight,te}for(;Vf&&(a||(a=c.slice(0,-1).join("")),B>t)){if(L=e.substr(0,c.length).lastIndexOf(" "),D=e.substr(0,c.length).lastIndexOf("-"),L>R?(B=b(c.slice(R+1,L).join("")),c.splice(L,1,"
"),R=L,g=L+1):D>R?(D===c.length-1?(B=b(c.slice(R+1,L).join("")),c.splice(D,1,"
-")):(B=b(c.slice(R+1,L).join("")),c.splice(D,1,"-
")),R=D,g=D+1):(c.splice(c.length-1,1,"
"+H[V]),J=c.length-2,B=b(c.slice(R+1,J+1).join("")),R=J,g=V),(z+=this._lineHeight)>n)return te.text=ee(a)+U,te.tooltext=te.oriText,te.width=t,te.height=z-this._lineHeight,te;I=s(I,B),a=null,v=o.getNearestBreakIndex(e.substr(g),f,this),B=b(e.substr(g,v||1)),c.length)/g,'$1'),G.innerHTML=e,C=0,S=(k=G[h.childRetriverFn](h.childRetriverString)).length;Ct)return te.text="",te.width=te.oriTextWidth=te.height=te.oriTextHeight=0,te;if(P>f&&!this._showNoEllipses&&((f=t-2*K)>P?U="..":(f=t-K)>P?U=".":(f=0,U="")),_=$[0].elem.offsetLeft,x=$[0].elem.offsetTop,r)for(;Vf&&(N||(N=V),G.offsetWidth>t&&(F=V,V=i));else for(;Vf?(N||(N=V),M>t&&(L=$[V].spaceIdx,D=$[V].dashIdx,L>R?($[L].elem.innerHTML="
",R=L):D>R?($[D].elem.innerHTML=D===V?"
-":"-
",R=D):A.parentNode.insertBefore(T=u.createElement("br"),A),A.offsetHeight+A.offsetTop>n?(T?T.parentNode.removeChild(T):R===D?$[D].elem.innerHTML="-":$[L].elem.innerHTML=" ",F=V,V=i):N=null)):O>n&&(F=V,V=i);if(F=N;V-=1)(A=$[V].elem).parentNode.removeChild(A);for(;V>=0;V-=1)A=$[V].elem,o.classNameBrReg.test(A.className)?A.parentNode.removeChild(A):V=0}return te.text=G.innerHTML.replace(o.spanRemovalRegx,"$1").replace(/\&\;/g,"&"),te.isTruncated&&(te.text+=U,te.tooltext=d),te.height=G.offsetHeight,te.width=G.offsetWidth,te}return te.error=new Error("Body Tag Missing!"),te},SmartLabelManager.prototype.getOriSize=function(e,t){if(!this._init)return!1;var n,r,i,a,o,u=0,c=0,f={};if(!t)return this._calCharDimWithCache(e);for(a=0,o=(n=e.split("")).length;a]+?\>)|(&(?:[a-z]+|#[0-9]+);|.)/gi,spanAdditionReplacer:'$1$2',spanRemovalRegx:new RegExp("\\]+?"+c+"[^\\>]{0,}\\>(.*?)\\<\\/span\\>","ig"),xmlTagRegEx:new RegExp("<[^>][^<]*[^>]+>","i"),ltgtRegex:/<|>/g,brReplaceRegex://gi,testStrAvg:"WgI",parentContainerStyle:{position:"absolute",top:"-9999em",whiteSpace:"nowrap",padding:"0px",width:"1px",height:"1px",overflow:"hidden"},supportedStyle:{font:"font",fontFamily:"font-family","font-family":"font-family",fontWeight:"font-weight","font-weight":"font-weight",fontSize:"font-size","font-size":"font-size",lineHeight:"line-height","line-height":"line-height",fontStyle:"font-style","font-style":"font-style"},getDocumentSupport:function getDocumentSupport(){var r,i,a;return t.getElementsByClassName?(r="getElementsByClassName",i=c,a=!0):(r="getElementsByTagName",i="span",a=!1),{isIE:/msie/i.test(n)&&!e.opera,hasSVG:Boolean(e.SVGAngle||t.implementation.hasFeature("http://www.w3.org/TR/SVG11/feature#BasicStructure","1.1")),isHeadLess:new RegExp(" HtmlUnit").test(n),isWebKit:new RegExp(" AppleWebKit/").test(n),childRetriverFn:r,childRetriverString:i,noClassTesting:a}},createContainer:function createContainer(e){var n,r;if(e&&(e.offsetWidth||e.offsetHeight)){if(e.appendChild)return e.appendChild(r=t.createElement("DIV")),r.className=u,r.setAttribute("aria-hidden","true"),r.setAttribute("role","presentation"),r}else if((n=t.getElementsByTagName("body")[0])&&n.appendChild)return(r=t.createElement("DIV")).className=u,r.setAttribute("aria-hidden","true"),r.setAttribute("role","presentation"),1,n.appendChild(r),r},getNearestBreakIndex:function getNearestBreakIndex(e,t,n){if(!e||!e.length)return 0;var r,o=n._getWidthFn(),u=0,c=0,s=o(e),l=s/e.length;if(r=t,u=i(t/l),se.length&&(r=t-s,u=e.length);r>0;){if(r=t-o(e.substr(0,u)),!(c=a(r/l)))return u;u+=c}for(;r<0;){if(r=t-o(e.substr(0,u)),!(c=a(r/l)))return u;u+=c}return u},setLineHeight:function setLineHeight(e){var t=e.fontSize=e.fontSize||"12px";return e.lineHeight=e.lineHeight||e["line-height"]||1.2*parseInt(t,10)+"px",e}}}};t.default=r,e.exports=t.default},function(e){e.exports={name:"muze",private:!0,version:"1.0.2",description:"Composable visualisation library for web with a data-first approach",homepage:"https://www.charts.com/muze",license:"MIT",author:"Charts.com ",contributors:[{name:"Akash Ghoswami",email:"akash@charts.com"},{name:"Ranajit Banerjee",email:"ranajit.banerjee@charts.com",url:"https://github.com/ranajitbanerjee"},{name:"Mridul Meharia",email:"mridul@charts.com",url:"https://github.com/mridulmeh"},{name:"Subhash Haldar",email:"subhash@charts.com"},{name:"Sandeep Acharya",email:"sandeep@charts.com"},{name:"Rousan Ali",email:"rousan@charts.com",url:"https://rousan.io"},{name:"Ujjal Kumar Dutta",email:"ujjal@charts.com"}],main:"src/index.js",keywords:["muze","svg","vector","graphics","data-visualization","visualization","renderer","fusioncharts","relational","algebra","relation"],repository:{type:"git",url:"https://github.com/chartshq/muze"},dependencies:{"@chartshq/layout":"^1.0.0","@chartshq/muze-firebolt":"^1.0.0","@chartshq/muze-legend":"^1.0.0","muze-utils":"^1.0.0","@chartshq/visual-cell":"^1.0.0","@chartshq/visual-group":"^1.0.0","@chartshq/visual-layer":"^1.0.0","@chartshq/visual-unit":"^1.0.0"}}},function(e,t,n){var r=n(44);e.exports=r.default?r.default:r},function(e,t,n){"use strict";var r=function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}(n(5)).default.init("undefined"!=typeof window?window:void 0),i=r.win.document,a=r.getDocumentSupport(),o=a.isWebKit?0:4.5;function ContainerManager(e,t,n){var r;n=(n=n>5?n:5)<20?n:20,this.maxContainers=n,this.first=null,this.last=null,this.containers={},this.length=0,this.rootNode=e,t&&((r=i.createElementNS("http://www.w3.org/2000/svg","svg")).setAttributeNS("http://www.w3.org/2000/svg","xlink","http://www.w3.org/1999/xlink"),r.setAttributeNS("http://www.w3.org/2000/svg","height","0"),r.setAttributeNS("http://www.w3.org/2000/svg","width","0"),this.svgRoot=r,this.rootNode.appendChild(r))}ContainerManager.prototype.get=function(e){var t,n,i,a=this.containers,o=this.length,u=this.maxContainers,c="";for(n in r.supportedStyle)void 0!==e[n]&&(c+=r.supportedStyle[n]+":"+e[n]+";");if(!c)return!1;if(i=a[c])this.first!==i&&(i.prev&&(i.prev.next=i.next),i.next&&(i.next.prev=i.prev),i.next=this.first,i.next.prev=i,this.last===i&&(this.last=i.prev),i.prev=null,this.first=i);else{if(o>=u)for(t=o-u+1;t--;)this.removeContainer(this.last);i=this.addContainer(c)}return i},ContainerManager.prototype.addContainer=function(e){var t,n;return this.containers[e]=n={next:null,prev:null,node:null,ellipsesWidth:0,lineHeight:0,dotWidth:0,avgCharWidth:4,keyStr:e,charCache:{}},n.next=this.first,n.next&&(n.next.prev=n),this.first=n,this.last||(this.last=n),this.length+=1,t=n.node=i.createElement("div"),this.rootNode.appendChild(t),a.isIE&&!a.hasSVG?t.style.setAttribute("cssText",e):t.setAttribute("style",e),t.setAttribute("aria-hidden","true"),t.setAttribute("role","presentation"),t.style.display="inline-block",t.innerHTML=r.testStrAvg,n.lineHeight=t.offsetHeight,n.avgCharWidth=t.offsetWidth/3,a.isBrowserLess?((t=n.svgText=i.createElementNS("http://www.w3.org/2000/svg","text")).setAttribute("style",e),this.svgRoot.appendChild(t),t.textContent=r.testStrAvg,n.lineHeight=t.getBBox().height,n.avgCharWidth=(t.getBBox().width-o)/3,t.textContent="...",n.ellipsesWidth=t.getBBox().width-o,t.textContent=".",n.dotWidth=t.getBBox().width-o):(t.innerHTML="...",n.ellipsesWidth=t.offsetWidth,t.innerHTML=".",n.dotWidth=t.offsetWidth,t.innerHTML=""),n},ContainerManager.prototype.removeContainer=function(e){var t=e.keyStr;t&&this.length&&e&&(this.length-=1,e.prev&&(e.prev.next=e.next),e.next&&(e.next.prev=e.prev),this.first===e&&(this.first=e.next),this.last===e&&(this.last=e.prev),e.node.parentNode.removeChild(e.node),delete this.containers[t])},ContainerManager.prototype.dispose=function(){var e,t=this.containers;for(e in this.maxContainers=null,t)this.removeContainer(t[e]);this.rootNode.parentNode.removeChild(this.rootNode),this.rootNode=null,this.first=null,this.last=null},e.exports=ContainerManager},function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,,function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,function(e,t,n){"use strict";n.r(t);var r={};n.r(r),n.d(r,"scaleLinear",function(){return linear_linear}),n.d(r,"scaleThreshold",function(){return threshold_threshold}),n.d(r,"scaleLog",function(){return log}),n.d(r,"scalePow",function(){return pow}),n.d(r,"scaleIdentity",function(){return identity_identity}),n.d(r,"scaleOrdinal",function(){return ordinal}),n.d(r,"scaleSequential",function(){return sequential}),n.d(r,"scaleQuantize",function(){return quantize_quantize}),n.d(r,"scaleQuantile",function(){return quantile_quantile}),n.d(r,"schemeCategory10",function(){return tn}),n.d(r,"schemeCategory20",function(){return rn}),n.d(r,"schemeCategory20b",function(){return nn}),n.d(r,"scaleBand",function(){return band}),n.d(r,"scaleTime",function(){return Jt});var i={};n.r(i),n.d(i,"schemeDark2",function(){return cn}),n.d(i,"schemePaired",function(){return sn}),n.d(i,"schemeAccent",function(){return un}),n.d(i,"schemePastel1",function(){return ln}),n.d(i,"schemePastel2",function(){return fn}),n.d(i,"schemeSet1",function(){return hn}),n.d(i,"schemeSet2",function(){return dn}),n.d(i,"schemeSet3",function(){return pn}),n.d(i,"schemeBlues",function(){return zn}),n.d(i,"schemeBrBG",function(){return gn}),n.d(i,"schemePRGn",function(){return mn}),n.d(i,"schemePiYG",function(){return _n}),n.d(i,"interpolateBrBG",function(){return vn}),n.d(i,"interpolatePRGn",function(){return bn}),n.d(i,"interpolatePiYG",function(){return xn}),n.d(i,"interpolatePuOr",function(){return wn}),n.d(i,"interpolateRdBu",function(){return kn}),n.d(i,"interpolateRdGy",function(){return Cn}),n.d(i,"interpolateRdYlBu",function(){return Sn}),n.d(i,"interpolateRdYlGn",function(){return Pn}),n.d(i,"interpolateSpectral",function(){return An}),n.d(i,"interpolateBlues",function(){return Hn}),n.d(i,"interpolateGreens",function(){return Vn}),n.d(i,"interpolateGreys",function(){return Un}),n.d(i,"interpolateOranges",function(){return Gn}),n.d(i,"interpolatePurples",function(){return Wn}),n.d(i,"interpolateReds",function(){return qn}),n.d(i,"interpolateViridis",function(){return Zn}),n.d(i,"interpolateInferno",function(){return er}),n.d(i,"interpolateMagma",function(){return Jn}),n.d(i,"interpolatePlasma",function(){return tr}),n.d(i,"interpolateWarm",function(){return Xn}),n.d(i,"interpolateCool",function(){return Kn}),n.d(i,"interpolateCubehelixDefault",function(){return Yn}),n.d(i,"interpolateBuGn",function(){return En}),n.d(i,"interpolateBuPu",function(){return Mn}),n.d(i,"interpolateGnBu",function(){return On}),n.d(i,"interpolateOrRd",function(){return Tn}),n.d(i,"interpolatePuBuGn",function(){return Fn}),n.d(i,"interpolatePuBu",function(){return Nn}),n.d(i,"interpolatePuRd",function(){return jn}),n.d(i,"interpolateRdPu",function(){return In}),n.d(i,"interpolateYlGnBu",function(){return Dn}),n.d(i,"interpolateYlGn",function(){return Ln}),n.d(i,"interpolateYlOrBr",function(){return Rn}),n.d(i,"interpolateYlOrRd",function(){return Bn}),n.d(i,"interpolateRainbow",function(){return Qn});var a={};n.r(a),n.d(a,"DRAG",function(){return Qo}),n.d(a,"HOVER",function(){return Zo}),n.d(a,"SELECTIONDRAG",function(){return Jo}),n.d(a,"CLICK",function(){return eu}),n.d(a,"LONGTOUCH",function(){return tu}),n.d(a,"TOUCHDRAG",function(){return nu}),n.d(a,"ALL_ACTIONS",function(){return ru});var o={};n.r(o),n.d(o,"SELECTION_NEW_ENTRY",function(){return iu}),n.d(o,"SELECTION_NEW_EXIT",function(){return au}),n.d(o,"SELECTION_NULL",function(){return ou}),n.d(o,"SELECTION_OLD_ENTRY",function(){return uu}),n.d(o,"SELECTION_OLD_EXIT",function(){return cu});var u={};n.r(u),n.d(u,"BRUSH",function(){return wu}),n.d(u,"HIGHLIGHT",function(){return ku}),n.d(u,"TOOLTIP",function(){return Cu}),n.d(u,"FILTER",function(){return Su}),n.d(u,"SELECT",function(){return Pu});var c={};n.r(c),n.d(c,"HighlightBeahviour",function(){return Eu}),n.d(c,"BrushBehaviour",function(){return Ou}),n.d(c,"FilterBehaviour",function(){return Fu}),n.d(c,"SelectBehaviour",function(){return Lu});var s={};n.r(s),n.d(s,"SelectionBox",function(){return Ju}),n.d(s,"Tooltip",function(){return gc}),n.d(s,"Crossline",function(){return mc}),n.d(s,"PlotHighlighter",function(){return xc}),n.d(s,"FilterEffect",function(){return kc}),n.d(s,"PersistentAnchors",function(){return Ec}),n.d(s,"BrushAnchors",function(){return Tc}),n.d(s,"AnchorEffect",function(){return Pc});var l={};n.r(l),n.d(l,"BOTTOM",function(){return Gc}),n.d(l,"TOP",function(){return Yc}),n.d(l,"LEFT",function(){return Xc}),n.d(l,"RIGHT",function(){return Kc}),n.d(l,"axisOrientationMap",function(){return $c});var f={};n.r(f),n.d(f,"LINEAR",function(){return Qc}),n.d(f,"BAND",function(){return Zc}),n.d(f,"TIME",function(){return Jc}),n.d(f,"COLOR",function(){return es}),n.d(f,"ORDINAL",function(){return ts}),n.d(f,"QUANTIZE",function(){return ns}),n.d(f,"QUANTILE",function(){return rs}),n.d(f,"LOG",function(){return is}),n.d(f,"POW",function(){return as}),n.d(f,"IDENTITY",function(){return os}),n.d(f,"SEQUENTIAL",function(){return us}),n.d(f,"THRESHOLD",function(){return cs});var h={};n.r(h),n.d(h,"CONFIG",function(){return ad}),n.d(h,"DATA",function(){return od}),n.d(h,"AXES",function(){return ud}),n.d(h,"LAYERDEFS",function(){return cd}),n.d(h,"WIDTH",function(){return sd}),n.d(h,"HEIGHT",function(){return ld}),n.d(h,"MOUNT",function(){return fd}),n.d(h,"primaryXAxisUpdated",function(){return hd}),n.d(h,"primaryYAxisUpdated",function(){return dd}),n.d(h,"secondaryXAxisUpdated",function(){return pd}),n.d(h,"secondaryYAxisUpdated",function(){return yd}),n.d(h,"TRANSFORM",function(){return gd}),n.d(h,"DATADOMAIN",function(){return vd}),n.d(h,"LAYERSCREATED",function(){return md}),n.d(h,"FIELDS",function(){return bd}),n.d(h,"TIMEDIFFS",function(){return _d}),n.d(h,"LAYERAXISINDEX",function(){return xd});var d={};n.r(d),n.d(d,"SelectBehaviour",function(){return wp});var y={};n.r(y),n.d(y,"SelectionBox",function(){return zp}),n.d(y,"LegendHighlighter",function(){return Up});var g={};n.r(g),n.d(g,"share",function(){return Oy}),n.d(g,"html",function(){return operators_html});var v=function(e,t){return et?1:e>=t?0:NaN},m=function(e){return 1===e.length&&(e=function ascendingComparator(e){return function(t,n){return v(e(t),n)}}(e)),{left:function left(t,n,r,i){for(null==r&&(r=0),null==i&&(i=t.length);r>>1;e(t[a],n)<0?r=a+1:i=a}return r},right:function right(t,n,r,i){for(null==r&&(r=0),null==i&&(i=t.length);r>>1;e(t[a],n)>0?i=a:r=a+1}return r}}};var b=m(v),_=b.right,x=(b.left,_);var w=function(e){return null===e?NaN:+e},k=Array.prototype,C=(k.slice,k.map,function(e,t,n){e=+e,t=+t,n=(i=arguments.length)<2?(t=e,e=0,1):i<3?1:+n;for(var r=-1,i=0|Math.max(0,Math.ceil((t-e)/n)),a=new Array(i);++r0)return[e];if((r=t0)for(e=Math.ceil(e/o),t=Math.floor(t/o),a=new Array(i=Math.ceil(t-e+1));++u=0?(a>=S?10:a>=P?5:a>=A?2:1)*Math.pow(10,i):-Math.pow(10,-i)/(a>=S?10:a>=P?5:a>=A?2:1)}function tickStep(e,t,n){var r=Math.abs(t-e)/Math.max(0,n),i=Math.pow(10,Math.floor(Math.log(r)/Math.LN10)),a=r/i;return a>=S?i*=10:a>=P?i*=5:a>=A&&(i*=2),t=1)return+n(e[r-1],r-1,e);var r,i=(r-1)*t,a=Math.floor(i),o=+n(e[a],a,e);return o+(+n(e[a+1],a+1,e)-o)*(i-a)}};function map_Map(){}function map_map(e,t){var n=new map_Map;if(e instanceof map_Map)e.each(function(e,t){n.set(t,e)});else if(Array.isArray(e)){var r,i=-1,a=e.length;if(null==t)for(;++i=r.length)return null!=e&&n.sort(e),null!=t?t(n):n;for(var u,c,s,l=-1,f=n.length,h=r[i++],d=O(),p=a();++lr.length)return e;var a,o=i[n-1];return null!=t&&n>=r.length?a=e.entries():(a=[],e.each(function(e,t){a.push({key:t,values:_entries(e,n)})})),null!=o?a.sort(function(e,t){return o(e.key,t.key)}):a}(apply(e,0,createMap,setMap),0)},key:function key(e){return r.push(e),n},sortKeys:function sortKeys(e){return i[r.length-1]=e,n},sortValues:function sortValues(t){return e=t,n},rollup:function rollup(e){return t=e,n}}};function createObject(){return{}}function setObject(e,t,n){e[t]=n}function createMap(){return O()}function setMap(e,t,n){e.set(t,n)}function set_Set(){}var F=O.prototype;function set_set(e,t){var n=new set_Set;if(e instanceof set_Set)e.each(function(e){n.add(e)});else if(e){var r=-1,i=e.length;if(null==t)for(;++r1?+t:s,f=a[1]a[1-f]))return n=Math.max(0,getClosestIndexOf(h,s)),c=getClosestIndexOf(h,l),o=s===l?n:Math.max(n,c-1),f&&(u=n,n=d-o,o=d-u),n>o?void 0:r().slice(n,o+1)},n.invert=function(e,t){var n,o,u=+e,c=arguments.length>1?+t:u,s=a[1]a[1-s]))return n=Math.max(0,getClosestIndexOf(l,u,"left")),r()[s?f-n:n]},rescale()}function getClosestIndexOf(e,t,n){for(var r,i,a,o=0,u=e.length-1;ot?0===u?u:"left"===n?u-1:u:u===e.length-1?u:"left"===n?u:u+1:u}var L=function(e,t,n){e.prototype=t.prototype=n,n.constructor=e};function extend(e,t){var n=Object.create(e.prototype);for(var r in t)n[r]=t[r];return n}function Color(){}var R="\\s*([+-]?\\d+)\\s*",B="\\s*([+-]?\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)\\s*",z="\\s*([+-]?\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)%\\s*",H=/^#([0-9a-f]{3})$/,V=/^#([0-9a-f]{6})$/,U=new RegExp("^rgb\\("+[R,R,R]+"\\)$"),W=new RegExp("^rgb\\("+[z,z,z]+"\\)$"),q=new RegExp("^rgba\\("+[R,R,R,B]+"\\)$"),G=new RegExp("^rgba\\("+[z,z,z,B]+"\\)$"),Y=new RegExp("^hsl\\("+[B,z,z]+"\\)$"),X=new RegExp("^hsla\\("+[B,z,z,B]+"\\)$"),K={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};function color_color(e){var t;return e=(e+"").trim().toLowerCase(),(t=H.exec(e))?new Rgb((t=parseInt(t[1],16))>>8&15|t>>4&240,t>>4&15|240&t,(15&t)<<4|15&t,1):(t=V.exec(e))?rgbn(parseInt(t[1],16)):(t=U.exec(e))?new Rgb(t[1],t[2],t[3],1):(t=W.exec(e))?new Rgb(255*t[1]/100,255*t[2]/100,255*t[3]/100,1):(t=q.exec(e))?rgba(t[1],t[2],t[3],t[4]):(t=G.exec(e))?rgba(255*t[1]/100,255*t[2]/100,255*t[3]/100,t[4]):(t=Y.exec(e))?hsla(t[1],t[2]/100,t[3]/100,1):(t=X.exec(e))?hsla(t[1],t[2]/100,t[3]/100,t[4]):K.hasOwnProperty(e)?rgbn(K[e]):"transparent"===e?new Rgb(NaN,NaN,NaN,0):null}function rgbn(e){return new Rgb(e>>16&255,e>>8&255,255&e,1)}function rgba(e,t,n,r){return r<=0&&(e=t=n=NaN),new Rgb(e,t,n,r)}function rgbConvert(e){return e instanceof Color||(e=color_color(e)),e?new Rgb((e=e.rgb()).r,e.g,e.b,e.opacity):new Rgb}function color_rgb(e,t,n,r){return 1===arguments.length?rgbConvert(e):new Rgb(e,t,n,null==r?1:r)}function Rgb(e,t,n,r){this.r=+e,this.g=+t,this.b=+n,this.opacity=+r}function _hex(e){return((e=Math.max(0,Math.min(255,Math.round(e)||0)))<16?"0":"")+e.toString(16)}function hsla(e,t,n,r){return r<=0?e=t=n=NaN:n<=0||n>=1?e=t=NaN:t<=0&&(e=NaN),new Hsl(e,t,n,r)}function hsl(e,t,n,r){return 1===arguments.length?function hslConvert(e){if(e instanceof Hsl)return new Hsl(e.h,e.s,e.l,e.opacity);if(e instanceof Color||(e=color_color(e)),!e)return new Hsl;if(e instanceof Hsl)return e;var t=(e=e.rgb()).r/255,n=e.g/255,r=e.b/255,i=Math.min(t,n,r),a=Math.max(t,n,r),o=NaN,u=a-i,c=(a+i)/2;return u?(o=t===a?(n-r)/u+6*(n0&&c<1?0:o,new Hsl(o,u,c,e.opacity)}(e):new Hsl(e,t,n,null==r?1:r)}function Hsl(e,t,n,r){this.h=+e,this.s=+t,this.l=+n,this.opacity=+r}function hsl2rgb(e,t,n){return 255*(e<60?t+(n-t)*e/60:e<180?n:e<240?t+(n-t)*(240-e)/60:t)}L(Color,color_color,{displayable:function displayable(){return this.rgb().displayable()},hex:function hex(){return this.rgb().hex()},toString:function toString(){return this.rgb()+""}}),L(Rgb,color_rgb,extend(Color,{brighter:function brighter(e){return e=null==e?1/.7:Math.pow(1/.7,e),new Rgb(this.r*e,this.g*e,this.b*e,this.opacity)},darker:function darker(e){return e=null==e?.7:Math.pow(.7,e),new Rgb(this.r*e,this.g*e,this.b*e,this.opacity)},rgb:function rgb(){return this},displayable:function displayable(){return 0<=this.r&&this.r<=255&&0<=this.g&&this.g<=255&&0<=this.b&&this.b<=255&&0<=this.opacity&&this.opacity<=1},hex:function hex(){return"#"+_hex(this.r)+_hex(this.g)+_hex(this.b)},toString:function toString(){var e=this.opacity;return(1===(e=isNaN(e)?1:Math.max(0,Math.min(1,e)))?"rgb(":"rgba(")+Math.max(0,Math.min(255,Math.round(this.r)||0))+", "+Math.max(0,Math.min(255,Math.round(this.g)||0))+", "+Math.max(0,Math.min(255,Math.round(this.b)||0))+(1===e?")":", "+e+")")}})),L(Hsl,hsl,extend(Color,{brighter:function brighter(e){return e=null==e?1/.7:Math.pow(1/.7,e),new Hsl(this.h,this.s,this.l*e,this.opacity)},darker:function darker(e){return e=null==e?.7:Math.pow(.7,e),new Hsl(this.h,this.s,this.l*e,this.opacity)},rgb:function rgb(){var e=this.h%360+360*(this.h<0),t=isNaN(e)||isNaN(this.s)?0:this.s,n=this.l,r=n+(n<.5?n:1-n)*t,i=2*n-r;return new Rgb(hsl2rgb(e>=240?e-240:e+120,i,r),hsl2rgb(e,i,r),hsl2rgb(e<120?e+240:e-120,i,r),this.opacity)},displayable:function displayable(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1}}));var $=Math.PI/180,Q=180/Math.PI,Z=.96422,J=1,ee=.82521,te=4/29,ne=6/29,re=3*ne*ne,ie=ne*ne*ne;function labConvert(e){if(e instanceof Lab)return new Lab(e.l,e.a,e.b,e.opacity);if(e instanceof Hcl){if(isNaN(e.h))return new Lab(e.l,0,0,e.opacity);var t=e.h*$;return new Lab(e.l,Math.cos(t)*e.c,Math.sin(t)*e.c,e.opacity)}e instanceof Rgb||(e=rgbConvert(e));var n,r,i=rgb2lrgb(e.r),a=rgb2lrgb(e.g),o=rgb2lrgb(e.b),u=xyz2lab((.2225045*i+.7168786*a+.0606169*o)/J);return i===a&&a===o?n=r=u:(n=xyz2lab((.4360747*i+.3850649*a+.1430804*o)/Z),r=xyz2lab((.0139322*i+.0971045*a+.7141733*o)/ee)),new Lab(116*u-16,500*(n-u),200*(u-r),e.opacity)}function lab(e,t,n,r){return 1===arguments.length?labConvert(e):new Lab(e,t,n,null==r?1:r)}function Lab(e,t,n,r){this.l=+e,this.a=+t,this.b=+n,this.opacity=+r}function xyz2lab(e){return e>ie?Math.pow(e,1/3):e/re+te}function lab2xyz(e){return e>ne?e*e*e:re*(e-te)}function lrgb2rgb(e){return 255*(e<=.0031308?12.92*e:1.055*Math.pow(e,1/2.4)-.055)}function rgb2lrgb(e){return(e/=255)<=.04045?e/12.92:Math.pow((e+.055)/1.055,2.4)}function hclConvert(e){if(e instanceof Hcl)return new Hcl(e.h,e.c,e.l,e.opacity);if(e instanceof Lab||(e=labConvert(e)),0===e.a&&0===e.b)return new Hcl(NaN,0,e.l,e.opacity);var t=Math.atan2(e.b,e.a)*Q;return new Hcl(t<0?t+360:t,Math.sqrt(e.a*e.a+e.b*e.b),e.l,e.opacity)}function hcl(e,t,n,r){return 1===arguments.length?hclConvert(e):new Hcl(e,t,n,null==r?1:r)}function Hcl(e,t,n,r){this.h=+e,this.c=+t,this.l=+n,this.opacity=+r}L(Lab,lab,extend(Color,{brighter:function brighter(e){return new Lab(this.l+18*(null==e?1:e),this.a,this.b,this.opacity)},darker:function darker(e){return new Lab(this.l-18*(null==e?1:e),this.a,this.b,this.opacity)},rgb:function rgb(){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 new Rgb(lrgb2rgb(3.1338561*(t=Z*lab2xyz(t))-1.6168667*(e=J*lab2xyz(e))-.4906146*(n=ee*lab2xyz(n))),lrgb2rgb(-.9787684*t+1.9161415*e+.033454*n),lrgb2rgb(.0719453*t-.2289914*e+1.4052427*n),this.opacity)}})),L(Hcl,hcl,extend(Color,{brighter:function brighter(e){return new Hcl(this.h,this.c,this.l+18*(null==e?1:e),this.opacity)},darker:function darker(e){return new Hcl(this.h,this.c,this.l-18*(null==e?1:e),this.opacity)},rgb:function rgb(){return labConvert(this).rgb()}}));var ae=-.14861,oe=1.78277,ue=-.29227,ce=-.90649,se=1.97294,le=se*ce,fe=se*oe,he=oe*ue-ce*ae;function cubehelix_cubehelix(e,t,n,r){return 1===arguments.length?function cubehelixConvert(e){if(e instanceof Cubehelix)return new Cubehelix(e.h,e.s,e.l,e.opacity);e instanceof Rgb||(e=rgbConvert(e));var t=e.r/255,n=e.g/255,r=e.b/255,i=(he*r+le*t-fe*n)/(he+le-fe),a=r-i,o=(se*(n-i)-ue*a)/ce,u=Math.sqrt(o*o+a*a)/(se*i*(1-i)),c=u?Math.atan2(o,a)*Q-120:NaN;return new Cubehelix(c<0?c+360:c,u,i,e.opacity)}(e):new Cubehelix(e,t,n,null==r?1:r)}function Cubehelix(e,t,n,r){this.h=+e,this.s=+t,this.l=+n,this.opacity=+r}function basis(e,t,n,r,i){var a=e*e,o=a*e;return((1-3*e+3*a-o)*t+(4-6*a+3*o)*n+(1+3*e+3*a-3*o)*r+o*i)/6}L(Cubehelix,cubehelix_cubehelix,extend(Color,{brighter:function brighter(e){return e=null==e?1/.7:Math.pow(1/.7,e),new Cubehelix(this.h,this.s,this.l*e,this.opacity)},darker:function darker(e){return e=null==e?.7:Math.pow(.7,e),new Cubehelix(this.h,this.s,this.l*e,this.opacity)},rgb:function rgb(){var e=isNaN(this.h)?0:(this.h+120)*$,t=+this.l,n=isNaN(this.s)?0:this.s*t*(1-t),r=Math.cos(e),i=Math.sin(e);return new Rgb(255*(t+n*(ae*r+oe*i)),255*(t+n*(ue*r+ce*i)),255*(t+n*(se*r)),this.opacity)}}));var de=function(e){return function(){return e}};function linear(e,t){return function(n){return e+n*t}}function color_hue(e,t){var n=t-e;return n?linear(e,n>180||n<-180?n-360*Math.round(n/360):n):de(isNaN(e)?t:e)}function gamma(e){return 1==(e=+e)?nogamma:function(t,n){return n-t?function exponential(e,t,n){return e=Math.pow(e,n),t=Math.pow(t,n)-e,n=1/n,function(r){return Math.pow(e+r*t,n)}}(t,n,e):de(isNaN(t)?n:t)}}function nogamma(e,t){var n=t-e;return n?linear(e,n):de(isNaN(e)?t:e)}var pe=function rgbGamma(e){var t=gamma(e);function rgb(e,n){var r=t((e=color_rgb(e)).r,(n=color_rgb(n)).r),i=t(e.g,n.g),a=t(e.b,n.b),o=nogamma(e.opacity,n.opacity);return function(t){return e.r=r(t),e.g=i(t),e.b=a(t),e.opacity=o(t),e+""}}return rgb.gamma=rgbGamma,rgb}(1);function rgbSpline(e){return function(t){var n,r,i=t.length,a=new Array(i),o=new Array(i),u=new Array(i);for(n=0;n=1?(n=1,t-1):Math.floor(n*t),i=e[r],a=e[r+1],o=r>0?e[r-1]:2*i-a,u=ra&&(i=t.slice(a,i),u[o]?u[o]+=i:u[++o]=i),(n=n[0])===(r=r[0])?u[o]?u[o]+=r:u[++o]=r:(u[++o]=null,c.push({i:o,x:ge(n,r)})),a=be.lastIndex;return a180?t+=360:t-e>180&&(e+=360),i.push({i:n.push(pop(n)+"rotate(",null,r)-2,x:ge(e,t)})):t&&n.push(pop(n)+"rotate("+t+r)}(i.rotate,a.rotate,o,u),function skewX(e,t,n,i){e!==t?i.push({i:n.push(pop(n)+"skewX(",null,r)-2,x:ge(e,t)}):t&&n.push(pop(n)+"skewX("+t+r)}(i.skewX,a.skewX,o,u),function scale(e,t,n,r,i,a){if(e!==n||t!==r){var o=i.push(pop(i)+"scale(",null,",",null,")");a.push({i:o-4,x:ge(e,n)},{i:o-2,x:ge(t,r)})}else 1===n&&1===r||i.push(pop(i)+"scale("+n+","+r+")")}(i.scaleX,i.scaleY,a.scaleX,a.scaleY,o,u),i=a=null,function(e){for(var t,n=-1,r=u.length;++n2?polymap:bimap,r=i=null,scale}function scale(t){return(r||(r=n(a,o,c?function deinterpolateClamp(e){return function(t,n){var r=e(t=+t,n=+n);return function(e){return e<=t?0:e>=n?1:r(e)}}}(e):e,u)))(+t)}return scale.invert=function(e){return(i||(i=n(o,a,deinterpolateLinear,c?function reinterpolateClamp(e){return function(t,n){var r=e(t=+t,n=+n);return function(e){return e<=0?t:e>=1?n:r(e)}}}(t):t)))(+e)},scale.domain=function(e){return arguments.length?(a=j.call(e,De),rescale()):a.slice()},scale.range=function(e){return arguments.length?(o=I.call(e),rescale()):o.slice()},scale.rangeRound=function(e){return o=I.call(e),u=Ae,rescale()},scale.clamp=function(e){return arguments.length?(c=!!e,rescale()):c},scale.interpolate=function(e){return arguments.length?(u=e,rescale()):u},rescale()}var Re=function(e,t){if((n=(e=t?e.toExponential(t-1):e.toExponential()).indexOf("e"))<0)return null;var n,r=e.slice(0,n);return[r.length>1?r[0]+r.slice(2):r,+e.slice(n+1)]},Be=function(e){return(e=Re(Math.abs(e)))?e[1]:NaN},ze=/^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;function formatSpecifier(e){return new FormatSpecifier(e)}function FormatSpecifier(e){if(!(t=ze.exec(e)))throw new Error("invalid format: "+e);var t;this.fill=t[1]||" ",this.align=t[2]||">",this.sign=t[3]||"-",this.symbol=t[4]||"",this.zero=!!t[5],this.width=t[6]&&+t[6],this.comma=!!t[7],this.precision=t[8]&&+t[8].slice(1),this.trim=!!t[9],this.type=t[10]||""}formatSpecifier.prototype=FormatSpecifier.prototype,FormatSpecifier.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.trim?"~":"")+this.type};var He,Ve,Ue,We,qe=function(e){e:for(var t,n=e.length,r=1,i=-1;r0){if(!+e[r])break e;i=0}}return i>0?e.slice(0,i)+e.slice(t+1):e},Ge=function(e,t){var n=Re(e,t);if(!n)return e+"";var r=n[0],i=n[1];return i<0?"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")},Ye={"%":function _(e,t){return(100*e).toFixed(t)},b:function b(e){return Math.round(e).toString(2)},c:function c(e){return e+""},d:function d(e){return Math.round(e).toString(10)},e:function e(t,n){return t.toExponential(n)},f:function f(e,t){return e.toFixed(t)},g:function g(e,t){return e.toPrecision(t)},o:function o(e){return Math.round(e).toString(8)},p:function p(e,t){return Ge(100*e,t)},r:Ge,s:function(e,t){var n=Re(e,t);if(!n)return e+"";var r=n[0],i=n[1],a=i-(He=3*Math.max(-8,Math.min(8,Math.floor(i/3))))+1,o=r.length;return a===o?r:a>o?r+new Array(a-o+1).join("0"):a>0?r.slice(0,a)+"."+r.slice(a):"0."+new Array(1-a).join("0")+Re(e,Math.max(0,t+a-1))[0]},X:function X(e){return Math.round(e).toString(16).toUpperCase()},x:function x(e){return Math.round(e).toString(16)}},Xe=function(e){return e},Ke=["y","z","a","f","p","n","µ","m","","k","M","G","T","P","E","Z","Y"],$e=function(e){var t=e.grouping&&e.thousands?function(e,t){return function(n,r){for(var i=n.length,a=[],o=0,u=e[0],c=0;i>0&&u>0&&(c+u+1>r&&(u=Math.max(1,r-c)),a.push(n.substring(i-=u,i+u)),!((c+=u+1)>r));)u=e[o=(o+1)%e.length];return a.reverse().join(t)}}(e.grouping,e.thousands):Xe,n=e.currency,r=e.decimal,i=e.numerals?function(e){return function(t){return t.replace(/[0-9]/g,function(t){return e[+t]})}}(e.numerals):Xe,a=e.percent||"%";function newFormat(e){var o=(e=formatSpecifier(e)).fill,u=e.align,c=e.sign,s=e.symbol,l=e.zero,f=e.width,h=e.comma,d=e.precision,p=e.trim,y=e.type;"n"===y?(h=!0,y="g"):Ye[y]||(null==d&&(d=12),p=!0,y="g"),(l||"0"===o&&"="===u)&&(l=!0,o="0",u="=");var g="$"===s?n[0]:"#"===s&&/[boxX]/.test(y)?"0"+y.toLowerCase():"",v="$"===s?n[1]:/[%p]/.test(y)?a:"",m=Ye[y],b=/[defgprs%]/.test(y);function format(e){var n,a,s,_=g,x=v;if("c"===y)x=m(e)+x,e="";else{var w=(e=+e)<0;if(e=m(Math.abs(e),d),p&&(e=qe(e)),w&&0==+e&&(w=!1),_=(w?"("===c?c:"-":"-"===c||"("===c?"":c)+_,x=("s"===y?Ke[8+He/3]:"")+x+(w&&"("===c?")":""),b)for(n=-1,a=e.length;++n(s=e.charCodeAt(n))||s>57){x=(46===s?r+e.slice(n+1):e.slice(n))+x,e=e.slice(0,n);break}}h&&!l&&(e=t(e,1/0));var k=_.length+e.length+x.length,C=k>1)+_+e+x+C.slice(k);break;default:e=C+_+e+x}return i(e)}return d=null==d?6:/[gprs]/.test(y)?Math.max(1,Math.min(21,d)):Math.max(0,Math.min(20,d)),format.toString=function(){return e+""},format}return{format:newFormat,formatPrefix:function formatPrefix(e,t){var n=newFormat(((e=formatSpecifier(e)).type="f",e)),r=3*Math.max(-8,Math.min(8,Math.floor(Be(t)/3))),i=Math.pow(10,-r),a=Ke[8+r/3];return function(e){return n(i*e)+a}}}};!function defaultLocale(e){return Ve=$e(e),Ue=Ve.format,We=Ve.formatPrefix,Ve}({decimal:".",thousands:",",grouping:[3],currency:["$",""]});var Qe=function(e,t,n){var r,i=e[0],a=e[e.length-1],o=tickStep(i,a,null==t?10:t);switch((n=formatSpecifier(null==n?",f":n)).type){case"s":var u=Math.max(Math.abs(i),Math.abs(a));return null!=n.precision||isNaN(r=function(e,t){return Math.max(0,3*Math.max(-8,Math.min(8,Math.floor(Be(t)/3)))-Be(Math.abs(e)))}(o,u))||(n.precision=r),We(n,u);case"":case"e":case"g":case"p":case"r":null!=n.precision||isNaN(r=function(e,t){return e=Math.abs(e),t=Math.abs(t)-e,Math.max(0,Be(t)-Be(e))+1}(o,Math.max(Math.abs(i),Math.abs(a))))||(n.precision=r-("e"===n.type));break;case"f":case"%":null!=n.precision||isNaN(r=function(e){return Math.max(0,-Be(Math.abs(e)))}(o))||(n.precision=r-2*("%"===n.type))}return Ue(n)};function linearish(e){var t=e.domain;return e.ticks=function(e){var n=t();return E(n[0],n[n.length-1],null==e?10:e)},e.tickFormat=function(e,n){return Qe(t(),e,n)},e.nice=function(n){null==n&&(n=10);var r,i=t(),a=0,o=i.length-1,u=i[a],c=i[o];return c0?r=tickIncrement(u=Math.floor(u/r)*r,c=Math.ceil(c/r)*r,n):r<0&&(r=tickIncrement(u=Math.ceil(u*r)/r,c=Math.floor(c*r)/r,n)),r>0?(i[a]=Math.floor(u/r)*r,i[o]=Math.ceil(c/r)*r,t(i)):r<0&&(i[a]=Math.ceil(u*r)/r,i[o]=Math.floor(c*r)/r,t(i)),e},e}function linear_linear(){var e=continuous(deinterpolateLinear,ge);return e.copy=function(){return copy(e,linear_linear())},linearish(e)}function identity_identity(){var e=[0,1];function scale(e){return+e}return scale.invert=scale,scale.domain=scale.range=function(t){return arguments.length?(e=j.call(t,De),scale):e.slice()},scale.copy=function(){return identity_identity().domain(e)},linearish(scale)}var Ze=function(e,t){var n,r=0,i=(e=e.slice()).length-1,a=e[r],o=e[i];return o0){for(;hc)break;y.push(f)}}else for(;h=1;--l)if(!((f=s*l)c)break;y.push(f)}}else y=E(h,d,Math.min(d-h,p)).map(i);return a?y.reverse():y},e.tickFormat=function(t,a){if(null==a&&(a=10===n?".0e":","),"function"!=typeof a&&(a=Ue(a)),t===1/0)return a;null==t&&(t=10);var o=Math.max(1,n*t/e.ticks().length);return function(e){var t=e/i(Math.round(r(e)));return t*n0?n[i-1]:e[0],i=n?[r[n-1],t]:[r[o-1],r[o]]},scale.copy=function(){return quantize_quantize().domain([e,t]).range(i)},linearish(scale)}function threshold_threshold(){var e=[.5],t=[0,1],n=1;function scale(r){if(r<=r)return t[x(e,r,0,n)]}return scale.domain=function(r){return arguments.length?(e=I.call(r),n=Math.min(e.length,t.length-1),scale):e.slice()},scale.range=function(r){return arguments.length?(t=I.call(r),n=Math.min(e.length,t.length-1),scale):t.slice()},scale.invertExtent=function(n){var r=t.indexOf(n);return[e[r-1],e[r]]},scale.copy=function(){return threshold_threshold().domain(e).range(t)},scale}var Je=new Date,et=new Date;function newInterval(e,t,n,r){function interval(t){return e(t=new Date(+t)),t}return interval.floor=interval,interval.ceil=function(n){return e(n=new Date(n-1)),t(n,1),e(n),n},interval.round=function(e){var t=interval(e),n=interval.ceil(e);return e-t0))return o;do{o.push(a=new Date(+n)),t(n,i),e(n)}while(a=t)for(;e(t),!n(t);)t.setTime(t-1)},function(e,r){if(e>=e)if(r<0)for(;++r<=0;)for(;t(e,-1),!n(e););else for(;--r>=0;)for(;t(e,1),!n(e););})},n&&(interval.count=function(t,r){return Je.setTime(+t),et.setTime(+r),e(Je),e(et),Math.floor(n(Je,et))},interval.every=function(e){return e=Math.floor(e),isFinite(e)&&e>0?e>1?interval.filter(r?function(t){return r(t)%e==0}:function(t){return interval.count(0,t)%e==0}):interval:null}),interval}var tt=newInterval(function(){},function(e,t){e.setTime(+e+t)},function(e,t){return t-e});tt.every=function(e){return e=Math.floor(e),isFinite(e)&&e>0?e>1?newInterval(function(t){t.setTime(Math.floor(t/e)*e)},function(t,n){t.setTime(+t+n*e)},function(t,n){return(n-t)/e}):tt:null};var nt=tt,rt=(tt.range,6e4),it=6048e5,at=newInterval(function(e){e.setTime(1e3*Math.floor(e/1e3))},function(e,t){e.setTime(+e+1e3*t)},function(e,t){return(t-e)/1e3},function(e){return e.getUTCSeconds()}),ot=at,ut=(at.range,newInterval(function(e){e.setTime(Math.floor(e/rt)*rt)},function(e,t){e.setTime(+e+t*rt)},function(e,t){return(t-e)/rt},function(e){return e.getMinutes()})),ct=ut,st=(ut.range,newInterval(function(e){var t=e.getTimezoneOffset()*rt%36e5;t<0&&(t+=36e5),e.setTime(36e5*Math.floor((+e-t)/36e5)+t)},function(e,t){e.setTime(+e+36e5*t)},function(e,t){return(t-e)/36e5},function(e){return e.getHours()})),lt=st,ft=(st.range,newInterval(function(e){e.setHours(0,0,0,0)},function(e,t){e.setDate(e.getDate()+t)},function(e,t){return(t-e-(t.getTimezoneOffset()-e.getTimezoneOffset())*rt)/864e5},function(e){return e.getDate()-1})),ht=ft;ft.range;function weekday(e){return newInterval(function(t){t.setDate(t.getDate()-(t.getDay()+7-e)%7),t.setHours(0,0,0,0)},function(e,t){e.setDate(e.getDate()+7*t)},function(e,t){return(t-e-(t.getTimezoneOffset()-e.getTimezoneOffset())*rt)/it})}var dt=weekday(0),pt=weekday(1),yt=weekday(2),gt=weekday(3),vt=weekday(4),mt=weekday(5),bt=weekday(6),_t=(dt.range,pt.range,yt.range,gt.range,vt.range,mt.range,bt.range,newInterval(function(e){e.setDate(1),e.setHours(0,0,0,0)},function(e,t){e.setMonth(e.getMonth()+t)},function(e,t){return t.getMonth()-e.getMonth()+12*(t.getFullYear()-e.getFullYear())},function(e){return e.getMonth()})),xt=_t,wt=(_t.range,newInterval(function(e){e.setMonth(0,1),e.setHours(0,0,0,0)},function(e,t){e.setFullYear(e.getFullYear()+t)},function(e,t){return t.getFullYear()-e.getFullYear()},function(e){return e.getFullYear()}));wt.every=function(e){return isFinite(e=Math.floor(e))&&e>0?newInterval(function(t){t.setFullYear(Math.floor(t.getFullYear()/e)*e),t.setMonth(0,1),t.setHours(0,0,0,0)},function(t,n){t.setFullYear(t.getFullYear()+n*e)}):null};var kt=wt,Ct=(wt.range,newInterval(function(e){e.setUTCSeconds(0,0)},function(e,t){e.setTime(+e+t*rt)},function(e,t){return(t-e)/rt},function(e){return e.getUTCMinutes()})),St=(Ct.range,newInterval(function(e){e.setUTCMinutes(0,0,0)},function(e,t){e.setTime(+e+36e5*t)},function(e,t){return(t-e)/36e5},function(e){return e.getUTCHours()})),Pt=(St.range,newInterval(function(e){e.setUTCHours(0,0,0,0)},function(e,t){e.setUTCDate(e.getUTCDate()+t)},function(e,t){return(t-e)/864e5},function(e){return e.getUTCDate()-1})),At=Pt;Pt.range;function utcWeekday(e){return newInterval(function(t){t.setUTCDate(t.getUTCDate()-(t.getUTCDay()+7-e)%7),t.setUTCHours(0,0,0,0)},function(e,t){e.setUTCDate(e.getUTCDate()+7*t)},function(e,t){return(t-e)/it})}var Et=utcWeekday(0),Mt=utcWeekday(1),Ot=utcWeekday(2),Tt=utcWeekday(3),Ft=utcWeekday(4),Nt=utcWeekday(5),jt=utcWeekday(6),It=(Et.range,Mt.range,Ot.range,Tt.range,Ft.range,Nt.range,jt.range,newInterval(function(e){e.setUTCDate(1),e.setUTCHours(0,0,0,0)},function(e,t){e.setUTCMonth(e.getUTCMonth()+t)},function(e,t){return t.getUTCMonth()-e.getUTCMonth()+12*(t.getUTCFullYear()-e.getUTCFullYear())},function(e){return e.getUTCMonth()})),Dt=(It.range,newInterval(function(e){e.setUTCMonth(0,1),e.setUTCHours(0,0,0,0)},function(e,t){e.setUTCFullYear(e.getUTCFullYear()+t)},function(e,t){return t.getUTCFullYear()-e.getUTCFullYear()},function(e){return e.getUTCFullYear()}));Dt.every=function(e){return isFinite(e=Math.floor(e))&&e>0?newInterval(function(t){t.setUTCFullYear(Math.floor(t.getUTCFullYear()/e)*e),t.setUTCMonth(0,1),t.setUTCHours(0,0,0,0)},function(t,n){t.setUTCFullYear(t.getUTCFullYear()+n*e)}):null};var Lt=Dt;Dt.range;function localDate(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 utcDate(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 newYear(e){return{y:e,m:0,d:1,H:0,M:0,S:0,L:0}}var Rt,Bt,zt,Ht,Vt={"-":"",_:" ",0:"0"},Ut=/^\s*\d+/,Wt=/^%/,qt=/[\\^$*+?|[\]().{}]/g;function locale_pad(e,t,n){var r=e<0?"-":"",i=(r?-e:e)+"",a=i.length;return r+(a68?1900:2e3),n+r[0].length):-1}function parseZone(e,t,n){var r=/^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(t.slice(n,n+6));return r?(e.Z=r[1]?0:-(r[2]+(r[3]||"00")),n+r[0].length):-1}function parseMonthNumber(e,t,n){var r=Ut.exec(t.slice(n,n+2));return r?(e.m=r[0]-1,n+r[0].length):-1}function parseDayOfMonth(e,t,n){var r=Ut.exec(t.slice(n,n+2));return r?(e.d=+r[0],n+r[0].length):-1}function parseDayOfYear(e,t,n){var r=Ut.exec(t.slice(n,n+3));return r?(e.m=0,e.d=+r[0],n+r[0].length):-1}function parseHour24(e,t,n){var r=Ut.exec(t.slice(n,n+2));return r?(e.H=+r[0],n+r[0].length):-1}function parseMinutes(e,t,n){var r=Ut.exec(t.slice(n,n+2));return r?(e.M=+r[0],n+r[0].length):-1}function parseSeconds(e,t,n){var r=Ut.exec(t.slice(n,n+2));return r?(e.S=+r[0],n+r[0].length):-1}function parseMilliseconds(e,t,n){var r=Ut.exec(t.slice(n,n+3));return r?(e.L=+r[0],n+r[0].length):-1}function parseMicroseconds(e,t,n){var r=Ut.exec(t.slice(n,n+6));return r?(e.L=Math.floor(r[0]/1e3),n+r[0].length):-1}function parseLiteralPercent(e,t,n){var r=Wt.exec(t.slice(n,n+1));return r?n+r[0].length:-1}function parseUnixTimestamp(e,t,n){var r=Ut.exec(t.slice(n));return r?(e.Q=+r[0],n+r[0].length):-1}function parseUnixTimestampSeconds(e,t,n){var r=Ut.exec(t.slice(n));return r?(e.Q=1e3*+r[0],n+r[0].length):-1}function formatDayOfMonth(e,t){return locale_pad(e.getDate(),t,2)}function formatHour24(e,t){return locale_pad(e.getHours(),t,2)}function formatHour12(e,t){return locale_pad(e.getHours()%12||12,t,2)}function formatDayOfYear(e,t){return locale_pad(1+ht.count(kt(e),e),t,3)}function formatMilliseconds(e,t){return locale_pad(e.getMilliseconds(),t,3)}function formatMicroseconds(e,t){return formatMilliseconds(e,t)+"000"}function formatMonthNumber(e,t){return locale_pad(e.getMonth()+1,t,2)}function formatMinutes(e,t){return locale_pad(e.getMinutes(),t,2)}function formatSeconds(e,t){return locale_pad(e.getSeconds(),t,2)}function formatWeekdayNumberMonday(e){var t=e.getDay();return 0===t?7:t}function formatWeekNumberSunday(e,t){return locale_pad(dt.count(kt(e),e),t,2)}function formatWeekNumberISO(e,t){var n=e.getDay();return e=n>=4||0===n?vt(e):vt.ceil(e),locale_pad(vt.count(kt(e),e)+(4===kt(e).getDay()),t,2)}function formatWeekdayNumberSunday(e){return e.getDay()}function formatWeekNumberMonday(e,t){return locale_pad(pt.count(kt(e),e),t,2)}function locale_formatYear(e,t){return locale_pad(e.getFullYear()%100,t,2)}function formatFullYear(e,t){return locale_pad(e.getFullYear()%1e4,t,4)}function formatZone(e){var t=e.getTimezoneOffset();return(t>0?"-":(t*=-1,"+"))+locale_pad(t/60|0,"0",2)+locale_pad(t%60,"0",2)}function formatUTCDayOfMonth(e,t){return locale_pad(e.getUTCDate(),t,2)}function formatUTCHour24(e,t){return locale_pad(e.getUTCHours(),t,2)}function formatUTCHour12(e,t){return locale_pad(e.getUTCHours()%12||12,t,2)}function formatUTCDayOfYear(e,t){return locale_pad(1+At.count(Lt(e),e),t,3)}function formatUTCMilliseconds(e,t){return locale_pad(e.getUTCMilliseconds(),t,3)}function formatUTCMicroseconds(e,t){return formatUTCMilliseconds(e,t)+"000"}function formatUTCMonthNumber(e,t){return locale_pad(e.getUTCMonth()+1,t,2)}function formatUTCMinutes(e,t){return locale_pad(e.getUTCMinutes(),t,2)}function formatUTCSeconds(e,t){return locale_pad(e.getUTCSeconds(),t,2)}function formatUTCWeekdayNumberMonday(e){var t=e.getUTCDay();return 0===t?7:t}function formatUTCWeekNumberSunday(e,t){return locale_pad(Et.count(Lt(e),e),t,2)}function formatUTCWeekNumberISO(e,t){var n=e.getUTCDay();return e=n>=4||0===n?Ft(e):Ft.ceil(e),locale_pad(Ft.count(Lt(e),e)+(4===Lt(e).getUTCDay()),t,2)}function formatUTCWeekdayNumberSunday(e){return e.getUTCDay()}function formatUTCWeekNumberMonday(e,t){return locale_pad(Mt.count(Lt(e),e),t,2)}function formatUTCYear(e,t){return locale_pad(e.getUTCFullYear()%100,t,2)}function formatUTCFullYear(e,t){return locale_pad(e.getUTCFullYear()%1e4,t,4)}function formatUTCZone(){return"+0000"}function formatLiteralPercent(){return"%"}function formatUnixTimestamp(e){return+e}function formatUnixTimestampSeconds(e){return Math.floor(+e/1e3)}!function defaultLocale_defaultLocale(e){return Rt=function formatLocale(e){var t=e.dateTime,n=e.date,r=e.time,i=e.periods,a=e.days,o=e.shortDays,u=e.months,c=e.shortMonths,s=formatRe(i),l=formatLookup(i),f=formatRe(a),h=formatLookup(a),d=formatRe(o),p=formatLookup(o),y=formatRe(u),g=formatLookup(u),v=formatRe(c),m=formatLookup(c),b={a:function formatShortWeekday(e){return o[e.getDay()]},A:function formatWeekday(e){return a[e.getDay()]},b:function formatShortMonth(e){return c[e.getMonth()]},B:function formatMonth(e){return u[e.getMonth()]},c:null,d:formatDayOfMonth,e:formatDayOfMonth,f:formatMicroseconds,H:formatHour24,I:formatHour12,j:formatDayOfYear,L:formatMilliseconds,m:formatMonthNumber,M:formatMinutes,p:function formatPeriod(e){return i[+(e.getHours()>=12)]},Q:formatUnixTimestamp,s:formatUnixTimestampSeconds,S:formatSeconds,u:formatWeekdayNumberMonday,U:formatWeekNumberSunday,V:formatWeekNumberISO,w:formatWeekdayNumberSunday,W:formatWeekNumberMonday,x:null,X:null,y:locale_formatYear,Y:formatFullYear,Z:formatZone,"%":formatLiteralPercent},_={a:function formatUTCShortWeekday(e){return o[e.getUTCDay()]},A:function formatUTCWeekday(e){return a[e.getUTCDay()]},b:function formatUTCShortMonth(e){return c[e.getUTCMonth()]},B:function formatUTCMonth(e){return u[e.getUTCMonth()]},c:null,d:formatUTCDayOfMonth,e:formatUTCDayOfMonth,f:formatUTCMicroseconds,H:formatUTCHour24,I:formatUTCHour12,j:formatUTCDayOfYear,L:formatUTCMilliseconds,m:formatUTCMonthNumber,M:formatUTCMinutes,p:function formatUTCPeriod(e){return i[+(e.getUTCHours()>=12)]},Q:formatUnixTimestamp,s:formatUnixTimestampSeconds,S:formatUTCSeconds,u:formatUTCWeekdayNumberMonday,U:formatUTCWeekNumberSunday,V:formatUTCWeekNumberISO,w:formatUTCWeekdayNumberSunday,W:formatUTCWeekNumberMonday,x:null,X:null,y:formatUTCYear,Y:formatUTCFullYear,Z:formatUTCZone,"%":formatLiteralPercent},x={a:function parseShortWeekday(e,t,n){var r=d.exec(t.slice(n));return r?(e.w=p[r[0].toLowerCase()],n+r[0].length):-1},A:function parseWeekday(e,t,n){var r=f.exec(t.slice(n));return r?(e.w=h[r[0].toLowerCase()],n+r[0].length):-1},b:function parseShortMonth(e,t,n){var r=v.exec(t.slice(n));return r?(e.m=m[r[0].toLowerCase()],n+r[0].length):-1},B:function parseMonth(e,t,n){var r=y.exec(t.slice(n));return r?(e.m=g[r[0].toLowerCase()],n+r[0].length):-1},c:function parseLocaleDateTime(e,n,r){return parseSpecifier(e,t,n,r)},d:parseDayOfMonth,e:parseDayOfMonth,f:parseMicroseconds,H:parseHour24,I:parseHour24,j:parseDayOfYear,L:parseMilliseconds,m:parseMonthNumber,M:parseMinutes,p:function parsePeriod(e,t,n){var r=s.exec(t.slice(n));return r?(e.p=l[r[0].toLowerCase()],n+r[0].length):-1},Q:parseUnixTimestamp,s:parseUnixTimestampSeconds,S:parseSeconds,u:parseWeekdayNumberMonday,U:parseWeekNumberSunday,V:parseWeekNumberISO,w:parseWeekdayNumberSunday,W:parseWeekNumberMonday,x:function parseLocaleDate(e,t,r){return parseSpecifier(e,n,t,r)},X:function parseLocaleTime(e,t,n){return parseSpecifier(e,r,t,n)},y:parseYear,Y:parseFullYear,Z:parseZone,"%":parseLiteralPercent};function newFormat(e,t){return function(n){var r,i,a,o=[],u=-1,c=0,s=e.length;for(n instanceof Date||(n=new Date(+n));++u53)return null;"w"in a||(a.w=1),"Z"in a?(r=(i=(r=utcDate(newYear(a.y))).getUTCDay())>4||0===i?Mt.ceil(r):Mt(r),r=At.offset(r,7*(a.V-1)),a.y=r.getUTCFullYear(),a.m=r.getUTCMonth(),a.d=r.getUTCDate()+(a.w+6)%7):(r=(i=(r=t(newYear(a.y))).getDay())>4||0===i?pt.ceil(r):pt(r),r=ht.offset(r,7*(a.V-1)),a.y=r.getFullYear(),a.m=r.getMonth(),a.d=r.getDate()+(a.w+6)%7)}else("W"in a||"U"in a)&&("w"in a||(a.w="u"in a?a.u%7:"W"in a?1:0),i="Z"in a?utcDate(newYear(a.y)).getUTCDay():t(newYear(a.y)).getDay(),a.m=0,a.d="W"in a?(a.w+6)%7+7*a.W-(i+5)%7:a.w+7*a.U-(i+6)%7);return"Z"in a?(a.H+=a.Z/100|0,a.M+=a.Z%100,utcDate(a)):t(a)}}function parseSpecifier(e,t,n,r){for(var i,a,o=0,u=t.length,c=n.length;o=c)return-1;if(37===(i=t.charCodeAt(o++))){if(i=t.charAt(o++),!(a=x[i in Vt?t.charAt(o++):i])||(r=a(e,n,r))<0)return-1}else if(i!=n.charCodeAt(r++))return-1}return r}return b.x=newFormat(n,b),b.X=newFormat(r,b),b.c=newFormat(t,b),_.x=newFormat(n,_),_.X=newFormat(r,_),_.c=newFormat(t,_),{format:function format(e){var t=newFormat(e+="",b);return t.toString=function(){return e},t},parse:function parse(e){var t=newParse(e+="",localDate);return t.toString=function(){return e},t},utcFormat:function utcFormat(e){var t=newFormat(e+="",_);return t.toString=function(){return e},t},utcParse:function utcParse(e){var t=newParse(e,utcDate);return t.toString=function(){return e},t}}}(e),Bt=Rt.format,Rt.parse,zt=Rt.utcFormat,Ht=Rt.utcParse,Rt}({dateTime:"%x, %X",date:"%-m/%-d/%Y",time:"%-I:%M:%S %p",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"]});Date.prototype.toISOString||zt("%Y-%m-%dT%H:%M:%S.%LZ");+new Date("2000-01-01T00:00:00.000Z")||Ht("%Y-%m-%dT%H:%M:%S.%LZ");var Gt=1e3,Yt=60*Gt,Xt=60*Yt,Kt=24*Xt,$t=7*Kt,Qt=30*Kt,Zt=365*Kt;function time_date(e){return new Date(e)}function time_number(e){return e instanceof Date?+e:+new Date(+e)}function calendar(e,t,n,r,i,a,o,u,c){var s=continuous(deinterpolateLinear,ge),l=s.invert,f=s.domain,h=c(".%L"),d=c(":%S"),p=c("%I:%M"),y=c("%I %p"),g=c("%a %d"),v=c("%b %d"),b=c("%B"),_=c("%Y"),x=[[o,1,Gt],[o,5,5*Gt],[o,15,15*Gt],[o,30,30*Gt],[a,1,Yt],[a,5,5*Yt],[a,15,15*Yt],[a,30,30*Yt],[i,1,Xt],[i,3,3*Xt],[i,6,6*Xt],[i,12,12*Xt],[r,1,Kt],[r,2,2*Kt],[n,1,$t],[t,1,Qt],[t,3,3*Qt],[e,1,Zt]];function tickFormat(u){return(o(u)1)&&(e-=Math.floor(e));var t=Math.abs(e-.5);return $n.h=360*e-100,$n.s=1.5-1.5*t,$n.l=.8-.9*t,$n+""};color_rgb(),Math.PI,Math.PI;function viridis_ramp(e){var t=e.length;return function(n){return e[Math.max(0,Math.min(t-1,Math.floor(n*t)))]}}var Zn=viridis_ramp(an("44015444025645045745055946075a46085c460a5d460b5e470d60470e6147106347116447136548146748166848176948186a481a6c481b6d481c6e481d6f481f70482071482173482374482475482576482677482878482979472a7a472c7a472d7b472e7c472f7d46307e46327e46337f463480453581453781453882443983443a83443b84433d84433e85423f854240864241864142874144874045884046883f47883f48893e49893e4a893e4c8a3d4d8a3d4e8a3c4f8a3c508b3b518b3b528b3a538b3a548c39558c39568c38588c38598c375a8c375b8d365c8d365d8d355e8d355f8d34608d34618d33628d33638d32648e32658e31668e31678e31688e30698e306a8e2f6b8e2f6c8e2e6d8e2e6e8e2e6f8e2d708e2d718e2c718e2c728e2c738e2b748e2b758e2a768e2a778e2a788e29798e297a8e297b8e287c8e287d8e277e8e277f8e27808e26818e26828e26828e25838e25848e25858e24868e24878e23888e23898e238a8d228b8d228c8d228d8d218e8d218f8d21908d21918c20928c20928c20938c1f948c1f958b1f968b1f978b1f988b1f998a1f9a8a1e9b8a1e9c891e9d891f9e891f9f881fa0881fa1881fa1871fa28720a38620a48621a58521a68522a78522a88423a98324aa8325ab8225ac8226ad8127ad8128ae8029af7f2ab07f2cb17e2db27d2eb37c2fb47c31b57b32b67a34b67935b77937b87838b9773aba763bbb753dbc743fbc7340bd7242be7144bf7046c06f48c16e4ac16d4cc26c4ec36b50c46a52c56954c56856c66758c7655ac8645cc8635ec96260ca6063cb5f65cb5e67cc5c69cd5b6ccd5a6ece5870cf5773d05675d05477d1537ad1517cd2507fd34e81d34d84d44b86d54989d5488bd6468ed64590d74393d74195d84098d83e9bd93c9dd93ba0da39a2da37a5db36a8db34aadc32addc30b0dd2fb2dd2db5de2bb8de29bade28bddf26c0df25c2df23c5e021c8e020cae11fcde11dd0e11cd2e21bd5e21ad8e219dae319dde318dfe318e2e418e5e419e7e419eae51aece51befe51cf1e51df4e61ef6e620f8e621fbe723fde725")),Jn=viridis_ramp(an("00000401000501010601010802010902020b02020d03030f03031204041405041606051806051a07061c08071e0907200a08220b09240c09260d0a290e0b2b100b2d110c2f120d31130d34140e36150e38160f3b180f3d19103f1a10421c10441d11471e114920114b21114e22115024125325125527125829115a2a115c2c115f2d11612f116331116533106734106936106b38106c390f6e3b0f703d0f713f0f72400f74420f75440f764510774710784910784a10794c117a4e117b4f127b51127c52137c54137d56147d57157e59157e5a167e5c167f5d177f5f187f601880621980641a80651a80671b80681c816a1c816b1d816d1d816e1e81701f81721f817320817521817621817822817922827b23827c23827e24828025828125818326818426818627818827818928818b29818c29818e2a81902a81912b81932b80942c80962c80982d80992d809b2e7f9c2e7f9e2f7fa02f7fa1307ea3307ea5317ea6317da8327daa337dab337cad347cae347bb0357bb2357bb3367ab5367ab73779b83779ba3878bc3978bd3977bf3a77c03a76c23b75c43c75c53c74c73d73c83e73ca3e72cc3f71cd4071cf4070d0416fd2426fd3436ed5446dd6456cd8456cd9466bdb476adc4869de4968df4a68e04c67e24d66e34e65e44f64e55064e75263e85362e95462ea5661eb5760ec5860ed5a5fee5b5eef5d5ef05f5ef1605df2625df2645cf3655cf4675cf4695cf56b5cf66c5cf66e5cf7705cf7725cf8745cf8765cf9785df9795df97b5dfa7d5efa7f5efa815ffb835ffb8560fb8761fc8961fc8a62fc8c63fc8e64fc9065fd9266fd9467fd9668fd9869fd9a6afd9b6bfe9d6cfe9f6dfea16efea36ffea571fea772fea973feaa74feac76feae77feb078feb27afeb47bfeb67cfeb77efeb97ffebb81febd82febf84fec185fec287fec488fec68afec88cfeca8dfecc8ffecd90fecf92fed194fed395fed597fed799fed89afdda9cfddc9efddea0fde0a1fde2a3fde3a5fde5a7fde7a9fde9aafdebacfcecaefceeb0fcf0b2fcf2b4fcf4b6fcf6b8fcf7b9fcf9bbfcfbbdfcfdbf")),er=viridis_ramp(an("00000401000501010601010802010a02020c02020e03021004031204031405041706041907051b08051d09061f0a07220b07240c08260d08290e092b10092d110a30120a32140b34150b37160b39180c3c190c3e1b0c411c0c431e0c451f0c48210c4a230c4c240c4f260c51280b53290b552b0b572d0b592f0a5b310a5c320a5e340a5f3609613809623909633b09643d09653e0966400a67420a68440a68450a69470b6a490b6a4a0c6b4c0c6b4d0d6c4f0d6c510e6c520e6d540f6d550f6d57106e59106e5a116e5c126e5d126e5f136e61136e62146e64156e65156e67166e69166e6a176e6c186e6d186e6f196e71196e721a6e741a6e751b6e771c6d781c6d7a1d6d7c1d6d7d1e6d7f1e6c801f6c82206c84206b85216b87216b88226a8a226a8c23698d23698f24699025689225689326679526679727669827669a28659b29649d29649f2a63a02a63a22b62a32c61a52c60a62d60a82e5fa92e5eab2f5ead305dae305cb0315bb1325ab3325ab43359b63458b73557b93556ba3655bc3754bd3853bf3952c03a51c13a50c33b4fc43c4ec63d4dc73e4cc83f4bca404acb4149cc4248ce4347cf4446d04545d24644d34743d44842d54a41d74b3fd84c3ed94d3dda4e3cdb503bdd513ade5238df5337e05536e15635e25734e35933e45a31e55c30e65d2fe75e2ee8602de9612bea632aeb6429eb6628ec6726ed6925ee6a24ef6c23ef6e21f06f20f1711ff1731df2741cf3761bf37819f47918f57b17f57d15f67e14f68013f78212f78410f8850ff8870ef8890cf98b0bf98c0af98e09fa9008fa9207fa9407fb9606fb9706fb9906fb9b06fb9d07fc9f07fca108fca309fca50afca60cfca80dfcaa0ffcac11fcae12fcb014fcb216fcb418fbb61afbb81dfbba1ffbbc21fbbe23fac026fac228fac42afac62df9c72ff9c932f9cb35f8cd37f8cf3af7d13df7d340f6d543f6d746f5d949f5db4cf4dd4ff4df53f4e156f3e35af3e55df2e661f2e865f2ea69f1ec6df1ed71f1ef75f1f179f2f27df2f482f3f586f3f68af4f88ef5f992f6fa96f8fb9af9fc9dfafda1fcffa4")),tr=viridis_ramp(an("0d088710078813078916078a19068c1b068d1d068e20068f2206902406912605912805922a05932c05942e05952f059631059733059735049837049938049a3a049a3c049b3e049c3f049c41049d43039e44039e46039f48039f4903a04b03a14c02a14e02a25002a25102a35302a35502a45601a45801a45901a55b01a55c01a65e01a66001a66100a76300a76400a76600a76700a86900a86a00a86c00a86e00a86f00a87100a87201a87401a87501a87701a87801a87a02a87b02a87d03a87e03a88004a88104a78305a78405a78606a68707a68808a68a09a58b0aa58d0ba58e0ca48f0da4910ea3920fa39410a29511a19613a19814a099159f9a169f9c179e9d189d9e199da01a9ca11b9ba21d9aa31e9aa51f99a62098a72197a82296aa2395ab2494ac2694ad2793ae2892b02991b12a90b22b8fb32c8eb42e8db52f8cb6308bb7318ab83289ba3388bb3488bc3587bd3786be3885bf3984c03a83c13b82c23c81c33d80c43e7fc5407ec6417dc7427cc8437bc9447aca457acb4679cc4778cc4977cd4a76ce4b75cf4c74d04d73d14e72d24f71d35171d45270d5536fd5546ed6556dd7566cd8576bd9586ada5a6ada5b69db5c68dc5d67dd5e66de5f65de6164df6263e06363e16462e26561e26660e3685fe4695ee56a5de56b5de66c5ce76e5be76f5ae87059e97158e97257ea7457eb7556eb7655ec7754ed7953ed7a52ee7b51ef7c51ef7e50f07f4ff0804ef1814df1834cf2844bf3854bf3874af48849f48948f58b47f58c46f68d45f68f44f79044f79143f79342f89441f89540f9973ff9983ef99a3efa9b3dfa9c3cfa9e3bfb9f3afba139fba238fca338fca537fca636fca835fca934fdab33fdac33fdae32fdaf31fdb130fdb22ffdb42ffdb52efeb72dfeb82cfeba2cfebb2bfebd2afebe2afec029fdc229fdc328fdc527fdc627fdc827fdca26fdcb26fccd25fcce25fcd025fcd225fbd324fbd524fbd724fad824fada24f9dc24f9dd25f8df25f8e125f7e225f7e425f6e626f6e826f5e926f5eb27f4ed27f3ee27f3f027f2f227f1f426f1f525f0f724f0f921")),nr={ROW_ID:"__id__"},rr={ACTION_INF:"actionInf",ON_LAYER_DRAW:"onlayerdraw"},ir=n(0),ar=n.n(ir),or=Array.prototype.slice,ur=function(e){return e},cr=1,sr=2,lr=3,fr=4,hr=1e-6;function translateX(e){return"translate("+(e+.5)+",0)"}function translateY(e){return"translate(0,"+(e+.5)+")"}function entering(){return!this.__axis}function axis_axis(e,t){var n=[],r=null,i=null,a=null,o=6,u=6,c=3,s=e===cr||e===fr?-1:1,l=e===fr||e===sr?"x":"y",f=e===cr||e===lr?translateX:translateY;function axis(h){var d=null==r?t.ticks?t.ticks.apply(t,n):t.domain():r,p=null==i?t.tickFormat?t.tickFormat.apply(t,n):ur:i,y=Math.max(o,0)+c,g=t.range(),v=+g[0]+.5,m=+g[g.length-1]+.5,b=(t.bandwidth?function axis_center(e){var t=Math.max(0,e.bandwidth()-1)/2;return e.round()&&(t=Math.round(t)),function(n){return+e(n)+t}}:function axis_number(e){return function(t){return+e(t)}})(t.copy()),_=h.selection?h.selection():h,x=_.selectAll(".domain").data([null]),w=_.selectAll(".tick").data(d,t).order(),k=w.exit(),C=w.enter().append("g").attr("class","tick"),S=w.select("line"),P=w.select("text");x=x.merge(x.enter().insert("path",".tick").attr("class","domain").attr("stroke","#000")),w=w.merge(C),S=S.merge(C.append("line").attr("stroke","#000").attr(l+"2",s*o)),P=P.merge(C.append("text").attr("fill","#000").attr(l,s*y).attr("dy",e===cr?"0em":e===lr?"0.71em":"0.32em")).style("transform",a),h!==_&&(x=x.transition(h),w=w.transition(h),S=S.transition(h),P=P.transition(h),k=k.transition(h).attr("opacity",hr).attr("transform",function(e){return isFinite(e=b(e))?f(e):this.getAttribute("transform")}),C.attr("opacity",hr).attr("transform",function(e){var t=this.parentNode.__axis;return f(t&&isFinite(t=t(e))?t:b(e))})),k.remove(),x.attr("d",e===fr||e==sr?"M"+s*u+","+v+"H0.5V"+m+"H"+s*u:"M"+v+","+s*u+"V0.5H"+m+"V"+s*u),w.attr("opacity",1).attr("transform",function(e){return f(b(e))}),S.attr(l+"2",s*o),P.attr(l,s*y).text(p),_.filter(entering).attr("fill","none").attr("font-size",10).attr("font-family","sans-serif").attr("text-anchor",e===sr?"start":e===fr?"end":"middle"),_.each(function(){this.__axis=b})}return axis.scale=function(e){return arguments.length?(t=e,axis):t},axis.tickTransform=function(e){return arguments.length?(a=e,axis):a},axis.ticks=function(){return n=or.call(arguments),axis},axis.tickArguments=function(e){return arguments.length?(n=null==e?[]:or.call(e),axis):n.slice()},axis.tickValues=function(e){return arguments.length?(r=null==e?null:or.call(e),axis):r&&r.slice()},axis.tickFormat=function(e){return arguments.length?(i=e,axis):i},axis.tickSize=function(e){return arguments.length?(o=u=+e,axis):o},axis.tickSizeInner=function(e){return arguments.length?(o=+e,axis):o},axis.tickSizeOuter=function(e){return arguments.length?(u=+e,axis):u},axis.tickPadding=function(e){return arguments.length?(c=+e,axis):c},axis}var dr=Math.PI,pr=2*dr,yr=pr-1e-6;function Path(){this._x0=this._y0=this._x1=this._y1=null,this._=""}function path_path(){return new Path}Path.prototype=path_path.prototype={constructor:Path,moveTo:function moveTo(e,t){this._+="M"+(this._x0=this._x1=+e)+","+(this._y0=this._y1=+t)},closePath:function closePath(){null!==this._x1&&(this._x1=this._x0,this._y1=this._y0,this._+="Z")},lineTo:function lineTo(e,t){this._+="L"+(this._x1=+e)+","+(this._y1=+t)},quadraticCurveTo:function quadraticCurveTo(e,t,n,r){this._+="Q"+ +e+","+ +t+","+(this._x1=+n)+","+(this._y1=+r)},bezierCurveTo:function bezierCurveTo(e,t,n,r,i,a){this._+="C"+ +e+","+ +t+","+ +n+","+ +r+","+(this._x1=+i)+","+(this._y1=+a)},arcTo:function arcTo(e,t,n,r,i){e=+e,t=+t,n=+n,r=+r,i=+i;var a=this._x1,o=this._y1,u=n-e,c=r-t,s=a-e,l=o-t,f=s*s+l*l;if(i<0)throw new Error("negative radius: "+i);if(null===this._x1)this._+="M"+(this._x1=e)+","+(this._y1=t);else if(f>1e-6)if(Math.abs(l*u-c*s)>1e-6&&i){var h=n-a,d=r-o,p=u*u+c*c,y=h*h+d*d,g=Math.sqrt(p),v=Math.sqrt(f),m=i*Math.tan((dr-Math.acos((p+f-y)/(2*g*v)))/2),b=m/v,_=m/g;Math.abs(b-1)>1e-6&&(this._+="L"+(e+b*s)+","+(t+b*l)),this._+="A"+i+","+i+",0,0,"+ +(l*h>s*d)+","+(this._x1=e+_*u)+","+(this._y1=t+_*c)}else this._+="L"+(this._x1=e)+","+(this._y1=t);else;},arc:function arc(e,t,n,r,i,a){e=+e,t=+t;var o=(n=+n)*Math.cos(r),u=n*Math.sin(r),c=e+o,s=t+u,l=1^a,f=a?r-i:i-r;if(n<0)throw new Error("negative radius: "+n);null===this._x1?this._+="M"+c+","+s:(Math.abs(this._x1-c)>1e-6||Math.abs(this._y1-s)>1e-6)&&(this._+="L"+c+","+s),n&&(f<0&&(f=f%pr+pr),f>yr?this._+="A"+n+","+n+",0,1,"+l+","+(e-o)+","+(t-u)+"A"+n+","+n+",0,1,"+l+","+(this._x1=c)+","+(this._y1=s):f>1e-6&&(this._+="A"+n+","+n+",0,"+ +(f>=dr)+","+l+","+(this._x1=e+n*Math.cos(i))+","+(this._y1=t+n*Math.sin(i))))},rect:function rect(e,t,n,r){this._+="M"+(this._x0=this._x1=+e)+","+(this._y0=this._y1=+t)+"h"+ +n+"v"+ +r+"h"+-n+"Z"},toString:function toString(){return this._}};var gr=path_path,vr=function(e){return function constant(){return e}},mr=Math.abs,br=Math.atan2,_r=Math.cos,xr=Math.max,wr=Math.min,kr=Math.sin,Cr=Math.sqrt,Sr=1e-12,Pr=Math.PI,Ar=Pr/2,Er=2*Pr;function asin(e){return e>=1?Ar:e<=-1?-Ar:Math.asin(e)}function arcInnerRadius(e){return e.innerRadius}function arcOuterRadius(e){return e.outerRadius}function arcStartAngle(e){return e.startAngle}function arcEndAngle(e){return e.endAngle}function arcPadAngle(e){return e&&e.padAngle}function cornerTangents(e,t,n,r,i,a,o){var u=e-n,c=t-r,s=(o?a:-a)/Cr(u*u+c*c),l=s*c,f=-s*u,h=e+l,d=t+f,p=n+l,y=r+f,g=(h+p)/2,v=(d+y)/2,m=p-h,b=y-d,_=m*m+b*b,x=i-a,w=h*y-p*d,k=(b<0?-1:1)*Cr(xr(0,x*x*_-w*w)),C=(w*b-m*k)/_,S=(-w*m-b*k)/_,P=(w*b+m*k)/_,A=(-w*m+b*k)/_,E=C-g,M=S-v,O=P-g,T=A-v;return E*E+M*M>O*O+T*T&&(C=P,S=A),{cx:C,cy:S,x01:-l,y01:-f,x11:C*(i/x-1),y11:S*(i/x-1)}}function Linear(e){this._context=e}Linear.prototype={areaStart:function areaStart(){this._line=0},areaEnd:function areaEnd(){this._line=NaN},lineStart:function lineStart(){this._point=0},lineEnd:function lineEnd(){(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function point(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;default:this._context.lineTo(e,t)}}};var Mr=function(e){return new Linear(e)};function point_x(e){return e[0]}function point_y(e){return e[1]}var Or=function(){var e=point_x,t=point_y,n=vr(!0),r=null,i=Mr,a=null;function line(o){var u,c,s,l=o.length,f=!1;for(null==r&&(a=i(s=gr())),u=0;u<=l;++u)!(u=l;--f)u.point(g[f],v[f]);u.lineEnd(),u.areaEnd()}y&&(g[s]=+e(h,s,c),v[s]=+n(h,s,c),u.point(t?+t(h,s,c):g[s],r?+r(h,s,c):v[s]))}if(d)return u=null,d+""||null}function arealine(){return Or().defined(i).curve(o).context(a)}return area.x=function(n){return arguments.length?(e="function"==typeof n?n:vr(+n),t=null,area):e},area.x0=function(t){return arguments.length?(e="function"==typeof t?t:vr(+t),area):e},area.x1=function(e){return arguments.length?(t=null==e?null:"function"==typeof e?e:vr(+e),area):t},area.y=function(e){return arguments.length?(n="function"==typeof e?e:vr(+e),r=null,area):n},area.y0=function(e){return arguments.length?(n="function"==typeof e?e:vr(+e),area):n},area.y1=function(e){return arguments.length?(r=null==e?null:"function"==typeof e?e:vr(+e),area):r},area.lineX0=area.lineY0=function(){return arealine().x(e).y(n)},area.lineY1=function(){return arealine().x(e).y(r)},area.lineX1=function(){return arealine().x(t).y(n)},area.defined=function(e){return arguments.length?(i="function"==typeof e?e:vr(!!e),area):i},area.curve=function(e){return arguments.length?(o=e,null!=a&&(u=o(a)),area):o},area.context=function(e){return arguments.length?(null==e?a=u=null:u=o(a=e),area):a},area},Fr=function(e,t){return te?1:t>=e?0:NaN},Nr=function(e){return e};curveRadial(Mr);function Radial(e){this._curve=e}function curveRadial(e){function radial(t){return new Radial(e(t))}return radial._curve=e,radial}Radial.prototype={areaStart:function areaStart(){this._curve.areaStart()},areaEnd:function areaEnd(){this._curve.areaEnd()},lineStart:function lineStart(){this._curve.lineStart()},lineEnd:function lineEnd(){this._curve.lineEnd()},point:function point(e,t){this._curve.point(t*Math.sin(e),t*-Math.cos(e))}};var jr=Array.prototype.slice;var Ir={draw:function draw(e,t){var n=Math.sqrt(t/Pr);e.moveTo(n,0),e.arc(0,0,n,0,Er)}},Dr={draw:function draw(e,t){var n=Math.sqrt(t/5)/2;e.moveTo(-3*n,-n),e.lineTo(-n,-n),e.lineTo(-n,-3*n),e.lineTo(n,-3*n),e.lineTo(n,-n),e.lineTo(3*n,-n),e.lineTo(3*n,n),e.lineTo(n,n),e.lineTo(n,3*n),e.lineTo(-n,3*n),e.lineTo(-n,n),e.lineTo(-3*n,n),e.closePath()}},Lr=Math.sqrt(1/3),Rr=2*Lr,Br={draw:function draw(e,t){var n=Math.sqrt(t/Rr),r=n*Lr;e.moveTo(0,-n),e.lineTo(r,0),e.lineTo(0,n),e.lineTo(-r,0),e.closePath()}},zr=Math.sin(Pr/10)/Math.sin(7*Pr/10),Hr=Math.sin(Er/10)*zr,Vr=-Math.cos(Er/10)*zr,Ur={draw:function draw(e,t){var n=Math.sqrt(.8908130915292852*t),r=Hr*n,i=Vr*n;e.moveTo(0,-n),e.lineTo(r,i);for(var a=1;a<5;++a){var o=Er*a/5,u=Math.cos(o),c=Math.sin(o);e.lineTo(c*n,-u*n),e.lineTo(u*r-c*i,c*r+u*i)}e.closePath()}},Wr={draw:function draw(e,t){var n=Math.sqrt(t),r=-n/2;e.rect(r,r,n,n)}},qr=Math.sqrt(3),Gr={draw:function draw(e,t){var n=-Math.sqrt(t/(3*qr));e.moveTo(0,2*n),e.lineTo(-qr*n,-n),e.lineTo(qr*n,-n),e.closePath()}},Yr=Math.sqrt(3)/2,Xr=1/Math.sqrt(12),Kr=3*(Xr/2+1),$r={draw:function draw(e,t){var n=Math.sqrt(t/Kr),r=n/2,i=n*Xr,a=r,o=n*Xr+n,u=-a,c=o;e.moveTo(r,i),e.lineTo(a,o),e.lineTo(u,c),e.lineTo(-.5*r-Yr*i,Yr*r+-.5*i),e.lineTo(-.5*a-Yr*o,Yr*a+-.5*o),e.lineTo(-.5*u-Yr*c,Yr*u+-.5*c),e.lineTo(-.5*r+Yr*i,-.5*i-Yr*r),e.lineTo(-.5*a+Yr*o,-.5*o-Yr*a),e.lineTo(-.5*u+Yr*c,-.5*c-Yr*u),e.closePath()}},Qr=function(){};function _point(e,t,n){e._context.bezierCurveTo((2*e._x0+e._x1)/3,(2*e._y0+e._y1)/3,(e._x0+2*e._x1)/3,(e._y0+2*e._y1)/3,(e._x0+4*e._x1+t)/6,(e._y0+4*e._y1+n)/6)}function Basis(e){this._context=e}Basis.prototype={areaStart:function areaStart(){this._line=0},areaEnd:function areaEnd(){this._line=NaN},lineStart:function lineStart(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function lineEnd(){switch(this._point){case 3:_point(this,this._x1,this._y1);case 2:this._context.lineTo(this._x1,this._y1)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function point(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;break;case 2:this._point=3,this._context.lineTo((5*this._x0+this._x1)/6,(5*this._y0+this._y1)/6);default:_point(this,e,t)}this._x0=this._x1,this._x1=e,this._y0=this._y1,this._y1=t}};function BasisClosed(e){this._context=e}BasisClosed.prototype={areaStart:Qr,areaEnd:Qr,lineStart:function lineStart(){this._x0=this._x1=this._x2=this._x3=this._x4=this._y0=this._y1=this._y2=this._y3=this._y4=NaN,this._point=0},lineEnd:function lineEnd(){switch(this._point){case 1:this._context.moveTo(this._x2,this._y2),this._context.closePath();break;case 2:this._context.moveTo((this._x2+2*this._x3)/3,(this._y2+2*this._y3)/3),this._context.lineTo((this._x3+2*this._x2)/3,(this._y3+2*this._y2)/3),this._context.closePath();break;case 3:this.point(this._x2,this._y2),this.point(this._x3,this._y3),this.point(this._x4,this._y4)}},point:function point(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._x2=e,this._y2=t;break;case 1:this._point=2,this._x3=e,this._y3=t;break;case 2:this._point=3,this._x4=e,this._y4=t,this._context.moveTo((this._x0+4*this._x1+e)/6,(this._y0+4*this._y1+t)/6);break;default:_point(this,e,t)}this._x0=this._x1,this._x1=e,this._y0=this._y1,this._y1=t}};function BasisOpen(e){this._context=e}BasisOpen.prototype={areaStart:function areaStart(){this._line=0},areaEnd:function areaEnd(){this._line=NaN},lineStart:function lineStart(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function lineEnd(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function point(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3;var n=(this._x0+4*this._x1+e)/6,r=(this._y0+4*this._y1+t)/6;this._line?this._context.lineTo(n,r):this._context.moveTo(n,r);break;case 3:this._point=4;default:_point(this,e,t)}this._x0=this._x1,this._x1=e,this._y0=this._y1,this._y1=t}};function Bundle(e,t){this._basis=new Basis(e),this._beta=t}Bundle.prototype={lineStart:function lineStart(){this._x=[],this._y=[],this._basis.lineStart()},lineEnd:function lineEnd(){var e=this._x,t=this._y,n=e.length-1;if(n>0)for(var r,i=e[0],a=t[0],o=e[n]-i,u=t[n]-a,c=-1;++c<=n;)r=c/n,this._basis.point(this._beta*e[c]+(1-this._beta)*(i+r*o),this._beta*t[c]+(1-this._beta)*(a+r*u));this._x=this._y=null,this._basis.lineEnd()},point:function point(e,t){this._x.push(+e),this._y.push(+t)}};(function custom(e){function bundle(t){return 1===e?new Basis(t):new Bundle(t,e)}return bundle.beta=function(e){return custom(+e)},bundle})(.85);function cardinal_point(e,t,n){e._context.bezierCurveTo(e._x1+e._k*(e._x2-e._x0),e._y1+e._k*(e._y2-e._y0),e._x2+e._k*(e._x1-t),e._y2+e._k*(e._y1-n),e._x2,e._y2)}function Cardinal(e,t){this._context=e,this._k=(1-t)/6}Cardinal.prototype={areaStart:function areaStart(){this._line=0},areaEnd:function areaEnd(){this._line=NaN},lineStart:function lineStart(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},lineEnd:function lineEnd(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:cardinal_point(this,this._x1,this._y1)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function point(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2,this._x1=e,this._y1=t;break;case 2:this._point=3;default:cardinal_point(this,e,t)}this._x0=this._x1,this._x1=this._x2,this._x2=e,this._y0=this._y1,this._y1=this._y2,this._y2=t}};(function custom(e){function cardinal(t){return new Cardinal(t,e)}return cardinal.tension=function(e){return custom(+e)},cardinal})(0);function CardinalClosed(e,t){this._context=e,this._k=(1-t)/6}CardinalClosed.prototype={areaStart:Qr,areaEnd:Qr,lineStart:function lineStart(){this._x0=this._x1=this._x2=this._x3=this._x4=this._x5=this._y0=this._y1=this._y2=this._y3=this._y4=this._y5=NaN,this._point=0},lineEnd:function lineEnd(){switch(this._point){case 1:this._context.moveTo(this._x3,this._y3),this._context.closePath();break;case 2:this._context.lineTo(this._x3,this._y3),this._context.closePath();break;case 3:this.point(this._x3,this._y3),this.point(this._x4,this._y4),this.point(this._x5,this._y5)}},point:function point(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._x3=e,this._y3=t;break;case 1:this._point=2,this._context.moveTo(this._x4=e,this._y4=t);break;case 2:this._point=3,this._x5=e,this._y5=t;break;default:cardinal_point(this,e,t)}this._x0=this._x1,this._x1=this._x2,this._x2=e,this._y0=this._y1,this._y1=this._y2,this._y2=t}};(function custom(e){function cardinal(t){return new CardinalClosed(t,e)}return cardinal.tension=function(e){return custom(+e)},cardinal})(0);function CardinalOpen(e,t){this._context=e,this._k=(1-t)/6}CardinalOpen.prototype={areaStart:function areaStart(){this._line=0},areaEnd:function areaEnd(){this._line=NaN},lineStart:function lineStart(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},lineEnd:function lineEnd(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function point(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3,this._line?this._context.lineTo(this._x2,this._y2):this._context.moveTo(this._x2,this._y2);break;case 3:this._point=4;default:cardinal_point(this,e,t)}this._x0=this._x1,this._x1=this._x2,this._x2=e,this._y0=this._y1,this._y1=this._y2,this._y2=t}};(function custom(e){function cardinal(t){return new CardinalOpen(t,e)}return cardinal.tension=function(e){return custom(+e)},cardinal})(0);function catmullRom_point(e,t,n){var r=e._x1,i=e._y1,a=e._x2,o=e._y2;if(e._l01_a>Sr){var u=2*e._l01_2a+3*e._l01_a*e._l12_a+e._l12_2a,c=3*e._l01_a*(e._l01_a+e._l12_a);r=(r*u-e._x0*e._l12_2a+e._x2*e._l01_2a)/c,i=(i*u-e._y0*e._l12_2a+e._y2*e._l01_2a)/c}if(e._l23_a>Sr){var s=2*e._l23_2a+3*e._l23_a*e._l12_a+e._l12_2a,l=3*e._l23_a*(e._l23_a+e._l12_a);a=(a*s+e._x1*e._l23_2a-t*e._l12_2a)/l,o=(o*s+e._y1*e._l23_2a-n*e._l12_2a)/l}e._context.bezierCurveTo(r,i,a,o,e._x2,e._y2)}function CatmullRom(e,t){this._context=e,this._alpha=t}CatmullRom.prototype={areaStart:function areaStart(){this._line=0},areaEnd:function areaEnd(){this._line=NaN},lineStart:function lineStart(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function lineEnd(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:this.point(this._x2,this._y2)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function point(e,t){if(e=+e,t=+t,this._point){var n=this._x2-e,r=this._y2-t;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(n*n+r*r,this._alpha))}switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;break;case 2:this._point=3;default:catmullRom_point(this,e,t)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=e,this._y0=this._y1,this._y1=this._y2,this._y2=t}};var Zr=function custom(e){function catmullRom(t){return e?new CatmullRom(t,e):new Cardinal(t,0)}return catmullRom.alpha=function(e){return custom(+e)},catmullRom}(.5);function CatmullRomClosed(e,t){this._context=e,this._alpha=t}CatmullRomClosed.prototype={areaStart:Qr,areaEnd:Qr,lineStart:function lineStart(){this._x0=this._x1=this._x2=this._x3=this._x4=this._x5=this._y0=this._y1=this._y2=this._y3=this._y4=this._y5=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function lineEnd(){switch(this._point){case 1:this._context.moveTo(this._x3,this._y3),this._context.closePath();break;case 2:this._context.lineTo(this._x3,this._y3),this._context.closePath();break;case 3:this.point(this._x3,this._y3),this.point(this._x4,this._y4),this.point(this._x5,this._y5)}},point:function point(e,t){if(e=+e,t=+t,this._point){var n=this._x2-e,r=this._y2-t;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(n*n+r*r,this._alpha))}switch(this._point){case 0:this._point=1,this._x3=e,this._y3=t;break;case 1:this._point=2,this._context.moveTo(this._x4=e,this._y4=t);break;case 2:this._point=3,this._x5=e,this._y5=t;break;default:catmullRom_point(this,e,t)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=e,this._y0=this._y1,this._y1=this._y2,this._y2=t}};(function custom(e){function catmullRom(t){return e?new CatmullRomClosed(t,e):new CardinalClosed(t,0)}return catmullRom.alpha=function(e){return custom(+e)},catmullRom})(.5);function CatmullRomOpen(e,t){this._context=e,this._alpha=t}CatmullRomOpen.prototype={areaStart:function areaStart(){this._line=0},areaEnd:function areaEnd(){this._line=NaN},lineStart:function lineStart(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function lineEnd(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function point(e,t){if(e=+e,t=+t,this._point){var n=this._x2-e,r=this._y2-t;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(n*n+r*r,this._alpha))}switch(this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3,this._line?this._context.lineTo(this._x2,this._y2):this._context.moveTo(this._x2,this._y2);break;case 3:this._point=4;default:catmullRom_point(this,e,t)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=e,this._y0=this._y1,this._y1=this._y2,this._y2=t}};(function custom(e){function catmullRom(t){return e?new CatmullRomOpen(t,e):new CardinalOpen(t,0)}return catmullRom.alpha=function(e){return custom(+e)},catmullRom})(.5);function LinearClosed(e){this._context=e}LinearClosed.prototype={areaStart:Qr,areaEnd:Qr,lineStart:function lineStart(){this._point=0},lineEnd:function lineEnd(){this._point&&this._context.closePath()},point:function point(e,t){e=+e,t=+t,this._point?this._context.lineTo(e,t):(this._point=1,this._context.moveTo(e,t))}};function monotone_sign(e){return e<0?-1:1}function slope3(e,t,n){var r=e._x1-e._x0,i=t-e._x1,a=(e._y1-e._y0)/(r||i<0&&-0),o=(n-e._y1)/(i||r<0&&-0),u=(a*i+o*r)/(r+i);return(monotone_sign(a)+monotone_sign(o))*Math.min(Math.abs(a),Math.abs(o),.5*Math.abs(u))||0}function slope2(e,t){var n=e._x1-e._x0;return n?(3*(e._y1-e._y0)/n-t)/2:t}function monotone_point(e,t,n){var r=e._x0,i=e._y0,a=e._x1,o=e._y1,u=(a-r)/3;e._context.bezierCurveTo(r+u,i+u*t,a-u,o-u*n,a,o)}function MonotoneX(e){this._context=e}function MonotoneY(e){this._context=new ReflectContext(e)}function ReflectContext(e){this._context=e}function Natural(e){this._context=e}function controlPoints(e){var t,n,r=e.length-1,i=new Array(r),a=new Array(r),o=new Array(r);for(i[0]=0,a[0]=2,o[0]=e[0]+2*e[1],t=1;t=0;--t)i[t]=(o[t]-i[t+1])/a[t];for(a[r-1]=(e[r]+i[r-1])/2,t=0;t=0&&(this._t=1-this._t,this._line=1-this._line)},point:function point(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;default:if(this._t<=0)this._context.lineTo(this._x,t),this._context.lineTo(e,t);else{var n=this._x*(1-this._t)+e*this._t;this._context.lineTo(n,this._y),this._context.lineTo(n,t)}}this._x=e,this._y=t}};var Jr=function(e){return new Step(e,.5)};function stepBefore(e){return new Step(e,0)}function stepAfter(e){return new Step(e,1)}var ei=function(e,t){if((i=e.length)>1)for(var n,r,i,a=1,o=e[t[0]],u=o.length;a=0;)n[t]=t;return n};function stackValue(e,t){return e[t]}var ni=function(e){var t=e.map(ascending_sum);return ti(e).sort(function(e,n){return t[e]-t[n]})};function ascending_sum(e){for(var t,n=0,r=-1,i=e.length;++r0)){if(a/=h,h<0){if(a0){if(a>f)return;a>l&&(l=a)}if(a=r-c,h||!(a<0)){if(a/=h,h<0){if(a>f)return;a>l&&(l=a)}else if(h>0){if(a0)){if(a/=d,d<0){if(a0){if(a>f)return;a>l&&(l=a)}if(a=i-s,d||!(a<0)){if(a/=d,d<0){if(a>f)return;a>l&&(l=a)}else if(d>0){if(a0||f<1)||(l>0&&(e[0]=[c+l*h,s+l*d]),f<1&&(e[1]=[c+f*h,s+f*d]),!0)}}}}}function connectEdge(e,t,n,r,i){var a=e[1];if(a)return!0;var o,u,c=e[0],s=e.left,l=e.right,f=s[0],h=s[1],d=l[0],p=l[1],y=(f+d)/2,g=(h+p)/2;if(p===h){if(y=r)return;if(f>d){if(c){if(c[1]>=i)return}else c=[y,n];a=[y,i]}else{if(c){if(c[1]1)if(f>d){if(c){if(c[1]>=i)return}else c=[(n-u)/o,n];a=[(i-u)/o,i]}else{if(c){if(c[1]=r)return}else c=[t,o*t+u];a=[r,o*r+u]}else{if(c){if(c[0]=-Ai)){var d=c*c+s*s,p=l*l+f*f,y=(f*d-s*p)/h,g=(c*p-l*d)/h,v=_i.pop()||new function Circle(){RedBlackNode(this),this.x=this.y=this.arc=this.site=this.cy=null};v.arc=e,v.site=i,v.x=y+o,v.y=(v.cy=g+u)+Math.sqrt(y*y+g*g),e.circle=v;for(var m=null,b=Ci._;b;)if(v.yPi)u=u.L;else{if(!((i=a-rightBreakPoint(u,o))>Pi)){r>-Pi?(t=u.P,n=u):i>-Pi?(t=u,n=u.N):t=n=u;break}if(!u.R){t=u;break}u=u.R}!function createCell(e){return ki[e.index]={site:e,halfedges:[]}}(e);var c=createBeach(e);if(wi.insert(t,c),t||n){if(t===n)return detachCircle(t),n=createBeach(t.site),wi.insert(c,n),c.edge=n.edge=createEdge(t.site,c.site),attachCircle(t),void attachCircle(n);if(n){detachCircle(t),detachCircle(n);var s=t.site,l=s[0],f=s[1],h=e[0]-l,d=e[1]-f,p=n.site,y=p[0]-l,g=p[1]-f,v=2*(h*g-d*y),m=h*h+d*d,b=y*y+g*g,_=[(g*m-d*b)/v+l,(h*b-y*m)/v+f];setEdgeEnd(n.edge,s,p,_),c.edge=createEdge(s,e,null,_),n.edge=createEdge(e,p,null,_),attachCircle(t),attachCircle(n)}else c.edge=createEdge(t.site,c.site)}}function leftBreakPoint(e,t){var n=e.site,r=n[0],i=n[1],a=i-t;if(!a)return r;var o=e.P;if(!o)return-1/0;var u=(n=o.site)[0],c=n[1],s=c-t;if(!s)return u;var l=u-r,f=1/a-1/s,h=l/s;return f?(-h+Math.sqrt(h*h-2*f*(l*l/(-2*s)-c+s/2+i-a/2)))/f+r:(r+u)/2}function rightBreakPoint(e,t){var n=e.N;if(n)return leftBreakPoint(n,t);var r=e.site;return r[1]===t?r[0]:1/0}var wi,ki,Ci,Si,Pi=1e-6,Ai=1e-12;function triangleArea(e,t,n){return(e[0]-n[0])*(t[1]-e[1])-(e[0]-t[0])*(n[1]-e[1])}function lexicographic(e,t){return t[1]-e[1]||t[0]-e[0]}function Diagram(e,t){var n,r,i,a=e.sort(lexicographic).pop();for(Si=[],ki=new Array(e.length),wi=new mi,Ci=new mi;;)if(i=bi,a&&(!i||a[1]Pi||Math.abs(i[0][1]-i[1][1])>Pi)||delete Si[a]}(o,u,c,s),function clipCells(e,t,n,r){var i,a,o,u,c,s,l,f,h,d,p,y,g=ki.length,v=!0;for(i=0;iPi||Math.abs(y-h)>Pi)&&(c.splice(u,0,Si.push(createBorderEdge(o,d,Math.abs(p-e)Pi?[e,Math.abs(f-e)Pi?[Math.abs(h-r)Pi?[n,Math.abs(f-n)Pi?[Math.abs(h-t)=u)return null;var c=e-i.site[0],s=t-i.site[1],l=c*c+s*s;do{i=a.cells[r=o],o=null,i.halfedges.forEach(function(n){var r=a.edges[n],u=r.left;if(u!==i.site&&u||(u=r.right)){var c=e-u[0],s=t-u[1],f=c*c+s*s;ft?0===i?i:"left"===n?i-1:i:i===e.length-1?i:"left"===n?i:i+1},Gi=(requestAnimationFrame,cancelAnimationFrame,function getQualifiedClassName(e,t,n){return[n+"-"+(e=e.replace(/^\.*/,"")),n+"-"+e+"-"+t]}),Yi=function defaultValue(e,t){return void 0===e||"object"===(void 0===e?"undefined":Ii(e))&&!e?t:e},Xi=function objectIterator(e,t){for(var n in e)Object.hasOwnProperty.call(e,n)&&t(n,e)},Ki=function(){function Voronoi(e){_classCallCheck(this,Voronoi),this._voronoi=Oi().x(function(e){return e.x}).y(function(e){return e.y}),this.data(e)}return ji(Voronoi,[{key:"data",value:function data(e){return e&&(this._voronoiFn=this._voronoi(e)),this}},{key:"find",value:function find(e,t,n){return this._voronoiFn.find(e,t,n)}}]),Voronoi}(),$i=function(){function Store(e){_classCallCheck(this,Store),this.model=Fi.a.create(e),this._listeners=[]}return ji(Store,[{key:"serialize",value:function serialize(){return this.model.serialize()}},{key:"commit",value:function commit(e,t){this.model.prop(e,t)}},{key:"registerChangeListener",value:function registerChangeListener(e,t,n){var r=e;Array.isArray(e)||(r=[e]);var i=this.model.next(r,t,n);return this._listeners.push(i),this}},{key:"registerImmediateListener",value:function registerImmediateListener(e,t,n){var r=e;Array.isArray(e)||(r=[e]);var i=this.model.on(r,t,n);return this._listeners.push(i),this}},{key:"get",value:function get(e){return this.model.prop(e)}},{key:"computed",value:function computed(e,t){return this.model.calculatedProp(e,t)}},{key:"unsubscribeAll",value:function unsubscribeAll(){this._listeners.forEach(function(e){return e()})}}]),Store}(),Qi=function intSanitizer(e){var t=e.toString().match(/(\d+)(px)*/g);return t?parseInt(t[0],10):null},Zi=function transactor(e,t,n){var r=void 0,i=n&&n instanceof Fi.a?n:Fi.a.create({}),a=function _loop(n){({}).hasOwnProperty.call(t,n)&&(r=t[n],i.prop(n)||i.append(_defineProperty({},n,r.value)),e[n]=function(t,r,a){return function(){for(var o=arguments.length,u=Array(o),c=0;c=0;n--)if(e[n]!==t[n])return!1;return!0}(t,n):"Object"===e?Object.is(t,n):t===n}},ta={INTERFACE_IMPL:"Method not implemented"},na=function mergeRecursive(e,t){for(var n in t)Di(e[n])&&Di(t[n])?mergeRecursive(e[n],t[n]):t[n]instanceof Object&&t[n].constructor===Object?(e[n]={},mergeRecursive(e[n],t[n])):e[n]=t[n];return e},ra=function interpolator(){return Pe},ia=function numberInterpolator(){return ge},aa=function piecewiseInterpolator(){return piecewise_piecewise};var oa=function rgbToHsv(e,t,n){var r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:1;e=+e,t=+t,n=+n,r=+r,e/=255,t/=255,n/=255;var i=Math.max(e,t,n),a=Math.min(e,t,n),o=void 0,u=void 0,c=(i+a)/2;if(i===a)o=u=0;else{var s=i-a;switch(u=c>.5?s/(2-i-a):s/(i+a),i){case e:o=(t-n)/s+(t=i[0]&&r<=i[1]})},{saveChild:!1,mode:n})},sa=function getDataModelFromIdentifiers(e,t,n){var r=void 0;if(t instanceof Array){var i=e.getFieldsConfig(),a=t.slice(1,t.length);if(t instanceof Function)r=t(e,{},!1);else if(t instanceof Array&&t[0].length){var o=t[0].filter(function(e){return e in i});r=e.select(function(e){var t=!0;return o.forEach(function(n,r){var i=e[n].valueOf(),o=a.findIndex(function(e){return e[r]===i});t=t&&-1!==o}),t},{saveChild:!1,mode:n})}}else r=ca(e,t,n);return r},la=function registerListeners(e,t){var n=t(e);for(var r in n)if({}.hasOwnProperty.call(n,r)){var i=n[r],a=i.type,o=i.props,u=i.listener;e.store()[a](o,u)}},fa=function isValidValue(e){return!isNaN(e)&&e!==-1/0&&e!==1/0},ha=function getObjProp(e){for(var t=arguments.length,n=Array(t>1?t-1:0),r=1;r1)for(var n,r,i,a,o,u,c=0,s=e[t[0]].length;c=0?(r[0]=a,r[1]=a+=i):i<0?(r[1]=o,r[0]=o+=i):r[0]=a}),_defineProperty(Mi,"none",ei),_defineProperty(Mi,"expand",function(e,t){if((r=e.length)>0){for(var n,r,i,a=0,o=e[0].length;a0&&(r=(n=e[t[0]]).length)>0){for(var n,r,i,a=0,o=1;o0&&(d+=f);for(null!=t?p.sort(function(e,n){return t(y[e],y[n])}):null!=n&&p.sort(function(e,t){return n(o[e],o[t])}),u=0,s=d?(v-h*b)/d:0;u0?f*s:0)+b,y[c]={data:o[c],index:u,value:f,startAngle:g,endAngle:l,padAngle:m};return y}return pie.value=function(t){return arguments.length?(e="function"==typeof t?t:vr(+t),pie):e},pie.sortValues=function(e){return arguments.length?(t=e,n=null,pie):t},pie.sort=function(e){return arguments.length?(n=e,t=null,pie):n},pie.startAngle=function(e){return arguments.length?(r="function"==typeof e?e:vr(+e),pie):r},pie.endAngle=function(e){return arguments.length?(i="function"==typeof e?e:vr(+e),pie):i},pie.padAngle=function(e){return arguments.length?(a="function"==typeof e?e:vr(+e),pie):a},pie},arc:function(){var e=arcInnerRadius,t=arcOuterRadius,n=vr(0),r=null,i=arcStartAngle,a=arcEndAngle,o=arcPadAngle,u=null;function arc(){var c,s,l=+e.apply(this,arguments),f=+t.apply(this,arguments),h=i.apply(this,arguments)-Ar,d=a.apply(this,arguments)-Ar,p=mr(d-h),y=d>h;if(u||(u=c=gr()),fSr)if(p>Er-Sr)u.moveTo(f*_r(h),f*kr(h)),u.arc(0,0,f,h,d,!y),l>Sr&&(u.moveTo(l*_r(d),l*kr(d)),u.arc(0,0,l,d,h,y));else{var g,v,m=h,b=d,_=h,x=d,w=p,k=p,C=o.apply(this,arguments)/2,S=C>Sr&&(r?+r.apply(this,arguments):Cr(l*l+f*f)),P=wr(mr(f-l)/2,+n.apply(this,arguments)),A=P,E=P;if(S>Sr){var M=asin(S/l*kr(C)),O=asin(S/f*kr(C));(w-=2*M)>Sr?(_+=M*=y?1:-1,x-=M):(w=0,_=x=(h+d)/2),(k-=2*O)>Sr?(m+=O*=y?1:-1,b-=O):(k=0,m=b=(h+d)/2)}var T=f*_r(m),F=f*kr(m),N=l*_r(x),j=l*kr(x);if(P>Sr){var I=f*_r(b),D=f*kr(b),L=l*_r(_),R=l*kr(_);if(pSr?function intersect(e,t,n,r,i,a,o,u){var c=n-e,s=r-t,l=o-i,f=u-a,h=(l*(t-a)-f*(e-i))/(f*c-l*s);return[e+h*c,t+h*s]}(T,F,L,R,I,D,N,j):[N,j],z=T-B[0],H=F-B[1],V=I-B[0],U=D-B[1],W=1/kr(function acos(e){return e>1?0:e<-1?Pr:Math.acos(e)}((z*V+H*U)/(Cr(z*z+H*H)*Cr(V*V+U*U)))/2),q=Cr(B[0]*B[0]+B[1]*B[1]);A=wr(P,(l-q)/(W-1)),E=wr(P,(f-q)/(W+1))}}k>Sr?E>Sr?(g=cornerTangents(L,R,T,F,f,E,y),v=cornerTangents(I,D,N,j,f,E,y),u.moveTo(g.cx+g.x01,g.cy+g.y01),ESr&&w>Sr?A>Sr?(g=cornerTangents(N,j,I,D,l,-A,y),v=cornerTangents(T,F,L,R,l,-A,y),u.lineTo(g.cx+g.x01,g.cy+g.y01),A=0&&"xmlns"!==(t=e.slice(0,n))&&(e=e.slice(n+1)),ka.hasOwnProperty(t)?{space:ka[t],local:e}:e};var Sa=function(e){var t=Ca(e);return(t.local?function creatorFixed(e){return function(){return this.ownerDocument.createElementNS(e.space,e.local)}}:function creatorInherit(e){return function(){var t=this.ownerDocument,n=this.namespaceURI;return n===wa&&t.documentElement.namespaceURI===wa?t.createElement(e):t.createElementNS(n,e)}})(t)};function selector_none(){}var Pa=function(e){return null==e?selector_none:function(){return this.querySelector(e)}};function selectorAll_empty(){return[]}var Aa=function(e){return null==e?selectorAll_empty:function(){return this.querySelectorAll(e)}},Ea=function matcher(e){return function(){return this.matches(e)}};if("undefined"!=typeof document){var Ma=document.documentElement;if(!Ma.matches){var Oa=Ma.webkitMatchesSelector||Ma.msMatchesSelector||Ma.mozMatchesSelector||Ma.oMatchesSelector;Ea=function matcher(e){return function(){return Oa.call(this,e)}}}}var Ta=Ea,Fa=function(e){return new Array(e.length)};function EnterNode(e,t){this.ownerDocument=e.ownerDocument,this.namespaceURI=e.namespaceURI,this._next=null,this._parent=e,this.__data__=t}EnterNode.prototype={constructor:EnterNode,appendChild:function appendChild(e){return this._parent.insertBefore(e,this._next)},insertBefore:function insertBefore(e,t){return this._parent.insertBefore(e,t)},querySelector:function querySelector(e){return this._parent.querySelector(e)},querySelectorAll:function querySelectorAll(e){return this._parent.querySelectorAll(e)}};var Na="$";function bindIndex(e,t,n,r,i,a){for(var o,u=0,c=t.length,s=a.length;ut?1:e>=t?0:NaN}var ja=function(e){return e.ownerDocument&&e.ownerDocument.defaultView||e.document&&e||e.defaultView};function styleValue(e,t){return e.style.getPropertyValue(t)||ja(e).getComputedStyle(e,null).getPropertyValue(t)}function classArray(e){return e.trim().split(/^|\s+/)}function classList(e){return e.classList||new ClassList(e)}function ClassList(e){this._node=e,this._names=classArray(e.getAttribute("class")||"")}function classedAdd(e,t){for(var n=classList(e),r=-1,i=t.length;++r=0&&(this._names.splice(t,1),this._node.setAttribute("class",this._names.join(" ")))},contains:function contains(e){return this._names.indexOf(e)>=0}};function textRemove(){this.textContent=""}function htmlRemove(){this.innerHTML=""}function raise_raise(){this.nextSibling&&this.parentNode.appendChild(this)}function lower(){this.previousSibling&&this.parentNode.insertBefore(this,this.parentNode.firstChild)}function constantNull(){return null}function remove_remove(){var e=this.parentNode;e&&e.removeChild(this)}function selection_cloneShallow(){return this.parentNode.insertBefore(this.cloneNode(!1),this.nextSibling)}function selection_cloneDeep(){return this.parentNode.insertBefore(this.cloneNode(!0),this.nextSibling)}var Ia={},Da=null;"undefined"!=typeof document&&("onmouseenter"in document.documentElement||(Ia={mouseenter:"mouseover",mouseleave:"mouseout"}));function filterContextListener(e,t,n){return e=contextListener(e,t,n),function(t){var n=t.relatedTarget;n&&(n===this||8&n.compareDocumentPosition(this))||e.call(this,t)}}function contextListener(e,t,n){return function(r){var i=Da;Da=r;try{e.call(this,this.__data__,t,n)}finally{Da=i}}}function onRemove(e){return function(){var t=this.__on;if(t){for(var n,r=0,i=-1,a=t.length;r=_&&(_=b+1);!(m=g[_])&&++_=0;)(r=i[a])&&(o&&o!==r.nextSibling&&o.parentNode.insertBefore(r,o),o=r);return this},sort:function(e){function compareNode(t,n){return t&&n?e(t.__data__,n.__data__):!t-!n}e||(e=sort_ascending);for(var t=this._groups,n=t.length,r=new Array(n),i=0;i1?this.each((null==t?function styleRemove(e){return function(){this.style.removeProperty(e)}}:"function"==typeof t?function styleFunction(e,t,n){return function(){var r=t.apply(this,arguments);null==r?this.style.removeProperty(e):this.style.setProperty(e,r,n)}}:function styleConstant(e,t,n){return function(){this.style.setProperty(e,t,n)}})(e,t,null==n?"":n)):styleValue(this.node(),e)},property:function(e,t){return arguments.length>1?this.each((null==t?function propertyRemove(e){return function(){delete this[e]}}:"function"==typeof t?function propertyFunction(e,t){return function(){var n=t.apply(this,arguments);null==n?delete this[e]:this[e]=n}}:function propertyConstant(e,t){return function(){this[e]=t}})(e,t)):this.node()[e]},classed:function(e,t){var n=classArray(e+"");if(arguments.length<2){for(var r=classList(this.node()),i=-1,a=n.length;++i=0&&(t=e.slice(n+1),e=e.slice(0,n)),{type:e,name:t}})}(e+""),o=a.length;if(!(arguments.length<2)){for(u=t?onAdd:onRemove,null==n&&(n=!1),r=0;r=0&&(n=e.slice(r+1),e=e.slice(0,r)),e&&!t.hasOwnProperty(e))throw new Error("unknown type: "+e);return{type:e,name:n}})}(e+"",r),a=-1,o=i.length;if(!(arguments.length<2)){if(null!=t&&"function"!=typeof t)throw new Error("invalid callback: "+t);for(;++a0)for(var n,r,i=new Array(n),a=0;af}c.mouse("drag")}function mouseupped(){Ba(Da.view).on("mousemove.drag mouseup.drag",null),function yesdrag(e,t){var n=e.document.documentElement,r=Ba(e).on("dragstart.drag",null);t&&(r.on("click.drag",Ya,!0),setTimeout(function(){r.on("click.drag",null)},0)),"onselectstart"in n?r.on("selectstart.drag",null):(n.style.MozUserSelect=n.__noselect,delete n.__noselect)}(Da.view,n),Ya(),c.mouse("end")}function touchstarted(){if(i.apply(this,arguments)){var e,t,n=Da.changedTouches,r=a.apply(this,arguments),o=n.length;for(e=0;e=0&&t._call.call(null,e),t=t._next;--eo}()}finally{eo=0,function nap(){var e,t,n=$a,r=1/0;for(;n;)n._call?(r>n._time&&(r=n._time),e=n,n=n._next):(t=n._next,n._next=null,n=e?e._next=t:$a=t);Qa=e,sleep(r)}(),ao=0}}function poke(){var e=uo.now(),t=e-io;t>ro&&(oo-=t,io=e)}function sleep(e){eo||(to&&(to=clearTimeout(to)),e-ao>24?(e<1/0&&(to=setTimeout(wake,e-uo.now()-oo)),no&&(no=clearInterval(no))):(no||(io=uo.now(),no=setInterval(poke,ro)),eo=1,co(wake)))}Timer.prototype=timer.prototype={constructor:Timer,restart:function restart(e,t,n){if("function"!=typeof e)throw new TypeError("callback is not a function");n=(null==n?now():+n)+(null==t?0:+t),this._next||Qa===this||(Qa?Qa._next=this:$a=this,Qa=this),this._call=e,this._time=n,sleep()},stop:function stop(){this._call&&(this._call=null,this._time=1/0,sleep())}};var so=function(e,t,n){var r=new Timer;return t=null==t?0:+t,r.restart(function(n){r.stop(),e(n+t)},t,n),r},lo=Ga("start","end","interrupt"),fo=[],ho=0,po=1,yo=2,go=3,vo=4,mo=5,bo=6,_o=function(e,t,n,r,i,a){var o=e.__transition;if(o){if(n in o)return}else e.__transition={};!function schedule_create(e,t,n){var r,i=e.__transition;function start(a){var o,u,c,s;if(n.state!==po)return stop();for(o in i)if((s=i[o]).name===n.name){if(s.state===go)return so(start);s.state===vo?(s.state=bo,s.timer.stop(),s.on.call("interrupt",e,e.__data__,s.index,s.group),delete i[o]):+oho)throw new Error("too late; already scheduled");return n}function schedule_set(e,t){var n=schedule_get(e,t);if(n.state>yo)throw new Error("too late; already started");return n}function schedule_get(e,t){var n=e.__transition;if(!n||!(n=n[t]))throw new Error("transition not found");return n}function tweenValue(e,t,n){var r=e._id;return e.each(function(){var e=schedule_set(this,r);(e.value||(e.value={}))[t]=n.apply(this,arguments)}),function(e){return schedule_get(e,r).value[t]}}var xo=function(e,t){var n;return("number"==typeof t?ge:t instanceof color_color?pe:(n=color_color(t))?(t=n,pe):Ce)(e,t)};var wo=Ra.prototype.constructor;var ko=0;function Transition(e,t,n,r){this._groups=e,this._parents=t,this._name=n,this._id=r}function newId(){return++ko}var Co=Ra.prototype;Transition.prototype=function src_transition_transition(e){return Ra().transition(e)}.prototype={constructor:Transition,select:function(e){var t=this._name,n=this._id;"function"!=typeof e&&(e=Pa(e));for(var r=this._groups,i=r.length,a=new Array(i),o=0;o=0&&(e=e.slice(0,t)),!e||"start"===e})}(t)?init:schedule_set;return function(){var o=a(this,e),u=o.on;u!==r&&(i=(r=u).copy()).on(t,n),o.on=i}}(n,e,t))},attr:function(e,t){var n=Ca(e),r="transform"===n?Fe:xo;return this.attrTween(e,"function"==typeof t?(n.local?function attr_attrFunctionNS(e,t,n){var r,i,a;return function(){var o,u=n(this);if(null!=u)return(o=this.getAttributeNS(e.space,e.local))===u?null:o===r&&u===i?a:a=t(r=o,i=u);this.removeAttributeNS(e.space,e.local)}}:function attr_attrFunction(e,t,n){var r,i,a;return function(){var o,u=n(this);if(null!=u)return(o=this.getAttribute(e))===u?null:o===r&&u===i?a:a=t(r=o,i=u);this.removeAttribute(e)}})(n,r,tweenValue(this,"attr."+e,t)):null==t?(n.local?function attr_attrRemoveNS(e){return function(){this.removeAttributeNS(e.space,e.local)}}:function attr_attrRemove(e){return function(){this.removeAttribute(e)}})(n):(n.local?function attr_attrConstantNS(e,t,n){var r,i;return function(){var a=this.getAttributeNS(e.space,e.local);return a===n?null:a===r?i:i=t(r=a,n)}}:function attr_attrConstant(e,t,n){var r,i;return function(){var a=this.getAttribute(e);return a===n?null:a===r?i:i=t(r=a,n)}})(n,r,t+""))},attrTween:function(e,t){var n="attr."+e;if(arguments.length<2)return(n=this.tween(n))&&n._value;if(null==t)return this.tween(n,null);if("function"!=typeof t)throw new Error;var r=Ca(e);return this.tween(n,(r.local?function attrTweenNS(e,t){function tween(){var n=this,r=t.apply(n,arguments);return r&&function(t){n.setAttributeNS(e.space,e.local,r(t))}}return tween._value=t,tween}:function attrTween(e,t){function tween(){var n=this,r=t.apply(n,arguments);return r&&function(t){n.setAttribute(e,r(t))}}return tween._value=t,tween})(r,t))},style:function(e,t,n){var r="transform"==(e+="")?Te:xo;return null==t?this.styleTween(e,function style_styleRemove(e,t){var n,r,i;return function(){var a=styleValue(this,e),o=(this.style.removeProperty(e),styleValue(this,e));return a===o?null:a===n&&o===r?i:i=t(n=a,r=o)}}(e,r)).on("end.style."+e,function styleRemoveEnd(e){return function(){this.style.removeProperty(e)}}(e)):this.styleTween(e,"function"==typeof t?function style_styleFunction(e,t,n){var r,i,a;return function(){var o=styleValue(this,e),u=n(this);return null==u&&(this.style.removeProperty(e),u=styleValue(this,e)),o===u?null:o===r&&u===i?a:a=t(r=o,i=u)}}(e,r,tweenValue(this,"style."+e,t)):function style_styleConstant(e,t,n){var r,i;return function(){var a=styleValue(this,e);return a===n?null:a===r?i:i=t(r=a,n)}}(e,r,t+""),n)},styleTween:function(e,t,n){var r="style."+(e+="");if(arguments.length<2)return(r=this.tween(r))&&r._value;if(null==t)return this.tween(r,null);if("function"!=typeof t)throw new Error;return this.tween(r,function styleTween(e,t,n){function tween(){var r=this,i=t.apply(r,arguments);return i&&function(t){r.style.setProperty(e,i(t),n)}}return tween._value=t,tween}(e,t,null==n?"":n))},text:function(e){return this.tween("text","function"==typeof e?function text_textFunction(e){return function(){var t=e(this);this.textContent=null==t?"":t}}(tweenValue(this,"text",e)):function text_textConstant(e){return function(){this.textContent=e}}(null==e?"":e+""))},remove:function(){return this.on("end.remove",function removeFunction(e){return function(){var t=this.parentNode;for(var n in this.__transition)if(+n!==e)return;t&&t.removeChild(this)}}(this._id))},tween:function(e,t){var n=this._id;if(e+="",arguments.length<2){for(var r,i=schedule_get(this.node(),n).tween,a=0,o=i.length;ayo&&n.state4&&void 0!==arguments[4]?arguments[4]:{},a=arguments[5];(e instanceof HTMLElement||e instanceof SVGElement)&&(e=Ao(e));var o=r?r[0]:null,u=null,c=null,s=null,l=null,f=null,h=void 0;o?"#"===o?(u="id",c=r):(u="class",c="."===r[0]?r:"."+r):(c=t,h=!0),s=e.selectAll(c),h&&(s=s.filter(function(){return this.parentNode===e.node()})),l=(s=s.data(n,a)).enter().append(t||"div"),i.enter&&l.each(function(){for(var e=arguments.length,t=Array(e),n=0;nthis._data.length)for(var a=this._data.length;a0&&void 0!==arguments[0]?arguments[0]:{};this._lifeCycles=e,this._releasePromisesFromCache()}},{key:"_resetTargetPromise",value:function _resetTargetPromise(e){var t=this;setTimeout(function(){t._notifiers[e]=Xo,t._promises.set(e,t._makeNotifierPromise(e))},0)}}]),LifeCycleManager}(),Qo="drag",Zo="hover",Jo="selectiondrag",eu="click",tu="longtouch",nu="touchdrag",ru="*",iu=1,au=-1,ou=0,uu=2,cu=-2,su=function(){function defineProperties(e,t){for(var n=0;n0?(e[n]===uu&&t.entrySet[0].push(n),e[n]===iu&&t.entrySet[1].push(n)):e[n]<0&&(e[n]===cu&&t.exitSet[0].push(n),e[n]===au&&t.exitSet[1].push(n)),t.completeSet.push(n);return["entrySet","exitSet"].forEach(function(e){t[e]=t[e].map(function(e){return e.map(Number)})}),t.completeSet=t.completeSet.map(Number),t}},{key:"reset",value:function reset(e){var t=this._set;if(e)e.forEach(function(e){t[e]=ou});else{var n=this._lockedSelection;for(var r in t)r in n||(t[r]=ou)}return this._resetted=!0,this}},{key:"getEntrySet",value:function getEntrySet(){var e=this._set,t=[];for(var n in e)e[n]===iu&&t.push(n);return t}},{key:"getExistingEntrySet",value:function getExistingEntrySet(e){var t=this._set;return e.filter(function(e){return t[e]===iu||t[e]===uu})}},{key:"getExistingExitSet",value:function getExistingExitSet(e){var t=this._set;return e.filter(function(e){return t[e]===au||t[e]===cu})}},{key:"getOldEntry",value:function getOldEntry(){var e=this._set,t=[];for(var n in e)e[n]===uu&&t.push(n);return t}},{key:"getOldExit",value:function getOldExit(){var e=this._set,t=[];for(var n in e)e[n]===cu&&t.push(n);return t}},{key:"getExitSet",value:function getExitSet(){var e=this._set,t=[];for(var n in e)e[n]===au&&t.push(n);return t}},{key:"getCompleteSet",value:function getCompleteSet(){var e=this._set,t=[];for(var n in e)t.push(n);return t}},{key:"getCompleteSetCount",value:function getCompleteSetCount(){return this._completeSetCount}},{key:"resetted",value:function resetted(){return this._resetted}},{key:"toggle",value:function toggle(){var e=this._set;for(var t in e)e[t]===iu?e[t]=au:e[t]===au?e[t]=iu:e[t]===uu?e[t]=cu:e[t]=uu;return this}}]),SelectionSet}();function helper_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t3&&void 0!==arguments[3]?arguments[3]:{},i=this.sideEffects(),a=i[e],o=!1;r.filter&&r.filter(a)&&(o=!0),!o&&i[e].apply(t,n,r)}},{key:"registerPropagationBehaviourMap",value:function registerPropagationBehaviourMap(e){return this._propagationBehaviourMap=Object.assign(this._propagationBehaviourMap,e||{}),this}},{key:"dispatchBehaviour",value:function dispatchBehaviour(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=void 0===n.propagate||n.propagate,i=this._actions.behavioural[e],a=function getSideEffects(e,t){var n=[];for(var r in t){var i=r.split(",");i.some(function(t){return t===e})&&n.push({effects:t[r],behaviours:i})}return n}(e,this._behaviourEffectMap);if(this._propagationInf=n,i){var o=i.dispatch(t),u=this.getPropagationSelectionSet(o);this._entryExitSet[e]=u;var c=this.shouldApplySideEffects(r);if(r&&this.propagate(e,t,o.find(function(e){return e.sourceSelectionSet}),a),c){var s=this.getApplicableSideEffects(a,t,n);this.applySideEffects(s,u,t)}}return this}},{key:"getPropagationSelectionSet",value:function getPropagationSelectionSet(e){return e.find(function(e){return!e.sourceSelectionSet})}},{key:"shouldApplySideEffects",value:function shouldApplySideEffects(){return!0}},{key:"changeBehaviourStateOnPropagation",value:function changeBehaviourStateOnPropagation(e,t){return t instanceof Function?this._sourceBehaviours[e]=t:this._sourceBehaviours[e]=function(){return t},this}},{key:"changeSideEffectStateOnPropagation",value:function changeSideEffectStateOnPropagation(e,t){t instanceof Function?this._sourceSideEffects[e]=t:this._sourceSideEffects[e]=function(){return t}}},{key:"propagate",value:function propagate(){return this}},{key:"sideEffects",value:function sideEffects(){return arguments.length?(this._sideEffects=arguments.length<=0?void 0:arguments[0],this):this._sideEffects}},{key:"enableSideEffects",value:function enableSideEffects(e){return fu(this,e,!0),this}},{key:"disableSideEffects",value:function disableSideEffects(e){return fu(this,e,!1),this}},{key:"dissociateBehaviour",value:function dissociateBehaviour(e,t){var n=this._actionBehaviourMap;for(var r in n)if(r===t){var i=n[r];i.behaviours=i.behaviours.filter(function(t){return t!==e})}return this}},{key:"dissociateSideEffect",value:function dissociateSideEffect(e,t){var n=this._behaviourEffectMap;return n[t]=n[t].filter(function(t){return(t.name||t)!==e}),this}},{key:"getApplicableSideEffects",value:function getApplicableSideEffects(e){return e}},{key:"attachPropagationListener",value:function attachPropagationListener(e){return e.unsubscribe("propagation"),e.on("propagation",this.onDataModelPropagation()),this}},{key:"onDataModelPropagation",value:function onDataModelPropagation(){var e=this;return function(t){var n=t.payload,r=n.action;e.dispatchBehaviour(r,n,{propagate:!1})}}},{key:"createSelectionSet",value:function createSelectionSet(e,t){var n=t||this._actions.behavioural,r=this._selectionSet,i=this._volatileSelectionSet;for(var a in n)({}).hasOwnProperty.call(n,a)&&(r[a]=new lu(e),i[a]=new lu(e,!0));return this._volatileSelectionSet=i,this.selectionSet(r),this}},{key:"selectionSet",value:function selectionSet(){return arguments.length?(this._selectionSet=arguments.length<=0?void 0:arguments[0],this):this._selectionSet}},{key:"initializeSideEffects",value:function initializeSideEffects(){var e=this._sideEffectDefinitions;return this.sideEffects(function initializeSideEffects(e,t){var n=e._sideEffects;return(t=t instanceof Array?t:Object.values(t)).forEach(function(t){var r=n[t.formalName()];n[t.formalName()]=r||new t(e)}),n}(this,e)),this}},{key:"registerPhysicalActions",value:function registerPhysicalActions(e){var t=function initializePhysicalActions(e,t){var n={};for(var r in t)({}).hasOwnProperty.call(r,t)||(n[r]=t[r](e));return n}(this,e);return Object.assign(this._actions.physical,t),this}},{key:"propagateWith",value:function propagateWith(e,t){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],r=this._actions.behavioural;if(t.length){if(e===ru)for(var i in r)this._propagationFields[i]={fields:t,append:n};else this._propagationFields[e]={fields:t,append:n};return this}return this._propagationFields}},{key:"mapActionsAndBehaviour",value:function mapActionsAndBehaviour(){var e=this._actions.physical,t=this._actionBehaviourMap,n=this._mappedActions;for(var r in t)if(!{}.hasOwnProperty.call(r,t)){var i=void 0,a=t[r];i=a.target;var o=a.touch;i||(i=this.context.getDefaultTargetContainer());var u=Ro()?!0===o||void 0===o:!o,c=r+"-"+a.behaviours.join();u&&!n[c]&&this.bindActionWithBehaviour(e[r],i,a.behaviours),n[c]=!0}return this}},{key:"registerPhysicalBehaviouralMap",value:function registerPhysicalBehaviouralMap(e){return Object.assign(this._actionBehaviourMap,e),this}},{key:"bindActionWithBehaviour",value:function bindActionWithBehaviour(e,t,n){var r=this;return"string"==typeof t&&(t=[t]),t.forEach(function(t){var i=r.context.mount(),a=t.node instanceof Function?t:Ao(i).selectAll(t);n.length&&!a.empty()&&(a instanceof Array?a.forEach(function(t){e(Ao(t),n)}):e(a,n))}),this}},{key:"getPropagationInf",value:function getPropagationInf(){return this._propagationInf}},{key:"getAddSetFromCriteria",value:function getAddSetFromCriteria(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=this.context,r=t.data?t.data:n.getDataModelFromIdentifiers(e,"all"),i=n.fields().x||[],a=n.fields().y||[],o=i.every(function(e){return e.type()===ir.FieldType.MEASURE}),u=a.every(function(e){return e.type()===ir.FieldType.MEASURE});return{model:r,uids:null===e?null:t.data?function filterPropagationModel(e,t,n){var r=t.getData(),i=r.data,a=r.schema,o=void 0;if(a.length){var u=e.getFieldsConfig();o=e.select(function(e){return i.some(function(t){return a.every(function(r,i){return!(n||r.name in u&&u[r.name].def.type!==ir.FieldType.MEASURE)||t[i]===e[r.name].valueOf()})})},{saveChild:!1})}else o=t;return o}(this.getFullData(),t.data[0],o&&u).getData().uids:r[0].getData().uids}}},{key:"getSelectionSets",value:function getSelectionSets(e){var t=this.context.id(),n=(this._propagationInf||{}).sourceId,r=[];return n!==t&&(r=[this._volatileSelectionSet[e]]),n&&r.push(this.selectionSet()[e]),r}},{key:"getFullData",value:function getFullData(){return this.context.data()}},{key:"resetted",value:function resetted(){return this._resetted}},{key:"getEntryExitSet",value:function getEntryExitSet(e){return this._entryExitSet[e]}}]),Firebolt}(),mu=function(){function defineProperties(e,t){for(var n=0;n1&&void 0!==arguments[1]?arguments[1]:{},n=e.sourceIdentifiers;return n?n.getSchema().map(function(e){return e.name}):t instanceof Array?t[0]:Object.keys(t||{})}(u,n.criteria),sourceSelectionSet:!0===e._volatile}}},{key:"enable",value:function enable(){this._enabled=!0}},{key:"disable",value:function disable(){this._enabled=!1}},{key:"isEnabled",value:function isEnabled(){return this._enabled}}],[{key:"mutates",value:function mutates(){return!1}}]),GenericBehaviour}(),_u=function(){function defineProperties(e,t){for(var n=0;nk[0]?k:w,S=C===k?w:k;C[1]100&&Math.abs(i.x-a.x)<=5)){a.x=Math.max(0,Math.min(a.x,o.width)),a.y=Math.max(0,Math.min(a.y,o.height));var s=Ru(n.context.getSourceInfo(),{startPos:i,endPos:a,snap:!0},n.context.data().getFieldsConfig());s.dragEnd=!0,t.forEach(function(e){return n.dispatchBehaviour(e,s)})}}))},zu=function hover(e){return function(t,n){var r=function dispatchBehaviour(t){var r=Io(),i=e.context,a=i.config().interaction.tooltip.mode,o=jo(i.getDrawingContext().svgContainer,r),u=i.getNearestPoint(o.x,o.y,{getAllPoints:"consolidated"===a||"fragmented"===a,data:t,event:r}),c={criteria:u?u.id:null,showInPosition:u.showInPosition,target:u.target,position:o,mode:a};n.forEach(function(t){return e.dispatchBehaviour(t,c)}),r.stopPropagation()};t.on("mouseover",r).on("mousemove",r).on("mouseout",function(){n.forEach(function(t){return e.dispatchBehaviour(t,{criteria:null})})})}},Hu=function generatePayloadFromEvent(e,t,n){var r=n.context,i=jo(r.getDrawingContext().svgContainer,t.touches?t.touches[0]:t),a=r.getNearestPoint(i.x,i.y,{data:e,event:t});return{criteria:a?a.id:null,showInPosition:a.showInPosition,target:a.target,position:i}},Vu=function click(e){return function(t,n){t.on("click",function dispatchBehaviour(t){var r=Io(),i=Hu(t,r,e);n.forEach(function(t){return e.dispatchBehaviour(t,i)}),r.stopPropagation()})}};function physical_defineProperty(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var Uu=(physical_defineProperty(Du={},Qo,function drag(e){return function(t,n){Bu(t,n,e)}}),physical_defineProperty(Du,Zo,zu),physical_defineProperty(Du,eu,Vu),physical_defineProperty(Du,tu,function longtouch(e){return function(t,n){var r=void 0,i=void 0;i=!1,r=Io(),t.on("touchstart",function(t){r=Io(),i=!1,setTimeout(function(){i?n.forEach(function(t){return e.dispatchBehaviour(t,{criteria:null})}):function dispatchBehaviour(t){var i=Hu(t,r,e);n.forEach(function(t){return e.dispatchBehaviour(t,i)}),r.stopPropagation()}(t)},100)}).on("touchend",function(){i=!0})}}),physical_defineProperty(Du,nu,function touchdrag(e){return function(t,n){Bu(t,n,e,!0)}}),Du),Wu=function(){function defineProperties(e,t){for(var n=0;n1&&void 0!==arguments[1]&&arguments[1];var t=arguments[2],n=arguments[3];this.firebolt.context.layers().forEach(function(r){return!1!==r.config().interactive&&r.applyInteractionStyle(t,e.uids,n)})}}]),SurrogateSideEffect}(),Xu=function(){function defineProperties(e,t){for(var n=0;n=0&&l<=t&&c>=0&&s<=n){var f=Ru(a.getSourceInfo(),{startPos:{x:u,y:c},endPos:{x:l,y:s}},a.data().getFieldsConfig());o(f)}}).on("end",function(){var e=i.width,t=i.height,n=Math.min(e-r.width,Math.max(r.x,0)),u=Math.min(t-r.height,Math.max(r.y,0)),c=u+r.height,s=n+r.width;if(n>=0&&s<=e&&u>=0&&c<=t){var l=Ru(a.getSourceInfo(),{startPos:{x:n,y:u},endPos:{x:s,y:c},snap:!0},a.data().getFieldsConfig());l.dragEnd=!0,o(l)}}))}}(c)(Ao(this),["brush"],x)}).merge(w).each(function(e){var t=Ao(this);for(var n in b&&(t=t.transition().duration(b.duration)),e)({}).hasOwnProperty.call(e,n)&&fa(e[n])&&t.attr(n,e[n])}),C=Gi(u.defClassName,this._id,d);return k.classed(C.join(" "),!0),k.classed(u.className,!0),this}},{key:"hide",value:function hide(e){Qu(this,e.sideEffectGroup,!1)}},{key:"show",value:function show(e){Qu(this,e.sideEffectGroup,!0)}}],[{key:"defaultConfig",value:function defaultConfig(){return{defClassName:"selection-box-group",className:"",classPrefix:"muze",box:{defClassName:"selection-box",className:""},transition:{duration:200}}}},{key:"formalName",value:function formalName(){return"selectionBox"}}]),SelectionBox}(),ec={position:"absolute",width:0,height:0},tc={classPrefix:"muze",defClassName:"tooltip-box",connectorClassName:"tooltip-connectors",className:"",row:{margin:0},content:{spacing:5,iconContainerSize:10,iconScale:1,iconShape:"circle",iconColor:"#ff0000",rowMargin:"0px",margin:10,separator:":",className:"tooltip-content-container",parentClassName:"tooltip-content-parent-container"},arrow:{size:10,disabled:!1,defClassName:"tooltip-arrow",className:"",color:"rgba(195,195,195,0.85)"}},nc=function getArrowPos(e,t,n,r){var i=void 0,a=n.x,o=n.y,u=n.boxHeight,c=n.boxWidth,s=r.arrow.disabled?0:r.arrow.size;if("left"===e||"right"===e){var l=0,f=u/2,h=t.y+t.height,d=o+u;t.y>o?(l=t.y-o,f=(h>=d?d-t.y:t.height)/2):d>h&&(f=Math.abs(o-(t.y+t.height))/2),i=l+f-s/2}else{var p=0,y=c/2,g=t.x+t.width,v=a+c;t.x>a?(p=t.x-a,y=(g>=v?v-t.x:t.width)/2):v>g&&(y=Math.abs(a-(t.x+t.width))/2),i=p+y-s/2}return i},rc=function placeArrow(e,t,n){var r=e._tooltipArrow,i=e._tooltipBackground,a=e._config,o=a.classPrefix,u=a.arrow,c=Gi(u.defClassName,e._id,a.classPrefix);r.style("display","block"),r.attr("class",""+c.join(" ")),"left"===t||"right"===t?(r.style("top",n+"px"),r.style("left",""),i.style("top",n+"px"),i.style("left","")):("bottom"===t?r.style("top","100%"):r.style("top","-"+u.size+"px"),r.style("left",n+"px"),"bottom"===t?i.style("top","100%"):i.style("top","-"+(u.size+3)+"px"),i.style("left",n+"px")),r.classed(o+"-tooltip-arrow",!0),r.classed(o+"-tooltip-arrow-"+e._arrowOrientation,!1),r.classed(o+"-tooltip-arrow-"+t,!0),i.classed(o+"-tooltip-background-arrow",!0),i.classed(o+"-tooltip-background-arrow-"+e._arrowOrientation,!1),i.classed(o+"-tooltip-background-arrow-"+t,!0)};n(11);function strategy_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t1&&void 0!==arguments[1]?arguments[1]:{},n=arguments[2],r=[],i=e.getData(),a=i.data,o=i.schema,u=t.formatters,c=t.separator,s=e.getFieldsConfig(),l=e.getFieldspace(),f=l.fieldsObj(),h=n.dimensionMeasureMap,d=n.axes,p=n.detailFields||[],y=o.filter(function(e){return e.type===ir.FieldType.DIMENSION}),g=o.filter(function(e){return e.type===ir.FieldType.MEASURE}),v=o.find(function(e){return-1!==p.indexOf(e.name)}),m=a.length,b=function getRowContent(e,n){var r=void 0,i=void 0,o=void 0,p=[],y=s[e].index,g=s[e].def.subtype===ir.DimensionSubtype.TEMPORAL?f[e].getMinDiff():0,v=u&&u[e]||oc(n,function(e){return e});if(null!==r){var b=n===ir.FieldType.MEASURE?a.map(function(e){return e[y]}):[].concat(strategy_toConsumableArray(new Set(a.map(function(e){return e[y]}))));b=b.filter(function(e){return""!==e});var _=d.color[0],x=d.shape[0],w=d.size[0],k=(_||x||w)&&m>1&&n!==ir.FieldType.MEASURE;b.forEach(function(n,u){var f=void 0,d=h[e];if(d&&d.length&&m>1){f=n;var y={value:""};k&&(y={type:"icon",color:_.getColor(n),shape:x.getShape(n),size:w.getSize(n)*t.iconScale}),d.length>1?(p.push([y,""+f]),d.forEach(function(e){o=s[e].index,r=a[u][o],i=oc("measure",l.fields[o]._ref.numberFormat())(r,g),p.push([{value:""+e+c,style:{"margin-left":t.margin+"px}"},className:t.classPrefix+"-tooltip-key"},{value:""+i,className:t.classPrefix+"-tooltip-value"}])})):(o=s[d[0]].index,r=a[u][o],i=oc("measure",l.fields[o]._ref.numberFormat())(r,g),p.push([y,{value:""+f+c,className:t.classPrefix+"-tooltip-key"},{value:""+i,className:t.classPrefix+"-tooltip-value"}]))}else f=e,i=v(r=n,g),p.push([{value:""+f+c,className:t.classPrefix+"-tooltip-key"},{value:""+i,className:t.classPrefix+"-tooltip-value"}])})}return p},_="keyValue";if(m>1&&v)r=function getTabularData(e,t,n,r){var i=[];return i.push(t.map(function(e){return e.name})),e.forEach(function(e){var a=[];t.forEach(function(t,i){var o=t.subtype===ir.DimensionSubtype.TEMPORAL?r[t.name]:0,u=t.type===ir.FieldType.MEASURE&&n.fields[i]._ref.numberFormat(),c=oc(t.subtype||t.type,u)(e[i],o);a.push(c)}),i.push(a)}),i}(a,o,l,n.timeDiffs),_="table";else{y.forEach(function(e){var t=e.subtype?e.subtype:e.type;r=[].concat(strategy_toConsumableArray(r),strategy_toConsumableArray(b(e.name,t)))});var x=[].concat(strategy_toConsumableArray(new(Function.prototype.bind.apply(Set,[null].concat(strategy_toConsumableArray(Object.values(h)))))));(m>1?g.filter(function(e){return-1===x.indexOf(e.name)}):g).forEach(function(e){var t=e.subtype?e.subtype:e.type;r=[].concat(strategy_toConsumableArray(r),strategy_toConsumableArray(b(e.name,t)))})}return{content:r,displayFormat:_}},cc={keyValue:function keyValue(e,t,n){return uc(e,t,n)}},sc="keyValue",lc=function(){function defineProperties(e,t){for(var n=0;n0?(this._config=na(this._config,arguments.length<=0?void 0:arguments[0]),this):this._config}},{key:"update",value:function update(e){return this._model=e.model,this._strategy=void 0!==e.strategy?e.strategy:sc,this._formatter=e.formatter,this}},{key:"context",value:function context(e){return this._context=e,this}},{key:"render",value:function render(e){var t=void 0,n=this._config,r=n.iconContainerSize,i=this._formatter,a=n.rowMargin,o=this._model;if(this._mount=e,(t=o instanceof Array?o:i instanceof Function?i(this._model,this._context):cc[this._strategy](this._model,this.config(),this._context))instanceof Function)e.html(t());else{var u=t,c="default";Di(t)&&(u=t.content,c=t.displayFormat);var s=Eo(e,"div",[c],n.classPrefix+"-tooltip-content",{},function(e){return e});if("table"===c){var l=Eo(s,"table",[1],n.classPrefix+"-tooltip-table"),f=Eo(l,"tbody",[1],n.classPrefix+"-tooltip-table-tbody"),h=Eo(f,"tr",u,n.classPrefix+"-tooltip-table-row");h.each(function(e,t){Ao(this).classed(n.classPrefix+"-tooltip-table-row-"+t,!0)}),Eo(h,"td",function(e){return e},n.classPrefix+"-tooltip-table-cell").each(function(e){Ao(this).html(e)})}else{var d=Eo(s,"div",u,n.classPrefix+"-tooltip-row"),p=Eo(d,"span",function(e){return e},n.classPrefix+"-tooltip-content");p.attr("class",n.classPrefix+"-tooltip-content"),Fo(d,{margin:a}),Fo(p,{display:"inline-block","margin-right":n.spacing+"px"}),p.each(function(e){var t=Ao(this);if(t.html(""),e instanceof Object)if("icon"===e.type){var n=Eo(t,"svg",[1]),i=Eo(n,"path",[1]),a=e.shape instanceof Function?e.shape:pa(e.shape);To(n,{x:0,y:0,width:r,height:r}),To(i,{d:a.size(e.size)(),transform:"translate("+r/2+", "+r/2+")"}),Fo(i,{fill:e.color}),Fo(n,{width:r+"px",height:r+"px"})}else t.html(e.value),e.className&&t.classed(e.className,!0),Fo(t,e.style);else t.html(e)})}}return this}},{key:"clear",value:function clear(){return this._model=null,this}}],[{key:"defaultConfig",value:function defaultConfig(){var e=tc.content;return e.classPrefix=tc.classPrefix,e}}]),Content}(),hc=function(){function defineProperties(e,t){for(var n=0;n0){var e=na({},this.constructor.defaultConfig());return this._config=na(e,arguments.length<=0?void 0:arguments[0]),this}return this._config}},{key:"addClass",value:function addClass(e){return this._tooltipContainer.classed(e,!0),this}},{key:"context",value:function context(){return arguments.length?(this._context=arguments.length<=0?void 0:arguments[0],this):this._context}},{key:"content",value:function content(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=this.config(),i=r.classPrefix,a=r.content.className,o=r.formatter,u=n.className||i+"-"+a+"-"+e,content=this._contents[e]=this._contents[e]||new fc,c=Eo(this._contentContainer,"div",[n.order],u);c.attr("class",i+"-"+a+" "+u),function reorderContainers(e,t){e.selectAll(t).sort(function(e,t){return e-t})}(this._contentContainer,"."+i+"-"+a);var s=r.content;return n.classPrefix=this._config.classPrefix,content.config(s),null===t?(content.clear(),c.remove(),delete this._contents[e]):(content.update({model:t,formatter:n.formatter||o}),content.context(this._context),content.render(c)),Object.keys(this._contents).length||this.hide(),this}},{key:"getContents",value:function getContents(){return Object.values(this._contents)}},{key:"position",value:function position(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(!Object.keys(this._contents).length)return this.hide(),this;this.show();var r=this._target,i=n.repositionArrow;if(r&&i){var a=this._tooltipContainer.node(),o=this._config,u=o.arrow.disabled,c=u?0:o.arrow.size,s=this._arrowOrientation,l="left"===s||"right"===s?t+a.offsetHeight-cr.y+r.height:e+a.offsetWidth-cr.x+r.width;if(!u)if(l){var f=void 0;this._tooltipArrow.style("display","none"),this._tooltipBackground.style("display","none"),this._tooltipConnectorContainer.style("display","block");var h=this._tooltipConnectorContainer.selectAll("path").data([1]),d=h.enter().append("path");"left"===s?f="M "+e+" "+(t+a.offsetHeight/2)+" L "+(r.x+r.width)+" "+(r.y+r.height/2):"right"===s?f="M "+(e+a.offsetWidth)+" "+(t+a.offsetHeight/2)+" L "+r.x+" "+(r.y+r.height/2):"bottom"===s&&(f="M "+(e+a.offsetWidth/2)+" "+(t+a.offsetHeight)+" L "+(r.x+r.width/2)+" "+r.y),d.merge(h).attr("d",f).style("display","block")}else{var p=nc(s,r,{x:e,y:t,boxHeight:a.offsetHeight,boxWidth:a.offsetWidth},this._config);rc(this,this._arrowOrientation,p),this._tooltipConnectorContainer.style("display","none")}}var y=this._offset||{x:0,y:0};return this._tooltipContainer.style("left",y.x+e+"px").style("top",y.y+t+"px"),this}},{key:"positionRelativeTo",value:function positionRelativeTo(e){var t=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=void 0,i=n.orientation;if(this.show(),!e)return this.hide(),this;var a=this._extent,o=this._tooltipContainer.node();this._tooltipContainer.style("top","0px").style("left","0px");var u=o.offsetWidth+2,c=o.offsetHeight+2,s=this._config,l=this._offset,f=s.arrow.disabled,h=f?0:s.arrow.size,d=void 0===n.draw||n.draw,p=e.y,y=e.x+e.width+l.x,g=a.width-y,v=e.x+l.x-a.x,m=p>c+h,b=g>=u+h,_=v>=u+h;return this._target=e,i||(i=m?"vertical":b||_?"horizontal":"vertical"),"horizontal"===i?r=function positionHorizontal(){var n=void 0,r=e.x+e.width,i=e.y;return b?(n="left",r+=h):_?(r=e.x-u,n="right",r-=h):(n="left",r+=h),e.height2&&void 0!==arguments[2]?arguments[2]:{},r=0,i=0,a=e.mergedEnter.model,o=this.firebolt.context,u=this.drawingContext();if(a.isEmpty()||null===t.criteria||!1===e.isSourceFieldPresent)return this.hide(n,null),this;var c=this._tooltips,s=this.config(),l={width:u.width,height:u.height},f=t.showInPosition,h=s.padding,d=[],p="fragmented"===s.mode,y=o.getSourceInfo(),g=y.fields,v=!!(!!g.x[0]&&g.x[0].type()===ir.FieldType.DIMENSION),m=t.position,b=[],_={},x=a.getData().uids;p?d.push.apply(d,function tooltip_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);tu.height:i>u.width)break;b.push({x:z.x,y:z.y,width:H.width,height:H.height,tooltip:R})}}for(var V in c)if(!_[V]){var U=c[V];U.content(t.action,null),U.getContents().length||(U.remove(),delete c[V])}return p&&(!function spaceOutBoxes(e,t,n){var r=void 0,i=void 0,a=void 0,o=void 0,u=void 0,c=e.length,s=function spaceOutIfOverlap(e,t,u){a=e.x,o=e.width,r=e.y,i=e.height;var c=r+i,s=a+o;n?(u?rt.y)&&(t.y=u?e.y-t.height-5:c+5):(u?at.x)&&(t.x=u?e.x-t.width-5:s+5)};for(e.sort(function(e,t){return n?e.y-t.y:e.x-t.x}),u=0,u=0;ut.height||e[u].x+e[u].width>t.width)for(n?e[u].y-=e[u].height+e[u].y-t.height:e[u].x-=e[u].width+e[u].x-t.width,u=c-1;u>0;u--)s(e[u],e[u-1],!0)}(b,l,v),b.forEach(function(e){return e.tooltip.position(e.x,e.y,{repositionArrow:!0})})),this}},{key:"hide",value:function hide(e){var t=this._tooltips;for(var n in t)if({}.hasOwnProperty.call(t,n)){var r=e.strategy||this._strategy;t[n].content(r,null),t[n].hide()}}}],[{key:"defaultConfig",value:function defaultConfig(){return{padding:5,offset:{x:0,y:0}}}},{key:"formalName",value:function formalName(){return"tooltip"}}]),Tooltip}(),vc=(n(15),function(){function defineProperties(e,t){for(var n=0;n2&&void 0!==arguments[2]?arguments[2]:{},r=this._strategies[n.strategy||this._strategy];return!1!==e.isSourceFieldPresent&&r(e,this,n.strategy||this._strategy),this}}],[{key:"formalName",value:function formalName(){return"highlighter"}},{key:"target",value:function target(){return"visual-unit"}}]),PlotHighlighter}(),wc=function(){function defineProperties(e,t){for(var n=0;n67.5&&v<=90||(r+=2*y),u=p,u=90===l?y:270===l?-y:0,o===Yc?(u=0===t&&c&&s===ds?u+u/2:u,Ao(this).attr("transform","translate("+(-u+f)+" \n "+(-r-f)+") rotate("+l+")")):(u=0===t&&c&&s===ds?u-u/2:u,Ao(this).attr("transform","translate("+(u-f)+" \n "+(r+f)+") rotate("+l+")"))}),t},Os=function changeTickOrientation(e,t,n){var r=t._smartTicks,i=t.config(),a=t.dependencies().labelManager,o=i.labels,u=i.orientation,c=o.rotation,s=o.smartTicks,l=e.selectAll(".tick text");if(l.selectAll("tspan").remove(),0===c||!1!==s||"top"!==u&&"bottom"!==u)if(0===c&&!1===s)l.attr("transform","");else{l.attr("y",0).attr("x",0).text(""),Eo(l,"tspan",function(e,t){return r[t].lines},"smart-text").attr("dy","0").style("opacity","0").transition().duration(1e3).attr("dy",function(e,t){return"bottom"===u||0!==t?r[t].oriTextHeight:-r[t].oriTextHeight*(r[t].lines.length-1)-n}).style("opacity",1).attr("x",0).text(function(e){return e})}else Ms(t,l,a,i);return l},Ts=function setFixedBaseline(e){e.config().fixedBaseline&&e.setFixedBaseline()},Fs=function setAxisNamePos(e,t,n){var r=n.axisNameHeight,i=n.yOffset,a=n.labelOffset,o=n.availableSpace;switch(t){case Xc:e.attr("transform","translate("+-(o.width-r)+","+(i+a)+")rotate(-90)");break;case Kc:e.attr("transform","translate("+(o.width-r)+","+(i+a)+")rotate(90)");break;case Yc:e.attr("transform","translate("+o.width/2+","+(-o.height+r)+")");break;case Gc:e.attr("transform","translate("+o.width/2+","+(o.height-r/2)+")")}return e};function cartesian_axis_helper_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);tt.length&&(t=p,r=e.smartTicks()?e.smartTicks()[s]:{},n=o[s]),d}),n=h.getOriSize(t),{largestLabel:t,largestLabelDim:n,axisTickLabels:i,allLabelLengths:o,smartTick:r}},js=function setOffset(e){var t=0,n=0,r=e.logicalSpace(),i=e.config(),a=i.orientation,o=i.xOffset,u=i.yOffset;a===Xc&&(t=void 0===o?r.width:o),a===Yc&&(n=void 0===u?r.height:u),e.config({xOffset:t,yOffset:n})},Is=function adjustRange(e,t,n,r){var i=function getAxisOffset(e,t,n){var r=Math.abs(t[1]-t[0])/(n[1]-n[0])*e,i=t[1]-t[0],a=i/r;return(i-i/(a+1)*a)/2}(e,t,n);return r===Yc||r===Gc?(t[0]+=i,t[1]-=i):(t[0]-=i,t[1]+=i),t},Ds=function registerChangeListeners(e){return e.store().model.next(["domain","range","mount","config"],function(){for(var t=arguments.length,n=Array(t),r=0;r0&&e.length*(t+this._minTickDistance.width)>i&&this.config({labels:{rotation:-90}})}return this}},{key:"adjustRange",value:function adjustRange(){return this}},{key:"getScaleValue",value:function getScaleValue(e){if(null!==e&&void 0!==e)return this.scale()(e)}},{key:"getTickSize",value:function getTickSize(){return this.axis().tickSize()}},{key:"getAxisDimensions",value:function getAxisDimensions(){return this.axisDimensions(function computeAxisDimensions(e){var t={},n=e.config(),r=n.name,i=n.labels,a=n.tickValues,o=(i.smartTicks?0:i.rotation)*Math.PI/180,u=e.dependencies().labelManager,c=Ns(e),s=c.largestLabelDim,l=c.axisTickLabels,f=c.smartTick,h=s.height,d=s.width;return 0===e.domain().length?null:(!1===e._rotationLock&&(e.setRotationConfig(a||l,s.width),e._rotationLock=!1),t=i.smartTicks?f:{width:Math.abs(h*Math.sin(o))+Math.abs(d*Math.cos(o)),height:Math.abs(d*Math.sin(o))+Math.abs(h*Math.cos(o))},u.setStyle(e._axisNameStyle),{tickSize:e.getTickSize(),tickLabelDim:t,axisLabelDim:u.getOriSize(r),largestLabelDim:s,axisTickLabels:l})}(this)),this.axisDimensions()}},{key:"getLogicalSpace",value:function getLogicalSpace(){return this.logicalSpace()||(this.logicalSpace(function calculateContinousSpace(e){e.range();var t=e.config(),n=e.getAxisDimensions(),r=t.orientation,i=t.show,a=t.showAxisName,o=n.axisLabelDim;if(!1===i)return{width:0,height:0};var u=o.width;if(r===Yc||r===Gc){var c=Ls(e,n,t),s=c.width,l=c.height;return{width:Math.max(s,u),height:l}}var f=Rs(e,n,t),h=f.width,d=f.height;return{width:h,height:Math.max(d,a?u:0)}}(this)),js(this),this.logicalSpace()),this.logicalSpace()}},{key:"invert",value:function invert(){for(var e=this,t=arguments.length,n=Array(t),r=0;ra[1];return"band"===r?(n=i.invertExtent(e,t),[i(o?n[n.length-1]:n[0]),i(o?n[0]:n[n.length-1])+i.bandwidth()]):[e,t]}},{key:"updateDomainBounds",value:function updateDomainBounds(e){var t=this.domain();return this.config().domain?t=this.config().domain:(0===t.length&&(t=e),e.length&&(t=[Math.min(t[0],e[0]),Math.max(t[1],e[1])])),this.domain(t)}},{key:"updateDomainCache",value:function updateDomainCache(e){!1===this._domainLock&&(this.domain([]),this._domainLock=!0);var t=[];return e&&e.forEach(function(e){void 0!==e&&null!==e&&t.push(e)}),this.updateDomainBounds(t)}},{key:"getMinTickDifference",value:function getMinTickDifference(){return this.domain()}},{key:"getFormattedTickValues",value:function getFormattedTickValues(e){return e}},{key:"setTickValues",value:function setTickValues(){var e=this.config().tickValues;return e?(e instanceof Array&&this.axis().tickValues(e),this):this}},{key:"getUnitWidth",value:function getUnitWidth(){return 0}},{key:"serialize",value:function serialize(){return{name:this.name,type:this.type,range:this.range(),config:this.config()}}},{key:"registerEvent",value:function registerEvent(e,t){this._eventList.push({name:e,action:t})}},{key:"on",value:function on(e,t){e=e||"update",this.registerEvent(e,t)}},{key:"render",value:function render(){return this.mount()&&function renderAxis(e){var t=e.config(),n=e.dependencies().labelManager,r=e.mount(),i=e.range(),a=e.axis(),o=e.scale(),u=e._axisNameStyle,c=e._tickLabelStyle,s=e.formatter,l=e.tickValues,f=t.orientation,h=t.name,d=t.labels,p=t.xOffset,y=t.yOffset,g=t.axisNamePadding,v=t.className,m=t.showAxisName,b=t.show,_=t.id,x=t.interpolator,w=t.classPrefix;if(b){var k=e.getTickSize(),C=Eo(Ao(r),"g",[e],""+v,{},function(e){return e.config().id});n.setStyle(c),"linear"===x&&e.setTickValues();var S=o.ticks||o.quantile||o.domain;s&&a.tickFormat(s(l||a.tickValues()||S()));var P=Math.abs(i[0]-i[1]),A=e.axisDimensions().tickLabelDim;C.attr("transform","translate("+p+","+y+")"),Ts(e),!1===d.smartTicks?C.transition().duration(1e3).call(a):C.call(a),C.selectAll(".tick").classed(w+"-ticks",!0),C.selectAll(".tick line").classed(w+"-tick-lines",!0),C.selectAll(".tick text").classed(w+"-ticks",!0).classed(w+"-ticks-"+_,!0),Os(C,e,k);var E=Eo(C,"text",[h],w+"-axis-name").attr("text-anchor","middle").classed(w+"-axis-name-"+_,!0).text(function(e){return e});E.classed(ys,!m);var M=P/2;n.setStyle(u);var O=n.getOriSize(h),T={labelProps:A,tickSize:k,axisNamePadding:g,axisNameHeight:O.height,axisNameWidth:O.width,yOffset:y,xOffset:p,labelOffset:M,availableSpace:e.availableSpace()};Fs(E,f,T)}}(this),this}},{key:"remove",value:function remove(){return this.store().unsubscribeAll(),Ao(this.mount()).remove(),this}},{key:"unsubscribe",value:function unsubscribe(){return this.store().unsubscribeAll(),this}},{key:"isReverse",value:function isReverse(){var e=this.range();return e[0]>e[1]}},{key:"getPixelToValueRatio",value:function getPixelToValueRatio(){var e=this.scale(),t=e.range(),n=e.domain();return Math.abs(t[1]-t[0])/(n[1]-n[0])}},{key:"id",get:function get(){return this._id}}],[{key:"defaultConfig",value:function defaultConfig(){return Es}}]),SimpleAxis}(),Vs=function(){function defineProperties(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:0,t=arguments[1],n=arguments[2],r=arguments[3],i=n.left,a=n.right,o=n.top,u=n.bottom,c=this.config(),s=c.orientation,l=c.fixedBaseline,f=this.getAxisDimensions().tickLabelDim;if(this.availableSpace({width:e,height:t}),s===Yc||s===Gc){var h=f.width;this.range([(l?0:h/2)+i,e-a-h/2]);var d=this.getLogicalSpace().height;r&&this.config({yOffset:Math.max(d,t)})}else{var p=f.height;this.range([t-u-(l?1:p/2),p/2+o]);var y=this.getLogicalSpace().width;r&&this.config({xOffset:Math.max(y,e)})}return this}},{key:"setTickValues",value:function setTickValues(){var e=this.config().tickValues,t=this.axis();return e?(e instanceof Array&&this.axis().tickValues(e),this):(t.tickValues(this.getTickValues()),this)}},{key:"getTickValues",value:function getTickValues(){var e=this.config(),t=e.orientation,n=e.tickValues,r=this.range(),i=this.axis(),a=Math.abs(r[0]-r[1]),o=Ns(this).largestLabelDim;return n?i.scale().ticks(n):function getNumberOfTicks(e,t,n,r){var i=n.scale().ticks(),a=r.config().numberOfTicks,o=i.length,u=o;return o*(1.5*t)>e&&(u=Math.floor(e/(1.5*t))),u=Math.min(a,Math.max(1,u)),n.scale().ticks(u)}(a,o[t===Gc||t===Yc?"width":"height"],i,this)}},{key:"getMinTickDifference",value:function getMinTickDifference(){return xa(this.config().tickValues)}},{key:"setFixedBaseline",value:function setFixedBaseline(e){var t=this.config(),n=t.orientation,r=t.labels.rotation,i=this.axis(),a=this._axisDimensions.largestLabelDim,o=a.width,u=a.height;return i.tickTransform(function(e,t){return 0!==t||n!==Xc&&n!==Kc?0!==t||n!==Yc&&n!==Gc||0!==r?"":"translate("+o/2+"px, 0px) rotate("+r+"deg)":"translate(0, -"+u/3+"px)"}),e}}],[{key:"type",value:function type(){return Qc}}]),ContinousAxis}(),Zs=function(){function defineProperties(e,t){for(var n=0;n0&&e.length*(t+this._minTickDistance.width)>a&&(a&&o0&&e.length*t>i&&(i&&1.25*a1?t.range:[al].concat(props_toConsumableArray(t.range)));var r=na(n,e.config()),i=na(r,t);return i.range instanceof Array&&(i.range=i.range.map(function(e,t){return sl(e,il[t])}),i.stops=t.stops||i.range.length),i.value=sl(i.value,i.value),i}},domain:{},scale:{},uniqueValues:{}};function color_strategy_defineProperty(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function color_strategy_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);tMath.min(t.length,18))for(var r=aa()(function hslInterpolator(){return Ne}(),t.map(function(e){return ul(e)})),i=0;i0&&void 0!==arguments[0]?arguments[0]:[];if(e.length){var t=this.scale(),n=t.range?t.range():null,r=this._colorStrategy.domainRange()(e,this.config().stops,n);this.domain(r.domain),r.range&&this.scale().range(r.range),this.uniqueValues(r.uniqueVals),this.scale().domain(r.scaleDomain||this.domain())}return this}},{key:"serialize",value:function serialize(){return{type:this.constructor.type(),scale:this.scale(),domain:this.domain(),config:this.config()}}},{key:"transformColor",value:function transformColor(e,t){var n=360*e[0],r=100*e[1],i=100*e[2],a=e[3]||1,o=n+t[0],u=r+t[1],c=i+t[2],s=a+t[3]||0;return{color:"hsla("+o+","+u+"%,"+c+"%,"+s+")",hsla:[o/360,u/100,c/100,s]}}},{key:"id",value:function id(){return this._id}}],[{key:"defaultConfig",value:function defaultConfig(){return ol}},{key:"type",value:function type(){return"color"}}]),ColorAxis}(),Sl={value:36,range:[36,1e3]};function size_strategy_defineProperty(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function size_strategy_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t0&&void 0!==arguments[0]?arguments[0]:0,t=this.config().value,n=this.scale(),r=this.domain()||[1,1];return n&&r[0]!==r[1]?this._sizeStrategy.range(e,n,this.domain(),this.uniqueValues()):t}},{key:"updateDomain",value:function updateDomain(e){if(e){var t=(0,this._sizeStrategy.domain)(e,this.config().intervals);this.domain(t.domain),this.uniqueValues(t.uniqueVals),this.scale().domain(t.scaleDomain||this.domain())}return this}},{key:"serialize",value:function serialize(){return{type:this.constructor.type(),scale:this.scale(),domain:this.domain(),range:this.range(),config:this.config()}}},{key:"id",value:function id(){return this._id}}],[{key:"defaultConfig",value:function defaultConfig(){return Sl}},{key:"type",value:function type(){return"size"}}]),SizeAxis}(),Ol={generator:null,value:"circle",range:["circle","diamond","star","cross","square","wye","triangle"]},Tl={config:{},domain:{},scale:{},uniqueValues:{},generator:{}},Fl=function(){function defineProperties(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:[];return e.length&&(this.uniqueValues(e),this.domain(e),this.scale().domain(e),this.config().generator&&(this._generatedShapes=function shapeGenerator(e,t){var n={};return e.forEach(function(e){n[e]=t(e)}),n}(e,this.config().generator))),this}},{key:"serialize",value:function serialize(){return{type:this.constructor.type(),scale:this.scale(),domain:this.domain(),range:this.config().range,config:this.config()}}},{key:"id",value:function id(){return this._id}}],[{key:"defaultConfig",value:function defaultConfig(){return Ol}},{key:"type",value:function type(){return"shape"}}]),ShapeAxis}();function data_type_scale_map_defineProperty(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var Il="measure",Dl="temporal",Ll=(data_type_scale_map_defineProperty(Nl={},"dimension",Zc),data_type_scale_map_defineProperty(Nl,Il,Qc),data_type_scale_map_defineProperty(Nl,Dl,Jc),function(e,t,n){var r=n.groupBy instanceof Array?n.groupBy:[n.groupBy],i=r.map(function(t){return e.findIndex(function(e){return e.name===t})});if(void 0!==i.find(function(e){return-1===e}))throw new Error("Groupby field "+r+" not found in schema");return function nestCollection(e){var t=T();return e.keys.forEach(function(e){return t.key(function(t){return t[e]})}),t.entries(e.data)}({keys:i,data:t})});var Rl;function transform_factory_defineProperty(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var Bl=(transform_factory_defineProperty(Rl={},"identity",function identityTransform(e,t,n){return t}),transform_factory_defineProperty(Rl,"group",Ll),transform_factory_defineProperty(Rl,"stack",function(e,t,n){var r=n.uniqueField,i=n.value,a=n.groupBy,o=n.sort||"descending",u=function normalizeData(e,t,n,r,i){var a=Ll(t,e,{groupBy:r}),o=t.findIndex(function(e){return e.name===r}),u=t.findIndex(function(e){return e.name===n}),c=t.findIndex(function(e){return e.name===i}),s=e.map(function(e){return e[c]}).filter(function(e,t,n){return n.indexOf(e)===t}).sort(),l=t.reduce(function(e,t,n){return e[n]=t.name,e},{});return{data:a.map(function(e){var t={},n=e.values.reduce(function(e,n){return e=n.reduce(function(e,r,i){return i===c?(e[r]=n[u],t[r]=n):i!==u&&(e[l[i]]=r),e},e)},{});return n._tuple=t,s.forEach(function(t){if(void 0===n[t]){n[t]=0;var r=new Array(e.values[0].length);r[o]=e.key,r[c]=t,n._tuple[t]=r}}),n}),keys:s}}(t,e,i,r,a),c=u.keys,s={},l=n.orderBy,f=e.findIndex(function(e){return e.name===l}),h=e.findIndex(function(e){return e.name===a});-1!==f&&(c.forEach(function(e){var n=t.find(function(t){return t[h]===e});s[e]=n[f]}),u.keys.sort(function(e,t){return s[e].localeCompare(s[t])}));var d=va({keys:u.keys,offset:n.offset||"diverging",order:o,data:u.data});return d.forEach(function(e){e.forEach(function(t){t.data=t.data._tuple[e.key]})}),d}),Rl);var zl=function transformFactory(e){var t=Bl[e];if("function"!=typeof t)throw new Error("Invalid transform type supplied.");return t},Hl=function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function sliceIterator(e,t){var n=[],r=!0,i=!1,a=void 0;try{for(var o,u=e[Symbol.iterator]();!(r=(o=u.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){i=!0,a=e}finally{try{!r&&u.return&&u.return()}finally{if(i)throw a}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}();var Vl,Ul=f.BAND,Wl=function getLayerColor(e,t){var n=e.datum,r=e.index,i=t.colorEncoding,a=t.colorAxis,o=t.colorFieldIndex,u="",c="";return i&&i.value instanceof Function?(c=i.value(n,r),u=i.value(n,r)):(u=a.getRawColor(n._data[o]),c=a.getHslString(u)),{color:c,rawColor:u}},ql=function transfromColor(e,t,n,r){t.meta.stateColor[n]=t.meta.stateColor[n]||t.meta.originalColor;var i=e.transformColor(t.meta.stateColor[n],r);return t.meta.stateColor[n]=i.hsla,i},Gl=function applyInteractionStyle(e,t,n,r){var i=e.getPlotElementsFromSet(t),a=e.axes().color,o=r.apply,u=r.interactionType;n.forEach(function(e){var t=e.type;i.style(t,function(n){var r=n.meta,i=r.colorTransform,c=r.stateColor,s=r.originalColor;if(i[u]=i[u]||{},o&&!i[u][t])return i[u][t]=e.intensity,ql(a,n,t,e.intensity).color;if(!o&&i[u][t])return i[u][t]=null,ql(a,n,t,e.intensity.map(function(e){return-e})).color;var l=c[t]?c[t]:s,f=Hl(l,4);return"hsla("+360*f[0]+","+100*f[1]+"%,"+100*f[2]+"%, "+(f[3]||1)+")"})})},Yl=function getAxesScales(e){var t=[Bc.X,Bc.Y].map(function(t){return e[t]}),n=Hl(t,2),r=n[0],i=n[1],a=[r,i].map(function(e){return e&&e.scale()}),o=Hl(a,2);return{xAxis:r,yAxis:i,xScale:o[0],yScale:o[1]}},Xl=function getIndividualClassName(e,t,n,r){var i=r.config().individualClassName,a="";return i instanceof Function&&(a=i(e,t,n,r)),a},Kl=function attachDataToVoronoi(e,t){var n;e.data((n=[]).concat.apply(n,function helpers_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t=e[0]?(i=d=e[1],h=f=e[0]):(i=d=e[0],h=f=e[1]),(t=a===ir.FieldType.MEASURE?{x:h,x0:d,y:n[u],y0:n[u]}:{x:n[o],x0:n[o],y:i,y0:f})._data=n,t._id=n[l]}else(t={x:e[o],y:e[u],x0:e[c],y0:e[s]})._data=e,t._id=e[l];return t})}).filter(function(e){return e.length})}(e,t,this.encodingFieldsInf(),this.transformType())}},{key:"getNearestPoint",value:function getNearestPoint(){return null}},{key:"applyInteractionStyle",value:function applyInteractionStyle(e,t,n){var r=(this.config().interaction||{})[e];r&&Gl(this,t,r,{apply:n,interactionType:e})}},{key:"transformType",value:function transformType(){return arguments.length?(this._transformType=arguments.length<=0?void 0:arguments[0],this):this._transformType}},{key:"render",value:function render(){return this}},{key:"elemType",value:function elemType(){return"g"}},{key:"remove",value:function remove(){return this.store().unsubscribeAll(),Ao(this.mount()).remove(),this}},{key:"cachePoint",value:function cachePoint(e,t){if(null===e)return this;var n=this._pointMap;return!n[e]&&(n[e]=[]),n[e].push(t),this}},{key:"dataProps",value:function dataProps(){return arguments.length?(this._dataProps=arguments.length<=0?void 0:arguments[0],this):this._dataProps}},{key:"getIdentifiersFromData",value:function getIdentifiersFromData(e){var t=this.data().getData().schema,n=this.data().getFieldsConfig(),r=[[],[]],i=this.encodingFieldsInf(),a=i.xFieldType,o=i.yFieldType,u=i.xField,c=i.yField,s=[a,o].map(function(e){return e===ir.FieldType.MEASURE}),l=tf(s,2),f=l[0],h=l[1];if(t.forEach(function(t,i){var a=t.name;n[a].def.type===ir.FieldType.DIMENSION&&(r[0].push(a),r[1].push(e[i]))}),f&&h){var d,p,y=n[u].index,g=n[c].index;(d=r[0]).push.apply(d,[u,c]),(p=r[1]).push.apply(p,[e[y],e[g]])}return r}},{key:"getPlotSpan",value:function getPlotSpan(){return{x:0,y:0}}},{key:"getPlotPadding",value:function getPlotPadding(){return{x:0,y:0}}},{key:"getPointsFromIdentifiers",value:function getPointsFromIdentifiers(e){var t,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=n.getAllAttrs,i=n.getBBox;if(!this.data())return[];var a=void 0,o=void 0;if(e instanceof ar.a){var u=e.getData();a=u.schema.map(function(e){return e.name}),o=u.data}else a=e[0],o=e.slice(1,e.length);var c=this._points,s=this.data().getFieldsConfig(),l=(t=[]).concat.apply(t,function base_layer_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t2&&void 0!==arguments[2]?arguments[2]:{},r=Ao(n.event.target).data()[0];if(Di(r)){var i=r.datum,a=i.data,o=i.uid;return{id:this.getIdentifiersFromData(a,o),layerId:this.id()}}return null}},{key:"getPlotElementsFromSet",value:function getPlotElementsFromSet(e){return Ao(this.mount()).selectAll(this.elemType()).filter(function(t){return-1!==e.indexOf(t.datum.uid)})}},{key:"render",value:function render(e){var t=this,n=this.measurement(),r=n.height,i=n.width,a=this.config(),o=a.classPrefix,u=a.defClassName,c=a.minOuterRadius,s=a.innerRadius,l=a.outerRadius,f=a.cornerRadius,h=a.padAngle,d=a.padRadius,p=a.padding,y=a.transition,g=a.innerRadiusFixer,v=this.axes().size,m=this._store,b=m.get("transformedData"),_=r-p.top-p.bottom,x=i-p.left-p.right,w=Gi(u,this.id(),o),k=function getRadiusRange(e,t,n){var r=n.minOuterRadius,i=n.innerRadius,a=n.outerRadius,o=n.innerRadiusFixer;return[Math.max(i+o||0,r),a||Math.min(t,e)/2]}(x,_,{minOuterRadius:c,innerRadius:s,outerRadius:l,innerRadiusFixer:g}),C=this.axes().color,S=l||Math.min(_,x)/2,P=m.get("domain").radius,A=function rangeValueGetter(e){return function getRangeValue(e,t,n,r,i){var a=1,o=e.outerRadiusValue,u=e.sizeVal,c=i.domain(),s=i.getSize(u)/(c?i.range()[1]:i.config().value);return a*=(t[1]-t[0])/(n[1]-n[0]),(t[0]+(o-n[0])*a||r)*s}(e,k,P,S,v)},E=bf().innerRadius(s?Math.min(_/2,x/2,s):0).cornerRadius(f).padAngle(h).padRadius(d);this._chartWidth=x,this._chartHeight=_;var M=Eo(Ao(e),"g",[1],w[0]+"-group").classed(w[1]+"-group",!0).attr("transform","translate("+x/2+","+_/2+")"),O=[],T=0;return Eo(M,"g",b,""+w[0],{update:function tween(e){Eo(e,"path",function(e,t){return[{datum:e,index:t,arcFn:E,meta:{originalColor:C.getRawColor(e.colorVal),stateColor:{},colorTransform:{}}}]},w[0]+"-path").style("fill",function(e){return C.getColor(e.datum.colorVal)}).transition().duration(y.duration).attrTween("d",function(){for(var e=arguments.length,t=Array(e),n=0;n0&&e.forEach(function(e){var i=e[0].datum.startAngle,a=e[e.length-1].datum.endAngle,o=2*Math.PI*i/(2*Math.PI+i-a);e.forEach(function(e){var i=e.elem,a=e.datum;i.each(function(){var e=Ao(this);e.selectAll("path").transition().duration(t.duration).attrTween("d",function(){return function(e){var t=n(a);return a.outerRadius=t,r(ra()(a,{startAngle:o,endAngle:o,outerRadius:t})(e))}}).remove(),e.remove()})})})}(O,y,A,E),this}},{key:"getPointsFromIdentifiers",value:function getPointsFromIdentifiers(e){if(!this.data())return[];var t=e[0],n=e.slice(1,e.length),r=Ao(this.mount()).selectAll("path").data(),i=this.data().getFieldsConfig(),a=r.filter(function(e){var r=e.datum.data,a=e.datum.uid;return t.every(function(e,t){return e in i&&i[e].def.type===ir.FieldType.DIMENSION?-1!==n.findIndex(function(n){return n[t]===r[i[e].index]}):e!==nr.ROW_ID||-1!==n.findIndex(function(e){return e[t]===a})})})[0];if(a){var o=a.arcFn.centroid(a.datum);return[{x:o[0]+this._chartWidth/2,y:o[1]+this._chartHeight/2,width:2,height:2}]}return[]}}],[{key:"defaultConfig",value:function defaultConfig(){return yf}},{key:"formalName",value:function formalName(){return"arc"}}]),ArcLayer}(),xf=function drawText(e,t,n,r){var i=Ao(e).selectAll("g").data(t),a=i.enter().append("g").each(function(e){To(this,e.enter)}).merge(i),o=Lo(Ao(e),n.className),u=parseInt(o.fontSize,10);return r.setStyle(o),a.each(function(e){var t,n=Ao(this),i=e.update,a=e.text,o=e.color,c=e.textanchor,s=e.style,l=e.background;if(t=l.value){var f=l.padding,h=void 0,d=r.getOriSize(e.text),p=d.width,y=d.height,g=Eo(n,"rect",[1]);h="end"===c?p:"start"===c?0:p/2,To(g.node(),{x:i.x-h-f/2,y:i.y-u-f/2,width:p+f,height:y+f}),l&&Fo(g,{background:t})}var v=Eo(n,"text",function(e){return[e]}).text(a),m=v.node();s&&Fo(m,s),o&&Fo(m,{fill:o}),e.className&&v.classed(e.className,!0),To(m,i),v.attr("text-anchor",c)}),i.exit().remove(),i},wf={defClassName:"layer-text",classPrefix:"muze",className:"",transform:{type:"identity"},interaction:{highlight:[{type:"fill",intensity:[0,0,-15,0]}],fade:[{type:"fill",intensity:[0,0,15,0]}],focus:[{type:"fill",intensity:[0,0,15,0]}]},transition:{effect:"cubic",duration:1e3},encoding:{color:{},text:{value:"",background:{padding:10}}},states:{highlight:{className:"muze-layer-text-highlight"},fadeout:{className:"muze-layer-text-fadeout"},selected:{className:"muze-layer-text-selected"}}},kf=(n(27),function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function sliceIterator(e,t){var n=[],r=!0,i=!1,a=void 0;try{for(var o,u=e[Symbol.iterator]();!(r=(o=u.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){i=!0,a=e}finally{try{!r&&u.return&&u.return()}finally{if(i)throw a}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}()),Cf=function(){function defineProperties(e,t){for(var n=0;n4)}(r)?r:pa(r).size(i)(a),Eo(n,"path",function(e){return[e]}).attr("d",s)}else e.shape="circle",createShape(e,t)}(e,this)}),(t=c?t:t.transition().duration(c?0:i.duration)).attr("transform",function(e){return"translate("+e.update.x+","+e.update.y+")"}).each(function(e){var t=e.style,n=Ao(this);Xi(t,function(e){return n.style(e,t[e])}),n.attr("class",""+a),n.classed(e.className,!0)});var h=l.exit();c?h.remove():h.transition().ease(Wi[u]).duration(o).on("end",function(){Ao(this).remove()}).style("fill-opacity",0).style("stroke-opacity",0)},Af={defClassName:"layer-point",className:"",classPrefix:"muze",defColorStyle:"stroke",interaction:{highlight:[{type:"fill",intensity:[0,0,-20,0]}],fade:[{type:"fill",intensity:[0,0,20,0]}],focus:[{type:"fill",intensity:[0,0,20,0]}]},innerPadding:.1,nearestPointThreshold:10,transform:{type:"identity"},transition:{effect:"cubic",duration:1e3},encoding:{size:{value:30},color:{},shape:{value:"circle"},x:{},y:{},strokeOpacity:{value:.5},fillOpacity:{value:.5}},shapes:["circle","cross","diamond","square","star","wye","triangle"],sizes:[20,30,40,50,60,70]},Ef=(n(29),function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function sliceIterator(e,t){var n=[],r=!0,i=!1,a=void 0;try{for(var o,u=e[Symbol.iterator]();!(r=(o=u.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){i=!0,a=e}finally{try{!r&&u.return&&u.return()}finally{if(i)throw a}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}()),Mf=function(){function defineProperties(e,t){for(var n=0;n3&&void 0!==arguments[3]?arguments[3]:{},a=[],o=t.size,u=t.shape,c=t.color,s=t.x,l=t.y,f=o.field,h=o.value,d=u.field,p=s.field,y=l.field,g=n.size,v=n.shape,m=this.data().getFieldsConfig(),b=m[p]&&m[p].def.type===ir.FieldType.DIMENSION,_=m[y]&&m[y].def.type===ir.FieldType.DIMENSION,x=b?Bc.X:_?Bc.Y:null,w=c&&c.field,k=m[w]&&m[w].index,C=this._store.get("measurement"),S=m[d]&&m[d].index,P=m[f]&&m[f].index,A=n.color,E=i.offset,M=E.x,O=E.y,T=function _loop(i,o){var u=e[i],s=u._data,l=h instanceof Function?h(u,i):g.getSize(s[P]),f=v.getShape(s[S]),d=[Bc.X,Bc.Y].map(function(e){var r=null===u[e]?void 0:u[e],i=e===Bc.X?C.width:C.height;return t[e].field?n[e].getScaleValue(r):i/2}),p=Ef(d,2),y=p[0],m=p[1];y+=M,m+=O;var b=Wl({datum:u,index:i},{colorEncoding:c,colorAxis:A,colorFieldIndex:k}),_=b.color,w=b.rawColor,E={fill:_,stroke:_};if(!isNaN(y)&&!isNaN(m)){var T={enter:{x:y,y:m},update:{x:y,y:m},shape:f,size:Math.abs(l),meta:{stateColor:{},originalColor:w,colorTransform:{}},style:E,_data:s,_id:u._id,source:u._data,rowId:u._id};T.className=Xl(u,i,e,r),a.push(T),r.cachePoint(u[x],T)}},F=0,N=e.length;F=0?C:k))):(p=c===Nc||r[e]>=0?C:k,y=Math.abs(p-(c===Nc?S:r[e]>=0?k:C))),d=k}else p=0,y=f[i];return{enterSpace:g,enter:d,pos:p,space:y}}),jf=function resolveDimensions(e,t,n){var r={xAxis:n.x,yAxis:n.y},i=Nf("x",r,t,e),a=i.enterSpace,o=i.enter,u=i.pos,c=i.space,s=Nf("y",r,t,e),l=s.enterSpace;return{enter:{x:o,y:s.enter,width:a,height:l},update:{x:u,y:s.pos,width:c,height:s.space}}},If=function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function sliceIterator(e,t){var n=[],r=!0,i=!1,a=void 0;try{for(var o,u=e[Symbol.iterator]();!(r=(o=u.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){i=!0,a=e}finally{try{!r&&u.return&&u.return()}finally{if(i)throw a}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),Df=function(){function defineProperties(e,t){for(var n=0;n=k.x&&e<=k.width+k.x&&t>=k.y&&t<=k.height+k.y){c=w;break}c=null}var C=c&&c._data;return C&&(u=this.getIdentifiersFromData(C,c._id)),c?{dimensions:[c.update],id:u,layerId:this.id()}:c}},{key:"getPlotSpan",value:function getPlotSpan(){return this._plotSpan}}],[{key:"formalName",value:function formalName(){return"bar"}},{key:"defaultConfig",value:function defaultConfig(){return Ff}},{key:"defaultPolicy",value:function defaultPolicy(e,t){var n=rf.defaultPolicy(e,t),r=n.encoding.color.field,i=n.transform;return r&&(i.groupBy=r),n}}]),BarLayer}(),zf={defClassName:"layer-tick",className:"",classPrefix:"muze",interaction:{highlight:[{type:"stroke",intensity:[0,0,-15,0]}],fade:[{type:"stroke",intensity:[0,0,15,0]}],focus:[{type:"stroke",intensity:[0,0,15,0]}]},innerPadding:.1,transform:{type:"identity"},transition:{effect:"cubic",duration:1e3},encoding:{color:{},x:{},y:{},x0:{},y0:{},strokeOpacity:{value:.5},fillOpacity:{value:.5}},states:{highlight:{className:"muze-layer-tick-highlight"},fadeout:{className:"muze-layer-tick-fadeout"},selected:{className:"muze-layer-tick-selected"}}},Hf=function(e){var t=e.points,n=e.container,r=e.keyFn,i=e.className,a=Ao(n),o=a.selectAll("path").data(t,r),u=o.enter().append("path");return a.attr("class",i||""),u.each(function(e){var t=Ao(this),n=e.enter||{};Object.entries(n).forEach(function(e){return!isNaN(e[1])&&t.attr(e[0],e[1])})}),o.exit().remove(),o.merge(u).each(function(e){var t=Ao(this),n=e.update,r=e.style||{},i=void 0!==n.x0?n.x0:n.x,a=void 0!==n.y0?n.y0:n.y,o="M "+n.x+" "+n.y+" L "+i+" "+a;e.className&&t.classed(e.className,!0),t.attr("d",o),Object.entries(r).forEach(function(e){return t.style(e[0],e[1])})})},Vf=(n(33),function(){function defineProperties(e,t){for(var n=0;n3&&void 0!==arguments[3]?arguments[3]:{},i=[],a=Yl(n),o=a.xAxis,u=a.yAxis,c=this.data().getFieldsConfig(),s=this.encodingFieldsInf(),l=s.xField,f=s.yField,h=s.x0Field,d=s.y0Field,p=s.xFieldType,y=s.yFieldType,g=p===ir.FieldType.DIMENSION,v=y===ir.FieldType.DIMENSION,m=g?Bc.X:v?Bc.Y:null,b=t.color,_=b&&b.field,x=c[_]&&c[_].index,w=this._store.get("measurement"),k=n.color,C=r.offset,S=C.x,P=C.y,A=r.span,E=A.x,M=A.y,O=0,T=e.length;O0&&(n[0]=[].concat(field_sanitizer_toConsumableArray(n[0]),field_sanitizer_toConsumableArray(n[1])),n[1]=[]),{fields:n.map(function(e,t){return 1===t?r[t].concat(n[t]):n[t].concat(r[t])}),dimensions:[].concat(field_sanitizer_toConsumableArray(n[0]),field_sanitizer_toConsumableArray(n[1])),measures:[].concat(field_sanitizer_toConsumableArray(r[0]),field_sanitizer_toConsumableArray(r[1])),temporal:[].concat(field_sanitizer_toConsumableArray(i[0]),field_sanitizer_toConsumableArray(i[1])),categorical:[].concat(field_sanitizer_toConsumableArray(a[0]),field_sanitizer_toConsumableArray(a[1]))}}(i,n)}),r=Sh(n,2),i=r[0],a=r[1],o=i.fields,u=i.dimensions,c=i.measures,s=i.temporal,l=i.categorical,f=a.fields,h=a.dimensions,d=a.measures;return{rows:o,rowDimensions:u,rowMeasures:c,rowTemporalFields:s,rowCategoricalFields:l,columns:f,columnTemporalFields:a.temporal,columnCategoricalFields:a.categorical,columnDimensions:h,columnMeasures:d}},Eh=function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function sliceIterator(e,t){var n=[],r=!0,i=!1,a=void 0;try{for(var o,u=e[Symbol.iterator]();!(r=(o=u.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){i=!0,a=e}finally{try{!r&&u.return&&u.return()}finally{if(i)throw a}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),Mh=function(){function defineProperties(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:{},t=arguments[1],n=Jh(th,t.rows,e),r=Eh(n,2),i=r[0],a=r[1],o=Jh("column",t.columns,e),u=Eh(o,2),c=u[0],s=u[1];return this.axisFrom({row:a,column:s}),this.headerFrom({row:i,column:c}),this}}]),VisualEncoder}(),Th={linear:Qs,band:Js,temporal:nl,size:Ml,color:Cl,shape:jl},Fh={dimension:f.BAND,categorical:f.BAND,measure:f.LINEAR,temporal:f.TIME},Nh=function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function sliceIterator(e,t){var n=[],r=!0,i=!1,a=void 0;try{for(var o,u=e[Symbol.iterator]();!(r=(o=u.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){i=!0,a=e}finally{try{!r&&u.return&&u.return()}finally{if(i)throw a}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}();function encoder_helper_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t1?e.position="both":e.position=n.axisFrom()[a],r[o]=Ih(o,s[i],e,o===$f?l:f)}),r}},{key:"getFacetsAndProjections",value:function getFacetsAndProjections(e,t){for(var n=[],r=[],i=0,a=[],o=[],u=e[0],c=e[1],s=u.length,l=c.length,f=this.axisFrom(),h=0;hi)for(var g=i;g-1&&(r=[[b,b]],a.splice(_,1)),o.splice(0,1)}else{var x=a.length-1,w=a[x];r=[[w]];var k=Dh(o,w);k>-1&&(r=[[w,w]],o.splice(k,1)),a.splice(x,1)}return{facets:n=(n=[].concat(a,o)).filter(function(e,t,n){return t===n.findIndex(function(t){return t.toString()===e.toString()})}),projections:r}}},{key:"fieldSanitizer",value:function fieldSanitizer(e,t){return function get(e,t,n){null===e&&(e=Function.prototype);var r=Object.getOwnPropertyDescriptor(e,t);if(void 0===r){var i=Object.getPrototypeOf(e);return null===i?void 0:get(i,t,n)}if("value"in r)return r.value;var a=r.get;return void 0!==a?a.call(n):void 0}(CartesianEncoder.prototype.__proto__||Object.getPrototypeOf(CartesianEncoder.prototype),"fieldSanitizer",this).call(this,e,t)}},{key:"getRetinalFieldsDomain",value:function getRetinalFieldsDomain(e,t){var n=e.groupedModel,r={};for(var i in t)if({}.hasOwnProperty.call(t,i)){var a=t[i],o=a.field;if(!a.domain&&o){var u=Zh(n,o);r[o]=u}}return r}},{key:"serializeLayerConfig",value:function serializeLayerConfig(e){var t=[];return e.length&&e.forEach(function(e,n){var r=Gf.sanitizeLayerConfig(e);r.order=n,t.push(r)}),t}},{key:"getLayerConfig",value:function getLayerConfig(e,t){var n=[],r=e.columnFields,i=e.rowFields;return r.forEach(function(e){var r=e.toString();i.forEach(function(i){var a=[],o=i.toString(),u={x:{field:r},y:{field:o}},c=i.subtype(),s=function getDefaultMark(e,t){return"categorical"===e||"categorical"===t?"bar":"temporal"===e||"temporal"===t?"line":"point"}(e.subtype(),c),l=[{mark:s,def:{mark:s,encoding:u}}],f=function getLayerConfFromFields(e,t,n){return n.filter(function(n){var r,i,a,o=n instanceof Array?n:[n],u=(r=[]).concat.apply(r,encoder_helper_toConsumableArray(o.map(function(e){return e.encoding}).filter(function(e){return void 0!==e})));if(!u.length)return!0;var c=(i=[]).concat.apply(i,encoder_helper_toConsumableArray(u.map(function(e){return[e.x&&e.x.field,e.x0&&e.x0.field]}))).filter(function(e){return void 0!==e&&null!==e}),s=(a=[]).concat.apply(a,encoder_helper_toConsumableArray(u.map(function(e){return[e.y&&e.y.field,e.y0&&e.y0.field]}))).filter(function(e){return void 0!==e&&null!==e});if(!c.length&&!s.length)return!0;var l=!!c.length&&c.every(function(t){return-1!==e.indexOf(t)}),f=!!s.length&&s.every(function(e){return-1!==t.indexOf(e)});return c.length&&s.length?l&&f:l||f})}(e.getMembers(),i.getMembers(),t||[]);a=f.length?f.map(function(e){var t=na(na({},l[0].def),e),n=Gf.getSerializedConf(t.mark,t);return{mark:t.mark,order:t.order,def:n}}):l,n.push.apply(n,function cartesian_encoder_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);tt)for(var h=t;h0&&(e=na(e,t[0])),n.push(e)}),0===n.length&&(n=t),this.layers(n),n}},{key:"serializeLayerConfig",value:function serializeLayerConfig(e){var t=[];return e.length&&e.forEach(function(e){var n=Gf.getSerializedConf(e.mark,e);t.push({mark:e.mark,def:n})}),t}}],[{key:"type",value:function type(){return"polar"}}]),PolarEncoder}(),Hh=function(){function defineProperties(e,t){for(var n=0;n1&&void 0!==arguments[1]?arguments[1]:{},n=e.axisType,r=e.fieldsConfig,i=t.field,a=[],o=Th[n];return t.type=t.type?t.type:Qh(r,i||null),a.push(new o(t)),a}({axisType:e,fieldsConfig:t},n[e])}),r}},{key:"getLayerConfig",value:function getLayerConfig(e,t){var n=[];return t.forEach(function(t){var r=t;[nh,rh,ih].forEach(function(t){if(e[t]&&e[t].field){var n=r.def;r.def instanceof Array?n.forEach(function(n){n.encoding=n.encoding||{},!n.encoding[t]&&(n.encoding[t]={}),n.encoding[t].field=e[t].field}):(n.encoding=n.encoding||{},!n.encoding[t]&&(n.encoding[t]={}),n.encoding[t].field=e[t].field)}}),n.push(r)}),n}},{key:"setCommonDomain",value:function setCommonDomain(e){var t=e.domains,n=e.axes,r=e.encoding;return Object.entries(r).forEach(function(e){if(e[1]&&e[1].field){var r=e[0],i=e[1].field;i&&n[r].forEach(function(n){var r=t[i];!e[1].domain&&n.updateDomain(r)})}}),n}}],[{key:"type",value:function type(){return"retinal"}}]),RetinalEncoder}(),Uh=function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function sliceIterator(e,t){var n=[],r=!0,i=!1,a=void 0;try{for(var o,u=e[Symbol.iterator]();!(r=(o=u.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){i=!0,a=e}finally{try{!r&&u.return&&u.return()}finally{if(i)throw a}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),Wh=void 0;function group_utils_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t0?e[0].map(function(i,a){return new n({type:"header"},{labelManager:r}).source(function getHeaderText(e,t,n){var r="";if(t===n-1&&e.length>n){for(var i=t;i0&&void 0!==arguments[0]?arguments[0]:[];return new Vo(e)}([]),a=(i=i.data(n,r)).enter().append(t).merge(i);return i.exit()&&i.exit().remove(),a},nd=function getBorders(e,t){var n={top:!1,bottom:!1},r={left:!1,right:!1},i={top:!1,bottom:!1,left:!1,right:!1},a=e.rows,o=e.columns,u=e.values,c=Uh(a,2),s=c[0],l=c[1],f=Uh(o,2),h=f[0],d=f[1],p=t.fieldInfo(),y=p.rowDimensions,g=p.columnDimensions,v=p.rowTemporalFields,m=p.columnTemporalFields,b=p.columnMeasures,_=p.rowMeasures,x=y.length+g.length,w=_.length+b.length,k=v.length+m.length;if("polar"===t.constructor.type()){if(!x)return{showRowBorders:n,showColBorders:r,showValueBorders:i}}else if(!w&&!k&&x<=2)return{showRowBorders:n,showColBorders:r,showValueBorders:i};return n=function getRowBorders(e,t){var n={top:!1,bottom:!1};return(e.length>1||t.length>1)&&(n.top=!0,n.bottom=!0),n}(s,l),r=function getColumnsBorders(e,t){var n={left:!1,right:!1};return(e.length||t.length)&&(e[0]&&e[0].length>1||t[0]&&t[0].length>1)&&(n.left=!0,n.right=!0),n}(h,d),i=function getValueBorders(e,t){var n={top:!0,left:!0,bottom:!0,right:!0},r=[ah,oh],i=["top","bottom"];return e.forEach(function(e,t){e[0]&&e[0].length?n[r[t]]=!0:n[r[t]]=!1}),t.forEach(function(e,t){e.length?n[i[t]]=!0:n[i[t]]=!1}),n}([s,l],[h,d]),u.length>1&&(i.top=!0,i.bottom=!0),u.length&&u[0].length>1&&(i.left=!0,i.right=!0),{showRowBorders:n,showColBorders:r,showValueBorders:i}};function action_behaviour_map_defineProperty(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var rd=(action_behaviour_map_defineProperty(qh={},a.DRAG,{behaviours:[u.BRUSH],touch:!1}),action_behaviour_map_defineProperty(qh,a.HOVER,{behaviours:[u.HIGHLIGHT]}),action_behaviour_map_defineProperty(qh,a.LONGTOUCH,{behaviours:[u.SELECT],touch:!0}),action_behaviour_map_defineProperty(qh,a.TOUCHDRAG,{behaviours:[u.BRUSH],touch:!0}),action_behaviour_map_defineProperty(qh,a.CLICK,{behaviours:[u.SELECT],touch:!1}),qh),ad="config",od="data",ud="axes",cd="layerDef",sd="width",ld="height",fd="mount",hd="primaryXAxisUpdated",dd="primaryYAxisUpdated",pd="secondaryXAxisUpdated",yd="secondaryYAxisUpdated",gd="transform",vd="dataDomain",md="layersCreated",bd="fields",_d="timeDiffs",xd="layerAxisIndex";function src_helper_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t2&&void 0!==arguments[2]?arguments[2]:{},r=void 0,i=n.payload,a=n.selectionSet,o=n.propagationFields[t]||{},u=o.fields||[],c=o.append,s=i.criteria,l=e.context,f=l.cachedData()[0],h=l.id(),d=e.sideEffects(),p=e._behaviourEffectMap,y=a.mergedEnter.model,g=f.getFieldsConfig();i.sourceUnit=h,i.action=t,i.sourceCanvas=l.parentAlias();var v=e._propagationBehaviourMap[t]||t,m=[];null===s?r=null:Di(s)?(m=Object.keys(s||{}),r=y?y.project(m):null):(m=s[0],r=y?y.project(m):null);var b=l.facetByFields();if(null!==r&&u.length){var _=r.getData().schema.map(function(e){return e.name});r=function getModelWithFacetData(e,t){var n=e.getData(),r=n.schema,i=n.data,a=[],o=t[0].map(function(e){return{name:""+e,type:ir.FieldType.DIMENSION}}),u=t[1];return i.forEach(function(e){var t={};r.forEach(function(n,r){t[n.name]=e[r]}),o.forEach(function(e,n){t[e.name]=u[n]}),a.push(t)}),new ar.a(a,[].concat(data_propagator_toConsumableArray(r),data_propagator_toConsumableArray(o)))}(r,b),m=c?[].concat(data_propagator_toConsumableArray(_),data_propagator_toConsumableArray(u)):u,r=r.project(m)}var x=!1;m.length&&m.every(function(e){return g[e]&&g[e].def.type===ir.FieldType.MEASURE})&&(x=!0);var w=l.parentAlias();i.action=t;var k=e._actions.behavioural[v],C=!!k&&k.constructor.mutates(),S=function filterFn(e,t){var n=p[e.config.action],r=!e.config.groupId||n.some(function(e){return d[e.name||e].constructor.mutates()});return e.config.groupId!==t.groupId&&r},P=e._actions.behavioural[t],A=!!P&&P.constructor.mutates(),E={payload:i,action:t,criteria:r,isMutableAction:A,propagateInterpolatedValues:x,groupId:w,sourceId:A?w:h,filterFn:S,enabled:function enabled(e,n){return t===v||e.payload.sourceCanvas===n.context.parentAlias()}};f.propagate(r,E,!0),t!==v&&(E={payload:i,sourceId:C?w:h,criteria:r,isMutableAction:C,propagateInterpolatedValues:x,action:v,groupId:w,applyOnSource:t===v,enabled:function enabled(e,t){return e.payload.sourceCanvas!==t.context.parentAlias()},filterFn:S},f.propagate(r,E,!0,{filterImmutableAction:function filterImmutableAction(e,t){return e.groupId!==t.groupId}}))},Xd=function(){function defineProperties(e,t){for(var n=0;n1){var u=r[0].config();if("linear"===r[0].constructor.type()){if(u.alignZeroLine){r.forEach(function(e){return e.config({nice:!1})});var c=function getAdjustedDomain(e,t){var n=e[0]/(e[0]-t[0]),r=e[1]/(e[1]-t[1]),i=!1;return t[0]>0&&t[1]>0&&t[1]>0&&e[1]>0&&(i=!0,t[0]=0,t[1]=0),t[0]<0&&t[1]<0&&t[1]<0&&e[1]<0&&(i=!0,e[0]=0,e[1]=0),i||n===r||(n1&&void 0!==arguments[1]?arguments[1]:{},n=[],r=e;if(null===e)return[];var i=this.layers(),a=i.length;Di(e)&&(r=[Object.keys(e)],r=[].concat(visual_unit_toConsumableArray(r),visual_unit_toConsumableArray(function transposeArray(e){return e[0].map(function(t,n){return e.map(function(e){return e[n]})})}(Object.values(e)))));for(var o=0;o1&&void 0!==arguments[1]?arguments[1]:[]].map(function(e){return e.reduce(function(e,t){return e=[].concat(matrix_model_toConsumableArray(e),matrix_model_toConsumableArray(t.getMembers()))},[])})},ep=function createSelectedDataModel(e,t,n){return e.select(function(e){return t.every(function(t,r){return e[t].value===n[r]})})},tp=function uniqueKeyGenerator(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:[],i=t.facets,a=t.dataModel,o=t.uniqueValues;if(i[n+1]){var u=i[n];o.forEach(function(t){var o=a.select(function(e){return e[u].value===t}),c=Zh(o,i[n+1]);uniqueKeyGenerator(e,{facets:i,dataModel:o,uniqueValues:c},n+1,[].concat(matrix_model_toConsumableArray(r),[t]))})}else o.forEach(function(t){e.push([].concat(matrix_model_toConsumableArray(r),[t]))})},np=function projectRows(e,t){var n=t.allColumnProjections,r=t.rowProjections,i=t.optionalProjections;return r.length>0?r.map(function(t){var r=Jd(t,n),a=Zd(r,2),o=a[0],u=a[1];return e.project([].concat(matrix_model_toConsumableArray(o),matrix_model_toConsumableArray(u),matrix_model_toConsumableArray(i)))}):[e]},rp=function pushToMatrix(e,t){var n,r=[],i=e.matrix,a=e.datamodel,o=e.facetInfo,u=e.fieldInfo,c=u.rowProjections,s=u.colProjections,l=u.optionalProjections,f=o.rowIndex,h=o.columnIndex,d=c[f%c.length]||[];s.length>0?r=s.map(function(e,n){var r=Jd(e,d),i=Zd(r,2),u=i[0],c=i[1],p=a.project([].concat(matrix_model_toConsumableArray(u),matrix_model_toConsumableArray(c),matrix_model_toConsumableArray(l))),y={rowFields:d,columnFields:e},g={rowIndex:f,columnIndex:h*s.length+n};return t(p,{projections:y,indices:g},o)}):r=[t(a,{projections:{rowFields:d,columnFields:[]},indices:{rowIndex:f,columnIndex:h}},o)];i[f]=i[f]||[],(n=i[f]).push.apply(n,matrix_model_toConsumableArray(r))},ip=function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function sliceIterator(e,t){var n=[],r=!0,i=!1,a=void 0;try{for(var o,u=e[Symbol.iterator]();!(r=(o=u.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){i=!0,a=e}finally{try{!r&&u.return&&u.return()}finally{if(i)throw a}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}();function cell_creator_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t0?d.length:1):(a=g,o=p.length>0?p.length:1),s.length&&f===u&&l&&a.length){var h={axis:l,length:o,type:u},v=[];i<2?(h.keys=a,h.facetConfig=c.rows,v=up(h,r,t,n)):(h.facetConfig=c.columns,h.keys=a[0].map(function(e,t){return a.map(function(e){return e[t]})}),v=up(h,r,t,n)),r[u+"Headers"]=v}else r[u+"Headers"]=null}),r},sp=function computeMatrices(e,t){var n=e.resolver,r=e.datamodel,i=e.componentRegistry,a=e.encoders,o=t.globalConfig,u=t.selection,c=t.transform,s=o.autoGroupBy,l=n.dependencies().smartlabel,f=r.getFieldsConfig(),h=n.layerConfig(),d=n.registry(),p=n.horizontalAxis().fields,y=n.verticalAxis().fields,g=n.optionalProjections(t,h),v=n.getAllFields(),m={normalizedColumns:y,normalizedRows:p,facetsAndProjections:v,layers:h,fieldMap:f,otherEncodings:g,encoders:a,facetConfig:o.facetConfig||{},axisFrom:o.axisFrom||{},selection:u},b={GeomCell:n.getCellDef(d.GeomCell),AxisCell:n.getCellDef(d.AxisCell),BlankCell:n.getCellDef(d.BlankCell),TextCell:n.getCellDef(d.TextCell)},_=Yh(p),x=Yh(y);n.colCells({}),n.rowCells({}),n.datamodelTransform(c||{}),n.resetSimpleAxes();var w={exitCellMap:n.cacheMaps().entryCellMap,entryCellMap:new Map};n.cacheMaps(w);var k={config:o,suppliedLayers:a.simpleEncoder.serializeLayerConfig(n.layerConfig()),resolver:n,cell:b.GeomCell,encoder:a.simpleEncoder,newCacheMap:w,detailFields:t.detail},C=r.getFieldsConfig(),S=r;if(!s.disabled){var P=function extractFields(e,t){var n,r=Object.values(e).map(function(e){var t,n,r=(t=[]).concat.apply(t,group_utils_toConsumableArray(e));return(n=[]).concat.apply(n,group_utils_toConsumableArray(r.map(function(e){return e instanceof _h?e.getMembers():e})))});return(n=[]).concat.apply(n,group_utils_toConsumableArray(r).concat(group_utils_toConsumableArray(t)))}(v,function getFieldsFromSuppliedLayers(e,t){var n,r=[],i=e.map(function(e){return e.encoding||{}});return r=(r=[].concat(group_utils_toConsumableArray(r),[(n=[]).concat.apply(n,group_utils_toConsumableArray(i.map(function(e){return Object.values(e).map(function(e){return e.field})})))])).filter(function(e){return t[e]&&t[e].def.type===ir.FieldType.DIMENSION})}(k.suppliedLayers,r.getFieldsConfig())),A=P.filter(function(e){return C[e]&&C[e].def.type===ir.FieldType.DIMENSION}),E=s.measures;S=r.groupBy(A.length?A:[""],E).project(P)}var M=function getMatrixModel(e,t,n){var r=[],i=[],a=[],o=[],u=[],c=[],s=t.rowFacets,l=t.colFacets;if(t.colProjections.forEach(function(e){o.push.apply(o,matrix_model_toConsumableArray(e))}),t.allColumnProjections=o,s.length>0){var f=s[0].toString(),h=Zh(e,f);tp(i,{facets:s,dataModel:e,uniqueValues:h}),i.forEach(function(n){var i,a=Jd(s),o=Zd(a,1)[0],u=ep(e,o,n);c.push([s,n]),(i=r).push.apply(i,matrix_model_toConsumableArray(np(u,t)))})}else{var d;(d=r).push.apply(d,matrix_model_toConsumableArray(np(e,t)))}if(r=r.length>0?r:[[]],l.length>0){var p=l.map(function(e){return""+e}),y=p[0],g=Zh(e,y);tp(a,{facets:p,dataModel:e,uniqueValues:g}),r.forEach(function(r,i){c[i]=c[i]||[[],[]],a.forEach(function(a,o){u[i]=u[i]||[];var s=r instanceof ar.a?r:e,f=ep(s,p,a),h={matrix:u,datamodel:f,facetInfo:{rowFacets:c[i],colFacets:[l,a],rowIndex:i,columnIndex:o},fieldInfo:t};rp(h,n)})})}else r.forEach(function(r,i){c[i]=c[i]||[[],[]];var a={matrix:u,datamodel:r||e,facetInfo:{rowFacets:c[i],colFacets:[[],[]],rowIndex:i,columnIndex:0},fieldInfo:t};rp(a,n)});var v=a.length>0?a[0].map(function(e,t){return a.map(function(e){return e[t]})}):a;return{matrix:u,rowKeys:i,columnKeys:v}}(S,v,n.valueCellsCreator(k));n.cacheMaps().exitCellMap.forEach(function(e){e.remove()}),n.cacheMaps().exitCellMap.clear(),n.valueMatrix(M.matrix),n.createUnits(i,t);var O=function mutateAxesFromMap(e,t){var n=null,r=null,i=e.xAxesMap,a=e.yAxesMap,o=t.x,u=t.y;return o&&o.forEach(function(e){var t=i.get(e);(n=n||[]).push(t)}),u&&u.forEach(function(e){var t=a.get(e);(r=r||[]).push(t)}),{xAxes:n,yAxes:r}}(n.cacheMaps(),n.axes()),T=O.xAxes,F=O.yAxes;n.axes({x:T,y:F});var N=function generateMatrices(e,t,n,r){var i=e.unitHeight,a=e.unitWidth,o=e.facetsAndProjections,u=e.normalizedRows,c=e.normalizedColumns,s=e.selection,l=e.axisFrom,f=e.facetConfig,h=e.encoders,d=cp({fields:{rows:u,columns:c},matrices:t,facetsAndProjections:o,selection:s,axisFrom:l,facetConfig:f,encoders:h},n,r),p=d.columnsPrimary,y=d.columnsSecondary,g=d.rowsPrimary,v=d.rowsSecondary,m=d.leftHeaders,b=d.topHeaders,_=d.bottomHeaders,x=d.rightHeaders,w=[g,v,p,y].map(function(e){return e?e.getObjects():[]}),k=ip(w,4),C=k[0],S=k[1],P=k[2],A=k[3],E=[m,x].map(function(e){return e?e.getObjects().map(function(e){return e.getObjects()}):[]}),M=ip(E,2),O=M[0],T=M[1],F=O.length?O.map(function(e,t){return C[t]=C[t]?[C[t]]:[],[].concat(cell_creator_toConsumableArray(e),cell_creator_toConsumableArray(C[t]))}):C?C.map(function(e){return[e]}):[],N=S.length?S.map(function(e,t){return[e].concat(cell_creator_toConsumableArray(T[t]||[]))}):T.length?T.map(function(e){return[].concat(cell_creator_toConsumableArray(e))}):[],j=[];b&&b.getObjects().forEach(function(e){e.getObjects().forEach(function(e,t){j[t]=j[t]||[],j[t].push(e)})});P.length&&j.push(P);var I=[];A.length&&I.push(A);var D=I.length;_&&_.getObjects().forEach(function(e){e.getObjects().forEach(function(e,t){I[t+D]=I[t+D]||[],I[t+D].push(e)})});if(!F.length&&!N.length){var L=new n.BlankCell;L.setAvailableSpace(a,i),F=[[L]]}if(!(j.length||I.length&&I[0].length)){var R=new n.BlankCell;R.setAvailableSpace(a,i),I=[[R]]}return{rows:[F,N],columns:[j,I],selectionObj:d}}(m,{valuesMatrix:M,axesMatrix:n.axes()},b,l),j=N.rows,I=N.columns,D=N.selectionObj;return n.rowMatrix(j),n.columnMatrix(I),{rows:n.rowMatrix(),columns:n.columnMatrix(),values:n.valueMatrix(),isColumnSizeEqual:x,isRowSizeEqual:_,selection:D,dataModels:{groupedModel:S,parentModel:r}}},lp=function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function sliceIterator(e,t){var n=[],r=!0,i=!1,a=void 0;try{for(var o,u=e[Symbol.iterator]();!(r=(o=u.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){i=!0,a=e}finally{try{!r&&u.return&&u.return()}finally{if(i)throw a}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),fp=function(){function defineProperties(e,t){for(var n=0;n0?d[0].map(b):[],right:p.length>0?p[0].map(b):[]},w=[ah,oh].map(function(e){return g.map(function(t,n){return n===g.length-1?_[e]:x[e]})}),k=lp(w,2),C=k[0],S=k[1];if(0===g.length){var P=[ah,oh].map(function(e){return v.map(function(t,n){return 0===n?_[e]:x[e]})}),A=lp(P,2);r=A[0],i=A[1]}else r=v.map(function(){return d.length>0?d[0].map(b):[]}),i=v.map(function(){return p.length>0?p[0].map(b):[]});return s.notify({client:[C,S,r,i],action:"initialized",formalName:"facet-headers"}),{topLeft:C,topRight:S,bottomLeft:r,bottomRight:i}}},{key:"getMatrices",value:function getMatrices(e,t,n,r){return sp({datamodel:e,componentRegistry:n,encoders:r,resolver:this},t)}}]),MatrixResolver}(),dp=function(){function defineProperties(e,t){for(var n=0;n3&&void 0!==arguments[3]?arguments[3]:{},i=void 0,a=e.context.constructor.type(),o=r.payload,u=e.context.data(),c=e.context.metaData(),s=c.getData().schema[0].type,l={},f=e.context._id;l.action=Pp[t]||t,l.sideEffects=Ep[t],l.sourceCanvas=e.context.canvasAlias();var h=e._actions.behavioural[l.action].constructor.mutates();if(null===o.criteria)i=null;else{var d=n.mergedEnter,p=u.filter(function(e){return-1!==d.uids.indexOf(e.id)}).map(function(e){return e.value});if("step"===a||"discrete"===a&&"measure"===s){var y=Object.keys(o.criteria||{})[0];i=(p=u.filter(function(e){return-1!==d.uids.indexOf(e.id)}).map(function(e){return e.range})).length?c.select(function(e){for(var t=!1,n=0;n=p[n][0]&&e[y].value<=p[n][1]);n++);return t},{saveChild:!1}):null}else"gradient"===a?i=ca(c,o.criteria):p.length?i=function assembleModelFromIdentifiers(e,t){var n=[],r=void 0,i=e.getFieldsConfig();return t.length?function(){for(var e=t[0],a=e.length,o=0;o=s+l?[i.invert(s+l-c),i.invert(s+l)]:f-l1&&void 0!==arguments[1]?arguments[1]:{},i=t.config().classPrefix;e.mergedEnter.length||e.mergedExit.length?(n(e.mergedExit,r.className||i+"-legend-brighten",!1),n(e.mergedExit,r.className||i+"-legend-fadeout",!0),n(e.mergedEnter,r.className||i+"-legend-fadeout",!1)):n(e.completeSet,r.className||i+"-legend-fadeout",!1)},brighten:function brighten(e){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},i=t.config().classPrefix;e.mergedEnter.length||e.mergedExit.length?(n(e.mergedEnter,r.className||i+"-legend-brighten",!0),n(e.mergedExit,r.className||i+"-legend-brighten",!1)):n(e.completeSet,r.className||i+"-legend-brighten",!1)}}},Vp=function(){function defineProperties(e,t){for(var n=0;n2&&void 0!==arguments[2]?arguments[2]:{};(0,this._strategies[n.strategy||this._strategy])(e,this)}}],[{key:"formalName",value:function formalName(){return"highlighter"}}]),LegendHighlighter}(),Wp={config:{sanitization:function sanitization(e,t){return na(e._config||{},t)}},data:{},fieldName:{},legendContainer:{},measurement:{sanitization:function sanitization(e,t){var n=na(e._measurement,t);return["padding","border","margin"].forEach(function(e){n[e]=Math.min(n[e]>0?n[e]:0,.1*n.maxWidth,.1*n.maxHeight)}),n}},logicalSpace:{},metaData:{},range:{sanitization:function sanitization(e,t){return e.scale().range(t),e.resetLogicalSpace(),e.store().commit("range",t),t}},scale:{},smartTicks:{},store:{},title:{sanitization:function sanitization(e,t){return na(e._title||{},t)}}},qp="horizontal",Gp="vertical",Yp={height:30,width:30,maxWidth:1/0,maxHeight:1/0,padding:2,margin:2,border:1},Xp={text:"",orientation:function orientation(e){return"left"===e||"right"===e?"left":"center"}},Kp={classPrefix:"muze",formatter:{bounds:{lower:"less than",upper:"more than"}},item:{text:{orientation:"right",width:10,formatter:function formatter(e){return e}},icon:{className:"legend-icon",height:20,width:20,color:"rgba(0,0,0,.5)",type:"square"}}},$p=function ICON_MAP(e){return e&&"string"==typeof e?pa(e):e};function legend_helper_defineProperty(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var Qp=function getScaleInfo(e){var t=e.constructor.type();return{scaleType:t,domain:e.uniqueValues(),steps:e.config().stops||1,scaleFn:Mp[t]}},Zp=function getInterpolatedData(e,t){for(var n=[],r=ia()(e[0],e[1]),i=0;i<=t;i++)n[i]=r(i/t);return n},Jp=function getDomainBounds(e,t,n){var r,i=t.scaleFn,a=t.scaleType,o=t.scale,u=n.domain,c=n.domainBounds,s=n.domainLeg,l=n.steps,f=u["lower"===e?0:u.length-1],h=l["lower"===e?0:l.length-1];return legend_helper_defineProperty(r={},a,"size"===a?o[i](f)*o.getScaleFactor():o[i](f)),legend_helper_defineProperty(r,"value",c[e]),legend_helper_defineProperty(r,"id","lower"===e?0:s.length+2),legend_helper_defineProperty(r,"range",[f,h]),r},ey=function(){function defineProperties(e,t){for(var n=0;n0?1.25*h.height:0,p=h.width,y=this.getLabelSpaces(s,c),g=function computeItemSpaces(e,t,n){var r=0,i=0,a={width:0,height:0},o=t.effPadding,u=t.titleWidth,c=t.labelSpaces,s=t.titleHeight,l=t.maxWidth,f=e.item,h=e.align,d=f.icon,p=f.text.orientation,y=[],g=[],v=0;return c.forEach(function(e,t){var c={width:0,height:0},s={width:0,height:0},l=n[t]||{};"left"===p||"right"===p?(e.width+=o,s.width=(l.size?2*Math.sqrt(l.size/Math.PI):d.width)+o,v=Math.max(s.width,v),c.width=e.width+v,e.height=Math.max(e.height,d.height)+o,s.height=e.height,c.height=e.height):(e.width=Math.max(e.width,l.size?2*Math.sqrt(l.size/Math.PI):d.width)+o,s.width=e.width,c.width=e.width,v=Math.max(s.width,v),e.height+=o,s.height=d.height+o,c.height=e.height+s.height),"horizontal"===h?r=Math.max(r,c.height):(r+=c.height,i=Math.max(i,c.width,u)+o),a={width:Math.max(c.width,a.width),height:Math.max(c.height,a.height)},y.push(c),g.push(s)}),y.forEach(function(e,t){"horizontal"===h?(e.height=r,g[t].width=v,"left"===p||"right"===p?(c[t].height=r,g[t].height=r,y[t].width=c[t].width+v):(c[t].width=v,y[t].width=v,c[t].width=v),i=Math.max(i+y[t].width,u)):(e.width=Math.max(i,l),"top"===p||"bottom"===p?(c[t].width=i,g[t].width=i,v=i):(g[t].width=v,y[t].width=c[t].width+v,c[t].width=a.width-v,i=Math.max(i,e.width,u)+o))}),{totalHeight:r+=s+o,totalWidth:i,itemSpaces:y,iconSpaces:g,maxItemSpaces:a,maxIconWidth:v}}(this.config(),{effPadding:s,titleWidth:p,labelSpaces:y,titleHeight:d,maxWidth:r,maxHeight:i},this.data()),v=g.totalHeight,m=g.totalWidth,b=g.itemSpaces,_=g.iconSpaces,x=g.maxItemSpaces,w=g.maxIconWidth;return this.measurement({width:Math.max(m,t)+f+l,height:Math.max(v,n)+f+l,labelSpaces:y,iconSpaces:_,itemSpaces:b,maxItemSpaces:x,maxIconWidth:w,titleSpaces:{width:Math.min(r,this.measurement().width)-f-l,height:d}}),this}},{key:"getTitleSpace",value:function getTitleSpace(){return this._labelManager.setStyle(Lo(Ao("body"),this.config().classPrefix+"-legend-title")),this._labelManager.getOriSize(this.title().text?this.title().text:"")}},{key:"renderTitle",value:function renderTitle(e){var t=this.measurement(),n=t.titleSpaces,r=t.border,i=t.padding;return function titleCreator(e,t,n,r){return Eo(e,"div",[1],r.classPrefix+"-legend-title").style("width","100%").style("height",n.height+"px").style("padding-left",n.padding+"px").style("padding-right",n.padding+"px").style("border-bottom-width",n.border+"px").style("text-align",t.orientation instanceof Function?t.orientation(r.position):t.orientation).text(t.text).node()}(e,this.title(),{height:n.height,border:r,padding:i},this.config())}},{key:"render",value:function render(){var e=this.firebolt(),t=this.config().classPrefix,n=this.measurement(),r=n.maxWidth,i=n.maxHeight,a=n.width,o=n.height,u=n.margin,c=n.border,s=Eo(Ao(this.mount()),"div",[1],t+"-legend-box");return s.classed(t+"-legend-box-"+this._id,!0),s.style("float","left"),s.style("width",Math.min(r,a)-2*u+"px").style("height",Math.min(i,o)-2*u+"px").style("margin",u+"px").style("border-width",c+"px"),this.legendContainer(s.node()),this.renderTitle(s),e.createSelectionSet(this.data().map(function(e){return e.id})),s}},{key:"getCriteriaFromData",value:function getCriteriaFromData(e){var t=this.fieldName();return"measure"===this.metaData().getData().schema[0].type?function simple_legend_defineProperty(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}({},t,e.range):[[t],[e.value]]}}],[{key:"create",value:function create(e){return new SimpleLegend(e)}},{key:"defaultConfig",value:function defaultConfig(){return Kp}},{key:"defaultMeasurement",value:function defaultMeasurement(){return Yp}}]),SimpleLegend}();function position_config_defineProperty(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var oy=(position_config_defineProperty(ty={},"horizontal",{datasets:function datasets(e){return{row:[1],column:e}},itemContainerMeasures:function itemContainerMeasures(e){var t=e.itemSpaces;return{row:{width:e.width+"px",padding:"0px"},column:{width:function width(e,n){return t[n].width+"px"},padding:"0px"}}},getStepSpacesInfo:function getStepSpacesInfo(e){var t=e.maxItemSpaces;return{iconHeight:e.height,iconWidth:t.width,stepPadding:{horizontal:!0,vertical:!1}}}}),position_config_defineProperty(ty,"vertical",{datasets:function datasets(e){return{row:e,column:function column(e){return[e]}}},itemContainerMeasures:function itemContainerMeasures(e,t){var n=e.width;return{row:{width:n+"px",padding:t.padding+"px"},column:{width:n+"px",padding:"0px"}}},getStepSpacesInfo:function getStepSpacesInfo(e){var t=e.maxItemSpaces,n=e.width;return{iconHeight:t.height,iconWidth:n,stepPadding:{horizontal:!1,vertical:!0}}}}),ty),uy=(position_config_defineProperty(ny={},"left",oy.vertical),position_config_defineProperty(ny,"right",oy.vertical),position_config_defineProperty(ny,"top",oy.horizontal),position_config_defineProperty(ny,"bottom",oy.horizontal),ny),cy=(position_config_defineProperty(ry={},"left","end"),position_config_defineProperty(ry,"right","start"),position_config_defineProperty(ry,"top","center"),position_config_defineProperty(ry,"bottom","center"),ry),sy=(position_config_defineProperty(iy={},"left",[Op,"shape"]),position_config_defineProperty(iy,"right",["shape",Op]),position_config_defineProperty(iy,"top",[Op,"shape"]),position_config_defineProperty(iy,"bottom",["shape",Op]),iy),ly=function createLegendSkeleton(e,t,n,r){var i,a,o,u,c=e.measurement(),s=c.margin,l=c.border,f=c.titleSpaces,h=c.width,d=c.height,p=c.maxWidth,y=c.maxHeight;a=d-(f.height+2*s+2*l),i=h-(2*s+2*l),o=y-(f.height+2*s+2*l),u=p-(2*s+2*l);var g=Eo(t,"div",[1],n+"-legend-body");return g.select("."+n+"-legend-overflow").remove(),u&&u4)}(u)?u:$p(u).size(o)(),Eo(a,"path",function(e){return[e]}).attr("d",l)}}return e[1]="circle",createShape(e,t,"circle")}(n,Eo(l,"g",[n[1]],i+"-legend-icon"),n[3]?"circle":"square",o,a).attr("transform","translate("+(u/2-c)+" "+a/2+")").attr("fill",n[2]||s):Eo(l,"rect",[n[1]],i+"-legend-icon").attr("x",0).attr("y",0).attr("width",u).attr("height",a).attr("fill",n[2]||s)},py=function(){function defineProperties(e,t){for(var n=0;na[a.length-1]&&t.push(i[1])):t=Zp(i,a-1),(t=[].concat(gradient_legend_toConsumableArray(new Set(t))).sort(function(e,t){return e-t})).map(function(n,i){var a,u=t[i];return gradient_legend_defineProperty(a={},r,"size"===r?e[o](n)*e.getScaleFactor():e[o](Math.floor(n))),gradient_legend_defineProperty(a,"value",+u.toFixed(2)),gradient_legend_defineProperty(a,"id",i),a}).filter(function(e){return null!==e.value})}},{key:"getLabelSpaces",value:function getLabelSpaces(e){this.config({item:{text:{orientation:this.config().position}}});var t=function createAxis(e){var t=e.data(),n=e.config().align,r=e._cells.AxisCell,i=new Qs({id:"legend-"+e._id,orientation:n===Gp?"right":"bottom",style:e._computedStyle,nice:!1,showAxisName:!1,tickValues:t.map(function(e){return e.value}),fixedBaseline:!1},{labelManager:e._labelManager});return i.domain(gy(t)),i.range([1,1]),(new r).source(i).config({margin:{left:0,bottom:0,top:0,right:0}})}(this),n=t.getLogicalSpace(),r={width:n.width-e,height:n.height-e},i=t.source().domain().length,a=new Array(i).fill(r);return this.axis(t),a}},{key:"getDrawingContext",value:function getDrawingContext(){return{svgContainer:this._legendGradientSvg}}},{key:"render",value:function render(){var e=this.firebolt(),t=function get(e,t,n){null===e&&(e=Function.prototype);var r=Object.getOwnPropertyDescriptor(e,t);if(void 0===r){var i=Object.getPrototypeOf(e);return null===i?void 0:get(i,t,n)}if("value"in r)return r.value;var a=r.get;return void 0!==a?a.call(n):void 0}(GradientLegend.prototype.__proto__||Object.getPrototypeOf(GradientLegend.prototype),"render",this).call(this,this.mount());return function renderGradient(e,t){var n,r,i=e.config(),a=i.align,o=i.classPrefix,u=i.item,c=e.data(),s=vy(t,o,c),l=s.legendContainer,f=s.legendGradSvg,h=s.legendGradCont,d=s.linearGradient,p=s.legendRect,y=e.axis().source().getAxisDimensions().tickLabelDim,g=e.measurement(),v=g.padding,m=g.margin,b=g.border,_=g.titleSpaces,x=g.maxHeight,w=g.maxWidth,k=g.height,C=g.width,S={};n=Math.floor(k-(_.height+2*m+2*b)),r=Math.floor(C-(2*m+2*b)),a===qp?(S.height=u.icon.height,S.width=r-2*v-y.width/2,d.attr("x2","100%").attr("y1","0%"),h.attr("transform","translate( "+y.width/2+" 0)"),my(e,l,n-u.icon.height-v,r-2*v-1),l.classed(o+"-overflow-x",C>w),Mo(l,{height:k+"px",width:Math.min(C,w)+"px",padding:v+"px"}),p.attr("height",S.height),p.attr("width",S.width-y.width/2)):(S.height=n-2*v-y.height/2,S.width=u.icon.width,d.attr("x2","0%").attr("y1","100%"),h.attr("transform","translate(0 "+y.height/2+")"),my(e,l,n-2*v-1,r-u.icon.width-2*v),l.classed(o+"-overflow-y",k>x),Mo(l,{height:Math.min(k,x)+"px",width:C+"px",padding:v+"px"}),p.attr("height",S.height-y.height/2),p.attr("width",S.width)),Mo(f,{height:S.height+"px",width:S.width+"px"}),Mo(p,{fill:"url(#linear-gradient)"}),f.attr("height",S.height),f.attr("width",S.width),e.measurement({gradientDimensions:S}),e._legendGradientSvg=f}(this,t),t.selectAll("div").style("float","left"),e.mapActionsAndBehaviour(),e.createSelectionSet(this.data().map(function(e){return e.id})),t}},{key:"getCriteriaFromData",value:function getCriteriaFromData(e){return[[this.fieldName()],[e.value]]}}],[{key:"create",value:function create(e){return new GradientLegend(e)}},{key:"type",value:function type(){return"gradient"}}]),GradientLegend}(),xy=function(){function defineProperties(e,t){for(var n=0;na[a.length-1]&&(c.upper=[u.bounds.upper+" "+a[a.length-1]])):t=Zp(i,a),t=(t=[].concat(step_legend_toConsumableArray(new Set(t))).sort(function(e,t){return e-t})).map(function(n,i){var a,u=null;return i0&&void 0!==arguments[0]?arguments[0]:{},t=this._registrableComponents,n=na(na({},function defaultPolicy(e){var t=e.map(function(e){return e.alias()});return{behaviours:{"*":function _(e){var n=e.sourceCanvas;return!n||-1!==t.indexOf(n)}}}}(t)),e);return t.forEach(function(e){e.firebolt().crossInteractionPolicy(n)}),this}}]),ActionModel}()),Ny={classPrefix:"muze",interaction:{sideEffect:"individual"},legend:{position:"right",color:{show:!0,padding:2,margin:2,border:1,height:30,width:30},shape:{show:!0,padding:2,margin:2,border:1,height:30,width:30},size:{show:!0,padding:2,margin:2,border:1,height:30,width:30}},showHeaders:!1,minWidth:100,minHeight:100,border:{style:"solid",color:"#d6d6d6",width:2,collapse:!0,spacing:0},autoGroupBy:{disabled:!1}},jy={data:{value:null,meta:{typeCheck:function typeCheck(e){return e instanceof ar.a}}},width:{value:0,meta:{sanitization:Qi,typeCheck:Number.isInteger}},height:{value:0,meta:{sanitization:Qi,typeCheck:Number.isInteger}},minUnitWidth:{value:50,meta:{sanitization:Qi,typeCheck:Number.isInteger}},minUnitHeight:{value:50,meta:{sanitization:Qi,typeCheck:Number.isInteger}},config:{value:null,meta:{typeCheck:"constructor",typeExpected:"Object",sanitization:function sanitization(e,t){var n=na({},t),r=na(n,Ny);return na(r,e)}}}},Iy="width",Dy="height",Ly="top",Ry="left",By="right",zy="bottom",Hy="center",Vy="rowLeft",Uy="rowRight",Wy="colBottom",qy="colTop",Gy="rowSpan",Yy="colSpan",Xy="rowRoot",Ky="columnRoot",$y=function(){function defineProperties(e,t){for(var n=0;n1)return e;var f=o[t-1];if(f&&f.valueOf()===e.valueOf()){var h=n[r-1];return h?h[t].valueOf()===h[t-1].valueOf()?null:e:null}return e}return e},ag=function calcRowSpan(e,t,n,r){var i=1;if(!e||"string"!=typeof e.valueOf())return 1;for(var a=!1;!a;)n[r+i]&&null===n[r+i][t]?i+=1:a=!0;return i},og=function calcColSpan(e,t,n,r){var i=1;if(!e||"string"!=typeof e.valueOf())return 1;for(var a=!1;!a;)null===n[r][t+i]?i+=1:a=!0;return i},ug=function mask(e,t){return e.map(function(n,r){if(t===Vy||t===Uy){for(var i=n.map(function(n,i){return ig(n,i,e,r,t)}),a=[],o=n.length-i.length,u=0;u1&&r.setAvailableSpace(0,r.availHeight()),Ao(this).style("height",r.availHeight()+"px"),n}),l.each(function(e){e.placeholder&&e.placeholder.render(this)}).exit().each(function(e){e.placeholder&&e.placeholder.remove()}),applyBorders(l,r.border,n,a)}})}function utils_defineProperty(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function utils_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t0?e[0]:e[1];return n?(r=e[0].length>0?[].concat(utils_toConsumableArray(e[0])):[],r=e[1].length>0?[].concat(utils_toConsumableArray(r),utils_toConsumableArray(e[1])):r):r=r.map(function(t,n){var r=[];return e[0].length>0&&(r=[].concat(utils_toConsumableArray(e[0][n]))),e[1].length>0&&(r=[].concat(utils_toConsumableArray(r),utils_toConsumableArray(e[1][n]))),r}),r},fg=function computeLogicalSpace(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments[1],n=arguments[2],r=t.isTransposed,i=void 0!==r&&r,a=t.unitMeasures,o=function getMeasureInfo(e){return e?{firstMeasure:Dy,secondMeasure:Iy}:{firstMeasure:Iy,secondMeasure:Dy}}(i),u=o.firstMeasure,c=o.secondMeasure,s=e.values,l=function getMinMeasures(e,t){return e?{height:0,width:t.width}:{height:t.height,width:0}}(i,a);if(s[0].key){var f,h=(utils_defineProperty(f={},u,0),utils_defineProperty(f,c,0),f);return s.forEach(function(e){var r=computeLogicalSpace(e,t,n);h[u]=Math.max(h[u],r[u],l[u]),h[c]+=+r[c]}),e.space=h,h}return function getLogicalSpace(e,t,n){var r,i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:[],a=t.firstMeasure,o=t.secondMeasure,u=0,c=0;return e.values.forEach(function(t){var r,s=0,l=0;t.forEach(function(e,t){e.logicalSpace(null);var r=e.getLogicalSpace();l=Math.max(l,+r[o],n[o]),i[t]=Math.max(i[t]||0,r[a]),s+=+i[t]}),c+=l,u=Math.max(u,s),e.space=(utils_defineProperty(r={},o,Math.ceil(c)),utils_defineProperty(r,a,Math.ceil(u)),r)}),utils_defineProperty(r={},o,c),utils_defineProperty(r,a,u),r}(e,{firstMeasure:u,secondMeasure:c},l,n)},hg=function extraCellsRemover(e,t,n){return e.slice(t,-n)},dg={config:{sanitization:function sanitization(e,t){return na(e._config||{},t)}},maxMeasures:{},availableSpace:{},logicalSpace:{}},pg={distribution:[],classPrefix:"muze",isDistributionEqual:!0,unitMeasures:{height:100,width:100,border:1},isTransposed:!1,facet:"primary",extraCellLengths:[]},yg=function(){function defineProperties(e,t){for(var n=0;n1&&void 0!==arguments[1]?arguments[1]:{};!function visual_matrix_classCallCheck(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,VisualMatrix),this._lastLevelKey=0,this._primaryMatrix=e[0]||[],this._secondaryMatrix=e[1]||[],this._maxMeasures=[],this._availableSpace={},Ji(this,dg);var n=Object.assign({},this.constructor.defaultConfig());this.config(na(n,t)),this._breakPointer=this.config().isTransposed?e[0].length:e[0].length>0?e[0][0].length:0,this._layoutMatrix=lg([e[0]||[],e[1]||[]],this.config()),this._tree={key:this.config().isTransposed?Ky:Xy,values:this.createTree()},this._logicalSpace=this.setLogicalSpace()}return yg(VisualMatrix,[{key:"primaryMatrix",value:function primaryMatrix(){return arguments.length?this:this._primaryMatrix}},{key:"secondaryMatrix",value:function secondaryMatrix(){return arguments.length?this:this._secondaryMatrix}},{key:"tree",value:function tree(){return arguments.length?this:this._tree}},{key:"createTree",value:function createTree(){var e=function createTree(e){var t={},n=0,r="primary",i=cg(),a=[],o=e._layoutMatrix,u=e.primaryMatrix(),c=e.secondaryMatrix(),s=e.config(),l=s.isTransposed,f=s.breakPage;if(l){if(r=0===u.length?"primary":0===c.length?"secondary":u.length>=c.length?"primary":"secondary",u.length>0){for(var h=0;h0){for(var d=u.length,p=c.length-1;p>0;p--)a.push(p+d);a.push(d),"primary"===r&&(n=d)}var y;a.forEach(function(e){var t=-1;return i.key(function(n){return t++,n[e].valueOf()+"-"+sg(t,f)})}),y=o[0].map(function(e,t){return o.map(function(e){return e[t]})}),t=i.entries(y)}else{if(r=0===u.length?"primary":0===c.length?"secondary":u.length>=c.length?"primary":"secondary",u.length>0){for(var g=0;g0){for(var v=u.length>0?u[0].length:0,m=c[0].length-1;m>0;m--)a.push(m+v);a.push(v),"primary"===r&&(n=v)}else n=u.length>0?u[0].length-1:0;a.forEach(function(e){var t=-1;return i.key(function(n){return t++,n[e].valueOf()+"-"+sg(t,f)})}),t=i.entries(o)}return{tree:t,lastLevelKey:n}}(this),t=e.tree,n=e.lastLevelKey;return this._lastLevelKey=n,t}},{key:"setLogicalSpace",value:function setLogicalSpace(){var e=this.config().isTransposed,t=this.tree();return function createMatrixEachLevel(e,t){if(e.values[0].key){var n=[];return e.values.forEach(function(e){t?createMatrixEachLevel(e,t).forEach(function(e,t){var r;n[t]=n[t]||[],(r=n[t]).push.apply(r,utils_toConsumableArray(e))}):n.push.apply(n,utils_toConsumableArray(createMatrixEachLevel(e,t)))}),e.matrix=n,n}return e.matrix=t?e.values[0].map(function(t,n){return e.values.map(function(e){return e[n]})}):e.values,e.matrix}(t,e),fg(t,this.config(),this.maxMeasures())}},{key:"getLogicalSpace",value:function getLogicalSpace(){return this.logicalSpace()}},{key:"setAvailableSpace",value:function setAvailableSpace(e,t){this.availableSpace({width:e,height:t});var n=this.tree(),r=this.populateMaxMeasures(Dy,n),i=this.populateMaxMeasures(Iy,n),a=this.calculateDepth(i,r);return this.viewableMatrix=this.createViewPortMatrix(a),this.viewableMeasures=this.redistribute(this.viewableMatrix,e,t),this}},{key:"populateMaxMeasures",value:function populateMaxMeasures(e,t){var n=this,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:[];if(i[r]=Math.max(i[r]||0,t.space[e]),t.values){var a=r+1;t.values.forEach(function(t){t.space&&(i=n.populateMaxMeasures(e,t,a,i))})}return i}},{key:"calculateDepth",value:function calculateDepth(e,t){var n=void 0,r=void 0,i=this.availableSpace(),a=i.height,o=i.width;for(n=0;n0&&void 0!==arguments[0]?arguments[0]:[],t=arguments[1],n=arguments[2],r=arguments[3],i=r._breakPointer,a=r.config().isTransposed,o=n.tree,u=n.layoutMatrix;if(0===t){var c=function breakMatrix(e,t,n){var r=[],i=[];return t?e.forEach(function(e,t){t>=n?i.push(e):r.push(e)}):e.forEach(function(e,t){e.forEach(function(e,a){a>=n?(i[t]=i[t]||[],i[t].push(e)):(r[t]=r[t]||[],r[t].push(e))})}),[r,i]}(o.matrix,a,i);return e.push({matrix:o.matrix,primaryMatrix:c[0],secondaryMatrix:c[1],space:o.space}),e}var s=t-1;return o.values.forEach(function(t){createMatrixInstances(e,s,{tree:t,layoutMatrix:u},r)}),e}(t,e,this.removeExtraCells(),this),t}},{key:"redistributeRowWise",value:function redistributeRowWise(e){var t,n,r=[],i=this.maxMeasures(),a=this.config(),o=a.isDistributionEqual,u=a.distribution,c=a.isTransposed,s=a.gutter,l=e.matrix,f=e.width,h=e.height,d=e.maxHeights,p=e.maxWidths;n=function spaceTakenByColumn(e,t){var n=0,r=0;return e.forEach(function(e){var i=e[t].getLogicalSpace();r=Math.max(r,i.width),n+=i.height}),{width:r,height:n}}(l,this._lastLevelKey).height;var y=i.reduce(function(e,t){return e+=t});return r=y>0?i.map(function(e){return e+e/y*(f-y)}):i.map(function(){return 0}),t=function getDistributedHeight(e){var t,n=0,r=0,i=e.isTransposed,a=e.distribution,o=e.availableHeight,u=e.height,c=e.isDistributionEqual,s=e.gutter,l=e.matrix,f=e.cIdx;a&&void 0!==a[0]&&(n=a.reduce(function(e,t){return e+=t})),s&&void 0!==s[0]&&(r=s.reduce(function(e,t){return e+=t})),t=o-Math.floor(o*r);var h=l.length;return l.map(function(r,o){var s=r[f].getLogicalSpace().height,l=s+s/u*(t-u);return i||(a.length>0&&h===a.length?l=t*a[o]/n:(c||0===e.height)&&(l=t/h)),Math.floor(l)})}({matrix:l,cIdx:this._lastLevelKey,height:n,availableHeight:h,isDistributionEqual:o,distribution:u,isTransposed:c,gutter:s}),p.push(r),d.push(t),{maxWidths:p,maxHeights:d}}},{key:"redistributeColumnWise",value:function redistributeColumnWise(e){var t=[],n=e.matrix,r=e.width,i=e.maxHeights,a=e.maxWidths,o=this.config().unitMeasures.border,u=function spaceTakenByRow(e){var t=0,n=0;return e.forEach(function(e){var r=e.getLogicalSpace();t=Math.max(t,r.height),n+=r.width}),{width:n,height:t}}(n[this._lastLevelKey]).width,c=function getDistributedWidth(e,t){var n=e.availableWidth,r=e.width,i=e.row,a=t.isDistributionEqual,o=t.isTransposed,u=t.distribution,c=0;return u&&u[0]&&(c=u.reduce(function(e,t){return e+=t})),i.map(function(e,t){var s=e.getLogicalSpace().width,l=s+s/r*(n-r);if(o)if(u.length>0)l=n*u[t]/c;else if(a||0===r){var f=i.length;l=n/f}return Math.floor(l)})}({row:n[this._lastLevelKey],width:u,availableWidth:r},this.config());n.forEach(function(e,n){return e.forEach(function(e,r){var i=e.getLogicalSpace().height;e.setAvailableSpace(c[r]-o,i),t[n]=Math.max(t[n]||0,e.getLogicalSpace().height)})}),i.length>0&&(t=t.map(function(e,t){return Math.max(e,i[0][t])})),i.push(t);for(var s=0;s=m&&(r[0][1][n[1]-m]=a[0],i[0][1]=(i[0][1]||0)+a[0]),n[1]===t._lastLevelKey&&(r[1][0][n[0]]=a[1],r[1][1][n[0]]=a[1])})}),{heights:g,widths:v,rowHeights:p,columnWidths:y}}}],[{key:"defaultConfig",value:function defaultConfig(){return pg}}]),VisualMatrix}(),vg=function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function sliceIterator(e,t){var n=[],r=!0,i=!1,a=void 0;try{for(var o,u=e[Symbol.iterator]();!(r=(o=u.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){i=!0,a=e}finally{try{!r&&u.return&&u.return()}finally{if(i)throw a}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}();function layout_helper_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t0&&(n=[].concat(layout_helper_toConsumableArray(w),layout_helper_toConsumableArray(P),layout_helper_toConsumableArray(O))),E.length>0&&(r=[].concat(layout_helper_toConsumableArray(C),layout_helper_toConsumableArray(E),layout_helper_toConsumableArray(F))),k.length>0&&k[0].length>0&&(i=k.map(function(e,t){return[].concat(layout_helper_toConsumableArray(w[t]),layout_helper_toConsumableArray(e),layout_helper_toConsumableArray(C[t]))})),T.length>0&&T[0].length>0&&(a=T.map(function(e,t){return[].concat(layout_helper_toConsumableArray(O[t]),layout_helper_toConsumableArray(e),layout_helper_toConsumableArray(F[t]))})),e.rowMatrix(new gg([n,r],{isDistributionEqual:s,distribution:h.rows,gutter:f.rows,unitMeasures:{width:v,height:g,border:d.width},breakPage:p.rows.map(function(e){return e+Math.max(w.length,C.length)}),extraCellLengths:[w.length,O.length]})),o=w.length>0?w[0].length:O.length>0?O[0].length:0,u=C.length>0?C[0].length:F.length>0?F[0].length:0,e.columnMatrix(new gg([i,a],{isDistributionEqual:l,distribution:h.columns,gutter:f.columns,isTransposed:!0,unitMeasures:{width:v,height:g,border:d.width},breakPage:p.columns,extraCellLengths:[o,u]})),e.centerMatrix(A),t}(this,e),this):function get(e,t,n){null===e&&(e=Function.prototype);var r=Object.getOwnPropertyDescriptor(e,t);if(void 0===r){var i=Object.getPrototypeOf(e);return null===i?void 0:get(i,t,n)}if("value"in r)return r.value;var a=r.get;return void 0!==a?a.call(n):void 0}(GridLayout.prototype.__proto__||Object.getPrototypeOf(GridLayout.prototype),"matrices",this).call(this,e)}},{key:"triggerReflow",value:function triggerReflow(){return function computeLayoutMeasurements(e){var t,n,r,i,a,o=e.rowMatrix(),u=e.columnMatrix(),c=e.centerMatrix(),s=e.measurement(),l=s.width,f=s.height,h=e.config().border,d=e.matrices(),p=d.top,y=d.bottom,g=function getMatrixMeasurement(e,t){return e?e.getLogicalSpace()[t]:0}(o,Iy),v=h.width,m=l-g-v;setMatrixMeasurement(u,Iy,m);var b=u.getViewableSpaces();bg(e,"column",b);var _=b[e.config().columnPointer],x=_.height.primary+_.height.secondary,w=f-x;setMatrixMeasurement(o,Dy,w);var k=o.getViewableSpaces();bg(e,"row",k);var C=(t=[]).concat.apply(t,computations_toConsumableArray(k.map(function(e){return e.rowHeights.primary}))),S=(n=[]).concat.apply(n,computations_toConsumableArray(k.map(function(e){return e.columnWidths.primary}))),P=(r=[]).concat.apply(r,computations_toConsumableArray(k.map(function(e){return e.columnWidths.secondary}))),A=u.getViewableSpaces(),E=(i=[]).concat.apply(i,computations_toConsumableArray(A.map(function(e){return e.columnWidths.primary}))),M=A[0].rowHeights.primary,O=(a=[]).concat.apply(a,computations_toConsumableArray(A.map(function(e){return e.rowHeights.secondary})));c.forEach(function(e,t){e.forEach(function(e,n){e.setAvailableSpace(E[n]-v,C[t]-v)})}),mg(p[0],S,M),mg(p[2],P,M),mg(y[0],S,O),mg(y[2],P,O)}(this),this.setViewInformation(),this}},{key:"gotoPage",value:function gotoPage(e,t){var n=e.toLowerCase(),r=this.getViewInformation().viewMatricesInfo[n+"Pages"],i=Math.min(Math.max(1,t),r);return this.config(function layout_defineProperty(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}({},n+"Pointer",i-1)),this.setViewInformation(),this.renderGrid(),this}},{key:"pages",value:function pages(e){var t=this.getViewInformation().viewMatricesInfo,n=e.toLowerCase();return{totalPages:t[n+"Pages"],currentPage:this.config()[n+"Pointer"]+1}}},{key:"setViewInformation",value:function setViewInformation(){var e=this.config(),t=e.rowPointer,n=e.columnPointer,r=e.border,i=function getViewMatrices(e,t,n){for(var r=e.rowMatrix(),i=e.columnMatrix(),a=e.centerMatrix(),o=e.matrices(),u=r.getViewableData(),c=i.getViewableData(),s={row:0,column:0},l=t-1;l>=0;l--){var f=Math.max(u[l].primaryMatrix.length,u[l].secondaryMatrix.length);s.row+=f}for(var h=n-1;h>=0;h--){var d=c[h],p=d.primaryMatrix,y=d.secondaryMatrix,g=Math.max(p[0]?p[0].length:0,y[0]?y[0].length:0);s.column+=g}o.top[1]=c[n].primaryMatrix,o.bottom[1]=c[n].secondaryMatrix,o.center[0]=u[t].primaryMatrix,o.center[2]=u[t].secondaryMatrix;var v=Math.max(o.center[0].length,o.center[2].length),m=Math.max(o.top[1][0]?o.top[1][0].length:0,o.bottom[1][0]?o.bottom[1][0].length:0);return o.center[1]=a.slice(s.row,s.row+v).map(function(e){return e.slice(s.column,s.column+m)}),{matrices:o,rowPages:u.length,columnPages:c.length}}(this,t,n),a=function getViewMeasurements(e){var t=e.rowMatrix(),n=e.columnMatrix(),r=e.measurement(),i=r.width,a=r.height,o=e.config(),u=o.columnPointer,c=o.rowPointer,s=t.getViewableSpaces()[c].width,l=s.primary,f=s.secondary,h=n.getViewableSpaces()[u].height,d=h.primary,p=h.secondary;return{viewWidth:[l,i-(l+f),f],viewHeight:[d,a-(d+p),p]}}(this);return a.border=r,this.viewInfo={viewMatricesInfo:i,layoutDimensions:a},this}},{key:"getViewInformation",value:function getViewInformation(){return this.viewInfo}},{key:"renderGrid",value:function renderGrid(e){if(this.mountPoint(e),!this.mountPoint())return this;var t=this.getViewInformation(),n=t.viewMatricesInfo,r=t.layoutDimensions;return function renderMatrices(e,t,n){var r=t.top,i=t.center,a=t.bottom,o=e.config().classPrefix,u=e.measurement().width,c=e.mountPoint();Eo(c,"div",[{type:Ly,matrix:r},{type:Hy,matrix:i},{type:zy,matrix:a}],o+"-grid-layout-row").each(function(e,t){var r=Ao(this);r.classed(o+"-grid-layout-row-"+t,!0),renderMatrix(e.matrix,r,e.type,n,o)}).style(Iy,Math.ceil(u)+"px")}(this,n.matrices,r),this}}],[{key:"defaultMeasurement",value:function defaultMeasurement(){return ng}},{key:"defaultConfig",value:function defaultConfig(){return tg}},{key:"create",value:function create(){return new GridLayout(null,null,this.defaultMeasurement(),this.defaultConfig())}}]),GridLayout}(),wg=function(){function defineProperties(e,t){for(var n=0;n0?o:i,v),P=Math.max(u>0?u:a,g),A=function createHeaders(e,t,n){var r=0,i={};return t>=200&&n>=200&&["title","subtitle"].forEach(function(t){var n=e[t](),a=function resolveTitleSubTitleContent(e){return"function"!=typeof e||e._sanitize?function escapeHTML(e){var t={"&":"&","<":"<",">":">",'"':""","'":"'","/":"/"};return(""+e).replace(/[&<>"'/]/g,function(e){return t[e]})}(e()):e()}(n[0]);if(a.length){var o=n[1];o.width=e.width(),o.content=a;var u=lv(o,t,e.dependencies().smartlabel,e[t+"Cell"]),c=u.height,s=u.cell;i[t+"Cell"]=s,e._composition[t]=s,r+=c+o.padding}}),{headerHeight:r,headers:i}}(e,S,P),E=A.headers,M=A.headerHeight,O=function createLegend(e,t,n,r){var i={height:n,width:r,headerHeight:t},a=e.config().legend,o=a.show,u=a.position;a.classPrefix=e.config().classPrefix;var c="left"===u||"right"===u?"vertical":"horizontal";return a.show=o?"vertical"===c&&r>200||"horizontal"===c&&n>200:o,a.align=c,fv(a,e,i,e.legends||[])}(e,M,S,P);e._composition.legend={},O.forEach(function(t){e._composition.legend[t.scaleType]=t.legend});var T=function getLegendSpace(e,t,n,r){var i={width:0,height:0};return e.map(function(e){return e.legend.measurement()}).forEach(function(e){var a,o;o=Math.min(e.width,e.maxWidth),a=Math.min(e.height,e.maxHeight),"horizontal"===t.align?i.width+o>r?(i.width=r,i.height+=a):(i.width+=o,i.height=Math.max(i.height,a)):i.height+a>n?(i.height=a,i.width+=o):(i.height+=a,i.width=Math.max(i.width,o))}),"horizontal"===t.align&&(i.width=r),i}(O,_,S,P),F="left"===k||"right"===k?T.width:0,N="top"===k||"bottom"===k?T.height:0,j={headers:E,legends:O,canvases:[e],rows:h,columns:d,values:p,cornerMatrices:c.cornerMatrices()},I={mountSpace:{height:i,width:a},headerHeight:M,legendSpace:T,canvasWidth:P,canvasHeight:S,width:P-F,height:S-M-N,minUnitHeight:e.minUnitHeight(),minUnitWidth:e.minUnitWidth()};return{layoutConfig:n=na(n,{classPrefix:m,showHeaders:b,border:na(c.metaData().border,e.config().border),layoutArrangement:C,legend:_,title:x,subtitle:w,isColumnSizeEqual:l,isRowSizeEqual:f}),components:j,measurement:I}},dv={position:"top",align:"left",padding:8},pv={position:"top",align:"left",padding:16};function canvas_local_options_defineProperty(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var yv=(canvas_local_options_defineProperty(ov={},"rows",{value:null,meta:{typeCheck:"constructor",typeExpected:"Array"}}),canvas_local_options_defineProperty(ov,"columns",{value:null,meta:{typeCheck:"constructor",typeExpected:"Array"}}),canvas_local_options_defineProperty(ov,"color",{value:null,meta:{typeCheck:"constructor",typeExpected:"Object",sanitization:function sanitization(e){return"string"==typeof e?{field:e}:e}}}),canvas_local_options_defineProperty(ov,"shape",{value:null,meta:{typeCheck:"constructor",typeExpected:"Object",sanitization:function sanitization(e){return"string"==typeof e?{field:e}:e}}}),canvas_local_options_defineProperty(ov,"size",{value:null,meta:{typeCheck:"constructor",typeExpected:"Object",sanitization:function sanitization(e){return"string"==typeof e?{field:e}:e}}}),canvas_local_options_defineProperty(ov,"detail",{value:[],meta:{typeCheck:"constructor",typeExpected:"Array"}}),canvas_local_options_defineProperty(ov,"layers",{value:null,meta:{typeCheck:"constructor",typeExpected:"Array"}}),canvas_local_options_defineProperty(ov,"transform",{value:null,meta:{typeCheck:"constructor",typeExpected:"Object"}}),canvas_local_options_defineProperty(ov,"mount",{value:null,meta:{sanitization:function sanitization(e){return"string"==typeof e?Ao(e).node():e}}}),ov),gv=(canvas_local_options_defineProperty(uv={},"title",{value:[null,null],meta:{typeCheck:["constructor","constructor"],typeExpected:["Function","Object"],spreadParams:!0,sanitization:[function(e){if("string"==typeof e){var n=function t(){return e};return n._sanitized=!0,n}return e},function(e){var t=na({},dv);return na(t,e)}]}}),canvas_local_options_defineProperty(uv,"subtitle",{value:[null,null],meta:{typeCheck:["constructor","constructor"],typeExpected:["Function","Object"],spreadParams:!0,sanitization:[function(e){if("string"==typeof e){var t=function sub(){return e};return t._sanitized=!0,t}return e},function(e){var t=na({},pv);return na(t,e)}]}}),uv),vv=function renderHeader(e,t,n,r){var i=r[n+"Cell"],a=e[""+n],o=a.position,u=a.align,c=a.padding,s=t.selectAll("."+e.classPrefix+"-inner-container").data([n]);s.exit().remove();var l=s.enter().append("div").merge(s);l.classed(e.classPrefix+"-inner-container",!0),i&&i.render(l.node()),l.selectAll("div").classed(e.classPrefix+"-inner-content",!0),l.style("width","100%"),a&&i&&l.style("float","left").style("text-align",u).style("padding-"+("top"===o?"bottom":"top"),c+"px")},mv=function renderComponents(e,t,n,r){var i=e.mount(),a=t.headers,o=t.legends,u=n.classPrefix,c=function getSkeletons(e,t,n){var r=t.layoutArrangement,i=t.classPrefix,a=r.headers,o=r.legends,u=n.canvasWidth,c=n.canvasHeight,s=Ao(e),l={},f=Eo(s,"div",[1],i+"-viz").style("width",u+"px").style("height",c+"px").selectAll("."+i+"-container").data(a);f.exit().remove();var h=f.enter().append("div").merge(f).attr("class",i+"-container").style("width",u+"px").style("padding","nullpx").style("margin",null).each(function(e){l[e]=Ao(this).classed(i+"-"+e+"-container",!0)}).selectAll("."+i+"-inner-container").data(function(e){return"group"===e?o:[]});return h.exit().remove(),h.enter().append("div").merge(h).attr("class",i+"-inner-container").style("width","auto").style("height","auto").each(function(e){l[e]=Ao(this).classed(i+"-"+e+"-container",!0)}),l}(i,n,r),s=c.title,l=c.legend,f=c.subtitle,h=c.layout,d=function prepareGridContainer(e,t,n,r){if(e){var i=t.height,a=t.width,o=Ao(e).selectAll("."+n+"-inner-content").data(["layout"],function(e){return e});o.exit().remove();var u=o.enter().append("div").merge(o).attr("class",n+"-inner-content").classed(n+"-grid-layout",!0).attr("id",n+"-grid-layout-"+r).style("height",i+"px").style("padding",null).style("width",Math.ceil(a)+"px"),c=u.selectAll("."+n+"-layout-grid-container").data(["layout2"]);c.exit().remove();var s=c.enter().append("div").merge(c);return s.classed(n+"-layout-grid-container",!0).attr("id",n+"-layout-grid-container-"+r).style("height",i+"px").style("width",Math.ceil(a)+"px"),{mount:s,container:u}}}(h.node(),r,u,e.alias()).mount,p=e.layout().getViewInformation().layoutDimensions.viewWidth[0];r.padding=p,function setLabelRotationForAxes(e){var t=0,n=e.xAxes()||[];!function(){for(var e=0;ev?(g++,m=0,v=y):g<0&&g++,i[g]=i[g]||[],v-=Math.min(t.measurement().height,v),m=Math.max(Math.min(t.measurement().width,t.measurement().maxWidth),m),i[g].push({legend:t,legendHeight:y,legendWidth:m})});var b=Eo(h,["div"],i,l+"-legend-section").each(function(e,t){return Ao(void 0).classed(l+"-legend-section-"+t,!0)}).classed(l+"-legend-vertical-section",!0).style("width",function(e){return e[0].legendWidth+"px"});Eo(b,["div"],function(e){return e},l+"-legend-components",{},function(e){return e.legend.id()}).each(function(e){e.legend.mount(this)}).style("width",function(e){return e.legendWidth+"px"})}else{var _=Eo(h,"div",[1],l+"-legend-section").classed(l+"-legend-horizontal-section",!0).classed(l+"-legend-section-0",!0).style("width",p+"px");Eo(_,"div",n,l+"-legend-components",{},function(e){return e.legend.id()}).each(function(e){e.legend.mount(this)}).style("width",function(e){return e.legend.measurement().width+"px"})}}(n,l,o,r),function shiftHeaders(e,t,n,r){var i=e.classPrefix,a=e.title,o=e.subtitle,u=e.legend,c=n.legendSpace;t+="left"===u.position?c.width:0,a&&Ao(r).select("."+i+"-title-container").style("width","left"===a.align?"calc(100% - "+t+"px":"100%").style("margin-left","left"===a.align?t+"px":0),o&&Ao(r).select("."+i+"-subtitle-container").style("width","left"===o.align?"calc(100% - "+t+"px":"100%").style("margin-left","left"===o.align?t+"px":0),Ao(r).select("."+i+"-legend-horizontal-section").style("margin-left",t+"px").style("width",c.width-t+"px").selectAll("."+i+"-legend-body, ."+i+"-legend-title").style("max-width",c.width-t+"px"),Ao(r).select("."+i+"-legend-vertical-section").style("margin-left",null).selectAll("."+i+"-legend-body, ."+i+"-legend-title").style("max-width",null)}(n,p,r,i)}),e.composition().visualGroup.matrixInstance().value.each(function(e){e.valueOf().parentContainer(h.node())})};function canvas_helper_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t",keywords:["datamodel","data","relational","algebra","model","muze","fusioncharts","table","tabular","operation"],repository:{type:"git",url:"https://github.com/chartshq/datamodel.git"},contributors:[{name:"Akash Goswami",email:"akash@charts.com"},{name:"Subhash Haldar",email:"subhash@charts.com"},{name:"Rousan Ali",email:"rousan@charts.com",url:"https://rousan.io"},{name:"Ujjal Kumar Dutta",email:"ujjal@charts.com"}],dependencies:{"d3-dsv":"^1.0.8"},devDependencies:{"babel-cli":"6.26.0","babel-core":"^6.26.3","babel-eslint":"6.1.2","babel-loader":"^7.1.4","babel-plugin-transform-runtime":"^6.23.0","babel-preset-env":"^1.7.0","babel-preset-es2015":"^6.24.1","babel-preset-flow":"^6.23.0",chai:"3.5.0","cross-env":"^5.0.5",eslint:"3.19.0","eslint-config-airbnb":"15.1.0","eslint-plugin-import":"2.7.0","eslint-plugin-jsx-a11y":"5.1.1","eslint-plugin-react":"7.3.0","istanbul-instrumenter-loader":"^3.0.0",jsdoc:"3.5.5",json2yaml:"^1.1.0",karma:"1.7.1","karma-chai":"0.1.0","karma-chrome-launcher":"2.1.1","karma-coverage-istanbul-reporter":"^1.3.0","karma-mocha":"1.3.0","karma-spec-reporter":"0.0.31","karma-webpack":"2.0.3",marked:"^0.5.0",mocha:"3.4.2","mocha-webpack":"0.7.0","transform-runtime":"0.0.0",webpack:"^4.12.0","webpack-cli":"^3.0.7","webpack-dev-server":"^3.1.4"},scripts:{test:"npm run lint && npm run ut",ut:"karma start karma.conf.js",utd:"karma start --single-run false --browsers Chrome karma.conf.js ",build:"webpack --mode production","build:dev":"webpack --mode development",start:"webpack-dev-server --config webpack.config.dev.js --mode development --open",lint:"eslint ./src","lint-errors":"eslint --quiet ./src",docs:"rm -rf yaml && mkdir yaml && jsdoc -c jsdoc.conf.json"}}},function(e,t,n){var r=n(2);e.exports=r.default?r.default:r},function(n,c,f){"use strict";f.r(c);var p={};f.r(p),f.d(p,"DataFormat",function(){return b}),f.d(p,"DimensionSubtype",function(){return _}),f.d(p,"MeasureSubtype",function(){return C}),f.d(p,"FieldType",function(){return P}),f.d(p,"FilteringMode",function(){return A});var y={};f.r(y),f.d(y,"DSVArr",function(){return Je}),f.d(y,"DSVStr",function(){return lt}),f.d(y,"FlatJSON",function(){return ft}),f.d(y,"Auto",function(){return ht});var g={};f.r(g),f.d(g,"sum",function(){return Et}),f.d(g,"avg",function(){return Mt}),f.d(g,"min",function(){return Ot}),f.d(g,"max",function(){return Tt}),f.d(g,"first",function(){return Ft}),f.d(g,"last",function(){return Nt}),f.d(g,"count",function(){return jt}),f.d(g,"sd",function(){return It});var b={FLAT_JSON:"FlatJSON",DSV_STR:"DSVStr",DSV_ARR:"DSVArr",AUTO:"Auto"},_={CATEGORICAL:"categorical",TEMPORAL:"temporal",GEO:"geo"},C={DISCRETE:"discrete"},P={MEASURE:"measure",DIMENSION:"dimension"},A={NORMAL:"normal",INVERSE:"inverse",ALL:"all"};function l(e,t){e.length>0&&e.split(",").forEach(function(e){var n=e.split("-"),r=+n[0],i=+(n[1]||n[0]);if(i>=r)for(var a=r;a<=i;a+=1)t(a)})}var O=function(){function e(e,t){for(var n=0;n=0;)o=e[a+1],-1!==r.indexOf(o)&&i.push({index:a,token:o});return i},m.formatAs=function(e,t){var n,r=h(e),i=m.findTokens(t),a=m.getTokenDefinitions(),o=String(t),u=m.TOKEN_PREFIX,c=void 0,s=void 0,l=void 0;for(l=0,n=i.length;l=0;h--)(s=a[h].index)+1!==f.length-1?(void 0===u&&(u=f.length),l=f.substring(s+2,u),f=f.substring(0,s+2)+RegExp.escape(l)+f.substring(u,f.length),u=s):u=s;for(h=0;h1){r=Math.abs(n[1]-n[0]);for(var i=2,a=n.length;i3&&void 0!==arguments[3]&&arguments[3],i=arguments.length>4&&void 0!==arguments[4]?arguments[4]:ye.CROSS,a=[],o=[],u=n||K,c=e.getFieldspace(),s=t.getFieldspace(),f=c.name,h=s.name,d=c.name+"."+s.name,p=L(c,s);if(f===h)throw new Error("DataModels must have different alias names");return c.fields.forEach(function(e){var t=E({},e.schema);-1===p.indexOf(t.name)||r||(t.name=c.name+"."+t.name),a.push(t)}),s.fields.forEach(function(e){var t=E({},e.schema);-1!==p.indexOf(t.name)?r||(t.name=s.name+"."+t.name,a.push(t)):a.push(t)}),l(e._rowDiffset,function(e){var n=!1,d=void 0;l(t._rowDiffset,function(t){var l=[],y={};y[f]={},y[h]={},c.fields.forEach(function(t){l.push(t.data[e]),y[f][t.name]=t.data[e]}),s.fields.forEach(function(e){-1!==p.indexOf(e.schema.name)&&r||l.push(e.data[t]),y[h][e.name]=e.data[t]});var g=Ke(y[f]),v=Ke(y[h]);if(u(g,v)){var m={};l.forEach(function(e,t){m[a[t].name]=e}),n&&ye.CROSS!==i?o[d]=m:(o.push(m),n=!0,d=e)}else if((i===ye.LEFTOUTER||i===ye.RIGHTOUTER)&&!n){var b={},_=c.fields.length-1;l.forEach(function(e,t){b[a[t].name]=t<=_?e:null}),n=!0,d=e,o.push(b)}})}),new At(o,a,{name:d})}function z(e,t){var n=""+e,r=""+t;return nr?1:0}function X(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:z;return e.length>1&&function e(t,n,r,i){if(r===n)return t;var a=n+Math.floor((r-n)/2);return e(t,n,a,i),e(t,a+1,r,i),function(e,t,n,r,i){for(var a=e,o=[],u=t;u<=r;u+=1)o[u]=a[u];for(var c=t,s=n+1,l=t;l<=r;l+=1)c>n?(a[l]=o[s],s+=1):s>r?(a[l]=o[c],c+=1):i(o[c],o[s])<=0?(a[l]=o[c],c+=1):(a[l]=o[s],s+=1)}(t,n,a,r,i),t}(e,0,e.length-1,t),e}function Q(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);to?"desc"===t?-1:1:0}}return i}function Z(e,t){var n=new Map,r=[];return e.forEach(function(e){var i=e[t];n.has(i)?r[n.get(i)][1].push(e):(r.push([i,[e]]),n.set(i,r.length-1))}),r}function ee(e,t,n){var r={label:e[0]};return t.reduce(function(t,r,i){return t[r]=e[1].map(function(e){return e[n[i].index]}),t},r),r}function ne(e,t){var n={},r=[],i=[],a=[],o=e.getFieldspace(),u=t.getFieldspace(),c=o.fieldsObj(),s=u.fieldsObj(),f=o.name+" union "+u.name;if(!M(e._colIdentifier.split(",").sort(),t._colIdentifier.split(",").sort()))return null;function d(e,t,r){l(e._rowDiffset,function(e){var o={},u="";i.forEach(function(n){var r=t[n].data[e];u+="-"+r,o[n]=r}),n[u]||(r&&a.push(o),n[u]=!0)})}return e._colIdentifier.split(",").forEach(function(e){var t=c[e];r.push(E({},t.schema)),i.push(t.schema.name)}),d(t,s,!1),d(e,c,!0),new At(a,r,{name:f})}function re(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);tn&&(n=e)}),[t,n]}(this.data)}},{key:"parse",value:function value(e){return e=parseFloat(e,10),Number.isNaN(e)?null:e}},{key:"unit",value:function value(){return this.fieldUnit}},{key:"scale",value:function value(){return this.fieldScale}},{key:"numberFormat",value:function value(){var e=this.fieldNumberformat;return function(t){return e(t)}}},{key:"defAggFn",value:function value(){return this.fieldDefAggFn}}]),t}(),Ee=function(){function e(e,t){for(var n=0;n=a?c=!0:(r=e.charCodeAt(o++))===at?l=!0:r===ot&&(l=!0,e.charCodeAt(o)===at&&++o),e.slice(i+1,t-1).replace(/""/g,'"')}for(;o2&&void 0!==arguments[2]?arguments[2]:{},i=arguments[3],a=void 0;t!==fe?(a={op:t,meta:r,criteria:i},e._derivation.push(a)):(a=[].concat(Ge(i)),e._derivation.length=0,(n=e._derivation).push.apply(n,Ge(a)))},yt=function ze(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=n.operation||"and",i=n.filterByMeasure||!1,a=[];a=t.length?t.map(function(e){return function(e){var t=e.getData(),n=t.schema,r=e.getFieldsConfig(),a=e.getFieldspace().fieldsObj(),o=t.data,u=Object.values(r).reduce(function(e,t){return e[t.def.name]=a[t.def.name].domain(),e},{});return function(e){return!!o.length&&o.some(function(t){return n.every(function(n){if(!(n.name in e))return!0;var a=e[n.name].valueOf();if(i&&n.type===P.MEASURE)return a>=u[n.name][0]&&a<=u[n.name][1];if(n.type!==P.DIMENSION)return!0;var o=r[n.name].index;return t[o]===e[n.name].valueOf()})})}}(e)}):[function(){return!1}];return"and"===r?e.clone(!1,!1).select(function(e){return a.every(function(t){return t(e)})},{saveChild:!1,mode:A.ALL}):e.clone(!1,!1).select(function(e){return a.some(function(t){return t(e)})},{mode:A.ALL,saveChild:!1})},gt=function Xe(e,t,n,r){var i=e.clone(r.saveChild),a=function(e,t,n,r){var i=[],a=-1,o=void 0,c=function u(e){return n(qe(t,e),e)};return r.mode===A.INVERSE&&(c=function u(e){return!n(qe(t,e))}),l(e,function(e){c(e)&&(-1!==a&&e===a+1?(o=i.length-1,i[o]=i[o].split("-")[0]+"-"+e):i.push(""+e),a=e)}),i.join(",")}(i._rowDiffset,i.getPartialFieldspace().fields,t,n);return i._rowDiffset=a,i.__calculateFieldspace().calculateFieldsConfig(),r.saveChild&&pt(i,ce,{config:n},t),i},vt=function Qe(e,t,n,r){var i=e.clone(n.saveChild),a=t;return n.mode===A.INVERSE&&(a=r.filter(function(e){return-1===t.indexOf(e)})),i._colIdentifier=a.join(","),i.__calculateFieldspace().calculateFieldsConfig(),n.saveChild&&pt(i,se,{projField:t,config:n,actualProjField:a},null),i},mt=function $e(e,t,n,r){r=Object.assign(Object.assign({},Ze),r);var i=y[r.dataFormat];if(!i||"function"!=typeof i)throw new Error("No converter function found for "+r.dataFormat+" format");var a=i(t,r),o=dt(a,2),u=o[0],c=o[1],s=Ue(c,n,u),l=Y.createNamespace(s,r.name);return e._partialFieldspace=l,e._rowDiffset=c.length&&c[0].length?"0-"+(c[0].length-1):"",e._colIdentifier=n.map(function(e){return e.name}).join(),e},bt=function Ze(e,t){for(var n=0;n2&&void 0!==arguments[2]?arguments[2]:{},i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},a=i.nonTraversingModel,o=i.excludeModels||[];t!==a&&((!o.length||-1===o.indexOf(t))&&t.handlePropagation(n,r),t._children.forEach(function(t){var a=_t(n,t),o=dt(a,2),u=o[0],c=o[1];e(t,[u,c],r,i)}))},wt=function nt(e,t,n,r){var i=void 0,a=void 0,o=n.propagationNameSpace,u=n.propagateToSource,c=n.sourceId,s=r.propagateInterpolatedValues,l=[];if(null===e&&!0!==r.persistent)l=[{criteria:[]}];else{var f,h=Object.values(o.mutableActions);!1!==u&&(h=h.filter(function(e){return e.config.sourceId!==c}));var d=h.filter(function(e){return(r.filterFn||function(){return!0})(e,r)}).map(function(e){return e.config.criteria}),p=[];if(!1!==u){var y=Object.values(o.mutableActions);y.forEach(function(e){var t=e.config;!1===t.applyOnSource&&t.action===r.action&&t.sourceId!==c&&(p.push(e.model),(i=y.filter(function(t){return t!==e}).map(function(e){return e.config.criteria})).length&&l.push({criteria:i,models:e.model,path:function e(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];return null!==t._parent&&(n.push(t),e(t._parent,n)),n}(e.model)}))})}i=(f=[]).concat.apply(f,[].concat(Ge(d),[e])).filter(function(e){return null!==e}),l.push({criteria:i,excludeModels:[].concat(p,Ge(r.excludeModels||[]))})}var g=t.model,v=Object.assign({sourceIdentifiers:e,propagationSourceId:c},r),m=t.groupByModel;s&&m&&(a=yt(m,i,{filterByMeasure:s}),xt(m,a,v)),l.forEach(function(e){var t=yt(g,e.criteria),n=e.path;if(n){var r=function(e,t){for(var n=0,r=t.length;n0&&void 0!==arguments[0])||arguments[0],t=void 0;if(!1===(!(arguments.length>1&&void 0!==arguments[1])||arguments[1])){var n=this.getData({getAllFields:!0}),r=n.data,i=n.schema,a=r.map(function(e){var t={};return i.forEach(function(n,r){t[n.name]=e[r]}),t});t=new this.constructor(a,i)}else t=new this.constructor(this);return e&&this._children.push(t),t}},{key:"project",value:function value(e,t){var n={mode:A.NORMAL,saveChild:!0};t=Object.assign({},n,t);var r=this.getFieldsConfig(),i=Object.keys(r),a=t.mode,o=e.reduce(function(e,t){return"RegExp"===t.constructor.name?e.push.apply(e,function(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t1&&void 0!==arguments[1]?arguments[1]:[];pt(this,fe,null,t),this._parent=e,e._children.push(this)}}]),e}(),St=function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function(e,t){var n=[],r=!0,i=!1,a=void 0;try{for(var o,u=e[Symbol.iterator]();!(r=(o=u.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){i=!0,a=e}finally{try{!r&&u.return&&u.return()}finally{if(i)throw a}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")},Pt=function(){function e(e,t){for(var n=0;n0,c=[];if(n.split(",").forEach(function(t){for(var n=0;n=0;u--)i=t[u][0],a=t[u][1],(o=bt(r,i))&&(S(a)?X(n,function(e,t){return a(e[o.index],t[o.index])}):j(a)?function(){var e=Z(n,o.index),t=a[a.length-1],i=a.slice(0,a.length-1),u=i.map(function(e){return bt(r,e)});e.forEach(function(e){e.push(ee(e,i,u))}),X(e,function(e,n){var r=e[2],i=n[2];return t(r,i)}),n.length=0,e.forEach(function(e){n.push.apply(n,Q(e[1]))})}():(a="desc"===String(a).toLowerCase()?"desc":"asc",X(n,$(o.type,a,o.index))));e.uids=[],n.forEach(function(t){e.uids.push(t.pop())})}(a,r),i.columnWise){var s=Array.apply(void 0,Q(Array(a.schema.length))).map(function(){return[]});a.data.forEach(function(e){e.forEach(function(e,t){s[t].push(e)})}),a.data=s}return a}.call(this,this.getPartialFieldspace().fields,this._rowDiffset,e.getAllFields?t.map(function(e){return e.name}).join():this._colIdentifier,e.sort,{columnWise:"column"===e.order,addUid:!!e.withUid});if(!e.formatter)return n;var r=e.formatter,i=n.data,a=n.schema,o=n.uids,u=a.map(function(e){return e.name}),c=Object.keys(r).reduce(function(e,t){var n=u.indexOf(t);return-1!==n&&e.push([n,r[t]]),e},[]);return"column"===e.order?c.forEach(function(e){var t=e[0],n=e[1];i[t].forEach(function(e,r){i[t][r]=n.call(void 0,e,o[r],a[t])})}):i.forEach(function(e,t){c.forEach(function(n){var r=n[0],i=n[1];e[r]=i.call(void 0,e[r],o[t],a[r])})}),n}},{key:"groupBy",value:function value(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{saveChild:!0},r=""+e.join(),i=function de(e,t,n,r){var i=function(e,t){var n=[],r=e.getPartialFieldspace(),i=r.getDimension(),a=r.getMeasure();return Object.entries(i).forEach(function(e){var r=ke(e,1)[0];t&&t.length?-1!==t.indexOf(r)&&n.push(r):n.push(r)}),Object.entries(a).forEach(function(e){var r=ke(e,1)[0];"discrete"===a[r].subType()&&(t&&t.length?-1!==t.indexOf(r)&&n.push(r):n.push(r))}),n}(e,t),a=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n={},r=t,i=e.getPartialFieldspace().getMeasure(),a=we.defaultReducer();return"function"==typeof t&&(a=t),Object.entries(i).forEach(function(e){var o=ke(e,1)[0];"string"==typeof t[o]&&(r[o]=we.resolve(r[o])?we.resolve(r[o]):a),"function"!=typeof t[o]&&(r[o]=void 0),n[o]=r[o]||we.resolve(i[o].defAggFn())||a}),n}(e,n),o=e.getPartialFieldspace(),u=o.fieldsObj(),c=o.name,s=[],f=[],h=[],d={},p=[],y=void 0;Object.entries(u).forEach(function(e){var t=ke(e,2),n=t[0],r=t[1];(-1!==i.indexOf(n)||a[n])&&(h.push(E({},r.schema)),"measure"===r.schema.type&&"discrete"!==r.schema.subtype?f.push(n):"dimension"!==r.schema.type&&"discrete"!==r.schema.subtype||s.push(n))});var g=0;return l(e._rowDiffset,function(e){var t="";s.forEach(function(n){t=t+"-"+u[n].data[e]}),void 0===d[t]?(d[t]=g,p.push({}),s.forEach(function(t){p[g][t]=u[t].data[e]}),f.forEach(function(t){p[g][t]=[u[t].data[e]]}),g+=1):f.forEach(function(n){p[d[t]][n].push(u[n].data[e])})}),p.forEach(function(e){var t=e;f.forEach(function(n){t[n]=a[n](e[n])})}),r?(r.__calculateFieldspace(),y=r):y=new Lt(p,h,{name:c}),y}.apply(void 0,[this,e,t]);return n.saveChild&&(this._children.push(i),pt(i,le,{fieldsArr:e,groupByString:r,defaultReducer:we.defaultReducer()},t)),i._parent=this,i}},{key:"sort",value:function value(e){var t=this.getData({order:"row",sort:e}),n=[t.schema.map(function(e){return e.name})].concat(t.data),r=new this.constructor(n,t.schema,{dataFormat:"DSVArr"});return r._sortingDetails=e,r}},{key:"addField",value:function value(e){var t=e.fieldName();this._colIdentifier+=","+t;var n=this._partialFieldspace;if(n.fieldsObj()[e.fieldName()]){var r=n.fields.findIndex(function(e){return e.name===t});r>=0&&(n.fields[r]=e)}else n.fields.push(e);return this.__calculateFieldspace().calculateFieldsConfig(),this}},{key:"calculateVariable",value:function value(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{saveChild:!0,replaceVar:!1},r=this.getFieldsConfig(),i=t.slice(0,t.length-1),a=t[t.length-1];if(r[e.name]&&!n.replaceVar)throw new Error(e.name+" field already exists in model.");var o=i.map(function(e){var t=r[e];if(!t)throw new Error(e+" is not a valid column name.");return t.index}),u=this.clone(),c=u.getFieldspace().fields,s=o.map(function(e){return c[e]}),f=[];l(u._rowDiffset,function(e){var t=s.map(function(t){return t.data[e]});f[e]=a.apply(void 0,function(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t1&&void 0!==arguments[1]?arguments[1]:{},n=arguments[2],r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},i=t.isMutableAction,a=t.sourceId,o=t.payload,u=function e(t){return t._parent?e(t._parent):t}(this),c=u._propagationNameSpace,s={groupByModel:function e(t){return t._parent&&t._derivation.find(function(e){return"group"!==e.op})?e(t._parent):t}(this),model:u};return n&&function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments[2],r=void 0,i=t.isMutableAction,a=t.criteria,o=t.action+"-"+t.sourceId;r=i?e.mutableActions:e.immutableActions,null===a?delete r[o]:r[o]={model:n,config:t}}(c,t,this),wt(e,s,{propagationNameSpace:c,sourceId:a},Object.assign({payload:o},t)),i&&function(e,t,n){var r=e.immutableActions;for(var i in r){var a=r[i].config,o=n.config.sourceId,u=!n.propConfig.filterImmutableAction||n.propConfig.filterImmutableAction(a,n.config);if(a.sourceId!==o&&u){var c=a.criteria;wt(c,t,{propagationNameSpace:e,propagateToSource:!1,sourceId:o},a)}}}(c,s,{config:t,propConfig:r}),this}},{key:"on",value:function value(e,t){switch(e){case"propagation":this._onPropagation.push(t)}return this}},{key:"unsubscribe",value:function value(e){switch(e){case"propagation":this._onPropagation=[]}return this}},{key:"handlePropagation",value:function value(e,t){var n=this;this._onPropagation.forEach(function(r){return r.call(n,e,t)})}},{key:"bin",value:function value(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=this.clone(),r=t.name||e+"_binned";if(this.getFieldsConfig()[r]||!this.getFieldsConfig()[e])throw new Error("Field "+e+" already exists.");var i=function I(e,t,n){var r=n.buckets,i=n.binCount,a=n.binSize,o=n.start,u=[],c=[],s=e.domain(),f=ue(s,2),h=f[0],d=f[1],p=d,y=[],g=void 0,v=void 0,m=void 0,b=void 0;if(l(t,function(t){u.push({data:e.data[t],index:t})}),!r){var _=((d+=1)-h)%(a=a||(d-h)/i);for(i||0===_||(d=d+a-_),g=h+a;g<=d;)y.push(g),g+=a;r={start:o=o||h,stops:y}}v=0===r.start?0:r.start||h,r.stops.forEach(function(e){u.filter(function(t){return t.data>=v&&t.data=r.stops[r.stops.length-1]}).forEach(function(e){c[e.index]=r.stops[r.stops.length-1]+"-"+p}),r.stops.unshift(r.start),b=new Set(r.stops),hr.stops[r.stops.length-1]&&b.add(p),b=[].concat(function(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t1&&void 0!==arguments[1]?arguments[1]:{saveChild:!0}).saveChild;return t.forEach(function(e){n=e(n),i.push.apply(i,function(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t1&&r.dispose(),n}},bin:function bin(){for(var e=arguments.length,t=Array(e),n=0;n2?(i=arguments.length<=0?void 0:arguments[0],r=arguments.length<=1?void 0:arguments[1],a=arguments.length<=2?void 0:arguments[2]):(i=null,r=arguments.length<=0?void 0:arguments[0],a=arguments.length<=1?void 0:arguments[1]),t=a(w),(e=n=new A(t.fn)).addDependencies.apply(e,P(t.dependencies)),this._addPropInModel(i,function(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}({},r,n)),this}},{key:"_addPropInModel",value:function value(e,t){return this._graph.createNodesFrom(t,e),this}},{key:"on",value:function value(e,t,n){var r,i=e instanceof Array?e:[e],a=this._graph.createElectricNodeOf(i,{type:"CurrFrame",fn:t});return n&&(r=this._graph.stopPropagation().setPropagationOverride("nextFrame")).resetNodeValue.apply(r,P(e)),a}},{key:"next",value:function value(e,t,n){var r,i=e instanceof Array?e:[e],a=this._graph.createElectricNodeOf(i,{type:"NextFrame",fn:t});return n&&(r=this._graph.stopPropagation().setPropagationOverride("currentFrame")).resetNodeValue.apply(r,P(e)),a}},{key:"lock",value:function value(){return this._lockFlag=!0,this._reqQ.length=0,this}},{key:"unlock",value:function value(){return this._lockFlag=!1,this.setProp.apply(this,P(this._reqQ)),this._reqQ.length=0,this}},{key:"prop",value:function value(){var e,t=void 0,n=void 0;switch(e=arguments.length){case 1:t=arguments.length<=0?void 0:arguments[0];break;case 2:t=arguments.length<=0?void 0:arguments[0],n=arguments.length<=1?void 0:arguments[1];break;default:return this}return 2===e?(this._lockFlag?this._reqQ.push([t,n]):this.setProp([t,n]),this):this._graph.getNodeValue(t)}},{key:"setProp",value:function value(){for(var e,t=this,n=arguments.length,r=Array(n),i=0;i/gi),e},SmartLabelManager.store={},SmartLabelManager.prototype._calCharDimWithCache=function(e,t,n){if(!this._init)return!1;var r,i,a,o,u,c,s=this.options.maxCacheLimit,l=this._container,h=this.style||{},d=this._advancedCache||(this._advancedCache={}),p=this._advancedCacheKey||(this._advancedCacheKey=[]),y=e+(h.fontSize||"")+(h.fontFamily||"")+(h.fontWeight||"")+(h.fontStyle||""),g=e+"init"+(h.fontSize||"")+(h.fontFamily||"")+(h.fontWeight||"")+(h.fontStyle||"");return f[e]&&(e=f[e]),t?void 0===(c=d[g])&&(l.innerHTML=e.repeat?e.repeat(n):Array(n+1).join(e),a=l.offsetWidth,l.innerHTML=e,o=l.offsetWidth,c=d[g]=(a-n*o)/(n+1),p.push(g),p.length>s&&delete d[p.shift()]):c=0,(u=d[y])?(i=u.split(","),{width:parseFloat(i[0],10),height:parseFloat(i[1],10)}):(l.innerHTML=e,r={height:l.offsetHeight,width:l.offsetWidth+c},d[y]=r.width+","+r.height,p.push(y),p.length>s&&delete d[p.shift()],r)},SmartLabelManager.prototype._getWidthFn=function(){var e=this._containerObj,t=this._container,n=e.svgText;return n?function(e){var t,r;return n.textContent=e,(r=(t=n.getBBox()).width-d)<1&&(r=t.width),r}:function(e){return t.innerHTML=e,t.offsetWidth}},SmartLabelManager.prototype.setStyle=function(e){return this._init?e!==this.style||this._styleNotSet?(e||(e=this.style),o.setLineHeight(e),this.style=e,this._containerObj=t=this._containerManager.get(e),this._containerObj?(this._container=t.node,this._context=t.context,this._cache=t.charCache,this._lineHeight=t.lineHeight,this._styleNotSet=!1):this._styleNotSet=!0,this):void 0:this;var t},SmartLabelManager.prototype.useEllipsesOnOverflow=function(e){return this._init?(this._showNoEllipses=!e,this):this},SmartLabelManager.prototype.getSmartText=function(e,t,n,r){if(!this._init)return!1;void 0===e||null===e?e="":"string"!=typeof e&&(e=e.toString());var i,a,c,l,f,d,p,y,g,v,m,b,_,x,w,k,C,S,P,A,E,M,O,T,F,N,j=!1,I=0,D=-1,L=-1,R=-1,B=0,z=0,H=[],V=0,U=this._showNoEllipses?"":"...",W=this._lineHeight,q=this._context,G=this._container,Y=this._containerObj,X=Y.ellipsesWidth,K=Y.dotWidth,$=[],Q=-1,Z=-1,J=-1,ee=function fastTrim(e){for(var t=/\s/,n=(e=e.replace(/^\s\s*/,"")).length;t.test(e.charAt(n-=1)););return e.slice(0,n+1)},te={text:e,maxWidth:t,maxHeight:n,width:null,height:null,oriTextWidth:null,oriTextHeight:null,oriText:e,isTruncated:!1};if(b=this._getWidthFn(),n===W&&(n*=1.2),G){if(!h.isBrowserLess){if((j=o.xmlTagRegEx.test(e))?(G.innerHTML=e,te.oriTextWidth=p=G.offsetWidth,te.oriTextHeight=y=G.offsetHeight):(l=e.replace(o.ltgtRegex,function(e){return"<"===e?"<":">"}),w=this.getOriSize(l,!0),te.oriTextWidth=p=w.width,te.oriTextHeight=y=w.height),y<=n&&p<=t)return te.width=te.oriTextWidth=p,te.height=te.oriTextHeight=y,te;if(W>n)return te.text="",te.width=te.oriTextWidth=0,te.height=te.oriTextHeight=0,te}if(e=ee(e).replace(/(\s+)/g," "),f=this._showNoEllipses?t:t-X,!j){if(i=(H=e.split("")).length,a="",c=[],m=H[0],this._cache[m]?P=this._cache[m].width:(P=b(m),this._cache[m]={width:P}),f>P)V=(c=e.substr(0,o.getNearestBreakIndex(e,f,this)).split("")).length;else{if(P>t)return te.text="",te.width=te.oriTextWidth=te.height=te.oriTextHeight=0,te;U&&((f=t-2*K)>P?U="..":(f=t-K)>P?U=".":(f=0,U=""))}if(B=b(c.join("")),z=this._lineHeight,r){for(;Vf&&(a||(a=c.slice(0,-1).join("")),B>t))return te.text=ee(a)+U,te.tooltext=te.oriText,te.width=b(te.text),te.height=this._lineHeight,te;return te.text=c.join(""),te.width=B,te.height=this._lineHeight,te}for(;Vf&&(a||(a=c.slice(0,-1).join("")),B>t)){if(L=e.substr(0,c.length).lastIndexOf(" "),D=e.substr(0,c.length).lastIndexOf("-"),L>R?(B=b(c.slice(R+1,L).join("")),c.splice(L,1,"
"),R=L,g=L+1):D>R?(D===c.length-1?(B=b(c.slice(R+1,L).join("")),c.splice(D,1,"
-")):(B=b(c.slice(R+1,L).join("")),c.splice(D,1,"-
")),R=D,g=D+1):(c.splice(c.length-1,1,"
"+H[V]),J=c.length-2,B=b(c.slice(R+1,J+1).join("")),R=J,g=V),(z+=this._lineHeight)>n)return te.text=ee(a)+U,te.tooltext=te.oriText,te.width=t,te.height=z-this._lineHeight,te;I=s(I,B),a=null,v=o.getNearestBreakIndex(e.substr(g),f,this),B=b(e.substr(g,v||1)),c.length)/g,'$1'),G.innerHTML=e,C=0,S=(k=G[h.childRetriverFn](h.childRetriverString)).length;Ct)return te.text="",te.width=te.oriTextWidth=te.height=te.oriTextHeight=0,te;if(P>f&&!this._showNoEllipses&&((f=t-2*K)>P?U="..":(f=t-K)>P?U=".":(f=0,U="")),_=$[0].elem.offsetLeft,x=$[0].elem.offsetTop,r)for(;Vf&&(N||(N=V),G.offsetWidth>t&&(F=V,V=i));else for(;Vf?(N||(N=V),M>t&&(L=$[V].spaceIdx,D=$[V].dashIdx,L>R?($[L].elem.innerHTML="
",R=L):D>R?($[D].elem.innerHTML=D===V?"
-":"-
",R=D):A.parentNode.insertBefore(T=u.createElement("br"),A),A.offsetHeight+A.offsetTop>n?(T?T.parentNode.removeChild(T):R===D?$[D].elem.innerHTML="-":$[L].elem.innerHTML=" ",F=V,V=i):N=null)):O>n&&(F=V,V=i);if(F=N;V-=1)(A=$[V].elem).parentNode.removeChild(A);for(;V>=0;V-=1)A=$[V].elem,o.classNameBrReg.test(A.className)?A.parentNode.removeChild(A):V=0}return te.text=G.innerHTML.replace(o.spanRemovalRegx,"$1").replace(/\&\;/g,"&"),te.isTruncated&&(te.text+=U,te.tooltext=d),te.height=G.offsetHeight,te.width=G.offsetWidth,te}return te.error=new Error("Body Tag Missing!"),te},SmartLabelManager.prototype.getOriSize=function(e,t){if(!this._init)return!1;var n,r,i,a,o,u=0,c=0,f={};if(!t)return this._calCharDimWithCache(e);for(a=0,o=(n=e.split("")).length;a]+?\>)|(&(?:[a-z]+|#[0-9]+);|.)/gi,spanAdditionReplacer:'$1$2',spanRemovalRegx:new RegExp("\\]+?"+c+"[^\\>]{0,}\\>(.*?)\\<\\/span\\>","ig"),xmlTagRegEx:new RegExp("<[^>][^<]*[^>]+>","i"),ltgtRegex:/<|>/g,brReplaceRegex://gi,testStrAvg:"WgI",parentContainerStyle:{position:"absolute",top:"-9999em",whiteSpace:"nowrap",padding:"0px",width:"1px",height:"1px",overflow:"hidden"},supportedStyle:{font:"font",fontFamily:"font-family","font-family":"font-family",fontWeight:"font-weight","font-weight":"font-weight",fontSize:"font-size","font-size":"font-size",lineHeight:"line-height","line-height":"line-height",fontStyle:"font-style","font-style":"font-style"},getDocumentSupport:function getDocumentSupport(){var r,i,a;return t.getElementsByClassName?(r="getElementsByClassName",i=c,a=!0):(r="getElementsByTagName",i="span",a=!1),{isIE:/msie/i.test(n)&&!e.opera,hasSVG:Boolean(e.SVGAngle||t.implementation.hasFeature("http://www.w3.org/TR/SVG11/feature#BasicStructure","1.1")),isHeadLess:new RegExp(" HtmlUnit").test(n),isWebKit:new RegExp(" AppleWebKit/").test(n),childRetriverFn:r,childRetriverString:i,noClassTesting:a}},createContainer:function createContainer(e){var n,r;if(e&&(e.offsetWidth||e.offsetHeight)){if(e.appendChild)return e.appendChild(r=t.createElement("DIV")),r.className=u,r.setAttribute("aria-hidden","true"),r.setAttribute("role","presentation"),r}else if((n=t.getElementsByTagName("body")[0])&&n.appendChild)return(r=t.createElement("DIV")).className=u,r.setAttribute("aria-hidden","true"),r.setAttribute("role","presentation"),1,n.appendChild(r),r},getNearestBreakIndex:function getNearestBreakIndex(e,t,n){if(!e||!e.length)return 0;var r,o=n._getWidthFn(),u=0,c=0,s=o(e),l=s/e.length;if(r=t,u=i(t/l),se.length&&(r=t-s,u=e.length);r>0;){if(r=t-o(e.substr(0,u)),!(c=a(r/l)))return u;u+=c}for(;r<0;){if(r=t-o(e.substr(0,u)),!(c=a(r/l)))return u;u+=c}return u},setLineHeight:function setLineHeight(e){var t=e.fontSize=e.fontSize||"12px";return e.lineHeight=e.lineHeight||e["line-height"]||1.2*parseInt(t,10)+"px",e}}}};t.default=r,e.exports=t.default},function(e){e.exports={name:"muze",private:!0,version:"1.0.2",description:"Composable visualisation library for web with a data-first approach",homepage:"https://www.charts.com/muze",license:"MIT",author:"Charts.com ",contributors:[{name:"Akash Ghoswami",email:"akash@charts.com"},{name:"Ranajit Banerjee",email:"ranajit.banerjee@charts.com",url:"https://github.com/ranajitbanerjee"},{name:"Mridul Meharia",email:"mridul@charts.com",url:"https://github.com/mridulmeh"},{name:"Subhash Haldar",email:"subhash@charts.com"},{name:"Sandeep Acharya",email:"sandeep@charts.com"},{name:"Rousan Ali",email:"rousan@charts.com",url:"https://rousan.io"},{name:"Ujjal Kumar Dutta",email:"ujjal@charts.com"}],main:"src/index.js",keywords:["muze","svg","vector","graphics","data-visualization","visualization","renderer","fusioncharts","relational","algebra","relation"],repository:{type:"git",url:"https://github.com/chartshq/muze"},dependencies:{"@chartshq/layout":"^1.0.0","@chartshq/muze-firebolt":"^1.0.0","@chartshq/muze-legend":"^1.0.0","muze-utils":"^1.0.0","@chartshq/visual-cell":"^1.0.0","@chartshq/visual-group":"^1.0.0","@chartshq/visual-layer":"^1.0.0","@chartshq/visual-unit":"^1.0.0"}}},function(e,t,n){var r=n(44);e.exports=r.default?r.default:r},function(e,t,n){"use strict";var r=function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}(n(5)).default.init("undefined"!=typeof window?window:void 0),i=r.win.document,a=r.getDocumentSupport(),o=a.isWebKit?0:4.5;function ContainerManager(e,t,n){var r;n=(n=n>5?n:5)<20?n:20,this.maxContainers=n,this.first=null,this.last=null,this.containers={},this.length=0,this.rootNode=e,t&&((r=i.createElementNS("http://www.w3.org/2000/svg","svg")).setAttributeNS("http://www.w3.org/2000/svg","xlink","http://www.w3.org/1999/xlink"),r.setAttributeNS("http://www.w3.org/2000/svg","height","0"),r.setAttributeNS("http://www.w3.org/2000/svg","width","0"),this.svgRoot=r,this.rootNode.appendChild(r))}ContainerManager.prototype.get=function(e){var t,n,i,a=this.containers,o=this.length,u=this.maxContainers,c="";for(n in r.supportedStyle)void 0!==e[n]&&(c+=r.supportedStyle[n]+":"+e[n]+";");if(!c)return!1;if(i=a[c])this.first!==i&&(i.prev&&(i.prev.next=i.next),i.next&&(i.next.prev=i.prev),i.next=this.first,i.next.prev=i,this.last===i&&(this.last=i.prev),i.prev=null,this.first=i);else{if(o>=u)for(t=o-u+1;t--;)this.removeContainer(this.last);i=this.addContainer(c)}return i},ContainerManager.prototype.addContainer=function(e){var t,n;return this.containers[e]=n={next:null,prev:null,node:null,ellipsesWidth:0,lineHeight:0,dotWidth:0,avgCharWidth:4,keyStr:e,charCache:{}},n.next=this.first,n.next&&(n.next.prev=n),this.first=n,this.last||(this.last=n),this.length+=1,t=n.node=i.createElement("div"),this.rootNode.appendChild(t),a.isIE&&!a.hasSVG?t.style.setAttribute("cssText",e):t.setAttribute("style",e),t.setAttribute("aria-hidden","true"),t.setAttribute("role","presentation"),t.style.display="inline-block",t.innerHTML=r.testStrAvg,n.lineHeight=t.offsetHeight,n.avgCharWidth=t.offsetWidth/3,a.isBrowserLess?((t=n.svgText=i.createElementNS("http://www.w3.org/2000/svg","text")).setAttribute("style",e),this.svgRoot.appendChild(t),t.textContent=r.testStrAvg,n.lineHeight=t.getBBox().height,n.avgCharWidth=(t.getBBox().width-o)/3,t.textContent="...",n.ellipsesWidth=t.getBBox().width-o,t.textContent=".",n.dotWidth=t.getBBox().width-o):(t.innerHTML="...",n.ellipsesWidth=t.offsetWidth,t.innerHTML=".",n.dotWidth=t.offsetWidth,t.innerHTML=""),n},ContainerManager.prototype.removeContainer=function(e){var t=e.keyStr;t&&this.length&&e&&(this.length-=1,e.prev&&(e.prev.next=e.next),e.next&&(e.next.prev=e.prev),this.first===e&&(this.first=e.next),this.last===e&&(this.last=e.prev),e.node.parentNode.removeChild(e.node),delete this.containers[t])},ContainerManager.prototype.dispose=function(){var e,t=this.containers;for(e in this.maxContainers=null,t)this.removeContainer(t[e]);this.rootNode.parentNode.removeChild(this.rootNode),this.rootNode=null,this.first=null,this.last=null},e.exports=ContainerManager},function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,,function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,function(e,t,n){"use strict";n.r(t);var r={};n.r(r),n.d(r,"scaleLinear",function(){return linear_linear}),n.d(r,"scaleThreshold",function(){return threshold_threshold}),n.d(r,"scaleLog",function(){return log}),n.d(r,"scalePow",function(){return pow}),n.d(r,"scaleIdentity",function(){return identity_identity}),n.d(r,"scaleOrdinal",function(){return ordinal}),n.d(r,"scaleSequential",function(){return sequential}),n.d(r,"scaleQuantize",function(){return quantize_quantize}),n.d(r,"scaleQuantile",function(){return quantile_quantile}),n.d(r,"schemeCategory10",function(){return tn}),n.d(r,"schemeCategory20",function(){return rn}),n.d(r,"schemeCategory20b",function(){return nn}),n.d(r,"scaleBand",function(){return band}),n.d(r,"scaleTime",function(){return Jt});var i={};n.r(i),n.d(i,"schemeDark2",function(){return cn}),n.d(i,"schemePaired",function(){return sn}),n.d(i,"schemeAccent",function(){return un}),n.d(i,"schemePastel1",function(){return ln}),n.d(i,"schemePastel2",function(){return fn}),n.d(i,"schemeSet1",function(){return hn}),n.d(i,"schemeSet2",function(){return dn}),n.d(i,"schemeSet3",function(){return pn}),n.d(i,"schemeBlues",function(){return zn}),n.d(i,"schemeBrBG",function(){return gn}),n.d(i,"schemePRGn",function(){return mn}),n.d(i,"schemePiYG",function(){return _n}),n.d(i,"interpolateBrBG",function(){return vn}),n.d(i,"interpolatePRGn",function(){return bn}),n.d(i,"interpolatePiYG",function(){return xn}),n.d(i,"interpolatePuOr",function(){return wn}),n.d(i,"interpolateRdBu",function(){return kn}),n.d(i,"interpolateRdGy",function(){return Cn}),n.d(i,"interpolateRdYlBu",function(){return Sn}),n.d(i,"interpolateRdYlGn",function(){return Pn}),n.d(i,"interpolateSpectral",function(){return An}),n.d(i,"interpolateBlues",function(){return Hn}),n.d(i,"interpolateGreens",function(){return Vn}),n.d(i,"interpolateGreys",function(){return Un}),n.d(i,"interpolateOranges",function(){return Gn}),n.d(i,"interpolatePurples",function(){return Wn}),n.d(i,"interpolateReds",function(){return qn}),n.d(i,"interpolateViridis",function(){return Zn}),n.d(i,"interpolateInferno",function(){return er}),n.d(i,"interpolateMagma",function(){return Jn}),n.d(i,"interpolatePlasma",function(){return tr}),n.d(i,"interpolateWarm",function(){return Xn}),n.d(i,"interpolateCool",function(){return Kn}),n.d(i,"interpolateCubehelixDefault",function(){return Yn}),n.d(i,"interpolateBuGn",function(){return En}),n.d(i,"interpolateBuPu",function(){return Mn}),n.d(i,"interpolateGnBu",function(){return On}),n.d(i,"interpolateOrRd",function(){return Tn}),n.d(i,"interpolatePuBuGn",function(){return Fn}),n.d(i,"interpolatePuBu",function(){return Nn}),n.d(i,"interpolatePuRd",function(){return jn}),n.d(i,"interpolateRdPu",function(){return In}),n.d(i,"interpolateYlGnBu",function(){return Dn}),n.d(i,"interpolateYlGn",function(){return Ln}),n.d(i,"interpolateYlOrBr",function(){return Rn}),n.d(i,"interpolateYlOrRd",function(){return Bn}),n.d(i,"interpolateRainbow",function(){return Qn});var a={};n.r(a),n.d(a,"DRAG",function(){return Qo}),n.d(a,"HOVER",function(){return Zo}),n.d(a,"SELECTIONDRAG",function(){return Jo}),n.d(a,"CLICK",function(){return eu}),n.d(a,"LONGTOUCH",function(){return tu}),n.d(a,"TOUCHDRAG",function(){return nu}),n.d(a,"ALL_ACTIONS",function(){return ru});var o={};n.r(o),n.d(o,"SELECTION_NEW_ENTRY",function(){return iu}),n.d(o,"SELECTION_NEW_EXIT",function(){return au}),n.d(o,"SELECTION_NULL",function(){return ou}),n.d(o,"SELECTION_OLD_ENTRY",function(){return uu}),n.d(o,"SELECTION_OLD_EXIT",function(){return cu});var u={};n.r(u),n.d(u,"BRUSH",function(){return wu}),n.d(u,"HIGHLIGHT",function(){return ku}),n.d(u,"TOOLTIP",function(){return Cu}),n.d(u,"FILTER",function(){return Su}),n.d(u,"SELECT",function(){return Pu});var c={};n.r(c),n.d(c,"HighlightBeahviour",function(){return Eu}),n.d(c,"BrushBehaviour",function(){return Ou}),n.d(c,"FilterBehaviour",function(){return Fu}),n.d(c,"SelectBehaviour",function(){return Lu});var s={};n.r(s),n.d(s,"SelectionBox",function(){return Ju}),n.d(s,"Tooltip",function(){return gc}),n.d(s,"Crossline",function(){return mc}),n.d(s,"PlotHighlighter",function(){return xc}),n.d(s,"FilterEffect",function(){return kc}),n.d(s,"PersistentAnchors",function(){return Ec}),n.d(s,"BrushAnchors",function(){return Tc}),n.d(s,"AnchorEffect",function(){return Pc});var l={};n.r(l),n.d(l,"BOTTOM",function(){return Gc}),n.d(l,"TOP",function(){return Yc}),n.d(l,"LEFT",function(){return Xc}),n.d(l,"RIGHT",function(){return Kc}),n.d(l,"axisOrientationMap",function(){return $c});var f={};n.r(f),n.d(f,"LINEAR",function(){return Qc}),n.d(f,"BAND",function(){return Zc}),n.d(f,"TIME",function(){return Jc}),n.d(f,"COLOR",function(){return es}),n.d(f,"ORDINAL",function(){return ts}),n.d(f,"QUANTIZE",function(){return ns}),n.d(f,"QUANTILE",function(){return rs}),n.d(f,"LOG",function(){return is}),n.d(f,"POW",function(){return as}),n.d(f,"IDENTITY",function(){return os}),n.d(f,"SEQUENTIAL",function(){return us}),n.d(f,"THRESHOLD",function(){return cs});var h={};n.r(h),n.d(h,"CONFIG",function(){return ad}),n.d(h,"DATA",function(){return od}),n.d(h,"AXES",function(){return ud}),n.d(h,"LAYERDEFS",function(){return cd}),n.d(h,"WIDTH",function(){return sd}),n.d(h,"HEIGHT",function(){return ld}),n.d(h,"MOUNT",function(){return fd}),n.d(h,"primaryXAxisUpdated",function(){return hd}),n.d(h,"primaryYAxisUpdated",function(){return dd}),n.d(h,"secondaryXAxisUpdated",function(){return pd}),n.d(h,"secondaryYAxisUpdated",function(){return yd}),n.d(h,"TRANSFORM",function(){return gd}),n.d(h,"DATADOMAIN",function(){return vd}),n.d(h,"LAYERSCREATED",function(){return md}),n.d(h,"FIELDS",function(){return bd}),n.d(h,"TIMEDIFFS",function(){return _d}),n.d(h,"LAYERAXISINDEX",function(){return xd});var d={};n.r(d),n.d(d,"SelectBehaviour",function(){return wp});var y={};n.r(y),n.d(y,"SelectionBox",function(){return zp}),n.d(y,"LegendHighlighter",function(){return Up});var g={};n.r(g),n.d(g,"share",function(){return Oy}),n.d(g,"html",function(){return operators_html});var v=function(e,t){return et?1:e>=t?0:NaN},m=function(e){return 1===e.length&&(e=function ascendingComparator(e){return function(t,n){return v(e(t),n)}}(e)),{left:function left(t,n,r,i){for(null==r&&(r=0),null==i&&(i=t.length);r>>1;e(t[a],n)<0?r=a+1:i=a}return r},right:function right(t,n,r,i){for(null==r&&(r=0),null==i&&(i=t.length);r>>1;e(t[a],n)>0?i=a:r=a+1}return r}}};var b=m(v),_=b.right,x=(b.left,_);var w=function(e){return null===e?NaN:+e},k=Array.prototype,C=(k.slice,k.map,function(e,t,n){e=+e,t=+t,n=(i=arguments.length)<2?(t=e,e=0,1):i<3?1:+n;for(var r=-1,i=0|Math.max(0,Math.ceil((t-e)/n)),a=new Array(i);++r0)return[e];if((r=t0)for(e=Math.ceil(e/o),t=Math.floor(t/o),a=new Array(i=Math.ceil(t-e+1));++u=0?(a>=S?10:a>=P?5:a>=A?2:1)*Math.pow(10,i):-Math.pow(10,-i)/(a>=S?10:a>=P?5:a>=A?2:1)}function tickStep(e,t,n){var r=Math.abs(t-e)/Math.max(0,n),i=Math.pow(10,Math.floor(Math.log(r)/Math.LN10)),a=r/i;return a>=S?i*=10:a>=P?i*=5:a>=A&&(i*=2),t=1)return+n(e[r-1],r-1,e);var r,i=(r-1)*t,a=Math.floor(i),o=+n(e[a],a,e);return o+(+n(e[a+1],a+1,e)-o)*(i-a)}};function map_Map(){}function map_map(e,t){var n=new map_Map;if(e instanceof map_Map)e.each(function(e,t){n.set(t,e)});else if(Array.isArray(e)){var r,i=-1,a=e.length;if(null==t)for(;++i=r.length)return null!=e&&n.sort(e),null!=t?t(n):n;for(var u,c,s,l=-1,f=n.length,h=r[i++],d=O(),p=a();++lr.length)return e;var a,o=i[n-1];return null!=t&&n>=r.length?a=e.entries():(a=[],e.each(function(e,t){a.push({key:t,values:_entries(e,n)})})),null!=o?a.sort(function(e,t){return o(e.key,t.key)}):a}(apply(e,0,createMap,setMap),0)},key:function key(e){return r.push(e),n},sortKeys:function sortKeys(e){return i[r.length-1]=e,n},sortValues:function sortValues(t){return e=t,n},rollup:function rollup(e){return t=e,n}}};function createObject(){return{}}function setObject(e,t,n){e[t]=n}function createMap(){return O()}function setMap(e,t,n){e.set(t,n)}function set_Set(){}var F=O.prototype;function set_set(e,t){var n=new set_Set;if(e instanceof set_Set)e.each(function(e){n.add(e)});else if(e){var r=-1,i=e.length;if(null==t)for(;++r1?+t:s,f=a[1]a[1-f]))return n=Math.max(0,getClosestIndexOf(h,s)),c=getClosestIndexOf(h,l),o=s===l?n:Math.max(n,c-1),f&&(u=n,n=d-o,o=d-u),n>o?void 0:r().slice(n,o+1)},n.invert=function(e,t){var n,o,u=+e,c=arguments.length>1?+t:u,s=a[1]a[1-s]))return n=Math.max(0,getClosestIndexOf(l,u,"left")),r()[s?f-n:n]},rescale()}function getClosestIndexOf(e,t,n){for(var r,i,a,o=0,u=e.length-1;ot?0===u?u:"left"===n?u-1:u:u===e.length-1?u:"left"===n?u:u+1:u}var L=function(e,t,n){e.prototype=t.prototype=n,n.constructor=e};function extend(e,t){var n=Object.create(e.prototype);for(var r in t)n[r]=t[r];return n}function Color(){}var R="\\s*([+-]?\\d+)\\s*",B="\\s*([+-]?\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)\\s*",z="\\s*([+-]?\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)%\\s*",H=/^#([0-9a-f]{3})$/,V=/^#([0-9a-f]{6})$/,U=new RegExp("^rgb\\("+[R,R,R]+"\\)$"),W=new RegExp("^rgb\\("+[z,z,z]+"\\)$"),q=new RegExp("^rgba\\("+[R,R,R,B]+"\\)$"),G=new RegExp("^rgba\\("+[z,z,z,B]+"\\)$"),Y=new RegExp("^hsl\\("+[B,z,z]+"\\)$"),X=new RegExp("^hsla\\("+[B,z,z,B]+"\\)$"),K={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};function color_color(e){var t;return e=(e+"").trim().toLowerCase(),(t=H.exec(e))?new Rgb((t=parseInt(t[1],16))>>8&15|t>>4&240,t>>4&15|240&t,(15&t)<<4|15&t,1):(t=V.exec(e))?rgbn(parseInt(t[1],16)):(t=U.exec(e))?new Rgb(t[1],t[2],t[3],1):(t=W.exec(e))?new Rgb(255*t[1]/100,255*t[2]/100,255*t[3]/100,1):(t=q.exec(e))?rgba(t[1],t[2],t[3],t[4]):(t=G.exec(e))?rgba(255*t[1]/100,255*t[2]/100,255*t[3]/100,t[4]):(t=Y.exec(e))?hsla(t[1],t[2]/100,t[3]/100,1):(t=X.exec(e))?hsla(t[1],t[2]/100,t[3]/100,t[4]):K.hasOwnProperty(e)?rgbn(K[e]):"transparent"===e?new Rgb(NaN,NaN,NaN,0):null}function rgbn(e){return new Rgb(e>>16&255,e>>8&255,255&e,1)}function rgba(e,t,n,r){return r<=0&&(e=t=n=NaN),new Rgb(e,t,n,r)}function rgbConvert(e){return e instanceof Color||(e=color_color(e)),e?new Rgb((e=e.rgb()).r,e.g,e.b,e.opacity):new Rgb}function color_rgb(e,t,n,r){return 1===arguments.length?rgbConvert(e):new Rgb(e,t,n,null==r?1:r)}function Rgb(e,t,n,r){this.r=+e,this.g=+t,this.b=+n,this.opacity=+r}function _hex(e){return((e=Math.max(0,Math.min(255,Math.round(e)||0)))<16?"0":"")+e.toString(16)}function hsla(e,t,n,r){return r<=0?e=t=n=NaN:n<=0||n>=1?e=t=NaN:t<=0&&(e=NaN),new Hsl(e,t,n,r)}function hsl(e,t,n,r){return 1===arguments.length?function hslConvert(e){if(e instanceof Hsl)return new Hsl(e.h,e.s,e.l,e.opacity);if(e instanceof Color||(e=color_color(e)),!e)return new Hsl;if(e instanceof Hsl)return e;var t=(e=e.rgb()).r/255,n=e.g/255,r=e.b/255,i=Math.min(t,n,r),a=Math.max(t,n,r),o=NaN,u=a-i,c=(a+i)/2;return u?(o=t===a?(n-r)/u+6*(n0&&c<1?0:o,new Hsl(o,u,c,e.opacity)}(e):new Hsl(e,t,n,null==r?1:r)}function Hsl(e,t,n,r){this.h=+e,this.s=+t,this.l=+n,this.opacity=+r}function hsl2rgb(e,t,n){return 255*(e<60?t+(n-t)*e/60:e<180?n:e<240?t+(n-t)*(240-e)/60:t)}L(Color,color_color,{displayable:function displayable(){return this.rgb().displayable()},hex:function hex(){return this.rgb().hex()},toString:function toString(){return this.rgb()+""}}),L(Rgb,color_rgb,extend(Color,{brighter:function brighter(e){return e=null==e?1/.7:Math.pow(1/.7,e),new Rgb(this.r*e,this.g*e,this.b*e,this.opacity)},darker:function darker(e){return e=null==e?.7:Math.pow(.7,e),new Rgb(this.r*e,this.g*e,this.b*e,this.opacity)},rgb:function rgb(){return this},displayable:function displayable(){return 0<=this.r&&this.r<=255&&0<=this.g&&this.g<=255&&0<=this.b&&this.b<=255&&0<=this.opacity&&this.opacity<=1},hex:function hex(){return"#"+_hex(this.r)+_hex(this.g)+_hex(this.b)},toString:function toString(){var e=this.opacity;return(1===(e=isNaN(e)?1:Math.max(0,Math.min(1,e)))?"rgb(":"rgba(")+Math.max(0,Math.min(255,Math.round(this.r)||0))+", "+Math.max(0,Math.min(255,Math.round(this.g)||0))+", "+Math.max(0,Math.min(255,Math.round(this.b)||0))+(1===e?")":", "+e+")")}})),L(Hsl,hsl,extend(Color,{brighter:function brighter(e){return e=null==e?1/.7:Math.pow(1/.7,e),new Hsl(this.h,this.s,this.l*e,this.opacity)},darker:function darker(e){return e=null==e?.7:Math.pow(.7,e),new Hsl(this.h,this.s,this.l*e,this.opacity)},rgb:function rgb(){var e=this.h%360+360*(this.h<0),t=isNaN(e)||isNaN(this.s)?0:this.s,n=this.l,r=n+(n<.5?n:1-n)*t,i=2*n-r;return new Rgb(hsl2rgb(e>=240?e-240:e+120,i,r),hsl2rgb(e,i,r),hsl2rgb(e<120?e+240:e-120,i,r),this.opacity)},displayable:function displayable(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1}}));var $=Math.PI/180,Q=180/Math.PI,Z=.96422,J=1,ee=.82521,te=4/29,ne=6/29,re=3*ne*ne,ie=ne*ne*ne;function labConvert(e){if(e instanceof Lab)return new Lab(e.l,e.a,e.b,e.opacity);if(e instanceof Hcl){if(isNaN(e.h))return new Lab(e.l,0,0,e.opacity);var t=e.h*$;return new Lab(e.l,Math.cos(t)*e.c,Math.sin(t)*e.c,e.opacity)}e instanceof Rgb||(e=rgbConvert(e));var n,r,i=rgb2lrgb(e.r),a=rgb2lrgb(e.g),o=rgb2lrgb(e.b),u=xyz2lab((.2225045*i+.7168786*a+.0606169*o)/J);return i===a&&a===o?n=r=u:(n=xyz2lab((.4360747*i+.3850649*a+.1430804*o)/Z),r=xyz2lab((.0139322*i+.0971045*a+.7141733*o)/ee)),new Lab(116*u-16,500*(n-u),200*(u-r),e.opacity)}function lab(e,t,n,r){return 1===arguments.length?labConvert(e):new Lab(e,t,n,null==r?1:r)}function Lab(e,t,n,r){this.l=+e,this.a=+t,this.b=+n,this.opacity=+r}function xyz2lab(e){return e>ie?Math.pow(e,1/3):e/re+te}function lab2xyz(e){return e>ne?e*e*e:re*(e-te)}function lrgb2rgb(e){return 255*(e<=.0031308?12.92*e:1.055*Math.pow(e,1/2.4)-.055)}function rgb2lrgb(e){return(e/=255)<=.04045?e/12.92:Math.pow((e+.055)/1.055,2.4)}function hclConvert(e){if(e instanceof Hcl)return new Hcl(e.h,e.c,e.l,e.opacity);if(e instanceof Lab||(e=labConvert(e)),0===e.a&&0===e.b)return new Hcl(NaN,0,e.l,e.opacity);var t=Math.atan2(e.b,e.a)*Q;return new Hcl(t<0?t+360:t,Math.sqrt(e.a*e.a+e.b*e.b),e.l,e.opacity)}function hcl(e,t,n,r){return 1===arguments.length?hclConvert(e):new Hcl(e,t,n,null==r?1:r)}function Hcl(e,t,n,r){this.h=+e,this.c=+t,this.l=+n,this.opacity=+r}L(Lab,lab,extend(Color,{brighter:function brighter(e){return new Lab(this.l+18*(null==e?1:e),this.a,this.b,this.opacity)},darker:function darker(e){return new Lab(this.l-18*(null==e?1:e),this.a,this.b,this.opacity)},rgb:function rgb(){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 new Rgb(lrgb2rgb(3.1338561*(t=Z*lab2xyz(t))-1.6168667*(e=J*lab2xyz(e))-.4906146*(n=ee*lab2xyz(n))),lrgb2rgb(-.9787684*t+1.9161415*e+.033454*n),lrgb2rgb(.0719453*t-.2289914*e+1.4052427*n),this.opacity)}})),L(Hcl,hcl,extend(Color,{brighter:function brighter(e){return new Hcl(this.h,this.c,this.l+18*(null==e?1:e),this.opacity)},darker:function darker(e){return new Hcl(this.h,this.c,this.l-18*(null==e?1:e),this.opacity)},rgb:function rgb(){return labConvert(this).rgb()}}));var ae=-.14861,oe=1.78277,ue=-.29227,ce=-.90649,se=1.97294,le=se*ce,fe=se*oe,he=oe*ue-ce*ae;function cubehelix_cubehelix(e,t,n,r){return 1===arguments.length?function cubehelixConvert(e){if(e instanceof Cubehelix)return new Cubehelix(e.h,e.s,e.l,e.opacity);e instanceof Rgb||(e=rgbConvert(e));var t=e.r/255,n=e.g/255,r=e.b/255,i=(he*r+le*t-fe*n)/(he+le-fe),a=r-i,o=(se*(n-i)-ue*a)/ce,u=Math.sqrt(o*o+a*a)/(se*i*(1-i)),c=u?Math.atan2(o,a)*Q-120:NaN;return new Cubehelix(c<0?c+360:c,u,i,e.opacity)}(e):new Cubehelix(e,t,n,null==r?1:r)}function Cubehelix(e,t,n,r){this.h=+e,this.s=+t,this.l=+n,this.opacity=+r}function basis(e,t,n,r,i){var a=e*e,o=a*e;return((1-3*e+3*a-o)*t+(4-6*a+3*o)*n+(1+3*e+3*a-3*o)*r+o*i)/6}L(Cubehelix,cubehelix_cubehelix,extend(Color,{brighter:function brighter(e){return e=null==e?1/.7:Math.pow(1/.7,e),new Cubehelix(this.h,this.s,this.l*e,this.opacity)},darker:function darker(e){return e=null==e?.7:Math.pow(.7,e),new Cubehelix(this.h,this.s,this.l*e,this.opacity)},rgb:function rgb(){var e=isNaN(this.h)?0:(this.h+120)*$,t=+this.l,n=isNaN(this.s)?0:this.s*t*(1-t),r=Math.cos(e),i=Math.sin(e);return new Rgb(255*(t+n*(ae*r+oe*i)),255*(t+n*(ue*r+ce*i)),255*(t+n*(se*r)),this.opacity)}}));var de=function(e){return function(){return e}};function linear(e,t){return function(n){return e+n*t}}function color_hue(e,t){var n=t-e;return n?linear(e,n>180||n<-180?n-360*Math.round(n/360):n):de(isNaN(e)?t:e)}function gamma(e){return 1==(e=+e)?nogamma:function(t,n){return n-t?function exponential(e,t,n){return e=Math.pow(e,n),t=Math.pow(t,n)-e,n=1/n,function(r){return Math.pow(e+r*t,n)}}(t,n,e):de(isNaN(t)?n:t)}}function nogamma(e,t){var n=t-e;return n?linear(e,n):de(isNaN(e)?t:e)}var pe=function rgbGamma(e){var t=gamma(e);function rgb(e,n){var r=t((e=color_rgb(e)).r,(n=color_rgb(n)).r),i=t(e.g,n.g),a=t(e.b,n.b),o=nogamma(e.opacity,n.opacity);return function(t){return e.r=r(t),e.g=i(t),e.b=a(t),e.opacity=o(t),e+""}}return rgb.gamma=rgbGamma,rgb}(1);function rgbSpline(e){return function(t){var n,r,i=t.length,a=new Array(i),o=new Array(i),u=new Array(i);for(n=0;n=1?(n=1,t-1):Math.floor(n*t),i=e[r],a=e[r+1],o=r>0?e[r-1]:2*i-a,u=ra&&(i=t.slice(a,i),u[o]?u[o]+=i:u[++o]=i),(n=n[0])===(r=r[0])?u[o]?u[o]+=r:u[++o]=r:(u[++o]=null,c.push({i:o,x:ge(n,r)})),a=be.lastIndex;return a180?t+=360:t-e>180&&(e+=360),i.push({i:n.push(pop(n)+"rotate(",null,r)-2,x:ge(e,t)})):t&&n.push(pop(n)+"rotate("+t+r)}(i.rotate,a.rotate,o,u),function skewX(e,t,n,i){e!==t?i.push({i:n.push(pop(n)+"skewX(",null,r)-2,x:ge(e,t)}):t&&n.push(pop(n)+"skewX("+t+r)}(i.skewX,a.skewX,o,u),function scale(e,t,n,r,i,a){if(e!==n||t!==r){var o=i.push(pop(i)+"scale(",null,",",null,")");a.push({i:o-4,x:ge(e,n)},{i:o-2,x:ge(t,r)})}else 1===n&&1===r||i.push(pop(i)+"scale("+n+","+r+")")}(i.scaleX,i.scaleY,a.scaleX,a.scaleY,o,u),i=a=null,function(e){for(var t,n=-1,r=u.length;++n2?polymap:bimap,r=i=null,scale}function scale(t){return(r||(r=n(a,o,c?function deinterpolateClamp(e){return function(t,n){var r=e(t=+t,n=+n);return function(e){return e<=t?0:e>=n?1:r(e)}}}(e):e,u)))(+t)}return scale.invert=function(e){return(i||(i=n(o,a,deinterpolateLinear,c?function reinterpolateClamp(e){return function(t,n){var r=e(t=+t,n=+n);return function(e){return e<=0?t:e>=1?n:r(e)}}}(t):t)))(+e)},scale.domain=function(e){return arguments.length?(a=j.call(e,De),rescale()):a.slice()},scale.range=function(e){return arguments.length?(o=I.call(e),rescale()):o.slice()},scale.rangeRound=function(e){return o=I.call(e),u=Ae,rescale()},scale.clamp=function(e){return arguments.length?(c=!!e,rescale()):c},scale.interpolate=function(e){return arguments.length?(u=e,rescale()):u},rescale()}var Re=function(e,t){if((n=(e=t?e.toExponential(t-1):e.toExponential()).indexOf("e"))<0)return null;var n,r=e.slice(0,n);return[r.length>1?r[0]+r.slice(2):r,+e.slice(n+1)]},Be=function(e){return(e=Re(Math.abs(e)))?e[1]:NaN},ze=/^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;function formatSpecifier(e){return new FormatSpecifier(e)}function FormatSpecifier(e){if(!(t=ze.exec(e)))throw new Error("invalid format: "+e);var t;this.fill=t[1]||" ",this.align=t[2]||">",this.sign=t[3]||"-",this.symbol=t[4]||"",this.zero=!!t[5],this.width=t[6]&&+t[6],this.comma=!!t[7],this.precision=t[8]&&+t[8].slice(1),this.trim=!!t[9],this.type=t[10]||""}formatSpecifier.prototype=FormatSpecifier.prototype,FormatSpecifier.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.trim?"~":"")+this.type};var He,Ve,Ue,We,qe=function(e){e:for(var t,n=e.length,r=1,i=-1;r0){if(!+e[r])break e;i=0}}return i>0?e.slice(0,i)+e.slice(t+1):e},Ge=function(e,t){var n=Re(e,t);if(!n)return e+"";var r=n[0],i=n[1];return i<0?"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")},Ye={"%":function _(e,t){return(100*e).toFixed(t)},b:function b(e){return Math.round(e).toString(2)},c:function c(e){return e+""},d:function d(e){return Math.round(e).toString(10)},e:function e(t,n){return t.toExponential(n)},f:function f(e,t){return e.toFixed(t)},g:function g(e,t){return e.toPrecision(t)},o:function o(e){return Math.round(e).toString(8)},p:function p(e,t){return Ge(100*e,t)},r:Ge,s:function(e,t){var n=Re(e,t);if(!n)return e+"";var r=n[0],i=n[1],a=i-(He=3*Math.max(-8,Math.min(8,Math.floor(i/3))))+1,o=r.length;return a===o?r:a>o?r+new Array(a-o+1).join("0"):a>0?r.slice(0,a)+"."+r.slice(a):"0."+new Array(1-a).join("0")+Re(e,Math.max(0,t+a-1))[0]},X:function X(e){return Math.round(e).toString(16).toUpperCase()},x:function x(e){return Math.round(e).toString(16)}},Xe=function(e){return e},Ke=["y","z","a","f","p","n","µ","m","","k","M","G","T","P","E","Z","Y"],$e=function(e){var t=e.grouping&&e.thousands?function(e,t){return function(n,r){for(var i=n.length,a=[],o=0,u=e[0],c=0;i>0&&u>0&&(c+u+1>r&&(u=Math.max(1,r-c)),a.push(n.substring(i-=u,i+u)),!((c+=u+1)>r));)u=e[o=(o+1)%e.length];return a.reverse().join(t)}}(e.grouping,e.thousands):Xe,n=e.currency,r=e.decimal,i=e.numerals?function(e){return function(t){return t.replace(/[0-9]/g,function(t){return e[+t]})}}(e.numerals):Xe,a=e.percent||"%";function newFormat(e){var o=(e=formatSpecifier(e)).fill,u=e.align,c=e.sign,s=e.symbol,l=e.zero,f=e.width,h=e.comma,d=e.precision,p=e.trim,y=e.type;"n"===y?(h=!0,y="g"):Ye[y]||(null==d&&(d=12),p=!0,y="g"),(l||"0"===o&&"="===u)&&(l=!0,o="0",u="=");var g="$"===s?n[0]:"#"===s&&/[boxX]/.test(y)?"0"+y.toLowerCase():"",v="$"===s?n[1]:/[%p]/.test(y)?a:"",m=Ye[y],b=/[defgprs%]/.test(y);function format(e){var n,a,s,_=g,x=v;if("c"===y)x=m(e)+x,e="";else{var w=(e=+e)<0;if(e=m(Math.abs(e),d),p&&(e=qe(e)),w&&0==+e&&(w=!1),_=(w?"("===c?c:"-":"-"===c||"("===c?"":c)+_,x=("s"===y?Ke[8+He/3]:"")+x+(w&&"("===c?")":""),b)for(n=-1,a=e.length;++n(s=e.charCodeAt(n))||s>57){x=(46===s?r+e.slice(n+1):e.slice(n))+x,e=e.slice(0,n);break}}h&&!l&&(e=t(e,1/0));var k=_.length+e.length+x.length,C=k>1)+_+e+x+C.slice(k);break;default:e=C+_+e+x}return i(e)}return d=null==d?6:/[gprs]/.test(y)?Math.max(1,Math.min(21,d)):Math.max(0,Math.min(20,d)),format.toString=function(){return e+""},format}return{format:newFormat,formatPrefix:function formatPrefix(e,t){var n=newFormat(((e=formatSpecifier(e)).type="f",e)),r=3*Math.max(-8,Math.min(8,Math.floor(Be(t)/3))),i=Math.pow(10,-r),a=Ke[8+r/3];return function(e){return n(i*e)+a}}}};!function defaultLocale(e){return Ve=$e(e),Ue=Ve.format,We=Ve.formatPrefix,Ve}({decimal:".",thousands:",",grouping:[3],currency:["$",""]});var Qe=function(e,t,n){var r,i=e[0],a=e[e.length-1],o=tickStep(i,a,null==t?10:t);switch((n=formatSpecifier(null==n?",f":n)).type){case"s":var u=Math.max(Math.abs(i),Math.abs(a));return null!=n.precision||isNaN(r=function(e,t){return Math.max(0,3*Math.max(-8,Math.min(8,Math.floor(Be(t)/3)))-Be(Math.abs(e)))}(o,u))||(n.precision=r),We(n,u);case"":case"e":case"g":case"p":case"r":null!=n.precision||isNaN(r=function(e,t){return e=Math.abs(e),t=Math.abs(t)-e,Math.max(0,Be(t)-Be(e))+1}(o,Math.max(Math.abs(i),Math.abs(a))))||(n.precision=r-("e"===n.type));break;case"f":case"%":null!=n.precision||isNaN(r=function(e){return Math.max(0,-Be(Math.abs(e)))}(o))||(n.precision=r-2*("%"===n.type))}return Ue(n)};function linearish(e){var t=e.domain;return e.ticks=function(e){var n=t();return E(n[0],n[n.length-1],null==e?10:e)},e.tickFormat=function(e,n){return Qe(t(),e,n)},e.nice=function(n){null==n&&(n=10);var r,i=t(),a=0,o=i.length-1,u=i[a],c=i[o];return c0?r=tickIncrement(u=Math.floor(u/r)*r,c=Math.ceil(c/r)*r,n):r<0&&(r=tickIncrement(u=Math.ceil(u*r)/r,c=Math.floor(c*r)/r,n)),r>0?(i[a]=Math.floor(u/r)*r,i[o]=Math.ceil(c/r)*r,t(i)):r<0&&(i[a]=Math.ceil(u*r)/r,i[o]=Math.floor(c*r)/r,t(i)),e},e}function linear_linear(){var e=continuous(deinterpolateLinear,ge);return e.copy=function(){return copy(e,linear_linear())},linearish(e)}function identity_identity(){var e=[0,1];function scale(e){return+e}return scale.invert=scale,scale.domain=scale.range=function(t){return arguments.length?(e=j.call(t,De),scale):e.slice()},scale.copy=function(){return identity_identity().domain(e)},linearish(scale)}var Ze=function(e,t){var n,r=0,i=(e=e.slice()).length-1,a=e[r],o=e[i];return o0){for(;hc)break;y.push(f)}}else for(;h=1;--l)if(!((f=s*l)c)break;y.push(f)}}else y=E(h,d,Math.min(d-h,p)).map(i);return a?y.reverse():y},e.tickFormat=function(t,a){if(null==a&&(a=10===n?".0e":","),"function"!=typeof a&&(a=Ue(a)),t===1/0)return a;null==t&&(t=10);var o=Math.max(1,n*t/e.ticks().length);return function(e){var t=e/i(Math.round(r(e)));return t*n0?n[i-1]:e[0],i=n?[r[n-1],t]:[r[o-1],r[o]]},scale.copy=function(){return quantize_quantize().domain([e,t]).range(i)},linearish(scale)}function threshold_threshold(){var e=[.5],t=[0,1],n=1;function scale(r){if(r<=r)return t[x(e,r,0,n)]}return scale.domain=function(r){return arguments.length?(e=I.call(r),n=Math.min(e.length,t.length-1),scale):e.slice()},scale.range=function(r){return arguments.length?(t=I.call(r),n=Math.min(e.length,t.length-1),scale):t.slice()},scale.invertExtent=function(n){var r=t.indexOf(n);return[e[r-1],e[r]]},scale.copy=function(){return threshold_threshold().domain(e).range(t)},scale}var Je=new Date,et=new Date;function newInterval(e,t,n,r){function interval(t){return e(t=new Date(+t)),t}return interval.floor=interval,interval.ceil=function(n){return e(n=new Date(n-1)),t(n,1),e(n),n},interval.round=function(e){var t=interval(e),n=interval.ceil(e);return e-t0))return o;do{o.push(a=new Date(+n)),t(n,i),e(n)}while(a=t)for(;e(t),!n(t);)t.setTime(t-1)},function(e,r){if(e>=e)if(r<0)for(;++r<=0;)for(;t(e,-1),!n(e););else for(;--r>=0;)for(;t(e,1),!n(e););})},n&&(interval.count=function(t,r){return Je.setTime(+t),et.setTime(+r),e(Je),e(et),Math.floor(n(Je,et))},interval.every=function(e){return e=Math.floor(e),isFinite(e)&&e>0?e>1?interval.filter(r?function(t){return r(t)%e==0}:function(t){return interval.count(0,t)%e==0}):interval:null}),interval}var tt=newInterval(function(){},function(e,t){e.setTime(+e+t)},function(e,t){return t-e});tt.every=function(e){return e=Math.floor(e),isFinite(e)&&e>0?e>1?newInterval(function(t){t.setTime(Math.floor(t/e)*e)},function(t,n){t.setTime(+t+n*e)},function(t,n){return(n-t)/e}):tt:null};var nt=tt,rt=(tt.range,6e4),it=6048e5,at=newInterval(function(e){e.setTime(1e3*Math.floor(e/1e3))},function(e,t){e.setTime(+e+1e3*t)},function(e,t){return(t-e)/1e3},function(e){return e.getUTCSeconds()}),ot=at,ut=(at.range,newInterval(function(e){e.setTime(Math.floor(e/rt)*rt)},function(e,t){e.setTime(+e+t*rt)},function(e,t){return(t-e)/rt},function(e){return e.getMinutes()})),ct=ut,st=(ut.range,newInterval(function(e){var t=e.getTimezoneOffset()*rt%36e5;t<0&&(t+=36e5),e.setTime(36e5*Math.floor((+e-t)/36e5)+t)},function(e,t){e.setTime(+e+36e5*t)},function(e,t){return(t-e)/36e5},function(e){return e.getHours()})),lt=st,ft=(st.range,newInterval(function(e){e.setHours(0,0,0,0)},function(e,t){e.setDate(e.getDate()+t)},function(e,t){return(t-e-(t.getTimezoneOffset()-e.getTimezoneOffset())*rt)/864e5},function(e){return e.getDate()-1})),ht=ft;ft.range;function weekday(e){return newInterval(function(t){t.setDate(t.getDate()-(t.getDay()+7-e)%7),t.setHours(0,0,0,0)},function(e,t){e.setDate(e.getDate()+7*t)},function(e,t){return(t-e-(t.getTimezoneOffset()-e.getTimezoneOffset())*rt)/it})}var dt=weekday(0),pt=weekday(1),yt=weekday(2),gt=weekday(3),vt=weekday(4),mt=weekday(5),bt=weekday(6),_t=(dt.range,pt.range,yt.range,gt.range,vt.range,mt.range,bt.range,newInterval(function(e){e.setDate(1),e.setHours(0,0,0,0)},function(e,t){e.setMonth(e.getMonth()+t)},function(e,t){return t.getMonth()-e.getMonth()+12*(t.getFullYear()-e.getFullYear())},function(e){return e.getMonth()})),xt=_t,wt=(_t.range,newInterval(function(e){e.setMonth(0,1),e.setHours(0,0,0,0)},function(e,t){e.setFullYear(e.getFullYear()+t)},function(e,t){return t.getFullYear()-e.getFullYear()},function(e){return e.getFullYear()}));wt.every=function(e){return isFinite(e=Math.floor(e))&&e>0?newInterval(function(t){t.setFullYear(Math.floor(t.getFullYear()/e)*e),t.setMonth(0,1),t.setHours(0,0,0,0)},function(t,n){t.setFullYear(t.getFullYear()+n*e)}):null};var kt=wt,Ct=(wt.range,newInterval(function(e){e.setUTCSeconds(0,0)},function(e,t){e.setTime(+e+t*rt)},function(e,t){return(t-e)/rt},function(e){return e.getUTCMinutes()})),St=(Ct.range,newInterval(function(e){e.setUTCMinutes(0,0,0)},function(e,t){e.setTime(+e+36e5*t)},function(e,t){return(t-e)/36e5},function(e){return e.getUTCHours()})),Pt=(St.range,newInterval(function(e){e.setUTCHours(0,0,0,0)},function(e,t){e.setUTCDate(e.getUTCDate()+t)},function(e,t){return(t-e)/864e5},function(e){return e.getUTCDate()-1})),At=Pt;Pt.range;function utcWeekday(e){return newInterval(function(t){t.setUTCDate(t.getUTCDate()-(t.getUTCDay()+7-e)%7),t.setUTCHours(0,0,0,0)},function(e,t){e.setUTCDate(e.getUTCDate()+7*t)},function(e,t){return(t-e)/it})}var Et=utcWeekday(0),Mt=utcWeekday(1),Ot=utcWeekday(2),Tt=utcWeekday(3),Ft=utcWeekday(4),Nt=utcWeekday(5),jt=utcWeekday(6),It=(Et.range,Mt.range,Ot.range,Tt.range,Ft.range,Nt.range,jt.range,newInterval(function(e){e.setUTCDate(1),e.setUTCHours(0,0,0,0)},function(e,t){e.setUTCMonth(e.getUTCMonth()+t)},function(e,t){return t.getUTCMonth()-e.getUTCMonth()+12*(t.getUTCFullYear()-e.getUTCFullYear())},function(e){return e.getUTCMonth()})),Dt=(It.range,newInterval(function(e){e.setUTCMonth(0,1),e.setUTCHours(0,0,0,0)},function(e,t){e.setUTCFullYear(e.getUTCFullYear()+t)},function(e,t){return t.getUTCFullYear()-e.getUTCFullYear()},function(e){return e.getUTCFullYear()}));Dt.every=function(e){return isFinite(e=Math.floor(e))&&e>0?newInterval(function(t){t.setUTCFullYear(Math.floor(t.getUTCFullYear()/e)*e),t.setUTCMonth(0,1),t.setUTCHours(0,0,0,0)},function(t,n){t.setUTCFullYear(t.getUTCFullYear()+n*e)}):null};var Lt=Dt;Dt.range;function localDate(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 utcDate(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 newYear(e){return{y:e,m:0,d:1,H:0,M:0,S:0,L:0}}var Rt,Bt,zt,Ht,Vt={"-":"",_:" ",0:"0"},Ut=/^\s*\d+/,Wt=/^%/,qt=/[\\^$*+?|[\]().{}]/g;function locale_pad(e,t,n){var r=e<0?"-":"",i=(r?-e:e)+"",a=i.length;return r+(a68?1900:2e3),n+r[0].length):-1}function parseZone(e,t,n){var r=/^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(t.slice(n,n+6));return r?(e.Z=r[1]?0:-(r[2]+(r[3]||"00")),n+r[0].length):-1}function parseMonthNumber(e,t,n){var r=Ut.exec(t.slice(n,n+2));return r?(e.m=r[0]-1,n+r[0].length):-1}function parseDayOfMonth(e,t,n){var r=Ut.exec(t.slice(n,n+2));return r?(e.d=+r[0],n+r[0].length):-1}function parseDayOfYear(e,t,n){var r=Ut.exec(t.slice(n,n+3));return r?(e.m=0,e.d=+r[0],n+r[0].length):-1}function parseHour24(e,t,n){var r=Ut.exec(t.slice(n,n+2));return r?(e.H=+r[0],n+r[0].length):-1}function parseMinutes(e,t,n){var r=Ut.exec(t.slice(n,n+2));return r?(e.M=+r[0],n+r[0].length):-1}function parseSeconds(e,t,n){var r=Ut.exec(t.slice(n,n+2));return r?(e.S=+r[0],n+r[0].length):-1}function parseMilliseconds(e,t,n){var r=Ut.exec(t.slice(n,n+3));return r?(e.L=+r[0],n+r[0].length):-1}function parseMicroseconds(e,t,n){var r=Ut.exec(t.slice(n,n+6));return r?(e.L=Math.floor(r[0]/1e3),n+r[0].length):-1}function parseLiteralPercent(e,t,n){var r=Wt.exec(t.slice(n,n+1));return r?n+r[0].length:-1}function parseUnixTimestamp(e,t,n){var r=Ut.exec(t.slice(n));return r?(e.Q=+r[0],n+r[0].length):-1}function parseUnixTimestampSeconds(e,t,n){var r=Ut.exec(t.slice(n));return r?(e.Q=1e3*+r[0],n+r[0].length):-1}function formatDayOfMonth(e,t){return locale_pad(e.getDate(),t,2)}function formatHour24(e,t){return locale_pad(e.getHours(),t,2)}function formatHour12(e,t){return locale_pad(e.getHours()%12||12,t,2)}function formatDayOfYear(e,t){return locale_pad(1+ht.count(kt(e),e),t,3)}function formatMilliseconds(e,t){return locale_pad(e.getMilliseconds(),t,3)}function formatMicroseconds(e,t){return formatMilliseconds(e,t)+"000"}function formatMonthNumber(e,t){return locale_pad(e.getMonth()+1,t,2)}function formatMinutes(e,t){return locale_pad(e.getMinutes(),t,2)}function formatSeconds(e,t){return locale_pad(e.getSeconds(),t,2)}function formatWeekdayNumberMonday(e){var t=e.getDay();return 0===t?7:t}function formatWeekNumberSunday(e,t){return locale_pad(dt.count(kt(e),e),t,2)}function formatWeekNumberISO(e,t){var n=e.getDay();return e=n>=4||0===n?vt(e):vt.ceil(e),locale_pad(vt.count(kt(e),e)+(4===kt(e).getDay()),t,2)}function formatWeekdayNumberSunday(e){return e.getDay()}function formatWeekNumberMonday(e,t){return locale_pad(pt.count(kt(e),e),t,2)}function locale_formatYear(e,t){return locale_pad(e.getFullYear()%100,t,2)}function formatFullYear(e,t){return locale_pad(e.getFullYear()%1e4,t,4)}function formatZone(e){var t=e.getTimezoneOffset();return(t>0?"-":(t*=-1,"+"))+locale_pad(t/60|0,"0",2)+locale_pad(t%60,"0",2)}function formatUTCDayOfMonth(e,t){return locale_pad(e.getUTCDate(),t,2)}function formatUTCHour24(e,t){return locale_pad(e.getUTCHours(),t,2)}function formatUTCHour12(e,t){return locale_pad(e.getUTCHours()%12||12,t,2)}function formatUTCDayOfYear(e,t){return locale_pad(1+At.count(Lt(e),e),t,3)}function formatUTCMilliseconds(e,t){return locale_pad(e.getUTCMilliseconds(),t,3)}function formatUTCMicroseconds(e,t){return formatUTCMilliseconds(e,t)+"000"}function formatUTCMonthNumber(e,t){return locale_pad(e.getUTCMonth()+1,t,2)}function formatUTCMinutes(e,t){return locale_pad(e.getUTCMinutes(),t,2)}function formatUTCSeconds(e,t){return locale_pad(e.getUTCSeconds(),t,2)}function formatUTCWeekdayNumberMonday(e){var t=e.getUTCDay();return 0===t?7:t}function formatUTCWeekNumberSunday(e,t){return locale_pad(Et.count(Lt(e),e),t,2)}function formatUTCWeekNumberISO(e,t){var n=e.getUTCDay();return e=n>=4||0===n?Ft(e):Ft.ceil(e),locale_pad(Ft.count(Lt(e),e)+(4===Lt(e).getUTCDay()),t,2)}function formatUTCWeekdayNumberSunday(e){return e.getUTCDay()}function formatUTCWeekNumberMonday(e,t){return locale_pad(Mt.count(Lt(e),e),t,2)}function formatUTCYear(e,t){return locale_pad(e.getUTCFullYear()%100,t,2)}function formatUTCFullYear(e,t){return locale_pad(e.getUTCFullYear()%1e4,t,4)}function formatUTCZone(){return"+0000"}function formatLiteralPercent(){return"%"}function formatUnixTimestamp(e){return+e}function formatUnixTimestampSeconds(e){return Math.floor(+e/1e3)}!function defaultLocale_defaultLocale(e){return Rt=function formatLocale(e){var t=e.dateTime,n=e.date,r=e.time,i=e.periods,a=e.days,o=e.shortDays,u=e.months,c=e.shortMonths,s=formatRe(i),l=formatLookup(i),f=formatRe(a),h=formatLookup(a),d=formatRe(o),p=formatLookup(o),y=formatRe(u),g=formatLookup(u),v=formatRe(c),m=formatLookup(c),b={a:function formatShortWeekday(e){return o[e.getDay()]},A:function formatWeekday(e){return a[e.getDay()]},b:function formatShortMonth(e){return c[e.getMonth()]},B:function formatMonth(e){return u[e.getMonth()]},c:null,d:formatDayOfMonth,e:formatDayOfMonth,f:formatMicroseconds,H:formatHour24,I:formatHour12,j:formatDayOfYear,L:formatMilliseconds,m:formatMonthNumber,M:formatMinutes,p:function formatPeriod(e){return i[+(e.getHours()>=12)]},Q:formatUnixTimestamp,s:formatUnixTimestampSeconds,S:formatSeconds,u:formatWeekdayNumberMonday,U:formatWeekNumberSunday,V:formatWeekNumberISO,w:formatWeekdayNumberSunday,W:formatWeekNumberMonday,x:null,X:null,y:locale_formatYear,Y:formatFullYear,Z:formatZone,"%":formatLiteralPercent},_={a:function formatUTCShortWeekday(e){return o[e.getUTCDay()]},A:function formatUTCWeekday(e){return a[e.getUTCDay()]},b:function formatUTCShortMonth(e){return c[e.getUTCMonth()]},B:function formatUTCMonth(e){return u[e.getUTCMonth()]},c:null,d:formatUTCDayOfMonth,e:formatUTCDayOfMonth,f:formatUTCMicroseconds,H:formatUTCHour24,I:formatUTCHour12,j:formatUTCDayOfYear,L:formatUTCMilliseconds,m:formatUTCMonthNumber,M:formatUTCMinutes,p:function formatUTCPeriod(e){return i[+(e.getUTCHours()>=12)]},Q:formatUnixTimestamp,s:formatUnixTimestampSeconds,S:formatUTCSeconds,u:formatUTCWeekdayNumberMonday,U:formatUTCWeekNumberSunday,V:formatUTCWeekNumberISO,w:formatUTCWeekdayNumberSunday,W:formatUTCWeekNumberMonday,x:null,X:null,y:formatUTCYear,Y:formatUTCFullYear,Z:formatUTCZone,"%":formatLiteralPercent},x={a:function parseShortWeekday(e,t,n){var r=d.exec(t.slice(n));return r?(e.w=p[r[0].toLowerCase()],n+r[0].length):-1},A:function parseWeekday(e,t,n){var r=f.exec(t.slice(n));return r?(e.w=h[r[0].toLowerCase()],n+r[0].length):-1},b:function parseShortMonth(e,t,n){var r=v.exec(t.slice(n));return r?(e.m=m[r[0].toLowerCase()],n+r[0].length):-1},B:function parseMonth(e,t,n){var r=y.exec(t.slice(n));return r?(e.m=g[r[0].toLowerCase()],n+r[0].length):-1},c:function parseLocaleDateTime(e,n,r){return parseSpecifier(e,t,n,r)},d:parseDayOfMonth,e:parseDayOfMonth,f:parseMicroseconds,H:parseHour24,I:parseHour24,j:parseDayOfYear,L:parseMilliseconds,m:parseMonthNumber,M:parseMinutes,p:function parsePeriod(e,t,n){var r=s.exec(t.slice(n));return r?(e.p=l[r[0].toLowerCase()],n+r[0].length):-1},Q:parseUnixTimestamp,s:parseUnixTimestampSeconds,S:parseSeconds,u:parseWeekdayNumberMonday,U:parseWeekNumberSunday,V:parseWeekNumberISO,w:parseWeekdayNumberSunday,W:parseWeekNumberMonday,x:function parseLocaleDate(e,t,r){return parseSpecifier(e,n,t,r)},X:function parseLocaleTime(e,t,n){return parseSpecifier(e,r,t,n)},y:parseYear,Y:parseFullYear,Z:parseZone,"%":parseLiteralPercent};function newFormat(e,t){return function(n){var r,i,a,o=[],u=-1,c=0,s=e.length;for(n instanceof Date||(n=new Date(+n));++u53)return null;"w"in a||(a.w=1),"Z"in a?(r=(i=(r=utcDate(newYear(a.y))).getUTCDay())>4||0===i?Mt.ceil(r):Mt(r),r=At.offset(r,7*(a.V-1)),a.y=r.getUTCFullYear(),a.m=r.getUTCMonth(),a.d=r.getUTCDate()+(a.w+6)%7):(r=(i=(r=t(newYear(a.y))).getDay())>4||0===i?pt.ceil(r):pt(r),r=ht.offset(r,7*(a.V-1)),a.y=r.getFullYear(),a.m=r.getMonth(),a.d=r.getDate()+(a.w+6)%7)}else("W"in a||"U"in a)&&("w"in a||(a.w="u"in a?a.u%7:"W"in a?1:0),i="Z"in a?utcDate(newYear(a.y)).getUTCDay():t(newYear(a.y)).getDay(),a.m=0,a.d="W"in a?(a.w+6)%7+7*a.W-(i+5)%7:a.w+7*a.U-(i+6)%7);return"Z"in a?(a.H+=a.Z/100|0,a.M+=a.Z%100,utcDate(a)):t(a)}}function parseSpecifier(e,t,n,r){for(var i,a,o=0,u=t.length,c=n.length;o=c)return-1;if(37===(i=t.charCodeAt(o++))){if(i=t.charAt(o++),!(a=x[i in Vt?t.charAt(o++):i])||(r=a(e,n,r))<0)return-1}else if(i!=n.charCodeAt(r++))return-1}return r}return b.x=newFormat(n,b),b.X=newFormat(r,b),b.c=newFormat(t,b),_.x=newFormat(n,_),_.X=newFormat(r,_),_.c=newFormat(t,_),{format:function format(e){var t=newFormat(e+="",b);return t.toString=function(){return e},t},parse:function parse(e){var t=newParse(e+="",localDate);return t.toString=function(){return e},t},utcFormat:function utcFormat(e){var t=newFormat(e+="",_);return t.toString=function(){return e},t},utcParse:function utcParse(e){var t=newParse(e,utcDate);return t.toString=function(){return e},t}}}(e),Bt=Rt.format,Rt.parse,zt=Rt.utcFormat,Ht=Rt.utcParse,Rt}({dateTime:"%x, %X",date:"%-m/%-d/%Y",time:"%-I:%M:%S %p",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"]});Date.prototype.toISOString||zt("%Y-%m-%dT%H:%M:%S.%LZ");+new Date("2000-01-01T00:00:00.000Z")||Ht("%Y-%m-%dT%H:%M:%S.%LZ");var Gt=1e3,Yt=60*Gt,Xt=60*Yt,Kt=24*Xt,$t=7*Kt,Qt=30*Kt,Zt=365*Kt;function time_date(e){return new Date(e)}function time_number(e){return e instanceof Date?+e:+new Date(+e)}function calendar(e,t,n,r,i,a,o,u,c){var s=continuous(deinterpolateLinear,ge),l=s.invert,f=s.domain,h=c(".%L"),d=c(":%S"),p=c("%I:%M"),y=c("%I %p"),g=c("%a %d"),v=c("%b %d"),b=c("%B"),_=c("%Y"),x=[[o,1,Gt],[o,5,5*Gt],[o,15,15*Gt],[o,30,30*Gt],[a,1,Yt],[a,5,5*Yt],[a,15,15*Yt],[a,30,30*Yt],[i,1,Xt],[i,3,3*Xt],[i,6,6*Xt],[i,12,12*Xt],[r,1,Kt],[r,2,2*Kt],[n,1,$t],[t,1,Qt],[t,3,3*Qt],[e,1,Zt]];function tickFormat(u){return(o(u)1)&&(e-=Math.floor(e));var t=Math.abs(e-.5);return $n.h=360*e-100,$n.s=1.5-1.5*t,$n.l=.8-.9*t,$n+""};color_rgb(),Math.PI,Math.PI;function viridis_ramp(e){var t=e.length;return function(n){return e[Math.max(0,Math.min(t-1,Math.floor(n*t)))]}}var Zn=viridis_ramp(an("44015444025645045745055946075a46085c460a5d460b5e470d60470e6147106347116447136548146748166848176948186a481a6c481b6d481c6e481d6f481f70482071482173482374482475482576482677482878482979472a7a472c7a472d7b472e7c472f7d46307e46327e46337f463480453581453781453882443983443a83443b84433d84433e85423f854240864241864142874144874045884046883f47883f48893e49893e4a893e4c8a3d4d8a3d4e8a3c4f8a3c508b3b518b3b528b3a538b3a548c39558c39568c38588c38598c375a8c375b8d365c8d365d8d355e8d355f8d34608d34618d33628d33638d32648e32658e31668e31678e31688e30698e306a8e2f6b8e2f6c8e2e6d8e2e6e8e2e6f8e2d708e2d718e2c718e2c728e2c738e2b748e2b758e2a768e2a778e2a788e29798e297a8e297b8e287c8e287d8e277e8e277f8e27808e26818e26828e26828e25838e25848e25858e24868e24878e23888e23898e238a8d228b8d228c8d228d8d218e8d218f8d21908d21918c20928c20928c20938c1f948c1f958b1f968b1f978b1f988b1f998a1f9a8a1e9b8a1e9c891e9d891f9e891f9f881fa0881fa1881fa1871fa28720a38620a48621a58521a68522a78522a88423a98324aa8325ab8225ac8226ad8127ad8128ae8029af7f2ab07f2cb17e2db27d2eb37c2fb47c31b57b32b67a34b67935b77937b87838b9773aba763bbb753dbc743fbc7340bd7242be7144bf7046c06f48c16e4ac16d4cc26c4ec36b50c46a52c56954c56856c66758c7655ac8645cc8635ec96260ca6063cb5f65cb5e67cc5c69cd5b6ccd5a6ece5870cf5773d05675d05477d1537ad1517cd2507fd34e81d34d84d44b86d54989d5488bd6468ed64590d74393d74195d84098d83e9bd93c9dd93ba0da39a2da37a5db36a8db34aadc32addc30b0dd2fb2dd2db5de2bb8de29bade28bddf26c0df25c2df23c5e021c8e020cae11fcde11dd0e11cd2e21bd5e21ad8e219dae319dde318dfe318e2e418e5e419e7e419eae51aece51befe51cf1e51df4e61ef6e620f8e621fbe723fde725")),Jn=viridis_ramp(an("00000401000501010601010802010902020b02020d03030f03031204041405041606051806051a07061c08071e0907200a08220b09240c09260d0a290e0b2b100b2d110c2f120d31130d34140e36150e38160f3b180f3d19103f1a10421c10441d11471e114920114b21114e22115024125325125527125829115a2a115c2c115f2d11612f116331116533106734106936106b38106c390f6e3b0f703d0f713f0f72400f74420f75440f764510774710784910784a10794c117a4e117b4f127b51127c52137c54137d56147d57157e59157e5a167e5c167f5d177f5f187f601880621980641a80651a80671b80681c816a1c816b1d816d1d816e1e81701f81721f817320817521817621817822817922827b23827c23827e24828025828125818326818426818627818827818928818b29818c29818e2a81902a81912b81932b80942c80962c80982d80992d809b2e7f9c2e7f9e2f7fa02f7fa1307ea3307ea5317ea6317da8327daa337dab337cad347cae347bb0357bb2357bb3367ab5367ab73779b83779ba3878bc3978bd3977bf3a77c03a76c23b75c43c75c53c74c73d73c83e73ca3e72cc3f71cd4071cf4070d0416fd2426fd3436ed5446dd6456cd8456cd9466bdb476adc4869de4968df4a68e04c67e24d66e34e65e44f64e55064e75263e85362e95462ea5661eb5760ec5860ed5a5fee5b5eef5d5ef05f5ef1605df2625df2645cf3655cf4675cf4695cf56b5cf66c5cf66e5cf7705cf7725cf8745cf8765cf9785df9795df97b5dfa7d5efa7f5efa815ffb835ffb8560fb8761fc8961fc8a62fc8c63fc8e64fc9065fd9266fd9467fd9668fd9869fd9a6afd9b6bfe9d6cfe9f6dfea16efea36ffea571fea772fea973feaa74feac76feae77feb078feb27afeb47bfeb67cfeb77efeb97ffebb81febd82febf84fec185fec287fec488fec68afec88cfeca8dfecc8ffecd90fecf92fed194fed395fed597fed799fed89afdda9cfddc9efddea0fde0a1fde2a3fde3a5fde5a7fde7a9fde9aafdebacfcecaefceeb0fcf0b2fcf2b4fcf4b6fcf6b8fcf7b9fcf9bbfcfbbdfcfdbf")),er=viridis_ramp(an("00000401000501010601010802010a02020c02020e03021004031204031405041706041907051b08051d09061f0a07220b07240c08260d08290e092b10092d110a30120a32140b34150b37160b39180c3c190c3e1b0c411c0c431e0c451f0c48210c4a230c4c240c4f260c51280b53290b552b0b572d0b592f0a5b310a5c320a5e340a5f3609613809623909633b09643d09653e0966400a67420a68440a68450a69470b6a490b6a4a0c6b4c0c6b4d0d6c4f0d6c510e6c520e6d540f6d550f6d57106e59106e5a116e5c126e5d126e5f136e61136e62146e64156e65156e67166e69166e6a176e6c186e6d186e6f196e71196e721a6e741a6e751b6e771c6d781c6d7a1d6d7c1d6d7d1e6d7f1e6c801f6c82206c84206b85216b87216b88226a8a226a8c23698d23698f24699025689225689326679526679727669827669a28659b29649d29649f2a63a02a63a22b62a32c61a52c60a62d60a82e5fa92e5eab2f5ead305dae305cb0315bb1325ab3325ab43359b63458b73557b93556ba3655bc3754bd3853bf3952c03a51c13a50c33b4fc43c4ec63d4dc73e4cc83f4bca404acb4149cc4248ce4347cf4446d04545d24644d34743d44842d54a41d74b3fd84c3ed94d3dda4e3cdb503bdd513ade5238df5337e05536e15635e25734e35933e45a31e55c30e65d2fe75e2ee8602de9612bea632aeb6429eb6628ec6726ed6925ee6a24ef6c23ef6e21f06f20f1711ff1731df2741cf3761bf37819f47918f57b17f57d15f67e14f68013f78212f78410f8850ff8870ef8890cf98b0bf98c0af98e09fa9008fa9207fa9407fb9606fb9706fb9906fb9b06fb9d07fc9f07fca108fca309fca50afca60cfca80dfcaa0ffcac11fcae12fcb014fcb216fcb418fbb61afbb81dfbba1ffbbc21fbbe23fac026fac228fac42afac62df9c72ff9c932f9cb35f8cd37f8cf3af7d13df7d340f6d543f6d746f5d949f5db4cf4dd4ff4df53f4e156f3e35af3e55df2e661f2e865f2ea69f1ec6df1ed71f1ef75f1f179f2f27df2f482f3f586f3f68af4f88ef5f992f6fa96f8fb9af9fc9dfafda1fcffa4")),tr=viridis_ramp(an("0d088710078813078916078a19068c1b068d1d068e20068f2206902406912605912805922a05932c05942e05952f059631059733059735049837049938049a3a049a3c049b3e049c3f049c41049d43039e44039e46039f48039f4903a04b03a14c02a14e02a25002a25102a35302a35502a45601a45801a45901a55b01a55c01a65e01a66001a66100a76300a76400a76600a76700a86900a86a00a86c00a86e00a86f00a87100a87201a87401a87501a87701a87801a87a02a87b02a87d03a87e03a88004a88104a78305a78405a78606a68707a68808a68a09a58b0aa58d0ba58e0ca48f0da4910ea3920fa39410a29511a19613a19814a099159f9a169f9c179e9d189d9e199da01a9ca11b9ba21d9aa31e9aa51f99a62098a72197a82296aa2395ab2494ac2694ad2793ae2892b02991b12a90b22b8fb32c8eb42e8db52f8cb6308bb7318ab83289ba3388bb3488bc3587bd3786be3885bf3984c03a83c13b82c23c81c33d80c43e7fc5407ec6417dc7427cc8437bc9447aca457acb4679cc4778cc4977cd4a76ce4b75cf4c74d04d73d14e72d24f71d35171d45270d5536fd5546ed6556dd7566cd8576bd9586ada5a6ada5b69db5c68dc5d67dd5e66de5f65de6164df6263e06363e16462e26561e26660e3685fe4695ee56a5de56b5de66c5ce76e5be76f5ae87059e97158e97257ea7457eb7556eb7655ec7754ed7953ed7a52ee7b51ef7c51ef7e50f07f4ff0804ef1814df1834cf2844bf3854bf3874af48849f48948f58b47f58c46f68d45f68f44f79044f79143f79342f89441f89540f9973ff9983ef99a3efa9b3dfa9c3cfa9e3bfb9f3afba139fba238fca338fca537fca636fca835fca934fdab33fdac33fdae32fdaf31fdb130fdb22ffdb42ffdb52efeb72dfeb82cfeba2cfebb2bfebd2afebe2afec029fdc229fdc328fdc527fdc627fdc827fdca26fdcb26fccd25fcce25fcd025fcd225fbd324fbd524fbd724fad824fada24f9dc24f9dd25f8df25f8e125f7e225f7e425f6e626f6e826f5e926f5eb27f4ed27f3ee27f3f027f2f227f1f426f1f525f0f724f0f921")),nr={ROW_ID:"__id__"},rr={ACTION_INF:"actionInf",ON_LAYER_DRAW:"onlayerdraw"},ir=n(0),ar=n.n(ir),or=Array.prototype.slice,ur=function(e){return e},cr=1,sr=2,lr=3,fr=4,hr=1e-6;function translateX(e){return"translate("+(e+.5)+",0)"}function translateY(e){return"translate(0,"+(e+.5)+")"}function entering(){return!this.__axis}function axis_axis(e,t){var n=[],r=null,i=null,a=null,o=6,u=6,c=3,s=e===cr||e===fr?-1:1,l=e===fr||e===sr?"x":"y",f=e===cr||e===lr?translateX:translateY;function axis(h){var d=null==r?t.ticks?t.ticks.apply(t,n):t.domain():r,p=null==i?t.tickFormat?t.tickFormat.apply(t,n):ur:i,y=Math.max(o,0)+c,g=t.range(),v=+g[0]+.5,m=+g[g.length-1]+.5,b=(t.bandwidth?function axis_center(e){var t=Math.max(0,e.bandwidth()-1)/2;return e.round()&&(t=Math.round(t)),function(n){return+e(n)+t}}:function axis_number(e){return function(t){return+e(t)}})(t.copy()),_=h.selection?h.selection():h,x=_.selectAll(".domain").data([null]),w=_.selectAll(".tick").data(d,t).order(),k=w.exit(),C=w.enter().append("g").attr("class","tick"),S=w.select("line"),P=w.select("text");x=x.merge(x.enter().insert("path",".tick").attr("class","domain").attr("stroke","#000")),w=w.merge(C),S=S.merge(C.append("line").attr("stroke","#000").attr(l+"2",s*o)),P=P.merge(C.append("text").attr("fill","#000").attr(l,s*y).attr("dy",e===cr?"0em":e===lr?"0.71em":"0.32em")).style("transform",a),h!==_&&(x=x.transition(h),w=w.transition(h),S=S.transition(h),P=P.transition(h),k=k.transition(h).attr("opacity",hr).attr("transform",function(e){return isFinite(e=b(e))?f(e):this.getAttribute("transform")}),C.attr("opacity",hr).attr("transform",function(e){var t=this.parentNode.__axis;return f(t&&isFinite(t=t(e))?t:b(e))})),k.remove(),x.attr("d",e===fr||e==sr?"M"+s*u+","+v+"H0.5V"+m+"H"+s*u:"M"+v+","+s*u+"V0.5H"+m+"V"+s*u),w.attr("opacity",1).attr("transform",function(e){return f(b(e))}),S.attr(l+"2",s*o),P.attr(l,s*y).text(p),_.filter(entering).attr("fill","none").attr("font-size",10).attr("font-family","sans-serif").attr("text-anchor",e===sr?"start":e===fr?"end":"middle"),_.each(function(){this.__axis=b})}return axis.scale=function(e){return arguments.length?(t=e,axis):t},axis.tickTransform=function(e){return arguments.length?(a=e,axis):a},axis.ticks=function(){return n=or.call(arguments),axis},axis.tickArguments=function(e){return arguments.length?(n=null==e?[]:or.call(e),axis):n.slice()},axis.tickValues=function(e){return arguments.length?(r=null==e?null:or.call(e),axis):r&&r.slice()},axis.tickFormat=function(e){return arguments.length?(i=e,axis):i},axis.tickSize=function(e){return arguments.length?(o=u=+e,axis):o},axis.tickSizeInner=function(e){return arguments.length?(o=+e,axis):o},axis.tickSizeOuter=function(e){return arguments.length?(u=+e,axis):u},axis.tickPadding=function(e){return arguments.length?(c=+e,axis):c},axis}var dr=Math.PI,pr=2*dr,yr=pr-1e-6;function Path(){this._x0=this._y0=this._x1=this._y1=null,this._=""}function path_path(){return new Path}Path.prototype=path_path.prototype={constructor:Path,moveTo:function moveTo(e,t){this._+="M"+(this._x0=this._x1=+e)+","+(this._y0=this._y1=+t)},closePath:function closePath(){null!==this._x1&&(this._x1=this._x0,this._y1=this._y0,this._+="Z")},lineTo:function lineTo(e,t){this._+="L"+(this._x1=+e)+","+(this._y1=+t)},quadraticCurveTo:function quadraticCurveTo(e,t,n,r){this._+="Q"+ +e+","+ +t+","+(this._x1=+n)+","+(this._y1=+r)},bezierCurveTo:function bezierCurveTo(e,t,n,r,i,a){this._+="C"+ +e+","+ +t+","+ +n+","+ +r+","+(this._x1=+i)+","+(this._y1=+a)},arcTo:function arcTo(e,t,n,r,i){e=+e,t=+t,n=+n,r=+r,i=+i;var a=this._x1,o=this._y1,u=n-e,c=r-t,s=a-e,l=o-t,f=s*s+l*l;if(i<0)throw new Error("negative radius: "+i);if(null===this._x1)this._+="M"+(this._x1=e)+","+(this._y1=t);else if(f>1e-6)if(Math.abs(l*u-c*s)>1e-6&&i){var h=n-a,d=r-o,p=u*u+c*c,y=h*h+d*d,g=Math.sqrt(p),v=Math.sqrt(f),m=i*Math.tan((dr-Math.acos((p+f-y)/(2*g*v)))/2),b=m/v,_=m/g;Math.abs(b-1)>1e-6&&(this._+="L"+(e+b*s)+","+(t+b*l)),this._+="A"+i+","+i+",0,0,"+ +(l*h>s*d)+","+(this._x1=e+_*u)+","+(this._y1=t+_*c)}else this._+="L"+(this._x1=e)+","+(this._y1=t);else;},arc:function arc(e,t,n,r,i,a){e=+e,t=+t;var o=(n=+n)*Math.cos(r),u=n*Math.sin(r),c=e+o,s=t+u,l=1^a,f=a?r-i:i-r;if(n<0)throw new Error("negative radius: "+n);null===this._x1?this._+="M"+c+","+s:(Math.abs(this._x1-c)>1e-6||Math.abs(this._y1-s)>1e-6)&&(this._+="L"+c+","+s),n&&(f<0&&(f=f%pr+pr),f>yr?this._+="A"+n+","+n+",0,1,"+l+","+(e-o)+","+(t-u)+"A"+n+","+n+",0,1,"+l+","+(this._x1=c)+","+(this._y1=s):f>1e-6&&(this._+="A"+n+","+n+",0,"+ +(f>=dr)+","+l+","+(this._x1=e+n*Math.cos(i))+","+(this._y1=t+n*Math.sin(i))))},rect:function rect(e,t,n,r){this._+="M"+(this._x0=this._x1=+e)+","+(this._y0=this._y1=+t)+"h"+ +n+"v"+ +r+"h"+-n+"Z"},toString:function toString(){return this._}};var gr=path_path,vr=function(e){return function constant(){return e}},mr=Math.abs,br=Math.atan2,_r=Math.cos,xr=Math.max,wr=Math.min,kr=Math.sin,Cr=Math.sqrt,Sr=1e-12,Pr=Math.PI,Ar=Pr/2,Er=2*Pr;function asin(e){return e>=1?Ar:e<=-1?-Ar:Math.asin(e)}function arcInnerRadius(e){return e.innerRadius}function arcOuterRadius(e){return e.outerRadius}function arcStartAngle(e){return e.startAngle}function arcEndAngle(e){return e.endAngle}function arcPadAngle(e){return e&&e.padAngle}function cornerTangents(e,t,n,r,i,a,o){var u=e-n,c=t-r,s=(o?a:-a)/Cr(u*u+c*c),l=s*c,f=-s*u,h=e+l,d=t+f,p=n+l,y=r+f,g=(h+p)/2,v=(d+y)/2,m=p-h,b=y-d,_=m*m+b*b,x=i-a,w=h*y-p*d,k=(b<0?-1:1)*Cr(xr(0,x*x*_-w*w)),C=(w*b-m*k)/_,S=(-w*m-b*k)/_,P=(w*b+m*k)/_,A=(-w*m+b*k)/_,E=C-g,M=S-v,O=P-g,T=A-v;return E*E+M*M>O*O+T*T&&(C=P,S=A),{cx:C,cy:S,x01:-l,y01:-f,x11:C*(i/x-1),y11:S*(i/x-1)}}function Linear(e){this._context=e}Linear.prototype={areaStart:function areaStart(){this._line=0},areaEnd:function areaEnd(){this._line=NaN},lineStart:function lineStart(){this._point=0},lineEnd:function lineEnd(){(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function point(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;default:this._context.lineTo(e,t)}}};var Mr=function(e){return new Linear(e)};function point_x(e){return e[0]}function point_y(e){return e[1]}var Or=function(){var e=point_x,t=point_y,n=vr(!0),r=null,i=Mr,a=null;function line(o){var u,c,s,l=o.length,f=!1;for(null==r&&(a=i(s=gr())),u=0;u<=l;++u)!(u=l;--f)u.point(g[f],v[f]);u.lineEnd(),u.areaEnd()}y&&(g[s]=+e(h,s,c),v[s]=+n(h,s,c),u.point(t?+t(h,s,c):g[s],r?+r(h,s,c):v[s]))}if(d)return u=null,d+""||null}function arealine(){return Or().defined(i).curve(o).context(a)}return area.x=function(n){return arguments.length?(e="function"==typeof n?n:vr(+n),t=null,area):e},area.x0=function(t){return arguments.length?(e="function"==typeof t?t:vr(+t),area):e},area.x1=function(e){return arguments.length?(t=null==e?null:"function"==typeof e?e:vr(+e),area):t},area.y=function(e){return arguments.length?(n="function"==typeof e?e:vr(+e),r=null,area):n},area.y0=function(e){return arguments.length?(n="function"==typeof e?e:vr(+e),area):n},area.y1=function(e){return arguments.length?(r=null==e?null:"function"==typeof e?e:vr(+e),area):r},area.lineX0=area.lineY0=function(){return arealine().x(e).y(n)},area.lineY1=function(){return arealine().x(e).y(r)},area.lineX1=function(){return arealine().x(t).y(n)},area.defined=function(e){return arguments.length?(i="function"==typeof e?e:vr(!!e),area):i},area.curve=function(e){return arguments.length?(o=e,null!=a&&(u=o(a)),area):o},area.context=function(e){return arguments.length?(null==e?a=u=null:u=o(a=e),area):a},area},Fr=function(e,t){return te?1:t>=e?0:NaN},Nr=function(e){return e};curveRadial(Mr);function Radial(e){this._curve=e}function curveRadial(e){function radial(t){return new Radial(e(t))}return radial._curve=e,radial}Radial.prototype={areaStart:function areaStart(){this._curve.areaStart()},areaEnd:function areaEnd(){this._curve.areaEnd()},lineStart:function lineStart(){this._curve.lineStart()},lineEnd:function lineEnd(){this._curve.lineEnd()},point:function point(e,t){this._curve.point(t*Math.sin(e),t*-Math.cos(e))}};var jr=Array.prototype.slice;var Ir={draw:function draw(e,t){var n=Math.sqrt(t/Pr);e.moveTo(n,0),e.arc(0,0,n,0,Er)}},Dr={draw:function draw(e,t){var n=Math.sqrt(t/5)/2;e.moveTo(-3*n,-n),e.lineTo(-n,-n),e.lineTo(-n,-3*n),e.lineTo(n,-3*n),e.lineTo(n,-n),e.lineTo(3*n,-n),e.lineTo(3*n,n),e.lineTo(n,n),e.lineTo(n,3*n),e.lineTo(-n,3*n),e.lineTo(-n,n),e.lineTo(-3*n,n),e.closePath()}},Lr=Math.sqrt(1/3),Rr=2*Lr,Br={draw:function draw(e,t){var n=Math.sqrt(t/Rr),r=n*Lr;e.moveTo(0,-n),e.lineTo(r,0),e.lineTo(0,n),e.lineTo(-r,0),e.closePath()}},zr=Math.sin(Pr/10)/Math.sin(7*Pr/10),Hr=Math.sin(Er/10)*zr,Vr=-Math.cos(Er/10)*zr,Ur={draw:function draw(e,t){var n=Math.sqrt(.8908130915292852*t),r=Hr*n,i=Vr*n;e.moveTo(0,-n),e.lineTo(r,i);for(var a=1;a<5;++a){var o=Er*a/5,u=Math.cos(o),c=Math.sin(o);e.lineTo(c*n,-u*n),e.lineTo(u*r-c*i,c*r+u*i)}e.closePath()}},Wr={draw:function draw(e,t){var n=Math.sqrt(t),r=-n/2;e.rect(r,r,n,n)}},qr=Math.sqrt(3),Gr={draw:function draw(e,t){var n=-Math.sqrt(t/(3*qr));e.moveTo(0,2*n),e.lineTo(-qr*n,-n),e.lineTo(qr*n,-n),e.closePath()}},Yr=Math.sqrt(3)/2,Xr=1/Math.sqrt(12),Kr=3*(Xr/2+1),$r={draw:function draw(e,t){var n=Math.sqrt(t/Kr),r=n/2,i=n*Xr,a=r,o=n*Xr+n,u=-a,c=o;e.moveTo(r,i),e.lineTo(a,o),e.lineTo(u,c),e.lineTo(-.5*r-Yr*i,Yr*r+-.5*i),e.lineTo(-.5*a-Yr*o,Yr*a+-.5*o),e.lineTo(-.5*u-Yr*c,Yr*u+-.5*c),e.lineTo(-.5*r+Yr*i,-.5*i-Yr*r),e.lineTo(-.5*a+Yr*o,-.5*o-Yr*a),e.lineTo(-.5*u+Yr*c,-.5*c-Yr*u),e.closePath()}},Qr=function(){};function _point(e,t,n){e._context.bezierCurveTo((2*e._x0+e._x1)/3,(2*e._y0+e._y1)/3,(e._x0+2*e._x1)/3,(e._y0+2*e._y1)/3,(e._x0+4*e._x1+t)/6,(e._y0+4*e._y1+n)/6)}function Basis(e){this._context=e}Basis.prototype={areaStart:function areaStart(){this._line=0},areaEnd:function areaEnd(){this._line=NaN},lineStart:function lineStart(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function lineEnd(){switch(this._point){case 3:_point(this,this._x1,this._y1);case 2:this._context.lineTo(this._x1,this._y1)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function point(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;break;case 2:this._point=3,this._context.lineTo((5*this._x0+this._x1)/6,(5*this._y0+this._y1)/6);default:_point(this,e,t)}this._x0=this._x1,this._x1=e,this._y0=this._y1,this._y1=t}};function BasisClosed(e){this._context=e}BasisClosed.prototype={areaStart:Qr,areaEnd:Qr,lineStart:function lineStart(){this._x0=this._x1=this._x2=this._x3=this._x4=this._y0=this._y1=this._y2=this._y3=this._y4=NaN,this._point=0},lineEnd:function lineEnd(){switch(this._point){case 1:this._context.moveTo(this._x2,this._y2),this._context.closePath();break;case 2:this._context.moveTo((this._x2+2*this._x3)/3,(this._y2+2*this._y3)/3),this._context.lineTo((this._x3+2*this._x2)/3,(this._y3+2*this._y2)/3),this._context.closePath();break;case 3:this.point(this._x2,this._y2),this.point(this._x3,this._y3),this.point(this._x4,this._y4)}},point:function point(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._x2=e,this._y2=t;break;case 1:this._point=2,this._x3=e,this._y3=t;break;case 2:this._point=3,this._x4=e,this._y4=t,this._context.moveTo((this._x0+4*this._x1+e)/6,(this._y0+4*this._y1+t)/6);break;default:_point(this,e,t)}this._x0=this._x1,this._x1=e,this._y0=this._y1,this._y1=t}};function BasisOpen(e){this._context=e}BasisOpen.prototype={areaStart:function areaStart(){this._line=0},areaEnd:function areaEnd(){this._line=NaN},lineStart:function lineStart(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function lineEnd(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function point(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3;var n=(this._x0+4*this._x1+e)/6,r=(this._y0+4*this._y1+t)/6;this._line?this._context.lineTo(n,r):this._context.moveTo(n,r);break;case 3:this._point=4;default:_point(this,e,t)}this._x0=this._x1,this._x1=e,this._y0=this._y1,this._y1=t}};function Bundle(e,t){this._basis=new Basis(e),this._beta=t}Bundle.prototype={lineStart:function lineStart(){this._x=[],this._y=[],this._basis.lineStart()},lineEnd:function lineEnd(){var e=this._x,t=this._y,n=e.length-1;if(n>0)for(var r,i=e[0],a=t[0],o=e[n]-i,u=t[n]-a,c=-1;++c<=n;)r=c/n,this._basis.point(this._beta*e[c]+(1-this._beta)*(i+r*o),this._beta*t[c]+(1-this._beta)*(a+r*u));this._x=this._y=null,this._basis.lineEnd()},point:function point(e,t){this._x.push(+e),this._y.push(+t)}};(function custom(e){function bundle(t){return 1===e?new Basis(t):new Bundle(t,e)}return bundle.beta=function(e){return custom(+e)},bundle})(.85);function cardinal_point(e,t,n){e._context.bezierCurveTo(e._x1+e._k*(e._x2-e._x0),e._y1+e._k*(e._y2-e._y0),e._x2+e._k*(e._x1-t),e._y2+e._k*(e._y1-n),e._x2,e._y2)}function Cardinal(e,t){this._context=e,this._k=(1-t)/6}Cardinal.prototype={areaStart:function areaStart(){this._line=0},areaEnd:function areaEnd(){this._line=NaN},lineStart:function lineStart(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},lineEnd:function lineEnd(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:cardinal_point(this,this._x1,this._y1)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function point(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2,this._x1=e,this._y1=t;break;case 2:this._point=3;default:cardinal_point(this,e,t)}this._x0=this._x1,this._x1=this._x2,this._x2=e,this._y0=this._y1,this._y1=this._y2,this._y2=t}};(function custom(e){function cardinal(t){return new Cardinal(t,e)}return cardinal.tension=function(e){return custom(+e)},cardinal})(0);function CardinalClosed(e,t){this._context=e,this._k=(1-t)/6}CardinalClosed.prototype={areaStart:Qr,areaEnd:Qr,lineStart:function lineStart(){this._x0=this._x1=this._x2=this._x3=this._x4=this._x5=this._y0=this._y1=this._y2=this._y3=this._y4=this._y5=NaN,this._point=0},lineEnd:function lineEnd(){switch(this._point){case 1:this._context.moveTo(this._x3,this._y3),this._context.closePath();break;case 2:this._context.lineTo(this._x3,this._y3),this._context.closePath();break;case 3:this.point(this._x3,this._y3),this.point(this._x4,this._y4),this.point(this._x5,this._y5)}},point:function point(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._x3=e,this._y3=t;break;case 1:this._point=2,this._context.moveTo(this._x4=e,this._y4=t);break;case 2:this._point=3,this._x5=e,this._y5=t;break;default:cardinal_point(this,e,t)}this._x0=this._x1,this._x1=this._x2,this._x2=e,this._y0=this._y1,this._y1=this._y2,this._y2=t}};(function custom(e){function cardinal(t){return new CardinalClosed(t,e)}return cardinal.tension=function(e){return custom(+e)},cardinal})(0);function CardinalOpen(e,t){this._context=e,this._k=(1-t)/6}CardinalOpen.prototype={areaStart:function areaStart(){this._line=0},areaEnd:function areaEnd(){this._line=NaN},lineStart:function lineStart(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},lineEnd:function lineEnd(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function point(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3,this._line?this._context.lineTo(this._x2,this._y2):this._context.moveTo(this._x2,this._y2);break;case 3:this._point=4;default:cardinal_point(this,e,t)}this._x0=this._x1,this._x1=this._x2,this._x2=e,this._y0=this._y1,this._y1=this._y2,this._y2=t}};(function custom(e){function cardinal(t){return new CardinalOpen(t,e)}return cardinal.tension=function(e){return custom(+e)},cardinal})(0);function catmullRom_point(e,t,n){var r=e._x1,i=e._y1,a=e._x2,o=e._y2;if(e._l01_a>Sr){var u=2*e._l01_2a+3*e._l01_a*e._l12_a+e._l12_2a,c=3*e._l01_a*(e._l01_a+e._l12_a);r=(r*u-e._x0*e._l12_2a+e._x2*e._l01_2a)/c,i=(i*u-e._y0*e._l12_2a+e._y2*e._l01_2a)/c}if(e._l23_a>Sr){var s=2*e._l23_2a+3*e._l23_a*e._l12_a+e._l12_2a,l=3*e._l23_a*(e._l23_a+e._l12_a);a=(a*s+e._x1*e._l23_2a-t*e._l12_2a)/l,o=(o*s+e._y1*e._l23_2a-n*e._l12_2a)/l}e._context.bezierCurveTo(r,i,a,o,e._x2,e._y2)}function CatmullRom(e,t){this._context=e,this._alpha=t}CatmullRom.prototype={areaStart:function areaStart(){this._line=0},areaEnd:function areaEnd(){this._line=NaN},lineStart:function lineStart(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function lineEnd(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:this.point(this._x2,this._y2)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function point(e,t){if(e=+e,t=+t,this._point){var n=this._x2-e,r=this._y2-t;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(n*n+r*r,this._alpha))}switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;break;case 2:this._point=3;default:catmullRom_point(this,e,t)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=e,this._y0=this._y1,this._y1=this._y2,this._y2=t}};var Zr=function custom(e){function catmullRom(t){return e?new CatmullRom(t,e):new Cardinal(t,0)}return catmullRom.alpha=function(e){return custom(+e)},catmullRom}(.5);function CatmullRomClosed(e,t){this._context=e,this._alpha=t}CatmullRomClosed.prototype={areaStart:Qr,areaEnd:Qr,lineStart:function lineStart(){this._x0=this._x1=this._x2=this._x3=this._x4=this._x5=this._y0=this._y1=this._y2=this._y3=this._y4=this._y5=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function lineEnd(){switch(this._point){case 1:this._context.moveTo(this._x3,this._y3),this._context.closePath();break;case 2:this._context.lineTo(this._x3,this._y3),this._context.closePath();break;case 3:this.point(this._x3,this._y3),this.point(this._x4,this._y4),this.point(this._x5,this._y5)}},point:function point(e,t){if(e=+e,t=+t,this._point){var n=this._x2-e,r=this._y2-t;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(n*n+r*r,this._alpha))}switch(this._point){case 0:this._point=1,this._x3=e,this._y3=t;break;case 1:this._point=2,this._context.moveTo(this._x4=e,this._y4=t);break;case 2:this._point=3,this._x5=e,this._y5=t;break;default:catmullRom_point(this,e,t)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=e,this._y0=this._y1,this._y1=this._y2,this._y2=t}};(function custom(e){function catmullRom(t){return e?new CatmullRomClosed(t,e):new CardinalClosed(t,0)}return catmullRom.alpha=function(e){return custom(+e)},catmullRom})(.5);function CatmullRomOpen(e,t){this._context=e,this._alpha=t}CatmullRomOpen.prototype={areaStart:function areaStart(){this._line=0},areaEnd:function areaEnd(){this._line=NaN},lineStart:function lineStart(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function lineEnd(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function point(e,t){if(e=+e,t=+t,this._point){var n=this._x2-e,r=this._y2-t;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(n*n+r*r,this._alpha))}switch(this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3,this._line?this._context.lineTo(this._x2,this._y2):this._context.moveTo(this._x2,this._y2);break;case 3:this._point=4;default:catmullRom_point(this,e,t)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=e,this._y0=this._y1,this._y1=this._y2,this._y2=t}};(function custom(e){function catmullRom(t){return e?new CatmullRomOpen(t,e):new CardinalOpen(t,0)}return catmullRom.alpha=function(e){return custom(+e)},catmullRom})(.5);function LinearClosed(e){this._context=e}LinearClosed.prototype={areaStart:Qr,areaEnd:Qr,lineStart:function lineStart(){this._point=0},lineEnd:function lineEnd(){this._point&&this._context.closePath()},point:function point(e,t){e=+e,t=+t,this._point?this._context.lineTo(e,t):(this._point=1,this._context.moveTo(e,t))}};function monotone_sign(e){return e<0?-1:1}function slope3(e,t,n){var r=e._x1-e._x0,i=t-e._x1,a=(e._y1-e._y0)/(r||i<0&&-0),o=(n-e._y1)/(i||r<0&&-0),u=(a*i+o*r)/(r+i);return(monotone_sign(a)+monotone_sign(o))*Math.min(Math.abs(a),Math.abs(o),.5*Math.abs(u))||0}function slope2(e,t){var n=e._x1-e._x0;return n?(3*(e._y1-e._y0)/n-t)/2:t}function monotone_point(e,t,n){var r=e._x0,i=e._y0,a=e._x1,o=e._y1,u=(a-r)/3;e._context.bezierCurveTo(r+u,i+u*t,a-u,o-u*n,a,o)}function MonotoneX(e){this._context=e}function MonotoneY(e){this._context=new ReflectContext(e)}function ReflectContext(e){this._context=e}function Natural(e){this._context=e}function controlPoints(e){var t,n,r=e.length-1,i=new Array(r),a=new Array(r),o=new Array(r);for(i[0]=0,a[0]=2,o[0]=e[0]+2*e[1],t=1;t=0;--t)i[t]=(o[t]-i[t+1])/a[t];for(a[r-1]=(e[r]+i[r-1])/2,t=0;t=0&&(this._t=1-this._t,this._line=1-this._line)},point:function point(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;default:if(this._t<=0)this._context.lineTo(this._x,t),this._context.lineTo(e,t);else{var n=this._x*(1-this._t)+e*this._t;this._context.lineTo(n,this._y),this._context.lineTo(n,t)}}this._x=e,this._y=t}};var Jr=function(e){return new Step(e,.5)};function stepBefore(e){return new Step(e,0)}function stepAfter(e){return new Step(e,1)}var ei=function(e,t){if((i=e.length)>1)for(var n,r,i,a=1,o=e[t[0]],u=o.length;a=0;)n[t]=t;return n};function stackValue(e,t){return e[t]}var ni=function(e){var t=e.map(ascending_sum);return ti(e).sort(function(e,n){return t[e]-t[n]})};function ascending_sum(e){for(var t,n=0,r=-1,i=e.length;++r0)){if(a/=h,h<0){if(a0){if(a>f)return;a>l&&(l=a)}if(a=r-c,h||!(a<0)){if(a/=h,h<0){if(a>f)return;a>l&&(l=a)}else if(h>0){if(a0)){if(a/=d,d<0){if(a0){if(a>f)return;a>l&&(l=a)}if(a=i-s,d||!(a<0)){if(a/=d,d<0){if(a>f)return;a>l&&(l=a)}else if(d>0){if(a0||f<1)||(l>0&&(e[0]=[c+l*h,s+l*d]),f<1&&(e[1]=[c+f*h,s+f*d]),!0)}}}}}function connectEdge(e,t,n,r,i){var a=e[1];if(a)return!0;var o,u,c=e[0],s=e.left,l=e.right,f=s[0],h=s[1],d=l[0],p=l[1],y=(f+d)/2,g=(h+p)/2;if(p===h){if(y=r)return;if(f>d){if(c){if(c[1]>=i)return}else c=[y,n];a=[y,i]}else{if(c){if(c[1]1)if(f>d){if(c){if(c[1]>=i)return}else c=[(n-u)/o,n];a=[(i-u)/o,i]}else{if(c){if(c[1]=r)return}else c=[t,o*t+u];a=[r,o*r+u]}else{if(c){if(c[0]=-Ai)){var d=c*c+s*s,p=l*l+f*f,y=(f*d-s*p)/h,g=(c*p-l*d)/h,v=_i.pop()||new function Circle(){RedBlackNode(this),this.x=this.y=this.arc=this.site=this.cy=null};v.arc=e,v.site=i,v.x=y+o,v.y=(v.cy=g+u)+Math.sqrt(y*y+g*g),e.circle=v;for(var m=null,b=Ci._;b;)if(v.yPi)u=u.L;else{if(!((i=a-rightBreakPoint(u,o))>Pi)){r>-Pi?(t=u.P,n=u):i>-Pi?(t=u,n=u.N):t=n=u;break}if(!u.R){t=u;break}u=u.R}!function createCell(e){return ki[e.index]={site:e,halfedges:[]}}(e);var c=createBeach(e);if(wi.insert(t,c),t||n){if(t===n)return detachCircle(t),n=createBeach(t.site),wi.insert(c,n),c.edge=n.edge=createEdge(t.site,c.site),attachCircle(t),void attachCircle(n);if(n){detachCircle(t),detachCircle(n);var s=t.site,l=s[0],f=s[1],h=e[0]-l,d=e[1]-f,p=n.site,y=p[0]-l,g=p[1]-f,v=2*(h*g-d*y),m=h*h+d*d,b=y*y+g*g,_=[(g*m-d*b)/v+l,(h*b-y*m)/v+f];setEdgeEnd(n.edge,s,p,_),c.edge=createEdge(s,e,null,_),n.edge=createEdge(e,p,null,_),attachCircle(t),attachCircle(n)}else c.edge=createEdge(t.site,c.site)}}function leftBreakPoint(e,t){var n=e.site,r=n[0],i=n[1],a=i-t;if(!a)return r;var o=e.P;if(!o)return-1/0;var u=(n=o.site)[0],c=n[1],s=c-t;if(!s)return u;var l=u-r,f=1/a-1/s,h=l/s;return f?(-h+Math.sqrt(h*h-2*f*(l*l/(-2*s)-c+s/2+i-a/2)))/f+r:(r+u)/2}function rightBreakPoint(e,t){var n=e.N;if(n)return leftBreakPoint(n,t);var r=e.site;return r[1]===t?r[0]:1/0}var wi,ki,Ci,Si,Pi=1e-6,Ai=1e-12;function triangleArea(e,t,n){return(e[0]-n[0])*(t[1]-e[1])-(e[0]-t[0])*(n[1]-e[1])}function lexicographic(e,t){return t[1]-e[1]||t[0]-e[0]}function Diagram(e,t){var n,r,i,a=e.sort(lexicographic).pop();for(Si=[],ki=new Array(e.length),wi=new mi,Ci=new mi;;)if(i=bi,a&&(!i||a[1]Pi||Math.abs(i[0][1]-i[1][1])>Pi)||delete Si[a]}(o,u,c,s),function clipCells(e,t,n,r){var i,a,o,u,c,s,l,f,h,d,p,y,g=ki.length,v=!0;for(i=0;iPi||Math.abs(y-h)>Pi)&&(c.splice(u,0,Si.push(createBorderEdge(o,d,Math.abs(p-e)Pi?[e,Math.abs(f-e)Pi?[Math.abs(h-r)Pi?[n,Math.abs(f-n)Pi?[Math.abs(h-t)=u)return null;var c=e-i.site[0],s=t-i.site[1],l=c*c+s*s;do{i=a.cells[r=o],o=null,i.halfedges.forEach(function(n){var r=a.edges[n],u=r.left;if(u!==i.site&&u||(u=r.right)){var c=e-u[0],s=t-u[1],f=c*c+s*s;ft?0===i?i:"left"===n?i-1:i:i===e.length-1?i:"left"===n?i:i+1},Gi=(requestAnimationFrame,cancelAnimationFrame,function getQualifiedClassName(e,t,n){return[n+"-"+(e=e.replace(/^\.*/,"")),n+"-"+e+"-"+t]}),Yi=function defaultValue(e,t){return void 0===e||"object"===(void 0===e?"undefined":Ii(e))&&!e?t:e},Xi=function objectIterator(e,t){for(var n in e)Object.hasOwnProperty.call(e,n)&&t(n,e)},Ki=function(){function Voronoi(e){_classCallCheck(this,Voronoi),this._voronoi=Oi().x(function(e){return e.x}).y(function(e){return e.y}),this.data(e)}return ji(Voronoi,[{key:"data",value:function data(e){return e&&(this._voronoiFn=this._voronoi(e)),this}},{key:"find",value:function find(e,t,n){return this._voronoiFn.find(e,t,n)}}]),Voronoi}(),$i=function(){function Store(e){_classCallCheck(this,Store),this.model=Fi.a.create(e),this._listeners=[]}return ji(Store,[{key:"serialize",value:function serialize(){return this.model.serialize()}},{key:"commit",value:function commit(e,t){this.model.prop(e,t)}},{key:"registerChangeListener",value:function registerChangeListener(e,t,n){var r=e;Array.isArray(e)||(r=[e]);var i=this.model.next(r,t,n);return this._listeners.push(i),this}},{key:"registerImmediateListener",value:function registerImmediateListener(e,t,n){var r=e;Array.isArray(e)||(r=[e]);var i=this.model.on(r,t,n);return this._listeners.push(i),this}},{key:"get",value:function get(e){return this.model.prop(e)}},{key:"computed",value:function computed(e,t){return this.model.calculatedProp(e,t)}},{key:"unsubscribeAll",value:function unsubscribeAll(){this._listeners.forEach(function(e){return e()})}}]),Store}(),Qi=function intSanitizer(e){var t=e.toString().match(/(\d+)(px)*/g);return t?parseInt(t[0],10):null},Zi=function transactor(e,t,n){var r=void 0,i=n&&n instanceof Fi.a?n:Fi.a.create({}),a=function _loop(n){({}).hasOwnProperty.call(t,n)&&(r=t[n],i.prop(n)||i.append(_defineProperty({},n,r.value)),e[n]=function(t,r,a){return function(){for(var o=arguments.length,u=Array(o),c=0;c=0;n--)if(e[n]!==t[n])return!1;return!0}(t,n):"Object"===e?Object.is(t,n):t===n}},ta={INTERFACE_IMPL:"Method not implemented"},na=function mergeRecursive(e,t){for(var n in t)Di(e[n])&&Di(t[n])?mergeRecursive(e[n],t[n]):t[n]instanceof Object&&t[n].constructor===Object?(e[n]={},mergeRecursive(e[n],t[n])):e[n]=t[n];return e},ra=function interpolator(){return Pe},ia=function numberInterpolator(){return ge},aa=function piecewiseInterpolator(){return piecewise_piecewise};var oa=function rgbToHsv(e,t,n){var r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:1;e=+e,t=+t,n=+n,r=+r,e/=255,t/=255,n/=255;var i=Math.max(e,t,n),a=Math.min(e,t,n),o=void 0,u=void 0,c=(i+a)/2;if(i===a)o=u=0;else{var s=i-a;switch(u=c>.5?s/(2-i-a):s/(i+a),i){case e:o=(t-n)/s+(t=i[0]&&r<=i[1]})},{saveChild:!1,mode:n})},sa=function getDataModelFromIdentifiers(e,t,n){var r=void 0;if(t instanceof Array){var i=e.getFieldsConfig(),a=t.slice(1,t.length);if(t instanceof Function)r=t(e,{},!1);else if(t instanceof Array&&t[0].length){var o=t[0].filter(function(e){return e in i});r=e.select(function(e){var t=!0;return o.forEach(function(n,r){var i=e[n].valueOf(),o=a.findIndex(function(e){return e[r]===i});t=t&&-1!==o}),t},{saveChild:!1,mode:n})}}else r=ca(e,t,n);return r},la=function registerListeners(e,t){var n=t(e);for(var r in n)if({}.hasOwnProperty.call(n,r)){var i=n[r],a=i.type,o=i.props,u=i.listener;e.store()[a](o,u)}},fa=function isValidValue(e){return!isNaN(e)&&e!==-1/0&&e!==1/0},ha=function getObjProp(e){for(var t=arguments.length,n=Array(t>1?t-1:0),r=1;r1)for(var n,r,i,a,o,u,c=0,s=e[t[0]].length;c=0?(r[0]=a,r[1]=a+=i):i<0?(r[1]=o,r[0]=o+=i):r[0]=a}),_defineProperty(Mi,"none",ei),_defineProperty(Mi,"expand",function(e,t){if((r=e.length)>0){for(var n,r,i,a=0,o=e[0].length;a0&&(r=(n=e[t[0]]).length)>0){for(var n,r,i,a=0,o=1;o0&&(d+=f);for(null!=t?p.sort(function(e,n){return t(y[e],y[n])}):null!=n&&p.sort(function(e,t){return n(o[e],o[t])}),u=0,s=d?(v-h*b)/d:0;u0?f*s:0)+b,y[c]={data:o[c],index:u,value:f,startAngle:g,endAngle:l,padAngle:m};return y}return pie.value=function(t){return arguments.length?(e="function"==typeof t?t:vr(+t),pie):e},pie.sortValues=function(e){return arguments.length?(t=e,n=null,pie):t},pie.sort=function(e){return arguments.length?(n=e,t=null,pie):n},pie.startAngle=function(e){return arguments.length?(r="function"==typeof e?e:vr(+e),pie):r},pie.endAngle=function(e){return arguments.length?(i="function"==typeof e?e:vr(+e),pie):i},pie.padAngle=function(e){return arguments.length?(a="function"==typeof e?e:vr(+e),pie):a},pie},arc:function(){var e=arcInnerRadius,t=arcOuterRadius,n=vr(0),r=null,i=arcStartAngle,a=arcEndAngle,o=arcPadAngle,u=null;function arc(){var c,s,l=+e.apply(this,arguments),f=+t.apply(this,arguments),h=i.apply(this,arguments)-Ar,d=a.apply(this,arguments)-Ar,p=mr(d-h),y=d>h;if(u||(u=c=gr()),fSr)if(p>Er-Sr)u.moveTo(f*_r(h),f*kr(h)),u.arc(0,0,f,h,d,!y),l>Sr&&(u.moveTo(l*_r(d),l*kr(d)),u.arc(0,0,l,d,h,y));else{var g,v,m=h,b=d,_=h,x=d,w=p,k=p,C=o.apply(this,arguments)/2,S=C>Sr&&(r?+r.apply(this,arguments):Cr(l*l+f*f)),P=wr(mr(f-l)/2,+n.apply(this,arguments)),A=P,E=P;if(S>Sr){var M=asin(S/l*kr(C)),O=asin(S/f*kr(C));(w-=2*M)>Sr?(_+=M*=y?1:-1,x-=M):(w=0,_=x=(h+d)/2),(k-=2*O)>Sr?(m+=O*=y?1:-1,b-=O):(k=0,m=b=(h+d)/2)}var T=f*_r(m),F=f*kr(m),N=l*_r(x),j=l*kr(x);if(P>Sr){var I=f*_r(b),D=f*kr(b),L=l*_r(_),R=l*kr(_);if(pSr?function intersect(e,t,n,r,i,a,o,u){var c=n-e,s=r-t,l=o-i,f=u-a,h=(l*(t-a)-f*(e-i))/(f*c-l*s);return[e+h*c,t+h*s]}(T,F,L,R,I,D,N,j):[N,j],z=T-B[0],H=F-B[1],V=I-B[0],U=D-B[1],W=1/kr(function acos(e){return e>1?0:e<-1?Pr:Math.acos(e)}((z*V+H*U)/(Cr(z*z+H*H)*Cr(V*V+U*U)))/2),q=Cr(B[0]*B[0]+B[1]*B[1]);A=wr(P,(l-q)/(W-1)),E=wr(P,(f-q)/(W+1))}}k>Sr?E>Sr?(g=cornerTangents(L,R,T,F,f,E,y),v=cornerTangents(I,D,N,j,f,E,y),u.moveTo(g.cx+g.x01,g.cy+g.y01),ESr&&w>Sr?A>Sr?(g=cornerTangents(N,j,I,D,l,-A,y),v=cornerTangents(T,F,L,R,l,-A,y),u.lineTo(g.cx+g.x01,g.cy+g.y01),A=0&&"xmlns"!==(t=e.slice(0,n))&&(e=e.slice(n+1)),ka.hasOwnProperty(t)?{space:ka[t],local:e}:e};var Sa=function(e){var t=Ca(e);return(t.local?function creatorFixed(e){return function(){return this.ownerDocument.createElementNS(e.space,e.local)}}:function creatorInherit(e){return function(){var t=this.ownerDocument,n=this.namespaceURI;return n===wa&&t.documentElement.namespaceURI===wa?t.createElement(e):t.createElementNS(n,e)}})(t)};function selector_none(){}var Pa=function(e){return null==e?selector_none:function(){return this.querySelector(e)}};function selectorAll_empty(){return[]}var Aa=function(e){return null==e?selectorAll_empty:function(){return this.querySelectorAll(e)}},Ea=function matcher(e){return function(){return this.matches(e)}};if("undefined"!=typeof document){var Ma=document.documentElement;if(!Ma.matches){var Oa=Ma.webkitMatchesSelector||Ma.msMatchesSelector||Ma.mozMatchesSelector||Ma.oMatchesSelector;Ea=function matcher(e){return function(){return Oa.call(this,e)}}}}var Ta=Ea,Fa=function(e){return new Array(e.length)};function EnterNode(e,t){this.ownerDocument=e.ownerDocument,this.namespaceURI=e.namespaceURI,this._next=null,this._parent=e,this.__data__=t}EnterNode.prototype={constructor:EnterNode,appendChild:function appendChild(e){return this._parent.insertBefore(e,this._next)},insertBefore:function insertBefore(e,t){return this._parent.insertBefore(e,t)},querySelector:function querySelector(e){return this._parent.querySelector(e)},querySelectorAll:function querySelectorAll(e){return this._parent.querySelectorAll(e)}};var Na="$";function bindIndex(e,t,n,r,i,a){for(var o,u=0,c=t.length,s=a.length;ut?1:e>=t?0:NaN}var ja=function(e){return e.ownerDocument&&e.ownerDocument.defaultView||e.document&&e||e.defaultView};function styleValue(e,t){return e.style.getPropertyValue(t)||ja(e).getComputedStyle(e,null).getPropertyValue(t)}function classArray(e){return e.trim().split(/^|\s+/)}function classList(e){return e.classList||new ClassList(e)}function ClassList(e){this._node=e,this._names=classArray(e.getAttribute("class")||"")}function classedAdd(e,t){for(var n=classList(e),r=-1,i=t.length;++r=0&&(this._names.splice(t,1),this._node.setAttribute("class",this._names.join(" ")))},contains:function contains(e){return this._names.indexOf(e)>=0}};function textRemove(){this.textContent=""}function htmlRemove(){this.innerHTML=""}function raise_raise(){this.nextSibling&&this.parentNode.appendChild(this)}function lower(){this.previousSibling&&this.parentNode.insertBefore(this,this.parentNode.firstChild)}function constantNull(){return null}function remove_remove(){var e=this.parentNode;e&&e.removeChild(this)}function selection_cloneShallow(){return this.parentNode.insertBefore(this.cloneNode(!1),this.nextSibling)}function selection_cloneDeep(){return this.parentNode.insertBefore(this.cloneNode(!0),this.nextSibling)}var Ia={},Da=null;"undefined"!=typeof document&&("onmouseenter"in document.documentElement||(Ia={mouseenter:"mouseover",mouseleave:"mouseout"}));function filterContextListener(e,t,n){return e=contextListener(e,t,n),function(t){var n=t.relatedTarget;n&&(n===this||8&n.compareDocumentPosition(this))||e.call(this,t)}}function contextListener(e,t,n){return function(r){var i=Da;Da=r;try{e.call(this,this.__data__,t,n)}finally{Da=i}}}function onRemove(e){return function(){var t=this.__on;if(t){for(var n,r=0,i=-1,a=t.length;r=_&&(_=b+1);!(m=g[_])&&++_=0;)(r=i[a])&&(o&&o!==r.nextSibling&&o.parentNode.insertBefore(r,o),o=r);return this},sort:function(e){function compareNode(t,n){return t&&n?e(t.__data__,n.__data__):!t-!n}e||(e=sort_ascending);for(var t=this._groups,n=t.length,r=new Array(n),i=0;i1?this.each((null==t?function styleRemove(e){return function(){this.style.removeProperty(e)}}:"function"==typeof t?function styleFunction(e,t,n){return function(){var r=t.apply(this,arguments);null==r?this.style.removeProperty(e):this.style.setProperty(e,r,n)}}:function styleConstant(e,t,n){return function(){this.style.setProperty(e,t,n)}})(e,t,null==n?"":n)):styleValue(this.node(),e)},property:function(e,t){return arguments.length>1?this.each((null==t?function propertyRemove(e){return function(){delete this[e]}}:"function"==typeof t?function propertyFunction(e,t){return function(){var n=t.apply(this,arguments);null==n?delete this[e]:this[e]=n}}:function propertyConstant(e,t){return function(){this[e]=t}})(e,t)):this.node()[e]},classed:function(e,t){var n=classArray(e+"");if(arguments.length<2){for(var r=classList(this.node()),i=-1,a=n.length;++i=0&&(t=e.slice(n+1),e=e.slice(0,n)),{type:e,name:t}})}(e+""),o=a.length;if(!(arguments.length<2)){for(u=t?onAdd:onRemove,null==n&&(n=!1),r=0;r=0&&(n=e.slice(r+1),e=e.slice(0,r)),e&&!t.hasOwnProperty(e))throw new Error("unknown type: "+e);return{type:e,name:n}})}(e+"",r),a=-1,o=i.length;if(!(arguments.length<2)){if(null!=t&&"function"!=typeof t)throw new Error("invalid callback: "+t);for(;++a0)for(var n,r,i=new Array(n),a=0;af}c.mouse("drag")}function mouseupped(){Ba(Da.view).on("mousemove.drag mouseup.drag",null),function yesdrag(e,t){var n=e.document.documentElement,r=Ba(e).on("dragstart.drag",null);t&&(r.on("click.drag",Ya,!0),setTimeout(function(){r.on("click.drag",null)},0)),"onselectstart"in n?r.on("selectstart.drag",null):(n.style.MozUserSelect=n.__noselect,delete n.__noselect)}(Da.view,n),Ya(),c.mouse("end")}function touchstarted(){if(i.apply(this,arguments)){var e,t,n=Da.changedTouches,r=a.apply(this,arguments),o=n.length;for(e=0;e=0&&t._call.call(null,e),t=t._next;--eo}()}finally{eo=0,function nap(){var e,t,n=$a,r=1/0;for(;n;)n._call?(r>n._time&&(r=n._time),e=n,n=n._next):(t=n._next,n._next=null,n=e?e._next=t:$a=t);Qa=e,sleep(r)}(),ao=0}}function poke(){var e=uo.now(),t=e-io;t>ro&&(oo-=t,io=e)}function sleep(e){eo||(to&&(to=clearTimeout(to)),e-ao>24?(e<1/0&&(to=setTimeout(wake,e-uo.now()-oo)),no&&(no=clearInterval(no))):(no||(io=uo.now(),no=setInterval(poke,ro)),eo=1,co(wake)))}Timer.prototype=timer.prototype={constructor:Timer,restart:function restart(e,t,n){if("function"!=typeof e)throw new TypeError("callback is not a function");n=(null==n?now():+n)+(null==t?0:+t),this._next||Qa===this||(Qa?Qa._next=this:$a=this,Qa=this),this._call=e,this._time=n,sleep()},stop:function stop(){this._call&&(this._call=null,this._time=1/0,sleep())}};var so=function(e,t,n){var r=new Timer;return t=null==t?0:+t,r.restart(function(n){r.stop(),e(n+t)},t,n),r},lo=Ga("start","end","interrupt"),fo=[],ho=0,po=1,yo=2,go=3,vo=4,mo=5,bo=6,_o=function(e,t,n,r,i,a){var o=e.__transition;if(o){if(n in o)return}else e.__transition={};!function schedule_create(e,t,n){var r,i=e.__transition;function start(a){var o,u,c,s;if(n.state!==po)return stop();for(o in i)if((s=i[o]).name===n.name){if(s.state===go)return so(start);s.state===vo?(s.state=bo,s.timer.stop(),s.on.call("interrupt",e,e.__data__,s.index,s.group),delete i[o]):+oho)throw new Error("too late; already scheduled");return n}function schedule_set(e,t){var n=schedule_get(e,t);if(n.state>yo)throw new Error("too late; already started");return n}function schedule_get(e,t){var n=e.__transition;if(!n||!(n=n[t]))throw new Error("transition not found");return n}function tweenValue(e,t,n){var r=e._id;return e.each(function(){var e=schedule_set(this,r);(e.value||(e.value={}))[t]=n.apply(this,arguments)}),function(e){return schedule_get(e,r).value[t]}}var xo=function(e,t){var n;return("number"==typeof t?ge:t instanceof color_color?pe:(n=color_color(t))?(t=n,pe):Ce)(e,t)};var wo=Ra.prototype.constructor;var ko=0;function Transition(e,t,n,r){this._groups=e,this._parents=t,this._name=n,this._id=r}function newId(){return++ko}var Co=Ra.prototype;Transition.prototype=function src_transition_transition(e){return Ra().transition(e)}.prototype={constructor:Transition,select:function(e){var t=this._name,n=this._id;"function"!=typeof e&&(e=Pa(e));for(var r=this._groups,i=r.length,a=new Array(i),o=0;o=0&&(e=e.slice(0,t)),!e||"start"===e})}(t)?init:schedule_set;return function(){var o=a(this,e),u=o.on;u!==r&&(i=(r=u).copy()).on(t,n),o.on=i}}(n,e,t))},attr:function(e,t){var n=Ca(e),r="transform"===n?Fe:xo;return this.attrTween(e,"function"==typeof t?(n.local?function attr_attrFunctionNS(e,t,n){var r,i,a;return function(){var o,u=n(this);if(null!=u)return(o=this.getAttributeNS(e.space,e.local))===u?null:o===r&&u===i?a:a=t(r=o,i=u);this.removeAttributeNS(e.space,e.local)}}:function attr_attrFunction(e,t,n){var r,i,a;return function(){var o,u=n(this);if(null!=u)return(o=this.getAttribute(e))===u?null:o===r&&u===i?a:a=t(r=o,i=u);this.removeAttribute(e)}})(n,r,tweenValue(this,"attr."+e,t)):null==t?(n.local?function attr_attrRemoveNS(e){return function(){this.removeAttributeNS(e.space,e.local)}}:function attr_attrRemove(e){return function(){this.removeAttribute(e)}})(n):(n.local?function attr_attrConstantNS(e,t,n){var r,i;return function(){var a=this.getAttributeNS(e.space,e.local);return a===n?null:a===r?i:i=t(r=a,n)}}:function attr_attrConstant(e,t,n){var r,i;return function(){var a=this.getAttribute(e);return a===n?null:a===r?i:i=t(r=a,n)}})(n,r,t+""))},attrTween:function(e,t){var n="attr."+e;if(arguments.length<2)return(n=this.tween(n))&&n._value;if(null==t)return this.tween(n,null);if("function"!=typeof t)throw new Error;var r=Ca(e);return this.tween(n,(r.local?function attrTweenNS(e,t){function tween(){var n=this,r=t.apply(n,arguments);return r&&function(t){n.setAttributeNS(e.space,e.local,r(t))}}return tween._value=t,tween}:function attrTween(e,t){function tween(){var n=this,r=t.apply(n,arguments);return r&&function(t){n.setAttribute(e,r(t))}}return tween._value=t,tween})(r,t))},style:function(e,t,n){var r="transform"==(e+="")?Te:xo;return null==t?this.styleTween(e,function style_styleRemove(e,t){var n,r,i;return function(){var a=styleValue(this,e),o=(this.style.removeProperty(e),styleValue(this,e));return a===o?null:a===n&&o===r?i:i=t(n=a,r=o)}}(e,r)).on("end.style."+e,function styleRemoveEnd(e){return function(){this.style.removeProperty(e)}}(e)):this.styleTween(e,"function"==typeof t?function style_styleFunction(e,t,n){var r,i,a;return function(){var o=styleValue(this,e),u=n(this);return null==u&&(this.style.removeProperty(e),u=styleValue(this,e)),o===u?null:o===r&&u===i?a:a=t(r=o,i=u)}}(e,r,tweenValue(this,"style."+e,t)):function style_styleConstant(e,t,n){var r,i;return function(){var a=styleValue(this,e);return a===n?null:a===r?i:i=t(r=a,n)}}(e,r,t+""),n)},styleTween:function(e,t,n){var r="style."+(e+="");if(arguments.length<2)return(r=this.tween(r))&&r._value;if(null==t)return this.tween(r,null);if("function"!=typeof t)throw new Error;return this.tween(r,function styleTween(e,t,n){function tween(){var r=this,i=t.apply(r,arguments);return i&&function(t){r.style.setProperty(e,i(t),n)}}return tween._value=t,tween}(e,t,null==n?"":n))},text:function(e){return this.tween("text","function"==typeof e?function text_textFunction(e){return function(){var t=e(this);this.textContent=null==t?"":t}}(tweenValue(this,"text",e)):function text_textConstant(e){return function(){this.textContent=e}}(null==e?"":e+""))},remove:function(){return this.on("end.remove",function removeFunction(e){return function(){var t=this.parentNode;for(var n in this.__transition)if(+n!==e)return;t&&t.removeChild(this)}}(this._id))},tween:function(e,t){var n=this._id;if(e+="",arguments.length<2){for(var r,i=schedule_get(this.node(),n).tween,a=0,o=i.length;ayo&&n.state4&&void 0!==arguments[4]?arguments[4]:{},a=arguments[5];(e instanceof HTMLElement||e instanceof SVGElement)&&(e=Ao(e));var o=r?r[0]:null,u=null,c=null,s=null,l=null,f=null,h=void 0;o?"#"===o?(u="id",c=r):(u="class",c="."===r[0]?r:"."+r):(c=t,h=!0),s=e.selectAll(c),h&&(s=s.filter(function(){return this.parentNode===e.node()})),l=(s=s.data(n,a)).enter().append(t||"div"),i.enter&&l.each(function(){for(var e=arguments.length,t=Array(e),n=0;nthis._data.length)for(var a=this._data.length;a0&&void 0!==arguments[0]?arguments[0]:{};this._lifeCycles=e,this._releasePromisesFromCache()}},{key:"_resetTargetPromise",value:function _resetTargetPromise(e){var t=this;setTimeout(function(){t._notifiers[e]=Xo,t._promises.set(e,t._makeNotifierPromise(e))},0)}}]),LifeCycleManager}(),Qo="drag",Zo="hover",Jo="selectiondrag",eu="click",tu="longtouch",nu="touchdrag",ru="*",iu=1,au=-1,ou=0,uu=2,cu=-2,su=function(){function defineProperties(e,t){for(var n=0;n0?(e[n]===uu&&t.entrySet[0].push(n),e[n]===iu&&t.entrySet[1].push(n)):e[n]<0&&(e[n]===cu&&t.exitSet[0].push(n),e[n]===au&&t.exitSet[1].push(n)),t.completeSet.push(n);return["entrySet","exitSet"].forEach(function(e){t[e]=t[e].map(function(e){return e.map(Number)})}),t.completeSet=t.completeSet.map(Number),t}},{key:"reset",value:function reset(e){var t=this._set;if(e)e.forEach(function(e){t[e]=ou});else{var n=this._lockedSelection;for(var r in t)r in n||(t[r]=ou)}return this._resetted=!0,this}},{key:"getEntrySet",value:function getEntrySet(){var e=this._set,t=[];for(var n in e)e[n]===iu&&t.push(n);return t}},{key:"getExistingEntrySet",value:function getExistingEntrySet(e){var t=this._set;return e.filter(function(e){return t[e]===iu||t[e]===uu})}},{key:"getExistingExitSet",value:function getExistingExitSet(e){var t=this._set;return e.filter(function(e){return t[e]===au||t[e]===cu})}},{key:"getOldEntry",value:function getOldEntry(){var e=this._set,t=[];for(var n in e)e[n]===uu&&t.push(n);return t}},{key:"getOldExit",value:function getOldExit(){var e=this._set,t=[];for(var n in e)e[n]===cu&&t.push(n);return t}},{key:"getExitSet",value:function getExitSet(){var e=this._set,t=[];for(var n in e)e[n]===au&&t.push(n);return t}},{key:"getCompleteSet",value:function getCompleteSet(){var e=this._set,t=[];for(var n in e)t.push(n);return t}},{key:"getCompleteSetCount",value:function getCompleteSetCount(){return this._completeSetCount}},{key:"resetted",value:function resetted(){return this._resetted}},{key:"toggle",value:function toggle(){var e=this._set;for(var t in e)e[t]===iu?e[t]=au:e[t]===au?e[t]=iu:e[t]===uu?e[t]=cu:e[t]=uu;return this}}]),SelectionSet}();function helper_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t3&&void 0!==arguments[3]?arguments[3]:{},i=this.sideEffects(),a=i[e],o=!1;r.filter&&r.filter(a)&&(o=!0),!o&&i[e].apply(t,n,r)}},{key:"registerPropagationBehaviourMap",value:function registerPropagationBehaviourMap(e){return this._propagationBehaviourMap=Object.assign(this._propagationBehaviourMap,e||{}),this}},{key:"dispatchBehaviour",value:function dispatchBehaviour(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=void 0===n.propagate||n.propagate,i=this._actions.behavioural[e],a=function getSideEffects(e,t){var n=[];for(var r in t){var i=r.split(",");i.some(function(t){return t===e})&&n.push({effects:t[r],behaviours:i})}return n}(e,this._behaviourEffectMap);if(this._propagationInf=n,i){var o=i.dispatch(t),u=this.getPropagationSelectionSet(o);this._entryExitSet[e]=u;var c=this.shouldApplySideEffects(r);if(r&&this.propagate(e,t,o.find(function(e){return e.sourceSelectionSet}),a),c){var s=this.getApplicableSideEffects(a,t,n);this.applySideEffects(s,u,t)}}return this}},{key:"getPropagationSelectionSet",value:function getPropagationSelectionSet(e){return e.find(function(e){return!e.sourceSelectionSet})}},{key:"shouldApplySideEffects",value:function shouldApplySideEffects(){return!0}},{key:"changeBehaviourStateOnPropagation",value:function changeBehaviourStateOnPropagation(e,t){return t instanceof Function?this._sourceBehaviours[e]=t:this._sourceBehaviours[e]=function(){return t},this}},{key:"changeSideEffectStateOnPropagation",value:function changeSideEffectStateOnPropagation(e,t){t instanceof Function?this._sourceSideEffects[e]=t:this._sourceSideEffects[e]=function(){return t}}},{key:"propagate",value:function propagate(){return this}},{key:"sideEffects",value:function sideEffects(){return arguments.length?(this._sideEffects=arguments.length<=0?void 0:arguments[0],this):this._sideEffects}},{key:"enableSideEffects",value:function enableSideEffects(e){return fu(this,e,!0),this}},{key:"disableSideEffects",value:function disableSideEffects(e){return fu(this,e,!1),this}},{key:"dissociateBehaviour",value:function dissociateBehaviour(e,t){var n=this._actionBehaviourMap;for(var r in n)if(r===t){var i=n[r];i.behaviours=i.behaviours.filter(function(t){return t!==e})}return this}},{key:"dissociateSideEffect",value:function dissociateSideEffect(e,t){var n=this._behaviourEffectMap;return n[t]=n[t].filter(function(t){return(t.name||t)!==e}),this}},{key:"getApplicableSideEffects",value:function getApplicableSideEffects(e){return e}},{key:"attachPropagationListener",value:function attachPropagationListener(e){return e.unsubscribe("propagation"),e.on("propagation",this.onDataModelPropagation()),this}},{key:"onDataModelPropagation",value:function onDataModelPropagation(){var e=this;return function(t){var n=t.payload,r=n.action;e.dispatchBehaviour(r,n,{propagate:!1})}}},{key:"createSelectionSet",value:function createSelectionSet(e,t){var n=t||this._actions.behavioural,r=this._selectionSet,i=this._volatileSelectionSet;for(var a in n)({}).hasOwnProperty.call(n,a)&&(r[a]=new lu(e),i[a]=new lu(e,!0));return this._volatileSelectionSet=i,this.selectionSet(r),this}},{key:"selectionSet",value:function selectionSet(){return arguments.length?(this._selectionSet=arguments.length<=0?void 0:arguments[0],this):this._selectionSet}},{key:"initializeSideEffects",value:function initializeSideEffects(){var e=this._sideEffectDefinitions;return this.sideEffects(function initializeSideEffects(e,t){var n=e._sideEffects;return(t=t instanceof Array?t:Object.values(t)).forEach(function(t){var r=n[t.formalName()];n[t.formalName()]=r||new t(e)}),n}(this,e)),this}},{key:"registerPhysicalActions",value:function registerPhysicalActions(e){var t=function initializePhysicalActions(e,t){var n={};for(var r in t)({}).hasOwnProperty.call(r,t)||(n[r]=t[r](e));return n}(this,e);return Object.assign(this._actions.physical,t),this}},{key:"propagateWith",value:function propagateWith(e,t){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],r=this._actions.behavioural;if(t.length){if(e===ru)for(var i in r)this._propagationFields[i]={fields:t,append:n};else this._propagationFields[e]={fields:t,append:n};return this}return this._propagationFields}},{key:"mapActionsAndBehaviour",value:function mapActionsAndBehaviour(){var e=this._actions.physical,t=this._actionBehaviourMap,n=this._mappedActions;for(var r in t)if(!{}.hasOwnProperty.call(r,t)){var i=void 0,a=t[r];i=a.target;var o=a.touch;i||(i=this.context.getDefaultTargetContainer());var u=Ro()?!0===o||void 0===o:!o,c=r+"-"+a.behaviours.join();u&&!n[c]&&this.bindActionWithBehaviour(e[r],i,a.behaviours),n[c]=!0}return this}},{key:"registerPhysicalBehaviouralMap",value:function registerPhysicalBehaviouralMap(e){return Object.assign(this._actionBehaviourMap,e),this}},{key:"bindActionWithBehaviour",value:function bindActionWithBehaviour(e,t,n){var r=this;return"string"==typeof t&&(t=[t]),t.forEach(function(t){var i=r.context.mount(),a=t.node instanceof Function?t:Ao(i).selectAll(t);n.length&&!a.empty()&&(a instanceof Array?a.forEach(function(t){e(Ao(t),n)}):e(a,n))}),this}},{key:"getPropagationInf",value:function getPropagationInf(){return this._propagationInf}},{key:"getAddSetFromCriteria",value:function getAddSetFromCriteria(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=this.context,r=t.data?t.data:n.getDataModelFromIdentifiers(e,"all"),i=n.fields().x||[],a=n.fields().y||[],o=i.every(function(e){return e.type()===ir.FieldType.MEASURE}),u=a.every(function(e){return e.type()===ir.FieldType.MEASURE});return{model:r,uids:null===e?null:t.data?function filterPropagationModel(e,t,n){var r=t.getData(),i=r.data,a=r.schema,o=void 0;if(a.length){var u=e.getFieldsConfig();o=e.select(function(e){return i.some(function(t){return a.every(function(r,i){return!(n||r.name in u&&u[r.name].def.type!==ir.FieldType.MEASURE)||t[i]===e[r.name].valueOf()})})},{saveChild:!1})}else o=t;return o}(this.getFullData(),t.data[0],o&&u).getData().uids:r[0].getData().uids}}},{key:"getSelectionSets",value:function getSelectionSets(e){var t=this.context.id(),n=(this._propagationInf||{}).sourceId,r=[];return n!==t&&(r=[this._volatileSelectionSet[e]]),n&&r.push(this.selectionSet()[e]),r}},{key:"getFullData",value:function getFullData(){return this.context.data()}},{key:"resetted",value:function resetted(){return this._resetted}},{key:"getEntryExitSet",value:function getEntryExitSet(e){return this._entryExitSet[e]}}]),Firebolt}(),mu=function(){function defineProperties(e,t){for(var n=0;n1&&void 0!==arguments[1]?arguments[1]:{},n=e.sourceIdentifiers;return n?n.getSchema().map(function(e){return e.name}):t instanceof Array?t[0]:Object.keys(t||{})}(u,n.criteria),sourceSelectionSet:!0===e._volatile}}},{key:"enable",value:function enable(){this._enabled=!0}},{key:"disable",value:function disable(){this._enabled=!1}},{key:"isEnabled",value:function isEnabled(){return this._enabled}}],[{key:"mutates",value:function mutates(){return!1}}]),GenericBehaviour}(),_u=function(){function defineProperties(e,t){for(var n=0;nk[0]?k:w,S=C===k?w:k;C[1]100&&Math.abs(i.x-a.x)<=5)){a.x=Math.max(0,Math.min(a.x,o.width)),a.y=Math.max(0,Math.min(a.y,o.height));var s=Ru(n.context.getSourceInfo(),{startPos:i,endPos:a,snap:!0},n.context.data().getFieldsConfig());s.dragEnd=!0,t.forEach(function(e){return n.dispatchBehaviour(e,s)})}}))},zu=function hover(e){return function(t,n){var r=function dispatchBehaviour(t){var r=Io(),i=e.context,a=i.config().interaction.tooltip.mode,o=jo(i.getDrawingContext().svgContainer,r),u=i.getNearestPoint(o.x,o.y,{getAllPoints:"consolidated"===a||"fragmented"===a,data:t,event:r}),c={criteria:u?u.id:null,showInPosition:u.showInPosition,target:u.target,position:o,mode:a};n.forEach(function(t){return e.dispatchBehaviour(t,c)}),r.stopPropagation()};t.on("mouseover",r).on("mousemove",r).on("mouseout",function(){n.forEach(function(t){return e.dispatchBehaviour(t,{criteria:null})})})}},Hu=function generatePayloadFromEvent(e,t,n){var r=n.context,i=jo(r.getDrawingContext().svgContainer,t.touches?t.touches[0]:t),a=r.getNearestPoint(i.x,i.y,{data:e,event:t});return{criteria:a?a.id:null,showInPosition:a.showInPosition,target:a.target,position:i}},Vu=function click(e){return function(t,n){t.on("click",function dispatchBehaviour(t){var r=Io(),i=Hu(t,r,e);n.forEach(function(t){return e.dispatchBehaviour(t,i)}),r.stopPropagation()})}};function physical_defineProperty(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var Uu=(physical_defineProperty(Du={},Qo,function drag(e){return function(t,n){Bu(t,n,e)}}),physical_defineProperty(Du,Zo,zu),physical_defineProperty(Du,eu,Vu),physical_defineProperty(Du,tu,function longtouch(e){return function(t,n){var r=void 0,i=void 0;i=!1,r=Io(),t.on("touchstart",function(t){r=Io(),i=!1,setTimeout(function(){i?n.forEach(function(t){return e.dispatchBehaviour(t,{criteria:null})}):function dispatchBehaviour(t){var i=Hu(t,r,e);n.forEach(function(t){return e.dispatchBehaviour(t,i)}),r.stopPropagation()}(t)},100)}).on("touchend",function(){i=!0})}}),physical_defineProperty(Du,nu,function touchdrag(e){return function(t,n){Bu(t,n,e,!0)}}),Du),Wu=function(){function defineProperties(e,t){for(var n=0;n1&&void 0!==arguments[1]&&arguments[1];var t=arguments[2],n=arguments[3];this.firebolt.context.layers().forEach(function(r){return!1!==r.config().interactive&&r.applyInteractionStyle(t,e.uids,n)})}}]),SurrogateSideEffect}(),Xu=function(){function defineProperties(e,t){for(var n=0;n=0&&l<=t&&c>=0&&s<=n){var f=Ru(a.getSourceInfo(),{startPos:{x:u,y:c},endPos:{x:l,y:s}},a.data().getFieldsConfig());o(f)}}).on("end",function(){var e=i.width,t=i.height,n=Math.min(e-r.width,Math.max(r.x,0)),u=Math.min(t-r.height,Math.max(r.y,0)),c=u+r.height,s=n+r.width;if(n>=0&&s<=e&&u>=0&&c<=t){var l=Ru(a.getSourceInfo(),{startPos:{x:n,y:u},endPos:{x:s,y:c},snap:!0},a.data().getFieldsConfig());l.dragEnd=!0,o(l)}}))}}(c)(Ao(this),["brush"],x)}).merge(w).each(function(e){var t=Ao(this);for(var n in b&&(t=t.transition().duration(b.duration)),e)({}).hasOwnProperty.call(e,n)&&fa(e[n])&&t.attr(n,e[n])}),C=Gi(u.defClassName,this._id,d);return k.classed(C.join(" "),!0),k.classed(u.className,!0),this}},{key:"hide",value:function hide(e){Qu(this,e.sideEffectGroup,!1)}},{key:"show",value:function show(e){Qu(this,e.sideEffectGroup,!0)}}],[{key:"defaultConfig",value:function defaultConfig(){return{defClassName:"selection-box-group",className:"",classPrefix:"muze",box:{defClassName:"selection-box",className:""},transition:{duration:200}}}},{key:"formalName",value:function formalName(){return"selectionBox"}}]),SelectionBox}(),ec={position:"absolute",width:0,height:0},tc={classPrefix:"muze",defClassName:"tooltip-box",connectorClassName:"tooltip-connectors",className:"",row:{margin:0},content:{spacing:5,iconContainerSize:10,iconScale:1,iconShape:"circle",iconColor:"#ff0000",rowMargin:"0px",margin:10,separator:":",className:"tooltip-content-container",parentClassName:"tooltip-content-parent-container"},arrow:{size:10,disabled:!1,defClassName:"tooltip-arrow",className:"",color:"rgba(195,195,195,0.85)"}},nc=function getArrowPos(e,t,n,r){var i=void 0,a=n.x,o=n.y,u=n.boxHeight,c=n.boxWidth,s=r.arrow.disabled?0:r.arrow.size;if("left"===e||"right"===e){var l=0,f=u/2,h=t.y+t.height,d=o+u;t.y>o?(l=t.y-o,f=(h>=d?d-t.y:t.height)/2):d>h&&(f=Math.abs(o-(t.y+t.height))/2),i=l+f-s/2}else{var p=0,y=c/2,g=t.x+t.width,v=a+c;t.x>a?(p=t.x-a,y=(g>=v?v-t.x:t.width)/2):v>g&&(y=Math.abs(a-(t.x+t.width))/2),i=p+y-s/2}return i},rc=function placeArrow(e,t,n){var r=e._tooltipArrow,i=e._tooltipBackground,a=e._config,o=a.classPrefix,u=a.arrow,c=Gi(u.defClassName,e._id,a.classPrefix);r.style("display","block"),r.attr("class",""+c.join(" ")),"left"===t||"right"===t?(r.style("top",n+"px"),r.style("left",""),i.style("top",n+"px"),i.style("left","")):("bottom"===t?r.style("top","100%"):r.style("top","-"+u.size+"px"),r.style("left",n+"px"),"bottom"===t?i.style("top","100%"):i.style("top","-"+(u.size+3)+"px"),i.style("left",n+"px")),r.classed(o+"-tooltip-arrow",!0),r.classed(o+"-tooltip-arrow-"+e._arrowOrientation,!1),r.classed(o+"-tooltip-arrow-"+t,!0),i.classed(o+"-tooltip-background-arrow",!0),i.classed(o+"-tooltip-background-arrow-"+e._arrowOrientation,!1),i.classed(o+"-tooltip-background-arrow-"+t,!0)};n(11);function strategy_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t1&&void 0!==arguments[1]?arguments[1]:{},n=arguments[2],r=[],i=e.getData(),a=i.data,o=i.schema,u=t.formatters,c=t.separator,s=e.getFieldsConfig(),l=e.getFieldspace(),f=l.fieldsObj(),h=n.dimensionMeasureMap,d=n.axes,p=n.detailFields||[],y=o.filter(function(e){return e.type===ir.FieldType.DIMENSION}),g=o.filter(function(e){return e.type===ir.FieldType.MEASURE}),v=o.find(function(e){return-1!==p.indexOf(e.name)}),m=a.length,b=function getRowContent(e,n){var r=void 0,i=void 0,o=void 0,p=[],y=s[e].index,g=s[e].def.subtype===ir.DimensionSubtype.TEMPORAL?f[e].getMinDiff():0,v=u&&u[e]||oc(n,function(e){return e});if(null!==r){var b=n===ir.FieldType.MEASURE?a.map(function(e){return e[y]}):[].concat(strategy_toConsumableArray(new Set(a.map(function(e){return e[y]}))));b=b.filter(function(e){return""!==e});var _=d.color[0],x=d.shape[0],w=d.size[0],k=(_||x||w)&&m>1&&n!==ir.FieldType.MEASURE;b.forEach(function(n,u){var f=void 0,d=h[e];if(d&&d.length&&m>1){f=n;var y={value:""};k&&(y={type:"icon",color:_.getColor(n),shape:x.getShape(n),size:w.getSize(n)*t.iconScale}),d.length>1?(p.push([y,""+f]),d.forEach(function(e){o=s[e].index,r=a[u][o],i=oc("measure",l.fields[o]._ref.numberFormat())(r,g),p.push([{value:""+e+c,style:{"margin-left":t.margin+"px}"},className:t.classPrefix+"-tooltip-key"},{value:""+i,className:t.classPrefix+"-tooltip-value"}])})):(o=s[d[0]].index,r=a[u][o],i=oc("measure",l.fields[o]._ref.numberFormat())(r,g),p.push([y,{value:""+f+c,className:t.classPrefix+"-tooltip-key"},{value:""+i,className:t.classPrefix+"-tooltip-value"}]))}else f=e,i=v(r=n,g),p.push([{value:""+f+c,className:t.classPrefix+"-tooltip-key"},{value:""+i,className:t.classPrefix+"-tooltip-value"}])})}return p},_="keyValue";if(m>1&&v)r=function getTabularData(e,t,n,r){var i=[];return i.push(t.map(function(e){return e.name})),e.forEach(function(e){var a=[];t.forEach(function(t,i){var o=t.subtype===ir.DimensionSubtype.TEMPORAL?r[t.name]:0,u=t.type===ir.FieldType.MEASURE&&n.fields[i]._ref.numberFormat(),c=oc(t.subtype||t.type,u)(e[i],o);a.push(c)}),i.push(a)}),i}(a,o,l,n.timeDiffs),_="table";else{y.forEach(function(e){var t=e.subtype?e.subtype:e.type;r=[].concat(strategy_toConsumableArray(r),strategy_toConsumableArray(b(e.name,t)))});var x=[].concat(strategy_toConsumableArray(new(Function.prototype.bind.apply(Set,[null].concat(strategy_toConsumableArray(Object.values(h)))))));(m>1?g.filter(function(e){return-1===x.indexOf(e.name)}):g).forEach(function(e){var t=e.subtype?e.subtype:e.type;r=[].concat(strategy_toConsumableArray(r),strategy_toConsumableArray(b(e.name,t)))})}return{content:r,displayFormat:_}},cc={keyValue:function keyValue(e,t,n){return uc(e,t,n)}},sc="keyValue",lc=function(){function defineProperties(e,t){for(var n=0;n0?(this._config=na(this._config,arguments.length<=0?void 0:arguments[0]),this):this._config}},{key:"update",value:function update(e){return this._model=e.model,this._strategy=void 0!==e.strategy?e.strategy:sc,this._formatter=e.formatter,this}},{key:"context",value:function context(e){return this._context=e,this}},{key:"render",value:function render(e){var t=void 0,n=this._config,r=n.iconContainerSize,i=this._formatter,a=n.rowMargin,o=this._model;if(this._mount=e,(t=o instanceof Array?o:i instanceof Function?i(this._model,this._context):cc[this._strategy](this._model,this.config(),this._context))instanceof Function)e.html(t());else{var u=t,c="default";Di(t)&&(u=t.content,c=t.displayFormat);var s=Eo(e,"div",[c],n.classPrefix+"-tooltip-content",{},function(e){return e});if("table"===c){var l=Eo(s,"table",[1],n.classPrefix+"-tooltip-table"),f=Eo(l,"tbody",[1],n.classPrefix+"-tooltip-table-tbody"),h=Eo(f,"tr",u,n.classPrefix+"-tooltip-table-row");h.each(function(e,t){Ao(this).classed(n.classPrefix+"-tooltip-table-row-"+t,!0)}),Eo(h,"td",function(e){return e},n.classPrefix+"-tooltip-table-cell").each(function(e){Ao(this).html(e)})}else{var d=Eo(s,"div",u,n.classPrefix+"-tooltip-row"),p=Eo(d,"span",function(e){return e},n.classPrefix+"-tooltip-content");p.attr("class",n.classPrefix+"-tooltip-content"),Fo(d,{margin:a}),Fo(p,{display:"inline-block","margin-right":n.spacing+"px"}),p.each(function(e){var t=Ao(this);if(t.html(""),e instanceof Object)if("icon"===e.type){var n=Eo(t,"svg",[1]),i=Eo(n,"path",[1]),a=e.shape instanceof Function?e.shape:pa(e.shape);To(n,{x:0,y:0,width:r,height:r}),To(i,{d:a.size(e.size)(),transform:"translate("+r/2+", "+r/2+")"}),Fo(i,{fill:e.color}),Fo(n,{width:r+"px",height:r+"px"})}else t.html(e.value),e.className&&t.classed(e.className,!0),Fo(t,e.style);else t.html(e)})}}return this}},{key:"clear",value:function clear(){return this._model=null,this}}],[{key:"defaultConfig",value:function defaultConfig(){var e=tc.content;return e.classPrefix=tc.classPrefix,e}}]),Content}(),hc=function(){function defineProperties(e,t){for(var n=0;n0){var e=na({},this.constructor.defaultConfig());return this._config=na(e,arguments.length<=0?void 0:arguments[0]),this}return this._config}},{key:"addClass",value:function addClass(e){return this._tooltipContainer.classed(e,!0),this}},{key:"context",value:function context(){return arguments.length?(this._context=arguments.length<=0?void 0:arguments[0],this):this._context}},{key:"content",value:function content(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=this.config(),i=r.classPrefix,a=r.content.className,o=r.formatter,u=n.className||i+"-"+a+"-"+e,content=this._contents[e]=this._contents[e]||new fc,c=Eo(this._contentContainer,"div",[n.order],u);c.attr("class",i+"-"+a+" "+u),function reorderContainers(e,t){e.selectAll(t).sort(function(e,t){return e-t})}(this._contentContainer,"."+i+"-"+a);var s=r.content;return n.classPrefix=this._config.classPrefix,content.config(s),null===t?(content.clear(),c.remove(),delete this._contents[e]):(content.update({model:t,formatter:n.formatter||o}),content.context(this._context),content.render(c)),Object.keys(this._contents).length||this.hide(),this}},{key:"getContents",value:function getContents(){return Object.values(this._contents)}},{key:"position",value:function position(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(!Object.keys(this._contents).length)return this.hide(),this;this.show();var r=this._target,i=n.repositionArrow;if(r&&i){var a=this._tooltipContainer.node(),o=this._config,u=o.arrow.disabled,c=u?0:o.arrow.size,s=this._arrowOrientation,l="left"===s||"right"===s?t+a.offsetHeight-cr.y+r.height:e+a.offsetWidth-cr.x+r.width;if(!u)if(l){var f=void 0;this._tooltipArrow.style("display","none"),this._tooltipBackground.style("display","none"),this._tooltipConnectorContainer.style("display","block");var h=this._tooltipConnectorContainer.selectAll("path").data([1]),d=h.enter().append("path");"left"===s?f="M "+e+" "+(t+a.offsetHeight/2)+" L "+(r.x+r.width)+" "+(r.y+r.height/2):"right"===s?f="M "+(e+a.offsetWidth)+" "+(t+a.offsetHeight/2)+" L "+r.x+" "+(r.y+r.height/2):"bottom"===s&&(f="M "+(e+a.offsetWidth/2)+" "+(t+a.offsetHeight)+" L "+(r.x+r.width/2)+" "+r.y),d.merge(h).attr("d",f).style("display","block")}else{var p=nc(s,r,{x:e,y:t,boxHeight:a.offsetHeight,boxWidth:a.offsetWidth},this._config);rc(this,this._arrowOrientation,p),this._tooltipConnectorContainer.style("display","none")}}var y=this._offset||{x:0,y:0};return this._tooltipContainer.style("left",y.x+e+"px").style("top",y.y+t+"px"),this}},{key:"positionRelativeTo",value:function positionRelativeTo(e){var t=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=void 0,i=n.orientation;if(this.show(),!e)return this.hide(),this;var a=this._extent,o=this._tooltipContainer.node();this._tooltipContainer.style("top","0px").style("left","0px");var u=o.offsetWidth+2,c=o.offsetHeight+2,s=this._config,l=this._offset,f=s.arrow.disabled,h=f?0:s.arrow.size,d=void 0===n.draw||n.draw,p=e.y,y=e.x+e.width+l.x,g=a.width-y,v=e.x+l.x-a.x,m=p>c+h,b=g>=u+h,_=v>=u+h;return this._target=e,i||(i=m?"vertical":b||_?"horizontal":"vertical"),"horizontal"===i?r=function positionHorizontal(){var n=void 0,r=e.x+e.width,i=e.y;return b?(n="left",r+=h):_?(r=e.x-u,n="right",r-=h):(n="left",r+=h),e.height2&&void 0!==arguments[2]?arguments[2]:{},r=0,i=0,a=e.mergedEnter.model,o=this.firebolt.context,u=this.drawingContext();if(a.isEmpty()||null===t.criteria||!1===e.isSourceFieldPresent)return this.hide(n,null),this;var c=this._tooltips,s=this.config(),l={width:u.width,height:u.height},f=t.showInPosition,h=s.padding,d=[],p="fragmented"===s.mode,y=o.getSourceInfo(),g=y.fields,v=!!(!!g.x[0]&&g.x[0].type()===ir.FieldType.DIMENSION),m=t.position,b=[],_={},x=a.getData().uids;p?d.push.apply(d,function tooltip_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);tu.height:i>u.width)break;b.push({x:z.x,y:z.y,width:H.width,height:H.height,tooltip:R})}}for(var V in c)if(!_[V]){var U=c[V];U.content(t.action,null),U.getContents().length||(U.remove(),delete c[V])}return p&&(!function spaceOutBoxes(e,t,n){var r=void 0,i=void 0,a=void 0,o=void 0,u=void 0,c=e.length,s=function spaceOutIfOverlap(e,t,u){a=e.x,o=e.width,r=e.y,i=e.height;var c=r+i,s=a+o;n?(u?rt.y)&&(t.y=u?e.y-t.height-5:c+5):(u?at.x)&&(t.x=u?e.x-t.width-5:s+5)};for(e.sort(function(e,t){return n?e.y-t.y:e.x-t.x}),u=0,u=0;ut.height||e[u].x+e[u].width>t.width)for(n?e[u].y-=e[u].height+e[u].y-t.height:e[u].x-=e[u].width+e[u].x-t.width,u=c-1;u>0;u--)s(e[u],e[u-1],!0)}(b,l,v),b.forEach(function(e){return e.tooltip.position(e.x,e.y,{repositionArrow:!0})})),this}},{key:"hide",value:function hide(e){var t=this._tooltips;for(var n in t)if({}.hasOwnProperty.call(t,n)){var r=e.strategy||this._strategy;t[n].content(r,null),t[n].hide()}}}],[{key:"defaultConfig",value:function defaultConfig(){return{padding:5,offset:{x:0,y:0}}}},{key:"formalName",value:function formalName(){return"tooltip"}}]),Tooltip}(),vc=(n(15),function(){function defineProperties(e,t){for(var n=0;n2&&void 0!==arguments[2]?arguments[2]:{},r=this._strategies[n.strategy||this._strategy];return!1!==e.isSourceFieldPresent&&r(e,this,n.strategy||this._strategy),this}}],[{key:"formalName",value:function formalName(){return"highlighter"}},{key:"target",value:function target(){return"visual-unit"}}]),PlotHighlighter}(),wc=function(){function defineProperties(e,t){for(var n=0;n67.5&&v<=90||(r+=2*y),u=p,u=90===l?y:270===l?-y:0,o===Yc?(u=0===t&&c&&s===ds?u+u/2:u,Ao(this).attr("transform","translate("+(-u+f)+" \n "+(-r-f)+") rotate("+l+")")):(u=0===t&&c&&s===ds?u-u/2:u,Ao(this).attr("transform","translate("+(u-f)+" \n "+(r+f)+") rotate("+l+")"))}),t},Os=function changeTickOrientation(e,t,n){var r=t._smartTicks,i=t.config(),a=t.dependencies().labelManager,o=i.labels,u=i.orientation,c=o.rotation,s=o.smartTicks,l=e.selectAll(".tick text");if(l.selectAll("tspan").remove(),0===c||!1!==s||"top"!==u&&"bottom"!==u)if(0===c&&!1===s)l.attr("transform","");else{l.attr("y",0).attr("x",0).text(""),Eo(l,"tspan",function(e,t){return r[t].lines},"smart-text").attr("dy","0").style("opacity","0").transition().duration(1e3).attr("dy",function(e,t){return"bottom"===u||0!==t?r[t].oriTextHeight:-r[t].oriTextHeight*(r[t].lines.length-1)-n}).style("opacity",1).attr("x",0).text(function(e){return e})}else Ms(t,l,a,i);return l},Ts=function setFixedBaseline(e){e.config().fixedBaseline&&e.setFixedBaseline()},Fs=function setAxisNamePos(e,t,n){var r=n.axisNameHeight,i=n.yOffset,a=n.labelOffset,o=n.availableSpace;switch(t){case Xc:e.attr("transform","translate("+-(o.width-r)+","+(i+a)+")rotate(-90)");break;case Kc:e.attr("transform","translate("+(o.width-r)+","+(i+a)+")rotate(90)");break;case Yc:e.attr("transform","translate("+o.width/2+","+(-o.height+r)+")");break;case Gc:e.attr("transform","translate("+o.width/2+","+(o.height-r/2)+")")}return e};function cartesian_axis_helper_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);tt.length&&(t=p,r=e.smartTicks()?e.smartTicks()[s]:{},n=o[s]),d}),n=h.getOriSize(t),{largestLabel:t,largestLabelDim:n,axisTickLabels:i,allLabelLengths:o,smartTick:r}},js=function setOffset(e){var t=0,n=0,r=e.logicalSpace(),i=e.config(),a=i.orientation,o=i.xOffset,u=i.yOffset;a===Xc&&(t=void 0===o?r.width:o),a===Yc&&(n=void 0===u?r.height:u),e.config({xOffset:t,yOffset:n})},Is=function adjustRange(e,t,n,r){var i=function getAxisOffset(e,t,n){var r=Math.abs(t[1]-t[0])/(n[1]-n[0])*e,i=t[1]-t[0],a=i/r;return(i-i/(a+1)*a)/2}(e,t,n);return r===Yc||r===Gc?(t[0]+=i,t[1]-=i):(t[0]-=i,t[1]+=i),t},Ds=function registerChangeListeners(e){return e.store().model.next(["domain","range","mount","config"],function(){for(var t=arguments.length,n=Array(t),r=0;r0&&e.length*(t+this._minTickDistance.width)>i&&this.config({labels:{rotation:-90}})}return this}},{key:"adjustRange",value:function adjustRange(){return this}},{key:"getScaleValue",value:function getScaleValue(e){if(null!==e&&void 0!==e)return this.scale()(e)}},{key:"getTickSize",value:function getTickSize(){return this.axis().tickSize()}},{key:"getAxisDimensions",value:function getAxisDimensions(){return this.axisDimensions(function computeAxisDimensions(e){var t={},n=e.config(),r=n.name,i=n.labels,a=n.tickValues,o=(i.smartTicks?0:i.rotation)*Math.PI/180,u=e.dependencies().labelManager,c=Ns(e),s=c.largestLabelDim,l=c.axisTickLabels,f=c.smartTick,h=s.height,d=s.width;return 0===e.domain().length?null:(!1===e._rotationLock&&(e.setRotationConfig(a||l,s.width),e._rotationLock=!1),t=i.smartTicks?f:{width:Math.abs(h*Math.sin(o))+Math.abs(d*Math.cos(o)),height:Math.abs(d*Math.sin(o))+Math.abs(h*Math.cos(o))},u.setStyle(e._axisNameStyle),{tickSize:e.getTickSize(),tickLabelDim:t,axisLabelDim:u.getOriSize(r),largestLabelDim:s,axisTickLabels:l})}(this)),this.axisDimensions()}},{key:"getLogicalSpace",value:function getLogicalSpace(){return this.logicalSpace()||(this.logicalSpace(function calculateContinousSpace(e){e.range();var t=e.config(),n=e.getAxisDimensions(),r=t.orientation,i=t.show,a=t.showAxisName,o=n.axisLabelDim;if(!1===i)return{width:0,height:0};var u=o.width;if(r===Yc||r===Gc){var c=Ls(e,n,t),s=c.width,l=c.height;return{width:Math.max(s,u),height:l}}var f=Rs(e,n,t),h=f.width,d=f.height;return{width:h,height:Math.max(d,a?u:0)}}(this)),js(this),this.logicalSpace()),this.logicalSpace()}},{key:"invert",value:function invert(){for(var e=this,t=arguments.length,n=Array(t),r=0;ra[1];return"band"===r?(n=i.invertExtent(e,t),[i(o?n[n.length-1]:n[0]),i(o?n[0]:n[n.length-1])+i.bandwidth()]):[e,t]}},{key:"updateDomainBounds",value:function updateDomainBounds(e){var t=this.domain();return this.config().domain?t=this.config().domain:(0===t.length&&(t=e),e.length&&(t=[Math.min(t[0],e[0]),Math.max(t[1],e[1])])),this.domain(t)}},{key:"updateDomainCache",value:function updateDomainCache(e){!1===this._domainLock&&(this.domain([]),this._domainLock=!0);var t=[];return e&&e.forEach(function(e){void 0!==e&&null!==e&&t.push(e)}),this.updateDomainBounds(t)}},{key:"getMinTickDifference",value:function getMinTickDifference(){return this.domain()}},{key:"getFormattedTickValues",value:function getFormattedTickValues(e){return e}},{key:"setTickValues",value:function setTickValues(){var e=this.config().tickValues;return e?(e instanceof Array&&this.axis().tickValues(e),this):this}},{key:"getUnitWidth",value:function getUnitWidth(){return 0}},{key:"serialize",value:function serialize(){return{name:this.name,type:this.type,range:this.range(),config:this.config()}}},{key:"registerEvent",value:function registerEvent(e,t){this._eventList.push({name:e,action:t})}},{key:"on",value:function on(e,t){e=e||"update",this.registerEvent(e,t)}},{key:"render",value:function render(){return this.mount()&&function renderAxis(e){var t=e.config(),n=e.dependencies().labelManager,r=e.mount(),i=e.range(),a=e.axis(),o=e.scale(),u=e._axisNameStyle,c=e._tickLabelStyle,s=e.formatter,l=e.tickValues,f=t.orientation,h=t.name,d=t.labels,p=t.xOffset,y=t.yOffset,g=t.axisNamePadding,v=t.className,m=t.showAxisName,b=t.show,_=t.id,x=t.interpolator,w=t.classPrefix;if(b){var k=e.getTickSize(),C=Eo(Ao(r),"g",[e],""+v,{},function(e){return e.config().id});n.setStyle(c),"linear"===x&&e.setTickValues();var S=o.ticks||o.quantile||o.domain;s&&a.tickFormat(s(l||a.tickValues()||S()));var P=Math.abs(i[0]-i[1]),A=e.axisDimensions().tickLabelDim;C.attr("transform","translate("+p+","+y+")"),Ts(e),!1===d.smartTicks?C.transition().duration(1e3).call(a):C.call(a),C.selectAll(".tick").classed(w+"-ticks",!0),C.selectAll(".tick line").classed(w+"-tick-lines",!0),C.selectAll(".tick text").classed(w+"-ticks",!0).classed(w+"-ticks-"+_,!0),Os(C,e,k);var E=Eo(C,"text",[h],w+"-axis-name").attr("text-anchor","middle").classed(w+"-axis-name-"+_,!0).text(function(e){return e});E.classed(ys,!m);var M=P/2;n.setStyle(u);var O=n.getOriSize(h),T={labelProps:A,tickSize:k,axisNamePadding:g,axisNameHeight:O.height,axisNameWidth:O.width,yOffset:y,xOffset:p,labelOffset:M,availableSpace:e.availableSpace()};Fs(E,f,T)}}(this),this}},{key:"remove",value:function remove(){return this.store().unsubscribeAll(),Ao(this.mount()).remove(),this}},{key:"unsubscribe",value:function unsubscribe(){return this.store().unsubscribeAll(),this}},{key:"isReverse",value:function isReverse(){var e=this.range();return e[0]>e[1]}},{key:"getPixelToValueRatio",value:function getPixelToValueRatio(){var e=this.scale(),t=e.range(),n=e.domain();return Math.abs(t[1]-t[0])/(n[1]-n[0])}},{key:"id",get:function get(){return this._id}}],[{key:"defaultConfig",value:function defaultConfig(){return Es}}]),SimpleAxis}(),Vs=function(){function defineProperties(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:0,t=arguments[1],n=arguments[2],r=arguments[3],i=n.left,a=n.right,o=n.top,u=n.bottom,c=this.config(),s=c.orientation,l=c.fixedBaseline,f=this.getAxisDimensions().tickLabelDim;if(this.availableSpace({width:e,height:t}),s===Yc||s===Gc){var h=f.width;this.range([(l?0:h/2)+i,e-a-h/2]);var d=this.getLogicalSpace().height;r&&this.config({yOffset:Math.max(d,t)})}else{var p=f.height;this.range([t-u-(l?1:p/2),p/2+o]);var y=this.getLogicalSpace().width;r&&this.config({xOffset:Math.max(y,e)})}return this}},{key:"setTickValues",value:function setTickValues(){var e=this.config().tickValues,t=this.axis();return e?(e instanceof Array&&this.axis().tickValues(e),this):(t.tickValues(this.getTickValues()),this)}},{key:"getTickValues",value:function getTickValues(){var e=this.config(),t=e.orientation,n=e.tickValues,r=this.range(),i=this.axis(),a=Math.abs(r[0]-r[1]),o=Ns(this).largestLabelDim;return n?i.scale().ticks(n):function getNumberOfTicks(e,t,n,r){var i=n.scale().ticks(),a=r.config().numberOfTicks,o=i.length,u=o;return o*(1.5*t)>e&&(u=Math.floor(e/(1.5*t))),u=Math.min(a,Math.max(1,u)),n.scale().ticks(u)}(a,o[t===Gc||t===Yc?"width":"height"],i,this)}},{key:"getMinTickDifference",value:function getMinTickDifference(){return xa(this.config().tickValues)}},{key:"setFixedBaseline",value:function setFixedBaseline(e){var t=this.config(),n=t.orientation,r=t.labels.rotation,i=this.axis(),a=this._axisDimensions.largestLabelDim,o=a.width,u=a.height;return i.tickTransform(function(e,t){return 0!==t||n!==Xc&&n!==Kc?0!==t||n!==Yc&&n!==Gc||0!==r?"":"translate("+o/2+"px, 0px) rotate("+r+"deg)":"translate(0, -"+u/3+"px)"}),e}}],[{key:"type",value:function type(){return Qc}}]),ContinousAxis}(),Zs=function(){function defineProperties(e,t){for(var n=0;n0&&e.length*(t+this._minTickDistance.width)>a&&(a&&o0&&e.length*t>i&&(i&&1.25*a1?t.range:[al].concat(props_toConsumableArray(t.range)));var r=na(n,e.config()),i=na(r,t);return i.range instanceof Array&&(i.range=i.range.map(function(e,t){return sl(e,il[t])}),i.stops=t.stops||i.range.length),i.value=sl(i.value,i.value),i}},domain:{},scale:{},uniqueValues:{}};function color_strategy_defineProperty(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function color_strategy_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);tMath.min(t.length,18))for(var r=aa()(function hslInterpolator(){return Ne}(),t.map(function(e){return ul(e)})),i=0;i0&&void 0!==arguments[0]?arguments[0]:[];if(e.length){var t=this.scale(),n=t.range?t.range():null,r=this._colorStrategy.domainRange()(e,this.config().stops,n);this.domain(r.domain),r.range&&this.scale().range(r.range),this.uniqueValues(r.uniqueVals),this.scale().domain(r.scaleDomain||this.domain())}return this}},{key:"serialize",value:function serialize(){return{type:this.constructor.type(),scale:this.scale(),domain:this.domain(),config:this.config()}}},{key:"transformColor",value:function transformColor(e,t){var n=360*e[0],r=100*e[1],i=100*e[2],a=e[3]||1,o=n+t[0],u=r+t[1],c=i+t[2],s=a+t[3]||0;return{color:"hsla("+o+","+u+"%,"+c+"%,"+s+")",hsla:[o/360,u/100,c/100,s]}}},{key:"id",value:function id(){return this._id}}],[{key:"defaultConfig",value:function defaultConfig(){return ol}},{key:"type",value:function type(){return"color"}}]),ColorAxis}(),Sl={value:36,range:[36,1e3]};function size_strategy_defineProperty(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function size_strategy_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t0&&void 0!==arguments[0]?arguments[0]:0,t=this.config().value,n=this.scale(),r=this.domain()||[1,1];return n&&r[0]!==r[1]?this._sizeStrategy.range(e,n,this.domain(),this.uniqueValues()):t}},{key:"updateDomain",value:function updateDomain(e){if(e){var t=(0,this._sizeStrategy.domain)(e,this.config().intervals);this.domain(t.domain),this.uniqueValues(t.uniqueVals),this.scale().domain(t.scaleDomain||this.domain())}return this}},{key:"serialize",value:function serialize(){return{type:this.constructor.type(),scale:this.scale(),domain:this.domain(),range:this.range(),config:this.config()}}},{key:"id",value:function id(){return this._id}}],[{key:"defaultConfig",value:function defaultConfig(){return Sl}},{key:"type",value:function type(){return"size"}}]),SizeAxis}(),Ol={generator:null,value:"circle",range:["circle","diamond","star","cross","square","wye","triangle"]},Tl={config:{},domain:{},scale:{},uniqueValues:{},generator:{}},Fl=function(){function defineProperties(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:[];return e.length&&(this.uniqueValues(e),this.domain(e),this.scale().domain(e),this.config().generator&&(this._generatedShapes=function shapeGenerator(e,t){var n={};return e.forEach(function(e){n[e]=t(e)}),n}(e,this.config().generator))),this}},{key:"serialize",value:function serialize(){return{type:this.constructor.type(),scale:this.scale(),domain:this.domain(),range:this.config().range,config:this.config()}}},{key:"id",value:function id(){return this._id}}],[{key:"defaultConfig",value:function defaultConfig(){return Ol}},{key:"type",value:function type(){return"shape"}}]),ShapeAxis}();function data_type_scale_map_defineProperty(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var Il="measure",Dl="temporal",Ll=(data_type_scale_map_defineProperty(Nl={},"dimension",Zc),data_type_scale_map_defineProperty(Nl,Il,Qc),data_type_scale_map_defineProperty(Nl,Dl,Jc),function(e,t,n){var r=n.groupBy instanceof Array?n.groupBy:[n.groupBy],i=r.map(function(t){return e.findIndex(function(e){return e.name===t})});if(void 0!==i.find(function(e){return-1===e}))throw new Error("Groupby field "+r+" not found in schema");return function nestCollection(e){var t=T();return e.keys.forEach(function(e){return t.key(function(t){return t[e]})}),t.entries(e.data)}({keys:i,data:t})});var Rl;function transform_factory_defineProperty(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var Bl=(transform_factory_defineProperty(Rl={},"identity",function identityTransform(e,t,n){return t}),transform_factory_defineProperty(Rl,"group",Ll),transform_factory_defineProperty(Rl,"stack",function(e,t,n){var r=n.uniqueField,i=n.value,a=n.groupBy,o=n.sort||"descending",u=function normalizeData(e,t,n,r,i){var a=Ll(t,e,{groupBy:r}),o=t.findIndex(function(e){return e.name===r}),u=t.findIndex(function(e){return e.name===n}),c=t.findIndex(function(e){return e.name===i}),s=e.map(function(e){return e[c]}).filter(function(e,t,n){return n.indexOf(e)===t}).sort(),l=t.reduce(function(e,t,n){return e[n]=t.name,e},{});return{data:a.map(function(e){var t={},n=e.values.reduce(function(e,n){return e=n.reduce(function(e,r,i){return i===c?(e[r]=n[u],t[r]=n):i!==u&&(e[l[i]]=r),e},e)},{});return n._tuple=t,s.forEach(function(t){if(void 0===n[t]){n[t]=0;var r=new Array(e.values[0].length);r[o]=e.key,r[c]=t,n._tuple[t]=r}}),n}),keys:s}}(t,e,i,r,a),c=u.keys,s={},l=n.orderBy,f=e.findIndex(function(e){return e.name===l}),h=e.findIndex(function(e){return e.name===a});-1!==f&&(c.forEach(function(e){var n=t.find(function(t){return t[h]===e});s[e]=n[f]}),u.keys.sort(function(e,t){return s[e].localeCompare(s[t])}));var d=va({keys:u.keys,offset:n.offset||"diverging",order:o,data:u.data});return d.forEach(function(e){e.forEach(function(t){t.data=t.data._tuple[e.key]})}),d}),Rl);var zl=function transformFactory(e){var t=Bl[e];if("function"!=typeof t)throw new Error("Invalid transform type supplied.");return t},Hl=function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function sliceIterator(e,t){var n=[],r=!0,i=!1,a=void 0;try{for(var o,u=e[Symbol.iterator]();!(r=(o=u.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){i=!0,a=e}finally{try{!r&&u.return&&u.return()}finally{if(i)throw a}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}();var Vl,Ul=f.BAND,Wl=function getLayerColor(e,t){var n=e.datum,r=e.index,i=t.colorEncoding,a=t.colorAxis,o=t.colorFieldIndex,u="",c="";return i&&i.value instanceof Function?(c=i.value(n,r),u=i.value(n,r)):(u=a.getRawColor(n._data[o]),c=a.getHslString(u)),{color:c,rawColor:u}},ql=function transfromColor(e,t,n,r){t.meta.stateColor[n]=t.meta.stateColor[n]||t.meta.originalColor;var i=e.transformColor(t.meta.stateColor[n],r);return t.meta.stateColor[n]=i.hsla,i},Gl=function applyInteractionStyle(e,t,n,r){var i=e.getPlotElementsFromSet(t),a=e.axes().color,o=r.apply,u=r.interactionType;n.forEach(function(e){var t=e.type;i.style(t,function(n){var r=n.meta,i=r.colorTransform,c=r.stateColor,s=r.originalColor;if(i[u]=i[u]||{},o&&!i[u][t])return i[u][t]=e.intensity,ql(a,n,t,e.intensity).color;if(!o&&i[u][t])return i[u][t]=null,ql(a,n,t,e.intensity.map(function(e){return-e})).color;var l=c[t]?c[t]:s,f=Hl(l,4);return"hsla("+360*f[0]+","+100*f[1]+"%,"+100*f[2]+"%, "+(f[3]||1)+")"})})},Yl=function getAxesScales(e){var t=[Bc.X,Bc.Y].map(function(t){return e[t]}),n=Hl(t,2),r=n[0],i=n[1],a=[r,i].map(function(e){return e&&e.scale()}),o=Hl(a,2);return{xAxis:r,yAxis:i,xScale:o[0],yScale:o[1]}},Xl=function getIndividualClassName(e,t,n,r){var i=r.config().individualClassName,a="";return i instanceof Function&&(a=i(e,t,n,r)),a},Kl=function attachDataToVoronoi(e,t){var n;e.data((n=[]).concat.apply(n,function helpers_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t=e[0]?(i=d=e[1],h=f=e[0]):(i=d=e[0],h=f=e[1]),(t=a===ir.FieldType.MEASURE?{x:h,x0:d,y:n[u],y0:n[u]}:{x:n[o],x0:n[o],y:i,y0:f})._data=n,t._id=n[l]}else(t={x:e[o],y:e[u],x0:e[c],y0:e[s]})._data=e,t._id=e[l];return t})}).filter(function(e){return e.length})}(e,t,this.encodingFieldsInf(),this.transformType())}},{key:"getNearestPoint",value:function getNearestPoint(){return null}},{key:"applyInteractionStyle",value:function applyInteractionStyle(e,t,n){var r=(this.config().interaction||{})[e];r&&Gl(this,t,r,{apply:n,interactionType:e})}},{key:"transformType",value:function transformType(){return arguments.length?(this._transformType=arguments.length<=0?void 0:arguments[0],this):this._transformType}},{key:"render",value:function render(){return this}},{key:"elemType",value:function elemType(){return"g"}},{key:"remove",value:function remove(){return this.store().unsubscribeAll(),Ao(this.mount()).remove(),this}},{key:"cachePoint",value:function cachePoint(e,t){if(null===e)return this;var n=this._pointMap;return!n[e]&&(n[e]=[]),n[e].push(t),this}},{key:"dataProps",value:function dataProps(){return arguments.length?(this._dataProps=arguments.length<=0?void 0:arguments[0],this):this._dataProps}},{key:"getIdentifiersFromData",value:function getIdentifiersFromData(e){var t=this.data().getData().schema,n=this.data().getFieldsConfig(),r=[[],[]],i=this.encodingFieldsInf(),a=i.xFieldType,o=i.yFieldType,u=i.xField,c=i.yField,s=[a,o].map(function(e){return e===ir.FieldType.MEASURE}),l=tf(s,2),f=l[0],h=l[1];if(t.forEach(function(t,i){var a=t.name;n[a].def.type===ir.FieldType.DIMENSION&&(r[0].push(a),r[1].push(e[i]))}),f&&h){var d,p,y=n[u].index,g=n[c].index;(d=r[0]).push.apply(d,[u,c]),(p=r[1]).push.apply(p,[e[y],e[g]])}return r}},{key:"getPlotSpan",value:function getPlotSpan(){return{x:0,y:0}}},{key:"getPlotPadding",value:function getPlotPadding(){return{x:0,y:0}}},{key:"getPointsFromIdentifiers",value:function getPointsFromIdentifiers(e){var t,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=n.getAllAttrs,i=n.getBBox;if(!this.data())return[];var a=void 0,o=void 0;if(e instanceof ar.a){var u=e.getData();a=u.schema.map(function(e){return e.name}),o=u.data}else a=e[0],o=e.slice(1,e.length);var c=this._points,s=this.data().getFieldsConfig(),l=(t=[]).concat.apply(t,function base_layer_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t2&&void 0!==arguments[2]?arguments[2]:{},r=Ao(n.event.target).data()[0];if(Di(r)){var i=r.datum,a=i.data,o=i.uid;return{id:this.getIdentifiersFromData(a,o),layerId:this.id()}}return null}},{key:"getPlotElementsFromSet",value:function getPlotElementsFromSet(e){return Ao(this.mount()).selectAll(this.elemType()).filter(function(t){return-1!==e.indexOf(t.datum.uid)})}},{key:"render",value:function render(e){var t=this,n=this.measurement(),r=n.height,i=n.width,a=this.config(),o=a.classPrefix,u=a.defClassName,c=a.minOuterRadius,s=a.innerRadius,l=a.outerRadius,f=a.cornerRadius,h=a.padAngle,d=a.padRadius,p=a.padding,y=a.transition,g=a.innerRadiusFixer,v=this.axes().size,m=this._store,b=m.get("transformedData"),_=r-p.top-p.bottom,x=i-p.left-p.right,w=Gi(u,this.id(),o),k=function getRadiusRange(e,t,n){var r=n.minOuterRadius,i=n.innerRadius,a=n.outerRadius,o=n.innerRadiusFixer;return[Math.max(i+o||0,r),a||Math.min(t,e)/2]}(x,_,{minOuterRadius:c,innerRadius:s,outerRadius:l,innerRadiusFixer:g}),C=this.axes().color,S=l||Math.min(_,x)/2,P=m.get("domain").radius,A=function rangeValueGetter(e){return function getRangeValue(e,t,n,r,i){var a=1,o=e.outerRadiusValue,u=e.sizeVal,c=i.domain(),s=i.getSize(u)/(c?i.range()[1]:i.config().value);return a*=(t[1]-t[0])/(n[1]-n[0]),(t[0]+(o-n[0])*a||r)*s}(e,k,P,S,v)},E=bf().innerRadius(s?Math.min(_/2,x/2,s):0).cornerRadius(f).padAngle(h).padRadius(d);this._chartWidth=x,this._chartHeight=_;var M=Eo(Ao(e),"g",[1],w[0]+"-group").classed(w[1]+"-group",!0).attr("transform","translate("+x/2+","+_/2+")"),O=[],T=0;return Eo(M,"g",b,""+w[0],{update:function tween(e){Eo(e,"path",function(e,t){return[{datum:e,index:t,arcFn:E,meta:{originalColor:C.getRawColor(e.colorVal),stateColor:{},colorTransform:{}}}]},w[0]+"-path").style("fill",function(e){return C.getColor(e.datum.colorVal)}).transition().duration(y.duration).attrTween("d",function(){for(var e=arguments.length,t=Array(e),n=0;n0&&e.forEach(function(e){var i=e[0].datum.startAngle,a=e[e.length-1].datum.endAngle,o=2*Math.PI*i/(2*Math.PI+i-a);e.forEach(function(e){var i=e.elem,a=e.datum;i.each(function(){var e=Ao(this);e.selectAll("path").transition().duration(t.duration).attrTween("d",function(){return function(e){var t=n(a);return a.outerRadius=t,r(ra()(a,{startAngle:o,endAngle:o,outerRadius:t})(e))}}).remove(),e.remove()})})})}(O,y,A,E),this}},{key:"getPointsFromIdentifiers",value:function getPointsFromIdentifiers(e){if(!this.data())return[];var t=e[0],n=e.slice(1,e.length),r=Ao(this.mount()).selectAll("path").data(),i=this.data().getFieldsConfig(),a=r.filter(function(e){var r=e.datum.data,a=e.datum.uid;return t.every(function(e,t){return e in i&&i[e].def.type===ir.FieldType.DIMENSION?-1!==n.findIndex(function(n){return n[t]===r[i[e].index]}):e!==nr.ROW_ID||-1!==n.findIndex(function(e){return e[t]===a})})})[0];if(a){var o=a.arcFn.centroid(a.datum);return[{x:o[0]+this._chartWidth/2,y:o[1]+this._chartHeight/2,width:2,height:2}]}return[]}}],[{key:"defaultConfig",value:function defaultConfig(){return yf}},{key:"formalName",value:function formalName(){return"arc"}}]),ArcLayer}(),xf=function drawText(e,t,n,r){var i=Ao(e).selectAll("g").data(t),a=i.enter().append("g").each(function(e){To(this,e.enter)}).merge(i),o=Lo(Ao(e),n.className),u=parseInt(o.fontSize,10);return r.setStyle(o),a.each(function(e){var t,n=Ao(this),i=e.update,a=e.text,o=e.color,c=e.textanchor,s=e.style,l=e.background;if(t=l.value){var f=l.padding,h=void 0,d=r.getOriSize(e.text),p=d.width,y=d.height,g=Eo(n,"rect",[1]);h="end"===c?p:"start"===c?0:p/2,To(g.node(),{x:i.x-h-f/2,y:i.y-u-f/2,width:p+f,height:y+f}),l&&Fo(g,{background:t})}var v=Eo(n,"text",function(e){return[e]}).text(a),m=v.node();s&&Fo(m,s),o&&Fo(m,{fill:o}),e.className&&v.classed(e.className,!0),To(m,i),v.attr("text-anchor",c)}),i.exit().remove(),i},wf={defClassName:"layer-text",classPrefix:"muze",className:"",transform:{type:"identity"},interaction:{highlight:[{type:"fill",intensity:[0,0,-15,0]}],fade:[{type:"fill",intensity:[0,0,15,0]}],focus:[{type:"fill",intensity:[0,0,15,0]}]},transition:{effect:"cubic",duration:1e3},encoding:{color:{},text:{value:"",background:{padding:10}}},states:{highlight:{className:"muze-layer-text-highlight"},fadeout:{className:"muze-layer-text-fadeout"},selected:{className:"muze-layer-text-selected"}}},kf=(n(27),function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function sliceIterator(e,t){var n=[],r=!0,i=!1,a=void 0;try{for(var o,u=e[Symbol.iterator]();!(r=(o=u.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){i=!0,a=e}finally{try{!r&&u.return&&u.return()}finally{if(i)throw a}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}()),Cf=function(){function defineProperties(e,t){for(var n=0;n4)}(r)?r:pa(r).size(i)(a),Eo(n,"path",function(e){return[e]}).attr("d",s)}else e.shape="circle",createShape(e,t)}(e,this)}),(t=c?t:t.transition().duration(c?0:i.duration)).attr("transform",function(e){return"translate("+e.update.x+","+e.update.y+")"}).each(function(e){var t=e.style,n=Ao(this);Xi(t,function(e){return n.style(e,t[e])}),n.attr("class",""+a),n.classed(e.className,!0)});var h=l.exit();c?h.remove():h.transition().ease(Wi[u]).duration(o).on("end",function(){Ao(this).remove()}).style("fill-opacity",0).style("stroke-opacity",0)},Af={defClassName:"layer-point",className:"",classPrefix:"muze",defColorStyle:"stroke",interaction:{highlight:[{type:"fill",intensity:[0,0,-20,0]}],fade:[{type:"fill",intensity:[0,0,20,0]}],focus:[{type:"fill",intensity:[0,0,20,0]}]},innerPadding:.1,nearestPointThreshold:10,transform:{type:"identity"},transition:{effect:"cubic",duration:1e3},encoding:{size:{value:30},color:{},shape:{value:"circle"},x:{},y:{},strokeOpacity:{value:.5},fillOpacity:{value:.5}},shapes:["circle","cross","diamond","square","star","wye","triangle"],sizes:[20,30,40,50,60,70]},Ef=(n(29),function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function sliceIterator(e,t){var n=[],r=!0,i=!1,a=void 0;try{for(var o,u=e[Symbol.iterator]();!(r=(o=u.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){i=!0,a=e}finally{try{!r&&u.return&&u.return()}finally{if(i)throw a}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}()),Mf=function(){function defineProperties(e,t){for(var n=0;n3&&void 0!==arguments[3]?arguments[3]:{},a=[],o=t.size,u=t.shape,c=t.color,s=t.x,l=t.y,f=o.field,h=o.value,d=u.field,p=s.field,y=l.field,g=n.size,v=n.shape,m=this.data().getFieldsConfig(),b=m[p]&&m[p].def.type===ir.FieldType.DIMENSION,_=m[y]&&m[y].def.type===ir.FieldType.DIMENSION,x=b?Bc.X:_?Bc.Y:null,w=c&&c.field,k=m[w]&&m[w].index,C=this._store.get("measurement"),S=m[d]&&m[d].index,P=m[f]&&m[f].index,A=n.color,E=i.offset,M=E.x,O=E.y,T=function _loop(i,o){var u=e[i],s=u._data,l=h instanceof Function?h(u,i):g.getSize(s[P]),f=v.getShape(s[S]),d=[Bc.X,Bc.Y].map(function(e){var r=null===u[e]?void 0:u[e],i=e===Bc.X?C.width:C.height;return t[e].field?n[e].getScaleValue(r):i/2}),p=Ef(d,2),y=p[0],m=p[1];y+=M,m+=O;var b=Wl({datum:u,index:i},{colorEncoding:c,colorAxis:A,colorFieldIndex:k}),_=b.color,w=b.rawColor,E={fill:_,stroke:_};if(!isNaN(y)&&!isNaN(m)){var T={enter:{x:y,y:m},update:{x:y,y:m},shape:f,size:Math.abs(l),meta:{stateColor:{},originalColor:w,colorTransform:{}},style:E,_data:s,_id:u._id,source:u._data,rowId:u._id};T.className=Xl(u,i,e,r),a.push(T),r.cachePoint(u[x],T)}},F=0,N=e.length;F=0?C:k))):(p=c===Nc||r[e]>=0?C:k,y=Math.abs(p-(c===Nc?S:r[e]>=0?k:C))),d=k}else p=0,y=f[i];return{enterSpace:g,enter:d,pos:p,space:y}}),jf=function resolveDimensions(e,t,n){var r={xAxis:n.x,yAxis:n.y},i=Nf("x",r,t,e),a=i.enterSpace,o=i.enter,u=i.pos,c=i.space,s=Nf("y",r,t,e),l=s.enterSpace;return{enter:{x:o,y:s.enter,width:a,height:l},update:{x:u,y:s.pos,width:c,height:s.space}}},If=function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function sliceIterator(e,t){var n=[],r=!0,i=!1,a=void 0;try{for(var o,u=e[Symbol.iterator]();!(r=(o=u.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){i=!0,a=e}finally{try{!r&&u.return&&u.return()}finally{if(i)throw a}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),Df=function(){function defineProperties(e,t){for(var n=0;n=k.x&&e<=k.width+k.x&&t>=k.y&&t<=k.height+k.y){c=w;break}c=null}var C=c&&c._data;return C&&(u=this.getIdentifiersFromData(C,c._id)),c?{dimensions:[c.update],id:u,layerId:this.id()}:c}},{key:"getPlotSpan",value:function getPlotSpan(){return this._plotSpan}}],[{key:"formalName",value:function formalName(){return"bar"}},{key:"defaultConfig",value:function defaultConfig(){return Ff}},{key:"defaultPolicy",value:function defaultPolicy(e,t){var n=rf.defaultPolicy(e,t),r=n.encoding.color.field,i=n.transform;return r&&(i.groupBy=r),n}}]),BarLayer}(),zf={defClassName:"layer-tick",className:"",classPrefix:"muze",interaction:{highlight:[{type:"stroke",intensity:[0,0,-15,0]}],fade:[{type:"stroke",intensity:[0,0,15,0]}],focus:[{type:"stroke",intensity:[0,0,15,0]}]},innerPadding:.1,transform:{type:"identity"},transition:{effect:"cubic",duration:1e3},encoding:{color:{},x:{},y:{},x0:{},y0:{},strokeOpacity:{value:.5},fillOpacity:{value:.5}},states:{highlight:{className:"muze-layer-tick-highlight"},fadeout:{className:"muze-layer-tick-fadeout"},selected:{className:"muze-layer-tick-selected"}}},Hf=function(e){var t=e.points,n=e.container,r=e.keyFn,i=e.className,a=Ao(n),o=a.selectAll("path").data(t,r),u=o.enter().append("path");return a.attr("class",i||""),u.each(function(e){var t=Ao(this),n=e.enter||{};Object.entries(n).forEach(function(e){return!isNaN(e[1])&&t.attr(e[0],e[1])})}),o.exit().remove(),o.merge(u).each(function(e){var t=Ao(this),n=e.update,r=e.style||{},i=void 0!==n.x0?n.x0:n.x,a=void 0!==n.y0?n.y0:n.y,o="M "+n.x+" "+n.y+" L "+i+" "+a;e.className&&t.classed(e.className,!0),t.attr("d",o),Object.entries(r).forEach(function(e){return t.style(e[0],e[1])})})},Vf=(n(33),function(){function defineProperties(e,t){for(var n=0;n3&&void 0!==arguments[3]?arguments[3]:{},i=[],a=Yl(n),o=a.xAxis,u=a.yAxis,c=this.data().getFieldsConfig(),s=this.encodingFieldsInf(),l=s.xField,f=s.yField,h=s.x0Field,d=s.y0Field,p=s.xFieldType,y=s.yFieldType,g=p===ir.FieldType.DIMENSION,v=y===ir.FieldType.DIMENSION,m=g?Bc.X:v?Bc.Y:null,b=t.color,_=b&&b.field,x=c[_]&&c[_].index,w=this._store.get("measurement"),k=n.color,C=r.offset,S=C.x,P=C.y,A=r.span,E=A.x,M=A.y,O=0,T=e.length;O0&&(n[0]=[].concat(field_sanitizer_toConsumableArray(n[0]),field_sanitizer_toConsumableArray(n[1])),n[1]=[]),{fields:n.map(function(e,t){return 1===t?r[t].concat(n[t]):n[t].concat(r[t])}),dimensions:[].concat(field_sanitizer_toConsumableArray(n[0]),field_sanitizer_toConsumableArray(n[1])),measures:[].concat(field_sanitizer_toConsumableArray(r[0]),field_sanitizer_toConsumableArray(r[1])),temporal:[].concat(field_sanitizer_toConsumableArray(i[0]),field_sanitizer_toConsumableArray(i[1])),categorical:[].concat(field_sanitizer_toConsumableArray(a[0]),field_sanitizer_toConsumableArray(a[1]))}}(i,n)}),r=Sh(n,2),i=r[0],a=r[1],o=i.fields,u=i.dimensions,c=i.measures,s=i.temporal,l=i.categorical,f=a.fields,h=a.dimensions,d=a.measures;return{rows:o,rowDimensions:u,rowMeasures:c,rowTemporalFields:s,rowCategoricalFields:l,columns:f,columnTemporalFields:a.temporal,columnCategoricalFields:a.categorical,columnDimensions:h,columnMeasures:d}},Eh=function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function sliceIterator(e,t){var n=[],r=!0,i=!1,a=void 0;try{for(var o,u=e[Symbol.iterator]();!(r=(o=u.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){i=!0,a=e}finally{try{!r&&u.return&&u.return()}finally{if(i)throw a}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),Mh=function(){function defineProperties(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:{},t=arguments[1],n=Jh(th,t.rows,e),r=Eh(n,2),i=r[0],a=r[1],o=Jh("column",t.columns,e),u=Eh(o,2),c=u[0],s=u[1];return this.axisFrom({row:a,column:s}),this.headerFrom({row:i,column:c}),this}}]),VisualEncoder}(),Th={linear:Qs,band:Js,temporal:nl,size:Ml,color:Cl,shape:jl},Fh={dimension:f.BAND,categorical:f.BAND,measure:f.LINEAR,temporal:f.TIME},Nh=function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function sliceIterator(e,t){var n=[],r=!0,i=!1,a=void 0;try{for(var o,u=e[Symbol.iterator]();!(r=(o=u.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){i=!0,a=e}finally{try{!r&&u.return&&u.return()}finally{if(i)throw a}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}();function encoder_helper_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t1?e.position="both":e.position=n.axisFrom()[a],r[o]=Ih(o,s[i],e,o===$f?l:f)}),r}},{key:"getFacetsAndProjections",value:function getFacetsAndProjections(e,t){for(var n=[],r=[],i=0,a=[],o=[],u=e[0],c=e[1],s=u.length,l=c.length,f=this.axisFrom(),h=0;hi)for(var g=i;g-1&&(r=[[b,b]],a.splice(_,1)),o.splice(0,1)}else{var x=a.length-1,w=a[x];r=[[w]];var k=Dh(o,w);k>-1&&(r=[[w,w]],o.splice(k,1)),a.splice(x,1)}return{facets:n=(n=[].concat(a,o)).filter(function(e,t,n){return t===n.findIndex(function(t){return t.toString()===e.toString()})}),projections:r}}},{key:"fieldSanitizer",value:function fieldSanitizer(e,t){return function get(e,t,n){null===e&&(e=Function.prototype);var r=Object.getOwnPropertyDescriptor(e,t);if(void 0===r){var i=Object.getPrototypeOf(e);return null===i?void 0:get(i,t,n)}if("value"in r)return r.value;var a=r.get;return void 0!==a?a.call(n):void 0}(CartesianEncoder.prototype.__proto__||Object.getPrototypeOf(CartesianEncoder.prototype),"fieldSanitizer",this).call(this,e,t)}},{key:"getRetinalFieldsDomain",value:function getRetinalFieldsDomain(e,t){var n=e.groupedModel,r={};for(var i in t)if({}.hasOwnProperty.call(t,i)){var a=t[i],o=a.field;if(!a.domain&&o){var u=Zh(n,o);r[o]=u}}return r}},{key:"serializeLayerConfig",value:function serializeLayerConfig(e){var t=[];return e.length&&e.forEach(function(e,n){var r=Gf.sanitizeLayerConfig(e);r.order=n,t.push(r)}),t}},{key:"getLayerConfig",value:function getLayerConfig(e,t){var n=[],r=e.columnFields,i=e.rowFields;return r.forEach(function(e){var r=e.toString();i.forEach(function(i){var a=[],o=i.toString(),u={x:{field:r},y:{field:o}},c=i.subtype(),s=function getDefaultMark(e,t){return"categorical"===e||"categorical"===t?"bar":"temporal"===e||"temporal"===t?"line":"point"}(e.subtype(),c),l=[{mark:s,def:{mark:s,encoding:u}}],f=function getLayerConfFromFields(e,t,n){return n.filter(function(n){var r,i,a,o=n instanceof Array?n:[n],u=(r=[]).concat.apply(r,encoder_helper_toConsumableArray(o.map(function(e){return e.encoding}).filter(function(e){return void 0!==e})));if(!u.length)return!0;var c=(i=[]).concat.apply(i,encoder_helper_toConsumableArray(u.map(function(e){return[e.x&&e.x.field,e.x0&&e.x0.field]}))).filter(function(e){return void 0!==e&&null!==e}),s=(a=[]).concat.apply(a,encoder_helper_toConsumableArray(u.map(function(e){return[e.y&&e.y.field,e.y0&&e.y0.field]}))).filter(function(e){return void 0!==e&&null!==e});if(!c.length&&!s.length)return!0;var l=!!c.length&&c.every(function(t){return-1!==e.indexOf(t)}),f=!!s.length&&s.every(function(e){return-1!==t.indexOf(e)});return c.length&&s.length?l&&f:l||f})}(e.getMembers(),i.getMembers(),t||[]);a=f.length?f.map(function(e){var t=na(na({},l[0].def),e),n=Gf.getSerializedConf(t.mark,t);return{mark:t.mark,order:t.order,def:n}}):l,n.push.apply(n,function cartesian_encoder_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);tt)for(var h=t;h0&&(e=na(e,t[0])),n.push(e)}),0===n.length&&(n=t),this.layers(n),n}},{key:"serializeLayerConfig",value:function serializeLayerConfig(e){var t=[];return e.length&&e.forEach(function(e){var n=Gf.getSerializedConf(e.mark,e);t.push({mark:e.mark,def:n})}),t}}],[{key:"type",value:function type(){return"polar"}}]),PolarEncoder}(),Hh=function(){function defineProperties(e,t){for(var n=0;n1&&void 0!==arguments[1]?arguments[1]:{},n=e.axisType,r=e.fieldsConfig,i=t.field,a=[],o=Th[n];return t.type=t.type?t.type:Qh(r,i||null),a.push(new o(t)),a}({axisType:e,fieldsConfig:t},n[e])}),r}},{key:"getLayerConfig",value:function getLayerConfig(e,t){var n=[];return t.forEach(function(t){var r=t;[nh,rh,ih].forEach(function(t){if(e[t]&&e[t].field){var n=r.def;r.def instanceof Array?n.forEach(function(n){n.encoding=n.encoding||{},!n.encoding[t]&&(n.encoding[t]={}),n.encoding[t].field=e[t].field}):(n.encoding=n.encoding||{},!n.encoding[t]&&(n.encoding[t]={}),n.encoding[t].field=e[t].field)}}),n.push(r)}),n}},{key:"setCommonDomain",value:function setCommonDomain(e){var t=e.domains,n=e.axes,r=e.encoding;return Object.entries(r).forEach(function(e){if(e[1]&&e[1].field){var r=e[0],i=e[1].field;i&&n[r].forEach(function(n){var r=t[i];!e[1].domain&&n.updateDomain(r)})}}),n}}],[{key:"type",value:function type(){return"retinal"}}]),RetinalEncoder}(),Uh=function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function sliceIterator(e,t){var n=[],r=!0,i=!1,a=void 0;try{for(var o,u=e[Symbol.iterator]();!(r=(o=u.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){i=!0,a=e}finally{try{!r&&u.return&&u.return()}finally{if(i)throw a}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),Wh=void 0;function group_utils_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t0?e[0].map(function(i,a){return new n({type:"header"},{labelManager:r}).source(function getHeaderText(e,t,n){var r="";if(t===n-1&&e.length>n){for(var i=t;i0&&void 0!==arguments[0]?arguments[0]:[];return new Vo(e)}([]),a=(i=i.data(n,r)).enter().append(t).merge(i);return i.exit()&&i.exit().remove(),a},nd=function getBorders(e,t){var n={top:!1,bottom:!1},r={left:!1,right:!1},i={top:!1,bottom:!1,left:!1,right:!1},a=e.rows,o=e.columns,u=e.values,c=Uh(a,2),s=c[0],l=c[1],f=Uh(o,2),h=f[0],d=f[1],p=t.fieldInfo(),y=p.rowDimensions,g=p.columnDimensions,v=p.rowTemporalFields,m=p.columnTemporalFields,b=p.columnMeasures,_=p.rowMeasures,x=y.length+g.length,w=_.length+b.length,k=v.length+m.length;if("polar"===t.constructor.type()){if(!x)return{showRowBorders:n,showColBorders:r,showValueBorders:i}}else if(!w&&!k&&x<=2)return{showRowBorders:n,showColBorders:r,showValueBorders:i};return n=function getRowBorders(e,t){var n={top:!1,bottom:!1};return(e.length>1||t.length>1)&&(n.top=!0,n.bottom=!0),n}(s,l),r=function getColumnsBorders(e,t){var n={left:!1,right:!1};return(e.length||t.length)&&(e[0]&&e[0].length>1||t[0]&&t[0].length>1)&&(n.left=!0,n.right=!0),n}(h,d),i=function getValueBorders(e,t){var n={top:!0,left:!0,bottom:!0,right:!0},r=[ah,oh],i=["top","bottom"];return e.forEach(function(e,t){e[0]&&e[0].length?n[r[t]]=!0:n[r[t]]=!1}),t.forEach(function(e,t){e.length?n[i[t]]=!0:n[i[t]]=!1}),n}([s,l],[h,d]),u.length>1&&(i.top=!0,i.bottom=!0),u.length&&u[0].length>1&&(i.left=!0,i.right=!0),{showRowBorders:n,showColBorders:r,showValueBorders:i}};function action_behaviour_map_defineProperty(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var rd=(action_behaviour_map_defineProperty(qh={},a.DRAG,{behaviours:[u.BRUSH],touch:!1}),action_behaviour_map_defineProperty(qh,a.HOVER,{behaviours:[u.HIGHLIGHT]}),action_behaviour_map_defineProperty(qh,a.LONGTOUCH,{behaviours:[u.SELECT],touch:!0}),action_behaviour_map_defineProperty(qh,a.TOUCHDRAG,{behaviours:[u.BRUSH],touch:!0}),action_behaviour_map_defineProperty(qh,a.CLICK,{behaviours:[u.SELECT],touch:!1}),qh),ad="config",od="data",ud="axes",cd="layerDef",sd="width",ld="height",fd="mount",hd="primaryXAxisUpdated",dd="primaryYAxisUpdated",pd="secondaryXAxisUpdated",yd="secondaryYAxisUpdated",gd="transform",vd="dataDomain",md="layersCreated",bd="fields",_d="timeDiffs",xd="layerAxisIndex";function src_helper_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t2&&void 0!==arguments[2]?arguments[2]:{},r=void 0,i=n.payload,a=n.selectionSet,o=n.propagationFields[t]||{},u=o.fields||[],c=o.append,s=i.criteria,l=e.context,f=l.cachedData()[0],h=l.id(),d=e.sideEffects(),p=e._behaviourEffectMap,y=a.mergedEnter.model,g=f.getFieldsConfig();i.sourceUnit=h,i.action=t,i.sourceCanvas=l.parentAlias();var v=e._propagationBehaviourMap[t]||t,m=[];null===s?r=null:Di(s)?(m=Object.keys(s||{}),r=y?y.project(m):null):(m=s[0],r=y?y.project(m):null);var b=l.facetByFields();if(null!==r&&u.length){var _=r.getData().schema.map(function(e){return e.name});r=function getModelWithFacetData(e,t){var n=e.getData(),r=n.schema,i=n.data,a=[],o=t[0].map(function(e){return{name:""+e,type:ir.FieldType.DIMENSION}}),u=t[1];return i.forEach(function(e){var t={};r.forEach(function(n,r){t[n.name]=e[r]}),o.forEach(function(e,n){t[e.name]=u[n]}),a.push(t)}),new ar.a(a,[].concat(data_propagator_toConsumableArray(r),data_propagator_toConsumableArray(o)))}(r,b),m=c?[].concat(data_propagator_toConsumableArray(_),data_propagator_toConsumableArray(u)):u,r=r.project(m)}var x=!1;m.length&&m.every(function(e){return g[e]&&g[e].def.type===ir.FieldType.MEASURE})&&(x=!0);var w=l.parentAlias();i.action=t;var k=e._actions.behavioural[v],C=!!k&&k.constructor.mutates(),S=function filterFn(e,t){var n=p[e.config.action],r=!e.config.groupId||n.some(function(e){return d[e.name||e].constructor.mutates()});return e.config.groupId!==t.groupId&&r},P=e._actions.behavioural[t],A=!!P&&P.constructor.mutates(),E={payload:i,action:t,criteria:r,isMutableAction:A,propagateInterpolatedValues:x,groupId:w,sourceId:A?w:h,filterFn:S,enabled:function enabled(e,n){return t===v||e.payload.sourceCanvas===n.context.parentAlias()}};f.propagate(r,E,!0),t!==v&&(E={payload:i,sourceId:C?w:h,criteria:r,isMutableAction:C,propagateInterpolatedValues:x,action:v,groupId:w,applyOnSource:t===v,enabled:function enabled(e,t){return e.payload.sourceCanvas!==t.context.parentAlias()},filterFn:S},f.propagate(r,E,!0,{filterImmutableAction:function filterImmutableAction(e,t){return e.groupId!==t.groupId}}))},Xd=function(){function defineProperties(e,t){for(var n=0;n1){var u=r[0].config();if("linear"===r[0].constructor.type()){if(u.alignZeroLine){r.forEach(function(e){return e.config({nice:!1})});var c=function getAdjustedDomain(e,t){var n=e[0]/(e[0]-t[0]),r=e[1]/(e[1]-t[1]),i=!1;return t[0]>0&&t[1]>0&&t[1]>0&&e[1]>0&&(i=!0,t[0]=0,t[1]=0),t[0]<0&&t[1]<0&&t[1]<0&&e[1]<0&&(i=!0,e[0]=0,e[1]=0),i||n===r||(n1&&void 0!==arguments[1]?arguments[1]:{},n=[],r=e;if(null===e)return[];var i=this.layers(),a=i.length;Di(e)&&(r=[Object.keys(e)],r=[].concat(visual_unit_toConsumableArray(r),visual_unit_toConsumableArray(function transposeArray(e){return e[0].map(function(t,n){return e.map(function(e){return e[n]})})}(Object.values(e)))));for(var o=0;o1&&void 0!==arguments[1]?arguments[1]:[]].map(function(e){return e.reduce(function(e,t){return e=[].concat(matrix_model_toConsumableArray(e),matrix_model_toConsumableArray(t.getMembers()))},[])})},ep=function createSelectedDataModel(e,t,n){return e.select(function(e){return t.every(function(t,r){return e[t].value===n[r]})})},tp=function uniqueKeyGenerator(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:[],i=t.facets,a=t.dataModel,o=t.uniqueValues;if(i[n+1]){var u=i[n];o.forEach(function(t){var o=a.select(function(e){return e[u].value===t}),c=Zh(o,i[n+1]);uniqueKeyGenerator(e,{facets:i,dataModel:o,uniqueValues:c},n+1,[].concat(matrix_model_toConsumableArray(r),[t]))})}else o.forEach(function(t){e.push([].concat(matrix_model_toConsumableArray(r),[t]))})},np=function projectRows(e,t){var n=t.allColumnProjections,r=t.rowProjections,i=t.optionalProjections;return r.length>0?r.map(function(t){var r=Jd(t,n),a=Zd(r,2),o=a[0],u=a[1];return e.project([].concat(matrix_model_toConsumableArray(o),matrix_model_toConsumableArray(u),matrix_model_toConsumableArray(i)))}):[e]},rp=function pushToMatrix(e,t){var n,r=[],i=e.matrix,a=e.datamodel,o=e.facetInfo,u=e.fieldInfo,c=u.rowProjections,s=u.colProjections,l=u.optionalProjections,f=o.rowIndex,h=o.columnIndex,d=c[f%c.length]||[];s.length>0?r=s.map(function(e,n){var r=Jd(e,d),i=Zd(r,2),u=i[0],c=i[1],p=a.project([].concat(matrix_model_toConsumableArray(u),matrix_model_toConsumableArray(c),matrix_model_toConsumableArray(l))),y={rowFields:d,columnFields:e},g={rowIndex:f,columnIndex:h*s.length+n};return t(p,{projections:y,indices:g},o)}):r=[t(a,{projections:{rowFields:d,columnFields:[]},indices:{rowIndex:f,columnIndex:h}},o)];i[f]=i[f]||[],(n=i[f]).push.apply(n,matrix_model_toConsumableArray(r))},ip=function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function sliceIterator(e,t){var n=[],r=!0,i=!1,a=void 0;try{for(var o,u=e[Symbol.iterator]();!(r=(o=u.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){i=!0,a=e}finally{try{!r&&u.return&&u.return()}finally{if(i)throw a}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}();function cell_creator_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t0?d.length:1):(a=g,o=p.length>0?p.length:1),s.length&&f===u&&l&&a.length){var h={axis:l,length:o,type:u},v=[];i<2?(h.keys=a,h.facetConfig=c.rows,v=up(h,r,t,n)):(h.facetConfig=c.columns,h.keys=a[0].map(function(e,t){return a.map(function(e){return e[t]})}),v=up(h,r,t,n)),r[u+"Headers"]=v}else r[u+"Headers"]=null}),r},sp=function computeMatrices(e,t){var n=e.resolver,r=e.datamodel,i=e.componentRegistry,a=e.encoders,o=t.globalConfig,u=t.selection,c=t.transform,s=o.autoGroupBy,l=n.dependencies().smartlabel,f=r.getFieldsConfig(),h=n.layerConfig(),d=n.registry(),p=n.horizontalAxis().fields,y=n.verticalAxis().fields,g=n.optionalProjections(t,h),v=n.getAllFields(),m={normalizedColumns:y,normalizedRows:p,facetsAndProjections:v,layers:h,fieldMap:f,otherEncodings:g,encoders:a,facetConfig:o.facetConfig||{},axisFrom:o.axisFrom||{},selection:u},b={GeomCell:n.getCellDef(d.GeomCell),AxisCell:n.getCellDef(d.AxisCell),BlankCell:n.getCellDef(d.BlankCell),TextCell:n.getCellDef(d.TextCell)},_=Yh(p),x=Yh(y);n.colCells({}),n.rowCells({}),n.datamodelTransform(c||{}),n.resetSimpleAxes();var w={exitCellMap:n.cacheMaps().entryCellMap,entryCellMap:new Map};n.cacheMaps(w);var k={config:o,suppliedLayers:a.simpleEncoder.serializeLayerConfig(n.layerConfig()),resolver:n,cell:b.GeomCell,encoder:a.simpleEncoder,newCacheMap:w,detailFields:t.detail},C=r.getFieldsConfig(),S=r;if(!s.disabled){var P=function extractFields(e,t){var n,r=Object.values(e).map(function(e){var t,n,r=(t=[]).concat.apply(t,group_utils_toConsumableArray(e));return(n=[]).concat.apply(n,group_utils_toConsumableArray(r.map(function(e){return e instanceof _h?e.getMembers():e})))});return(n=[]).concat.apply(n,group_utils_toConsumableArray(r).concat(group_utils_toConsumableArray(t)))}(v,function getFieldsFromSuppliedLayers(e,t){var n,r=[],i=e.map(function(e){return e.encoding||{}});return r=(r=[].concat(group_utils_toConsumableArray(r),[(n=[]).concat.apply(n,group_utils_toConsumableArray(i.map(function(e){return Object.values(e).map(function(e){return e.field})})))])).filter(function(e){return t[e]&&t[e].def.type===ir.FieldType.DIMENSION})}(k.suppliedLayers,r.getFieldsConfig())),A=P.filter(function(e){return C[e]&&C[e].def.type===ir.FieldType.DIMENSION}),E=s.measures;S=r.groupBy(A.length?A:[""],E).project(P)}var M=function getMatrixModel(e,t,n){var r=[],i=[],a=[],o=[],u=[],c=[],s=t.rowFacets,l=t.colFacets;if(t.colProjections.forEach(function(e){o.push.apply(o,matrix_model_toConsumableArray(e))}),t.allColumnProjections=o,s.length>0){var f=s[0].toString(),h=Zh(e,f);tp(i,{facets:s,dataModel:e,uniqueValues:h}),i.forEach(function(n){var i,a=Jd(s),o=Zd(a,1)[0],u=ep(e,o,n);c.push([s,n]),(i=r).push.apply(i,matrix_model_toConsumableArray(np(u,t)))})}else{var d;(d=r).push.apply(d,matrix_model_toConsumableArray(np(e,t)))}if(r=r.length>0?r:[[]],l.length>0){var p=l.map(function(e){return""+e}),y=p[0],g=Zh(e,y);tp(a,{facets:p,dataModel:e,uniqueValues:g}),r.forEach(function(r,i){c[i]=c[i]||[[],[]],a.forEach(function(a,o){u[i]=u[i]||[];var s=r instanceof ar.a?r:e,f=ep(s,p,a),h={matrix:u,datamodel:f,facetInfo:{rowFacets:c[i],colFacets:[l,a],rowIndex:i,columnIndex:o},fieldInfo:t};rp(h,n)})})}else r.forEach(function(r,i){c[i]=c[i]||[[],[]];var a={matrix:u,datamodel:r||e,facetInfo:{rowFacets:c[i],colFacets:[[],[]],rowIndex:i,columnIndex:0},fieldInfo:t};rp(a,n)});var v=a.length>0?a[0].map(function(e,t){return a.map(function(e){return e[t]})}):a;return{matrix:u,rowKeys:i,columnKeys:v}}(S,v,n.valueCellsCreator(k));n.cacheMaps().exitCellMap.forEach(function(e){e.remove()}),n.cacheMaps().exitCellMap.clear(),n.valueMatrix(M.matrix),n.createUnits(i,t);var O=function mutateAxesFromMap(e,t){var n=null,r=null,i=e.xAxesMap,a=e.yAxesMap,o=t.x,u=t.y;return o&&o.forEach(function(e){var t=i.get(e);(n=n||[]).push(t)}),u&&u.forEach(function(e){var t=a.get(e);(r=r||[]).push(t)}),{xAxes:n,yAxes:r}}(n.cacheMaps(),n.axes()),T=O.xAxes,F=O.yAxes;n.axes({x:T,y:F});var N=function generateMatrices(e,t,n,r){var i=e.unitHeight,a=e.unitWidth,o=e.facetsAndProjections,u=e.normalizedRows,c=e.normalizedColumns,s=e.selection,l=e.axisFrom,f=e.facetConfig,h=e.encoders,d=cp({fields:{rows:u,columns:c},matrices:t,facetsAndProjections:o,selection:s,axisFrom:l,facetConfig:f,encoders:h},n,r),p=d.columnsPrimary,y=d.columnsSecondary,g=d.rowsPrimary,v=d.rowsSecondary,m=d.leftHeaders,b=d.topHeaders,_=d.bottomHeaders,x=d.rightHeaders,w=[g,v,p,y].map(function(e){return e?e.getObjects():[]}),k=ip(w,4),C=k[0],S=k[1],P=k[2],A=k[3],E=[m,x].map(function(e){return e?e.getObjects().map(function(e){return e.getObjects()}):[]}),M=ip(E,2),O=M[0],T=M[1],F=O.length?O.map(function(e,t){return C[t]=C[t]?[C[t]]:[],[].concat(cell_creator_toConsumableArray(e),cell_creator_toConsumableArray(C[t]))}):C?C.map(function(e){return[e]}):[],N=S.length?S.map(function(e,t){return[e].concat(cell_creator_toConsumableArray(T[t]||[]))}):T.length?T.map(function(e){return[].concat(cell_creator_toConsumableArray(e))}):[],j=[];b&&b.getObjects().forEach(function(e){e.getObjects().forEach(function(e,t){j[t]=j[t]||[],j[t].push(e)})});P.length&&j.push(P);var I=[];A.length&&I.push(A);var D=I.length;_&&_.getObjects().forEach(function(e){e.getObjects().forEach(function(e,t){I[t+D]=I[t+D]||[],I[t+D].push(e)})});if(!F.length&&!N.length){var L=new n.BlankCell;L.setAvailableSpace(a,i),F=[[L]]}if(!(j.length||I.length&&I[0].length)){var R=new n.BlankCell;R.setAvailableSpace(a,i),I=[[R]]}return{rows:[F,N],columns:[j,I],selectionObj:d}}(m,{valuesMatrix:M,axesMatrix:n.axes()},b,l),j=N.rows,I=N.columns,D=N.selectionObj;return n.rowMatrix(j),n.columnMatrix(I),{rows:n.rowMatrix(),columns:n.columnMatrix(),values:n.valueMatrix(),isColumnSizeEqual:x,isRowSizeEqual:_,selection:D,dataModels:{groupedModel:S,parentModel:r}}},lp=function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function sliceIterator(e,t){var n=[],r=!0,i=!1,a=void 0;try{for(var o,u=e[Symbol.iterator]();!(r=(o=u.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){i=!0,a=e}finally{try{!r&&u.return&&u.return()}finally{if(i)throw a}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),fp=function(){function defineProperties(e,t){for(var n=0;n0?d[0].map(b):[],right:p.length>0?p[0].map(b):[]},w=[ah,oh].map(function(e){return g.map(function(t,n){return n===g.length-1?_[e]:x[e]})}),k=lp(w,2),C=k[0],S=k[1];if(0===g.length){var P=[ah,oh].map(function(e){return v.map(function(t,n){return 0===n?_[e]:x[e]})}),A=lp(P,2);r=A[0],i=A[1]}else r=v.map(function(){return d.length>0?d[0].map(b):[]}),i=v.map(function(){return p.length>0?p[0].map(b):[]});return s.notify({client:[C,S,r,i],action:"initialized",formalName:"facet-headers"}),{topLeft:C,topRight:S,bottomLeft:r,bottomRight:i}}},{key:"getMatrices",value:function getMatrices(e,t,n,r){return sp({datamodel:e,componentRegistry:n,encoders:r,resolver:this},t)}}]),MatrixResolver}(),dp=function(){function defineProperties(e,t){for(var n=0;n3&&void 0!==arguments[3]?arguments[3]:{},i=void 0,a=e.context.constructor.type(),o=r.payload,u=e.context.data(),c=e.context.metaData(),s=c.getData().schema[0].type,l={},f=e.context._id;l.action=Pp[t]||t,l.sideEffects=Ep[t],l.sourceCanvas=e.context.canvasAlias();var h=e._actions.behavioural[l.action].constructor.mutates();if(null===o.criteria)i=null;else{var d=n.mergedEnter,p=u.filter(function(e){return-1!==d.uids.indexOf(e.id)}).map(function(e){return e.value});if("step"===a||"discrete"===a&&"measure"===s){var y=Object.keys(o.criteria||{})[0];i=(p=u.filter(function(e){return-1!==d.uids.indexOf(e.id)}).map(function(e){return e.range})).length?c.select(function(e){for(var t=!1,n=0;n=p[n][0]&&e[y].value<=p[n][1]);n++);return t},{saveChild:!1}):null}else"gradient"===a?i=ca(c,o.criteria):p.length?i=function assembleModelFromIdentifiers(e,t){var n=[],r=void 0,i=e.getFieldsConfig();return t.length?function(){for(var e=t[0],a=e.length,o=0;o=s+l?[i.invert(s+l-c),i.invert(s+l)]:f-l1&&void 0!==arguments[1]?arguments[1]:{},i=t.config().classPrefix;e.mergedEnter.length||e.mergedExit.length?(n(e.mergedExit,r.className||i+"-legend-brighten",!1),n(e.mergedExit,r.className||i+"-legend-fadeout",!0),n(e.mergedEnter,r.className||i+"-legend-fadeout",!1)):n(e.completeSet,r.className||i+"-legend-fadeout",!1)},brighten:function brighten(e){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},i=t.config().classPrefix;e.mergedEnter.length||e.mergedExit.length?(n(e.mergedEnter,r.className||i+"-legend-brighten",!0),n(e.mergedExit,r.className||i+"-legend-brighten",!1)):n(e.completeSet,r.className||i+"-legend-brighten",!1)}}},Vp=function(){function defineProperties(e,t){for(var n=0;n2&&void 0!==arguments[2]?arguments[2]:{};(0,this._strategies[n.strategy||this._strategy])(e,this)}}],[{key:"formalName",value:function formalName(){return"highlighter"}}]),LegendHighlighter}(),Wp={config:{sanitization:function sanitization(e,t){return na(e._config||{},t)}},data:{},fieldName:{},legendContainer:{},measurement:{sanitization:function sanitization(e,t){var n=na(e._measurement,t);return["padding","border","margin"].forEach(function(e){n[e]=Math.min(n[e]>0?n[e]:0,.1*n.maxWidth,.1*n.maxHeight)}),n}},logicalSpace:{},metaData:{},range:{sanitization:function sanitization(e,t){return e.scale().range(t),e.resetLogicalSpace(),e.store().commit("range",t),t}},scale:{},smartTicks:{},store:{},title:{sanitization:function sanitization(e,t){return na(e._title||{},t)}}},qp="horizontal",Gp="vertical",Yp={height:30,width:30,maxWidth:1/0,maxHeight:1/0,padding:2,margin:2,border:1},Xp={text:"",orientation:function orientation(e){return"left"===e||"right"===e?"left":"center"}},Kp={classPrefix:"muze",borderStyle:"solid",borderColor:"rgba(0,0,0,0)",formatter:{bounds:{lower:"less than",upper:"more than"}},item:{text:{orientation:"right",width:10,formatter:function formatter(e){return e}},icon:{className:"legend-icon",height:20,width:20,color:"rgba(0,0,0,.5)",type:"square"}}},$p=function ICON_MAP(e){return e&&"string"==typeof e?pa(e):e};function legend_helper_defineProperty(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var Qp=function getScaleInfo(e){var t=e.constructor.type();return{scaleType:t,domain:e.uniqueValues(),steps:e.config().stops||1,scaleFn:Mp[t]}},Zp=function getInterpolatedData(e,t){for(var n=[],r=ia()(e[0],e[1]),i=0;i<=t;i++)n[i]=r(i/t);return n},Jp=function getDomainBounds(e,t,n){var r,i=t.scaleFn,a=t.scaleType,o=t.scale,u=n.domain,c=n.domainBounds,s=n.domainLeg,l=n.steps,f=u["lower"===e?0:u.length-1],h=l["lower"===e?0:l.length-1];return legend_helper_defineProperty(r={},a,"size"===a?o[i](f)*o.getScaleFactor():o[i](f)),legend_helper_defineProperty(r,"value",c[e]),legend_helper_defineProperty(r,"id","lower"===e?0:s.length+2),legend_helper_defineProperty(r,"range",[f,h]),r},ey=function(){function defineProperties(e,t){for(var n=0;n0?h.height+s:0,p=h.width+s,y=this.getLabelSpaces(s,c),g=function computeItemSpaces(e,t,n){var r=0,i=0,a={width:0,height:0},o=t.effPadding,u=t.titleWidth,c=t.labelSpaces,s=t.titleHeight,l=t.maxWidth,f=e.item,h=e.align,d=f.icon,p=f.text.orientation,y=[],g=[],v=0;return c.forEach(function(e,t){var c={width:0,height:0},s={width:0,height:0},l=n[t]||{};"left"===p||"right"===p?(e.width+=o,s.width=(l.size?2*Math.sqrt(l.size/Math.PI):d.width)+o,v=Math.max(s.width,v),c.width=e.width+v,e.height=Math.max(e.height,d.height)+o,s.height=e.height,c.height=e.height):(e.width=Math.max(e.width,l.size?2*Math.sqrt(l.size/Math.PI):d.width)+o,s.width=e.width,c.width=e.width,v=Math.max(s.width,v),e.height+=o,s.height=d.height+o,c.height=e.height+s.height),"horizontal"===h?r=Math.max(r,c.height):(r+=c.height,i=Math.max(i,c.width,u)+o),a={width:Math.max(c.width,a.width),height:Math.max(c.height,a.height)},y.push(c),g.push(s)}),y.forEach(function(e,t){"horizontal"===h?(e.height=r,g[t].width=v,"left"===p||"right"===p?(c[t].height=r,g[t].height=r,y[t].width=c[t].width+v):(c[t].width=v,y[t].width=v,c[t].width=v),i=Math.max(i+y[t].width)):(e.width=Math.max(i,l),"top"===p||"bottom"===p?(c[t].width=i,g[t].width=i,v=i):(g[t].width=v,y[t].width=c[t].width+v,c[t].width=a.width-v,i=Math.max(i,e.width)+o))}),i=Math.max(i,u),{totalHeight:r+=s+o,totalWidth:i,itemSpaces:y,iconSpaces:g,maxItemSpaces:a,maxIconWidth:v}}(this.config(),{effPadding:s,titleWidth:p,labelSpaces:y,titleHeight:d,maxWidth:r,maxHeight:i},this.data()),v=g.totalHeight,m=g.totalWidth,b=g.itemSpaces,_=g.iconSpaces,x=g.maxItemSpaces,w=g.maxIconWidth;return this.measurement({width:Math.max(m,t)+f+l,height:Math.max(v,n)+f+l,labelSpaces:y,iconSpaces:_,itemSpaces:b,maxItemSpaces:x,maxIconWidth:w,titleSpaces:{width:Math.min(r,this.measurement().width)-f-l,height:d}}),this}},{key:"getTitleSpace",value:function getTitleSpace(){return this._labelManager.setStyle(Lo(Ao("body"),this.config().classPrefix+"-legend-title")),this._labelManager.getOriSize(this.title().text?this.title().text:"")}},{key:"renderTitle",value:function renderTitle(e){var t=this.measurement(),n=t.titleSpaces,r=t.border,i=t.padding,a=t.width,o=this.config(),u=o.borderStyle,c=o.borderColor;return function titleCreator(e,t,n,r){var i=Eo(e,"table",[1],r.classPrefix+"-legend-title").style("width",n.width+"px").style("height",n.height+"px").style("border-bottom",n.border+"px "+r.borderStyle+" "+r.borderColor).style("text-align",t.orientation instanceof Function?t.orientation(r.position):t.orientation);return Eo(i,"td",[1],r.classPrefix+"-legend-title-text").style("width",n.width+"px").style("height","100%").style("padding",n.padding+"px").text(t.text).node()}(e,this.title(),{height:n.height,width:a,border:r,padding:i,borderStyle:u,borderColor:c},this.config())}},{key:"render",value:function render(){var e=this.firebolt(),t=this.config(),n=t.classPrefix,r=t.borderStyle,i=t.borderColor,a=this.measurement(),o=a.maxWidth,u=a.maxHeight,c=a.width,s=a.height,l=a.margin,f=a.border,h=Eo(Ao(this.mount()),"div",[1],n+"-legend-box");return h.classed(n+"-legend-box-"+this._id,!0),h.style("float","left"),h.style("width",Math.min(o,c)-2*l+"px").style("height",Math.min(u,s)-2*l+"px").style("margin",l+"px").style("border",f+"px "+r+" "+i),this.legendContainer(h.node()),this.renderTitle(h),e.createSelectionSet(this.data().map(function(e){return e.id})),h}},{key:"getCriteriaFromData",value:function getCriteriaFromData(e){var t=this.fieldName();return"measure"===this.metaData().getData().schema[0].type?function simple_legend_defineProperty(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}({},t,e.range):[[t],[e.value]]}}],[{key:"create",value:function create(e){return new SimpleLegend(e)}},{key:"defaultConfig",value:function defaultConfig(){return Kp}},{key:"defaultMeasurement",value:function defaultMeasurement(){return Yp}}]),SimpleLegend}();function position_config_defineProperty(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var oy=(position_config_defineProperty(ty={},"horizontal",{datasets:function datasets(e){return{row:[1],column:e}},itemContainerMeasures:function itemContainerMeasures(e){var t=e.itemSpaces;return{row:{width:e.width+"px",padding:"0px"},column:{width:function width(e,n){return t[n].width+"px"},padding:"0px"}}},getStepSpacesInfo:function getStepSpacesInfo(e){var t=e.maxItemSpaces;return{iconHeight:e.height,iconWidth:t.width,stepPadding:{horizontal:!0,vertical:!1}}}}),position_config_defineProperty(ty,"vertical",{datasets:function datasets(e){return{row:e,column:function column(e){return[e]}}},itemContainerMeasures:function itemContainerMeasures(e,t){var n=e.width;return{row:{width:n+"px",padding:t.padding+"px"},column:{width:n+"px",padding:"0px"}}},getStepSpacesInfo:function getStepSpacesInfo(e){var t=e.maxItemSpaces,n=e.width;return{iconHeight:t.height,iconWidth:n,stepPadding:{horizontal:!1,vertical:!0}}}}),ty),uy=(position_config_defineProperty(ny={},"left",oy.vertical),position_config_defineProperty(ny,"right",oy.vertical),position_config_defineProperty(ny,"top",oy.horizontal),position_config_defineProperty(ny,"bottom",oy.horizontal),ny),cy=(position_config_defineProperty(ry={},"left","end"),position_config_defineProperty(ry,"right","start"),position_config_defineProperty(ry,"top","center"),position_config_defineProperty(ry,"bottom","center"),ry),sy=(position_config_defineProperty(iy={},"left",[Op,"shape"]),position_config_defineProperty(iy,"right",["shape",Op]),position_config_defineProperty(iy,"top",[Op,"shape"]),position_config_defineProperty(iy,"bottom",["shape",Op]),iy),ly=function createLegendSkeleton(e,t,n,r){var i,a,o,u,c=e.measurement(),s=c.margin,l=c.border,f=c.titleSpaces,h=c.width,d=c.height,p=c.maxWidth,y=c.maxHeight;a=d-(f.height+2*s+2*l),i=h-(2*s+2*l),o=y-(f.height+2*s+2*l),u=p-(2*s+2*l);var g=Eo(t,"div",[1],n+"-legend-body");return g.select("."+n+"-legend-overflow").remove(),u&&u4)}(u)?u:$p(u).size(o)(),Eo(a,"path",function(e){return[e]}).attr("d",l)}}return e[1]="circle",createShape(e,t,"circle")}(n,Eo(l,"g",[n[1]],i+"-legend-icon"),n[3]?"circle":"square",o,a).attr("transform","translate("+(u/2-c)+" "+a/2+")").attr("fill",n[2]||s):Eo(l,"rect",[n[1]],i+"-legend-icon").attr("x",0).attr("y",0).attr("width",u).attr("height",a).attr("fill",n[2]||s)},py=function(){function defineProperties(e,t){for(var n=0;na[a.length-1]&&t.push(i[1])):t=Zp(i,a-1),(t=[].concat(gradient_legend_toConsumableArray(new Set(t))).sort(function(e,t){return e-t})).map(function(n,i){var a,u=t[i];return gradient_legend_defineProperty(a={},r,"size"===r?e[o](n)*e.getScaleFactor():e[o](Math.floor(n))),gradient_legend_defineProperty(a,"value",+u.toFixed(2)),gradient_legend_defineProperty(a,"id",i),a}).filter(function(e){return null!==e.value})}},{key:"getLabelSpaces",value:function getLabelSpaces(e){this.config({item:{text:{orientation:this.config().position}}});var t=function createAxis(e){var t=e.data(),n=e.config().align,r=e._cells.AxisCell,i=new Qs({id:"legend-"+e._id,orientation:n===Gp?"right":"bottom",style:e._computedStyle,nice:!1,showAxisName:!1,tickValues:t.map(function(e){return e.value}),fixedBaseline:!1},{labelManager:e._labelManager});return i.domain(gy(t)),i.range([1,1]),(new r).source(i).config({margin:{left:0,bottom:0,top:0,right:0}})}(this),n=t.getLogicalSpace(),r={width:n.width-e,height:n.height-e},i=t.source().domain().length,a=new Array(i).fill(r);return this.axis(t),a}},{key:"getDrawingContext",value:function getDrawingContext(){return{svgContainer:this._legendGradientSvg}}},{key:"render",value:function render(){var e=this.firebolt(),t=function get(e,t,n){null===e&&(e=Function.prototype);var r=Object.getOwnPropertyDescriptor(e,t);if(void 0===r){var i=Object.getPrototypeOf(e);return null===i?void 0:get(i,t,n)}if("value"in r)return r.value;var a=r.get;return void 0!==a?a.call(n):void 0}(GradientLegend.prototype.__proto__||Object.getPrototypeOf(GradientLegend.prototype),"render",this).call(this,this.mount());return function renderGradient(e,t){var n,r,i=e.config(),a=i.align,o=i.classPrefix,u=i.item,c=e.data(),s=vy(t,o,c),l=s.legendContainer,f=s.legendGradSvg,h=s.legendGradCont,d=s.linearGradient,p=s.legendRect,y=e.axis().source().getAxisDimensions().tickLabelDim,g=e.measurement(),v=g.padding,m=g.margin,b=g.border,_=g.titleSpaces,x=g.maxHeight,w=g.maxWidth,k=g.height,C=g.width,S={};n=Math.floor(k-(_.height+2*m+2*b)),r=Math.floor(C-(2*m+2*b)),a===qp?(S.height=u.icon.height,S.width=r-2*v-y.width/2,d.attr("x2","100%").attr("y1","0%"),h.attr("transform","translate( "+y.width/2+" 0)"),my(e,l,n-u.icon.height-v,r-2*v-1),l.classed(o+"-overflow-x",C>w),Mo(l,{height:k+"px",width:Math.min(C,w)+"px",padding:v+"px"}),p.attr("height",S.height),p.attr("width",S.width-y.width/2)):(S.height=n-2*v-y.height/2,S.width=u.icon.width,d.attr("x2","0%").attr("y1","100%"),h.attr("transform","translate(0 "+y.height/2+")"),my(e,l,n-2*v-1,r-u.icon.width-2*v),l.classed(o+"-overflow-y",k>x),Mo(l,{height:Math.min(k,x)+"px",width:C+"px",padding:v+"px"}),p.attr("height",S.height-y.height/2),p.attr("width",S.width)),Mo(f,{height:S.height+"px",width:S.width+"px"}),Mo(p,{fill:"url(#linear-gradient)"}),f.attr("height",S.height),f.attr("width",S.width),e.measurement({gradientDimensions:S}),e._legendGradientSvg=f}(this,t),t.selectAll("div").style("float","left"),e.mapActionsAndBehaviour(),e.createSelectionSet(this.data().map(function(e){return e.id})),t}},{key:"getCriteriaFromData",value:function getCriteriaFromData(e){return[[this.fieldName()],[e.value]]}}],[{key:"create",value:function create(e){return new GradientLegend(e)}},{key:"type",value:function type(){return"gradient"}}]),GradientLegend}(),xy=function(){function defineProperties(e,t){for(var n=0;na[a.length-1]&&(c.upper=[u.bounds.upper+" "+a[a.length-1]])):t=Zp(i,a),t=(t=[].concat(step_legend_toConsumableArray(new Set(t))).sort(function(e,t){return e-t})).map(function(n,i){var a,u=null;return i0&&void 0!==arguments[0]?arguments[0]:{},t=this._registrableComponents,n=na(na({},function defaultPolicy(e){var t=e.map(function(e){return e.alias()});return{behaviours:{"*":function _(e){var n=e.sourceCanvas;return!n||-1!==t.indexOf(n)}}}}(t)),e);return t.forEach(function(e){e.firebolt().crossInteractionPolicy(n)}),this}}]),ActionModel}()),Ny={classPrefix:"muze",interaction:{sideEffect:"individual"},legend:{position:"right",color:{show:!0,padding:1,margin:3,border:1,height:20,width:20},shape:{show:!0,padding:1,margin:3,border:1,height:20,width:20},size:{show:!0,padding:1,margin:3,border:1,height:20,width:20}},showHeaders:!1,minWidth:100,minHeight:100,border:{style:"solid",color:"#d6d6d6",width:2,collapse:!0,spacing:0},autoGroupBy:{disabled:!1}},jy={data:{value:null,meta:{typeCheck:function typeCheck(e){return e instanceof ar.a}}},width:{value:0,meta:{sanitization:Qi,typeCheck:Number.isInteger}},height:{value:0,meta:{sanitization:Qi,typeCheck:Number.isInteger}},minUnitWidth:{value:50,meta:{sanitization:Qi,typeCheck:Number.isInteger}},minUnitHeight:{value:50,meta:{sanitization:Qi,typeCheck:Number.isInteger}},config:{value:null,meta:{typeCheck:"constructor",typeExpected:"Object",sanitization:function sanitization(e,t){var n=na({},t),r=na(n,Ny);return na(r,e)}}}},Iy="width",Dy="height",Ly="top",Ry="left",By="right",zy="bottom",Hy="center",Vy="rowLeft",Uy="rowRight",Wy="colBottom",qy="colTop",Gy="rowSpan",Yy="colSpan",Xy="rowRoot",Ky="columnRoot",$y=function(){function defineProperties(e,t){for(var n=0;n1)return e;var f=o[t-1];if(f&&f.valueOf()===e.valueOf()){var h=n[r-1];return h?h[t].valueOf()===h[t-1].valueOf()?null:e:null}return e}return e},ag=function calcRowSpan(e,t,n,r){var i=1;if(!e||"string"!=typeof e.valueOf())return 1;for(var a=!1;!a;)n[r+i]&&null===n[r+i][t]?i+=1:a=!0;return i},og=function calcColSpan(e,t,n,r){var i=1;if(!e||"string"!=typeof e.valueOf())return 1;for(var a=!1;!a;)null===n[r][t+i]?i+=1:a=!0;return i},ug=function mask(e,t){return e.map(function(n,r){if(t===Vy||t===Uy){for(var i=n.map(function(n,i){return ig(n,i,e,r,t)}),a=[],o=n.length-i.length,u=0;u1&&r.setAvailableSpace(0,r.availHeight()),Ao(this).style("height",r.availHeight()+"px"),n}),l.each(function(e){e.placeholder&&e.placeholder.render(this)}).exit().each(function(e){e.placeholder&&e.placeholder.remove()}),applyBorders(l,r.border,n,a)})}function utils_defineProperty(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function utils_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t0?e[0]:e[1];return n?(r=e[0].length>0?[].concat(utils_toConsumableArray(e[0])):[],r=e[1].length>0?[].concat(utils_toConsumableArray(r),utils_toConsumableArray(e[1])):r):r=r.map(function(t,n){var r=[];return e[0].length>0&&(r=[].concat(utils_toConsumableArray(e[0][n]))),e[1].length>0&&(r=[].concat(utils_toConsumableArray(r),utils_toConsumableArray(e[1][n]))),r}),r},fg=function computeLogicalSpace(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments[1],n=arguments[2],r=t.isTransposed,i=void 0!==r&&r,a=t.unitMeasures,o=function getMeasureInfo(e){return e?{firstMeasure:Dy,secondMeasure:Iy}:{firstMeasure:Iy,secondMeasure:Dy}}(i),u=o.firstMeasure,c=o.secondMeasure,s=e.values,l=function getMinMeasures(e,t){return e?{height:0,width:t.width}:{height:t.height,width:0}}(i,a);if(s[0].key){var f,h=(utils_defineProperty(f={},u,0),utils_defineProperty(f,c,0),f);return s.forEach(function(e){var r=computeLogicalSpace(e,t,n);h[u]=Math.max(h[u],r[u],l[u]),h[c]+=+r[c]}),e.space=h,h}return function getLogicalSpace(e,t,n){var r,i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:[],a=t.firstMeasure,o=t.secondMeasure,u=0,c=0;return e.values.forEach(function(t){var r,s=0,l=0;t.forEach(function(e,t){e.logicalSpace(null);var r=e.getLogicalSpace();l=Math.max(l,+r[o],n[o]),i[t]=Math.max(i[t]||0,r[a]),s+=+i[t]}),c+=l,u=Math.max(u,s),e.space=(utils_defineProperty(r={},o,Math.ceil(c)),utils_defineProperty(r,a,Math.ceil(u)),r)}),utils_defineProperty(r={},o,c),utils_defineProperty(r,a,u),r}(e,{firstMeasure:u,secondMeasure:c},l,n)},hg=function extraCellsRemover(e,t,n){return e.slice(t,-n)},dg={config:{sanitization:function sanitization(e,t){return na(e._config||{},t)}},maxMeasures:{},availableSpace:{},logicalSpace:{}},pg={distribution:[],classPrefix:"muze",isDistributionEqual:!0,unitMeasures:{height:100,width:100,border:1},isTransposed:!1,facet:"primary",extraCellLengths:[]},yg=function(){function defineProperties(e,t){for(var n=0;n1&&void 0!==arguments[1]?arguments[1]:{};!function visual_matrix_classCallCheck(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,VisualMatrix),this._lastLevelKey=0,this._primaryMatrix=e[0]||[],this._secondaryMatrix=e[1]||[],this._maxMeasures=[],this._availableSpace={},Ji(this,dg);var n=Object.assign({},this.constructor.defaultConfig());this.config(na(n,t)),this._breakPointer=this.config().isTransposed?e[0].length:e[0].length>0?e[0][0].length:0,this._layoutMatrix=lg([e[0]||[],e[1]||[]],this.config()),this._tree={key:this.config().isTransposed?Ky:Xy,values:this.createTree()},this._logicalSpace=this.setLogicalSpace()}return yg(VisualMatrix,[{key:"primaryMatrix",value:function primaryMatrix(){return arguments.length?this:this._primaryMatrix}},{key:"secondaryMatrix",value:function secondaryMatrix(){return arguments.length?this:this._secondaryMatrix}},{key:"tree",value:function tree(){return arguments.length?this:this._tree}},{key:"createTree",value:function createTree(){var e=function createTree(e){var t={},n=0,r="primary",i=cg(),a=[],o=e._layoutMatrix,u=e.primaryMatrix(),c=e.secondaryMatrix(),s=e.config(),l=s.isTransposed,f=s.breakPage;if(l){if(r=0===u.length?"primary":0===c.length?"secondary":u.length>=c.length?"primary":"secondary",u.length>0){for(var h=0;h0){for(var d=u.length,p=c.length-1;p>0;p--)a.push(p+d);a.push(d),"primary"===r&&(n=d)}var y;a.forEach(function(e){var t=-1;return i.key(function(n){return t++,n[e].valueOf()+"-"+sg(t,f)})}),y=o[0].map(function(e,t){return o.map(function(e){return e[t]})}),t=i.entries(y)}else{if(r=0===u.length?"primary":0===c.length?"secondary":u.length>=c.length?"primary":"secondary",u.length>0){for(var g=0;g0){for(var v=u.length>0?u[0].length:0,m=c[0].length-1;m>0;m--)a.push(m+v);a.push(v),"primary"===r&&(n=v)}else n=u.length>0?u[0].length-1:0;a.forEach(function(e){var t=-1;return i.key(function(n){return t++,n[e].valueOf()+"-"+sg(t,f)})}),t=i.entries(o)}return{tree:t,lastLevelKey:n}}(this),t=e.tree,n=e.lastLevelKey;return this._lastLevelKey=n,t}},{key:"setLogicalSpace",value:function setLogicalSpace(){var e=this.config().isTransposed,t=this.tree();return function createMatrixEachLevel(e,t){if(e.values[0].key){var n=[];return e.values.forEach(function(e){t?createMatrixEachLevel(e,t).forEach(function(e,t){var r;n[t]=n[t]||[],(r=n[t]).push.apply(r,utils_toConsumableArray(e))}):n.push.apply(n,utils_toConsumableArray(createMatrixEachLevel(e,t)))}),e.matrix=n,n}return e.matrix=t?e.values[0].map(function(t,n){return e.values.map(function(e){return e[n]})}):e.values,e.matrix}(t,e),fg(t,this.config(),this.maxMeasures())}},{key:"getLogicalSpace",value:function getLogicalSpace(){return this.logicalSpace()}},{key:"setAvailableSpace",value:function setAvailableSpace(e,t){this.availableSpace({width:e,height:t});var n=this.tree(),r=this.populateMaxMeasures(Dy,n),i=this.populateMaxMeasures(Iy,n),a=this.calculateDepth(i,r);return this.viewableMatrix=this.createViewPortMatrix(a),this.viewableMeasures=this.redistribute(this.viewableMatrix,e,t),this}},{key:"populateMaxMeasures",value:function populateMaxMeasures(e,t){var n=this,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:[];if(i[r]=Math.max(i[r]||0,t.space[e]),t.values){var a=r+1;t.values.forEach(function(t){t.space&&(i=n.populateMaxMeasures(e,t,a,i))})}return i}},{key:"calculateDepth",value:function calculateDepth(e,t){var n=void 0,r=void 0,i=this.availableSpace(),a=i.height,o=i.width;for(n=0;n0&&void 0!==arguments[0]?arguments[0]:[],t=arguments[1],n=arguments[2],r=arguments[3],i=r._breakPointer,a=r.config().isTransposed,o=n.tree,u=n.layoutMatrix;if(0===t){var c=function breakMatrix(e,t,n){var r=[],i=[];return t?e.forEach(function(e,t){t>=n?i.push(e):r.push(e)}):e.forEach(function(e,t){e.forEach(function(e,a){a>=n?(i[t]=i[t]||[],i[t].push(e)):(r[t]=r[t]||[],r[t].push(e))})}),[r,i]}(o.matrix,a,i);return e.push({matrix:o.matrix,primaryMatrix:c[0],secondaryMatrix:c[1],space:o.space}),e}var s=t-1;return o.values.forEach(function(t){createMatrixInstances(e,s,{tree:t,layoutMatrix:u},r)}),e}(t,e,this.removeExtraCells(),this),t}},{key:"redistributeRowWise",value:function redistributeRowWise(e){var t,n,r=[],i=this.maxMeasures(),a=this.config(),o=a.isDistributionEqual,u=a.distribution,c=a.isTransposed,s=a.gutter,l=e.matrix,f=e.width,h=e.height,d=e.maxHeights,p=e.maxWidths;n=function spaceTakenByColumn(e,t){var n=0,r=0;return e.forEach(function(e){var i=e[t].getLogicalSpace();r=Math.max(r,i.width),n+=i.height}),{width:r,height:n}}(l,this._lastLevelKey).height;var y=i.reduce(function(e,t){return e+=t});return r=y>0?i.map(function(e){return e+e/y*(f-y)}):i.map(function(){return 0}),t=function getDistributedHeight(e){var t,n=0,r=0,i=e.isTransposed,a=e.distribution,o=e.availableHeight,u=e.height,c=e.isDistributionEqual,s=e.gutter,l=e.matrix,f=e.cIdx;a&&void 0!==a[0]&&(n=a.reduce(function(e,t){return e+=t})),s&&void 0!==s[0]&&(r=s.reduce(function(e,t){return e+=t})),t=o-Math.floor(o*r);var h=l.length;return l.map(function(r,o){var s=r[f].getLogicalSpace().height,l=s+s/u*(t-u);return i||(a.length>0&&h===a.length?l=t*a[o]/n:(c||0===e.height)&&(l=t/h)),Math.floor(l)})}({matrix:l,cIdx:this._lastLevelKey,height:n,availableHeight:h,isDistributionEqual:o,distribution:u,isTransposed:c,gutter:s}),p.push(r),d.push(t),{maxWidths:p,maxHeights:d}}},{key:"redistributeColumnWise",value:function redistributeColumnWise(e){var t=[],n=e.matrix,r=e.width,i=e.maxHeights,a=e.maxWidths,o=this.config().unitMeasures.border,u=function spaceTakenByRow(e){var t=0,n=0;return e.forEach(function(e){var r=e.getLogicalSpace();t=Math.max(t,r.height),n+=r.width}),{width:n,height:t}}(n[this._lastLevelKey]).width,c=function getDistributedWidth(e,t){var n=e.availableWidth,r=e.width,i=e.row,a=t.isDistributionEqual,o=t.isTransposed,u=t.distribution,c=0;return u&&u[0]&&(c=u.reduce(function(e,t){return e+=t})),i.map(function(e,t){var s=e.getLogicalSpace().width,l=s+s/r*(n-r);if(o)if(u.length>0)l=n*u[t]/c;else if(a||0===r){var f=i.length;l=n/f}return Math.floor(l)})}({row:n[this._lastLevelKey],width:u,availableWidth:r},this.config());n.forEach(function(e,n){return e.forEach(function(e,r){var i=e.getLogicalSpace().height;e.setAvailableSpace(c[r]-o,i),t[n]=Math.max(t[n]||0,e.getLogicalSpace().height)})}),i.length>0&&(t=t.map(function(e,t){return Math.max(e,i[0][t])})),i.push(t);for(var s=0;s=m&&(r[0][1][n[1]-m]=a[0],i[0][1]=(i[0][1]||0)+a[0]),n[1]===t._lastLevelKey&&(r[1][0][n[0]]=a[1],r[1][1][n[0]]=a[1])})}),{heights:g,widths:v,rowHeights:p,columnWidths:y}}}],[{key:"defaultConfig",value:function defaultConfig(){return pg}}]),VisualMatrix}(),vg=function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function sliceIterator(e,t){var n=[],r=!0,i=!1,a=void 0;try{for(var o,u=e[Symbol.iterator]();!(r=(o=u.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){i=!0,a=e}finally{try{!r&&u.return&&u.return()}finally{if(i)throw a}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}();function layout_helper_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t0&&(n=[].concat(layout_helper_toConsumableArray(w),layout_helper_toConsumableArray(P),layout_helper_toConsumableArray(O))),E.length>0&&(r=[].concat(layout_helper_toConsumableArray(C),layout_helper_toConsumableArray(E),layout_helper_toConsumableArray(F))),k.length>0&&k[0].length>0&&(i=k.map(function(e,t){return[].concat(layout_helper_toConsumableArray(w[t]),layout_helper_toConsumableArray(e),layout_helper_toConsumableArray(C[t]))})),T.length>0&&T[0].length>0&&(a=T.map(function(e,t){return[].concat(layout_helper_toConsumableArray(O[t]),layout_helper_toConsumableArray(e),layout_helper_toConsumableArray(F[t]))})),e.rowMatrix(new gg([n,r],{isDistributionEqual:s,distribution:h.rows,gutter:f.rows,unitMeasures:{width:v,height:g,border:d.width},breakPage:p.rows.map(function(e){return e+Math.max(w.length,C.length)}),extraCellLengths:[w.length,O.length]})),o=w.length>0?w[0].length:O.length>0?O[0].length:0,u=C.length>0?C[0].length:F.length>0?F[0].length:0,e.columnMatrix(new gg([i,a],{isDistributionEqual:l,distribution:h.columns,gutter:f.columns,isTransposed:!0,unitMeasures:{width:v,height:g,border:d.width},breakPage:p.columns,extraCellLengths:[o,u]})),e.centerMatrix(A),t}(this,e),this):function get(e,t,n){null===e&&(e=Function.prototype);var r=Object.getOwnPropertyDescriptor(e,t);if(void 0===r){var i=Object.getPrototypeOf(e);return null===i?void 0:get(i,t,n)}if("value"in r)return r.value;var a=r.get;return void 0!==a?a.call(n):void 0}(GridLayout.prototype.__proto__||Object.getPrototypeOf(GridLayout.prototype),"matrices",this).call(this,e)}},{key:"triggerReflow",value:function triggerReflow(){return function computeLayoutMeasurements(e){var t,n,r,i,a,o=e.rowMatrix(),u=e.columnMatrix(),c=e.centerMatrix(),s=e.measurement(),l=s.width,f=s.height,h=e.config().border,d=e.matrices(),p=d.top,y=d.bottom,g=function getMatrixMeasurement(e,t){return e?e.getLogicalSpace()[t]:0}(o,Iy),v=h.width,m=l-g-v;setMatrixMeasurement(u,Iy,m);var b=u.getViewableSpaces();bg(e,"column",b);var _=b[e.config().columnPointer],x=_.height.primary+_.height.secondary,w=f-x;setMatrixMeasurement(o,Dy,w);var k=o.getViewableSpaces();bg(e,"row",k);var C=(t=[]).concat.apply(t,computations_toConsumableArray(k.map(function(e){return e.rowHeights.primary}))),S=(n=[]).concat.apply(n,computations_toConsumableArray(k.map(function(e){return e.columnWidths.primary}))),P=(r=[]).concat.apply(r,computations_toConsumableArray(k.map(function(e){return e.columnWidths.secondary}))),A=u.getViewableSpaces(),E=(i=[]).concat.apply(i,computations_toConsumableArray(A.map(function(e){return e.columnWidths.primary}))),M=A[0].rowHeights.primary,O=(a=[]).concat.apply(a,computations_toConsumableArray(A.map(function(e){return e.rowHeights.secondary})));c.forEach(function(e,t){e.forEach(function(e,n){e.setAvailableSpace(E[n]-v,C[t]-v)})}),mg(p[0],S,M),mg(p[2],P,M),mg(y[0],S,O),mg(y[2],P,O)}(this),this.setViewInformation(),this}},{key:"gotoPage",value:function gotoPage(e,t){var n=e.toLowerCase(),r=this.getViewInformation().viewMatricesInfo[n+"Pages"],i=Math.min(Math.max(1,t),r);return this.config(function layout_defineProperty(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}({},n+"Pointer",i-1)),this.setViewInformation(),this.renderGrid(),this}},{key:"pages",value:function pages(e){var t=this.getViewInformation().viewMatricesInfo,n=e.toLowerCase();return{totalPages:t[n+"Pages"],currentPage:this.config()[n+"Pointer"]+1}}},{key:"setViewInformation",value:function setViewInformation(){var e=this.config(),t=e.rowPointer,n=e.columnPointer,r=e.border,i=function getViewMatrices(e,t,n){for(var r=e.rowMatrix(),i=e.columnMatrix(),a=e.centerMatrix(),o=e.matrices(),u=r.getViewableData(),c=i.getViewableData(),s={row:0,column:0},l=t-1;l>=0;l--){var f=Math.max(u[l].primaryMatrix.length,u[l].secondaryMatrix.length);s.row+=f}for(var h=n-1;h>=0;h--){var d=c[h],p=d.primaryMatrix,y=d.secondaryMatrix,g=Math.max(p[0]?p[0].length:0,y[0]?y[0].length:0);s.column+=g}o.top[1]=c[n].primaryMatrix,o.bottom[1]=c[n].secondaryMatrix,o.center[0]=u[t].primaryMatrix,o.center[2]=u[t].secondaryMatrix;var v=Math.max(o.center[0].length,o.center[2].length),m=Math.max(o.top[1][0]?o.top[1][0].length:0,o.bottom[1][0]?o.bottom[1][0].length:0);return o.center[1]=a.slice(s.row,s.row+v).map(function(e){return e.slice(s.column,s.column+m)}),{matrices:o,rowPages:u.length,columnPages:c.length}}(this,t,n),a=function getViewMeasurements(e){var t=e.rowMatrix(),n=e.columnMatrix(),r=e.measurement(),i=r.width,a=r.height,o=e.config(),u=o.columnPointer,c=o.rowPointer,s=t.getViewableSpaces()[c].width,l=s.primary,f=s.secondary,h=n.getViewableSpaces()[u].height,d=h.primary,p=h.secondary;return{viewWidth:[l,i-(l+f),f],viewHeight:[d,a-(d+p),p]}}(this);return a.border=r,this.viewInfo={viewMatricesInfo:i,layoutDimensions:a},this}},{key:"getViewInformation",value:function getViewInformation(){return this.viewInfo}},{key:"renderGrid",value:function renderGrid(e){if(this.mountPoint(e),!this.mountPoint())return this;var t=this.getViewInformation(),n=t.viewMatricesInfo,r=t.layoutDimensions;return function renderMatrices(e,t,n){var r=t.top,i=t.center,a=t.bottom,o=e.config().classPrefix,u=e.measurement().width,c=e.mountPoint();Eo(c,"div",[{type:Ly,matrix:r},{type:Hy,matrix:i},{type:zy,matrix:a}],o+"-grid-layout-row").each(function(e,t){var r=Ao(this);r.classed(o+"-grid-layout-row-"+t,!0),renderMatrix(e.matrix,r,e.type,n,o)}).style(Iy,Math.ceil(u)+"px")}(this,n.matrices,r),this}}],[{key:"defaultMeasurement",value:function defaultMeasurement(){return ng}},{key:"defaultConfig",value:function defaultConfig(){return tg}},{key:"create",value:function create(){return new GridLayout(null,null,this.defaultMeasurement(),this.defaultConfig())}}]),GridLayout}(),wg=function(){function defineProperties(e,t){for(var n=0;n0?o:i,v),P=Math.max(u>0?u:a,g),A=function createHeaders(e,t,n){var r=0,i={};return t>=200&&n>=200&&["title","subtitle"].forEach(function(t){var n=e[t](),a=function resolveTitleSubTitleContent(e){return"function"!=typeof e||e._sanitize?function escapeHTML(e){var t={"&":"&","<":"<",">":">",'"':""","'":"'","/":"/"};return(""+e).replace(/[&<>"'/]/g,function(e){return t[e]})}(e()):e()}(n[0]);if(a.length){var o=n[1];o.width=e.width(),o.content=a;var u=lv(o,t,e.dependencies().smartlabel,e[t+"Cell"]),c=u.height,s=u.cell;i[t+"Cell"]=s,e._composition[t]=s,r+=c+o.padding}}),{headerHeight:r,headers:i}}(e,S,P),E=A.headers,M=A.headerHeight,O=function createLegend(e,t,n,r){var i={height:n,width:r,headerHeight:t},a=e.config().legend,o=a.show,u=a.position;a.classPrefix=e.config().classPrefix;var c="left"===u||"right"===u?"vertical":"horizontal";return a.show=o?"vertical"===c&&r>200||"horizontal"===c&&n>200:o,a.align=c,fv(a,e,i,e.legends||[])}(e,M,S,P);e._composition.legend={},O.forEach(function(t){e._composition.legend[t.scaleType]=t.legend});var T=function getLegendSpace(e,t,n,r){var i={width:0,height:0};return e.map(function(e){return e.legend.measurement()}).forEach(function(e){var a,o;o=Math.min(e.width,e.maxWidth),a=Math.min(e.height,e.maxHeight),"horizontal"===t.align?i.width+o>r?(i.width=r,i.height+=a):(i.width+=o,i.height=Math.max(i.height,a)):i.height+a>n?(i.height=a,i.width+=o):(i.height+=a,i.width=Math.max(i.width,o))}),"horizontal"===t.align&&(i.width=r),i}(O,_,S,P),F="left"===k||"right"===k?T.width:0,N="top"===k||"bottom"===k?T.height:0,j={headers:E,legends:O,canvases:[e],rows:h,columns:d,values:p,cornerMatrices:c.cornerMatrices()},I={mountSpace:{height:i,width:a},headerHeight:M,legendSpace:T,canvasWidth:P,canvasHeight:S,width:P-F,height:S-M-N,minUnitHeight:e.minUnitHeight(),minUnitWidth:e.minUnitWidth()};return{layoutConfig:n=na(n,{classPrefix:m,showHeaders:b,border:na(c.metaData().border,e.config().border),layoutArrangement:C,legend:_,title:x,subtitle:w,isColumnSizeEqual:l,isRowSizeEqual:f}),components:j,measurement:I}},dv={position:"top",align:"left",padding:8},pv={position:"top",align:"left",padding:16};function canvas_local_options_defineProperty(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var yv=(canvas_local_options_defineProperty(ov={},"rows",{value:null,meta:{typeCheck:"constructor",typeExpected:"Array"}}),canvas_local_options_defineProperty(ov,"columns",{value:null,meta:{typeCheck:"constructor",typeExpected:"Array"}}),canvas_local_options_defineProperty(ov,"color",{value:null,meta:{typeCheck:"constructor",typeExpected:"Object",sanitization:function sanitization(e){return"string"==typeof e?{field:e}:e}}}),canvas_local_options_defineProperty(ov,"shape",{value:null,meta:{typeCheck:"constructor",typeExpected:"Object",sanitization:function sanitization(e){return"string"==typeof e?{field:e}:e}}}),canvas_local_options_defineProperty(ov,"size",{value:null,meta:{typeCheck:"constructor",typeExpected:"Object",sanitization:function sanitization(e){return"string"==typeof e?{field:e}:e}}}),canvas_local_options_defineProperty(ov,"detail",{value:[],meta:{typeCheck:"constructor",typeExpected:"Array"}}),canvas_local_options_defineProperty(ov,"layers",{value:null,meta:{typeCheck:"constructor",typeExpected:"Array"}}),canvas_local_options_defineProperty(ov,"transform",{value:null,meta:{typeCheck:"constructor",typeExpected:"Object"}}),canvas_local_options_defineProperty(ov,"mount",{value:null,meta:{sanitization:function sanitization(e){return"string"==typeof e?Ao(e).node():e}}}),ov),gv=(canvas_local_options_defineProperty(uv={},"title",{value:[null,null],meta:{typeCheck:["constructor","constructor"],typeExpected:["Function","Object"],spreadParams:!0,sanitization:[function(e){if("string"==typeof e){var n=function t(){return e};return n._sanitized=!0,n}return e},function(e){var t=na({},dv);return na(t,e)}]}}),canvas_local_options_defineProperty(uv,"subtitle",{value:[null,null],meta:{typeCheck:["constructor","constructor"],typeExpected:["Function","Object"],spreadParams:!0,sanitization:[function(e){if("string"==typeof e){var t=function sub(){return e};return t._sanitized=!0,t}return e},function(e){var t=na({},pv);return na(t,e)}]}}),uv),vv=function renderHeader(e,t,n,r){var i=r[n+"Cell"],a=e[""+n],o=a.position,u=a.align,c=a.padding,s=t.selectAll("."+e.classPrefix+"-inner-container").data([n]);s.exit().remove();var l=s.enter().append("div").merge(s);l.classed(e.classPrefix+"-inner-container",!0),i&&i.render(l.node()),l.selectAll("div").classed(e.classPrefix+"-inner-content",!0),l.style("width","100%"),a&&i&&l.style("float","left").style("text-align",u).style("padding-"+("top"===o?"bottom":"top"),c+"px")},mv=function renderComponents(e,t,n,r){var i=e.mount(),a=t.headers,o=t.legends,u=n.classPrefix,c=function getSkeletons(e,t,n){var r=t.layoutArrangement,i=t.classPrefix,a=r.headers,o=r.legends,u=n.canvasWidth,c=n.canvasHeight,s=Ao(e),l={},f=Eo(s,"div",[1],i+"-viz").style("width",u+"px").style("height",c+"px").selectAll("."+i+"-container").data(a);f.exit().remove();var h=f.enter().append("div").merge(f).attr("class",i+"-container").style("width",u+"px").style("padding","nullpx").style("margin",null).each(function(e){l[e]=Ao(this).classed(i+"-"+e+"-container",!0)}).selectAll("."+i+"-inner-container").data(function(e){return"group"===e?o:[]});return h.exit().remove(),h.enter().append("div").merge(h).attr("class",i+"-inner-container").style("width","auto").style("height","auto").each(function(e){l[e]=Ao(this).classed(i+"-"+e+"-container",!0)}),l}(i,n,r),s=c.title,l=c.legend,f=c.subtitle,h=c.layout,d=function prepareGridContainer(e,t,n,r){if(e){var i=t.height,a=t.width,o=Ao(e).selectAll("."+n+"-inner-content").data(["layout"],function(e){return e});o.exit().remove();var u=o.enter().append("div").merge(o).attr("class",n+"-inner-content").classed(n+"-grid-layout",!0).attr("id",n+"-grid-layout-"+r).style("height",i+"px").style("padding",null).style("width",Math.ceil(a)+"px"),c=u.selectAll("."+n+"-layout-grid-container").data(["layout2"]);c.exit().remove();var s=c.enter().append("div").merge(c);return s.classed(n+"-layout-grid-container",!0).attr("id",n+"-layout-grid-container-"+r).style("height",i+"px").style("width",Math.ceil(a)+"px"),{mount:s,container:u}}}(h.node(),r,u,e.alias()).mount,p=e.layout().getViewInformation().layoutDimensions.viewWidth[0];r.padding=p,function setLabelRotationForAxes(e){var t=0,n=e.xAxes()||[];!function(){for(var e=0;ev?(g++,m=0,v=y):g<0&&g++,i[g]=i[g]||[],v-=Math.min(t.measurement().height,v),m=Math.max(Math.min(t.measurement().width,t.measurement().maxWidth),m),i[g].push({legend:t,legendHeight:y,legendWidth:m})});var b=Eo(h,["div"],i,l+"-legend-section").each(function(e,t){return Ao(void 0).classed(l+"-legend-section-"+t,!0)}).classed(l+"-legend-vertical-section",!0).style("width",function(e){return e[0].legendWidth+"px"});Eo(b,["div"],function(e){return e},l+"-legend-components",{},function(e){return e.legend.id()}).each(function(e){e.legend.mount(this)}).style("width",function(e){return e.legendWidth+"px"})}else{var _=Eo(h,"div",[1],l+"-legend-section").classed(l+"-legend-horizontal-section",!0).classed(l+"-legend-section-0",!0).style("width",p+"px");Eo(_,"div",n,l+"-legend-components",{},function(e){return e.legend.id()}).each(function(e){e.legend.mount(this)}).style("width",function(e){return e.legend.measurement().width+"px"})}}(n,l,o,r),function shiftHeaders(e,t,n,r){var i=e.classPrefix,a=e.title,o=e.subtitle,u=e.legend,c=n.legendSpace;t+="left"===u.position?c.width:0,a&&Ao(r).select("."+i+"-title-container").style("width","left"===a.align?"calc(100% - "+t+"px":"100%").style("margin-left","left"===a.align?t+"px":0),o&&Ao(r).select("."+i+"-subtitle-container").style("width","left"===o.align?"calc(100% - "+t+"px":"100%").style("margin-left","left"===o.align?t+"px":0),Ao(r).select("."+i+"-legend-horizontal-section").style("margin-left",t+"px").style("width",c.width-t+"px").selectAll("."+i+"-legend-body, ."+i+"-legend-title").style("max-width",c.width-t+"px"),Ao(r).select("."+i+"-legend-vertical-section").style("margin-left",null).selectAll("."+i+"-legend-body, ."+i+"-legend-title").style("max-width",null)}(n,p,r,i)}),e.composition().visualGroup.matrixInstance().value.each(function(e){e.valueOf().parentContainer(h.node())})};function canvas_helper_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t","\"","'","/","title_maker_resolveTitleSubTitleContent","_createHeading","title_maker_createHeaders","createLegend","legend_maker_createLegend","legendSpace","getLegendSpace","legendInfo","legend_maker_getLegendSpace","legendWidth","legendHeight","canvases","mountSpace","TITLE_CONFIG","SUB_TITLE_CONFIG","localOptions","canvas_local_options_defineProperty","_localOptions","canvasOptions","_sanitized","_canvasOptions","sub","renderer_renderHeader","renderHeader","headerCell","cont","renderComponents","_getSkeletons","getSkeletons","innerContainer","layoutType","renderer_getSkeletons","prepareGridContainer","innerSel","renderer_prepareGridContainer","setLabelRotationForAxes","renderLegend","legendComponents","sectionComponents","legendMount","legWidth","legHeight","sections","currHeight","currWidth","leg","renderer_renderLegend","shiftHeaders","shifter","renderer_shiftHeaders","helper_setupChangeListener","setupChangeListener","allOptions","_allOptions","canvas_helper_toConsumableArray","equalityChecker","option","dispatchProps","_cachedProps","applyInteractionPolicy","policies","firebolt_defaultInteractionPolicy","defaultInteractionPolicy","isMeasure","canvas_firebolt_toConsumableArray","getFieldsFromChannel","colDim","fieldInf","unitFireBolt","unitColFacets","equals","unitRowFacets","propagateWith","defaultCrossInteractionPolicy","propagationCanvasAlias","propagationUnit","canvas_firebolt","GroupFireBolt","canvas_firebolt_classCallCheck","_interactionPolicy","_crossInteractionPolicy","changeBehaviourStateOnPropagation","changeSideEffectStateOnPropagation","canvas_canvas","Canvas","globalDependencies","canvas_classCallCheck","canvas_possibleConstructorReturn","_transactor","canvas_slicedToArray","initedComponents","initCanvas","register","_getRenderDetails","prepareLayout","triggerReflow","promises","all","getAxes","initialSettings","regEntry","COMPONENTS","SUBREGISTRIES","regObj","globalCache","defaultRegistry","overrideRegistryDefinitions","overrideRegistry","muze_muze","muze","_transactor2","muze_slicedToArray","env","globalStore","componentSubRegistryDef","settings","withSettings","enableChainedTransaction","transactionModel","transactionEndpoint","transactionItems","_slicedToArray","SmartlabelManager_default","SideEffects","standards","SurrogateSideEffect","SpawnableSideEffect","Behaviours","PersistentBehaviour","VolatileBehaviour","DataModel","muze_package","layerFactory","operators_namespaceObject","utils","require","lookupWhat","lookupDetails","lookupTarget","deps","__webpack_exports__"],"mappings":"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","file":"muze.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"muze\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"muze\"] = factory();\n\telse\n\t\troot[\"muze\"] = factory();\n})(window, function() {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 7);\n","!function(e,t){\"object\"==typeof exports&&\"object\"==typeof module?module.exports=t():\"function\"==typeof define&&define.amd?define(\"DataModel\",[],t):\"object\"==typeof exports?exports.DataModel=t():e.DataModel=t()}(window,function(){return function(e){var t={};function n(r){if(t[r])return t[r].exports;var i=t[r]={i:r,l:!1,exports:{}};return e[r].call(i.exports,i,i.exports,n),i.l=!0,i.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(e,\"__esModule\",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&\"object\"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,\"default\",{enumerable:!0,value:e}),2&t&&\"string\"!=typeof e)for(var i in e)n.d(r,i,function(t){return e[t]}.bind(null,i));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,\"a\",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p=\"\",n(n.s=1)}([function(e){e.exports={name:\"datamodel\",description:\"Relational algebra compliant in-memory tabular data store\",homepage:\"https://github.com/chartshq/datamodel\",version:\"2.0.2\",license:\"MIT\",main:\"dist/datamodel.js\",author:\"Charts.com \",keywords:[\"datamodel\",\"data\",\"relational\",\"algebra\",\"model\",\"muze\",\"fusioncharts\",\"table\",\"tabular\",\"operation\"],repository:{type:\"git\",url:\"https://github.com/chartshq/datamodel.git\"},contributors:[{name:\"Akash Goswami\",email:\"akash@charts.com\"},{name:\"Subhash Haldar\",email:\"subhash@charts.com\"},{name:\"Rousan Ali\",email:\"rousan@charts.com\",url:\"https://rousan.io\"},{name:\"Ujjal Kumar Dutta\",email:\"ujjal@charts.com\"}],dependencies:{\"d3-dsv\":\"^1.0.8\"},devDependencies:{\"babel-cli\":\"6.26.0\",\"babel-core\":\"^6.26.3\",\"babel-eslint\":\"6.1.2\",\"babel-loader\":\"^7.1.4\",\"babel-plugin-transform-runtime\":\"^6.23.0\",\"babel-preset-env\":\"^1.7.0\",\"babel-preset-es2015\":\"^6.24.1\",\"babel-preset-flow\":\"^6.23.0\",chai:\"3.5.0\",\"cross-env\":\"^5.0.5\",eslint:\"3.19.0\",\"eslint-config-airbnb\":\"15.1.0\",\"eslint-plugin-import\":\"2.7.0\",\"eslint-plugin-jsx-a11y\":\"5.1.1\",\"eslint-plugin-react\":\"7.3.0\",\"istanbul-instrumenter-loader\":\"^3.0.0\",jsdoc:\"3.5.5\",json2yaml:\"^1.1.0\",karma:\"1.7.1\",\"karma-chai\":\"0.1.0\",\"karma-chrome-launcher\":\"2.1.1\",\"karma-coverage-istanbul-reporter\":\"^1.3.0\",\"karma-mocha\":\"1.3.0\",\"karma-spec-reporter\":\"0.0.31\",\"karma-webpack\":\"2.0.3\",marked:\"^0.5.0\",mocha:\"3.4.2\",\"mocha-webpack\":\"0.7.0\",\"transform-runtime\":\"0.0.0\",webpack:\"^4.12.0\",\"webpack-cli\":\"^3.0.7\",\"webpack-dev-server\":\"^3.1.4\"},scripts:{test:\"npm run lint && npm run ut\",ut:\"karma start karma.conf.js\",utd:\"karma start --single-run false --browsers Chrome karma.conf.js \",build:\"webpack --mode production\",\"build:dev\":\"webpack --mode development\",start:\"webpack-dev-server --config webpack.config.dev.js --mode development --open\",lint:\"eslint ./src\",\"lint-errors\":\"eslint --quiet ./src\",docs:\"rm -rf yaml && mkdir yaml && jsdoc -c jsdoc.conf.json\"}}},function(e,t,n){var r=n(2);e.exports=r.default?r.default:r},function(e,t,n){\"use strict\";n.r(t);var r={};n.r(r),n.d(r,\"DataFormat\",function(){return o}),n.d(r,\"DimensionSubtype\",function(){return u}),n.d(r,\"MeasureSubtype\",function(){return c}),n.d(r,\"FieldType\",function(){return f}),n.d(r,\"FilteringMode\",function(){return s});var i={};n.r(i),n.d(i,\"DSVArr\",function(){return Me}),n.d(i,\"DSVStr\",function(){return Ve}),n.d(i,\"FlatJSON\",function(){return Ye}),n.d(i,\"Auto\",function(){return Be});var a={};n.r(a),n.d(a,\"sum\",function(){return ct}),n.d(a,\"avg\",function(){return ft}),n.d(a,\"min\",function(){return st}),n.d(a,\"max\",function(){return lt}),n.d(a,\"first\",function(){return dt}),n.d(a,\"last\",function(){return pt}),n.d(a,\"count\",function(){return ht}),n.d(a,\"sd\",function(){return vt});var o={FLAT_JSON:\"FlatJSON\",DSV_STR:\"DSVStr\",DSV_ARR:\"DSVArr\",AUTO:\"Auto\"},u={CATEGORICAL:\"categorical\",TEMPORAL:\"temporal\",GEO:\"geo\"},c={DISCRETE:\"discrete\"},f={MEASURE:\"measure\",DIMENSION:\"dimension\"},s={NORMAL:\"normal\",INVERSE:\"inverse\",ALL:\"all\"};function l(e,t){e.length>0&&e.split(\",\").forEach(function(e){var n=e.split(\"-\"),r=+n[0],i=+(n[1]||n[0]);if(i>=r)for(var a=r;a<=i;a+=1)t(a)})}var d=function(){function e(e,t){for(var n=0;n=0;)o=e[a+1],-1!==r.indexOf(o)&&i.push({index:a,token:o});return i},m.formatAs=function(e,t){var n,r=h(e),i=m.findTokens(t),a=m.getTokenDefinitions(),o=String(t),u=m.TOKEN_PREFIX,c=void 0,f=void 0,s=void 0;for(s=0,n=i.length;s=0;d--)(f=a[d].index)+1!==l.length-1?(void 0===u&&(u=l.length),s=l.substring(f+2,u),l=l.substring(0,f+2)+RegExp.escape(s)+l.substring(u,l.length),u=f):u=f;for(d=0;d1){n=Math.abs(r[1]-r[0]);for(var i=2,a=r.length;i=y&&t.data=r.stops[r.stops.length-1]}).forEach(function(e){c[e.index]=r.stops[r.stops.length-1]+\"-\"+h}),r.stops.unshift(r.start),b=new Set(r.stops),dr.stops[r.stops.length-1]&&b.add(h),b=[].concat(function(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t3&&void 0!==arguments[3]&&arguments[3],i=arguments.length>4&&void 0!==arguments[4]?arguments[4]:G.CROSS,a=[],o=[],u=n||K,c=e.getFieldspace(),f=t.getFieldspace(),s=c.name,d=f.name,p=c.name+\".\"+f.name,h=L(c,f);if(s===d)throw new Error(\"DataModels must have different alias names\");return c.fields.forEach(function(e){var t=E({},e.schema);-1===h.indexOf(t.name)||r||(t.name=c.name+\".\"+t.name),a.push(t)}),f.fields.forEach(function(e){var t=E({},e.schema);-1!==h.indexOf(t.name)?r||(t.name=f.name+\".\"+t.name,a.push(t)):a.push(t)}),l(e._rowDiffset,function(e){var n=!1,p=void 0;l(t._rowDiffset,function(t){var l=[],v={};v[s]={},v[d]={},c.fields.forEach(function(t){l.push(t.data[e]),v[s][t.name]=t.data[e]}),f.fields.forEach(function(e){-1!==h.indexOf(e.schema.name)&&r||l.push(e.data[t]),v[d][e.name]=e.data[t]});var m=Ke(v[s]),y=Ke(v[d]);if(u(m,y)){var g={};l.forEach(function(e,t){g[a[t].name]=e}),n&&G.CROSS!==i?o[p]=g:(o.push(g),n=!0,p=e)}else if((i===G.LEFTOUTER||i===G.RIGHTOUTER)&&!n){var b={},_=c.fields.length-1;l.forEach(function(e,t){b[a[t].name]=t<=_?e:null}),n=!0,p=e,o.push(b)}})}),new ut(o,a,{name:p})}function z(e,t){var n=\"\"+e,r=\"\"+t;return nr?1:0}function X(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:z;return e.length>1&&function e(t,n,r,i){if(r===n)return t;var a=n+Math.floor((r-n)/2);return e(t,n,a,i),e(t,a+1,r,i),function(e,t,n,r,i){for(var a=e,o=[],u=t;u<=r;u+=1)o[u]=a[u];for(var c=t,f=n+1,s=t;s<=r;s+=1)c>n?(a[s]=o[f],f+=1):f>r?(a[s]=o[c],c+=1):i(o[c],o[f])<=0?(a[s]=o[c],c+=1):(a[s]=o[f],f+=1)}(t,n,a,r,i),t}(e,0,e.length-1,t),e}function Q(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);ta?\"desc\"===t?-1:1:0}}return r}function Z(e,t){var n=new Map,r=[];return e.forEach(function(e){var i=e[t];n.has(i)?r[n.get(i)][1].push(e):(r.push([i,[e]]),n.set(i,r.length-1))}),r}function ee(e,t,n){var r={label:e[0]};return t.reduce(function(t,r,i){return t[r]=e[1].map(function(e){return e[n[i].index]}),t},r),r}function te(e,t,n,r,i){var a={schema:[],data:[],uids:[]},o=(i=Object.assign({},{addUid:!1,columnWise:!1},i)).addUid,u=r&&r.length>0,c=[];if(n.split(\",\").forEach(function(t){for(var n=0;n=0;u--)i=t[u][0],a=t[u][1],(o=Ze(r,i))&&(S(a)?X(n,function(e,t){return a(e[o.index],t[o.index])}):j(a)?function(){var e=Z(n,o.index),t=a[a.length-1],i=a.slice(0,a.length-1),u=i.map(function(e){return Ze(r,e)});e.forEach(function(e){e.push(ee(e,i,u))}),X(e,function(e,n){var r=e[2],i=n[2];return t(r,i)}),n.length=0,e.forEach(function(e){n.push.apply(n,Q(e[1]))})}():(a=\"desc\"===String(a).toLowerCase()?\"desc\":\"asc\",X(n,$(o.type,a,o.index))));e.uids=[],n.forEach(function(t){e.uids.push(t.pop())})}(a,r),i.columnWise){var f=Array.apply(void 0,Q(Array(a.schema.length))).map(function(){return[]});a.data.forEach(function(e){e.forEach(function(e,t){f[t].push(e)})}),a.data=f}return a}function ne(e,t){var n={},r=[],i=[],a=[],o=e.getFieldspace(),u=t.getFieldspace(),c=o.fieldsObj(),f=u.fieldsObj(),s=o.name+\" union \"+u.name;if(!M(e._colIdentifier.split(\",\").sort(),t._colIdentifier.split(\",\").sort()))return null;function d(e,t,r){l(e._rowDiffset,function(e){var o={},u=\"\";i.forEach(function(n){var r=t[n].data[e];u+=\"-\"+r,o[n]=r}),n[u]||(r&&a.push(o),n[u]=!0)})}return e._colIdentifier.split(\",\").forEach(function(e){var t=c[e];r.push(E({},t.schema)),i.push(t.schema.name)}),d(t,f,!1),d(e,c,!0),new ut(a,r,{name:s})}function re(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t1&&void 0!==arguments[1]?arguments[1]:{},n={},r=t,i=e.getPartialFieldspace().getMeasure(),a=se.defaultReducer();return\"function\"==typeof t&&(a=t),Object.entries(i).forEach(function(e){var o=le(e,1)[0];\"string\"==typeof t[o]&&(r[o]=se.resolve(r[o])?se.resolve(r[o]):a),\"function\"!=typeof t[o]&&(r[o]=void 0),n[o]=r[o]||se.resolve(i[o].defAggFn())||a}),n}(e,n),o=e.getPartialFieldspace(),u=o.fieldsObj(),c=o.name,f=[],s=[],d=[],p={},h=[],v=void 0;Object.entries(u).forEach(function(e){var t=le(e,2),n=t[0],r=t[1];(-1!==i.indexOf(n)||a[n])&&(d.push(E({},r.schema)),\"measure\"===r.schema.type&&\"discrete\"!==r.schema.subtype?s.push(n):\"dimension\"!==r.schema.type&&\"discrete\"!==r.schema.subtype||f.push(n))});var m=0;return l(e._rowDiffset,function(e){var t=\"\";f.forEach(function(n){t=t+\"-\"+u[n].data[e]}),void 0===p[t]?(p[t]=m,h.push({}),f.forEach(function(t){h[m][t]=u[t].data[e]}),s.forEach(function(t){h[m][t]=[u[t].data[e]]}),m+=1):s.forEach(function(n){h[p[t]][n].push(u[n].data[e])})}),h.forEach(function(e){var t=e;s.forEach(function(n){t[n]=a[n](e[n])})}),r?(r.__calculateFieldspace(),v=r):v=new yt(h,d,{name:c}),v}function pe(e,t){var n=L(e.getFieldspace(),t.getFieldspace());return function(e,t){var r=!0;return n.forEach(function(n){r=!(e[n].value!==t[n].value||!r)}),r}}function he(e,t){var n={},r=[],i=[],a=[],o=e.getFieldspace(),u=t.getFieldspace(),c=o.fieldsObj(),f=u.fieldsObj(),s=o.name+\" union \"+u.name;if(!M(e._colIdentifier.split(\",\").sort(),t._colIdentifier.split(\",\").sort()))return null;function d(e,t){l(e._rowDiffset,function(e){var r={},o=\"\";i.forEach(function(n){var i=t[n].data[e];o+=\"-\"+i,r[n]=i}),n[o]||(a.push(r),n[o]=!0)})}return e._colIdentifier.split(\",\").forEach(function(e){var t=c[e];r.push(E({},t.schema)),i.push(t.schema.name)}),d(e,c),d(t,f),new yt(a,r,{name:s})}function ve(e,t,n){return W(e,t,n,!1,G.LEFTOUTER)}function me(e,t,n){return W(t,e,n,!1,G.RIGHTOUTER)}var ye=function(){function e(e,t){for(var n=0;nn&&(n=e)}),[t,n]}(this.data)}},{key:\"parse\",value:function(e){return e=parseFloat(e,10),Number.isNaN(e)?null:e}},{key:\"unit\",value:function(){return this.fieldUnit}},{key:\"scale\",value:function(){return this.fieldScale}},{key:\"numberFormat\",value:function(){var e=this.fieldNumberformat;return function(t){return e(t)}}},{key:\"defAggFn\",value:function(){return this.fieldDefAggFn}}]),t}(),Oe=function(){function e(e,t){for(var n=0;n=a?c=!0:(r=e.charCodeAt(o++))===Pe?f=!0:r===Ce&&(f=!0,e.charCodeAt(o)===Pe&&++o),e.slice(i+1,t-1).replace(/\"\"/g,'\"')}for(;o2&&void 0!==arguments[2]?arguments[2]:{},i=arguments[3],a=void 0;t!==Y?(a={op:t,meta:r,criteria:i},e._derivation.push(a)):(a=[].concat(Ge(i)),e._derivation.length=0,(n=e._derivation).push.apply(n,Ge(a)))},ze=function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=n.operation||q,i=n.filterByMeasure||!1,a=[];a=t.length?t.map(function(e){return function(e){var t=e.getData(),n=t.schema,r=e.getFieldsConfig(),a=e.getFieldspace().fieldsObj(),o=t.data,u=Object.values(r).reduce(function(e,t){return e[t.def.name]=a[t.def.name].domain(),e},{});return function(e){return!!o.length&&o.some(function(t){return n.every(function(n){if(!(n.name in e))return!0;var a=e[n.name].valueOf();if(i&&n.type===f.MEASURE)return a>=u[n.name][0]&&a<=u[n.name][1];if(n.type!==f.DIMENSION)return!0;var o=r[n.name].index;return t[o]===e[n.name].valueOf()})})}}(e)}):[function(){return!1}];var o=void 0;r===q?o=e.clone(!1,!1).select(function(e){return a.every(function(t){return t(e)})},{saveChild:!1,mode:s.ALL}):o=e.clone(!1,!1).select(function(e){return a.some(function(t){return t(e)})},{mode:s.ALL,saveChild:!1});return o},Xe=function(e,t,n,r){var i=e.clone(r.saveChild),a=function(e,t,n,r){var i=[],a=-1,o=void 0,u=function(e){return n(qe(t,e),e)};return r.mode===s.INVERSE&&(u=function(e){return!n(qe(t,e))}),l(e,function(e){u(e)&&(-1!==a&&e===a+1?(o=i.length-1,i[o]=i[o].split(\"-\")[0]+\"-\"+e):i.push(\"\"+e),a=e)}),i.join(\",\")}(i._rowDiffset,i.getPartialFieldspace().fields,t,n);return i._rowDiffset=a,i.__calculateFieldspace().calculateFieldsConfig(),r.saveChild&&We(i,U,{config:n},t),i},Qe=function(e,t,n,r){var i=e.clone(n.saveChild),a=t;return n.mode===s.INVERSE&&(a=r.filter(function(e){return-1===t.indexOf(e)})),i._colIdentifier=a.join(\",\"),i.__calculateFieldspace().calculateFieldsConfig(),n.saveChild&&We(i,H,{projField:t,config:n,actualProjField:a},null),i},$e=function(e,t,n,r){r=Object.assign(Object.assign({},xe),r);var a=i[r.dataFormat];if(!a||\"function\"!=typeof a)throw new Error(\"No converter function found for \"+r.dataFormat+\" format\");var o=a(t,r),u=Je(o,2),c=u[0],f=u[1],s=Fe(f,n,c),l=R.createNamespace(s,r.name);return e._partialFieldspace=l,e._rowDiffset=f.length&&f[0].length?\"0-\"+(f[0].length-1):\"\",e._colIdentifier=n.map(function(e){return e.name}).join(),e},Ze=function(e,t){for(var n=0;n2&&void 0!==arguments[2]?arguments[2]:{},i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},a=i.nonTraversingModel,o=i.excludeModels||[];t!==a&&((!o.length||-1===o.indexOf(t))&&t.handlePropagation(n,r),t._children.forEach(function(t){var a=et(n,t),o=Je(a,2),u=o[0],c=o[1];e(t,[u,c],r,i)}))},nt=function(e,t,n,r){var i=void 0,a=void 0,o=n.propagationNameSpace,u=n.propagateToSource,c=n.sourceId,f=r.propagateInterpolatedValues,s=[];if(null===e&&!0!==r.persistent)s=[{criteria:[]}];else{var l,d=Object.values(o.mutableActions);!1!==u&&(d=d.filter(function(e){return e.config.sourceId!==c}));var p=d.filter(function(e){return(r.filterFn||function(){return!0})(e,r)}).map(function(e){return e.config.criteria}),h=[];if(!1!==u){var v=Object.values(o.mutableActions);v.forEach(function(e){var t=e.config;!1===t.applyOnSource&&t.action===r.action&&t.sourceId!==c&&(h.push(e.model),(i=v.filter(function(t){return t!==e}).map(function(e){return e.config.criteria})).length&&s.push({criteria:i,models:e.model,path:function e(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];return null!==t._parent&&(n.push(t),e(t._parent,n)),n}(e.model)}))})}i=(l=[]).concat.apply(l,[].concat(Ge(p),[e])).filter(function(e){return null!==e}),s.push({criteria:i,excludeModels:[].concat(h,Ge(r.excludeModels||[]))})}var m=t.model,y=Object.assign({sourceIdentifiers:e,propagationSourceId:c},r),g=t.groupByModel;f&&g&&(a=ze(g,i,{filterByMeasure:f}),tt(g,a,y)),s.forEach(function(e){var t=ze(m,e.criteria),n=e.path;if(n){var r=function(e,t){for(var n=0,r=t.length;n0&&void 0!==arguments[0])||arguments[0],t=void 0;if(!1===(!(arguments.length>1&&void 0!==arguments[1])||arguments[1])){var n=this.getData({getAllFields:!0}),r=n.data,i=n.schema,a=r.map(function(e){var t={};return i.forEach(function(n,r){t[n.name]=e[r]}),t});t=new this.constructor(a,i)}else t=new this.constructor(this);return e&&this._children.push(t),t}},{key:\"project\",value:function(e,t){var n={mode:s.NORMAL,saveChild:!0};t=Object.assign({},n,t);var r=this.getFieldsConfig(),i=Object.keys(r),a=t.mode,o=e.reduce(function(e,t){return\"RegExp\"===t.constructor.name?e.push.apply(e,function(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t1&&void 0!==arguments[1]?arguments[1]:[];We(this,Y,null,t),this._parent=e,e._children.push(this)}}]),e}(),at=function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function(e,t){var n=[],r=!0,i=!1,a=void 0;try{for(var o,u=e[Symbol.iterator]();!(r=(o=u.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){i=!0,a=e}finally{try{!r&&u.return&&u.return()}finally{if(i)throw a}}return n}(e,t);throw new TypeError(\"Invalid attempt to destructure non-iterable instance\")}}(),ot=function(){function e(e,t){for(var n=0;n1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{saveChild:!0},r=\"\"+e.join(),i=[this,e,t],a=de.apply(void 0,i);return n.saveChild&&(this._children.push(a),We(a,V,{fieldsArr:e,groupByString:r,defaultReducer:se.defaultReducer()},t)),a._parent=this,a}},{key:\"sort\",value:function(e){var t=this.getData({order:\"row\",sort:e}),n=[t.schema.map(function(e){return e.name})].concat(t.data),r=new this.constructor(n,t.schema,{dataFormat:\"DSVArr\"});return r._sortingDetails=e,r}},{key:\"addField\",value:function(e){var t=e.fieldName();this._colIdentifier+=\",\"+t;var n=this._partialFieldspace;if(n.fieldsObj()[e.fieldName()]){var r=n.fields.findIndex(function(e){return e.name===t});r>=0&&(n.fields[r]=e)}else n.fields.push(e);return this.__calculateFieldspace().calculateFieldsConfig(),this}},{key:\"calculateVariable\",value:function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{saveChild:!0,replaceVar:!1},r=this.getFieldsConfig(),i=t.slice(0,t.length-1),a=t[t.length-1];if(r[e.name]&&!n.replaceVar)throw new Error(e.name+\" field already exists in model.\");var o=i.map(function(e){var t=r[e];if(!t)throw new Error(e+\" is not a valid column name.\");return t.index}),u=this.clone(),c=u.getFieldspace().fields,f=o.map(function(e){return c[e]}),s=[];l(u._rowDiffset,function(e){var t=f.map(function(t){return t.data[e]});s[e]=a.apply(void 0,function(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t1&&void 0!==arguments[1]?arguments[1]:{},n=arguments[2],r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},i=t.isMutableAction,a=t.sourceId,o=t.payload,u=function e(t){return t._parent?e(t._parent):t}(this),c=u._propagationNameSpace,f={groupByModel:function e(t){return t._parent&&t._derivation.find(function(e){return\"group\"!==e.op})?e(t._parent):t}(this),model:u};return n&&function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments[2],r=void 0,i=t.isMutableAction,a=t.criteria,o=t.action+\"-\"+t.sourceId;r=i?e.mutableActions:e.immutableActions,null===a?delete r[o]:r[o]={model:n,config:t}}(c,t,this),nt(e,f,{propagationNameSpace:c,sourceId:a},Object.assign({payload:o},t)),i&&function(e,t,n){var r=e.immutableActions;for(var i in r){var a=r[i].config,o=n.config.sourceId,u=!n.propConfig.filterImmutableAction||n.propConfig.filterImmutableAction(a,n.config);if(a.sourceId!==o&&u){var c=a.criteria;nt(c,t,{propagationNameSpace:e,propagateToSource:!1,sourceId:o},a)}}}(c,f,{config:t,propConfig:r}),this}},{key:\"on\",value:function(e,t){switch(e){case\"propagation\":this._onPropagation.push(t)}return this}},{key:\"unsubscribe\",value:function(e){switch(e){case\"propagation\":this._onPropagation=[]}return this}},{key:\"handlePropagation\",value:function(e,t){var n=this;this._onPropagation.forEach(function(r){return r.call(n,e,t)})}},{key:\"bin\",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=this.clone(),r=t.name||e+\"_binned\";if(this.getFieldsConfig()[r]||!this.getFieldsConfig()[e])throw new Error(\"Field \"+e+\" already exists.\");var i=I(this._partialFieldspace.fields.find(function(t){return t.name===e}),this._rowDiffset,t),a=Fe([i.data],[{name:r,type:f.MEASURE,subtype:\"discrete\",bins:{range:i.range,mid:i.mid}}],[r])[0];return n.addField(a),We(n,J,{measureName:e,config:t,binFieldName:r},null),n}}],[{key:\"Reducers\",get:function(){return se}}]),t}(),ct=oe.sum,ft=oe.avg,st=oe.min,lt=oe.max,dt=oe.first,pt=oe.last,ht=oe.count,vt=oe.std,mt=n(0);ut.Operators={compose:function(){for(var e=arguments.length,t=Array(e),n=0;n1&&void 0!==arguments[1]?arguments[1]:{saveChild:!0}).saveChild;return t.forEach(function(e){n=e(n),i.push.apply(i,function(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t1&&r.dispose(),n}},bin:function(){for(var e=arguments.length,t=Array(e),n=0;n2?(i=arguments.length<=0?void 0:arguments[0],n=arguments.length<=1?void 0:arguments[1],o=arguments.length<=2?void 0:arguments[2]):(i=null,n=arguments.length<=0?void 0:arguments[0],o=arguments.length<=1?void 0:arguments[1]),t=o(y),(e=r=new _(t.fn)).addDependencies.apply(e,P(t.dependencies)),this._addPropInModel(i,function(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}({},n,r)),this}},{key:\"_addPropInModel\",value:function(e,t){return this._graph.createNodesFrom(t,e),this}},{key:\"on\",value:function(e,t,r){var n,i=e instanceof Array?e:[e],o=this._graph.createElectricNodeOf(i,{type:\"CurrFrame\",fn:t});r&&(n=this._graph.stopPropagation().setPropagationOverride(\"nextFrame\")).resetNodeValue.apply(n,P(e));return o}},{key:\"next\",value:function(e,t,r){var n,i=e instanceof Array?e:[e],o=this._graph.createElectricNodeOf(i,{type:\"NextFrame\",fn:t});r&&(n=this._graph.stopPropagation().setPropagationOverride(\"currentFrame\")).resetNodeValue.apply(n,P(e));return o}},{key:\"lock\",value:function(){return this._lockFlag=!0,this._reqQ.length=0,this}},{key:\"unlock\",value:function(){return this._lockFlag=!1,this.setProp.apply(this,P(this._reqQ)),this._reqQ.length=0,this}},{key:\"prop\",value:function(){var e,t=void 0,r=void 0;switch(e=arguments.length){case 1:t=arguments.length<=0?void 0:arguments[0];break;case 2:t=arguments.length<=0?void 0:arguments[0],r=arguments.length<=1?void 0:arguments[1];break;default:return this}return 2===e?(this._lockFlag?this._reqQ.push([t,r]):this.setProp([t,r]),this):this._graph.getNodeValue(t)}},{key:\"setProp\",value:function(){for(var e,t=this,r=arguments.length,n=Array(r),i=0;i whenever a break is necessary. This is to recgonize one\n * generalized format independent of the implementation (canvas based solution, svg based solution). This method\n * converts the output of getSmartText().text to array of lines if the text is wrapped. It sets a named property\n * `lines` on the object passed as parameter.\n *\n * @param {Object} smartlabel - the object returned by getSmartText based on which line arr which to be formed.\n *\n * @return {Object} - The same object which was passed in the arguments. Also a named property `lines` is set.\n */\nSmartLabelManager.textToLines = function (smartlabel) {\n smartlabel = smartlabel || {};\n\n if (!smartlabel.text) {\n smartlabel.text = '';\n } else if (typeof smartlabel.text !== 'string') {\n smartlabel.text = smartlabel.text.toString();\n }\n\n smartlabel.lines = smartlabel.text.split(/\\n|/ig);\n return smartlabel;\n};\n\n// Saves all the instance created so far\nSmartLabelManager.store = {};\n\n// Calculates space taken by a character with an approximation value which is calculated by repeating the\n// character by string length times.\nSmartLabelManager.prototype._calCharDimWithCache = function (text, calculateDifference, length) {\n if (!this._init) {\n return false;\n }\n\n var size,\n csArr,\n tw,\n twi,\n cachedStyle,\n asymmetricDifference,\n maxAdvancedCacheLimit = this.options.maxCacheLimit,\n container = this._container,\n style = this.style || {},\n cache = this._advancedCache || (this._advancedCache = {}),\n advancedCacheKey = this._advancedCacheKey || (this._advancedCacheKey = []),\n cacheName = text + (style.fontSize || BLANK) + (style.fontFamily || BLANK) + (style.fontWeight || BLANK) + (style.fontStyle || BLANK),\n cacheInitName = text + 'init' + (style.fontSize || BLANK) + (style.fontFamily || BLANK) + (style.fontWeight || BLANK) + (style.fontStyle || BLANK);\n\n htmlSplCharSpace[text] && (text = htmlSplCharSpace[text]);\n\n if (!calculateDifference) {\n asymmetricDifference = 0;\n } else {\n if ((asymmetricDifference = cache[cacheInitName]) === undefined) {\n container.innerHTML = text.repeat ? text.repeat(length) : Array(length + 1).join(text); // jshint ignore:line\n tw = container.offsetWidth;\n\n container.innerHTML = text;\n twi = container.offsetWidth;\n\n asymmetricDifference = cache[cacheInitName] = (tw - length * twi) / (length + 1);\n advancedCacheKey.push(cacheInitName);\n if (advancedCacheKey.length > maxAdvancedCacheLimit) {\n delete cache[advancedCacheKey.shift()];\n }\n }\n }\n\n if (cachedStyle = cache[cacheName]) {\n csArr = cachedStyle.split(',');\n return {\n width: parseFloat(csArr[0], 10),\n height: parseFloat(csArr[1], 10)\n };\n }\n\n container.innerHTML = text;\n\n size = {\n height: container.offsetHeight,\n width: container.offsetWidth + asymmetricDifference\n };\n\n cache[cacheName] = size.width + ',' + size.height;\n advancedCacheKey.push(cacheName);\n if (advancedCacheKey.length > maxAdvancedCacheLimit) {\n delete cache[advancedCacheKey.shift()];\n }\n\n return size;\n};\n\n// Provide function to calculate the height and width based on the environment and available support from dom.\nSmartLabelManager.prototype._getWidthFn = function () {\n var contObj = this._containerObj,\n container = this._container,\n svgText = contObj.svgText;\n\n if (svgText) {\n return function (str) {\n var bbox, width;\n\n svgText.textContent = str;\n bbox = svgText.getBBox();\n width = bbox.width - SVG_BBOX_CORRECTION;\n if (width < 1) {\n width = bbox.width;\n }\n\n return width;\n };\n } else {\n return function (str) {\n container.innerHTML = str;\n return container.offsetWidth;\n };\n }\n};\n\n/*\n * Sets the style based on which the text's metrics to be calculated.\n *\n * @param {Object} style - The style object which affects the text size\n * {\n * fontSize / 'font-size' : MUST BE FOLLOWED BY PX (10px, 11px)\n * fontFamily / 'font-family'\n * fontWeight / 'font-weight'\n * fontStyle / 'font-style'\n * }\n *\n * @return {SmartLabelManager} - Current instance of SmartLabelManager\n */\nSmartLabelManager.prototype.setStyle = function (style) {\n if (!this._init) {\n return this;\n }\n\n var sCont;\n\n if (style === this.style && !this._styleNotSet) {\n return;\n }\n\n if (!style) {\n style = this.style;\n }\n\n slLib.setLineHeight(style);\n this.style = style;\n\n this._containerObj = sCont = this._containerManager.get(style);\n\n if (this._containerObj) {\n this._container = sCont.node;\n this._context = sCont.context;\n this._cache = sCont.charCache;\n this._lineHeight = sCont.lineHeight;\n this._styleNotSet = false;\n } else {\n this._styleNotSet = true;\n }\n\n return this;\n};\n\n/*\n * Decides whether ellipses to be shown if the node is truncated\n *\n * @param {Boolean} useEllipses - decides if a ellipses to be appended if the text is truncated. Default: false\n *\n * @return {SmartLabelManager} - Current instance of SmartLabelManager\n */\nSmartLabelManager.prototype.useEllipsesOnOverflow = function (useEllipses) {\n if (!this._init) {\n return this;\n }\n this._showNoEllipses = !useEllipses;\n return this;\n};\n\n/*\n * Get wrapped or truncated text if a bound box is defined around it. The result text would be separated by
\n * if wrapped\n *\n * @param {String} text - the subject text\n * @param {Number} maxWidth - width in px of the the bound box\n * @param {Number} maxHeight - height in px of the the bound box\n * @param {Boolean} noWrap - whether the text to be wrapped. Default false.\n *\n * @return {Object} - The metrics of the text bounded by the box\n * {\n * height : height of the wrapped text\n * width : width of the wrapped text\n * isTruncated : whether the text is truncated\n * maxHeight : Maximum height given\n * maxWidth : Maximum width given\n * oriText : Original text sent\n * oriTextHeight : Original text height\n * oriTextWidth : Original text width\n * text : SMART TEXT\n * }\n */\nSmartLabelManager.prototype.getSmartText = function (text, maxWidth, maxHeight, noWrap) {\n if (!this._init) {\n return false;\n }\n\n if (text === undefined || text === null) {\n text = '';\n } else if (typeof text !== 'string') {\n text = text.toString();\n }\n\n var len,\n trimStr,\n tempArr,\n tmpText,\n maxWidthWithEll,\n toolText,\n oriWidth,\n oriHeight,\n newCharIndex,\n nearestChar,\n tempChar,\n getWidth,\n initialLeft,\n initialTop,\n getOriSizeImproveObj,\n spanArr,\n x,\n y,\n minWidth,\n elem,\n chr,\n elemRightMostPoint,\n elemLowestPoint,\n lastBR,\n removeFromIndex,\n removeFromIndexForEllipses,\n hasHTMLTag = false,\n maxStrWidth = 0,\n lastDash = -1,\n lastSpace = -1,\n lastIndexBroken = -1,\n strWidth = 0,\n strHeight = 0,\n oriTextArr = [],\n i = 0,\n ellipsesStr = this._showNoEllipses ? '' : '...',\n lineHeight = this._lineHeight,\n context = this._context,\n container = this._container,\n sCont = this._containerObj,\n ellipsesWidth = sCont.ellipsesWidth,\n dotWidth = sCont.dotWidth,\n characterArr = [],\n dashIndex = -1,\n spaceIndex = -1,\n lastLineBreak = -1,\n fastTrim = function fastTrim(str) {\n str = str.replace(/^\\s\\s*/, '');\n var ws = /\\s/,\n i = str.length;\n while (ws.test(str.charAt(i -= 1))) {/* jshint noempty:false */}\n return str.slice(0, i + 1);\n },\n smartLabel = {\n text: text,\n maxWidth: maxWidth,\n maxHeight: maxHeight,\n width: null,\n height: null,\n oriTextWidth: null,\n oriTextHeight: null,\n oriText: text,\n isTruncated: false\n };\n\n getWidth = this._getWidthFn();\n\n // In some browsers, offsetheight of a single-line text is getting little (1 px) heigher value of the\n // lineheight. As a result, smartLabel is unable to return single-line text.\n // To fix this, increase the maxHeight a little amount. Hence maxHeight = lineHeight * 1.2\n if (maxHeight === lineHeight) {\n maxHeight *= 1.2;\n }\n\n if (container) {\n if (!documentSupport.isBrowserLess) {\n hasHTMLTag = slLib.xmlTagRegEx.test(text);\n if (!hasHTMLTag) {\n // Due to support of <,> for xml we convert <, > to <,> respectively so to get the correct\n // width it is required to convert the same before calculation for the new improve version of the\n // get text width.\n tmpText = text.replace(slLib.ltgtRegex, function (match) {\n return match === '<' ? '<' : '>';\n });\n getOriSizeImproveObj = this.getOriSize(tmpText, true);\n\n smartLabel.oriTextWidth = oriWidth = getOriSizeImproveObj.width;\n smartLabel.oriTextHeight = oriHeight = getOriSizeImproveObj.height;\n } else {\n container.innerHTML = text;\n smartLabel.oriTextWidth = oriWidth = container.offsetWidth;\n smartLabel.oriTextHeight = oriHeight = container.offsetHeight;\n }\n\n if (oriHeight <= maxHeight && oriWidth <= maxWidth) {\n smartLabel.width = smartLabel.oriTextWidth = oriWidth;\n smartLabel.height = smartLabel.oriTextHeight = oriHeight;\n return smartLabel;\n }\n\n if (lineHeight > maxHeight) {\n smartLabel.text = '';\n smartLabel.width = smartLabel.oriTextWidth = 0;\n smartLabel.height = smartLabel.oriTextHeight = 0;\n return smartLabel;\n }\n }\n\n // Calculate width with ellipses\n text = fastTrim(text).replace(/(\\s+)/g, ' ');\n maxWidthWithEll = this._showNoEllipses ? maxWidth : maxWidth - ellipsesWidth;\n\n if (!hasHTMLTag) {\n oriTextArr = text.split('');\n len = oriTextArr.length;\n trimStr = '', tempArr = [];\n tempChar = oriTextArr[0];\n\n if (this._cache[tempChar]) {\n minWidth = this._cache[tempChar].width;\n } else {\n minWidth = getWidth(tempChar);\n this._cache[tempChar] = { width: minWidth };\n }\n\n if (maxWidthWithEll > minWidth) {\n tempArr = text.substr(0, slLib.getNearestBreakIndex(text, maxWidthWithEll, this)).split('');\n i = tempArr.length;\n } else if (minWidth > maxWidth) {\n smartLabel.text = '';\n smartLabel.width = smartLabel.oriTextWidth = smartLabel.height = smartLabel.oriTextHeight = 0;\n return smartLabel;\n } else if (ellipsesStr) {\n maxWidthWithEll = maxWidth - 2 * dotWidth;\n if (maxWidthWithEll > minWidth) {\n ellipsesStr = '..';\n } else {\n maxWidthWithEll = maxWidth - dotWidth;\n if (maxWidthWithEll > minWidth) {\n ellipsesStr = '.';\n } else {\n maxWidthWithEll = 0;\n ellipsesStr = '';\n }\n }\n }\n\n strWidth = getWidth(tempArr.join(''));\n strHeight = this._lineHeight;\n\n if (noWrap) {\n for (; i < len; i += 1) {\n tempChar = tempArr[i] = oriTextArr[i];\n if (this._cache[tempChar]) {\n minWidth = this._cache[tempChar].width;\n } else {\n if (!getOriSizeImproveObj || !(minWidth = getOriSizeImproveObj.detailObj[tempChar])) {\n minWidth = getWidth(tempChar);\n }\n this._cache[tempChar] = {\n width: minWidth\n };\n }\n strWidth += minWidth;\n if (strWidth > maxWidthWithEll) {\n if (!trimStr) {\n trimStr = tempArr.slice(0, -1).join('');\n }\n if (strWidth > maxWidth) {\n smartLabel.text = fastTrim(trimStr) + ellipsesStr;\n smartLabel.tooltext = smartLabel.oriText;\n smartLabel.width = getWidth(smartLabel.text);\n smartLabel.height = this._lineHeight;\n return smartLabel;\n }\n }\n }\n\n smartLabel.text = tempArr.join('');\n smartLabel.width = strWidth;\n smartLabel.height = this._lineHeight;\n return smartLabel;\n } else {\n for (; i < len; i += 1) {\n tempChar = tempArr[i] = oriTextArr[i];\n if (tempChar === ' ' && !context) {\n tempChar = ' ';\n }\n\n if (this._cache[tempChar]) {\n minWidth = this._cache[tempChar].width;\n } else {\n if (!getOriSizeImproveObj || !(minWidth = getOriSizeImproveObj.detailObj[tempChar])) {\n minWidth = getWidth(tempChar);\n }\n this._cache[tempChar] = {\n width: minWidth\n };\n }\n strWidth += minWidth;\n\n if (strWidth > maxWidthWithEll) {\n if (!trimStr) {\n trimStr = tempArr.slice(0, -1).join('');\n }\n if (strWidth > maxWidth) {\n /** @todo use regular expressions for better performance. */\n lastSpace = text.substr(0, tempArr.length).lastIndexOf(' ');\n lastDash = text.substr(0, tempArr.length).lastIndexOf('-');\n if (lastSpace > lastIndexBroken) {\n strWidth = getWidth(tempArr.slice(lastIndexBroken + 1, lastSpace).join(''));\n tempArr.splice(lastSpace, 1, '
');\n lastIndexBroken = lastSpace;\n newCharIndex = lastSpace + 1;\n } else if (lastDash > lastIndexBroken) {\n if (lastDash === tempArr.length - 1) {\n strWidth = getWidth(tempArr.slice(lastIndexBroken + 1, lastSpace).join(''));\n tempArr.splice(lastDash, 1, '
-');\n } else {\n strWidth = getWidth(tempArr.slice(lastIndexBroken + 1, lastSpace).join(''));\n tempArr.splice(lastDash, 1, '-
');\n }\n lastIndexBroken = lastDash;\n newCharIndex = lastDash + 1;\n } else {\n tempArr.splice(tempArr.length - 1, 1, '
' + oriTextArr[i]);\n lastLineBreak = tempArr.length - 2;\n strWidth = getWidth(tempArr.slice(lastIndexBroken + 1, lastLineBreak + 1).join(''));\n lastIndexBroken = lastLineBreak;\n newCharIndex = i;\n }\n strHeight += this._lineHeight;\n if (strHeight > maxHeight) {\n smartLabel.text = fastTrim(trimStr) + ellipsesStr;\n smartLabel.tooltext = smartLabel.oriText;\n // The max width among all the lines will be the width of the string.\n smartLabel.width = maxWidth;\n smartLabel.height = strHeight - this._lineHeight;\n return smartLabel;\n } else {\n maxStrWidth = max(maxStrWidth, strWidth);\n trimStr = null;\n nearestChar = slLib.getNearestBreakIndex(text.substr(newCharIndex), maxWidthWithEll, this);\n strWidth = getWidth(text.substr(newCharIndex, nearestChar || 1));\n if (tempArr.length < newCharIndex + nearestChar) {\n tempArr = tempArr.concat(text.substr(tempArr.length, newCharIndex + nearestChar - tempArr.length).split(''));\n i = tempArr.length - 1;\n }\n }\n }\n }\n }\n\n maxStrWidth = max(maxStrWidth, strWidth);\n\n smartLabel.text = tempArr.join('');\n smartLabel.width = maxStrWidth;\n smartLabel.height = strHeight;\n return smartLabel;\n }\n } else {\n toolText = text.replace(slLib.spanAdditionRegx, '$2');\n text = text.replace(slLib.spanAdditionRegx, slLib.spanAdditionReplacer);\n text = text.replace(/()/g, '$1');\n\n container.innerHTML = text;\n\n spanArr = container[documentSupport.childRetriverFn](documentSupport.childRetriverString);\n\n for (x = 0, y = spanArr.length; x < y; x += 1) {\n elem = spanArr[x];\n //chech whether this span is temporary inserted span from it's class\n if (documentSupport.noClassTesting || slLib.classNameReg.test(elem.className)) {\n chr = elem.innerHTML;\n if (chr !== '') {\n if (chr === ' ') {\n spaceIndex = characterArr.length;\n } else if (chr === '-') {\n dashIndex = characterArr.length;\n }\n\n characterArr.push({\n spaceIdx: spaceIndex,\n dashIdx: dashIndex,\n elem: elem\n });\n oriTextArr.push(chr);\n }\n }\n }\n\n i = 0;\n len = characterArr.length;\n minWidth = characterArr[0].elem.offsetWidth;\n\n if (minWidth > maxWidth) {\n smartLabel.text = '';\n smartLabel.width = smartLabel.oriTextWidth = smartLabel.height = smartLabel.oriTextHeight = 0;\n\n return smartLabel;\n } else if (minWidth > maxWidthWithEll && !this._showNoEllipses) {\n\n maxWidthWithEll = maxWidth - 2 * dotWidth;\n if (maxWidthWithEll > minWidth) {\n ellipsesStr = '..';\n } else {\n maxWidthWithEll = maxWidth - dotWidth;\n if (maxWidthWithEll > minWidth) {\n ellipsesStr = '.';\n } else {\n maxWidthWithEll = 0;\n ellipsesStr = '';\n }\n }\n }\n\n initialLeft = characterArr[0].elem.offsetLeft;\n initialTop = characterArr[0].elem.offsetTop;\n\n if (noWrap) {\n for (; i < len; i += 1) {\n elem = characterArr[i].elem;\n elemRightMostPoint = elem.offsetLeft - initialLeft + elem.offsetWidth;\n\n if (elemRightMostPoint > maxWidthWithEll) {\n if (!removeFromIndexForEllipses) {\n removeFromIndexForEllipses = i;\n }\n if (container.offsetWidth > maxWidth) {\n removeFromIndex = i;\n i = len;\n }\n }\n }\n } else {\n for (; i < len; i += 1) {\n elem = characterArr[i].elem;\n elemLowestPoint = elem.offsetHeight + (elem.offsetTop - initialTop);\n elemRightMostPoint = elem.offsetLeft - initialLeft + elem.offsetWidth;\n\n lastBR = null;\n\n if (elemRightMostPoint > maxWidthWithEll) {\n if (!removeFromIndexForEllipses) {\n removeFromIndexForEllipses = i;\n }\n\n if (elemRightMostPoint > maxWidth) {\n lastSpace = characterArr[i].spaceIdx;\n lastDash = characterArr[i].dashIdx;\n if (lastSpace > lastIndexBroken) {\n characterArr[lastSpace].elem.innerHTML = '
';\n lastIndexBroken = lastSpace;\n } else if (lastDash > lastIndexBroken) {\n if (lastDash === i) {\n // in case the overflowing character itself is the '-'\n characterArr[lastDash].elem.innerHTML = '
-';\n } else {\n characterArr[lastDash].elem.innerHTML = '-
';\n }\n lastIndexBroken = lastDash;\n } else {\n elem.parentNode.insertBefore(lastBR = doc.createElement('br'), elem);\n }\n\n //check whether this break made current element outside the area height\n if (elem.offsetHeight + elem.offsetTop > maxHeight) {\n //remove the lastly inserted line break\n if (lastBR) {\n lastBR.parentNode.removeChild(lastBR);\n } else if (lastIndexBroken === lastDash) {\n characterArr[lastDash].elem.innerHTML = '-';\n } else {\n characterArr[lastSpace].elem.innerHTML = ' ';\n }\n removeFromIndex = i;\n //break the looping condition\n i = len;\n } else {\n removeFromIndexForEllipses = null;\n }\n }\n } else {\n //check whether this break made current element outside the area height\n if (elemLowestPoint > maxHeight) {\n removeFromIndex = i;\n i = len;\n }\n }\n }\n }\n\n if (removeFromIndex < len) {\n //set the trancated property of the smartlabel\n smartLabel.isTruncated = true;\n\n /** @todo is this really needed? */\n removeFromIndexForEllipses = removeFromIndexForEllipses ? removeFromIndexForEllipses : removeFromIndex;\n\n for (i = len - 1; i >= removeFromIndexForEllipses; i -= 1) {\n elem = characterArr[i].elem;\n //chech whether this span is temporary inserted span from it's class\n elem.parentNode.removeChild(elem);\n }\n\n for (; i >= 0; i -= 1) {\n elem = characterArr[i].elem;\n if (slLib.classNameBrReg.test(elem.className)) {\n //chech whether this span is temporary inserted span from it's class\n elem.parentNode.removeChild(elem);\n } else {\n i = 0;\n }\n }\n }\n\n //get the smart text\n smartLabel.text = container.innerHTML.replace(slLib.spanRemovalRegx, '$1').replace(/\\&\\;/g, '&');\n if (smartLabel.isTruncated) {\n smartLabel.text += ellipsesStr;\n smartLabel.tooltext = toolText;\n }\n }\n\n smartLabel.height = container.offsetHeight;\n smartLabel.width = container.offsetWidth;\n\n return smartLabel;\n } else {\n smartLabel.error = new Error('Body Tag Missing!');\n return smartLabel;\n }\n};\n\n/*\n * Get the height and width of a text.\n *\n * @param {String} text - Text whose metrics to be measured\n * @param {Boolean} Optional detailedCalculationFlag - this flag if set it calculates per letter position\n * information and returns it. Ideally you dont need it unless you want to post process the\n * string. And its an EXPENSIVE OPERATION.\n *\n * @return {Object} - If detailedCalculationFlag is set to true the returned object would be\n * {\n * height: height of the text\n * width: width of the text\n * detailObj: detail calculation of letters in the format {lettername: width}\n * }\n * If detailedCalculationFlag is set to false the returned object wont have the detailObj prop.\n */\nSmartLabelManager.prototype.getOriSize = function (text, detailedCalculationFlag) {\n if (!this._init) {\n return false;\n }\n\n var textArr,\n letter,\n lSize,\n i,\n l,\n cumulativeSize = 0,\n height = 0,\n indiSizeStore = {};\n\n if (!detailedCalculationFlag) {\n return this._calCharDimWithCache(text);\n }\n\n // Calculate the width of every letter with an approximation\n textArr = text.split('');\n for (i = 0, l = textArr.length; i < l; i++) {\n letter = textArr[i];\n lSize = this._calCharDimWithCache(letter, true, textArr.length);\n height = max(height, lSize.height);\n cumulativeSize += lSize.width;\n indiSizeStore[letter] = lSize.width;\n }\n\n return {\n width: round(cumulativeSize),\n height: height,\n detailObj: indiSizeStore\n };\n};\n\n/*\n * Dispose the container and object allocated by the smartlabel\n */\nSmartLabelManager.prototype.dispose = function () {\n if (!this._init) {\n return this;\n }\n\n this._containerManager && this._containerManager.dispose && this._containerManager.dispose();\n\n delete this._container;\n delete this._context;\n delete this._cache;\n delete this._containerManager;\n delete this._containerObj;\n delete this.id;\n delete this.style;\n delete this.parentContainer;\n delete this._showNoEllipses;\n\n return this;\n};\n\nexports['default'] = SmartLabelManager;\nmodule.exports = exports['default'];","'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n\tvalue: true\n});\nvar lib = {\n\tinit: function init(win) {\n\t\tvar doc = win.document,\n\t\t nav = win.navigator,\n\t\t userAgent = nav.userAgent,\n\t\t DIV = 'DIV',\n\t\t ceil = Math.ceil,\n\t\t floor = Math.floor,\n\t\t containerInstanceCount = 0,\n\t\t clsNameSpace = 'fusioncharts-smartlabel-',\n\t\t containerClass = clsNameSpace + 'container',\n\t\t classNameWithTag = clsNameSpace + 'tag',\n\t\t classNameWithTagBR = clsNameSpace + 'br';\n\n\t\tlib = {\n\t\t\twin: win,\n\n\t\t\tcontainerClass: containerClass,\n\n\t\t\tclassNameWithTag: classNameWithTag,\n\n\t\t\tclassNameWithTagBR: classNameWithTagBR,\n\n\t\t\tmaxDefaultCacheLimit: 500,\n\n\t\t\tclassNameReg: new RegExp('\\b' + classNameWithTag + '\\b'),\n\n\t\t\tclassNameBrReg: new RegExp('\\b' + classNameWithTagBR + '\\b'),\n\n\t\t\tspanAdditionRegx: /(<[^<\\>]+?\\>)|(&(?:[a-z]+|#[0-9]+);|.)/ig,\n\n\t\t\tspanAdditionReplacer: '$1$2',\n\n\t\t\tspanRemovalRegx: new RegExp('\\\\]+?' + classNameWithTag + '[^\\\\>]{0,}\\\\>(.*?)\\\\<\\\\/span\\\\>', 'ig'),\n\n\t\t\txmlTagRegEx: new RegExp('<[^>][^<]*[^>]+>', 'i'),\n\n\t\t\tltgtRegex: /<|>/g,\n\n\t\t\tbrReplaceRegex: //ig,\n\n\t\t\ttestStrAvg: 'WgI',\n\n\t\t\t// This style is applied over the parent smartlabel container. The container is kept hidden from the viewport\n\t\t\tparentContainerStyle: {\n\t\t\t\tposition: 'absolute',\n\t\t\t\ttop: '-9999em',\n\t\t\t\twhiteSpace: 'nowrap',\n\t\t\t\tpadding: '0px',\n\t\t\t\twidth: '1px',\n\t\t\t\theight: '1px',\n\t\t\t\toverflow: 'hidden'\n\t\t\t},\n\n\t\t\t// All the style which might affect the text metrics\n\t\t\tsupportedStyle: {\n\t\t\t\tfont: 'font',\n\t\t\t\tfontFamily: 'font-family',\n\t\t\t\t'font-family': 'font-family',\n\t\t\t\tfontWeight: 'font-weight',\n\t\t\t\t'font-weight': 'font-weight',\n\t\t\t\tfontSize: 'font-size',\n\t\t\t\t'font-size': 'font-size',\n\t\t\t\tlineHeight: 'line-height',\n\t\t\t\t'line-height': 'line-height',\n\t\t\t\tfontStyle: 'font-style',\n\t\t\t\t'font-style': 'font-style'\n\t\t\t},\n\n\t\t\t// Get the support list for html the document where the text calcution is to be done.\n\t\t\tgetDocumentSupport: function getDocumentSupport() {\n\t\t\t\tvar childRetriverFn, childRetriverString, noClassTesting;\n\n\t\t\t\tif (doc.getElementsByClassName) {\n\t\t\t\t\tchildRetriverFn = 'getElementsByClassName';\n\t\t\t\t\tchildRetriverString = classNameWithTag;\n\t\t\t\t\tnoClassTesting = true;\n\t\t\t\t} else {\n\t\t\t\t\tchildRetriverFn = 'getElementsByTagName';\n\t\t\t\t\tchildRetriverString = 'span';\n\t\t\t\t\tnoClassTesting = false;\n\t\t\t\t}\n\n\t\t\t\treturn {\n\t\t\t\t\tisIE: /msie/i.test(userAgent) && !win.opera,\n\t\t\t\t\thasSVG: Boolean(win.SVGAngle || doc.implementation.hasFeature('http://www.w3.org/TR/SVG11/feature#BasicStructure', '1.1')),\n\t\t\t\t\tisHeadLess: new RegExp(' HtmlUnit').test(userAgent),\n\t\t\t\t\tisWebKit: new RegExp(' AppleWebKit/').test(userAgent),\n\t\t\t\t\tchildRetriverFn: childRetriverFn,\n\t\t\t\t\tchildRetriverString: childRetriverString,\n\t\t\t\t\tnoClassTesting: noClassTesting\n\t\t\t\t};\n\t\t\t},\n\n\t\t\t/*\n * Create a html div element and attach it with a parent. All the subsequent operations are performed\n * by upding this dom tree only.\n *\n * @param {HTMLElement} - The html element where the newly created div is to be attached. If not passed,\n * the new div is appended on the body.\n */\n\t\t\tcreateContainer: function createContainer(containerParent) {\n\t\t\t\tvar body, container;\n\n\t\t\t\tif (containerParent && (containerParent.offsetWidth || containerParent.offsetHeight)) {\n\t\t\t\t\tif (containerParent.appendChild) {\n\t\t\t\t\t\tcontainerParent.appendChild(container = doc.createElement(DIV));\n\t\t\t\t\t\tcontainer.className = containerClass;\n\t\t\t\t\t\tcontainer.setAttribute('aria-hidden', 'true');\n\t\t\t\t\t\tcontainer.setAttribute('role', 'presentation');\n\t\t\t\t\t\treturn container;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tbody = doc.getElementsByTagName('body')[0];\n\n\t\t\t\t\tif (body && body.appendChild) {\n\t\t\t\t\t\tcontainer = doc.createElement(DIV);\n\t\t\t\t\t\tcontainer.className = containerClass;\n\t\t\t\t\t\tcontainer.setAttribute('aria-hidden', 'true');\n\t\t\t\t\t\tcontainer.setAttribute('role', 'presentation');\n\t\t\t\t\t\tcontainerInstanceCount += 1;\n\t\t\t\t\t\tbody.appendChild(container);\n\t\t\t\t\t\treturn container;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// Finds a approximate position where the text is to be broken\n\t\t\tgetNearestBreakIndex: function getNearestBreakIndex(text, maxWidth, sl) {\n\t\t\t\tif (!text || !text.length) {\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\n\t\t\t\tvar difference,\n\t\t\t\t getWidth = sl._getWidthFn(),\n\t\t\t\t charLen = 0,\n\t\t\t\t increment = 0,\n\t\t\t\t oriWidth = getWidth(text),\n\t\t\t\t avgWidth = oriWidth / text.length;\n\n\t\t\t\tdifference = maxWidth;\n\t\t\t\tcharLen = ceil(maxWidth / avgWidth);\n\n\t\t\t\tif (oriWidth < maxWidth) {\n\t\t\t\t\treturn text.length - 1;\n\t\t\t\t}\n\n\t\t\t\tif (charLen > text.length) {\n\t\t\t\t\tdifference = maxWidth - oriWidth;\n\t\t\t\t\tcharLen = text.length;\n\t\t\t\t}\n\n\t\t\t\twhile (difference > 0) {\n\t\t\t\t\tdifference = maxWidth - getWidth(text.substr(0, charLen));\n\t\t\t\t\tincrement = floor(difference / avgWidth);\n\t\t\t\t\tif (increment) {\n\t\t\t\t\t\tcharLen += increment;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn charLen;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\twhile (difference < 0) {\n\t\t\t\t\tdifference = maxWidth - getWidth(text.substr(0, charLen));\n\t\t\t\t\tincrement = floor(difference / avgWidth);\n\t\t\t\t\tif (increment) {\n\t\t\t\t\t\tcharLen += increment;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn charLen;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn charLen;\n\t\t\t},\n\n\t\t\t/*\n * Determine lineheight of a text for a given style. It adds propery lineHeight to the style passed\n *\n * @param {Object} - The style based on which the text's metric needs to be calculated. The calculation happens\n * based on fontSize property, if its not present a default font size is assumed.\n *\n * @return {Object} - The style that was passed with lineHeight as a named propery set on the object.\n */\n\t\t\tsetLineHeight: function setLineHeight(styleObj) {\n\t\t\t\tvar fSize = styleObj.fontSize = styleObj.fontSize || '12px';\n\t\t\t\tstyleObj.lineHeight = styleObj.lineHeight || styleObj['line-height'] || parseInt(fSize, 10) * 1.2 + 'px';\n\t\t\t\treturn styleObj;\n\t\t\t}\n\t\t};\n\n\t\treturn lib;\n\t}\n};\n\nexports['default'] = lib;\nmodule.exports = exports['default'];","const Muze = require('./muze');\n\nmodule.exports = Muze.default ? Muze.default : Muze;\n","'use strict';\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _lib = require('./lib');\n\nvar _lib2 = _interopRequireDefault(_lib);\n\nvar slLib = _lib2['default'].init(typeof window !== \"undefined\" ? window : undefined),\n doc = slLib.win.document,\n documentSupport = slLib.getDocumentSupport(),\n SVG_BBOX_CORRECTION = documentSupport.isWebKit ? 0 : 4.5;\n\nfunction ContainerManager(parentContainer, isBrowserLess, maxContainers) {\n var svg;\n\n maxContainers = maxContainers > 5 ? maxContainers : 5;\n maxContainers = maxContainers < 20 ? maxContainers : 20;\n\n this.maxContainers = maxContainers;\n this.first = null;\n this.last = null;\n this.containers = {};\n this.length = 0;\n this.rootNode = parentContainer;\n\n if (isBrowserLess) {\n svg = doc.createElementNS('http://www.w3.org/2000/svg', 'svg');\n svg.setAttributeNS('http://www.w3.org/2000/svg', 'xlink', 'http://www.w3.org/1999/xlink');\n svg.setAttributeNS('http://www.w3.org/2000/svg', 'height', '0');\n svg.setAttributeNS('http://www.w3.org/2000/svg', 'width', '0');\n this.svgRoot = svg;\n this.rootNode.appendChild(svg);\n }\n}\n\nContainerManager.prototype.get = function (style) {\n var diff,\n key,\n containerObj,\n containers = this.containers,\n len = this.length,\n max = this.maxContainers,\n keyStr = '';\n\n for (key in slLib.supportedStyle) {\n if (style[key] !== undefined) {\n keyStr += slLib.supportedStyle[key] + ':' + style[key] + ';';\n }\n }\n\n if (!keyStr) {\n return false;\n }\n\n if (containerObj = containers[keyStr]) {\n if (this.first !== containerObj) {\n containerObj.prev && (containerObj.prev.next = containerObj.next);\n containerObj.next && (containerObj.next.prev = containerObj.prev);\n containerObj.next = this.first;\n containerObj.next.prev = containerObj;\n this.last === containerObj && (this.last = containerObj.prev);\n containerObj.prev = null;\n this.first = containerObj;\n }\n } else {\n if (len >= max) {\n diff = len - max + 1;\n // +1 is to remove an extra entry to make space for the new container to be added.\n while (diff--) {\n this.removeContainer(this.last);\n }\n }\n containerObj = this.addContainer(keyStr);\n }\n\n return containerObj;\n};\n\nContainerManager.prototype.addContainer = function (keyStr) {\n var node, container;\n\n this.containers[keyStr] = container = {\n next: null,\n prev: null,\n node: null,\n ellipsesWidth: 0,\n lineHeight: 0,\n dotWidth: 0,\n avgCharWidth: 4,\n keyStr: keyStr,\n charCache: {}\n };\n\n // Since the container objects are arranged from most recent to least recent order, we need to add the new\n // object at the beginning of the list.\n container.next = this.first;\n container.next && (container.next.prev = container);\n this.first = container;\n if (!this.last) {\n this.last = container;\n }\n this.length += 1;\n\n node = container.node = doc.createElement('div');\n this.rootNode.appendChild(node);\n\n if (documentSupport.isIE && !documentSupport.hasSVG) {\n node.style.setAttribute('cssText', keyStr);\n } else {\n node.setAttribute('style', keyStr);\n }\n\n node.setAttribute('aria-hidden', 'true');\n node.setAttribute('role', 'presentation');\n node.style.display = 'inline-block';\n\n node.innerHTML = slLib.testStrAvg; // A test string.\n container.lineHeight = node.offsetHeight;\n container.avgCharWidth = node.offsetWidth / 3;\n\n if (documentSupport.isBrowserLess) {\n node = container.svgText = doc.createElementNS('http://www.w3.org/2000/svg', 'text');\n node.setAttribute('style', keyStr);\n this.svgRoot.appendChild(node);\n\n node.textContent = slLib.testStrAvg; // A test string.\n container.lineHeight = node.getBBox().height;\n container.avgCharWidth = (node.getBBox().width - SVG_BBOX_CORRECTION) / 3;\n\n node.textContent = '...';\n container.ellipsesWidth = node.getBBox().width - SVG_BBOX_CORRECTION;\n node.textContent = '.';\n container.dotWidth = node.getBBox().width - SVG_BBOX_CORRECTION;\n } else {\n node.innerHTML = '...';\n container.ellipsesWidth = node.offsetWidth;\n node.innerHTML = '.';\n container.dotWidth = node.offsetWidth;\n node.innerHTML = '';\n }\n\n return container;\n};\n\nContainerManager.prototype.removeContainer = function (cObj) {\n var keyStr = cObj.keyStr;\n\n if (!keyStr || !this.length || !cObj) {\n return;\n }\n this.length -= 1;\n\n cObj.prev && (cObj.prev.next = cObj.next);\n cObj.next && (cObj.next.prev = cObj.prev);\n this.first === cObj && (this.first = cObj.next);\n this.last === cObj && (this.last = cObj.prev);\n\n cObj.node.parentNode.removeChild(cObj.node);\n\n delete this.containers[keyStr];\n};\n\nContainerManager.prototype.dispose = function () {\n var key,\n containers = this.containers;\n\n this.maxContainers = null;\n for (key in containers) {\n this.removeContainer(containers[key]);\n }\n\n this.rootNode.parentNode.removeChild(this.rootNode);\n\n this.rootNode = null;\n this.first = null;\n this.last = null;\n};\n\nmodule.exports = ContainerManager;","export default function(a, b) {\n return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","import ascending from \"./ascending\";\n\nexport default function(compare) {\n if (compare.length === 1) compare = ascendingComparator(compare);\n return {\n left: function(a, x, lo, hi) {\n if (lo == null) lo = 0;\n if (hi == null) hi = a.length;\n while (lo < hi) {\n var mid = lo + hi >>> 1;\n if (compare(a[mid], x) < 0) lo = mid + 1;\n else hi = mid;\n }\n return lo;\n },\n right: function(a, x, lo, hi) {\n if (lo == null) lo = 0;\n if (hi == null) hi = a.length;\n while (lo < hi) {\n var mid = lo + hi >>> 1;\n if (compare(a[mid], x) > 0) hi = mid;\n else lo = mid + 1;\n }\n return lo;\n }\n };\n}\n\nfunction ascendingComparator(f) {\n return function(d, x) {\n return ascending(f(d), x);\n };\n}\n","import ascending from \"./ascending\";\nimport bisector from \"./bisector\";\n\nvar ascendingBisect = bisector(ascending);\nexport var bisectRight = ascendingBisect.right;\nexport var bisectLeft = ascendingBisect.left;\nexport default bisectRight;\n","import {pair} from \"./pairs\";\n\nexport default function(values0, values1, reduce) {\n var n0 = values0.length,\n n1 = values1.length,\n values = new Array(n0 * n1),\n i0,\n i1,\n i,\n value0;\n\n if (reduce == null) reduce = pair;\n\n for (i0 = i = 0; i0 < n0; ++i0) {\n for (value0 = values0[i0], i1 = 0; i1 < n1; ++i1, ++i) {\n values[i] = reduce(value0, values1[i1]);\n }\n }\n\n return values;\n}\n","export default function(x) {\n return x === null ? NaN : +x;\n}\n","var array = Array.prototype;\n\nexport var slice = array.slice;\nexport var map = array.map;\n","export default function(start, stop, step) {\n start = +start, stop = +stop, step = (n = arguments.length) < 2 ? (stop = start, start = 0, 1) : n < 3 ? 1 : +step;\n\n var i = -1,\n n = Math.max(0, Math.ceil((stop - start) / step)) | 0,\n range = new Array(n);\n\n while (++i < n) {\n range[i] = start + i * step;\n }\n\n return range;\n}\n","var e10 = Math.sqrt(50),\n e5 = Math.sqrt(10),\n e2 = Math.sqrt(2);\n\nexport default function(start, stop, count) {\n var reverse,\n i = -1,\n n,\n ticks,\n step;\n\n stop = +stop, start = +start, count = +count;\n if (start === stop && count > 0) return [start];\n if (reverse = stop < start) n = start, start = stop, stop = n;\n if ((step = tickIncrement(start, stop, count)) === 0 || !isFinite(step)) return [];\n\n if (step > 0) {\n start = Math.ceil(start / step);\n stop = Math.floor(stop / step);\n ticks = new Array(n = Math.ceil(stop - start + 1));\n while (++i < n) ticks[i] = (start + i) * step;\n } else {\n start = Math.floor(start * step);\n stop = Math.ceil(stop * step);\n ticks = new Array(n = Math.ceil(start - stop + 1));\n while (++i < n) ticks[i] = (start - i) / step;\n }\n\n if (reverse) ticks.reverse();\n\n return ticks;\n}\n\nexport function tickIncrement(start, stop, count) {\n var step = (stop - start) / Math.max(0, count),\n power = Math.floor(Math.log(step) / Math.LN10),\n error = step / Math.pow(10, power);\n return power >= 0\n ? (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1) * Math.pow(10, power)\n : -Math.pow(10, -power) / (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1);\n}\n\nexport function tickStep(start, stop, count) {\n var step0 = Math.abs(stop - start) / Math.max(0, count),\n step1 = Math.pow(10, Math.floor(Math.log(step0) / Math.LN10)),\n error = step0 / step1;\n if (error >= e10) step1 *= 10;\n else if (error >= e5) step1 *= 5;\n else if (error >= e2) step1 *= 2;\n return stop < start ? -step1 : step1;\n}\n","export default function(values) {\n return Math.ceil(Math.log(values.length) / Math.LN2) + 1;\n}\n","import number from \"./number\";\n\nexport default function(values, p, valueof) {\n if (valueof == null) valueof = number;\n if (!(n = values.length)) return;\n if ((p = +p) <= 0 || n < 2) return +valueof(values[0], 0, values);\n if (p >= 1) return +valueof(values[n - 1], n - 1, values);\n var n,\n i = (n - 1) * p,\n i0 = Math.floor(i),\n value0 = +valueof(values[i0], i0, values),\n value1 = +valueof(values[i0 + 1], i0 + 1, values);\n return value0 + (value1 - value0) * (i - i0);\n}\n","export var prefix = \"$\";\n\nfunction Map() {}\n\nMap.prototype = map.prototype = {\n constructor: Map,\n has: function(key) {\n return (prefix + key) in this;\n },\n get: function(key) {\n return this[prefix + key];\n },\n set: function(key, value) {\n this[prefix + key] = value;\n return this;\n },\n remove: function(key) {\n var property = prefix + key;\n return property in this && delete this[property];\n },\n clear: function() {\n for (var property in this) if (property[0] === prefix) delete this[property];\n },\n keys: function() {\n var keys = [];\n for (var property in this) if (property[0] === prefix) keys.push(property.slice(1));\n return keys;\n },\n values: function() {\n var values = [];\n for (var property in this) if (property[0] === prefix) values.push(this[property]);\n return values;\n },\n entries: function() {\n var entries = [];\n for (var property in this) if (property[0] === prefix) entries.push({key: property.slice(1), value: this[property]});\n return entries;\n },\n size: function() {\n var size = 0;\n for (var property in this) if (property[0] === prefix) ++size;\n return size;\n },\n empty: function() {\n for (var property in this) if (property[0] === prefix) return false;\n return true;\n },\n each: function(f) {\n for (var property in this) if (property[0] === prefix) f(this[property], property.slice(1), this);\n }\n};\n\nfunction map(object, f) {\n var map = new Map;\n\n // Copy constructor.\n if (object instanceof Map) object.each(function(value, key) { map.set(key, value); });\n\n // Index array by numeric index or specified key function.\n else if (Array.isArray(object)) {\n var i = -1,\n n = object.length,\n o;\n\n if (f == null) while (++i < n) map.set(i, object[i]);\n else while (++i < n) map.set(f(o = object[i], i, object), o);\n }\n\n // Convert object to map.\n else if (object) for (var key in object) map.set(key, object[key]);\n\n return map;\n}\n\nexport default map;\n","import map from \"./map\";\n\nexport default function() {\n var keys = [],\n sortKeys = [],\n sortValues,\n rollup,\n nest;\n\n function apply(array, depth, createResult, setResult) {\n if (depth >= keys.length) {\n if (sortValues != null) array.sort(sortValues);\n return rollup != null ? rollup(array) : array;\n }\n\n var i = -1,\n n = array.length,\n key = keys[depth++],\n keyValue,\n value,\n valuesByKey = map(),\n values,\n result = createResult();\n\n while (++i < n) {\n if (values = valuesByKey.get(keyValue = key(value = array[i]) + \"\")) {\n values.push(value);\n } else {\n valuesByKey.set(keyValue, [value]);\n }\n }\n\n valuesByKey.each(function(values, key) {\n setResult(result, key, apply(values, depth, createResult, setResult));\n });\n\n return result;\n }\n\n function entries(map, depth) {\n if (++depth > keys.length) return map;\n var array, sortKey = sortKeys[depth - 1];\n if (rollup != null && depth >= keys.length) array = map.entries();\n else array = [], map.each(function(v, k) { array.push({key: k, values: entries(v, depth)}); });\n return sortKey != null ? array.sort(function(a, b) { return sortKey(a.key, b.key); }) : array;\n }\n\n return nest = {\n object: function(array) { return apply(array, 0, createObject, setObject); },\n map: function(array) { return apply(array, 0, createMap, setMap); },\n entries: function(array) { return entries(apply(array, 0, createMap, setMap), 0); },\n key: function(d) { keys.push(d); return nest; },\n sortKeys: function(order) { sortKeys[keys.length - 1] = order; return nest; },\n sortValues: function(order) { sortValues = order; return nest; },\n rollup: function(f) { rollup = f; return nest; }\n };\n}\n\nfunction createObject() {\n return {};\n}\n\nfunction setObject(object, key, value) {\n object[key] = value;\n}\n\nfunction createMap() {\n return map();\n}\n\nfunction setMap(map, key, value) {\n map.set(key, value);\n}\n","import {default as map, prefix} from \"./map\";\n\nfunction Set() {}\n\nvar proto = map.prototype;\n\nSet.prototype = set.prototype = {\n constructor: Set,\n has: proto.has,\n add: function(value) {\n value += \"\";\n this[prefix + value] = value;\n return this;\n },\n remove: proto.remove,\n clear: proto.clear,\n values: proto.keys,\n size: proto.size,\n empty: proto.empty,\n each: proto.each\n};\n\nfunction set(object, f) {\n var set = new Set;\n\n // Copy constructor.\n if (object instanceof Set) object.each(function(value) { set.add(value); });\n\n // Otherwise, assume it’s an array.\n else if (object) {\n var i = -1, n = object.length;\n if (f == null) while (++i < n) set.add(object[i]);\n else while (++i < n) set.add(f(object[i], i, object));\n }\n\n return set;\n}\n\nexport default set;\n","var array = Array.prototype;\n\nexport var map = array.map;\nexport var slice = array.slice;\n","import {map} from \"d3-collection\";\nimport {slice} from \"./array\";\n\nexport var implicit = {name: \"implicit\"};\n\nexport default function ordinal(range) {\n var index = map(),\n domain = [],\n unknown = implicit;\n\n range = range == null ? [] : slice.call(range);\n\n function scale(d) {\n var key = d + \"\", i = index.get(key);\n if (!i) {\n if (unknown !== implicit) return unknown;\n index.set(key, i = domain.push(d));\n }\n return range[(i - 1) % range.length];\n }\n\n scale.domain = function(_) {\n if (!arguments.length) return domain.slice();\n domain = [], index = map();\n var i = -1, n = _.length, d, key;\n while (++i < n) if (!index.has(key = (d = _[i]) + \"\")) index.set(key, domain.push(d));\n return scale;\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = slice.call(_), scale) : range.slice();\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n scale.copy = function() {\n return ordinal()\n .domain(domain)\n .range(range)\n .unknown(unknown);\n };\n\n return scale;\n}\n","import {range as sequence} from \"d3-array\";\nimport ordinal from \"./ordinal\";\n\nexport default function band() {\n var scale = ordinal().unknown(undefined),\n domain = scale.domain,\n ordinalRange = scale.range,\n range = [0, 1],\n step,\n bandwidth,\n round = false,\n paddingInner = 0,\n paddingOuter = 0,\n align = 0.5;\n\n delete scale.unknown;\n function rescale() {\n var n = domain().length,\n reverse = range[1] < range[0],\n start = range[reverse - 0],\n stop = range[1 - reverse];\n step = (stop - start) / Math.max(1, n - paddingInner + paddingOuter * 2);\n if (round) step = Math.floor(step);\n start += (stop - start - step * (n - paddingInner)) * align;\n bandwidth = step * (1 - paddingInner);\n if (round) start = Math.round(start), bandwidth = Math.round(bandwidth);\n var values = sequence(n).map(function(i) { return start + step * i; });\n return ordinalRange(reverse ? values.reverse() : values);\n }\n\n scale.domain = function(_) {\n return arguments.length ? (domain(_), rescale()) : domain();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = [+_[0], +_[1]], rescale()) : range.slice();\n };\n\n scale.rangeRound = function(_) {\n return range = [+_[0], +_[1]], round = true, rescale();\n };\n\n scale.bandwidth = function() {\n return bandwidth;\n };\n\n scale.step = function() {\n return step;\n };\n\n scale.round = function(_) {\n return arguments.length ? (round = !!_, rescale()) : round;\n };\n\n scale.padding = function(_) {\n return arguments.length ? (paddingInner = paddingOuter = Math.max(0, Math.min(1, _)), rescale()) : paddingInner;\n };\n\n scale.paddingInner = function(_) {\n return arguments.length ? (paddingInner = Math.max(0, Math.min(1, _)), rescale()) : paddingInner;\n };\n\n scale.paddingOuter = function(_) {\n return arguments.length ? (paddingOuter = Math.max(0, Math.min(1, _)), rescale()) : paddingOuter;\n };\n\n scale.align = function(_) {\n return arguments.length ? (align = Math.max(0, Math.min(1, _)), rescale()) : align;\n };\n\n scale.copy = function() {\n return band()\n .domain(domain())\n .range(range)\n .round(round)\n .paddingInner(paddingInner)\n .paddingOuter(paddingOuter)\n .align(align);\n };\n\n scale.invertExtent = function(r0, r1) {\n var lo = +r0,\n hi = arguments.length > 1 ? +r1 : lo,\n reverse = range[1] < range[0],\n values = reverse ? ordinalRange().reverse() : ordinalRange(),\n n = values.length - 1, a, b, t,\n hiIndex;\n values.push(values[n] + this.step());\n // order range inputs, bail if outside of scale range\n if (hi < lo) t = lo, lo = hi, hi = t;\n if (hi < values[0] || lo > range[1-reverse]) return undefined;\n\n // binary search to index into scale range\n a = Math.max(0, getClosestIndexOf(values, lo));\n hiIndex = getClosestIndexOf(values, hi);\n b = lo===hi ? a : Math.max(a, hiIndex - 1);\n\n // increment index a if lo is within padding gap\n // if (lo - values[a] > bandwidth + 1e-10) ++a;\n\n if (reverse) t = a, a = n - b, b = n - t; // map + swap\n return (a > b) ? undefined : domain().slice(a, b+1);\n };\n\n scale.invert = function (r0, r1) {\n var lo = +r0,\n hi = arguments.length > 1 ? +r1 : lo,\n reverse = range[1] < range[0],\n values = reverse ? ordinalRange().reverse() : ordinalRange(),\n n = values.length - 1,\n a,\n t;\n\n // order range inputs, bail if outside of scale range\n if (hi < lo) t = lo, lo = hi, hi = t;\n if (hi < values[0] || lo > range[1-reverse]) return undefined;\n\n // binary search to index into scale range\n a = Math.max(0, getClosestIndexOf(values, lo, 'left'));\n\n // increment index a if lo is within padding gap\n // if (lo - values[a] > bandwidth + 1e-10) ++a;\n\n return domain()[reverse ? n - a : a];\n }\n return rescale();\n}\n\nfunction pointish(scale) {\n var copy = scale.copy;\n\n scale.padding = scale.paddingOuter;\n delete scale.paddingInner;\n delete scale.paddingOuter;\n\n scale.copy = function() {\n return pointish(copy());\n };\n\n return scale;\n}\n\nexport function point() {\n return pointish(band().paddingInner(1));\n}\n\nfunction getClosestIndexOf (arr, value, side) {\n var low = 0,\n arrLen = arr.length,\n high = arrLen - 1,\n highVal,\n mid,\n d1,\n d2;\n\n while (low < high) {\n mid = Math.floor((low + high) / 2);\n d1 = Math.abs(arr[mid] - value);\n d2 = Math.abs(arr[mid + 1] - value);\n\n if (d2 <= d1) {\n low = mid + 1;\n }\n else {\n high = mid;\n }\n }\n\n if (!side) {\n return high;\n }\n\n highVal = arr[high];\n if (highVal === value) {\n return high;\n } else if (highVal > value) {\n if (high === 0) { return high; }\n return side === 'left'? high - 1 : high;\n } else {\n if (high === arr.length - 1) { return high; }\n return side === 'left'? high : high + 1;\n }\n}","export default function(constructor, factory, prototype) {\n constructor.prototype = factory.prototype = prototype;\n prototype.constructor = constructor;\n}\n\nexport function extend(parent, definition) {\n var prototype = Object.create(parent.prototype);\n for (var key in definition) prototype[key] = definition[key];\n return prototype;\n}\n","import define, {extend} from \"./define\";\n\nexport function Color() {}\n\nexport var darker = 0.7;\nexport var brighter = 1 / darker;\n\nvar reI = \"\\\\s*([+-]?\\\\d+)\\\\s*\",\n reN = \"\\\\s*([+-]?\\\\d*\\\\.?\\\\d+(?:[eE][+-]?\\\\d+)?)\\\\s*\",\n reP = \"\\\\s*([+-]?\\\\d*\\\\.?\\\\d+(?:[eE][+-]?\\\\d+)?)%\\\\s*\",\n reHex3 = /^#([0-9a-f]{3})$/,\n reHex6 = /^#([0-9a-f]{6})$/,\n reRgbInteger = new RegExp(\"^rgb\\\\(\" + [reI, reI, reI] + \"\\\\)$\"),\n reRgbPercent = new RegExp(\"^rgb\\\\(\" + [reP, reP, reP] + \"\\\\)$\"),\n reRgbaInteger = new RegExp(\"^rgba\\\\(\" + [reI, reI, reI, reN] + \"\\\\)$\"),\n reRgbaPercent = new RegExp(\"^rgba\\\\(\" + [reP, reP, reP, reN] + \"\\\\)$\"),\n reHslPercent = new RegExp(\"^hsl\\\\(\" + [reN, reP, reP] + \"\\\\)$\"),\n reHslaPercent = new RegExp(\"^hsla\\\\(\" + [reN, reP, reP, reN] + \"\\\\)$\");\n\nvar 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\ndefine(Color, color, {\n displayable: function() {\n return this.rgb().displayable();\n },\n hex: function() {\n return this.rgb().hex();\n },\n toString: function() {\n return this.rgb() + \"\";\n }\n});\n\nexport default function color(format) {\n var m;\n format = (format + \"\").trim().toLowerCase();\n return (m = reHex3.exec(format)) ? (m = parseInt(m[1], 16), new Rgb((m >> 8 & 0xf) | (m >> 4 & 0x0f0), (m >> 4 & 0xf) | (m & 0xf0), ((m & 0xf) << 4) | (m & 0xf), 1)) // #f00\n : (m = reHex6.exec(format)) ? rgbn(parseInt(m[1], 16)) // #ff0000\n : (m = reRgbInteger.exec(format)) ? new Rgb(m[1], m[2], m[3], 1) // rgb(255, 0, 0)\n : (m = reRgbPercent.exec(format)) ? new Rgb(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, 1) // rgb(100%, 0%, 0%)\n : (m = reRgbaInteger.exec(format)) ? rgba(m[1], m[2], m[3], m[4]) // rgba(255, 0, 0, 1)\n : (m = reRgbaPercent.exec(format)) ? rgba(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, m[4]) // rgb(100%, 0%, 0%, 1)\n : (m = reHslPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, 1) // hsl(120, 50%, 50%)\n : (m = reHslaPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, m[4]) // hsla(120, 50%, 50%, 1)\n : named.hasOwnProperty(format) ? rgbn(named[format])\n : format === \"transparent\" ? new Rgb(NaN, NaN, NaN, 0)\n : null;\n}\n\nfunction rgbn(n) {\n return new Rgb(n >> 16 & 0xff, n >> 8 & 0xff, n & 0xff, 1);\n}\n\nfunction rgba(r, g, b, a) {\n if (a <= 0) r = g = b = NaN;\n return new Rgb(r, g, b, a);\n}\n\nexport function rgbConvert(o) {\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Rgb;\n o = o.rgb();\n return new Rgb(o.r, o.g, o.b, o.opacity);\n}\n\nexport function rgb(r, g, b, opacity) {\n return arguments.length === 1 ? rgbConvert(r) : new Rgb(r, g, b, opacity == null ? 1 : opacity);\n}\n\nexport function Rgb(r, g, b, opacity) {\n this.r = +r;\n this.g = +g;\n this.b = +b;\n this.opacity = +opacity;\n}\n\ndefine(Rgb, rgb, extend(Color, {\n 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, this.opacity);\n },\n 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, this.opacity);\n },\n rgb: function() {\n return this;\n },\n 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 && (0 <= this.opacity && this.opacity <= 1);\n },\n hex: function() {\n return \"#\" + hex(this.r) + hex(this.g) + hex(this.b);\n },\n toString: function() {\n var a = this.opacity; a = isNaN(a) ? 1 : Math.max(0, Math.min(1, a));\n return (a === 1 ? \"rgb(\" : \"rgba(\")\n + Math.max(0, Math.min(255, Math.round(this.r) || 0)) + \", \"\n + Math.max(0, Math.min(255, Math.round(this.g) || 0)) + \", \"\n + Math.max(0, Math.min(255, Math.round(this.b) || 0))\n + (a === 1 ? \")\" : \", \" + a + \")\");\n }\n}));\n\nfunction hex(value) {\n value = Math.max(0, Math.min(255, Math.round(value) || 0));\n return (value < 16 ? \"0\" : \"\") + value.toString(16);\n}\n\nfunction hsla(h, s, l, a) {\n if (a <= 0) h = s = l = NaN;\n else if (l <= 0 || l >= 1) h = s = NaN;\n else if (s <= 0) h = NaN;\n return new Hsl(h, s, l, a);\n}\n\nexport function hslConvert(o) {\n if (o instanceof Hsl) return new Hsl(o.h, o.s, o.l, o.opacity);\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Hsl;\n if (o instanceof Hsl) return o;\n o = o.rgb();\n var r = o.r / 255,\n g = o.g / 255,\n b = o.b / 255,\n min = Math.min(r, g, b),\n max = Math.max(r, g, b),\n h = NaN,\n s = max - min,\n l = (max + min) / 2;\n if (s) {\n if (r === max) h = (g - b) / s + (g < b) * 6;\n else if (g === max) h = (b - r) / s + 2;\n else h = (r - g) / s + 4;\n s /= l < 0.5 ? max + min : 2 - max - min;\n h *= 60;\n } else {\n s = l > 0 && l < 1 ? 0 : h;\n }\n return new Hsl(h, s, l, o.opacity);\n}\n\nexport function hsl(h, s, l, opacity) {\n return arguments.length === 1 ? hslConvert(h) : new Hsl(h, s, l, opacity == null ? 1 : opacity);\n}\n\nfunction Hsl(h, s, l, opacity) {\n this.h = +h;\n this.s = +s;\n this.l = +l;\n this.opacity = +opacity;\n}\n\ndefine(Hsl, hsl, extend(Color, {\n brighter: function(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n darker: function(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n 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 < 0.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 this.opacity\n );\n },\n displayable: function() {\n return (0 <= this.s && this.s <= 1 || isNaN(this.s))\n && (0 <= this.l && this.l <= 1)\n && (0 <= this.opacity && this.opacity <= 1);\n }\n}));\n\n/* From FvD 13.37, CSS Color Module Level 3 */\nfunction 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","export var deg2rad = Math.PI / 180;\nexport var rad2deg = 180 / Math.PI;\n","import define, {extend} from \"./define\";\nimport {Color, rgbConvert, Rgb} from \"./color\";\nimport {deg2rad, rad2deg} from \"./math\";\n\n// https://beta.observablehq.com/@mbostock/lab-and-rgb\nvar K = 18,\n Xn = 0.96422,\n Yn = 1,\n Zn = 0.82521,\n t0 = 4 / 29,\n t1 = 6 / 29,\n t2 = 3 * t1 * t1,\n t3 = t1 * t1 * t1;\n\nfunction labConvert(o) {\n if (o instanceof Lab) return new Lab(o.l, o.a, o.b, o.opacity);\n if (o instanceof Hcl) {\n if (isNaN(o.h)) return new Lab(o.l, 0, 0, o.opacity);\n var h = o.h * deg2rad;\n return new Lab(o.l, Math.cos(h) * o.c, Math.sin(h) * o.c, o.opacity);\n }\n if (!(o instanceof Rgb)) o = rgbConvert(o);\n var r = rgb2lrgb(o.r),\n g = rgb2lrgb(o.g),\n b = rgb2lrgb(o.b),\n y = xyz2lab((0.2225045 * r + 0.7168786 * g + 0.0606169 * b) / Yn), x, z;\n if (r === g && g === b) x = z = y; else {\n x = xyz2lab((0.4360747 * r + 0.3850649 * g + 0.1430804 * b) / Xn);\n z = xyz2lab((0.0139322 * r + 0.0971045 * g + 0.7141733 * b) / Zn);\n }\n return new Lab(116 * y - 16, 500 * (x - y), 200 * (y - z), o.opacity);\n}\n\nexport function gray(l, opacity) {\n return new Lab(l, 0, 0, opacity == null ? 1 : opacity);\n}\n\nexport default function lab(l, a, b, opacity) {\n return arguments.length === 1 ? labConvert(l) : new Lab(l, a, b, opacity == null ? 1 : opacity);\n}\n\nexport function Lab(l, a, b, opacity) {\n this.l = +l;\n this.a = +a;\n this.b = +b;\n this.opacity = +opacity;\n}\n\ndefine(Lab, lab, extend(Color, {\n brighter: function(k) {\n return new Lab(this.l + K * (k == null ? 1 : k), this.a, this.b, this.opacity);\n },\n darker: function(k) {\n return new Lab(this.l - K * (k == null ? 1 : k), this.a, this.b, this.opacity);\n },\n 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 x = Xn * lab2xyz(x);\n y = Yn * lab2xyz(y);\n z = Zn * lab2xyz(z);\n return new Rgb(\n lrgb2rgb( 3.1338561 * x - 1.6168667 * y - 0.4906146 * z),\n lrgb2rgb(-0.9787684 * x + 1.9161415 * y + 0.0334540 * z),\n lrgb2rgb( 0.0719453 * x - 0.2289914 * y + 1.4052427 * z),\n this.opacity\n );\n }\n}));\n\nfunction xyz2lab(t) {\n return t > t3 ? Math.pow(t, 1 / 3) : t / t2 + t0;\n}\n\nfunction lab2xyz(t) {\n return t > t1 ? t * t * t : t2 * (t - t0);\n}\n\nfunction lrgb2rgb(x) {\n return 255 * (x <= 0.0031308 ? 12.92 * x : 1.055 * Math.pow(x, 1 / 2.4) - 0.055);\n}\n\nfunction rgb2lrgb(x) {\n return (x /= 255) <= 0.04045 ? x / 12.92 : Math.pow((x + 0.055) / 1.055, 2.4);\n}\n\nfunction hclConvert(o) {\n if (o instanceof Hcl) return new Hcl(o.h, o.c, o.l, o.opacity);\n if (!(o instanceof Lab)) o = labConvert(o);\n if (o.a === 0 && o.b === 0) return new Hcl(NaN, 0, o.l, o.opacity);\n var h = Math.atan2(o.b, o.a) * rad2deg;\n return new Hcl(h < 0 ? h + 360 : h, Math.sqrt(o.a * o.a + o.b * o.b), o.l, o.opacity);\n}\n\nexport function lch(l, c, h, opacity) {\n return arguments.length === 1 ? hclConvert(l) : new Hcl(h, c, l, opacity == null ? 1 : opacity);\n}\n\nexport function hcl(h, c, l, opacity) {\n return arguments.length === 1 ? hclConvert(h) : new Hcl(h, c, l, opacity == null ? 1 : opacity);\n}\n\nexport function Hcl(h, c, l, opacity) {\n this.h = +h;\n this.c = +c;\n this.l = +l;\n this.opacity = +opacity;\n}\n\ndefine(Hcl, hcl, extend(Color, {\n brighter: function(k) {\n return new Hcl(this.h, this.c, this.l + K * (k == null ? 1 : k), this.opacity);\n },\n darker: function(k) {\n return new Hcl(this.h, this.c, this.l - K * (k == null ? 1 : k), this.opacity);\n },\n rgb: function() {\n return labConvert(this).rgb();\n }\n}));\n","import define, {extend} from \"./define\";\nimport {Color, rgbConvert, Rgb, darker, brighter} from \"./color\";\nimport {deg2rad, rad2deg} from \"./math\";\n\nvar A = -0.14861,\n B = +1.78277,\n C = -0.29227,\n D = -0.90649,\n E = +1.97294,\n ED = E * D,\n EB = E * B,\n BC_DA = B * C - D * A;\n\nfunction cubehelixConvert(o) {\n if (o instanceof Cubehelix) return new Cubehelix(o.h, o.s, o.l, o.opacity);\n if (!(o instanceof Rgb)) o = rgbConvert(o);\n var r = o.r / 255,\n g = o.g / 255,\n b = o.b / 255,\n l = (BC_DA * b + ED * r - EB * g) / (BC_DA + ED - EB),\n bl = b - l,\n 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 return new Cubehelix(h < 0 ? h + 360 : h, s, l, o.opacity);\n}\n\nexport default function cubehelix(h, s, l, opacity) {\n return arguments.length === 1 ? cubehelixConvert(h) : new Cubehelix(h, s, l, opacity == null ? 1 : opacity);\n}\n\nexport function Cubehelix(h, s, l, opacity) {\n this.h = +h;\n this.s = +s;\n this.l = +l;\n this.opacity = +opacity;\n}\n\ndefine(Cubehelix, cubehelix, extend(Color, {\n brighter: function(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Cubehelix(this.h, this.s, this.l * k, this.opacity);\n },\n darker: function(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Cubehelix(this.h, this.s, this.l * k, this.opacity);\n },\n 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 this.opacity\n );\n }\n}));\n","export function basis(t1, v0, v1, v2, v3) {\n var t2 = t1 * t1, t3 = t2 * t1;\n return ((1 - 3 * t1 + 3 * t2 - t3) * v0\n + (4 - 6 * t2 + 3 * t3) * v1\n + (1 + 3 * t1 + 3 * t2 - 3 * t3) * v2\n + t3 * v3) / 6;\n}\n\nexport default function(values) {\n var n = values.length - 1;\n return function(t) {\n var i = t <= 0 ? (t = 0) : t >= 1 ? (t = 1, n - 1) : Math.floor(t * n),\n v1 = values[i],\n v2 = values[i + 1],\n v0 = i > 0 ? values[i - 1] : 2 * v1 - v2,\n v3 = i < n - 1 ? values[i + 2] : 2 * v2 - v1;\n return basis((t - i / n) * n, v0, v1, v2, v3);\n };\n}\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","import constant from \"./constant\";\n\nfunction linear(a, d) {\n return function(t) {\n return a + t * d;\n };\n}\n\nfunction exponential(a, b, y) {\n return a = Math.pow(a, y), b = Math.pow(b, y) - a, y = 1 / y, function(t) {\n return Math.pow(a + t * b, y);\n };\n}\n\nexport function hue(a, b) {\n var d = b - a;\n return d ? linear(a, d > 180 || d < -180 ? d - 360 * Math.round(d / 360) : d) : constant(isNaN(a) ? b : a);\n}\n\nexport function gamma(y) {\n return (y = +y) === 1 ? nogamma : function(a, b) {\n return b - a ? exponential(a, b, y) : constant(isNaN(a) ? b : a);\n };\n}\n\nexport default function nogamma(a, b) {\n var d = b - a;\n return d ? linear(a, d) : constant(isNaN(a) ? b : a);\n}\n","import {rgb as colorRgb} from \"d3-color\";\nimport basis from \"./basis\";\nimport basisClosed from \"./basisClosed\";\nimport nogamma, {gamma} from \"./color\";\n\nexport default (function rgbGamma(y) {\n var color = gamma(y);\n\n function rgb(start, end) {\n var r = color((start = colorRgb(start)).r, (end = colorRgb(end)).r),\n g = color(start.g, end.g),\n b = color(start.b, end.b),\n opacity = nogamma(start.opacity, end.opacity);\n return function(t) {\n start.r = r(t);\n start.g = g(t);\n start.b = b(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n\n rgb.gamma = rgbGamma;\n\n return rgb;\n})(1);\n\nfunction rgbSpline(spline) {\n return function(colors) {\n var n = colors.length,\n r = new Array(n),\n g = new Array(n),\n b = new Array(n),\n i, color;\n for (i = 0; i < n; ++i) {\n color = colorRgb(colors[i]);\n r[i] = color.r || 0;\n g[i] = color.g || 0;\n b[i] = color.b || 0;\n }\n r = spline(r);\n g = spline(g);\n b = spline(b);\n color.opacity = 1;\n return function(t) {\n color.r = r(t);\n color.g = g(t);\n color.b = b(t);\n return color + \"\";\n };\n };\n}\n\nexport var rgbBasis = rgbSpline(basis);\nexport var rgbBasisClosed = rgbSpline(basisClosed);\n","export default function(a, b) {\n return a = +a, b -= a, function(t) {\n return a + b * t;\n };\n}\n","import {basis} from \"./basis\";\n\nexport default function(values) {\n var n = values.length;\n return function(t) {\n var i = Math.floor(((t %= 1) < 0 ? ++t : t) * n),\n v0 = values[(i + n - 1) % n],\n v1 = values[i % n],\n v2 = values[(i + 1) % n],\n v3 = values[(i + 2) % n];\n return basis((t - i / n) * n, v0, v1, v2, v3);\n };\n}\n","import number from \"./number\";\n\nvar reA = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n reB = new RegExp(reA.source, \"g\");\n\nfunction zero(b) {\n return function() {\n return b;\n };\n}\n\nfunction one(b) {\n return function(t) {\n return b(t) + \"\";\n };\n}\n\nexport default function(a, b) {\n var bi = reA.lastIndex = reB.lastIndex = 0, // scan index for next number in b\n am, // current match in a\n bm, // current match in b\n bs, // string preceding current number in b, if any\n i = -1, // index in s\n s = [], // string constants and placeholders\n q = []; // number interpolators\n\n // Coerce inputs to strings.\n a = a + \"\", b = b + \"\";\n\n // Interpolate pairs of numbers in a & b.\n while ((am = reA.exec(a))\n && (bm = reB.exec(b))) {\n if ((bs = bm.index) > bi) { // a string precedes the next number in b\n bs = b.slice(bi, bs);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n if ((am = am[0]) === (bm = bm[0])) { // numbers in a & b match\n if (s[i]) s[i] += bm; // coalesce with previous string\n else s[++i] = bm;\n } else { // interpolate non-matching numbers\n s[++i] = null;\n q.push({i: i, x: number(am, bm)});\n }\n bi = reB.lastIndex;\n }\n\n // Add remains of b.\n if (bi < b.length) {\n bs = b.slice(bi);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n\n // Special optimization for only a single match.\n // Otherwise, interpolate each of the numbers and rejoin the string.\n return s.length < 2 ? (q[0]\n ? one(q[0].x)\n : zero(b))\n : (b = q.length, function(t) {\n for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t);\n return s.join(\"\");\n });\n}\n","import decompose, {identity} from \"./decompose\";\n\nvar cssNode,\n cssRoot,\n cssView,\n svgNode;\n\nexport function parseCss(value) {\n if (value === \"none\") return identity;\n if (!cssNode) cssNode = document.createElement(\"DIV\"), cssRoot = document.documentElement, cssView = document.defaultView;\n cssNode.style.transform = value;\n value = cssView.getComputedStyle(cssRoot.appendChild(cssNode), null).getPropertyValue(\"transform\");\n cssRoot.removeChild(cssNode);\n value = value.slice(7, -1).split(\",\");\n return decompose(+value[0], +value[1], +value[2], +value[3], +value[4], +value[5]);\n}\n\nexport function parseSvg(value) {\n if (value == null) return identity;\n if (!svgNode) svgNode = document.createElementNS(\"http://www.w3.org/2000/svg\", \"g\");\n svgNode.setAttribute(\"transform\", value);\n if (!(value = svgNode.transform.baseVal.consolidate())) return identity;\n value = value.matrix;\n return decompose(value.a, value.b, value.c, value.d, value.e, value.f);\n}\n","import {color} from \"d3-color\";\nimport rgb from \"./rgb\";\nimport array from \"./array\";\nimport date from \"./date\";\nimport number from \"./number\";\nimport object from \"./object\";\nimport string from \"./string\";\nimport constant from \"./constant\";\n\nexport default function(a, b) {\n var t = typeof b, c;\n return b == null || t === \"boolean\" ? constant(b)\n : (t === \"number\" ? number\n : t === \"string\" ? ((c = color(b)) ? (b = c, rgb) : string)\n : b instanceof color ? rgb\n : b instanceof Date ? date\n : Array.isArray(b) ? array\n : typeof b.valueOf !== \"function\" && typeof b.toString !== \"function\" || isNaN(b) ? object\n : number)(a, b);\n}\n","export default function(a, b) {\n var d = new Date;\n return a = +a, b -= a, function(t) {\n return d.setTime(a + b * t), d;\n };\n}\n","import value from \"./value\";\n\nexport default function(a, b) {\n var nb = b ? b.length : 0,\n na = a ? Math.min(nb, a.length) : 0,\n x = new Array(na),\n c = new Array(nb),\n i;\n\n for (i = 0; i < na; ++i) x[i] = value(a[i], b[i]);\n for (; i < nb; ++i) c[i] = b[i];\n\n return function(t) {\n for (i = 0; i < na; ++i) c[i] = x[i](t);\n return c;\n };\n}\n","import value from \"./value\";\n\nexport default function(a, b) {\n var i = {},\n c = {},\n k;\n\n if (a === null || typeof a !== \"object\") a = {};\n if (b === null || typeof b !== \"object\") b = {};\n\n for (k in b) {\n if (k in a) {\n i[k] = value(a[k], b[k]);\n } else {\n c[k] = b[k];\n }\n }\n\n return function(t) {\n for (k in i) c[k] = i[k](t);\n return c;\n };\n}\n","export default function(a, b) {\n return a = +a, b -= a, function(t) {\n return Math.round(a + b * t);\n };\n}\n","var degrees = 180 / Math.PI;\n\nexport var identity = {\n translateX: 0,\n translateY: 0,\n rotate: 0,\n skewX: 0,\n scaleX: 1,\n scaleY: 1\n};\n\nexport default function(a, b, c, d, e, f) {\n var scaleX, scaleY, skewX;\n if (scaleX = Math.sqrt(a * a + b * b)) a /= scaleX, b /= scaleX;\n if (skewX = a * c + b * d) c -= a * skewX, d -= b * skewX;\n if (scaleY = Math.sqrt(c * c + d * d)) c /= scaleY, d /= scaleY, skewX /= scaleY;\n if (a * d < b * c) a = -a, b = -b, skewX = -skewX, scaleX = -scaleX;\n return {\n translateX: e,\n translateY: f,\n rotate: Math.atan2(b, a) * degrees,\n skewX: Math.atan(skewX) * degrees,\n scaleX: scaleX,\n scaleY: scaleY\n };\n}\n","import number from \"../number\";\nimport {parseCss, parseSvg} from \"./parse\";\n\nfunction interpolateTransform(parse, pxComma, pxParen, degParen) {\n\n function pop(s) {\n return s.length ? s.pop() + \" \" : \"\";\n }\n\n function translate(xa, ya, xb, yb, s, q) {\n if (xa !== xb || ya !== yb) {\n var i = s.push(\"translate(\", null, pxComma, null, pxParen);\n q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\n } else if (xb || yb) {\n s.push(\"translate(\" + xb + pxComma + yb + pxParen);\n }\n }\n\n function rotate(a, b, s, q) {\n if (a !== b) {\n if (a - b > 180) b += 360; else if (b - a > 180) a += 360; // shortest path\n q.push({i: s.push(pop(s) + \"rotate(\", null, degParen) - 2, x: number(a, b)});\n } else if (b) {\n s.push(pop(s) + \"rotate(\" + b + degParen);\n }\n }\n\n function skewX(a, b, s, q) {\n if (a !== b) {\n q.push({i: s.push(pop(s) + \"skewX(\", null, degParen) - 2, x: number(a, b)});\n } else if (b) {\n s.push(pop(s) + \"skewX(\" + b + degParen);\n }\n }\n\n function scale(xa, ya, xb, yb, s, q) {\n if (xa !== xb || ya !== yb) {\n var i = s.push(pop(s) + \"scale(\", null, \",\", null, \")\");\n q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\n } else if (xb !== 1 || yb !== 1) {\n s.push(pop(s) + \"scale(\" + xb + \",\" + yb + \")\");\n }\n }\n\n return function(a, b) {\n var s = [], // string constants and placeholders\n q = []; // number interpolators\n a = parse(a), b = parse(b);\n translate(a.translateX, a.translateY, b.translateX, b.translateY, s, q);\n rotate(a.rotate, b.rotate, s, q);\n skewX(a.skewX, b.skewX, s, q);\n scale(a.scaleX, a.scaleY, b.scaleX, b.scaleY, s, q);\n a = b = null; // gc\n return function(t) {\n var i = -1, n = q.length, o;\n while (++i < n) s[(o = q[i]).i] = o.x(t);\n return s.join(\"\");\n };\n };\n}\n\nexport var interpolateTransformCss = interpolateTransform(parseCss, \"px, \", \"px)\", \"deg)\");\nexport var interpolateTransformSvg = interpolateTransform(parseSvg, \", \", \")\", \")\");\n","var rho = Math.SQRT2,\n rho2 = 2,\n rho4 = 4,\n epsilon2 = 1e-12;\n\nfunction cosh(x) {\n return ((x = Math.exp(x)) + 1 / x) / 2;\n}\n\nfunction sinh(x) {\n return ((x = Math.exp(x)) - 1 / x) / 2;\n}\n\nfunction tanh(x) {\n return ((x = Math.exp(2 * x)) - 1) / (x + 1);\n}\n\n// p0 = [ux0, uy0, w0]\n// p1 = [ux1, uy1, w1]\nexport default function(p0, p1) {\n var ux0 = p0[0], uy0 = p0[1], w0 = p0[2],\n ux1 = p1[0], uy1 = p1[1], w1 = p1[2],\n dx = ux1 - ux0,\n dy = uy1 - uy0,\n d2 = dx * dx + dy * dy,\n i,\n S;\n\n // Special case for u0 ≅ u1.\n if (d2 < epsilon2) {\n S = Math.log(w1 / w0) / rho;\n i = function(t) {\n return [\n ux0 + t * dx,\n uy0 + t * dy,\n w0 * Math.exp(rho * t * S)\n ];\n }\n }\n\n // General case.\n else {\n var d1 = Math.sqrt(d2),\n b0 = (w1 * w1 - w0 * w0 + rho4 * d2) / (2 * w0 * rho2 * d1),\n b1 = (w1 * w1 - w0 * w0 - rho4 * d2) / (2 * w1 * rho2 * d1),\n r0 = Math.log(Math.sqrt(b0 * b0 + 1) - b0),\n r1 = Math.log(Math.sqrt(b1 * b1 + 1) - b1);\n S = (r1 - r0) / rho;\n i = function(t) {\n var s = t * S,\n coshr0 = cosh(r0),\n u = w0 / (rho2 * d1) * (coshr0 * tanh(rho * s + r0) - sinh(r0));\n return [\n ux0 + u * dx,\n uy0 + u * dy,\n w0 * coshr0 / cosh(rho * s + r0)\n ];\n }\n }\n\n i.duration = S * 1000;\n\n return i;\n}\n","import {hsl as colorHsl} from \"d3-color\";\nimport color, {hue} from \"./color\";\n\nfunction hsl(hue) {\n return function(start, end) {\n var h = hue((start = colorHsl(start)).h, (end = colorHsl(end)).h),\n s = color(start.s, end.s),\n l = color(start.l, end.l),\n opacity = color(start.opacity, end.opacity);\n return function(t) {\n start.h = h(t);\n start.s = s(t);\n start.l = l(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n}\n\nexport default hsl(hue);\nexport var hslLong = hsl(color);\n","import {hcl as colorHcl} from \"d3-color\";\nimport color, {hue} from \"./color\";\n\nfunction hcl(hue) {\n return function(start, end) {\n var h = hue((start = colorHcl(start)).h, (end = colorHcl(end)).h),\n c = color(start.c, end.c),\n l = color(start.l, end.l),\n opacity = color(start.opacity, end.opacity);\n return function(t) {\n start.h = h(t);\n start.c = c(t);\n start.l = l(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n}\n\nexport default hcl(hue);\nexport var hclLong = hcl(color);\n","import {cubehelix as colorCubehelix} from \"d3-color\";\nimport color, {hue} from \"./color\";\n\nfunction cubehelix(hue) {\n return (function cubehelixGamma(y) {\n y = +y;\n\n function cubehelix(start, end) {\n var h = hue((start = colorCubehelix(start)).h, (end = colorCubehelix(end)).h),\n s = color(start.s, end.s),\n l = color(start.l, end.l),\n opacity = color(start.opacity, end.opacity);\n return function(t) {\n start.h = h(t);\n start.s = s(t);\n start.l = l(Math.pow(t, y));\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n\n cubehelix.gamma = cubehelixGamma;\n\n return cubehelix;\n })(1);\n}\n\nexport default cubehelix(hue);\nexport var cubehelixLong = cubehelix(color);\n","export default function piecewise(interpolate, values) {\n var i = 0, n = values.length - 1, v = values[0], I = new Array(n < 0 ? 0 : n);\n while (i < n) I[i] = interpolate(v, v = values[++i]);\n return function(t) {\n var i = Math.max(0, Math.min(n - 1, Math.floor(t *= n)));\n return I[i](t - i);\n };\n}\n","export default function(interpolator, n) {\n var samples = new Array(n);\n for (var i = 0; i < n; ++i) samples[i] = interpolator(i / (n - 1));\n return samples;\n}\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","export default function(x) {\n return +x;\n}\n","import {bisect} from \"d3-array\";\nimport {interpolate as interpolateValue, interpolateRound} from \"d3-interpolate\";\nimport {map, slice} from \"./array\";\nimport constant from \"./constant\";\nimport number from \"./number\";\n\nvar unit = [0, 1];\n\nexport function deinterpolateLinear(a, b) {\n return (b -= (a = +a))\n ? function(x) { return (x - a) / b; }\n : constant(b);\n}\n\nfunction deinterpolateClamp(deinterpolate) {\n return function(a, b) {\n var d = deinterpolate(a = +a, b = +b);\n return function(x) { return x <= a ? 0 : x >= b ? 1 : d(x); };\n };\n}\n\nfunction reinterpolateClamp(reinterpolate) {\n return function(a, b) {\n var r = reinterpolate(a = +a, b = +b);\n return function(t) { return t <= 0 ? a : t >= 1 ? b : r(t); };\n };\n}\n\nfunction bimap(domain, range, deinterpolate, reinterpolate) {\n var d0 = domain[0], d1 = domain[1], r0 = range[0], r1 = range[1];\n if (d1 < d0) d0 = deinterpolate(d1, d0), r0 = reinterpolate(r1, r0);\n else d0 = deinterpolate(d0, d1), r0 = reinterpolate(r0, r1);\n return function(x) { return r0(d0(x)); };\n}\n\nfunction polymap(domain, range, deinterpolate, reinterpolate) {\n var j = Math.min(domain.length, range.length) - 1,\n d = new Array(j),\n r = new Array(j),\n i = -1;\n\n // Reverse descending domains.\n if (domain[j] < domain[0]) {\n domain = domain.slice().reverse();\n range = range.slice().reverse();\n }\n\n while (++i < j) {\n d[i] = deinterpolate(domain[i], domain[i + 1]);\n r[i] = reinterpolate(range[i], range[i + 1]);\n }\n\n return function(x) {\n var i = bisect(domain, x, 1, j) - 1;\n return r[i](d[i](x));\n };\n}\n\nexport function copy(source, target) {\n return target\n .domain(source.domain())\n .range(source.range())\n .interpolate(source.interpolate())\n .clamp(source.clamp());\n}\n\n// deinterpolate(a, b)(x) takes a domain value x in [a,b] and returns the corresponding parameter t in [0,1].\n// reinterpolate(a, b)(t) takes a parameter t in [0,1] and returns the corresponding domain value x in [a,b].\nexport default function continuous(deinterpolate, reinterpolate) {\n var domain = unit,\n range = unit,\n interpolate = interpolateValue,\n clamp = false,\n piecewise,\n output,\n input;\n\n function rescale() {\n piecewise = Math.min(domain.length, range.length) > 2 ? polymap : bimap;\n output = input = null;\n return scale;\n }\n\n function scale(x) {\n return (output || (output = piecewise(domain, range, clamp ? deinterpolateClamp(deinterpolate) : deinterpolate, interpolate)))(+x);\n }\n\n scale.invert = function(y) {\n return (input || (input = piecewise(range, domain, deinterpolateLinear, clamp ? reinterpolateClamp(reinterpolate) : reinterpolate)))(+y);\n };\n\n scale.domain = function(_) {\n return arguments.length ? (domain = map.call(_, number), rescale()) : domain.slice();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = slice.call(_), rescale()) : range.slice();\n };\n\n scale.rangeRound = function(_) {\n return range = slice.call(_), interpolate = interpolateRound, rescale();\n };\n\n scale.clamp = function(_) {\n return arguments.length ? (clamp = !!_, rescale()) : clamp;\n };\n\n scale.interpolate = function(_) {\n return arguments.length ? (interpolate = _, rescale()) : interpolate;\n };\n\n return rescale();\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].\nexport default function(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","import formatDecimal from \"./formatDecimal\";\n\nexport default function(x) {\n return x = formatDecimal(Math.abs(x)), x ? x[1] : NaN;\n}\n","// [[fill]align][sign][symbol][0][width][,][.precision][~][type]\nvar re = /^(?:(.)?([<>=^]))?([+\\-( ])?([$#])?(0)?(\\d+)?(,)?(\\.\\d+)?(~)?([a-z%])?$/i;\n\nexport default function formatSpecifier(specifier) {\n return new FormatSpecifier(specifier);\n}\n\nformatSpecifier.prototype = FormatSpecifier.prototype; // instanceof\n\nfunction FormatSpecifier(specifier) {\n if (!(match = re.exec(specifier))) throw new Error(\"invalid format: \" + specifier);\n var match;\n this.fill = match[1] || \" \";\n this.align = match[2] || \">\";\n this.sign = match[3] || \"-\";\n this.symbol = match[4] || \"\";\n this.zero = !!match[5];\n this.width = match[6] && +match[6];\n this.comma = !!match[7];\n this.precision = match[8] && +match[8].slice(1);\n this.trim = !!match[9];\n this.type = match[10] || \"\";\n}\n\nFormatSpecifier.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.trim ? \"~\" : \"\")\n + this.type;\n};\n","// Trims insignificant zeros, e.g., replaces 1.2000k with 1.2k.\nexport default function(s) {\n out: for (var n = s.length, i = 1, i0 = -1, i1; i < n; ++i) {\n switch (s[i]) {\n case \".\": i0 = i1 = i; break;\n case \"0\": if (i0 === 0) i0 = i; i1 = i; break;\n default: if (i0 > 0) { if (!+s[i]) break out; i0 = 0; } break;\n }\n }\n return i0 > 0 ? s.slice(0, i0) + s.slice(i1 + 1) : s;\n}\n","import formatDecimal from \"./formatDecimal\";\n\nexport var prefixExponent;\n\nexport default function(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, Math.max(0, p + i - 1))[0]; // less than 1y!\n}\n","import formatLocale from \"./locale\";\n\nvar locale;\nexport var format;\nexport var formatPrefix;\n\ndefaultLocale({\n decimal: \".\",\n thousands: \",\",\n grouping: [3],\n currency: [\"$\", \"\"]\n});\n\nexport default function defaultLocale(definition) {\n locale = formatLocale(definition);\n format = locale.format;\n formatPrefix = locale.formatPrefix;\n return locale;\n}\n","import formatDecimal from \"./formatDecimal\";\n\nexport default function(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","import formatPrefixAuto from \"./formatPrefixAuto\";\nimport formatRounded from \"./formatRounded\";\n\nexport default {\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","export default function(x) {\n return x;\n}\n","import exponent from \"./exponent\";\nimport formatGroup from \"./formatGroup\";\nimport formatNumerals from \"./formatNumerals\";\nimport formatSpecifier from \"./formatSpecifier\";\nimport formatTrim from \"./formatTrim\";\nimport formatTypes from \"./formatTypes\";\nimport {prefixExponent} from \"./formatPrefixAuto\";\nimport identity from \"./identity\";\n\nvar prefixes = [\"y\",\"z\",\"a\",\"f\",\"p\",\"n\",\"µ\",\"m\",\"\",\"k\",\"M\",\"G\",\"T\",\"P\",\"E\",\"Z\",\"Y\"];\n\nexport default function(locale) {\n var group = locale.grouping && locale.thousands ? formatGroup(locale.grouping, locale.thousands) : identity,\n currency = locale.currency,\n decimal = locale.decimal,\n numerals = locale.numerals ? formatNumerals(locale.numerals) : identity,\n percent = locale.percent || \"%\";\n\n function newFormat(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 trim = specifier.trim,\n type = specifier.type;\n\n // The \"n\" type is an alias for \",g\".\n if (type === \"n\") comma = true, type = \"g\";\n\n // The \"\" type, and any invalid type, is an alias for \".12~g\".\n else if (!formatTypes[type]) precision == null && (precision = 12), trim = true, type = \"g\";\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 // 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) ? percent : \"\";\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 = /[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 ? 6\n : /[gprs]/.test(type) ? Math.max(1, Math.min(21, precision))\n : Math.max(0, Math.min(20, precision));\n\n function format(value) {\n var valuePrefix = prefix,\n valueSuffix = suffix,\n i, n, c;\n\n if (type === \"c\") {\n valueSuffix = formatType(value) + valueSuffix;\n value = \"\";\n } else {\n value = +value;\n\n // Perform the initial formatting.\n var valueNegative = value < 0;\n value = formatType(Math.abs(value), precision);\n\n // Trim insignificant zeros.\n if (trim) value = formatTrim(value);\n\n // If a negative value rounds to zero during formatting, treat as positive.\n if (valueNegative && +value === 0) valueNegative = false;\n\n // Compute the prefix and suffix.\n valuePrefix = (valueNegative ? (sign === \"(\" ? sign : \"-\") : sign === \"-\" || sign === \"(\" ? \"\" : sign) + valuePrefix;\n valueSuffix = (type === \"s\" ? prefixes[8 + prefixExponent / 3] : \"\") + valueSuffix + (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 i = -1, n = value.length;\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 \"<\": value = valuePrefix + value + valueSuffix + padding; break;\n case \"=\": value = valuePrefix + padding + value + valueSuffix; break;\n case \"^\": value = padding.slice(0, length = padding.length >> 1) + valuePrefix + value + valueSuffix + padding.slice(length); break;\n default: value = padding + valuePrefix + value + valueSuffix; break;\n }\n\n return numerals(value);\n }\n\n format.toString = function() {\n return specifier + \"\";\n };\n\n return format;\n }\n\n function formatPrefix(specifier, value) {\n var f = newFormat((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: newFormat,\n formatPrefix: formatPrefix\n };\n}\n","export default function(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","export default function(numerals) {\n return function(value) {\n return value.replace(/[0-9]/g, function(i) {\n return numerals[+i];\n });\n };\n}\n","import exponent from \"./exponent\";\n\nexport default function(step) {\n return Math.max(0, -exponent(Math.abs(step)));\n}\n","import {tickStep} from \"d3-array\";\nimport {format, formatPrefix, formatSpecifier, precisionFixed, precisionPrefix, precisionRound} from \"d3-format\";\n\nexport default function(domain, count, specifier) {\n var start = domain[0],\n stop = domain[domain.length - 1],\n step = tickStep(start, stop, count == null ? 10 : count),\n precision;\n specifier = formatSpecifier(specifier == null ? \",f\" : specifier);\n switch (specifier.type) {\n case \"s\": {\n var value = Math.max(Math.abs(start), Math.abs(stop));\n if (specifier.precision == null && !isNaN(precision = precisionPrefix(step, value))) specifier.precision = precision;\n return formatPrefix(specifier, value);\n }\n case \"\":\n case \"e\":\n case \"g\":\n case \"p\":\n case \"r\": {\n if (specifier.precision == null && !isNaN(precision = precisionRound(step, Math.max(Math.abs(start), Math.abs(stop))))) specifier.precision = precision - (specifier.type === \"e\");\n break;\n }\n case \"f\":\n case \"%\": {\n if (specifier.precision == null && !isNaN(precision = precisionFixed(step))) specifier.precision = precision - (specifier.type === \"%\") * 2;\n break;\n }\n }\n return format(specifier);\n}\n","import exponent from \"./exponent\";\n\nexport default function(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","import exponent from \"./exponent\";\n\nexport default function(step, max) {\n step = Math.abs(step), max = Math.abs(max) - step;\n return Math.max(0, exponent(max) - exponent(step)) + 1;\n}\n","import {ticks, tickIncrement} from \"d3-array\";\nimport {interpolateNumber as reinterpolate} from \"d3-interpolate\";\nimport {default as continuous, copy, deinterpolateLinear as deinterpolate} from \"./continuous\";\nimport tickFormat from \"./tickFormat\";\n\nexport function linearish(scale) {\n var domain = scale.domain;\n\n scale.ticks = function(count) {\n var d = domain();\n return ticks(d[0], d[d.length - 1], count == null ? 10 : count);\n };\n\n scale.tickFormat = function(count, specifier) {\n return tickFormat(domain(), count, specifier);\n };\n\n scale.nice = function(count) {\n if (count == null) count = 10;\n\n var d = domain(),\n i0 = 0,\n i1 = d.length - 1,\n start = d[i0],\n stop = d[i1],\n step;\n\n if (stop < start) {\n step = start, start = stop, stop = step;\n step = i0, i0 = i1, i1 = step;\n }\n\n step = tickIncrement(start, stop, count);\n\n if (step > 0) {\n start = Math.floor(start / step) * step;\n stop = Math.ceil(stop / step) * step;\n step = tickIncrement(start, stop, count);\n } else if (step < 0) {\n start = Math.ceil(start * step) / step;\n stop = Math.floor(stop * step) / step;\n step = tickIncrement(start, stop, count);\n }\n\n if (step > 0) {\n d[i0] = Math.floor(start / step) * step;\n d[i1] = Math.ceil(stop / step) * step;\n domain(d);\n } else if (step < 0) {\n d[i0] = Math.ceil(start * step) / step;\n d[i1] = Math.floor(stop * step) / step;\n domain(d);\n }\n\n return scale;\n };\n\n return scale;\n}\n\nexport default function linear() {\n var scale = continuous(deinterpolate, reinterpolate);\n\n scale.copy = function() {\n return copy(scale, linear());\n };\n\n return linearish(scale);\n}\n","import {map} from \"./array\";\nimport {linearish} from \"./linear\";\nimport number from \"./number\";\n\nexport default function identity() {\n var domain = [0, 1];\n\n function scale(x) {\n return +x;\n }\n\n scale.invert = scale;\n\n scale.domain = scale.range = function(_) {\n return arguments.length ? (domain = map.call(_, number), scale) : domain.slice();\n };\n\n scale.copy = function() {\n return identity().domain(domain);\n };\n\n return linearish(scale);\n}\n","export default function(domain, interval) {\n domain = domain.slice();\n\n var i0 = 0,\n i1 = domain.length - 1,\n x0 = domain[i0],\n x1 = domain[i1],\n t;\n\n if (x1 < x0) {\n t = i0, i0 = i1, i1 = t;\n t = x0, x0 = x1, x1 = t;\n }\n\n domain[i0] = interval.floor(x0);\n domain[i1] = interval.ceil(x1);\n return domain;\n}\n","import {ticks} from \"d3-array\";\nimport {format} from \"d3-format\";\nimport constant from \"./constant\";\nimport nice from \"./nice\";\nimport {default as continuous, copy} from \"./continuous\";\n\nfunction deinterpolate(a, b) {\n return (b = Math.log(b / a))\n ? function(x) { return Math.log(x / a) / b; }\n : constant(b);\n}\n\nfunction reinterpolate(a, b) {\n return a < 0\n ? function(t) { return -Math.pow(-b, t) * Math.pow(-a, 1 - t); }\n : function(t) { return Math.pow(b, t) * Math.pow(a, 1 - t); };\n}\n\nfunction pow10(x) {\n return isFinite(x) ? +(\"1e\" + x) : x < 0 ? 0 : x;\n}\n\nfunction powp(base) {\n return base === 10 ? pow10\n : base === Math.E ? Math.exp\n : function(x) { return Math.pow(base, x); };\n}\n\nfunction logp(base) {\n return base === Math.E ? Math.log\n : base === 10 && Math.log10\n || base === 2 && Math.log2\n || (base = Math.log(base), function(x) { return Math.log(x) / base; });\n}\n\nfunction reflect(f) {\n return function(x) {\n return -f(-x);\n };\n}\n\nexport default function log() {\n var scale = continuous(deinterpolate, reinterpolate).domain([1, 10]),\n domain = scale.domain,\n base = 10,\n logs = logp(10),\n pows = powp(10);\n\n function rescale() {\n logs = logp(base), pows = powp(base);\n if (domain()[0] < 0) logs = reflect(logs), pows = reflect(pows);\n return scale;\n }\n\n scale.base = function(_) {\n return arguments.length ? (base = +_, rescale()) : base;\n };\n\n scale.domain = function(_) {\n return arguments.length ? (domain(_), rescale()) : domain();\n };\n\n scale.ticks = function(count) {\n var d = domain(),\n u = d[0],\n v = d[d.length - 1],\n r;\n\n if (r = v < u) i = u, u = v, v = i;\n\n var i = logs(u),\n j = logs(v),\n p,\n k,\n t,\n n = count == null ? 10 : +count,\n z = [];\n\n if (!(base % 1) && j - i < n) {\n i = Math.round(i) - 1, j = Math.round(j) + 1;\n if (u > 0) for (; i < j; ++i) {\n for (k = 1, p = pows(i); k < base; ++k) {\n t = p * k;\n if (t < u) continue;\n if (t > v) break;\n z.push(t);\n }\n } else for (; i < j; ++i) {\n for (k = base - 1, p = pows(i); k >= 1; --k) {\n t = p * k;\n if (t < u) continue;\n if (t > v) break;\n z.push(t);\n }\n }\n } else {\n z = ticks(i, j, Math.min(j - i, n)).map(pows);\n }\n\n return r ? z.reverse() : z;\n };\n\n scale.tickFormat = function(count, specifier) {\n if (specifier == null) specifier = base === 10 ? \".0e\" : \",\";\n if (typeof specifier !== \"function\") specifier = format(specifier);\n if (count === Infinity) return specifier;\n if (count == null) count = 10;\n var k = Math.max(1, base * count / scale.ticks().length); // TODO fast estimate?\n return function(d) {\n var i = d / pows(Math.round(logs(d)));\n if (i * base < base - 0.5) i *= base;\n return i <= k ? specifier(d) : \"\";\n };\n };\n\n scale.nice = function() {\n return domain(nice(domain(), {\n floor: function(x) { return pows(Math.floor(logs(x))); },\n ceil: function(x) { return pows(Math.ceil(logs(x))); }\n }));\n };\n\n scale.copy = function() {\n return copy(scale, log().base(base));\n };\n\n return scale;\n}\n","import constant from \"./constant\";\nimport {linearish} from \"./linear\";\nimport {default as continuous, copy} from \"./continuous\";\n\nfunction raise(x, exponent) {\n return x < 0 ? -Math.pow(-x, exponent) : Math.pow(x, exponent);\n}\n\nexport default function pow() {\n var exponent = 1,\n scale = continuous(deinterpolate, reinterpolate),\n domain = scale.domain;\n\n function deinterpolate(a, b) {\n return (b = raise(b, exponent) - (a = raise(a, exponent)))\n ? function(x) { return (raise(x, exponent) - a) / b; }\n : constant(b);\n }\n\n function reinterpolate(a, b) {\n b = raise(b, exponent) - (a = raise(a, exponent));\n return function(t) { return raise(a + b * t, 1 / exponent); };\n }\n\n scale.exponent = function(_) {\n return arguments.length ? (exponent = +_, domain(domain())) : exponent;\n };\n\n scale.copy = function() {\n return copy(scale, pow().exponent(exponent));\n };\n\n return linearish(scale);\n}\n\nexport function sqrt() {\n return pow().exponent(0.5);\n}\n","import {ascending, bisect, quantile as threshold} from \"d3-array\";\nimport {slice} from \"./array\";\n\nexport default function quantile() {\n var domain = [],\n range = [],\n thresholds = [];\n\n function rescale() {\n var i = 0, n = Math.max(1, range.length);\n thresholds = new Array(n - 1);\n while (++i < n) thresholds[i - 1] = threshold(domain, i / n);\n return scale;\n }\n\n function scale(x) {\n if (!isNaN(x = +x)) return range[bisect(thresholds, x)];\n }\n\n scale.invertExtent = function(y) {\n var i = range.indexOf(y);\n return i < 0 ? [NaN, NaN] : [\n i > 0 ? thresholds[i - 1] : domain[0],\n i < thresholds.length ? thresholds[i] : domain[domain.length - 1]\n ];\n };\n\n scale.domain = function(_) {\n if (!arguments.length) return domain.slice();\n domain = [];\n for (var i = 0, n = _.length, d; i < n; ++i) if (d = _[i], d != null && !isNaN(d = +d)) domain.push(d);\n domain.sort(ascending);\n return rescale();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = slice.call(_), rescale()) : range.slice();\n };\n\n scale.quantiles = function() {\n return thresholds.slice();\n };\n\n scale.copy = function() {\n return quantile()\n .domain(domain)\n .range(range);\n };\n\n return scale;\n}\n","import {bisect} from \"d3-array\";\nimport {slice} from \"./array\";\nimport {linearish} from \"./linear\";\n\nexport default function quantize() {\n var x0 = 0,\n x1 = 1,\n n = 1,\n domain = [0.5],\n range = [0, 1];\n\n function scale(x) {\n if (x <= x) return range[bisect(domain, x, 0, n)];\n }\n\n function rescale() {\n var i = -1;\n domain = new Array(n);\n while (++i < n) domain[i] = ((i + 1) * x1 - (i - n) * x0) / (n + 1);\n return scale;\n }\n\n scale.domain = function(_) {\n return arguments.length ? (x0 = +_[0], x1 = +_[1], rescale()) : [x0, x1];\n };\n\n scale.range = function(_) {\n return arguments.length ? (n = (range = slice.call(_)).length - 1, rescale()) : range.slice();\n };\n\n scale.invertExtent = function(y) {\n var i = range.indexOf(y);\n return i < 0 ? [NaN, NaN]\n : i < 1 ? [x0, domain[0]]\n : i >= n ? [domain[n - 1], x1]\n : [domain[i - 1], domain[i]];\n };\n\n scale.copy = function() {\n return quantize()\n .domain([x0, x1])\n .range(range);\n };\n\n return linearish(scale);\n}\n","import {bisect} from \"d3-array\";\nimport {slice} from \"./array\";\n\nexport default function threshold() {\n var domain = [0.5],\n range = [0, 1],\n n = 1;\n\n function scale(x) {\n if (x <= x) return range[bisect(domain, x, 0, n)];\n }\n\n scale.domain = function(_) {\n return arguments.length ? (domain = slice.call(_), n = Math.min(domain.length, range.length - 1), scale) : domain.slice();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = slice.call(_), n = Math.min(domain.length, range.length - 1), scale) : range.slice();\n };\n\n scale.invertExtent = function(y) {\n var i = range.indexOf(y);\n return [domain[i - 1], domain[i]];\n };\n\n scale.copy = function() {\n return threshold()\n .domain(domain)\n .range(range);\n };\n\n return scale;\n}\n","var t0 = new Date,\n t1 = new Date;\n\nexport default function newInterval(floori, offseti, count, field) {\n\n function interval(date) {\n return floori(date = new Date(+date)), date;\n }\n\n interval.floor = interval;\n\n interval.ceil = function(date) {\n return floori(date = new Date(date - 1)), offseti(date, 1), floori(date), date;\n };\n\n interval.round = function(date) {\n var d0 = interval(date),\n d1 = interval.ceil(date);\n return date - d0 < d1 - date ? d0 : d1;\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 = [], previous;\n start = interval.ceil(start);\n step = step == null ? 1 : Math.floor(step);\n if (!(start < stop) || !(step > 0)) return range; // also handles Invalid Date\n do range.push(previous = new Date(+start)), offseti(start, step), floori(start);\n while (previous < start && start < stop);\n return range;\n };\n\n interval.filter = function(test) {\n return newInterval(function(date) {\n if (date >= date) while (floori(date), !test(date)) date.setTime(date - 1);\n }, function(date, step) {\n if (date >= date) {\n if (step < 0) while (++step <= 0) {\n while (offseti(date, -1), !test(date)) {} // eslint-disable-line no-empty\n } else while (--step >= 0) {\n while (offseti(date, +1), !test(date)) {} // eslint-disable-line no-empty\n }\n }\n });\n };\n\n if (count) {\n 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 interval.every = function(step) {\n step = Math.floor(step);\n return !isFinite(step) || !(step > 0) ? null\n : !(step > 1) ? interval\n : interval.filter(field\n ? function(d) { return field(d) % step === 0; }\n : function(d) { return interval.count(0, d) % step === 0; });\n };\n }\n\n return interval;\n}\n","import interval from \"./interval\";\n\nvar millisecond = interval(function() {\n // noop\n}, function(date, step) {\n date.setTime(+date + step);\n}, function(start, end) {\n return end - start;\n});\n\n// An optimized implementation for this simple case.\nmillisecond.every = function(k) {\n k = Math.floor(k);\n if (!isFinite(k) || !(k > 0)) return null;\n if (!(k > 1)) return millisecond;\n return interval(function(date) {\n date.setTime(Math.floor(date / k) * k);\n }, function(date, step) {\n date.setTime(+date + step * k);\n }, function(start, end) {\n return (end - start) / k;\n });\n};\n\nexport default millisecond;\nexport var milliseconds = millisecond.range;\n","export var durationSecond = 1e3;\nexport var durationMinute = 6e4;\nexport var durationHour = 36e5;\nexport var durationDay = 864e5;\nexport var durationWeek = 6048e5;\n","import interval from \"./interval\";\nimport {durationSecond} from \"./duration\";\n\nvar second = interval(function(date) {\n date.setTime(Math.floor(date / durationSecond) * durationSecond);\n}, function(date, step) {\n date.setTime(+date + step * durationSecond);\n}, function(start, end) {\n return (end - start) / durationSecond;\n}, function(date) {\n return date.getUTCSeconds();\n});\n\nexport default second;\nexport var seconds = second.range;\n","import interval from \"./interval\";\nimport {durationMinute} from \"./duration\";\n\nvar minute = interval(function(date) {\n date.setTime(Math.floor(date / durationMinute) * durationMinute);\n}, function(date, step) {\n date.setTime(+date + step * durationMinute);\n}, function(start, end) {\n return (end - start) / durationMinute;\n}, function(date) {\n return date.getMinutes();\n});\n\nexport default minute;\nexport var minutes = minute.range;\n","import interval from \"./interval\";\nimport {durationHour, durationMinute} from \"./duration\";\n\nvar hour = interval(function(date) {\n var offset = date.getTimezoneOffset() * durationMinute % durationHour;\n if (offset < 0) offset += durationHour;\n date.setTime(Math.floor((+date - offset) / durationHour) * durationHour + offset);\n}, function(date, step) {\n date.setTime(+date + step * durationHour);\n}, function(start, end) {\n return (end - start) / durationHour;\n}, function(date) {\n return date.getHours();\n});\n\nexport default hour;\nexport var hours = hour.range;\n","import interval from \"./interval\";\nimport {durationDay, durationMinute} from \"./duration\";\n\nvar day = interval(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()) * durationMinute) / durationDay;\n}, function(date) {\n return date.getDate() - 1;\n});\n\nexport default day;\nexport var days = day.range;\n","import interval from \"./interval\";\nimport {durationMinute, durationWeek} from \"./duration\";\n\nfunction weekday(i) {\n return interval(function(date) {\n date.setDate(date.getDate() - (date.getDay() + 7 - i) % 7);\n date.setHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setDate(date.getDate() + step * 7);\n }, function(start, end) {\n return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationWeek;\n });\n}\n\nexport var sunday = weekday(0);\nexport var monday = weekday(1);\nexport var tuesday = weekday(2);\nexport var wednesday = weekday(3);\nexport var thursday = weekday(4);\nexport var friday = weekday(5);\nexport var saturday = weekday(6);\n\nexport var sundays = sunday.range;\nexport var mondays = monday.range;\nexport var tuesdays = tuesday.range;\nexport var wednesdays = wednesday.range;\nexport var thursdays = thursday.range;\nexport var fridays = friday.range;\nexport var saturdays = saturday.range;\n","import interval from \"./interval\";\n\nvar month = interval(function(date) {\n date.setDate(1);\n date.setHours(0, 0, 0, 0);\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}, function(date) {\n return date.getMonth();\n});\n\nexport default month;\nexport var months = month.range;\n","import interval from \"./interval\";\n\nvar year = interval(function(date) {\n date.setMonth(0, 1);\n date.setHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setFullYear(date.getFullYear() + step);\n}, function(start, end) {\n return end.getFullYear() - start.getFullYear();\n}, function(date) {\n return date.getFullYear();\n});\n\n// An optimized implementation for this simple case.\nyear.every = function(k) {\n return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : interval(function(date) {\n date.setFullYear(Math.floor(date.getFullYear() / k) * k);\n date.setMonth(0, 1);\n date.setHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setFullYear(date.getFullYear() + step * k);\n });\n};\n\nexport default year;\nexport var years = year.range;\n","import interval from \"./interval\";\nimport {durationMinute} from \"./duration\";\n\nvar utcMinute = interval(function(date) {\n date.setUTCSeconds(0, 0);\n}, function(date, step) {\n date.setTime(+date + step * durationMinute);\n}, function(start, end) {\n return (end - start) / durationMinute;\n}, function(date) {\n return date.getUTCMinutes();\n});\n\nexport default utcMinute;\nexport var utcMinutes = utcMinute.range;\n","import interval from \"./interval\";\nimport {durationHour} from \"./duration\";\n\nvar utcHour = interval(function(date) {\n date.setUTCMinutes(0, 0, 0);\n}, function(date, step) {\n date.setTime(+date + step * durationHour);\n}, function(start, end) {\n return (end - start) / durationHour;\n}, function(date) {\n return date.getUTCHours();\n});\n\nexport default utcHour;\nexport var utcHours = utcHour.range;\n","import interval from \"./interval\";\nimport {durationDay} from \"./duration\";\n\nvar utcDay = interval(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) / durationDay;\n}, function(date) {\n return date.getUTCDate() - 1;\n});\n\nexport default utcDay;\nexport var utcDays = utcDay.range;\n","import interval from \"./interval\";\nimport {durationWeek} from \"./duration\";\n\nfunction utcWeekday(i) {\n return interval(function(date) {\n date.setUTCDate(date.getUTCDate() - (date.getUTCDay() + 7 - i) % 7);\n date.setUTCHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setUTCDate(date.getUTCDate() + step * 7);\n }, function(start, end) {\n return (end - start) / durationWeek;\n });\n}\n\nexport var utcSunday = utcWeekday(0);\nexport var utcMonday = utcWeekday(1);\nexport var utcTuesday = utcWeekday(2);\nexport var utcWednesday = utcWeekday(3);\nexport var utcThursday = utcWeekday(4);\nexport var utcFriday = utcWeekday(5);\nexport var utcSaturday = utcWeekday(6);\n\nexport var utcSundays = utcSunday.range;\nexport var utcMondays = utcMonday.range;\nexport var utcTuesdays = utcTuesday.range;\nexport var utcWednesdays = utcWednesday.range;\nexport var utcThursdays = utcThursday.range;\nexport var utcFridays = utcFriday.range;\nexport var utcSaturdays = utcSaturday.range;\n","import interval from \"./interval\";\n\nvar utcMonth = interval(function(date) {\n date.setUTCDate(1);\n date.setUTCHours(0, 0, 0, 0);\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}, function(date) {\n return date.getUTCMonth();\n});\n\nexport default utcMonth;\nexport var utcMonths = utcMonth.range;\n","import interval from \"./interval\";\n\nvar utcYear = interval(function(date) {\n date.setUTCMonth(0, 1);\n date.setUTCHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setUTCFullYear(date.getUTCFullYear() + step);\n}, function(start, end) {\n return end.getUTCFullYear() - start.getUTCFullYear();\n}, function(date) {\n return date.getUTCFullYear();\n});\n\n// An optimized implementation for this simple case.\nutcYear.every = function(k) {\n return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : interval(function(date) {\n date.setUTCFullYear(Math.floor(date.getUTCFullYear() / k) * k);\n date.setUTCMonth(0, 1);\n date.setUTCHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setUTCFullYear(date.getUTCFullYear() + step * k);\n });\n};\n\nexport default utcYear;\nexport var utcYears = utcYear.range;\n","import {\n timeDay,\n timeSunday,\n timeMonday,\n timeThursday,\n timeYear,\n utcDay,\n utcSunday,\n utcMonday,\n utcThursday,\n utcYear\n} from \"d3-time\";\n\nfunction 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\nfunction 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\nfunction newYear(y) {\n return {y: y, m: 0, d: 1, H: 0, M: 0, S: 0, L: 0};\n}\n\nexport default function formatLocale(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 periodRe = formatRe(locale_periods),\n 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 \"f\": formatMicroseconds,\n \"H\": formatHour24,\n \"I\": formatHour12,\n \"j\": formatDayOfYear,\n \"L\": formatMilliseconds,\n \"m\": formatMonthNumber,\n \"M\": formatMinutes,\n \"p\": formatPeriod,\n \"Q\": formatUnixTimestamp,\n \"s\": formatUnixTimestampSeconds,\n \"S\": formatSeconds,\n \"u\": formatWeekdayNumberMonday,\n \"U\": formatWeekNumberSunday,\n \"V\": formatWeekNumberISO,\n \"w\": formatWeekdayNumberSunday,\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 \"f\": formatUTCMicroseconds,\n \"H\": formatUTCHour24,\n \"I\": formatUTCHour12,\n \"j\": formatUTCDayOfYear,\n \"L\": formatUTCMilliseconds,\n \"m\": formatUTCMonthNumber,\n \"M\": formatUTCMinutes,\n \"p\": formatUTCPeriod,\n \"Q\": formatUnixTimestamp,\n \"s\": formatUnixTimestampSeconds,\n \"S\": formatUTCSeconds,\n \"u\": formatUTCWeekdayNumberMonday,\n \"U\": formatUTCWeekNumberSunday,\n \"V\": formatUTCWeekNumberISO,\n \"w\": formatUTCWeekdayNumberSunday,\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 \"f\": parseMicroseconds,\n \"H\": parseHour24,\n \"I\": parseHour24,\n \"j\": parseDayOfYear,\n \"L\": parseMilliseconds,\n \"m\": parseMonthNumber,\n \"M\": parseMinutes,\n \"p\": parsePeriod,\n \"Q\": parseUnixTimestamp,\n \"s\": parseUnixTimestampSeconds,\n \"S\": parseSeconds,\n \"u\": parseWeekdayNumberMonday,\n \"U\": parseWeekNumberSunday,\n \"V\": parseWeekNumberISO,\n \"w\": parseWeekdayNumberSunday,\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 if (!(date instanceof Date)) date = new Date(+date);\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 else pad = c === \"e\" ? \" \" : \"0\";\n if (format = formats[c]) c = format(date, 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 week, day;\n if (i != string.length) return null;\n\n // If a UNIX timestamp is specified, return it.\n if (\"Q\" in d) return new Date(d.Q);\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 // Convert day-of-week and week-of-year to day-of-year.\n if (\"V\" in d) {\n if (d.V < 1 || d.V > 53) return null;\n if (!(\"w\" in d)) d.w = 1;\n if (\"Z\" in d) {\n week = utcDate(newYear(d.y)), day = week.getUTCDay();\n week = day > 4 || day === 0 ? utcMonday.ceil(week) : utcMonday(week);\n week = utcDay.offset(week, (d.V - 1) * 7);\n d.y = week.getUTCFullYear();\n d.m = week.getUTCMonth();\n d.d = week.getUTCDate() + (d.w + 6) % 7;\n } else {\n week = newDate(newYear(d.y)), day = week.getDay();\n week = day > 4 || day === 0 ? timeMonday.ceil(week) : timeMonday(week);\n week = timeDay.offset(week, (d.V - 1) * 7);\n d.y = week.getFullYear();\n d.m = week.getMonth();\n d.d = week.getDate() + (d.w + 6) % 7;\n }\n } else if (\"W\" in d || \"U\" in d) {\n if (!(\"w\" in d)) d.w = \"u\" in d ? d.u % 7 : \"W\" in d ? 1 : 0;\n day = \"Z\" in d ? utcDate(newYear(d.y)).getUTCDay() : newDate(newYear(d.y)).getDay();\n d.m = 0;\n d.d = \"W\" in d ? (d.w + 6) % 7 + d.W * 7 - (day + 5) % 7 : d.w + d.U * 7 - (day + 6) % 7;\n }\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 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 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 parsePeriod(d, string, i) {\n var n = periodRe.exec(string.slice(i));\n return n ? (d.p = periodLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n }\n\n function parseShortWeekday(d, string, i) {\n var n = shortWeekdayRe.exec(string.slice(i));\n return n ? (d.w = shortWeekdayLookup[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[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[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[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 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.toString = function() { return specifier; };\n return f;\n },\n parse: function(specifier) {\n var p = newParse(specifier += \"\", localDate);\n p.toString = function() { return specifier; };\n return p;\n },\n utcFormat: function(specifier) {\n var f = newFormat(specifier += \"\", utcFormats);\n f.toString = function() { return specifier; };\n return f;\n },\n utcParse: function(specifier) {\n var p = newParse(specifier, utcDate);\n p.toString = function() { return specifier; };\n return p;\n }\n };\n}\n\nvar pads = {\"-\": \"\", \"_\": \" \", \"0\": \"0\"},\n numberRe = /^\\s*\\d+/, // note: ignores next directive\n percentRe = /^%/,\n requoteRe = /[\\\\^$*+?|[\\]().{}]/g;\n\nfunction 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\nfunction requote(s) {\n return s.replace(requoteRe, \"\\\\$&\");\n}\n\nfunction formatRe(names) {\n return new RegExp(\"^(?:\" + names.map(requote).join(\"|\") + \")\", \"i\");\n}\n\nfunction formatLookup(names) {\n var map = {}, i = -1, n = names.length;\n while (++i < n) map[names[i].toLowerCase()] = i;\n return map;\n}\n\nfunction parseWeekdayNumberSunday(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\nfunction parseWeekdayNumberMonday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 1));\n return n ? (d.u = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberSunday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.U = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberISO(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.V = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberMonday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.W = +n[0], i + n[0].length) : -1;\n}\n\nfunction 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\nfunction 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\nfunction parseZone(d, string, i) {\n var n = /^(Z)|([+-]\\d\\d)(?::?(\\d\\d))?/.exec(string.slice(i, i + 6));\n return n ? (d.Z = n[1] ? 0 : -(n[2] + (n[3] || \"00\")), i + n[0].length) : -1;\n}\n\nfunction 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\nfunction 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\nfunction 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\nfunction 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\nfunction 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\nfunction 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\nfunction 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\nfunction parseMicroseconds(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 6));\n return n ? (d.L = Math.floor(n[0] / 1000), i + n[0].length) : -1;\n}\n\nfunction parseLiteralPercent(d, string, i) {\n var n = percentRe.exec(string.slice(i, i + 1));\n return n ? i + n[0].length : -1;\n}\n\nfunction parseUnixTimestamp(d, string, i) {\n var n = numberRe.exec(string.slice(i));\n return n ? (d.Q = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseUnixTimestampSeconds(d, string, i) {\n var n = numberRe.exec(string.slice(i));\n return n ? (d.Q = (+n[0]) * 1000, i + n[0].length) : -1;\n}\n\nfunction formatDayOfMonth(d, p) {\n return pad(d.getDate(), p, 2);\n}\n\nfunction formatHour24(d, p) {\n return pad(d.getHours(), p, 2);\n}\n\nfunction formatHour12(d, p) {\n return pad(d.getHours() % 12 || 12, p, 2);\n}\n\nfunction formatDayOfYear(d, p) {\n return pad(1 + timeDay.count(timeYear(d), d), p, 3);\n}\n\nfunction formatMilliseconds(d, p) {\n return pad(d.getMilliseconds(), p, 3);\n}\n\nfunction formatMicroseconds(d, p) {\n return formatMilliseconds(d, p) + \"000\";\n}\n\nfunction formatMonthNumber(d, p) {\n return pad(d.getMonth() + 1, p, 2);\n}\n\nfunction formatMinutes(d, p) {\n return pad(d.getMinutes(), p, 2);\n}\n\nfunction formatSeconds(d, p) {\n return pad(d.getSeconds(), p, 2);\n}\n\nfunction formatWeekdayNumberMonday(d) {\n var day = d.getDay();\n return day === 0 ? 7 : day;\n}\n\nfunction formatWeekNumberSunday(d, p) {\n return pad(timeSunday.count(timeYear(d), d), p, 2);\n}\n\nfunction formatWeekNumberISO(d, p) {\n var day = d.getDay();\n d = (day >= 4 || day === 0) ? timeThursday(d) : timeThursday.ceil(d);\n return pad(timeThursday.count(timeYear(d), d) + (timeYear(d).getDay() === 4), p, 2);\n}\n\nfunction formatWeekdayNumberSunday(d) {\n return d.getDay();\n}\n\nfunction formatWeekNumberMonday(d, p) {\n return pad(timeMonday.count(timeYear(d), d), p, 2);\n}\n\nfunction formatYear(d, p) {\n return pad(d.getFullYear() % 100, p, 2);\n}\n\nfunction formatFullYear(d, p) {\n return pad(d.getFullYear() % 10000, p, 4);\n}\n\nfunction 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\nfunction formatUTCDayOfMonth(d, p) {\n return pad(d.getUTCDate(), p, 2);\n}\n\nfunction formatUTCHour24(d, p) {\n return pad(d.getUTCHours(), p, 2);\n}\n\nfunction formatUTCHour12(d, p) {\n return pad(d.getUTCHours() % 12 || 12, p, 2);\n}\n\nfunction formatUTCDayOfYear(d, p) {\n return pad(1 + utcDay.count(utcYear(d), d), p, 3);\n}\n\nfunction formatUTCMilliseconds(d, p) {\n return pad(d.getUTCMilliseconds(), p, 3);\n}\n\nfunction formatUTCMicroseconds(d, p) {\n return formatUTCMilliseconds(d, p) + \"000\";\n}\n\nfunction formatUTCMonthNumber(d, p) {\n return pad(d.getUTCMonth() + 1, p, 2);\n}\n\nfunction formatUTCMinutes(d, p) {\n return pad(d.getUTCMinutes(), p, 2);\n}\n\nfunction formatUTCSeconds(d, p) {\n return pad(d.getUTCSeconds(), p, 2);\n}\n\nfunction formatUTCWeekdayNumberMonday(d) {\n var dow = d.getUTCDay();\n return dow === 0 ? 7 : dow;\n}\n\nfunction formatUTCWeekNumberSunday(d, p) {\n return pad(utcSunday.count(utcYear(d), d), p, 2);\n}\n\nfunction formatUTCWeekNumberISO(d, p) {\n var day = d.getUTCDay();\n d = (day >= 4 || day === 0) ? utcThursday(d) : utcThursday.ceil(d);\n return pad(utcThursday.count(utcYear(d), d) + (utcYear(d).getUTCDay() === 4), p, 2);\n}\n\nfunction formatUTCWeekdayNumberSunday(d) {\n return d.getUTCDay();\n}\n\nfunction formatUTCWeekNumberMonday(d, p) {\n return pad(utcMonday.count(utcYear(d), d), p, 2);\n}\n\nfunction formatUTCYear(d, p) {\n return pad(d.getUTCFullYear() % 100, p, 2);\n}\n\nfunction formatUTCFullYear(d, p) {\n return pad(d.getUTCFullYear() % 10000, p, 4);\n}\n\nfunction formatUTCZone() {\n return \"+0000\";\n}\n\nfunction formatLiteralPercent() {\n return \"%\";\n}\n\nfunction formatUnixTimestamp(d) {\n return +d;\n}\n\nfunction formatUnixTimestampSeconds(d) {\n return Math.floor(+d / 1000);\n}\n","import formatLocale from \"./locale\";\n\nvar locale;\nexport var timeFormat;\nexport var timeParse;\nexport var utcFormat;\nexport var utcParse;\n\ndefaultLocale({\n dateTime: \"%x, %X\",\n date: \"%-m/%-d/%Y\",\n time: \"%-I:%M:%S %p\",\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\nexport default function defaultLocale(definition) {\n locale = formatLocale(definition);\n timeFormat = locale.format;\n timeParse = locale.parse;\n utcFormat = locale.utcFormat;\n utcParse = locale.utcParse;\n return locale;\n}\n","import {utcFormat} from \"./defaultLocale\";\n\nexport var isoSpecifier = \"%Y-%m-%dT%H:%M:%S.%LZ\";\n\nfunction formatIsoNative(date) {\n return date.toISOString();\n}\n\nvar formatIso = Date.prototype.toISOString\n ? formatIsoNative\n : utcFormat(isoSpecifier);\n\nexport default formatIso;\n","import {isoSpecifier} from \"./isoFormat\";\nimport {utcParse} from \"./defaultLocale\";\n\nfunction parseIsoNative(string) {\n var date = new Date(string);\n return isNaN(date) ? null : date;\n}\n\nvar parseIso = +new Date(\"2000-01-01T00:00:00.000Z\")\n ? parseIsoNative\n : utcParse(isoSpecifier);\n\nexport default parseIso;\n","import {bisector, tickStep} from \"d3-array\";\nimport {interpolateNumber as reinterpolate} from \"d3-interpolate\";\nimport {timeYear, timeMonth, timeWeek, timeDay, timeHour, timeMinute, timeSecond, timeMillisecond} from \"d3-time\";\nimport {timeFormat} from \"d3-time-format\";\nimport {map} from \"./array\";\nimport {default as continuous, copy, deinterpolateLinear as deinterpolate} from \"./continuous\";\nimport nice from \"./nice\";\n\nvar durationSecond = 1000,\n durationMinute = durationSecond * 60,\n durationHour = durationMinute * 60,\n durationDay = durationHour * 24,\n durationWeek = durationDay * 7,\n durationMonth = durationDay * 30,\n durationYear = durationDay * 365;\n\nfunction date(t) {\n return new Date(t);\n}\n\nfunction number(t) {\n return t instanceof Date ? +t : +new Date(+t);\n}\n\nexport function calendar(year, month, week, day, hour, minute, second, millisecond, format) {\n var scale = continuous(deinterpolate, reinterpolate),\n invert = scale.invert,\n domain = scale.domain;\n\n var formatMillisecond = format(\".%L\"),\n formatSecond = format(\":%S\"),\n formatMinute = format(\"%I:%M\"),\n formatHour = format(\"%I %p\"),\n formatDay = format(\"%a %d\"),\n formatWeek = format(\"%b %d\"),\n formatMonth = format(\"%B\"),\n formatYear = format(\"%Y\");\n\n var tickIntervals = [\n [second, 1, durationSecond],\n [second, 5, 5 * durationSecond],\n [second, 15, 15 * durationSecond],\n [second, 30, 30 * durationSecond],\n [minute, 1, durationMinute],\n [minute, 5, 5 * durationMinute],\n [minute, 15, 15 * durationMinute],\n [minute, 30, 30 * durationMinute],\n [ hour, 1, durationHour ],\n [ hour, 3, 3 * durationHour ],\n [ hour, 6, 6 * durationHour ],\n [ hour, 12, 12 * durationHour ],\n [ day, 1, durationDay ],\n [ day, 2, 2 * durationDay ],\n [ week, 1, durationWeek ],\n [ month, 1, durationMonth ],\n [ month, 3, 3 * durationMonth ],\n [ year, 1, durationYear ]\n ];\n\n function tickFormat(date) {\n return (second(date) < date ? formatMillisecond\n : minute(date) < date ? formatSecond\n : hour(date) < date ? formatMinute\n : day(date) < date ? formatHour\n : month(date) < date ? (week(date) < date ? formatDay : formatWeek)\n : year(date) < date ? formatMonth\n : formatYear)(date);\n }\n\n function tickInterval(interval, start, stop, step) {\n if (interval == null) interval = 10;\n\n // If a desired tick count is specified, pick a reasonable tick interval\n // based on the extent of the domain and a rough estimate of tick size.\n // Otherwise, assume interval is already a time interval and use it.\n if (typeof interval === \"number\") {\n var target = Math.abs(stop - start) / interval,\n i = bisector(function(i) { return i[2]; }).right(tickIntervals, target);\n if (i === tickIntervals.length) {\n step = tickStep(start / durationYear, stop / durationYear, interval);\n interval = year;\n } else if (i) {\n i = tickIntervals[target / tickIntervals[i - 1][2] < tickIntervals[i][2] / target ? i - 1 : i];\n step = i[1];\n interval = i[0];\n } else {\n step = Math.max(tickStep(start, stop, interval), 1);\n interval = millisecond;\n }\n }\n\n return step == null ? interval : interval.every(step);\n }\n\n scale.invert = function(y) {\n return new Date(invert(y));\n };\n\n scale.domain = function(_) {\n return arguments.length ? domain(map.call(_, number)) : domain().map(date);\n };\n\n scale.ticks = function(interval, step) {\n var d = domain(),\n t0 = d[0],\n t1 = d[d.length - 1],\n r = t1 < t0,\n t;\n if (r) t = t0, t0 = t1, t1 = t;\n t = tickInterval(interval, t0, t1, step);\n t = t ? t.range(t0, t1 + 1) : []; // inclusive stop\n return r ? t.reverse() : t;\n };\n\n scale.tickFormat = function(count, specifier) {\n return specifier == null ? tickFormat : format(specifier);\n };\n\n scale.nice = function(interval, step) {\n var d = domain();\n return (interval = tickInterval(interval, d[0], d[d.length - 1], step))\n ? domain(nice(d, interval))\n : scale;\n };\n\n scale.copy = function() {\n return copy(scale, calendar(year, month, week, day, hour, minute, second, millisecond, format));\n };\n\n return scale;\n}\n\nexport default function() {\n return calendar(timeYear, timeMonth, timeWeek, timeDay, timeHour, timeMinute, timeSecond, timeMillisecond, timeFormat).domain([new Date(2000, 0, 1), new Date(2000, 0, 2)]);\n}\n","export default function(s) {\n return s.match(/.{6}/g).map(function(x) {\n return \"#\" + x;\n });\n}\n","import colors from \"./colors\";\n\nexport default colors(\"1f77b4ff7f0e2ca02cd627289467bd8c564be377c27f7f7fbcbd2217becf\");\n","import colors from \"./colors\";\n\nexport default colors(\"393b795254a36b6ecf9c9ede6379398ca252b5cf6bcedb9c8c6d31bd9e39e7ba52e7cb94843c39ad494ad6616be7969c7b4173a55194ce6dbdde9ed6\");\n","import colors from \"./colors\";\n\nexport default colors(\"1f77b4aec7e8ff7f0effbb782ca02c98df8ad62728ff98969467bdc5b0d58c564bc49c94e377c2f7b6d27f7f7fc7c7c7bcbd22dbdb8d17becf9edae5\");\n","import colors from \"./colors\";\n\nexport default colors(\"3182bd6baed69ecae1c6dbefe6550dfd8d3cfdae6bfdd0a231a35474c476a1d99bc7e9c0756bb19e9ac8bcbddcdadaeb636363969696bdbdbdd9d9d9\");\n","import {cubehelix} from \"d3-color\";\nimport {interpolateCubehelixLong} from \"d3-interpolate\";\n\nexport default interpolateCubehelixLong(cubehelix(300, 0.5, 0.0), cubehelix(-240, 0.5, 1.0));\n","import {cubehelix} from \"d3-color\";\nimport {interpolateCubehelixLong} from \"d3-interpolate\";\n\nexport var warm = interpolateCubehelixLong(cubehelix(-100, 0.75, 0.35), cubehelix(80, 1.50, 0.8));\n\nexport var cool = interpolateCubehelixLong(cubehelix(260, 0.75, 0.35), cubehelix(80, 1.50, 0.8));\n\nvar rainbow = cubehelix();\n\nexport default function(t) {\n if (t < 0 || t > 1) t -= Math.floor(t);\n var ts = Math.abs(t - 0.5);\n rainbow.h = 360 * t - 100;\n rainbow.s = 1.5 - 1.5 * ts;\n rainbow.l = 0.8 - 0.9 * ts;\n return rainbow + \"\";\n}\n","import colors from \"./colors\";\n\nfunction ramp(range) {\n var n = range.length;\n return function(t) {\n return range[Math.max(0, Math.min(n - 1, Math.floor(t * n)))];\n };\n}\n\nexport default ramp(colors(\"44015444025645045745055946075a46085c460a5d460b5e470d60470e6147106347116447136548146748166848176948186a481a6c481b6d481c6e481d6f481f70482071482173482374482475482576482677482878482979472a7a472c7a472d7b472e7c472f7d46307e46327e46337f463480453581453781453882443983443a83443b84433d84433e85423f854240864241864142874144874045884046883f47883f48893e49893e4a893e4c8a3d4d8a3d4e8a3c4f8a3c508b3b518b3b528b3a538b3a548c39558c39568c38588c38598c375a8c375b8d365c8d365d8d355e8d355f8d34608d34618d33628d33638d32648e32658e31668e31678e31688e30698e306a8e2f6b8e2f6c8e2e6d8e2e6e8e2e6f8e2d708e2d718e2c718e2c728e2c738e2b748e2b758e2a768e2a778e2a788e29798e297a8e297b8e287c8e287d8e277e8e277f8e27808e26818e26828e26828e25838e25848e25858e24868e24878e23888e23898e238a8d228b8d228c8d228d8d218e8d218f8d21908d21918c20928c20928c20938c1f948c1f958b1f968b1f978b1f988b1f998a1f9a8a1e9b8a1e9c891e9d891f9e891f9f881fa0881fa1881fa1871fa28720a38620a48621a58521a68522a78522a88423a98324aa8325ab8225ac8226ad8127ad8128ae8029af7f2ab07f2cb17e2db27d2eb37c2fb47c31b57b32b67a34b67935b77937b87838b9773aba763bbb753dbc743fbc7340bd7242be7144bf7046c06f48c16e4ac16d4cc26c4ec36b50c46a52c56954c56856c66758c7655ac8645cc8635ec96260ca6063cb5f65cb5e67cc5c69cd5b6ccd5a6ece5870cf5773d05675d05477d1537ad1517cd2507fd34e81d34d84d44b86d54989d5488bd6468ed64590d74393d74195d84098d83e9bd93c9dd93ba0da39a2da37a5db36a8db34aadc32addc30b0dd2fb2dd2db5de2bb8de29bade28bddf26c0df25c2df23c5e021c8e020cae11fcde11dd0e11cd2e21bd5e21ad8e219dae319dde318dfe318e2e418e5e419e7e419eae51aece51befe51cf1e51df4e61ef6e620f8e621fbe723fde725\"));\n\nexport var magma = ramp(colors(\"00000401000501010601010802010902020b02020d03030f03031204041405041606051806051a07061c08071e0907200a08220b09240c09260d0a290e0b2b100b2d110c2f120d31130d34140e36150e38160f3b180f3d19103f1a10421c10441d11471e114920114b21114e22115024125325125527125829115a2a115c2c115f2d11612f116331116533106734106936106b38106c390f6e3b0f703d0f713f0f72400f74420f75440f764510774710784910784a10794c117a4e117b4f127b51127c52137c54137d56147d57157e59157e5a167e5c167f5d177f5f187f601880621980641a80651a80671b80681c816a1c816b1d816d1d816e1e81701f81721f817320817521817621817822817922827b23827c23827e24828025828125818326818426818627818827818928818b29818c29818e2a81902a81912b81932b80942c80962c80982d80992d809b2e7f9c2e7f9e2f7fa02f7fa1307ea3307ea5317ea6317da8327daa337dab337cad347cae347bb0357bb2357bb3367ab5367ab73779b83779ba3878bc3978bd3977bf3a77c03a76c23b75c43c75c53c74c73d73c83e73ca3e72cc3f71cd4071cf4070d0416fd2426fd3436ed5446dd6456cd8456cd9466bdb476adc4869de4968df4a68e04c67e24d66e34e65e44f64e55064e75263e85362e95462ea5661eb5760ec5860ed5a5fee5b5eef5d5ef05f5ef1605df2625df2645cf3655cf4675cf4695cf56b5cf66c5cf66e5cf7705cf7725cf8745cf8765cf9785df9795df97b5dfa7d5efa7f5efa815ffb835ffb8560fb8761fc8961fc8a62fc8c63fc8e64fc9065fd9266fd9467fd9668fd9869fd9a6afd9b6bfe9d6cfe9f6dfea16efea36ffea571fea772fea973feaa74feac76feae77feb078feb27afeb47bfeb67cfeb77efeb97ffebb81febd82febf84fec185fec287fec488fec68afec88cfeca8dfecc8ffecd90fecf92fed194fed395fed597fed799fed89afdda9cfddc9efddea0fde0a1fde2a3fde3a5fde5a7fde7a9fde9aafdebacfcecaefceeb0fcf0b2fcf2b4fcf4b6fcf6b8fcf7b9fcf9bbfcfbbdfcfdbf\"));\n\nexport var inferno = ramp(colors(\"00000401000501010601010802010a02020c02020e03021004031204031405041706041907051b08051d09061f0a07220b07240c08260d08290e092b10092d110a30120a32140b34150b37160b39180c3c190c3e1b0c411c0c431e0c451f0c48210c4a230c4c240c4f260c51280b53290b552b0b572d0b592f0a5b310a5c320a5e340a5f3609613809623909633b09643d09653e0966400a67420a68440a68450a69470b6a490b6a4a0c6b4c0c6b4d0d6c4f0d6c510e6c520e6d540f6d550f6d57106e59106e5a116e5c126e5d126e5f136e61136e62146e64156e65156e67166e69166e6a176e6c186e6d186e6f196e71196e721a6e741a6e751b6e771c6d781c6d7a1d6d7c1d6d7d1e6d7f1e6c801f6c82206c84206b85216b87216b88226a8a226a8c23698d23698f24699025689225689326679526679727669827669a28659b29649d29649f2a63a02a63a22b62a32c61a52c60a62d60a82e5fa92e5eab2f5ead305dae305cb0315bb1325ab3325ab43359b63458b73557b93556ba3655bc3754bd3853bf3952c03a51c13a50c33b4fc43c4ec63d4dc73e4cc83f4bca404acb4149cc4248ce4347cf4446d04545d24644d34743d44842d54a41d74b3fd84c3ed94d3dda4e3cdb503bdd513ade5238df5337e05536e15635e25734e35933e45a31e55c30e65d2fe75e2ee8602de9612bea632aeb6429eb6628ec6726ed6925ee6a24ef6c23ef6e21f06f20f1711ff1731df2741cf3761bf37819f47918f57b17f57d15f67e14f68013f78212f78410f8850ff8870ef8890cf98b0bf98c0af98e09fa9008fa9207fa9407fb9606fb9706fb9906fb9b06fb9d07fc9f07fca108fca309fca50afca60cfca80dfcaa0ffcac11fcae12fcb014fcb216fcb418fbb61afbb81dfbba1ffbbc21fbbe23fac026fac228fac42afac62df9c72ff9c932f9cb35f8cd37f8cf3af7d13df7d340f6d543f6d746f5d949f5db4cf4dd4ff4df53f4e156f3e35af3e55df2e661f2e865f2ea69f1ec6df1ed71f1ef75f1f179f2f27df2f482f3f586f3f68af4f88ef5f992f6fa96f8fb9af9fc9dfafda1fcffa4\"));\n\nexport var plasma = ramp(colors(\"0d088710078813078916078a19068c1b068d1d068e20068f2206902406912605912805922a05932c05942e05952f059631059733059735049837049938049a3a049a3c049b3e049c3f049c41049d43039e44039e46039f48039f4903a04b03a14c02a14e02a25002a25102a35302a35502a45601a45801a45901a55b01a55c01a65e01a66001a66100a76300a76400a76600a76700a86900a86a00a86c00a86e00a86f00a87100a87201a87401a87501a87701a87801a87a02a87b02a87d03a87e03a88004a88104a78305a78405a78606a68707a68808a68a09a58b0aa58d0ba58e0ca48f0da4910ea3920fa39410a29511a19613a19814a099159f9a169f9c179e9d189d9e199da01a9ca11b9ba21d9aa31e9aa51f99a62098a72197a82296aa2395ab2494ac2694ad2793ae2892b02991b12a90b22b8fb32c8eb42e8db52f8cb6308bb7318ab83289ba3388bb3488bc3587bd3786be3885bf3984c03a83c13b82c23c81c33d80c43e7fc5407ec6417dc7427cc8437bc9447aca457acb4679cc4778cc4977cd4a76ce4b75cf4c74d04d73d14e72d24f71d35171d45270d5536fd5546ed6556dd7566cd8576bd9586ada5a6ada5b69db5c68dc5d67dd5e66de5f65de6164df6263e06363e16462e26561e26660e3685fe4695ee56a5de56b5de66c5ce76e5be76f5ae87059e97158e97257ea7457eb7556eb7655ec7754ed7953ed7a52ee7b51ef7c51ef7e50f07f4ff0804ef1814df1834cf2844bf3854bf3874af48849f48948f58b47f58c46f68d45f68f44f79044f79143f79342f89441f89540f9973ff9983ef99a3efa9b3dfa9c3cfa9e3bfb9f3afba139fba238fca338fca537fca636fca835fca934fdab33fdac33fdae32fdaf31fdb130fdb22ffdb42ffdb52efeb72dfeb82cfeba2cfebb2bfebd2afebe2afec029fdc229fdc328fdc527fdc627fdc827fdca26fdcb26fccd25fcce25fcd025fcd225fbd324fbd524fbd724fad824fada24f9dc24f9dd25f8df25f8e125f7e225f7e425f6e626f6e826f5e926f5eb27f4ed27f3ee27f3f027f2f227f1f426f1f525f0f724f0f921\"));\n","import {linearish} from \"./linear\";\n\nexport default function sequential(interpolator) {\n var x0 = 0,\n x1 = 1,\n clamp = false;\n\n function scale(x) {\n var t = (x - x0) / (x1 - x0);\n return interpolator(clamp ? Math.max(0, Math.min(1, t)) : t);\n }\n\n scale.domain = function(_) {\n return arguments.length ? (x0 = +_[0], x1 = +_[1], scale) : [x0, x1];\n };\n\n scale.clamp = function(_) {\n return arguments.length ? (clamp = !!_, scale) : clamp;\n };\n\n scale.interpolator = function(_) {\n return arguments.length ? (interpolator = _, scale) : interpolator;\n };\n\n scale.copy = function() {\n return sequential(interpolator).domain([x0, x1]).clamp(clamp);\n };\n\n return linearish(scale);\n}\n","export default function(specifier) {\n var n = specifier.length / 6 | 0, colors = new Array(n), i = 0;\n while (i < n) colors[i] = \"#\" + specifier.slice(i * 6, ++i * 6);\n return colors;\n}\n","import colors from \"../colors\";\n\nexport default colors(\"7fc97fbeaed4fdc086ffff99386cb0f0027fbf5b17666666\");\n","import colors from \"../colors\";\n\nexport default colors(\"1f77b4ff7f0e2ca02cd627289467bd8c564be377c27f7f7fbcbd2217becf\");\n","import colors from \"../colors\";\n\nexport default colors(\"1b9e77d95f027570b3e7298a66a61ee6ab02a6761d666666\");\n","import colors from \"../colors\";\n\nexport default colors(\"a6cee31f78b4b2df8a33a02cfb9a99e31a1cfdbf6fff7f00cab2d66a3d9affff99b15928\");\n","import colors from \"../colors\";\n\nexport default colors(\"fbb4aeb3cde3ccebc5decbe4fed9a6ffffcce5d8bdfddaecf2f2f2\");\n","import colors from \"../colors\";\n\nexport default colors(\"b3e2cdfdcdaccbd5e8f4cae4e6f5c9fff2aef1e2cccccccc\");\n","import colors from \"../colors\";\n\nexport default colors(\"e41a1c377eb84daf4a984ea3ff7f00ffff33a65628f781bf999999\");\n","import colors from \"../colors\";\n\nexport default colors(\"66c2a5fc8d628da0cbe78ac3a6d854ffd92fe5c494b3b3b3\");\n","import colors from \"../colors\";\n\nexport default colors(\"8dd3c7ffffb3bebadafb807280b1d3fdb462b3de69fccde5d9d9d9bc80bdccebc5ffed6f\");\n","import {interpolateRgbBasis} from \"d3-interpolate\";\n\nexport default function(scheme) {\n return interpolateRgbBasis(scheme[scheme.length - 1]);\n}\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"d8b365f5f5f55ab4ac\",\n \"a6611adfc27d80cdc1018571\",\n \"a6611adfc27df5f5f580cdc1018571\",\n \"8c510ad8b365f6e8c3c7eae55ab4ac01665e\",\n \"8c510ad8b365f6e8c3f5f5f5c7eae55ab4ac01665e\",\n \"8c510abf812ddfc27df6e8c3c7eae580cdc135978f01665e\",\n \"8c510abf812ddfc27df6e8c3f5f5f5c7eae580cdc135978f01665e\",\n \"5430058c510abf812ddfc27df6e8c3c7eae580cdc135978f01665e003c30\",\n \"5430058c510abf812ddfc27df6e8c3f5f5f5c7eae580cdc135978f01665e003c30\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"af8dc3f7f7f77fbf7b\",\n \"7b3294c2a5cfa6dba0008837\",\n \"7b3294c2a5cff7f7f7a6dba0008837\",\n \"762a83af8dc3e7d4e8d9f0d37fbf7b1b7837\",\n \"762a83af8dc3e7d4e8f7f7f7d9f0d37fbf7b1b7837\",\n \"762a839970abc2a5cfe7d4e8d9f0d3a6dba05aae611b7837\",\n \"762a839970abc2a5cfe7d4e8f7f7f7d9f0d3a6dba05aae611b7837\",\n \"40004b762a839970abc2a5cfe7d4e8d9f0d3a6dba05aae611b783700441b\",\n \"40004b762a839970abc2a5cfe7d4e8f7f7f7d9f0d3a6dba05aae611b783700441b\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"e9a3c9f7f7f7a1d76a\",\n \"d01c8bf1b6dab8e1864dac26\",\n \"d01c8bf1b6daf7f7f7b8e1864dac26\",\n \"c51b7de9a3c9fde0efe6f5d0a1d76a4d9221\",\n \"c51b7de9a3c9fde0eff7f7f7e6f5d0a1d76a4d9221\",\n \"c51b7dde77aef1b6dafde0efe6f5d0b8e1867fbc414d9221\",\n \"c51b7dde77aef1b6dafde0eff7f7f7e6f5d0b8e1867fbc414d9221\",\n \"8e0152c51b7dde77aef1b6dafde0efe6f5d0b8e1867fbc414d9221276419\",\n \"8e0152c51b7dde77aef1b6dafde0eff7f7f7e6f5d0b8e1867fbc414d9221276419\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"998ec3f7f7f7f1a340\",\n \"5e3c99b2abd2fdb863e66101\",\n \"5e3c99b2abd2f7f7f7fdb863e66101\",\n \"542788998ec3d8daebfee0b6f1a340b35806\",\n \"542788998ec3d8daebf7f7f7fee0b6f1a340b35806\",\n \"5427888073acb2abd2d8daebfee0b6fdb863e08214b35806\",\n \"5427888073acb2abd2d8daebf7f7f7fee0b6fdb863e08214b35806\",\n \"2d004b5427888073acb2abd2d8daebfee0b6fdb863e08214b358067f3b08\",\n \"2d004b5427888073acb2abd2d8daebf7f7f7fee0b6fdb863e08214b358067f3b08\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"ef8a62f7f7f767a9cf\",\n \"ca0020f4a58292c5de0571b0\",\n \"ca0020f4a582f7f7f792c5de0571b0\",\n \"b2182bef8a62fddbc7d1e5f067a9cf2166ac\",\n \"b2182bef8a62fddbc7f7f7f7d1e5f067a9cf2166ac\",\n \"b2182bd6604df4a582fddbc7d1e5f092c5de4393c32166ac\",\n \"b2182bd6604df4a582fddbc7f7f7f7d1e5f092c5de4393c32166ac\",\n \"67001fb2182bd6604df4a582fddbc7d1e5f092c5de4393c32166ac053061\",\n \"67001fb2182bd6604df4a582fddbc7f7f7f7d1e5f092c5de4393c32166ac053061\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"ef8a62ffffff999999\",\n \"ca0020f4a582bababa404040\",\n \"ca0020f4a582ffffffbababa404040\",\n \"b2182bef8a62fddbc7e0e0e09999994d4d4d\",\n \"b2182bef8a62fddbc7ffffffe0e0e09999994d4d4d\",\n \"b2182bd6604df4a582fddbc7e0e0e0bababa8787874d4d4d\",\n \"b2182bd6604df4a582fddbc7ffffffe0e0e0bababa8787874d4d4d\",\n \"67001fb2182bd6604df4a582fddbc7e0e0e0bababa8787874d4d4d1a1a1a\",\n \"67001fb2182bd6604df4a582fddbc7ffffffe0e0e0bababa8787874d4d4d1a1a1a\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"fc8d59ffffbf91bfdb\",\n \"d7191cfdae61abd9e92c7bb6\",\n \"d7191cfdae61ffffbfabd9e92c7bb6\",\n \"d73027fc8d59fee090e0f3f891bfdb4575b4\",\n \"d73027fc8d59fee090ffffbfe0f3f891bfdb4575b4\",\n \"d73027f46d43fdae61fee090e0f3f8abd9e974add14575b4\",\n \"d73027f46d43fdae61fee090ffffbfe0f3f8abd9e974add14575b4\",\n \"a50026d73027f46d43fdae61fee090e0f3f8abd9e974add14575b4313695\",\n \"a50026d73027f46d43fdae61fee090ffffbfe0f3f8abd9e974add14575b4313695\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"fc8d59ffffbf91cf60\",\n \"d7191cfdae61a6d96a1a9641\",\n \"d7191cfdae61ffffbfa6d96a1a9641\",\n \"d73027fc8d59fee08bd9ef8b91cf601a9850\",\n \"d73027fc8d59fee08bffffbfd9ef8b91cf601a9850\",\n \"d73027f46d43fdae61fee08bd9ef8ba6d96a66bd631a9850\",\n \"d73027f46d43fdae61fee08bffffbfd9ef8ba6d96a66bd631a9850\",\n \"a50026d73027f46d43fdae61fee08bd9ef8ba6d96a66bd631a9850006837\",\n \"a50026d73027f46d43fdae61fee08bffffbfd9ef8ba6d96a66bd631a9850006837\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"fc8d59ffffbf99d594\",\n \"d7191cfdae61abdda42b83ba\",\n \"d7191cfdae61ffffbfabdda42b83ba\",\n \"d53e4ffc8d59fee08be6f59899d5943288bd\",\n \"d53e4ffc8d59fee08bffffbfe6f59899d5943288bd\",\n \"d53e4ff46d43fdae61fee08be6f598abdda466c2a53288bd\",\n \"d53e4ff46d43fdae61fee08bffffbfe6f598abdda466c2a53288bd\",\n \"9e0142d53e4ff46d43fdae61fee08be6f598abdda466c2a53288bd5e4fa2\",\n \"9e0142d53e4ff46d43fdae61fee08bffffbfe6f598abdda466c2a53288bd5e4fa2\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"e5f5f999d8c92ca25f\",\n \"edf8fbb2e2e266c2a4238b45\",\n \"edf8fbb2e2e266c2a42ca25f006d2c\",\n \"edf8fbccece699d8c966c2a42ca25f006d2c\",\n \"edf8fbccece699d8c966c2a441ae76238b45005824\",\n \"f7fcfde5f5f9ccece699d8c966c2a441ae76238b45005824\",\n \"f7fcfde5f5f9ccece699d8c966c2a441ae76238b45006d2c00441b\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"e0ecf49ebcda8856a7\",\n \"edf8fbb3cde38c96c688419d\",\n \"edf8fbb3cde38c96c68856a7810f7c\",\n \"edf8fbbfd3e69ebcda8c96c68856a7810f7c\",\n \"edf8fbbfd3e69ebcda8c96c68c6bb188419d6e016b\",\n \"f7fcfde0ecf4bfd3e69ebcda8c96c68c6bb188419d6e016b\",\n \"f7fcfde0ecf4bfd3e69ebcda8c96c68c6bb188419d810f7c4d004b\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"e0f3dba8ddb543a2ca\",\n \"f0f9e8bae4bc7bccc42b8cbe\",\n \"f0f9e8bae4bc7bccc443a2ca0868ac\",\n \"f0f9e8ccebc5a8ddb57bccc443a2ca0868ac\",\n \"f0f9e8ccebc5a8ddb57bccc44eb3d32b8cbe08589e\",\n \"f7fcf0e0f3dbccebc5a8ddb57bccc44eb3d32b8cbe08589e\",\n \"f7fcf0e0f3dbccebc5a8ddb57bccc44eb3d32b8cbe0868ac084081\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"fee8c8fdbb84e34a33\",\n \"fef0d9fdcc8afc8d59d7301f\",\n \"fef0d9fdcc8afc8d59e34a33b30000\",\n \"fef0d9fdd49efdbb84fc8d59e34a33b30000\",\n \"fef0d9fdd49efdbb84fc8d59ef6548d7301f990000\",\n \"fff7ecfee8c8fdd49efdbb84fc8d59ef6548d7301f990000\",\n \"fff7ecfee8c8fdd49efdbb84fc8d59ef6548d7301fb300007f0000\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"ece2f0a6bddb1c9099\",\n \"f6eff7bdc9e167a9cf02818a\",\n \"f6eff7bdc9e167a9cf1c9099016c59\",\n \"f6eff7d0d1e6a6bddb67a9cf1c9099016c59\",\n \"f6eff7d0d1e6a6bddb67a9cf3690c002818a016450\",\n \"fff7fbece2f0d0d1e6a6bddb67a9cf3690c002818a016450\",\n \"fff7fbece2f0d0d1e6a6bddb67a9cf3690c002818a016c59014636\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"ece7f2a6bddb2b8cbe\",\n \"f1eef6bdc9e174a9cf0570b0\",\n \"f1eef6bdc9e174a9cf2b8cbe045a8d\",\n \"f1eef6d0d1e6a6bddb74a9cf2b8cbe045a8d\",\n \"f1eef6d0d1e6a6bddb74a9cf3690c00570b0034e7b\",\n \"fff7fbece7f2d0d1e6a6bddb74a9cf3690c00570b0034e7b\",\n \"fff7fbece7f2d0d1e6a6bddb74a9cf3690c00570b0045a8d023858\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"e7e1efc994c7dd1c77\",\n \"f1eef6d7b5d8df65b0ce1256\",\n \"f1eef6d7b5d8df65b0dd1c77980043\",\n \"f1eef6d4b9dac994c7df65b0dd1c77980043\",\n \"f1eef6d4b9dac994c7df65b0e7298ace125691003f\",\n \"f7f4f9e7e1efd4b9dac994c7df65b0e7298ace125691003f\",\n \"f7f4f9e7e1efd4b9dac994c7df65b0e7298ace125698004367001f\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"fde0ddfa9fb5c51b8a\",\n \"feebe2fbb4b9f768a1ae017e\",\n \"feebe2fbb4b9f768a1c51b8a7a0177\",\n \"feebe2fcc5c0fa9fb5f768a1c51b8a7a0177\",\n \"feebe2fcc5c0fa9fb5f768a1dd3497ae017e7a0177\",\n \"fff7f3fde0ddfcc5c0fa9fb5f768a1dd3497ae017e7a0177\",\n \"fff7f3fde0ddfcc5c0fa9fb5f768a1dd3497ae017e7a017749006a\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"edf8b17fcdbb2c7fb8\",\n \"ffffcca1dab441b6c4225ea8\",\n \"ffffcca1dab441b6c42c7fb8253494\",\n \"ffffccc7e9b47fcdbb41b6c42c7fb8253494\",\n \"ffffccc7e9b47fcdbb41b6c41d91c0225ea80c2c84\",\n \"ffffd9edf8b1c7e9b47fcdbb41b6c41d91c0225ea80c2c84\",\n \"ffffd9edf8b1c7e9b47fcdbb41b6c41d91c0225ea8253494081d58\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"f7fcb9addd8e31a354\",\n \"ffffccc2e69978c679238443\",\n \"ffffccc2e69978c67931a354006837\",\n \"ffffccd9f0a3addd8e78c67931a354006837\",\n \"ffffccd9f0a3addd8e78c67941ab5d238443005a32\",\n \"ffffe5f7fcb9d9f0a3addd8e78c67941ab5d238443005a32\",\n \"ffffe5f7fcb9d9f0a3addd8e78c67941ab5d238443006837004529\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"fff7bcfec44fd95f0e\",\n \"ffffd4fed98efe9929cc4c02\",\n \"ffffd4fed98efe9929d95f0e993404\",\n \"ffffd4fee391fec44ffe9929d95f0e993404\",\n \"ffffd4fee391fec44ffe9929ec7014cc4c028c2d04\",\n \"ffffe5fff7bcfee391fec44ffe9929ec7014cc4c028c2d04\",\n \"ffffe5fff7bcfee391fec44ffe9929ec7014cc4c02993404662506\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"ffeda0feb24cf03b20\",\n \"ffffb2fecc5cfd8d3ce31a1c\",\n \"ffffb2fecc5cfd8d3cf03b20bd0026\",\n \"ffffb2fed976feb24cfd8d3cf03b20bd0026\",\n \"ffffb2fed976feb24cfd8d3cfc4e2ae31a1cb10026\",\n \"ffffccffeda0fed976feb24cfd8d3cfc4e2ae31a1cb10026\",\n \"ffffccffeda0fed976feb24cfd8d3cfc4e2ae31a1cbd0026800026\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"deebf79ecae13182bd\",\n \"eff3ffbdd7e76baed62171b5\",\n \"eff3ffbdd7e76baed63182bd08519c\",\n \"eff3ffc6dbef9ecae16baed63182bd08519c\",\n \"eff3ffc6dbef9ecae16baed64292c62171b5084594\",\n \"f7fbffdeebf7c6dbef9ecae16baed64292c62171b5084594\",\n \"f7fbffdeebf7c6dbef9ecae16baed64292c62171b508519c08306b\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"e5f5e0a1d99b31a354\",\n \"edf8e9bae4b374c476238b45\",\n \"edf8e9bae4b374c47631a354006d2c\",\n \"edf8e9c7e9c0a1d99b74c47631a354006d2c\",\n \"edf8e9c7e9c0a1d99b74c47641ab5d238b45005a32\",\n \"f7fcf5e5f5e0c7e9c0a1d99b74c47641ab5d238b45005a32\",\n \"f7fcf5e5f5e0c7e9c0a1d99b74c47641ab5d238b45006d2c00441b\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"f0f0f0bdbdbd636363\",\n \"f7f7f7cccccc969696525252\",\n \"f7f7f7cccccc969696636363252525\",\n \"f7f7f7d9d9d9bdbdbd969696636363252525\",\n \"f7f7f7d9d9d9bdbdbd969696737373525252252525\",\n \"fffffff0f0f0d9d9d9bdbdbd969696737373525252252525\",\n \"fffffff0f0f0d9d9d9bdbdbd969696737373525252252525000000\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"efedf5bcbddc756bb1\",\n \"f2f0f7cbc9e29e9ac86a51a3\",\n \"f2f0f7cbc9e29e9ac8756bb154278f\",\n \"f2f0f7dadaebbcbddc9e9ac8756bb154278f\",\n \"f2f0f7dadaebbcbddc9e9ac8807dba6a51a34a1486\",\n \"fcfbfdefedf5dadaebbcbddc9e9ac8807dba6a51a34a1486\",\n \"fcfbfdefedf5dadaebbcbddc9e9ac8807dba6a51a354278f3f007d\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"fee0d2fc9272de2d26\",\n \"fee5d9fcae91fb6a4acb181d\",\n \"fee5d9fcae91fb6a4ade2d26a50f15\",\n \"fee5d9fcbba1fc9272fb6a4ade2d26a50f15\",\n \"fee5d9fcbba1fc9272fb6a4aef3b2ccb181d99000d\",\n \"fff5f0fee0d2fcbba1fc9272fb6a4aef3b2ccb181d99000d\",\n \"fff5f0fee0d2fcbba1fc9272fb6a4aef3b2ccb181da50f1567000d\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"fee6cefdae6be6550d\",\n \"feeddefdbe85fd8d3cd94701\",\n \"feeddefdbe85fd8d3ce6550da63603\",\n \"feeddefdd0a2fdae6bfd8d3ce6550da63603\",\n \"feeddefdd0a2fdae6bfd8d3cf16913d948018c2d04\",\n \"fff5ebfee6cefdd0a2fdae6bfd8d3cf16913d948018c2d04\",\n \"fff5ebfee6cefdd0a2fdae6bfd8d3cf16913d94801a636037f2704\"\n).map(colors);\n\nexport default ramp(scheme);\n","import {cubehelix} from \"d3-color\";\nimport {interpolateCubehelixLong} from \"d3-interpolate\";\n\nexport default interpolateCubehelixLong(cubehelix(300, 0.5, 0.0), cubehelix(-240, 0.5, 1.0));\n","import {cubehelix} from \"d3-color\";\nimport {interpolateCubehelixLong} from \"d3-interpolate\";\n\nexport var warm = interpolateCubehelixLong(cubehelix(-100, 0.75, 0.35), cubehelix(80, 1.50, 0.8));\n\nexport var cool = interpolateCubehelixLong(cubehelix(260, 0.75, 0.35), cubehelix(80, 1.50, 0.8));\n\nvar c = cubehelix();\n\nexport default function(t) {\n if (t < 0 || t > 1) t -= Math.floor(t);\n var ts = Math.abs(t - 0.5);\n c.h = 360 * t - 100;\n c.s = 1.5 - 1.5 * ts;\n c.l = 0.8 - 0.9 * ts;\n return c + \"\";\n}\n","import {rgb} from \"d3-color\";\n\nvar c = rgb(),\n pi_1_3 = Math.PI / 3,\n pi_2_3 = Math.PI * 2 / 3;\n\nexport default function(t) {\n var x;\n t = (0.5 - t) * Math.PI;\n c.r = 255 * (x = Math.sin(t)) * x;\n c.g = 255 * (x = Math.sin(t + pi_1_3)) * x;\n c.b = 255 * (x = Math.sin(t + pi_2_3)) * x;\n return c + \"\";\n}\n","import colors from \"../colors\";\n\nfunction ramp(range) {\n var n = range.length;\n return function(t) {\n return range[Math.max(0, Math.min(n - 1, Math.floor(t * n)))];\n };\n}\n\nexport default ramp(colors(\"44015444025645045745055946075a46085c460a5d460b5e470d60470e6147106347116447136548146748166848176948186a481a6c481b6d481c6e481d6f481f70482071482173482374482475482576482677482878482979472a7a472c7a472d7b472e7c472f7d46307e46327e46337f463480453581453781453882443983443a83443b84433d84433e85423f854240864241864142874144874045884046883f47883f48893e49893e4a893e4c8a3d4d8a3d4e8a3c4f8a3c508b3b518b3b528b3a538b3a548c39558c39568c38588c38598c375a8c375b8d365c8d365d8d355e8d355f8d34608d34618d33628d33638d32648e32658e31668e31678e31688e30698e306a8e2f6b8e2f6c8e2e6d8e2e6e8e2e6f8e2d708e2d718e2c718e2c728e2c738e2b748e2b758e2a768e2a778e2a788e29798e297a8e297b8e287c8e287d8e277e8e277f8e27808e26818e26828e26828e25838e25848e25858e24868e24878e23888e23898e238a8d228b8d228c8d228d8d218e8d218f8d21908d21918c20928c20928c20938c1f948c1f958b1f968b1f978b1f988b1f998a1f9a8a1e9b8a1e9c891e9d891f9e891f9f881fa0881fa1881fa1871fa28720a38620a48621a58521a68522a78522a88423a98324aa8325ab8225ac8226ad8127ad8128ae8029af7f2ab07f2cb17e2db27d2eb37c2fb47c31b57b32b67a34b67935b77937b87838b9773aba763bbb753dbc743fbc7340bd7242be7144bf7046c06f48c16e4ac16d4cc26c4ec36b50c46a52c56954c56856c66758c7655ac8645cc8635ec96260ca6063cb5f65cb5e67cc5c69cd5b6ccd5a6ece5870cf5773d05675d05477d1537ad1517cd2507fd34e81d34d84d44b86d54989d5488bd6468ed64590d74393d74195d84098d83e9bd93c9dd93ba0da39a2da37a5db36a8db34aadc32addc30b0dd2fb2dd2db5de2bb8de29bade28bddf26c0df25c2df23c5e021c8e020cae11fcde11dd0e11cd2e21bd5e21ad8e219dae319dde318dfe318e2e418e5e419e7e419eae51aece51befe51cf1e51df4e61ef6e620f8e621fbe723fde725\"));\n\nexport var magma = ramp(colors(\"00000401000501010601010802010902020b02020d03030f03031204041405041606051806051a07061c08071e0907200a08220b09240c09260d0a290e0b2b100b2d110c2f120d31130d34140e36150e38160f3b180f3d19103f1a10421c10441d11471e114920114b21114e22115024125325125527125829115a2a115c2c115f2d11612f116331116533106734106936106b38106c390f6e3b0f703d0f713f0f72400f74420f75440f764510774710784910784a10794c117a4e117b4f127b51127c52137c54137d56147d57157e59157e5a167e5c167f5d177f5f187f601880621980641a80651a80671b80681c816a1c816b1d816d1d816e1e81701f81721f817320817521817621817822817922827b23827c23827e24828025828125818326818426818627818827818928818b29818c29818e2a81902a81912b81932b80942c80962c80982d80992d809b2e7f9c2e7f9e2f7fa02f7fa1307ea3307ea5317ea6317da8327daa337dab337cad347cae347bb0357bb2357bb3367ab5367ab73779b83779ba3878bc3978bd3977bf3a77c03a76c23b75c43c75c53c74c73d73c83e73ca3e72cc3f71cd4071cf4070d0416fd2426fd3436ed5446dd6456cd8456cd9466bdb476adc4869de4968df4a68e04c67e24d66e34e65e44f64e55064e75263e85362e95462ea5661eb5760ec5860ed5a5fee5b5eef5d5ef05f5ef1605df2625df2645cf3655cf4675cf4695cf56b5cf66c5cf66e5cf7705cf7725cf8745cf8765cf9785df9795df97b5dfa7d5efa7f5efa815ffb835ffb8560fb8761fc8961fc8a62fc8c63fc8e64fc9065fd9266fd9467fd9668fd9869fd9a6afd9b6bfe9d6cfe9f6dfea16efea36ffea571fea772fea973feaa74feac76feae77feb078feb27afeb47bfeb67cfeb77efeb97ffebb81febd82febf84fec185fec287fec488fec68afec88cfeca8dfecc8ffecd90fecf92fed194fed395fed597fed799fed89afdda9cfddc9efddea0fde0a1fde2a3fde3a5fde5a7fde7a9fde9aafdebacfcecaefceeb0fcf0b2fcf2b4fcf4b6fcf6b8fcf7b9fcf9bbfcfbbdfcfdbf\"));\n\nexport var inferno = ramp(colors(\"00000401000501010601010802010a02020c02020e03021004031204031405041706041907051b08051d09061f0a07220b07240c08260d08290e092b10092d110a30120a32140b34150b37160b39180c3c190c3e1b0c411c0c431e0c451f0c48210c4a230c4c240c4f260c51280b53290b552b0b572d0b592f0a5b310a5c320a5e340a5f3609613809623909633b09643d09653e0966400a67420a68440a68450a69470b6a490b6a4a0c6b4c0c6b4d0d6c4f0d6c510e6c520e6d540f6d550f6d57106e59106e5a116e5c126e5d126e5f136e61136e62146e64156e65156e67166e69166e6a176e6c186e6d186e6f196e71196e721a6e741a6e751b6e771c6d781c6d7a1d6d7c1d6d7d1e6d7f1e6c801f6c82206c84206b85216b87216b88226a8a226a8c23698d23698f24699025689225689326679526679727669827669a28659b29649d29649f2a63a02a63a22b62a32c61a52c60a62d60a82e5fa92e5eab2f5ead305dae305cb0315bb1325ab3325ab43359b63458b73557b93556ba3655bc3754bd3853bf3952c03a51c13a50c33b4fc43c4ec63d4dc73e4cc83f4bca404acb4149cc4248ce4347cf4446d04545d24644d34743d44842d54a41d74b3fd84c3ed94d3dda4e3cdb503bdd513ade5238df5337e05536e15635e25734e35933e45a31e55c30e65d2fe75e2ee8602de9612bea632aeb6429eb6628ec6726ed6925ee6a24ef6c23ef6e21f06f20f1711ff1731df2741cf3761bf37819f47918f57b17f57d15f67e14f68013f78212f78410f8850ff8870ef8890cf98b0bf98c0af98e09fa9008fa9207fa9407fb9606fb9706fb9906fb9b06fb9d07fc9f07fca108fca309fca50afca60cfca80dfcaa0ffcac11fcae12fcb014fcb216fcb418fbb61afbb81dfbba1ffbbc21fbbe23fac026fac228fac42afac62df9c72ff9c932f9cb35f8cd37f8cf3af7d13df7d340f6d543f6d746f5d949f5db4cf4dd4ff4df53f4e156f3e35af3e55df2e661f2e865f2ea69f1ec6df1ed71f1ef75f1f179f2f27df2f482f3f586f3f68af4f88ef5f992f6fa96f8fb9af9fc9dfafda1fcffa4\"));\n\nexport var plasma = ramp(colors(\"0d088710078813078916078a19068c1b068d1d068e20068f2206902406912605912805922a05932c05942e05952f059631059733059735049837049938049a3a049a3c049b3e049c3f049c41049d43039e44039e46039f48039f4903a04b03a14c02a14e02a25002a25102a35302a35502a45601a45801a45901a55b01a55c01a65e01a66001a66100a76300a76400a76600a76700a86900a86a00a86c00a86e00a86f00a87100a87201a87401a87501a87701a87801a87a02a87b02a87d03a87e03a88004a88104a78305a78405a78606a68707a68808a68a09a58b0aa58d0ba58e0ca48f0da4910ea3920fa39410a29511a19613a19814a099159f9a169f9c179e9d189d9e199da01a9ca11b9ba21d9aa31e9aa51f99a62098a72197a82296aa2395ab2494ac2694ad2793ae2892b02991b12a90b22b8fb32c8eb42e8db52f8cb6308bb7318ab83289ba3388bb3488bc3587bd3786be3885bf3984c03a83c13b82c23c81c33d80c43e7fc5407ec6417dc7427cc8437bc9447aca457acb4679cc4778cc4977cd4a76ce4b75cf4c74d04d73d14e72d24f71d35171d45270d5536fd5546ed6556dd7566cd8576bd9586ada5a6ada5b69db5c68dc5d67dd5e66de5f65de6164df6263e06363e16462e26561e26660e3685fe4695ee56a5de56b5de66c5ce76e5be76f5ae87059e97158e97257ea7457eb7556eb7655ec7754ed7953ed7a52ee7b51ef7c51ef7e50f07f4ff0804ef1814df1834cf2844bf3854bf3874af48849f48948f58b47f58c46f68d45f68f44f79044f79143f79342f89441f89540f9973ff9983ef99a3efa9b3dfa9c3cfa9e3bfb9f3afba139fba238fca338fca537fca636fca835fca934fdab33fdac33fdae32fdaf31fdb130fdb22ffdb42ffdb52efeb72dfeb82cfeba2cfebb2bfebd2afebe2afec029fdc229fdc328fdc527fdc627fdc827fdca26fdcb26fccd25fcce25fcd025fcd225fbd324fbd524fbd724fad824fada24f9dc24f9dd25f8df25f8e125f7e225f7e425f6e626f6e826f5e926f5eb27f4ed27f3ee27f3f027f2f227f1f426f1f525f0f724f0f921\"));\n","const ReservedFields = {\n ROW_ID: '__id__'\n};\n\nexport default ReservedFields;\n","const CommonProps = {\n ACTION_INF: 'actionInf',\n ON_LAYER_DRAW: 'onlayerdraw'\n};\n\nexport default CommonProps;\n","export var slice = Array.prototype.slice;\n","export default function(x) {\n return x;\n}\n","import {slice} from \"./array\";\nimport identity from \"./identity\";\n\nvar top = 1,\n right = 2,\n bottom = 3,\n left = 4,\n epsilon = 1e-6;\n\nfunction translateX(x) {\n return \"translate(\" + (x + 0.5) + \",0)\";\n}\n\nfunction translateY(y) {\n return \"translate(0,\" + (y + 0.5) + \")\";\n}\n\nfunction number(scale) {\n return function(d) {\n return +scale(d);\n };\n}\n\nfunction center(scale) {\n var offset = Math.max(0, scale.bandwidth() - 1) / 2; // Adjust for 0.5px offset.\n if (scale.round()) offset = Math.round(offset);\n return function(d) {\n return +scale(d) + offset;\n };\n}\n\nfunction entering() {\n return !this.__axis;\n}\n\nfunction axis(orient, scale) {\n var tickArguments = [],\n tickValues = null,\n tickFormat = null,\n tickTransform = null,\n tickSizeInner = 6,\n tickSizeOuter = 6,\n tickPadding = 3,\n k = orient === top || orient === left ? -1 : 1,\n x = orient === left || orient === right ? \"x\" : \"y\",\n transform = orient === top || orient === bottom ? translateX : translateY;\n\n function axis(context) {\n var values = tickValues == null ? (scale.ticks ? scale.ticks.apply(scale, tickArguments) : scale.domain()) : tickValues,\n format = tickFormat == null ? (scale.tickFormat ? scale.tickFormat.apply(scale, tickArguments) : identity) : tickFormat,\n spacing = Math.max(tickSizeInner, 0) + tickPadding,\n range = scale.range(),\n range0 = +range[0] + 0.5,\n range1 = +range[range.length - 1] + 0.5,\n position = (scale.bandwidth ? center : number)(scale.copy()),\n selection = context.selection ? context.selection() : context,\n path = selection.selectAll(\".domain\").data([null]),\n tick = selection.selectAll(\".tick\").data(values, scale).order(),\n tickExit = tick.exit(),\n tickEnter = tick.enter().append(\"g\").attr(\"class\", \"tick\"),\n line = tick.select(\"line\"),\n text = tick.select(\"text\");\n\n path = path.merge(path.enter().insert(\"path\", \".tick\")\n .attr(\"class\", \"domain\")\n .attr(\"stroke\", \"#000\"));\n\n tick = tick.merge(tickEnter);\n\n line = line.merge(tickEnter.append(\"line\")\n .attr(\"stroke\", \"#000\")\n .attr(x + \"2\", k * tickSizeInner));\n\n text = text.merge(tickEnter.append(\"text\")\n .attr(\"fill\", \"#000\")\n .attr(x, k * spacing)\n .attr(\"dy\", orient === top ? \"0em\" : orient === bottom ? \"0.71em\" : \"0.32em\"))\n .style('transform', tickTransform);\n\n if (context !== selection) {\n path = path.transition(context);\n tick = tick.transition(context);\n line = line.transition(context);\n text = text.transition(context);\n\n tickExit = tickExit.transition(context)\n .attr(\"opacity\", epsilon)\n .attr(\"transform\", function(d) { return isFinite(d = position(d)) ? transform(d) : this.getAttribute(\"transform\"); });\n\n tickEnter\n .attr(\"opacity\", epsilon)\n .attr(\"transform\", function(d) { var p = this.parentNode.__axis; return transform(p && isFinite(p = p(d)) ? p : position(d)); });\n }\n\n tickExit.remove();\n\n path\n .attr(\"d\", orient === left || orient == right\n ? \"M\" + k * tickSizeOuter + \",\" + range0 + \"H0.5V\" + range1 + \"H\" + k * tickSizeOuter\n : \"M\" + range0 + \",\" + k * tickSizeOuter + \"V0.5H\" + range1 + \"V\" + k * tickSizeOuter);\n\n tick\n .attr(\"opacity\", 1)\n .attr(\"transform\", function(d) { return transform(position(d)); });\n\n line\n .attr(x + \"2\", k * tickSizeInner);\n\n text\n .attr(x, k * spacing)\n .text(format);\n\n selection.filter(entering)\n .attr(\"fill\", \"none\")\n .attr(\"font-size\", 10)\n .attr(\"font-family\", \"sans-serif\")\n .attr(\"text-anchor\", orient === right ? \"start\" : orient === left ? \"end\" : \"middle\");\n\n selection\n .each(function() { this.__axis = position; });\n }\n\n axis.scale = function(_) {\n return arguments.length ? (scale = _, axis) : scale;\n };\n\n axis.tickTransform = function(_) {\n return arguments.length ? (tickTransform = _, axis) : tickTransform;\n };\n\n axis.ticks = function() {\n return tickArguments = slice.call(arguments), axis;\n };\n\n axis.tickArguments = function(_) {\n return arguments.length ? (tickArguments = _ == null ? [] : slice.call(_), axis) : tickArguments.slice();\n };\n\n axis.tickValues = function(_) {\n return arguments.length ? (tickValues = _ == null ? null : slice.call(_), axis) : tickValues && tickValues.slice();\n };\n\n axis.tickFormat = function(_) {\n return arguments.length ? (tickFormat = _, axis) : tickFormat;\n };\n\n axis.tickSize = function(_) {\n return arguments.length ? (tickSizeInner = tickSizeOuter = +_, axis) : tickSizeInner;\n };\n\n axis.tickSizeInner = function(_) {\n return arguments.length ? (tickSizeInner = +_, axis) : tickSizeInner;\n };\n\n axis.tickSizeOuter = function(_) {\n return arguments.length ? (tickSizeOuter = +_, axis) : tickSizeOuter;\n };\n\n axis.tickPadding = function(_) {\n return arguments.length ? (tickPadding = +_, axis) : tickPadding;\n };\n\n return axis;\n}\n\nexport function axisTop(scale) {\n return axis(top, scale);\n}\n\nexport function axisRight(scale) {\n return axis(right, scale);\n}\n\nexport function axisBottom(scale) {\n return axis(bottom, scale);\n}\n\nexport function axisLeft(scale) {\n return axis(left, scale);\n}\n","var pi = Math.PI,\n tau = 2 * pi,\n epsilon = 1e-6,\n tauEpsilon = tau - epsilon;\n\nfunction Path() {\n this._x0 = this._y0 = // start of current subpath\n this._x1 = this._y1 = null; // end of current subpath\n this._ = \"\";\n}\n\nfunction path() {\n return new Path;\n}\n\nPath.prototype = path.prototype = {\n constructor: Path,\n moveTo: function(x, y) {\n this._ += \"M\" + (this._x0 = this._x1 = +x) + \",\" + (this._y0 = this._y1 = +y);\n },\n closePath: function() {\n if (this._x1 !== null) {\n this._x1 = this._x0, this._y1 = this._y0;\n this._ += \"Z\";\n }\n },\n lineTo: function(x, y) {\n this._ += \"L\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n },\n quadraticCurveTo: function(x1, y1, x, y) {\n this._ += \"Q\" + (+x1) + \",\" + (+y1) + \",\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n },\n bezierCurveTo: function(x1, y1, x2, y2, x, y) {\n this._ += \"C\" + (+x1) + \",\" + (+y1) + \",\" + (+x2) + \",\" + (+y2) + \",\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n },\n arcTo: function(x1, y1, x2, y2, r) {\n x1 = +x1, y1 = +y1, x2 = +x2, y2 = +y2, r = +r;\n var x0 = this._x1,\n y0 = this._y1,\n x21 = x2 - x1,\n y21 = y2 - y1,\n x01 = x0 - x1,\n y01 = y0 - y1,\n l01_2 = x01 * x01 + y01 * y01;\n\n // Is the radius negative? Error.\n if (r < 0) throw new Error(\"negative radius: \" + r);\n\n // Is this path empty? Move to (x1,y1).\n if (this._x1 === null) {\n this._ += \"M\" + (this._x1 = x1) + \",\" + (this._y1 = y1);\n }\n\n // Or, is (x1,y1) coincident with (x0,y0)? Do nothing.\n else if (!(l01_2 > epsilon));\n\n // Or, are (x0,y0), (x1,y1) and (x2,y2) collinear?\n // Equivalently, is (x1,y1) coincident with (x2,y2)?\n // Or, is the radius zero? Line to (x1,y1).\n else if (!(Math.abs(y01 * x21 - y21 * x01) > epsilon) || !r) {\n this._ += \"L\" + (this._x1 = x1) + \",\" + (this._y1 = y1);\n }\n\n // Otherwise, draw an arc!\n else {\n var x20 = x2 - x0,\n y20 = y2 - y0,\n l21_2 = x21 * x21 + y21 * y21,\n l20_2 = x20 * x20 + y20 * y20,\n l21 = Math.sqrt(l21_2),\n l01 = Math.sqrt(l01_2),\n l = r * Math.tan((pi - Math.acos((l21_2 + l01_2 - l20_2) / (2 * l21 * l01))) / 2),\n t01 = l / l01,\n t21 = l / l21;\n\n // If the start tangent is not coincident with (x0,y0), line to.\n if (Math.abs(t01 - 1) > epsilon) {\n this._ += \"L\" + (x1 + t01 * x01) + \",\" + (y1 + t01 * y01);\n }\n\n this._ += \"A\" + r + \",\" + r + \",0,0,\" + (+(y01 * x20 > x01 * y20)) + \",\" + (this._x1 = x1 + t21 * x21) + \",\" + (this._y1 = y1 + t21 * y21);\n }\n },\n arc: function(x, y, r, a0, a1, ccw) {\n x = +x, y = +y, r = +r;\n var dx = r * Math.cos(a0),\n dy = r * Math.sin(a0),\n x0 = x + dx,\n y0 = y + dy,\n cw = 1 ^ ccw,\n da = ccw ? a0 - a1 : a1 - a0;\n\n // Is the radius negative? Error.\n if (r < 0) throw new Error(\"negative radius: \" + r);\n\n // Is this path empty? Move to (x0,y0).\n if (this._x1 === null) {\n this._ += \"M\" + x0 + \",\" + y0;\n }\n\n // Or, is (x0,y0) not coincident with the previous point? Line to (x0,y0).\n else if (Math.abs(this._x1 - x0) > epsilon || Math.abs(this._y1 - y0) > epsilon) {\n this._ += \"L\" + x0 + \",\" + y0;\n }\n\n // Is this arc empty? We’re done.\n if (!r) return;\n\n // Does the angle go the wrong way? Flip the direction.\n if (da < 0) da = da % tau + tau;\n\n // Is this a complete circle? Draw two arcs to complete the circle.\n if (da > tauEpsilon) {\n this._ += \"A\" + r + \",\" + r + \",0,1,\" + cw + \",\" + (x - dx) + \",\" + (y - dy) + \"A\" + r + \",\" + r + \",0,1,\" + cw + \",\" + (this._x1 = x0) + \",\" + (this._y1 = y0);\n }\n\n // Is this arc non-empty? Draw an arc!\n else if (da > epsilon) {\n this._ += \"A\" + r + \",\" + r + \",0,\" + (+(da >= pi)) + \",\" + cw + \",\" + (this._x1 = x + r * Math.cos(a1)) + \",\" + (this._y1 = y + r * Math.sin(a1));\n }\n },\n rect: function(x, y, w, h) {\n this._ += \"M\" + (this._x0 = this._x1 = +x) + \",\" + (this._y0 = this._y1 = +y) + \"h\" + (+w) + \"v\" + (+h) + \"h\" + (-w) + \"Z\";\n },\n toString: function() {\n return this._;\n }\n};\n\nexport default path;\n","export default function(x) {\n return function constant() {\n return x;\n };\n}\n","export var abs = Math.abs;\nexport var atan2 = Math.atan2;\nexport var cos = Math.cos;\nexport var max = Math.max;\nexport var min = Math.min;\nexport var sin = Math.sin;\nexport var sqrt = Math.sqrt;\n\nexport var epsilon = 1e-12;\nexport var pi = Math.PI;\nexport var halfPi = pi / 2;\nexport var tau = 2 * pi;\n\nexport function acos(x) {\n return x > 1 ? 0 : x < -1 ? pi : Math.acos(x);\n}\n\nexport function asin(x) {\n return x >= 1 ? halfPi : x <= -1 ? -halfPi : Math.asin(x);\n}\n","import {path} from \"d3-path\";\nimport constant from \"./constant\";\nimport {abs, acos, asin, atan2, cos, epsilon, halfPi, max, min, pi, sin, sqrt, tau} from \"./math\";\n\nfunction arcInnerRadius(d) {\n return d.innerRadius;\n}\n\nfunction arcOuterRadius(d) {\n return d.outerRadius;\n}\n\nfunction arcStartAngle(d) {\n return d.startAngle;\n}\n\nfunction arcEndAngle(d) {\n return d.endAngle;\n}\n\nfunction arcPadAngle(d) {\n return d && d.padAngle; // Note: optional!\n}\n\nfunction intersect(x0, y0, x1, y1, x2, y2, x3, y3) {\n var x10 = x1 - x0, y10 = y1 - y0,\n x32 = x3 - x2, y32 = y3 - y2,\n t = (x32 * (y0 - y2) - y32 * (x0 - x2)) / (y32 * x10 - x32 * y10);\n return [x0 + t * x10, y0 + t * y10];\n}\n\n// Compute perpendicular offset line of length rc.\n// http://mathworld.wolfram.com/Circle-LineIntersection.html\nfunction cornerTangents(x0, y0, x1, y1, r1, rc, cw) {\n var x01 = x0 - x1,\n y01 = y0 - y1,\n lo = (cw ? rc : -rc) / sqrt(x01 * x01 + y01 * y01),\n ox = lo * y01,\n oy = -lo * x01,\n x11 = x0 + ox,\n y11 = y0 + oy,\n x10 = x1 + ox,\n y10 = y1 + oy,\n x00 = (x11 + x10) / 2,\n y00 = (y11 + y10) / 2,\n dx = x10 - x11,\n dy = y10 - y11,\n d2 = dx * dx + dy * dy,\n r = r1 - rc,\n D = x11 * y10 - x10 * y11,\n d = (dy < 0 ? -1 : 1) * sqrt(max(0, r * r * d2 - D * D)),\n cx0 = (D * dy - dx * d) / d2,\n cy0 = (-D * dx - dy * d) / d2,\n cx1 = (D * dy + dx * d) / d2,\n cy1 = (-D * dx + dy * d) / d2,\n dx0 = cx0 - x00,\n dy0 = cy0 - y00,\n dx1 = cx1 - x00,\n dy1 = cy1 - y00;\n\n // Pick the closer of the two intersection points.\n // TODO Is there a faster way to determine which intersection to use?\n if (dx0 * dx0 + dy0 * dy0 > dx1 * dx1 + dy1 * dy1) cx0 = cx1, cy0 = cy1;\n\n return {\n cx: cx0,\n cy: cy0,\n x01: -ox,\n y01: -oy,\n x11: cx0 * (r1 / r - 1),\n y11: cy0 * (r1 / r - 1)\n };\n}\n\nexport default function() {\n var innerRadius = arcInnerRadius,\n outerRadius = arcOuterRadius,\n cornerRadius = constant(0),\n padRadius = null,\n startAngle = arcStartAngle,\n endAngle = arcEndAngle,\n padAngle = arcPadAngle,\n context = null;\n\n function arc() {\n var buffer,\n r,\n r0 = +innerRadius.apply(this, arguments),\n r1 = +outerRadius.apply(this, arguments),\n a0 = startAngle.apply(this, arguments) - halfPi,\n a1 = endAngle.apply(this, arguments) - halfPi,\n da = abs(a1 - a0),\n cw = a1 > a0;\n\n if (!context) context = buffer = path();\n\n // Ensure that the outer radius is always larger than the inner radius.\n if (r1 < r0) r = r1, r1 = r0, r0 = r;\n\n // Is it a point?\n if (!(r1 > epsilon)) context.moveTo(0, 0);\n\n // Or is it a circle or annulus?\n else if (da > tau - epsilon) {\n context.moveTo(r1 * cos(a0), r1 * sin(a0));\n context.arc(0, 0, r1, a0, a1, !cw);\n if (r0 > epsilon) {\n context.moveTo(r0 * cos(a1), r0 * sin(a1));\n context.arc(0, 0, r0, a1, a0, cw);\n }\n }\n\n // Or is it a circular or annular sector?\n else {\n var a01 = a0,\n a11 = a1,\n a00 = a0,\n a10 = a1,\n da0 = da,\n da1 = da,\n ap = padAngle.apply(this, arguments) / 2,\n rp = (ap > epsilon) && (padRadius ? +padRadius.apply(this, arguments) : sqrt(r0 * r0 + r1 * r1)),\n rc = min(abs(r1 - r0) / 2, +cornerRadius.apply(this, arguments)),\n rc0 = rc,\n rc1 = rc,\n t0,\n t1;\n\n // Apply padding? Note that since r1 ≥ r0, da1 ≥ da0.\n if (rp > epsilon) {\n var p0 = asin(rp / r0 * sin(ap)),\n p1 = asin(rp / r1 * sin(ap));\n if ((da0 -= p0 * 2) > epsilon) p0 *= (cw ? 1 : -1), a00 += p0, a10 -= p0;\n else da0 = 0, a00 = a10 = (a0 + a1) / 2;\n if ((da1 -= p1 * 2) > epsilon) p1 *= (cw ? 1 : -1), a01 += p1, a11 -= p1;\n else da1 = 0, a01 = a11 = (a0 + a1) / 2;\n }\n\n var x01 = r1 * cos(a01),\n y01 = r1 * sin(a01),\n x10 = r0 * cos(a10),\n y10 = r0 * sin(a10);\n\n // Apply rounded corners?\n if (rc > epsilon) {\n var x11 = r1 * cos(a11),\n y11 = r1 * sin(a11),\n x00 = r0 * cos(a00),\n y00 = r0 * sin(a00);\n\n // Restrict the corner radius according to the sector angle.\n if (da < pi) {\n var oc = da0 > epsilon ? intersect(x01, y01, x00, y00, x11, y11, x10, y10) : [x10, y10],\n ax = x01 - oc[0],\n ay = y01 - oc[1],\n bx = x11 - oc[0],\n by = y11 - oc[1],\n kc = 1 / sin(acos((ax * bx + ay * by) / (sqrt(ax * ax + ay * ay) * sqrt(bx * bx + by * by))) / 2),\n lc = sqrt(oc[0] * oc[0] + oc[1] * oc[1]);\n rc0 = min(rc, (r0 - lc) / (kc - 1));\n rc1 = min(rc, (r1 - lc) / (kc + 1));\n }\n }\n\n // Is the sector collapsed to a line?\n if (!(da1 > epsilon)) context.moveTo(x01, y01);\n\n // Does the sector’s outer ring have rounded corners?\n else if (rc1 > epsilon) {\n t0 = cornerTangents(x00, y00, x01, y01, r1, rc1, cw);\n t1 = cornerTangents(x11, y11, x10, y10, r1, rc1, cw);\n\n context.moveTo(t0.cx + t0.x01, t0.cy + t0.y01);\n\n // Have the corners merged?\n if (rc1 < rc) context.arc(t0.cx, t0.cy, rc1, atan2(t0.y01, t0.x01), atan2(t1.y01, t1.x01), !cw);\n\n // Otherwise, draw the two corners and the ring.\n else {\n context.arc(t0.cx, t0.cy, rc1, atan2(t0.y01, t0.x01), atan2(t0.y11, t0.x11), !cw);\n context.arc(0, 0, r1, atan2(t0.cy + t0.y11, t0.cx + t0.x11), atan2(t1.cy + t1.y11, t1.cx + t1.x11), !cw);\n context.arc(t1.cx, t1.cy, rc1, atan2(t1.y11, t1.x11), atan2(t1.y01, t1.x01), !cw);\n }\n }\n\n // Or is the outer ring just a circular arc?\n else context.moveTo(x01, y01), context.arc(0, 0, r1, a01, a11, !cw);\n\n // Is there no inner ring, and it’s a circular sector?\n // Or perhaps it’s an annular sector collapsed due to padding?\n if (!(r0 > epsilon) || !(da0 > epsilon)) context.lineTo(x10, y10);\n\n // Does the sector’s inner ring (or point) have rounded corners?\n else if (rc0 > epsilon) {\n t0 = cornerTangents(x10, y10, x11, y11, r0, -rc0, cw);\n t1 = cornerTangents(x01, y01, x00, y00, r0, -rc0, cw);\n\n context.lineTo(t0.cx + t0.x01, t0.cy + t0.y01);\n\n // Have the corners merged?\n if (rc0 < rc) context.arc(t0.cx, t0.cy, rc0, atan2(t0.y01, t0.x01), atan2(t1.y01, t1.x01), !cw);\n\n // Otherwise, draw the two corners and the ring.\n else {\n context.arc(t0.cx, t0.cy, rc0, atan2(t0.y01, t0.x01), atan2(t0.y11, t0.x11), !cw);\n context.arc(0, 0, r0, atan2(t0.cy + t0.y11, t0.cx + t0.x11), atan2(t1.cy + t1.y11, t1.cx + t1.x11), cw);\n context.arc(t1.cx, t1.cy, rc0, atan2(t1.y11, t1.x11), atan2(t1.y01, t1.x01), !cw);\n }\n }\n\n // Or is the inner ring just a circular arc?\n else context.arc(0, 0, r0, a10, a00, cw);\n }\n\n context.closePath();\n\n if (buffer) return context = null, buffer + \"\" || null;\n }\n\n arc.centroid = function() {\n var r = (+innerRadius.apply(this, arguments) + +outerRadius.apply(this, arguments)) / 2,\n a = (+startAngle.apply(this, arguments) + +endAngle.apply(this, arguments)) / 2 - pi / 2;\n return [cos(a) * r, sin(a) * r];\n };\n\n arc.innerRadius = function(_) {\n return arguments.length ? (innerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : innerRadius;\n };\n\n arc.outerRadius = function(_) {\n return arguments.length ? (outerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : outerRadius;\n };\n\n arc.cornerRadius = function(_) {\n return arguments.length ? (cornerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : cornerRadius;\n };\n\n arc.padRadius = function(_) {\n return arguments.length ? (padRadius = _ == null ? null : typeof _ === \"function\" ? _ : constant(+_), arc) : padRadius;\n };\n\n arc.startAngle = function(_) {\n return arguments.length ? (startAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : startAngle;\n };\n\n arc.endAngle = function(_) {\n return arguments.length ? (endAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : endAngle;\n };\n\n arc.padAngle = function(_) {\n return arguments.length ? (padAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : padAngle;\n };\n\n arc.context = function(_) {\n return arguments.length ? ((context = _ == null ? null : _), arc) : context;\n };\n\n return arc;\n}\n","function Linear(context) {\n this._context = context;\n}\n\nLinear.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; // proceed\n default: this._context.lineTo(x, y); break;\n }\n }\n};\n\nexport default function(context) {\n return new Linear(context);\n}\n","export function x(p) {\n return p[0];\n}\n\nexport function y(p) {\n return p[1];\n}\n","import {path} from \"d3-path\";\nimport constant from \"./constant\";\nimport curveLinear from \"./curve/linear\";\nimport {x as pointX, y as pointY} from \"./point\";\n\nexport default function() {\n var x = pointX,\n y = pointY,\n defined = constant(true),\n context = null,\n curve = curveLinear,\n output = null;\n\n function line(data) {\n var i,\n n = data.length,\n d,\n defined0 = false,\n buffer;\n\n if (context == null) output = curve(buffer = path());\n\n for (i = 0; i <= n; ++i) {\n if (!(i < n && defined(d = data[i], i, data)) === defined0) {\n if (defined0 = !defined0) output.lineStart();\n else output.lineEnd();\n }\n if (defined0) output.point(+x(d, i, data), +y(d, i, data));\n }\n\n if (buffer) return output = null, buffer + \"\" || null;\n }\n\n line.x = function(_) {\n return arguments.length ? (x = typeof _ === \"function\" ? _ : constant(+_), line) : x;\n };\n\n line.y = function(_) {\n return arguments.length ? (y = typeof _ === \"function\" ? _ : constant(+_), line) : y;\n };\n\n line.defined = function(_) {\n return arguments.length ? (defined = typeof _ === \"function\" ? _ : constant(!!_), line) : defined;\n };\n\n line.curve = function(_) {\n return arguments.length ? (curve = _, context != null && (output = curve(context)), line) : curve;\n };\n\n line.context = function(_) {\n return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), line) : context;\n };\n\n return line;\n}\n","import {path} from \"d3-path\";\nimport constant from \"./constant\";\nimport curveLinear from \"./curve/linear\";\nimport line from \"./line\";\nimport {x as pointX, y as pointY} from \"./point\";\n\nexport default function() {\n var x0 = pointX,\n x1 = null,\n y0 = constant(0),\n y1 = pointY,\n defined = constant(true),\n context = null,\n curve = curveLinear,\n output = null;\n\n function area(data) {\n var i,\n j,\n k,\n n = data.length,\n d,\n defined0 = false,\n buffer,\n x0z = new Array(n),\n y0z = new Array(n);\n\n if (context == null) output = curve(buffer = path());\n\n for (i = 0; i <= n; ++i) {\n if (!(i < n && defined(d = data[i], i, data)) === defined0) {\n if (defined0 = !defined0) {\n j = i;\n output.areaStart();\n output.lineStart();\n } else {\n output.lineEnd();\n output.lineStart();\n for (k = i - 1; k >= j; --k) {\n output.point(x0z[k], y0z[k]);\n }\n output.lineEnd();\n output.areaEnd();\n }\n }\n if (defined0) {\n x0z[i] = +x0(d, i, data), y0z[i] = +y0(d, i, data);\n output.point(x1 ? +x1(d, i, data) : x0z[i], y1 ? +y1(d, i, data) : y0z[i]);\n }\n }\n\n if (buffer) return output = null, buffer + \"\" || null;\n }\n\n function arealine() {\n return line().defined(defined).curve(curve).context(context);\n }\n\n area.x = function(_) {\n return arguments.length ? (x0 = typeof _ === \"function\" ? _ : constant(+_), x1 = null, area) : x0;\n };\n\n area.x0 = function(_) {\n return arguments.length ? (x0 = typeof _ === \"function\" ? _ : constant(+_), area) : x0;\n };\n\n area.x1 = function(_) {\n return arguments.length ? (x1 = _ == null ? null : typeof _ === \"function\" ? _ : constant(+_), area) : x1;\n };\n\n area.y = function(_) {\n return arguments.length ? (y0 = typeof _ === \"function\" ? _ : constant(+_), y1 = null, area) : y0;\n };\n\n area.y0 = function(_) {\n return arguments.length ? (y0 = typeof _ === \"function\" ? _ : constant(+_), area) : y0;\n };\n\n area.y1 = function(_) {\n return arguments.length ? (y1 = _ == null ? null : typeof _ === \"function\" ? _ : constant(+_), area) : y1;\n };\n\n area.lineX0 =\n area.lineY0 = function() {\n return arealine().x(x0).y(y0);\n };\n\n area.lineY1 = function() {\n return arealine().x(x0).y(y1);\n };\n\n area.lineX1 = function() {\n return arealine().x(x1).y(y0);\n };\n\n area.defined = function(_) {\n return arguments.length ? (defined = typeof _ === \"function\" ? _ : constant(!!_), area) : defined;\n };\n\n area.curve = function(_) {\n return arguments.length ? (curve = _, context != null && (output = curve(context)), area) : curve;\n };\n\n area.context = function(_) {\n return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), area) : context;\n };\n\n return area;\n}\n","export default function(a, b) {\n return b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN;\n}\n","export default function(d) {\n return d;\n}\n","import curveLinear from \"./linear\";\n\nexport var curveRadialLinear = curveRadial(curveLinear);\n\nfunction Radial(curve) {\n this._curve = curve;\n}\n\nRadial.prototype = {\n areaStart: function() {\n this._curve.areaStart();\n },\n areaEnd: function() {\n this._curve.areaEnd();\n },\n lineStart: function() {\n this._curve.lineStart();\n },\n lineEnd: function() {\n this._curve.lineEnd();\n },\n point: function(a, r) {\n this._curve.point(r * Math.sin(a), r * -Math.cos(a));\n }\n};\n\nexport default function curveRadial(curve) {\n\n function radial(context) {\n return new Radial(curve(context));\n }\n\n radial._curve = curve;\n\n return radial;\n}\n","import curveRadial, {curveRadialLinear} from \"./curve/radial\";\nimport line from \"./line\";\n\nexport function lineRadial(l) {\n var c = l.curve;\n\n l.angle = l.x, delete l.x;\n l.radius = l.y, delete l.y;\n\n l.curve = function(_) {\n return arguments.length ? c(curveRadial(_)) : c()._curve;\n };\n\n return l;\n}\n\nexport default function() {\n return lineRadial(line().curve(curveRadialLinear));\n}\n","export var slice = Array.prototype.slice;\n","import {pi, tau} from \"../math\";\n\nexport default {\n draw: function(context, size) {\n var r = Math.sqrt(size / pi);\n context.moveTo(r, 0);\n context.arc(0, 0, r, 0, tau);\n }\n};\n","export default {\n draw: function(context, size) {\n var r = Math.sqrt(size / 5) / 2;\n context.moveTo(-3 * r, -r);\n context.lineTo(-r, -r);\n context.lineTo(-r, -3 * r);\n context.lineTo(r, -3 * r);\n context.lineTo(r, -r);\n context.lineTo(3 * r, -r);\n context.lineTo(3 * r, r);\n context.lineTo(r, r);\n context.lineTo(r, 3 * r);\n context.lineTo(-r, 3 * r);\n context.lineTo(-r, r);\n context.lineTo(-3 * r, r);\n context.closePath();\n }\n};\n","var tan30 = Math.sqrt(1 / 3),\n tan30_2 = tan30 * 2;\n\nexport default {\n draw: function(context, size) {\n var y = Math.sqrt(size / tan30_2),\n x = y * tan30;\n context.moveTo(0, -y);\n context.lineTo(x, 0);\n context.lineTo(0, y);\n context.lineTo(-x, 0);\n context.closePath();\n }\n};\n","import {pi, tau} from \"../math\";\n\nvar ka = 0.89081309152928522810,\n kr = Math.sin(pi / 10) / Math.sin(7 * pi / 10),\n kx = Math.sin(tau / 10) * kr,\n ky = -Math.cos(tau / 10) * kr;\n\nexport default {\n draw: function(context, size) {\n var r = Math.sqrt(size * ka),\n x = kx * r,\n y = ky * r;\n context.moveTo(0, -r);\n context.lineTo(x, y);\n for (var i = 1; i < 5; ++i) {\n var a = tau * i / 5,\n c = Math.cos(a),\n s = Math.sin(a);\n context.lineTo(s * r, -c * r);\n context.lineTo(c * x - s * y, s * x + c * y);\n }\n context.closePath();\n }\n};\n","export default {\n draw: function(context, size) {\n var w = Math.sqrt(size),\n x = -w / 2;\n context.rect(x, x, w, w);\n }\n};\n","var sqrt3 = Math.sqrt(3);\n\nexport default {\n draw: function(context, size) {\n var y = -Math.sqrt(size / (sqrt3 * 3));\n context.moveTo(0, y * 2);\n context.lineTo(-sqrt3 * y, -y);\n context.lineTo(sqrt3 * y, -y);\n context.closePath();\n }\n};\n","var c = -0.5,\n s = Math.sqrt(3) / 2,\n k = 1 / Math.sqrt(12),\n a = (k / 2 + 1) * 3;\n\nexport default {\n draw: function(context, size) {\n var r = Math.sqrt(size / a),\n x0 = r / 2,\n y0 = r * k,\n x1 = x0,\n y1 = r * k + r,\n x2 = -x1,\n y2 = y1;\n context.moveTo(x0, y0);\n context.lineTo(x1, y1);\n context.lineTo(x2, y2);\n context.lineTo(c * x0 - s * y0, s * x0 + c * y0);\n context.lineTo(c * x1 - s * y1, s * x1 + c * y1);\n context.lineTo(c * x2 - s * y2, s * x2 + c * y2);\n context.lineTo(c * x0 + s * y0, c * y0 - s * x0);\n context.lineTo(c * x1 + s * y1, c * y1 - s * x1);\n context.lineTo(c * x2 + s * y2, c * y2 - s * x2);\n context.closePath();\n }\n};\n","export default function() {}\n","export function point(that, x, y) {\n that._context.bezierCurveTo(\n (2 * that._x0 + that._x1) / 3,\n (2 * that._y0 + that._y1) / 3,\n (that._x0 + 2 * that._x1) / 3,\n (that._y0 + 2 * that._y1) / 3,\n (that._x0 + 4 * that._x1 + x) / 6,\n (that._y0 + 4 * that._y1 + y) / 6\n );\n}\n\nexport function Basis(context) {\n this._context = context;\n}\n\nBasis.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 =\n this._y0 = this._y1 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 3: point(this, this._x1, this._y1); // proceed\n case 2: this._context.lineTo(this._x1, this._y1); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; this._context.lineTo((5 * this._x0 + this._x1) / 6, (5 * this._y0 + this._y1) / 6); // proceed\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n }\n};\n\nexport default function(context) {\n return new Basis(context);\n}\n","import noop from \"../noop\";\nimport {point} from \"./basis\";\n\nfunction BasisClosed(context) {\n this._context = context;\n}\n\nBasisClosed.prototype = {\n areaStart: noop,\n areaEnd: noop,\n lineStart: function() {\n this._x0 = this._x1 = this._x2 = this._x3 = this._x4 =\n this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 1: {\n this._context.moveTo(this._x2, this._y2);\n this._context.closePath();\n break;\n }\n case 2: {\n this._context.moveTo((this._x2 + 2 * this._x3) / 3, (this._y2 + 2 * this._y3) / 3);\n this._context.lineTo((this._x3 + 2 * this._x2) / 3, (this._y3 + 2 * this._y2) / 3);\n this._context.closePath();\n break;\n }\n case 3: {\n this.point(this._x2, this._y2);\n this.point(this._x3, this._y3);\n this.point(this._x4, this._y4);\n break;\n }\n }\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._x2 = x, this._y2 = y; break;\n case 1: this._point = 2; this._x3 = x, this._y3 = y; break;\n case 2: this._point = 3; this._x4 = x, this._y4 = y; this._context.moveTo((this._x0 + 4 * this._x1 + x) / 6, (this._y0 + 4 * this._y1 + y) / 6); break;\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n }\n};\n\nexport default function(context) {\n return new BasisClosed(context);\n}\n","import {point} from \"./basis\";\n\nfunction BasisOpen(context) {\n this._context = context;\n}\n\nBasisOpen.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 =\n this._y0 = this._y1 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; var x0 = (this._x0 + 4 * this._x1 + x) / 6, y0 = (this._y0 + 4 * this._y1 + y) / 6; this._line ? this._context.lineTo(x0, y0) : this._context.moveTo(x0, y0); break;\n case 3: this._point = 4; // proceed\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n }\n};\n\nexport default function(context) {\n return new BasisOpen(context);\n}\n","import {Basis} from \"./basis\";\n\nfunction Bundle(context, beta) {\n this._basis = new Basis(context);\n this._beta = beta;\n}\n\nBundle.prototype = {\n lineStart: function() {\n this._x = [];\n this._y = [];\n this._basis.lineStart();\n },\n lineEnd: function() {\n var x = this._x,\n y = this._y,\n j = x.length - 1;\n\n if (j > 0) {\n var x0 = x[0],\n y0 = y[0],\n dx = x[j] - x0,\n dy = y[j] - y0,\n i = -1,\n t;\n\n while (++i <= j) {\n t = i / j;\n this._basis.point(\n this._beta * x[i] + (1 - this._beta) * (x0 + t * dx),\n this._beta * y[i] + (1 - this._beta) * (y0 + t * dy)\n );\n }\n }\n\n this._x = this._y = null;\n this._basis.lineEnd();\n },\n point: function(x, y) {\n this._x.push(+x);\n this._y.push(+y);\n }\n};\n\nexport default (function custom(beta) {\n\n function bundle(context) {\n return beta === 1 ? new Basis(context) : new Bundle(context, beta);\n }\n\n bundle.beta = function(beta) {\n return custom(+beta);\n };\n\n return bundle;\n})(0.85);\n","export function point(that, x, y) {\n that._context.bezierCurveTo(\n that._x1 + that._k * (that._x2 - that._x0),\n that._y1 + that._k * (that._y2 - that._y0),\n that._x2 + that._k * (that._x1 - x),\n that._y2 + that._k * (that._y1 - y),\n that._x2,\n that._y2\n );\n}\n\nexport function Cardinal(context, tension) {\n this._context = context;\n this._k = (1 - tension) / 6;\n}\n\nCardinal.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 2: this._context.lineTo(this._x2, this._y2); break;\n case 3: point(this, this._x1, this._y1); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; this._x1 = x, this._y1 = y; break;\n case 2: this._point = 3; // proceed\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(tension) {\n\n function cardinal(context) {\n return new Cardinal(context, tension);\n }\n\n cardinal.tension = function(tension) {\n return custom(+tension);\n };\n\n return cardinal;\n})(0);\n","import noop from \"../noop\";\nimport {point} from \"./cardinal\";\n\nexport function CardinalClosed(context, tension) {\n this._context = context;\n this._k = (1 - tension) / 6;\n}\n\nCardinalClosed.prototype = {\n areaStart: noop,\n areaEnd: noop,\n lineStart: function() {\n this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = this._x5 =\n this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = this._y5 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 1: {\n this._context.moveTo(this._x3, this._y3);\n this._context.closePath();\n break;\n }\n case 2: {\n this._context.lineTo(this._x3, this._y3);\n this._context.closePath();\n break;\n }\n case 3: {\n this.point(this._x3, this._y3);\n this.point(this._x4, this._y4);\n this.point(this._x5, this._y5);\n break;\n }\n }\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._x3 = x, this._y3 = y; break;\n case 1: this._point = 2; this._context.moveTo(this._x4 = x, this._y4 = y); break;\n case 2: this._point = 3; this._x5 = x, this._y5 = y; break;\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(tension) {\n\n function cardinal(context) {\n return new CardinalClosed(context, tension);\n }\n\n cardinal.tension = function(tension) {\n return custom(+tension);\n };\n\n return cardinal;\n})(0);\n","import {point} from \"./cardinal\";\n\nexport function CardinalOpen(context, tension) {\n this._context = context;\n this._k = (1 - tension) / 6;\n}\n\nCardinalOpen.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; this._line ? this._context.lineTo(this._x2, this._y2) : this._context.moveTo(this._x2, this._y2); break;\n case 3: this._point = 4; // proceed\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(tension) {\n\n function cardinal(context) {\n return new CardinalOpen(context, tension);\n }\n\n cardinal.tension = function(tension) {\n return custom(+tension);\n };\n\n return cardinal;\n})(0);\n","import {epsilon} from \"../math\";\nimport {Cardinal} from \"./cardinal\";\n\nexport function point(that, x, y) {\n var x1 = that._x1,\n y1 = that._y1,\n x2 = that._x2,\n y2 = that._y2;\n\n if (that._l01_a > epsilon) {\n var a = 2 * that._l01_2a + 3 * that._l01_a * that._l12_a + that._l12_2a,\n n = 3 * that._l01_a * (that._l01_a + that._l12_a);\n x1 = (x1 * a - that._x0 * that._l12_2a + that._x2 * that._l01_2a) / n;\n y1 = (y1 * a - that._y0 * that._l12_2a + that._y2 * that._l01_2a) / n;\n }\n\n if (that._l23_a > epsilon) {\n var b = 2 * that._l23_2a + 3 * that._l23_a * that._l12_a + that._l12_2a,\n m = 3 * that._l23_a * (that._l23_a + that._l12_a);\n x2 = (x2 * b + that._x1 * that._l23_2a - x * that._l12_2a) / m;\n y2 = (y2 * b + that._y1 * that._l23_2a - y * that._l12_2a) / m;\n }\n\n that._context.bezierCurveTo(x1, y1, x2, y2, that._x2, that._y2);\n}\n\nfunction CatmullRom(context, alpha) {\n this._context = context;\n this._alpha = alpha;\n}\n\nCatmullRom.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._l01_a = this._l12_a = this._l23_a =\n this._l01_2a = this._l12_2a = this._l23_2a =\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 2: this._context.lineTo(this._x2, this._y2); break;\n case 3: this.point(this._x2, this._y2); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n\n if (this._point) {\n var x23 = this._x2 - x,\n y23 = this._y2 - y;\n this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));\n }\n\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; // proceed\n default: point(this, x, y); break;\n }\n\n this._l01_a = this._l12_a, this._l12_a = this._l23_a;\n this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(alpha) {\n\n function catmullRom(context) {\n return alpha ? new CatmullRom(context, alpha) : new Cardinal(context, 0);\n }\n\n catmullRom.alpha = function(alpha) {\n return custom(+alpha);\n };\n\n return catmullRom;\n})(0.5);\n","import {CardinalClosed} from \"./cardinalClosed\";\nimport noop from \"../noop\";\nimport {point} from \"./catmullRom\";\n\nfunction CatmullRomClosed(context, alpha) {\n this._context = context;\n this._alpha = alpha;\n}\n\nCatmullRomClosed.prototype = {\n areaStart: noop,\n areaEnd: noop,\n lineStart: function() {\n this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = this._x5 =\n this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = this._y5 = NaN;\n this._l01_a = this._l12_a = this._l23_a =\n this._l01_2a = this._l12_2a = this._l23_2a =\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 1: {\n this._context.moveTo(this._x3, this._y3);\n this._context.closePath();\n break;\n }\n case 2: {\n this._context.lineTo(this._x3, this._y3);\n this._context.closePath();\n break;\n }\n case 3: {\n this.point(this._x3, this._y3);\n this.point(this._x4, this._y4);\n this.point(this._x5, this._y5);\n break;\n }\n }\n },\n point: function(x, y) {\n x = +x, y = +y;\n\n if (this._point) {\n var x23 = this._x2 - x,\n y23 = this._y2 - y;\n this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));\n }\n\n switch (this._point) {\n case 0: this._point = 1; this._x3 = x, this._y3 = y; break;\n case 1: this._point = 2; this._context.moveTo(this._x4 = x, this._y4 = y); break;\n case 2: this._point = 3; this._x5 = x, this._y5 = y; break;\n default: point(this, x, y); break;\n }\n\n this._l01_a = this._l12_a, this._l12_a = this._l23_a;\n this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(alpha) {\n\n function catmullRom(context) {\n return alpha ? new CatmullRomClosed(context, alpha) : new CardinalClosed(context, 0);\n }\n\n catmullRom.alpha = function(alpha) {\n return custom(+alpha);\n };\n\n return catmullRom;\n})(0.5);\n","import {CardinalOpen} from \"./cardinalOpen\";\nimport {point} from \"./catmullRom\";\n\nfunction CatmullRomOpen(context, alpha) {\n this._context = context;\n this._alpha = alpha;\n}\n\nCatmullRomOpen.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._l01_a = this._l12_a = this._l23_a =\n this._l01_2a = this._l12_2a = this._l23_2a =\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n\n if (this._point) {\n var x23 = this._x2 - x,\n y23 = this._y2 - y;\n this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));\n }\n\n switch (this._point) {\n case 0: this._point = 1; break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; this._line ? this._context.lineTo(this._x2, this._y2) : this._context.moveTo(this._x2, this._y2); break;\n case 3: this._point = 4; // proceed\n default: point(this, x, y); break;\n }\n\n this._l01_a = this._l12_a, this._l12_a = this._l23_a;\n this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(alpha) {\n\n function catmullRom(context) {\n return alpha ? new CatmullRomOpen(context, alpha) : new CardinalOpen(context, 0);\n }\n\n catmullRom.alpha = function(alpha) {\n return custom(+alpha);\n };\n\n return catmullRom;\n})(0.5);\n","import noop from \"../noop\";\n\nfunction LinearClosed(context) {\n this._context = context;\n}\n\nLinearClosed.prototype = {\n areaStart: noop,\n areaEnd: noop,\n lineStart: function() {\n this._point = 0;\n },\n lineEnd: function() {\n if (this._point) this._context.closePath();\n },\n point: function(x, y) {\n x = +x, y = +y;\n if (this._point) this._context.lineTo(x, y);\n else this._point = 1, this._context.moveTo(x, y);\n }\n};\n\nexport default function(context) {\n return new LinearClosed(context);\n}\n","function sign(x) {\n return x < 0 ? -1 : 1;\n}\n\n// Calculate the slopes of the tangents (Hermite-type interpolation) based on\n// the following paper: Steffen, M. 1990. A Simple Method for Monotonic\n// Interpolation in One Dimension. Astronomy and Astrophysics, Vol. 239, NO.\n// NOV(II), P. 443, 1990.\nfunction slope3(that, x2, y2) {\n var h0 = that._x1 - that._x0,\n h1 = x2 - that._x1,\n s0 = (that._y1 - that._y0) / (h0 || h1 < 0 && -0),\n s1 = (y2 - that._y1) / (h1 || h0 < 0 && -0),\n p = (s0 * h1 + s1 * h0) / (h0 + h1);\n return (sign(s0) + sign(s1)) * Math.min(Math.abs(s0), Math.abs(s1), 0.5 * Math.abs(p)) || 0;\n}\n\n// Calculate a one-sided slope.\nfunction slope2(that, t) {\n var h = that._x1 - that._x0;\n return h ? (3 * (that._y1 - that._y0) / h - t) / 2 : t;\n}\n\n// According to https://en.wikipedia.org/wiki/Cubic_Hermite_spline#Representations\n// \"you can express cubic Hermite interpolation in terms of cubic Bézier curves\n// with respect to the four values p0, p0 + m0 / 3, p1 - m1 / 3, p1\".\nfunction point(that, t0, t1) {\n var x0 = that._x0,\n y0 = that._y0,\n x1 = that._x1,\n y1 = that._y1,\n dx = (x1 - x0) / 3;\n that._context.bezierCurveTo(x0 + dx, y0 + dx * t0, x1 - dx, y1 - dx * t1, x1, y1);\n}\n\nfunction MonotoneX(context) {\n this._context = context;\n}\n\nMonotoneX.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 =\n this._y0 = this._y1 =\n this._t0 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 2: this._context.lineTo(this._x1, this._y1); break;\n case 3: point(this, this._t0, slope2(this, this._t0)); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n var t1 = NaN;\n\n x = +x, y = +y;\n if (x === this._x1 && y === this._y1) return; // Ignore coincident points.\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; point(this, slope2(this, t1 = slope3(this, x, y)), t1); break;\n default: point(this, this._t0, t1 = slope3(this, x, y)); break;\n }\n\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n this._t0 = t1;\n }\n}\n\nfunction MonotoneY(context) {\n this._context = new ReflectContext(context);\n}\n\n(MonotoneY.prototype = Object.create(MonotoneX.prototype)).point = function(x, y) {\n MonotoneX.prototype.point.call(this, y, x);\n};\n\nfunction ReflectContext(context) {\n this._context = context;\n}\n\nReflectContext.prototype = {\n moveTo: function(x, y) { this._context.moveTo(y, x); },\n closePath: function() { this._context.closePath(); },\n lineTo: function(x, y) { this._context.lineTo(y, x); },\n bezierCurveTo: function(x1, y1, x2, y2, x, y) { this._context.bezierCurveTo(y1, x1, y2, x2, y, x); }\n};\n\nexport function monotoneX(context) {\n return new MonotoneX(context);\n}\n\nexport function monotoneY(context) {\n return new MonotoneY(context);\n}\n","function Natural(context) {\n this._context = context;\n}\n\nNatural.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x = [];\n this._y = [];\n },\n lineEnd: function() {\n var x = this._x,\n y = this._y,\n n = x.length;\n\n if (n) {\n this._line ? this._context.lineTo(x[0], y[0]) : this._context.moveTo(x[0], y[0]);\n if (n === 2) {\n this._context.lineTo(x[1], y[1]);\n } else {\n var px = controlPoints(x),\n py = controlPoints(y);\n for (var i0 = 0, i1 = 1; i1 < n; ++i0, ++i1) {\n this._context.bezierCurveTo(px[0][i0], py[0][i0], px[1][i0], py[1][i0], x[i1], y[i1]);\n }\n }\n }\n\n if (this._line || (this._line !== 0 && n === 1)) this._context.closePath();\n this._line = 1 - this._line;\n this._x = this._y = null;\n },\n point: function(x, y) {\n this._x.push(+x);\n this._y.push(+y);\n }\n};\n\n// See https://www.particleincell.com/2012/bezier-splines/ for derivation.\nfunction controlPoints(x) {\n var i,\n n = x.length - 1,\n m,\n a = new Array(n),\n b = new Array(n),\n r = new Array(n);\n a[0] = 0, b[0] = 2, r[0] = x[0] + 2 * x[1];\n for (i = 1; i < n - 1; ++i) a[i] = 1, b[i] = 4, r[i] = 4 * x[i] + 2 * x[i + 1];\n a[n - 1] = 2, b[n - 1] = 7, r[n - 1] = 8 * x[n - 1] + x[n];\n for (i = 1; i < n; ++i) m = a[i] / b[i - 1], b[i] -= m, r[i] -= m * r[i - 1];\n a[n - 1] = r[n - 1] / b[n - 1];\n for (i = n - 2; i >= 0; --i) a[i] = (r[i] - a[i + 1]) / b[i];\n b[n - 1] = (x[n] + a[n - 1]) / 2;\n for (i = 0; i < n - 1; ++i) b[i] = 2 * x[i + 1] - a[i + 1];\n return [a, b];\n}\n\nexport default function(context) {\n return new Natural(context);\n}\n","function Step(context, t) {\n this._context = context;\n this._t = t;\n}\n\nStep.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x = this._y = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n if (0 < this._t && this._t < 1 && this._point === 2) this._context.lineTo(this._x, this._y);\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n if (this._line >= 0) this._t = 1 - this._t, this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; // proceed\n default: {\n if (this._t <= 0) {\n this._context.lineTo(this._x, y);\n this._context.lineTo(x, y);\n } else {\n var x1 = this._x * (1 - this._t) + x * this._t;\n this._context.lineTo(x1, this._y);\n this._context.lineTo(x1, y);\n }\n break;\n }\n }\n this._x = x, this._y = y;\n }\n};\n\nexport default function(context) {\n return new Step(context, 0.5);\n}\n\nexport function stepBefore(context) {\n return new Step(context, 0);\n}\n\nexport function stepAfter(context) {\n return new Step(context, 1);\n}\n","export default function(series, order) {\n if (!((n = series.length) > 1)) return;\n for (var i = 1, j, s0, s1 = series[order[0]], n, m = s1.length; i < n; ++i) {\n s0 = s1, s1 = series[order[i]];\n for (j = 0; j < m; ++j) {\n s1[j][1] += s1[j][0] = isNaN(s0[j][1]) ? s0[j][0] : s0[j][1];\n }\n }\n}\n","export default function(series) {\n var n = series.length, o = new Array(n);\n while (--n >= 0) o[n] = n;\n return o;\n}\n","import {slice} from \"./array\";\nimport constant from \"./constant\";\nimport offsetNone from \"./offset/none\";\nimport orderNone from \"./order/none\";\n\nfunction stackValue(d, key) {\n return d[key];\n}\n\nexport default function() {\n var keys = constant([]),\n order = orderNone,\n offset = offsetNone,\n value = stackValue;\n\n function stack(data) {\n var kz = keys.apply(this, arguments),\n i,\n m = data.length,\n n = kz.length,\n sz = new Array(n),\n oz;\n\n for (i = 0; i < n; ++i) {\n for (var ki = kz[i], si = sz[i] = new Array(m), j = 0, sij; j < m; ++j) {\n si[j] = sij = [0, +value(data[j], ki, j, data)];\n sij.data = data[j];\n }\n si.key = ki;\n }\n\n for (i = 0, oz = order(sz); i < n; ++i) {\n sz[oz[i]].index = i;\n }\n\n offset(sz, oz);\n return sz;\n }\n\n stack.keys = function(_) {\n return arguments.length ? (keys = typeof _ === \"function\" ? _ : constant(slice.call(_)), stack) : keys;\n };\n\n stack.value = function(_) {\n return arguments.length ? (value = typeof _ === \"function\" ? _ : constant(+_), stack) : value;\n };\n\n stack.order = function(_) {\n return arguments.length ? (order = _ == null ? orderNone : typeof _ === \"function\" ? _ : constant(slice.call(_)), stack) : order;\n };\n\n stack.offset = function(_) {\n return arguments.length ? (offset = _ == null ? offsetNone : _, stack) : offset;\n };\n\n return stack;\n}\n","import none from \"./none\";\n\nexport default function(series) {\n var sums = series.map(sum);\n return none(series).sort(function(a, b) { return sums[a] - sums[b]; });\n}\n\nexport function sum(series) {\n var s = 0, i = -1, n = series.length, v;\n while (++i < n) if (v = +series[i][1]) s += v;\n return s;\n}\n","export function cubicIn(t) {\n return t * t * t;\n}\n\nexport function cubicOut(t) {\n return --t * t * t + 1;\n}\n\nexport function cubicInOut(t) {\n return ((t *= 2) <= 1 ? t * t * t : (t -= 2) * t * t + 2) / 2;\n}\n","var exponent = 3;\n\nexport var polyIn = (function custom(e) {\n e = +e;\n\n function polyIn(t) {\n return Math.pow(t, e);\n }\n\n polyIn.exponent = custom;\n\n return polyIn;\n})(exponent);\n\nexport var polyOut = (function custom(e) {\n e = +e;\n\n function polyOut(t) {\n return 1 - Math.pow(1 - t, e);\n }\n\n polyOut.exponent = custom;\n\n return polyOut;\n})(exponent);\n\nexport var polyInOut = (function custom(e) {\n e = +e;\n\n function polyInOut(t) {\n return ((t *= 2) <= 1 ? Math.pow(t, e) : 2 - Math.pow(2 - t, e)) / 2;\n }\n\n polyInOut.exponent = custom;\n\n return polyInOut;\n})(exponent);\n","var pi = Math.PI,\n halfPi = pi / 2;\n\nexport function sinIn(t) {\n return 1 - Math.cos(t * halfPi);\n}\n\nexport function sinOut(t) {\n return Math.sin(t * halfPi);\n}\n\nexport function sinInOut(t) {\n return (1 - Math.cos(pi * t)) / 2;\n}\n","var b1 = 4 / 11,\n b2 = 6 / 11,\n b3 = 8 / 11,\n b4 = 3 / 4,\n b5 = 9 / 11,\n b6 = 10 / 11,\n b7 = 15 / 16,\n b8 = 21 / 22,\n b9 = 63 / 64,\n b0 = 1 / b1 / b1;\n\nexport function bounceIn(t) {\n return 1 - bounceOut(1 - t);\n}\n\nexport function bounceOut(t) {\n return (t = +t) < b1 ? b0 * t * t : t < b3 ? b0 * (t -= b2) * t + b4 : t < b6 ? b0 * (t -= b5) * t + b7 : b0 * (t -= b8) * t + b9;\n}\n\nexport function bounceInOut(t) {\n return ((t *= 2) <= 1 ? 1 - bounceOut(1 - t) : bounceOut(t - 1) + 1) / 2;\n}\n","var overshoot = 1.70158;\n\nexport var backIn = (function custom(s) {\n s = +s;\n\n function backIn(t) {\n return t * t * ((s + 1) * t - s);\n }\n\n backIn.overshoot = custom;\n\n return backIn;\n})(overshoot);\n\nexport var backOut = (function custom(s) {\n s = +s;\n\n function backOut(t) {\n return --t * t * ((s + 1) * t + s) + 1;\n }\n\n backOut.overshoot = custom;\n\n return backOut;\n})(overshoot);\n\nexport var backInOut = (function custom(s) {\n s = +s;\n\n function backInOut(t) {\n return ((t *= 2) < 1 ? t * t * ((s + 1) * t - s) : (t -= 2) * t * ((s + 1) * t + s) + 2) / 2;\n }\n\n backInOut.overshoot = custom;\n\n return backInOut;\n})(overshoot);\n","var tau = 2 * Math.PI,\n amplitude = 1,\n period = 0.3;\n\nexport var elasticIn = (function custom(a, p) {\n var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau);\n\n function elasticIn(t) {\n return a * Math.pow(2, 10 * --t) * Math.sin((s - t) / p);\n }\n\n elasticIn.amplitude = function(a) { return custom(a, p * tau); };\n elasticIn.period = function(p) { return custom(a, p); };\n\n return elasticIn;\n})(amplitude, period);\n\nexport var elasticOut = (function custom(a, p) {\n var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau);\n\n function elasticOut(t) {\n return 1 - a * Math.pow(2, -10 * (t = +t)) * Math.sin((t + s) / p);\n }\n\n elasticOut.amplitude = function(a) { return custom(a, p * tau); };\n elasticOut.period = function(p) { return custom(a, p); };\n\n return elasticOut;\n})(amplitude, period);\n\nexport var elasticInOut = (function custom(a, p) {\n var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau);\n\n function elasticInOut(t) {\n return ((t = t * 2 - 1) < 0\n ? a * Math.pow(2, 10 * t) * Math.sin((s - t) / p)\n : 2 - a * Math.pow(2, -10 * t) * Math.sin((s + t) / p)) / 2;\n }\n\n elasticInOut.amplitude = function(a) { return custom(a, p * tau); };\n elasticInOut.period = function(p) { return custom(a, p); };\n\n return elasticInOut;\n})(amplitude, period);\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","export function x(d) {\n return d[0];\n}\n\nexport function y(d) {\n return d[1];\n}\n","function RedBlackTree() {\n this._ = null; // root node\n}\n\nexport function RedBlackNode(node) {\n node.U = // parent node\n node.C = // color - true for red, false for black\n node.L = // left node\n node.R = // right node\n node.P = // previous node\n node.N = null; // next node\n}\n\nRedBlackTree.prototype = {\n constructor: RedBlackTree,\n\n insert: function(after, node) {\n var parent, grandpa, uncle;\n\n if (after) {\n node.P = after;\n node.N = after.N;\n if (after.N) after.N.P = node;\n after.N = node;\n if (after.R) {\n after = after.R;\n while (after.L) after = after.L;\n after.L = node;\n } else {\n after.R = node;\n }\n parent = after;\n } else if (this._) {\n after = RedBlackFirst(this._);\n node.P = null;\n node.N = after;\n after.P = after.L = node;\n parent = after;\n } else {\n node.P = node.N = null;\n this._ = node;\n parent = null;\n }\n node.L = node.R = null;\n node.U = parent;\n node.C = true;\n\n after = node;\n while (parent && parent.C) {\n grandpa = parent.U;\n if (parent === grandpa.L) {\n uncle = grandpa.R;\n if (uncle && uncle.C) {\n parent.C = uncle.C = false;\n grandpa.C = true;\n after = grandpa;\n } else {\n if (after === parent.R) {\n RedBlackRotateLeft(this, parent);\n after = parent;\n parent = after.U;\n }\n parent.C = false;\n grandpa.C = true;\n RedBlackRotateRight(this, grandpa);\n }\n } else {\n uncle = grandpa.L;\n if (uncle && uncle.C) {\n parent.C = uncle.C = false;\n grandpa.C = true;\n after = grandpa;\n } else {\n if (after === parent.L) {\n RedBlackRotateRight(this, parent);\n after = parent;\n parent = after.U;\n }\n parent.C = false;\n grandpa.C = true;\n RedBlackRotateLeft(this, grandpa);\n }\n }\n parent = after.U;\n }\n this._.C = false;\n },\n\n remove: function(node) {\n if (node.N) node.N.P = node.P;\n if (node.P) node.P.N = node.N;\n node.N = node.P = null;\n\n var parent = node.U,\n sibling,\n left = node.L,\n right = node.R,\n next,\n red;\n\n if (!left) next = right;\n else if (!right) next = left;\n else next = RedBlackFirst(right);\n\n if (parent) {\n if (parent.L === node) parent.L = next;\n else parent.R = next;\n } else {\n this._ = next;\n }\n\n if (left && right) {\n red = next.C;\n next.C = node.C;\n next.L = left;\n left.U = next;\n if (next !== right) {\n parent = next.U;\n next.U = node.U;\n node = next.R;\n parent.L = node;\n next.R = right;\n right.U = next;\n } else {\n next.U = parent;\n parent = next;\n node = next.R;\n }\n } else {\n red = node.C;\n node = next;\n }\n\n if (node) node.U = parent;\n if (red) return;\n if (node && node.C) { node.C = false; return; }\n\n do {\n if (node === this._) break;\n if (node === parent.L) {\n sibling = parent.R;\n if (sibling.C) {\n sibling.C = false;\n parent.C = true;\n RedBlackRotateLeft(this, parent);\n sibling = parent.R;\n }\n if ((sibling.L && sibling.L.C)\n || (sibling.R && sibling.R.C)) {\n if (!sibling.R || !sibling.R.C) {\n sibling.L.C = false;\n sibling.C = true;\n RedBlackRotateRight(this, sibling);\n sibling = parent.R;\n }\n sibling.C = parent.C;\n parent.C = sibling.R.C = false;\n RedBlackRotateLeft(this, parent);\n node = this._;\n break;\n }\n } else {\n sibling = parent.L;\n if (sibling.C) {\n sibling.C = false;\n parent.C = true;\n RedBlackRotateRight(this, parent);\n sibling = parent.L;\n }\n if ((sibling.L && sibling.L.C)\n || (sibling.R && sibling.R.C)) {\n if (!sibling.L || !sibling.L.C) {\n sibling.R.C = false;\n sibling.C = true;\n RedBlackRotateLeft(this, sibling);\n sibling = parent.L;\n }\n sibling.C = parent.C;\n parent.C = sibling.L.C = false;\n RedBlackRotateRight(this, parent);\n node = this._;\n break;\n }\n }\n sibling.C = true;\n node = parent;\n parent = parent.U;\n } while (!node.C);\n\n if (node) node.C = false;\n }\n};\n\nfunction RedBlackRotateLeft(tree, node) {\n var p = node,\n q = node.R,\n parent = p.U;\n\n if (parent) {\n if (parent.L === p) parent.L = q;\n else parent.R = q;\n } else {\n tree._ = q;\n }\n\n q.U = parent;\n p.U = q;\n p.R = q.L;\n if (p.R) p.R.U = p;\n q.L = p;\n}\n\nfunction RedBlackRotateRight(tree, node) {\n var p = node,\n q = node.L,\n parent = p.U;\n\n if (parent) {\n if (parent.L === p) parent.L = q;\n else parent.R = q;\n } else {\n tree._ = q;\n }\n\n q.U = parent;\n p.U = q;\n p.L = q.R;\n if (p.L) p.L.U = p;\n q.R = p;\n}\n\nfunction RedBlackFirst(node) {\n while (node.L) node = node.L;\n return node;\n}\n\nexport default RedBlackTree;\n","import {cells, edges, epsilon} from \"./Diagram\";\n\nexport function createEdge(left, right, v0, v1) {\n var edge = [null, null],\n index = edges.push(edge) - 1;\n edge.left = left;\n edge.right = right;\n if (v0) setEdgeEnd(edge, left, right, v0);\n if (v1) setEdgeEnd(edge, right, left, v1);\n cells[left.index].halfedges.push(index);\n cells[right.index].halfedges.push(index);\n return edge;\n}\n\nexport function createBorderEdge(left, v0, v1) {\n var edge = [v0, v1];\n edge.left = left;\n return edge;\n}\n\nexport function setEdgeEnd(edge, left, right, vertex) {\n if (!edge[0] && !edge[1]) {\n edge[0] = vertex;\n edge.left = left;\n edge.right = right;\n } else if (edge.left === right) {\n edge[1] = vertex;\n } else {\n edge[0] = vertex;\n }\n}\n\n// Liang–Barsky line clipping.\nfunction clipEdge(edge, x0, y0, x1, y1) {\n var a = edge[0],\n b = edge[1],\n ax = a[0],\n ay = a[1],\n bx = b[0],\n by = b[1],\n t0 = 0,\n t1 = 1,\n dx = bx - ax,\n dy = by - ay,\n r;\n\n r = x0 - ax;\n if (!dx && r > 0) return;\n r /= dx;\n if (dx < 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n } else if (dx > 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n }\n\n r = x1 - ax;\n if (!dx && r < 0) return;\n r /= dx;\n if (dx < 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n } else if (dx > 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n }\n\n r = y0 - ay;\n if (!dy && r > 0) return;\n r /= dy;\n if (dy < 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n } else if (dy > 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n }\n\n r = y1 - ay;\n if (!dy && r < 0) return;\n r /= dy;\n if (dy < 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n } else if (dy > 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n }\n\n if (!(t0 > 0) && !(t1 < 1)) return true; // TODO Better check?\n\n if (t0 > 0) edge[0] = [ax + t0 * dx, ay + t0 * dy];\n if (t1 < 1) edge[1] = [ax + t1 * dx, ay + t1 * dy];\n return true;\n}\n\nfunction connectEdge(edge, x0, y0, x1, y1) {\n var v1 = edge[1];\n if (v1) return true;\n\n var v0 = edge[0],\n left = edge.left,\n right = edge.right,\n lx = left[0],\n ly = left[1],\n rx = right[0],\n ry = right[1],\n fx = (lx + rx) / 2,\n fy = (ly + ry) / 2,\n fm,\n fb;\n\n if (ry === ly) {\n if (fx < x0 || fx >= x1) return;\n if (lx > rx) {\n if (!v0) v0 = [fx, y0];\n else if (v0[1] >= y1) return;\n v1 = [fx, y1];\n } else {\n if (!v0) v0 = [fx, y1];\n else if (v0[1] < y0) return;\n v1 = [fx, y0];\n }\n } else {\n fm = (lx - rx) / (ry - ly);\n fb = fy - fm * fx;\n if (fm < -1 || fm > 1) {\n if (lx > rx) {\n if (!v0) v0 = [(y0 - fb) / fm, y0];\n else if (v0[1] >= y1) return;\n v1 = [(y1 - fb) / fm, y1];\n } else {\n if (!v0) v0 = [(y1 - fb) / fm, y1];\n else if (v0[1] < y0) return;\n v1 = [(y0 - fb) / fm, y0];\n }\n } else {\n if (ly < ry) {\n if (!v0) v0 = [x0, fm * x0 + fb];\n else if (v0[0] >= x1) return;\n v1 = [x1, fm * x1 + fb];\n } else {\n if (!v0) v0 = [x1, fm * x1 + fb];\n else if (v0[0] < x0) return;\n v1 = [x0, fm * x0 + fb];\n }\n }\n }\n\n edge[0] = v0;\n edge[1] = v1;\n return true;\n}\n\nexport function clipEdges(x0, y0, x1, y1) {\n var i = edges.length,\n edge;\n\n while (i--) {\n if (!connectEdge(edge = edges[i], x0, y0, x1, y1)\n || !clipEdge(edge, x0, y0, x1, y1)\n || !(Math.abs(edge[0][0] - edge[1][0]) > epsilon\n || Math.abs(edge[0][1] - edge[1][1]) > epsilon)) {\n delete edges[i];\n }\n }\n}\n","import {createBorderEdge} from \"./Edge\";\nimport {cells, edges, epsilon} from \"./Diagram\";\n\nexport function createCell(site) {\n return cells[site.index] = {\n site: site,\n halfedges: []\n };\n}\n\nfunction cellHalfedgeAngle(cell, edge) {\n var site = cell.site,\n va = edge.left,\n vb = edge.right;\n if (site === vb) vb = va, va = site;\n if (vb) return Math.atan2(vb[1] - va[1], vb[0] - va[0]);\n if (site === va) va = edge[1], vb = edge[0];\n else va = edge[0], vb = edge[1];\n return Math.atan2(va[0] - vb[0], vb[1] - va[1]);\n}\n\nexport function cellHalfedgeStart(cell, edge) {\n return edge[+(edge.left !== cell.site)];\n}\n\nexport function cellHalfedgeEnd(cell, edge) {\n return edge[+(edge.left === cell.site)];\n}\n\nexport function sortCellHalfedges() {\n for (var i = 0, n = cells.length, cell, halfedges, j, m; i < n; ++i) {\n if ((cell = cells[i]) && (m = (halfedges = cell.halfedges).length)) {\n var index = new Array(m),\n array = new Array(m);\n for (j = 0; j < m; ++j) index[j] = j, array[j] = cellHalfedgeAngle(cell, edges[halfedges[j]]);\n index.sort(function(i, j) { return array[j] - array[i]; });\n for (j = 0; j < m; ++j) array[j] = halfedges[index[j]];\n for (j = 0; j < m; ++j) halfedges[j] = array[j];\n }\n }\n}\n\nexport function clipCells(x0, y0, x1, y1) {\n var nCells = cells.length,\n iCell,\n cell,\n site,\n iHalfedge,\n halfedges,\n nHalfedges,\n start,\n startX,\n startY,\n end,\n endX,\n endY,\n cover = true;\n\n for (iCell = 0; iCell < nCells; ++iCell) {\n if (cell = cells[iCell]) {\n site = cell.site;\n halfedges = cell.halfedges;\n iHalfedge = halfedges.length;\n\n // Remove any dangling clipped edges.\n while (iHalfedge--) {\n if (!edges[halfedges[iHalfedge]]) {\n halfedges.splice(iHalfedge, 1);\n }\n }\n\n // Insert any border edges as necessary.\n iHalfedge = 0, nHalfedges = halfedges.length;\n while (iHalfedge < nHalfedges) {\n end = cellHalfedgeEnd(cell, edges[halfedges[iHalfedge]]), endX = end[0], endY = end[1];\n start = cellHalfedgeStart(cell, edges[halfedges[++iHalfedge % nHalfedges]]), startX = start[0], startY = start[1];\n if (Math.abs(endX - startX) > epsilon || Math.abs(endY - startY) > epsilon) {\n halfedges.splice(iHalfedge, 0, edges.push(createBorderEdge(site, end,\n Math.abs(endX - x0) < epsilon && y1 - endY > epsilon ? [x0, Math.abs(startX - x0) < epsilon ? startY : y1]\n : Math.abs(endY - y1) < epsilon && x1 - endX > epsilon ? [Math.abs(startY - y1) < epsilon ? startX : x1, y1]\n : Math.abs(endX - x1) < epsilon && endY - y0 > epsilon ? [x1, Math.abs(startX - x1) < epsilon ? startY : y0]\n : Math.abs(endY - y0) < epsilon && endX - x0 > epsilon ? [Math.abs(startY - y0) < epsilon ? startX : x0, y0]\n : null)) - 1);\n ++nHalfedges;\n }\n }\n\n if (nHalfedges) cover = false;\n }\n }\n\n // If there weren’t any edges, have the closest site cover the extent.\n // It doesn’t matter which corner of the extent we measure!\n if (cover) {\n var dx, dy, d2, dc = Infinity;\n\n for (iCell = 0, cover = null; iCell < nCells; ++iCell) {\n if (cell = cells[iCell]) {\n site = cell.site;\n dx = site[0] - x0;\n dy = site[1] - y0;\n d2 = dx * dx + dy * dy;\n if (d2 < dc) dc = d2, cover = cell;\n }\n }\n\n if (cover) {\n var v00 = [x0, y0], v01 = [x0, y1], v11 = [x1, y1], v10 = [x1, y0];\n cover.halfedges.push(\n edges.push(createBorderEdge(site = cover.site, v00, v01)) - 1,\n edges.push(createBorderEdge(site, v01, v11)) - 1,\n edges.push(createBorderEdge(site, v11, v10)) - 1,\n edges.push(createBorderEdge(site, v10, v00)) - 1\n );\n }\n }\n\n // Lastly delete any cells with no edges; these were entirely clipped.\n for (iCell = 0; iCell < nCells; ++iCell) {\n if (cell = cells[iCell]) {\n if (!cell.halfedges.length) {\n delete cells[iCell];\n }\n }\n }\n}\n","import {RedBlackNode} from \"./RedBlackTree\";\nimport {circles, epsilon2} from \"./Diagram\";\n\nvar circlePool = [];\n\nexport var firstCircle;\n\nfunction Circle() {\n RedBlackNode(this);\n this.x =\n this.y =\n this.arc =\n this.site =\n this.cy = null;\n}\n\nexport function attachCircle(arc) {\n var lArc = arc.P,\n rArc = arc.N;\n\n if (!lArc || !rArc) return;\n\n var lSite = lArc.site,\n cSite = arc.site,\n rSite = rArc.site;\n\n if (lSite === rSite) return;\n\n var bx = cSite[0],\n by = cSite[1],\n ax = lSite[0] - bx,\n ay = lSite[1] - by,\n cx = rSite[0] - bx,\n cy = rSite[1] - by;\n\n var d = 2 * (ax * cy - ay * cx);\n if (d >= -epsilon2) return;\n\n var ha = ax * ax + ay * ay,\n hc = cx * cx + cy * cy,\n x = (cy * ha - ay * hc) / d,\n y = (ax * hc - cx * ha) / d;\n\n var circle = circlePool.pop() || new Circle;\n circle.arc = arc;\n circle.site = cSite;\n circle.x = x + bx;\n circle.y = (circle.cy = y + by) + Math.sqrt(x * x + y * y); // y bottom\n\n arc.circle = circle;\n\n var before = null,\n node = circles._;\n\n while (node) {\n if (circle.y < node.y || (circle.y === node.y && circle.x <= node.x)) {\n if (node.L) node = node.L;\n else { before = node.P; break; }\n } else {\n if (node.R) node = node.R;\n else { before = node; break; }\n }\n }\n\n circles.insert(before, circle);\n if (!before) firstCircle = circle;\n}\n\nexport function detachCircle(arc) {\n var circle = arc.circle;\n if (circle) {\n if (!circle.P) firstCircle = circle.N;\n circles.remove(circle);\n circlePool.push(circle);\n RedBlackNode(circle);\n arc.circle = null;\n }\n}\n","import {RedBlackNode} from \"./RedBlackTree\";\nimport {createCell} from \"./Cell\";\nimport {attachCircle, detachCircle} from \"./Circle\";\nimport {createEdge, setEdgeEnd} from \"./Edge\";\nimport {beaches, epsilon} from \"./Diagram\";\n\nvar beachPool = [];\n\nfunction Beach() {\n RedBlackNode(this);\n this.edge =\n this.site =\n this.circle = null;\n}\n\nfunction createBeach(site) {\n var beach = beachPool.pop() || new Beach;\n beach.site = site;\n return beach;\n}\n\nfunction detachBeach(beach) {\n detachCircle(beach);\n beaches.remove(beach);\n beachPool.push(beach);\n RedBlackNode(beach);\n}\n\nexport function removeBeach(beach) {\n var circle = beach.circle,\n x = circle.x,\n y = circle.cy,\n vertex = [x, y],\n previous = beach.P,\n next = beach.N,\n disappearing = [beach];\n\n detachBeach(beach);\n\n var lArc = previous;\n while (lArc.circle\n && Math.abs(x - lArc.circle.x) < epsilon\n && Math.abs(y - lArc.circle.cy) < epsilon) {\n previous = lArc.P;\n disappearing.unshift(lArc);\n detachBeach(lArc);\n lArc = previous;\n }\n\n disappearing.unshift(lArc);\n detachCircle(lArc);\n\n var rArc = next;\n while (rArc.circle\n && Math.abs(x - rArc.circle.x) < epsilon\n && Math.abs(y - rArc.circle.cy) < epsilon) {\n next = rArc.N;\n disappearing.push(rArc);\n detachBeach(rArc);\n rArc = next;\n }\n\n disappearing.push(rArc);\n detachCircle(rArc);\n\n var nArcs = disappearing.length,\n iArc;\n for (iArc = 1; iArc < nArcs; ++iArc) {\n rArc = disappearing[iArc];\n lArc = disappearing[iArc - 1];\n setEdgeEnd(rArc.edge, lArc.site, rArc.site, vertex);\n }\n\n lArc = disappearing[0];\n rArc = disappearing[nArcs - 1];\n rArc.edge = createEdge(lArc.site, rArc.site, null, vertex);\n\n attachCircle(lArc);\n attachCircle(rArc);\n}\n\nexport function addBeach(site) {\n var x = site[0],\n directrix = site[1],\n lArc,\n rArc,\n dxl,\n dxr,\n node = beaches._;\n\n while (node) {\n dxl = leftBreakPoint(node, directrix) - x;\n if (dxl > epsilon) node = node.L; else {\n dxr = x - rightBreakPoint(node, directrix);\n if (dxr > epsilon) {\n if (!node.R) {\n lArc = node;\n break;\n }\n node = node.R;\n } else {\n if (dxl > -epsilon) {\n lArc = node.P;\n rArc = node;\n } else if (dxr > -epsilon) {\n lArc = node;\n rArc = node.N;\n } else {\n lArc = rArc = node;\n }\n break;\n }\n }\n }\n\n createCell(site);\n var newArc = createBeach(site);\n beaches.insert(lArc, newArc);\n\n if (!lArc && !rArc) return;\n\n if (lArc === rArc) {\n detachCircle(lArc);\n rArc = createBeach(lArc.site);\n beaches.insert(newArc, rArc);\n newArc.edge = rArc.edge = createEdge(lArc.site, newArc.site);\n attachCircle(lArc);\n attachCircle(rArc);\n return;\n }\n\n if (!rArc) { // && lArc\n newArc.edge = createEdge(lArc.site, newArc.site);\n return;\n }\n\n // else lArc !== rArc\n detachCircle(lArc);\n detachCircle(rArc);\n\n var lSite = lArc.site,\n ax = lSite[0],\n ay = lSite[1],\n bx = site[0] - ax,\n by = site[1] - ay,\n rSite = rArc.site,\n cx = rSite[0] - ax,\n cy = rSite[1] - ay,\n d = 2 * (bx * cy - by * cx),\n hb = bx * bx + by * by,\n hc = cx * cx + cy * cy,\n vertex = [(cy * hb - by * hc) / d + ax, (bx * hc - cx * hb) / d + ay];\n\n setEdgeEnd(rArc.edge, lSite, rSite, vertex);\n newArc.edge = createEdge(lSite, site, null, vertex);\n rArc.edge = createEdge(site, rSite, null, vertex);\n attachCircle(lArc);\n attachCircle(rArc);\n}\n\nfunction leftBreakPoint(arc, directrix) {\n var site = arc.site,\n rfocx = site[0],\n rfocy = site[1],\n pby2 = rfocy - directrix;\n\n if (!pby2) return rfocx;\n\n var lArc = arc.P;\n if (!lArc) return -Infinity;\n\n site = lArc.site;\n var lfocx = site[0],\n lfocy = site[1],\n plby2 = lfocy - directrix;\n\n if (!plby2) return lfocx;\n\n var hl = lfocx - rfocx,\n aby2 = 1 / pby2 - 1 / plby2,\n b = hl / plby2;\n\n if (aby2) return (-b + Math.sqrt(b * b - 2 * aby2 * (hl * hl / (-2 * plby2) - lfocy + plby2 / 2 + rfocy - pby2 / 2))) / aby2 + rfocx;\n\n return (rfocx + lfocx) / 2;\n}\n\nfunction rightBreakPoint(arc, directrix) {\n var rArc = arc.N;\n if (rArc) return leftBreakPoint(rArc, directrix);\n var site = arc.site;\n return site[1] === directrix ? site[0] : Infinity;\n}\n","import {addBeach, removeBeach} from \"./Beach\";\nimport {sortCellHalfedges, cellHalfedgeStart, clipCells} from \"./Cell\";\nimport {firstCircle} from \"./Circle\";\nimport {clipEdges} from \"./Edge\";\nimport RedBlackTree from \"./RedBlackTree\";\n\nexport var epsilon = 1e-6;\nexport var epsilon2 = 1e-12;\nexport var beaches;\nexport var cells;\nexport var circles;\nexport var edges;\n\nfunction triangleArea(a, b, c) {\n return (a[0] - c[0]) * (b[1] - a[1]) - (a[0] - b[0]) * (c[1] - a[1]);\n}\n\nfunction lexicographic(a, b) {\n return b[1] - a[1]\n || b[0] - a[0];\n}\n\nexport default function Diagram(sites, extent) {\n var site = sites.sort(lexicographic).pop(),\n x,\n y,\n circle;\n\n edges = [];\n cells = new Array(sites.length);\n beaches = new RedBlackTree;\n circles = new RedBlackTree;\n\n while (true) {\n circle = firstCircle;\n if (site && (!circle || site[1] < circle.y || (site[1] === circle.y && site[0] < circle.x))) {\n if (site[0] !== x || site[1] !== y) {\n addBeach(site);\n x = site[0], y = site[1];\n }\n site = sites.pop();\n } else if (circle) {\n removeBeach(circle.arc);\n } else {\n break;\n }\n }\n\n sortCellHalfedges();\n\n if (extent) {\n var x0 = +extent[0][0],\n y0 = +extent[0][1],\n x1 = +extent[1][0],\n y1 = +extent[1][1];\n clipEdges(x0, y0, x1, y1);\n clipCells(x0, y0, x1, y1);\n }\n\n this.edges = edges;\n this.cells = cells;\n\n beaches =\n circles =\n edges =\n cells = null;\n}\n\nDiagram.prototype = {\n constructor: Diagram,\n\n polygons: function() {\n var edges = this.edges;\n\n return this.cells.map(function(cell) {\n var polygon = cell.halfedges.map(function(i) { return cellHalfedgeStart(cell, edges[i]); });\n polygon.data = cell.site.data;\n return polygon;\n });\n },\n\n triangles: function() {\n var triangles = [],\n edges = this.edges;\n\n this.cells.forEach(function(cell, i) {\n if (!(m = (halfedges = cell.halfedges).length)) return;\n var site = cell.site,\n halfedges,\n j = -1,\n m,\n s0,\n e1 = edges[halfedges[m - 1]],\n s1 = e1.left === site ? e1.right : e1.left;\n\n while (++j < m) {\n s0 = s1;\n e1 = edges[halfedges[j]];\n s1 = e1.left === site ? e1.right : e1.left;\n if (s0 && s1 && i < s0.index && i < s1.index && triangleArea(site, s0, s1) < 0) {\n triangles.push([site.data, s0.data, s1.data]);\n }\n }\n });\n\n return triangles;\n },\n\n links: function() {\n return this.edges.filter(function(edge) {\n return edge.right;\n }).map(function(edge) {\n return {\n source: edge.left.data,\n target: edge.right.data\n };\n });\n },\n\n find: function(x, y, radius) {\n var that = this, i0, i1 = that._found || 0, n = that.cells.length, cell;\n\n // Use the previously-found cell, or start with an arbitrary one.\n while (!(cell = that.cells[i1])) if (++i1 >= n) return null;\n var dx = x - cell.site[0], dy = y - cell.site[1], d2 = dx * dx + dy * dy;\n\n // Traverse the half-edges to find a closer cell, if any.\n do {\n cell = that.cells[i0 = i1], i1 = null;\n cell.halfedges.forEach(function(e) {\n var edge = that.edges[e], v = edge.left;\n if ((v === cell.site || !v) && !(v = edge.right)) return;\n var vx = x - v[0], vy = y - v[1], v2 = vx * vx + vy * vy;\n if (v2 < d2) d2 = v2, i1 = v.index;\n });\n } while (i1 !== null);\n\n that._found = i0;\n\n return radius == null || d2 <= radius * radius ? cell.site : null;\n }\n}\n","import constant from \"./constant\";\nimport {x as pointX, y as pointY} from \"./point\";\nimport Diagram, {epsilon} from \"./Diagram\";\n\nexport default function() {\n var x = pointX,\n y = pointY,\n extent = null;\n\n function voronoi(data) {\n return new Diagram(data.map(function(d, i) {\n var s = [Math.round(x(d, i, data) / epsilon) * epsilon, Math.round(y(d, i, data) / epsilon) * epsilon];\n s.index = i;\n s.data = d;\n return s;\n }), extent);\n }\n\n voronoi.polygons = function(data) {\n return voronoi(data).polygons();\n };\n\n voronoi.links = function(data) {\n return voronoi(data).links();\n };\n\n voronoi.triangles = function(data) {\n return voronoi(data).triangles();\n };\n\n voronoi.x = function(_) {\n return arguments.length ? (x = typeof _ === \"function\" ? _ : constant(+_), voronoi) : x;\n };\n\n voronoi.y = function(_) {\n return arguments.length ? (y = typeof _ === \"function\" ? _ : constant(+_), voronoi) : y;\n };\n\n voronoi.extent = function(_) {\n return arguments.length ? (extent = _ == null ? null : [[+_[0][0], +_[0][1]], [+_[1][0], +_[1][1]]], voronoi) : extent && [[extent[0][0], extent[0][1]], [extent[1][0], extent[1][1]]];\n };\n\n voronoi.size = function(_) {\n return arguments.length ? (extent = _ == null ? null : [[0, 0], [+_[0], +_[1]]], voronoi) : extent && [extent[1][0] - extent[0][0], extent[1][1] - extent[0][1]];\n };\n\n return voronoi;\n}\n","/* global window, requestAnimationFrame, cancelAnimationFrame */\nimport { FieldType, DimensionSubtype } from 'datamodel';\nimport {\n axisLeft,\n axisRight,\n axisTop,\n axisBottom\n} from 'd3-axis';\nimport {\n symbolCircle,\n symbolCross,\n symbolDiamond,\n symbolSquare,\n symbolStar,\n symbolWye,\n symbolTriangle,\n symbol,\n stack as d3Stack,\n stackOffsetDiverging,\n stackOrderNone,\n stackOrderAscending,\n stackOrderDescending,\n stackOffsetNone,\n stackOffsetExpand,\n stackOffsetWiggle,\n pie,\n arc,\n line,\n curveLinear,\n curveStepAfter,\n curveStepBefore,\n curveStep,\n curveCatmullRom,\n area\n} from 'd3-shape';\nimport { scaleBand } from 'd3-scale';\nimport { nest } from 'd3-collection';\nimport {\n interpolate,\n interpolateRgb,\n piecewise,\n interpolateNumber,\n interpolateHslLong\n} from 'd3-interpolate';\nimport {\n easeCubic,\n easeBounce,\n easePoly,\n easeBack,\n easeCircle,\n easeLinear,\n easeElastic\n} from 'd3-ease';\nimport {\n color,\n rgb,\n hsl\n} from 'd3-color';\nimport { voronoi } from 'd3-voronoi';\nimport Model from 'hyperdis';\nimport * as STACK_CONFIG from './enums/stack-config';\n\nconst HTMLElement = window.HTMLElement;\n\nconst isSimpleObject = (obj) => {\n let token;\n if (typeof obj === 'object') {\n if (obj === null) { return false; }\n token = Object.prototype.toString.call(obj);\n if (token === '[object Object]') {\n return (obj.constructor.toString().match(/^function (.*)\\(\\)/m) || [])[1] === 'Object';\n }\n }\n return false;\n};\n\n/**\n * Returns unique id\n * @return {string} Unique id string\n */\nconst\n getUniqueId = () => `id-${new Date().getTime()}${Math.round(Math.random() * 10000)}`;\n\n/**\n * Deep copies an object and returns a new object.\n * @param {Object} o Object to clone\n * @return {Object} New Object.\n */\nconst clone = (o) => {\n const output = {};\n let v;\n for (const key in o) {\n if ({}.hasOwnProperty.call(o, key)) {\n v = o[key];\n output[key] = isSimpleObject(v) ? clone(v) : v;\n }\n }\n return output;\n};\n\n/**\n* Checks the existence of keys in an object\n* @param {Array} keys Set of keys which are to be checked\n* @param {Object} obj whose keys are checked from the set of keys provided\n* @return {Object} Error if the keys are absent, or the object itself\n*/\nconst checkExistence = (keys, obj) => {\n const nonExistentKeys = [];\n keys.forEach((key) => {\n if (key in obj) {\n return;\n }\n nonExistentKeys.push(key);\n });\n return nonExistentKeys;\n};\n\nconst sanitizeIP = {\n typeObj: (keys, obj) => {\n if (typeof obj !== 'object') {\n return Error('Argument type object expected');\n }\n\n const nonExistentKeys = checkExistence(keys, obj);\n if (nonExistentKeys.length) {\n return Error(`Missing keys from parameter ${nonExistentKeys.join(', ')}`);\n }\n return obj;\n },\n\n /* istanbul ignore next */ htmlElem: (elem) => {\n if (!(elem instanceof HTMLElement)) {\n return Error('HTMLElement required');\n }\n return elem;\n }\n};\n\n/**\n * Gets the maximum value from an array of objects for a given property name\n * @param {Array.} data Array of objects\n * @param {string} field Field name\n * @return {number} Maximum value\n */\nconst getMax = (data, field) => Math.max(...data.filter(d => !isNaN(d[field])).map(d => d[field]));\n\n/**\n * Gets the minimum value from an array of objects for a given property name\n * @param {Array.} data Array of objects\n * @param {string} field Field name\n * @return {number} Minimum value\n */\nconst getMin = (data, field) => Math.min(...data.filter(d => !isNaN(d[field])).map(d => d[field]));\n\n/**\n * Gets the domain from the data based on the field name and type of field\n * @param {Array. | Array.} data Data Array\n * @param {Array.} fields Array of fields from where the domain will be calculated\n * @param {string} fieldType Type of field - nominal, quantitiative, temporal.\n * @return {Array} Usually contains a min and max value if field is quantitative or\n * an array of values if field type is nominal or ordinal\n */\nconst getDomainFromData = (data, fields, fieldType) => {\n let domain;\n let domArr;\n data = data[0] instanceof Array ? data : [data];\n switch (fieldType) {\n case DimensionSubtype.CATEGORICAL:\n domain = [].concat(...data.map(arr => arr.map(d => d[fields[0]]).filter(d => d !== undefined)));\n break;\n default:\n domArr = data.map((arr) => {\n const firstMin = getMin(arr, fields[0]);\n const secondMin = getMin(arr, fields[1]);\n const firstMax = getMax(arr, fields[0]);\n const secondMax = getMax(arr, fields[1]);\n return [Math.min(firstMin, secondMin), Math.max(firstMax, secondMax)];\n });\n domain = [Math.min(...domArr.map(d => d[0])), Math.max(...domArr.map(d => d[1]))];\n break;\n }\n return domain;\n};\n\n/**\n * Union Domain values\n * @param {Array.} domains Array of domain values\n * @param {string} fieldType type of field - dimension,measure or datetime.\n * @return {Array} Unioned domain of all domain values.\n */\nconst unionDomain = (domains, fieldType) => {\n let domain;\n domains = domains.filter(dom => dom.length);\n if (fieldType === DimensionSubtype.CATEGORICAL) {\n domain = domain = [].concat(...domains);\n } else {\n domain = [Math.min(...domains.map(d => d[0])), Math.max(...domains.map(d => d[1]))];\n }\n\n return domain;\n};\n\nconst symbolFns = {\n circle: symbolCircle,\n cross: symbolCross,\n diamond: symbolDiamond,\n square: symbolSquare,\n star: symbolStar,\n wye: symbolWye,\n triangle: symbolTriangle\n};\n\nconst easeFns = {\n cubic: easeCubic,\n bounce: easeBounce,\n linear: easeLinear,\n elastic: easeElastic,\n back: easeBack,\n poly: easePoly,\n circle: easeCircle\n};\n\n/**\n * Returns the maximum or minimum points of a compare value from an array of objects.\n * @param {Array} points Array of objects\n * @param {string} compareValue Key in the object on which the comparing will be done.\n * @param {string} minOrMax minimum or maximum.\n * @return {Object} Minimum or maximum point.\n */\nconst getExtremePoint = (points, compareValue, minOrMax) => {\n let extremePoint;\n let point;\n const len = points.length;\n let minOrMaxVal = minOrMax === 'max' ? -Infinity : Infinity;\n let val;\n\n for (let i = 0; i < len; i++) {\n point = points[i];\n val = point[compareValue];\n if (minOrMax === 'min' ? val < minOrMaxVal : val > minOrMaxVal) {\n minOrMaxVal = val;\n extremePoint = point;\n }\n }\n\n return extremePoint;\n};\n\n/**\n * Returns the minimum point of a compare value from an array of objects.\n * @param {Array} points Array of objects\n * @param {string} compareValue Key in the object on which the comparing will be done.\n * @return {Object} Minimum point.\n */\nconst getMinPoint = (points, compareValue) => getExtremePoint(points, compareValue, 'min');\n\n/**\n * Returns the maximum point of a compare value from an array of objects.\n * @param {Array} points Array of objects\n * @param {string} compareValue Key in the object on which the comparing will be done.\n * @return {Object} Maximum point.\n */\nconst getMaxPoint = (points, compareValue) => getExtremePoint(points, compareValue, 'max');\n\n/**\n * Gets the index of the closest value of the given value from the array.\n * @param {Array} arr Array of values\n * @param {number} value Value from which the nearest value will be calculated.\n * @param {string} side side property.\n * @return {number} index of the closest value\n */\n/* istanbul ignore next */const getClosestIndexOf = (arr, value, side) => {\n let low = 0;\n const arrLen = arr.length;\n let high = arrLen - 1;\n\n let mid;\n let d1;\n let d2;\n\n while (low < high) {\n mid = Math.floor((low + high) / 2);\n d1 = Math.abs(arr[mid] - value);\n d2 = Math.abs(arr[mid + 1] - value);\n\n if (d2 <= d1) {\n low = mid + 1;\n } else {\n high = mid;\n }\n }\n\n if (!side) {\n return high;\n }\n\n const highVal = arr[high];\n if (highVal === value) {\n return high;\n } else if (highVal > value) {\n if (high === 0) { return high; }\n return side === 'left' ? high - 1 : high;\n }\n if (high === arr.length - 1) { return high; }\n return side === 'left' ? high : high + 1;\n};\n\n/**\n * Returns the browser window object\n * @return {Window} Window object\n*/\nconst getWindow = () => window;\n\n/**\n * Returns the browser window object\n * @return {Window} Window object\n*/\nconst reqAnimFrame = (() => requestAnimationFrame)();\n\nconst cancelAnimFrame = (() => cancelAnimationFrame)();\n\n/**\n * Capitalizes the first letter of the word\n * @param {string} text word\n * @return {string} Capitalized word\n */\nconst capitalizeFirst = (text) => {\n text = text.toLowerCase();\n\n return text.replace(/\\w\\S*/g, txt => txt.charAt(0).toUpperCase() + txt.substr(1));\n};\n\n/**\n *\n *\n * @param {*} arr\n */\nconst unique = arr => ([...new Set(arr)]);\n\n/**\n * Gets the minimum difference between two consecutive numbers in an array.\n * @param {Array} arr Array of numbers\n * @param {number} index index of the value\n * @return {number} minimum difference between values\n */\n/* istanbul ignore next */ const getMinDiff = (arr, index) => {\n let diff;\n let uniqueVals;\n if (index !== undefined) {\n uniqueVals = unique(arr.map(d => d[index]));\n } else {\n uniqueVals = unique(arr);\n }\n if (uniqueVals.length > 1) {\n diff = Math.abs(uniqueVals[1] - uniqueVals[0]);\n for (let i = 2, len = uniqueVals.length; i < len; i++) {\n diff = Math.min(diff, Math.abs(uniqueVals[i] - uniqueVals[i - 1]));\n }\n } else {\n diff = uniqueVals[0];\n }\n\n return diff;\n};\n\n/**\n * Returns the class name appended with a given id.\n * @param {string} cls class name\n * @param {string} id unique identifier\n * @param {string} prefix string needed to add before the classname\n * @return {string} qualified class name\n */\n/* istanbul ignore next */const getQualifiedClassName = (cls, id, prefix) => {\n cls = cls.replace(/^\\.*/, '');\n return [`${prefix}-${cls}`, `${prefix}-${cls}-${id}`];\n};\n\n/**\n * This method is used to set the default value for variables\n * without sullying the code with conditional statements.\n *\n * @export\n * @param {any} param The parameter to test.\n * @param {any} value The default value to assign.\n * @return {any} The value.\n */\n/* istanbul ignore next */ const defaultValue = (param, value) => {\n if (typeof param === 'undefined' || (typeof param === 'object' && !param)) {\n return value;\n }\n return param;\n};\n\n/**\n * DESCRIPTION TODO\n * @todo\n *\n * @export\n * @param {Object} graph graph whose dependency order has to be generated\n * @return {Object} @todo\n */\nconst getDependencyOrder = (graph) => {\n const dependencyOrder = [];\n const visited = {};\n const keys = Object.keys(graph);\n /**\n * DESCRIPTION TODO\n * @todo\n *\n * @export\n * @param {Object} name @todo\n * @return {Object} @todo\n */\n const visit = (name) => {\n if (dependencyOrder.length === keys.length) {\n return true;\n }\n visited[name] = true;\n const edges = graph[name];\n for (let e = 0; e < edges.length; e++) {\n const dep = edges[e];\n if (!visited[dep]) {\n visit(dep);\n }\n }\n\n dependencyOrder.push(name);\n return false;\n };\n\n for (let i = 0; i < keys.length; i++) {\n if (visit(keys[i], i)) break;\n }\n\n return dependencyOrder;\n};\n\n/**\n * Iterates over the properties of an object and applies the function\n *\n * @param {any} obj object to be iterated upon\n * @param {any} fn function to be applied on it\n */\nconst objectIterator = (obj, fn) => {\n for (const key in obj) {\n if (Object.hasOwnProperty.call(obj, key)) {\n fn(key, obj);\n }\n }\n};\n\n/**\n * This class creates a d3 voronoi for retrieving the nearest neighbour of any point from a set of two\n * dimensional points\n * @class Voronoi\n */\n/* istanbul ignore next */ class Voronoi {\n /**\n * Initialize the voronoi with the data given.\n * @param {Array.} data Array of points.\n */\n constructor (data) {\n this._voronoi = voronoi().x(d => d.x).y(d => d.y);\n this.data(data);\n }\n\n /**\n * Sets the data to voronoi\n * @param {Array.} data Array of objects.\n * @return {Voronoi} Instance of voronoi.\n */\n data (data) {\n if (data) {\n this._voronoiFn = this._voronoi(data);\n }\n return this;\n }\n\n /**\n * Finds the closest point to the x and y position given.\n * @param {number} x x value\n * @param {number} y y value\n * @param {number} radius search radius.\n * @return {Object} Details of the nearest point.\n */\n find (x, y, radius) {\n return this._voronoiFn.find(x, y, radius);\n }\n}\n\n/**\n * Methods to handle changes to table configuration and reactivity are handled by this\n * class.\n */\n/**\n * Common store class\n *\n * @class Store\n */\nclass Store {\n /**\n * Creates an instance of Store.\n * @param {Object} config The object to create the state store with.\n * @memberof Store\n */\n constructor (config) {\n // create reactive model\n this.model = Model.create(config);\n this._listeners = [];\n }\n\n /**\n * This method returns a plain JSON object\n * with all the fields in the state store.\n *\n * @return {Object} Serialized representation of state store.\n * @memberof Store\n */\n serialize () {\n return this.model.serialize();\n }\n\n /**\n * This method is used to update the value of a property in the state store.\n *\n * @param {string} propName The name of the property.\n * @param {number} value The new value of the property.\n * @memberof Store\n */\n commit (propName, value) {\n // check if appropriate enum has been used\n this.model.prop(propName, value);\n }\n\n /**\n * This method is used to register a callbacl that will execute\n * when one or more properties change.\n *\n * @param {string | Array} propNames name of property or array of props.\n * @param {Function} callBack The callback to execute.\n * @memberof Store\n */\n /* istanbul ignore next */registerChangeListener (propNames, callBack, instantCall) {\n let props = propNames;\n if (!Array.isArray(propNames)) {\n props = [propNames];\n }\n const fn = this.model.next(props, callBack, instantCall);\n this._listeners.push(fn);\n return this;\n }\n /**\n * This method is used to register a callbacl that will execute\n * when one or more properties change.\n *\n * @param {string | Array} propNames name of property or array of props.\n * @param {Function} callBack The callback to execute.\n * @memberof Store\n */\n /* istanbul ignore next */ registerImmediateListener (propNames, callBack, instantCall) {\n let props = propNames;\n if (!Array.isArray(propNames)) {\n props = [propNames];\n }\n const fn = this.model.on(props, callBack, instantCall);\n this._listeners.push(fn);\n return this;\n }\n /**\n * This method is used to get the name of the property\n * from the state store.\n *\n * @param {string} propName The name of the field in state store.\n * @return {any} The value of the field.\n * @memberof Store\n */\n get (propName) {\n return this.model.prop(propName);\n }\n\n /**\n * This method is used to register a computed property that is computed every time\n * the store value changes.\n *\n * @param {string} propName The name of the property to create.\n * @param {Function} callBack The function to execute when depemdent props change.\n * @memberof Store\n */\n computed (propName, callBack) {\n return this.model.calculatedProp(propName, callBack);\n }\n\n unsubscribeAll () {\n this._listeners.forEach(fn => fn());\n }\n}\n\n/**\n * Sanitize an input number / string mixed number. Currently dot in the no is not supported.\n *\n * @param {number | string} val pure number or string mixed number\n * @return {number | null} Number if it can be extracted. Otherwise null\n */\nconst intSanitizer = (val) => {\n const arr = val.toString().match(/(\\d+)(px)*/g);\n if (!arr) {\n // If only characters are passed\n return null;\n }\n\n return parseInt(arr[0], 10);\n};\n\n/**\n * Setter getter creator from config\n * Format\n * PROPERTRY_NAME: {\n * value: // default value of the property,\n * meta: {\n * typeCheck: // The setter value will be checked using this. If the value is function then the setter value\n * // is passed as args. (Optional)\n * typeExpected: // The output of typecheck action will be tested against this. Truthy value will set the\n * // value to the setter\n * sanitizaiton: // Need for sanitization before type is checked\n * }\n * }\n *\n * @param {Object} holder an empty object on which the getters and setters will be mounted\n * @param {Object} options options config based on which the getters and setters are determined.\n * @param {Hyperdis} model optional model to attach the property. If not sent new moel is created.\n * @return {Array} @todo\n */\nconst transactor = (holder, options, model) => {\n let conf;\n const store = model && model instanceof Model ? model : Model.create({});\n\n for (const prop in options) {\n if ({}.hasOwnProperty.call(options, prop)) {\n conf = options[prop];\n if (!store.prop(prop)) {\n store.append({ [prop]: conf.value });\n }\n holder[prop] = ((context, key, meta) => (...params) => {\n let val;\n let compareTo;\n const paramsLen = params.length;\n const prevVal = store.prop(prop);\n if (paramsLen) {\n // If parameters are passed then it's a setter\n const spreadParams = meta && meta.spreadParams;\n val = params;\n const values = [];\n if (meta) {\n for (let i = 0; i < paramsLen; i++) {\n val = params[i];\n const sanitization = meta.sanitization && (spreadParams ? meta.sanitization[i] :\n meta.sanitization);\n const typeCheck = meta.typeCheck && (spreadParams ? meta.typeCheck[i] : meta.typeCheck);\n if (sanitization && typeof sanitization === 'function') {\n // Sanitize if required\n val = sanitization(val, prevVal, holder);\n }\n\n if (typeCheck) {\n // Checking if a setter is valid\n if (typeof typeCheck === 'function') {\n let typeExpected = meta.typeExpected;\n if (typeExpected && spreadParams) {\n typeExpected = typeExpected[i];\n }\n if (typeExpected) {\n compareTo = typeExpected;\n } else {\n compareTo = true;\n }\n\n if (typeCheck(val) === compareTo) {\n values.push(val);\n }\n } else if (typeof typeCheck === 'string') {\n if (typeCheck === 'constructor') {\n const typeExpected = spreadParams ? meta.typeExpected[i] : meta.typeExpected;\n if (val && (val.constructor.name === typeExpected)) {\n values.push(val);\n }\n }\n } else {\n // context.prop(key, val);\n values.push(val);\n }\n } else {\n values.push(val);\n }\n }\n const preset = meta.preset;\n const oldValues = context.prop(key);\n preset && preset(values[0], holder);\n if (spreadParams) {\n oldValues.forEach((value, i) => {\n if (values[i] === undefined) {\n values[i] = value;\n }\n });\n }\n values.length && context.prop(key, spreadParams ? values : values[0]);\n } else {\n context.prop(key, spreadParams ? val : val[0]);\n }\n return holder;\n }\n // No parameters are passed hence its a getter\n return context.prop(key);\n })(store, prop, conf.meta);\n }\n }\n\n return [holder, store];\n};\n\n/**\n *\n *\n * @param {*} context\n * @param {*} props\n */\nconst generateGetterSetters = (context, props) => {\n Object.entries(props).forEach((propInfo) => {\n const prop = propInfo[0];\n const typeChecker = propInfo[1].typeChecker;\n const sanitization = propInfo[1].sanitization;\n const prototype = context.constructor.prototype;\n if (!(Object.hasOwnProperty.call(prototype, prop))) {\n context[prop] = (...params) => {\n if (params.length) {\n let value = params[0];\n if (sanitization) {\n value = sanitization(context, params[0]);\n }\n if (typeChecker && !typeChecker(value)) {\n return context[`_${prop}`];\n }\n context[`_${prop}`] = value;\n return context;\n } return context[`_${prop}`];\n };\n }\n });\n};\n\n/**\n *\n *\n * @param {*} arr\n * @param {*} prop\n */\nconst getArraySum = (arr, prop) => arr.reduce((total, elem) => {\n total += prop ? elem[prop] : elem;\n return total;\n}, 0);\n\n/**\n *\n *\n * @param {*} arr1\n * @param {*} arr2\n * @returns\n */\nconst arraysEqual = (arr1, arr2) => {\n if (arr1.length !== arr2.length) { return false; }\n for (let i = arr1.length; i >= 0; i--) {\n if (arr1[i] !== arr2[i]) { return false; }\n }\n\n return true;\n};\n\n/* eslint valid-typeof:0 */\n/**\n * Returns a validation function which can be used to validate variables against a type and value\n *\n * @param {any} type type of value that the object should have\n * @return {Object} validation function\n */\nconst isEqual = type => (oldVal, newVal) => {\n if (type === 'Array') {\n if (!oldVal) {\n return false;\n }\n return arraysEqual(oldVal, newVal);\n } else if (type === 'Object') {\n return Object.is(oldVal, newVal);\n } return oldVal === newVal;\n};\n\n/**\n * Description @todo\n *\n * @param {any} transactionModel @todo\n * @param {any} transactionEndpoint @todo\n * @param {any} transactionItems @todo\n * @return {any} @todo\n */\nconst enableChainedTransaction = (transactionModel, transactionEndpoint, transactionItems) =>\n transactionItems.forEach(item => transactionModel.on(item, ([, newVal]) => transactionEndpoint[item](newVal)));\n\n/**\n * Chceks if the element is istanceof HTMLElement\n *\n * @param {Object} elem any JS Object\n */\nconst isHTMLElem = elem => elem instanceof HTMLElement;\n\nconst ERROR_MSG = {\n INTERFACE_IMPL: 'Method not implemented'\n};\n\n/**\n * Merges the sink object in the source by recursively iterating through the object properties\n * @param {Object} source Source Object\n * @param {Object} sink Sink Object\n * @return {Object} Merged object\n */\nconst mergeRecursive = (source, sink) => {\n for (const prop in sink) {\n if (isSimpleObject(source[prop]) && isSimpleObject(sink[prop])) {\n mergeRecursive(source[prop], sink[prop]);\n } else if (sink[prop] instanceof Object && sink[prop].constructor === Object) {\n source[prop] = {};\n mergeRecursive(source[prop], sink[prop]);\n } else {\n source[prop] = sink[prop];\n }\n }\n return source;\n};\n\nconst interpolateArray = (data, fitCount) => {\n const linearInterpolate = function (before, after, atPoint) {\n return before + (after - before) * atPoint;\n };\n const newData = [];\n const springFactor = ((data.length - 1) / (fitCount - 1));\n newData[0] = data[0]; // for new allocation\n for (let i = 1; i < fitCount - 1; i++) {\n const tmp = i * springFactor;\n const before = (Math.floor(tmp)).toFixed();\n const after = (Math.ceil(tmp)).toFixed();\n const atPoint = tmp - before;\n newData[i] = linearInterpolate(data[before], data[after], atPoint);\n }\n newData[fitCount - 1] = data[data.length - 1]; // for new allocation\n return newData;\n};\n\n/**\n *\n *\n * @param {*} fn\n */\nconst nextFrame = (fn) => {\n setTimeout(() => {\n fn();\n }, 0);\n};\n\n/**\n *\n *\n * @param {*} angle\n */\nconst angleToRadian = angle => angle * Math.PI / 180;\n\n/**\n *\n *\n * @param {*} newName\n * @param {*} oldName\n */\nconst replaceCSSPrefix = () => {\n // @todo\n};\n\n/**\n * Gets the interpolator function from d3 color\n *\n */\nconst interpolator = () => interpolate;\n\n/**\n * Gets the number interpolator from d3 color\n *\n */\nconst numberInterpolator = () => interpolateNumber;\n\n/**\n * Gets the rgb interpolator from d3 color\n *\n */\nconst colorInterpolator = () => interpolateRgb;\n\n/**\n * Gets the hsl interpolator from d3 color\n *\n */\nconst hslInterpolator = () => interpolateHslLong;\n\nconst transformColors = () => ({\n color,\n rgb,\n hsl\n});\n\n/**\n * Gets the piecewise interpolator from d3 color\n *\n */\nconst piecewiseInterpolator = () => piecewise;\n\nfunction hue2rgb (p, q, t) {\n if (t < 0) t += 1;\n if (t > 1) t -= 1;\n if (t < 1 / 6) return p + (q - p) * 6 * t;\n if (t < 1 / 2) return q;\n if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n return p;\n}\n\n /**\n * Converts an HSL color value to RGB. Conversion formula\n * adapted from http://en.wikipedia.org/wiki/HSL_color_space.\n * Assumes h, s, and l are contained in the set [0, 1] and\n * returns r, g, and b in the set [0, 255].\n *\n * @param Number h The hue\n * @param Number s The saturation\n * @param Number l The lightness\n * @return Array The RGB representation\n */\nconst hslToRgb = (h, s, l, a = 1) => {\n let r;\n let g;\n let b;\n\n if (s === 0) {\n r = g = b = l; // achromatic\n } else {\n const q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n const p = 2 * l - q;\n\n r = hue2rgb(p, q, h + 1 / 3);\n g = hue2rgb(p, q, h);\n b = hue2rgb(p, q, h - 1 / 3);\n }\n\n return [r * 255, g * 255, b * 255, a];\n};\n\n /**\n * Converts an RGB color value to HSV. Conversion formula\n * adapted from http://en.wikipedia.org/wiki/HSV_color_space.\n * Assumes r, g, and b are contained in the set [0, 255] and\n * returns h, s, and v in the set [0, 1].\n *\n * @param Number r The red color value\n * @param Number g The green color value\n * @param Number b The blue color value\n * @return Array The HSV representation\n */\nconst rgbToHsv = (r, g, b, a = 1) => {\n r = +r; g = +g; b = +b; a = +a;\n r /= 255; g /= 255; b /= 255;\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n let h;\n let s;\n const l = (max + min) / 2;\n\n if (max === min) {\n h = s = 0; // achromatic\n } else {\n const d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n switch (max) {\n case r: h = (g - b) / d + (g < b ? 6 : 0); break;\n case g: h = (b - r) / d + 2; break;\n case b: h = (r - g) / d + 4; break;\n default: break;\n }\n h /= 6;\n }\n return [h, s, l, a];\n};\n\n /**\n * Converts an HSV color value to RGB. Conversion formula\n * adapted from http://en.wikipedia.org/wiki/HSV_color_space.\n * Assumes h, s, and v are contained in the set [0, 1] and\n * returns r, g, and b in the set [0, 255].\n *\n * @param Number h The hue\n * @param Number s The saturation\n * @param Number v The value\n * @return Array The RGB representation\n */\nconst hsvToRgb = (h, s, v, a = 1) => {\n let r;\n let g;\n let b;\n\n const i = Math.floor(h * 6);\n const f = h * 6 - i;\n const p = v * (1 - s);\n const q = v * (1 - f * s);\n const t = v * (1 - (1 - f) * s);\n\n switch (i % 6) {\n case 0: r = v; g = t; b = p; break;\n case 1: r = q; g = v; b = p; break;\n case 2: r = p; g = v; b = t; break;\n case 3: r = p; g = q; b = v; break;\n case 4: r = t; g = p; b = v; break;\n case 5: r = v; g = p; b = q; break;\n default: break;\n }\n\n return [r * 255, g * 255, b * 255, a];\n};\n\nconst hexToHsv = (hex) => {\n const result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\n\n const r = parseInt(result[1], 16);\n const g = parseInt(result[2], 16);\n const b = parseInt(result[3], 16);\n const a = result[4] ? parseInt(result[4], 16) : 1;\n return rgbToHsv(r, g, b, a);\n};\n\nconst detectColor = (col) => {\n const matchRgb = /rgb\\((\\d{1,3}), (\\d{1,3}), (\\d{1,3})\\)/;\n const matchHsl = /hsl\\((\\d+),\\s*([\\d.]+)%,\\s*([\\d.]+)%\\)/g;\n\n // Source : https://gist.github.com/sethlopezme/d072b945969a3cc2cc11\n // eslint-disable-next-line\n const matchRgba = /rgba?\\(((25[0-5]|2[0-4]\\d|1\\d{1,2}|\\d\\d?)\\s*,\\s*?){2}(25[0-5]|2[0-4]\\d|1\\d{1,2}|\\d\\d?)\\s*,?\\s*([01]\\.?\\d*?)?\\)/;\n // eslint-disable-next-line\n const matchHsla = /^hsla\\((0|360|35\\d|3[0-4]\\d|[12]\\d\\d|0?\\d?\\d),(0|100|\\d{1,2})%,(0|100|\\d{1,2})%,(0?\\.\\d|1(\\.0)?)\\)$/;\n const matchHex = /^#([0-9a-f]{3}){1,2}$/i;\n\n if (matchRgb.test(col) || matchRgba.test(col)) {\n return 'rgb';\n } else if (matchHsl.test(col) || matchHsla.test(col)) {\n return 'hsl';\n } else if (matchHex.test(col)) {\n return 'hex';\n } return col;\n};\n\n/**\n *\n *\n * @param {*} model\n * @param {*} propModel\n * @returns\n */\nconst filterPropagationModel = (model, propModel, measures) => {\n const { data, schema } = propModel.getData();\n let filteredModel;\n if (schema.length) {\n const fieldMap = model.getFieldsConfig();\n filteredModel = model.select((fields) => {\n const include = data.some(row => schema.every((propField, idx) => {\n if (!measures && (!(propField.name in fieldMap) ||\n fieldMap[propField.name].def.type === FieldType.MEASURE)) {\n return true;\n }\n return row[idx] === fields[propField.name].valueOf();\n }));\n return include;\n }, {\n saveChild: false\n });\n } else {\n filteredModel = propModel;\n }\n\n return filteredModel;\n};\n\nconst assembleModelFromIdentifiers = (model, identifiers) => {\n let schema = [];\n let data;\n const fieldMap = model.getFieldsConfig();\n if (identifiers.length) {\n const fields = identifiers[0];\n const len = fields.length;\n for (let i = 0; i < len; i++) {\n const field = fields[i];\n const fieldObj = fieldMap[field] && Object.assign({}, fieldMap[field].def);\n if (fieldObj) {\n schema.push(Object.assign(fieldObj));\n }\n }\n\n data = [];\n const header = identifiers[0];\n for (let i = 1; i < identifiers.length; i += 1) {\n const vals = identifiers[i];\n const temp = {};\n vals.forEach((fieldVal, cIdx) => {\n temp[header[cIdx]] = fieldVal;\n });\n data.push(temp);\n }\n } else {\n data = [];\n schema = [];\n }\n\n return new model.constructor(data, schema);\n};\n\n/**\n *\n *\n * @param {*} dataModel\n * @param {*} criteria\n * @returns\n */\nconst getDataModelFromRange = (dataModel, criteria, mode) => {\n if (criteria === null) {\n return null;\n }\n const selFields = Object.keys(criteria);\n const selFn = fields => selFields.every((field) => {\n const val = fields[field].value;\n const range = criteria[field][0] instanceof Array ? criteria[field][0] : criteria[field];\n if (typeof range[0] === 'string') {\n return range.find(d => d === val) !== undefined;\n }\n return range ? val >= range[0] && val <= range[1] : true;\n });\n\n return dataModel.select(selFn, {\n saveChild: false,\n mode\n });\n};\n\n/**\n *\n *\n * @param {*} dataModel\n * @param {*} identifiers\n * @returns\n */\nconst getDataModelFromIdentifiers = (dataModel, identifiers, mode) => {\n let filteredDataModel;\n if (identifiers instanceof Array) {\n const fieldsConfig = dataModel.getFieldsConfig();\n\n const dataArr = identifiers.slice(1, identifiers.length);\n if (identifiers instanceof Function) {\n filteredDataModel = identifiers(dataModel, {}, false);\n } else if (identifiers instanceof Array && identifiers[0].length) {\n const filteredSchema = identifiers[0].filter(d => d in fieldsConfig);\n filteredDataModel = dataModel.select((fields) => {\n let include = true;\n filteredSchema.forEach((propField, idx) => {\n const value = fields[propField].valueOf();\n const index = dataArr.findIndex(d => d[idx] === value);\n include = include && index !== -1;\n });\n return include;\n }, {\n saveChild: false,\n mode\n });\n }\n } else {\n filteredDataModel = getDataModelFromRange(dataModel, identifiers, mode);\n }\n return filteredDataModel;\n};\n\n/**\n *\n *\n * @param {*} context\n * @param {*} listenerMap\n */\nconst registerListeners = (context, listenerMap) => {\n const propListenerMap = listenerMap(context);\n for (const key in propListenerMap) {\n if ({}.hasOwnProperty.call(propListenerMap, key)) {\n const mapObj = propListenerMap[key];\n const propType = mapObj.type;\n const props = mapObj.props;\n const listenerFn = mapObj.listener;\n context.store()[propType](props, listenerFn);\n }\n }\n};\n\nconst isValidValue = value => !isNaN(value) && value !== -Infinity && value !== Infinity;\n/**\n *\n *\n * @param {*} obj\n * @param {*} fields\n * @returns\n */\nconst getObjProp = (obj, ...fields) => {\n if (obj === undefined || obj === null) {\n return obj;\n }\n let retObj = obj;\n for (let i = 0, len = fields.length; i < len; i++) {\n retObj = retObj[fields[i]];\n if (retObj === undefined || retObj === null) {\n break;\n }\n }\n return retObj;\n};\n\n/**\n *\n *\n * @param {*} str\n * @returns\n */\nconst escapeHTML = (str) => {\n const htmlEscapes = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": ''',\n '/': '/'\n };\n const htmlEscaper = /[&<>\"'/]/g;\n return (`${str}`).replace(htmlEscaper, match => htmlEscapes[match]);\n};\n\n/**\n *\n *\n * @param {*} arr\n */\nconst transposeArray = arr => arr[0].map((col, i) => arr.map(row => row[i]));\nconst toArray = arr => (arr instanceof Array ? arr : [arr]);\nconst extendsClass = (cls, extendsFrom, found) => {\n if (!cls) {\n return false;\n }\n const prototype = cls.prototype;\n if (prototype instanceof extendsFrom) {\n found = true;\n } else {\n found = extendsClass(prototype, extendsFrom, found);\n }\n return found;\n};\n\n/**\n *\n * @param {*} dm1\n * @param {*} dm2\n */\nconst concatModels = (dm1, dm2) => {\n const dataObj1 = dm1.getData();\n const dataObj2 = dm2.getData();\n const data1 = dataObj1.data;\n const data2 = dataObj2.data;\n const schema1 = dataObj1.schema;\n const schema2 = dataObj2.schema;\n const tuples1 = {};\n const tuples2 = {};\n const commonTuples = {};\n for (let i = 0; i < data1.length; i++) {\n for (let ii = 0; ii < data2.length; ii++) {\n const row1 = data1[i];\n const row2 = data2[ii];\n const dim1Values = row1.filter((d, idx) => schema1[idx].type === FieldType.DIMENSION);\n const dim2Values = row2.filter((d, idx) => schema2[idx].type === FieldType.DIMENSION);\n const allDimSame = dim1Values.every(value => dim2Values.indexOf(value) !== -1);\n if (allDimSame) {\n const key = dim1Values.join();\n !commonTuples[key] && (commonTuples[key] = {});\n row1.forEach((value, idx) => {\n commonTuples[key][schema1[idx].name] = value;\n });\n row2.forEach((value, idx) => {\n commonTuples[key][schema2[idx].name] = value;\n });\n } else {\n const dm1Key = dim1Values.join();\n const dm2Key = dim2Values.join();\n if (!commonTuples[dm1Key] && !commonTuples[dm2Key]) {\n !tuples1[dm1Key] && (tuples1[dm1Key] = {});\n !tuples2[dm2Key] && (tuples2[dm2Key] = {});\n row1.forEach((value, idx) => {\n tuples1[dm1Key][schema1[idx].name] = value;\n });\n row2.forEach((value, idx) => {\n tuples2[dm2Key][schema2[idx].name] = value;\n });\n }\n }\n }\n }\n\n const commonSchema = [...schema1, ...schema2.filter(s2 => schema1.findIndex(s1 => s1.name === s2.name) === -1)];\n const data = [...Object.values(tuples1), ...Object.values(tuples2), ...Object.values(commonTuples)];\n return [data, commonSchema];\n};\n\nconst getSymbol = type => symbol().type(symbolFns[type]);\n\nconst stackOrders = {\n [STACK_CONFIG.ORDER_NONE]: stackOrderNone,\n [STACK_CONFIG.ORDER_ASCENDING]: stackOrderAscending,\n [STACK_CONFIG.ORDER_DESCENDING]: stackOrderDescending\n};\nconst stackOffsets = {\n [STACK_CONFIG.OFFSET_DIVERGING]: stackOffsetDiverging,\n [STACK_CONFIG.OFFSET_NONE]: stackOffsetNone,\n [STACK_CONFIG.OFFSET_EXPAND]: stackOffsetExpand,\n [STACK_CONFIG.OFFSET_WIGGLE]: stackOffsetWiggle\n};\n\n// eslint-disable-next-line require-jsdoc\nconst stack = params => d3Stack().keys(params.keys).offset(stackOffsets[params.offset])\n .order(stackOrders[params.order])(params.data);\n\n/**\n * Groups the data into a hierarchical tree structure based on one or more fields.\n * @param { Object } params Configuration properties for nesting data\n * @param { Array. } params.data Data which needs to be grouped\n * @param { Array. } params.keys Field indices by which the data will be grouped\n * @return { Array. } Grouped data array\n */\nconst nestCollection = (params) => {\n const nestFn = nest();\n params.keys.forEach(key => nestFn.key(d => d[key]));\n return nestFn.entries(params.data);\n};\n\nconst pathInterpolators = {\n curveLinear,\n curveStepAfter,\n curveStepBefore,\n curveStep,\n curveCatmullRom,\n stepAfter: curveStepAfter,\n catmullRom: curveCatmullRom,\n step: curveStep,\n stepBefore: curveStepBefore,\n linear: curveLinear\n};\n\nconst Symbols = {\n axisLeft,\n axisRight,\n axisTop,\n axisBottom,\n line,\n area,\n pie,\n arc,\n nest\n};\n\nconst Scales = {\n band: scaleBand\n};\n\nconst getSmallestDiff = (points) => {\n points = points.sort((a, b) => a - b);\n let minDiff = points[1] - points[0];\n for (let i = 2; i < points.length; i++) {\n minDiff = Math.min(minDiff, points[i] - points[i - 1]);\n }\n\n return minDiff;\n};\n\nconst require = (lookupWhat, lookupDetails) => ({\n resolvable: (store) => {\n const lookupTarget = store[lookupWhat];\n const depArr = lookupDetails.slice(0, lookupDetails.length - 1);\n const fn = lookupDetails[lookupDetails.length - 1]; // fn\n\n const deps = depArr.map(str => lookupTarget[str]);\n return {\n fn: fn(...deps),\n depArr\n };\n }\n});\n\nconst nextAnimFrame = window.requestAnimationFrame || window.webkitRequestAnimationFrame ||\n window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame ||\n function (callback) {\n setTimeout(callback, 16);\n };\n\nexport {\n require,\n Scales,\n Symbols,\n pathInterpolators,\n stack,\n nestCollection,\n getSymbol,\n transformColors,\n detectColor,\n hexToHsv,\n hslToRgb,\n rgbToHsv,\n hsvToRgb,\n concatModels,\n toArray,\n angleToRadian,\n escapeHTML,\n generateGetterSetters,\n getArraySum,\n interpolator,\n piecewiseInterpolator,\n getDataModelFromIdentifiers,\n getDataModelFromRange,\n colorInterpolator,\n numberInterpolator,\n ERROR_MSG,\n reqAnimFrame,\n nextAnimFrame,\n filterPropagationModel,\n transposeArray,\n cancelAnimFrame,\n getMax,\n getMin,\n getDomainFromData,\n getUniqueId,\n mergeRecursive,\n unionDomain,\n symbolFns,\n easeFns,\n clone,\n isEqual,\n interpolateArray,\n getMinPoint,\n defaultValue,\n getMaxPoint,\n getClosestIndexOf,\n Voronoi,\n checkExistence,\n sanitizeIP,\n getMinDiff,\n capitalizeFirst,\n getWindow,\n getQualifiedClassName,\n Store,\n getDependencyOrder,\n objectIterator,\n intSanitizer,\n transactor,\n enableChainedTransaction,\n isHTMLElem,\n isSimpleObject,\n nextFrame,\n registerListeners,\n replaceCSSPrefix,\n getObjProp,\n extendsClass,\n assembleModelFromIdentifiers,\n isValidValue,\n hslInterpolator,\n getSmallestDiff\n};\n","export function linear(t) {\n return +t;\n}\n","export function circleIn(t) {\n return 1 - Math.sqrt(1 - t * t);\n}\n\nexport function circleOut(t) {\n return Math.sqrt(1 - --t * t);\n}\n\nexport function circleInOut(t) {\n return ((t *= 2) <= 1 ? 1 - Math.sqrt(1 - t * t) : Math.sqrt(1 - (t -= 2) * t) + 1) / 2;\n}\n","import {path} from \"d3-path\";\nimport circle from \"./symbol/circle\";\nimport cross from \"./symbol/cross\";\nimport diamond from \"./symbol/diamond\";\nimport star from \"./symbol/star\";\nimport square from \"./symbol/square\";\nimport triangle from \"./symbol/triangle\";\nimport wye from \"./symbol/wye\";\nimport constant from \"./constant\";\n\nexport var symbols = [\n circle,\n cross,\n diamond,\n square,\n star,\n triangle,\n wye\n];\n\nexport default function() {\n var type = constant(circle),\n size = constant(64),\n context = null;\n\n function symbol() {\n var buffer;\n if (!context) context = buffer = path();\n type.apply(this, arguments).draw(context, +size.apply(this, arguments));\n if (buffer) return context = null, buffer + \"\" || null;\n }\n\n symbol.type = function(_) {\n return arguments.length ? (type = typeof _ === \"function\" ? _ : constant(_), symbol) : type;\n };\n\n symbol.size = function(_) {\n return arguments.length ? (size = typeof _ === \"function\" ? _ : constant(+_), symbol) : size;\n };\n\n symbol.context = function(_) {\n return arguments.length ? (context = _ == null ? null : _, symbol) : context;\n };\n\n return symbol;\n}\n","export const ORDER_ASCENDING = 'ascending';\nexport const ORDER_DESCENDING = 'descending';\nexport const ORDER_NONE = 'none';\nexport const OFFSET_DIVERGING = 'diverging';\nexport const OFFSET_NONE = 'none';\nexport const OFFSET_EXPAND = 'expand';\nexport const OFFSET_WIGGLE = 'wiggle';\n","import ascending from \"./ascending\";\n\nexport default function(series) {\n return ascending(series).reverse();\n}\n","export default function(series, order) {\n if (!((n = series.length) > 1)) return;\n for (var i, j = 0, d, dy, yp, yn, n, m = series[order[0]].length; j < m; ++j) {\n for (yp = yn = 0, i = 0; i < n; ++i) {\n if ((dy = (d = series[order[i]][j])[1] - d[0]) >= 0) {\n d[0] = yp, d[1] = yp += dy;\n } else if (dy < 0) {\n d[1] = yn, d[0] = yn += dy;\n } else {\n d[0] = yp;\n }\n }\n }\n}\n","import none from \"./none\";\n\nexport default function(series, order) {\n if (!((n = series.length) > 0)) return;\n for (var i, n, j = 0, m = series[0].length, y; j < m; ++j) {\n for (y = i = 0; i < n; ++i) y += series[i][j][1] || 0;\n if (y) for (i = 0; i < n; ++i) series[i][j][1] /= y;\n }\n none(series, order);\n}\n","import none from \"./none\";\n\nexport default function(series, order) {\n if (!((n = series.length) > 0) || !((m = (s0 = series[order[0]]).length) > 0)) return;\n for (var y = 0, j = 1, s0, m, n; j < m; ++j) {\n for (var i = 0, s1 = 0, s2 = 0; i < n; ++i) {\n var si = series[order[i]],\n sij0 = si[j][1] || 0,\n sij1 = si[j - 1][1] || 0,\n s3 = (sij0 - sij1) / 2;\n for (var k = 0; k < i; ++k) {\n var sk = series[order[k]],\n skj0 = sk[j][1] || 0,\n skj1 = sk[j - 1][1] || 0;\n s3 += skj0 - skj1;\n }\n s1 += sij0, s2 += s3 * sij0;\n }\n s0[j - 1][1] += s0[j - 1][0] = y;\n if (s1) y -= s2 / s1;\n }\n s0[j - 1][1] += s0[j - 1][0] = y;\n none(series, order);\n}\n","import constant from \"./constant\";\nimport descending from \"./descending\";\nimport identity from \"./identity\";\nimport {tau} from \"./math\";\n\nexport default function() {\n var value = identity,\n sortValues = descending,\n sort = null,\n startAngle = constant(0),\n endAngle = constant(tau),\n padAngle = constant(0);\n\n function pie(data) {\n var i,\n n = data.length,\n j,\n k,\n sum = 0,\n index = new Array(n),\n arcs = new Array(n),\n a0 = +startAngle.apply(this, arguments),\n da = Math.min(tau, Math.max(-tau, endAngle.apply(this, arguments) - a0)),\n a1,\n p = Math.min(Math.abs(da) / n, padAngle.apply(this, arguments)),\n pa = p * (da < 0 ? -1 : 1),\n v;\n\n for (i = 0; i < n; ++i) {\n if ((v = arcs[index[i] = i] = +value(data[i], i, data)) > 0) {\n sum += v;\n }\n }\n\n // Optionally sort the arcs by previously-computed values or by data.\n if (sortValues != null) index.sort(function(i, j) { return sortValues(arcs[i], arcs[j]); });\n else if (sort != null) index.sort(function(i, j) { return sort(data[i], data[j]); });\n\n // Compute the arcs! They are stored in the original data's order.\n for (i = 0, k = sum ? (da - n * pa) / sum : 0; i < n; ++i, a0 = a1) {\n j = index[i], v = arcs[j], a1 = a0 + (v > 0 ? v * k : 0) + pa, arcs[j] = {\n data: data[j],\n index: i,\n value: v,\n startAngle: a0,\n endAngle: a1,\n padAngle: p\n };\n }\n\n return arcs;\n }\n\n pie.value = function(_) {\n return arguments.length ? (value = typeof _ === \"function\" ? _ : constant(+_), pie) : value;\n };\n\n pie.sortValues = function(_) {\n return arguments.length ? (sortValues = _, sort = null, pie) : sortValues;\n };\n\n pie.sort = function(_) {\n return arguments.length ? (sort = _, sortValues = null, pie) : sort;\n };\n\n pie.startAngle = function(_) {\n return arguments.length ? (startAngle = typeof _ === \"function\" ? _ : constant(+_), pie) : startAngle;\n };\n\n pie.endAngle = function(_) {\n return arguments.length ? (endAngle = typeof _ === \"function\" ? _ : constant(+_), pie) : endAngle;\n };\n\n pie.padAngle = function(_) {\n return arguments.length ? (padAngle = typeof _ === \"function\" ? _ : constant(+_), pie) : padAngle;\n };\n\n return pie;\n}\n","export var xhtml = \"http://www.w3.org/1999/xhtml\";\n\nexport default {\n svg: \"http://www.w3.org/2000/svg\",\n xhtml: xhtml,\n xlink: \"http://www.w3.org/1999/xlink\",\n xml: \"http://www.w3.org/XML/1998/namespace\",\n xmlns: \"http://www.w3.org/2000/xmlns/\"\n};\n","import namespaces from \"./namespaces\";\n\nexport default function(name) {\n var prefix = name += \"\", i = prefix.indexOf(\":\");\n if (i >= 0 && (prefix = name.slice(0, i)) !== \"xmlns\") name = name.slice(i + 1);\n return namespaces.hasOwnProperty(prefix) ? {space: namespaces[prefix], local: name} : name;\n}\n","import namespace from \"./namespace\";\nimport {xhtml} from \"./namespaces\";\n\nfunction creatorInherit(name) {\n return function() {\n var document = this.ownerDocument,\n uri = this.namespaceURI;\n return uri === xhtml && document.documentElement.namespaceURI === xhtml\n ? document.createElement(name)\n : document.createElementNS(uri, name);\n };\n}\n\nfunction creatorFixed(fullname) {\n return function() {\n return this.ownerDocument.createElementNS(fullname.space, fullname.local);\n };\n}\n\nexport default function(name) {\n var fullname = namespace(name);\n return (fullname.local\n ? creatorFixed\n : creatorInherit)(fullname);\n}\n","function none() {}\n\nexport default function(selector) {\n return selector == null ? none : function() {\n return this.querySelector(selector);\n };\n}\n","function empty() {\n return [];\n}\n\nexport default function(selector) {\n return selector == null ? empty : function() {\n return this.querySelectorAll(selector);\n };\n}\n","var matcher = function(selector) {\n return function() {\n return this.matches(selector);\n };\n};\n\nif (typeof document !== \"undefined\") {\n var element = document.documentElement;\n if (!element.matches) {\n var vendorMatches = element.webkitMatchesSelector\n || element.msMatchesSelector\n || element.mozMatchesSelector\n || element.oMatchesSelector;\n matcher = function(selector) {\n return function() {\n return vendorMatches.call(this, selector);\n };\n };\n }\n}\n\nexport default matcher;\n","export default function(update) {\n return new Array(update.length);\n}\n","import sparse from \"./sparse\";\nimport {Selection} from \"./index\";\n\nexport default function() {\n return new Selection(this._enter || this._groups.map(sparse), this._parents);\n}\n\nexport function EnterNode(parent, datum) {\n this.ownerDocument = parent.ownerDocument;\n this.namespaceURI = parent.namespaceURI;\n this._next = null;\n this._parent = parent;\n this.__data__ = datum;\n}\n\nEnterNode.prototype = {\n constructor: EnterNode,\n appendChild: function(child) { return this._parent.insertBefore(child, this._next); },\n insertBefore: function(child, next) { return this._parent.insertBefore(child, next); },\n querySelector: function(selector) { return this._parent.querySelector(selector); },\n querySelectorAll: function(selector) { return this._parent.querySelectorAll(selector); }\n};\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","import {Selection} from \"./index\";\nimport {EnterNode} from \"./enter\";\nimport constant from \"../constant\";\n\nvar keyPrefix = \"$\"; // Protect against keys like “__proto__”.\n\nfunction bindIndex(parent, group, enter, update, exit, data) {\n var i = 0,\n node,\n groupLength = group.length,\n dataLength = data.length;\n\n // Put any non-null nodes that fit into update.\n // Put any null nodes into enter.\n // Put any remaining data into enter.\n for (; i < dataLength; ++i) {\n if (node = group[i]) {\n node.__data__ = data[i];\n update[i] = node;\n } else {\n enter[i] = new EnterNode(parent, data[i]);\n }\n }\n\n // Put any non-null nodes that don’t fit into exit.\n for (; i < groupLength; ++i) {\n if (node = group[i]) {\n exit[i] = node;\n }\n }\n}\n\nfunction bindKey(parent, group, enter, update, exit, data, key) {\n var i,\n node,\n nodeByKeyValue = {},\n groupLength = group.length,\n dataLength = data.length,\n keyValues = new Array(groupLength),\n keyValue;\n\n // Compute the key for each node.\n // If multiple nodes have the same key, the duplicates are added to exit.\n for (i = 0; i < groupLength; ++i) {\n if (node = group[i]) {\n keyValues[i] = keyValue = keyPrefix + key.call(node, node.__data__, i, group);\n if (keyValue in nodeByKeyValue) {\n exit[i] = node;\n } else {\n nodeByKeyValue[keyValue] = node;\n }\n }\n }\n\n // Compute the key for each datum.\n // If there a node associated with this key, join and add it to update.\n // If there is not (or the key is a duplicate), add it to enter.\n for (i = 0; i < dataLength; ++i) {\n keyValue = keyPrefix + key.call(parent, data[i], i, data);\n if (node = nodeByKeyValue[keyValue]) {\n update[i] = node;\n node.__data__ = data[i];\n nodeByKeyValue[keyValue] = null;\n } else {\n enter[i] = new EnterNode(parent, data[i]);\n }\n }\n\n // Add any remaining nodes that were not bound to data to exit.\n for (i = 0; i < groupLength; ++i) {\n if ((node = group[i]) && (nodeByKeyValue[keyValues[i]] === node)) {\n exit[i] = node;\n }\n }\n}\n\nexport default function(value, key) {\n if (!value) {\n data = new Array(this.size()), j = -1;\n this.each(function(d) { data[++j] = d; });\n return data;\n }\n\n var bind = key ? bindKey : bindIndex,\n parents = this._parents,\n groups = this._groups;\n\n if (typeof value !== \"function\") value = constant(value);\n\n for (var m = groups.length, update = new Array(m), enter = new Array(m), exit = new Array(m), j = 0; j < m; ++j) {\n var parent = parents[j],\n group = groups[j],\n groupLength = group.length,\n data = value.call(parent, parent && parent.__data__, j, parents),\n dataLength = data.length,\n enterGroup = enter[j] = new Array(dataLength),\n updateGroup = update[j] = new Array(dataLength),\n exitGroup = exit[j] = new Array(groupLength);\n\n bind(parent, group, enterGroup, updateGroup, exitGroup, data, key);\n\n // Now connect the enter nodes to their following update node, such that\n // appendChild can insert the materialized enter node before this node,\n // rather than at the end of the parent node.\n for (var i0 = 0, i1 = 0, previous, next; i0 < dataLength; ++i0) {\n if (previous = enterGroup[i0]) {\n if (i0 >= i1) i1 = i0 + 1;\n while (!(next = updateGroup[i1]) && ++i1 < dataLength);\n previous._next = next || null;\n }\n }\n }\n\n update = new Selection(update, parents);\n update._enter = enter;\n update._exit = exit;\n return update;\n}\n","import {Selection} from \"./index\";\n\nexport default function(compare) {\n if (!compare) compare = ascending;\n\n function compareNode(a, b) {\n return a && b ? compare(a.__data__, b.__data__) : !a - !b;\n }\n\n for (var groups = this._groups, m = groups.length, sortgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, sortgroup = sortgroups[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n sortgroup[i] = node;\n }\n }\n sortgroup.sort(compareNode);\n }\n\n return new Selection(sortgroups, this._parents).order();\n}\n\nfunction ascending(a, b) {\n return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","import namespace from \"../namespace\";\n\nfunction attrRemove(name) {\n return function() {\n this.removeAttribute(name);\n };\n}\n\nfunction attrRemoveNS(fullname) {\n return function() {\n this.removeAttributeNS(fullname.space, fullname.local);\n };\n}\n\nfunction attrConstant(name, value) {\n return function() {\n this.setAttribute(name, value);\n };\n}\n\nfunction attrConstantNS(fullname, value) {\n return function() {\n this.setAttributeNS(fullname.space, fullname.local, value);\n };\n}\n\nfunction attrFunction(name, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.removeAttribute(name);\n else this.setAttribute(name, v);\n };\n}\n\nfunction attrFunctionNS(fullname, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.removeAttributeNS(fullname.space, fullname.local);\n else this.setAttributeNS(fullname.space, fullname.local, v);\n };\n}\n\nexport default function(name, value) {\n var fullname = namespace(name);\n\n if (arguments.length < 2) {\n var node = this.node();\n return fullname.local\n ? node.getAttributeNS(fullname.space, fullname.local)\n : node.getAttribute(fullname);\n }\n\n return this.each((value == null\n ? (fullname.local ? attrRemoveNS : attrRemove) : (typeof value === \"function\"\n ? (fullname.local ? attrFunctionNS : attrFunction)\n : (fullname.local ? attrConstantNS : attrConstant)))(fullname, value));\n}\n","export default function(node) {\n return (node.ownerDocument && node.ownerDocument.defaultView) // node is a Node\n || (node.document && node) // node is a Window\n || node.defaultView; // node is a Document\n}\n","import defaultView from \"../window\";\n\nfunction styleRemove(name) {\n return function() {\n this.style.removeProperty(name);\n };\n}\n\nfunction styleConstant(name, value, priority) {\n return function() {\n this.style.setProperty(name, value, priority);\n };\n}\n\nfunction styleFunction(name, value, priority) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.style.removeProperty(name);\n else this.style.setProperty(name, v, priority);\n };\n}\n\nexport default function(name, value, priority) {\n return arguments.length > 1\n ? this.each((value == null\n ? styleRemove : typeof value === \"function\"\n ? styleFunction\n : styleConstant)(name, value, priority == null ? \"\" : priority))\n : styleValue(this.node(), name);\n}\n\nexport function styleValue(node, name) {\n return node.style.getPropertyValue(name)\n || defaultView(node).getComputedStyle(node, null).getPropertyValue(name);\n}\n","function classArray(string) {\n return string.trim().split(/^|\\s+/);\n}\n\nfunction classList(node) {\n return node.classList || new ClassList(node);\n}\n\nfunction ClassList(node) {\n this._node = node;\n this._names = classArray(node.getAttribute(\"class\") || \"\");\n}\n\nClassList.prototype = {\n add: function(name) {\n var i = this._names.indexOf(name);\n if (i < 0) {\n this._names.push(name);\n this._node.setAttribute(\"class\", this._names.join(\" \"));\n }\n },\n remove: function(name) {\n var i = this._names.indexOf(name);\n if (i >= 0) {\n this._names.splice(i, 1);\n this._node.setAttribute(\"class\", this._names.join(\" \"));\n }\n },\n contains: function(name) {\n return this._names.indexOf(name) >= 0;\n }\n};\n\nfunction classedAdd(node, names) {\n var list = classList(node), i = -1, n = names.length;\n while (++i < n) list.add(names[i]);\n}\n\nfunction classedRemove(node, names) {\n var list = classList(node), i = -1, n = names.length;\n while (++i < n) list.remove(names[i]);\n}\n\nfunction classedTrue(names) {\n return function() {\n classedAdd(this, names);\n };\n}\n\nfunction classedFalse(names) {\n return function() {\n classedRemove(this, names);\n };\n}\n\nfunction classedFunction(names, value) {\n return function() {\n (value.apply(this, arguments) ? classedAdd : classedRemove)(this, names);\n };\n}\n\nexport default function(name, value) {\n var names = classArray(name + \"\");\n\n if (arguments.length < 2) {\n var list = classList(this.node()), i = -1, n = names.length;\n while (++i < n) if (!list.contains(names[i])) return false;\n return true;\n }\n\n return this.each((typeof value === \"function\"\n ? classedFunction : value\n ? classedTrue\n : classedFalse)(names, value));\n}\n","function textRemove() {\n this.textContent = \"\";\n}\n\nfunction textConstant(value) {\n return function() {\n this.textContent = value;\n };\n}\n\nfunction textFunction(value) {\n return function() {\n var v = value.apply(this, arguments);\n this.textContent = v == null ? \"\" : v;\n };\n}\n\nexport default function(value) {\n return arguments.length\n ? this.each(value == null\n ? textRemove : (typeof value === \"function\"\n ? textFunction\n : textConstant)(value))\n : this.node().textContent;\n}\n","function htmlRemove() {\n this.innerHTML = \"\";\n}\n\nfunction htmlConstant(value) {\n return function() {\n this.innerHTML = value;\n };\n}\n\nfunction htmlFunction(value) {\n return function() {\n var v = value.apply(this, arguments);\n this.innerHTML = v == null ? \"\" : v;\n };\n}\n\nexport default function(value) {\n return arguments.length\n ? this.each(value == null\n ? htmlRemove : (typeof value === \"function\"\n ? htmlFunction\n : htmlConstant)(value))\n : this.node().innerHTML;\n}\n","function raise() {\n if (this.nextSibling) this.parentNode.appendChild(this);\n}\n\nexport default function() {\n return this.each(raise);\n}\n","function lower() {\n if (this.previousSibling) this.parentNode.insertBefore(this, this.parentNode.firstChild);\n}\n\nexport default function() {\n return this.each(lower);\n}\n","import creator from \"../creator\";\nimport selector from \"../selector\";\n\nfunction constantNull() {\n return null;\n}\n\nexport default function(name, before) {\n var create = typeof name === \"function\" ? name : creator(name),\n select = before == null ? constantNull : typeof before === \"function\" ? before : selector(before);\n return this.select(function() {\n return this.insertBefore(create.apply(this, arguments), select.apply(this, arguments) || null);\n });\n}\n","function remove() {\n var parent = this.parentNode;\n if (parent) parent.removeChild(this);\n}\n\nexport default function() {\n return this.each(remove);\n}\n","function selection_cloneShallow() {\n return this.parentNode.insertBefore(this.cloneNode(false), this.nextSibling);\n}\n\nfunction selection_cloneDeep() {\n return this.parentNode.insertBefore(this.cloneNode(true), this.nextSibling);\n}\n\nexport default function(deep) {\n return this.select(deep ? selection_cloneDeep : selection_cloneShallow);\n}\n","var filterEvents = {};\n\nexport var event = null;\n\nif (typeof document !== \"undefined\") {\n var element = document.documentElement;\n if (!(\"onmouseenter\" in element)) {\n filterEvents = {mouseenter: \"mouseover\", mouseleave: \"mouseout\"};\n }\n}\n\nfunction filterContextListener(listener, index, group) {\n listener = contextListener(listener, index, group);\n return function(event) {\n var related = event.relatedTarget;\n if (!related || (related !== this && !(related.compareDocumentPosition(this) & 8))) {\n listener.call(this, event);\n }\n };\n}\n\nfunction contextListener(listener, index, group) {\n return function(event1) {\n var event0 = event; // Events can be reentrant (e.g., focus).\n event = event1;\n try {\n listener.call(this, this.__data__, index, group);\n } finally {\n event = event0;\n }\n };\n}\n\nfunction parseTypenames(typenames) {\n return typenames.trim().split(/^|\\s+/).map(function(t) {\n var name = \"\", i = t.indexOf(\".\");\n if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n return {type: t, name: name};\n });\n}\n\nfunction onRemove(typename) {\n return function() {\n var on = this.__on;\n if (!on) return;\n for (var j = 0, i = -1, m = on.length, o; j < m; ++j) {\n if (o = on[j], (!typename.type || o.type === typename.type) && o.name === typename.name) {\n this.removeEventListener(o.type, o.listener, o.capture);\n } else {\n on[++i] = o;\n }\n }\n if (++i) on.length = i;\n else delete this.__on;\n };\n}\n\nfunction onAdd(typename, value, capture) {\n var wrap = filterEvents.hasOwnProperty(typename.type) ? filterContextListener : contextListener;\n return function(d, i, group) {\n var on = this.__on, o, listener = wrap(value, i, group);\n if (on) for (var j = 0, m = on.length; j < m; ++j) {\n if ((o = on[j]).type === typename.type && o.name === typename.name) {\n this.removeEventListener(o.type, o.listener, o.capture);\n this.addEventListener(o.type, o.listener = listener, o.capture = capture);\n o.value = value;\n return;\n }\n }\n this.addEventListener(typename.type, listener, capture);\n o = {type: typename.type, name: typename.name, value: value, listener: listener, capture: capture};\n if (!on) this.__on = [o];\n else on.push(o);\n };\n}\n\nexport default function(typename, value, capture) {\n var typenames = parseTypenames(typename + \"\"), i, n = typenames.length, t;\n\n if (arguments.length < 2) {\n var on = this.node().__on;\n if (on) for (var j = 0, m = on.length, o; j < m; ++j) {\n for (i = 0, o = on[j]; i < n; ++i) {\n if ((t = typenames[i]).type === o.type && t.name === o.name) {\n return o.value;\n }\n }\n }\n return;\n }\n\n on = value ? onAdd : onRemove;\n if (capture == null) capture = false;\n for (i = 0; i < n; ++i) this.each(on(typenames[i], value, capture));\n return this;\n}\n\nexport function customEvent(event1, listener, that, args) {\n var event0 = event;\n event1.sourceEvent = event;\n event = event1;\n try {\n return listener.apply(that, args);\n } finally {\n event = event0;\n }\n}\n","import defaultView from \"../window\";\n\nfunction dispatchEvent(node, type, params) {\n var window = defaultView(node),\n event = window.CustomEvent;\n\n if (typeof event === \"function\") {\n event = new event(type, params);\n } else {\n event = window.document.createEvent(\"Event\");\n if (params) event.initEvent(type, params.bubbles, params.cancelable), event.detail = params.detail;\n else event.initEvent(type, false, false);\n }\n\n node.dispatchEvent(event);\n}\n\nfunction dispatchConstant(type, params) {\n return function() {\n return dispatchEvent(this, type, params);\n };\n}\n\nfunction dispatchFunction(type, params) {\n return function() {\n return dispatchEvent(this, type, params.apply(this, arguments));\n };\n}\n\nexport default function(type, params) {\n return this.each((typeof params === \"function\"\n ? dispatchFunction\n : dispatchConstant)(type, params));\n}\n","import selection_select from \"./select\";\nimport selection_selectAll from \"./selectAll\";\nimport selection_filter from \"./filter\";\nimport selection_data from \"./data\";\nimport selection_enter from \"./enter\";\nimport selection_exit from \"./exit\";\nimport selection_merge from \"./merge\";\nimport selection_order from \"./order\";\nimport selection_sort from \"./sort\";\nimport selection_call from \"./call\";\nimport selection_nodes from \"./nodes\";\nimport selection_node from \"./node\";\nimport selection_size from \"./size\";\nimport selection_empty from \"./empty\";\nimport selection_each from \"./each\";\nimport selection_attr from \"./attr\";\nimport selection_style from \"./style\";\nimport selection_property from \"./property\";\nimport selection_classed from \"./classed\";\nimport selection_text from \"./text\";\nimport selection_html from \"./html\";\nimport selection_raise from \"./raise\";\nimport selection_lower from \"./lower\";\nimport selection_append from \"./append\";\nimport selection_insert from \"./insert\";\nimport selection_remove from \"./remove\";\nimport selection_clone from \"./clone\";\nimport selection_datum from \"./datum\";\nimport selection_on from \"./on\";\nimport selection_dispatch from \"./dispatch\";\n\nexport var root = [null];\n\nexport function Selection(groups, parents) {\n this._groups = groups;\n this._parents = parents;\n}\n\nfunction selection() {\n return new Selection([[document.documentElement]], root);\n}\n\nSelection.prototype = selection.prototype = {\n constructor: Selection,\n select: selection_select,\n selectAll: selection_selectAll,\n filter: selection_filter,\n data: selection_data,\n enter: selection_enter,\n exit: selection_exit,\n merge: selection_merge,\n order: selection_order,\n sort: selection_sort,\n call: selection_call,\n nodes: selection_nodes,\n node: selection_node,\n size: selection_size,\n empty: selection_empty,\n each: selection_each,\n attr: selection_attr,\n style: selection_style,\n property: selection_property,\n classed: selection_classed,\n text: selection_text,\n html: selection_html,\n raise: selection_raise,\n lower: selection_lower,\n append: selection_append,\n insert: selection_insert,\n remove: selection_remove,\n clone: selection_clone,\n datum: selection_datum,\n on: selection_on,\n dispatch: selection_dispatch\n};\n\nexport default selection;\n","import {Selection} from \"./index\";\nimport selector from \"../selector\";\n\nexport default function(select) {\n if (typeof select !== \"function\") select = selector(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {\n if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {\n if (\"__data__\" in node) subnode.__data__ = node.__data__;\n subgroup[i] = subnode;\n }\n }\n }\n\n return new Selection(subgroups, this._parents);\n}\n","import {Selection} from \"./index\";\nimport selectorAll from \"../selectorAll\";\n\nexport default function(select) {\n if (typeof select !== \"function\") select = selectorAll(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n subgroups.push(select.call(node, node.__data__, i, group));\n parents.push(node);\n }\n }\n }\n\n return new Selection(subgroups, parents);\n}\n","import {Selection} from \"./index\";\nimport matcher from \"../matcher\";\n\nexport default function(match) {\n if (typeof match !== \"function\") match = matcher(match);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {\n if ((node = group[i]) && match.call(node, node.__data__, i, group)) {\n subgroup.push(node);\n }\n }\n }\n\n return new Selection(subgroups, this._parents);\n}\n","import sparse from \"./sparse\";\nimport {Selection} from \"./index\";\n\nexport default function() {\n return new Selection(this._exit || this._groups.map(sparse), this._parents);\n}\n","import {Selection} from \"./index\";\n\nexport default function(selection) {\n\n for (var groups0 = this._groups, groups1 = selection._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {\n for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group0[i] || group1[i]) {\n merge[i] = node;\n }\n }\n }\n\n for (; j < m0; ++j) {\n merges[j] = groups0[j];\n }\n\n return new Selection(merges, this._parents);\n}\n","export default function() {\n\n for (var groups = this._groups, j = -1, m = groups.length; ++j < m;) {\n for (var group = groups[j], i = group.length - 1, next = group[i], node; --i >= 0;) {\n if (node = group[i]) {\n if (next && next !== node.nextSibling) next.parentNode.insertBefore(node, next);\n next = node;\n }\n }\n }\n\n return this;\n}\n","export default function() {\n var callback = arguments[0];\n arguments[0] = this;\n callback.apply(null, arguments);\n return this;\n}\n","export default function() {\n var nodes = new Array(this.size()), i = -1;\n this.each(function() { nodes[++i] = this; });\n return nodes;\n}\n","export default function() {\n\n for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n for (var group = groups[j], i = 0, n = group.length; i < n; ++i) {\n var node = group[i];\n if (node) return node;\n }\n }\n\n return null;\n}\n","export default function() {\n var size = 0;\n this.each(function() { ++size; });\n return size;\n}\n","export default function() {\n return !this.node();\n}\n","export default function(callback) {\n\n for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n for (var group = groups[j], i = 0, n = group.length, node; i < n; ++i) {\n if (node = group[i]) callback.call(node, node.__data__, i, group);\n }\n }\n\n return this;\n}\n","function propertyRemove(name) {\n return function() {\n delete this[name];\n };\n}\n\nfunction propertyConstant(name, value) {\n return function() {\n this[name] = value;\n };\n}\n\nfunction propertyFunction(name, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) delete this[name];\n else this[name] = v;\n };\n}\n\nexport default function(name, value) {\n return arguments.length > 1\n ? this.each((value == null\n ? propertyRemove : typeof value === \"function\"\n ? propertyFunction\n : propertyConstant)(name, value))\n : this.node()[name];\n}\n","import creator from \"../creator\";\n\nexport default function(name) {\n var create = typeof name === \"function\" ? name : creator(name);\n return this.select(function() {\n return this.appendChild(create.apply(this, arguments));\n });\n}\n","export default function(value) {\n return arguments.length\n ? this.property(\"__data__\", value)\n : this.node().__data__;\n}\n","import {Selection, root} from \"./selection/index\";\n\nexport default function(selector) {\n return typeof selector === \"string\"\n ? new Selection([[document.querySelector(selector)]], [document.documentElement])\n : new Selection([[selector]], root);\n}\n","var nextId = 0;\n\nexport default function local() {\n return new Local;\n}\n\nfunction Local() {\n this._ = \"@\" + (++nextId).toString(36);\n}\n\nLocal.prototype = local.prototype = {\n constructor: Local,\n get: function(node) {\n var id = this._;\n while (!(id in node)) if (!(node = node.parentNode)) return;\n return node[id];\n },\n set: function(node, value) {\n return node[this._] = value;\n },\n remove: function(node) {\n return this._ in node && delete node[this._];\n },\n toString: function() {\n return this._;\n }\n};\n","import {event} from \"./selection/on\";\n\nexport default function() {\n var current = event, source;\n while (source = current.sourceEvent) current = source;\n return current;\n}\n","export default function(node, event) {\n var svg = node.ownerSVGElement || node;\n\n if (svg.createSVGPoint) {\n var point = svg.createSVGPoint();\n point.x = event.clientX, point.y = event.clientY;\n point = point.matrixTransform(node.getScreenCTM().inverse());\n return [point.x, point.y];\n }\n\n var rect = node.getBoundingClientRect();\n return [event.clientX - rect.left - node.clientLeft, event.clientY - rect.top - node.clientTop];\n}\n","import sourceEvent from \"./sourceEvent\";\nimport point from \"./point\";\n\nexport default function(node) {\n var event = sourceEvent();\n if (event.changedTouches) event = event.changedTouches[0];\n return point(node, event);\n}\n","import sourceEvent from \"./sourceEvent\";\nimport point from \"./point\";\n\nexport default function(node, touches, identifier) {\n if (arguments.length < 3) identifier = touches, touches = sourceEvent().changedTouches;\n\n for (var i = 0, n = touches ? touches.length : 0, touch; i < n; ++i) {\n if ((touch = touches[i]).identifier === identifier) {\n return point(node, touch);\n }\n }\n\n return null;\n}\n","var noop = {value: function() {}};\n\nfunction dispatch() {\n for (var i = 0, n = arguments.length, _ = {}, t; i < n; ++i) {\n if (!(t = arguments[i] + \"\") || (t in _)) throw new Error(\"illegal type: \" + t);\n _[t] = [];\n }\n return new Dispatch(_);\n}\n\nfunction Dispatch(_) {\n this._ = _;\n}\n\nfunction parseTypenames(typenames, types) {\n return typenames.trim().split(/^|\\s+/).map(function(t) {\n var name = \"\", i = t.indexOf(\".\");\n if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n if (t && !types.hasOwnProperty(t)) throw new Error(\"unknown type: \" + t);\n return {type: t, name: name};\n });\n}\n\nDispatch.prototype = dispatch.prototype = {\n constructor: Dispatch,\n on: function(typename, callback) {\n var _ = this._,\n T = parseTypenames(typename + \"\", _),\n t,\n i = -1,\n n = T.length;\n\n // If no callback was specified, return the callback of the given type and name.\n if (arguments.length < 2) {\n while (++i < n) if ((t = (typename = T[i]).type) && (t = get(_[t], typename.name))) return t;\n return;\n }\n\n // If a type was specified, set the callback for the given type and name.\n // Otherwise, if a null callback was specified, remove callbacks of the given name.\n if (callback != null && typeof callback !== \"function\") throw new Error(\"invalid callback: \" + callback);\n while (++i < n) {\n if (t = (typename = T[i]).type) _[t] = set(_[t], typename.name, callback);\n else if (callback == null) for (t in _) _[t] = set(_[t], typename.name, null);\n }\n\n return this;\n },\n copy: function() {\n var copy = {}, _ = this._;\n for (var t in _) copy[t] = _[t].slice();\n return new Dispatch(copy);\n },\n call: function(type, that) {\n if ((n = arguments.length - 2) > 0) for (var args = new Array(n), i = 0, n, t; i < n; ++i) args[i] = arguments[i + 2];\n if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n for (t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n },\n apply: function(type, that, args) {\n if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n for (var t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n }\n};\n\nfunction get(type, name) {\n for (var i = 0, n = type.length, c; i < n; ++i) {\n if ((c = type[i]).name === name) {\n return c.value;\n }\n }\n}\n\nfunction set(type, name, callback) {\n for (var i = 0, n = type.length; i < n; ++i) {\n if (type[i].name === name) {\n type[i] = noop, type = type.slice(0, i).concat(type.slice(i + 1));\n break;\n }\n }\n if (callback != null) type.push({name: name, value: callback});\n return type;\n}\n\nexport default dispatch;\n","import {event} from \"d3-selection\";\n\nexport function nopropagation() {\n event.stopImmediatePropagation();\n}\n\nexport default function() {\n event.preventDefault();\n event.stopImmediatePropagation();\n}\n","import {select} from \"d3-selection\";\nimport noevent from \"./noevent\";\n\nexport default function(view) {\n var root = view.document.documentElement,\n selection = select(view).on(\"dragstart.drag\", noevent, true);\n if (\"onselectstart\" in root) {\n selection.on(\"selectstart.drag\", noevent, true);\n } else {\n root.__noselect = root.style.MozUserSelect;\n root.style.MozUserSelect = \"none\";\n }\n}\n\nexport function yesdrag(view, noclick) {\n var root = view.document.documentElement,\n selection = select(view).on(\"dragstart.drag\", null);\n if (noclick) {\n selection.on(\"click.drag\", noevent, true);\n setTimeout(function() { selection.on(\"click.drag\", null); }, 0);\n }\n if (\"onselectstart\" in root) {\n selection.on(\"selectstart.drag\", null);\n } else {\n root.style.MozUserSelect = root.__noselect;\n delete root.__noselect;\n }\n}\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","export default function DragEvent(target, type, subject, id, active, x, y, dx, dy, dispatch) {\n this.target = target;\n this.type = type;\n this.subject = subject;\n this.identifier = id;\n this.active = active;\n this.x = x;\n this.y = y;\n this.dx = dx;\n this.dy = dy;\n this._ = dispatch;\n}\n\nDragEvent.prototype.on = function() {\n var value = this._.on.apply(this._, arguments);\n return value === this._ ? this : value;\n};\n","import {dispatch} from \"d3-dispatch\";\nimport {event, customEvent, select, mouse, touch} from \"d3-selection\";\nimport nodrag, {yesdrag} from \"./nodrag\";\nimport noevent, {nopropagation} from \"./noevent\";\nimport constant from \"./constant\";\nimport DragEvent from \"./event\";\n\n// Ignore right-click, since that should open the context menu.\nfunction defaultFilter() {\n return !event.button;\n}\n\nfunction defaultContainer() {\n return this.parentNode;\n}\n\nfunction defaultSubject(d) {\n return d == null ? {x: event.x, y: event.y} : d;\n}\n\nfunction defaultTouchable() {\n return \"ontouchstart\" in this;\n}\n\nexport default function() {\n var filter = defaultFilter,\n container = defaultContainer,\n subject = defaultSubject,\n touchable = defaultTouchable,\n gestures = {},\n listeners = dispatch(\"start\", \"drag\", \"end\"),\n active = 0,\n mousedownx,\n mousedowny,\n mousemoving,\n touchending,\n clickDistance2 = 0;\n\n function drag(selection) {\n selection\n .on(\"mousedown.drag\", mousedowned)\n .filter(touchable)\n .on(\"touchstart.drag\", touchstarted)\n .on(\"touchmove.drag\", touchmoved)\n .on(\"touchend.drag touchcancel.drag\", touchended)\n .style(\"touch-action\", \"none\")\n .style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\");\n }\n\n function mousedowned() {\n if (touchending || !filter.apply(this, arguments)) return;\n var gesture = beforestart(\"mouse\", container.apply(this, arguments), mouse, this, arguments);\n if (!gesture) return;\n select(event.view).on(\"mousemove.drag\", mousemoved, true).on(\"mouseup.drag\", mouseupped, true);\n nodrag(event.view);\n nopropagation();\n mousemoving = false;\n mousedownx = event.clientX;\n mousedowny = event.clientY;\n gesture(\"start\");\n }\n\n function mousemoved() {\n noevent();\n if (!mousemoving) {\n var dx = event.clientX - mousedownx, dy = event.clientY - mousedowny;\n mousemoving = dx * dx + dy * dy > clickDistance2;\n }\n gestures.mouse(\"drag\");\n }\n\n function mouseupped() {\n select(event.view).on(\"mousemove.drag mouseup.drag\", null);\n yesdrag(event.view, mousemoving);\n noevent();\n gestures.mouse(\"end\");\n }\n\n function touchstarted() {\n if (!filter.apply(this, arguments)) return;\n var touches = event.changedTouches,\n c = container.apply(this, arguments),\n n = touches.length, i, gesture;\n\n for (i = 0; i < n; ++i) {\n if (gesture = beforestart(touches[i].identifier, c, touch, this, arguments)) {\n nopropagation();\n gesture(\"start\");\n }\n }\n }\n\n function touchmoved() {\n var touches = event.changedTouches,\n n = touches.length, i, gesture;\n\n for (i = 0; i < n; ++i) {\n if (gesture = gestures[touches[i].identifier]) {\n noevent();\n gesture(\"drag\");\n }\n }\n }\n\n function touchended() {\n var touches = event.changedTouches,\n n = touches.length, i, gesture;\n\n if (touchending) clearTimeout(touchending);\n touchending = setTimeout(function() { touchending = null; }, 500); // Ghost clicks are delayed!\n for (i = 0; i < n; ++i) {\n if (gesture = gestures[touches[i].identifier]) {\n nopropagation();\n gesture(\"end\");\n }\n }\n }\n\n function beforestart(id, container, point, that, args) {\n var p = point(container, id), s, dx, dy,\n sublisteners = listeners.copy();\n\n if (!customEvent(new DragEvent(drag, \"beforestart\", s, id, active, p[0], p[1], 0, 0, sublisteners), function() {\n if ((event.subject = s = subject.apply(that, args)) == null) return false;\n dx = s.x - p[0] || 0;\n dy = s.y - p[1] || 0;\n return true;\n })) return;\n\n return function gesture(type) {\n var p0 = p, n;\n switch (type) {\n case \"start\": gestures[id] = gesture, n = active++; break;\n case \"end\": delete gestures[id], --active; // nobreak\n case \"drag\": p = point(container, id), n = active; break;\n }\n customEvent(new DragEvent(drag, type, s, id, n, p[0] + dx, p[1] + dy, p[0] - p0[0], p[1] - p0[1], sublisteners), sublisteners.apply, sublisteners, [type, that, args]);\n };\n }\n\n drag.filter = function(_) {\n return arguments.length ? (filter = typeof _ === \"function\" ? _ : constant(!!_), drag) : filter;\n };\n\n drag.container = function(_) {\n return arguments.length ? (container = typeof _ === \"function\" ? _ : constant(_), drag) : container;\n };\n\n drag.subject = function(_) {\n return arguments.length ? (subject = typeof _ === \"function\" ? _ : constant(_), drag) : subject;\n };\n\n drag.touchable = function(_) {\n return arguments.length ? (touchable = typeof _ === \"function\" ? _ : constant(!!_), drag) : touchable;\n };\n\n drag.on = function() {\n var value = listeners.on.apply(listeners, arguments);\n return value === listeners ? drag : value;\n };\n\n drag.clickDistance = function(_) {\n return arguments.length ? (clickDistance2 = (_ = +_) * _, drag) : Math.sqrt(clickDistance2);\n };\n\n return drag;\n}\n","var frame = 0, // is an animation frame pending?\n timeout = 0, // is a timeout pending?\n interval = 0, // are any timers active?\n pokeDelay = 1000, // how frequently we check for clock skew\n taskHead,\n taskTail,\n clockLast = 0,\n clockNow = 0,\n clockSkew = 0,\n clock = typeof performance === \"object\" && performance.now ? performance : Date,\n setFrame = typeof window === \"object\" && window.requestAnimationFrame ? window.requestAnimationFrame.bind(window) : function(f) { setTimeout(f, 17); };\n\nexport function now() {\n return clockNow || (setFrame(clearNow), clockNow = clock.now() + clockSkew);\n}\n\nfunction clearNow() {\n clockNow = 0;\n}\n\nexport function Timer() {\n this._call =\n this._time =\n this._next = null;\n}\n\nTimer.prototype = timer.prototype = {\n constructor: Timer,\n restart: function(callback, delay, time) {\n if (typeof callback !== \"function\") throw new TypeError(\"callback is not a function\");\n time = (time == null ? now() : +time) + (delay == null ? 0 : +delay);\n if (!this._next && taskTail !== this) {\n if (taskTail) taskTail._next = this;\n else taskHead = this;\n taskTail = this;\n }\n this._call = callback;\n this._time = time;\n sleep();\n },\n stop: function() {\n if (this._call) {\n this._call = null;\n this._time = Infinity;\n sleep();\n }\n }\n};\n\nexport function timer(callback, delay, time) {\n var t = new Timer;\n t.restart(callback, delay, time);\n return t;\n}\n\nexport function timerFlush() {\n now(); // Get the current time, if not already set.\n ++frame; // Pretend we’ve set an alarm, if we haven’t already.\n var t = taskHead, e;\n while (t) {\n if ((e = clockNow - t._time) >= 0) t._call.call(null, e);\n t = t._next;\n }\n --frame;\n}\n\nfunction wake() {\n clockNow = (clockLast = clock.now()) + clockSkew;\n frame = timeout = 0;\n try {\n timerFlush();\n } finally {\n frame = 0;\n nap();\n clockNow = 0;\n }\n}\n\nfunction poke() {\n var now = clock.now(), delay = now - clockLast;\n if (delay > pokeDelay) clockSkew -= delay, clockLast = now;\n}\n\nfunction nap() {\n var t0, t1 = taskHead, t2, time = Infinity;\n while (t1) {\n if (t1._call) {\n if (time > t1._time) time = t1._time;\n t0 = t1, t1 = t1._next;\n } else {\n t2 = t1._next, t1._next = null;\n t1 = t0 ? t0._next = t2 : taskHead = t2;\n }\n }\n taskTail = t0;\n sleep(time);\n}\n\nfunction sleep(time) {\n if (frame) return; // Soonest alarm already set, or will be.\n if (timeout) timeout = clearTimeout(timeout);\n var delay = time - clockNow; // Strictly less than if we recomputed clockNow.\n if (delay > 24) {\n if (time < Infinity) timeout = setTimeout(wake, time - clock.now() - clockSkew);\n if (interval) interval = clearInterval(interval);\n } else {\n if (!interval) clockLast = clock.now(), interval = setInterval(poke, pokeDelay);\n frame = 1, setFrame(wake);\n }\n}\n","import {Timer} from \"./timer\";\n\nexport default function(callback, delay, time) {\n var t = new Timer;\n delay = delay == null ? 0 : +delay;\n t.restart(function(elapsed) {\n t.stop();\n callback(elapsed + delay);\n }, delay, time);\n return t;\n}\n","import {dispatch} from \"d3-dispatch\";\nimport {timer, timeout} from \"d3-timer\";\n\nvar emptyOn = dispatch(\"start\", \"end\", \"interrupt\");\nvar emptyTween = [];\n\nexport var CREATED = 0;\nexport var SCHEDULED = 1;\nexport var STARTING = 2;\nexport var STARTED = 3;\nexport var RUNNING = 4;\nexport var ENDING = 5;\nexport var ENDED = 6;\n\nexport default function(node, name, id, index, group, timing) {\n var schedules = node.__transition;\n if (!schedules) node.__transition = {};\n else if (id in schedules) return;\n create(node, id, {\n name: name,\n index: index, // For context during callback.\n group: group, // For context during callback.\n on: emptyOn,\n tween: emptyTween,\n time: timing.time,\n delay: timing.delay,\n duration: timing.duration,\n ease: timing.ease,\n timer: null,\n state: CREATED\n });\n}\n\nexport function init(node, id) {\n var schedule = get(node, id);\n if (schedule.state > CREATED) throw new Error(\"too late; already scheduled\");\n return schedule;\n}\n\nexport function set(node, id) {\n var schedule = get(node, id);\n if (schedule.state > STARTING) throw new Error(\"too late; already started\");\n return schedule;\n}\n\nexport function get(node, id) {\n var schedule = node.__transition;\n if (!schedule || !(schedule = schedule[id])) throw new Error(\"transition not found\");\n return schedule;\n}\n\nfunction create(node, id, self) {\n var schedules = node.__transition,\n tween;\n\n // Initialize the self timer when the transition is created.\n // Note the actual delay is not known until the first callback!\n schedules[id] = self;\n self.timer = timer(schedule, 0, self.time);\n\n function schedule(elapsed) {\n self.state = SCHEDULED;\n self.timer.restart(start, self.delay, self.time);\n\n // If the elapsed delay is less than our first sleep, start immediately.\n if (self.delay <= elapsed) start(elapsed - self.delay);\n }\n\n function start(elapsed) {\n var i, j, n, o;\n\n // If the state is not SCHEDULED, then we previously errored on start.\n if (self.state !== SCHEDULED) return stop();\n\n for (i in schedules) {\n o = schedules[i];\n if (o.name !== self.name) continue;\n\n // While this element already has a starting transition during this frame,\n // defer starting an interrupting transition until that transition has a\n // chance to tick (and possibly end); see d3/d3-transition#54!\n if (o.state === STARTED) return timeout(start);\n\n // Interrupt the active transition, if any.\n // Dispatch the interrupt event.\n if (o.state === RUNNING) {\n o.state = ENDED;\n o.timer.stop();\n o.on.call(\"interrupt\", node, node.__data__, o.index, o.group);\n delete schedules[i];\n }\n\n // Cancel any pre-empted transitions. No interrupt event is dispatched\n // because the cancelled transitions never started. Note that this also\n // removes this transition from the pending list!\n else if (+i < id) {\n o.state = ENDED;\n o.timer.stop();\n delete schedules[i];\n }\n }\n\n // Defer the first tick to end of the current frame; see d3/d3#1576.\n // Note the transition may be canceled after start and before the first tick!\n // Note this must be scheduled before the start event; see d3/d3-transition#16!\n // Assuming this is successful, subsequent callbacks go straight to tick.\n timeout(function() {\n if (self.state === STARTED) {\n self.state = RUNNING;\n self.timer.restart(tick, self.delay, self.time);\n tick(elapsed);\n }\n });\n\n // Dispatch the start event.\n // Note this must be done before the tween are initialized.\n self.state = STARTING;\n self.on.call(\"start\", node, node.__data__, self.index, self.group);\n if (self.state !== STARTING) return; // interrupted\n self.state = STARTED;\n\n // Initialize the tween, deleting null tween.\n tween = new Array(n = self.tween.length);\n for (i = 0, j = -1; i < n; ++i) {\n if (o = self.tween[i].value.call(node, node.__data__, self.index, self.group)) {\n tween[++j] = o;\n }\n }\n tween.length = j + 1;\n }\n\n function tick(elapsed) {\n var t = elapsed < self.duration ? self.ease.call(null, elapsed / self.duration) : (self.timer.restart(stop), self.state = ENDING, 1),\n i = -1,\n n = tween.length;\n\n while (++i < n) {\n tween[i].call(null, t);\n }\n\n // Dispatch the end event.\n if (self.state === ENDING) {\n self.on.call(\"end\", node, node.__data__, self.index, self.group);\n stop();\n }\n }\n\n function stop() {\n self.state = ENDED;\n self.timer.stop();\n delete schedules[id];\n for (var i in schedules) return; // eslint-disable-line no-unused-vars\n delete node.__transition;\n }\n}\n","import {get, set} from \"./schedule\";\n\nfunction tweenRemove(id, name) {\n var tween0, tween1;\n return function() {\n var schedule = set(this, id),\n tween = schedule.tween;\n\n // If this node shared tween with the previous node,\n // just assign the updated shared tween and we’re done!\n // Otherwise, copy-on-write.\n if (tween !== tween0) {\n tween1 = tween0 = tween;\n for (var i = 0, n = tween1.length; i < n; ++i) {\n if (tween1[i].name === name) {\n tween1 = tween1.slice();\n tween1.splice(i, 1);\n break;\n }\n }\n }\n\n schedule.tween = tween1;\n };\n}\n\nfunction tweenFunction(id, name, value) {\n var tween0, tween1;\n if (typeof value !== \"function\") throw new Error;\n return function() {\n var schedule = set(this, id),\n tween = schedule.tween;\n\n // If this node shared tween with the previous node,\n // just assign the updated shared tween and we’re done!\n // Otherwise, copy-on-write.\n if (tween !== tween0) {\n tween1 = (tween0 = tween).slice();\n for (var t = {name: name, value: value}, i = 0, n = tween1.length; i < n; ++i) {\n if (tween1[i].name === name) {\n tween1[i] = t;\n break;\n }\n }\n if (i === n) tween1.push(t);\n }\n\n schedule.tween = tween1;\n };\n}\n\nexport default function(name, value) {\n var id = this._id;\n\n name += \"\";\n\n if (arguments.length < 2) {\n var tween = get(this.node(), id).tween;\n for (var i = 0, n = tween.length, t; i < n; ++i) {\n if ((t = tween[i]).name === name) {\n return t.value;\n }\n }\n return null;\n }\n\n return this.each((value == null ? tweenRemove : tweenFunction)(id, name, value));\n}\n\nexport function tweenValue(transition, name, value) {\n var id = transition._id;\n\n transition.each(function() {\n var schedule = set(this, id);\n (schedule.value || (schedule.value = {}))[name] = value.apply(this, arguments);\n });\n\n return function(node) {\n return get(node, id).value[name];\n };\n}\n","import {color} from \"d3-color\";\nimport {interpolateNumber, interpolateRgb, interpolateString} from \"d3-interpolate\";\n\nexport default function(a, b) {\n var c;\n return (typeof b === \"number\" ? interpolateNumber\n : b instanceof color ? interpolateRgb\n : (c = color(b)) ? (b = c, interpolateRgb)\n : interpolateString)(a, b);\n}\n","function removeFunction(id) {\n return function() {\n var parent = this.parentNode;\n for (var i in this.__transition) if (+i !== id) return;\n if (parent) parent.removeChild(this);\n };\n}\n\nexport default function() {\n return this.on(\"end.remove\", removeFunction(this._id));\n}\n","import {selection} from \"d3-selection\";\n\nvar Selection = selection.prototype.constructor;\n\nexport default function() {\n return new Selection(this._groups, this._parents);\n}\n","import {tweenValue} from \"./tween\";\n\nfunction textConstant(value) {\n return function() {\n this.textContent = value;\n };\n}\n\nfunction textFunction(value) {\n return function() {\n var value1 = value(this);\n this.textContent = value1 == null ? \"\" : value1;\n };\n}\n\nexport default function(value) {\n return this.tween(\"text\", typeof value === \"function\"\n ? textFunction(tweenValue(this, \"text\", value))\n : textConstant(value == null ? \"\" : value + \"\"));\n}\n","import {selection} from \"d3-selection\";\nimport transition_attr from \"./attr\";\nimport transition_attrTween from \"./attrTween\";\nimport transition_delay from \"./delay\";\nimport transition_duration from \"./duration\";\nimport transition_ease from \"./ease\";\nimport transition_filter from \"./filter\";\nimport transition_merge from \"./merge\";\nimport transition_on from \"./on\";\nimport transition_remove from \"./remove\";\nimport transition_select from \"./select\";\nimport transition_selectAll from \"./selectAll\";\nimport transition_selection from \"./selection\";\nimport transition_style from \"./style\";\nimport transition_styleTween from \"./styleTween\";\nimport transition_text from \"./text\";\nimport transition_transition from \"./transition\";\nimport transition_tween from \"./tween\";\n\nvar id = 0;\n\nexport function Transition(groups, parents, name, id) {\n this._groups = groups;\n this._parents = parents;\n this._name = name;\n this._id = id;\n}\n\nexport default function transition(name) {\n return selection().transition(name);\n}\n\nexport function newId() {\n return ++id;\n}\n\nvar selection_prototype = selection.prototype;\n\nTransition.prototype = transition.prototype = {\n constructor: Transition,\n select: transition_select,\n selectAll: transition_selectAll,\n filter: transition_filter,\n merge: transition_merge,\n selection: transition_selection,\n transition: transition_transition,\n call: selection_prototype.call,\n nodes: selection_prototype.nodes,\n node: selection_prototype.node,\n size: selection_prototype.size,\n empty: selection_prototype.empty,\n each: selection_prototype.each,\n on: transition_on,\n attr: transition_attr,\n attrTween: transition_attrTween,\n style: transition_style,\n styleTween: transition_styleTween,\n text: transition_text,\n remove: transition_remove,\n tween: transition_tween,\n delay: transition_delay,\n duration: transition_duration,\n ease: transition_ease\n};\n","import {selector} from \"d3-selection\";\nimport {Transition} from \"./index\";\nimport schedule, {get} from \"./schedule\";\n\nexport default function(select) {\n var name = this._name,\n id = this._id;\n\n if (typeof select !== \"function\") select = selector(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {\n if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {\n if (\"__data__\" in node) subnode.__data__ = node.__data__;\n subgroup[i] = subnode;\n schedule(subgroup[i], name, id, i, subgroup, get(node, id));\n }\n }\n }\n\n return new Transition(subgroups, this._parents, name, id);\n}\n","import {selectorAll} from \"d3-selection\";\nimport {Transition} from \"./index\";\nimport schedule, {get} from \"./schedule\";\n\nexport default function(select) {\n var name = this._name,\n id = this._id;\n\n if (typeof select !== \"function\") select = selectorAll(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n for (var children = select.call(node, node.__data__, i, group), child, inherit = get(node, id), k = 0, l = children.length; k < l; ++k) {\n if (child = children[k]) {\n schedule(child, name, id, k, children, inherit);\n }\n }\n subgroups.push(children);\n parents.push(node);\n }\n }\n }\n\n return new Transition(subgroups, parents, name, id);\n}\n","import {matcher} from \"d3-selection\";\nimport {Transition} from \"./index\";\n\nexport default function(match) {\n if (typeof match !== \"function\") match = matcher(match);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {\n if ((node = group[i]) && match.call(node, node.__data__, i, group)) {\n subgroup.push(node);\n }\n }\n }\n\n return new Transition(subgroups, this._parents, this._name, this._id);\n}\n","import {Transition} from \"./index\";\n\nexport default function(transition) {\n if (transition._id !== this._id) throw new Error;\n\n for (var groups0 = this._groups, groups1 = transition._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {\n for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group0[i] || group1[i]) {\n merge[i] = node;\n }\n }\n }\n\n for (; j < m0; ++j) {\n merges[j] = groups0[j];\n }\n\n return new Transition(merges, this._parents, this._name, this._id);\n}\n","import {Transition, newId} from \"./index\";\nimport schedule, {get} from \"./schedule\";\n\nexport default function() {\n var name = this._name,\n id0 = this._id,\n id1 = newId();\n\n for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n var inherit = get(node, id0);\n schedule(node, name, id1, i, group, {\n time: inherit.time + inherit.delay + inherit.duration,\n delay: 0,\n duration: inherit.duration,\n ease: inherit.ease\n });\n }\n }\n }\n\n return new Transition(groups, this._parents, name, id1);\n}\n","import {get, set, init} from \"./schedule\";\n\nfunction start(name) {\n return (name + \"\").trim().split(/^|\\s+/).every(function(t) {\n var i = t.indexOf(\".\");\n if (i >= 0) t = t.slice(0, i);\n return !t || t === \"start\";\n });\n}\n\nfunction onFunction(id, name, listener) {\n var on0, on1, sit = start(name) ? init : set;\n return function() {\n var schedule = sit(this, id),\n on = schedule.on;\n\n // If this node shared a dispatch with the previous node,\n // just assign the updated shared dispatch and we’re done!\n // Otherwise, copy-on-write.\n if (on !== on0) (on1 = (on0 = on).copy()).on(name, listener);\n\n schedule.on = on1;\n };\n}\n\nexport default function(name, listener) {\n var id = this._id;\n\n return arguments.length < 2\n ? get(this.node(), id).on.on(name)\n : this.each(onFunction(id, name, listener));\n}\n","import {interpolateTransformSvg as interpolateTransform} from \"d3-interpolate\";\nimport {namespace} from \"d3-selection\";\nimport {tweenValue} from \"./tween\";\nimport interpolate from \"./interpolate\";\n\nfunction attrRemove(name) {\n return function() {\n this.removeAttribute(name);\n };\n}\n\nfunction attrRemoveNS(fullname) {\n return function() {\n this.removeAttributeNS(fullname.space, fullname.local);\n };\n}\n\nfunction attrConstant(name, interpolate, value1) {\n var value00,\n interpolate0;\n return function() {\n var value0 = this.getAttribute(name);\n return value0 === value1 ? null\n : value0 === value00 ? interpolate0\n : interpolate0 = interpolate(value00 = value0, value1);\n };\n}\n\nfunction attrConstantNS(fullname, interpolate, value1) {\n var value00,\n interpolate0;\n return function() {\n var value0 = this.getAttributeNS(fullname.space, fullname.local);\n return value0 === value1 ? null\n : value0 === value00 ? interpolate0\n : interpolate0 = interpolate(value00 = value0, value1);\n };\n}\n\nfunction attrFunction(name, interpolate, value) {\n var value00,\n value10,\n interpolate0;\n return function() {\n var value0, value1 = value(this);\n if (value1 == null) return void this.removeAttribute(name);\n value0 = this.getAttribute(name);\n return value0 === value1 ? null\n : value0 === value00 && value1 === value10 ? interpolate0\n : interpolate0 = interpolate(value00 = value0, value10 = value1);\n };\n}\n\nfunction attrFunctionNS(fullname, interpolate, value) {\n var value00,\n value10,\n interpolate0;\n return function() {\n var value0, value1 = value(this);\n if (value1 == null) return void this.removeAttributeNS(fullname.space, fullname.local);\n value0 = this.getAttributeNS(fullname.space, fullname.local);\n return value0 === value1 ? null\n : value0 === value00 && value1 === value10 ? interpolate0\n : interpolate0 = interpolate(value00 = value0, value10 = value1);\n };\n}\n\nexport default function(name, value) {\n var fullname = namespace(name), i = fullname === \"transform\" ? interpolateTransform : interpolate;\n return this.attrTween(name, typeof value === \"function\"\n ? (fullname.local ? attrFunctionNS : attrFunction)(fullname, i, tweenValue(this, \"attr.\" + name, value))\n : value == null ? (fullname.local ? attrRemoveNS : attrRemove)(fullname)\n : (fullname.local ? attrConstantNS : attrConstant)(fullname, i, value + \"\"));\n}\n","import {namespace} from \"d3-selection\";\n\nfunction attrTweenNS(fullname, value) {\n function tween() {\n var node = this, i = value.apply(node, arguments);\n return i && function(t) {\n node.setAttributeNS(fullname.space, fullname.local, i(t));\n };\n }\n tween._value = value;\n return tween;\n}\n\nfunction attrTween(name, value) {\n function tween() {\n var node = this, i = value.apply(node, arguments);\n return i && function(t) {\n node.setAttribute(name, i(t));\n };\n }\n tween._value = value;\n return tween;\n}\n\nexport default function(name, value) {\n var key = \"attr.\" + name;\n if (arguments.length < 2) return (key = this.tween(key)) && key._value;\n if (value == null) return this.tween(key, null);\n if (typeof value !== \"function\") throw new Error;\n var fullname = namespace(name);\n return this.tween(key, (fullname.local ? attrTweenNS : attrTween)(fullname, value));\n}\n","import {interpolateTransformCss as interpolateTransform} from \"d3-interpolate\";\nimport {style} from \"d3-selection\";\nimport {tweenValue} from \"./tween\";\nimport interpolate from \"./interpolate\";\n\nfunction styleRemove(name, interpolate) {\n var value00,\n value10,\n interpolate0;\n return function() {\n var value0 = style(this, name),\n value1 = (this.style.removeProperty(name), style(this, name));\n return value0 === value1 ? null\n : value0 === value00 && value1 === value10 ? interpolate0\n : interpolate0 = interpolate(value00 = value0, value10 = value1);\n };\n}\n\nfunction styleRemoveEnd(name) {\n return function() {\n this.style.removeProperty(name);\n };\n}\n\nfunction styleConstant(name, interpolate, value1) {\n var value00,\n interpolate0;\n return function() {\n var value0 = style(this, name);\n return value0 === value1 ? null\n : value0 === value00 ? interpolate0\n : interpolate0 = interpolate(value00 = value0, value1);\n };\n}\n\nfunction styleFunction(name, interpolate, value) {\n var value00,\n value10,\n interpolate0;\n return function() {\n var value0 = style(this, name),\n value1 = value(this);\n if (value1 == null) value1 = (this.style.removeProperty(name), style(this, name));\n return value0 === value1 ? null\n : value0 === value00 && value1 === value10 ? interpolate0\n : interpolate0 = interpolate(value00 = value0, value10 = value1);\n };\n}\n\nexport default function(name, value, priority) {\n var i = (name += \"\") === \"transform\" ? interpolateTransform : interpolate;\n return value == null ? this\n .styleTween(name, styleRemove(name, i))\n .on(\"end.style.\" + name, styleRemoveEnd(name))\n : this.styleTween(name, typeof value === \"function\"\n ? styleFunction(name, i, tweenValue(this, \"style.\" + name, value))\n : styleConstant(name, i, value + \"\"), priority);\n}\n","function styleTween(name, value, priority) {\n function tween() {\n var node = this, i = value.apply(node, arguments);\n return i && function(t) {\n node.style.setProperty(name, i(t), priority);\n };\n }\n tween._value = value;\n return tween;\n}\n\nexport default function(name, value, priority) {\n var key = \"style.\" + (name += \"\");\n if (arguments.length < 2) return (key = this.tween(key)) && key._value;\n if (value == null) return this.tween(key, null);\n if (typeof value !== \"function\") throw new Error;\n return this.tween(key, styleTween(name, value, priority == null ? \"\" : priority));\n}\n","import {get, init} from \"./schedule\";\n\nfunction delayFunction(id, value) {\n return function() {\n init(this, id).delay = +value.apply(this, arguments);\n };\n}\n\nfunction delayConstant(id, value) {\n return value = +value, function() {\n init(this, id).delay = value;\n };\n}\n\nexport default function(value) {\n var id = this._id;\n\n return arguments.length\n ? this.each((typeof value === \"function\"\n ? delayFunction\n : delayConstant)(id, value))\n : get(this.node(), id).delay;\n}\n","import {get, set} from \"./schedule\";\n\nfunction durationFunction(id, value) {\n return function() {\n set(this, id).duration = +value.apply(this, arguments);\n };\n}\n\nfunction durationConstant(id, value) {\n return value = +value, function() {\n set(this, id).duration = value;\n };\n}\n\nexport default function(value) {\n var id = this._id;\n\n return arguments.length\n ? this.each((typeof value === \"function\"\n ? durationFunction\n : durationConstant)(id, value))\n : get(this.node(), id).duration;\n}\n","import {get, set} from \"./schedule\";\n\nfunction easeConstant(id, value) {\n if (typeof value !== \"function\") throw new Error;\n return function() {\n set(this, id).ease = value;\n };\n}\n\nexport default function(value) {\n var id = this._id;\n\n return arguments.length\n ? this.each(easeConstant(id, value))\n : get(this.node(), id).ease;\n}\n","import {Transition, newId} from \"../transition/index\";\nimport schedule from \"../transition/schedule\";\nimport {easeCubicInOut} from \"d3-ease\";\nimport {now} from \"d3-timer\";\n\nvar defaultTiming = {\n time: null, // Set on use.\n delay: 0,\n duration: 250,\n ease: easeCubicInOut\n};\n\nfunction inherit(node, id) {\n var timing;\n while (!(timing = node.__transition) || !(timing = timing[id])) {\n if (!(node = node.parentNode)) {\n return defaultTiming.time = now(), defaultTiming;\n }\n }\n return timing;\n}\n\nexport default function(name) {\n var id,\n timing;\n\n if (name instanceof Transition) {\n id = name._id, name = name._name;\n } else {\n id = newId(), (timing = defaultTiming).time = now(), name = name == null ? null : name + \"\";\n }\n\n for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n schedule(node, name, id, i, group, timing || inherit(node, id));\n }\n }\n }\n\n return new Transition(groups, this._parents, name, id);\n}\n","import {selection} from \"d3-selection\";\nimport selection_interrupt from \"./interrupt\";\nimport selection_transition from \"./transition\";\n\nselection.prototype.interrupt = selection_interrupt;\nselection.prototype.transition = selection_transition;\n","import interrupt from \"../interrupt\";\n\nexport default function(name) {\n return this.each(function() {\n interrupt(this, name);\n });\n}\n","import {STARTING, ENDING, ENDED} from \"./transition/schedule\";\n\nexport default function(node, name) {\n var schedules = node.__transition,\n schedule,\n active,\n empty = true,\n i;\n\n if (!schedules) return;\n\n name = name == null ? null : name + \"\";\n\n for (i in schedules) {\n if ((schedule = schedules[i]).name !== name) { empty = false; continue; }\n active = schedule.state > STARTING && schedule.state < ENDING;\n schedule.state = ENDED;\n schedule.timer.stop();\n if (active) schedule.on.call(\"interrupt\", node, node.__data__, schedule.index, schedule.group);\n delete schedules[i];\n }\n\n if (empty) delete node.__transition;\n}\n","import {Transition} from \"./transition/index\";\nimport {SCHEDULED} from \"./transition/schedule\";\n\nvar root = [null];\n\nexport default function(node, name) {\n var schedules = node.__transition,\n schedule,\n i;\n\n if (schedules) {\n name = name == null ? null : name + \"\";\n for (i in schedules) {\n if ((schedule = schedules[i]).state > SCHEDULED && schedule.name === name) {\n return new Transition([[node]], root, name, +i);\n }\n }\n }\n\n return null;\n}\n","import { select, event as d3event, selection, clientPoint } from 'd3-selection';\nimport { drag as d3drag } from 'd3-drag';\nimport 'd3-transition';\nimport { mergeRecursive } from './common-utils';\n/**\n * This function takes a raw DOM element or\n * a string and returns a d3 selection of that element.\n *\n * @param {HTMLElement | string} element The element to wrap in d3 selection.\n * @return {Selection} Instance of d3 selection.\n */\nconst selectElement = element => select(element);\n\n/**\n * It creates a new d3 element on the parent element\n * @param {Selection} parent Element to which the element is to be appended\n * @param {Object} elemType Type of the new element\n * @param {Array} data Data for the new element\n * @param {Object} selector classname/id/tagname for the element\n * @return {HTMLElement} Newly Created Element\n */\nconst makeElement = (parent, elemType, data, selector, callbacks = {}, keyFn) => {\n if ((parent instanceof HTMLElement || parent instanceof SVGElement)) {\n parent = selectElement(parent);\n }\n\n const selectorVal = selector ? selector[0] : null;\n let selectorType = null;\n let actualSelector = null;\n let element = null;\n let enterSel = null;\n let mergeSel = null;\n let filter;\n if (selectorVal) {\n if (selectorVal === '#') {\n selectorType = 'id';\n actualSelector = selector;\n } else {\n selectorType = 'class';\n actualSelector = selector[0] === '.' ? selector : `.${selector}`;\n }\n } else {\n actualSelector = elemType;\n filter = true;\n }\n element = parent.selectAll(actualSelector);\n\n filter && (element = element.filter(function () {\n return this.parentNode === parent.node();\n }));\n element = element.data(data, keyFn);\n\n enterSel = element.enter()\n .append(elemType || 'div');\n callbacks.enter && enterSel.each(function (...params) {\n callbacks.enter(selectElement(this), ...params);\n });\n\n mergeSel = enterSel.merge(element);\n callbacks.update && mergeSel.each(function (...params) {\n callbacks.update(selectElement(this), ...params);\n });\n if (selectorType === 'class') {\n mergeSel.classed(selectorVal === '.' ? selector.substring(1, selector.length) : selector, true);\n } else if (selectorType === 'id') {\n mergeSel.attr('id', selector.substring(1, selector.length));\n }\n const exitSel = element.exit();\n\n if (callbacks.exit) {\n exitSel.each(function (...params) {\n callbacks.exit(selectElement(this), ...params);\n });\n } else {\n exitSel.remove();\n }\n return mergeSel;\n};\n\n/**\n * This function applies styles to an element\n * @param {Object} elem Element Selection\n * @param {Object} styleObj Style Object to be applied\n * @return {Element} Newly Created Element\n*/\nconst applyStyle = (elem, styleObj) => {\n Object.entries(styleObj).forEach((d) => {\n elem.style(d[0], d[1]);\n }, this);\n return elem;\n};\n\n/**\n * This function appends a dom element in another element.\n * @param {HTMLElement | SVGElement} element1 The element in which to append the second element\n * @param {HTMLElement | SVGElement} element2 The element which will be appended.\n */\nconst appendElement = (element1, element2) => {\n element1.appendChild(element2);\n};\n\n/**\n * Sets the attributes to the element.\n * @param {HTMLElement | SVGElement} element Element on which attributes will be applied\n * @param {Object} attrs Attributes which need to be applied\n */\nconst setElementAttrs = (element, attrs) => {\n for (const key in attrs) {\n if ({}.hasOwnProperty.call(attrs, key)) {\n element.attr(key, attrs[key]);\n }\n }\n};\n\n/**\n * Sets attributes in the svg or html element\n * @param {SVGElement | HTMLElement} element The element on which attrs will be applied\n * @param {Array.} attrs Array of attributes\n * @param {string} className className of elements to select.\n * @return {SVGElement | HTMLElement} SVGElement or html element.\n */\nconst setAttrs = (element, attrs, className) => {\n if (!(element instanceof selection)) {\n element = selectElement(element);\n }\n className !== undefined ? element.selectAll(`.${className}`).each(function () {\n setElementAttrs(select(this), attrs);\n }) : setElementAttrs(element, attrs);\n return element;\n};\n\n/**\n * Adds a css class to elements which passes the filter function.If filter function is not given,\n * then all elements will be applied the class.\n * @param {HTMLElement | SVGElement} element element\n * @param {string} className css class\n * @param {string} selector css selector\n * @param {Function} filterFn filter method.\n */\nconst addClass = (element, className, selector, filterFn) => {\n select(element).selectAll(selector).each(function (data) {\n const elem = select(this);\n filterFn ? filterFn(data) && elem.classed(className, true) :\n elem.classed(className, true);\n });\n};\n\n/**\n * Removes the css class from elements which passes the filter function.If filter function is not given,\n * then all elements will be applied the class.\n * @param {HTMLElement | SVGElement} element element\n * @param {string} className css class\n * @param {string} selector css selector\n * @param {Function} filterFn filter method.\n */\nconst removeClass = (element, className, selector, filterFn) => {\n select(element).selectAll(selector).each(function (data) {\n const elem = select(this);\n filterFn ? filterFn(data) && elem.classed(className, false) :\n elem.classed(className, false);\n });\n};\n\n/**\n * Sets styles in the svg or html element\n * @param {SVGElement | HTMLElement} element The element on which styles will be applied\n * @param {Array.} styles Array of style attributes\n * @return {SVGElement | HTMLElement} SVGElement or html element.\n */\nconst setStyles = (element, styles) => {\n if (!(element instanceof selection)) {\n element = selectElement(element);\n }\n for (const key in styles) {\n if ({}.hasOwnProperty.call(styles, key)) {\n element.style(key, styles[key]);\n }\n }\n return element;\n};\n\n/**\n * Creates svg or html elements by binding data to the selection.Removes extra elements\n * on exit.\n * @param {Object} params Parameter object\n * @param {SVGElement | HTMLElement} params.container Container element where all elements will be appended\n * @param {string} params.selector Selector by which elements will be selected from dom\n * @param {string} params.append Append tag\n * @param {Function} params.each Function which will be executed for each data point and element.\n */\nconst createElements = (params) => {\n const container = select(params.container);\n let data;\n let sel;\n\n data = params.data;\n if (typeof data === 'number') {\n data = Array(data).fill().map((d, i) => i);\n }\n sel = container.selectAll(params.selector).data(data);\n\n sel = container.selectAll(params.selector).filter(function () {\n return this.parentNode === container.node();\n }).data(params.data);\n\n const selectionMerge = sel.enter().append(params.append).merge(sel).each(function (d, i) {\n params.each(d, select(this), i);\n });\n\n selectionMerge.attr('class', params.className || '');\n sel.exit().remove();\n};\n\n/**\n * Clips an element with given measurement. Basically it is used to hide overflowing portions\n * of any element.\n * @param {SVGElement} container svg element which needs to be clipped.\n * @param {Object} measurement Dimensions of the clipped rectangle.\n * @param {string} id Unique id of the clip element\n */\nconst clipElement = (container, measurement, id) => {\n const clipPathElement = makeElement(select(container), 'clipPath', [1], `#${id}`);\n const clipPathRect = makeElement(clipPathElement, 'rect', [1]);\n clipPathRect.attr('x', measurement.x)\n .attr('y', measurement.x)\n .attr('width', measurement.width)\n .attr('height', measurement.height);\n clipPathElement.attr('clip-path', `url(#${id})`);\n};\n\n/**\n * Returns the element of the corresponding classname.\n * @param {HTMLElement | SVGElement} node html or svg node element.\n * @param {string} className css class to be applied.\n * @return {HTMLElement | SVGElement} html or svg element.\n */\nconst getElementsByClassName = (node, className) => select(node).selectAll(className).nodes();\n\n/**\n * Gets the mouse position relative to an svg type of element\n * @param {SVGElement} element Any svg element like rect, circle, etc.\n * @param {Event} event Event object.\n * @return {Object} x and y position relative to the container element passed.\n */\nconst getMousePos = (element, event) => {\n const boundingClientRect = element.getBoundingClientRect();\n return {\n x: event.x - boundingClientRect.x,\n y: event.y - boundingClientRect.y\n };\n};\n\nconst getClientPoint = (...params) => {\n const pos = clientPoint(...params);\n return {\n x: pos[0],\n y: pos[1]\n };\n};\n\n/** This function appends a dom element in another element.\n * @param {Object} tag The tag name of the element to append\n * @param {Object} mount Mount point fo the element\n * @return {Object} selection of the appended element\n */\nconst createElement = (tag, mount) => select(mount).append(tag).node();\n\n/**\n * Gets the d3 event function\n * @return {Object} d3 event\n */\nconst getEvent = () => d3event;\n\n/**\n * Gets the d3 drag function\n * @return {Object} d3 drag\n */\nconst getD3Drag = () => d3drag;\n\nconst getSmartComputedStyle = (group, css) => {\n let textEl;\n const testText = 'W';\n const mandatoryStyle = {\n 'fill-opacity': 0\n };\n const className = typeof css === 'string' ? css : (css instanceof Array ? css.join(' ') : undefined);\n\n if (group.node() instanceof HTMLElement) {\n textEl = group.append('div').html(testText);\n } else {\n textEl = group.append('text').text(testText);\n }\n\n if (className) {\n textEl.attr('class', className);\n } else if (typeof css === 'object') {\n delete css['fill-opacity'];\n mergeRecursive(mandatoryStyle, css);\n }\n\n textEl.style(mandatoryStyle);\n\n const computedStyle = window.getComputedStyle(textEl.node());\n const styleForSmartLabel = {\n fontSize: computedStyle.fontSize,\n fontFamily: computedStyle.fontFamily,\n fontWeight: computedStyle.fontWeight,\n fontStyle: computedStyle.fontStyle\n };\n\n textEl.remove();\n\n return styleForSmartLabel;\n};\n\nconst hasTouch = () => 'ontouchstart' in document.documentElement;\n\nexport {\n hasTouch,\n selectElement,\n makeElement,\n applyStyle,\n addClass,\n removeClass,\n appendElement,\n setAttrs,\n setStyles,\n createElement,\n createElements,\n clipElement,\n getElementsByClassName,\n getMousePos,\n getEvent,\n getD3Drag,\n getSmartComputedStyle,\n getClientPoint\n};\n","/**\n * This class represents a selection applied on a data array.\n *\n * @class Selection\n */\nclass Selection {\n /**\n * Creates an instance of Selection.\n * @param {Array} data Array of DataObjects.\n * @memberof Selection\n */\n constructor () {\n this._data = [];\n // // map of id to data\n this._idMap = {};\n\n this._mode = '';\n // data.forEach((item, idx) => {\n // const index = item.id || idx;\n // this._idMap[index] = item;\n // });\n // // array to store data in enter phase\n this._enterdata = [];\n // // array to store data in exit phase\n this._exitdata = [];\n }\n /**\n * Gets the object bound to a class\n *\n * @return {Object} current data set bound to the class\n * @memberof Selection\n */\n getObjects () {\n return Object.keys(this._idMap).map(e => this._idMap[e]);\n }\n\n /**\n * This method is used to supply seed data to a selection.\n *\n * @param {Array} newData Seed data to create the enter selection.\n * @param {Functon | undefined } idGetter This function is used to uniqely identify a data entry.\n * @return {Selection} Modified selection.\n * @memberof Selection\n */\n data (newData, idGetter) {\n if (idGetter) {\n this._data = [];\n this._idGetter = idGetter;\n const tempMap = {};\n\n newData.forEach((...params) => {\n const index = idGetter(...params);\n tempMap[index] = params[0];\n });\n // check if any data items have been removed\n const purgedIds = [];\n\n Object.keys(this._idMap).forEach((id) => {\n if (!tempMap[id]) {\n purgedIds.push(id);\n }\n });\n\n Object.keys(tempMap).forEach((id) => {\n if (!this._idMap[id]) {\n this._enterdata.push(tempMap[id]);\n } else {\n this._idMap[id] = tempMap[id];\n this._data.push(tempMap[id]);\n }\n });\n // move the purged items to exit selection\n purgedIds.forEach((id) => {\n const purged = this._idMap[id];\n this._exitdata.push(purged);\n // this._data = this._data.slice(id, 1);\n delete this._idMap[id];\n });\n // this._data = this._data.slice(temp, this._data.length);\n\n return this;\n }\n // no id getter supplied so use indices\n if (newData.length > this._data.length) {\n const startIdx = this._data.length;\n for (let i = startIdx; i < newData.length; i += 1) {\n this._enterdata.push(newData[i]);\n }\n } else {\n // push to exit selection\n const temp = newData.length;\n for (let i = temp; i < this._data.length; i += 1) {\n const purged = this._data[i];\n delete this._idMap[purged.id];\n this._exitdata.push(purged);\n }\n this._data = this._data.slice(temp, this._data.length);\n }\n return this;\n }\n\n /**\n * Applies the supplied callback to each data element\n * and returns a new selection.\n *\n * @param {Function} callback Callback to execute on each item.\n * @return {Selection} New selection with data created using callback.\n * @memberof EnterSelection\n */\n append (callback) {\n this[`_${this._mode}data`].forEach((...params) => {\n const data = params[0];\n const id = this._idGetter ? this._idGetter(...params) : (data.id || params[1]);\n this._idMap[id] = callback(...params);\n });\n this._mode = '';\n return this;\n }\n\n /**\n * This method returns an enter selection that\n * allows or update operations.\n *\n * @return {EnterSelection} Instance of enter selection.\n * @memberof Selection\n */\n enter () {\n this._mode = 'enter';\n return this;\n // return new EnterSelection(this._enterdata, this._idMap, this._idGetter);\n }\n\n /**\n * This method is used to set key value pairs\n * on data objects.\n *\n * @param {string} key Name of property.\n * @param {any} value Value of property.\n * @return {Selection} Modified selection.\n * @memberof Selection\n */\n attr (key, value) {\n this._data.forEach(item => item.attr(key, value));\n return this;\n }\n\n /**\n * This method merges the data of one selection with another.\n *\n * @param {Selection} selection Instance of selection.\n * @return {Selection} Modified selection.\n * @memberof Selection\n */\n merge (selection) {\n selection._data.forEach((...params) => {\n const id = this._idGetter ? this._idGetter(...params) : (params[0].id || params[1]);\n this._idMap[id] = params[0];\n this._data.push(params[0]);\n });\n // reset enter selection\n this._enterdata = [];\n return this;\n }\n\n /**\n * Returns a selection with exit data.\n *\n * @return {Selection} Instance of selection.\n * @memberof Selection\n */\n exit () {\n this._mode = 'exit';\n // const exitdata = this._exitdata;\n // const exitSelection = new Selection(exitdata);\n // this._exitdata = [];\n return this;\n }\n\n each (fn) {\n Object.keys(this._idMap).forEach((e) => {\n fn(this._idMap[e]);\n });\n return this;\n }\n\n map (fn) {\n Object.keys(this._idMap).forEach((...params) => {\n this._idMap[params[0]] = fn(this._idMap[params[0]], ...params);\n });\n return this;\n }\n\n /**\n * Executes the cleanup operation associated with data objets.\n *\n * @memberof Selection\n */\n remove () {\n // do cleanup on DDO's\n const data = this[`_${this._mode}data`];\n\n data.forEach(item => item.remove());\n if (this._mode === '') {\n this.each(e => e.remove());\n }\n this[`_${this._mode}data`] = [];\n this._mode = '';\n }\n}\n\nexport default Selection;\n","import { getUniqueId } from '../index';\n/**\n * Represents the base class that all objects that form\n * the data for a selection must inherit from.\n *\n * @class DataObject\n */\nclass DataObject {\n/**\n * Creates an instance of DataObject.\n * @memberof DataObject\n */\n constructor () {\n this._id = getUniqueId();\n }\n /**\n * Returns the id.\n *\n * @readonly\n * @memberof DataObject\n */\n get id () {\n return this._id;\n }\n\n /**\n * Sets the value corresponding to supplied key.\n *\n * @param {string} key The property name.\n * @param {any} value Value associated with prop.\n * @memberof DataObject\n */\n attr (key, value) {\n this[key] = value;\n }\n\n /**\n * Clean up code to be executed by each object.\n *\n * @override\n * @memberof DataObject\n */\n remove () {\n // cleanup\n }\n}\n\nexport default DataObject;\n","const events = [\n 'initialized',\n 'beforeupdate',\n 'updated',\n 'beforedraw',\n 'drawn',\n 'beforeremove',\n 'removed'\n];\n\nconst compositions = [\n 'canvas',\n 'unit',\n 'layer',\n 'axis',\n 'facet-headers',\n 'legend',\n 'caption'\n];\n\nconst EVENT_LIST = [];\n\ncompositions.forEach((composition) => {\n events.forEach((event) => {\n EVENT_LIST.push(`${composition}.${event}`);\n });\n});\n\nexport default EVENT_LIST;\n","import EVENT_LIST from './event-list';\n\n/**\n * At first call it accepts one function\n * calling it second time accepts notification object.\n * notification object then called with first accepted function\n *\n * @param {Function} resolveFn a promise's resolve function\n * @return {Function} a function to accept notification object\n */\nconst resolver = resolveFn => notification => resolveFn(notification);\n\n/**\n * Checks if the property string is present in the source object\n *\n * @param {Object} source source object whom you want to check the property\n * @param {string} property key name that need to be checked\n * @return {boolean} returns true if the property found in the source object\n */\nconst hasOwn = (source, property) => Object.prototype.hasOwnProperty.call(source, property);\n\n/**\n * LifeCycleManager which goes as a dependendecy to a muze\n * it accepts notification from the entire library throughout\n * the exeecution life\n *\n * @export\n * @class LifeCycleManager\n */\nexport default class LifeCycleManager {\n\n /**\n * Creates an instance of LifeCycleManager.\n * @memberof LifeCycleManager\n */\n constructor () {\n this._eventList = EVENT_LIST;\n this._promises = new Map();\n this._notifiers = {};\n this._lifeCycles = {};\n this._unreleasedLifeCycles = {};\n this._boot();\n }\n\n /**\n * Fills all the notifiers with resolver callback\n *\n * @memberof LifeCycleManager\n */\n _boot () {\n this._notifiers = this._eventList.reduce((acc, name) => {\n acc[name] = resolver;\n return acc;\n }, {});\n this._preparePromises();\n }\n\n /**\n * Public method which gives the promise corresponding\n * to the event name\n *\n * @param {string} eventName name of the event like `canvas.drawn`\n * @return {promise} promise that is passed to the user\n * @memberof LifeCycleManager\n */\n retrieve (eventName) {\n return this._promises.get(eventName);\n }\n\n /**\n * Creates a promise that will be passed to user's callback\n *\n * @param {string} eventName name of the event like `canvas.drawn`\n * @return {promise} a pending promise waiting for resolve to be called\n * @memberof LifeCycleManager\n */\n _makeNotifierPromise (eventName) {\n return new Promise((resolve) => {\n this._notifiers[eventName] = this._notifiers[eventName](resolve);\n });\n }\n\n /**\n * Prepares the promise map with pending promises\n * all the promises are in a pending state where their's\n * resolve function waiting to be called with notification object\n * @memberof LifeCycleManager\n */\n _preparePromises () {\n this._eventList.forEach((eventName) => {\n this._promises.set(eventName, this._makeNotifierPromise(eventName));\n });\n }\n\n /**\n * Resolves the promise with notification object\n *\n * @param {string} eventName name of the event in the system\n * @param {Object} notification notification object\n * @param {string} notification.formalName name of the sender creating the notification\n * @param {Object} notification.client instance or array of instances sending the notification\n * @param {string} notification.action the stage name when the event happened like `beforedraw`\n *\n * @memberof LifeCycleManager\n */\n _resolvePromise (eventName, notification) {\n this._notifiers[eventName](notification);\n }\n\n /**\n * Public method which is being called by different\n * subcompoents of the system at different execution atages\n * @param {Object} notification notification object\n * @param {string} notification.formalName name of the sender creating the notification\n * @param {Object} notification.client instance or array of instances sending the notification\n * @param {string} notification.action the stage name when the event happened like `beforedraw`\n * @memberof LifeCycleManager\n */\n notify (notification) {\n // get the composition name from notification\n // or from static formalName() method\n const composition = notification.formalName || notification.client.constructor.formalName();\n notification.formalName = composition;\n this._releasePromisesFromCache();\n this._notify(composition, notification);\n }\n\n /**\n * Notify user the with promsie in a callback\n * if callback not found then cache it\n *\n * @param {string} composition\n * @param {Object} notification notification object\n * @param {string} notification.formalName name of the sender creating the notification\n * @param {Object} notification.client instance or array of instances sending the notification\n * @param {string} notification.action the stage name when the event happened like `beforedraw`\n * @memberof LifeCycleManager\n */\n _notify (composition, notification) {\n const stage = notification.action;\n const eventName = `${composition}.${stage}`;\n\n // resolves promise with the notification object\n this._resolvePromise(eventName, notification);\n\n // get the promise from the promise map\n const promise = this.retrieve(eventName);\n\n if (this._lifeCycles[composition]) {\n if (this._lifeCycles[composition][stage]) {\n // if user given call back exists, then call with promise\n this._callLifeCycleCallback(composition, stage, promise);\n } else {\n // otherwise cache the promise\n this._cachePromise(composition, stage, promise);\n }\n } else {\n this._cachePromise(composition, stage, promise);\n }\n }\n\n /**\n * Calls the user's callback with callback\n *\n * @param {string} composition name of the compositon like `canvas`\n * @param {string} stage the stage name when the event happened like `beforedraw`\n * @param {promise} promise promise that is passed to the user\n * @memberof LifeCycleManager\n */\n _callLifeCycleCallback (composition, stage, promise) {\n const eventName = `${composition}.${stage}`;\n this._lifeCycles[composition][stage](promise);\n this._resetTargetPromise(eventName);\n }\n\n /**\n * Try to clear the cached promsies once we have\n * macthed callbacks from the user\n *\n * @memberof LifeCycleManager\n */\n _releasePromisesFromCache () {\n const compositions = Object.keys(this._unreleasedLifeCycles);\n compositions.forEach((composition) => {\n const stages = Object.keys(this._unreleasedLifeCycles[composition]);\n stages.forEach((stage) => {\n if (this._lifeCycles[composition]) {\n if (this._lifeCycles[composition][stage]) {\n // take the promise from unreleased lifeCycles\n const promise = this._unreleasedLifeCycles[composition][stage];\n // call the user given callback with that promise\n this._callLifeCycleCallback(composition, stage, promise);\n // delete promise from unreleased lifeCycles\n delete this._unreleasedLifeCycles[composition][stage];\n }\n }\n });\n });\n }\n\n /**\n * Cache the promise in the map. This cache\n * then get consumed if we get user callbacks\n * @param {string} composition name of the compositon like `canvas`\n * @param {string} stage the stage name when the event happened like `beforedraw`\n * @param {promise} promise promise that is passed to the user\n * @memberof LifeCycleManager\n */\n _cachePromise (composition, stage, promise) {\n if (!hasOwn(this._unreleasedLifeCycles, composition)) {\n this._unreleasedLifeCycles[composition] = {};\n }\n\n if (!hasOwn(this._unreleasedLifeCycles[composition], stage)) {\n this._unreleasedLifeCycles[composition][stage] = {};\n }\n this._unreleasedLifeCycles[composition][stage] = promise;\n }\n\n /**\n * It register's the callbacks gievn the user\n *\n * @param {Object} [lifeCycles={}] a object with list of callbacks\n * @memberof LifeCycleManager\n */\n register (lifeCycles = {}) {\n this._lifeCycles = lifeCycles;\n // as we get all the callbacks, try to call them\n // from unreleased promise map\n this._releasePromisesFromCache();\n }\n\n /**\n * Reset the promise into pending state\n *\n * @param {string} eventName name of the event happening\n * @memberof LifeCycleManager\n */\n _resetTargetPromise (eventName) {\n setTimeout(() => {\n this._notifiers[eventName] = resolver;\n this._promises.set(eventName, this._makeNotifierPromise(eventName));\n }, 0);\n }\n}\n","import LifeCycleManager from './lifecycle-manager';\n\nexport default LifeCycleManager;\n","export const DRAG = 'drag';\nexport const HOVER = 'hover';\nexport const SELECTIONDRAG = 'selectiondrag';\nexport const CLICK = 'click';\nexport const LONGTOUCH = 'longtouch';\nexport const TOUCHDRAG = 'touchdrag';\nexport const ALL_ACTIONS = '*';\n","const SELECTION_NEW_ENTRY = 1;\nconst SELECTION_NEW_EXIT = -1;\nconst SELECTION_NULL = 0;\nconst SELECTION_OLD_ENTRY = 2;\nconst SELECTION_OLD_EXIT = -2;\n\nexport {\n SELECTION_NEW_ENTRY,\n SELECTION_NEW_EXIT,\n SELECTION_NULL,\n SELECTION_OLD_ENTRY,\n SELECTION_OLD_EXIT\n};\n","import {\n SELECTION_NEW_ENTRY, SELECTION_NEW_EXIT, SELECTION_NULL, SELECTION_OLD_ENTRY, SELECTION_OLD_EXIT\n} from '../enums/selection';\n/* eslint-disable guard-for-in */\n\n/**\n * This component is used to keep track of the row tuples of the data which gets added and removed.\n * @class SelectionSet\n */\nclass SelectionSet {\n /**\n * Creates an instance of selection set\n * @param {Array.} completeSet Set of unique ids.\n */\n constructor (completeSet, _volatile) {\n this.completeSet = completeSet;\n this._set = completeSet.reduce((obj, key) => {\n obj[key] = SELECTION_NULL;\n return obj;\n }, {});\n this._volatile = _volatile;\n this._completeSetCount = completeSet.length;\n this._lockedSelection = {};\n this._resetted = true;\n }\n\n /**\n * Adds a set of ids to the selection set.\n * @param {Array.} ids Array of unique ids\n * @return {SelectionSet} Instance of selection set.\n */\n add (ids) {\n this._resetted = false;\n\n const set = this._set;\n // from exitset to entryset\n ids.forEach((i) => {\n set[i] = SELECTION_NEW_ENTRY;\n });\n\n for (const key in set) {\n if (set[key] !== SELECTION_NEW_ENTRY && set[key] !== SELECTION_OLD_ENTRY) {\n set[key] = set[key] < 0 ? SELECTION_OLD_EXIT : SELECTION_NEW_EXIT;\n }\n }\n return this;\n }\n\n /**\n * Adds a set of ids to the selection set.\n * @param {Array.} ids Array of unique ids\n * @return {SelectionSet} Instance of selection set.\n */\n update (ids) {\n const set = this._set;\n // from exitset to entryset\n ids.forEach((i) => {\n set[i] = SELECTION_OLD_ENTRY;\n });\n\n return this;\n }\n\n /**\n * Adds a set of ids to the selection set.\n * @param {Array.} ids Array of unique ids\n * @return {SelectionSet} Instance of selection set.\n */\n updateEntry () {\n const set = this._set;\n\n // from exitset to entryset\n for (const key in set) {\n set[key] = set[key] === SELECTION_NEW_ENTRY ? SELECTION_OLD_ENTRY : set[key];\n }\n return this;\n }\n\n /**\n * Adds a set of ids to the selection set.\n * @param {Array.} ids Array of unique ids\n * @return {SelectionSet} Instance of selection set.\n */\n updateExit () {\n const set = this._set;\n // from exitset to entryset\n for (const key in set) {\n set[key] = set[key] === SELECTION_NEW_EXIT ? SELECTION_OLD_EXIT : set[key];\n }\n return this;\n }\n\n /**\n * Removes the ids from the selection set.\n * @param {Array.} ids Array of unique ids\n * @return {SelectionSet} Instance of selection set\n */\n remove (ids) {\n this._resetted = false;\n\n const set = this._set;\n ids.forEach((i) => {\n set[i] = SELECTION_NEW_EXIT;\n });\n\n for (const key in set) {\n if (set[key] !== SELECTION_NEW_EXIT && set[key] !== SELECTION_OLD_EXIT) {\n set[key] = set[key] === 0 ? SELECTION_NEW_ENTRY : SELECTION_OLD_ENTRY;\n }\n }\n\n return this;\n }\n\n getSets () {\n const set = this._set;\n const retObj = {\n entrySet: [[], []],\n exitSet: [[], []],\n completeSet: []\n };\n\n for (const key in set) {\n if (set[key] > 0) {\n set[key] === SELECTION_OLD_ENTRY && retObj.entrySet[0].push(key);\n set[key] === SELECTION_NEW_ENTRY && retObj.entrySet[1].push(key);\n } else if (set[key] < 0) {\n set[key] === SELECTION_OLD_EXIT && retObj.exitSet[0].push(key);\n set[key] === SELECTION_NEW_EXIT && retObj.exitSet[1].push(key);\n }\n retObj.completeSet.push(key);\n }\n\n ['entrySet', 'exitSet'].forEach((type) => {\n retObj[type] = retObj[type].map(e => e.map(Number));\n });\n retObj.completeSet = retObj.completeSet.map(Number);\n\n return retObj;\n }\n\n /**\n * Resets the selection set to initial state. It sets the value of every unique id value to\n * null in the selection set.\n * @return {SelectionSet} Instance of selection set.\n */\n reset (ids) {\n const set = this._set;\n if (ids) {\n ids.forEach((i) => {\n set[i] = SELECTION_NULL;\n });\n } else {\n const lockedSel = this._lockedSelection;\n for (const key in set) {\n if (!(key in lockedSel)) {\n set[key] = SELECTION_NULL;\n }\n }\n }\n this._resetted = true;\n return this;\n }\n\n /**\n * Gets the set of ids which are added in the selection set.\n * @return {Array.} Array of unique ids\n */\n getEntrySet () {\n const set = this._set;\n const addSet = [];\n\n for (const key in set) {\n set[key] === SELECTION_NEW_ENTRY && addSet.push(key);\n }\n\n return addSet;\n }\n\n /**\n * Returns a set of unique ids which are already present in entry set\n * @param {Array} addSet Array of unique ids which are added\n *\n * @return {Array} Array of unique ids which are already in old entry set or new entry set\n */\n getExistingEntrySet (addSet) {\n const set = this._set;\n return addSet.filter(d => set[d] === SELECTION_NEW_ENTRY || set[d] === SELECTION_OLD_ENTRY);\n }\n\n getExistingExitSet (removeSet) {\n const set = this._set;\n return removeSet.filter(d => set[d] === SELECTION_NEW_EXIT || set[d] === SELECTION_OLD_EXIT);\n }\n\n /**\n * Gets the set of ids which are added in the selection set.\n * @return {Array.} Array of unique ids\n */\n getOldEntry () {\n const set = this._set;\n const updateSet = [];\n\n for (const key in set) {\n set[key] === SELECTION_OLD_ENTRY && updateSet.push(key);\n }\n return updateSet;\n }\n\n /**\n * Gets the set of ids which are added in the selection set.\n * @return {Array.} Array of unique ids\n */\n getOldExit () {\n const set = this._set;\n const updateSet = [];\n\n for (const key in set) {\n set[key] === SELECTION_OLD_EXIT && updateSet.push(key);\n }\n\n return updateSet;\n }\n\n /**\n * Gets the set of ids which are in the remove set.\n * @return {Array.} Array of unique ids\n */\n getExitSet () {\n const set = this._set;\n const removeSet = [];\n\n for (const key in set) {\n set[key] === SELECTION_NEW_EXIT && removeSet.push(key);\n }\n return removeSet;\n }\n\n getCompleteSet () {\n const set = this._set;\n const completeSet = [];\n\n for (const key in set) {\n completeSet.push(key);\n }\n\n return completeSet;\n }\n\n getCompleteSetCount () {\n return this._completeSetCount;\n }\n\n resetted () {\n return this._resetted;\n }\n\n /**\n * Swaps the add set and remove set in the selection set.\n * @return {SelectionSet} Instance of selection set.\n */\n toggle () {\n const set = this._set;\n\n for (const key in set) {\n if (set[key] === SELECTION_NEW_ENTRY) {\n set[key] = SELECTION_NEW_EXIT;\n } else if (set[key] === SELECTION_NEW_EXIT) {\n set[key] = SELECTION_NEW_ENTRY;\n } else if (set[key] === SELECTION_OLD_ENTRY) {\n set[key] = SELECTION_OLD_EXIT;\n } else {\n set[key] = SELECTION_OLD_ENTRY;\n }\n }\n\n return this;\n }\n}\n\nexport default SelectionSet;\n","import { clone } from 'muze-utils';\nimport * as SELECTION from '../enums/selection';\n\nexport const initializeSideEffects = (context, sideEffects) => {\n const sideEffectsMap = context._sideEffects;\n\n sideEffects = sideEffects instanceof Array ? sideEffects : Object.values(sideEffects);\n sideEffects.forEach((SideEffect) => {\n const sideEffectInstance = sideEffectsMap[SideEffect.formalName()];\n sideEffectsMap[SideEffect.formalName()] = sideEffectInstance || new SideEffect(context);\n });\n return sideEffectsMap;\n};\n\nexport const initializeBehaviouralActions = (context, actions) => {\n const dispatchableBehaviours = {};\n\n actions = actions instanceof Array ? actions : Object.values(actions);\n actions.forEach((Action) => {\n dispatchableBehaviours[Action.formalName()] = new Action(context);\n });\n return dispatchableBehaviours;\n};\n\nexport const initializePhysicalActions = (context, actions) => {\n const physicalActions = {};\n\n for (const name in actions) {\n if (!({}).hasOwnProperty.call(name, actions)) {\n physicalActions[name] = actions[name](context);\n }\n }\n return physicalActions;\n};\n\nexport const changeSideEffectAvailability = (context, fn, toEnable) => {\n const sideEffects = context.sideEffects();\n for (const key in sideEffects) {\n if ({}.hasOwnProperty.call(sideEffects, key)) {\n let change = true;\n if (fn && fn(key) === false) {\n change = false;\n }\n if (change) {\n toEnable ? sideEffects[key].enable() : sideEffects[key].disable();\n }\n }\n }\n};\n\nexport const getMergedSet = set => [...new Set([...set[0], ...set[1]])];\n\nexport const getSourceFields = (propagationInf, criteria = {}) => {\n const sourceIdentifiers = propagationInf.sourceIdentifiers;\n let sourceFields;\n if (sourceIdentifiers) {\n sourceFields = sourceIdentifiers.getSchema().map(d => d.name);\n } else if (criteria instanceof Array) {\n sourceFields = criteria[0];\n } else {\n sourceFields = Object.keys(criteria || {});\n }\n return sourceFields;\n};\n\nconst conditionsMap = {\n newEntry: [SELECTION.SELECTION_NEW_ENTRY],\n oldEntry: [SELECTION.SELECTION_OLD_ENTRY],\n mergedEnter: [SELECTION.SELECTION_NEW_ENTRY, SELECTION.SELECTION_OLD_ENTRY],\n newExit: [SELECTION.SELECTION_NEW_EXIT],\n oldExit: [SELECTION.SELECTION_OLD_EXIT],\n mergedExit: [SELECTION.SELECTION_NEW_EXIT, SELECTION.SELECTION_OLD_EXIT],\n complete: []\n};\n\nexport const getModelFromSet = (type, model, set) => {\n if (model) {\n return model.select((fields, i) =>\n (conditionsMap[type].some(condition => set[i] === condition)), {\n saveChild: false\n });\n }\n return null;\n};\n\nexport const getSetInfo = (type, set, config) => {\n let model = null;\n const filteredDataModel = config.filteredDataModel;\n const selectionSet = config.selectionSet;\n if (!config.propagationData) {\n if (selectionSet.resetted()) {\n model = null;\n } else {\n model = getModelFromSet(type, config.dataModel, config.selectionSet._set);\n }\n } else if (filteredDataModel) {\n model = type === 'mergedEnter' ? filteredDataModel[0] : filteredDataModel[1];\n }\n return {\n uids: set,\n length: set.length,\n model\n };\n};\n\nexport const getSideEffects = (behaviour, behaviourEffectMap) => {\n const sideEffects = [];\n for (const key in behaviourEffectMap) {\n const behaviours = key.split(',');\n const found = behaviours.some(d => d === behaviour);\n if (found) {\n sideEffects.push({\n effects: behaviourEffectMap[key],\n behaviours\n });\n }\n }\n return sideEffects;\n};\n\nexport const unionSets = (context, behaviours) => {\n let combinedSet = {};\n const models = {\n mergedEnter: null,\n mergedExit: null\n };\n behaviours.forEach((behaviour) => {\n const entryExitSet = context._entryExitSet[behaviour];\n if (entryExitSet) {\n combinedSet = Object.assign(combinedSet, clone(entryExitSet));\n ['mergedEnter', 'mergedExit'].forEach((type) => {\n const model = entryExitSet[type].model;\n let existingModel = models[type];\n if (!existingModel) {\n existingModel = models[type] = model;\n } else {\n existingModel = models[type] = model.union(existingModel);\n }\n combinedSet[type].model = existingModel;\n });\n }\n });\n return combinedSet;\n};\n","import {\n mergeRecursive,\n hasTouch,\n filterPropagationModel,\n FieldType,\n selectElement,\n isSimpleObject\n} from 'muze-utils';\nimport { ALL_ACTIONS } from './enums/actions';\nimport SelectionSet from './selection-set';\nimport {\n initializeBehaviouralActions,\n initializeSideEffects,\n changeSideEffectAvailability,\n initializePhysicalActions,\n unionSets,\n getSideEffects\n} from './helper';\n\n/**\n * Relient firebolt is responsible for dispatching behaviours. It has only behaviours which can be\n * dispatched without any physical action being triggered.\n */\nexport default class Firebolt {\n constructor (context, actions, sideEffects, behaviourEffectMap) {\n this.context = context;\n this._sideEffectDefinitions = {};\n this._sideEffects = {};\n this._propagationInf = {};\n this._actions = {\n behavioural: {},\n physical: {}\n };\n this._selectionSet = {};\n this._volatileSelectionSet = {};\n this._propagationFields = {};\n this._sourceSideEffects = {\n selectionBox: () => false\n };\n this._propagationBehaviourMap = {};\n this._sourceBehaviours = {};\n this._actionBehaviourMap = {};\n this._config = {};\n this._behaviourEffectMap = {};\n this._entryExitSet = {};\n this._actionHistory = {};\n this._queuedSideEffects = {};\n this._mappedActions = {};\n\n this.mapSideEffects(behaviourEffectMap);\n this.registerBehaviouralActions(actions.behavioural);\n this.registerSideEffects(sideEffects);\n this.registerPhysicalBehaviouralMap(actions.physicalBehaviouralMap);\n this.registerPhysicalActions(actions.physical);\n }\n\n config (...config) {\n if (config.length) {\n const conf = this._config = mergeRecursive(this._config, config[0]);\n const sideEffects = this.sideEffects();\n for (const key in sideEffects) {\n if ({}.hasOwnProperty.call(sideEffects, key)) {\n const sideEffectConf = conf[key];\n sideEffectConf && sideEffects[key].config(sideEffectConf);\n }\n }\n return this;\n }\n return this._config;\n }\n\n mapSideEffects (behEffectMap) {\n const behaviourEffectMap = this._behaviourEffectMap;\n for (const key in behEffectMap) {\n if ({}.hasOwnProperty.call(behEffectMap, key)) {\n const sideEffects = behEffectMap[key] || [];\n let preventDefaultActions = false;\n let effectNames;\n if (isSimpleObject(sideEffects)) {\n effectNames = sideEffects.effects;\n preventDefaultActions = sideEffects.preventDefaultActions;\n } else {\n effectNames = sideEffects;\n }\n !behaviourEffectMap[key] && (behaviourEffectMap[key] = []);\n this._behaviourEffectMap[key] = [...new Set(preventDefaultActions ? effectNames :\n [...behaviourEffectMap[key], ...effectNames])];\n }\n }\n return this;\n }\n\n registerBehaviouralActions (actions) {\n const behaviours = initializeBehaviouralActions(this, actions);\n this.prepareSelectionSets(behaviours);\n Object.assign(this._actions.behavioural, behaviours);\n return this;\n }\n\n prepareSelectionSets () {\n return this;\n }\n\n registerSideEffects (sideEffects) {\n for (const key in sideEffects) {\n this._sideEffectDefinitions[sideEffects[key].formalName()] = sideEffects[key];\n }\n return this;\n }\n\n applySideEffects (sideEffects, selectionSet, payload) {\n const sideEffectStore = this.sideEffects();\n const actionHistory = this._actionHistory;\n const queuedSideEffects = this._queuedSideEffects;\n sideEffects.forEach((sideEffect) => {\n let options;\n let name;\n const effects = sideEffect.effects;\n const behaviours = sideEffect.behaviours;\n const combinedSet = unionSets(this, behaviours, selectionSet);\n effects.forEach((effect) => {\n if (typeof effect === 'object') {\n name = effect.name;\n options = effect.options;\n } else {\n name = effect;\n }\n\n const sideEffectInstance = sideEffectStore[name];\n if (sideEffectInstance.isEnabled()) {\n if (!sideEffectInstance.constructor.mutates() &&\n Object.values(actionHistory).some(d => d.isMutableAction)) {\n queuedSideEffects[`${name}-${behaviours.join()}`] = {\n name,\n params: [combinedSet, payload, options]\n };\n } else {\n this.dispatchSideEffect(name, combinedSet, payload, options);\n }\n }\n });\n });\n return this;\n }\n\n dispatchSideEffect (name, selectionSet, payload, options = {}) {\n const sideEffectStore = this.sideEffects();\n const sideEffect = sideEffectStore[name];\n let disable = false;\n if (options.filter && options.filter(sideEffect)) {\n disable = true;\n }\n !disable && sideEffectStore[name].apply(selectionSet, payload, options);\n }\n\n registerPropagationBehaviourMap (map) {\n this._propagationBehaviourMap = Object.assign(this._propagationBehaviourMap, map || {});\n return this;\n }\n\n dispatchBehaviour (behaviour, payload, propagationInfo = {}) {\n const propagate = propagationInfo.propagate !== undefined ? propagationInfo.propagate : true;\n const behaviouralActions = this._actions.behavioural;\n const action = behaviouralActions[behaviour];\n const behaviourEffectMap = this._behaviourEffectMap;\n const sideEffects = getSideEffects(behaviour, behaviourEffectMap);\n this._propagationInf = propagationInfo;\n\n if (action) {\n const selectionSet = action.dispatch(payload);\n const propagationSelectionSet = this.getPropagationSelectionSet(selectionSet);\n this._entryExitSet[behaviour] = propagationSelectionSet;\n const shouldApplySideEffects = this.shouldApplySideEffects(propagate);\n\n if (propagate) {\n this.propagate(behaviour, payload, selectionSet.find(d => d.sourceSelectionSet), sideEffects);\n }\n if (shouldApplySideEffects) {\n const applicableSideEffects = this.getApplicableSideEffects(sideEffects, payload, propagationInfo);\n this.applySideEffects(applicableSideEffects, propagationSelectionSet, payload);\n }\n }\n\n return this;\n }\n\n getPropagationSelectionSet (selectionSet) {\n return selectionSet.find(d => !d.sourceSelectionSet);\n }\n\n shouldApplySideEffects () {\n return true;\n }\n\n changeBehaviourStateOnPropagation (behaviour, value) {\n if (value instanceof Function) {\n this._sourceBehaviours[behaviour] = value;\n } else {\n this._sourceBehaviours[behaviour] = () => value;\n }\n return this;\n }\n\n changeSideEffectStateOnPropagation (sideEffect, value) {\n if (value instanceof Function) {\n this._sourceSideEffects[sideEffect] = value;\n } else {\n this._sourceSideEffects[sideEffect] = () => value;\n }\n }\n\n propagate () {\n return this;\n }\n\n sideEffects (...sideEffects) {\n if (sideEffects.length) {\n this._sideEffects = sideEffects[0];\n return this;\n }\n return this._sideEffects;\n }\n\n enableSideEffects (fn) {\n changeSideEffectAvailability(this, fn, true);\n return this;\n }\n\n disableSideEffects (fn) {\n changeSideEffectAvailability(this, fn, false);\n return this;\n }\n\n dissociateBehaviour (behaviour, physicalAction) {\n const actionBehaviourMap = this._actionBehaviourMap;\n for (const key in actionBehaviourMap) {\n if (key === physicalAction) {\n const behaviourMap = actionBehaviourMap[key];\n behaviourMap.behaviours = behaviourMap.behaviours.filter(d => d !== behaviour);\n }\n }\n\n return this;\n }\n\n dissociateSideEffect (sideEffect, behaviour) {\n const behaviourEffectMap = this._behaviourEffectMap;\n behaviourEffectMap[behaviour] = behaviourEffectMap[behaviour].filter(d => (d.name || d) !== sideEffect);\n return this;\n }\n\n getApplicableSideEffects (sideEffects) {\n return sideEffects;\n }\n\n attachPropagationListener (dataModel) {\n dataModel.unsubscribe('propagation');\n dataModel.on('propagation', this.onDataModelPropagation());\n return this;\n }\n\n onDataModelPropagation () {\n return (propValue) => {\n const payload = propValue.payload;\n const action = payload.action;\n\n this.dispatchBehaviour(action, payload, {\n propagate: false\n });\n };\n }\n\n createSelectionSet (uniqueIds, behaviouralActions) {\n const behaviours = behaviouralActions || this._actions.behavioural;\n const selectionSet = this._selectionSet;\n const volatileSelectionSet = this._volatileSelectionSet;\n\n for (const key in behaviours) {\n if ({}.hasOwnProperty.call(behaviours, key)) {\n selectionSet[key] = new SelectionSet(uniqueIds);\n volatileSelectionSet[key] = new SelectionSet(uniqueIds, true);\n }\n }\n this._volatileSelectionSet = volatileSelectionSet;\n this.selectionSet(selectionSet);\n return this;\n }\n\n selectionSet (...selectionSet) {\n if (selectionSet.length) {\n this._selectionSet = selectionSet[0];\n return this;\n }\n return this._selectionSet;\n }\n\n initializeSideEffects () {\n const sideEffectDefinitions = this._sideEffectDefinitions;\n this.sideEffects(initializeSideEffects(this, sideEffectDefinitions));\n return this;\n }\n\n registerPhysicalActions (actions) {\n const initedActions = initializePhysicalActions(this, actions);\n Object.assign(this._actions.physical, initedActions);\n return this;\n }\n\n propagateWith (action, fields, append = false) {\n const behaviouralActions = this._actions.behavioural;\n if (fields.length) {\n if (action === ALL_ACTIONS) {\n for (const key in behaviouralActions) {\n this._propagationFields[key] = {\n fields,\n append\n };\n }\n } else {\n this._propagationFields[action] = {\n fields,\n append\n };\n }\n return this;\n }\n return this._propagationFields;\n }\n\n /**\n * Map actions and behaviours\n * @return {Firebolt} Firebolt instance\n */\n mapActionsAndBehaviour () {\n const initedPhysicalActions = this._actions.physical;\n const map = this._actionBehaviourMap;\n const mappedActions = this._mappedActions;\n\n for (const action in map) {\n if (!({}).hasOwnProperty.call(action, map)) {\n let target;\n const mapObj = map[action];\n target = mapObj.target;\n const touch = mapObj.touch;\n if (!target) {\n target = this.context.getDefaultTargetContainer();\n }\n const bind = hasTouch() ? touch === true || touch === undefined : !touch;\n const keyName = `${action}-${mapObj.behaviours.join()}`;\n bind && !mappedActions[keyName] && this.bindActionWithBehaviour(initedPhysicalActions[action],\n target, mapObj.behaviours);\n mappedActions[keyName] = true;\n }\n }\n return this;\n }\n\n registerPhysicalBehaviouralMap (map) {\n Object.assign(this._actionBehaviourMap, map);\n return this;\n }\n\n /**\n * Binds a target element with an action.\n *\n * @param {Function} action Action method\n * @param {string} target Class name of element\n * @param {Array} behaviourList Array of behaviours\n * @return {FireBolt} Instance of firebolt\n */\n bindActionWithBehaviour (action, targets, behaviourList) {\n if (typeof (targets) === 'string') {\n targets = [targets];\n }\n targets.forEach((target) => {\n const mount = this.context.mount();\n const nodes = target.node instanceof Function ? target : selectElement(mount).selectAll(target);\n if (behaviourList.length && !nodes.empty()) {\n if (nodes instanceof Array) {\n nodes.forEach((node) => {\n action(selectElement(node), behaviourList);\n });\n } else {\n action(nodes, behaviourList);\n }\n }\n });\n return this;\n }\n\n getPropagationInf () {\n return this._propagationInf;\n }\n\n getAddSetFromCriteria (criteria, propagationInf = {}) {\n const context = this.context;\n const filteredDataModel = propagationInf.data ? propagationInf.data :\n context.getDataModelFromIdentifiers(criteria, 'all');\n const xFields = context.fields().x || [];\n const yFields = context.fields().y || [];\n const xMeasures = xFields.every(field => field.type() === FieldType.MEASURE);\n const yMeasures = yFields.every(field => field.type() === FieldType.MEASURE);\n return {\n model: filteredDataModel,\n uids: criteria === null ? null : (propagationInf.data ? filterPropagationModel(this.getFullData(),\n propagationInf.data[0], xMeasures && yMeasures).getData().uids : filteredDataModel[0].getData().uids)\n };\n }\n\n getSelectionSets (action) {\n const sourceId = this.context.id();\n const propagationInf = this._propagationInf || {};\n const propagationSource = propagationInf.sourceId;\n let applicableSelectionSets = [];\n if (propagationSource !== sourceId) {\n applicableSelectionSets = [this._volatileSelectionSet[action]];\n }\n\n if (propagationSource) {\n applicableSelectionSets.push(this.selectionSet()[action]);\n }\n return applicableSelectionSets;\n }\n\n getFullData () {\n return this.context.data();\n }\n\n resetted () {\n return this._resetted;\n }\n\n getEntryExitSet (behaviour) {\n return this._entryExitSet[behaviour];\n }\n}\n","import { getSetInfo, getMergedSet, getSourceFields } from '../../helper';\n\nexport default class GenericBehaviour {\n constructor (firebolt) {\n this.firebolt = firebolt;\n this._enabled = true;\n }\n\n dispatch (payload) {\n const criteria = payload.criteria;\n const firebolt = this.firebolt;\n const formalName = this.constructor.formalName();\n const selectionSets = firebolt.getSelectionSets(formalName);\n const {\n model: filteredDataModel,\n uids\n } = this.firebolt.getAddSetFromCriteria(criteria, this.firebolt.getPropagationInf());\n const entryExitSets = selectionSets.map((selectionSet) => {\n this.setSelectionSet(uids, selectionSet);\n return this.getEntryExitSet(selectionSet, filteredDataModel, payload);\n });\n\n return entryExitSets;\n }\n\n setSelectionSet () {\n return this;\n }\n\n getEntryExitSet (selectionSet, filteredDataModel, payload) {\n const {\n entrySet,\n exitSet,\n completeSet\n } = selectionSet.getSets();\n const propagationInf = this.firebolt.getPropagationInf();\n const dataModel = this.firebolt.getFullData();\n const setConfig = {\n isSourceFieldPresent: propagationInf.isSourceFieldPresent,\n dataModel,\n filteredDataModel,\n propagationData: propagationInf.data,\n selectionSet\n };\n\n return {\n entrySet: [getSetInfo('oldEntry', entrySet[0], setConfig),\n getSetInfo('newEntry', entrySet[1], setConfig)],\n exitSet: [getSetInfo('oldEntry', exitSet[0], setConfig),\n getSetInfo('newExit', exitSet[1], setConfig)],\n mergedEnter: getSetInfo('mergedEnter', getMergedSet(entrySet), setConfig),\n mergedExit: getSetInfo('mergedExit', getMergedSet(exitSet), setConfig),\n completeSet: getSetInfo('complete', completeSet, setConfig),\n isSourceFieldPresent: propagationInf.isSourceFieldPresent,\n fields: getSourceFields(propagationInf, payload.criteria),\n sourceSelectionSet: selectionSet._volatile === true\n };\n }\n\n static mutates () {\n return false;\n }\n\n enable () {\n this._enabled = true;\n }\n\n disable () {\n this._enabled = false;\n }\n\n isEnabled () {\n return this._enabled;\n }\n}\n\n","import GenericBehaviour from './generic';\nimport { getMergedSet } from '../../helper';\nimport * as SELECTION from '../../enums/selection';\n\nexport default class VolatileBehaviour extends GenericBehaviour {\n setSelectionSet (addSet, selectionSet) {\n if (addSet === null) {\n selectionSet.reset();\n } else if (addSet.length) {\n // new add set\n const existingAddSet = addSet.filter(d => selectionSet._set[d] === SELECTION.SELECTION_NEW_ENTRY\n || selectionSet._set[d] === SELECTION.SELECTION_OLD_ENTRY);\n selectionSet.updateExit();\n const { entrySet } = selectionSet.getSets();\n selectionSet.reset(getMergedSet(entrySet));\n selectionSet.add(addSet);\n selectionSet.update(existingAddSet);\n } else {\n selectionSet.remove(selectionSet.getCompleteSet());\n }\n }\n}\n","export const BRUSH = 'brush';\nexport const HIGHLIGHT = 'highlight';\nexport const TOOLTIP = 'tooltip';\nexport const FILTER = 'filter';\nexport const SELECT = 'select';\n","import VolatileBehaviour from './volatile';\nimport { HIGHLIGHT } from '../../enums/behaviours';\n\nexport default class HighlightBehaviour extends VolatileBehaviour {\n static formalName () {\n return HIGHLIGHT;\n }\n}\n","import VolatileBehaviour from './volatile';\nimport * as BEHAVIOURNAMES from '../../enums/behaviours';\n\n/**\n * This is the behaviour for brushing a region on the chart. It accepts a payload\n * which contains the x and y range of the data and other configuration. It will then\n * create a selection box from the range and select the points which fall within the range.\n */\nexport default class BrushBehaviour extends VolatileBehaviour {\n static formalName () {\n return BEHAVIOURNAMES.BRUSH;\n }\n}\n","import VolatileBehaviour from './volatile';\nimport { FILTER } from '../../enums/behaviours';\n\nexport default class FilterBehaviour extends VolatileBehaviour {\n static formalName () {\n return FILTER;\n }\n\n static mutates () {\n return true;\n }\n}\n","import GenericBehaviour from './generic';\nimport { getMergedSet } from '../../helper';\nimport * as SELECTION from '../../enums/selection';\n\nexport default class PersistentBehaviour extends GenericBehaviour {\n setSelectionSet (addSet, selectionSet) {\n if (addSet === null) {\n selectionSet.reset();\n } else if (addSet.length) {\n const propagationInf = this.firebolt.getPropagationInf();\n // new add set\n const existingAddSet = addSet.filter(d => selectionSet._set[d] === SELECTION.SELECTION_NEW_ENTRY\n || selectionSet._set[d] === SELECTION.SELECTION_OLD_ENTRY);\n if (propagationInf.propagate === false) {\n selectionSet.updateExit();\n const { entrySet } = selectionSet.getSets();\n selectionSet.reset(getMergedSet(entrySet));\n selectionSet.add(addSet);\n selectionSet.update(existingAddSet);\n } else {\n // existing add set\n if (existingAddSet.length) {\n selectionSet.updateExit();\n selectionSet.remove(existingAddSet);\n } else {\n selectionSet.updateEntry();\n selectionSet.add(addSet);\n }\n const { exitSet } = selectionSet.getSets();\n const mergedExitSet = getMergedSet(exitSet);\n const completeSetCount = selectionSet.getCompleteSet().length;\n if (mergedExitSet.length === completeSetCount) {\n selectionSet.reset();\n }\n }\n } else {\n selectionSet.remove(selectionSet.getCompleteSet());\n }\n\n return this;\n }\n}\n","import PersistentBehaviour from './persistent';\nimport { SELECT } from '../../enums/behaviours';\n\nexport default class SelectBehaviour extends PersistentBehaviour {\n static formalName () {\n return SELECT;\n }\n}\n\n","import { DimensionSubtype, FieldType } from 'muze-utils';\n/**\n * Gets the drag action configuration\n * @param {VisualUnit} instance instance of visual unit\n * @param {Object} config x y positions\n * @return {Object} Payload of behaviour\n*/\n/* istanbul ignore next */ const getDragActionConfig = (sourceInfo, config, fieldsConfig) => {\n if (!(sourceInfo.axes.x || sourceInfo.axes.y)) {\n return {\n criteria: null\n };\n }\n\n const axes = sourceInfo.axes;\n const xAxis = axes.x[0];\n const yAxis = axes.y[0];\n const axisFields = sourceInfo.fields;\n const xField = axisFields.x[0].getMembers()[0];\n const yField = axisFields.y[0].getMembers()[0];\n const xFieldType = fieldsConfig[xField].def.subtype ? fieldsConfig[xField].def.subtype :\n fieldsConfig[xField].def.type;\n const yFieldType = fieldsConfig[yField].def.subtype ? fieldsConfig[yField].def.subtype :\n fieldsConfig[yField].def.type;\n const dimensions = {};\n const stPos = config.startPos;\n const endPos = config.endPos;\n\n if (stPos.x === endPos.x && stPos.y === endPos.y) {\n return {\n criteria: null\n };\n }\n\n const dragDim = xFieldType === FieldType.MEASURE ? (yFieldType === FieldType.MEASURE ? ['x', 'y'] : ['y']) : ['x'];\n const criteria = {};\n const isXDimension = xFieldType === DimensionSubtype.CATEGORICAL;\n const isYDimension = yFieldType === DimensionSubtype.CATEGORICAL;\n const xRange = xAxis.constructor.type() === 'band' ? xAxis.scale().invertExtent(stPos.x, endPos.x) :\n xAxis.invert(stPos.x, endPos.x);\n const yRange = yAxis.constructor.type() === 'band' ? yAxis.scale().invertExtent(stPos.y, endPos.y) :\n yAxis.invert(stPos.y, endPos.y);\n const selectedDomains = {\n x: stPos.x === endPos.x ? [] : (isXDimension ? xRange : xRange.sort((a, b) => a - b)),\n y: stPos.y === endPos.y ? [] : (isYDimension ? yRange : yRange.sort((a, b) => a - b))\n };\n const rangeObj = {};\n\n if (dragDim.length === 2) {\n rangeObj[xField] = selectedDomains.x;\n rangeObj[yField] = selectedDomains.y;\n if (xField === yField) {\n const xdom = selectedDomains.x;\n const ydom = selectedDomains.y;\n const min = xdom[0] > ydom[0] ? ydom : xdom;\n const max = min === ydom ? xdom : ydom;\n if (min[1] < max[0]) {\n rangeObj[xField] = [];\n } else {\n rangeObj[xField] = [max[0], min[1] < max[1] ? min[1] : max[1]];\n }\n dimensions.x = [stPos.x, endPos.x];\n dimensions.y = [stPos.y, endPos.y];\n }\n } else {\n criteria[dragDim[0]] = selectedDomains[dragDim[0]] || [];\n\n if (dragDim[0] === 'x') {\n rangeObj[xField] = criteria.x;\n if (xFieldType === DimensionSubtype.CATEGORICAL) {\n dimensions.x = (config.snap && stPos.x !== endPos.x) ? xAxis.getNearestRange(stPos.x, endPos.x) :\n [stPos.x, endPos.x];\n }\n } else {\n rangeObj[yField] = criteria.y;\n if (yFieldType === DimensionSubtype.CATEGORICAL) {\n dimensions.y = (config.snap && stPos.y !== endPos.y) ? yAxis.getNearestRange(stPos.y, endPos.y) :\n [stPos.y, endPos.y];\n }\n }\n }\n\n return {\n criteria: rangeObj,\n dimensions\n };\n};\n\nexport default getDragActionConfig;\n","import {\n getEvent,\n getD3Drag\n } from 'muze-utils';\n\nimport getDragActionConfig from './drag-action-config';\n\n/**\n * Adds dragging action to the target element.\n * @param {VisualUnit} instance Instance of visual unit.\n * @param {SVGElement} targetEl Element on which brushing action is needed.\n * @param {Array} behaviours Array of behaviours\n */\nexport const attachDragEvent = (targetEl, behaviours, firebolt, touch) => {\n let startPos = {};\n let endPos = {};\n let drawingInf;\n\n const d3Drag = getD3Drag();\n let touchStart;\n targetEl.call(d3Drag().on('start', () => {\n const event = getEvent();\n startPos = {\n x: event.x,\n y: event.y\n };\n drawingInf = firebolt.context.getDrawingContext();\n touchStart = new Date().getTime();\n }).on('drag', () => {\n const event = getEvent();\n endPos = {\n x: event.x,\n y: event.y\n };\n if (touch && Math.abs(startPos.x - endPos.x) <= 5) {\n return;\n }\n endPos.x = Math.max(0, Math.min(endPos.x, drawingInf.width));\n endPos.y = Math.max(0, Math.min(endPos.y, drawingInf.height));\n\n const payload = getDragActionConfig(firebolt.context.getSourceInfo(), {\n startPos,\n endPos\n }, firebolt.context.data().getFieldsConfig());\n behaviours.forEach(beh => firebolt.dispatchBehaviour(beh, payload));\n }).on('end', () => {\n const event = getEvent();\n endPos = {\n x: event.x,\n y: event.y\n };\n const duration = new Date().getTime() - touchStart;\n\n if (touch && duration > 100 && Math.abs(startPos.x - endPos.x) <= 5) {\n return;\n }\n endPos.x = Math.max(0, Math.min(endPos.x, drawingInf.width));\n endPos.y = Math.max(0, Math.min(endPos.y, drawingInf.height));\n\n const payload = getDragActionConfig(firebolt.context.getSourceInfo(), {\n startPos,\n endPos,\n snap: true\n }, firebolt.context.data().getFieldsConfig());\n payload.dragEnd = true;\n behaviours.forEach(beh => firebolt.dispatchBehaviour(beh, payload));\n }));\n};\n\n","import { getClientPoint, getEvent } from 'muze-utils';\nimport { CONSOLIDATED, FRAGMENTED } from '../../enums/constants';\n\n/**\n * Adds mouse interactions to target element.\n * @param {Firebolt} instance instance of firebolt.\n * @param {SVGElement} targetEl Element on which the event listeners will be attached.\n * @param {Array} behaviours Array of behaviours\n */\n/* istanbul ignore next */ const hover = firebolt => (targetEl, behaviours) => {\n const dispatchBehaviour = function (args) {\n const event = getEvent();\n const context = firebolt.context;\n const tooltipConf = context.config().interaction.tooltip;\n const mode = tooltipConf.mode;\n const pos = getClientPoint(context.getDrawingContext().svgContainer, event);\n const nearestPoint = context.getNearestPoint(pos.x, pos.y, {\n getAllPoints: mode === CONSOLIDATED || mode === FRAGMENTED,\n data: args,\n event\n });\n const payload = {\n criteria: nearestPoint ? nearestPoint.id : null,\n showInPosition: nearestPoint.showInPosition,\n target: nearestPoint.target,\n position: pos,\n mode\n };\n\n behaviours.forEach(beh => firebolt.dispatchBehaviour(beh, payload));\n event.stopPropagation();\n };\n\n targetEl.on('mouseover', dispatchBehaviour)\n .on('mousemove', dispatchBehaviour)\n .on('mouseout', () => {\n behaviours.forEach(beh => firebolt.dispatchBehaviour(beh, {\n criteria: null\n }));\n });\n};\n\nexport default hover;\n","export const CLASSPREFIX = 'muze';\nexport const CONSOLIDATED = 'consolidated';\nexport const FRAGMENTED = 'fragmented';\n\n","import { getClientPoint } from 'muze-utils';\n\nexport const generatePayloadFromEvent = function (args, event, firebolt) {\n const context = firebolt.context;\n const pos = getClientPoint(context.getDrawingContext().svgContainer, event.touches ? event.touches[0] : event);\n const nearestPoint = context.getNearestPoint(pos.x, pos.y, {\n data: args,\n event\n });\n return {\n criteria: nearestPoint ? nearestPoint.id : null,\n showInPosition: nearestPoint.showInPosition,\n target: nearestPoint.target,\n position: pos\n };\n};\n","import { getEvent } from 'muze-utils';\nimport { generatePayloadFromEvent } from './helpers';\n\n/**\n * Adds mouse interactions to target element.\n * @param {VisualUnit} instance instance of visual unit.\n * @param {SVGElement} targetEl Element on which the event listeners will be attached.\n * @param {Array} behaviours Array of behaviours\n */\n/* istanbul ignore next */ const click = firebolt => (targetEl, behaviours) => {\n const dispatchBehaviour = function (args) {\n const event = getEvent();\n const payload = generatePayloadFromEvent(args, event, firebolt);\n behaviours.forEach(beh => firebolt.dispatchBehaviour(beh, payload));\n event.stopPropagation();\n };\n\n targetEl.on('click', dispatchBehaviour);\n};\nexport default click;\n","import drag from './drag';\nimport hover from './hover';\nimport { longtouch } from './longtouch';\nimport { touchdrag } from './touch-drag';\nimport * as ACTIONNAMES from '../../enums/actions';\nimport click from './click';\n\nexport const physicalActions = {\n [ACTIONNAMES.DRAG]: drag,\n [ACTIONNAMES.HOVER]: hover,\n [ACTIONNAMES.CLICK]: click,\n [ACTIONNAMES.LONGTOUCH]: longtouch,\n [ACTIONNAMES.TOUCHDRAG]: touchdrag\n};\n\n","import { attachDragEvent } from './helpers/drag-event';\n\n/**\n * Adds dragging action to the target element.\n * @param {VisualUnit} instance Instance of visual unit.\n * @param {SVGElement} targetEl Element on which brushing action is needed.\n * @param {Array} behaviours Array of behaviours\n */\n/* istanbul ignore next */ const drag = firebolt => (targetEl, behaviours) => {\n attachDragEvent(targetEl, behaviours, firebolt);\n};\n\nexport default drag;\n","/* global setTimeout */\nimport { getEvent } from 'muze-utils';\nimport { generatePayloadFromEvent } from './helpers';\n\n/**\n * Adds mouse interactions to target element.\n * @param {VisualUnit} instance instance of visual unit.\n * @param {SVGElement} targetEl Element on which the event listeners will be attached.\n * @param {Array} behaviours Array of behaviours\n */\nexport const longtouch = firebolt => (targetEl, behaviours) => {\n let event;\n let touchEnd;\n const dispatchBehaviour = function (args) {\n const payload = generatePayloadFromEvent(args, event, firebolt);\n behaviours.forEach(beh => firebolt.dispatchBehaviour(beh, payload));\n event.stopPropagation();\n };\n\n touchEnd = false;\n event = getEvent();\n targetEl.on('touchstart', (args) => {\n event = getEvent();\n touchEnd = false;\n setTimeout(() => {\n if (!touchEnd) {\n dispatchBehaviour(args);\n } else {\n behaviours.forEach(beh => firebolt.dispatchBehaviour(beh, {\n criteria: null\n }));\n }\n }, 100);\n }).on('touchend', () => {\n touchEnd = true;\n });\n};\n","import { attachDragEvent } from './helpers/drag-event';\n\n/**\n * Adds dragging action to the target element.\n * @param {VisualUnit} instance Instance of visual unit.\n * @param {SVGElement} targetEl Element on which brushing action is needed.\n * @param {Array} behaviours Array of behaviours\n */\nexport const touchdrag = firebolt => (targetEl, behaviours) => {\n attachDragEvent(targetEl, behaviours, firebolt, true);\n};\n\n","import { mergeRecursive, getUniqueId } from 'muze-utils';\n\nexport default class GenericSideEffect {\n constructor (firebolt) {\n this.firebolt = firebolt;\n this._enabled = true;\n this._strategy = 'default';\n this._config = {};\n this._id = getUniqueId();\n this._strategies = {};\n this.config(this.constructor.defaultConfig());\n }\n\n static defaultConfig () {\n return {};\n }\n\n static target () {\n return 'all';\n }\n\n static mutates () {\n return false;\n }\n\n config (...params) {\n if (params.length) {\n this._config = mergeRecursive(this._config, params[0]);\n return this;\n }\n return this._config;\n }\n\n disable () {\n this._enabled = false;\n return this;\n }\n\n enable () {\n this._enabled = true;\n return this;\n }\n\n isEnabled () {\n return this._enabled;\n }\n\n apply () {\n return this;\n }\n\n addStrategy (name, fn) {\n this._strategies[name] = fn;\n return this;\n }\n}\n","import GenericSideEffect from './generic';\n\nexport default class SurrogateSideEffect extends GenericSideEffect {\n applyInteractionStyle (set, config = {}, interactionType, apply) {\n const layers = this.firebolt.context.layers();\n layers.forEach(layer => layer.config().interactive !== false &&\n layer.applyInteractionStyle(interactionType, set.uids, apply));\n }\n}\n","import { makeElement } from 'muze-utils';\n\nimport GenericSideEffect from './generic';\n\nexport default class SpawnableSideEffect extends GenericSideEffect {\n createElement (container, elemType, data, className, callbacks) {\n return makeElement(container, elemType, data, className, callbacks);\n }\n\n drawingContext (...drawingContext) {\n if (drawingContext.length) {\n this._drawingContext = drawingContext[0];\n return this;\n }\n return this._drawingContext();\n }\n\n show () {\n return this;\n }\n\n hide () {\n return this;\n }\n}\n","import { selectElement } from 'muze-utils';\n\nexport const getBoxDimensionsFromPayload = (payload, axes, axisFields) => {\n let x1;\n let x2;\n let y1;\n let y2;\n let xRange;\n let yRange;\n let direction;\n const criteria = payload.criteria;\n const dimensions = payload.dimensions || {};\n const xDim = dimensions.x;\n const yDim = dimensions.y;\n\n if (criteria === null) {\n return null;\n }\n\n const xAxis = axes.x[0];\n const yAxis = axes.y[0];\n const xLinear = xAxis.constructor.type() === 'linear';\n const yLinear = yAxis.constructor.type() === 'linear';\n const xField = `${axisFields.x[0]}`;\n const yField = `${axisFields.y[0]}`;\n const xCriteria = criteria[xField];\n const yCriteria = criteria[yField];\n\n if (xCriteria && xCriteria[0] instanceof Array) {\n xRange = xCriteria[0];\n yRange = xCriteria[1];\n } else {\n xRange = xCriteria || [];\n yRange = yCriteria || [];\n }\n direction = xCriteria && yCriteria ? 'both' : (xCriteria ? 'vertical' : 'horizontal');\n if (xRange && xRange.length) {\n if ((yAxis.constructor.type() === 'band' && xLinear)) {\n x1 = x2 = undefined;\n direction = 'horizontal';\n } else {\n const domain = xAxis.domain();\n const bandScale = xAxis.constructor.type() === 'band';\n let x1Val;\n let x2Val;\n if (bandScale) {\n let x1DomainIndex = domain.indexOf(xRange[0]);\n let x2DomainIndex = domain.indexOf(xRange[xRange.length - 1]);\n [x1DomainIndex, x2DomainIndex] = [x1DomainIndex, x2DomainIndex].sort((a, b) => a - b);\n x1Val = domain[x1DomainIndex];\n x2Val = domain[x2DomainIndex];\n } else {\n x1Val = xRange[0];\n x2Val = xRange[xRange.length - 1];\n }\n x1 = xAxis.getScaleValue(x1Val);\n x2 = xAxis.getScaleValue(x2Val);\n x2 += bandScale ? xAxis.getUnitWidth() : 0;\n }\n } else {\n x1 = x2 = undefined;\n }\n if (yRange && yRange.length) {\n if ((xAxis.constructor.type() === 'band' && yLinear)) {\n y1 = y2 = undefined;\n direction = 'vertical';\n } else {\n const domain = yAxis.domain();\n const bandScale = yAxis.constructor.type() === 'band';\n let y1Val;\n let y2Val;\n if (bandScale) {\n let y1DomainIndex = domain.indexOf(yRange[0]);\n let y2DomainIndex = domain.indexOf(yRange[yRange.length - 1]);\n [y1DomainIndex, y2DomainIndex] = [y1DomainIndex, y2DomainIndex].sort(((a, b) => b - a));\n y1Val = domain[y1DomainIndex];\n y2Val = domain[y2DomainIndex];\n } else {\n y1Val = yRange[0];\n y2Val = yRange[yRange.length - 1];\n }\n y1 = yAxis.getScaleValue(y1Val);\n y2 = yAxis.getScaleValue(y2Val);\n y2 += yAxis.constructor.type() === 'band' ? yAxis.getUnitWidth() : 0;\n }\n } else {\n y1 = y2 = undefined;\n }\n\n if ((yLinear && xLinear) || !payload.dragEnd) {\n if (xDim) {\n [x1, x2] = xDim;\n }\n if (yDim) {\n [y1, y2] = yDim;\n }\n }\n\n return {\n dimension: {\n x1,\n x2,\n y1,\n y2\n },\n direction\n };\n};\n\nexport const changeVisibility = (context, sideEffectGroup, visible) => {\n const config = context.config();\n const className = config.defClassName;\n const classPrefix = config.classPrefix;\n selectElement(sideEffectGroup).selectAll(`.${classPrefix}-${className}`)\n .style('display', visible ? 'block' : 'none');\n};\n","import {\n getQualifiedClassName,\n selectElement,\n makeElement,\n isValidValue\n} from 'muze-utils';\nimport { CLASSPREFIX } from '../../enums/constants';\nimport './styles.scss';\nimport SpawnableSideEffect from '../spawnable';\nimport { selectionBoxDrag } from '../../actions/physical/selection-box-drag';\nimport { getBoxDimensionsFromPayload, changeVisibility } from './helper';\n\n/**\n * This class is used to create a selection box which is used by visual unit for brushing and\n * selection in the canvas.\n * @class SelectionBox\n */\nclass SelectionBox extends SpawnableSideEffect {\n /**\n * It returns the default configuration needed by selectionbox.\n * @return {Object} Default configuration of the selection box.\n */\n static defaultConfig () {\n return {\n defClassName: 'selection-box-group',\n className: '',\n classPrefix: CLASSPREFIX,\n box: {\n defClassName: 'selection-box',\n className: ''\n },\n transition: {\n duration: 200\n }\n };\n }\n\n static formalName () {\n return 'selectionBox';\n }\n\n /**\n * Draws the selectionbox with the specified dimensions.\n * @param {Object} dimension Dimensions of the selection box.\n * @param {number} dimension.x1 Starting x position\n * @param {number} dimension.x2 Ending x position\n * @param {number} dimension.y1 Starting y position\n * @param {number} dimension.y2 Ending y position\n * @param {Object} conf Configuration needed to draw the selection box\n * @param {number} unitWidth Width of the visual unit.\n * @param {number} unitHeight Height of the visual unit.\n */\n apply (selectionSet, payload) {\n let x;\n let y;\n let width;\n let height;\n const config = this._config;\n const boxConf = config.box;\n const firebolt = this.firebolt;\n const drawingInf = this.drawingContext();\n const mountPoint = drawingInf.sideEffectGroup;\n const unitWidth = drawingInf.width;\n const unitHeight = drawingInf.height;\n const classPrefix = config.classPrefix;\n const selectionGroupClassName = config.defClassName;\n\n if (payload.criteria === null) {\n this.hide(drawingInf);\n return this;\n }\n\n const sourceInf = firebolt.context.getSourceInfo();\n const { dimension, direction } = getBoxDimensionsFromPayload(payload, sourceInf.axes,\n sourceInf.fields);\n const transition = payload.dragEnd && config.transition;\n\n if (direction === 'both' || direction === 'vertical') {\n x = Math.min(dimension.x1, dimension.x2);\n width = Math.abs(dimension.x2 - dimension.x1);\n } else {\n x = 0;\n width = unitWidth;\n }\n if (direction === 'both' || direction === 'horizontal') {\n y = Math.min(dimension.y1, dimension.y2);\n height = Math.abs(dimension.y2 - dimension.y1);\n } else {\n height = unitHeight;\n y = 0;\n }\n this.show(drawingInf);\n // Create the data array for drawing the rectangle\n const points = [\n {\n x,\n y,\n width,\n height\n }\n ];\n // Create the container group for selection box.\n const selectionGroup = makeElement(selectElement(mountPoint), 'g', [1],\n `.${classPrefix}-${selectionGroupClassName}`);\n const sideEffect = this;\n const selection = selectionGroup.selectAll('rect').data(points);\n const selectionBox = selection.enter().append('rect')\n .each(function () {\n selectionBoxDrag(firebolt)(selectElement(this), ['brush'], sideEffect);\n })\n .merge(selection)\n .each(function (attrs) {\n let element = selectElement(this);\n transition && (element = element.transition().duration(transition.duration));\n for (const key in attrs) {\n if ({}.hasOwnProperty.call(attrs, key)) {\n isValidValue(attrs[key]) && element.attr(key, attrs[key]);\n }\n }\n });\n // Get the qualified class name for selection box rectangle\n const boxClassName = getQualifiedClassName(boxConf.defClassName, this._id, classPrefix);\n selectionBox.classed(boxClassName.join(' '), true);\n selectionBox.classed(boxConf.className, true);\n\n return this;\n }\n\n hide (drawingInf) {\n changeVisibility(this, drawingInf.sideEffectGroup, false);\n }\n\n show (drawingInf) {\n changeVisibility(this, drawingInf.sideEffectGroup, true);\n }\n}\n\nexport default SelectionBox;\n\n","import {\n getEvent,\n getD3Drag\n } from 'muze-utils';\n\nimport getDragActionConfig from './helpers/drag-action-config';\n\nexport const selectionBoxDrag = firebolt => (targetEl, behaviours) => {\n let subject;\n let drawingInf;\n const context = firebolt.context;\n const onDrag = (payload) => {\n behaviours.forEach(action => firebolt.dispatchBehaviour(action, payload));\n };\n const d3Drag = getD3Drag();\n\n targetEl.call(d3Drag().on('start', () => {\n const event = getEvent();\n drawingInf = context.getDrawingContext();\n subject = event.subject;\n }).on('drag', () => {\n const event = getEvent();\n subject.x += event.dx;\n subject.y += event.dy;\n const width = drawingInf.width;\n const height = drawingInf.height;\n const x = Math.min(width - subject.width, Math.max(subject.x, 0));\n const y = Math.min(height - subject.height, Math.max(subject.y, 0));\n const y2 = y + subject.height;\n const x2 = x + subject.width;\n\n if (x >= 0 && x2 <= width && y >= 0 && y2 <= height) {\n const payload = getDragActionConfig(context.getSourceInfo(), {\n startPos: {\n x,\n y\n },\n endPos: {\n x: x2,\n y: y2\n }\n }, context.data().getFieldsConfig());\n onDrag(payload);\n }\n }).on('end', () => {\n const width = drawingInf.width;\n const height = drawingInf.height;\n const x = Math.min(width - subject.width, Math.max(subject.x, 0));\n const y = Math.min(height - subject.height, Math.max(subject.y, 0));\n const y2 = y + subject.height;\n const x2 = x + subject.width;\n\n if (x >= 0 && x2 <= width && y >= 0 && y2 <= height) {\n const payload = getDragActionConfig(context.getSourceInfo(), {\n startPos: {\n x,\n y\n },\n endPos: {\n x: x2,\n y: y2\n },\n snap: true\n }, context.data().getFieldsConfig());\n payload.dragEnd = true;\n onDrag(payload);\n }\n }));\n};\n","export const CLASSPREFIX = 'muze';\nexport const ARROW_RIGHT = 'right';\nexport const ARROW_TOP = 'top';\nexport const ARROW_BOTTOM = 'bottom';\nexport const ARROW_LEFT = 'left';\nexport const TOOLTIP_LEFT = 'left';\nexport const TOOLTIP_RIGHT = 'right';\nexport const TOOLTIP_BOTTOM = 'bottom';\nexport const TOOLTIP_TOP = 'top';\nexport const INITIAL_STYLE = {\n position: 'absolute',\n width: 0,\n height: 0\n};\n","import { CLASSPREFIX } from './constants';\n\nexport const defaultConfig = {\n classPrefix: CLASSPREFIX,\n defClassName: 'tooltip-box',\n connectorClassName: 'tooltip-connectors',\n className: '',\n row: {\n margin: 0\n },\n content: {\n spacing: 5,\n iconContainerSize: 10,\n iconScale: 1,\n iconShape: 'circle',\n iconColor: '#ff0000',\n rowMargin: '0px',\n margin: 10,\n separator: ':',\n className: 'tooltip-content-container',\n parentClassName: 'tooltip-content-parent-container'\n },\n arrow: {\n size: 10,\n disabled: false,\n defClassName: 'tooltip-arrow',\n className: '',\n color: 'rgba(195,195,195,0.85)'\n }\n};\n","import { getQualifiedClassName } from 'muze-utils';\nimport { TOOLTIP_LEFT, TOOLTIP_RIGHT, ARROW_RIGHT, ARROW_LEFT, TOOLTIP_BOTTOM } from './constants';\n\nexport const getArrowPos = (orient, dim, measurement, config) => {\n let arrowPos;\n const { x, y, boxHeight, boxWidth } = measurement;\n const arrowDisabled = config.arrow.disabled;\n const arrowWidth = arrowDisabled ? 0 : config.arrow.size;\n\n if (orient === ARROW_LEFT || orient === ARROW_RIGHT) {\n let start = 0;\n let diff = boxHeight / 2;\n const plotBottom = dim.y + dim.height;\n const boxBottom = y + boxHeight;\n\n if (dim.y > y) {\n start = dim.y - y;\n diff = (plotBottom >= boxBottom ? (boxBottom - dim.y) : dim.height) / 2;\n } else if (boxBottom > plotBottom) {\n diff = Math.abs(y - (dim.y + dim.height)) / 2;\n }\n arrowPos = start + diff - arrowWidth / 2;\n } else {\n let start = 0;\n let diff = boxWidth / 2;\n const plotRight = dim.x + dim.width;\n const boxRight = x + boxWidth;\n\n if (dim.x > x) {\n start = dim.x - x;\n diff = (plotRight >= boxRight ? (boxRight - dim.x) : dim.width) / 2;\n } else if (boxRight > plotRight) {\n diff = Math.abs(x - (dim.x + dim.width)) / 2;\n }\n arrowPos = start + diff - arrowWidth / 2;\n }\n return arrowPos;\n};\n\n/**\n * Places the arrow in the specified arrow position. It also applies appropriate arrow\n * class name to the arrow element.\n * @param {string} position Left, bottom or right position of the arrow;\n * @param {number} arrowPos position of arrow in pixels\n * @return {Tooltip} Instance of tooltip.\n */\nexport const placeArrow = (context, position, arrowPos) => {\n const tooltipArrow = context._tooltipArrow;\n const tooltipBackground = context._tooltipBackground;\n const config = context._config;\n const classPrefix = config.classPrefix;\n const arrowConf = config.arrow;\n const className = getQualifiedClassName(arrowConf.defClassName, context._id, config.classPrefix);\n\n tooltipArrow.style('display', 'block');\n tooltipArrow.attr('class', `${className.join(' ')}`);\n if (position === TOOLTIP_LEFT || position === TOOLTIP_RIGHT) {\n tooltipArrow.style('top', `${arrowPos}px`);\n tooltipArrow.style('left', '');\n tooltipBackground.style('top', `${arrowPos}px`);\n tooltipBackground.style('left', '');\n } else {\n position === TOOLTIP_BOTTOM ? tooltipArrow.style('top', '100%') : tooltipArrow.style('top',\n `-${arrowConf.size}px`);\n tooltipArrow.style('left', `${arrowPos}px`);\n position === TOOLTIP_BOTTOM ? tooltipBackground.style('top', '100%') : tooltipBackground.style('top',\n `-${arrowConf.size + 3}px`);\n tooltipBackground.style('left', `${arrowPos}px`);\n }\n tooltipArrow.classed(`${classPrefix}-tooltip-arrow`, true);\n tooltipArrow.classed(`${classPrefix}-tooltip-arrow-${context._arrowOrientation}`, false);\n tooltipArrow.classed(`${classPrefix}-tooltip-arrow-${position}`, true);\n tooltipBackground.classed(`${classPrefix}-tooltip-background-arrow`, true);\n tooltipBackground.classed(`${classPrefix}-tooltip-background-arrow-${context._arrowOrientation}`, false);\n tooltipBackground.classed(`${classPrefix}-tooltip-background-arrow-${position}`, true);\n return this;\n};\n\nexport const reorderContainers = (parentContainer, className) => {\n parentContainer.selectAll(className).sort((a, b) => a - b);\n};\n","import {\n getClosestIndexOf,\n DateTimeFormatter,\n DimensionSubtype,\n FieldType\n} from 'muze-utils';\n\nconst timeFormats = {\n millisecond: '%A, %b %e, %H:%M:%S.%L',\n second: '%A, %b %e, %H:%M:%S',\n minute: '%A, %b %e, %H:%M',\n hour: '%A, %b %e, %H:%M',\n day: '%A, %b %e, %Y',\n month: '%B %Y',\n year: '%Y'\n};\nconst timeDurations = [\n ['millisecond', 'second', 'minute', 'hour', 'day', 'month', 'year'],\n [1, 1000, 60000, 3600000, 86400000, 2592000000, 31536000000]\n];\nconst getNearestInterval = (interval) => {\n const index = getClosestIndexOf(timeDurations[1], interval);\n return timeDurations[0][index];\n};\nconst defaultTooltipFormatters = (type, formatter) => {\n const formatters = {\n [DimensionSubtype.TEMPORAL]: (value, interval) => {\n const nearestInterval = getNearestInterval(interval);\n return DateTimeFormatter.formatAs(value, timeFormats[nearestInterval]);\n },\n [FieldType.MEASURE]: value => formatter(value ? value.toFixed(2) : value),\n [FieldType.DIMENSION]: value => value\n };\n return formatters[type];\n};\n\nconst getTabularData = (data, schema, fieldspace, timeDiffs) => {\n const rows = [];\n rows.push(schema.map(d => d.name));\n data.forEach((d) => {\n const row = [];\n schema.forEach((fieldObj, i) => {\n const interval = fieldObj.subtype === DimensionSubtype.TEMPORAL ? timeDiffs[fieldObj.name] : 0;\n const numberFormat = fieldObj.type === FieldType.MEASURE && fieldspace.fields[i]._ref.numberFormat();\n const formatterFn = defaultTooltipFormatters(fieldObj.subtype || fieldObj.type, numberFormat);\n const value = formatterFn(d[i], interval);\n row.push(value);\n });\n rows.push(row);\n });\n return rows;\n};\n\nexport const buildTooltipData = (dataModel, config = {}, context) => {\n let fieldValues = [];\n const dataObj = dataModel.getData();\n const data = dataObj.data;\n const schema = dataObj.schema;\n const formatters = config.formatters;\n const separator = config.separator;\n const fieldsConfig = dataModel.getFieldsConfig();\n const fieldspace = dataModel.getFieldspace();\n const fieldsObj = fieldspace.fieldsObj();\n const dimensionMeasureMap = context.dimensionMeasureMap;\n const axes = context.axes;\n const detailFields = context.detailFields || [];\n const dimensions = schema.filter(d => d.type === FieldType.DIMENSION);\n const measures = schema.filter(d => d.type === FieldType.MEASURE);\n // const containsRetinalField = schema.find(d => d.name in dimensionMeasureMap);\n const containsDetailField = schema.find(d => detailFields.indexOf(d.name) !== -1);\n const dataLen = data.length;\n const getRowContent = (field, type) => {\n let value;\n let formattedValue;\n let measureIndex;\n const values = [];\n const index = fieldsConfig[field].index;\n const interval = fieldsConfig[field].def.subtype === DimensionSubtype.TEMPORAL ?\n fieldsObj[field].getMinDiff() : 0;\n const formatterFn = (formatters && formatters[field]) || defaultTooltipFormatters(type, val => val);\n\n if (value !== null) {\n let uniqueVals = type === FieldType.MEASURE ? data.map(d => d[index]) :\n [...new Set(data.map(d => d[index]))];\n uniqueVals = uniqueVals.filter(d => d !== '');\n const colorAxis = axes.color[0];\n const shapeAxis = axes.shape[0];\n const sizeAxis = axes.size[0];\n const isRetinalField = (colorAxis || shapeAxis || sizeAxis) && dataLen > 1 &&\n type !== FieldType.MEASURE;\n\n uniqueVals.forEach((val, i) => {\n let key;\n const associatedMeasures = dimensionMeasureMap[field];\n\n if (associatedMeasures && associatedMeasures.length && dataLen > 1) {\n key = val;\n let icon = {\n value: ''\n };\n\n if (isRetinalField) {\n icon = {\n type: 'icon',\n color: colorAxis.getColor(val),\n shape: shapeAxis.getShape(val),\n size: sizeAxis.getSize(val) * config.iconScale\n };\n }\n if (associatedMeasures.length > 1) {\n values.push([icon, `${key}`]);\n associatedMeasures.forEach((measure) => {\n measureIndex = fieldsConfig[measure].index;\n value = data[i][measureIndex];\n formattedValue = defaultTooltipFormatters('measure',\n fieldspace.fields[measureIndex]._ref.numberFormat())(value, interval);\n values.push([{\n value: `${measure}${separator}`,\n style: {\n 'margin-left': `${config.margin}px}`\n },\n className: `${config.classPrefix}-tooltip-key`\n }, {\n value: `${formattedValue}`,\n className: `${config.classPrefix}-tooltip-value`\n }]);\n });\n } else {\n measureIndex = fieldsConfig[associatedMeasures[0]].index;\n value = data[i][measureIndex];\n formattedValue = defaultTooltipFormatters('measure',\n fieldspace.fields[measureIndex]._ref.numberFormat())(value, interval);\n values.push([icon, {\n value: `${key}${separator}`,\n className: `${config.classPrefix}-tooltip-key`\n }, {\n value: `${formattedValue}`,\n className: `${config.classPrefix}-tooltip-value`\n }]);\n }\n } else {\n key = field;\n value = val;\n formattedValue = formatterFn(value, interval);\n values.push([{\n value: `${key}${separator}`,\n className: `${config.classPrefix}-tooltip-key`\n }, {\n value: `${formattedValue}`,\n className: `${config.classPrefix}-tooltip-value`\n }]);\n }\n });\n }\n return values;\n };\n let displayFormat = 'keyValue';\n\n if (dataLen > 1 && containsDetailField) {\n fieldValues = getTabularData(data, schema, fieldspace, context.timeDiffs);\n displayFormat = 'table';\n } else {\n dimensions.forEach((item) => {\n const type = item.subtype ? item.subtype : item.type;\n fieldValues = [...fieldValues, ...getRowContent(item.name, type)];\n });\n\n const allMeasures = [...new Set(...Object.values(dimensionMeasureMap))];\n const filteredMeasures = dataLen > 1 ? measures.filter(d => allMeasures.indexOf(d.name) === -1)\n : measures;\n\n filteredMeasures.forEach((item) => {\n const type = item.subtype ? item.subtype : item.type;\n fieldValues = [...fieldValues, ...getRowContent(item.name, type)];\n });\n }\n\n return {\n content: fieldValues,\n displayFormat\n };\n};\n\n/**\n * This contains the strategy methods for showing tooltip in the chart.\n * @param {VisualUnit} context Attached instance.\n */\nexport const strategy = {\n keyValue: (data, config, context) => {\n const values = buildTooltipData(data, config, context);\n return values;\n }\n};\n\nexport const DEFAULT_STRATEGY = 'keyValue';\n","import {\n selectElement,\n mergeRecursive,\n makeElement,\n setAttrs,\n setStyles,\n getSymbol,\n isSimpleObject\n} from 'muze-utils';\nimport { DEFAULT_STRATEGY, strategy } from './strategy';\nimport { defaultConfig } from './default-config';\n\n/**\n * This class is used to manage the content of tooltip.\n */\nexport default class Content {\n /**\n * Creates an instance of content.\n */\n constructor () {\n this._model = null;\n this._strategy = DEFAULT_STRATEGY;\n this._formatter = null;\n this._config = this.constructor.defaultConfig();\n }\n /**\n * Returns the default configuration of tooltip\n * @return {Object} Configuration of tooltip.\n */\n static defaultConfig () {\n const config = defaultConfig.content;\n config.classPrefix = defaultConfig.classPrefix;\n return config;\n }\n\n config (...c) {\n if (c.length > 0) {\n this._config = mergeRecursive(this._config, c[0]);\n return this;\n }\n return this._config;\n }\n\n /**\n * Update model. The format contains presentation strategy which determines how to show the content.\n * If no strategy is mentioned then default is to show key value pair\n */\n update (item) {\n this._model = item.model;\n this._strategy = item.strategy !== undefined ? item.strategy : DEFAULT_STRATEGY;\n this._formatter = item.formatter;\n return this;\n }\n\n context (ctx) {\n this._context = ctx;\n return this;\n }\n\n render (mount) {\n let data;\n const config = this._config;\n const iconContainerSize = config.iconContainerSize;\n const formatter = this._formatter;\n const rowMargin = config.rowMargin;\n const model = this._model;\n\n this._mount = mount;\n if (model instanceof Array) {\n data = model;\n } else {\n data = formatter instanceof Function ? formatter(this._model, this._context) :\n strategy[this._strategy](this._model, this.config(), this._context);\n }\n\n if (data instanceof Function) {\n mount.html(data());\n } else {\n let content = data;\n let displayFormat = 'default';\n\n if (isSimpleObject(data)) {\n content = data.content;\n displayFormat = data.displayFormat;\n }\n\n const body = makeElement(mount, 'div', [displayFormat], `${config.classPrefix}-tooltip-content`, {},\n d => d);\n\n if (displayFormat === 'table') {\n const table = makeElement(body, 'table', [1], `${config.classPrefix}-tooltip-table`);\n const tbody = makeElement(table, 'tbody', [1], `${config.classPrefix}-tooltip-table-tbody`);\n const rows = makeElement(tbody, 'tr', content, `${config.classPrefix}-tooltip-table-row`);\n rows.each(function (d, i) {\n selectElement(this).classed(`${config.classPrefix}-tooltip-table-row-${i}`, true);\n });\n const cells = makeElement(rows, 'td', d => d, `${config.classPrefix}-tooltip-table-cell`);\n cells.each(function (d) {\n selectElement(this).html(d);\n });\n } else {\n const rows = makeElement(body, 'div', content, `${config.classPrefix}-tooltip-row`);\n const cells = makeElement(rows, 'span', d => d, `${config.classPrefix}-tooltip-content`);\n cells.attr('class', `${config.classPrefix}-tooltip-content`);\n setStyles(rows, {\n margin: rowMargin\n });\n setStyles(cells, {\n display: 'inline-block',\n 'margin-right': `${config.spacing}px`\n });\n\n cells.each(function (d) {\n const el = selectElement(this);\n el.html('');\n if (d instanceof Object) {\n if (d.type === 'icon') {\n const svg = makeElement(el, 'svg', [1]);\n const path = makeElement(svg, 'path', [1]);\n const shape = d.shape instanceof Function ? d.shape : getSymbol(d.shape);\n\n setAttrs(svg, {\n x: 0,\n y: 0,\n width: iconContainerSize,\n height: iconContainerSize\n });\n setAttrs(path, {\n d: shape.size(d.size)(),\n transform: `translate(${iconContainerSize / 2}, ${iconContainerSize / 2})`\n });\n setStyles(path, {\n fill: d.color\n });\n setStyles(svg, {\n width: `${iconContainerSize}px`,\n height: `${iconContainerSize}px`\n });\n } else {\n el.html(d.value);\n d.className && el.classed(d.className, true);\n setStyles(el, d.style);\n }\n } else {\n el.html(d);\n }\n });\n }\n }\n return this;\n }\n\n clear () {\n this._model = null;\n return this;\n }\n}\n","import {\n mergeRecursive,\n getQualifiedClassName,\n getUniqueId,\n selectElement,\n setStyles,\n makeElement\n} from 'muze-utils';\nimport { ARROW_BOTTOM, ARROW_LEFT, ARROW_RIGHT, TOOLTIP_LEFT, TOOLTIP_RIGHT, TOOLTIP_BOTTOM, TOOLTIP_TOP,\n INITIAL_STYLE } from './constants';\nimport { defaultConfig } from './default-config';\nimport { getArrowPos, placeArrow, reorderContainers } from './helper';\nimport './styles.scss';\nimport Content from './content';\n\n/**\n * This component is responsible for creating a tooltip element. It appends the tooltip\n * in the body element.\n * @class Tooltip\n */\nexport default class Tooltip {\n /**\n * Initializes the tooltip with the container element and configuration\n * @param {HTMLElement} container container where the tooltip will be mounted.\n * @param {string} className Class name of the tooltip.\n */\n constructor (htmlContainer, svgContainer) {\n let connectorContainer = svgContainer;\n this._id = getUniqueId();\n this._config = {};\n this.config({});\n const tooltipConf = this._config;\n const classPrefix = tooltipConf.classPrefix;\n const contentClass = tooltipConf.content.parentClassName;\n const container = makeElement(htmlContainer, 'div', [1], `${classPrefix}-tooltip-container`);\n this._container = container;\n this._tooltipContainer = container.append('div').style('position', 'absolute');\n this._contentContainer = this._tooltipContainer.append('div').attr('class', `${classPrefix}-${contentClass}`);\n this._tooltipBackground = this._tooltipContainer.append('div').style('position', 'relative');\n this._tooltipArrow = this._tooltipContainer.append('div');\n\n if (!svgContainer) {\n connectorContainer = htmlContainer.append('svg').style('pointer-events', 'none');\n }\n this._contents = {};\n this._tooltipConnectorContainer = selectElement(connectorContainer)\n .append('g')\n .attr('class', `${tooltipConf.classPrefix}-${tooltipConf.connectorClassName}`);\n const id = this._id;\n const defClassName = tooltipConf.defClassName;\n const qualifiedClassName = getQualifiedClassName(defClassName, id, tooltipConf.classPrefix);\n\n setStyles(this._tooltipArrow, INITIAL_STYLE);\n setStyles(this._tooltipBackground, INITIAL_STYLE);\n this.addClass(qualifiedClassName.join(' '));\n this.addClass(tooltipConf.className);\n this.hide();\n }\n\n /**\n * Sets the configuration of tooltip.\n * @param {Object} config Configuration of tooltip\n * @return {Tooltip} Instance of tooltip\n */\n config (...config) {\n if (config.length > 0) {\n const defConf = mergeRecursive({}, this.constructor.defaultConfig());\n this._config = mergeRecursive(defConf, config[0]);\n return this;\n }\n return this._config;\n }\n\n /**\n * Returns the default configuration of tooltip\n * @return {Object} Configuration of tooltip.\n */\n static defaultConfig () {\n return defaultConfig;\n }\n /**\n * Sets the class name of tooltip\n * @param {string} className tooltip class name\n * @return {Tooltip} Instance of tooltip.\n */\n addClass (className) {\n this._tooltipContainer.classed(className, true);\n return this;\n }\n\n context (...ctx) {\n if (ctx.length) {\n this._context = ctx[0];\n return this;\n }\n return this._context;\n }\n\n content (name, data, contentConfig = {}) {\n const config = this.config();\n const { classPrefix } = config;\n const contentClass = config.content.className;\n const formatter = config.formatter;\n const className = contentConfig.className || `${classPrefix}-${contentClass}-${name}`;\n const content = this._contents[name] = this._contents[name] || new Content();\n const container = makeElement(this._contentContainer, 'div', [contentConfig.order], className);\n container.attr('class', `${classPrefix}-${contentClass} ${className}`);\n reorderContainers(this._contentContainer, `.${classPrefix}-${contentClass}`);\n const contentConf = config.content;\n contentConfig.classPrefix = this._config.classPrefix;\n content.config(contentConf);\n\n if (data === null) {\n content.clear();\n container.remove();\n delete this._contents[name];\n } else {\n content.update({\n model: data,\n formatter: contentConfig.formatter || formatter\n });\n content.context(this._context);\n content.render(container);\n }\n\n if (!Object.keys(this._contents).length) {\n this.hide();\n }\n return this;\n }\n\n getContents () {\n return Object.values(this._contents);\n }\n\n /**\n * Positions the tooltip at the given x and y position.\n * @param {number} x x position\n * @param {number} y y position\n * @return {Tooltip} Instance of tooltip.\n */\n position (x, y, conf = {}) {\n if (!Object.keys(this._contents).length) {\n this.hide();\n return this;\n }\n this.show();\n const target = this._target;\n const repositionArrow = conf.repositionArrow;\n\n if (target && repositionArrow) {\n const node = this._tooltipContainer.node();\n const config = this._config;\n const arrowDisabled = config.arrow.disabled;\n const arrowWidth = arrowDisabled ? 0 : config.arrow.size;\n const arrowOrient = this._arrowOrientation;\n const outsidePlot = arrowOrient === ARROW_LEFT || arrowOrient === ARROW_RIGHT ?\n (y + node.offsetHeight - arrowWidth) < target.y || y > (target.y + target.height) :\n (x + node.offsetWidth - arrowWidth) < target.x || x > (target.x + target.width);\n\n if (!arrowDisabled) {\n if (outsidePlot) {\n let path;\n this._tooltipArrow.style('display', 'none');\n this._tooltipBackground.style('display', 'none');\n this._tooltipConnectorContainer.style('display', 'block');\n const connector = this._tooltipConnectorContainer.selectAll('path').data([1]);\n const enter = connector.enter().append('path');\n if (arrowOrient === ARROW_LEFT) {\n path = `M ${x} ${y + node.offsetHeight / 2} L ${target.x + target.width}`\n + ` ${target.y + target.height / 2}`;\n } else if (arrowOrient === ARROW_RIGHT) {\n path = `M ${x + node.offsetWidth} ${y + node.offsetHeight / 2}`\n + ` L ${target.x} ${target.y + target.height / 2}`;\n } else if (arrowOrient === ARROW_BOTTOM) {\n path = `M ${x + node.offsetWidth / 2} ${y + node.offsetHeight}`\n + ` L ${target.x + target.width / 2} ${target.y}`;\n }\n enter.merge(connector).attr('d', path).style('display', 'block');\n } else {\n const arrowPos = getArrowPos(arrowOrient, target, {\n x,\n y,\n boxHeight: node.offsetHeight,\n boxWidth: node.offsetWidth\n }, this._config);\n\n placeArrow(this, this._arrowOrientation, arrowPos);\n this._tooltipConnectorContainer.style('display', 'none');\n }\n }\n }\n\n const offset = this._offset || {\n x: 0,\n y: 0\n };\n this._tooltipContainer.style('left', `${offset.x + x}px`).style('top',\n `${offset.y + y}px`);\n\n return this;\n }\n\n /**\n * Positions the tooltip relative to a rectangular box. It takes care of tooltip overflowing the\n * boundaries.\n * @param {Object} dim Dimensions of the plot.\n */\n positionRelativeTo (dim, tooltipConf = {}) {\n let obj;\n let orientation = tooltipConf.orientation;\n this.show();\n if (!dim) {\n this.hide();\n return this;\n }\n\n const extent = this._extent;\n const node = this._tooltipContainer.node();\n\n this._tooltipContainer.style('top', '0px')\n .style('left', '0px');\n const offsetWidth = node.offsetWidth + 2;\n const offsetHeight = node.offsetHeight + 2;\n const config = this._config;\n const offset = this._offset;\n const arrowDisabled = config.arrow.disabled;\n const arrowSize = arrowDisabled ? 0 : config.arrow.size;\n const draw = tooltipConf.draw !== undefined ? tooltipConf.draw : true;\n const topSpace = dim.y;\n // When there is no space in right\n const dimX = dim.x + dim.width + offset.x;\n const rightSpace = extent.width - dimX;\n const leftSpace = dim.x + offset.x - extent.x;\n const positionTop = topSpace > (offsetHeight + arrowSize);\n const positionRight = rightSpace >= offsetWidth + arrowSize;\n const positionLeft = leftSpace >= offsetWidth + arrowSize;\n\n const positionHorizontal = () => {\n let position;\n let x = dim.x + dim.width;\n let y = dim.y;\n\n if (positionRight) {\n position = TOOLTIP_LEFT;\n x += arrowSize;\n } else if (positionLeft) {\n x = dim.x - offsetWidth;\n position = TOOLTIP_RIGHT;\n x -= arrowSize;\n } else {\n position = 'left';\n x += arrowSize;\n }\n if (dim.height < offsetHeight) {\n y = Math.max(0, dim.y + dim.height / 2 - offsetHeight / 2);\n }\n\n const arrowPos = getArrowPos(position, dim, {\n x,\n y,\n boxHeight: offsetHeight,\n boxWidth: offsetWidth\n }, this._config);\n\n return {\n position,\n arrowPos,\n x,\n y\n };\n };\n\n const positionVertical = () => {\n let position;\n let y;\n // Position tooltip at the center of plot\n let x = dim.x - offsetWidth / 2 + dim.width / 2;\n\n // Overflows to the right\n if ((extent.width - (dim.x + offset.x)) < offsetWidth) {\n x = extent.width - offsetWidth - offset.x;\n } else if ((x + offset.x) < extent.x) { // Overflows to the left\n x = extent.x;\n }\n\n if (positionTop) {\n y = dim.y - offsetHeight - arrowSize;\n position = TOOLTIP_BOTTOM;\n } else {\n y = dim.y + dim.height + arrowSize;\n position = TOOLTIP_TOP;\n }\n\n const arrowPos = getArrowPos(position, dim, {\n x,\n y,\n boxHeight: offsetHeight,\n boxWidth: offsetWidth\n }, this._config);\n\n return {\n position,\n arrowPos,\n x,\n y\n };\n };\n\n this._target = dim;\n if (!orientation) {\n if (positionTop) {\n orientation = 'vertical';\n } else if (positionRight || positionLeft) {\n orientation = 'horizontal';\n } else {\n orientation = 'vertical';\n }\n }\n\n if (orientation === 'horizontal') {\n obj = positionHorizontal();\n } else if (orientation === 'vertical') {\n obj = positionVertical();\n }\n\n this._position = {\n x: obj.x,\n y: obj.y\n };\n\n this._arrowPos = obj.arrowPos;\n if (!arrowDisabled) {\n placeArrow(this, obj.position, obj.arrowPos);\n } else {\n this._tooltipArrow.style('display', 'none');\n this._tooltipBackground.style('display', 'none');\n }\n this._arrowOrientation = obj.position;\n draw && this.position(obj.x, obj.y);\n return this;\n }\n\n /**\n * Hides the tooltip element.\n * @return {Tooltip} Instance of tooltip.\n */\n hide () {\n this._tooltipContainer.style('display', 'none');\n this._tooltipConnectorContainer.style('display', 'none');\n return this;\n }\n\n /**\n * Shows the tooltip element.\n * @return {Tooltip} Instance of tooltip.\n */\n show () {\n this._tooltipContainer.style('display', 'block');\n return this;\n }\n\n extent (extent) {\n this._extent = extent;\n return this;\n }\n\n offset (offset) {\n this._offset = offset;\n return this;\n }\n\n remove () {\n this._tooltipContainer.remove();\n this._tooltipBackground.remove();\n this._tooltipConnectorContainer.remove();\n return this;\n }\n}\n","import { FieldType } from 'muze-utils';\n\nexport const strategies = {\n showSelectedItems: (dm) => {\n const dataObj = dm.getData();\n const measures = dataObj.schema.filter(d => d.type === FieldType.MEASURE);\n const aggregatedModel = dm.groupBy([''], measures.reduce((acc, v) => {\n acc[v.name] = v.defAggFn === 'count' ? 'sum' : v.defAggFn;\n return acc;\n }, {}));\n const fieldsObj = dm.getFieldspace().fieldsObj();\n const fieldsConf = aggregatedModel.getFieldsConfig();\n let values = [{\n value: `${dataObj.data.length}`,\n style: {\n 'font-weight': 'bold'\n }\n }, 'Items Selected'];\n const measureNames = measures.map(d => d.name);\n if (measureNames.length) {\n values = [...values, ...[`(${fieldsObj[measureNames[0]].defAggFn().toUpperCase()}) ${measureNames[0]}`,\n {\n value: `${aggregatedModel.getData().data[0][fieldsConf[measureNames[0]].index].toFixed(2)}`,\n style: {\n 'font-weight': 'bold'\n }\n }]];\n }\n return [values];\n }\n};\n","import { Tooltip as TooltipRenderer } from '@chartshq/muze-tooltip';\nimport { FieldType } from 'muze-utils';\nimport { spaceOutBoxes } from '../helper';\nimport { strategies } from './strategies';\nimport { FRAGMENTED } from '../../enums/constants';\nimport SpawnableSideEffect from '../spawnable';\n\nimport './styles.scss';\n\nexport default class Tooltip extends SpawnableSideEffect {\n constructor (...params) {\n super(...params);\n this._tooltips = {};\n this._strategies = strategies;\n this._strategy = 'default';\n }\n\n static defaultConfig () {\n return {\n padding: 5,\n offset: {\n x: 0,\n y: 0\n }\n };\n }\n\n static formalName () {\n return 'tooltip';\n }\n\n apply (selectionSet, payload, options = {}) {\n let totalHeight = 0;\n let totalWidth = 0;\n const dataModel = selectionSet.mergedEnter.model;\n const context = this.firebolt.context;\n const drawingInf = this.drawingContext();\n if ((dataModel.isEmpty() || payload.criteria === null) || selectionSet.isSourceFieldPresent === false) {\n this.hide(options, null);\n return this;\n }\n\n const tooltips = this._tooltips;\n const config = this.config();\n const boundBox = {\n width: drawingInf.width,\n height: drawingInf.height\n };\n const showInPosition = payload.showInPosition;\n const pad = config.padding;\n const dataModels = [];\n const fragmented = config.mode === FRAGMENTED;\n const sourceInf = context.getSourceInfo();\n const fields = sourceInf.fields;\n const xFieldDim = fields.x[0] ? fields.x[0].type() === FieldType.DIMENSION : false;\n const showVertically = !!xFieldDim;\n const tooltipPos = payload.position;\n const boxes = [];\n const enter = {};\n const uids = dataModel.getData().uids;\n if (fragmented) {\n dataModels.push(...uids.map(d => dataModel.select((fieldsArr, i) => i === d, {\n saveChild: false\n })));\n } else {\n dataModels.push(dataModel);\n }\n\n let target = payload.target;\n let targetFields = [];\n if (target) {\n targetFields = target[0] || [];\n const sourceFields = payload.sourceFields;\n const indices = [];\n for (let i = 0, len = targetFields.length; i < len; i++) {\n if (sourceFields.indexOf(targetFields[i]) !== -1) {\n indices.push(i);\n }\n }\n target = target.map(d => d.filter((v, i) => indices.indexOf(i) !== -1));\n }\n\n const plotDimensions = context.getPlotPointsFromIdentifiers(target || payload.criteria, {\n getBBox: true\n });\n\n // Show tooltip for each datamodel\n for (let i = 0; i < dataModels.length; i++) {\n let plotDim = plotDimensions[i];\n if (fragmented) {\n const dimensions = dataModels[i].getData().schema.filter(d => d.type === FieldType.DIMENSION)\n .map(d => d.name);\n plotDim = context.getPlotPointsFromIdentifiers(dataModels[i].project(dimensions), { getBBox: true });\n plotDim = plotDim && plotDim[0];\n }\n\n let dt = dataModels[i];\n if (config.fields) {\n dt = dt.project(config.fields, {\n saveChild: false\n });\n }\n if (config.dataTransform) {\n dt = config.dataTransform(dt, i);\n }\n\n enter[i] = true;\n const layoutContainer = drawingInf.parentContainer;\n const layoutBoundBox = layoutContainer.getBoundingClientRect();\n const unitBoundBox = drawingInf.htmlContainer.getBoundingClientRect();\n\n const offsetLeft = unitBoundBox.left - layoutBoundBox.left;\n const offsetTop = unitBoundBox.top - layoutBoundBox.top;\n const tooltipInst = tooltips[i] = tooltips[i] || new TooltipRenderer(layoutContainer,\n drawingInf.svgContainer);\n\n sourceInf.payload = payload;\n sourceInf.firebolt = this.firebolt;\n sourceInf.detailFields = context.detailFields();\n sourceInf.timeDiffs = context.timeDiffsByField();\n tooltipInst.context(sourceInf);\n const strategy = strategies[options.strategy];\n tooltipInst.content(options.strategy || this._strategy, dt, {\n formatter: strategy,\n order: options.order\n })\n .config(this.config())\n .extent({\n x: 0,\n y: 0,\n width: layoutBoundBox.width,\n height: layoutBoundBox.height\n })\n .offset({\n x: offsetLeft + (config.offset.x || 0),\n y: offsetTop + (config.offset.y || 0)\n });\n\n if (showInPosition) {\n tooltipInst.position(tooltipPos.x + pad, tooltipPos.y + pad);\n } else if (plotDim) {\n tooltipInst.positionRelativeTo({\n x: plotDim.x,\n y: plotDim.y,\n width: plotDim.width || 0,\n height: plotDim.height || 0\n }, {\n orientation: fragmented ?\n (showVertically ? 'horizontal' : 'vertical') : undefined\n });\n } else {\n tooltipInst.hide();\n break;\n }\n\n if (fragmented) {\n const position = tooltipInst._position;\n const tooltipBoundBox = tooltipInst._tooltipContainer.node().getBoundingClientRect();\n\n totalHeight += tooltipBoundBox.height + pad;\n totalWidth += tooltipBoundBox.width + pad;\n if (showVertically ? totalHeight > drawingInf.height : totalWidth > drawingInf.width) {\n break;\n }\n boxes.push({\n x: position.x,\n y: position.y,\n width: tooltipBoundBox.width,\n height: tooltipBoundBox.height,\n tooltip: tooltipInst\n });\n }\n }\n\n for (const key in tooltips) {\n if (!enter[key]) {\n const tooltip = tooltips[key];\n tooltip.content(payload.action, null);\n if (!tooltip.getContents().length) {\n tooltip.remove();\n delete tooltips[key];\n }\n }\n }\n if (fragmented) {\n spaceOutBoxes(boxes, boundBox, showVertically);\n boxes.forEach(box => box.tooltip.position(box.x, box.y, {\n repositionArrow: true\n }));\n }\n return this;\n }\n\n hide (options) {\n const tooltips = this._tooltips;\n for (const key in tooltips) {\n if ({}.hasOwnProperty.call(tooltips, key)) {\n const strategy = options.strategy || this._strategy;\n tooltips[key].content(strategy, null);\n tooltips[key].hide();\n }\n }\n }\n}\n","export const spaceOutBoxes = (boxes, extent, showVertically) => {\n let y;\n let height;\n let x;\n let width;\n let i;\n const pad = 5;\n const len = boxes.length;\n const spaceOutIfOverlap = (firstBox, secondBox, opposite) => {\n x = firstBox.x;\n width = firstBox.width;\n y = firstBox.y;\n height = firstBox.height;\n const bottom = y + height;\n const right = x + width;\n\n if (showVertically) {\n if (opposite ? y < (secondBox.y + secondBox.height) : bottom > secondBox.y) {\n secondBox.y = opposite ? firstBox.y - secondBox.height - pad :\n bottom + pad;\n }\n } else if (opposite ? x < (secondBox.x + secondBox.width) : right > secondBox.x) {\n secondBox.x = opposite ? firstBox.x - secondBox.width - pad :\n right + pad;\n }\n };\n\n boxes.sort((a, b) => (showVertically ? a.y - b.y : a.x - b.x));\n i = 0;\n\n for (i = 0; i < len - 1; i++) {\n spaceOutIfOverlap(boxes[i], boxes[i + 1]);\n }\n\n if ((boxes[i].y + boxes[i].height) > extent.height ||\n (boxes[i].x + boxes[i].width) > extent.width) {\n if (showVertically) {\n boxes[i].y -= (boxes[i].height + boxes[i].y) - extent.height;\n } else {\n boxes[i].x -= (boxes[i].width + boxes[i].x) - extent.width;\n }\n for (i = len - 1; i > 0; i--) {\n spaceOutIfOverlap(boxes[i], boxes[i - 1], true);\n }\n }\n return boxes;\n}\n;\n","import { selectElement, FieldType } from 'muze-utils';\n\nimport './styles.scss';\nimport { CLASSPREFIX } from '../../enums/constants';\nimport SpawnableSideEffect from '../spawnable';\n\nexport default class Crossline extends SpawnableSideEffect {\n static defaultConfig () {\n return {\n className: `${CLASSPREFIX}-crossline-group`,\n bandClass: `${CLASSPREFIX}-crossband`,\n lineClass: `${CLASSPREFIX}-crossline`\n };\n }\n\n static formalName () {\n return 'crossline';\n }\n\n apply (selectionSet, payload) {\n let height;\n let bandWidth;\n let px;\n let width;\n const {\n className,\n bandClass,\n lineClass\n } = this.config();\n const dataModel = selectionSet.mergedEnter.model;\n const drawingInf = this.drawingContext();\n if (payload.criteria && dataModel && dataModel.isEmpty()) {\n return this;\n }\n if (payload.criteria === null || !dataModel) {\n this.hide();\n return this;\n }\n\n const dataObj = dataModel.getData();\n const sourceInf = this.firebolt.context.getSourceInfo();\n const axes = sourceInf.axes;\n const axisFields = sourceInf.fields;\n const fields = selectionSet.fields;\n const data = dataObj.data;\n const fieldsConfig = dataModel.getFieldsConfig();\n const svgContainer = drawingInf.sideEffectGroup;\n\n const elemData = [];\n fields.forEach((field) => {\n const fieldIndex = fieldsConfig[field] && fieldsConfig[field].index;\n const dataArr = data.map(d => d[fieldIndex]);\n const axisIndex = [['x', 0], ['x', 1], ['y', 0], ['y', 1]].find((arr) => {\n const fieldInst = axisFields[arr[0]][arr[1]];\n return fieldInst && fieldInst.type() === FieldType.DIMENSION &&\n fieldInst.getMembers().indexOf(field) !== -1;\n });\n if (axisIndex !== undefined && data.length) {\n const type = axisIndex[0];\n const axis = axes[type][axisIndex[1]];\n const value = dataArr[0];\n bandWidth = axis.getUnitWidth() || 0;\n px = axis.getScaleValue(value) + bandWidth / 2 + drawingInf.xOffset;\n const plotWidth = Math.max(...this.firebolt.context.layers().map(layer => layer.getPlotSpan()[type]));\n const pad = Math.max(...this.firebolt.context.layers().map(layer => layer.getPlotPadding()[type]));\n height = drawingInf.height;\n width = drawingInf.width;\n const startPx = px - plotWidth / 2 - pad / 2;\n const endPx = px + plotWidth / 2 + pad / 2;\n const dataPoint = {};\n if (type === 'y') {\n dataPoint.d = `M 0 ${startPx} L 0 ${endPx} L ${width} ${endPx} L ${width} ${startPx} Z`;\n } else {\n dataPoint.d = `M ${startPx} 0 L ${endPx} 0 L ${endPx} ${height} L ${startPx} ${height} Z`;\n }\n dataPoint.className = plotWidth ? bandClass : lineClass;\n elemData.push(dataPoint);\n }\n });\n if (elemData.length) {\n const parentGroup = this.createElement(svgContainer, 'g', [1], className);\n const elem = this.createElement(parentGroup, 'path', elemData);\n elem.attr('d', d => d.d).style('pointer-events', 'none')\n .attr('class', d => d.className);\n }\n return this;\n }\n\n hide () {\n const className = this.config().className;\n const drawingInf = this.drawingContext();\n selectElement(drawingInf.sideEffectGroup).selectAll(`.${className}`).remove();\n }\n}\n","const fadeFn = (set, context, strategy) => {\n const {\n mergedEnter,\n mergedExit,\n exitSet,\n completeSet\n } = set;\n\n if (!mergedEnter.length && !mergedExit.length) {\n context.applyInteractionStyle(completeSet, {}, strategy, false);\n } else {\n context.applyInteractionStyle(exitSet[1], {}, strategy, true);\n context.applyInteractionStyle(mergedEnter, {}, strategy, false);\n }\n};\n\nexport const strategies = {\n fade: fadeFn,\n focus: (set, context) => {\n const {\n mergedEnter,\n mergedExit,\n completeSet\n } = set;\n if (!mergedEnter.length && !mergedExit.length) {\n context.applyInteractionStyle(completeSet, {}, 'focus', false);\n } else {\n context.applyInteractionStyle(mergedExit, {}, 'focus', true);\n context.applyInteractionStyle(mergedEnter, {}, 'focus', false);\n }\n },\n highlight: (set, context) => {\n const {\n mergedEnter,\n mergedExit,\n entrySet,\n exitSet,\n completeSet\n } = set;\n if (!mergedEnter.length && !mergedExit.length) {\n context.applyInteractionStyle(completeSet, {}, 'highlight', false);\n } else {\n context.applyInteractionStyle(entrySet[1], {}, 'highlight', true);\n context.applyInteractionStyle(exitSet[1], {}, 'highlight', false);\n }\n }\n};\n","import SurrogateSideEffect from '../surrogate';\nimport { strategies } from './strategy';\n\nexport default class PlotHighlighter extends SurrogateSideEffect {\n constructor (...params) {\n super(...params);\n this._strategy = 'highlight';\n this._strategies = strategies;\n }\n\n static formalName () {\n return 'highlighter';\n }\n\n static target () {\n return 'visual-unit';\n }\n\n apply (selectionSet, payload, options = {}) {\n const strategy = this._strategies[options.strategy || this._strategy];\n\n if (selectionSet.isSourceFieldPresent !== false) {\n strategy(selectionSet, this, options.strategy || this._strategy);\n }\n\n return this;\n }\n}\n","import SurrogateSideEffect from '../surrogate';\n\nexport default class FilterEffect extends SurrogateSideEffect {\n static formalName () {\n return 'filter';\n }\n\n static target () {\n return 'visual-unit';\n }\n\n static mutates () {\n return true;\n }\n\n apply (selectionSet, payload) {\n const context = this.firebolt.context;\n const entryModel = selectionSet.mergedEnter.model;\n if (payload.criteria === null) {\n context.clearCaching().resetData();\n } else {\n context.enableCaching().data(entryModel);\n }\n return this;\n }\n}\n","import { DataModel } from 'muze-utils';\n\nimport { CLASSPREFIX } from '../../enums/constants';\nimport SpawnableSideEffect from '../spawnable';\n\nimport './styles.scss';\n\nexport default class AnchorEffect extends SpawnableSideEffect {\n constructor (...params) {\n super(...params);\n const context = this.firebolt.context;\n this._layers = this.addAnchorLayers(context);\n }\n\n static target () {\n return 'visual-unit';\n }\n\n static defaultConfig () {\n return {\n className: `${CLASSPREFIX}-anchors-group`\n };\n }\n\n static formalName () {\n return 'anchors';\n }\n\n addAnchorLayers (context) {\n const layers = [];\n this.firebolt.context.layers().forEach((layer, idx) => {\n const shouldDrawAnchors = layer.shouldDrawAnchors();\n if (shouldDrawAnchors) {\n const encodingFieldsInf = layer.encodingFieldsInf();\n const layerObj = {\n instances: context.addLayer({\n name: `${layer.alias()}-${this.constructor.formalName()}-${idx}`,\n mark: 'point',\n encoding: {\n x: encodingFieldsInf.xField,\n y: encodingFieldsInf.yField,\n color: {\n field: encodingFieldsInf.colorField\n },\n size: {\n field: encodingFieldsInf.sizeField,\n value: this.defaultSizeValue()\n }\n },\n transform: {\n type: 'identity'\n },\n transition: this.getTransitionConfig(),\n calculateDomain: false,\n source: dt => dt.select(() => false, {\n saveChild: false\n }),\n interactive: false,\n render: false\n }),\n linkedLayer: layer\n };\n\n layers.push(layerObj);\n }\n });\n return layers;\n }\n\n getTransitionConfig () {\n return {\n disabled: true\n };\n }\n\n /**\n * Returns the default area value of the anchor point.\n * @return { number } Default area value of anchor.\n */\n defaultSizeValue () {\n return 100;\n }\n\n apply (selectionSet) {\n const self = this;\n const dataModel = selectionSet.mergedEnter.model;\n if (selectionSet.isSourceFieldPresent !== false) {\n const drawingInf = this.drawingContext();\n const sideEffectGroup = drawingInf.sideEffectGroup;\n const className = `${this.config().className}`;\n const layers = this._layers;\n const parentGroup = this.createElement(sideEffectGroup, 'g', [1], `${className}-container`);\n const anchorGroups = this.createElement(parentGroup, 'g', layers);\n anchorGroups.each(function (layer) {\n const instances = layer.instances;\n const elems = self.createElement(this, 'g', instances, className);\n const linkedLayer = layer.linkedLayer;\n const [transformedData, schema] = linkedLayer.getTransformedDataFromIdentifiers(dataModel);\n const transformedDataModel = new DataModel(transformedData, schema);\n elems.each(function (d, i) {\n instances[i].data(transformedDataModel).mount(this);\n });\n });\n }\n return this;\n }\n}\n","import AnchorEffect from './anchors';\nimport { CLASSPREFIX } from '../enums/constants';\n\nexport default class PersistentAnchors extends AnchorEffect {\n static formalName () {\n return 'persistent-anchors';\n }\n\n static defaultConfig () {\n return {\n className: `${CLASSPREFIX}-persistent-anchors`\n };\n }\n\n getTransitionConfig () {\n return {\n disabled: true\n };\n }\n}\n","import AnchorEffect from './anchors';\nimport { CLASSPREFIX } from '../enums/constants';\n\nexport default class BrushAnchors extends AnchorEffect {\n static formalName () {\n return 'brush-anchors';\n }\n\n static defaultConfig () {\n return {\n className: `${CLASSPREFIX}-brush-anchors`\n };\n }\n\n getTransitionConfig () {\n return {\n disabled: true\n };\n }\n}\n","import * as BEHAVIOURS from './enums/behaviours';\n\nexport const behaviourEffectMap = {\n [BEHAVIOURS.BRUSH]: ['selectionBox', {\n name: 'highlighter',\n options: {\n strategy: 'fade'\n }\n }, 'brush-anchors'],\n [`${BEHAVIOURS.BRUSH},${BEHAVIOURS.SELECT}`]: [{\n name: 'tooltip',\n options: {\n strategy: 'showSelectedItems',\n order: 0,\n filter: context => context.config().mode === 'fragmented'\n }\n }],\n [BEHAVIOURS.HIGHLIGHT]: [{\n name: 'highlighter',\n options: {\n strategy: 'highlight'\n }\n }, 'crossline', {\n name: 'tooltip',\n options: {\n order: 9999\n }\n }, 'anchors'],\n [BEHAVIOURS.FILTER]: ['filter'],\n [BEHAVIOURS.SELECT]: [{\n name: 'highlighter',\n options: {\n strategy: 'focus'\n }\n }, 'persistent-anchors']\n};\n","export const CLASSPREFIX = 'muze';\nexport const STACK = 'stack';\nexport const GROUP = 'group';\nexport const IDENTITY = 'identity';\nexport const ANGLE = 'angle';\nexport const RADIUS = 'radius';\nexport const SIZE = 'size';\nexport const COLOR = 'color';\nexport const SHAPE = 'shape';\nexport const OUTER_RADIUS_VALUE = 'outerRadiusValue';\nexport const TEXT_ANCHOR_MIDDLE = 'middle';\nexport const ENCODING = {\n X: 'x',\n Y: 'y',\n X0: 'x0',\n Y0: 'y0'\n};\n\nexport const ASCENDING = 'asc';\n\nexport const AREA_LAYER = 'area';\nexport const ARC_LAYER = 'arc';\nexport const LINE_LAYER = 'line';\nexport const TEXT_LAYER = 'text';\nexport const POINT_LAYER = 'point';\nexport const BAR_LAYER = 'bar';\nexport const TICK_LAYER = 'tick';\nexport const SIMPLE_LAYER = 'simple';\nexport const BASE_LAYER = 'base';\n","import { CLASSPREFIX, STACK } from '../../enums/constants';\n\nexport const defaultConfig = {\n classPrefix: CLASSPREFIX,\n defClassName: 'layer-area',\n className: '',\n interpolate: 'linear',\n transform: {\n type: STACK\n },\n interaction: {\n\n },\n nearestPointThreshold: 10,\n encoding: {\n color: {},\n x: {},\n y: {},\n y0: {},\n strokeOpacity: {\n value: 1\n }\n },\n transition: {\n effect: 'cubic',\n duration: 1000\n },\n connectNullData: false\n};\n","import { ERROR_MSG } from 'muze-utils';\n\n/**\n * This is an interface class which any new layer class has to extend.\n *\n * @example\n * class BarLayer extends BaseLayer {\n * update (params) {\n * // super.update(params);\n * // Update the bar layer\n * }\n * }\n * @class\n */\nexport default class SimpleLayer {\n\n formalName () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Sets or gets the dependencies.\n * @param {Object} dependencies Dependencies needed by layer\n * @return {BaseLayer} Instance of base layer.\n */\n dependencies () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Returns the config of the layer\n *\n * @param {Object} config Configuration of layer\n * @return {Object} configuration of layer\n */\n config () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Acts as a getter or setter function\n * When setter\n * Returns the datamodel of the layer\n * @param { DataModel } dataModel instance of DataModel\n * @return { DataModel } DataModel instance of the layer\n */\n data () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Returns a serialized schema of the layer\n * @return {Object} Serialized schema\n */\n serialize () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Returns the unique identifier of this layer\n * @return {string} id of the layer\n */\n id () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n /*\n * This method resolves the x, y, x0 and y0 values from the transformed data.\n * It also checks the type of transformed data for example, if it is a stacked data\n * then it fetches the y and y0 values from the stacked data.\n * @param {Array.} transformedData transformed data\n * @param {Object} fieldMap field definitions\n * @param {string} transformType type of transformed data - stack, group or identity.\n * @return {Array.} Normalized data\n * @private\n */\n normalizeTransformedData () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Gets the transform method from transform factory based on type of transform. It then calls the\n * transform method with the data and passes the configuration parameters of transform such as\n * groupBy, value field, etc.\n *\n * @param {DataModel} dataModel Instance of dataModel\n * @param {Object} config configuration for transforming data\n * @return {Array.} Transformed data.\n * @private\n */\n getTransformedData () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Calculates the domain from the data.\n * It checks the type of field and calculates the domain based on that. For example, if it\n * is a quantitative or temporal field, then it calculates the min and max from the data or\n * if it is a nominal field then it gets all the values from the data of that field.\n * @param {Array} data DataArray\n * @return {Array} Domain values array.\n */\n _calculateDomainFromData () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Returns the domain for the axis.\n *\n * @param {string} encodingType type of encoding x, y, color, etc.\n * @return {Object} Axis domains\n */\n getDomain () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Abstract method for getting nearest point\n * @return {BaseLayer} Instance of base layer\n */\n getNearestPoint () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Abstract method for highlighting points\n * @return {BaseLayer} Instance of base layer\n */\n highlightPoint () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Abstract method for deselecting points\n * @return {BaseLayer} Instance of base layer\n */\n dehighlightPoint () {\n return this;\n }\n\n linkLayerStore () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Sets the container element for the layer to be renderered.\n * @param {SVGElement} mountPoint SVG element or group element.\n */\n mount () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n render () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n}\n","export const DATA = 'data';\nexport const CONFIG = 'config';\nexport const MEASUREMENT = 'measurement';\nexport const AXES = 'axes';\nexport const NORMALIZED_DATA = 'normalizedData';\nexport const TRANSFORMED_DATA = 'transformedData';\nexport const DOMAIN = 'domain';\nexport const MOUNT = 'mount';\nexport const FIELDMAP = 'fieldMap';\nexport const DATA_UPDATED = 'dataUpdated';\n","/**\n * @module Axis\n * This file declares a class that is used to render an axis to add meaning to\n * plots.\n */\nimport { Symbols } from 'muze-utils';\nimport * as AxisOrientation from '../enums/axis-orientation';\n\n/**\n * @module Axis\n * This file exports constants that are used to reference axis orientations\n * in a consistent manner.\n */\nexport const BOTTOM = 'bottom';\nexport const TOP = 'top';\nexport const LEFT = 'left';\nexport const RIGHT = 'right';\n\n/**\n * This object is used to associate the axis orientation with the d3 class\n * used to represent that axis.\n */\nexport const axisOrientationMap = {\n [AxisOrientation.LEFT]: Symbols.axisLeft,\n [AxisOrientation.BOTTOM]: Symbols.axisBottom,\n [AxisOrientation.RIGHT]: Symbols.axisRight,\n [AxisOrientation.TOP]: Symbols.axisTop\n};\n","/**\n * @module axis\n * This file exports constants used to reference scale type\n * consistently throughout the project.\n */\nexport const LINEAR = 'linear';\nexport const BAND = 'band';\nexport const TIME = 'temporal';\nexport const COLOR = 'color';\nexport const ORDINAL = 'ordinal';\nexport const QUANTIZE = 'quantize';\nexport const QUANTILE = 'quantile';\nexport const LOG = 'log';\nexport const POW = 'pow';\nexport const IDENTITY = 'identity';\nexport const SEQUENTIAL = 'sequential';\nexport const THRESHOLD = 'threshold';\n","export const CLASSPREFIX = 'muze';\n\nexport const CONTINOUS = 'continous';\nexport const DISCRETE = 'discrete';\nexport const SEQUENTIAL = 'sequential';\nexport const ORDINAL = 'ordinal';\nexport const LINEAR = 'linear';\nexport const THRESHOLD = 'threshold';\nexport const QUANTIZE = 'quantize';\nexport const QUANTILE = 'quantile';\n\nexport const COLOR = 'color';\nexport const SHAPE = 'shape';\nexport const SIZE = 'size';\n\nexport const DOMAIN = 'domain';\nexport const BAND = 'band';\nexport const HIDDEN = 'hidden';\nexport const NUMBER = 'number';\nexport const BOTTOM = 'bottom';\nexport const TOP = 'top';\n\nexport const RGB = 'rgb';\nexport const HEX = 'hex';\nexport const HSLA = 'hsla';\nexport const HSL = 'hsl';\n\n","import { scales, colorSchemes } from 'muze-utils';\n\nimport {\n SEQUENTIAL,\n ORDINAL,\n LINEAR,\n CONTINOUS,\n THRESHOLD,\n QUANTIZE\n} from './enums/constants';\n\nimport * as ScaleType from './enums/scale-type';\n\nconst {\n scaleLinear,\n scaleThreshold,\n scaleLog,\n scalePow,\n scaleIdentity,\n scaleOrdinal,\n scaleSequential,\n scaleQuantize,\n scaleQuantile,\n schemeCategory10,\n schemeCategory20,\n schemeCategory20b,\n scaleBand,\n scaleTime\n} = scales;\nexport const scaleMap = {\n [ScaleType.LINEAR]: scaleLinear,\n [ScaleType.BAND]: scaleBand,\n [ScaleType.QUANTIZE]: scaleQuantize,\n [ScaleType.QUANTILE]: scaleQuantile,\n [ScaleType.THRESHOLD]: scaleThreshold,\n [ScaleType.SEQUENTIAL]: scaleSequential,\n [ScaleType.LOG]: scaleLog,\n [ScaleType.POW]: scalePow,\n [ScaleType.IDENTITY]: scaleIdentity,\n [ScaleType.TIME]: scaleTime,\n [ScaleType.COLOR]: scaleLinear,\n [ScaleType.ORDINAL]: scaleOrdinal\n};\nexport const SCHEMES = {\n SCHEME1: schemeCategory10,\n SCHEME2: schemeCategory20,\n SCHEME3: schemeCategory20b\n};\n\n/**\n * Accepts a scheme in a string format and returns the scale from d3-scale-chromatic\n *\n * @export\n * @param {string} scheme a string representing the kind of scheme for the color axis\n * @return {Object} The corresponding scale from a scheme type from d3 chromatic scale\n */\nexport function getScheme (scheme) {\n if (scheme[0] === 'i') {\n return scaleSequential(colorSchemes[scheme]);\n }\n return scaleOrdinal(colorSchemes[scheme]);\n}\n\n/**\n *\n *\n * @export\n * @param {*} scheme\n * @returns\n */\nexport function getSchemeType (scheme) {\n let schemeType = '';\n if (scheme && typeof (scheme) === 'string') {\n schemeType = scheme[0] === 'i' ? SEQUENTIAL : ORDINAL;\n } else {\n schemeType = ORDINAL;\n }\n return schemeType;\n}\n\n/**\n * This function is used to create a scale that is assigned to\n * an instance of axis.\n *\n * @export\n * @param {Object} params the input parameters to create a Scale object\n * @param {string} params.type the type of scale\n * @param {Array} params.range the range of scale\n * @return {Object} instance of scale\n */\nexport function createScale (params) {\n if (!params.type || !scaleMap[params.type]) {\n throw new Error(`${params.type} is not a valid scale type`);\n }\n if (!Array.isArray(params.range)) {\n throw new Error('range parameter must be an array');\n }\n let scaleFactory = null;\n const range = params.range;\n // @todo: do it using scale decorator\n if (params.type === LINEAR && params.interpolator) {\n scaleFactory = scaleMap[params.interpolator];\n if (params.interpolator === ScaleType.POW) {\n return scaleFactory().range(range).exponent(params.exponent);\n } else if (params.interpolator === ScaleType.LOG) {\n return scaleFactory().range(range).base([params.base]);\n }\n } else {\n scaleFactory = scaleMap[params.type];\n }\n\n if (params.type === QUANTIZE) {\n scaleFactory().nice();\n }\n return scaleFactory().range(range);\n}\n\n/**\n * This method is used to update the range of a scale\n * so that the core module can remain agnostic of the d3\n * scale api.\n *\n * @export\n * @param {Scale} scale Instance of d3 Scale.\n * @param {Array} range new range of the scale.\n * @return {Scale} Updated scale.\n */\nexport function updateScaleRange (scale, range) {\n return scale.range(range);\n}\n\n/**\n *\n *\n * @export\n * @param {*} domainType\n * @param {*} rangeType\n * @param {*} steps\n * @returns\n */\nexport function getScaleType (domainType, rangeType, steps) {\n if (rangeType === CONTINOUS) {\n return LINEAR;\n }\n if (domainType === CONTINOUS) {\n if (steps instanceof Array) {\n return THRESHOLD;\n }\n return QUANTIZE;\n }\n return ORDINAL;\n}\n","import { getUniqueId } from 'muze-utils';\nimport { CLASSPREFIX } from '../enums/constants';\n\n/**\n *\n *\n */\nexport const defaultConfig = {\n id: getUniqueId(),\n axisName: {\n defClassName: 'axis-name'\n },\n axisNamePadding: 12,\n base: 10,\n classPrefix: CLASSPREFIX,\n className: `${CLASSPREFIX}-axis`,\n exponent: 1,\n interpolator: 'linear',\n fixedBaseline: true,\n labels: {\n rotation: 0,\n smartTicks: false\n },\n orientation: 'left',\n maxHeight: 50, // @todo: height and width wont be hardcoded\n maxWidth: 40,\n numberFormat: val => val,\n padding: 0.3,\n nice: true,\n numberOfTicks: 10,\n rotate: false,\n show: true,\n showAxisName: true,\n showInnerTicks: null,\n showOuterTicks: null,\n style: {},\n type: 'linear',\n tickFormat: null,\n tickValues: null,\n xOffset: undefined,\n yOffset: undefined\n};\n\n","/**\n * This file exports functionality that is used to render axis.\n */\nimport { selectElement, makeElement, angleToRadian } from 'muze-utils';\nimport * as AxisOrientation from './enums/axis-orientation';\nimport { LINEAR, HIDDEN, BOTTOM, TOP } from './enums/constants';\n\n/**\n *\n *\n * @param {*} instance\n * @param {*} container\n * @param {*} labelManager\n * @param {*} config\n */\nconst rotateAxis = (instance, tickText, labelManager, config) => {\n const axis = instance.axis();\n const scale = instance.scale();\n const {\n orientation,\n labels,\n fixedBaseline,\n type\n } = config;\n let { rotation } = labels;\n\n const tickSize = instance.getTickSize();\n\n tickText.each(function (datum, index) {\n let yShift;\n let xShift;\n const tickFormatter = axis.tickFormat() ? axis.tickFormat : scale.tickFormat;\n const temp = tickFormatter ? tickFormatter()(datum) : datum;\n\n datum = temp.toString();\n\n const tickLabelDim = labelManager.getOriSize(datum);\n const width = tickLabelDim.width * 0.5;\n const height = tickLabelDim.height * 0.5;\n\n if (rotation < 0) {\n rotation = 360 + rotation;\n }\n\n const quadrant = 4 - Math.floor(rotation / 90);\n const rotationNormalizer = ((quadrant % 2 === 0) ? rotation : 180 * Math.ceil(rotation / 180) - rotation) % 180;\n\n yShift = Math.sqrt(height ** 2 + width ** 2) * Math.sin(angleToRadian(rotationNormalizer));\n\n if ((quadrant === 3 || quadrant === 2) && !(rotationNormalizer > 67.5 && rotationNormalizer <= 90)) {\n yShift += height * 2;\n }\n xShift = width;\n\n if (rotation === 90) {\n xShift = height;\n } else if (rotation === 270) {\n xShift = -height;\n } else {\n xShift = 0;\n }\n\n if (orientation === AxisOrientation.TOP) {\n xShift = (index === 0 && fixedBaseline && type === LINEAR) ? xShift + xShift / 2 : xShift;\n selectElement(this)\n .attr('transform', `translate(${-xShift + tickSize} \n ${-yShift - tickSize}) rotate(${rotation})`);\n } else {\n xShift = (index === 0 && fixedBaseline && type === LINEAR) ? xShift - xShift / 2 : xShift;\n selectElement(this)\n .attr('transform', `translate(${xShift - tickSize} \n ${yShift + tickSize}) rotate(${rotation})`);\n }\n });\n return tickText;\n};\n\n/**\n *\n *\n * @param {*} tickText\n * @param {*} axisInstance\n */\nconst changeTickOrientation = (selectContainer, axisInstance, tickSize) => {\n const {\n _smartTicks\n } = axisInstance;\n const config = axisInstance.config();\n const labelManager = axisInstance.dependencies().labelManager;\n const {\n labels,\n orientation\n } = config;\n const {\n rotation,\n smartTicks: isSmartTicks\n } = labels;\n\n const tickText = selectContainer.selectAll('.tick text');\n tickText.selectAll('tspan').remove();\n\n // rotate labels if not enough space is available\n if (rotation !== 0 && isSmartTicks === false && (orientation === TOP || orientation === BOTTOM)) {\n rotateAxis(axisInstance, tickText, labelManager, config);\n } else if (rotation === 0 && isSmartTicks === false) {\n tickText.attr('transform', '');\n } else {\n tickText.attr('y', 0)\n .attr('x', 0)\n .text('');\n const tspan = makeElement(tickText, 'tspan', (d, i) => _smartTicks[i].lines, 'smart-text');\n tspan.attr('dy', '0')\n .style('opacity', '0')\n .transition()\n .duration(1000)\n .attr('dy', (d, i) => {\n if (orientation === BOTTOM || i !== 0) {\n return _smartTicks[i].oriTextHeight;\n }\n return -_smartTicks[i].oriTextHeight * (_smartTicks[i].lines.length - 1) - tickSize;\n })\n .style('opacity', 1)\n .attr('x', 0)\n .text(e => e);\n }\n\n return tickText;\n};\n\nconst setFixedBaseline = (axisInstance) => {\n const {\n fixedBaseline\n } = axisInstance.config();\n if (fixedBaseline) {\n axisInstance.setFixedBaseline();\n }\n};\n\n/**\n *\n *\n * @param {*} textNode\n * @param {*} orientation\n * @param {*} measures\n */\nconst setAxisNamePos = (textNode, orientation, measures) => {\n const {\n axisNameHeight,\n yOffset,\n labelOffset,\n availableSpace\n } = measures;\n switch (orientation) {\n case AxisOrientation.LEFT:\n textNode.attr('transform',\n `translate(${-(availableSpace.width - axisNameHeight)},${yOffset + labelOffset})rotate(-90)`);\n break;\n case AxisOrientation.RIGHT:\n textNode.attr('transform',\n `translate(${(availableSpace.width - axisNameHeight)},${yOffset + labelOffset})rotate(90)`);\n break;\n case AxisOrientation.TOP:\n textNode.attr('transform',\n `translate(${availableSpace.width / 2},${-availableSpace.height + axisNameHeight})`);\n break;\n case AxisOrientation.BOTTOM:\n textNode.attr('transform',\n `translate(${availableSpace.width / 2},${availableSpace.height - axisNameHeight / 2})`);\n break;\n default:\n }\n return textNode;\n};\n\n/**\n * This method is used to render the axis inside an\n * svg container.\n *\n * @export\n * @param {Object} axisInstance the nput object required to render axis\n * @param {string} axisInstance.orientation the orientation of axis\n * @param {Object} axisInstance.scale instance of d3 scale\n * @param {SVGElement} axisInstance.container the container in which to render\n */\nexport function renderAxis (axisInstance) {\n const config = axisInstance.config();\n const labelManager = axisInstance.dependencies().labelManager;\n const mount = axisInstance.mount();\n const range = axisInstance.range();\n const axis = axisInstance.axis();\n const scale = axisInstance.scale();\n const {\n _axisNameStyle,\n _tickLabelStyle,\n formatter,\n tickValues\n } = axisInstance;\n const {\n orientation,\n name,\n labels,\n xOffset,\n yOffset,\n axisNamePadding,\n className,\n showAxisName,\n show,\n id,\n interpolator,\n classPrefix\n } = config;\n\n if (!show) {\n return;\n }\n\n const tickSize = axisInstance.getTickSize();\n\n const selectContainer = makeElement(selectElement(mount), 'g', [axisInstance], `${className}`, {},\n key => key.config().id);\n\n // Set style for tick labels\n labelManager.setStyle(_tickLabelStyle);\n\n // @to-do: Need to write a configuration override using decorator pattern\n if (interpolator === 'linear') {\n // Set ticks for the axis\n axisInstance.setTickValues();\n }\n\n const labelFunc = scale.ticks || scale.quantile || scale.domain;\n\n formatter && axis.tickFormat(formatter(tickValues || axis.tickValues() || labelFunc()));\n\n // Get range(length of range)\n const availableSpace = Math.abs(range[0] - range[1]);\n\n // Get width and height taken by axis labels\n const labelProps = axisInstance.axisDimensions().tickLabelDim;\n\n // Draw axis ticks\n selectContainer.attr('transform', `translate(${xOffset},${yOffset})`);\n setFixedBaseline(axisInstance);\n if (labels.smartTicks === false) {\n selectContainer.transition()\n .duration(1000).call(axis);\n } else {\n selectContainer.call(axis);\n }\n selectContainer.selectAll('.tick').classed(`${classPrefix}-ticks`, true);\n selectContainer.selectAll('.tick line').classed(`${classPrefix}-tick-lines`, true);\n\n // Set classes for ticks\n const tickText = selectContainer.selectAll('.tick text');\n tickText.classed(`${classPrefix}-ticks`, true)\n .classed(`${classPrefix}-ticks-${id}`, true);\n changeTickOrientation(selectContainer, axisInstance, tickSize);\n\n // Create axis name\n const textNode = makeElement(selectContainer, 'text', [name], `${classPrefix}-axis-name`)\n .attr('text-anchor', 'middle')\n .classed(`${classPrefix}-axis-name-${id}`, true)\n .text(d => d);\n\n // Hide axis name if show is off\n textNode.classed(HIDDEN, !showAxisName);\n\n // render labels based on orientation of axis\n const labelOffset = availableSpace / 2;\n\n // Set style for axis name\n labelManager.setStyle(_axisNameStyle);\n const axisNameSpace = labelManager.getOriSize(name);\n const measures = {\n labelProps,\n tickSize,\n axisNamePadding,\n axisNameHeight: axisNameSpace.height,\n axisNameWidth: axisNameSpace.width,\n yOffset,\n xOffset,\n labelOffset,\n availableSpace: axisInstance.availableSpace()\n };\n // Set position for axis name\n setAxisNamePos(textNode, orientation, measures);\n}\n","import { TOP, LEFT, BOTTOM } from '../enums/axis-orientation';\nimport { LOG } from '../enums/scale-type';\n\nexport const getNumberOfTicks = (availableSpace, labelDim, axis, axisInstance) => {\n const ticks = axis.scale().ticks();\n const { numberOfTicks } = axisInstance.config();\n const tickLength = ticks.length;\n let numberOfValues = tickLength;\n\n if (tickLength * (labelDim * 1.5) > availableSpace) {\n numberOfValues = Math.floor(availableSpace / (labelDim * 1.5));\n }\n\n numberOfValues = Math.min(numberOfTicks, Math.max(1, numberOfValues));\n return axis.scale().ticks(numberOfValues);\n};\n\nexport const sanitizeDomain = (domain, context) => {\n const interpolator = context.config().interpolator;\n // @todo: Get from scale decorator\n if (interpolator === LOG && domain[0] >= 0) {\n return [Math.max(1, domain[0]), Math.max(1, domain[1])];\n }\n return domain;\n};\n\nexport const getTickFormatter = (tickFormat, numberFormat) => {\n if (tickFormat) {\n return ticks => (val, i) => tickFormat(numberFormat(val), i, ticks);\n }\n return () => val => numberFormat(val);\n};\n\n/**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\nexport const getTickLabelInfo = (context) => {\n let largestLabel = '';\n let labelProps;\n let smartTick = {};\n let axisTickLabels;\n const scale = context.scale();\n const allLabelLengths = [];\n const { tickFormat, tickValues, numberFormat } = context.config();\n const labelFunc = scale.ticks || scale.quantile || scale.domain;\n // set the style on the shared label manager instance\n const { labelManager } = context.dependencies();\n\n labelManager.setStyle(context._tickLabelStyle);\n // get the values along the domain\n\n axisTickLabels = tickValues || labelFunc();\n // Get the tick labels\n axisTickLabels = axisTickLabels.map((originalLabel, i) => {\n const formattedLabel = numberFormat(originalLabel);\n\n // get formats of tick if any\n const label = tickFormat ? tickFormat(formattedLabel, i, axisTickLabels) : (scale.tickFormat ?\n numberFormat(scale.tickFormat()(originalLabel)) : formattedLabel);\n\n // convert to string for quant values\n const temp = label.toString();\n // Get spaces for all labels\n allLabelLengths.push(labelManager.getOriSize(temp));\n // Getting largest label\n if (temp.length > largestLabel.length) {\n largestLabel = temp;\n smartTick = context.smartTicks() ? context.smartTicks()[i] : {};\n labelProps = allLabelLengths[i];\n }\n return label;\n });\n\n labelProps = labelManager.getOriSize(largestLabel);\n\n return { largestLabel, largestLabelDim: labelProps, axisTickLabels, allLabelLengths, smartTick };\n};\n\n/**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\nexport const computeAxisDimensions = (context) => {\n let tickLabelDim = {};\n const {\n name,\n labels,\n tickValues\n } = context.config();\n const angle = ((labels.smartTicks) ? 0 : labels.rotation) * Math.PI / 180;\n const { labelManager } = context.dependencies();\n const {\n largestLabelDim,\n axisTickLabels,\n smartTick\n } = getTickLabelInfo(context);\n const { height: labelHeight, width: labelWidth } = largestLabelDim;\n // get the domain of axis\n const domain = context.domain();\n\n if (domain.length === 0) {\n return null;\n }\n if (context._rotationLock === false) {\n context.setRotationConfig(tickValues || axisTickLabels, largestLabelDim.width);\n context._rotationLock = false;\n }\n if (labels.smartTicks) {\n tickLabelDim = smartTick;\n } else {\n tickLabelDim = {\n width: Math.abs(labelHeight * Math.sin(angle)) + Math.abs(labelWidth * Math.cos(angle)),\n height: Math.abs(labelWidth * Math.sin(angle)) + Math.abs(labelHeight * Math.cos(angle))\n };\n }\n\n labelManager.setStyle(context._axisNameStyle);\n return {\n tickSize: context.getTickSize(),\n tickLabelDim,\n axisLabelDim: labelManager.getOriSize(name),\n largestLabelDim,\n axisTickLabels\n };\n};\n\n/**\n*\n*\n* @memberof SimpleAxis\n*/\nexport const setOffset = (context) => {\n let x = 0;\n let y = 0;\n const logicalSpace = context.logicalSpace();\n const config = context.config();\n const {\n orientation,\n xOffset,\n yOffset\n } = config;\n if (orientation === LEFT) {\n x = xOffset === undefined ? logicalSpace.width : xOffset;\n }\n if (orientation === TOP) {\n y = yOffset === undefined ? logicalSpace.height : yOffset;\n }\n context.config({ xOffset: x, yOffset: y });\n};\n\n/**\n *\n *\n * @param {*} timeDiff\n * @param {*} range\n * @param {*} domain\n * @returns\n */\nconst getAxisOffset = (timeDiff, range, domain) => {\n const pvr = Math.abs(range[1] - range[0]) / (domain[1] - domain[0]);\n const width = (pvr * timeDiff);\n const avWidth = (range[1] - range[0]);\n const bars = avWidth / width;\n const barWidth = avWidth / (bars + 1);\n const diff = avWidth - barWidth * bars;\n\n return diff / 2;\n};\n\nexport const adjustRange = (minDiff, range, domain, orientation) => {\n const diff = getAxisOffset(minDiff, range, domain);\n\n if (orientation === TOP || orientation === BOTTOM) {\n range[0] += diff;\n range[1] -= diff;\n } else {\n range[0] -= diff;\n range[1] += diff;\n }\n return range;\n};\n\n /**\n * Listener attached to the axis on change of parameters.\n *\n * @param {Function} callback to be excuted on change of domain range etc\n * @memberof SimpleAxis\n */\nexport const registerChangeListeners = (context) => {\n const store = context.store();\n\n store.model.next(['domain', 'range', 'mount', 'config'], (...params) => {\n context.render();\n context._domainLock = false;\n context._eventList.forEach((e) => {\n e.action instanceof Function && e.action(...params);\n });\n }, true);\n return context;\n};\n\n/**\n *\n *\n * @param {*} axisDimensions\n * @param {*} config\n * @param {*} range\n * @returns\n */\nexport const getHorizontalAxisSpace = (context, axisDimensions, config, range) => {\n let width;\n let height;\n const {\n tickSize,\n tickLabelDim,\n axisLabelDim\n } = axisDimensions;\n const {\n axisNamePadding,\n showAxisName,\n tickValues\n } = config;\n const domain = context.domain();\n const { height: axisDimHeight } = axisLabelDim;\n const { height: tickDimHeight, width: tickDimWidth } = tickLabelDim;\n\n width = range && range.length ? range[1] - range[0] : 0;\n\n height = 0;\n if (tickValues) {\n const minTickDiff = context.getMinTickDifference();\n const [min, max] = [Math.min(...tickValues, ...domain), Math.max(...tickValues, ...domain)];\n\n width = ((max - min) / Math.abs(minTickDiff)) * (tickDimWidth + context._minTickDistance.width);\n }\n if (!width || width === 0) {\n height = Math.max(tickDimWidth, tickDimHeight);\n } else {\n height = tickDimHeight;\n }\n height += (showAxisName ? (axisDimHeight + axisNamePadding) : 0) + tickSize;\n return {\n width,\n height\n };\n};\n\n/**\n *\n *\n * @param {*} axisDimensions\n * @param {*} config\n * @param {*} range\n * @returns\n */\nexport const getVerticalAxisSpace = (context, axisDimensions, config) => {\n let height;\n let width;\n const {\n tickSize,\n tickLabelDim,\n axisLabelDim\n } = axisDimensions;\n const {\n axisNamePadding,\n showAxisName,\n tickValues\n } = config;\n const domain = context.domain();\n const { height: axisDimHeight } = axisLabelDim;\n const { height: tickDimHeight, width: tickDimWidth } = tickLabelDim;\n\n height = 0;\n width = tickDimWidth;\n if (tickValues) {\n const minTickDiff = context.getMinTickDifference();\n const [min, max] = [Math.min(...tickValues, ...domain), Math.max(...tickValues, ...domain)];\n\n height = ((max - min) / Math.abs(minTickDiff)) * (tickDimHeight);\n }\n width += (showAxisName ? axisDimHeight : 0) + tickSize + axisNamePadding;\n\n return {\n height,\n width\n };\n};\n\n /**\n * Calculates the logical space of the axis\n * @return {Object} Width and height occupied by the axis.\n */\nexport const calculateBandSpace = (context) => {\n const range = context.range();\n const config = context.config();\n const {\n orientation,\n show\n } = config;\n const axisDimensions = context.getAxisDimensions();\n const {\n largestLabelDim,\n axisTickLabels\n } = axisDimensions;\n const { height: largestDimHeight, width: largestDimWidth } = largestLabelDim;\n\n if (orientation === TOP || orientation === BOTTOM) {\n let { width, height } = getHorizontalAxisSpace(context, axisDimensions, config, range);\n if (!width || width === 0) {\n width = axisTickLabels.length * (Math.min(largestDimWidth + context._minTickDistance.width,\n largestDimHeight + context._minTickDistance.width));\n }\n if (show === false) {\n height = 0;\n }\n return {\n width,\n height\n };\n }\n\n let { width, height } = getVerticalAxisSpace(context, axisDimensions, config, range);\n\n if (!height || height === 0) {\n height = axisTickLabels.length * (largestDimHeight + largestDimHeight / 2) + largestDimHeight;\n }\n if (show === false) {\n width = 0;\n }\n return {\n width,\n height\n };\n};\n\n/**\n * Calculates the logical space of the axis\n * @return {Object} Width and height occupied by the axis.\n */\nexport const calculateContinousSpace = (context) => {\n const range = context.range();\n const config = context.config();\n const axisDimensions = context.getAxisDimensions();\n\n const {\n orientation,\n show,\n showAxisName\n } = config;\n const {\n axisLabelDim\n } = axisDimensions;\n\n if (show === false) {\n return {\n width: 0,\n height: 0\n };\n }\n\n const { width: axisDimWidth } = axisLabelDim;\n\n if (orientation === TOP || orientation === BOTTOM) {\n const { width, height } = getHorizontalAxisSpace(context, axisDimensions, config);\n const axisWidth = Math.max(width, axisDimWidth);\n\n return {\n width: axisWidth,\n height\n };\n }\n\n const { width, height } = getVerticalAxisSpace(context, axisDimensions, config, range);\n\n const effHeight = Math.max(height, showAxisName ? axisDimWidth : 0);\n\n return {\n width,\n height: effHeight\n };\n};\n\n","import { mergeRecursive } from 'muze-utils';\n\nexport const PROPS = {\n availableSpace: {},\n axisDimensions: {},\n config: {\n sanitization: (context, value) => {\n if (value.labels && value.labels.rotation) {\n context._rotationLock = true;\n }\n value = mergeRecursive(context._config || {}, value);\n value.axisNamePadding = Math.max(value.axisNamePadding, 0);\n context.axis(context.createAxis(value));\n context.store().commit('config', value);\n return value;\n }\n },\n logicalSpace: {},\n mount: {\n sanitization: (context, value) => {\n context.store().commit('mount', value);\n return value;\n }\n },\n range: {\n sanitization: (context, value) => {\n context.scale().range(value);\n context.logicalSpace(null);\n context.store().commit('range', value);\n return value;\n }\n },\n\n smartTicks: {},\n store: {},\n tickSize: {}\n};\n","import {\n Store,\n mergeRecursive,\n getSmartComputedStyle,\n selectElement,\n generateGetterSetters,\n getUniqueId\n} from 'muze-utils';\nimport { createScale } from '../scale-creator';\nimport { axisOrientationMap, BOTTOM, TOP } from '../enums/axis-orientation';\nimport { defaultConfig } from './default-config';\nimport { renderAxis } from '../axis-renderer';\nimport { DOMAIN, BAND } from '../enums/constants';\nimport {\n computeAxisDimensions,\n setOffset,\n registerChangeListeners,\n calculateContinousSpace\n} from './helper';\nimport { PROPS } from './props';\n\nexport default class SimpleAxis {\n\n /**\n * Creates an instance of SimpleAxis.\n * @memberof SimpleAxis\n */\n constructor (config, dependencies) {\n this._id = getUniqueId();\n\n this._dependencies = dependencies;\n this._mount = null;\n this._range = [];\n this._domain = [];\n this._domainLock = false;\n this._rotationLock = false;\n this._axisDimensions = {};\n this._eventList = [];\n\n const defCon = mergeRecursive({}, this.constructor.defaultConfig());\n const simpleConfig = mergeRecursive(defCon, config);\n\n const bodyElem = selectElement('body');\n const classPrefix = simpleConfig.classPrefix;\n this._tickLabelStyle = getSmartComputedStyle(bodyElem, `${classPrefix}-ticks`);\n this._axisNameStyle = getSmartComputedStyle(bodyElem, `${classPrefix}-axis-name`);\n dependencies.labelManager.setStyle(this._tickLabelStyle);\n this._minTickDistance = dependencies.labelManager.getOriSize('ww');\n\n generateGetterSetters(this, PROPS);\n this.store(new Store({\n domain: this.domain(),\n range: this.range(),\n config: simpleConfig,\n mount: this.mount()\n }));\n this.config(simpleConfig);\n\n this._scale = this.createScale(this._config);\n this._axis = this.createAxis(this._config);\n\n registerChangeListeners(this);\n }\n\n /**\n * Returns the default configuration of simple axis\n * @return {Object} default configurations\n */\n static defaultConfig () {\n return defaultConfig;\n }\n\n /**\n * Sets a fixed baseline for the first ticks so that they can render effectively within\n * the given area\n *\n * @param {*} tickText\n * @param {*} config\n * @param {*} labelManager\n */\n setFixedBaseline () {\n return this;\n }\n\n /**\n *\n *\n * @readonly\n * @memberof SimpleAxis\n */\n scale (...params) {\n if (params.length) {\n this._scale = params[0];\n return this;\n }\n return this._scale;\n }\n\n /**\n *\n *\n * @readonly\n * @memberof SimpleAxis\n */\n axis (...params) {\n if (params.length) {\n this._axis = params[0];\n return this;\n }\n return this._axis;\n }\n\n /**\n *\n *\n * @param {*} d\n * @returns\n * @memberof SimpleAxis\n */\n domain (...domain) {\n if (domain.length) {\n this.scale().domain(domain[0]);\n this._domain = this.scale().domain();\n this.smartTicks(this.setTickConfig());\n this.store().commit(DOMAIN, this._domain);\n this.logicalSpace(null);\n return this;\n }\n return this._domain;\n }\n\n /**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\n dependencies () {\n return this._dependencies;\n }\n\n /**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\n createScale (config) {\n const {\n base,\n padding,\n interpolator,\n exponent\n } = config;\n const range = this.range();\n const scale = createScale({\n padding,\n interpolator,\n exponent,\n base,\n range,\n type: this.constructor.type()\n });\n\n return scale;\n }\n\n getTickFormatter (tickFormat, numberFormat) {\n if (tickFormat) {\n return ticks => (val, i) => tickFormat(numberFormat(val), i, ticks);\n }\n return () => val => numberFormat(val);\n }\n\n /**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\n createAxis (config) {\n const {\n tickFormat,\n numberFormat,\n orientation\n } = config;\n const axisClass = axisOrientationMap[orientation];\n\n if (axisClass) {\n const axis = axisClass(this.scale());\n this.formatter = this.getTickFormatter(tickFormat, numberFormat);\n\n return axis;\n }\n return null;\n }\n\n /**\n *\n *\n * @memberof SimpleAxis\n */\n setTickConfig () {\n return this;\n }\n\n /**\n *\n *\n * @param {*} axisTickLabels\n * @param {*} labelWidth\n * @returns\n * @memberof SimpleAxis\n */\n setRotationConfig (axisTickLabels, labelWidth) {\n const { orientation } = this.config();\n\n if (orientation === TOP || orientation === BOTTOM) {\n const range = this.range();\n const length = Math.abs(range[0] - range[1]);\n this.config({ labels: { rotation: 0 } });\n if (length > 0 && axisTickLabels.length * (labelWidth + this._minTickDistance.width) > length) {\n this.config({ labels: { rotation: -90 } });\n }\n }\n return this;\n }\n\n /**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\n adjustRange () {\n return this;\n }\n\n getScaleValue (domainVal) {\n if (domainVal === null || domainVal === undefined) {\n return undefined;\n }\n return this.scale()(domainVal);\n }\n\n /**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\n getTickSize () {\n return this.axis().tickSize();\n }\n\n /**\n * Gets the space occupied by the parts of an axis\n *\n * @return {Object} object with details about sizes of the axis.\n * @memberof SimpleAxis\n */\n getAxisDimensions () {\n this.axisDimensions(computeAxisDimensions(this));\n return this.axisDimensions();\n }\n\n /**\n * Gets the space occupied by the axis\n *\n * @return {Object} object with details about size of the axis.\n * @memberof SimpleAxis\n */\n getLogicalSpace () {\n if (!this.logicalSpace()) {\n this.logicalSpace(calculateContinousSpace(this));\n setOffset(this);\n this.logicalSpace();\n }\n return this.logicalSpace();\n }\n\n /**\n * Returns the value from the domain when given a value from the range.\n * @param {number} value Value from the range.\n * @return {number} Value\n */\n invert (...value) {\n const values = value.map(d => this.scale().invert(d)) || [];\n return value.length === 1 ? values[0] : values;\n }\n\n /**\n * Gets the nearest range value from the given range values.\n * @param {number} v1 Start range value\n * @param {number} v2 End range value\n * @return {Array} range values\n */\n getNearestRange (v1, v2) {\n let p1;\n let p2;\n let extent;\n const {\n type\n } = this.config();\n const scale = this.scale();\n const range = scale.range();\n const reverse = range[0] > range[1];\n\n if (type === BAND) {\n extent = scale.invertExtent(v1, v2);\n p1 = scale(reverse ? extent[extent.length - 1] : extent[0]);\n p2 = scale(reverse ? extent[0] : extent[extent.length - 1]) + scale.bandwidth();\n return [p1, p2];\n }\n return [v1, v2];\n }\n\n /**\n * This method is used to assign a domain to the axis.\n *\n * @param {Array} domain the domain of the scale\n * @memberof SimpleAxis\n */\n updateDomainBounds (domain) {\n let currentDomain = this.domain();\n if (this.config().domain) {\n currentDomain = this.config().domain;\n } else {\n if (currentDomain.length === 0) {\n currentDomain = domain;\n }\n if (domain.length) {\n currentDomain = [Math.min(currentDomain[0], domain[0]), Math.max(currentDomain[1], domain[1])];\n }\n }\n\n return this.domain(currentDomain);\n }\n\n /**\n *\n *\n * @param {*} domain\n * @returns\n * @memberof SimpleAxis\n */\n updateDomainCache (domain) {\n if (this._domainLock === false) {\n this.domain([]);\n this._domainLock = true;\n }\n const cachedDomain = [];\n domain && domain.forEach((d) => {\n d !== undefined && d !== null && cachedDomain.push(d);\n });\n return this.updateDomainBounds(cachedDomain);\n }\n\n getMinTickDifference () {\n return this.domain();\n }\n\n getFormattedTickValues (tickValues) {\n return tickValues;\n }\n\n /**\n *\n *\n * @param {*} tickValues\n * @returns\n * @memberof SimpleAxis\n */\n setTickValues () {\n const {\n tickValues\n } = this.config();\n\n if (tickValues) {\n tickValues instanceof Array && this.axis().tickValues(tickValues);\n return this;\n }\n return this;\n }\n\n /**\n * This method returns the width in pixels for one\n * unit along the axis. It is only applicable to band scale\n * and returns undefined for other scale type.\n *\n * @return {number} the width of one band along band scale axis\n * @memberof SimpleAxis\n */\n getUnitWidth () {\n return 0;\n }\n\n /**\n * This method returns an object that can be used to\n * reconstruct this instance.\n *\n * @return {Object} the serializable props of axis\n * @memberof SimpleAxis\n */\n serialize () {\n return {\n name: this.name,\n type: this.type,\n range: this.range(),\n config: this.config()\n };\n }\n\n /**\n * Returns the id of the axis.\n * @return {string} Unique identifier of the axis.\n */\n get id () {\n return this._id;\n }\n\n registerEvent (event, fn) {\n this._eventList.push({ name: event, action: fn });\n }\n\n /**\n *\n *\n * @param {*} fn\n * @memberof SimpleAxis\n */\n on (event, fn) {\n event = event || 'update';\n this.registerEvent(event, fn);\n }\n\n /**\n * This method is used to render the axis inside\n * the supplied svg container.\n *\n * @param {SVGElement} svg the svg element in which to render the path\n * @memberof SimpleAxis\n */\n /* istanbul ignore next */render () {\n if (this.mount()) {\n renderAxis(this);\n }\n return this;\n }\n\n /**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\n remove () {\n this.store().unsubscribeAll();\n selectElement(this.mount()).remove();\n return this;\n }\n\n /**\n *\n *\n * @memberof SimpleAxis\n */\n unsubscribe () {\n this.store().unsubscribeAll();\n return this;\n }\n\n /**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\n isReverse () {\n const range = this.range();\n return range[0] > range[1];\n }\n\n /**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\n getPixelToValueRatio () {\n const scale = this.scale();\n const range = scale.range();\n const domain = scale.domain();\n\n return Math.abs(range[1] - range[0]) / (domain[1] - domain[0]);\n }\n}\n\n","import { scaleMap } from '../../scale-creator';\n\nexport default class LinearInterpolator {\n\n createScale (config) {\n const {\n range\n } = config;\n const scaleFactory = scaleMap.linear;\n this._scale = scaleFactory().range(range);\n return this._scale;\n }\n\n getScaleValue (domainVal) {\n return this._scale(domainVal) + 0.5;\n }\n\n sanitizeDomain (domain) {\n return domain;\n }\n}\n","import { scaleMap } from '../../scale-creator';\n\nexport default class LogInterpolator {\n\n createScale (config) {\n const {\n range,\n base\n } = config;\n const scaleFactory = scaleMap.log;\n this._scale = scaleFactory().range(range).base(base);\n return this._scale;\n }\n\n getScaleValue (domainVal) {\n if (domainVal <= 0) {\n return 1;\n }\n\n return this._scale(domainVal) + 0.5;\n }\n\n sanitizeDomain (domain) {\n if (domain[0] <= 0) {\n return [Math.max(1, domain[0]), Math.max(1, domain[1])];\n } return domain;\n }\n}\n","import { scaleMap } from '../../scale-creator';\n\nexport default class PowInterpolator {\n\n createScale (config) {\n const {\n range,\n exponent\n } = config;\n const scaleFactory = scaleMap.pow;\n this._scale = scaleFactory().range(range).exponent(exponent);\n return this._scale;\n }\n\n getScaleValue (domainVal) {\n return this._scale(domainVal) + 0.5;\n }\n\n sanitizeDomain (domain) {\n return domain;\n }\n}\n","import { getSmallestDiff } from 'muze-utils';\nimport SimpleAxis from './simple-axis';\nimport { BOTTOM, TOP, LEFT, RIGHT } from '../enums/axis-orientation';\nimport { LINEAR, LOG, POW } from '../enums/scale-type';\nimport { LogInterpolator, PowInterpolator, LinearInterpolator } from './interpolators';\nimport { DOMAIN } from '../enums/constants';\nimport {\n getTickLabelInfo,\n getNumberOfTicks\n} from './helper';\n\nexport const interpolatorMap = {\n [LOG]: LogInterpolator,\n [POW]: PowInterpolator,\n [LINEAR]: LinearInterpolator\n};\n\nexport default class ContinousAxis extends SimpleAxis {\n constructor (config, dependencies) {\n config.tickFormat = config.tickFormat || (val => val);\n super(config, dependencies);\n }\n /**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\n createScale (config) {\n const {\n base,\n padding,\n interpolator,\n exponent\n } = config;\n const range = this.range();\n const InterpolatorCls = interpolatorMap[interpolator];\n\n this._interpolator = new InterpolatorCls();\n let scale = this._interpolator.createScale({\n padding,\n exponent,\n base,\n range\n });\n\n scale = scale.nice();\n return scale;\n }\n\n /**\n * This method is used to assign a domain to the axis.\n *\n * @param {Array} domain the domain of the scale\n * @memberof SimpleAxis\n */\n updateDomainBounds (domain) {\n let currentDomain = this.domain();\n if (this.config().domain) {\n currentDomain = this.config().domain;\n } else {\n if (currentDomain.length === 0) {\n currentDomain = domain;\n }\n if (domain.length) {\n currentDomain = [Math.min(currentDomain[0], domain[0]), Math.max(currentDomain[1], domain[1])];\n }\n }\n\n return this.domain(currentDomain);\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof ContinousAxis\n */\n static type () {\n return LINEAR;\n }\n\n getScaleValue (domainVal) {\n if (domainVal === null || domainVal === undefined) {\n return undefined;\n }\n return this._interpolator.getScaleValue(domainVal);\n }\n /**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\n getTickSize () {\n const {\n showInnerTicks,\n showOuterTicks\n } = this.config();\n const axis = this.axis();\n axis.tickSizeInner(showInnerTicks === false ? 0 : 6);\n axis.tickSizeOuter(showOuterTicks === false ? 0 : 6);\n return axis.tickSize();\n }\n\n /**\n *\n *\n * @param {*} d\n * @returns\n * @memberof SimpleAxis\n */\n domain (domain) {\n if (domain && domain.length) {\n const { nice } = this.config();\n if (domain.length && domain[0] === domain[1]) {\n domain = [0, +domain[0] * 2];\n }\n this.scale().domain(domain);\n nice && this.scale().nice();\n this._domain = this.scale().domain();\n this.store().commit(DOMAIN, this._domain);\n this.logicalSpace(null);\n return this;\n } return this._domain;\n }\n\n /**\n * This method is used to set the space availiable to render\n * the SimpleCell.\n *\n * @param {number} width The width of SimpleCell.\n * @param {number} height The height of SimpleCell.\n * @memberof AxisCell\n */\n setAvailableSpace (width = 0, height, padding, isOffset) {\n const {\n left,\n right,\n top,\n bottom\n } = padding;\n const {\n orientation,\n fixedBaseline\n } = this.config();\n const { tickLabelDim } = this.getAxisDimensions();\n this.availableSpace({ width, height });\n\n if (orientation === TOP || orientation === BOTTOM) {\n const labelSpace = tickLabelDim.width;\n this.range([(fixedBaseline ? 0 : (labelSpace / 2)) + left, width - right - labelSpace / 2]);\n const axisHeight = this.getLogicalSpace().height;\n isOffset && this.config({ yOffset: Math.max(axisHeight, height) });\n } else {\n const labelSpace = tickLabelDim.height;\n this.range([height - bottom - (fixedBaseline ? 1 : (labelSpace / 2)), labelSpace / 2 + top]);\n const axisWidth = this.getLogicalSpace().width;\n isOffset && this.config({ xOffset: Math.max(axisWidth, width) });\n }\n return this;\n }\n\n /**\n *\n *\n * @param {*} tickValues\n * @returns\n * @memberof SimpleAxis\n */\n setTickValues () {\n const {\n tickValues\n } = this.config();\n const axis = this.axis();\n\n if (tickValues) {\n tickValues instanceof Array && this.axis().tickValues(tickValues);\n return this;\n }\n axis.tickValues(this.getTickValues());\n return this;\n }\n\n /**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\n getTickValues () {\n let labelDim = 0;\n const {\n orientation,\n tickValues\n } = this.config();\n const range = this.range();\n const axis = this.axis();\n\n const availableSpace = Math.abs(range[0] - range[1]);\n\n const labelProps = getTickLabelInfo(this).largestLabelDim;\n\n if (tickValues) {\n return axis.scale().ticks(tickValues);\n }\n labelDim = labelProps[orientation === BOTTOM || orientation === TOP ? 'width' : 'height'];\n\n return getNumberOfTicks(availableSpace, labelDim, axis, this);\n }\n\n getMinTickDifference () {\n return getSmallestDiff(this.config().tickValues);\n }\n\n /**\n * Sets a fixed baseline for the first ticks so that they can render effectively within\n * the given area\n *\n * @param {*} tickText\n * @param {*} config\n * @param {*} labelManager\n */\n setFixedBaseline (tickText) {\n const {\n orientation,\n labels\n } = this.config();\n const {\n rotation\n } = labels;\n const axis = this.axis();\n const { width, height } = this._axisDimensions.largestLabelDim;\n axis.tickTransform((d, i) => {\n if (i === 0 && (orientation === LEFT || orientation === RIGHT)) {\n return `translate(0, -${(height) / 3}px)`;\n }\n if (i === 0 && (orientation === TOP || orientation === BOTTOM) && rotation === 0) {\n return `translate(${width / 2}px, ${0}px) rotate(${rotation}deg)`;\n } return '';\n });\n return tickText;\n }\n\n}\n","import SimpleAxis from './simple-axis';\nimport { BAND } from '../enums/scale-type';\nimport { TOP, BOTTOM } from '../enums/axis-orientation';\nimport { calculateBandSpace, setOffset } from './helper';\n\nexport default class BandAxis extends SimpleAxis {\n\n /**\n *\n *\n * @param {*} range\n * @returns\n * @memberof BandAxis\n */\n createScale (range) {\n const scale = super.createScale(range);\n const { padding } = this.config();\n if (typeof padding === 'number') {\n scale.padding(padding);\n }\n return scale;\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof BandAxis\n */\n static type () {\n return BAND;\n }\n\n /**\n *\n *\n * @param {*} width\n * @param {*} height\n * @param {*} padding\n * @param {*} isOffset\n * @memberof BandAxis\n */\n setAvailableSpace (width, height, padding, isOffset) {\n const {\n left,\n right,\n top,\n bottom\n } = padding;\n const {\n orientation,\n showAxisName,\n axisNamePadding\n } = this.config();\n const { axisLabelDim } = this.getAxisDimensions();\n const { height: axisDimHeight } = axisLabelDim;\n\n this.availableSpace({ width, height });\n if (orientation === TOP || orientation === BOTTOM) {\n // Set x axis range\n this.range([0, width - left - right]);\n const axisHeight = this.getLogicalSpace().height - (showAxisName === false ?\n (axisDimHeight + axisNamePadding) : 0);\n isOffset && this.config({ yOffset: Math.max(axisHeight, height) });\n } else {\n // Set y axis range\n this.range([height - bottom, top]);\n const axisWidth = this.getLogicalSpace().width - (showAxisName === false ? axisDimHeight : 0);\n isOffset && this.config({ xOffset: Math.max(axisWidth, width) });\n }\n return this;\n }\n\n /**\n *\n *\n * @returns\n * @memberof BandAxis\n */\n getUnitWidth () {\n return this.scale().bandwidth();\n }\n\n /**\n *\n *\n * @returns\n * @memberof BandAxis\n */\n setTickConfig () {\n let smartTicks = '';\n let smartlabel;\n const { maxWidth, maxHeight, tickFormat } = this.config();\n const { labelManager } = this._dependencies;\n const domain = this.axis().scale().domain();\n\n smartTicks = domain;\n const tickFormatter = tickFormat || (val => val);\n\n if (domain && domain.length) {\n smartTicks = domain.map((d, i) => {\n labelManager.useEllipsesOnOverflow(true);\n smartlabel = labelManager.getSmartText(tickFormatter(d, i, domain), maxWidth, maxHeight);\n return labelManager.constructor.textToLines(smartlabel);\n });\n }\n return smartTicks;\n }\n\n/**\n * Gets the space occupied by the axis\n *\n * @return {Object} object with details about size of the axis.\n * @memberof SimpleAxis\n */\n getLogicalSpace () {\n if (!this.logicalSpace()) {\n this.logicalSpace(calculateBandSpace(this));\n setOffset(this);\n this.logicalSpace();\n }\n return this.logicalSpace();\n }\n /**\n *\n *\n * @param {*} axisTickLabels\n * @param {*} labelWidth\n * @returns\n * @memberof BandAxis\n */\n setRotationConfig (axisTickLabels, labelWidth) {\n const { orientation } = this.config();\n const range = this.range();\n const availSpace = Math.abs(range[0] - range[1]);\n\n this.config({ labels: { rotation: 0, smartTicks: false } });\n if (orientation === TOP || orientation === BOTTOM) {\n const smartWidth = this.smartTicks().reduce((acc, n) => acc + n.width + this._minTickDistance.width, 0);\n // set multiline config\n if (availSpace > 0 && axisTickLabels.length * (labelWidth + this._minTickDistance.width) > availSpace) {\n if (availSpace && smartWidth < availSpace) {\n this.config({ labels: { smartTicks: true } });\n } else {\n this.config({ labels: { rotation: -90 } });\n }\n }\n }\n return this;\n }\n\n /**\n *\n *\n * @returns\n * @memberof BandAxis\n */\n getTickValues () {\n return this.axis().scale().domain();\n }\n\n /**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\n getTickSize () {\n const {\n showInnerTicks,\n showOuterTicks\n } = this.config();\n const axis = this.axis();\n\n axis.tickSizeInner(showInnerTicks ? 6 : 0);\n axis.tickSizeOuter(showOuterTicks ? 6 : 0);\n return axis.tickSize();\n }\n\n /**\n * This method is used to assign a domain to the axis.\n *\n * @param {Array} domain the domain of the scale\n * @memberof SimpleAxis\n */\n updateDomainBounds (domain) {\n let currentDomain = this.domain();\n if (this.config().domain) {\n currentDomain = this.config().domain;\n } else {\n if (currentDomain.length === 0) {\n currentDomain = domain;\n }\n currentDomain = currentDomain.concat(domain);\n }\n this.domain(currentDomain);\n return this;\n }\n\n /**\n * Returns the value from the domain when given a value from the range.\n * @param {number} value Value from the range.\n * @return {number} Value\n */\n invert (...value) {\n const values = value.map(d => this.scale().invert(d)) || [];\n return value.length === 1 ? values[0] && values[0].toString() : values.map(d => d.toString());\n }\n}\n","import { getSmallestDiff } from 'muze-utils';\nimport SimpleAxis from './simple-axis';\nimport { adjustRange } from './helper';\nimport { TIME } from '../enums/scale-type';\nimport { axisOrientationMap, BOTTOM, TOP } from '../enums/axis-orientation';\nimport { DOMAIN } from '../enums/constants';\n\n/**\n *\n *\n * @export\n * @class TimeAxis\n * @extends {SimpleAxis}\n */\nexport default class TimeAxis extends SimpleAxis {\n\n constructor (...params) {\n super(...params);\n this._minDiff = Infinity;\n }\n\n /**\n *\n *\n * @param {*} range\n * @returns\n * @memberof TimeAxis\n */\n createScale (range) {\n let scale = super.createScale(range);\n\n scale = scale.nice();\n return scale;\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof TimeAxis\n */\n static type () {\n return TIME;\n }\n\n /**\n *\n *\n * @returns\n * @memberof BandAxis\n */\n setTickConfig () {\n let smartTicks;\n let smartlabel;\n const { maxWidth, maxHeight, tickFormat } = this.config();\n const { labelManager } = this._dependencies;\n const domain = this.getTickValues();\n const scale = this.scale();\n\n smartTicks = domain;\n const tickFormatter = tickFormat || scale.tickFormat();\n\n if (domain && domain.length) {\n smartTicks = domain.map((d, i) => {\n smartlabel = labelManager.getSmartText(tickFormatter(d, i, domain), maxWidth, maxHeight);\n return labelManager.constructor.textToLines(smartlabel);\n });\n }\n return smartTicks;\n }\n\n /**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\n createAxis (config) {\n const {\n tickFormat,\n orientation\n } = config;\n const axisClass = axisOrientationMap[orientation];\n\n if (axisClass) {\n const axis = axisClass(this.scale());\n this.formatter = this.getTickFormatter(tickFormat);\n return axis;\n }\n return null;\n }\n\n getTickFormatter (tickFormat) {\n if (tickFormat) {\n return ticks => (val, i) => tickFormat(val, i, ticks);\n }\n return null;\n }\n\n /**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\n getTickSize () {\n const {\n showInnerTicks,\n showOuterTicks\n } = this.config();\n const axis = this.axis();\n axis.tickSizeInner(showInnerTicks === false ? 0 : 6);\n axis.tickSizeOuter(showOuterTicks === false ? 0 : 6);\n return super.getTickSize();\n }\n\n /**\n *\n *\n * @returns\n * @memberof TimeAxis\n */\n getTickValues () {\n return this.scale().ticks();\n }\n\n /**\n *\n *\n * @param {*} diff\n * @returns\n * @memberof TimeAxis\n */\n minDiff (diff) {\n this._minDiff = Math.min(this._minDiff, diff);\n return this;\n }\n\n /**\n *\n *\n * @param {*} axisTickLabels\n * @param {*} labelWidth\n * @returns\n * @memberof BandAxis\n */\n setRotationConfig (axisTickLabels, labelWidth) {\n const { orientation } = this.config();\n const range = this.range();\n const availSpace = Math.abs(range[0] - range[1]);\n\n this.config({ labels: { rotation: 0, smartTicks: false } });\n if (orientation === TOP || orientation === BOTTOM) {\n const smartWidth = this.smartTicks().reduce((acc, n) => acc + n.width, 0);\n // set multiline config\n if (availSpace > 0 && axisTickLabels.length * labelWidth > availSpace) {\n if (availSpace && smartWidth * 1.25 < availSpace) {\n this.config({ labels: { smartTicks: true } });\n }\n this.config({ labels: { rotation: -90 } });\n }\n }\n return this;\n }\n\n /**\n *\n *\n * @param {*} d\n * @returns\n * @memberof SimpleAxis\n */\n domain (domain) {\n if (domain) {\n const { nice } = this.config();\n\n if (domain.length && domain[0] === domain[1]) {\n domain = [0, +domain[0] * 2];\n }\n this.scale().domain(domain);\n nice && this.scale().nice();\n this._domain = this.scale().domain();\n this.smartTicks(this.setTickConfig());\n this.store().commit(DOMAIN, this._domain);\n this.logicalSpace(null);\n return this;\n } return this._domain;\n }\n\n getMinTickDifference () {\n return getSmallestDiff(this.config().tickValues);\n }\n\n /**\n *\n *\n * @param {*} width\n * @param {*} height\n * @param {*} padding\n * @param {*} isOffset\n * @memberof TimeAxis\n */\n setAvailableSpace (width, height, padding, isOffset) {\n const {\n left,\n right,\n top,\n bottom\n } = padding;\n const {\n orientation,\n showAxisName,\n axisNamePadding\n } = this.config();\n const domain = this.domain();\n const { axisLabelDim, tickLabelDim } = this.getAxisDimensions();\n const { height: axisDimHeight } = axisLabelDim;\n const { height: tickDimHeight, width: tickDimWidth } = tickLabelDim;\n\n this.availableSpace({ width, height });\n if (orientation === TOP || orientation === BOTTOM) {\n const labelSpace = tickDimWidth;\n this.range(adjustRange(this._minDiff, [labelSpace / 2, width - left - right - labelSpace / 2],\n domain, orientation));\n const axisHeight = this.getLogicalSpace().height - (showAxisName === false ?\n (axisDimHeight + axisNamePadding) : 0);\n isOffset && this.config({ yOffset: Math.max(axisHeight, height) });\n } else {\n const labelSpace = tickDimHeight;\n this.range(adjustRange(this._minDiff, [height - top - bottom - labelSpace / 2, labelSpace / 2],\n domain, orientation));\n const axisWidth = this.getLogicalSpace().width - (showAxisName === false ? axisDimHeight : 0);\n this.isOffset && this.config({ xOffset: Math.max(axisWidth, width) });\n }\n return this;\n }\n\n}\n","export const x11Colors = {\n Pink: { hex: 'ffc0cb', rgb: '255,192,203' },\n LightPink: { hex: 'ffb6c1', rgb: '255,182,193' },\n HotPink: { hex: 'ff69b4', rgb: '255,105,180' },\n DeepPink: { hex: 'ff1493', rgb: '255,20,147' },\n PaleVioletRed: { hex: 'db7093', rgb: '219,112,147' },\n MediumVioletRed: { hex: 'c71585', rgb: '199,21,133' },\n LightSalmon: { hex: 'ffa07a', rgb: '255,160,122' },\n Salmon: { hex: 'fa8072', rgb: '250,128,114' },\n DarkSalmon: { hex: 'e9967a', rgb: '233,150,122' },\n LightCoral: { hex: 'f08080', rgb: '240,128,128' },\n IndianRed: { hex: 'cd5c5c', rgb: '205,92,92' },\n Crimson: { hex: 'dc143c', rgb: '220,20,60' },\n FireBrick: { hex: 'b22222', rgb: '178,34,34' },\n DarkRed: { hex: '8b0000', rgb: '139,0,0' },\n Red: { hex: 'ff0000', rgb: '255,0,0' },\n OrangeRed: { hex: 'ff4500', rgb: '255,69,0' },\n Tomato: { hex: 'ff6347', rgb: '255,99,71' },\n Coral: { hex: 'ff7f50', rgb: '255,127,80' },\n DarkOrange: { hex: 'ff8c00', rgb: '255,140,0' },\n Orange: { hex: 'ffa500', rgb: '255,165,0' },\n Gold: { hex: 'ffd700', rgb: '255,215,0' },\n Yellow: { hex: 'ffff00', rgb: '255,255,0' },\n LightYellow: { hex: 'ffffe0', rgb: '255,255,224' },\n LemonChiffon: { hex: 'fffacd', rgb: '255,250,205' },\n LightGoldenrodYellow: { hex: 'fafad2', rgb: '250,250,210' },\n PapayaWhip: { hex: 'ffefd5', rgb: '255,239,213' },\n Moccasin: { hex: 'ffe4b5', rgb: '255,228,181' },\n PeachPuff: { hex: 'ffdab9', rgb: '255,218,185' },\n PaleGoldenrod: { hex: 'eee8aa', rgb: '238,232,170' },\n Khaki: { hex: 'f0e68c', rgb: '240,230,140' },\n DarkKhaki: { hex: 'bdb76b', rgb: '189,183,107' },\n Cornsilk: { hex: 'fff8dc', rgb: '255,248,220' },\n BlanchedAlmond: { hex: 'ffebcd', rgb: '255,235,205' },\n Bisque: { hex: 'ffe4c4', rgb: '255,228,196' },\n NavajoWhite: { hex: 'ffdead', rgb: '255,222,173' },\n Wheat: { hex: 'f5deb3', rgb: '245,222,179' },\n BurlyWood: { hex: 'deb887', rgb: '222,184,135' },\n Tan: { hex: 'd2b48c', rgb: '210,180,140' },\n RosyBrown: { hex: 'bc8f8f', rgb: '188,143,143' },\n SandyBrown: { hex: 'f4a460', rgb: '244,164,96' },\n Goldenrod: { hex: 'daa520', rgb: '218,165,32' },\n DarkGoldenrod: { hex: 'b8860b', rgb: '184,134,11' },\n Peru: { hex: 'cd853f', rgb: '205,133,63' },\n Chocolate: { hex: 'd2691e', rgb: '210,105,30' },\n SaddleBrown: { hex: '8b4513', rgb: '139,69,19' },\n Sienna: { hex: 'a0522d', rgb: '160,82,45' },\n Brown: { hex: 'a52a2a', rgb: '165,42,42' },\n Maroon: { hex: '800000', rgb: '128,0,0' },\n DarkOliveGreen: { hex: '556b2f', rgb: '85,107,47' },\n Olive: { hex: '808000', rgb: '128,128,0' },\n OliveDrab: { hex: '6b8e23', rgb: '107,142,35' },\n YellowGreen: { hex: '9acd32', rgb: '154,205,50' },\n LimeGreen: { hex: '32cd32', rgb: '50,205,50' },\n Lime: { hex: '00ff00', rgb: '0,255,0' },\n LawnGreen: { hex: '7cfc00', rgb: '124,252,0' },\n Chartreuse: { hex: '7fff00', rgb: '127,255,0' },\n GreenYellow: { hex: 'adff2f', rgb: '173,255,47' },\n SpringGreen: { hex: '00ff7f', rgb: '0,255,127' },\n MediumSpringGreen: { hex: '00fa9a', rgb: '0,250,154' },\n LightGreen: { hex: '90ee90', rgb: '144,238,144' },\n PaleGreen: { hex: '98fb98', rgb: '152,251,152' },\n DarkSeaGreen: { hex: '8fbc8f', rgb: '143,188,143' },\n MediumSeaGreen: { hex: '3cb371', rgb: '60,179,113' },\n SeaGreen: { hex: '2e8b57', rgb: '46,139,87' },\n ForestGreen: { hex: '228b22', rgb: '34,139,34' },\n Green: { hex: '008000', rgb: '0,128,0' },\n DarkGreen: { hex: '006400', rgb: '0,100,0' },\n MediumAquamarine: { hex: '66cdaa', rgb: '102,205,170' },\n Aqua: { hex: '00ffff', rgb: '0,255,255' },\n Cyan: { hex: '00ffff', rgb: '0,255,255' },\n LightCyan: { hex: 'e0ffff', rgb: '224,255,255' },\n PaleTurquoise: { hex: 'afeeee', rgb: '175,238,238' },\n Aquamarine: { hex: '7fffd4', rgb: '127,255,212' },\n Turquoise: { hex: '40e0d0', rgb: '64,224,208' },\n MediumTurquoise: { hex: '48d1cc', rgb: '72,209,204' },\n DarkTurquoise: { hex: '00ced1', rgb: '0,206,209' },\n LightSeaGreen: { hex: '20b2aa', rgb: '32,178,170' },\n CadetBlue: { hex: '5f9ea0', rgb: '95,158,160' },\n DarkCyan: { hex: '008b8b', rgb: '0,139,139' },\n Teal: { hex: '008080', rgb: '0,128,128' },\n LightSteelBlue: { hex: 'b0c4de', rgb: '176,196,222' },\n PowderBlue: { hex: 'b0e0e6', rgb: '176,224,230' },\n LightBlue: { hex: 'add8e6', rgb: '173,216,230' },\n SkyBlue: { hex: '87ceeb', rgb: '135,206,235' },\n LightSkyBlue: { hex: '87cefa', rgb: '135,206,250' },\n DeepSkyBlue: { hex: '00bfff', rgb: '0,191,255' },\n DodgerBlue: { hex: '1e90ff', rgb: '30,144,255' },\n CornflowerBlue: { hex: '6495ed', rgb: '100,149,237' },\n SteelBlue: { hex: '4682b4', rgb: '70,130,180' },\n RoyalBlue: { hex: '4169e1', rgb: '65,105,225' },\n Blue: { hex: '0000ff', rgb: '0,0,255' },\n MediumBlue: { hex: '0000cd', rgb: '0,0,205' },\n DarkBlue: { hex: '00008b', rgb: '0,0,139' },\n Navy: { hex: '000080', rgb: '0,0,128' },\n MidnightBlue: { hex: '191970', rgb: '25,25,112' },\n Lavender: { hex: 'e6e6fa', rgb: '230,230,250' },\n Thistle: { hex: 'd8bfd8', rgb: '216,191,216' },\n Plum: { hex: 'dda0dd', rgb: '221,160,221' },\n Violet: { hex: 'ee82ee', rgb: '238,130,238' },\n Orchid: { hex: 'da70d6', rgb: '218,112,214' },\n Fuchsia: { hex: 'ff00ff', rgb: '255,0,255' },\n Magenta: { hex: 'ff00ff', rgb: '255,0,255' },\n MediumOrchid: { hex: 'ba55d3', rgb: '186,85,211' },\n MediumPurple: { hex: '9370db', rgb: '147,112,219' },\n BlueViolet: { hex: '8a2be2', rgb: '138,43,226' },\n DarkViolet: { hex: '9400d3', rgb: '148,0,211' },\n DarkOrchid: { hex: '9932cc', rgb: '153,50,204' },\n DarkMagenta: { hex: '8b008b', rgb: '139,0,139' },\n Purple: { hex: '800080', rgb: '128,0,128' },\n Indigo: { hex: '4b0082', rgb: '75,0,130' },\n DarkSlateBlue: { hex: '483d8b', rgb: '72,61,139' },\n SlateBlue: { hex: '6a5acd', rgb: '106,90,205' },\n MediumSlateBlue: { hex: '7b68ee', rgb: '123,104,238' },\n White: { hex: 'ffffff', rgb: '255,255,255' },\n Snow: { hex: 'fffafa', rgb: '255,250,250' },\n Honeydew: { hex: 'f0fff0', rgb: '240,255,240' },\n MintCream: { hex: 'f5fffa', rgb: '245,255,250' },\n Azure: { hex: 'f0ffff', rgb: '240,255,255' },\n AliceBlue: { hex: 'f0f8ff', rgb: '240,248,255' },\n GhostWhite: { hex: 'f8f8ff', rgb: '248,248,255' },\n WhiteSmoke: { hex: 'f5f5f5', rgb: '245,245,245' },\n Seashell: { hex: 'fff5ee', rgb: '255,245,238' },\n Beige: { hex: 'f5f5dc', rgb: '245,245,220' },\n OldLace: { hex: 'fdf5e6', rgb: '253,245,230' },\n FloralWhite: { hex: 'fffaf0', rgb: '255,250,240' },\n Ivory: { hex: 'fffff0', rgb: '255,255,240' },\n AntiqueWhite: { hex: 'faebd7', rgb: '250,235,215' },\n Linen: { hex: 'faf0e6', rgb: '250,240,230' },\n LavenderBlush: { hex: 'fff0f5', rgb: '255,240,245' },\n MistyRose: { hex: 'ffe4e1', rgb: '255,228,225' },\n Gainsboro: { hex: 'dcdcdc', rgb: '220,220,220' },\n LightGray: { hex: 'd3d3d3', rgb: '211,211,211' },\n Silver: { hex: 'c0c0c0', rgb: '192,192,192' },\n DarkGrey: { hex: 'a9a9a9', rgb: '169,169,169' },\n Grey: { hex: '808080', rgb: '128,128,128' },\n DimGrey: { hex: '696969', rgb: '105,105,105' },\n LightSlateGrey: { hex: '778899', rgb: '119,136,153' },\n SlateGrey: { hex: '708090', rgb: '112,128,144' },\n DarkSlateGrey: { hex: '2f4f4f', rgb: '47,79,79' },\n Black: { hex: '000000', rgb: '0,0,0' }\n};\n","import {\n LINEAR\n} from '../enums/constants';\n/**\n * Set of default colors\n */\nexport const palette = [\n '#086bb6',\n '#f37d45',\n '#f5ce02',\n '#67bda0',\n '#c54e4e',\n '#ae70af'\n];\n\nexport const DEFAULT_GRADIENT_COLOR = '#eaeaea';\n\nexport const DEFAULT_CONFIG = {\n range: palette,\n value: palette[0],\n step: false,\n stops: 5,\n type: LINEAR\n};\n","import { mergeRecursive, detectColor, hexToHsv, rgbToHsv } from 'muze-utils';\nimport { x11Colors } from './color-maps';\nimport { palette, DEFAULT_GRADIENT_COLOR } from './defaults';\nimport { LINEAR, RGB, HEX, HSL, HSLA } from '../enums/constants';\n\nexport const getHslString = hslArr => `hsla(${hslArr[0] * 360},${hslArr[1] * 100}%,${hslArr[2] * 100}%,\\\n${hslArr[3] || 1})`;\n\nexport const convertToXllString = baseString => (baseString.split(' ') || [])\n .reduce((x, e) => `${x}${e.charAt(0).toUpperCase()}${e.slice(1)}`, '');\n\nexport const getActualHslColor = (e, paletteColor) => {\n let color = '';\n if (typeof e === 'string') {\n e = e.replace(/ /g, '');\n e = e.toLowerCase();\n if (detectColor(e) === HSL || detectColor(e) === HSLA) {\n color = e.match(/(\\d+(\\.\\d+)?)/g);\n color = [color[0] / 360, color[1] / 100, color[2] / 100, color[3] || 1];\n } else if (detectColor(e) === HEX) {\n color = hexToHsv(e);\n } else if (detectColor(e) === RGB) {\n const col = e.substring(e.indexOf('(') + 1, e.lastIndexOf(')')).split(/,\\s*/);\n color = rgbToHsv(...col);\n } else if (x11Colors[convertToXllString(e)]) {\n color = rgbToHsv(...x11Colors[convertToXllString(e)].rgb.split(','));\n }\n } else if (!(e instanceof Array)) {\n color = rgbToHsv(paletteColor);\n } else {\n color = e;\n }\n return color;\n};\n\nexport const PROPS = {\n config: {\n sanitization: (context, config) => {\n const defCon = mergeRecursive({}, context.constructor.defaultConfig());\n if (config.type === LINEAR) {\n config.range = config.range || [defCon.range[0]];\n config.range = config.range.length > 1 ? config.range : [DEFAULT_GRADIENT_COLOR, ...config.range];\n }\n const oldConfig = mergeRecursive(defCon, context.config());\n const newConfig = mergeRecursive(oldConfig, config);\n\n if (newConfig.range instanceof Array) {\n newConfig.range = newConfig.range.map((e, i) => getActualHslColor(e, palette[i]));\n newConfig.stops = config.stops || newConfig.range.length;\n }\n newConfig.value = getActualHslColor(newConfig.value, newConfig.value);\n return newConfig;\n }\n },\n domain: {},\n scale: {},\n uniqueValues: {}\n};\n","import { numberInterpolator, piecewiseInterpolator, hslInterpolator } from 'muze-utils';\nimport { CONTINOUS, DISCRETE } from '../enums/constants';\nimport { LINEAR, SEQUENTIAL, ORDINAL, QUANTILE } from '../enums/scale-type';\nimport { getHslString } from './props';\n\nconst getStops = (domain, stops) => {\n let newStops = [];\n\n if (stops instanceof Array) {\n newStops = stops.slice().sort();\n newStops = [...new Set([domain[0], ...stops, domain[1]])].sort();\n } else {\n const interpolator = numberInterpolator()(...domain);\n for (let i = 0; i <= stops; i++) {\n newStops[i] = interpolator(i / stops);\n }\n }\n\n if (newStops[0] < domain[0]) {\n newStops.shift();\n }\n return { domain, newStops };\n};\n\nconst rangeStops = (newStopsLength, range) => {\n let newRange = [];\n const maxRangeLength = Math.min(range.length, 18);\n\n if (newStopsLength > maxRangeLength) {\n const interpolator = piecewiseInterpolator()(hslInterpolator(), range.map(e => getHslString(e)));\n for (let i = 0; i < newStopsLength; i++) {\n newRange[i] = interpolator(i / (newStopsLength - 1));\n }\n } else {\n newRange = range.slice(0, newStopsLength);\n }\n return { newRange };\n};\n\n/**\n*\n*\n* @param {*} domain\n* @returns\n*/\nconst indexedDomain = (domain) => {\n const uniqueVals = domain;\n const retDomain = domain.map((d, i) => (i) / (domain.length - 1));\n return { domain: retDomain, uniqueVals, scaleDomain: [0, 1] };\n};\n\n/**\n *\n *\n * @param {*} domain\n * @returns\n */\nconst indexedDomainMeasure = (domain, stops, range) => {\n const uniqueVals = domain;\n return { domain, uniqueVals, scaleDomain: [0, 1], range };\n};\n\n/**\n *\n *\n * @param {*} domain\n * @returns\n */\nconst normalDomain = (domain, stops, range) => {\n const uniqueVals = domain;\n return { uniqueVals, domain, nice: true, range };\n};\n\n/**\n *\n *\n * @param {*} domain\n * @param {*} stops\n * @returns\n */\nconst steppedDomain = (domain, stops, range) => {\n const { domain: uniqueVals, newStops } = getStops(domain, stops);\n const { newRange } = rangeStops(newStops.length - 1, range);\n\n return { uniqueVals, domain: newStops, nice: true, range: newRange };\n};\n\nconst continousSteppedDomain = (domain, stops, range) => {\n const { domain: uniqueVals, newStops } = getStops(domain, range.length - 1);\n const hslRange = range.map(e => getHslString(e));\n return { uniqueVals, domain: newStops, nice: true, range: hslRange };\n};\n\n/**\n *\n *\n * @param {*} domainValue\n * @param {*} scale\n * @param {*} domain\n * @param {*} uniqueVals\n * @returns\n */\nconst uniqueRange = (domainValue, scale, domain, uniqueVals) => {\n const index = uniqueVals.indexOf(domainValue);\n const numVal = domain[index];\n return scale(numVal);\n};\n\n/**\n *\n *\n * @param {*} domainValue\n * @param {*} scale\n * @param {*} domain\n * @returns\n */\nconst indexedRange = (domainValue, scale, domain) => {\n const numVal = (domainValue - domain[0]) / (domain[domain.length - 1] - domain[0]);\n\n return scale(numVal);\n};\n\n/**\n *\n *\n * @param {*} domainValue\n * @param {*} scale\n */\nconst normalRange = (domainValue, scale) => scale(domainValue);\n\n/**\n *\n *\n * @param {*} stops\n */\nconst strategies = () => ({\n [`${CONTINOUS}-${CONTINOUS}-${SEQUENTIAL}`]: {\n scale: SEQUENTIAL,\n domainRange: () => indexedDomainMeasure,\n value: () => indexedRange\n },\n [`${CONTINOUS}-${DISCRETE}-${SEQUENTIAL}`]: {\n scale: SEQUENTIAL,\n domainRange: () => indexedDomainMeasure,\n value: () => indexedRange\n },\n [`${DISCRETE}-${DISCRETE}-${SEQUENTIAL}`]: {\n scale: SEQUENTIAL,\n domainRange: () => indexedDomain,\n value: () => uniqueRange\n },\n [`${DISCRETE}-${DISCRETE}-${ORDINAL}`]: {\n scale: ORDINAL,\n domainRange: () => normalDomain,\n value: () => normalRange\n },\n [`${CONTINOUS}-${CONTINOUS}-${ORDINAL}`]: {\n scale: LINEAR,\n domainRange: () => continousSteppedDomain,\n value: () => normalRange\n },\n [`${CONTINOUS}-${DISCRETE}-${ORDINAL}`]: {\n scale: QUANTILE,\n domainRange: () => steppedDomain,\n value: () => normalRange\n\n }\n});\n\n/**\n *\n *\n * @param {*} domainType\n * @param {*} rangeType\n * @param {*} schemeType\n * @param {*} stops\n */\nexport const strategyGetter = (domainType, rangeType, schemeType, stops) =>\n strategies(stops)[`${domainType}-${rangeType}-${schemeType || ''}`];\n","/**\n * @module Axis\n * This file declares a class that is used to render an axis to add meaning to\n * plots.\n */\nimport { getUniqueId, generateGetterSetters, rgbToHsv } from 'muze-utils';\nimport { createScale, getScheme, getSchemeType } from '../scale-creator';\nimport { CONTINOUS, DISCRETE, COLOR } from '../enums/constants';\nimport { strategyGetter } from './color-strategy';\nimport { DEFAULT_CONFIG } from './defaults';\nimport { PROPS, getHslString } from './props';\n\n/**\n* This class is used to instantiate a SimpleAxis.\n* @class SimpleAxis\n*/\nexport default class ColorAxis {\n\n /**\n * Creates an instance of SimpleAxis.\n * @param {Object} config input parameters.\n * @param {Object | undefined} params.range Type of color range.\n * @param {string} params.name the label to show on axis.\n * @param {string} params.type The type of scale to handle.\n * @memberof ColorAxis\n */\n constructor (config) {\n generateGetterSetters(this, PROPS);\n this.config(config);\n\n this._domainType = this._config.type === 'linear' ? CONTINOUS : DISCRETE;\n this._rangeType = (this._config.type === 'linear' && !this._config.step) ? CONTINOUS : DISCRETE;\n\n this._schemeType = getSchemeType(this._config.range);\n\n this._colorStrategy = this.setColorStrategy(this._domainType, this._rangeType, this._schemeType);\n this._scale = this.createScale(this._colorStrategy);\n\n this._id = getUniqueId();\n\n this.updateDomain(config.domain);\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof ColorAxis\n */\n static defaultConfig () {\n return DEFAULT_CONFIG;\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof ColorAxis\n */\n static type () {\n return COLOR;\n }\n\n /**\n *\n *\n * @param {*} colorStrategy\n * @returns\n * @memberof ColorAxis\n */\n createScale (colorStrategy) {\n const { range } = this.config();\n if (range && typeof (range) === 'string') {\n return getScheme(range);\n }\n return createScale({\n type: colorStrategy.scale,\n range\n });\n }\n\n /**\n *\n *\n * @param {*} domainType\n * @param {*} rangeType\n * @param {*} schemeType\n * @returns\n * @memberof ColorAxis\n */\n setColorStrategy (domainType, rangeType, schemeType) {\n const { stops } = this.config();\n\n return strategyGetter(domainType, rangeType, schemeType, stops);\n }\n\n /**\n *\n *\n * @param {*} domainVal\n * @returns\n * @memberof ColorAxis\n */\n getHslString (hslColorArray) {\n return getHslString(hslColorArray);\n }\n /**\n *\n *\n * @param {*} domainVal\n * @returns\n * @memberof ColorAxis\n */\n getColor (domainVal) {\n return this.getHslString(this.getRawColor(domainVal));\n }\n /**\n *\n *\n * @param {*} domainVal\n * @returns\n * @memberof ColorAxis\n */\n getRawColor (domainVal) {\n if (this.domain() && domainVal !== undefined) {\n const scale = this.scale();\n const range = scale.range ? scale.range() : null;\n const color = this._colorStrategy.value(range)(domainVal, scale, this.domain(), this.uniqueValues());\n\n if (typeof color === 'string') {\n const col = color.substring(color.indexOf('(') + 1, color.lastIndexOf(')')).split(/,\\s*/);\n return rgbToHsv(...col);\n }\n return [...color];\n }\n return [...this.config().value];\n }\n\n /**\n *\n *\n * @param {*} [domain=[]]\n * @returns\n * @memberof ColorAxis\n */\n updateDomain (domain = []) {\n if (domain.length) {\n const scale = this.scale();\n const range = scale.range ? scale.range() : null;\n const domainRangeFn = this._colorStrategy.domainRange();\n const scaleInfo = domainRangeFn(domain, this.config().stops, range);\n\n this.domain(scaleInfo.domain);\n scaleInfo.range && this.scale().range(scaleInfo.range);\n this.uniqueValues(scaleInfo.uniqueVals);\n this.scale().domain(scaleInfo.scaleDomain || this.domain());\n }\n return this;\n }\n\n /**\n * This method returns an object that can be used to\n * reconstruct this instance.\n *\n * @return {Object} the serializable props of axis\n * @memberof ShapeAxis\n */\n serialize () {\n return {\n type: this.constructor.type(),\n scale: this.scale(),\n domain: this.domain(),\n config: this.config()\n };\n }\n\n transformColor (color, transformationArr) {\n const h = color[0] * 360;\n const s = color[1] * 100;\n const l = color[2] * 100;\n const a = color[3] || 1;\n const newH = h + transformationArr[0];\n const newS = s + transformationArr[1];\n const newL = l + transformationArr[2];\n const newA = a + transformationArr[3] || 0;\n\n return { color: `hsla(${newH},${newS}%,${newL}%,${newA})`, hsla: [newH / 360, newS / 100, newL / 100, newA] };\n }\n\n /**\n * Returns the id of the axis.\n * @return {string} Unique identifier of the axis.\n */\n id () {\n return this._id;\n }\n\n}\n","export const DEFAULT_CONFIG = {\n value: 36,\n range: [36, 1000]\n};\n","import { numberInterpolator, piecewiseInterpolator } from 'muze-utils';\nimport { CONTINOUS, DISCRETE } from '../enums/constants';\nimport { LINEAR, THRESHOLD } from '../enums/scale-type';\n\n/**\n *\n *\n * @param {*} domain\n * @returns\n */\nconst indexedDomain = (domain) => {\n const uniqueVals = domain;\n const retDomain = domain.map((d, i) => (i) / (domain.length - 1));\n return { domain: retDomain, uniqueVals, scaleDomain: [0, 1] };\n};\n\n/**\n *\n *\n * @param {*} domain\n * @returns\n */\nconst normalDomain = (domain) => {\n const uniqueVals = domain;\n return { uniqueVals, domain };\n};\n\n/**\n *\n *\n * @param {*} domain\n * @param {*} intervals\n * @returns\n */\nconst steppedDomain = (domain, intervals) => {\n let newIntervals = [];\n if (intervals instanceof Array) {\n newIntervals = intervals.slice().sort();\n } else {\n const interpolator = numberInterpolator()(...domain);\n for (let i = 0; i < intervals; i++) {\n newIntervals[i] = interpolator(i / (intervals - 1));\n }\n }\n if (newIntervals[0] < domain[0]) {\n newIntervals.shift();\n }\n const retDomain = newIntervals;\n return { uniqueVals: newIntervals, domain: retDomain, nice: true };\n};\n\n/**\n *\n *\n * @param {*} domainValue\n * @param {*} scale\n * @param {*} domain\n * @param {*} uniqueVals\n * @returns\n */\nconst discreteRange = (domainValue, scale, domain) => {\n const numVal = (domainValue - domain[0]) / (domain[domain.length - 1] - domain[0]);\n const interpolator = numberInterpolator()(...scale.range());\n return interpolator(numVal);\n};\n\n/**\n *\n *\n * @param {*} domainValue\n * @param {*} scale\n * @param {*} domain\n * @returns\n */\nconst pieceWiseRange = (domainValue, scale, domain, uniqueVals) => {\n const index = uniqueVals.indexOf(domainValue);\n const numVal = domain[index];\n const fn = piecewiseInterpolator()(numberInterpolator(), [...scale.range()]);\n return fn(numVal);\n};\n\n/**\n *\n *\n * @param {*} domainValue\n * @param {*} scale\n */\nconst normalRange = (domainValue, scale) => scale(domainValue);\n\n/**\n *\n *\n * @param {*} intervals\n */\nconst strategies = {\n [`${DISCRETE}-${CONTINOUS}`]: {\n scale: LINEAR,\n domain: indexedDomain,\n range: pieceWiseRange\n },\n [`${CONTINOUS}-${CONTINOUS}`]: {\n scale: LINEAR,\n domain: normalDomain,\n range: normalRange\n },\n [`${CONTINOUS}-${DISCRETE}`]: {\n scale: THRESHOLD,\n domain: steppedDomain,\n range: discreteRange\n }\n};\n\n/**\n *\n *\n * @param {*} domainType\n * @param {*} rangeType\n * @param {*} schemeType\n * @param {*} intervals\n */\nexport const strategyGetter = (domainType, rangeType) =>\n strategies[`${domainType}-${rangeType}`];\n","export const PROPS = {\n config: {},\n domain: {\n sanitization: (context, value) => {\n context.scale().domain(value);\n return value;\n }\n },\n range: {},\n scale: {},\n uniqueValues: {}\n};\n","/**\n * @module Axis\n * This file declares a class that is used to render an axis to add meaning to\n * plots.\n */\nimport { getUniqueId, generateGetterSetters } from 'muze-utils';\nimport { createScale } from '../scale-creator';\nimport { DEFAULT_CONFIG } from './defaults';\nimport { SIZE, CONTINOUS, DISCRETE } from '../enums/constants';\nimport { strategyGetter } from './size-strategy';\nimport { PROPS } from './props';\n\n/**\n* This class is used to instantiate a SimpleAxis.\n* @class SimpleAxis\n*/\nexport default class SizeAxis {\n\n /**\n * Creates an instance of SimpleAxis.\n * @param {Object} config input parameters.\n * @memberof SizeAxis\n */\n constructor (config) {\n generateGetterSetters(this, PROPS);\n\n this._id = getUniqueId();\n this._config = Object.assign({}, this.constructor.defaultConfig(), config);\n // @todo: Will use configuration override using scale decorator\n this._domainType = this._config.type === 'linear' ? CONTINOUS : DISCRETE;\n this._rangeType = CONTINOUS;\n\n this._sizeStrategy = this.setStrategy(this._domainType, this._rangeType);\n this._scale = this.createScale(this._sizeStrategy);\n this._range = this._config.range;\n\n this.updateDomain(config.domain);\n }\n\n /**\n *\n *\n * @param {*} domainType\n * @param {*} rangeType\n * @param {*} schemeType\n * @returns\n * @memberof ColorAxis\n */\n setStrategy (domainType, rangeType) {\n return strategyGetter(domainType, rangeType);\n }\n\n /**\n *\n *\n * @returns\n * @memberof SizeAxis\n */\n createScale (strategy) {\n const {\n range\n } = this.config();\n return createScale({\n type: strategy.scale,\n range\n });\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof ColorAxis\n */\n static defaultConfig () {\n return DEFAULT_CONFIG;\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof ColorAxis\n */\n static type () {\n return SIZE;\n }\n\n /**\n *\n *\n * @param {*} domainVal\n * @returns\n * @memberof SizeAxis\n */\n getSize (domainVal = 0) {\n let sizeVal = 1;\n const {\n value\n } = this.config();\n const scale = this.scale();\n const domain = this.domain() || [1, 1];\n\n if (!scale || domain[0] === domain[1]) {\n sizeVal = value;\n } else {\n return this._sizeStrategy.range(domainVal, scale, this.domain(), this.uniqueValues());\n }\n return sizeVal;\n }\n\n /**\n * This method is used to assign a domain to the axis.\n *\n * @param {Array} domain the domain of the scale\n * @memberof SizeAxis\n */\n updateDomain (domain) {\n if (domain) {\n const domainFn = this._sizeStrategy.domain;\n\n const domainInfo = domainFn(domain, this.config().intervals);\n\n this.domain(domainInfo.domain);\n this.uniqueValues(domainInfo.uniqueVals);\n\n this.scale().domain(domainInfo.scaleDomain || this.domain());\n }\n return this;\n }\n\n /**\n * This method returns an object that can be used to\n * reconstruct this instance.\n *\n * @return {Object} the serializable props of axis\n * @memberof ShapeAxis\n */\n serialize () {\n return {\n type: this.constructor.type(),\n scale: this.scale(),\n domain: this.domain(),\n range: this.range(),\n config: this.config()\n };\n }\n\n /**\n * Returns the id of the axis.\n * @return {string} Unique identifier of the axis.\n */\n id () {\n return this._id;\n }\n}\n","export const DEFAULT_CONFIG = {\n generator: null,\n value: 'circle',\n range: ['circle', 'diamond', 'star', 'cross', 'square', 'wye', 'triangle']\n};\n","export const PROPS = {\n config: {},\n domain: {},\n scale: {},\n uniqueValues: {},\n generator: {}\n};\n\n","/**\n * @module Axis\n * This file declares a class that is used to render an axis to add meaning to\n * plots.\n */\nimport { getUniqueId, getSymbol, generateGetterSetters, mergeRecursive } from 'muze-utils';\nimport { createScale } from '../scale-creator';\nimport { DEFAULT_CONFIG } from './defaults';\nimport { SHAPE } from '../enums/constants';\nimport { shapeGenerator } from './helper';\nimport { PROPS } from './props';\n\n/**\n* This class is used to instantiate a SimpleAxis.\n* @class SimpleAxis\n*/\nexport default class ShapeAxis {\n /**\n * Creates an instance of SimpleAxis.\n * @param {Object} params input parameters.\n * @param {Object | undefined} params.range Type of color scheme.\n * @memberof ShapeAxis\n */\n constructor (config) {\n generateGetterSetters(this, PROPS);\n\n this._id = getUniqueId();\n this._config = Object.assign({}, this.constructor.defaultConfig());\n this._config = mergeRecursive(this._config, config);\n\n this._scale = createScale({\n type: 'ordinal',\n range: this._config.range\n });\n this.updateDomain(config.domain);\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof ColorAxis\n */\n static defaultConfig () {\n return DEFAULT_CONFIG;\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof ColorAxis\n */\n static type () {\n return SHAPE;\n }\n\n /**\n *\n *\n * @param {*} value\n * @returns\n * @memberof ShapeAxis\n */\n getShape (value) {\n if (!this.scale() || !this.domain() || !value) {\n return this.config().value;\n }\n\n if (this._generatedShapes) {\n return this._generatedShapes[value];\n }\n\n const shapeType = this.scale()(value);\n if (shapeType === 'string') {\n return getSymbol(shapeType);\n }\n\n return shapeType;\n }\n\n /**\n * This method is used to assign a domain to the axis.\n *\n * @param {Array} domain the domain of the scale\n * @memberof ShapeAxis\n */\n updateDomain (domain = []) {\n if (domain.length) {\n this.uniqueValues(domain);\n this.domain(domain);\n this.scale().domain(domain);\n\n if (this.config().generator) {\n this._generatedShapes = shapeGenerator(domain, this.config().generator);\n }\n }\n return this;\n }\n\n /**\n * This method returns an object that can be used to\n * reconstruct this instance.\n *\n * @return {Object} the serializable props of axis\n * @memberof ShapeAxis\n */\n serialize () {\n return {\n type: this.constructor.type(),\n scale: this.scale(),\n domain: this.domain(),\n range: this.config().range,\n config: this.config()\n };\n }\n\n /**\n * Returns the id of the axis.\n * @return {string} Unique identifier of the axis.\n */\n id () {\n return this._id;\n }\n}\n","/**\n *\n *\n * @param {*} domain\n * @param {*} generatorFn\n * @returns\n */\nexport const shapeGenerator = (domain, generatorFn) => {\n const generatedShapes = {};\n domain.forEach((value) => {\n generatedShapes[value] = generatorFn(value);\n });\n return generatedShapes;\n};\n","import * as ScaleType from './enums/scale-type';\n\nconst DATA_TYPES = {\n DIMENSION: 'dimension',\n CATEGORICAL: 'categorical',\n MEASURE: 'measure',\n DATETIME: 'temporal'\n};\n\n/**\n * Map of DataModel types to associated field types.\n */\nexport const dataTypeScaleMap = {\n [DATA_TYPES.DIMENSION]: ScaleType.BAND,\n [DATA_TYPES.MEASURE]: ScaleType.LINEAR,\n [DATA_TYPES.DATETIME]: ScaleType.TIME\n};\n\n","import { nestCollection } from 'muze-utils';\n\n/**\n * Create multiple datasets from a single dataset by grouping the data using\n * a dimensional field.\n * @param {Array} schema Name and type of fields are stored in schema\n * @param {Array} data Data array\n * @param {Object} config Configuration object\n * @return {Array} Grouped data array\n */\nexport default (schema, data, config) => {\n const groupBy = config.groupBy instanceof Array ? config.groupBy : [config.groupBy];\n const groupByIndices = groupBy.map(fieldName => schema.findIndex(d => d.name === fieldName));\n\n if (groupByIndices.find(d => d === -1) !== undefined) {\n throw new Error(`Groupby field ${groupBy} not found in schema`);\n }\n\n return nestCollection({\n keys: groupByIndices,\n data\n });\n};\n","/**\n * @module Transform\n * This file exports a function that is used to implement\n * the identity transform\n */\n /* eslint no-unused-vars: 0 */\n /**\n * This function accepts data and returns the data unchanged.\n * @param {Object} schema The schema.\n * @param {Array} data The data array.\n * @param {Object} config The config object.\n * @return {Array} The unchanged data.\n */\n function identityTransform (schema, data, config) {\n return data;\n }\n\n export default identityTransform;\n","/**\n * @module Transform\n * This file exports the transform factory.\n */\nimport * as TransformType from '../enums/transform-type';\nimport identity from '../identity-transform';\nimport group from '../group-transform';\nimport stack from '../stack-transform';\n\n/* istanbul ignore next */\nconst transformMap = {\n [TransformType.IDENTITY]: identity,\n [TransformType.GROUP]: group,\n [TransformType.STACK]: stack\n};\n\n/**\n * This function is used to retirn a transform associated\n * with the given type.\n *\n * @param {string} type The type of the transform.\n * @return {Function} The transform function.\n */\nfunction transformFactory (type) {\n const transform = transformMap[type];\n if (typeof transform !== 'function') {\n throw new Error('Invalid transform type supplied.');\n }\n return transform;\n}\n\nexport default transformFactory;\n","/**\n * @module Transform\n * This module exports constants that are used to reference transforms in\n * a consistent manner throughout the project.\n */\n/* eslint one-var: 0 */\n export const IDENTITY = 'identity';\n export const GROUP = 'group';\n export const STACK = 'stack';\n export const FRACTURE = 'fracture';\n","import { stack } from 'muze-utils';\n\nimport group from '../group-transform';\n/*\n Normalize the data to a form which can be given to d3 stack for stacking the data\n ['Product', 'Sales', 'Region'],\n 0 ['A', 2000, 'North'],\n 1 ['A', 3000, 'South'],\n 2 ['B', 3000, 'South'],\n 3 ['B', 2000, 'North'],\n 4 ['C', 3000, 'South'],\n 5 ['C', 2000, 'North']\n |\n |\n ['Product', 'North', 'South'],\n ['A', 2000, 3000],\n ['B', 2000, 3000],\n ['C', 2000, 3000]\n*/\n// eslint-disable-next-line require-jsdoc\nconst normalizeData = (data, schema, valueField, uniqueField, groupBy) => {\n const groupedData = group(schema, data, {\n groupBy: uniqueField\n });\n const uniqueFieldIndex = schema.findIndex(d => d.name === uniqueField);\n const valueFieldIndex = schema.findIndex(d => d.name === valueField);\n const seriesKeyIndex = schema.findIndex(d => d.name === groupBy);\n const seriesKeys = data.map(d => d[seriesKeyIndex]).filter((item, pos, arr) => arr.indexOf(item) === pos).sort();\n const fieldNames = schema.reduce((acc, obj, i) => {\n acc[i] = obj.name;\n return acc;\n }, {});\n const dataArr = groupedData.map((arr) => {\n const tuples = {};\n const rowObj = arr.values.reduce((acc, row) => {\n acc = row.reduce((obj, value, i) => {\n if (i === seriesKeyIndex) {\n obj[value] = row[valueFieldIndex];\n tuples[value] = row;\n } else if (i !== valueFieldIndex) {\n obj[fieldNames[i]] = value;\n }\n return obj;\n }, acc);\n return acc;\n }, {});\n rowObj._tuple = tuples;\n // Set missing values field to zero value\n seriesKeys.forEach((seriesKey) => {\n if (rowObj[seriesKey] === undefined) {\n rowObj[seriesKey] = 0;\n const newArr = new Array(arr.values[0].length);\n newArr[uniqueFieldIndex] = arr.key;\n newArr[seriesKeyIndex] = seriesKey;\n rowObj._tuple[seriesKey] = newArr;\n }\n });\n return rowObj;\n });\n\n return {\n data: dataArr,\n keys: seriesKeys\n };\n};\n/**\n * Generate a stacked representation of data\n * @param {Array} schema schema Array\n * @param {Array} data data array\n * @param {Object} config Configuration object\n * @return {Array} stacked data\n */\nexport default (schema, data, config) => {\n const uniqueField = config.uniqueField;\n const valueField = config.value;\n const groupBy = config.groupBy;\n const sort = config.sort || 'descending';\n const normalizedData = normalizeData(data, schema, valueField, uniqueField, groupBy);\n const keys = normalizedData.keys;\n const map = {};\n const orderBy = config.orderBy;\n const orderIndex = schema.findIndex(d => d.name === orderBy);\n const groupByIndex = schema.findIndex(d => d.name === groupBy);\n if (orderIndex !== -1) {\n keys.forEach((key) => {\n const name = data.find(d => d[groupByIndex] === key);\n map[key] = name[orderIndex];\n });\n normalizedData.keys.sort((a, b) => map[a].localeCompare(map[b]));\n }\n\n const stackData = stack({\n keys: normalizedData.keys,\n offset: config.offset || 'diverging',\n order: sort,\n data: normalizedData.data\n });\n stackData.forEach((seriesData) => {\n seriesData.forEach((dataObj) => {\n dataObj.data = dataObj.data._tuple[seriesData.key];\n });\n });\n return stackData;\n};\n\n","import {\n FieldType,\n getDomainFromData,\n setStyles,\n easeFns,\n selectElement,\n DimensionSubtype\n} from 'muze-utils';\nimport { ScaleType } from '@chartshq/muze-axis';\nimport { transformFactory } from '@chartshq/transform';\nimport { IDENTITY, STACK, GROUP, COLOR, SHAPE, SIZE, ENCODING } from '../enums/constants';\n\nconst BAND = ScaleType.BAND;\n\nexport const getLayerColor = ({ datum, index }, { colorEncoding, colorAxis, colorFieldIndex }) => {\n let rawColor = '';\n let color = '';\n if (colorEncoding && colorEncoding.value instanceof Function) {\n color = colorEncoding.value(datum, index);\n rawColor = colorEncoding.value(datum, index);\n } else {\n rawColor = colorAxis.getRawColor(datum._data[colorFieldIndex]);\n color = colorAxis.getHslString(rawColor);\n }\n return { color, rawColor };\n};\n\nconst transfromColor = (colorAxis, datum, styleType, intensity) => {\n datum.meta.stateColor[styleType] = datum.meta.stateColor[styleType] || datum.meta.originalColor;\n const fillColorInfo = colorAxis.transformColor(datum.meta.stateColor[styleType], intensity);\n datum.meta.stateColor[styleType] = fillColorInfo.hsla;\n\n return fillColorInfo;\n};\n\nexport const applyInteractionStyle = (context, selectionSet, interactionStyles, config) => {\n const elements = context.getPlotElementsFromSet(selectionSet);\n const axes = context.axes();\n const colorAxis = axes.color;\n const apply = config.apply;\n const interactionType = config.interactionType;\n interactionStyles.forEach((style) => {\n const styleType = style.type;\n elements.style(styleType, ((d) => {\n const { colorTransform, stateColor, originalColor } = d.meta;\n colorTransform[interactionType] = colorTransform[interactionType] || {};\n if (apply && !colorTransform[interactionType][styleType]) {\n // fade selections\n colorTransform[interactionType][styleType] = style.intensity;\n const color = transfromColor(colorAxis, d, styleType, style.intensity).color;\n return color;\n }\n if (!apply && colorTransform[interactionType][styleType]) {\n // unfade selections\n colorTransform[interactionType][styleType] = null;\n return transfromColor(colorAxis, d, styleType, style.intensity.map(e => -e)).color;\n }\n const [h, s, l, a] = stateColor[styleType] ? stateColor[styleType] : originalColor;\n return `hsla(${h * 360},${s * 100}%,${l * 100}%, ${a || 1})`;\n }));\n });\n};\n\n/**\n *\n *\n * @param {*} selectionSet\n * @param {*} className\n * @param {*} hasFaded\n */\nexport const fadeUnfadeSelection = (context, selectionSet, hasFaded, interaction) => {\n const interactionConfig = { interaction, apply: hasFaded };\n applyInteractionStyle(context, selectionSet, 'fade', interactionConfig);\n};\n\n/**\n *\n *\n * @param {*} selectionSet\n * @param {*} className\n * @param {*} hasFaded\n */\nexport const focusUnfocusSelection = (context, selectionSet, isFocussed, interaction) => {\n const interactionConfig = { interaction, apply: isFocussed };\n applyInteractionStyle(context, selectionSet, 'focus', interactionConfig);\n};\n\n/**\n *\n *\n * @param {*} axes\n * @returns\n */\nexport const getAxesScales = (axes) => {\n const [xAxis, yAxis] = [ENCODING.X, ENCODING.Y].map(e => axes[e]);\n const [xScale, yScale] = [xAxis, yAxis].map(e => e && e.scale());\n return {\n xAxis,\n yAxis,\n xScale,\n yScale\n };\n};\n\n/**\n *\n *\n * @param {*} encoding\n * @param {*} fieldsConfig\n * @returns\n */\nexport const getEncodingFieldInf = (encoding, fieldsConfig) => {\n const [xField, yField, x0Field, y0Field, colorField, shapeField, sizeField] =\n [ENCODING.X, ENCODING.Y, ENCODING.X0, ENCODING.Y0, COLOR, SHAPE, SIZE].map(e => encoding[e] &&\n encoding[e].field);\n\n const [xFieldType, yFieldType] = [xField, yField, x0Field, y0Field].map(e => fieldsConfig[e] &&\n fieldsConfig[e].def.type);\n\n const [xFieldSubType, yFieldSubType] = [xField, yField].map(e => fieldsConfig[e] && (fieldsConfig[e].def.subtype ||\n fieldsConfig[e].def.type));\n\n const [xFieldIndex, yFieldIndex, x0FieldIndex, y0FieldIndex] = [xField, yField, x0Field, y0Field]\n .map(e => fieldsConfig[e] && fieldsConfig[e].index);\n\n return {\n xField,\n yField,\n colorField,\n shapeField,\n sizeField,\n x0Field,\n y0Field,\n xFieldType,\n yFieldType,\n xFieldSubType,\n yFieldSubType,\n xFieldIndex,\n yFieldIndex,\n x0FieldIndex,\n y0FieldIndex\n };\n};\n\n/**\n *\n *\n * @param {*} layerConfig\n * @param {*} fieldsConfig\n * @returns\n */\nexport const getValidTransform = (layerConfig, fieldsConfig, encodingFieldInf) => {\n let transformType;\n const {\n transform\n } = layerConfig;\n const {\n xField,\n yField,\n xFieldType,\n yFieldType\n } = encodingFieldInf;\n const groupByField = transform.groupBy;\n const groupByFieldMeasure = fieldsConfig[groupByField] && fieldsConfig[groupByField].def.type === FieldType.MEASURE;\n transformType = transform.type;\n if (!xField || !yField || groupByFieldMeasure || !groupByField || xFieldType === FieldType.DIMENSION &&\n yFieldType === FieldType.DIMENSION) {\n transformType = IDENTITY;\n }\n return transformType;\n};\n\n/**\n *\n *\n * @param {*} dataModel\n * @param {*} config\n * @param {*} transformType\n * @returns\n */\nexport const transformData = (dataModel, config, transformType, encodingFieldInf) => {\n const data = dataModel.getData({ withUid: true });\n const schema = data.schema;\n const transform = config.transform;\n const {\n xField,\n yField,\n xFieldType,\n yFieldType\n } = encodingFieldInf;\n const uniqueField = xFieldType === FieldType.MEASURE ? yField : xField;\n\n return transformFactory(transformType)(schema, data.data, {\n groupBy: transform.groupBy,\n uniqueField,\n sort: transform.sort || 'none',\n offset: transform.offset,\n orderBy: transform.orderBy,\n value: yFieldType === FieldType.MEASURE ? yField : xField\n }, data.uids);\n};\n\nexport const getIndividualClassName = (d, i, data, context) => {\n const className = context.config().individualClassName;\n let classNameStr = '';\n if (className instanceof Function) {\n classNameStr = className(d, i, data, context);\n }\n return classNameStr;\n};\n\n/*\n * This method resolves the x, y, x0 and y0 values from the transformed data.\n * It also checks the type of transformed data for example, if it is a stacked data\n * then it fetches the y and y0 values from the stacked data.\n * @param {Array.} transformedData transformed data\n * @param {Object} fieldsConfig field definitions\n * @param {string} transformType type of transformed data - stack, group or identity.\n * @return {Array.} Normalized data\n*/\nexport const getNormalizedData = (transformedData, fieldsConfig, encodingFieldInf, transformType) => {\n const transformedDataArr = transformType === IDENTITY ? [transformedData] : transformedData;\n const {\n xFieldType,\n xFieldIndex,\n yFieldIndex,\n x0FieldIndex,\n y0FieldIndex\n } = encodingFieldInf;\n const fieldsLen = Object.keys(fieldsConfig).length;\n /**\n * Returns normalized data from transformed data. It recursively traverses through\n * the transformed data if there it is nested.\n */\n return transformedDataArr.map((data) => {\n const values = transformType === GROUP ? data.values : data;\n return values.map((d) => {\n let pointObj = {};\n let tuple;\n if (transformType === STACK) {\n tuple = d.data || [];\n let y;\n let y0;\n let x;\n let x0;\n if (d[1] >= d[0]) {\n y = x0 = d[1];\n x = y0 = d[0];\n } else {\n y = x0 = d[0];\n x = y0 = d[1];\n }\n\n pointObj = xFieldType === FieldType.MEASURE ? {\n x,\n x0,\n y: tuple[yFieldIndex],\n y0: tuple[yFieldIndex]\n } : {\n x: tuple[xFieldIndex],\n x0: tuple[xFieldIndex],\n y,\n y0\n };\n pointObj._data = tuple;\n pointObj._id = tuple[fieldsLen];\n } else {\n pointObj = {\n x: d[xFieldIndex],\n y: d[yFieldIndex],\n x0: d[x0FieldIndex],\n y0: d[y0FieldIndex]\n };\n pointObj._data = d;\n pointObj._id = d[fieldsLen];\n }\n return pointObj;\n });\n }).filter(d => d.length);\n};\n\nexport const calculateDomainFromData = (data, encodingFieldInf, transformType) => {\n const {\n xFieldSubType,\n yFieldSubType,\n xField,\n yField,\n x0Field,\n y0Field\n } = encodingFieldInf;\n const domains = {};\n const yEnc = ENCODING.Y;\n const xEnc = ENCODING.X;\n if (xField) {\n domains.x = getDomainFromData(data, x0Field || transformType === STACK ? [xEnc, ENCODING.X0] : [xEnc, xEnc],\n xFieldSubType);\n }\n if (yField) {\n domains.y = getDomainFromData(data, y0Field || transformType === STACK ? [ENCODING.Y0, ENCODING.Y] :\n [yEnc, yEnc], yFieldSubType);\n }\n\n return domains;\n};\n\nexport const attachDataToVoronoi = (voronoi, points) => {\n voronoi.data([].concat(...points).filter(d => d._id !== undefined).map((d) => {\n const point = d.update;\n return {\n x: point.x,\n y: point.y,\n data: d\n };\n }));\n};\n\n/**\n *\n *\n * @param {*} target\n * @param {*} styles\n * @param {*} remove\n */\nexport const updateStyle = (target, styles, remove) => {\n for (const key in styles) {\n if ({}.hasOwnProperty.call(styles, key)) {\n target.style(key, remove ? null : styles[key]);\n }\n }\n};\n\n/**\n *\n *\n * @param {*} mount\n * @param {*} context\n */\nexport const animateGroup = (mount, context) => {\n let groupTransition;\n let update;\n const { transition, groupAnimateStyle } = context;\n const { duration, effect, disabled } = transition;\n if (groupAnimateStyle) {\n setStyles(mount.node(), groupAnimateStyle.enter);\n update = groupAnimateStyle.update;\n if (!disabled) {\n groupTransition = mount.transition()\n .ease(easeFns[effect])\n .duration(duration)\n .on('end', function () {\n updateStyle(selectElement(this), update, true);\n });\n } else {\n groupTransition = mount;\n }\n updateStyle(groupTransition, update);\n }\n};\n\nexport const positionPoints = (context, points) => {\n const positioner = context.encodingTransform();\n if (positioner) {\n return positioner(points, context, { smartLabel: context._dependencies.smartLabel });\n }\n return points;\n};\n\n/**\n * Gets the width of each group. It gets the width from axis if it is available for\n * example when the scale is nominal else it calculates the width from the\n * range of the axis and number of data points.\n *\n * @param {SimpleAxis} axis instance of axis\n * @param {number} minDiff Minimum difference between data points\n * @return {number} width of each bar\n * @private\n*/\nexport const getGroupSpan = (axis, minDiff) => {\n let groupSpan;\n const width = axis.getUnitWidth();\n const scale = axis.scale();\n const range = scale.range();\n const domain = scale.domain();\n !width ? groupSpan = (Math.abs(range[1] - range[0]) / Math.abs(domain[1] - domain[0])) * minDiff :\n (groupSpan = width);\n\n return groupSpan;\n};\n\nexport const getPlotMeasurement = (context, dimensionalValues) => {\n const fieldInfo = context.encodingFieldsInf();\n const axes = context.axes();\n const transformType = context.transformType();\n const config = context.config();\n const bandScale = context._bandScale;\n\n return ['x', 'y'].map((type) => {\n let span = 0;\n let groupSpan = 0;\n let padding = 0;\n let offsetValues = [];\n if (fieldInfo[`${type}FieldType`] === FieldType.DIMENSION) {\n let actualGroupWidth;\n const isTemporal = fieldInfo[`${type}FieldSubType`] === DimensionSubtype.TEMPORAL;\n const timeDiff = isTemporal ? context.dataProps().timeDiffs[type] : 0;\n const axis = axes[type];\n const pad = config[`pad${type.toUpperCase()}`];\n const innerPadding = config.innerPadding;\n const keys = dimensionalValues;\n const scale = axis.scale();\n groupSpan = getGroupSpan(axis, timeDiff);\n const isAxisBandScale = axis.constructor.type() === BAND;\n const axisPadding = axis.config().padding;\n // If it is a grouped bar then the width of each bar in a grouping is retrieved from\n // a band scale. The band scale will have range equal to width of one group of bars and\n // the domain is set to series keys.\n if (transformType === 'group') {\n const groupPadding = isAxisBandScale ? 0 : axisPadding * groupSpan / 2;\n bandScale.range([groupPadding, groupSpan - groupPadding]).domain(keys).paddingInner(innerPadding);\n span = bandScale.bandwidth();\n actualGroupWidth = groupSpan - (isAxisBandScale ? 0 : axisPadding * groupSpan);\n offsetValues = keys.map(key => bandScale(key) - (isAxisBandScale ? 0 : (groupSpan / 2)));\n } else if (pad !== undefined) {\n let offset;\n if (isAxisBandScale) {\n const step = scale.step();\n offset = scale.padding() * step;\n span = scale.bandwidth() + offset;\n } else {\n span = groupSpan;\n }\n offsetValues = keys.map(() => (isAxisBandScale ? -(offset / 2) : -(span / 2)));\n } else {\n padding = isAxisBandScale ? 0 : axisPadding * groupSpan;\n span = groupSpan - padding;\n actualGroupWidth = span;\n offsetValues = keys.map(() => (isAxisBandScale ? 0 : -(span / 2)));\n }\n\n groupSpan = actualGroupWidth;\n padding = isAxisBandScale ? axisPadding * axis.scale().step() : axisPadding * groupSpan;\n }\n\n return {\n span,\n offsetValues,\n groupSpan,\n padding\n };\n });\n};\n","import { nextFrame } from 'muze-utils';\nimport { getValidTransform, getEncodingFieldInf } from '../helpers';\nimport * as PROPS from '../enums/props';\n\nexport const listenerMap = context => [\n {\n props: [PROPS.TRANSFORMED_DATA],\n listener: fetch => fetch(PROPS.DATA, PROPS.CONFIG, (dataModel, config) => {\n const dataModelValue = dataModel.value;\n const configValue = config.value;\n const encodingValue = configValue && configValue.encoding;\n if (dataModelValue && encodingValue) {\n const fieldsConfig = dataModelValue.getFieldsConfig();\n const encodingFieldsInf = getEncodingFieldInf(encodingValue, fieldsConfig);\n context.encodingFieldsInf(encodingFieldsInf);\n context.transformType(getValidTransform(configValue, fieldsConfig, encodingFieldsInf));\n return context.getTransformedData(dataModelValue, configValue, context.transformType(),\n encodingFieldsInf);\n }\n return null;\n }),\n type: 'computed'\n },\n {\n props: [PROPS.NORMALIZED_DATA],\n listener: fetch => fetch(PROPS.TRANSFORMED_DATA, (transformedData) => {\n const transformedDataValue = transformedData.value;\n if (transformedDataValue) {\n const fieldsConfig = context.data().getFieldsConfig();\n return context.getNormalizedData(transformedDataValue, fieldsConfig);\n }\n return null;\n }),\n type: 'computed'\n },\n {\n props: [PROPS.DOMAIN],\n listener: fetch => fetch(PROPS.NORMALIZED_DATA, (normalizedData) => {\n const normalizedDataValue = normalizedData.value;\n if (normalizedDataValue) {\n return context.calculateDomainFromData(normalizedDataValue, context.encodingFieldsInf(),\n context.data().getFieldsConfig());\n }\n return null;\n }),\n type: 'computed'\n },\n {\n props: [PROPS.DATA],\n listener: (data) => {\n if (data[1]) {\n nextFrame(() => {\n context.store().commit(PROPS.DATA_UPDATED, true);\n });\n }\n },\n type: 'registerImmediateListener'\n },\n {\n props: [PROPS.MOUNT, PROPS.DATA_UPDATED],\n listener: (mount, dataUpdated) => {\n if (mount[1] && dataUpdated[1]) {\n context.render(mount[1]);\n context.dependencies().throwback.commit('onlayerdraw', true);\n }\n },\n type: 'registerChangeListener'\n }\n];\n\n","import { mergeRecursive } from 'muze-utils';\nimport * as PROPS from '../enums/props';\n\nexport const defaultOptions = {\n [PROPS.CONFIG]: {\n value: null,\n meta: {\n sanitization: (config, oldConfig, context) => {\n const constructor = context.constructor;\n const newConf = mergeRecursive({}, constructor.defaultConfig());\n return constructor.defaultPolicy(newConf, config);\n }\n }\n },\n [PROPS.DATA]: {\n value: null,\n meta: {\n preset: (data, context) => {\n if (context._cacheEnabled) {\n context._cachedData.push(data);\n } else {\n context._cachedData = [data];\n }\n }\n }\n },\n [PROPS.MOUNT]: {\n value: null\n },\n [PROPS.AXES]: {\n value: null\n },\n [PROPS.MEASUREMENT]: {\n value: null\n }\n};\n","import {\n getUniqueId,\n mergeRecursive,\n Store,\n FieldType,\n selectElement,\n ReservedFields,\n registerListeners,\n transactor,\n DataModel,\n clone\n} from 'muze-utils';\nimport { SimpleLayer } from '../simple-layer';\nimport * as PROPS from '../enums/props';\nimport {\n transformData,\n calculateDomainFromData,\n getNormalizedData,\n applyInteractionStyle\n} from '../helpers';\nimport { listenerMap } from './listener-map';\nimport { defaultOptions } from './default-options';\n\n/**\n * An abstract class which gives defination of common layer functionality like\n * - transfromation data for various {@link mode}\n * - calculating data domain\n * - linking dependent layers\n * - merging policy of configuration\n * - interaction sideffect helpers\n * - retrieving dom elements from data using id\n * - retrieving the physical dimensions of marks\n * - disposing layer\n *\n * Every layer has to extend base layer and give concrete definition.\n * This layer does not have any default visual. A new layer has to define the logic of `render` for rendering the\n * visuals\n *\n * @public\n * @class\n * @namespace Muze\n */\nexport default class BaseLayer extends SimpleLayer {\n\n /**\n * Creates a layer using a configuration and data.\n *\n * @public\n *\n * @param {DataModel} data Instance of DataModel to be used. This DataModel instance serves as the data for a layer.\n * @param {Object} axes Axes instances to be used for rendering the layer. Axes are used for mapping data from\n * value to px.\n * @param {SimpleAxis} axes.x X axis of the layer. Based on the type of variable it gets instance of BandAxis,\n * TimeAxis, ContinuousAxis\n * @param {SimpleAxis} axes.y X axis of the layer. Based on the type of variable it gets instance of BandAxis,\n * TimeAxis, ContinuousAxis\n * @param {ColorAxis} axes.color Axis for coloring a layer using color interpolators\n * @param {ShapeAxis} axes.shape Axis for providing a shape\n * @param {SizeAxis} axes.shape Axis for determining size of a mark using size interpolator\n * @param {LayerConfig} config Configuration of the layer\n * @param {Object} dependencies Dependencies of the layer\n * @param {SmartLabel} smartLabel Smartlabel singleton instance\n */\n constructor (data, axes, config, dependencies) {\n super();\n this.store(new Store({\n DATA: null,\n [PROPS.DATA_UPDATED]: null\n }));\n transactor(this, defaultOptions, this.store().model);\n this.data(data);\n this.axes(axes);\n this.config(config);\n this.alias(this.constructor.formalName() + getUniqueId());\n this.dependencies(dependencies);\n this._points = [];\n this._cachedData = [];\n this._id = getUniqueId();\n this._measurement = {};\n registerListeners(this, listenerMap);\n }\n\n /**\n * Creates a layer instance\n * @return {BaseLayer} Instance of a layer\n */\n static create (...params) {\n return new this(...params);\n }\n\n /**\n * Default configuration of the layer. This configuration gets merged to the user passed configuration using a\n * plolicy. Base layer only returns part of configuraion, any layer overridding base layer should return its own\n * configuration.\n *\n * @public\n * @static\n *\n * @return {Object} Default configuration\n */\n static defaultConfig () {\n return {\n transform: {\n type: 'identity'\n }\n };\n }\n\n /**\n * Policy defines how user config gets merged to default config. The default policy here does a deep copy\n * operation.\n * Any policy which does more than deep copying should define the policy as a static member.\n *\n * @static\n * @public\n *\n * @param {LayerConfig} conf Configuration with which the user config will be merged\n * @param {LayerConfig} userConf Configuration given by the user\n *\n * @return {LayerConfig} Merged layer configuration\n */\n static defaultPolicy (conf, userConf) {\n return mergeRecursive(conf, userConf);\n }\n\n /**\n * Determines a name for a layer. This name of the layer is used in the input data to refer to this layer.\n * ```\n * .layer([\n * mark: 'bar',\n * encoding: { ... }\n * ])\n * ```\n *\n * @static\n * @public\n *\n * @returns {string} name of layer\n */\n static formalName () {\n return 'base';\n }\n\n store (...store) {\n if (store.length) {\n this._store = store[0];\n return this;\n }\n return this._store;\n }\n\n encodingFieldsInf (...fieldsInf) {\n if (fieldsInf.length) {\n this._encodingFieldsInf = fieldsInf[0];\n return this;\n }\n return this._encodingFieldsInf;\n }\n\n encodingTransform (...encodingTransform) {\n if (encodingTransform.length) {\n this._encodingTransform = encodingTransform[0];\n return this;\n }\n return this._encodingTransform;\n }\n\n /**\n * Provides a alias for a layer. Like it's possible to have same layer (like bar) multiple times, but among multiple\n * layers of same type if one layer has to be referred, alias is used. If no alias is given then `formalName` is set\n * as the alias name.\n *\n * @public\n *\n * If used as setter\n * @param {string} alias Name of the alias\n * @return {BaseLayer} Instance of current base layer\n *\n * If used as getter\n * @return {string} Alias of the current layer\n */\n alias (...params) {\n if (params.length) {\n this._alias = params[0];\n return this;\n }\n return this._alias || this.constructor.formalName();\n }\n\n dependencies (...params) {\n if (params.length) {\n this._dependencies = params[0];\n return this;\n }\n return this._dependencies;\n }\n\n enableCaching () {\n this._cacheEnabled = true;\n return this;\n }\n\n clearCaching () {\n this._cacheEnabled = false;\n return this.data(this._cachedData[0]);\n }\n\n /**\n * Serialize the schema. Merge config is used for serialization.\n *\n * @public\n *\n * @return {LayerConfig} Serialized schema\n */\n serialize () {\n return this.config();\n }\n\n /**\n * Returns the unique identifier of this layer. Id is auto generated during the creation proceess of a schema.\n *\n * @return {string} id of the layer\n */\n id () {\n return this._id;\n }\n\n /**\n * Gets the transform method from transform factory based on type of transform. It then calls the\n * transform method with the data and passes the configuration parameters of transform such as\n * groupBy, value field, etc.\n *\n * @public\n *\n * @param {DataModel} dataModel Instance of DataModel\n * @param {Object} config Configuration for transforming data\n * @return {Array.} Transformed data.\n */\n getTransformedData (dataModel, config, transformType, encodingFieldsInf) {\n return transformData(dataModel, config, transformType, encodingFieldsInf);\n }\n\n /**\n * Calculates the domain from the data.\n * It checks the type of field and calculates the domain based on that. For example, if it\n * is a quantitative or temporal field, then it calculates the min and max from the data or\n * if it is a nominal field then it gets all the values from the data of that field.\n * @param {Array} data DataArray\n * @param {Object} fieldsConfig Configuration of fields\n * @return {Array} Domain values array.\n */\n calculateDomainFromData (data) {\n let domains = {};\n const isEmpty = this.data().isEmpty();\n\n if (!isEmpty) {\n domains = calculateDomainFromData(data, this.encodingFieldsInf(), this.transformType());\n }\n return domains;\n }\n\n shouldDrawAnchors () {\n return false;\n }\n\n /**\n * Returns the domain for the axis.\n *\n * @param {string} encodingType type of encoding x, y, etc.\n * @return {Object} Axis domains\n */\n getDataDomain (encodingType) {\n const domains = this.store().get(PROPS.DOMAIN);\n return encodingType !== undefined ? domains[encodingType] || [] : domains;\n }\n\n /**\n * Returns the domain for the axis.\n *\n * @param {string} encodingType type of encoding x, y, etc.\n * @return {Object} Axis domains\n */\n getNormalizedData (transformedData, fieldsConfig) {\n return getNormalizedData(transformedData, fieldsConfig, this.encodingFieldsInf(), this.transformType());\n }\n\n /**\n * Abstract method for getting nearest point\n * @return {BaseLayer} Instance of base layer\n */\n getNearestPoint () {\n return null;\n }\n\n applyInteractionStyle (interactionType, selectionSet, apply) {\n const interactionConfig = this.config().interaction || {};\n\n const interactionStyles = interactionConfig[interactionType];\n if (interactionStyles) {\n applyInteractionStyle(this, selectionSet, interactionStyles, {\n apply,\n interactionType\n });\n }\n }\n\n /**\n *\n *\n * @returns\n * @memberof BaseLayer\n */\n transformType (...transformType) {\n if (transformType.length) {\n this._transformType = transformType[0];\n return this;\n }\n return this._transformType;\n }\n\n /**\n * Renders the layer\n * @return {BaseLayer} Instance of the layer.\n */\n render () {\n return this;\n }\n\n /**\n *\n *\n * @returns\n * @memberof BaseLayer\n */\n elemType () {\n return 'g';\n }\n\n /**\n * Disposes the entire layer\n * @return {BaseLayer} Instance of layer.\n */\n remove () {\n this.store().unsubscribeAll();\n selectElement(this.mount()).remove();\n return this;\n }\n\n /**\n * Stores point in an object with key as the categorical value or temporal value\n *\n * @param {string} key categorical value or temporal value\n * @param {Object} data Information of the data point\n * @return {BarLayer} Instance of bar layer\n */\n cachePoint (key, data) {\n if (key === null) {\n return this;\n }\n const pointMap = this._pointMap;\n !pointMap[key] && (pointMap[key] = []);\n pointMap[key].push(data);\n return this;\n }\n\n /**\n *\n *\n * @param {*} dataProps\n * @returns\n * @memberof BaseLayer\n */\n dataProps (...dataProps) {\n if (dataProps.length) {\n this._dataProps = dataProps[0];\n return this;\n }\n return this._dataProps;\n }\n\n /**\n *\n *\n * @param {*} data\n * @param {*} id\n * @returns\n * @memberof BaseLayer\n */\n getIdentifiersFromData (data) {\n const schema = this.data().getData().schema;\n const fieldsConfig = this.data().getFieldsConfig();\n const identifiers = [[], []];\n const {\n xFieldType,\n yFieldType,\n xField,\n yField\n } = this.encodingFieldsInf();\n\n const [xMeasure, yMeasure] = [xFieldType, yFieldType].map(type => type === FieldType.MEASURE);\n schema.forEach((d, i) => {\n const name = d.name;\n if (fieldsConfig[name].def.type === FieldType.DIMENSION) {\n identifiers[0].push(name);\n identifiers[1].push(data[i]);\n }\n });\n\n if (xMeasure && yMeasure) {\n const xMeasureIndex = fieldsConfig[xField].index;\n const yMeasureIndex = fieldsConfig[yField].index;\n identifiers[0].push(...[xField, yField]);\n identifiers[1].push(...[data[xMeasureIndex], data[yMeasureIndex]]);\n }\n return identifiers;\n }\n\n getPlotSpan () {\n return {\n x: 0,\n y: 0\n };\n }\n\n getPlotPadding () {\n return {\n x: 0,\n y: 0\n };\n }\n\n /**\n *\n *\n * @param {*} identifiers\n * @returns\n * @memberof BaseLayer\n */\n getPointsFromIdentifiers (identifiers, config = {}) {\n const getAllAttrs = config.getAllAttrs;\n const getBBox = config.getBBox;\n if (!this.data()) {\n return [];\n }\n let fieldNames;\n let values;\n if (identifiers instanceof DataModel) {\n const dataObj = identifiers.getData();\n fieldNames = dataObj.schema.map(d => d.name);\n values = dataObj.data;\n } else {\n fieldNames = identifiers[0];\n values = identifiers.slice(1, identifiers.length);\n }\n\n const points = this._points;\n const fieldsConfig = this.data().getFieldsConfig();\n\n const filteredPoints = [].concat(...points).filter((point) => {\n const { _data, _id } = point;\n\n return fieldNames.every((field, idx) => {\n if (field in fieldsConfig && fieldsConfig[field].def.type === FieldType.DIMENSION) {\n return values.findIndex(d => d[idx] === _data[fieldsConfig[field].index]) !== -1;\n } else if (field === ReservedFields.ROW_ID) {\n return values.findIndex(d => d[idx] === _id) !== -1;\n } return true;\n });\n });\n return getAllAttrs ? filteredPoints : filteredPoints.map((d) => {\n const obj = clone(d);\n if (getBBox) {\n const update = obj.update || obj;\n if (obj.size !== undefined) {\n const sizeVal = Math.sqrt(obj.size / Math.PI) * 2;\n update.width = sizeVal;\n update.height = sizeVal;\n update.x -= sizeVal / 2;\n update.y -= sizeVal / 2;\n } else {\n if (update.width === undefined) {\n update.width = 2;\n }\n if (update.height === undefined) {\n update.height = 2;\n }\n }\n }\n\n return obj.update || obj;\n }).sort((a, b) => a.y - b.y);\n }\n\n getTransformedDataFromIdentifiers (identifiers) {\n const { data: identifierData, schema: identifierSchema } = identifiers.getData();\n const normalizedData = this.store().get(PROPS.NORMALIZED_DATA);\n const fieldsConfig = this.data().getFieldsConfig();\n const {\n yField,\n xField,\n yFieldType,\n xFieldType\n } = this.encodingFieldsInf();\n let measureIndex;\n let enc;\n if (xFieldType === FieldType.MEASURE) {\n measureIndex = fieldsConfig[xField].index;\n enc = 'x';\n } else if (yFieldType === FieldType.MEASURE) {\n measureIndex = fieldsConfig[yField].index;\n enc = 'y';\n }\n\n const transformedData = [];\n normalizedData.forEach((dataArr) => {\n dataArr.forEach((dataObj) => {\n const tupleArr = dataObj._data;\n const exist = identifierSchema.every((obj, i) =>\n identifierData.findIndex(d => tupleArr[fieldsConfig[obj.name].index] === d[i]) !== -1);\n if (exist) {\n const transformedVal = dataObj[enc];\n const row = dataObj._data;\n const tuple = {};\n for (const key in fieldsConfig) {\n const index = fieldsConfig[key].index;\n tuple[key] = row[index];\n if (index === measureIndex) {\n tuple[key] = transformedVal;\n }\n }\n transformedData.push(tuple);\n }\n });\n });\n\n return [transformedData, this.data().getData().schema];\n }\n\n /**\n *\n *\n * @param {*} set\n * @returns\n * @memberof BaseLayer\n */\n getPlotElementsFromSet (set) {\n return selectElement(this.mount()).selectAll(this.elemType()).filter(data =>\n (data ? set.indexOf(data._id) !== -1 : false));\n }\n}\n","import {\n selectElement,\n makeElement,\n pathInterpolators,\n Symbols\n} from 'muze-utils';\nimport { updateStyle } from '../../helpers';\n\nconst line = Symbols.line;\n\n/**\n * Draws a line from the points\n * Generates a svg path string\n * @param {Object} params Contains container, points and interpolate attribute.\n */\nexport const drawLine = (context) => {\n let filteredPoints;\n const { container, points, interpolate, connectNullData, className, style, transition } = context;\n const mount = selectElement(container).attr('class', className);\n const curveInterpolatorFn = pathInterpolators[interpolate];\n const linepath = line()\n .curve(curveInterpolatorFn)\n .x(d => d.update.x)\n .y(d => d.update.y)\n .defined(d => d.update.y !== null);\n\n filteredPoints = points;\n if (connectNullData) {\n filteredPoints = points.filter(d => d.update.y !== null);\n }\n\n updateStyle(mount, style);\n let element = makeElement(mount, 'path', [1]);\n element.classed(points[0].className, true);\n if (!transition.disabled) {\n element = element.transition().duration(transition.duration);\n }\n element.attr('d', linepath(filteredPoints))\n .style('fill-opacity', 0);\n return element;\n};\n","import { CLASSPREFIX } from '../../enums/constants';\n\nexport const defaultConfig = {\n classPrefix: CLASSPREFIX,\n defClassName: 'layer-line',\n className: '',\n interpolate: 'linear',\n transform: {\n type: 'group'\n },\n interaction: {\n highlight: [{\n type: 'stroke',\n intensity: [0, 0, -15, 0]\n }],\n fade: [{\n type: 'stroke',\n intensity: [0, 0, +15, 0]\n }],\n focus: [{\n type: 'stroke',\n intensity: [0, 0, +15, 0]\n }]\n },\n nearestPointThreshold: 20,\n encoding: {\n color: {},\n x: {},\n y: {},\n strokeOpacity: {\n value: 1\n }\n },\n transition: {\n effect: 'cubic',\n duration: 1000\n },\n connectNullData: false\n};\n\n","import {\n Voronoi,\n getQualifiedClassName,\n selectElement,\n makeElement,\n FieldType,\n getObjProp\n} from 'muze-utils';\nimport { BaseLayer } from '../../base-layer';\nimport { drawLine } from './renderer';\nimport { defaultConfig } from './default-config';\nimport { ENCODING } from '../../enums/constants';\nimport * as PROPS from '../../enums/props';\nimport {\n attachDataToVoronoi,\n animateGroup,\n getLayerColor,\n positionPoints,\n getIndividualClassName\n} from '../../helpers';\n\nimport './styles.scss';\n\n/**\n * Line Layer creates a line plot.\n * Example :-\n * const config = {\n * encoding = {\n * x: {\n * field: 'date'\n * },\n * y: {\n * field: 'sales'\n * }\n * }\n * };\n * const linelayer = layerFactory.getLayer('line', [dataModel, axes, config]);\n * linelayer.render(container);\n * @class\n */\nexport default class LineLayer extends BaseLayer {\n\n /**\n *Creates an instance of LineLayer.\n * @param {*} args\n * @memberof LineLayer\n */\n constructor (...args) {\n super(...args);\n this._voronoi = new Voronoi();\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof LineLayer\n */\n static formalName () {\n return 'line';\n }\n\n /**\n *\n *\n * @returns\n * @memberof LineLayer\n */\n elemType () {\n return 'path';\n }\n\n /**\n * Default configuration of line layer\n * @return {Object} Default configuration of layer\n */\n static defaultConfig () {\n return defaultConfig;\n }\n\n /**\n *\n *\n * @static\n * @param {*} conf\n * @param {*} userConf\n * @returns\n * @memberof LineLayer\n */\n static defaultPolicy (conf, userConf) {\n const config = BaseLayer.defaultPolicy(conf, userConf);\n const encoding = config.encoding;\n const transform = config.transform;\n const colorField = encoding.color && encoding.color.field;\n\n if (colorField && !transform.groupBy) {\n transform.groupBy = colorField;\n }\n return config;\n }\n\n /**\n * Returns the draw method for line\n * @return {Function} Draw method of line layer\n */\n getDrawFn () {\n return drawLine;\n }\n\n /**\n * Applies selection styles to the elements that fall within the selection set.\n * @param {Array} selectionSet Array of tuple ids.\n * @param {Object} config Configuration for selection.\n * @return {BarLayer} Instance of bar layer.\n */\n highlightPoint () {\n return this;\n }\n\n /**\n * Removes selection styles to the elements that fall within the selection set.\n * @param {Array} selectionSet Array of tuple ids.\n * @param {Object} config Configuration for selection.\n * @return {BarLayer} Instance of bar layer.\n */\n dehighlightPoint () {\n return this;\n }\n\n focusSelection () {\n return this;\n }\n\n focusOutSelection () {\n return this;\n }\n\n fadeOutSelection () {\n return this;\n }\n\n unfadeSelection () {\n return this;\n }\n\n shouldDrawAnchors () {\n return true;\n }\n\n /**\n * Generates the x and y positions for each point\n * @param {Array} data Data Array\n * @param {Object} encoding Visual Encodings of the layer\n * @param {Object} axes Contains the axis\n * @param {number} seriesIndex index of series\n * @return {Array} Array of points\n */\n translatePoints (data, encodingFieldsInf, axes) {\n let points = [];\n const xAxis = axes.x;\n const yAxis = axes.y;\n const colorAxis = axes.color;\n const encoding = this.config().encoding;\n const { xFieldType, yFieldType } = encodingFieldsInf;\n const isXDim = xFieldType === FieldType.DIMENSION;\n const isYDim = yFieldType === FieldType.DIMENSION;\n const key = isXDim ? ENCODING.X : (isYDim ? ENCODING.Y : null);\n const colorEncoding = encoding.color;\n const colorField = colorEncoding.field;\n const fieldsConfig = this.data().getFieldsConfig();\n const colorFieldIndex = colorField && fieldsConfig[colorField].index;\n const style = {};\n const meta = {};\n\n points = data.map((d, i) => {\n const xPx = xAxis.getScaleValue(d.x) + xAxis.getUnitWidth() / 2;\n const yPx = yAxis.getScaleValue(d.y);\n const { color, rawColor } = getLayerColor({ datum: d, index: i }, {\n colorEncoding, colorAxis, colorFieldIndex });\n\n style.stroke = color;\n style['fill-opacity'] = 0;\n meta.stateColor = {};\n meta.originalColor = rawColor;\n meta.colorTransform = {};\n\n const point = {\n enter: {},\n update: {\n x: xPx,\n y: d.y === null ? null : yPx\n },\n style,\n _data: d._data,\n _id: d._id,\n rowId: d._id,\n source: d._data,\n meta\n };\n point.className = getIndividualClassName(d, i, data, this);\n this.cachePoint(d[key], point);\n return point;\n });\n points = positionPoints(this, points);\n return points;\n }\n\n /**\n * Renders the line plot\n * @param {SVGElement} container svg element\n * @return {LineLayer} instance of line layer\n */\n render (container) {\n let points;\n let seriesClassName;\n let style;\n\n const config = this.config();\n const {\n encoding,\n interpolate,\n className,\n defClassName,\n transition\n } = config;\n const store = this._store;\n const normalizedData = store.get(PROPS.NORMALIZED_DATA);\n const transformedData = store.get(PROPS.TRANSFORMED_DATA);\n const fieldsConfig = this.data().getFieldsConfig();\n const axes = this.axes();\n const keys = transformedData.map(d => d.key);\n const qualifiedClassName = getQualifiedClassName(defClassName, this.id(), config.classPrefix);\n const containerSelection = selectElement(container);\n const colorField = encoding.color.field;\n const colorFieldIndex = fieldsConfig[colorField] && fieldsConfig[colorField].index;\n\n this._points = [];\n this._pointMap = {};\n containerSelection.classed(qualifiedClassName.join(' '), true);\n containerSelection.classed(className, true);\n makeElement(container, 'g', normalizedData, null, {\n enter: (group) => {\n animateGroup(group, {\n transition,\n groupAnimateStyle: {\n enter: {\n 'stroke-opacity': 0,\n 'fill-opacity': this.getPathStyle()['fill-opacity']\n },\n update: {\n 'stroke-opacity': encoding.strokeOpacity.value\n }\n }\n });\n },\n update: (group, dataArr, i) => {\n points = this.translatePoints(dataArr, this.encodingFieldsInf(), axes, i);\n this._points.push(points);\n seriesClassName = `${qualifiedClassName[0]}-${keys[i] || i}`.toLowerCase();\n\n let color;\n const colorValFn = encoding.color.value;\n const colorVal = points.find(d => d._data[colorFieldIndex] !== null &&\n d._data[colorFieldIndex] !== undefined);\n\n if (colorValFn) {\n color = colorValFn(dataArr, i, normalizedData);\n } else {\n color = axes.color.getColor(colorVal && colorVal._data[colorFieldIndex]);\n }\n\n style = this.getPathStyle(color);\n this.getDrawFn()({\n container: group.node(),\n interpolate,\n points,\n className: seriesClassName,\n transition,\n style: style || {},\n connectNullData: config.connectNullData\n });\n }\n }, d => d[0]._data[colorFieldIndex] || d[0]._id);\n\n attachDataToVoronoi(this._voronoi, this._points);\n return this;\n }\n\n /**\n * Get the css styles need to be applied on the line path\n * @param {string} color Color value\n * @return {Object} Path styles\n */\n getPathStyle (color) {\n return {\n stroke: color,\n 'fill-opacity': '0'\n };\n }\n\n /**\n * Gets the nearest point closest to the given position\n * @param {number} x x position\n * @param {number} y y position\n * @return {Object} Nearest point information\n */\n getNearestPoint (x, y, config) {\n let searchRadius = config.searchRadius;\n const data = this.data();\n\n if (!data || (data && data.isEmpty())) {\n return null;\n }\n\n searchRadius = searchRadius !== undefined ? searchRadius : this.config().nearestPointThreshold;\n const point = this._voronoi.find(x, y, searchRadius);\n const dimensions = getObjProp(point, 'data', 'data', 'update');\n\n if (point) {\n const { _data, _id } = point.data.data;\n const identifiers = this.getIdentifiersFromData(_data, _id);\n return {\n id: identifiers,\n dimensions: [{\n x: dimensions.x,\n y: dimensions.y,\n width: 2,\n height: 2\n }],\n layerId: this.id()\n };\n }\n return null;\n }\n}\n","import {\n easeFns,\n selectElement,\n pathInterpolators,\n Symbols\n} from 'muze-utils';\n\nconst area = Symbols.area;\n/**\n * Draws a line from the points\n * Generates a svg path string\n * @param {Object} params Contains container, points and interpolate attribute.\n */\nconst /* istanbul ignore next */ drawArea = (params) => {\n let filteredPoints;\n const { container, points, style, transition, className, connectNullData, interpolate } = params;\n\n const { effect: easeEffect, duration } = transition;\n const mount = selectElement(container);\n const curveInterpolatorFn = pathInterpolators[interpolate];\n const selection = mount.selectAll('path').data([params.points]);\n const [enterAreaPath, updateAreaPath] = ['enter', 'update'].map(e => area().curve(curveInterpolatorFn)\n .x(d => d[e].x)\n .y1(d => d[e].y)\n .y0(d => d[e].y0)\n .defined(d => d[e].y !== null\n ));\n\n filteredPoints = points;\n mount.attr('class', className);\n if (connectNullData) {\n filteredPoints = points.filter(d => d.update.y !== null);\n }\n const selectionEnter = selection.enter().append('path').attr('d', enterAreaPath(filteredPoints));\n selection.merge(selectionEnter).transition().ease(easeFns[easeEffect])\n .duration(duration)\n .attr('d', updateAreaPath(filteredPoints))\n .each(function (d) {\n const element = selectElement(this);\n\n element.classed(d[0].className, true);\n Object.keys(style).forEach(key => element.style(key, style[key]));\n });\n};\n\nexport default drawArea;\n","import { FieldType } from 'muze-utils';\nimport { defaultConfig } from './default-config';\nimport { LineLayer } from '../line';\nimport drawArea from './renderer';\nimport './styles.scss';\nimport { STACK, ENCODING } from '../../enums/constants';\nimport { getAxesScales, positionPoints, getLayerColor, getIndividualClassName } from '../../helpers';\n\n/**\n * Area Layer creates a area plot.\n * @example\n * const config = {\n * encoding = {\n * x: {\n * field: 'date'\n * },\n * // Top y value\n * y: {\n * field: 'maxTemp'\n * },\n * // Base y value\n * y0: {\n * field: 'minTemp\n * }\n * }\n * };\n * const areaLayer = layerFactory.getLayer('area', [dataModel, axes, config]);\n * areaLayer.render(container);\n * @class\n */\nexport default class AreaLayer extends LineLayer {\n /** oation of line layer\n * @return {Object} Default configuration of layer\n */\n static defaultConfig () {\n return defaultConfig;\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof AreaLayer\n */\n static formalName () {\n return 'area';\n }\n\n /**\n * Calculates the domain from data. It calls its parent class's method which is line layer\n * to get the domain and overwrites the domain according to its need.\n * @return {Array} Domain values\n */\n calculateDomainFromData (data, encodingFieldsInf, fieldsConfig) {\n const domains = super.calculateDomainFromData(data, fieldsConfig);\n [ENCODING.X, ENCODING.Y].forEach((type) => {\n const { [`${type}FieldType`]: fieldType } = encodingFieldsInf;\n if (fieldType === FieldType.MEASURE) {\n domains[type][0] = Math.min(domains[type][0], 0);\n }\n });\n return domains;\n }\n\n /**\n * Returns the drawing method of this layer\n * @return {Function} Draw method\n */\n getDrawFn () {\n return drawArea;\n }\n\n /**\n * Generates the x and y positions for each point\n * @param {Array} data Data Array\n * @param {Object} encoding Visual Encodings of the layer\n * @param {Object} axes Contains the axis\n * @return {Array} Array of points\n */\n translatePoints (data, encodingFieldsInf, axes) {\n let points = [];\n const transformType = this.transformType();\n const colorAxis = axes.color;\n const config = this.config();\n const encoding = config.encoding;\n const colorEncoding = encoding.color;\n const colorField = colorEncoding.field;\n const fieldsConfig = this.data().getFieldsConfig();\n const colorFieldIndex = colorField && fieldsConfig[colorField].index;\n const { xField, yField, y0Field } = encodingFieldsInf;\n const {\n xAxis,\n yAxis\n } = getAxesScales(axes);\n const classNameFn = config.individualClassName;\n const isXDim = fieldsConfig[xField] && fieldsConfig[xField].def.type === FieldType.DIMENSION;\n const isYDim = fieldsConfig[yField] && fieldsConfig[yField].def.type === FieldType.DIMENSION;\n const key = isXDim ? 'x' : (isYDim ? 'y' : null);\n points = data.map((d, i) => {\n const xPx = xAxis.getScaleValue(d.x) + xAxis.getUnitWidth() / 2;\n const yPx = yAxis.getScaleValue(d.y);\n const y0Px = (y0Field || transformType === STACK) ? yAxis.getScaleValue(d.y0) : yAxis.getScaleValue(0);\n const { color, rawColor } = getLayerColor({ datum: d, index: i }, {\n colorEncoding, colorAxis, colorFieldIndex });\n const style = {};\n const meta = {};\n style.fill = color;\n // style['fill-opacity'] = 0;\n meta.stateColor = {};\n meta.originalColor = rawColor;\n meta.colorTransform = {};\n const point = {\n enter: {\n x: xPx,\n y: d.y === null ? d.y : yAxis.getScaleValue(0),\n y0: d.y0 === null ? d.y0 : yAxis.getScaleValue(0)\n },\n update: {\n x: xPx,\n y: d.y === null ? d.y : yPx,\n y0: d.y0 === null ? d.y0 : y0Px\n },\n _id: d._id,\n _data: d._data,\n source: d._data,\n rowId: d._id,\n className: classNameFn ? classNameFn(d, i, data, this) : '',\n style,\n meta\n };\n point.className = getIndividualClassName(d, i, data, this);\n this.cachePoint(d[key], point);\n return point;\n });\n points = positionPoints(this, points);\n return points;\n }\n\n /**\n * Get the css styles need to be applied on the line path\n * @param {string} color Color value\n * @return {Object} Path styles\n */\n getPathStyle (color) {\n return {\n fill: color\n };\n }\n}\n\n","import { CLASSPREFIX } from '../../enums/constants';\n\nexport const defaultConfig = {\n classPrefix: CLASSPREFIX,\n defClassName: 'layer-arc',\n padding: { top: 1, bottom: 1, left: 1, right: 1 },\n className: '',\n minOuterRadius: 10,\n interaction: {\n highlight: [{\n type: 'fill',\n intensity: [0, 0, -15, 0]\n }],\n fade: [{\n type: 'fill',\n intensity: [0, 0, +15, 0]\n }],\n focus: [{\n type: 'fill',\n intensity: [0, 0, +15, 0]\n }]\n },\n height: 100,\n width: 100,\n sort: '',\n cornerRadius: 0,\n padAngle: 0,\n padRadius: 0,\n startAngle: 0,\n endAngle: 360,\n colors: ['#F44336', 'blue', 'green', 'yellow', 'orange', 'purple'],\n transform: {\n type: 'identity'\n },\n encoding: {\n 'stroke-width': {\n value: '2px'\n },\n 'stroke-linejoin': {\n value: 'round'\n },\n angle: {\n value: '1'\n },\n radius: {\n value: '1'\n },\n opacity: {\n value: '1'\n },\n color: {\n value: '1'\n },\n shape: {\n value: '1'\n },\n size: {\n value: '1'\n }\n },\n innerRadiusFixer: 10,\n transition: {\n effect: 'cubic',\n duration: 500\n },\n states: {\n highlight: {\n className: `${CLASSPREFIX}-layer-arc-highlight`\n },\n fadeout: {\n className: `${CLASSPREFIX}-layer-arc-fadeout`\n },\n selected: {\n className: `${CLASSPREFIX}-layer-arc-selected`\n }\n }\n};\n\n","import {\n makeElement,\n selectElement,\n getQualifiedClassName,\n isSimpleObject,\n getDomainFromData,\n Symbols,\n FieldType,\n ReservedFields\n} from 'muze-utils';\nimport { defaultConfig } from './default-config';\nimport { BaseLayer } from '../../base-layer';\nimport * as PROPS from '../../enums/props';\nimport { ASCENDING, OUTER_RADIUS_VALUE } from '../../enums/constants';\nimport { getIndividualClassName } from '../../helpers';\nimport { getRangeValue, getRadiusRange, tweenPie, tweenExitPie, getFieldIndices, getPreviousPoint } from './arc-helper';\nimport './styles.scss';\n\nconst pie = Symbols.pie;\nconst arc = Symbols.arc;\n\n/**\n * Arc Layer creates a plot with polar coordinates\n * Example :-\n * const config = {\n * height: 100,\n * width: 100,\n * startAngle: 0,\n * endAngle: Math.PI,\n * cornerRadius: 10,\n * minOuterRadius: 10,\n * outerRadius: 10,\n * innerRadius: 5,\n * padAngle: 2,\n * padRadius: 2,\n * colors: []\n * padding: {top: 10, bottom: 10, left: 10, right: 10},\n * encoding = {\n * angle: {\n * field: 'date' //Maps to angle of arc\n * },\n * radius: {\n * field: 'sales' // Maps to radius of arc\n * }\n * }\n * };\n * @class\n */\nexport default class ArcLayer extends BaseLayer {\n\n constructor (data, axes, config, dependencies) {\n super(data, axes, config, dependencies);\n this._prevPieData = {};\n }\n\n /**\n * returns the default configuration of the layer\n *\n * @static\n * @return {Object} Default configuration for arc layer\n * @memberof ArcLayer\n */\n static defaultConfig () {\n return defaultConfig;\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof ArcLayer\n */\n static formalName () {\n return 'arc';\n }\n\n /**\n *\n *\n * @returns\n * @memberof ArcLayer\n */\n elemType () {\n return 'path';\n }\n\n /**\n * Transforms data in the appropriate data structure to be consumed by the layer for rendering\n *\n * @param {Object} data data model associated with the layer\n * @param {Object} config configuration of the layer that contains encoding and other parameters\n * @return {Object} Transformed pie data\n * @memberof ArcLayer\n */\n getTransformedData (dataModel, config) {\n let pieData = [];\n const pieIndex = {};\n const {\n startAngle,\n endAngle,\n encoding,\n sort,\n minOuterRadius\n } = config;\n const prevData = this._store.get(PROPS.TRANSFORMED_DATA) || [];\n const fieldsConfig = this.data().getFieldsConfig();\n const {\n angleIndex,\n sizeIndex,\n radiusIndex,\n colorIndex\n } = getFieldIndices(encoding, fieldsConfig);\n const dataVal = dataModel.getData();\n const data = dataVal.data;\n const uids = dataVal.uids;\n\n this._prevPieData = {};\n\n prevData.forEach((e, index) => {\n this._prevPieData[e.uid] = [e, index];\n pieIndex[e.index] = e;\n });\n // Creating pie data using angle field provided. If the angle field is a dimension,\n // all the angles will be equal(360/number of dimensions)\n\n pieData = pie()\n .startAngle((startAngle / 180) * Math.PI)\n .endAngle(Math.PI * endAngle / 180)\n .value(d => d[angleIndex] || 1)\n .sortValues(null);\n\n sort.length && radiusIndex && pieData.sort((a, b) => {\n if (sort === ASCENDING) {\n return a[radiusIndex] - b[radiusIndex];\n } return b[radiusIndex] - a[radiusIndex];\n });\n const sizeVal = data.reduce((acc, d) => acc + (d[sizeIndex] || 0), 1);\n\n // Adding the radius field values to each data point in pie data\n pieData = pieData(data).map((d, i) => {\n d.outerRadiusValue = data[i][radiusIndex] || minOuterRadius;\n d.innerRadius = config.innerRadius;\n d.colorVal = data[i][colorIndex];\n d.angleVal = data[i][angleIndex];\n d.sizeVal = sizeVal;\n d.uid = uids[i];\n d.rowId = d.uid;\n d.source = data[i];\n d._previousInfo = this._prevPieData[d.uid] ? this._prevPieData[d.uid][0] :\n getPreviousPoint(pieIndex, d.index, config);\n return d;\n });\n return pieData;\n }\n\n /**\n * Returns normalized data after transformation (it is the same in the case of pie layer)\n *\n * @param {Object} data transformed data\n * @return {Object} normalized data\n * @memberof ArcLayer\n */\n getNormalizedData (data) {\n return data;\n }\n\n /**\n *\n *\n * @param {Object} data\n * @return {}\n * @memberof ArcLayer\n */\n calculateDomainFromData (data) {\n const domainKey = OUTER_RADIUS_VALUE;\n return {\n radius: getDomainFromData([data], [domainKey, domainKey])\n };\n }\n\n /**\n *\n *\n * @param {Object} x\n * @param {Object} y\n * @return {}\n * @memberof ArcLayer\n */\n getNearestPoint (x, y, config = {}) {\n const dataPoint = selectElement(config.event.target).data()[0];\n if (isSimpleObject(dataPoint)) {\n const { data, uid } = dataPoint.datum;\n return {\n id: this.getIdentifiersFromData(data, uid),\n layerId: this.id()\n };\n }\n return null;\n }\n\n /**\n *\n *\n * @param {*} set\n * @returns\n * @memberof ArcLayer\n */\n getPlotElementsFromSet (set) {\n return selectElement(this.mount()).selectAll(this.elemType()).filter(d => set.indexOf(d.datum.uid) !== -1);\n }\n\n /**\n *\n *\n * @param {Object} container\n * @return {}\n * @memberof ArcLayer\n */\n render (container) {\n const {\n height,\n width\n } = this.measurement();\n const {\n classPrefix,\n defClassName,\n minOuterRadius,\n innerRadius,\n outerRadius,\n cornerRadius,\n padAngle,\n padRadius,\n padding,\n transition,\n innerRadiusFixer\n } = this.config();\n const sizeAxis = this.axes().size;\n const store = this._store;\n const transformedData = store.get(PROPS.TRANSFORMED_DATA);\n const chartHeight = height - padding.top - padding.bottom;\n const chartWidth = width - padding.left - padding.right;\n const qualClassName = getQualifiedClassName(defClassName, this.id(), classPrefix);\n // Sets range for radius\n const range = getRadiusRange(chartWidth, chartHeight, {\n minOuterRadius,\n innerRadius,\n outerRadius,\n innerRadiusFixer\n });\n const colorAxis = this.axes().color;\n const defaultRadius = outerRadius || Math.min(chartHeight, chartWidth) / 2;\n const radiusDomain = store.get(PROPS.DOMAIN).radius;\n const rangeValueGetter = d => getRangeValue(d, range, radiusDomain, defaultRadius, sizeAxis);\n // This returns a function that generates the arc path based on the datum provided\n const path = arc()\n // .outerRadius(d => rangeValueGetter(d))\n .innerRadius(innerRadius ? Math.min(chartHeight / 2, chartWidth / 2, innerRadius) : 0)\n .cornerRadius(cornerRadius)\n .padAngle(padAngle)\n .padRadius(padRadius);\n this._chartWidth = chartWidth;\n this._chartHeight = chartHeight;\n // Creating the group that holds all the arcs\n const g = makeElement(selectElement(container), 'g', [1], `${qualClassName[0]}-group`)\n .classed(`${qualClassName[1]}-group`, true)\n .attr('transform', `translate(${chartWidth / 2},${chartHeight / 2})`);\n const tween = (elem) => {\n makeElement(elem, 'path', (d, i) => [{\n datum: d,\n index: i,\n arcFn: path,\n meta: {\n originalColor: colorAxis.getRawColor(d.colorVal),\n stateColor: {},\n colorTransform: {}\n }\n }], `${qualClassName[0]}-path`)\n .style('fill', d => colorAxis.getColor(d.datum.colorVal))\n .transition()\n .duration(transition.duration)\n .attrTween('d', (...params) => tweenPie(path, rangeValueGetter, params))\n .attr('class', (d, i) => {\n const individualClass = getIndividualClassName(d, i, transformedData, this);\n return `${qualClassName[0]}-path ${qualClassName[1]}-path-${d.index}\n ${individualClass}`;\n });\n };\n const consecutiveExits = [];\n let exitCounter = 0;\n const tweenExit = (elem, d) => {\n let exitArr = consecutiveExits[exitCounter];\n const oldExitCounter = exitCounter;\n if (!exitArr) {\n exitArr = [{ elem, datum: d }];\n } else if (exitArr[exitArr.length - 1].datum.index === d.index - 1) {\n exitArr.push({ elem, datum: d });\n } else {\n exitCounter++;\n }\n consecutiveExits[oldExitCounter] = exitArr;\n };\n // Creating groups for all the arcs present individually\n makeElement(g, 'g', transformedData, `${qualClassName[0]}`,\n {\n update: tween,\n exit: tweenExit\n })\n .attr('class', (d, i) => `${qualClassName[0]} ${qualClassName[1]}-${i}`);\n tweenExitPie(consecutiveExits, transition, rangeValueGetter, path);\n return this;\n }\n\n /**\n *\n *\n * @param {*} identifiers\n * @returns\n * @memberof BaseLayer\n */\n getPointsFromIdentifiers (identifiers) {\n if (!this.data()) {\n return [];\n }\n const fieldNames = identifiers[0];\n const values = identifiers.slice(1, identifiers.length);\n const pieSlices = selectElement(this.mount()).selectAll('path').data();\n const fieldsConfig = this.data().getFieldsConfig();\n\n const filteredPies = pieSlices.filter((tData) => {\n const data = tData.datum.data;\n const uid = tData.datum.uid;\n return fieldNames.every((field, idx) => {\n if (field in fieldsConfig && fieldsConfig[field].def.type === FieldType.DIMENSION) {\n return values.findIndex(d => d[idx] === data[fieldsConfig[field].index]) !== -1;\n } else if (field === ReservedFields.ROW_ID) {\n return values.findIndex(d => d[idx] === uid) !== -1;\n } return true;\n });\n });\n\n const pieSliceInf = filteredPies[0];\n if (pieSliceInf) {\n const centroid = pieSliceInf.arcFn.centroid(pieSliceInf.datum);\n return [{\n x: centroid[0] + this._chartWidth / 2,\n y: centroid[1] + this._chartHeight / 2,\n width: 2,\n height: 2\n }];\n }\n return [];\n }\n}\n\n","import { getObjProp, interpolator, FieldType, selectElement } from 'muze-utils';\nimport { ANGLE, RADIUS, SIZE, COLOR } from '../../enums/constants';\n\n/**\n * Returns the range value from a value inside the domain\n *\n * @param {Object} domainValue Value whose range has to be returned\n * @return {number} range value\n * @memberof ArcLayer\n */\nexport const getRangeValue = (datum, range, domain, defaultRadius, sizeAxis) => {\n let domainMultiplier = 1;\n const {\n outerRadiusValue,\n sizeVal\n } = datum;\n const sizeAxisDomain = sizeAxis.domain();\n const sizeMultiplier = sizeAxis.getSize(sizeVal) / (sizeAxisDomain ? sizeAxis.range()[1] : sizeAxis.config().value);\n\n domainMultiplier *= (range[1] - range[0]) / (domain[1] - domain[0]);\n const rangeVal = (range[0] + (outerRadiusValue - domain[0]) * domainMultiplier);\n return (rangeVal || defaultRadius) * sizeMultiplier;\n};\n\n/**\n *\n *\n * @memberof ArcLayer\n */\nexport const getRadiusRange = (width, height, config) => {\n const {\n minOuterRadius,\n innerRadius,\n outerRadius,\n innerRadiusFixer\n } = config;\n\n return [Math.max((innerRadius + innerRadiusFixer || 0), minOuterRadius), outerRadius || Math.min(height,\n width) / 2];\n};\nexport const getPreviousPoint = (prevData, currIndex, config) => {\n const prevArc = prevData[currIndex - 1];\n const nextArc = prevData[currIndex];\n\n if (prevArc && nextArc) {\n return {\n startAngle: prevArc.endAngle,\n endAngle: nextArc.startAngle\n };\n } else if (!nextArc) {\n return {\n startAngle: config.endAngle * Math.PI * 2 / 360,\n endAngle: config.endAngle * Math.PI * 2 / 360\n };\n }\n return {\n startAngle: config.startAngle * Math.PI * 2 / 360,\n endAngle: config.startAngle * Math.PI * 2 / 360\n };\n};\n\n/**\n *\n *\n * @param {*} path\n * @param {*} b\n * @returns\n * @memberof ArcLayer\n */\nexport const tweenPie = (path, rangeValueGetter, b) => {\n const { datum } = b[0];\n const outerRadius = rangeValueGetter(datum);\n datum.outerRadius = outerRadius;\n datum._previousInfo.outerRadius = datum._previousInfo.outerRadius || outerRadius;\n return function (t) {\n return path(interpolator()(datum._previousInfo, datum)(t));\n };\n};\n\n/**\n *\n *\n * @param {*} path\n * @param {*} b\n * @returns\n * @memberof ArcLayer\n */\nexport const tweenExitPie = (consecutiveExits, transition, rangeValueGetter, path) => {\n if (consecutiveExits.length > 0) {\n consecutiveExits.forEach((consecutiveExitArr) => {\n const startAngle = consecutiveExitArr[0].datum.startAngle;\n const endAngle = consecutiveExitArr[consecutiveExitArr.length - 1].datum.endAngle;\n const mid = (Math.PI * 2 * startAngle) / ((Math.PI * 2) + startAngle - endAngle);\n\n consecutiveExitArr.forEach((e) => {\n const { elem, datum } = e;\n\n elem.each(function () {\n const gElem = selectElement(this);\n gElem.selectAll('path')\n .transition()\n .duration(transition.duration)\n .attrTween('d', () => function (t) {\n const outerRadius = rangeValueGetter(datum);\n datum.outerRadius = outerRadius;\n return path(interpolator()(datum, {\n startAngle: mid,\n endAngle: mid,\n outerRadius\n })(t));\n })\n .remove();\n gElem.remove();\n });\n });\n });\n }\n};\n\nexport const getFieldIndices = (encoding, fieldsConfig) => {\n const [angleField, radiusField, colorField, sizeField] = [ANGLE, RADIUS, COLOR, SIZE]\n .map(e => encoding[e].field);\n const [angleIndex, sizeIndex, radiusIndex] = [angleField, sizeField, radiusField]\n .map((e) => {\n const conf = fieldsConfig[e];\n if (conf && conf.def.type === FieldType.MEASURE) {\n return conf.index;\n }\n return null;\n });\n const colorIndex = getObjProp(fieldsConfig, colorField, 'index');\n return {\n angleIndex,\n sizeIndex,\n radiusIndex,\n colorIndex\n };\n};\n","import {\n setAttrs,\n setStyles,\n selectElement,\n makeElement,\n getSmartComputedStyle\n} from 'muze-utils';\n\n/**\n * Draws svg text in the specified container.\n * @param {SVGElement} container Container where labels will be appended.\n * @param {Array.} data Data of the elements.\n * @return {Selection} d3 selection of the elements.\n */\nconst drawText = (container, data, config, smartLabel) => {\n const selection = selectElement(container).selectAll('g').data(data);\n\n const selectionMerge = selection.enter().append('g')\n .each(function (dataObj) {\n setAttrs(this, dataObj.enter);\n })\n .merge(selection);\n const style = getSmartComputedStyle(selectElement(container), config.className);\n const fontSize = parseInt(style.fontSize, 10);\n\n smartLabel.setStyle(style);\n selectionMerge.each(function (dataObj) {\n const element = selectElement(this);\n const { update, text, color, textanchor, style: textStyle } = dataObj;\n const background = dataObj.background;\n let backgroundVal;\n if (backgroundVal = background.value) {\n const backgroundPadding = background.padding;\n let diff;\n const { width, height } = smartLabel.getOriSize(dataObj.text);\n const backgroundEl = makeElement(element, 'rect', [1]);\n\n if (textanchor === 'end') {\n diff = width;\n } else if (textanchor === 'start') {\n diff = 0;\n } else {\n diff = width / 2;\n }\n\n setAttrs(backgroundEl.node(), {\n x: update.x - diff - backgroundPadding / 2,\n y: update.y - fontSize - backgroundPadding / 2,\n width: width + backgroundPadding,\n height: height + backgroundPadding\n });\n background && setStyles(backgroundEl, {\n background: backgroundVal\n });\n }\n const textEl = makeElement(element, 'text', d => [d]).text(text);\n const textNode = textEl.node();\n textStyle && setStyles(textNode, textStyle);\n color && setStyles(textNode, {\n fill: color\n });\n dataObj.className && textEl.classed(dataObj.className, true);\n setAttrs(textNode, update);\n textEl.attr('text-anchor', textanchor);\n });\n selection.exit().remove();\n return selection;\n};\n\nexport default drawText;\n","import { CLASSPREFIX } from '../../enums/constants';\n\nexport const defaultConfig = {\n defClassName: 'layer-text',\n classPrefix: CLASSPREFIX,\n className: '',\n transform: {\n type: 'identity'\n },\n interaction: {\n highlight: [{\n type: 'fill',\n intensity: [0, 0, -15, 0]\n }],\n fade: [{\n type: 'fill',\n intensity: [0, 0, +15, 0]\n }],\n focus: [{\n type: 'fill',\n intensity: [0, 0, +15, 0]\n }]\n },\n transition: {\n effect: 'cubic',\n duration: 1000\n },\n encoding: {\n color: {},\n text: {\n value: '',\n background: {\n padding: 10\n }\n }\n },\n states: {\n highlight: {\n className: `${CLASSPREFIX}-layer-text-highlight`\n },\n fadeout: {\n className: `${CLASSPREFIX}-layer-text-fadeout`\n },\n selected: {\n className: `${CLASSPREFIX}-layer-text-selected`\n }\n }\n};\n","import {\n getQualifiedClassName,\n selectElement,\n setStyles,\n createElements\n} from 'muze-utils';\nimport { BaseLayer } from '../../base-layer';\nimport drawText from './renderer';\nimport { defaultConfig } from './default-config';\nimport { getLayerColor, positionPoints, getIndividualClassName } from '../../helpers';\nimport { TEXT_ANCHOR_MIDDLE, ENCODING } from '../../enums/constants';\nimport * as PROPS from '../../enums/props';\n\nimport './styles.scss';\n\n/**\n * Text Layer creates labels. It needs to be passed a data table, axes and configuration\n * of the layer.\n * Example :-\n * const textLayer = layerFactory.getLayer('text', [dataModel, axes, config]);\n * textLayer.render(container);\n * @class\n */\nexport default class TextLayer extends BaseLayer {\n /**\n * Returns the default configuration of the text layer\n * @return {Object} Default configuration of the text layer\n */\n static defaultConfig () {\n return defaultConfig;\n }\n\n static formalName () {\n return 'text';\n }\n\n elemType () {\n return 'text';\n }\n\n /**\n * Generates an array of objects containing x, y, width and height of the points from the data\n * @param {Array.} data Data Array\n * @param {Object} encoding Config\n * @param {Object} axes Axes object\n * @return {Array.} Array of points\n */\n translatePoints (data, encoding, axes) {\n let points = [];\n const colorAxis = axes.color;\n const textEncoding = encoding.text;\n const { field: textField, value, formatter: textFormatter } = textEncoding;\n const colorEncoding = encoding.color;\n const colorField = colorEncoding && colorEncoding.field;\n const fieldsConfig = this.data().getFieldsConfig();\n\n const backgroundEncoding = encoding.text.background;\n const backgroundPadding = backgroundEncoding.padding;\n const backgroundValue = backgroundEncoding.value;\n const colorFieldIndex = fieldsConfig[colorField] ? fieldsConfig[colorField].index : -1;\n const textFieldIndex = textField ? fieldsConfig[textField] && fieldsConfig[textField].index : -1;\n const xEnc = ENCODING.X;\n const yEnc = ENCODING.Y;\n for (let i = 0, len = data.length; i < len; i++) {\n const d = data[i];\n const row = d._data;\n const textValue = textField ? row[textFieldIndex] : value;\n\n const [xPx, yPx] = [xEnc, yEnc].map(type => (axes[type] ? axes[type].getScaleValue(d[type]) +\n axes[type].getUnitWidth() / 2 : 0));\n\n const { color, rawColor } = getLayerColor({ datum: d, index: i },\n { colorEncoding, colorAxis, colorFieldIndex });\n\n const point = {\n enter: {},\n update: {\n x: xPx,\n y: yPx\n },\n text: textFormatter ? textFormatter(textValue) : textValue,\n color,\n background: {\n value: backgroundValue instanceof Function ? backgroundValue(d, i, data, this) : null,\n padding: backgroundPadding\n },\n meta: {\n stateColor: {},\n originalColor: rawColor,\n colorTransform: {}\n },\n style: {},\n _data: row,\n _id: d._id,\n source: d._data,\n rowId: d._id\n };\n\n if (d.x !== null && d.y !== null) {\n points.push(point);\n }\n\n point.className = getIndividualClassName(d, i, data, this);\n }\n\n points = positionPoints(this, points);\n\n return points;\n }\n\n /**\n * Renders the plot in the given container\n * @param {SVGElement} container SVGElement which will hold the plot\n * @return {textLayer} Instance of text layer\n */\n render (container) {\n let points;\n const config = this.config();\n const encoding = config.encoding;\n const normalizedData = this._store.get(PROPS.NORMALIZED_DATA);\n const className = config.className;\n const qualifiedClassName = getQualifiedClassName(config.defClassName, this.id(), config.classPrefix);\n const axes = this.axes();\n const containerSelection = selectElement(container);\n\n containerSelection.classed(`${qualifiedClassName.join(' ')} ${className}`, true);\n createElements({\n data: normalizedData,\n append: 'g',\n selector: 'g',\n container,\n each: (dataArr, group, i) => {\n const node = group.node();\n points = this.translatePoints(dataArr, encoding, axes, i);\n setStyles(node, {\n 'text-anchor': TEXT_ANCHOR_MIDDLE\n });\n drawText(node, points, {\n className: qualifiedClassName[0]\n }, this._dependencies.smartLabel);\n }\n });\n return this;\n }\n}\n","/* global Element, document */\nimport {\n makeElement,\n selectElement,\n easeFns,\n objectIterator,\n getSymbol\n} from 'muze-utils';\n\n/**\n *\n *\n * @param {*} str\n * @returns\n */\nconst checkPath = (str) => {\n if (/^[mzlhvcsqta]\\s*[-+.0-9][^mlhvzcsqta]+/i.test(str) && /[\\dz]$/i.test(str) && str.length > 4) {\n return true;\n }\n return false;\n};\n\n/**\n *\n *\n * @param {*} d\n * @param {*} elem\n */\nconst createShape = function (d, elem) {\n const groupElement = selectElement(elem);\n const { shape, size, update } = d;\n\n if (shape instanceof Promise) {\n shape.then((res) => {\n d.shape = res;\n createShape(d, elem);\n });\n } else if (shape instanceof Element) {\n let newShape = shape.cloneNode(true);\n\n if (newShape.nodeName.toLowerCase() === 'img') {\n const src = newShape.src || newShape.href;\n newShape = document.createElementNS('http://www.w3.org/2000/svg', 'image');\n newShape.setAttribute('href', src);\n }\n const shapeElement = selectElement(newShape);\n if (newShape.nodeName === 'path' || newShape.nodeName === 'image') {\n shapeElement.attr('transform', `scale(${size / 100})`);\n } else {\n shapeElement.attr('height', size);\n shapeElement.attr('width', size);\n }\n shapeElement.attr('x', -size / 2);\n shapeElement.attr('y', -size / 2);\n selectElement(groupElement.node().appendChild(newShape));\n } else if (typeof shape === 'string') {\n let pathStr;\n if (checkPath(shape)) {\n pathStr = shape;\n } else {\n pathStr = getSymbol(shape).size(size)(update);\n }\n makeElement(groupElement, 'path', data => [data]).attr('d', pathStr);\n } else {\n d.shape = 'circle';\n createShape(d, elem);\n }\n};\n\n/**\n * Draws symbols using d3 symbol api\n * @param {Object} params Contains the svg container, points and other symbol related attributes.\n */\n/* istanbul ignore next */ const drawSymbols = (params) => {\n let mergedGroups;\n const { container, points, transition, className } = params;\n const { duration, effect, disabled } = transition;\n const mount = selectElement(container);\n\n mount.attr('class', className);\n const symbolGroups = mount.selectAll('g').data(points, params.keyFn);\n const symbolEnter = symbolGroups.enter().append('g').attr('transform', d => `translate(${d.enter.x},${d.enter.y})`);\n mergedGroups = symbolGroups.merge(symbolEnter)\n .each(function (d) {\n createShape(d, this);\n });\n mergedGroups = disabled ? mergedGroups : mergedGroups.transition().duration(disabled ? 0 : transition.duration);\n mergedGroups.attr('transform', d => `translate(${d.update.x},${d.update.y})`)\n .each(function (d) {\n const style = d.style;\n const element = selectElement(this);\n objectIterator(style, key => element.style(key, style[key]));\n element.attr('class', `${className}`);\n element.classed(d.className, true);\n });\n\n const exitGroups = symbolGroups.exit();\n if (!disabled) {\n exitGroups.transition().ease(easeFns[effect])\n .duration(duration)\n .on('end', function () {\n selectElement(this).remove();\n })\n .style('fill-opacity', 0)\n .style('stroke-opacity', 0);\n } else {\n exitGroups.remove();\n }\n};\n\nexport default drawSymbols;\n","import { CLASSPREFIX } from '../../enums/constants';\n\nexport const defaultConfig = {\n defClassName: 'layer-point',\n className: '',\n classPrefix: CLASSPREFIX,\n defColorStyle: 'stroke',\n interaction: {\n highlight: [{\n type: 'fill',\n intensity: [0, 0, -20, 0]\n }],\n fade: [{\n type: 'fill',\n intensity: [0, 0, +20, 0]\n }],\n focus: [{\n type: 'fill',\n intensity: [0, 0, +20, 0]\n }\n ]\n },\n innerPadding: 0.1,\n nearestPointThreshold: 10,\n transform: {\n type: 'identity'\n },\n transition: {\n effect: 'cubic',\n duration: 1000\n },\n encoding: {\n size: {\n value: 30\n },\n color: { },\n shape: {\n value: 'circle'\n },\n x: {},\n y: {},\n strokeOpacity: {\n value: 0.5\n },\n fillOpacity: {\n value: 0.5\n }\n },\n shapes: ['circle', 'cross', 'diamond', 'square', 'star', 'wye', 'triangle'],\n sizes: [20, 30, 40, 50, 60, 70]\n};\n","import {\n Voronoi,\n selectElement,\n getQualifiedClassName,\n makeElement,\n FieldType,\n Scales\n} from 'muze-utils';\nimport { BaseLayer } from '../../base-layer';\nimport drawSymbols from './renderer';\nimport { defaultConfig } from './default-config';\nimport { ENCODING } from '../../enums/constants';\nimport * as PROPS from '../../enums/props';\nimport {\n attachDataToVoronoi,\n getLayerColor,\n positionPoints,\n getPlotMeasurement,\n getIndividualClassName\n} from '../../helpers';\n\nimport './styles.scss';\n\n/**\n * Point Layer creates point. Itt needs to be passed a data table, axes and configuration\n * of the layer.\n * Example :-\n * const pointLayer = layerFactory.getLayer('point', [data, axes, config]);\n * pointLayer.render(container);\n * @class\n */\nexport default class PointLayer extends BaseLayer {\n\n /**\n * Creates an instance of PointLayer.\n * @param {*} args\n * @memberof PointLayer\n */\n constructor (...args) {\n super(...args);\n this._voronoi = new Voronoi();\n this._bandScale = Scales.band();\n }\n\n /**\n *\n *\n * @returns\n * @memberof PointLayer\n */\n elemType () {\n return 'g';\n }\n\n /**\n * Returns the default configuration of the point layer\n * @return {Object} Default configuration of the point layer\n */\n static defaultConfig () {\n return defaultConfig;\n }\n\n static defaultPolicy (conf, userConf) {\n const config = BaseLayer.defaultPolicy(conf, userConf);\n const encoding = config.encoding;\n const transform = config.transform;\n const colorField = encoding.color && encoding.color.field;\n\n if (colorField) {\n transform.groupBy = colorField;\n }\n return config;\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof PointLayer\n */\n static formalName () {\n return 'point';\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof PointLayer\n */\n static drawFn () {\n return drawSymbols;\n }\n\n /**\n * Generates an array of objects containing x, y, width and height of the points from the data\n * @param {Array.} data Data Array\n * @param {Object} encoding Config\n * @param {Object} axes Axes object\n * @return {Array.} Array of points\n */\n translatePoints (data, encoding, axes, config = {}) {\n let points = [];\n const {\n size: sizeEncoding,\n shape: shapeEncoding,\n color: colorEncoding,\n x,\n y\n } = encoding;\n const sizeField = sizeEncoding.field;\n const sizeValue = sizeEncoding.value;\n const shapeField = shapeEncoding.field;\n const xField = x.field;\n const yField = y.field;\n const { size: sizeAxis, shape: shapeAxis } = axes;\n const fieldsConfig = this.data().getFieldsConfig();\n const isXDim = fieldsConfig[xField] && fieldsConfig[xField].def.type === FieldType.DIMENSION;\n const isYDim = fieldsConfig[yField] && fieldsConfig[yField].def.type === FieldType.DIMENSION;\n const key = isXDim ? ENCODING.X : (isYDim ? ENCODING.Y : null);\n const colorField = colorEncoding && colorEncoding.field;\n const colorFieldIndex = fieldsConfig[colorField] && fieldsConfig[colorField].index;\n const measurement = this._store.get(PROPS.MEASUREMENT);\n const shapeFieldIndex = fieldsConfig[shapeField] && fieldsConfig[shapeField].index;\n const sizeFieldIndex = fieldsConfig[sizeField] && fieldsConfig[sizeField].index;\n const colorAxis = axes.color;\n const { x: offsetX, y: offsetY } = config.offset;\n\n for (let i = 0, len = data.length; i < len; i++) {\n const d = data[i];\n const row = d._data;\n const size = sizeValue instanceof Function ? sizeValue(d, i) : sizeAxis.getSize(row[sizeFieldIndex]);\n const shape = shapeAxis.getShape(row[shapeFieldIndex]);\n\n let [xPx, yPx] = [ENCODING.X, ENCODING.Y].map((type) => {\n const value = d[type] === null ? undefined : d[type];\n const measure = type === ENCODING.X ? measurement.width : measurement.height;\n return !encoding[type].field ? measure / 2 : axes[type].getScaleValue(value);\n });\n\n xPx += offsetX;\n yPx += offsetY;\n\n const { color, rawColor } = getLayerColor({ datum: d, index: i },\n { colorEncoding, colorAxis, colorFieldIndex });\n\n const style = {\n fill: color,\n stroke: color\n };\n\n if (!isNaN(xPx) && !isNaN(yPx)) {\n const point = {\n enter: {\n x: xPx,\n y: yPx\n },\n update: {\n x: xPx,\n y: yPx\n },\n shape,\n size: Math.abs(size),\n meta: {\n stateColor: {},\n originalColor: rawColor,\n colorTransform: {}\n },\n style,\n _data: row,\n _id: d._id,\n source: d._data,\n rowId: d._id\n };\n point.className = getIndividualClassName(d, i, data, this);\n points.push(point);\n this.cachePoint(d[key], point);\n }\n }\n points = positionPoints(this, points);\n return points;\n }\n\n /**\n * Renders the plot in the given container.\n *\n * @param {SVGElement} container SVGElement which will hold the plot\n * @return {BarLayer} Instance of bar layer\n */\n render (container) {\n let maxSize = 0;\n let seriesClassName;\n const config = this.config();\n const keys = this._store.get(PROPS.TRANSFORMED_DATA).map(d => d.key);\n const { transition, className, defClassName, classPrefix } = config;\n const normalizedData = this._store.get(PROPS.NORMALIZED_DATA);\n const containerSelection = selectElement(container);\n const qualifiedClassName = getQualifiedClassName(defClassName, this.id(), classPrefix);\n this._points = [];\n this._pointMap = {};\n\n containerSelection.classed(qualifiedClassName.join(' '), true).classed(className, true);\n\n this._points = this.generateDataPoints(normalizedData, keys);\n\n makeElement(container, 'g', this._points, null, {\n update: (group, points) => {\n maxSize = Math.max(maxSize, ...points.map(d => d.size));\n seriesClassName = `${qualifiedClassName[0]}`;\n this.constructor.drawFn()({\n container: group.node(),\n points,\n className: seriesClassName,\n transition,\n keyFn: d => d._id\n });\n }\n }, data => data[0]._id);\n this._maxSize = Math.sqrt(maxSize / Math.PI) * 2;\n attachDataToVoronoi(this._voronoi, this._points);\n return this;\n }\n\n generateDataPoints (normalizedData, keys) {\n const encoding = this.config().encoding;\n const axes = this.axes();\n const [widthMetrics, heightMetrics] = getPlotMeasurement(this, keys);\n const offsetXValues = widthMetrics.offsetValues || [];\n const offsetYValues = heightMetrics.offsetValues || [];\n return normalizedData.map((dataArr, i) => {\n const measurementConf = this.getMeasurementConfig(offsetXValues[i], offsetYValues[i], widthMetrics.span,\n heightMetrics.span);\n return this.translatePoints(dataArr, encoding, axes, measurementConf);\n }).filter(d => d.length);\n }\n\n getMeasurementConfig (offsetX, offsetY, widthSpan, heightSpan) {\n return {\n offset: {\n x: (offsetX || 0) + widthSpan / 2,\n y: (offsetY || 0) + heightSpan / 2\n },\n span: {\n x: widthSpan,\n y: heightSpan\n }\n };\n }\n\n /**\n * Gets the nearest point from a position.\n * @param {number} x x position\n * @param {number} y y position\n * @return {Object} Point details\n */\n getNearestPoint (x, y) {\n const distanceLimit = Math.max(this._maxSize, this.config().nearestPointThreshold);\n\n if (!this.data()) {\n return null;\n }\n\n const point = this._voronoi.find(x, y, distanceLimit);\n const dimensions = point && point.data.data.update;\n const radius = point ? Math.sqrt(point.data.data.size / Math.PI) : 0;\n\n if (point) {\n const { _data, _id } = point.data.data;\n const identifiers = this.getIdentifiersFromData(_data, _id);\n return {\n id: identifiers,\n dimensions: [{\n x: dimensions.x,\n y: dimensions.y,\n width: radius,\n height: radius\n }],\n layerId: this.id()\n };\n }\n return null;\n }\n}\n","import { makeElement, easeFns } from 'muze-utils';\n\n/**\n *\n *\n * @param {*} elem\n * @param {*} datum\n * @param {*} index\n * @param {*} context\n */\nconst transitionBars = (elem, datum, index, context) => {\n const { transition } = context;\n const { duration, disabled, effect } = transition;\n const selection = elem;\n const selTransition = disabled ? selection : selection.transition().duration(duration).ease(easeFns[effect]);\n const update = datum.update || datum;\n const updateStyle = datum.style || {};\n datum.className && selection.classed(datum.className, true);\n Object.entries(update).forEach(attr => (!isNaN(attr[1]) && selTransition.attr(attr[0], attr[1])));\n Object.entries(updateStyle).forEach(styleObj => selection.style(styleObj[0], styleObj[1]));\n};\n\n/**\n *\n *\n * @param {*} elem\n * @param {*} d\n */\nconst barEnterFn = (elem, d) => {\n const selection = elem;\n const enter = d.enter || {};\n Object.entries(enter).forEach(attr => (!isNaN(attr[1]) && selection.attr(attr[0], attr[1])));\n};\n\n/**\n * Draws rectangles by using d3 selection\n * @param {Object} params Contains container element and points\n * @return {Selection} Bar Selection\n */\n/* istanbul ignore next */ export const drawRects = (params) => {\n const { points, container, keyFn } = params;\n const updateFns = {\n enter (elem, d) { barEnterFn(elem, d); },\n update (elem, d, i) { transitionBars(elem, d, i, params); }\n };\n return makeElement(container, 'rect', points, null, updateFns, keyFn);\n};\n","import { CLASSPREFIX } from '../../enums/constants';\n\nexport const defaultConfig = {\n classPrefix: CLASSPREFIX,\n defClassName: 'layer-bar',\n className: '',\n interaction: {\n highlight: [{\n type: 'fill',\n intensity: [0, 0, -15, 0]\n }],\n fade: [{\n type: 'fill',\n intensity: [0, 0, +15, 0]\n }],\n focus: [{\n type: 'fill',\n intensity: [0, 0, +15, 0]\n }]\n },\n transform: {\n type: 'stack'\n },\n transition: {\n effect: 'cubic',\n duration: 1000\n },\n innerPadding: 0.1,\n encoding: {\n color: {},\n x: {},\n y: {},\n x0: {},\n y0: {}\n },\n states: {\n highlight: {\n className: `${CLASSPREFIX}-layer-bar-highlight`\n },\n fadeout: {\n className: `${CLASSPREFIX}-layer-bar-fadeout`\n },\n selected: {\n className: `${CLASSPREFIX}-layer-bar-selected`\n }\n }\n};\n\n","import { FieldType, DimensionSubtype } from 'muze-utils';\nimport * as PROPS from '../../enums/props';\nimport { STACK } from '../../enums/constants';\nimport { getLayerColor, positionPoints, getIndividualClassName } from '../../helpers';\n\n/**\n *\n *\n * @param {*} type\n * @param {*} fieldInfo\n * @param {*} config\n * @param {*} data\n * @returns\n */\nconst resolveDimByField = (type, axesInfo, config, data) => {\n const spaceType = type === 'x' ? 'width' : 'height';\n const [fieldType, axis] = [config[`${type}FieldType`], axesInfo[`${type}Axis`]];\n const {\n transformType,\n sizeEncoding,\n sizeConfig,\n measurement\n } = config;\n\n const sizeValue = sizeEncoding.value;\n let enter = 0;\n let pos;\n let space = 0;\n let enterSpace = 0;\n if (fieldType !== undefined) {\n if (config[`${type}0Field`]) {\n const minVal = data[type];\n const maxVal = data[`${type}0`];\n let min;\n let max;\n if (minVal === null || maxVal === null) {\n return {\n enterSpace: undefined,\n enter: undefined,\n pos: undefined,\n space: undefined\n };\n } else if (fieldType === FieldType.MEASURE || fieldType === DimensionSubtype.TEMPORAL) {\n min = Math.min(minVal, maxVal);\n max = Math.max(minVal, maxVal);\n } else {\n min = minVal;\n max = maxVal;\n }\n const scales = type === 'x' ? [min, max] : [max, min];\n pos = axis.getScaleValue(scales[0]) + axis.getUnitWidth() / 2;\n space = Math.abs(axis.getScaleValue(scales[1]) - pos) + axis.getUnitWidth() / 2;\n\n enter = pos;\n enterSpace = 0;\n } else if (fieldType === DimensionSubtype.CATEGORICAL || fieldType === DimensionSubtype.TEMPORAL) {\n pos = axis.getScaleValue(data[type]) +\n (sizeConfig[type === 'x' ? 'barWidthOffset' : 'barHeightOffset'] || 0);\n\n space = sizeConfig[type === 'x' ? 'barWidth' : 'barHeight'];\n if (sizeValue !== undefined) {\n const diffPx = sizeValue * space;\n space -= diffPx;\n pos += diffPx / 2;\n }\n enter = pos;\n enterSpace = space;\n } else {\n const zeroPos = axis.getScaleValue(0);\n const axisType = axis.getScaleValue(data[type]);\n const axisType0 = axis.getScaleValue(data[`${type}0`]);\n\n enterSpace = 0;\n if (type === 'x') {\n pos = data[type] < 0 || transformType === STACK ? axisType : zeroPos;\n space = Math.abs(pos - (transformType === STACK ? axisType0 : (data[type] >= 0 ? axisType : zeroPos)));\n } else {\n pos = transformType === STACK || data[type] >= 0 ? axisType : zeroPos;\n space = Math.abs(pos - (transformType === STACK ? axisType0 : (data[type] >= 0 ? zeroPos : axisType)));\n }\n enter = zeroPos;\n }\n } else {\n pos = 0;\n space = measurement[spaceType];\n }\n\n return {\n enterSpace,\n enter,\n pos,\n space\n };\n};\n\n/**\n *\n *\n * @param {*} data\n * @param {*} config\n * @param {*} axes\n * @returns\n */\nconst resolveDimensions = (data, config, axes) => {\n const axesInfo = {\n xAxis: axes.x,\n yAxis: axes.y\n };\n const {\n enterSpace: enterWidth,\n enter: enterX,\n pos: xPos,\n space: width\n } = resolveDimByField('x', axesInfo, config, data);\n\n const {\n enterSpace: enterHeight,\n enter: enterY,\n pos: yPos,\n space: height\n } = resolveDimByField('y', axesInfo, config, data);\n return {\n enter: {\n x: enterX,\n y: enterY,\n width: enterWidth,\n height: enterHeight\n },\n update: {\n x: xPos,\n y: yPos,\n width,\n height\n }\n };\n};\n\n/**\n * Generates an array of objects containing x, y, width and height of the bars from the data\n * @param {Array.} data Data Array\n * @param {Object} encoding Config\n * @param {Object} axes Axes object\n * @param {Object} conf config object for point generation\n * @return {Array.} Array of points\n */\nexport const getTranslatedPoints = (context, data, sizeConfig) => {\n let points = [];\n const encoding = context.config().encoding;\n const axes = context.axes();\n const colorAxis = axes.color;\n const fieldsConfig = context.data().getFieldsConfig();\n const colorEncoding = encoding.color;\n const colorField = colorEncoding.field;\n const sizeEncoding = encoding.size || {};\n const {\n x0Field,\n y0Field,\n xFieldSubType,\n yFieldSubType\n } = context.encodingFieldsInf();\n const measurement = context._store.get(PROPS.MEASUREMENT);\n const isXDim = xFieldSubType === DimensionSubtype.CATEGORICAL || xFieldSubType === DimensionSubtype.TEMPORAL;\n const isYDim = yFieldSubType === DimensionSubtype.CATEGORICAL || yFieldSubType === DimensionSubtype.TEMPORAL;\n const key = isXDim ? 'x' : (isYDim ? 'y' : null);\n const transformType = context.transformType();\n const colorFieldIndex = colorField && fieldsConfig[colorField] && fieldsConfig[colorField].index;\n\n for (let i = 0, len = data.length; i < len; i++) {\n const d = data[i];\n const style = {};\n const meta = {};\n const dimensions = resolveDimensions(d, {\n xFieldType: xFieldSubType,\n yFieldType: yFieldSubType,\n x0Field,\n y0Field,\n transformType,\n measurement,\n sizeConfig,\n sizeEncoding\n }, axes);\n\n const { color, rawColor } = getLayerColor({ datum: d, index: i },\n { colorEncoding, colorAxis, colorFieldIndex });\n\n style.fill = color;\n meta.stateColor = {};\n meta.originalColor = rawColor;\n meta.colorTransform = {};\n\n const update = dimensions.update;\n\n if (!isNaN(update.x) && !isNaN(update.y) && d._id !== undefined) {\n let point = null;\n point = {\n enter: dimensions.enter,\n update,\n style,\n _data: d._data,\n _id: d._id,\n source: d._data,\n rowId: d._id,\n meta\n };\n point.className = getIndividualClassName(d, i, data, context);\n points.push(point);\n // Store each point in a hashmap with key as the dimensional or temporal field value\n context.cachePoint(d[key], point);\n }\n }\n\n points = positionPoints(context, points);\n return points;\n};\n","import {\n getClosestIndexOf,\n getQualifiedClassName,\n selectElement,\n createElements,\n clipElement,\n DimensionSubtype,\n FieldType,\n Scales\n} from 'muze-utils';\nimport { BaseLayer } from '../../base-layer';\nimport { drawRects } from './renderer';\nimport { defaultConfig } from './default-config';\nimport * as PROPS from '../../enums/props';\nimport { getPlotMeasurement } from '../../helpers';\nimport './styles.scss';\nimport { getTranslatedPoints } from './bar-helper';\n\nconst MEASURE = FieldType.MEASURE;\nconst scaleBand = Scales.band;\n\n/**\n * Bar Layer creates a bar plot. It needs to be passed a data table, axes and configuration of the layer.\n *\n * @example\n * const BarLayer = layerFactory.getLayer('bar');\n * BarLayer.create()\n * .config(config)\n * .data(dt)\n * .mountPoint(container);\n * @class\n */\nexport default class BarLayer extends BaseLayer {\n /**\n * Creates an instance of bar layer\n */\n constructor (...params) {\n super(...params);\n this._bandScale = scaleBand();\n this._plotPadding = {\n x: 0,\n y: 0\n };\n this._plotSpan = {\n x: 0,\n y: 0\n };\n this._pointMap = {};\n }\n\n /**\n *\n *\n * @returns\n * @memberof BarLayer\n */\n elemType () {\n return 'rect';\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof BarLayer\n */\n static formalName () {\n return 'bar';\n }\n\n /**\n * Returns the default configuration of the bar layer\n * @return {Object} Default configuration of the bar layer\n */\n static defaultConfig () {\n return defaultConfig;\n }\n\n /**\n *\n *\n * @static\n * @param {*} conf\n * @param {*} userConf\n * @returns\n * @memberof BarLayer\n */\n static defaultPolicy (conf, userConf) {\n const config = BaseLayer.defaultPolicy(conf, userConf);\n const encoding = config.encoding;\n const colorField = encoding.color.field;\n const transform = config.transform;\n\n if (colorField) {\n transform.groupBy = colorField;\n }\n return config;\n }\n\n /**\n *\n *\n * @param {*} data\n * @param {*} fieldsConfig\n * @returns\n * @memberof BarLayer\n */\n calculateDomainFromData (data, encodingFieldInf, fieldsConfig) {\n const domain = super.calculateDomainFromData(data, encodingFieldInf, fieldsConfig);\n ['x', 'y'].forEach((d) => {\n if (encodingFieldInf[`${d}FieldType`] === MEASURE && domain[d]) {\n encodingFieldInf[`${d}0Field}`] ? domain[d] = domain[d].sort((a, b) => a - b) :\n (domain[d][0] = Math.min(domain[d][0], 0));\n }\n });\n return domain;\n }\n\n /**\n * Generates an array of objects containing x, y, width and height of the bars from the data\n * @param {Array.} data Data Array\n * @param {Object} encoding Config\n * @param {Object} axes Axes object\n * @param {Object} conf config object for point generation\n * @return {Array.} Array of points\n */\n translatePoints (data, sizeConfig) {\n return getTranslatedPoints(this, data, sizeConfig);\n }\n\n /**\n * Renders the plot in the given container\n * @param {SVGGroup} container SVGGroup where plot will be rendered.\n * @return {BarLayer} Instance of bar layer.\n */\n render (container) {\n const config = this.config();\n const transition = config.transition;\n const store = this._store;\n const normalizedDataArr = store.get(PROPS.NORMALIZED_DATA);\n const transformedData = store.get(PROPS.TRANSFORMED_DATA);\n const keys = transformedData.map(d => d.key);\n const fieldsConfig = this.data().getFieldsConfig();\n const axes = this.axes();\n const height = axes.y && axes.y.scale().range()[0];\n const width = axes.x && axes.x.scale().range()[1];\n const defClassName = config.defClassName;\n const qualifiedClassName = getQualifiedClassName(defClassName, this.id(), config.classPrefix);\n const className = config.className;\n const containerSelection = selectElement(container);\n const dimensions = Object.values(fieldsConfig).filter(e => e.def.type === FieldType.DIMENSION)\n .map(e => e.index);\n containerSelection.classed(qualifiedClassName.join(' '), true);\n containerSelection.classed(className, true);\n clipElement(container, {\n x: 0,\n y: 0,\n width,\n height\n }, `id-${this.id()}`);\n\n this._points = this.generateDataPoints(normalizedDataArr, keys);\n\n createElements({\n data: this._points,\n container,\n selector: 'g',\n append: 'g',\n each: (points, group, i) => {\n const seriesClassName = `${qualifiedClassName[0]}-${keys[i] || i}`.toLowerCase();\n group.style('display', 'block');\n drawRects({\n container: group.node(),\n points,\n className: seriesClassName,\n transition,\n style: {},\n keyFn: d => dimensions.map(key => d._data[key]).join('-')\n });\n }\n });\n return this;\n }\n\n /**\n *\n *\n * @param {*} normalizedData\n * @param {*} keys\n * @returns\n * @memberof BarLayer\n */\n generateDataPoints (normalizedData, keys) {\n const [barWidthMetrics, barHeightMetrics] = getPlotMeasurement(this, keys);\n const barWidthOffsets = barWidthMetrics.offsetValues || [];\n const barHeightOffsets = barHeightMetrics.offsetValues || [];\n this._plotSpan = {\n x: barWidthMetrics.groupSpan || 0,\n y: barHeightMetrics.groupSpan || 0\n };\n this._plotPadding = {\n x: barWidthMetrics.padding || 0,\n y: barHeightMetrics.padding || 0\n };\n\n this._pointMap = {};\n return normalizedData.map((data, i) => this.translatePoints(data,\n {\n barWidth: barWidthMetrics.span,\n barWidthOffset: barWidthOffsets[i] || 0,\n barHeight: barHeightMetrics.span,\n barHeightOffset: barHeightOffsets[i] || 0\n }));\n }\n\n getPlotPadding () {\n return this._plotPadding;\n }\n\n /**\n * Gets the nearest point of the position passed.\n * @param {number} x x position\n * @param {number} y y position\n * @return {Object} Nearest point.\n */\n getNearestPoint (x, y) {\n if (!this.data()) {\n return null;\n }\n let axis;\n let value;\n let index;\n let points;\n let uniqueFieldType;\n let uniqueFieldIndex;\n let filterData;\n let identifiers;\n let pointFound = null;\n const dataModel = this.data();\n const dataObj = dataModel.getData();\n const fieldsConfig = dataModel.getFieldsConfig();\n const axes = this.axes();\n const data = dataObj.data;\n const pointMap = this._pointMap;\n const {\n xField,\n yField,\n xFieldSubType,\n yFieldSubType\n } = this.encodingFieldsInf();\n\n if (xFieldSubType === FieldType.MEASURE) {\n axis = axes.y;\n value = axis.invert(y);\n uniqueFieldIndex = fieldsConfig[yField].index;\n uniqueFieldType = yFieldSubType;\n } else {\n axis = axes.x;\n value = axis.invert(x);\n uniqueFieldIndex = fieldsConfig[xField].index;\n uniqueFieldType = xFieldSubType;\n }\n\n if (uniqueFieldType === DimensionSubtype.CATEGORICAL) {\n points = pointMap[value];\n }\n\n if (uniqueFieldType === DimensionSubtype.TEMPORAL) {\n filterData = [...new Set(data.map(d => d[uniqueFieldIndex]))];\n index = getClosestIndexOf(filterData, value);\n value = filterData[index];\n points = pointMap[value];\n }\n const len = points && points.length;\n points && points.sort((p1, p2) => p1.update.y - p2.update.y);\n for (let i = 0; i < len; i++) {\n const point = points[i];\n const update = point.update;\n if (x >= update.x && x <= (update.width + update.x) && y >= update.y && y <= (update.height + update.y)) {\n pointFound = point;\n break;\n }\n pointFound = null;\n }\n\n const values = pointFound && pointFound._data;\n if (values) {\n identifiers = this.getIdentifiersFromData(values, pointFound._id);\n }\n return pointFound ? {\n dimensions: [pointFound.update],\n id: identifiers,\n layerId: this.id()\n } : pointFound;\n }\n\n getPlotSpan () {\n return this._plotSpan;\n }\n}\n","import { CLASSPREFIX } from '../../enums/constants';\n\nexport const defaultConfig = {\n defClassName: 'layer-tick',\n className: '',\n classPrefix: CLASSPREFIX,\n interaction: {\n highlight: [{\n type: 'stroke',\n intensity: [0, 0, -15, 0]\n }],\n fade: [{\n type: 'stroke',\n intensity: [0, 0, 15, 0]\n }],\n focus: [{\n type: 'stroke',\n intensity: [0, 0, 15, 0]\n }]\n },\n innerPadding: 0.1,\n transform: {\n type: 'identity'\n },\n transition: {\n effect: 'cubic',\n duration: 1000\n },\n encoding: {\n color: { },\n x: {},\n y: {},\n x0: {},\n y0: {},\n strokeOpacity: {\n value: 0.5\n },\n fillOpacity: {\n value: 0.5\n }\n },\n states: {\n highlight: {\n className: `${CLASSPREFIX}-layer-tick-highlight`\n },\n fadeout: {\n className: `${CLASSPREFIX}-layer-tick-fadeout`\n },\n selected: {\n className: `${CLASSPREFIX}-layer-tick-selected`\n }\n }\n};\n","import { selectElement } from 'muze-utils';\n\n/**\n * Draws ticks by using d3 selection\n * @param {Object} params Contains container element and points\n * @return {Selection} Ticks Selection\n */\nexport default /* istanbul ignore next */ (params) => {\n const { points, container, keyFn, className } = params;\n const mount = selectElement(container);\n const ticks = mount.selectAll('path').data(points, keyFn);\n const ticksEnter = ticks.enter().append('path');\n\n mount.attr('class', className || '');\n ticksEnter.each(function (d) {\n const selection = selectElement(this);\n const enter = d.enter || {};\n Object.entries(enter).forEach(attr => (!isNaN(attr[1]) && selection.attr(attr[0], attr[1])));\n });\n\n ticks.exit().remove();\n return ticks.merge(ticksEnter)\n .each(function (d) {\n const selection = selectElement(this);\n const update = d.update;\n const updateStyle = d.style || {};\n const x0 = update.x0 !== undefined ? update.x0 : update.x;\n const y0 = update.y0 !== undefined ? update.y0 : update.y;\n const path = `M ${update.x} ${update.y} L ${x0} ${y0}`;\n d.className && selection.classed(d.className, true);\n selection.attr('d', path);\n Object.entries(updateStyle).forEach(styleObj => selection.style(styleObj[0], styleObj[1]));\n });\n};\n\n","import { FieldType } from 'muze-utils';\nimport { PointLayer } from '../point';\nimport { defaultConfig } from './default-config';\nimport * as PROPS from '../../enums/props';\nimport { ENCODING } from '../../enums/constants';\nimport drawTicks from './renderer';\nimport './styles.scss';\nimport { getAxesScales, getLayerColor, positionPoints, getIndividualClassName } from '../../helpers';\n\nexport default class TickLayer extends PointLayer {\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof TickLayer\n */\n static defaultConfig () {\n return defaultConfig;\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof TickLayer\n */\n static formalName () {\n return 'tick';\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof TickLayer\n */\n static drawFn () {\n return drawTicks;\n }\n\n /**\n *\n *\n * @returns\n * @memberof TickLayer\n */\n elemType () {\n return 'path';\n }\n\n /**\n * Generates an array of objects containing x, y, width and height of the points from the data\n * @param {Array.} data Data Array\n * @param {Object} encoding Config\n * @param {Object} axes Axes object\n * @return {Array.} Array of points\n */\n translatePoints (data, encoding, axes, config = {}) {\n let points = [];\n const {\n xAxis,\n yAxis\n } = getAxesScales(axes);\n const fieldsConfig = this.data().getFieldsConfig();\n const {\n xField,\n yField,\n x0Field,\n y0Field,\n xFieldType,\n yFieldType\n } = this.encodingFieldsInf();\n const isXDim = xFieldType === FieldType.DIMENSION;\n const isYDim = yFieldType === FieldType.DIMENSION;\n const key = isXDim ? ENCODING.X : (isYDim ? ENCODING.Y : null);\n const colorEncoding = encoding.color;\n const colorField = colorEncoding && colorEncoding.field;\n const colorFieldIndex = fieldsConfig[colorField] && fieldsConfig[colorField].index;\n const measurement = this._store.get(PROPS.MEASUREMENT);\n const colorAxis = axes.color;\n const { x: offsetX, y: offsetY } = config.offset;\n const { x: xSpan, y: ySpan } = config.span;\n for (let i = 0, len = data.length; i < len; i++) {\n let xPx;\n let x0Px;\n let y0Px;\n let yPx;\n const d = data[i];\n const row = d._data;\n if (xField) {\n xPx = xAxis.getScaleValue(d.x) + offsetX;\n x0Px = xPx + xSpan;\n }\n\n if (yField) {\n yPx = yAxis.getScaleValue(d.y) + offsetY;\n y0Px = yPx !== null ? yPx + ySpan : null;\n }\n\n if (!xField) {\n xPx = 0;\n x0Px = measurement.width;\n if (!isNaN(yPx)) {\n yPx += ySpan / 2;\n y0Px = yPx;\n }\n }\n\n if (!yField) {\n yPx = 0;\n y0Px = measurement.height;\n x0Px = xPx += xSpan / 2;\n }\n\n if (x0Field) {\n x0Px = xAxis.getScaleValue(d.x0) + xSpan;\n yPx += ySpan / 2;\n y0Px -= ySpan / 2;\n }\n\n if (y0Field) {\n y0Px = yAxis.getScaleValue(d.y0) + ySpan;\n xPx += xSpan / 2;\n x0Px -= xSpan / 2;\n }\n const style = {};\n const meta = {};\n const { color, rawColor } = getLayerColor({ datum: d, index: i },\n { colorEncoding, colorAxis, colorFieldIndex });\n\n style.stroke = color;\n meta.stateColor = {};\n meta.originalColor = rawColor;\n meta.colorTransform = {};\n if (!isNaN(xPx) && !isNaN(yPx)) {\n const point = {\n enter: {},\n update: {\n x: xPx,\n y: yPx,\n x0: x0Px,\n y0: y0Px\n },\n style,\n _data: row,\n _id: d._id,\n source: row,\n rowId: d._id,\n meta\n };\n point.className = getIndividualClassName(d, i, data, this);\n points.push(point);\n this.cachePoint(d[key], point);\n }\n }\n points = positionPoints(this, points);\n return points;\n }\n\n getMeasurementConfig (offsetX, offsetY, widthSpan, heightSpan) {\n return {\n offset: {\n x: (offsetX || 0),\n y: (offsetY || 0)\n },\n span: {\n x: widthSpan,\n y: heightSpan\n }\n };\n }\n}\n","import { isSimpleObject, mergeRecursive, getObjProp } from 'muze-utils';\n\nconst parseLayerDefinition = (sink, definition, layerDef, layerType) => {\n for (const key in definition) {\n if (Object.hasOwnProperty.call(definition, key)) {\n let strs;\n let propValue;\n const def = definition[key];\n if (isSimpleObject(def)) {\n sink[key] = {};\n parseLayerDefinition(sink[key], def, layerDef, layerType);\n } else if (typeof def === 'string' && (strs = def.split('.')) && strs[0] === layerType) {\n propValue = getObjProp(layerDef, ...strs.slice(1, strs.length));\n if (propValue !== undefined) {\n sink[key] = propValue;\n }\n } else {\n sink[key] = def;\n }\n }\n }\n};\n\nconst sanitizeEncoding = (encoding) => {\n // Create object for each encoding value if encoding value is a string\n for (const key in encoding) {\n if (typeof encoding[key] === 'string') {\n encoding[key] = {\n field: encoding[key]\n };\n }\n }\n};\n\n/**\n * Layer Factory creates layers based on the layer type. All types of layers needs to register in\n * the layer factory. For getting a layer instance, getLayer method needs to invoked with the\n * layerType and other arguments.\n */\nconst layerFactory = (() => {\n const compositeLayers = {};\n const factoryObj = {\n setLayerRegistry: (reg) => {\n factoryObj._layerRegistry = reg;\n },\n getSerializedConf: (mark, layerDef) => {\n let serializedDefs;\n const defs = compositeLayers[mark];\n const newConf = mergeRecursive({}, layerDef);\n\n // If it is a composite layer then resolve all the definitions of each unit layer\n if (defs) {\n serializedDefs = defs.map((unitLayerDef) => {\n const sDef = {};\n parseLayerDefinition(sDef, unitLayerDef, newConf, mark);\n sanitizeEncoding(sDef.encoding);\n return sDef;\n });\n } else {\n const encoding = newConf.encoding;\n // Create object for each encoding value if encoding value is a string\n sanitizeEncoding(encoding);\n serializedDefs = newConf;\n }\n\n return serializedDefs;\n },\n getLayerInstance: (layerDef) => {\n const layerRegistry = factoryObj._layerRegistry;\n layerDef = !(layerDef instanceof Array) ? [layerDef] : layerDef;\n const instances = layerDef.map((layerObj) => {\n const layerConstructor = layerRegistry[layerObj.mark];\n return layerConstructor.create();\n });\n return instances.length === 1 ? instances[0] : instances;\n },\n composeLayers: (layerType, layerDefs) => {\n compositeLayers[layerType] = layerDefs;\n },\n sanitizeLayerConfig: (layerDef) => {\n const newConf = mergeRecursive({}, layerDef);\n sanitizeEncoding(newConf.encoding);\n return newConf;\n }\n };\n return factoryObj;\n})();\n\nexport default layerFactory;\n","import { AreaLayer } from './layers/area';\nimport { ArcLayer } from './layers/arc';\nimport { LineLayer } from './layers/line';\nimport { TextLayer } from './layers/text';\nimport { PointLayer } from './layers/point';\nimport { BarLayer } from './layers/bar';\nimport { BaseLayer } from './base-layer';\nimport * as CONSTANTS from './enums/constants';\nimport { TickLayer } from './layers/tick';\n\nexport const DEFAULT_LAYERS = {\n [CONSTANTS.AREA_LAYER]: AreaLayer,\n [CONSTANTS.ARC_LAYER]: ArcLayer,\n [CONSTANTS.LINE_LAYER]: LineLayer,\n [CONSTANTS.TEXT_LAYER]: TextLayer,\n [CONSTANTS.POINT_LAYER]: PointLayer,\n [CONSTANTS.TICK_LAYER]: TickLayer,\n [CONSTANTS.BAR_LAYER]: BarLayer,\n [CONSTANTS.BASE_LAYER]: BaseLayer\n};\n","/**\n * This file exports constants that are used as enums in the\n * crosstab group implementation.\n */\n/**\n * Width of the crosstab.\n */\nexport const X = 'x';\n/**\n * Width of the crosstab.\n */\nexport const Y = 'y';\n/**\n * Width of the crosstab.\n */\nexport const WIDTH = 'width';\n\n/**\n * Height of the crosstab.\n */\nexport const HEIGHT = 'height';\n\n/**\n * Field referring to object storing measurement configuration.\n */\nexport const MEASUREMENT = 'measurement';\n\n/**\n * Field referring to object storing configuration properties.\n */\nexport const CONFIG = 'config';\n\n/**\n * Width of visual unit in crosstab.\n */\nexport const MIN_UNIT_WIDTH = 'minUnitWidth';\n\n/**\n * Height of visual unit.\n */\nexport const MIN_UNIT_HEIGHT = 'minUnitHeight';\n\n/**\n * Field to store the array of dimensions to facet by.\n */\nexport const DIMENSIONS = 'dimensions';\n\n/**\n * Field to store array of measures to use as x axis.\n */\nexport const MEASURES = 'measures';\n\n/**\n * Field to store the array of dimensions to facet by.\n */\nexport const DIMENSION = 'dimension';\n\n/**\n * Field to store array of measures to use as x axis.\n */\nexport const MEASURE = 'measure';\n\n/**\n * Flag to specify if model should be pivoted.\n */\nexport const PIVOT = 'pivot';\n\n/**\n * Flag to specify format\n */\nexport const FORMAT = 'format';\n\n/**\n * Mount point where the variable will be hosted\n */\nexport const MOUNT = 'mount';\n\n/**\n * Data update flag\n */\nexport const HAS_DATA_UPDATED = 'hasDataUpdated';\n\n/**\n * Field referring to object storing set of rows\n */\nexport const ROWS = 'rows';\n\n/**\n * Field referring to object storing set of columns\n */\nexport const COLUMNS = 'columns';\n\n/**\n * Field referring to object storing set of columns\n */\nexport const COL = 'col';\n\n/**\n * Field referring to object storing set of rows\n */\nexport const ROW = 'row';\n\n/**\n * Field referring to object storing set of columns\n */\nexport const COLUMN = 'column';\n\n/**\n * Field referring to object storing color field\n */\nexport const COLOR = 'color';\n\n/**\n * Field referring to object storing shape field\n */\nexport const SHAPE = 'shape';\n\n/**\n * Field referring to object storing size field\n */\nexport const SIZE = 'size';\n\n/**\n * Field referring to object storing detail field\n */\nexport const DETAIL = 'detail';\n\n/**\n * Field referring to object storing set of layers\n */\nexport const LAYERS = 'layers';\n\n/**\n * Field referring to object storing the transforms\n */\nexport const TRANSFORM = 'transform';\n\n/**\n * Field referring to object storing the transforms\n */\nexport const ORDINAL = 'ordinal';\n\n/**\n * Field referring to object storing the transforms\n */\nexport const LINEAR = 'linear';\n/**\n * Field referring to object storing the transforms\n */\nexport const LEFT = 'left';\n/**\n * Field referring to object storing the transforms\n */\nexport const RIGHT = 'right';\n/**\n * Field referring to object storing the transforms\n */\nexport const TOP = 'top';\n/**\n * Field referring to object storing the transforms\n */\nexport const BOTTOM = 'bottom';\n\n/**\n * Field referring to object storing the transforms\n */\nexport const RETINAL = 'retinal';\n/**\n * Field referring to object storing the transforms\n */\nexport const CELL = 'cell';\n/**\n * Field referring to object storing the transforms\n */\nexport const X_AXES = 'xAxes';\n/**\n * Field referring to object storing the transforms\n */\nexport const Y_AXES = 'yAxes';\n/**\n * Field referring to object storing the transforms\n */\nexport const ENTRY_CELLS = 'entryCell';\n/**\n * Field referring to object storing the transforms\n */\nexport const INITIALIZED = 'initialized';\n/**\n * Field referring to object storing the transforms\n */\nexport const EXIT_CELLS = 'exitCell';\n/**\n * Field referring to object storing the transforms\n */\nexport const AXIS = 'axis';\n/**\n * Field referring to object storing the transforms\n */\nexport const UNIT = 'unit';\n/**\n * Field referring to object storing the transforms\n */\nexport const UPDATED = 'updated';\n/**\n * Field referring to object storing the transforms\n */\nexport const BEFORE_UPDATE = 'beforeupdate';\n/**\n * Field referring to object storing the transforms\n */\nexport const VALUE_MATRIX = 'valueMatrix';\n/**\n * Field referring to object storing the transforms\n */\nexport const FACET_HEADERS = 'facet-headers';\n/**\n * Field referring to object storing the transforms\n */\nexport const RADIUS = 'radius';\n/**\n * Field referring to object storing the transforms\n */\nexport const ANGLE = 'angle';\n/**\n * Field referring to object storing the transforms\n */\nexport const ARC = 'arc';\n/**\n * Field referring to object storing the transforms\n */\nexport const CARTESIAN = 'cartesian';\n/**\n * Field referring to object storing the transforms\n */\nexport const POLAR = 'polar';\n/**\n * Field referring to object storing the transforms\n */\nexport const CATEGORICAL = 'categorical';\n/**\n * Field referring to object storing the transforms\n */\nexport const TEMPORAL = 'temporal';\n/**\n * Field referring to object storing the transforms\n */\nexport const BAR = 'bar';\n/**\n * Field referring to object storing the transforms\n */\nexport const LINE = 'line';\n/**\n * Field referring to object storing the transforms\n */\nexport const POINT = 'point';\n/**\n * Field referring to object storing the transforms\n */\nexport const PRIMARY = 'Primary';\n/**\n * Field referring to object storing the transforms\n */\nexport const SECONDARY = 'Secondary';\n/**\n * Field referring to object storing the transforms\n */\nexport const BOTH = 'both';\n/**\n * Field referring to object storing the transforms\n */\nexport const INTERACTION = 'interaction';\n/**\n * Field referring to object storing the transforms\n */\nexport const GRID_LINES = 'gridLines';\n/**\n * Field referring to object storing the transforms\n */\nexport const GRID_BANDS = 'gridBands';\n/**\n * Field referring to object storing the transforms\n */\nexport const HEADER = 'header';\n/**\n * Field referring to object storing the transforms\n */\nexport const FACET = 'facet';\n\n","import { ROWS, COLUMNS, COLOR, SHAPE, SIZE, DETAIL, LAYERS, TRANSFORM, CONFIG } from '../enums/constants';\n\n/**\n * @module\n * This is the local options semantics based on which setters getters are created and reactivity is initiated.\n * This local object is only valid for Artboard.\n * Artboard merges global and local object both to the model\n *\n * Format\n * PROPERTRY_NAME: {\n * value: // default value of the property,\n * meta: {\n * typeCheck: // The setter value will be checked using this. If the value is function then the setter value\n * // is passed as args.\n * typeExpected: // The output of typecheck action will be tested against this. Truthy value will set the\n * // value to the setter\n * sanitizaiton: // Need for sanitization before type is checked\n * }\n * }\n */\n\nexport default {\n [CONFIG]: {},\n [ROWS]: [],\n [COLUMNS]: [],\n [COLOR]: '',\n [SHAPE]: '',\n [SIZE]: '',\n [DETAIL]: '',\n [LAYERS]: '',\n [TRANSFORM]: []\n};\n","import { ERROR_MSG } from 'muze-utils';\n\n/**\n * Interfaces for VisualGroup. Any new VisualGroup has to implement this class.\n * @class SimpleGroup\n */\nclass SimpleGroup {\n\n /**\n * This method is used to set or get the DataModel instance.\n *\n * @param {DataModel | undefined} dataModel Instance of datamodel.\n\n * @memberof SimpleGroup\n */\n data () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * This method is used to set or get the group specific configuration\n * properties\n *\n * @param {Object | undefined} configObj The input configuration.\n * or instance of visual group.\n * @memberof SimpleGroup\n */\n config () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * This method is used to return a serialized representation of the\n * instance's properties.\n *\n * @memberof SimpleGroup\n */\n serialize () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * This method is used to get or set the measurement object which houses\n * layout properties like width and height.\n *\n * @param {Object | undefined} mObj The measurement properties.\n * @memberof SimpleGroup\n */\n measurement () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n}\n\nexport default SimpleGroup;\n","import { ERROR_MSG } from 'muze-utils';\n\n/**\n *\n *\n * @export\n * @class Variable\n */\nexport default class Variable {\n\n /**\n *\n *\n * @memberof Variable\n */\n type () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n *\n *\n * @memberof Variable\n */\n toString () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n}\n","import Variable from './variable';\n\n/**\n *\n *\n * @class ComposeVars\n * @extends {Variable}\n */\nclass ComposedVars extends Variable {\n\n /**\n *Creates an instance of ComposeVars.\n * @param {*} texts\n * @memberof ComposeVars\n */\n constructor (...texts) {\n super(...texts);\n this.vars(texts);\n }\n\n /**\n *\n *\n * @param {*} params\n * @returns\n * @memberof ComposeVars\n */\n vars (...params) {\n if (params.length) {\n this._vars = params[0];\n return this;\n }\n return this._vars;\n }\n\n /**\n *\n *\n * @param {*} dm\n * @returns\n * @memberof ComposeVars\n */\n data (...dm) {\n if (dm.length) {\n this.vars().forEach(d => d.data(dm[0]));\n return this;\n }\n return this._data;\n }\n\n /**\n *\n *\n * @returns\n * @memberof ComposeVars\n */\n getMembers () {\n const vars = this.vars();\n return vars.map(member => member.getMembers()[0]);\n }\n\n /**\n *\n *\n * @returns\n * @memberof ComposeVars\n */\n type () {\n return this.vars()[0].type();\n }\n\n /**\n *\n *\n * @returns\n * @memberof ComposeVars\n */\n toString () {\n return this.vars().map(d => d.toString()).join(',');\n }\n\n /**\n *\n *\n * @returns\n * @memberof ComposeVars\n */\n numberFormat () {\n return this.vars()[0].numberFormat();\n }\n\n /**\n *\n *\n * @returns\n * @memberof ComposeVars\n */\n format (values) {\n return this.vars()[0].format(values);\n }\n\n /**\n *\n *\n * @returns\n * @memberof ComposedVars\n */\n subtype () {\n return this.vars()[0].subtype();\n }\n\n /**\n *\n *\n * @returns\n * @memberof ComposedVars\n */\n getMinDiff () {\n return this.vars()[0].getMinDiff();\n }\n}\n\nexport default ComposedVars;\n","import { DateTimeFormatter } from 'muze-utils';\nimport Variable from './variable';\n\n/**\n *\n *\n * @export\n * @class Vars\n * @extends {Variable}\n */\nexport default class SimpleVariable extends Variable {\n\n /**\n *Creates an instance of Vars.\n * @param {*} text\n * @memberof Vars\n */\n constructor (text) {\n super();\n this.oneVar(text);\n }\n\n /**\n *\n *\n * @param {*} params\n * @returns\n * @memberof Vars\n */\n oneVar (...oneV) {\n if (oneV.length) {\n this._oneVar = oneV[0];\n return this;\n }\n return this._oneVar;\n }\n\n /**\n *\n *\n * @param {*} dm\n * @returns\n * @memberof Vars\n */\n data (...dm) {\n if (dm.length) {\n this._data = dm[0];\n return this;\n }\n return this._data;\n }\n\n /**\n *\n *\n * @returns\n * @memberof Vars\n */\n toString () {\n return this.oneVar();\n }\n\n /**\n *\n *\n * @memberof SimpleVariable\n */\n numberFormat () {\n if (this.type() === 'measure') {\n const formatter = this.data().getFieldspace().getMeasure()[this.oneVar()]._ref;\n return formatter.numberFormat();\n } return val => val;\n }\n\n /**\n *\n *\n * @memberof SimpleVariable\n */\n format (values) {\n if (values && this.subtype() === 'temporal') {\n const formatter = this.data().getFieldspace().getDimension()[this.oneVar()]._ref.schema.format;\n const dtFormat = new DateTimeFormatter(formatter);\n values = values.map(e => dtFormat.getNativeDate(e));\n }\n return values;\n }\n\n /**\n *\n *\n * @returns\n * @memberof Vars\n */\n getMembers () {\n return [this.oneVar()];\n }\n\n /**\n *\n *\n * @returns\n * @memberof Vars\n */\n type () {\n const fieldDef = this.data().getFieldsConfig()[this.oneVar()].def;\n return fieldDef.type;\n }\n\n /**\n *\n *\n * @returns\n * @memberof Vars\n */\n subtype () {\n const fieldDef = this.data().getFieldsConfig()[this.oneVar()].def;\n return fieldDef.subtype || fieldDef.type;\n }\n\n /**\n *\n *\n * @returns\n * @memberof SimpleVariable\n */\n getMinDiff () {\n const fieldSpace = this.data().getFieldspace();\n return fieldSpace.fieldsObj()[this.oneVar()].getMinDiff();\n }\n\n equals (varInst) {\n return this.oneVar() === varInst.oneVar();\n }\n}\n","import { ComposedVars, SimpleVariable } from '../variable';\nimport { DIMENSION, COLUMNS, ROWS, TEMPORAL } from '../enums/constants';\n\n/**\n * Gets the list of fields in a sorted order by measurement and dimension\n *\n * @param {Array} fieldList List of fields in the view\n * @param {Object} fieldMap Mapping of fields in the datamodel\n * @return {Array} fields sorted by measurement and dimensions\n */\nconst orderFields = (fieldArray, type) => {\n const dimensionArr = [[], []];\n const measureArr = [[], []];\n const temporalArr = [[], []];\n const categoricalArr = [[], []];\n\n fieldArray.forEach((fieldList, index) => {\n fieldList.forEach((field) => {\n if (field.type() === DIMENSION) {\n dimensionArr[index].push(field);\n field.subtype() === TEMPORAL ? temporalArr[index].push(field) : categoricalArr[index].push(field);\n } else {\n measureArr[index].push(field);\n }\n });\n });\n\n const numOfMeasures = measureArr[0].length + (measureArr[1] ? measureArr[1].length : 0);\n\n // Single array of fields\n if (!fieldArray[1]) {\n // Push measures to bottom\n measureArr[1] = type === COLUMNS ? measureArr[0] : [];\n // Push measures to left\n measureArr[0] = type !== COLUMNS ? measureArr[0] : [];\n // Bottom and right dimensions empty\n dimensionArr[1] = [];\n // Left and top filled with dimensions\n dimensionArr[0] = dimensionArr[0];\n if (numOfMeasures === 0) {\n const allDimensions = [...dimensionArr[0], ...dimensionArr[1]];\n if (type === COLUMNS) {\n dimensionArr[1] = allDimensions[allDimensions.length - 1] ? [allDimensions[allDimensions.length - 1]]\n : [];\n allDimensions.splice(-1, 1);\n } else {\n dimensionArr[1] = [];\n }\n dimensionArr[0] = [...allDimensions];\n }\n }\n\n if (dimensionArr[0].length && dimensionArr[1].length && numOfMeasures > 0) {\n dimensionArr[0] = [...dimensionArr[0], ...dimensionArr[1]];\n dimensionArr[1] = [];\n }\n return {\n fields: dimensionArr.map((list, i) => (i === 1 ?\n measureArr[i].concat(dimensionArr[i]) : dimensionArr[i].concat(measureArr[i]))),\n dimensions: [...dimensionArr[0], ...dimensionArr[1]],\n measures: [...measureArr[0], ...measureArr[1]],\n temporal: [...temporalArr[0], ...temporalArr[1]],\n categorical: [...categoricalArr[0], ...categoricalArr[1]]\n };\n};\n\n/**\n * Gets the list of normalized fields\n *\n * @param {Array} fields List of fields in the view\n * @param {Object} fieldMap Mapping of fields in the datamodel\n * @return {Array} fields normalized by measurement and dimensions\n */\nconst normalizeFields = (config, type) => {\n const fieldsArr = [];\n const fields = config[type];\n\n if (!(fields[0] instanceof Array)) {\n fieldsArr[0] = fields;\n } else {\n fieldsArr[0] = fields[0] || [];\n fieldsArr[1] = fields[1] || [];\n }\n return fieldsArr;\n};\n\n/**\n *\n *\n * @param {*} fields\n * @param {*} datamodel\n * @return\n */\nconst convertToVar = (datamodel, fields) => {\n const vars = [];\n\n fields && fields.forEach((field) => {\n if (field instanceof ComposedVars) {\n vars.push(field);\n field.data(datamodel);\n } else {\n vars.push(new SimpleVariable(field).data(datamodel));\n }\n });\n return vars;\n};\n\n/**\n *\n *\n * @param {*} rows\n * @param {*} columns\n * @param {*} datamodel\n * @return\n */\nexport const transformFields = (datamodel, config) => {\n const [rowsInfo, columnsInfo] = [ROWS, COLUMNS].map((fields) => {\n const normalizedFields = normalizeFields(config, fields);\n const norFields = [convertToVar(datamodel, normalizedFields[0])];\n\n if (normalizedFields[1]) {\n norFields[1] = convertToVar(datamodel, normalizedFields[1]);\n }\n return orderFields(norFields, fields);\n });\n const {\n fields: rows,\n dimensions: rowDimensions,\n measures: rowMeasures,\n temporal: rowTemporalFields,\n categorical: rowCategoricalFields\n } = rowsInfo;\n const {\n fields: columns,\n dimensions: columnDimensions,\n measures: columnMeasures,\n temporal: columnTemporalFields,\n categorical: columnCategoricalFields\n } = columnsInfo;\n return {\n rows,\n rowDimensions,\n rowMeasures,\n rowTemporalFields,\n rowCategoricalFields,\n columns,\n columnTemporalFields,\n columnCategoricalFields,\n columnDimensions,\n columnMeasures\n };\n};\n","import { ERROR_MSG, mergeRecursive } from 'muze-utils';\nimport { transformFields } from './field-sanitizer';\nimport { getHeaderAxisFrom } from '../group-helper/group-utils';\nimport { ROW, COLUMN } from '../enums/constants';\n\n/**\n *\n *\n * @export\n * @class VisualEncoder\n */\nexport default class VisualEncoder {\n\n /**\n *\n *\n * @memberof VisualEncoder\n */\n createAxis () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n *\n *\n * @memberof VisualEncoder\n */\n setCommonDomain () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n *\n *\n * @memberof VisualEncoder\n */\n getLayerConfig () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n fieldInfo (...info) {\n if (info.length) {\n this._fieldInfo = mergeRecursive(this._fieldInfo || {}, info[0]);\n return this;\n }\n return this._fieldInfo;\n }\n\n /**\n *\n *\n * @param {*} datamodel\n * @param {*} config\n * @return\n * @memberof VisualEncoder\n */\n fieldSanitizer (datamodel, config) {\n this.fieldInfo(transformFields(datamodel, config));\n return this.fieldInfo();\n }\n\n /**\n *\n *\n * @param {*} params\n * @return\n * @memberof VisualEncoder\n */\n axisFrom (...params) {\n if (params.length) {\n this._axisFrom = params[0];\n return this;\n }\n return this._axisFrom;\n }\n\n /**\n *\n *\n * @param {*} params\n * @return\n * @memberof VisualEncoder\n */\n headerFrom (...params) {\n if (params.length) {\n this._headerFrom = params[0];\n return this;\n }\n return this.__headerFrom;\n }\n\n /**\n *\n *\n * @param {*} axisFrom\n * @return\n * @memberof CartesianEncoder\n */\n setAxisAndHeaders (axisFrom = {}, fields) {\n const [rowHeader, rowAxis] = getHeaderAxisFrom(ROW, fields.rows, axisFrom);\n const [colHeader, colAxis] = getHeaderAxisFrom(COLUMN, fields.columns, axisFrom);\n\n this.axisFrom({\n row: rowAxis,\n column: colAxis\n });\n this.headerFrom({\n row: rowHeader,\n column: colHeader\n });\n return this;\n }\n}\n","import { ContinousAxis, BandAxis, TimeAxis, ColorAxis, SizeAxis, ShapeAxis } from '@chartshq/muze-axis';\n\nexport const scaleMaps = {\n linear: ContinousAxis,\n band: BandAxis,\n temporal: TimeAxis,\n size: SizeAxis,\n color: ColorAxis,\n shape: ShapeAxis\n};\n","import { ScaleType } from '@chartshq/muze-axis';\n\n/**\n * Map of DataModel types to associated field types.\n */\nexport const dataTypeScaleMap = {\n dimension: ScaleType.BAND,\n categorical: ScaleType.BAND,\n measure: ScaleType.LINEAR,\n temporal: ScaleType.TIME\n};\n\n","import { mergeRecursive } from 'muze-utils';\nimport { AxisOrientation } from '@chartshq/muze-axis';\nimport { scaleMaps } from '../enums/scale-maps';\nimport { getAxisType, getAxisKey } from '../group-helper';\nimport { dataTypeScaleMap } from '../data-type-scale-map';\nimport { CATEGORICAL, TEMPORAL, BAR, LINE, POINT, BOTH, Y } from '../enums/constants';\n\n/**\n *\n *\n * @param {*} axisInfo\n * @param {*} field\n * @param {*} axesCreators\n * @return\n */\nconst getAxisConfig = (axisInfo, field, axesCreators) => {\n let axisOrientation;\n const { index, axisIndex, axisType } = axisInfo;\n const { config, position } = axesCreators;\n const userAxisConfig = config.axes ? (config.axes[axisType] || {}) : {};\n const {\n LEFT,\n RIGHT,\n TOP,\n BOTTOM\n } = AxisOrientation;\n const allOrientations = axisType === Y ? [LEFT, RIGHT] : [TOP, BOTTOM];\n\n if (position === BOTH) {\n axisOrientation = allOrientations[axisIndex];\n } else {\n axisOrientation = position;\n }\n const axisConfig = {\n id: `${axisType}-${index}-${axisIndex}`,\n name: field.toString(),\n field: field.toString(),\n labels: { rotation: 0 },\n numberFormat: field.numberFormat(),\n orientation: axisOrientation,\n type: dataTypeScaleMap[field.subtype()]\n };\n userAxisConfig.tickValues = field.format(userAxisConfig.tickValues);\n userAxisConfig.domain = field.format(userAxisConfig.domain);\n\n return mergeRecursive(axisConfig, userAxisConfig);\n};\n\n/**\n *\n *\n * @param {*} axisInfo\n * @param {*} field\n * @param {*} axesCreators\n * @return\n */\nconst createSimpleAxis = (axisConfig, field, axesCreators) => {\n const { labelManager } = axesCreators;\n const Cls = scaleMaps[dataTypeScaleMap[field.subtype()]];\n const simpleAxis = new Cls(axisConfig, { labelManager });\n return simpleAxis;\n};\n\n/**\n *\n *\n * @param {*} axisType\n * @param {*} fieldInfo\n * @param {*} axesCreators\n * @param {*} groupAxes\n * @return\n */\nexport const generateAxisFromMap = (axisType, fieldInfo, axesCreators, groupAxes) => {\n let axisKey;\n const currentAxes = [];\n const { fields, index } = fieldInfo;\n const { cacheMaps } = axesCreators;\n const map = cacheMaps[`${axisType}AxesMap`];\n\n fields.forEach((field, axisIndex) => {\n axisKey = getAxisKey(axisType, index, dataTypeScaleMap[field.subtype()]);\n const axisConfig = getAxisConfig({ index, axisIndex, axisType }, field, axesCreators);\n\n if (!map.has(axisKey)) {\n const xAxis = createSimpleAxis(axisConfig, field, axesCreators);\n currentAxes.push(xAxis);\n } else {\n const axes = map.get(axisKey);\n axes[axisIndex] = axes[axisIndex] ? axes[axisIndex] : createSimpleAxis(axisConfig, field, axesCreators);\n axes[axisIndex]._rotationLock = false;\n axes[axisIndex] && axes[axisIndex].config(axisConfig).domain(axisConfig.domain || []);\n }\n });\n\n if (currentAxes.length) {\n map.set(axisKey, currentAxes);\n }\n\n for (const [key] of map.entries()) {\n if (key === axisKey) {\n groupAxes.add(axisKey);\n }\n }\n return map.get(axisKey);\n};\n\n/**\n *\n *\n * @memberof MatrixResolver\n */\nexport const mutateAxesFromMap = (cacheMaps, axes) => {\n const {\n xAxesMap,\n yAxesMap\n } = cacheMaps;\n const {\n x: xAxisSet,\n y: yAxisSet\n } = axes;\n const xAxes = [];\n const yAxes = [];\n\n xAxisSet.forEach((axisId) => {\n const xAxis = xAxesMap.get(axisId);\n xAxes.push(xAxis);\n });\n yAxisSet.forEach((axisId) => {\n const yAxis = yAxesMap.get(axisId);\n yAxes.push(yAxis);\n });\n return {\n xAxes, yAxes\n };\n};\n\n/**\n * return a default mark based on predefined set of rules of type and subtype of the fields\n *\n * @param {string} colFieldType dimension/measure - temporal/ordinal/nominal\n * @param {string} rowFieldType dimension/measure - temporal/ordinal/nominal\n * @return {Object} return mark type\n */\nexport const getDefaultMark = (colFieldType, rowFieldType) => {\n let mark;\n\n if (colFieldType === CATEGORICAL || rowFieldType === CATEGORICAL) {\n mark = BAR;\n } else if (colFieldType === TEMPORAL || rowFieldType === TEMPORAL) {\n mark = LINE;\n } else {\n mark = POINT;\n }\n\n return mark;\n};\n\n/**\n *\n *\n * @param {*} axesCreators\n * @param {*} [fieldInfo=[]]\n * @return\n */\nexport const createRetinalAxis = (axesCreators, fieldProps = {}) => {\n const { axisType, fieldsConfig } = axesCreators;\n const field = fieldProps.field;\n const axis = [];\n const Cls = scaleMaps[axisType];\n\n fieldProps.type = fieldProps.type ? fieldProps.type : getAxisType(fieldsConfig, field || null);\n axis.push(new Cls(fieldProps));\n return axis;\n};\n\n/**\n *\n *\n * @param {*} arr\n * @param {*} val\n * @return\n */\nexport const getIndex = (arr, val) => {\n let i = 0;\n let arrIndex = -1;\n\n while (arrIndex === -1 && i < arr.length) {\n if (arr[i].toString() === val.toString()) {\n arrIndex = i;\n }\n i++;\n }\n return arrIndex;\n};\n\n/**\n *\n *\n * @param {*} colFields\n * @param {*} rowFields\n * @param {*} userLayerConfig\n * @return\n * @memberof CartesianEncoder\n */\nexport const getLayerConfFromFields = (colFields, rowFields, userLayerConfig) => userLayerConfig.filter((conf) => {\n const userConf = conf instanceof Array ? conf : [conf];\n const encodingArr = [].concat(...userConf.map(d => d.encoding).filter(d => d !== undefined));\n\n if (!encodingArr.length) {\n return true;\n }\n\n const xFields = [].concat(...encodingArr.map(d => [d.x && d.x.field, d.x0 && d.x0.field]))\n .filter(d => d !== undefined && d !== null);\n const yFields = [].concat(...encodingArr.map(d => [d.y && d.y.field, d.y0 && d.y0.field]))\n .filter(d => d !== undefined && d !== null);\n\n if (!xFields.length && !yFields.length) {\n return true;\n }\n\n const colFieldExist = xFields.length ? xFields.every(d => colFields.indexOf(d) !== -1) : false;\n const rowFieldExist = yFields.length ? yFields.every(d => rowFields.indexOf(d) !== -1) : false;\n if (xFields.length && yFields.length) {\n return colFieldExist && rowFieldExist;\n }\n return colFieldExist || rowFieldExist;\n});\n","import { layerFactory } from '@chartshq/visual-layer';\nimport { mergeRecursive } from 'muze-utils';\nimport { generateAxisFromMap, getDefaultMark, getIndex, getLayerConfFromFields } from './encoder-helper';\nimport { retriveDomainFromData } from '../group-helper';\n\nimport { ROW, COLUMN, COL, LEFT, TOP, CARTESIAN, MEASURE, BOTH, X, Y } from '../enums/constants';\nimport VisualEncoder from './visual-encoder';\n\n/**\n *\n *\n * @export\n * @class CartesianEncoder\n * @extends {VisualEncoder}\n */\nexport default class CartesianEncoder extends VisualEncoder {\n\n /**\n *\n *\n * @return\n * @memberof CartesianEncoder\n */\n static type () {\n return CARTESIAN;\n }\n\n /**\n *\n *\n * @param {*} axesCreators\n * @param {*} fieldInfo\n * @return\n * @memberof CartesianEncoder\n */\n createAxis (axesCreators, fieldInfo) {\n const geomCellAxes = {};\n const {\n axes\n } = axesCreators;\n const {\n projections,\n indices\n } = fieldInfo;\n const {\n rowFields,\n columnFields\n } = projections;\n const {\n rowIndex,\n columnIndex\n } = indices;\n const axisFields = [{\n fields: rowFields,\n index: rowIndex\n }, {\n fields: columnFields,\n index: columnIndex\n }];\n const xAxes = axes.x || [];\n const yAxes = axes.y || [];\n\n [rowFields, columnFields].forEach((fields, i) => {\n const type = i === 0 ? ROW : COLUMN;\n const axis = i === 0 ? Y : X;\n\n if (fields.length > 1) {\n axesCreators.position = BOTH;\n } else {\n axesCreators.position = this.axisFrom()[type];\n }\n geomCellAxes[axis] = generateAxisFromMap(axis, axisFields[i], axesCreators, axis === X ? xAxes : yAxes);\n });\n return geomCellAxes;\n }\n\n /**\n *\n *\n * @param {*} fields\n * @return\n * @memberof CartesianEncoder\n */\n getFacetsAndProjections (fields, type) {\n let facets = [];\n let projections = [];\n let counter = 0;\n const primaryFacets = [];\n const secondaryFacets = [];\n const primaryFields = fields[0];\n const secondaryFields = fields[1];\n const primaryLen = primaryFields.length;\n const secondaryLen = secondaryFields.length;\n const axisFrom = this.axisFrom();\n\n for (let i = 0; i < primaryLen; i++) {\n let projArr = [primaryFields[i]];\n const primaryField = primaryFields[i];\n\n if (primaryField.type() === MEASURE) {\n const secondaryField = secondaryFields[counter];\n if (secondaryField && secondaryField.type() === MEASURE) {\n counter++;\n projArr = [primaryField, secondaryField];\n }\n projections.push(projArr);\n } else {\n facets.push(primaryField);\n primaryFacets.push(primaryField);\n }\n }\n if (secondaryLen > counter) {\n for (let i = counter; i < secondaryLen; i++) {\n const secondaryField = secondaryFields[i];\n const projArr = [secondaryField];\n if (secondaryField.type() === MEASURE) {\n projections.push(projArr);\n } else {\n facets.push(secondaryField);\n secondaryFacets.push(secondaryField);\n }\n }\n }\n if ((primaryFacets.length || secondaryFacets.length) && !projections.length) {\n type = type === COL ? COLUMN : type;\n if ((axisFrom[type] === LEFT || axisFrom[type] === TOP) && primaryFacets.length) {\n const axisFromIndex = primaryFacets.length - 1;\n const facet = primaryFacets[axisFromIndex];\n projections = [[facet]];\n const existIndex = getIndex(secondaryFacets, facet);\n if (existIndex > -1) {\n projections = [[facet, facet]];\n secondaryFacets.splice(existIndex, 1);\n }\n primaryFacets.splice(axisFromIndex, 1);\n } else {\n const axisFromIndex = 0;\n const facet = secondaryFacets[axisFromIndex];\n projections = [[facet]];\n const existIndex = getIndex(primaryFacets, facet);\n if (existIndex > -1) {\n projections = [[facet, facet]];\n primaryFacets.splice(existIndex, 1);\n }\n secondaryFacets.splice(axisFromIndex, 1);\n }\n }\n\n facets = [...primaryFacets, ...secondaryFacets];\n facets = facets.filter((el, index, self) => index === self.findIndex(t => (t.toString() === el.toString())));\n return {\n facets,\n projections\n };\n }\n\n /**\n *\n *\n * @param {*} datamodel\n * @param {*} config\n * @return\n * @memberof CartesianEncoder\n */\n fieldSanitizer (datamodel, config) {\n return super.fieldSanitizer(datamodel, config);\n }\n\n /**\n *\n *\n * @param {*} datamodel\n * @return\n * @memberof CartesianEncoder\n */\n getRetinalFieldsDomain (dataModels, encoding) {\n const groupedModel = dataModels.groupedModel;\n const domains = {};\n for (const key in encoding) {\n if ({}.hasOwnProperty.call(encoding, key)) {\n const encodingObj = encoding[key];\n const field = encodingObj.field;\n if (!encodingObj.domain && field) {\n const domain = retriveDomainFromData(groupedModel, field);\n domains[field] = domain;\n }\n }\n }\n return domains;\n }\n\n /**\n *\n *\n * @param {*} layerArray\n * @memberof CartesianEncoder\n */\n serializeLayerConfig (layerArray) {\n const serializedLayers = [];\n // let currentLayerIndex = 0;\n layerArray.length && layerArray.forEach((layer, i) => {\n const def = layerFactory.sanitizeLayerConfig(layer);\n def.order = i;\n serializedLayers.push(def);\n });\n return serializedLayers;\n }\n\n /**\n *\n *\n * @param {*} fields\n * @param {*} userLayerConfig\n * @return\n * @memberof CartesianEncoder\n */\n getLayerConfig (fields, userLayerConfig) {\n const layerConfig = [];\n const {\n columnFields,\n rowFields\n } = fields;\n\n // let currentLayerIndex = 0;\n columnFields.forEach((colField) => {\n const colFieldName = colField.toString();\n rowFields.forEach((rowField) => {\n let configs = [];\n const rowFieldName = rowField.toString();\n const encoding = {\n x: {\n field: colFieldName\n },\n y: {\n field: rowFieldName\n }\n };\n const rowFieldType = rowField.subtype();\n const colFieldType = colField.subtype();\n const mark = getDefaultMark(colFieldType, rowFieldType);\n\n const defConfigs = [{\n mark,\n def: {\n mark,\n encoding\n }\n }];\n\n const layerConfigs = getLayerConfFromFields(colField.getMembers(),\n rowField.getMembers(), userLayerConfig || []);\n if (layerConfigs.length) {\n configs = layerConfigs.map((layerConf) => {\n const mergedLayerConf = mergeRecursive(mergeRecursive({}, defConfigs[0].def), layerConf);\n const serializedLayerConfig = layerFactory.getSerializedConf(mergedLayerConf.mark,\n mergedLayerConf);\n return {\n mark: mergedLayerConf.mark,\n order: mergedLayerConf.order,\n def: serializedLayerConfig\n };\n });\n } else {\n configs = defConfigs;\n }\n\n layerConfig.push(...configs);\n });\n });\n return layerConfig;\n }\n}\n\n","import { layerFactory } from '@chartshq/visual-layer';\nimport { mergeRecursive } from 'muze-utils';\nimport VisualEncoder from './visual-encoder';\nimport { RADIUS, ANGLE, SIZE, MEASURE, ARC, POLAR, COLOR } from '../enums/constants';\n/**\n *\n *\n * @export\n * @class PolarEncoder\n * @extends {VisualEncoder}\n */\nexport default class PolarEncoder extends VisualEncoder {\n\n /**\n *\n *\n * @param {*} axesCreators\n * @param {*} fieldInfo\n * @return\n * @memberof PolarEncoder\n */\n createAxis (axesCreators, fieldInfo) {\n const {\n axes\n } = axesCreators;\n const geomCellAxes = axes;\n const {\n indices\n } = fieldInfo;\n const {\n rowIndex,\n columnIndex\n } = indices;\n // Dummy axes for polar, to create blank cells\n const pieAxes = geomCellAxes.pie || [];\n\n pieAxes[rowIndex] = pieAxes[rowIndex] || [];\n pieAxes[rowIndex][columnIndex] = [];\n\n geomCellAxes.pie = pieAxes;\n geomCellAxes.x = null;\n geomCellAxes.y = null;\n\n return geomCellAxes;\n }\n\n /**\n *\n *\n * @param {*} fields\n * @return\n * @memberof CartesianEncoder\n */\n getFacetsAndProjections (fields) {\n let counter = 0;\n const facets = [];\n const projections = [];\n const primaryFields = fields[0];\n const secondaryFields = fields[1];\n const primaryLen = primaryFields.length;\n const secondaryLen = secondaryFields.length;\n\n for (let i = 0; i < primaryLen; i++) {\n const primaryField = primaryFields[i];\n if (primaryField.type() === MEASURE) {\n const secondaryField = secondaryFields[counter++];\n const projArr = secondaryField ? [primaryField, secondaryField] : [primaryField];\n projections.push(projArr);\n } else {\n facets.push(primaryField);\n }\n }\n if (secondaryLen > counter) {\n for (let i = counter; i < secondaryLen; i++) {\n const secondaryField = secondaryFields[i];\n const projArr = [secondaryField];\n if (secondaryField.type() === MEASURE) {\n projections.push(projArr);\n } else {\n facets.push(secondaryField);\n }\n }\n }\n return {\n facets,\n projections\n };\n }\n\n /**\n *\n *\n * @return\n * @memberof PolarEncoder\n */\n setCommonDomain () {\n // No domain to be set\n return this;\n }\n\n /**\n *\n *\n * @return\n * @memberof PolarEncoder\n */\n static type () {\n return POLAR;\n }\n\n layers (...layers) {\n if (layers.length) {\n this._layers = layers[0];\n return this;\n }\n return this._layers;\n }\n\n /**\n *\n *\n * @param {*} datamodel\n * @param {*} config\n * @memberof PolarEncoder\n */\n fieldSanitizer (datamodel, config) {\n let sanitizedRows = [[], []];\n let sanitizedColumns = [[], []];\n const fields = super.fieldSanitizer(datamodel, config);\n const {\n layers\n } = config;\n const {\n rows,\n columns\n } = fields;\n const layer = layers[0];\n const encoding = layer.encoding;\n const radius = encoding && encoding.radius ? encoding.radius.field : null;\n const angle = encoding && encoding.angle ? encoding.angle.field : null;\n const sanitizedFields = [sanitizedRows, sanitizedColumns];\n\n [rows, columns].forEach((fieldType, typeIndex) => {\n fieldType.forEach((fieldSet, i) => fieldSet.forEach((field) => {\n if (field.toString() !== radius && field.toString() !== angle && field.type() !== MEASURE) {\n sanitizedFields[typeIndex][i].push(field);\n }\n }));\n });\n sanitizedColumns = [...new Set(sanitizedColumns)];\n sanitizedRows = [...new Set(sanitizedRows)];\n this.fieldInfo({ rows: sanitizedRows, columns: sanitizedColumns });\n return this.fieldInfo();\n }\n\n getRetinalFieldsDomain (dataModels, encoding, facetFields, groupBy) {\n let sizeField;\n let colorField;\n const fields = [];\n const layers = this.layers();\n const dataModel = dataModels.parentModel;\n const fieldsConfig = dataModel.getFieldsConfig();\n const domains = {};\n if (layers && layers[0]) {\n const layer = layers[0];\n const layerEncoding = layer.def.encoding || {};\n\n [RADIUS, ANGLE, SIZE, COLOR].forEach((encType) => {\n const field = layerEncoding[encType] ? layerEncoding[encType].field : '';\n const measureField = fieldsConfig[field] && fieldsConfig[field].def.type === MEASURE;\n if (encType === SIZE && measureField) {\n sizeField = field;\n }\n if (encType === COLOR) {\n colorField = field;\n }\n fieldsConfig[field] && !measureField && fields.push(field);\n });\n }\n\n if (sizeField) {\n domains[sizeField] = dataModel.groupBy(facetFields, {\n [sizeField]: 'sum'\n }).getFieldspace().fieldsObj()[sizeField].domain();\n }\n\n if (colorField) {\n const dm = dataModel.groupBy([...facetFields, ...fields], groupBy.measures);\n domains[colorField] = dm.getFieldspace().fieldsObj()[colorField].domain();\n }\n return domains;\n }\n /**\n *\n *\n * @param {*} fields\n * @param {*} userLayerConfig\n * @return\n * @memberof PolarEncoder\n */\n getLayerConfig (fields, userLayerConfig) {\n let layerConfig = [];\n const {\n columnFields,\n rowFields\n } = fields;\n const allFields = [...columnFields, ...rowFields];\n\n allFields.forEach(() => {\n const encoding = {};\n let config = {\n mark: ARC,\n def: {\n encoding\n }\n };\n if (userLayerConfig && userLayerConfig.length > 0) {\n config = mergeRecursive(config, userLayerConfig[0]);\n }\n layerConfig.push(config);\n });\n if (layerConfig.length === 0) {\n layerConfig = userLayerConfig;\n }\n\n this.layers(layerConfig);\n return layerConfig;\n }\n\n /**\n *\n *\n * @param {*} layerArray\n * @returns\n * @memberof PolarEncoder\n */\n serializeLayerConfig (layerArray) {\n const serializedLayers = [];\n\n layerArray.length && layerArray.forEach((layer) => {\n const def = layerFactory.getSerializedConf(layer.mark, layer);\n serializedLayers.push({\n mark: layer.mark,\n def\n });\n });\n return serializedLayers;\n }\n}\n","import { createRetinalAxis } from './encoder-helper';\nimport { COLOR, SHAPE, SIZE } from '../enums/constants';\nimport VisualEncoder from './visual-encoder';\n\n/**\n *\n *\n * @export\n * @class RetinalEncoder\n * @extends {VisualEncoder}\n */\nexport default class RetinalEncoder extends VisualEncoder {\n\n /**\n *\n *\n * @param {*} axesCreators\n * @return\n * @memberof RetinalEncoder\n */\n createAxis (axesCreators) {\n const { fieldsConfig, config } = axesCreators;\n const newAxes = {};\n\n [COLOR, SHAPE, SIZE].forEach((axisType) => {\n newAxes[`${axisType}`] = createRetinalAxis({ axisType, fieldsConfig }, config[axisType]);\n });\n return newAxes;\n }\n\n /**\n *\n *\n * @static\n * @return\n * @memberof RetinalEncoder\n */\n static type () {\n return 'retinal';\n }\n\n /**\n *\n *\n * @param {*} fields\n * @param {*} userLayerConfig\n * @return\n * @memberof RetinalEncoder\n */\n getLayerConfig (encodingConfigs, userLayerConfig) {\n const layerConfig = [];\n userLayerConfig.forEach((e) => {\n const config = e;\n [COLOR, SHAPE, SIZE].forEach((axis) => {\n if (encodingConfigs[axis] && encodingConfigs[axis].field) {\n const def = config.def;\n if (config.def instanceof Array) {\n def.forEach((conf) => {\n conf.encoding = conf.encoding || {};\n !conf.encoding[axis] && (conf.encoding[axis] = {});\n conf.encoding[axis].field = encodingConfigs[axis].field;\n });\n } else {\n def.encoding = def.encoding || {};\n !def.encoding[axis] && (def.encoding[axis] = {});\n def.encoding[axis].field = encodingConfigs[axis].field;\n }\n }\n });\n layerConfig.push(config);\n });\n return layerConfig;\n }\n\n /**\n *\n *\n * @param {*} context\n * @return\n * @memberof RetinalEncoder\n */\n setCommonDomain (context) {\n const { domains, axes, encoding } = context;\n\n Object.entries(encoding).forEach((enc) => {\n if (enc[1] && enc[1].field) {\n const encType = enc[0];\n const field = enc[1].field;\n\n if (field) {\n axes[encType].forEach((axis) => {\n const domain = domains[field];\n !enc[1].domain && axis.updateDomain(domain);\n });\n }\n }\n });\n return axes;\n }\n}\n","import { Store, dataSelect, FieldType } from 'muze-utils';\nimport { DATA_UPDATE_COUNTER } from '../enums/defaults';\nimport { Variable } from '../variable';\nimport { PolarEncoder, CartesianEncoder } from '../encoder';\nimport {\n DIMENSION,\n MEASURE,\n ORDINAL,\n LINEAR,\n ROW,\n COLUMN,\n COL,\n LEFT,\n RIGHT,\n TOP,\n BOTTOM,\n COLOR,\n SIZE,\n TEMPORAL,\n SHAPE,\n INTERACTION,\n GRID_LINES,\n GRID_BANDS,\n HEADER,\n FACET,\n X,\n Y,\n POLAR\n} from '../enums/constants';\n\n/**\n * Creates an instance of a store which contains the arguments to make the class reactive\n *\n * @return {Object} instance of store\n * @memberof VisualGroup\n */\nexport const initStore = () => new Store({\n [DATA_UPDATE_COUNTER]: DATA_UPDATE_COUNTER\n});\n\n/**\n *\n *\n * @param {*} arr\n */\nexport const isDistributionEqual = arr => [...arr[0], ...arr[1]].reduce((isEqual, row) => {\n const rowType = row.type();\n\n if (rowType === MEASURE || rowType === TEMPORAL) {\n isEqual = true;\n }\n return isEqual;\n}, false);\n\n/**\n *\n *\n */\nexport const initializeCacheMaps = () => ({\n cellMap: new Map(),\n xAxesMap: new Map(),\n yAxesMap: new Map(),\n entryCellMap: new Map(),\n exitCellMap: new Map()\n});\n\n/**\n *\n *\n * @param {*} axisName\n * @param {*} id\n */\nexport const getAxisKey = (axisName, id, scaleType) => `${axisName}-axis-${id}-${scaleType}`;\n\n/**\n *\n *\n * @param {*} rowId\n * @param {*} columnId\n */\nexport const getCellKey = (rowId, columnId) => `cell-${rowId}-${columnId}`;\n\n/**\n *\n *\n * @param {*} config\n * @return\n */\nexport const extractUnitConfig = (config) => {\n const unitConfig = {};\n const attrNames = [INTERACTION, GRID_LINES, GRID_BANDS];\n\n attrNames.forEach((attr) => {\n if (config[attr] !== undefined) {\n unitConfig[attr] = config[attr];\n }\n });\n return unitConfig;\n};\n\n/**\n *\n *\n * @param {*} headers\n * @param {*} index\n * @param {*} rowLength\n * @return\n * @memberof MatrixResolver\n */\nexport const getHeaderText = (headers, index, rowLength) => {\n let header = '';\n\n if (index === rowLength - 1 && headers.length > rowLength) {\n for (let i = index; i < headers.length - 1; i++) {\n header += `${headers[i].toString()} / `;\n }\n header += headers[headers.length - 1].toString();\n return header;\n } else if (headers[index]) {\n return headers[index].toString();\n }\n return '';\n};\n\n/**\n *\n *\n * @param {*} fields\n * @param {*} fieldHeaders\n * @param {*} TextCell\n * @param {*} labelManager\n * @return\n */\nexport const headerCreator = (fields, fieldHeaders, TextCell, labelManager) => {\n const headers = fields.length > 0 ? fields[0].map((cell, i) => new TextCell({ type: HEADER }, { labelManager })\n .source(getHeaderText(fieldHeaders, i, fields[0].length))\n .config({ show: cell.config().show })) : [];\n return headers;\n};\n\n/**\n *\n *\n * @param {*} variable\n * @param {*} allFields\n * @return\n */\nexport const findInGroup = (variable, allFields) => {\n let channel = null;\n\n [COLOR, SIZE, SHAPE].forEach((e) => {\n if (this.store.get(e) && variable === this.store.get(e)[0]) {\n channel = e;\n }\n });\n\n if (channel) {\n return { channel };\n }\n [ROW, COL].forEach((facetType) => {\n allFields[`${facetType}Facets`].forEach((e) => {\n if (e.toString() === variable) {\n channel = { channel: FACET, type: facetType === COL ? COLUMN : ROW };\n }\n });\n });\n\n if (channel) {\n return channel;\n }\n\n [ROW, COL].forEach((projType) => {\n allFields[`${projType}Projections`].forEach((e) => {\n e.forEach((m) => {\n if (m.toString() === variable) {\n channel = projType === COL ? X : Y;\n }\n });\n });\n });\n\n if (channel) {\n return { channel };\n }\n return null;\n};\n\n/**\n *\n *\n * @param {*} datamodel\n * @param {*} field\n */\nexport const getAxisType = (fieldsConfig, field) => {\n let fieldType = ORDINAL;\n\n if (field && fieldsConfig[field].def.type !== DIMENSION) {\n fieldType = LINEAR;\n }\n return fieldType;\n};\n\n/**\n *\n *\n * @param {*} datamodel\n * @param {*} fieldName\n * @return\n */\nexport const retriveDomainFromData = (datamodel, fieldName) => {\n const field = datamodel.getFieldspace().fields.find(d => d._ref.name === fieldName.toString());\n return field.domain();\n};\n\n/**\n *\n *\n * @memberof MatrixResolver\n */\nexport const mutateAxesFromMap = (cacheMaps, axes) => {\n let xAxes = null;\n let yAxes = null;\n const {\n xAxesMap,\n yAxesMap\n } = cacheMaps;\n const {\n x: xAxisSet,\n y: yAxisSet\n } = axes;\n\n xAxisSet && xAxisSet.forEach((axisId) => {\n const xAxis = xAxesMap.get(axisId);\n xAxes = xAxes || [];\n xAxes.push(xAxis);\n });\n\n yAxisSet && yAxisSet.forEach((axisId) => {\n const yAxis = yAxesMap.get(axisId);\n yAxes = yAxes || [];\n yAxes.push(yAxis);\n });\n\n return {\n xAxes, yAxes\n };\n};\n\n/**\n *\n *\n * @param {*} layers\n * @return\n */\nexport const getEncoder = (layers) => {\n let encoder = new CartesianEncoder();\n\n if (layers) {\n // Figuring out the kind of layers the group will have\n encoder = layers.every(e => e.mark === 'arc') ? new PolarEncoder() : encoder;\n }\n return encoder;\n};\n\n/**\n *\n *\n * @param {*} type\n * @param {*} fields\n * @param {*} userAxisFromConfig\n * @return\n */\nexport const getHeaderAxisFrom = (type, fields, userAxisFromConfig) => {\n let axisFrom = userAxisFromConfig[type];\n let headerFrom = '';\n const options = type === ROW ? [LEFT, RIGHT] : [BOTTOM, TOP];\n const [firstField, secondField] = fields;\n const firstFieldType = i => (firstField.length ? firstField[i].type() : null);\n const secondFieldType = i => (secondField.length ? secondField[i].type() : null);\n\n if (firstFieldType(firstField.length - 1) === DIMENSION && secondFieldType(0) === DIMENSION) {\n headerFrom = axisFrom ? options[1 - options.indexOf(axisFrom)] : options[1];\n\n if (type === COLUMN && (firstField[firstField.length - 1].toString() === secondField[0].toString())) {\n axisFrom = TOP;\n } else {\n axisFrom = axisFrom || options[0];\n }\n } else if (secondFieldType(secondField.length - 1) === DIMENSION) {\n headerFrom = type === ROW ? RIGHT : BOTTOM;\n axisFrom = type === ROW ? RIGHT : BOTTOM;\n } else {\n headerFrom = type === ROW ? LEFT : TOP;\n axisFrom = type === ROW ? LEFT : TOP;\n }\n if (firstFieldType(firstField.length - 1) === MEASURE && secondFieldType(0) === MEASURE) {\n axisFrom = type === ROW ? LEFT : TOP;\n } else if (secondFieldType(0) === MEASURE) {\n axisFrom = type === ROW ? RIGHT : BOTTOM;\n } else if (firstFieldType(firstField.length - 1) === MEASURE) {\n axisFrom = type === ROW ? LEFT : TOP;\n }\n return [headerFrom, axisFrom];\n};\n\n/**\n *\n *\n * @param {*} type\n * @param {*} fields\n * @param {*} layers\n * @return\n * @memberof MatrixResolver\n */\nexport const setFacetsAndProjections = (context, fieldInfo, encoder) => {\n const {\n fields,\n type\n } = fieldInfo;\n const { facets, projections } = encoder.simpleEncoder.getFacetsAndProjections(fields, type);\n\n context.facets({ [`${type}Facets`]: facets });\n context.projections({ [`${type}Projections`]: projections });\n\n return { facets, projections, fields };\n};\n\n/**\n * Creates a selection set from a data set with corresponding attributes\n *\n * @export\n * @param {Selection} sel contains previous selection\n * @param {Object} appendObj Object to be appended\n * @param {Array} data Data based on which the selection is entered/updated/removed\n * @param {Object} [attrs={}] Attributes to be set on the data\n * @return {Selection} Merged selection\n */\nexport const createSelection = (sel, appendObj, data, idFn) => {\n let selection = sel || dataSelect([]);\n\n selection = selection.data(data, idFn);\n\n const enter = selection.enter().append(appendObj);\n const mergedSelection = enter.merge(selection);\n\n selection.exit() && selection.exit().remove();\n return mergedSelection;\n};\n\nconst getRowBorders = (left, right) => {\n const borders = {};\n borders.top = false;\n borders.bottom = false;\n if (left.length > 1 || right.length > 1) {\n borders.top = true;\n borders.bottom = true;\n }\n return borders;\n};\n\nconst getColumnsBorders = (top, bottom) => {\n const borders = {};\n borders.left = false;\n borders.right = false;\n if (top.length || bottom.length) {\n if ((top[0] && top[0].length > 1) || (bottom[0] && bottom[0].length > 1)) {\n borders.left = true;\n borders.right = true;\n }\n }\n return borders;\n};\n\nconst getValueBorders = (rows, columns) => {\n const borders = { top: true, left: true, bottom: true, right: true };\n const borderTypeRow = [LEFT, RIGHT];\n const borderTypeCol = [TOP, BOTTOM];\n rows.forEach((e, i) => {\n if (e[0] && e[0].length) {\n borders[borderTypeRow[i]] = true;\n } else {\n borders[borderTypeRow[i]] = false;\n }\n });\n columns.forEach((e, i) => {\n if (e.length) {\n borders[borderTypeCol[i]] = true;\n } else {\n borders[borderTypeCol[i]] = false;\n }\n });\n\n return borders;\n};\n\nexport const getBorders = (matrices, encoder) => {\n let showRowBorders = { top: false, bottom: false };\n let showColBorders = { left: false, right: false };\n let showValueBorders = { top: false, bottom: false, left: false, right: false };\n const {\n rows,\n columns,\n values: valueMatrix\n } = matrices;\n const [leftRows, rightRows] = rows;\n const [topColumns, bottomColumns] = columns;\n const {\n rowDimensions,\n columnDimensions,\n rowTemporalFields,\n columnTemporalFields,\n columnMeasures,\n rowMeasures\n } = encoder.fieldInfo();\n const allDimensionLength = rowDimensions.length + columnDimensions.length;\n const allMeasuresLength = rowMeasures.length + columnMeasures.length;\n const allTemporalFieldsLength = rowTemporalFields.length + columnTemporalFields.length;\n\n if (encoder.constructor.type() === POLAR) {\n if (!allDimensionLength) {\n return { showRowBorders, showColBorders, showValueBorders };\n }\n } else if (!allMeasuresLength && !allTemporalFieldsLength && allDimensionLength <= 2) {\n return { showRowBorders, showColBorders, showValueBorders };\n }\n\n showRowBorders = getRowBorders(leftRows, rightRows);\n showColBorders = getColumnsBorders(topColumns, bottomColumns);\n showValueBorders = getValueBorders([leftRows, rightRows], [topColumns, bottomColumns]);\n\n if (valueMatrix.length > 1) {\n showValueBorders.top = true;\n showValueBorders.bottom = true;\n }\n if (valueMatrix.length && valueMatrix[0].length > 1) {\n showValueBorders.left = true;\n showValueBorders.right = true;\n }\n return { showRowBorders, showColBorders, showValueBorders };\n};\n\nexport const getFieldsFromSuppliedLayers = (suppliedLayerConfig, fieldsConfig) => {\n let fields = [];\n const encodingArr = suppliedLayerConfig.map(conf => (conf.encoding || {}));\n fields = [...fields, [].concat(...encodingArr.map(enc => Object.values(enc).map(d => d.field)))];\n fields = fields.filter(field => fieldsConfig[field] && fieldsConfig[field].def.type === FieldType.DIMENSION);\n return fields;\n};\n\nexport const extractFields = (facetsAndProjections, layerFields) => {\n const fields = Object.values(facetsAndProjections).map((arr) => {\n const flattenArray = [].concat(...arr);\n return [].concat(...flattenArray.map((field) => {\n if (field instanceof Variable) {\n return field.getMembers();\n }\n return field;\n }));\n });\n return [].concat(...fields, ...layerFields);\n};\n","/**\n * This file exports variables that are used as defaults for the crosstab group.\n */\nexport const DATA_UPDATE_COUNTER = 0;\n\nexport const DEFAULT_LAYER_TYPE = 'cartesian';\n\n","import Selection from './selection';\n/**\n * This function applies a selection operation on a data array.\n *\n * @export\n * @param {Array} [data=[]] The data array to be observed.\n * @return {Selection} Instance of a selection.\n */\nexport default function dataSelect (data = []) {\n return new Selection(data);\n}\n\n","import { BEHAVIOURS, ACTIONS } from '@chartshq/muze-firebolt';\n\nexport const actionBehaviourMap = {\n [ACTIONS.DRAG]: {\n behaviours: [BEHAVIOURS.BRUSH],\n touch: false\n },\n [ACTIONS.HOVER]: {\n behaviours: [BEHAVIOURS.HIGHLIGHT]\n },\n [ACTIONS.LONGTOUCH]: {\n behaviours: [BEHAVIOURS.SELECT],\n touch: true\n },\n [ACTIONS.TOUCHDRAG]: {\n behaviours: [BEHAVIOURS.BRUSH],\n touch: true\n },\n [ACTIONS.CLICK]: {\n behaviours: [BEHAVIOURS.SELECT],\n touch: false\n }\n};\n\n","export const CONFIG = 'config';\nexport const DATA = 'data';\nexport const AXES = 'axes';\nexport const LAYERDEFS = 'layerDef';\nexport const WIDTH = 'width';\nexport const HEIGHT = 'height';\nexport const MOUNT = 'mount';\nexport const primaryXAxisUpdated = 'primaryXAxisUpdated';\nexport const primaryYAxisUpdated = 'primaryYAxisUpdated';\nexport const secondaryXAxisUpdated = 'secondaryXAxisUpdated';\nexport const secondaryYAxisUpdated = 'secondaryYAxisUpdated';\nexport const TRANSFORM = 'transform';\nexport const DATADOMAIN = 'dataDomain';\nexport const LAYERSCREATED = 'layersCreated';\nexport const FIELDS = 'fields';\nexport const TIMEDIFFS = 'timeDiffs';\nexport const LAYERAXISINDEX = 'layerAxisIndex';\n\n","import { FieldType, getDependencyOrder, getObjProp,\n defaultValue, objectIterator, unionDomain, makeElement,\n DimensionSubtype, getClosestIndexOf, toArray } from 'muze-utils';\nimport { layerFactory } from '@chartshq/visual-layer';\nimport { TIMEDIFFS } from '../enums/reactive-props';\n\nexport const getDimensionMeasureMap = (layers, fieldsConfig) => {\n const retinalEncodingsAndMeasures = {};\n\n layers.forEach((layer) => {\n const {\n colorField,\n sizeField,\n shapeField,\n xField,\n yField\n } = layer.encodingFieldsInf();\n const measures = [xField, yField].filter(field => fieldsConfig[field] && fieldsConfig[field].def.type ===\n FieldType.MEASURE);\n [colorField, sizeField, shapeField].forEach((field) => {\n if (fieldsConfig[field] && fieldsConfig[field].def.type === FieldType.DIMENSION) {\n !retinalEncodingsAndMeasures[field] && (retinalEncodingsAndMeasures[field] = []);\n retinalEncodingsAndMeasures[field].push(...measures);\n }\n });\n });\n\n for (const key in retinalEncodingsAndMeasures) {\n if ({}.hasOwnProperty.call(retinalEncodingsAndMeasures, key)) {\n retinalEncodingsAndMeasures[key] = [...new Set(retinalEncodingsAndMeasures[key])];\n }\n }\n return retinalEncodingsAndMeasures;\n};\n\nexport const transformDataModels = (transform, dataModel) => {\n const dataModels = {};\n for (const key in transform) {\n if ({}.hasOwnProperty.call(transform, key)) {\n const transformVal = transform[key];\n dataModels[key] = transformVal(dataModel);\n }\n }\n\n return dataModels;\n};\n\nexport const getLayerFromDef = (context, definition, existingLayer) => {\n let instances = existingLayer;\n const dependencies = context._layerDeps;\n if (!existingLayer) {\n instances = layerFactory.getLayerInstance(definition);\n }\n const layers = {};\n const instanceArr = toArray(instances);\n definition = toArray(definition);\n definition.reduce((acc, def, idx) => {\n const instance = instanceArr[idx];\n instance.config(def);\n instance.dependencies(dependencies);\n if (def.name) {\n instance.alias(def.name);\n }\n layers[instance.alias()] = instance;\n return acc;\n }, {});\n return layers;\n};\n\nexport const resolveEncodingTransform = (layerInst, store) => {\n const encodingTransform = layerInst.config().encodingTransform || {};\n const resolvable = encodingTransform.resolvable;\n let depArr = [];\n if (resolvable) {\n const resolved = resolvable(store);\n depArr = resolved.depArr;\n layerInst.encodingTransform(resolved.fn);\n } else if (encodingTransform instanceof Function) {\n layerInst.encodingTransform(encodingTransform);\n }\n return depArr;\n};\n\nexport const createLayers = (context, layerDefinitions) => {\n const layersMap = context._layersMap;\n const markSet = {};\n const store = {\n layers: {},\n components: {\n unit: context\n }\n };\n let layerIndex = 0;\n let layers = layerDefinitions.sort((a, b) => a.order - b.order).reduce((layersArr, layerDef, i) => {\n const mark = layerDef.mark;\n const definition = layerDef.def;\n const markId = `${mark}-${i}`;\n const defArr = toArray(definition);\n defArr.forEach((def) => {\n def.order = layerDef.order + layerIndex;\n });\n layerIndex += defArr.length;\n const instances = getLayerFromDef(context, definition, layersMap[markId]);\n store.layers = Object.assign(store.layers, instances);\n const instanceValues = Object.values(instances);\n layersArr = layersArr.concat(...instanceValues);\n layersMap[markId] = instanceValues;\n markSet[markId] = markId;\n return layersArr;\n }, []);\n store.unit = context;\n const layerdeps = {};\n layers.forEach((layer) => {\n const depArr = resolveEncodingTransform(layer, store);\n layerdeps[layer.alias()] = depArr;\n });\n\n const order = getDependencyOrder(layerdeps);\n layers = order.map(name => store.layers[name]);\n for (const key in layersMap) {\n if (!(key in markSet)) {\n layersMap[key].forEach(layer => layer.remove());\n delete layersMap[key];\n }\n }\n return layers;\n};\n\nexport const attachDataToLayers = (layers, dm, transformedDataModels) => {\n layers.forEach((layer) => {\n const dataSource = layer.config().source;\n const dataModel = dataSource instanceof Function ? dataSource(dm) : (transformedDataModels[dataSource] || dm);\n layer.data(dataModel);\n });\n};\n\nexport const attachAxisToLayers = (axes, layers, layerAxisIndex) => {\n layers.forEach((layer) => {\n const layerId = layer.id();\n const axesObj = {};\n\n objectIterator(axes, (key) => {\n const axisInf = layerAxisIndex[layerId];\n if (axisInf) {\n axes[key] && (axesObj[key] = axes[key][axisInf[key] || 0]);\n }\n });\n Object.keys(axesObj).length && layer.axes(axesObj);\n });\n};\n\nexport const getLayerAxisIndex = (layers, fields) => {\n const layerAxisIndex = {};\n layers.forEach((layer) => {\n const { axis, encoding } = layer.config();\n const id = layer.id();\n ['x', 'y'].forEach((type) => {\n let index;\n const field = defaultValue(getObjProp(axis, type), encoding[type] && encoding[type].field);\n if (fields[type]) {\n index = fields[type].findIndex(fieldInst => fieldInst.getMembers().indexOf(field) !== -1);\n } else {\n index = 0;\n }\n !layerAxisIndex[id] && (layerAxisIndex[id] = {});\n layerAxisIndex[id][type] = index;\n });\n });\n return layerAxisIndex;\n};\n\nexport const unionDomainFromLayers = (layers, axisFields, layerAxisIndex, fieldsConfig) => {\n let domains = {};\n layers = layers.filter(layer => layer.getDataDomain() !== null);\n layers.forEach((layer) => {\n let domainValues = {};\n const config = layer.config();\n const encoding = config.encoding;\n const layerDomain = layer.getDataDomain();\n const layerId = layer.id();\n\n if (layerDomain !== null && config.calculateDomain !== false) {\n domainValues = Object.entries(layerDomain);\n if (layerDomain.x || layerDomain.y) {\n domains = domainValues.reduce((fieldDomain, domain) => {\n const encodingType = domain[0];\n const field = encoding[encodingType].field;\n const axisIndex = layerAxisIndex[layerId][encodingType];\n const fieldStr = `${axisFields[encodingType][axisIndex]}`;\n fieldDomain[fieldStr] = fieldDomain[fieldStr] || [];\n fieldDomain[fieldStr] = unionDomain(([fieldDomain[fieldStr], domain[1]]),\n fieldsConfig[field].def.subtype ? fieldsConfig[field].def.subtype :\n fieldsConfig[field].def.type);\n\n return fieldDomain;\n }, domains);\n } else { domains = domainValues; }\n }\n });\n return domains;\n};\n\nexport const renderLayers = (context, container, layers, measurement) => {\n context._lifeCycleManager.notify({ client: layers, action: 'beforedraw', formalName: 'layer' });\n const config = context.config();\n const classPrefix = config.classPrefix;\n const orderedLayers = context.layers().sort((a, b) => a.config().order - b.config().order);\n const layerParentGroup = makeElement(container, 'g', [1], `${classPrefix}-layer-group`);\n makeElement(layerParentGroup, 'g', orderedLayers, null, {\n update: (group, layer) => {\n layer.measurement(measurement);\n layer.dataProps({\n timeDiffs: context.store().get(TIMEDIFFS)\n });\n layer.config().render !== false && layer.mount(group.node());\n }\n });\n return this;\n};\n\nexport const getNearestDimensionalValue = (context, position) => {\n const fields = context.fields();\n if (!fields.x.length || !fields.y.length) {\n return null;\n }\n const data = context.data();\n const axes = context.axes();\n const fieldsConfig = data.getFieldsConfig();\n const xField = getObjProp(fields, 'x', 0).getMembers()[0];\n const yField = getObjProp(fields, 'y', 0).getMembers()[0];\n const xFieldType = fieldsConfig[xField] && (fieldsConfig[xField].def.subtype ? fieldsConfig[xField].def.subtype :\n fieldsConfig[xField].def.type);\n const yFieldType = fieldsConfig[yField] && (fieldsConfig[yField].def.subtype ? fieldsConfig[yField].def.subtype :\n fieldsConfig[yField].def.type);\n\n const entryVal = [['x', xFieldType, xField], ['y', yFieldType, yField]].find(entry =>\n entry[1] === DimensionSubtype.CATEGORICAL || entry[1] === DimensionSubtype.TEMPORAL);\n\n if (!entryVal || (xFieldType !== FieldType.MEASURE && yFieldType !== FieldType.MEASURE)) {\n return null;\n }\n const field = entryVal[2];\n const index = fieldsConfig[field].index;\n let key = axes[entryVal[0]][0].invert(position[entryVal[0]]);\n if (entryVal[1] === DimensionSubtype.TEMPORAL) {\n const filterData = [...new Set(data.getData().data.map(d => d[index]))];\n key = filterData[getClosestIndexOf(filterData, key)];\n }\n\n return key !== undefined ? [[field], [key]] : null;\n};\n\nexport const getLayersBy = (layers, searchBy, value) => layers.filter((layer) => {\n const name = searchBy === 'type' ? layer.constructor.formalName() : layer.alias();\n return name === value;\n});\n\nexport const removeLayersBy = (layers, searchBy, value) => {\n layers.filter((inst) => {\n const name = searchBy === 'type' ? inst.config().mark : inst.alias();\n if (name === value) {\n inst.remove();\n return false;\n }\n return true;\n });\n};\n\nexport const createSideEffectGroup = (container, className) => makeElement(container, 'g', [1], className).node();\n\nexport const getAdjustedDomain = (max, min) => {\n const y1ratio = max[0] / (max[0] - min[0]);\n const y2ratio = max[1] / (max[1] - min[1]);\n\n // adjust min/max values for positive negative values zero line etc\n let allSameSign = false;\n\n // if all numbers are positive set floor to zero\n if (min[0] > 0 && min[1] > 0 && min[1] > 0 && max[1] > 0) {\n allSameSign = true;\n min[0] = 0;\n min[1] = 0;\n }\n\n // if all numbers are negative set ceiling to zero\n if (min[0] < 0 && min[1] < 0 && min[1] < 0 && max[1] < 0) {\n allSameSign = true;\n max[0] = 0;\n max[1] = 0;\n }\n\n // align zero line if necessary\n if (!allSameSign && y1ratio !== y2ratio) {\n if (y1ratio < y2ratio) {\n // adjust min[1]\n min[1] = min[0] / max[0] * max[1];\n } else {\n // adjust min[0]\n min[0] = min[1] / max[1] * max[0];\n }\n }\n return {\n max,\n min\n };\n};\n","import { getObjProp, defaultValue, makeElement, DimensionSubtype, DataModel } from 'muze-utils';\nimport { ScaleType } from '@chartshq/muze-axis';\nimport { layerFactory } from '@chartshq/visual-layer';\nimport { GRIDLINEPARENTGROUPCLASS, GRIDBANDPARENTGROUPCLASS } from '../enums/constants';\nimport { TIMEDIFFS } from '../enums/reactive-props';\n\nconst LINEAR = ScaleType.LINEAR;\n\nconst getLayerDefinition = (context, axes, type, orientation) => {\n let encoding;\n const config = context.config();\n const { classPrefix, gridLines, gridBands } = config;\n const gridLineColor = gridLines.color;\n const zeroLineColor = gridLines.zeroLineColor;\n const defClassName = type === 'band' ? gridBands.defClassName : gridLines.defClassName;\n const gridBandColor = gridBands[orientation].color;\n const axis = axes[orientation][0];\n const isLinearScale = axis.constructor.type() === LINEAR;\n\n if (type === 'band' && isLinearScale) {\n encoding = {\n [orientation]: `${orientation}value`,\n [`${orientation}0`]: `${orientation}value0`\n };\n } else {\n encoding = {\n [orientation]: isLinearScale ? `${orientation}value` : `${orientation}dim`\n };\n }\n encoding.color = {\n value: (data, i) => {\n const isNegativeDomain = isLinearScale && axis.domain()[0] < 0;\n if (type === 'band') {\n return gridBandColor[i % 2];\n }\n return isNegativeDomain && data[orientation] === 0 ? zeroLineColor : gridLineColor;\n }\n };\n\n return {\n definition: {\n defClassName: `${defClassName}-${orientation}`,\n className: config.className,\n individualClassName: (data, i) => {\n let className;\n const isNegativeDomain = isLinearScale && axis.domain()[0] < 0;\n if (isNegativeDomain && data.y === 0 && type !== 'band') {\n className = `${classPrefix}-axis-zero-line`;\n } else {\n className = `${classPrefix}-grid-${type}-${orientation}-${i % 2}`;\n }\n return className;\n },\n [`pad${orientation.toUpperCase()}`]: type === 'band' ? 0 : undefined,\n encoding\n },\n axes: {\n [orientation]: axis\n },\n interactive: false\n };\n};\n\nconst getDefaultVisibilty = (show, axis) => {\n if (axis.constructor.type() === LINEAR) {\n return show;\n }\n return false;\n};\n\nexport const getGridLayerDefinitions = (context, config, type) => ['x', 'y'].map((axisType) => {\n const show = defaultValue(config[axisType] && config[axisType].show,\n getDefaultVisibilty(config.show, context.axes()[axisType][0]));\n\n return show ? getLayerDefinition(context, context.axes(), type, axisType) : undefined;\n}).filter(d => d !== undefined);\n\nexport const getGridLayerData = (axes, fields, fieldsConfig) => {\n const gridData = {};\n ['x', 'y'].forEach((type) => {\n let ticks = axes[type][0].getTickValues();\n const subtype = getObjProp(fieldsConfig, getObjProp(fields, type, 0).getMembers()[0], 'def', 'subtype');\n const jsonData = [];\n const schema = [\n {\n name: 'yvalue',\n type: 'measure'\n }, {\n name: 'xvalue',\n type: 'measure'\n },\n {\n name: 'yvalue0',\n type: 'measure'\n }, {\n name: 'xvalue0',\n type: 'measure'\n }, {\n name: 'xdim',\n type: 'dimension',\n subtype\n }, {\n name: 'ydim',\n type: 'dimension',\n subtype\n }\n ];\n const len = Math.max(ticks.length);\n ticks = subtype === DimensionSubtype.TEMPORAL ? ticks.map(d => d.getTime()) : ticks;\n for (let i = 0; i < len; i += 1) {\n jsonData.push({\n [`${type}value`]: ticks[i],\n [`${type}value0`]: ticks[i + 1],\n [`${type}dim`]: ticks[i],\n [`${type}dim`]: ticks[i]\n });\n }\n gridData[type] = new DataModel(jsonData, schema);\n });\n return gridData;\n};\n\nexport const createGridLineLayer = (context, data) => {\n const vuConf = context.config();\n const dependencies = context._layerDeps;\n const measurement = {\n width: context.width(),\n height: context.height()\n };\n\n ['band', 'line'].forEach((type) => {\n let mark;\n let config;\n let instances;\n if (type === 'band') {\n mark = 'bar';\n config = vuConf.gridBands;\n instances = context._gridbands;\n } else {\n mark = 'tick';\n config = vuConf.gridLines;\n instances = context._gridlines;\n }\n const definitions = getGridLayerDefinitions(context, config, type);\n\n definitions.forEach((atomicDef, i) => {\n let layer;\n const definition = atomicDef.definition;\n const axesObj = atomicDef.axes;\n const sConf = layerFactory.getSerializedConf(mark, definition);\n sConf.mark = mark;\n if (!instances[i]) {\n layer = layerFactory.getLayerInstance(sConf);\n layer.dependencies(dependencies);\n } else {\n layer = instances[i];\n }\n\n layer.config(sConf)\n .measurement(measurement)\n .data(axesObj.y ? data.y : data.x)\n .dataProps({\n timeDiffs: context.store().get(TIMEDIFFS)\n })\n .axes(axesObj);\n instances[i] = layer;\n });\n });\n};\n\nexport const renderGridLineLayers = (context, container) => {\n const axes = context.axes();\n const config = context.config();\n const classPrefix = config.classPrefix;\n\n if (axes && ((axes.x && axes.x.length) || (axes.y && axes.y.length))) {\n const gridBandData = getGridLayerData(axes, context.fields(), context.data().getFieldsConfig());\n createGridLineLayer(context, gridBandData);\n [[context._gridlines, `${classPrefix}-${GRIDLINEPARENTGROUPCLASS}`],\n [context._gridbands, `${classPrefix}-${GRIDBANDPARENTGROUPCLASS}`]].forEach((entry) => {\n const [instances, parentGroupClass] = entry;\n const mountPoint = makeElement(container, 'g', [1], `.${parentGroupClass}`);\n const className = `${parentGroupClass}-group`;\n makeElement(mountPoint, 'g', instances, `.${className}`, {\n update: (group, instance) => {\n instance.mount(group.node());\n }\n });\n });\n }\n};\n","import { CLASSPREFIX, CONSOLIDATED } from './enums/constants';\n\n/**\n * Returns the default configuration of the visual unit\n * @return {Object} Default configuration of visual unit\n */\nexport const defaultConfig = {\n classPrefix: CLASSPREFIX,\n defClassName: 'visual-unit',\n className: '',\n trackerClassName: 'visual-unit-tracker',\n gridLines: {\n defClassName: 'axis-grid-lines',\n className: '',\n show: true,\n color: '#efefef',\n zeroLineColor: '#b6b6b6'\n },\n gridBands: {\n defClassName: 'axis-grid-bands',\n className: '',\n show: false,\n y: {\n color: ['#fff', '#fbfbfb']\n },\n x: {\n color: ['#fff', '#f9f9f9']\n }\n },\n arcLayerClassName: 'layer-arc',\n interaction: {\n tooltip: {\n mode: CONSOLIDATED\n }\n },\n sideEffectClassName: 'side-effect-container'\n};\n","export const CLASSPREFIX = 'muze';\nexport const IDFIELD = '__id__';\nexport const GRIDLINEPARENTGROUPCLASS = 'grid-lines';\nexport const GRIDBANDPARENTGROUPCLASS = 'grid-bands';\nexport const CONSOLIDATED = 'consolidated';\nexport const FRAGMENTED = 'fragmented';\nexport const FACET_BY_FIELDS = 'facetByFields';\nexport const RETINAL_FIELDS = 'retinalFields';\nexport const PARENT_ALIAS = 'parentAlias';\nexport const LAYERS = 'layers';\nexport const CACHED_DATA = 'cachedData';\nexport const STORE = 'store';\n\n","import { mergeRecursive } from 'muze-utils';\nimport { defaultConfig } from './default-config';\nimport { CONFIG, LAYERDEFS, AXES, WIDTH, HEIGHT, MOUNT, TRANSFORM, FIELDS, DATA } from './enums/reactive-props';\n\nexport default {\n [CONFIG]: {\n value: null,\n meta: {\n sanitization: (config, oldConfig) => (\n mergeRecursive(oldConfig || mergeRecursive({}, defaultConfig), config)\n )\n }\n },\n [LAYERDEFS]: {\n value: null\n },\n [AXES]: {\n value: null,\n meta: {\n sanitization: (axes, prevAxes) => Object.assign(prevAxes || {}, axes)\n }\n },\n [WIDTH]: {\n value: null\n },\n [HEIGHT]: {\n value: null\n },\n [MOUNT]: {\n value: null\n },\n [TRANSFORM]: {\n value: null\n },\n [FIELDS]: {\n value: null\n },\n [DATA]: {\n value: null,\n meta: {\n preset: (data, context) => {\n if (context._cache) {\n const cachedData = context.cachedData();\n context.cachedData([...cachedData, data]);\n } else {\n const oldData = context.data();\n oldData && oldData.unsubscribe('propagation');\n context.cachedData([data]);\n }\n }\n }\n }\n};\n","import { DimensionSubtype } from 'muze-utils';\nimport * as PROPS from './enums/reactive-props';\nimport {\n transformDataModels,\n getDimensionMeasureMap,\n createLayers,\n attachDataToLayers,\n attachAxisToLayers,\n unionDomainFromLayers,\n getLayerAxisIndex\n} from './helper';\n\nconst axisMap = {\n 0: 'primary',\n 1: 'secondary'\n};\nconst axisProps = [PROPS.primaryXAxisUpdated, PROPS.secondaryXAxisUpdated, PROPS.primaryYAxisUpdated,\n PROPS.secondaryYAxisUpdated];\n\nexport const listenerMap = context => ([\n {\n type: 'registerImmediateListener',\n props: [PROPS.AXES],\n listener: ([, axes]) => {\n ['x', 'y'].forEach((type) => {\n const axesArr = axes[type] || [];\n axesArr.forEach((axis, i) => {\n axis.on('update', () => {\n context.store().commit(PROPS[`${axisMap[i]}${axis.isReverse() ? 'Y' : 'X'}AxisUpdated`], true);\n });\n });\n });\n }\n },\n {\n type: 'registerImmediateListener',\n props: [PROPS.CONFIG],\n listener: ([, config]) => {\n config && context.firebolt().config(config.interaction);\n }\n },\n {\n type: 'computed',\n props: [PROPS.LAYERSCREATED],\n listener: fetch => fetch(PROPS.LAYERDEFS, PROPS.FIELDS, (layerDefs, fields) => {\n const layerDefsValue = layerDefs.value;\n const fieldsVal = fields.value;\n if (layerDefsValue && fieldsVal) {\n const layers = createLayers(context, layerDefs.value);\n context.layers(layers);\n context._layerAxisIndex = getLayerAxisIndex(context.layers(), fieldsVal);\n context._lifeCycleManager.notify({ client: layers, action: 'initialized', formalName: 'layer' });\n return true;\n }\n return null;\n })\n },\n {\n type: 'computed',\n props: [PROPS.TIMEDIFFS],\n listener: fetch => fetch(PROPS.DATA, PROPS.FIELDS, PROPS.AXES, (data, fields, axes) => {\n const dataModel = data.value;\n const axisFields = fields.value;\n const axesObj = axes.value;\n if (dataModel && axisFields && axesObj) {\n const timeDiffs = {};\n const timeDiffsByField = {};\n ['x', 'y'].forEach((type) => {\n const field = axisFields[type][0];\n if (field && field.subtype() === DimensionSubtype.TEMPORAL) {\n timeDiffs[type] = field.getMinDiff();\n timeDiffsByField[field] = timeDiffs[type];\n axesObj[type].forEach(axis => axis.minDiff(timeDiffs[type]));\n }\n });\n context._timeDiffsByField = timeDiffsByField;\n return timeDiffs;\n }\n return null;\n })\n },\n {\n type: 'computed',\n props: [PROPS.DATADOMAIN],\n listener: fetch => fetch(PROPS.DATA, PROPS.LAYERSCREATED, PROPS.AXES, PROPS.TRANSFORM,\n (dataModel, layersCreated, axes, transform) => {\n const dataModelVal = dataModel.value;\n const layerAxisIndexVal = context._layerAxisIndex;\n const axesVal = axes.value;\n if (dataModelVal && layersCreated.value && axesVal && layerAxisIndexVal) {\n const layers = context.layers();\n const dataModels = transformDataModels(transform.value, dataModelVal);\n context._transformedDataModels = dataModels;\n context._lifeCycleManager.notify({ client: layers, action: 'beforeupdate', formalName: 'layer' });\n attachDataToLayers(layers, dataModelVal, context._transformedDataModels);\n context._dimensionMeasureMap = getDimensionMeasureMap(layers,\n dataModelVal.getFieldsConfig(), context.retinalFields());\n attachAxisToLayers(axesVal, layers, layerAxisIndexVal);\n context._lifeCycleManager.notify({ client: layers, action: 'updated', formalName: 'layer' });\n return unionDomainFromLayers(layers, context.fields(),\n layerAxisIndexVal, dataModelVal.getFieldsConfig());\n }\n return null;\n })\n },\n {\n type: 'registerImmediateListener',\n props: [PROPS.DATADOMAIN],\n listener: ([, dataDomain]) => {\n dataDomain !== null && context.updateAxisDomain(dataDomain);\n }\n },\n {\n type: 'registerChangeListener',\n props: [PROPS.MOUNT, PROPS.DATA, ...axisProps],\n listener: (mount, data) => {\n const container = mount[1];\n if (container && data[1]) {\n context.render(container);\n }\n }\n }\n]);\n","import { FACET_BY_FIELDS, RETINAL_FIELDS, PARENT_ALIAS, LAYERS, STORE, CACHED_DATA } from './enums/constants';\n\nexport const PROPS = {\n [FACET_BY_FIELDS]: {},\n [RETINAL_FIELDS]: {},\n [PARENT_ALIAS]: {},\n [LAYERS]: {},\n [STORE]: {},\n [CACHED_DATA]: {},\n detailFields: {}\n};\n","import { CommonProps } from 'muze-utils';\nimport { DATA, MOUNT } from '../enums/reactive-props';\n\nexport const clearActionHistory = (context) => {\n const actionHistory = context._actionHistory;\n for (const key in actionHistory) {\n if (actionHistory[key].isMutableAction) {\n delete context._actionHistory[key];\n }\n }\n};\n\nexport const dispatchQueuedSideEffects = (context) => {\n const queuedSideEffects = context._queuedSideEffects;\n Object.entries(queuedSideEffects).forEach((entry) => {\n const sideEffect = entry[1];\n context.dispatchSideEffect(sideEffect.name, ...sideEffect.params);\n });\n context._queuedSideEffects = {};\n};\n\nexport const registerListeners = (firebolt) => {\n const context = firebolt.context;\n const store = context.store();\n\n store.registerImmediateListener([DATA, MOUNT], (dataModel, mount) => {\n const dm = dataModel[1];\n\n if (dm && mount[1]) {\n const originalData = firebolt.context.cachedData()[0];\n firebolt.createSelectionSet(firebolt.context.data().getData().uids);\n firebolt.attachPropagationListener(originalData);\n }\n }, true);\n\n context._layerDeps.throwback.registerChangeListener([CommonProps.ON_LAYER_DRAW],\n ([, onlayerdraw]) => {\n if (onlayerdraw) {\n firebolt.initializeSideEffects();\n firebolt.config(context.config().interaction);\n firebolt.mapActionsAndBehaviour();\n dispatchQueuedSideEffects(firebolt);\n clearActionHistory(firebolt);\n }\n });\n};\n\n","import { DimensionSubtype } from 'muze-utils';\n\nconst getRangeFromData = (instance, selectionDataModel, propConfig) => {\n let criteria;\n const dataObj = selectionDataModel[0].getData();\n const propCriteria = propConfig.payload.criteria;\n const sourceIdentifiers = propConfig.sourceIdentifiers;\n const schema = dataObj.schema;\n const fieldMap = instance.data().getFieldsConfig();\n const data = dataObj.data;\n const isActionSourceSame = instance.id() === propConfig.sourceId;\n\n if (isActionSourceSame) {\n criteria = propCriteria;\n } else {\n criteria = (sourceIdentifiers !== null) ? schema.reduce((acc, obj, index) => {\n let range;\n const field = obj.name;\n const fieldObj = fieldMap[field];\n const type = fieldObj && (fieldObj.def.subtype ? fieldObj.def.subtype : fieldObj.def.type);\n const isDimension = type === DimensionSubtype.CATEGORICAL;\n\n if (!fieldObj) {\n return acc;\n }\n\n if (!isDimension) {\n range = [Math.min(...data.map(d => d[index])), Math.max(...data.map(d => d[index]))];\n } else {\n range = data.map(d => d[index]);\n }\n acc[field] = range;\n return acc;\n }, {}) : null;\n }\n return criteria;\n};\n\nexport const payloadGenerator = {\n brush: (instance, selectionDataModel, propConfig) => {\n const propPayload = propConfig.payload;\n const criteria = getRangeFromData(instance, selectionDataModel, propConfig);\n const payload = Object.assign({}, propPayload);\n payload.criteria = criteria;\n return payload;\n },\n\n __default: (instance, selectionDataModel, propConfig) => {\n const propPayload = propConfig.payload;\n const sourceIdentifiers = propConfig.sourceIdentifiers;\n const dataObj = selectionDataModel[0].getData();\n let schema = dataObj.schema;\n const payload = Object.assign({}, propPayload);\n schema = dataObj.schema;\n const data = dataObj.data;\n const sourceFields = schema.map(d => d.name);\n payload.criteria = !sourceIdentifiers && selectionDataModel[0].isEmpty() ? null :\n [sourceFields, ...data];\n payload.sourceFields = sourceIdentifiers ? sourceIdentifiers.getSchema().map(d => d.name) : [];\n return payload;\n }\n};\n\n","import { isSimpleObject, FieldType, DataModel } from 'muze-utils';\n\nconst getModelWithFacetData = (dm, data) => {\n const dataObj = dm.getData();\n const schema1 = dataObj.schema;\n const data1 = dataObj.data;\n const jsonData = [];\n const schema2 = data[0].map(d => ({\n name: `${d}`,\n type: FieldType.DIMENSION\n }));\n const data2 = data[1];\n\n data1.forEach((d) => {\n const tuple = {};\n schema1.forEach((obj, i) => {\n tuple[obj.name] = d[i];\n });\n schema2.forEach((obj, i) => {\n tuple[obj.name] = data2[i];\n });\n jsonData.push(tuple);\n });\n\n return new DataModel(jsonData, [...schema1, ...schema2]);\n};\n\nexport const propagateValues = (instance, action, config = {}) => {\n let propagationData;\n const payload = config.payload;\n const selectionSet = config.selectionSet;\n const propagationFieldInf = config.propagationFields[action] || {};\n const propagationFields = propagationFieldInf.fields || [];\n const append = propagationFieldInf.append;\n const criteria = payload.criteria;\n const context = instance.context;\n const dataModel = context.cachedData()[0];\n const sourceId = context.id();\n const sideEfffects = instance.sideEffects();\n const behaviourEffectMap = instance._behaviourEffectMap;\n const mergedModel = selectionSet.mergedEnter.model;\n const fieldsConfig = dataModel.getFieldsConfig();\n payload.sourceUnit = sourceId;\n payload.action = action;\n payload.sourceCanvas = context.parentAlias();\n const propagationBehaviourMap = instance._propagationBehaviourMap;\n const propagationBehaviour = propagationBehaviourMap[action] || action;\n\n let propFields = [];\n if (criteria === null) {\n propagationData = null;\n } else if (isSimpleObject(criteria)) {\n propFields = Object.keys(criteria || {});\n propagationData = mergedModel ? mergedModel.project(propFields) : null;\n } else {\n propFields = criteria[0];\n propagationData = mergedModel ? mergedModel.project(propFields) : null;\n }\n\n const facetByFields = context.facetByFields();\n if (propagationData !== null && propagationFields.length) {\n const fields = propagationData.getData().schema.map(d => d.name);\n propagationData = getModelWithFacetData(propagationData, facetByFields);\n propFields = append ? [...fields, ...propagationFields] : propagationFields;\n propagationData = propagationData.project(propFields);\n }\n\n let propagateInterpolatedValues = false;\n if (propFields.length && propFields.every(field => fieldsConfig[field] &&\n fieldsConfig[field].def.type === FieldType.MEASURE)) {\n propagateInterpolatedValues = true;\n }\n\n const groupId = context.parentAlias();\n payload.action = action;\n const behaviourInstance = instance._actions.behavioural[propagationBehaviour];\n const isMutableAction = behaviourInstance ? behaviourInstance.constructor.mutates() : false;\n\n const filterFn = (entry, propagationConf) => {\n const effects = behaviourEffectMap[entry.config.action];\n const mutates = entry.config.groupId ?\n effects.some(d => sideEfffects[d.name || d].constructor.mutates()) : true;\n return entry.config.groupId !== propagationConf.groupId && mutates;\n };\n\n const sourceBehaviour = instance._actions.behavioural[action];\n const mutates = sourceBehaviour ? sourceBehaviour.constructor.mutates() : false;\n let propConfig = {\n payload,\n action,\n criteria: propagationData,\n isMutableAction: mutates,\n propagateInterpolatedValues,\n groupId,\n sourceId: mutates ? groupId : sourceId,\n filterFn,\n enabled: (propConf, firebolt) => (action !== propagationBehaviour ?\n propConf.payload.sourceCanvas === firebolt.context.parentAlias() : true)\n };\n\n dataModel.propagate(propagationData, propConfig, true);\n\n if (action !== propagationBehaviour) {\n propConfig = {\n payload,\n sourceId: isMutableAction ? groupId : sourceId,\n criteria: propagationData,\n isMutableAction,\n propagateInterpolatedValues,\n action: propagationBehaviour,\n groupId,\n applyOnSource: action === propagationBehaviour,\n enabled: (propConf, firebolt) => propConf.payload.sourceCanvas !== firebolt.context.parentAlias(),\n filterFn\n };\n\n dataModel.propagate(propagationData, propConfig, true, {\n filterImmutableAction: (actionInf, propInf) => actionInf.groupId !== propInf.groupId\n });\n }\n};\n","import { FieldType } from 'muze-utils';\nimport { Firebolt, SpawnableSideEffect } from '@chartshq/muze-firebolt';\nimport { registerListeners } from './helper';\nimport { payloadGenerator } from './payload-generator';\nimport { propagateValues } from './data-propagator';\n\n/**\n * This class manages the interactions of visual unit. It associates physical actions with\n * behavioural actions. It also propagates the behavioural actions to other datamodels.\n */\nexport default class UnitFireBolt extends Firebolt {\n constructor (...params) {\n super(...params);\n registerListeners(this);\n }\n\n propagate (behaviour, payload, selectionSet, sideEffects) {\n propagateValues(this, behaviour, {\n payload,\n selectionSet,\n sideEffects,\n propagationFields: this._propagationFields\n });\n }\n\n getApplicableSideEffects (sideEffects, payload, propagationInf) {\n const context = this.context;\n const unitId = context.id();\n const aliasName = context.parentAlias();\n const propagationSourceCanvas = propagationInf.propPayload && propagationInf.propPayload.sourceCanvas;\n const sourceUnitId = propagationInf.propPayload && propagationInf.propPayload.sourceUnit;\n const sourceSideEffects = this._sourceSideEffects;\n const sideEffectInstances = this.sideEffects();\n const actionOnSource = sourceUnitId ? sourceUnitId === unitId : true;\n\n const applicableSideEffects = payload.sideEffects ? [{\n effects: payload.sideEffects,\n behaviours: [payload.action]\n }] : sideEffects;\n applicableSideEffects.forEach((d) => {\n let mappedEffects = d.effects;\n mappedEffects = mappedEffects.filter((se) => {\n const mutates = sideEffectInstances[se.name || se].constructor.mutates();\n if (mutates && propagationInf.isMutableAction === false) {\n return false;\n }\n if (!actionOnSource && payload.criteria !== null) {\n const sideEffectChecker = sourceSideEffects[se.name || se];\n return sideEffectChecker ? sideEffectChecker(propagationInf.propPayload, context) : true;\n }\n if (propagationSourceCanvas === aliasName || actionOnSource) {\n return se.applyOnSource !== false;\n }\n\n return true;\n });\n d.effects = mappedEffects;\n });\n return applicableSideEffects;\n }\n\n shouldApplySideEffects (propagate) {\n return propagate === false;\n }\n\n onDataModelPropagation () {\n return (data, config) => {\n let isSourceFieldPresent = true;\n let isMutableAction = false;\n const propPayload = config.payload;\n const sourceIdentifiers = config.sourceIdentifiers;\n const enabledFn = config.enabled;\n const action = config.action;\n const payloadFn = payloadGenerator[action] || payloadGenerator.__default;\n\n if (sourceIdentifiers) {\n const fieldsConfig = sourceIdentifiers.getFieldsConfig();\n const sourceIdentifierFields = Object.keys(fieldsConfig);\n const propFields = Object.keys(data[0].getFieldsConfig());\n if (!Object.values(fieldsConfig).some(d => d.def.type === FieldType.MEASURE)) {\n isSourceFieldPresent = sourceIdentifierFields.some(d => propFields.indexOf(d) !== -1);\n }\n }\n\n const payload = payloadFn(this.context, data, config);\n const sourceBehaviours = this._sourceBehaviours;\n const filterFn = sourceBehaviours[action] || sourceBehaviours['*'];\n let enabled = true;\n\n if (filterFn) {\n enabled = filterFn(propPayload || {}, this.context);\n }\n\n if (enabledFn) {\n enabled = enabledFn(config, this) && enabled !== false;\n }\n\n if (enabled) {\n const effects = this._behaviourEffectMap[action];\n const sideEffectInstances = this.sideEffects();\n isMutableAction = config.groupId ?\n effects.some(d => sideEffectInstances[d.name || d].constructor.mutates()) : config.isMutableAction;\n\n const propagationInf = {\n propagate: false,\n data,\n propPayload,\n sourceIdentifiers,\n persistent: false,\n isSourceFieldPresent,\n sourceId: config.propagationSourceId,\n isMutableAction: config.isMutableAction\n };\n\n this._actionHistory[action] = {\n payload,\n propagationInf,\n isMutableAction\n };\n this.dispatchBehaviour(action, payload, propagationInf);\n }\n };\n }\n\n initializeSideEffects () {\n super.initializeSideEffects();\n const sideEffects = this.sideEffects();\n for (const key in sideEffects) {\n if ({}.hasOwnProperty.call(sideEffects, key)) {\n sideEffects[key] instanceof SpawnableSideEffect && sideEffects[key].drawingContext(() => {\n const context = this.context;\n return context.getDrawingContext();\n });\n }\n }\n }\n\n prepareSelectionSets (behaviours) {\n const data = this.context.data();\n if (data) {\n this.createSelectionSet(data.getData().uids, behaviours);\n }\n return this;\n }\n\n remove () {\n this.context.cachedData()[0].unsubscribe('propagation');\n return this;\n }\n}\n","import { layerFactory } from '@chartshq/visual-layer';\nimport {\n setAttrs,\n CommonProps,\n getUniqueId,\n getQualifiedClassName,\n selectElement,\n transactor,\n Store,\n makeElement,\n registerListeners,\n generateGetterSetters,\n getDataModelFromIdentifiers,\n isSimpleObject,\n transposeArray,\n FieldType\n} from 'muze-utils';\nimport { physicalActions, sideEffects, behaviouralActions, behaviourEffectMap } from '@chartshq/muze-firebolt';\nimport { actionBehaviourMap } from './firebolt/action-behaviour-map';\nimport {\n renderLayers,\n getNearestDimensionalValue,\n removeLayersBy,\n getLayersBy,\n getLayerFromDef,\n attachAxisToLayers,\n getLayerAxisIndex,\n createSideEffectGroup,\n getAdjustedDomain,\n resolveEncodingTransform\n} from './helper';\nimport { renderGridLineLayers } from './helper/grid-lines';\nimport localOptions from './local-options';\nimport { listenerMap } from './listener-map';\nimport {\n primaryYAxisUpdated,\n primaryXAxisUpdated,\n secondaryXAxisUpdated,\n secondaryYAxisUpdated,\n DATADOMAIN,\n TIMEDIFFS\n} from './enums/reactive-props';\nimport { PROPS } from './props';\nimport UnitFireBolt from './firebolt';\nimport './styles.scss';\n\nconst FORMAL_NAME = 'unit';\n\n/**\n * @module VisualUnit\n * A hierarchical component of renderer which manages multiple layers. This logical\n * module is responsible for layouting layers, attach axis with them, resolving conflicts of layers.\n */\n\n/**\n * Basic unit implementaiton\n * @class VisualUnit\n */\nexport default class VisualUnit {\n\n /**\n * Creates instance of visualization unit\n * @param registry {Object} Component registry\n * @param dependencies {Object} Dependencies required by visual unit.\n */\n constructor (registry, dependencies) {\n this._id = getUniqueId();\n this._dependencies = dependencies;\n this._layerDeps = {\n throwback: new Store({\n onlayerdraw: false\n }),\n smartLabel: dependencies.smartLabel\n };\n this._renderedResolve = null;\n this._renderedPromise = new Promise((resolve) => {\n this._renderedResolve = resolve;\n });\n this._layerDeps.throwback.registerChangeListener([CommonProps.ON_LAYER_DRAW], () => {\n this._renderedResolve();\n this._lifeCycleManager.notify({ client: this.layers(), action: 'drawn', formalName: 'layer' });\n });\n\n this._lifeCycleManager = dependencies.lifeCycleManager;\n this._layersMap = {};\n this._gridlines = [];\n this._gridbands = [];\n this._layerAxisIndex = {};\n this._transformedDataModels = {};\n\n layerFactory.setLayerRegistry(registry.layerRegistry);\n generateGetterSetters(this, PROPS);\n this.cachedData([]);\n this.store(new Store({\n [primaryXAxisUpdated]: null,\n [primaryYAxisUpdated]: null,\n [secondaryXAxisUpdated]: null,\n [secondaryYAxisUpdated]: null\n }));\n transactor(this, localOptions, this.store().model);\n this.firebolt(new UnitFireBolt(this, {\n physical: physicalActions,\n behavioural: behaviouralActions,\n physicalBehaviouralMap: actionBehaviourMap\n }, sideEffects, behaviourEffectMap));\n registerListeners(this, listenerMap);\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof VisualUnit\n */\n static formalName () {\n return FORMAL_NAME;\n }\n\n /**\n * Static helper for creates a unit instance\n *\n * @param {Object} [id] optional unique identifier for a unit; , id is calculated internally\n * @param {DataModel} data instance of datamodel\n * @param {Array.} layers layer configuration\n * @param {Object} config configurtion for the visual unit\n * @return {VisualUnit} Instance of a unit\n */\n static create (...params) {\n return new this(...params);\n }\n\n /**\n *\n *\n * @readonly\n * @memberof VisualUnit\n */\n firebolt (...firebolt) {\n if (firebolt.length) {\n this._firebolt = firebolt[0];\n return this;\n }\n return this._firebolt;\n }\n\n /**\n * Gets the domain for all axes of this visual unit.\n * @return {Object} Domains of each data field.\n */\n getDataDomain () {\n return this.store().get(DATADOMAIN);\n }\n\n /**\n * Retrieves the id created for this instance of visual unit\n * @return {string} id associated with the instance\n */\n id () {\n return this._id;\n }\n\n /**\n *\n *\n * @returns\n * @memberof VisualUnit\n */\n lockModel () {\n this._store.model.lock();\n return this;\n }\n\n /**\n *\n *\n * @returns\n * @memberof VisualUnit\n */\n unlockModel () {\n this._store.model.unlock();\n return this;\n }\n\n timeDiffsByField (...params) {\n if (params.length) {\n return this;\n }\n return this._timeDiffsByField;\n }\n\n /**\n * Renders the visual unit. It creates the layout and renders the axes and layers.\n * @return {VisualUnit} Instance of visual unit.\n */\n render (container) {\n const config = this.config();\n const { className, defClassName, sideEffectClassName, classPrefix } = config;\n const qualifiedClassName = getQualifiedClassName(defClassName, this.id(), config.classPrefix);\n const width = this.width();\n const height = this.height();\n const containerSelection = selectElement(container).style('position', 'relative');\n\n this._rootSvg = makeElement(containerSelection, 'svg', [null], className)\n .style('width', `${width}px`).style('height', `${height}px`);\n\n const node = this._rootSvg.node();\n setAttrs(node, {\n width,\n height,\n class: qualifiedClassName.join(' ')\n });\n renderGridLineLayers(this, node);\n renderLayers(this, node, this.layers(), {\n width,\n height\n });\n this._sideEffectGroup = createSideEffectGroup(node, `${classPrefix}-${sideEffectClassName}`);\n return this;\n }\n\n done () {\n return this._renderedPromise;\n }\n /**\n *\n *\n * @returns\n * @memberof VisualUnit\n */\n enableCaching () {\n this._cache = true;\n return this;\n }\n\n /**\n *\n *\n * @returns\n * @memberof VisualUnit\n */\n clearCaching () {\n this._cache = false;\n this.cachedData([this.cachedData()[0]]);\n return this;\n }\n\n /**\n *\n *\n * @returns\n * @memberof VisualUnit\n */\n getDrawingContext () {\n const rootSvg = this._rootSvg && this._rootSvg.node();\n const width = this.width();\n const height = this.height();\n return {\n htmlContainer: this.mount(),\n svgContainer: rootSvg,\n width,\n height,\n sideEffectGroup: this._sideEffectGroup,\n parentContainer: this.parentContainer(),\n xOffset: 0,\n yOffset: 0\n };\n }\n\n /**\n * Returns the serialized configuration of visual unit.\n * @return {Object} serialized configuration\n */\n serialize () {\n return {\n layers: this.layers().map(layer => layer.serialize()),\n config: this.config(),\n axes: this.store().get('axes').map(axis => axis.serialize())\n };\n }\n\n /**\n *\n *\n * @param {*} layerDef\n * @returns\n * @memberof VisualUnit\n */\n addLayer (layerDef) {\n const layerName = layerDef.name;\n const layer = this.getLayerByName(layerName);\n const measurement = {\n width: this.width(),\n height: this.height()\n };\n\n if (layer) {\n return [layer];\n }\n const serializedDef = layerFactory.getSerializedConf(layerDef.mark, layerDef);\n const instances = Object.values(getLayerFromDef(this, serializedDef));\n this.layers().push(...instances);\n const layerAxisIndex = getLayerAxisIndex(instances, this.fields());\n this._layerAxisIndex = Object.assign(this._layerAxisIndex, layerAxisIndex);\n attachAxisToLayers(this.axes(), instances, layerAxisIndex);\n const store = { unit: this, layers: {} };\n this.layers().forEach((inst) => {\n store.layers[inst.alias()] = inst;\n });\n instances.forEach((lyr) => {\n resolveEncodingTransform(lyr, store);\n lyr.measurement(measurement);\n lyr.dataProps({\n timeDiffs: this.store().get(TIMEDIFFS)\n });\n });\n return instances;\n }\n\n /**\n *\n *\n * @returns\n * @memberof VisualUnit\n */\n remove () {\n const lifeCycleManager = this._dependencies.lifeCycleManager;\n lifeCycleManager.notify({ client: this, action: 'beforeremove', formalName: 'unit' });\n this.store().unsubscribeAll();\n selectElement(this.mount()).remove();\n this.firebolt().remove();\n // Remove layers\n lifeCycleManager.notify({ client: this.layers(), action: 'beforeremove', formalName: 'layer' });\n this.layers().forEach(layer => layer.remove());\n lifeCycleManager.notify({ client: this.layers(), action: 'removed', formalName: 'layer' });\n lifeCycleManager.notify({ client: this, action: 'removed', formalName: 'unit' });\n return this;\n }\n\n /**\n *\n *\n * @param {*} identifiers\n * @returns\n * @memberof VisualUnit\n */\n getDataModelFromIdentifiers (identifiers, mode, parentModel) {\n if (identifiers === null) {\n return null;\n }\n const dataModel = parentModel || this.data();\n return getDataModelFromIdentifiers(dataModel, identifiers, mode);\n }\n\n /**\n *\n *\n * @returns\n * @memberof VisualUnit\n */\n resetData () {\n this.data(this.cachedData()[0]);\n return this;\n }\n\n /**\n *\n *\n * @returns\n * @memberof VisualUnit\n */\n getSourceInfo () {\n return {\n dimensionMeasureMap: this._dimensionMeasureMap,\n fields: this.fields(),\n data: this.data(),\n axes: this.axes()\n };\n }\n\n /**\n *\n *\n * @returns\n * @memberof VisualUnit\n */\n getDefaultTargetContainer () {\n const { classPrefix, defClassName } = this.config();\n return [`.${classPrefix}-${defClassName}`];\n }\n\n /**\n *\n *\n * @param {*} type\n * @returns\n * @memberof VisualUnit\n */\n getLayersByType (type) {\n const layers = getLayersBy(this.layers(), 'type', type);\n return layers;\n }\n\n /**\n *\n *\n * @param {*} name\n * @returns\n * @memberof VisualUnit\n */\n getLayerByName (name) {\n const layers = getLayersBy(this.layers(), 'name', name);\n return layers[0];\n }\n\n /**\n *\n *\n * @param {*} domain\n * @returns\n * @memberof VisualUnit\n */\n updateAxisDomain (domain) {\n ['x', 'y'].forEach((type) => {\n const axes = this.axes()[type];\n let min = [];\n let max = [];\n let dom;\n axes && axes.forEach((axis, i) => {\n const field = this.fields()[type][i];\n dom = domain[`${this.fields()[type][i]}`];\n\n if (field.type() !== FieldType.DIMENSION && dom) {\n min[i] = dom[0];\n max[i] = dom[1];\n }\n });\n if (axes) {\n if (axes.length > 1) {\n const axisConf = axes[0].config();\n if (axes[0].constructor.type() === 'linear') {\n if (axisConf.alignZeroLine) {\n axes.forEach(axis => axis.config({\n nice: false\n }));\n const adjustedDomain = getAdjustedDomain(max, min);\n min = adjustedDomain.min;\n max = adjustedDomain.max;\n }\n\n axes[0].updateDomainCache([min[0], max[0]]);\n axes[1].updateDomainCache([min[1], max[1]]);\n } else {\n axes[0].updateDomainCache(dom);\n axes[1].updateDomainCache(dom);\n }\n } else {\n axes[0].updateDomainCache(dom);\n }\n }\n });\n return this;\n }\n\n /**\n * Finds the nearest point closest to the x and y position.\n * @param {number} x x position.\n * @param {number} y y position.\n * @return {Object} Nearest point.\n */\n getNearestPoint (x, y, args) {\n let pointObj = {\n id: null\n };\n const dimValue = getNearestDimensionalValue(this, {\n x,\n y\n });\n\n if (dimValue !== null && args.getAllPoints) {\n pointObj.id = dimValue;\n const pointInf = this.getMarkInfFromLayers(x, y, args);\n pointObj.target = pointInf && pointInf.id ? pointInf.id : pointObj.id;\n return pointObj;\n }\n\n const markInf = this.getMarkInfFromLayers(x, y, args) || { id: null };\n pointObj = Object.assign({}, markInf);\n\n pointObj.target = markInf.id;\n return pointObj;\n }\n\n getMarkInfFromLayers (x, y, args) {\n const layers = this.layers();\n const len = layers.length;\n let point = null;\n // Iterate through the layers array and fetch the nearest point from each layer. If a valid\n // nearest point is found from any layer, then return that point.\n for (let i = 0; i < len; i++) {\n const layer = layers[i];\n const config = layer.config();\n if (config.interactive !== false) {\n point = layer.getNearestPoint(x, y, args);\n }\n if (point) {\n return point;\n }\n }\n return point;\n }\n\n /**\n *\n *\n * @param {*} identifiers\n * @returns\n * @memberof VisualUnit\n */\n getPlotPointsFromIdentifiers (identifiers, config = {}) {\n let points = [];\n let parsedIdentifiers = identifiers;\n if (identifiers === null) {\n return [];\n }\n const layers = this.layers();\n const len = layers.length;\n if (isSimpleObject(identifiers)) {\n parsedIdentifiers = [Object.keys(identifiers)];\n parsedIdentifiers = [...parsedIdentifiers, ...transposeArray(Object.values(identifiers))];\n }\n for (let i = 0; i < len; i++) {\n const layer = layers[i];\n if (layer.config().interactive !== false) {\n points = [...points, ...layer.getPointsFromIdentifiers(parsedIdentifiers, config)];\n }\n }\n return points;\n }\n\n /**\n *\n *\n * @param {*} name\n * @returns\n * @memberof VisualUnit\n */\n removeLayerByName (name) {\n removeLayersBy('name', name);\n return this;\n }\n\n /**\n *\n *\n * @param {*} type\n * @returns\n * @memberof VisualUnit\n */\n removeLayersByType (type) {\n removeLayersBy('type', type);\n return this;\n }\n\n parentContainer (...container) {\n if (container.length) {\n this._parentContainer = container[0];\n\n return this;\n }\n return this._parentContainer;\n }\n}\n","import { DataModel } from 'muze-utils';\n\nimport { retriveDomainFromData } from './group-utils';\n\n/**\n * Gets name of fields form the variables\n *\n * @param {*} fields1\n * @param {*} [fields2=[]]\n * @return\n */\nconst getFieldNames = (fields1, fields2 = []) => [fields1, fields2].map(fields => fields.reduce((acc, d) => {\n acc = [...acc, ...d.getMembers()];\n return acc;\n}, []));\n\n/**\n * Creates a selected datamodel from a parent datamodel and a set of field names\n *\n * @param {Object} datamodel provided as input\n * @param {Array} fieldNames schema names\n * @param {Array} fieldValues values of those schema names to be selected\n * @return {Object} creates a new selected datamodel\n */\nconst createSelectedDataModel = (datamodel, fieldNames, fieldValues) =>\n datamodel.select(fields => fieldNames.every((field, k) => fields[field].value === fieldValues[k]));\n\n/**\n *\n *\n * @param {*} facets\n * @param {*} keyArray\n * @return\n */\nconst uniqueKeyGenerator = (keyArray, context, depth = 0, val = []) => {\n const {\n facets,\n dataModel,\n uniqueValues\n } = context;\n\n // Get unique keys for the next depth recursively if required\n if (facets[depth + 1]) {\n const field = facets[depth];\n uniqueValues.forEach((value) => {\n const newDm = dataModel.select(fields => fields[field].value === value);\n const nextDepthUniqueValues = retriveDomainFromData(newDm, facets[depth + 1]);\n const newContext = {\n facets,\n dataModel: newDm,\n uniqueValues: nextDepthUniqueValues\n };\n\n uniqueKeyGenerator(keyArray, newContext, depth + 1, [...val, value]);\n });\n } else {\n uniqueValues.forEach((value) => {\n keyArray.push([...val, value]);\n });\n }\n};\n\n/**\n * projects row model based on the set of row and/or column and other projection fields\n *\n * @param {Object} datamodel provided as input\n * @return {Object} Projected datamodel\n */\nconst projectRows = (datamodel, projections) => {\n const {\n allColumnProjections,\n rowProjections,\n optionalProjections\n } = projections;\n\n if (rowProjections.length > 0) {\n return rowProjections.map((projectFields) => {\n const [projFieldNames, colProjFieldNames] = getFieldNames(projectFields, allColumnProjections);\n return datamodel.project([...projFieldNames, ...colProjFieldNames, ...optionalProjections]);\n });\n }\n return [datamodel];\n};\n\n/**\n * Adds the datamodels to current row index based on column fields\n *\n * @param {Array} context current context\n * @param {Array} callback List of facets applied to the current datamodel\n */\nconst pushToMatrix = (context, callback) => {\n let cells = [];\n const {\n matrix,\n datamodel,\n facetInfo,\n fieldInfo\n } = context;\n // Get projected fields for current row\n const {\n rowProjections,\n colProjections,\n optionalProjections\n } = fieldInfo;\n const {\n rowIndex,\n columnIndex\n } = facetInfo;\n const rowProj = rowProjections[(rowIndex) % rowProjections.length] || [];\n\n // Get the cells for the matrix from the return function of the callback on the datamodel.\n // callback function -> (datamodel, {projections, indices}, facets)\n if (colProjections.length > 0) {\n cells = colProjections.map((projectFields, projIdx) => {\n const [colProjFieldNames, rowProjFieldNames] = getFieldNames(projectFields, rowProj);\n const projectedDm = datamodel.project([...colProjFieldNames, ...rowProjFieldNames, ...optionalProjections]);\n const projections = { rowFields: rowProj, columnFields: projectFields };\n const indices = { rowIndex, columnIndex: columnIndex * colProjections.length + projIdx };\n\n return callback(projectedDm, { projections, indices }, facetInfo);\n });\n } else {\n const projections = { rowFields: rowProj, columnFields: [] };\n const indices = { rowIndex, columnIndex };\n\n cells = [callback(datamodel, { projections, indices }, facetInfo)];\n }\n\n matrix[rowIndex] = matrix[rowIndex] || [];\n matrix[rowIndex].push(...cells);\n};\n\n/**\n * Gets Matrixes for corresponding datamodel, facets and projections\n *\n * @param {Object} dataModel input datamodel\n * @param {Object} fieldMap corresponding fieldmap\n * @param {Array} facetsAndProjections contains the set of facets and projections for the matrices\n * @param {Function} callback Callback executed after datamodels are prepared after sel/proj\n * @return {Object} set of matrices with the corresponding row and column keys\n */\nexport const getMatrixModel = (dataModel, fieldInfo, callback) => {\n let rowDataModels = [];\n const rowKeys = [];\n const columnKeys = [];\n const allColumnProjections = [];\n const matrix = [];\n const facetInfo = [];\n const {\n rowFacets,\n colFacets,\n colProjections\n } = fieldInfo;\n\n colProjections.forEach((colProj) => {\n allColumnProjections.push(...colProj);\n });\n fieldInfo.allColumnProjections = allColumnProjections;\n\n // Performing row selection and projection\n if (rowFacets.length > 0) {\n // Get unique values for the root level of facet\n const field = rowFacets[0].toString();\n const firstLevelRowKeys = retriveDomainFromData(dataModel, field);\n\n // Get unique keys in the form of an array of arrays for each row\n uniqueKeyGenerator(rowKeys, { facets: rowFacets, dataModel, uniqueValues: firstLevelRowKeys });\n\n // Apply selection -> projection -> row datamodels\n rowKeys.forEach((val) => {\n // Create faceted datamodel\n const [rowFacetFieldNames] = getFieldNames(rowFacets);\n const selectedDataModel = createSelectedDataModel(dataModel, rowFacetFieldNames, val);\n\n // Project the datamodel based on the number of projections (based on last levels)\n facetInfo.push([rowFacets, val]);\n rowDataModels.push(...projectRows(selectedDataModel, fieldInfo));\n });\n } else {\n // No row facets, hence only row projection\n rowDataModels.push(...projectRows(dataModel, fieldInfo));\n }\n\n // Maintaining set of row datamodels for column resolution\n rowDataModels = rowDataModels.length > 0 ? rowDataModels : [[]];\n\n // Performing column selection and projection\n if (colFacets.length > 0) {\n const colFacetNames = colFacets.map(d => `${d}`);\n // Get unique values for the root level of facet\n const field = colFacetNames[0];\n const firstLevelColumnKeys = retriveDomainFromData(dataModel, field);\n\n // Get unique keys to create faceted datamodels: this time for columns\n uniqueKeyGenerator(columnKeys, {\n facets: colFacetNames,\n dataModel,\n uniqueValues: firstLevelColumnKeys\n });\n\n // For each row in the datamodel, apply selection -> projection -> push the projection to matri\n rowDataModels.forEach((dme, rIndex) => {\n facetInfo[rIndex] = facetInfo[rIndex] || [[], []];\n columnKeys.forEach((val, cIndex) => {\n matrix[rIndex] = matrix[rIndex] || [];\n\n // If datamodel is not present in current row, choose parent datamodel\n const datamodel = dme instanceof DataModel ? dme : dataModel;\n\n // Selection is made on the datamodel for the current row\n const selectedDataModel = createSelectedDataModel(datamodel, colFacetNames, val);\n const context = {\n matrix,\n datamodel: selectedDataModel,\n facetInfo: {\n rowFacets: facetInfo[rIndex],\n colFacets: [colFacets, val],\n rowIndex: rIndex,\n columnIndex: cIndex\n },\n fieldInfo\n };\n pushToMatrix(context, callback);\n });\n });\n } else {\n // No column facets, hence only row projection\n rowDataModels.forEach((dme, rIndex) => {\n facetInfo[rIndex] = facetInfo[rIndex] || [[], []];\n const context = {\n matrix,\n datamodel: dme || dataModel,\n facetInfo: {\n rowFacets: facetInfo[rIndex],\n colFacets: [[], []],\n rowIndex: rIndex,\n columnIndex: 0\n },\n fieldInfo\n };\n\n pushToMatrix(context, callback);\n });\n }\n\n // Getting column keys\n const transposedColKeys = columnKeys.length > 0 ? columnKeys[0].map((col, i) =>\n columnKeys.map(row => row[i])) : columnKeys;\n\n return { matrix, rowKeys, columnKeys: transposedColKeys };\n};\n","import { AxisOrientation } from '@chartshq/muze-axis';\nimport { getObjProp, FieldType } from 'muze-utils';\nimport { getMatrixModel } from './matrix-model';\nimport {\n getCellKey,\n isDistributionEqual,\n mutateAxesFromMap,\n createSelection,\n getFieldsFromSuppliedLayers,\n extractFields\n} from './group-utils';\nimport { ROW, ROWS, COLUMNS, COL, LEFT, RIGHT, TOP, BOTTOM, PRIMARY, SECONDARY, X, Y } from '../enums/constants';\n\n/**\n * Updates row and column cells with the geom cell corresponding to the facet keys\n *\n * @param {*} resolver\n * @param {*} facets\n */\nconst updateCells = (resolver, facets, geomCell) => {\n [ROW, COL].forEach((field) => {\n const cells = resolver[`${field}Cells`]();\n const facetKey = facets[`${field}Facets`][1].join();\n\n !cells[facetKey] && (cells[facetKey] = []);\n cells[facetKey].push(geomCell);\n resolver[`${field}Cells`](cells);\n });\n};\n\n/**\n *\n *\n * @param {*} context\n * @param {*} datamodel\n * @param {*} fieldInfo\n * @param {*} facets\n * @return\n */\nexport const createValueCells = (context, datamodel, fieldInfo, facets) => {\n const {\n projections,\n indices\n } = fieldInfo;\n const {\n rowFields,\n columnFields\n } = projections;\n const {\n rowIndex,\n columnIndex\n } = indices;\n const {\n suppliedLayers,\n cell: GeomCell,\n resolver,\n config,\n encoder,\n detailFields\n } = context;\n const axes = resolver.axes();\n const cacheMaps = resolver.cacheMaps();\n const matrixLayers = resolver.matrixLayers();\n const labelManager = resolver.dependencies().smartlabel;\n const horizontalAxis = resolver.horizontalAxis();\n const verticalAxis = resolver.verticalAxis();\n const datamodelTransform = resolver.datamodelTransform();\n const {\n entryCellMap,\n exitCellMap\n } = cacheMaps;\n const layerConfigArr = encoder.getLayerConfig({ columnFields, rowFields }, suppliedLayers || []);\n const axesCreators = { config, labelManager, axes, cacheMaps };\n\n fieldInfo.normalizedColumns = verticalAxis.fields;\n fieldInfo.normalizedRows = horizontalAxis.fields;\n\n const groupAxes = encoder.createAxis(axesCreators, fieldInfo);\n\n matrixLayers[rowIndex] = matrixLayers[rowIndex] ? matrixLayers[rowIndex] : [];\n matrixLayers[rowIndex][columnIndex] = layerConfigArr;\n\n // return from map if already there otherwise create and put in map\n const geomCellKey = getCellKey(rowIndex, columnIndex);\n const fields = {\n y: rowFields,\n x: columnFields\n };\n const allFacets = [\n [...facets.rowFacets[0], ...facets.colFacets[0]],\n [...facets.rowFacets[1], ...facets.colFacets[1]]\n ];\n const geomCell = !exitCellMap.has(geomCellKey) ? new GeomCell() : exitCellMap.get(geomCellKey);\n\n geomCell.data(datamodel)\n .axes(groupAxes)\n .fields(fields)\n .transform(datamodelTransform)\n .detailFields(detailFields)\n .facetByFields(allFacets);\n entryCellMap.set(geomCellKey, geomCell);\n exitCellMap.delete(geomCellKey);\n\n updateCells(resolver, facets, geomCell);\n\n return entryCellMap.get(geomCellKey);\n};\n\n/**\n * Creates axis cells based on the set of axes\n *\n * @param {Selection} selection Contains a selection of the axis units\n * @param {Array} axes Actual axis units\n * @param {number} axisIndex 0-> primary axis, 1-> secondary axis(when dual axis is made)\n * @param {Object} cells Contains a collection of the cells\n * @return {Object} return either set of axis/blank cells depending on the config\n */\n\nconst createAxisCells = (selection, axes, axisIndex, cells) =>\n createSelection(selection, axis => axis, axes, (item, i) => i + item.reduce((e, n) => {\n const id = n.id + axisIndex;\n return e + id;\n }, '')).map((axis) => {\n if (axis && axis[axisIndex]) {\n const axisInst = axis[axisIndex];\n const { orientation, show } = axisInst.config();\n\n return new cells.AxisCell().source(axisInst).config({\n isOffset: orientation === AxisOrientation.LEFT || orientation === AxisOrientation.TOP,\n show\n });\n }\n return new cells.BlankCell();\n });\n\n/**\n *\n *\n * @param {*} context\n * @param {*} selectionObj\n * @param {*} cells\n * @retur\n */\nconst axisPlaceholderGn = (context, selObj, cells) => {\n const {\n matrices\n } = context;\n const {\n axesMatrix\n } = matrices;\n\n return (type, axisFrom) => {\n const axes = axesMatrix[`${type}`];\n\n if (axes && axes.length) {\n if (type === X || type === Y) {\n const fieldNames = type === Y ? ROWS : COLUMNS;\n\n [PRIMARY, SECONDARY].forEach((fieldType, index) => {\n const selObjProp = `${fieldNames}${fieldType}`;\n let axisIndex = index;\n let axesForDraw = axes;\n if (axisFrom === RIGHT || axisFrom === BOTTOM) {\n axisIndex = 1 - axisIndex;\n }\n if (!getObjProp(axes, 0, axisIndex)) {\n axesForDraw = [];\n }\n selObj[selObjProp] = createAxisCells(selObj[selObjProp], axesForDraw, axisIndex, cells);\n });\n } else {\n selObj.rowsPrimary = createAxisCells(selObj.rowPrime, axes.map(() => []), 0, cells);\n selObj.columnsPrimary = createAxisCells(selObj.colPrime, axes[0], 0, cells);\n }\n }\n return selObj;\n };\n};\n\n/**\n * Creates header cells based on the set of headers\n *\n * @param {Object} selection Contains a selection of the header units\n * @param {string} headers Contains a list of the headers\n * @param {Object} cells Contains a collection of the cells\n * @param {Object} labelManager smart label instance\n * @return {Object} return either set of header cells depending on the config\n */\nconst createTextCells = (selection, headers, cells, labelManager) => createSelection(selection,\n label => new cells.TextCell({}, { labelManager }).source(label), headers, (key, i) => key + i);\n\n/**\n *\n *\n * @param {*} context\n * @param {*} selectionObj\n * @param {*} cells\n * @param {*} labelManager\n * @return\n */\nconst headerPlaceholderGn = (context, selectionObj, cells, labelManager) => {\n const {\n axis,\n keys,\n type,\n facetConfig\n } = context;\n const counter = axis.length / keys.length;\n const selectionKeys = keys.length ? axis.map((d, i) => keys[Math.floor(i / counter)]) : [];\n return createSelection(selectionObj[`${type}Headers`], keySet => keySet, selectionKeys, (keySet, i) =>\n `${keySet.join(',')}-${i}`).map(keySet => createTextCells(null, keySet, cells, labelManager)\n .map((cell, k, i) => cell.source(keySet[i]).config(facetConfig || {})));\n};\n\n/**\n * Creates a set of placeholders as a part of selection object\n *\n * @param {Array} normalizedOptions contains normalized rows and columns\n * @param {Array} matrices contains axis and value matrices\n * @param {aArrayny} projections contains set of row and column projections\n * @param {Object} cells Contains a collection of the cells\n * @param {Object} labelManager smart label instance\n * @return {Object} Creates a set of placeholders as a part of selections\n */\nconst generatePlaceholders = (context, cells, labelManager) => {\n let selectionObj;\n const {\n matrices,\n fields,\n facetsAndProjections,\n selection,\n facetConfig,\n encoders\n } = context;\n const {\n rows,\n columns\n } = fields;\n const {\n valuesMatrix\n } = matrices;\n const {\n rowProjections,\n colProjections\n } = facetsAndProjections;\n const {\n rowKeys,\n columnKeys\n } = valuesMatrix;\n const takeAxisFrom = encoders.simpleEncoder._axisFrom;\n const takeHeaderFrom = encoders.simpleEncoder._headerFrom;\n\n selectionObj = selection || {};\n\n ['pie', X, Y].forEach((axis) => {\n const axisFrom = axis === X ? takeAxisFrom.column : takeAxisFrom.row;\n selectionObj = axisPlaceholderGn(context, selectionObj, cells)(axis, axisFrom);\n });\n\n const {\n rowsPrimary,\n rowsSecondary,\n columnsPrimary,\n columnsSecondary\n } = selectionObj;\n\n const rowAxis = rowsPrimary && rowsPrimary.getObjects().length ? rowsPrimary.getObjects() :\n (rowsSecondary && rowsSecondary.getObjects().length ? rowsSecondary.getObjects() : []);\n const colAxis = columnsPrimary && columnsPrimary.getObjects().length ? columnsPrimary.getObjects() :\n (columnsSecondary && columnsSecondary.getObjects().length ? columnsSecondary.getObjects() : []);\n\n const headerConfig = [\n { type: LEFT, section: rows[0], axis: rowAxis, headerFrom: takeHeaderFrom.row },\n { type: RIGHT, section: rows[1], axis: rowAxis, headerFrom: takeHeaderFrom.row },\n { type: TOP, section: columns[0], axis: colAxis, headerFrom: takeHeaderFrom.column },\n { type: BOTTOM, section: columns[1], axis: colAxis, headerFrom: takeHeaderFrom.column }\n ];\n\n headerConfig.forEach((config, index) => {\n let keys;\n let length;\n const {\n type,\n section,\n axis,\n headerFrom\n } = config;\n\n if (index < 2) {\n keys = rowKeys;\n length = rowProjections.length > 0 ? rowProjections.length : 1;\n } else {\n keys = columnKeys;\n length = colProjections.length > 0 ? colProjections.length : 1;\n }\n\n if (section.length && headerFrom === type && axis && keys.length) {\n const hContext = { axis, length, type };\n let headers = [];\n if (index < 2) {\n hContext.keys = keys;\n hContext.facetConfig = facetConfig.rows;\n headers = headerPlaceholderGn(hContext, selectionObj, cells, labelManager);\n } else {\n hContext.facetConfig = facetConfig.columns;\n hContext.keys = keys[0].map((key, i) => keys.map(e => e[i]));\n headers = headerPlaceholderGn(hContext, selectionObj, cells, labelManager);\n }\n selectionObj[`${type}Headers`] = headers;\n } else {\n selectionObj[`${type}Headers`] = null;\n }\n });\n return selectionObj;\n};\n\n/**\n * Generates matrices\n *\n * @param {Object} config Configuration to generate matrices\n * @param {Array} matrices Matrices containing the set of visual units and axes units\n * @param {Object} cells Contains a collection of the cells\n * @param {Object} labelManager smart label instance\n * @return {Object} contains a collection of matrices\n */\nexport const generateMatrices = (context, matrices, cells, labelManager) => {\n const {\n unitHeight,\n unitWidth,\n facetsAndProjections,\n normalizedRows,\n normalizedColumns,\n selection,\n axisFrom,\n facetConfig,\n encoders\n } = context;\n const placeholderContext = {\n fields: {\n rows: normalizedRows,\n columns: normalizedColumns\n },\n matrices,\n facetsAndProjections,\n selection,\n axisFrom,\n facetConfig,\n encoders\n };\n // Generate placeholders for all matrices\n const selectionObj = generatePlaceholders(placeholderContext, cells, labelManager);\n const {\n columnsPrimary,\n columnsSecondary,\n rowsPrimary,\n rowsSecondary,\n leftHeaders,\n topHeaders,\n bottomHeaders,\n rightHeaders\n } = selectionObj;\n const [rowPrime, rowSec, colPrime, colSec] = [rowsPrimary, rowsSecondary, columnsPrimary, columnsSecondary]\n .map(d => (d ? d.getObjects() : []));\n const [leftFacets, rightFacets] = [leftHeaders, rightHeaders].map(e => (e ? e.getObjects()\n .map(f => f.getObjects()) : []));\n\n // Compute left matrix using left headers and the axes on the rows\n let leftMatrix = leftFacets.length ? leftFacets.map((d, i) => {\n rowPrime[i] = rowPrime[i] ? [rowPrime[i]] : [];\n return [...d, ...rowPrime[i]];\n }) : (rowPrime ? rowPrime.map(d => [d]) : []);\n\n // Compute right matrix using right headers and the axes on the rows\n const rightMatrix = rowSec.length ? rowSec.map((d, i) => [d, ...(rightFacets[i] || [])]) : (rightFacets.length ?\n rightFacets.map(d => [...d]) : []);\n\n const topMatrix = [];\n if (topHeaders) {\n const headers = topHeaders.getObjects();\n headers.forEach((e) => {\n const innerHeaders = e.getObjects();\n innerHeaders.forEach((x, i) => {\n topMatrix[i] = topMatrix[i] || [];\n topMatrix[i].push(x);\n });\n });\n }\n // Compute top matrix using the top headers and axes on the columns\n if (colPrime.length) {\n topMatrix.push(colPrime);\n }\n\n // Bottom and right matrices are prepared using the user config.\n let bottomMatrix = [];\n if (colSec.length) {\n bottomMatrix.push(colSec);\n }\n const currentBottomLength = bottomMatrix.length;\n if (bottomHeaders) {\n const headers = bottomHeaders.getObjects();\n headers.forEach((e) => {\n const innerHeaders = e.getObjects();\n innerHeaders.forEach((x, i) => {\n bottomMatrix[i + currentBottomLength] = bottomMatrix[i + currentBottomLength] || [];\n bottomMatrix[i + currentBottomLength].push(x);\n });\n });\n }\n\n if (!leftMatrix.length && !rightMatrix.length) {\n const cell = new cells.BlankCell();\n cell.setAvailableSpace(unitWidth, unitHeight);\n leftMatrix = [[cell]];\n }\n\n if (!topMatrix.length && (!bottomMatrix.length || !bottomMatrix[0].length)) {\n const cell = new cells.BlankCell();\n cell.setAvailableSpace(unitWidth, unitHeight);\n bottomMatrix = [[cell]];\n }\n\n return {\n rows: [leftMatrix, rightMatrix],\n columns: [topMatrix, bottomMatrix],\n selectionObj\n };\n};\n\n/**\n * Computes matrices for a group\n *\n * @param {Object} datamodel on which the matrices are to be computed\n * @param {Object} config configuration of the matrices\n * @param {Object} layerRegistry contains the registered layers\n * @return {Object} conputed matrices\n * @memberof MatrixResolver\n */\nexport const computeMatrices = (context, config) => {\n const {\n resolver,\n datamodel,\n componentRegistry,\n encoders\n } = context;\n const {\n globalConfig,\n selection,\n transform\n } = config;\n const groupBy = globalConfig.autoGroupBy;\n const { smartlabel: labelManager } = resolver.dependencies();\n const fieldMap = datamodel.getFieldsConfig();\n const layerConfig = resolver.layerConfig();\n const registry = resolver.registry();\n const { fields: normalizedRows } = resolver.horizontalAxis();\n const { fields: normalizedColumns } = resolver.verticalAxis();\n const otherEncodings = resolver.optionalProjections(config, layerConfig);\n const facetsAndProjections = resolver.getAllFields();\n const matrixGnContext = {\n // Configuration to be passed to generate the different matrices.\n // A common config is used for both value matrices and other matrices\n normalizedColumns,\n normalizedRows,\n facetsAndProjections,\n layers: layerConfig,\n fieldMap,\n otherEncodings,\n encoders,\n facetConfig: globalConfig.facetConfig || {},\n axisFrom: globalConfig.axisFrom || {},\n selection\n };\n const cells = {\n GeomCell: resolver.getCellDef(registry.GeomCell),\n AxisCell: resolver.getCellDef(registry.AxisCell),\n BlankCell: resolver.getCellDef(registry.BlankCell),\n TextCell: resolver.getCellDef(registry.TextCell)\n };\n const isRowSizeEqual = isDistributionEqual(normalizedRows);\n const isColumnSizeEqual = isDistributionEqual(normalizedColumns);\n\n resolver.colCells({});\n resolver.rowCells({});\n resolver.datamodelTransform(transform || {});\n\n // Cell creation begins here\n resolver.resetSimpleAxes();\n\n const {\n entryCellMap\n } = resolver.cacheMaps();\n const newCacheMap = {\n exitCellMap: entryCellMap,\n entryCellMap: new Map()\n };\n\n resolver.cacheMaps(newCacheMap);\n\n const valueCellContext = {\n config: globalConfig,\n suppliedLayers: encoders.simpleEncoder.serializeLayerConfig(resolver.layerConfig()),\n resolver,\n cell: cells.GeomCell,\n encoder: encoders.simpleEncoder,\n newCacheMap,\n detailFields: config.detail\n };\n const fieldsConfig = datamodel.getFieldsConfig();\n let groupedModel = datamodel;\n if (!groupBy.disabled) {\n const fields = getFieldsFromSuppliedLayers(valueCellContext.suppliedLayers, datamodel.getFieldsConfig());\n const allFields = extractFields(facetsAndProjections, fields);\n\n const dimensions = allFields.filter(field =>\n fieldsConfig[field] && fieldsConfig[field].def.type === FieldType.DIMENSION);\n const aggregationFns = groupBy.measures;\n\n groupedModel = datamodel.groupBy(dimensions.length ? dimensions : [''], aggregationFns).project(allFields);\n }\n\n // return a callback function to create the cells from the matrix\n const cellCreator = resolver.valueCellsCreator(valueCellContext);\n // Creates value matrices from the datamodel and configs\n const valueMatrixInfo = getMatrixModel(groupedModel, facetsAndProjections, cellCreator);\n\n resolver.cacheMaps().exitCellMap.forEach((placeholder) => {\n placeholder.remove();\n });\n resolver.cacheMaps().exitCellMap.clear();\n resolver.valueMatrix(valueMatrixInfo.matrix);\n resolver.createUnits(componentRegistry, config);\n\n const { xAxes, yAxes } = mutateAxesFromMap(resolver.cacheMaps(), resolver.axes());\n\n resolver.axes({\n x: xAxes,\n y: yAxes\n });\n\n const matrices = {\n valuesMatrix: valueMatrixInfo,\n axesMatrix: resolver.axes()\n };\n // Create all matrices\n const { rows, columns, selectionObj } = generateMatrices(matrixGnContext, matrices, cells, labelManager);\n\n resolver.rowMatrix(rows);\n resolver.columnMatrix(columns);\n\n return {\n rows: resolver.rowMatrix(),\n columns: resolver.columnMatrix(),\n values: resolver.valueMatrix(),\n isColumnSizeEqual,\n isRowSizeEqual,\n selection: selectionObj,\n dataModels: {\n groupedModel,\n parentModel: datamodel\n }\n };\n};\n","import { VisualUnit } from '@chartshq/visual-unit';\nimport {\n initializeCacheMaps,\n headerCreator,\n extractUnitConfig,\n setFacetsAndProjections\n} from './group-utils';\nimport {\n ROW, COL, LEFT, RIGHT, COLOR, SIZE, SHAPE, DETAIL, CELL, X_AXES, Y_AXES, ENTRY_CELLS, EXIT_CELLS, INITIALIZED,\n AXIS, UNIT, BEFORE_UPDATE, UPDATED, VALUE_MATRIX, FACET_HEADERS\n} from '../enums/constants';\nimport { createValueCells, computeMatrices } from './cell-creator';\n/**\n * Resolves the matrices from configuration provided\n *\n * @export\n * @class MatrixResolver\n */\nexport default class MatrixResolver {\n\n /**\n * Creates an instance of MatrixResolver.\n * @param {Object} dependencies needed to run the resolver\n * @memberof MatrixResolver\n */\n constructor (dependencies) {\n this._registry = {};\n this._layerConfig = [];\n this._matrixLayers = [];\n this._dependencies = dependencies;\n this._rowMatrix = [];\n this._columnMatrix = [];\n this._valueMatrix = [];\n this._facets = {};\n this._projections = {};\n this._datamodelTransform = {};\n this._units = [];\n this._cacheMaps = {};\n this._axes = {\n x: {},\n y: {},\n color: [],\n size: [],\n shape: []\n };\n\n this.cacheMaps(initializeCacheMaps());\n }\n\n /**\n * Set: Registers placeholders, Get: return {Object} those placeholders\n *\n * @param {Object} placeholders cells that will construct the group\n * @return {Object} Either current instance or the set of placeholders\n * @memberof MatrixResolver\n */\n registry (...placeholders) {\n if (placeholders.length) {\n Object.entries(placeholders[0]).forEach((val) => {\n this._registry[val[0]] = val[1];\n });\n return this;\n }\n return this._registry;\n }\n\n /**\n * Used to set the layer config from outside or get current layer info\n *\n * @param {Object} type configuration of layer provided externally\n * @return {Object} either the layer or current instance\n * @memberof MatrixResolver\n */\n dependencies (...dep) {\n if (dep.length) {\n this._dependencies = dep[0];\n return this;\n }\n return this._dependencies;\n }\n\n /**\n * Used to set the layer config from outside or get current layer info\n *\n * @param {Object} type configuration of layer provided externally\n * @return {Object} either the layer or current instance\n * @memberof MatrixResolver\n */\n units (...unitArr) {\n if (unitArr.length) {\n this._units = unitArr[0];\n return this;\n }\n return this._units;\n }\n\n /**\n * Used to set the layer config from outside or get current layer info\n *\n * @param {Object} layer configuration of layer provided externally\n * @return {Object} either the layer or current instance\n * @memberof MatrixResolver\n */\n layerConfig (...config) {\n if (config.length) {\n this._layerConfig = config[0];\n return this;\n }\n return this._layerConfig;\n }\n\n /**\n * Used to set the layer config from outside or get current layer info\n *\n * @param {Object} type configuration of layer provided externally\n * @return {Object} either the layer or current instance\n * @memberof MatrixResolver\n */\n matrixLayers (...layers) {\n if (layers.length) {\n this._matrixLayers = layers[0];\n return this;\n }\n return this._matrixLayers;\n }\n\n /**\n * Used to set the layer config from outside or get current layer info\n *\n * @param {Object} type configuration of layer provided externally\n * @return {Object} either the layer or current instance\n * @memberof MatrixResolver\n */\n datamodelTransform (...transform) {\n if (transform.length) {\n this._datamodelTransform = transform[0];\n return this;\n }\n return this._datamodelTransform;\n }\n\n /**\n * Used to set the layer config from outside or get current layer info\n *\n * @param {Object} type configuration of layer provided externally\n * @return {Object} either the layer or current instance\n * @memberof MatrixResolver\n */\n cacheMaps (...maps) {\n if (maps.length) {\n [CELL, X_AXES, Y_AXES, ENTRY_CELLS, EXIT_CELLS].forEach((e) => {\n this._cacheMaps[`${e}Map`] = maps[0][`${e}Map`] || this._cacheMaps[`${e}Map`];\n });\n return this;\n }\n return this._cacheMaps;\n }\n\n /**\n * Used to set the layer config from outside or get current layer info\n *\n * @param {Object} type configuration of layer provided externally\n * @return {Object} either the layer or current instance\n * @memberof MatrixResolver\n */\n rowCells (...cells) {\n if (cells.length) {\n this._rowCells = cells[0];\n return this;\n }\n return this._rowCells;\n }\n\n /**\n * Used to set the layer config from outside or get current layer info\n *\n * @param {Object} type configuration of layer provided externally\n * @return {Object} either the layer or current instance\n * @memberof MatrixResolver\n */\n colCells (...cells) {\n if (cells.length) {\n this._colCells = cells[0];\n return this;\n }\n return this._colCells;\n }\n\n /**\n * Used to set the layer config from outside or get current layer info\n *\n * @param {Object} type configuration of layer provided externally\n * @return {Object} either the layer or current instance\n * @memberof MatrixResolver\n */\n axes (...axes) {\n if (axes.length) {\n this._axes = Object.assign({}, this._axes, axes[0]);\n return this;\n }\n return this._axes;\n }\n\n /**\n * Used to set the layer config from outside or get current layer info\n *\n * @param {Object} type configuration of layer provided externally\n * @return {Object} either the layer or current instance\n * @memberof MatrixResolver\n */\n rowMatrix (...rowMat) {\n if (rowMat.length) {\n this._rowMatrix = rowMat[0];\n return this;\n }\n return this._rowMatrix;\n }\n\n /**\n * Used to set the layer config from outside or get current layer info\n *\n * @param {Object} type configuration of layer provided externally\n * @return {Object} either the layer or current instance\n * @memberof MatrixResolver\n */\n columnMatrix (...colMat) {\n if (colMat.length) {\n this._columnMatrix = colMat[0];\n return this;\n }\n return this._columnMatrix;\n }\n\n /**\n * Used to set the layer config from outside or get current layer info\n *\n * @param {Object} type configuration of layer provided externally\n * @return {Object} either the layer or current instance\n * @memberof MatrixResolver\n */\n valueMatrix (...valMat) {\n if (valMat.length) {\n this._valueMatrix = valMat[0];\n return this;\n }\n return this._valueMatrix;\n }\n\n /**\n *\n *\n * @param {*} facets\n * @return\n * @memberof MatrixResolver\n */\n facets (...facets) {\n if (facets.length) {\n Object.entries(facets[0]).forEach((e) => {\n this._facets[e[0]] = e[1];\n });\n return this;\n }\n return this._facets;\n }\n\n /**\n *\n *\n * @param {*} projections\n * @return\n * @memberof MatrixResolver\n */\n projections (...projections) {\n if (projections.length) {\n Object.entries(projections[0]).forEach((e) => {\n this._projections[e[0]] = e[1];\n });\n return this;\n }\n return this._projections;\n }\n\n /**\n *\n *\n * @param {*} config\n * @param {*} layerConfig\n * @return\n * @memberof MatrixResolver\n */\n optionalProjections (config, layerConfig) {\n const otherEncodings = {};\n const optionalProjections = [];\n const otherEncodingTypes = [SIZE, COLOR, SHAPE];\n\n otherEncodingTypes.forEach((type) => {\n if (config[type] && config[type].field) {\n const enc = config[type];\n otherEncodings[type] = enc.field;\n optionalProjections.push(enc.field);\n }\n });\n\n if (config[DETAIL]) {\n optionalProjections.push(...config.detail);\n }\n\n if (layerConfig.length) {\n layerConfig.forEach((layer) => {\n if (layer.encoding) {\n Object.values(layer.encoding).forEach((enc) => {\n if (enc && optionalProjections.indexOf(enc.field) === -1) {\n optionalProjections.push(enc.field ? enc.field : enc);\n }\n });\n }\n });\n }\n this.projections({ optionalProjections });\n return otherEncodings;\n }\n\n /**\n * return the normalized set of rows and facets and projections\n *\n * @param {Object} rows parameters needed to set horizontal axis consisiting of rows\n * @return {Object} facets, projections and normalized rows\n * @memberof MatrixResolver\n */\n horizontalAxis (rows, encoder) {\n if (rows) {\n this._horizontalAxis = setFacetsAndProjections(this, { type: ROW, fields: rows }, encoder);\n return this;\n }\n return this._horizontalAxis;\n }\n\n /**\n * return the normalized set of columns and facets and projections\n *\n * @param {Object} columns parameters needed to set vertical axis consisiting of columns\n * @return {Object} facets, projections and normalized columns\n * @memberof MatrixResolver\n */\n verticalAxis (columns, encoder) {\n if (columns) {\n this._verticalAxis = setFacetsAndProjections(this, { type: COL, fields: columns }, encoder);\n return this;\n }\n return this._verticalAxis;\n }\n\n /**\n * Gets the class definition of a particular cell type(if the particular type has been extended, that particular\n * definition is returned)\n *\n * @param {Object} cell cell whose class definition is to be retrieved\n * @return {Object} cell definition\n * @memberof MatrixResolver\n */\n getCellDef (cell) {\n const registry = this.registry();\n\n Object.values(registry).forEach((e) => {\n if (e.prototype instanceof cell) {\n cell = e;\n }\n });\n return cell;\n }\n\n /**\n * return a visual cell creator along with its axis information to be injected to the datamodel creation\n * function\n *\n * @param {Object} GeomCell Type of cell to be created\n * @return {Object} Created cell\n * @memberof MatrixResolver\n */\n valueCellsCreator (context) {\n // reset matrix layers\n this.matrixLayers([]);\n\n return (datamodel, fieldInfo, facets) => createValueCells(context, datamodel, fieldInfo, facets);\n }\n\n /**\n * Callback to be applied on each cell of a matrix of a particular type\n *\n * @param {string} matrixType type of matrix on which callback is to be applied\n * @param {Function} callback function to be applied to each cell\n * @memberof MatrixResolver\n */\n forEach (matrixType, callback) {\n this[matrixType]().forEach((row, rIndex) => {\n row.forEach((col, cIndex) => {\n callback(rIndex, cIndex, col);\n });\n });\n }\n\n /**\n *\n *\n * @return\n * @memberof MatrixResolver\n */\n getAllFields () {\n const retObj = this.projections();\n\n Object.entries(this.facets()).forEach((e) => {\n retObj[e[0]] = e[1];\n });\n return retObj;\n }\n\n /**\n *\n *\n * @memberof MatrixResolver\n */\n resetSimpleAxes () {\n return this.axes({\n x: new Set(),\n y: new Set()\n });\n }\n\n /**\n *\n *\n * @param {*} componentRegistry\n * @param {*} config\n * @memberof MatrixResolver\n */\n createUnits (componentRegistry, config) {\n const {\n globalConfig,\n alias\n } = config;\n const {\n layerRegistry,\n sideEffectRegistry\n } = componentRegistry;\n const {\n smartlabel: smartLabel,\n lifeCycleManager\n } = this.dependencies();\n // Provide the source for the matrix\n const units = [];\n // Setting unit configuration\n const unitConfig = extractUnitConfig(globalConfig || {});\n\n this.forEach(VALUE_MATRIX, (i, j, el) => {\n let unit = el.source();\n if (!unit) {\n unit = VisualUnit.create({\n layerRegistry,\n sideEffectRegistry\n }, {\n smartLabel,\n lifeCycleManager\n });\n el.source(unit);\n units.push(unit);\n }\n unit.parentAlias(alias);\n el.config(unitConfig);\n });\n\n lifeCycleManager.notify({ client: units, action: INITIALIZED, formalName: UNIT });\n return this.units(units);\n }\n\n /**\n *\n *\n * @param {*} config\n * @memberof MatrixResolver\n */\n setDomains (config, datamodel, encoders) {\n const {\n color,\n shape,\n size,\n globalConfig\n } = config;\n const groupBy = globalConfig.autoGroupBy;\n const {\n rowFacets,\n colFacets\n } = this.getAllFields();\n const encoding = {\n color,\n shape,\n size\n };\n const facetFields = [...rowFacets.map(e => e.toString()), ...colFacets.map(e => e.toString())];\n const retContext = {\n domains: encoders.simpleEncoder.getRetinalFieldsDomain(datamodel, encoding, facetFields, groupBy),\n axes: this.axes(),\n encoding\n };\n encoders.retinalEncoder.setCommonDomain(retContext);\n return this;\n }\n\n /**\n *\n *\n * @return\n * @memberof MatrixResolver\n */\n getRetinalAxes () {\n const {\n color,\n shape,\n size\n } = this.axes();\n\n return {\n color: [...color],\n shape: [...shape],\n size: [...size]\n };\n }\n\n /**\n *\n *\n * @param {*} type\n * @return\n * @memberof MatrixResolver\n */\n getSimpleAxes (type) {\n return this.axes()[`${type}`];\n }\n\n /**\n *\n *\n * @param {*} datamodel\n * @param {*} config\n * @memberof MatrixResolver\n */\n createRetinalAxes (fieldsConfig, config, encoders) {\n const layerConfig = this.layerConfig();\n this.optionalProjections(config, layerConfig);\n const retinalAxes = encoders.retinalEncoder.createAxis({\n fieldsConfig,\n config,\n axes: this.axes()\n });\n const {\n lifeCycleManager\n } = this.dependencies();\n\n [COLOR, SHAPE, SIZE].forEach((e) => {\n this.axes()[e] = retinalAxes[e];\n });\n\n lifeCycleManager.notify({ client: this.axes(), action: INITIALIZED, formalName: AXIS });\n lifeCycleManager.notify({ client: this.units(), action: BEFORE_UPDATE, formalName: UNIT });\n\n const units = [];\n const matrixLayers = this.matrixLayers();\n\n this.forEach(VALUE_MATRIX, (i, j, el) => {\n el.axes(retinalAxes);\n el.source() && el.source().retinalFields(config);\n el.layerDef(encoders.retinalEncoder.getLayerConfig(config, matrixLayers[i][j]));\n el.updateModel();\n\n units.push(el.source());\n });\n\n lifeCycleManager.notify({ client: units, action: UPDATED, formalName: UNIT });\n return this;\n }\n\n /**\n *\n *\n * @param {*} placeholders\n * @param {*} fieldNames\n * @return\n * @memberof MatrixResolver\n */\n createHeaders (placeholders, fieldNames, config) {\n let bottomLeft = [];\n let bottomRight = [];\n const {\n rows,\n columns\n } = placeholders;\n const {\n smartlabel: labelManager,\n lifeCycleManager\n } = this.dependencies();\n const TextCell = this.getCellDef(this.registry().TextCell);\n const BlankCell = this.getCellDef(this.registry().BlankCell);\n const [leftRows, rightRows] = rows;\n const [topCols, bottomCols] = columns;\n const rowHeaders = fieldNames.rows;\n const blankCellCreator = cell => new BlankCell().config({ show: cell.config().show });\n\n // Headers and footers are created based on the rows. Thereafter, using the column information\n // they are tabularized into the current structure\n const headers = {\n left: headerCreator(leftRows, rowHeaders[0], config.showHeaders ? TextCell : BlankCell, labelManager),\n right: headerCreator(rightRows, rowHeaders[1], config.showHeaders ? TextCell : BlankCell, labelManager)\n };\n const footers = {\n left: leftRows.length > 0 ? leftRows[0].map(blankCellCreator) : [],\n right: rightRows.length > 0 ? rightRows[0].map(blankCellCreator) : []\n };\n const [topLeft, topRight] = [LEFT, RIGHT].map(type => topCols.map((col, i) => {\n if (i === topCols.length - 1) {\n return headers[type];\n }\n return footers[type];\n }));\n\n // Creating only bottom matrices if there is no information on the top\n if (topCols.length === 0) {\n [bottomLeft, bottomRight] = [LEFT, RIGHT].map(type => bottomCols.map((col, i) => {\n if (i === 0) {\n return headers[type];\n }\n return footers[type];\n }));\n } else {\n bottomLeft = bottomCols.map(() => (leftRows.length > 0 ? leftRows[0].map(blankCellCreator) : []));\n bottomRight = bottomCols.map(() => (rightRows.length > 0 ? rightRows[0].map(blankCellCreator) : []));\n }\n\n lifeCycleManager.notify({\n client: [topLeft, topRight, bottomLeft, bottomRight],\n action: INITIALIZED,\n formalName: FACET_HEADERS\n });\n\n return { topLeft, topRight, bottomLeft, bottomRight };\n }\n\n /**\n *\n *\n * @param {*} datamodel\n * @param {*} config\n * @param {*} componentRegistry\n * @param {*} encoders\n * @return\n * @memberof MatrixResolver\n */\n getMatrices (datamodel, config, componentRegistry, encoders) {\n const context = {\n datamodel,\n componentRegistry,\n encoders,\n resolver: this\n };\n\n return computeMatrices(context, config);\n }\n}\n","/**\n *\n *\n * @export\n * @class ValueMatrix\n */\nclass ValueMatrix {\n\n /**\n *Creates an instance of ValueMatrix.\n * @param {*} matrixArr\n * @memberof ValueMatrix\n */\n constructor (matrixArr) {\n const instancesById = {};\n\n this.matrix(matrixArr);\n this.filter(() => true);\n\n this.each((el, rIdx, cIdx) => {\n const cellValue = el.valueOf();\n if (cellValue && cellValue.id) {\n const id = cellValue.id();\n instancesById[id] = {\n instance: cellValue,\n rowIndex: rIdx,\n colIndex: cIdx\n };\n }\n });\n\n this.instancesById(instancesById);\n }\n\n /**\n *\n *\n * @param {*} id\n * @return\n * @memberof ValueMatrix\n */\n instancesById (...id) {\n if (id.length) {\n this._instancesById = id[0];\n return this;\n }\n return this._instancesById;\n }\n\n /**\n *\n *\n * @param {*} m\n * @return\n * @memberof ValueMatrix\n */\n matrix (...matrix) {\n if (matrix.length) {\n this._matrix = matrix[0];\n return this;\n }\n return this._matrix;\n }\n\n /**\n *\n *\n * @param {*} fn\n * @return\n * @memberof ValueMatrix\n */\n filter (...fn) {\n if (fn.length) {\n this._filterFn = fn[0];\n return this;\n }\n return this._filterFn;\n }\n\n /**\n *\n *\n * @return\n * @memberof ValueMatrix\n */\n width () {\n let rowWidth = 0;\n\n this.matrix().forEach((row) => {\n let currentRowWidth = 0;\n row.forEach((cell) => {\n currentRowWidth += cell.getLogicalSpace().width;\n });\n rowWidth = Math.max(rowWidth, currentRowWidth);\n });\n return rowWidth;\n }\n\n /**\n *\n *\n * @return\n * @memberof ValueMatrix\n */\n height () {\n let rowHeight = 0;\n\n this.matrix().forEach((row) => {\n let currentRowHeight = 0;\n row.forEach((cell) => {\n currentRowHeight = Math.max(currentRowHeight, cell.getLogicalSpace().height);\n });\n rowHeight += currentRowHeight;\n });\n return rowHeight;\n }\n\n /**\n *\n *\n * @param {*} fn\n * @return\n * @memberof ValueMatrix\n */\n each (fn) {\n const matrix = this.matrix();\n const filterFn = this.filter();\n\n matrix.forEach((row, rIndex) => {\n row.forEach((col, cIndex) => {\n if (filterFn(col)) {\n fn(col, rIndex, cIndex, matrix);\n }\n });\n });\n return this;\n }\n\n /**\n *\n *\n * @param {*} id\n * @return\n * @memberof ValueMatrix\n */\n findPlaceHolderById (id) {\n return this.instancesById()[id];\n }\n\n /**\n *\n *\n * @return\n * @memberof ValueMatrix\n */\n getMatrixArray () {\n return this.matrix();\n }\n}\n\nexport default ValueMatrix;\n","import { RetinalEncoder } from '../encoder';\nimport { DATA_UPDATE_COUNTER } from '../enums/defaults';\nimport { getEncoder, getBorders } from '../group-helper';\nimport ValueMatrix from './value-matrix';\nimport localOptions from './local-options';\n\nconst sanitizeRetinalConfig = (retinalConf) => {\n const conf = {};\n for (const key in retinalConf) {\n const confValue = retinalConf[key];\n if (typeof confValue === 'string' || !confValue) {\n conf[key] = {\n field: retinalConf[key]\n };\n } else {\n conf[key] = confValue;\n }\n }\n return conf;\n};\n\n/**\n *\n *\n * @param {*} placeholder\n * @memberof VisualGroup\n */\nconst setMatrixInstances = (context, placeholder) => {\n context._composition.matrices = {\n value: new ValueMatrix(placeholder.values),\n left: new ValueMatrix(placeholder.rows[0]),\n right: new ValueMatrix(placeholder.rows[1]),\n top: new ValueMatrix(placeholder.columns[0]),\n bottom: new ValueMatrix(placeholder.columns[1])\n };\n return context;\n};\n\n/**\n *\n *\n * @param {*} context\n * @returns\n */\nexport const setupChangeListeners = (context) => {\n context.store().registerImmediateListener([...Object.keys(localOptions), DATA_UPDATE_COUNTER], (...params) => {\n const datamodel = context.data();\n const [config, rows, columns, color, shape, size, detail, layers, transform] = params;\n\n if (datamodel && rows[1] && columns[1]) {\n // Get the resolver for the matrices\n const resolver = context.resolver();\n // Prepare configuration for matrix preparation\n let matrixConfig = {\n selection: context.selection(),\n alias: context.alias(),\n globalConfig: config[1] || {},\n rows: rows[1],\n columns: columns[1],\n detail: detail[1],\n layers: layers[1],\n transform: transform[1]\n };\n\n const retinalConfig = sanitizeRetinalConfig({\n color: color[1],\n shape: shape[1],\n size: size[1]\n });\n\n matrixConfig = Object.assign(matrixConfig, retinalConfig);\n // Create the encoders for the group\n const encoders = {};\n encoders.retinalEncoder = new RetinalEncoder();\n encoders.simpleEncoder = getEncoder(layers[1]);\n\n // Set the group type\n context.groupType(encoders.simpleEncoder.constructor.type());\n\n // Get sanitized fields as instances of the Vars Class\n const fields = encoders.simpleEncoder.fieldSanitizer(datamodel, matrixConfig);\n encoders.simpleEncoder.setAxisAndHeaders(config[1] ? config[1].axisFrom : {}, fields);\n // Setting layers for the code\n layers[1] && resolver.layerConfig(layers[1]);\n // Set the row and column axes\n resolver.horizontalAxis(fields.rows, encoders).verticalAxis(fields.columns, encoders);\n // Getting the placeholders\n const placeholderInfo = resolver.getMatrices(datamodel, matrixConfig, context.registry(), encoders);\n context._groupedDataModel = placeholderInfo.dataModels.groupedModel;\n // Set the selection object\n context.selection(placeholderInfo.selection);\n\n // Create retinal axes\n resolver.createRetinalAxes(placeholderInfo.dataModels.parentModel.getFieldsConfig(), retinalConfig,\n encoders);\n\n // Domains are evaluated for each of the axes for commonality\n resolver.setDomains(matrixConfig, placeholderInfo.dataModels, encoders);\n\n // Create matrix instances\n setMatrixInstances(context, placeholderInfo);\n\n // Prepare corner matrices\n context.cornerMatrices(resolver.createHeaders(placeholderInfo, fields, config[1]));\n\n // Set placeholder information\n context.placeholderInfo(placeholderInfo);\n\n context._composition.axes = resolver.axes();\n context.metaData({\n border: getBorders(placeholderInfo, encoders.simpleEncoder)\n });\n }\n return context;\n });\n return context;\n};\n","import { DATA_UPDATE_COUNTER } from '../enums/defaults';\n\nexport const PROPS = {\n alias: {},\n data: {\n sanitization: (context, value) => {\n if (context._data !== value) {\n const store = context.store();\n let hasDataUpdated = store.get(DATA_UPDATE_COUNTER);\n store.commit(DATA_UPDATE_COUNTER, ++hasDataUpdated);\n }\n return value;\n }\n },\n cornerMatrices: {},\n groupType: {},\n matrixInstance: {},\n metaData: {},\n placeholderInfo: {},\n resolver: {},\n registry: {\n sanitization: (context, value) => {\n if (context.resolver) {\n context.resolver().registry(value.cellRegistry);\n }\n return value;\n }\n },\n selection: {},\n store: {}\n};\n","import { transactor, generateGetterSetters } from 'muze-utils';\nimport localOptions from './local-options';\nimport { SimpleGroup } from '../simple-group';\nimport {\n MatrixResolver,\n initStore,\n findInGroup\n} from '../group-helper';\nimport { setupChangeListeners } from './change-listener';\nimport { PROPS } from './props';\nimport {\n CONFIG,\n MOUNT,\n RETINAL,\n Y\n} from '../enums/constants';\n\n/**\n * This class is used to create an instance of a visual group.\n * It extends the SimpleGroup (which is an interface). The visual group takes in a datamodel,\n * and a set of rows and columns, alongwith optional paramters (like color, size, shape).\n *\n * @class VisualGroup\n */\nclass VisualGroup extends SimpleGroup {\n\n /**\n * Creates an instance of VisualGroup. Requires dependencies and other registry options for placeholders\n * and layers that create individual units\n * @param {Object} registry Key value pair of compostions for the group\n * @param {Object} dependencies Dependencies needed to run the group\n * @memberof VisualGroup\n */\n constructor (registry, dependencies) {\n super();\n\n const {\n componentSubRegistry\n } = registry;\n\n this._dependencies = dependencies;\n // Generate getter/setter methods for all properties of the class\n // One can get each property by calling the method and can set it\n // by passing paramaters for the same. Thus, one can chain setter\n // getter methods.\n generateGetterSetters(this, PROPS);\n // Populate the store with default values\n this.store(initStore());\n\n // initialize group compositions\n this._composition = {};\n // store reference to data\n this._data = [];\n // matrix instance store each of the matrices\n this._matrixInstance = {};\n // store reference to mountpoint\n this._mount = null;\n // selection object that takes care of updating of components\n this._selection = {};\n // stores info about the placeholders generated after creation of matrices\n this._placeholderInfo = {};\n // corner matrices are the headers/footers for the application\n this._cornerMatrices = {};\n // Create instance of matrix resolver\n this.resolver(new MatrixResolver(this._dependencies));\n\n // Getting indiviual registered items\n this.registry({\n layerRegistry: componentSubRegistry.layerRegistry.get(),\n cellRegistry: componentSubRegistry.cellRegistry.get()\n });\n // Add local options to the store\n transactor(this, localOptions, this.store().model);\n // Register listeners\n setupChangeListeners(this);\n }\n\n matrixInstance (...matrices) {\n if (matrices.length) {\n return this;\n }\n return this.composition().matrices;\n }\n\n /**\n * Returns the composition of the Group\n *\n * @readonly\n * @memberof VisualGroup\n */\n composition (...params) {\n if (params.length) {\n return this;\n }\n return this._composition;\n }\n\n /**\n * Locks the model to prevent change listeners to be triggered until unlocked\n *\n * @return {Object} Instance of class VisualGroup\n * @memberof VisualGroup\n */\n lockModel () {\n this.store().model.lock();\n return this;\n }\n\n /**\n * Unlocks the model so that all change listeners can be triggered\n *\n * @return {Object} Instance of class VisualGroup\n * @memberof VisualGroup\n */\n unlockModel () {\n this.store().model.unlock();\n return this;\n }\n\n /**\n *\n *\n * @param {*} variable\n * @return\n * @memberof VisualGroup\n */\n where (variable) {\n return findInGroup(variable, this.resolver().getAllFields());\n }\n\n /**\n *\n *\n * @param {*} type\n * @return\n * @memberof VisualGroup\n */\n getAxes (type) {\n if (type === RETINAL) {\n return this.resolver().getRetinalAxes();\n }\n return this.resolver().getSimpleAxes(type);\n }\n\n /**\n *\n *\n * @return\n * @memberof VisualGroup\n */\n getCells (type) {\n return this.resolver()[`${type}Cells`]();\n }\n\n /**\n *\n *\n * @param {*} channel\n * @return\n * @memberof VisualGroup\n */\n getFieldsFromChannel (channel) {\n const {\n rowProjections,\n colProjections\n } = this.resolver().getAllFields();\n\n return channel === Y ? rowProjections : colProjections;\n }\n\n /**\n *\n *\n * @param {*} facetKey\n * @return\n * @memberof VisualGroup\n */\n getCellsByFacetKey (facetKey) {\n const resolver = this.resolver();\n const cells = resolver.rowCells()[facetKey] || resolver.colCells()[facetKey] || [];\n return cells;\n }\n\n /**\n *\n *\n * @param {*} facetKey\n * @return\n * @memberof VisualGroup\n */\n getAxesByFacetKey (axisType, facetKey) {\n const resolver = this.resolver();\n const cells = resolver.rowCells()[facetKey] || resolver.colCells()[facetKey];\n const axes = cells[0].valueOf().axes()[axisType] || [];\n\n return axes;\n }\n\n /**\n * This method is used to return a serialized representation of the instance's properties.\n *\n * @return {Object} Object with config proprties.\n * @memberof VisualGroup\n */\n serialize () {\n const store = this.store();\n\n return {\n [CONFIG]: store.get(CONFIG),\n [MOUNT]: store.get(MOUNT)\n };\n }\n\n getGroupByData () {\n return this._groupedDataModel;\n }\n}\n\nexport default VisualGroup;\n","import { PersistentBehaviour, SELECTION } from '@chartshq/muze-firebolt';\n\nexport default class SelectBehaviour extends PersistentBehaviour {\n static formalName () {\n return 'select';\n }\n\n setSelectionSet (addSet, selectionSet) {\n if (addSet === null) {\n selectionSet.reset();\n } else if (addSet.length) {\n // new add set\n const existingRemoveSet = addSet.filter(d => selectionSet._set[d] === SELECTION.SELECTION_OLD_EXIT\n || selectionSet._set[d] === SELECTION.SELECTION_NEW_EXIT);\n // existing add set\n if (existingRemoveSet.length) {\n selectionSet.updateEntry();\n selectionSet.add(existingRemoveSet);\n } else {\n selectionSet.updateExit();\n selectionSet.remove(addSet);\n }\n const { exitSet } = selectionSet.getSets();\n const mergedExitSet = [...new Set(exitSet[1]), ...new Set(exitSet[0])];\n const completeSetCount = selectionSet.getCompleteSet().length;\n if (exitSet[1].length !== completeSetCount && mergedExitSet.length === completeSetCount) {\n selectionSet.reset();\n }\n } else {\n selectionSet.remove(selectionSet.getCompleteSet());\n }\n return this;\n }\n}\n","import { BEHAVIOURS, ACTIONS } from '@chartshq/muze-firebolt';\n\nconst CLASSPREFIX = 'muze';\n\nexport const actionBehaviourMap = {\n [ACTIONS.DRAG]: {\n target: `.${CLASSPREFIX}-gradient-rect`,\n behaviours: [BEHAVIOURS.BRUSH]\n },\n [ACTIONS.HOVER]: {\n target: [`.${CLASSPREFIX}-legend-columns`],\n behaviours: [BEHAVIOURS.HIGHLIGHT]\n },\n [ACTIONS.CLICK]: {\n target: [`.${CLASSPREFIX}-legend-columns`],\n behaviours: [BEHAVIOURS.SELECT]\n }\n};\n\nexport const propagationBehaviourMap = {\n [BEHAVIOURS.SELECT]: BEHAVIOURS.FILTER,\n [BEHAVIOURS.BRUSH]: BEHAVIOURS.HIGHLIGHT\n};\n","import * as BEHAVIOURS from '../enums/behaviours';\nimport * as sideEffects from '../enums/side-effects';\n\nexport const behaviourEffectMap = {\n [BEHAVIOURS.BRUSH]: [sideEffects.SELECTIONBOX, {\n name: sideEffects.Highlighter,\n options: {\n strategy: 'fade'\n }\n }],\n [BEHAVIOURS.HIGHLIGHT]: [sideEffects.Highlighter],\n select: [{\n name: sideEffects.Highlighter,\n options: {\n strategy: 'fade'\n }\n }]\n};\n\nexport const propagationSideEffects = {\n [BEHAVIOURS.BRUSH]: [{\n name: sideEffects.Highlighter,\n options: {\n strategy: 'fade'\n }\n }],\n [BEHAVIOURS.HIGHLIGHT]: [{\n name: sideEffects.Highlighter,\n options: {\n strategy: 'fade'\n }\n }],\n [BEHAVIOURS.SELECT]: ['filter']\n};\n\n","export const BRUSH = 'brush';\nexport const HIGHLIGHT = 'highlight';\nexport const TOOLTIP = 'tooltip';\nexport const FILTER = 'filter';\nexport const SELECT = 'select';\n\n","export const SELECTIONBOX = 'selectionBox';\nexport const Highlighter = 'highlighter';\n\n","export const CLASSPREFIX = 'muze';\nexport const IDFIELD = '__id__';\nexport const CONFIG = 'config';\nexport const DATAMODEL = 'dataModel';\nexport const AXES = 'axes';\nexport const LAYERDEFS = 'layerDef';\nexport const WIDTH = 'width';\nexport const HEIGHT = 'height';\nexport const MOUNTPOINT = 'mountPoint';\nexport const GRIDLINEPARENTGROUPCLASS = 'grid-lines';\nexport const TRANSFORM = 'transform';\nexport const CONSOLIDATED = 'consolidated';\nexport const FRAGMENTED = 'fragmented';\nexport const DEFAULTCOLOR = '#F44336';\nexport const DEFAULTSIZE = 50;\nexport const DEFAULTSHAPE = 'circle';\nexport const STEP = 'step';\nexport const GRADIENT = 'gradient';\nexport const ORDINAL = 'ordinal';\nexport const SCALE_FUNCTIONS = {\n size: 'getSize',\n shape: 'getShape',\n color: 'getColor'\n};\nexport const TOP = 'top';\nexport const LEFT = 'left';\nexport const RIGHT = 'right';\nexport const BOTTOM = 'bottom';\nexport const HORIZONTAL = 'horizontal';\nexport const VERTICAL = 'vertical';\nexport const CENTER = 'center';\nexport const VALUE = 'value';\nexport const PATH = 'path';\nexport const SHAPE = 'shape';\nexport const ICON = 'icon';\nexport const RECT = 'rect';\nexport const START = 'start';\nexport const UPPER = 'upper';\nexport const LOWER = 'lower';\nexport const END = 'end';\nexport const SIZE = 'size';\nexport const DISCRETE = 'discrete';\nexport const MEASURE = 'measure';\n\n","import { assembleModelFromIdentifiers, getDataModelFromRange } from 'muze-utils';\nimport { propagationBehaviourMap } from './action-behaviour-map';\nimport { propagationSideEffects } from './behaviour-effect-map';\nimport { STEP, GRADIENT, DISCRETE, MEASURE } from '../enums/constants';\n\nexport const propagate = (firebolt, action, selectionSet, config = {}) => {\n let propagationData;\n const type = firebolt.context.constructor.type();\n const payload = config.payload;\n const data = firebolt.context.data();\n const metaData = firebolt.context.metaData();\n const fieldType = metaData.getData().schema[0].type;\n\n const propPayload = {};\n const sourceId = firebolt.context._id;\n propPayload.action = propagationBehaviourMap[action] || action;\n propPayload.sideEffects = propagationSideEffects[action];\n propPayload.sourceCanvas = firebolt.context.canvasAlias();\n const isMutableAction = firebolt._actions.behavioural[propPayload.action].constructor.mutates();\n if (payload.criteria === null) {\n propagationData = null;\n } else {\n const entrySet = selectionSet.mergedEnter;\n let values = data.filter(d => entrySet.uids.indexOf(d.id) !== -1).map(d => d.value);\n if (type === STEP || (type === DISCRETE && fieldType === MEASURE)) {\n const field = Object.keys(payload.criteria || {})[0];\n values = data.filter(d => entrySet.uids.indexOf(d.id) !== -1).map(d => d.range);\n propagationData = values.length ? metaData.select((fields) => {\n let check = false;\n for (let i = 0; i < values.length; i++) {\n check = fields[field].value >= values[i][0] && fields[field].value <= values[i][1];\n if (check === true) {\n break;\n }\n }\n return check;\n }, {\n saveChild: false\n }) : null;\n } else if (type === GRADIENT) {\n propagationData = getDataModelFromRange(metaData, payload.criteria);\n } else if (values.length) {\n propagationData = assembleModelFromIdentifiers(metaData, [payload.criteria[0], ...values.map(d => [d])]);\n } else {\n propPayload.criteria = null;\n propagationData = metaData.select(() => true, {\n saveChild: false\n });\n }\n }\n\n let propagateInterpolatedValues = false;\n\n if (propagationData) {\n const schema = propagationData.getSchema();\n propagateInterpolatedValues = schema.every(d => d.type === fieldType.MEASURE);\n }\n\n const propConfig = {\n sourceId: `legend-${sourceId}`,\n payload: propPayload,\n criteria: propPayload.criteria === null ? null : propagationData,\n isMutableAction,\n propagateInterpolatedValues,\n action: propPayload.action\n };\n\n metaData.propagate(propagationData, propConfig, true);\n};\n","import { Firebolt } from '@chartshq/muze-firebolt';\nimport { propagate } from './helper';\nimport { STEP, GRADIENT } from '../enums/constants';\n\n/**\n * This class manages the interactions of legend.\n * @export\n * @class LegendFireBolt\n * @extends {Firebolt}\n */\nexport class LegendFireBolt extends Firebolt {\n constructor (...params) {\n super(...params);\n this.initializeSideEffects();\n }\n\n getPropagationSelectionSet (selectionSet) {\n return selectionSet[0];\n }\n\n propagate (behaviourName, payload, selectionSet) {\n propagate(this, behaviourName, selectionSet, {\n payload\n });\n }\n\n getAddSetFromCriteria (criteria) {\n let values;\n let uniqueIds;\n const type = this.context.constructor.type();\n\n if (criteria === null) {\n uniqueIds = null;\n } else if (type === STEP) {\n values = Object.values(criteria);\n uniqueIds = this.context.data().filter(d => values.indexOf(d.range) !== -1).map(d => d.id);\n } else if (type === GRADIENT) {\n uniqueIds = [];\n } else {\n values = criteria[1];\n if (values) {\n uniqueIds = this.context.data().filter(d => values.indexOf(d.value) !== -1).map(d => d.id);\n } else {\n values = Object.values(criteria);\n uniqueIds = this.context.data().filter(d => values.indexOf(d.range) !== -1).map(d => d.id);\n }\n }\n return {\n uids: uniqueIds,\n model: null\n };\n }\n\n getFullData () {\n return null;\n }\n}\n","import {\n getEvent,\n getD3Drag\n } from 'muze-utils';\n\n/**\n * Adds dragging action to the target element.\n * @param {firebolt} firebolt firebolt\n * @param {SVGElement} targetEl Element on which brushing action is needed.\n * @param {Array} behaviours Array of behaviours\n */\n/* istanbul ignore next */ const drag = firebolt => (targetEl, behaviours) => {\n let startPos = {};\n let endPos = {};\n let payload;\n const d3Drag = getD3Drag();\n const context = firebolt.context;\n const boundingBox = context.measurement().gradientDimensions;\n const axisType = context.config().align === 'horizontal' ? 'x' : 'y';\n const axisScale = context.axis().source().scale();\n const rangeShifter = axisScale.range()[axisType === 'x' ? 0 : 1];\n\n targetEl.call(d3Drag().on('start', () => {\n const event = getEvent();\n startPos = {\n x: event.x,\n y: event.y\n };\n }).on('drag', () => {\n const event = getEvent();\n\n endPos = {\n x: event.x,\n y: event.y\n };\n endPos.x = Math.max(0, Math.min(endPos.x, boundingBox.width));\n endPos.y = Math.max(0, Math.min(endPos.y, boundingBox.height));\n\n payload = {\n criteria: {\n [context.fieldName()]: [axisScale.invert(startPos[axisType] + rangeShifter * 2),\n axisScale.invert(endPos[axisType] + rangeShifter * 2)].sort((a, b) => a - b)\n }\n };\n behaviours.forEach(behaviour => firebolt.dispatchBehaviour(behaviour, payload));\n }).on('end', () => {\n const event = getEvent();\n\n endPos = {\n x: event.x,\n y: event.y\n };\n endPos.x = Math.max(0, Math.min(endPos.x, boundingBox.width));\n endPos.y = Math.max(0, Math.min(endPos.y, boundingBox.height));\n if (startPos[axisType] === endPos[axisType]) {\n payload = {\n criteria: {}\n };\n } else {\n payload = {\n criteria: {\n [context.fieldName()]: [axisScale.invert(startPos[axisType] + rangeShifter * 2),\n axisScale.invert(endPos[axisType] + rangeShifter * 2)].sort((a, b) => a - b)\n }\n };\n }\n behaviours.forEach(behaviour => firebolt.dispatchBehaviour(behaviour, payload));\n }));\n};\n\nexport default drag;\n","/**\n * Adds mouse interactions to target element.\n * @param {Firebolt} Firebolt instance of firebolt.\n * @param {SVGElement} targetEl Element on which the event listeners will be attached.\n * @param {Array} behaviours Array of behaviours\n */\n/* istanbul ignore next */ const hover = firebolt => (targetEl, behaviours) => {\n const dispatchBehaviour = function (args) {\n const payload = {\n criteria: firebolt.context.getCriteriaFromData(args)\n };\n behaviours.forEach(behaviour => firebolt.dispatchBehaviour(behaviour, payload));\n event.stopPropagation();\n };\n\n targetEl.on('mouseover', dispatchBehaviour)\n .on('mousemove', dispatchBehaviour)\n .on('mouseout', () => {\n behaviours.forEach(behaviour => firebolt.dispatchBehaviour(behaviour, {\n criteria: null\n }));\n event.stopPropagation();\n });\n};\n\nexport default hover;\n","/**\n * Adds mouse interactions to target element.\n * @param {VisualUnit} instance instance of visual unit.\n * @param {SVGElement} targetEl Element on which the event listeners will be attached.\n * @param {Array} behaviours Array of behaviours\n */\nconst click = firebolt => (targetEl, behaviours) => {\n const dispatchBehaviour = function (args) {\n const payload = {\n criteria: firebolt.context.getCriteriaFromData(args)\n };\n behaviours.forEach(behaviour => firebolt.dispatchBehaviour(behaviour, payload));\n };\n\n targetEl.on('click', dispatchBehaviour);\n};\n\nexport default click;\n","import drag from './drag';\nimport hover from './hover';\nimport click from './click';\nimport * as ACTIONNAMES from '../../enums/actions';\n\nexport const physicalActions = {\n [ACTIONNAMES.DRAG]: drag,\n [ACTIONNAMES.HOVER]: hover,\n [ACTIONNAMES.CLICK]: click\n};\n\n","export const DRAG = 'drag';\nexport const HOVER = 'hover';\nexport const SELECTIONDRAG = 'selectiondrag';\nexport const CLICK = 'click';\n","import {\n getMousePos,\n getEvent,\n getD3Drag\n } from 'muze-utils';\nimport { HEIGHT, WIDTH, HORIZONTAL } from '../../enums/constants';\n\nconst getSelectionCriteria = (subject, axis, measures) => {\n let criteria = [];\n const {\n axisScale,\n axisType\n } = axis;\n const {\n startPos,\n endPos,\n selectionBoxMeasure,\n drawingInfMeasure,\n offset\n } = measures;\n const subjectStartPoint = subject[axisType];\n\n if (startPos[axisType] === endPos[axisType]) {\n criteria = [];\n } else if (subjectStartPoint + selectionBoxMeasure >= drawingInfMeasure + offset) {\n criteria = [axisScale.invert(drawingInfMeasure + offset - selectionBoxMeasure),\n axisScale.invert(drawingInfMeasure + offset)];\n } else if (subjectStartPoint - offset < offset) {\n criteria = [axisScale.invert(offset * 2), axisScale.invert(selectionBoxMeasure + offset * 2)];\n } else {\n criteria = [axisScale.invert(subjectStartPoint), axisScale.invert(subjectStartPoint + selectionBoxMeasure)];\n }\n axisType === 'x' ? criteria : criteria.reverse();\n return criteria;\n};\n\nexport const selectionBoxDrag = firebolt => (targetEl, behaviours) => {\n let startPos = {};\n let payload;\n const endPos = {};\n const d3Drag = getD3Drag();\n const context = firebolt.context;\n const axisScale = context.axis().source().scale();\n const axisType = context.config().align === HORIZONTAL ? 'x' : 'y';\n const drawingInfMeasure = context.measurement().gradientDimensions[axisType === 'x' ?\n WIDTH : HEIGHT];\n const offset = axisScale.range()[axisType === 'x' ? 0 : 1];\n const measures = {\n drawingInfMeasure,\n offset\n };\n let subject = {};\n\n targetEl.call(d3Drag().on('start', function () {\n const event = getEvent();\n startPos = getMousePos(this, event.sourceEvent);\n subject = event.subject;\n }).on('drag', () => {\n const event = getEvent();\n const selectionBoxMeasure = subject[axisType === 'x' ? WIDTH : HEIGHT];\n\n subject.x += event.dx;\n subject.y += event.dy;\n\n measures.selectionBoxMeasure = selectionBoxMeasure;\n measures.startPos = startPos;\n measures.endPos = endPos;\n const criteria = getSelectionCriteria(subject, { axisScale, axisType }, measures);\n\n payload = {\n criteria: {\n [context.fieldName()]: criteria\n },\n fadeOut: true\n };\n firebolt.dispatchBehaviour(behaviours[0], payload);\n }).on('end', () => {\n const event = getEvent();\n const selectionBoxMeasure = subject[axisType === 'x' ? WIDTH : HEIGHT];\n measures.selectionBoxMeasure = selectionBoxMeasure;\n measures.startPos = startPos;\n measures.endPos = endPos;\n const criteria = getSelectionCriteria(event, { axisScale, axisType }, measures);\n payload = {\n criteria: {\n [context.fieldName()]: criteria\n },\n fadeOut: true,\n config: {\n transition: {\n duration: 200\n }\n }\n };\n firebolt.dispatchBehaviour(behaviours[0], payload);\n }));\n};\n\n","import { makeElement } from 'muze-utils';\nimport { SpawnableSideEffect } from '@chartshq/muze-firebolt';\nimport { CLASSPREFIX, HEIGHT, WIDTH, HORIZONTAL, RECT } from '../../../enums/constants';\nimport { SELECTIONBOX } from '../../../enums/side-effects';\nimport { selectionBoxDrag } from '../../physical/selection-box-drag';\nimport './styles.scss';\n\n/**\n * This class is used to create a selection box which is used by visual unit for brushing and\n * selection in the canvas.\n * @class SelectionBox\n */\n/* istanbul ignore next */ class SelectionBox extends SpawnableSideEffect {\n static formalName () {\n return SELECTIONBOX;\n }\n\n /**\n * It returns the default configuration needed by selectionbox.\n * @return {Object} Default configuration of the selection box.\n */\n static defaultConfig () {\n return {\n className: 'legend-selection-box',\n classPrefix: CLASSPREFIX\n };\n }\n\n /**\n * Draws the selectionbox with the specified dimensions.\n */\n /* istanbul ignore next */ apply (selectionSet, payload) {\n let x;\n let y;\n let width;\n let height;\n const firebolt = this.firebolt;\n const context = firebolt.context;\n const config = this.config();\n const axis = context.axis().source();\n const className = `${config.classPrefix}-${config.className}`;\n\n const domain = payload.criteria[firebolt.context.fieldName()];\n const axisScale = axis.scale();\n const range = domain ? [axis.getScaleValue(domain[0]), axis.getScaleValue(domain[1])] : [];\n\n const axisType = context.config().align === HORIZONTAL ? 'x' : 'y';\n\n const gradientDimension = firebolt.context.measurement().gradientDimensions[axisType === 'x' ?\n HEIGHT : WIDTH];\n\n const rangeShifter = axisScale.range()[axisType === 'x' ? 0 : 1];\n const legendGradContainer = context.getDrawingContext().svgContainer;\n const legendSelGroup = makeElement(legendGradContainer, 'g', [1], `${config.classPrefix}-selection-box-group`);\n\n if (firebolt.context.config().align === HORIZONTAL) {\n x = range[0] - rangeShifter || 0;\n y = 0;\n width = range[1] - range[0] || 0;\n height = gradientDimension;\n } else {\n x = 0;\n y = range[1] - rangeShifter || 0;\n height = range[0] - range[1] || 0;\n width = gradientDimension;\n }\n const enterFn = function (el) {\n selectionBoxDrag(firebolt)(el, ['brush']);\n };\n const selBox = makeElement(legendSelGroup, RECT, [{ domain, x, y, width, height }], className,\n { enter: enterFn });\n selBox.attr('y', y)\n .attr('x', x)\n .attr(WIDTH, width)\n .attr(HEIGHT, height);\n }\n}\n\nexport default SelectionBox;\n\n","import { selectElement } from 'muze-utils';\n\nexport const strategies = (firebolt) => {\n const context = firebolt.context;\n const classed = (set, className, change) => {\n const classPrefix = context.config().classPrefix;\n selectElement(context.mount())\n .selectAll(`.${classPrefix}-legend-columns`)\n .filter(d => set.uids.indexOf(d.id) !== -1)\n .selectAll('div')\n .classed(className, change);\n };\n\n return {\n fade: (set, config = {}) => {\n const classPrefix = context.config().classPrefix;\n if (!set.mergedEnter.length && !set.mergedExit.length) {\n classed(set.completeSet, config.className || `${classPrefix}-legend-fadeout`, false);\n } else {\n classed(set.mergedExit, config.className || `${classPrefix}-legend-brighten`, false);\n classed(set.mergedExit, config.className || `${classPrefix}-legend-fadeout`, true);\n classed(set.mergedEnter, config.className || `${classPrefix}-legend-fadeout`, false);\n }\n },\n brighten: (set, config = {}) => {\n const classPrefix = context.config().classPrefix;\n if (!set.mergedEnter.length && !set.mergedExit.length) {\n classed(set.completeSet, config.className || `${classPrefix}-legend-brighten`, false);\n } else {\n classed(set.mergedEnter, config.className || `${classPrefix}-legend-brighten`, true);\n classed(set.mergedExit, config.className || `${classPrefix}-legend-brighten`, false);\n }\n }\n };\n};\n","import { GenericSideEffect } from '@chartshq/muze-firebolt';\nimport { strategies } from './strategies';\nimport { Highlighter } from '../../../enums/side-effects';\n\nexport default class LegendHighlighter extends GenericSideEffect {\n constructor (...params) {\n super(...params);\n this._strategies = strategies(this.firebolt);\n this._strategy = 'brighten';\n }\n\n static formalName () {\n return Highlighter;\n }\n\n apply (selectionSet, payload, options = {}) {\n const strategy = this._strategies[options.strategy || this._strategy];\n\n strategy(selectionSet, this);\n }\n}\n","import { mergeRecursive } from 'muze-utils';\n\nexport const PROPS = {\n config: {\n sanitization: (context, value) => mergeRecursive(context._config || {}, value)\n },\n data: {},\n fieldName: {},\n legendContainer: {},\n measurement: {\n sanitization: (context, value) => {\n const measurement = mergeRecursive(context._measurement, value);\n ['padding', 'border', 'margin'].forEach((space) => {\n measurement[space] = Math.min(measurement[space] > 0 ? measurement[space] : 0,\n measurement.maxWidth * 0.1, measurement.maxHeight * 0.1);\n });\n return measurement;\n }\n },\n logicalSpace: {},\n metaData: {},\n range: {\n sanitization: (context, value) => {\n context.scale().range(value);\n context.resetLogicalSpace();\n context.store().commit('range', value);\n return value;\n }\n },\n scale: {},\n smartTicks: {},\n store: {},\n title: {\n sanitization: (context, value) => mergeRecursive(context._title || {}, value)\n }\n};\n","import { getSymbol } from 'muze-utils';\nimport {\n CENTER,\n LEFT,\n RIGHT\n} from '../enums/constants';\n\nexport const ALIGN = {\n HORIZONTAL: 'horizontal',\n VERTICAL: 'vertical'\n};\n\nexport const DEFAULT_MEASUREMENT = {\n height: 30,\n width: 30,\n maxWidth: Infinity,\n maxHeight: Infinity,\n padding: 2,\n margin: 2,\n border: 1\n};\n\nexport const LEGEND_TITLE = {\n text: '',\n orientation: (pos) => {\n if (pos === LEFT || pos === RIGHT) {\n return LEFT;\n } return CENTER;\n }\n};\n\nexport const DEFAULT_CONFIG = {\n classPrefix: 'muze',\n\n formatter: {\n bounds: {\n lower: 'less than',\n upper: 'more than'\n }\n },\n item: {\n text: {\n orientation: 'right',\n width: 10,\n formatter: val => val\n },\n icon: {\n className: 'legend-icon',\n height: 20,\n width: 20,\n color: 'rgba(0,0,0,.5)',\n type: 'square'\n }\n }\n};\n\n/**\n * Creates a map of pre defined icons\n *\n * @param {string} icon Accepts a icon name like 'square', 'cross', 'diamond' etc\n * @return {Object} icon object which can be used to draw the icons\n */\nexport const ICON_MAP = (icon) => {\n if (icon && typeof (icon) === 'string') {\n return getSymbol(icon);\n } return icon;\n};\n","import { makeElement, numberInterpolator } from 'muze-utils';\n\nimport {\n SCALE_FUNCTIONS,\n WIDTH,\n HEIGHT,\n LEFT,\n RIGHT,\n TOP,\n BOTTOM\n} from '../enums/constants';\n\n/**\n *\n *\n * @param {*} scale\n * @returns\n */\nexport const getScaleInfo = (scale) => {\n const scaleType = scale.constructor.type();\n const domain = scale.uniqueValues();\n const steps = scale.config().stops || 1;\n const scaleFn = SCALE_FUNCTIONS[scaleType];\n\n return { scaleType, domain, steps, scaleFn };\n};\n\n/**\n *\n *\n * @param {*} domain\n * @param {*} steps\n * @returns\n */\nexport const getInterpolatedData = (domain, steps) => {\n const domainForLegend = [];\n const interpolatedFn = numberInterpolator()(domain[0], domain[1]);\n\n for (let i = 0; i <= steps; i++) {\n domainForLegend[i] = interpolatedFn(i / steps);\n }\n return domainForLegend;\n};\n\n/**\n *\n *\n * @param {*} container\n * @param {*} text\n * @param {*} measurement\n * @param {*} classPrefix\n */\nexport const titleCreator = (container, title, measurement, config) =>\n makeElement(container, 'div', [1], `${config.classPrefix}-legend-title`)\n .style(WIDTH, '100%')\n .style(HEIGHT, `${measurement.height}px`)\n .style('padding-left', `${measurement.padding}px`)\n .style('padding-right', `${measurement.padding}px`)\n .style('border-bottom-width', `${measurement.border}px`)\n .style('text-align', title.orientation instanceof Function ?\n title.orientation(config.position) : title.orientation)\n .text(title.text)\n .node();\n\n/**\n *\n *\n * @param {*} data\n * @param {*} prop\n * @param {*} labelManager\n * @return\n */\nexport const getMaxMeasures = (data, prop, labelManager) => {\n let maxHeight = -Infinity;\n let maxWidth = -Infinity;\n\n data.forEach((item) => {\n const value = prop ? item[prop] : item;\n const space = labelManager.getOriSize(value);\n maxHeight = Math.max(space.height + 2, maxHeight);\n maxWidth = Math.max(space.width + 2, maxWidth);\n });\n\n return { height: maxHeight, width: maxWidth };\n};\n\n/**\n *\n *\n * @param {*} data\n * @param {*} prop\n * @param {*} labelManager\n * @return\n */\nexport const getItemMeasures = (data, prop, labelManager, formatter) => {\n const space = [];\n\n data.forEach((item, index) => {\n const value = prop ? item[prop] : item;\n const { height, width } = labelManager.getOriSize(formatter(value));\n space[index] = { height: height + 1, width: width + 1 };\n });\n return space;\n};\n\n/**\n *\n *\n * @param {*} textOrientation\n * @param {*} effPadding\n * @param {*} titleSpace\n * @return\n * @memberof Legend\n */\nexport const computeItemSpaces = (config, measures, data) => {\n let totalHeight = 0;\n let totalWidth = 0;\n let maxItemSpaces = {\n width: 0, height: 0\n };\n const {\n effPadding,\n titleWidth,\n labelSpaces,\n titleHeight,\n maxWidth\n } = measures;\n const {\n item,\n align\n } = config;\n const {\n icon,\n text\n } = item;\n const textOrientation = text.orientation;\n const itemSpaces = [];\n const iconSpaces = [];\n let maxIconWidth = 0;\n labelSpaces.forEach((labelSpace, i) => {\n const itemSpace = { width: 0, height: 0 };\n const iconSpace = { width: 0, height: 0 };\n const datum = data[i] || {};\n // Compute each legend item height/width\n if (textOrientation === LEFT || textOrientation === RIGHT) {\n // Get label, icon and item widths\n labelSpace.width += effPadding;\n iconSpace.width = (datum.size ? 2 * Math.sqrt(datum.size / Math.PI) : icon.width) + effPadding;\n maxIconWidth = Math.max(iconSpace.width, maxIconWidth);\n itemSpace.width = labelSpace.width + maxIconWidth;\n\n // Get label, icon and item heights\n labelSpace.height = Math.max(labelSpace.height, icon.height) + effPadding;\n iconSpace.height = labelSpace.height;\n itemSpace.height = labelSpace.height;\n } else {\n // Get label, icon and item widths\n labelSpace.width = Math.max(labelSpace.width, datum.size ? 2 * Math.sqrt(datum.size / Math.PI)\n : icon.width) + effPadding;\n iconSpace.width = labelSpace.width;\n itemSpace.width = labelSpace.width;\n maxIconWidth = Math.max(iconSpace.width, maxIconWidth);\n\n // Get label, icon and item heights\n labelSpace.height += effPadding;\n iconSpace.height = icon.height + effPadding;\n itemSpace.height = labelSpace.height + iconSpace.height;\n }\n // Compute height and width of legend for each alignment\n if (align === 'horizontal') {\n totalHeight = Math.max(totalHeight, itemSpace.height);\n } else {\n totalHeight += itemSpace.height;\n totalWidth = Math.max(totalWidth, itemSpace.width, titleWidth) + effPadding;\n }\n maxItemSpaces = {\n width: Math.max(itemSpace.width, maxItemSpaces.width),\n height: Math.max(itemSpace.height, maxItemSpaces.height)\n };\n itemSpaces.push(itemSpace);\n iconSpaces.push(iconSpace);\n });\n\n itemSpaces.forEach((itemSpace, i) => {\n if (align === 'horizontal') {\n itemSpace.height = totalHeight;\n iconSpaces[i].width = maxIconWidth;\n if (textOrientation === LEFT || textOrientation === RIGHT) {\n labelSpaces[i].height = totalHeight;\n iconSpaces[i].height = totalHeight;\n itemSpaces[i].width = labelSpaces[i].width + maxIconWidth;\n } else {\n labelSpaces[i].width = maxIconWidth;\n itemSpaces[i].width = maxIconWidth;\n labelSpaces[i].width = maxIconWidth;\n }\n totalWidth = Math.max(totalWidth + itemSpaces[i].width, titleWidth);\n } else {\n itemSpace.width = Math.max(totalWidth, maxWidth);\n if (textOrientation === TOP || textOrientation === BOTTOM) {\n labelSpaces[i].width = totalWidth;\n iconSpaces[i].width = totalWidth;\n maxIconWidth = totalWidth;\n } else {\n iconSpaces[i].width = maxIconWidth;\n itemSpaces[i].width = labelSpaces[i].width + maxIconWidth;\n labelSpaces[i].width = maxItemSpaces.width - maxIconWidth;\n totalWidth = Math.max(totalWidth, itemSpace.width, titleWidth) + effPadding;\n }\n }\n });\n totalHeight += titleHeight + effPadding;\n\n return { totalHeight, totalWidth, itemSpaces, iconSpaces, maxItemSpaces, maxIconWidth };\n};\n\n/**\n *\n *\n * @param {*} type\n * @param {*} scaleInfo\n * @param {*} domainInfo\n * @returns\n */\nexport const getDomainBounds = (type, scaleInfo, domainInfo) => {\n const {\n scaleFn,\n scaleType,\n scale\n } = scaleInfo;\n const {\n domain,\n domainBounds,\n domainLeg,\n steps\n } = domainInfo;\n const ele = domain[type === 'lower' ? 0 : domain.length - 1];\n const step = steps[type === 'lower' ? 0 : steps.length - 1];\n\n return {\n [scaleType]: scaleType === 'size' ? scale[scaleFn](ele) * scale.getScaleFactor() : scale[scaleFn](ele),\n value: domainBounds[type],\n id: type === 'lower' ? 0 : domainLeg.length + 2,\n range: [ele, step]\n };\n};\n","import {\n makeElement,\n selectElement,\n getUniqueId,\n getSmartComputedStyle,\n generateGetterSetters,\n mergeRecursive\n} from 'muze-utils';\nimport { behaviouralActions } from '@chartshq/muze-firebolt';\nimport * as legendBehaviours from '../firebolt/behavioural';\n\nimport { LegendFireBolt } from '../firebolt/legend-firebolt';\nimport { actionBehaviourMap } from '../firebolt/action-behaviour-map';\nimport { physicalActions } from '../firebolt/physical';\nimport * as sideEffects from '../firebolt/side-effects';\nimport { behaviourEffectMap } from '../firebolt/behaviour-effect-map';\nimport { VALUE, PATH } from '../enums/constants';\nimport { PROPS } from './props';\nimport { DEFAULT_MEASUREMENT, DEFAULT_CONFIG, LEGEND_TITLE } from './defaults';\nimport { getItemMeasures, titleCreator, computeItemSpaces } from './legend-helper';\n\n/**\n * Creates a Legend from the axes of a canvas\n *\n * @param {Object} dependencies : legend data\n * @class SimpleLegend\n */\nexport default class SimpleLegend {\n\n /**\n * Creates an instance of Legend.\n * @param {Object} dependencies Set of dependencies required by the legend\n * @memberof Legend\n */\n constructor (dependencies) {\n this._data = [];\n this._metaData = [];\n this._mount = null;\n this._fieldName = null;\n this._title = Object.assign({}, LEGEND_TITLE);\n this._metaData = null;\n this._labelManager = dependencies.labelManager;\n this._cells = dependencies.cells;\n this._id = getUniqueId();\n this._measurement = Object.assign({}, this.constructor.defaultMeasurement());\n this._config = mergeRecursive({}, this.constructor.defaultConfig());\n\n generateGetterSetters(this, PROPS);\n this._computedStyle = getSmartComputedStyle(selectElement('body'),\n `${this.config().classPrefix}-legend-item-info`);\n\n this._firebolt = new LegendFireBolt(this, {\n behavioural: Object.assign({}, behaviouralActions, legendBehaviours),\n physical: physicalActions,\n physicalBehaviouralMap: actionBehaviourMap\n }, sideEffects, behaviourEffectMap);\n }\n\n id () {\n return this._id;\n }\n /**\n * Initializes an instance of the class\n *\n * @static\n * @param {Object} dependencies Set of dependencies required by the legend\n * @return {Instance} returns a new instance of Legend\n * @memberof Legend\n */\n static create (dependencies) {\n return new SimpleLegend(dependencies);\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof SimpleLegend\n */\n static defaultConfig () {\n return DEFAULT_CONFIG;\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof SimpleLegend\n */\n static defaultMeasurement () {\n return DEFAULT_MEASUREMENT;\n }\n\n /**\n *\n *\n * @readonly\n * @memberof SimpleLegend\n */\n firebolt (...params) {\n if (params.length) {\n return this;\n }\n return this._firebolt;\n }\n\n /**\n *\n *\n * @return\n * @memberof Legend\n */\n elemType () {\n return PATH;\n }\n\n canvasAlias (...alias) {\n if (alias.length) {\n this._canvasAlias = alias[0];\n return this;\n }\n return this._canvasAlias;\n }\n\n /**\n *\n *\n * @return\n * @memberof Legend\n */\n mount (...params) {\n if (params.length) {\n this._mount = params[0];\n this.render();\n return this;\n }\n return this._mount;\n }\n\n /**\n *\n *\n * @param {*} effPadding\n * @param {*} align\n * @return\n * @memberof Legend\n */\n getLabelSpaces () {\n const {\n item,\n classPrefix\n } = this.config();\n this._labelManager.setStyle(getSmartComputedStyle(selectElement('body'),\n `${classPrefix}-legend-item-info`));\n return getItemMeasures(this.data(), VALUE, this._labelManager, item.text.formatter);\n }\n\n /**\n * Sets the height and width of a legend based on provided max\n * height and width and based on its contents\n *\n * @return {Instance} Current instance\n * @memberof Legend\n */\n setLegendMeasures () {\n const {\n width,\n height,\n maxWidth,\n maxHeight,\n padding,\n margin,\n border\n } = this.measurement();\n const {\n align\n } = this.config();\n\n // Effective padding, margin and padding\n const effPadding = padding * 2;\n const effBorder = border * 2;\n const effMargin = margin * 2;\n\n this.data(this.dataFromScale(this.scale()));\n // Get space occupied by title\n const titleSpace = this.getTitleSpace();\n const titleHeight = titleSpace.height > 0 ? titleSpace.height * 1.25 : 0;\n const titleWidth = titleSpace.width;\n\n // Get space occupied by labels\n const labelSpaces = this.getLabelSpaces(effPadding, align);\n\n const {\n totalHeight, totalWidth, itemSpaces, iconSpaces, maxItemSpaces, maxIconWidth\n } = computeItemSpaces(this.config(),\n { effPadding, titleWidth, labelSpaces, titleHeight, maxWidth, maxHeight }, this.data());\n\n this.measurement({\n width: Math.max(totalWidth, width) + effMargin + effBorder,\n height: Math.max(totalHeight, height) + effMargin + effBorder,\n labelSpaces,\n iconSpaces,\n itemSpaces,\n maxItemSpaces,\n maxIconWidth,\n titleSpaces: {\n width: Math.min(maxWidth, this.measurement().width) - effMargin - effBorder,\n height: titleHeight\n }\n });\n return this;\n }\n\n /**\n * Returns the space occupied by the legend title\n *\n * @return {Object} Space occupied by title\n * @memberof Legend\n */\n getTitleSpace () {\n this._labelManager.setStyle(getSmartComputedStyle(selectElement('body'),\n `${this.config().classPrefix}-legend-title`));\n return this._labelManager.getOriSize(this.title().text ? this.title().text : '');\n }\n\n /**\n * Creates the title for the legend\n *\n * @param {DOM} container Container made for the title\n * @return {Selection} Title and it's node\n * @memberof Legend\n */\n renderTitle (container) {\n const { titleSpaces, border, padding } = this.measurement();\n return titleCreator(container, this.title(), {\n height: titleSpaces.height,\n border,\n padding\n }, this.config());\n }\n\n /**\n * Render the legend with its title\n *\n * @param {DOM} mountPoint Point where the legend and title are to be appended\n * @return {Instance} Current instance of legend\n * @memberof Legend\n */\n render () {\n const firebolt = this.firebolt();\n const {\n classPrefix\n } = this.config();\n const {\n maxWidth,\n maxHeight,\n width,\n height,\n margin,\n border\n } = this.measurement();\n const legendContainer = makeElement(selectElement(this.mount()), 'div', [1], `${classPrefix}-legend-box`);\n\n legendContainer.classed(`${classPrefix}-legend-box-${this._id}`, true);\n legendContainer.style('float', 'left');\n // set height and width\n legendContainer.style('width', `${Math.min(maxWidth, width) - margin * 2}px`)\n .style('height', `${Math.min(maxHeight, height) - margin * 2}px`)\n .style('margin', `${margin}px`)\n .style('border-width', `${border}px`);\n this.legendContainer(legendContainer.node());\n\n // create title\n this.renderTitle(legendContainer);\n firebolt.createSelectionSet(this.data().map(d => d.id));\n return legendContainer;\n }\n /**\n *\n *\n * @param {*} data\n * @returns\n * @memberof StepLegend\n */\n getCriteriaFromData (data) {\n const fieldName = this.fieldName();\n const type = this.metaData().getData().schema[0].type;\n if (type === 'measure') {\n return {\n [fieldName]: data.range\n };\n }\n return [[fieldName], [data.value]];\n }\n}\n","import {\n LEFT,\n RIGHT,\n START,\n END,\n TOP,\n BOTTOM,\n HORIZONTAL,\n VERTICAL,\n CENTER,\n SHAPE,\n VALUE\n} from '../enums/constants';\n\nconst legendOrientation = {\n [HORIZONTAL]: {\n datasets: data => ({\n row: [1],\n column: data\n }),\n itemContainerMeasures: (measurement) => {\n const {\n itemSpaces,\n width\n } = measurement;\n return {\n row: {\n width: `${width}px`,\n padding: `${0}px`\n },\n column: {\n width: (d, i) => `${itemSpaces[i].width}px`,\n padding: `${0}px`\n }\n };\n },\n getStepSpacesInfo: (measurement) => {\n const { maxItemSpaces, height } = measurement;\n return {\n iconHeight: height,\n iconWidth: maxItemSpaces.width,\n stepPadding: {\n horizontal: true,\n vertical: false\n }\n };\n }\n },\n [VERTICAL]: {\n datasets: data => ({\n row: data,\n column: d => [d]\n }),\n itemContainerMeasures: (measurement, config) => {\n const {\n width\n } = measurement;\n const { padding } = config;\n return {\n row: {\n width: `${width}px`,\n padding: `${padding}px`\n },\n column: {\n width: `${width}px`,\n padding: `${0}px`\n }\n };\n },\n getStepSpacesInfo: (measurement) => {\n const { maxItemSpaces, width } = measurement;\n return {\n iconHeight: maxItemSpaces.height,\n iconWidth: width,\n stepPadding: {\n horizontal: false,\n vertical: true\n }\n };\n }\n }\n};\n\nexport const positionConfig = {\n [LEFT]: legendOrientation[VERTICAL],\n [RIGHT]: legendOrientation[VERTICAL],\n [TOP]: legendOrientation[HORIZONTAL],\n [BOTTOM]: legendOrientation[HORIZONTAL]\n};\n\nexport const alignmentMap = {\n [LEFT]: END,\n [RIGHT]: START,\n [TOP]: CENTER,\n [BOTTOM]: CENTER\n};\n\n// Reverses data for step legend\nexport const stepData = data => ({\n [LEFT]: data.reverse(),\n [RIGHT]: data.reverse(),\n [TOP]: data,\n [BOTTOM]: data\n});\n\n// Changes the item layout based on the position of the text\nexport const itemStack = {\n [LEFT]: [VALUE, SHAPE],\n [RIGHT]: [SHAPE, VALUE],\n [TOP]: [VALUE, SHAPE],\n [BOTTOM]: [SHAPE, VALUE]\n};\n","import { makeElement, selectElement, applyStyle } from 'muze-utils';\nimport { ICON_MAP } from './defaults';\nimport { positionConfig, alignmentMap, itemStack } from './position-config';\nimport {\n WIDTH,\n HEIGHT,\n CENTER,\n VALUE,\n RECT,\n LEFT,\n RIGHT\n} from '../enums/constants';\n\n/**\n *\n *\n * @param {*} container\n * @param {*} data\n * @param {*} legendInstance\n * @param {*} align\n * @return\n */\nexport const getItemContainers = (container, data, legendInstance) => {\n const measurement = legendInstance.measurement();\n const config = legendInstance.config();\n const {\n itemSpaces\n } = measurement;\n const {\n classPrefix,\n position\n } = config;\n const positionObj = positionConfig[position];\n const datasets = positionObj.datasets(data);\n const measures = positionObj.itemContainerMeasures(measurement, config);\n\n const rows = makeElement(container, 'div', datasets.row, `${classPrefix}-legend-row`);\n rows.style(HEIGHT, (d, i) => `${itemSpaces[i].height}px`);\n rows.style(WIDTH, measures.row.width);\n rows.style('padding', measures.row.padding);\n\n const columns = makeElement(rows, 'div', datasets.column, `${classPrefix}-legend-columns`);\n columns.style(WIDTH, measures.column.width);\n columns.style('padding', measures.column.padding);\n\n return columns;\n};\n\n/**\n *\n *\n * @param {*} container\n * @param {*} classPrefix\n * @param {*} data\n * @returns\n * @memberof DiscreteLegend\n */\nexport const createLegendSkeleton = (context, container, classPrefix, data) => {\n let gradWidth = 0;\n let gradHeight = 0;\n let maxGradHeight = 0;\n let maxGradWidth = 0;\n const measurement = context.measurement();\n const {\n margin,\n border,\n titleSpaces,\n width,\n height,\n maxWidth,\n maxHeight\n } = measurement;\n\n gradHeight = height - (titleSpaces.height + 2 * margin + 2 * border);\n gradWidth = width - (margin * 2 + border * 2);\n\n maxGradHeight = maxHeight - (titleSpaces.height + margin * 2 + border * 2);\n maxGradWidth = maxWidth - (margin * 2 + border * 2);\n\n let legendBody = makeElement(container, 'div', [1], `${classPrefix}-legend-body`);\n legendBody.select(`.${classPrefix}-legend-overflow`).remove();\n // Create a div with scroll when overflow\n if (maxGradWidth && maxGradWidth < gradWidth) {\n legendBody = legendBody.style(WIDTH, `${maxGradWidth}px`).style('overflow-x', 'scroll');\n }\n // Create a div with scroll when overflow\n if (maxGradHeight && maxGradHeight < gradHeight) {\n legendBody.style(HEIGHT, `${maxGradHeight}px`).style('overflow-y', 'scroll');\n }\n\n legendBody = makeElement(legendBody, 'div', [1], `${classPrefix}-legend-overflow`);\n\n legendBody.style(WIDTH, `${gradWidth}px`);\n legendBody.style(HEIGHT, `${gradHeight}px`);\n\n const legendItem = getItemContainers(legendBody, data, context);\n return { legendItem };\n};\n\n/**\n * Creates legend item based on alignment and text orientation\n *\n * @param {Selection} container Point where items are to be mounted\n * @return {Instance} Current instance\n * @memberof Legend\n */\nexport const createItemSkeleton = (context, container) => {\n const {\n classPrefix,\n item\n } = context.config();\n const textOrientation = item.text.orientation;\n\n const stack = itemStack[textOrientation];\n const itemSkeleton = makeElement(container, 'div', (d, i) => stack.map(e => [e, d[e], d.color, d.size,\n d.value, context.fieldName(), i]), `${classPrefix}-legend-item-info`);\n\n const alignClass = alignmentMap[textOrientation];\n\n itemSkeleton.classed(alignClass, true);\n return { itemSkeleton };\n};\n\n/**\n *\n *\n * @param {*} measureType\n * @param {*} stepColorCheck\n */\nexport const applyItemStyle = (item, measureType, stepColorCheck, context) => {\n const {\n padding,\n labelSpaces,\n iconSpaces,\n maxIconWidth\n } = context.measurement();\n const diff = stepColorCheck ? -padding * 2 : 0;\n\n if (item[0] === VALUE) {\n return `${labelSpaces[item[6]][measureType]}px`;\n }\n return `${measureType === 'width' && !stepColorCheck ? maxIconWidth : iconSpaces[item[6]][measureType] - diff}px`;\n};\n\n/**\n *\n *\n * @param {*} str\n * @returns\n */\nconst checkPath = (str) => {\n if (/^[mzlhvcsqta]\\s*[-+.0-9][^mlhvzcsqta]+/i.test(str) && /[\\dz]$/i.test(str) && str.length > 4) {\n return true;\n }\n return false;\n};\n\n/**\n *\n *\n * @param {*} d\n * @param {*} elem\n */\nconst createShape = function (d, elem, defaultIcon, width, height) {\n const groupElement = elem;\n // const { shape, size, update } = d;\n const size = d[3] || Math.min(width, height) * Math.PI;\n const shape = d[1] || defaultIcon;\n\n if (shape instanceof Promise) {\n shape.then((res) => {\n d.shape = res;\n return createShape(d, elem);\n });\n } else if (shape instanceof Element) {\n let newShape = shape.cloneNode(true);\n\n if (newShape.nodeName.toLowerCase() === 'img') {\n const src = newShape.src || newShape.href;\n newShape = document.createElementNS('http://www.w3.org/2000/svg', 'image');\n newShape.setAttribute('href', src);\n }\n const shapeElement = selectElement(newShape);\n shapeElement.attr('transform', `scale(${size / 100})`);\n return selectElement(groupElement.node().appendChild(newShape));\n } else if (typeof shape === 'string') {\n let pathStr;\n if (checkPath(shape)) {\n pathStr = shape;\n } else {\n pathStr = ICON_MAP(shape).size(size)();\n }\n return makeElement(groupElement, 'path', data => [data]).attr('d', pathStr);\n }\n d[1] = 'circle';\n return createShape(d, elem, 'circle');\n};\n\n/**\n * Returns the icon of the legend item\n *\n * @param {Object} datum Data property attached to the item\n * @param {number} width width of the item\n * @param {number} height height of the item\n * @return {Object|string} returns the path string or the string name of the icon\n * @memberof Legend\n */\nexport const getLegendIcon = (datum, width, height, defaultIcon) => {\n const icon = ICON_MAP(datum[1]);\n\n if (icon) {\n return icon.size(datum[3] || Math.min(width, height) * Math.PI);\n }\n return ICON_MAP(datum[3] ? 'circle' : defaultIcon).size(datum[3] || Math.min(width, height) * Math.PI);\n};\n\n/**\n *\n *\n */\nexport const renderIcon = (icon, container, datum, context) => {\n const {\n classPrefix,\n iconHeight,\n iconWidth,\n maxIconWidth,\n padding,\n color\n } = context;\n const svg = makeElement(container, 'svg', f => [f], `${classPrefix}-legend-icon-svg`)\n .attr(WIDTH, maxIconWidth)\n .attr(HEIGHT, iconHeight)\n .style(WIDTH, `${maxIconWidth}px`)\n .style(HEIGHT, `${iconHeight}px`);\n\n if (icon !== RECT) {\n const group = makeElement(svg, 'g', [datum[1]], `${classPrefix}-legend-icon`);\n createShape(datum, group, datum[3] ? 'circle' : 'square', iconWidth, iconHeight)\n .attr('transform', `translate(${maxIconWidth / 2 - padding} ${iconHeight / 2})`)\n .attr('fill', datum[2] || color);\n } else {\n makeElement(svg, RECT, [datum[1]], `${classPrefix}-legend-icon`)\n .attr('x', 0)\n .attr('y', 0)\n .attr(WIDTH, maxIconWidth)\n .attr(HEIGHT, iconHeight)\n .attr('fill', datum[2] || color);\n }\n};\n\n/**\n * Renders the items in the legend i.e, icon and text\n *\n * @param {DOM} container Point where item is to be mounted\n * @memberof Legend\n */\nexport const renderDiscreteItem = (context, container) => {\n const labelManager = context._labelManager;\n const {\n item,\n classPrefix\n } = context.config();\n const {\n maxIconWidth,\n padding\n } = context.measurement();\n const {\n width: iconWidth,\n height: iconHeight,\n color,\n className\n } = item.icon;\n\n const textOrientation = item.text.orientation;\n const formatter = item.text.formatter;\n\n labelManager.useEllipsesOnOverflow(true);\n applyStyle(container, {\n width: d => applyItemStyle(d, WIDTH, false, context),\n height: d => applyItemStyle(d, HEIGHT, false, context),\n 'text-align': CENTER,\n padding: `${padding}px`\n });\n\n labelManager.setStyle(context._computedStyle);\n container.each(function (d, i) {\n if (d[0] === VALUE) {\n selectElement(this).text(formatter(d[1]))\n .style(`padding-${textOrientation === RIGHT ? LEFT : RIGHT}`, '0px');\n } else {\n // const icon = getLegendIcon(d, iconWidth, iconHeight, type);\n selectElement(this).classed(`${classPrefix}-${className}`, true);\n selectElement(this).classed(`${classPrefix}-${className}-${i}`, true);\n renderIcon('circle', selectElement(this), d, {\n classPrefix,\n iconWidth,\n // iconWidth: 2 * Math.sqrt(d[3] / Math.PI) || iconWidth,\n iconHeight,\n maxIconWidth,\n padding,\n color\n });\n }\n });\n};\n\n/**\n* Renders the items in the legend i.e, icon and text\n*\n* @param {DOM} container Point where item is to be mounted\n* @memberof Legend\n*/\nexport const renderStepItem = (context, container) => {\n const labelManager = context._labelManager;\n const {\n item,\n position,\n classPrefix\n } = context.config();\n const {\n maxItemSpaces,\n maxIconWidth,\n padding\n } = context.measurement();\n const {\n width,\n height,\n color\n } = item.icon;\n const {\n formatter\n } = item.text;\n\n labelManager.useEllipsesOnOverflow(true);\n const { iconHeight, iconWidth, stepPadding } = positionConfig[position].getStepSpacesInfo({\n maxItemSpaces, height, width\n });\n\n applyStyle(container, {\n width: d => applyItemStyle(d, WIDTH, stepPadding.horizontal, context),\n height: d => applyItemStyle(d, HEIGHT, stepPadding.vertical, context),\n 'text-align': 'center',\n padding: `${padding}px`\n });\n\n labelManager.setStyle(context._computedStyle);\n container.each(function (d) {\n if (d[0] === VALUE) {\n selectElement(this).text(formatter(d[1]));\n } else {\n renderIcon(RECT, selectElement(this), d, {\n classPrefix,\n iconWidth,\n iconHeight,\n maxIconWidth,\n color\n });\n }\n });\n};\n","import SimpleLegend from './simple-legend';\nimport { DISCRETE, LEFT, SIZE } from '../enums/constants';\nimport { getScaleInfo } from './legend-helper';\nimport { createLegendSkeleton, createItemSkeleton, renderDiscreteItem } from './renderer';\nimport '../styles.scss';\n\n/**\n * Creates a Legend from the axes of a canvas\n *\n * @param {Object} dependencies : legend data\n * @class Legend\n */\nexport default class DiscreteLegend extends SimpleLegend {\n\n /**\n * Initializes an instance of the class\n *\n * @static\n * @param {Object} dependencies Set of dependencies required by the legend\n * @return {Instance} returns a new instance of Legend\n * @memberof Legend\n */\n static create (dependencies) {\n return new DiscreteLegend(dependencies);\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof DiscreteLegend\n */\n static type () {\n return DISCRETE;\n }\n\n /**\n *\n *\n * @param {*} scale\n * @returns\n * @memberof DiscreteLegend\n */\n dataFromScale (scale) {\n const { scaleType, domain, scaleFn } = getScaleInfo(scale);\n let domainForLegend = [...new Set(domain)];\n const type = this.metaData().getData().schema[0].type;\n\n domainForLegend = domainForLegend.map((ele, i) => {\n let value = 0;\n let range = 0;\n if (type === 'measure') {\n value = (+domainForLegend[i]).toFixed(0);\n const nextVal = domainForLegend[i + 1] ? +domainForLegend[i + 1] : +value;\n range = [value, nextVal.toFixed(0)];\n } else {\n value = domainForLegend[i];\n range = [domainForLegend[i]];\n }\n return {\n [scaleType]: scale[scaleFn](ele),\n value,\n id: i,\n range\n };\n }).filter(d => d.value !== null);\n\n domainForLegend = scaleType === SIZE ? domainForLegend.sort((a, b) => a[scaleType] - b[scaleType])\n : domainForLegend;\n return domainForLegend;\n }\n\n /**\n * Render the legend with its title\n *\n * @param {DOM} mountPoint Point where the legend and title are to be appended\n * @return {Instance} Current instance of legend\n * @memberof Legend\n */\n render () {\n const firebolt = this.firebolt();\n const data = this.data();\n const { classPrefix } = this.config();\n const legendContainer = super.render(this.mount());\n // create Legend\n const { legendItem } = createLegendSkeleton(this, legendContainer, classPrefix, data);\n const { itemSkeleton } = createItemSkeleton(this, legendItem);\n renderDiscreteItem(this, itemSkeleton);\n legendContainer.selectAll('div').style('float', LEFT);\n firebolt.mapActionsAndBehaviour();\n firebolt.createSelectionSet(this.data().map(d => d.id));\n return legendContainer;\n }\n}\n","import { makeElement, applyStyle } from 'muze-utils';\nimport { ContinousAxis } from '@chartshq/muze-axis';\nimport { BOTTOM, RIGHT } from '../enums/constants';\nimport { ALIGN } from './defaults';\nimport '../styles.scss';\n\n/**\n *\n *\n * @param {*} data\n * @returns\n */\nexport const getGradientDomain = (data) => {\n if (typeof data[0].value === 'number') {\n return data.reduce((accumulator, currentValue) =>\n [Math.min(currentValue.value, accumulator[0]), Math.max(currentValue.value, accumulator[1])],\n [Number.MAX_VALUE, Number.MIN_VALUE]);\n }\n return data.map(e => e.value);\n};\n\n/**\n *\n *\n * @param {*} container\n * @param {*} data\n * @param {*} domain\n * @returns\n */\nexport const makeLinearGradient = (container, data, domain) => {\n const defs = makeElement(container, 'defs', [1]);\n const linearGradient = makeElement(defs, 'linearGradient', [1])\n .attr('id', 'linear-gradient')\n .attr('x1', '0%')\n .attr('y2', '0%');\n makeElement(linearGradient, 'stop', data, 'stop-gradient')\n .attr('offset', d => `${(d.value - domain[0]) * 100 / (domain[1] - domain[0])}%`)\n .attr('stop-color', d => d.color);\n return linearGradient;\n};\n\n/**\n * Creates an axis cell with a linear axis for computing space and\n * creating gradient legend\n *\n * @return {AxisCell} Instance of Axis Cell for the gradient axis\n * @memberof Legend\n */\nexport const createAxis = (context) => {\n const data = context.data();\n const { align } = context.config();\n const AxisCell = context._cells.AxisCell;\n const newAxis = new ContinousAxis({\n id: `legend-${context._id}`,\n orientation: align === ALIGN.VERTICAL ? RIGHT : BOTTOM,\n style: context._computedStyle,\n nice: false,\n showAxisName: false,\n tickValues: data.map(d => d.value),\n fixedBaseline: false\n }, { labelManager: context._labelManager });\n\n newAxis.domain(getGradientDomain(data));\n newAxis.range([1, 1]);\n return new AxisCell().source(newAxis).config({\n margin: { left: 0, bottom: 0, top: 0, right: 0 }\n });\n};\n\n/**\n *\n *\n * @param {*} container\n * @param {*} data\n * @param {*} classPrefix\n * @returns\n * @memberof GradientLegend\n */\nconst createLegendSkeleton = (container, classPrefix, data) => {\n const domain = getGradientDomain(data);\n const legendContainer = makeElement(container, 'div', [1], `${classPrefix}-legend-body`);\n const legendGradSvg = makeElement(legendContainer, 'svg', [1], `${classPrefix}-gradient`);\n const legendGradCont = makeElement(legendGradSvg, 'g', [1], `${classPrefix}-gradient-group`);\n const linearGradient = makeLinearGradient(legendGradSvg, data, domain);\n const legendRect = makeElement(legendGradCont, 'rect', [1], `${classPrefix}-gradient-rect`);\n\n return {\n legendContainer,\n legendGradCont,\n legendGradSvg,\n linearGradient,\n legendRect\n };\n};\n\n/**\n * Renders the axis for the gradient\n *\n * @param {Selection} container Point where axis is to be mounted\n * @param {number} height Height for axis\n * @param {number} width Width for axis\n * @memberof Legend\n */\nexport const renderAxis = (context, container, height, width) => {\n const axis = context.axis();\n\n axis.setAvailableSpace(width, height);\n axis.render(container.node());\n};\n\n/**\n * Renders gradient legends\n *\n * @param {Selection} container Point where the legend is to be appended\n * @memberof GradientLegend\n */\nexport const renderGradient = (context, container) => {\n let gradHeight = 0;\n let gradWidth = 0;\n const {\n align,\n classPrefix,\n item\n } = context.config();\n const data = context.data();\n // Create the skeleton for the legend\n const {\n legendContainer,\n legendGradSvg,\n legendGradCont,\n linearGradient,\n legendRect\n } = createLegendSkeleton(container, classPrefix, data);\n const labelDim = context.axis().source().getAxisDimensions().tickLabelDim;\n const {\n padding,\n margin,\n border,\n titleSpaces,\n maxHeight,\n maxWidth,\n height,\n width\n } = context.measurement();\n const gradientDimensions = {};\n\n gradHeight = Math.floor(height - (titleSpaces.height + 2 * margin + 2 * border));\n gradWidth = Math.floor(width - (margin * 2 + border * 2));\n\n if (align === ALIGN.HORIZONTAL) {\n gradientDimensions.height = item.icon.height;\n gradientDimensions.width = gradWidth - 2 * padding - labelDim.width / 2;\n linearGradient.attr('x2', '100%').attr('y1', '0%');\n legendGradCont.attr('transform', `translate( ${labelDim.width / 2} 0)`);\n renderAxis(context, legendContainer, gradHeight - item.icon.height - padding, gradWidth - 2 * padding - 1);\n legendContainer.classed(`${classPrefix}-overflow-x`, width > maxWidth);\n\n applyStyle(legendContainer, {\n height: `${height}px`,\n width: `${Math.min(width, maxWidth)}px`,\n padding: `${padding}px`\n });\n\n legendRect.attr('height', gradientDimensions.height);\n legendRect.attr('width', gradientDimensions.width - labelDim.width / 2);\n } else {\n gradientDimensions.height = gradHeight - 2 * padding - labelDim.height / 2;\n gradientDimensions.width = item.icon.width;\n linearGradient.attr('x2', '0%').attr('y1', '100%');\n legendGradCont.attr('transform', `translate(0 ${labelDim.height / 2})`);\n renderAxis(context, legendContainer, gradHeight - 2 * padding - 1, gradWidth - item.icon.width - padding * 2);\n legendContainer.classed(`${classPrefix}-overflow-y`, height > maxHeight);\n applyStyle(legendContainer, {\n height: `${Math.min(height, maxHeight)}px`,\n width: `${width}px`,\n padding: `${padding}px`\n });\n legendRect.attr('height', gradientDimensions.height - labelDim.height / 2);\n legendRect.attr('width', gradientDimensions.width);\n }\n\n // Apply Styles to the legend plot area\n applyStyle(legendGradSvg, {\n height: `${gradientDimensions.height}px`,\n width: `${gradientDimensions.width}px`\n });\n\n // Apply styles to the legend rect\n applyStyle(legendRect, {\n fill: 'url(#linear-gradient)'\n });\n legendGradSvg.attr('height', gradientDimensions.height);\n legendGradSvg.attr('width', gradientDimensions.width);\n\n context.measurement({\n gradientDimensions\n });\n context._legendGradientSvg = legendGradSvg;\n return context;\n};\n","import SimpleLegend from './simple-legend';\nimport { getScaleInfo, getInterpolatedData } from './legend-helper';\nimport { GRADIENT, LEFT, SIZE } from '../enums/constants';\nimport { renderGradient, createAxis } from './gradient-helper';\nimport '../styles.scss';\n\n/**\n * Creates a Legend from the axes of a canvas\n *\n * @param {Object} dependencies : legend data\n * @class Legend\n */\nexport default class GradientLegend extends SimpleLegend {\n\n /**\n * Initializes an instance of the class\n *\n * @static\n * @param {Object} dependencies Set of dependencies required by the legend\n * @return {Instance} returns a new instance of Legend\n * @memberof Legend\n */\n static create (dependencies) {\n return new GradientLegend(dependencies);\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof GradientLegend\n */\n static type () {\n return GRADIENT;\n }\n\n /**\n *\n *\n * @param {*} axis\n * @returns\n * @memberof GradientLegend\n */\n axis (...axis) {\n if (axis.length) {\n this._axis = axis[0];\n return this;\n }\n return this._axis;\n }\n\n /**\n *\n *\n * @param {*} scale\n * @returns\n * @memberof GradientLegend\n */\n dataFromScale (scale) {\n let domainForLegend = [];\n const { scaleType, domain, steps, scaleFn } = getScaleInfo(scale);\n\n if (steps instanceof Array) {\n if (domain[0] < steps[0]) {\n domainForLegend[0] = domain[0];\n }\n domainForLegend = [...domainForLegend, ...steps];\n if (domain[domain.length - 1] > steps[steps.length - 1]) {\n domainForLegend.push(domain[1]);\n }\n } else {\n domainForLegend = getInterpolatedData(domain, steps - 1);\n }\n domainForLegend = [...new Set(domainForLegend)].sort((a, b) => a - b);\n\n return domainForLegend.map((ele, i) => {\n const value = domainForLegend[i];\n return {\n [scaleType]: scaleType === SIZE ? scale[scaleFn](ele) * scale.getScaleFactor()\n : scale[scaleFn](Math.floor(ele)),\n value: +value.toFixed(2),\n id: i\n };\n }).filter(d => d.value !== null);\n }\n\n /**\n *\n *\n * @param {*} effPadding\n * @param {*} align\n * @return\n * @memberof Legend\n */\n getLabelSpaces (effPadding) {\n this.config({\n item: {\n text: {\n orientation: this.config().position\n }\n }\n });\n const axis = createAxis(this);\n const axisSpace = axis.getLogicalSpace();\n const space = { width: axisSpace.width - effPadding, height: axisSpace.height - effPadding };\n const axisDomainLength = axis.source().domain().length;\n const labelSpaces = new Array(axisDomainLength).fill(space);\n\n this.axis(axis);\n return labelSpaces;\n }\n\n /**\n *\n *\n * @returns\n * @memberof GradientLegend\n */\n getDrawingContext () {\n return {\n svgContainer: this._legendGradientSvg\n };\n }\n\n /**\n * Render the legend with its title\n *\n * @param {DOM} mountPoint Point where the legend and title are to be appended\n * @return {Instance} Current instance of legend\n * @memberof Legend\n */\n render () {\n const firebolt = this.firebolt();\n const legendContainer = super.render(this.mount());\n // create Legend\n renderGradient(this, legendContainer);\n legendContainer.selectAll('div').style('float', LEFT);\n firebolt.mapActionsAndBehaviour();\n firebolt.createSelectionSet(this.data().map(d => d.id));\n return legendContainer;\n }\n /**\n *\n *\n * @param {*} data\n * @returns\n * @memberof SimpleLegend\n */\n getCriteriaFromData (data) {\n return [[this.fieldName()], [data.value]];\n }\n}\n","import SimpleLegend from './simple-legend';\nimport {\n getScaleInfo,\n getInterpolatedData,\n getDomainBounds\n} from './legend-helper';\nimport {\n createLegendSkeleton,\n createItemSkeleton,\n renderStepItem\n} from './renderer';\nimport { STEP, RECT, LEFT, SIZE, UPPER, LOWER } from '../enums/constants';\nimport { stepData } from './position-config';\nimport '../styles.scss';\n\n/**\n * Creates a Legend from the axes of a canvas\n *\n * @param {Object} dependencies : legend data\n * @class Legend\n */\nexport default class StepLegend extends SimpleLegend {\n\n /**\n * Initializes an instance of the class\n *\n * @static\n * @param {Object} dependencies Set of dependencies required by the legend\n * @return {Instance} returns a new instance of Legend\n * @memberof Legend\n */\n static create (dependencies) {\n return new StepLegend(dependencies);\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof StepLegend\n */\n static type () {\n return STEP;\n }\n\n /**\n *\n *\n * @param {*} scale\n * @returns\n * @memberof StepLegend\n */\n dataFromScale (scale) {\n let domainLeg = [];\n const { scaleType, domain, steps, scaleFn } = getScaleInfo(scale);\n\n const { formatter } = this.config();\n const domainBounds = {\n lower: null, upper: null\n };\n\n if (steps instanceof Array) {\n if (domain[0] < steps[0]) {\n domainBounds.lower = [`${formatter.bounds.lower} ${steps[0]}`];\n }\n domainLeg = [...domainLeg, ...steps];\n if (domain[domain.length - 1] > steps[steps.length - 1]) {\n domainBounds.upper = [`${formatter.bounds.upper} ${steps[steps.length - 1]}`];\n }\n } else {\n domainLeg = getInterpolatedData(domain, steps);\n }\n\n domainLeg = [...new Set(domainLeg)].sort((a, b) => a - b);\n domainLeg = domainLeg.map((ele, i) => {\n let value = null;\n if (i < domainLeg.length - 1) {\n value = `${(ele.toFixed(1))} - ${(+domainLeg[i + 1].toFixed(1))}`;\n }\n return {\n [scaleType]: scaleType === SIZE ? scale[scaleFn](ele) * scale.getScaleFactor() : scale[scaleFn](ele),\n value,\n id: i + 1,\n range: [ele, domainLeg[i + 1]]\n };\n }).filter(d => d.value !== null);\n\n if (domainBounds.lower) {\n const lowerBounds = getDomainBounds(LOWER, { scale, scaleFn, scaleType },\n { domain, steps, domainBounds });\n domainLeg = [lowerBounds, ...domainLeg];\n }\n if (domainBounds.upper) {\n const upperBounds = getDomainBounds(UPPER, { scale, scaleFn, scaleType },\n { domain, steps, domainBounds, domainLeg });\n domainLeg = [...domainLeg, upperBounds];\n }\n return domainLeg;\n }\n\n /**\n *\n *\n * @param {*} effPadding\n * @param {*} align\n * @return\n * @memberof Legend\n */\n getLabelSpaces (effPadding, align) {\n this.config({\n item: {\n text: {\n orientation: this.config().position\n }\n }\n });\n return super.getLabelSpaces(effPadding, align);\n }\n\n /**\n *\n *\n * @return\n * @memberof Legend\n */\n elemType () {\n return RECT;\n }\n\n /**\n * Render the legend with its title\n *\n * @param {DOM} mountPoint Point where the legend and title are to be appended\n * @return {Instance} Current instance of legend\n * @memberof Legend\n */\n render () {\n const firebolt = this.firebolt();\n const { classPrefix, position } = this.config();\n const data = stepData(this.data())[position];\n\n const legendContainer = super.render(this.mount());\n\n // create Legend\n const { legendItem } = createLegendSkeleton(this, legendContainer, classPrefix, data);\n const { itemSkeleton } = createItemSkeleton(this, legendItem);\n\n renderStepItem(this, itemSkeleton);\n legendContainer.selectAll('div').style('float', LEFT);\n firebolt.mapActionsAndBehaviour();\n firebolt.createSelectionSet(this.data().map(d => d.id));\n return legendContainer;\n }\n\n /**\n *\n *\n * @param {*} data\n * @returns\n * @memberof StepLegend\n */\n getCriteriaFromData (data) {\n const fieldName = this.fieldName();\n return {\n [fieldName]: data.range\n };\n }\n}\n","import { GradientLegend, DiscreteLegend, StepLegend } from '@chartshq/muze-legend';\n\n/**\n * Contants to be used as attr\n */\nexport const ROWS = 'rows';\nexport const COLUMNS = 'columns';\nexport const DATA = 'data';\nexport const COLOR = 'color';\nexport const SHAPE = 'shape';\nexport const SIZE = 'size';\nexport const DETAIL = 'detail';\nexport const LAYERS = 'layers';\nexport const TRANSFORM = 'transform';\nexport const INITIALIZED = 'isInitialized';\nexport const SOURCE = 'source';\nexport const WIDTH = 'width';\nexport const HEIGHT = 'height';\nexport const PADDING = 'padding';\nexport const BORDER = 'border';\nexport const MARGIN = 'margin';\nexport const CONFIG = 'config';\nexport const MOUNT = 'mount';\nexport const CANVAS_UPDATED = 'canvasUpdated';\nexport const CLASSPREFIX = 'classPrefix';\nexport const POLICIES = '_policies';\nexport const LEGEND = 'legend';\nexport const TITLE = 'title';\nexport const SUB_TITLE = 'subtitle';\nexport const RESOLVE = 'resolve';\nexport const DISCRETE = 'discrete';\nexport const STEP_COLOR = 'step-color';\nexport const GRADIENT = 'gradient';\nexport const LINEAR = 'linear';\nexport const ORDINAL = 'ordinal';\n\nexport const TITLE_TEMPLATE_NOT_ALLOWED_TAGS = [\n 'script',\n 'style'\n];\n\nexport const LEGEND_TYPE_MAP = {\n [`${ORDINAL}-${true}-${COLOR}`]: DiscreteLegend,\n [`${ORDINAL}-${true}-${SIZE}`]: DiscreteLegend,\n [`${ORDINAL}-${true}-${SHAPE}`]: DiscreteLegend,\n [`${ORDINAL}-${false}-${COLOR}`]: DiscreteLegend,\n [`${ORDINAL}-${false}-${SHAPE}`]: DiscreteLegend,\n [`${ORDINAL}-${false}-${SIZE}`]: DiscreteLegend,\n [`${LINEAR}-${false}-${SIZE}`]: DiscreteLegend,\n [`${LINEAR}-${true}-${SIZE}`]: DiscreteLegend,\n [`${LINEAR}-${false}-${SHAPE}`]: DiscreteLegend,\n [`${LINEAR}-${true}-${COLOR}`]: StepLegend,\n [`${LINEAR}-${false}-${COLOR}`]: GradientLegend\n};\n\nexport const LEFT = 'left';\nexport const RIGHT = 'right';\nexport const BOTTOM = 'bottom';\nexport const TOP = 'top';\nexport const GROUP = 'group';\nexport const LAYOUT = 'layout';\nexport const RETINAL = 'retinal';\nexport const DIMENSION = 'dimension';\nexport const MEASURE = 'measure';\nexport const VERTICAL = 'vertical';\nexport const HORIZONTAL = 'horizontal';\n\n","import { ComposedVars, SimpleVariable } from '@chartshq/visual-group';\nimport { TITLE_TEMPLATE_NOT_ALLOWED_TAGS } from './constants';\n\n/**\n * This method creates a new composed variable instance from multiple variables.\n * @param {Array} vars Variable names\n * @return {ComposedVars} Instance of composed variable\n */\nexport const share = (...vars) => new ComposedVars(...vars.map(variable => new SimpleVariable(variable)));\n\n/**\n *\n *\n * @param {*} node\n * @returns\n */\nfunction treeShakeNode (node) {\n if (node.nodeType !== Node.ELEMENT_NODE) { return; }\n\n if (TITLE_TEMPLATE_NOT_ALLOWED_TAGS.indexOf(node.tagName.toLowerCase()) !== -1) {\n node.parentNode.removeChild(node);\n } else {\n for (const childNode of node.childNodes) {\n treeShakeNode(childNode);\n }\n }\n}\n\n/**\n * A string template tagged function which sanitizes input html formatted\n * string according to the allowed html tags.\n *\n * @param {Array.} strings - The string parts of the template.\n * @param {Array} exps - The list of evaluated expression values.\n * @return {Function} Returns a function which returns the sanitized html string.\n */\nexport function html (strings, ...exps) {\n let htmlCode = '';\n const expLn = exps.length;\n let i = 0;\n\n for (; i < expLn; ++i) {\n htmlCode += strings[i] + exps[i];\n }\n htmlCode += strings[i];\n\n const frag = document.createDocumentFragment();\n const wrapper = document.createElement('div');\n\n frag.appendChild(wrapper);\n wrapper.innerHTML = htmlCode;\n\n treeShakeNode(wrapper);\n const { innerHTML } = wrapper;\n\n return () => innerHTML;\n}\n","import { mergeRecursive } from 'muze-utils';\n\nconst defaultPolicy = (registrableComponents) => {\n const aliases = registrableComponents.map(comp => comp.alias());\n return {\n behaviours: {\n '*': (propagationPayload) => {\n const propagationCanvas = propagationPayload.sourceCanvas;\n return propagationCanvas ? aliases.indexOf(propagationCanvas) !== -1 : true;\n }\n }\n };\n};\n\nclass ActionModel {\n constructor () {\n this._registrableComponents = [];\n }\n\n registerPhysicalActions (action) {\n const canvases = this._registrableComponents;\n\n canvases.forEach((canvas) => {\n canvas.once('canvas.updated').then((args) => {\n const matrix = args.client.composition().visualGroup.matrixInstance().value;\n matrix.each(cell => cell.valueOf().firebolt().registerPhysicalActions(action));\n });\n });\n return this;\n }\n\n registerBehaviouralActions (...actions) {\n const canvases = this._registrableComponents;\n\n canvases.forEach((canvas) => {\n canvas.once('canvas.updated').then(() => {\n const matrix = canvas.composition().visualGroup.matrixInstance().value;\n matrix.each(cell => cell.valueOf().firebolt().registerBehaviouralActions(...actions));\n });\n });\n return this;\n }\n\n /**\n *\n *\n * @param {*} map\n * @returns\n * @memberof ActionModel\n */\n registerPhysicalBehaviouralMap (map) {\n const canvases = this._registrableComponents;\n\n canvases.forEach((canvas) => {\n canvas.once('canvas.updated').then((args) => {\n const matrix = args.client.composition().visualGroup.matrixInstance().value;\n matrix.each(cell => cell.valueOf().firebolt().registerPhysicalBehaviouralMap(map));\n });\n });\n return this;\n }\n\n registerPropagationBehaviourMap (map) {\n const canvases = this._registrableComponents;\n\n canvases.forEach((canvas) => {\n canvas.once('canvas.updated').then((args) => {\n const matrix = args.client.composition().visualGroup.matrixInstance().value;\n matrix.each(cell => cell.valueOf().firebolt().registerPropagationBehaviourMap(map));\n });\n });\n return this;\n }\n\n mapSideEffects (map) {\n const canvases = this._registrableComponents;\n\n canvases.forEach((canvas) => {\n canvas.once('canvas.updated').then(() => {\n const matrix = canvas.composition().visualGroup.matrixInstance().value;\n matrix.each(cell => cell.valueOf().firebolt().mapSideEffects(map));\n });\n });\n return this;\n }\n\n for (...components) {\n this._registrableComponents = components;\n return this;\n }\n\n registerSideEffects (...sideEffects) {\n const registrableComponents = this._registrableComponents;\n\n registrableComponents.forEach((canvas) => {\n canvas.once('canvas.updated').then((args) => {\n const matrix = args.client.composition().visualGroup.matrixInstance().value;\n matrix.each(cell => cell.valueOf().firebolt().registerSideEffects(sideEffects));\n });\n });\n\n return this;\n }\n\n dissociateBehaviour (...maps) {\n const registrableComponents = this._registrableComponents;\n\n registrableComponents.forEach((canvas) => {\n canvas.once('canvas.updated').then((args) => {\n const matrix = args.client.composition().visualGroup.matrixInstance().value;\n matrix.each((cell) => {\n maps.forEach(val => cell.valueOf().firebolt().dissociateBehaviour(val[0], val[1]));\n });\n });\n });\n\n return this;\n }\n\n dissociateSideEffect (...maps) {\n const registrableComponents = this._registrableComponents;\n\n registrableComponents.forEach((canvas) => {\n canvas.once('canvas.updated').then((args) => {\n const matrix = args.client.composition().visualGroup.matrixInstance().value;\n matrix.each((cell) => {\n maps.forEach(val => cell.valueOf().firebolt().dissociateSideEffect(val[0], val[1]));\n });\n });\n });\n\n return this;\n }\n\n enableCrossInteractivity (policy = {}) {\n const registrableComponents = this._registrableComponents;\n const mergedPolicy = mergeRecursive(mergeRecursive({}, defaultPolicy(registrableComponents)), policy);\n\n registrableComponents.forEach((canvas) => {\n canvas.firebolt().crossInteractionPolicy(mergedPolicy);\n });\n\n return this;\n }\n}\n\nexport const actionModel = (() => new ActionModel())();\n","export const DEFAULT_CONFIG = {\n classPrefix: 'muze',\n interaction: {\n sideEffect: 'individual'\n },\n legend: {\n position: 'right',\n color: {\n show: true,\n padding: 2,\n margin: 2,\n border: 1,\n height: 30,\n width: 30\n },\n shape: {\n show: true,\n padding: 2,\n margin: 2,\n border: 1,\n height: 30,\n width: 30\n },\n size: {\n show: true,\n padding: 2,\n margin: 2,\n border: 1,\n height: 30,\n width: 30\n }\n },\n showHeaders: false,\n minWidth: 100,\n minHeight: 100,\n border: {\n style: 'solid',\n color: '#d6d6d6',\n width: 2,\n collapse: true,\n spacing: 0\n },\n autoGroupBy: {\n disabled: false\n }\n};\n","/**\n * @module\n * This is the global options semantics based on which setters getters are created and reactivity is initiated.\n * Format\n * PROPERTRY_NAME: {\n * value: // default value of the property,\n * meta: {\n * typeCheck: // The setter value will be checked using this. If the value is function then the setter value\n * // is passed as args.\n * typeExpected: // The output of typecheck action will be tested against this. Truthy value will set the\n * // value to the setter\n * sanitizaiton: // Need for sanitization before type is checked\n * }\n * }\n */\n\nimport { intSanitizer, mergeRecursive, DataModel } from 'muze-utils';\nimport { DEFAULT_CONFIG } from './defaults';\n\nexport default {\n data: {\n value: null,\n meta: {\n typeCheck: d => d instanceof DataModel\n }\n },\n width: {\n value: 0,\n meta: {\n sanitization: intSanitizer,\n typeCheck: Number.isInteger\n }\n },\n height: {\n value: 0,\n meta: {\n sanitization: intSanitizer,\n typeCheck: Number.isInteger\n }\n },\n minUnitWidth: {\n value: 50,\n meta: {\n sanitization: intSanitizer,\n typeCheck: Number.isInteger\n }\n },\n minUnitHeight: {\n value: 50,\n meta: {\n sanitization: intSanitizer,\n typeCheck: Number.isInteger\n }\n },\n config: {\n value: null,\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Object',\n sanitization: (config, oldConfig) => {\n const oldConf = mergeRecursive({}, oldConfig);\n const defConfig = mergeRecursive(oldConf, DEFAULT_CONFIG);\n const newConf = mergeRecursive(defConfig, config);\n return newConf;\n }\n\n }\n }\n};\n","/**\n * This file exports constants that will be used to\n * create the state store of the table layout.\n */\n/**\n * The index of top, bottom and center in the matrix\n */\nexport const VIEW_INDEX = {\n top: 0,\n center: 1,\n bottom: 2\n};\n\n/**\n * The width of the grid suppied by the user.\n */\nexport const GRID_WIDTH = 'width';\n\n/**\n * The height of the grid supplied by the user.\n */\nexport const GRID_HEIGHT = 'height';\n\n/**\n * The border for the grid\n */\nexport const BORDER = 'border';\n\n /**\n * The index of the first visible row in view matrix.\n */\nexport const ROW_POINTER = 'rowPointer';\n\n/**\n * The index of the first visible column in the view matrix.\n */\nexport const COLUMN_POINTER = 'columnPointer';\n\n/**\n * Flag to specify whether row sizes should be equal.\n */\nexport const ROW_SIZE_IS_EQUAL = 'isRowSizeEqual';\n\n/**\n * Flag to specify whether column sizes are equal.\n */\nexport const COLUMN_SIZE_IS_EQUAL = 'isColumnSizeEqual';\n\n/**\n * Field to store an array an of the widths of visible columns.\n * @computed\n */\nexport const COLUMN_WIDTHS = 'visibleColumnWidths';\n\n/**\n * Field to store an array of heights of visible rows.\n * @computed\n */\nexport const ROW_HEIGHTS = 'visibleRowHeights';\n\n/**\n * Field to store the width of the left matrix.\n * @computed\n */\nexport const LEFT_MATRIX_WIDTH = 'leftMatrixWidth';\n\n/**\n * Field to store the width of the right matrix.\n * @computed\n */\nexport const RIGHT_MATRIX_WIDTH = 'rightMatrixWidth';\n\n/**\n * Field to store the height of the top matrix.\n * @computed\n */\nexport const TOP_MATRIX_HEIGHT = 'topMatrixHeight';\n\n/**\n * Field to store the height of the bottom matrix.\n * @computed\n */\nexport const BOTTOM_MATRIX_HEIGHT = 'bottomMatrixHeight';\n\n/**\n * The dom element to render the layout inside.\n */\nexport const MOUNT_POINT = 'mount';\n\n/**\n * The id attribute of the left table element.\n */\nexport const LEFT_TABLE_ID = 'grid-left';\n\n/**\n * The id attribute of the right table element.\n */\nexport const RIGHT_TABLE_ID = 'grid-right';\n\n/**\n * The id attribute of the top table.\n */\nexport const TOP_TABLE_ID = 'grid-top';\n\n/**\n * The id attribute of the bottom table.\n */\nexport const BOTTOM_TABLE_ID = 'grid-bottom';\n\n/**\n * The id attribute of the center table.\n */\nexport const CENTER_TABLE_ID = 'grid-center';\n\n/**\n * The id attribute of the top div.\n */\nexport const TOP_DIV_ID = 'muze-div-top';\n\n/**\n * The id attribute of the bottom div.\n */\nexport const BOTTOM_DIV_ID = 'muze-div-bottom';\n\n/**\n * The id attribute of the center div.\n */\nexport const CENTER_DIV_ID = 'muze-div-center';\n\n/**\n * Field that indicates if the row configuration has changed\n */\nexport const HAVE_ROWS_CHANGED = 'haveRowsChanged';\n\n/**\n * Field that indicates if the column configuration has changed\n */\nexport const HAVE_COLUMNS_CHANGED = 'haveColumnsChanged';\n\n/**\n * Field that indicates if the values configuration for the center matrix has changed\n */\nexport const HAVE_VALUES_CHANGED = 'haveValuesChanged';\n\n/**\n * Field that indicates the width of row matrix\n */\nexport const ROW_MATRIX_WIDTH = 'rowMatrixWidth';\n\n/**\n * Field that indicates the height of row matrix\n */\nexport const COLUMN_MATRIX_HEIGHT = 'columnMatrixHeight';\n\n/**\n * Field that indicates the unit width of layout\n */\nexport const UNIT_WIDTH = 'unitWidth';\n\n/**\n * Field that indicates the unit height of layout\n */\nexport const UNIT_HEIGHT = 'unitHeight';\n\n/**\n * Field that indicates the style object\n */\nexport const STYLE = 'style';\n\n/**\n * Field that indicates the color configuration\n */\nexport const COLOR = 'color';\n\n/**\n * Field that indicates width\n */\nexport const WIDTH = 'width';\n\n/**\n * Field that indicates collpase property for border\n */\nexport const COLLAPSE = 'collapse';\n\n/**\n * Field that indicates spacing property for border\n */\nexport const SPACING = 'spacing';\n\n/**\n * Field that indicates spacing property for border\n */\nexport const DISTRIBUTION = 'distribution';\n\n/**\n * Field that indicates spacing property for border\n */\nexport const GUTTERSPACE = 'gutterSpace';\n\n/**\n * Field that indicates spacing property for border\n */\nexport const BREAK_PAGE = 'breakPage';\n\n/**\n * Field that indicates spacing property for border\n */\nexport const SHOW_ROW_BORDERS = 'showRowBorders';\n\n/**\n * Field that indicates spacing property for border\n */\nexport const SHOW_COL_BORDERS = 'showColBorders';\n\n/**\n * Field that indicates spacing property for border\n */\nexport const SHOW_VALUE_BORDERS = 'showValueBorders';\n\nexport const HEIGHT = 'height';\nexport const COLUMN = 'column';\nexport const ROW = 'row';\nexport const TOP = 'top';\nexport const LEFT = 'left';\nexport const RIGHT = 'right';\nexport const BOTTOM = 'bottom';\nexport const CENTER = 'center';\nexport const CLICK = 'click';\nexport const ROW_LEFT = 'rowLeft';\nexport const ROW_RIGHT = 'rowRight';\nexport const COLUMN_BOTTOM = 'colBottom';\nexport const COLUMN_TOP = 'colTop';\nexport const AUTO = 'auto';\nexport const ROW_SPAN = 'rowSpan';\nexport const COL_SPAN = 'colSpan';\nexport const ROW_ROOT = 'rowRoot';\nexport const COLUMN_ROOT = 'columnRoot';\nexport const PRIMARY = 'primary';\nexport const SECONDARY = 'secondary';\n","import { sanitizeIP, mergeRecursive } from 'muze-utils';\nimport { TOP, CENTER, BOTTOM } from '../enums/constants';\n\n/*\n * This is the abstract implementation of the root layout. This takes care of common work which all the layouts\n * has to handle. The common work includes sanitizaion of inputs, update, rerender, dispose etc. This class can't be\n * used directly (as ofcourse this is an abstract implementaiton), the class which is implementing it has to implement\n * the necessary methods and gives its on visual.\n */\n\n/**\n * This class is used to create a generic layout. It can be extended to create layouts\n * of different types\n * @class GenericLayout\n */\nexport default class GenericLayout {\n\n /**\n * Creates an instance of TableLayout.\n * @param {HTMLElement} mountPoint DOM element/d3 selection where the layout is to be mounted\n * @param {Object} measurement The dimensions of the layout\n * @param {Object} config configuration to be given for the layout\n * @param {Object} dependencies external dependencies.\n * @memberof GenericLayout\n *\n * measurement : {\n * width : number => width of the container\n * height : number => height of the container\n * unitHeight : number => height of unit of the cells\n * unitWidth : number => width of unit of the cells\n * }\n *\n */\n constructor (mountPoint, measurement, config, dependencies) {\n this._config = {};\n this._measurement = {};\n this._matrices = [];\n // External dependencies to be included for the layout. This includes the ext global dependencies like\n // smartlabel which has one single implementation of throughout the page or per isntance\n this._dependencies = dependencies;\n\n this.measurement(measurement);\n this.mountPoint(mountPoint);\n this.config(config);\n }\n\n /**\n * Returns an object which is used to recreate the layout.\n * @return {Object} the serialized components\n */\n serialize () {\n return {\n measurement: this.measurement(),\n config: this.config(),\n matrices: this.matrices()\n };\n }\n\n /**\n * Sets/Gets the config for the layout\n * @param {Object} config configuration for the layout\n * @return {Layout|Object} Gets the Config/ Returns this instance when set\n */\n config (config) {\n if (config) {\n this._config = mergeRecursive(this._config || {}, config);\n return this;\n }\n return this._config;\n }\n\n /**\n * Sets/Gets the measurement for the layout\n * @param {Object} measurement measurement for the layout\n * @return {Layout|Object} Gets the measurement/ Returns this instance when set\n */\n measurement (measurement) {\n if (measurement) {\n this._measurement = mergeRecursive(this._measurement || {}, measurement);\n\n return this;\n }\n return this._measurement;\n }\n\n /**\n * Sets/Gets the matrices for the layout\n * @param {Object} matrices matrices for the layout\n * @return {Layout|Object} Gets the matrices/ Returns this instance when set\n */\n matrices (matrices) {\n if (matrices) {\n this._matrices = sanitizeIP.typeObj([TOP, CENTER, BOTTOM], matrices);\n\n return this;\n }\n return this._matrices;\n }\n\n /**\n * Sets/Gets the matrix for row\n * @param {Object} matrix matrices for the layout\n * @return {Layout|Object} Gets the matrix/ Returns this instance when set\n */\n rowMatrix (matrix) {\n if (matrix) {\n this._rowMatrix = matrix;\n return this;\n }\n return this._rowMatrix;\n }\n\n /**\n * Sets/Gets the matrix for columns\n * @param {Object} matrix matrices for the layout\n * @return {Layout|Object} Gets the matrix/ Returns this instance when set\n */\n columnMatrix (matrix) {\n if (matrix) {\n this._columnMatrix = matrix;\n return this;\n }\n return this._columnMatrix;\n }\n\n /**\n * Sets/Gets the matrix for value\n * @param {Object} matrix matrices for the layout\n * @return {Layout|Object} Gets the matrix/ Returns this instance when set\n */\n centerMatrix (matrix) {\n if (matrix) {\n this._centerMatrix = matrix;\n return this;\n }\n return this._centerMatrix;\n }\n\n /**\n * Sets/Gets the mountPoint for the layout\n * @param {Object} mountPoint mountPoint for the layout\n * @return {Layout|Object} Gets the mountPoint/ Returns this instance when set\n */\n mountPoint (mountPoint) {\n if (mountPoint) {\n this._mountPoint = mountPoint;\n\n return this;\n }\n return this._mountPoint;\n }\n}\n","import * as FieldNames from '../enums/constants';\n\n/**\n * Default configuration of the layout\n * @return {Object} returns the default configuration\n */\nexport const DEFAULT_CONFIGURATION = {\n [FieldNames.BORDER]: {\n [FieldNames.STYLE]: 'solid',\n [FieldNames.COLOR]: '#d6d6d6',\n [FieldNames.WIDTH]: 2,\n [FieldNames.COLLAPSE]: true,\n [FieldNames.SPACING]: 0\n },\n [FieldNames.GUTTERSPACE]: { rows: [], columns: [] },\n [FieldNames.DISTRIBUTION]: { rows: [], columns: [] },\n [FieldNames.BREAK_PAGE]: { rows: [], columns: [] },\n [FieldNames.ROW_SIZE_IS_EQUAL]: false,\n [FieldNames.COLUMN_SIZE_IS_EQUAL]: false,\n [FieldNames.COLUMN_POINTER]: 0,\n [FieldNames.ROW_POINTER]: 0\n};\n\n/**\n * Default measurements for the layout\n * @return {Object} returns the default measurements\n */\nexport const DEFAULT_MEASUREMENTS = {\n [FieldNames.GRID_WIDTH]: 100,\n [FieldNames.GRID_HEIGHT]: 100,\n [FieldNames.UNIT_WIDTH]: 100,\n [FieldNames.UNIT_HEIGHT]: 100\n};\n\nexport const BLANK_BORDERS = 'rgba(0,0,0,0)';\n","import { ROW_LEFT, ROW_RIGHT, COLUMN_BOTTOM, COLUMN_TOP, TOP, BOTTOM } from '../enums/constants';\n/**\n * This callback is used to filter the array of\n * placeholder cells and filter out cells which have\n * appeared in a previous row.\n *\n * @param {Placeholder} colData Instance of placeholder.\n * @param {number} colIdx The index of the placeholder in array.\n * @param {Array} matrix The 2d array for which filtering is to be done\n * @param {number} rIdx The index of the row of the placeholder in array.\n * @param {string} type The type of matrix it is (rowLeft, rowRight, colTop, colBottom)\n * @return {boolean} flag to keep/remove element.\n */\nconst columnFilter = (colData, colIdx, matrix, rIdx, type) => {\n const previousRow = matrix[rIdx - 1];\n const currentRow = matrix[rIdx];\n\n // Row Span for left\n if (type === ROW_LEFT) {\n if (!previousRow) {\n return colData;\n }\n let i = 0;\n for (;i <= colIdx; i += 1) {\n if (currentRow[i].valueOf() !== previousRow[i].valueOf()) {\n break;\n }\n }\n return (i - 1 === colIdx) ? null : colData;\n } else if (type === ROW_RIGHT) {\n if (!previousRow || colIdx === 0) {\n return colData;\n }\n let j = colIdx;\n for (; j < currentRow.length; j += 1) {\n if (previousRow[j].valueOf() !== currentRow[j].valueOf()) {\n break;\n }\n }\n return (j === currentRow.length) ? null : colData;\n } else if (type === COLUMN_BOTTOM) {\n if (rIdx === 0) {\n return colData;\n }\n const prevCell = currentRow[colIdx - 1];\n if (prevCell) {\n if (prevCell.valueOf() === colData.valueOf()) {\n const nextRow = matrix[rIdx + 1];\n if (!nextRow) {\n return null;\n }\n if (nextRow[colIdx].valueOf() === nextRow[colIdx - 1].valueOf()) {\n return null;\n }\n return colData;\n }\n return colData;\n }\n return colData;\n } else if (type === COLUMN_TOP) {\n if (rIdx === matrix.length - 1 && matrix.length > 1) {\n return colData;\n }\n const prevCell = currentRow[colIdx - 1];\n if (prevCell && (prevCell.valueOf() === colData.valueOf())) {\n const prevRow = matrix[rIdx - 1];\n if (prevRow) {\n if (prevRow[colIdx].valueOf() === prevRow[colIdx - 1].valueOf()) {\n return null;\n }\n return colData;\n }\n return null;\n }\n return colData;\n }\n return colData;\n};\n\n/**\n * This callback is used to calculate the rowspan\n * by checking for repeating entries in subsequent rows\n * at the specified column.\n *\n * @param {Placeholder} colData Instance of placeholder.\n * @param {number} colIdx The index of the placeholder in the array.\n * @param {Array} matrix The 2d array for which filtering is to be done\n * @param {number} rIdx The index of the row of the placeholder in array.\n * @return {number} The row span.\n */\nconst calcRowSpan = (colData, colIdx, matrix, rIdx) => {\n let count = 1;\n // if data is not header cell then rowspan\n // has to be 1\n if (!colData || typeof colData.valueOf() !== 'string') {\n return 1;\n }\n let isNull = false;\n while (!isNull) {\n if (matrix[rIdx + count] && matrix[rIdx + count][colIdx] === null) {\n count += 1;\n } else {\n isNull = true;\n }\n }\n return count;\n};\n/**\n * This callback is used to calculate the rowspan\n * by checking for repeating entries in subsequent rows\n * at the specified column.\n *\n * @param {Placeholder} colData Instance of placeholder.\n * @param {number} colIdx The index of the placeholder in the array.\n * @param {Array} matrix The 2d array for which filtering is to be done\n * @param {number} rIdx The index of the row of the placeholder in array.\n * @return {number} The row span.\n */\nconst calcColSpan = (colData, colIdx, matrix, rIdx) => {\n let count = 1;\n // if data is not header cell then rowspan\n // has to be 1\n if (!colData || typeof colData.valueOf() !== 'string') {\n return 1;\n }\n let isNull = false;\n while (!isNull) {\n if (matrix[rIdx][colIdx + count] === null) {\n count += 1;\n } else {\n isNull = true;\n }\n }\n return count;\n};\n\n// create a masking matrix to strip out repeating columns\n// and calculate rowspan.\nconst mask = function (matrix, type) {\n return matrix.map((row, rIdx) => {\n if (type === ROW_LEFT || type === ROW_RIGHT) {\n const filteredRow = row.map((col, colIndex) => columnFilter(col, colIndex, matrix, rIdx, type));\n const temp = [];\n const diff = row.length - filteredRow.length;\n for (let i = 0; i < diff; i += 1) {\n temp.push(null);\n }\n if (type === ROW_RIGHT) {\n temp.unshift(...filteredRow);\n return temp;\n }\n temp.push(...filteredRow);\n return temp;\n }\n\n const filteredRow = row.map((col, colIndex) => columnFilter(col, colIndex, matrix, rIdx, type));\n const temp = [];\n temp.push(...filteredRow);\n return temp;\n });\n};\n\n/**\n * This function is used to set the col and row spans\n * for the matrices based on repeated/hierarchichal data\n *\n * @export\n * @param {Array} matrix The 2d array for which filtering is to be done\n * @param {string} type Type of array (center, top, bottom)\n * @param {number} index Index of array in the row\n * @return {Object} containing the view matrix and their spans\n */\nexport function cellSpanMaker (matrix, type, index) {\n let span = '';\n if (type === TOP || type === BOTTOM) {\n span = type === TOP ? COLUMN_TOP : COLUMN_BOTTOM;\n const viewMatrix = mask(matrix, span);\n const spans = viewMatrix.map((row, ridx) => row.map((col, i) => calcColSpan(col, i, viewMatrix, ridx))\n .filter(col => col !== 1));\n return { viewMatrix, spans };\n } else if (index === 0 || index === 2) {\n span = index === 0 ? ROW_LEFT : ROW_RIGHT;\n const viewMatrix = mask(matrix, span);\n const spans = [];\n viewMatrix.forEach((row, ridx) => {\n spans[ridx] = spans[ridx] || [];\n row.forEach((col, i) => {\n if (viewMatrix[ridx][i]) {\n const currSpan = calcRowSpan(col, i, viewMatrix, ridx);\n currSpan && spans[ridx].push(currSpan);\n }\n });\n });\n return { viewMatrix, spans };\n }\n return { viewMatrix: matrix };\n}\n","import { makeElement, selectElement } from 'muze-utils';\nimport { cellSpanMaker } from './span-maker';\nimport {\n TOP, LEFT, RIGHT, BOTTOM, CENTER, WIDTH, ROW_SPAN, COL_SPAN\n} from '../enums/constants';\nimport { BLANK_BORDERS } from './defaults';\n\n/**\n * Creates a table element of the layout\n *\n * @param {Object} mount Mount point for table elements\n * @param {string} className defines class name\n * @param {Array} rowData set of rows for the table\n * @return {Selection} set of selections for the table\n */\nfunction renderTable (mount, className, rowData) {\n const table = makeElement(mount, 'table', ['layout'], `${className}-table`);\n const body = makeElement(table, 'tbody', ['layout'], `${className}-body`);\n const rows = makeElement(body, 'tr', rowData, `${className}-tr`);\n const cells = makeElement(rows, 'td', (d, i) => d.filter(e => e !== null && e.config().show).map(e =>\n ({ placeholder: e, rowIndex: i })), `${className}-td`, {}, key => key.placeholder.id);\n\n return { table, body, rows, cells };\n}\n\nfunction applyRowBorders (cells, borderStyle, showBorders, color) {\n [TOP, BOTTOM].forEach((borderType) => {\n const style = `${borderStyle} ${showBorders[borderType] ? color : BLANK_BORDERS}`;\n cells.style(`border-${borderType}`, style);\n });\n}\n\nfunction applyColBorders (cells, borderStyle, showBorders, color) {\n [LEFT, RIGHT].forEach((borderType) => {\n const style = `${borderStyle} ${showBorders[borderType] ? color : BLANK_BORDERS}`;\n cells.style(`border-${borderType}`, style);\n });\n}\n\n/**\n * Applies borders to the cells in a matrix\n *\n * @param {Selection} cells Set of cells made from the matrix\n * @param {Object} border Border info for layout\n * @param {string} type Type of matrix(top/center/bottom)\n * @param {number} index Column index of matrix in the row\n */\nfunction applyBorders (cells, border, type, index) {\n const {\n width,\n style,\n color,\n showRowBorders,\n showColBorders,\n showValueBorders\n } = border;\n const borderStyle = `${width}px ${style}`;\n\n if (type === CENTER && index === 1) {\n [TOP, BOTTOM, LEFT, RIGHT].forEach((borderType) => {\n cells.style(`border-${borderType}`, `${borderStyle} ${showValueBorders[borderType] ?\n color : BLANK_BORDERS}`);\n });\n } else if (type === CENTER) {\n applyRowBorders(cells, borderStyle, showRowBorders, color);\n } else if (index === 1) {\n applyColBorders(cells, borderStyle, showColBorders, color);\n }\n}\n\n/**\n * Renders a set of matrices in a row\n *\n * @param {Array} matrices Set of matrices in a row\n * @param {Selection} mountPoint Mount point for the row\n * @param {string} type top/center/bottom\n * @param {Object} dimensions dimensions of the matrix\n */\nfunction renderMatrix (matrices, mountPoint, type, dimensions, classPrefix) {\n matrices.forEach((matrix, index) => {\n if (dimensions.viewWidth[index]) {\n // Creating containers for each matrix individually\n const containerForMatrix = makeElement(mountPoint, 'div', [1], `${classPrefix}-grid-${type}-${index + 1}`)\n .classed(`${classPrefix}-grid-${type}`, true)\n .classed(`${classPrefix}-grid`, true);\n\n const {\n viewMatrix,\n spans\n } = cellSpanMaker(matrix, type, index);\n\n // Rendering the table components\n const { cells } = renderTable(containerForMatrix, `${classPrefix}-grid`, viewMatrix);\n\n if (type === CENTER && spans) {\n cells.attr(ROW_SPAN, function (cell, colIndex) {\n const placeholder = cell.placeholder;\n selectElement(this).style('height', `${placeholder.availHeight() + dimensions.border.width}px`);\n return spans[cell.rowIndex][colIndex];\n });\n } else if ((type === TOP || type === BOTTOM) && index === 1) {\n cells.attr(COL_SPAN, function (cell, colIndex) {\n const span = spans[cell.rowIndex][colIndex];\n const placeholder = cell.placeholder;\n if (span > 1) {\n placeholder.setAvailableSpace(0, placeholder.availHeight());\n }\n selectElement(this).style('height', `${placeholder.availHeight()}px`);\n return span;\n });\n }\n // Rendering content within placeholders\n cells.each(function (cell) {\n cell.placeholder && cell.placeholder.render(this);\n }).exit().each((cell) => {\n cell.placeholder && cell.placeholder.remove();\n });\n\n applyBorders(cells, dimensions.border, type, index);\n }\n });\n}\n\n/**\n * Renders all the matrices of the layout\n *\n * @export\n * @param {Array} matrices Set of matrices in the layout\n * @param {Array} mountPoints Mount points for each row of matrix\n * @param {Array} layoutDimensions Dimensions(height/width) of all the matrices\n */\nexport function renderMatrices (context, matrices, layoutDimensions) {\n const {\n top,\n center,\n bottom\n } = matrices;\n const {\n classPrefix\n } = context.config();\n const {\n width\n } = context.measurement();\n const mount = context.mountPoint();\n\n const data = [\n { type: TOP, matrix: top },\n { type: CENTER, matrix: center },\n { type: BOTTOM, matrix: bottom }\n ];\n makeElement(mount, 'div', data, `${classPrefix}-grid-layout-row`)\n .each(function (d, i) {\n const row = selectElement(this);\n row.classed(`${classPrefix}-grid-layout-row-${i}`, true);\n renderMatrix(d.matrix, row, d.type, layoutDimensions, classPrefix);\n })\n .style(WIDTH, `${Math.ceil(width)}px`);\n}\n","/**\n * This file exports utility functions that are used across the layout module\n */\nimport { Symbols } from 'muze-utils';\nimport { PRIMARY, SECONDARY, HEIGHT, WIDTH } from '../enums/constants';\n\nconst nest = Symbols.nest;\n/**\n *\n *\n * @param {*} isTransposed\n * @returns\n */\nconst getMeasureInfo = (isTransposed) => {\n if (isTransposed) {\n return {\n firstMeasure: HEIGHT,\n secondMeasure: WIDTH\n };\n }\n return {\n firstMeasure: WIDTH,\n secondMeasure: HEIGHT\n };\n};\n\n/**\n *\n *\n * @param {*} i\n * @param {*} page\n * @returns\n */\nconst findInPage = (i, page) => {\n let count = 0;\n for (const x in page) {\n if (i < page[x]) {\n count = x;\n break;\n }\n }\n return count;\n};\n\n/**\n * Creates a single matrix from two matrices\n *\n * @param {Array} matrix Input matrix\n * @return {Array} Joined matrix\n * @memberof VisualMatrix\n */\nexport const combineMatrices = (matrix, config) => {\n const { isTransposed } = config;\n let joinedMatrix = matrix[0].length > 0 ? matrix[0] : matrix[1];\n if (isTransposed) {\n joinedMatrix = matrix[0].length > 0 ? [...matrix[0]] : [];\n joinedMatrix = matrix[1].length > 0 ? [...joinedMatrix, ...matrix[1]] : joinedMatrix;\n } else {\n joinedMatrix = joinedMatrix.map((row, rowIndex) => {\n let rowData = [];\n if (matrix[0].length > 0) {\n rowData = [...matrix[0][rowIndex]];\n }\n if (matrix[1].length > 0) {\n rowData = [...rowData, ...matrix[1][rowIndex]];\n }\n return rowData;\n });\n }\n return joinedMatrix;\n};\n\n/**\n * Creates a hirachical tree from the context\n *\n * @param {Object} context context for creating tree\n * @return {Object} nested tree\n */\nexport const createTree = (context) => {\n let matrixTree = {};\n let lastLevelKey = 0;\n let facet = PRIMARY;\n const nestFn = nest();\n const keys = [];\n const layoutMatrix = context._layoutMatrix;\n const primaryMatrix = context.primaryMatrix();\n const secondaryMatrix = context.secondaryMatrix();\n const { isTransposed, breakPage } = context.config();\n\n if (!isTransposed) {\n if (primaryMatrix.length === 0) {\n facet = PRIMARY;\n } else if (secondaryMatrix.length === 0) {\n facet = SECONDARY;\n } else {\n facet = primaryMatrix.length >= secondaryMatrix.length ? PRIMARY : SECONDARY;\n }\n if (primaryMatrix.length > 0) {\n for (let i = 0; i < primaryMatrix[0].length - 1; i++) {\n keys.push(i);\n }\n keys.push(primaryMatrix[0].length - 1);\n if (facet === SECONDARY || secondaryMatrix.length === 0) {\n lastLevelKey = primaryMatrix[0].length - 1;\n }\n }\n if (secondaryMatrix.length > 0) {\n const keyLength = primaryMatrix.length > 0 ? primaryMatrix[0].length : 0;\n for (let i = secondaryMatrix[0].length - 1; i > 0; i--) {\n keys.push(i + keyLength);\n }\n keys.push(keyLength);\n\n if (facet === PRIMARY) {\n lastLevelKey = keyLength;\n }\n } else {\n lastLevelKey = primaryMatrix.length > 0 ? primaryMatrix[0].length - 1 : 0;\n }\n keys.forEach((key) => {\n let counter = -1;\n return nestFn.key((d) => {\n counter++;\n return `${d[key].valueOf()}-${findInPage(counter, breakPage)}`;\n });\n });\n matrixTree = nestFn.entries(layoutMatrix);\n } else {\n if (primaryMatrix.length === 0) {\n facet = PRIMARY;\n } else if (secondaryMatrix.length === 0) {\n facet = SECONDARY;\n } else {\n facet = primaryMatrix.length >= secondaryMatrix.length ? PRIMARY : SECONDARY;\n }\n if (primaryMatrix.length > 0) {\n for (let i = 0; i < primaryMatrix.length - 1; i++) {\n keys.push(i);\n }\n // if (facet === PRIMARY) {\n keys.push(primaryMatrix.length - 1);\n // } else {\n if (facet === SECONDARY) {\n lastLevelKey = primaryMatrix.length - 1;\n }\n }\n if (secondaryMatrix.length > 0) {\n const primaryMatrixLength = primaryMatrix.length;\n for (let i = secondaryMatrix.length - 1; i > 0; i--) {\n keys.push(i + primaryMatrixLength);\n }\n // if (facet === SECONDARY) {\n keys.push(primaryMatrixLength);\n // }\n if (facet === PRIMARY) {\n lastLevelKey = primaryMatrixLength;\n }\n }\n keys.forEach((key) => {\n let counter = -1;\n return nestFn.key((d) => {\n counter++;\n return `${d[key].valueOf()}-${findInPage(counter, breakPage)}`;\n });\n });\n let newMatrix = [];\n newMatrix = layoutMatrix[0].map((col, colIndex) => layoutMatrix.map(row => row[colIndex]));\n matrixTree = nestFn.entries(newMatrix);\n }\n return { tree: matrixTree, lastLevelKey };\n};\n\n/**\n * Gives the min measues\n *\n * @param {boolean} isTransposed is column matrix\n * @param {Object} unitMeasures min measures to be given to cells\n * @return {Object} dimension min cell\n */\nexport const getMinMeasures = (isTransposed, unitMeasures) => {\n if (!isTransposed) {\n return {\n height: unitMeasures.height,\n width: 0\n };\n }\n return {\n height: 0,\n width: unitMeasures.width\n };\n};\n\n/**\n * Get the logical space from the tree\n *\n * @param {Node} item tree to be calculated\n * @param {number} measures width and height\n * @param {Array} minMeasures min measures for a cell\n * @param {Array} maxMeasure max measures for a col/row\n * @return {Object} dimension\n */\nexport const getLogicalSpace = (item, measures, minMeasures, maxMeasure = []) => {\n const { firstMeasure, secondMeasure } = measures;\n let firstMeasureValue = 0;\n let secondMeasureValue = 0;\n item.values.forEach((valueArray) => {\n let fMeasure = 0;\n let sMeasure = 0;\n valueArray.forEach((placeholder, colIndex) => {\n placeholder.logicalSpace(null);\n const space = placeholder.getLogicalSpace();\n sMeasure = Math.max(sMeasure, +space[secondMeasure], minMeasures[secondMeasure]);\n maxMeasure[colIndex] = Math.max(maxMeasure[colIndex] || 0, space[firstMeasure]);\n fMeasure += +maxMeasure[colIndex];\n });\n secondMeasureValue += sMeasure;\n firstMeasureValue = Math.max(firstMeasureValue, fMeasure);\n item.space = {\n [secondMeasure]: Math.ceil(secondMeasureValue),\n [firstMeasure]: Math.ceil(firstMeasureValue)\n };\n });\n return {\n [secondMeasure]: secondMeasureValue,\n [firstMeasure]: firstMeasureValue\n };\n};\n\n/**\n * Computes the logical spcae taken by the matrix tree\n *\n * @param {*} [item={}] tree to be viewed\n * @param {boolean} [isTransposed=false] is column matrix\n * @param {*} unitMeasures min measues for a cell\n * @param {Array} maxMeasure max measures for a col/row\n * @return {Object} logical space taken\n */\nexport const computeLogicalSpace = (item = {}, config, maxMeasures) => {\n const { isTransposed = false, unitMeasures } = config;\n const { firstMeasure, secondMeasure } = getMeasureInfo(isTransposed);\n const { values } = item;\n const minMeasures = getMinMeasures(isTransposed, unitMeasures);\n if (values[0].key) {\n const logicalSpace = { [firstMeasure]: 0, [secondMeasure]: 0 };\n\n values.forEach((valueItem) => {\n // Compute logical space for lowest level\n const space = computeLogicalSpace(valueItem, config, maxMeasures);\n // Set logical space for first measure\n logicalSpace[firstMeasure] = Math.max(logicalSpace[firstMeasure], space[firstMeasure],\n minMeasures[firstMeasure]);\n // Set logical space for second measure\n logicalSpace[secondMeasure] += +space[secondMeasure];\n });\n item.space = logicalSpace;\n return logicalSpace;\n }\n return getLogicalSpace(item, { firstMeasure, secondMeasure }, minMeasures, maxMeasures);\n};\n\n/**\n * Gives the space taken by a row\n *\n * @param {Array} row matrix array of rows\n * @return {Object} dimension of the row\n */\nexport const spaceTakenByRow = (row) => {\n let height = 0;\n let width = 0;\n row.forEach((col) => {\n const spaces = col.getLogicalSpace();\n height = Math.max(height, spaces.height);\n width += spaces.width;\n });\n return {\n width,\n height\n };\n};\n\n/**\n * Gives the space taken by a column\n *\n * @param {Array} matrix column matrix\n * @param {number} colIndex column index\n * @return {Object} dimension of the column\n */\nexport const spaceTakenByColumn = (matrix, colIndex) => {\n let height = 0;\n let width = 0;\n matrix.forEach((row) => {\n const col = row[colIndex];\n const spaces = col.getLogicalSpace();\n width = Math.max(width, spaces.width);\n height += spaces.height;\n });\n return {\n width,\n height\n };\n};\n\n/**\n * Creates different level matrices\n *\n * @param {Object} item matrix tree\n * @param {boolean} isTransposed is column matrix\n * @return {Object} matrix of each level\n */\nexport const createMatrixEachLevel = (item, isTransposed) => {\n if (item.values[0].key) {\n const arr = [];\n item.values.forEach((child) => {\n if (!isTransposed) {\n arr.push(...createMatrixEachLevel(child, isTransposed));\n } else {\n const eachLevel = createMatrixEachLevel(child, isTransposed);\n eachLevel.forEach((e, i) => {\n arr[i] = arr[i] || [];\n arr[i].push(...e);\n });\n }\n });\n item.matrix = arr;\n return arr;\n }\n if (!isTransposed) {\n item.matrix = item.values;\n } else {\n item.matrix = item.values[0].map((col, colIndex) => item.values.map(row => row[colIndex]));\n }\n return item.matrix;\n};\n\n/**\n * Breaks the matrix into two part\n *\n * @param {Array} matrix input matrix\n * @param {boolean} isTransposed is column matrix\n * @param {number} breakPointer point in matrix where it is to be broken\n * @return {Array} two broken matrix\n */\nexport const breakMatrix = (matrix, isTransposed, breakPointer) => {\n const primaryMatrix = [];\n const secondaryMatrix = [];\n if (isTransposed) {\n matrix.forEach((row, rowIndex) => {\n if (rowIndex >= breakPointer) {\n secondaryMatrix.push(row);\n } else {\n primaryMatrix.push(row);\n }\n });\n } else {\n matrix.forEach((row, rowIndex) => {\n row.forEach((column, columnIndex) => {\n if (columnIndex >= breakPointer) {\n secondaryMatrix[rowIndex] = secondaryMatrix[rowIndex] || [];\n secondaryMatrix[rowIndex].push(column);\n } else {\n primaryMatrix[rowIndex] = primaryMatrix[rowIndex] || [];\n primaryMatrix[rowIndex].push(column);\n }\n });\n });\n }\n return [primaryMatrix, secondaryMatrix];\n};\n\n/**\n * Distributed width returned\n *\n * @param {Object} context context for the width distibution\n * @return {number} distributed widths\n */\nexport const getDistributedWidth = (context, layoutConfig) => {\n const {\n availableWidth,\n width,\n row\n } = context;\n const {\n isDistributionEqual,\n isTransposed,\n distribution\n } = layoutConfig;\n let distSum = 0;\n if (distribution && distribution[0]) {\n distSum = distribution.reduce((t, n) => {\n t += n;\n return t;\n });\n }\n return row.map((col, colIndex) => {\n const space = col.getLogicalSpace().width;\n let distWidth = (space + (availableWidth - width) * (space / width));\n if (isTransposed) {\n if (distribution.length > 0) {\n distWidth = (availableWidth * distribution[colIndex] / distSum);\n } else if (isDistributionEqual || width === 0) {\n const rowLen = row.length;\n distWidth = (availableWidth / rowLen);\n }\n }\n return Math.floor(distWidth);\n });\n};\n\n/**\n * Distributeed heights returned\n *\n * @param {Object} context input for the height distribution\n * @return {Object} distribured heights\n */\nexport const getDistributedHeight = (context) => {\n let distSum = 0;\n let gutterSum = 0;\n let heightWithoutGutter = 0;\n const {\n isTransposed,\n distribution,\n availableHeight,\n height,\n isDistributionEqual,\n gutter,\n matrix,\n cIdx\n } = context;\n\n if (distribution && distribution[0] !== undefined) {\n distSum = distribution.reduce((t, n) => {\n t += n;\n return t;\n });\n }\n if (gutter && gutter[0] !== undefined) {\n gutterSum = gutter.reduce((t, n) => {\n t += n;\n return t;\n });\n }\n heightWithoutGutter = availableHeight - Math.floor(availableHeight * gutterSum);\n\n const colLen = matrix.length;\n return matrix.map((row, rIdx) => {\n const col = row[cIdx];\n const space = col.getLogicalSpace().height;\n let distHeight = (space + (heightWithoutGutter - height) * (space / height));\n\n if (!isTransposed) {\n if (distribution.length > 0 && colLen === distribution.length) {\n distHeight = (heightWithoutGutter * distribution[rIdx] / distSum);\n } else if (isDistributionEqual || context.height === 0) {\n distHeight = (heightWithoutGutter / colLen);\n }\n }\n return Math.floor(distHeight);\n });\n};\n\n/**\n *\n *\n * @param {*} arr\n * @param {*} beg\n * @param {*} end\n */\nexport const extraCellsRemover = (arr, beg, end) => arr.slice(beg, -end);\n\n/**\n * Creates matrix instancess\n *\n * @param {Array} [arr=[]] mutated arry\n * @param {number} depth depth of the tree\n * @param {Array} matrixInfo Details about the matrix(tree, etc) to be inserted\n * @param {boolean} layout Instance of layout\n */\nexport const createMatrixInstances = (arr = [], depth, matrixInfo, layout) => {\n const breakPointer = layout._breakPointer;\n const config = layout.config();\n const {\n isTransposed\n } = config;\n const {\n tree,\n layoutMatrix\n } = matrixInfo;\n\n if (depth === 0) {\n const brokenMatrix = breakMatrix(tree.matrix, isTransposed, breakPointer);\n arr.push({\n matrix: tree.matrix,\n primaryMatrix: brokenMatrix[0],\n secondaryMatrix: brokenMatrix[1],\n space: tree.space\n });\n return arr;\n }\n const nextLevel = depth - 1;\n tree.values.forEach((e) => {\n createMatrixInstances(arr, nextLevel, {\n tree: e,\n layoutMatrix\n }, layout);\n });\n return arr;\n};\n","import { mergeRecursive } from 'muze-utils';\n\nexport const PROPS = {\n config: {\n sanitization: (context, value) => mergeRecursive(context._config || {}, value)\n },\n maxMeasures: {},\n availableSpace: {},\n logicalSpace: {}\n};\n","import { PRIMARY } from '../enums/constants';\n/**\n *\n *\n */\nexport const defaultConfig = {\n distribution: [],\n classPrefix: 'muze',\n isDistributionEqual: true,\n unitMeasures: {\n height: 100,\n width: 100,\n border: 1\n },\n isTransposed: false,\n facet: PRIMARY,\n extraCellLengths: []\n};\n","import { mergeRecursive, generateGetterSetters } from 'muze-utils';\nimport {\n createTree,\n extraCellsRemover,\n combineMatrices,\n spaceTakenByColumn,\n getDistributedHeight,\n getDistributedWidth,\n spaceTakenByRow,\n computeLogicalSpace,\n createMatrixEachLevel,\n createMatrixInstances\n } from '../utils';\nimport { PROPS } from './props';\nimport { COLUMN_ROOT, ROW_ROOT, HEIGHT, WIDTH } from '../enums/constants';\nimport { defaultConfig } from './default-config';\n\n/**\n * This class used to create column / row matrix for GridLayout\n *\n * @class VisualMatrix\n */\nexport default class VisualMatrix {\n\n /**\n *Creates an instance of VisualMatrix.\n * @param {any} matrix Two set of matrices\n * @param {any} [config={}] Configuration for VisualMatrix\n * @memberof VisualMatrix\n */\n constructor (matrix, config = {}) {\n // Prepare matrices\n this._lastLevelKey = 0;\n this._primaryMatrix = matrix[0] || [];\n this._secondaryMatrix = matrix[1] || [];\n this._maxMeasures = [];\n this._availableSpace = {};\n\n // Store the config\n generateGetterSetters(this, PROPS);\n const defCon = Object.assign({}, this.constructor.defaultConfig());\n this.config(mergeRecursive(defCon, config));\n\n this._breakPointer = this.config().isTransposed ? matrix[0].length :\n (matrix[0].length > 0 ? matrix[0][0].length : 0);\n this._layoutMatrix = combineMatrices([matrix[0] || [], matrix[1] || []], this.config());\n\n // Create Tree\n this._tree = {\n key: this.config().isTransposed ? COLUMN_ROOT : ROW_ROOT,\n values: this.createTree()\n };\n this._logicalSpace = this.setLogicalSpace();\n }\n\n /**\n *\n *\n * @param {*} params\n * @returns\n * @memberof VisualMatrix\n */\n primaryMatrix (...params) {\n if (params.length) {\n return this;\n }\n return this._primaryMatrix;\n }\n\n /**\n *\n *\n * @param {*} params\n * @returns\n * @memberof VisualMatrix\n */\n secondaryMatrix (...params) {\n if (params.length) {\n return this;\n }\n return this._secondaryMatrix;\n }\n\n /**\n *\n *\n * @param {*} params\n * @returns\n * @memberof VisualMatrix\n */\n tree (...params) {\n if (params.length) {\n return this;\n }\n return this._tree;\n }\n\n /**\n *\n *\n * @static\n * @return\n * @memberof VisualMatrix\n */\n static defaultConfig () {\n return defaultConfig;\n }\n\n /**\n *\n *\n * @return\n * @memberof VisualMatrix\n */\n createTree () {\n const { tree, lastLevelKey } = createTree(this);\n this._lastLevelKey = lastLevelKey;\n return tree;\n }\n\n /**\n * Computes the logical space taken by the entire matrixTree\n *\n * @return {Object} Logical space taken\n * @memberof VisualMatrix\n */\n setLogicalSpace () {\n const {\n isTransposed\n } = this.config();\n const matrixTree = this.tree();\n createMatrixEachLevel(matrixTree, isTransposed);\n return computeLogicalSpace(matrixTree, this.config(), this.maxMeasures());\n }\n\n /**\n * Returns the space taken by visual matrix\n *\n * @return {Object} space taken by the matrix\n * @memberof VisualMatrix\n */\n getLogicalSpace () {\n return this.logicalSpace();\n }\n\n /**\n * Sets the provied space to the visual matrix\n *\n * @param {number} width width provided\n * @param {number} height height provided\n * @memberof VisualMatrix\n */\n setAvailableSpace (width, height) {\n this.availableSpace({ width, height });\n const tree = this.tree();\n const heightMeasures = this.populateMaxMeasures(HEIGHT, tree);\n const widthMeasures = this.populateMaxMeasures(WIDTH, tree);\n const depth = this.calculateDepth(widthMeasures, heightMeasures);\n\n this.viewableMatrix = this.createViewPortMatrix(depth);\n this.viewableMeasures = this.redistribute(this.viewableMatrix, width, height);\n return this;\n }\n\n /**\n * Populate the max measures in the array\n *\n * @param {Array} measures array to be filled with max measures\n * @param {Object} matrixTree matrix tree of visual matrix\n * @param {number} measure width or height\n * @param {number} [depth=0] depth of the tree that to be calculated\n * @memberof VisualMatrix\n */\n populateMaxMeasures (type, matrixTree, depth = 0, measures = []) {\n measures[depth] = Math.max(measures[depth] || 0, matrixTree.space[type]);\n if (matrixTree.values) {\n const childDepth = depth + 1;\n matrixTree.values.forEach((child) => {\n if (child.space) {\n measures = this.populateMaxMeasures(type, child, childDepth, measures);\n }\n });\n }\n return measures;\n }\n\n /**\n * Calculates the depth of the tree that can be viewed\n *\n * @param {Array} widthMeasures array of widths\n * @param {Array} heightMeasures array of heights\n * @return {number} depth of the tree\n * @memberof VisualMatrix\n */\n calculateDepth (widthMeasures, heightMeasures) {\n let i;\n let j;\n const { height, width } = this.availableSpace();\n\n for (i = 0; i < heightMeasures.length; i++) {\n if (heightMeasures[i] <= height) break;\n }\n for (j = 0; j < widthMeasures.length; j++) {\n if (widthMeasures[j] <= width) break;\n }\n return Math.min(widthMeasures.length - 1, Math.max(i, j));\n }\n\n /**\n * Redistributes the provied space to all cells\n *\n * @param {*} viewableMatrix current viewport matrix\n * @param {*} width provied width\n * @param {*} height provied height\n * @return {Object} current viewports matrixes with measures\n * @memberof VisualMatrix\n */\n redistribute (viewableMatrix, width, height) {\n let maxHeights = [];\n let maxWidths = [];\n const {\n isTransposed\n } = this.config();\n\n viewableMatrix.forEach((matrixInst) => {\n const matrix = matrixInst.matrix;\n const mWidth = 0;\n const mHeight = 0;\n const options = { mWidth, mHeight, matrix, width, height, maxHeights, maxWidths };\n const maxMeasures = isTransposed ? this.redistributeColumnWise(options) : this.redistributeRowWise(options);\n maxWidths = maxMeasures.maxWidths;\n maxHeights = maxMeasures.maxHeights;\n });\n\n const measurements = viewableMatrix.map((matrixInst, i) => {\n let heightMeasures;\n let columnMeasures;\n const cellDimOptions = { matrixInst, maxWidths, maxHeights, matrixIndex: i };\n const { heights, widths, rowHeights, columnWidths } = this.getCellDimensions(cellDimOptions);\n\n if (!isTransposed) {\n heightMeasures = [height, height];\n columnMeasures = widths;\n } else {\n heightMeasures = heights;\n columnMeasures = [width, width];\n }\n return {\n rowHeights: {\n primary: rowHeights[0],\n secondary: rowHeights[1]\n },\n columnWidths: {\n primary: columnWidths[0],\n secondary: columnWidths[1]\n },\n height: {\n primary: heightMeasures[0],\n secondary: heightMeasures[1]\n },\n width: {\n primary: columnMeasures[0],\n secondary: columnMeasures[1]\n }\n };\n });\n\n return measurements;\n }\n\n /**\n * Gets the viewable measures for the current viewable matrix\n *\n * @return {Object} Set of viewable measures\n * @memberof VisualMatrix\n */\n getViewableSpaces () {\n return this.viewableMeasures;\n }\n\n /**\n * Returns the matrix that can be viewed in the current viewport\n *\n * @return {Array} Set of matrices that can be viewed\n * @memberof VisualMatrix\n */\n getViewableData () {\n return this.viewableMatrix;\n }\n\n /**\n *\n *\n * @return\n * @memberof VisualMatrix\n */\n removeExtraCells () {\n const {\n isTransposed,\n extraCellLengths\n } = this.config();\n const matrix = this._layoutMatrix;\n const tree = mergeRecursive({}, this.tree());\n const begCellLen = extraCellLengths[0];\n const endCellLen = extraCellLengths[1] || Number.NEGATIVE_INFINITY;\n const layoutMatrix = !isTransposed ? extraCellsRemover(matrix, begCellLen, endCellLen) :\n matrix.slice(0).map(e => extraCellsRemover(e, begCellLen, endCellLen));\n\n tree.values = extraCellsRemover(tree.values, begCellLen, endCellLen);\n if (!isTransposed) {\n tree.matrix = extraCellsRemover(tree.matrix, begCellLen, endCellLen);\n } else {\n tree.matrix = tree.matrix.map(e => extraCellsRemover(e, begCellLen, endCellLen));\n }\n return {\n tree,\n layoutMatrix\n };\n }\n\n /**\n * Creates the viewport that can be viewed together\n *\n * @param {number} depth maxDepth that can be viewed in the viewport\n * @return {Array} Set of matrices that can be viewed\n * @memberof VisualMatrix\n */\n createViewPortMatrix (depth) {\n const arr = [];\n createMatrixInstances(arr, depth, this.removeExtraCells(), this);\n return arr;\n }\n\n /**\n * Distibutes the given space row wisely\n *\n * @param {Object} options Redistribution information\n * @memberof VisualMatrix\n */\n redistributeRowWise (options) {\n let cWidths = [];\n let rHeights = [];\n let mHeight = 0;\n const maxMeasures = this.maxMeasures();\n const {\n isDistributionEqual,\n distribution,\n isTransposed,\n gutter\n } = this.config();\n const { matrix, width, height, maxHeights, maxWidths } = options;\n\n mHeight = spaceTakenByColumn(matrix, this._lastLevelKey).height;\n\n const maxWidth = maxMeasures.reduce((t, n) => {\n t += n;\n return t;\n });\n if (maxWidth > 0) {\n cWidths = maxMeasures.map(space => space + (width - maxWidth) * (space / maxWidth));\n } else {\n cWidths = maxMeasures.map(() => 0);\n }\n rHeights = getDistributedHeight({\n matrix,\n cIdx: this._lastLevelKey,\n height: mHeight,\n availableHeight: height,\n isDistributionEqual,\n distribution,\n isTransposed,\n gutter\n });\n maxWidths.push(cWidths);\n maxHeights.push(rHeights);\n return { maxWidths, maxHeights };\n }\n\n /**\n * Distibutes the given space column wisely\n *\n * @param {Object} options Redistribution information\n * @memberof VisualMatrix\n */\n redistributeColumnWise (options) {\n let rHeights = [];\n const { matrix, width, maxHeights, maxWidths } = options;\n const borderWidth = this.config().unitMeasures.border;\n const mWidth = spaceTakenByRow(matrix[this._lastLevelKey]).width;\n const cWidths = getDistributedWidth({\n row: matrix[this._lastLevelKey],\n width: mWidth,\n availableWidth: width\n }, this.config());\n\n matrix.forEach((row, rIdx) => row.forEach((col, cIdx) => {\n const oldLogicalSpace = col.getLogicalSpace().height;\n col.setAvailableSpace(cWidths[cIdx] - borderWidth, oldLogicalSpace);\n rHeights[rIdx] = Math.max(rHeights[rIdx] || 0, col.getLogicalSpace().height);\n }));\n\n if (maxHeights.length > 0) {\n rHeights = rHeights.map((e, i) => Math.max(e, maxHeights[0][i]));\n }\n\n maxHeights.push(rHeights);\n\n for (let x = 0; x < maxHeights.length; x++) {\n maxHeights[x] = rHeights;\n }\n maxWidths.push(cWidths);\n return { maxHeights, maxWidths };\n }\n\n /**\n * Dispatch the calculated cell dimensions to all the cells\n *\n * @param {Object} options cell dimension information\n * @return {Object} row and column heights / widths\n * @memberof VisualMatrix\n */\n getCellDimensions (options) {\n let indices = [];\n let unitMeasures = [];\n let mainMeasures = [];\n let computedMeasures = [];\n const {\n isTransposed,\n unitMeasures: measures\n } = this.config();\n const borderWidth = measures.border;\n const { matrixInst, maxWidths, maxHeights, matrixIndex } = options;\n const matrix = matrixInst.matrix;\n const rowHeights = [[0], [0]];\n const columnWidths = [[0], [0]];\n const heights = [0, 0];\n const widths = [0, 0];\n const breakPointer = this._breakPointer;\n\n matrix.forEach((row, rIdx) => {\n row.forEach((cell, cIdx) => {\n const colHeight = maxHeights[matrixIndex][rIdx] || 0;\n const colWidth = maxWidths[matrixIndex][cIdx];\n\n if (!isTransposed) {\n cell.setAvailableSpace(colWidth, colHeight - borderWidth);\n indices = [rIdx, cIdx];\n unitMeasures = [columnWidths, rowHeights];\n mainMeasures = [widths, heights];\n computedMeasures = [colWidth, colHeight];\n } else {\n cell.setAvailableSpace(colWidth - borderWidth, colHeight);\n indices = [cIdx, rIdx];\n unitMeasures = [rowHeights, columnWidths];\n mainMeasures = [heights, widths];\n computedMeasures = [colHeight, colWidth];\n }\n\n if (indices[0] === 0 && indices[1] < breakPointer) {\n unitMeasures[0][0][indices[1]] = computedMeasures[0];\n mainMeasures[0][0] = (mainMeasures[0][0] || 0) + computedMeasures[0];\n } else if (indices[0] === 0 && indices[1] >= breakPointer) {\n unitMeasures[0][1][indices[1] - breakPointer] = computedMeasures[0];\n mainMeasures[0][1] = (mainMeasures[0][1] || 0) + computedMeasures[0];\n }\n if (indices[1] === this._lastLevelKey) {\n unitMeasures[1][0][indices[0]] = computedMeasures[1];\n unitMeasures[1][1][indices[0]] = computedMeasures[1];\n }\n });\n });\n return {\n heights,\n widths,\n rowHeights,\n columnWidths\n };\n }\n}\n\n","import { HEIGHT, WIDTH, COLUMN, ROW } from '../enums/constants';\n\n/**\n * Gets measurement for an instance of visual matrix\n *\n * @param {Array} matrix instance of visual matrix\n * @param {string} type height/width\n * @return {Object} Logical height/width of the matrix\n */\nexport function getMatrixMeasurement (matrix, type) {\n if (matrix) {\n return matrix.getLogicalSpace()[type];\n }\n return 0;\n}\n\n/**\n * Sets available space for an instance of visual matrix\n *\n * @param {Array} matrix instance of visual matrix\n * @param {string} type height/width\n * @param {number} value Value of measurement\n */\nexport function setMatrixMeasurement (matrix, type, value) {\n if (matrix) {\n const spaces = matrix.getLogicalSpace();\n if (value && spaces[type] !== value) {\n type === HEIGHT ? matrix.setAvailableSpace(spaces.width, value) :\n matrix.setAvailableSpace(value, spaces.height);\n }\n }\n}\n\n/**\n *\n *\n * @param {*} matrix\n * @param {*} widths\n * @param {*} heights\n */\nconst setAvailableSpace = (matrix, widths, heights) => {\n matrix.forEach((row, rIdx) => {\n row.forEach((placeholder, cIdx) => {\n placeholder.setAvailableSpace(widths[cIdx], heights[rIdx]);\n });\n });\n};\n\n/**\n *\n *\n * @param {*} layout\n * @param {*} matrix\n * @param {*} pointer\n * @returns\n */\nconst setViewSpaces = (layout, pointerType, viewSpaces) => {\n let pointer = layout.config()[`${pointerType}Pointer`];\n if (viewSpaces.length - 1 < pointer) {\n pointer = 0;\n layout.config({ [`${pointerType}Pointer`]: pointer });\n }\n return pointer;\n};\n\n/**\n * Computes the measurements of space for all matrices in the\n * layout\n *\n * @param {Object} layout Instance of grid layout\n * @return {Object} set of measurements for the layout\n */\nexport const computeLayoutMeasurements = (layout) => {\n const rowMatrix = layout.rowMatrix();\n const columnMatrix = layout.columnMatrix();\n const centerMatrix = layout.centerMatrix();\n const {\n width,\n height\n } = layout.measurement();\n const {\n border\n } = layout.config();\n const matrices = layout.matrices();\n const {\n top,\n bottom\n } = matrices;\n\n // Get width of row matrix\n const rowMatrixWidth = getMatrixMeasurement(rowMatrix, WIDTH);\n\n // Set width for column matrix\n\n // Border adjustment for each cell in the central matrix\n const borderWidth = border.width;\n\n const columnMatrixWidth = width - rowMatrixWidth - borderWidth;\n setMatrixMeasurement(columnMatrix, WIDTH, columnMatrixWidth);\n const columnViewPages = columnMatrix.getViewableSpaces();\n setViewSpaces(layout, COLUMN, columnViewPages);\n\n // Figuring out total space needed by current view space\n const columnViewSpace = columnViewPages[layout.config().columnPointer];\n\n // Getting height of column matrix\n const columnMatrixHeight = columnViewSpace.height.primary + columnViewSpace.height.secondary;\n\n // Set height for row matrix\n const rowMatrixHeight = height - columnMatrixHeight;\n\n setMatrixMeasurement(rowMatrix, HEIGHT, rowMatrixHeight);\n\n // Get heights of each cell of row matrix\n const rowViewableSpaces = rowMatrix.getViewableSpaces();\n setViewSpaces(layout, ROW, rowViewableSpaces);\n const rowHeights = [].concat(...rowViewableSpaces.map(e => e.rowHeights.primary));\n const rowWidthsPrimary = [].concat(...rowViewableSpaces.map(e => e.columnWidths.primary));\n const rowWidthsSecondary = [].concat(...rowViewableSpaces.map(e => e.columnWidths.secondary));\n const columnViewableSpaces = columnMatrix.getViewableSpaces();\n // Get widths of each cell of column matrix\n const columnWidths = [].concat(...columnViewableSpaces.map(e => e.columnWidths.primary));\n const columnHeightsPrimary = columnViewableSpaces[0].rowHeights.primary;\n\n const columnHeightsSecondary = [].concat(...columnViewableSpaces.map(e => e.rowHeights.secondary));\n\n // Setting the available space for each cell in the centre matrix\n centerMatrix.forEach((matrix, rIdx) => {\n matrix.forEach((placeholder, cIdx) => {\n placeholder.setAvailableSpace(columnWidths[cIdx] - borderWidth, rowHeights[rIdx] - borderWidth);\n });\n });\n setAvailableSpace(top[0], rowWidthsPrimary, columnHeightsPrimary);\n setAvailableSpace(top[2], rowWidthsSecondary, columnHeightsPrimary);\n setAvailableSpace(bottom[0], rowWidthsPrimary, columnHeightsSecondary);\n setAvailableSpace(bottom[2], rowWidthsSecondary, columnHeightsSecondary);\n\n return {\n rowMatrixHeight,\n rowMatrixWidth,\n columnMatrixHeight,\n columnMatrixWidth\n };\n};\n\n/**\n * Gets view matrices based on current pointers for row and column\n *\n * @param {Object} layout instance of layout\n * @param {number} rowPointer current row pointer\n * @param {number} columnPointer current column pointer\n * @return {Object} returns the view matrix and its relevant information\n */\nexport const getViewMatrices = (layout, rowPointer, columnPointer) => {\n const rowMatrix = layout.rowMatrix();\n const columnMatrix = layout.columnMatrix();\n const centerMatrix = layout.centerMatrix();\n const matrices = layout.matrices();\n const rowMatrices = rowMatrix.getViewableData();\n const columnMatrices = columnMatrix.getViewableData();\n const centralMatrixPointer = {\n row: 0,\n column: 0\n };\n\n for (let i = rowPointer - 1; i >= 0; i--) {\n const length = Math.max(rowMatrices[i].primaryMatrix.length,\n rowMatrices[i].secondaryMatrix.length);\n centralMatrixPointer.row += length;\n }\n /* istanbul ignore next */\n for (let i = columnPointer - 1; i >= 0; i--) {\n const matrix = columnMatrices[i];\n const { primaryMatrix, secondaryMatrix } = matrix;\n const length = Math.max(primaryMatrix[0] ? primaryMatrix[0].length : 0,\n secondaryMatrix[0] ? secondaryMatrix[0].length : 0);\n centralMatrixPointer.column += length;\n }\n\n matrices.top[1] = columnMatrices[columnPointer].primaryMatrix;\n matrices.bottom[1] = columnMatrices[columnPointer].secondaryMatrix;\n\n matrices.center[0] = rowMatrices[rowPointer].primaryMatrix;\n matrices.center[2] = rowMatrices[rowPointer].secondaryMatrix;\n\n const rowMatrixLen = Math.max(matrices.center[0].length, matrices.center[2].length);\n /* istanbul ignore next */\n const columnMatrixLen = Math.max(matrices.top[1][0] ? matrices.top[1][0].length : 0, matrices.bottom[1][0] ?\n matrices.bottom[1][0].length : 0);\n matrices.center[1] = centerMatrix.slice(centralMatrixPointer.row, centralMatrixPointer.row + rowMatrixLen)\n .map(matrix => matrix.slice(centralMatrixPointer.column, centralMatrixPointer.column + columnMatrixLen));\n\n return {\n matrices,\n rowPages: rowMatrices.length,\n columnPages: columnMatrices.length\n };\n};\n/**\n * Returns measurements of the cells of the current matrix\n *\n * @param {Object} layout instance of layout\n * @return {Object} returns the measurements for current view matrix\n */\nexport const getViewMeasurements = (layout) => {\n const rowMatrix = layout.rowMatrix();\n const columnMatrix = layout.columnMatrix();\n const {\n width,\n height\n } = layout.measurement();\n const {\n columnPointer,\n rowPointer\n } = layout.config();\n\n const rowMatrixWidth = rowMatrix.getViewableSpaces()[rowPointer].width;\n const { primary: leftWidth, secondary: rightWidth } = rowMatrixWidth;\n\n const columnMatrixHeight = columnMatrix.getViewableSpaces()[columnPointer].height;\n const { primary: topHeight, secondary: bottomHeight } = columnMatrixHeight;\n\n const centerHeight = height - (topHeight + bottomHeight);\n const centerWidth = width - (leftWidth + rightWidth);\n\n return {\n viewWidth: [leftWidth, centerWidth, rightWidth],\n viewHeight: [topHeight, centerHeight, bottomHeight]\n };\n};\n","/**\n * This file declares a table that can be extended to create a Datagrid, crosstab\n * and man other visualzations that require a tabular structure.\n */\n\nimport { getUniqueId } from 'muze-utils';\nimport GenericLayout from '../generic-layout';\nimport { DEFAULT_CONFIGURATION, DEFAULT_MEASUREMENTS } from './defaults';\nimport {\n renderMatrices\n} from './renderer';\nimport { generateVisualMatrices } from './layout-helper';\nimport { computeLayoutMeasurements, getViewMeasurements, getViewMatrices } from './computations';\n/**\n * This class is used to create a tabular structure that\n * can house charts and values.\n *\n * @class GridLayout\n */\nexport default class GridLayout extends GenericLayout {\n\n /**\n * Creates an instance of TableLayout.\n * @param {HTMLElement} matrices Set of upto 9 matrices containing the cells to be rendered\n * @param {HTMLElement} mountPoint DOM element/d3 selection where the layout is to be mounted\n * @param {Object} measurement The dimensions of the layout\n * @param {Object} config external configurations.\n * @memberof GenericLayout\n *\n * measurement : {\n * width : number => width of the container\n * height : number => height of the container\n * unitHeight : number => height of unit of the cells\n * unitWidth : number => width of unit of the cells\n * }\n *\n */\n constructor (matrices, mountPoint, measurement, config) {\n super(mountPoint, measurement, config);\n this.matrices(matrices);\n this.config(this.constructor.defaultConfig());\n this._layoutId = getUniqueId();\n }\n\n /**\n * Returns initial set of measurements for the grid layout\n *\n * @static\n * @return {Object} Returns initial set of measurements\n * @memberof GridLayout\n */\n static defaultMeasurement () {\n return DEFAULT_MEASUREMENTS;\n }\n\n /**\n * Returns initialconfiguration for grid layout\n *\n * @static\n * @return {Object} Returns initial configuration for grid layout\n * @memberof GridLayout\n */\n static defaultConfig () {\n return DEFAULT_CONFIGURATION;\n }\n\n /**\n * This function is used to return an instance of GridLayout\n *\n * @return {GridLayout} Instance of grid layout.\n * @static\n * @memberof GridLayout\n */\n static create () {\n return new GridLayout(null, null, this.defaultMeasurement(), this.defaultConfig());\n }\n\n /**\n * Sets/Gets the matrices for the layout\n *\n * @param {Array} matrices Set of matrices\n * @return {Object} Getter/Setter\n * @memberof GridLayout\n */\n matrices (matrices) {\n if (matrices) {\n this._matrices = generateVisualMatrices(this, matrices);\n return this;\n }\n return super.matrices(matrices);\n }\n\n /**\n * Triggers the computations for the layout based on the matrices available\n * This causes a reflow in the entire layout system.\n *\n * @return {Object} Layout instance\n * @memberof GridLayout\n */\n triggerReflow () {\n computeLayoutMeasurements(this);\n this.setViewInformation();\n return this;\n }\n\n /**\n *\n *\n * @param {*} type\n * @param {*} pageNumber\n * @returns\n * @memberof GridLayout\n */\n gotoPage (type, pageNumber) {\n const pageType = type.toLowerCase();\n const { viewMatricesInfo } = this.getViewInformation();\n const totalPages = viewMatricesInfo[`${pageType}Pages`];\n const pointer = Math.min(Math.max(1, pageNumber), totalPages);\n this.config({\n [`${pageType}Pointer`]: pointer - 1\n });\n this.setViewInformation();\n this.renderGrid();\n return this;\n }\n\n /**\n *\n *\n * @param {*} type\n * @returns\n * @memberof GridLayout\n */\n pages (type) {\n const { viewMatricesInfo } = this.getViewInformation();\n const pageType = type.toLowerCase();\n return {\n totalPages: viewMatricesInfo[`${pageType}Pages`],\n currentPage: this.config()[`${pageType}Pointer`] + 1\n };\n }\n\n /**\n *\n *\n * @returns\n * @memberof GridLayout\n */\n setViewInformation () {\n const {\n rowPointer,\n columnPointer,\n border\n } = this.config();\n const viewMatricesInfo = getViewMatrices(this, rowPointer, columnPointer);\n const layoutDimensions = getViewMeasurements(this);\n layoutDimensions.border = border;\n this.viewInfo = {\n viewMatricesInfo,\n layoutDimensions\n };\n return this;\n }\n\n /**\n *\n *\n * @returns\n * @memberof GridLayout\n */\n getViewInformation () {\n return this.viewInfo;\n }\n\n /**\n * Renders the layout\n *\n * @return {Object} current instance\n * @memberof GridLayout\n */\n renderGrid (mountPoint) {\n this.mountPoint(mountPoint);\n if (!this.mountPoint()) {\n return this;\n }\n const {\n viewMatricesInfo,\n layoutDimensions\n } = this.getViewInformation();\n // Render matrices\n renderMatrices(this, viewMatricesInfo.matrices, layoutDimensions);\n return this;\n }\n}\n","import VisualMatrix from '../visual-matrix/visual-matrix';\n\n/**\n * Generates the set of visual matrices for pagination and layouting algorithms\n *\n * @param {*} context\n * @param {*} matrices\n * @returns\n */\nexport const generateVisualMatrices = (context, matrices) => {\n // Set of matrices for layout is generated starting with the left matrix\n let leftMatrix = [];\n let rightMatrix = [];\n let topMatrix = [];\n let bottomMatrix = [];\n let begColCells;\n let endColCells;\n const {\n isRowSizeEqual,\n isColumnSizeEqual,\n gutterSpace,\n distribution,\n border,\n breakPage\n } = context.config();\n const {\n minUnitHeight,\n minUnitWidth\n } = context.measurement();\n const { top, center, bottom } = matrices;\n const [topLeft, topColumns, topRight] = top;\n const [leftRows, valueMatrix, rightRows] = center;\n const [bottomLeft, bottomColumns, bottomRight] = bottom;\n\n if (leftRows.length > 0) {\n // If no left matrix is present, context will be empty\n leftMatrix = [...topLeft, ...leftRows, ...bottomLeft];\n }\n if (rightRows.length > 0) {\n // If no right matrix is present, context will be empty\n rightMatrix = [...topRight, ...rightRows, ...bottomRight];\n }\n if (topColumns.length > 0 && topColumns[0].length > 0) {\n // If no top matrix is present, context will be empty\n topMatrix = topColumns.map((d, i) => [...topLeft[i], ...d, ...topRight[i]]);\n }\n if (bottomColumns.length > 0 && bottomColumns[0].length > 0) {\n // If no bottom matrix is present, context will be empty\n bottomMatrix = bottomColumns.map((d, i) => [...bottomLeft[i], ...d, ...bottomRight[i]]);\n }\n context.rowMatrix(new VisualMatrix([leftMatrix, rightMatrix], {\n isDistributionEqual: isRowSizeEqual,\n distribution: distribution.rows,\n gutter: gutterSpace.rows,\n unitMeasures: {\n width: minUnitWidth,\n height: minUnitHeight,\n border: border.width\n },\n breakPage: breakPage.rows.map(e => e + Math.max(topLeft.length, topRight.length)),\n extraCellLengths: [topLeft.length, bottomLeft.length]\n }));\n\n if (topLeft.length > 0) {\n begColCells = topLeft[0].length;\n } else {\n begColCells = bottomLeft.length > 0 ? bottomLeft[0].length : 0;\n }\n\n if (topRight.length > 0) {\n endColCells = topRight[0].length;\n } else {\n endColCells = bottomRight.length > 0 ? bottomRight[0].length : 0;\n }\n\n context.columnMatrix(new VisualMatrix([topMatrix, bottomMatrix], {\n isDistributionEqual: isColumnSizeEqual,\n distribution: distribution.columns,\n gutter: gutterSpace.columns,\n isTransposed: true,\n unitMeasures: {\n width: minUnitWidth,\n height: minUnitHeight,\n border: border.width\n },\n breakPage: breakPage.columns,\n extraCellLengths: [begColCells, endColCells]\n }));\n context.centerMatrix(valueMatrix);\n\n return matrices;\n};\n","import { ERROR_MSG } from 'muze-utils';\n/**\n * An Interface to be implemented if the transaction support is necessary. This class ensures reactivity to\n * global properties.\n */\nexport default class TransactionSupport {\n /**\n * Property accessor for data member of the class. Data is passed to the system by calling this method.\n */\n data () {\n throw new Error(ERROR_MSG.INTERFACE_IMPl);\n }\n\n /**\n * Property accessor for width of the class. Width is passed as an integer.\n */\n width () {\n throw new Error(ERROR_MSG.INTERFACE_IMPl);\n }\n\n /**\n * Property accessor for height of the class. Height is passed as an integer.\n */\n height () {\n throw new Error(ERROR_MSG.INTERFACE_IMPl);\n }\n\n /**\n * Property accessor for config of the class. Config is passed as an object.\n */\n config () {\n throw new Error(ERROR_MSG.INTERFACE_IMPl);\n }\n}\n","import { TOP, BOTTOM, LEFT, TITLE, SUB_TITLE, GROUP, LAYOUT, LEGEND } from '../constants';\n\n/**\n *\n *\n * @param {*} context\n * @returns\n */\nexport const arrangeComponents = (context) => {\n const legendConfig = context.config().legend;\n const titleConfig = context.title()[1];\n const subtitleConfig = context.subtitle()[1];\n const titleLayouts = {\n [`${TOP}-${TOP}`]: [TITLE, SUB_TITLE, GROUP],\n [`${BOTTOM}-${BOTTOM}`]: [GROUP, SUB_TITLE, TITLE],\n [`${TOP}-${BOTTOM}`]: [TITLE, GROUP, SUB_TITLE],\n [`${BOTTOM}-${TOP}`]: [SUB_TITLE, GROUP, TITLE]\n };\n const legendLayouts = [\n [LEGEND, LAYOUT],\n [LAYOUT, LEGEND]\n ];\n const titlePosition = titleConfig.position || TOP;\n const subtitlePosition = subtitleConfig.position || TOP;\n\n return {\n headers: titleLayouts[`${titlePosition}-${subtitlePosition}`],\n legends: legendConfig.position === LEFT || legendConfig.position === TOP ?\n legendLayouts[0] : legendLayouts[1]\n };\n};\n","/**\n * Flag to specify whether direction is vertical.\n */\nexport const MARGIN = 'margin';\nexport const LEFT = 'left';\nexport const RIGHT = 'right';\nexport const BOTTOM = 'bottom';\nexport const TOP = 'top';\nexport const SPACE_FIXER = 'spaceFixer';\nexport const CLASSPREFIX = 'muze';\nexport const VERTICAL_ALIGN = 'verticalAlign';\nexport const TEXT_ALIGN = 'textAlign';\nexport const IS_OFFSET = 'isOffset';\nexport const MIDDLE = 'middle';\nexport const BASELINE = 'baseline';\nexport const SHOW = 'show';\nexport const CENTER = 'center';\nexport const TEXT = 'text';\nexport const HEADER = 'header';\nexport const HEIGHT = 'height';\nexport const WIDTH = 'width';\nexport const DATA = 'data';\nexport const AXES = 'axes';\nexport const FACET_BY_FIELDS = 'facetByFields';\nexport const FIELDS = 'fields';\nexport const TRANSFORM = 'transform';\nexport const LAYER_DEF = 'layerDef';\nexport const CONFIG = 'config';\nexport const DETAIL_FIELDS = 'detailFields';\n\nexport const TEXT_CELL = 'text-cell';\nexport const AXIS_CELL = 'axis-cell';\nexport const GEOM_CELL = 'geom-cell';\nexport const BLANK_CELL = 'blank-cell';\n","// eneum to refer to simple cell\nexport const SIMPLE = 'simple';\n// eneum to refer to header cell\nexport const TEXT = 'text';\n// enum to refer to axis cell\nexport const AXIS = 'axis';\n// enum to refer to visual cell\nexport const GEOM = 'geom';\n// enum to refer blank cell\nexport const BLANK = 'blank';\n","import {\n ERROR_MSG,\n getUniqueId,\n mergeRecursive\n} from 'muze-utils';\nimport { SIMPLE } from './enums/cell-type';\n\n/**\n * This file declares a class that is used as an interface to create new\n * SimpleCell elements.\n * @module SimpleCell\n */\n/**\n * Base class for all table cells.\n *\n * @interface\n * @class SimpleCell\n */\nclass SimpleCell {\n\n /**\n * Creates an instance of SimpleCell.\n *\n * @param {*} config The input configuration.\n * @memberof SimpleCell\n */\n constructor (config) {\n this._id = getUniqueId();\n\n const defConfig = mergeRecursive({}, this.constructor.defaultConfig());\n this._config = mergeRecursive(defConfig, config || {});\n\n this._mount = null;\n }\n\n /**\n * Returns the type of the placehlder.\n *\n * @readonly\n * @memberof SimpleCell\n */\n get type () {\n return SIMPLE;\n }\n\n /**\n * Returns the type of the placehlder.\n *\n * @readonly\n * @memberof SimpleCell\n * @return {Object} Default config for the placeholder\n */\n static defaultConfig () {\n return {};\n }\n\n /**\n * Returns the value contained by the SimpleCell.\n *\n * @memberof SimpleCell\n */\n valueOf () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Returns a unique identifier for the instance used\n * to control selective rendering.\n *\n * @memberof SimpleCell\n */\n id () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Returns a serialized representation of the instance.\n *\n * @memberof SimpleCell\n */\n serialize () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Returns an object with width and height fields\n * specifying the space taken up by this metod.\n *\n * @memberof SimpleCell\n */\n getLogicalSpace () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Method used to set the space available to render the SimpleCell\n *\n * @param {number} width The available width.\n * @param {number} height The available height.\n * @memberof SimpleCell\n */\n setAvailableSpace () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Render the SimpleCell inthe supplied mount point.\n *\n * @param {HTMLElement} mount The mount point to render in.\n * @memberof SimpleCell\n */\n render () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Render the SimpleCell inthe supplied mount point.\n *\n * @param {HTMLElement} mount The mount point to render in.\n * @memberof SimpleCell\n */\n remove () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n}\n\nexport default SimpleCell;\n","/**\n * This file exports variables that are used as defaults for\n * the placeholders\n */\nimport * as CONSTANTS from './constants';\n\n /**\n * Default Configuration for the cells\n * @return {Object} Default configuration\n */\nexport const DEFAULT_CONFIG = {\n [CONSTANTS.MARGIN]: {\n [CONSTANTS.LEFT]: 0,\n [CONSTANTS.RIGHT]: 0,\n [CONSTANTS.TOP]: 0,\n [CONSTANTS.BOTTOM]: 0\n },\n [CONSTANTS.SPACE_FIXER]: 2,\n [CONSTANTS.IS_OFFSET]: false,\n [CONSTANTS.VERTICAL_ALIGN]: CONSTANTS.TOP,\n [CONSTANTS.TEXT_ALIGN]: CONSTANTS.CENTER,\n [CONSTANTS.SHOW]: true\n};\n","import { mergeRecursive } from 'muze-utils';\nimport { GEOM, TEXT, AXIS, BLANK } from './enums/cell-type';\n\nconst DEFAULT_PROPS = {\n mount: {},\n availHeight: {},\n availWidth: {},\n config: {\n sanitization: (context, value) => mergeRecursive(context._config, value)\n },\n logicalSpace: {},\n source: {}\n};\n\nconst geomProps = {\n data: {},\n caption: {},\n config: {},\n axes: {\n sanitization: (context, value) => Object.assign(context._axes, value)\n },\n facetByFields: {},\n fields: {},\n transform: {},\n layerDef: {},\n detailFields: {}\n};\n\nexport const PROPS = {\n [TEXT]: DEFAULT_PROPS,\n [GEOM]: mergeRecursive(geomProps, DEFAULT_PROPS),\n [AXIS]: DEFAULT_PROPS,\n [BLANK]: DEFAULT_PROPS\n};\n","/**\n * This file declares a class that represents a table cell\n * used to house an axis.\n * @module VisualCell\n */\nimport { selectElement, makeElement, generateGetterSetters } from 'muze-utils';\nimport { CLASSPREFIX, HEIGHT, WIDTH, AXIS_CELL } from './enums/constants';\nimport SimpleCell from './simple-cell';\nimport { DEFAULT_CONFIG } from './enums/defaults';\nimport { AXIS } from './enums/cell-type';\nimport { PROPS } from './props';\n\n/**\n * Computes the logical space of the an axis instance within an axis cell\n *\n * @param {Object} context Required to get the needed parameters to compute axis space\n * @return {Object} Returns the logical space for axis\n */\nconst computeAxisSpace = (context) => {\n let logicalWidth;\n let logicalHeight;\n const axis = context.source();\n const {\n spaceFixer,\n margin\n } = context.config();\n const {\n width,\n height\n } = axis.getLogicalSpace();\n const {\n show\n } = axis.config();\n if (show === true) {\n logicalHeight = Math.floor(height + margin.top + margin.bottom + spaceFixer);\n logicalWidth = Math.floor(width + margin.left + margin.right + spaceFixer);\n } else {\n [logicalWidth, logicalHeight] = [width, height];\n }\n return {\n width: logicalWidth,\n height: logicalHeight\n };\n};\n\n/**\n * Represents an axis cell.\n *\n * @class Axis\n */\nclass AxisCell extends SimpleCell {\n\n /**\n * Creates an instance of AxisCell.\n *\n * @param {Object} config The input config.\n * @memberof AxisCell\n */\n constructor (config) {\n super(config);\n\n this._axis = null;\n this._availHeight = null;\n this._availWidth = null;\n this._logicalSpace = null;\n\n generateGetterSetters(this, PROPS[AXIS]);\n }\n\n /**\n * return the type pf SimpleCell cell.\n *\n * @readonly\n * @memberof AxisCell\n */\n get type () {\n return AXIS;\n }\n\n /**\n * This method return the value conatined by this SimpleCell.\n *\n * @return {SimpleAxis | ColorAxis} Instance of SimpleAxis or ColorAxis.\n * @memberof AxisCell\n */\n valueOf () {\n return this.source().id;\n }\n\n /**\n * This method return the unique identififer of the axis\n *\n * @return {string} Id of the axis.\n * @memberof AxisCell\n */\n get id () {\n return this._id;\n }\n\n /**\n * Retrns the serialized representation of this cell.\n *\n * @return {Object}Object with serializable props.\n * @memberof AxisCell\n */\n serialize () {\n return {\n type: AXIS,\n axis: this.source().serialize()\n };\n }\n\n /**\n * return the default configuration for the text cell\n *\n * @static\n * @return {Object} Default configuration of the cell\n * @memberof AxisCell\n */\n static defaultConfig () {\n return DEFAULT_CONFIG;\n }\n\n /**\n * return the space taken up by an axis element in the dom.\n *\n * @return {Object} Object with width and height fields.\n * @memberof AxisCell\n */\n getLogicalSpace () {\n if (!this.logicalSpace()) {\n this.logicalSpace(computeAxisSpace(this));\n }\n return this.logicalSpace();\n }\n\n /**\n * This method is used to set the space availiable to render\n * the SimpleCell.\n *\n * @param {number} width The width of SimpleCell.\n * @param {number} height The height of SimpleCell.\n * @return {Instance} Returns current Instance\n * @memberof AxisCell\n */\n setAvailableSpace (width, height) {\n this.availWidth(width);\n this.availHeight(height);\n const {\n margin,\n isOffset\n } = this.config();\n this.source().setAvailableSpace(width, height, margin, isOffset);\n this.logicalSpace(null);\n this.source().logicalSpace(null);\n return this;\n }\n\n /**\n * This method is used to render the axis inside the axis cell.\n *\n * @param {HTMLElement} mount The mount point.\n * @return {Selection} node where axis mounted\n * @memberof AxisCell\n */\n /* istanbul ignore next */render (mount) {\n if (!mount) {\n return this;\n }\n const axis = this.source();\n const availHeight = this.availHeight();\n const availWidth = this.availWidth();\n const {\n margin\n } = this.config();\n const {\n top,\n bottom,\n left,\n right\n } = margin;\n const {\n show\n } = axis.config();\n const wrapperDiv = makeElement(selectElement(mount), 'div', [this], `${CLASSPREFIX}-${AXIS_CELL}`);\n const selection = makeElement(wrapperDiv, 'svg', [1], `${CLASSPREFIX}-axis-container`);\n\n this.mount(mount);\n if (availWidth === 0 || !availWidth) {\n selection.attr(WIDTH, `${0}px`);\n }\n if (availHeight === 0 || !availHeight) {\n selection.attr(HEIGHT, `${0}px`);\n }\n wrapperDiv.style(WIDTH, `${show ? availWidth : 0}px`)\n .style(HEIGHT, `${show ? availHeight : 0}px`)\n .style('margin-top', top)\n .style('margin-bottom', bottom)\n .style('margin-left', left)\n .style('margin-right', right);\n\n axis.mount(selection.node());\n return selection;\n }\n\n /**\n * Disposes the cell\n *\n * @return {Instance} Current instance of AxisCell\n * @memberof AxisCell\n */\n remove () {\n this.source() && this.source().remove();\n this.mount() && this.mount().remove();\n return this;\n }\n}\n\nexport default AxisCell;\n\n","/**\n * This file declares a class that represents a BLANK element in a table.\n * @module VisualCell\n */\nimport {\n selectElement,\n makeElement,\n applyStyle,\n generateGetterSetters\n } from 'muze-utils';\nimport SimpleCell from './simple-cell';\nimport { CLASSPREFIX, BLANK_CELL } from './enums/constants';\nimport { BLANK } from './enums/cell-type';\nimport { DEFAULT_CONFIG } from './enums/defaults';\nimport { PROPS } from './props';\n\n/**\n * Represents a table haeder.\n *\n * @class BLANK\n */\nclass BlankCell extends SimpleCell {\n\n /**\n * Creates an instance of BLANK.\n * @param {Object} config The input configuration.\n * @memberof BLANK\n */\n constructor (config) {\n super(config);\n\n generateGetterSetters(this, PROPS[BLANK]);\n }\n\n /**\n * return the type pf SimpleCell cell.\n *\n * @readonly\n * @memberof BlankCell\n */\n get type () {\n return BLANK;\n }\n\n /**\n * This method return the value contained by this SimpleCell.\n *\n * @return {string} The text value contained by this cell.\n * @memberof BlankCell\n */\n valueOf () {\n return this.id;\n }\n\n /**\n * return the default configuration for the text cell\n *\n * @static\n * @return {Object} Default configuration of the cell\n * @memberof BlankCell\n */\n static defaultConfig () {\n return DEFAULT_CONFIG;\n }\n\n /**\n * This method is used to return a unique identifier for\n * the BLANK cell.\n *\n * @return {string} The unique identifier for the BLANK.\n * @memberof BlankCell\n */\n get id () {\n return this._id;\n }\n\n /**\n * This method is used to obtain a serialized representation of this instance.\n *\n * @return {Object} Object with serilizable props.\n * @memberof BLANK\n */\n serialize () {\n return {\n type: BLANK\n };\n }\n\n /**\n * This method return the space taken up\n * by the text with the style applied.\n *\n * @return {Object} width and height taken up by the text.\n * @memberof BLANK\n */\n getLogicalSpace () {\n if (!this.logicalSpace()) {\n return {\n width: this.width || 0,\n height: this.height || 0\n };\n }\n return this.logicalSpace();\n }\n\n /**\n * This method is used to set the available space.\n *\n * @param {number} width The available width.\n * @param {number} height The available height.\n * @return {Instance} Returns current Instance\n * @memberof BlankCell\n */\n setAvailableSpace (width, height) {\n this.availWidth(width);\n this.availHeight(height);\n this.logicalSpace(null);\n return this;\n }\n\n /**\n * This method is used to render the BLANK cell inside\n * the provided mount point.\n *\n * @param {HTMLElement} mount The mount point for this cell.\n * @return {Instance} Returns current Instance\n * @memberof BLANK\n */\n /* istanbul ignore next */render (mount) {\n if (mount) {\n const { style } = this.config();\n // append span element to mount point\n this.mount(mount);\n const container = selectElement(mount);\n const elem = makeElement(container, 'div', [this.id]);\n elem.classed(`${CLASSPREFIX}-${BLANK_CELL}`, true);\n elem.style('width', `${this.availWidth()}px`);\n elem.style('height', `${this.availHeight()}px`);\n elem.html('');\n // apply style on the returned element\n if (style) {\n applyStyle(elem, style);\n }\n } return this;\n }\n\n /**\n * Removes the cell(Disposal)\n *\n * @return {Instance} Returns current Instance\n * @memberof BlankCell\n */\n remove () {\n this.mount() && this.mount().remove();\n return this;\n }\n }\nexport default BlankCell;\n","/**\n * This file declares a class that represents a Text element in a table.\n * @module VisualCell\n */\n\nimport {\n selectElement,\n makeElement,\n getSmartComputedStyle,\n generateGetterSetters\n} from 'muze-utils';\nimport SimpleCell from './simple-cell';\nimport { TEXT } from './enums/cell-type';\nimport { PROPS } from './props';\nimport { DEFAULT_CONFIG } from './enums/defaults';\nimport { CLASSPREFIX, TOP, BOTTOM, LEFT, RIGHT, HEADER, WIDTH, TEXT_CELL } from './enums/constants';\nimport './text-cell.scss';\n\n/**\n* Computes the Logical Space for the text\n*\n* @param {Object} context Required to get the needed parameters to compute text space\n* @return {Object} Logical space taken up by text\n* @memberof TextCell\n*/\nconst computeTextSpace = (context) => {\n const { labelManager } = context.dependencies();\n const space = labelManager.getOriSize(context.source());\n const {\n margin,\n show\n } = context.config();\n\n labelManager.setStyle(context._computedStyle);\n if (show) {\n return {\n width: space.width + margin.left + margin.right + context._minTickDiff.width,\n height: space.height + margin.top + margin.bottom + context._minTickDiff.height\n };\n } return {\n width: 0,\n height: 0\n };\n};\n\n/**\n * Represents a table haeder.\n *\n * @class Text\n */\nclass TextCell extends SimpleCell {\n\n /**\n * Creates an instance of Text.\n * @param {Object} config The input configuration.\n * @param {string} dependencies Dependencies for the class(labelManager)\n * @memberof Text\n */\n constructor (config, dependencies) {\n super(config);\n\n this._dependencies = dependencies;\n this._className = this._config.className ||\n (this._config.type === HEADER ? `${CLASSPREFIX}-${HEADER}-cell` : `${CLASSPREFIX}-${TEXT}-cell`);\n this._computedStyle = getSmartComputedStyle(selectElement('body'), this._className);\n this._dependencies.labelManager.setStyle(this._computedStyle);\n this._minTickDiff = this._dependencies.labelManager.getOriSize('WW');\n\n generateGetterSetters(this, PROPS[TEXT]);\n }\n\n /**\n * return the type pf SimpleCell cell.\n *\n * @readonly\n * @memberof TextCell\n */\n get type () {\n return TEXT;\n }\n\n /**\n * This method return the value contained by this SimpleCell.\n *\n * @return {string} The text value contained by this cell.\n * @memberof TextCell\n */\n valueOf () {\n return this.source();\n }\n\n /**\n * This method is used to return a unique identifier for\n * the Text cell.\n *\n * @return {string} The unique identifier for the Text.\n * @memberof TextCell\n */\n get id () {\n return this._id;\n }\n\n /**\n * Returns the dependencies of the instance\n *\n * @return {Object} Dependencies needed by the class\n * @memberof TextCell\n */\n dependencies () {\n return this._dependencies;\n }\n\n /**\n * This method is used to obtain a serialized representation of this instance.\n *\n * @return {Object} Object with serilizable props.\n * @memberof TextCell\n */\n serialize () {\n return {\n text: this.source(),\n type: TEXT\n };\n }\n\n /**\n * return the default configuration for the text cell\n *\n * @static\n * @return {Object} Default configuration of the cell\n * @memberof TextCell\n */\n static defaultConfig () {\n return DEFAULT_CONFIG;\n }\n\n /**\n * This method return the space taken up\n * by the text with the style applied.\n *\n * @return {Object} width and height taken up by the text.\n * @memberof Text\n */\n getLogicalSpace () {\n if (!this.logicalSpace()) {\n this.logicalSpace(computeTextSpace(this));\n }\n return this.logicalSpace();\n }\n\n /**\n * This method is used to set the available space.\n *\n * @param {number} width The available width.\n * @param {number} height The available height.\n * @return {Instance} Returns current Instance\n * @memberof TextCell\n */\n setAvailableSpace (width, height) {\n this.availWidth(width);\n this.availHeight(height);\n this.logicalSpace(null);\n return this;\n }\n\n /**\n * This method is used to render the Text cell inside\n * the provided mount point.\n *\n * @param {HTMLElement} mount The mount point for this cell.\n * @return {Instance} Returns current Instance\n * @memberof Text\n */\n render (mount) {\n const availWidth = this.availWidth();\n const {\n margin,\n show,\n verticalAlign,\n textAlign\n } = this.config();\n\n this.mount(mount);\n if (show) {\n const container = selectElement(mount);\n const elem = makeElement(container, 'div', [this.id], `${CLASSPREFIX}-${TEXT_CELL}`);\n\n container.style('vertical-align', verticalAlign);\n elem.classed(this._className, true);\n // apply style on the returned element\n elem.style(WIDTH, availWidth ? `${availWidth}px` : '100%');\n [TOP, BOTTOM, LEFT, RIGHT].forEach((type) => {\n elem.style(`padding-${type}`, `${margin[type]}px`);\n });\n elem.style('text-align', textAlign);\n elem.style('display', 'inline');\n // set the text as the innerHTML\n elem.html(this.source());\n }\n return this;\n }\n\n /**\n * Disposes the cell\n *\n * @return {Instance} Returns current Instance\n * @memberof TextCell\n */\n remove () {\n this.mount() && this.mount().remove();\n return this;\n }\n }\n\nexport default TextCell;\n","/**\n * This file declares a class that is used to represent a table cell\n * that houses a visual unit.\n * @module VisualCell\n */\n\nimport { selectElement, makeElement, generateGetterSetters } from 'muze-utils';\nimport SimpleCell from './simple-cell';\nimport { GEOM } from './enums/cell-type';\nimport { PROPS } from './props';\nimport {\n CLASSPREFIX, HEIGHT, WIDTH, DATA, AXES, FACET_BY_FIELDS, FIELDS, TRANSFORM, LAYER_DEF, CONFIG, GEOM_CELL,\n DETAIL_FIELDS\n} from './enums/constants';\nimport { DEFAULT_CONFIG } from './enums/defaults';\n\n/**\n * Calculates the logical space of the cell\n *\n * @param {Object} context Required to get the needed parameters to compute unit space\n * @return {Object} Logical space taken up by the unit\n * @memberof GeomCell\n */\nconst computeGeomSpace = (context) => {\n const config = context.source().config();\n const { width, height } = config;\n return {\n width: Math.ceil(width),\n height: Math.ceil(height + context.getCaptionSpace().height)\n };\n};\n\n /**\n * This class represents a SimpleCell for visual unit.\n *\n * @class GeomCell\n */\nclass GeomCell extends SimpleCell {\n\n /**\n * Creates an instance of GeomCell.\n * @param {Object} config The input configuration.\n * @memberof GeomCell\n */\n constructor (config) {\n super(config);\n\n this._unit = null;\n this._layers = null;\n this._axes = {};\n this._datamodel = {};\n this._facetByFields = {};\n this._fields = null;\n this._transform = null;\n this._caption = null;\n\n generateGetterSetters(this, PROPS[GEOM]);\n }\n\n /**\n * return the type pf SimpleCell cell.\n *\n * @readonly\n * @memberof GeomCell\n */\n get type () {\n return GEOM;\n }\n\n /**\n * This method return the value contained by this cell.\n *\n * @return {VisualUnit} Instance of visual unit contained by visual unit.\n * @memberof GeomCell\n */\n valueOf () {\n return this.source();\n }\n\n /**\n * This method is used to return the id of the\n * visual unit housed by this cell.\n *\n * @return {string} The unique id of the visual unit.\n * @memberof GeomCell\n */\n get id () {\n return this.source().id();\n }\n\n /**\n * This method return a serialized representation of\n * this instance.\n *\n * @return {Object} Object with serializable props.\n * @memberof GeomCell\n */\n serialize () {\n return {\n type: GEOM,\n unit: this.source().serialize(),\n caption: this.caption()\n };\n }\n\n /**\n * return the default configuration for the geom cell\n *\n * @static\n * @return {Object} Default configuration of the cell\n * @memberof GeomCell\n */\n static defaultConfig () {\n return DEFAULT_CONFIG;\n }\n\n /**\n * Updates the model based on the changed parameters\n *\n * @return {Instance} return instance\n * @memberof GeomCell\n */\n updateModel () {\n const unit = this.source();\n unit.lockModel();\n [DATA, AXES, FACET_BY_FIELDS, FIELDS, TRANSFORM, LAYER_DEF, CONFIG, DETAIL_FIELDS].forEach((prop) => {\n this[prop]() && unit[prop](this[prop]());\n });\n unit.unlockModel();\n return this;\n }\n\n /**\n * It gives the space taken by the caption of the unit\n *\n * @return {Object} return the space taken by caption\n * @memberof GeomCell\n */\n getCaptionSpace () {\n const caption = this.caption();\n\n let captionSpace = { width: 0, height: 0 };\n if (caption) {\n captionSpace = caption.getLogicalSpace();\n }\n return captionSpace;\n }\n\n /**\n * return the space taken up by the element in the dom.\n *\n * @return {Object} Object with width and height fields.\n * @memberof GeomCell\n */\n getLogicalSpace () {\n if (!this.logicalSpace()) {\n this.logicalSpace(computeGeomSpace(this));\n }\n return this.logicalSpace();\n }\n\n /**\n * This method is used to set the space available to\n * render the SimpleCell.\n *\n * @param {number} width The available width.\n * @param {number} height The available height.\n * @return {Instance} Returns current Instance\n * @memberof GeomCell\n */\n setAvailableSpace (width, height) {\n const unit = this.source();\n\n this.availWidth(width);\n this.availHeight(height);\n unit.lockModel();\n unit.width(width).height(height - this.getCaptionSpace().height);\n unit.unlockModel();\n this.logicalSpace(null);\n return this;\n }\n\n /**\n * his method is used to render the visual unit inside the provided cell.\n *\n * @param {HTMLElement} mount The mountpoint in the table.\n * @return {Instance} Returns current Instance\n * @memberof GeomCell\n */\n render (mount) {\n if (mount) {\n this.mount(mount);\n const availHeight = this.availHeight();\n const availWidth = this.availWidth();\n const caption = this.caption();\n const wrapperDiv = makeElement(selectElement(mount), 'div', [1], `${CLASSPREFIX}-${GEOM_CELL}`);\n\n if (caption) {\n const captionDom = makeElement(wrapperDiv, 'div', [caption], `${CLASSPREFIX}-unit-caption`).node();\n caption.render(captionDom);\n }\n const selection = makeElement(wrapperDiv, 'div', [1], `${CLASSPREFIX}-unit`);\n wrapperDiv.style(WIDTH, `${availWidth}px`).style(HEIGHT, `${availHeight}px`);\n selection.style(WIDTH, `${availWidth}px`)\n .style(HEIGHT, `${availHeight - this.getCaptionSpace().height}px`);\n this.source().mount(selection.node());\n }\n return this;\n }\n\n /**\n * Disposes the cell\n *\n * @return {Object} Current instance\n * @memberof GeomCell\n */\n remove () {\n this.mount() && this.mount().remove();\n this.source().remove();\n return this;\n }\n}\n\nexport default GeomCell;\n","import AxisCell from './axis-cell';\nimport BlankCell from './blank-cell';\nimport TextCell from './text-cell';\nimport GeomCell from './geom-cell';\nimport SimpleCell from './simple-cell';\n\nimport * as CONSTANTS from './constants';\n\nexport const DEFAULT_PLACEHOLDERS = {\n [CONSTANTS.SIMPLE_CELL]: SimpleCell,\n [CONSTANTS.TEXT_CELL]: TextCell,\n [CONSTANTS.AXIS_CELL]: AxisCell,\n [CONSTANTS.GEOM_CELL]: GeomCell,\n [CONSTANTS.BLANK_CELL]: BlankCell\n};\n\n","export const SIMPLE_CELL = 'SimpleCell';\nexport const TEXT_CELL = 'TextCell';\nexport const AXIS_CELL = 'AxisCell';\nexport const BLANK_CELL = 'BlankCell';\nexport const GEOM_CELL = 'GeomCell';\n\n","import { DEFAULT_PLACEHOLDERS } from './defaults';\n\n/**\n * Creates a registry for the cells, which can be used for\n * setting a new cell or getting the registered cells\n *\n * @return {Object} Setters and getters for registered cells\n */\nconst cellRegistry = () => {\n const reg = DEFAULT_PLACEHOLDERS;\n return {\n set: (key, def) => {\n if (key in reg) {\n reg[key] = def;\n }\n return cellRegistry;\n },\n get: () => reg\n };\n};\nexport default cellRegistry;\n","import { TextCell } from '@chartshq/visual-cell';\nimport { escapeHTML } from 'muze-utils';\n\n/**\n *\n *\n * @param {*} rawContent\n * @returns\n */\nconst resolveTitleSubTitleContent = (rawContent) => {\n if (typeof rawContent === 'function' && !rawContent._sanitize) {\n return rawContent();\n }\n return escapeHTML(rawContent());\n};\n\n/**\n *\n *\n * @param {*} config\n * @param {*} cellType\n * @param {*} labelManager\n * @param {*} prevCell\n * @returns\n */\nconst headerCreator = (config, cellType, labelManager, prevCell) => {\n const {\n content\n } = config;\n const cell = prevCell || new TextCell({ type: cellType }, { labelManager });\n\n cell.source(content);\n\n return {\n height: cell.getLogicalSpace().height,\n cell\n };\n};\n\n/**\n *\n *\n * @param {*} config\n * @param {*} type\n * @param {*} labelManager\n * @param {*} cell\n * @returns\n */\nconst createHeading = (config, type, labelManager, prevCell) => {\n if (!config) { return ''; }\n\n return headerCreator(\n config,\n type === 'title' ? 'header' : 'text',\n labelManager,\n prevCell\n );\n};\n\n/**\n *\n *\n * @param {*} context\n */\nexport const createHeaders = (context, canvasHeight, canvasWidth) => {\n let headerHeight = 0;\n const headers = {};\n\n canvasHeight >= 200 && canvasWidth >= 200 && ['title', 'subtitle'].forEach((type) => {\n const headerOptions = context[type]();\n const content = resolveTitleSubTitleContent(headerOptions[0]);\n if (content.length) {\n const config = headerOptions[1];\n\n config.width = context.width();\n config.content = content;\n\n const { height, cell } = createHeading(config, type, context.dependencies().smartlabel,\n context[`${type}Cell`]);\n\n headers[`${type}Cell`] = cell;\n context._composition[type] = cell;\n headerHeight += height + config.padding;\n }\n });\n return { headerHeight, headers };\n};\n\n","import { TextCell, AxisCell } from '@chartshq/visual-cell';\nimport {\n VERTICAL, HORIZONTAL, LEFT, RIGHT, LEGEND_TYPE_MAP, PADDING, BORDER, MARGIN\n} from '../constants';\n\n/**\n *\n *\n * @param {*} legendConfig\n * @param {*} canvases\n * @returns\n */\nexport const legendCreator = (canvas) => {\n let LegendCls;\n const dataset = [];\n const axes = canvas.getRetinalAxes();\n\n Object.entries(axes).forEach((axisInfo) => {\n const scale = axisInfo[1][0];\n const scaleType = axisInfo[0];\n const scaleProps = canvas[scaleType]();\n\n if (scaleProps.field) {\n const {\n type,\n step\n } = scale.config();\n\n const stepMapper = typeof step === 'boolean' ? step : false;\n LegendCls = LEGEND_TYPE_MAP[`${type}-${stepMapper}-${scaleType}`];\n dataset.push({ scale, canvas, fieldName: scaleProps.field, LegendCls, scaleType });\n }\n });\n\n return dataset;\n};\n\n/**\n *\n *\n * @param {*} legendConfig\n * @param {*} canvases\n * @param {*} measurement\n * @param {*} prevLegends\n * @returns\n */\nexport const legendInitializer = (legendConfig, canvas, measurement, prevLegends) => {\n const legends = [];\n const {\n height,\n width,\n headerHeight\n } = measurement;\n const {\n position,\n align\n } = legendConfig;\n\n const legendInfo = legendCreator(canvas);\n\n legendInfo.forEach((dataInfo, index) => {\n let legend = {};\n\n const legendMeasures = {};\n const {\n LegendCls,\n scale,\n fieldName,\n scaleType\n } = dataInfo;\n const config = legendConfig[scaleType] || {};\n const title = config.title || {};\n title.text = title.text || fieldName;\n if (config.show) {\n config.position = position;\n config.align = align;\n\n if (prevLegends[index]) {\n legend = prevLegends[index].legend;\n } else {\n legend = LegendCls.create({\n labelManager: canvas._dependencies.smartlabel,\n cells: {\n AxisCell, TextCell\n }\n });\n }\n legendMeasures.maxHeight = align === VERTICAL ? (height - headerHeight) : height * 0.2;\n legendMeasures.maxWidth = align === HORIZONTAL ? width : width * 0.2;\n legendMeasures.width = Math.min(legendMeasures.maxWidth, config.width);\n legendMeasures.height = Math.min(legendMeasures.maxHeight, config.height);\n\n [PADDING, BORDER, MARGIN].forEach((e) => {\n legendMeasures[e] = config[e];\n });\n legend.scale(scale)\n .title(title)\n .fieldName(fieldName)\n .config(config)\n .metaData(canvas.composition().visualGroup.getGroupByData().project([fieldName]))\n .measurement(legendMeasures)\n .canvasAlias(canvas.alias())\n .setLegendMeasures();\n\n legends.push({ canvas, legend, scaleType });\n }\n });\n return legends;\n};\n\n/**\n *\n *\n * @param {*} legends\n * @param {*} legendConfig\n * @param {*} availableHeight\n * @param {*} availableWidth\n * @returns\n */\nexport const getLegendSpace = (legends, legendConfig, availableHeight, availableWidth) => {\n const legendMeasures = legends.map(legendInfo => legendInfo.legend.measurement());\n const legendSpace = { width: 0, height: 0 };\n\n legendMeasures.forEach((space) => {\n let height = 0;\n let width = 0;\n width = Math.min(space.width, space.maxWidth);\n height = Math.min(space.height, space.maxHeight);\n\n if (legendConfig.align === HORIZONTAL) {\n if (legendSpace.width + width > availableWidth) {\n legendSpace.width = availableWidth;\n legendSpace.height += height;\n } else {\n legendSpace.width += width;\n legendSpace.height = Math.max(legendSpace.height, height);\n }\n } else if (legendSpace.height + height > availableHeight) {\n legendSpace.height = height;\n legendSpace.width += width;\n } else {\n legendSpace.height += height;\n legendSpace.width = Math.max(legendSpace.width, width);\n }\n });\n if (legendConfig.align === HORIZONTAL) {\n legendSpace.width = availableWidth;\n }\n return legendSpace;\n};\n\n/**\n *\n *\n * @param {*} context\n * @param {*} headerHeight\n * @returns\n */\nexport const createLegend = (context, headerHeight, height, width) => {\n const measurement = {\n height,\n width,\n headerHeight\n };\n const { legend } = context.config();\n const { show, position } = legend;\n\n legend.classPrefix = context.config().classPrefix;\n const align = (position === LEFT || position === RIGHT) ? VERTICAL : HORIZONTAL;\n\n legend.show = show ? ((align === VERTICAL && width > 200) || (align === HORIZONTAL && height > 200)) : show;\n legend.align = align;\n return legendInitializer(legend, context, measurement, context.legends || []);\n};\n","import { mergeRecursive } from 'muze-utils';\nimport { arrangeComponents } from './component-resolver';\nimport { createHeaders } from './title-maker';\nimport { createLegend, getLegendSpace } from './legend-maker';\nimport { TOP, BOTTOM, LEFT, RIGHT } from '../constants';\n\n/**\n *\n *\n * @param {*} context\n * @returns\n */\nexport const prepareLayout = (layout, components, config, measurement) => {\n const {\n rows,\n columns,\n values,\n cornerMatrices\n } = components;\n\n const {\n topLeft,\n topRight,\n bottomLeft,\n bottomRight\n } = cornerMatrices;\n\n layout.measurement(measurement)\n .config(config)\n .matrices({\n top: [topLeft, columns[0], topRight],\n center: [rows[0], values, rows[1]],\n bottom: [bottomLeft, columns[1], bottomRight]\n })\n .triggerReflow();\n};\n\n/**\n *\n *\n * @param {*} context\n * @param {*} mount\n * @returns\n */\nexport const getRenderDetails = (context, mount) => {\n let layoutConfig = mergeRecursive({}, context.config());\n // Get height width of the mount point\n let { height, width } = mount.getBoundingClientRect();\n const heightAttr = context.height();\n const widthAttr = context.width();\n const visGroup = context.composition().visualGroup;\n const {\n isColumnSizeEqual,\n isRowSizeEqual,\n rows,\n columns,\n values\n } = visGroup.placeholderInfo();\n const {\n minWidth,\n minHeight,\n classPrefix,\n showHeaders,\n legend\n } = context.config();\n // Get title configuration\n const titleConfig = context.title()[1];\n // Get subtitle configuration\n const subtitleConfig = context.subtitle()[1];\n // Get legend position\n const legendPosition = legend.position;\n // Arrange components according to config\n const layoutArrangement = arrangeComponents(context);\n\n height = Math.floor(height);\n width = Math.floor(width);\n\n const availableHeightForCanvas = Math.max(heightAttr > 0 ? heightAttr : height, minHeight);\n const availableWidthForCanvas = Math.max(widthAttr > 0 ? widthAttr : width, minWidth);\n\n // Create headers and determine header height\n const { headers, headerHeight } = createHeaders(context, availableHeightForCanvas, availableWidthForCanvas);\n\n // Create legends and determine legend space\n const legends = createLegend(context, headerHeight, availableHeightForCanvas, availableWidthForCanvas);\n context._composition.legend = {};\n legends.forEach((e) => {\n context._composition.legend[e.scaleType] = e.legend;\n });\n\n const legendSpace = getLegendSpace(legends, legend, availableHeightForCanvas, availableWidthForCanvas);\n const legendWidth = (legendPosition === LEFT || legendPosition === RIGHT) ? legendSpace.width : 0;\n const legendHeight = (legendPosition === TOP || legendPosition === BOTTOM) ? legendSpace.height : 0;\n\n // Set components for layouting\n const components = {\n headers,\n legends,\n canvases: [context],\n rows,\n columns,\n values,\n cornerMatrices: visGroup.cornerMatrices()\n };\n const measurement = {\n mountSpace: {\n height,\n width\n },\n headerHeight,\n legendSpace,\n canvasWidth: availableWidthForCanvas,\n canvasHeight: availableHeightForCanvas,\n width: availableWidthForCanvas - legendWidth,\n height: availableHeightForCanvas - headerHeight - legendHeight,\n minUnitHeight: context.minUnitHeight(),\n minUnitWidth: context.minUnitWidth()\n };\n layoutConfig = mergeRecursive(layoutConfig, {\n classPrefix,\n showHeaders,\n border: mergeRecursive(visGroup.metaData().border, context.config().border),\n layoutArrangement,\n legend,\n title: titleConfig,\n subtitle: subtitleConfig,\n isColumnSizeEqual,\n isRowSizeEqual\n });\n return {\n layoutConfig,\n components,\n measurement\n };\n};\n","export const TITLE_CONFIG = {\n position: 'top',\n align: 'left',\n padding: 8\n};\n\nexport const SUB_TITLE_CONFIG = {\n position: 'top',\n align: 'left',\n padding: 16\n};\n","import { mergeRecursive, selectElement } from 'muze-utils';\nimport {\n ROWS,\n COLUMNS,\n COLOR,\n SHAPE,\n SIZE,\n DETAIL,\n LAYERS,\n TRANSFORM,\n MOUNT,\n TITLE,\n SUB_TITLE\n} from '../constants';\nimport { TITLE_CONFIG, SUB_TITLE_CONFIG } from './defaults';\n/**\n * @module\n * This is the local options semantics based on which setters getters are created and reactivity is initiated.\n * This local object is only valid for Canvas.\n * Canvas merges global and local object both to the model\n *\n * Format\n * PROPERTRY_NAME: {\n * value: // default value of the property,\n * meta: {\n * typeCheck: // The setter value will be checked using this. If the value is function then the setter value\n * // is passed as args.\n * typeExpected: // The output of typecheck action will be tested against this. Truthy value will set the\n * // value to the setter\n * sanitizaiton: // Need for sanitization before type is checked\n * }\n * }\n */\n\nexport const localOptions = {\n [ROWS]: {\n value: null,\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Array'\n }\n },\n [COLUMNS]: {\n value: null,\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Array'\n }\n },\n [COLOR]: {\n value: null,\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Object',\n sanitization: (config) => {\n if (typeof config === 'string') {\n return {\n field: config\n };\n }\n return config;\n }\n }\n },\n [SHAPE]: {\n value: null,\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Object',\n sanitization: (config) => {\n if (typeof config === 'string') {\n return {\n field: config\n };\n }\n return config;\n }\n }\n },\n [SIZE]: {\n value: null,\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Object',\n sanitization: (config) => {\n if (typeof config === 'string') {\n return {\n field: config\n };\n }\n return config;\n }\n }\n },\n [DETAIL]: {\n value: [],\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Array'\n }\n },\n\n [LAYERS]: {\n value: null,\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Array'\n }\n },\n [TRANSFORM]: {\n value: null,\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Object'\n }\n },\n [MOUNT]: {\n value: null,\n meta: {\n sanitization: (value) => {\n if (typeof value === 'string') {\n return selectElement(value).node();\n }\n return value;\n }\n }\n }\n};\n\nexport const canvasOptions = {\n [TITLE]: {\n value: [null, null],\n meta: {\n typeCheck: ['constructor', 'constructor'],\n typeExpected: ['Function', 'Object'],\n spreadParams: true,\n sanitization: [(title) => {\n if (typeof title === 'string') {\n const t = () => title;\n t._sanitized = true;\n return t;\n }\n return title;\n }, (titleConfig) => {\n const defConfig = mergeRecursive({}, TITLE_CONFIG);\n return mergeRecursive(defConfig, titleConfig);\n }]\n }\n },\n [SUB_TITLE]: {\n value: [null, null],\n meta: {\n typeCheck: ['constructor', 'constructor'],\n typeExpected: ['Function', 'Object'],\n spreadParams: true,\n sanitization: [(subtitle) => {\n if (typeof subtitle === 'string') {\n const sub = () => subtitle;\n sub._sanitized = true;\n return sub;\n }\n return subtitle;\n }, (subtitleConfig) => {\n const defConfig = mergeRecursive({}, SUB_TITLE_CONFIG);\n return mergeRecursive(defConfig, subtitleConfig);\n }]\n }\n }\n};\n","import { makeElement, selectElement } from 'muze-utils';\nimport { VERTICAL, HORIZONTAL, TOP, LEFT, RIGHT, BOTTOM } from '../constants';\n\n/**\n * Sets the rotation for all x axes if any axis has the rotation config set in the\n * entire view\n *\n * @param {Array} columns Column cells that contain the axes cells\n */\nconst setLabelRotationForAxes = (context) => {\n let rotation = 0;\n\n const xAxes = context.xAxes() || [];\n\n (() => {\n for (let i = 0; i < xAxes.length; i++) {\n for (let j = 0; j < xAxes[i].length; j++) {\n if (xAxes[i][j].config().labels.rotation !== 0) {\n rotation = xAxes[i][j].config().labels.rotation;\n return;\n }\n }\n }\n })();\n\n if (rotation) {\n xAxes.forEach((axes) => {\n axes.forEach((axis) => {\n axis.config({ labels: { rotation, smartTicks: false } });\n });\n });\n }\n};\n\n/**\n *\n *\n * @param {*} context\n * @param {*} mount\n * @returns\n */\nconst getSkeletons = (mount, layoutConfig, measurement) => {\n const {\n layoutArrangement,\n classPrefix\n } = layoutConfig;\n const {\n headers,\n legends\n } = layoutArrangement;\n const {\n canvasWidth,\n canvasHeight\n } = measurement;\n const container = selectElement(mount);\n const components = {};\n const mountPoint = makeElement(container, 'div', [1], `${classPrefix}-viz`)\n .style('width', `${canvasWidth}px`)\n .style('height', `${canvasHeight}px`);\n const containers = mountPoint\n .selectAll(`.${classPrefix}-container`)\n .data(headers);\n containers.exit().remove();\n const containersEnter = containers.enter().append('div');\n\n const mergedContainer = containersEnter.merge(containers)\n .attr('class', `${classPrefix}-container`)\n .style('width', `${canvasWidth}px`)\n .style('padding', `${null}px`)\n .style('margin', null)\n .each(function (type) {\n components[type] = selectElement(this).classed(`${classPrefix}-${type}-container`, true);\n });\n const innerContainer = mergedContainer\n .selectAll(`.${classPrefix}-inner-container`)\n .data((d) => {\n if (d === 'group') {\n return legends;\n } return [];\n });\n innerContainer.exit().remove();\n const innerContainerEnter = innerContainer.enter().append('div');\n\n innerContainerEnter\n .merge(innerContainer)\n .attr('class', `${classPrefix}-inner-container`)\n .style('width', 'auto')\n .style('height', 'auto')\n .each(function (layoutType) {\n components[layoutType] = selectElement(this)\n .classed(`${classPrefix}-${layoutType}-container`, true);\n });\n return components;\n};\n\n/**\n *\n *\n * @param {*} context\n * @param {*} container\n * @param {*} legendComponents\n */\nconst renderLegend = (legendConfig, container, legendComponents, measurement) => {\n const sectionComponents = [];\n const { legendSpace, headerHeight, height, width } = measurement;\n const { legend, classPrefix } = legendConfig;\n const { position } = legend;\n const legendMount = makeElement(container, 'div', [legendComponents], `${classPrefix}-inner-content`, {}, d => d);\n legendMount.classed(`${classPrefix}-legend`, true);\n const align = (position === LEFT || position === RIGHT) ? VERTICAL : HORIZONTAL;\n const legWidth = align === VERTICAL ? legendSpace.width : width;\n const legHeight = align === VERTICAL ? height - headerHeight : legendSpace.height;\n\n [container, legendMount].forEach((elem) => {\n elem.style('width', `${Math.floor(legWidth)}px`)\n .style('height', `${legHeight}px`)\n .style('float', LEFT);\n });\n\n if (align === VERTICAL) {\n let sections = -1;\n let currHeight = legHeight;\n let currWidth = 0;\n\n legendComponents.forEach((legendInfo) => {\n const leg = legendInfo.legend;\n if (leg.measurement().height > currHeight) {\n sections++;\n currWidth = 0;\n currHeight = legHeight;\n } else {\n sections < 0 && sections++;\n }\n sectionComponents[sections] = sectionComponents[sections] || [];\n currHeight -= Math.min(leg.measurement().height, currHeight);\n currWidth = Math.max(Math.min(leg.measurement().width, leg.measurement().maxWidth), currWidth);\n sectionComponents[sections].push({\n legend: leg,\n legendHeight: legHeight,\n legendWidth: currWidth\n });\n });\n\n const mount = makeElement(legendMount, ['div'], sectionComponents, `${classPrefix}-legend-section`)\n .each((d, i) => selectElement(this).classed(`${classPrefix}-legend-section-${i}`, true))\n .classed(`${classPrefix}-legend-vertical-section`, true)\n .style('width', d => `${d[0].legendWidth}px`);\n makeElement(mount, ['div'], d => d, `${classPrefix}-legend-components`, {}, d => d.legend.id())\n .each(function (d) {\n d.legend.mount(this);\n })\n .style('width', d => `${d.legendWidth}px`);\n } else {\n const mount = makeElement(legendMount, 'div', [1], `${classPrefix}-legend-section`)\n .classed(`${classPrefix}-legend-horizontal-section`, true)\n .classed(`${classPrefix}-legend-section-${0}`, true)\n .style('width', `${legWidth}px`);\n\n makeElement(mount, 'div', legendComponents, `${classPrefix}-legend-components`, {}, d => d.legend.id())\n .each(function (d) { d.legend.mount(this); })\n .style('width', d => `${d.legend.measurement().width}px`);\n }\n};\n\n/**\n *\n *\n * @param {*} context\n * @param {*} container\n * @param {*} type\n * @param {*} headers\n */\nconst renderHeader = (layoutConfig, container, type, headers) => {\n const headerCell = headers[`${type}Cell`];\n const config = layoutConfig[`${type}`];\n const { position, align, padding } = config;\n const sel = container\n .selectAll(`.${layoutConfig.classPrefix}-inner-container`)\n .data([type]);\n sel.exit().remove();\n const selEnter = sel.enter().append('div');\n\n const cont = selEnter.merge(sel);\n cont.classed(`${layoutConfig.classPrefix}-inner-container`, true);\n\n headerCell && headerCell.render(cont.node());\n\n cont.selectAll('div').classed(`${layoutConfig.classPrefix}-inner-content`, true);\n cont.style('width', `${100}%`);\n\n if (config && headerCell) {\n cont.style('float', LEFT)\n .style('text-align', align)\n .style(`padding-${position === TOP ? BOTTOM : TOP}`, `${padding}px`);\n }\n};\n\n/**\n *\n *\n * @param {*} context\n * @param {*} shifter\n */\nconst shiftHeaders = (config, shifter, measurement, mount) => {\n const { classPrefix, title, subtitle, legend } = config;\n const { legendSpace } = measurement;\n const { position } = legend;\n\n shifter += position === LEFT ? legendSpace.width : 0;\n title && selectElement(mount).select(`.${classPrefix}-title-container`)\n .style('width', title.align === LEFT ? `calc(100% - ${shifter}px` : '100%')\n .style('margin-left', title.align === LEFT ? `${shifter}px` : 0);\n subtitle && selectElement(mount).select(`.${classPrefix}-subtitle-container`)\n .style('width', subtitle.align === LEFT ? `calc(100% - ${shifter}px` : '100%')\n .style('margin-left', subtitle.align === LEFT ? `${shifter}px` : 0);\n\n selectElement(mount).select(`.${classPrefix}-legend-horizontal-section`)\n .style('margin-left', `${shifter}px`)\n .style('width', `${legendSpace.width - shifter}px`)\n .selectAll(`.${classPrefix}-legend-body, .${classPrefix}-legend-title`)\n .style('max-width', `${legendSpace.width - shifter}px`);\n selectElement(mount).select(`.${classPrefix}-legend-vertical-section`)\n .style('margin-left', null)\n .selectAll(`.${classPrefix}-legend-body, .${classPrefix}-legend-title`)\n .style('max-width', null);\n};\n\n/**\n *\n *\n * @param {*} mountPoint\n * @param {*} measurement\n * @param {*} classPrefix\n * @returns\n */\nconst prepareGridContainer = (mountPoint, measurement, classPrefix, alias) => {\n if (!mountPoint) {\n return this;\n }\n\n const {\n height,\n width\n } = measurement;\n // Create container for the layout\n\n const sel = selectElement(mountPoint)\n .selectAll(`.${classPrefix}-inner-content`)\n .data(['layout'], d => d);\n sel.exit().remove();\n const selEnter = sel.enter().append('div');\n\n const container = selEnter.merge(sel)\n .attr('class', `${classPrefix}-inner-content`)\n .classed(`${classPrefix}-grid-layout`, true)\n .attr('id', `${classPrefix}-grid-layout-${alias}`)\n .style('height', `${height}px`)\n .style('padding', null)\n .style('width', `${Math.ceil(width)}px`);\n // Mount for matrices\n const innerSel = container.selectAll(`.${classPrefix}-layout-grid-container`)\n .data(['layout2']);\n innerSel.exit().remove();\n const innerSelEnter = innerSel.enter().append('div');\n\n const mount = innerSelEnter.merge(innerSel);\n mount.classed(`${classPrefix}-layout-grid-container`, true)\n .attr('id', `${classPrefix}-layout-grid-container-${alias}`)\n .style('height', `${height}px`)\n .style('width', `${Math.ceil(width)}px`);\n\n return {\n mount,\n container\n };\n};\n\n/**\n *\n *\n * @param {*} context\n * @param {*} components\n * @param {*} layoutConfig\n * @param {*} measurement\n */\nexport const renderComponents = (context, components, layoutConfig, measurement) => {\n const mountPoint = context.mount();\n const {\n headers,\n legends\n } = components;\n const {\n classPrefix\n } = layoutConfig;\n const {\n title,\n legend,\n subtitle,\n layout\n } = getSkeletons(mountPoint, layoutConfig, measurement);\n const {\n mount\n } = prepareGridContainer(layout.node(), measurement, classPrefix, context.alias());\n const padding = context.layout().getViewInformation().layoutDimensions.viewWidth[0];\n measurement.padding = padding;\n setLabelRotationForAxes(context);\n\n // Render layout\n context.layout().renderGrid(mount);\n context.once('layer.drawn').then(() => {\n renderHeader(layoutConfig, title, 'title', headers);\n renderHeader(layoutConfig, subtitle, 'subtitle', headers);\n renderLegend(layoutConfig, legend, legends, measurement);\n shiftHeaders(layoutConfig, padding, measurement, mountPoint);\n });\n context.composition().visualGroup.matrixInstance().value.each((el) => {\n el.valueOf().parentContainer(layout.node());\n });\n};\n","import { isEqual } from 'muze-utils';\nimport { ROWS, COLUMNS, COLOR, SHAPE, SIZE, MOUNT, DETAIL, DATA, CONFIG } from '../constants';\nimport { canvasOptions } from './local-options';\n\n/**\n * Instantiate high level components. Canvas knows what all high level component it has.\n * @nice-to-have dynamic high level components.\n * - Is it even required ?\n * - Reactive to source (canvas) streaming ?\n * @param {*} context Canvas instance\n * @return {Object.fArray>} Arrays of Title, visualGroup, Legend\n */\nexport const initCanvas = (context) => {\n const reg = context._registry.components;\n\n return [new reg.VisualGroup(context._registry, context.dependencies())];\n};\n\n/**\n *\n *\n * @memberof Canvas\n */\nexport const dispatchProps = (context) => {\n const lifeCycleManager = context.dependencies().lifeCycleManager;\n lifeCycleManager.notify({ client: context, action: 'beforeupdate' });\n const visualGroup = context.composition().visualGroup;\n\n visualGroup.lockModel();\n const allOptions = context._allOptions;\n for (const key in allOptions) {\n const value = context[key]();\n if (value !== null) {\n visualGroup[key] && visualGroup[key](value);\n }\n }\n visualGroup.unlockModel();\n\n context._cachedProps = {};\n lifeCycleManager.notify({ client: context, action: 'initialized' });\n lifeCycleManager.notify({ client: context, action: 'updated' });\n};\n\n/**\n *\n *\n */\nexport const setupChangeListener = (context) => {\n const store = context._store;\n\n store.registerImmediateListener(MOUNT, () => {\n const allOptions = Object.keys(context._allOptions);\n const props = [...allOptions, ...Object.keys(canvasOptions)];\n let equalityChecker = () => false;\n store.registerChangeListener(props, (...params) => {\n const updateProps = props.every((option, i) => {\n switch (option) {\n case ROWS:\n case COLUMNS:\n case DETAIL:\n equalityChecker = isEqual('Array');\n break;\n\n case SHAPE:\n case SIZE:\n case COLOR:\n case DATA:\n case CONFIG:\n equalityChecker = isEqual('Object');\n break;\n default:\n equalityChecker = () => true;\n break;\n }\n const oldVal = params[i][0];\n const newVal = params[i][1];\n\n return equalityChecker(oldVal, newVal);\n });\n // inform attached board to rerender\n !updateProps && dispatchProps(context);\n context.render();\n }, true);\n });\n};\n\nexport const applyInteractionPolicy = (policies, firebolt) => {\n const canvas = firebolt.context;\n const visualGroup = canvas.composition().visualGroup;\n const valueMatrix = visualGroup.composition().matrices.value;\n policies.forEach(policy => policy(valueMatrix, firebolt));\n};\n","import {\n getDataModelFromIdentifiers,\n FieldType,\n mergeRecursive\n} from 'muze-utils';\n\nimport { applyInteractionPolicy } from './helper';\n\nconst defaultInteractionPolicy = (valueMatrix, firebolt) => {\n const isMeasure = field => field.type() === FieldType.MEASURE;\n const canvas = firebolt.context;\n const visualGroup = canvas.composition().visualGroup;\n const xFields = [].concat(...visualGroup.getFieldsFromChannel('x'));\n const yFields = [].concat(...visualGroup.getFieldsFromChannel('y'));\n const colDim = xFields.every(field => field.type() === FieldType.DIMENSION);\n const fieldInf = visualGroup.resolver().getAllFields();\n const rowFacets = fieldInf.rowFacets;\n const colFacets = fieldInf.colFacets;\n valueMatrix.each((cell) => {\n const unitFireBolt = cell.valueOf().firebolt();\n\n if (!(xFields.every(isMeasure) && yFields.every(isMeasure))) {\n const facetFields = cell.valueOf().facetByFields()[0];\n const unitColFacets = facetFields.filter(d => colFacets.findIndex(v => v.equals(d)) !== -1);\n const unitRowFacets = facetFields.filter(d => rowFacets.findIndex(v => v.equals(d)) !== -1);\n let propFields;\n if (colDim) {\n propFields = unitColFacets.map(d => `${d}`);\n } else {\n propFields = unitRowFacets.map(d => `${d}`);\n }\n\n unitFireBolt.propagateWith('*', propFields, true);\n }\n });\n};\n\nconst defaultCrossInteractionPolicy = {\n behaviours: {\n '*': (propagationPayload, context) => {\n const propagationCanvasAlias = propagationPayload.sourceCanvas;\n const canvasAlias = context.parentAlias();\n return propagationCanvasAlias ? canvasAlias === propagationCanvasAlias : true;\n }\n },\n sideEffects: {\n tooltip: (propagationPayload, context) => {\n const propagationUnit = propagationPayload.sourceUnit;\n const propagationCanvas = propagationPayload.sourceCanvas;\n const unitId = context.id();\n const canvasAlias = context.parentAlias();\n if (propagationCanvas) {\n return propagationCanvas !== canvasAlias ? true : unitId === propagationUnit;\n }\n return true;\n }\n }\n};\n\nexport default class GroupFireBolt {\n constructor (context) {\n this.context = context;\n this._interactionPolicy = this.constructor.defaultInteractionPolicy();\n this._crossInteractionPolicy = this.constructor.defaultCrossInteractionPolicy();\n this.context.once('canvas.updated').then(() => {\n applyInteractionPolicy([this._interactionPolicy], this);\n const crossInteractionPolicy = this._crossInteractionPolicy;\n const behaviours = crossInteractionPolicy.behaviours;\n const sideEffects = crossInteractionPolicy.sideEffects;\n const visualGroup = context.composition().visualGroup;\n const valueMatrix = visualGroup.composition().matrices.value;\n valueMatrix.each((cell) => {\n const unitFireBolt = cell.valueOf().firebolt();\n for (const key in behaviours) {\n unitFireBolt.changeBehaviourStateOnPropagation(key, behaviours[key]);\n }\n for (const key in sideEffects) {\n unitFireBolt.changeSideEffectStateOnPropagation(key, sideEffects[key]);\n }\n });\n });\n }\n\n static defaultInteractionPolicy () {\n return defaultInteractionPolicy;\n }\n\n static defaultCrossInteractionPolicy () {\n return defaultCrossInteractionPolicy;\n }\n\n interactionPolicy (...policy) {\n if (policy.length) {\n this._interactionPolicy = policy[0] || this.constructor.defaultInteractionPolicy();\n return this;\n }\n return this._interactionPolicy;\n }\n\n crossInteractionPolicy (...policy) {\n if (policy.length) {\n this._crossInteractionPolicy = mergeRecursive(mergeRecursive({},\n this.constructor.defaultCrossInteractionPolicy()), policy[0] || {});\n return this;\n }\n return this._crossInteractionPolicy;\n }\n\n dispatchBehaviour (behaviour, payload) {\n const propPayload = Object.assign(payload);\n const criteria = propPayload.criteria;\n const data = this.context.data();\n\n propPayload.action = behaviour;\n const model = getDataModelFromIdentifiers(data, criteria);\n data.propagate(model, propPayload, {\n sourceId: this.context.alias()\n });\n return this;\n }\n\n}\n","import { GridLayout } from '@chartshq/layout';\nimport { transactor, Store, getUniqueId } from 'muze-utils';\nimport { RETINAL } from '../constants';\nimport TransactionSupport from '../transaction-support';\nimport { getRenderDetails, prepareLayout } from './layout-maker';\nimport { localOptions, canvasOptions } from './local-options';\nimport { renderComponents } from './renderer';\nimport GroupFireBolt from './firebolt';\nimport options from '../options';\nimport { initCanvas, setupChangeListener } from './helper';\n\n/**\n * This is the primary class which manages highlevel components like visualGroup, Titles, Legend, Extensions\n * (in future). Global level Muze functionality is subset this. Every time user works with an instance of\n * canvas in dom which provides instance level settings.\n *\n */\nexport default class Canvas extends TransactionSupport {\n\n /**\n * Creates reactive property accessors.\n * - data\n * - height\n * - width\n * - config\n * This configs are retrieved from options.\n */\n constructor (globalDependencies) {\n super();\n\n this._allOptions = Object.assign({}, options, localOptions);\n this._registry = {};\n this._composition = {};\n this._cachedProps = {};\n this._alias = null;\n this._renderedResolve = null;\n this._renderedPromise = new Promise((resolve) => {\n this._renderedResolve = resolve;\n });\n this._composition.layout = new GridLayout();\n this._store = new Store({});\n\n // Setters and getters will be mounted on this. The object will be mutated.\n const [, store] = transactor(this, options, this._store.model);\n transactor(this, localOptions, store);\n transactor(this, canvasOptions, store);\n this.dependencies(Object.assign({}, globalDependencies, this._dependencies));\n this.firebolt(new GroupFireBolt(this));\n this.alias(`canvas-${getUniqueId()}`);\n this.title('', {});\n this.subtitle('', {});\n this.legend({});\n this.color({});\n this.shape({});\n this.size({});\n setupChangeListener(this);\n }\n\n /**\n *\n *\n * @readonly\n * @memberof Canvas\n */\n layout (...params) {\n if (params.length) {\n return this;\n }\n return this.composition().layout;\n }\n\n /**\n *\n *\n * @readonly\n * @memberof Canvas\n */\n composition (...params) {\n if (params.length) {\n return this;\n }\n return this._composition;\n }\n\n done () {\n return this._renderedPromise;\n }\n\n /**\n *\n *\n * @param {*} params\n * @returns\n * @memberof Canvas\n */\n alias (...params) {\n if (params.length) {\n const visualGroup = this.composition().visualGroup;\n this._alias = params[0];\n visualGroup && visualGroup.alias(this.alias());\n return this;\n }\n return this._alias;\n }\n\n /**\n * Creates an instance initiated with given settings.\n *\n * @param {Object} initialSettings Initial settings to be populated in the model\n * @param {Object} regEntry newly created instance with the initial settings\n * @param {Object} globalDependencies dependencies which will be created only once in the page\n *\n * @return {Object} newly created instance with the initial settings\n */\n static withSettings (initialSettings, regEntry, globalDependencies) {\n const instance = new Canvas(globalDependencies);\n\n for (const key in initialSettings) {\n instance[key](initialSettings[key]);\n }\n // set registry for instance\n instance.registry(regEntry);\n return instance;\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof Canvas\n */\n static formalName () {\n return 'canvas';\n }\n\n /**\n *\n *\n * @readonly\n * @memberof Canvas\n */\n firebolt (...firebolt) {\n if (firebolt.length) {\n this._firebolt = firebolt[0];\n return this;\n }\n return this._firebolt;\n }\n\n /**\n * Registry peoperty accessor\n *\n * @param {Object} reg plain old javascript object keyvalue pairs. Key containing module name and value contains\n * module definition class. The reg object has to be flat object of level 1.\n */\n registry (...params) {\n if (params.length) {\n const components = Object.assign({}, params[0].components);\n const componentSubRegistry = Object.assign({}, params[0].componentSubRegistry);\n\n this._registry = { components, componentSubRegistry };\n const initedComponents = initCanvas(this);\n // @todo is it okay to continue this tight behaviour? If not use a resolver to resolve diff component type.\n this._composition.visualGroup = initedComponents[0];\n\n this.composition().visualGroup.alias(this.alias());\n return this;\n }\n return this._registry;\n }\n\n /*\n * Prepare dependencies for top level elements\n */\n dependencies (...param) {\n if (param.length) {\n this._dependencies = param[0];\n return this;\n }\n // @todo prepare dependencies here.\n return this._dependencies;\n }\n\n /**\n *\n *\n * @param {*} lifeCycles\n * @returns\n * @memberof Canvas\n */\n lifeCycle (lifeCycles) {\n const lifeCycleManager = this.dependencies().lifeCycleManager;\n if (lifeCycles) {\n lifeCycleManager.register(lifeCycles);\n return this;\n }\n return lifeCycleManager;\n }\n\n /**\n *\n *\n * @readonly\n * @memberof Canvas\n */\n legend (...params) {\n if (params.length) {\n return this;\n }\n return this.composition().legend;\n }\n\n /**\n *\n *\n * @param {*} eventName\n * @returns\n * @memberof Canvas\n */\n once (eventName) {\n const lifeCycleManager = this.dependencies().lifeCycleManager;\n return lifeCycleManager.retrieve(eventName);\n }\n\n /**\n * Internal function to trigger render, this method is cognizant of all the properties of the core modules and\n * establish a passive reactivity. Passive reactivity is not always a bad thing :)\n * @internal\n */\n render () {\n const mount = this.mount();\n const visGroup = this.composition().visualGroup;\n const lifeCycleManager = this.dependencies().lifeCycleManager;\n // Get render details including arrangement and measurement\n const { components, layoutConfig, measurement } = getRenderDetails(this, mount);\n\n lifeCycleManager.notify({ client: this, action: 'beforedraw' });\n // Prepare the layout by triggering the matrix calculation\n prepareLayout(this.layout(), components, layoutConfig, measurement);\n // Render each component\n renderComponents(this, components, layoutConfig, measurement);\n // Update life cycle\n lifeCycleManager.notify({ client: this, action: 'drawn' });\n const promises = [];\n visGroup.matrixInstance().value.each((el) => {\n promises.push(el.valueOf().done());\n });\n Promise.all(promises).then(() => {\n this._renderedResolve();\n });\n }\n\n /**\n *\n *\n * @returns\n * @memberof Canvas\n */\n xAxes () {\n return this.composition().visualGroup.getAxes('x');\n }\n\n /**\n *\n *\n * @returns\n * @memberof Canvas\n */\n yAxes () {\n return this.composition().visualGroup.getAxes('y');\n }\n\n /**\n *\n *\n * @returns\n * @memberof Canvas\n */\n getRetinalAxes () {\n const visualGroup = this.composition().visualGroup;\n return visualGroup.getAxes(RETINAL);\n }\n}\n","import { cellRegistry, SimpleCell } from '@chartshq/visual-cell';\nimport { VisualUnit } from '@chartshq/visual-unit';\nimport { layerRegistry } from '@chartshq/visual-layer';\nimport { SimpleGroup, VisualGroup } from '@chartshq/visual-group';\n\nexport const COMPONENTS = {\n VisualGroup,\n VisualUnit\n};\nexport const SUBREGISTRIES = {\n cellRegistry,\n layerRegistry\n};\nexport const INTERFACES = {\n SimpleGroup,\n SimpleCell\n};\n\n","import { DEFAULT_LAYERS } from './defaults';\n\nexport default () => {\n const reg = DEFAULT_LAYERS;\n const regObj = {\n set: (key, def) => {\n reg[key] = def;\n return regObj;\n },\n get: () => reg\n };\n return regObj;\n};\n","import {\n transactor,\n Smartlabel,\n enableChainedTransaction,\n LifeCycleManager,\n DataModel,\n makeElement,\n getClientPoint,\n selectElement,\n getEvent,\n require,\n DateTimeFormatter\n} from 'muze-utils';\n\nimport {\n SurrogateSideEffect,\n SpawnableSideEffect,\n sideEffects,\n PersistentBehaviour,\n GenericBehaviour,\n VolatileBehaviour,\n behaviouralActions,\n GenericSideEffect\n} from '@chartshq/muze-firebolt';\nimport { layerFactory } from '@chartshq/visual-layer';\nimport pkg from '../package.json';\nimport * as operators from './operators';\nimport { actionModel as ActionModel } from './action-model';\nimport options from './options';\nimport { Canvas } from './canvas';\nimport { COMPONENTS, SUBREGISTRIES } from './default-registry';\nimport './muze.scss';\n\n// Cache singleton instances which should be included only once in a page\nconst globalCache = {};\nconst defaultRegistry = COMPONENTS;\n\nconst overrideRegistryDefinitions = (overrideRegistry, registry) => {\n for (const prop in overrideRegistry) {\n registry.set(prop, overrideRegistry[prop]);\n }\n};\n\n/**\n * Entry point to renderer. Initializes an environment with settings and registries for canvas. This is a simple wrapper\n * over {@link Canvas} which enables common configuration passing to multiple such canvases.\n *\n * Everytime `muze()` is called it creates an environment. These environment supports subset of APIs of Canvas. If\n * common configuration is used to render multiple canvases then it can be set directly in the env. Like if data is\n * common across all the visulization then its better to set the data in env. When a canvas is created it receives all\n * those configuration from env.\n *\n * ```\n * // Creates an environment\n * const env = muze()\n * // Set data property in environment, so that all the canvas created from the same environment gets this data\n * // automatically\n * env.data(dm);\n * // Creates canvas, by default env pushes data to canvas instance\n * const canvas = env.canvas();\n * ```\n *\n * If a property is set on both environment and canvas instance, property set on canvas instance gets more priority.\n *\n * @public\n * @module muze\n * @namespace Muze\n *\n * @return {Env} Instance of an environment\n */\nconst muze = () => {\n // Setters and getters will be mounted on this. Object will be mutated.\n const [env, globalStore] = transactor({}, options);\n const components = Object.assign({}, COMPONENTS);\n const componentSubRegistryDef = Object.assign(SUBREGISTRIES);\n const componentSubRegistry = {};\n\n for (const prop in componentSubRegistryDef) {\n componentSubRegistry[prop] = componentSubRegistryDef[prop]();\n }\n\n // Apart form the setter getter, an instance method is injected to create real renderer instances\n env.canvas = () => {\n // Create a canvas instance with this settings\n const settings = globalStore.serialize();\n const canvas = Canvas.withSettings(settings, { /* registry */\n components,\n componentSubRegistry\n }, env.globalDependencies());\n\n // Whenever settings is changed canvas is updated\n enableChainedTransaction(globalStore, canvas, Object.keys(settings));\n\n return canvas;\n };\n\n // Global dependencies for for compositions. Only one copy of the same should be in the page\n env.globalDependencies = () => {\n if (!globalCache.smartlabel) {\n globalCache.smartlabel = new Smartlabel(1, 'body');\n }\n return {\n smartlabel: globalCache.smartlabel,\n lifeCycleManager: new LifeCycleManager()\n };\n };\n\n // Retrieves global settings. This getter is readonly so that user can't change this as change should happen\n // only from setter to avoid unwanted sync issues.\n env.settings = () => globalStore.serialize();\n\n env.registry = (...overrideRegistry) => {\n // Selectively copy the properties from COMPONENTS\n if (overrideRegistry.length) {\n for (const prop in overrideRegistry) {\n if (prop in defaultRegistry) {\n components[prop] = overrideRegistry[prop];\n }\n }\n return env;\n }\n return components;\n };\n\n env.cellRegistry = (...overrideRegistry) => {\n const cellRegistry = componentSubRegistry.cellRegistry;\n if (overrideRegistry.length) {\n overrideRegistryDefinitions(overrideRegistry[0], cellRegistry);\n return env;\n }\n return cellRegistry.get();\n };\n\n env.layerRegistry = (...overrideRegistry) => {\n const layerRegistry = componentSubRegistry.layerRegistry;\n if (overrideRegistry.length) {\n overrideRegistryDefinitions(overrideRegistry[0], layerRegistry);\n return env;\n }\n return layerRegistry.get();\n };\n\n return env;\n};\n\nconst SideEffects = {\n sideEffects,\n standards: {\n SurrogateSideEffect,\n SpawnableSideEffect,\n GenericSideEffect\n }\n};\n\nconst Behaviours = {\n behaviouralActions,\n standards: {\n GenericBehaviour,\n PersistentBehaviour,\n VolatileBehaviour\n }\n};\n\nmuze.DataModel = DataModel;\nmuze.version = pkg.version;\nmuze.SideEffects = SideEffects;\nmuze.ActionModel = ActionModel;\nmuze.layerFactory = layerFactory;\nmuze.Operators = operators;\nmuze.Behaviours = Behaviours;\nmuze.utils = {\n getClientPoint,\n getEvent,\n makeElement,\n selectElement,\n DateTimeFormatter,\n require\n};\n\nexport default muze;\n"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack://muze/webpack/universalModuleDefinition","webpack://muze/webpack/bootstrap","webpack://muze/../Documents/Muze/datamodel/dist/datamodel.js","webpack://muze/./packages/muze-utils/node_modules/hyperdis/dist/hyperdis.js","webpack://muze/(webpack)/buildin/module.js","webpack://muze/./packages/muze-utils/node_modules/fusioncharts-smartlabel/lib/SmartlabelManager.js","webpack://muze/./packages/muze-utils/node_modules/fusioncharts-smartlabel/lib/lib.js","webpack://muze/./packages/muze/src/index.js","webpack://muze/./packages/muze-utils/node_modules/fusioncharts-smartlabel/lib/container-manager.js","webpack://muze/./packages/muze-utils/node_modules/d3-array/src/ascending.js","webpack://muze/./packages/muze-utils/node_modules/d3-array/src/bisector.js","webpack://muze/./packages/muze-utils/node_modules/d3-array/src/bisect.js","webpack://muze/./packages/muze-utils/node_modules/d3-array/src/cross.js","webpack://muze/./packages/muze-utils/node_modules/d3-array/src/number.js","webpack://muze/./packages/muze-utils/node_modules/d3-array/src/array.js","webpack://muze/./packages/muze-utils/node_modules/d3-array/src/range.js","webpack://muze/./packages/muze-utils/node_modules/d3-array/src/ticks.js","webpack://muze/./packages/muze-utils/node_modules/d3-array/src/threshold/sturges.js","webpack://muze/./packages/muze-utils/node_modules/d3-array/src/quantile.js","webpack://muze/./packages/muze-utils/node_modules/d3-collection/src/map.js","webpack://muze/./packages/muze-utils/node_modules/d3-collection/src/nest.js","webpack://muze/./packages/muze-utils/node_modules/d3-collection/src/set.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/array.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/ordinal.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/band.js","webpack://muze/./packages/muze-utils/node_modules/d3-color/src/define.js","webpack://muze/./packages/muze-utils/node_modules/d3-color/src/color.js","webpack://muze/./packages/muze-utils/node_modules/d3-color/src/math.js","webpack://muze/./packages/muze-utils/node_modules/d3-color/src/lab.js","webpack://muze/./packages/muze-utils/node_modules/d3-color/src/cubehelix.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/basis.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/constant.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/color.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/rgb.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/number.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/basisClosed.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/string.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/transform/parse.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/value.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/date.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/array.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/object.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/round.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/transform/decompose.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/transform/index.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/zoom.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/hsl.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/hcl.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/cubehelix.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/piecewise.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/quantize.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/constant.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/number.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/continuous.js","webpack://muze/./packages/muze-utils/node_modules/d3-format/src/formatDecimal.js","webpack://muze/./packages/muze-utils/node_modules/d3-format/src/exponent.js","webpack://muze/./packages/muze-utils/node_modules/d3-format/src/formatSpecifier.js","webpack://muze/./packages/muze-utils/node_modules/d3-format/src/formatTrim.js","webpack://muze/./packages/muze-utils/node_modules/d3-format/src/formatPrefixAuto.js","webpack://muze/./packages/muze-utils/node_modules/d3-format/src/defaultLocale.js","webpack://muze/./packages/muze-utils/node_modules/d3-format/src/formatRounded.js","webpack://muze/./packages/muze-utils/node_modules/d3-format/src/formatTypes.js","webpack://muze/./packages/muze-utils/node_modules/d3-format/src/identity.js","webpack://muze/./packages/muze-utils/node_modules/d3-format/src/locale.js","webpack://muze/./packages/muze-utils/node_modules/d3-format/src/formatGroup.js","webpack://muze/./packages/muze-utils/node_modules/d3-format/src/formatNumerals.js","webpack://muze/./packages/muze-utils/node_modules/d3-format/src/precisionFixed.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/tickFormat.js","webpack://muze/./packages/muze-utils/node_modules/d3-format/src/precisionPrefix.js","webpack://muze/./packages/muze-utils/node_modules/d3-format/src/precisionRound.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/linear.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/identity.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/nice.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/log.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/pow.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/quantile.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/quantize.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/threshold.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/interval.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/millisecond.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/duration.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/second.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/minute.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/hour.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/day.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/week.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/month.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/year.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/utcMinute.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/utcHour.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/utcDay.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/utcWeek.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/utcMonth.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/utcYear.js","webpack://muze/./packages/muze-utils/node_modules/d3-time-format/src/locale.js","webpack://muze/./packages/muze-utils/node_modules/d3-time-format/src/defaultLocale.js","webpack://muze/./packages/muze-utils/node_modules/d3-time-format/src/isoFormat.js","webpack://muze/./packages/muze-utils/node_modules/d3-time-format/src/isoParse.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/time.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/colors.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/category10.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/category20b.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/category20.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/category20c.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/cubehelix.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/rainbow.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/viridis.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/sequential.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/colors.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/categorical/Accent.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/categorical/category10.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/categorical/Dark2.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/categorical/Paired.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/categorical/Pastel1.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/categorical/Pastel2.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/categorical/Set1.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/categorical/Set2.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/categorical/Set3.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/ramp.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/diverging/BrBG.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/diverging/PRGn.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/diverging/PiYG.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/diverging/PuOr.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/diverging/RdBu.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/diverging/RdGy.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/diverging/RdYlBu.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/diverging/RdYlGn.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/diverging/Spectral.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/BuGn.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/BuPu.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/GnBu.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/OrRd.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/PuBuGn.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/PuBu.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/PuRd.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/RdPu.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/YlGnBu.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/YlGn.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/YlOrBr.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/YlOrRd.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-single/Blues.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-single/Greens.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-single/Greys.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-single/Purples.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-single/Reds.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-single/Oranges.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/cubehelix.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/rainbow.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/sinebow.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/viridis.js","webpack://muze/./packages/muze-utils/src/enums/reserved-fields.js","webpack://muze/./packages/muze-utils/src/enums/common-props.js","webpack://muze/./packages/muze-utils/node_modules/d3-axis/src/array.js","webpack://muze/./packages/muze-utils/node_modules/d3-axis/src/identity.js","webpack://muze/./packages/muze-utils/node_modules/d3-axis/src/axis.js","webpack://muze/./packages/muze-utils/node_modules/d3-path/src/path.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/constant.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/math.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/arc.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/curve/linear.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/point.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/line.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/area.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/descending.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/identity.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/curve/radial.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/lineRadial.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/array.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/symbol/circle.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/symbol/cross.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/symbol/diamond.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/symbol/star.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/symbol/square.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/symbol/triangle.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/symbol/wye.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/noop.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/curve/basis.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/curve/basisClosed.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/curve/basisOpen.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/curve/bundle.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/curve/cardinal.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/curve/cardinalClosed.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/curve/cardinalOpen.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/curve/catmullRom.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/curve/catmullRomClosed.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/curve/catmullRomOpen.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/curve/linearClosed.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/curve/monotone.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/curve/natural.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/curve/step.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/offset/none.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/order/none.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/stack.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/order/ascending.js","webpack://muze/./packages/muze-utils/node_modules/d3-ease/src/cubic.js","webpack://muze/./packages/muze-utils/node_modules/d3-ease/src/poly.js","webpack://muze/./packages/muze-utils/node_modules/d3-ease/src/sin.js","webpack://muze/./packages/muze-utils/node_modules/d3-ease/src/bounce.js","webpack://muze/./packages/muze-utils/node_modules/d3-ease/src/back.js","webpack://muze/./packages/muze-utils/node_modules/d3-ease/src/elastic.js","webpack://muze/./packages/muze-utils/node_modules/d3-voronoi/src/constant.js","webpack://muze/./packages/muze-utils/node_modules/d3-voronoi/src/point.js","webpack://muze/./packages/muze-utils/node_modules/d3-voronoi/src/RedBlackTree.js","webpack://muze/./packages/muze-utils/node_modules/d3-voronoi/src/Edge.js","webpack://muze/./packages/muze-utils/node_modules/d3-voronoi/src/Cell.js","webpack://muze/./packages/muze-utils/node_modules/d3-voronoi/src/Circle.js","webpack://muze/./packages/muze-utils/node_modules/d3-voronoi/src/Beach.js","webpack://muze/./packages/muze-utils/node_modules/d3-voronoi/src/Diagram.js","webpack://muze/./packages/muze-utils/node_modules/d3-voronoi/src/voronoi.js","webpack://muze/./packages/muze-utils/src/common-utils.js","webpack://muze/./packages/muze-utils/node_modules/d3-ease/src/linear.js","webpack://muze/./packages/muze-utils/node_modules/d3-ease/src/circle.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/symbol.js","webpack://muze/./packages/muze-utils/src/enums/stack-config.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/order/descending.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/offset/diverging.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/offset/expand.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/offset/wiggle.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/pie.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/namespaces.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/namespace.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/creator.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selector.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selectorAll.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/matcher.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/sparse.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/enter.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/constant.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/data.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/sort.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/attr.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/window.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/style.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/classed.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/text.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/html.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/raise.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/lower.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/insert.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/remove.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/clone.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/on.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/dispatch.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/index.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/select.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/selectAll.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/filter.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/exit.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/merge.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/order.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/call.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/nodes.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/node.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/size.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/empty.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/each.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/property.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/append.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/datum.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/select.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/local.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/sourceEvent.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/point.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/mouse.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/touch.js","webpack://muze/./packages/muze-utils/node_modules/d3-dispatch/src/dispatch.js","webpack://muze/./packages/muze-utils/node_modules/d3-drag/src/noevent.js","webpack://muze/./packages/muze-utils/node_modules/d3-drag/src/nodrag.js","webpack://muze/./packages/muze-utils/node_modules/d3-drag/src/constant.js","webpack://muze/./packages/muze-utils/node_modules/d3-drag/src/event.js","webpack://muze/./packages/muze-utils/node_modules/d3-drag/src/drag.js","webpack://muze/./packages/muze-utils/node_modules/d3-timer/src/timer.js","webpack://muze/./packages/muze-utils/node_modules/d3-timer/src/timeout.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/schedule.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/tween.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/interpolate.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/remove.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/selection.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/text.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/index.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/select.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/selectAll.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/filter.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/merge.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/transition.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/on.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/attr.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/attrTween.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/style.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/styleTween.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/delay.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/duration.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/ease.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/selection/transition.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/selection/index.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/selection/interrupt.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/interrupt.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/active.js","webpack://muze/./packages/muze-utils/src/renderer-utils.js","webpack://muze/./packages/muze-utils/src/DataSystem/selection.js","webpack://muze/./packages/muze-utils/src/DataSystem/data-object.js","webpack://muze/./packages/muze-utils/src/lifecycle-manager/event-list.js","webpack://muze/./packages/muze-utils/src/lifecycle-manager/lifecycle-manager.js","webpack://muze/./packages/muze-utils/src/lifecycle-manager/index.js","webpack://muze/./packages/muze-firebolt/src/enums/actions.js","webpack://muze/./packages/muze-firebolt/src/enums/selection.js","webpack://muze/./packages/muze-firebolt/src/selection-set/index.js","webpack://muze/./packages/muze-firebolt/src/helper/index.js","webpack://muze/./packages/muze-firebolt/src/firebolt.js","webpack://muze/./packages/muze-firebolt/src/actions/behavioural/generic.js","webpack://muze/./packages/muze-firebolt/src/actions/behavioural/volatile.js","webpack://muze/./packages/muze-firebolt/src/enums/behaviours.js","webpack://muze/./packages/muze-firebolt/src/actions/behavioural/highlight.js","webpack://muze/./packages/muze-firebolt/src/actions/behavioural/brush.js","webpack://muze/./packages/muze-firebolt/src/actions/behavioural/filter.js","webpack://muze/./packages/muze-firebolt/src/actions/behavioural/persistent.js","webpack://muze/./packages/muze-firebolt/src/actions/behavioural/select.js","webpack://muze/./packages/muze-firebolt/src/actions/physical/helpers/drag-action-config.js","webpack://muze/./packages/muze-firebolt/src/actions/physical/helpers/drag-event.js","webpack://muze/./packages/muze-firebolt/src/actions/physical/hover.js","webpack://muze/./packages/muze-firebolt/src/enums/constants.js","webpack://muze/./packages/muze-firebolt/src/actions/physical/helpers/index.js","webpack://muze/./packages/muze-firebolt/src/actions/physical/click.js","webpack://muze/./packages/muze-firebolt/src/actions/physical/index.js","webpack://muze/./packages/muze-firebolt/src/actions/physical/drag.js","webpack://muze/./packages/muze-firebolt/src/actions/physical/longtouch.js","webpack://muze/./packages/muze-firebolt/src/actions/physical/touch-drag.js","webpack://muze/./packages/muze-firebolt/src/side-effects/generic.js","webpack://muze/./packages/muze-firebolt/src/side-effects/surrogate.js","webpack://muze/./packages/muze-firebolt/src/side-effects/spawnable.js","webpack://muze/./packages/muze-firebolt/src/side-effects/selection-box/helper.js","webpack://muze/./packages/muze-firebolt/src/side-effects/selection-box/index.js","webpack://muze/./packages/muze-firebolt/src/actions/physical/selection-box-drag.js","webpack://muze/./packages/muze-tooltip/src/constants.js","webpack://muze/./packages/muze-tooltip/src/default-config.js","webpack://muze/./packages/muze-tooltip/src/helper.js","webpack://muze/./packages/muze-tooltip/src/strategy.js","webpack://muze/./packages/muze-tooltip/src/content.js","webpack://muze/./packages/muze-tooltip/src/tooltip.js","webpack://muze/./packages/muze-firebolt/src/side-effects/tooltip/strategies.js","webpack://muze/./packages/muze-firebolt/src/side-effects/tooltip/index.js","webpack://muze/./packages/muze-firebolt/src/side-effects/helper/index.js","webpack://muze/./packages/muze-firebolt/src/side-effects/crossline/index.js","webpack://muze/./packages/muze-firebolt/src/side-effects/plot-highlighter/strategy.js","webpack://muze/./packages/muze-firebolt/src/side-effects/plot-highlighter/index.js","webpack://muze/./packages/muze-firebolt/src/side-effects/filter/index.js","webpack://muze/./packages/muze-firebolt/src/side-effects/anchors/index.js","webpack://muze/./packages/muze-firebolt/src/side-effects/persistent-anchors.js","webpack://muze/./packages/muze-firebolt/src/side-effects/brush-anchors.js","webpack://muze/./packages/muze-firebolt/src/behaviour-effect-map.js","webpack://muze/./packages/visual-layer/src/enums/constants.js","webpack://muze/./packages/visual-layer/src/layers/area/default-config.js","webpack://muze/./packages/visual-layer/src/simple-layer/simple-layer.js","webpack://muze/./packages/visual-layer/src/enums/props.js","webpack://muze/./packages/muze-axis/src/enums/axis-orientation.js","webpack://muze/./packages/muze-axis/src/enums/scale-type.js","webpack://muze/./packages/muze-axis/src/enums/constants.js","webpack://muze/./packages/muze-axis/src/scale-creator.js","webpack://muze/./packages/muze-axis/src/cartesian-axis/default-config.js","webpack://muze/./packages/muze-axis/src/axis-renderer.js","webpack://muze/./packages/muze-axis/src/cartesian-axis/helper.js","webpack://muze/./packages/muze-axis/src/cartesian-axis/props.js","webpack://muze/./packages/muze-axis/src/cartesian-axis/simple-axis.js","webpack://muze/./packages/muze-axis/src/cartesian-axis/interpolators/linear.js","webpack://muze/./packages/muze-axis/src/cartesian-axis/interpolators/log.js","webpack://muze/./packages/muze-axis/src/cartesian-axis/interpolators/pow.js","webpack://muze/./packages/muze-axis/src/cartesian-axis/continous-axis.js","webpack://muze/./packages/muze-axis/src/cartesian-axis/band-axis.js","webpack://muze/./packages/muze-axis/src/cartesian-axis/time-axis.js","webpack://muze/./packages/muze-axis/src/color-axis/color-maps.js","webpack://muze/./packages/muze-axis/src/color-axis/defaults.js","webpack://muze/./packages/muze-axis/src/color-axis/props.js","webpack://muze/./packages/muze-axis/src/color-axis/color-strategy.js","webpack://muze/./packages/muze-axis/src/color-axis/color-axis.js","webpack://muze/./packages/muze-axis/src/size-axis/defaults.js","webpack://muze/./packages/muze-axis/src/size-axis/size-strategy.js","webpack://muze/./packages/muze-axis/src/size-axis/props.js","webpack://muze/./packages/muze-axis/src/size-axis/size-axis.js","webpack://muze/./packages/muze-axis/src/shape-axis/defaults.js","webpack://muze/./packages/muze-axis/src/shape-axis/props.js","webpack://muze/./packages/muze-axis/src/shape-axis/shape-axis.js","webpack://muze/./packages/muze-axis/src/shape-axis/helper.js","webpack://muze/./packages/muze-axis/src/data-type-scale-map.js","webpack://muze/./packages/transform/src/group-transform/index.js","webpack://muze/./packages/transform/src/identity-transform/index.js","webpack://muze/./packages/transform/src/transform-factory/index.js","webpack://muze/./packages/transform/src/enums/transform-type.js","webpack://muze/./packages/transform/src/stack-transform/index.js","webpack://muze/./packages/visual-layer/src/helpers/index.js","webpack://muze/./packages/visual-layer/src/base-layer/listener-map.js","webpack://muze/./packages/visual-layer/src/base-layer/default-options.js","webpack://muze/./packages/visual-layer/src/base-layer/base-layer.js","webpack://muze/./packages/visual-layer/src/layers/line/renderer.js","webpack://muze/./packages/visual-layer/src/layers/line/default-config.js","webpack://muze/./packages/visual-layer/src/layers/line/line.js","webpack://muze/./packages/visual-layer/src/layers/area/renderer.js","webpack://muze/./packages/visual-layer/src/layers/area/area.js","webpack://muze/./packages/visual-layer/src/layers/arc/default-config.js","webpack://muze/./packages/visual-layer/src/layers/arc/arc.js","webpack://muze/./packages/visual-layer/src/layers/arc/arc-helper.js","webpack://muze/./packages/visual-layer/src/layers/text/renderer.js","webpack://muze/./packages/visual-layer/src/layers/text/default-config.js","webpack://muze/./packages/visual-layer/src/layers/text/text.js","webpack://muze/./packages/visual-layer/src/layers/point/renderer.js","webpack://muze/./packages/visual-layer/src/layers/point/default-config.js","webpack://muze/./packages/visual-layer/src/layers/point/point.js","webpack://muze/./packages/visual-layer/src/layers/bar/renderer.js","webpack://muze/./packages/visual-layer/src/layers/bar/default-config.js","webpack://muze/./packages/visual-layer/src/layers/bar/bar-helper.js","webpack://muze/./packages/visual-layer/src/layers/bar/bar.js","webpack://muze/./packages/visual-layer/src/layers/tick/default-config.js","webpack://muze/./packages/visual-layer/src/layers/tick/renderer.js","webpack://muze/./packages/visual-layer/src/layers/tick/tick.js","webpack://muze/./packages/visual-layer/src/layer-factory/index.js","webpack://muze/./packages/visual-layer/src/defaults.js","webpack://muze/./packages/visual-group/src/enums/constants.js","webpack://muze/./packages/visual-group/src/visual-group/local-options.js","webpack://muze/./packages/visual-group/src/simple-group/simple-group.js","webpack://muze/./packages/visual-group/src/variable/variable.js","webpack://muze/./packages/visual-group/src/variable/composed-vars.js","webpack://muze/./packages/visual-group/src/variable/simple-var.js","webpack://muze/./packages/visual-group/src/encoder/field-sanitizer.js","webpack://muze/./packages/visual-group/src/encoder/visual-encoder.js","webpack://muze/./packages/visual-group/src/enums/scale-maps.js","webpack://muze/./packages/visual-group/src/data-type-scale-map.js","webpack://muze/./packages/visual-group/src/encoder/encoder-helper.js","webpack://muze/./packages/visual-group/src/encoder/cartesian-encoder.js","webpack://muze/./packages/visual-group/src/encoder/polar-encoder.js","webpack://muze/./packages/visual-group/src/encoder/retinal-encoder.js","webpack://muze/./packages/visual-group/src/group-helper/group-utils.js","webpack://muze/./packages/visual-group/src/enums/defaults.js","webpack://muze/./packages/muze-utils/src/DataSystem/dataSelect.js","webpack://muze/./packages/visual-unit/src/firebolt/action-behaviour-map.js","webpack://muze/./packages/visual-unit/src/enums/reactive-props.js","webpack://muze/./packages/visual-unit/src/helper/index.js","webpack://muze/./packages/visual-unit/src/helper/grid-lines.js","webpack://muze/./packages/visual-unit/src/default-config.js","webpack://muze/./packages/visual-unit/src/enums/constants.js","webpack://muze/./packages/visual-unit/src/local-options.js","webpack://muze/./packages/visual-unit/src/listener-map.js","webpack://muze/./packages/visual-unit/src/props.js","webpack://muze/./packages/visual-unit/src/firebolt/helper.js","webpack://muze/./packages/visual-unit/src/firebolt/payload-generator.js","webpack://muze/./packages/visual-unit/src/firebolt/data-propagator.js","webpack://muze/./packages/visual-unit/src/firebolt/index.js","webpack://muze/./packages/visual-unit/src/visual-unit.js","webpack://muze/./packages/visual-group/src/group-helper/matrix-model.js","webpack://muze/./packages/visual-group/src/group-helper/cell-creator.js","webpack://muze/./packages/visual-group/src/group-helper/matrix-resolver.js","webpack://muze/./packages/visual-group/src/visual-group/value-matrix.js","webpack://muze/./packages/visual-group/src/visual-group/change-listener.js","webpack://muze/./packages/visual-group/src/visual-group/props.js","webpack://muze/./packages/visual-group/src/visual-group/visual-group.js","webpack://muze/./packages/muze-legend/src/firebolt/behavioural/select.js","webpack://muze/./packages/muze-legend/src/firebolt/action-behaviour-map.js","webpack://muze/./packages/muze-legend/src/firebolt/behaviour-effect-map.js","webpack://muze/./packages/muze-legend/src/enums/behaviours.js","webpack://muze/./packages/muze-legend/src/enums/side-effects.js","webpack://muze/./packages/muze-legend/src/enums/constants.js","webpack://muze/./packages/muze-legend/src/firebolt/helper.js","webpack://muze/./packages/muze-legend/src/firebolt/legend-firebolt.js","webpack://muze/./packages/muze-legend/src/firebolt/physical/drag.js","webpack://muze/./packages/muze-legend/src/firebolt/physical/hover.js","webpack://muze/./packages/muze-legend/src/firebolt/physical/click.js","webpack://muze/./packages/muze-legend/src/firebolt/physical/index.js","webpack://muze/./packages/muze-legend/src/enums/actions.js","webpack://muze/./packages/muze-legend/src/firebolt/physical/selection-box-drag.js","webpack://muze/./packages/muze-legend/src/firebolt/side-effects/selection-box/index.js","webpack://muze/./packages/muze-legend/src/firebolt/side-effects/legend-highlighter/strategies.js","webpack://muze/./packages/muze-legend/src/firebolt/side-effects/legend-highlighter/index.js","webpack://muze/./packages/muze-legend/src/legend/props.js","webpack://muze/./packages/muze-legend/src/legend/defaults.js","webpack://muze/./packages/muze-legend/src/legend/legend-helper.js","webpack://muze/./packages/muze-legend/src/legend/simple-legend.js","webpack://muze/./packages/muze-legend/src/legend/position-config.js","webpack://muze/./packages/muze-legend/src/legend/renderer.js","webpack://muze/./packages/muze-legend/src/legend/discrete-legend.js","webpack://muze/./packages/muze-legend/src/legend/gradient-helper.js","webpack://muze/./packages/muze-legend/src/legend/gradient-legend.js","webpack://muze/./packages/muze-legend/src/legend/step-legend.js","webpack://muze/./packages/muze/src/constants.js","webpack://muze/./packages/muze/src/operators.js","webpack://muze/./packages/muze/src/action-model.js","webpack://muze/./packages/muze/src/defaults.js","webpack://muze/./packages/muze/src/options.js","webpack://muze/./packages/layout/src/enums/constants.js","webpack://muze/./packages/layout/src/generic-layout/index.js","webpack://muze/./packages/layout/src/grid-layout/defaults.js","webpack://muze/./packages/layout/src/grid-layout/span-maker.js","webpack://muze/./packages/layout/src/grid-layout/renderer.js","webpack://muze/./packages/layout/src/utils/index.js","webpack://muze/./packages/layout/src/visual-matrix/props.js","webpack://muze/./packages/layout/src/visual-matrix/default-config.js","webpack://muze/./packages/layout/src/visual-matrix/visual-matrix.js","webpack://muze/./packages/layout/src/grid-layout/computations.js","webpack://muze/./packages/layout/src/grid-layout/layout.js","webpack://muze/./packages/layout/src/grid-layout/layout-helper.js","webpack://muze/./packages/muze/src/transaction-support.js","webpack://muze/./packages/muze/src/canvas/component-resolver.js","webpack://muze/./packages/visual-cell/src/enums/constants.js","webpack://muze/./packages/visual-cell/src/enums/cell-type.js","webpack://muze/./packages/visual-cell/src/simple-cell.js","webpack://muze/./packages/visual-cell/src/enums/defaults.js","webpack://muze/./packages/visual-cell/src/props.js","webpack://muze/./packages/visual-cell/src/axis-cell.js","webpack://muze/./packages/visual-cell/src/blank-cell.js","webpack://muze/./packages/visual-cell/src/text-cell.js","webpack://muze/./packages/visual-cell/src/geom-cell.js","webpack://muze/./packages/visual-cell/src/defaults.js","webpack://muze/./packages/visual-cell/src/constants.js","webpack://muze/./packages/visual-cell/src/cell-registry.js","webpack://muze/./packages/muze/src/canvas/title-maker.js","webpack://muze/./packages/muze/src/canvas/legend-maker.js","webpack://muze/./packages/muze/src/canvas/layout-maker.js","webpack://muze/./packages/muze/src/canvas/defaults.js","webpack://muze/./packages/muze/src/canvas/local-options.js","webpack://muze/./packages/muze/src/canvas/renderer.js","webpack://muze/./packages/muze/src/canvas/helper.js","webpack://muze/./packages/muze/src/canvas/firebolt.js","webpack://muze/./packages/muze/src/canvas/canvas.js","webpack://muze/./packages/muze/src/default-registry.js","webpack://muze/./packages/visual-layer/src/layer-registry.js","webpack://muze/./packages/muze/src/muze.js"],"names":["webpackUniversalModuleDefinition","root","factory","exports","module","define","amd","window","installedModules","__webpack_require__","moduleId","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","getDefault","getModuleExports","object","property","prototype","hasOwnProperty","p","s","e","_typeof","__WEBPACK_AMD_DEFINE_ARRAY__","undefined","__WEBPACK_AMD_DEFINE_RESULT__","__WEBPACK_AMD_DEFINE_FACTORY__","apply","default","description","homepage","version","license","main","author","keywords","repository","type","url","contributors","email","dependencies","d3-dsv","devDependencies","babel-cli","babel-core","babel-eslint","babel-loader","babel-plugin-transform-runtime","babel-preset-env","babel-preset-es2015","babel-preset-flow","chai","cross-env","eslint","eslint-config-airbnb","eslint-plugin-import","eslint-plugin-jsx-a11y","eslint-plugin-react","istanbul-instrumenter-loader","jsdoc","json2yaml","karma","karma-chai","karma-chrome-launcher","karma-coverage-istanbul-reporter","karma-mocha","karma-spec-reporter","karma-webpack","marked","mocha","mocha-webpack","transform-runtime","webpack","webpack-cli","webpack-dev-server","scripts","test","ut","utd","build","build:dev","start","lint","lint-errors","docs","u","f","Me","Ve","Ye","Be","a","ct","ft","st","lt","dt","pt","ht","vt","FLAT_JSON","DSV_STR","DSV_ARR","AUTO","CATEGORICAL","TEMPORAL","GEO","DISCRETE","MEASURE","DIMENSION","NORMAL","INVERSE","ALL","length","split","forEach","configurable","writable","TypeError","this","_ref","_rowDiff","sanitize","parsed","getData","fieldType","subType","concat","Array","isArray","from","Set","Math","min","max","parse","clone","fieldName","getMinDiff","unit","scale","defAggFn","push","data","bins","schema","h","Date","v","format","dtParams","nativeDate","RegExp","escape","replace","TOKEN_PREFIX","DATETIME_PARAM_SEQUENCE","YEAR","MONTH","DAY","HOUR","MINUTE","SECOND","MILLISECOND","defaultNumberParser","isFinite","parseInt","defaultRangeParser","toLowerCase","getTokenDefinitions","short","long","H","index","extract","parser","formatter","getHours","toString","P","M","getMinutes","S","getSeconds","K","getMilliseconds","join","getDay","A","getDate","b","getMonth","B","y","substring","getFullYear","Y","getTokenFormalNames","HOUR_12","AMPM_UPPERCASE","AMPM_LOWERCASE","SHORT_DAY","LONG_DAY","DAY_OF_MONTH","DAY_OF_MONTH_CONSTANT_WIDTH","SHORT_MONTH","LONG_MONTH","MONTH_OF_YEAR","SHORT_YEAR","LONG_YEAR","tokenResolver","arguments","findTokens","keys","indexOf","token","formatAs","String","extractTokenValue","noBreak","splice","map","match","shift","getNativeDate","unshift","Function","g","iterator","constructor","_","O","w","E","k","j","T","getTime","round","random","x","F","abs","N","R","createNamespace","fields","fieldsObj","getMeasure","getDimension","D","field","_value","C","next","done","return","L","U","V","G","CROSS","LEFTOUTER","RIGHTOUTER","NATURAL","FULLOUTER","W","getFieldspace","Error","_rowDiffset","Ke","z","X","floor","Q","$","Z","Map","has","set","ee","label","reduce","ne","_colIdentifier","sort","re","ie","ae","oe","sum","avg","every","first","last","count","std","sqrt","pow","ue","ce","fe","store","entries","__unregister","delete","se","le","pe","he","yt","ve","me","ye","ge","fieldDescription","be","_e","ReferenceError","__proto__","getPrototypeOf","fieldUnit","fieldScale","fieldDefAggFn","fieldNumberformat","numberFormat","setPrototypeOf","Number","POSITIVE_INFINITY","NEGATIVE_INFINITY","parseFloat","isNaN","Oe","Ae","trim","_unique","we","Ee","subtype","ke","je","minDiff","_dtf","Se","Te","bin","Fe","xe","dataFormat","assign","firstRowHeader","Ne","Re","De","Pe","Ce","Ie","JSON","stringify","Le","charCodeAt","slice","columns","parseRows","formatRows","Ue","He","fieldSeparator","Je","Ge","qe","We","op","meta","criteria","_derivation","ze","operation","filterByMeasure","getFieldsConfig","values","def","domain","some","valueOf","select","saveChild","Xe","getPartialFieldspace","__calculateFieldspace","calculateFieldsConfig","config","Qe","filter","projField","actualProjField","$e","_partialFieldspace","Ze","et","groupByString","params","tt","nonTraversingModel","excludeModels","handlePropagation","_children","nt","propagationNameSpace","propagateToSource","sourceId","propagateInterpolatedValues","persistent","mutableActions","filterFn","applyOnSource","action","model","models","path","_parent","sourceIdentifiers","propagationSourceId","groupByModel","reverse","rt","it","_fieldStoreName","_propagationNameSpace","immutableActions","_fieldspace","getAllFields","search","_fieldConfig","removeChild","findIndex","at","ot","_onPropagation","_sortingDetails","order","withUid","te","uids","addUid","columnWise","pop","de","defaultReducer","resolve","fieldsArr","replaceVar","addField","isMutableAction","payload","find","propConfig","filterImmutableAction","I","buckets","binCount","binSize","stops","add","mid","range","measureName","binFieldName","mt","Operators","compose","addParent","dispose","project","groupBy","calculateVariable","crossProduct","difference","naturalJoin","leftOuterJoin","rightOuterJoin","fullOuterJoin","union","Stats","DateTimeFormatter","DataFormat","FilteringMode","_set","requestAnimationFrame","webkitRequestAnimationFrame","mozRequestAnimationFrame","oRequestAnimationFrame","msRequestAnimationFrame","setTimeout","__lastTime","__id","unique","qualifiedName","seed","fn","outgoingEdges","accumulate","identity","dep","edges","_seed","requireResolve","retriever","history","resolver","electricEdges","retrieveDetails","q","listeners","nextFrame","currentFrame","qualifiedNodeMap","_wholeSet","_propagate","propagationOverride","currentFrameListeners","nextFrameListeners","_schedule","flush","perv","addDependencies","getDependencies","getResolvedList","addEdges","addElectricNode","append","__execUniqueElectricEdges","toArray","repeatHead","resetPropagationOverride","update","isRoot","_graph","_lockFlag","_reqQ","_addPropInModel","createNodesFrom","createElectricNodeOf","stopPropagation","setPropagationOverride","resetNodeValue","setProp","getNodeValue","getNodeFromQualifiedName","webpackPolyfill","deprecate","paths","children","_interopRequireDefault","obj","_lib2","_containerManager2","slLib","init","doc","win","document","htmlSplCharSpace"," ","documentSupport","getDocumentSupport","SVG_BBOX_CORRECTION","isWebKit","SmartLabelManager","id","container","useEllipses","options","wrapper","prop","prevInstance","isBrowserLess","maxCacheLimit","maxDefaultCacheLimit","getElementById","createContainer","innerHTML","testStrAvg","isHeadLess","isIE","offsetHeight","offsetWidth","parentContainerStyle","style","parentContainer","_containerManager","_showNoEllipses","_init","setStyle","textToLines","smartlabel","text","lines","_calCharDimWithCache","calculateDifference","size","csArr","tw","twi","cachedStyle","asymmetricDifference","maxAdvancedCacheLimit","_container","cache","_advancedCache","advancedCacheKey","_advancedCacheKey","cacheName","fontSize","fontFamily","fontWeight","fontStyle","cacheInitName","repeat","width","height","_getWidthFn","contObj","_containerObj","svgText","str","bbox","textContent","getBBox","_styleNotSet","setLineHeight","sCont","node","_context","context","_cache","charCache","_lineHeight","lineHeight","useEllipsesOnOverflow","getSmartText","maxWidth","maxHeight","noWrap","len","trimStr","tempArr","tmpText","maxWidthWithEll","toolText","oriWidth","oriHeight","newCharIndex","nearestChar","tempChar","getWidth","initialLeft","initialTop","getOriSizeImproveObj","spanArr","minWidth","elem","chr","elemRightMostPoint","elemLowestPoint","lastBR","removeFromIndex","removeFromIndexForEllipses","hasHTMLTag","maxStrWidth","lastDash","lastSpace","lastIndexBroken","strWidth","strHeight","oriTextArr","ellipsesStr","ellipsesWidth","dotWidth","characterArr","dashIndex","spaceIndex","lastLineBreak","fastTrim","ws","charAt","smartLabel","oriTextWidth","oriTextHeight","oriText","isTruncated","xmlTagRegEx","ltgtRegex","getOriSize","substr","getNearestBreakIndex","detailObj","tooltext","lastIndexOf","spanAdditionRegx","spanAdditionReplacer","classNameWithTag","classNameWithTagBR","childRetriverFn","childRetriverString","noClassTesting","classNameReg","className","spaceIdx","dashIdx","offsetLeft","offsetTop","parentNode","insertBefore","createElement","classNameBrReg","spanRemovalRegx","error","detailedCalculationFlag","textArr","letter","lSize","cumulativeSize","indiSizeStore","lib","userAgent","navigator","ceil","clsNameSpace","containerClass","brReplaceRegex","position","top","whiteSpace","padding","overflow","supportedStyle","font","font-family","font-weight","font-size","line-height","font-style","getElementsByClassName","opera","hasSVG","Boolean","SVGAngle","implementation","hasFeature","containerParent","body","appendChild","setAttribute","getElementsByTagName","sl","charLen","increment","avgWidth","styleObj","fSize","Muze","ContainerManager","maxContainers","svg","containers","rootNode","createElementNS","setAttributeNS","svgRoot","diff","containerObj","keyStr","prev","removeContainer","addContainer","avgCharWidth","display","cObj","ascending","NaN","bisector","compare","ascendingComparator","left","lo","hi","right","ascendingBisect","bisectRight","bisect","number","array_array","src_range","stop","step","e10","e5","e2","src_ticks","ticks","tickIncrement","power","log","LN10","tickStep","step0","step1","quantile","valueof","i0","value0","map_Map","map_map","each","remove","clear","empty","src_map","src_nest","sortValues","rollup","nest","sortKeys","array","depth","createResult","setResult","keyValue","valuesByKey","result","createObject","setObject","createMap","setMap","sortKey","set_Set","proto","set_set","src_array_array","src_array_map","array_slice","implicit","ordinal","unknown","copy","band","bandwidth","ordinalRange","paddingInner","paddingOuter","align","rescale","rangeRound","invertExtent","r0","r1","hiIndex","getClosestIndexOf","invert","arr","side","highVal","d1","low","high","extend","parent","definition","Color","reI","reN","reP","reHex3","reHex6","reRgbInteger","reRgbPercent","reRgbaInteger","reRgbaPercent","reHslPercent","reHslaPercent","named","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","color_color","exec","Rgb","rgbn","rgba","hsla","rgbConvert","rgb","opacity","color_rgb","hex","Hsl","hsl","hslConvert","hsl2rgb","m1","m2","displayable","brighter","darker","deg2rad","PI","rad2deg","Xn","Yn","Zn","lab_t0","lab_t1","t2","t3","labConvert","Lab","Hcl","cos","sin","rgb2lrgb","xyz2lab","lab","lab2xyz","lrgb2rgb","hclConvert","atan2","hcl","cubehelix_D","ED","EB","BC_DA","cubehelix_cubehelix","cubehelixConvert","Cubehelix","bl","basis","t1","v0","v1","v2","v3","cosh","sinh","src_constant","linear","color_hue","gamma","nogamma","exponential","src_rgb","rgbGamma","color","end","rgbSpline","spline","colors","rgbBasis","src_number","reA","reB","source","cssNode","cssRoot","cssView","svgNode","src_string","am","bm","bs","bi","lastIndex","one","string_zero","src_value","value_typeof","setTime","nb","na","src_round","degrees","decompose_identity","translateX","translateY","rotate","skewX","scaleX","scaleY","decompose","atan","interpolateTransform","pxComma","pxParen","degParen","translate","xa","ya","xb","yb","interpolateTransformCss","parseCss","documentElement","defaultView","transform","getComputedStyle","getPropertyValue","interpolateTransformSvg","parseSvg","baseVal","consolidate","matrix","SQRT2","hsl_hsl","hue","hslLong","hcl_hcl","src_cubehelix_cubehelix","cubehelixGamma","cubehelix","cubehelixLong","piecewise_piecewise","interpolate","d3_scale_src_constant","d3_scale_src_number","continuous_unit","deinterpolateLinear","bimap","deinterpolate","reinterpolate","d0","polymap","target","clamp","continuous","piecewise","output","input","deinterpolateClamp","reinterpolateClamp","formatDecimal","toExponential","coefficient","src_exponent","formatSpecifier","specifier","FormatSpecifier","fill","sign","symbol","zero","comma","precision","prefixExponent","defaultLocale_locale","defaultLocale_format","defaultLocale_formatPrefix","formatTrim","out","i1","formatRounded","exponent","formatTypes","%","toFixed","toPrecision","toUpperCase","src_identity","prefixes","src_locale","locale","group","grouping","thousands","formatGroup","currency","decimal","numerals","formatNumerals","percent","newFormat","prefix","suffix","formatType","maybeSuffix","valuePrefix","valueSuffix","valueNegative","Infinity","formatPrefix","defaultLocale","src_tickFormat","precisionPrefix","precisionRound","precisionFixed","linearish","tickFormat","nice","linear_linear","identity_identity","src_nice","interval","x0","x1","log_deinterpolate","log_reinterpolate","pow10","powp","base","exp","logp","log10","log2","reflect","logs","pows","raise","quantile_quantile","thresholds","quantiles","quantize_quantize","threshold_threshold","interval_t0","interval_t1","newInterval","floori","offseti","date","offset","previous","millisecond_millisecond","src_millisecond","durationMinute","durationWeek","second_second","getUTCSeconds","src_second","minute_minute","src_minute","hour_hour","getTimezoneOffset","src_hour","day_day","setHours","setDate","src_day","weekday","sunday","monday","tuesday","wednesday","thursday","friday","saturday","month_month","setMonth","src_month","year_year","setFullYear","src_year","utcMinute","setUTCSeconds","getUTCMinutes","utcHour","setUTCMinutes","getUTCHours","utcDay","setUTCHours","setUTCDate","getUTCDate","src_utcDay","utcWeekday","getUTCDay","utcSunday","utcMonday","utcTuesday","utcWednesday","utcThursday","utcFriday","utcSaturday","utcMonth","setUTCMonth","getUTCMonth","getUTCFullYear","utcYear","setUTCFullYear","src_utcYear","localDate","utcDate","UTC","newYear","src_defaultLocale_locale","timeFormat","utcFormat","utcParse","pads","-","0","numberRe","percentRe","requoteRe","locale_pad","string","requote","formatRe","names","formatLookup","parseWeekdayNumberSunday","parseWeekdayNumberMonday","parseWeekNumberSunday","parseWeekNumberISO","parseWeekNumberMonday","parseFullYear","parseYear","parseZone","parseMonthNumber","parseDayOfMonth","parseDayOfYear","parseHour24","parseMinutes","parseSeconds","parseMilliseconds","parseMicroseconds","parseLiteralPercent","parseUnixTimestamp","parseUnixTimestampSeconds","formatDayOfMonth","formatHour24","formatHour12","formatDayOfYear","formatMilliseconds","formatMicroseconds","formatMonthNumber","formatMinutes","formatSeconds","formatWeekdayNumberMonday","day","formatWeekNumberSunday","formatWeekNumberISO","formatWeekdayNumberSunday","formatWeekNumberMonday","locale_formatYear","formatFullYear","formatZone","formatUTCDayOfMonth","formatUTCHour24","formatUTCHour12","formatUTCDayOfYear","formatUTCMilliseconds","getUTCMilliseconds","formatUTCMicroseconds","formatUTCMonthNumber","formatUTCMinutes","formatUTCSeconds","formatUTCWeekdayNumberMonday","dow","formatUTCWeekNumberSunday","formatUTCWeekNumberISO","formatUTCWeekdayNumberSunday","formatUTCWeekNumberMonday","formatUTCYear","formatUTCFullYear","formatUTCZone","formatLiteralPercent","formatUnixTimestamp","formatUnixTimestampSeconds","defaultLocale_defaultLocale","formatLocale","locale_dateTime","dateTime","locale_date","locale_time","time","locale_periods","periods","locale_weekdays","days","locale_shortWeekdays","shortDays","locale_months","months","locale_shortMonths","shortMonths","periodRe","periodLookup","weekdayRe","weekdayLookup","shortWeekdayRe","shortWeekdayLookup","monthRe","monthLookup","shortMonthRe","shortMonthLookup","formats","formatShortWeekday","formatWeekday","formatShortMonth","formatMonth","formatPeriod","utcFormats","formatUTCShortWeekday","formatUTCWeekday","formatUTCShortMonth","formatUTCMonth","formatUTCPeriod","parses","parseShortWeekday","parseWeekday","parseShortMonth","parseMonth","parseLocaleDateTime","parseSpecifier","parsePeriod","parseLocaleDate","parseLocaleTime","pad","newParse","newDate","week","toISOString","time_durationSecond","time_durationMinute","time_durationHour","time_durationDay","time_durationWeek","durationMonth","durationYear","time_date","time_number","calendar","year","month","hour","minute","second","millisecond","formatMillisecond","formatSecond","formatMinute","formatHour","formatDay","formatWeek","formatYear","tickIntervals","tickInterval","t0","src_time","src_colors","category10","category20b","category20","ramp","sequential","interpolator","d3_scale_chromatic_src_colors","Accent","Dark2","Paired","Pastel1","Pastel2","Set1","Set2","Set3","src_ramp","scheme","BrBG_scheme","BrBG","PRGn_scheme","PRGn","PiYG_scheme","PiYG","PuOr","RdBu","RdGy","RdYlBu","RdYlGn","Spectral","BuGn","BuPu","GnBu","OrRd","PuBuGn","PuBu","PuRd","RdPu","YlGnBu","YlGn","YlOrBr","YlOrRd","Blues_scheme","Blues","Greens","Greys","Purples","Reds","Oranges","sequential_multi_cubehelix","rainbow_warm","rainbow_cool","rainbow_c","sequential_multi_rainbow","ts","viridis_ramp","sequential_multi_viridis","viridis_magma","viridis_inferno","viridis_plasma","reserved_fields","ROW_ID","common_props","ACTION_INF","ON_LAYER_DRAW","src_array_slice","d3_axis_src_identity","axis_top","axis_right","axis_bottom","axis_left","epsilon","entering","__axis","axis_axis","orient","tickArguments","tickValues","tickTransform","tickSizeInner","tickSizeOuter","tickPadding","axis","spacing","range0","range1","axis_center","axis_number","selection","selectAll","tick","tickExit","exit","tickEnter","enter","attr","line","merge","insert","transition","getAttribute","tickSize","pi","tau","tauEpsilon","Path","_x0","_y0","_x1","_y1","path_path","moveTo","closePath","lineTo","quadraticCurveTo","y1","bezierCurveTo","x2","y2","arcTo","y0","x21","y21","x01","y01","l01_2","x20","y20","l21_2","l20_2","l21","l01","acos","t01","t21","arc","a0","a1","ccw","dx","dy","cw","da","rect","src_path","d3_shape_src_constant","constant","math_max","math_min","math_sqrt","math_epsilon","math_pi","halfPi","math_tau","asin","arcInnerRadius","innerRadius","arcOuterRadius","outerRadius","arcStartAngle","startAngle","arcEndAngle","endAngle","arcPadAngle","padAngle","cornerTangents","rc","ox","oy","x11","y11","x10","y10","x00","y00","d2","cx0","cy0","cx1","cy1","dx0","dy0","dx1","dy1","cx","cy","Linear","areaStart","_line","areaEnd","lineStart","_point","lineEnd","point","curve_linear","point_x","point_y","src_line","defined","curve","buffer","defined0","src_area","area","x0z","y0z","arealine","lineX0","lineY0","lineY1","lineX1","src_descending","d3_shape_src_identity","curveRadial","Radial","_curve","radial","d3_shape_src_array_slice","symbol_circle","draw","symbol_cross","tan30","tan30_2","diamond","kr","kx","ky","star","square","sqrt3","triangle","wye_s","wye_k","wye_a","wye","noop","that","Basis","BasisClosed","_x2","_x3","_x4","_y2","_y3","_y4","BasisOpen","Bundle","beta","_basis","_beta","_x","_y","custom","bundle","cardinal_point","_k","Cardinal","tension","cardinal","CardinalClosed","_x5","_y5","CardinalOpen","catmullRom_point","_l01_a","_l01_2a","_l12_a","_l12_2a","_l23_a","_l23_2a","CatmullRom","alpha","_alpha","x23","y23","curve_catmullRom","catmullRom","CatmullRomClosed","CatmullRomOpen","LinearClosed","monotone_sign","slope3","h0","h1","s0","s1","slope2","monotone_point","MonotoneX","MonotoneY","ReflectContext","Natural","controlPoints","_t0","px","py","Step","_t","curve_step","stepBefore","stepAfter","none","series","order_none","stackValue","order_ascending","sums","ascending_sum","cubicInOut","polyIn","polyOut","polyInOut","b1","b2","b3","b4","b5","b6","b7","b8","b9","b0","bounceOut","backIn","overshoot","backOut","backInOut","elastic_tau","elasticOut","elasticIn","amplitude","period","d3_voronoi_src_constant","elasticInOut","src_point_x","src_point_y","RedBlackTree","RedBlackNode","RedBlackRotateLeft","tree","RedBlackRotateRight","RedBlackFirst","after","grandpa","uncle","sibling","src_RedBlackTree","createEdge","edge","Diagram_edges","setEdgeEnd","Diagram_cells","halfedges","createBorderEdge","vertex","clipEdge","ax","ay","connectEdge","fm","fb","lx","ly","rx","ry","fx","fy","cellHalfedgeAngle","cell","site","va","vb","cellHalfedgeStart","cellHalfedgeEnd","firstCircle","circlePool","attachCircle","lArc","rArc","lSite","cSite","rSite","bx","by","Diagram_epsilon2","ha","hc","circle","Circle","before","circles","detachCircle","beachPool","createBeach","beach","Beach","detachBeach","beaches","removeBeach","disappearing","Diagram_epsilon","iArc","nArcs","addBeach","dxl","dxr","directrix","leftBreakPoint","rightBreakPoint","createCell","newArc","hb","rfocx","rfocy","pby2","lfocx","lfocy","plby2","hl","aby2","triangleArea","lexicographic","Diagram","sites","extent","sortCellHalfedges","clipEdges","clipCells","iCell","iHalfedge","nHalfedges","startX","startY","endX","endY","nCells","cover","dc","v00","v01","v11","v10","cells","polygons","polygon","triangles","e1","links","radius","_found","vx","vy","src_voronoi","voronoi","HTMLElement","isSimpleObject","common_utils_typeof","getUniqueId","sanitizeIP","typeObj","nonExistentKeys","checkExistence","getMax","_toConsumableArray","getMin","common_utils_getDomainFromData","getDomainFromData","domArr","dist_datamodel","firstMin","secondMin","firstMax","secondMax","symbolFns","cross","easeFns","cubic","bounce","src_linear_linear","elastic","back","poly","circleInOut","common_utils_getClosestIndexOf","getQualifiedClassName","cancelAnimationFrame","cls","defaultValue","param","objectIterator","common_utils_Voronoi","Voronoi","_classCallCheck","_voronoi","_voronoiFn","common_utils_Store","Store","hyperdis_default","_listeners","serialize","propName","propNames","callBack","instantCall","props","on","calculatedProp","intSanitizer","val","common_utils_transactor","transactor","holder","conf","_loop","_defineProperty","_len","_key","compareTo","paramsLen","prevVal","spreadParams","sanitization","typeCheck","typeExpected","preset","oldValues","generateGetterSetters","propInfo","typeChecker","common_utils_isEqual","isEqual","oldVal","newVal","arraysEqual","arr1","arr2","is","ERROR_MSG","INTERFACE_IMPL","mergeRecursive","sink","common_utils_interpolator","common_utils_numberInterpolator","numberInterpolator","common_utils_piecewiseInterpolator","piecewiseInterpolator","rgbToHsv","detectColor","col","getDataModelFromRange","dataModel","selFields","selFn","common_utils_getDataModelFromIdentifiers","getDataModelFromIdentifiers","identifiers","filteredDataModel","fieldsConfig","dataArr","filteredSchema","include","propField","idx","common_utils_registerListeners","registerListeners","listenerMap","propListenerMap","mapObj","propType","listenerFn","listener","isValidValue","getObjProp","_len2","_key2","retObj","common_utils_getSymbol","getSymbol","src_symbol","stackOrders","_stackOrders","stackOffsets","yp","yn","_stackOffsets","s2","si","sij0","s3","sk","common_utils_stack","stack","oz","kz","sz","sij","ki","src_stack","pathInterpolators","curveLinear","curveStepAfter","curveStepBefore","curveStep","curveCatmullRom","Symbols","axisLeft","axisRight","axisTop","axisBottom","pie","arcs","pa","cornerRadius","padRadius","a01","a11","a00","a10","da0","da1","ap","rp","rc0","rc1","p0","p1","oc","intersect","x3","y3","x32","y32","kc","lc","centroid","Scales","getSmallestDiff","points","xhtml","namespaces","xlink","xml","xmlns","namespace","space","local","creator","fullname","creatorFixed","ownerDocument","creatorInherit","uri","namespaceURI","selector_none","src_selector","selector","querySelector","selectorAll_empty","selectorAll","querySelectorAll","matcher","matches","matcher_element","vendorMatches","webkitMatchesSelector","msMatchesSelector","mozMatchesSelector","oMatchesSelector","src_matcher","sparse","EnterNode","datum","_next","__data__","child","keyPrefix","bindIndex","groupLength","dataLength","bindKey","nodeByKeyValue","keyValues","sort_ascending","src_window","styleValue","classArray","classList","ClassList","_node","_names","classedAdd","list","classedRemove","contains","textRemove","htmlRemove","raise_raise","nextSibling","lower","previousSibling","firstChild","constantNull","remove_remove","selection_cloneShallow","cloneNode","selection_cloneDeep","filterEvents","on_event","mouseenter","mouseleave","filterContextListener","contextListener","event","related","relatedTarget","compareDocumentPosition","event1","event0","onRemove","typename","__on","removeEventListener","capture","onAdd","wrap","addEventListener","customEvent","args","sourceEvent","dispatchEvent","CustomEvent","createEvent","initEvent","bubbles","cancelable","detail","selection_root","Selection","groups","parents","_groups","_parents","selection_selection","subgroups","subnode","subgroup","d3_selection_src_constant","enterGroup","updateGroup","_enter","_exit","groups0","groups1","m0","merges","group0","group1","compareNode","sortgroups","sortgroup","callback","nodes","getAttributeNS","attrRemoveNS","removeAttributeNS","attrRemove","removeAttribute","attrFunctionNS","attrFunction","attrConstantNS","attrConstant","priority","styleRemove","removeProperty","styleFunction","setProperty","styleConstant","propertyRemove","propertyFunction","propertyConstant","classed","classedFunction","classedTrue","classedFalse","textFunction","textConstant","html","htmlFunction","htmlConstant","deep","typenames","parseTypenames","dispatch","dispatchFunction","dispatchConstant","src_selection","src_select","nextId","Local","current","src_point","ownerSVGElement","createSVGPoint","clientX","clientY","matrixTransform","getScreenCTM","inverse","getBoundingClientRect","clientLeft","clientTop","mouse","changedTouches","src_touch","touches","identifier","touch","dispatch_noop","dispatch_dispatch","Dispatch","dispatch_get","dispatch_set","dispatch_parseTypenames","types","src_dispatch","nopropagation","stopImmediatePropagation","noevent","preventDefault","nodrag","view","__noselect","MozUserSelect","d3_drag_src_constant","DragEvent","subject","active","defaultFilter","button","defaultContainer","defaultSubject","defaultTouchable","taskHead","taskTail","src_drag","mousedownx","mousedowny","mousemoving","touchending","touchable","gestures","clickDistance2","drag","mousedowned","touchstarted","touchmoved","touchended","gesture","beforestart","mousemoved","mouseupped","yesdrag","noclick","clearTimeout","sublisteners","clickDistance","timer_frame","timeout","timer_interval","pokeDelay","clockLast","clockNow","clockSkew","clock","performance","timer_typeof","now","setFrame","clearNow","Timer","_call","_time","timer","delay","restart","wake","timerFlush","nap","sleep","poke","clearInterval","setInterval","src_timeout","elapsed","emptyOn","emptyTween","CREATED","SCHEDULED","STARTING","STARTED","RUNNING","ENDING","ENDED","transition_schedule","timing","schedules","__transition","schedule_create","self","tween","state","duration","ease","schedule","schedule_get","schedule_set","tweenValue","_id","transition_interpolate","selection_Selection","transition_id","Transition","_name","newId","selection_prototype","src_transition_transition","inherit","id0","id1","onFunction","on0","on1","sit","on_start","attrTween","attr_attrFunctionNS","value00","value10","interpolate0","value1","attr_attrFunction","attr_attrRemoveNS","attr_attrRemove","attr_attrConstantNS","attr_attrConstant","attrTweenNS","styleTween","style_styleRemove","styleRemoveEnd","style_styleFunction","style_styleConstant","text_textFunction","text_textConstant","removeFunction","tweenRemove","tween0","tween1","tweenFunction","delayFunction","delayConstant","durationFunction","durationConstant","easeConstant","defaultTiming","transition_inherit","interrupt","renderer_utils_selectElement","selectElement","element","makeElement","elemType","callbacks","keyFn","SVGElement","selectorVal","selectorType","actualSelector","enterSel","mergeSel","exitSel","_len3","_key3","applyStyle","setElementAttrs","attrs","renderer_utils_setAttrs","setAttrs","renderer_utils_setStyles","setStyles","styles","renderer_utils_createElements","createElements","sel","renderer_utils_getClientPoint","getClientPoint","pos","clientPoint","renderer_utils_getEvent","getEvent","renderer_utils_getD3Drag","getD3Drag","renderer_utils_getSmartComputedStyle","getSmartComputedStyle","css","textEl","mandatoryStyle","fill-opacity","renderer_utils_typeof","computedStyle","styleForSmartLabel","hasTouch","DataSystem_selection","selection_classCallCheck","_data","_idMap","_mode","_enterdata","_exitdata","_this","newData","idGetter","_this2","_idGetter","tempMap","purgedIds","purged","temp","_this3","item","_this4","_this5","_this6","DataObject","data_object_classCallCheck","events","EVENT_LIST","composition","event_list","lifecycle_manager_resolver","resolveFn","notification","hasOwn","src_lifecycle_manager","LifeCycleManager","lifecycle_manager_classCallCheck","_eventList","_promises","_notifiers","_lifeCycles","_unreleasedLifeCycles","_boot","acc","_preparePromises","eventName","Promise","_makeNotifierPromise","formalName","client","_releasePromisesFromCache","_notify","stage","_resolvePromise","promise","retrieve","_callLifeCycleCallback","_cachePromise","_resetTargetPromise","lifeCycles","DRAG","HOVER","SELECTIONDRAG","CLICK","LONGTOUCH","TOUCHDRAG","ALL_ACTIONS","SELECTION_NEW_ENTRY","SELECTION_NEW_EXIT","SELECTION_NULL","SELECTION_OLD_ENTRY","SELECTION_OLD_EXIT","selection_set","SelectionSet","completeSet","_volatile","selection_set_classCallCheck","_completeSetCount","_lockedSelection","_resetted","ids","entrySet","exitSet","lockedSel","addSet","removeSet","updateSet","changeSideEffectAvailability","toEnable","sideEffects","change","enable","disable","getMergedSet","helper_toConsumableArray","conditionsMap","newEntry","oldEntry","mergedEnter","newExit","oldExit","mergedExit","complete","getSetInfo","selectionSet","propagationData","resetted","getModelFromSet","condition","src_firebolt","Firebolt","actions","behaviourEffectMap","firebolt_classCallCheck","_sideEffectDefinitions","_sideEffects","_propagationInf","_actions","behavioural","physical","_selectionSet","_volatileSelectionSet","_propagationFields","_sourceSideEffects","selectionBox","_propagationBehaviourMap","_sourceBehaviours","_actionBehaviourMap","_config","_behaviourEffectMap","_entryExitSet","_actionHistory","_queuedSideEffects","_mappedActions","mapSideEffects","registerBehaviouralActions","registerSideEffects","registerPhysicalBehaviouralMap","physicalBehaviouralMap","registerPhysicalActions","sideEffectConf","behEffectMap","preventDefaultActions","effectNames","effects","firebolt_toConsumableArray","behaviours","initializeBehaviouralActions","dispatchableBehaviours","Action","prepareSelectionSets","sideEffectStore","actionHistory","queuedSideEffects","sideEffect","combinedSet","unionSets","behaviour","entryExitSet","existingModel","helper_unionSets","effect","firebolt_typeof","sideEffectInstance","isEnabled","mutates","dispatchSideEffect","propagationInfo","propagate","getSideEffects","propagationSelectionSet","getPropagationSelectionSet","shouldApplySideEffects","sourceSelectionSet","applicableSideEffects","getApplicableSideEffects","applySideEffects","physicalAction","actionBehaviourMap","behaviourMap","unsubscribe","onDataModelPropagation","propValue","dispatchBehaviour","uniqueIds","behaviouralActions","volatileSelectionSet","sideEffectDefinitions","initializeSideEffects","sideEffectsMap","SideEffect","helper_initializeSideEffects","initedActions","initializePhysicalActions","physicalActions","initedPhysicalActions","mappedActions","getDefaultTargetContainer","keyName","bindActionWithBehaviour","targets","behaviourList","mount","propagationInf","xFields","yFields","xMeasures","yMeasures","filterPropagationModel","propModel","measures","_propModel$getData","filteredModel","fieldMap","row","common_utils_filterPropagationModel","getFullData","propagationSource","applicableSelectionSets","generic","GenericBehaviour","firebolt","generic_classCallCheck","_enabled","selectionSets","getSelectionSets","_firebolt$getAddSetFr","getAddSetFromCriteria","getPropagationInf","setSelectionSet","getEntryExitSet","_selectionSet$getSets","getSets","setConfig","isSourceFieldPresent","getSourceFields","getSchema","behavioural_volatile","reset","existingAddSet","updateExit","getCompleteSet","BRUSH","HIGHLIGHT","TOOLTIP","FILTER","SELECT","highlight","brush","behavioural_filter","updateEntry","mergedExitSet","completeSetCount","behavioural_select","drag_action_config","getDragActionConfig","sourceInfo","axes","xAxis","yAxis","axisFields","xField","getMembers","yField","xFieldType","yFieldType","dimensions","stPos","startPos","endPos","dragDim","isXDimension","isYDimension","xRange","yRange","selectedDomains","rangeObj","xdom","ydom","snap","getNearestRange","drag_event_attachDragEvent","attachDragEvent","targetEl","drawingInf","d3Drag","touchStart","getDrawingContext","getSourceInfo","beh","dragEnd","physical_hover","hover","interaction","tooltip","svgContainer","nearestPoint","getNearestPoint","getAllPoints","showInPosition","helpers_generatePayloadFromEvent","generatePayloadFromEvent","physical_click","click","physical_defineProperty","_physicalActions","longtouch","touchEnd","touchdrag","side_effects_generic","GenericSideEffect","side_effects_generic_classCallCheck","_strategy","_strategies","defaultConfig","surrogate","interactionType","layers","layer","interactive","applyInteractionStyle","spawnable","_drawingContext","helper_changeVisibility","changeVisibility","sideEffectGroup","visible","defClassName","classPrefix","selection_box","boxConf","box","drawingContext","mountPoint","unitWidth","unitHeight","selectionGroupClassName","hide","sourceInf","_getBoxDimensionsFrom","getBoxDimensionsFromPayload","direction","xDim","yDim","xLinear","yLinear","xCriteria","yCriteria","bandScale","x1Val","x2Val","x1DomainIndex","x2DomainIndex","_sort","_sort2","helper_slicedToArray","getScaleValue","getUnitWidth","y1Val","y2Val","y1DomainIndex","y2DomainIndex","_sort3","_sort4","_xDim","_yDim","dimension","show","selectionBoxDrag","onDrag","selection_box_drag_selectionBoxDrag","boxClassName","INITIAL_STYLE","default_config_defaultConfig","connectorClassName","margin","content","iconContainerSize","iconScale","iconShape","iconColor","rowMargin","separator","parentClassName","arrow","disabled","helper_getArrowPos","getArrowPos","dim","measurement","arrowPos","boxHeight","boxWidth","arrowWidth","plotBottom","boxBottom","plotRight","boxRight","helper_placeArrow","placeArrow","tooltipArrow","_tooltipArrow","tooltipBackground","_tooltipBackground","arrowConf","_arrowOrientation","timeFormats","timeDurations","strategy_defaultTooltipFormatters","defaultTooltipFormatters","_formatters","strategy_defineProperty","formatters","nearestInterval","getNearestInterval","strategy_getNearestInterval","strategy_buildTooltipData","buildTooltipData","fieldValues","dataObj","fieldspace","dimensionMeasureMap","detailFields","containsDetailField","dataLen","getRowContent","formattedValue","measureIndex","formatterFn","uniqueVals","strategy_toConsumableArray","colorAxis","shapeAxis","shape","sizeAxis","isRetinalField","associatedMeasures","icon","getColor","getShape","getSize","measure","margin-left","displayFormat","getTabularData","timeDiffs","rows","fieldObj","strategy_getTabularData","allMeasures","strategy_strategy","DEFAULT_STRATEGY","src_content","Content","content_classCallCheck","_model","_formatter","strategy","ctx","_mount","table","tbody","margin-right","el","src_tooltip","Tooltip","htmlContainer","tooltip_classCallCheck","connectorContainer","tooltipConf","contentClass","_tooltipContainer","_contentContainer","_contents","_tooltipConnectorContainer","qualifiedClassName","addClass","defConf","contentConfig","reorderContainers","contentConf","render","_target","repositionArrow","arrowDisabled","arrowOrient","outsidePlot","connector","_offset","orientation","_extent","arrowSize","topSpace","dimX","rightSpace","leftSpace","positionTop","positionRight","positionLeft","positionHorizontal","positionVertical","_position","_arrowPos","strategies_strategies","showSelectedItems","dm","aggregatedModel","fieldsConf","measureNames","strategies_toConsumableArray","side_effects_tooltip","side_effects_tooltip_classCallCheck","tooltip_possibleConstructorReturn","_tooltips","totalHeight","totalWidth","isEmpty","tooltips","boundBox","dataModels","fragmented","showVertically","tooltipPos","boxes","tooltip_toConsumableArray","targetFields","sourceFields","indices","plotDimensions","getPlotPointsFromIdentifiers","plotDim","dataTransform","layoutContainer","layoutBoundBox","unitBoundBox","tooltipInst","timeDiffsByField","positionRelativeTo","tooltipBoundBox","getContents","spaceOutBoxes","spaceOutIfOverlap","firstBox","secondBox","opposite","bottom","crossline","bandWidth","bandClass","lineClass","elemData","fieldIndex","axisIndex","fieldInst","xOffset","plotWidth","crossline_toConsumableArray","getPlotSpan","getPlotPadding","startPx","endPx","dataPoint","parentGroup","CLASSPREFIX","strategy_strategies","fade","fadeFn","focus","plot_highlighter","PlotHighlighter","plot_highlighter_classCallCheck","plot_highlighter_possibleConstructorReturn","side_effects_filter","entryModel","clearCaching","resetData","enableCaching","side_effects_anchors","AnchorEffect","anchors_classCallCheck","anchors_possibleConstructorReturn","_layers","addAnchorLayers","shouldDrawAnchors","encodingFieldsInf","layerObj","instances","addLayer","alias","mark","encoding","colorField","sizeField","defaultSizeValue","getTransitionConfig","calculateDomain","linkedLayer","elems","_linkedLayer$getTrans","getTransformedDataFromIdentifiers","_linkedLayer$getTrans2","anchors_slicedToArray","transformedData","transformedDataModel","datamodel_default","persistent_anchors","brush_anchors","behaviour_effect_map_behaviourEffectMap","behaviour_effect_map_defineProperty","STACK","ANGLE","RADIUS","SIZE","COLOR","SHAPE","ENCODING","X0","Y0","area_default_config_defaultConfig","nearestPointThreshold","strokeOpacity","connectNullData","simple_layer","DATA_UPDATED","axis_orientation_BOTTOM","axis_orientation_TOP","axis_orientation_LEFT","axis_orientation_RIGHT","axisOrientationMap","axis_orientation_defineProperty","_axisOrientationMap","LINEAR","BAND","TIME","scale_type_COLOR","ORDINAL","QUANTIZE","QUANTILE","LOG","POW","scale_type_IDENTITY","SEQUENTIAL","THRESHOLD","CONTINOUS","constants_SEQUENTIAL","constants_ORDINAL","constants_LINEAR","constants_QUANTIZE","HIDDEN","scaleLinear","scales_namespaceObject","scaleThreshold","scaleLog","scalePow","scaleIdentity","scaleOrdinal","scaleSequential","scaleQuantize","scaleQuantile","scaleBand","scaleTime","scaleMap","scale_creator_defineProperty","_scaleMap","scale_creator_createScale","scaleFactory","cartesian_axis_default_config_defaultConfig","axisName","axisNamePadding","src_enums_constants_CLASSPREFIX","fixedBaseline","labels","rotation","smartTicks","numberOfTicks","showAxisName","showInnerTicks","showOuterTicks","yOffset","axis_renderer_rotateAxis","rotateAxis","instance","tickText","labelManager","getTickSize","yShift","xShift","tickFormatter","tickLabelDim","quadrant","rotationNormalizer","angleToRadian","angle","axis_renderer_changeTickOrientation","changeTickOrientation","selectContainer","axisInstance","_smartTicks","isSmartTicks","axis_renderer_setFixedBaseline","setFixedBaseline","axis_renderer_setAxisNamePos","setAxisNamePos","textNode","axisNameHeight","labelOffset","availableSpace","getTickLabelInfo","largestLabel","labelProps","smartTick","axisTickLabels","allLabelLengths","_context$config","labelFunc","_tickLabelStyle","originalLabel","formattedLabel","largestLabelDim","helper_setOffset","setOffset","logicalSpace","helper_adjustRange","adjustRange","getAxisOffset","timeDiff","avWidth","bars","registerChangeListeners","_domainLock","getHorizontalAxisSpace","axisDimensions","axisLabelDim","axisDimHeight","tickDimHeight","tickDimWidth","minTickDiff","getMinTickDifference","cartesian_axis_helper_toConsumableArray","_minTickDistance","getVerticalAxisSpace","_ref2","PROPS","_rotationLock","createAxis","commit","simple_axis","SimpleAxis","simple_axis_classCallCheck","_dependencies","_range","_domain","_axisDimensions","defCon","simpleConfig","bodyElem","_axisNameStyle","_scale","createScale","_axis","setTickConfig","axisClass","getTickFormatter","labelWidth","domainVal","computeAxisDimensions","_context$config2","_getTickLabelInfo","labelHeight","setRotationConfig","calculateContinousSpace","getAxisDimensions","axisDimWidth","_getHorizontalAxisSpa2","_getVerticalAxisSpace2","helper_calculateContinousSpace","currentDomain","cachedDomain","updateDomainBounds","registerEvent","renderAxis","setTickValues","axisNameSpace","axisNameWidth","unsubscribeAll","interpolators_linear","interpolators_log","interpolators_pow","interpolatorMap","continous_axis_defineProperty","_interpolatorMap","continous_axis","ContinousAxis","continous_axis_classCallCheck","continous_axis_possibleConstructorReturn","InterpolatorCls","_interpolator","isOffset","_config3","labelSpace","axisHeight","getLogicalSpace","axisWidth","getTickValues","_config5","getNumberOfTicks","labelDim","tickLength","numberOfValues","_config6","_axisDimensions$large","band_axis","_config2","calculateBandSpace","largestDimHeight","largestDimWidth","_getHorizontalAxisSpa","_getVerticalAxisSpace","helper_calculateBandSpace","availSpace","smartWidth","time_axis","TimeAxis","time_axis_classCallCheck","time_axis_possibleConstructorReturn","_minDiff","time_axis_get","_getAxisDimensions","x11Colors","Pink","LightPink","HotPink","DeepPink","PaleVioletRed","MediumVioletRed","LightSalmon","Salmon","DarkSalmon","LightCoral","IndianRed","Crimson","FireBrick","DarkRed","Red","OrangeRed","Tomato","Coral","DarkOrange","Orange","Gold","Yellow","LightYellow","LemonChiffon","LightGoldenrodYellow","PapayaWhip","Moccasin","PeachPuff","PaleGoldenrod","Khaki","DarkKhaki","Cornsilk","BlanchedAlmond","Bisque","NavajoWhite","Wheat","BurlyWood","Tan","RosyBrown","SandyBrown","Goldenrod","DarkGoldenrod","Peru","Chocolate","SaddleBrown","Sienna","Brown","Maroon","DarkOliveGreen","Olive","OliveDrab","YellowGreen","LimeGreen","Lime","LawnGreen","Chartreuse","GreenYellow","SpringGreen","MediumSpringGreen","LightGreen","PaleGreen","DarkSeaGreen","MediumSeaGreen","SeaGreen","ForestGreen","Green","DarkGreen","MediumAquamarine","Aqua","Cyan","LightCyan","PaleTurquoise","Aquamarine","Turquoise","MediumTurquoise","DarkTurquoise","LightSeaGreen","CadetBlue","DarkCyan","Teal","LightSteelBlue","PowderBlue","LightBlue","SkyBlue","LightSkyBlue","DeepSkyBlue","DodgerBlue","CornflowerBlue","SteelBlue","RoyalBlue","Blue","MediumBlue","DarkBlue","Navy","MidnightBlue","Lavender","Thistle","Plum","Violet","Orchid","Fuchsia","Magenta","MediumOrchid","MediumPurple","BlueViolet","DarkViolet","DarkOrchid","DarkMagenta","Purple","Indigo","DarkSlateBlue","SlateBlue","MediumSlateBlue","White","Snow","Honeydew","MintCream","Azure","AliceBlue","GhostWhite","WhiteSmoke","Seashell","Beige","OldLace","FloralWhite","Ivory","AntiqueWhite","Linen","LavenderBlush","MistyRose","Gainsboro","LightGray","Silver","DarkGrey","Grey","DimGrey","LightSlateGrey","SlateGrey","DarkSlateGrey","Black","palette","DEFAULT_GRADIENT_COLOR","DEFAULT_CONFIG","props_getHslString","getHslString","hslArr","convertToXllString","baseString","props_getActualHslColor","getActualHslColor","paletteColor","hexToHsv","props_toConsumableArray","props_PROPS","oldConfig","newConfig","uniqueValues","color_strategy_getStops","getStops","newStops","color_strategy_toConsumableArray","color_strategy_rangeStops","rangeStops","newStopsLength","newRange","hslInterpolator","common_utils_hslInterpolator","indexedDomain","scaleDomain","indexedDomainMeasure","normalDomain","color_strategy_steppedDomain","steppedDomain","_getStops","color_strategy_continousSteppedDomain","continousSteppedDomain","_getStops2","uniqueRange","domainValue","indexedRange","normalRange","strategyGetter","domainType","rangeType","schemeType","strategies","color_strategy_defineProperty","domainRange","color_strategy_strategies","color_axis","ColorAxis","color_axis_classCallCheck","_domainType","_rangeType","_schemeType","getSchemeType","_colorStrategy","setColorStrategy","updateDomain","colorStrategy","getScheme","color_schemes_namespaceObject","hslColorArray","getRawColor","color_axis_toConsumableArray","scaleInfo","domainRangeFn","transformationArr","newH","newS","newL","newA","defaults_DEFAULT_CONFIG","size_strategy_strategies","size_strategy_defineProperty","pieceWiseRange","numVal","size_strategy_toConsumableArray","intervals","newIntervals","discreteRange","size_axis_props_PROPS","size_axis","SizeAxis","size_axis_classCallCheck","_sizeStrategy","setStrategy","size_strategy_strategyGetter","domainInfo","domainFn","shape_axis_defaults_DEFAULT_CONFIG","generator","shape_axis_props_PROPS","shape_axis","ShapeAxis","shape_axis_classCallCheck","_generatedShapes","shapeType","shapeGenerator","generatorFn","generatedShapes","DATA_TYPES","group_transform","data_type_scale_map_defineProperty","dataTypeScaleMap","_dataTypeScaleMap","groupByIndices","nestCollection","nestFn","common_utils_nestCollection","transformMap","transform_factory_defineProperty","identityTransform","_transformMap","uniqueField","valueField","normalizedData","normalizeData","groupedData","uniqueFieldIndex","valueFieldIndex","seriesKeyIndex","seriesKeys","fieldNames","tuples","rowObj","_tuple","seriesKey","newArr","stack_transform_normalizeData","orderBy","orderIndex","groupByIndex","localeCompare","stackData","seriesData","transform_factory","transformFactory","helpers_BAND","scale_type_namespaceObject","getLayerColor","colorEncoding","colorFieldIndex","rawColor","transfromColor","styleType","intensity","stateColor","originalColor","fillColorInfo","transformColor","helpers_applyInteractionStyle","interactionStyles","elements","getPlotElementsFromSet","_d$meta","colorTransform","_ref3","_ref4","helpers_slicedToArray","helpers_getAxesScales","getAxesScales","_map","_map2","_map3","_map4","xScale","yScale","getIndividualClassName","individualClassName","classNameStr","attachDataToVoronoi","_ref5","helpers_toConsumableArray","helpers_updateStyle","updateStyle","positionPoints","positioner","encodingTransform","helpers_getPlotMeasurement","getPlotMeasurement","dimensionalValues","fieldInfo","transformType","_bandScale","span","groupSpan","offsetValues","actualGroupWidth","dataProps","innerPadding","getGroupSpan","isAxisBandScale","axisPadding","groupPadding","listener_map_listenerMap","fetch","dataModelValue","configValue","encodingValue","getEncodingFieldInf","_map5","_map6","x0Field","y0Field","shapeField","_map7","_map8","_map9","_map10","xFieldSubType","yFieldSubType","_map11","_map12","xFieldIndex","yFieldIndex","x0FieldIndex","y0FieldIndex","helpers_getEncodingFieldInf","getValidTransform","layerConfig","encodingFieldInf","groupByField","groupByFieldMeasure","helpers_getValidTransform","getTransformedData","transformedDataValue","getNormalizedData","normalizedDataValue","calculateDomainFromData","dataUpdated","throwback","defaultOptions","default_options_defineProperty","newConf","defaultPolicy","_defaultOptions","_cacheEnabled","_cachedData","base_layer","BaseLayer","base_layer_classCallCheck","base_layer_possibleConstructorReturn","base_layer_defineProperty","DATA","_points","_measurement","_store","_encodingFieldsInf","_encodingTransform","_alias","transformData","helpers_transformData","domains","yEnc","xEnc","helpers_calculateDomainFromData","encodingType","transformedDataArr","fieldsLen","pointObj","tuple","helpers_getNormalizedData","_transformType","pointMap","_pointMap","_dataProps","base_layer_slicedToArray","xMeasure","yMeasure","_identifiers$","_identifiers$2","xMeasureIndex","yMeasureIndex","getAllAttrs","filteredPoints","base_layer_toConsumableArray","sizeVal","_identifiers$getData","identifierData","identifierSchema","_encodingFieldsInf2","enc","tupleArr","transformedVal","userConf","renderer_line","renderer_drawLine","drawLine","curveInterpolatorFn","linepath","line_default_config_defaultConfig","line_line","LineLayer","line_classCallCheck","line_possibleConstructorReturn","isXDim","isYDim","xPx","yPx","_getLayerColor","stroke","rowId","cachePoint","seriesClassName","containerSelection","animateGroup","groupTransition","groupAnimateStyle","helpers_animateGroup","stroke-opacity","getPathStyle","translatePoints","colorValFn","colorVal","getDrawFn","searchRadius","_point$data$data","getIdentifiersFromData","layerId","renderer_area","renderer","drawArea","easeEffect","renderer_slicedToArray","enterAreaPath","updateAreaPath","selectionEnter","area_area","area_get","_getAxesScales","classNameFn","y0Px","arc_default_config_defaultConfig","minOuterRadius","stroke-width","stroke-linejoin","innerRadiusFixer","states","enums_constants_CLASSPREFIX","fadeout","selected","arc_pie","arc_arc","layers_arc_arc","ArcLayer","arc_classCallCheck","arc_possibleConstructorReturn","_prevPieData","pieData","pieIndex","prevData","_getFieldIndices","getFieldIndices","arc_helper_slicedToArray","angleField","radiusField","angleIndex","sizeIndex","radiusIndex","colorIndex","arc_helper_getFieldIndices","dataVal","uid","outerRadiusValue","angleVal","_previousInfo","getPreviousPoint","currIndex","prevArc","nextArc","_dataPoint$datum","chartHeight","chartWidth","qualClassName","getRadiusRange","defaultRadius","radiusDomain","rangeValueGetter","getRangeValue","domainMultiplier","sizeAxisDomain","sizeMultiplier","_chartWidth","_chartHeight","consecutiveExits","exitCounter","arcFn","tweenPie","arc_helper_tweenPie","individualClass","tweenExit","exitArr","oldExitCounter","tweenExitPie","consecutiveExitArr","gElem","arc_helper_tweenExitPie","pieSlices","pieSliceInf","tData","text_renderer","drawText","selectionMerge","backgroundVal","textanchor","textStyle","background","backgroundPadding","_smartLabel$getOriSiz","backgroundEl","text_default_config_defaultConfig","text_text","textEncoding","textField","textFormatter","backgroundEncoding","backgroundValue","textFieldIndex","textValue","text_slicedToArray","text-anchor","point_renderer","drawSymbols","mergedGroups","symbolGroups","symbolEnter","createShape","groupElement","then","res","Element","newShape","nodeName","src","href","shapeElement","pathStr","checkPath","renderer_createShape","exitGroups","point_default_config_defaultConfig","defColorStyle","fillOpacity","shapes","sizes","point_point","PointLayer","point_classCallCheck","point_possibleConstructorReturn","sizeEncoding","shapeEncoding","sizeValue","shapeFieldIndex","sizeFieldIndex","_config$offset","offsetX","offsetY","point_slicedToArray","maxSize","generateDataPoints","point_toConsumableArray","drawFn","_maxSize","_getPlotMeasurement","_getPlotMeasurement2","widthMetrics","heightMetrics","offsetXValues","offsetYValues","measurementConf","getMeasurementConfig","widthSpan","heightSpan","distanceLimit","renderer_drawRects","drawRects","barEnterFn","transitionBars","selTransition","renderer_transitionBars","bar_default_config_defaultConfig","bar_helper_resolveDimByField","resolveDimByField","axesInfo","spaceType","sizeConfig","enterSpace","minVal","maxVal","scales","diffPx","zeroPos","axisType","axisType0","resolveDimensions","_resolveDimByField","enterWidth","enterX","xPos","_resolveDimByField2","enterHeight","bar_scaleBand","bar","BarLayer","bar_classCallCheck","bar_possibleConstructorReturn","_plotPadding","_plotSpan","bar_get","getTranslatedPoints","_context$encodingFiel","bar_helper_getTranslatedPoints","normalizedDataArr","clipElement","clipPathElement","renderer_utils_clipElement","bar_slicedToArray","barWidthMetrics","barHeightMetrics","barWidthOffsets","barHeightOffsets","barWidth","barWidthOffset","barHeight","barHeightOffset","uniqueFieldType","filterData","pointFound","bar_toConsumableArray","p2","tick_default_config_defaultConfig","tick_renderer","ticksEnter","tick_tick","_config$span","xSpan","ySpan","x0Px","sanitizeEncoding","layer_factory","compositeLayers","factoryObj","setLayerRegistry","reg","_layerRegistry","getSerializedConf","layerDef","serializedDefs","defs","unitLayerDef","sDef","parseLayerDefinition","layerType","strs","layer_factory_toConsumableArray","layer_factory_parseLayerDefinition","getLayerInstance","layerRegistry","composeLayers","layerDefs","sanitizeLayerConfig","DEFAULT_LAYERS","defaults_defineProperty","_DEFAULT_LAYERS","ROWS","COLUMNS","COL","ROW","enums_constants_COLOR","enums_constants_SHAPE","enums_constants_SIZE","constants_LEFT","constants_RIGHT","CELL","X_AXES","Y_AXES","ENTRY_CELLS","EXIT_CELLS","constants_RADIUS","constants_ANGLE","PRIMARY","SECONDARY","local_options","local_options_defineProperty","_CONFIG$ROWS$COLUMNS$","simple_group","variable_variable","composed_vars","ComposedVars","composed_vars_classCallCheck","texts","composed_vars_possibleConstructorReturn","vars","_vars","member","simple_var","SimpleVariable","simple_var_classCallCheck","simple_var_possibleConstructorReturn","oneVar","_oneVar","dtFormat","fieldDef","varInst","field_sanitizer_convertToVar","convertToVar","datamodel","field_sanitizer_transformFields","transformFields","normalizedFields","normalizeFields","norFields","orderFields","fieldArray","dimensionArr","measureArr","temporalArr","categoricalArr","fieldList","numOfMeasures","allDimensions","field_sanitizer_toConsumableArray","temporal","categorical","field_sanitizer_orderFields","field_sanitizer_slicedToArray","rowsInfo","columnsInfo","rowDimensions","rowMeasures","rowTemporalFields","rowCategoricalFields","columnDimensions","columnMeasures","columnTemporalFields","columnCategoricalFields","visual_encoder","_fieldInfo","_axisFrom","_headerFrom","__headerFrom","axisFrom","_getHeaderAxisFrom","group_utils_getHeaderAxisFrom","_getHeaderAxisFrom2","visual_encoder_slicedToArray","rowHeader","rowAxis","_getHeaderAxisFrom3","_getHeaderAxisFrom4","colHeader","colAxis","column","headerFrom","scaleMaps","data_type_scale_map_dataTypeScaleMap","encoder_helper_createSimpleAxis","createSimpleAxis","axisConfig","axesCreators","Cls","encoder_helper_generateAxisFromMap","generateAxisFromMap","groupAxes","axisKey","currentAxes","cacheMaps","getAxisKey","getAxisConfig","axisInfo","axisOrientation","userAxisConfig","axis_orientation_namespaceObject","LEFT","RIGHT","TOP","BOTTOM","encoder_helper_getAxisConfig","_iteratorNormalCompletion","_didIteratorError","_iteratorError","_step","_iterator","encoder_helper_slicedToArray","err","getIndex","arrIndex","cartesian_encoder","geomCellAxes","projections","rowFields","columnFields","rowIndex","columnIndex","xAxes","yAxes","facets","counter","primaryFacets","secondaryFacets","primaryFields","secondaryFields","primaryLen","secondaryLen","projArr","primaryField","secondaryField","facet","existIndex","axisFromIndex","cartesian_encoder_get","CartesianEncoder","groupedModel","encodingObj","retriveDomainFromData","layerArray","serializedLayers","userLayerConfig","colField","colFieldName","rowField","configs","rowFieldName","rowFieldType","getDefaultMark","colFieldType","encoder_helper_getDefaultMark","defConfigs","layerConfigs","getLayerConfFromFields","colFields","encodingArr","encoder_helper_toConsumableArray","colFieldExist","rowFieldExist","layerConf","mergedLayerConf","serializedLayerConfig","cartesian_encoder_toConsumableArray","polar_encoder","pieAxes","sanitizedRows","sanitizedColumns","polar_encoder_get","sanitizedFields","typeIndex","fieldSet","polar_encoder_toConsumableArray","facetFields","parentModel","layerEncoding","encType","measureField","polar_encoder_defineProperty","allFields","retinal_encoder","newAxes","createRetinalAxis","fieldProps","group_utils_getAxisType","encoder_helper_createRetinalAxis","encodingConfigs","group_utils_initStore","initStore","group_utils_defineProperty","group_utils_isDistributionEqual","isDistributionEqual","group_utils_toConsumableArray","rowType","initializeCacheMaps","cellMap","xAxesMap","yAxesMap","entryCellMap","exitCellMap","scaleType","group_utils_headerCreator","headerCreator","fieldHeaders","TextCell","getHeaderText","headers","rowLength","header","getAxisType","getHeaderAxisFrom","userAxisFromConfig","_fields","group_utils_slicedToArray","firstField","secondField","firstFieldType","secondFieldType","setFacetsAndProjections","encoder","_encoder$simpleEncode","simpleEncoder","getFacetsAndProjections","group_utils_createSelection","createSelection","appendObj","idFn","dataSelect","mergedSelection","group_utils_getBorders","getBorders","matrices","showRowBorders","showColBorders","showValueBorders","valueMatrix","_rows","leftRows","rightRows","_columns","topColumns","bottomColumns","_encoder$fieldInfo","allDimensionLength","allMeasuresLength","allTemporalFieldsLength","getRowBorders","borders","getColumnsBorders","getValueBorders","borderTypeRow","borderTypeCol","group_utils_getValueBorders","action_behaviour_map_defineProperty","actions_namespaceObject","behaviours_namespaceObject","reactive_props_CONFIG","reactive_props_DATA","reactive_props_AXES","LAYERDEFS","reactive_props_WIDTH","reactive_props_HEIGHT","reactive_props_MOUNT","primaryXAxisUpdated","primaryYAxisUpdated","secondaryXAxisUpdated","secondaryYAxisUpdated","reactive_props_TRANSFORM","DATADOMAIN","LAYERSCREATED","FIELDS","TIMEDIFFS","LAYERAXISINDEX","helper_getLayerFromDef","getLayerFromDef","existingLayer","_layerDeps","instanceArr","resolveEncodingTransform","layerInst","resolvable","depArr","resolved","helper_createLayers","createLayers","layerDefinitions","layersMap","_layersMap","markSet","components","layerIndex","layersArr","_layersArr","markId","defArr","instanceValues","src_helper_toConsumableArray","layerdeps","getDependencyOrder","graph","dependencyOrder","visited","visit","helper_attachAxisToLayers","attachAxisToLayers","layerAxisIndex","axesObj","axisInf","helper_getLayerAxisIndex","getLayerAxisIndex","_layer$config","helper_unionDomainFromLayers","unionDomainFromLayers","getDataDomain","domainValues","layerDomain","fieldDomain","fieldStr","unionDomain","dom","common_utils_unionDomain","getLayersBy","searchBy","removeLayersBy","inst","grid_lines_LINEAR","grid_lines_getGridLayerDefinitions","getGridLayerDefinitions","getDefaultVisibilty","getLayerDefinition","_definition","_encoding","gridLines","gridBands","gridLineColor","zeroLineColor","gridBandColor","isLinearScale","grid_lines_defineProperty","isNegativeDomain","grid_lines_renderGridLineLayers","renderGridLineLayers","createGridLineLayer","vuConf","_gridbands","_gridlines","atomicDef","sConf","grid_lines_createGridLineLayer","getGridLayerData","gridData","jsonData","_jsonData$push","grid_lines_getGridLayerData","entry","_entry","grid_lines_slicedToArray","parentGroupClass","src_default_config_defaultConfig","trackerClassName","arcLayerClassName","sideEffectClassName","src_local_options","src_local_options_defineProperty","_CONFIG$LAYERDEFS$AXE","prevAxes","cachedData","local_options_toConsumableArray","oldData","axisMap","1","axisProps","src_listener_map_listenerMap","listener_map_slicedToArray","reactive_props_namespaceObject","isReverse","layerDefsValue","fieldsVal","_layerAxisIndex","_lifeCycleManager","notify","_timeDiffsByField","layersCreated","dataModelVal","layerAxisIndexVal","axesVal","transformDataModels","transformVal","_transformedDataModels","attachDataToLayers","transformedDataModels","dataSource","_dimensionMeasureMap","getDimensionMeasureMap","retinalEncodingsAndMeasures","_layer$encodingFields","_retinalEncodingsAndM","helper_getDimensionMeasureMap","retinalFields","dataDomain","updateAxisDomain","src_props_PROPS","props_defineProperty","_PROPS","dispatchQueuedSideEffects","firebolt_helper_toConsumableArray","helper_registerListeners","registerImmediateListener","originalData","createSelectionSet","attachPropagationListener","registerChangeListener","firebolt_helper_slicedToArray","mapActionsAndBehaviour","clearActionHistory","payloadGenerator","selectionDataModel","propPayload","getRangeFromData","propCriteria","isDimension","payload_generator_toConsumableArray","payload_generator_getRangeFromData","__default","data_propagator_propagateValues","propagateValues","propagationFieldInf","propagationFields","sideEfffects","mergedModel","sourceUnit","sourceCanvas","parentAlias","propagationBehaviour","propFields","facetByFields","getModelWithFacetData","schema1","data1","schema2","data2","data_propagator_toConsumableArray","data_propagator_getModelWithFacetData","groupId","behaviourInstance","propagationConf","sourceBehaviour","enabled","propConf","actionInf","propInf","visual_unit_src_firebolt","UnitFireBolt","src_firebolt_classCallCheck","firebolt_possibleConstructorReturn","unitId","aliasName","propagationSourceCanvas","sourceUnitId","sourceSideEffects","sideEffectInstances","actionOnSource","mappedEffects","sideEffectChecker","enabledFn","payloadFn","sourceIdentifierFields","sourceBehaviours","firebolt_get","visual_unit","VisualUnit","registry","visual_unit_classCallCheck","onlayerdraw","_renderedResolve","_renderedPromise","lifeCycleManager","visual_unit_defineProperty","behavioural_namespaceObject","side_effects_namespaceObject","_firebolt","lock","unlock","_rootSvg","class","renderLayers","orderedLayers","layerParentGroup","helper_renderLayers","_sideEffectGroup","createSideEffectGroup","helper_createSideEffectGroup","rootSvg","layerName","getLayerByName","serializedDef","visual_unit_toConsumableArray","lyr","axisConf","alignZeroLine","adjustedDomain","getAdjustedDomain","y1ratio","y2ratio","allSameSign","updateDomainCache","dimValue","getNearestDimensionalValue","entryVal","helper_getNearestDimensionalValue","pointInf","getMarkInfFromLayers","markInf","parsedIdentifiers","transposeArray","getPointsFromIdentifiers","_parentContainer","getFieldNames","fields1","matrix_model_toConsumableArray","createSelectedDataModel","matrix_model_uniqueKeyGenerator","uniqueKeyGenerator","keyArray","newDm","nextDepthUniqueValues","projectRows","allColumnProjections","rowProjections","optionalProjections","projectFields","_getFieldNames","_getFieldNames2","matrix_model_slicedToArray","projFieldNames","colProjFieldNames","pushToMatrix","_matrix$rowIndex","facetInfo","colProjections","rowProj","projIdx","_getFieldNames3","_getFieldNames4","rowProjFieldNames","projectedDm","cell_creator_createValueCells","createValueCells","suppliedLayers","GeomCell","matrixLayers","horizontalAxis","verticalAxis","datamodelTransform","layerConfigArr","getLayerConfig","normalizedColumns","normalizedRows","geomCellKey","getCellKey","columnId","allFacets","cell_creator_toConsumableArray","rowFacets","colFacets","geomCell","updateCells","facetKey","cell_creator_updateCells","cell_creator_createAxisCells","createAxisCells","axisInst","_axisInst$config","AxisCell","BlankCell","cell_creator_headerPlaceholderGn","headerPlaceholderGn","selectionObj","facetConfig","selectionKeys","keySet","createTextCells","cell_creator_createTextCells","cell_creator_generatePlaceholders","generatePlaceholders","facetsAndProjections","encoders","valuesMatrix","rowKeys","columnKeys","takeAxisFrom","takeHeaderFrom","axisPlaceholderGn","selObj","axesMatrix","selObjProp","axesForDraw","rowsPrimary","rowPrime","columnsPrimary","colPrime","cell_creator_axisPlaceholderGn","_selectionObj","rowsSecondary","columnsSecondary","getObjects","section","hContext","cell_creator_computeMatrices","computeMatrices","componentRegistry","globalConfig","autoGroupBy","otherEncodings","matrixGnContext","getCellDef","isRowSizeEqual","isColumnSizeEqual","colCells","rowCells","resetSimpleAxes","newCacheMap","valueCellContext","serializeLayerConfig","extractFields","layerFields","flattenArray","group_utils_extractFields","getFieldsFromSuppliedLayers","suppliedLayerConfig","group_utils_getFieldsFromSuppliedLayers","aggregationFns","valueMatrixInfo","getMatrixModel","rowDataModels","colProj","firstLevelRowKeys","_rowDataModels","_getFieldNames5","rowFacetFieldNames","selectedDataModel","_rowDataModels2","colFacetNames","firstLevelColumnKeys","dme","rIndex","cIndex","transposedColKeys","matrix_model_getMatrixModel","valueCellsCreator","placeholder","createUnits","_mutateAxesFromMap","mutateAxesFromMap","xAxisSet","yAxisSet","axisId","group_utils_mutateAxesFromMap","_generateMatrices","generateMatrices","leftHeaders","topHeaders","bottomHeaders","rightHeaders","cell_creator_slicedToArray","rowSec","colSec","leftFacets","rightFacets","leftMatrix","rightMatrix","topMatrix","bottomMatrix","currentBottomLength","setAvailableSpace","rowMatrix","columnMatrix","matrix_resolver","MatrixResolver","matrix_resolver_classCallCheck","_registry","_layerConfig","_matrixLayers","_rowMatrix","_columnMatrix","_valueMatrix","_facets","_projections","_datamodelTransform","_units","_cacheMaps","_axes","maps","_rowCells","_colCells","matrix_resolver_toConsumableArray","_horizontalAxis","_verticalAxis","matrixType","sideEffectRegistry","units","unitConfig","extractUnitConfig","group_utils_extractUnitConfig","_getAllFields","retContext","getRetinalFieldsDomain","retinalEncoder","setCommonDomain","_axes2","retinalAxes","updateModel","placeholders","bottomLeft","bottomRight","_dependencies3","matrix_resolver_slicedToArray","topCols","bottomCols","rowHeaders","blankCellCreator","showHeaders","footers","topLeft","topRight","value_matrix","ValueMatrix","matrixArr","value_matrix_classCallCheck","instancesById","rIdx","cIdx","cellValue","colIndex","_instancesById","_matrix","_filterFn","rowWidth","currentRowWidth","rowHeight","currentRowHeight","change_listener_setupChangeListeners","setupChangeListeners","change_listener_toConsumableArray","matrixConfig","retinalConfig","sanitizeRetinalConfig","retinalConf","confValue","getEncoder","group_utils_getEncoder","groupType","fieldSanitizer","setAxisAndHeaders","placeholderInfo","getMatrices","_groupedDataModel","createRetinalAxes","setDomains","setMatrixInstances","_composition","change_listener_setMatrixInstances","cornerMatrices","createHeaders","metaData","border","visual_group_props_PROPS","hasDataUpdated","matrixInstance","cellRegistry","visual_group","VisualGroup","visual_group_classCallCheck","visual_group_possibleConstructorReturn","componentSubRegistry","_matrixInstance","_selection","_placeholderInfo","_cornerMatrices","variable","findInGroup","channel","group_utils_this","facetType","projType","group_utils_findInGroup","getRetinalAxes","getSimpleAxes","_resolver$getAllField","visual_group_defineProperty","firebolt_behavioural_select","existingRemoveSet","enums_selection_namespaceObject","select_toConsumableArray","firebolt_action_behaviour_map_actionBehaviourMap","firebolt_action_behaviour_map_defineProperty","action_behaviour_map_actionBehaviourMap","action_behaviour_map_propagationBehaviourMap","propagationBehaviourMap","_propagationBehaviour","src_firebolt_behaviour_effect_map_behaviourEffectMap","firebolt_behaviour_effect_map_defineProperty","firebolt_behaviour_effect_map_behaviourEffectMap","propagationSideEffects","_propagationSideEffec","SCALE_FUNCTIONS","VALUE","helper_propagate","canvasAlias","check","assembleModelFromIdentifiers","_loop2","fieldVal","src_firebolt_helper_toConsumableArray","legend_firebolt_LegendFireBolt","_Firebolt","LegendFireBolt","legend_firebolt_classCallCheck","legend_firebolt_possibleConstructorReturn","legend_firebolt_inherits","legend_firebolt_createClass","behaviourName","firebolt_physical_hover","getCriteriaFromData","firebolt_physical_click","firebolt_physical_physicalActions","firebolt_physical_defineProperty","physical_physicalActions","boundingBox","gradientDimensions","axisScale","rangeShifter","drag_defineProperty","getSelectionCriteria","selectionBoxMeasure","drawingInfMeasure","subjectStartPoint","side_effects_selection_box","gradientDimension","legendGradContainer","legendSelGroup","enterFn","getMousePos","boundingClientRect","selection_box_drag_defineProperty","fadeOut","physical_selection_box_drag_selectionBoxDrag","legend_highlighter_strategies_strategies","brighten","legend_highlighter","LegendHighlighter","legend_highlighter_classCallCheck","legend_highlighter_possibleConstructorReturn","legend_props_PROPS","legendContainer","resetLogicalSpace","title","_title","ALIGN","DEFAULT_MEASUREMENT","LEGEND_TITLE","legend_defaults_DEFAULT_CONFIG","borderStyle","borderColor","bounds","upper","defaults_ICON_MAP","ICON_MAP","legend_helper_getScaleInfo","getScaleInfo","steps","scaleFn","legend_helper_getInterpolatedData","getInterpolatedData","domainForLegend","interpolatedFn","getDomainBounds","domainBounds","domainLeg","ele","legend_helper_defineProperty","getScaleFactor","simple_legend","SimpleLegend","simple_legend_classCallCheck","_metaData","_fieldName","_labelManager","_cells","defaultMeasurement","_computedStyle","firebolt_behavioural_namespaceObject","firebolt_side_effects_namespaceObject","_canvasAlias","getItemMeasures","_labelManager$getOriS","effPadding","effBorder","effMargin","dataFromScale","titleSpace","getTitleSpace","titleHeight","titleWidth","labelSpaces","getLabelSpaces","_computeItemSpaces","computeItemSpaces","maxItemSpaces","textOrientation","itemSpaces","iconSpaces","maxIconWidth","itemSpace","iconSpace","legend_helper_computeItemSpaces","titleSpaces","_measurement2","titleCreator","titleContainer","legend_helper_titleCreator","_config4","_measurement3","renderTitle","simple_legend_defineProperty","legendOrientation","position_config_defineProperty","datasets","itemContainerMeasures","getStepSpacesInfo","iconHeight","iconWidth","stepPadding","horizontal","vertical","_legendOrientation","positionConfig","_positionConfig","alignmentMap","_alignmentMap","itemStack","_itemStack","renderer_createLegendSkeleton","createLegendSkeleton","gradWidth","gradHeight","maxGradHeight","maxGradWidth","legendBody","legendItem","getItemContainers","legendInstance","positionObj","renderer_getItemContainers","renderer_createItemSkeleton","createItemSkeleton","itemSkeleton","alignClass","renderer_applyItemStyle","applyItemStyle","measureType","stepColorCheck","_context$measurement","renderer_renderIcon","renderIcon","defaultIcon","renderer_checkPath","legend_renderer_createShape","discrete_legend","_getScaleInfo","discrete_legend_toConsumableArray","discrete_legend_defineProperty","discrete_legend_get","renderDiscreteItem","_context$measurement2","_item$icon","text-align","renderer_renderDiscreteItem","DiscreteLegend","getGradientDomain","accumulator","currentValue","MAX_VALUE","MIN_VALUE","gradient_helper_createLegendSkeleton","legendGradSvg","legendGradCont","linearGradient","makeLinearGradient","gradient_helper_makeLinearGradient","legendRect","gradient_helper_renderAxis","gradient_legend","gradient_legend_toConsumableArray","gradient_legend_defineProperty","newAxis","gradient_helper_createAxis","axisSpace","axisDomainLength","_legendGradientSvg","gradient_legend_get","renderGradient","_createLegendSkeleton","gradient_helper_renderGradient","GradientLegend","step_legend","step_legend_toConsumableArray","step_legend_defineProperty","lowerBounds","upperBounds","step_legend_get","StepLegend","stepData","position_config_stepData","renderStepItem","_context$config3","_context$measurement3","_item$icon2","_positionConfig$posit","renderer_renderStepItem","PADDING","BORDER","MARGIN","TITLE_TEMPLATE_NOT_ALLOWED_TAGS","LEGEND_TYPE_MAP","constants_defineProperty","src_constants_ORDINAL","_LEGEND_TYPE_MAP","src_constants_LINEAR","operators_share","share","operators_toConsumableArray","operators_html","strings","htmlCode","expLn","frag","createDocumentFragment","treeShakeNode","nodeType","Node","ELEMENT_NODE","tagName","childNodes","actionModel","ActionModel","action_model_classCallCheck","_registrableComponents","canvas","once","visualGroup","_cell$valueOf$firebol","registerPropagationBehaviourMap","_len4","_key4","dissociateBehaviour","_len5","_key5","dissociateSideEffect","policy","registrableComponents","mergedPolicy","aliases","comp","*","propagationPayload","propagationCanvas","action_model_defaultPolicy","crossInteractionPolicy","src_defaults_DEFAULT_CONFIG","legend","minHeight","collapse","src_options","isInteger","minUnitWidth","minUnitHeight","oldConf","defConfig","enums_constants_WIDTH","enums_constants_HEIGHT","layout_src_enums_constants_TOP","src_enums_constants_LEFT","src_enums_constants_RIGHT","layout_src_enums_constants_BOTTOM","constants_CENTER","ROW_LEFT","ROW_RIGHT","COLUMN_BOTTOM","COLUMN_TOP","ROW_SPAN","COL_SPAN","ROW_ROOT","COLUMN_ROOT","generic_layout","GenericLayout","generic_layout_classCallCheck","_matrices","_centerMatrix","_mountPoint","DEFAULT_CONFIGURATION","grid_layout_defaults_defineProperty","_FieldNames$BORDER","_DEFAULT_CONFIGURATIO","DEFAULT_MEASUREMENTS","_DEFAULT_MEASUREMENTS","BLANK_BORDERS","span_maker_columnFilter","columnFilter","colData","colIdx","previousRow","currentRow","prevCell","nextRow","prevRow","calcRowSpan","isNull","calcColSpan","span_maker_mask","mask","filteredRow","_temp","span_maker_toConsumableArray","applyBorders","borderType","applyRowBorders","showBorders","applyColBorders","renderMatrix","containerForMatrix","_cellSpanMaker","cellSpanMaker","viewMatrix","spans","ridx","currSpan","renderTable","rowData","availHeight","utils_nest","findInPage","page","combineMatrices","isTransposed","joinedMatrix","utils_toConsumableArray","computeLogicalSpace","maxMeasures","_config$isTransposed","unitMeasures","_getMeasureInfo","getMeasureInfo","firstMeasure","secondMeasure","utils_getMeasureInfo","minMeasures","getMinMeasures","_logicalSpace","utils_defineProperty","valueItem","maxMeasure","firstMeasureValue","secondMeasureValue","valueArray","_item$space","fMeasure","sMeasure","utils_getLogicalSpace","extraCellsRemover","beg","visual_matrix_props_PROPS","visual_matrix_default_config_defaultConfig","distribution","extraCellLengths","visual_matrix","VisualMatrix","visual_matrix_classCallCheck","_lastLevelKey","_primaryMatrix","_secondaryMatrix","_maxMeasures","_availableSpace","_breakPointer","_layoutMatrix","_tree","createTree","setLogicalSpace","_createTree2","matrixTree","lastLevelKey","layoutMatrix","primaryMatrix","secondaryMatrix","breakPage","primaryMatrixLength","newMatrix","keyLength","utils_createTree","createMatrixEachLevel","_arr$i","heightMeasures","populateMaxMeasures","widthMeasures","calculateDepth","viewableMatrix","createViewPortMatrix","viewableMeasures","redistribute","childDepth","maxHeights","maxWidths","matrixInst","mWidth","mHeight","redistributeColumnWise","redistributeRowWise","cellDimOptions","matrixIndex","_getCellDimensions","getCellDimensions","heights","widths","rowHeights","columnWidths","primary","secondary","begCellLen","endCellLen","createMatrixInstances","matrixInfo","layout","breakPointer","brokenMatrix","breakMatrix","nextLevel","removeExtraCells","rHeights","cWidths","gutter","spaceTakenByColumn","spaces","getDistributedHeight","heightWithoutGutter","distSum","gutterSum","availableHeight","colLen","distHeight","borderWidth","spaceTakenByRow","getDistributedWidth","layoutConfig","availableWidth","distWidth","rowLen","oldLogicalSpace","mainMeasures","computedMeasures","colHeight","colWidth","setMatrixMeasurement","computations_setAvailableSpace","setViewSpaces","pointerType","viewSpaces","pointer","computations_defineProperty","grid_layout_layout","GridLayout","layout_classCallCheck","layout_possibleConstructorReturn","_layoutId","generateVisualMatrices","begColCells","endColCells","gutterSpace","center","_top","layout_helper_slicedToArray","_center","_bottom","layout_helper_toConsumableArray","centerMatrix","layout_helper_generateVisualMatrices","layout_get","computeLayoutMeasurements","_layout$measurement","rowMatrixWidth","getMatrixMeasurement","columnMatrixWidth","columnViewPages","getViewableSpaces","columnViewSpace","columnPointer","columnMatrixHeight","rowMatrixHeight","rowViewableSpaces","computations_toConsumableArray","rowWidthsPrimary","rowWidthsSecondary","columnViewableSpaces","columnHeightsPrimary","columnHeightsSecondary","computations_computeLayoutMeasurements","setViewInformation","pageNumber","pageType","totalPages","getViewInformation","viewMatricesInfo","layout_defineProperty","renderGrid","currentPage","rowPointer","getViewMatrices","rowMatrices","getViewableData","columnMatrices","centralMatrixPointer","rowMatrixLen","columnMatrixLen","rowPages","columnPages","layoutDimensions","getViewMeasurements","_layout$measurement2","_layout$config3","leftWidth","rightWidth","topHeight","bottomHeight","viewWidth","viewHeight","viewInfo","_getViewInformation3","renderMatrices","transaction_support","INTERFACE_IMPl","visual_cell_src_enums_constants_LEFT","visual_cell_src_enums_constants_RIGHT","visual_cell_src_enums_constants_BOTTOM","visual_cell_src_enums_constants_TOP","visual_cell_src_enums_constants_CLASSPREFIX","constants_HEADER","enums_constants_DATA","enums_constants_AXES","constants_FACET_BY_FIELDS","constants_FIELDS","enums_constants_TRANSFORM","LAYER_DEF","src_enums_constants_CONFIG","DETAIL_FIELDS","cell_type_TEXT","cell_type_AXIS","GEOM","BLANK","simple_cell","SimpleCell","simple_cell_classCallCheck","enums_defaults_DEFAULT_CONFIG","enums_defaults_defineProperty","_CONSTANTS$MARGIN","_DEFAULT_CONFIG","DEFAULT_PROPS","availWidth","geomProps","caption","packages_visual_cell_src_props_PROPS","src_props_defineProperty","visual_cell_src_props_PROPS","axis_cell","axis_cell_classCallCheck","axis_cell_possibleConstructorReturn","_availHeight","_availWidth","computeAxisSpace","logicalWidth","logicalHeight","spaceFixer","_axis$getLogicalSpace","wrapperDiv","blank_cell","blank_cell_classCallCheck","blank_cell_possibleConstructorReturn","src_text_cell","text_cell_classCallCheck","text_cell_possibleConstructorReturn","_className","_minTickDiff","computeTextSpace","verticalAlign","textAlign","geom_cell","geom_cell_classCallCheck","geom_cell_possibleConstructorReturn","_unit","_datamodel","_facetByFields","_transform","_caption","lockModel","unlockModel","captionSpace","computeGeomSpace","getCaptionSpace","captionDom","DEFAULT_PLACEHOLDERS","src_defaults_defineProperty","_DEFAULT_PLACEHOLDERS","cell_registry","createHeading","cellType","title_maker_headerCreator","legend_maker_legendInitializer","legendInitializer","legendConfig","prevLegends","legends","headerHeight","legendCreator","LegendCls","dataset","scaleProps","_scale$config","legend_maker_legendCreator","dataInfo","legendMeasures","getGroupByData","setLegendMeasures","layout_maker_getRenderDetails","getRenderDetails","_mount$getBoundingCli","heightAttr","widthAttr","visGroup","_visGroup$placeholder","titleConfig","subtitleConfig","subtitle","legendPosition","layoutArrangement","arrangeComponents","_titleLayouts","legendLayouts","component_resolver_defineProperty","titleLayouts","src_constants_TOP","src_constants_BOTTOM","component_resolver_arrangeComponents","availableHeightForCanvas","availableWidthForCanvas","_createHeaders","canvasHeight","canvasWidth","headerOptions","resolveTitleSubTitleContent","rawContent","_sanitize","escapeHTML","htmlEscapes","&","<",">","\"","'","/","title_maker_resolveTitleSubTitleContent","_createHeading","title_maker_createHeaders","createLegend","legend_maker_createLegend","legendSpace","getLegendSpace","legendInfo","legend_maker_getLegendSpace","legendWidth","legendHeight","canvases","mountSpace","TITLE_CONFIG","SUB_TITLE_CONFIG","localOptions","canvas_local_options_defineProperty","_localOptions","canvasOptions","_sanitized","_canvasOptions","sub","renderer_renderHeader","renderHeader","headerCell","cont","renderComponents","_getSkeletons","getSkeletons","innerContainer","layoutType","renderer_getSkeletons","prepareGridContainer","innerSel","renderer_prepareGridContainer","setLabelRotationForAxes","renderLegend","legendComponents","sectionComponents","legendMount","legWidth","legHeight","sections","currHeight","currWidth","leg","renderer_renderLegend","shiftHeaders","shifter","renderer_shiftHeaders","helper_setupChangeListener","setupChangeListener","allOptions","_allOptions","canvas_helper_toConsumableArray","equalityChecker","option","dispatchProps","_cachedProps","applyInteractionPolicy","policies","firebolt_defaultInteractionPolicy","defaultInteractionPolicy","isMeasure","canvas_firebolt_toConsumableArray","getFieldsFromChannel","colDim","fieldInf","unitFireBolt","unitColFacets","equals","unitRowFacets","propagateWith","defaultCrossInteractionPolicy","propagationCanvasAlias","propagationUnit","canvas_firebolt","GroupFireBolt","canvas_firebolt_classCallCheck","_interactionPolicy","_crossInteractionPolicy","changeBehaviourStateOnPropagation","changeSideEffectStateOnPropagation","canvas_canvas","Canvas","globalDependencies","canvas_classCallCheck","canvas_possibleConstructorReturn","_transactor","canvas_slicedToArray","initedComponents","initCanvas","register","_getRenderDetails","prepareLayout","triggerReflow","promises","all","getAxes","initialSettings","regEntry","COMPONENTS","SUBREGISTRIES","regObj","globalCache","defaultRegistry","overrideRegistryDefinitions","overrideRegistry","muze_muze","muze","_transactor2","muze_slicedToArray","env","globalStore","componentSubRegistryDef","settings","withSettings","enableChainedTransaction","transactionModel","transactionEndpoint","transactionItems","_slicedToArray","SmartlabelManager_default","SideEffects","standards","SurrogateSideEffect","SpawnableSideEffect","Behaviours","PersistentBehaviour","VolatileBehaviour","DataModel","muze_package","layerFactory","operators_namespaceObject","utils","require","lookupWhat","lookupDetails","lookupTarget","deps","__webpack_exports__"],"mappings":"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","file":"muze.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"muze\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"muze\"] = factory();\n\telse\n\t\troot[\"muze\"] = factory();\n})(window, function() {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 7);\n","!function(e,t){\"object\"==typeof exports&&\"object\"==typeof module?module.exports=t():\"function\"==typeof define&&define.amd?define(\"DataModel\",[],t):\"object\"==typeof exports?exports.DataModel=t():e.DataModel=t()}(window,function(){return function(e){var t={};function n(r){if(t[r])return t[r].exports;var i=t[r]={i:r,l:!1,exports:{}};return e[r].call(i.exports,i,i.exports,n),i.l=!0,i.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(e,\"__esModule\",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&\"object\"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,\"default\",{enumerable:!0,value:e}),2&t&&\"string\"!=typeof e)for(var i in e)n.d(r,i,function(t){return e[t]}.bind(null,i));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,\"a\",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p=\"\",n(n.s=1)}([function(e){e.exports={name:\"datamodel\",description:\"Relational algebra compliant in-memory tabular data store\",homepage:\"https://github.com/chartshq/datamodel\",version:\"2.0.2\",license:\"MIT\",main:\"dist/datamodel.js\",author:\"Charts.com \",keywords:[\"datamodel\",\"data\",\"relational\",\"algebra\",\"model\",\"muze\",\"fusioncharts\",\"table\",\"tabular\",\"operation\"],repository:{type:\"git\",url:\"https://github.com/chartshq/datamodel.git\"},contributors:[{name:\"Akash Goswami\",email:\"akash@charts.com\"},{name:\"Subhash Haldar\",email:\"subhash@charts.com\"},{name:\"Rousan Ali\",email:\"rousan@charts.com\",url:\"https://rousan.io\"},{name:\"Ujjal Kumar Dutta\",email:\"ujjal@charts.com\"}],dependencies:{\"d3-dsv\":\"^1.0.8\"},devDependencies:{\"babel-cli\":\"6.26.0\",\"babel-core\":\"^6.26.3\",\"babel-eslint\":\"6.1.2\",\"babel-loader\":\"^7.1.4\",\"babel-plugin-transform-runtime\":\"^6.23.0\",\"babel-preset-env\":\"^1.7.0\",\"babel-preset-es2015\":\"^6.24.1\",\"babel-preset-flow\":\"^6.23.0\",chai:\"3.5.0\",\"cross-env\":\"^5.0.5\",eslint:\"3.19.0\",\"eslint-config-airbnb\":\"15.1.0\",\"eslint-plugin-import\":\"2.7.0\",\"eslint-plugin-jsx-a11y\":\"5.1.1\",\"eslint-plugin-react\":\"7.3.0\",\"istanbul-instrumenter-loader\":\"^3.0.0\",jsdoc:\"3.5.5\",json2yaml:\"^1.1.0\",karma:\"1.7.1\",\"karma-chai\":\"0.1.0\",\"karma-chrome-launcher\":\"2.1.1\",\"karma-coverage-istanbul-reporter\":\"^1.3.0\",\"karma-mocha\":\"1.3.0\",\"karma-spec-reporter\":\"0.0.31\",\"karma-webpack\":\"2.0.3\",marked:\"^0.5.0\",mocha:\"3.4.2\",\"mocha-webpack\":\"0.7.0\",\"transform-runtime\":\"0.0.0\",webpack:\"^4.12.0\",\"webpack-cli\":\"^3.0.7\",\"webpack-dev-server\":\"^3.1.4\"},scripts:{test:\"npm run lint && npm run ut\",ut:\"karma start karma.conf.js\",utd:\"karma start --single-run false --browsers Chrome karma.conf.js \",build:\"webpack --mode production\",\"build:dev\":\"webpack --mode development\",start:\"webpack-dev-server --config webpack.config.dev.js --mode development --open\",lint:\"eslint ./src\",\"lint-errors\":\"eslint --quiet ./src\",docs:\"rm -rf yaml && mkdir yaml && jsdoc -c jsdoc.conf.json\"}}},function(e,t,n){var r=n(2);e.exports=r.default?r.default:r},function(e,t,n){\"use strict\";n.r(t);var r={};n.r(r),n.d(r,\"DataFormat\",function(){return o}),n.d(r,\"DimensionSubtype\",function(){return u}),n.d(r,\"MeasureSubtype\",function(){return c}),n.d(r,\"FieldType\",function(){return f}),n.d(r,\"FilteringMode\",function(){return s});var i={};n.r(i),n.d(i,\"DSVArr\",function(){return Me}),n.d(i,\"DSVStr\",function(){return Ve}),n.d(i,\"FlatJSON\",function(){return Ye}),n.d(i,\"Auto\",function(){return Be});var a={};n.r(a),n.d(a,\"sum\",function(){return ct}),n.d(a,\"avg\",function(){return ft}),n.d(a,\"min\",function(){return st}),n.d(a,\"max\",function(){return lt}),n.d(a,\"first\",function(){return dt}),n.d(a,\"last\",function(){return pt}),n.d(a,\"count\",function(){return ht}),n.d(a,\"sd\",function(){return vt});var o={FLAT_JSON:\"FlatJSON\",DSV_STR:\"DSVStr\",DSV_ARR:\"DSVArr\",AUTO:\"Auto\"},u={CATEGORICAL:\"categorical\",TEMPORAL:\"temporal\",GEO:\"geo\"},c={DISCRETE:\"discrete\"},f={MEASURE:\"measure\",DIMENSION:\"dimension\"},s={NORMAL:\"normal\",INVERSE:\"inverse\",ALL:\"all\"};function l(e,t){e.length>0&&e.split(\",\").forEach(function(e){var n=e.split(\"-\"),r=+n[0],i=+(n[1]||n[0]);if(i>=r)for(var a=r;a<=i;a+=1)t(a)})}var d=function(){function e(e,t){for(var n=0;n=0;)o=e[a+1],-1!==r.indexOf(o)&&i.push({index:a,token:o});return i},m.formatAs=function(e,t){var n,r=h(e),i=m.findTokens(t),a=m.getTokenDefinitions(),o=String(t),u=m.TOKEN_PREFIX,c=void 0,f=void 0,s=void 0;for(s=0,n=i.length;s=0;d--)(f=a[d].index)+1!==l.length-1?(void 0===u&&(u=l.length),s=l.substring(f+2,u),l=l.substring(0,f+2)+RegExp.escape(s)+l.substring(u,l.length),u=f):u=f;for(d=0;d1){n=Math.abs(r[1]-r[0]);for(var i=2,a=r.length;i=y&&t.data=r.stops[r.stops.length-1]}).forEach(function(e){c[e.index]=r.stops[r.stops.length-1]+\"-\"+h}),r.stops.unshift(r.start),b=new Set(r.stops),dr.stops[r.stops.length-1]&&b.add(h),b=[].concat(function(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t3&&void 0!==arguments[3]&&arguments[3],i=arguments.length>4&&void 0!==arguments[4]?arguments[4]:G.CROSS,a=[],o=[],u=n||K,c=e.getFieldspace(),f=t.getFieldspace(),s=c.name,d=f.name,p=c.name+\".\"+f.name,h=L(c,f);if(s===d)throw new Error(\"DataModels must have different alias names\");return c.fields.forEach(function(e){var t=E({},e.schema);-1===h.indexOf(t.name)||r||(t.name=c.name+\".\"+t.name),a.push(t)}),f.fields.forEach(function(e){var t=E({},e.schema);-1!==h.indexOf(t.name)?r||(t.name=f.name+\".\"+t.name,a.push(t)):a.push(t)}),l(e._rowDiffset,function(e){var n=!1,p=void 0;l(t._rowDiffset,function(t){var l=[],v={};v[s]={},v[d]={},c.fields.forEach(function(t){l.push(t.data[e]),v[s][t.name]=t.data[e]}),f.fields.forEach(function(e){-1!==h.indexOf(e.schema.name)&&r||l.push(e.data[t]),v[d][e.name]=e.data[t]});var m=Ke(v[s]),y=Ke(v[d]);if(u(m,y)){var g={};l.forEach(function(e,t){g[a[t].name]=e}),n&&G.CROSS!==i?o[p]=g:(o.push(g),n=!0,p=e)}else if((i===G.LEFTOUTER||i===G.RIGHTOUTER)&&!n){var b={},_=c.fields.length-1;l.forEach(function(e,t){b[a[t].name]=t<=_?e:null}),n=!0,p=e,o.push(b)}})}),new ut(o,a,{name:p})}function z(e,t){var n=\"\"+e,r=\"\"+t;return nr?1:0}function X(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:z;return e.length>1&&function e(t,n,r,i){if(r===n)return t;var a=n+Math.floor((r-n)/2);return e(t,n,a,i),e(t,a+1,r,i),function(e,t,n,r,i){for(var a=e,o=[],u=t;u<=r;u+=1)o[u]=a[u];for(var c=t,f=n+1,s=t;s<=r;s+=1)c>n?(a[s]=o[f],f+=1):f>r?(a[s]=o[c],c+=1):i(o[c],o[f])<=0?(a[s]=o[c],c+=1):(a[s]=o[f],f+=1)}(t,n,a,r,i),t}(e,0,e.length-1,t),e}function Q(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);ta?\"desc\"===t?-1:1:0}}return r}function Z(e,t){var n=new Map,r=[];return e.forEach(function(e){var i=e[t];n.has(i)?r[n.get(i)][1].push(e):(r.push([i,[e]]),n.set(i,r.length-1))}),r}function ee(e,t,n){var r={label:e[0]};return t.reduce(function(t,r,i){return t[r]=e[1].map(function(e){return e[n[i].index]}),t},r),r}function te(e,t,n,r,i){var a={schema:[],data:[],uids:[]},o=(i=Object.assign({},{addUid:!1,columnWise:!1},i)).addUid,u=r&&r.length>0,c=[];if(n.split(\",\").forEach(function(t){for(var n=0;n=0;u--)i=t[u][0],a=t[u][1],(o=Ze(r,i))&&(S(a)?X(n,function(e,t){return a(e[o.index],t[o.index])}):j(a)?function(){var e=Z(n,o.index),t=a[a.length-1],i=a.slice(0,a.length-1),u=i.map(function(e){return Ze(r,e)});e.forEach(function(e){e.push(ee(e,i,u))}),X(e,function(e,n){var r=e[2],i=n[2];return t(r,i)}),n.length=0,e.forEach(function(e){n.push.apply(n,Q(e[1]))})}():(a=\"desc\"===String(a).toLowerCase()?\"desc\":\"asc\",X(n,$(o.type,a,o.index))));e.uids=[],n.forEach(function(t){e.uids.push(t.pop())})}(a,r),i.columnWise){var f=Array.apply(void 0,Q(Array(a.schema.length))).map(function(){return[]});a.data.forEach(function(e){e.forEach(function(e,t){f[t].push(e)})}),a.data=f}return a}function ne(e,t){var n={},r=[],i=[],a=[],o=e.getFieldspace(),u=t.getFieldspace(),c=o.fieldsObj(),f=u.fieldsObj(),s=o.name+\" union \"+u.name;if(!M(e._colIdentifier.split(\",\").sort(),t._colIdentifier.split(\",\").sort()))return null;function d(e,t,r){l(e._rowDiffset,function(e){var o={},u=\"\";i.forEach(function(n){var r=t[n].data[e];u+=\"-\"+r,o[n]=r}),n[u]||(r&&a.push(o),n[u]=!0)})}return e._colIdentifier.split(\",\").forEach(function(e){var t=c[e];r.push(E({},t.schema)),i.push(t.schema.name)}),d(t,f,!1),d(e,c,!0),new ut(a,r,{name:s})}function re(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t1&&void 0!==arguments[1]?arguments[1]:{},n={},r=t,i=e.getPartialFieldspace().getMeasure(),a=se.defaultReducer();return\"function\"==typeof t&&(a=t),Object.entries(i).forEach(function(e){var o=le(e,1)[0];\"string\"==typeof t[o]&&(r[o]=se.resolve(r[o])?se.resolve(r[o]):a),\"function\"!=typeof t[o]&&(r[o]=void 0),n[o]=r[o]||se.resolve(i[o].defAggFn())||a}),n}(e,n),o=e.getPartialFieldspace(),u=o.fieldsObj(),c=o.name,f=[],s=[],d=[],p={},h=[],v=void 0;Object.entries(u).forEach(function(e){var t=le(e,2),n=t[0],r=t[1];(-1!==i.indexOf(n)||a[n])&&(d.push(E({},r.schema)),\"measure\"===r.schema.type&&\"discrete\"!==r.schema.subtype?s.push(n):\"dimension\"!==r.schema.type&&\"discrete\"!==r.schema.subtype||f.push(n))});var m=0;return l(e._rowDiffset,function(e){var t=\"\";f.forEach(function(n){t=t+\"-\"+u[n].data[e]}),void 0===p[t]?(p[t]=m,h.push({}),f.forEach(function(t){h[m][t]=u[t].data[e]}),s.forEach(function(t){h[m][t]=[u[t].data[e]]}),m+=1):s.forEach(function(n){h[p[t]][n].push(u[n].data[e])})}),h.forEach(function(e){var t=e;s.forEach(function(n){t[n]=a[n](e[n])})}),r?(r.__calculateFieldspace(),v=r):v=new yt(h,d,{name:c}),v}function pe(e,t){var n=L(e.getFieldspace(),t.getFieldspace());return function(e,t){var r=!0;return n.forEach(function(n){r=!(e[n].value!==t[n].value||!r)}),r}}function he(e,t){var n={},r=[],i=[],a=[],o=e.getFieldspace(),u=t.getFieldspace(),c=o.fieldsObj(),f=u.fieldsObj(),s=o.name+\" union \"+u.name;if(!M(e._colIdentifier.split(\",\").sort(),t._colIdentifier.split(\",\").sort()))return null;function d(e,t){l(e._rowDiffset,function(e){var r={},o=\"\";i.forEach(function(n){var i=t[n].data[e];o+=\"-\"+i,r[n]=i}),n[o]||(a.push(r),n[o]=!0)})}return e._colIdentifier.split(\",\").forEach(function(e){var t=c[e];r.push(E({},t.schema)),i.push(t.schema.name)}),d(e,c),d(t,f),new yt(a,r,{name:s})}function ve(e,t,n){return W(e,t,n,!1,G.LEFTOUTER)}function me(e,t,n){return W(t,e,n,!1,G.RIGHTOUTER)}var ye=function(){function e(e,t){for(var n=0;nn&&(n=e)}),[t,n]}(this.data)}},{key:\"parse\",value:function(e){return e=parseFloat(e,10),Number.isNaN(e)?null:e}},{key:\"unit\",value:function(){return this.fieldUnit}},{key:\"scale\",value:function(){return this.fieldScale}},{key:\"numberFormat\",value:function(){var e=this.fieldNumberformat;return function(t){return e(t)}}},{key:\"defAggFn\",value:function(){return this.fieldDefAggFn}}]),t}(),Oe=function(){function e(e,t){for(var n=0;n=a?c=!0:(r=e.charCodeAt(o++))===Pe?f=!0:r===Ce&&(f=!0,e.charCodeAt(o)===Pe&&++o),e.slice(i+1,t-1).replace(/\"\"/g,'\"')}for(;o2&&void 0!==arguments[2]?arguments[2]:{},i=arguments[3],a=void 0;t!==Y?(a={op:t,meta:r,criteria:i},e._derivation.push(a)):(a=[].concat(Ge(i)),e._derivation.length=0,(n=e._derivation).push.apply(n,Ge(a)))},ze=function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=n.operation||q,i=n.filterByMeasure||!1,a=[];a=t.length?t.map(function(e){return function(e){var t=e.getData(),n=t.schema,r=e.getFieldsConfig(),a=e.getFieldspace().fieldsObj(),o=t.data,u=Object.values(r).reduce(function(e,t){return e[t.def.name]=a[t.def.name].domain(),e},{});return function(e){return!!o.length&&o.some(function(t){return n.every(function(n){if(!(n.name in e))return!0;var a=e[n.name].valueOf();if(i&&n.type===f.MEASURE)return a>=u[n.name][0]&&a<=u[n.name][1];if(n.type!==f.DIMENSION)return!0;var o=r[n.name].index;return t[o]===e[n.name].valueOf()})})}}(e)}):[function(){return!1}];var o=void 0;r===q?o=e.clone(!1,!1).select(function(e){return a.every(function(t){return t(e)})},{saveChild:!1,mode:s.ALL}):o=e.clone(!1,!1).select(function(e){return a.some(function(t){return t(e)})},{mode:s.ALL,saveChild:!1});return o},Xe=function(e,t,n,r){var i=e.clone(r.saveChild),a=function(e,t,n,r){var i=[],a=-1,o=void 0,u=function(e){return n(qe(t,e),e)};return r.mode===s.INVERSE&&(u=function(e){return!n(qe(t,e))}),l(e,function(e){u(e)&&(-1!==a&&e===a+1?(o=i.length-1,i[o]=i[o].split(\"-\")[0]+\"-\"+e):i.push(\"\"+e),a=e)}),i.join(\",\")}(i._rowDiffset,i.getPartialFieldspace().fields,t,n);return i._rowDiffset=a,i.__calculateFieldspace().calculateFieldsConfig(),r.saveChild&&We(i,U,{config:n},t),i},Qe=function(e,t,n,r){var i=e.clone(n.saveChild),a=t;return n.mode===s.INVERSE&&(a=r.filter(function(e){return-1===t.indexOf(e)})),i._colIdentifier=a.join(\",\"),i.__calculateFieldspace().calculateFieldsConfig(),n.saveChild&&We(i,H,{projField:t,config:n,actualProjField:a},null),i},$e=function(e,t,n,r){r=Object.assign(Object.assign({},xe),r);var a=i[r.dataFormat];if(!a||\"function\"!=typeof a)throw new Error(\"No converter function found for \"+r.dataFormat+\" format\");var o=a(t,r),u=Je(o,2),c=u[0],f=u[1],s=Fe(f,n,c),l=R.createNamespace(s,r.name);return e._partialFieldspace=l,e._rowDiffset=f.length&&f[0].length?\"0-\"+(f[0].length-1):\"\",e._colIdentifier=n.map(function(e){return e.name}).join(),e},Ze=function(e,t){for(var n=0;n2&&void 0!==arguments[2]?arguments[2]:{},i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},a=i.nonTraversingModel,o=i.excludeModels||[];t!==a&&((!o.length||-1===o.indexOf(t))&&t.handlePropagation(n,r),t._children.forEach(function(t){var a=et(n,t),o=Je(a,2),u=o[0],c=o[1];e(t,[u,c],r,i)}))},nt=function(e,t,n,r){var i=void 0,a=void 0,o=n.propagationNameSpace,u=n.propagateToSource,c=n.sourceId,f=r.propagateInterpolatedValues,s=[];if(null===e&&!0!==r.persistent)s=[{criteria:[]}];else{var l,d=Object.values(o.mutableActions);!1!==u&&(d=d.filter(function(e){return e.config.sourceId!==c}));var p=d.filter(function(e){return(r.filterFn||function(){return!0})(e,r)}).map(function(e){return e.config.criteria}),h=[];if(!1!==u){var v=Object.values(o.mutableActions);v.forEach(function(e){var t=e.config;!1===t.applyOnSource&&t.action===r.action&&t.sourceId!==c&&(h.push(e.model),(i=v.filter(function(t){return t!==e}).map(function(e){return e.config.criteria})).length&&s.push({criteria:i,models:e.model,path:function e(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];return null!==t._parent&&(n.push(t),e(t._parent,n)),n}(e.model)}))})}i=(l=[]).concat.apply(l,[].concat(Ge(p),[e])).filter(function(e){return null!==e}),s.push({criteria:i,excludeModels:[].concat(h,Ge(r.excludeModels||[]))})}var m=t.model,y=Object.assign({sourceIdentifiers:e,propagationSourceId:c},r),g=t.groupByModel;f&&g&&(a=ze(g,i,{filterByMeasure:f}),tt(g,a,y)),s.forEach(function(e){var t=ze(m,e.criteria),n=e.path;if(n){var r=function(e,t){for(var n=0,r=t.length;n0&&void 0!==arguments[0])||arguments[0],t=void 0;if(!1===(!(arguments.length>1&&void 0!==arguments[1])||arguments[1])){var n=this.getData({getAllFields:!0}),r=n.data,i=n.schema,a=r.map(function(e){var t={};return i.forEach(function(n,r){t[n.name]=e[r]}),t});t=new this.constructor(a,i)}else t=new this.constructor(this);return e&&this._children.push(t),t}},{key:\"project\",value:function(e,t){var n={mode:s.NORMAL,saveChild:!0};t=Object.assign({},n,t);var r=this.getFieldsConfig(),i=Object.keys(r),a=t.mode,o=e.reduce(function(e,t){return\"RegExp\"===t.constructor.name?e.push.apply(e,function(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t1&&void 0!==arguments[1]?arguments[1]:[];We(this,Y,null,t),this._parent=e,e._children.push(this)}}]),e}(),at=function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function(e,t){var n=[],r=!0,i=!1,a=void 0;try{for(var o,u=e[Symbol.iterator]();!(r=(o=u.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){i=!0,a=e}finally{try{!r&&u.return&&u.return()}finally{if(i)throw a}}return n}(e,t);throw new TypeError(\"Invalid attempt to destructure non-iterable instance\")}}(),ot=function(){function e(e,t){for(var n=0;n1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{saveChild:!0},r=\"\"+e.join(),i=[this,e,t],a=de.apply(void 0,i);return n.saveChild&&(this._children.push(a),We(a,V,{fieldsArr:e,groupByString:r,defaultReducer:se.defaultReducer()},t)),a._parent=this,a}},{key:\"sort\",value:function(e){var t=this.getData({order:\"row\",sort:e}),n=[t.schema.map(function(e){return e.name})].concat(t.data),r=new this.constructor(n,t.schema,{dataFormat:\"DSVArr\"});return r._sortingDetails=e,r}},{key:\"addField\",value:function(e){var t=e.fieldName();this._colIdentifier+=\",\"+t;var n=this._partialFieldspace;if(n.fieldsObj()[e.fieldName()]){var r=n.fields.findIndex(function(e){return e.name===t});r>=0&&(n.fields[r]=e)}else n.fields.push(e);return this.__calculateFieldspace().calculateFieldsConfig(),this}},{key:\"calculateVariable\",value:function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{saveChild:!0,replaceVar:!1},r=this.getFieldsConfig(),i=t.slice(0,t.length-1),a=t[t.length-1];if(r[e.name]&&!n.replaceVar)throw new Error(e.name+\" field already exists in model.\");var o=i.map(function(e){var t=r[e];if(!t)throw new Error(e+\" is not a valid column name.\");return t.index}),u=this.clone(),c=u.getFieldspace().fields,f=o.map(function(e){return c[e]}),s=[];l(u._rowDiffset,function(e){var t=f.map(function(t){return t.data[e]});s[e]=a.apply(void 0,function(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t1&&void 0!==arguments[1]?arguments[1]:{},n=arguments[2],r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},i=t.isMutableAction,a=t.sourceId,o=t.payload,u=function e(t){return t._parent?e(t._parent):t}(this),c=u._propagationNameSpace,f={groupByModel:function e(t){return t._parent&&t._derivation.find(function(e){return\"group\"!==e.op})?e(t._parent):t}(this),model:u};return n&&function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments[2],r=void 0,i=t.isMutableAction,a=t.criteria,o=t.action+\"-\"+t.sourceId;r=i?e.mutableActions:e.immutableActions,null===a?delete r[o]:r[o]={model:n,config:t}}(c,t,this),nt(e,f,{propagationNameSpace:c,sourceId:a},Object.assign({payload:o},t)),i&&function(e,t,n){var r=e.immutableActions;for(var i in r){var a=r[i].config,o=n.config.sourceId,u=!n.propConfig.filterImmutableAction||n.propConfig.filterImmutableAction(a,n.config);if(a.sourceId!==o&&u){var c=a.criteria;nt(c,t,{propagationNameSpace:e,propagateToSource:!1,sourceId:o},a)}}}(c,f,{config:t,propConfig:r}),this}},{key:\"on\",value:function(e,t){switch(e){case\"propagation\":this._onPropagation.push(t)}return this}},{key:\"unsubscribe\",value:function(e){switch(e){case\"propagation\":this._onPropagation=[]}return this}},{key:\"handlePropagation\",value:function(e,t){var n=this;this._onPropagation.forEach(function(r){return r.call(n,e,t)})}},{key:\"bin\",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=this.clone(),r=t.name||e+\"_binned\";if(this.getFieldsConfig()[r]||!this.getFieldsConfig()[e])throw new Error(\"Field \"+e+\" already exists.\");var i=I(this._partialFieldspace.fields.find(function(t){return t.name===e}),this._rowDiffset,t),a=Fe([i.data],[{name:r,type:f.MEASURE,subtype:\"discrete\",bins:{range:i.range,mid:i.mid}}],[r])[0];return n.addField(a),We(n,J,{measureName:e,config:t,binFieldName:r},null),n}}],[{key:\"Reducers\",get:function(){return se}}]),t}(),ct=oe.sum,ft=oe.avg,st=oe.min,lt=oe.max,dt=oe.first,pt=oe.last,ht=oe.count,vt=oe.std,mt=n(0);ut.Operators={compose:function(){for(var e=arguments.length,t=Array(e),n=0;n1&&void 0!==arguments[1]?arguments[1]:{saveChild:!0}).saveChild;return t.forEach(function(e){n=e(n),i.push.apply(i,function(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t1&&r.dispose(),n}},bin:function(){for(var e=arguments.length,t=Array(e),n=0;n2?(i=arguments.length<=0?void 0:arguments[0],n=arguments.length<=1?void 0:arguments[1],o=arguments.length<=2?void 0:arguments[2]):(i=null,n=arguments.length<=0?void 0:arguments[0],o=arguments.length<=1?void 0:arguments[1]),t=o(y),(e=r=new _(t.fn)).addDependencies.apply(e,P(t.dependencies)),this._addPropInModel(i,function(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}({},n,r)),this}},{key:\"_addPropInModel\",value:function(e,t){return this._graph.createNodesFrom(t,e),this}},{key:\"on\",value:function(e,t,r){var n,i=e instanceof Array?e:[e],o=this._graph.createElectricNodeOf(i,{type:\"CurrFrame\",fn:t});r&&(n=this._graph.stopPropagation().setPropagationOverride(\"nextFrame\")).resetNodeValue.apply(n,P(e));return o}},{key:\"next\",value:function(e,t,r){var n,i=e instanceof Array?e:[e],o=this._graph.createElectricNodeOf(i,{type:\"NextFrame\",fn:t});r&&(n=this._graph.stopPropagation().setPropagationOverride(\"currentFrame\")).resetNodeValue.apply(n,P(e));return o}},{key:\"lock\",value:function(){return this._lockFlag=!0,this._reqQ.length=0,this}},{key:\"unlock\",value:function(){return this._lockFlag=!1,this.setProp.apply(this,P(this._reqQ)),this._reqQ.length=0,this}},{key:\"prop\",value:function(){var e,t=void 0,r=void 0;switch(e=arguments.length){case 1:t=arguments.length<=0?void 0:arguments[0];break;case 2:t=arguments.length<=0?void 0:arguments[0],r=arguments.length<=1?void 0:arguments[1];break;default:return this}return 2===e?(this._lockFlag?this._reqQ.push([t,r]):this.setProp([t,r]),this):this._graph.getNodeValue(t)}},{key:\"setProp\",value:function(){for(var e,t=this,r=arguments.length,n=Array(r),i=0;i whenever a break is necessary. This is to recgonize one\n * generalized format independent of the implementation (canvas based solution, svg based solution). This method\n * converts the output of getSmartText().text to array of lines if the text is wrapped. It sets a named property\n * `lines` on the object passed as parameter.\n *\n * @param {Object} smartlabel - the object returned by getSmartText based on which line arr which to be formed.\n *\n * @return {Object} - The same object which was passed in the arguments. Also a named property `lines` is set.\n */\nSmartLabelManager.textToLines = function (smartlabel) {\n smartlabel = smartlabel || {};\n\n if (!smartlabel.text) {\n smartlabel.text = '';\n } else if (typeof smartlabel.text !== 'string') {\n smartlabel.text = smartlabel.text.toString();\n }\n\n smartlabel.lines = smartlabel.text.split(/\\n|/ig);\n return smartlabel;\n};\n\n// Saves all the instance created so far\nSmartLabelManager.store = {};\n\n// Calculates space taken by a character with an approximation value which is calculated by repeating the\n// character by string length times.\nSmartLabelManager.prototype._calCharDimWithCache = function (text, calculateDifference, length) {\n if (!this._init) {\n return false;\n }\n\n var size,\n csArr,\n tw,\n twi,\n cachedStyle,\n asymmetricDifference,\n maxAdvancedCacheLimit = this.options.maxCacheLimit,\n container = this._container,\n style = this.style || {},\n cache = this._advancedCache || (this._advancedCache = {}),\n advancedCacheKey = this._advancedCacheKey || (this._advancedCacheKey = []),\n cacheName = text + (style.fontSize || BLANK) + (style.fontFamily || BLANK) + (style.fontWeight || BLANK) + (style.fontStyle || BLANK),\n cacheInitName = text + 'init' + (style.fontSize || BLANK) + (style.fontFamily || BLANK) + (style.fontWeight || BLANK) + (style.fontStyle || BLANK);\n\n htmlSplCharSpace[text] && (text = htmlSplCharSpace[text]);\n\n if (!calculateDifference) {\n asymmetricDifference = 0;\n } else {\n if ((asymmetricDifference = cache[cacheInitName]) === undefined) {\n container.innerHTML = text.repeat ? text.repeat(length) : Array(length + 1).join(text); // jshint ignore:line\n tw = container.offsetWidth;\n\n container.innerHTML = text;\n twi = container.offsetWidth;\n\n asymmetricDifference = cache[cacheInitName] = (tw - length * twi) / (length + 1);\n advancedCacheKey.push(cacheInitName);\n if (advancedCacheKey.length > maxAdvancedCacheLimit) {\n delete cache[advancedCacheKey.shift()];\n }\n }\n }\n\n if (cachedStyle = cache[cacheName]) {\n csArr = cachedStyle.split(',');\n return {\n width: parseFloat(csArr[0], 10),\n height: parseFloat(csArr[1], 10)\n };\n }\n\n container.innerHTML = text;\n\n size = {\n height: container.offsetHeight,\n width: container.offsetWidth + asymmetricDifference\n };\n\n cache[cacheName] = size.width + ',' + size.height;\n advancedCacheKey.push(cacheName);\n if (advancedCacheKey.length > maxAdvancedCacheLimit) {\n delete cache[advancedCacheKey.shift()];\n }\n\n return size;\n};\n\n// Provide function to calculate the height and width based on the environment and available support from dom.\nSmartLabelManager.prototype._getWidthFn = function () {\n var contObj = this._containerObj,\n container = this._container,\n svgText = contObj.svgText;\n\n if (svgText) {\n return function (str) {\n var bbox, width;\n\n svgText.textContent = str;\n bbox = svgText.getBBox();\n width = bbox.width - SVG_BBOX_CORRECTION;\n if (width < 1) {\n width = bbox.width;\n }\n\n return width;\n };\n } else {\n return function (str) {\n container.innerHTML = str;\n return container.offsetWidth;\n };\n }\n};\n\n/*\n * Sets the style based on which the text's metrics to be calculated.\n *\n * @param {Object} style - The style object which affects the text size\n * {\n * fontSize / 'font-size' : MUST BE FOLLOWED BY PX (10px, 11px)\n * fontFamily / 'font-family'\n * fontWeight / 'font-weight'\n * fontStyle / 'font-style'\n * }\n *\n * @return {SmartLabelManager} - Current instance of SmartLabelManager\n */\nSmartLabelManager.prototype.setStyle = function (style) {\n if (!this._init) {\n return this;\n }\n\n var sCont;\n\n if (style === this.style && !this._styleNotSet) {\n return;\n }\n\n if (!style) {\n style = this.style;\n }\n\n slLib.setLineHeight(style);\n this.style = style;\n\n this._containerObj = sCont = this._containerManager.get(style);\n\n if (this._containerObj) {\n this._container = sCont.node;\n this._context = sCont.context;\n this._cache = sCont.charCache;\n this._lineHeight = sCont.lineHeight;\n this._styleNotSet = false;\n } else {\n this._styleNotSet = true;\n }\n\n return this;\n};\n\n/*\n * Decides whether ellipses to be shown if the node is truncated\n *\n * @param {Boolean} useEllipses - decides if a ellipses to be appended if the text is truncated. Default: false\n *\n * @return {SmartLabelManager} - Current instance of SmartLabelManager\n */\nSmartLabelManager.prototype.useEllipsesOnOverflow = function (useEllipses) {\n if (!this._init) {\n return this;\n }\n this._showNoEllipses = !useEllipses;\n return this;\n};\n\n/*\n * Get wrapped or truncated text if a bound box is defined around it. The result text would be separated by
\n * if wrapped\n *\n * @param {String} text - the subject text\n * @param {Number} maxWidth - width in px of the the bound box\n * @param {Number} maxHeight - height in px of the the bound box\n * @param {Boolean} noWrap - whether the text to be wrapped. Default false.\n *\n * @return {Object} - The metrics of the text bounded by the box\n * {\n * height : height of the wrapped text\n * width : width of the wrapped text\n * isTruncated : whether the text is truncated\n * maxHeight : Maximum height given\n * maxWidth : Maximum width given\n * oriText : Original text sent\n * oriTextHeight : Original text height\n * oriTextWidth : Original text width\n * text : SMART TEXT\n * }\n */\nSmartLabelManager.prototype.getSmartText = function (text, maxWidth, maxHeight, noWrap) {\n if (!this._init) {\n return false;\n }\n\n if (text === undefined || text === null) {\n text = '';\n } else if (typeof text !== 'string') {\n text = text.toString();\n }\n\n var len,\n trimStr,\n tempArr,\n tmpText,\n maxWidthWithEll,\n toolText,\n oriWidth,\n oriHeight,\n newCharIndex,\n nearestChar,\n tempChar,\n getWidth,\n initialLeft,\n initialTop,\n getOriSizeImproveObj,\n spanArr,\n x,\n y,\n minWidth,\n elem,\n chr,\n elemRightMostPoint,\n elemLowestPoint,\n lastBR,\n removeFromIndex,\n removeFromIndexForEllipses,\n hasHTMLTag = false,\n maxStrWidth = 0,\n lastDash = -1,\n lastSpace = -1,\n lastIndexBroken = -1,\n strWidth = 0,\n strHeight = 0,\n oriTextArr = [],\n i = 0,\n ellipsesStr = this._showNoEllipses ? '' : '...',\n lineHeight = this._lineHeight,\n context = this._context,\n container = this._container,\n sCont = this._containerObj,\n ellipsesWidth = sCont.ellipsesWidth,\n dotWidth = sCont.dotWidth,\n characterArr = [],\n dashIndex = -1,\n spaceIndex = -1,\n lastLineBreak = -1,\n fastTrim = function fastTrim(str) {\n str = str.replace(/^\\s\\s*/, '');\n var ws = /\\s/,\n i = str.length;\n while (ws.test(str.charAt(i -= 1))) {/* jshint noempty:false */}\n return str.slice(0, i + 1);\n },\n smartLabel = {\n text: text,\n maxWidth: maxWidth,\n maxHeight: maxHeight,\n width: null,\n height: null,\n oriTextWidth: null,\n oriTextHeight: null,\n oriText: text,\n isTruncated: false\n };\n\n getWidth = this._getWidthFn();\n\n // In some browsers, offsetheight of a single-line text is getting little (1 px) heigher value of the\n // lineheight. As a result, smartLabel is unable to return single-line text.\n // To fix this, increase the maxHeight a little amount. Hence maxHeight = lineHeight * 1.2\n if (maxHeight === lineHeight) {\n maxHeight *= 1.2;\n }\n\n if (container) {\n if (!documentSupport.isBrowserLess) {\n hasHTMLTag = slLib.xmlTagRegEx.test(text);\n if (!hasHTMLTag) {\n // Due to support of <,> for xml we convert <, > to <,> respectively so to get the correct\n // width it is required to convert the same before calculation for the new improve version of the\n // get text width.\n tmpText = text.replace(slLib.ltgtRegex, function (match) {\n return match === '<' ? '<' : '>';\n });\n getOriSizeImproveObj = this.getOriSize(tmpText, true);\n\n smartLabel.oriTextWidth = oriWidth = getOriSizeImproveObj.width;\n smartLabel.oriTextHeight = oriHeight = getOriSizeImproveObj.height;\n } else {\n container.innerHTML = text;\n smartLabel.oriTextWidth = oriWidth = container.offsetWidth;\n smartLabel.oriTextHeight = oriHeight = container.offsetHeight;\n }\n\n if (oriHeight <= maxHeight && oriWidth <= maxWidth) {\n smartLabel.width = smartLabel.oriTextWidth = oriWidth;\n smartLabel.height = smartLabel.oriTextHeight = oriHeight;\n return smartLabel;\n }\n\n if (lineHeight > maxHeight) {\n smartLabel.text = '';\n smartLabel.width = smartLabel.oriTextWidth = 0;\n smartLabel.height = smartLabel.oriTextHeight = 0;\n return smartLabel;\n }\n }\n\n // Calculate width with ellipses\n text = fastTrim(text).replace(/(\\s+)/g, ' ');\n maxWidthWithEll = this._showNoEllipses ? maxWidth : maxWidth - ellipsesWidth;\n\n if (!hasHTMLTag) {\n oriTextArr = text.split('');\n len = oriTextArr.length;\n trimStr = '', tempArr = [];\n tempChar = oriTextArr[0];\n\n if (this._cache[tempChar]) {\n minWidth = this._cache[tempChar].width;\n } else {\n minWidth = getWidth(tempChar);\n this._cache[tempChar] = { width: minWidth };\n }\n\n if (maxWidthWithEll > minWidth) {\n tempArr = text.substr(0, slLib.getNearestBreakIndex(text, maxWidthWithEll, this)).split('');\n i = tempArr.length;\n } else if (minWidth > maxWidth) {\n smartLabel.text = '';\n smartLabel.width = smartLabel.oriTextWidth = smartLabel.height = smartLabel.oriTextHeight = 0;\n return smartLabel;\n } else if (ellipsesStr) {\n maxWidthWithEll = maxWidth - 2 * dotWidth;\n if (maxWidthWithEll > minWidth) {\n ellipsesStr = '..';\n } else {\n maxWidthWithEll = maxWidth - dotWidth;\n if (maxWidthWithEll > minWidth) {\n ellipsesStr = '.';\n } else {\n maxWidthWithEll = 0;\n ellipsesStr = '';\n }\n }\n }\n\n strWidth = getWidth(tempArr.join(''));\n strHeight = this._lineHeight;\n\n if (noWrap) {\n for (; i < len; i += 1) {\n tempChar = tempArr[i] = oriTextArr[i];\n if (this._cache[tempChar]) {\n minWidth = this._cache[tempChar].width;\n } else {\n if (!getOriSizeImproveObj || !(minWidth = getOriSizeImproveObj.detailObj[tempChar])) {\n minWidth = getWidth(tempChar);\n }\n this._cache[tempChar] = {\n width: minWidth\n };\n }\n strWidth += minWidth;\n if (strWidth > maxWidthWithEll) {\n if (!trimStr) {\n trimStr = tempArr.slice(0, -1).join('');\n }\n if (strWidth > maxWidth) {\n smartLabel.text = fastTrim(trimStr) + ellipsesStr;\n smartLabel.tooltext = smartLabel.oriText;\n smartLabel.width = getWidth(smartLabel.text);\n smartLabel.height = this._lineHeight;\n return smartLabel;\n }\n }\n }\n\n smartLabel.text = tempArr.join('');\n smartLabel.width = strWidth;\n smartLabel.height = this._lineHeight;\n return smartLabel;\n } else {\n for (; i < len; i += 1) {\n tempChar = tempArr[i] = oriTextArr[i];\n if (tempChar === ' ' && !context) {\n tempChar = ' ';\n }\n\n if (this._cache[tempChar]) {\n minWidth = this._cache[tempChar].width;\n } else {\n if (!getOriSizeImproveObj || !(minWidth = getOriSizeImproveObj.detailObj[tempChar])) {\n minWidth = getWidth(tempChar);\n }\n this._cache[tempChar] = {\n width: minWidth\n };\n }\n strWidth += minWidth;\n\n if (strWidth > maxWidthWithEll) {\n if (!trimStr) {\n trimStr = tempArr.slice(0, -1).join('');\n }\n if (strWidth > maxWidth) {\n /** @todo use regular expressions for better performance. */\n lastSpace = text.substr(0, tempArr.length).lastIndexOf(' ');\n lastDash = text.substr(0, tempArr.length).lastIndexOf('-');\n if (lastSpace > lastIndexBroken) {\n strWidth = getWidth(tempArr.slice(lastIndexBroken + 1, lastSpace).join(''));\n tempArr.splice(lastSpace, 1, '
');\n lastIndexBroken = lastSpace;\n newCharIndex = lastSpace + 1;\n } else if (lastDash > lastIndexBroken) {\n if (lastDash === tempArr.length - 1) {\n strWidth = getWidth(tempArr.slice(lastIndexBroken + 1, lastSpace).join(''));\n tempArr.splice(lastDash, 1, '
-');\n } else {\n strWidth = getWidth(tempArr.slice(lastIndexBroken + 1, lastSpace).join(''));\n tempArr.splice(lastDash, 1, '-
');\n }\n lastIndexBroken = lastDash;\n newCharIndex = lastDash + 1;\n } else {\n tempArr.splice(tempArr.length - 1, 1, '
' + oriTextArr[i]);\n lastLineBreak = tempArr.length - 2;\n strWidth = getWidth(tempArr.slice(lastIndexBroken + 1, lastLineBreak + 1).join(''));\n lastIndexBroken = lastLineBreak;\n newCharIndex = i;\n }\n strHeight += this._lineHeight;\n if (strHeight > maxHeight) {\n smartLabel.text = fastTrim(trimStr) + ellipsesStr;\n smartLabel.tooltext = smartLabel.oriText;\n // The max width among all the lines will be the width of the string.\n smartLabel.width = maxWidth;\n smartLabel.height = strHeight - this._lineHeight;\n return smartLabel;\n } else {\n maxStrWidth = max(maxStrWidth, strWidth);\n trimStr = null;\n nearestChar = slLib.getNearestBreakIndex(text.substr(newCharIndex), maxWidthWithEll, this);\n strWidth = getWidth(text.substr(newCharIndex, nearestChar || 1));\n if (tempArr.length < newCharIndex + nearestChar) {\n tempArr = tempArr.concat(text.substr(tempArr.length, newCharIndex + nearestChar - tempArr.length).split(''));\n i = tempArr.length - 1;\n }\n }\n }\n }\n }\n\n maxStrWidth = max(maxStrWidth, strWidth);\n\n smartLabel.text = tempArr.join('');\n smartLabel.width = maxStrWidth;\n smartLabel.height = strHeight;\n return smartLabel;\n }\n } else {\n toolText = text.replace(slLib.spanAdditionRegx, '$2');\n text = text.replace(slLib.spanAdditionRegx, slLib.spanAdditionReplacer);\n text = text.replace(/()/g, '$1');\n\n container.innerHTML = text;\n\n spanArr = container[documentSupport.childRetriverFn](documentSupport.childRetriverString);\n\n for (x = 0, y = spanArr.length; x < y; x += 1) {\n elem = spanArr[x];\n //chech whether this span is temporary inserted span from it's class\n if (documentSupport.noClassTesting || slLib.classNameReg.test(elem.className)) {\n chr = elem.innerHTML;\n if (chr !== '') {\n if (chr === ' ') {\n spaceIndex = characterArr.length;\n } else if (chr === '-') {\n dashIndex = characterArr.length;\n }\n\n characterArr.push({\n spaceIdx: spaceIndex,\n dashIdx: dashIndex,\n elem: elem\n });\n oriTextArr.push(chr);\n }\n }\n }\n\n i = 0;\n len = characterArr.length;\n minWidth = characterArr[0].elem.offsetWidth;\n\n if (minWidth > maxWidth) {\n smartLabel.text = '';\n smartLabel.width = smartLabel.oriTextWidth = smartLabel.height = smartLabel.oriTextHeight = 0;\n\n return smartLabel;\n } else if (minWidth > maxWidthWithEll && !this._showNoEllipses) {\n\n maxWidthWithEll = maxWidth - 2 * dotWidth;\n if (maxWidthWithEll > minWidth) {\n ellipsesStr = '..';\n } else {\n maxWidthWithEll = maxWidth - dotWidth;\n if (maxWidthWithEll > minWidth) {\n ellipsesStr = '.';\n } else {\n maxWidthWithEll = 0;\n ellipsesStr = '';\n }\n }\n }\n\n initialLeft = characterArr[0].elem.offsetLeft;\n initialTop = characterArr[0].elem.offsetTop;\n\n if (noWrap) {\n for (; i < len; i += 1) {\n elem = characterArr[i].elem;\n elemRightMostPoint = elem.offsetLeft - initialLeft + elem.offsetWidth;\n\n if (elemRightMostPoint > maxWidthWithEll) {\n if (!removeFromIndexForEllipses) {\n removeFromIndexForEllipses = i;\n }\n if (container.offsetWidth > maxWidth) {\n removeFromIndex = i;\n i = len;\n }\n }\n }\n } else {\n for (; i < len; i += 1) {\n elem = characterArr[i].elem;\n elemLowestPoint = elem.offsetHeight + (elem.offsetTop - initialTop);\n elemRightMostPoint = elem.offsetLeft - initialLeft + elem.offsetWidth;\n\n lastBR = null;\n\n if (elemRightMostPoint > maxWidthWithEll) {\n if (!removeFromIndexForEllipses) {\n removeFromIndexForEllipses = i;\n }\n\n if (elemRightMostPoint > maxWidth) {\n lastSpace = characterArr[i].spaceIdx;\n lastDash = characterArr[i].dashIdx;\n if (lastSpace > lastIndexBroken) {\n characterArr[lastSpace].elem.innerHTML = '
';\n lastIndexBroken = lastSpace;\n } else if (lastDash > lastIndexBroken) {\n if (lastDash === i) {\n // in case the overflowing character itself is the '-'\n characterArr[lastDash].elem.innerHTML = '
-';\n } else {\n characterArr[lastDash].elem.innerHTML = '-
';\n }\n lastIndexBroken = lastDash;\n } else {\n elem.parentNode.insertBefore(lastBR = doc.createElement('br'), elem);\n }\n\n //check whether this break made current element outside the area height\n if (elem.offsetHeight + elem.offsetTop > maxHeight) {\n //remove the lastly inserted line break\n if (lastBR) {\n lastBR.parentNode.removeChild(lastBR);\n } else if (lastIndexBroken === lastDash) {\n characterArr[lastDash].elem.innerHTML = '-';\n } else {\n characterArr[lastSpace].elem.innerHTML = ' ';\n }\n removeFromIndex = i;\n //break the looping condition\n i = len;\n } else {\n removeFromIndexForEllipses = null;\n }\n }\n } else {\n //check whether this break made current element outside the area height\n if (elemLowestPoint > maxHeight) {\n removeFromIndex = i;\n i = len;\n }\n }\n }\n }\n\n if (removeFromIndex < len) {\n //set the trancated property of the smartlabel\n smartLabel.isTruncated = true;\n\n /** @todo is this really needed? */\n removeFromIndexForEllipses = removeFromIndexForEllipses ? removeFromIndexForEllipses : removeFromIndex;\n\n for (i = len - 1; i >= removeFromIndexForEllipses; i -= 1) {\n elem = characterArr[i].elem;\n //chech whether this span is temporary inserted span from it's class\n elem.parentNode.removeChild(elem);\n }\n\n for (; i >= 0; i -= 1) {\n elem = characterArr[i].elem;\n if (slLib.classNameBrReg.test(elem.className)) {\n //chech whether this span is temporary inserted span from it's class\n elem.parentNode.removeChild(elem);\n } else {\n i = 0;\n }\n }\n }\n\n //get the smart text\n smartLabel.text = container.innerHTML.replace(slLib.spanRemovalRegx, '$1').replace(/\\&\\;/g, '&');\n if (smartLabel.isTruncated) {\n smartLabel.text += ellipsesStr;\n smartLabel.tooltext = toolText;\n }\n }\n\n smartLabel.height = container.offsetHeight;\n smartLabel.width = container.offsetWidth;\n\n return smartLabel;\n } else {\n smartLabel.error = new Error('Body Tag Missing!');\n return smartLabel;\n }\n};\n\n/*\n * Get the height and width of a text.\n *\n * @param {String} text - Text whose metrics to be measured\n * @param {Boolean} Optional detailedCalculationFlag - this flag if set it calculates per letter position\n * information and returns it. Ideally you dont need it unless you want to post process the\n * string. And its an EXPENSIVE OPERATION.\n *\n * @return {Object} - If detailedCalculationFlag is set to true the returned object would be\n * {\n * height: height of the text\n * width: width of the text\n * detailObj: detail calculation of letters in the format {lettername: width}\n * }\n * If detailedCalculationFlag is set to false the returned object wont have the detailObj prop.\n */\nSmartLabelManager.prototype.getOriSize = function (text, detailedCalculationFlag) {\n if (!this._init) {\n return false;\n }\n\n var textArr,\n letter,\n lSize,\n i,\n l,\n cumulativeSize = 0,\n height = 0,\n indiSizeStore = {};\n\n if (!detailedCalculationFlag) {\n return this._calCharDimWithCache(text);\n }\n\n // Calculate the width of every letter with an approximation\n textArr = text.split('');\n for (i = 0, l = textArr.length; i < l; i++) {\n letter = textArr[i];\n lSize = this._calCharDimWithCache(letter, true, textArr.length);\n height = max(height, lSize.height);\n cumulativeSize += lSize.width;\n indiSizeStore[letter] = lSize.width;\n }\n\n return {\n width: round(cumulativeSize),\n height: height,\n detailObj: indiSizeStore\n };\n};\n\n/*\n * Dispose the container and object allocated by the smartlabel\n */\nSmartLabelManager.prototype.dispose = function () {\n if (!this._init) {\n return this;\n }\n\n this._containerManager && this._containerManager.dispose && this._containerManager.dispose();\n\n delete this._container;\n delete this._context;\n delete this._cache;\n delete this._containerManager;\n delete this._containerObj;\n delete this.id;\n delete this.style;\n delete this.parentContainer;\n delete this._showNoEllipses;\n\n return this;\n};\n\nexports['default'] = SmartLabelManager;\nmodule.exports = exports['default'];","'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n\tvalue: true\n});\nvar lib = {\n\tinit: function init(win) {\n\t\tvar doc = win.document,\n\t\t nav = win.navigator,\n\t\t userAgent = nav.userAgent,\n\t\t DIV = 'DIV',\n\t\t ceil = Math.ceil,\n\t\t floor = Math.floor,\n\t\t containerInstanceCount = 0,\n\t\t clsNameSpace = 'fusioncharts-smartlabel-',\n\t\t containerClass = clsNameSpace + 'container',\n\t\t classNameWithTag = clsNameSpace + 'tag',\n\t\t classNameWithTagBR = clsNameSpace + 'br';\n\n\t\tlib = {\n\t\t\twin: win,\n\n\t\t\tcontainerClass: containerClass,\n\n\t\t\tclassNameWithTag: classNameWithTag,\n\n\t\t\tclassNameWithTagBR: classNameWithTagBR,\n\n\t\t\tmaxDefaultCacheLimit: 500,\n\n\t\t\tclassNameReg: new RegExp('\\b' + classNameWithTag + '\\b'),\n\n\t\t\tclassNameBrReg: new RegExp('\\b' + classNameWithTagBR + '\\b'),\n\n\t\t\tspanAdditionRegx: /(<[^<\\>]+?\\>)|(&(?:[a-z]+|#[0-9]+);|.)/ig,\n\n\t\t\tspanAdditionReplacer: '$1$2',\n\n\t\t\tspanRemovalRegx: new RegExp('\\\\]+?' + classNameWithTag + '[^\\\\>]{0,}\\\\>(.*?)\\\\<\\\\/span\\\\>', 'ig'),\n\n\t\t\txmlTagRegEx: new RegExp('<[^>][^<]*[^>]+>', 'i'),\n\n\t\t\tltgtRegex: /<|>/g,\n\n\t\t\tbrReplaceRegex: //ig,\n\n\t\t\ttestStrAvg: 'WgI',\n\n\t\t\t// This style is applied over the parent smartlabel container. The container is kept hidden from the viewport\n\t\t\tparentContainerStyle: {\n\t\t\t\tposition: 'absolute',\n\t\t\t\ttop: '-9999em',\n\t\t\t\twhiteSpace: 'nowrap',\n\t\t\t\tpadding: '0px',\n\t\t\t\twidth: '1px',\n\t\t\t\theight: '1px',\n\t\t\t\toverflow: 'hidden'\n\t\t\t},\n\n\t\t\t// All the style which might affect the text metrics\n\t\t\tsupportedStyle: {\n\t\t\t\tfont: 'font',\n\t\t\t\tfontFamily: 'font-family',\n\t\t\t\t'font-family': 'font-family',\n\t\t\t\tfontWeight: 'font-weight',\n\t\t\t\t'font-weight': 'font-weight',\n\t\t\t\tfontSize: 'font-size',\n\t\t\t\t'font-size': 'font-size',\n\t\t\t\tlineHeight: 'line-height',\n\t\t\t\t'line-height': 'line-height',\n\t\t\t\tfontStyle: 'font-style',\n\t\t\t\t'font-style': 'font-style'\n\t\t\t},\n\n\t\t\t// Get the support list for html the document where the text calcution is to be done.\n\t\t\tgetDocumentSupport: function getDocumentSupport() {\n\t\t\t\tvar childRetriverFn, childRetriverString, noClassTesting;\n\n\t\t\t\tif (doc.getElementsByClassName) {\n\t\t\t\t\tchildRetriverFn = 'getElementsByClassName';\n\t\t\t\t\tchildRetriverString = classNameWithTag;\n\t\t\t\t\tnoClassTesting = true;\n\t\t\t\t} else {\n\t\t\t\t\tchildRetriverFn = 'getElementsByTagName';\n\t\t\t\t\tchildRetriverString = 'span';\n\t\t\t\t\tnoClassTesting = false;\n\t\t\t\t}\n\n\t\t\t\treturn {\n\t\t\t\t\tisIE: /msie/i.test(userAgent) && !win.opera,\n\t\t\t\t\thasSVG: Boolean(win.SVGAngle || doc.implementation.hasFeature('http://www.w3.org/TR/SVG11/feature#BasicStructure', '1.1')),\n\t\t\t\t\tisHeadLess: new RegExp(' HtmlUnit').test(userAgent),\n\t\t\t\t\tisWebKit: new RegExp(' AppleWebKit/').test(userAgent),\n\t\t\t\t\tchildRetriverFn: childRetriverFn,\n\t\t\t\t\tchildRetriverString: childRetriverString,\n\t\t\t\t\tnoClassTesting: noClassTesting\n\t\t\t\t};\n\t\t\t},\n\n\t\t\t/*\n * Create a html div element and attach it with a parent. All the subsequent operations are performed\n * by upding this dom tree only.\n *\n * @param {HTMLElement} - The html element where the newly created div is to be attached. If not passed,\n * the new div is appended on the body.\n */\n\t\t\tcreateContainer: function createContainer(containerParent) {\n\t\t\t\tvar body, container;\n\n\t\t\t\tif (containerParent && (containerParent.offsetWidth || containerParent.offsetHeight)) {\n\t\t\t\t\tif (containerParent.appendChild) {\n\t\t\t\t\t\tcontainerParent.appendChild(container = doc.createElement(DIV));\n\t\t\t\t\t\tcontainer.className = containerClass;\n\t\t\t\t\t\tcontainer.setAttribute('aria-hidden', 'true');\n\t\t\t\t\t\tcontainer.setAttribute('role', 'presentation');\n\t\t\t\t\t\treturn container;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tbody = doc.getElementsByTagName('body')[0];\n\n\t\t\t\t\tif (body && body.appendChild) {\n\t\t\t\t\t\tcontainer = doc.createElement(DIV);\n\t\t\t\t\t\tcontainer.className = containerClass;\n\t\t\t\t\t\tcontainer.setAttribute('aria-hidden', 'true');\n\t\t\t\t\t\tcontainer.setAttribute('role', 'presentation');\n\t\t\t\t\t\tcontainerInstanceCount += 1;\n\t\t\t\t\t\tbody.appendChild(container);\n\t\t\t\t\t\treturn container;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// Finds a approximate position where the text is to be broken\n\t\t\tgetNearestBreakIndex: function getNearestBreakIndex(text, maxWidth, sl) {\n\t\t\t\tif (!text || !text.length) {\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\n\t\t\t\tvar difference,\n\t\t\t\t getWidth = sl._getWidthFn(),\n\t\t\t\t charLen = 0,\n\t\t\t\t increment = 0,\n\t\t\t\t oriWidth = getWidth(text),\n\t\t\t\t avgWidth = oriWidth / text.length;\n\n\t\t\t\tdifference = maxWidth;\n\t\t\t\tcharLen = ceil(maxWidth / avgWidth);\n\n\t\t\t\tif (oriWidth < maxWidth) {\n\t\t\t\t\treturn text.length - 1;\n\t\t\t\t}\n\n\t\t\t\tif (charLen > text.length) {\n\t\t\t\t\tdifference = maxWidth - oriWidth;\n\t\t\t\t\tcharLen = text.length;\n\t\t\t\t}\n\n\t\t\t\twhile (difference > 0) {\n\t\t\t\t\tdifference = maxWidth - getWidth(text.substr(0, charLen));\n\t\t\t\t\tincrement = floor(difference / avgWidth);\n\t\t\t\t\tif (increment) {\n\t\t\t\t\t\tcharLen += increment;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn charLen;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\twhile (difference < 0) {\n\t\t\t\t\tdifference = maxWidth - getWidth(text.substr(0, charLen));\n\t\t\t\t\tincrement = floor(difference / avgWidth);\n\t\t\t\t\tif (increment) {\n\t\t\t\t\t\tcharLen += increment;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn charLen;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn charLen;\n\t\t\t},\n\n\t\t\t/*\n * Determine lineheight of a text for a given style. It adds propery lineHeight to the style passed\n *\n * @param {Object} - The style based on which the text's metric needs to be calculated. The calculation happens\n * based on fontSize property, if its not present a default font size is assumed.\n *\n * @return {Object} - The style that was passed with lineHeight as a named propery set on the object.\n */\n\t\t\tsetLineHeight: function setLineHeight(styleObj) {\n\t\t\t\tvar fSize = styleObj.fontSize = styleObj.fontSize || '12px';\n\t\t\t\tstyleObj.lineHeight = styleObj.lineHeight || styleObj['line-height'] || parseInt(fSize, 10) * 1.2 + 'px';\n\t\t\t\treturn styleObj;\n\t\t\t}\n\t\t};\n\n\t\treturn lib;\n\t}\n};\n\nexports['default'] = lib;\nmodule.exports = exports['default'];","const Muze = require('./muze');\n\nmodule.exports = Muze.default ? Muze.default : Muze;\n","'use strict';\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _lib = require('./lib');\n\nvar _lib2 = _interopRequireDefault(_lib);\n\nvar slLib = _lib2['default'].init(typeof window !== \"undefined\" ? window : undefined),\n doc = slLib.win.document,\n documentSupport = slLib.getDocumentSupport(),\n SVG_BBOX_CORRECTION = documentSupport.isWebKit ? 0 : 4.5;\n\nfunction ContainerManager(parentContainer, isBrowserLess, maxContainers) {\n var svg;\n\n maxContainers = maxContainers > 5 ? maxContainers : 5;\n maxContainers = maxContainers < 20 ? maxContainers : 20;\n\n this.maxContainers = maxContainers;\n this.first = null;\n this.last = null;\n this.containers = {};\n this.length = 0;\n this.rootNode = parentContainer;\n\n if (isBrowserLess) {\n svg = doc.createElementNS('http://www.w3.org/2000/svg', 'svg');\n svg.setAttributeNS('http://www.w3.org/2000/svg', 'xlink', 'http://www.w3.org/1999/xlink');\n svg.setAttributeNS('http://www.w3.org/2000/svg', 'height', '0');\n svg.setAttributeNS('http://www.w3.org/2000/svg', 'width', '0');\n this.svgRoot = svg;\n this.rootNode.appendChild(svg);\n }\n}\n\nContainerManager.prototype.get = function (style) {\n var diff,\n key,\n containerObj,\n containers = this.containers,\n len = this.length,\n max = this.maxContainers,\n keyStr = '';\n\n for (key in slLib.supportedStyle) {\n if (style[key] !== undefined) {\n keyStr += slLib.supportedStyle[key] + ':' + style[key] + ';';\n }\n }\n\n if (!keyStr) {\n return false;\n }\n\n if (containerObj = containers[keyStr]) {\n if (this.first !== containerObj) {\n containerObj.prev && (containerObj.prev.next = containerObj.next);\n containerObj.next && (containerObj.next.prev = containerObj.prev);\n containerObj.next = this.first;\n containerObj.next.prev = containerObj;\n this.last === containerObj && (this.last = containerObj.prev);\n containerObj.prev = null;\n this.first = containerObj;\n }\n } else {\n if (len >= max) {\n diff = len - max + 1;\n // +1 is to remove an extra entry to make space for the new container to be added.\n while (diff--) {\n this.removeContainer(this.last);\n }\n }\n containerObj = this.addContainer(keyStr);\n }\n\n return containerObj;\n};\n\nContainerManager.prototype.addContainer = function (keyStr) {\n var node, container;\n\n this.containers[keyStr] = container = {\n next: null,\n prev: null,\n node: null,\n ellipsesWidth: 0,\n lineHeight: 0,\n dotWidth: 0,\n avgCharWidth: 4,\n keyStr: keyStr,\n charCache: {}\n };\n\n // Since the container objects are arranged from most recent to least recent order, we need to add the new\n // object at the beginning of the list.\n container.next = this.first;\n container.next && (container.next.prev = container);\n this.first = container;\n if (!this.last) {\n this.last = container;\n }\n this.length += 1;\n\n node = container.node = doc.createElement('div');\n this.rootNode.appendChild(node);\n\n if (documentSupport.isIE && !documentSupport.hasSVG) {\n node.style.setAttribute('cssText', keyStr);\n } else {\n node.setAttribute('style', keyStr);\n }\n\n node.setAttribute('aria-hidden', 'true');\n node.setAttribute('role', 'presentation');\n node.style.display = 'inline-block';\n\n node.innerHTML = slLib.testStrAvg; // A test string.\n container.lineHeight = node.offsetHeight;\n container.avgCharWidth = node.offsetWidth / 3;\n\n if (documentSupport.isBrowserLess) {\n node = container.svgText = doc.createElementNS('http://www.w3.org/2000/svg', 'text');\n node.setAttribute('style', keyStr);\n this.svgRoot.appendChild(node);\n\n node.textContent = slLib.testStrAvg; // A test string.\n container.lineHeight = node.getBBox().height;\n container.avgCharWidth = (node.getBBox().width - SVG_BBOX_CORRECTION) / 3;\n\n node.textContent = '...';\n container.ellipsesWidth = node.getBBox().width - SVG_BBOX_CORRECTION;\n node.textContent = '.';\n container.dotWidth = node.getBBox().width - SVG_BBOX_CORRECTION;\n } else {\n node.innerHTML = '...';\n container.ellipsesWidth = node.offsetWidth;\n node.innerHTML = '.';\n container.dotWidth = node.offsetWidth;\n node.innerHTML = '';\n }\n\n return container;\n};\n\nContainerManager.prototype.removeContainer = function (cObj) {\n var keyStr = cObj.keyStr;\n\n if (!keyStr || !this.length || !cObj) {\n return;\n }\n this.length -= 1;\n\n cObj.prev && (cObj.prev.next = cObj.next);\n cObj.next && (cObj.next.prev = cObj.prev);\n this.first === cObj && (this.first = cObj.next);\n this.last === cObj && (this.last = cObj.prev);\n\n cObj.node.parentNode.removeChild(cObj.node);\n\n delete this.containers[keyStr];\n};\n\nContainerManager.prototype.dispose = function () {\n var key,\n containers = this.containers;\n\n this.maxContainers = null;\n for (key in containers) {\n this.removeContainer(containers[key]);\n }\n\n this.rootNode.parentNode.removeChild(this.rootNode);\n\n this.rootNode = null;\n this.first = null;\n this.last = null;\n};\n\nmodule.exports = ContainerManager;","export default function(a, b) {\n return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","import ascending from \"./ascending\";\n\nexport default function(compare) {\n if (compare.length === 1) compare = ascendingComparator(compare);\n return {\n left: function(a, x, lo, hi) {\n if (lo == null) lo = 0;\n if (hi == null) hi = a.length;\n while (lo < hi) {\n var mid = lo + hi >>> 1;\n if (compare(a[mid], x) < 0) lo = mid + 1;\n else hi = mid;\n }\n return lo;\n },\n right: function(a, x, lo, hi) {\n if (lo == null) lo = 0;\n if (hi == null) hi = a.length;\n while (lo < hi) {\n var mid = lo + hi >>> 1;\n if (compare(a[mid], x) > 0) hi = mid;\n else lo = mid + 1;\n }\n return lo;\n }\n };\n}\n\nfunction ascendingComparator(f) {\n return function(d, x) {\n return ascending(f(d), x);\n };\n}\n","import ascending from \"./ascending\";\nimport bisector from \"./bisector\";\n\nvar ascendingBisect = bisector(ascending);\nexport var bisectRight = ascendingBisect.right;\nexport var bisectLeft = ascendingBisect.left;\nexport default bisectRight;\n","import {pair} from \"./pairs\";\n\nexport default function(values0, values1, reduce) {\n var n0 = values0.length,\n n1 = values1.length,\n values = new Array(n0 * n1),\n i0,\n i1,\n i,\n value0;\n\n if (reduce == null) reduce = pair;\n\n for (i0 = i = 0; i0 < n0; ++i0) {\n for (value0 = values0[i0], i1 = 0; i1 < n1; ++i1, ++i) {\n values[i] = reduce(value0, values1[i1]);\n }\n }\n\n return values;\n}\n","export default function(x) {\n return x === null ? NaN : +x;\n}\n","var array = Array.prototype;\n\nexport var slice = array.slice;\nexport var map = array.map;\n","export default function(start, stop, step) {\n start = +start, stop = +stop, step = (n = arguments.length) < 2 ? (stop = start, start = 0, 1) : n < 3 ? 1 : +step;\n\n var i = -1,\n n = Math.max(0, Math.ceil((stop - start) / step)) | 0,\n range = new Array(n);\n\n while (++i < n) {\n range[i] = start + i * step;\n }\n\n return range;\n}\n","var e10 = Math.sqrt(50),\n e5 = Math.sqrt(10),\n e2 = Math.sqrt(2);\n\nexport default function(start, stop, count) {\n var reverse,\n i = -1,\n n,\n ticks,\n step;\n\n stop = +stop, start = +start, count = +count;\n if (start === stop && count > 0) return [start];\n if (reverse = stop < start) n = start, start = stop, stop = n;\n if ((step = tickIncrement(start, stop, count)) === 0 || !isFinite(step)) return [];\n\n if (step > 0) {\n start = Math.ceil(start / step);\n stop = Math.floor(stop / step);\n ticks = new Array(n = Math.ceil(stop - start + 1));\n while (++i < n) ticks[i] = (start + i) * step;\n } else {\n start = Math.floor(start * step);\n stop = Math.ceil(stop * step);\n ticks = new Array(n = Math.ceil(start - stop + 1));\n while (++i < n) ticks[i] = (start - i) / step;\n }\n\n if (reverse) ticks.reverse();\n\n return ticks;\n}\n\nexport function tickIncrement(start, stop, count) {\n var step = (stop - start) / Math.max(0, count),\n power = Math.floor(Math.log(step) / Math.LN10),\n error = step / Math.pow(10, power);\n return power >= 0\n ? (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1) * Math.pow(10, power)\n : -Math.pow(10, -power) / (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1);\n}\n\nexport function tickStep(start, stop, count) {\n var step0 = Math.abs(stop - start) / Math.max(0, count),\n step1 = Math.pow(10, Math.floor(Math.log(step0) / Math.LN10)),\n error = step0 / step1;\n if (error >= e10) step1 *= 10;\n else if (error >= e5) step1 *= 5;\n else if (error >= e2) step1 *= 2;\n return stop < start ? -step1 : step1;\n}\n","export default function(values) {\n return Math.ceil(Math.log(values.length) / Math.LN2) + 1;\n}\n","import number from \"./number\";\n\nexport default function(values, p, valueof) {\n if (valueof == null) valueof = number;\n if (!(n = values.length)) return;\n if ((p = +p) <= 0 || n < 2) return +valueof(values[0], 0, values);\n if (p >= 1) return +valueof(values[n - 1], n - 1, values);\n var n,\n i = (n - 1) * p,\n i0 = Math.floor(i),\n value0 = +valueof(values[i0], i0, values),\n value1 = +valueof(values[i0 + 1], i0 + 1, values);\n return value0 + (value1 - value0) * (i - i0);\n}\n","export var prefix = \"$\";\n\nfunction Map() {}\n\nMap.prototype = map.prototype = {\n constructor: Map,\n has: function(key) {\n return (prefix + key) in this;\n },\n get: function(key) {\n return this[prefix + key];\n },\n set: function(key, value) {\n this[prefix + key] = value;\n return this;\n },\n remove: function(key) {\n var property = prefix + key;\n return property in this && delete this[property];\n },\n clear: function() {\n for (var property in this) if (property[0] === prefix) delete this[property];\n },\n keys: function() {\n var keys = [];\n for (var property in this) if (property[0] === prefix) keys.push(property.slice(1));\n return keys;\n },\n values: function() {\n var values = [];\n for (var property in this) if (property[0] === prefix) values.push(this[property]);\n return values;\n },\n entries: function() {\n var entries = [];\n for (var property in this) if (property[0] === prefix) entries.push({key: property.slice(1), value: this[property]});\n return entries;\n },\n size: function() {\n var size = 0;\n for (var property in this) if (property[0] === prefix) ++size;\n return size;\n },\n empty: function() {\n for (var property in this) if (property[0] === prefix) return false;\n return true;\n },\n each: function(f) {\n for (var property in this) if (property[0] === prefix) f(this[property], property.slice(1), this);\n }\n};\n\nfunction map(object, f) {\n var map = new Map;\n\n // Copy constructor.\n if (object instanceof Map) object.each(function(value, key) { map.set(key, value); });\n\n // Index array by numeric index or specified key function.\n else if (Array.isArray(object)) {\n var i = -1,\n n = object.length,\n o;\n\n if (f == null) while (++i < n) map.set(i, object[i]);\n else while (++i < n) map.set(f(o = object[i], i, object), o);\n }\n\n // Convert object to map.\n else if (object) for (var key in object) map.set(key, object[key]);\n\n return map;\n}\n\nexport default map;\n","import map from \"./map\";\n\nexport default function() {\n var keys = [],\n sortKeys = [],\n sortValues,\n rollup,\n nest;\n\n function apply(array, depth, createResult, setResult) {\n if (depth >= keys.length) {\n if (sortValues != null) array.sort(sortValues);\n return rollup != null ? rollup(array) : array;\n }\n\n var i = -1,\n n = array.length,\n key = keys[depth++],\n keyValue,\n value,\n valuesByKey = map(),\n values,\n result = createResult();\n\n while (++i < n) {\n if (values = valuesByKey.get(keyValue = key(value = array[i]) + \"\")) {\n values.push(value);\n } else {\n valuesByKey.set(keyValue, [value]);\n }\n }\n\n valuesByKey.each(function(values, key) {\n setResult(result, key, apply(values, depth, createResult, setResult));\n });\n\n return result;\n }\n\n function entries(map, depth) {\n if (++depth > keys.length) return map;\n var array, sortKey = sortKeys[depth - 1];\n if (rollup != null && depth >= keys.length) array = map.entries();\n else array = [], map.each(function(v, k) { array.push({key: k, values: entries(v, depth)}); });\n return sortKey != null ? array.sort(function(a, b) { return sortKey(a.key, b.key); }) : array;\n }\n\n return nest = {\n object: function(array) { return apply(array, 0, createObject, setObject); },\n map: function(array) { return apply(array, 0, createMap, setMap); },\n entries: function(array) { return entries(apply(array, 0, createMap, setMap), 0); },\n key: function(d) { keys.push(d); return nest; },\n sortKeys: function(order) { sortKeys[keys.length - 1] = order; return nest; },\n sortValues: function(order) { sortValues = order; return nest; },\n rollup: function(f) { rollup = f; return nest; }\n };\n}\n\nfunction createObject() {\n return {};\n}\n\nfunction setObject(object, key, value) {\n object[key] = value;\n}\n\nfunction createMap() {\n return map();\n}\n\nfunction setMap(map, key, value) {\n map.set(key, value);\n}\n","import {default as map, prefix} from \"./map\";\n\nfunction Set() {}\n\nvar proto = map.prototype;\n\nSet.prototype = set.prototype = {\n constructor: Set,\n has: proto.has,\n add: function(value) {\n value += \"\";\n this[prefix + value] = value;\n return this;\n },\n remove: proto.remove,\n clear: proto.clear,\n values: proto.keys,\n size: proto.size,\n empty: proto.empty,\n each: proto.each\n};\n\nfunction set(object, f) {\n var set = new Set;\n\n // Copy constructor.\n if (object instanceof Set) object.each(function(value) { set.add(value); });\n\n // Otherwise, assume it’s an array.\n else if (object) {\n var i = -1, n = object.length;\n if (f == null) while (++i < n) set.add(object[i]);\n else while (++i < n) set.add(f(object[i], i, object));\n }\n\n return set;\n}\n\nexport default set;\n","var array = Array.prototype;\n\nexport var map = array.map;\nexport var slice = array.slice;\n","import {map} from \"d3-collection\";\nimport {slice} from \"./array\";\n\nexport var implicit = {name: \"implicit\"};\n\nexport default function ordinal(range) {\n var index = map(),\n domain = [],\n unknown = implicit;\n\n range = range == null ? [] : slice.call(range);\n\n function scale(d) {\n var key = d + \"\", i = index.get(key);\n if (!i) {\n if (unknown !== implicit) return unknown;\n index.set(key, i = domain.push(d));\n }\n return range[(i - 1) % range.length];\n }\n\n scale.domain = function(_) {\n if (!arguments.length) return domain.slice();\n domain = [], index = map();\n var i = -1, n = _.length, d, key;\n while (++i < n) if (!index.has(key = (d = _[i]) + \"\")) index.set(key, domain.push(d));\n return scale;\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = slice.call(_), scale) : range.slice();\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n scale.copy = function() {\n return ordinal()\n .domain(domain)\n .range(range)\n .unknown(unknown);\n };\n\n return scale;\n}\n","import {range as sequence} from \"d3-array\";\nimport ordinal from \"./ordinal\";\n\nexport default function band() {\n var scale = ordinal().unknown(undefined),\n domain = scale.domain,\n ordinalRange = scale.range,\n range = [0, 1],\n step,\n bandwidth,\n round = false,\n paddingInner = 0,\n paddingOuter = 0,\n align = 0.5;\n\n delete scale.unknown;\n function rescale() {\n var n = domain().length,\n reverse = range[1] < range[0],\n start = range[reverse - 0],\n stop = range[1 - reverse];\n step = (stop - start) / Math.max(1, n - paddingInner + paddingOuter * 2);\n if (round) step = Math.floor(step);\n start += (stop - start - step * (n - paddingInner)) * align;\n bandwidth = step * (1 - paddingInner);\n if (round) start = Math.round(start), bandwidth = Math.round(bandwidth);\n var values = sequence(n).map(function(i) { return start + step * i; });\n return ordinalRange(reverse ? values.reverse() : values);\n }\n\n scale.domain = function(_) {\n return arguments.length ? (domain(_), rescale()) : domain();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = [+_[0], +_[1]], rescale()) : range.slice();\n };\n\n scale.rangeRound = function(_) {\n return range = [+_[0], +_[1]], round = true, rescale();\n };\n\n scale.bandwidth = function() {\n return bandwidth;\n };\n\n scale.step = function() {\n return step;\n };\n\n scale.round = function(_) {\n return arguments.length ? (round = !!_, rescale()) : round;\n };\n\n scale.padding = function(_) {\n return arguments.length ? (paddingInner = paddingOuter = Math.max(0, Math.min(1, _)), rescale()) : paddingInner;\n };\n\n scale.paddingInner = function(_) {\n return arguments.length ? (paddingInner = Math.max(0, Math.min(1, _)), rescale()) : paddingInner;\n };\n\n scale.paddingOuter = function(_) {\n return arguments.length ? (paddingOuter = Math.max(0, Math.min(1, _)), rescale()) : paddingOuter;\n };\n\n scale.align = function(_) {\n return arguments.length ? (align = Math.max(0, Math.min(1, _)), rescale()) : align;\n };\n\n scale.copy = function() {\n return band()\n .domain(domain())\n .range(range)\n .round(round)\n .paddingInner(paddingInner)\n .paddingOuter(paddingOuter)\n .align(align);\n };\n\n scale.invertExtent = function(r0, r1) {\n var lo = +r0,\n hi = arguments.length > 1 ? +r1 : lo,\n reverse = range[1] < range[0],\n values = reverse ? ordinalRange().reverse() : ordinalRange(),\n n = values.length - 1, a, b, t,\n hiIndex;\n values.push(values[n] + this.step());\n // order range inputs, bail if outside of scale range\n if (hi < lo) t = lo, lo = hi, hi = t;\n if (hi < values[0] || lo > range[1-reverse]) return undefined;\n\n // binary search to index into scale range\n a = Math.max(0, getClosestIndexOf(values, lo));\n hiIndex = getClosestIndexOf(values, hi);\n b = lo===hi ? a : Math.max(a, hiIndex - 1);\n\n // increment index a if lo is within padding gap\n // if (lo - values[a] > bandwidth + 1e-10) ++a;\n\n if (reverse) t = a, a = n - b, b = n - t; // map + swap\n return (a > b) ? undefined : domain().slice(a, b+1);\n };\n\n scale.invert = function (r0, r1) {\n var lo = +r0,\n hi = arguments.length > 1 ? +r1 : lo,\n reverse = range[1] < range[0],\n values = reverse ? ordinalRange().reverse() : ordinalRange(),\n n = values.length - 1,\n a,\n t;\n\n // order range inputs, bail if outside of scale range\n if (hi < lo) t = lo, lo = hi, hi = t;\n if (hi < values[0] || lo > range[1-reverse]) return undefined;\n\n // binary search to index into scale range\n a = Math.max(0, getClosestIndexOf(values, lo, 'left'));\n\n // increment index a if lo is within padding gap\n // if (lo - values[a] > bandwidth + 1e-10) ++a;\n\n return domain()[reverse ? n - a : a];\n }\n return rescale();\n}\n\nfunction pointish(scale) {\n var copy = scale.copy;\n\n scale.padding = scale.paddingOuter;\n delete scale.paddingInner;\n delete scale.paddingOuter;\n\n scale.copy = function() {\n return pointish(copy());\n };\n\n return scale;\n}\n\nexport function point() {\n return pointish(band().paddingInner(1));\n}\n\nfunction getClosestIndexOf (arr, value, side) {\n var low = 0,\n arrLen = arr.length,\n high = arrLen - 1,\n highVal,\n mid,\n d1,\n d2;\n\n while (low < high) {\n mid = Math.floor((low + high) / 2);\n d1 = Math.abs(arr[mid] - value);\n d2 = Math.abs(arr[mid + 1] - value);\n\n if (d2 <= d1) {\n low = mid + 1;\n }\n else {\n high = mid;\n }\n }\n\n if (!side) {\n return high;\n }\n\n highVal = arr[high];\n if (highVal === value) {\n return high;\n } else if (highVal > value) {\n if (high === 0) { return high; }\n return side === 'left'? high - 1 : high;\n } else {\n if (high === arr.length - 1) { return high; }\n return side === 'left'? high : high + 1;\n }\n}","export default function(constructor, factory, prototype) {\n constructor.prototype = factory.prototype = prototype;\n prototype.constructor = constructor;\n}\n\nexport function extend(parent, definition) {\n var prototype = Object.create(parent.prototype);\n for (var key in definition) prototype[key] = definition[key];\n return prototype;\n}\n","import define, {extend} from \"./define\";\n\nexport function Color() {}\n\nexport var darker = 0.7;\nexport var brighter = 1 / darker;\n\nvar reI = \"\\\\s*([+-]?\\\\d+)\\\\s*\",\n reN = \"\\\\s*([+-]?\\\\d*\\\\.?\\\\d+(?:[eE][+-]?\\\\d+)?)\\\\s*\",\n reP = \"\\\\s*([+-]?\\\\d*\\\\.?\\\\d+(?:[eE][+-]?\\\\d+)?)%\\\\s*\",\n reHex3 = /^#([0-9a-f]{3})$/,\n reHex6 = /^#([0-9a-f]{6})$/,\n reRgbInteger = new RegExp(\"^rgb\\\\(\" + [reI, reI, reI] + \"\\\\)$\"),\n reRgbPercent = new RegExp(\"^rgb\\\\(\" + [reP, reP, reP] + \"\\\\)$\"),\n reRgbaInteger = new RegExp(\"^rgba\\\\(\" + [reI, reI, reI, reN] + \"\\\\)$\"),\n reRgbaPercent = new RegExp(\"^rgba\\\\(\" + [reP, reP, reP, reN] + \"\\\\)$\"),\n reHslPercent = new RegExp(\"^hsl\\\\(\" + [reN, reP, reP] + \"\\\\)$\"),\n reHslaPercent = new RegExp(\"^hsla\\\\(\" + [reN, reP, reP, reN] + \"\\\\)$\");\n\nvar 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\ndefine(Color, color, {\n displayable: function() {\n return this.rgb().displayable();\n },\n hex: function() {\n return this.rgb().hex();\n },\n toString: function() {\n return this.rgb() + \"\";\n }\n});\n\nexport default function color(format) {\n var m;\n format = (format + \"\").trim().toLowerCase();\n return (m = reHex3.exec(format)) ? (m = parseInt(m[1], 16), new Rgb((m >> 8 & 0xf) | (m >> 4 & 0x0f0), (m >> 4 & 0xf) | (m & 0xf0), ((m & 0xf) << 4) | (m & 0xf), 1)) // #f00\n : (m = reHex6.exec(format)) ? rgbn(parseInt(m[1], 16)) // #ff0000\n : (m = reRgbInteger.exec(format)) ? new Rgb(m[1], m[2], m[3], 1) // rgb(255, 0, 0)\n : (m = reRgbPercent.exec(format)) ? new Rgb(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, 1) // rgb(100%, 0%, 0%)\n : (m = reRgbaInteger.exec(format)) ? rgba(m[1], m[2], m[3], m[4]) // rgba(255, 0, 0, 1)\n : (m = reRgbaPercent.exec(format)) ? rgba(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, m[4]) // rgb(100%, 0%, 0%, 1)\n : (m = reHslPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, 1) // hsl(120, 50%, 50%)\n : (m = reHslaPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, m[4]) // hsla(120, 50%, 50%, 1)\n : named.hasOwnProperty(format) ? rgbn(named[format])\n : format === \"transparent\" ? new Rgb(NaN, NaN, NaN, 0)\n : null;\n}\n\nfunction rgbn(n) {\n return new Rgb(n >> 16 & 0xff, n >> 8 & 0xff, n & 0xff, 1);\n}\n\nfunction rgba(r, g, b, a) {\n if (a <= 0) r = g = b = NaN;\n return new Rgb(r, g, b, a);\n}\n\nexport function rgbConvert(o) {\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Rgb;\n o = o.rgb();\n return new Rgb(o.r, o.g, o.b, o.opacity);\n}\n\nexport function rgb(r, g, b, opacity) {\n return arguments.length === 1 ? rgbConvert(r) : new Rgb(r, g, b, opacity == null ? 1 : opacity);\n}\n\nexport function Rgb(r, g, b, opacity) {\n this.r = +r;\n this.g = +g;\n this.b = +b;\n this.opacity = +opacity;\n}\n\ndefine(Rgb, rgb, extend(Color, {\n 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, this.opacity);\n },\n 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, this.opacity);\n },\n rgb: function() {\n return this;\n },\n 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 && (0 <= this.opacity && this.opacity <= 1);\n },\n hex: function() {\n return \"#\" + hex(this.r) + hex(this.g) + hex(this.b);\n },\n toString: function() {\n var a = this.opacity; a = isNaN(a) ? 1 : Math.max(0, Math.min(1, a));\n return (a === 1 ? \"rgb(\" : \"rgba(\")\n + Math.max(0, Math.min(255, Math.round(this.r) || 0)) + \", \"\n + Math.max(0, Math.min(255, Math.round(this.g) || 0)) + \", \"\n + Math.max(0, Math.min(255, Math.round(this.b) || 0))\n + (a === 1 ? \")\" : \", \" + a + \")\");\n }\n}));\n\nfunction hex(value) {\n value = Math.max(0, Math.min(255, Math.round(value) || 0));\n return (value < 16 ? \"0\" : \"\") + value.toString(16);\n}\n\nfunction hsla(h, s, l, a) {\n if (a <= 0) h = s = l = NaN;\n else if (l <= 0 || l >= 1) h = s = NaN;\n else if (s <= 0) h = NaN;\n return new Hsl(h, s, l, a);\n}\n\nexport function hslConvert(o) {\n if (o instanceof Hsl) return new Hsl(o.h, o.s, o.l, o.opacity);\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Hsl;\n if (o instanceof Hsl) return o;\n o = o.rgb();\n var r = o.r / 255,\n g = o.g / 255,\n b = o.b / 255,\n min = Math.min(r, g, b),\n max = Math.max(r, g, b),\n h = NaN,\n s = max - min,\n l = (max + min) / 2;\n if (s) {\n if (r === max) h = (g - b) / s + (g < b) * 6;\n else if (g === max) h = (b - r) / s + 2;\n else h = (r - g) / s + 4;\n s /= l < 0.5 ? max + min : 2 - max - min;\n h *= 60;\n } else {\n s = l > 0 && l < 1 ? 0 : h;\n }\n return new Hsl(h, s, l, o.opacity);\n}\n\nexport function hsl(h, s, l, opacity) {\n return arguments.length === 1 ? hslConvert(h) : new Hsl(h, s, l, opacity == null ? 1 : opacity);\n}\n\nfunction Hsl(h, s, l, opacity) {\n this.h = +h;\n this.s = +s;\n this.l = +l;\n this.opacity = +opacity;\n}\n\ndefine(Hsl, hsl, extend(Color, {\n brighter: function(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n darker: function(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n 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 < 0.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 this.opacity\n );\n },\n displayable: function() {\n return (0 <= this.s && this.s <= 1 || isNaN(this.s))\n && (0 <= this.l && this.l <= 1)\n && (0 <= this.opacity && this.opacity <= 1);\n }\n}));\n\n/* From FvD 13.37, CSS Color Module Level 3 */\nfunction 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","export var deg2rad = Math.PI / 180;\nexport var rad2deg = 180 / Math.PI;\n","import define, {extend} from \"./define\";\nimport {Color, rgbConvert, Rgb} from \"./color\";\nimport {deg2rad, rad2deg} from \"./math\";\n\n// https://beta.observablehq.com/@mbostock/lab-and-rgb\nvar K = 18,\n Xn = 0.96422,\n Yn = 1,\n Zn = 0.82521,\n t0 = 4 / 29,\n t1 = 6 / 29,\n t2 = 3 * t1 * t1,\n t3 = t1 * t1 * t1;\n\nfunction labConvert(o) {\n if (o instanceof Lab) return new Lab(o.l, o.a, o.b, o.opacity);\n if (o instanceof Hcl) {\n if (isNaN(o.h)) return new Lab(o.l, 0, 0, o.opacity);\n var h = o.h * deg2rad;\n return new Lab(o.l, Math.cos(h) * o.c, Math.sin(h) * o.c, o.opacity);\n }\n if (!(o instanceof Rgb)) o = rgbConvert(o);\n var r = rgb2lrgb(o.r),\n g = rgb2lrgb(o.g),\n b = rgb2lrgb(o.b),\n y = xyz2lab((0.2225045 * r + 0.7168786 * g + 0.0606169 * b) / Yn), x, z;\n if (r === g && g === b) x = z = y; else {\n x = xyz2lab((0.4360747 * r + 0.3850649 * g + 0.1430804 * b) / Xn);\n z = xyz2lab((0.0139322 * r + 0.0971045 * g + 0.7141733 * b) / Zn);\n }\n return new Lab(116 * y - 16, 500 * (x - y), 200 * (y - z), o.opacity);\n}\n\nexport function gray(l, opacity) {\n return new Lab(l, 0, 0, opacity == null ? 1 : opacity);\n}\n\nexport default function lab(l, a, b, opacity) {\n return arguments.length === 1 ? labConvert(l) : new Lab(l, a, b, opacity == null ? 1 : opacity);\n}\n\nexport function Lab(l, a, b, opacity) {\n this.l = +l;\n this.a = +a;\n this.b = +b;\n this.opacity = +opacity;\n}\n\ndefine(Lab, lab, extend(Color, {\n brighter: function(k) {\n return new Lab(this.l + K * (k == null ? 1 : k), this.a, this.b, this.opacity);\n },\n darker: function(k) {\n return new Lab(this.l - K * (k == null ? 1 : k), this.a, this.b, this.opacity);\n },\n 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 x = Xn * lab2xyz(x);\n y = Yn * lab2xyz(y);\n z = Zn * lab2xyz(z);\n return new Rgb(\n lrgb2rgb( 3.1338561 * x - 1.6168667 * y - 0.4906146 * z),\n lrgb2rgb(-0.9787684 * x + 1.9161415 * y + 0.0334540 * z),\n lrgb2rgb( 0.0719453 * x - 0.2289914 * y + 1.4052427 * z),\n this.opacity\n );\n }\n}));\n\nfunction xyz2lab(t) {\n return t > t3 ? Math.pow(t, 1 / 3) : t / t2 + t0;\n}\n\nfunction lab2xyz(t) {\n return t > t1 ? t * t * t : t2 * (t - t0);\n}\n\nfunction lrgb2rgb(x) {\n return 255 * (x <= 0.0031308 ? 12.92 * x : 1.055 * Math.pow(x, 1 / 2.4) - 0.055);\n}\n\nfunction rgb2lrgb(x) {\n return (x /= 255) <= 0.04045 ? x / 12.92 : Math.pow((x + 0.055) / 1.055, 2.4);\n}\n\nfunction hclConvert(o) {\n if (o instanceof Hcl) return new Hcl(o.h, o.c, o.l, o.opacity);\n if (!(o instanceof Lab)) o = labConvert(o);\n if (o.a === 0 && o.b === 0) return new Hcl(NaN, 0, o.l, o.opacity);\n var h = Math.atan2(o.b, o.a) * rad2deg;\n return new Hcl(h < 0 ? h + 360 : h, Math.sqrt(o.a * o.a + o.b * o.b), o.l, o.opacity);\n}\n\nexport function lch(l, c, h, opacity) {\n return arguments.length === 1 ? hclConvert(l) : new Hcl(h, c, l, opacity == null ? 1 : opacity);\n}\n\nexport function hcl(h, c, l, opacity) {\n return arguments.length === 1 ? hclConvert(h) : new Hcl(h, c, l, opacity == null ? 1 : opacity);\n}\n\nexport function Hcl(h, c, l, opacity) {\n this.h = +h;\n this.c = +c;\n this.l = +l;\n this.opacity = +opacity;\n}\n\ndefine(Hcl, hcl, extend(Color, {\n brighter: function(k) {\n return new Hcl(this.h, this.c, this.l + K * (k == null ? 1 : k), this.opacity);\n },\n darker: function(k) {\n return new Hcl(this.h, this.c, this.l - K * (k == null ? 1 : k), this.opacity);\n },\n rgb: function() {\n return labConvert(this).rgb();\n }\n}));\n","import define, {extend} from \"./define\";\nimport {Color, rgbConvert, Rgb, darker, brighter} from \"./color\";\nimport {deg2rad, rad2deg} from \"./math\";\n\nvar A = -0.14861,\n B = +1.78277,\n C = -0.29227,\n D = -0.90649,\n E = +1.97294,\n ED = E * D,\n EB = E * B,\n BC_DA = B * C - D * A;\n\nfunction cubehelixConvert(o) {\n if (o instanceof Cubehelix) return new Cubehelix(o.h, o.s, o.l, o.opacity);\n if (!(o instanceof Rgb)) o = rgbConvert(o);\n var r = o.r / 255,\n g = o.g / 255,\n b = o.b / 255,\n l = (BC_DA * b + ED * r - EB * g) / (BC_DA + ED - EB),\n bl = b - l,\n 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 return new Cubehelix(h < 0 ? h + 360 : h, s, l, o.opacity);\n}\n\nexport default function cubehelix(h, s, l, opacity) {\n return arguments.length === 1 ? cubehelixConvert(h) : new Cubehelix(h, s, l, opacity == null ? 1 : opacity);\n}\n\nexport function Cubehelix(h, s, l, opacity) {\n this.h = +h;\n this.s = +s;\n this.l = +l;\n this.opacity = +opacity;\n}\n\ndefine(Cubehelix, cubehelix, extend(Color, {\n brighter: function(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Cubehelix(this.h, this.s, this.l * k, this.opacity);\n },\n darker: function(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Cubehelix(this.h, this.s, this.l * k, this.opacity);\n },\n 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 this.opacity\n );\n }\n}));\n","export function basis(t1, v0, v1, v2, v3) {\n var t2 = t1 * t1, t3 = t2 * t1;\n return ((1 - 3 * t1 + 3 * t2 - t3) * v0\n + (4 - 6 * t2 + 3 * t3) * v1\n + (1 + 3 * t1 + 3 * t2 - 3 * t3) * v2\n + t3 * v3) / 6;\n}\n\nexport default function(values) {\n var n = values.length - 1;\n return function(t) {\n var i = t <= 0 ? (t = 0) : t >= 1 ? (t = 1, n - 1) : Math.floor(t * n),\n v1 = values[i],\n v2 = values[i + 1],\n v0 = i > 0 ? values[i - 1] : 2 * v1 - v2,\n v3 = i < n - 1 ? values[i + 2] : 2 * v2 - v1;\n return basis((t - i / n) * n, v0, v1, v2, v3);\n };\n}\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","import constant from \"./constant\";\n\nfunction linear(a, d) {\n return function(t) {\n return a + t * d;\n };\n}\n\nfunction exponential(a, b, y) {\n return a = Math.pow(a, y), b = Math.pow(b, y) - a, y = 1 / y, function(t) {\n return Math.pow(a + t * b, y);\n };\n}\n\nexport function hue(a, b) {\n var d = b - a;\n return d ? linear(a, d > 180 || d < -180 ? d - 360 * Math.round(d / 360) : d) : constant(isNaN(a) ? b : a);\n}\n\nexport function gamma(y) {\n return (y = +y) === 1 ? nogamma : function(a, b) {\n return b - a ? exponential(a, b, y) : constant(isNaN(a) ? b : a);\n };\n}\n\nexport default function nogamma(a, b) {\n var d = b - a;\n return d ? linear(a, d) : constant(isNaN(a) ? b : a);\n}\n","import {rgb as colorRgb} from \"d3-color\";\nimport basis from \"./basis\";\nimport basisClosed from \"./basisClosed\";\nimport nogamma, {gamma} from \"./color\";\n\nexport default (function rgbGamma(y) {\n var color = gamma(y);\n\n function rgb(start, end) {\n var r = color((start = colorRgb(start)).r, (end = colorRgb(end)).r),\n g = color(start.g, end.g),\n b = color(start.b, end.b),\n opacity = nogamma(start.opacity, end.opacity);\n return function(t) {\n start.r = r(t);\n start.g = g(t);\n start.b = b(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n\n rgb.gamma = rgbGamma;\n\n return rgb;\n})(1);\n\nfunction rgbSpline(spline) {\n return function(colors) {\n var n = colors.length,\n r = new Array(n),\n g = new Array(n),\n b = new Array(n),\n i, color;\n for (i = 0; i < n; ++i) {\n color = colorRgb(colors[i]);\n r[i] = color.r || 0;\n g[i] = color.g || 0;\n b[i] = color.b || 0;\n }\n r = spline(r);\n g = spline(g);\n b = spline(b);\n color.opacity = 1;\n return function(t) {\n color.r = r(t);\n color.g = g(t);\n color.b = b(t);\n return color + \"\";\n };\n };\n}\n\nexport var rgbBasis = rgbSpline(basis);\nexport var rgbBasisClosed = rgbSpline(basisClosed);\n","export default function(a, b) {\n return a = +a, b -= a, function(t) {\n return a + b * t;\n };\n}\n","import {basis} from \"./basis\";\n\nexport default function(values) {\n var n = values.length;\n return function(t) {\n var i = Math.floor(((t %= 1) < 0 ? ++t : t) * n),\n v0 = values[(i + n - 1) % n],\n v1 = values[i % n],\n v2 = values[(i + 1) % n],\n v3 = values[(i + 2) % n];\n return basis((t - i / n) * n, v0, v1, v2, v3);\n };\n}\n","import number from \"./number\";\n\nvar reA = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n reB = new RegExp(reA.source, \"g\");\n\nfunction zero(b) {\n return function() {\n return b;\n };\n}\n\nfunction one(b) {\n return function(t) {\n return b(t) + \"\";\n };\n}\n\nexport default function(a, b) {\n var bi = reA.lastIndex = reB.lastIndex = 0, // scan index for next number in b\n am, // current match in a\n bm, // current match in b\n bs, // string preceding current number in b, if any\n i = -1, // index in s\n s = [], // string constants and placeholders\n q = []; // number interpolators\n\n // Coerce inputs to strings.\n a = a + \"\", b = b + \"\";\n\n // Interpolate pairs of numbers in a & b.\n while ((am = reA.exec(a))\n && (bm = reB.exec(b))) {\n if ((bs = bm.index) > bi) { // a string precedes the next number in b\n bs = b.slice(bi, bs);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n if ((am = am[0]) === (bm = bm[0])) { // numbers in a & b match\n if (s[i]) s[i] += bm; // coalesce with previous string\n else s[++i] = bm;\n } else { // interpolate non-matching numbers\n s[++i] = null;\n q.push({i: i, x: number(am, bm)});\n }\n bi = reB.lastIndex;\n }\n\n // Add remains of b.\n if (bi < b.length) {\n bs = b.slice(bi);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n\n // Special optimization for only a single match.\n // Otherwise, interpolate each of the numbers and rejoin the string.\n return s.length < 2 ? (q[0]\n ? one(q[0].x)\n : zero(b))\n : (b = q.length, function(t) {\n for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t);\n return s.join(\"\");\n });\n}\n","import decompose, {identity} from \"./decompose\";\n\nvar cssNode,\n cssRoot,\n cssView,\n svgNode;\n\nexport function parseCss(value) {\n if (value === \"none\") return identity;\n if (!cssNode) cssNode = document.createElement(\"DIV\"), cssRoot = document.documentElement, cssView = document.defaultView;\n cssNode.style.transform = value;\n value = cssView.getComputedStyle(cssRoot.appendChild(cssNode), null).getPropertyValue(\"transform\");\n cssRoot.removeChild(cssNode);\n value = value.slice(7, -1).split(\",\");\n return decompose(+value[0], +value[1], +value[2], +value[3], +value[4], +value[5]);\n}\n\nexport function parseSvg(value) {\n if (value == null) return identity;\n if (!svgNode) svgNode = document.createElementNS(\"http://www.w3.org/2000/svg\", \"g\");\n svgNode.setAttribute(\"transform\", value);\n if (!(value = svgNode.transform.baseVal.consolidate())) return identity;\n value = value.matrix;\n return decompose(value.a, value.b, value.c, value.d, value.e, value.f);\n}\n","import {color} from \"d3-color\";\nimport rgb from \"./rgb\";\nimport array from \"./array\";\nimport date from \"./date\";\nimport number from \"./number\";\nimport object from \"./object\";\nimport string from \"./string\";\nimport constant from \"./constant\";\n\nexport default function(a, b) {\n var t = typeof b, c;\n return b == null || t === \"boolean\" ? constant(b)\n : (t === \"number\" ? number\n : t === \"string\" ? ((c = color(b)) ? (b = c, rgb) : string)\n : b instanceof color ? rgb\n : b instanceof Date ? date\n : Array.isArray(b) ? array\n : typeof b.valueOf !== \"function\" && typeof b.toString !== \"function\" || isNaN(b) ? object\n : number)(a, b);\n}\n","export default function(a, b) {\n var d = new Date;\n return a = +a, b -= a, function(t) {\n return d.setTime(a + b * t), d;\n };\n}\n","import value from \"./value\";\n\nexport default function(a, b) {\n var nb = b ? b.length : 0,\n na = a ? Math.min(nb, a.length) : 0,\n x = new Array(na),\n c = new Array(nb),\n i;\n\n for (i = 0; i < na; ++i) x[i] = value(a[i], b[i]);\n for (; i < nb; ++i) c[i] = b[i];\n\n return function(t) {\n for (i = 0; i < na; ++i) c[i] = x[i](t);\n return c;\n };\n}\n","import value from \"./value\";\n\nexport default function(a, b) {\n var i = {},\n c = {},\n k;\n\n if (a === null || typeof a !== \"object\") a = {};\n if (b === null || typeof b !== \"object\") b = {};\n\n for (k in b) {\n if (k in a) {\n i[k] = value(a[k], b[k]);\n } else {\n c[k] = b[k];\n }\n }\n\n return function(t) {\n for (k in i) c[k] = i[k](t);\n return c;\n };\n}\n","export default function(a, b) {\n return a = +a, b -= a, function(t) {\n return Math.round(a + b * t);\n };\n}\n","var degrees = 180 / Math.PI;\n\nexport var identity = {\n translateX: 0,\n translateY: 0,\n rotate: 0,\n skewX: 0,\n scaleX: 1,\n scaleY: 1\n};\n\nexport default function(a, b, c, d, e, f) {\n var scaleX, scaleY, skewX;\n if (scaleX = Math.sqrt(a * a + b * b)) a /= scaleX, b /= scaleX;\n if (skewX = a * c + b * d) c -= a * skewX, d -= b * skewX;\n if (scaleY = Math.sqrt(c * c + d * d)) c /= scaleY, d /= scaleY, skewX /= scaleY;\n if (a * d < b * c) a = -a, b = -b, skewX = -skewX, scaleX = -scaleX;\n return {\n translateX: e,\n translateY: f,\n rotate: Math.atan2(b, a) * degrees,\n skewX: Math.atan(skewX) * degrees,\n scaleX: scaleX,\n scaleY: scaleY\n };\n}\n","import number from \"../number\";\nimport {parseCss, parseSvg} from \"./parse\";\n\nfunction interpolateTransform(parse, pxComma, pxParen, degParen) {\n\n function pop(s) {\n return s.length ? s.pop() + \" \" : \"\";\n }\n\n function translate(xa, ya, xb, yb, s, q) {\n if (xa !== xb || ya !== yb) {\n var i = s.push(\"translate(\", null, pxComma, null, pxParen);\n q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\n } else if (xb || yb) {\n s.push(\"translate(\" + xb + pxComma + yb + pxParen);\n }\n }\n\n function rotate(a, b, s, q) {\n if (a !== b) {\n if (a - b > 180) b += 360; else if (b - a > 180) a += 360; // shortest path\n q.push({i: s.push(pop(s) + \"rotate(\", null, degParen) - 2, x: number(a, b)});\n } else if (b) {\n s.push(pop(s) + \"rotate(\" + b + degParen);\n }\n }\n\n function skewX(a, b, s, q) {\n if (a !== b) {\n q.push({i: s.push(pop(s) + \"skewX(\", null, degParen) - 2, x: number(a, b)});\n } else if (b) {\n s.push(pop(s) + \"skewX(\" + b + degParen);\n }\n }\n\n function scale(xa, ya, xb, yb, s, q) {\n if (xa !== xb || ya !== yb) {\n var i = s.push(pop(s) + \"scale(\", null, \",\", null, \")\");\n q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\n } else if (xb !== 1 || yb !== 1) {\n s.push(pop(s) + \"scale(\" + xb + \",\" + yb + \")\");\n }\n }\n\n return function(a, b) {\n var s = [], // string constants and placeholders\n q = []; // number interpolators\n a = parse(a), b = parse(b);\n translate(a.translateX, a.translateY, b.translateX, b.translateY, s, q);\n rotate(a.rotate, b.rotate, s, q);\n skewX(a.skewX, b.skewX, s, q);\n scale(a.scaleX, a.scaleY, b.scaleX, b.scaleY, s, q);\n a = b = null; // gc\n return function(t) {\n var i = -1, n = q.length, o;\n while (++i < n) s[(o = q[i]).i] = o.x(t);\n return s.join(\"\");\n };\n };\n}\n\nexport var interpolateTransformCss = interpolateTransform(parseCss, \"px, \", \"px)\", \"deg)\");\nexport var interpolateTransformSvg = interpolateTransform(parseSvg, \", \", \")\", \")\");\n","var rho = Math.SQRT2,\n rho2 = 2,\n rho4 = 4,\n epsilon2 = 1e-12;\n\nfunction cosh(x) {\n return ((x = Math.exp(x)) + 1 / x) / 2;\n}\n\nfunction sinh(x) {\n return ((x = Math.exp(x)) - 1 / x) / 2;\n}\n\nfunction tanh(x) {\n return ((x = Math.exp(2 * x)) - 1) / (x + 1);\n}\n\n// p0 = [ux0, uy0, w0]\n// p1 = [ux1, uy1, w1]\nexport default function(p0, p1) {\n var ux0 = p0[0], uy0 = p0[1], w0 = p0[2],\n ux1 = p1[0], uy1 = p1[1], w1 = p1[2],\n dx = ux1 - ux0,\n dy = uy1 - uy0,\n d2 = dx * dx + dy * dy,\n i,\n S;\n\n // Special case for u0 ≅ u1.\n if (d2 < epsilon2) {\n S = Math.log(w1 / w0) / rho;\n i = function(t) {\n return [\n ux0 + t * dx,\n uy0 + t * dy,\n w0 * Math.exp(rho * t * S)\n ];\n }\n }\n\n // General case.\n else {\n var d1 = Math.sqrt(d2),\n b0 = (w1 * w1 - w0 * w0 + rho4 * d2) / (2 * w0 * rho2 * d1),\n b1 = (w1 * w1 - w0 * w0 - rho4 * d2) / (2 * w1 * rho2 * d1),\n r0 = Math.log(Math.sqrt(b0 * b0 + 1) - b0),\n r1 = Math.log(Math.sqrt(b1 * b1 + 1) - b1);\n S = (r1 - r0) / rho;\n i = function(t) {\n var s = t * S,\n coshr0 = cosh(r0),\n u = w0 / (rho2 * d1) * (coshr0 * tanh(rho * s + r0) - sinh(r0));\n return [\n ux0 + u * dx,\n uy0 + u * dy,\n w0 * coshr0 / cosh(rho * s + r0)\n ];\n }\n }\n\n i.duration = S * 1000;\n\n return i;\n}\n","import {hsl as colorHsl} from \"d3-color\";\nimport color, {hue} from \"./color\";\n\nfunction hsl(hue) {\n return function(start, end) {\n var h = hue((start = colorHsl(start)).h, (end = colorHsl(end)).h),\n s = color(start.s, end.s),\n l = color(start.l, end.l),\n opacity = color(start.opacity, end.opacity);\n return function(t) {\n start.h = h(t);\n start.s = s(t);\n start.l = l(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n}\n\nexport default hsl(hue);\nexport var hslLong = hsl(color);\n","import {hcl as colorHcl} from \"d3-color\";\nimport color, {hue} from \"./color\";\n\nfunction hcl(hue) {\n return function(start, end) {\n var h = hue((start = colorHcl(start)).h, (end = colorHcl(end)).h),\n c = color(start.c, end.c),\n l = color(start.l, end.l),\n opacity = color(start.opacity, end.opacity);\n return function(t) {\n start.h = h(t);\n start.c = c(t);\n start.l = l(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n}\n\nexport default hcl(hue);\nexport var hclLong = hcl(color);\n","import {cubehelix as colorCubehelix} from \"d3-color\";\nimport color, {hue} from \"./color\";\n\nfunction cubehelix(hue) {\n return (function cubehelixGamma(y) {\n y = +y;\n\n function cubehelix(start, end) {\n var h = hue((start = colorCubehelix(start)).h, (end = colorCubehelix(end)).h),\n s = color(start.s, end.s),\n l = color(start.l, end.l),\n opacity = color(start.opacity, end.opacity);\n return function(t) {\n start.h = h(t);\n start.s = s(t);\n start.l = l(Math.pow(t, y));\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n\n cubehelix.gamma = cubehelixGamma;\n\n return cubehelix;\n })(1);\n}\n\nexport default cubehelix(hue);\nexport var cubehelixLong = cubehelix(color);\n","export default function piecewise(interpolate, values) {\n var i = 0, n = values.length - 1, v = values[0], I = new Array(n < 0 ? 0 : n);\n while (i < n) I[i] = interpolate(v, v = values[++i]);\n return function(t) {\n var i = Math.max(0, Math.min(n - 1, Math.floor(t *= n)));\n return I[i](t - i);\n };\n}\n","export default function(interpolator, n) {\n var samples = new Array(n);\n for (var i = 0; i < n; ++i) samples[i] = interpolator(i / (n - 1));\n return samples;\n}\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","export default function(x) {\n return +x;\n}\n","import {bisect} from \"d3-array\";\nimport {interpolate as interpolateValue, interpolateRound} from \"d3-interpolate\";\nimport {map, slice} from \"./array\";\nimport constant from \"./constant\";\nimport number from \"./number\";\n\nvar unit = [0, 1];\n\nexport function deinterpolateLinear(a, b) {\n return (b -= (a = +a))\n ? function(x) { return (x - a) / b; }\n : constant(b);\n}\n\nfunction deinterpolateClamp(deinterpolate) {\n return function(a, b) {\n var d = deinterpolate(a = +a, b = +b);\n return function(x) { return x <= a ? 0 : x >= b ? 1 : d(x); };\n };\n}\n\nfunction reinterpolateClamp(reinterpolate) {\n return function(a, b) {\n var r = reinterpolate(a = +a, b = +b);\n return function(t) { return t <= 0 ? a : t >= 1 ? b : r(t); };\n };\n}\n\nfunction bimap(domain, range, deinterpolate, reinterpolate) {\n var d0 = domain[0], d1 = domain[1], r0 = range[0], r1 = range[1];\n if (d1 < d0) d0 = deinterpolate(d1, d0), r0 = reinterpolate(r1, r0);\n else d0 = deinterpolate(d0, d1), r0 = reinterpolate(r0, r1);\n return function(x) { return r0(d0(x)); };\n}\n\nfunction polymap(domain, range, deinterpolate, reinterpolate) {\n var j = Math.min(domain.length, range.length) - 1,\n d = new Array(j),\n r = new Array(j),\n i = -1;\n\n // Reverse descending domains.\n if (domain[j] < domain[0]) {\n domain = domain.slice().reverse();\n range = range.slice().reverse();\n }\n\n while (++i < j) {\n d[i] = deinterpolate(domain[i], domain[i + 1]);\n r[i] = reinterpolate(range[i], range[i + 1]);\n }\n\n return function(x) {\n var i = bisect(domain, x, 1, j) - 1;\n return r[i](d[i](x));\n };\n}\n\nexport function copy(source, target) {\n return target\n .domain(source.domain())\n .range(source.range())\n .interpolate(source.interpolate())\n .clamp(source.clamp());\n}\n\n// deinterpolate(a, b)(x) takes a domain value x in [a,b] and returns the corresponding parameter t in [0,1].\n// reinterpolate(a, b)(t) takes a parameter t in [0,1] and returns the corresponding domain value x in [a,b].\nexport default function continuous(deinterpolate, reinterpolate) {\n var domain = unit,\n range = unit,\n interpolate = interpolateValue,\n clamp = false,\n piecewise,\n output,\n input;\n\n function rescale() {\n piecewise = Math.min(domain.length, range.length) > 2 ? polymap : bimap;\n output = input = null;\n return scale;\n }\n\n function scale(x) {\n return (output || (output = piecewise(domain, range, clamp ? deinterpolateClamp(deinterpolate) : deinterpolate, interpolate)))(+x);\n }\n\n scale.invert = function(y) {\n return (input || (input = piecewise(range, domain, deinterpolateLinear, clamp ? reinterpolateClamp(reinterpolate) : reinterpolate)))(+y);\n };\n\n scale.domain = function(_) {\n return arguments.length ? (domain = map.call(_, number), rescale()) : domain.slice();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = slice.call(_), rescale()) : range.slice();\n };\n\n scale.rangeRound = function(_) {\n return range = slice.call(_), interpolate = interpolateRound, rescale();\n };\n\n scale.clamp = function(_) {\n return arguments.length ? (clamp = !!_, rescale()) : clamp;\n };\n\n scale.interpolate = function(_) {\n return arguments.length ? (interpolate = _, rescale()) : interpolate;\n };\n\n return rescale();\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].\nexport default function(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","import formatDecimal from \"./formatDecimal\";\n\nexport default function(x) {\n return x = formatDecimal(Math.abs(x)), x ? x[1] : NaN;\n}\n","// [[fill]align][sign][symbol][0][width][,][.precision][~][type]\nvar re = /^(?:(.)?([<>=^]))?([+\\-( ])?([$#])?(0)?(\\d+)?(,)?(\\.\\d+)?(~)?([a-z%])?$/i;\n\nexport default function formatSpecifier(specifier) {\n return new FormatSpecifier(specifier);\n}\n\nformatSpecifier.prototype = FormatSpecifier.prototype; // instanceof\n\nfunction FormatSpecifier(specifier) {\n if (!(match = re.exec(specifier))) throw new Error(\"invalid format: \" + specifier);\n var match;\n this.fill = match[1] || \" \";\n this.align = match[2] || \">\";\n this.sign = match[3] || \"-\";\n this.symbol = match[4] || \"\";\n this.zero = !!match[5];\n this.width = match[6] && +match[6];\n this.comma = !!match[7];\n this.precision = match[8] && +match[8].slice(1);\n this.trim = !!match[9];\n this.type = match[10] || \"\";\n}\n\nFormatSpecifier.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.trim ? \"~\" : \"\")\n + this.type;\n};\n","// Trims insignificant zeros, e.g., replaces 1.2000k with 1.2k.\nexport default function(s) {\n out: for (var n = s.length, i = 1, i0 = -1, i1; i < n; ++i) {\n switch (s[i]) {\n case \".\": i0 = i1 = i; break;\n case \"0\": if (i0 === 0) i0 = i; i1 = i; break;\n default: if (i0 > 0) { if (!+s[i]) break out; i0 = 0; } break;\n }\n }\n return i0 > 0 ? s.slice(0, i0) + s.slice(i1 + 1) : s;\n}\n","import formatDecimal from \"./formatDecimal\";\n\nexport var prefixExponent;\n\nexport default function(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, Math.max(0, p + i - 1))[0]; // less than 1y!\n}\n","import formatLocale from \"./locale\";\n\nvar locale;\nexport var format;\nexport var formatPrefix;\n\ndefaultLocale({\n decimal: \".\",\n thousands: \",\",\n grouping: [3],\n currency: [\"$\", \"\"]\n});\n\nexport default function defaultLocale(definition) {\n locale = formatLocale(definition);\n format = locale.format;\n formatPrefix = locale.formatPrefix;\n return locale;\n}\n","import formatDecimal from \"./formatDecimal\";\n\nexport default function(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","import formatPrefixAuto from \"./formatPrefixAuto\";\nimport formatRounded from \"./formatRounded\";\n\nexport default {\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","export default function(x) {\n return x;\n}\n","import exponent from \"./exponent\";\nimport formatGroup from \"./formatGroup\";\nimport formatNumerals from \"./formatNumerals\";\nimport formatSpecifier from \"./formatSpecifier\";\nimport formatTrim from \"./formatTrim\";\nimport formatTypes from \"./formatTypes\";\nimport {prefixExponent} from \"./formatPrefixAuto\";\nimport identity from \"./identity\";\n\nvar prefixes = [\"y\",\"z\",\"a\",\"f\",\"p\",\"n\",\"µ\",\"m\",\"\",\"k\",\"M\",\"G\",\"T\",\"P\",\"E\",\"Z\",\"Y\"];\n\nexport default function(locale) {\n var group = locale.grouping && locale.thousands ? formatGroup(locale.grouping, locale.thousands) : identity,\n currency = locale.currency,\n decimal = locale.decimal,\n numerals = locale.numerals ? formatNumerals(locale.numerals) : identity,\n percent = locale.percent || \"%\";\n\n function newFormat(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 trim = specifier.trim,\n type = specifier.type;\n\n // The \"n\" type is an alias for \",g\".\n if (type === \"n\") comma = true, type = \"g\";\n\n // The \"\" type, and any invalid type, is an alias for \".12~g\".\n else if (!formatTypes[type]) precision == null && (precision = 12), trim = true, type = \"g\";\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 // 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) ? percent : \"\";\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 = /[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 ? 6\n : /[gprs]/.test(type) ? Math.max(1, Math.min(21, precision))\n : Math.max(0, Math.min(20, precision));\n\n function format(value) {\n var valuePrefix = prefix,\n valueSuffix = suffix,\n i, n, c;\n\n if (type === \"c\") {\n valueSuffix = formatType(value) + valueSuffix;\n value = \"\";\n } else {\n value = +value;\n\n // Perform the initial formatting.\n var valueNegative = value < 0;\n value = formatType(Math.abs(value), precision);\n\n // Trim insignificant zeros.\n if (trim) value = formatTrim(value);\n\n // If a negative value rounds to zero during formatting, treat as positive.\n if (valueNegative && +value === 0) valueNegative = false;\n\n // Compute the prefix and suffix.\n valuePrefix = (valueNegative ? (sign === \"(\" ? sign : \"-\") : sign === \"-\" || sign === \"(\" ? \"\" : sign) + valuePrefix;\n valueSuffix = (type === \"s\" ? prefixes[8 + prefixExponent / 3] : \"\") + valueSuffix + (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 i = -1, n = value.length;\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 \"<\": value = valuePrefix + value + valueSuffix + padding; break;\n case \"=\": value = valuePrefix + padding + value + valueSuffix; break;\n case \"^\": value = padding.slice(0, length = padding.length >> 1) + valuePrefix + value + valueSuffix + padding.slice(length); break;\n default: value = padding + valuePrefix + value + valueSuffix; break;\n }\n\n return numerals(value);\n }\n\n format.toString = function() {\n return specifier + \"\";\n };\n\n return format;\n }\n\n function formatPrefix(specifier, value) {\n var f = newFormat((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: newFormat,\n formatPrefix: formatPrefix\n };\n}\n","export default function(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","export default function(numerals) {\n return function(value) {\n return value.replace(/[0-9]/g, function(i) {\n return numerals[+i];\n });\n };\n}\n","import exponent from \"./exponent\";\n\nexport default function(step) {\n return Math.max(0, -exponent(Math.abs(step)));\n}\n","import {tickStep} from \"d3-array\";\nimport {format, formatPrefix, formatSpecifier, precisionFixed, precisionPrefix, precisionRound} from \"d3-format\";\n\nexport default function(domain, count, specifier) {\n var start = domain[0],\n stop = domain[domain.length - 1],\n step = tickStep(start, stop, count == null ? 10 : count),\n precision;\n specifier = formatSpecifier(specifier == null ? \",f\" : specifier);\n switch (specifier.type) {\n case \"s\": {\n var value = Math.max(Math.abs(start), Math.abs(stop));\n if (specifier.precision == null && !isNaN(precision = precisionPrefix(step, value))) specifier.precision = precision;\n return formatPrefix(specifier, value);\n }\n case \"\":\n case \"e\":\n case \"g\":\n case \"p\":\n case \"r\": {\n if (specifier.precision == null && !isNaN(precision = precisionRound(step, Math.max(Math.abs(start), Math.abs(stop))))) specifier.precision = precision - (specifier.type === \"e\");\n break;\n }\n case \"f\":\n case \"%\": {\n if (specifier.precision == null && !isNaN(precision = precisionFixed(step))) specifier.precision = precision - (specifier.type === \"%\") * 2;\n break;\n }\n }\n return format(specifier);\n}\n","import exponent from \"./exponent\";\n\nexport default function(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","import exponent from \"./exponent\";\n\nexport default function(step, max) {\n step = Math.abs(step), max = Math.abs(max) - step;\n return Math.max(0, exponent(max) - exponent(step)) + 1;\n}\n","import {ticks, tickIncrement} from \"d3-array\";\nimport {interpolateNumber as reinterpolate} from \"d3-interpolate\";\nimport {default as continuous, copy, deinterpolateLinear as deinterpolate} from \"./continuous\";\nimport tickFormat from \"./tickFormat\";\n\nexport function linearish(scale) {\n var domain = scale.domain;\n\n scale.ticks = function(count) {\n var d = domain();\n return ticks(d[0], d[d.length - 1], count == null ? 10 : count);\n };\n\n scale.tickFormat = function(count, specifier) {\n return tickFormat(domain(), count, specifier);\n };\n\n scale.nice = function(count) {\n if (count == null) count = 10;\n\n var d = domain(),\n i0 = 0,\n i1 = d.length - 1,\n start = d[i0],\n stop = d[i1],\n step;\n\n if (stop < start) {\n step = start, start = stop, stop = step;\n step = i0, i0 = i1, i1 = step;\n }\n\n step = tickIncrement(start, stop, count);\n\n if (step > 0) {\n start = Math.floor(start / step) * step;\n stop = Math.ceil(stop / step) * step;\n step = tickIncrement(start, stop, count);\n } else if (step < 0) {\n start = Math.ceil(start * step) / step;\n stop = Math.floor(stop * step) / step;\n step = tickIncrement(start, stop, count);\n }\n\n if (step > 0) {\n d[i0] = Math.floor(start / step) * step;\n d[i1] = Math.ceil(stop / step) * step;\n domain(d);\n } else if (step < 0) {\n d[i0] = Math.ceil(start * step) / step;\n d[i1] = Math.floor(stop * step) / step;\n domain(d);\n }\n\n return scale;\n };\n\n return scale;\n}\n\nexport default function linear() {\n var scale = continuous(deinterpolate, reinterpolate);\n\n scale.copy = function() {\n return copy(scale, linear());\n };\n\n return linearish(scale);\n}\n","import {map} from \"./array\";\nimport {linearish} from \"./linear\";\nimport number from \"./number\";\n\nexport default function identity() {\n var domain = [0, 1];\n\n function scale(x) {\n return +x;\n }\n\n scale.invert = scale;\n\n scale.domain = scale.range = function(_) {\n return arguments.length ? (domain = map.call(_, number), scale) : domain.slice();\n };\n\n scale.copy = function() {\n return identity().domain(domain);\n };\n\n return linearish(scale);\n}\n","export default function(domain, interval) {\n domain = domain.slice();\n\n var i0 = 0,\n i1 = domain.length - 1,\n x0 = domain[i0],\n x1 = domain[i1],\n t;\n\n if (x1 < x0) {\n t = i0, i0 = i1, i1 = t;\n t = x0, x0 = x1, x1 = t;\n }\n\n domain[i0] = interval.floor(x0);\n domain[i1] = interval.ceil(x1);\n return domain;\n}\n","import {ticks} from \"d3-array\";\nimport {format} from \"d3-format\";\nimport constant from \"./constant\";\nimport nice from \"./nice\";\nimport {default as continuous, copy} from \"./continuous\";\n\nfunction deinterpolate(a, b) {\n return (b = Math.log(b / a))\n ? function(x) { return Math.log(x / a) / b; }\n : constant(b);\n}\n\nfunction reinterpolate(a, b) {\n return a < 0\n ? function(t) { return -Math.pow(-b, t) * Math.pow(-a, 1 - t); }\n : function(t) { return Math.pow(b, t) * Math.pow(a, 1 - t); };\n}\n\nfunction pow10(x) {\n return isFinite(x) ? +(\"1e\" + x) : x < 0 ? 0 : x;\n}\n\nfunction powp(base) {\n return base === 10 ? pow10\n : base === Math.E ? Math.exp\n : function(x) { return Math.pow(base, x); };\n}\n\nfunction logp(base) {\n return base === Math.E ? Math.log\n : base === 10 && Math.log10\n || base === 2 && Math.log2\n || (base = Math.log(base), function(x) { return Math.log(x) / base; });\n}\n\nfunction reflect(f) {\n return function(x) {\n return -f(-x);\n };\n}\n\nexport default function log() {\n var scale = continuous(deinterpolate, reinterpolate).domain([1, 10]),\n domain = scale.domain,\n base = 10,\n logs = logp(10),\n pows = powp(10);\n\n function rescale() {\n logs = logp(base), pows = powp(base);\n if (domain()[0] < 0) logs = reflect(logs), pows = reflect(pows);\n return scale;\n }\n\n scale.base = function(_) {\n return arguments.length ? (base = +_, rescale()) : base;\n };\n\n scale.domain = function(_) {\n return arguments.length ? (domain(_), rescale()) : domain();\n };\n\n scale.ticks = function(count) {\n var d = domain(),\n u = d[0],\n v = d[d.length - 1],\n r;\n\n if (r = v < u) i = u, u = v, v = i;\n\n var i = logs(u),\n j = logs(v),\n p,\n k,\n t,\n n = count == null ? 10 : +count,\n z = [];\n\n if (!(base % 1) && j - i < n) {\n i = Math.round(i) - 1, j = Math.round(j) + 1;\n if (u > 0) for (; i < j; ++i) {\n for (k = 1, p = pows(i); k < base; ++k) {\n t = p * k;\n if (t < u) continue;\n if (t > v) break;\n z.push(t);\n }\n } else for (; i < j; ++i) {\n for (k = base - 1, p = pows(i); k >= 1; --k) {\n t = p * k;\n if (t < u) continue;\n if (t > v) break;\n z.push(t);\n }\n }\n } else {\n z = ticks(i, j, Math.min(j - i, n)).map(pows);\n }\n\n return r ? z.reverse() : z;\n };\n\n scale.tickFormat = function(count, specifier) {\n if (specifier == null) specifier = base === 10 ? \".0e\" : \",\";\n if (typeof specifier !== \"function\") specifier = format(specifier);\n if (count === Infinity) return specifier;\n if (count == null) count = 10;\n var k = Math.max(1, base * count / scale.ticks().length); // TODO fast estimate?\n return function(d) {\n var i = d / pows(Math.round(logs(d)));\n if (i * base < base - 0.5) i *= base;\n return i <= k ? specifier(d) : \"\";\n };\n };\n\n scale.nice = function() {\n return domain(nice(domain(), {\n floor: function(x) { return pows(Math.floor(logs(x))); },\n ceil: function(x) { return pows(Math.ceil(logs(x))); }\n }));\n };\n\n scale.copy = function() {\n return copy(scale, log().base(base));\n };\n\n return scale;\n}\n","import constant from \"./constant\";\nimport {linearish} from \"./linear\";\nimport {default as continuous, copy} from \"./continuous\";\n\nfunction raise(x, exponent) {\n return x < 0 ? -Math.pow(-x, exponent) : Math.pow(x, exponent);\n}\n\nexport default function pow() {\n var exponent = 1,\n scale = continuous(deinterpolate, reinterpolate),\n domain = scale.domain;\n\n function deinterpolate(a, b) {\n return (b = raise(b, exponent) - (a = raise(a, exponent)))\n ? function(x) { return (raise(x, exponent) - a) / b; }\n : constant(b);\n }\n\n function reinterpolate(a, b) {\n b = raise(b, exponent) - (a = raise(a, exponent));\n return function(t) { return raise(a + b * t, 1 / exponent); };\n }\n\n scale.exponent = function(_) {\n return arguments.length ? (exponent = +_, domain(domain())) : exponent;\n };\n\n scale.copy = function() {\n return copy(scale, pow().exponent(exponent));\n };\n\n return linearish(scale);\n}\n\nexport function sqrt() {\n return pow().exponent(0.5);\n}\n","import {ascending, bisect, quantile as threshold} from \"d3-array\";\nimport {slice} from \"./array\";\n\nexport default function quantile() {\n var domain = [],\n range = [],\n thresholds = [];\n\n function rescale() {\n var i = 0, n = Math.max(1, range.length);\n thresholds = new Array(n - 1);\n while (++i < n) thresholds[i - 1] = threshold(domain, i / n);\n return scale;\n }\n\n function scale(x) {\n if (!isNaN(x = +x)) return range[bisect(thresholds, x)];\n }\n\n scale.invertExtent = function(y) {\n var i = range.indexOf(y);\n return i < 0 ? [NaN, NaN] : [\n i > 0 ? thresholds[i - 1] : domain[0],\n i < thresholds.length ? thresholds[i] : domain[domain.length - 1]\n ];\n };\n\n scale.domain = function(_) {\n if (!arguments.length) return domain.slice();\n domain = [];\n for (var i = 0, n = _.length, d; i < n; ++i) if (d = _[i], d != null && !isNaN(d = +d)) domain.push(d);\n domain.sort(ascending);\n return rescale();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = slice.call(_), rescale()) : range.slice();\n };\n\n scale.quantiles = function() {\n return thresholds.slice();\n };\n\n scale.copy = function() {\n return quantile()\n .domain(domain)\n .range(range);\n };\n\n return scale;\n}\n","import {bisect} from \"d3-array\";\nimport {slice} from \"./array\";\nimport {linearish} from \"./linear\";\n\nexport default function quantize() {\n var x0 = 0,\n x1 = 1,\n n = 1,\n domain = [0.5],\n range = [0, 1];\n\n function scale(x) {\n if (x <= x) return range[bisect(domain, x, 0, n)];\n }\n\n function rescale() {\n var i = -1;\n domain = new Array(n);\n while (++i < n) domain[i] = ((i + 1) * x1 - (i - n) * x0) / (n + 1);\n return scale;\n }\n\n scale.domain = function(_) {\n return arguments.length ? (x0 = +_[0], x1 = +_[1], rescale()) : [x0, x1];\n };\n\n scale.range = function(_) {\n return arguments.length ? (n = (range = slice.call(_)).length - 1, rescale()) : range.slice();\n };\n\n scale.invertExtent = function(y) {\n var i = range.indexOf(y);\n return i < 0 ? [NaN, NaN]\n : i < 1 ? [x0, domain[0]]\n : i >= n ? [domain[n - 1], x1]\n : [domain[i - 1], domain[i]];\n };\n\n scale.copy = function() {\n return quantize()\n .domain([x0, x1])\n .range(range);\n };\n\n return linearish(scale);\n}\n","import {bisect} from \"d3-array\";\nimport {slice} from \"./array\";\n\nexport default function threshold() {\n var domain = [0.5],\n range = [0, 1],\n n = 1;\n\n function scale(x) {\n if (x <= x) return range[bisect(domain, x, 0, n)];\n }\n\n scale.domain = function(_) {\n return arguments.length ? (domain = slice.call(_), n = Math.min(domain.length, range.length - 1), scale) : domain.slice();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = slice.call(_), n = Math.min(domain.length, range.length - 1), scale) : range.slice();\n };\n\n scale.invertExtent = function(y) {\n var i = range.indexOf(y);\n return [domain[i - 1], domain[i]];\n };\n\n scale.copy = function() {\n return threshold()\n .domain(domain)\n .range(range);\n };\n\n return scale;\n}\n","var t0 = new Date,\n t1 = new Date;\n\nexport default function newInterval(floori, offseti, count, field) {\n\n function interval(date) {\n return floori(date = new Date(+date)), date;\n }\n\n interval.floor = interval;\n\n interval.ceil = function(date) {\n return floori(date = new Date(date - 1)), offseti(date, 1), floori(date), date;\n };\n\n interval.round = function(date) {\n var d0 = interval(date),\n d1 = interval.ceil(date);\n return date - d0 < d1 - date ? d0 : d1;\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 = [], previous;\n start = interval.ceil(start);\n step = step == null ? 1 : Math.floor(step);\n if (!(start < stop) || !(step > 0)) return range; // also handles Invalid Date\n do range.push(previous = new Date(+start)), offseti(start, step), floori(start);\n while (previous < start && start < stop);\n return range;\n };\n\n interval.filter = function(test) {\n return newInterval(function(date) {\n if (date >= date) while (floori(date), !test(date)) date.setTime(date - 1);\n }, function(date, step) {\n if (date >= date) {\n if (step < 0) while (++step <= 0) {\n while (offseti(date, -1), !test(date)) {} // eslint-disable-line no-empty\n } else while (--step >= 0) {\n while (offseti(date, +1), !test(date)) {} // eslint-disable-line no-empty\n }\n }\n });\n };\n\n if (count) {\n 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 interval.every = function(step) {\n step = Math.floor(step);\n return !isFinite(step) || !(step > 0) ? null\n : !(step > 1) ? interval\n : interval.filter(field\n ? function(d) { return field(d) % step === 0; }\n : function(d) { return interval.count(0, d) % step === 0; });\n };\n }\n\n return interval;\n}\n","import interval from \"./interval\";\n\nvar millisecond = interval(function() {\n // noop\n}, function(date, step) {\n date.setTime(+date + step);\n}, function(start, end) {\n return end - start;\n});\n\n// An optimized implementation for this simple case.\nmillisecond.every = function(k) {\n k = Math.floor(k);\n if (!isFinite(k) || !(k > 0)) return null;\n if (!(k > 1)) return millisecond;\n return interval(function(date) {\n date.setTime(Math.floor(date / k) * k);\n }, function(date, step) {\n date.setTime(+date + step * k);\n }, function(start, end) {\n return (end - start) / k;\n });\n};\n\nexport default millisecond;\nexport var milliseconds = millisecond.range;\n","export var durationSecond = 1e3;\nexport var durationMinute = 6e4;\nexport var durationHour = 36e5;\nexport var durationDay = 864e5;\nexport var durationWeek = 6048e5;\n","import interval from \"./interval\";\nimport {durationSecond} from \"./duration\";\n\nvar second = interval(function(date) {\n date.setTime(Math.floor(date / durationSecond) * durationSecond);\n}, function(date, step) {\n date.setTime(+date + step * durationSecond);\n}, function(start, end) {\n return (end - start) / durationSecond;\n}, function(date) {\n return date.getUTCSeconds();\n});\n\nexport default second;\nexport var seconds = second.range;\n","import interval from \"./interval\";\nimport {durationMinute} from \"./duration\";\n\nvar minute = interval(function(date) {\n date.setTime(Math.floor(date / durationMinute) * durationMinute);\n}, function(date, step) {\n date.setTime(+date + step * durationMinute);\n}, function(start, end) {\n return (end - start) / durationMinute;\n}, function(date) {\n return date.getMinutes();\n});\n\nexport default minute;\nexport var minutes = minute.range;\n","import interval from \"./interval\";\nimport {durationHour, durationMinute} from \"./duration\";\n\nvar hour = interval(function(date) {\n var offset = date.getTimezoneOffset() * durationMinute % durationHour;\n if (offset < 0) offset += durationHour;\n date.setTime(Math.floor((+date - offset) / durationHour) * durationHour + offset);\n}, function(date, step) {\n date.setTime(+date + step * durationHour);\n}, function(start, end) {\n return (end - start) / durationHour;\n}, function(date) {\n return date.getHours();\n});\n\nexport default hour;\nexport var hours = hour.range;\n","import interval from \"./interval\";\nimport {durationDay, durationMinute} from \"./duration\";\n\nvar day = interval(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()) * durationMinute) / durationDay;\n}, function(date) {\n return date.getDate() - 1;\n});\n\nexport default day;\nexport var days = day.range;\n","import interval from \"./interval\";\nimport {durationMinute, durationWeek} from \"./duration\";\n\nfunction weekday(i) {\n return interval(function(date) {\n date.setDate(date.getDate() - (date.getDay() + 7 - i) % 7);\n date.setHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setDate(date.getDate() + step * 7);\n }, function(start, end) {\n return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationWeek;\n });\n}\n\nexport var sunday = weekday(0);\nexport var monday = weekday(1);\nexport var tuesday = weekday(2);\nexport var wednesday = weekday(3);\nexport var thursday = weekday(4);\nexport var friday = weekday(5);\nexport var saturday = weekday(6);\n\nexport var sundays = sunday.range;\nexport var mondays = monday.range;\nexport var tuesdays = tuesday.range;\nexport var wednesdays = wednesday.range;\nexport var thursdays = thursday.range;\nexport var fridays = friday.range;\nexport var saturdays = saturday.range;\n","import interval from \"./interval\";\n\nvar month = interval(function(date) {\n date.setDate(1);\n date.setHours(0, 0, 0, 0);\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}, function(date) {\n return date.getMonth();\n});\n\nexport default month;\nexport var months = month.range;\n","import interval from \"./interval\";\n\nvar year = interval(function(date) {\n date.setMonth(0, 1);\n date.setHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setFullYear(date.getFullYear() + step);\n}, function(start, end) {\n return end.getFullYear() - start.getFullYear();\n}, function(date) {\n return date.getFullYear();\n});\n\n// An optimized implementation for this simple case.\nyear.every = function(k) {\n return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : interval(function(date) {\n date.setFullYear(Math.floor(date.getFullYear() / k) * k);\n date.setMonth(0, 1);\n date.setHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setFullYear(date.getFullYear() + step * k);\n });\n};\n\nexport default year;\nexport var years = year.range;\n","import interval from \"./interval\";\nimport {durationMinute} from \"./duration\";\n\nvar utcMinute = interval(function(date) {\n date.setUTCSeconds(0, 0);\n}, function(date, step) {\n date.setTime(+date + step * durationMinute);\n}, function(start, end) {\n return (end - start) / durationMinute;\n}, function(date) {\n return date.getUTCMinutes();\n});\n\nexport default utcMinute;\nexport var utcMinutes = utcMinute.range;\n","import interval from \"./interval\";\nimport {durationHour} from \"./duration\";\n\nvar utcHour = interval(function(date) {\n date.setUTCMinutes(0, 0, 0);\n}, function(date, step) {\n date.setTime(+date + step * durationHour);\n}, function(start, end) {\n return (end - start) / durationHour;\n}, function(date) {\n return date.getUTCHours();\n});\n\nexport default utcHour;\nexport var utcHours = utcHour.range;\n","import interval from \"./interval\";\nimport {durationDay} from \"./duration\";\n\nvar utcDay = interval(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) / durationDay;\n}, function(date) {\n return date.getUTCDate() - 1;\n});\n\nexport default utcDay;\nexport var utcDays = utcDay.range;\n","import interval from \"./interval\";\nimport {durationWeek} from \"./duration\";\n\nfunction utcWeekday(i) {\n return interval(function(date) {\n date.setUTCDate(date.getUTCDate() - (date.getUTCDay() + 7 - i) % 7);\n date.setUTCHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setUTCDate(date.getUTCDate() + step * 7);\n }, function(start, end) {\n return (end - start) / durationWeek;\n });\n}\n\nexport var utcSunday = utcWeekday(0);\nexport var utcMonday = utcWeekday(1);\nexport var utcTuesday = utcWeekday(2);\nexport var utcWednesday = utcWeekday(3);\nexport var utcThursday = utcWeekday(4);\nexport var utcFriday = utcWeekday(5);\nexport var utcSaturday = utcWeekday(6);\n\nexport var utcSundays = utcSunday.range;\nexport var utcMondays = utcMonday.range;\nexport var utcTuesdays = utcTuesday.range;\nexport var utcWednesdays = utcWednesday.range;\nexport var utcThursdays = utcThursday.range;\nexport var utcFridays = utcFriday.range;\nexport var utcSaturdays = utcSaturday.range;\n","import interval from \"./interval\";\n\nvar utcMonth = interval(function(date) {\n date.setUTCDate(1);\n date.setUTCHours(0, 0, 0, 0);\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}, function(date) {\n return date.getUTCMonth();\n});\n\nexport default utcMonth;\nexport var utcMonths = utcMonth.range;\n","import interval from \"./interval\";\n\nvar utcYear = interval(function(date) {\n date.setUTCMonth(0, 1);\n date.setUTCHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setUTCFullYear(date.getUTCFullYear() + step);\n}, function(start, end) {\n return end.getUTCFullYear() - start.getUTCFullYear();\n}, function(date) {\n return date.getUTCFullYear();\n});\n\n// An optimized implementation for this simple case.\nutcYear.every = function(k) {\n return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : interval(function(date) {\n date.setUTCFullYear(Math.floor(date.getUTCFullYear() / k) * k);\n date.setUTCMonth(0, 1);\n date.setUTCHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setUTCFullYear(date.getUTCFullYear() + step * k);\n });\n};\n\nexport default utcYear;\nexport var utcYears = utcYear.range;\n","import {\n timeDay,\n timeSunday,\n timeMonday,\n timeThursday,\n timeYear,\n utcDay,\n utcSunday,\n utcMonday,\n utcThursday,\n utcYear\n} from \"d3-time\";\n\nfunction 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\nfunction 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\nfunction newYear(y) {\n return {y: y, m: 0, d: 1, H: 0, M: 0, S: 0, L: 0};\n}\n\nexport default function formatLocale(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 periodRe = formatRe(locale_periods),\n 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 \"f\": formatMicroseconds,\n \"H\": formatHour24,\n \"I\": formatHour12,\n \"j\": formatDayOfYear,\n \"L\": formatMilliseconds,\n \"m\": formatMonthNumber,\n \"M\": formatMinutes,\n \"p\": formatPeriod,\n \"Q\": formatUnixTimestamp,\n \"s\": formatUnixTimestampSeconds,\n \"S\": formatSeconds,\n \"u\": formatWeekdayNumberMonday,\n \"U\": formatWeekNumberSunday,\n \"V\": formatWeekNumberISO,\n \"w\": formatWeekdayNumberSunday,\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 \"f\": formatUTCMicroseconds,\n \"H\": formatUTCHour24,\n \"I\": formatUTCHour12,\n \"j\": formatUTCDayOfYear,\n \"L\": formatUTCMilliseconds,\n \"m\": formatUTCMonthNumber,\n \"M\": formatUTCMinutes,\n \"p\": formatUTCPeriod,\n \"Q\": formatUnixTimestamp,\n \"s\": formatUnixTimestampSeconds,\n \"S\": formatUTCSeconds,\n \"u\": formatUTCWeekdayNumberMonday,\n \"U\": formatUTCWeekNumberSunday,\n \"V\": formatUTCWeekNumberISO,\n \"w\": formatUTCWeekdayNumberSunday,\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 \"f\": parseMicroseconds,\n \"H\": parseHour24,\n \"I\": parseHour24,\n \"j\": parseDayOfYear,\n \"L\": parseMilliseconds,\n \"m\": parseMonthNumber,\n \"M\": parseMinutes,\n \"p\": parsePeriod,\n \"Q\": parseUnixTimestamp,\n \"s\": parseUnixTimestampSeconds,\n \"S\": parseSeconds,\n \"u\": parseWeekdayNumberMonday,\n \"U\": parseWeekNumberSunday,\n \"V\": parseWeekNumberISO,\n \"w\": parseWeekdayNumberSunday,\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 if (!(date instanceof Date)) date = new Date(+date);\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 else pad = c === \"e\" ? \" \" : \"0\";\n if (format = formats[c]) c = format(date, 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 week, day;\n if (i != string.length) return null;\n\n // If a UNIX timestamp is specified, return it.\n if (\"Q\" in d) return new Date(d.Q);\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 // Convert day-of-week and week-of-year to day-of-year.\n if (\"V\" in d) {\n if (d.V < 1 || d.V > 53) return null;\n if (!(\"w\" in d)) d.w = 1;\n if (\"Z\" in d) {\n week = utcDate(newYear(d.y)), day = week.getUTCDay();\n week = day > 4 || day === 0 ? utcMonday.ceil(week) : utcMonday(week);\n week = utcDay.offset(week, (d.V - 1) * 7);\n d.y = week.getUTCFullYear();\n d.m = week.getUTCMonth();\n d.d = week.getUTCDate() + (d.w + 6) % 7;\n } else {\n week = newDate(newYear(d.y)), day = week.getDay();\n week = day > 4 || day === 0 ? timeMonday.ceil(week) : timeMonday(week);\n week = timeDay.offset(week, (d.V - 1) * 7);\n d.y = week.getFullYear();\n d.m = week.getMonth();\n d.d = week.getDate() + (d.w + 6) % 7;\n }\n } else if (\"W\" in d || \"U\" in d) {\n if (!(\"w\" in d)) d.w = \"u\" in d ? d.u % 7 : \"W\" in d ? 1 : 0;\n day = \"Z\" in d ? utcDate(newYear(d.y)).getUTCDay() : newDate(newYear(d.y)).getDay();\n d.m = 0;\n d.d = \"W\" in d ? (d.w + 6) % 7 + d.W * 7 - (day + 5) % 7 : d.w + d.U * 7 - (day + 6) % 7;\n }\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 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 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 parsePeriod(d, string, i) {\n var n = periodRe.exec(string.slice(i));\n return n ? (d.p = periodLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n }\n\n function parseShortWeekday(d, string, i) {\n var n = shortWeekdayRe.exec(string.slice(i));\n return n ? (d.w = shortWeekdayLookup[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[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[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[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 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.toString = function() { return specifier; };\n return f;\n },\n parse: function(specifier) {\n var p = newParse(specifier += \"\", localDate);\n p.toString = function() { return specifier; };\n return p;\n },\n utcFormat: function(specifier) {\n var f = newFormat(specifier += \"\", utcFormats);\n f.toString = function() { return specifier; };\n return f;\n },\n utcParse: function(specifier) {\n var p = newParse(specifier, utcDate);\n p.toString = function() { return specifier; };\n return p;\n }\n };\n}\n\nvar pads = {\"-\": \"\", \"_\": \" \", \"0\": \"0\"},\n numberRe = /^\\s*\\d+/, // note: ignores next directive\n percentRe = /^%/,\n requoteRe = /[\\\\^$*+?|[\\]().{}]/g;\n\nfunction 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\nfunction requote(s) {\n return s.replace(requoteRe, \"\\\\$&\");\n}\n\nfunction formatRe(names) {\n return new RegExp(\"^(?:\" + names.map(requote).join(\"|\") + \")\", \"i\");\n}\n\nfunction formatLookup(names) {\n var map = {}, i = -1, n = names.length;\n while (++i < n) map[names[i].toLowerCase()] = i;\n return map;\n}\n\nfunction parseWeekdayNumberSunday(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\nfunction parseWeekdayNumberMonday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 1));\n return n ? (d.u = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberSunday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.U = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberISO(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.V = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberMonday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.W = +n[0], i + n[0].length) : -1;\n}\n\nfunction 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\nfunction 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\nfunction parseZone(d, string, i) {\n var n = /^(Z)|([+-]\\d\\d)(?::?(\\d\\d))?/.exec(string.slice(i, i + 6));\n return n ? (d.Z = n[1] ? 0 : -(n[2] + (n[3] || \"00\")), i + n[0].length) : -1;\n}\n\nfunction 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\nfunction 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\nfunction 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\nfunction 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\nfunction 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\nfunction 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\nfunction 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\nfunction parseMicroseconds(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 6));\n return n ? (d.L = Math.floor(n[0] / 1000), i + n[0].length) : -1;\n}\n\nfunction parseLiteralPercent(d, string, i) {\n var n = percentRe.exec(string.slice(i, i + 1));\n return n ? i + n[0].length : -1;\n}\n\nfunction parseUnixTimestamp(d, string, i) {\n var n = numberRe.exec(string.slice(i));\n return n ? (d.Q = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseUnixTimestampSeconds(d, string, i) {\n var n = numberRe.exec(string.slice(i));\n return n ? (d.Q = (+n[0]) * 1000, i + n[0].length) : -1;\n}\n\nfunction formatDayOfMonth(d, p) {\n return pad(d.getDate(), p, 2);\n}\n\nfunction formatHour24(d, p) {\n return pad(d.getHours(), p, 2);\n}\n\nfunction formatHour12(d, p) {\n return pad(d.getHours() % 12 || 12, p, 2);\n}\n\nfunction formatDayOfYear(d, p) {\n return pad(1 + timeDay.count(timeYear(d), d), p, 3);\n}\n\nfunction formatMilliseconds(d, p) {\n return pad(d.getMilliseconds(), p, 3);\n}\n\nfunction formatMicroseconds(d, p) {\n return formatMilliseconds(d, p) + \"000\";\n}\n\nfunction formatMonthNumber(d, p) {\n return pad(d.getMonth() + 1, p, 2);\n}\n\nfunction formatMinutes(d, p) {\n return pad(d.getMinutes(), p, 2);\n}\n\nfunction formatSeconds(d, p) {\n return pad(d.getSeconds(), p, 2);\n}\n\nfunction formatWeekdayNumberMonday(d) {\n var day = d.getDay();\n return day === 0 ? 7 : day;\n}\n\nfunction formatWeekNumberSunday(d, p) {\n return pad(timeSunday.count(timeYear(d), d), p, 2);\n}\n\nfunction formatWeekNumberISO(d, p) {\n var day = d.getDay();\n d = (day >= 4 || day === 0) ? timeThursday(d) : timeThursday.ceil(d);\n return pad(timeThursday.count(timeYear(d), d) + (timeYear(d).getDay() === 4), p, 2);\n}\n\nfunction formatWeekdayNumberSunday(d) {\n return d.getDay();\n}\n\nfunction formatWeekNumberMonday(d, p) {\n return pad(timeMonday.count(timeYear(d), d), p, 2);\n}\n\nfunction formatYear(d, p) {\n return pad(d.getFullYear() % 100, p, 2);\n}\n\nfunction formatFullYear(d, p) {\n return pad(d.getFullYear() % 10000, p, 4);\n}\n\nfunction 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\nfunction formatUTCDayOfMonth(d, p) {\n return pad(d.getUTCDate(), p, 2);\n}\n\nfunction formatUTCHour24(d, p) {\n return pad(d.getUTCHours(), p, 2);\n}\n\nfunction formatUTCHour12(d, p) {\n return pad(d.getUTCHours() % 12 || 12, p, 2);\n}\n\nfunction formatUTCDayOfYear(d, p) {\n return pad(1 + utcDay.count(utcYear(d), d), p, 3);\n}\n\nfunction formatUTCMilliseconds(d, p) {\n return pad(d.getUTCMilliseconds(), p, 3);\n}\n\nfunction formatUTCMicroseconds(d, p) {\n return formatUTCMilliseconds(d, p) + \"000\";\n}\n\nfunction formatUTCMonthNumber(d, p) {\n return pad(d.getUTCMonth() + 1, p, 2);\n}\n\nfunction formatUTCMinutes(d, p) {\n return pad(d.getUTCMinutes(), p, 2);\n}\n\nfunction formatUTCSeconds(d, p) {\n return pad(d.getUTCSeconds(), p, 2);\n}\n\nfunction formatUTCWeekdayNumberMonday(d) {\n var dow = d.getUTCDay();\n return dow === 0 ? 7 : dow;\n}\n\nfunction formatUTCWeekNumberSunday(d, p) {\n return pad(utcSunday.count(utcYear(d), d), p, 2);\n}\n\nfunction formatUTCWeekNumberISO(d, p) {\n var day = d.getUTCDay();\n d = (day >= 4 || day === 0) ? utcThursday(d) : utcThursday.ceil(d);\n return pad(utcThursday.count(utcYear(d), d) + (utcYear(d).getUTCDay() === 4), p, 2);\n}\n\nfunction formatUTCWeekdayNumberSunday(d) {\n return d.getUTCDay();\n}\n\nfunction formatUTCWeekNumberMonday(d, p) {\n return pad(utcMonday.count(utcYear(d), d), p, 2);\n}\n\nfunction formatUTCYear(d, p) {\n return pad(d.getUTCFullYear() % 100, p, 2);\n}\n\nfunction formatUTCFullYear(d, p) {\n return pad(d.getUTCFullYear() % 10000, p, 4);\n}\n\nfunction formatUTCZone() {\n return \"+0000\";\n}\n\nfunction formatLiteralPercent() {\n return \"%\";\n}\n\nfunction formatUnixTimestamp(d) {\n return +d;\n}\n\nfunction formatUnixTimestampSeconds(d) {\n return Math.floor(+d / 1000);\n}\n","import formatLocale from \"./locale\";\n\nvar locale;\nexport var timeFormat;\nexport var timeParse;\nexport var utcFormat;\nexport var utcParse;\n\ndefaultLocale({\n dateTime: \"%x, %X\",\n date: \"%-m/%-d/%Y\",\n time: \"%-I:%M:%S %p\",\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\nexport default function defaultLocale(definition) {\n locale = formatLocale(definition);\n timeFormat = locale.format;\n timeParse = locale.parse;\n utcFormat = locale.utcFormat;\n utcParse = locale.utcParse;\n return locale;\n}\n","import {utcFormat} from \"./defaultLocale\";\n\nexport var isoSpecifier = \"%Y-%m-%dT%H:%M:%S.%LZ\";\n\nfunction formatIsoNative(date) {\n return date.toISOString();\n}\n\nvar formatIso = Date.prototype.toISOString\n ? formatIsoNative\n : utcFormat(isoSpecifier);\n\nexport default formatIso;\n","import {isoSpecifier} from \"./isoFormat\";\nimport {utcParse} from \"./defaultLocale\";\n\nfunction parseIsoNative(string) {\n var date = new Date(string);\n return isNaN(date) ? null : date;\n}\n\nvar parseIso = +new Date(\"2000-01-01T00:00:00.000Z\")\n ? parseIsoNative\n : utcParse(isoSpecifier);\n\nexport default parseIso;\n","import {bisector, tickStep} from \"d3-array\";\nimport {interpolateNumber as reinterpolate} from \"d3-interpolate\";\nimport {timeYear, timeMonth, timeWeek, timeDay, timeHour, timeMinute, timeSecond, timeMillisecond} from \"d3-time\";\nimport {timeFormat} from \"d3-time-format\";\nimport {map} from \"./array\";\nimport {default as continuous, copy, deinterpolateLinear as deinterpolate} from \"./continuous\";\nimport nice from \"./nice\";\n\nvar durationSecond = 1000,\n durationMinute = durationSecond * 60,\n durationHour = durationMinute * 60,\n durationDay = durationHour * 24,\n durationWeek = durationDay * 7,\n durationMonth = durationDay * 30,\n durationYear = durationDay * 365;\n\nfunction date(t) {\n return new Date(t);\n}\n\nfunction number(t) {\n return t instanceof Date ? +t : +new Date(+t);\n}\n\nexport function calendar(year, month, week, day, hour, minute, second, millisecond, format) {\n var scale = continuous(deinterpolate, reinterpolate),\n invert = scale.invert,\n domain = scale.domain;\n\n var formatMillisecond = format(\".%L\"),\n formatSecond = format(\":%S\"),\n formatMinute = format(\"%I:%M\"),\n formatHour = format(\"%I %p\"),\n formatDay = format(\"%a %d\"),\n formatWeek = format(\"%b %d\"),\n formatMonth = format(\"%B\"),\n formatYear = format(\"%Y\");\n\n var tickIntervals = [\n [second, 1, durationSecond],\n [second, 5, 5 * durationSecond],\n [second, 15, 15 * durationSecond],\n [second, 30, 30 * durationSecond],\n [minute, 1, durationMinute],\n [minute, 5, 5 * durationMinute],\n [minute, 15, 15 * durationMinute],\n [minute, 30, 30 * durationMinute],\n [ hour, 1, durationHour ],\n [ hour, 3, 3 * durationHour ],\n [ hour, 6, 6 * durationHour ],\n [ hour, 12, 12 * durationHour ],\n [ day, 1, durationDay ],\n [ day, 2, 2 * durationDay ],\n [ week, 1, durationWeek ],\n [ month, 1, durationMonth ],\n [ month, 3, 3 * durationMonth ],\n [ year, 1, durationYear ]\n ];\n\n function tickFormat(date) {\n return (second(date) < date ? formatMillisecond\n : minute(date) < date ? formatSecond\n : hour(date) < date ? formatMinute\n : day(date) < date ? formatHour\n : month(date) < date ? (week(date) < date ? formatDay : formatWeek)\n : year(date) < date ? formatMonth\n : formatYear)(date);\n }\n\n function tickInterval(interval, start, stop, step) {\n if (interval == null) interval = 10;\n\n // If a desired tick count is specified, pick a reasonable tick interval\n // based on the extent of the domain and a rough estimate of tick size.\n // Otherwise, assume interval is already a time interval and use it.\n if (typeof interval === \"number\") {\n var target = Math.abs(stop - start) / interval,\n i = bisector(function(i) { return i[2]; }).right(tickIntervals, target);\n if (i === tickIntervals.length) {\n step = tickStep(start / durationYear, stop / durationYear, interval);\n interval = year;\n } else if (i) {\n i = tickIntervals[target / tickIntervals[i - 1][2] < tickIntervals[i][2] / target ? i - 1 : i];\n step = i[1];\n interval = i[0];\n } else {\n step = Math.max(tickStep(start, stop, interval), 1);\n interval = millisecond;\n }\n }\n\n return step == null ? interval : interval.every(step);\n }\n\n scale.invert = function(y) {\n return new Date(invert(y));\n };\n\n scale.domain = function(_) {\n return arguments.length ? domain(map.call(_, number)) : domain().map(date);\n };\n\n scale.ticks = function(interval, step) {\n var d = domain(),\n t0 = d[0],\n t1 = d[d.length - 1],\n r = t1 < t0,\n t;\n if (r) t = t0, t0 = t1, t1 = t;\n t = tickInterval(interval, t0, t1, step);\n t = t ? t.range(t0, t1 + 1) : []; // inclusive stop\n return r ? t.reverse() : t;\n };\n\n scale.tickFormat = function(count, specifier) {\n return specifier == null ? tickFormat : format(specifier);\n };\n\n scale.nice = function(interval, step) {\n var d = domain();\n return (interval = tickInterval(interval, d[0], d[d.length - 1], step))\n ? domain(nice(d, interval))\n : scale;\n };\n\n scale.copy = function() {\n return copy(scale, calendar(year, month, week, day, hour, minute, second, millisecond, format));\n };\n\n return scale;\n}\n\nexport default function() {\n return calendar(timeYear, timeMonth, timeWeek, timeDay, timeHour, timeMinute, timeSecond, timeMillisecond, timeFormat).domain([new Date(2000, 0, 1), new Date(2000, 0, 2)]);\n}\n","export default function(s) {\n return s.match(/.{6}/g).map(function(x) {\n return \"#\" + x;\n });\n}\n","import colors from \"./colors\";\n\nexport default colors(\"1f77b4ff7f0e2ca02cd627289467bd8c564be377c27f7f7fbcbd2217becf\");\n","import colors from \"./colors\";\n\nexport default colors(\"393b795254a36b6ecf9c9ede6379398ca252b5cf6bcedb9c8c6d31bd9e39e7ba52e7cb94843c39ad494ad6616be7969c7b4173a55194ce6dbdde9ed6\");\n","import colors from \"./colors\";\n\nexport default colors(\"1f77b4aec7e8ff7f0effbb782ca02c98df8ad62728ff98969467bdc5b0d58c564bc49c94e377c2f7b6d27f7f7fc7c7c7bcbd22dbdb8d17becf9edae5\");\n","import colors from \"./colors\";\n\nexport default colors(\"3182bd6baed69ecae1c6dbefe6550dfd8d3cfdae6bfdd0a231a35474c476a1d99bc7e9c0756bb19e9ac8bcbddcdadaeb636363969696bdbdbdd9d9d9\");\n","import {cubehelix} from \"d3-color\";\nimport {interpolateCubehelixLong} from \"d3-interpolate\";\n\nexport default interpolateCubehelixLong(cubehelix(300, 0.5, 0.0), cubehelix(-240, 0.5, 1.0));\n","import {cubehelix} from \"d3-color\";\nimport {interpolateCubehelixLong} from \"d3-interpolate\";\n\nexport var warm = interpolateCubehelixLong(cubehelix(-100, 0.75, 0.35), cubehelix(80, 1.50, 0.8));\n\nexport var cool = interpolateCubehelixLong(cubehelix(260, 0.75, 0.35), cubehelix(80, 1.50, 0.8));\n\nvar rainbow = cubehelix();\n\nexport default function(t) {\n if (t < 0 || t > 1) t -= Math.floor(t);\n var ts = Math.abs(t - 0.5);\n rainbow.h = 360 * t - 100;\n rainbow.s = 1.5 - 1.5 * ts;\n rainbow.l = 0.8 - 0.9 * ts;\n return rainbow + \"\";\n}\n","import colors from \"./colors\";\n\nfunction ramp(range) {\n var n = range.length;\n return function(t) {\n return range[Math.max(0, Math.min(n - 1, Math.floor(t * n)))];\n };\n}\n\nexport default ramp(colors(\"44015444025645045745055946075a46085c460a5d460b5e470d60470e6147106347116447136548146748166848176948186a481a6c481b6d481c6e481d6f481f70482071482173482374482475482576482677482878482979472a7a472c7a472d7b472e7c472f7d46307e46327e46337f463480453581453781453882443983443a83443b84433d84433e85423f854240864241864142874144874045884046883f47883f48893e49893e4a893e4c8a3d4d8a3d4e8a3c4f8a3c508b3b518b3b528b3a538b3a548c39558c39568c38588c38598c375a8c375b8d365c8d365d8d355e8d355f8d34608d34618d33628d33638d32648e32658e31668e31678e31688e30698e306a8e2f6b8e2f6c8e2e6d8e2e6e8e2e6f8e2d708e2d718e2c718e2c728e2c738e2b748e2b758e2a768e2a778e2a788e29798e297a8e297b8e287c8e287d8e277e8e277f8e27808e26818e26828e26828e25838e25848e25858e24868e24878e23888e23898e238a8d228b8d228c8d228d8d218e8d218f8d21908d21918c20928c20928c20938c1f948c1f958b1f968b1f978b1f988b1f998a1f9a8a1e9b8a1e9c891e9d891f9e891f9f881fa0881fa1881fa1871fa28720a38620a48621a58521a68522a78522a88423a98324aa8325ab8225ac8226ad8127ad8128ae8029af7f2ab07f2cb17e2db27d2eb37c2fb47c31b57b32b67a34b67935b77937b87838b9773aba763bbb753dbc743fbc7340bd7242be7144bf7046c06f48c16e4ac16d4cc26c4ec36b50c46a52c56954c56856c66758c7655ac8645cc8635ec96260ca6063cb5f65cb5e67cc5c69cd5b6ccd5a6ece5870cf5773d05675d05477d1537ad1517cd2507fd34e81d34d84d44b86d54989d5488bd6468ed64590d74393d74195d84098d83e9bd93c9dd93ba0da39a2da37a5db36a8db34aadc32addc30b0dd2fb2dd2db5de2bb8de29bade28bddf26c0df25c2df23c5e021c8e020cae11fcde11dd0e11cd2e21bd5e21ad8e219dae319dde318dfe318e2e418e5e419e7e419eae51aece51befe51cf1e51df4e61ef6e620f8e621fbe723fde725\"));\n\nexport var magma = ramp(colors(\"00000401000501010601010802010902020b02020d03030f03031204041405041606051806051a07061c08071e0907200a08220b09240c09260d0a290e0b2b100b2d110c2f120d31130d34140e36150e38160f3b180f3d19103f1a10421c10441d11471e114920114b21114e22115024125325125527125829115a2a115c2c115f2d11612f116331116533106734106936106b38106c390f6e3b0f703d0f713f0f72400f74420f75440f764510774710784910784a10794c117a4e117b4f127b51127c52137c54137d56147d57157e59157e5a167e5c167f5d177f5f187f601880621980641a80651a80671b80681c816a1c816b1d816d1d816e1e81701f81721f817320817521817621817822817922827b23827c23827e24828025828125818326818426818627818827818928818b29818c29818e2a81902a81912b81932b80942c80962c80982d80992d809b2e7f9c2e7f9e2f7fa02f7fa1307ea3307ea5317ea6317da8327daa337dab337cad347cae347bb0357bb2357bb3367ab5367ab73779b83779ba3878bc3978bd3977bf3a77c03a76c23b75c43c75c53c74c73d73c83e73ca3e72cc3f71cd4071cf4070d0416fd2426fd3436ed5446dd6456cd8456cd9466bdb476adc4869de4968df4a68e04c67e24d66e34e65e44f64e55064e75263e85362e95462ea5661eb5760ec5860ed5a5fee5b5eef5d5ef05f5ef1605df2625df2645cf3655cf4675cf4695cf56b5cf66c5cf66e5cf7705cf7725cf8745cf8765cf9785df9795df97b5dfa7d5efa7f5efa815ffb835ffb8560fb8761fc8961fc8a62fc8c63fc8e64fc9065fd9266fd9467fd9668fd9869fd9a6afd9b6bfe9d6cfe9f6dfea16efea36ffea571fea772fea973feaa74feac76feae77feb078feb27afeb47bfeb67cfeb77efeb97ffebb81febd82febf84fec185fec287fec488fec68afec88cfeca8dfecc8ffecd90fecf92fed194fed395fed597fed799fed89afdda9cfddc9efddea0fde0a1fde2a3fde3a5fde5a7fde7a9fde9aafdebacfcecaefceeb0fcf0b2fcf2b4fcf4b6fcf6b8fcf7b9fcf9bbfcfbbdfcfdbf\"));\n\nexport var inferno = ramp(colors(\"00000401000501010601010802010a02020c02020e03021004031204031405041706041907051b08051d09061f0a07220b07240c08260d08290e092b10092d110a30120a32140b34150b37160b39180c3c190c3e1b0c411c0c431e0c451f0c48210c4a230c4c240c4f260c51280b53290b552b0b572d0b592f0a5b310a5c320a5e340a5f3609613809623909633b09643d09653e0966400a67420a68440a68450a69470b6a490b6a4a0c6b4c0c6b4d0d6c4f0d6c510e6c520e6d540f6d550f6d57106e59106e5a116e5c126e5d126e5f136e61136e62146e64156e65156e67166e69166e6a176e6c186e6d186e6f196e71196e721a6e741a6e751b6e771c6d781c6d7a1d6d7c1d6d7d1e6d7f1e6c801f6c82206c84206b85216b87216b88226a8a226a8c23698d23698f24699025689225689326679526679727669827669a28659b29649d29649f2a63a02a63a22b62a32c61a52c60a62d60a82e5fa92e5eab2f5ead305dae305cb0315bb1325ab3325ab43359b63458b73557b93556ba3655bc3754bd3853bf3952c03a51c13a50c33b4fc43c4ec63d4dc73e4cc83f4bca404acb4149cc4248ce4347cf4446d04545d24644d34743d44842d54a41d74b3fd84c3ed94d3dda4e3cdb503bdd513ade5238df5337e05536e15635e25734e35933e45a31e55c30e65d2fe75e2ee8602de9612bea632aeb6429eb6628ec6726ed6925ee6a24ef6c23ef6e21f06f20f1711ff1731df2741cf3761bf37819f47918f57b17f57d15f67e14f68013f78212f78410f8850ff8870ef8890cf98b0bf98c0af98e09fa9008fa9207fa9407fb9606fb9706fb9906fb9b06fb9d07fc9f07fca108fca309fca50afca60cfca80dfcaa0ffcac11fcae12fcb014fcb216fcb418fbb61afbb81dfbba1ffbbc21fbbe23fac026fac228fac42afac62df9c72ff9c932f9cb35f8cd37f8cf3af7d13df7d340f6d543f6d746f5d949f5db4cf4dd4ff4df53f4e156f3e35af3e55df2e661f2e865f2ea69f1ec6df1ed71f1ef75f1f179f2f27df2f482f3f586f3f68af4f88ef5f992f6fa96f8fb9af9fc9dfafda1fcffa4\"));\n\nexport var plasma = ramp(colors(\"0d088710078813078916078a19068c1b068d1d068e20068f2206902406912605912805922a05932c05942e05952f059631059733059735049837049938049a3a049a3c049b3e049c3f049c41049d43039e44039e46039f48039f4903a04b03a14c02a14e02a25002a25102a35302a35502a45601a45801a45901a55b01a55c01a65e01a66001a66100a76300a76400a76600a76700a86900a86a00a86c00a86e00a86f00a87100a87201a87401a87501a87701a87801a87a02a87b02a87d03a87e03a88004a88104a78305a78405a78606a68707a68808a68a09a58b0aa58d0ba58e0ca48f0da4910ea3920fa39410a29511a19613a19814a099159f9a169f9c179e9d189d9e199da01a9ca11b9ba21d9aa31e9aa51f99a62098a72197a82296aa2395ab2494ac2694ad2793ae2892b02991b12a90b22b8fb32c8eb42e8db52f8cb6308bb7318ab83289ba3388bb3488bc3587bd3786be3885bf3984c03a83c13b82c23c81c33d80c43e7fc5407ec6417dc7427cc8437bc9447aca457acb4679cc4778cc4977cd4a76ce4b75cf4c74d04d73d14e72d24f71d35171d45270d5536fd5546ed6556dd7566cd8576bd9586ada5a6ada5b69db5c68dc5d67dd5e66de5f65de6164df6263e06363e16462e26561e26660e3685fe4695ee56a5de56b5de66c5ce76e5be76f5ae87059e97158e97257ea7457eb7556eb7655ec7754ed7953ed7a52ee7b51ef7c51ef7e50f07f4ff0804ef1814df1834cf2844bf3854bf3874af48849f48948f58b47f58c46f68d45f68f44f79044f79143f79342f89441f89540f9973ff9983ef99a3efa9b3dfa9c3cfa9e3bfb9f3afba139fba238fca338fca537fca636fca835fca934fdab33fdac33fdae32fdaf31fdb130fdb22ffdb42ffdb52efeb72dfeb82cfeba2cfebb2bfebd2afebe2afec029fdc229fdc328fdc527fdc627fdc827fdca26fdcb26fccd25fcce25fcd025fcd225fbd324fbd524fbd724fad824fada24f9dc24f9dd25f8df25f8e125f7e225f7e425f6e626f6e826f5e926f5eb27f4ed27f3ee27f3f027f2f227f1f426f1f525f0f724f0f921\"));\n","import {linearish} from \"./linear\";\n\nexport default function sequential(interpolator) {\n var x0 = 0,\n x1 = 1,\n clamp = false;\n\n function scale(x) {\n var t = (x - x0) / (x1 - x0);\n return interpolator(clamp ? Math.max(0, Math.min(1, t)) : t);\n }\n\n scale.domain = function(_) {\n return arguments.length ? (x0 = +_[0], x1 = +_[1], scale) : [x0, x1];\n };\n\n scale.clamp = function(_) {\n return arguments.length ? (clamp = !!_, scale) : clamp;\n };\n\n scale.interpolator = function(_) {\n return arguments.length ? (interpolator = _, scale) : interpolator;\n };\n\n scale.copy = function() {\n return sequential(interpolator).domain([x0, x1]).clamp(clamp);\n };\n\n return linearish(scale);\n}\n","export default function(specifier) {\n var n = specifier.length / 6 | 0, colors = new Array(n), i = 0;\n while (i < n) colors[i] = \"#\" + specifier.slice(i * 6, ++i * 6);\n return colors;\n}\n","import colors from \"../colors\";\n\nexport default colors(\"7fc97fbeaed4fdc086ffff99386cb0f0027fbf5b17666666\");\n","import colors from \"../colors\";\n\nexport default colors(\"1f77b4ff7f0e2ca02cd627289467bd8c564be377c27f7f7fbcbd2217becf\");\n","import colors from \"../colors\";\n\nexport default colors(\"1b9e77d95f027570b3e7298a66a61ee6ab02a6761d666666\");\n","import colors from \"../colors\";\n\nexport default colors(\"a6cee31f78b4b2df8a33a02cfb9a99e31a1cfdbf6fff7f00cab2d66a3d9affff99b15928\");\n","import colors from \"../colors\";\n\nexport default colors(\"fbb4aeb3cde3ccebc5decbe4fed9a6ffffcce5d8bdfddaecf2f2f2\");\n","import colors from \"../colors\";\n\nexport default colors(\"b3e2cdfdcdaccbd5e8f4cae4e6f5c9fff2aef1e2cccccccc\");\n","import colors from \"../colors\";\n\nexport default colors(\"e41a1c377eb84daf4a984ea3ff7f00ffff33a65628f781bf999999\");\n","import colors from \"../colors\";\n\nexport default colors(\"66c2a5fc8d628da0cbe78ac3a6d854ffd92fe5c494b3b3b3\");\n","import colors from \"../colors\";\n\nexport default colors(\"8dd3c7ffffb3bebadafb807280b1d3fdb462b3de69fccde5d9d9d9bc80bdccebc5ffed6f\");\n","import {interpolateRgbBasis} from \"d3-interpolate\";\n\nexport default function(scheme) {\n return interpolateRgbBasis(scheme[scheme.length - 1]);\n}\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"d8b365f5f5f55ab4ac\",\n \"a6611adfc27d80cdc1018571\",\n \"a6611adfc27df5f5f580cdc1018571\",\n \"8c510ad8b365f6e8c3c7eae55ab4ac01665e\",\n \"8c510ad8b365f6e8c3f5f5f5c7eae55ab4ac01665e\",\n \"8c510abf812ddfc27df6e8c3c7eae580cdc135978f01665e\",\n \"8c510abf812ddfc27df6e8c3f5f5f5c7eae580cdc135978f01665e\",\n \"5430058c510abf812ddfc27df6e8c3c7eae580cdc135978f01665e003c30\",\n \"5430058c510abf812ddfc27df6e8c3f5f5f5c7eae580cdc135978f01665e003c30\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"af8dc3f7f7f77fbf7b\",\n \"7b3294c2a5cfa6dba0008837\",\n \"7b3294c2a5cff7f7f7a6dba0008837\",\n \"762a83af8dc3e7d4e8d9f0d37fbf7b1b7837\",\n \"762a83af8dc3e7d4e8f7f7f7d9f0d37fbf7b1b7837\",\n \"762a839970abc2a5cfe7d4e8d9f0d3a6dba05aae611b7837\",\n \"762a839970abc2a5cfe7d4e8f7f7f7d9f0d3a6dba05aae611b7837\",\n \"40004b762a839970abc2a5cfe7d4e8d9f0d3a6dba05aae611b783700441b\",\n \"40004b762a839970abc2a5cfe7d4e8f7f7f7d9f0d3a6dba05aae611b783700441b\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"e9a3c9f7f7f7a1d76a\",\n \"d01c8bf1b6dab8e1864dac26\",\n \"d01c8bf1b6daf7f7f7b8e1864dac26\",\n \"c51b7de9a3c9fde0efe6f5d0a1d76a4d9221\",\n \"c51b7de9a3c9fde0eff7f7f7e6f5d0a1d76a4d9221\",\n \"c51b7dde77aef1b6dafde0efe6f5d0b8e1867fbc414d9221\",\n \"c51b7dde77aef1b6dafde0eff7f7f7e6f5d0b8e1867fbc414d9221\",\n \"8e0152c51b7dde77aef1b6dafde0efe6f5d0b8e1867fbc414d9221276419\",\n \"8e0152c51b7dde77aef1b6dafde0eff7f7f7e6f5d0b8e1867fbc414d9221276419\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"998ec3f7f7f7f1a340\",\n \"5e3c99b2abd2fdb863e66101\",\n \"5e3c99b2abd2f7f7f7fdb863e66101\",\n \"542788998ec3d8daebfee0b6f1a340b35806\",\n \"542788998ec3d8daebf7f7f7fee0b6f1a340b35806\",\n \"5427888073acb2abd2d8daebfee0b6fdb863e08214b35806\",\n \"5427888073acb2abd2d8daebf7f7f7fee0b6fdb863e08214b35806\",\n \"2d004b5427888073acb2abd2d8daebfee0b6fdb863e08214b358067f3b08\",\n \"2d004b5427888073acb2abd2d8daebf7f7f7fee0b6fdb863e08214b358067f3b08\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"ef8a62f7f7f767a9cf\",\n \"ca0020f4a58292c5de0571b0\",\n \"ca0020f4a582f7f7f792c5de0571b0\",\n \"b2182bef8a62fddbc7d1e5f067a9cf2166ac\",\n \"b2182bef8a62fddbc7f7f7f7d1e5f067a9cf2166ac\",\n \"b2182bd6604df4a582fddbc7d1e5f092c5de4393c32166ac\",\n \"b2182bd6604df4a582fddbc7f7f7f7d1e5f092c5de4393c32166ac\",\n \"67001fb2182bd6604df4a582fddbc7d1e5f092c5de4393c32166ac053061\",\n \"67001fb2182bd6604df4a582fddbc7f7f7f7d1e5f092c5de4393c32166ac053061\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"ef8a62ffffff999999\",\n \"ca0020f4a582bababa404040\",\n \"ca0020f4a582ffffffbababa404040\",\n \"b2182bef8a62fddbc7e0e0e09999994d4d4d\",\n \"b2182bef8a62fddbc7ffffffe0e0e09999994d4d4d\",\n \"b2182bd6604df4a582fddbc7e0e0e0bababa8787874d4d4d\",\n \"b2182bd6604df4a582fddbc7ffffffe0e0e0bababa8787874d4d4d\",\n \"67001fb2182bd6604df4a582fddbc7e0e0e0bababa8787874d4d4d1a1a1a\",\n \"67001fb2182bd6604df4a582fddbc7ffffffe0e0e0bababa8787874d4d4d1a1a1a\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"fc8d59ffffbf91bfdb\",\n \"d7191cfdae61abd9e92c7bb6\",\n \"d7191cfdae61ffffbfabd9e92c7bb6\",\n \"d73027fc8d59fee090e0f3f891bfdb4575b4\",\n \"d73027fc8d59fee090ffffbfe0f3f891bfdb4575b4\",\n \"d73027f46d43fdae61fee090e0f3f8abd9e974add14575b4\",\n \"d73027f46d43fdae61fee090ffffbfe0f3f8abd9e974add14575b4\",\n \"a50026d73027f46d43fdae61fee090e0f3f8abd9e974add14575b4313695\",\n \"a50026d73027f46d43fdae61fee090ffffbfe0f3f8abd9e974add14575b4313695\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"fc8d59ffffbf91cf60\",\n \"d7191cfdae61a6d96a1a9641\",\n \"d7191cfdae61ffffbfa6d96a1a9641\",\n \"d73027fc8d59fee08bd9ef8b91cf601a9850\",\n \"d73027fc8d59fee08bffffbfd9ef8b91cf601a9850\",\n \"d73027f46d43fdae61fee08bd9ef8ba6d96a66bd631a9850\",\n \"d73027f46d43fdae61fee08bffffbfd9ef8ba6d96a66bd631a9850\",\n \"a50026d73027f46d43fdae61fee08bd9ef8ba6d96a66bd631a9850006837\",\n \"a50026d73027f46d43fdae61fee08bffffbfd9ef8ba6d96a66bd631a9850006837\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"fc8d59ffffbf99d594\",\n \"d7191cfdae61abdda42b83ba\",\n \"d7191cfdae61ffffbfabdda42b83ba\",\n \"d53e4ffc8d59fee08be6f59899d5943288bd\",\n \"d53e4ffc8d59fee08bffffbfe6f59899d5943288bd\",\n \"d53e4ff46d43fdae61fee08be6f598abdda466c2a53288bd\",\n \"d53e4ff46d43fdae61fee08bffffbfe6f598abdda466c2a53288bd\",\n \"9e0142d53e4ff46d43fdae61fee08be6f598abdda466c2a53288bd5e4fa2\",\n \"9e0142d53e4ff46d43fdae61fee08bffffbfe6f598abdda466c2a53288bd5e4fa2\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"e5f5f999d8c92ca25f\",\n \"edf8fbb2e2e266c2a4238b45\",\n \"edf8fbb2e2e266c2a42ca25f006d2c\",\n \"edf8fbccece699d8c966c2a42ca25f006d2c\",\n \"edf8fbccece699d8c966c2a441ae76238b45005824\",\n \"f7fcfde5f5f9ccece699d8c966c2a441ae76238b45005824\",\n \"f7fcfde5f5f9ccece699d8c966c2a441ae76238b45006d2c00441b\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"e0ecf49ebcda8856a7\",\n \"edf8fbb3cde38c96c688419d\",\n \"edf8fbb3cde38c96c68856a7810f7c\",\n \"edf8fbbfd3e69ebcda8c96c68856a7810f7c\",\n \"edf8fbbfd3e69ebcda8c96c68c6bb188419d6e016b\",\n \"f7fcfde0ecf4bfd3e69ebcda8c96c68c6bb188419d6e016b\",\n \"f7fcfde0ecf4bfd3e69ebcda8c96c68c6bb188419d810f7c4d004b\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"e0f3dba8ddb543a2ca\",\n \"f0f9e8bae4bc7bccc42b8cbe\",\n \"f0f9e8bae4bc7bccc443a2ca0868ac\",\n \"f0f9e8ccebc5a8ddb57bccc443a2ca0868ac\",\n \"f0f9e8ccebc5a8ddb57bccc44eb3d32b8cbe08589e\",\n \"f7fcf0e0f3dbccebc5a8ddb57bccc44eb3d32b8cbe08589e\",\n \"f7fcf0e0f3dbccebc5a8ddb57bccc44eb3d32b8cbe0868ac084081\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"fee8c8fdbb84e34a33\",\n \"fef0d9fdcc8afc8d59d7301f\",\n \"fef0d9fdcc8afc8d59e34a33b30000\",\n \"fef0d9fdd49efdbb84fc8d59e34a33b30000\",\n \"fef0d9fdd49efdbb84fc8d59ef6548d7301f990000\",\n \"fff7ecfee8c8fdd49efdbb84fc8d59ef6548d7301f990000\",\n \"fff7ecfee8c8fdd49efdbb84fc8d59ef6548d7301fb300007f0000\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"ece2f0a6bddb1c9099\",\n \"f6eff7bdc9e167a9cf02818a\",\n \"f6eff7bdc9e167a9cf1c9099016c59\",\n \"f6eff7d0d1e6a6bddb67a9cf1c9099016c59\",\n \"f6eff7d0d1e6a6bddb67a9cf3690c002818a016450\",\n \"fff7fbece2f0d0d1e6a6bddb67a9cf3690c002818a016450\",\n \"fff7fbece2f0d0d1e6a6bddb67a9cf3690c002818a016c59014636\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"ece7f2a6bddb2b8cbe\",\n \"f1eef6bdc9e174a9cf0570b0\",\n \"f1eef6bdc9e174a9cf2b8cbe045a8d\",\n \"f1eef6d0d1e6a6bddb74a9cf2b8cbe045a8d\",\n \"f1eef6d0d1e6a6bddb74a9cf3690c00570b0034e7b\",\n \"fff7fbece7f2d0d1e6a6bddb74a9cf3690c00570b0034e7b\",\n \"fff7fbece7f2d0d1e6a6bddb74a9cf3690c00570b0045a8d023858\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"e7e1efc994c7dd1c77\",\n \"f1eef6d7b5d8df65b0ce1256\",\n \"f1eef6d7b5d8df65b0dd1c77980043\",\n \"f1eef6d4b9dac994c7df65b0dd1c77980043\",\n \"f1eef6d4b9dac994c7df65b0e7298ace125691003f\",\n \"f7f4f9e7e1efd4b9dac994c7df65b0e7298ace125691003f\",\n \"f7f4f9e7e1efd4b9dac994c7df65b0e7298ace125698004367001f\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"fde0ddfa9fb5c51b8a\",\n \"feebe2fbb4b9f768a1ae017e\",\n \"feebe2fbb4b9f768a1c51b8a7a0177\",\n \"feebe2fcc5c0fa9fb5f768a1c51b8a7a0177\",\n \"feebe2fcc5c0fa9fb5f768a1dd3497ae017e7a0177\",\n \"fff7f3fde0ddfcc5c0fa9fb5f768a1dd3497ae017e7a0177\",\n \"fff7f3fde0ddfcc5c0fa9fb5f768a1dd3497ae017e7a017749006a\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"edf8b17fcdbb2c7fb8\",\n \"ffffcca1dab441b6c4225ea8\",\n \"ffffcca1dab441b6c42c7fb8253494\",\n \"ffffccc7e9b47fcdbb41b6c42c7fb8253494\",\n \"ffffccc7e9b47fcdbb41b6c41d91c0225ea80c2c84\",\n \"ffffd9edf8b1c7e9b47fcdbb41b6c41d91c0225ea80c2c84\",\n \"ffffd9edf8b1c7e9b47fcdbb41b6c41d91c0225ea8253494081d58\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"f7fcb9addd8e31a354\",\n \"ffffccc2e69978c679238443\",\n \"ffffccc2e69978c67931a354006837\",\n \"ffffccd9f0a3addd8e78c67931a354006837\",\n \"ffffccd9f0a3addd8e78c67941ab5d238443005a32\",\n \"ffffe5f7fcb9d9f0a3addd8e78c67941ab5d238443005a32\",\n \"ffffe5f7fcb9d9f0a3addd8e78c67941ab5d238443006837004529\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"fff7bcfec44fd95f0e\",\n \"ffffd4fed98efe9929cc4c02\",\n \"ffffd4fed98efe9929d95f0e993404\",\n \"ffffd4fee391fec44ffe9929d95f0e993404\",\n \"ffffd4fee391fec44ffe9929ec7014cc4c028c2d04\",\n \"ffffe5fff7bcfee391fec44ffe9929ec7014cc4c028c2d04\",\n \"ffffe5fff7bcfee391fec44ffe9929ec7014cc4c02993404662506\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"ffeda0feb24cf03b20\",\n \"ffffb2fecc5cfd8d3ce31a1c\",\n \"ffffb2fecc5cfd8d3cf03b20bd0026\",\n \"ffffb2fed976feb24cfd8d3cf03b20bd0026\",\n \"ffffb2fed976feb24cfd8d3cfc4e2ae31a1cb10026\",\n \"ffffccffeda0fed976feb24cfd8d3cfc4e2ae31a1cb10026\",\n \"ffffccffeda0fed976feb24cfd8d3cfc4e2ae31a1cbd0026800026\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"deebf79ecae13182bd\",\n \"eff3ffbdd7e76baed62171b5\",\n \"eff3ffbdd7e76baed63182bd08519c\",\n \"eff3ffc6dbef9ecae16baed63182bd08519c\",\n \"eff3ffc6dbef9ecae16baed64292c62171b5084594\",\n \"f7fbffdeebf7c6dbef9ecae16baed64292c62171b5084594\",\n \"f7fbffdeebf7c6dbef9ecae16baed64292c62171b508519c08306b\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"e5f5e0a1d99b31a354\",\n \"edf8e9bae4b374c476238b45\",\n \"edf8e9bae4b374c47631a354006d2c\",\n \"edf8e9c7e9c0a1d99b74c47631a354006d2c\",\n \"edf8e9c7e9c0a1d99b74c47641ab5d238b45005a32\",\n \"f7fcf5e5f5e0c7e9c0a1d99b74c47641ab5d238b45005a32\",\n \"f7fcf5e5f5e0c7e9c0a1d99b74c47641ab5d238b45006d2c00441b\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"f0f0f0bdbdbd636363\",\n \"f7f7f7cccccc969696525252\",\n \"f7f7f7cccccc969696636363252525\",\n \"f7f7f7d9d9d9bdbdbd969696636363252525\",\n \"f7f7f7d9d9d9bdbdbd969696737373525252252525\",\n \"fffffff0f0f0d9d9d9bdbdbd969696737373525252252525\",\n \"fffffff0f0f0d9d9d9bdbdbd969696737373525252252525000000\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"efedf5bcbddc756bb1\",\n \"f2f0f7cbc9e29e9ac86a51a3\",\n \"f2f0f7cbc9e29e9ac8756bb154278f\",\n \"f2f0f7dadaebbcbddc9e9ac8756bb154278f\",\n \"f2f0f7dadaebbcbddc9e9ac8807dba6a51a34a1486\",\n \"fcfbfdefedf5dadaebbcbddc9e9ac8807dba6a51a34a1486\",\n \"fcfbfdefedf5dadaebbcbddc9e9ac8807dba6a51a354278f3f007d\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"fee0d2fc9272de2d26\",\n \"fee5d9fcae91fb6a4acb181d\",\n \"fee5d9fcae91fb6a4ade2d26a50f15\",\n \"fee5d9fcbba1fc9272fb6a4ade2d26a50f15\",\n \"fee5d9fcbba1fc9272fb6a4aef3b2ccb181d99000d\",\n \"fff5f0fee0d2fcbba1fc9272fb6a4aef3b2ccb181d99000d\",\n \"fff5f0fee0d2fcbba1fc9272fb6a4aef3b2ccb181da50f1567000d\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"fee6cefdae6be6550d\",\n \"feeddefdbe85fd8d3cd94701\",\n \"feeddefdbe85fd8d3ce6550da63603\",\n \"feeddefdd0a2fdae6bfd8d3ce6550da63603\",\n \"feeddefdd0a2fdae6bfd8d3cf16913d948018c2d04\",\n \"fff5ebfee6cefdd0a2fdae6bfd8d3cf16913d948018c2d04\",\n \"fff5ebfee6cefdd0a2fdae6bfd8d3cf16913d94801a636037f2704\"\n).map(colors);\n\nexport default ramp(scheme);\n","import {cubehelix} from \"d3-color\";\nimport {interpolateCubehelixLong} from \"d3-interpolate\";\n\nexport default interpolateCubehelixLong(cubehelix(300, 0.5, 0.0), cubehelix(-240, 0.5, 1.0));\n","import {cubehelix} from \"d3-color\";\nimport {interpolateCubehelixLong} from \"d3-interpolate\";\n\nexport var warm = interpolateCubehelixLong(cubehelix(-100, 0.75, 0.35), cubehelix(80, 1.50, 0.8));\n\nexport var cool = interpolateCubehelixLong(cubehelix(260, 0.75, 0.35), cubehelix(80, 1.50, 0.8));\n\nvar c = cubehelix();\n\nexport default function(t) {\n if (t < 0 || t > 1) t -= Math.floor(t);\n var ts = Math.abs(t - 0.5);\n c.h = 360 * t - 100;\n c.s = 1.5 - 1.5 * ts;\n c.l = 0.8 - 0.9 * ts;\n return c + \"\";\n}\n","import {rgb} from \"d3-color\";\n\nvar c = rgb(),\n pi_1_3 = Math.PI / 3,\n pi_2_3 = Math.PI * 2 / 3;\n\nexport default function(t) {\n var x;\n t = (0.5 - t) * Math.PI;\n c.r = 255 * (x = Math.sin(t)) * x;\n c.g = 255 * (x = Math.sin(t + pi_1_3)) * x;\n c.b = 255 * (x = Math.sin(t + pi_2_3)) * x;\n return c + \"\";\n}\n","import colors from \"../colors\";\n\nfunction ramp(range) {\n var n = range.length;\n return function(t) {\n return range[Math.max(0, Math.min(n - 1, Math.floor(t * n)))];\n };\n}\n\nexport default ramp(colors(\"44015444025645045745055946075a46085c460a5d460b5e470d60470e6147106347116447136548146748166848176948186a481a6c481b6d481c6e481d6f481f70482071482173482374482475482576482677482878482979472a7a472c7a472d7b472e7c472f7d46307e46327e46337f463480453581453781453882443983443a83443b84433d84433e85423f854240864241864142874144874045884046883f47883f48893e49893e4a893e4c8a3d4d8a3d4e8a3c4f8a3c508b3b518b3b528b3a538b3a548c39558c39568c38588c38598c375a8c375b8d365c8d365d8d355e8d355f8d34608d34618d33628d33638d32648e32658e31668e31678e31688e30698e306a8e2f6b8e2f6c8e2e6d8e2e6e8e2e6f8e2d708e2d718e2c718e2c728e2c738e2b748e2b758e2a768e2a778e2a788e29798e297a8e297b8e287c8e287d8e277e8e277f8e27808e26818e26828e26828e25838e25848e25858e24868e24878e23888e23898e238a8d228b8d228c8d228d8d218e8d218f8d21908d21918c20928c20928c20938c1f948c1f958b1f968b1f978b1f988b1f998a1f9a8a1e9b8a1e9c891e9d891f9e891f9f881fa0881fa1881fa1871fa28720a38620a48621a58521a68522a78522a88423a98324aa8325ab8225ac8226ad8127ad8128ae8029af7f2ab07f2cb17e2db27d2eb37c2fb47c31b57b32b67a34b67935b77937b87838b9773aba763bbb753dbc743fbc7340bd7242be7144bf7046c06f48c16e4ac16d4cc26c4ec36b50c46a52c56954c56856c66758c7655ac8645cc8635ec96260ca6063cb5f65cb5e67cc5c69cd5b6ccd5a6ece5870cf5773d05675d05477d1537ad1517cd2507fd34e81d34d84d44b86d54989d5488bd6468ed64590d74393d74195d84098d83e9bd93c9dd93ba0da39a2da37a5db36a8db34aadc32addc30b0dd2fb2dd2db5de2bb8de29bade28bddf26c0df25c2df23c5e021c8e020cae11fcde11dd0e11cd2e21bd5e21ad8e219dae319dde318dfe318e2e418e5e419e7e419eae51aece51befe51cf1e51df4e61ef6e620f8e621fbe723fde725\"));\n\nexport var magma = ramp(colors(\"00000401000501010601010802010902020b02020d03030f03031204041405041606051806051a07061c08071e0907200a08220b09240c09260d0a290e0b2b100b2d110c2f120d31130d34140e36150e38160f3b180f3d19103f1a10421c10441d11471e114920114b21114e22115024125325125527125829115a2a115c2c115f2d11612f116331116533106734106936106b38106c390f6e3b0f703d0f713f0f72400f74420f75440f764510774710784910784a10794c117a4e117b4f127b51127c52137c54137d56147d57157e59157e5a167e5c167f5d177f5f187f601880621980641a80651a80671b80681c816a1c816b1d816d1d816e1e81701f81721f817320817521817621817822817922827b23827c23827e24828025828125818326818426818627818827818928818b29818c29818e2a81902a81912b81932b80942c80962c80982d80992d809b2e7f9c2e7f9e2f7fa02f7fa1307ea3307ea5317ea6317da8327daa337dab337cad347cae347bb0357bb2357bb3367ab5367ab73779b83779ba3878bc3978bd3977bf3a77c03a76c23b75c43c75c53c74c73d73c83e73ca3e72cc3f71cd4071cf4070d0416fd2426fd3436ed5446dd6456cd8456cd9466bdb476adc4869de4968df4a68e04c67e24d66e34e65e44f64e55064e75263e85362e95462ea5661eb5760ec5860ed5a5fee5b5eef5d5ef05f5ef1605df2625df2645cf3655cf4675cf4695cf56b5cf66c5cf66e5cf7705cf7725cf8745cf8765cf9785df9795df97b5dfa7d5efa7f5efa815ffb835ffb8560fb8761fc8961fc8a62fc8c63fc8e64fc9065fd9266fd9467fd9668fd9869fd9a6afd9b6bfe9d6cfe9f6dfea16efea36ffea571fea772fea973feaa74feac76feae77feb078feb27afeb47bfeb67cfeb77efeb97ffebb81febd82febf84fec185fec287fec488fec68afec88cfeca8dfecc8ffecd90fecf92fed194fed395fed597fed799fed89afdda9cfddc9efddea0fde0a1fde2a3fde3a5fde5a7fde7a9fde9aafdebacfcecaefceeb0fcf0b2fcf2b4fcf4b6fcf6b8fcf7b9fcf9bbfcfbbdfcfdbf\"));\n\nexport var inferno = ramp(colors(\"00000401000501010601010802010a02020c02020e03021004031204031405041706041907051b08051d09061f0a07220b07240c08260d08290e092b10092d110a30120a32140b34150b37160b39180c3c190c3e1b0c411c0c431e0c451f0c48210c4a230c4c240c4f260c51280b53290b552b0b572d0b592f0a5b310a5c320a5e340a5f3609613809623909633b09643d09653e0966400a67420a68440a68450a69470b6a490b6a4a0c6b4c0c6b4d0d6c4f0d6c510e6c520e6d540f6d550f6d57106e59106e5a116e5c126e5d126e5f136e61136e62146e64156e65156e67166e69166e6a176e6c186e6d186e6f196e71196e721a6e741a6e751b6e771c6d781c6d7a1d6d7c1d6d7d1e6d7f1e6c801f6c82206c84206b85216b87216b88226a8a226a8c23698d23698f24699025689225689326679526679727669827669a28659b29649d29649f2a63a02a63a22b62a32c61a52c60a62d60a82e5fa92e5eab2f5ead305dae305cb0315bb1325ab3325ab43359b63458b73557b93556ba3655bc3754bd3853bf3952c03a51c13a50c33b4fc43c4ec63d4dc73e4cc83f4bca404acb4149cc4248ce4347cf4446d04545d24644d34743d44842d54a41d74b3fd84c3ed94d3dda4e3cdb503bdd513ade5238df5337e05536e15635e25734e35933e45a31e55c30e65d2fe75e2ee8602de9612bea632aeb6429eb6628ec6726ed6925ee6a24ef6c23ef6e21f06f20f1711ff1731df2741cf3761bf37819f47918f57b17f57d15f67e14f68013f78212f78410f8850ff8870ef8890cf98b0bf98c0af98e09fa9008fa9207fa9407fb9606fb9706fb9906fb9b06fb9d07fc9f07fca108fca309fca50afca60cfca80dfcaa0ffcac11fcae12fcb014fcb216fcb418fbb61afbb81dfbba1ffbbc21fbbe23fac026fac228fac42afac62df9c72ff9c932f9cb35f8cd37f8cf3af7d13df7d340f6d543f6d746f5d949f5db4cf4dd4ff4df53f4e156f3e35af3e55df2e661f2e865f2ea69f1ec6df1ed71f1ef75f1f179f2f27df2f482f3f586f3f68af4f88ef5f992f6fa96f8fb9af9fc9dfafda1fcffa4\"));\n\nexport var plasma = ramp(colors(\"0d088710078813078916078a19068c1b068d1d068e20068f2206902406912605912805922a05932c05942e05952f059631059733059735049837049938049a3a049a3c049b3e049c3f049c41049d43039e44039e46039f48039f4903a04b03a14c02a14e02a25002a25102a35302a35502a45601a45801a45901a55b01a55c01a65e01a66001a66100a76300a76400a76600a76700a86900a86a00a86c00a86e00a86f00a87100a87201a87401a87501a87701a87801a87a02a87b02a87d03a87e03a88004a88104a78305a78405a78606a68707a68808a68a09a58b0aa58d0ba58e0ca48f0da4910ea3920fa39410a29511a19613a19814a099159f9a169f9c179e9d189d9e199da01a9ca11b9ba21d9aa31e9aa51f99a62098a72197a82296aa2395ab2494ac2694ad2793ae2892b02991b12a90b22b8fb32c8eb42e8db52f8cb6308bb7318ab83289ba3388bb3488bc3587bd3786be3885bf3984c03a83c13b82c23c81c33d80c43e7fc5407ec6417dc7427cc8437bc9447aca457acb4679cc4778cc4977cd4a76ce4b75cf4c74d04d73d14e72d24f71d35171d45270d5536fd5546ed6556dd7566cd8576bd9586ada5a6ada5b69db5c68dc5d67dd5e66de5f65de6164df6263e06363e16462e26561e26660e3685fe4695ee56a5de56b5de66c5ce76e5be76f5ae87059e97158e97257ea7457eb7556eb7655ec7754ed7953ed7a52ee7b51ef7c51ef7e50f07f4ff0804ef1814df1834cf2844bf3854bf3874af48849f48948f58b47f58c46f68d45f68f44f79044f79143f79342f89441f89540f9973ff9983ef99a3efa9b3dfa9c3cfa9e3bfb9f3afba139fba238fca338fca537fca636fca835fca934fdab33fdac33fdae32fdaf31fdb130fdb22ffdb42ffdb52efeb72dfeb82cfeba2cfebb2bfebd2afebe2afec029fdc229fdc328fdc527fdc627fdc827fdca26fdcb26fccd25fcce25fcd025fcd225fbd324fbd524fbd724fad824fada24f9dc24f9dd25f8df25f8e125f7e225f7e425f6e626f6e826f5e926f5eb27f4ed27f3ee27f3f027f2f227f1f426f1f525f0f724f0f921\"));\n","const ReservedFields = {\n ROW_ID: '__id__'\n};\n\nexport default ReservedFields;\n","const CommonProps = {\n ACTION_INF: 'actionInf',\n ON_LAYER_DRAW: 'onlayerdraw'\n};\n\nexport default CommonProps;\n","export var slice = Array.prototype.slice;\n","export default function(x) {\n return x;\n}\n","import {slice} from \"./array\";\nimport identity from \"./identity\";\n\nvar top = 1,\n right = 2,\n bottom = 3,\n left = 4,\n epsilon = 1e-6;\n\nfunction translateX(x) {\n return \"translate(\" + (x + 0.5) + \",0)\";\n}\n\nfunction translateY(y) {\n return \"translate(0,\" + (y + 0.5) + \")\";\n}\n\nfunction number(scale) {\n return function(d) {\n return +scale(d);\n };\n}\n\nfunction center(scale) {\n var offset = Math.max(0, scale.bandwidth() - 1) / 2; // Adjust for 0.5px offset.\n if (scale.round()) offset = Math.round(offset);\n return function(d) {\n return +scale(d) + offset;\n };\n}\n\nfunction entering() {\n return !this.__axis;\n}\n\nfunction axis(orient, scale) {\n var tickArguments = [],\n tickValues = null,\n tickFormat = null,\n tickTransform = null,\n tickSizeInner = 6,\n tickSizeOuter = 6,\n tickPadding = 3,\n k = orient === top || orient === left ? -1 : 1,\n x = orient === left || orient === right ? \"x\" : \"y\",\n transform = orient === top || orient === bottom ? translateX : translateY;\n\n function axis(context) {\n var values = tickValues == null ? (scale.ticks ? scale.ticks.apply(scale, tickArguments) : scale.domain()) : tickValues,\n format = tickFormat == null ? (scale.tickFormat ? scale.tickFormat.apply(scale, tickArguments) : identity) : tickFormat,\n spacing = Math.max(tickSizeInner, 0) + tickPadding,\n range = scale.range(),\n range0 = +range[0] + 0.5,\n range1 = +range[range.length - 1] + 0.5,\n position = (scale.bandwidth ? center : number)(scale.copy()),\n selection = context.selection ? context.selection() : context,\n path = selection.selectAll(\".domain\").data([null]),\n tick = selection.selectAll(\".tick\").data(values, scale).order(),\n tickExit = tick.exit(),\n tickEnter = tick.enter().append(\"g\").attr(\"class\", \"tick\"),\n line = tick.select(\"line\"),\n text = tick.select(\"text\");\n\n path = path.merge(path.enter().insert(\"path\", \".tick\")\n .attr(\"class\", \"domain\")\n .attr(\"stroke\", \"#000\"));\n\n tick = tick.merge(tickEnter);\n\n line = line.merge(tickEnter.append(\"line\")\n .attr(\"stroke\", \"#000\")\n .attr(x + \"2\", k * tickSizeInner));\n\n text = text.merge(tickEnter.append(\"text\")\n .attr(\"fill\", \"#000\")\n .attr(x, k * spacing)\n .attr(\"dy\", orient === top ? \"0em\" : orient === bottom ? \"0.71em\" : \"0.32em\"))\n .style('transform', tickTransform);\n\n if (context !== selection) {\n path = path.transition(context);\n tick = tick.transition(context);\n line = line.transition(context);\n text = text.transition(context);\n\n tickExit = tickExit.transition(context)\n .attr(\"opacity\", epsilon)\n .attr(\"transform\", function(d) { return isFinite(d = position(d)) ? transform(d) : this.getAttribute(\"transform\"); });\n\n tickEnter\n .attr(\"opacity\", epsilon)\n .attr(\"transform\", function(d) { var p = this.parentNode.__axis; return transform(p && isFinite(p = p(d)) ? p : position(d)); });\n }\n\n tickExit.remove();\n\n path\n .attr(\"d\", orient === left || orient == right\n ? \"M\" + k * tickSizeOuter + \",\" + range0 + \"H0.5V\" + range1 + \"H\" + k * tickSizeOuter\n : \"M\" + range0 + \",\" + k * tickSizeOuter + \"V0.5H\" + range1 + \"V\" + k * tickSizeOuter);\n\n tick\n .attr(\"opacity\", 1)\n .attr(\"transform\", function(d) { return transform(position(d)); });\n\n line\n .attr(x + \"2\", k * tickSizeInner);\n\n text\n .attr(x, k * spacing)\n .text(format);\n\n selection.filter(entering)\n .attr(\"fill\", \"none\")\n .attr(\"font-size\", 10)\n .attr(\"font-family\", \"sans-serif\")\n .attr(\"text-anchor\", orient === right ? \"start\" : orient === left ? \"end\" : \"middle\");\n\n selection\n .each(function() { this.__axis = position; });\n }\n\n axis.scale = function(_) {\n return arguments.length ? (scale = _, axis) : scale;\n };\n\n axis.tickTransform = function(_) {\n return arguments.length ? (tickTransform = _, axis) : tickTransform;\n };\n\n axis.ticks = function() {\n return tickArguments = slice.call(arguments), axis;\n };\n\n axis.tickArguments = function(_) {\n return arguments.length ? (tickArguments = _ == null ? [] : slice.call(_), axis) : tickArguments.slice();\n };\n\n axis.tickValues = function(_) {\n return arguments.length ? (tickValues = _ == null ? null : slice.call(_), axis) : tickValues && tickValues.slice();\n };\n\n axis.tickFormat = function(_) {\n return arguments.length ? (tickFormat = _, axis) : tickFormat;\n };\n\n axis.tickSize = function(_) {\n return arguments.length ? (tickSizeInner = tickSizeOuter = +_, axis) : tickSizeInner;\n };\n\n axis.tickSizeInner = function(_) {\n return arguments.length ? (tickSizeInner = +_, axis) : tickSizeInner;\n };\n\n axis.tickSizeOuter = function(_) {\n return arguments.length ? (tickSizeOuter = +_, axis) : tickSizeOuter;\n };\n\n axis.tickPadding = function(_) {\n return arguments.length ? (tickPadding = +_, axis) : tickPadding;\n };\n\n return axis;\n}\n\nexport function axisTop(scale) {\n return axis(top, scale);\n}\n\nexport function axisRight(scale) {\n return axis(right, scale);\n}\n\nexport function axisBottom(scale) {\n return axis(bottom, scale);\n}\n\nexport function axisLeft(scale) {\n return axis(left, scale);\n}\n","var pi = Math.PI,\n tau = 2 * pi,\n epsilon = 1e-6,\n tauEpsilon = tau - epsilon;\n\nfunction Path() {\n this._x0 = this._y0 = // start of current subpath\n this._x1 = this._y1 = null; // end of current subpath\n this._ = \"\";\n}\n\nfunction path() {\n return new Path;\n}\n\nPath.prototype = path.prototype = {\n constructor: Path,\n moveTo: function(x, y) {\n this._ += \"M\" + (this._x0 = this._x1 = +x) + \",\" + (this._y0 = this._y1 = +y);\n },\n closePath: function() {\n if (this._x1 !== null) {\n this._x1 = this._x0, this._y1 = this._y0;\n this._ += \"Z\";\n }\n },\n lineTo: function(x, y) {\n this._ += \"L\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n },\n quadraticCurveTo: function(x1, y1, x, y) {\n this._ += \"Q\" + (+x1) + \",\" + (+y1) + \",\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n },\n bezierCurveTo: function(x1, y1, x2, y2, x, y) {\n this._ += \"C\" + (+x1) + \",\" + (+y1) + \",\" + (+x2) + \",\" + (+y2) + \",\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n },\n arcTo: function(x1, y1, x2, y2, r) {\n x1 = +x1, y1 = +y1, x2 = +x2, y2 = +y2, r = +r;\n var x0 = this._x1,\n y0 = this._y1,\n x21 = x2 - x1,\n y21 = y2 - y1,\n x01 = x0 - x1,\n y01 = y0 - y1,\n l01_2 = x01 * x01 + y01 * y01;\n\n // Is the radius negative? Error.\n if (r < 0) throw new Error(\"negative radius: \" + r);\n\n // Is this path empty? Move to (x1,y1).\n if (this._x1 === null) {\n this._ += \"M\" + (this._x1 = x1) + \",\" + (this._y1 = y1);\n }\n\n // Or, is (x1,y1) coincident with (x0,y0)? Do nothing.\n else if (!(l01_2 > epsilon));\n\n // Or, are (x0,y0), (x1,y1) and (x2,y2) collinear?\n // Equivalently, is (x1,y1) coincident with (x2,y2)?\n // Or, is the radius zero? Line to (x1,y1).\n else if (!(Math.abs(y01 * x21 - y21 * x01) > epsilon) || !r) {\n this._ += \"L\" + (this._x1 = x1) + \",\" + (this._y1 = y1);\n }\n\n // Otherwise, draw an arc!\n else {\n var x20 = x2 - x0,\n y20 = y2 - y0,\n l21_2 = x21 * x21 + y21 * y21,\n l20_2 = x20 * x20 + y20 * y20,\n l21 = Math.sqrt(l21_2),\n l01 = Math.sqrt(l01_2),\n l = r * Math.tan((pi - Math.acos((l21_2 + l01_2 - l20_2) / (2 * l21 * l01))) / 2),\n t01 = l / l01,\n t21 = l / l21;\n\n // If the start tangent is not coincident with (x0,y0), line to.\n if (Math.abs(t01 - 1) > epsilon) {\n this._ += \"L\" + (x1 + t01 * x01) + \",\" + (y1 + t01 * y01);\n }\n\n this._ += \"A\" + r + \",\" + r + \",0,0,\" + (+(y01 * x20 > x01 * y20)) + \",\" + (this._x1 = x1 + t21 * x21) + \",\" + (this._y1 = y1 + t21 * y21);\n }\n },\n arc: function(x, y, r, a0, a1, ccw) {\n x = +x, y = +y, r = +r;\n var dx = r * Math.cos(a0),\n dy = r * Math.sin(a0),\n x0 = x + dx,\n y0 = y + dy,\n cw = 1 ^ ccw,\n da = ccw ? a0 - a1 : a1 - a0;\n\n // Is the radius negative? Error.\n if (r < 0) throw new Error(\"negative radius: \" + r);\n\n // Is this path empty? Move to (x0,y0).\n if (this._x1 === null) {\n this._ += \"M\" + x0 + \",\" + y0;\n }\n\n // Or, is (x0,y0) not coincident with the previous point? Line to (x0,y0).\n else if (Math.abs(this._x1 - x0) > epsilon || Math.abs(this._y1 - y0) > epsilon) {\n this._ += \"L\" + x0 + \",\" + y0;\n }\n\n // Is this arc empty? We’re done.\n if (!r) return;\n\n // Does the angle go the wrong way? Flip the direction.\n if (da < 0) da = da % tau + tau;\n\n // Is this a complete circle? Draw two arcs to complete the circle.\n if (da > tauEpsilon) {\n this._ += \"A\" + r + \",\" + r + \",0,1,\" + cw + \",\" + (x - dx) + \",\" + (y - dy) + \"A\" + r + \",\" + r + \",0,1,\" + cw + \",\" + (this._x1 = x0) + \",\" + (this._y1 = y0);\n }\n\n // Is this arc non-empty? Draw an arc!\n else if (da > epsilon) {\n this._ += \"A\" + r + \",\" + r + \",0,\" + (+(da >= pi)) + \",\" + cw + \",\" + (this._x1 = x + r * Math.cos(a1)) + \",\" + (this._y1 = y + r * Math.sin(a1));\n }\n },\n rect: function(x, y, w, h) {\n this._ += \"M\" + (this._x0 = this._x1 = +x) + \",\" + (this._y0 = this._y1 = +y) + \"h\" + (+w) + \"v\" + (+h) + \"h\" + (-w) + \"Z\";\n },\n toString: function() {\n return this._;\n }\n};\n\nexport default path;\n","export default function(x) {\n return function constant() {\n return x;\n };\n}\n","export var abs = Math.abs;\nexport var atan2 = Math.atan2;\nexport var cos = Math.cos;\nexport var max = Math.max;\nexport var min = Math.min;\nexport var sin = Math.sin;\nexport var sqrt = Math.sqrt;\n\nexport var epsilon = 1e-12;\nexport var pi = Math.PI;\nexport var halfPi = pi / 2;\nexport var tau = 2 * pi;\n\nexport function acos(x) {\n return x > 1 ? 0 : x < -1 ? pi : Math.acos(x);\n}\n\nexport function asin(x) {\n return x >= 1 ? halfPi : x <= -1 ? -halfPi : Math.asin(x);\n}\n","import {path} from \"d3-path\";\nimport constant from \"./constant\";\nimport {abs, acos, asin, atan2, cos, epsilon, halfPi, max, min, pi, sin, sqrt, tau} from \"./math\";\n\nfunction arcInnerRadius(d) {\n return d.innerRadius;\n}\n\nfunction arcOuterRadius(d) {\n return d.outerRadius;\n}\n\nfunction arcStartAngle(d) {\n return d.startAngle;\n}\n\nfunction arcEndAngle(d) {\n return d.endAngle;\n}\n\nfunction arcPadAngle(d) {\n return d && d.padAngle; // Note: optional!\n}\n\nfunction intersect(x0, y0, x1, y1, x2, y2, x3, y3) {\n var x10 = x1 - x0, y10 = y1 - y0,\n x32 = x3 - x2, y32 = y3 - y2,\n t = (x32 * (y0 - y2) - y32 * (x0 - x2)) / (y32 * x10 - x32 * y10);\n return [x0 + t * x10, y0 + t * y10];\n}\n\n// Compute perpendicular offset line of length rc.\n// http://mathworld.wolfram.com/Circle-LineIntersection.html\nfunction cornerTangents(x0, y0, x1, y1, r1, rc, cw) {\n var x01 = x0 - x1,\n y01 = y0 - y1,\n lo = (cw ? rc : -rc) / sqrt(x01 * x01 + y01 * y01),\n ox = lo * y01,\n oy = -lo * x01,\n x11 = x0 + ox,\n y11 = y0 + oy,\n x10 = x1 + ox,\n y10 = y1 + oy,\n x00 = (x11 + x10) / 2,\n y00 = (y11 + y10) / 2,\n dx = x10 - x11,\n dy = y10 - y11,\n d2 = dx * dx + dy * dy,\n r = r1 - rc,\n D = x11 * y10 - x10 * y11,\n d = (dy < 0 ? -1 : 1) * sqrt(max(0, r * r * d2 - D * D)),\n cx0 = (D * dy - dx * d) / d2,\n cy0 = (-D * dx - dy * d) / d2,\n cx1 = (D * dy + dx * d) / d2,\n cy1 = (-D * dx + dy * d) / d2,\n dx0 = cx0 - x00,\n dy0 = cy0 - y00,\n dx1 = cx1 - x00,\n dy1 = cy1 - y00;\n\n // Pick the closer of the two intersection points.\n // TODO Is there a faster way to determine which intersection to use?\n if (dx0 * dx0 + dy0 * dy0 > dx1 * dx1 + dy1 * dy1) cx0 = cx1, cy0 = cy1;\n\n return {\n cx: cx0,\n cy: cy0,\n x01: -ox,\n y01: -oy,\n x11: cx0 * (r1 / r - 1),\n y11: cy0 * (r1 / r - 1)\n };\n}\n\nexport default function() {\n var innerRadius = arcInnerRadius,\n outerRadius = arcOuterRadius,\n cornerRadius = constant(0),\n padRadius = null,\n startAngle = arcStartAngle,\n endAngle = arcEndAngle,\n padAngle = arcPadAngle,\n context = null;\n\n function arc() {\n var buffer,\n r,\n r0 = +innerRadius.apply(this, arguments),\n r1 = +outerRadius.apply(this, arguments),\n a0 = startAngle.apply(this, arguments) - halfPi,\n a1 = endAngle.apply(this, arguments) - halfPi,\n da = abs(a1 - a0),\n cw = a1 > a0;\n\n if (!context) context = buffer = path();\n\n // Ensure that the outer radius is always larger than the inner radius.\n if (r1 < r0) r = r1, r1 = r0, r0 = r;\n\n // Is it a point?\n if (!(r1 > epsilon)) context.moveTo(0, 0);\n\n // Or is it a circle or annulus?\n else if (da > tau - epsilon) {\n context.moveTo(r1 * cos(a0), r1 * sin(a0));\n context.arc(0, 0, r1, a0, a1, !cw);\n if (r0 > epsilon) {\n context.moveTo(r0 * cos(a1), r0 * sin(a1));\n context.arc(0, 0, r0, a1, a0, cw);\n }\n }\n\n // Or is it a circular or annular sector?\n else {\n var a01 = a0,\n a11 = a1,\n a00 = a0,\n a10 = a1,\n da0 = da,\n da1 = da,\n ap = padAngle.apply(this, arguments) / 2,\n rp = (ap > epsilon) && (padRadius ? +padRadius.apply(this, arguments) : sqrt(r0 * r0 + r1 * r1)),\n rc = min(abs(r1 - r0) / 2, +cornerRadius.apply(this, arguments)),\n rc0 = rc,\n rc1 = rc,\n t0,\n t1;\n\n // Apply padding? Note that since r1 ≥ r0, da1 ≥ da0.\n if (rp > epsilon) {\n var p0 = asin(rp / r0 * sin(ap)),\n p1 = asin(rp / r1 * sin(ap));\n if ((da0 -= p0 * 2) > epsilon) p0 *= (cw ? 1 : -1), a00 += p0, a10 -= p0;\n else da0 = 0, a00 = a10 = (a0 + a1) / 2;\n if ((da1 -= p1 * 2) > epsilon) p1 *= (cw ? 1 : -1), a01 += p1, a11 -= p1;\n else da1 = 0, a01 = a11 = (a0 + a1) / 2;\n }\n\n var x01 = r1 * cos(a01),\n y01 = r1 * sin(a01),\n x10 = r0 * cos(a10),\n y10 = r0 * sin(a10);\n\n // Apply rounded corners?\n if (rc > epsilon) {\n var x11 = r1 * cos(a11),\n y11 = r1 * sin(a11),\n x00 = r0 * cos(a00),\n y00 = r0 * sin(a00);\n\n // Restrict the corner radius according to the sector angle.\n if (da < pi) {\n var oc = da0 > epsilon ? intersect(x01, y01, x00, y00, x11, y11, x10, y10) : [x10, y10],\n ax = x01 - oc[0],\n ay = y01 - oc[1],\n bx = x11 - oc[0],\n by = y11 - oc[1],\n kc = 1 / sin(acos((ax * bx + ay * by) / (sqrt(ax * ax + ay * ay) * sqrt(bx * bx + by * by))) / 2),\n lc = sqrt(oc[0] * oc[0] + oc[1] * oc[1]);\n rc0 = min(rc, (r0 - lc) / (kc - 1));\n rc1 = min(rc, (r1 - lc) / (kc + 1));\n }\n }\n\n // Is the sector collapsed to a line?\n if (!(da1 > epsilon)) context.moveTo(x01, y01);\n\n // Does the sector’s outer ring have rounded corners?\n else if (rc1 > epsilon) {\n t0 = cornerTangents(x00, y00, x01, y01, r1, rc1, cw);\n t1 = cornerTangents(x11, y11, x10, y10, r1, rc1, cw);\n\n context.moveTo(t0.cx + t0.x01, t0.cy + t0.y01);\n\n // Have the corners merged?\n if (rc1 < rc) context.arc(t0.cx, t0.cy, rc1, atan2(t0.y01, t0.x01), atan2(t1.y01, t1.x01), !cw);\n\n // Otherwise, draw the two corners and the ring.\n else {\n context.arc(t0.cx, t0.cy, rc1, atan2(t0.y01, t0.x01), atan2(t0.y11, t0.x11), !cw);\n context.arc(0, 0, r1, atan2(t0.cy + t0.y11, t0.cx + t0.x11), atan2(t1.cy + t1.y11, t1.cx + t1.x11), !cw);\n context.arc(t1.cx, t1.cy, rc1, atan2(t1.y11, t1.x11), atan2(t1.y01, t1.x01), !cw);\n }\n }\n\n // Or is the outer ring just a circular arc?\n else context.moveTo(x01, y01), context.arc(0, 0, r1, a01, a11, !cw);\n\n // Is there no inner ring, and it’s a circular sector?\n // Or perhaps it’s an annular sector collapsed due to padding?\n if (!(r0 > epsilon) || !(da0 > epsilon)) context.lineTo(x10, y10);\n\n // Does the sector’s inner ring (or point) have rounded corners?\n else if (rc0 > epsilon) {\n t0 = cornerTangents(x10, y10, x11, y11, r0, -rc0, cw);\n t1 = cornerTangents(x01, y01, x00, y00, r0, -rc0, cw);\n\n context.lineTo(t0.cx + t0.x01, t0.cy + t0.y01);\n\n // Have the corners merged?\n if (rc0 < rc) context.arc(t0.cx, t0.cy, rc0, atan2(t0.y01, t0.x01), atan2(t1.y01, t1.x01), !cw);\n\n // Otherwise, draw the two corners and the ring.\n else {\n context.arc(t0.cx, t0.cy, rc0, atan2(t0.y01, t0.x01), atan2(t0.y11, t0.x11), !cw);\n context.arc(0, 0, r0, atan2(t0.cy + t0.y11, t0.cx + t0.x11), atan2(t1.cy + t1.y11, t1.cx + t1.x11), cw);\n context.arc(t1.cx, t1.cy, rc0, atan2(t1.y11, t1.x11), atan2(t1.y01, t1.x01), !cw);\n }\n }\n\n // Or is the inner ring just a circular arc?\n else context.arc(0, 0, r0, a10, a00, cw);\n }\n\n context.closePath();\n\n if (buffer) return context = null, buffer + \"\" || null;\n }\n\n arc.centroid = function() {\n var r = (+innerRadius.apply(this, arguments) + +outerRadius.apply(this, arguments)) / 2,\n a = (+startAngle.apply(this, arguments) + +endAngle.apply(this, arguments)) / 2 - pi / 2;\n return [cos(a) * r, sin(a) * r];\n };\n\n arc.innerRadius = function(_) {\n return arguments.length ? (innerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : innerRadius;\n };\n\n arc.outerRadius = function(_) {\n return arguments.length ? (outerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : outerRadius;\n };\n\n arc.cornerRadius = function(_) {\n return arguments.length ? (cornerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : cornerRadius;\n };\n\n arc.padRadius = function(_) {\n return arguments.length ? (padRadius = _ == null ? null : typeof _ === \"function\" ? _ : constant(+_), arc) : padRadius;\n };\n\n arc.startAngle = function(_) {\n return arguments.length ? (startAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : startAngle;\n };\n\n arc.endAngle = function(_) {\n return arguments.length ? (endAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : endAngle;\n };\n\n arc.padAngle = function(_) {\n return arguments.length ? (padAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : padAngle;\n };\n\n arc.context = function(_) {\n return arguments.length ? ((context = _ == null ? null : _), arc) : context;\n };\n\n return arc;\n}\n","function Linear(context) {\n this._context = context;\n}\n\nLinear.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; // proceed\n default: this._context.lineTo(x, y); break;\n }\n }\n};\n\nexport default function(context) {\n return new Linear(context);\n}\n","export function x(p) {\n return p[0];\n}\n\nexport function y(p) {\n return p[1];\n}\n","import {path} from \"d3-path\";\nimport constant from \"./constant\";\nimport curveLinear from \"./curve/linear\";\nimport {x as pointX, y as pointY} from \"./point\";\n\nexport default function() {\n var x = pointX,\n y = pointY,\n defined = constant(true),\n context = null,\n curve = curveLinear,\n output = null;\n\n function line(data) {\n var i,\n n = data.length,\n d,\n defined0 = false,\n buffer;\n\n if (context == null) output = curve(buffer = path());\n\n for (i = 0; i <= n; ++i) {\n if (!(i < n && defined(d = data[i], i, data)) === defined0) {\n if (defined0 = !defined0) output.lineStart();\n else output.lineEnd();\n }\n if (defined0) output.point(+x(d, i, data), +y(d, i, data));\n }\n\n if (buffer) return output = null, buffer + \"\" || null;\n }\n\n line.x = function(_) {\n return arguments.length ? (x = typeof _ === \"function\" ? _ : constant(+_), line) : x;\n };\n\n line.y = function(_) {\n return arguments.length ? (y = typeof _ === \"function\" ? _ : constant(+_), line) : y;\n };\n\n line.defined = function(_) {\n return arguments.length ? (defined = typeof _ === \"function\" ? _ : constant(!!_), line) : defined;\n };\n\n line.curve = function(_) {\n return arguments.length ? (curve = _, context != null && (output = curve(context)), line) : curve;\n };\n\n line.context = function(_) {\n return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), line) : context;\n };\n\n return line;\n}\n","import {path} from \"d3-path\";\nimport constant from \"./constant\";\nimport curveLinear from \"./curve/linear\";\nimport line from \"./line\";\nimport {x as pointX, y as pointY} from \"./point\";\n\nexport default function() {\n var x0 = pointX,\n x1 = null,\n y0 = constant(0),\n y1 = pointY,\n defined = constant(true),\n context = null,\n curve = curveLinear,\n output = null;\n\n function area(data) {\n var i,\n j,\n k,\n n = data.length,\n d,\n defined0 = false,\n buffer,\n x0z = new Array(n),\n y0z = new Array(n);\n\n if (context == null) output = curve(buffer = path());\n\n for (i = 0; i <= n; ++i) {\n if (!(i < n && defined(d = data[i], i, data)) === defined0) {\n if (defined0 = !defined0) {\n j = i;\n output.areaStart();\n output.lineStart();\n } else {\n output.lineEnd();\n output.lineStart();\n for (k = i - 1; k >= j; --k) {\n output.point(x0z[k], y0z[k]);\n }\n output.lineEnd();\n output.areaEnd();\n }\n }\n if (defined0) {\n x0z[i] = +x0(d, i, data), y0z[i] = +y0(d, i, data);\n output.point(x1 ? +x1(d, i, data) : x0z[i], y1 ? +y1(d, i, data) : y0z[i]);\n }\n }\n\n if (buffer) return output = null, buffer + \"\" || null;\n }\n\n function arealine() {\n return line().defined(defined).curve(curve).context(context);\n }\n\n area.x = function(_) {\n return arguments.length ? (x0 = typeof _ === \"function\" ? _ : constant(+_), x1 = null, area) : x0;\n };\n\n area.x0 = function(_) {\n return arguments.length ? (x0 = typeof _ === \"function\" ? _ : constant(+_), area) : x0;\n };\n\n area.x1 = function(_) {\n return arguments.length ? (x1 = _ == null ? null : typeof _ === \"function\" ? _ : constant(+_), area) : x1;\n };\n\n area.y = function(_) {\n return arguments.length ? (y0 = typeof _ === \"function\" ? _ : constant(+_), y1 = null, area) : y0;\n };\n\n area.y0 = function(_) {\n return arguments.length ? (y0 = typeof _ === \"function\" ? _ : constant(+_), area) : y0;\n };\n\n area.y1 = function(_) {\n return arguments.length ? (y1 = _ == null ? null : typeof _ === \"function\" ? _ : constant(+_), area) : y1;\n };\n\n area.lineX0 =\n area.lineY0 = function() {\n return arealine().x(x0).y(y0);\n };\n\n area.lineY1 = function() {\n return arealine().x(x0).y(y1);\n };\n\n area.lineX1 = function() {\n return arealine().x(x1).y(y0);\n };\n\n area.defined = function(_) {\n return arguments.length ? (defined = typeof _ === \"function\" ? _ : constant(!!_), area) : defined;\n };\n\n area.curve = function(_) {\n return arguments.length ? (curve = _, context != null && (output = curve(context)), area) : curve;\n };\n\n area.context = function(_) {\n return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), area) : context;\n };\n\n return area;\n}\n","export default function(a, b) {\n return b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN;\n}\n","export default function(d) {\n return d;\n}\n","import curveLinear from \"./linear\";\n\nexport var curveRadialLinear = curveRadial(curveLinear);\n\nfunction Radial(curve) {\n this._curve = curve;\n}\n\nRadial.prototype = {\n areaStart: function() {\n this._curve.areaStart();\n },\n areaEnd: function() {\n this._curve.areaEnd();\n },\n lineStart: function() {\n this._curve.lineStart();\n },\n lineEnd: function() {\n this._curve.lineEnd();\n },\n point: function(a, r) {\n this._curve.point(r * Math.sin(a), r * -Math.cos(a));\n }\n};\n\nexport default function curveRadial(curve) {\n\n function radial(context) {\n return new Radial(curve(context));\n }\n\n radial._curve = curve;\n\n return radial;\n}\n","import curveRadial, {curveRadialLinear} from \"./curve/radial\";\nimport line from \"./line\";\n\nexport function lineRadial(l) {\n var c = l.curve;\n\n l.angle = l.x, delete l.x;\n l.radius = l.y, delete l.y;\n\n l.curve = function(_) {\n return arguments.length ? c(curveRadial(_)) : c()._curve;\n };\n\n return l;\n}\n\nexport default function() {\n return lineRadial(line().curve(curveRadialLinear));\n}\n","export var slice = Array.prototype.slice;\n","import {pi, tau} from \"../math\";\n\nexport default {\n draw: function(context, size) {\n var r = Math.sqrt(size / pi);\n context.moveTo(r, 0);\n context.arc(0, 0, r, 0, tau);\n }\n};\n","export default {\n draw: function(context, size) {\n var r = Math.sqrt(size / 5) / 2;\n context.moveTo(-3 * r, -r);\n context.lineTo(-r, -r);\n context.lineTo(-r, -3 * r);\n context.lineTo(r, -3 * r);\n context.lineTo(r, -r);\n context.lineTo(3 * r, -r);\n context.lineTo(3 * r, r);\n context.lineTo(r, r);\n context.lineTo(r, 3 * r);\n context.lineTo(-r, 3 * r);\n context.lineTo(-r, r);\n context.lineTo(-3 * r, r);\n context.closePath();\n }\n};\n","var tan30 = Math.sqrt(1 / 3),\n tan30_2 = tan30 * 2;\n\nexport default {\n draw: function(context, size) {\n var y = Math.sqrt(size / tan30_2),\n x = y * tan30;\n context.moveTo(0, -y);\n context.lineTo(x, 0);\n context.lineTo(0, y);\n context.lineTo(-x, 0);\n context.closePath();\n }\n};\n","import {pi, tau} from \"../math\";\n\nvar ka = 0.89081309152928522810,\n kr = Math.sin(pi / 10) / Math.sin(7 * pi / 10),\n kx = Math.sin(tau / 10) * kr,\n ky = -Math.cos(tau / 10) * kr;\n\nexport default {\n draw: function(context, size) {\n var r = Math.sqrt(size * ka),\n x = kx * r,\n y = ky * r;\n context.moveTo(0, -r);\n context.lineTo(x, y);\n for (var i = 1; i < 5; ++i) {\n var a = tau * i / 5,\n c = Math.cos(a),\n s = Math.sin(a);\n context.lineTo(s * r, -c * r);\n context.lineTo(c * x - s * y, s * x + c * y);\n }\n context.closePath();\n }\n};\n","export default {\n draw: function(context, size) {\n var w = Math.sqrt(size),\n x = -w / 2;\n context.rect(x, x, w, w);\n }\n};\n","var sqrt3 = Math.sqrt(3);\n\nexport default {\n draw: function(context, size) {\n var y = -Math.sqrt(size / (sqrt3 * 3));\n context.moveTo(0, y * 2);\n context.lineTo(-sqrt3 * y, -y);\n context.lineTo(sqrt3 * y, -y);\n context.closePath();\n }\n};\n","var c = -0.5,\n s = Math.sqrt(3) / 2,\n k = 1 / Math.sqrt(12),\n a = (k / 2 + 1) * 3;\n\nexport default {\n draw: function(context, size) {\n var r = Math.sqrt(size / a),\n x0 = r / 2,\n y0 = r * k,\n x1 = x0,\n y1 = r * k + r,\n x2 = -x1,\n y2 = y1;\n context.moveTo(x0, y0);\n context.lineTo(x1, y1);\n context.lineTo(x2, y2);\n context.lineTo(c * x0 - s * y0, s * x0 + c * y0);\n context.lineTo(c * x1 - s * y1, s * x1 + c * y1);\n context.lineTo(c * x2 - s * y2, s * x2 + c * y2);\n context.lineTo(c * x0 + s * y0, c * y0 - s * x0);\n context.lineTo(c * x1 + s * y1, c * y1 - s * x1);\n context.lineTo(c * x2 + s * y2, c * y2 - s * x2);\n context.closePath();\n }\n};\n","export default function() {}\n","export function point(that, x, y) {\n that._context.bezierCurveTo(\n (2 * that._x0 + that._x1) / 3,\n (2 * that._y0 + that._y1) / 3,\n (that._x0 + 2 * that._x1) / 3,\n (that._y0 + 2 * that._y1) / 3,\n (that._x0 + 4 * that._x1 + x) / 6,\n (that._y0 + 4 * that._y1 + y) / 6\n );\n}\n\nexport function Basis(context) {\n this._context = context;\n}\n\nBasis.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 =\n this._y0 = this._y1 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 3: point(this, this._x1, this._y1); // proceed\n case 2: this._context.lineTo(this._x1, this._y1); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; this._context.lineTo((5 * this._x0 + this._x1) / 6, (5 * this._y0 + this._y1) / 6); // proceed\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n }\n};\n\nexport default function(context) {\n return new Basis(context);\n}\n","import noop from \"../noop\";\nimport {point} from \"./basis\";\n\nfunction BasisClosed(context) {\n this._context = context;\n}\n\nBasisClosed.prototype = {\n areaStart: noop,\n areaEnd: noop,\n lineStart: function() {\n this._x0 = this._x1 = this._x2 = this._x3 = this._x4 =\n this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 1: {\n this._context.moveTo(this._x2, this._y2);\n this._context.closePath();\n break;\n }\n case 2: {\n this._context.moveTo((this._x2 + 2 * this._x3) / 3, (this._y2 + 2 * this._y3) / 3);\n this._context.lineTo((this._x3 + 2 * this._x2) / 3, (this._y3 + 2 * this._y2) / 3);\n this._context.closePath();\n break;\n }\n case 3: {\n this.point(this._x2, this._y2);\n this.point(this._x3, this._y3);\n this.point(this._x4, this._y4);\n break;\n }\n }\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._x2 = x, this._y2 = y; break;\n case 1: this._point = 2; this._x3 = x, this._y3 = y; break;\n case 2: this._point = 3; this._x4 = x, this._y4 = y; this._context.moveTo((this._x0 + 4 * this._x1 + x) / 6, (this._y0 + 4 * this._y1 + y) / 6); break;\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n }\n};\n\nexport default function(context) {\n return new BasisClosed(context);\n}\n","import {point} from \"./basis\";\n\nfunction BasisOpen(context) {\n this._context = context;\n}\n\nBasisOpen.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 =\n this._y0 = this._y1 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; var x0 = (this._x0 + 4 * this._x1 + x) / 6, y0 = (this._y0 + 4 * this._y1 + y) / 6; this._line ? this._context.lineTo(x0, y0) : this._context.moveTo(x0, y0); break;\n case 3: this._point = 4; // proceed\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n }\n};\n\nexport default function(context) {\n return new BasisOpen(context);\n}\n","import {Basis} from \"./basis\";\n\nfunction Bundle(context, beta) {\n this._basis = new Basis(context);\n this._beta = beta;\n}\n\nBundle.prototype = {\n lineStart: function() {\n this._x = [];\n this._y = [];\n this._basis.lineStart();\n },\n lineEnd: function() {\n var x = this._x,\n y = this._y,\n j = x.length - 1;\n\n if (j > 0) {\n var x0 = x[0],\n y0 = y[0],\n dx = x[j] - x0,\n dy = y[j] - y0,\n i = -1,\n t;\n\n while (++i <= j) {\n t = i / j;\n this._basis.point(\n this._beta * x[i] + (1 - this._beta) * (x0 + t * dx),\n this._beta * y[i] + (1 - this._beta) * (y0 + t * dy)\n );\n }\n }\n\n this._x = this._y = null;\n this._basis.lineEnd();\n },\n point: function(x, y) {\n this._x.push(+x);\n this._y.push(+y);\n }\n};\n\nexport default (function custom(beta) {\n\n function bundle(context) {\n return beta === 1 ? new Basis(context) : new Bundle(context, beta);\n }\n\n bundle.beta = function(beta) {\n return custom(+beta);\n };\n\n return bundle;\n})(0.85);\n","export function point(that, x, y) {\n that._context.bezierCurveTo(\n that._x1 + that._k * (that._x2 - that._x0),\n that._y1 + that._k * (that._y2 - that._y0),\n that._x2 + that._k * (that._x1 - x),\n that._y2 + that._k * (that._y1 - y),\n that._x2,\n that._y2\n );\n}\n\nexport function Cardinal(context, tension) {\n this._context = context;\n this._k = (1 - tension) / 6;\n}\n\nCardinal.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 2: this._context.lineTo(this._x2, this._y2); break;\n case 3: point(this, this._x1, this._y1); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; this._x1 = x, this._y1 = y; break;\n case 2: this._point = 3; // proceed\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(tension) {\n\n function cardinal(context) {\n return new Cardinal(context, tension);\n }\n\n cardinal.tension = function(tension) {\n return custom(+tension);\n };\n\n return cardinal;\n})(0);\n","import noop from \"../noop\";\nimport {point} from \"./cardinal\";\n\nexport function CardinalClosed(context, tension) {\n this._context = context;\n this._k = (1 - tension) / 6;\n}\n\nCardinalClosed.prototype = {\n areaStart: noop,\n areaEnd: noop,\n lineStart: function() {\n this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = this._x5 =\n this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = this._y5 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 1: {\n this._context.moveTo(this._x3, this._y3);\n this._context.closePath();\n break;\n }\n case 2: {\n this._context.lineTo(this._x3, this._y3);\n this._context.closePath();\n break;\n }\n case 3: {\n this.point(this._x3, this._y3);\n this.point(this._x4, this._y4);\n this.point(this._x5, this._y5);\n break;\n }\n }\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._x3 = x, this._y3 = y; break;\n case 1: this._point = 2; this._context.moveTo(this._x4 = x, this._y4 = y); break;\n case 2: this._point = 3; this._x5 = x, this._y5 = y; break;\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(tension) {\n\n function cardinal(context) {\n return new CardinalClosed(context, tension);\n }\n\n cardinal.tension = function(tension) {\n return custom(+tension);\n };\n\n return cardinal;\n})(0);\n","import {point} from \"./cardinal\";\n\nexport function CardinalOpen(context, tension) {\n this._context = context;\n this._k = (1 - tension) / 6;\n}\n\nCardinalOpen.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; this._line ? this._context.lineTo(this._x2, this._y2) : this._context.moveTo(this._x2, this._y2); break;\n case 3: this._point = 4; // proceed\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(tension) {\n\n function cardinal(context) {\n return new CardinalOpen(context, tension);\n }\n\n cardinal.tension = function(tension) {\n return custom(+tension);\n };\n\n return cardinal;\n})(0);\n","import {epsilon} from \"../math\";\nimport {Cardinal} from \"./cardinal\";\n\nexport function point(that, x, y) {\n var x1 = that._x1,\n y1 = that._y1,\n x2 = that._x2,\n y2 = that._y2;\n\n if (that._l01_a > epsilon) {\n var a = 2 * that._l01_2a + 3 * that._l01_a * that._l12_a + that._l12_2a,\n n = 3 * that._l01_a * (that._l01_a + that._l12_a);\n x1 = (x1 * a - that._x0 * that._l12_2a + that._x2 * that._l01_2a) / n;\n y1 = (y1 * a - that._y0 * that._l12_2a + that._y2 * that._l01_2a) / n;\n }\n\n if (that._l23_a > epsilon) {\n var b = 2 * that._l23_2a + 3 * that._l23_a * that._l12_a + that._l12_2a,\n m = 3 * that._l23_a * (that._l23_a + that._l12_a);\n x2 = (x2 * b + that._x1 * that._l23_2a - x * that._l12_2a) / m;\n y2 = (y2 * b + that._y1 * that._l23_2a - y * that._l12_2a) / m;\n }\n\n that._context.bezierCurveTo(x1, y1, x2, y2, that._x2, that._y2);\n}\n\nfunction CatmullRom(context, alpha) {\n this._context = context;\n this._alpha = alpha;\n}\n\nCatmullRom.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._l01_a = this._l12_a = this._l23_a =\n this._l01_2a = this._l12_2a = this._l23_2a =\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 2: this._context.lineTo(this._x2, this._y2); break;\n case 3: this.point(this._x2, this._y2); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n\n if (this._point) {\n var x23 = this._x2 - x,\n y23 = this._y2 - y;\n this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));\n }\n\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; // proceed\n default: point(this, x, y); break;\n }\n\n this._l01_a = this._l12_a, this._l12_a = this._l23_a;\n this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(alpha) {\n\n function catmullRom(context) {\n return alpha ? new CatmullRom(context, alpha) : new Cardinal(context, 0);\n }\n\n catmullRom.alpha = function(alpha) {\n return custom(+alpha);\n };\n\n return catmullRom;\n})(0.5);\n","import {CardinalClosed} from \"./cardinalClosed\";\nimport noop from \"../noop\";\nimport {point} from \"./catmullRom\";\n\nfunction CatmullRomClosed(context, alpha) {\n this._context = context;\n this._alpha = alpha;\n}\n\nCatmullRomClosed.prototype = {\n areaStart: noop,\n areaEnd: noop,\n lineStart: function() {\n this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = this._x5 =\n this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = this._y5 = NaN;\n this._l01_a = this._l12_a = this._l23_a =\n this._l01_2a = this._l12_2a = this._l23_2a =\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 1: {\n this._context.moveTo(this._x3, this._y3);\n this._context.closePath();\n break;\n }\n case 2: {\n this._context.lineTo(this._x3, this._y3);\n this._context.closePath();\n break;\n }\n case 3: {\n this.point(this._x3, this._y3);\n this.point(this._x4, this._y4);\n this.point(this._x5, this._y5);\n break;\n }\n }\n },\n point: function(x, y) {\n x = +x, y = +y;\n\n if (this._point) {\n var x23 = this._x2 - x,\n y23 = this._y2 - y;\n this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));\n }\n\n switch (this._point) {\n case 0: this._point = 1; this._x3 = x, this._y3 = y; break;\n case 1: this._point = 2; this._context.moveTo(this._x4 = x, this._y4 = y); break;\n case 2: this._point = 3; this._x5 = x, this._y5 = y; break;\n default: point(this, x, y); break;\n }\n\n this._l01_a = this._l12_a, this._l12_a = this._l23_a;\n this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(alpha) {\n\n function catmullRom(context) {\n return alpha ? new CatmullRomClosed(context, alpha) : new CardinalClosed(context, 0);\n }\n\n catmullRom.alpha = function(alpha) {\n return custom(+alpha);\n };\n\n return catmullRom;\n})(0.5);\n","import {CardinalOpen} from \"./cardinalOpen\";\nimport {point} from \"./catmullRom\";\n\nfunction CatmullRomOpen(context, alpha) {\n this._context = context;\n this._alpha = alpha;\n}\n\nCatmullRomOpen.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._l01_a = this._l12_a = this._l23_a =\n this._l01_2a = this._l12_2a = this._l23_2a =\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n\n if (this._point) {\n var x23 = this._x2 - x,\n y23 = this._y2 - y;\n this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));\n }\n\n switch (this._point) {\n case 0: this._point = 1; break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; this._line ? this._context.lineTo(this._x2, this._y2) : this._context.moveTo(this._x2, this._y2); break;\n case 3: this._point = 4; // proceed\n default: point(this, x, y); break;\n }\n\n this._l01_a = this._l12_a, this._l12_a = this._l23_a;\n this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(alpha) {\n\n function catmullRom(context) {\n return alpha ? new CatmullRomOpen(context, alpha) : new CardinalOpen(context, 0);\n }\n\n catmullRom.alpha = function(alpha) {\n return custom(+alpha);\n };\n\n return catmullRom;\n})(0.5);\n","import noop from \"../noop\";\n\nfunction LinearClosed(context) {\n this._context = context;\n}\n\nLinearClosed.prototype = {\n areaStart: noop,\n areaEnd: noop,\n lineStart: function() {\n this._point = 0;\n },\n lineEnd: function() {\n if (this._point) this._context.closePath();\n },\n point: function(x, y) {\n x = +x, y = +y;\n if (this._point) this._context.lineTo(x, y);\n else this._point = 1, this._context.moveTo(x, y);\n }\n};\n\nexport default function(context) {\n return new LinearClosed(context);\n}\n","function sign(x) {\n return x < 0 ? -1 : 1;\n}\n\n// Calculate the slopes of the tangents (Hermite-type interpolation) based on\n// the following paper: Steffen, M. 1990. A Simple Method for Monotonic\n// Interpolation in One Dimension. Astronomy and Astrophysics, Vol. 239, NO.\n// NOV(II), P. 443, 1990.\nfunction slope3(that, x2, y2) {\n var h0 = that._x1 - that._x0,\n h1 = x2 - that._x1,\n s0 = (that._y1 - that._y0) / (h0 || h1 < 0 && -0),\n s1 = (y2 - that._y1) / (h1 || h0 < 0 && -0),\n p = (s0 * h1 + s1 * h0) / (h0 + h1);\n return (sign(s0) + sign(s1)) * Math.min(Math.abs(s0), Math.abs(s1), 0.5 * Math.abs(p)) || 0;\n}\n\n// Calculate a one-sided slope.\nfunction slope2(that, t) {\n var h = that._x1 - that._x0;\n return h ? (3 * (that._y1 - that._y0) / h - t) / 2 : t;\n}\n\n// According to https://en.wikipedia.org/wiki/Cubic_Hermite_spline#Representations\n// \"you can express cubic Hermite interpolation in terms of cubic Bézier curves\n// with respect to the four values p0, p0 + m0 / 3, p1 - m1 / 3, p1\".\nfunction point(that, t0, t1) {\n var x0 = that._x0,\n y0 = that._y0,\n x1 = that._x1,\n y1 = that._y1,\n dx = (x1 - x0) / 3;\n that._context.bezierCurveTo(x0 + dx, y0 + dx * t0, x1 - dx, y1 - dx * t1, x1, y1);\n}\n\nfunction MonotoneX(context) {\n this._context = context;\n}\n\nMonotoneX.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 =\n this._y0 = this._y1 =\n this._t0 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 2: this._context.lineTo(this._x1, this._y1); break;\n case 3: point(this, this._t0, slope2(this, this._t0)); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n var t1 = NaN;\n\n x = +x, y = +y;\n if (x === this._x1 && y === this._y1) return; // Ignore coincident points.\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; point(this, slope2(this, t1 = slope3(this, x, y)), t1); break;\n default: point(this, this._t0, t1 = slope3(this, x, y)); break;\n }\n\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n this._t0 = t1;\n }\n}\n\nfunction MonotoneY(context) {\n this._context = new ReflectContext(context);\n}\n\n(MonotoneY.prototype = Object.create(MonotoneX.prototype)).point = function(x, y) {\n MonotoneX.prototype.point.call(this, y, x);\n};\n\nfunction ReflectContext(context) {\n this._context = context;\n}\n\nReflectContext.prototype = {\n moveTo: function(x, y) { this._context.moveTo(y, x); },\n closePath: function() { this._context.closePath(); },\n lineTo: function(x, y) { this._context.lineTo(y, x); },\n bezierCurveTo: function(x1, y1, x2, y2, x, y) { this._context.bezierCurveTo(y1, x1, y2, x2, y, x); }\n};\n\nexport function monotoneX(context) {\n return new MonotoneX(context);\n}\n\nexport function monotoneY(context) {\n return new MonotoneY(context);\n}\n","function Natural(context) {\n this._context = context;\n}\n\nNatural.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x = [];\n this._y = [];\n },\n lineEnd: function() {\n var x = this._x,\n y = this._y,\n n = x.length;\n\n if (n) {\n this._line ? this._context.lineTo(x[0], y[0]) : this._context.moveTo(x[0], y[0]);\n if (n === 2) {\n this._context.lineTo(x[1], y[1]);\n } else {\n var px = controlPoints(x),\n py = controlPoints(y);\n for (var i0 = 0, i1 = 1; i1 < n; ++i0, ++i1) {\n this._context.bezierCurveTo(px[0][i0], py[0][i0], px[1][i0], py[1][i0], x[i1], y[i1]);\n }\n }\n }\n\n if (this._line || (this._line !== 0 && n === 1)) this._context.closePath();\n this._line = 1 - this._line;\n this._x = this._y = null;\n },\n point: function(x, y) {\n this._x.push(+x);\n this._y.push(+y);\n }\n};\n\n// See https://www.particleincell.com/2012/bezier-splines/ for derivation.\nfunction controlPoints(x) {\n var i,\n n = x.length - 1,\n m,\n a = new Array(n),\n b = new Array(n),\n r = new Array(n);\n a[0] = 0, b[0] = 2, r[0] = x[0] + 2 * x[1];\n for (i = 1; i < n - 1; ++i) a[i] = 1, b[i] = 4, r[i] = 4 * x[i] + 2 * x[i + 1];\n a[n - 1] = 2, b[n - 1] = 7, r[n - 1] = 8 * x[n - 1] + x[n];\n for (i = 1; i < n; ++i) m = a[i] / b[i - 1], b[i] -= m, r[i] -= m * r[i - 1];\n a[n - 1] = r[n - 1] / b[n - 1];\n for (i = n - 2; i >= 0; --i) a[i] = (r[i] - a[i + 1]) / b[i];\n b[n - 1] = (x[n] + a[n - 1]) / 2;\n for (i = 0; i < n - 1; ++i) b[i] = 2 * x[i + 1] - a[i + 1];\n return [a, b];\n}\n\nexport default function(context) {\n return new Natural(context);\n}\n","function Step(context, t) {\n this._context = context;\n this._t = t;\n}\n\nStep.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x = this._y = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n if (0 < this._t && this._t < 1 && this._point === 2) this._context.lineTo(this._x, this._y);\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n if (this._line >= 0) this._t = 1 - this._t, this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; // proceed\n default: {\n if (this._t <= 0) {\n this._context.lineTo(this._x, y);\n this._context.lineTo(x, y);\n } else {\n var x1 = this._x * (1 - this._t) + x * this._t;\n this._context.lineTo(x1, this._y);\n this._context.lineTo(x1, y);\n }\n break;\n }\n }\n this._x = x, this._y = y;\n }\n};\n\nexport default function(context) {\n return new Step(context, 0.5);\n}\n\nexport function stepBefore(context) {\n return new Step(context, 0);\n}\n\nexport function stepAfter(context) {\n return new Step(context, 1);\n}\n","export default function(series, order) {\n if (!((n = series.length) > 1)) return;\n for (var i = 1, j, s0, s1 = series[order[0]], n, m = s1.length; i < n; ++i) {\n s0 = s1, s1 = series[order[i]];\n for (j = 0; j < m; ++j) {\n s1[j][1] += s1[j][0] = isNaN(s0[j][1]) ? s0[j][0] : s0[j][1];\n }\n }\n}\n","export default function(series) {\n var n = series.length, o = new Array(n);\n while (--n >= 0) o[n] = n;\n return o;\n}\n","import {slice} from \"./array\";\nimport constant from \"./constant\";\nimport offsetNone from \"./offset/none\";\nimport orderNone from \"./order/none\";\n\nfunction stackValue(d, key) {\n return d[key];\n}\n\nexport default function() {\n var keys = constant([]),\n order = orderNone,\n offset = offsetNone,\n value = stackValue;\n\n function stack(data) {\n var kz = keys.apply(this, arguments),\n i,\n m = data.length,\n n = kz.length,\n sz = new Array(n),\n oz;\n\n for (i = 0; i < n; ++i) {\n for (var ki = kz[i], si = sz[i] = new Array(m), j = 0, sij; j < m; ++j) {\n si[j] = sij = [0, +value(data[j], ki, j, data)];\n sij.data = data[j];\n }\n si.key = ki;\n }\n\n for (i = 0, oz = order(sz); i < n; ++i) {\n sz[oz[i]].index = i;\n }\n\n offset(sz, oz);\n return sz;\n }\n\n stack.keys = function(_) {\n return arguments.length ? (keys = typeof _ === \"function\" ? _ : constant(slice.call(_)), stack) : keys;\n };\n\n stack.value = function(_) {\n return arguments.length ? (value = typeof _ === \"function\" ? _ : constant(+_), stack) : value;\n };\n\n stack.order = function(_) {\n return arguments.length ? (order = _ == null ? orderNone : typeof _ === \"function\" ? _ : constant(slice.call(_)), stack) : order;\n };\n\n stack.offset = function(_) {\n return arguments.length ? (offset = _ == null ? offsetNone : _, stack) : offset;\n };\n\n return stack;\n}\n","import none from \"./none\";\n\nexport default function(series) {\n var sums = series.map(sum);\n return none(series).sort(function(a, b) { return sums[a] - sums[b]; });\n}\n\nexport function sum(series) {\n var s = 0, i = -1, n = series.length, v;\n while (++i < n) if (v = +series[i][1]) s += v;\n return s;\n}\n","export function cubicIn(t) {\n return t * t * t;\n}\n\nexport function cubicOut(t) {\n return --t * t * t + 1;\n}\n\nexport function cubicInOut(t) {\n return ((t *= 2) <= 1 ? t * t * t : (t -= 2) * t * t + 2) / 2;\n}\n","var exponent = 3;\n\nexport var polyIn = (function custom(e) {\n e = +e;\n\n function polyIn(t) {\n return Math.pow(t, e);\n }\n\n polyIn.exponent = custom;\n\n return polyIn;\n})(exponent);\n\nexport var polyOut = (function custom(e) {\n e = +e;\n\n function polyOut(t) {\n return 1 - Math.pow(1 - t, e);\n }\n\n polyOut.exponent = custom;\n\n return polyOut;\n})(exponent);\n\nexport var polyInOut = (function custom(e) {\n e = +e;\n\n function polyInOut(t) {\n return ((t *= 2) <= 1 ? Math.pow(t, e) : 2 - Math.pow(2 - t, e)) / 2;\n }\n\n polyInOut.exponent = custom;\n\n return polyInOut;\n})(exponent);\n","var pi = Math.PI,\n halfPi = pi / 2;\n\nexport function sinIn(t) {\n return 1 - Math.cos(t * halfPi);\n}\n\nexport function sinOut(t) {\n return Math.sin(t * halfPi);\n}\n\nexport function sinInOut(t) {\n return (1 - Math.cos(pi * t)) / 2;\n}\n","var b1 = 4 / 11,\n b2 = 6 / 11,\n b3 = 8 / 11,\n b4 = 3 / 4,\n b5 = 9 / 11,\n b6 = 10 / 11,\n b7 = 15 / 16,\n b8 = 21 / 22,\n b9 = 63 / 64,\n b0 = 1 / b1 / b1;\n\nexport function bounceIn(t) {\n return 1 - bounceOut(1 - t);\n}\n\nexport function bounceOut(t) {\n return (t = +t) < b1 ? b0 * t * t : t < b3 ? b0 * (t -= b2) * t + b4 : t < b6 ? b0 * (t -= b5) * t + b7 : b0 * (t -= b8) * t + b9;\n}\n\nexport function bounceInOut(t) {\n return ((t *= 2) <= 1 ? 1 - bounceOut(1 - t) : bounceOut(t - 1) + 1) / 2;\n}\n","var overshoot = 1.70158;\n\nexport var backIn = (function custom(s) {\n s = +s;\n\n function backIn(t) {\n return t * t * ((s + 1) * t - s);\n }\n\n backIn.overshoot = custom;\n\n return backIn;\n})(overshoot);\n\nexport var backOut = (function custom(s) {\n s = +s;\n\n function backOut(t) {\n return --t * t * ((s + 1) * t + s) + 1;\n }\n\n backOut.overshoot = custom;\n\n return backOut;\n})(overshoot);\n\nexport var backInOut = (function custom(s) {\n s = +s;\n\n function backInOut(t) {\n return ((t *= 2) < 1 ? t * t * ((s + 1) * t - s) : (t -= 2) * t * ((s + 1) * t + s) + 2) / 2;\n }\n\n backInOut.overshoot = custom;\n\n return backInOut;\n})(overshoot);\n","var tau = 2 * Math.PI,\n amplitude = 1,\n period = 0.3;\n\nexport var elasticIn = (function custom(a, p) {\n var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau);\n\n function elasticIn(t) {\n return a * Math.pow(2, 10 * --t) * Math.sin((s - t) / p);\n }\n\n elasticIn.amplitude = function(a) { return custom(a, p * tau); };\n elasticIn.period = function(p) { return custom(a, p); };\n\n return elasticIn;\n})(amplitude, period);\n\nexport var elasticOut = (function custom(a, p) {\n var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau);\n\n function elasticOut(t) {\n return 1 - a * Math.pow(2, -10 * (t = +t)) * Math.sin((t + s) / p);\n }\n\n elasticOut.amplitude = function(a) { return custom(a, p * tau); };\n elasticOut.period = function(p) { return custom(a, p); };\n\n return elasticOut;\n})(amplitude, period);\n\nexport var elasticInOut = (function custom(a, p) {\n var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau);\n\n function elasticInOut(t) {\n return ((t = t * 2 - 1) < 0\n ? a * Math.pow(2, 10 * t) * Math.sin((s - t) / p)\n : 2 - a * Math.pow(2, -10 * t) * Math.sin((s + t) / p)) / 2;\n }\n\n elasticInOut.amplitude = function(a) { return custom(a, p * tau); };\n elasticInOut.period = function(p) { return custom(a, p); };\n\n return elasticInOut;\n})(amplitude, period);\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","export function x(d) {\n return d[0];\n}\n\nexport function y(d) {\n return d[1];\n}\n","function RedBlackTree() {\n this._ = null; // root node\n}\n\nexport function RedBlackNode(node) {\n node.U = // parent node\n node.C = // color - true for red, false for black\n node.L = // left node\n node.R = // right node\n node.P = // previous node\n node.N = null; // next node\n}\n\nRedBlackTree.prototype = {\n constructor: RedBlackTree,\n\n insert: function(after, node) {\n var parent, grandpa, uncle;\n\n if (after) {\n node.P = after;\n node.N = after.N;\n if (after.N) after.N.P = node;\n after.N = node;\n if (after.R) {\n after = after.R;\n while (after.L) after = after.L;\n after.L = node;\n } else {\n after.R = node;\n }\n parent = after;\n } else if (this._) {\n after = RedBlackFirst(this._);\n node.P = null;\n node.N = after;\n after.P = after.L = node;\n parent = after;\n } else {\n node.P = node.N = null;\n this._ = node;\n parent = null;\n }\n node.L = node.R = null;\n node.U = parent;\n node.C = true;\n\n after = node;\n while (parent && parent.C) {\n grandpa = parent.U;\n if (parent === grandpa.L) {\n uncle = grandpa.R;\n if (uncle && uncle.C) {\n parent.C = uncle.C = false;\n grandpa.C = true;\n after = grandpa;\n } else {\n if (after === parent.R) {\n RedBlackRotateLeft(this, parent);\n after = parent;\n parent = after.U;\n }\n parent.C = false;\n grandpa.C = true;\n RedBlackRotateRight(this, grandpa);\n }\n } else {\n uncle = grandpa.L;\n if (uncle && uncle.C) {\n parent.C = uncle.C = false;\n grandpa.C = true;\n after = grandpa;\n } else {\n if (after === parent.L) {\n RedBlackRotateRight(this, parent);\n after = parent;\n parent = after.U;\n }\n parent.C = false;\n grandpa.C = true;\n RedBlackRotateLeft(this, grandpa);\n }\n }\n parent = after.U;\n }\n this._.C = false;\n },\n\n remove: function(node) {\n if (node.N) node.N.P = node.P;\n if (node.P) node.P.N = node.N;\n node.N = node.P = null;\n\n var parent = node.U,\n sibling,\n left = node.L,\n right = node.R,\n next,\n red;\n\n if (!left) next = right;\n else if (!right) next = left;\n else next = RedBlackFirst(right);\n\n if (parent) {\n if (parent.L === node) parent.L = next;\n else parent.R = next;\n } else {\n this._ = next;\n }\n\n if (left && right) {\n red = next.C;\n next.C = node.C;\n next.L = left;\n left.U = next;\n if (next !== right) {\n parent = next.U;\n next.U = node.U;\n node = next.R;\n parent.L = node;\n next.R = right;\n right.U = next;\n } else {\n next.U = parent;\n parent = next;\n node = next.R;\n }\n } else {\n red = node.C;\n node = next;\n }\n\n if (node) node.U = parent;\n if (red) return;\n if (node && node.C) { node.C = false; return; }\n\n do {\n if (node === this._) break;\n if (node === parent.L) {\n sibling = parent.R;\n if (sibling.C) {\n sibling.C = false;\n parent.C = true;\n RedBlackRotateLeft(this, parent);\n sibling = parent.R;\n }\n if ((sibling.L && sibling.L.C)\n || (sibling.R && sibling.R.C)) {\n if (!sibling.R || !sibling.R.C) {\n sibling.L.C = false;\n sibling.C = true;\n RedBlackRotateRight(this, sibling);\n sibling = parent.R;\n }\n sibling.C = parent.C;\n parent.C = sibling.R.C = false;\n RedBlackRotateLeft(this, parent);\n node = this._;\n break;\n }\n } else {\n sibling = parent.L;\n if (sibling.C) {\n sibling.C = false;\n parent.C = true;\n RedBlackRotateRight(this, parent);\n sibling = parent.L;\n }\n if ((sibling.L && sibling.L.C)\n || (sibling.R && sibling.R.C)) {\n if (!sibling.L || !sibling.L.C) {\n sibling.R.C = false;\n sibling.C = true;\n RedBlackRotateLeft(this, sibling);\n sibling = parent.L;\n }\n sibling.C = parent.C;\n parent.C = sibling.L.C = false;\n RedBlackRotateRight(this, parent);\n node = this._;\n break;\n }\n }\n sibling.C = true;\n node = parent;\n parent = parent.U;\n } while (!node.C);\n\n if (node) node.C = false;\n }\n};\n\nfunction RedBlackRotateLeft(tree, node) {\n var p = node,\n q = node.R,\n parent = p.U;\n\n if (parent) {\n if (parent.L === p) parent.L = q;\n else parent.R = q;\n } else {\n tree._ = q;\n }\n\n q.U = parent;\n p.U = q;\n p.R = q.L;\n if (p.R) p.R.U = p;\n q.L = p;\n}\n\nfunction RedBlackRotateRight(tree, node) {\n var p = node,\n q = node.L,\n parent = p.U;\n\n if (parent) {\n if (parent.L === p) parent.L = q;\n else parent.R = q;\n } else {\n tree._ = q;\n }\n\n q.U = parent;\n p.U = q;\n p.L = q.R;\n if (p.L) p.L.U = p;\n q.R = p;\n}\n\nfunction RedBlackFirst(node) {\n while (node.L) node = node.L;\n return node;\n}\n\nexport default RedBlackTree;\n","import {cells, edges, epsilon} from \"./Diagram\";\n\nexport function createEdge(left, right, v0, v1) {\n var edge = [null, null],\n index = edges.push(edge) - 1;\n edge.left = left;\n edge.right = right;\n if (v0) setEdgeEnd(edge, left, right, v0);\n if (v1) setEdgeEnd(edge, right, left, v1);\n cells[left.index].halfedges.push(index);\n cells[right.index].halfedges.push(index);\n return edge;\n}\n\nexport function createBorderEdge(left, v0, v1) {\n var edge = [v0, v1];\n edge.left = left;\n return edge;\n}\n\nexport function setEdgeEnd(edge, left, right, vertex) {\n if (!edge[0] && !edge[1]) {\n edge[0] = vertex;\n edge.left = left;\n edge.right = right;\n } else if (edge.left === right) {\n edge[1] = vertex;\n } else {\n edge[0] = vertex;\n }\n}\n\n// Liang–Barsky line clipping.\nfunction clipEdge(edge, x0, y0, x1, y1) {\n var a = edge[0],\n b = edge[1],\n ax = a[0],\n ay = a[1],\n bx = b[0],\n by = b[1],\n t0 = 0,\n t1 = 1,\n dx = bx - ax,\n dy = by - ay,\n r;\n\n r = x0 - ax;\n if (!dx && r > 0) return;\n r /= dx;\n if (dx < 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n } else if (dx > 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n }\n\n r = x1 - ax;\n if (!dx && r < 0) return;\n r /= dx;\n if (dx < 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n } else if (dx > 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n }\n\n r = y0 - ay;\n if (!dy && r > 0) return;\n r /= dy;\n if (dy < 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n } else if (dy > 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n }\n\n r = y1 - ay;\n if (!dy && r < 0) return;\n r /= dy;\n if (dy < 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n } else if (dy > 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n }\n\n if (!(t0 > 0) && !(t1 < 1)) return true; // TODO Better check?\n\n if (t0 > 0) edge[0] = [ax + t0 * dx, ay + t0 * dy];\n if (t1 < 1) edge[1] = [ax + t1 * dx, ay + t1 * dy];\n return true;\n}\n\nfunction connectEdge(edge, x0, y0, x1, y1) {\n var v1 = edge[1];\n if (v1) return true;\n\n var v0 = edge[0],\n left = edge.left,\n right = edge.right,\n lx = left[0],\n ly = left[1],\n rx = right[0],\n ry = right[1],\n fx = (lx + rx) / 2,\n fy = (ly + ry) / 2,\n fm,\n fb;\n\n if (ry === ly) {\n if (fx < x0 || fx >= x1) return;\n if (lx > rx) {\n if (!v0) v0 = [fx, y0];\n else if (v0[1] >= y1) return;\n v1 = [fx, y1];\n } else {\n if (!v0) v0 = [fx, y1];\n else if (v0[1] < y0) return;\n v1 = [fx, y0];\n }\n } else {\n fm = (lx - rx) / (ry - ly);\n fb = fy - fm * fx;\n if (fm < -1 || fm > 1) {\n if (lx > rx) {\n if (!v0) v0 = [(y0 - fb) / fm, y0];\n else if (v0[1] >= y1) return;\n v1 = [(y1 - fb) / fm, y1];\n } else {\n if (!v0) v0 = [(y1 - fb) / fm, y1];\n else if (v0[1] < y0) return;\n v1 = [(y0 - fb) / fm, y0];\n }\n } else {\n if (ly < ry) {\n if (!v0) v0 = [x0, fm * x0 + fb];\n else if (v0[0] >= x1) return;\n v1 = [x1, fm * x1 + fb];\n } else {\n if (!v0) v0 = [x1, fm * x1 + fb];\n else if (v0[0] < x0) return;\n v1 = [x0, fm * x0 + fb];\n }\n }\n }\n\n edge[0] = v0;\n edge[1] = v1;\n return true;\n}\n\nexport function clipEdges(x0, y0, x1, y1) {\n var i = edges.length,\n edge;\n\n while (i--) {\n if (!connectEdge(edge = edges[i], x0, y0, x1, y1)\n || !clipEdge(edge, x0, y0, x1, y1)\n || !(Math.abs(edge[0][0] - edge[1][0]) > epsilon\n || Math.abs(edge[0][1] - edge[1][1]) > epsilon)) {\n delete edges[i];\n }\n }\n}\n","import {createBorderEdge} from \"./Edge\";\nimport {cells, edges, epsilon} from \"./Diagram\";\n\nexport function createCell(site) {\n return cells[site.index] = {\n site: site,\n halfedges: []\n };\n}\n\nfunction cellHalfedgeAngle(cell, edge) {\n var site = cell.site,\n va = edge.left,\n vb = edge.right;\n if (site === vb) vb = va, va = site;\n if (vb) return Math.atan2(vb[1] - va[1], vb[0] - va[0]);\n if (site === va) va = edge[1], vb = edge[0];\n else va = edge[0], vb = edge[1];\n return Math.atan2(va[0] - vb[0], vb[1] - va[1]);\n}\n\nexport function cellHalfedgeStart(cell, edge) {\n return edge[+(edge.left !== cell.site)];\n}\n\nexport function cellHalfedgeEnd(cell, edge) {\n return edge[+(edge.left === cell.site)];\n}\n\nexport function sortCellHalfedges() {\n for (var i = 0, n = cells.length, cell, halfedges, j, m; i < n; ++i) {\n if ((cell = cells[i]) && (m = (halfedges = cell.halfedges).length)) {\n var index = new Array(m),\n array = new Array(m);\n for (j = 0; j < m; ++j) index[j] = j, array[j] = cellHalfedgeAngle(cell, edges[halfedges[j]]);\n index.sort(function(i, j) { return array[j] - array[i]; });\n for (j = 0; j < m; ++j) array[j] = halfedges[index[j]];\n for (j = 0; j < m; ++j) halfedges[j] = array[j];\n }\n }\n}\n\nexport function clipCells(x0, y0, x1, y1) {\n var nCells = cells.length,\n iCell,\n cell,\n site,\n iHalfedge,\n halfedges,\n nHalfedges,\n start,\n startX,\n startY,\n end,\n endX,\n endY,\n cover = true;\n\n for (iCell = 0; iCell < nCells; ++iCell) {\n if (cell = cells[iCell]) {\n site = cell.site;\n halfedges = cell.halfedges;\n iHalfedge = halfedges.length;\n\n // Remove any dangling clipped edges.\n while (iHalfedge--) {\n if (!edges[halfedges[iHalfedge]]) {\n halfedges.splice(iHalfedge, 1);\n }\n }\n\n // Insert any border edges as necessary.\n iHalfedge = 0, nHalfedges = halfedges.length;\n while (iHalfedge < nHalfedges) {\n end = cellHalfedgeEnd(cell, edges[halfedges[iHalfedge]]), endX = end[0], endY = end[1];\n start = cellHalfedgeStart(cell, edges[halfedges[++iHalfedge % nHalfedges]]), startX = start[0], startY = start[1];\n if (Math.abs(endX - startX) > epsilon || Math.abs(endY - startY) > epsilon) {\n halfedges.splice(iHalfedge, 0, edges.push(createBorderEdge(site, end,\n Math.abs(endX - x0) < epsilon && y1 - endY > epsilon ? [x0, Math.abs(startX - x0) < epsilon ? startY : y1]\n : Math.abs(endY - y1) < epsilon && x1 - endX > epsilon ? [Math.abs(startY - y1) < epsilon ? startX : x1, y1]\n : Math.abs(endX - x1) < epsilon && endY - y0 > epsilon ? [x1, Math.abs(startX - x1) < epsilon ? startY : y0]\n : Math.abs(endY - y0) < epsilon && endX - x0 > epsilon ? [Math.abs(startY - y0) < epsilon ? startX : x0, y0]\n : null)) - 1);\n ++nHalfedges;\n }\n }\n\n if (nHalfedges) cover = false;\n }\n }\n\n // If there weren’t any edges, have the closest site cover the extent.\n // It doesn’t matter which corner of the extent we measure!\n if (cover) {\n var dx, dy, d2, dc = Infinity;\n\n for (iCell = 0, cover = null; iCell < nCells; ++iCell) {\n if (cell = cells[iCell]) {\n site = cell.site;\n dx = site[0] - x0;\n dy = site[1] - y0;\n d2 = dx * dx + dy * dy;\n if (d2 < dc) dc = d2, cover = cell;\n }\n }\n\n if (cover) {\n var v00 = [x0, y0], v01 = [x0, y1], v11 = [x1, y1], v10 = [x1, y0];\n cover.halfedges.push(\n edges.push(createBorderEdge(site = cover.site, v00, v01)) - 1,\n edges.push(createBorderEdge(site, v01, v11)) - 1,\n edges.push(createBorderEdge(site, v11, v10)) - 1,\n edges.push(createBorderEdge(site, v10, v00)) - 1\n );\n }\n }\n\n // Lastly delete any cells with no edges; these were entirely clipped.\n for (iCell = 0; iCell < nCells; ++iCell) {\n if (cell = cells[iCell]) {\n if (!cell.halfedges.length) {\n delete cells[iCell];\n }\n }\n }\n}\n","import {RedBlackNode} from \"./RedBlackTree\";\nimport {circles, epsilon2} from \"./Diagram\";\n\nvar circlePool = [];\n\nexport var firstCircle;\n\nfunction Circle() {\n RedBlackNode(this);\n this.x =\n this.y =\n this.arc =\n this.site =\n this.cy = null;\n}\n\nexport function attachCircle(arc) {\n var lArc = arc.P,\n rArc = arc.N;\n\n if (!lArc || !rArc) return;\n\n var lSite = lArc.site,\n cSite = arc.site,\n rSite = rArc.site;\n\n if (lSite === rSite) return;\n\n var bx = cSite[0],\n by = cSite[1],\n ax = lSite[0] - bx,\n ay = lSite[1] - by,\n cx = rSite[0] - bx,\n cy = rSite[1] - by;\n\n var d = 2 * (ax * cy - ay * cx);\n if (d >= -epsilon2) return;\n\n var ha = ax * ax + ay * ay,\n hc = cx * cx + cy * cy,\n x = (cy * ha - ay * hc) / d,\n y = (ax * hc - cx * ha) / d;\n\n var circle = circlePool.pop() || new Circle;\n circle.arc = arc;\n circle.site = cSite;\n circle.x = x + bx;\n circle.y = (circle.cy = y + by) + Math.sqrt(x * x + y * y); // y bottom\n\n arc.circle = circle;\n\n var before = null,\n node = circles._;\n\n while (node) {\n if (circle.y < node.y || (circle.y === node.y && circle.x <= node.x)) {\n if (node.L) node = node.L;\n else { before = node.P; break; }\n } else {\n if (node.R) node = node.R;\n else { before = node; break; }\n }\n }\n\n circles.insert(before, circle);\n if (!before) firstCircle = circle;\n}\n\nexport function detachCircle(arc) {\n var circle = arc.circle;\n if (circle) {\n if (!circle.P) firstCircle = circle.N;\n circles.remove(circle);\n circlePool.push(circle);\n RedBlackNode(circle);\n arc.circle = null;\n }\n}\n","import {RedBlackNode} from \"./RedBlackTree\";\nimport {createCell} from \"./Cell\";\nimport {attachCircle, detachCircle} from \"./Circle\";\nimport {createEdge, setEdgeEnd} from \"./Edge\";\nimport {beaches, epsilon} from \"./Diagram\";\n\nvar beachPool = [];\n\nfunction Beach() {\n RedBlackNode(this);\n this.edge =\n this.site =\n this.circle = null;\n}\n\nfunction createBeach(site) {\n var beach = beachPool.pop() || new Beach;\n beach.site = site;\n return beach;\n}\n\nfunction detachBeach(beach) {\n detachCircle(beach);\n beaches.remove(beach);\n beachPool.push(beach);\n RedBlackNode(beach);\n}\n\nexport function removeBeach(beach) {\n var circle = beach.circle,\n x = circle.x,\n y = circle.cy,\n vertex = [x, y],\n previous = beach.P,\n next = beach.N,\n disappearing = [beach];\n\n detachBeach(beach);\n\n var lArc = previous;\n while (lArc.circle\n && Math.abs(x - lArc.circle.x) < epsilon\n && Math.abs(y - lArc.circle.cy) < epsilon) {\n previous = lArc.P;\n disappearing.unshift(lArc);\n detachBeach(lArc);\n lArc = previous;\n }\n\n disappearing.unshift(lArc);\n detachCircle(lArc);\n\n var rArc = next;\n while (rArc.circle\n && Math.abs(x - rArc.circle.x) < epsilon\n && Math.abs(y - rArc.circle.cy) < epsilon) {\n next = rArc.N;\n disappearing.push(rArc);\n detachBeach(rArc);\n rArc = next;\n }\n\n disappearing.push(rArc);\n detachCircle(rArc);\n\n var nArcs = disappearing.length,\n iArc;\n for (iArc = 1; iArc < nArcs; ++iArc) {\n rArc = disappearing[iArc];\n lArc = disappearing[iArc - 1];\n setEdgeEnd(rArc.edge, lArc.site, rArc.site, vertex);\n }\n\n lArc = disappearing[0];\n rArc = disappearing[nArcs - 1];\n rArc.edge = createEdge(lArc.site, rArc.site, null, vertex);\n\n attachCircle(lArc);\n attachCircle(rArc);\n}\n\nexport function addBeach(site) {\n var x = site[0],\n directrix = site[1],\n lArc,\n rArc,\n dxl,\n dxr,\n node = beaches._;\n\n while (node) {\n dxl = leftBreakPoint(node, directrix) - x;\n if (dxl > epsilon) node = node.L; else {\n dxr = x - rightBreakPoint(node, directrix);\n if (dxr > epsilon) {\n if (!node.R) {\n lArc = node;\n break;\n }\n node = node.R;\n } else {\n if (dxl > -epsilon) {\n lArc = node.P;\n rArc = node;\n } else if (dxr > -epsilon) {\n lArc = node;\n rArc = node.N;\n } else {\n lArc = rArc = node;\n }\n break;\n }\n }\n }\n\n createCell(site);\n var newArc = createBeach(site);\n beaches.insert(lArc, newArc);\n\n if (!lArc && !rArc) return;\n\n if (lArc === rArc) {\n detachCircle(lArc);\n rArc = createBeach(lArc.site);\n beaches.insert(newArc, rArc);\n newArc.edge = rArc.edge = createEdge(lArc.site, newArc.site);\n attachCircle(lArc);\n attachCircle(rArc);\n return;\n }\n\n if (!rArc) { // && lArc\n newArc.edge = createEdge(lArc.site, newArc.site);\n return;\n }\n\n // else lArc !== rArc\n detachCircle(lArc);\n detachCircle(rArc);\n\n var lSite = lArc.site,\n ax = lSite[0],\n ay = lSite[1],\n bx = site[0] - ax,\n by = site[1] - ay,\n rSite = rArc.site,\n cx = rSite[0] - ax,\n cy = rSite[1] - ay,\n d = 2 * (bx * cy - by * cx),\n hb = bx * bx + by * by,\n hc = cx * cx + cy * cy,\n vertex = [(cy * hb - by * hc) / d + ax, (bx * hc - cx * hb) / d + ay];\n\n setEdgeEnd(rArc.edge, lSite, rSite, vertex);\n newArc.edge = createEdge(lSite, site, null, vertex);\n rArc.edge = createEdge(site, rSite, null, vertex);\n attachCircle(lArc);\n attachCircle(rArc);\n}\n\nfunction leftBreakPoint(arc, directrix) {\n var site = arc.site,\n rfocx = site[0],\n rfocy = site[1],\n pby2 = rfocy - directrix;\n\n if (!pby2) return rfocx;\n\n var lArc = arc.P;\n if (!lArc) return -Infinity;\n\n site = lArc.site;\n var lfocx = site[0],\n lfocy = site[1],\n plby2 = lfocy - directrix;\n\n if (!plby2) return lfocx;\n\n var hl = lfocx - rfocx,\n aby2 = 1 / pby2 - 1 / plby2,\n b = hl / plby2;\n\n if (aby2) return (-b + Math.sqrt(b * b - 2 * aby2 * (hl * hl / (-2 * plby2) - lfocy + plby2 / 2 + rfocy - pby2 / 2))) / aby2 + rfocx;\n\n return (rfocx + lfocx) / 2;\n}\n\nfunction rightBreakPoint(arc, directrix) {\n var rArc = arc.N;\n if (rArc) return leftBreakPoint(rArc, directrix);\n var site = arc.site;\n return site[1] === directrix ? site[0] : Infinity;\n}\n","import {addBeach, removeBeach} from \"./Beach\";\nimport {sortCellHalfedges, cellHalfedgeStart, clipCells} from \"./Cell\";\nimport {firstCircle} from \"./Circle\";\nimport {clipEdges} from \"./Edge\";\nimport RedBlackTree from \"./RedBlackTree\";\n\nexport var epsilon = 1e-6;\nexport var epsilon2 = 1e-12;\nexport var beaches;\nexport var cells;\nexport var circles;\nexport var edges;\n\nfunction triangleArea(a, b, c) {\n return (a[0] - c[0]) * (b[1] - a[1]) - (a[0] - b[0]) * (c[1] - a[1]);\n}\n\nfunction lexicographic(a, b) {\n return b[1] - a[1]\n || b[0] - a[0];\n}\n\nexport default function Diagram(sites, extent) {\n var site = sites.sort(lexicographic).pop(),\n x,\n y,\n circle;\n\n edges = [];\n cells = new Array(sites.length);\n beaches = new RedBlackTree;\n circles = new RedBlackTree;\n\n while (true) {\n circle = firstCircle;\n if (site && (!circle || site[1] < circle.y || (site[1] === circle.y && site[0] < circle.x))) {\n if (site[0] !== x || site[1] !== y) {\n addBeach(site);\n x = site[0], y = site[1];\n }\n site = sites.pop();\n } else if (circle) {\n removeBeach(circle.arc);\n } else {\n break;\n }\n }\n\n sortCellHalfedges();\n\n if (extent) {\n var x0 = +extent[0][0],\n y0 = +extent[0][1],\n x1 = +extent[1][0],\n y1 = +extent[1][1];\n clipEdges(x0, y0, x1, y1);\n clipCells(x0, y0, x1, y1);\n }\n\n this.edges = edges;\n this.cells = cells;\n\n beaches =\n circles =\n edges =\n cells = null;\n}\n\nDiagram.prototype = {\n constructor: Diagram,\n\n polygons: function() {\n var edges = this.edges;\n\n return this.cells.map(function(cell) {\n var polygon = cell.halfedges.map(function(i) { return cellHalfedgeStart(cell, edges[i]); });\n polygon.data = cell.site.data;\n return polygon;\n });\n },\n\n triangles: function() {\n var triangles = [],\n edges = this.edges;\n\n this.cells.forEach(function(cell, i) {\n if (!(m = (halfedges = cell.halfedges).length)) return;\n var site = cell.site,\n halfedges,\n j = -1,\n m,\n s0,\n e1 = edges[halfedges[m - 1]],\n s1 = e1.left === site ? e1.right : e1.left;\n\n while (++j < m) {\n s0 = s1;\n e1 = edges[halfedges[j]];\n s1 = e1.left === site ? e1.right : e1.left;\n if (s0 && s1 && i < s0.index && i < s1.index && triangleArea(site, s0, s1) < 0) {\n triangles.push([site.data, s0.data, s1.data]);\n }\n }\n });\n\n return triangles;\n },\n\n links: function() {\n return this.edges.filter(function(edge) {\n return edge.right;\n }).map(function(edge) {\n return {\n source: edge.left.data,\n target: edge.right.data\n };\n });\n },\n\n find: function(x, y, radius) {\n var that = this, i0, i1 = that._found || 0, n = that.cells.length, cell;\n\n // Use the previously-found cell, or start with an arbitrary one.\n while (!(cell = that.cells[i1])) if (++i1 >= n) return null;\n var dx = x - cell.site[0], dy = y - cell.site[1], d2 = dx * dx + dy * dy;\n\n // Traverse the half-edges to find a closer cell, if any.\n do {\n cell = that.cells[i0 = i1], i1 = null;\n cell.halfedges.forEach(function(e) {\n var edge = that.edges[e], v = edge.left;\n if ((v === cell.site || !v) && !(v = edge.right)) return;\n var vx = x - v[0], vy = y - v[1], v2 = vx * vx + vy * vy;\n if (v2 < d2) d2 = v2, i1 = v.index;\n });\n } while (i1 !== null);\n\n that._found = i0;\n\n return radius == null || d2 <= radius * radius ? cell.site : null;\n }\n}\n","import constant from \"./constant\";\nimport {x as pointX, y as pointY} from \"./point\";\nimport Diagram, {epsilon} from \"./Diagram\";\n\nexport default function() {\n var x = pointX,\n y = pointY,\n extent = null;\n\n function voronoi(data) {\n return new Diagram(data.map(function(d, i) {\n var s = [Math.round(x(d, i, data) / epsilon) * epsilon, Math.round(y(d, i, data) / epsilon) * epsilon];\n s.index = i;\n s.data = d;\n return s;\n }), extent);\n }\n\n voronoi.polygons = function(data) {\n return voronoi(data).polygons();\n };\n\n voronoi.links = function(data) {\n return voronoi(data).links();\n };\n\n voronoi.triangles = function(data) {\n return voronoi(data).triangles();\n };\n\n voronoi.x = function(_) {\n return arguments.length ? (x = typeof _ === \"function\" ? _ : constant(+_), voronoi) : x;\n };\n\n voronoi.y = function(_) {\n return arguments.length ? (y = typeof _ === \"function\" ? _ : constant(+_), voronoi) : y;\n };\n\n voronoi.extent = function(_) {\n return arguments.length ? (extent = _ == null ? null : [[+_[0][0], +_[0][1]], [+_[1][0], +_[1][1]]], voronoi) : extent && [[extent[0][0], extent[0][1]], [extent[1][0], extent[1][1]]];\n };\n\n voronoi.size = function(_) {\n return arguments.length ? (extent = _ == null ? null : [[0, 0], [+_[0], +_[1]]], voronoi) : extent && [extent[1][0] - extent[0][0], extent[1][1] - extent[0][1]];\n };\n\n return voronoi;\n}\n","/* global window, requestAnimationFrame, cancelAnimationFrame */\nimport { FieldType, DimensionSubtype } from 'datamodel';\nimport {\n axisLeft,\n axisRight,\n axisTop,\n axisBottom\n} from 'd3-axis';\nimport {\n symbolCircle,\n symbolCross,\n symbolDiamond,\n symbolSquare,\n symbolStar,\n symbolWye,\n symbolTriangle,\n symbol,\n stack as d3Stack,\n stackOffsetDiverging,\n stackOrderNone,\n stackOrderAscending,\n stackOrderDescending,\n stackOffsetNone,\n stackOffsetExpand,\n stackOffsetWiggle,\n pie,\n arc,\n line,\n curveLinear,\n curveStepAfter,\n curveStepBefore,\n curveStep,\n curveCatmullRom,\n area\n} from 'd3-shape';\nimport { scaleBand } from 'd3-scale';\nimport { nest } from 'd3-collection';\nimport {\n interpolate,\n interpolateRgb,\n piecewise,\n interpolateNumber,\n interpolateHslLong\n} from 'd3-interpolate';\nimport {\n easeCubic,\n easeBounce,\n easePoly,\n easeBack,\n easeCircle,\n easeLinear,\n easeElastic\n} from 'd3-ease';\nimport {\n color,\n rgb,\n hsl\n} from 'd3-color';\nimport { voronoi } from 'd3-voronoi';\nimport Model from 'hyperdis';\nimport * as STACK_CONFIG from './enums/stack-config';\n\nconst HTMLElement = window.HTMLElement;\n\nconst isSimpleObject = (obj) => {\n let token;\n if (typeof obj === 'object') {\n if (obj === null) { return false; }\n token = Object.prototype.toString.call(obj);\n if (token === '[object Object]') {\n return (obj.constructor.toString().match(/^function (.*)\\(\\)/m) || [])[1] === 'Object';\n }\n }\n return false;\n};\n\n/**\n * Returns unique id\n * @return {string} Unique id string\n */\nconst\n getUniqueId = () => `id-${new Date().getTime()}${Math.round(Math.random() * 10000)}`;\n\n/**\n * Deep copies an object and returns a new object.\n * @param {Object} o Object to clone\n * @return {Object} New Object.\n */\nconst clone = (o) => {\n const output = {};\n let v;\n for (const key in o) {\n if ({}.hasOwnProperty.call(o, key)) {\n v = o[key];\n output[key] = isSimpleObject(v) ? clone(v) : v;\n }\n }\n return output;\n};\n\n/**\n* Checks the existence of keys in an object\n* @param {Array} keys Set of keys which are to be checked\n* @param {Object} obj whose keys are checked from the set of keys provided\n* @return {Object} Error if the keys are absent, or the object itself\n*/\nconst checkExistence = (keys, obj) => {\n const nonExistentKeys = [];\n keys.forEach((key) => {\n if (key in obj) {\n return;\n }\n nonExistentKeys.push(key);\n });\n return nonExistentKeys;\n};\n\nconst sanitizeIP = {\n typeObj: (keys, obj) => {\n if (typeof obj !== 'object') {\n return Error('Argument type object expected');\n }\n\n const nonExistentKeys = checkExistence(keys, obj);\n if (nonExistentKeys.length) {\n return Error(`Missing keys from parameter ${nonExistentKeys.join(', ')}`);\n }\n return obj;\n },\n\n /* istanbul ignore next */ htmlElem: (elem) => {\n if (!(elem instanceof HTMLElement)) {\n return Error('HTMLElement required');\n }\n return elem;\n }\n};\n\n/**\n * Gets the maximum value from an array of objects for a given property name\n * @param {Array.} data Array of objects\n * @param {string} field Field name\n * @return {number} Maximum value\n */\nconst getMax = (data, field) => Math.max(...data.filter(d => !isNaN(d[field])).map(d => d[field]));\n\n/**\n * Gets the minimum value from an array of objects for a given property name\n * @param {Array.} data Array of objects\n * @param {string} field Field name\n * @return {number} Minimum value\n */\nconst getMin = (data, field) => Math.min(...data.filter(d => !isNaN(d[field])).map(d => d[field]));\n\n/**\n * Gets the domain from the data based on the field name and type of field\n * @param {Array. | Array.} data Data Array\n * @param {Array.} fields Array of fields from where the domain will be calculated\n * @param {string} fieldType Type of field - nominal, quantitiative, temporal.\n * @return {Array} Usually contains a min and max value if field is quantitative or\n * an array of values if field type is nominal or ordinal\n */\nconst getDomainFromData = (data, fields, fieldType) => {\n let domain;\n let domArr;\n data = data[0] instanceof Array ? data : [data];\n switch (fieldType) {\n case DimensionSubtype.CATEGORICAL:\n domain = [].concat(...data.map(arr => arr.map(d => d[fields[0]]).filter(d => d !== undefined)));\n break;\n default:\n domArr = data.map((arr) => {\n const firstMin = getMin(arr, fields[0]);\n const secondMin = getMin(arr, fields[1]);\n const firstMax = getMax(arr, fields[0]);\n const secondMax = getMax(arr, fields[1]);\n return [Math.min(firstMin, secondMin), Math.max(firstMax, secondMax)];\n });\n domain = [Math.min(...domArr.map(d => d[0])), Math.max(...domArr.map(d => d[1]))];\n break;\n }\n return domain;\n};\n\n/**\n * Union Domain values\n * @param {Array.} domains Array of domain values\n * @param {string} fieldType type of field - dimension,measure or datetime.\n * @return {Array} Unioned domain of all domain values.\n */\nconst unionDomain = (domains, fieldType) => {\n let domain;\n domains = domains.filter(dom => dom.length);\n if (fieldType === DimensionSubtype.CATEGORICAL) {\n domain = domain = [].concat(...domains);\n } else {\n domain = [Math.min(...domains.map(d => d[0])), Math.max(...domains.map(d => d[1]))];\n }\n\n return domain;\n};\n\nconst symbolFns = {\n circle: symbolCircle,\n cross: symbolCross,\n diamond: symbolDiamond,\n square: symbolSquare,\n star: symbolStar,\n wye: symbolWye,\n triangle: symbolTriangle\n};\n\nconst easeFns = {\n cubic: easeCubic,\n bounce: easeBounce,\n linear: easeLinear,\n elastic: easeElastic,\n back: easeBack,\n poly: easePoly,\n circle: easeCircle\n};\n\n/**\n * Returns the maximum or minimum points of a compare value from an array of objects.\n * @param {Array} points Array of objects\n * @param {string} compareValue Key in the object on which the comparing will be done.\n * @param {string} minOrMax minimum or maximum.\n * @return {Object} Minimum or maximum point.\n */\nconst getExtremePoint = (points, compareValue, minOrMax) => {\n let extremePoint;\n let point;\n const len = points.length;\n let minOrMaxVal = minOrMax === 'max' ? -Infinity : Infinity;\n let val;\n\n for (let i = 0; i < len; i++) {\n point = points[i];\n val = point[compareValue];\n if (minOrMax === 'min' ? val < minOrMaxVal : val > minOrMaxVal) {\n minOrMaxVal = val;\n extremePoint = point;\n }\n }\n\n return extremePoint;\n};\n\n/**\n * Returns the minimum point of a compare value from an array of objects.\n * @param {Array} points Array of objects\n * @param {string} compareValue Key in the object on which the comparing will be done.\n * @return {Object} Minimum point.\n */\nconst getMinPoint = (points, compareValue) => getExtremePoint(points, compareValue, 'min');\n\n/**\n * Returns the maximum point of a compare value from an array of objects.\n * @param {Array} points Array of objects\n * @param {string} compareValue Key in the object on which the comparing will be done.\n * @return {Object} Maximum point.\n */\nconst getMaxPoint = (points, compareValue) => getExtremePoint(points, compareValue, 'max');\n\n/**\n * Gets the index of the closest value of the given value from the array.\n * @param {Array} arr Array of values\n * @param {number} value Value from which the nearest value will be calculated.\n * @param {string} side side property.\n * @return {number} index of the closest value\n */\n/* istanbul ignore next */const getClosestIndexOf = (arr, value, side) => {\n let low = 0;\n const arrLen = arr.length;\n let high = arrLen - 1;\n\n let mid;\n let d1;\n let d2;\n\n while (low < high) {\n mid = Math.floor((low + high) / 2);\n d1 = Math.abs(arr[mid] - value);\n d2 = Math.abs(arr[mid + 1] - value);\n\n if (d2 <= d1) {\n low = mid + 1;\n } else {\n high = mid;\n }\n }\n\n if (!side) {\n return high;\n }\n\n const highVal = arr[high];\n if (highVal === value) {\n return high;\n } else if (highVal > value) {\n if (high === 0) { return high; }\n return side === 'left' ? high - 1 : high;\n }\n if (high === arr.length - 1) { return high; }\n return side === 'left' ? high : high + 1;\n};\n\n/**\n * Returns the browser window object\n * @return {Window} Window object\n*/\nconst getWindow = () => window;\n\n/**\n * Returns the browser window object\n * @return {Window} Window object\n*/\nconst reqAnimFrame = (() => requestAnimationFrame)();\n\nconst cancelAnimFrame = (() => cancelAnimationFrame)();\n\n/**\n * Capitalizes the first letter of the word\n * @param {string} text word\n * @return {string} Capitalized word\n */\nconst capitalizeFirst = (text) => {\n text = text.toLowerCase();\n\n return text.replace(/\\w\\S*/g, txt => txt.charAt(0).toUpperCase() + txt.substr(1));\n};\n\n/**\n *\n *\n * @param {*} arr\n */\nconst unique = arr => ([...new Set(arr)]);\n\n/**\n * Gets the minimum difference between two consecutive numbers in an array.\n * @param {Array} arr Array of numbers\n * @param {number} index index of the value\n * @return {number} minimum difference between values\n */\n/* istanbul ignore next */ const getMinDiff = (arr, index) => {\n let diff;\n let uniqueVals;\n if (index !== undefined) {\n uniqueVals = unique(arr.map(d => d[index]));\n } else {\n uniqueVals = unique(arr);\n }\n if (uniqueVals.length > 1) {\n diff = Math.abs(uniqueVals[1] - uniqueVals[0]);\n for (let i = 2, len = uniqueVals.length; i < len; i++) {\n diff = Math.min(diff, Math.abs(uniqueVals[i] - uniqueVals[i - 1]));\n }\n } else {\n diff = uniqueVals[0];\n }\n\n return diff;\n};\n\n/**\n * Returns the class name appended with a given id.\n * @param {string} cls class name\n * @param {string} id unique identifier\n * @param {string} prefix string needed to add before the classname\n * @return {string} qualified class name\n */\n/* istanbul ignore next */const getQualifiedClassName = (cls, id, prefix) => {\n cls = cls.replace(/^\\.*/, '');\n return [`${prefix}-${cls}`, `${prefix}-${cls}-${id}`];\n};\n\n/**\n * This method is used to set the default value for variables\n * without sullying the code with conditional statements.\n *\n * @export\n * @param {any} param The parameter to test.\n * @param {any} value The default value to assign.\n * @return {any} The value.\n */\n/* istanbul ignore next */ const defaultValue = (param, value) => {\n if (typeof param === 'undefined' || (typeof param === 'object' && !param)) {\n return value;\n }\n return param;\n};\n\n/**\n * DESCRIPTION TODO\n * @todo\n *\n * @export\n * @param {Object} graph graph whose dependency order has to be generated\n * @return {Object} @todo\n */\nconst getDependencyOrder = (graph) => {\n const dependencyOrder = [];\n const visited = {};\n const keys = Object.keys(graph);\n /**\n * DESCRIPTION TODO\n * @todo\n *\n * @export\n * @param {Object} name @todo\n * @return {Object} @todo\n */\n const visit = (name) => {\n if (dependencyOrder.length === keys.length) {\n return true;\n }\n visited[name] = true;\n const edges = graph[name];\n for (let e = 0; e < edges.length; e++) {\n const dep = edges[e];\n if (!visited[dep]) {\n visit(dep);\n }\n }\n\n dependencyOrder.push(name);\n return false;\n };\n\n for (let i = 0; i < keys.length; i++) {\n if (visit(keys[i], i)) break;\n }\n\n return dependencyOrder;\n};\n\n/**\n * Iterates over the properties of an object and applies the function\n *\n * @param {any} obj object to be iterated upon\n * @param {any} fn function to be applied on it\n */\nconst objectIterator = (obj, fn) => {\n for (const key in obj) {\n if (Object.hasOwnProperty.call(obj, key)) {\n fn(key, obj);\n }\n }\n};\n\n/**\n * This class creates a d3 voronoi for retrieving the nearest neighbour of any point from a set of two\n * dimensional points\n * @class Voronoi\n */\n/* istanbul ignore next */ class Voronoi {\n /**\n * Initialize the voronoi with the data given.\n * @param {Array.} data Array of points.\n */\n constructor (data) {\n this._voronoi = voronoi().x(d => d.x).y(d => d.y);\n this.data(data);\n }\n\n /**\n * Sets the data to voronoi\n * @param {Array.} data Array of objects.\n * @return {Voronoi} Instance of voronoi.\n */\n data (data) {\n if (data) {\n this._voronoiFn = this._voronoi(data);\n }\n return this;\n }\n\n /**\n * Finds the closest point to the x and y position given.\n * @param {number} x x value\n * @param {number} y y value\n * @param {number} radius search radius.\n * @return {Object} Details of the nearest point.\n */\n find (x, y, radius) {\n return this._voronoiFn.find(x, y, radius);\n }\n}\n\n/**\n * Methods to handle changes to table configuration and reactivity are handled by this\n * class.\n */\n/**\n * Common store class\n *\n * @class Store\n */\nclass Store {\n /**\n * Creates an instance of Store.\n * @param {Object} config The object to create the state store with.\n * @memberof Store\n */\n constructor (config) {\n // create reactive model\n this.model = Model.create(config);\n this._listeners = [];\n }\n\n /**\n * This method returns a plain JSON object\n * with all the fields in the state store.\n *\n * @return {Object} Serialized representation of state store.\n * @memberof Store\n */\n serialize () {\n return this.model.serialize();\n }\n\n /**\n * This method is used to update the value of a property in the state store.\n *\n * @param {string} propName The name of the property.\n * @param {number} value The new value of the property.\n * @memberof Store\n */\n commit (propName, value) {\n // check if appropriate enum has been used\n this.model.prop(propName, value);\n }\n\n /**\n * This method is used to register a callbacl that will execute\n * when one or more properties change.\n *\n * @param {string | Array} propNames name of property or array of props.\n * @param {Function} callBack The callback to execute.\n * @memberof Store\n */\n /* istanbul ignore next */registerChangeListener (propNames, callBack, instantCall) {\n let props = propNames;\n if (!Array.isArray(propNames)) {\n props = [propNames];\n }\n const fn = this.model.next(props, callBack, instantCall);\n this._listeners.push(fn);\n return this;\n }\n /**\n * This method is used to register a callbacl that will execute\n * when one or more properties change.\n *\n * @param {string | Array} propNames name of property or array of props.\n * @param {Function} callBack The callback to execute.\n * @memberof Store\n */\n /* istanbul ignore next */ registerImmediateListener (propNames, callBack, instantCall) {\n let props = propNames;\n if (!Array.isArray(propNames)) {\n props = [propNames];\n }\n const fn = this.model.on(props, callBack, instantCall);\n this._listeners.push(fn);\n return this;\n }\n /**\n * This method is used to get the name of the property\n * from the state store.\n *\n * @param {string} propName The name of the field in state store.\n * @return {any} The value of the field.\n * @memberof Store\n */\n get (propName) {\n return this.model.prop(propName);\n }\n\n /**\n * This method is used to register a computed property that is computed every time\n * the store value changes.\n *\n * @param {string} propName The name of the property to create.\n * @param {Function} callBack The function to execute when depemdent props change.\n * @memberof Store\n */\n computed (propName, callBack) {\n return this.model.calculatedProp(propName, callBack);\n }\n\n unsubscribeAll () {\n this._listeners.forEach(fn => fn());\n }\n}\n\n/**\n * Sanitize an input number / string mixed number. Currently dot in the no is not supported.\n *\n * @param {number | string} val pure number or string mixed number\n * @return {number | null} Number if it can be extracted. Otherwise null\n */\nconst intSanitizer = (val) => {\n const arr = val.toString().match(/(\\d+)(px)*/g);\n if (!arr) {\n // If only characters are passed\n return null;\n }\n\n return parseInt(arr[0], 10);\n};\n\n/**\n * Setter getter creator from config\n * Format\n * PROPERTRY_NAME: {\n * value: // default value of the property,\n * meta: {\n * typeCheck: // The setter value will be checked using this. If the value is function then the setter value\n * // is passed as args. (Optional)\n * typeExpected: // The output of typecheck action will be tested against this. Truthy value will set the\n * // value to the setter\n * sanitizaiton: // Need for sanitization before type is checked\n * }\n * }\n *\n * @param {Object} holder an empty object on which the getters and setters will be mounted\n * @param {Object} options options config based on which the getters and setters are determined.\n * @param {Hyperdis} model optional model to attach the property. If not sent new moel is created.\n * @return {Array} @todo\n */\nconst transactor = (holder, options, model) => {\n let conf;\n const store = model && model instanceof Model ? model : Model.create({});\n\n for (const prop in options) {\n if ({}.hasOwnProperty.call(options, prop)) {\n conf = options[prop];\n if (!store.prop(prop)) {\n store.append({ [prop]: conf.value });\n }\n holder[prop] = ((context, key, meta) => (...params) => {\n let val;\n let compareTo;\n const paramsLen = params.length;\n const prevVal = store.prop(prop);\n if (paramsLen) {\n // If parameters are passed then it's a setter\n const spreadParams = meta && meta.spreadParams;\n val = params;\n const values = [];\n if (meta) {\n for (let i = 0; i < paramsLen; i++) {\n val = params[i];\n const sanitization = meta.sanitization && (spreadParams ? meta.sanitization[i] :\n meta.sanitization);\n const typeCheck = meta.typeCheck && (spreadParams ? meta.typeCheck[i] : meta.typeCheck);\n if (sanitization && typeof sanitization === 'function') {\n // Sanitize if required\n val = sanitization(val, prevVal, holder);\n }\n\n if (typeCheck) {\n // Checking if a setter is valid\n if (typeof typeCheck === 'function') {\n let typeExpected = meta.typeExpected;\n if (typeExpected && spreadParams) {\n typeExpected = typeExpected[i];\n }\n if (typeExpected) {\n compareTo = typeExpected;\n } else {\n compareTo = true;\n }\n\n if (typeCheck(val) === compareTo) {\n values.push(val);\n }\n } else if (typeof typeCheck === 'string') {\n if (typeCheck === 'constructor') {\n const typeExpected = spreadParams ? meta.typeExpected[i] : meta.typeExpected;\n if (val && (val.constructor.name === typeExpected)) {\n values.push(val);\n }\n }\n } else {\n // context.prop(key, val);\n values.push(val);\n }\n } else {\n values.push(val);\n }\n }\n const preset = meta.preset;\n const oldValues = context.prop(key);\n preset && preset(values[0], holder);\n if (spreadParams) {\n oldValues.forEach((value, i) => {\n if (values[i] === undefined) {\n values[i] = value;\n }\n });\n }\n values.length && context.prop(key, spreadParams ? values : values[0]);\n } else {\n context.prop(key, spreadParams ? val : val[0]);\n }\n return holder;\n }\n // No parameters are passed hence its a getter\n return context.prop(key);\n })(store, prop, conf.meta);\n }\n }\n\n return [holder, store];\n};\n\n/**\n *\n *\n * @param {*} context\n * @param {*} props\n */\nconst generateGetterSetters = (context, props) => {\n Object.entries(props).forEach((propInfo) => {\n const prop = propInfo[0];\n const typeChecker = propInfo[1].typeChecker;\n const sanitization = propInfo[1].sanitization;\n const prototype = context.constructor.prototype;\n if (!(Object.hasOwnProperty.call(prototype, prop))) {\n context[prop] = (...params) => {\n if (params.length) {\n let value = params[0];\n if (sanitization) {\n value = sanitization(context, params[0]);\n }\n if (typeChecker && !typeChecker(value)) {\n return context[`_${prop}`];\n }\n context[`_${prop}`] = value;\n return context;\n } return context[`_${prop}`];\n };\n }\n });\n};\n\n/**\n *\n *\n * @param {*} arr\n * @param {*} prop\n */\nconst getArraySum = (arr, prop) => arr.reduce((total, elem) => {\n total += prop ? elem[prop] : elem;\n return total;\n}, 0);\n\n/**\n *\n *\n * @param {*} arr1\n * @param {*} arr2\n * @returns\n */\nconst arraysEqual = (arr1, arr2) => {\n if (arr1.length !== arr2.length) { return false; }\n for (let i = arr1.length; i >= 0; i--) {\n if (arr1[i] !== arr2[i]) { return false; }\n }\n\n return true;\n};\n\n/* eslint valid-typeof:0 */\n/**\n * Returns a validation function which can be used to validate variables against a type and value\n *\n * @param {any} type type of value that the object should have\n * @return {Object} validation function\n */\nconst isEqual = type => (oldVal, newVal) => {\n if (type === 'Array') {\n if (!oldVal) {\n return false;\n }\n return arraysEqual(oldVal, newVal);\n } else if (type === 'Object') {\n return Object.is(oldVal, newVal);\n } return oldVal === newVal;\n};\n\n/**\n * Description @todo\n *\n * @param {any} transactionModel @todo\n * @param {any} transactionEndpoint @todo\n * @param {any} transactionItems @todo\n * @return {any} @todo\n */\nconst enableChainedTransaction = (transactionModel, transactionEndpoint, transactionItems) =>\n transactionItems.forEach(item => transactionModel.on(item, ([, newVal]) => transactionEndpoint[item](newVal)));\n\n/**\n * Chceks if the element is istanceof HTMLElement\n *\n * @param {Object} elem any JS Object\n */\nconst isHTMLElem = elem => elem instanceof HTMLElement;\n\nconst ERROR_MSG = {\n INTERFACE_IMPL: 'Method not implemented'\n};\n\n/**\n * Merges the sink object in the source by recursively iterating through the object properties\n * @param {Object} source Source Object\n * @param {Object} sink Sink Object\n * @return {Object} Merged object\n */\nconst mergeRecursive = (source, sink) => {\n for (const prop in sink) {\n if (isSimpleObject(source[prop]) && isSimpleObject(sink[prop])) {\n mergeRecursive(source[prop], sink[prop]);\n } else if (sink[prop] instanceof Object && sink[prop].constructor === Object) {\n source[prop] = {};\n mergeRecursive(source[prop], sink[prop]);\n } else {\n source[prop] = sink[prop];\n }\n }\n return source;\n};\n\nconst interpolateArray = (data, fitCount) => {\n const linearInterpolate = function (before, after, atPoint) {\n return before + (after - before) * atPoint;\n };\n const newData = [];\n const springFactor = ((data.length - 1) / (fitCount - 1));\n newData[0] = data[0]; // for new allocation\n for (let i = 1; i < fitCount - 1; i++) {\n const tmp = i * springFactor;\n const before = (Math.floor(tmp)).toFixed();\n const after = (Math.ceil(tmp)).toFixed();\n const atPoint = tmp - before;\n newData[i] = linearInterpolate(data[before], data[after], atPoint);\n }\n newData[fitCount - 1] = data[data.length - 1]; // for new allocation\n return newData;\n};\n\n/**\n *\n *\n * @param {*} fn\n */\nconst nextFrame = (fn) => {\n setTimeout(() => {\n fn();\n }, 0);\n};\n\n/**\n *\n *\n * @param {*} angle\n */\nconst angleToRadian = angle => angle * Math.PI / 180;\n\n/**\n *\n *\n * @param {*} newName\n * @param {*} oldName\n */\nconst replaceCSSPrefix = () => {\n // @todo\n};\n\n/**\n * Gets the interpolator function from d3 color\n *\n */\nconst interpolator = () => interpolate;\n\n/**\n * Gets the number interpolator from d3 color\n *\n */\nconst numberInterpolator = () => interpolateNumber;\n\n/**\n * Gets the rgb interpolator from d3 color\n *\n */\nconst colorInterpolator = () => interpolateRgb;\n\n/**\n * Gets the hsl interpolator from d3 color\n *\n */\nconst hslInterpolator = () => interpolateHslLong;\n\nconst transformColors = () => ({\n color,\n rgb,\n hsl\n});\n\n/**\n * Gets the piecewise interpolator from d3 color\n *\n */\nconst piecewiseInterpolator = () => piecewise;\n\nfunction hue2rgb (p, q, t) {\n if (t < 0) t += 1;\n if (t > 1) t -= 1;\n if (t < 1 / 6) return p + (q - p) * 6 * t;\n if (t < 1 / 2) return q;\n if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n return p;\n}\n\n /**\n * Converts an HSL color value to RGB. Conversion formula\n * adapted from http://en.wikipedia.org/wiki/HSL_color_space.\n * Assumes h, s, and l are contained in the set [0, 1] and\n * returns r, g, and b in the set [0, 255].\n *\n * @param Number h The hue\n * @param Number s The saturation\n * @param Number l The lightness\n * @return Array The RGB representation\n */\nconst hslToRgb = (h, s, l, a = 1) => {\n let r;\n let g;\n let b;\n\n if (s === 0) {\n r = g = b = l; // achromatic\n } else {\n const q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n const p = 2 * l - q;\n\n r = hue2rgb(p, q, h + 1 / 3);\n g = hue2rgb(p, q, h);\n b = hue2rgb(p, q, h - 1 / 3);\n }\n\n return [r * 255, g * 255, b * 255, a];\n};\n\n /**\n * Converts an RGB color value to HSV. Conversion formula\n * adapted from http://en.wikipedia.org/wiki/HSV_color_space.\n * Assumes r, g, and b are contained in the set [0, 255] and\n * returns h, s, and v in the set [0, 1].\n *\n * @param Number r The red color value\n * @param Number g The green color value\n * @param Number b The blue color value\n * @return Array The HSV representation\n */\nconst rgbToHsv = (r, g, b, a = 1) => {\n r = +r; g = +g; b = +b; a = +a;\n r /= 255; g /= 255; b /= 255;\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n let h;\n let s;\n const l = (max + min) / 2;\n\n if (max === min) {\n h = s = 0; // achromatic\n } else {\n const d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n switch (max) {\n case r: h = (g - b) / d + (g < b ? 6 : 0); break;\n case g: h = (b - r) / d + 2; break;\n case b: h = (r - g) / d + 4; break;\n default: break;\n }\n h /= 6;\n }\n return [h, s, l, a];\n};\n\n /**\n * Converts an HSV color value to RGB. Conversion formula\n * adapted from http://en.wikipedia.org/wiki/HSV_color_space.\n * Assumes h, s, and v are contained in the set [0, 1] and\n * returns r, g, and b in the set [0, 255].\n *\n * @param Number h The hue\n * @param Number s The saturation\n * @param Number v The value\n * @return Array The RGB representation\n */\nconst hsvToRgb = (h, s, v, a = 1) => {\n let r;\n let g;\n let b;\n\n const i = Math.floor(h * 6);\n const f = h * 6 - i;\n const p = v * (1 - s);\n const q = v * (1 - f * s);\n const t = v * (1 - (1 - f) * s);\n\n switch (i % 6) {\n case 0: r = v; g = t; b = p; break;\n case 1: r = q; g = v; b = p; break;\n case 2: r = p; g = v; b = t; break;\n case 3: r = p; g = q; b = v; break;\n case 4: r = t; g = p; b = v; break;\n case 5: r = v; g = p; b = q; break;\n default: break;\n }\n\n return [r * 255, g * 255, b * 255, a];\n};\n\nconst hexToHsv = (hex) => {\n const result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\n\n const r = parseInt(result[1], 16);\n const g = parseInt(result[2], 16);\n const b = parseInt(result[3], 16);\n const a = result[4] ? parseInt(result[4], 16) : 1;\n return rgbToHsv(r, g, b, a);\n};\n\nconst detectColor = (col) => {\n const matchRgb = /rgb\\((\\d{1,3}), (\\d{1,3}), (\\d{1,3})\\)/;\n const matchHsl = /hsl\\((\\d+),\\s*([\\d.]+)%,\\s*([\\d.]+)%\\)/g;\n\n // Source : https://gist.github.com/sethlopezme/d072b945969a3cc2cc11\n // eslint-disable-next-line\n const matchRgba = /rgba?\\(((25[0-5]|2[0-4]\\d|1\\d{1,2}|\\d\\d?)\\s*,\\s*?){2}(25[0-5]|2[0-4]\\d|1\\d{1,2}|\\d\\d?)\\s*,?\\s*([01]\\.?\\d*?)?\\)/;\n // eslint-disable-next-line\n const matchHsla = /^hsla\\((0|360|35\\d|3[0-4]\\d|[12]\\d\\d|0?\\d?\\d),(0|100|\\d{1,2})%,(0|100|\\d{1,2})%,(0?\\.\\d|1(\\.0)?)\\)$/;\n const matchHex = /^#([0-9a-f]{3}){1,2}$/i;\n\n if (matchRgb.test(col) || matchRgba.test(col)) {\n return 'rgb';\n } else if (matchHsl.test(col) || matchHsla.test(col)) {\n return 'hsl';\n } else if (matchHex.test(col)) {\n return 'hex';\n } return col;\n};\n\n/**\n *\n *\n * @param {*} model\n * @param {*} propModel\n * @returns\n */\nconst filterPropagationModel = (model, propModel, measures) => {\n const { data, schema } = propModel.getData();\n let filteredModel;\n if (schema.length) {\n const fieldMap = model.getFieldsConfig();\n filteredModel = model.select((fields) => {\n const include = data.some(row => schema.every((propField, idx) => {\n if (!measures && (!(propField.name in fieldMap) ||\n fieldMap[propField.name].def.type === FieldType.MEASURE)) {\n return true;\n }\n return row[idx] === fields[propField.name].valueOf();\n }));\n return include;\n }, {\n saveChild: false\n });\n } else {\n filteredModel = propModel;\n }\n\n return filteredModel;\n};\n\nconst assembleModelFromIdentifiers = (model, identifiers) => {\n let schema = [];\n let data;\n const fieldMap = model.getFieldsConfig();\n if (identifiers.length) {\n const fields = identifiers[0];\n const len = fields.length;\n for (let i = 0; i < len; i++) {\n const field = fields[i];\n const fieldObj = fieldMap[field] && Object.assign({}, fieldMap[field].def);\n if (fieldObj) {\n schema.push(Object.assign(fieldObj));\n }\n }\n\n data = [];\n const header = identifiers[0];\n for (let i = 1; i < identifiers.length; i += 1) {\n const vals = identifiers[i];\n const temp = {};\n vals.forEach((fieldVal, cIdx) => {\n temp[header[cIdx]] = fieldVal;\n });\n data.push(temp);\n }\n } else {\n data = [];\n schema = [];\n }\n\n return new model.constructor(data, schema);\n};\n\n/**\n *\n *\n * @param {*} dataModel\n * @param {*} criteria\n * @returns\n */\nconst getDataModelFromRange = (dataModel, criteria, mode) => {\n if (criteria === null) {\n return null;\n }\n const selFields = Object.keys(criteria);\n const selFn = fields => selFields.every((field) => {\n const val = fields[field].value;\n const range = criteria[field][0] instanceof Array ? criteria[field][0] : criteria[field];\n if (typeof range[0] === 'string') {\n return range.find(d => d === val) !== undefined;\n }\n return range ? val >= range[0] && val <= range[1] : true;\n });\n\n return dataModel.select(selFn, {\n saveChild: false,\n mode\n });\n};\n\n/**\n *\n *\n * @param {*} dataModel\n * @param {*} identifiers\n * @returns\n */\nconst getDataModelFromIdentifiers = (dataModel, identifiers, mode) => {\n let filteredDataModel;\n if (identifiers instanceof Array) {\n const fieldsConfig = dataModel.getFieldsConfig();\n\n const dataArr = identifiers.slice(1, identifiers.length);\n if (identifiers instanceof Function) {\n filteredDataModel = identifiers(dataModel, {}, false);\n } else if (identifiers instanceof Array && identifiers[0].length) {\n const filteredSchema = identifiers[0].filter(d => d in fieldsConfig);\n filteredDataModel = dataModel.select((fields) => {\n let include = true;\n filteredSchema.forEach((propField, idx) => {\n const value = fields[propField].valueOf();\n const index = dataArr.findIndex(d => d[idx] === value);\n include = include && index !== -1;\n });\n return include;\n }, {\n saveChild: false,\n mode\n });\n }\n } else {\n filteredDataModel = getDataModelFromRange(dataModel, identifiers, mode);\n }\n return filteredDataModel;\n};\n\n/**\n *\n *\n * @param {*} context\n * @param {*} listenerMap\n */\nconst registerListeners = (context, listenerMap) => {\n const propListenerMap = listenerMap(context);\n for (const key in propListenerMap) {\n if ({}.hasOwnProperty.call(propListenerMap, key)) {\n const mapObj = propListenerMap[key];\n const propType = mapObj.type;\n const props = mapObj.props;\n const listenerFn = mapObj.listener;\n context.store()[propType](props, listenerFn);\n }\n }\n};\n\nconst isValidValue = value => !isNaN(value) && value !== -Infinity && value !== Infinity;\n/**\n *\n *\n * @param {*} obj\n * @param {*} fields\n * @returns\n */\nconst getObjProp = (obj, ...fields) => {\n if (obj === undefined || obj === null) {\n return obj;\n }\n let retObj = obj;\n for (let i = 0, len = fields.length; i < len; i++) {\n retObj = retObj[fields[i]];\n if (retObj === undefined || retObj === null) {\n break;\n }\n }\n return retObj;\n};\n\n/**\n *\n *\n * @param {*} str\n * @returns\n */\nconst escapeHTML = (str) => {\n const htmlEscapes = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": ''',\n '/': '/'\n };\n const htmlEscaper = /[&<>\"'/]/g;\n return (`${str}`).replace(htmlEscaper, match => htmlEscapes[match]);\n};\n\n/**\n *\n *\n * @param {*} arr\n */\nconst transposeArray = arr => arr[0].map((col, i) => arr.map(row => row[i]));\nconst toArray = arr => (arr instanceof Array ? arr : [arr]);\nconst extendsClass = (cls, extendsFrom, found) => {\n if (!cls) {\n return false;\n }\n const prototype = cls.prototype;\n if (prototype instanceof extendsFrom) {\n found = true;\n } else {\n found = extendsClass(prototype, extendsFrom, found);\n }\n return found;\n};\n\n/**\n *\n * @param {*} dm1\n * @param {*} dm2\n */\nconst concatModels = (dm1, dm2) => {\n const dataObj1 = dm1.getData();\n const dataObj2 = dm2.getData();\n const data1 = dataObj1.data;\n const data2 = dataObj2.data;\n const schema1 = dataObj1.schema;\n const schema2 = dataObj2.schema;\n const tuples1 = {};\n const tuples2 = {};\n const commonTuples = {};\n for (let i = 0; i < data1.length; i++) {\n for (let ii = 0; ii < data2.length; ii++) {\n const row1 = data1[i];\n const row2 = data2[ii];\n const dim1Values = row1.filter((d, idx) => schema1[idx].type === FieldType.DIMENSION);\n const dim2Values = row2.filter((d, idx) => schema2[idx].type === FieldType.DIMENSION);\n const allDimSame = dim1Values.every(value => dim2Values.indexOf(value) !== -1);\n if (allDimSame) {\n const key = dim1Values.join();\n !commonTuples[key] && (commonTuples[key] = {});\n row1.forEach((value, idx) => {\n commonTuples[key][schema1[idx].name] = value;\n });\n row2.forEach((value, idx) => {\n commonTuples[key][schema2[idx].name] = value;\n });\n } else {\n const dm1Key = dim1Values.join();\n const dm2Key = dim2Values.join();\n if (!commonTuples[dm1Key] && !commonTuples[dm2Key]) {\n !tuples1[dm1Key] && (tuples1[dm1Key] = {});\n !tuples2[dm2Key] && (tuples2[dm2Key] = {});\n row1.forEach((value, idx) => {\n tuples1[dm1Key][schema1[idx].name] = value;\n });\n row2.forEach((value, idx) => {\n tuples2[dm2Key][schema2[idx].name] = value;\n });\n }\n }\n }\n }\n\n const commonSchema = [...schema1, ...schema2.filter(s2 => schema1.findIndex(s1 => s1.name === s2.name) === -1)];\n const data = [...Object.values(tuples1), ...Object.values(tuples2), ...Object.values(commonTuples)];\n return [data, commonSchema];\n};\n\nconst getSymbol = type => symbol().type(symbolFns[type]);\n\nconst stackOrders = {\n [STACK_CONFIG.ORDER_NONE]: stackOrderNone,\n [STACK_CONFIG.ORDER_ASCENDING]: stackOrderAscending,\n [STACK_CONFIG.ORDER_DESCENDING]: stackOrderDescending\n};\nconst stackOffsets = {\n [STACK_CONFIG.OFFSET_DIVERGING]: stackOffsetDiverging,\n [STACK_CONFIG.OFFSET_NONE]: stackOffsetNone,\n [STACK_CONFIG.OFFSET_EXPAND]: stackOffsetExpand,\n [STACK_CONFIG.OFFSET_WIGGLE]: stackOffsetWiggle\n};\n\n// eslint-disable-next-line require-jsdoc\nconst stack = params => d3Stack().keys(params.keys).offset(stackOffsets[params.offset])\n .order(stackOrders[params.order])(params.data);\n\n/**\n * Groups the data into a hierarchical tree structure based on one or more fields.\n * @param { Object } params Configuration properties for nesting data\n * @param { Array. } params.data Data which needs to be grouped\n * @param { Array. } params.keys Field indices by which the data will be grouped\n * @return { Array. } Grouped data array\n */\nconst nestCollection = (params) => {\n const nestFn = nest();\n params.keys.forEach(key => nestFn.key(d => d[key]));\n return nestFn.entries(params.data);\n};\n\nconst pathInterpolators = {\n curveLinear,\n curveStepAfter,\n curveStepBefore,\n curveStep,\n curveCatmullRom,\n stepAfter: curveStepAfter,\n catmullRom: curveCatmullRom,\n step: curveStep,\n stepBefore: curveStepBefore,\n linear: curveLinear\n};\n\nconst Symbols = {\n axisLeft,\n axisRight,\n axisTop,\n axisBottom,\n line,\n area,\n pie,\n arc,\n nest\n};\n\nconst Scales = {\n band: scaleBand\n};\n\nconst getSmallestDiff = (points) => {\n points = points.sort((a, b) => a - b);\n let minDiff = points[1] - points[0];\n for (let i = 2; i < points.length; i++) {\n minDiff = Math.min(minDiff, points[i] - points[i - 1]);\n }\n\n return minDiff;\n};\n\nconst require = (lookupWhat, lookupDetails) => ({\n resolvable: (store) => {\n const lookupTarget = store[lookupWhat];\n const depArr = lookupDetails.slice(0, lookupDetails.length - 1);\n const fn = lookupDetails[lookupDetails.length - 1]; // fn\n\n const deps = depArr.map(str => lookupTarget[str]);\n return {\n fn: fn(...deps),\n depArr\n };\n }\n});\n\nconst nextAnimFrame = window.requestAnimationFrame || window.webkitRequestAnimationFrame ||\n window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame ||\n function (callback) {\n setTimeout(callback, 16);\n };\n\nexport {\n require,\n Scales,\n Symbols,\n pathInterpolators,\n stack,\n nestCollection,\n getSymbol,\n transformColors,\n detectColor,\n hexToHsv,\n hslToRgb,\n rgbToHsv,\n hsvToRgb,\n concatModels,\n toArray,\n angleToRadian,\n escapeHTML,\n generateGetterSetters,\n getArraySum,\n interpolator,\n piecewiseInterpolator,\n getDataModelFromIdentifiers,\n getDataModelFromRange,\n colorInterpolator,\n numberInterpolator,\n ERROR_MSG,\n reqAnimFrame,\n nextAnimFrame,\n filterPropagationModel,\n transposeArray,\n cancelAnimFrame,\n getMax,\n getMin,\n getDomainFromData,\n getUniqueId,\n mergeRecursive,\n unionDomain,\n symbolFns,\n easeFns,\n clone,\n isEqual,\n interpolateArray,\n getMinPoint,\n defaultValue,\n getMaxPoint,\n getClosestIndexOf,\n Voronoi,\n checkExistence,\n sanitizeIP,\n getMinDiff,\n capitalizeFirst,\n getWindow,\n getQualifiedClassName,\n Store,\n getDependencyOrder,\n objectIterator,\n intSanitizer,\n transactor,\n enableChainedTransaction,\n isHTMLElem,\n isSimpleObject,\n nextFrame,\n registerListeners,\n replaceCSSPrefix,\n getObjProp,\n extendsClass,\n assembleModelFromIdentifiers,\n isValidValue,\n hslInterpolator,\n getSmallestDiff\n};\n","export function linear(t) {\n return +t;\n}\n","export function circleIn(t) {\n return 1 - Math.sqrt(1 - t * t);\n}\n\nexport function circleOut(t) {\n return Math.sqrt(1 - --t * t);\n}\n\nexport function circleInOut(t) {\n return ((t *= 2) <= 1 ? 1 - Math.sqrt(1 - t * t) : Math.sqrt(1 - (t -= 2) * t) + 1) / 2;\n}\n","import {path} from \"d3-path\";\nimport circle from \"./symbol/circle\";\nimport cross from \"./symbol/cross\";\nimport diamond from \"./symbol/diamond\";\nimport star from \"./symbol/star\";\nimport square from \"./symbol/square\";\nimport triangle from \"./symbol/triangle\";\nimport wye from \"./symbol/wye\";\nimport constant from \"./constant\";\n\nexport var symbols = [\n circle,\n cross,\n diamond,\n square,\n star,\n triangle,\n wye\n];\n\nexport default function() {\n var type = constant(circle),\n size = constant(64),\n context = null;\n\n function symbol() {\n var buffer;\n if (!context) context = buffer = path();\n type.apply(this, arguments).draw(context, +size.apply(this, arguments));\n if (buffer) return context = null, buffer + \"\" || null;\n }\n\n symbol.type = function(_) {\n return arguments.length ? (type = typeof _ === \"function\" ? _ : constant(_), symbol) : type;\n };\n\n symbol.size = function(_) {\n return arguments.length ? (size = typeof _ === \"function\" ? _ : constant(+_), symbol) : size;\n };\n\n symbol.context = function(_) {\n return arguments.length ? (context = _ == null ? null : _, symbol) : context;\n };\n\n return symbol;\n}\n","export const ORDER_ASCENDING = 'ascending';\nexport const ORDER_DESCENDING = 'descending';\nexport const ORDER_NONE = 'none';\nexport const OFFSET_DIVERGING = 'diverging';\nexport const OFFSET_NONE = 'none';\nexport const OFFSET_EXPAND = 'expand';\nexport const OFFSET_WIGGLE = 'wiggle';\n","import ascending from \"./ascending\";\n\nexport default function(series) {\n return ascending(series).reverse();\n}\n","export default function(series, order) {\n if (!((n = series.length) > 1)) return;\n for (var i, j = 0, d, dy, yp, yn, n, m = series[order[0]].length; j < m; ++j) {\n for (yp = yn = 0, i = 0; i < n; ++i) {\n if ((dy = (d = series[order[i]][j])[1] - d[0]) >= 0) {\n d[0] = yp, d[1] = yp += dy;\n } else if (dy < 0) {\n d[1] = yn, d[0] = yn += dy;\n } else {\n d[0] = yp;\n }\n }\n }\n}\n","import none from \"./none\";\n\nexport default function(series, order) {\n if (!((n = series.length) > 0)) return;\n for (var i, n, j = 0, m = series[0].length, y; j < m; ++j) {\n for (y = i = 0; i < n; ++i) y += series[i][j][1] || 0;\n if (y) for (i = 0; i < n; ++i) series[i][j][1] /= y;\n }\n none(series, order);\n}\n","import none from \"./none\";\n\nexport default function(series, order) {\n if (!((n = series.length) > 0) || !((m = (s0 = series[order[0]]).length) > 0)) return;\n for (var y = 0, j = 1, s0, m, n; j < m; ++j) {\n for (var i = 0, s1 = 0, s2 = 0; i < n; ++i) {\n var si = series[order[i]],\n sij0 = si[j][1] || 0,\n sij1 = si[j - 1][1] || 0,\n s3 = (sij0 - sij1) / 2;\n for (var k = 0; k < i; ++k) {\n var sk = series[order[k]],\n skj0 = sk[j][1] || 0,\n skj1 = sk[j - 1][1] || 0;\n s3 += skj0 - skj1;\n }\n s1 += sij0, s2 += s3 * sij0;\n }\n s0[j - 1][1] += s0[j - 1][0] = y;\n if (s1) y -= s2 / s1;\n }\n s0[j - 1][1] += s0[j - 1][0] = y;\n none(series, order);\n}\n","import constant from \"./constant\";\nimport descending from \"./descending\";\nimport identity from \"./identity\";\nimport {tau} from \"./math\";\n\nexport default function() {\n var value = identity,\n sortValues = descending,\n sort = null,\n startAngle = constant(0),\n endAngle = constant(tau),\n padAngle = constant(0);\n\n function pie(data) {\n var i,\n n = data.length,\n j,\n k,\n sum = 0,\n index = new Array(n),\n arcs = new Array(n),\n a0 = +startAngle.apply(this, arguments),\n da = Math.min(tau, Math.max(-tau, endAngle.apply(this, arguments) - a0)),\n a1,\n p = Math.min(Math.abs(da) / n, padAngle.apply(this, arguments)),\n pa = p * (da < 0 ? -1 : 1),\n v;\n\n for (i = 0; i < n; ++i) {\n if ((v = arcs[index[i] = i] = +value(data[i], i, data)) > 0) {\n sum += v;\n }\n }\n\n // Optionally sort the arcs by previously-computed values or by data.\n if (sortValues != null) index.sort(function(i, j) { return sortValues(arcs[i], arcs[j]); });\n else if (sort != null) index.sort(function(i, j) { return sort(data[i], data[j]); });\n\n // Compute the arcs! They are stored in the original data's order.\n for (i = 0, k = sum ? (da - n * pa) / sum : 0; i < n; ++i, a0 = a1) {\n j = index[i], v = arcs[j], a1 = a0 + (v > 0 ? v * k : 0) + pa, arcs[j] = {\n data: data[j],\n index: i,\n value: v,\n startAngle: a0,\n endAngle: a1,\n padAngle: p\n };\n }\n\n return arcs;\n }\n\n pie.value = function(_) {\n return arguments.length ? (value = typeof _ === \"function\" ? _ : constant(+_), pie) : value;\n };\n\n pie.sortValues = function(_) {\n return arguments.length ? (sortValues = _, sort = null, pie) : sortValues;\n };\n\n pie.sort = function(_) {\n return arguments.length ? (sort = _, sortValues = null, pie) : sort;\n };\n\n pie.startAngle = function(_) {\n return arguments.length ? (startAngle = typeof _ === \"function\" ? _ : constant(+_), pie) : startAngle;\n };\n\n pie.endAngle = function(_) {\n return arguments.length ? (endAngle = typeof _ === \"function\" ? _ : constant(+_), pie) : endAngle;\n };\n\n pie.padAngle = function(_) {\n return arguments.length ? (padAngle = typeof _ === \"function\" ? _ : constant(+_), pie) : padAngle;\n };\n\n return pie;\n}\n","export var xhtml = \"http://www.w3.org/1999/xhtml\";\n\nexport default {\n svg: \"http://www.w3.org/2000/svg\",\n xhtml: xhtml,\n xlink: \"http://www.w3.org/1999/xlink\",\n xml: \"http://www.w3.org/XML/1998/namespace\",\n xmlns: \"http://www.w3.org/2000/xmlns/\"\n};\n","import namespaces from \"./namespaces\";\n\nexport default function(name) {\n var prefix = name += \"\", i = prefix.indexOf(\":\");\n if (i >= 0 && (prefix = name.slice(0, i)) !== \"xmlns\") name = name.slice(i + 1);\n return namespaces.hasOwnProperty(prefix) ? {space: namespaces[prefix], local: name} : name;\n}\n","import namespace from \"./namespace\";\nimport {xhtml} from \"./namespaces\";\n\nfunction creatorInherit(name) {\n return function() {\n var document = this.ownerDocument,\n uri = this.namespaceURI;\n return uri === xhtml && document.documentElement.namespaceURI === xhtml\n ? document.createElement(name)\n : document.createElementNS(uri, name);\n };\n}\n\nfunction creatorFixed(fullname) {\n return function() {\n return this.ownerDocument.createElementNS(fullname.space, fullname.local);\n };\n}\n\nexport default function(name) {\n var fullname = namespace(name);\n return (fullname.local\n ? creatorFixed\n : creatorInherit)(fullname);\n}\n","function none() {}\n\nexport default function(selector) {\n return selector == null ? none : function() {\n return this.querySelector(selector);\n };\n}\n","function empty() {\n return [];\n}\n\nexport default function(selector) {\n return selector == null ? empty : function() {\n return this.querySelectorAll(selector);\n };\n}\n","var matcher = function(selector) {\n return function() {\n return this.matches(selector);\n };\n};\n\nif (typeof document !== \"undefined\") {\n var element = document.documentElement;\n if (!element.matches) {\n var vendorMatches = element.webkitMatchesSelector\n || element.msMatchesSelector\n || element.mozMatchesSelector\n || element.oMatchesSelector;\n matcher = function(selector) {\n return function() {\n return vendorMatches.call(this, selector);\n };\n };\n }\n}\n\nexport default matcher;\n","export default function(update) {\n return new Array(update.length);\n}\n","import sparse from \"./sparse\";\nimport {Selection} from \"./index\";\n\nexport default function() {\n return new Selection(this._enter || this._groups.map(sparse), this._parents);\n}\n\nexport function EnterNode(parent, datum) {\n this.ownerDocument = parent.ownerDocument;\n this.namespaceURI = parent.namespaceURI;\n this._next = null;\n this._parent = parent;\n this.__data__ = datum;\n}\n\nEnterNode.prototype = {\n constructor: EnterNode,\n appendChild: function(child) { return this._parent.insertBefore(child, this._next); },\n insertBefore: function(child, next) { return this._parent.insertBefore(child, next); },\n querySelector: function(selector) { return this._parent.querySelector(selector); },\n querySelectorAll: function(selector) { return this._parent.querySelectorAll(selector); }\n};\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","import {Selection} from \"./index\";\nimport {EnterNode} from \"./enter\";\nimport constant from \"../constant\";\n\nvar keyPrefix = \"$\"; // Protect against keys like “__proto__”.\n\nfunction bindIndex(parent, group, enter, update, exit, data) {\n var i = 0,\n node,\n groupLength = group.length,\n dataLength = data.length;\n\n // Put any non-null nodes that fit into update.\n // Put any null nodes into enter.\n // Put any remaining data into enter.\n for (; i < dataLength; ++i) {\n if (node = group[i]) {\n node.__data__ = data[i];\n update[i] = node;\n } else {\n enter[i] = new EnterNode(parent, data[i]);\n }\n }\n\n // Put any non-null nodes that don’t fit into exit.\n for (; i < groupLength; ++i) {\n if (node = group[i]) {\n exit[i] = node;\n }\n }\n}\n\nfunction bindKey(parent, group, enter, update, exit, data, key) {\n var i,\n node,\n nodeByKeyValue = {},\n groupLength = group.length,\n dataLength = data.length,\n keyValues = new Array(groupLength),\n keyValue;\n\n // Compute the key for each node.\n // If multiple nodes have the same key, the duplicates are added to exit.\n for (i = 0; i < groupLength; ++i) {\n if (node = group[i]) {\n keyValues[i] = keyValue = keyPrefix + key.call(node, node.__data__, i, group);\n if (keyValue in nodeByKeyValue) {\n exit[i] = node;\n } else {\n nodeByKeyValue[keyValue] = node;\n }\n }\n }\n\n // Compute the key for each datum.\n // If there a node associated with this key, join and add it to update.\n // If there is not (or the key is a duplicate), add it to enter.\n for (i = 0; i < dataLength; ++i) {\n keyValue = keyPrefix + key.call(parent, data[i], i, data);\n if (node = nodeByKeyValue[keyValue]) {\n update[i] = node;\n node.__data__ = data[i];\n nodeByKeyValue[keyValue] = null;\n } else {\n enter[i] = new EnterNode(parent, data[i]);\n }\n }\n\n // Add any remaining nodes that were not bound to data to exit.\n for (i = 0; i < groupLength; ++i) {\n if ((node = group[i]) && (nodeByKeyValue[keyValues[i]] === node)) {\n exit[i] = node;\n }\n }\n}\n\nexport default function(value, key) {\n if (!value) {\n data = new Array(this.size()), j = -1;\n this.each(function(d) { data[++j] = d; });\n return data;\n }\n\n var bind = key ? bindKey : bindIndex,\n parents = this._parents,\n groups = this._groups;\n\n if (typeof value !== \"function\") value = constant(value);\n\n for (var m = groups.length, update = new Array(m), enter = new Array(m), exit = new Array(m), j = 0; j < m; ++j) {\n var parent = parents[j],\n group = groups[j],\n groupLength = group.length,\n data = value.call(parent, parent && parent.__data__, j, parents),\n dataLength = data.length,\n enterGroup = enter[j] = new Array(dataLength),\n updateGroup = update[j] = new Array(dataLength),\n exitGroup = exit[j] = new Array(groupLength);\n\n bind(parent, group, enterGroup, updateGroup, exitGroup, data, key);\n\n // Now connect the enter nodes to their following update node, such that\n // appendChild can insert the materialized enter node before this node,\n // rather than at the end of the parent node.\n for (var i0 = 0, i1 = 0, previous, next; i0 < dataLength; ++i0) {\n if (previous = enterGroup[i0]) {\n if (i0 >= i1) i1 = i0 + 1;\n while (!(next = updateGroup[i1]) && ++i1 < dataLength);\n previous._next = next || null;\n }\n }\n }\n\n update = new Selection(update, parents);\n update._enter = enter;\n update._exit = exit;\n return update;\n}\n","import {Selection} from \"./index\";\n\nexport default function(compare) {\n if (!compare) compare = ascending;\n\n function compareNode(a, b) {\n return a && b ? compare(a.__data__, b.__data__) : !a - !b;\n }\n\n for (var groups = this._groups, m = groups.length, sortgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, sortgroup = sortgroups[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n sortgroup[i] = node;\n }\n }\n sortgroup.sort(compareNode);\n }\n\n return new Selection(sortgroups, this._parents).order();\n}\n\nfunction ascending(a, b) {\n return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","import namespace from \"../namespace\";\n\nfunction attrRemove(name) {\n return function() {\n this.removeAttribute(name);\n };\n}\n\nfunction attrRemoveNS(fullname) {\n return function() {\n this.removeAttributeNS(fullname.space, fullname.local);\n };\n}\n\nfunction attrConstant(name, value) {\n return function() {\n this.setAttribute(name, value);\n };\n}\n\nfunction attrConstantNS(fullname, value) {\n return function() {\n this.setAttributeNS(fullname.space, fullname.local, value);\n };\n}\n\nfunction attrFunction(name, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.removeAttribute(name);\n else this.setAttribute(name, v);\n };\n}\n\nfunction attrFunctionNS(fullname, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.removeAttributeNS(fullname.space, fullname.local);\n else this.setAttributeNS(fullname.space, fullname.local, v);\n };\n}\n\nexport default function(name, value) {\n var fullname = namespace(name);\n\n if (arguments.length < 2) {\n var node = this.node();\n return fullname.local\n ? node.getAttributeNS(fullname.space, fullname.local)\n : node.getAttribute(fullname);\n }\n\n return this.each((value == null\n ? (fullname.local ? attrRemoveNS : attrRemove) : (typeof value === \"function\"\n ? (fullname.local ? attrFunctionNS : attrFunction)\n : (fullname.local ? attrConstantNS : attrConstant)))(fullname, value));\n}\n","export default function(node) {\n return (node.ownerDocument && node.ownerDocument.defaultView) // node is a Node\n || (node.document && node) // node is a Window\n || node.defaultView; // node is a Document\n}\n","import defaultView from \"../window\";\n\nfunction styleRemove(name) {\n return function() {\n this.style.removeProperty(name);\n };\n}\n\nfunction styleConstant(name, value, priority) {\n return function() {\n this.style.setProperty(name, value, priority);\n };\n}\n\nfunction styleFunction(name, value, priority) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.style.removeProperty(name);\n else this.style.setProperty(name, v, priority);\n };\n}\n\nexport default function(name, value, priority) {\n return arguments.length > 1\n ? this.each((value == null\n ? styleRemove : typeof value === \"function\"\n ? styleFunction\n : styleConstant)(name, value, priority == null ? \"\" : priority))\n : styleValue(this.node(), name);\n}\n\nexport function styleValue(node, name) {\n return node.style.getPropertyValue(name)\n || defaultView(node).getComputedStyle(node, null).getPropertyValue(name);\n}\n","function classArray(string) {\n return string.trim().split(/^|\\s+/);\n}\n\nfunction classList(node) {\n return node.classList || new ClassList(node);\n}\n\nfunction ClassList(node) {\n this._node = node;\n this._names = classArray(node.getAttribute(\"class\") || \"\");\n}\n\nClassList.prototype = {\n add: function(name) {\n var i = this._names.indexOf(name);\n if (i < 0) {\n this._names.push(name);\n this._node.setAttribute(\"class\", this._names.join(\" \"));\n }\n },\n remove: function(name) {\n var i = this._names.indexOf(name);\n if (i >= 0) {\n this._names.splice(i, 1);\n this._node.setAttribute(\"class\", this._names.join(\" \"));\n }\n },\n contains: function(name) {\n return this._names.indexOf(name) >= 0;\n }\n};\n\nfunction classedAdd(node, names) {\n var list = classList(node), i = -1, n = names.length;\n while (++i < n) list.add(names[i]);\n}\n\nfunction classedRemove(node, names) {\n var list = classList(node), i = -1, n = names.length;\n while (++i < n) list.remove(names[i]);\n}\n\nfunction classedTrue(names) {\n return function() {\n classedAdd(this, names);\n };\n}\n\nfunction classedFalse(names) {\n return function() {\n classedRemove(this, names);\n };\n}\n\nfunction classedFunction(names, value) {\n return function() {\n (value.apply(this, arguments) ? classedAdd : classedRemove)(this, names);\n };\n}\n\nexport default function(name, value) {\n var names = classArray(name + \"\");\n\n if (arguments.length < 2) {\n var list = classList(this.node()), i = -1, n = names.length;\n while (++i < n) if (!list.contains(names[i])) return false;\n return true;\n }\n\n return this.each((typeof value === \"function\"\n ? classedFunction : value\n ? classedTrue\n : classedFalse)(names, value));\n}\n","function textRemove() {\n this.textContent = \"\";\n}\n\nfunction textConstant(value) {\n return function() {\n this.textContent = value;\n };\n}\n\nfunction textFunction(value) {\n return function() {\n var v = value.apply(this, arguments);\n this.textContent = v == null ? \"\" : v;\n };\n}\n\nexport default function(value) {\n return arguments.length\n ? this.each(value == null\n ? textRemove : (typeof value === \"function\"\n ? textFunction\n : textConstant)(value))\n : this.node().textContent;\n}\n","function htmlRemove() {\n this.innerHTML = \"\";\n}\n\nfunction htmlConstant(value) {\n return function() {\n this.innerHTML = value;\n };\n}\n\nfunction htmlFunction(value) {\n return function() {\n var v = value.apply(this, arguments);\n this.innerHTML = v == null ? \"\" : v;\n };\n}\n\nexport default function(value) {\n return arguments.length\n ? this.each(value == null\n ? htmlRemove : (typeof value === \"function\"\n ? htmlFunction\n : htmlConstant)(value))\n : this.node().innerHTML;\n}\n","function raise() {\n if (this.nextSibling) this.parentNode.appendChild(this);\n}\n\nexport default function() {\n return this.each(raise);\n}\n","function lower() {\n if (this.previousSibling) this.parentNode.insertBefore(this, this.parentNode.firstChild);\n}\n\nexport default function() {\n return this.each(lower);\n}\n","import creator from \"../creator\";\nimport selector from \"../selector\";\n\nfunction constantNull() {\n return null;\n}\n\nexport default function(name, before) {\n var create = typeof name === \"function\" ? name : creator(name),\n select = before == null ? constantNull : typeof before === \"function\" ? before : selector(before);\n return this.select(function() {\n return this.insertBefore(create.apply(this, arguments), select.apply(this, arguments) || null);\n });\n}\n","function remove() {\n var parent = this.parentNode;\n if (parent) parent.removeChild(this);\n}\n\nexport default function() {\n return this.each(remove);\n}\n","function selection_cloneShallow() {\n return this.parentNode.insertBefore(this.cloneNode(false), this.nextSibling);\n}\n\nfunction selection_cloneDeep() {\n return this.parentNode.insertBefore(this.cloneNode(true), this.nextSibling);\n}\n\nexport default function(deep) {\n return this.select(deep ? selection_cloneDeep : selection_cloneShallow);\n}\n","var filterEvents = {};\n\nexport var event = null;\n\nif (typeof document !== \"undefined\") {\n var element = document.documentElement;\n if (!(\"onmouseenter\" in element)) {\n filterEvents = {mouseenter: \"mouseover\", mouseleave: \"mouseout\"};\n }\n}\n\nfunction filterContextListener(listener, index, group) {\n listener = contextListener(listener, index, group);\n return function(event) {\n var related = event.relatedTarget;\n if (!related || (related !== this && !(related.compareDocumentPosition(this) & 8))) {\n listener.call(this, event);\n }\n };\n}\n\nfunction contextListener(listener, index, group) {\n return function(event1) {\n var event0 = event; // Events can be reentrant (e.g., focus).\n event = event1;\n try {\n listener.call(this, this.__data__, index, group);\n } finally {\n event = event0;\n }\n };\n}\n\nfunction parseTypenames(typenames) {\n return typenames.trim().split(/^|\\s+/).map(function(t) {\n var name = \"\", i = t.indexOf(\".\");\n if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n return {type: t, name: name};\n });\n}\n\nfunction onRemove(typename) {\n return function() {\n var on = this.__on;\n if (!on) return;\n for (var j = 0, i = -1, m = on.length, o; j < m; ++j) {\n if (o = on[j], (!typename.type || o.type === typename.type) && o.name === typename.name) {\n this.removeEventListener(o.type, o.listener, o.capture);\n } else {\n on[++i] = o;\n }\n }\n if (++i) on.length = i;\n else delete this.__on;\n };\n}\n\nfunction onAdd(typename, value, capture) {\n var wrap = filterEvents.hasOwnProperty(typename.type) ? filterContextListener : contextListener;\n return function(d, i, group) {\n var on = this.__on, o, listener = wrap(value, i, group);\n if (on) for (var j = 0, m = on.length; j < m; ++j) {\n if ((o = on[j]).type === typename.type && o.name === typename.name) {\n this.removeEventListener(o.type, o.listener, o.capture);\n this.addEventListener(o.type, o.listener = listener, o.capture = capture);\n o.value = value;\n return;\n }\n }\n this.addEventListener(typename.type, listener, capture);\n o = {type: typename.type, name: typename.name, value: value, listener: listener, capture: capture};\n if (!on) this.__on = [o];\n else on.push(o);\n };\n}\n\nexport default function(typename, value, capture) {\n var typenames = parseTypenames(typename + \"\"), i, n = typenames.length, t;\n\n if (arguments.length < 2) {\n var on = this.node().__on;\n if (on) for (var j = 0, m = on.length, o; j < m; ++j) {\n for (i = 0, o = on[j]; i < n; ++i) {\n if ((t = typenames[i]).type === o.type && t.name === o.name) {\n return o.value;\n }\n }\n }\n return;\n }\n\n on = value ? onAdd : onRemove;\n if (capture == null) capture = false;\n for (i = 0; i < n; ++i) this.each(on(typenames[i], value, capture));\n return this;\n}\n\nexport function customEvent(event1, listener, that, args) {\n var event0 = event;\n event1.sourceEvent = event;\n event = event1;\n try {\n return listener.apply(that, args);\n } finally {\n event = event0;\n }\n}\n","import defaultView from \"../window\";\n\nfunction dispatchEvent(node, type, params) {\n var window = defaultView(node),\n event = window.CustomEvent;\n\n if (typeof event === \"function\") {\n event = new event(type, params);\n } else {\n event = window.document.createEvent(\"Event\");\n if (params) event.initEvent(type, params.bubbles, params.cancelable), event.detail = params.detail;\n else event.initEvent(type, false, false);\n }\n\n node.dispatchEvent(event);\n}\n\nfunction dispatchConstant(type, params) {\n return function() {\n return dispatchEvent(this, type, params);\n };\n}\n\nfunction dispatchFunction(type, params) {\n return function() {\n return dispatchEvent(this, type, params.apply(this, arguments));\n };\n}\n\nexport default function(type, params) {\n return this.each((typeof params === \"function\"\n ? dispatchFunction\n : dispatchConstant)(type, params));\n}\n","import selection_select from \"./select\";\nimport selection_selectAll from \"./selectAll\";\nimport selection_filter from \"./filter\";\nimport selection_data from \"./data\";\nimport selection_enter from \"./enter\";\nimport selection_exit from \"./exit\";\nimport selection_merge from \"./merge\";\nimport selection_order from \"./order\";\nimport selection_sort from \"./sort\";\nimport selection_call from \"./call\";\nimport selection_nodes from \"./nodes\";\nimport selection_node from \"./node\";\nimport selection_size from \"./size\";\nimport selection_empty from \"./empty\";\nimport selection_each from \"./each\";\nimport selection_attr from \"./attr\";\nimport selection_style from \"./style\";\nimport selection_property from \"./property\";\nimport selection_classed from \"./classed\";\nimport selection_text from \"./text\";\nimport selection_html from \"./html\";\nimport selection_raise from \"./raise\";\nimport selection_lower from \"./lower\";\nimport selection_append from \"./append\";\nimport selection_insert from \"./insert\";\nimport selection_remove from \"./remove\";\nimport selection_clone from \"./clone\";\nimport selection_datum from \"./datum\";\nimport selection_on from \"./on\";\nimport selection_dispatch from \"./dispatch\";\n\nexport var root = [null];\n\nexport function Selection(groups, parents) {\n this._groups = groups;\n this._parents = parents;\n}\n\nfunction selection() {\n return new Selection([[document.documentElement]], root);\n}\n\nSelection.prototype = selection.prototype = {\n constructor: Selection,\n select: selection_select,\n selectAll: selection_selectAll,\n filter: selection_filter,\n data: selection_data,\n enter: selection_enter,\n exit: selection_exit,\n merge: selection_merge,\n order: selection_order,\n sort: selection_sort,\n call: selection_call,\n nodes: selection_nodes,\n node: selection_node,\n size: selection_size,\n empty: selection_empty,\n each: selection_each,\n attr: selection_attr,\n style: selection_style,\n property: selection_property,\n classed: selection_classed,\n text: selection_text,\n html: selection_html,\n raise: selection_raise,\n lower: selection_lower,\n append: selection_append,\n insert: selection_insert,\n remove: selection_remove,\n clone: selection_clone,\n datum: selection_datum,\n on: selection_on,\n dispatch: selection_dispatch\n};\n\nexport default selection;\n","import {Selection} from \"./index\";\nimport selector from \"../selector\";\n\nexport default function(select) {\n if (typeof select !== \"function\") select = selector(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {\n if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {\n if (\"__data__\" in node) subnode.__data__ = node.__data__;\n subgroup[i] = subnode;\n }\n }\n }\n\n return new Selection(subgroups, this._parents);\n}\n","import {Selection} from \"./index\";\nimport selectorAll from \"../selectorAll\";\n\nexport default function(select) {\n if (typeof select !== \"function\") select = selectorAll(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n subgroups.push(select.call(node, node.__data__, i, group));\n parents.push(node);\n }\n }\n }\n\n return new Selection(subgroups, parents);\n}\n","import {Selection} from \"./index\";\nimport matcher from \"../matcher\";\n\nexport default function(match) {\n if (typeof match !== \"function\") match = matcher(match);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {\n if ((node = group[i]) && match.call(node, node.__data__, i, group)) {\n subgroup.push(node);\n }\n }\n }\n\n return new Selection(subgroups, this._parents);\n}\n","import sparse from \"./sparse\";\nimport {Selection} from \"./index\";\n\nexport default function() {\n return new Selection(this._exit || this._groups.map(sparse), this._parents);\n}\n","import {Selection} from \"./index\";\n\nexport default function(selection) {\n\n for (var groups0 = this._groups, groups1 = selection._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {\n for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group0[i] || group1[i]) {\n merge[i] = node;\n }\n }\n }\n\n for (; j < m0; ++j) {\n merges[j] = groups0[j];\n }\n\n return new Selection(merges, this._parents);\n}\n","export default function() {\n\n for (var groups = this._groups, j = -1, m = groups.length; ++j < m;) {\n for (var group = groups[j], i = group.length - 1, next = group[i], node; --i >= 0;) {\n if (node = group[i]) {\n if (next && next !== node.nextSibling) next.parentNode.insertBefore(node, next);\n next = node;\n }\n }\n }\n\n return this;\n}\n","export default function() {\n var callback = arguments[0];\n arguments[0] = this;\n callback.apply(null, arguments);\n return this;\n}\n","export default function() {\n var nodes = new Array(this.size()), i = -1;\n this.each(function() { nodes[++i] = this; });\n return nodes;\n}\n","export default function() {\n\n for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n for (var group = groups[j], i = 0, n = group.length; i < n; ++i) {\n var node = group[i];\n if (node) return node;\n }\n }\n\n return null;\n}\n","export default function() {\n var size = 0;\n this.each(function() { ++size; });\n return size;\n}\n","export default function() {\n return !this.node();\n}\n","export default function(callback) {\n\n for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n for (var group = groups[j], i = 0, n = group.length, node; i < n; ++i) {\n if (node = group[i]) callback.call(node, node.__data__, i, group);\n }\n }\n\n return this;\n}\n","function propertyRemove(name) {\n return function() {\n delete this[name];\n };\n}\n\nfunction propertyConstant(name, value) {\n return function() {\n this[name] = value;\n };\n}\n\nfunction propertyFunction(name, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) delete this[name];\n else this[name] = v;\n };\n}\n\nexport default function(name, value) {\n return arguments.length > 1\n ? this.each((value == null\n ? propertyRemove : typeof value === \"function\"\n ? propertyFunction\n : propertyConstant)(name, value))\n : this.node()[name];\n}\n","import creator from \"../creator\";\n\nexport default function(name) {\n var create = typeof name === \"function\" ? name : creator(name);\n return this.select(function() {\n return this.appendChild(create.apply(this, arguments));\n });\n}\n","export default function(value) {\n return arguments.length\n ? this.property(\"__data__\", value)\n : this.node().__data__;\n}\n","import {Selection, root} from \"./selection/index\";\n\nexport default function(selector) {\n return typeof selector === \"string\"\n ? new Selection([[document.querySelector(selector)]], [document.documentElement])\n : new Selection([[selector]], root);\n}\n","var nextId = 0;\n\nexport default function local() {\n return new Local;\n}\n\nfunction Local() {\n this._ = \"@\" + (++nextId).toString(36);\n}\n\nLocal.prototype = local.prototype = {\n constructor: Local,\n get: function(node) {\n var id = this._;\n while (!(id in node)) if (!(node = node.parentNode)) return;\n return node[id];\n },\n set: function(node, value) {\n return node[this._] = value;\n },\n remove: function(node) {\n return this._ in node && delete node[this._];\n },\n toString: function() {\n return this._;\n }\n};\n","import {event} from \"./selection/on\";\n\nexport default function() {\n var current = event, source;\n while (source = current.sourceEvent) current = source;\n return current;\n}\n","export default function(node, event) {\n var svg = node.ownerSVGElement || node;\n\n if (svg.createSVGPoint) {\n var point = svg.createSVGPoint();\n point.x = event.clientX, point.y = event.clientY;\n point = point.matrixTransform(node.getScreenCTM().inverse());\n return [point.x, point.y];\n }\n\n var rect = node.getBoundingClientRect();\n return [event.clientX - rect.left - node.clientLeft, event.clientY - rect.top - node.clientTop];\n}\n","import sourceEvent from \"./sourceEvent\";\nimport point from \"./point\";\n\nexport default function(node) {\n var event = sourceEvent();\n if (event.changedTouches) event = event.changedTouches[0];\n return point(node, event);\n}\n","import sourceEvent from \"./sourceEvent\";\nimport point from \"./point\";\n\nexport default function(node, touches, identifier) {\n if (arguments.length < 3) identifier = touches, touches = sourceEvent().changedTouches;\n\n for (var i = 0, n = touches ? touches.length : 0, touch; i < n; ++i) {\n if ((touch = touches[i]).identifier === identifier) {\n return point(node, touch);\n }\n }\n\n return null;\n}\n","var noop = {value: function() {}};\n\nfunction dispatch() {\n for (var i = 0, n = arguments.length, _ = {}, t; i < n; ++i) {\n if (!(t = arguments[i] + \"\") || (t in _)) throw new Error(\"illegal type: \" + t);\n _[t] = [];\n }\n return new Dispatch(_);\n}\n\nfunction Dispatch(_) {\n this._ = _;\n}\n\nfunction parseTypenames(typenames, types) {\n return typenames.trim().split(/^|\\s+/).map(function(t) {\n var name = \"\", i = t.indexOf(\".\");\n if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n if (t && !types.hasOwnProperty(t)) throw new Error(\"unknown type: \" + t);\n return {type: t, name: name};\n });\n}\n\nDispatch.prototype = dispatch.prototype = {\n constructor: Dispatch,\n on: function(typename, callback) {\n var _ = this._,\n T = parseTypenames(typename + \"\", _),\n t,\n i = -1,\n n = T.length;\n\n // If no callback was specified, return the callback of the given type and name.\n if (arguments.length < 2) {\n while (++i < n) if ((t = (typename = T[i]).type) && (t = get(_[t], typename.name))) return t;\n return;\n }\n\n // If a type was specified, set the callback for the given type and name.\n // Otherwise, if a null callback was specified, remove callbacks of the given name.\n if (callback != null && typeof callback !== \"function\") throw new Error(\"invalid callback: \" + callback);\n while (++i < n) {\n if (t = (typename = T[i]).type) _[t] = set(_[t], typename.name, callback);\n else if (callback == null) for (t in _) _[t] = set(_[t], typename.name, null);\n }\n\n return this;\n },\n copy: function() {\n var copy = {}, _ = this._;\n for (var t in _) copy[t] = _[t].slice();\n return new Dispatch(copy);\n },\n call: function(type, that) {\n if ((n = arguments.length - 2) > 0) for (var args = new Array(n), i = 0, n, t; i < n; ++i) args[i] = arguments[i + 2];\n if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n for (t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n },\n apply: function(type, that, args) {\n if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n for (var t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n }\n};\n\nfunction get(type, name) {\n for (var i = 0, n = type.length, c; i < n; ++i) {\n if ((c = type[i]).name === name) {\n return c.value;\n }\n }\n}\n\nfunction set(type, name, callback) {\n for (var i = 0, n = type.length; i < n; ++i) {\n if (type[i].name === name) {\n type[i] = noop, type = type.slice(0, i).concat(type.slice(i + 1));\n break;\n }\n }\n if (callback != null) type.push({name: name, value: callback});\n return type;\n}\n\nexport default dispatch;\n","import {event} from \"d3-selection\";\n\nexport function nopropagation() {\n event.stopImmediatePropagation();\n}\n\nexport default function() {\n event.preventDefault();\n event.stopImmediatePropagation();\n}\n","import {select} from \"d3-selection\";\nimport noevent from \"./noevent\";\n\nexport default function(view) {\n var root = view.document.documentElement,\n selection = select(view).on(\"dragstart.drag\", noevent, true);\n if (\"onselectstart\" in root) {\n selection.on(\"selectstart.drag\", noevent, true);\n } else {\n root.__noselect = root.style.MozUserSelect;\n root.style.MozUserSelect = \"none\";\n }\n}\n\nexport function yesdrag(view, noclick) {\n var root = view.document.documentElement,\n selection = select(view).on(\"dragstart.drag\", null);\n if (noclick) {\n selection.on(\"click.drag\", noevent, true);\n setTimeout(function() { selection.on(\"click.drag\", null); }, 0);\n }\n if (\"onselectstart\" in root) {\n selection.on(\"selectstart.drag\", null);\n } else {\n root.style.MozUserSelect = root.__noselect;\n delete root.__noselect;\n }\n}\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","export default function DragEvent(target, type, subject, id, active, x, y, dx, dy, dispatch) {\n this.target = target;\n this.type = type;\n this.subject = subject;\n this.identifier = id;\n this.active = active;\n this.x = x;\n this.y = y;\n this.dx = dx;\n this.dy = dy;\n this._ = dispatch;\n}\n\nDragEvent.prototype.on = function() {\n var value = this._.on.apply(this._, arguments);\n return value === this._ ? this : value;\n};\n","import {dispatch} from \"d3-dispatch\";\nimport {event, customEvent, select, mouse, touch} from \"d3-selection\";\nimport nodrag, {yesdrag} from \"./nodrag\";\nimport noevent, {nopropagation} from \"./noevent\";\nimport constant from \"./constant\";\nimport DragEvent from \"./event\";\n\n// Ignore right-click, since that should open the context menu.\nfunction defaultFilter() {\n return !event.button;\n}\n\nfunction defaultContainer() {\n return this.parentNode;\n}\n\nfunction defaultSubject(d) {\n return d == null ? {x: event.x, y: event.y} : d;\n}\n\nfunction defaultTouchable() {\n return \"ontouchstart\" in this;\n}\n\nexport default function() {\n var filter = defaultFilter,\n container = defaultContainer,\n subject = defaultSubject,\n touchable = defaultTouchable,\n gestures = {},\n listeners = dispatch(\"start\", \"drag\", \"end\"),\n active = 0,\n mousedownx,\n mousedowny,\n mousemoving,\n touchending,\n clickDistance2 = 0;\n\n function drag(selection) {\n selection\n .on(\"mousedown.drag\", mousedowned)\n .filter(touchable)\n .on(\"touchstart.drag\", touchstarted)\n .on(\"touchmove.drag\", touchmoved)\n .on(\"touchend.drag touchcancel.drag\", touchended)\n .style(\"touch-action\", \"none\")\n .style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\");\n }\n\n function mousedowned() {\n if (touchending || !filter.apply(this, arguments)) return;\n var gesture = beforestart(\"mouse\", container.apply(this, arguments), mouse, this, arguments);\n if (!gesture) return;\n select(event.view).on(\"mousemove.drag\", mousemoved, true).on(\"mouseup.drag\", mouseupped, true);\n nodrag(event.view);\n nopropagation();\n mousemoving = false;\n mousedownx = event.clientX;\n mousedowny = event.clientY;\n gesture(\"start\");\n }\n\n function mousemoved() {\n noevent();\n if (!mousemoving) {\n var dx = event.clientX - mousedownx, dy = event.clientY - mousedowny;\n mousemoving = dx * dx + dy * dy > clickDistance2;\n }\n gestures.mouse(\"drag\");\n }\n\n function mouseupped() {\n select(event.view).on(\"mousemove.drag mouseup.drag\", null);\n yesdrag(event.view, mousemoving);\n noevent();\n gestures.mouse(\"end\");\n }\n\n function touchstarted() {\n if (!filter.apply(this, arguments)) return;\n var touches = event.changedTouches,\n c = container.apply(this, arguments),\n n = touches.length, i, gesture;\n\n for (i = 0; i < n; ++i) {\n if (gesture = beforestart(touches[i].identifier, c, touch, this, arguments)) {\n nopropagation();\n gesture(\"start\");\n }\n }\n }\n\n function touchmoved() {\n var touches = event.changedTouches,\n n = touches.length, i, gesture;\n\n for (i = 0; i < n; ++i) {\n if (gesture = gestures[touches[i].identifier]) {\n noevent();\n gesture(\"drag\");\n }\n }\n }\n\n function touchended() {\n var touches = event.changedTouches,\n n = touches.length, i, gesture;\n\n if (touchending) clearTimeout(touchending);\n touchending = setTimeout(function() { touchending = null; }, 500); // Ghost clicks are delayed!\n for (i = 0; i < n; ++i) {\n if (gesture = gestures[touches[i].identifier]) {\n nopropagation();\n gesture(\"end\");\n }\n }\n }\n\n function beforestart(id, container, point, that, args) {\n var p = point(container, id), s, dx, dy,\n sublisteners = listeners.copy();\n\n if (!customEvent(new DragEvent(drag, \"beforestart\", s, id, active, p[0], p[1], 0, 0, sublisteners), function() {\n if ((event.subject = s = subject.apply(that, args)) == null) return false;\n dx = s.x - p[0] || 0;\n dy = s.y - p[1] || 0;\n return true;\n })) return;\n\n return function gesture(type) {\n var p0 = p, n;\n switch (type) {\n case \"start\": gestures[id] = gesture, n = active++; break;\n case \"end\": delete gestures[id], --active; // nobreak\n case \"drag\": p = point(container, id), n = active; break;\n }\n customEvent(new DragEvent(drag, type, s, id, n, p[0] + dx, p[1] + dy, p[0] - p0[0], p[1] - p0[1], sublisteners), sublisteners.apply, sublisteners, [type, that, args]);\n };\n }\n\n drag.filter = function(_) {\n return arguments.length ? (filter = typeof _ === \"function\" ? _ : constant(!!_), drag) : filter;\n };\n\n drag.container = function(_) {\n return arguments.length ? (container = typeof _ === \"function\" ? _ : constant(_), drag) : container;\n };\n\n drag.subject = function(_) {\n return arguments.length ? (subject = typeof _ === \"function\" ? _ : constant(_), drag) : subject;\n };\n\n drag.touchable = function(_) {\n return arguments.length ? (touchable = typeof _ === \"function\" ? _ : constant(!!_), drag) : touchable;\n };\n\n drag.on = function() {\n var value = listeners.on.apply(listeners, arguments);\n return value === listeners ? drag : value;\n };\n\n drag.clickDistance = function(_) {\n return arguments.length ? (clickDistance2 = (_ = +_) * _, drag) : Math.sqrt(clickDistance2);\n };\n\n return drag;\n}\n","var frame = 0, // is an animation frame pending?\n timeout = 0, // is a timeout pending?\n interval = 0, // are any timers active?\n pokeDelay = 1000, // how frequently we check for clock skew\n taskHead,\n taskTail,\n clockLast = 0,\n clockNow = 0,\n clockSkew = 0,\n clock = typeof performance === \"object\" && performance.now ? performance : Date,\n setFrame = typeof window === \"object\" && window.requestAnimationFrame ? window.requestAnimationFrame.bind(window) : function(f) { setTimeout(f, 17); };\n\nexport function now() {\n return clockNow || (setFrame(clearNow), clockNow = clock.now() + clockSkew);\n}\n\nfunction clearNow() {\n clockNow = 0;\n}\n\nexport function Timer() {\n this._call =\n this._time =\n this._next = null;\n}\n\nTimer.prototype = timer.prototype = {\n constructor: Timer,\n restart: function(callback, delay, time) {\n if (typeof callback !== \"function\") throw new TypeError(\"callback is not a function\");\n time = (time == null ? now() : +time) + (delay == null ? 0 : +delay);\n if (!this._next && taskTail !== this) {\n if (taskTail) taskTail._next = this;\n else taskHead = this;\n taskTail = this;\n }\n this._call = callback;\n this._time = time;\n sleep();\n },\n stop: function() {\n if (this._call) {\n this._call = null;\n this._time = Infinity;\n sleep();\n }\n }\n};\n\nexport function timer(callback, delay, time) {\n var t = new Timer;\n t.restart(callback, delay, time);\n return t;\n}\n\nexport function timerFlush() {\n now(); // Get the current time, if not already set.\n ++frame; // Pretend we’ve set an alarm, if we haven’t already.\n var t = taskHead, e;\n while (t) {\n if ((e = clockNow - t._time) >= 0) t._call.call(null, e);\n t = t._next;\n }\n --frame;\n}\n\nfunction wake() {\n clockNow = (clockLast = clock.now()) + clockSkew;\n frame = timeout = 0;\n try {\n timerFlush();\n } finally {\n frame = 0;\n nap();\n clockNow = 0;\n }\n}\n\nfunction poke() {\n var now = clock.now(), delay = now - clockLast;\n if (delay > pokeDelay) clockSkew -= delay, clockLast = now;\n}\n\nfunction nap() {\n var t0, t1 = taskHead, t2, time = Infinity;\n while (t1) {\n if (t1._call) {\n if (time > t1._time) time = t1._time;\n t0 = t1, t1 = t1._next;\n } else {\n t2 = t1._next, t1._next = null;\n t1 = t0 ? t0._next = t2 : taskHead = t2;\n }\n }\n taskTail = t0;\n sleep(time);\n}\n\nfunction sleep(time) {\n if (frame) return; // Soonest alarm already set, or will be.\n if (timeout) timeout = clearTimeout(timeout);\n var delay = time - clockNow; // Strictly less than if we recomputed clockNow.\n if (delay > 24) {\n if (time < Infinity) timeout = setTimeout(wake, time - clock.now() - clockSkew);\n if (interval) interval = clearInterval(interval);\n } else {\n if (!interval) clockLast = clock.now(), interval = setInterval(poke, pokeDelay);\n frame = 1, setFrame(wake);\n }\n}\n","import {Timer} from \"./timer\";\n\nexport default function(callback, delay, time) {\n var t = new Timer;\n delay = delay == null ? 0 : +delay;\n t.restart(function(elapsed) {\n t.stop();\n callback(elapsed + delay);\n }, delay, time);\n return t;\n}\n","import {dispatch} from \"d3-dispatch\";\nimport {timer, timeout} from \"d3-timer\";\n\nvar emptyOn = dispatch(\"start\", \"end\", \"interrupt\");\nvar emptyTween = [];\n\nexport var CREATED = 0;\nexport var SCHEDULED = 1;\nexport var STARTING = 2;\nexport var STARTED = 3;\nexport var RUNNING = 4;\nexport var ENDING = 5;\nexport var ENDED = 6;\n\nexport default function(node, name, id, index, group, timing) {\n var schedules = node.__transition;\n if (!schedules) node.__transition = {};\n else if (id in schedules) return;\n create(node, id, {\n name: name,\n index: index, // For context during callback.\n group: group, // For context during callback.\n on: emptyOn,\n tween: emptyTween,\n time: timing.time,\n delay: timing.delay,\n duration: timing.duration,\n ease: timing.ease,\n timer: null,\n state: CREATED\n });\n}\n\nexport function init(node, id) {\n var schedule = get(node, id);\n if (schedule.state > CREATED) throw new Error(\"too late; already scheduled\");\n return schedule;\n}\n\nexport function set(node, id) {\n var schedule = get(node, id);\n if (schedule.state > STARTING) throw new Error(\"too late; already started\");\n return schedule;\n}\n\nexport function get(node, id) {\n var schedule = node.__transition;\n if (!schedule || !(schedule = schedule[id])) throw new Error(\"transition not found\");\n return schedule;\n}\n\nfunction create(node, id, self) {\n var schedules = node.__transition,\n tween;\n\n // Initialize the self timer when the transition is created.\n // Note the actual delay is not known until the first callback!\n schedules[id] = self;\n self.timer = timer(schedule, 0, self.time);\n\n function schedule(elapsed) {\n self.state = SCHEDULED;\n self.timer.restart(start, self.delay, self.time);\n\n // If the elapsed delay is less than our first sleep, start immediately.\n if (self.delay <= elapsed) start(elapsed - self.delay);\n }\n\n function start(elapsed) {\n var i, j, n, o;\n\n // If the state is not SCHEDULED, then we previously errored on start.\n if (self.state !== SCHEDULED) return stop();\n\n for (i in schedules) {\n o = schedules[i];\n if (o.name !== self.name) continue;\n\n // While this element already has a starting transition during this frame,\n // defer starting an interrupting transition until that transition has a\n // chance to tick (and possibly end); see d3/d3-transition#54!\n if (o.state === STARTED) return timeout(start);\n\n // Interrupt the active transition, if any.\n // Dispatch the interrupt event.\n if (o.state === RUNNING) {\n o.state = ENDED;\n o.timer.stop();\n o.on.call(\"interrupt\", node, node.__data__, o.index, o.group);\n delete schedules[i];\n }\n\n // Cancel any pre-empted transitions. No interrupt event is dispatched\n // because the cancelled transitions never started. Note that this also\n // removes this transition from the pending list!\n else if (+i < id) {\n o.state = ENDED;\n o.timer.stop();\n delete schedules[i];\n }\n }\n\n // Defer the first tick to end of the current frame; see d3/d3#1576.\n // Note the transition may be canceled after start and before the first tick!\n // Note this must be scheduled before the start event; see d3/d3-transition#16!\n // Assuming this is successful, subsequent callbacks go straight to tick.\n timeout(function() {\n if (self.state === STARTED) {\n self.state = RUNNING;\n self.timer.restart(tick, self.delay, self.time);\n tick(elapsed);\n }\n });\n\n // Dispatch the start event.\n // Note this must be done before the tween are initialized.\n self.state = STARTING;\n self.on.call(\"start\", node, node.__data__, self.index, self.group);\n if (self.state !== STARTING) return; // interrupted\n self.state = STARTED;\n\n // Initialize the tween, deleting null tween.\n tween = new Array(n = self.tween.length);\n for (i = 0, j = -1; i < n; ++i) {\n if (o = self.tween[i].value.call(node, node.__data__, self.index, self.group)) {\n tween[++j] = o;\n }\n }\n tween.length = j + 1;\n }\n\n function tick(elapsed) {\n var t = elapsed < self.duration ? self.ease.call(null, elapsed / self.duration) : (self.timer.restart(stop), self.state = ENDING, 1),\n i = -1,\n n = tween.length;\n\n while (++i < n) {\n tween[i].call(null, t);\n }\n\n // Dispatch the end event.\n if (self.state === ENDING) {\n self.on.call(\"end\", node, node.__data__, self.index, self.group);\n stop();\n }\n }\n\n function stop() {\n self.state = ENDED;\n self.timer.stop();\n delete schedules[id];\n for (var i in schedules) return; // eslint-disable-line no-unused-vars\n delete node.__transition;\n }\n}\n","import {get, set} from \"./schedule\";\n\nfunction tweenRemove(id, name) {\n var tween0, tween1;\n return function() {\n var schedule = set(this, id),\n tween = schedule.tween;\n\n // If this node shared tween with the previous node,\n // just assign the updated shared tween and we’re done!\n // Otherwise, copy-on-write.\n if (tween !== tween0) {\n tween1 = tween0 = tween;\n for (var i = 0, n = tween1.length; i < n; ++i) {\n if (tween1[i].name === name) {\n tween1 = tween1.slice();\n tween1.splice(i, 1);\n break;\n }\n }\n }\n\n schedule.tween = tween1;\n };\n}\n\nfunction tweenFunction(id, name, value) {\n var tween0, tween1;\n if (typeof value !== \"function\") throw new Error;\n return function() {\n var schedule = set(this, id),\n tween = schedule.tween;\n\n // If this node shared tween with the previous node,\n // just assign the updated shared tween and we’re done!\n // Otherwise, copy-on-write.\n if (tween !== tween0) {\n tween1 = (tween0 = tween).slice();\n for (var t = {name: name, value: value}, i = 0, n = tween1.length; i < n; ++i) {\n if (tween1[i].name === name) {\n tween1[i] = t;\n break;\n }\n }\n if (i === n) tween1.push(t);\n }\n\n schedule.tween = tween1;\n };\n}\n\nexport default function(name, value) {\n var id = this._id;\n\n name += \"\";\n\n if (arguments.length < 2) {\n var tween = get(this.node(), id).tween;\n for (var i = 0, n = tween.length, t; i < n; ++i) {\n if ((t = tween[i]).name === name) {\n return t.value;\n }\n }\n return null;\n }\n\n return this.each((value == null ? tweenRemove : tweenFunction)(id, name, value));\n}\n\nexport function tweenValue(transition, name, value) {\n var id = transition._id;\n\n transition.each(function() {\n var schedule = set(this, id);\n (schedule.value || (schedule.value = {}))[name] = value.apply(this, arguments);\n });\n\n return function(node) {\n return get(node, id).value[name];\n };\n}\n","import {color} from \"d3-color\";\nimport {interpolateNumber, interpolateRgb, interpolateString} from \"d3-interpolate\";\n\nexport default function(a, b) {\n var c;\n return (typeof b === \"number\" ? interpolateNumber\n : b instanceof color ? interpolateRgb\n : (c = color(b)) ? (b = c, interpolateRgb)\n : interpolateString)(a, b);\n}\n","function removeFunction(id) {\n return function() {\n var parent = this.parentNode;\n for (var i in this.__transition) if (+i !== id) return;\n if (parent) parent.removeChild(this);\n };\n}\n\nexport default function() {\n return this.on(\"end.remove\", removeFunction(this._id));\n}\n","import {selection} from \"d3-selection\";\n\nvar Selection = selection.prototype.constructor;\n\nexport default function() {\n return new Selection(this._groups, this._parents);\n}\n","import {tweenValue} from \"./tween\";\n\nfunction textConstant(value) {\n return function() {\n this.textContent = value;\n };\n}\n\nfunction textFunction(value) {\n return function() {\n var value1 = value(this);\n this.textContent = value1 == null ? \"\" : value1;\n };\n}\n\nexport default function(value) {\n return this.tween(\"text\", typeof value === \"function\"\n ? textFunction(tweenValue(this, \"text\", value))\n : textConstant(value == null ? \"\" : value + \"\"));\n}\n","import {selection} from \"d3-selection\";\nimport transition_attr from \"./attr\";\nimport transition_attrTween from \"./attrTween\";\nimport transition_delay from \"./delay\";\nimport transition_duration from \"./duration\";\nimport transition_ease from \"./ease\";\nimport transition_filter from \"./filter\";\nimport transition_merge from \"./merge\";\nimport transition_on from \"./on\";\nimport transition_remove from \"./remove\";\nimport transition_select from \"./select\";\nimport transition_selectAll from \"./selectAll\";\nimport transition_selection from \"./selection\";\nimport transition_style from \"./style\";\nimport transition_styleTween from \"./styleTween\";\nimport transition_text from \"./text\";\nimport transition_transition from \"./transition\";\nimport transition_tween from \"./tween\";\n\nvar id = 0;\n\nexport function Transition(groups, parents, name, id) {\n this._groups = groups;\n this._parents = parents;\n this._name = name;\n this._id = id;\n}\n\nexport default function transition(name) {\n return selection().transition(name);\n}\n\nexport function newId() {\n return ++id;\n}\n\nvar selection_prototype = selection.prototype;\n\nTransition.prototype = transition.prototype = {\n constructor: Transition,\n select: transition_select,\n selectAll: transition_selectAll,\n filter: transition_filter,\n merge: transition_merge,\n selection: transition_selection,\n transition: transition_transition,\n call: selection_prototype.call,\n nodes: selection_prototype.nodes,\n node: selection_prototype.node,\n size: selection_prototype.size,\n empty: selection_prototype.empty,\n each: selection_prototype.each,\n on: transition_on,\n attr: transition_attr,\n attrTween: transition_attrTween,\n style: transition_style,\n styleTween: transition_styleTween,\n text: transition_text,\n remove: transition_remove,\n tween: transition_tween,\n delay: transition_delay,\n duration: transition_duration,\n ease: transition_ease\n};\n","import {selector} from \"d3-selection\";\nimport {Transition} from \"./index\";\nimport schedule, {get} from \"./schedule\";\n\nexport default function(select) {\n var name = this._name,\n id = this._id;\n\n if (typeof select !== \"function\") select = selector(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {\n if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {\n if (\"__data__\" in node) subnode.__data__ = node.__data__;\n subgroup[i] = subnode;\n schedule(subgroup[i], name, id, i, subgroup, get(node, id));\n }\n }\n }\n\n return new Transition(subgroups, this._parents, name, id);\n}\n","import {selectorAll} from \"d3-selection\";\nimport {Transition} from \"./index\";\nimport schedule, {get} from \"./schedule\";\n\nexport default function(select) {\n var name = this._name,\n id = this._id;\n\n if (typeof select !== \"function\") select = selectorAll(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n for (var children = select.call(node, node.__data__, i, group), child, inherit = get(node, id), k = 0, l = children.length; k < l; ++k) {\n if (child = children[k]) {\n schedule(child, name, id, k, children, inherit);\n }\n }\n subgroups.push(children);\n parents.push(node);\n }\n }\n }\n\n return new Transition(subgroups, parents, name, id);\n}\n","import {matcher} from \"d3-selection\";\nimport {Transition} from \"./index\";\n\nexport default function(match) {\n if (typeof match !== \"function\") match = matcher(match);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {\n if ((node = group[i]) && match.call(node, node.__data__, i, group)) {\n subgroup.push(node);\n }\n }\n }\n\n return new Transition(subgroups, this._parents, this._name, this._id);\n}\n","import {Transition} from \"./index\";\n\nexport default function(transition) {\n if (transition._id !== this._id) throw new Error;\n\n for (var groups0 = this._groups, groups1 = transition._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {\n for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group0[i] || group1[i]) {\n merge[i] = node;\n }\n }\n }\n\n for (; j < m0; ++j) {\n merges[j] = groups0[j];\n }\n\n return new Transition(merges, this._parents, this._name, this._id);\n}\n","import {Transition, newId} from \"./index\";\nimport schedule, {get} from \"./schedule\";\n\nexport default function() {\n var name = this._name,\n id0 = this._id,\n id1 = newId();\n\n for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n var inherit = get(node, id0);\n schedule(node, name, id1, i, group, {\n time: inherit.time + inherit.delay + inherit.duration,\n delay: 0,\n duration: inherit.duration,\n ease: inherit.ease\n });\n }\n }\n }\n\n return new Transition(groups, this._parents, name, id1);\n}\n","import {get, set, init} from \"./schedule\";\n\nfunction start(name) {\n return (name + \"\").trim().split(/^|\\s+/).every(function(t) {\n var i = t.indexOf(\".\");\n if (i >= 0) t = t.slice(0, i);\n return !t || t === \"start\";\n });\n}\n\nfunction onFunction(id, name, listener) {\n var on0, on1, sit = start(name) ? init : set;\n return function() {\n var schedule = sit(this, id),\n on = schedule.on;\n\n // If this node shared a dispatch with the previous node,\n // just assign the updated shared dispatch and we’re done!\n // Otherwise, copy-on-write.\n if (on !== on0) (on1 = (on0 = on).copy()).on(name, listener);\n\n schedule.on = on1;\n };\n}\n\nexport default function(name, listener) {\n var id = this._id;\n\n return arguments.length < 2\n ? get(this.node(), id).on.on(name)\n : this.each(onFunction(id, name, listener));\n}\n","import {interpolateTransformSvg as interpolateTransform} from \"d3-interpolate\";\nimport {namespace} from \"d3-selection\";\nimport {tweenValue} from \"./tween\";\nimport interpolate from \"./interpolate\";\n\nfunction attrRemove(name) {\n return function() {\n this.removeAttribute(name);\n };\n}\n\nfunction attrRemoveNS(fullname) {\n return function() {\n this.removeAttributeNS(fullname.space, fullname.local);\n };\n}\n\nfunction attrConstant(name, interpolate, value1) {\n var value00,\n interpolate0;\n return function() {\n var value0 = this.getAttribute(name);\n return value0 === value1 ? null\n : value0 === value00 ? interpolate0\n : interpolate0 = interpolate(value00 = value0, value1);\n };\n}\n\nfunction attrConstantNS(fullname, interpolate, value1) {\n var value00,\n interpolate0;\n return function() {\n var value0 = this.getAttributeNS(fullname.space, fullname.local);\n return value0 === value1 ? null\n : value0 === value00 ? interpolate0\n : interpolate0 = interpolate(value00 = value0, value1);\n };\n}\n\nfunction attrFunction(name, interpolate, value) {\n var value00,\n value10,\n interpolate0;\n return function() {\n var value0, value1 = value(this);\n if (value1 == null) return void this.removeAttribute(name);\n value0 = this.getAttribute(name);\n return value0 === value1 ? null\n : value0 === value00 && value1 === value10 ? interpolate0\n : interpolate0 = interpolate(value00 = value0, value10 = value1);\n };\n}\n\nfunction attrFunctionNS(fullname, interpolate, value) {\n var value00,\n value10,\n interpolate0;\n return function() {\n var value0, value1 = value(this);\n if (value1 == null) return void this.removeAttributeNS(fullname.space, fullname.local);\n value0 = this.getAttributeNS(fullname.space, fullname.local);\n return value0 === value1 ? null\n : value0 === value00 && value1 === value10 ? interpolate0\n : interpolate0 = interpolate(value00 = value0, value10 = value1);\n };\n}\n\nexport default function(name, value) {\n var fullname = namespace(name), i = fullname === \"transform\" ? interpolateTransform : interpolate;\n return this.attrTween(name, typeof value === \"function\"\n ? (fullname.local ? attrFunctionNS : attrFunction)(fullname, i, tweenValue(this, \"attr.\" + name, value))\n : value == null ? (fullname.local ? attrRemoveNS : attrRemove)(fullname)\n : (fullname.local ? attrConstantNS : attrConstant)(fullname, i, value + \"\"));\n}\n","import {namespace} from \"d3-selection\";\n\nfunction attrTweenNS(fullname, value) {\n function tween() {\n var node = this, i = value.apply(node, arguments);\n return i && function(t) {\n node.setAttributeNS(fullname.space, fullname.local, i(t));\n };\n }\n tween._value = value;\n return tween;\n}\n\nfunction attrTween(name, value) {\n function tween() {\n var node = this, i = value.apply(node, arguments);\n return i && function(t) {\n node.setAttribute(name, i(t));\n };\n }\n tween._value = value;\n return tween;\n}\n\nexport default function(name, value) {\n var key = \"attr.\" + name;\n if (arguments.length < 2) return (key = this.tween(key)) && key._value;\n if (value == null) return this.tween(key, null);\n if (typeof value !== \"function\") throw new Error;\n var fullname = namespace(name);\n return this.tween(key, (fullname.local ? attrTweenNS : attrTween)(fullname, value));\n}\n","import {interpolateTransformCss as interpolateTransform} from \"d3-interpolate\";\nimport {style} from \"d3-selection\";\nimport {tweenValue} from \"./tween\";\nimport interpolate from \"./interpolate\";\n\nfunction styleRemove(name, interpolate) {\n var value00,\n value10,\n interpolate0;\n return function() {\n var value0 = style(this, name),\n value1 = (this.style.removeProperty(name), style(this, name));\n return value0 === value1 ? null\n : value0 === value00 && value1 === value10 ? interpolate0\n : interpolate0 = interpolate(value00 = value0, value10 = value1);\n };\n}\n\nfunction styleRemoveEnd(name) {\n return function() {\n this.style.removeProperty(name);\n };\n}\n\nfunction styleConstant(name, interpolate, value1) {\n var value00,\n interpolate0;\n return function() {\n var value0 = style(this, name);\n return value0 === value1 ? null\n : value0 === value00 ? interpolate0\n : interpolate0 = interpolate(value00 = value0, value1);\n };\n}\n\nfunction styleFunction(name, interpolate, value) {\n var value00,\n value10,\n interpolate0;\n return function() {\n var value0 = style(this, name),\n value1 = value(this);\n if (value1 == null) value1 = (this.style.removeProperty(name), style(this, name));\n return value0 === value1 ? null\n : value0 === value00 && value1 === value10 ? interpolate0\n : interpolate0 = interpolate(value00 = value0, value10 = value1);\n };\n}\n\nexport default function(name, value, priority) {\n var i = (name += \"\") === \"transform\" ? interpolateTransform : interpolate;\n return value == null ? this\n .styleTween(name, styleRemove(name, i))\n .on(\"end.style.\" + name, styleRemoveEnd(name))\n : this.styleTween(name, typeof value === \"function\"\n ? styleFunction(name, i, tweenValue(this, \"style.\" + name, value))\n : styleConstant(name, i, value + \"\"), priority);\n}\n","function styleTween(name, value, priority) {\n function tween() {\n var node = this, i = value.apply(node, arguments);\n return i && function(t) {\n node.style.setProperty(name, i(t), priority);\n };\n }\n tween._value = value;\n return tween;\n}\n\nexport default function(name, value, priority) {\n var key = \"style.\" + (name += \"\");\n if (arguments.length < 2) return (key = this.tween(key)) && key._value;\n if (value == null) return this.tween(key, null);\n if (typeof value !== \"function\") throw new Error;\n return this.tween(key, styleTween(name, value, priority == null ? \"\" : priority));\n}\n","import {get, init} from \"./schedule\";\n\nfunction delayFunction(id, value) {\n return function() {\n init(this, id).delay = +value.apply(this, arguments);\n };\n}\n\nfunction delayConstant(id, value) {\n return value = +value, function() {\n init(this, id).delay = value;\n };\n}\n\nexport default function(value) {\n var id = this._id;\n\n return arguments.length\n ? this.each((typeof value === \"function\"\n ? delayFunction\n : delayConstant)(id, value))\n : get(this.node(), id).delay;\n}\n","import {get, set} from \"./schedule\";\n\nfunction durationFunction(id, value) {\n return function() {\n set(this, id).duration = +value.apply(this, arguments);\n };\n}\n\nfunction durationConstant(id, value) {\n return value = +value, function() {\n set(this, id).duration = value;\n };\n}\n\nexport default function(value) {\n var id = this._id;\n\n return arguments.length\n ? this.each((typeof value === \"function\"\n ? durationFunction\n : durationConstant)(id, value))\n : get(this.node(), id).duration;\n}\n","import {get, set} from \"./schedule\";\n\nfunction easeConstant(id, value) {\n if (typeof value !== \"function\") throw new Error;\n return function() {\n set(this, id).ease = value;\n };\n}\n\nexport default function(value) {\n var id = this._id;\n\n return arguments.length\n ? this.each(easeConstant(id, value))\n : get(this.node(), id).ease;\n}\n","import {Transition, newId} from \"../transition/index\";\nimport schedule from \"../transition/schedule\";\nimport {easeCubicInOut} from \"d3-ease\";\nimport {now} from \"d3-timer\";\n\nvar defaultTiming = {\n time: null, // Set on use.\n delay: 0,\n duration: 250,\n ease: easeCubicInOut\n};\n\nfunction inherit(node, id) {\n var timing;\n while (!(timing = node.__transition) || !(timing = timing[id])) {\n if (!(node = node.parentNode)) {\n return defaultTiming.time = now(), defaultTiming;\n }\n }\n return timing;\n}\n\nexport default function(name) {\n var id,\n timing;\n\n if (name instanceof Transition) {\n id = name._id, name = name._name;\n } else {\n id = newId(), (timing = defaultTiming).time = now(), name = name == null ? null : name + \"\";\n }\n\n for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n schedule(node, name, id, i, group, timing || inherit(node, id));\n }\n }\n }\n\n return new Transition(groups, this._parents, name, id);\n}\n","import {selection} from \"d3-selection\";\nimport selection_interrupt from \"./interrupt\";\nimport selection_transition from \"./transition\";\n\nselection.prototype.interrupt = selection_interrupt;\nselection.prototype.transition = selection_transition;\n","import interrupt from \"../interrupt\";\n\nexport default function(name) {\n return this.each(function() {\n interrupt(this, name);\n });\n}\n","import {STARTING, ENDING, ENDED} from \"./transition/schedule\";\n\nexport default function(node, name) {\n var schedules = node.__transition,\n schedule,\n active,\n empty = true,\n i;\n\n if (!schedules) return;\n\n name = name == null ? null : name + \"\";\n\n for (i in schedules) {\n if ((schedule = schedules[i]).name !== name) { empty = false; continue; }\n active = schedule.state > STARTING && schedule.state < ENDING;\n schedule.state = ENDED;\n schedule.timer.stop();\n if (active) schedule.on.call(\"interrupt\", node, node.__data__, schedule.index, schedule.group);\n delete schedules[i];\n }\n\n if (empty) delete node.__transition;\n}\n","import {Transition} from \"./transition/index\";\nimport {SCHEDULED} from \"./transition/schedule\";\n\nvar root = [null];\n\nexport default function(node, name) {\n var schedules = node.__transition,\n schedule,\n i;\n\n if (schedules) {\n name = name == null ? null : name + \"\";\n for (i in schedules) {\n if ((schedule = schedules[i]).state > SCHEDULED && schedule.name === name) {\n return new Transition([[node]], root, name, +i);\n }\n }\n }\n\n return null;\n}\n","import { select, event as d3event, selection, clientPoint } from 'd3-selection';\nimport { drag as d3drag } from 'd3-drag';\nimport 'd3-transition';\nimport { mergeRecursive } from './common-utils';\n/**\n * This function takes a raw DOM element or\n * a string and returns a d3 selection of that element.\n *\n * @param {HTMLElement | string} element The element to wrap in d3 selection.\n * @return {Selection} Instance of d3 selection.\n */\nconst selectElement = element => select(element);\n\n/**\n * It creates a new d3 element on the parent element\n * @param {Selection} parent Element to which the element is to be appended\n * @param {Object} elemType Type of the new element\n * @param {Array} data Data for the new element\n * @param {Object} selector classname/id/tagname for the element\n * @return {HTMLElement} Newly Created Element\n */\nconst makeElement = (parent, elemType, data, selector, callbacks = {}, keyFn) => {\n if ((parent instanceof HTMLElement || parent instanceof SVGElement)) {\n parent = selectElement(parent);\n }\n\n const selectorVal = selector ? selector[0] : null;\n let selectorType = null;\n let actualSelector = null;\n let element = null;\n let enterSel = null;\n let mergeSel = null;\n let filter;\n if (selectorVal) {\n if (selectorVal === '#') {\n selectorType = 'id';\n actualSelector = selector;\n } else {\n selectorType = 'class';\n actualSelector = selector[0] === '.' ? selector : `.${selector}`;\n }\n } else {\n actualSelector = elemType;\n filter = true;\n }\n element = parent.selectAll(actualSelector);\n\n filter && (element = element.filter(function () {\n return this.parentNode === parent.node();\n }));\n element = element.data(data, keyFn);\n\n enterSel = element.enter()\n .append(elemType || 'div');\n callbacks.enter && enterSel.each(function (...params) {\n callbacks.enter(selectElement(this), ...params);\n });\n\n mergeSel = enterSel.merge(element);\n callbacks.update && mergeSel.each(function (...params) {\n callbacks.update(selectElement(this), ...params);\n });\n if (selectorType === 'class') {\n mergeSel.classed(selectorVal === '.' ? selector.substring(1, selector.length) : selector, true);\n } else if (selectorType === 'id') {\n mergeSel.attr('id', selector.substring(1, selector.length));\n }\n const exitSel = element.exit();\n\n if (callbacks.exit) {\n exitSel.each(function (...params) {\n callbacks.exit(selectElement(this), ...params);\n });\n } else {\n exitSel.remove();\n }\n return mergeSel;\n};\n\n/**\n * This function applies styles to an element\n * @param {Object} elem Element Selection\n * @param {Object} styleObj Style Object to be applied\n * @return {Element} Newly Created Element\n*/\nconst applyStyle = (elem, styleObj) => {\n Object.entries(styleObj).forEach((d) => {\n elem.style(d[0], d[1]);\n }, this);\n return elem;\n};\n\n/**\n * This function appends a dom element in another element.\n * @param {HTMLElement | SVGElement} element1 The element in which to append the second element\n * @param {HTMLElement | SVGElement} element2 The element which will be appended.\n */\nconst appendElement = (element1, element2) => {\n element1.appendChild(element2);\n};\n\n/**\n * Sets the attributes to the element.\n * @param {HTMLElement | SVGElement} element Element on which attributes will be applied\n * @param {Object} attrs Attributes which need to be applied\n */\nconst setElementAttrs = (element, attrs) => {\n for (const key in attrs) {\n if ({}.hasOwnProperty.call(attrs, key)) {\n element.attr(key, attrs[key]);\n }\n }\n};\n\n/**\n * Sets attributes in the svg or html element\n * @param {SVGElement | HTMLElement} element The element on which attrs will be applied\n * @param {Array.} attrs Array of attributes\n * @param {string} className className of elements to select.\n * @return {SVGElement | HTMLElement} SVGElement or html element.\n */\nconst setAttrs = (element, attrs, className) => {\n if (!(element instanceof selection)) {\n element = selectElement(element);\n }\n className !== undefined ? element.selectAll(`.${className}`).each(function () {\n setElementAttrs(select(this), attrs);\n }) : setElementAttrs(element, attrs);\n return element;\n};\n\n/**\n * Adds a css class to elements which passes the filter function.If filter function is not given,\n * then all elements will be applied the class.\n * @param {HTMLElement | SVGElement} element element\n * @param {string} className css class\n * @param {string} selector css selector\n * @param {Function} filterFn filter method.\n */\nconst addClass = (element, className, selector, filterFn) => {\n select(element).selectAll(selector).each(function (data) {\n const elem = select(this);\n filterFn ? filterFn(data) && elem.classed(className, true) :\n elem.classed(className, true);\n });\n};\n\n/**\n * Removes the css class from elements which passes the filter function.If filter function is not given,\n * then all elements will be applied the class.\n * @param {HTMLElement | SVGElement} element element\n * @param {string} className css class\n * @param {string} selector css selector\n * @param {Function} filterFn filter method.\n */\nconst removeClass = (element, className, selector, filterFn) => {\n select(element).selectAll(selector).each(function (data) {\n const elem = select(this);\n filterFn ? filterFn(data) && elem.classed(className, false) :\n elem.classed(className, false);\n });\n};\n\n/**\n * Sets styles in the svg or html element\n * @param {SVGElement | HTMLElement} element The element on which styles will be applied\n * @param {Array.} styles Array of style attributes\n * @return {SVGElement | HTMLElement} SVGElement or html element.\n */\nconst setStyles = (element, styles) => {\n if (!(element instanceof selection)) {\n element = selectElement(element);\n }\n for (const key in styles) {\n if ({}.hasOwnProperty.call(styles, key)) {\n element.style(key, styles[key]);\n }\n }\n return element;\n};\n\n/**\n * Creates svg or html elements by binding data to the selection.Removes extra elements\n * on exit.\n * @param {Object} params Parameter object\n * @param {SVGElement | HTMLElement} params.container Container element where all elements will be appended\n * @param {string} params.selector Selector by which elements will be selected from dom\n * @param {string} params.append Append tag\n * @param {Function} params.each Function which will be executed for each data point and element.\n */\nconst createElements = (params) => {\n const container = select(params.container);\n let data;\n let sel;\n\n data = params.data;\n if (typeof data === 'number') {\n data = Array(data).fill().map((d, i) => i);\n }\n sel = container.selectAll(params.selector).data(data);\n\n sel = container.selectAll(params.selector).filter(function () {\n return this.parentNode === container.node();\n }).data(params.data);\n\n const selectionMerge = sel.enter().append(params.append).merge(sel).each(function (d, i) {\n params.each(d, select(this), i);\n });\n\n selectionMerge.attr('class', params.className || '');\n sel.exit().remove();\n};\n\n/**\n * Clips an element with given measurement. Basically it is used to hide overflowing portions\n * of any element.\n * @param {SVGElement} container svg element which needs to be clipped.\n * @param {Object} measurement Dimensions of the clipped rectangle.\n * @param {string} id Unique id of the clip element\n */\nconst clipElement = (container, measurement, id) => {\n const clipPathElement = makeElement(select(container), 'clipPath', [1], `#${id}`);\n const clipPathRect = makeElement(clipPathElement, 'rect', [1]);\n clipPathRect.attr('x', measurement.x)\n .attr('y', measurement.x)\n .attr('width', measurement.width)\n .attr('height', measurement.height);\n clipPathElement.attr('clip-path', `url(#${id})`);\n};\n\n/**\n * Returns the element of the corresponding classname.\n * @param {HTMLElement | SVGElement} node html or svg node element.\n * @param {string} className css class to be applied.\n * @return {HTMLElement | SVGElement} html or svg element.\n */\nconst getElementsByClassName = (node, className) => select(node).selectAll(className).nodes();\n\n/**\n * Gets the mouse position relative to an svg type of element\n * @param {SVGElement} element Any svg element like rect, circle, etc.\n * @param {Event} event Event object.\n * @return {Object} x and y position relative to the container element passed.\n */\nconst getMousePos = (element, event) => {\n const boundingClientRect = element.getBoundingClientRect();\n return {\n x: event.x - boundingClientRect.x,\n y: event.y - boundingClientRect.y\n };\n};\n\nconst getClientPoint = (...params) => {\n const pos = clientPoint(...params);\n return {\n x: pos[0],\n y: pos[1]\n };\n};\n\n/** This function appends a dom element in another element.\n * @param {Object} tag The tag name of the element to append\n * @param {Object} mount Mount point fo the element\n * @return {Object} selection of the appended element\n */\nconst createElement = (tag, mount) => select(mount).append(tag).node();\n\n/**\n * Gets the d3 event function\n * @return {Object} d3 event\n */\nconst getEvent = () => d3event;\n\n/**\n * Gets the d3 drag function\n * @return {Object} d3 drag\n */\nconst getD3Drag = () => d3drag;\n\nconst getSmartComputedStyle = (group, css) => {\n let textEl;\n const testText = 'W';\n const mandatoryStyle = {\n 'fill-opacity': 0\n };\n const className = typeof css === 'string' ? css : (css instanceof Array ? css.join(' ') : undefined);\n\n if (group.node() instanceof HTMLElement) {\n textEl = group.append('div').html(testText);\n } else {\n textEl = group.append('text').text(testText);\n }\n\n if (className) {\n textEl.attr('class', className);\n } else if (typeof css === 'object') {\n delete css['fill-opacity'];\n mergeRecursive(mandatoryStyle, css);\n }\n\n textEl.style(mandatoryStyle);\n\n const computedStyle = window.getComputedStyle(textEl.node());\n const styleForSmartLabel = {\n fontSize: computedStyle.fontSize,\n fontFamily: computedStyle.fontFamily,\n fontWeight: computedStyle.fontWeight,\n fontStyle: computedStyle.fontStyle\n };\n\n textEl.remove();\n\n return styleForSmartLabel;\n};\n\nconst hasTouch = () => 'ontouchstart' in document.documentElement;\n\nexport {\n hasTouch,\n selectElement,\n makeElement,\n applyStyle,\n addClass,\n removeClass,\n appendElement,\n setAttrs,\n setStyles,\n createElement,\n createElements,\n clipElement,\n getElementsByClassName,\n getMousePos,\n getEvent,\n getD3Drag,\n getSmartComputedStyle,\n getClientPoint\n};\n","/**\n * This class represents a selection applied on a data array.\n *\n * @class Selection\n */\nclass Selection {\n /**\n * Creates an instance of Selection.\n * @param {Array} data Array of DataObjects.\n * @memberof Selection\n */\n constructor () {\n this._data = [];\n // // map of id to data\n this._idMap = {};\n\n this._mode = '';\n // data.forEach((item, idx) => {\n // const index = item.id || idx;\n // this._idMap[index] = item;\n // });\n // // array to store data in enter phase\n this._enterdata = [];\n // // array to store data in exit phase\n this._exitdata = [];\n }\n /**\n * Gets the object bound to a class\n *\n * @return {Object} current data set bound to the class\n * @memberof Selection\n */\n getObjects () {\n return Object.keys(this._idMap).map(e => this._idMap[e]);\n }\n\n /**\n * This method is used to supply seed data to a selection.\n *\n * @param {Array} newData Seed data to create the enter selection.\n * @param {Functon | undefined } idGetter This function is used to uniqely identify a data entry.\n * @return {Selection} Modified selection.\n * @memberof Selection\n */\n data (newData, idGetter) {\n if (idGetter) {\n this._data = [];\n this._idGetter = idGetter;\n const tempMap = {};\n\n newData.forEach((...params) => {\n const index = idGetter(...params);\n tempMap[index] = params[0];\n });\n // check if any data items have been removed\n const purgedIds = [];\n\n Object.keys(this._idMap).forEach((id) => {\n if (!tempMap[id]) {\n purgedIds.push(id);\n }\n });\n\n Object.keys(tempMap).forEach((id) => {\n if (!this._idMap[id]) {\n this._enterdata.push(tempMap[id]);\n } else {\n this._idMap[id] = tempMap[id];\n this._data.push(tempMap[id]);\n }\n });\n // move the purged items to exit selection\n purgedIds.forEach((id) => {\n const purged = this._idMap[id];\n this._exitdata.push(purged);\n // this._data = this._data.slice(id, 1);\n delete this._idMap[id];\n });\n // this._data = this._data.slice(temp, this._data.length);\n\n return this;\n }\n // no id getter supplied so use indices\n if (newData.length > this._data.length) {\n const startIdx = this._data.length;\n for (let i = startIdx; i < newData.length; i += 1) {\n this._enterdata.push(newData[i]);\n }\n } else {\n // push to exit selection\n const temp = newData.length;\n for (let i = temp; i < this._data.length; i += 1) {\n const purged = this._data[i];\n delete this._idMap[purged.id];\n this._exitdata.push(purged);\n }\n this._data = this._data.slice(temp, this._data.length);\n }\n return this;\n }\n\n /**\n * Applies the supplied callback to each data element\n * and returns a new selection.\n *\n * @param {Function} callback Callback to execute on each item.\n * @return {Selection} New selection with data created using callback.\n * @memberof EnterSelection\n */\n append (callback) {\n this[`_${this._mode}data`].forEach((...params) => {\n const data = params[0];\n const id = this._idGetter ? this._idGetter(...params) : (data.id || params[1]);\n this._idMap[id] = callback(...params);\n });\n this._mode = '';\n return this;\n }\n\n /**\n * This method returns an enter selection that\n * allows or update operations.\n *\n * @return {EnterSelection} Instance of enter selection.\n * @memberof Selection\n */\n enter () {\n this._mode = 'enter';\n return this;\n // return new EnterSelection(this._enterdata, this._idMap, this._idGetter);\n }\n\n /**\n * This method is used to set key value pairs\n * on data objects.\n *\n * @param {string} key Name of property.\n * @param {any} value Value of property.\n * @return {Selection} Modified selection.\n * @memberof Selection\n */\n attr (key, value) {\n this._data.forEach(item => item.attr(key, value));\n return this;\n }\n\n /**\n * This method merges the data of one selection with another.\n *\n * @param {Selection} selection Instance of selection.\n * @return {Selection} Modified selection.\n * @memberof Selection\n */\n merge (selection) {\n selection._data.forEach((...params) => {\n const id = this._idGetter ? this._idGetter(...params) : (params[0].id || params[1]);\n this._idMap[id] = params[0];\n this._data.push(params[0]);\n });\n // reset enter selection\n this._enterdata = [];\n return this;\n }\n\n /**\n * Returns a selection with exit data.\n *\n * @return {Selection} Instance of selection.\n * @memberof Selection\n */\n exit () {\n this._mode = 'exit';\n // const exitdata = this._exitdata;\n // const exitSelection = new Selection(exitdata);\n // this._exitdata = [];\n return this;\n }\n\n each (fn) {\n Object.keys(this._idMap).forEach((e) => {\n fn(this._idMap[e]);\n });\n return this;\n }\n\n map (fn) {\n Object.keys(this._idMap).forEach((...params) => {\n this._idMap[params[0]] = fn(this._idMap[params[0]], ...params);\n });\n return this;\n }\n\n /**\n * Executes the cleanup operation associated with data objets.\n *\n * @memberof Selection\n */\n remove () {\n // do cleanup on DDO's\n const data = this[`_${this._mode}data`];\n\n data.forEach(item => item.remove());\n if (this._mode === '') {\n this.each(e => e.remove());\n }\n this[`_${this._mode}data`] = [];\n this._mode = '';\n }\n}\n\nexport default Selection;\n","import { getUniqueId } from '../index';\n/**\n * Represents the base class that all objects that form\n * the data for a selection must inherit from.\n *\n * @class DataObject\n */\nclass DataObject {\n/**\n * Creates an instance of DataObject.\n * @memberof DataObject\n */\n constructor () {\n this._id = getUniqueId();\n }\n /**\n * Returns the id.\n *\n * @readonly\n * @memberof DataObject\n */\n get id () {\n return this._id;\n }\n\n /**\n * Sets the value corresponding to supplied key.\n *\n * @param {string} key The property name.\n * @param {any} value Value associated with prop.\n * @memberof DataObject\n */\n attr (key, value) {\n this[key] = value;\n }\n\n /**\n * Clean up code to be executed by each object.\n *\n * @override\n * @memberof DataObject\n */\n remove () {\n // cleanup\n }\n}\n\nexport default DataObject;\n","const events = [\n 'initialized',\n 'beforeupdate',\n 'updated',\n 'beforedraw',\n 'drawn',\n 'beforeremove',\n 'removed'\n];\n\nconst compositions = [\n 'canvas',\n 'unit',\n 'layer',\n 'axis',\n 'facet-headers',\n 'legend',\n 'caption'\n];\n\nconst EVENT_LIST = [];\n\ncompositions.forEach((composition) => {\n events.forEach((event) => {\n EVENT_LIST.push(`${composition}.${event}`);\n });\n});\n\nexport default EVENT_LIST;\n","import EVENT_LIST from './event-list';\n\n/**\n * At first call it accepts one function\n * calling it second time accepts notification object.\n * notification object then called with first accepted function\n *\n * @param {Function} resolveFn a promise's resolve function\n * @return {Function} a function to accept notification object\n */\nconst resolver = resolveFn => notification => resolveFn(notification);\n\n/**\n * Checks if the property string is present in the source object\n *\n * @param {Object} source source object whom you want to check the property\n * @param {string} property key name that need to be checked\n * @return {boolean} returns true if the property found in the source object\n */\nconst hasOwn = (source, property) => Object.prototype.hasOwnProperty.call(source, property);\n\n/**\n * LifeCycleManager which goes as a dependendecy to a muze\n * it accepts notification from the entire library throughout\n * the exeecution life\n *\n * @export\n * @class LifeCycleManager\n */\nexport default class LifeCycleManager {\n\n /**\n * Creates an instance of LifeCycleManager.\n * @memberof LifeCycleManager\n */\n constructor () {\n this._eventList = EVENT_LIST;\n this._promises = new Map();\n this._notifiers = {};\n this._lifeCycles = {};\n this._unreleasedLifeCycles = {};\n this._boot();\n }\n\n /**\n * Fills all the notifiers with resolver callback\n *\n * @memberof LifeCycleManager\n */\n _boot () {\n this._notifiers = this._eventList.reduce((acc, name) => {\n acc[name] = resolver;\n return acc;\n }, {});\n this._preparePromises();\n }\n\n /**\n * Public method which gives the promise corresponding\n * to the event name\n *\n * @param {string} eventName name of the event like `canvas.drawn`\n * @return {promise} promise that is passed to the user\n * @memberof LifeCycleManager\n */\n retrieve (eventName) {\n return this._promises.get(eventName);\n }\n\n /**\n * Creates a promise that will be passed to user's callback\n *\n * @param {string} eventName name of the event like `canvas.drawn`\n * @return {promise} a pending promise waiting for resolve to be called\n * @memberof LifeCycleManager\n */\n _makeNotifierPromise (eventName) {\n return new Promise((resolve) => {\n this._notifiers[eventName] = this._notifiers[eventName](resolve);\n });\n }\n\n /**\n * Prepares the promise map with pending promises\n * all the promises are in a pending state where their's\n * resolve function waiting to be called with notification object\n * @memberof LifeCycleManager\n */\n _preparePromises () {\n this._eventList.forEach((eventName) => {\n this._promises.set(eventName, this._makeNotifierPromise(eventName));\n });\n }\n\n /**\n * Resolves the promise with notification object\n *\n * @param {string} eventName name of the event in the system\n * @param {Object} notification notification object\n * @param {string} notification.formalName name of the sender creating the notification\n * @param {Object} notification.client instance or array of instances sending the notification\n * @param {string} notification.action the stage name when the event happened like `beforedraw`\n *\n * @memberof LifeCycleManager\n */\n _resolvePromise (eventName, notification) {\n this._notifiers[eventName](notification);\n }\n\n /**\n * Public method which is being called by different\n * subcompoents of the system at different execution atages\n * @param {Object} notification notification object\n * @param {string} notification.formalName name of the sender creating the notification\n * @param {Object} notification.client instance or array of instances sending the notification\n * @param {string} notification.action the stage name when the event happened like `beforedraw`\n * @memberof LifeCycleManager\n */\n notify (notification) {\n // get the composition name from notification\n // or from static formalName() method\n const composition = notification.formalName || notification.client.constructor.formalName();\n notification.formalName = composition;\n this._releasePromisesFromCache();\n this._notify(composition, notification);\n }\n\n /**\n * Notify user the with promsie in a callback\n * if callback not found then cache it\n *\n * @param {string} composition\n * @param {Object} notification notification object\n * @param {string} notification.formalName name of the sender creating the notification\n * @param {Object} notification.client instance or array of instances sending the notification\n * @param {string} notification.action the stage name when the event happened like `beforedraw`\n * @memberof LifeCycleManager\n */\n _notify (composition, notification) {\n const stage = notification.action;\n const eventName = `${composition}.${stage}`;\n\n // resolves promise with the notification object\n this._resolvePromise(eventName, notification);\n\n // get the promise from the promise map\n const promise = this.retrieve(eventName);\n\n if (this._lifeCycles[composition]) {\n if (this._lifeCycles[composition][stage]) {\n // if user given call back exists, then call with promise\n this._callLifeCycleCallback(composition, stage, promise);\n } else {\n // otherwise cache the promise\n this._cachePromise(composition, stage, promise);\n }\n } else {\n this._cachePromise(composition, stage, promise);\n }\n }\n\n /**\n * Calls the user's callback with callback\n *\n * @param {string} composition name of the compositon like `canvas`\n * @param {string} stage the stage name when the event happened like `beforedraw`\n * @param {promise} promise promise that is passed to the user\n * @memberof LifeCycleManager\n */\n _callLifeCycleCallback (composition, stage, promise) {\n const eventName = `${composition}.${stage}`;\n this._lifeCycles[composition][stage](promise);\n this._resetTargetPromise(eventName);\n }\n\n /**\n * Try to clear the cached promsies once we have\n * macthed callbacks from the user\n *\n * @memberof LifeCycleManager\n */\n _releasePromisesFromCache () {\n const compositions = Object.keys(this._unreleasedLifeCycles);\n compositions.forEach((composition) => {\n const stages = Object.keys(this._unreleasedLifeCycles[composition]);\n stages.forEach((stage) => {\n if (this._lifeCycles[composition]) {\n if (this._lifeCycles[composition][stage]) {\n // take the promise from unreleased lifeCycles\n const promise = this._unreleasedLifeCycles[composition][stage];\n // call the user given callback with that promise\n this._callLifeCycleCallback(composition, stage, promise);\n // delete promise from unreleased lifeCycles\n delete this._unreleasedLifeCycles[composition][stage];\n }\n }\n });\n });\n }\n\n /**\n * Cache the promise in the map. This cache\n * then get consumed if we get user callbacks\n * @param {string} composition name of the compositon like `canvas`\n * @param {string} stage the stage name when the event happened like `beforedraw`\n * @param {promise} promise promise that is passed to the user\n * @memberof LifeCycleManager\n */\n _cachePromise (composition, stage, promise) {\n if (!hasOwn(this._unreleasedLifeCycles, composition)) {\n this._unreleasedLifeCycles[composition] = {};\n }\n\n if (!hasOwn(this._unreleasedLifeCycles[composition], stage)) {\n this._unreleasedLifeCycles[composition][stage] = {};\n }\n this._unreleasedLifeCycles[composition][stage] = promise;\n }\n\n /**\n * It register's the callbacks gievn the user\n *\n * @param {Object} [lifeCycles={}] a object with list of callbacks\n * @memberof LifeCycleManager\n */\n register (lifeCycles = {}) {\n this._lifeCycles = lifeCycles;\n // as we get all the callbacks, try to call them\n // from unreleased promise map\n this._releasePromisesFromCache();\n }\n\n /**\n * Reset the promise into pending state\n *\n * @param {string} eventName name of the event happening\n * @memberof LifeCycleManager\n */\n _resetTargetPromise (eventName) {\n setTimeout(() => {\n this._notifiers[eventName] = resolver;\n this._promises.set(eventName, this._makeNotifierPromise(eventName));\n }, 0);\n }\n}\n","import LifeCycleManager from './lifecycle-manager';\n\nexport default LifeCycleManager;\n","export const DRAG = 'drag';\nexport const HOVER = 'hover';\nexport const SELECTIONDRAG = 'selectiondrag';\nexport const CLICK = 'click';\nexport const LONGTOUCH = 'longtouch';\nexport const TOUCHDRAG = 'touchdrag';\nexport const ALL_ACTIONS = '*';\n","const SELECTION_NEW_ENTRY = 1;\nconst SELECTION_NEW_EXIT = -1;\nconst SELECTION_NULL = 0;\nconst SELECTION_OLD_ENTRY = 2;\nconst SELECTION_OLD_EXIT = -2;\n\nexport {\n SELECTION_NEW_ENTRY,\n SELECTION_NEW_EXIT,\n SELECTION_NULL,\n SELECTION_OLD_ENTRY,\n SELECTION_OLD_EXIT\n};\n","import {\n SELECTION_NEW_ENTRY, SELECTION_NEW_EXIT, SELECTION_NULL, SELECTION_OLD_ENTRY, SELECTION_OLD_EXIT\n} from '../enums/selection';\n/* eslint-disable guard-for-in */\n\n/**\n * This component is used to keep track of the row tuples of the data which gets added and removed.\n * @class SelectionSet\n */\nclass SelectionSet {\n /**\n * Creates an instance of selection set\n * @param {Array.} completeSet Set of unique ids.\n */\n constructor (completeSet, _volatile) {\n this.completeSet = completeSet;\n this._set = completeSet.reduce((obj, key) => {\n obj[key] = SELECTION_NULL;\n return obj;\n }, {});\n this._volatile = _volatile;\n this._completeSetCount = completeSet.length;\n this._lockedSelection = {};\n this._resetted = true;\n }\n\n /**\n * Adds a set of ids to the selection set.\n * @param {Array.} ids Array of unique ids\n * @return {SelectionSet} Instance of selection set.\n */\n add (ids) {\n this._resetted = false;\n\n const set = this._set;\n // from exitset to entryset\n ids.forEach((i) => {\n set[i] = SELECTION_NEW_ENTRY;\n });\n\n for (const key in set) {\n if (set[key] !== SELECTION_NEW_ENTRY && set[key] !== SELECTION_OLD_ENTRY) {\n set[key] = set[key] < 0 ? SELECTION_OLD_EXIT : SELECTION_NEW_EXIT;\n }\n }\n return this;\n }\n\n /**\n * Adds a set of ids to the selection set.\n * @param {Array.} ids Array of unique ids\n * @return {SelectionSet} Instance of selection set.\n */\n update (ids) {\n const set = this._set;\n // from exitset to entryset\n ids.forEach((i) => {\n set[i] = SELECTION_OLD_ENTRY;\n });\n\n return this;\n }\n\n /**\n * Adds a set of ids to the selection set.\n * @param {Array.} ids Array of unique ids\n * @return {SelectionSet} Instance of selection set.\n */\n updateEntry () {\n const set = this._set;\n\n // from exitset to entryset\n for (const key in set) {\n set[key] = set[key] === SELECTION_NEW_ENTRY ? SELECTION_OLD_ENTRY : set[key];\n }\n return this;\n }\n\n /**\n * Adds a set of ids to the selection set.\n * @param {Array.} ids Array of unique ids\n * @return {SelectionSet} Instance of selection set.\n */\n updateExit () {\n const set = this._set;\n // from exitset to entryset\n for (const key in set) {\n set[key] = set[key] === SELECTION_NEW_EXIT ? SELECTION_OLD_EXIT : set[key];\n }\n return this;\n }\n\n /**\n * Removes the ids from the selection set.\n * @param {Array.} ids Array of unique ids\n * @return {SelectionSet} Instance of selection set\n */\n remove (ids) {\n this._resetted = false;\n\n const set = this._set;\n ids.forEach((i) => {\n set[i] = SELECTION_NEW_EXIT;\n });\n\n for (const key in set) {\n if (set[key] !== SELECTION_NEW_EXIT && set[key] !== SELECTION_OLD_EXIT) {\n set[key] = set[key] === 0 ? SELECTION_NEW_ENTRY : SELECTION_OLD_ENTRY;\n }\n }\n\n return this;\n }\n\n getSets () {\n const set = this._set;\n const retObj = {\n entrySet: [[], []],\n exitSet: [[], []],\n completeSet: []\n };\n\n for (const key in set) {\n if (set[key] > 0) {\n set[key] === SELECTION_OLD_ENTRY && retObj.entrySet[0].push(key);\n set[key] === SELECTION_NEW_ENTRY && retObj.entrySet[1].push(key);\n } else if (set[key] < 0) {\n set[key] === SELECTION_OLD_EXIT && retObj.exitSet[0].push(key);\n set[key] === SELECTION_NEW_EXIT && retObj.exitSet[1].push(key);\n }\n retObj.completeSet.push(key);\n }\n\n ['entrySet', 'exitSet'].forEach((type) => {\n retObj[type] = retObj[type].map(e => e.map(Number));\n });\n retObj.completeSet = retObj.completeSet.map(Number);\n\n return retObj;\n }\n\n /**\n * Resets the selection set to initial state. It sets the value of every unique id value to\n * null in the selection set.\n * @return {SelectionSet} Instance of selection set.\n */\n reset (ids) {\n const set = this._set;\n if (ids) {\n ids.forEach((i) => {\n set[i] = SELECTION_NULL;\n });\n } else {\n const lockedSel = this._lockedSelection;\n for (const key in set) {\n if (!(key in lockedSel)) {\n set[key] = SELECTION_NULL;\n }\n }\n }\n this._resetted = true;\n return this;\n }\n\n /**\n * Gets the set of ids which are added in the selection set.\n * @return {Array.} Array of unique ids\n */\n getEntrySet () {\n const set = this._set;\n const addSet = [];\n\n for (const key in set) {\n set[key] === SELECTION_NEW_ENTRY && addSet.push(key);\n }\n\n return addSet;\n }\n\n /**\n * Returns a set of unique ids which are already present in entry set\n * @param {Array} addSet Array of unique ids which are added\n *\n * @return {Array} Array of unique ids which are already in old entry set or new entry set\n */\n getExistingEntrySet (addSet) {\n const set = this._set;\n return addSet.filter(d => set[d] === SELECTION_NEW_ENTRY || set[d] === SELECTION_OLD_ENTRY);\n }\n\n getExistingExitSet (removeSet) {\n const set = this._set;\n return removeSet.filter(d => set[d] === SELECTION_NEW_EXIT || set[d] === SELECTION_OLD_EXIT);\n }\n\n /**\n * Gets the set of ids which are added in the selection set.\n * @return {Array.} Array of unique ids\n */\n getOldEntry () {\n const set = this._set;\n const updateSet = [];\n\n for (const key in set) {\n set[key] === SELECTION_OLD_ENTRY && updateSet.push(key);\n }\n return updateSet;\n }\n\n /**\n * Gets the set of ids which are added in the selection set.\n * @return {Array.} Array of unique ids\n */\n getOldExit () {\n const set = this._set;\n const updateSet = [];\n\n for (const key in set) {\n set[key] === SELECTION_OLD_EXIT && updateSet.push(key);\n }\n\n return updateSet;\n }\n\n /**\n * Gets the set of ids which are in the remove set.\n * @return {Array.} Array of unique ids\n */\n getExitSet () {\n const set = this._set;\n const removeSet = [];\n\n for (const key in set) {\n set[key] === SELECTION_NEW_EXIT && removeSet.push(key);\n }\n return removeSet;\n }\n\n getCompleteSet () {\n const set = this._set;\n const completeSet = [];\n\n for (const key in set) {\n completeSet.push(key);\n }\n\n return completeSet;\n }\n\n getCompleteSetCount () {\n return this._completeSetCount;\n }\n\n resetted () {\n return this._resetted;\n }\n\n /**\n * Swaps the add set and remove set in the selection set.\n * @return {SelectionSet} Instance of selection set.\n */\n toggle () {\n const set = this._set;\n\n for (const key in set) {\n if (set[key] === SELECTION_NEW_ENTRY) {\n set[key] = SELECTION_NEW_EXIT;\n } else if (set[key] === SELECTION_NEW_EXIT) {\n set[key] = SELECTION_NEW_ENTRY;\n } else if (set[key] === SELECTION_OLD_ENTRY) {\n set[key] = SELECTION_OLD_EXIT;\n } else {\n set[key] = SELECTION_OLD_ENTRY;\n }\n }\n\n return this;\n }\n}\n\nexport default SelectionSet;\n","import { clone } from 'muze-utils';\nimport * as SELECTION from '../enums/selection';\n\nexport const initializeSideEffects = (context, sideEffects) => {\n const sideEffectsMap = context._sideEffects;\n\n sideEffects = sideEffects instanceof Array ? sideEffects : Object.values(sideEffects);\n sideEffects.forEach((SideEffect) => {\n const sideEffectInstance = sideEffectsMap[SideEffect.formalName()];\n sideEffectsMap[SideEffect.formalName()] = sideEffectInstance || new SideEffect(context);\n });\n return sideEffectsMap;\n};\n\nexport const initializeBehaviouralActions = (context, actions) => {\n const dispatchableBehaviours = {};\n\n actions = actions instanceof Array ? actions : Object.values(actions);\n actions.forEach((Action) => {\n dispatchableBehaviours[Action.formalName()] = new Action(context);\n });\n return dispatchableBehaviours;\n};\n\nexport const initializePhysicalActions = (context, actions) => {\n const physicalActions = {};\n\n for (const name in actions) {\n if (!({}).hasOwnProperty.call(name, actions)) {\n physicalActions[name] = actions[name](context);\n }\n }\n return physicalActions;\n};\n\nexport const changeSideEffectAvailability = (context, fn, toEnable) => {\n const sideEffects = context.sideEffects();\n for (const key in sideEffects) {\n if ({}.hasOwnProperty.call(sideEffects, key)) {\n let change = true;\n if (fn && fn(key) === false) {\n change = false;\n }\n if (change) {\n toEnable ? sideEffects[key].enable() : sideEffects[key].disable();\n }\n }\n }\n};\n\nexport const getMergedSet = set => [...new Set([...set[0], ...set[1]])];\n\nexport const getSourceFields = (propagationInf, criteria = {}) => {\n const sourceIdentifiers = propagationInf.sourceIdentifiers;\n let sourceFields;\n if (sourceIdentifiers) {\n sourceFields = sourceIdentifiers.getSchema().map(d => d.name);\n } else if (criteria instanceof Array) {\n sourceFields = criteria[0];\n } else {\n sourceFields = Object.keys(criteria || {});\n }\n return sourceFields;\n};\n\nconst conditionsMap = {\n newEntry: [SELECTION.SELECTION_NEW_ENTRY],\n oldEntry: [SELECTION.SELECTION_OLD_ENTRY],\n mergedEnter: [SELECTION.SELECTION_NEW_ENTRY, SELECTION.SELECTION_OLD_ENTRY],\n newExit: [SELECTION.SELECTION_NEW_EXIT],\n oldExit: [SELECTION.SELECTION_OLD_EXIT],\n mergedExit: [SELECTION.SELECTION_NEW_EXIT, SELECTION.SELECTION_OLD_EXIT],\n complete: []\n};\n\nexport const getModelFromSet = (type, model, set) => {\n if (model) {\n return model.select((fields, i) =>\n (conditionsMap[type].some(condition => set[i] === condition)), {\n saveChild: false\n });\n }\n return null;\n};\n\nexport const getSetInfo = (type, set, config) => {\n let model = null;\n const filteredDataModel = config.filteredDataModel;\n const selectionSet = config.selectionSet;\n if (!config.propagationData) {\n if (selectionSet.resetted()) {\n model = null;\n } else {\n model = getModelFromSet(type, config.dataModel, config.selectionSet._set);\n }\n } else if (filteredDataModel) {\n model = type === 'mergedEnter' ? filteredDataModel[0] : filteredDataModel[1];\n }\n return {\n uids: set,\n length: set.length,\n model\n };\n};\n\nexport const getSideEffects = (behaviour, behaviourEffectMap) => {\n const sideEffects = [];\n for (const key in behaviourEffectMap) {\n const behaviours = key.split(',');\n const found = behaviours.some(d => d === behaviour);\n if (found) {\n sideEffects.push({\n effects: behaviourEffectMap[key],\n behaviours\n });\n }\n }\n return sideEffects;\n};\n\nexport const unionSets = (context, behaviours) => {\n let combinedSet = {};\n const models = {\n mergedEnter: null,\n mergedExit: null\n };\n behaviours.forEach((behaviour) => {\n const entryExitSet = context._entryExitSet[behaviour];\n if (entryExitSet) {\n combinedSet = Object.assign(combinedSet, clone(entryExitSet));\n ['mergedEnter', 'mergedExit'].forEach((type) => {\n const model = entryExitSet[type].model;\n let existingModel = models[type];\n if (!existingModel) {\n existingModel = models[type] = model;\n } else {\n existingModel = models[type] = model.union(existingModel);\n }\n combinedSet[type].model = existingModel;\n });\n }\n });\n return combinedSet;\n};\n","import {\n mergeRecursive,\n hasTouch,\n filterPropagationModel,\n FieldType,\n selectElement,\n isSimpleObject\n} from 'muze-utils';\nimport { ALL_ACTIONS } from './enums/actions';\nimport SelectionSet from './selection-set';\nimport {\n initializeBehaviouralActions,\n initializeSideEffects,\n changeSideEffectAvailability,\n initializePhysicalActions,\n unionSets,\n getSideEffects\n} from './helper';\n\n/**\n * Relient firebolt is responsible for dispatching behaviours. It has only behaviours which can be\n * dispatched without any physical action being triggered.\n */\nexport default class Firebolt {\n constructor (context, actions, sideEffects, behaviourEffectMap) {\n this.context = context;\n this._sideEffectDefinitions = {};\n this._sideEffects = {};\n this._propagationInf = {};\n this._actions = {\n behavioural: {},\n physical: {}\n };\n this._selectionSet = {};\n this._volatileSelectionSet = {};\n this._propagationFields = {};\n this._sourceSideEffects = {\n selectionBox: () => false\n };\n this._propagationBehaviourMap = {};\n this._sourceBehaviours = {};\n this._actionBehaviourMap = {};\n this._config = {};\n this._behaviourEffectMap = {};\n this._entryExitSet = {};\n this._actionHistory = {};\n this._queuedSideEffects = {};\n this._mappedActions = {};\n\n this.mapSideEffects(behaviourEffectMap);\n this.registerBehaviouralActions(actions.behavioural);\n this.registerSideEffects(sideEffects);\n this.registerPhysicalBehaviouralMap(actions.physicalBehaviouralMap);\n this.registerPhysicalActions(actions.physical);\n }\n\n config (...config) {\n if (config.length) {\n const conf = this._config = mergeRecursive(this._config, config[0]);\n const sideEffects = this.sideEffects();\n for (const key in sideEffects) {\n if ({}.hasOwnProperty.call(sideEffects, key)) {\n const sideEffectConf = conf[key];\n sideEffectConf && sideEffects[key].config(sideEffectConf);\n }\n }\n return this;\n }\n return this._config;\n }\n\n mapSideEffects (behEffectMap) {\n const behaviourEffectMap = this._behaviourEffectMap;\n for (const key in behEffectMap) {\n if ({}.hasOwnProperty.call(behEffectMap, key)) {\n const sideEffects = behEffectMap[key] || [];\n let preventDefaultActions = false;\n let effectNames;\n if (isSimpleObject(sideEffects)) {\n effectNames = sideEffects.effects;\n preventDefaultActions = sideEffects.preventDefaultActions;\n } else {\n effectNames = sideEffects;\n }\n !behaviourEffectMap[key] && (behaviourEffectMap[key] = []);\n this._behaviourEffectMap[key] = [...new Set(preventDefaultActions ? effectNames :\n [...behaviourEffectMap[key], ...effectNames])];\n }\n }\n return this;\n }\n\n registerBehaviouralActions (actions) {\n const behaviours = initializeBehaviouralActions(this, actions);\n this.prepareSelectionSets(behaviours);\n Object.assign(this._actions.behavioural, behaviours);\n return this;\n }\n\n prepareSelectionSets () {\n return this;\n }\n\n registerSideEffects (sideEffects) {\n for (const key in sideEffects) {\n this._sideEffectDefinitions[sideEffects[key].formalName()] = sideEffects[key];\n }\n return this;\n }\n\n applySideEffects (sideEffects, selectionSet, payload) {\n const sideEffectStore = this.sideEffects();\n const actionHistory = this._actionHistory;\n const queuedSideEffects = this._queuedSideEffects;\n sideEffects.forEach((sideEffect) => {\n let options;\n let name;\n const effects = sideEffect.effects;\n const behaviours = sideEffect.behaviours;\n const combinedSet = unionSets(this, behaviours, selectionSet);\n effects.forEach((effect) => {\n if (typeof effect === 'object') {\n name = effect.name;\n options = effect.options;\n } else {\n name = effect;\n }\n\n const sideEffectInstance = sideEffectStore[name];\n if (sideEffectInstance.isEnabled()) {\n if (!sideEffectInstance.constructor.mutates() &&\n Object.values(actionHistory).some(d => d.isMutableAction)) {\n queuedSideEffects[`${name}-${behaviours.join()}`] = {\n name,\n params: [combinedSet, payload, options]\n };\n } else {\n this.dispatchSideEffect(name, combinedSet, payload, options);\n }\n }\n });\n });\n return this;\n }\n\n dispatchSideEffect (name, selectionSet, payload, options = {}) {\n const sideEffectStore = this.sideEffects();\n const sideEffect = sideEffectStore[name];\n let disable = false;\n if (options.filter && options.filter(sideEffect)) {\n disable = true;\n }\n !disable && sideEffectStore[name].apply(selectionSet, payload, options);\n }\n\n registerPropagationBehaviourMap (map) {\n this._propagationBehaviourMap = Object.assign(this._propagationBehaviourMap, map || {});\n return this;\n }\n\n dispatchBehaviour (behaviour, payload, propagationInfo = {}) {\n const propagate = propagationInfo.propagate !== undefined ? propagationInfo.propagate : true;\n const behaviouralActions = this._actions.behavioural;\n const action = behaviouralActions[behaviour];\n const behaviourEffectMap = this._behaviourEffectMap;\n const sideEffects = getSideEffects(behaviour, behaviourEffectMap);\n this._propagationInf = propagationInfo;\n\n if (action) {\n const selectionSet = action.dispatch(payload);\n const propagationSelectionSet = this.getPropagationSelectionSet(selectionSet);\n this._entryExitSet[behaviour] = propagationSelectionSet;\n const shouldApplySideEffects = this.shouldApplySideEffects(propagate);\n\n if (propagate) {\n this.propagate(behaviour, payload, selectionSet.find(d => d.sourceSelectionSet), sideEffects);\n }\n if (shouldApplySideEffects) {\n const applicableSideEffects = this.getApplicableSideEffects(sideEffects, payload, propagationInfo);\n this.applySideEffects(applicableSideEffects, propagationSelectionSet, payload);\n }\n }\n\n return this;\n }\n\n getPropagationSelectionSet (selectionSet) {\n return selectionSet.find(d => !d.sourceSelectionSet);\n }\n\n shouldApplySideEffects () {\n return true;\n }\n\n changeBehaviourStateOnPropagation (behaviour, value) {\n if (value instanceof Function) {\n this._sourceBehaviours[behaviour] = value;\n } else {\n this._sourceBehaviours[behaviour] = () => value;\n }\n return this;\n }\n\n changeSideEffectStateOnPropagation (sideEffect, value) {\n if (value instanceof Function) {\n this._sourceSideEffects[sideEffect] = value;\n } else {\n this._sourceSideEffects[sideEffect] = () => value;\n }\n }\n\n propagate () {\n return this;\n }\n\n sideEffects (...sideEffects) {\n if (sideEffects.length) {\n this._sideEffects = sideEffects[0];\n return this;\n }\n return this._sideEffects;\n }\n\n enableSideEffects (fn) {\n changeSideEffectAvailability(this, fn, true);\n return this;\n }\n\n disableSideEffects (fn) {\n changeSideEffectAvailability(this, fn, false);\n return this;\n }\n\n dissociateBehaviour (behaviour, physicalAction) {\n const actionBehaviourMap = this._actionBehaviourMap;\n for (const key in actionBehaviourMap) {\n if (key === physicalAction) {\n const behaviourMap = actionBehaviourMap[key];\n behaviourMap.behaviours = behaviourMap.behaviours.filter(d => d !== behaviour);\n }\n }\n\n return this;\n }\n\n dissociateSideEffect (sideEffect, behaviour) {\n const behaviourEffectMap = this._behaviourEffectMap;\n behaviourEffectMap[behaviour] = behaviourEffectMap[behaviour].filter(d => (d.name || d) !== sideEffect);\n return this;\n }\n\n getApplicableSideEffects (sideEffects) {\n return sideEffects;\n }\n\n attachPropagationListener (dataModel) {\n dataModel.unsubscribe('propagation');\n dataModel.on('propagation', this.onDataModelPropagation());\n return this;\n }\n\n onDataModelPropagation () {\n return (propValue) => {\n const payload = propValue.payload;\n const action = payload.action;\n\n this.dispatchBehaviour(action, payload, {\n propagate: false\n });\n };\n }\n\n createSelectionSet (uniqueIds, behaviouralActions) {\n const behaviours = behaviouralActions || this._actions.behavioural;\n const selectionSet = this._selectionSet;\n const volatileSelectionSet = this._volatileSelectionSet;\n\n for (const key in behaviours) {\n if ({}.hasOwnProperty.call(behaviours, key)) {\n selectionSet[key] = new SelectionSet(uniqueIds);\n volatileSelectionSet[key] = new SelectionSet(uniqueIds, true);\n }\n }\n this._volatileSelectionSet = volatileSelectionSet;\n this.selectionSet(selectionSet);\n return this;\n }\n\n selectionSet (...selectionSet) {\n if (selectionSet.length) {\n this._selectionSet = selectionSet[0];\n return this;\n }\n return this._selectionSet;\n }\n\n initializeSideEffects () {\n const sideEffectDefinitions = this._sideEffectDefinitions;\n this.sideEffects(initializeSideEffects(this, sideEffectDefinitions));\n return this;\n }\n\n registerPhysicalActions (actions) {\n const initedActions = initializePhysicalActions(this, actions);\n Object.assign(this._actions.physical, initedActions);\n return this;\n }\n\n propagateWith (action, fields, append = false) {\n const behaviouralActions = this._actions.behavioural;\n if (fields.length) {\n if (action === ALL_ACTIONS) {\n for (const key in behaviouralActions) {\n this._propagationFields[key] = {\n fields,\n append\n };\n }\n } else {\n this._propagationFields[action] = {\n fields,\n append\n };\n }\n return this;\n }\n return this._propagationFields;\n }\n\n /**\n * Map actions and behaviours\n * @return {Firebolt} Firebolt instance\n */\n mapActionsAndBehaviour () {\n const initedPhysicalActions = this._actions.physical;\n const map = this._actionBehaviourMap;\n const mappedActions = this._mappedActions;\n\n for (const action in map) {\n if (!({}).hasOwnProperty.call(action, map)) {\n let target;\n const mapObj = map[action];\n target = mapObj.target;\n const touch = mapObj.touch;\n if (!target) {\n target = this.context.getDefaultTargetContainer();\n }\n const bind = hasTouch() ? touch === true || touch === undefined : !touch;\n const keyName = `${action}-${mapObj.behaviours.join()}`;\n bind && !mappedActions[keyName] && this.bindActionWithBehaviour(initedPhysicalActions[action],\n target, mapObj.behaviours);\n mappedActions[keyName] = true;\n }\n }\n return this;\n }\n\n registerPhysicalBehaviouralMap (map) {\n Object.assign(this._actionBehaviourMap, map);\n return this;\n }\n\n /**\n * Binds a target element with an action.\n *\n * @param {Function} action Action method\n * @param {string} target Class name of element\n * @param {Array} behaviourList Array of behaviours\n * @return {FireBolt} Instance of firebolt\n */\n bindActionWithBehaviour (action, targets, behaviourList) {\n if (typeof (targets) === 'string') {\n targets = [targets];\n }\n targets.forEach((target) => {\n const mount = this.context.mount();\n const nodes = target.node instanceof Function ? target : selectElement(mount).selectAll(target);\n if (behaviourList.length && !nodes.empty()) {\n if (nodes instanceof Array) {\n nodes.forEach((node) => {\n action(selectElement(node), behaviourList);\n });\n } else {\n action(nodes, behaviourList);\n }\n }\n });\n return this;\n }\n\n getPropagationInf () {\n return this._propagationInf;\n }\n\n getAddSetFromCriteria (criteria, propagationInf = {}) {\n const context = this.context;\n const filteredDataModel = propagationInf.data ? propagationInf.data :\n context.getDataModelFromIdentifiers(criteria, 'all');\n const xFields = context.fields().x || [];\n const yFields = context.fields().y || [];\n const xMeasures = xFields.every(field => field.type() === FieldType.MEASURE);\n const yMeasures = yFields.every(field => field.type() === FieldType.MEASURE);\n return {\n model: filteredDataModel,\n uids: criteria === null ? null : (propagationInf.data ? filterPropagationModel(this.getFullData(),\n propagationInf.data[0], xMeasures && yMeasures).getData().uids : filteredDataModel[0].getData().uids)\n };\n }\n\n getSelectionSets (action) {\n const sourceId = this.context.id();\n const propagationInf = this._propagationInf || {};\n const propagationSource = propagationInf.sourceId;\n let applicableSelectionSets = [];\n if (propagationSource !== sourceId) {\n applicableSelectionSets = [this._volatileSelectionSet[action]];\n }\n\n if (propagationSource) {\n applicableSelectionSets.push(this.selectionSet()[action]);\n }\n return applicableSelectionSets;\n }\n\n getFullData () {\n return this.context.data();\n }\n\n resetted () {\n return this._resetted;\n }\n\n getEntryExitSet (behaviour) {\n return this._entryExitSet[behaviour];\n }\n}\n","import { getSetInfo, getMergedSet, getSourceFields } from '../../helper';\n\nexport default class GenericBehaviour {\n constructor (firebolt) {\n this.firebolt = firebolt;\n this._enabled = true;\n }\n\n dispatch (payload) {\n const criteria = payload.criteria;\n const firebolt = this.firebolt;\n const formalName = this.constructor.formalName();\n const selectionSets = firebolt.getSelectionSets(formalName);\n const {\n model: filteredDataModel,\n uids\n } = this.firebolt.getAddSetFromCriteria(criteria, this.firebolt.getPropagationInf());\n const entryExitSets = selectionSets.map((selectionSet) => {\n this.setSelectionSet(uids, selectionSet);\n return this.getEntryExitSet(selectionSet, filteredDataModel, payload);\n });\n\n return entryExitSets;\n }\n\n setSelectionSet () {\n return this;\n }\n\n getEntryExitSet (selectionSet, filteredDataModel, payload) {\n const {\n entrySet,\n exitSet,\n completeSet\n } = selectionSet.getSets();\n const propagationInf = this.firebolt.getPropagationInf();\n const dataModel = this.firebolt.getFullData();\n const setConfig = {\n isSourceFieldPresent: propagationInf.isSourceFieldPresent,\n dataModel,\n filteredDataModel,\n propagationData: propagationInf.data,\n selectionSet\n };\n\n return {\n entrySet: [getSetInfo('oldEntry', entrySet[0], setConfig),\n getSetInfo('newEntry', entrySet[1], setConfig)],\n exitSet: [getSetInfo('oldEntry', exitSet[0], setConfig),\n getSetInfo('newExit', exitSet[1], setConfig)],\n mergedEnter: getSetInfo('mergedEnter', getMergedSet(entrySet), setConfig),\n mergedExit: getSetInfo('mergedExit', getMergedSet(exitSet), setConfig),\n completeSet: getSetInfo('complete', completeSet, setConfig),\n isSourceFieldPresent: propagationInf.isSourceFieldPresent,\n fields: getSourceFields(propagationInf, payload.criteria),\n sourceSelectionSet: selectionSet._volatile === true\n };\n }\n\n static mutates () {\n return false;\n }\n\n enable () {\n this._enabled = true;\n }\n\n disable () {\n this._enabled = false;\n }\n\n isEnabled () {\n return this._enabled;\n }\n}\n\n","import GenericBehaviour from './generic';\nimport { getMergedSet } from '../../helper';\nimport * as SELECTION from '../../enums/selection';\n\nexport default class VolatileBehaviour extends GenericBehaviour {\n setSelectionSet (addSet, selectionSet) {\n if (addSet === null) {\n selectionSet.reset();\n } else if (addSet.length) {\n // new add set\n const existingAddSet = addSet.filter(d => selectionSet._set[d] === SELECTION.SELECTION_NEW_ENTRY\n || selectionSet._set[d] === SELECTION.SELECTION_OLD_ENTRY);\n selectionSet.updateExit();\n const { entrySet } = selectionSet.getSets();\n selectionSet.reset(getMergedSet(entrySet));\n selectionSet.add(addSet);\n selectionSet.update(existingAddSet);\n } else {\n selectionSet.remove(selectionSet.getCompleteSet());\n }\n }\n}\n","export const BRUSH = 'brush';\nexport const HIGHLIGHT = 'highlight';\nexport const TOOLTIP = 'tooltip';\nexport const FILTER = 'filter';\nexport const SELECT = 'select';\n","import VolatileBehaviour from './volatile';\nimport { HIGHLIGHT } from '../../enums/behaviours';\n\nexport default class HighlightBehaviour extends VolatileBehaviour {\n static formalName () {\n return HIGHLIGHT;\n }\n}\n","import VolatileBehaviour from './volatile';\nimport * as BEHAVIOURNAMES from '../../enums/behaviours';\n\n/**\n * This is the behaviour for brushing a region on the chart. It accepts a payload\n * which contains the x and y range of the data and other configuration. It will then\n * create a selection box from the range and select the points which fall within the range.\n */\nexport default class BrushBehaviour extends VolatileBehaviour {\n static formalName () {\n return BEHAVIOURNAMES.BRUSH;\n }\n}\n","import VolatileBehaviour from './volatile';\nimport { FILTER } from '../../enums/behaviours';\n\nexport default class FilterBehaviour extends VolatileBehaviour {\n static formalName () {\n return FILTER;\n }\n\n static mutates () {\n return true;\n }\n}\n","import GenericBehaviour from './generic';\nimport { getMergedSet } from '../../helper';\nimport * as SELECTION from '../../enums/selection';\n\nexport default class PersistentBehaviour extends GenericBehaviour {\n setSelectionSet (addSet, selectionSet) {\n if (addSet === null) {\n selectionSet.reset();\n } else if (addSet.length) {\n const propagationInf = this.firebolt.getPropagationInf();\n // new add set\n const existingAddSet = addSet.filter(d => selectionSet._set[d] === SELECTION.SELECTION_NEW_ENTRY\n || selectionSet._set[d] === SELECTION.SELECTION_OLD_ENTRY);\n if (propagationInf.propagate === false) {\n selectionSet.updateExit();\n const { entrySet } = selectionSet.getSets();\n selectionSet.reset(getMergedSet(entrySet));\n selectionSet.add(addSet);\n selectionSet.update(existingAddSet);\n } else {\n // existing add set\n if (existingAddSet.length) {\n selectionSet.updateExit();\n selectionSet.remove(existingAddSet);\n } else {\n selectionSet.updateEntry();\n selectionSet.add(addSet);\n }\n const { exitSet } = selectionSet.getSets();\n const mergedExitSet = getMergedSet(exitSet);\n const completeSetCount = selectionSet.getCompleteSet().length;\n if (mergedExitSet.length === completeSetCount) {\n selectionSet.reset();\n }\n }\n } else {\n selectionSet.remove(selectionSet.getCompleteSet());\n }\n\n return this;\n }\n}\n","import PersistentBehaviour from './persistent';\nimport { SELECT } from '../../enums/behaviours';\n\nexport default class SelectBehaviour extends PersistentBehaviour {\n static formalName () {\n return SELECT;\n }\n}\n\n","import { DimensionSubtype, FieldType } from 'muze-utils';\n/**\n * Gets the drag action configuration\n * @param {VisualUnit} instance instance of visual unit\n * @param {Object} config x y positions\n * @return {Object} Payload of behaviour\n*/\n/* istanbul ignore next */ const getDragActionConfig = (sourceInfo, config, fieldsConfig) => {\n if (!(sourceInfo.axes.x || sourceInfo.axes.y)) {\n return {\n criteria: null\n };\n }\n\n const axes = sourceInfo.axes;\n const xAxis = axes.x[0];\n const yAxis = axes.y[0];\n const axisFields = sourceInfo.fields;\n const xField = axisFields.x[0].getMembers()[0];\n const yField = axisFields.y[0].getMembers()[0];\n const xFieldType = fieldsConfig[xField].def.subtype ? fieldsConfig[xField].def.subtype :\n fieldsConfig[xField].def.type;\n const yFieldType = fieldsConfig[yField].def.subtype ? fieldsConfig[yField].def.subtype :\n fieldsConfig[yField].def.type;\n const dimensions = {};\n const stPos = config.startPos;\n const endPos = config.endPos;\n\n if (stPos.x === endPos.x && stPos.y === endPos.y) {\n return {\n criteria: null\n };\n }\n\n const dragDim = xFieldType === FieldType.MEASURE ? (yFieldType === FieldType.MEASURE ? ['x', 'y'] : ['y']) : ['x'];\n const criteria = {};\n const isXDimension = xFieldType === DimensionSubtype.CATEGORICAL;\n const isYDimension = yFieldType === DimensionSubtype.CATEGORICAL;\n const xRange = xAxis.constructor.type() === 'band' ? xAxis.scale().invertExtent(stPos.x, endPos.x) :\n xAxis.invert(stPos.x, endPos.x);\n const yRange = yAxis.constructor.type() === 'band' ? yAxis.scale().invertExtent(stPos.y, endPos.y) :\n yAxis.invert(stPos.y, endPos.y);\n const selectedDomains = {\n x: stPos.x === endPos.x ? [] : (isXDimension ? xRange : xRange.sort((a, b) => a - b)),\n y: stPos.y === endPos.y ? [] : (isYDimension ? yRange : yRange.sort((a, b) => a - b))\n };\n const rangeObj = {};\n\n if (dragDim.length === 2) {\n rangeObj[xField] = selectedDomains.x;\n rangeObj[yField] = selectedDomains.y;\n if (xField === yField) {\n const xdom = selectedDomains.x;\n const ydom = selectedDomains.y;\n const min = xdom[0] > ydom[0] ? ydom : xdom;\n const max = min === ydom ? xdom : ydom;\n if (min[1] < max[0]) {\n rangeObj[xField] = [];\n } else {\n rangeObj[xField] = [max[0], min[1] < max[1] ? min[1] : max[1]];\n }\n dimensions.x = [stPos.x, endPos.x];\n dimensions.y = [stPos.y, endPos.y];\n }\n } else {\n criteria[dragDim[0]] = selectedDomains[dragDim[0]] || [];\n\n if (dragDim[0] === 'x') {\n rangeObj[xField] = criteria.x;\n if (xFieldType === DimensionSubtype.CATEGORICAL) {\n dimensions.x = (config.snap && stPos.x !== endPos.x) ? xAxis.getNearestRange(stPos.x, endPos.x) :\n [stPos.x, endPos.x];\n }\n } else {\n rangeObj[yField] = criteria.y;\n if (yFieldType === DimensionSubtype.CATEGORICAL) {\n dimensions.y = (config.snap && stPos.y !== endPos.y) ? yAxis.getNearestRange(stPos.y, endPos.y) :\n [stPos.y, endPos.y];\n }\n }\n }\n\n return {\n criteria: rangeObj,\n dimensions\n };\n};\n\nexport default getDragActionConfig;\n","import {\n getEvent,\n getD3Drag\n } from 'muze-utils';\n\nimport getDragActionConfig from './drag-action-config';\n\n/**\n * Adds dragging action to the target element.\n * @param {VisualUnit} instance Instance of visual unit.\n * @param {SVGElement} targetEl Element on which brushing action is needed.\n * @param {Array} behaviours Array of behaviours\n */\nexport const attachDragEvent = (targetEl, behaviours, firebolt, touch) => {\n let startPos = {};\n let endPos = {};\n let drawingInf;\n\n const d3Drag = getD3Drag();\n let touchStart;\n targetEl.call(d3Drag().on('start', () => {\n const event = getEvent();\n startPos = {\n x: event.x,\n y: event.y\n };\n drawingInf = firebolt.context.getDrawingContext();\n touchStart = new Date().getTime();\n }).on('drag', () => {\n const event = getEvent();\n endPos = {\n x: event.x,\n y: event.y\n };\n if (touch && Math.abs(startPos.x - endPos.x) <= 5) {\n return;\n }\n endPos.x = Math.max(0, Math.min(endPos.x, drawingInf.width));\n endPos.y = Math.max(0, Math.min(endPos.y, drawingInf.height));\n\n const payload = getDragActionConfig(firebolt.context.getSourceInfo(), {\n startPos,\n endPos\n }, firebolt.context.data().getFieldsConfig());\n behaviours.forEach(beh => firebolt.dispatchBehaviour(beh, payload));\n }).on('end', () => {\n const event = getEvent();\n endPos = {\n x: event.x,\n y: event.y\n };\n const duration = new Date().getTime() - touchStart;\n\n if (touch && duration > 100 && Math.abs(startPos.x - endPos.x) <= 5) {\n return;\n }\n endPos.x = Math.max(0, Math.min(endPos.x, drawingInf.width));\n endPos.y = Math.max(0, Math.min(endPos.y, drawingInf.height));\n\n const payload = getDragActionConfig(firebolt.context.getSourceInfo(), {\n startPos,\n endPos,\n snap: true\n }, firebolt.context.data().getFieldsConfig());\n payload.dragEnd = true;\n behaviours.forEach(beh => firebolt.dispatchBehaviour(beh, payload));\n }));\n};\n\n","import { getClientPoint, getEvent } from 'muze-utils';\nimport { CONSOLIDATED, FRAGMENTED } from '../../enums/constants';\n\n/**\n * Adds mouse interactions to target element.\n * @param {Firebolt} instance instance of firebolt.\n * @param {SVGElement} targetEl Element on which the event listeners will be attached.\n * @param {Array} behaviours Array of behaviours\n */\n/* istanbul ignore next */ const hover = firebolt => (targetEl, behaviours) => {\n const dispatchBehaviour = function (args) {\n const event = getEvent();\n const context = firebolt.context;\n const tooltipConf = context.config().interaction.tooltip;\n const mode = tooltipConf.mode;\n const pos = getClientPoint(context.getDrawingContext().svgContainer, event);\n const nearestPoint = context.getNearestPoint(pos.x, pos.y, {\n getAllPoints: mode === CONSOLIDATED || mode === FRAGMENTED,\n data: args,\n event\n });\n const payload = {\n criteria: nearestPoint ? nearestPoint.id : null,\n showInPosition: nearestPoint.showInPosition,\n target: nearestPoint.target,\n position: pos,\n mode\n };\n\n behaviours.forEach(beh => firebolt.dispatchBehaviour(beh, payload));\n event.stopPropagation();\n };\n\n targetEl.on('mouseover', dispatchBehaviour)\n .on('mousemove', dispatchBehaviour)\n .on('mouseout', () => {\n behaviours.forEach(beh => firebolt.dispatchBehaviour(beh, {\n criteria: null\n }));\n });\n};\n\nexport default hover;\n","export const CLASSPREFIX = 'muze';\nexport const CONSOLIDATED = 'consolidated';\nexport const FRAGMENTED = 'fragmented';\n\n","import { getClientPoint } from 'muze-utils';\n\nexport const generatePayloadFromEvent = function (args, event, firebolt) {\n const context = firebolt.context;\n const pos = getClientPoint(context.getDrawingContext().svgContainer, event.touches ? event.touches[0] : event);\n const nearestPoint = context.getNearestPoint(pos.x, pos.y, {\n data: args,\n event\n });\n return {\n criteria: nearestPoint ? nearestPoint.id : null,\n showInPosition: nearestPoint.showInPosition,\n target: nearestPoint.target,\n position: pos\n };\n};\n","import { getEvent } from 'muze-utils';\nimport { generatePayloadFromEvent } from './helpers';\n\n/**\n * Adds mouse interactions to target element.\n * @param {VisualUnit} instance instance of visual unit.\n * @param {SVGElement} targetEl Element on which the event listeners will be attached.\n * @param {Array} behaviours Array of behaviours\n */\n/* istanbul ignore next */ const click = firebolt => (targetEl, behaviours) => {\n const dispatchBehaviour = function (args) {\n const event = getEvent();\n const payload = generatePayloadFromEvent(args, event, firebolt);\n behaviours.forEach(beh => firebolt.dispatchBehaviour(beh, payload));\n event.stopPropagation();\n };\n\n targetEl.on('click', dispatchBehaviour);\n};\nexport default click;\n","import drag from './drag';\nimport hover from './hover';\nimport { longtouch } from './longtouch';\nimport { touchdrag } from './touch-drag';\nimport * as ACTIONNAMES from '../../enums/actions';\nimport click from './click';\n\nexport const physicalActions = {\n [ACTIONNAMES.DRAG]: drag,\n [ACTIONNAMES.HOVER]: hover,\n [ACTIONNAMES.CLICK]: click,\n [ACTIONNAMES.LONGTOUCH]: longtouch,\n [ACTIONNAMES.TOUCHDRAG]: touchdrag\n};\n\n","import { attachDragEvent } from './helpers/drag-event';\n\n/**\n * Adds dragging action to the target element.\n * @param {VisualUnit} instance Instance of visual unit.\n * @param {SVGElement} targetEl Element on which brushing action is needed.\n * @param {Array} behaviours Array of behaviours\n */\n/* istanbul ignore next */ const drag = firebolt => (targetEl, behaviours) => {\n attachDragEvent(targetEl, behaviours, firebolt);\n};\n\nexport default drag;\n","/* global setTimeout */\nimport { getEvent } from 'muze-utils';\nimport { generatePayloadFromEvent } from './helpers';\n\n/**\n * Adds mouse interactions to target element.\n * @param {VisualUnit} instance instance of visual unit.\n * @param {SVGElement} targetEl Element on which the event listeners will be attached.\n * @param {Array} behaviours Array of behaviours\n */\nexport const longtouch = firebolt => (targetEl, behaviours) => {\n let event;\n let touchEnd;\n const dispatchBehaviour = function (args) {\n const payload = generatePayloadFromEvent(args, event, firebolt);\n behaviours.forEach(beh => firebolt.dispatchBehaviour(beh, payload));\n event.stopPropagation();\n };\n\n touchEnd = false;\n event = getEvent();\n targetEl.on('touchstart', (args) => {\n event = getEvent();\n touchEnd = false;\n setTimeout(() => {\n if (!touchEnd) {\n dispatchBehaviour(args);\n } else {\n behaviours.forEach(beh => firebolt.dispatchBehaviour(beh, {\n criteria: null\n }));\n }\n }, 100);\n }).on('touchend', () => {\n touchEnd = true;\n });\n};\n","import { attachDragEvent } from './helpers/drag-event';\n\n/**\n * Adds dragging action to the target element.\n * @param {VisualUnit} instance Instance of visual unit.\n * @param {SVGElement} targetEl Element on which brushing action is needed.\n * @param {Array} behaviours Array of behaviours\n */\nexport const touchdrag = firebolt => (targetEl, behaviours) => {\n attachDragEvent(targetEl, behaviours, firebolt, true);\n};\n\n","import { mergeRecursive, getUniqueId } from 'muze-utils';\n\nexport default class GenericSideEffect {\n constructor (firebolt) {\n this.firebolt = firebolt;\n this._enabled = true;\n this._strategy = 'default';\n this._config = {};\n this._id = getUniqueId();\n this._strategies = {};\n this.config(this.constructor.defaultConfig());\n }\n\n static defaultConfig () {\n return {};\n }\n\n static target () {\n return 'all';\n }\n\n static mutates () {\n return false;\n }\n\n config (...params) {\n if (params.length) {\n this._config = mergeRecursive(this._config, params[0]);\n return this;\n }\n return this._config;\n }\n\n disable () {\n this._enabled = false;\n return this;\n }\n\n enable () {\n this._enabled = true;\n return this;\n }\n\n isEnabled () {\n return this._enabled;\n }\n\n apply () {\n return this;\n }\n\n addStrategy (name, fn) {\n this._strategies[name] = fn;\n return this;\n }\n}\n","import GenericSideEffect from './generic';\n\nexport default class SurrogateSideEffect extends GenericSideEffect {\n applyInteractionStyle (set, config = {}, interactionType, apply) {\n const layers = this.firebolt.context.layers();\n layers.forEach(layer => layer.config().interactive !== false &&\n layer.applyInteractionStyle(interactionType, set.uids, apply));\n }\n}\n","import { makeElement } from 'muze-utils';\n\nimport GenericSideEffect from './generic';\n\nexport default class SpawnableSideEffect extends GenericSideEffect {\n createElement (container, elemType, data, className, callbacks) {\n return makeElement(container, elemType, data, className, callbacks);\n }\n\n drawingContext (...drawingContext) {\n if (drawingContext.length) {\n this._drawingContext = drawingContext[0];\n return this;\n }\n return this._drawingContext();\n }\n\n show () {\n return this;\n }\n\n hide () {\n return this;\n }\n}\n","import { selectElement } from 'muze-utils';\n\nexport const getBoxDimensionsFromPayload = (payload, axes, axisFields) => {\n let x1;\n let x2;\n let y1;\n let y2;\n let xRange;\n let yRange;\n let direction;\n const criteria = payload.criteria;\n const dimensions = payload.dimensions || {};\n const xDim = dimensions.x;\n const yDim = dimensions.y;\n\n if (criteria === null) {\n return null;\n }\n\n const xAxis = axes.x[0];\n const yAxis = axes.y[0];\n const xLinear = xAxis.constructor.type() === 'linear';\n const yLinear = yAxis.constructor.type() === 'linear';\n const xField = `${axisFields.x[0]}`;\n const yField = `${axisFields.y[0]}`;\n const xCriteria = criteria[xField];\n const yCriteria = criteria[yField];\n\n if (xCriteria && xCriteria[0] instanceof Array) {\n xRange = xCriteria[0];\n yRange = xCriteria[1];\n } else {\n xRange = xCriteria || [];\n yRange = yCriteria || [];\n }\n direction = xCriteria && yCriteria ? 'both' : (xCriteria ? 'vertical' : 'horizontal');\n if (xRange && xRange.length) {\n if ((yAxis.constructor.type() === 'band' && xLinear)) {\n x1 = x2 = undefined;\n direction = 'horizontal';\n } else {\n const domain = xAxis.domain();\n const bandScale = xAxis.constructor.type() === 'band';\n let x1Val;\n let x2Val;\n if (bandScale) {\n let x1DomainIndex = domain.indexOf(xRange[0]);\n let x2DomainIndex = domain.indexOf(xRange[xRange.length - 1]);\n [x1DomainIndex, x2DomainIndex] = [x1DomainIndex, x2DomainIndex].sort((a, b) => a - b);\n x1Val = domain[x1DomainIndex];\n x2Val = domain[x2DomainIndex];\n } else {\n x1Val = xRange[0];\n x2Val = xRange[xRange.length - 1];\n }\n x1 = xAxis.getScaleValue(x1Val);\n x2 = xAxis.getScaleValue(x2Val);\n x2 += bandScale ? xAxis.getUnitWidth() : 0;\n }\n } else {\n x1 = x2 = undefined;\n }\n if (yRange && yRange.length) {\n if ((xAxis.constructor.type() === 'band' && yLinear)) {\n y1 = y2 = undefined;\n direction = 'vertical';\n } else {\n const domain = yAxis.domain();\n const bandScale = yAxis.constructor.type() === 'band';\n let y1Val;\n let y2Val;\n if (bandScale) {\n let y1DomainIndex = domain.indexOf(yRange[0]);\n let y2DomainIndex = domain.indexOf(yRange[yRange.length - 1]);\n [y1DomainIndex, y2DomainIndex] = [y1DomainIndex, y2DomainIndex].sort(((a, b) => b - a));\n y1Val = domain[y1DomainIndex];\n y2Val = domain[y2DomainIndex];\n } else {\n y1Val = yRange[0];\n y2Val = yRange[yRange.length - 1];\n }\n y1 = yAxis.getScaleValue(y1Val);\n y2 = yAxis.getScaleValue(y2Val);\n y2 += yAxis.constructor.type() === 'band' ? yAxis.getUnitWidth() : 0;\n }\n } else {\n y1 = y2 = undefined;\n }\n\n if ((yLinear && xLinear) || !payload.dragEnd) {\n if (xDim) {\n [x1, x2] = xDim;\n }\n if (yDim) {\n [y1, y2] = yDim;\n }\n }\n\n return {\n dimension: {\n x1,\n x2,\n y1,\n y2\n },\n direction\n };\n};\n\nexport const changeVisibility = (context, sideEffectGroup, visible) => {\n const config = context.config();\n const className = config.defClassName;\n const classPrefix = config.classPrefix;\n selectElement(sideEffectGroup).selectAll(`.${classPrefix}-${className}`)\n .style('display', visible ? 'block' : 'none');\n};\n","import {\n getQualifiedClassName,\n selectElement,\n makeElement,\n isValidValue\n} from 'muze-utils';\nimport { CLASSPREFIX } from '../../enums/constants';\nimport './styles.scss';\nimport SpawnableSideEffect from '../spawnable';\nimport { selectionBoxDrag } from '../../actions/physical/selection-box-drag';\nimport { getBoxDimensionsFromPayload, changeVisibility } from './helper';\n\n/**\n * This class is used to create a selection box which is used by visual unit for brushing and\n * selection in the canvas.\n * @class SelectionBox\n */\nclass SelectionBox extends SpawnableSideEffect {\n /**\n * It returns the default configuration needed by selectionbox.\n * @return {Object} Default configuration of the selection box.\n */\n static defaultConfig () {\n return {\n defClassName: 'selection-box-group',\n className: '',\n classPrefix: CLASSPREFIX,\n box: {\n defClassName: 'selection-box',\n className: ''\n },\n transition: {\n duration: 200\n }\n };\n }\n\n static formalName () {\n return 'selectionBox';\n }\n\n /**\n * Draws the selectionbox with the specified dimensions.\n * @param {Object} dimension Dimensions of the selection box.\n * @param {number} dimension.x1 Starting x position\n * @param {number} dimension.x2 Ending x position\n * @param {number} dimension.y1 Starting y position\n * @param {number} dimension.y2 Ending y position\n * @param {Object} conf Configuration needed to draw the selection box\n * @param {number} unitWidth Width of the visual unit.\n * @param {number} unitHeight Height of the visual unit.\n */\n apply (selectionSet, payload) {\n let x;\n let y;\n let width;\n let height;\n const config = this._config;\n const boxConf = config.box;\n const firebolt = this.firebolt;\n const drawingInf = this.drawingContext();\n const mountPoint = drawingInf.sideEffectGroup;\n const unitWidth = drawingInf.width;\n const unitHeight = drawingInf.height;\n const classPrefix = config.classPrefix;\n const selectionGroupClassName = config.defClassName;\n\n if (payload.criteria === null) {\n this.hide(drawingInf);\n return this;\n }\n\n const sourceInf = firebolt.context.getSourceInfo();\n const { dimension, direction } = getBoxDimensionsFromPayload(payload, sourceInf.axes,\n sourceInf.fields);\n const transition = payload.dragEnd && config.transition;\n\n if (direction === 'both' || direction === 'vertical') {\n x = Math.min(dimension.x1, dimension.x2);\n width = Math.abs(dimension.x2 - dimension.x1);\n } else {\n x = 0;\n width = unitWidth;\n }\n if (direction === 'both' || direction === 'horizontal') {\n y = Math.min(dimension.y1, dimension.y2);\n height = Math.abs(dimension.y2 - dimension.y1);\n } else {\n height = unitHeight;\n y = 0;\n }\n this.show(drawingInf);\n // Create the data array for drawing the rectangle\n const points = [\n {\n x,\n y,\n width,\n height\n }\n ];\n // Create the container group for selection box.\n const selectionGroup = makeElement(selectElement(mountPoint), 'g', [1],\n `.${classPrefix}-${selectionGroupClassName}`);\n const sideEffect = this;\n const selection = selectionGroup.selectAll('rect').data(points);\n const selectionBox = selection.enter().append('rect')\n .each(function () {\n selectionBoxDrag(firebolt)(selectElement(this), ['brush'], sideEffect);\n })\n .merge(selection)\n .each(function (attrs) {\n let element = selectElement(this);\n transition && (element = element.transition().duration(transition.duration));\n for (const key in attrs) {\n if ({}.hasOwnProperty.call(attrs, key)) {\n isValidValue(attrs[key]) && element.attr(key, attrs[key]);\n }\n }\n });\n // Get the qualified class name for selection box rectangle\n const boxClassName = getQualifiedClassName(boxConf.defClassName, this._id, classPrefix);\n selectionBox.classed(boxClassName.join(' '), true);\n selectionBox.classed(boxConf.className, true);\n\n return this;\n }\n\n hide (drawingInf) {\n changeVisibility(this, drawingInf.sideEffectGroup, false);\n }\n\n show (drawingInf) {\n changeVisibility(this, drawingInf.sideEffectGroup, true);\n }\n}\n\nexport default SelectionBox;\n\n","import {\n getEvent,\n getD3Drag\n } from 'muze-utils';\n\nimport getDragActionConfig from './helpers/drag-action-config';\n\nexport const selectionBoxDrag = firebolt => (targetEl, behaviours) => {\n let subject;\n let drawingInf;\n const context = firebolt.context;\n const onDrag = (payload) => {\n behaviours.forEach(action => firebolt.dispatchBehaviour(action, payload));\n };\n const d3Drag = getD3Drag();\n\n targetEl.call(d3Drag().on('start', () => {\n const event = getEvent();\n drawingInf = context.getDrawingContext();\n subject = event.subject;\n }).on('drag', () => {\n const event = getEvent();\n subject.x += event.dx;\n subject.y += event.dy;\n const width = drawingInf.width;\n const height = drawingInf.height;\n const x = Math.min(width - subject.width, Math.max(subject.x, 0));\n const y = Math.min(height - subject.height, Math.max(subject.y, 0));\n const y2 = y + subject.height;\n const x2 = x + subject.width;\n\n if (x >= 0 && x2 <= width && y >= 0 && y2 <= height) {\n const payload = getDragActionConfig(context.getSourceInfo(), {\n startPos: {\n x,\n y\n },\n endPos: {\n x: x2,\n y: y2\n }\n }, context.data().getFieldsConfig());\n onDrag(payload);\n }\n }).on('end', () => {\n const width = drawingInf.width;\n const height = drawingInf.height;\n const x = Math.min(width - subject.width, Math.max(subject.x, 0));\n const y = Math.min(height - subject.height, Math.max(subject.y, 0));\n const y2 = y + subject.height;\n const x2 = x + subject.width;\n\n if (x >= 0 && x2 <= width && y >= 0 && y2 <= height) {\n const payload = getDragActionConfig(context.getSourceInfo(), {\n startPos: {\n x,\n y\n },\n endPos: {\n x: x2,\n y: y2\n },\n snap: true\n }, context.data().getFieldsConfig());\n payload.dragEnd = true;\n onDrag(payload);\n }\n }));\n};\n","export const CLASSPREFIX = 'muze';\nexport const ARROW_RIGHT = 'right';\nexport const ARROW_TOP = 'top';\nexport const ARROW_BOTTOM = 'bottom';\nexport const ARROW_LEFT = 'left';\nexport const TOOLTIP_LEFT = 'left';\nexport const TOOLTIP_RIGHT = 'right';\nexport const TOOLTIP_BOTTOM = 'bottom';\nexport const TOOLTIP_TOP = 'top';\nexport const INITIAL_STYLE = {\n position: 'absolute',\n width: 0,\n height: 0\n};\n","import { CLASSPREFIX } from './constants';\n\nexport const defaultConfig = {\n classPrefix: CLASSPREFIX,\n defClassName: 'tooltip-box',\n connectorClassName: 'tooltip-connectors',\n className: '',\n row: {\n margin: 0\n },\n content: {\n spacing: 5,\n iconContainerSize: 10,\n iconScale: 1,\n iconShape: 'circle',\n iconColor: '#ff0000',\n rowMargin: '0px',\n margin: 10,\n separator: ':',\n className: 'tooltip-content-container',\n parentClassName: 'tooltip-content-parent-container'\n },\n arrow: {\n size: 10,\n disabled: false,\n defClassName: 'tooltip-arrow',\n className: '',\n color: 'rgba(195,195,195,0.85)'\n }\n};\n","import { getQualifiedClassName } from 'muze-utils';\nimport { TOOLTIP_LEFT, TOOLTIP_RIGHT, ARROW_RIGHT, ARROW_LEFT, TOOLTIP_BOTTOM } from './constants';\n\nexport const getArrowPos = (orient, dim, measurement, config) => {\n let arrowPos;\n const { x, y, boxHeight, boxWidth } = measurement;\n const arrowDisabled = config.arrow.disabled;\n const arrowWidth = arrowDisabled ? 0 : config.arrow.size;\n\n if (orient === ARROW_LEFT || orient === ARROW_RIGHT) {\n let start = 0;\n let diff = boxHeight / 2;\n const plotBottom = dim.y + dim.height;\n const boxBottom = y + boxHeight;\n\n if (dim.y > y) {\n start = dim.y - y;\n diff = (plotBottom >= boxBottom ? (boxBottom - dim.y) : dim.height) / 2;\n } else if (boxBottom > plotBottom) {\n diff = Math.abs(y - (dim.y + dim.height)) / 2;\n }\n arrowPos = start + diff - arrowWidth / 2;\n } else {\n let start = 0;\n let diff = boxWidth / 2;\n const plotRight = dim.x + dim.width;\n const boxRight = x + boxWidth;\n\n if (dim.x > x) {\n start = dim.x - x;\n diff = (plotRight >= boxRight ? (boxRight - dim.x) : dim.width) / 2;\n } else if (boxRight > plotRight) {\n diff = Math.abs(x - (dim.x + dim.width)) / 2;\n }\n arrowPos = start + diff - arrowWidth / 2;\n }\n return arrowPos;\n};\n\n/**\n * Places the arrow in the specified arrow position. It also applies appropriate arrow\n * class name to the arrow element.\n * @param {string} position Left, bottom or right position of the arrow;\n * @param {number} arrowPos position of arrow in pixels\n * @return {Tooltip} Instance of tooltip.\n */\nexport const placeArrow = (context, position, arrowPos) => {\n const tooltipArrow = context._tooltipArrow;\n const tooltipBackground = context._tooltipBackground;\n const config = context._config;\n const classPrefix = config.classPrefix;\n const arrowConf = config.arrow;\n const className = getQualifiedClassName(arrowConf.defClassName, context._id, config.classPrefix);\n\n tooltipArrow.style('display', 'block');\n tooltipArrow.attr('class', `${className.join(' ')}`);\n if (position === TOOLTIP_LEFT || position === TOOLTIP_RIGHT) {\n tooltipArrow.style('top', `${arrowPos}px`);\n tooltipArrow.style('left', '');\n tooltipBackground.style('top', `${arrowPos}px`);\n tooltipBackground.style('left', '');\n } else {\n position === TOOLTIP_BOTTOM ? tooltipArrow.style('top', '100%') : tooltipArrow.style('top',\n `-${arrowConf.size}px`);\n tooltipArrow.style('left', `${arrowPos}px`);\n position === TOOLTIP_BOTTOM ? tooltipBackground.style('top', '100%') : tooltipBackground.style('top',\n `-${arrowConf.size + 3}px`);\n tooltipBackground.style('left', `${arrowPos}px`);\n }\n tooltipArrow.classed(`${classPrefix}-tooltip-arrow`, true);\n tooltipArrow.classed(`${classPrefix}-tooltip-arrow-${context._arrowOrientation}`, false);\n tooltipArrow.classed(`${classPrefix}-tooltip-arrow-${position}`, true);\n tooltipBackground.classed(`${classPrefix}-tooltip-background-arrow`, true);\n tooltipBackground.classed(`${classPrefix}-tooltip-background-arrow-${context._arrowOrientation}`, false);\n tooltipBackground.classed(`${classPrefix}-tooltip-background-arrow-${position}`, true);\n return this;\n};\n\nexport const reorderContainers = (parentContainer, className) => {\n parentContainer.selectAll(className).sort((a, b) => a - b);\n};\n","import {\n getClosestIndexOf,\n DateTimeFormatter,\n DimensionSubtype,\n FieldType\n} from 'muze-utils';\n\nconst timeFormats = {\n millisecond: '%A, %b %e, %H:%M:%S.%L',\n second: '%A, %b %e, %H:%M:%S',\n minute: '%A, %b %e, %H:%M',\n hour: '%A, %b %e, %H:%M',\n day: '%A, %b %e, %Y',\n month: '%B %Y',\n year: '%Y'\n};\nconst timeDurations = [\n ['millisecond', 'second', 'minute', 'hour', 'day', 'month', 'year'],\n [1, 1000, 60000, 3600000, 86400000, 2592000000, 31536000000]\n];\nconst getNearestInterval = (interval) => {\n const index = getClosestIndexOf(timeDurations[1], interval);\n return timeDurations[0][index];\n};\nconst defaultTooltipFormatters = (type, formatter) => {\n const formatters = {\n [DimensionSubtype.TEMPORAL]: (value, interval) => {\n const nearestInterval = getNearestInterval(interval);\n return DateTimeFormatter.formatAs(value, timeFormats[nearestInterval]);\n },\n [FieldType.MEASURE]: value => formatter(value ? value.toFixed(2) : value),\n [FieldType.DIMENSION]: value => value\n };\n return formatters[type];\n};\n\nconst getTabularData = (data, schema, fieldspace, timeDiffs) => {\n const rows = [];\n rows.push(schema.map(d => d.name));\n data.forEach((d) => {\n const row = [];\n schema.forEach((fieldObj, i) => {\n const interval = fieldObj.subtype === DimensionSubtype.TEMPORAL ? timeDiffs[fieldObj.name] : 0;\n const numberFormat = fieldObj.type === FieldType.MEASURE && fieldspace.fields[i]._ref.numberFormat();\n const formatterFn = defaultTooltipFormatters(fieldObj.subtype || fieldObj.type, numberFormat);\n const value = formatterFn(d[i], interval);\n row.push(value);\n });\n rows.push(row);\n });\n return rows;\n};\n\nexport const buildTooltipData = (dataModel, config = {}, context) => {\n let fieldValues = [];\n const dataObj = dataModel.getData();\n const data = dataObj.data;\n const schema = dataObj.schema;\n const formatters = config.formatters;\n const separator = config.separator;\n const fieldsConfig = dataModel.getFieldsConfig();\n const fieldspace = dataModel.getFieldspace();\n const fieldsObj = fieldspace.fieldsObj();\n const dimensionMeasureMap = context.dimensionMeasureMap;\n const axes = context.axes;\n const detailFields = context.detailFields || [];\n const dimensions = schema.filter(d => d.type === FieldType.DIMENSION);\n const measures = schema.filter(d => d.type === FieldType.MEASURE);\n // const containsRetinalField = schema.find(d => d.name in dimensionMeasureMap);\n const containsDetailField = schema.find(d => detailFields.indexOf(d.name) !== -1);\n const dataLen = data.length;\n const getRowContent = (field, type) => {\n let value;\n let formattedValue;\n let measureIndex;\n const values = [];\n const index = fieldsConfig[field].index;\n const interval = fieldsConfig[field].def.subtype === DimensionSubtype.TEMPORAL ?\n fieldsObj[field].getMinDiff() : 0;\n const formatterFn = (formatters && formatters[field]) || defaultTooltipFormatters(type, val => val);\n\n if (value !== null) {\n let uniqueVals = type === FieldType.MEASURE ? data.map(d => d[index]) :\n [...new Set(data.map(d => d[index]))];\n uniqueVals = uniqueVals.filter(d => d !== '');\n const colorAxis = axes.color[0];\n const shapeAxis = axes.shape[0];\n const sizeAxis = axes.size[0];\n const isRetinalField = (colorAxis || shapeAxis || sizeAxis) && dataLen > 1 &&\n type !== FieldType.MEASURE;\n\n uniqueVals.forEach((val, i) => {\n let key;\n const associatedMeasures = dimensionMeasureMap[field];\n\n if (associatedMeasures && associatedMeasures.length && dataLen > 1) {\n key = val;\n let icon = {\n value: ''\n };\n\n if (isRetinalField) {\n icon = {\n type: 'icon',\n color: colorAxis.getColor(val),\n shape: shapeAxis.getShape(val),\n size: sizeAxis.getSize(val) * config.iconScale\n };\n }\n if (associatedMeasures.length > 1) {\n values.push([icon, `${key}`]);\n associatedMeasures.forEach((measure) => {\n measureIndex = fieldsConfig[measure].index;\n value = data[i][measureIndex];\n formattedValue = defaultTooltipFormatters('measure',\n fieldspace.fields[measureIndex]._ref.numberFormat())(value, interval);\n values.push([{\n value: `${measure}${separator}`,\n style: {\n 'margin-left': `${config.margin}px}`\n },\n className: `${config.classPrefix}-tooltip-key`\n }, {\n value: `${formattedValue}`,\n className: `${config.classPrefix}-tooltip-value`\n }]);\n });\n } else {\n measureIndex = fieldsConfig[associatedMeasures[0]].index;\n value = data[i][measureIndex];\n formattedValue = defaultTooltipFormatters('measure',\n fieldspace.fields[measureIndex]._ref.numberFormat())(value, interval);\n values.push([icon, {\n value: `${key}${separator}`,\n className: `${config.classPrefix}-tooltip-key`\n }, {\n value: `${formattedValue}`,\n className: `${config.classPrefix}-tooltip-value`\n }]);\n }\n } else {\n key = field;\n value = val;\n formattedValue = formatterFn(value, interval);\n values.push([{\n value: `${key}${separator}`,\n className: `${config.classPrefix}-tooltip-key`\n }, {\n value: `${formattedValue}`,\n className: `${config.classPrefix}-tooltip-value`\n }]);\n }\n });\n }\n return values;\n };\n let displayFormat = 'keyValue';\n\n if (dataLen > 1 && containsDetailField) {\n fieldValues = getTabularData(data, schema, fieldspace, context.timeDiffs);\n displayFormat = 'table';\n } else {\n dimensions.forEach((item) => {\n const type = item.subtype ? item.subtype : item.type;\n fieldValues = [...fieldValues, ...getRowContent(item.name, type)];\n });\n\n const allMeasures = [...new Set(...Object.values(dimensionMeasureMap))];\n const filteredMeasures = dataLen > 1 ? measures.filter(d => allMeasures.indexOf(d.name) === -1)\n : measures;\n\n filteredMeasures.forEach((item) => {\n const type = item.subtype ? item.subtype : item.type;\n fieldValues = [...fieldValues, ...getRowContent(item.name, type)];\n });\n }\n\n return {\n content: fieldValues,\n displayFormat\n };\n};\n\n/**\n * This contains the strategy methods for showing tooltip in the chart.\n * @param {VisualUnit} context Attached instance.\n */\nexport const strategy = {\n keyValue: (data, config, context) => {\n const values = buildTooltipData(data, config, context);\n return values;\n }\n};\n\nexport const DEFAULT_STRATEGY = 'keyValue';\n","import {\n selectElement,\n mergeRecursive,\n makeElement,\n setAttrs,\n setStyles,\n getSymbol,\n isSimpleObject\n} from 'muze-utils';\nimport { DEFAULT_STRATEGY, strategy } from './strategy';\nimport { defaultConfig } from './default-config';\n\n/**\n * This class is used to manage the content of tooltip.\n */\nexport default class Content {\n /**\n * Creates an instance of content.\n */\n constructor () {\n this._model = null;\n this._strategy = DEFAULT_STRATEGY;\n this._formatter = null;\n this._config = this.constructor.defaultConfig();\n }\n /**\n * Returns the default configuration of tooltip\n * @return {Object} Configuration of tooltip.\n */\n static defaultConfig () {\n const config = defaultConfig.content;\n config.classPrefix = defaultConfig.classPrefix;\n return config;\n }\n\n config (...c) {\n if (c.length > 0) {\n this._config = mergeRecursive(this._config, c[0]);\n return this;\n }\n return this._config;\n }\n\n /**\n * Update model. The format contains presentation strategy which determines how to show the content.\n * If no strategy is mentioned then default is to show key value pair\n */\n update (item) {\n this._model = item.model;\n this._strategy = item.strategy !== undefined ? item.strategy : DEFAULT_STRATEGY;\n this._formatter = item.formatter;\n return this;\n }\n\n context (ctx) {\n this._context = ctx;\n return this;\n }\n\n render (mount) {\n let data;\n const config = this._config;\n const iconContainerSize = config.iconContainerSize;\n const formatter = this._formatter;\n const rowMargin = config.rowMargin;\n const model = this._model;\n\n this._mount = mount;\n if (model instanceof Array) {\n data = model;\n } else {\n data = formatter instanceof Function ? formatter(this._model, this._context) :\n strategy[this._strategy](this._model, this.config(), this._context);\n }\n\n if (data instanceof Function) {\n mount.html(data());\n } else {\n let content = data;\n let displayFormat = 'default';\n\n if (isSimpleObject(data)) {\n content = data.content;\n displayFormat = data.displayFormat;\n }\n\n const body = makeElement(mount, 'div', [displayFormat], `${config.classPrefix}-tooltip-content`, {},\n d => d);\n\n if (displayFormat === 'table') {\n const table = makeElement(body, 'table', [1], `${config.classPrefix}-tooltip-table`);\n const tbody = makeElement(table, 'tbody', [1], `${config.classPrefix}-tooltip-table-tbody`);\n const rows = makeElement(tbody, 'tr', content, `${config.classPrefix}-tooltip-table-row`);\n rows.each(function (d, i) {\n selectElement(this).classed(`${config.classPrefix}-tooltip-table-row-${i}`, true);\n });\n const cells = makeElement(rows, 'td', d => d, `${config.classPrefix}-tooltip-table-cell`);\n cells.each(function (d) {\n selectElement(this).html(d);\n });\n } else {\n const rows = makeElement(body, 'div', content, `${config.classPrefix}-tooltip-row`);\n const cells = makeElement(rows, 'span', d => d, `${config.classPrefix}-tooltip-content`);\n cells.attr('class', `${config.classPrefix}-tooltip-content`);\n setStyles(rows, {\n margin: rowMargin\n });\n setStyles(cells, {\n display: 'inline-block',\n 'margin-right': `${config.spacing}px`\n });\n\n cells.each(function (d) {\n const el = selectElement(this);\n el.html('');\n if (d instanceof Object) {\n if (d.type === 'icon') {\n const svg = makeElement(el, 'svg', [1]);\n const path = makeElement(svg, 'path', [1]);\n const shape = d.shape instanceof Function ? d.shape : getSymbol(d.shape);\n\n setAttrs(svg, {\n x: 0,\n y: 0,\n width: iconContainerSize,\n height: iconContainerSize\n });\n setAttrs(path, {\n d: shape.size(d.size)(),\n transform: `translate(${iconContainerSize / 2}, ${iconContainerSize / 2})`\n });\n setStyles(path, {\n fill: d.color\n });\n setStyles(svg, {\n width: `${iconContainerSize}px`,\n height: `${iconContainerSize}px`\n });\n } else {\n el.html(d.value);\n d.className && el.classed(d.className, true);\n setStyles(el, d.style);\n }\n } else {\n el.html(d);\n }\n });\n }\n }\n return this;\n }\n\n clear () {\n this._model = null;\n return this;\n }\n}\n","import {\n mergeRecursive,\n getQualifiedClassName,\n getUniqueId,\n selectElement,\n setStyles,\n makeElement\n} from 'muze-utils';\nimport { ARROW_BOTTOM, ARROW_LEFT, ARROW_RIGHT, TOOLTIP_LEFT, TOOLTIP_RIGHT, TOOLTIP_BOTTOM, TOOLTIP_TOP,\n INITIAL_STYLE } from './constants';\nimport { defaultConfig } from './default-config';\nimport { getArrowPos, placeArrow, reorderContainers } from './helper';\nimport './styles.scss';\nimport Content from './content';\n\n/**\n * This component is responsible for creating a tooltip element. It appends the tooltip\n * in the body element.\n * @class Tooltip\n */\nexport default class Tooltip {\n /**\n * Initializes the tooltip with the container element and configuration\n * @param {HTMLElement} container container where the tooltip will be mounted.\n * @param {string} className Class name of the tooltip.\n */\n constructor (htmlContainer, svgContainer) {\n let connectorContainer = svgContainer;\n this._id = getUniqueId();\n this._config = {};\n this.config({});\n const tooltipConf = this._config;\n const classPrefix = tooltipConf.classPrefix;\n const contentClass = tooltipConf.content.parentClassName;\n const container = makeElement(htmlContainer, 'div', [1], `${classPrefix}-tooltip-container`);\n this._container = container;\n this._tooltipContainer = container.append('div').style('position', 'absolute');\n this._contentContainer = this._tooltipContainer.append('div').attr('class', `${classPrefix}-${contentClass}`);\n this._tooltipBackground = this._tooltipContainer.append('div').style('position', 'relative');\n this._tooltipArrow = this._tooltipContainer.append('div');\n\n if (!svgContainer) {\n connectorContainer = htmlContainer.append('svg').style('pointer-events', 'none');\n }\n this._contents = {};\n this._tooltipConnectorContainer = selectElement(connectorContainer)\n .append('g')\n .attr('class', `${tooltipConf.classPrefix}-${tooltipConf.connectorClassName}`);\n const id = this._id;\n const defClassName = tooltipConf.defClassName;\n const qualifiedClassName = getQualifiedClassName(defClassName, id, tooltipConf.classPrefix);\n\n setStyles(this._tooltipArrow, INITIAL_STYLE);\n setStyles(this._tooltipBackground, INITIAL_STYLE);\n this.addClass(qualifiedClassName.join(' '));\n this.addClass(tooltipConf.className);\n this.hide();\n }\n\n /**\n * Sets the configuration of tooltip.\n * @param {Object} config Configuration of tooltip\n * @return {Tooltip} Instance of tooltip\n */\n config (...config) {\n if (config.length > 0) {\n const defConf = mergeRecursive({}, this.constructor.defaultConfig());\n this._config = mergeRecursive(defConf, config[0]);\n return this;\n }\n return this._config;\n }\n\n /**\n * Returns the default configuration of tooltip\n * @return {Object} Configuration of tooltip.\n */\n static defaultConfig () {\n return defaultConfig;\n }\n /**\n * Sets the class name of tooltip\n * @param {string} className tooltip class name\n * @return {Tooltip} Instance of tooltip.\n */\n addClass (className) {\n this._tooltipContainer.classed(className, true);\n return this;\n }\n\n context (...ctx) {\n if (ctx.length) {\n this._context = ctx[0];\n return this;\n }\n return this._context;\n }\n\n content (name, data, contentConfig = {}) {\n const config = this.config();\n const { classPrefix } = config;\n const contentClass = config.content.className;\n const formatter = config.formatter;\n const className = contentConfig.className || `${classPrefix}-${contentClass}-${name}`;\n const content = this._contents[name] = this._contents[name] || new Content();\n const container = makeElement(this._contentContainer, 'div', [contentConfig.order], className);\n container.attr('class', `${classPrefix}-${contentClass} ${className}`);\n reorderContainers(this._contentContainer, `.${classPrefix}-${contentClass}`);\n const contentConf = config.content;\n contentConfig.classPrefix = this._config.classPrefix;\n content.config(contentConf);\n\n if (data === null) {\n content.clear();\n container.remove();\n delete this._contents[name];\n } else {\n content.update({\n model: data,\n formatter: contentConfig.formatter || formatter\n });\n content.context(this._context);\n content.render(container);\n }\n\n if (!Object.keys(this._contents).length) {\n this.hide();\n }\n return this;\n }\n\n getContents () {\n return Object.values(this._contents);\n }\n\n /**\n * Positions the tooltip at the given x and y position.\n * @param {number} x x position\n * @param {number} y y position\n * @return {Tooltip} Instance of tooltip.\n */\n position (x, y, conf = {}) {\n if (!Object.keys(this._contents).length) {\n this.hide();\n return this;\n }\n this.show();\n const target = this._target;\n const repositionArrow = conf.repositionArrow;\n\n if (target && repositionArrow) {\n const node = this._tooltipContainer.node();\n const config = this._config;\n const arrowDisabled = config.arrow.disabled;\n const arrowWidth = arrowDisabled ? 0 : config.arrow.size;\n const arrowOrient = this._arrowOrientation;\n const outsidePlot = arrowOrient === ARROW_LEFT || arrowOrient === ARROW_RIGHT ?\n (y + node.offsetHeight - arrowWidth) < target.y || y > (target.y + target.height) :\n (x + node.offsetWidth - arrowWidth) < target.x || x > (target.x + target.width);\n\n if (!arrowDisabled) {\n if (outsidePlot) {\n let path;\n this._tooltipArrow.style('display', 'none');\n this._tooltipBackground.style('display', 'none');\n this._tooltipConnectorContainer.style('display', 'block');\n const connector = this._tooltipConnectorContainer.selectAll('path').data([1]);\n const enter = connector.enter().append('path');\n if (arrowOrient === ARROW_LEFT) {\n path = `M ${x} ${y + node.offsetHeight / 2} L ${target.x + target.width}`\n + ` ${target.y + target.height / 2}`;\n } else if (arrowOrient === ARROW_RIGHT) {\n path = `M ${x + node.offsetWidth} ${y + node.offsetHeight / 2}`\n + ` L ${target.x} ${target.y + target.height / 2}`;\n } else if (arrowOrient === ARROW_BOTTOM) {\n path = `M ${x + node.offsetWidth / 2} ${y + node.offsetHeight}`\n + ` L ${target.x + target.width / 2} ${target.y}`;\n }\n enter.merge(connector).attr('d', path).style('display', 'block');\n } else {\n const arrowPos = getArrowPos(arrowOrient, target, {\n x,\n y,\n boxHeight: node.offsetHeight,\n boxWidth: node.offsetWidth\n }, this._config);\n\n placeArrow(this, this._arrowOrientation, arrowPos);\n this._tooltipConnectorContainer.style('display', 'none');\n }\n }\n }\n\n const offset = this._offset || {\n x: 0,\n y: 0\n };\n this._tooltipContainer.style('left', `${offset.x + x}px`).style('top',\n `${offset.y + y}px`);\n\n return this;\n }\n\n /**\n * Positions the tooltip relative to a rectangular box. It takes care of tooltip overflowing the\n * boundaries.\n * @param {Object} dim Dimensions of the plot.\n */\n positionRelativeTo (dim, tooltipConf = {}) {\n let obj;\n let orientation = tooltipConf.orientation;\n this.show();\n if (!dim) {\n this.hide();\n return this;\n }\n\n const extent = this._extent;\n const node = this._tooltipContainer.node();\n\n this._tooltipContainer.style('top', '0px')\n .style('left', '0px');\n const offsetWidth = node.offsetWidth + 2;\n const offsetHeight = node.offsetHeight + 2;\n const config = this._config;\n const offset = this._offset;\n const arrowDisabled = config.arrow.disabled;\n const arrowSize = arrowDisabled ? 0 : config.arrow.size;\n const draw = tooltipConf.draw !== undefined ? tooltipConf.draw : true;\n const topSpace = dim.y;\n // When there is no space in right\n const dimX = dim.x + dim.width + offset.x;\n const rightSpace = extent.width - dimX;\n const leftSpace = dim.x + offset.x - extent.x;\n const positionTop = topSpace > (offsetHeight + arrowSize);\n const positionRight = rightSpace >= offsetWidth + arrowSize;\n const positionLeft = leftSpace >= offsetWidth + arrowSize;\n\n const positionHorizontal = () => {\n let position;\n let x = dim.x + dim.width;\n let y = dim.y;\n\n if (positionRight) {\n position = TOOLTIP_LEFT;\n x += arrowSize;\n } else if (positionLeft) {\n x = dim.x - offsetWidth;\n position = TOOLTIP_RIGHT;\n x -= arrowSize;\n } else {\n position = 'left';\n x += arrowSize;\n }\n if (dim.height < offsetHeight) {\n y = Math.max(0, dim.y + dim.height / 2 - offsetHeight / 2);\n }\n\n const arrowPos = getArrowPos(position, dim, {\n x,\n y,\n boxHeight: offsetHeight,\n boxWidth: offsetWidth\n }, this._config);\n\n return {\n position,\n arrowPos,\n x,\n y\n };\n };\n\n const positionVertical = () => {\n let position;\n let y;\n // Position tooltip at the center of plot\n let x = dim.x - offsetWidth / 2 + dim.width / 2;\n\n // Overflows to the right\n if ((extent.width - (dim.x + offset.x)) < offsetWidth) {\n x = extent.width - offsetWidth - offset.x;\n } else if ((x + offset.x) < extent.x) { // Overflows to the left\n x = extent.x;\n }\n\n if (positionTop) {\n y = dim.y - offsetHeight - arrowSize;\n position = TOOLTIP_BOTTOM;\n } else {\n y = dim.y + dim.height + arrowSize;\n position = TOOLTIP_TOP;\n }\n\n const arrowPos = getArrowPos(position, dim, {\n x,\n y,\n boxHeight: offsetHeight,\n boxWidth: offsetWidth\n }, this._config);\n\n return {\n position,\n arrowPos,\n x,\n y\n };\n };\n\n this._target = dim;\n if (!orientation) {\n if (positionTop) {\n orientation = 'vertical';\n } else if (positionRight || positionLeft) {\n orientation = 'horizontal';\n } else {\n orientation = 'vertical';\n }\n }\n\n if (orientation === 'horizontal') {\n obj = positionHorizontal();\n } else if (orientation === 'vertical') {\n obj = positionVertical();\n }\n\n this._position = {\n x: obj.x,\n y: obj.y\n };\n\n this._arrowPos = obj.arrowPos;\n if (!arrowDisabled) {\n placeArrow(this, obj.position, obj.arrowPos);\n } else {\n this._tooltipArrow.style('display', 'none');\n this._tooltipBackground.style('display', 'none');\n }\n this._arrowOrientation = obj.position;\n draw && this.position(obj.x, obj.y);\n return this;\n }\n\n /**\n * Hides the tooltip element.\n * @return {Tooltip} Instance of tooltip.\n */\n hide () {\n this._tooltipContainer.style('display', 'none');\n this._tooltipConnectorContainer.style('display', 'none');\n return this;\n }\n\n /**\n * Shows the tooltip element.\n * @return {Tooltip} Instance of tooltip.\n */\n show () {\n this._tooltipContainer.style('display', 'block');\n return this;\n }\n\n extent (extent) {\n this._extent = extent;\n return this;\n }\n\n offset (offset) {\n this._offset = offset;\n return this;\n }\n\n remove () {\n this._tooltipContainer.remove();\n this._tooltipBackground.remove();\n this._tooltipConnectorContainer.remove();\n return this;\n }\n}\n","import { FieldType } from 'muze-utils';\n\nexport const strategies = {\n showSelectedItems: (dm) => {\n const dataObj = dm.getData();\n const measures = dataObj.schema.filter(d => d.type === FieldType.MEASURE);\n const aggregatedModel = dm.groupBy([''], measures.reduce((acc, v) => {\n acc[v.name] = v.defAggFn === 'count' ? 'sum' : v.defAggFn;\n return acc;\n }, {}));\n const fieldsObj = dm.getFieldspace().fieldsObj();\n const fieldsConf = aggregatedModel.getFieldsConfig();\n let values = [{\n value: `${dataObj.data.length}`,\n style: {\n 'font-weight': 'bold'\n }\n }, 'Items Selected'];\n const measureNames = measures.map(d => d.name);\n if (measureNames.length) {\n values = [...values, ...[`(${fieldsObj[measureNames[0]].defAggFn().toUpperCase()}) ${measureNames[0]}`,\n {\n value: `${aggregatedModel.getData().data[0][fieldsConf[measureNames[0]].index].toFixed(2)}`,\n style: {\n 'font-weight': 'bold'\n }\n }]];\n }\n return [values];\n }\n};\n","import { Tooltip as TooltipRenderer } from '@chartshq/muze-tooltip';\nimport { FieldType } from 'muze-utils';\nimport { spaceOutBoxes } from '../helper';\nimport { strategies } from './strategies';\nimport { FRAGMENTED } from '../../enums/constants';\nimport SpawnableSideEffect from '../spawnable';\n\nimport './styles.scss';\n\nexport default class Tooltip extends SpawnableSideEffect {\n constructor (...params) {\n super(...params);\n this._tooltips = {};\n this._strategies = strategies;\n this._strategy = 'default';\n }\n\n static defaultConfig () {\n return {\n padding: 5,\n offset: {\n x: 0,\n y: 0\n }\n };\n }\n\n static formalName () {\n return 'tooltip';\n }\n\n apply (selectionSet, payload, options = {}) {\n let totalHeight = 0;\n let totalWidth = 0;\n const dataModel = selectionSet.mergedEnter.model;\n const context = this.firebolt.context;\n const drawingInf = this.drawingContext();\n if ((dataModel.isEmpty() || payload.criteria === null) || selectionSet.isSourceFieldPresent === false) {\n this.hide(options, null);\n return this;\n }\n\n const tooltips = this._tooltips;\n const config = this.config();\n const boundBox = {\n width: drawingInf.width,\n height: drawingInf.height\n };\n const showInPosition = payload.showInPosition;\n const pad = config.padding;\n const dataModels = [];\n const fragmented = config.mode === FRAGMENTED;\n const sourceInf = context.getSourceInfo();\n const fields = sourceInf.fields;\n const xFieldDim = fields.x[0] ? fields.x[0].type() === FieldType.DIMENSION : false;\n const showVertically = !!xFieldDim;\n const tooltipPos = payload.position;\n const boxes = [];\n const enter = {};\n const uids = dataModel.getData().uids;\n if (fragmented) {\n dataModels.push(...uids.map(d => dataModel.select((fieldsArr, i) => i === d, {\n saveChild: false\n })));\n } else {\n dataModels.push(dataModel);\n }\n\n let target = payload.target;\n let targetFields = [];\n if (target) {\n targetFields = target[0] || [];\n const sourceFields = payload.sourceFields;\n const indices = [];\n for (let i = 0, len = targetFields.length; i < len; i++) {\n if (sourceFields.indexOf(targetFields[i]) !== -1) {\n indices.push(i);\n }\n }\n target = target.map(d => d.filter((v, i) => indices.indexOf(i) !== -1));\n }\n\n const plotDimensions = context.getPlotPointsFromIdentifiers(target || payload.criteria, {\n getBBox: true\n });\n\n // Show tooltip for each datamodel\n for (let i = 0; i < dataModels.length; i++) {\n let plotDim = plotDimensions[i];\n if (fragmented) {\n const dimensions = dataModels[i].getData().schema.filter(d => d.type === FieldType.DIMENSION)\n .map(d => d.name);\n plotDim = context.getPlotPointsFromIdentifiers(dataModels[i].project(dimensions), { getBBox: true });\n plotDim = plotDim && plotDim[0];\n }\n\n let dt = dataModels[i];\n if (config.fields) {\n dt = dt.project(config.fields, {\n saveChild: false\n });\n }\n if (config.dataTransform) {\n dt = config.dataTransform(dt, i);\n }\n\n enter[i] = true;\n const layoutContainer = drawingInf.parentContainer;\n const layoutBoundBox = layoutContainer.getBoundingClientRect();\n const unitBoundBox = drawingInf.htmlContainer.getBoundingClientRect();\n\n const offsetLeft = unitBoundBox.left - layoutBoundBox.left;\n const offsetTop = unitBoundBox.top - layoutBoundBox.top;\n const tooltipInst = tooltips[i] = tooltips[i] || new TooltipRenderer(layoutContainer,\n drawingInf.svgContainer);\n\n sourceInf.payload = payload;\n sourceInf.firebolt = this.firebolt;\n sourceInf.detailFields = context.detailFields();\n sourceInf.timeDiffs = context.timeDiffsByField();\n tooltipInst.context(sourceInf);\n const strategy = strategies[options.strategy];\n tooltipInst.content(options.strategy || this._strategy, dt, {\n formatter: strategy,\n order: options.order\n })\n .config(this.config())\n .extent({\n x: 0,\n y: 0,\n width: layoutBoundBox.width,\n height: layoutBoundBox.height\n })\n .offset({\n x: offsetLeft + (config.offset.x || 0),\n y: offsetTop + (config.offset.y || 0)\n });\n\n if (showInPosition) {\n tooltipInst.position(tooltipPos.x + pad, tooltipPos.y + pad);\n } else if (plotDim) {\n tooltipInst.positionRelativeTo({\n x: plotDim.x,\n y: plotDim.y,\n width: plotDim.width || 0,\n height: plotDim.height || 0\n }, {\n orientation: fragmented ?\n (showVertically ? 'horizontal' : 'vertical') : undefined\n });\n } else {\n tooltipInst.hide();\n break;\n }\n\n if (fragmented) {\n const position = tooltipInst._position;\n const tooltipBoundBox = tooltipInst._tooltipContainer.node().getBoundingClientRect();\n\n totalHeight += tooltipBoundBox.height + pad;\n totalWidth += tooltipBoundBox.width + pad;\n if (showVertically ? totalHeight > drawingInf.height : totalWidth > drawingInf.width) {\n break;\n }\n boxes.push({\n x: position.x,\n y: position.y,\n width: tooltipBoundBox.width,\n height: tooltipBoundBox.height,\n tooltip: tooltipInst\n });\n }\n }\n\n for (const key in tooltips) {\n if (!enter[key]) {\n const tooltip = tooltips[key];\n tooltip.content(payload.action, null);\n if (!tooltip.getContents().length) {\n tooltip.remove();\n delete tooltips[key];\n }\n }\n }\n if (fragmented) {\n spaceOutBoxes(boxes, boundBox, showVertically);\n boxes.forEach(box => box.tooltip.position(box.x, box.y, {\n repositionArrow: true\n }));\n }\n return this;\n }\n\n hide (options) {\n const tooltips = this._tooltips;\n for (const key in tooltips) {\n if ({}.hasOwnProperty.call(tooltips, key)) {\n const strategy = options.strategy || this._strategy;\n tooltips[key].content(strategy, null);\n tooltips[key].hide();\n }\n }\n }\n}\n","export const spaceOutBoxes = (boxes, extent, showVertically) => {\n let y;\n let height;\n let x;\n let width;\n let i;\n const pad = 5;\n const len = boxes.length;\n const spaceOutIfOverlap = (firstBox, secondBox, opposite) => {\n x = firstBox.x;\n width = firstBox.width;\n y = firstBox.y;\n height = firstBox.height;\n const bottom = y + height;\n const right = x + width;\n\n if (showVertically) {\n if (opposite ? y < (secondBox.y + secondBox.height) : bottom > secondBox.y) {\n secondBox.y = opposite ? firstBox.y - secondBox.height - pad :\n bottom + pad;\n }\n } else if (opposite ? x < (secondBox.x + secondBox.width) : right > secondBox.x) {\n secondBox.x = opposite ? firstBox.x - secondBox.width - pad :\n right + pad;\n }\n };\n\n boxes.sort((a, b) => (showVertically ? a.y - b.y : a.x - b.x));\n i = 0;\n\n for (i = 0; i < len - 1; i++) {\n spaceOutIfOverlap(boxes[i], boxes[i + 1]);\n }\n\n if ((boxes[i].y + boxes[i].height) > extent.height ||\n (boxes[i].x + boxes[i].width) > extent.width) {\n if (showVertically) {\n boxes[i].y -= (boxes[i].height + boxes[i].y) - extent.height;\n } else {\n boxes[i].x -= (boxes[i].width + boxes[i].x) - extent.width;\n }\n for (i = len - 1; i > 0; i--) {\n spaceOutIfOverlap(boxes[i], boxes[i - 1], true);\n }\n }\n return boxes;\n}\n;\n","import { selectElement, FieldType } from 'muze-utils';\n\nimport './styles.scss';\nimport { CLASSPREFIX } from '../../enums/constants';\nimport SpawnableSideEffect from '../spawnable';\n\nexport default class Crossline extends SpawnableSideEffect {\n static defaultConfig () {\n return {\n className: `${CLASSPREFIX}-crossline-group`,\n bandClass: `${CLASSPREFIX}-crossband`,\n lineClass: `${CLASSPREFIX}-crossline`\n };\n }\n\n static formalName () {\n return 'crossline';\n }\n\n apply (selectionSet, payload) {\n let height;\n let bandWidth;\n let px;\n let width;\n const {\n className,\n bandClass,\n lineClass\n } = this.config();\n const dataModel = selectionSet.mergedEnter.model;\n const drawingInf = this.drawingContext();\n if (payload.criteria && dataModel && dataModel.isEmpty()) {\n return this;\n }\n if (payload.criteria === null || !dataModel) {\n this.hide();\n return this;\n }\n\n const dataObj = dataModel.getData();\n const sourceInf = this.firebolt.context.getSourceInfo();\n const axes = sourceInf.axes;\n const axisFields = sourceInf.fields;\n const fields = selectionSet.fields;\n const data = dataObj.data;\n const fieldsConfig = dataModel.getFieldsConfig();\n const svgContainer = drawingInf.sideEffectGroup;\n\n const elemData = [];\n fields.forEach((field) => {\n const fieldIndex = fieldsConfig[field] && fieldsConfig[field].index;\n const dataArr = data.map(d => d[fieldIndex]);\n const axisIndex = [['x', 0], ['x', 1], ['y', 0], ['y', 1]].find((arr) => {\n const fieldInst = axisFields[arr[0]][arr[1]];\n return fieldInst && fieldInst.type() === FieldType.DIMENSION &&\n fieldInst.getMembers().indexOf(field) !== -1;\n });\n if (axisIndex !== undefined && data.length) {\n const type = axisIndex[0];\n const axis = axes[type][axisIndex[1]];\n const value = dataArr[0];\n bandWidth = axis.getUnitWidth() || 0;\n px = axis.getScaleValue(value) + bandWidth / 2 + drawingInf.xOffset;\n const plotWidth = Math.max(...this.firebolt.context.layers().map(layer => layer.getPlotSpan()[type]));\n const pad = Math.max(...this.firebolt.context.layers().map(layer => layer.getPlotPadding()[type]));\n height = drawingInf.height;\n width = drawingInf.width;\n const startPx = px - plotWidth / 2 - pad / 2;\n const endPx = px + plotWidth / 2 + pad / 2;\n const dataPoint = {};\n if (type === 'y') {\n dataPoint.d = `M 0 ${startPx} L 0 ${endPx} L ${width} ${endPx} L ${width} ${startPx} Z`;\n } else {\n dataPoint.d = `M ${startPx} 0 L ${endPx} 0 L ${endPx} ${height} L ${startPx} ${height} Z`;\n }\n dataPoint.className = plotWidth ? bandClass : lineClass;\n elemData.push(dataPoint);\n }\n });\n if (elemData.length) {\n const parentGroup = this.createElement(svgContainer, 'g', [1], className);\n const elem = this.createElement(parentGroup, 'path', elemData);\n elem.attr('d', d => d.d).style('pointer-events', 'none')\n .attr('class', d => d.className);\n }\n return this;\n }\n\n hide () {\n const className = this.config().className;\n const drawingInf = this.drawingContext();\n selectElement(drawingInf.sideEffectGroup).selectAll(`.${className}`).remove();\n }\n}\n","const fadeFn = (set, context, strategy) => {\n const {\n mergedEnter,\n mergedExit,\n exitSet,\n completeSet\n } = set;\n\n if (!mergedEnter.length && !mergedExit.length) {\n context.applyInteractionStyle(completeSet, {}, strategy, false);\n } else {\n context.applyInteractionStyle(exitSet[1], {}, strategy, true);\n context.applyInteractionStyle(mergedEnter, {}, strategy, false);\n }\n};\n\nexport const strategies = {\n fade: fadeFn,\n focus: (set, context) => {\n const {\n mergedEnter,\n mergedExit,\n completeSet\n } = set;\n if (!mergedEnter.length && !mergedExit.length) {\n context.applyInteractionStyle(completeSet, {}, 'focus', false);\n } else {\n context.applyInteractionStyle(mergedExit, {}, 'focus', true);\n context.applyInteractionStyle(mergedEnter, {}, 'focus', false);\n }\n },\n highlight: (set, context) => {\n const {\n mergedEnter,\n mergedExit,\n entrySet,\n exitSet,\n completeSet\n } = set;\n if (!mergedEnter.length && !mergedExit.length) {\n context.applyInteractionStyle(completeSet, {}, 'highlight', false);\n } else {\n context.applyInteractionStyle(entrySet[1], {}, 'highlight', true);\n context.applyInteractionStyle(exitSet[1], {}, 'highlight', false);\n }\n }\n};\n","import SurrogateSideEffect from '../surrogate';\nimport { strategies } from './strategy';\n\nexport default class PlotHighlighter extends SurrogateSideEffect {\n constructor (...params) {\n super(...params);\n this._strategy = 'highlight';\n this._strategies = strategies;\n }\n\n static formalName () {\n return 'highlighter';\n }\n\n static target () {\n return 'visual-unit';\n }\n\n apply (selectionSet, payload, options = {}) {\n const strategy = this._strategies[options.strategy || this._strategy];\n\n if (selectionSet.isSourceFieldPresent !== false) {\n strategy(selectionSet, this, options.strategy || this._strategy);\n }\n\n return this;\n }\n}\n","import SurrogateSideEffect from '../surrogate';\n\nexport default class FilterEffect extends SurrogateSideEffect {\n static formalName () {\n return 'filter';\n }\n\n static target () {\n return 'visual-unit';\n }\n\n static mutates () {\n return true;\n }\n\n apply (selectionSet, payload) {\n const context = this.firebolt.context;\n const entryModel = selectionSet.mergedEnter.model;\n if (payload.criteria === null) {\n context.clearCaching().resetData();\n } else {\n context.enableCaching().data(entryModel);\n }\n return this;\n }\n}\n","import { DataModel } from 'muze-utils';\n\nimport { CLASSPREFIX } from '../../enums/constants';\nimport SpawnableSideEffect from '../spawnable';\n\nimport './styles.scss';\n\nexport default class AnchorEffect extends SpawnableSideEffect {\n constructor (...params) {\n super(...params);\n const context = this.firebolt.context;\n this._layers = this.addAnchorLayers(context);\n }\n\n static target () {\n return 'visual-unit';\n }\n\n static defaultConfig () {\n return {\n className: `${CLASSPREFIX}-anchors-group`\n };\n }\n\n static formalName () {\n return 'anchors';\n }\n\n addAnchorLayers (context) {\n const layers = [];\n this.firebolt.context.layers().forEach((layer, idx) => {\n const shouldDrawAnchors = layer.shouldDrawAnchors();\n if (shouldDrawAnchors) {\n const encodingFieldsInf = layer.encodingFieldsInf();\n const layerObj = {\n instances: context.addLayer({\n name: `${layer.alias()}-${this.constructor.formalName()}-${idx}`,\n mark: 'point',\n encoding: {\n x: encodingFieldsInf.xField,\n y: encodingFieldsInf.yField,\n color: {\n field: encodingFieldsInf.colorField\n },\n size: {\n field: encodingFieldsInf.sizeField,\n value: this.defaultSizeValue()\n }\n },\n transform: {\n type: 'identity'\n },\n transition: this.getTransitionConfig(),\n calculateDomain: false,\n source: dt => dt.select(() => false, {\n saveChild: false\n }),\n interactive: false,\n render: false\n }),\n linkedLayer: layer\n };\n\n layers.push(layerObj);\n }\n });\n return layers;\n }\n\n getTransitionConfig () {\n return {\n disabled: true\n };\n }\n\n /**\n * Returns the default area value of the anchor point.\n * @return { number } Default area value of anchor.\n */\n defaultSizeValue () {\n return 100;\n }\n\n apply (selectionSet) {\n const self = this;\n const dataModel = selectionSet.mergedEnter.model;\n if (selectionSet.isSourceFieldPresent !== false) {\n const drawingInf = this.drawingContext();\n const sideEffectGroup = drawingInf.sideEffectGroup;\n const className = `${this.config().className}`;\n const layers = this._layers;\n const parentGroup = this.createElement(sideEffectGroup, 'g', [1], `${className}-container`);\n const anchorGroups = this.createElement(parentGroup, 'g', layers);\n anchorGroups.each(function (layer) {\n const instances = layer.instances;\n const elems = self.createElement(this, 'g', instances, className);\n const linkedLayer = layer.linkedLayer;\n const [transformedData, schema] = linkedLayer.getTransformedDataFromIdentifiers(dataModel);\n const transformedDataModel = new DataModel(transformedData, schema);\n elems.each(function (d, i) {\n instances[i].data(transformedDataModel).mount(this);\n });\n });\n }\n return this;\n }\n}\n","import AnchorEffect from './anchors';\nimport { CLASSPREFIX } from '../enums/constants';\n\nexport default class PersistentAnchors extends AnchorEffect {\n static formalName () {\n return 'persistent-anchors';\n }\n\n static defaultConfig () {\n return {\n className: `${CLASSPREFIX}-persistent-anchors`\n };\n }\n\n getTransitionConfig () {\n return {\n disabled: true\n };\n }\n}\n","import AnchorEffect from './anchors';\nimport { CLASSPREFIX } from '../enums/constants';\n\nexport default class BrushAnchors extends AnchorEffect {\n static formalName () {\n return 'brush-anchors';\n }\n\n static defaultConfig () {\n return {\n className: `${CLASSPREFIX}-brush-anchors`\n };\n }\n\n getTransitionConfig () {\n return {\n disabled: true\n };\n }\n}\n","import * as BEHAVIOURS from './enums/behaviours';\n\nexport const behaviourEffectMap = {\n [BEHAVIOURS.BRUSH]: ['selectionBox', {\n name: 'highlighter',\n options: {\n strategy: 'fade'\n }\n }, 'brush-anchors'],\n [`${BEHAVIOURS.BRUSH},${BEHAVIOURS.SELECT}`]: [{\n name: 'tooltip',\n options: {\n strategy: 'showSelectedItems',\n order: 0,\n filter: context => context.config().mode === 'fragmented'\n }\n }],\n [BEHAVIOURS.HIGHLIGHT]: [{\n name: 'highlighter',\n options: {\n strategy: 'highlight'\n }\n }, 'crossline', {\n name: 'tooltip',\n options: {\n order: 9999\n }\n }, 'anchors'],\n [BEHAVIOURS.FILTER]: ['filter'],\n [BEHAVIOURS.SELECT]: [{\n name: 'highlighter',\n options: {\n strategy: 'focus'\n }\n }, 'persistent-anchors']\n};\n","export const CLASSPREFIX = 'muze';\nexport const STACK = 'stack';\nexport const GROUP = 'group';\nexport const IDENTITY = 'identity';\nexport const ANGLE = 'angle';\nexport const RADIUS = 'radius';\nexport const SIZE = 'size';\nexport const COLOR = 'color';\nexport const SHAPE = 'shape';\nexport const OUTER_RADIUS_VALUE = 'outerRadiusValue';\nexport const TEXT_ANCHOR_MIDDLE = 'middle';\nexport const ENCODING = {\n X: 'x',\n Y: 'y',\n X0: 'x0',\n Y0: 'y0'\n};\n\nexport const ASCENDING = 'asc';\n\nexport const AREA_LAYER = 'area';\nexport const ARC_LAYER = 'arc';\nexport const LINE_LAYER = 'line';\nexport const TEXT_LAYER = 'text';\nexport const POINT_LAYER = 'point';\nexport const BAR_LAYER = 'bar';\nexport const TICK_LAYER = 'tick';\nexport const SIMPLE_LAYER = 'simple';\nexport const BASE_LAYER = 'base';\n","import { CLASSPREFIX, STACK } from '../../enums/constants';\n\nexport const defaultConfig = {\n classPrefix: CLASSPREFIX,\n defClassName: 'layer-area',\n className: '',\n interpolate: 'linear',\n transform: {\n type: STACK\n },\n interaction: {\n\n },\n nearestPointThreshold: 10,\n encoding: {\n color: {},\n x: {},\n y: {},\n y0: {},\n strokeOpacity: {\n value: 1\n }\n },\n transition: {\n effect: 'cubic',\n duration: 1000\n },\n connectNullData: false\n};\n","import { ERROR_MSG } from 'muze-utils';\n\n/**\n * This is an interface class which any new layer class has to extend.\n *\n * @example\n * class BarLayer extends BaseLayer {\n * update (params) {\n * // super.update(params);\n * // Update the bar layer\n * }\n * }\n * @class\n */\nexport default class SimpleLayer {\n\n formalName () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Sets or gets the dependencies.\n * @param {Object} dependencies Dependencies needed by layer\n * @return {BaseLayer} Instance of base layer.\n */\n dependencies () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Returns the config of the layer\n *\n * @param {Object} config Configuration of layer\n * @return {Object} configuration of layer\n */\n config () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Acts as a getter or setter function\n * When setter\n * Returns the datamodel of the layer\n * @param { DataModel } dataModel instance of DataModel\n * @return { DataModel } DataModel instance of the layer\n */\n data () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Returns a serialized schema of the layer\n * @return {Object} Serialized schema\n */\n serialize () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Returns the unique identifier of this layer\n * @return {string} id of the layer\n */\n id () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n /*\n * This method resolves the x, y, x0 and y0 values from the transformed data.\n * It also checks the type of transformed data for example, if it is a stacked data\n * then it fetches the y and y0 values from the stacked data.\n * @param {Array.} transformedData transformed data\n * @param {Object} fieldMap field definitions\n * @param {string} transformType type of transformed data - stack, group or identity.\n * @return {Array.} Normalized data\n * @private\n */\n normalizeTransformedData () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Gets the transform method from transform factory based on type of transform. It then calls the\n * transform method with the data and passes the configuration parameters of transform such as\n * groupBy, value field, etc.\n *\n * @param {DataModel} dataModel Instance of dataModel\n * @param {Object} config configuration for transforming data\n * @return {Array.} Transformed data.\n * @private\n */\n getTransformedData () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Calculates the domain from the data.\n * It checks the type of field and calculates the domain based on that. For example, if it\n * is a quantitative or temporal field, then it calculates the min and max from the data or\n * if it is a nominal field then it gets all the values from the data of that field.\n * @param {Array} data DataArray\n * @return {Array} Domain values array.\n */\n _calculateDomainFromData () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Returns the domain for the axis.\n *\n * @param {string} encodingType type of encoding x, y, color, etc.\n * @return {Object} Axis domains\n */\n getDomain () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Abstract method for getting nearest point\n * @return {BaseLayer} Instance of base layer\n */\n getNearestPoint () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Abstract method for highlighting points\n * @return {BaseLayer} Instance of base layer\n */\n highlightPoint () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Abstract method for deselecting points\n * @return {BaseLayer} Instance of base layer\n */\n dehighlightPoint () {\n return this;\n }\n\n linkLayerStore () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Sets the container element for the layer to be renderered.\n * @param {SVGElement} mountPoint SVG element or group element.\n */\n mount () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n render () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n}\n","export const DATA = 'data';\nexport const CONFIG = 'config';\nexport const MEASUREMENT = 'measurement';\nexport const AXES = 'axes';\nexport const NORMALIZED_DATA = 'normalizedData';\nexport const TRANSFORMED_DATA = 'transformedData';\nexport const DOMAIN = 'domain';\nexport const MOUNT = 'mount';\nexport const FIELDMAP = 'fieldMap';\nexport const DATA_UPDATED = 'dataUpdated';\n","/**\n * @module Axis\n * This file declares a class that is used to render an axis to add meaning to\n * plots.\n */\nimport { Symbols } from 'muze-utils';\nimport * as AxisOrientation from '../enums/axis-orientation';\n\n/**\n * @module Axis\n * This file exports constants that are used to reference axis orientations\n * in a consistent manner.\n */\nexport const BOTTOM = 'bottom';\nexport const TOP = 'top';\nexport const LEFT = 'left';\nexport const RIGHT = 'right';\n\n/**\n * This object is used to associate the axis orientation with the d3 class\n * used to represent that axis.\n */\nexport const axisOrientationMap = {\n [AxisOrientation.LEFT]: Symbols.axisLeft,\n [AxisOrientation.BOTTOM]: Symbols.axisBottom,\n [AxisOrientation.RIGHT]: Symbols.axisRight,\n [AxisOrientation.TOP]: Symbols.axisTop\n};\n","/**\n * @module axis\n * This file exports constants used to reference scale type\n * consistently throughout the project.\n */\nexport const LINEAR = 'linear';\nexport const BAND = 'band';\nexport const TIME = 'temporal';\nexport const COLOR = 'color';\nexport const ORDINAL = 'ordinal';\nexport const QUANTIZE = 'quantize';\nexport const QUANTILE = 'quantile';\nexport const LOG = 'log';\nexport const POW = 'pow';\nexport const IDENTITY = 'identity';\nexport const SEQUENTIAL = 'sequential';\nexport const THRESHOLD = 'threshold';\n","export const CLASSPREFIX = 'muze';\n\nexport const CONTINOUS = 'continous';\nexport const DISCRETE = 'discrete';\nexport const SEQUENTIAL = 'sequential';\nexport const ORDINAL = 'ordinal';\nexport const LINEAR = 'linear';\nexport const THRESHOLD = 'threshold';\nexport const QUANTIZE = 'quantize';\nexport const QUANTILE = 'quantile';\n\nexport const COLOR = 'color';\nexport const SHAPE = 'shape';\nexport const SIZE = 'size';\n\nexport const DOMAIN = 'domain';\nexport const BAND = 'band';\nexport const HIDDEN = 'hidden';\nexport const NUMBER = 'number';\nexport const BOTTOM = 'bottom';\nexport const TOP = 'top';\n\nexport const RGB = 'rgb';\nexport const HEX = 'hex';\nexport const HSLA = 'hsla';\nexport const HSL = 'hsl';\n\n","import { scales, colorSchemes } from 'muze-utils';\n\nimport {\n SEQUENTIAL,\n ORDINAL,\n LINEAR,\n CONTINOUS,\n THRESHOLD,\n QUANTIZE\n} from './enums/constants';\n\nimport * as ScaleType from './enums/scale-type';\n\nconst {\n scaleLinear,\n scaleThreshold,\n scaleLog,\n scalePow,\n scaleIdentity,\n scaleOrdinal,\n scaleSequential,\n scaleQuantize,\n scaleQuantile,\n schemeCategory10,\n schemeCategory20,\n schemeCategory20b,\n scaleBand,\n scaleTime\n} = scales;\nexport const scaleMap = {\n [ScaleType.LINEAR]: scaleLinear,\n [ScaleType.BAND]: scaleBand,\n [ScaleType.QUANTIZE]: scaleQuantize,\n [ScaleType.QUANTILE]: scaleQuantile,\n [ScaleType.THRESHOLD]: scaleThreshold,\n [ScaleType.SEQUENTIAL]: scaleSequential,\n [ScaleType.LOG]: scaleLog,\n [ScaleType.POW]: scalePow,\n [ScaleType.IDENTITY]: scaleIdentity,\n [ScaleType.TIME]: scaleTime,\n [ScaleType.COLOR]: scaleLinear,\n [ScaleType.ORDINAL]: scaleOrdinal\n};\nexport const SCHEMES = {\n SCHEME1: schemeCategory10,\n SCHEME2: schemeCategory20,\n SCHEME3: schemeCategory20b\n};\n\n/**\n * Accepts a scheme in a string format and returns the scale from d3-scale-chromatic\n *\n * @export\n * @param {string} scheme a string representing the kind of scheme for the color axis\n * @return {Object} The corresponding scale from a scheme type from d3 chromatic scale\n */\nexport function getScheme (scheme) {\n if (scheme[0] === 'i') {\n return scaleSequential(colorSchemes[scheme]);\n }\n return scaleOrdinal(colorSchemes[scheme]);\n}\n\n/**\n *\n *\n * @export\n * @param {*} scheme\n * @returns\n */\nexport function getSchemeType (scheme) {\n let schemeType = '';\n if (scheme && typeof (scheme) === 'string') {\n schemeType = scheme[0] === 'i' ? SEQUENTIAL : ORDINAL;\n } else {\n schemeType = ORDINAL;\n }\n return schemeType;\n}\n\n/**\n * This function is used to create a scale that is assigned to\n * an instance of axis.\n *\n * @export\n * @param {Object} params the input parameters to create a Scale object\n * @param {string} params.type the type of scale\n * @param {Array} params.range the range of scale\n * @return {Object} instance of scale\n */\nexport function createScale (params) {\n if (!params.type || !scaleMap[params.type]) {\n throw new Error(`${params.type} is not a valid scale type`);\n }\n if (!Array.isArray(params.range)) {\n throw new Error('range parameter must be an array');\n }\n let scaleFactory = null;\n const range = params.range;\n // @todo: do it using scale decorator\n if (params.type === LINEAR && params.interpolator) {\n scaleFactory = scaleMap[params.interpolator];\n if (params.interpolator === ScaleType.POW) {\n return scaleFactory().range(range).exponent(params.exponent);\n } else if (params.interpolator === ScaleType.LOG) {\n return scaleFactory().range(range).base([params.base]);\n }\n } else {\n scaleFactory = scaleMap[params.type];\n }\n\n if (params.type === QUANTIZE) {\n scaleFactory().nice();\n }\n return scaleFactory().range(range);\n}\n\n/**\n * This method is used to update the range of a scale\n * so that the core module can remain agnostic of the d3\n * scale api.\n *\n * @export\n * @param {Scale} scale Instance of d3 Scale.\n * @param {Array} range new range of the scale.\n * @return {Scale} Updated scale.\n */\nexport function updateScaleRange (scale, range) {\n return scale.range(range);\n}\n\n/**\n *\n *\n * @export\n * @param {*} domainType\n * @param {*} rangeType\n * @param {*} steps\n * @returns\n */\nexport function getScaleType (domainType, rangeType, steps) {\n if (rangeType === CONTINOUS) {\n return LINEAR;\n }\n if (domainType === CONTINOUS) {\n if (steps instanceof Array) {\n return THRESHOLD;\n }\n return QUANTIZE;\n }\n return ORDINAL;\n}\n","import { getUniqueId } from 'muze-utils';\nimport { CLASSPREFIX } from '../enums/constants';\n\n/**\n *\n *\n */\nexport const defaultConfig = {\n id: getUniqueId(),\n axisName: {\n defClassName: 'axis-name'\n },\n axisNamePadding: 12,\n base: 10,\n classPrefix: CLASSPREFIX,\n className: `${CLASSPREFIX}-axis`,\n exponent: 1,\n interpolator: 'linear',\n fixedBaseline: true,\n labels: {\n rotation: 0,\n smartTicks: false\n },\n orientation: 'left',\n maxHeight: 50, // @todo: height and width wont be hardcoded\n maxWidth: 40,\n numberFormat: val => val,\n padding: 0.3,\n nice: true,\n numberOfTicks: 10,\n rotate: false,\n show: true,\n showAxisName: true,\n showInnerTicks: null,\n showOuterTicks: null,\n style: {},\n type: 'linear',\n tickFormat: null,\n tickValues: null,\n xOffset: undefined,\n yOffset: undefined\n};\n\n","/**\n * This file exports functionality that is used to render axis.\n */\nimport { selectElement, makeElement, angleToRadian } from 'muze-utils';\nimport * as AxisOrientation from './enums/axis-orientation';\nimport { LINEAR, HIDDEN, BOTTOM, TOP } from './enums/constants';\n\n/**\n *\n *\n * @param {*} instance\n * @param {*} container\n * @param {*} labelManager\n * @param {*} config\n */\nconst rotateAxis = (instance, tickText, labelManager, config) => {\n const axis = instance.axis();\n const scale = instance.scale();\n const {\n orientation,\n labels,\n fixedBaseline,\n type\n } = config;\n let { rotation } = labels;\n\n const tickSize = instance.getTickSize();\n\n tickText.each(function (datum, index) {\n let yShift;\n let xShift;\n const tickFormatter = axis.tickFormat() ? axis.tickFormat : scale.tickFormat;\n const temp = tickFormatter ? tickFormatter()(datum) : datum;\n\n datum = temp.toString();\n\n const tickLabelDim = labelManager.getOriSize(datum);\n const width = tickLabelDim.width * 0.5;\n const height = tickLabelDim.height * 0.5;\n\n if (rotation < 0) {\n rotation = 360 + rotation;\n }\n\n const quadrant = 4 - Math.floor(rotation / 90);\n const rotationNormalizer = ((quadrant % 2 === 0) ? rotation : 180 * Math.ceil(rotation / 180) - rotation) % 180;\n\n yShift = Math.sqrt(height ** 2 + width ** 2) * Math.sin(angleToRadian(rotationNormalizer));\n\n if ((quadrant === 3 || quadrant === 2) && !(rotationNormalizer > 67.5 && rotationNormalizer <= 90)) {\n yShift += height * 2;\n }\n xShift = width;\n\n if (rotation === 90) {\n xShift = height;\n } else if (rotation === 270) {\n xShift = -height;\n } else {\n xShift = 0;\n }\n\n if (orientation === AxisOrientation.TOP) {\n xShift = (index === 0 && fixedBaseline && type === LINEAR) ? xShift + xShift / 2 : xShift;\n selectElement(this)\n .attr('transform', `translate(${-xShift + tickSize} \n ${-yShift - tickSize}) rotate(${rotation})`);\n } else {\n xShift = (index === 0 && fixedBaseline && type === LINEAR) ? xShift - xShift / 2 : xShift;\n selectElement(this)\n .attr('transform', `translate(${xShift - tickSize} \n ${yShift + tickSize}) rotate(${rotation})`);\n }\n });\n return tickText;\n};\n\n/**\n *\n *\n * @param {*} tickText\n * @param {*} axisInstance\n */\nconst changeTickOrientation = (selectContainer, axisInstance, tickSize) => {\n const {\n _smartTicks\n } = axisInstance;\n const config = axisInstance.config();\n const labelManager = axisInstance.dependencies().labelManager;\n const {\n labels,\n orientation\n } = config;\n const {\n rotation,\n smartTicks: isSmartTicks\n } = labels;\n\n const tickText = selectContainer.selectAll('.tick text');\n tickText.selectAll('tspan').remove();\n\n // rotate labels if not enough space is available\n if (rotation !== 0 && isSmartTicks === false && (orientation === TOP || orientation === BOTTOM)) {\n rotateAxis(axisInstance, tickText, labelManager, config);\n } else if (rotation === 0 && isSmartTicks === false) {\n tickText.attr('transform', '');\n } else {\n tickText.attr('y', 0)\n .attr('x', 0)\n .text('');\n const tspan = makeElement(tickText, 'tspan', (d, i) => _smartTicks[i].lines, 'smart-text');\n tspan.attr('dy', '0')\n .style('opacity', '0')\n .transition()\n .duration(1000)\n .attr('dy', (d, i) => {\n if (orientation === BOTTOM || i !== 0) {\n return _smartTicks[i].oriTextHeight;\n }\n return -_smartTicks[i].oriTextHeight * (_smartTicks[i].lines.length - 1) - tickSize;\n })\n .style('opacity', 1)\n .attr('x', 0)\n .text(e => e);\n }\n\n return tickText;\n};\n\nconst setFixedBaseline = (axisInstance) => {\n const {\n fixedBaseline\n } = axisInstance.config();\n if (fixedBaseline) {\n axisInstance.setFixedBaseline();\n }\n};\n\n/**\n *\n *\n * @param {*} textNode\n * @param {*} orientation\n * @param {*} measures\n */\nconst setAxisNamePos = (textNode, orientation, measures) => {\n const {\n axisNameHeight,\n yOffset,\n labelOffset,\n availableSpace\n } = measures;\n switch (orientation) {\n case AxisOrientation.LEFT:\n textNode.attr('transform',\n `translate(${-(availableSpace.width - axisNameHeight)},${yOffset + labelOffset})rotate(-90)`);\n break;\n case AxisOrientation.RIGHT:\n textNode.attr('transform',\n `translate(${(availableSpace.width - axisNameHeight)},${yOffset + labelOffset})rotate(90)`);\n break;\n case AxisOrientation.TOP:\n textNode.attr('transform',\n `translate(${availableSpace.width / 2},${-availableSpace.height + axisNameHeight})`);\n break;\n case AxisOrientation.BOTTOM:\n textNode.attr('transform',\n `translate(${availableSpace.width / 2},${availableSpace.height - axisNameHeight / 2})`);\n break;\n default:\n }\n return textNode;\n};\n\n/**\n * This method is used to render the axis inside an\n * svg container.\n *\n * @export\n * @param {Object} axisInstance the nput object required to render axis\n * @param {string} axisInstance.orientation the orientation of axis\n * @param {Object} axisInstance.scale instance of d3 scale\n * @param {SVGElement} axisInstance.container the container in which to render\n */\nexport function renderAxis (axisInstance) {\n const config = axisInstance.config();\n const labelManager = axisInstance.dependencies().labelManager;\n const mount = axisInstance.mount();\n const range = axisInstance.range();\n const axis = axisInstance.axis();\n const scale = axisInstance.scale();\n const {\n _axisNameStyle,\n _tickLabelStyle,\n formatter,\n tickValues\n } = axisInstance;\n const {\n orientation,\n name,\n labels,\n xOffset,\n yOffset,\n axisNamePadding,\n className,\n showAxisName,\n show,\n id,\n interpolator,\n classPrefix\n } = config;\n\n if (!show) {\n return;\n }\n\n const tickSize = axisInstance.getTickSize();\n\n const selectContainer = makeElement(selectElement(mount), 'g', [axisInstance], `${className}`, {},\n key => key.config().id);\n\n // Set style for tick labels\n labelManager.setStyle(_tickLabelStyle);\n\n // @to-do: Need to write a configuration override using decorator pattern\n if (interpolator === 'linear') {\n // Set ticks for the axis\n axisInstance.setTickValues();\n }\n\n const labelFunc = scale.ticks || scale.quantile || scale.domain;\n\n formatter && axis.tickFormat(formatter(tickValues || axis.tickValues() || labelFunc()));\n\n // Get range(length of range)\n const availableSpace = Math.abs(range[0] - range[1]);\n\n // Get width and height taken by axis labels\n const labelProps = axisInstance.axisDimensions().tickLabelDim;\n\n // Draw axis ticks\n selectContainer.attr('transform', `translate(${xOffset},${yOffset})`);\n setFixedBaseline(axisInstance);\n if (labels.smartTicks === false) {\n selectContainer.transition()\n .duration(1000).call(axis);\n } else {\n selectContainer.call(axis);\n }\n selectContainer.selectAll('.tick').classed(`${classPrefix}-ticks`, true);\n selectContainer.selectAll('.tick line').classed(`${classPrefix}-tick-lines`, true);\n\n // Set classes for ticks\n const tickText = selectContainer.selectAll('.tick text');\n tickText.classed(`${classPrefix}-ticks`, true)\n .classed(`${classPrefix}-ticks-${id}`, true);\n changeTickOrientation(selectContainer, axisInstance, tickSize);\n\n // Create axis name\n const textNode = makeElement(selectContainer, 'text', [name], `${classPrefix}-axis-name`)\n .attr('text-anchor', 'middle')\n .classed(`${classPrefix}-axis-name-${id}`, true)\n .text(d => d);\n\n // Hide axis name if show is off\n textNode.classed(HIDDEN, !showAxisName);\n\n // render labels based on orientation of axis\n const labelOffset = availableSpace / 2;\n\n // Set style for axis name\n labelManager.setStyle(_axisNameStyle);\n const axisNameSpace = labelManager.getOriSize(name);\n const measures = {\n labelProps,\n tickSize,\n axisNamePadding,\n axisNameHeight: axisNameSpace.height,\n axisNameWidth: axisNameSpace.width,\n yOffset,\n xOffset,\n labelOffset,\n availableSpace: axisInstance.availableSpace()\n };\n // Set position for axis name\n setAxisNamePos(textNode, orientation, measures);\n}\n","import { TOP, LEFT, BOTTOM } from '../enums/axis-orientation';\nimport { LOG } from '../enums/scale-type';\n\nexport const getNumberOfTicks = (availableSpace, labelDim, axis, axisInstance) => {\n const ticks = axis.scale().ticks();\n const { numberOfTicks } = axisInstance.config();\n const tickLength = ticks.length;\n let numberOfValues = tickLength;\n\n if (tickLength * (labelDim * 1.5) > availableSpace) {\n numberOfValues = Math.floor(availableSpace / (labelDim * 1.5));\n }\n\n numberOfValues = Math.min(numberOfTicks, Math.max(1, numberOfValues));\n return axis.scale().ticks(numberOfValues);\n};\n\nexport const sanitizeDomain = (domain, context) => {\n const interpolator = context.config().interpolator;\n // @todo: Get from scale decorator\n if (interpolator === LOG && domain[0] >= 0) {\n return [Math.max(1, domain[0]), Math.max(1, domain[1])];\n }\n return domain;\n};\n\nexport const getTickFormatter = (tickFormat, numberFormat) => {\n if (tickFormat) {\n return ticks => (val, i) => tickFormat(numberFormat(val), i, ticks);\n }\n return () => val => numberFormat(val);\n};\n\n/**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\nexport const getTickLabelInfo = (context) => {\n let largestLabel = '';\n let labelProps;\n let smartTick = {};\n let axisTickLabels;\n const scale = context.scale();\n const allLabelLengths = [];\n const { tickFormat, tickValues, numberFormat } = context.config();\n const labelFunc = scale.ticks || scale.quantile || scale.domain;\n // set the style on the shared label manager instance\n const { labelManager } = context.dependencies();\n\n labelManager.setStyle(context._tickLabelStyle);\n // get the values along the domain\n\n axisTickLabels = tickValues || labelFunc();\n // Get the tick labels\n axisTickLabels = axisTickLabels.map((originalLabel, i) => {\n const formattedLabel = numberFormat(originalLabel);\n\n // get formats of tick if any\n const label = tickFormat ? tickFormat(formattedLabel, i, axisTickLabels) : (scale.tickFormat ?\n numberFormat(scale.tickFormat()(originalLabel)) : formattedLabel);\n\n // convert to string for quant values\n const temp = label.toString();\n // Get spaces for all labels\n allLabelLengths.push(labelManager.getOriSize(temp));\n // Getting largest label\n if (temp.length > largestLabel.length) {\n largestLabel = temp;\n smartTick = context.smartTicks() ? context.smartTicks()[i] : {};\n labelProps = allLabelLengths[i];\n }\n return label;\n });\n\n labelProps = labelManager.getOriSize(largestLabel);\n\n return { largestLabel, largestLabelDim: labelProps, axisTickLabels, allLabelLengths, smartTick };\n};\n\n/**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\nexport const computeAxisDimensions = (context) => {\n let tickLabelDim = {};\n const {\n name,\n labels,\n tickValues\n } = context.config();\n const angle = ((labels.smartTicks) ? 0 : labels.rotation) * Math.PI / 180;\n const { labelManager } = context.dependencies();\n const {\n largestLabelDim,\n axisTickLabels,\n smartTick\n } = getTickLabelInfo(context);\n const { height: labelHeight, width: labelWidth } = largestLabelDim;\n // get the domain of axis\n const domain = context.domain();\n\n if (domain.length === 0) {\n return null;\n }\n if (context._rotationLock === false) {\n context.setRotationConfig(tickValues || axisTickLabels, largestLabelDim.width);\n context._rotationLock = false;\n }\n if (labels.smartTicks) {\n tickLabelDim = smartTick;\n } else {\n tickLabelDim = {\n width: Math.abs(labelHeight * Math.sin(angle)) + Math.abs(labelWidth * Math.cos(angle)),\n height: Math.abs(labelWidth * Math.sin(angle)) + Math.abs(labelHeight * Math.cos(angle))\n };\n }\n\n labelManager.setStyle(context._axisNameStyle);\n return {\n tickSize: context.getTickSize(),\n tickLabelDim,\n axisLabelDim: labelManager.getOriSize(name),\n largestLabelDim,\n axisTickLabels\n };\n};\n\n/**\n*\n*\n* @memberof SimpleAxis\n*/\nexport const setOffset = (context) => {\n let x = 0;\n let y = 0;\n const logicalSpace = context.logicalSpace();\n const config = context.config();\n const {\n orientation,\n xOffset,\n yOffset\n } = config;\n if (orientation === LEFT) {\n x = xOffset === undefined ? logicalSpace.width : xOffset;\n }\n if (orientation === TOP) {\n y = yOffset === undefined ? logicalSpace.height : yOffset;\n }\n context.config({ xOffset: x, yOffset: y });\n};\n\n/**\n *\n *\n * @param {*} timeDiff\n * @param {*} range\n * @param {*} domain\n * @returns\n */\nconst getAxisOffset = (timeDiff, range, domain) => {\n const pvr = Math.abs(range[1] - range[0]) / (domain[1] - domain[0]);\n const width = (pvr * timeDiff);\n const avWidth = (range[1] - range[0]);\n const bars = avWidth / width;\n const barWidth = avWidth / (bars + 1);\n const diff = avWidth - barWidth * bars;\n\n return diff / 2;\n};\n\nexport const adjustRange = (minDiff, range, domain, orientation) => {\n const diff = getAxisOffset(minDiff, range, domain);\n\n if (orientation === TOP || orientation === BOTTOM) {\n range[0] += diff;\n range[1] -= diff;\n } else {\n range[0] -= diff;\n range[1] += diff;\n }\n return range;\n};\n\n /**\n * Listener attached to the axis on change of parameters.\n *\n * @param {Function} callback to be excuted on change of domain range etc\n * @memberof SimpleAxis\n */\nexport const registerChangeListeners = (context) => {\n const store = context.store();\n\n store.model.next(['domain', 'range', 'mount', 'config'], (...params) => {\n context.render();\n context._domainLock = false;\n context._eventList.forEach((e) => {\n e.action instanceof Function && e.action(...params);\n });\n }, true);\n return context;\n};\n\n/**\n *\n *\n * @param {*} axisDimensions\n * @param {*} config\n * @param {*} range\n * @returns\n */\nexport const getHorizontalAxisSpace = (context, axisDimensions, config, range) => {\n let width;\n let height;\n const {\n tickSize,\n tickLabelDim,\n axisLabelDim\n } = axisDimensions;\n const {\n axisNamePadding,\n showAxisName,\n tickValues\n } = config;\n const domain = context.domain();\n const { height: axisDimHeight } = axisLabelDim;\n const { height: tickDimHeight, width: tickDimWidth } = tickLabelDim;\n\n width = range && range.length ? range[1] - range[0] : 0;\n\n height = 0;\n if (tickValues) {\n const minTickDiff = context.getMinTickDifference();\n const [min, max] = [Math.min(...tickValues, ...domain), Math.max(...tickValues, ...domain)];\n\n width = ((max - min) / Math.abs(minTickDiff)) * (tickDimWidth + context._minTickDistance.width);\n }\n if (!width || width === 0) {\n height = Math.max(tickDimWidth, tickDimHeight);\n } else {\n height = tickDimHeight;\n }\n height += (showAxisName ? (axisDimHeight + axisNamePadding) : 0) + tickSize;\n return {\n width,\n height\n };\n};\n\n/**\n *\n *\n * @param {*} axisDimensions\n * @param {*} config\n * @param {*} range\n * @returns\n */\nexport const getVerticalAxisSpace = (context, axisDimensions, config) => {\n let height;\n let width;\n const {\n tickSize,\n tickLabelDim,\n axisLabelDim\n } = axisDimensions;\n const {\n axisNamePadding,\n showAxisName,\n tickValues\n } = config;\n const domain = context.domain();\n const { height: axisDimHeight } = axisLabelDim;\n const { height: tickDimHeight, width: tickDimWidth } = tickLabelDim;\n\n height = 0;\n width = tickDimWidth;\n if (tickValues) {\n const minTickDiff = context.getMinTickDifference();\n const [min, max] = [Math.min(...tickValues, ...domain), Math.max(...tickValues, ...domain)];\n\n height = ((max - min) / Math.abs(minTickDiff)) * (tickDimHeight);\n }\n width += (showAxisName ? axisDimHeight : 0) + tickSize + axisNamePadding;\n\n return {\n height,\n width\n };\n};\n\n /**\n * Calculates the logical space of the axis\n * @return {Object} Width and height occupied by the axis.\n */\nexport const calculateBandSpace = (context) => {\n const range = context.range();\n const config = context.config();\n const {\n orientation,\n show\n } = config;\n const axisDimensions = context.getAxisDimensions();\n const {\n largestLabelDim,\n axisTickLabels\n } = axisDimensions;\n const { height: largestDimHeight, width: largestDimWidth } = largestLabelDim;\n\n if (orientation === TOP || orientation === BOTTOM) {\n let { width, height } = getHorizontalAxisSpace(context, axisDimensions, config, range);\n if (!width || width === 0) {\n width = axisTickLabels.length * (Math.min(largestDimWidth + context._minTickDistance.width,\n largestDimHeight + context._minTickDistance.width));\n }\n if (show === false) {\n height = 0;\n }\n return {\n width,\n height\n };\n }\n\n let { width, height } = getVerticalAxisSpace(context, axisDimensions, config, range);\n\n if (!height || height === 0) {\n height = axisTickLabels.length * (largestDimHeight + largestDimHeight / 2) + largestDimHeight;\n }\n if (show === false) {\n width = 0;\n }\n return {\n width,\n height\n };\n};\n\n/**\n * Calculates the logical space of the axis\n * @return {Object} Width and height occupied by the axis.\n */\nexport const calculateContinousSpace = (context) => {\n const range = context.range();\n const config = context.config();\n const axisDimensions = context.getAxisDimensions();\n\n const {\n orientation,\n show,\n showAxisName\n } = config;\n const {\n axisLabelDim\n } = axisDimensions;\n\n if (show === false) {\n return {\n width: 0,\n height: 0\n };\n }\n\n const { width: axisDimWidth } = axisLabelDim;\n\n if (orientation === TOP || orientation === BOTTOM) {\n const { width, height } = getHorizontalAxisSpace(context, axisDimensions, config);\n const axisWidth = Math.max(width, axisDimWidth);\n\n return {\n width: axisWidth,\n height\n };\n }\n\n const { width, height } = getVerticalAxisSpace(context, axisDimensions, config, range);\n\n const effHeight = Math.max(height, showAxisName ? axisDimWidth : 0);\n\n return {\n width,\n height: effHeight\n };\n};\n\n","import { mergeRecursive } from 'muze-utils';\n\nexport const PROPS = {\n availableSpace: {},\n axisDimensions: {},\n config: {\n sanitization: (context, value) => {\n if (value.labels && value.labels.rotation) {\n context._rotationLock = true;\n }\n value = mergeRecursive(context._config || {}, value);\n value.axisNamePadding = Math.max(value.axisNamePadding, 0);\n context.axis(context.createAxis(value));\n context.store().commit('config', value);\n return value;\n }\n },\n logicalSpace: {},\n mount: {\n sanitization: (context, value) => {\n context.store().commit('mount', value);\n return value;\n }\n },\n range: {\n sanitization: (context, value) => {\n context.scale().range(value);\n context.logicalSpace(null);\n context.store().commit('range', value);\n return value;\n }\n },\n\n smartTicks: {},\n store: {},\n tickSize: {}\n};\n","import {\n Store,\n mergeRecursive,\n getSmartComputedStyle,\n selectElement,\n generateGetterSetters,\n getUniqueId\n} from 'muze-utils';\nimport { createScale } from '../scale-creator';\nimport { axisOrientationMap, BOTTOM, TOP } from '../enums/axis-orientation';\nimport { defaultConfig } from './default-config';\nimport { renderAxis } from '../axis-renderer';\nimport { DOMAIN, BAND } from '../enums/constants';\nimport {\n computeAxisDimensions,\n setOffset,\n registerChangeListeners,\n calculateContinousSpace\n} from './helper';\nimport { PROPS } from './props';\n\nexport default class SimpleAxis {\n\n /**\n * Creates an instance of SimpleAxis.\n * @memberof SimpleAxis\n */\n constructor (config, dependencies) {\n this._id = getUniqueId();\n\n this._dependencies = dependencies;\n this._mount = null;\n this._range = [];\n this._domain = [];\n this._domainLock = false;\n this._rotationLock = false;\n this._axisDimensions = {};\n this._eventList = [];\n\n const defCon = mergeRecursive({}, this.constructor.defaultConfig());\n const simpleConfig = mergeRecursive(defCon, config);\n\n const bodyElem = selectElement('body');\n const classPrefix = simpleConfig.classPrefix;\n this._tickLabelStyle = getSmartComputedStyle(bodyElem, `${classPrefix}-ticks`);\n this._axisNameStyle = getSmartComputedStyle(bodyElem, `${classPrefix}-axis-name`);\n dependencies.labelManager.setStyle(this._tickLabelStyle);\n this._minTickDistance = dependencies.labelManager.getOriSize('ww');\n\n generateGetterSetters(this, PROPS);\n this.store(new Store({\n domain: this.domain(),\n range: this.range(),\n config: simpleConfig,\n mount: this.mount()\n }));\n this.config(simpleConfig);\n\n this._scale = this.createScale(this._config);\n this._axis = this.createAxis(this._config);\n\n registerChangeListeners(this);\n }\n\n /**\n * Returns the default configuration of simple axis\n * @return {Object} default configurations\n */\n static defaultConfig () {\n return defaultConfig;\n }\n\n /**\n * Sets a fixed baseline for the first ticks so that they can render effectively within\n * the given area\n *\n * @param {*} tickText\n * @param {*} config\n * @param {*} labelManager\n */\n setFixedBaseline () {\n return this;\n }\n\n /**\n *\n *\n * @readonly\n * @memberof SimpleAxis\n */\n scale (...params) {\n if (params.length) {\n this._scale = params[0];\n return this;\n }\n return this._scale;\n }\n\n /**\n *\n *\n * @readonly\n * @memberof SimpleAxis\n */\n axis (...params) {\n if (params.length) {\n this._axis = params[0];\n return this;\n }\n return this._axis;\n }\n\n /**\n *\n *\n * @param {*} d\n * @returns\n * @memberof SimpleAxis\n */\n domain (...domain) {\n if (domain.length) {\n this.scale().domain(domain[0]);\n this._domain = this.scale().domain();\n this.smartTicks(this.setTickConfig());\n this.store().commit(DOMAIN, this._domain);\n this.logicalSpace(null);\n return this;\n }\n return this._domain;\n }\n\n /**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\n dependencies () {\n return this._dependencies;\n }\n\n /**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\n createScale (config) {\n const {\n base,\n padding,\n interpolator,\n exponent\n } = config;\n const range = this.range();\n const scale = createScale({\n padding,\n interpolator,\n exponent,\n base,\n range,\n type: this.constructor.type()\n });\n\n return scale;\n }\n\n getTickFormatter (tickFormat, numberFormat) {\n if (tickFormat) {\n return ticks => (val, i) => tickFormat(numberFormat(val), i, ticks);\n }\n return () => val => numberFormat(val);\n }\n\n /**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\n createAxis (config) {\n const {\n tickFormat,\n numberFormat,\n orientation\n } = config;\n const axisClass = axisOrientationMap[orientation];\n\n if (axisClass) {\n const axis = axisClass(this.scale());\n this.formatter = this.getTickFormatter(tickFormat, numberFormat);\n\n return axis;\n }\n return null;\n }\n\n /**\n *\n *\n * @memberof SimpleAxis\n */\n setTickConfig () {\n return this;\n }\n\n /**\n *\n *\n * @param {*} axisTickLabels\n * @param {*} labelWidth\n * @returns\n * @memberof SimpleAxis\n */\n setRotationConfig (axisTickLabels, labelWidth) {\n const { orientation } = this.config();\n\n if (orientation === TOP || orientation === BOTTOM) {\n const range = this.range();\n const length = Math.abs(range[0] - range[1]);\n this.config({ labels: { rotation: 0 } });\n if (length > 0 && axisTickLabels.length * (labelWidth + this._minTickDistance.width) > length) {\n this.config({ labels: { rotation: -90 } });\n }\n }\n return this;\n }\n\n /**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\n adjustRange () {\n return this;\n }\n\n getScaleValue (domainVal) {\n if (domainVal === null || domainVal === undefined) {\n return undefined;\n }\n return this.scale()(domainVal);\n }\n\n /**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\n getTickSize () {\n return this.axis().tickSize();\n }\n\n /**\n * Gets the space occupied by the parts of an axis\n *\n * @return {Object} object with details about sizes of the axis.\n * @memberof SimpleAxis\n */\n getAxisDimensions () {\n this.axisDimensions(computeAxisDimensions(this));\n return this.axisDimensions();\n }\n\n /**\n * Gets the space occupied by the axis\n *\n * @return {Object} object with details about size of the axis.\n * @memberof SimpleAxis\n */\n getLogicalSpace () {\n if (!this.logicalSpace()) {\n this.logicalSpace(calculateContinousSpace(this));\n setOffset(this);\n this.logicalSpace();\n }\n return this.logicalSpace();\n }\n\n /**\n * Returns the value from the domain when given a value from the range.\n * @param {number} value Value from the range.\n * @return {number} Value\n */\n invert (...value) {\n const values = value.map(d => this.scale().invert(d)) || [];\n return value.length === 1 ? values[0] : values;\n }\n\n /**\n * Gets the nearest range value from the given range values.\n * @param {number} v1 Start range value\n * @param {number} v2 End range value\n * @return {Array} range values\n */\n getNearestRange (v1, v2) {\n let p1;\n let p2;\n let extent;\n const {\n type\n } = this.config();\n const scale = this.scale();\n const range = scale.range();\n const reverse = range[0] > range[1];\n\n if (type === BAND) {\n extent = scale.invertExtent(v1, v2);\n p1 = scale(reverse ? extent[extent.length - 1] : extent[0]);\n p2 = scale(reverse ? extent[0] : extent[extent.length - 1]) + scale.bandwidth();\n return [p1, p2];\n }\n return [v1, v2];\n }\n\n /**\n * This method is used to assign a domain to the axis.\n *\n * @param {Array} domain the domain of the scale\n * @memberof SimpleAxis\n */\n updateDomainBounds (domain) {\n let currentDomain = this.domain();\n if (this.config().domain) {\n currentDomain = this.config().domain;\n } else {\n if (currentDomain.length === 0) {\n currentDomain = domain;\n }\n if (domain.length) {\n currentDomain = [Math.min(currentDomain[0], domain[0]), Math.max(currentDomain[1], domain[1])];\n }\n }\n\n return this.domain(currentDomain);\n }\n\n /**\n *\n *\n * @param {*} domain\n * @returns\n * @memberof SimpleAxis\n */\n updateDomainCache (domain) {\n if (this._domainLock === false) {\n this.domain([]);\n this._domainLock = true;\n }\n const cachedDomain = [];\n domain && domain.forEach((d) => {\n d !== undefined && d !== null && cachedDomain.push(d);\n });\n return this.updateDomainBounds(cachedDomain);\n }\n\n getMinTickDifference () {\n return this.domain();\n }\n\n getFormattedTickValues (tickValues) {\n return tickValues;\n }\n\n /**\n *\n *\n * @param {*} tickValues\n * @returns\n * @memberof SimpleAxis\n */\n setTickValues () {\n const {\n tickValues\n } = this.config();\n\n if (tickValues) {\n tickValues instanceof Array && this.axis().tickValues(tickValues);\n return this;\n }\n return this;\n }\n\n /**\n * This method returns the width in pixels for one\n * unit along the axis. It is only applicable to band scale\n * and returns undefined for other scale type.\n *\n * @return {number} the width of one band along band scale axis\n * @memberof SimpleAxis\n */\n getUnitWidth () {\n return 0;\n }\n\n /**\n * This method returns an object that can be used to\n * reconstruct this instance.\n *\n * @return {Object} the serializable props of axis\n * @memberof SimpleAxis\n */\n serialize () {\n return {\n name: this.name,\n type: this.type,\n range: this.range(),\n config: this.config()\n };\n }\n\n /**\n * Returns the id of the axis.\n * @return {string} Unique identifier of the axis.\n */\n get id () {\n return this._id;\n }\n\n registerEvent (event, fn) {\n this._eventList.push({ name: event, action: fn });\n }\n\n /**\n *\n *\n * @param {*} fn\n * @memberof SimpleAxis\n */\n on (event, fn) {\n event = event || 'update';\n this.registerEvent(event, fn);\n }\n\n /**\n * This method is used to render the axis inside\n * the supplied svg container.\n *\n * @param {SVGElement} svg the svg element in which to render the path\n * @memberof SimpleAxis\n */\n /* istanbul ignore next */render () {\n if (this.mount()) {\n renderAxis(this);\n }\n return this;\n }\n\n /**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\n remove () {\n this.store().unsubscribeAll();\n selectElement(this.mount()).remove();\n return this;\n }\n\n /**\n *\n *\n * @memberof SimpleAxis\n */\n unsubscribe () {\n this.store().unsubscribeAll();\n return this;\n }\n\n /**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\n isReverse () {\n const range = this.range();\n return range[0] > range[1];\n }\n\n /**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\n getPixelToValueRatio () {\n const scale = this.scale();\n const range = scale.range();\n const domain = scale.domain();\n\n return Math.abs(range[1] - range[0]) / (domain[1] - domain[0]);\n }\n}\n\n","import { scaleMap } from '../../scale-creator';\n\nexport default class LinearInterpolator {\n\n createScale (config) {\n const {\n range\n } = config;\n const scaleFactory = scaleMap.linear;\n this._scale = scaleFactory().range(range);\n return this._scale;\n }\n\n getScaleValue (domainVal) {\n return this._scale(domainVal) + 0.5;\n }\n\n sanitizeDomain (domain) {\n return domain;\n }\n}\n","import { scaleMap } from '../../scale-creator';\n\nexport default class LogInterpolator {\n\n createScale (config) {\n const {\n range,\n base\n } = config;\n const scaleFactory = scaleMap.log;\n this._scale = scaleFactory().range(range).base(base);\n return this._scale;\n }\n\n getScaleValue (domainVal) {\n if (domainVal <= 0) {\n return 1;\n }\n\n return this._scale(domainVal) + 0.5;\n }\n\n sanitizeDomain (domain) {\n if (domain[0] <= 0) {\n return [Math.max(1, domain[0]), Math.max(1, domain[1])];\n } return domain;\n }\n}\n","import { scaleMap } from '../../scale-creator';\n\nexport default class PowInterpolator {\n\n createScale (config) {\n const {\n range,\n exponent\n } = config;\n const scaleFactory = scaleMap.pow;\n this._scale = scaleFactory().range(range).exponent(exponent);\n return this._scale;\n }\n\n getScaleValue (domainVal) {\n return this._scale(domainVal) + 0.5;\n }\n\n sanitizeDomain (domain) {\n return domain;\n }\n}\n","import { getSmallestDiff } from 'muze-utils';\nimport SimpleAxis from './simple-axis';\nimport { BOTTOM, TOP, LEFT, RIGHT } from '../enums/axis-orientation';\nimport { LINEAR, LOG, POW } from '../enums/scale-type';\nimport { LogInterpolator, PowInterpolator, LinearInterpolator } from './interpolators';\nimport { DOMAIN } from '../enums/constants';\nimport {\n getTickLabelInfo,\n getNumberOfTicks\n} from './helper';\n\nexport const interpolatorMap = {\n [LOG]: LogInterpolator,\n [POW]: PowInterpolator,\n [LINEAR]: LinearInterpolator\n};\n\nexport default class ContinousAxis extends SimpleAxis {\n constructor (config, dependencies) {\n config.tickFormat = config.tickFormat || (val => val);\n super(config, dependencies);\n }\n /**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\n createScale (config) {\n const {\n base,\n padding,\n interpolator,\n exponent\n } = config;\n const range = this.range();\n const InterpolatorCls = interpolatorMap[interpolator];\n\n this._interpolator = new InterpolatorCls();\n let scale = this._interpolator.createScale({\n padding,\n exponent,\n base,\n range\n });\n\n scale = scale.nice();\n return scale;\n }\n\n /**\n * This method is used to assign a domain to the axis.\n *\n * @param {Array} domain the domain of the scale\n * @memberof SimpleAxis\n */\n updateDomainBounds (domain) {\n let currentDomain = this.domain();\n if (this.config().domain) {\n currentDomain = this.config().domain;\n } else {\n if (currentDomain.length === 0) {\n currentDomain = domain;\n }\n if (domain.length) {\n currentDomain = [Math.min(currentDomain[0], domain[0]), Math.max(currentDomain[1], domain[1])];\n }\n }\n\n return this.domain(currentDomain);\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof ContinousAxis\n */\n static type () {\n return LINEAR;\n }\n\n getScaleValue (domainVal) {\n if (domainVal === null || domainVal === undefined) {\n return undefined;\n }\n return this._interpolator.getScaleValue(domainVal);\n }\n /**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\n getTickSize () {\n const {\n showInnerTicks,\n showOuterTicks\n } = this.config();\n const axis = this.axis();\n axis.tickSizeInner(showInnerTicks === false ? 0 : 6);\n axis.tickSizeOuter(showOuterTicks === false ? 0 : 6);\n return axis.tickSize();\n }\n\n /**\n *\n *\n * @param {*} d\n * @returns\n * @memberof SimpleAxis\n */\n domain (domain) {\n if (domain && domain.length) {\n const { nice } = this.config();\n if (domain.length && domain[0] === domain[1]) {\n domain = [0, +domain[0] * 2];\n }\n this.scale().domain(domain);\n nice && this.scale().nice();\n this._domain = this.scale().domain();\n this.store().commit(DOMAIN, this._domain);\n this.logicalSpace(null);\n return this;\n } return this._domain;\n }\n\n /**\n * This method is used to set the space availiable to render\n * the SimpleCell.\n *\n * @param {number} width The width of SimpleCell.\n * @param {number} height The height of SimpleCell.\n * @memberof AxisCell\n */\n setAvailableSpace (width = 0, height, padding, isOffset) {\n const {\n left,\n right,\n top,\n bottom\n } = padding;\n const {\n orientation,\n fixedBaseline\n } = this.config();\n const { tickLabelDim } = this.getAxisDimensions();\n this.availableSpace({ width, height });\n\n if (orientation === TOP || orientation === BOTTOM) {\n const labelSpace = tickLabelDim.width;\n this.range([(fixedBaseline ? 0 : (labelSpace / 2)) + left, width - right - labelSpace / 2]);\n const axisHeight = this.getLogicalSpace().height;\n isOffset && this.config({ yOffset: Math.max(axisHeight, height) });\n } else {\n const labelSpace = tickLabelDim.height;\n this.range([height - bottom - (fixedBaseline ? 1 : (labelSpace / 2)), labelSpace / 2 + top]);\n const axisWidth = this.getLogicalSpace().width;\n isOffset && this.config({ xOffset: Math.max(axisWidth, width) });\n }\n return this;\n }\n\n /**\n *\n *\n * @param {*} tickValues\n * @returns\n * @memberof SimpleAxis\n */\n setTickValues () {\n const {\n tickValues\n } = this.config();\n const axis = this.axis();\n\n if (tickValues) {\n tickValues instanceof Array && this.axis().tickValues(tickValues);\n return this;\n }\n axis.tickValues(this.getTickValues());\n return this;\n }\n\n /**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\n getTickValues () {\n let labelDim = 0;\n const {\n orientation,\n tickValues\n } = this.config();\n const range = this.range();\n const axis = this.axis();\n\n const availableSpace = Math.abs(range[0] - range[1]);\n\n const labelProps = getTickLabelInfo(this).largestLabelDim;\n\n if (tickValues) {\n return axis.scale().ticks(tickValues);\n }\n labelDim = labelProps[orientation === BOTTOM || orientation === TOP ? 'width' : 'height'];\n\n return getNumberOfTicks(availableSpace, labelDim, axis, this);\n }\n\n getMinTickDifference () {\n return getSmallestDiff(this.config().tickValues);\n }\n\n /**\n * Sets a fixed baseline for the first ticks so that they can render effectively within\n * the given area\n *\n * @param {*} tickText\n * @param {*} config\n * @param {*} labelManager\n */\n setFixedBaseline (tickText) {\n const {\n orientation,\n labels\n } = this.config();\n const {\n rotation\n } = labels;\n const axis = this.axis();\n const { width, height } = this._axisDimensions.largestLabelDim;\n axis.tickTransform((d, i) => {\n if (i === 0 && (orientation === LEFT || orientation === RIGHT)) {\n return `translate(0, -${(height) / 3}px)`;\n }\n if (i === 0 && (orientation === TOP || orientation === BOTTOM) && rotation === 0) {\n return `translate(${width / 2}px, ${0}px) rotate(${rotation}deg)`;\n } return '';\n });\n return tickText;\n }\n\n}\n","import SimpleAxis from './simple-axis';\nimport { BAND } from '../enums/scale-type';\nimport { TOP, BOTTOM } from '../enums/axis-orientation';\nimport { calculateBandSpace, setOffset } from './helper';\n\nexport default class BandAxis extends SimpleAxis {\n\n /**\n *\n *\n * @param {*} range\n * @returns\n * @memberof BandAxis\n */\n createScale (range) {\n const scale = super.createScale(range);\n const { padding } = this.config();\n if (typeof padding === 'number') {\n scale.padding(padding);\n }\n return scale;\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof BandAxis\n */\n static type () {\n return BAND;\n }\n\n /**\n *\n *\n * @param {*} width\n * @param {*} height\n * @param {*} padding\n * @param {*} isOffset\n * @memberof BandAxis\n */\n setAvailableSpace (width, height, padding, isOffset) {\n const {\n left,\n right,\n top,\n bottom\n } = padding;\n const {\n orientation,\n showAxisName,\n axisNamePadding\n } = this.config();\n const { axisLabelDim } = this.getAxisDimensions();\n const { height: axisDimHeight } = axisLabelDim;\n\n this.availableSpace({ width, height });\n if (orientation === TOP || orientation === BOTTOM) {\n // Set x axis range\n this.range([0, width - left - right]);\n const axisHeight = this.getLogicalSpace().height - (showAxisName === false ?\n (axisDimHeight + axisNamePadding) : 0);\n isOffset && this.config({ yOffset: Math.max(axisHeight, height) });\n } else {\n // Set y axis range\n this.range([height - bottom, top]);\n const axisWidth = this.getLogicalSpace().width - (showAxisName === false ? axisDimHeight : 0);\n isOffset && this.config({ xOffset: Math.max(axisWidth, width) });\n }\n return this;\n }\n\n /**\n *\n *\n * @returns\n * @memberof BandAxis\n */\n getUnitWidth () {\n return this.scale().bandwidth();\n }\n\n /**\n *\n *\n * @returns\n * @memberof BandAxis\n */\n setTickConfig () {\n let smartTicks = '';\n let smartlabel;\n const { maxWidth, maxHeight, tickFormat } = this.config();\n const { labelManager } = this._dependencies;\n const domain = this.axis().scale().domain();\n\n smartTicks = domain;\n const tickFormatter = tickFormat || (val => val);\n\n if (domain && domain.length) {\n smartTicks = domain.map((d, i) => {\n labelManager.useEllipsesOnOverflow(true);\n smartlabel = labelManager.getSmartText(tickFormatter(d, i, domain), maxWidth, maxHeight);\n return labelManager.constructor.textToLines(smartlabel);\n });\n }\n return smartTicks;\n }\n\n/**\n * Gets the space occupied by the axis\n *\n * @return {Object} object with details about size of the axis.\n * @memberof SimpleAxis\n */\n getLogicalSpace () {\n if (!this.logicalSpace()) {\n this.logicalSpace(calculateBandSpace(this));\n setOffset(this);\n this.logicalSpace();\n }\n return this.logicalSpace();\n }\n /**\n *\n *\n * @param {*} axisTickLabels\n * @param {*} labelWidth\n * @returns\n * @memberof BandAxis\n */\n setRotationConfig (axisTickLabels, labelWidth) {\n const { orientation } = this.config();\n const range = this.range();\n const availSpace = Math.abs(range[0] - range[1]);\n\n this.config({ labels: { rotation: 0, smartTicks: false } });\n if (orientation === TOP || orientation === BOTTOM) {\n const smartWidth = this.smartTicks().reduce((acc, n) => acc + n.width + this._minTickDistance.width, 0);\n // set multiline config\n if (availSpace > 0 && axisTickLabels.length * (labelWidth + this._minTickDistance.width) > availSpace) {\n if (availSpace && smartWidth < availSpace) {\n this.config({ labels: { smartTicks: true } });\n } else {\n this.config({ labels: { rotation: -90 } });\n }\n }\n }\n return this;\n }\n\n /**\n *\n *\n * @returns\n * @memberof BandAxis\n */\n getTickValues () {\n return this.axis().scale().domain();\n }\n\n /**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\n getTickSize () {\n const {\n showInnerTicks,\n showOuterTicks\n } = this.config();\n const axis = this.axis();\n\n axis.tickSizeInner(showInnerTicks ? 6 : 0);\n axis.tickSizeOuter(showOuterTicks ? 6 : 0);\n return axis.tickSize();\n }\n\n /**\n * This method is used to assign a domain to the axis.\n *\n * @param {Array} domain the domain of the scale\n * @memberof SimpleAxis\n */\n updateDomainBounds (domain) {\n let currentDomain = this.domain();\n if (this.config().domain) {\n currentDomain = this.config().domain;\n } else {\n if (currentDomain.length === 0) {\n currentDomain = domain;\n }\n currentDomain = currentDomain.concat(domain);\n }\n this.domain(currentDomain);\n return this;\n }\n\n /**\n * Returns the value from the domain when given a value from the range.\n * @param {number} value Value from the range.\n * @return {number} Value\n */\n invert (...value) {\n const values = value.map(d => this.scale().invert(d)) || [];\n return value.length === 1 ? values[0] && values[0].toString() : values.map(d => d.toString());\n }\n}\n","import { getSmallestDiff } from 'muze-utils';\nimport SimpleAxis from './simple-axis';\nimport { adjustRange } from './helper';\nimport { TIME } from '../enums/scale-type';\nimport { axisOrientationMap, BOTTOM, TOP } from '../enums/axis-orientation';\nimport { DOMAIN } from '../enums/constants';\n\n/**\n *\n *\n * @export\n * @class TimeAxis\n * @extends {SimpleAxis}\n */\nexport default class TimeAxis extends SimpleAxis {\n\n constructor (...params) {\n super(...params);\n this._minDiff = Infinity;\n }\n\n /**\n *\n *\n * @param {*} range\n * @returns\n * @memberof TimeAxis\n */\n createScale (range) {\n let scale = super.createScale(range);\n\n scale = scale.nice();\n return scale;\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof TimeAxis\n */\n static type () {\n return TIME;\n }\n\n /**\n *\n *\n * @returns\n * @memberof BandAxis\n */\n setTickConfig () {\n let smartTicks;\n let smartlabel;\n const { maxWidth, maxHeight, tickFormat } = this.config();\n const { labelManager } = this._dependencies;\n const domain = this.getTickValues();\n const scale = this.scale();\n\n smartTicks = domain;\n const tickFormatter = tickFormat || scale.tickFormat();\n\n if (domain && domain.length) {\n smartTicks = domain.map((d, i) => {\n smartlabel = labelManager.getSmartText(tickFormatter(d, i, domain), maxWidth, maxHeight);\n return labelManager.constructor.textToLines(smartlabel);\n });\n }\n return smartTicks;\n }\n\n /**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\n createAxis (config) {\n const {\n tickFormat,\n orientation\n } = config;\n const axisClass = axisOrientationMap[orientation];\n\n if (axisClass) {\n const axis = axisClass(this.scale());\n this.formatter = this.getTickFormatter(tickFormat);\n return axis;\n }\n return null;\n }\n\n getTickFormatter (tickFormat) {\n if (tickFormat) {\n return ticks => (val, i) => tickFormat(val, i, ticks);\n }\n return null;\n }\n\n /**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\n getTickSize () {\n const {\n showInnerTicks,\n showOuterTicks\n } = this.config();\n const axis = this.axis();\n axis.tickSizeInner(showInnerTicks === false ? 0 : 6);\n axis.tickSizeOuter(showOuterTicks === false ? 0 : 6);\n return super.getTickSize();\n }\n\n /**\n *\n *\n * @returns\n * @memberof TimeAxis\n */\n getTickValues () {\n return this.scale().ticks();\n }\n\n /**\n *\n *\n * @param {*} diff\n * @returns\n * @memberof TimeAxis\n */\n minDiff (diff) {\n this._minDiff = Math.min(this._minDiff, diff);\n return this;\n }\n\n /**\n *\n *\n * @param {*} axisTickLabels\n * @param {*} labelWidth\n * @returns\n * @memberof BandAxis\n */\n setRotationConfig (axisTickLabels, labelWidth) {\n const { orientation } = this.config();\n const range = this.range();\n const availSpace = Math.abs(range[0] - range[1]);\n\n this.config({ labels: { rotation: 0, smartTicks: false } });\n if (orientation === TOP || orientation === BOTTOM) {\n const smartWidth = this.smartTicks().reduce((acc, n) => acc + n.width, 0);\n // set multiline config\n if (availSpace > 0 && axisTickLabels.length * labelWidth > availSpace) {\n if (availSpace && smartWidth * 1.25 < availSpace) {\n this.config({ labels: { smartTicks: true } });\n }\n this.config({ labels: { rotation: -90 } });\n }\n }\n return this;\n }\n\n /**\n *\n *\n * @param {*} d\n * @returns\n * @memberof SimpleAxis\n */\n domain (domain) {\n if (domain) {\n const { nice } = this.config();\n\n if (domain.length && domain[0] === domain[1]) {\n domain = [0, +domain[0] * 2];\n }\n this.scale().domain(domain);\n nice && this.scale().nice();\n this._domain = this.scale().domain();\n this.smartTicks(this.setTickConfig());\n this.store().commit(DOMAIN, this._domain);\n this.logicalSpace(null);\n return this;\n } return this._domain;\n }\n\n getMinTickDifference () {\n return getSmallestDiff(this.config().tickValues);\n }\n\n /**\n *\n *\n * @param {*} width\n * @param {*} height\n * @param {*} padding\n * @param {*} isOffset\n * @memberof TimeAxis\n */\n setAvailableSpace (width, height, padding, isOffset) {\n const {\n left,\n right,\n top,\n bottom\n } = padding;\n const {\n orientation,\n showAxisName,\n axisNamePadding\n } = this.config();\n const domain = this.domain();\n const { axisLabelDim, tickLabelDim } = this.getAxisDimensions();\n const { height: axisDimHeight } = axisLabelDim;\n const { height: tickDimHeight, width: tickDimWidth } = tickLabelDim;\n\n this.availableSpace({ width, height });\n if (orientation === TOP || orientation === BOTTOM) {\n const labelSpace = tickDimWidth;\n this.range(adjustRange(this._minDiff, [labelSpace / 2, width - left - right - labelSpace / 2],\n domain, orientation));\n const axisHeight = this.getLogicalSpace().height - (showAxisName === false ?\n (axisDimHeight + axisNamePadding) : 0);\n isOffset && this.config({ yOffset: Math.max(axisHeight, height) });\n } else {\n const labelSpace = tickDimHeight;\n this.range(adjustRange(this._minDiff, [height - top - bottom - labelSpace / 2, labelSpace / 2],\n domain, orientation));\n const axisWidth = this.getLogicalSpace().width - (showAxisName === false ? axisDimHeight : 0);\n this.isOffset && this.config({ xOffset: Math.max(axisWidth, width) });\n }\n return this;\n }\n\n}\n","export const x11Colors = {\n Pink: { hex: 'ffc0cb', rgb: '255,192,203' },\n LightPink: { hex: 'ffb6c1', rgb: '255,182,193' },\n HotPink: { hex: 'ff69b4', rgb: '255,105,180' },\n DeepPink: { hex: 'ff1493', rgb: '255,20,147' },\n PaleVioletRed: { hex: 'db7093', rgb: '219,112,147' },\n MediumVioletRed: { hex: 'c71585', rgb: '199,21,133' },\n LightSalmon: { hex: 'ffa07a', rgb: '255,160,122' },\n Salmon: { hex: 'fa8072', rgb: '250,128,114' },\n DarkSalmon: { hex: 'e9967a', rgb: '233,150,122' },\n LightCoral: { hex: 'f08080', rgb: '240,128,128' },\n IndianRed: { hex: 'cd5c5c', rgb: '205,92,92' },\n Crimson: { hex: 'dc143c', rgb: '220,20,60' },\n FireBrick: { hex: 'b22222', rgb: '178,34,34' },\n DarkRed: { hex: '8b0000', rgb: '139,0,0' },\n Red: { hex: 'ff0000', rgb: '255,0,0' },\n OrangeRed: { hex: 'ff4500', rgb: '255,69,0' },\n Tomato: { hex: 'ff6347', rgb: '255,99,71' },\n Coral: { hex: 'ff7f50', rgb: '255,127,80' },\n DarkOrange: { hex: 'ff8c00', rgb: '255,140,0' },\n Orange: { hex: 'ffa500', rgb: '255,165,0' },\n Gold: { hex: 'ffd700', rgb: '255,215,0' },\n Yellow: { hex: 'ffff00', rgb: '255,255,0' },\n LightYellow: { hex: 'ffffe0', rgb: '255,255,224' },\n LemonChiffon: { hex: 'fffacd', rgb: '255,250,205' },\n LightGoldenrodYellow: { hex: 'fafad2', rgb: '250,250,210' },\n PapayaWhip: { hex: 'ffefd5', rgb: '255,239,213' },\n Moccasin: { hex: 'ffe4b5', rgb: '255,228,181' },\n PeachPuff: { hex: 'ffdab9', rgb: '255,218,185' },\n PaleGoldenrod: { hex: 'eee8aa', rgb: '238,232,170' },\n Khaki: { hex: 'f0e68c', rgb: '240,230,140' },\n DarkKhaki: { hex: 'bdb76b', rgb: '189,183,107' },\n Cornsilk: { hex: 'fff8dc', rgb: '255,248,220' },\n BlanchedAlmond: { hex: 'ffebcd', rgb: '255,235,205' },\n Bisque: { hex: 'ffe4c4', rgb: '255,228,196' },\n NavajoWhite: { hex: 'ffdead', rgb: '255,222,173' },\n Wheat: { hex: 'f5deb3', rgb: '245,222,179' },\n BurlyWood: { hex: 'deb887', rgb: '222,184,135' },\n Tan: { hex: 'd2b48c', rgb: '210,180,140' },\n RosyBrown: { hex: 'bc8f8f', rgb: '188,143,143' },\n SandyBrown: { hex: 'f4a460', rgb: '244,164,96' },\n Goldenrod: { hex: 'daa520', rgb: '218,165,32' },\n DarkGoldenrod: { hex: 'b8860b', rgb: '184,134,11' },\n Peru: { hex: 'cd853f', rgb: '205,133,63' },\n Chocolate: { hex: 'd2691e', rgb: '210,105,30' },\n SaddleBrown: { hex: '8b4513', rgb: '139,69,19' },\n Sienna: { hex: 'a0522d', rgb: '160,82,45' },\n Brown: { hex: 'a52a2a', rgb: '165,42,42' },\n Maroon: { hex: '800000', rgb: '128,0,0' },\n DarkOliveGreen: { hex: '556b2f', rgb: '85,107,47' },\n Olive: { hex: '808000', rgb: '128,128,0' },\n OliveDrab: { hex: '6b8e23', rgb: '107,142,35' },\n YellowGreen: { hex: '9acd32', rgb: '154,205,50' },\n LimeGreen: { hex: '32cd32', rgb: '50,205,50' },\n Lime: { hex: '00ff00', rgb: '0,255,0' },\n LawnGreen: { hex: '7cfc00', rgb: '124,252,0' },\n Chartreuse: { hex: '7fff00', rgb: '127,255,0' },\n GreenYellow: { hex: 'adff2f', rgb: '173,255,47' },\n SpringGreen: { hex: '00ff7f', rgb: '0,255,127' },\n MediumSpringGreen: { hex: '00fa9a', rgb: '0,250,154' },\n LightGreen: { hex: '90ee90', rgb: '144,238,144' },\n PaleGreen: { hex: '98fb98', rgb: '152,251,152' },\n DarkSeaGreen: { hex: '8fbc8f', rgb: '143,188,143' },\n MediumSeaGreen: { hex: '3cb371', rgb: '60,179,113' },\n SeaGreen: { hex: '2e8b57', rgb: '46,139,87' },\n ForestGreen: { hex: '228b22', rgb: '34,139,34' },\n Green: { hex: '008000', rgb: '0,128,0' },\n DarkGreen: { hex: '006400', rgb: '0,100,0' },\n MediumAquamarine: { hex: '66cdaa', rgb: '102,205,170' },\n Aqua: { hex: '00ffff', rgb: '0,255,255' },\n Cyan: { hex: '00ffff', rgb: '0,255,255' },\n LightCyan: { hex: 'e0ffff', rgb: '224,255,255' },\n PaleTurquoise: { hex: 'afeeee', rgb: '175,238,238' },\n Aquamarine: { hex: '7fffd4', rgb: '127,255,212' },\n Turquoise: { hex: '40e0d0', rgb: '64,224,208' },\n MediumTurquoise: { hex: '48d1cc', rgb: '72,209,204' },\n DarkTurquoise: { hex: '00ced1', rgb: '0,206,209' },\n LightSeaGreen: { hex: '20b2aa', rgb: '32,178,170' },\n CadetBlue: { hex: '5f9ea0', rgb: '95,158,160' },\n DarkCyan: { hex: '008b8b', rgb: '0,139,139' },\n Teal: { hex: '008080', rgb: '0,128,128' },\n LightSteelBlue: { hex: 'b0c4de', rgb: '176,196,222' },\n PowderBlue: { hex: 'b0e0e6', rgb: '176,224,230' },\n LightBlue: { hex: 'add8e6', rgb: '173,216,230' },\n SkyBlue: { hex: '87ceeb', rgb: '135,206,235' },\n LightSkyBlue: { hex: '87cefa', rgb: '135,206,250' },\n DeepSkyBlue: { hex: '00bfff', rgb: '0,191,255' },\n DodgerBlue: { hex: '1e90ff', rgb: '30,144,255' },\n CornflowerBlue: { hex: '6495ed', rgb: '100,149,237' },\n SteelBlue: { hex: '4682b4', rgb: '70,130,180' },\n RoyalBlue: { hex: '4169e1', rgb: '65,105,225' },\n Blue: { hex: '0000ff', rgb: '0,0,255' },\n MediumBlue: { hex: '0000cd', rgb: '0,0,205' },\n DarkBlue: { hex: '00008b', rgb: '0,0,139' },\n Navy: { hex: '000080', rgb: '0,0,128' },\n MidnightBlue: { hex: '191970', rgb: '25,25,112' },\n Lavender: { hex: 'e6e6fa', rgb: '230,230,250' },\n Thistle: { hex: 'd8bfd8', rgb: '216,191,216' },\n Plum: { hex: 'dda0dd', rgb: '221,160,221' },\n Violet: { hex: 'ee82ee', rgb: '238,130,238' },\n Orchid: { hex: 'da70d6', rgb: '218,112,214' },\n Fuchsia: { hex: 'ff00ff', rgb: '255,0,255' },\n Magenta: { hex: 'ff00ff', rgb: '255,0,255' },\n MediumOrchid: { hex: 'ba55d3', rgb: '186,85,211' },\n MediumPurple: { hex: '9370db', rgb: '147,112,219' },\n BlueViolet: { hex: '8a2be2', rgb: '138,43,226' },\n DarkViolet: { hex: '9400d3', rgb: '148,0,211' },\n DarkOrchid: { hex: '9932cc', rgb: '153,50,204' },\n DarkMagenta: { hex: '8b008b', rgb: '139,0,139' },\n Purple: { hex: '800080', rgb: '128,0,128' },\n Indigo: { hex: '4b0082', rgb: '75,0,130' },\n DarkSlateBlue: { hex: '483d8b', rgb: '72,61,139' },\n SlateBlue: { hex: '6a5acd', rgb: '106,90,205' },\n MediumSlateBlue: { hex: '7b68ee', rgb: '123,104,238' },\n White: { hex: 'ffffff', rgb: '255,255,255' },\n Snow: { hex: 'fffafa', rgb: '255,250,250' },\n Honeydew: { hex: 'f0fff0', rgb: '240,255,240' },\n MintCream: { hex: 'f5fffa', rgb: '245,255,250' },\n Azure: { hex: 'f0ffff', rgb: '240,255,255' },\n AliceBlue: { hex: 'f0f8ff', rgb: '240,248,255' },\n GhostWhite: { hex: 'f8f8ff', rgb: '248,248,255' },\n WhiteSmoke: { hex: 'f5f5f5', rgb: '245,245,245' },\n Seashell: { hex: 'fff5ee', rgb: '255,245,238' },\n Beige: { hex: 'f5f5dc', rgb: '245,245,220' },\n OldLace: { hex: 'fdf5e6', rgb: '253,245,230' },\n FloralWhite: { hex: 'fffaf0', rgb: '255,250,240' },\n Ivory: { hex: 'fffff0', rgb: '255,255,240' },\n AntiqueWhite: { hex: 'faebd7', rgb: '250,235,215' },\n Linen: { hex: 'faf0e6', rgb: '250,240,230' },\n LavenderBlush: { hex: 'fff0f5', rgb: '255,240,245' },\n MistyRose: { hex: 'ffe4e1', rgb: '255,228,225' },\n Gainsboro: { hex: 'dcdcdc', rgb: '220,220,220' },\n LightGray: { hex: 'd3d3d3', rgb: '211,211,211' },\n Silver: { hex: 'c0c0c0', rgb: '192,192,192' },\n DarkGrey: { hex: 'a9a9a9', rgb: '169,169,169' },\n Grey: { hex: '808080', rgb: '128,128,128' },\n DimGrey: { hex: '696969', rgb: '105,105,105' },\n LightSlateGrey: { hex: '778899', rgb: '119,136,153' },\n SlateGrey: { hex: '708090', rgb: '112,128,144' },\n DarkSlateGrey: { hex: '2f4f4f', rgb: '47,79,79' },\n Black: { hex: '000000', rgb: '0,0,0' }\n};\n","import {\n LINEAR\n} from '../enums/constants';\n/**\n * Set of default colors\n */\nexport const palette = [\n '#086bb6',\n '#f37d45',\n '#f5ce02',\n '#67bda0',\n '#c54e4e',\n '#ae70af'\n];\n\nexport const DEFAULT_GRADIENT_COLOR = '#eaeaea';\n\nexport const DEFAULT_CONFIG = {\n range: palette,\n value: palette[0],\n step: false,\n stops: 5,\n type: LINEAR\n};\n","import { mergeRecursive, detectColor, hexToHsv, rgbToHsv } from 'muze-utils';\nimport { x11Colors } from './color-maps';\nimport { palette, DEFAULT_GRADIENT_COLOR } from './defaults';\nimport { LINEAR, RGB, HEX, HSL, HSLA } from '../enums/constants';\n\nexport const getHslString = hslArr => `hsla(${hslArr[0] * 360},${hslArr[1] * 100}%,${hslArr[2] * 100}%,\\\n${hslArr[3] || 1})`;\n\nexport const convertToXllString = baseString => (baseString.split(' ') || [])\n .reduce((x, e) => `${x}${e.charAt(0).toUpperCase()}${e.slice(1)}`, '');\n\nexport const getActualHslColor = (e, paletteColor) => {\n let color = '';\n if (typeof e === 'string') {\n e = e.replace(/ /g, '');\n e = e.toLowerCase();\n if (detectColor(e) === HSL || detectColor(e) === HSLA) {\n color = e.match(/(\\d+(\\.\\d+)?)/g);\n color = [color[0] / 360, color[1] / 100, color[2] / 100, color[3] || 1];\n } else if (detectColor(e) === HEX) {\n color = hexToHsv(e);\n } else if (detectColor(e) === RGB) {\n const col = e.substring(e.indexOf('(') + 1, e.lastIndexOf(')')).split(/,\\s*/);\n color = rgbToHsv(...col);\n } else if (x11Colors[convertToXllString(e)]) {\n color = rgbToHsv(...x11Colors[convertToXllString(e)].rgb.split(','));\n }\n } else if (!(e instanceof Array)) {\n color = rgbToHsv(paletteColor);\n } else {\n color = e;\n }\n return color;\n};\n\nexport const PROPS = {\n config: {\n sanitization: (context, config) => {\n const defCon = mergeRecursive({}, context.constructor.defaultConfig());\n if (config.type === LINEAR) {\n config.range = config.range || [defCon.range[0]];\n config.range = config.range.length > 1 ? config.range : [DEFAULT_GRADIENT_COLOR, ...config.range];\n }\n const oldConfig = mergeRecursive(defCon, context.config());\n const newConfig = mergeRecursive(oldConfig, config);\n\n if (newConfig.range instanceof Array) {\n newConfig.range = newConfig.range.map((e, i) => getActualHslColor(e, palette[i]));\n newConfig.stops = config.stops || newConfig.range.length;\n }\n newConfig.value = getActualHslColor(newConfig.value, newConfig.value);\n return newConfig;\n }\n },\n domain: {},\n scale: {},\n uniqueValues: {}\n};\n","import { numberInterpolator, piecewiseInterpolator, hslInterpolator } from 'muze-utils';\nimport { CONTINOUS, DISCRETE } from '../enums/constants';\nimport { LINEAR, SEQUENTIAL, ORDINAL, QUANTILE } from '../enums/scale-type';\nimport { getHslString } from './props';\n\nconst getStops = (domain, stops) => {\n let newStops = [];\n\n if (stops instanceof Array) {\n newStops = stops.slice().sort();\n newStops = [...new Set([domain[0], ...stops, domain[1]])].sort();\n } else {\n const interpolator = numberInterpolator()(...domain);\n for (let i = 0; i <= stops; i++) {\n newStops[i] = interpolator(i / stops);\n }\n }\n\n if (newStops[0] < domain[0]) {\n newStops.shift();\n }\n return { domain, newStops };\n};\n\nconst rangeStops = (newStopsLength, range) => {\n let newRange = [];\n const maxRangeLength = Math.min(range.length, 18);\n\n if (newStopsLength > maxRangeLength) {\n const interpolator = piecewiseInterpolator()(hslInterpolator(), range.map(e => getHslString(e)));\n for (let i = 0; i < newStopsLength; i++) {\n newRange[i] = interpolator(i / (newStopsLength - 1));\n }\n } else {\n newRange = range.slice(0, newStopsLength);\n }\n return { newRange };\n};\n\n/**\n*\n*\n* @param {*} domain\n* @returns\n*/\nconst indexedDomain = (domain) => {\n const uniqueVals = domain;\n const retDomain = domain.map((d, i) => (i) / (domain.length - 1));\n return { domain: retDomain, uniqueVals, scaleDomain: [0, 1] };\n};\n\n/**\n *\n *\n * @param {*} domain\n * @returns\n */\nconst indexedDomainMeasure = (domain, stops, range) => {\n const uniqueVals = domain;\n return { domain, uniqueVals, scaleDomain: [0, 1], range };\n};\n\n/**\n *\n *\n * @param {*} domain\n * @returns\n */\nconst normalDomain = (domain, stops, range) => {\n const uniqueVals = domain;\n return { uniqueVals, domain, nice: true, range };\n};\n\n/**\n *\n *\n * @param {*} domain\n * @param {*} stops\n * @returns\n */\nconst steppedDomain = (domain, stops, range) => {\n const { domain: uniqueVals, newStops } = getStops(domain, stops);\n const { newRange } = rangeStops(newStops.length - 1, range);\n\n return { uniqueVals, domain: newStops, nice: true, range: newRange };\n};\n\nconst continousSteppedDomain = (domain, stops, range) => {\n const { domain: uniqueVals, newStops } = getStops(domain, range.length - 1);\n const hslRange = range.map(e => getHslString(e));\n return { uniqueVals, domain: newStops, nice: true, range: hslRange };\n};\n\n/**\n *\n *\n * @param {*} domainValue\n * @param {*} scale\n * @param {*} domain\n * @param {*} uniqueVals\n * @returns\n */\nconst uniqueRange = (domainValue, scale, domain, uniqueVals) => {\n const index = uniqueVals.indexOf(domainValue);\n const numVal = domain[index];\n return scale(numVal);\n};\n\n/**\n *\n *\n * @param {*} domainValue\n * @param {*} scale\n * @param {*} domain\n * @returns\n */\nconst indexedRange = (domainValue, scale, domain) => {\n const numVal = (domainValue - domain[0]) / (domain[domain.length - 1] - domain[0]);\n\n return scale(numVal);\n};\n\n/**\n *\n *\n * @param {*} domainValue\n * @param {*} scale\n */\nconst normalRange = (domainValue, scale) => scale(domainValue);\n\n/**\n *\n *\n * @param {*} stops\n */\nconst strategies = () => ({\n [`${CONTINOUS}-${CONTINOUS}-${SEQUENTIAL}`]: {\n scale: SEQUENTIAL,\n domainRange: () => indexedDomainMeasure,\n value: () => indexedRange\n },\n [`${CONTINOUS}-${DISCRETE}-${SEQUENTIAL}`]: {\n scale: SEQUENTIAL,\n domainRange: () => indexedDomainMeasure,\n value: () => indexedRange\n },\n [`${DISCRETE}-${DISCRETE}-${SEQUENTIAL}`]: {\n scale: SEQUENTIAL,\n domainRange: () => indexedDomain,\n value: () => uniqueRange\n },\n [`${DISCRETE}-${DISCRETE}-${ORDINAL}`]: {\n scale: ORDINAL,\n domainRange: () => normalDomain,\n value: () => normalRange\n },\n [`${CONTINOUS}-${CONTINOUS}-${ORDINAL}`]: {\n scale: LINEAR,\n domainRange: () => continousSteppedDomain,\n value: () => normalRange\n },\n [`${CONTINOUS}-${DISCRETE}-${ORDINAL}`]: {\n scale: QUANTILE,\n domainRange: () => steppedDomain,\n value: () => normalRange\n\n }\n});\n\n/**\n *\n *\n * @param {*} domainType\n * @param {*} rangeType\n * @param {*} schemeType\n * @param {*} stops\n */\nexport const strategyGetter = (domainType, rangeType, schemeType, stops) =>\n strategies(stops)[`${domainType}-${rangeType}-${schemeType || ''}`];\n","/**\n * @module Axis\n * This file declares a class that is used to render an axis to add meaning to\n * plots.\n */\nimport { getUniqueId, generateGetterSetters, rgbToHsv } from 'muze-utils';\nimport { createScale, getScheme, getSchemeType } from '../scale-creator';\nimport { CONTINOUS, DISCRETE, COLOR } from '../enums/constants';\nimport { strategyGetter } from './color-strategy';\nimport { DEFAULT_CONFIG } from './defaults';\nimport { PROPS, getHslString } from './props';\n\n/**\n* This class is used to instantiate a SimpleAxis.\n* @class SimpleAxis\n*/\nexport default class ColorAxis {\n\n /**\n * Creates an instance of SimpleAxis.\n * @param {Object} config input parameters.\n * @param {Object | undefined} params.range Type of color range.\n * @param {string} params.name the label to show on axis.\n * @param {string} params.type The type of scale to handle.\n * @memberof ColorAxis\n */\n constructor (config) {\n generateGetterSetters(this, PROPS);\n this.config(config);\n\n this._domainType = this._config.type === 'linear' ? CONTINOUS : DISCRETE;\n this._rangeType = (this._config.type === 'linear' && !this._config.step) ? CONTINOUS : DISCRETE;\n\n this._schemeType = getSchemeType(this._config.range);\n\n this._colorStrategy = this.setColorStrategy(this._domainType, this._rangeType, this._schemeType);\n this._scale = this.createScale(this._colorStrategy);\n\n this._id = getUniqueId();\n\n this.updateDomain(config.domain);\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof ColorAxis\n */\n static defaultConfig () {\n return DEFAULT_CONFIG;\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof ColorAxis\n */\n static type () {\n return COLOR;\n }\n\n /**\n *\n *\n * @param {*} colorStrategy\n * @returns\n * @memberof ColorAxis\n */\n createScale (colorStrategy) {\n const { range } = this.config();\n if (range && typeof (range) === 'string') {\n return getScheme(range);\n }\n return createScale({\n type: colorStrategy.scale,\n range\n });\n }\n\n /**\n *\n *\n * @param {*} domainType\n * @param {*} rangeType\n * @param {*} schemeType\n * @returns\n * @memberof ColorAxis\n */\n setColorStrategy (domainType, rangeType, schemeType) {\n const { stops } = this.config();\n\n return strategyGetter(domainType, rangeType, schemeType, stops);\n }\n\n /**\n *\n *\n * @param {*} domainVal\n * @returns\n * @memberof ColorAxis\n */\n getHslString (hslColorArray) {\n return getHslString(hslColorArray);\n }\n /**\n *\n *\n * @param {*} domainVal\n * @returns\n * @memberof ColorAxis\n */\n getColor (domainVal) {\n return this.getHslString(this.getRawColor(domainVal));\n }\n /**\n *\n *\n * @param {*} domainVal\n * @returns\n * @memberof ColorAxis\n */\n getRawColor (domainVal) {\n if (this.domain() && domainVal !== undefined) {\n const scale = this.scale();\n const range = scale.range ? scale.range() : null;\n const color = this._colorStrategy.value(range)(domainVal, scale, this.domain(), this.uniqueValues());\n\n if (typeof color === 'string') {\n const col = color.substring(color.indexOf('(') + 1, color.lastIndexOf(')')).split(/,\\s*/);\n return rgbToHsv(...col);\n }\n return [...color];\n }\n return [...this.config().value];\n }\n\n /**\n *\n *\n * @param {*} [domain=[]]\n * @returns\n * @memberof ColorAxis\n */\n updateDomain (domain = []) {\n if (domain.length) {\n const scale = this.scale();\n const range = scale.range ? scale.range() : null;\n const domainRangeFn = this._colorStrategy.domainRange();\n const scaleInfo = domainRangeFn(domain, this.config().stops, range);\n\n this.domain(scaleInfo.domain);\n scaleInfo.range && this.scale().range(scaleInfo.range);\n this.uniqueValues(scaleInfo.uniqueVals);\n this.scale().domain(scaleInfo.scaleDomain || this.domain());\n }\n return this;\n }\n\n /**\n * This method returns an object that can be used to\n * reconstruct this instance.\n *\n * @return {Object} the serializable props of axis\n * @memberof ShapeAxis\n */\n serialize () {\n return {\n type: this.constructor.type(),\n scale: this.scale(),\n domain: this.domain(),\n config: this.config()\n };\n }\n\n transformColor (color, transformationArr) {\n const h = color[0] * 360;\n const s = color[1] * 100;\n const l = color[2] * 100;\n const a = color[3] || 1;\n const newH = h + transformationArr[0];\n const newS = s + transformationArr[1];\n const newL = l + transformationArr[2];\n const newA = a + transformationArr[3] || 0;\n\n return { color: `hsla(${newH},${newS}%,${newL}%,${newA})`, hsla: [newH / 360, newS / 100, newL / 100, newA] };\n }\n\n /**\n * Returns the id of the axis.\n * @return {string} Unique identifier of the axis.\n */\n id () {\n return this._id;\n }\n\n}\n","export const DEFAULT_CONFIG = {\n value: 36,\n range: [36, 1000]\n};\n","import { numberInterpolator, piecewiseInterpolator } from 'muze-utils';\nimport { CONTINOUS, DISCRETE } from '../enums/constants';\nimport { LINEAR, THRESHOLD } from '../enums/scale-type';\n\n/**\n *\n *\n * @param {*} domain\n * @returns\n */\nconst indexedDomain = (domain) => {\n const uniqueVals = domain;\n const retDomain = domain.map((d, i) => (i) / (domain.length - 1));\n return { domain: retDomain, uniqueVals, scaleDomain: [0, 1] };\n};\n\n/**\n *\n *\n * @param {*} domain\n * @returns\n */\nconst normalDomain = (domain) => {\n const uniqueVals = domain;\n return { uniqueVals, domain };\n};\n\n/**\n *\n *\n * @param {*} domain\n * @param {*} intervals\n * @returns\n */\nconst steppedDomain = (domain, intervals) => {\n let newIntervals = [];\n if (intervals instanceof Array) {\n newIntervals = intervals.slice().sort();\n } else {\n const interpolator = numberInterpolator()(...domain);\n for (let i = 0; i < intervals; i++) {\n newIntervals[i] = interpolator(i / (intervals - 1));\n }\n }\n if (newIntervals[0] < domain[0]) {\n newIntervals.shift();\n }\n const retDomain = newIntervals;\n return { uniqueVals: newIntervals, domain: retDomain, nice: true };\n};\n\n/**\n *\n *\n * @param {*} domainValue\n * @param {*} scale\n * @param {*} domain\n * @param {*} uniqueVals\n * @returns\n */\nconst discreteRange = (domainValue, scale, domain) => {\n const numVal = (domainValue - domain[0]) / (domain[domain.length - 1] - domain[0]);\n const interpolator = numberInterpolator()(...scale.range());\n return interpolator(numVal);\n};\n\n/**\n *\n *\n * @param {*} domainValue\n * @param {*} scale\n * @param {*} domain\n * @returns\n */\nconst pieceWiseRange = (domainValue, scale, domain, uniqueVals) => {\n const index = uniqueVals.indexOf(domainValue);\n const numVal = domain[index];\n const fn = piecewiseInterpolator()(numberInterpolator(), [...scale.range()]);\n return fn(numVal);\n};\n\n/**\n *\n *\n * @param {*} domainValue\n * @param {*} scale\n */\nconst normalRange = (domainValue, scale) => scale(domainValue);\n\n/**\n *\n *\n * @param {*} intervals\n */\nconst strategies = {\n [`${DISCRETE}-${CONTINOUS}`]: {\n scale: LINEAR,\n domain: indexedDomain,\n range: pieceWiseRange\n },\n [`${CONTINOUS}-${CONTINOUS}`]: {\n scale: LINEAR,\n domain: normalDomain,\n range: normalRange\n },\n [`${CONTINOUS}-${DISCRETE}`]: {\n scale: THRESHOLD,\n domain: steppedDomain,\n range: discreteRange\n }\n};\n\n/**\n *\n *\n * @param {*} domainType\n * @param {*} rangeType\n * @param {*} schemeType\n * @param {*} intervals\n */\nexport const strategyGetter = (domainType, rangeType) =>\n strategies[`${domainType}-${rangeType}`];\n","export const PROPS = {\n config: {},\n domain: {\n sanitization: (context, value) => {\n context.scale().domain(value);\n return value;\n }\n },\n range: {},\n scale: {},\n uniqueValues: {}\n};\n","/**\n * @module Axis\n * This file declares a class that is used to render an axis to add meaning to\n * plots.\n */\nimport { getUniqueId, generateGetterSetters } from 'muze-utils';\nimport { createScale } from '../scale-creator';\nimport { DEFAULT_CONFIG } from './defaults';\nimport { SIZE, CONTINOUS, DISCRETE } from '../enums/constants';\nimport { strategyGetter } from './size-strategy';\nimport { PROPS } from './props';\n\n/**\n* This class is used to instantiate a SimpleAxis.\n* @class SimpleAxis\n*/\nexport default class SizeAxis {\n\n /**\n * Creates an instance of SimpleAxis.\n * @param {Object} config input parameters.\n * @memberof SizeAxis\n */\n constructor (config) {\n generateGetterSetters(this, PROPS);\n\n this._id = getUniqueId();\n this._config = Object.assign({}, this.constructor.defaultConfig(), config);\n // @todo: Will use configuration override using scale decorator\n this._domainType = this._config.type === 'linear' ? CONTINOUS : DISCRETE;\n this._rangeType = CONTINOUS;\n\n this._sizeStrategy = this.setStrategy(this._domainType, this._rangeType);\n this._scale = this.createScale(this._sizeStrategy);\n this._range = this._config.range;\n\n this.updateDomain(config.domain);\n }\n\n /**\n *\n *\n * @param {*} domainType\n * @param {*} rangeType\n * @param {*} schemeType\n * @returns\n * @memberof ColorAxis\n */\n setStrategy (domainType, rangeType) {\n return strategyGetter(domainType, rangeType);\n }\n\n /**\n *\n *\n * @returns\n * @memberof SizeAxis\n */\n createScale (strategy) {\n const {\n range\n } = this.config();\n return createScale({\n type: strategy.scale,\n range\n });\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof ColorAxis\n */\n static defaultConfig () {\n return DEFAULT_CONFIG;\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof ColorAxis\n */\n static type () {\n return SIZE;\n }\n\n /**\n *\n *\n * @param {*} domainVal\n * @returns\n * @memberof SizeAxis\n */\n getSize (domainVal = 0) {\n let sizeVal = 1;\n const {\n value\n } = this.config();\n const scale = this.scale();\n const domain = this.domain() || [1, 1];\n\n if (!scale || domain[0] === domain[1]) {\n sizeVal = value;\n } else {\n return this._sizeStrategy.range(domainVal, scale, this.domain(), this.uniqueValues());\n }\n return sizeVal;\n }\n\n /**\n * This method is used to assign a domain to the axis.\n *\n * @param {Array} domain the domain of the scale\n * @memberof SizeAxis\n */\n updateDomain (domain) {\n if (domain) {\n const domainFn = this._sizeStrategy.domain;\n\n const domainInfo = domainFn(domain, this.config().intervals);\n\n this.domain(domainInfo.domain);\n this.uniqueValues(domainInfo.uniqueVals);\n\n this.scale().domain(domainInfo.scaleDomain || this.domain());\n }\n return this;\n }\n\n /**\n * This method returns an object that can be used to\n * reconstruct this instance.\n *\n * @return {Object} the serializable props of axis\n * @memberof ShapeAxis\n */\n serialize () {\n return {\n type: this.constructor.type(),\n scale: this.scale(),\n domain: this.domain(),\n range: this.range(),\n config: this.config()\n };\n }\n\n /**\n * Returns the id of the axis.\n * @return {string} Unique identifier of the axis.\n */\n id () {\n return this._id;\n }\n}\n","export const DEFAULT_CONFIG = {\n generator: null,\n value: 'circle',\n range: ['circle', 'diamond', 'star', 'cross', 'square', 'wye', 'triangle']\n};\n","export const PROPS = {\n config: {},\n domain: {},\n scale: {},\n uniqueValues: {},\n generator: {}\n};\n\n","/**\n * @module Axis\n * This file declares a class that is used to render an axis to add meaning to\n * plots.\n */\nimport { getUniqueId, getSymbol, generateGetterSetters, mergeRecursive } from 'muze-utils';\nimport { createScale } from '../scale-creator';\nimport { DEFAULT_CONFIG } from './defaults';\nimport { SHAPE } from '../enums/constants';\nimport { shapeGenerator } from './helper';\nimport { PROPS } from './props';\n\n/**\n* This class is used to instantiate a SimpleAxis.\n* @class SimpleAxis\n*/\nexport default class ShapeAxis {\n /**\n * Creates an instance of SimpleAxis.\n * @param {Object} params input parameters.\n * @param {Object | undefined} params.range Type of color scheme.\n * @memberof ShapeAxis\n */\n constructor (config) {\n generateGetterSetters(this, PROPS);\n\n this._id = getUniqueId();\n this._config = Object.assign({}, this.constructor.defaultConfig());\n this._config = mergeRecursive(this._config, config);\n\n this._scale = createScale({\n type: 'ordinal',\n range: this._config.range\n });\n this.updateDomain(config.domain);\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof ColorAxis\n */\n static defaultConfig () {\n return DEFAULT_CONFIG;\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof ColorAxis\n */\n static type () {\n return SHAPE;\n }\n\n /**\n *\n *\n * @param {*} value\n * @returns\n * @memberof ShapeAxis\n */\n getShape (value) {\n if (!this.scale() || !this.domain() || !value) {\n return this.config().value;\n }\n\n if (this._generatedShapes) {\n return this._generatedShapes[value];\n }\n\n const shapeType = this.scale()(value);\n if (shapeType === 'string') {\n return getSymbol(shapeType);\n }\n\n return shapeType;\n }\n\n /**\n * This method is used to assign a domain to the axis.\n *\n * @param {Array} domain the domain of the scale\n * @memberof ShapeAxis\n */\n updateDomain (domain = []) {\n if (domain.length) {\n this.uniqueValues(domain);\n this.domain(domain);\n this.scale().domain(domain);\n\n if (this.config().generator) {\n this._generatedShapes = shapeGenerator(domain, this.config().generator);\n }\n }\n return this;\n }\n\n /**\n * This method returns an object that can be used to\n * reconstruct this instance.\n *\n * @return {Object} the serializable props of axis\n * @memberof ShapeAxis\n */\n serialize () {\n return {\n type: this.constructor.type(),\n scale: this.scale(),\n domain: this.domain(),\n range: this.config().range,\n config: this.config()\n };\n }\n\n /**\n * Returns the id of the axis.\n * @return {string} Unique identifier of the axis.\n */\n id () {\n return this._id;\n }\n}\n","/**\n *\n *\n * @param {*} domain\n * @param {*} generatorFn\n * @returns\n */\nexport const shapeGenerator = (domain, generatorFn) => {\n const generatedShapes = {};\n domain.forEach((value) => {\n generatedShapes[value] = generatorFn(value);\n });\n return generatedShapes;\n};\n","import * as ScaleType from './enums/scale-type';\n\nconst DATA_TYPES = {\n DIMENSION: 'dimension',\n CATEGORICAL: 'categorical',\n MEASURE: 'measure',\n DATETIME: 'temporal'\n};\n\n/**\n * Map of DataModel types to associated field types.\n */\nexport const dataTypeScaleMap = {\n [DATA_TYPES.DIMENSION]: ScaleType.BAND,\n [DATA_TYPES.MEASURE]: ScaleType.LINEAR,\n [DATA_TYPES.DATETIME]: ScaleType.TIME\n};\n\n","import { nestCollection } from 'muze-utils';\n\n/**\n * Create multiple datasets from a single dataset by grouping the data using\n * a dimensional field.\n * @param {Array} schema Name and type of fields are stored in schema\n * @param {Array} data Data array\n * @param {Object} config Configuration object\n * @return {Array} Grouped data array\n */\nexport default (schema, data, config) => {\n const groupBy = config.groupBy instanceof Array ? config.groupBy : [config.groupBy];\n const groupByIndices = groupBy.map(fieldName => schema.findIndex(d => d.name === fieldName));\n\n if (groupByIndices.find(d => d === -1) !== undefined) {\n throw new Error(`Groupby field ${groupBy} not found in schema`);\n }\n\n return nestCollection({\n keys: groupByIndices,\n data\n });\n};\n","/**\n * @module Transform\n * This file exports a function that is used to implement\n * the identity transform\n */\n /* eslint no-unused-vars: 0 */\n /**\n * This function accepts data and returns the data unchanged.\n * @param {Object} schema The schema.\n * @param {Array} data The data array.\n * @param {Object} config The config object.\n * @return {Array} The unchanged data.\n */\n function identityTransform (schema, data, config) {\n return data;\n }\n\n export default identityTransform;\n","/**\n * @module Transform\n * This file exports the transform factory.\n */\nimport * as TransformType from '../enums/transform-type';\nimport identity from '../identity-transform';\nimport group from '../group-transform';\nimport stack from '../stack-transform';\n\n/* istanbul ignore next */\nconst transformMap = {\n [TransformType.IDENTITY]: identity,\n [TransformType.GROUP]: group,\n [TransformType.STACK]: stack\n};\n\n/**\n * This function is used to retirn a transform associated\n * with the given type.\n *\n * @param {string} type The type of the transform.\n * @return {Function} The transform function.\n */\nfunction transformFactory (type) {\n const transform = transformMap[type];\n if (typeof transform !== 'function') {\n throw new Error('Invalid transform type supplied.');\n }\n return transform;\n}\n\nexport default transformFactory;\n","/**\n * @module Transform\n * This module exports constants that are used to reference transforms in\n * a consistent manner throughout the project.\n */\n/* eslint one-var: 0 */\n export const IDENTITY = 'identity';\n export const GROUP = 'group';\n export const STACK = 'stack';\n export const FRACTURE = 'fracture';\n","import { stack } from 'muze-utils';\n\nimport group from '../group-transform';\n/*\n Normalize the data to a form which can be given to d3 stack for stacking the data\n ['Product', 'Sales', 'Region'],\n 0 ['A', 2000, 'North'],\n 1 ['A', 3000, 'South'],\n 2 ['B', 3000, 'South'],\n 3 ['B', 2000, 'North'],\n 4 ['C', 3000, 'South'],\n 5 ['C', 2000, 'North']\n |\n |\n ['Product', 'North', 'South'],\n ['A', 2000, 3000],\n ['B', 2000, 3000],\n ['C', 2000, 3000]\n*/\n// eslint-disable-next-line require-jsdoc\nconst normalizeData = (data, schema, valueField, uniqueField, groupBy) => {\n const groupedData = group(schema, data, {\n groupBy: uniqueField\n });\n const uniqueFieldIndex = schema.findIndex(d => d.name === uniqueField);\n const valueFieldIndex = schema.findIndex(d => d.name === valueField);\n const seriesKeyIndex = schema.findIndex(d => d.name === groupBy);\n const seriesKeys = data.map(d => d[seriesKeyIndex]).filter((item, pos, arr) => arr.indexOf(item) === pos).sort();\n const fieldNames = schema.reduce((acc, obj, i) => {\n acc[i] = obj.name;\n return acc;\n }, {});\n const dataArr = groupedData.map((arr) => {\n const tuples = {};\n const rowObj = arr.values.reduce((acc, row) => {\n acc = row.reduce((obj, value, i) => {\n if (i === seriesKeyIndex) {\n obj[value] = row[valueFieldIndex];\n tuples[value] = row;\n } else if (i !== valueFieldIndex) {\n obj[fieldNames[i]] = value;\n }\n return obj;\n }, acc);\n return acc;\n }, {});\n rowObj._tuple = tuples;\n // Set missing values field to zero value\n seriesKeys.forEach((seriesKey) => {\n if (rowObj[seriesKey] === undefined) {\n rowObj[seriesKey] = 0;\n const newArr = new Array(arr.values[0].length);\n newArr[uniqueFieldIndex] = arr.key;\n newArr[seriesKeyIndex] = seriesKey;\n rowObj._tuple[seriesKey] = newArr;\n }\n });\n return rowObj;\n });\n\n return {\n data: dataArr,\n keys: seriesKeys\n };\n};\n/**\n * Generate a stacked representation of data\n * @param {Array} schema schema Array\n * @param {Array} data data array\n * @param {Object} config Configuration object\n * @return {Array} stacked data\n */\nexport default (schema, data, config) => {\n const uniqueField = config.uniqueField;\n const valueField = config.value;\n const groupBy = config.groupBy;\n const sort = config.sort || 'descending';\n const normalizedData = normalizeData(data, schema, valueField, uniqueField, groupBy);\n const keys = normalizedData.keys;\n const map = {};\n const orderBy = config.orderBy;\n const orderIndex = schema.findIndex(d => d.name === orderBy);\n const groupByIndex = schema.findIndex(d => d.name === groupBy);\n if (orderIndex !== -1) {\n keys.forEach((key) => {\n const name = data.find(d => d[groupByIndex] === key);\n map[key] = name[orderIndex];\n });\n normalizedData.keys.sort((a, b) => map[a].localeCompare(map[b]));\n }\n\n const stackData = stack({\n keys: normalizedData.keys,\n offset: config.offset || 'diverging',\n order: sort,\n data: normalizedData.data\n });\n stackData.forEach((seriesData) => {\n seriesData.forEach((dataObj) => {\n dataObj.data = dataObj.data._tuple[seriesData.key];\n });\n });\n return stackData;\n};\n\n","import {\n FieldType,\n getDomainFromData,\n setStyles,\n easeFns,\n selectElement,\n DimensionSubtype\n} from 'muze-utils';\nimport { ScaleType } from '@chartshq/muze-axis';\nimport { transformFactory } from '@chartshq/transform';\nimport { IDENTITY, STACK, GROUP, COLOR, SHAPE, SIZE, ENCODING } from '../enums/constants';\n\nconst BAND = ScaleType.BAND;\n\nexport const getLayerColor = ({ datum, index }, { colorEncoding, colorAxis, colorFieldIndex }) => {\n let rawColor = '';\n let color = '';\n if (colorEncoding && colorEncoding.value instanceof Function) {\n color = colorEncoding.value(datum, index);\n rawColor = colorEncoding.value(datum, index);\n } else {\n rawColor = colorAxis.getRawColor(datum._data[colorFieldIndex]);\n color = colorAxis.getHslString(rawColor);\n }\n return { color, rawColor };\n};\n\nconst transfromColor = (colorAxis, datum, styleType, intensity) => {\n datum.meta.stateColor[styleType] = datum.meta.stateColor[styleType] || datum.meta.originalColor;\n const fillColorInfo = colorAxis.transformColor(datum.meta.stateColor[styleType], intensity);\n datum.meta.stateColor[styleType] = fillColorInfo.hsla;\n\n return fillColorInfo;\n};\n\nexport const applyInteractionStyle = (context, selectionSet, interactionStyles, config) => {\n const elements = context.getPlotElementsFromSet(selectionSet);\n const axes = context.axes();\n const colorAxis = axes.color;\n const apply = config.apply;\n const interactionType = config.interactionType;\n interactionStyles.forEach((style) => {\n const styleType = style.type;\n elements.style(styleType, ((d) => {\n const { colorTransform, stateColor, originalColor } = d.meta;\n colorTransform[interactionType] = colorTransform[interactionType] || {};\n if (apply && !colorTransform[interactionType][styleType]) {\n // fade selections\n colorTransform[interactionType][styleType] = style.intensity;\n const color = transfromColor(colorAxis, d, styleType, style.intensity).color;\n return color;\n }\n if (!apply && colorTransform[interactionType][styleType]) {\n // unfade selections\n colorTransform[interactionType][styleType] = null;\n return transfromColor(colorAxis, d, styleType, style.intensity.map(e => -e)).color;\n }\n const [h, s, l, a] = stateColor[styleType] ? stateColor[styleType] : originalColor;\n return `hsla(${h * 360},${s * 100}%,${l * 100}%, ${a || 1})`;\n }));\n });\n};\n\n/**\n *\n *\n * @param {*} selectionSet\n * @param {*} className\n * @param {*} hasFaded\n */\nexport const fadeUnfadeSelection = (context, selectionSet, hasFaded, interaction) => {\n const interactionConfig = { interaction, apply: hasFaded };\n applyInteractionStyle(context, selectionSet, 'fade', interactionConfig);\n};\n\n/**\n *\n *\n * @param {*} selectionSet\n * @param {*} className\n * @param {*} hasFaded\n */\nexport const focusUnfocusSelection = (context, selectionSet, isFocussed, interaction) => {\n const interactionConfig = { interaction, apply: isFocussed };\n applyInteractionStyle(context, selectionSet, 'focus', interactionConfig);\n};\n\n/**\n *\n *\n * @param {*} axes\n * @returns\n */\nexport const getAxesScales = (axes) => {\n const [xAxis, yAxis] = [ENCODING.X, ENCODING.Y].map(e => axes[e]);\n const [xScale, yScale] = [xAxis, yAxis].map(e => e && e.scale());\n return {\n xAxis,\n yAxis,\n xScale,\n yScale\n };\n};\n\n/**\n *\n *\n * @param {*} encoding\n * @param {*} fieldsConfig\n * @returns\n */\nexport const getEncodingFieldInf = (encoding, fieldsConfig) => {\n const [xField, yField, x0Field, y0Field, colorField, shapeField, sizeField] =\n [ENCODING.X, ENCODING.Y, ENCODING.X0, ENCODING.Y0, COLOR, SHAPE, SIZE].map(e => encoding[e] &&\n encoding[e].field);\n\n const [xFieldType, yFieldType] = [xField, yField, x0Field, y0Field].map(e => fieldsConfig[e] &&\n fieldsConfig[e].def.type);\n\n const [xFieldSubType, yFieldSubType] = [xField, yField].map(e => fieldsConfig[e] && (fieldsConfig[e].def.subtype ||\n fieldsConfig[e].def.type));\n\n const [xFieldIndex, yFieldIndex, x0FieldIndex, y0FieldIndex] = [xField, yField, x0Field, y0Field]\n .map(e => fieldsConfig[e] && fieldsConfig[e].index);\n\n return {\n xField,\n yField,\n colorField,\n shapeField,\n sizeField,\n x0Field,\n y0Field,\n xFieldType,\n yFieldType,\n xFieldSubType,\n yFieldSubType,\n xFieldIndex,\n yFieldIndex,\n x0FieldIndex,\n y0FieldIndex\n };\n};\n\n/**\n *\n *\n * @param {*} layerConfig\n * @param {*} fieldsConfig\n * @returns\n */\nexport const getValidTransform = (layerConfig, fieldsConfig, encodingFieldInf) => {\n let transformType;\n const {\n transform\n } = layerConfig;\n const {\n xField,\n yField,\n xFieldType,\n yFieldType\n } = encodingFieldInf;\n const groupByField = transform.groupBy;\n const groupByFieldMeasure = fieldsConfig[groupByField] && fieldsConfig[groupByField].def.type === FieldType.MEASURE;\n transformType = transform.type;\n if (!xField || !yField || groupByFieldMeasure || !groupByField || xFieldType === FieldType.DIMENSION &&\n yFieldType === FieldType.DIMENSION) {\n transformType = IDENTITY;\n }\n return transformType;\n};\n\n/**\n *\n *\n * @param {*} dataModel\n * @param {*} config\n * @param {*} transformType\n * @returns\n */\nexport const transformData = (dataModel, config, transformType, encodingFieldInf) => {\n const data = dataModel.getData({ withUid: true });\n const schema = data.schema;\n const transform = config.transform;\n const {\n xField,\n yField,\n xFieldType,\n yFieldType\n } = encodingFieldInf;\n const uniqueField = xFieldType === FieldType.MEASURE ? yField : xField;\n\n return transformFactory(transformType)(schema, data.data, {\n groupBy: transform.groupBy,\n uniqueField,\n sort: transform.sort || 'none',\n offset: transform.offset,\n orderBy: transform.orderBy,\n value: yFieldType === FieldType.MEASURE ? yField : xField\n }, data.uids);\n};\n\nexport const getIndividualClassName = (d, i, data, context) => {\n const className = context.config().individualClassName;\n let classNameStr = '';\n if (className instanceof Function) {\n classNameStr = className(d, i, data, context);\n }\n return classNameStr;\n};\n\n/*\n * This method resolves the x, y, x0 and y0 values from the transformed data.\n * It also checks the type of transformed data for example, if it is a stacked data\n * then it fetches the y and y0 values from the stacked data.\n * @param {Array.} transformedData transformed data\n * @param {Object} fieldsConfig field definitions\n * @param {string} transformType type of transformed data - stack, group or identity.\n * @return {Array.} Normalized data\n*/\nexport const getNormalizedData = (transformedData, fieldsConfig, encodingFieldInf, transformType) => {\n const transformedDataArr = transformType === IDENTITY ? [transformedData] : transformedData;\n const {\n xFieldType,\n xFieldIndex,\n yFieldIndex,\n x0FieldIndex,\n y0FieldIndex\n } = encodingFieldInf;\n const fieldsLen = Object.keys(fieldsConfig).length;\n /**\n * Returns normalized data from transformed data. It recursively traverses through\n * the transformed data if there it is nested.\n */\n return transformedDataArr.map((data) => {\n const values = transformType === GROUP ? data.values : data;\n return values.map((d) => {\n let pointObj = {};\n let tuple;\n if (transformType === STACK) {\n tuple = d.data || [];\n let y;\n let y0;\n let x;\n let x0;\n if (d[1] >= d[0]) {\n y = x0 = d[1];\n x = y0 = d[0];\n } else {\n y = x0 = d[0];\n x = y0 = d[1];\n }\n\n pointObj = xFieldType === FieldType.MEASURE ? {\n x,\n x0,\n y: tuple[yFieldIndex],\n y0: tuple[yFieldIndex]\n } : {\n x: tuple[xFieldIndex],\n x0: tuple[xFieldIndex],\n y,\n y0\n };\n pointObj._data = tuple;\n pointObj._id = tuple[fieldsLen];\n } else {\n pointObj = {\n x: d[xFieldIndex],\n y: d[yFieldIndex],\n x0: d[x0FieldIndex],\n y0: d[y0FieldIndex]\n };\n pointObj._data = d;\n pointObj._id = d[fieldsLen];\n }\n return pointObj;\n });\n }).filter(d => d.length);\n};\n\nexport const calculateDomainFromData = (data, encodingFieldInf, transformType) => {\n const {\n xFieldSubType,\n yFieldSubType,\n xField,\n yField,\n x0Field,\n y0Field\n } = encodingFieldInf;\n const domains = {};\n const yEnc = ENCODING.Y;\n const xEnc = ENCODING.X;\n if (xField) {\n domains.x = getDomainFromData(data, x0Field || transformType === STACK ? [xEnc, ENCODING.X0] : [xEnc, xEnc],\n xFieldSubType);\n }\n if (yField) {\n domains.y = getDomainFromData(data, y0Field || transformType === STACK ? [ENCODING.Y0, ENCODING.Y] :\n [yEnc, yEnc], yFieldSubType);\n }\n\n return domains;\n};\n\nexport const attachDataToVoronoi = (voronoi, points) => {\n voronoi.data([].concat(...points).filter(d => d._id !== undefined).map((d) => {\n const point = d.update;\n return {\n x: point.x,\n y: point.y,\n data: d\n };\n }));\n};\n\n/**\n *\n *\n * @param {*} target\n * @param {*} styles\n * @param {*} remove\n */\nexport const updateStyle = (target, styles, remove) => {\n for (const key in styles) {\n if ({}.hasOwnProperty.call(styles, key)) {\n target.style(key, remove ? null : styles[key]);\n }\n }\n};\n\n/**\n *\n *\n * @param {*} mount\n * @param {*} context\n */\nexport const animateGroup = (mount, context) => {\n let groupTransition;\n let update;\n const { transition, groupAnimateStyle } = context;\n const { duration, effect, disabled } = transition;\n if (groupAnimateStyle) {\n setStyles(mount.node(), groupAnimateStyle.enter);\n update = groupAnimateStyle.update;\n if (!disabled) {\n groupTransition = mount.transition()\n .ease(easeFns[effect])\n .duration(duration)\n .on('end', function () {\n updateStyle(selectElement(this), update, true);\n });\n } else {\n groupTransition = mount;\n }\n updateStyle(groupTransition, update);\n }\n};\n\nexport const positionPoints = (context, points) => {\n const positioner = context.encodingTransform();\n if (positioner) {\n return positioner(points, context, { smartLabel: context._dependencies.smartLabel });\n }\n return points;\n};\n\n/**\n * Gets the width of each group. It gets the width from axis if it is available for\n * example when the scale is nominal else it calculates the width from the\n * range of the axis and number of data points.\n *\n * @param {SimpleAxis} axis instance of axis\n * @param {number} minDiff Minimum difference between data points\n * @return {number} width of each bar\n * @private\n*/\nexport const getGroupSpan = (axis, minDiff) => {\n let groupSpan;\n const width = axis.getUnitWidth();\n const scale = axis.scale();\n const range = scale.range();\n const domain = scale.domain();\n !width ? groupSpan = (Math.abs(range[1] - range[0]) / Math.abs(domain[1] - domain[0])) * minDiff :\n (groupSpan = width);\n\n return groupSpan;\n};\n\nexport const getPlotMeasurement = (context, dimensionalValues) => {\n const fieldInfo = context.encodingFieldsInf();\n const axes = context.axes();\n const transformType = context.transformType();\n const config = context.config();\n const bandScale = context._bandScale;\n\n return ['x', 'y'].map((type) => {\n let span = 0;\n let groupSpan = 0;\n let padding = 0;\n let offsetValues = [];\n if (fieldInfo[`${type}FieldType`] === FieldType.DIMENSION) {\n let actualGroupWidth;\n const isTemporal = fieldInfo[`${type}FieldSubType`] === DimensionSubtype.TEMPORAL;\n const timeDiff = isTemporal ? context.dataProps().timeDiffs[type] : 0;\n const axis = axes[type];\n const pad = config[`pad${type.toUpperCase()}`];\n const innerPadding = config.innerPadding;\n const keys = dimensionalValues;\n const scale = axis.scale();\n groupSpan = getGroupSpan(axis, timeDiff);\n const isAxisBandScale = axis.constructor.type() === BAND;\n const axisPadding = axis.config().padding;\n // If it is a grouped bar then the width of each bar in a grouping is retrieved from\n // a band scale. The band scale will have range equal to width of one group of bars and\n // the domain is set to series keys.\n if (transformType === 'group') {\n const groupPadding = isAxisBandScale ? 0 : axisPadding * groupSpan / 2;\n bandScale.range([groupPadding, groupSpan - groupPadding]).domain(keys).paddingInner(innerPadding);\n span = bandScale.bandwidth();\n actualGroupWidth = groupSpan - (isAxisBandScale ? 0 : axisPadding * groupSpan);\n offsetValues = keys.map(key => bandScale(key) - (isAxisBandScale ? 0 : (groupSpan / 2)));\n } else if (pad !== undefined) {\n let offset;\n if (isAxisBandScale) {\n const step = scale.step();\n offset = scale.padding() * step;\n span = scale.bandwidth() + offset;\n } else {\n span = groupSpan;\n }\n offsetValues = keys.map(() => (isAxisBandScale ? -(offset / 2) : -(span / 2)));\n } else {\n padding = isAxisBandScale ? 0 : axisPadding * groupSpan;\n span = groupSpan - padding;\n actualGroupWidth = span;\n offsetValues = keys.map(() => (isAxisBandScale ? 0 : -(span / 2)));\n }\n\n groupSpan = actualGroupWidth;\n padding = isAxisBandScale ? axisPadding * axis.scale().step() : axisPadding * groupSpan;\n }\n\n return {\n span,\n offsetValues,\n groupSpan,\n padding\n };\n });\n};\n","import { nextFrame } from 'muze-utils';\nimport { getValidTransform, getEncodingFieldInf } from '../helpers';\nimport * as PROPS from '../enums/props';\n\nexport const listenerMap = context => [\n {\n props: [PROPS.TRANSFORMED_DATA],\n listener: fetch => fetch(PROPS.DATA, PROPS.CONFIG, (dataModel, config) => {\n const dataModelValue = dataModel.value;\n const configValue = config.value;\n const encodingValue = configValue && configValue.encoding;\n if (dataModelValue && encodingValue) {\n const fieldsConfig = dataModelValue.getFieldsConfig();\n const encodingFieldsInf = getEncodingFieldInf(encodingValue, fieldsConfig);\n context.encodingFieldsInf(encodingFieldsInf);\n context.transformType(getValidTransform(configValue, fieldsConfig, encodingFieldsInf));\n return context.getTransformedData(dataModelValue, configValue, context.transformType(),\n encodingFieldsInf);\n }\n return null;\n }),\n type: 'computed'\n },\n {\n props: [PROPS.NORMALIZED_DATA],\n listener: fetch => fetch(PROPS.TRANSFORMED_DATA, (transformedData) => {\n const transformedDataValue = transformedData.value;\n if (transformedDataValue) {\n const fieldsConfig = context.data().getFieldsConfig();\n return context.getNormalizedData(transformedDataValue, fieldsConfig);\n }\n return null;\n }),\n type: 'computed'\n },\n {\n props: [PROPS.DOMAIN],\n listener: fetch => fetch(PROPS.NORMALIZED_DATA, (normalizedData) => {\n const normalizedDataValue = normalizedData.value;\n if (normalizedDataValue) {\n return context.calculateDomainFromData(normalizedDataValue, context.encodingFieldsInf(),\n context.data().getFieldsConfig());\n }\n return null;\n }),\n type: 'computed'\n },\n {\n props: [PROPS.DATA],\n listener: (data) => {\n if (data[1]) {\n nextFrame(() => {\n context.store().commit(PROPS.DATA_UPDATED, true);\n });\n }\n },\n type: 'registerImmediateListener'\n },\n {\n props: [PROPS.MOUNT, PROPS.DATA_UPDATED],\n listener: (mount, dataUpdated) => {\n if (mount[1] && dataUpdated[1]) {\n context.render(mount[1]);\n context.dependencies().throwback.commit('onlayerdraw', true);\n }\n },\n type: 'registerChangeListener'\n }\n];\n\n","import { mergeRecursive } from 'muze-utils';\nimport * as PROPS from '../enums/props';\n\nexport const defaultOptions = {\n [PROPS.CONFIG]: {\n value: null,\n meta: {\n sanitization: (config, oldConfig, context) => {\n const constructor = context.constructor;\n const newConf = mergeRecursive({}, constructor.defaultConfig());\n return constructor.defaultPolicy(newConf, config);\n }\n }\n },\n [PROPS.DATA]: {\n value: null,\n meta: {\n preset: (data, context) => {\n if (context._cacheEnabled) {\n context._cachedData.push(data);\n } else {\n context._cachedData = [data];\n }\n }\n }\n },\n [PROPS.MOUNT]: {\n value: null\n },\n [PROPS.AXES]: {\n value: null\n },\n [PROPS.MEASUREMENT]: {\n value: null\n }\n};\n","import {\n getUniqueId,\n mergeRecursive,\n Store,\n FieldType,\n selectElement,\n ReservedFields,\n registerListeners,\n transactor,\n DataModel,\n clone\n} from 'muze-utils';\nimport { SimpleLayer } from '../simple-layer';\nimport * as PROPS from '../enums/props';\nimport {\n transformData,\n calculateDomainFromData,\n getNormalizedData,\n applyInteractionStyle\n} from '../helpers';\nimport { listenerMap } from './listener-map';\nimport { defaultOptions } from './default-options';\n\n/**\n * An abstract class which gives defination of common layer functionality like\n * - transfromation data for various {@link mode}\n * - calculating data domain\n * - linking dependent layers\n * - merging policy of configuration\n * - interaction sideffect helpers\n * - retrieving dom elements from data using id\n * - retrieving the physical dimensions of marks\n * - disposing layer\n *\n * Every layer has to extend base layer and give concrete definition.\n * This layer does not have any default visual. A new layer has to define the logic of `render` for rendering the\n * visuals\n *\n * @public\n * @class\n * @namespace Muze\n */\nexport default class BaseLayer extends SimpleLayer {\n\n /**\n * Creates a layer using a configuration and data.\n *\n * @public\n *\n * @param {DataModel} data Instance of DataModel to be used. This DataModel instance serves as the data for a layer.\n * @param {Object} axes Axes instances to be used for rendering the layer. Axes are used for mapping data from\n * value to px.\n * @param {SimpleAxis} axes.x X axis of the layer. Based on the type of variable it gets instance of BandAxis,\n * TimeAxis, ContinuousAxis\n * @param {SimpleAxis} axes.y X axis of the layer. Based on the type of variable it gets instance of BandAxis,\n * TimeAxis, ContinuousAxis\n * @param {ColorAxis} axes.color Axis for coloring a layer using color interpolators\n * @param {ShapeAxis} axes.shape Axis for providing a shape\n * @param {SizeAxis} axes.shape Axis for determining size of a mark using size interpolator\n * @param {LayerConfig} config Configuration of the layer\n * @param {Object} dependencies Dependencies of the layer\n * @param {SmartLabel} smartLabel Smartlabel singleton instance\n */\n constructor (data, axes, config, dependencies) {\n super();\n this.store(new Store({\n DATA: null,\n [PROPS.DATA_UPDATED]: null\n }));\n transactor(this, defaultOptions, this.store().model);\n this.data(data);\n this.axes(axes);\n this.config(config);\n this.alias(this.constructor.formalName() + getUniqueId());\n this.dependencies(dependencies);\n this._points = [];\n this._cachedData = [];\n this._id = getUniqueId();\n this._measurement = {};\n registerListeners(this, listenerMap);\n }\n\n /**\n * Creates a layer instance\n * @return {BaseLayer} Instance of a layer\n */\n static create (...params) {\n return new this(...params);\n }\n\n /**\n * Default configuration of the layer. This configuration gets merged to the user passed configuration using a\n * plolicy. Base layer only returns part of configuraion, any layer overridding base layer should return its own\n * configuration.\n *\n * @public\n * @static\n *\n * @return {Object} Default configuration\n */\n static defaultConfig () {\n return {\n transform: {\n type: 'identity'\n }\n };\n }\n\n /**\n * Policy defines how user config gets merged to default config. The default policy here does a deep copy\n * operation.\n * Any policy which does more than deep copying should define the policy as a static member.\n *\n * @static\n * @public\n *\n * @param {LayerConfig} conf Configuration with which the user config will be merged\n * @param {LayerConfig} userConf Configuration given by the user\n *\n * @return {LayerConfig} Merged layer configuration\n */\n static defaultPolicy (conf, userConf) {\n return mergeRecursive(conf, userConf);\n }\n\n /**\n * Determines a name for a layer. This name of the layer is used in the input data to refer to this layer.\n * ```\n * .layer([\n * mark: 'bar',\n * encoding: { ... }\n * ])\n * ```\n *\n * @static\n * @public\n *\n * @returns {string} name of layer\n */\n static formalName () {\n return 'base';\n }\n\n store (...store) {\n if (store.length) {\n this._store = store[0];\n return this;\n }\n return this._store;\n }\n\n encodingFieldsInf (...fieldsInf) {\n if (fieldsInf.length) {\n this._encodingFieldsInf = fieldsInf[0];\n return this;\n }\n return this._encodingFieldsInf;\n }\n\n encodingTransform (...encodingTransform) {\n if (encodingTransform.length) {\n this._encodingTransform = encodingTransform[0];\n return this;\n }\n return this._encodingTransform;\n }\n\n /**\n * Provides a alias for a layer. Like it's possible to have same layer (like bar) multiple times, but among multiple\n * layers of same type if one layer has to be referred, alias is used. If no alias is given then `formalName` is set\n * as the alias name.\n *\n * @public\n *\n * If used as setter\n * @param {string} alias Name of the alias\n * @return {BaseLayer} Instance of current base layer\n *\n * If used as getter\n * @return {string} Alias of the current layer\n */\n alias (...params) {\n if (params.length) {\n this._alias = params[0];\n return this;\n }\n return this._alias || this.constructor.formalName();\n }\n\n dependencies (...params) {\n if (params.length) {\n this._dependencies = params[0];\n return this;\n }\n return this._dependencies;\n }\n\n enableCaching () {\n this._cacheEnabled = true;\n return this;\n }\n\n clearCaching () {\n this._cacheEnabled = false;\n return this.data(this._cachedData[0]);\n }\n\n /**\n * Serialize the schema. Merge config is used for serialization.\n *\n * @public\n *\n * @return {LayerConfig} Serialized schema\n */\n serialize () {\n return this.config();\n }\n\n /**\n * Returns the unique identifier of this layer. Id is auto generated during the creation proceess of a schema.\n *\n * @return {string} id of the layer\n */\n id () {\n return this._id;\n }\n\n /**\n * Gets the transform method from transform factory based on type of transform. It then calls the\n * transform method with the data and passes the configuration parameters of transform such as\n * groupBy, value field, etc.\n *\n * @public\n *\n * @param {DataModel} dataModel Instance of DataModel\n * @param {Object} config Configuration for transforming data\n * @return {Array.} Transformed data.\n */\n getTransformedData (dataModel, config, transformType, encodingFieldsInf) {\n return transformData(dataModel, config, transformType, encodingFieldsInf);\n }\n\n /**\n * Calculates the domain from the data.\n * It checks the type of field and calculates the domain based on that. For example, if it\n * is a quantitative or temporal field, then it calculates the min and max from the data or\n * if it is a nominal field then it gets all the values from the data of that field.\n * @param {Array} data DataArray\n * @param {Object} fieldsConfig Configuration of fields\n * @return {Array} Domain values array.\n */\n calculateDomainFromData (data) {\n let domains = {};\n const isEmpty = this.data().isEmpty();\n\n if (!isEmpty) {\n domains = calculateDomainFromData(data, this.encodingFieldsInf(), this.transformType());\n }\n return domains;\n }\n\n shouldDrawAnchors () {\n return false;\n }\n\n /**\n * Returns the domain for the axis.\n *\n * @param {string} encodingType type of encoding x, y, etc.\n * @return {Object} Axis domains\n */\n getDataDomain (encodingType) {\n const domains = this.store().get(PROPS.DOMAIN);\n return encodingType !== undefined ? domains[encodingType] || [] : domains;\n }\n\n /**\n * Returns the domain for the axis.\n *\n * @param {string} encodingType type of encoding x, y, etc.\n * @return {Object} Axis domains\n */\n getNormalizedData (transformedData, fieldsConfig) {\n return getNormalizedData(transformedData, fieldsConfig, this.encodingFieldsInf(), this.transformType());\n }\n\n /**\n * Abstract method for getting nearest point\n * @return {BaseLayer} Instance of base layer\n */\n getNearestPoint () {\n return null;\n }\n\n applyInteractionStyle (interactionType, selectionSet, apply) {\n const interactionConfig = this.config().interaction || {};\n\n const interactionStyles = interactionConfig[interactionType];\n if (interactionStyles) {\n applyInteractionStyle(this, selectionSet, interactionStyles, {\n apply,\n interactionType\n });\n }\n }\n\n /**\n *\n *\n * @returns\n * @memberof BaseLayer\n */\n transformType (...transformType) {\n if (transformType.length) {\n this._transformType = transformType[0];\n return this;\n }\n return this._transformType;\n }\n\n /**\n * Renders the layer\n * @return {BaseLayer} Instance of the layer.\n */\n render () {\n return this;\n }\n\n /**\n *\n *\n * @returns\n * @memberof BaseLayer\n */\n elemType () {\n return 'g';\n }\n\n /**\n * Disposes the entire layer\n * @return {BaseLayer} Instance of layer.\n */\n remove () {\n this.store().unsubscribeAll();\n selectElement(this.mount()).remove();\n return this;\n }\n\n /**\n * Stores point in an object with key as the categorical value or temporal value\n *\n * @param {string} key categorical value or temporal value\n * @param {Object} data Information of the data point\n * @return {BarLayer} Instance of bar layer\n */\n cachePoint (key, data) {\n if (key === null) {\n return this;\n }\n const pointMap = this._pointMap;\n !pointMap[key] && (pointMap[key] = []);\n pointMap[key].push(data);\n return this;\n }\n\n /**\n *\n *\n * @param {*} dataProps\n * @returns\n * @memberof BaseLayer\n */\n dataProps (...dataProps) {\n if (dataProps.length) {\n this._dataProps = dataProps[0];\n return this;\n }\n return this._dataProps;\n }\n\n /**\n *\n *\n * @param {*} data\n * @param {*} id\n * @returns\n * @memberof BaseLayer\n */\n getIdentifiersFromData (data) {\n const schema = this.data().getData().schema;\n const fieldsConfig = this.data().getFieldsConfig();\n const identifiers = [[], []];\n const {\n xFieldType,\n yFieldType,\n xField,\n yField\n } = this.encodingFieldsInf();\n\n const [xMeasure, yMeasure] = [xFieldType, yFieldType].map(type => type === FieldType.MEASURE);\n schema.forEach((d, i) => {\n const name = d.name;\n if (fieldsConfig[name].def.type === FieldType.DIMENSION) {\n identifiers[0].push(name);\n identifiers[1].push(data[i]);\n }\n });\n\n if (xMeasure && yMeasure) {\n const xMeasureIndex = fieldsConfig[xField].index;\n const yMeasureIndex = fieldsConfig[yField].index;\n identifiers[0].push(...[xField, yField]);\n identifiers[1].push(...[data[xMeasureIndex], data[yMeasureIndex]]);\n }\n return identifiers;\n }\n\n getPlotSpan () {\n return {\n x: 0,\n y: 0\n };\n }\n\n getPlotPadding () {\n return {\n x: 0,\n y: 0\n };\n }\n\n /**\n *\n *\n * @param {*} identifiers\n * @returns\n * @memberof BaseLayer\n */\n getPointsFromIdentifiers (identifiers, config = {}) {\n const getAllAttrs = config.getAllAttrs;\n const getBBox = config.getBBox;\n if (!this.data()) {\n return [];\n }\n let fieldNames;\n let values;\n if (identifiers instanceof DataModel) {\n const dataObj = identifiers.getData();\n fieldNames = dataObj.schema.map(d => d.name);\n values = dataObj.data;\n } else {\n fieldNames = identifiers[0];\n values = identifiers.slice(1, identifiers.length);\n }\n\n const points = this._points;\n const fieldsConfig = this.data().getFieldsConfig();\n\n const filteredPoints = [].concat(...points).filter((point) => {\n const { _data, _id } = point;\n\n return fieldNames.every((field, idx) => {\n if (field in fieldsConfig && fieldsConfig[field].def.type === FieldType.DIMENSION) {\n return values.findIndex(d => d[idx] === _data[fieldsConfig[field].index]) !== -1;\n } else if (field === ReservedFields.ROW_ID) {\n return values.findIndex(d => d[idx] === _id) !== -1;\n } return true;\n });\n });\n return getAllAttrs ? filteredPoints : filteredPoints.map((d) => {\n const obj = clone(d);\n if (getBBox) {\n const update = obj.update || obj;\n if (obj.size !== undefined) {\n const sizeVal = Math.sqrt(obj.size / Math.PI) * 2;\n update.width = sizeVal;\n update.height = sizeVal;\n update.x -= sizeVal / 2;\n update.y -= sizeVal / 2;\n } else {\n if (update.width === undefined) {\n update.width = 2;\n }\n if (update.height === undefined) {\n update.height = 2;\n }\n }\n }\n\n return obj.update || obj;\n }).sort((a, b) => a.y - b.y);\n }\n\n getTransformedDataFromIdentifiers (identifiers) {\n const { data: identifierData, schema: identifierSchema } = identifiers.getData();\n const normalizedData = this.store().get(PROPS.NORMALIZED_DATA);\n const fieldsConfig = this.data().getFieldsConfig();\n const {\n yField,\n xField,\n yFieldType,\n xFieldType\n } = this.encodingFieldsInf();\n let measureIndex;\n let enc;\n if (xFieldType === FieldType.MEASURE) {\n measureIndex = fieldsConfig[xField].index;\n enc = 'x';\n } else if (yFieldType === FieldType.MEASURE) {\n measureIndex = fieldsConfig[yField].index;\n enc = 'y';\n }\n\n const transformedData = [];\n normalizedData.forEach((dataArr) => {\n dataArr.forEach((dataObj) => {\n const tupleArr = dataObj._data;\n const exist = identifierSchema.every((obj, i) =>\n identifierData.findIndex(d => tupleArr[fieldsConfig[obj.name].index] === d[i]) !== -1);\n if (exist) {\n const transformedVal = dataObj[enc];\n const row = dataObj._data;\n const tuple = {};\n for (const key in fieldsConfig) {\n const index = fieldsConfig[key].index;\n tuple[key] = row[index];\n if (index === measureIndex) {\n tuple[key] = transformedVal;\n }\n }\n transformedData.push(tuple);\n }\n });\n });\n\n return [transformedData, this.data().getData().schema];\n }\n\n /**\n *\n *\n * @param {*} set\n * @returns\n * @memberof BaseLayer\n */\n getPlotElementsFromSet (set) {\n return selectElement(this.mount()).selectAll(this.elemType()).filter(data =>\n (data ? set.indexOf(data._id) !== -1 : false));\n }\n}\n","import {\n selectElement,\n makeElement,\n pathInterpolators,\n Symbols\n} from 'muze-utils';\nimport { updateStyle } from '../../helpers';\n\nconst line = Symbols.line;\n\n/**\n * Draws a line from the points\n * Generates a svg path string\n * @param {Object} params Contains container, points and interpolate attribute.\n */\nexport const drawLine = (context) => {\n let filteredPoints;\n const { container, points, interpolate, connectNullData, className, style, transition } = context;\n const mount = selectElement(container).attr('class', className);\n const curveInterpolatorFn = pathInterpolators[interpolate];\n const linepath = line()\n .curve(curveInterpolatorFn)\n .x(d => d.update.x)\n .y(d => d.update.y)\n .defined(d => d.update.y !== null);\n\n filteredPoints = points;\n if (connectNullData) {\n filteredPoints = points.filter(d => d.update.y !== null);\n }\n\n updateStyle(mount, style);\n let element = makeElement(mount, 'path', [1]);\n element.classed(points[0].className, true);\n if (!transition.disabled) {\n element = element.transition().duration(transition.duration);\n }\n element.attr('d', linepath(filteredPoints))\n .style('fill-opacity', 0);\n return element;\n};\n","import { CLASSPREFIX } from '../../enums/constants';\n\nexport const defaultConfig = {\n classPrefix: CLASSPREFIX,\n defClassName: 'layer-line',\n className: '',\n interpolate: 'linear',\n transform: {\n type: 'group'\n },\n interaction: {\n highlight: [{\n type: 'stroke',\n intensity: [0, 0, -15, 0]\n }],\n fade: [{\n type: 'stroke',\n intensity: [0, 0, +15, 0]\n }],\n focus: [{\n type: 'stroke',\n intensity: [0, 0, +15, 0]\n }]\n },\n nearestPointThreshold: 20,\n encoding: {\n color: {},\n x: {},\n y: {},\n strokeOpacity: {\n value: 1\n }\n },\n transition: {\n effect: 'cubic',\n duration: 1000\n },\n connectNullData: false\n};\n\n","import {\n Voronoi,\n getQualifiedClassName,\n selectElement,\n makeElement,\n FieldType,\n getObjProp\n} from 'muze-utils';\nimport { BaseLayer } from '../../base-layer';\nimport { drawLine } from './renderer';\nimport { defaultConfig } from './default-config';\nimport { ENCODING } from '../../enums/constants';\nimport * as PROPS from '../../enums/props';\nimport {\n attachDataToVoronoi,\n animateGroup,\n getLayerColor,\n positionPoints,\n getIndividualClassName\n} from '../../helpers';\n\nimport './styles.scss';\n\n/**\n * Line Layer creates a line plot.\n * Example :-\n * const config = {\n * encoding = {\n * x: {\n * field: 'date'\n * },\n * y: {\n * field: 'sales'\n * }\n * }\n * };\n * const linelayer = layerFactory.getLayer('line', [dataModel, axes, config]);\n * linelayer.render(container);\n * @class\n */\nexport default class LineLayer extends BaseLayer {\n\n /**\n *Creates an instance of LineLayer.\n * @param {*} args\n * @memberof LineLayer\n */\n constructor (...args) {\n super(...args);\n this._voronoi = new Voronoi();\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof LineLayer\n */\n static formalName () {\n return 'line';\n }\n\n /**\n *\n *\n * @returns\n * @memberof LineLayer\n */\n elemType () {\n return 'path';\n }\n\n /**\n * Default configuration of line layer\n * @return {Object} Default configuration of layer\n */\n static defaultConfig () {\n return defaultConfig;\n }\n\n /**\n *\n *\n * @static\n * @param {*} conf\n * @param {*} userConf\n * @returns\n * @memberof LineLayer\n */\n static defaultPolicy (conf, userConf) {\n const config = BaseLayer.defaultPolicy(conf, userConf);\n const encoding = config.encoding;\n const transform = config.transform;\n const colorField = encoding.color && encoding.color.field;\n\n if (colorField && !transform.groupBy) {\n transform.groupBy = colorField;\n }\n return config;\n }\n\n /**\n * Returns the draw method for line\n * @return {Function} Draw method of line layer\n */\n getDrawFn () {\n return drawLine;\n }\n\n /**\n * Applies selection styles to the elements that fall within the selection set.\n * @param {Array} selectionSet Array of tuple ids.\n * @param {Object} config Configuration for selection.\n * @return {BarLayer} Instance of bar layer.\n */\n highlightPoint () {\n return this;\n }\n\n /**\n * Removes selection styles to the elements that fall within the selection set.\n * @param {Array} selectionSet Array of tuple ids.\n * @param {Object} config Configuration for selection.\n * @return {BarLayer} Instance of bar layer.\n */\n dehighlightPoint () {\n return this;\n }\n\n focusSelection () {\n return this;\n }\n\n focusOutSelection () {\n return this;\n }\n\n fadeOutSelection () {\n return this;\n }\n\n unfadeSelection () {\n return this;\n }\n\n shouldDrawAnchors () {\n return true;\n }\n\n /**\n * Generates the x and y positions for each point\n * @param {Array} data Data Array\n * @param {Object} encoding Visual Encodings of the layer\n * @param {Object} axes Contains the axis\n * @param {number} seriesIndex index of series\n * @return {Array} Array of points\n */\n translatePoints (data, encodingFieldsInf, axes) {\n let points = [];\n const xAxis = axes.x;\n const yAxis = axes.y;\n const colorAxis = axes.color;\n const encoding = this.config().encoding;\n const { xFieldType, yFieldType } = encodingFieldsInf;\n const isXDim = xFieldType === FieldType.DIMENSION;\n const isYDim = yFieldType === FieldType.DIMENSION;\n const key = isXDim ? ENCODING.X : (isYDim ? ENCODING.Y : null);\n const colorEncoding = encoding.color;\n const colorField = colorEncoding.field;\n const fieldsConfig = this.data().getFieldsConfig();\n const colorFieldIndex = colorField && fieldsConfig[colorField].index;\n const style = {};\n const meta = {};\n\n points = data.map((d, i) => {\n const xPx = xAxis.getScaleValue(d.x) + xAxis.getUnitWidth() / 2;\n const yPx = yAxis.getScaleValue(d.y);\n const { color, rawColor } = getLayerColor({ datum: d, index: i }, {\n colorEncoding, colorAxis, colorFieldIndex });\n\n style.stroke = color;\n style['fill-opacity'] = 0;\n meta.stateColor = {};\n meta.originalColor = rawColor;\n meta.colorTransform = {};\n\n const point = {\n enter: {},\n update: {\n x: xPx,\n y: d.y === null ? null : yPx\n },\n style,\n _data: d._data,\n _id: d._id,\n rowId: d._id,\n source: d._data,\n meta\n };\n point.className = getIndividualClassName(d, i, data, this);\n this.cachePoint(d[key], point);\n return point;\n });\n points = positionPoints(this, points);\n return points;\n }\n\n /**\n * Renders the line plot\n * @param {SVGElement} container svg element\n * @return {LineLayer} instance of line layer\n */\n render (container) {\n let points;\n let seriesClassName;\n let style;\n\n const config = this.config();\n const {\n encoding,\n interpolate,\n className,\n defClassName,\n transition\n } = config;\n const store = this._store;\n const normalizedData = store.get(PROPS.NORMALIZED_DATA);\n const transformedData = store.get(PROPS.TRANSFORMED_DATA);\n const fieldsConfig = this.data().getFieldsConfig();\n const axes = this.axes();\n const keys = transformedData.map(d => d.key);\n const qualifiedClassName = getQualifiedClassName(defClassName, this.id(), config.classPrefix);\n const containerSelection = selectElement(container);\n const colorField = encoding.color.field;\n const colorFieldIndex = fieldsConfig[colorField] && fieldsConfig[colorField].index;\n\n this._points = [];\n this._pointMap = {};\n containerSelection.classed(qualifiedClassName.join(' '), true);\n containerSelection.classed(className, true);\n makeElement(container, 'g', normalizedData, null, {\n enter: (group) => {\n animateGroup(group, {\n transition,\n groupAnimateStyle: {\n enter: {\n 'stroke-opacity': 0,\n 'fill-opacity': this.getPathStyle()['fill-opacity']\n },\n update: {\n 'stroke-opacity': encoding.strokeOpacity.value\n }\n }\n });\n },\n update: (group, dataArr, i) => {\n points = this.translatePoints(dataArr, this.encodingFieldsInf(), axes, i);\n this._points.push(points);\n seriesClassName = `${qualifiedClassName[0]}-${keys[i] || i}`.toLowerCase();\n\n let color;\n const colorValFn = encoding.color.value;\n const colorVal = points.find(d => d._data[colorFieldIndex] !== null &&\n d._data[colorFieldIndex] !== undefined);\n\n if (colorValFn) {\n color = colorValFn(dataArr, i, normalizedData);\n } else {\n color = axes.color.getColor(colorVal && colorVal._data[colorFieldIndex]);\n }\n\n style = this.getPathStyle(color);\n this.getDrawFn()({\n container: group.node(),\n interpolate,\n points,\n className: seriesClassName,\n transition,\n style: style || {},\n connectNullData: config.connectNullData\n });\n }\n }, d => d[0]._data[colorFieldIndex] || d[0]._id);\n\n attachDataToVoronoi(this._voronoi, this._points);\n return this;\n }\n\n /**\n * Get the css styles need to be applied on the line path\n * @param {string} color Color value\n * @return {Object} Path styles\n */\n getPathStyle (color) {\n return {\n stroke: color,\n 'fill-opacity': '0'\n };\n }\n\n /**\n * Gets the nearest point closest to the given position\n * @param {number} x x position\n * @param {number} y y position\n * @return {Object} Nearest point information\n */\n getNearestPoint (x, y, config) {\n let searchRadius = config.searchRadius;\n const data = this.data();\n\n if (!data || (data && data.isEmpty())) {\n return null;\n }\n\n searchRadius = searchRadius !== undefined ? searchRadius : this.config().nearestPointThreshold;\n const point = this._voronoi.find(x, y, searchRadius);\n const dimensions = getObjProp(point, 'data', 'data', 'update');\n\n if (point) {\n const { _data, _id } = point.data.data;\n const identifiers = this.getIdentifiersFromData(_data, _id);\n return {\n id: identifiers,\n dimensions: [{\n x: dimensions.x,\n y: dimensions.y,\n width: 2,\n height: 2\n }],\n layerId: this.id()\n };\n }\n return null;\n }\n}\n","import {\n easeFns,\n selectElement,\n pathInterpolators,\n Symbols\n} from 'muze-utils';\n\nconst area = Symbols.area;\n/**\n * Draws a line from the points\n * Generates a svg path string\n * @param {Object} params Contains container, points and interpolate attribute.\n */\nconst /* istanbul ignore next */ drawArea = (params) => {\n let filteredPoints;\n const { container, points, style, transition, className, connectNullData, interpolate } = params;\n\n const { effect: easeEffect, duration } = transition;\n const mount = selectElement(container);\n const curveInterpolatorFn = pathInterpolators[interpolate];\n const selection = mount.selectAll('path').data([params.points]);\n const [enterAreaPath, updateAreaPath] = ['enter', 'update'].map(e => area().curve(curveInterpolatorFn)\n .x(d => d[e].x)\n .y1(d => d[e].y)\n .y0(d => d[e].y0)\n .defined(d => d[e].y !== null\n ));\n\n filteredPoints = points;\n mount.attr('class', className);\n if (connectNullData) {\n filteredPoints = points.filter(d => d.update.y !== null);\n }\n const selectionEnter = selection.enter().append('path').attr('d', enterAreaPath(filteredPoints));\n selection.merge(selectionEnter).transition().ease(easeFns[easeEffect])\n .duration(duration)\n .attr('d', updateAreaPath(filteredPoints))\n .each(function (d) {\n const element = selectElement(this);\n\n element.classed(d[0].className, true);\n Object.keys(style).forEach(key => element.style(key, style[key]));\n });\n};\n\nexport default drawArea;\n","import { FieldType } from 'muze-utils';\nimport { defaultConfig } from './default-config';\nimport { LineLayer } from '../line';\nimport drawArea from './renderer';\nimport './styles.scss';\nimport { STACK, ENCODING } from '../../enums/constants';\nimport { getAxesScales, positionPoints, getLayerColor, getIndividualClassName } from '../../helpers';\n\n/**\n * Area Layer creates a area plot.\n * @example\n * const config = {\n * encoding = {\n * x: {\n * field: 'date'\n * },\n * // Top y value\n * y: {\n * field: 'maxTemp'\n * },\n * // Base y value\n * y0: {\n * field: 'minTemp\n * }\n * }\n * };\n * const areaLayer = layerFactory.getLayer('area', [dataModel, axes, config]);\n * areaLayer.render(container);\n * @class\n */\nexport default class AreaLayer extends LineLayer {\n /** oation of line layer\n * @return {Object} Default configuration of layer\n */\n static defaultConfig () {\n return defaultConfig;\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof AreaLayer\n */\n static formalName () {\n return 'area';\n }\n\n /**\n * Calculates the domain from data. It calls its parent class's method which is line layer\n * to get the domain and overwrites the domain according to its need.\n * @return {Array} Domain values\n */\n calculateDomainFromData (data, encodingFieldsInf, fieldsConfig) {\n const domains = super.calculateDomainFromData(data, fieldsConfig);\n [ENCODING.X, ENCODING.Y].forEach((type) => {\n const { [`${type}FieldType`]: fieldType } = encodingFieldsInf;\n if (fieldType === FieldType.MEASURE) {\n domains[type][0] = Math.min(domains[type][0], 0);\n }\n });\n return domains;\n }\n\n /**\n * Returns the drawing method of this layer\n * @return {Function} Draw method\n */\n getDrawFn () {\n return drawArea;\n }\n\n /**\n * Generates the x and y positions for each point\n * @param {Array} data Data Array\n * @param {Object} encoding Visual Encodings of the layer\n * @param {Object} axes Contains the axis\n * @return {Array} Array of points\n */\n translatePoints (data, encodingFieldsInf, axes) {\n let points = [];\n const transformType = this.transformType();\n const colorAxis = axes.color;\n const config = this.config();\n const encoding = config.encoding;\n const colorEncoding = encoding.color;\n const colorField = colorEncoding.field;\n const fieldsConfig = this.data().getFieldsConfig();\n const colorFieldIndex = colorField && fieldsConfig[colorField].index;\n const { xField, yField, y0Field } = encodingFieldsInf;\n const {\n xAxis,\n yAxis\n } = getAxesScales(axes);\n const classNameFn = config.individualClassName;\n const isXDim = fieldsConfig[xField] && fieldsConfig[xField].def.type === FieldType.DIMENSION;\n const isYDim = fieldsConfig[yField] && fieldsConfig[yField].def.type === FieldType.DIMENSION;\n const key = isXDim ? 'x' : (isYDim ? 'y' : null);\n points = data.map((d, i) => {\n const xPx = xAxis.getScaleValue(d.x) + xAxis.getUnitWidth() / 2;\n const yPx = yAxis.getScaleValue(d.y);\n const y0Px = (y0Field || transformType === STACK) ? yAxis.getScaleValue(d.y0) : yAxis.getScaleValue(0);\n const { color, rawColor } = getLayerColor({ datum: d, index: i }, {\n colorEncoding, colorAxis, colorFieldIndex });\n const style = {};\n const meta = {};\n style.fill = color;\n // style['fill-opacity'] = 0;\n meta.stateColor = {};\n meta.originalColor = rawColor;\n meta.colorTransform = {};\n const point = {\n enter: {\n x: xPx,\n y: d.y === null ? d.y : yAxis.getScaleValue(0),\n y0: d.y0 === null ? d.y0 : yAxis.getScaleValue(0)\n },\n update: {\n x: xPx,\n y: d.y === null ? d.y : yPx,\n y0: d.y0 === null ? d.y0 : y0Px\n },\n _id: d._id,\n _data: d._data,\n source: d._data,\n rowId: d._id,\n className: classNameFn ? classNameFn(d, i, data, this) : '',\n style,\n meta\n };\n point.className = getIndividualClassName(d, i, data, this);\n this.cachePoint(d[key], point);\n return point;\n });\n points = positionPoints(this, points);\n return points;\n }\n\n /**\n * Get the css styles need to be applied on the line path\n * @param {string} color Color value\n * @return {Object} Path styles\n */\n getPathStyle (color) {\n return {\n fill: color\n };\n }\n}\n\n","import { CLASSPREFIX } from '../../enums/constants';\n\nexport const defaultConfig = {\n classPrefix: CLASSPREFIX,\n defClassName: 'layer-arc',\n padding: { top: 1, bottom: 1, left: 1, right: 1 },\n className: '',\n minOuterRadius: 10,\n interaction: {\n highlight: [{\n type: 'fill',\n intensity: [0, 0, -15, 0]\n }],\n fade: [{\n type: 'fill',\n intensity: [0, 0, +15, 0]\n }],\n focus: [{\n type: 'fill',\n intensity: [0, 0, +15, 0]\n }]\n },\n height: 100,\n width: 100,\n sort: '',\n cornerRadius: 0,\n padAngle: 0,\n padRadius: 0,\n startAngle: 0,\n endAngle: 360,\n colors: ['#F44336', 'blue', 'green', 'yellow', 'orange', 'purple'],\n transform: {\n type: 'identity'\n },\n encoding: {\n 'stroke-width': {\n value: '2px'\n },\n 'stroke-linejoin': {\n value: 'round'\n },\n angle: {\n value: '1'\n },\n radius: {\n value: '1'\n },\n opacity: {\n value: '1'\n },\n color: {\n value: '1'\n },\n shape: {\n value: '1'\n },\n size: {\n value: '1'\n }\n },\n innerRadiusFixer: 10,\n transition: {\n effect: 'cubic',\n duration: 500\n },\n states: {\n highlight: {\n className: `${CLASSPREFIX}-layer-arc-highlight`\n },\n fadeout: {\n className: `${CLASSPREFIX}-layer-arc-fadeout`\n },\n selected: {\n className: `${CLASSPREFIX}-layer-arc-selected`\n }\n }\n};\n\n","import {\n makeElement,\n selectElement,\n getQualifiedClassName,\n isSimpleObject,\n getDomainFromData,\n Symbols,\n FieldType,\n ReservedFields\n} from 'muze-utils';\nimport { defaultConfig } from './default-config';\nimport { BaseLayer } from '../../base-layer';\nimport * as PROPS from '../../enums/props';\nimport { ASCENDING, OUTER_RADIUS_VALUE } from '../../enums/constants';\nimport { getIndividualClassName } from '../../helpers';\nimport { getRangeValue, getRadiusRange, tweenPie, tweenExitPie, getFieldIndices, getPreviousPoint } from './arc-helper';\nimport './styles.scss';\n\nconst pie = Symbols.pie;\nconst arc = Symbols.arc;\n\n/**\n * Arc Layer creates a plot with polar coordinates\n * Example :-\n * const config = {\n * height: 100,\n * width: 100,\n * startAngle: 0,\n * endAngle: Math.PI,\n * cornerRadius: 10,\n * minOuterRadius: 10,\n * outerRadius: 10,\n * innerRadius: 5,\n * padAngle: 2,\n * padRadius: 2,\n * colors: []\n * padding: {top: 10, bottom: 10, left: 10, right: 10},\n * encoding = {\n * angle: {\n * field: 'date' //Maps to angle of arc\n * },\n * radius: {\n * field: 'sales' // Maps to radius of arc\n * }\n * }\n * };\n * @class\n */\nexport default class ArcLayer extends BaseLayer {\n\n constructor (data, axes, config, dependencies) {\n super(data, axes, config, dependencies);\n this._prevPieData = {};\n }\n\n /**\n * returns the default configuration of the layer\n *\n * @static\n * @return {Object} Default configuration for arc layer\n * @memberof ArcLayer\n */\n static defaultConfig () {\n return defaultConfig;\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof ArcLayer\n */\n static formalName () {\n return 'arc';\n }\n\n /**\n *\n *\n * @returns\n * @memberof ArcLayer\n */\n elemType () {\n return 'path';\n }\n\n /**\n * Transforms data in the appropriate data structure to be consumed by the layer for rendering\n *\n * @param {Object} data data model associated with the layer\n * @param {Object} config configuration of the layer that contains encoding and other parameters\n * @return {Object} Transformed pie data\n * @memberof ArcLayer\n */\n getTransformedData (dataModel, config) {\n let pieData = [];\n const pieIndex = {};\n const {\n startAngle,\n endAngle,\n encoding,\n sort,\n minOuterRadius\n } = config;\n const prevData = this._store.get(PROPS.TRANSFORMED_DATA) || [];\n const fieldsConfig = this.data().getFieldsConfig();\n const {\n angleIndex,\n sizeIndex,\n radiusIndex,\n colorIndex\n } = getFieldIndices(encoding, fieldsConfig);\n const dataVal = dataModel.getData();\n const data = dataVal.data;\n const uids = dataVal.uids;\n\n this._prevPieData = {};\n\n prevData.forEach((e, index) => {\n this._prevPieData[e.uid] = [e, index];\n pieIndex[e.index] = e;\n });\n // Creating pie data using angle field provided. If the angle field is a dimension,\n // all the angles will be equal(360/number of dimensions)\n\n pieData = pie()\n .startAngle((startAngle / 180) * Math.PI)\n .endAngle(Math.PI * endAngle / 180)\n .value(d => d[angleIndex] || 1)\n .sortValues(null);\n\n sort.length && radiusIndex && pieData.sort((a, b) => {\n if (sort === ASCENDING) {\n return a[radiusIndex] - b[radiusIndex];\n } return b[radiusIndex] - a[radiusIndex];\n });\n const sizeVal = data.reduce((acc, d) => acc + (d[sizeIndex] || 0), 1);\n\n // Adding the radius field values to each data point in pie data\n pieData = pieData(data).map((d, i) => {\n d.outerRadiusValue = data[i][radiusIndex] || minOuterRadius;\n d.innerRadius = config.innerRadius;\n d.colorVal = data[i][colorIndex];\n d.angleVal = data[i][angleIndex];\n d.sizeVal = sizeVal;\n d.uid = uids[i];\n d.rowId = d.uid;\n d.source = data[i];\n d._previousInfo = this._prevPieData[d.uid] ? this._prevPieData[d.uid][0] :\n getPreviousPoint(pieIndex, d.index, config);\n return d;\n });\n return pieData;\n }\n\n /**\n * Returns normalized data after transformation (it is the same in the case of pie layer)\n *\n * @param {Object} data transformed data\n * @return {Object} normalized data\n * @memberof ArcLayer\n */\n getNormalizedData (data) {\n return data;\n }\n\n /**\n *\n *\n * @param {Object} data\n * @return {}\n * @memberof ArcLayer\n */\n calculateDomainFromData (data) {\n const domainKey = OUTER_RADIUS_VALUE;\n return {\n radius: getDomainFromData([data], [domainKey, domainKey])\n };\n }\n\n /**\n *\n *\n * @param {Object} x\n * @param {Object} y\n * @return {}\n * @memberof ArcLayer\n */\n getNearestPoint (x, y, config = {}) {\n const dataPoint = selectElement(config.event.target).data()[0];\n if (isSimpleObject(dataPoint)) {\n const { data, uid } = dataPoint.datum;\n return {\n id: this.getIdentifiersFromData(data, uid),\n layerId: this.id()\n };\n }\n return null;\n }\n\n /**\n *\n *\n * @param {*} set\n * @returns\n * @memberof ArcLayer\n */\n getPlotElementsFromSet (set) {\n return selectElement(this.mount()).selectAll(this.elemType()).filter(d => set.indexOf(d.datum.uid) !== -1);\n }\n\n /**\n *\n *\n * @param {Object} container\n * @return {}\n * @memberof ArcLayer\n */\n render (container) {\n const {\n height,\n width\n } = this.measurement();\n const {\n classPrefix,\n defClassName,\n minOuterRadius,\n innerRadius,\n outerRadius,\n cornerRadius,\n padAngle,\n padRadius,\n padding,\n transition,\n innerRadiusFixer\n } = this.config();\n const sizeAxis = this.axes().size;\n const store = this._store;\n const transformedData = store.get(PROPS.TRANSFORMED_DATA);\n const chartHeight = height - padding.top - padding.bottom;\n const chartWidth = width - padding.left - padding.right;\n const qualClassName = getQualifiedClassName(defClassName, this.id(), classPrefix);\n // Sets range for radius\n const range = getRadiusRange(chartWidth, chartHeight, {\n minOuterRadius,\n innerRadius,\n outerRadius,\n innerRadiusFixer\n });\n const colorAxis = this.axes().color;\n const defaultRadius = outerRadius || Math.min(chartHeight, chartWidth) / 2;\n const radiusDomain = store.get(PROPS.DOMAIN).radius;\n const rangeValueGetter = d => getRangeValue(d, range, radiusDomain, defaultRadius, sizeAxis);\n // This returns a function that generates the arc path based on the datum provided\n const path = arc()\n // .outerRadius(d => rangeValueGetter(d))\n .innerRadius(innerRadius ? Math.min(chartHeight / 2, chartWidth / 2, innerRadius) : 0)\n .cornerRadius(cornerRadius)\n .padAngle(padAngle)\n .padRadius(padRadius);\n this._chartWidth = chartWidth;\n this._chartHeight = chartHeight;\n // Creating the group that holds all the arcs\n const g = makeElement(selectElement(container), 'g', [1], `${qualClassName[0]}-group`)\n .classed(`${qualClassName[1]}-group`, true)\n .attr('transform', `translate(${chartWidth / 2},${chartHeight / 2})`);\n const tween = (elem) => {\n makeElement(elem, 'path', (d, i) => [{\n datum: d,\n index: i,\n arcFn: path,\n meta: {\n originalColor: colorAxis.getRawColor(d.colorVal),\n stateColor: {},\n colorTransform: {}\n }\n }], `${qualClassName[0]}-path`)\n .style('fill', d => colorAxis.getColor(d.datum.colorVal))\n .transition()\n .duration(transition.duration)\n .attrTween('d', (...params) => tweenPie(path, rangeValueGetter, params))\n .attr('class', (d, i) => {\n const individualClass = getIndividualClassName(d, i, transformedData, this);\n return `${qualClassName[0]}-path ${qualClassName[1]}-path-${d.index}\n ${individualClass}`;\n });\n };\n const consecutiveExits = [];\n let exitCounter = 0;\n const tweenExit = (elem, d) => {\n let exitArr = consecutiveExits[exitCounter];\n const oldExitCounter = exitCounter;\n if (!exitArr) {\n exitArr = [{ elem, datum: d }];\n } else if (exitArr[exitArr.length - 1].datum.index === d.index - 1) {\n exitArr.push({ elem, datum: d });\n } else {\n exitCounter++;\n }\n consecutiveExits[oldExitCounter] = exitArr;\n };\n // Creating groups for all the arcs present individually\n makeElement(g, 'g', transformedData, `${qualClassName[0]}`,\n {\n update: tween,\n exit: tweenExit\n })\n .attr('class', (d, i) => `${qualClassName[0]} ${qualClassName[1]}-${i}`);\n tweenExitPie(consecutiveExits, transition, rangeValueGetter, path);\n return this;\n }\n\n /**\n *\n *\n * @param {*} identifiers\n * @returns\n * @memberof BaseLayer\n */\n getPointsFromIdentifiers (identifiers) {\n if (!this.data()) {\n return [];\n }\n const fieldNames = identifiers[0];\n const values = identifiers.slice(1, identifiers.length);\n const pieSlices = selectElement(this.mount()).selectAll('path').data();\n const fieldsConfig = this.data().getFieldsConfig();\n\n const filteredPies = pieSlices.filter((tData) => {\n const data = tData.datum.data;\n const uid = tData.datum.uid;\n return fieldNames.every((field, idx) => {\n if (field in fieldsConfig && fieldsConfig[field].def.type === FieldType.DIMENSION) {\n return values.findIndex(d => d[idx] === data[fieldsConfig[field].index]) !== -1;\n } else if (field === ReservedFields.ROW_ID) {\n return values.findIndex(d => d[idx] === uid) !== -1;\n } return true;\n });\n });\n\n const pieSliceInf = filteredPies[0];\n if (pieSliceInf) {\n const centroid = pieSliceInf.arcFn.centroid(pieSliceInf.datum);\n return [{\n x: centroid[0] + this._chartWidth / 2,\n y: centroid[1] + this._chartHeight / 2,\n width: 2,\n height: 2\n }];\n }\n return [];\n }\n}\n\n","import { getObjProp, interpolator, FieldType, selectElement } from 'muze-utils';\nimport { ANGLE, RADIUS, SIZE, COLOR } from '../../enums/constants';\n\n/**\n * Returns the range value from a value inside the domain\n *\n * @param {Object} domainValue Value whose range has to be returned\n * @return {number} range value\n * @memberof ArcLayer\n */\nexport const getRangeValue = (datum, range, domain, defaultRadius, sizeAxis) => {\n let domainMultiplier = 1;\n const {\n outerRadiusValue,\n sizeVal\n } = datum;\n const sizeAxisDomain = sizeAxis.domain();\n const sizeMultiplier = sizeAxis.getSize(sizeVal) / (sizeAxisDomain ? sizeAxis.range()[1] : sizeAxis.config().value);\n\n domainMultiplier *= (range[1] - range[0]) / (domain[1] - domain[0]);\n const rangeVal = (range[0] + (outerRadiusValue - domain[0]) * domainMultiplier);\n return (rangeVal || defaultRadius) * sizeMultiplier;\n};\n\n/**\n *\n *\n * @memberof ArcLayer\n */\nexport const getRadiusRange = (width, height, config) => {\n const {\n minOuterRadius,\n innerRadius,\n outerRadius,\n innerRadiusFixer\n } = config;\n\n return [Math.max((innerRadius + innerRadiusFixer || 0), minOuterRadius), outerRadius || Math.min(height,\n width) / 2];\n};\nexport const getPreviousPoint = (prevData, currIndex, config) => {\n const prevArc = prevData[currIndex - 1];\n const nextArc = prevData[currIndex];\n\n if (prevArc && nextArc) {\n return {\n startAngle: prevArc.endAngle,\n endAngle: nextArc.startAngle\n };\n } else if (!nextArc) {\n return {\n startAngle: config.endAngle * Math.PI * 2 / 360,\n endAngle: config.endAngle * Math.PI * 2 / 360\n };\n }\n return {\n startAngle: config.startAngle * Math.PI * 2 / 360,\n endAngle: config.startAngle * Math.PI * 2 / 360\n };\n};\n\n/**\n *\n *\n * @param {*} path\n * @param {*} b\n * @returns\n * @memberof ArcLayer\n */\nexport const tweenPie = (path, rangeValueGetter, b) => {\n const { datum } = b[0];\n const outerRadius = rangeValueGetter(datum);\n datum.outerRadius = outerRadius;\n datum._previousInfo.outerRadius = datum._previousInfo.outerRadius || outerRadius;\n return function (t) {\n return path(interpolator()(datum._previousInfo, datum)(t));\n };\n};\n\n/**\n *\n *\n * @param {*} path\n * @param {*} b\n * @returns\n * @memberof ArcLayer\n */\nexport const tweenExitPie = (consecutiveExits, transition, rangeValueGetter, path) => {\n if (consecutiveExits.length > 0) {\n consecutiveExits.forEach((consecutiveExitArr) => {\n const startAngle = consecutiveExitArr[0].datum.startAngle;\n const endAngle = consecutiveExitArr[consecutiveExitArr.length - 1].datum.endAngle;\n const mid = (Math.PI * 2 * startAngle) / ((Math.PI * 2) + startAngle - endAngle);\n\n consecutiveExitArr.forEach((e) => {\n const { elem, datum } = e;\n\n elem.each(function () {\n const gElem = selectElement(this);\n gElem.selectAll('path')\n .transition()\n .duration(transition.duration)\n .attrTween('d', () => function (t) {\n const outerRadius = rangeValueGetter(datum);\n datum.outerRadius = outerRadius;\n return path(interpolator()(datum, {\n startAngle: mid,\n endAngle: mid,\n outerRadius\n })(t));\n })\n .remove();\n gElem.remove();\n });\n });\n });\n }\n};\n\nexport const getFieldIndices = (encoding, fieldsConfig) => {\n const [angleField, radiusField, colorField, sizeField] = [ANGLE, RADIUS, COLOR, SIZE]\n .map(e => encoding[e].field);\n const [angleIndex, sizeIndex, radiusIndex] = [angleField, sizeField, radiusField]\n .map((e) => {\n const conf = fieldsConfig[e];\n if (conf && conf.def.type === FieldType.MEASURE) {\n return conf.index;\n }\n return null;\n });\n const colorIndex = getObjProp(fieldsConfig, colorField, 'index');\n return {\n angleIndex,\n sizeIndex,\n radiusIndex,\n colorIndex\n };\n};\n","import {\n setAttrs,\n setStyles,\n selectElement,\n makeElement,\n getSmartComputedStyle\n} from 'muze-utils';\n\n/**\n * Draws svg text in the specified container.\n * @param {SVGElement} container Container where labels will be appended.\n * @param {Array.} data Data of the elements.\n * @return {Selection} d3 selection of the elements.\n */\nconst drawText = (container, data, config, smartLabel) => {\n const selection = selectElement(container).selectAll('g').data(data);\n\n const selectionMerge = selection.enter().append('g')\n .each(function (dataObj) {\n setAttrs(this, dataObj.enter);\n })\n .merge(selection);\n const style = getSmartComputedStyle(selectElement(container), config.className);\n const fontSize = parseInt(style.fontSize, 10);\n\n smartLabel.setStyle(style);\n selectionMerge.each(function (dataObj) {\n const element = selectElement(this);\n const { update, text, color, textanchor, style: textStyle } = dataObj;\n const background = dataObj.background;\n let backgroundVal;\n if (backgroundVal = background.value) {\n const backgroundPadding = background.padding;\n let diff;\n const { width, height } = smartLabel.getOriSize(dataObj.text);\n const backgroundEl = makeElement(element, 'rect', [1]);\n\n if (textanchor === 'end') {\n diff = width;\n } else if (textanchor === 'start') {\n diff = 0;\n } else {\n diff = width / 2;\n }\n\n setAttrs(backgroundEl.node(), {\n x: update.x - diff - backgroundPadding / 2,\n y: update.y - fontSize - backgroundPadding / 2,\n width: width + backgroundPadding,\n height: height + backgroundPadding\n });\n background && setStyles(backgroundEl, {\n background: backgroundVal\n });\n }\n const textEl = makeElement(element, 'text', d => [d]).text(text);\n const textNode = textEl.node();\n textStyle && setStyles(textNode, textStyle);\n color && setStyles(textNode, {\n fill: color\n });\n dataObj.className && textEl.classed(dataObj.className, true);\n setAttrs(textNode, update);\n textEl.attr('text-anchor', textanchor);\n });\n selection.exit().remove();\n return selection;\n};\n\nexport default drawText;\n","import { CLASSPREFIX } from '../../enums/constants';\n\nexport const defaultConfig = {\n defClassName: 'layer-text',\n classPrefix: CLASSPREFIX,\n className: '',\n transform: {\n type: 'identity'\n },\n interaction: {\n highlight: [{\n type: 'fill',\n intensity: [0, 0, -15, 0]\n }],\n fade: [{\n type: 'fill',\n intensity: [0, 0, +15, 0]\n }],\n focus: [{\n type: 'fill',\n intensity: [0, 0, +15, 0]\n }]\n },\n transition: {\n effect: 'cubic',\n duration: 1000\n },\n encoding: {\n color: {},\n text: {\n value: '',\n background: {\n padding: 10\n }\n }\n },\n states: {\n highlight: {\n className: `${CLASSPREFIX}-layer-text-highlight`\n },\n fadeout: {\n className: `${CLASSPREFIX}-layer-text-fadeout`\n },\n selected: {\n className: `${CLASSPREFIX}-layer-text-selected`\n }\n }\n};\n","import {\n getQualifiedClassName,\n selectElement,\n setStyles,\n createElements\n} from 'muze-utils';\nimport { BaseLayer } from '../../base-layer';\nimport drawText from './renderer';\nimport { defaultConfig } from './default-config';\nimport { getLayerColor, positionPoints, getIndividualClassName } from '../../helpers';\nimport { TEXT_ANCHOR_MIDDLE, ENCODING } from '../../enums/constants';\nimport * as PROPS from '../../enums/props';\n\nimport './styles.scss';\n\n/**\n * Text Layer creates labels. It needs to be passed a data table, axes and configuration\n * of the layer.\n * Example :-\n * const textLayer = layerFactory.getLayer('text', [dataModel, axes, config]);\n * textLayer.render(container);\n * @class\n */\nexport default class TextLayer extends BaseLayer {\n /**\n * Returns the default configuration of the text layer\n * @return {Object} Default configuration of the text layer\n */\n static defaultConfig () {\n return defaultConfig;\n }\n\n static formalName () {\n return 'text';\n }\n\n elemType () {\n return 'text';\n }\n\n /**\n * Generates an array of objects containing x, y, width and height of the points from the data\n * @param {Array.} data Data Array\n * @param {Object} encoding Config\n * @param {Object} axes Axes object\n * @return {Array.} Array of points\n */\n translatePoints (data, encoding, axes) {\n let points = [];\n const colorAxis = axes.color;\n const textEncoding = encoding.text;\n const { field: textField, value, formatter: textFormatter } = textEncoding;\n const colorEncoding = encoding.color;\n const colorField = colorEncoding && colorEncoding.field;\n const fieldsConfig = this.data().getFieldsConfig();\n\n const backgroundEncoding = encoding.text.background;\n const backgroundPadding = backgroundEncoding.padding;\n const backgroundValue = backgroundEncoding.value;\n const colorFieldIndex = fieldsConfig[colorField] ? fieldsConfig[colorField].index : -1;\n const textFieldIndex = textField ? fieldsConfig[textField] && fieldsConfig[textField].index : -1;\n const xEnc = ENCODING.X;\n const yEnc = ENCODING.Y;\n for (let i = 0, len = data.length; i < len; i++) {\n const d = data[i];\n const row = d._data;\n const textValue = textField ? row[textFieldIndex] : value;\n\n const [xPx, yPx] = [xEnc, yEnc].map(type => (axes[type] ? axes[type].getScaleValue(d[type]) +\n axes[type].getUnitWidth() / 2 : 0));\n\n const { color, rawColor } = getLayerColor({ datum: d, index: i },\n { colorEncoding, colorAxis, colorFieldIndex });\n\n const point = {\n enter: {},\n update: {\n x: xPx,\n y: yPx\n },\n text: textFormatter ? textFormatter(textValue) : textValue,\n color,\n background: {\n value: backgroundValue instanceof Function ? backgroundValue(d, i, data, this) : null,\n padding: backgroundPadding\n },\n meta: {\n stateColor: {},\n originalColor: rawColor,\n colorTransform: {}\n },\n style: {},\n _data: row,\n _id: d._id,\n source: d._data,\n rowId: d._id\n };\n\n if (d.x !== null && d.y !== null) {\n points.push(point);\n }\n\n point.className = getIndividualClassName(d, i, data, this);\n }\n\n points = positionPoints(this, points);\n\n return points;\n }\n\n /**\n * Renders the plot in the given container\n * @param {SVGElement} container SVGElement which will hold the plot\n * @return {textLayer} Instance of text layer\n */\n render (container) {\n let points;\n const config = this.config();\n const encoding = config.encoding;\n const normalizedData = this._store.get(PROPS.NORMALIZED_DATA);\n const className = config.className;\n const qualifiedClassName = getQualifiedClassName(config.defClassName, this.id(), config.classPrefix);\n const axes = this.axes();\n const containerSelection = selectElement(container);\n\n containerSelection.classed(`${qualifiedClassName.join(' ')} ${className}`, true);\n createElements({\n data: normalizedData,\n append: 'g',\n selector: 'g',\n container,\n each: (dataArr, group, i) => {\n const node = group.node();\n points = this.translatePoints(dataArr, encoding, axes, i);\n setStyles(node, {\n 'text-anchor': TEXT_ANCHOR_MIDDLE\n });\n drawText(node, points, {\n className: qualifiedClassName[0]\n }, this._dependencies.smartLabel);\n }\n });\n return this;\n }\n}\n","/* global Element, document */\nimport {\n makeElement,\n selectElement,\n easeFns,\n objectIterator,\n getSymbol\n} from 'muze-utils';\n\n/**\n *\n *\n * @param {*} str\n * @returns\n */\nconst checkPath = (str) => {\n if (/^[mzlhvcsqta]\\s*[-+.0-9][^mlhvzcsqta]+/i.test(str) && /[\\dz]$/i.test(str) && str.length > 4) {\n return true;\n }\n return false;\n};\n\n/**\n *\n *\n * @param {*} d\n * @param {*} elem\n */\nconst createShape = function (d, elem) {\n const groupElement = selectElement(elem);\n const { shape, size, update } = d;\n\n if (shape instanceof Promise) {\n shape.then((res) => {\n d.shape = res;\n createShape(d, elem);\n });\n } else if (shape instanceof Element) {\n let newShape = shape.cloneNode(true);\n\n if (newShape.nodeName.toLowerCase() === 'img') {\n const src = newShape.src || newShape.href;\n newShape = document.createElementNS('http://www.w3.org/2000/svg', 'image');\n newShape.setAttribute('href', src);\n }\n const shapeElement = selectElement(newShape);\n if (newShape.nodeName === 'path' || newShape.nodeName === 'image') {\n shapeElement.attr('transform', `scale(${size / 100})`);\n } else {\n shapeElement.attr('height', size);\n shapeElement.attr('width', size);\n }\n shapeElement.attr('x', -size / 2);\n shapeElement.attr('y', -size / 2);\n selectElement(groupElement.node().appendChild(newShape));\n } else if (typeof shape === 'string') {\n let pathStr;\n if (checkPath(shape)) {\n pathStr = shape;\n } else {\n pathStr = getSymbol(shape).size(size)(update);\n }\n makeElement(groupElement, 'path', data => [data]).attr('d', pathStr);\n } else {\n d.shape = 'circle';\n createShape(d, elem);\n }\n};\n\n/**\n * Draws symbols using d3 symbol api\n * @param {Object} params Contains the svg container, points and other symbol related attributes.\n */\n/* istanbul ignore next */ const drawSymbols = (params) => {\n let mergedGroups;\n const { container, points, transition, className } = params;\n const { duration, effect, disabled } = transition;\n const mount = selectElement(container);\n\n mount.attr('class', className);\n const symbolGroups = mount.selectAll('g').data(points, params.keyFn);\n const symbolEnter = symbolGroups.enter().append('g').attr('transform', d => `translate(${d.enter.x},${d.enter.y})`);\n mergedGroups = symbolGroups.merge(symbolEnter)\n .each(function (d) {\n createShape(d, this);\n });\n mergedGroups = disabled ? mergedGroups : mergedGroups.transition().duration(disabled ? 0 : transition.duration);\n mergedGroups.attr('transform', d => `translate(${d.update.x},${d.update.y})`)\n .each(function (d) {\n const style = d.style;\n const element = selectElement(this);\n objectIterator(style, key => element.style(key, style[key]));\n element.attr('class', `${className}`);\n element.classed(d.className, true);\n });\n\n const exitGroups = symbolGroups.exit();\n if (!disabled) {\n exitGroups.transition().ease(easeFns[effect])\n .duration(duration)\n .on('end', function () {\n selectElement(this).remove();\n })\n .style('fill-opacity', 0)\n .style('stroke-opacity', 0);\n } else {\n exitGroups.remove();\n }\n};\n\nexport default drawSymbols;\n","import { CLASSPREFIX } from '../../enums/constants';\n\nexport const defaultConfig = {\n defClassName: 'layer-point',\n className: '',\n classPrefix: CLASSPREFIX,\n defColorStyle: 'stroke',\n interaction: {\n highlight: [{\n type: 'fill',\n intensity: [0, 0, -20, 0]\n }],\n fade: [{\n type: 'fill',\n intensity: [0, 0, +20, 0]\n }],\n focus: [{\n type: 'fill',\n intensity: [0, 0, +20, 0]\n }\n ]\n },\n innerPadding: 0.1,\n nearestPointThreshold: 10,\n transform: {\n type: 'identity'\n },\n transition: {\n effect: 'cubic',\n duration: 1000\n },\n encoding: {\n size: {\n value: 30\n },\n color: { },\n shape: {\n value: 'circle'\n },\n x: {},\n y: {},\n strokeOpacity: {\n value: 0.5\n },\n fillOpacity: {\n value: 0.5\n }\n },\n shapes: ['circle', 'cross', 'diamond', 'square', 'star', 'wye', 'triangle'],\n sizes: [20, 30, 40, 50, 60, 70]\n};\n","import {\n Voronoi,\n selectElement,\n getQualifiedClassName,\n makeElement,\n FieldType,\n Scales\n} from 'muze-utils';\nimport { BaseLayer } from '../../base-layer';\nimport drawSymbols from './renderer';\nimport { defaultConfig } from './default-config';\nimport { ENCODING } from '../../enums/constants';\nimport * as PROPS from '../../enums/props';\nimport {\n attachDataToVoronoi,\n getLayerColor,\n positionPoints,\n getPlotMeasurement,\n getIndividualClassName\n} from '../../helpers';\n\nimport './styles.scss';\n\n/**\n * Point Layer creates point. Itt needs to be passed a data table, axes and configuration\n * of the layer.\n * Example :-\n * const pointLayer = layerFactory.getLayer('point', [data, axes, config]);\n * pointLayer.render(container);\n * @class\n */\nexport default class PointLayer extends BaseLayer {\n\n /**\n * Creates an instance of PointLayer.\n * @param {*} args\n * @memberof PointLayer\n */\n constructor (...args) {\n super(...args);\n this._voronoi = new Voronoi();\n this._bandScale = Scales.band();\n }\n\n /**\n *\n *\n * @returns\n * @memberof PointLayer\n */\n elemType () {\n return 'g';\n }\n\n /**\n * Returns the default configuration of the point layer\n * @return {Object} Default configuration of the point layer\n */\n static defaultConfig () {\n return defaultConfig;\n }\n\n static defaultPolicy (conf, userConf) {\n const config = BaseLayer.defaultPolicy(conf, userConf);\n const encoding = config.encoding;\n const transform = config.transform;\n const colorField = encoding.color && encoding.color.field;\n\n if (colorField) {\n transform.groupBy = colorField;\n }\n return config;\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof PointLayer\n */\n static formalName () {\n return 'point';\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof PointLayer\n */\n static drawFn () {\n return drawSymbols;\n }\n\n /**\n * Generates an array of objects containing x, y, width and height of the points from the data\n * @param {Array.} data Data Array\n * @param {Object} encoding Config\n * @param {Object} axes Axes object\n * @return {Array.} Array of points\n */\n translatePoints (data, encoding, axes, config = {}) {\n let points = [];\n const {\n size: sizeEncoding,\n shape: shapeEncoding,\n color: colorEncoding,\n x,\n y\n } = encoding;\n const sizeField = sizeEncoding.field;\n const sizeValue = sizeEncoding.value;\n const shapeField = shapeEncoding.field;\n const xField = x.field;\n const yField = y.field;\n const { size: sizeAxis, shape: shapeAxis } = axes;\n const fieldsConfig = this.data().getFieldsConfig();\n const isXDim = fieldsConfig[xField] && fieldsConfig[xField].def.type === FieldType.DIMENSION;\n const isYDim = fieldsConfig[yField] && fieldsConfig[yField].def.type === FieldType.DIMENSION;\n const key = isXDim ? ENCODING.X : (isYDim ? ENCODING.Y : null);\n const colorField = colorEncoding && colorEncoding.field;\n const colorFieldIndex = fieldsConfig[colorField] && fieldsConfig[colorField].index;\n const measurement = this._store.get(PROPS.MEASUREMENT);\n const shapeFieldIndex = fieldsConfig[shapeField] && fieldsConfig[shapeField].index;\n const sizeFieldIndex = fieldsConfig[sizeField] && fieldsConfig[sizeField].index;\n const colorAxis = axes.color;\n const { x: offsetX, y: offsetY } = config.offset;\n\n for (let i = 0, len = data.length; i < len; i++) {\n const d = data[i];\n const row = d._data;\n const size = sizeValue instanceof Function ? sizeValue(d, i) : sizeAxis.getSize(row[sizeFieldIndex]);\n const shape = shapeAxis.getShape(row[shapeFieldIndex]);\n\n let [xPx, yPx] = [ENCODING.X, ENCODING.Y].map((type) => {\n const value = d[type] === null ? undefined : d[type];\n const measure = type === ENCODING.X ? measurement.width : measurement.height;\n return !encoding[type].field ? measure / 2 : axes[type].getScaleValue(value);\n });\n\n xPx += offsetX;\n yPx += offsetY;\n\n const { color, rawColor } = getLayerColor({ datum: d, index: i },\n { colorEncoding, colorAxis, colorFieldIndex });\n\n const style = {\n fill: color,\n stroke: color\n };\n\n if (!isNaN(xPx) && !isNaN(yPx)) {\n const point = {\n enter: {\n x: xPx,\n y: yPx\n },\n update: {\n x: xPx,\n y: yPx\n },\n shape,\n size: Math.abs(size),\n meta: {\n stateColor: {},\n originalColor: rawColor,\n colorTransform: {}\n },\n style,\n _data: row,\n _id: d._id,\n source: d._data,\n rowId: d._id\n };\n point.className = getIndividualClassName(d, i, data, this);\n points.push(point);\n this.cachePoint(d[key], point);\n }\n }\n points = positionPoints(this, points);\n return points;\n }\n\n /**\n * Renders the plot in the given container.\n *\n * @param {SVGElement} container SVGElement which will hold the plot\n * @return {BarLayer} Instance of bar layer\n */\n render (container) {\n let maxSize = 0;\n let seriesClassName;\n const config = this.config();\n const keys = this._store.get(PROPS.TRANSFORMED_DATA).map(d => d.key);\n const { transition, className, defClassName, classPrefix } = config;\n const normalizedData = this._store.get(PROPS.NORMALIZED_DATA);\n const containerSelection = selectElement(container);\n const qualifiedClassName = getQualifiedClassName(defClassName, this.id(), classPrefix);\n this._points = [];\n this._pointMap = {};\n\n containerSelection.classed(qualifiedClassName.join(' '), true).classed(className, true);\n\n this._points = this.generateDataPoints(normalizedData, keys);\n\n makeElement(container, 'g', this._points, null, {\n update: (group, points) => {\n maxSize = Math.max(maxSize, ...points.map(d => d.size));\n seriesClassName = `${qualifiedClassName[0]}`;\n this.constructor.drawFn()({\n container: group.node(),\n points,\n className: seriesClassName,\n transition,\n keyFn: d => d._id\n });\n }\n }, data => data[0]._id);\n this._maxSize = Math.sqrt(maxSize / Math.PI) * 2;\n attachDataToVoronoi(this._voronoi, this._points);\n return this;\n }\n\n generateDataPoints (normalizedData, keys) {\n const encoding = this.config().encoding;\n const axes = this.axes();\n const [widthMetrics, heightMetrics] = getPlotMeasurement(this, keys);\n const offsetXValues = widthMetrics.offsetValues || [];\n const offsetYValues = heightMetrics.offsetValues || [];\n return normalizedData.map((dataArr, i) => {\n const measurementConf = this.getMeasurementConfig(offsetXValues[i], offsetYValues[i], widthMetrics.span,\n heightMetrics.span);\n return this.translatePoints(dataArr, encoding, axes, measurementConf);\n }).filter(d => d.length);\n }\n\n getMeasurementConfig (offsetX, offsetY, widthSpan, heightSpan) {\n return {\n offset: {\n x: (offsetX || 0) + widthSpan / 2,\n y: (offsetY || 0) + heightSpan / 2\n },\n span: {\n x: widthSpan,\n y: heightSpan\n }\n };\n }\n\n /**\n * Gets the nearest point from a position.\n * @param {number} x x position\n * @param {number} y y position\n * @return {Object} Point details\n */\n getNearestPoint (x, y) {\n const distanceLimit = Math.max(this._maxSize, this.config().nearestPointThreshold);\n\n if (!this.data()) {\n return null;\n }\n\n const point = this._voronoi.find(x, y, distanceLimit);\n const dimensions = point && point.data.data.update;\n const radius = point ? Math.sqrt(point.data.data.size / Math.PI) : 0;\n\n if (point) {\n const { _data, _id } = point.data.data;\n const identifiers = this.getIdentifiersFromData(_data, _id);\n return {\n id: identifiers,\n dimensions: [{\n x: dimensions.x,\n y: dimensions.y,\n width: radius,\n height: radius\n }],\n layerId: this.id()\n };\n }\n return null;\n }\n}\n","import { makeElement, easeFns } from 'muze-utils';\n\n/**\n *\n *\n * @param {*} elem\n * @param {*} datum\n * @param {*} index\n * @param {*} context\n */\nconst transitionBars = (elem, datum, index, context) => {\n const { transition } = context;\n const { duration, disabled, effect } = transition;\n const selection = elem;\n const selTransition = disabled ? selection : selection.transition().duration(duration).ease(easeFns[effect]);\n const update = datum.update || datum;\n const updateStyle = datum.style || {};\n datum.className && selection.classed(datum.className, true);\n Object.entries(update).forEach(attr => (!isNaN(attr[1]) && selTransition.attr(attr[0], attr[1])));\n Object.entries(updateStyle).forEach(styleObj => selection.style(styleObj[0], styleObj[1]));\n};\n\n/**\n *\n *\n * @param {*} elem\n * @param {*} d\n */\nconst barEnterFn = (elem, d) => {\n const selection = elem;\n const enter = d.enter || {};\n Object.entries(enter).forEach(attr => (!isNaN(attr[1]) && selection.attr(attr[0], attr[1])));\n};\n\n/**\n * Draws rectangles by using d3 selection\n * @param {Object} params Contains container element and points\n * @return {Selection} Bar Selection\n */\n/* istanbul ignore next */ export const drawRects = (params) => {\n const { points, container, keyFn } = params;\n const updateFns = {\n enter (elem, d) { barEnterFn(elem, d); },\n update (elem, d, i) { transitionBars(elem, d, i, params); }\n };\n return makeElement(container, 'rect', points, null, updateFns, keyFn);\n};\n","import { CLASSPREFIX } from '../../enums/constants';\n\nexport const defaultConfig = {\n classPrefix: CLASSPREFIX,\n defClassName: 'layer-bar',\n className: '',\n interaction: {\n highlight: [{\n type: 'fill',\n intensity: [0, 0, -15, 0]\n }],\n fade: [{\n type: 'fill',\n intensity: [0, 0, +15, 0]\n }],\n focus: [{\n type: 'fill',\n intensity: [0, 0, +15, 0]\n }]\n },\n transform: {\n type: 'stack'\n },\n transition: {\n effect: 'cubic',\n duration: 1000\n },\n innerPadding: 0.1,\n encoding: {\n color: {},\n x: {},\n y: {},\n x0: {},\n y0: {}\n },\n states: {\n highlight: {\n className: `${CLASSPREFIX}-layer-bar-highlight`\n },\n fadeout: {\n className: `${CLASSPREFIX}-layer-bar-fadeout`\n },\n selected: {\n className: `${CLASSPREFIX}-layer-bar-selected`\n }\n }\n};\n\n","import { FieldType, DimensionSubtype } from 'muze-utils';\nimport * as PROPS from '../../enums/props';\nimport { STACK } from '../../enums/constants';\nimport { getLayerColor, positionPoints, getIndividualClassName } from '../../helpers';\n\n/**\n *\n *\n * @param {*} type\n * @param {*} fieldInfo\n * @param {*} config\n * @param {*} data\n * @returns\n */\nconst resolveDimByField = (type, axesInfo, config, data) => {\n const spaceType = type === 'x' ? 'width' : 'height';\n const [fieldType, axis] = [config[`${type}FieldType`], axesInfo[`${type}Axis`]];\n const {\n transformType,\n sizeEncoding,\n sizeConfig,\n measurement\n } = config;\n\n const sizeValue = sizeEncoding.value;\n let enter = 0;\n let pos;\n let space = 0;\n let enterSpace = 0;\n if (fieldType !== undefined) {\n if (config[`${type}0Field`]) {\n const minVal = data[type];\n const maxVal = data[`${type}0`];\n let min;\n let max;\n if (minVal === null || maxVal === null) {\n return {\n enterSpace: undefined,\n enter: undefined,\n pos: undefined,\n space: undefined\n };\n } else if (fieldType === FieldType.MEASURE || fieldType === DimensionSubtype.TEMPORAL) {\n min = Math.min(minVal, maxVal);\n max = Math.max(minVal, maxVal);\n } else {\n min = minVal;\n max = maxVal;\n }\n const scales = type === 'x' ? [min, max] : [max, min];\n pos = axis.getScaleValue(scales[0]) + axis.getUnitWidth() / 2;\n space = Math.abs(axis.getScaleValue(scales[1]) - pos) + axis.getUnitWidth() / 2;\n\n enter = pos;\n enterSpace = 0;\n } else if (fieldType === DimensionSubtype.CATEGORICAL || fieldType === DimensionSubtype.TEMPORAL) {\n pos = axis.getScaleValue(data[type]) +\n (sizeConfig[type === 'x' ? 'barWidthOffset' : 'barHeightOffset'] || 0);\n\n space = sizeConfig[type === 'x' ? 'barWidth' : 'barHeight'];\n if (sizeValue !== undefined) {\n const diffPx = sizeValue * space;\n space -= diffPx;\n pos += diffPx / 2;\n }\n enter = pos;\n enterSpace = space;\n } else {\n const zeroPos = axis.getScaleValue(0);\n const axisType = axis.getScaleValue(data[type]);\n const axisType0 = axis.getScaleValue(data[`${type}0`]);\n\n enterSpace = 0;\n if (type === 'x') {\n pos = data[type] < 0 || transformType === STACK ? axisType : zeroPos;\n space = Math.abs(pos - (transformType === STACK ? axisType0 : (data[type] >= 0 ? axisType : zeroPos)));\n } else {\n pos = transformType === STACK || data[type] >= 0 ? axisType : zeroPos;\n space = Math.abs(pos - (transformType === STACK ? axisType0 : (data[type] >= 0 ? zeroPos : axisType)));\n }\n enter = zeroPos;\n }\n } else {\n pos = 0;\n space = measurement[spaceType];\n }\n\n return {\n enterSpace,\n enter,\n pos,\n space\n };\n};\n\n/**\n *\n *\n * @param {*} data\n * @param {*} config\n * @param {*} axes\n * @returns\n */\nconst resolveDimensions = (data, config, axes) => {\n const axesInfo = {\n xAxis: axes.x,\n yAxis: axes.y\n };\n const {\n enterSpace: enterWidth,\n enter: enterX,\n pos: xPos,\n space: width\n } = resolveDimByField('x', axesInfo, config, data);\n\n const {\n enterSpace: enterHeight,\n enter: enterY,\n pos: yPos,\n space: height\n } = resolveDimByField('y', axesInfo, config, data);\n return {\n enter: {\n x: enterX,\n y: enterY,\n width: enterWidth,\n height: enterHeight\n },\n update: {\n x: xPos,\n y: yPos,\n width,\n height\n }\n };\n};\n\n/**\n * Generates an array of objects containing x, y, width and height of the bars from the data\n * @param {Array.} data Data Array\n * @param {Object} encoding Config\n * @param {Object} axes Axes object\n * @param {Object} conf config object for point generation\n * @return {Array.} Array of points\n */\nexport const getTranslatedPoints = (context, data, sizeConfig) => {\n let points = [];\n const encoding = context.config().encoding;\n const axes = context.axes();\n const colorAxis = axes.color;\n const fieldsConfig = context.data().getFieldsConfig();\n const colorEncoding = encoding.color;\n const colorField = colorEncoding.field;\n const sizeEncoding = encoding.size || {};\n const {\n x0Field,\n y0Field,\n xFieldSubType,\n yFieldSubType\n } = context.encodingFieldsInf();\n const measurement = context._store.get(PROPS.MEASUREMENT);\n const isXDim = xFieldSubType === DimensionSubtype.CATEGORICAL || xFieldSubType === DimensionSubtype.TEMPORAL;\n const isYDim = yFieldSubType === DimensionSubtype.CATEGORICAL || yFieldSubType === DimensionSubtype.TEMPORAL;\n const key = isXDim ? 'x' : (isYDim ? 'y' : null);\n const transformType = context.transformType();\n const colorFieldIndex = colorField && fieldsConfig[colorField] && fieldsConfig[colorField].index;\n\n for (let i = 0, len = data.length; i < len; i++) {\n const d = data[i];\n const style = {};\n const meta = {};\n const dimensions = resolveDimensions(d, {\n xFieldType: xFieldSubType,\n yFieldType: yFieldSubType,\n x0Field,\n y0Field,\n transformType,\n measurement,\n sizeConfig,\n sizeEncoding\n }, axes);\n\n const { color, rawColor } = getLayerColor({ datum: d, index: i },\n { colorEncoding, colorAxis, colorFieldIndex });\n\n style.fill = color;\n meta.stateColor = {};\n meta.originalColor = rawColor;\n meta.colorTransform = {};\n\n const update = dimensions.update;\n\n if (!isNaN(update.x) && !isNaN(update.y) && d._id !== undefined) {\n let point = null;\n point = {\n enter: dimensions.enter,\n update,\n style,\n _data: d._data,\n _id: d._id,\n source: d._data,\n rowId: d._id,\n meta\n };\n point.className = getIndividualClassName(d, i, data, context);\n points.push(point);\n // Store each point in a hashmap with key as the dimensional or temporal field value\n context.cachePoint(d[key], point);\n }\n }\n\n points = positionPoints(context, points);\n return points;\n};\n","import {\n getClosestIndexOf,\n getQualifiedClassName,\n selectElement,\n createElements,\n clipElement,\n DimensionSubtype,\n FieldType,\n Scales\n} from 'muze-utils';\nimport { BaseLayer } from '../../base-layer';\nimport { drawRects } from './renderer';\nimport { defaultConfig } from './default-config';\nimport * as PROPS from '../../enums/props';\nimport { getPlotMeasurement } from '../../helpers';\nimport './styles.scss';\nimport { getTranslatedPoints } from './bar-helper';\n\nconst MEASURE = FieldType.MEASURE;\nconst scaleBand = Scales.band;\n\n/**\n * Bar Layer creates a bar plot. It needs to be passed a data table, axes and configuration of the layer.\n *\n * @example\n * const BarLayer = layerFactory.getLayer('bar');\n * BarLayer.create()\n * .config(config)\n * .data(dt)\n * .mountPoint(container);\n * @class\n */\nexport default class BarLayer extends BaseLayer {\n /**\n * Creates an instance of bar layer\n */\n constructor (...params) {\n super(...params);\n this._bandScale = scaleBand();\n this._plotPadding = {\n x: 0,\n y: 0\n };\n this._plotSpan = {\n x: 0,\n y: 0\n };\n this._pointMap = {};\n }\n\n /**\n *\n *\n * @returns\n * @memberof BarLayer\n */\n elemType () {\n return 'rect';\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof BarLayer\n */\n static formalName () {\n return 'bar';\n }\n\n /**\n * Returns the default configuration of the bar layer\n * @return {Object} Default configuration of the bar layer\n */\n static defaultConfig () {\n return defaultConfig;\n }\n\n /**\n *\n *\n * @static\n * @param {*} conf\n * @param {*} userConf\n * @returns\n * @memberof BarLayer\n */\n static defaultPolicy (conf, userConf) {\n const config = BaseLayer.defaultPolicy(conf, userConf);\n const encoding = config.encoding;\n const colorField = encoding.color.field;\n const transform = config.transform;\n\n if (colorField) {\n transform.groupBy = colorField;\n }\n return config;\n }\n\n /**\n *\n *\n * @param {*} data\n * @param {*} fieldsConfig\n * @returns\n * @memberof BarLayer\n */\n calculateDomainFromData (data, encodingFieldInf, fieldsConfig) {\n const domain = super.calculateDomainFromData(data, encodingFieldInf, fieldsConfig);\n ['x', 'y'].forEach((d) => {\n if (encodingFieldInf[`${d}FieldType`] === MEASURE && domain[d]) {\n encodingFieldInf[`${d}0Field}`] ? domain[d] = domain[d].sort((a, b) => a - b) :\n (domain[d][0] = Math.min(domain[d][0], 0));\n }\n });\n return domain;\n }\n\n /**\n * Generates an array of objects containing x, y, width and height of the bars from the data\n * @param {Array.} data Data Array\n * @param {Object} encoding Config\n * @param {Object} axes Axes object\n * @param {Object} conf config object for point generation\n * @return {Array.} Array of points\n */\n translatePoints (data, sizeConfig) {\n return getTranslatedPoints(this, data, sizeConfig);\n }\n\n /**\n * Renders the plot in the given container\n * @param {SVGGroup} container SVGGroup where plot will be rendered.\n * @return {BarLayer} Instance of bar layer.\n */\n render (container) {\n const config = this.config();\n const transition = config.transition;\n const store = this._store;\n const normalizedDataArr = store.get(PROPS.NORMALIZED_DATA);\n const transformedData = store.get(PROPS.TRANSFORMED_DATA);\n const keys = transformedData.map(d => d.key);\n const fieldsConfig = this.data().getFieldsConfig();\n const axes = this.axes();\n const height = axes.y && axes.y.scale().range()[0];\n const width = axes.x && axes.x.scale().range()[1];\n const defClassName = config.defClassName;\n const qualifiedClassName = getQualifiedClassName(defClassName, this.id(), config.classPrefix);\n const className = config.className;\n const containerSelection = selectElement(container);\n const dimensions = Object.values(fieldsConfig).filter(e => e.def.type === FieldType.DIMENSION)\n .map(e => e.index);\n containerSelection.classed(qualifiedClassName.join(' '), true);\n containerSelection.classed(className, true);\n clipElement(container, {\n x: 0,\n y: 0,\n width,\n height\n }, `id-${this.id()}`);\n\n this._points = this.generateDataPoints(normalizedDataArr, keys);\n\n createElements({\n data: this._points,\n container,\n selector: 'g',\n append: 'g',\n each: (points, group, i) => {\n const seriesClassName = `${qualifiedClassName[0]}-${keys[i] || i}`.toLowerCase();\n group.style('display', 'block');\n drawRects({\n container: group.node(),\n points,\n className: seriesClassName,\n transition,\n style: {},\n keyFn: d => dimensions.map(key => d._data[key]).join('-')\n });\n }\n });\n return this;\n }\n\n /**\n *\n *\n * @param {*} normalizedData\n * @param {*} keys\n * @returns\n * @memberof BarLayer\n */\n generateDataPoints (normalizedData, keys) {\n const [barWidthMetrics, barHeightMetrics] = getPlotMeasurement(this, keys);\n const barWidthOffsets = barWidthMetrics.offsetValues || [];\n const barHeightOffsets = barHeightMetrics.offsetValues || [];\n this._plotSpan = {\n x: barWidthMetrics.groupSpan || 0,\n y: barHeightMetrics.groupSpan || 0\n };\n this._plotPadding = {\n x: barWidthMetrics.padding || 0,\n y: barHeightMetrics.padding || 0\n };\n\n this._pointMap = {};\n return normalizedData.map((data, i) => this.translatePoints(data,\n {\n barWidth: barWidthMetrics.span,\n barWidthOffset: barWidthOffsets[i] || 0,\n barHeight: barHeightMetrics.span,\n barHeightOffset: barHeightOffsets[i] || 0\n }));\n }\n\n getPlotPadding () {\n return this._plotPadding;\n }\n\n /**\n * Gets the nearest point of the position passed.\n * @param {number} x x position\n * @param {number} y y position\n * @return {Object} Nearest point.\n */\n getNearestPoint (x, y) {\n if (!this.data()) {\n return null;\n }\n let axis;\n let value;\n let index;\n let points;\n let uniqueFieldType;\n let uniqueFieldIndex;\n let filterData;\n let identifiers;\n let pointFound = null;\n const dataModel = this.data();\n const dataObj = dataModel.getData();\n const fieldsConfig = dataModel.getFieldsConfig();\n const axes = this.axes();\n const data = dataObj.data;\n const pointMap = this._pointMap;\n const {\n xField,\n yField,\n xFieldSubType,\n yFieldSubType\n } = this.encodingFieldsInf();\n\n if (xFieldSubType === FieldType.MEASURE) {\n axis = axes.y;\n value = axis.invert(y);\n uniqueFieldIndex = fieldsConfig[yField].index;\n uniqueFieldType = yFieldSubType;\n } else {\n axis = axes.x;\n value = axis.invert(x);\n uniqueFieldIndex = fieldsConfig[xField].index;\n uniqueFieldType = xFieldSubType;\n }\n\n if (uniqueFieldType === DimensionSubtype.CATEGORICAL) {\n points = pointMap[value];\n }\n\n if (uniqueFieldType === DimensionSubtype.TEMPORAL) {\n filterData = [...new Set(data.map(d => d[uniqueFieldIndex]))];\n index = getClosestIndexOf(filterData, value);\n value = filterData[index];\n points = pointMap[value];\n }\n const len = points && points.length;\n points && points.sort((p1, p2) => p1.update.y - p2.update.y);\n for (let i = 0; i < len; i++) {\n const point = points[i];\n const update = point.update;\n if (x >= update.x && x <= (update.width + update.x) && y >= update.y && y <= (update.height + update.y)) {\n pointFound = point;\n break;\n }\n pointFound = null;\n }\n\n const values = pointFound && pointFound._data;\n if (values) {\n identifiers = this.getIdentifiersFromData(values, pointFound._id);\n }\n return pointFound ? {\n dimensions: [pointFound.update],\n id: identifiers,\n layerId: this.id()\n } : pointFound;\n }\n\n getPlotSpan () {\n return this._plotSpan;\n }\n}\n","import { CLASSPREFIX } from '../../enums/constants';\n\nexport const defaultConfig = {\n defClassName: 'layer-tick',\n className: '',\n classPrefix: CLASSPREFIX,\n interaction: {\n highlight: [{\n type: 'stroke',\n intensity: [0, 0, -15, 0]\n }],\n fade: [{\n type: 'stroke',\n intensity: [0, 0, 15, 0]\n }],\n focus: [{\n type: 'stroke',\n intensity: [0, 0, 15, 0]\n }]\n },\n innerPadding: 0.1,\n transform: {\n type: 'identity'\n },\n transition: {\n effect: 'cubic',\n duration: 1000\n },\n encoding: {\n color: { },\n x: {},\n y: {},\n x0: {},\n y0: {},\n strokeOpacity: {\n value: 0.5\n },\n fillOpacity: {\n value: 0.5\n }\n },\n states: {\n highlight: {\n className: `${CLASSPREFIX}-layer-tick-highlight`\n },\n fadeout: {\n className: `${CLASSPREFIX}-layer-tick-fadeout`\n },\n selected: {\n className: `${CLASSPREFIX}-layer-tick-selected`\n }\n }\n};\n","import { selectElement } from 'muze-utils';\n\n/**\n * Draws ticks by using d3 selection\n * @param {Object} params Contains container element and points\n * @return {Selection} Ticks Selection\n */\nexport default /* istanbul ignore next */ (params) => {\n const { points, container, keyFn, className } = params;\n const mount = selectElement(container);\n const ticks = mount.selectAll('path').data(points, keyFn);\n const ticksEnter = ticks.enter().append('path');\n\n mount.attr('class', className || '');\n ticksEnter.each(function (d) {\n const selection = selectElement(this);\n const enter = d.enter || {};\n Object.entries(enter).forEach(attr => (!isNaN(attr[1]) && selection.attr(attr[0], attr[1])));\n });\n\n ticks.exit().remove();\n return ticks.merge(ticksEnter)\n .each(function (d) {\n const selection = selectElement(this);\n const update = d.update;\n const updateStyle = d.style || {};\n const x0 = update.x0 !== undefined ? update.x0 : update.x;\n const y0 = update.y0 !== undefined ? update.y0 : update.y;\n const path = `M ${update.x} ${update.y} L ${x0} ${y0}`;\n d.className && selection.classed(d.className, true);\n selection.attr('d', path);\n Object.entries(updateStyle).forEach(styleObj => selection.style(styleObj[0], styleObj[1]));\n });\n};\n\n","import { FieldType } from 'muze-utils';\nimport { PointLayer } from '../point';\nimport { defaultConfig } from './default-config';\nimport * as PROPS from '../../enums/props';\nimport { ENCODING } from '../../enums/constants';\nimport drawTicks from './renderer';\nimport './styles.scss';\nimport { getAxesScales, getLayerColor, positionPoints, getIndividualClassName } from '../../helpers';\n\nexport default class TickLayer extends PointLayer {\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof TickLayer\n */\n static defaultConfig () {\n return defaultConfig;\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof TickLayer\n */\n static formalName () {\n return 'tick';\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof TickLayer\n */\n static drawFn () {\n return drawTicks;\n }\n\n /**\n *\n *\n * @returns\n * @memberof TickLayer\n */\n elemType () {\n return 'path';\n }\n\n /**\n * Generates an array of objects containing x, y, width and height of the points from the data\n * @param {Array.} data Data Array\n * @param {Object} encoding Config\n * @param {Object} axes Axes object\n * @return {Array.} Array of points\n */\n translatePoints (data, encoding, axes, config = {}) {\n let points = [];\n const {\n xAxis,\n yAxis\n } = getAxesScales(axes);\n const fieldsConfig = this.data().getFieldsConfig();\n const {\n xField,\n yField,\n x0Field,\n y0Field,\n xFieldType,\n yFieldType\n } = this.encodingFieldsInf();\n const isXDim = xFieldType === FieldType.DIMENSION;\n const isYDim = yFieldType === FieldType.DIMENSION;\n const key = isXDim ? ENCODING.X : (isYDim ? ENCODING.Y : null);\n const colorEncoding = encoding.color;\n const colorField = colorEncoding && colorEncoding.field;\n const colorFieldIndex = fieldsConfig[colorField] && fieldsConfig[colorField].index;\n const measurement = this._store.get(PROPS.MEASUREMENT);\n const colorAxis = axes.color;\n const { x: offsetX, y: offsetY } = config.offset;\n const { x: xSpan, y: ySpan } = config.span;\n for (let i = 0, len = data.length; i < len; i++) {\n let xPx;\n let x0Px;\n let y0Px;\n let yPx;\n const d = data[i];\n const row = d._data;\n if (xField) {\n xPx = xAxis.getScaleValue(d.x) + offsetX;\n x0Px = xPx + xSpan;\n }\n\n if (yField) {\n yPx = yAxis.getScaleValue(d.y) + offsetY;\n y0Px = yPx !== null ? yPx + ySpan : null;\n }\n\n if (!xField) {\n xPx = 0;\n x0Px = measurement.width;\n if (!isNaN(yPx)) {\n yPx += ySpan / 2;\n y0Px = yPx;\n }\n }\n\n if (!yField) {\n yPx = 0;\n y0Px = measurement.height;\n x0Px = xPx += xSpan / 2;\n }\n\n if (x0Field) {\n x0Px = xAxis.getScaleValue(d.x0) + xSpan;\n yPx += ySpan / 2;\n y0Px -= ySpan / 2;\n }\n\n if (y0Field) {\n y0Px = yAxis.getScaleValue(d.y0) + ySpan;\n xPx += xSpan / 2;\n x0Px -= xSpan / 2;\n }\n const style = {};\n const meta = {};\n const { color, rawColor } = getLayerColor({ datum: d, index: i },\n { colorEncoding, colorAxis, colorFieldIndex });\n\n style.stroke = color;\n meta.stateColor = {};\n meta.originalColor = rawColor;\n meta.colorTransform = {};\n if (!isNaN(xPx) && !isNaN(yPx)) {\n const point = {\n enter: {},\n update: {\n x: xPx,\n y: yPx,\n x0: x0Px,\n y0: y0Px\n },\n style,\n _data: row,\n _id: d._id,\n source: row,\n rowId: d._id,\n meta\n };\n point.className = getIndividualClassName(d, i, data, this);\n points.push(point);\n this.cachePoint(d[key], point);\n }\n }\n points = positionPoints(this, points);\n return points;\n }\n\n getMeasurementConfig (offsetX, offsetY, widthSpan, heightSpan) {\n return {\n offset: {\n x: (offsetX || 0),\n y: (offsetY || 0)\n },\n span: {\n x: widthSpan,\n y: heightSpan\n }\n };\n }\n}\n","import { isSimpleObject, mergeRecursive, getObjProp } from 'muze-utils';\n\nconst parseLayerDefinition = (sink, definition, layerDef, layerType) => {\n for (const key in definition) {\n if (Object.hasOwnProperty.call(definition, key)) {\n let strs;\n let propValue;\n const def = definition[key];\n if (isSimpleObject(def)) {\n sink[key] = {};\n parseLayerDefinition(sink[key], def, layerDef, layerType);\n } else if (typeof def === 'string' && (strs = def.split('.')) && strs[0] === layerType) {\n propValue = getObjProp(layerDef, ...strs.slice(1, strs.length));\n if (propValue !== undefined) {\n sink[key] = propValue;\n }\n } else {\n sink[key] = def;\n }\n }\n }\n};\n\nconst sanitizeEncoding = (encoding) => {\n // Create object for each encoding value if encoding value is a string\n for (const key in encoding) {\n if (typeof encoding[key] === 'string') {\n encoding[key] = {\n field: encoding[key]\n };\n }\n }\n};\n\n/**\n * Layer Factory creates layers based on the layer type. All types of layers needs to register in\n * the layer factory. For getting a layer instance, getLayer method needs to invoked with the\n * layerType and other arguments.\n */\nconst layerFactory = (() => {\n const compositeLayers = {};\n const factoryObj = {\n setLayerRegistry: (reg) => {\n factoryObj._layerRegistry = reg;\n },\n getSerializedConf: (mark, layerDef) => {\n let serializedDefs;\n const defs = compositeLayers[mark];\n const newConf = mergeRecursive({}, layerDef);\n\n // If it is a composite layer then resolve all the definitions of each unit layer\n if (defs) {\n serializedDefs = defs.map((unitLayerDef) => {\n const sDef = {};\n parseLayerDefinition(sDef, unitLayerDef, newConf, mark);\n sanitizeEncoding(sDef.encoding);\n return sDef;\n });\n } else {\n const encoding = newConf.encoding;\n // Create object for each encoding value if encoding value is a string\n sanitizeEncoding(encoding);\n serializedDefs = newConf;\n }\n\n return serializedDefs;\n },\n getLayerInstance: (layerDef) => {\n const layerRegistry = factoryObj._layerRegistry;\n layerDef = !(layerDef instanceof Array) ? [layerDef] : layerDef;\n const instances = layerDef.map((layerObj) => {\n const layerConstructor = layerRegistry[layerObj.mark];\n return layerConstructor.create();\n });\n return instances.length === 1 ? instances[0] : instances;\n },\n composeLayers: (layerType, layerDefs) => {\n compositeLayers[layerType] = layerDefs;\n },\n sanitizeLayerConfig: (layerDef) => {\n const newConf = mergeRecursive({}, layerDef);\n sanitizeEncoding(newConf.encoding);\n return newConf;\n }\n };\n return factoryObj;\n})();\n\nexport default layerFactory;\n","import { AreaLayer } from './layers/area';\nimport { ArcLayer } from './layers/arc';\nimport { LineLayer } from './layers/line';\nimport { TextLayer } from './layers/text';\nimport { PointLayer } from './layers/point';\nimport { BarLayer } from './layers/bar';\nimport { BaseLayer } from './base-layer';\nimport * as CONSTANTS from './enums/constants';\nimport { TickLayer } from './layers/tick';\n\nexport const DEFAULT_LAYERS = {\n [CONSTANTS.AREA_LAYER]: AreaLayer,\n [CONSTANTS.ARC_LAYER]: ArcLayer,\n [CONSTANTS.LINE_LAYER]: LineLayer,\n [CONSTANTS.TEXT_LAYER]: TextLayer,\n [CONSTANTS.POINT_LAYER]: PointLayer,\n [CONSTANTS.TICK_LAYER]: TickLayer,\n [CONSTANTS.BAR_LAYER]: BarLayer,\n [CONSTANTS.BASE_LAYER]: BaseLayer\n};\n","/**\n * This file exports constants that are used as enums in the\n * crosstab group implementation.\n */\n/**\n * Width of the crosstab.\n */\nexport const X = 'x';\n/**\n * Width of the crosstab.\n */\nexport const Y = 'y';\n/**\n * Width of the crosstab.\n */\nexport const WIDTH = 'width';\n\n/**\n * Height of the crosstab.\n */\nexport const HEIGHT = 'height';\n\n/**\n * Field referring to object storing measurement configuration.\n */\nexport const MEASUREMENT = 'measurement';\n\n/**\n * Field referring to object storing configuration properties.\n */\nexport const CONFIG = 'config';\n\n/**\n * Width of visual unit in crosstab.\n */\nexport const MIN_UNIT_WIDTH = 'minUnitWidth';\n\n/**\n * Height of visual unit.\n */\nexport const MIN_UNIT_HEIGHT = 'minUnitHeight';\n\n/**\n * Field to store the array of dimensions to facet by.\n */\nexport const DIMENSIONS = 'dimensions';\n\n/**\n * Field to store array of measures to use as x axis.\n */\nexport const MEASURES = 'measures';\n\n/**\n * Field to store the array of dimensions to facet by.\n */\nexport const DIMENSION = 'dimension';\n\n/**\n * Field to store array of measures to use as x axis.\n */\nexport const MEASURE = 'measure';\n\n/**\n * Flag to specify if model should be pivoted.\n */\nexport const PIVOT = 'pivot';\n\n/**\n * Flag to specify format\n */\nexport const FORMAT = 'format';\n\n/**\n * Mount point where the variable will be hosted\n */\nexport const MOUNT = 'mount';\n\n/**\n * Data update flag\n */\nexport const HAS_DATA_UPDATED = 'hasDataUpdated';\n\n/**\n * Field referring to object storing set of rows\n */\nexport const ROWS = 'rows';\n\n/**\n * Field referring to object storing set of columns\n */\nexport const COLUMNS = 'columns';\n\n/**\n * Field referring to object storing set of columns\n */\nexport const COL = 'col';\n\n/**\n * Field referring to object storing set of rows\n */\nexport const ROW = 'row';\n\n/**\n * Field referring to object storing set of columns\n */\nexport const COLUMN = 'column';\n\n/**\n * Field referring to object storing color field\n */\nexport const COLOR = 'color';\n\n/**\n * Field referring to object storing shape field\n */\nexport const SHAPE = 'shape';\n\n/**\n * Field referring to object storing size field\n */\nexport const SIZE = 'size';\n\n/**\n * Field referring to object storing detail field\n */\nexport const DETAIL = 'detail';\n\n/**\n * Field referring to object storing set of layers\n */\nexport const LAYERS = 'layers';\n\n/**\n * Field referring to object storing the transforms\n */\nexport const TRANSFORM = 'transform';\n\n/**\n * Field referring to object storing the transforms\n */\nexport const ORDINAL = 'ordinal';\n\n/**\n * Field referring to object storing the transforms\n */\nexport const LINEAR = 'linear';\n/**\n * Field referring to object storing the transforms\n */\nexport const LEFT = 'left';\n/**\n * Field referring to object storing the transforms\n */\nexport const RIGHT = 'right';\n/**\n * Field referring to object storing the transforms\n */\nexport const TOP = 'top';\n/**\n * Field referring to object storing the transforms\n */\nexport const BOTTOM = 'bottom';\n\n/**\n * Field referring to object storing the transforms\n */\nexport const RETINAL = 'retinal';\n/**\n * Field referring to object storing the transforms\n */\nexport const CELL = 'cell';\n/**\n * Field referring to object storing the transforms\n */\nexport const X_AXES = 'xAxes';\n/**\n * Field referring to object storing the transforms\n */\nexport const Y_AXES = 'yAxes';\n/**\n * Field referring to object storing the transforms\n */\nexport const ENTRY_CELLS = 'entryCell';\n/**\n * Field referring to object storing the transforms\n */\nexport const INITIALIZED = 'initialized';\n/**\n * Field referring to object storing the transforms\n */\nexport const EXIT_CELLS = 'exitCell';\n/**\n * Field referring to object storing the transforms\n */\nexport const AXIS = 'axis';\n/**\n * Field referring to object storing the transforms\n */\nexport const UNIT = 'unit';\n/**\n * Field referring to object storing the transforms\n */\nexport const UPDATED = 'updated';\n/**\n * Field referring to object storing the transforms\n */\nexport const BEFORE_UPDATE = 'beforeupdate';\n/**\n * Field referring to object storing the transforms\n */\nexport const VALUE_MATRIX = 'valueMatrix';\n/**\n * Field referring to object storing the transforms\n */\nexport const FACET_HEADERS = 'facet-headers';\n/**\n * Field referring to object storing the transforms\n */\nexport const RADIUS = 'radius';\n/**\n * Field referring to object storing the transforms\n */\nexport const ANGLE = 'angle';\n/**\n * Field referring to object storing the transforms\n */\nexport const ARC = 'arc';\n/**\n * Field referring to object storing the transforms\n */\nexport const CARTESIAN = 'cartesian';\n/**\n * Field referring to object storing the transforms\n */\nexport const POLAR = 'polar';\n/**\n * Field referring to object storing the transforms\n */\nexport const CATEGORICAL = 'categorical';\n/**\n * Field referring to object storing the transforms\n */\nexport const TEMPORAL = 'temporal';\n/**\n * Field referring to object storing the transforms\n */\nexport const BAR = 'bar';\n/**\n * Field referring to object storing the transforms\n */\nexport const LINE = 'line';\n/**\n * Field referring to object storing the transforms\n */\nexport const POINT = 'point';\n/**\n * Field referring to object storing the transforms\n */\nexport const PRIMARY = 'Primary';\n/**\n * Field referring to object storing the transforms\n */\nexport const SECONDARY = 'Secondary';\n/**\n * Field referring to object storing the transforms\n */\nexport const BOTH = 'both';\n/**\n * Field referring to object storing the transforms\n */\nexport const INTERACTION = 'interaction';\n/**\n * Field referring to object storing the transforms\n */\nexport const GRID_LINES = 'gridLines';\n/**\n * Field referring to object storing the transforms\n */\nexport const GRID_BANDS = 'gridBands';\n/**\n * Field referring to object storing the transforms\n */\nexport const HEADER = 'header';\n/**\n * Field referring to object storing the transforms\n */\nexport const FACET = 'facet';\n\n","import { ROWS, COLUMNS, COLOR, SHAPE, SIZE, DETAIL, LAYERS, TRANSFORM, CONFIG } from '../enums/constants';\n\n/**\n * @module\n * This is the local options semantics based on which setters getters are created and reactivity is initiated.\n * This local object is only valid for Artboard.\n * Artboard merges global and local object both to the model\n *\n * Format\n * PROPERTRY_NAME: {\n * value: // default value of the property,\n * meta: {\n * typeCheck: // The setter value will be checked using this. If the value is function then the setter value\n * // is passed as args.\n * typeExpected: // The output of typecheck action will be tested against this. Truthy value will set the\n * // value to the setter\n * sanitizaiton: // Need for sanitization before type is checked\n * }\n * }\n */\n\nexport default {\n [CONFIG]: {},\n [ROWS]: [],\n [COLUMNS]: [],\n [COLOR]: '',\n [SHAPE]: '',\n [SIZE]: '',\n [DETAIL]: '',\n [LAYERS]: '',\n [TRANSFORM]: []\n};\n","import { ERROR_MSG } from 'muze-utils';\n\n/**\n * Interfaces for VisualGroup. Any new VisualGroup has to implement this class.\n * @class SimpleGroup\n */\nclass SimpleGroup {\n\n /**\n * This method is used to set or get the DataModel instance.\n *\n * @param {DataModel | undefined} dataModel Instance of datamodel.\n\n * @memberof SimpleGroup\n */\n data () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * This method is used to set or get the group specific configuration\n * properties\n *\n * @param {Object | undefined} configObj The input configuration.\n * or instance of visual group.\n * @memberof SimpleGroup\n */\n config () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * This method is used to return a serialized representation of the\n * instance's properties.\n *\n * @memberof SimpleGroup\n */\n serialize () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * This method is used to get or set the measurement object which houses\n * layout properties like width and height.\n *\n * @param {Object | undefined} mObj The measurement properties.\n * @memberof SimpleGroup\n */\n measurement () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n}\n\nexport default SimpleGroup;\n","import { ERROR_MSG } from 'muze-utils';\n\n/**\n *\n *\n * @export\n * @class Variable\n */\nexport default class Variable {\n\n /**\n *\n *\n * @memberof Variable\n */\n type () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n *\n *\n * @memberof Variable\n */\n toString () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n}\n","import Variable from './variable';\n\n/**\n *\n *\n * @class ComposeVars\n * @extends {Variable}\n */\nclass ComposedVars extends Variable {\n\n /**\n *Creates an instance of ComposeVars.\n * @param {*} texts\n * @memberof ComposeVars\n */\n constructor (...texts) {\n super(...texts);\n this.vars(texts);\n }\n\n /**\n *\n *\n * @param {*} params\n * @returns\n * @memberof ComposeVars\n */\n vars (...params) {\n if (params.length) {\n this._vars = params[0];\n return this;\n }\n return this._vars;\n }\n\n /**\n *\n *\n * @param {*} dm\n * @returns\n * @memberof ComposeVars\n */\n data (...dm) {\n if (dm.length) {\n this.vars().forEach(d => d.data(dm[0]));\n return this;\n }\n return this._data;\n }\n\n /**\n *\n *\n * @returns\n * @memberof ComposeVars\n */\n getMembers () {\n const vars = this.vars();\n return vars.map(member => member.getMembers()[0]);\n }\n\n /**\n *\n *\n * @returns\n * @memberof ComposeVars\n */\n type () {\n return this.vars()[0].type();\n }\n\n /**\n *\n *\n * @returns\n * @memberof ComposeVars\n */\n toString () {\n return this.vars().map(d => d.toString()).join(',');\n }\n\n /**\n *\n *\n * @returns\n * @memberof ComposeVars\n */\n numberFormat () {\n return this.vars()[0].numberFormat();\n }\n\n /**\n *\n *\n * @returns\n * @memberof ComposeVars\n */\n format (values) {\n return this.vars()[0].format(values);\n }\n\n /**\n *\n *\n * @returns\n * @memberof ComposedVars\n */\n subtype () {\n return this.vars()[0].subtype();\n }\n\n /**\n *\n *\n * @returns\n * @memberof ComposedVars\n */\n getMinDiff () {\n return this.vars()[0].getMinDiff();\n }\n}\n\nexport default ComposedVars;\n","import { DateTimeFormatter } from 'muze-utils';\nimport Variable from './variable';\n\n/**\n *\n *\n * @export\n * @class Vars\n * @extends {Variable}\n */\nexport default class SimpleVariable extends Variable {\n\n /**\n *Creates an instance of Vars.\n * @param {*} text\n * @memberof Vars\n */\n constructor (text) {\n super();\n this.oneVar(text);\n }\n\n /**\n *\n *\n * @param {*} params\n * @returns\n * @memberof Vars\n */\n oneVar (...oneV) {\n if (oneV.length) {\n this._oneVar = oneV[0];\n return this;\n }\n return this._oneVar;\n }\n\n /**\n *\n *\n * @param {*} dm\n * @returns\n * @memberof Vars\n */\n data (...dm) {\n if (dm.length) {\n this._data = dm[0];\n return this;\n }\n return this._data;\n }\n\n /**\n *\n *\n * @returns\n * @memberof Vars\n */\n toString () {\n return this.oneVar();\n }\n\n /**\n *\n *\n * @memberof SimpleVariable\n */\n numberFormat () {\n if (this.type() === 'measure') {\n const formatter = this.data().getFieldspace().getMeasure()[this.oneVar()]._ref;\n return formatter.numberFormat();\n } return val => val;\n }\n\n /**\n *\n *\n * @memberof SimpleVariable\n */\n format (values) {\n if (values && this.subtype() === 'temporal') {\n const formatter = this.data().getFieldspace().getDimension()[this.oneVar()]._ref.schema.format;\n const dtFormat = new DateTimeFormatter(formatter);\n values = values.map(e => dtFormat.getNativeDate(e));\n }\n return values;\n }\n\n /**\n *\n *\n * @returns\n * @memberof Vars\n */\n getMembers () {\n return [this.oneVar()];\n }\n\n /**\n *\n *\n * @returns\n * @memberof Vars\n */\n type () {\n const fieldDef = this.data().getFieldsConfig()[this.oneVar()].def;\n return fieldDef.type;\n }\n\n /**\n *\n *\n * @returns\n * @memberof Vars\n */\n subtype () {\n const fieldDef = this.data().getFieldsConfig()[this.oneVar()].def;\n return fieldDef.subtype || fieldDef.type;\n }\n\n /**\n *\n *\n * @returns\n * @memberof SimpleVariable\n */\n getMinDiff () {\n const fieldSpace = this.data().getFieldspace();\n return fieldSpace.fieldsObj()[this.oneVar()].getMinDiff();\n }\n\n equals (varInst) {\n return this.oneVar() === varInst.oneVar();\n }\n}\n","import { ComposedVars, SimpleVariable } from '../variable';\nimport { DIMENSION, COLUMNS, ROWS, TEMPORAL } from '../enums/constants';\n\n/**\n * Gets the list of fields in a sorted order by measurement and dimension\n *\n * @param {Array} fieldList List of fields in the view\n * @param {Object} fieldMap Mapping of fields in the datamodel\n * @return {Array} fields sorted by measurement and dimensions\n */\nconst orderFields = (fieldArray, type) => {\n const dimensionArr = [[], []];\n const measureArr = [[], []];\n const temporalArr = [[], []];\n const categoricalArr = [[], []];\n\n fieldArray.forEach((fieldList, index) => {\n fieldList.forEach((field) => {\n if (field.type() === DIMENSION) {\n dimensionArr[index].push(field);\n field.subtype() === TEMPORAL ? temporalArr[index].push(field) : categoricalArr[index].push(field);\n } else {\n measureArr[index].push(field);\n }\n });\n });\n\n const numOfMeasures = measureArr[0].length + (measureArr[1] ? measureArr[1].length : 0);\n\n // Single array of fields\n if (!fieldArray[1]) {\n // Push measures to bottom\n measureArr[1] = type === COLUMNS ? measureArr[0] : [];\n // Push measures to left\n measureArr[0] = type !== COLUMNS ? measureArr[0] : [];\n // Bottom and right dimensions empty\n dimensionArr[1] = [];\n // Left and top filled with dimensions\n dimensionArr[0] = dimensionArr[0];\n if (numOfMeasures === 0) {\n const allDimensions = [...dimensionArr[0], ...dimensionArr[1]];\n if (type === COLUMNS) {\n dimensionArr[1] = allDimensions[allDimensions.length - 1] ? [allDimensions[allDimensions.length - 1]]\n : [];\n allDimensions.splice(-1, 1);\n } else {\n dimensionArr[1] = [];\n }\n dimensionArr[0] = [...allDimensions];\n }\n }\n\n if (dimensionArr[0].length && dimensionArr[1].length && numOfMeasures > 0) {\n dimensionArr[0] = [...dimensionArr[0], ...dimensionArr[1]];\n dimensionArr[1] = [];\n }\n return {\n fields: dimensionArr.map((list, i) => (i === 1 ?\n measureArr[i].concat(dimensionArr[i]) : dimensionArr[i].concat(measureArr[i]))),\n dimensions: [...dimensionArr[0], ...dimensionArr[1]],\n measures: [...measureArr[0], ...measureArr[1]],\n temporal: [...temporalArr[0], ...temporalArr[1]],\n categorical: [...categoricalArr[0], ...categoricalArr[1]]\n };\n};\n\n/**\n * Gets the list of normalized fields\n *\n * @param {Array} fields List of fields in the view\n * @param {Object} fieldMap Mapping of fields in the datamodel\n * @return {Array} fields normalized by measurement and dimensions\n */\nconst normalizeFields = (config, type) => {\n const fieldsArr = [];\n const fields = config[type];\n\n if (!(fields[0] instanceof Array)) {\n fieldsArr[0] = fields;\n } else {\n fieldsArr[0] = fields[0] || [];\n fieldsArr[1] = fields[1] || [];\n }\n return fieldsArr;\n};\n\n/**\n *\n *\n * @param {*} fields\n * @param {*} datamodel\n * @return\n */\nconst convertToVar = (datamodel, fields) => {\n const vars = [];\n\n fields && fields.forEach((field) => {\n if (field instanceof ComposedVars) {\n vars.push(field);\n field.data(datamodel);\n } else {\n vars.push(new SimpleVariable(field).data(datamodel));\n }\n });\n return vars;\n};\n\n/**\n *\n *\n * @param {*} rows\n * @param {*} columns\n * @param {*} datamodel\n * @return\n */\nexport const transformFields = (datamodel, config) => {\n const [rowsInfo, columnsInfo] = [ROWS, COLUMNS].map((fields) => {\n const normalizedFields = normalizeFields(config, fields);\n const norFields = [convertToVar(datamodel, normalizedFields[0])];\n\n if (normalizedFields[1]) {\n norFields[1] = convertToVar(datamodel, normalizedFields[1]);\n }\n return orderFields(norFields, fields);\n });\n const {\n fields: rows,\n dimensions: rowDimensions,\n measures: rowMeasures,\n temporal: rowTemporalFields,\n categorical: rowCategoricalFields\n } = rowsInfo;\n const {\n fields: columns,\n dimensions: columnDimensions,\n measures: columnMeasures,\n temporal: columnTemporalFields,\n categorical: columnCategoricalFields\n } = columnsInfo;\n return {\n rows,\n rowDimensions,\n rowMeasures,\n rowTemporalFields,\n rowCategoricalFields,\n columns,\n columnTemporalFields,\n columnCategoricalFields,\n columnDimensions,\n columnMeasures\n };\n};\n","import { ERROR_MSG, mergeRecursive } from 'muze-utils';\nimport { transformFields } from './field-sanitizer';\nimport { getHeaderAxisFrom } from '../group-helper/group-utils';\nimport { ROW, COLUMN } from '../enums/constants';\n\n/**\n *\n *\n * @export\n * @class VisualEncoder\n */\nexport default class VisualEncoder {\n\n /**\n *\n *\n * @memberof VisualEncoder\n */\n createAxis () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n *\n *\n * @memberof VisualEncoder\n */\n setCommonDomain () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n *\n *\n * @memberof VisualEncoder\n */\n getLayerConfig () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n fieldInfo (...info) {\n if (info.length) {\n this._fieldInfo = mergeRecursive(this._fieldInfo || {}, info[0]);\n return this;\n }\n return this._fieldInfo;\n }\n\n /**\n *\n *\n * @param {*} datamodel\n * @param {*} config\n * @return\n * @memberof VisualEncoder\n */\n fieldSanitizer (datamodel, config) {\n this.fieldInfo(transformFields(datamodel, config));\n return this.fieldInfo();\n }\n\n /**\n *\n *\n * @param {*} params\n * @return\n * @memberof VisualEncoder\n */\n axisFrom (...params) {\n if (params.length) {\n this._axisFrom = params[0];\n return this;\n }\n return this._axisFrom;\n }\n\n /**\n *\n *\n * @param {*} params\n * @return\n * @memberof VisualEncoder\n */\n headerFrom (...params) {\n if (params.length) {\n this._headerFrom = params[0];\n return this;\n }\n return this.__headerFrom;\n }\n\n /**\n *\n *\n * @param {*} axisFrom\n * @return\n * @memberof CartesianEncoder\n */\n setAxisAndHeaders (axisFrom = {}, fields) {\n const [rowHeader, rowAxis] = getHeaderAxisFrom(ROW, fields.rows, axisFrom);\n const [colHeader, colAxis] = getHeaderAxisFrom(COLUMN, fields.columns, axisFrom);\n\n this.axisFrom({\n row: rowAxis,\n column: colAxis\n });\n this.headerFrom({\n row: rowHeader,\n column: colHeader\n });\n return this;\n }\n}\n","import { ContinousAxis, BandAxis, TimeAxis, ColorAxis, SizeAxis, ShapeAxis } from '@chartshq/muze-axis';\n\nexport const scaleMaps = {\n linear: ContinousAxis,\n band: BandAxis,\n temporal: TimeAxis,\n size: SizeAxis,\n color: ColorAxis,\n shape: ShapeAxis\n};\n","import { ScaleType } from '@chartshq/muze-axis';\n\n/**\n * Map of DataModel types to associated field types.\n */\nexport const dataTypeScaleMap = {\n dimension: ScaleType.BAND,\n categorical: ScaleType.BAND,\n measure: ScaleType.LINEAR,\n temporal: ScaleType.TIME\n};\n\n","import { mergeRecursive } from 'muze-utils';\nimport { AxisOrientation } from '@chartshq/muze-axis';\nimport { scaleMaps } from '../enums/scale-maps';\nimport { getAxisType, getAxisKey } from '../group-helper';\nimport { dataTypeScaleMap } from '../data-type-scale-map';\nimport { CATEGORICAL, TEMPORAL, BAR, LINE, POINT, BOTH, Y } from '../enums/constants';\n\n/**\n *\n *\n * @param {*} axisInfo\n * @param {*} field\n * @param {*} axesCreators\n * @return\n */\nconst getAxisConfig = (axisInfo, field, axesCreators) => {\n let axisOrientation;\n const { index, axisIndex, axisType } = axisInfo;\n const { config, position } = axesCreators;\n const userAxisConfig = config.axes ? (config.axes[axisType] || {}) : {};\n const {\n LEFT,\n RIGHT,\n TOP,\n BOTTOM\n } = AxisOrientation;\n const allOrientations = axisType === Y ? [LEFT, RIGHT] : [TOP, BOTTOM];\n\n if (position === BOTH) {\n axisOrientation = allOrientations[axisIndex];\n } else {\n axisOrientation = position;\n }\n const axisConfig = {\n id: `${axisType}-${index}-${axisIndex}`,\n name: field.toString(),\n field: field.toString(),\n labels: { rotation: 0 },\n numberFormat: field.numberFormat(),\n orientation: axisOrientation,\n type: dataTypeScaleMap[field.subtype()]\n };\n userAxisConfig.tickValues = field.format(userAxisConfig.tickValues);\n userAxisConfig.domain = field.format(userAxisConfig.domain);\n\n return mergeRecursive(axisConfig, userAxisConfig);\n};\n\n/**\n *\n *\n * @param {*} axisInfo\n * @param {*} field\n * @param {*} axesCreators\n * @return\n */\nconst createSimpleAxis = (axisConfig, field, axesCreators) => {\n const { labelManager } = axesCreators;\n const Cls = scaleMaps[dataTypeScaleMap[field.subtype()]];\n const simpleAxis = new Cls(axisConfig, { labelManager });\n return simpleAxis;\n};\n\n/**\n *\n *\n * @param {*} axisType\n * @param {*} fieldInfo\n * @param {*} axesCreators\n * @param {*} groupAxes\n * @return\n */\nexport const generateAxisFromMap = (axisType, fieldInfo, axesCreators, groupAxes) => {\n let axisKey;\n const currentAxes = [];\n const { fields, index } = fieldInfo;\n const { cacheMaps } = axesCreators;\n const map = cacheMaps[`${axisType}AxesMap`];\n\n fields.forEach((field, axisIndex) => {\n axisKey = getAxisKey(axisType, index, dataTypeScaleMap[field.subtype()]);\n const axisConfig = getAxisConfig({ index, axisIndex, axisType }, field, axesCreators);\n\n if (!map.has(axisKey)) {\n const xAxis = createSimpleAxis(axisConfig, field, axesCreators);\n currentAxes.push(xAxis);\n } else {\n const axes = map.get(axisKey);\n axes[axisIndex] = axes[axisIndex] ? axes[axisIndex] : createSimpleAxis(axisConfig, field, axesCreators);\n axes[axisIndex]._rotationLock = false;\n axes[axisIndex] && axes[axisIndex].config(axisConfig).domain(axisConfig.domain || []);\n }\n });\n\n if (currentAxes.length) {\n map.set(axisKey, currentAxes);\n }\n\n for (const [key] of map.entries()) {\n if (key === axisKey) {\n groupAxes.add(axisKey);\n }\n }\n return map.get(axisKey);\n};\n\n/**\n *\n *\n * @memberof MatrixResolver\n */\nexport const mutateAxesFromMap = (cacheMaps, axes) => {\n const {\n xAxesMap,\n yAxesMap\n } = cacheMaps;\n const {\n x: xAxisSet,\n y: yAxisSet\n } = axes;\n const xAxes = [];\n const yAxes = [];\n\n xAxisSet.forEach((axisId) => {\n const xAxis = xAxesMap.get(axisId);\n xAxes.push(xAxis);\n });\n yAxisSet.forEach((axisId) => {\n const yAxis = yAxesMap.get(axisId);\n yAxes.push(yAxis);\n });\n return {\n xAxes, yAxes\n };\n};\n\n/**\n * return a default mark based on predefined set of rules of type and subtype of the fields\n *\n * @param {string} colFieldType dimension/measure - temporal/ordinal/nominal\n * @param {string} rowFieldType dimension/measure - temporal/ordinal/nominal\n * @return {Object} return mark type\n */\nexport const getDefaultMark = (colFieldType, rowFieldType) => {\n let mark;\n\n if (colFieldType === CATEGORICAL || rowFieldType === CATEGORICAL) {\n mark = BAR;\n } else if (colFieldType === TEMPORAL || rowFieldType === TEMPORAL) {\n mark = LINE;\n } else {\n mark = POINT;\n }\n\n return mark;\n};\n\n/**\n *\n *\n * @param {*} axesCreators\n * @param {*} [fieldInfo=[]]\n * @return\n */\nexport const createRetinalAxis = (axesCreators, fieldProps = {}) => {\n const { axisType, fieldsConfig } = axesCreators;\n const field = fieldProps.field;\n const axis = [];\n const Cls = scaleMaps[axisType];\n\n fieldProps.type = fieldProps.type ? fieldProps.type : getAxisType(fieldsConfig, field || null);\n axis.push(new Cls(fieldProps));\n return axis;\n};\n\n/**\n *\n *\n * @param {*} arr\n * @param {*} val\n * @return\n */\nexport const getIndex = (arr, val) => {\n let i = 0;\n let arrIndex = -1;\n\n while (arrIndex === -1 && i < arr.length) {\n if (arr[i].toString() === val.toString()) {\n arrIndex = i;\n }\n i++;\n }\n return arrIndex;\n};\n\n/**\n *\n *\n * @param {*} colFields\n * @param {*} rowFields\n * @param {*} userLayerConfig\n * @return\n * @memberof CartesianEncoder\n */\nexport const getLayerConfFromFields = (colFields, rowFields, userLayerConfig) => userLayerConfig.filter((conf) => {\n const userConf = conf instanceof Array ? conf : [conf];\n const encodingArr = [].concat(...userConf.map(d => d.encoding).filter(d => d !== undefined));\n\n if (!encodingArr.length) {\n return true;\n }\n\n const xFields = [].concat(...encodingArr.map(d => [d.x && d.x.field, d.x0 && d.x0.field]))\n .filter(d => d !== undefined && d !== null);\n const yFields = [].concat(...encodingArr.map(d => [d.y && d.y.field, d.y0 && d.y0.field]))\n .filter(d => d !== undefined && d !== null);\n\n if (!xFields.length && !yFields.length) {\n return true;\n }\n\n const colFieldExist = xFields.length ? xFields.every(d => colFields.indexOf(d) !== -1) : false;\n const rowFieldExist = yFields.length ? yFields.every(d => rowFields.indexOf(d) !== -1) : false;\n if (xFields.length && yFields.length) {\n return colFieldExist && rowFieldExist;\n }\n return colFieldExist || rowFieldExist;\n});\n","import { layerFactory } from '@chartshq/visual-layer';\nimport { mergeRecursive } from 'muze-utils';\nimport { generateAxisFromMap, getDefaultMark, getIndex, getLayerConfFromFields } from './encoder-helper';\nimport { retriveDomainFromData } from '../group-helper';\n\nimport { ROW, COLUMN, COL, LEFT, TOP, CARTESIAN, MEASURE, BOTH, X, Y } from '../enums/constants';\nimport VisualEncoder from './visual-encoder';\n\n/**\n *\n *\n * @export\n * @class CartesianEncoder\n * @extends {VisualEncoder}\n */\nexport default class CartesianEncoder extends VisualEncoder {\n\n /**\n *\n *\n * @return\n * @memberof CartesianEncoder\n */\n static type () {\n return CARTESIAN;\n }\n\n /**\n *\n *\n * @param {*} axesCreators\n * @param {*} fieldInfo\n * @return\n * @memberof CartesianEncoder\n */\n createAxis (axesCreators, fieldInfo) {\n const geomCellAxes = {};\n const {\n axes\n } = axesCreators;\n const {\n projections,\n indices\n } = fieldInfo;\n const {\n rowFields,\n columnFields\n } = projections;\n const {\n rowIndex,\n columnIndex\n } = indices;\n const axisFields = [{\n fields: rowFields,\n index: rowIndex\n }, {\n fields: columnFields,\n index: columnIndex\n }];\n const xAxes = axes.x || [];\n const yAxes = axes.y || [];\n\n [rowFields, columnFields].forEach((fields, i) => {\n const type = i === 0 ? ROW : COLUMN;\n const axis = i === 0 ? Y : X;\n\n if (fields.length > 1) {\n axesCreators.position = BOTH;\n } else {\n axesCreators.position = this.axisFrom()[type];\n }\n geomCellAxes[axis] = generateAxisFromMap(axis, axisFields[i], axesCreators, axis === X ? xAxes : yAxes);\n });\n return geomCellAxes;\n }\n\n /**\n *\n *\n * @param {*} fields\n * @return\n * @memberof CartesianEncoder\n */\n getFacetsAndProjections (fields, type) {\n let facets = [];\n let projections = [];\n let counter = 0;\n const primaryFacets = [];\n const secondaryFacets = [];\n const primaryFields = fields[0];\n const secondaryFields = fields[1];\n const primaryLen = primaryFields.length;\n const secondaryLen = secondaryFields.length;\n const axisFrom = this.axisFrom();\n\n for (let i = 0; i < primaryLen; i++) {\n let projArr = [primaryFields[i]];\n const primaryField = primaryFields[i];\n\n if (primaryField.type() === MEASURE) {\n const secondaryField = secondaryFields[counter];\n if (secondaryField && secondaryField.type() === MEASURE) {\n counter++;\n projArr = [primaryField, secondaryField];\n }\n projections.push(projArr);\n } else {\n facets.push(primaryField);\n primaryFacets.push(primaryField);\n }\n }\n if (secondaryLen > counter) {\n for (let i = counter; i < secondaryLen; i++) {\n const secondaryField = secondaryFields[i];\n const projArr = [secondaryField];\n if (secondaryField.type() === MEASURE) {\n projections.push(projArr);\n } else {\n facets.push(secondaryField);\n secondaryFacets.push(secondaryField);\n }\n }\n }\n if ((primaryFacets.length || secondaryFacets.length) && !projections.length) {\n type = type === COL ? COLUMN : type;\n if ((axisFrom[type] === LEFT || axisFrom[type] === TOP) && primaryFacets.length) {\n const axisFromIndex = primaryFacets.length - 1;\n const facet = primaryFacets[axisFromIndex];\n projections = [[facet]];\n const existIndex = getIndex(secondaryFacets, facet);\n if (existIndex > -1) {\n projections = [[facet, facet]];\n secondaryFacets.splice(existIndex, 1);\n }\n primaryFacets.splice(axisFromIndex, 1);\n } else {\n const axisFromIndex = 0;\n const facet = secondaryFacets[axisFromIndex];\n projections = [[facet]];\n const existIndex = getIndex(primaryFacets, facet);\n if (existIndex > -1) {\n projections = [[facet, facet]];\n primaryFacets.splice(existIndex, 1);\n }\n secondaryFacets.splice(axisFromIndex, 1);\n }\n }\n\n facets = [...primaryFacets, ...secondaryFacets];\n facets = facets.filter((el, index, self) => index === self.findIndex(t => (t.toString() === el.toString())));\n return {\n facets,\n projections\n };\n }\n\n /**\n *\n *\n * @param {*} datamodel\n * @param {*} config\n * @return\n * @memberof CartesianEncoder\n */\n fieldSanitizer (datamodel, config) {\n return super.fieldSanitizer(datamodel, config);\n }\n\n /**\n *\n *\n * @param {*} datamodel\n * @return\n * @memberof CartesianEncoder\n */\n getRetinalFieldsDomain (dataModels, encoding) {\n const groupedModel = dataModels.groupedModel;\n const domains = {};\n for (const key in encoding) {\n if ({}.hasOwnProperty.call(encoding, key)) {\n const encodingObj = encoding[key];\n const field = encodingObj.field;\n if (!encodingObj.domain && field) {\n const domain = retriveDomainFromData(groupedModel, field);\n domains[field] = domain;\n }\n }\n }\n return domains;\n }\n\n /**\n *\n *\n * @param {*} layerArray\n * @memberof CartesianEncoder\n */\n serializeLayerConfig (layerArray) {\n const serializedLayers = [];\n // let currentLayerIndex = 0;\n layerArray.length && layerArray.forEach((layer, i) => {\n const def = layerFactory.sanitizeLayerConfig(layer);\n def.order = i;\n serializedLayers.push(def);\n });\n return serializedLayers;\n }\n\n /**\n *\n *\n * @param {*} fields\n * @param {*} userLayerConfig\n * @return\n * @memberof CartesianEncoder\n */\n getLayerConfig (fields, userLayerConfig) {\n const layerConfig = [];\n const {\n columnFields,\n rowFields\n } = fields;\n\n // let currentLayerIndex = 0;\n columnFields.forEach((colField) => {\n const colFieldName = colField.toString();\n rowFields.forEach((rowField) => {\n let configs = [];\n const rowFieldName = rowField.toString();\n const encoding = {\n x: {\n field: colFieldName\n },\n y: {\n field: rowFieldName\n }\n };\n const rowFieldType = rowField.subtype();\n const colFieldType = colField.subtype();\n const mark = getDefaultMark(colFieldType, rowFieldType);\n\n const defConfigs = [{\n mark,\n def: {\n mark,\n encoding\n }\n }];\n\n const layerConfigs = getLayerConfFromFields(colField.getMembers(),\n rowField.getMembers(), userLayerConfig || []);\n if (layerConfigs.length) {\n configs = layerConfigs.map((layerConf) => {\n const mergedLayerConf = mergeRecursive(mergeRecursive({}, defConfigs[0].def), layerConf);\n const serializedLayerConfig = layerFactory.getSerializedConf(mergedLayerConf.mark,\n mergedLayerConf);\n return {\n mark: mergedLayerConf.mark,\n order: mergedLayerConf.order,\n def: serializedLayerConfig\n };\n });\n } else {\n configs = defConfigs;\n }\n\n layerConfig.push(...configs);\n });\n });\n return layerConfig;\n }\n}\n\n","import { layerFactory } from '@chartshq/visual-layer';\nimport { mergeRecursive } from 'muze-utils';\nimport VisualEncoder from './visual-encoder';\nimport { RADIUS, ANGLE, SIZE, MEASURE, ARC, POLAR, COLOR } from '../enums/constants';\n/**\n *\n *\n * @export\n * @class PolarEncoder\n * @extends {VisualEncoder}\n */\nexport default class PolarEncoder extends VisualEncoder {\n\n /**\n *\n *\n * @param {*} axesCreators\n * @param {*} fieldInfo\n * @return\n * @memberof PolarEncoder\n */\n createAxis (axesCreators, fieldInfo) {\n const {\n axes\n } = axesCreators;\n const geomCellAxes = axes;\n const {\n indices\n } = fieldInfo;\n const {\n rowIndex,\n columnIndex\n } = indices;\n // Dummy axes for polar, to create blank cells\n const pieAxes = geomCellAxes.pie || [];\n\n pieAxes[rowIndex] = pieAxes[rowIndex] || [];\n pieAxes[rowIndex][columnIndex] = [];\n\n geomCellAxes.pie = pieAxes;\n geomCellAxes.x = null;\n geomCellAxes.y = null;\n\n return geomCellAxes;\n }\n\n /**\n *\n *\n * @param {*} fields\n * @return\n * @memberof CartesianEncoder\n */\n getFacetsAndProjections (fields) {\n let counter = 0;\n const facets = [];\n const projections = [];\n const primaryFields = fields[0];\n const secondaryFields = fields[1];\n const primaryLen = primaryFields.length;\n const secondaryLen = secondaryFields.length;\n\n for (let i = 0; i < primaryLen; i++) {\n const primaryField = primaryFields[i];\n if (primaryField.type() === MEASURE) {\n const secondaryField = secondaryFields[counter++];\n const projArr = secondaryField ? [primaryField, secondaryField] : [primaryField];\n projections.push(projArr);\n } else {\n facets.push(primaryField);\n }\n }\n if (secondaryLen > counter) {\n for (let i = counter; i < secondaryLen; i++) {\n const secondaryField = secondaryFields[i];\n const projArr = [secondaryField];\n if (secondaryField.type() === MEASURE) {\n projections.push(projArr);\n } else {\n facets.push(secondaryField);\n }\n }\n }\n return {\n facets,\n projections\n };\n }\n\n /**\n *\n *\n * @return\n * @memberof PolarEncoder\n */\n setCommonDomain () {\n // No domain to be set\n return this;\n }\n\n /**\n *\n *\n * @return\n * @memberof PolarEncoder\n */\n static type () {\n return POLAR;\n }\n\n layers (...layers) {\n if (layers.length) {\n this._layers = layers[0];\n return this;\n }\n return this._layers;\n }\n\n /**\n *\n *\n * @param {*} datamodel\n * @param {*} config\n * @memberof PolarEncoder\n */\n fieldSanitizer (datamodel, config) {\n let sanitizedRows = [[], []];\n let sanitizedColumns = [[], []];\n const fields = super.fieldSanitizer(datamodel, config);\n const {\n layers\n } = config;\n const {\n rows,\n columns\n } = fields;\n const layer = layers[0];\n const encoding = layer.encoding;\n const radius = encoding && encoding.radius ? encoding.radius.field : null;\n const angle = encoding && encoding.angle ? encoding.angle.field : null;\n const sanitizedFields = [sanitizedRows, sanitizedColumns];\n\n [rows, columns].forEach((fieldType, typeIndex) => {\n fieldType.forEach((fieldSet, i) => fieldSet.forEach((field) => {\n if (field.toString() !== radius && field.toString() !== angle && field.type() !== MEASURE) {\n sanitizedFields[typeIndex][i].push(field);\n }\n }));\n });\n sanitizedColumns = [...new Set(sanitizedColumns)];\n sanitizedRows = [...new Set(sanitizedRows)];\n this.fieldInfo({ rows: sanitizedRows, columns: sanitizedColumns });\n return this.fieldInfo();\n }\n\n getRetinalFieldsDomain (dataModels, encoding, facetFields, groupBy) {\n let sizeField;\n let colorField;\n const fields = [];\n const layers = this.layers();\n const dataModel = dataModels.parentModel;\n const fieldsConfig = dataModel.getFieldsConfig();\n const domains = {};\n if (layers && layers[0]) {\n const layer = layers[0];\n const layerEncoding = layer.def.encoding || {};\n\n [RADIUS, ANGLE, SIZE, COLOR].forEach((encType) => {\n const field = layerEncoding[encType] ? layerEncoding[encType].field : '';\n const measureField = fieldsConfig[field] && fieldsConfig[field].def.type === MEASURE;\n if (encType === SIZE && measureField) {\n sizeField = field;\n }\n if (encType === COLOR) {\n colorField = field;\n }\n fieldsConfig[field] && !measureField && fields.push(field);\n });\n }\n\n if (sizeField) {\n domains[sizeField] = dataModel.groupBy(facetFields, {\n [sizeField]: 'sum'\n }).getFieldspace().fieldsObj()[sizeField].domain();\n }\n\n if (colorField) {\n const dm = dataModel.groupBy([...facetFields, ...fields], groupBy.measures);\n domains[colorField] = dm.getFieldspace().fieldsObj()[colorField].domain();\n }\n return domains;\n }\n /**\n *\n *\n * @param {*} fields\n * @param {*} userLayerConfig\n * @return\n * @memberof PolarEncoder\n */\n getLayerConfig (fields, userLayerConfig) {\n let layerConfig = [];\n const {\n columnFields,\n rowFields\n } = fields;\n const allFields = [...columnFields, ...rowFields];\n\n allFields.forEach(() => {\n const encoding = {};\n let config = {\n mark: ARC,\n def: {\n encoding\n }\n };\n if (userLayerConfig && userLayerConfig.length > 0) {\n config = mergeRecursive(config, userLayerConfig[0]);\n }\n layerConfig.push(config);\n });\n if (layerConfig.length === 0) {\n layerConfig = userLayerConfig;\n }\n\n this.layers(layerConfig);\n return layerConfig;\n }\n\n /**\n *\n *\n * @param {*} layerArray\n * @returns\n * @memberof PolarEncoder\n */\n serializeLayerConfig (layerArray) {\n const serializedLayers = [];\n\n layerArray.length && layerArray.forEach((layer) => {\n const def = layerFactory.getSerializedConf(layer.mark, layer);\n serializedLayers.push({\n mark: layer.mark,\n def\n });\n });\n return serializedLayers;\n }\n}\n","import { createRetinalAxis } from './encoder-helper';\nimport { COLOR, SHAPE, SIZE } from '../enums/constants';\nimport VisualEncoder from './visual-encoder';\n\n/**\n *\n *\n * @export\n * @class RetinalEncoder\n * @extends {VisualEncoder}\n */\nexport default class RetinalEncoder extends VisualEncoder {\n\n /**\n *\n *\n * @param {*} axesCreators\n * @return\n * @memberof RetinalEncoder\n */\n createAxis (axesCreators) {\n const { fieldsConfig, config } = axesCreators;\n const newAxes = {};\n\n [COLOR, SHAPE, SIZE].forEach((axisType) => {\n newAxes[`${axisType}`] = createRetinalAxis({ axisType, fieldsConfig }, config[axisType]);\n });\n return newAxes;\n }\n\n /**\n *\n *\n * @static\n * @return\n * @memberof RetinalEncoder\n */\n static type () {\n return 'retinal';\n }\n\n /**\n *\n *\n * @param {*} fields\n * @param {*} userLayerConfig\n * @return\n * @memberof RetinalEncoder\n */\n getLayerConfig (encodingConfigs, userLayerConfig) {\n const layerConfig = [];\n userLayerConfig.forEach((e) => {\n const config = e;\n [COLOR, SHAPE, SIZE].forEach((axis) => {\n if (encodingConfigs[axis] && encodingConfigs[axis].field) {\n const def = config.def;\n if (config.def instanceof Array) {\n def.forEach((conf) => {\n conf.encoding = conf.encoding || {};\n !conf.encoding[axis] && (conf.encoding[axis] = {});\n conf.encoding[axis].field = encodingConfigs[axis].field;\n });\n } else {\n def.encoding = def.encoding || {};\n !def.encoding[axis] && (def.encoding[axis] = {});\n def.encoding[axis].field = encodingConfigs[axis].field;\n }\n }\n });\n layerConfig.push(config);\n });\n return layerConfig;\n }\n\n /**\n *\n *\n * @param {*} context\n * @return\n * @memberof RetinalEncoder\n */\n setCommonDomain (context) {\n const { domains, axes, encoding } = context;\n\n Object.entries(encoding).forEach((enc) => {\n if (enc[1] && enc[1].field) {\n const encType = enc[0];\n const field = enc[1].field;\n\n if (field) {\n axes[encType].forEach((axis) => {\n const domain = domains[field];\n !enc[1].domain && axis.updateDomain(domain);\n });\n }\n }\n });\n return axes;\n }\n}\n","import { Store, dataSelect, FieldType } from 'muze-utils';\nimport { DATA_UPDATE_COUNTER } from '../enums/defaults';\nimport { Variable } from '../variable';\nimport { PolarEncoder, CartesianEncoder } from '../encoder';\nimport {\n DIMENSION,\n MEASURE,\n ORDINAL,\n LINEAR,\n ROW,\n COLUMN,\n COL,\n LEFT,\n RIGHT,\n TOP,\n BOTTOM,\n COLOR,\n SIZE,\n TEMPORAL,\n SHAPE,\n INTERACTION,\n GRID_LINES,\n GRID_BANDS,\n HEADER,\n FACET,\n X,\n Y,\n POLAR\n} from '../enums/constants';\n\n/**\n * Creates an instance of a store which contains the arguments to make the class reactive\n *\n * @return {Object} instance of store\n * @memberof VisualGroup\n */\nexport const initStore = () => new Store({\n [DATA_UPDATE_COUNTER]: DATA_UPDATE_COUNTER\n});\n\n/**\n *\n *\n * @param {*} arr\n */\nexport const isDistributionEqual = arr => [...arr[0], ...arr[1]].reduce((isEqual, row) => {\n const rowType = row.type();\n\n if (rowType === MEASURE || rowType === TEMPORAL) {\n isEqual = true;\n }\n return isEqual;\n}, false);\n\n/**\n *\n *\n */\nexport const initializeCacheMaps = () => ({\n cellMap: new Map(),\n xAxesMap: new Map(),\n yAxesMap: new Map(),\n entryCellMap: new Map(),\n exitCellMap: new Map()\n});\n\n/**\n *\n *\n * @param {*} axisName\n * @param {*} id\n */\nexport const getAxisKey = (axisName, id, scaleType) => `${axisName}-axis-${id}-${scaleType}`;\n\n/**\n *\n *\n * @param {*} rowId\n * @param {*} columnId\n */\nexport const getCellKey = (rowId, columnId) => `cell-${rowId}-${columnId}`;\n\n/**\n *\n *\n * @param {*} config\n * @return\n */\nexport const extractUnitConfig = (config) => {\n const unitConfig = {};\n const attrNames = [INTERACTION, GRID_LINES, GRID_BANDS];\n\n attrNames.forEach((attr) => {\n if (config[attr] !== undefined) {\n unitConfig[attr] = config[attr];\n }\n });\n return unitConfig;\n};\n\n/**\n *\n *\n * @param {*} headers\n * @param {*} index\n * @param {*} rowLength\n * @return\n * @memberof MatrixResolver\n */\nexport const getHeaderText = (headers, index, rowLength) => {\n let header = '';\n\n if (index === rowLength - 1 && headers.length > rowLength) {\n for (let i = index; i < headers.length - 1; i++) {\n header += `${headers[i].toString()} / `;\n }\n header += headers[headers.length - 1].toString();\n return header;\n } else if (headers[index]) {\n return headers[index].toString();\n }\n return '';\n};\n\n/**\n *\n *\n * @param {*} fields\n * @param {*} fieldHeaders\n * @param {*} TextCell\n * @param {*} labelManager\n * @return\n */\nexport const headerCreator = (fields, fieldHeaders, TextCell, labelManager) => {\n const headers = fields.length > 0 ? fields[0].map((cell, i) => new TextCell({ type: HEADER }, { labelManager })\n .source(getHeaderText(fieldHeaders, i, fields[0].length))\n .config({ show: cell.config().show })) : [];\n return headers;\n};\n\n/**\n *\n *\n * @param {*} variable\n * @param {*} allFields\n * @return\n */\nexport const findInGroup = (variable, allFields) => {\n let channel = null;\n\n [COLOR, SIZE, SHAPE].forEach((e) => {\n if (this.store.get(e) && variable === this.store.get(e)[0]) {\n channel = e;\n }\n });\n\n if (channel) {\n return { channel };\n }\n [ROW, COL].forEach((facetType) => {\n allFields[`${facetType}Facets`].forEach((e) => {\n if (e.toString() === variable) {\n channel = { channel: FACET, type: facetType === COL ? COLUMN : ROW };\n }\n });\n });\n\n if (channel) {\n return channel;\n }\n\n [ROW, COL].forEach((projType) => {\n allFields[`${projType}Projections`].forEach((e) => {\n e.forEach((m) => {\n if (m.toString() === variable) {\n channel = projType === COL ? X : Y;\n }\n });\n });\n });\n\n if (channel) {\n return { channel };\n }\n return null;\n};\n\n/**\n *\n *\n * @param {*} datamodel\n * @param {*} field\n */\nexport const getAxisType = (fieldsConfig, field) => {\n let fieldType = ORDINAL;\n\n if (field && fieldsConfig[field].def.type !== DIMENSION) {\n fieldType = LINEAR;\n }\n return fieldType;\n};\n\n/**\n *\n *\n * @param {*} datamodel\n * @param {*} fieldName\n * @return\n */\nexport const retriveDomainFromData = (datamodel, fieldName) => {\n const field = datamodel.getFieldspace().fields.find(d => d._ref.name === fieldName.toString());\n return field.domain();\n};\n\n/**\n *\n *\n * @memberof MatrixResolver\n */\nexport const mutateAxesFromMap = (cacheMaps, axes) => {\n let xAxes = null;\n let yAxes = null;\n const {\n xAxesMap,\n yAxesMap\n } = cacheMaps;\n const {\n x: xAxisSet,\n y: yAxisSet\n } = axes;\n\n xAxisSet && xAxisSet.forEach((axisId) => {\n const xAxis = xAxesMap.get(axisId);\n xAxes = xAxes || [];\n xAxes.push(xAxis);\n });\n\n yAxisSet && yAxisSet.forEach((axisId) => {\n const yAxis = yAxesMap.get(axisId);\n yAxes = yAxes || [];\n yAxes.push(yAxis);\n });\n\n return {\n xAxes, yAxes\n };\n};\n\n/**\n *\n *\n * @param {*} layers\n * @return\n */\nexport const getEncoder = (layers) => {\n let encoder = new CartesianEncoder();\n\n if (layers) {\n // Figuring out the kind of layers the group will have\n encoder = layers.every(e => e.mark === 'arc') ? new PolarEncoder() : encoder;\n }\n return encoder;\n};\n\n/**\n *\n *\n * @param {*} type\n * @param {*} fields\n * @param {*} userAxisFromConfig\n * @return\n */\nexport const getHeaderAxisFrom = (type, fields, userAxisFromConfig) => {\n let axisFrom = userAxisFromConfig[type];\n let headerFrom = '';\n const options = type === ROW ? [LEFT, RIGHT] : [BOTTOM, TOP];\n const [firstField, secondField] = fields;\n const firstFieldType = i => (firstField.length ? firstField[i].type() : null);\n const secondFieldType = i => (secondField.length ? secondField[i].type() : null);\n\n if (firstFieldType(firstField.length - 1) === DIMENSION && secondFieldType(0) === DIMENSION) {\n headerFrom = axisFrom ? options[1 - options.indexOf(axisFrom)] : options[1];\n\n if (type === COLUMN && (firstField[firstField.length - 1].toString() === secondField[0].toString())) {\n axisFrom = TOP;\n } else {\n axisFrom = axisFrom || options[0];\n }\n } else if (secondFieldType(secondField.length - 1) === DIMENSION) {\n headerFrom = type === ROW ? RIGHT : BOTTOM;\n axisFrom = type === ROW ? RIGHT : BOTTOM;\n } else {\n headerFrom = type === ROW ? LEFT : TOP;\n axisFrom = type === ROW ? LEFT : TOP;\n }\n if (firstFieldType(firstField.length - 1) === MEASURE && secondFieldType(0) === MEASURE) {\n axisFrom = type === ROW ? LEFT : TOP;\n } else if (secondFieldType(0) === MEASURE) {\n axisFrom = type === ROW ? RIGHT : BOTTOM;\n } else if (firstFieldType(firstField.length - 1) === MEASURE) {\n axisFrom = type === ROW ? LEFT : TOP;\n }\n return [headerFrom, axisFrom];\n};\n\n/**\n *\n *\n * @param {*} type\n * @param {*} fields\n * @param {*} layers\n * @return\n * @memberof MatrixResolver\n */\nexport const setFacetsAndProjections = (context, fieldInfo, encoder) => {\n const {\n fields,\n type\n } = fieldInfo;\n const { facets, projections } = encoder.simpleEncoder.getFacetsAndProjections(fields, type);\n\n context.facets({ [`${type}Facets`]: facets });\n context.projections({ [`${type}Projections`]: projections });\n\n return { facets, projections, fields };\n};\n\n/**\n * Creates a selection set from a data set with corresponding attributes\n *\n * @export\n * @param {Selection} sel contains previous selection\n * @param {Object} appendObj Object to be appended\n * @param {Array} data Data based on which the selection is entered/updated/removed\n * @param {Object} [attrs={}] Attributes to be set on the data\n * @return {Selection} Merged selection\n */\nexport const createSelection = (sel, appendObj, data, idFn) => {\n let selection = sel || dataSelect([]);\n\n selection = selection.data(data, idFn);\n\n const enter = selection.enter().append(appendObj);\n const mergedSelection = enter.merge(selection);\n\n selection.exit() && selection.exit().remove();\n return mergedSelection;\n};\n\nconst getRowBorders = (left, right) => {\n const borders = {};\n borders.top = false;\n borders.bottom = false;\n if (left.length > 1 || right.length > 1) {\n borders.top = true;\n borders.bottom = true;\n }\n return borders;\n};\n\nconst getColumnsBorders = (top, bottom) => {\n const borders = {};\n borders.left = false;\n borders.right = false;\n if (top.length || bottom.length) {\n if ((top[0] && top[0].length > 1) || (bottom[0] && bottom[0].length > 1)) {\n borders.left = true;\n borders.right = true;\n }\n }\n return borders;\n};\n\nconst getValueBorders = (rows, columns) => {\n const borders = { top: true, left: true, bottom: true, right: true };\n const borderTypeRow = [LEFT, RIGHT];\n const borderTypeCol = [TOP, BOTTOM];\n rows.forEach((e, i) => {\n if (e[0] && e[0].length) {\n borders[borderTypeRow[i]] = true;\n } else {\n borders[borderTypeRow[i]] = false;\n }\n });\n columns.forEach((e, i) => {\n if (e.length) {\n borders[borderTypeCol[i]] = true;\n } else {\n borders[borderTypeCol[i]] = false;\n }\n });\n\n return borders;\n};\n\nexport const getBorders = (matrices, encoder) => {\n let showRowBorders = { top: false, bottom: false };\n let showColBorders = { left: false, right: false };\n let showValueBorders = { top: false, bottom: false, left: false, right: false };\n const {\n rows,\n columns,\n values: valueMatrix\n } = matrices;\n const [leftRows, rightRows] = rows;\n const [topColumns, bottomColumns] = columns;\n const {\n rowDimensions,\n columnDimensions,\n rowTemporalFields,\n columnTemporalFields,\n columnMeasures,\n rowMeasures\n } = encoder.fieldInfo();\n const allDimensionLength = rowDimensions.length + columnDimensions.length;\n const allMeasuresLength = rowMeasures.length + columnMeasures.length;\n const allTemporalFieldsLength = rowTemporalFields.length + columnTemporalFields.length;\n\n if (encoder.constructor.type() === POLAR) {\n if (!allDimensionLength) {\n return { showRowBorders, showColBorders, showValueBorders };\n }\n } else if (!allMeasuresLength && !allTemporalFieldsLength && allDimensionLength <= 2) {\n return { showRowBorders, showColBorders, showValueBorders };\n }\n\n showRowBorders = getRowBorders(leftRows, rightRows);\n showColBorders = getColumnsBorders(topColumns, bottomColumns);\n showValueBorders = getValueBorders([leftRows, rightRows], [topColumns, bottomColumns]);\n\n if (valueMatrix.length > 1) {\n showValueBorders.top = true;\n showValueBorders.bottom = true;\n }\n if (valueMatrix.length && valueMatrix[0].length > 1) {\n showValueBorders.left = true;\n showValueBorders.right = true;\n }\n return { showRowBorders, showColBorders, showValueBorders };\n};\n\nexport const getFieldsFromSuppliedLayers = (suppliedLayerConfig, fieldsConfig) => {\n let fields = [];\n const encodingArr = suppliedLayerConfig.map(conf => (conf.encoding || {}));\n fields = [...fields, [].concat(...encodingArr.map(enc => Object.values(enc).map(d => d.field)))];\n fields = fields.filter(field => fieldsConfig[field] && fieldsConfig[field].def.type === FieldType.DIMENSION);\n return fields;\n};\n\nexport const extractFields = (facetsAndProjections, layerFields) => {\n const fields = Object.values(facetsAndProjections).map((arr) => {\n const flattenArray = [].concat(...arr);\n return [].concat(...flattenArray.map((field) => {\n if (field instanceof Variable) {\n return field.getMembers();\n }\n return field;\n }));\n });\n return [].concat(...fields, ...layerFields);\n};\n","/**\n * This file exports variables that are used as defaults for the crosstab group.\n */\nexport const DATA_UPDATE_COUNTER = 0;\n\nexport const DEFAULT_LAYER_TYPE = 'cartesian';\n\n","import Selection from './selection';\n/**\n * This function applies a selection operation on a data array.\n *\n * @export\n * @param {Array} [data=[]] The data array to be observed.\n * @return {Selection} Instance of a selection.\n */\nexport default function dataSelect (data = []) {\n return new Selection(data);\n}\n\n","import { BEHAVIOURS, ACTIONS } from '@chartshq/muze-firebolt';\n\nexport const actionBehaviourMap = {\n [ACTIONS.DRAG]: {\n behaviours: [BEHAVIOURS.BRUSH],\n touch: false\n },\n [ACTIONS.HOVER]: {\n behaviours: [BEHAVIOURS.HIGHLIGHT]\n },\n [ACTIONS.LONGTOUCH]: {\n behaviours: [BEHAVIOURS.SELECT],\n touch: true\n },\n [ACTIONS.TOUCHDRAG]: {\n behaviours: [BEHAVIOURS.BRUSH],\n touch: true\n },\n [ACTIONS.CLICK]: {\n behaviours: [BEHAVIOURS.SELECT],\n touch: false\n }\n};\n\n","export const CONFIG = 'config';\nexport const DATA = 'data';\nexport const AXES = 'axes';\nexport const LAYERDEFS = 'layerDef';\nexport const WIDTH = 'width';\nexport const HEIGHT = 'height';\nexport const MOUNT = 'mount';\nexport const primaryXAxisUpdated = 'primaryXAxisUpdated';\nexport const primaryYAxisUpdated = 'primaryYAxisUpdated';\nexport const secondaryXAxisUpdated = 'secondaryXAxisUpdated';\nexport const secondaryYAxisUpdated = 'secondaryYAxisUpdated';\nexport const TRANSFORM = 'transform';\nexport const DATADOMAIN = 'dataDomain';\nexport const LAYERSCREATED = 'layersCreated';\nexport const FIELDS = 'fields';\nexport const TIMEDIFFS = 'timeDiffs';\nexport const LAYERAXISINDEX = 'layerAxisIndex';\n\n","import { FieldType, getDependencyOrder, getObjProp,\n defaultValue, objectIterator, unionDomain, makeElement,\n DimensionSubtype, getClosestIndexOf, toArray } from 'muze-utils';\nimport { layerFactory } from '@chartshq/visual-layer';\nimport { TIMEDIFFS } from '../enums/reactive-props';\n\nexport const getDimensionMeasureMap = (layers, fieldsConfig) => {\n const retinalEncodingsAndMeasures = {};\n\n layers.forEach((layer) => {\n const {\n colorField,\n sizeField,\n shapeField,\n xField,\n yField\n } = layer.encodingFieldsInf();\n const measures = [xField, yField].filter(field => fieldsConfig[field] && fieldsConfig[field].def.type ===\n FieldType.MEASURE);\n [colorField, sizeField, shapeField].forEach((field) => {\n if (fieldsConfig[field] && fieldsConfig[field].def.type === FieldType.DIMENSION) {\n !retinalEncodingsAndMeasures[field] && (retinalEncodingsAndMeasures[field] = []);\n retinalEncodingsAndMeasures[field].push(...measures);\n }\n });\n });\n\n for (const key in retinalEncodingsAndMeasures) {\n if ({}.hasOwnProperty.call(retinalEncodingsAndMeasures, key)) {\n retinalEncodingsAndMeasures[key] = [...new Set(retinalEncodingsAndMeasures[key])];\n }\n }\n return retinalEncodingsAndMeasures;\n};\n\nexport const transformDataModels = (transform, dataModel) => {\n const dataModels = {};\n for (const key in transform) {\n if ({}.hasOwnProperty.call(transform, key)) {\n const transformVal = transform[key];\n dataModels[key] = transformVal(dataModel);\n }\n }\n\n return dataModels;\n};\n\nexport const getLayerFromDef = (context, definition, existingLayer) => {\n let instances = existingLayer;\n const dependencies = context._layerDeps;\n if (!existingLayer) {\n instances = layerFactory.getLayerInstance(definition);\n }\n const layers = {};\n const instanceArr = toArray(instances);\n definition = toArray(definition);\n definition.reduce((acc, def, idx) => {\n const instance = instanceArr[idx];\n instance.config(def);\n instance.dependencies(dependencies);\n if (def.name) {\n instance.alias(def.name);\n }\n layers[instance.alias()] = instance;\n return acc;\n }, {});\n return layers;\n};\n\nexport const resolveEncodingTransform = (layerInst, store) => {\n const encodingTransform = layerInst.config().encodingTransform || {};\n const resolvable = encodingTransform.resolvable;\n let depArr = [];\n if (resolvable) {\n const resolved = resolvable(store);\n depArr = resolved.depArr;\n layerInst.encodingTransform(resolved.fn);\n } else if (encodingTransform instanceof Function) {\n layerInst.encodingTransform(encodingTransform);\n }\n return depArr;\n};\n\nexport const createLayers = (context, layerDefinitions) => {\n const layersMap = context._layersMap;\n const markSet = {};\n const store = {\n layers: {},\n components: {\n unit: context\n }\n };\n let layerIndex = 0;\n let layers = layerDefinitions.sort((a, b) => a.order - b.order).reduce((layersArr, layerDef, i) => {\n const mark = layerDef.mark;\n const definition = layerDef.def;\n const markId = `${mark}-${i}`;\n const defArr = toArray(definition);\n defArr.forEach((def) => {\n def.order = layerDef.order + layerIndex;\n });\n layerIndex += defArr.length;\n const instances = getLayerFromDef(context, definition, layersMap[markId]);\n store.layers = Object.assign(store.layers, instances);\n const instanceValues = Object.values(instances);\n layersArr = layersArr.concat(...instanceValues);\n layersMap[markId] = instanceValues;\n markSet[markId] = markId;\n return layersArr;\n }, []);\n store.unit = context;\n const layerdeps = {};\n layers.forEach((layer) => {\n const depArr = resolveEncodingTransform(layer, store);\n layerdeps[layer.alias()] = depArr;\n });\n\n const order = getDependencyOrder(layerdeps);\n layers = order.map(name => store.layers[name]);\n for (const key in layersMap) {\n if (!(key in markSet)) {\n layersMap[key].forEach(layer => layer.remove());\n delete layersMap[key];\n }\n }\n return layers;\n};\n\nexport const attachDataToLayers = (layers, dm, transformedDataModels) => {\n layers.forEach((layer) => {\n const dataSource = layer.config().source;\n const dataModel = dataSource instanceof Function ? dataSource(dm) : (transformedDataModels[dataSource] || dm);\n layer.data(dataModel);\n });\n};\n\nexport const attachAxisToLayers = (axes, layers, layerAxisIndex) => {\n layers.forEach((layer) => {\n const layerId = layer.id();\n const axesObj = {};\n\n objectIterator(axes, (key) => {\n const axisInf = layerAxisIndex[layerId];\n if (axisInf) {\n axes[key] && (axesObj[key] = axes[key][axisInf[key] || 0]);\n }\n });\n Object.keys(axesObj).length && layer.axes(axesObj);\n });\n};\n\nexport const getLayerAxisIndex = (layers, fields) => {\n const layerAxisIndex = {};\n layers.forEach((layer) => {\n const { axis, encoding } = layer.config();\n const id = layer.id();\n ['x', 'y'].forEach((type) => {\n let index;\n const field = defaultValue(getObjProp(axis, type), encoding[type] && encoding[type].field);\n if (fields[type]) {\n index = fields[type].findIndex(fieldInst => fieldInst.getMembers().indexOf(field) !== -1);\n } else {\n index = 0;\n }\n !layerAxisIndex[id] && (layerAxisIndex[id] = {});\n layerAxisIndex[id][type] = index;\n });\n });\n return layerAxisIndex;\n};\n\nexport const unionDomainFromLayers = (layers, axisFields, layerAxisIndex, fieldsConfig) => {\n let domains = {};\n layers = layers.filter(layer => layer.getDataDomain() !== null);\n layers.forEach((layer) => {\n let domainValues = {};\n const config = layer.config();\n const encoding = config.encoding;\n const layerDomain = layer.getDataDomain();\n const layerId = layer.id();\n\n if (layerDomain !== null && config.calculateDomain !== false) {\n domainValues = Object.entries(layerDomain);\n if (layerDomain.x || layerDomain.y) {\n domains = domainValues.reduce((fieldDomain, domain) => {\n const encodingType = domain[0];\n const field = encoding[encodingType].field;\n const axisIndex = layerAxisIndex[layerId][encodingType];\n const fieldStr = `${axisFields[encodingType][axisIndex]}`;\n fieldDomain[fieldStr] = fieldDomain[fieldStr] || [];\n fieldDomain[fieldStr] = unionDomain(([fieldDomain[fieldStr], domain[1]]),\n fieldsConfig[field].def.subtype ? fieldsConfig[field].def.subtype :\n fieldsConfig[field].def.type);\n\n return fieldDomain;\n }, domains);\n } else { domains = domainValues; }\n }\n });\n return domains;\n};\n\nexport const renderLayers = (context, container, layers, measurement) => {\n context._lifeCycleManager.notify({ client: layers, action: 'beforedraw', formalName: 'layer' });\n const config = context.config();\n const classPrefix = config.classPrefix;\n const orderedLayers = context.layers().sort((a, b) => a.config().order - b.config().order);\n const layerParentGroup = makeElement(container, 'g', [1], `${classPrefix}-layer-group`);\n makeElement(layerParentGroup, 'g', orderedLayers, null, {\n update: (group, layer) => {\n layer.measurement(measurement);\n layer.dataProps({\n timeDiffs: context.store().get(TIMEDIFFS)\n });\n layer.config().render !== false && layer.mount(group.node());\n }\n });\n return this;\n};\n\nexport const getNearestDimensionalValue = (context, position) => {\n const fields = context.fields();\n if (!fields.x.length || !fields.y.length) {\n return null;\n }\n const data = context.data();\n const axes = context.axes();\n const fieldsConfig = data.getFieldsConfig();\n const xField = getObjProp(fields, 'x', 0).getMembers()[0];\n const yField = getObjProp(fields, 'y', 0).getMembers()[0];\n const xFieldType = fieldsConfig[xField] && (fieldsConfig[xField].def.subtype ? fieldsConfig[xField].def.subtype :\n fieldsConfig[xField].def.type);\n const yFieldType = fieldsConfig[yField] && (fieldsConfig[yField].def.subtype ? fieldsConfig[yField].def.subtype :\n fieldsConfig[yField].def.type);\n\n const entryVal = [['x', xFieldType, xField], ['y', yFieldType, yField]].find(entry =>\n entry[1] === DimensionSubtype.CATEGORICAL || entry[1] === DimensionSubtype.TEMPORAL);\n\n if (!entryVal || (xFieldType !== FieldType.MEASURE && yFieldType !== FieldType.MEASURE)) {\n return null;\n }\n const field = entryVal[2];\n const index = fieldsConfig[field].index;\n let key = axes[entryVal[0]][0].invert(position[entryVal[0]]);\n if (entryVal[1] === DimensionSubtype.TEMPORAL) {\n const filterData = [...new Set(data.getData().data.map(d => d[index]))];\n key = filterData[getClosestIndexOf(filterData, key)];\n }\n\n return key !== undefined ? [[field], [key]] : null;\n};\n\nexport const getLayersBy = (layers, searchBy, value) => layers.filter((layer) => {\n const name = searchBy === 'type' ? layer.constructor.formalName() : layer.alias();\n return name === value;\n});\n\nexport const removeLayersBy = (layers, searchBy, value) => {\n layers.filter((inst) => {\n const name = searchBy === 'type' ? inst.config().mark : inst.alias();\n if (name === value) {\n inst.remove();\n return false;\n }\n return true;\n });\n};\n\nexport const createSideEffectGroup = (container, className) => makeElement(container, 'g', [1], className).node();\n\nexport const getAdjustedDomain = (max, min) => {\n const y1ratio = max[0] / (max[0] - min[0]);\n const y2ratio = max[1] / (max[1] - min[1]);\n\n // adjust min/max values for positive negative values zero line etc\n let allSameSign = false;\n\n // if all numbers are positive set floor to zero\n if (min[0] > 0 && min[1] > 0 && min[1] > 0 && max[1] > 0) {\n allSameSign = true;\n min[0] = 0;\n min[1] = 0;\n }\n\n // if all numbers are negative set ceiling to zero\n if (min[0] < 0 && min[1] < 0 && min[1] < 0 && max[1] < 0) {\n allSameSign = true;\n max[0] = 0;\n max[1] = 0;\n }\n\n // align zero line if necessary\n if (!allSameSign && y1ratio !== y2ratio) {\n if (y1ratio < y2ratio) {\n // adjust min[1]\n min[1] = min[0] / max[0] * max[1];\n } else {\n // adjust min[0]\n min[0] = min[1] / max[1] * max[0];\n }\n }\n return {\n max,\n min\n };\n};\n","import { getObjProp, defaultValue, makeElement, DimensionSubtype, DataModel } from 'muze-utils';\nimport { ScaleType } from '@chartshq/muze-axis';\nimport { layerFactory } from '@chartshq/visual-layer';\nimport { GRIDLINEPARENTGROUPCLASS, GRIDBANDPARENTGROUPCLASS } from '../enums/constants';\nimport { TIMEDIFFS } from '../enums/reactive-props';\n\nconst LINEAR = ScaleType.LINEAR;\n\nconst getLayerDefinition = (context, axes, type, orientation) => {\n let encoding;\n const config = context.config();\n const { classPrefix, gridLines, gridBands } = config;\n const gridLineColor = gridLines.color;\n const zeroLineColor = gridLines.zeroLineColor;\n const defClassName = type === 'band' ? gridBands.defClassName : gridLines.defClassName;\n const gridBandColor = gridBands[orientation].color;\n const axis = axes[orientation][0];\n const isLinearScale = axis.constructor.type() === LINEAR;\n\n if (type === 'band' && isLinearScale) {\n encoding = {\n [orientation]: `${orientation}value`,\n [`${orientation}0`]: `${orientation}value0`\n };\n } else {\n encoding = {\n [orientation]: isLinearScale ? `${orientation}value` : `${orientation}dim`\n };\n }\n encoding.color = {\n value: (data, i) => {\n const isNegativeDomain = isLinearScale && axis.domain()[0] < 0;\n if (type === 'band') {\n return gridBandColor[i % 2];\n }\n return isNegativeDomain && data[orientation] === 0 ? zeroLineColor : gridLineColor;\n }\n };\n\n return {\n definition: {\n defClassName: `${defClassName}-${orientation}`,\n className: config.className,\n individualClassName: (data, i) => {\n let className;\n const isNegativeDomain = isLinearScale && axis.domain()[0] < 0;\n if (isNegativeDomain && data.y === 0 && type !== 'band') {\n className = `${classPrefix}-axis-zero-line`;\n } else {\n className = `${classPrefix}-grid-${type}-${orientation}-${i % 2}`;\n }\n return className;\n },\n [`pad${orientation.toUpperCase()}`]: type === 'band' ? 0 : undefined,\n encoding\n },\n axes: {\n [orientation]: axis\n },\n interactive: false\n };\n};\n\nconst getDefaultVisibilty = (show, axis) => {\n if (axis.constructor.type() === LINEAR) {\n return show;\n }\n return false;\n};\n\nexport const getGridLayerDefinitions = (context, config, type) => ['x', 'y'].map((axisType) => {\n const show = defaultValue(config[axisType] && config[axisType].show,\n getDefaultVisibilty(config.show, context.axes()[axisType][0]));\n\n return show ? getLayerDefinition(context, context.axes(), type, axisType) : undefined;\n}).filter(d => d !== undefined);\n\nexport const getGridLayerData = (axes, fields, fieldsConfig) => {\n const gridData = {};\n ['x', 'y'].forEach((type) => {\n let ticks = axes[type][0].getTickValues();\n const subtype = getObjProp(fieldsConfig, getObjProp(fields, type, 0).getMembers()[0], 'def', 'subtype');\n const jsonData = [];\n const schema = [\n {\n name: 'yvalue',\n type: 'measure'\n }, {\n name: 'xvalue',\n type: 'measure'\n },\n {\n name: 'yvalue0',\n type: 'measure'\n }, {\n name: 'xvalue0',\n type: 'measure'\n }, {\n name: 'xdim',\n type: 'dimension',\n subtype\n }, {\n name: 'ydim',\n type: 'dimension',\n subtype\n }\n ];\n const len = Math.max(ticks.length);\n ticks = subtype === DimensionSubtype.TEMPORAL ? ticks.map(d => d.getTime()) : ticks;\n for (let i = 0; i < len; i += 1) {\n jsonData.push({\n [`${type}value`]: ticks[i],\n [`${type}value0`]: ticks[i + 1],\n [`${type}dim`]: ticks[i],\n [`${type}dim`]: ticks[i]\n });\n }\n gridData[type] = new DataModel(jsonData, schema);\n });\n return gridData;\n};\n\nexport const createGridLineLayer = (context, data) => {\n const vuConf = context.config();\n const dependencies = context._layerDeps;\n const measurement = {\n width: context.width(),\n height: context.height()\n };\n\n ['band', 'line'].forEach((type) => {\n let mark;\n let config;\n let instances;\n if (type === 'band') {\n mark = 'bar';\n config = vuConf.gridBands;\n instances = context._gridbands;\n } else {\n mark = 'tick';\n config = vuConf.gridLines;\n instances = context._gridlines;\n }\n const definitions = getGridLayerDefinitions(context, config, type);\n\n definitions.forEach((atomicDef, i) => {\n let layer;\n const definition = atomicDef.definition;\n const axesObj = atomicDef.axes;\n const sConf = layerFactory.getSerializedConf(mark, definition);\n sConf.mark = mark;\n if (!instances[i]) {\n layer = layerFactory.getLayerInstance(sConf);\n layer.dependencies(dependencies);\n } else {\n layer = instances[i];\n }\n\n layer.config(sConf)\n .measurement(measurement)\n .data(axesObj.y ? data.y : data.x)\n .dataProps({\n timeDiffs: context.store().get(TIMEDIFFS)\n })\n .axes(axesObj);\n instances[i] = layer;\n });\n });\n};\n\nexport const renderGridLineLayers = (context, container) => {\n const axes = context.axes();\n const config = context.config();\n const classPrefix = config.classPrefix;\n\n if (axes && ((axes.x && axes.x.length) || (axes.y && axes.y.length))) {\n const gridBandData = getGridLayerData(axes, context.fields(), context.data().getFieldsConfig());\n createGridLineLayer(context, gridBandData);\n [[context._gridlines, `${classPrefix}-${GRIDLINEPARENTGROUPCLASS}`],\n [context._gridbands, `${classPrefix}-${GRIDBANDPARENTGROUPCLASS}`]].forEach((entry) => {\n const [instances, parentGroupClass] = entry;\n const mountPoint = makeElement(container, 'g', [1], `.${parentGroupClass}`);\n const className = `${parentGroupClass}-group`;\n makeElement(mountPoint, 'g', instances, `.${className}`, {\n update: (group, instance) => {\n instance.mount(group.node());\n }\n });\n });\n }\n};\n","import { CLASSPREFIX, CONSOLIDATED } from './enums/constants';\n\n/**\n * Returns the default configuration of the visual unit\n * @return {Object} Default configuration of visual unit\n */\nexport const defaultConfig = {\n classPrefix: CLASSPREFIX,\n defClassName: 'visual-unit',\n className: '',\n trackerClassName: 'visual-unit-tracker',\n gridLines: {\n defClassName: 'axis-grid-lines',\n className: '',\n show: true,\n color: '#efefef',\n zeroLineColor: '#b6b6b6'\n },\n gridBands: {\n defClassName: 'axis-grid-bands',\n className: '',\n show: false,\n y: {\n color: ['#fff', '#fbfbfb']\n },\n x: {\n color: ['#fff', '#f9f9f9']\n }\n },\n arcLayerClassName: 'layer-arc',\n interaction: {\n tooltip: {\n mode: CONSOLIDATED\n }\n },\n sideEffectClassName: 'side-effect-container'\n};\n","export const CLASSPREFIX = 'muze';\nexport const IDFIELD = '__id__';\nexport const GRIDLINEPARENTGROUPCLASS = 'grid-lines';\nexport const GRIDBANDPARENTGROUPCLASS = 'grid-bands';\nexport const CONSOLIDATED = 'consolidated';\nexport const FRAGMENTED = 'fragmented';\nexport const FACET_BY_FIELDS = 'facetByFields';\nexport const RETINAL_FIELDS = 'retinalFields';\nexport const PARENT_ALIAS = 'parentAlias';\nexport const LAYERS = 'layers';\nexport const CACHED_DATA = 'cachedData';\nexport const STORE = 'store';\n\n","import { mergeRecursive } from 'muze-utils';\nimport { defaultConfig } from './default-config';\nimport { CONFIG, LAYERDEFS, AXES, WIDTH, HEIGHT, MOUNT, TRANSFORM, FIELDS, DATA } from './enums/reactive-props';\n\nexport default {\n [CONFIG]: {\n value: null,\n meta: {\n sanitization: (config, oldConfig) => (\n mergeRecursive(oldConfig || mergeRecursive({}, defaultConfig), config)\n )\n }\n },\n [LAYERDEFS]: {\n value: null\n },\n [AXES]: {\n value: null,\n meta: {\n sanitization: (axes, prevAxes) => Object.assign(prevAxes || {}, axes)\n }\n },\n [WIDTH]: {\n value: null\n },\n [HEIGHT]: {\n value: null\n },\n [MOUNT]: {\n value: null\n },\n [TRANSFORM]: {\n value: null\n },\n [FIELDS]: {\n value: null\n },\n [DATA]: {\n value: null,\n meta: {\n preset: (data, context) => {\n if (context._cache) {\n const cachedData = context.cachedData();\n context.cachedData([...cachedData, data]);\n } else {\n const oldData = context.data();\n oldData && oldData.unsubscribe('propagation');\n context.cachedData([data]);\n }\n }\n }\n }\n};\n","import { DimensionSubtype } from 'muze-utils';\nimport * as PROPS from './enums/reactive-props';\nimport {\n transformDataModels,\n getDimensionMeasureMap,\n createLayers,\n attachDataToLayers,\n attachAxisToLayers,\n unionDomainFromLayers,\n getLayerAxisIndex\n} from './helper';\n\nconst axisMap = {\n 0: 'primary',\n 1: 'secondary'\n};\nconst axisProps = [PROPS.primaryXAxisUpdated, PROPS.secondaryXAxisUpdated, PROPS.primaryYAxisUpdated,\n PROPS.secondaryYAxisUpdated];\n\nexport const listenerMap = context => ([\n {\n type: 'registerImmediateListener',\n props: [PROPS.AXES],\n listener: ([, axes]) => {\n ['x', 'y'].forEach((type) => {\n const axesArr = axes[type] || [];\n axesArr.forEach((axis, i) => {\n axis.on('update', () => {\n context.store().commit(PROPS[`${axisMap[i]}${axis.isReverse() ? 'Y' : 'X'}AxisUpdated`], true);\n });\n });\n });\n }\n },\n {\n type: 'registerImmediateListener',\n props: [PROPS.CONFIG],\n listener: ([, config]) => {\n config && context.firebolt().config(config.interaction);\n }\n },\n {\n type: 'computed',\n props: [PROPS.LAYERSCREATED],\n listener: fetch => fetch(PROPS.LAYERDEFS, PROPS.FIELDS, (layerDefs, fields) => {\n const layerDefsValue = layerDefs.value;\n const fieldsVal = fields.value;\n if (layerDefsValue && fieldsVal) {\n const layers = createLayers(context, layerDefs.value);\n context.layers(layers);\n context._layerAxisIndex = getLayerAxisIndex(context.layers(), fieldsVal);\n context._lifeCycleManager.notify({ client: layers, action: 'initialized', formalName: 'layer' });\n return true;\n }\n return null;\n })\n },\n {\n type: 'computed',\n props: [PROPS.TIMEDIFFS],\n listener: fetch => fetch(PROPS.DATA, PROPS.FIELDS, PROPS.AXES, (data, fields, axes) => {\n const dataModel = data.value;\n const axisFields = fields.value;\n const axesObj = axes.value;\n if (dataModel && axisFields && axesObj) {\n const timeDiffs = {};\n const timeDiffsByField = {};\n ['x', 'y'].forEach((type) => {\n const field = axisFields[type][0];\n if (field && field.subtype() === DimensionSubtype.TEMPORAL) {\n timeDiffs[type] = field.getMinDiff();\n timeDiffsByField[field] = timeDiffs[type];\n axesObj[type].forEach(axis => axis.minDiff(timeDiffs[type]));\n }\n });\n context._timeDiffsByField = timeDiffsByField;\n return timeDiffs;\n }\n return null;\n })\n },\n {\n type: 'computed',\n props: [PROPS.DATADOMAIN],\n listener: fetch => fetch(PROPS.DATA, PROPS.LAYERSCREATED, PROPS.AXES, PROPS.TRANSFORM,\n (dataModel, layersCreated, axes, transform) => {\n const dataModelVal = dataModel.value;\n const layerAxisIndexVal = context._layerAxisIndex;\n const axesVal = axes.value;\n if (dataModelVal && layersCreated.value && axesVal && layerAxisIndexVal) {\n const layers = context.layers();\n const dataModels = transformDataModels(transform.value, dataModelVal);\n context._transformedDataModels = dataModels;\n context._lifeCycleManager.notify({ client: layers, action: 'beforeupdate', formalName: 'layer' });\n attachDataToLayers(layers, dataModelVal, context._transformedDataModels);\n context._dimensionMeasureMap = getDimensionMeasureMap(layers,\n dataModelVal.getFieldsConfig(), context.retinalFields());\n attachAxisToLayers(axesVal, layers, layerAxisIndexVal);\n context._lifeCycleManager.notify({ client: layers, action: 'updated', formalName: 'layer' });\n return unionDomainFromLayers(layers, context.fields(),\n layerAxisIndexVal, dataModelVal.getFieldsConfig());\n }\n return null;\n })\n },\n {\n type: 'registerImmediateListener',\n props: [PROPS.DATADOMAIN],\n listener: ([, dataDomain]) => {\n dataDomain !== null && context.updateAxisDomain(dataDomain);\n }\n },\n {\n type: 'registerChangeListener',\n props: [PROPS.MOUNT, PROPS.DATA, ...axisProps],\n listener: (mount, data) => {\n const container = mount[1];\n if (container && data[1]) {\n context.render(container);\n }\n }\n }\n]);\n","import { FACET_BY_FIELDS, RETINAL_FIELDS, PARENT_ALIAS, LAYERS, STORE, CACHED_DATA } from './enums/constants';\n\nexport const PROPS = {\n [FACET_BY_FIELDS]: {},\n [RETINAL_FIELDS]: {},\n [PARENT_ALIAS]: {},\n [LAYERS]: {},\n [STORE]: {},\n [CACHED_DATA]: {},\n detailFields: {}\n};\n","import { CommonProps } from 'muze-utils';\nimport { DATA, MOUNT } from '../enums/reactive-props';\n\nexport const clearActionHistory = (context) => {\n const actionHistory = context._actionHistory;\n for (const key in actionHistory) {\n if (actionHistory[key].isMutableAction) {\n delete context._actionHistory[key];\n }\n }\n};\n\nexport const dispatchQueuedSideEffects = (context) => {\n const queuedSideEffects = context._queuedSideEffects;\n Object.entries(queuedSideEffects).forEach((entry) => {\n const sideEffect = entry[1];\n context.dispatchSideEffect(sideEffect.name, ...sideEffect.params);\n });\n context._queuedSideEffects = {};\n};\n\nexport const registerListeners = (firebolt) => {\n const context = firebolt.context;\n const store = context.store();\n\n store.registerImmediateListener([DATA, MOUNT], (dataModel, mount) => {\n const dm = dataModel[1];\n\n if (dm && mount[1]) {\n const originalData = firebolt.context.cachedData()[0];\n firebolt.createSelectionSet(firebolt.context.data().getData().uids);\n firebolt.attachPropagationListener(originalData);\n }\n }, true);\n\n context._layerDeps.throwback.registerChangeListener([CommonProps.ON_LAYER_DRAW],\n ([, onlayerdraw]) => {\n if (onlayerdraw) {\n firebolt.initializeSideEffects();\n firebolt.config(context.config().interaction);\n firebolt.mapActionsAndBehaviour();\n dispatchQueuedSideEffects(firebolt);\n clearActionHistory(firebolt);\n }\n });\n};\n\n","import { DimensionSubtype } from 'muze-utils';\n\nconst getRangeFromData = (instance, selectionDataModel, propConfig) => {\n let criteria;\n const dataObj = selectionDataModel[0].getData();\n const propCriteria = propConfig.payload.criteria;\n const sourceIdentifiers = propConfig.sourceIdentifiers;\n const schema = dataObj.schema;\n const fieldMap = instance.data().getFieldsConfig();\n const data = dataObj.data;\n const isActionSourceSame = instance.id() === propConfig.sourceId;\n\n if (isActionSourceSame) {\n criteria = propCriteria;\n } else {\n criteria = (sourceIdentifiers !== null) ? schema.reduce((acc, obj, index) => {\n let range;\n const field = obj.name;\n const fieldObj = fieldMap[field];\n const type = fieldObj && (fieldObj.def.subtype ? fieldObj.def.subtype : fieldObj.def.type);\n const isDimension = type === DimensionSubtype.CATEGORICAL;\n\n if (!fieldObj) {\n return acc;\n }\n\n if (!isDimension) {\n range = [Math.min(...data.map(d => d[index])), Math.max(...data.map(d => d[index]))];\n } else {\n range = data.map(d => d[index]);\n }\n acc[field] = range;\n return acc;\n }, {}) : null;\n }\n return criteria;\n};\n\nexport const payloadGenerator = {\n brush: (instance, selectionDataModel, propConfig) => {\n const propPayload = propConfig.payload;\n const criteria = getRangeFromData(instance, selectionDataModel, propConfig);\n const payload = Object.assign({}, propPayload);\n payload.criteria = criteria;\n return payload;\n },\n\n __default: (instance, selectionDataModel, propConfig) => {\n const propPayload = propConfig.payload;\n const sourceIdentifiers = propConfig.sourceIdentifiers;\n const dataObj = selectionDataModel[0].getData();\n let schema = dataObj.schema;\n const payload = Object.assign({}, propPayload);\n schema = dataObj.schema;\n const data = dataObj.data;\n const sourceFields = schema.map(d => d.name);\n payload.criteria = !sourceIdentifiers && selectionDataModel[0].isEmpty() ? null :\n [sourceFields, ...data];\n payload.sourceFields = sourceIdentifiers ? sourceIdentifiers.getSchema().map(d => d.name) : [];\n return payload;\n }\n};\n\n","import { isSimpleObject, FieldType, DataModel } from 'muze-utils';\n\nconst getModelWithFacetData = (dm, data) => {\n const dataObj = dm.getData();\n const schema1 = dataObj.schema;\n const data1 = dataObj.data;\n const jsonData = [];\n const schema2 = data[0].map(d => ({\n name: `${d}`,\n type: FieldType.DIMENSION\n }));\n const data2 = data[1];\n\n data1.forEach((d) => {\n const tuple = {};\n schema1.forEach((obj, i) => {\n tuple[obj.name] = d[i];\n });\n schema2.forEach((obj, i) => {\n tuple[obj.name] = data2[i];\n });\n jsonData.push(tuple);\n });\n\n return new DataModel(jsonData, [...schema1, ...schema2]);\n};\n\nexport const propagateValues = (instance, action, config = {}) => {\n let propagationData;\n const payload = config.payload;\n const selectionSet = config.selectionSet;\n const propagationFieldInf = config.propagationFields[action] || {};\n const propagationFields = propagationFieldInf.fields || [];\n const append = propagationFieldInf.append;\n const criteria = payload.criteria;\n const context = instance.context;\n const dataModel = context.cachedData()[0];\n const sourceId = context.id();\n const sideEfffects = instance.sideEffects();\n const behaviourEffectMap = instance._behaviourEffectMap;\n const mergedModel = selectionSet.mergedEnter.model;\n const fieldsConfig = dataModel.getFieldsConfig();\n payload.sourceUnit = sourceId;\n payload.action = action;\n payload.sourceCanvas = context.parentAlias();\n const propagationBehaviourMap = instance._propagationBehaviourMap;\n const propagationBehaviour = propagationBehaviourMap[action] || action;\n\n let propFields = [];\n if (criteria === null) {\n propagationData = null;\n } else if (isSimpleObject(criteria)) {\n propFields = Object.keys(criteria || {});\n propagationData = mergedModel ? mergedModel.project(propFields) : null;\n } else {\n propFields = criteria[0];\n propagationData = mergedModel ? mergedModel.project(propFields) : null;\n }\n\n const facetByFields = context.facetByFields();\n if (propagationData !== null && propagationFields.length) {\n const fields = propagationData.getData().schema.map(d => d.name);\n propagationData = getModelWithFacetData(propagationData, facetByFields);\n propFields = append ? [...fields, ...propagationFields] : propagationFields;\n propagationData = propagationData.project(propFields);\n }\n\n let propagateInterpolatedValues = false;\n if (propFields.length && propFields.every(field => fieldsConfig[field] &&\n fieldsConfig[field].def.type === FieldType.MEASURE)) {\n propagateInterpolatedValues = true;\n }\n\n const groupId = context.parentAlias();\n payload.action = action;\n const behaviourInstance = instance._actions.behavioural[propagationBehaviour];\n const isMutableAction = behaviourInstance ? behaviourInstance.constructor.mutates() : false;\n\n const filterFn = (entry, propagationConf) => {\n const effects = behaviourEffectMap[entry.config.action];\n const mutates = entry.config.groupId ?\n effects.some(d => sideEfffects[d.name || d].constructor.mutates()) : true;\n return entry.config.groupId !== propagationConf.groupId && mutates;\n };\n\n const sourceBehaviour = instance._actions.behavioural[action];\n const mutates = sourceBehaviour ? sourceBehaviour.constructor.mutates() : false;\n let propConfig = {\n payload,\n action,\n criteria: propagationData,\n isMutableAction: mutates,\n propagateInterpolatedValues,\n groupId,\n sourceId: mutates ? groupId : sourceId,\n filterFn,\n enabled: (propConf, firebolt) => (action !== propagationBehaviour ?\n propConf.payload.sourceCanvas === firebolt.context.parentAlias() : true)\n };\n\n dataModel.propagate(propagationData, propConfig, true);\n\n if (action !== propagationBehaviour) {\n propConfig = {\n payload,\n sourceId: isMutableAction ? groupId : sourceId,\n criteria: propagationData,\n isMutableAction,\n propagateInterpolatedValues,\n action: propagationBehaviour,\n groupId,\n applyOnSource: action === propagationBehaviour,\n enabled: (propConf, firebolt) => propConf.payload.sourceCanvas !== firebolt.context.parentAlias(),\n filterFn\n };\n\n dataModel.propagate(propagationData, propConfig, true, {\n filterImmutableAction: (actionInf, propInf) => actionInf.groupId !== propInf.groupId\n });\n }\n};\n","import { FieldType } from 'muze-utils';\nimport { Firebolt, SpawnableSideEffect } from '@chartshq/muze-firebolt';\nimport { registerListeners } from './helper';\nimport { payloadGenerator } from './payload-generator';\nimport { propagateValues } from './data-propagator';\n\n/**\n * This class manages the interactions of visual unit. It associates physical actions with\n * behavioural actions. It also propagates the behavioural actions to other datamodels.\n */\nexport default class UnitFireBolt extends Firebolt {\n constructor (...params) {\n super(...params);\n registerListeners(this);\n }\n\n propagate (behaviour, payload, selectionSet, sideEffects) {\n propagateValues(this, behaviour, {\n payload,\n selectionSet,\n sideEffects,\n propagationFields: this._propagationFields\n });\n }\n\n getApplicableSideEffects (sideEffects, payload, propagationInf) {\n const context = this.context;\n const unitId = context.id();\n const aliasName = context.parentAlias();\n const propagationSourceCanvas = propagationInf.propPayload && propagationInf.propPayload.sourceCanvas;\n const sourceUnitId = propagationInf.propPayload && propagationInf.propPayload.sourceUnit;\n const sourceSideEffects = this._sourceSideEffects;\n const sideEffectInstances = this.sideEffects();\n const actionOnSource = sourceUnitId ? sourceUnitId === unitId : true;\n\n const applicableSideEffects = payload.sideEffects ? [{\n effects: payload.sideEffects,\n behaviours: [payload.action]\n }] : sideEffects;\n applicableSideEffects.forEach((d) => {\n let mappedEffects = d.effects;\n mappedEffects = mappedEffects.filter((se) => {\n const mutates = sideEffectInstances[se.name || se].constructor.mutates();\n if (mutates && propagationInf.isMutableAction === false) {\n return false;\n }\n if (!actionOnSource && payload.criteria !== null) {\n const sideEffectChecker = sourceSideEffects[se.name || se];\n return sideEffectChecker ? sideEffectChecker(propagationInf.propPayload, context) : true;\n }\n if (propagationSourceCanvas === aliasName || actionOnSource) {\n return se.applyOnSource !== false;\n }\n\n return true;\n });\n d.effects = mappedEffects;\n });\n return applicableSideEffects;\n }\n\n shouldApplySideEffects (propagate) {\n return propagate === false;\n }\n\n onDataModelPropagation () {\n return (data, config) => {\n let isSourceFieldPresent = true;\n let isMutableAction = false;\n const propPayload = config.payload;\n const sourceIdentifiers = config.sourceIdentifiers;\n const enabledFn = config.enabled;\n const action = config.action;\n const payloadFn = payloadGenerator[action] || payloadGenerator.__default;\n\n if (sourceIdentifiers) {\n const fieldsConfig = sourceIdentifiers.getFieldsConfig();\n const sourceIdentifierFields = Object.keys(fieldsConfig);\n const propFields = Object.keys(data[0].getFieldsConfig());\n if (!Object.values(fieldsConfig).some(d => d.def.type === FieldType.MEASURE)) {\n isSourceFieldPresent = sourceIdentifierFields.some(d => propFields.indexOf(d) !== -1);\n }\n }\n\n const payload = payloadFn(this.context, data, config);\n const sourceBehaviours = this._sourceBehaviours;\n const filterFn = sourceBehaviours[action] || sourceBehaviours['*'];\n let enabled = true;\n\n if (filterFn) {\n enabled = filterFn(propPayload || {}, this.context);\n }\n\n if (enabledFn) {\n enabled = enabledFn(config, this) && enabled !== false;\n }\n\n if (enabled) {\n const effects = this._behaviourEffectMap[action];\n const sideEffectInstances = this.sideEffects();\n isMutableAction = config.groupId ?\n effects.some(d => sideEffectInstances[d.name || d].constructor.mutates()) : config.isMutableAction;\n\n const propagationInf = {\n propagate: false,\n data,\n propPayload,\n sourceIdentifiers,\n persistent: false,\n isSourceFieldPresent,\n sourceId: config.propagationSourceId,\n isMutableAction: config.isMutableAction\n };\n\n this._actionHistory[action] = {\n payload,\n propagationInf,\n isMutableAction\n };\n this.dispatchBehaviour(action, payload, propagationInf);\n }\n };\n }\n\n initializeSideEffects () {\n super.initializeSideEffects();\n const sideEffects = this.sideEffects();\n for (const key in sideEffects) {\n if ({}.hasOwnProperty.call(sideEffects, key)) {\n sideEffects[key] instanceof SpawnableSideEffect && sideEffects[key].drawingContext(() => {\n const context = this.context;\n return context.getDrawingContext();\n });\n }\n }\n }\n\n prepareSelectionSets (behaviours) {\n const data = this.context.data();\n if (data) {\n this.createSelectionSet(data.getData().uids, behaviours);\n }\n return this;\n }\n\n remove () {\n this.context.cachedData()[0].unsubscribe('propagation');\n return this;\n }\n}\n","import { layerFactory } from '@chartshq/visual-layer';\nimport {\n setAttrs,\n CommonProps,\n getUniqueId,\n getQualifiedClassName,\n selectElement,\n transactor,\n Store,\n makeElement,\n registerListeners,\n generateGetterSetters,\n getDataModelFromIdentifiers,\n isSimpleObject,\n transposeArray,\n FieldType\n} from 'muze-utils';\nimport { physicalActions, sideEffects, behaviouralActions, behaviourEffectMap } from '@chartshq/muze-firebolt';\nimport { actionBehaviourMap } from './firebolt/action-behaviour-map';\nimport {\n renderLayers,\n getNearestDimensionalValue,\n removeLayersBy,\n getLayersBy,\n getLayerFromDef,\n attachAxisToLayers,\n getLayerAxisIndex,\n createSideEffectGroup,\n getAdjustedDomain,\n resolveEncodingTransform\n} from './helper';\nimport { renderGridLineLayers } from './helper/grid-lines';\nimport localOptions from './local-options';\nimport { listenerMap } from './listener-map';\nimport {\n primaryYAxisUpdated,\n primaryXAxisUpdated,\n secondaryXAxisUpdated,\n secondaryYAxisUpdated,\n DATADOMAIN,\n TIMEDIFFS\n} from './enums/reactive-props';\nimport { PROPS } from './props';\nimport UnitFireBolt from './firebolt';\nimport './styles.scss';\n\nconst FORMAL_NAME = 'unit';\n\n/**\n * @module VisualUnit\n * A hierarchical component of renderer which manages multiple layers. This logical\n * module is responsible for layouting layers, attach axis with them, resolving conflicts of layers.\n */\n\n/**\n * Basic unit implementaiton\n * @class VisualUnit\n */\nexport default class VisualUnit {\n\n /**\n * Creates instance of visualization unit\n * @param registry {Object} Component registry\n * @param dependencies {Object} Dependencies required by visual unit.\n */\n constructor (registry, dependencies) {\n this._id = getUniqueId();\n this._dependencies = dependencies;\n this._layerDeps = {\n throwback: new Store({\n onlayerdraw: false\n }),\n smartLabel: dependencies.smartLabel\n };\n this._renderedResolve = null;\n this._renderedPromise = new Promise((resolve) => {\n this._renderedResolve = resolve;\n });\n this._layerDeps.throwback.registerChangeListener([CommonProps.ON_LAYER_DRAW], () => {\n this._renderedResolve();\n this._lifeCycleManager.notify({ client: this.layers(), action: 'drawn', formalName: 'layer' });\n });\n\n this._lifeCycleManager = dependencies.lifeCycleManager;\n this._layersMap = {};\n this._gridlines = [];\n this._gridbands = [];\n this._layerAxisIndex = {};\n this._transformedDataModels = {};\n\n layerFactory.setLayerRegistry(registry.layerRegistry);\n generateGetterSetters(this, PROPS);\n this.cachedData([]);\n this.store(new Store({\n [primaryXAxisUpdated]: null,\n [primaryYAxisUpdated]: null,\n [secondaryXAxisUpdated]: null,\n [secondaryYAxisUpdated]: null\n }));\n transactor(this, localOptions, this.store().model);\n this.firebolt(new UnitFireBolt(this, {\n physical: physicalActions,\n behavioural: behaviouralActions,\n physicalBehaviouralMap: actionBehaviourMap\n }, sideEffects, behaviourEffectMap));\n registerListeners(this, listenerMap);\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof VisualUnit\n */\n static formalName () {\n return FORMAL_NAME;\n }\n\n /**\n * Static helper for creates a unit instance\n *\n * @param {Object} [id] optional unique identifier for a unit; , id is calculated internally\n * @param {DataModel} data instance of datamodel\n * @param {Array.} layers layer configuration\n * @param {Object} config configurtion for the visual unit\n * @return {VisualUnit} Instance of a unit\n */\n static create (...params) {\n return new this(...params);\n }\n\n /**\n *\n *\n * @readonly\n * @memberof VisualUnit\n */\n firebolt (...firebolt) {\n if (firebolt.length) {\n this._firebolt = firebolt[0];\n return this;\n }\n return this._firebolt;\n }\n\n /**\n * Gets the domain for all axes of this visual unit.\n * @return {Object} Domains of each data field.\n */\n getDataDomain () {\n return this.store().get(DATADOMAIN);\n }\n\n /**\n * Retrieves the id created for this instance of visual unit\n * @return {string} id associated with the instance\n */\n id () {\n return this._id;\n }\n\n /**\n *\n *\n * @returns\n * @memberof VisualUnit\n */\n lockModel () {\n this._store.model.lock();\n return this;\n }\n\n /**\n *\n *\n * @returns\n * @memberof VisualUnit\n */\n unlockModel () {\n this._store.model.unlock();\n return this;\n }\n\n timeDiffsByField (...params) {\n if (params.length) {\n return this;\n }\n return this._timeDiffsByField;\n }\n\n /**\n * Renders the visual unit. It creates the layout and renders the axes and layers.\n * @return {VisualUnit} Instance of visual unit.\n */\n render (container) {\n const config = this.config();\n const { className, defClassName, sideEffectClassName, classPrefix } = config;\n const qualifiedClassName = getQualifiedClassName(defClassName, this.id(), config.classPrefix);\n const width = this.width();\n const height = this.height();\n const containerSelection = selectElement(container).style('position', 'relative');\n\n this._rootSvg = makeElement(containerSelection, 'svg', [null], className)\n .style('width', `${width}px`).style('height', `${height}px`);\n\n const node = this._rootSvg.node();\n setAttrs(node, {\n width,\n height,\n class: qualifiedClassName.join(' ')\n });\n renderGridLineLayers(this, node);\n renderLayers(this, node, this.layers(), {\n width,\n height\n });\n this._sideEffectGroup = createSideEffectGroup(node, `${classPrefix}-${sideEffectClassName}`);\n return this;\n }\n\n done () {\n return this._renderedPromise;\n }\n /**\n *\n *\n * @returns\n * @memberof VisualUnit\n */\n enableCaching () {\n this._cache = true;\n return this;\n }\n\n /**\n *\n *\n * @returns\n * @memberof VisualUnit\n */\n clearCaching () {\n this._cache = false;\n this.cachedData([this.cachedData()[0]]);\n return this;\n }\n\n /**\n *\n *\n * @returns\n * @memberof VisualUnit\n */\n getDrawingContext () {\n const rootSvg = this._rootSvg && this._rootSvg.node();\n const width = this.width();\n const height = this.height();\n return {\n htmlContainer: this.mount(),\n svgContainer: rootSvg,\n width,\n height,\n sideEffectGroup: this._sideEffectGroup,\n parentContainer: this.parentContainer(),\n xOffset: 0,\n yOffset: 0\n };\n }\n\n /**\n * Returns the serialized configuration of visual unit.\n * @return {Object} serialized configuration\n */\n serialize () {\n return {\n layers: this.layers().map(layer => layer.serialize()),\n config: this.config(),\n axes: this.store().get('axes').map(axis => axis.serialize())\n };\n }\n\n /**\n *\n *\n * @param {*} layerDef\n * @returns\n * @memberof VisualUnit\n */\n addLayer (layerDef) {\n const layerName = layerDef.name;\n const layer = this.getLayerByName(layerName);\n const measurement = {\n width: this.width(),\n height: this.height()\n };\n\n if (layer) {\n return [layer];\n }\n const serializedDef = layerFactory.getSerializedConf(layerDef.mark, layerDef);\n const instances = Object.values(getLayerFromDef(this, serializedDef));\n this.layers().push(...instances);\n const layerAxisIndex = getLayerAxisIndex(instances, this.fields());\n this._layerAxisIndex = Object.assign(this._layerAxisIndex, layerAxisIndex);\n attachAxisToLayers(this.axes(), instances, layerAxisIndex);\n const store = { unit: this, layers: {} };\n this.layers().forEach((inst) => {\n store.layers[inst.alias()] = inst;\n });\n instances.forEach((lyr) => {\n resolveEncodingTransform(lyr, store);\n lyr.measurement(measurement);\n lyr.dataProps({\n timeDiffs: this.store().get(TIMEDIFFS)\n });\n });\n return instances;\n }\n\n /**\n *\n *\n * @returns\n * @memberof VisualUnit\n */\n remove () {\n const lifeCycleManager = this._dependencies.lifeCycleManager;\n lifeCycleManager.notify({ client: this, action: 'beforeremove', formalName: 'unit' });\n this.store().unsubscribeAll();\n selectElement(this.mount()).remove();\n this.firebolt().remove();\n // Remove layers\n lifeCycleManager.notify({ client: this.layers(), action: 'beforeremove', formalName: 'layer' });\n this.layers().forEach(layer => layer.remove());\n lifeCycleManager.notify({ client: this.layers(), action: 'removed', formalName: 'layer' });\n lifeCycleManager.notify({ client: this, action: 'removed', formalName: 'unit' });\n return this;\n }\n\n /**\n *\n *\n * @param {*} identifiers\n * @returns\n * @memberof VisualUnit\n */\n getDataModelFromIdentifiers (identifiers, mode, parentModel) {\n if (identifiers === null) {\n return null;\n }\n const dataModel = parentModel || this.data();\n return getDataModelFromIdentifiers(dataModel, identifiers, mode);\n }\n\n /**\n *\n *\n * @returns\n * @memberof VisualUnit\n */\n resetData () {\n this.data(this.cachedData()[0]);\n return this;\n }\n\n /**\n *\n *\n * @returns\n * @memberof VisualUnit\n */\n getSourceInfo () {\n return {\n dimensionMeasureMap: this._dimensionMeasureMap,\n fields: this.fields(),\n data: this.data(),\n axes: this.axes()\n };\n }\n\n /**\n *\n *\n * @returns\n * @memberof VisualUnit\n */\n getDefaultTargetContainer () {\n const { classPrefix, defClassName } = this.config();\n return [`.${classPrefix}-${defClassName}`];\n }\n\n /**\n *\n *\n * @param {*} type\n * @returns\n * @memberof VisualUnit\n */\n getLayersByType (type) {\n const layers = getLayersBy(this.layers(), 'type', type);\n return layers;\n }\n\n /**\n *\n *\n * @param {*} name\n * @returns\n * @memberof VisualUnit\n */\n getLayerByName (name) {\n const layers = getLayersBy(this.layers(), 'name', name);\n return layers[0];\n }\n\n /**\n *\n *\n * @param {*} domain\n * @returns\n * @memberof VisualUnit\n */\n updateAxisDomain (domain) {\n ['x', 'y'].forEach((type) => {\n const axes = this.axes()[type];\n let min = [];\n let max = [];\n let dom;\n axes && axes.forEach((axis, i) => {\n const field = this.fields()[type][i];\n dom = domain[`${this.fields()[type][i]}`];\n\n if (field.type() !== FieldType.DIMENSION && dom) {\n min[i] = dom[0];\n max[i] = dom[1];\n }\n });\n if (axes) {\n if (axes.length > 1) {\n const axisConf = axes[0].config();\n if (axes[0].constructor.type() === 'linear') {\n if (axisConf.alignZeroLine) {\n axes.forEach(axis => axis.config({\n nice: false\n }));\n const adjustedDomain = getAdjustedDomain(max, min);\n min = adjustedDomain.min;\n max = adjustedDomain.max;\n }\n\n axes[0].updateDomainCache([min[0], max[0]]);\n axes[1].updateDomainCache([min[1], max[1]]);\n } else {\n axes[0].updateDomainCache(dom);\n axes[1].updateDomainCache(dom);\n }\n } else {\n axes[0].updateDomainCache(dom);\n }\n }\n });\n return this;\n }\n\n /**\n * Finds the nearest point closest to the x and y position.\n * @param {number} x x position.\n * @param {number} y y position.\n * @return {Object} Nearest point.\n */\n getNearestPoint (x, y, args) {\n let pointObj = {\n id: null\n };\n const dimValue = getNearestDimensionalValue(this, {\n x,\n y\n });\n\n if (dimValue !== null && args.getAllPoints) {\n pointObj.id = dimValue;\n const pointInf = this.getMarkInfFromLayers(x, y, args);\n pointObj.target = pointInf && pointInf.id ? pointInf.id : pointObj.id;\n return pointObj;\n }\n\n const markInf = this.getMarkInfFromLayers(x, y, args) || { id: null };\n pointObj = Object.assign({}, markInf);\n\n pointObj.target = markInf.id;\n return pointObj;\n }\n\n getMarkInfFromLayers (x, y, args) {\n const layers = this.layers();\n const len = layers.length;\n let point = null;\n // Iterate through the layers array and fetch the nearest point from each layer. If a valid\n // nearest point is found from any layer, then return that point.\n for (let i = 0; i < len; i++) {\n const layer = layers[i];\n const config = layer.config();\n if (config.interactive !== false) {\n point = layer.getNearestPoint(x, y, args);\n }\n if (point) {\n return point;\n }\n }\n return point;\n }\n\n /**\n *\n *\n * @param {*} identifiers\n * @returns\n * @memberof VisualUnit\n */\n getPlotPointsFromIdentifiers (identifiers, config = {}) {\n let points = [];\n let parsedIdentifiers = identifiers;\n if (identifiers === null) {\n return [];\n }\n const layers = this.layers();\n const len = layers.length;\n if (isSimpleObject(identifiers)) {\n parsedIdentifiers = [Object.keys(identifiers)];\n parsedIdentifiers = [...parsedIdentifiers, ...transposeArray(Object.values(identifiers))];\n }\n for (let i = 0; i < len; i++) {\n const layer = layers[i];\n if (layer.config().interactive !== false) {\n points = [...points, ...layer.getPointsFromIdentifiers(parsedIdentifiers, config)];\n }\n }\n return points;\n }\n\n /**\n *\n *\n * @param {*} name\n * @returns\n * @memberof VisualUnit\n */\n removeLayerByName (name) {\n removeLayersBy('name', name);\n return this;\n }\n\n /**\n *\n *\n * @param {*} type\n * @returns\n * @memberof VisualUnit\n */\n removeLayersByType (type) {\n removeLayersBy('type', type);\n return this;\n }\n\n parentContainer (...container) {\n if (container.length) {\n this._parentContainer = container[0];\n\n return this;\n }\n return this._parentContainer;\n }\n}\n","import { DataModel } from 'muze-utils';\n\nimport { retriveDomainFromData } from './group-utils';\n\n/**\n * Gets name of fields form the variables\n *\n * @param {*} fields1\n * @param {*} [fields2=[]]\n * @return\n */\nconst getFieldNames = (fields1, fields2 = []) => [fields1, fields2].map(fields => fields.reduce((acc, d) => {\n acc = [...acc, ...d.getMembers()];\n return acc;\n}, []));\n\n/**\n * Creates a selected datamodel from a parent datamodel and a set of field names\n *\n * @param {Object} datamodel provided as input\n * @param {Array} fieldNames schema names\n * @param {Array} fieldValues values of those schema names to be selected\n * @return {Object} creates a new selected datamodel\n */\nconst createSelectedDataModel = (datamodel, fieldNames, fieldValues) =>\n datamodel.select(fields => fieldNames.every((field, k) => fields[field].value === fieldValues[k]));\n\n/**\n *\n *\n * @param {*} facets\n * @param {*} keyArray\n * @return\n */\nconst uniqueKeyGenerator = (keyArray, context, depth = 0, val = []) => {\n const {\n facets,\n dataModel,\n uniqueValues\n } = context;\n\n // Get unique keys for the next depth recursively if required\n if (facets[depth + 1]) {\n const field = facets[depth];\n uniqueValues.forEach((value) => {\n const newDm = dataModel.select(fields => fields[field].value === value);\n const nextDepthUniqueValues = retriveDomainFromData(newDm, facets[depth + 1]);\n const newContext = {\n facets,\n dataModel: newDm,\n uniqueValues: nextDepthUniqueValues\n };\n\n uniqueKeyGenerator(keyArray, newContext, depth + 1, [...val, value]);\n });\n } else {\n uniqueValues.forEach((value) => {\n keyArray.push([...val, value]);\n });\n }\n};\n\n/**\n * projects row model based on the set of row and/or column and other projection fields\n *\n * @param {Object} datamodel provided as input\n * @return {Object} Projected datamodel\n */\nconst projectRows = (datamodel, projections) => {\n const {\n allColumnProjections,\n rowProjections,\n optionalProjections\n } = projections;\n\n if (rowProjections.length > 0) {\n return rowProjections.map((projectFields) => {\n const [projFieldNames, colProjFieldNames] = getFieldNames(projectFields, allColumnProjections);\n return datamodel.project([...projFieldNames, ...colProjFieldNames, ...optionalProjections]);\n });\n }\n return [datamodel];\n};\n\n/**\n * Adds the datamodels to current row index based on column fields\n *\n * @param {Array} context current context\n * @param {Array} callback List of facets applied to the current datamodel\n */\nconst pushToMatrix = (context, callback) => {\n let cells = [];\n const {\n matrix,\n datamodel,\n facetInfo,\n fieldInfo\n } = context;\n // Get projected fields for current row\n const {\n rowProjections,\n colProjections,\n optionalProjections\n } = fieldInfo;\n const {\n rowIndex,\n columnIndex\n } = facetInfo;\n const rowProj = rowProjections[(rowIndex) % rowProjections.length] || [];\n\n // Get the cells for the matrix from the return function of the callback on the datamodel.\n // callback function -> (datamodel, {projections, indices}, facets)\n if (colProjections.length > 0) {\n cells = colProjections.map((projectFields, projIdx) => {\n const [colProjFieldNames, rowProjFieldNames] = getFieldNames(projectFields, rowProj);\n const projectedDm = datamodel.project([...colProjFieldNames, ...rowProjFieldNames, ...optionalProjections]);\n const projections = { rowFields: rowProj, columnFields: projectFields };\n const indices = { rowIndex, columnIndex: columnIndex * colProjections.length + projIdx };\n\n return callback(projectedDm, { projections, indices }, facetInfo);\n });\n } else {\n const projections = { rowFields: rowProj, columnFields: [] };\n const indices = { rowIndex, columnIndex };\n\n cells = [callback(datamodel, { projections, indices }, facetInfo)];\n }\n\n matrix[rowIndex] = matrix[rowIndex] || [];\n matrix[rowIndex].push(...cells);\n};\n\n/**\n * Gets Matrixes for corresponding datamodel, facets and projections\n *\n * @param {Object} dataModel input datamodel\n * @param {Object} fieldMap corresponding fieldmap\n * @param {Array} facetsAndProjections contains the set of facets and projections for the matrices\n * @param {Function} callback Callback executed after datamodels are prepared after sel/proj\n * @return {Object} set of matrices with the corresponding row and column keys\n */\nexport const getMatrixModel = (dataModel, fieldInfo, callback) => {\n let rowDataModels = [];\n const rowKeys = [];\n const columnKeys = [];\n const allColumnProjections = [];\n const matrix = [];\n const facetInfo = [];\n const {\n rowFacets,\n colFacets,\n colProjections\n } = fieldInfo;\n\n colProjections.forEach((colProj) => {\n allColumnProjections.push(...colProj);\n });\n fieldInfo.allColumnProjections = allColumnProjections;\n\n // Performing row selection and projection\n if (rowFacets.length > 0) {\n // Get unique values for the root level of facet\n const field = rowFacets[0].toString();\n const firstLevelRowKeys = retriveDomainFromData(dataModel, field);\n\n // Get unique keys in the form of an array of arrays for each row\n uniqueKeyGenerator(rowKeys, { facets: rowFacets, dataModel, uniqueValues: firstLevelRowKeys });\n\n // Apply selection -> projection -> row datamodels\n rowKeys.forEach((val) => {\n // Create faceted datamodel\n const [rowFacetFieldNames] = getFieldNames(rowFacets);\n const selectedDataModel = createSelectedDataModel(dataModel, rowFacetFieldNames, val);\n\n // Project the datamodel based on the number of projections (based on last levels)\n facetInfo.push([rowFacets, val]);\n rowDataModels.push(...projectRows(selectedDataModel, fieldInfo));\n });\n } else {\n // No row facets, hence only row projection\n rowDataModels.push(...projectRows(dataModel, fieldInfo));\n }\n\n // Maintaining set of row datamodels for column resolution\n rowDataModels = rowDataModels.length > 0 ? rowDataModels : [[]];\n\n // Performing column selection and projection\n if (colFacets.length > 0) {\n const colFacetNames = colFacets.map(d => `${d}`);\n // Get unique values for the root level of facet\n const field = colFacetNames[0];\n const firstLevelColumnKeys = retriveDomainFromData(dataModel, field);\n\n // Get unique keys to create faceted datamodels: this time for columns\n uniqueKeyGenerator(columnKeys, {\n facets: colFacetNames,\n dataModel,\n uniqueValues: firstLevelColumnKeys\n });\n\n // For each row in the datamodel, apply selection -> projection -> push the projection to matri\n rowDataModels.forEach((dme, rIndex) => {\n facetInfo[rIndex] = facetInfo[rIndex] || [[], []];\n columnKeys.forEach((val, cIndex) => {\n matrix[rIndex] = matrix[rIndex] || [];\n\n // If datamodel is not present in current row, choose parent datamodel\n const datamodel = dme instanceof DataModel ? dme : dataModel;\n\n // Selection is made on the datamodel for the current row\n const selectedDataModel = createSelectedDataModel(datamodel, colFacetNames, val);\n const context = {\n matrix,\n datamodel: selectedDataModel,\n facetInfo: {\n rowFacets: facetInfo[rIndex],\n colFacets: [colFacets, val],\n rowIndex: rIndex,\n columnIndex: cIndex\n },\n fieldInfo\n };\n pushToMatrix(context, callback);\n });\n });\n } else {\n // No column facets, hence only row projection\n rowDataModels.forEach((dme, rIndex) => {\n facetInfo[rIndex] = facetInfo[rIndex] || [[], []];\n const context = {\n matrix,\n datamodel: dme || dataModel,\n facetInfo: {\n rowFacets: facetInfo[rIndex],\n colFacets: [[], []],\n rowIndex: rIndex,\n columnIndex: 0\n },\n fieldInfo\n };\n\n pushToMatrix(context, callback);\n });\n }\n\n // Getting column keys\n const transposedColKeys = columnKeys.length > 0 ? columnKeys[0].map((col, i) =>\n columnKeys.map(row => row[i])) : columnKeys;\n\n return { matrix, rowKeys, columnKeys: transposedColKeys };\n};\n","import { AxisOrientation } from '@chartshq/muze-axis';\nimport { getObjProp, FieldType } from 'muze-utils';\nimport { getMatrixModel } from './matrix-model';\nimport {\n getCellKey,\n isDistributionEqual,\n mutateAxesFromMap,\n createSelection,\n getFieldsFromSuppliedLayers,\n extractFields\n} from './group-utils';\nimport { ROW, ROWS, COLUMNS, COL, LEFT, RIGHT, TOP, BOTTOM, PRIMARY, SECONDARY, X, Y } from '../enums/constants';\n\n/**\n * Updates row and column cells with the geom cell corresponding to the facet keys\n *\n * @param {*} resolver\n * @param {*} facets\n */\nconst updateCells = (resolver, facets, geomCell) => {\n [ROW, COL].forEach((field) => {\n const cells = resolver[`${field}Cells`]();\n const facetKey = facets[`${field}Facets`][1].join();\n\n !cells[facetKey] && (cells[facetKey] = []);\n cells[facetKey].push(geomCell);\n resolver[`${field}Cells`](cells);\n });\n};\n\n/**\n *\n *\n * @param {*} context\n * @param {*} datamodel\n * @param {*} fieldInfo\n * @param {*} facets\n * @return\n */\nexport const createValueCells = (context, datamodel, fieldInfo, facets) => {\n const {\n projections,\n indices\n } = fieldInfo;\n const {\n rowFields,\n columnFields\n } = projections;\n const {\n rowIndex,\n columnIndex\n } = indices;\n const {\n suppliedLayers,\n cell: GeomCell,\n resolver,\n config,\n encoder,\n detailFields\n } = context;\n const axes = resolver.axes();\n const cacheMaps = resolver.cacheMaps();\n const matrixLayers = resolver.matrixLayers();\n const labelManager = resolver.dependencies().smartlabel;\n const horizontalAxis = resolver.horizontalAxis();\n const verticalAxis = resolver.verticalAxis();\n const datamodelTransform = resolver.datamodelTransform();\n const {\n entryCellMap,\n exitCellMap\n } = cacheMaps;\n const layerConfigArr = encoder.getLayerConfig({ columnFields, rowFields }, suppliedLayers || []);\n const axesCreators = { config, labelManager, axes, cacheMaps };\n\n fieldInfo.normalizedColumns = verticalAxis.fields;\n fieldInfo.normalizedRows = horizontalAxis.fields;\n\n const groupAxes = encoder.createAxis(axesCreators, fieldInfo);\n\n matrixLayers[rowIndex] = matrixLayers[rowIndex] ? matrixLayers[rowIndex] : [];\n matrixLayers[rowIndex][columnIndex] = layerConfigArr;\n\n // return from map if already there otherwise create and put in map\n const geomCellKey = getCellKey(rowIndex, columnIndex);\n const fields = {\n y: rowFields,\n x: columnFields\n };\n const allFacets = [\n [...facets.rowFacets[0], ...facets.colFacets[0]],\n [...facets.rowFacets[1], ...facets.colFacets[1]]\n ];\n const geomCell = !exitCellMap.has(geomCellKey) ? new GeomCell() : exitCellMap.get(geomCellKey);\n\n geomCell.data(datamodel)\n .axes(groupAxes)\n .fields(fields)\n .transform(datamodelTransform)\n .detailFields(detailFields)\n .facetByFields(allFacets);\n entryCellMap.set(geomCellKey, geomCell);\n exitCellMap.delete(geomCellKey);\n\n updateCells(resolver, facets, geomCell);\n\n return entryCellMap.get(geomCellKey);\n};\n\n/**\n * Creates axis cells based on the set of axes\n *\n * @param {Selection} selection Contains a selection of the axis units\n * @param {Array} axes Actual axis units\n * @param {number} axisIndex 0-> primary axis, 1-> secondary axis(when dual axis is made)\n * @param {Object} cells Contains a collection of the cells\n * @return {Object} return either set of axis/blank cells depending on the config\n */\n\nconst createAxisCells = (selection, axes, axisIndex, cells) =>\n createSelection(selection, axis => axis, axes, (item, i) => i + item.reduce((e, n) => {\n const id = n.id + axisIndex;\n return e + id;\n }, '')).map((axis) => {\n if (axis && axis[axisIndex]) {\n const axisInst = axis[axisIndex];\n const { orientation, show } = axisInst.config();\n\n return new cells.AxisCell().source(axisInst).config({\n isOffset: orientation === AxisOrientation.LEFT || orientation === AxisOrientation.TOP,\n show\n });\n }\n return new cells.BlankCell().config({ show: false });\n });\n\n/**\n *\n *\n * @param {*} context\n * @param {*} selectionObj\n * @param {*} cells\n * @retur\n */\nconst axisPlaceholderGn = (context, selObj, cells) => {\n const {\n matrices\n } = context;\n const {\n axesMatrix\n } = matrices;\n\n return (type, axisFrom) => {\n const axes = axesMatrix[`${type}`];\n\n if (axes && axes.length) {\n if (type === X || type === Y) {\n const fieldNames = type === Y ? ROWS : COLUMNS;\n\n [PRIMARY, SECONDARY].forEach((fieldType, index) => {\n const selObjProp = `${fieldNames}${fieldType}`;\n let axisIndex = index;\n let axesForDraw = axes;\n if (axisFrom === RIGHT || axisFrom === BOTTOM) {\n axisIndex = 1 - axisIndex;\n }\n if (!getObjProp(axes, 0, axisIndex)) {\n axesForDraw = [];\n }\n selObj[selObjProp] = createAxisCells(selObj[selObjProp], axesForDraw, axisIndex, cells);\n });\n } else {\n selObj.rowsPrimary = createAxisCells(selObj.rowPrime, axes.map(() => []), 0, cells);\n selObj.columnsPrimary = createAxisCells(selObj.colPrime, axes[0], 0, cells);\n }\n }\n return selObj;\n };\n};\n\n/**\n * Creates header cells based on the set of headers\n *\n * @param {Object} selection Contains a selection of the header units\n * @param {string} headers Contains a list of the headers\n * @param {Object} cells Contains a collection of the cells\n * @param {Object} labelManager smart label instance\n * @return {Object} return either set of header cells depending on the config\n */\nconst createTextCells = (selection, headers, cells, labelManager) => createSelection(selection,\n label => new cells.TextCell({}, { labelManager }).source(label), headers, (key, i) => key + i);\n\n/**\n *\n *\n * @param {*} context\n * @param {*} selectionObj\n * @param {*} cells\n * @param {*} labelManager\n * @return\n */\nconst headerPlaceholderGn = (context, selectionObj, cells, labelManager) => {\n const {\n axis,\n keys,\n type,\n facetConfig\n } = context;\n const counter = axis.length / keys.length;\n const selectionKeys = keys.length ? axis.map((d, i) => keys[Math.floor(i / counter)]) : [];\n return createSelection(selectionObj[`${type}Headers`], keySet => keySet, selectionKeys, (keySet, i) =>\n `${keySet.join(',')}-${i}`).map(keySet => createTextCells(null, keySet, cells, labelManager)\n .map((cell, k, i) => cell.source(keySet[i]).config(facetConfig || {})));\n};\n\n/**\n * Creates a set of placeholders as a part of selection object\n *\n * @param {Array} normalizedOptions contains normalized rows and columns\n * @param {Array} matrices contains axis and value matrices\n * @param {aArrayny} projections contains set of row and column projections\n * @param {Object} cells Contains a collection of the cells\n * @param {Object} labelManager smart label instance\n * @return {Object} Creates a set of placeholders as a part of selections\n */\nconst generatePlaceholders = (context, cells, labelManager) => {\n let selectionObj;\n const {\n matrices,\n fields,\n facetsAndProjections,\n selection,\n facetConfig,\n encoders\n } = context;\n const {\n rows,\n columns\n } = fields;\n const {\n valuesMatrix\n } = matrices;\n const {\n rowProjections,\n colProjections\n } = facetsAndProjections;\n const {\n rowKeys,\n columnKeys\n } = valuesMatrix;\n const takeAxisFrom = encoders.simpleEncoder._axisFrom;\n const takeHeaderFrom = encoders.simpleEncoder._headerFrom;\n\n selectionObj = selection || {};\n\n ['pie', X, Y].forEach((axis) => {\n const axisFrom = axis === X ? takeAxisFrom.column : takeAxisFrom.row;\n selectionObj = axisPlaceholderGn(context, selectionObj, cells)(axis, axisFrom);\n });\n\n const {\n rowsPrimary,\n rowsSecondary,\n columnsPrimary,\n columnsSecondary\n } = selectionObj;\n\n const rowAxis = rowsPrimary && rowsPrimary.getObjects().length ? rowsPrimary.getObjects() :\n (rowsSecondary && rowsSecondary.getObjects().length ? rowsSecondary.getObjects() : []);\n const colAxis = columnsPrimary && columnsPrimary.getObjects().length ? columnsPrimary.getObjects() :\n (columnsSecondary && columnsSecondary.getObjects().length ? columnsSecondary.getObjects() : []);\n\n const headerConfig = [\n { type: LEFT, section: rows[0], axis: rowAxis, headerFrom: takeHeaderFrom.row },\n { type: RIGHT, section: rows[1], axis: rowAxis, headerFrom: takeHeaderFrom.row },\n { type: TOP, section: columns[0], axis: colAxis, headerFrom: takeHeaderFrom.column },\n { type: BOTTOM, section: columns[1], axis: colAxis, headerFrom: takeHeaderFrom.column }\n ];\n\n headerConfig.forEach((config, index) => {\n let keys;\n let length;\n const {\n type,\n section,\n axis,\n headerFrom\n } = config;\n\n if (index < 2) {\n keys = rowKeys;\n length = rowProjections.length > 0 ? rowProjections.length : 1;\n } else {\n keys = columnKeys;\n length = colProjections.length > 0 ? colProjections.length : 1;\n }\n\n if (section.length && headerFrom === type && axis && keys.length) {\n const hContext = { axis, length, type };\n let headers = [];\n if (index < 2) {\n hContext.keys = keys;\n hContext.facetConfig = facetConfig.rows;\n headers = headerPlaceholderGn(hContext, selectionObj, cells, labelManager);\n } else {\n hContext.facetConfig = facetConfig.columns;\n hContext.keys = keys[0].map((key, i) => keys.map(e => e[i]));\n headers = headerPlaceholderGn(hContext, selectionObj, cells, labelManager);\n }\n selectionObj[`${type}Headers`] = headers;\n } else {\n selectionObj[`${type}Headers`] = null;\n }\n });\n return selectionObj;\n};\n\n/**\n * Generates matrices\n *\n * @param {Object} config Configuration to generate matrices\n * @param {Array} matrices Matrices containing the set of visual units and axes units\n * @param {Object} cells Contains a collection of the cells\n * @param {Object} labelManager smart label instance\n * @return {Object} contains a collection of matrices\n */\nexport const generateMatrices = (context, matrices, cells, labelManager) => {\n const {\n unitHeight,\n unitWidth,\n facetsAndProjections,\n normalizedRows,\n normalizedColumns,\n selection,\n axisFrom,\n facetConfig,\n encoders\n } = context;\n const placeholderContext = {\n fields: {\n rows: normalizedRows,\n columns: normalizedColumns\n },\n matrices,\n facetsAndProjections,\n selection,\n axisFrom,\n facetConfig,\n encoders\n };\n // Generate placeholders for all matrices\n const selectionObj = generatePlaceholders(placeholderContext, cells, labelManager);\n const {\n columnsPrimary,\n columnsSecondary,\n rowsPrimary,\n rowsSecondary,\n leftHeaders,\n topHeaders,\n bottomHeaders,\n rightHeaders\n } = selectionObj;\n const [rowPrime, rowSec, colPrime, colSec] = [rowsPrimary, rowsSecondary, columnsPrimary, columnsSecondary]\n .map(d => (d ? d.getObjects() : []));\n const [leftFacets, rightFacets] = [leftHeaders, rightHeaders].map(e => (e ? e.getObjects()\n .map(f => f.getObjects()) : []));\n\n // Compute left matrix using left headers and the axes on the rows\n let leftMatrix = leftFacets.length ? leftFacets.map((d, i) => {\n rowPrime[i] = rowPrime[i] ? [rowPrime[i]] : [];\n return [...d, ...rowPrime[i]];\n }) : (rowPrime ? rowPrime.map(d => [d]) : []);\n\n // Compute right matrix using right headers and the axes on the rows\n const rightMatrix = rowSec.length ? rowSec.map((d, i) => [d, ...(rightFacets[i] || [])]) : (rightFacets.length ?\n rightFacets.map(d => [...d]) : []);\n\n const topMatrix = [];\n if (topHeaders) {\n const headers = topHeaders.getObjects();\n headers.forEach((e) => {\n const innerHeaders = e.getObjects();\n innerHeaders.forEach((x, i) => {\n topMatrix[i] = topMatrix[i] || [];\n topMatrix[i].push(x);\n });\n });\n }\n // Compute top matrix using the top headers and axes on the columns\n if (colPrime.length) {\n topMatrix.push(colPrime);\n }\n\n // Bottom and right matrices are prepared using the user config.\n let bottomMatrix = [];\n if (colSec.length) {\n bottomMatrix.push(colSec);\n }\n const currentBottomLength = bottomMatrix.length;\n if (bottomHeaders) {\n const headers = bottomHeaders.getObjects();\n headers.forEach((e) => {\n const innerHeaders = e.getObjects();\n innerHeaders.forEach((x, i) => {\n bottomMatrix[i + currentBottomLength] = bottomMatrix[i + currentBottomLength] || [];\n bottomMatrix[i + currentBottomLength].push(x);\n });\n });\n }\n\n if (!leftMatrix.length && !rightMatrix.length) {\n const cell = new cells.BlankCell();\n cell.setAvailableSpace(unitWidth, unitHeight);\n leftMatrix = [[cell]];\n }\n\n if (!topMatrix.length && (!bottomMatrix.length || !bottomMatrix[0].length)) {\n const cell = new cells.BlankCell();\n cell.setAvailableSpace(unitWidth, unitHeight);\n bottomMatrix = [[cell]];\n }\n\n return {\n rows: [leftMatrix, rightMatrix],\n columns: [topMatrix, bottomMatrix],\n selectionObj\n };\n};\n\n/**\n * Computes matrices for a group\n *\n * @param {Object} datamodel on which the matrices are to be computed\n * @param {Object} config configuration of the matrices\n * @param {Object} layerRegistry contains the registered layers\n * @return {Object} conputed matrices\n * @memberof MatrixResolver\n */\nexport const computeMatrices = (context, config) => {\n const {\n resolver,\n datamodel,\n componentRegistry,\n encoders\n } = context;\n const {\n globalConfig,\n selection,\n transform\n } = config;\n const groupBy = globalConfig.autoGroupBy;\n const { smartlabel: labelManager } = resolver.dependencies();\n const fieldMap = datamodel.getFieldsConfig();\n const layerConfig = resolver.layerConfig();\n const registry = resolver.registry();\n const { fields: normalizedRows } = resolver.horizontalAxis();\n const { fields: normalizedColumns } = resolver.verticalAxis();\n const otherEncodings = resolver.optionalProjections(config, layerConfig);\n const facetsAndProjections = resolver.getAllFields();\n const matrixGnContext = {\n // Configuration to be passed to generate the different matrices.\n // A common config is used for both value matrices and other matrices\n normalizedColumns,\n normalizedRows,\n facetsAndProjections,\n layers: layerConfig,\n fieldMap,\n otherEncodings,\n encoders,\n facetConfig: globalConfig.facetConfig || {},\n axisFrom: globalConfig.axisFrom || {},\n selection\n };\n const cells = {\n GeomCell: resolver.getCellDef(registry.GeomCell),\n AxisCell: resolver.getCellDef(registry.AxisCell),\n BlankCell: resolver.getCellDef(registry.BlankCell),\n TextCell: resolver.getCellDef(registry.TextCell)\n };\n const isRowSizeEqual = isDistributionEqual(normalizedRows);\n const isColumnSizeEqual = isDistributionEqual(normalizedColumns);\n\n resolver.colCells({});\n resolver.rowCells({});\n resolver.datamodelTransform(transform || {});\n\n // Cell creation begins here\n resolver.resetSimpleAxes();\n\n const {\n entryCellMap\n } = resolver.cacheMaps();\n const newCacheMap = {\n exitCellMap: entryCellMap,\n entryCellMap: new Map()\n };\n\n resolver.cacheMaps(newCacheMap);\n\n const valueCellContext = {\n config: globalConfig,\n suppliedLayers: encoders.simpleEncoder.serializeLayerConfig(resolver.layerConfig()),\n resolver,\n cell: cells.GeomCell,\n encoder: encoders.simpleEncoder,\n newCacheMap,\n detailFields: config.detail\n };\n const fieldsConfig = datamodel.getFieldsConfig();\n let groupedModel = datamodel;\n if (!groupBy.disabled) {\n const fields = getFieldsFromSuppliedLayers(valueCellContext.suppliedLayers, datamodel.getFieldsConfig());\n const allFields = extractFields(facetsAndProjections, fields);\n\n const dimensions = allFields.filter(field =>\n fieldsConfig[field] && fieldsConfig[field].def.type === FieldType.DIMENSION);\n const aggregationFns = groupBy.measures;\n\n groupedModel = datamodel.groupBy(dimensions.length ? dimensions : [''], aggregationFns).project(allFields);\n }\n\n // return a callback function to create the cells from the matrix\n const cellCreator = resolver.valueCellsCreator(valueCellContext);\n // Creates value matrices from the datamodel and configs\n const valueMatrixInfo = getMatrixModel(groupedModel, facetsAndProjections, cellCreator);\n\n resolver.cacheMaps().exitCellMap.forEach((placeholder) => {\n placeholder.remove();\n });\n resolver.cacheMaps().exitCellMap.clear();\n resolver.valueMatrix(valueMatrixInfo.matrix);\n resolver.createUnits(componentRegistry, config);\n\n const { xAxes, yAxes } = mutateAxesFromMap(resolver.cacheMaps(), resolver.axes());\n\n resolver.axes({\n x: xAxes,\n y: yAxes\n });\n\n const matrices = {\n valuesMatrix: valueMatrixInfo,\n axesMatrix: resolver.axes()\n };\n // Create all matrices\n const { rows, columns, selectionObj } = generateMatrices(matrixGnContext, matrices, cells, labelManager);\n\n resolver.rowMatrix(rows);\n resolver.columnMatrix(columns);\n\n return {\n rows: resolver.rowMatrix(),\n columns: resolver.columnMatrix(),\n values: resolver.valueMatrix(),\n isColumnSizeEqual,\n isRowSizeEqual,\n selection: selectionObj,\n dataModels: {\n groupedModel,\n parentModel: datamodel\n }\n };\n};\n","import { VisualUnit } from '@chartshq/visual-unit';\nimport {\n initializeCacheMaps,\n headerCreator,\n extractUnitConfig,\n setFacetsAndProjections\n} from './group-utils';\nimport {\n ROW, COL, LEFT, RIGHT, COLOR, SIZE, SHAPE, DETAIL, CELL, X_AXES, Y_AXES, ENTRY_CELLS, EXIT_CELLS, INITIALIZED,\n AXIS, UNIT, BEFORE_UPDATE, UPDATED, VALUE_MATRIX, FACET_HEADERS\n} from '../enums/constants';\nimport { createValueCells, computeMatrices } from './cell-creator';\n/**\n * Resolves the matrices from configuration provided\n *\n * @export\n * @class MatrixResolver\n */\nexport default class MatrixResolver {\n\n /**\n * Creates an instance of MatrixResolver.\n * @param {Object} dependencies needed to run the resolver\n * @memberof MatrixResolver\n */\n constructor (dependencies) {\n this._registry = {};\n this._layerConfig = [];\n this._matrixLayers = [];\n this._dependencies = dependencies;\n this._rowMatrix = [];\n this._columnMatrix = [];\n this._valueMatrix = [];\n this._facets = {};\n this._projections = {};\n this._datamodelTransform = {};\n this._units = [];\n this._cacheMaps = {};\n this._axes = {\n x: {},\n y: {},\n color: [],\n size: [],\n shape: []\n };\n\n this.cacheMaps(initializeCacheMaps());\n }\n\n /**\n * Set: Registers placeholders, Get: return {Object} those placeholders\n *\n * @param {Object} placeholders cells that will construct the group\n * @return {Object} Either current instance or the set of placeholders\n * @memberof MatrixResolver\n */\n registry (...placeholders) {\n if (placeholders.length) {\n Object.entries(placeholders[0]).forEach((val) => {\n this._registry[val[0]] = val[1];\n });\n return this;\n }\n return this._registry;\n }\n\n /**\n * Used to set the layer config from outside or get current layer info\n *\n * @param {Object} type configuration of layer provided externally\n * @return {Object} either the layer or current instance\n * @memberof MatrixResolver\n */\n dependencies (...dep) {\n if (dep.length) {\n this._dependencies = dep[0];\n return this;\n }\n return this._dependencies;\n }\n\n /**\n * Used to set the layer config from outside or get current layer info\n *\n * @param {Object} type configuration of layer provided externally\n * @return {Object} either the layer or current instance\n * @memberof MatrixResolver\n */\n units (...unitArr) {\n if (unitArr.length) {\n this._units = unitArr[0];\n return this;\n }\n return this._units;\n }\n\n /**\n * Used to set the layer config from outside or get current layer info\n *\n * @param {Object} layer configuration of layer provided externally\n * @return {Object} either the layer or current instance\n * @memberof MatrixResolver\n */\n layerConfig (...config) {\n if (config.length) {\n this._layerConfig = config[0];\n return this;\n }\n return this._layerConfig;\n }\n\n /**\n * Used to set the layer config from outside or get current layer info\n *\n * @param {Object} type configuration of layer provided externally\n * @return {Object} either the layer or current instance\n * @memberof MatrixResolver\n */\n matrixLayers (...layers) {\n if (layers.length) {\n this._matrixLayers = layers[0];\n return this;\n }\n return this._matrixLayers;\n }\n\n /**\n * Used to set the layer config from outside or get current layer info\n *\n * @param {Object} type configuration of layer provided externally\n * @return {Object} either the layer or current instance\n * @memberof MatrixResolver\n */\n datamodelTransform (...transform) {\n if (transform.length) {\n this._datamodelTransform = transform[0];\n return this;\n }\n return this._datamodelTransform;\n }\n\n /**\n * Used to set the layer config from outside or get current layer info\n *\n * @param {Object} type configuration of layer provided externally\n * @return {Object} either the layer or current instance\n * @memberof MatrixResolver\n */\n cacheMaps (...maps) {\n if (maps.length) {\n [CELL, X_AXES, Y_AXES, ENTRY_CELLS, EXIT_CELLS].forEach((e) => {\n this._cacheMaps[`${e}Map`] = maps[0][`${e}Map`] || this._cacheMaps[`${e}Map`];\n });\n return this;\n }\n return this._cacheMaps;\n }\n\n /**\n * Used to set the layer config from outside or get current layer info\n *\n * @param {Object} type configuration of layer provided externally\n * @return {Object} either the layer or current instance\n * @memberof MatrixResolver\n */\n rowCells (...cells) {\n if (cells.length) {\n this._rowCells = cells[0];\n return this;\n }\n return this._rowCells;\n }\n\n /**\n * Used to set the layer config from outside or get current layer info\n *\n * @param {Object} type configuration of layer provided externally\n * @return {Object} either the layer or current instance\n * @memberof MatrixResolver\n */\n colCells (...cells) {\n if (cells.length) {\n this._colCells = cells[0];\n return this;\n }\n return this._colCells;\n }\n\n /**\n * Used to set the layer config from outside or get current layer info\n *\n * @param {Object} type configuration of layer provided externally\n * @return {Object} either the layer or current instance\n * @memberof MatrixResolver\n */\n axes (...axes) {\n if (axes.length) {\n this._axes = Object.assign({}, this._axes, axes[0]);\n return this;\n }\n return this._axes;\n }\n\n /**\n * Used to set the layer config from outside or get current layer info\n *\n * @param {Object} type configuration of layer provided externally\n * @return {Object} either the layer or current instance\n * @memberof MatrixResolver\n */\n rowMatrix (...rowMat) {\n if (rowMat.length) {\n this._rowMatrix = rowMat[0];\n return this;\n }\n return this._rowMatrix;\n }\n\n /**\n * Used to set the layer config from outside or get current layer info\n *\n * @param {Object} type configuration of layer provided externally\n * @return {Object} either the layer or current instance\n * @memberof MatrixResolver\n */\n columnMatrix (...colMat) {\n if (colMat.length) {\n this._columnMatrix = colMat[0];\n return this;\n }\n return this._columnMatrix;\n }\n\n /**\n * Used to set the layer config from outside or get current layer info\n *\n * @param {Object} type configuration of layer provided externally\n * @return {Object} either the layer or current instance\n * @memberof MatrixResolver\n */\n valueMatrix (...valMat) {\n if (valMat.length) {\n this._valueMatrix = valMat[0];\n return this;\n }\n return this._valueMatrix;\n }\n\n /**\n *\n *\n * @param {*} facets\n * @return\n * @memberof MatrixResolver\n */\n facets (...facets) {\n if (facets.length) {\n Object.entries(facets[0]).forEach((e) => {\n this._facets[e[0]] = e[1];\n });\n return this;\n }\n return this._facets;\n }\n\n /**\n *\n *\n * @param {*} projections\n * @return\n * @memberof MatrixResolver\n */\n projections (...projections) {\n if (projections.length) {\n Object.entries(projections[0]).forEach((e) => {\n this._projections[e[0]] = e[1];\n });\n return this;\n }\n return this._projections;\n }\n\n /**\n *\n *\n * @param {*} config\n * @param {*} layerConfig\n * @return\n * @memberof MatrixResolver\n */\n optionalProjections (config, layerConfig) {\n const otherEncodings = {};\n const optionalProjections = [];\n const otherEncodingTypes = [SIZE, COLOR, SHAPE];\n\n otherEncodingTypes.forEach((type) => {\n if (config[type] && config[type].field) {\n const enc = config[type];\n otherEncodings[type] = enc.field;\n optionalProjections.push(enc.field);\n }\n });\n\n if (config[DETAIL]) {\n optionalProjections.push(...config.detail);\n }\n\n if (layerConfig.length) {\n layerConfig.forEach((layer) => {\n if (layer.encoding) {\n Object.values(layer.encoding).forEach((enc) => {\n if (enc && optionalProjections.indexOf(enc.field) === -1) {\n optionalProjections.push(enc.field ? enc.field : enc);\n }\n });\n }\n });\n }\n this.projections({ optionalProjections });\n return otherEncodings;\n }\n\n /**\n * return the normalized set of rows and facets and projections\n *\n * @param {Object} rows parameters needed to set horizontal axis consisiting of rows\n * @return {Object} facets, projections and normalized rows\n * @memberof MatrixResolver\n */\n horizontalAxis (rows, encoder) {\n if (rows) {\n this._horizontalAxis = setFacetsAndProjections(this, { type: ROW, fields: rows }, encoder);\n return this;\n }\n return this._horizontalAxis;\n }\n\n /**\n * return the normalized set of columns and facets and projections\n *\n * @param {Object} columns parameters needed to set vertical axis consisiting of columns\n * @return {Object} facets, projections and normalized columns\n * @memberof MatrixResolver\n */\n verticalAxis (columns, encoder) {\n if (columns) {\n this._verticalAxis = setFacetsAndProjections(this, { type: COL, fields: columns }, encoder);\n return this;\n }\n return this._verticalAxis;\n }\n\n /**\n * Gets the class definition of a particular cell type(if the particular type has been extended, that particular\n * definition is returned)\n *\n * @param {Object} cell cell whose class definition is to be retrieved\n * @return {Object} cell definition\n * @memberof MatrixResolver\n */\n getCellDef (cell) {\n const registry = this.registry();\n\n Object.values(registry).forEach((e) => {\n if (e.prototype instanceof cell) {\n cell = e;\n }\n });\n return cell;\n }\n\n /**\n * return a visual cell creator along with its axis information to be injected to the datamodel creation\n * function\n *\n * @param {Object} GeomCell Type of cell to be created\n * @return {Object} Created cell\n * @memberof MatrixResolver\n */\n valueCellsCreator (context) {\n // reset matrix layers\n this.matrixLayers([]);\n\n return (datamodel, fieldInfo, facets) => createValueCells(context, datamodel, fieldInfo, facets);\n }\n\n /**\n * Callback to be applied on each cell of a matrix of a particular type\n *\n * @param {string} matrixType type of matrix on which callback is to be applied\n * @param {Function} callback function to be applied to each cell\n * @memberof MatrixResolver\n */\n forEach (matrixType, callback) {\n this[matrixType]().forEach((row, rIndex) => {\n row.forEach((col, cIndex) => {\n callback(rIndex, cIndex, col);\n });\n });\n }\n\n /**\n *\n *\n * @return\n * @memberof MatrixResolver\n */\n getAllFields () {\n const retObj = this.projections();\n\n Object.entries(this.facets()).forEach((e) => {\n retObj[e[0]] = e[1];\n });\n return retObj;\n }\n\n /**\n *\n *\n * @memberof MatrixResolver\n */\n resetSimpleAxes () {\n return this.axes({\n x: new Set(),\n y: new Set()\n });\n }\n\n /**\n *\n *\n * @param {*} componentRegistry\n * @param {*} config\n * @memberof MatrixResolver\n */\n createUnits (componentRegistry, config) {\n const {\n globalConfig,\n alias\n } = config;\n const {\n layerRegistry,\n sideEffectRegistry\n } = componentRegistry;\n const {\n smartlabel: smartLabel,\n lifeCycleManager\n } = this.dependencies();\n // Provide the source for the matrix\n const units = [];\n // Setting unit configuration\n const unitConfig = extractUnitConfig(globalConfig || {});\n\n this.forEach(VALUE_MATRIX, (i, j, el) => {\n let unit = el.source();\n if (!unit) {\n unit = VisualUnit.create({\n layerRegistry,\n sideEffectRegistry\n }, {\n smartLabel,\n lifeCycleManager\n });\n el.source(unit);\n units.push(unit);\n }\n unit.parentAlias(alias);\n el.config(unitConfig);\n });\n\n lifeCycleManager.notify({ client: units, action: INITIALIZED, formalName: UNIT });\n return this.units(units);\n }\n\n /**\n *\n *\n * @param {*} config\n * @memberof MatrixResolver\n */\n setDomains (config, datamodel, encoders) {\n const {\n color,\n shape,\n size,\n globalConfig\n } = config;\n const groupBy = globalConfig.autoGroupBy;\n const {\n rowFacets,\n colFacets\n } = this.getAllFields();\n const encoding = {\n color,\n shape,\n size\n };\n const facetFields = [...rowFacets.map(e => e.toString()), ...colFacets.map(e => e.toString())];\n const retContext = {\n domains: encoders.simpleEncoder.getRetinalFieldsDomain(datamodel, encoding, facetFields, groupBy),\n axes: this.axes(),\n encoding\n };\n encoders.retinalEncoder.setCommonDomain(retContext);\n return this;\n }\n\n /**\n *\n *\n * @return\n * @memberof MatrixResolver\n */\n getRetinalAxes () {\n const {\n color,\n shape,\n size\n } = this.axes();\n\n return {\n color: [...color],\n shape: [...shape],\n size: [...size]\n };\n }\n\n /**\n *\n *\n * @param {*} type\n * @return\n * @memberof MatrixResolver\n */\n getSimpleAxes (type) {\n return this.axes()[`${type}`];\n }\n\n /**\n *\n *\n * @param {*} datamodel\n * @param {*} config\n * @memberof MatrixResolver\n */\n createRetinalAxes (fieldsConfig, config, encoders) {\n const layerConfig = this.layerConfig();\n this.optionalProjections(config, layerConfig);\n const retinalAxes = encoders.retinalEncoder.createAxis({\n fieldsConfig,\n config,\n axes: this.axes()\n });\n const {\n lifeCycleManager\n } = this.dependencies();\n\n [COLOR, SHAPE, SIZE].forEach((e) => {\n this.axes()[e] = retinalAxes[e];\n });\n\n lifeCycleManager.notify({ client: this.axes(), action: INITIALIZED, formalName: AXIS });\n lifeCycleManager.notify({ client: this.units(), action: BEFORE_UPDATE, formalName: UNIT });\n\n const units = [];\n const matrixLayers = this.matrixLayers();\n\n this.forEach(VALUE_MATRIX, (i, j, el) => {\n el.axes(retinalAxes);\n el.source() && el.source().retinalFields(config);\n el.layerDef(encoders.retinalEncoder.getLayerConfig(config, matrixLayers[i][j]));\n el.updateModel();\n\n units.push(el.source());\n });\n\n lifeCycleManager.notify({ client: units, action: UPDATED, formalName: UNIT });\n return this;\n }\n\n /**\n *\n *\n * @param {*} placeholders\n * @param {*} fieldNames\n * @return\n * @memberof MatrixResolver\n */\n createHeaders (placeholders, fieldNames, config) {\n let bottomLeft = [];\n let bottomRight = [];\n const {\n rows,\n columns\n } = placeholders;\n const {\n smartlabel: labelManager,\n lifeCycleManager\n } = this.dependencies();\n const TextCell = this.getCellDef(this.registry().TextCell);\n const BlankCell = this.getCellDef(this.registry().BlankCell);\n const [leftRows, rightRows] = rows;\n const [topCols, bottomCols] = columns;\n const rowHeaders = fieldNames.rows;\n const blankCellCreator = cell => new BlankCell().config({ show: cell.config().show });\n\n // Headers and footers are created based on the rows. Thereafter, using the column information\n // they are tabularized into the current structure\n const headers = {\n left: headerCreator(leftRows, rowHeaders[0], config.showHeaders ? TextCell : BlankCell, labelManager),\n right: headerCreator(rightRows, rowHeaders[1], config.showHeaders ? TextCell : BlankCell, labelManager)\n };\n const footers = {\n left: leftRows.length > 0 ? leftRows[0].map(blankCellCreator) : [],\n right: rightRows.length > 0 ? rightRows[0].map(blankCellCreator) : []\n };\n const [topLeft, topRight] = [LEFT, RIGHT].map(type => topCols.map((col, i) => {\n if (i === topCols.length - 1) {\n return headers[type];\n }\n return footers[type];\n }));\n\n // Creating only bottom matrices if there is no information on the top\n if (topCols.length === 0) {\n [bottomLeft, bottomRight] = [LEFT, RIGHT].map(type => bottomCols.map((col, i) => {\n if (i === 0) {\n return headers[type];\n }\n return footers[type];\n }));\n } else {\n bottomLeft = bottomCols.map(() => (leftRows.length > 0 ? leftRows[0].map(blankCellCreator) : []));\n bottomRight = bottomCols.map(() => (rightRows.length > 0 ? rightRows[0].map(blankCellCreator) : []));\n }\n\n lifeCycleManager.notify({\n client: [topLeft, topRight, bottomLeft, bottomRight],\n action: INITIALIZED,\n formalName: FACET_HEADERS\n });\n\n return { topLeft, topRight, bottomLeft, bottomRight };\n }\n\n /**\n *\n *\n * @param {*} datamodel\n * @param {*} config\n * @param {*} componentRegistry\n * @param {*} encoders\n * @return\n * @memberof MatrixResolver\n */\n getMatrices (datamodel, config, componentRegistry, encoders) {\n const context = {\n datamodel,\n componentRegistry,\n encoders,\n resolver: this\n };\n\n return computeMatrices(context, config);\n }\n}\n","/**\n *\n *\n * @export\n * @class ValueMatrix\n */\nclass ValueMatrix {\n\n /**\n *Creates an instance of ValueMatrix.\n * @param {*} matrixArr\n * @memberof ValueMatrix\n */\n constructor (matrixArr) {\n const instancesById = {};\n\n this.matrix(matrixArr);\n this.filter(() => true);\n\n this.each((el, rIdx, cIdx) => {\n const cellValue = el.valueOf();\n if (cellValue && cellValue.id) {\n const id = cellValue.id();\n instancesById[id] = {\n instance: cellValue,\n rowIndex: rIdx,\n colIndex: cIdx\n };\n }\n });\n\n this.instancesById(instancesById);\n }\n\n /**\n *\n *\n * @param {*} id\n * @return\n * @memberof ValueMatrix\n */\n instancesById (...id) {\n if (id.length) {\n this._instancesById = id[0];\n return this;\n }\n return this._instancesById;\n }\n\n /**\n *\n *\n * @param {*} m\n * @return\n * @memberof ValueMatrix\n */\n matrix (...matrix) {\n if (matrix.length) {\n this._matrix = matrix[0];\n return this;\n }\n return this._matrix;\n }\n\n /**\n *\n *\n * @param {*} fn\n * @return\n * @memberof ValueMatrix\n */\n filter (...fn) {\n if (fn.length) {\n this._filterFn = fn[0];\n return this;\n }\n return this._filterFn;\n }\n\n /**\n *\n *\n * @return\n * @memberof ValueMatrix\n */\n width () {\n let rowWidth = 0;\n\n this.matrix().forEach((row) => {\n let currentRowWidth = 0;\n row.forEach((cell) => {\n currentRowWidth += cell.getLogicalSpace().width;\n });\n rowWidth = Math.max(rowWidth, currentRowWidth);\n });\n return rowWidth;\n }\n\n /**\n *\n *\n * @return\n * @memberof ValueMatrix\n */\n height () {\n let rowHeight = 0;\n\n this.matrix().forEach((row) => {\n let currentRowHeight = 0;\n row.forEach((cell) => {\n currentRowHeight = Math.max(currentRowHeight, cell.getLogicalSpace().height);\n });\n rowHeight += currentRowHeight;\n });\n return rowHeight;\n }\n\n /**\n *\n *\n * @param {*} fn\n * @return\n * @memberof ValueMatrix\n */\n each (fn) {\n const matrix = this.matrix();\n const filterFn = this.filter();\n\n matrix.forEach((row, rIndex) => {\n row.forEach((col, cIndex) => {\n if (filterFn(col)) {\n fn(col, rIndex, cIndex, matrix);\n }\n });\n });\n return this;\n }\n\n /**\n *\n *\n * @param {*} id\n * @return\n * @memberof ValueMatrix\n */\n findPlaceHolderById (id) {\n return this.instancesById()[id];\n }\n\n /**\n *\n *\n * @return\n * @memberof ValueMatrix\n */\n getMatrixArray () {\n return this.matrix();\n }\n}\n\nexport default ValueMatrix;\n","import { RetinalEncoder } from '../encoder';\nimport { DATA_UPDATE_COUNTER } from '../enums/defaults';\nimport { getEncoder, getBorders } from '../group-helper';\nimport ValueMatrix from './value-matrix';\nimport localOptions from './local-options';\n\nconst sanitizeRetinalConfig = (retinalConf) => {\n const conf = {};\n for (const key in retinalConf) {\n const confValue = retinalConf[key];\n if (typeof confValue === 'string' || !confValue) {\n conf[key] = {\n field: retinalConf[key]\n };\n } else {\n conf[key] = confValue;\n }\n }\n return conf;\n};\n\n/**\n *\n *\n * @param {*} placeholder\n * @memberof VisualGroup\n */\nconst setMatrixInstances = (context, placeholder) => {\n context._composition.matrices = {\n value: new ValueMatrix(placeholder.values),\n left: new ValueMatrix(placeholder.rows[0]),\n right: new ValueMatrix(placeholder.rows[1]),\n top: new ValueMatrix(placeholder.columns[0]),\n bottom: new ValueMatrix(placeholder.columns[1])\n };\n return context;\n};\n\n/**\n *\n *\n * @param {*} context\n * @returns\n */\nexport const setupChangeListeners = (context) => {\n context.store().registerImmediateListener([...Object.keys(localOptions), DATA_UPDATE_COUNTER], (...params) => {\n const datamodel = context.data();\n const [config, rows, columns, color, shape, size, detail, layers, transform] = params;\n\n if (datamodel && rows[1] && columns[1]) {\n // Get the resolver for the matrices\n const resolver = context.resolver();\n // Prepare configuration for matrix preparation\n let matrixConfig = {\n selection: context.selection(),\n alias: context.alias(),\n globalConfig: config[1] || {},\n rows: rows[1],\n columns: columns[1],\n detail: detail[1],\n layers: layers[1],\n transform: transform[1]\n };\n\n const retinalConfig = sanitizeRetinalConfig({\n color: color[1],\n shape: shape[1],\n size: size[1]\n });\n\n matrixConfig = Object.assign(matrixConfig, retinalConfig);\n // Create the encoders for the group\n const encoders = {};\n encoders.retinalEncoder = new RetinalEncoder();\n encoders.simpleEncoder = getEncoder(layers[1]);\n\n // Set the group type\n context.groupType(encoders.simpleEncoder.constructor.type());\n\n // Get sanitized fields as instances of the Vars Class\n const fields = encoders.simpleEncoder.fieldSanitizer(datamodel, matrixConfig);\n encoders.simpleEncoder.setAxisAndHeaders(config[1] ? config[1].axisFrom : {}, fields);\n // Setting layers for the code\n layers[1] && resolver.layerConfig(layers[1]);\n // Set the row and column axes\n resolver.horizontalAxis(fields.rows, encoders).verticalAxis(fields.columns, encoders);\n // Getting the placeholders\n const placeholderInfo = resolver.getMatrices(datamodel, matrixConfig, context.registry(), encoders);\n context._groupedDataModel = placeholderInfo.dataModels.groupedModel;\n // Set the selection object\n context.selection(placeholderInfo.selection);\n\n // Create retinal axes\n resolver.createRetinalAxes(placeholderInfo.dataModels.parentModel.getFieldsConfig(), retinalConfig,\n encoders);\n\n // Domains are evaluated for each of the axes for commonality\n resolver.setDomains(matrixConfig, placeholderInfo.dataModels, encoders);\n\n // Create matrix instances\n setMatrixInstances(context, placeholderInfo);\n\n // Prepare corner matrices\n context.cornerMatrices(resolver.createHeaders(placeholderInfo, fields, config[1]));\n\n // Set placeholder information\n context.placeholderInfo(placeholderInfo);\n\n context._composition.axes = resolver.axes();\n context.metaData({\n border: getBorders(placeholderInfo, encoders.simpleEncoder)\n });\n }\n return context;\n });\n return context;\n};\n","import { DATA_UPDATE_COUNTER } from '../enums/defaults';\n\nexport const PROPS = {\n alias: {},\n data: {\n sanitization: (context, value) => {\n if (context._data !== value) {\n const store = context.store();\n let hasDataUpdated = store.get(DATA_UPDATE_COUNTER);\n store.commit(DATA_UPDATE_COUNTER, ++hasDataUpdated);\n }\n return value;\n }\n },\n cornerMatrices: {},\n groupType: {},\n matrixInstance: {},\n metaData: {},\n placeholderInfo: {},\n resolver: {},\n registry: {\n sanitization: (context, value) => {\n if (context.resolver) {\n context.resolver().registry(value.cellRegistry);\n }\n return value;\n }\n },\n selection: {},\n store: {}\n};\n","import { transactor, generateGetterSetters } from 'muze-utils';\nimport localOptions from './local-options';\nimport { SimpleGroup } from '../simple-group';\nimport {\n MatrixResolver,\n initStore,\n findInGroup\n} from '../group-helper';\nimport { setupChangeListeners } from './change-listener';\nimport { PROPS } from './props';\nimport {\n CONFIG,\n MOUNT,\n RETINAL,\n Y\n} from '../enums/constants';\n\n/**\n * This class is used to create an instance of a visual group.\n * It extends the SimpleGroup (which is an interface). The visual group takes in a datamodel,\n * and a set of rows and columns, alongwith optional paramters (like color, size, shape).\n *\n * @class VisualGroup\n */\nclass VisualGroup extends SimpleGroup {\n\n /**\n * Creates an instance of VisualGroup. Requires dependencies and other registry options for placeholders\n * and layers that create individual units\n * @param {Object} registry Key value pair of compostions for the group\n * @param {Object} dependencies Dependencies needed to run the group\n * @memberof VisualGroup\n */\n constructor (registry, dependencies) {\n super();\n\n const {\n componentSubRegistry\n } = registry;\n\n this._dependencies = dependencies;\n // Generate getter/setter methods for all properties of the class\n // One can get each property by calling the method and can set it\n // by passing paramaters for the same. Thus, one can chain setter\n // getter methods.\n generateGetterSetters(this, PROPS);\n // Populate the store with default values\n this.store(initStore());\n\n // initialize group compositions\n this._composition = {};\n // store reference to data\n this._data = [];\n // matrix instance store each of the matrices\n this._matrixInstance = {};\n // store reference to mountpoint\n this._mount = null;\n // selection object that takes care of updating of components\n this._selection = {};\n // stores info about the placeholders generated after creation of matrices\n this._placeholderInfo = {};\n // corner matrices are the headers/footers for the application\n this._cornerMatrices = {};\n // Create instance of matrix resolver\n this.resolver(new MatrixResolver(this._dependencies));\n\n // Getting indiviual registered items\n this.registry({\n layerRegistry: componentSubRegistry.layerRegistry.get(),\n cellRegistry: componentSubRegistry.cellRegistry.get()\n });\n // Add local options to the store\n transactor(this, localOptions, this.store().model);\n // Register listeners\n setupChangeListeners(this);\n }\n\n matrixInstance (...matrices) {\n if (matrices.length) {\n return this;\n }\n return this.composition().matrices;\n }\n\n /**\n * Returns the composition of the Group\n *\n * @readonly\n * @memberof VisualGroup\n */\n composition (...params) {\n if (params.length) {\n return this;\n }\n return this._composition;\n }\n\n /**\n * Locks the model to prevent change listeners to be triggered until unlocked\n *\n * @return {Object} Instance of class VisualGroup\n * @memberof VisualGroup\n */\n lockModel () {\n this.store().model.lock();\n return this;\n }\n\n /**\n * Unlocks the model so that all change listeners can be triggered\n *\n * @return {Object} Instance of class VisualGroup\n * @memberof VisualGroup\n */\n unlockModel () {\n this.store().model.unlock();\n return this;\n }\n\n /**\n *\n *\n * @param {*} variable\n * @return\n * @memberof VisualGroup\n */\n where (variable) {\n return findInGroup(variable, this.resolver().getAllFields());\n }\n\n /**\n *\n *\n * @param {*} type\n * @return\n * @memberof VisualGroup\n */\n getAxes (type) {\n if (type === RETINAL) {\n return this.resolver().getRetinalAxes();\n }\n return this.resolver().getSimpleAxes(type);\n }\n\n /**\n *\n *\n * @return\n * @memberof VisualGroup\n */\n getCells (type) {\n return this.resolver()[`${type}Cells`]();\n }\n\n /**\n *\n *\n * @param {*} channel\n * @return\n * @memberof VisualGroup\n */\n getFieldsFromChannel (channel) {\n const {\n rowProjections,\n colProjections\n } = this.resolver().getAllFields();\n\n return channel === Y ? rowProjections : colProjections;\n }\n\n /**\n *\n *\n * @param {*} facetKey\n * @return\n * @memberof VisualGroup\n */\n getCellsByFacetKey (facetKey) {\n const resolver = this.resolver();\n const cells = resolver.rowCells()[facetKey] || resolver.colCells()[facetKey] || [];\n return cells;\n }\n\n /**\n *\n *\n * @param {*} facetKey\n * @return\n * @memberof VisualGroup\n */\n getAxesByFacetKey (axisType, facetKey) {\n const resolver = this.resolver();\n const cells = resolver.rowCells()[facetKey] || resolver.colCells()[facetKey];\n const axes = cells[0].valueOf().axes()[axisType] || [];\n\n return axes;\n }\n\n /**\n * This method is used to return a serialized representation of the instance's properties.\n *\n * @return {Object} Object with config proprties.\n * @memberof VisualGroup\n */\n serialize () {\n const store = this.store();\n\n return {\n [CONFIG]: store.get(CONFIG),\n [MOUNT]: store.get(MOUNT)\n };\n }\n\n getGroupByData () {\n return this._groupedDataModel;\n }\n}\n\nexport default VisualGroup;\n","import { PersistentBehaviour, SELECTION } from '@chartshq/muze-firebolt';\n\nexport default class SelectBehaviour extends PersistentBehaviour {\n static formalName () {\n return 'select';\n }\n\n setSelectionSet (addSet, selectionSet) {\n if (addSet === null) {\n selectionSet.reset();\n } else if (addSet.length) {\n // new add set\n const existingRemoveSet = addSet.filter(d => selectionSet._set[d] === SELECTION.SELECTION_OLD_EXIT\n || selectionSet._set[d] === SELECTION.SELECTION_NEW_EXIT);\n // existing add set\n if (existingRemoveSet.length) {\n selectionSet.updateEntry();\n selectionSet.add(existingRemoveSet);\n } else {\n selectionSet.updateExit();\n selectionSet.remove(addSet);\n }\n const { exitSet } = selectionSet.getSets();\n const mergedExitSet = [...new Set(exitSet[1]), ...new Set(exitSet[0])];\n const completeSetCount = selectionSet.getCompleteSet().length;\n if (exitSet[1].length !== completeSetCount && mergedExitSet.length === completeSetCount) {\n selectionSet.reset();\n }\n } else {\n selectionSet.remove(selectionSet.getCompleteSet());\n }\n return this;\n }\n}\n","import { BEHAVIOURS, ACTIONS } from '@chartshq/muze-firebolt';\n\nconst CLASSPREFIX = 'muze';\n\nexport const actionBehaviourMap = {\n [ACTIONS.DRAG]: {\n target: `.${CLASSPREFIX}-gradient-rect`,\n behaviours: [BEHAVIOURS.BRUSH]\n },\n [ACTIONS.HOVER]: {\n target: [`.${CLASSPREFIX}-legend-columns`],\n behaviours: [BEHAVIOURS.HIGHLIGHT]\n },\n [ACTIONS.CLICK]: {\n target: [`.${CLASSPREFIX}-legend-columns`],\n behaviours: [BEHAVIOURS.SELECT]\n }\n};\n\nexport const propagationBehaviourMap = {\n [BEHAVIOURS.SELECT]: BEHAVIOURS.FILTER,\n [BEHAVIOURS.BRUSH]: BEHAVIOURS.HIGHLIGHT\n};\n","import * as BEHAVIOURS from '../enums/behaviours';\nimport * as sideEffects from '../enums/side-effects';\n\nexport const behaviourEffectMap = {\n [BEHAVIOURS.BRUSH]: [sideEffects.SELECTIONBOX, {\n name: sideEffects.Highlighter,\n options: {\n strategy: 'fade'\n }\n }],\n [BEHAVIOURS.HIGHLIGHT]: [sideEffects.Highlighter],\n select: [{\n name: sideEffects.Highlighter,\n options: {\n strategy: 'fade'\n }\n }]\n};\n\nexport const propagationSideEffects = {\n [BEHAVIOURS.BRUSH]: [{\n name: sideEffects.Highlighter,\n options: {\n strategy: 'fade'\n }\n }],\n [BEHAVIOURS.HIGHLIGHT]: [{\n name: sideEffects.Highlighter,\n options: {\n strategy: 'fade'\n }\n }],\n [BEHAVIOURS.SELECT]: ['filter']\n};\n\n","export const BRUSH = 'brush';\nexport const HIGHLIGHT = 'highlight';\nexport const TOOLTIP = 'tooltip';\nexport const FILTER = 'filter';\nexport const SELECT = 'select';\n\n","export const SELECTIONBOX = 'selectionBox';\nexport const Highlighter = 'highlighter';\n\n","export const CLASSPREFIX = 'muze';\nexport const IDFIELD = '__id__';\nexport const CONFIG = 'config';\nexport const DATAMODEL = 'dataModel';\nexport const AXES = 'axes';\nexport const LAYERDEFS = 'layerDef';\nexport const WIDTH = 'width';\nexport const HEIGHT = 'height';\nexport const MOUNTPOINT = 'mountPoint';\nexport const GRIDLINEPARENTGROUPCLASS = 'grid-lines';\nexport const TRANSFORM = 'transform';\nexport const CONSOLIDATED = 'consolidated';\nexport const FRAGMENTED = 'fragmented';\nexport const DEFAULTCOLOR = '#F44336';\nexport const DEFAULTSIZE = 50;\nexport const DEFAULTSHAPE = 'circle';\nexport const STEP = 'step';\nexport const GRADIENT = 'gradient';\nexport const ORDINAL = 'ordinal';\nexport const SCALE_FUNCTIONS = {\n size: 'getSize',\n shape: 'getShape',\n color: 'getColor'\n};\nexport const TOP = 'top';\nexport const LEFT = 'left';\nexport const RIGHT = 'right';\nexport const BOTTOM = 'bottom';\nexport const HORIZONTAL = 'horizontal';\nexport const VERTICAL = 'vertical';\nexport const CENTER = 'center';\nexport const VALUE = 'value';\nexport const PATH = 'path';\nexport const SHAPE = 'shape';\nexport const ICON = 'icon';\nexport const RECT = 'rect';\nexport const START = 'start';\nexport const UPPER = 'upper';\nexport const LOWER = 'lower';\nexport const END = 'end';\nexport const SIZE = 'size';\nexport const DISCRETE = 'discrete';\nexport const MEASURE = 'measure';\n\n","import { assembleModelFromIdentifiers, getDataModelFromRange } from 'muze-utils';\nimport { propagationBehaviourMap } from './action-behaviour-map';\nimport { propagationSideEffects } from './behaviour-effect-map';\nimport { STEP, GRADIENT, DISCRETE, MEASURE } from '../enums/constants';\n\nexport const propagate = (firebolt, action, selectionSet, config = {}) => {\n let propagationData;\n const type = firebolt.context.constructor.type();\n const payload = config.payload;\n const data = firebolt.context.data();\n const metaData = firebolt.context.metaData();\n const fieldType = metaData.getData().schema[0].type;\n\n const propPayload = {};\n const sourceId = firebolt.context._id;\n propPayload.action = propagationBehaviourMap[action] || action;\n propPayload.sideEffects = propagationSideEffects[action];\n propPayload.sourceCanvas = firebolt.context.canvasAlias();\n const isMutableAction = firebolt._actions.behavioural[propPayload.action].constructor.mutates();\n if (payload.criteria === null) {\n propagationData = null;\n } else {\n const entrySet = selectionSet.mergedEnter;\n let values = data.filter(d => entrySet.uids.indexOf(d.id) !== -1).map(d => d.value);\n if (type === STEP || (type === DISCRETE && fieldType === MEASURE)) {\n const field = Object.keys(payload.criteria || {})[0];\n values = data.filter(d => entrySet.uids.indexOf(d.id) !== -1).map(d => d.range);\n propagationData = values.length ? metaData.select((fields) => {\n let check = false;\n for (let i = 0; i < values.length; i++) {\n check = fields[field].value >= values[i][0] && fields[field].value <= values[i][1];\n if (check === true) {\n break;\n }\n }\n return check;\n }, {\n saveChild: false\n }) : null;\n } else if (type === GRADIENT) {\n propagationData = getDataModelFromRange(metaData, payload.criteria);\n } else if (values.length) {\n propagationData = assembleModelFromIdentifiers(metaData, [payload.criteria[0], ...values.map(d => [d])]);\n } else {\n propPayload.criteria = null;\n propagationData = metaData.select(() => true, {\n saveChild: false\n });\n }\n }\n\n let propagateInterpolatedValues = false;\n\n if (propagationData) {\n const schema = propagationData.getSchema();\n propagateInterpolatedValues = schema.every(d => d.type === fieldType.MEASURE);\n }\n\n const propConfig = {\n sourceId: `legend-${sourceId}`,\n payload: propPayload,\n criteria: propPayload.criteria === null ? null : propagationData,\n isMutableAction,\n propagateInterpolatedValues,\n action: propPayload.action\n };\n\n metaData.propagate(propagationData, propConfig, true);\n};\n","import { Firebolt } from '@chartshq/muze-firebolt';\nimport { propagate } from './helper';\nimport { STEP, GRADIENT } from '../enums/constants';\n\n/**\n * This class manages the interactions of legend.\n * @export\n * @class LegendFireBolt\n * @extends {Firebolt}\n */\nexport class LegendFireBolt extends Firebolt {\n constructor (...params) {\n super(...params);\n this.initializeSideEffects();\n }\n\n getPropagationSelectionSet (selectionSet) {\n return selectionSet[0];\n }\n\n propagate (behaviourName, payload, selectionSet) {\n propagate(this, behaviourName, selectionSet, {\n payload\n });\n }\n\n getAddSetFromCriteria (criteria) {\n let values;\n let uniqueIds;\n const type = this.context.constructor.type();\n\n if (criteria === null) {\n uniqueIds = null;\n } else if (type === STEP) {\n values = Object.values(criteria);\n uniqueIds = this.context.data().filter(d => values.indexOf(d.range) !== -1).map(d => d.id);\n } else if (type === GRADIENT) {\n uniqueIds = [];\n } else {\n values = criteria[1];\n if (values) {\n uniqueIds = this.context.data().filter(d => values.indexOf(d.value) !== -1).map(d => d.id);\n } else {\n values = Object.values(criteria);\n uniqueIds = this.context.data().filter(d => values.indexOf(d.range) !== -1).map(d => d.id);\n }\n }\n return {\n uids: uniqueIds,\n model: null\n };\n }\n\n getFullData () {\n return null;\n }\n}\n","import {\n getEvent,\n getD3Drag\n } from 'muze-utils';\n\n/**\n * Adds dragging action to the target element.\n * @param {firebolt} firebolt firebolt\n * @param {SVGElement} targetEl Element on which brushing action is needed.\n * @param {Array} behaviours Array of behaviours\n */\n/* istanbul ignore next */ const drag = firebolt => (targetEl, behaviours) => {\n let startPos = {};\n let endPos = {};\n let payload;\n const d3Drag = getD3Drag();\n const context = firebolt.context;\n const boundingBox = context.measurement().gradientDimensions;\n const axisType = context.config().align === 'horizontal' ? 'x' : 'y';\n const axisScale = context.axis().source().scale();\n const rangeShifter = axisScale.range()[axisType === 'x' ? 0 : 1];\n\n targetEl.call(d3Drag().on('start', () => {\n const event = getEvent();\n startPos = {\n x: event.x,\n y: event.y\n };\n }).on('drag', () => {\n const event = getEvent();\n\n endPos = {\n x: event.x,\n y: event.y\n };\n endPos.x = Math.max(0, Math.min(endPos.x, boundingBox.width));\n endPos.y = Math.max(0, Math.min(endPos.y, boundingBox.height));\n\n payload = {\n criteria: {\n [context.fieldName()]: [axisScale.invert(startPos[axisType] + rangeShifter * 2),\n axisScale.invert(endPos[axisType] + rangeShifter * 2)].sort((a, b) => a - b)\n }\n };\n behaviours.forEach(behaviour => firebolt.dispatchBehaviour(behaviour, payload));\n }).on('end', () => {\n const event = getEvent();\n\n endPos = {\n x: event.x,\n y: event.y\n };\n endPos.x = Math.max(0, Math.min(endPos.x, boundingBox.width));\n endPos.y = Math.max(0, Math.min(endPos.y, boundingBox.height));\n if (startPos[axisType] === endPos[axisType]) {\n payload = {\n criteria: {}\n };\n } else {\n payload = {\n criteria: {\n [context.fieldName()]: [axisScale.invert(startPos[axisType] + rangeShifter * 2),\n axisScale.invert(endPos[axisType] + rangeShifter * 2)].sort((a, b) => a - b)\n }\n };\n }\n behaviours.forEach(behaviour => firebolt.dispatchBehaviour(behaviour, payload));\n }));\n};\n\nexport default drag;\n","/**\n * Adds mouse interactions to target element.\n * @param {Firebolt} Firebolt instance of firebolt.\n * @param {SVGElement} targetEl Element on which the event listeners will be attached.\n * @param {Array} behaviours Array of behaviours\n */\n/* istanbul ignore next */ const hover = firebolt => (targetEl, behaviours) => {\n const dispatchBehaviour = function (args) {\n const payload = {\n criteria: firebolt.context.getCriteriaFromData(args)\n };\n behaviours.forEach(behaviour => firebolt.dispatchBehaviour(behaviour, payload));\n event.stopPropagation();\n };\n\n targetEl.on('mouseover', dispatchBehaviour)\n .on('mousemove', dispatchBehaviour)\n .on('mouseout', () => {\n behaviours.forEach(behaviour => firebolt.dispatchBehaviour(behaviour, {\n criteria: null\n }));\n event.stopPropagation();\n });\n};\n\nexport default hover;\n","/**\n * Adds mouse interactions to target element.\n * @param {VisualUnit} instance instance of visual unit.\n * @param {SVGElement} targetEl Element on which the event listeners will be attached.\n * @param {Array} behaviours Array of behaviours\n */\nconst click = firebolt => (targetEl, behaviours) => {\n const dispatchBehaviour = function (args) {\n const payload = {\n criteria: firebolt.context.getCriteriaFromData(args)\n };\n behaviours.forEach(behaviour => firebolt.dispatchBehaviour(behaviour, payload));\n };\n\n targetEl.on('click', dispatchBehaviour);\n};\n\nexport default click;\n","import drag from './drag';\nimport hover from './hover';\nimport click from './click';\nimport * as ACTIONNAMES from '../../enums/actions';\n\nexport const physicalActions = {\n [ACTIONNAMES.DRAG]: drag,\n [ACTIONNAMES.HOVER]: hover,\n [ACTIONNAMES.CLICK]: click\n};\n\n","export const DRAG = 'drag';\nexport const HOVER = 'hover';\nexport const SELECTIONDRAG = 'selectiondrag';\nexport const CLICK = 'click';\n","import {\n getMousePos,\n getEvent,\n getD3Drag\n } from 'muze-utils';\nimport { HEIGHT, WIDTH, HORIZONTAL } from '../../enums/constants';\n\nconst getSelectionCriteria = (subject, axis, measures) => {\n let criteria = [];\n const {\n axisScale,\n axisType\n } = axis;\n const {\n startPos,\n endPos,\n selectionBoxMeasure,\n drawingInfMeasure,\n offset\n } = measures;\n const subjectStartPoint = subject[axisType];\n\n if (startPos[axisType] === endPos[axisType]) {\n criteria = [];\n } else if (subjectStartPoint + selectionBoxMeasure >= drawingInfMeasure + offset) {\n criteria = [axisScale.invert(drawingInfMeasure + offset - selectionBoxMeasure),\n axisScale.invert(drawingInfMeasure + offset)];\n } else if (subjectStartPoint - offset < offset) {\n criteria = [axisScale.invert(offset * 2), axisScale.invert(selectionBoxMeasure + offset * 2)];\n } else {\n criteria = [axisScale.invert(subjectStartPoint), axisScale.invert(subjectStartPoint + selectionBoxMeasure)];\n }\n axisType === 'x' ? criteria : criteria.reverse();\n return criteria;\n};\n\nexport const selectionBoxDrag = firebolt => (targetEl, behaviours) => {\n let startPos = {};\n let payload;\n const endPos = {};\n const d3Drag = getD3Drag();\n const context = firebolt.context;\n const axisScale = context.axis().source().scale();\n const axisType = context.config().align === HORIZONTAL ? 'x' : 'y';\n const drawingInfMeasure = context.measurement().gradientDimensions[axisType === 'x' ?\n WIDTH : HEIGHT];\n const offset = axisScale.range()[axisType === 'x' ? 0 : 1];\n const measures = {\n drawingInfMeasure,\n offset\n };\n let subject = {};\n\n targetEl.call(d3Drag().on('start', function () {\n const event = getEvent();\n startPos = getMousePos(this, event.sourceEvent);\n subject = event.subject;\n }).on('drag', () => {\n const event = getEvent();\n const selectionBoxMeasure = subject[axisType === 'x' ? WIDTH : HEIGHT];\n\n subject.x += event.dx;\n subject.y += event.dy;\n\n measures.selectionBoxMeasure = selectionBoxMeasure;\n measures.startPos = startPos;\n measures.endPos = endPos;\n const criteria = getSelectionCriteria(subject, { axisScale, axisType }, measures);\n\n payload = {\n criteria: {\n [context.fieldName()]: criteria\n },\n fadeOut: true\n };\n firebolt.dispatchBehaviour(behaviours[0], payload);\n }).on('end', () => {\n const event = getEvent();\n const selectionBoxMeasure = subject[axisType === 'x' ? WIDTH : HEIGHT];\n measures.selectionBoxMeasure = selectionBoxMeasure;\n measures.startPos = startPos;\n measures.endPos = endPos;\n const criteria = getSelectionCriteria(event, { axisScale, axisType }, measures);\n payload = {\n criteria: {\n [context.fieldName()]: criteria\n },\n fadeOut: true,\n config: {\n transition: {\n duration: 200\n }\n }\n };\n firebolt.dispatchBehaviour(behaviours[0], payload);\n }));\n};\n\n","import { makeElement } from 'muze-utils';\nimport { SpawnableSideEffect } from '@chartshq/muze-firebolt';\nimport { CLASSPREFIX, HEIGHT, WIDTH, HORIZONTAL, RECT } from '../../../enums/constants';\nimport { SELECTIONBOX } from '../../../enums/side-effects';\nimport { selectionBoxDrag } from '../../physical/selection-box-drag';\nimport './styles.scss';\n\n/**\n * This class is used to create a selection box which is used by visual unit for brushing and\n * selection in the canvas.\n * @class SelectionBox\n */\n/* istanbul ignore next */ class SelectionBox extends SpawnableSideEffect {\n static formalName () {\n return SELECTIONBOX;\n }\n\n /**\n * It returns the default configuration needed by selectionbox.\n * @return {Object} Default configuration of the selection box.\n */\n static defaultConfig () {\n return {\n className: 'legend-selection-box',\n classPrefix: CLASSPREFIX\n };\n }\n\n /**\n * Draws the selectionbox with the specified dimensions.\n */\n /* istanbul ignore next */ apply (selectionSet, payload) {\n let x;\n let y;\n let width;\n let height;\n const firebolt = this.firebolt;\n const context = firebolt.context;\n const config = this.config();\n const axis = context.axis().source();\n const className = `${config.classPrefix}-${config.className}`;\n\n const domain = payload.criteria[firebolt.context.fieldName()];\n const axisScale = axis.scale();\n const range = domain ? [axis.getScaleValue(domain[0]), axis.getScaleValue(domain[1])] : [];\n\n const axisType = context.config().align === HORIZONTAL ? 'x' : 'y';\n\n const gradientDimension = firebolt.context.measurement().gradientDimensions[axisType === 'x' ?\n HEIGHT : WIDTH];\n\n const rangeShifter = axisScale.range()[axisType === 'x' ? 0 : 1];\n const legendGradContainer = context.getDrawingContext().svgContainer;\n const legendSelGroup = makeElement(legendGradContainer, 'g', [1], `${config.classPrefix}-selection-box-group`);\n\n if (firebolt.context.config().align === HORIZONTAL) {\n x = range[0] - rangeShifter || 0;\n y = 0;\n width = range[1] - range[0] || 0;\n height = gradientDimension;\n } else {\n x = 0;\n y = range[1] - rangeShifter || 0;\n height = range[0] - range[1] || 0;\n width = gradientDimension;\n }\n const enterFn = function (el) {\n selectionBoxDrag(firebolt)(el, ['brush']);\n };\n const selBox = makeElement(legendSelGroup, RECT, [{ domain, x, y, width, height }], className,\n { enter: enterFn });\n selBox.attr('y', y)\n .attr('x', x)\n .attr(WIDTH, width)\n .attr(HEIGHT, height);\n }\n}\n\nexport default SelectionBox;\n\n","import { selectElement } from 'muze-utils';\n\nexport const strategies = (firebolt) => {\n const context = firebolt.context;\n const classed = (set, className, change) => {\n const classPrefix = context.config().classPrefix;\n selectElement(context.mount())\n .selectAll(`.${classPrefix}-legend-columns`)\n .filter(d => set.uids.indexOf(d.id) !== -1)\n .selectAll('div')\n .classed(className, change);\n };\n\n return {\n fade: (set, config = {}) => {\n const classPrefix = context.config().classPrefix;\n if (!set.mergedEnter.length && !set.mergedExit.length) {\n classed(set.completeSet, config.className || `${classPrefix}-legend-fadeout`, false);\n } else {\n classed(set.mergedExit, config.className || `${classPrefix}-legend-brighten`, false);\n classed(set.mergedExit, config.className || `${classPrefix}-legend-fadeout`, true);\n classed(set.mergedEnter, config.className || `${classPrefix}-legend-fadeout`, false);\n }\n },\n brighten: (set, config = {}) => {\n const classPrefix = context.config().classPrefix;\n if (!set.mergedEnter.length && !set.mergedExit.length) {\n classed(set.completeSet, config.className || `${classPrefix}-legend-brighten`, false);\n } else {\n classed(set.mergedEnter, config.className || `${classPrefix}-legend-brighten`, true);\n classed(set.mergedExit, config.className || `${classPrefix}-legend-brighten`, false);\n }\n }\n };\n};\n","import { GenericSideEffect } from '@chartshq/muze-firebolt';\nimport { strategies } from './strategies';\nimport { Highlighter } from '../../../enums/side-effects';\n\nexport default class LegendHighlighter extends GenericSideEffect {\n constructor (...params) {\n super(...params);\n this._strategies = strategies(this.firebolt);\n this._strategy = 'brighten';\n }\n\n static formalName () {\n return Highlighter;\n }\n\n apply (selectionSet, payload, options = {}) {\n const strategy = this._strategies[options.strategy || this._strategy];\n\n strategy(selectionSet, this);\n }\n}\n","import { mergeRecursive } from 'muze-utils';\n\nexport const PROPS = {\n config: {\n sanitization: (context, value) => mergeRecursive(context._config || {}, value)\n },\n data: {},\n fieldName: {},\n legendContainer: {},\n measurement: {\n sanitization: (context, value) => {\n const measurement = mergeRecursive(context._measurement, value);\n ['padding', 'border', 'margin'].forEach((space) => {\n measurement[space] = Math.min(measurement[space] > 0 ? measurement[space] : 0,\n measurement.maxWidth * 0.1, measurement.maxHeight * 0.1);\n });\n return measurement;\n }\n },\n logicalSpace: {},\n metaData: {},\n range: {\n sanitization: (context, value) => {\n context.scale().range(value);\n context.resetLogicalSpace();\n context.store().commit('range', value);\n return value;\n }\n },\n scale: {},\n smartTicks: {},\n store: {},\n title: {\n sanitization: (context, value) => mergeRecursive(context._title || {}, value)\n }\n};\n","import { getSymbol } from 'muze-utils';\nimport {\n CENTER,\n LEFT,\n RIGHT\n} from '../enums/constants';\n\nexport const ALIGN = {\n HORIZONTAL: 'horizontal',\n VERTICAL: 'vertical'\n};\n\nexport const DEFAULT_MEASUREMENT = {\n height: 30,\n width: 30,\n maxWidth: Infinity,\n maxHeight: Infinity,\n padding: 2,\n margin: 2,\n border: 1\n};\n\nexport const LEGEND_TITLE = {\n text: '',\n orientation: (pos) => {\n if (pos === LEFT || pos === RIGHT) {\n return LEFT;\n } return CENTER;\n }\n};\n\nexport const DEFAULT_CONFIG = {\n classPrefix: 'muze',\n borderStyle: 'solid',\n borderColor: 'rgba(0,0,0,0)',\n formatter: {\n bounds: {\n lower: 'less than',\n upper: 'more than'\n }\n },\n item: {\n text: {\n orientation: 'right',\n width: 10,\n formatter: val => val\n },\n icon: {\n className: 'legend-icon',\n height: 20,\n width: 20,\n color: 'rgba(0,0,0,.5)',\n type: 'square'\n }\n }\n};\n\n/**\n * Creates a map of pre defined icons\n *\n * @param {string} icon Accepts a icon name like 'square', 'cross', 'diamond' etc\n * @return {Object} icon object which can be used to draw the icons\n */\nexport const ICON_MAP = (icon) => {\n if (icon && typeof (icon) === 'string') {\n return getSymbol(icon);\n } return icon;\n};\n","import { makeElement, numberInterpolator } from 'muze-utils';\n\nimport {\n SCALE_FUNCTIONS,\n WIDTH,\n HEIGHT,\n LEFT,\n RIGHT,\n TOP,\n BOTTOM\n} from '../enums/constants';\n\n/**\n *\n *\n * @param {*} scale\n * @returns\n */\nexport const getScaleInfo = (scale) => {\n const scaleType = scale.constructor.type();\n const domain = scale.uniqueValues();\n const steps = scale.config().stops || 1;\n const scaleFn = SCALE_FUNCTIONS[scaleType];\n\n return { scaleType, domain, steps, scaleFn };\n};\n\n/**\n *\n *\n * @param {*} domain\n * @param {*} steps\n * @returns\n */\nexport const getInterpolatedData = (domain, steps) => {\n const domainForLegend = [];\n const interpolatedFn = numberInterpolator()(domain[0], domain[1]);\n\n for (let i = 0; i <= steps; i++) {\n domainForLegend[i] = interpolatedFn(i / steps);\n }\n return domainForLegend;\n};\n\n/**\n *\n *\n * @param {*} container\n * @param {*} text\n * @param {*} measurement\n * @param {*} classPrefix\n */\nexport const titleCreator = (container, title, measurement, config) => {\n const titleContainer = makeElement(container, 'table', [1], `${config.classPrefix}-legend-title`)\n .style(WIDTH, `${measurement.width}px`)\n .style(HEIGHT, `${measurement.height}px`)\n .style('border-bottom', `${measurement.border}px ${config.borderStyle} ${config.borderColor}`)\n .style('text-align', title.orientation instanceof Function ?\n title.orientation(config.position) : title.orientation);\n return makeElement(titleContainer, 'td', [1], `${config.classPrefix}-legend-title-text`)\n .style(WIDTH, `${measurement.width}px`)\n .style(HEIGHT, '100%')\n .style('padding', `${measurement.padding}px`)\n .text(title.text)\n .node();\n};\n\n /**\n *\n *\n * @param {*} data\n * @param {*} prop\n * @param {*} labelManager\n * @return\n */\nexport const getMaxMeasures = (data, prop, labelManager) => {\n let maxHeight = -Infinity;\n let maxWidth = -Infinity;\n\n data.forEach((item) => {\n const value = prop ? item[prop] : item;\n const space = labelManager.getOriSize(value);\n maxHeight = Math.max(space.height + 2, maxHeight);\n maxWidth = Math.max(space.width + 2, maxWidth);\n });\n\n return { height: maxHeight, width: maxWidth };\n};\n\n/**\n *\n *\n * @param {*} data\n * @param {*} prop\n * @param {*} labelManager\n * @return\n */\nexport const getItemMeasures = (data, prop, labelManager, formatter) => {\n const space = [];\n\n data.forEach((item, index) => {\n const value = prop ? item[prop] : item;\n const { height, width } = labelManager.getOriSize(formatter(value));\n space[index] = { height: height + 1, width: width + 1 };\n });\n return space;\n};\n\n/**\n *\n *\n * @param {*} textOrientation\n * @param {*} effPadding\n * @param {*} titleSpace\n * @return\n * @memberof Legend\n */\nexport const computeItemSpaces = (config, measures, data) => {\n let totalHeight = 0;\n let totalWidth = 0;\n let maxItemSpaces = {\n width: 0, height: 0\n };\n const {\n effPadding,\n titleWidth,\n labelSpaces,\n titleHeight,\n maxWidth\n } = measures;\n const {\n item,\n align\n } = config;\n const {\n icon,\n text\n } = item;\n const textOrientation = text.orientation;\n const itemSpaces = [];\n const iconSpaces = [];\n let maxIconWidth = 0;\n labelSpaces.forEach((labelSpace, i) => {\n const itemSpace = { width: 0, height: 0 };\n const iconSpace = { width: 0, height: 0 };\n const datum = data[i] || {};\n // Compute each legend item height/width\n if (textOrientation === LEFT || textOrientation === RIGHT) {\n // Get label, icon and item widths\n labelSpace.width += effPadding;\n iconSpace.width = (datum.size ? 2 * Math.sqrt(datum.size / Math.PI) : icon.width) + effPadding;\n maxIconWidth = Math.max(iconSpace.width, maxIconWidth);\n itemSpace.width = labelSpace.width + maxIconWidth;\n\n // Get label, icon and item heights\n labelSpace.height = Math.max(labelSpace.height, icon.height) + effPadding;\n iconSpace.height = labelSpace.height;\n itemSpace.height = labelSpace.height;\n } else {\n // Get label, icon and item widths\n labelSpace.width = Math.max(labelSpace.width, datum.size ? 2 * Math.sqrt(datum.size / Math.PI)\n : icon.width) + effPadding;\n iconSpace.width = labelSpace.width;\n itemSpace.width = labelSpace.width;\n maxIconWidth = Math.max(iconSpace.width, maxIconWidth);\n\n // Get label, icon and item heights\n labelSpace.height += effPadding;\n iconSpace.height = icon.height + effPadding;\n itemSpace.height = labelSpace.height + iconSpace.height;\n }\n // Compute height and width of legend for each alignment\n if (align === 'horizontal') {\n totalHeight = Math.max(totalHeight, itemSpace.height);\n } else {\n totalHeight += itemSpace.height;\n totalWidth = Math.max(totalWidth, itemSpace.width, titleWidth) + effPadding;\n }\n maxItemSpaces = {\n width: Math.max(itemSpace.width, maxItemSpaces.width),\n height: Math.max(itemSpace.height, maxItemSpaces.height)\n };\n itemSpaces.push(itemSpace);\n iconSpaces.push(iconSpace);\n });\n itemSpaces.forEach((itemSpace, i) => {\n if (align === 'horizontal') {\n itemSpace.height = totalHeight;\n iconSpaces[i].width = maxIconWidth;\n if (textOrientation === LEFT || textOrientation === RIGHT) {\n labelSpaces[i].height = totalHeight;\n iconSpaces[i].height = totalHeight;\n itemSpaces[i].width = labelSpaces[i].width + maxIconWidth;\n } else {\n labelSpaces[i].width = maxIconWidth;\n itemSpaces[i].width = maxIconWidth;\n labelSpaces[i].width = maxIconWidth;\n }\n totalWidth = Math.max(totalWidth + itemSpaces[i].width);\n } else {\n itemSpace.width = Math.max(totalWidth, maxWidth);\n if (textOrientation === TOP || textOrientation === BOTTOM) {\n labelSpaces[i].width = totalWidth;\n iconSpaces[i].width = totalWidth;\n maxIconWidth = totalWidth;\n } else {\n iconSpaces[i].width = maxIconWidth;\n itemSpaces[i].width = labelSpaces[i].width + maxIconWidth;\n labelSpaces[i].width = maxItemSpaces.width - maxIconWidth;\n totalWidth = Math.max(totalWidth, itemSpace.width) + effPadding;\n }\n }\n });\n totalWidth = Math.max(totalWidth, titleWidth);\n totalHeight += titleHeight + effPadding;\n\n return { totalHeight, totalWidth, itemSpaces, iconSpaces, maxItemSpaces, maxIconWidth };\n};\n\n/**\n *\n *\n * @param {*} type\n * @param {*} scaleInfo\n * @param {*} domainInfo\n * @returns\n */\nexport const getDomainBounds = (type, scaleInfo, domainInfo) => {\n const {\n scaleFn,\n scaleType,\n scale\n } = scaleInfo;\n const {\n domain,\n domainBounds,\n domainLeg,\n steps\n } = domainInfo;\n const ele = domain[type === 'lower' ? 0 : domain.length - 1];\n const step = steps[type === 'lower' ? 0 : steps.length - 1];\n\n return {\n [scaleType]: scaleType === 'size' ? scale[scaleFn](ele) * scale.getScaleFactor() : scale[scaleFn](ele),\n value: domainBounds[type],\n id: type === 'lower' ? 0 : domainLeg.length + 2,\n range: [ele, step]\n };\n};\n","import {\n makeElement,\n selectElement,\n getUniqueId,\n getSmartComputedStyle,\n generateGetterSetters,\n mergeRecursive\n} from 'muze-utils';\nimport { behaviouralActions } from '@chartshq/muze-firebolt';\nimport * as legendBehaviours from '../firebolt/behavioural';\n\nimport { LegendFireBolt } from '../firebolt/legend-firebolt';\nimport { actionBehaviourMap } from '../firebolt/action-behaviour-map';\nimport { physicalActions } from '../firebolt/physical';\nimport * as sideEffects from '../firebolt/side-effects';\nimport { behaviourEffectMap } from '../firebolt/behaviour-effect-map';\nimport { VALUE, PATH } from '../enums/constants';\nimport { PROPS } from './props';\nimport { DEFAULT_MEASUREMENT, DEFAULT_CONFIG, LEGEND_TITLE } from './defaults';\nimport { getItemMeasures, titleCreator, computeItemSpaces } from './legend-helper';\n\n/**\n * Creates a Legend from the axes of a canvas\n *\n * @param {Object} dependencies : legend data\n * @class SimpleLegend\n */\nexport default class SimpleLegend {\n\n /**\n * Creates an instance of Legend.\n * @param {Object} dependencies Set of dependencies required by the legend\n * @memberof Legend\n */\n constructor (dependencies) {\n this._data = [];\n this._metaData = [];\n this._mount = null;\n this._fieldName = null;\n this._title = Object.assign({}, LEGEND_TITLE);\n this._metaData = null;\n this._labelManager = dependencies.labelManager;\n this._cells = dependencies.cells;\n this._id = getUniqueId();\n this._measurement = Object.assign({}, this.constructor.defaultMeasurement());\n this._config = mergeRecursive({}, this.constructor.defaultConfig());\n\n generateGetterSetters(this, PROPS);\n this._computedStyle = getSmartComputedStyle(selectElement('body'),\n `${this.config().classPrefix}-legend-item-info`);\n\n this._firebolt = new LegendFireBolt(this, {\n behavioural: Object.assign({}, behaviouralActions, legendBehaviours),\n physical: physicalActions,\n physicalBehaviouralMap: actionBehaviourMap\n }, sideEffects, behaviourEffectMap);\n }\n\n id () {\n return this._id;\n }\n /**\n * Initializes an instance of the class\n *\n * @static\n * @param {Object} dependencies Set of dependencies required by the legend\n * @return {Instance} returns a new instance of Legend\n * @memberof Legend\n */\n static create (dependencies) {\n return new SimpleLegend(dependencies);\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof SimpleLegend\n */\n static defaultConfig () {\n return DEFAULT_CONFIG;\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof SimpleLegend\n */\n static defaultMeasurement () {\n return DEFAULT_MEASUREMENT;\n }\n\n /**\n *\n *\n * @readonly\n * @memberof SimpleLegend\n */\n firebolt (...params) {\n if (params.length) {\n return this;\n }\n return this._firebolt;\n }\n\n /**\n *\n *\n * @return\n * @memberof Legend\n */\n elemType () {\n return PATH;\n }\n\n canvasAlias (...alias) {\n if (alias.length) {\n this._canvasAlias = alias[0];\n return this;\n }\n return this._canvasAlias;\n }\n\n /**\n *\n *\n * @return\n * @memberof Legend\n */\n mount (...params) {\n if (params.length) {\n this._mount = params[0];\n this.render();\n return this;\n }\n return this._mount;\n }\n\n /**\n *\n *\n * @param {*} effPadding\n * @param {*} align\n * @return\n * @memberof Legend\n */\n getLabelSpaces () {\n const {\n item,\n classPrefix\n } = this.config();\n this._labelManager.setStyle(getSmartComputedStyle(selectElement('body'),\n `${classPrefix}-legend-item-info`));\n return getItemMeasures(this.data(), VALUE, this._labelManager, item.text.formatter);\n }\n\n /**\n * Sets the height and width of a legend based on provided max\n * height and width and based on its contents\n *\n * @return {Instance} Current instance\n * @memberof Legend\n */\n setLegendMeasures () {\n const {\n width,\n height,\n maxWidth,\n maxHeight,\n padding,\n margin,\n border\n } = this.measurement();\n const {\n align\n } = this.config();\n\n // Effective padding, margin and padding\n const effPadding = padding * 2;\n const effBorder = border * 2;\n const effMargin = margin * 2;\n\n this.data(this.dataFromScale(this.scale()));\n // Get space occupied by title\n const titleSpace = this.getTitleSpace();\n const titleHeight = titleSpace.height > 0 ? titleSpace.height + effPadding : 0;\n const titleWidth = titleSpace.width + effPadding;\n\n // Get space occupied by labels\n const labelSpaces = this.getLabelSpaces(effPadding, align);\n\n const {\n totalHeight, totalWidth, itemSpaces, iconSpaces, maxItemSpaces, maxIconWidth\n } = computeItemSpaces(this.config(),\n { effPadding, titleWidth, labelSpaces, titleHeight, maxWidth, maxHeight }, this.data());\n\n this.measurement({\n width: Math.max(totalWidth, width) + effMargin + effBorder,\n height: Math.max(totalHeight, height) + effMargin + effBorder,\n labelSpaces,\n iconSpaces,\n itemSpaces,\n maxItemSpaces,\n maxIconWidth,\n titleSpaces: {\n width: Math.min(maxWidth, this.measurement().width) - effMargin - effBorder,\n height: titleHeight\n }\n });\n return this;\n }\n\n /**\n * Returns the space occupied by the legend title\n *\n * @return {Object} Space occupied by title\n * @memberof Legend\n */\n getTitleSpace () {\n this._labelManager.setStyle(getSmartComputedStyle(selectElement('body'),\n `${this.config().classPrefix}-legend-title`));\n return this._labelManager.getOriSize(this.title().text ? this.title().text : '');\n }\n\n /**\n * Creates the title for the legend\n *\n * @param {DOM} container Container made for the title\n * @return {Selection} Title and it's node\n * @memberof Legend\n */\n renderTitle (container) {\n const { titleSpaces, border, padding, width } = this.measurement();\n const { borderStyle, borderColor } = this.config();\n return titleCreator(container, this.title(), {\n height: titleSpaces.height,\n width,\n border,\n padding,\n borderStyle,\n borderColor\n }, this.config());\n }\n\n /**\n * Render the legend with its title\n *\n * @param {DOM} mountPoint Point where the legend and title are to be appended\n * @return {Instance} Current instance of legend\n * @memberof Legend\n */\n render () {\n const firebolt = this.firebolt();\n const {\n classPrefix,\n borderStyle,\n borderColor\n } = this.config();\n const {\n maxWidth,\n maxHeight,\n width,\n height,\n margin,\n border\n } = this.measurement();\n const legendContainer = makeElement(selectElement(this.mount()), 'div', [1], `${classPrefix}-legend-box`);\n\n legendContainer.classed(`${classPrefix}-legend-box-${this._id}`, true);\n legendContainer.style('float', 'left');\n // set height and width\n legendContainer.style('width', `${Math.min(maxWidth, width) - margin * 2}px`)\n .style('height', `${Math.min(maxHeight, height) - margin * 2}px`)\n .style('margin', `${margin}px`)\n .style('border', `${border}px ${borderStyle} ${borderColor}`);\n this.legendContainer(legendContainer.node());\n\n // create title\n this.renderTitle(legendContainer);\n firebolt.createSelectionSet(this.data().map(d => d.id));\n return legendContainer;\n }\n /**\n *\n *\n * @param {*} data\n * @returns\n * @memberof StepLegend\n */\n getCriteriaFromData (data) {\n const fieldName = this.fieldName();\n const type = this.metaData().getData().schema[0].type;\n if (type === 'measure') {\n return {\n [fieldName]: data.range\n };\n }\n return [[fieldName], [data.value]];\n }\n}\n","import {\n LEFT,\n RIGHT,\n START,\n END,\n TOP,\n BOTTOM,\n HORIZONTAL,\n VERTICAL,\n CENTER,\n SHAPE,\n VALUE\n} from '../enums/constants';\n\nconst legendOrientation = {\n [HORIZONTAL]: {\n datasets: data => ({\n row: [1],\n column: data\n }),\n itemContainerMeasures: (measurement) => {\n const {\n itemSpaces,\n width\n } = measurement;\n return {\n row: {\n width: `${width}px`,\n padding: `${0}px`\n },\n column: {\n width: (d, i) => `${itemSpaces[i].width}px`,\n padding: `${0}px`\n }\n };\n },\n getStepSpacesInfo: (measurement) => {\n const { maxItemSpaces, height } = measurement;\n return {\n iconHeight: height,\n iconWidth: maxItemSpaces.width,\n stepPadding: {\n horizontal: true,\n vertical: false\n }\n };\n }\n },\n [VERTICAL]: {\n datasets: data => ({\n row: data,\n column: d => [d]\n }),\n itemContainerMeasures: (measurement, config) => {\n const {\n width\n } = measurement;\n const { padding } = config;\n return {\n row: {\n width: `${width}px`,\n padding: `${padding}px`\n },\n column: {\n width: `${width}px`,\n padding: `${0}px`\n }\n };\n },\n getStepSpacesInfo: (measurement) => {\n const { maxItemSpaces, width } = measurement;\n return {\n iconHeight: maxItemSpaces.height,\n iconWidth: width,\n stepPadding: {\n horizontal: false,\n vertical: true\n }\n };\n }\n }\n};\n\nexport const positionConfig = {\n [LEFT]: legendOrientation[VERTICAL],\n [RIGHT]: legendOrientation[VERTICAL],\n [TOP]: legendOrientation[HORIZONTAL],\n [BOTTOM]: legendOrientation[HORIZONTAL]\n};\n\nexport const alignmentMap = {\n [LEFT]: END,\n [RIGHT]: START,\n [TOP]: CENTER,\n [BOTTOM]: CENTER\n};\n\n// Reverses data for step legend\nexport const stepData = data => ({\n [LEFT]: data.reverse(),\n [RIGHT]: data.reverse(),\n [TOP]: data,\n [BOTTOM]: data\n});\n\n// Changes the item layout based on the position of the text\nexport const itemStack = {\n [LEFT]: [VALUE, SHAPE],\n [RIGHT]: [SHAPE, VALUE],\n [TOP]: [VALUE, SHAPE],\n [BOTTOM]: [SHAPE, VALUE]\n};\n","import { makeElement, selectElement, applyStyle } from 'muze-utils';\nimport { ICON_MAP } from './defaults';\nimport { positionConfig, alignmentMap, itemStack } from './position-config';\nimport {\n WIDTH,\n HEIGHT,\n CENTER,\n VALUE,\n RECT,\n LEFT,\n RIGHT\n} from '../enums/constants';\n\n/**\n *\n *\n * @param {*} container\n * @param {*} data\n * @param {*} legendInstance\n * @param {*} align\n * @return\n */\nexport const getItemContainers = (container, data, legendInstance) => {\n const measurement = legendInstance.measurement();\n const config = legendInstance.config();\n const {\n itemSpaces\n } = measurement;\n const {\n classPrefix,\n position\n } = config;\n const positionObj = positionConfig[position];\n const datasets = positionObj.datasets(data);\n const measures = positionObj.itemContainerMeasures(measurement, config);\n\n const rows = makeElement(container, 'div', datasets.row, `${classPrefix}-legend-row`);\n rows.style(HEIGHT, (d, i) => `${itemSpaces[i].height}px`);\n rows.style(WIDTH, measures.row.width);\n rows.style('padding', measures.row.padding);\n\n const columns = makeElement(rows, 'div', datasets.column, `${classPrefix}-legend-columns`);\n columns.style(WIDTH, measures.column.width);\n columns.style('padding', measures.column.padding);\n\n return columns;\n};\n\n/**\n *\n *\n * @param {*} container\n * @param {*} classPrefix\n * @param {*} data\n * @returns\n * @memberof DiscreteLegend\n */\nexport const createLegendSkeleton = (context, container, classPrefix, data) => {\n let gradWidth = 0;\n let gradHeight = 0;\n let maxGradHeight = 0;\n let maxGradWidth = 0;\n const measurement = context.measurement();\n const {\n margin,\n border,\n titleSpaces,\n width,\n height,\n maxWidth,\n maxHeight\n } = measurement;\n\n gradHeight = height - (titleSpaces.height + 2 * margin + 2 * border);\n gradWidth = width - (margin * 2 + border * 2);\n\n maxGradHeight = maxHeight - (titleSpaces.height + margin * 2 + border * 2);\n maxGradWidth = maxWidth - (margin * 2 + border * 2);\n\n let legendBody = makeElement(container, 'div', [1], `${classPrefix}-legend-body`);\n legendBody.select(`.${classPrefix}-legend-overflow`).remove();\n // Create a div with scroll when overflow\n if (maxGradWidth && maxGradWidth < gradWidth) {\n legendBody = legendBody.style(WIDTH, `${maxGradWidth}px`).style('overflow-x', 'scroll');\n }\n // Create a div with scroll when overflow\n if (maxGradHeight && maxGradHeight < gradHeight) {\n legendBody.style(HEIGHT, `${maxGradHeight}px`).style('overflow-y', 'scroll');\n }\n\n legendBody = makeElement(legendBody, 'div', [1], `${classPrefix}-legend-overflow`);\n\n legendBody.style(WIDTH, `${gradWidth}px`);\n legendBody.style(HEIGHT, `${gradHeight}px`);\n\n const legendItem = getItemContainers(legendBody, data, context);\n return { legendItem };\n};\n\n/**\n * Creates legend item based on alignment and text orientation\n *\n * @param {Selection} container Point where items are to be mounted\n * @return {Instance} Current instance\n * @memberof Legend\n */\nexport const createItemSkeleton = (context, container) => {\n const {\n classPrefix,\n item\n } = context.config();\n const textOrientation = item.text.orientation;\n\n const stack = itemStack[textOrientation];\n const itemSkeleton = makeElement(container, 'div', (d, i) => stack.map(e => [e, d[e], d.color, d.size,\n d.value, context.fieldName(), i]), `${classPrefix}-legend-item-info`);\n\n const alignClass = alignmentMap[textOrientation];\n\n itemSkeleton.classed(alignClass, true);\n return { itemSkeleton };\n};\n\n/**\n *\n *\n * @param {*} measureType\n * @param {*} stepColorCheck\n */\nexport const applyItemStyle = (item, measureType, stepColorCheck, context) => {\n const {\n padding,\n labelSpaces,\n iconSpaces,\n maxIconWidth\n } = context.measurement();\n const diff = stepColorCheck ? -padding * 2 : 0;\n\n if (item[0] === VALUE) {\n return `${labelSpaces[item[6]][measureType]}px`;\n }\n return `${measureType === 'width' && !stepColorCheck ? maxIconWidth : iconSpaces[item[6]][measureType] - diff}px`;\n};\n\n/**\n *\n *\n * @param {*} str\n * @returns\n */\nconst checkPath = (str) => {\n if (/^[mzlhvcsqta]\\s*[-+.0-9][^mlhvzcsqta]+/i.test(str) && /[\\dz]$/i.test(str) && str.length > 4) {\n return true;\n }\n return false;\n};\n\n/**\n *\n *\n * @param {*} d\n * @param {*} elem\n */\nconst createShape = function (d, elem, defaultIcon, width, height) {\n const groupElement = elem;\n // const { shape, size, update } = d;\n const size = d[3] || Math.min(width, height) * Math.PI;\n const shape = d[1] || defaultIcon;\n\n if (shape instanceof Promise) {\n shape.then((res) => {\n d.shape = res;\n return createShape(d, elem);\n });\n } else if (shape instanceof Element) {\n let newShape = shape.cloneNode(true);\n\n if (newShape.nodeName.toLowerCase() === 'img') {\n const src = newShape.src || newShape.href;\n newShape = document.createElementNS('http://www.w3.org/2000/svg', 'image');\n newShape.setAttribute('href', src);\n }\n const shapeElement = selectElement(newShape);\n shapeElement.attr('transform', `scale(${size / 100})`);\n return selectElement(groupElement.node().appendChild(newShape));\n } else if (typeof shape === 'string') {\n let pathStr;\n if (checkPath(shape)) {\n pathStr = shape;\n } else {\n pathStr = ICON_MAP(shape).size(size)();\n }\n return makeElement(groupElement, 'path', data => [data]).attr('d', pathStr);\n }\n d[1] = 'circle';\n return createShape(d, elem, 'circle');\n};\n\n/**\n * Returns the icon of the legend item\n *\n * @param {Object} datum Data property attached to the item\n * @param {number} width width of the item\n * @param {number} height height of the item\n * @return {Object|string} returns the path string or the string name of the icon\n * @memberof Legend\n */\nexport const getLegendIcon = (datum, width, height, defaultIcon) => {\n const icon = ICON_MAP(datum[1]);\n\n if (icon) {\n return icon.size(datum[3] || Math.min(width, height) * Math.PI);\n }\n return ICON_MAP(datum[3] ? 'circle' : defaultIcon).size(datum[3] || Math.min(width, height) * Math.PI);\n};\n\n/**\n *\n *\n */\nexport const renderIcon = (icon, container, datum, context) => {\n const {\n classPrefix,\n iconHeight,\n iconWidth,\n maxIconWidth,\n padding,\n color\n } = context;\n const svg = makeElement(container, 'svg', f => [f], `${classPrefix}-legend-icon-svg`)\n .attr(WIDTH, maxIconWidth)\n .attr(HEIGHT, iconHeight)\n .style(WIDTH, `${maxIconWidth}px`)\n .style(HEIGHT, `${iconHeight}px`);\n\n if (icon !== RECT) {\n const group = makeElement(svg, 'g', [datum[1]], `${classPrefix}-legend-icon`);\n createShape(datum, group, datum[3] ? 'circle' : 'square', iconWidth, iconHeight)\n .attr('transform', `translate(${maxIconWidth / 2 - padding} ${iconHeight / 2})`)\n .attr('fill', datum[2] || color);\n } else {\n makeElement(svg, RECT, [datum[1]], `${classPrefix}-legend-icon`)\n .attr('x', 0)\n .attr('y', 0)\n .attr(WIDTH, maxIconWidth)\n .attr(HEIGHT, iconHeight)\n .attr('fill', datum[2] || color);\n }\n};\n\n/**\n * Renders the items in the legend i.e, icon and text\n *\n * @param {DOM} container Point where item is to be mounted\n * @memberof Legend\n */\nexport const renderDiscreteItem = (context, container) => {\n const labelManager = context._labelManager;\n const {\n item,\n classPrefix\n } = context.config();\n const {\n maxIconWidth,\n padding\n } = context.measurement();\n const {\n width: iconWidth,\n height: iconHeight,\n color,\n className\n } = item.icon;\n\n const textOrientation = item.text.orientation;\n const formatter = item.text.formatter;\n\n labelManager.useEllipsesOnOverflow(true);\n applyStyle(container, {\n width: d => applyItemStyle(d, WIDTH, false, context),\n height: d => applyItemStyle(d, HEIGHT, false, context),\n 'text-align': CENTER,\n padding: `${padding}px`\n });\n\n labelManager.setStyle(context._computedStyle);\n container.each(function (d, i) {\n if (d[0] === VALUE) {\n selectElement(this).text(formatter(d[1]))\n .style(`padding-${textOrientation === RIGHT ? LEFT : RIGHT}`, '0px');\n } else {\n // const icon = getLegendIcon(d, iconWidth, iconHeight, type);\n selectElement(this).classed(`${classPrefix}-${className}`, true);\n selectElement(this).classed(`${classPrefix}-${className}-${i}`, true);\n renderIcon('circle', selectElement(this), d, {\n classPrefix,\n iconWidth,\n // iconWidth: 2 * Math.sqrt(d[3] / Math.PI) || iconWidth,\n iconHeight,\n maxIconWidth,\n padding,\n color\n });\n }\n });\n};\n\n/**\n* Renders the items in the legend i.e, icon and text\n*\n* @param {DOM} container Point where item is to be mounted\n* @memberof Legend\n*/\nexport const renderStepItem = (context, container) => {\n const labelManager = context._labelManager;\n const {\n item,\n position,\n classPrefix\n } = context.config();\n const {\n maxItemSpaces,\n maxIconWidth,\n padding\n } = context.measurement();\n const {\n width,\n height,\n color\n } = item.icon;\n const {\n formatter\n } = item.text;\n\n labelManager.useEllipsesOnOverflow(true);\n const { iconHeight, iconWidth, stepPadding } = positionConfig[position].getStepSpacesInfo({\n maxItemSpaces, height, width\n });\n\n applyStyle(container, {\n width: d => applyItemStyle(d, WIDTH, stepPadding.horizontal, context),\n height: d => applyItemStyle(d, HEIGHT, stepPadding.vertical, context),\n 'text-align': 'center',\n padding: `${padding}px`\n });\n\n labelManager.setStyle(context._computedStyle);\n container.each(function (d) {\n if (d[0] === VALUE) {\n selectElement(this).text(formatter(d[1]));\n } else {\n renderIcon(RECT, selectElement(this), d, {\n classPrefix,\n iconWidth,\n iconHeight,\n maxIconWidth,\n color\n });\n }\n });\n};\n","import SimpleLegend from './simple-legend';\nimport { DISCRETE, LEFT, SIZE } from '../enums/constants';\nimport { getScaleInfo } from './legend-helper';\nimport { createLegendSkeleton, createItemSkeleton, renderDiscreteItem } from './renderer';\nimport '../styles.scss';\n\n/**\n * Creates a Legend from the axes of a canvas\n *\n * @param {Object} dependencies : legend data\n * @class Legend\n */\nexport default class DiscreteLegend extends SimpleLegend {\n\n /**\n * Initializes an instance of the class\n *\n * @static\n * @param {Object} dependencies Set of dependencies required by the legend\n * @return {Instance} returns a new instance of Legend\n * @memberof Legend\n */\n static create (dependencies) {\n return new DiscreteLegend(dependencies);\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof DiscreteLegend\n */\n static type () {\n return DISCRETE;\n }\n\n /**\n *\n *\n * @param {*} scale\n * @returns\n * @memberof DiscreteLegend\n */\n dataFromScale (scale) {\n const { scaleType, domain, scaleFn } = getScaleInfo(scale);\n let domainForLegend = [...new Set(domain)];\n const type = this.metaData().getData().schema[0].type;\n\n domainForLegend = domainForLegend.map((ele, i) => {\n let value = 0;\n let range = 0;\n if (type === 'measure') {\n value = (+domainForLegend[i]).toFixed(0);\n const nextVal = domainForLegend[i + 1] ? +domainForLegend[i + 1] : +value;\n range = [value, nextVal.toFixed(0)];\n } else {\n value = domainForLegend[i];\n range = [domainForLegend[i]];\n }\n return {\n [scaleType]: scale[scaleFn](ele),\n value,\n id: i,\n range\n };\n }).filter(d => d.value !== null);\n\n domainForLegend = scaleType === SIZE ? domainForLegend.sort((a, b) => a[scaleType] - b[scaleType])\n : domainForLegend;\n return domainForLegend;\n }\n\n /**\n * Render the legend with its title\n *\n * @param {DOM} mountPoint Point where the legend and title are to be appended\n * @return {Instance} Current instance of legend\n * @memberof Legend\n */\n render () {\n const firebolt = this.firebolt();\n const data = this.data();\n const { classPrefix } = this.config();\n const legendContainer = super.render(this.mount());\n // create Legend\n const { legendItem } = createLegendSkeleton(this, legendContainer, classPrefix, data);\n const { itemSkeleton } = createItemSkeleton(this, legendItem);\n renderDiscreteItem(this, itemSkeleton);\n legendContainer.selectAll('div').style('float', LEFT);\n firebolt.mapActionsAndBehaviour();\n firebolt.createSelectionSet(this.data().map(d => d.id));\n return legendContainer;\n }\n}\n","import { makeElement, applyStyle } from 'muze-utils';\nimport { ContinousAxis } from '@chartshq/muze-axis';\nimport { BOTTOM, RIGHT } from '../enums/constants';\nimport { ALIGN } from './defaults';\nimport '../styles.scss';\n\n/**\n *\n *\n * @param {*} data\n * @returns\n */\nexport const getGradientDomain = (data) => {\n if (typeof data[0].value === 'number') {\n return data.reduce((accumulator, currentValue) =>\n [Math.min(currentValue.value, accumulator[0]), Math.max(currentValue.value, accumulator[1])],\n [Number.MAX_VALUE, Number.MIN_VALUE]);\n }\n return data.map(e => e.value);\n};\n\n/**\n *\n *\n * @param {*} container\n * @param {*} data\n * @param {*} domain\n * @returns\n */\nexport const makeLinearGradient = (container, data, domain) => {\n const defs = makeElement(container, 'defs', [1]);\n const linearGradient = makeElement(defs, 'linearGradient', [1])\n .attr('id', 'linear-gradient')\n .attr('x1', '0%')\n .attr('y2', '0%');\n makeElement(linearGradient, 'stop', data, 'stop-gradient')\n .attr('offset', d => `${(d.value - domain[0]) * 100 / (domain[1] - domain[0])}%`)\n .attr('stop-color', d => d.color);\n return linearGradient;\n};\n\n/**\n * Creates an axis cell with a linear axis for computing space and\n * creating gradient legend\n *\n * @return {AxisCell} Instance of Axis Cell for the gradient axis\n * @memberof Legend\n */\nexport const createAxis = (context) => {\n const data = context.data();\n const { align } = context.config();\n const AxisCell = context._cells.AxisCell;\n const newAxis = new ContinousAxis({\n id: `legend-${context._id}`,\n orientation: align === ALIGN.VERTICAL ? RIGHT : BOTTOM,\n style: context._computedStyle,\n nice: false,\n showAxisName: false,\n tickValues: data.map(d => d.value),\n fixedBaseline: false\n }, { labelManager: context._labelManager });\n\n newAxis.domain(getGradientDomain(data));\n newAxis.range([1, 1]);\n return new AxisCell().source(newAxis).config({\n margin: { left: 0, bottom: 0, top: 0, right: 0 }\n });\n};\n\n/**\n *\n *\n * @param {*} container\n * @param {*} data\n * @param {*} classPrefix\n * @returns\n * @memberof GradientLegend\n */\nconst createLegendSkeleton = (container, classPrefix, data) => {\n const domain = getGradientDomain(data);\n const legendContainer = makeElement(container, 'div', [1], `${classPrefix}-legend-body`);\n const legendGradSvg = makeElement(legendContainer, 'svg', [1], `${classPrefix}-gradient`);\n const legendGradCont = makeElement(legendGradSvg, 'g', [1], `${classPrefix}-gradient-group`);\n const linearGradient = makeLinearGradient(legendGradSvg, data, domain);\n const legendRect = makeElement(legendGradCont, 'rect', [1], `${classPrefix}-gradient-rect`);\n\n return {\n legendContainer,\n legendGradCont,\n legendGradSvg,\n linearGradient,\n legendRect\n };\n};\n\n/**\n * Renders the axis for the gradient\n *\n * @param {Selection} container Point where axis is to be mounted\n * @param {number} height Height for axis\n * @param {number} width Width for axis\n * @memberof Legend\n */\nexport const renderAxis = (context, container, height, width) => {\n const axis = context.axis();\n\n axis.setAvailableSpace(width, height);\n axis.render(container.node());\n};\n\n/**\n * Renders gradient legends\n *\n * @param {Selection} container Point where the legend is to be appended\n * @memberof GradientLegend\n */\nexport const renderGradient = (context, container) => {\n let gradHeight = 0;\n let gradWidth = 0;\n const {\n align,\n classPrefix,\n item\n } = context.config();\n const data = context.data();\n // Create the skeleton for the legend\n const {\n legendContainer,\n legendGradSvg,\n legendGradCont,\n linearGradient,\n legendRect\n } = createLegendSkeleton(container, classPrefix, data);\n const labelDim = context.axis().source().getAxisDimensions().tickLabelDim;\n const {\n padding,\n margin,\n border,\n titleSpaces,\n maxHeight,\n maxWidth,\n height,\n width\n } = context.measurement();\n const gradientDimensions = {};\n\n gradHeight = Math.floor(height - (titleSpaces.height + 2 * margin + 2 * border));\n gradWidth = Math.floor(width - (margin * 2 + border * 2));\n\n if (align === ALIGN.HORIZONTAL) {\n gradientDimensions.height = item.icon.height;\n gradientDimensions.width = gradWidth - 2 * padding - labelDim.width / 2;\n linearGradient.attr('x2', '100%').attr('y1', '0%');\n legendGradCont.attr('transform', `translate( ${labelDim.width / 2} 0)`);\n renderAxis(context, legendContainer, gradHeight - item.icon.height - padding, gradWidth - 2 * padding - 1);\n legendContainer.classed(`${classPrefix}-overflow-x`, width > maxWidth);\n\n applyStyle(legendContainer, {\n height: `${height}px`,\n width: `${Math.min(width, maxWidth)}px`,\n padding: `${padding}px`\n });\n\n legendRect.attr('height', gradientDimensions.height);\n legendRect.attr('width', gradientDimensions.width - labelDim.width / 2);\n } else {\n gradientDimensions.height = gradHeight - 2 * padding - labelDim.height / 2;\n gradientDimensions.width = item.icon.width;\n linearGradient.attr('x2', '0%').attr('y1', '100%');\n legendGradCont.attr('transform', `translate(0 ${labelDim.height / 2})`);\n renderAxis(context, legendContainer, gradHeight - 2 * padding - 1, gradWidth - item.icon.width - padding * 2);\n legendContainer.classed(`${classPrefix}-overflow-y`, height > maxHeight);\n applyStyle(legendContainer, {\n height: `${Math.min(height, maxHeight)}px`,\n width: `${width}px`,\n padding: `${padding}px`\n });\n legendRect.attr('height', gradientDimensions.height - labelDim.height / 2);\n legendRect.attr('width', gradientDimensions.width);\n }\n\n // Apply Styles to the legend plot area\n applyStyle(legendGradSvg, {\n height: `${gradientDimensions.height}px`,\n width: `${gradientDimensions.width}px`\n });\n\n // Apply styles to the legend rect\n applyStyle(legendRect, {\n fill: 'url(#linear-gradient)'\n });\n legendGradSvg.attr('height', gradientDimensions.height);\n legendGradSvg.attr('width', gradientDimensions.width);\n\n context.measurement({\n gradientDimensions\n });\n context._legendGradientSvg = legendGradSvg;\n return context;\n};\n","import SimpleLegend from './simple-legend';\nimport { getScaleInfo, getInterpolatedData } from './legend-helper';\nimport { GRADIENT, LEFT, SIZE } from '../enums/constants';\nimport { renderGradient, createAxis } from './gradient-helper';\nimport '../styles.scss';\n\n/**\n * Creates a Legend from the axes of a canvas\n *\n * @param {Object} dependencies : legend data\n * @class Legend\n */\nexport default class GradientLegend extends SimpleLegend {\n\n /**\n * Initializes an instance of the class\n *\n * @static\n * @param {Object} dependencies Set of dependencies required by the legend\n * @return {Instance} returns a new instance of Legend\n * @memberof Legend\n */\n static create (dependencies) {\n return new GradientLegend(dependencies);\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof GradientLegend\n */\n static type () {\n return GRADIENT;\n }\n\n /**\n *\n *\n * @param {*} axis\n * @returns\n * @memberof GradientLegend\n */\n axis (...axis) {\n if (axis.length) {\n this._axis = axis[0];\n return this;\n }\n return this._axis;\n }\n\n /**\n *\n *\n * @param {*} scale\n * @returns\n * @memberof GradientLegend\n */\n dataFromScale (scale) {\n let domainForLegend = [];\n const { scaleType, domain, steps, scaleFn } = getScaleInfo(scale);\n\n if (steps instanceof Array) {\n if (domain[0] < steps[0]) {\n domainForLegend[0] = domain[0];\n }\n domainForLegend = [...domainForLegend, ...steps];\n if (domain[domain.length - 1] > steps[steps.length - 1]) {\n domainForLegend.push(domain[1]);\n }\n } else {\n domainForLegend = getInterpolatedData(domain, steps - 1);\n }\n domainForLegend = [...new Set(domainForLegend)].sort((a, b) => a - b);\n\n return domainForLegend.map((ele, i) => {\n const value = domainForLegend[i];\n return {\n [scaleType]: scaleType === SIZE ? scale[scaleFn](ele) * scale.getScaleFactor()\n : scale[scaleFn](Math.floor(ele)),\n value: +value.toFixed(2),\n id: i\n };\n }).filter(d => d.value !== null);\n }\n\n /**\n *\n *\n * @param {*} effPadding\n * @param {*} align\n * @return\n * @memberof Legend\n */\n getLabelSpaces (effPadding) {\n this.config({\n item: {\n text: {\n orientation: this.config().position\n }\n }\n });\n const axis = createAxis(this);\n const axisSpace = axis.getLogicalSpace();\n const space = { width: axisSpace.width - effPadding, height: axisSpace.height - effPadding };\n const axisDomainLength = axis.source().domain().length;\n const labelSpaces = new Array(axisDomainLength).fill(space);\n\n this.axis(axis);\n return labelSpaces;\n }\n\n /**\n *\n *\n * @returns\n * @memberof GradientLegend\n */\n getDrawingContext () {\n return {\n svgContainer: this._legendGradientSvg\n };\n }\n\n /**\n * Render the legend with its title\n *\n * @param {DOM} mountPoint Point where the legend and title are to be appended\n * @return {Instance} Current instance of legend\n * @memberof Legend\n */\n render () {\n const firebolt = this.firebolt();\n const legendContainer = super.render(this.mount());\n // create Legend\n renderGradient(this, legendContainer);\n legendContainer.selectAll('div').style('float', LEFT);\n firebolt.mapActionsAndBehaviour();\n firebolt.createSelectionSet(this.data().map(d => d.id));\n return legendContainer;\n }\n /**\n *\n *\n * @param {*} data\n * @returns\n * @memberof SimpleLegend\n */\n getCriteriaFromData (data) {\n return [[this.fieldName()], [data.value]];\n }\n}\n","import SimpleLegend from './simple-legend';\nimport {\n getScaleInfo,\n getInterpolatedData,\n getDomainBounds\n} from './legend-helper';\nimport {\n createLegendSkeleton,\n createItemSkeleton,\n renderStepItem\n} from './renderer';\nimport { STEP, RECT, LEFT, SIZE, UPPER, LOWER } from '../enums/constants';\nimport { stepData } from './position-config';\nimport '../styles.scss';\n\n/**\n * Creates a Legend from the axes of a canvas\n *\n * @param {Object} dependencies : legend data\n * @class Legend\n */\nexport default class StepLegend extends SimpleLegend {\n\n /**\n * Initializes an instance of the class\n *\n * @static\n * @param {Object} dependencies Set of dependencies required by the legend\n * @return {Instance} returns a new instance of Legend\n * @memberof Legend\n */\n static create (dependencies) {\n return new StepLegend(dependencies);\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof StepLegend\n */\n static type () {\n return STEP;\n }\n\n /**\n *\n *\n * @param {*} scale\n * @returns\n * @memberof StepLegend\n */\n dataFromScale (scale) {\n let domainLeg = [];\n const { scaleType, domain, steps, scaleFn } = getScaleInfo(scale);\n\n const { formatter } = this.config();\n const domainBounds = {\n lower: null, upper: null\n };\n\n if (steps instanceof Array) {\n if (domain[0] < steps[0]) {\n domainBounds.lower = [`${formatter.bounds.lower} ${steps[0]}`];\n }\n domainLeg = [...domainLeg, ...steps];\n if (domain[domain.length - 1] > steps[steps.length - 1]) {\n domainBounds.upper = [`${formatter.bounds.upper} ${steps[steps.length - 1]}`];\n }\n } else {\n domainLeg = getInterpolatedData(domain, steps);\n }\n\n domainLeg = [...new Set(domainLeg)].sort((a, b) => a - b);\n domainLeg = domainLeg.map((ele, i) => {\n let value = null;\n if (i < domainLeg.length - 1) {\n value = `${(ele.toFixed(1))} - ${(+domainLeg[i + 1].toFixed(1))}`;\n }\n return {\n [scaleType]: scaleType === SIZE ? scale[scaleFn](ele) * scale.getScaleFactor() : scale[scaleFn](ele),\n value,\n id: i + 1,\n range: [ele, domainLeg[i + 1]]\n };\n }).filter(d => d.value !== null);\n\n if (domainBounds.lower) {\n const lowerBounds = getDomainBounds(LOWER, { scale, scaleFn, scaleType },\n { domain, steps, domainBounds });\n domainLeg = [lowerBounds, ...domainLeg];\n }\n if (domainBounds.upper) {\n const upperBounds = getDomainBounds(UPPER, { scale, scaleFn, scaleType },\n { domain, steps, domainBounds, domainLeg });\n domainLeg = [...domainLeg, upperBounds];\n }\n return domainLeg;\n }\n\n /**\n *\n *\n * @param {*} effPadding\n * @param {*} align\n * @return\n * @memberof Legend\n */\n getLabelSpaces (effPadding, align) {\n this.config({\n item: {\n text: {\n orientation: this.config().position\n }\n }\n });\n return super.getLabelSpaces(effPadding, align);\n }\n\n /**\n *\n *\n * @return\n * @memberof Legend\n */\n elemType () {\n return RECT;\n }\n\n /**\n * Render the legend with its title\n *\n * @param {DOM} mountPoint Point where the legend and title are to be appended\n * @return {Instance} Current instance of legend\n * @memberof Legend\n */\n render () {\n const firebolt = this.firebolt();\n const { classPrefix, position } = this.config();\n const data = stepData(this.data())[position];\n\n const legendContainer = super.render(this.mount());\n\n // create Legend\n const { legendItem } = createLegendSkeleton(this, legendContainer, classPrefix, data);\n const { itemSkeleton } = createItemSkeleton(this, legendItem);\n\n renderStepItem(this, itemSkeleton);\n legendContainer.selectAll('div').style('float', LEFT);\n firebolt.mapActionsAndBehaviour();\n firebolt.createSelectionSet(this.data().map(d => d.id));\n return legendContainer;\n }\n\n /**\n *\n *\n * @param {*} data\n * @returns\n * @memberof StepLegend\n */\n getCriteriaFromData (data) {\n const fieldName = this.fieldName();\n return {\n [fieldName]: data.range\n };\n }\n}\n","import { GradientLegend, DiscreteLegend, StepLegend } from '@chartshq/muze-legend';\n\n/**\n * Contants to be used as attr\n */\nexport const ROWS = 'rows';\nexport const COLUMNS = 'columns';\nexport const DATA = 'data';\nexport const COLOR = 'color';\nexport const SHAPE = 'shape';\nexport const SIZE = 'size';\nexport const DETAIL = 'detail';\nexport const LAYERS = 'layers';\nexport const TRANSFORM = 'transform';\nexport const INITIALIZED = 'isInitialized';\nexport const SOURCE = 'source';\nexport const WIDTH = 'width';\nexport const HEIGHT = 'height';\nexport const PADDING = 'padding';\nexport const BORDER = 'border';\nexport const MARGIN = 'margin';\nexport const CONFIG = 'config';\nexport const MOUNT = 'mount';\nexport const CANVAS_UPDATED = 'canvasUpdated';\nexport const CLASSPREFIX = 'classPrefix';\nexport const POLICIES = '_policies';\nexport const LEGEND = 'legend';\nexport const TITLE = 'title';\nexport const SUB_TITLE = 'subtitle';\nexport const RESOLVE = 'resolve';\nexport const DISCRETE = 'discrete';\nexport const STEP_COLOR = 'step-color';\nexport const GRADIENT = 'gradient';\nexport const LINEAR = 'linear';\nexport const ORDINAL = 'ordinal';\n\nexport const TITLE_TEMPLATE_NOT_ALLOWED_TAGS = [\n 'script',\n 'style'\n];\n\nexport const LEGEND_TYPE_MAP = {\n [`${ORDINAL}-${true}-${COLOR}`]: DiscreteLegend,\n [`${ORDINAL}-${true}-${SIZE}`]: DiscreteLegend,\n [`${ORDINAL}-${true}-${SHAPE}`]: DiscreteLegend,\n [`${ORDINAL}-${false}-${COLOR}`]: DiscreteLegend,\n [`${ORDINAL}-${false}-${SHAPE}`]: DiscreteLegend,\n [`${ORDINAL}-${false}-${SIZE}`]: DiscreteLegend,\n [`${LINEAR}-${false}-${SIZE}`]: DiscreteLegend,\n [`${LINEAR}-${true}-${SIZE}`]: DiscreteLegend,\n [`${LINEAR}-${false}-${SHAPE}`]: DiscreteLegend,\n [`${LINEAR}-${true}-${COLOR}`]: StepLegend,\n [`${LINEAR}-${false}-${COLOR}`]: GradientLegend\n};\n\nexport const LEFT = 'left';\nexport const RIGHT = 'right';\nexport const BOTTOM = 'bottom';\nexport const TOP = 'top';\nexport const GROUP = 'group';\nexport const LAYOUT = 'layout';\nexport const RETINAL = 'retinal';\nexport const DIMENSION = 'dimension';\nexport const MEASURE = 'measure';\nexport const VERTICAL = 'vertical';\nexport const HORIZONTAL = 'horizontal';\n\n","import { ComposedVars, SimpleVariable } from '@chartshq/visual-group';\nimport { TITLE_TEMPLATE_NOT_ALLOWED_TAGS } from './constants';\n\n/**\n * This method creates a new composed variable instance from multiple variables.\n * @param {Array} vars Variable names\n * @return {ComposedVars} Instance of composed variable\n */\nexport const share = (...vars) => new ComposedVars(...vars.map(variable => new SimpleVariable(variable)));\n\n/**\n *\n *\n * @param {*} node\n * @returns\n */\nfunction treeShakeNode (node) {\n if (node.nodeType !== Node.ELEMENT_NODE) { return; }\n\n if (TITLE_TEMPLATE_NOT_ALLOWED_TAGS.indexOf(node.tagName.toLowerCase()) !== -1) {\n node.parentNode.removeChild(node);\n } else {\n for (const childNode of node.childNodes) {\n treeShakeNode(childNode);\n }\n }\n}\n\n/**\n * A string template tagged function which sanitizes input html formatted\n * string according to the allowed html tags.\n *\n * @param {Array.} strings - The string parts of the template.\n * @param {Array} exps - The list of evaluated expression values.\n * @return {Function} Returns a function which returns the sanitized html string.\n */\nexport function html (strings, ...exps) {\n let htmlCode = '';\n const expLn = exps.length;\n let i = 0;\n\n for (; i < expLn; ++i) {\n htmlCode += strings[i] + exps[i];\n }\n htmlCode += strings[i];\n\n const frag = document.createDocumentFragment();\n const wrapper = document.createElement('div');\n\n frag.appendChild(wrapper);\n wrapper.innerHTML = htmlCode;\n\n treeShakeNode(wrapper);\n const { innerHTML } = wrapper;\n\n return () => innerHTML;\n}\n","import { mergeRecursive } from 'muze-utils';\n\nconst defaultPolicy = (registrableComponents) => {\n const aliases = registrableComponents.map(comp => comp.alias());\n return {\n behaviours: {\n '*': (propagationPayload) => {\n const propagationCanvas = propagationPayload.sourceCanvas;\n return propagationCanvas ? aliases.indexOf(propagationCanvas) !== -1 : true;\n }\n }\n };\n};\n\nclass ActionModel {\n constructor () {\n this._registrableComponents = [];\n }\n\n registerPhysicalActions (action) {\n const canvases = this._registrableComponents;\n\n canvases.forEach((canvas) => {\n canvas.once('canvas.updated').then((args) => {\n const matrix = args.client.composition().visualGroup.matrixInstance().value;\n matrix.each(cell => cell.valueOf().firebolt().registerPhysicalActions(action));\n });\n });\n return this;\n }\n\n registerBehaviouralActions (...actions) {\n const canvases = this._registrableComponents;\n\n canvases.forEach((canvas) => {\n canvas.once('canvas.updated').then(() => {\n const matrix = canvas.composition().visualGroup.matrixInstance().value;\n matrix.each(cell => cell.valueOf().firebolt().registerBehaviouralActions(...actions));\n });\n });\n return this;\n }\n\n /**\n *\n *\n * @param {*} map\n * @returns\n * @memberof ActionModel\n */\n registerPhysicalBehaviouralMap (map) {\n const canvases = this._registrableComponents;\n\n canvases.forEach((canvas) => {\n canvas.once('canvas.updated').then((args) => {\n const matrix = args.client.composition().visualGroup.matrixInstance().value;\n matrix.each(cell => cell.valueOf().firebolt().registerPhysicalBehaviouralMap(map));\n });\n });\n return this;\n }\n\n registerPropagationBehaviourMap (map) {\n const canvases = this._registrableComponents;\n\n canvases.forEach((canvas) => {\n canvas.once('canvas.updated').then((args) => {\n const matrix = args.client.composition().visualGroup.matrixInstance().value;\n matrix.each(cell => cell.valueOf().firebolt().registerPropagationBehaviourMap(map));\n });\n });\n return this;\n }\n\n mapSideEffects (map) {\n const canvases = this._registrableComponents;\n\n canvases.forEach((canvas) => {\n canvas.once('canvas.updated').then(() => {\n const matrix = canvas.composition().visualGroup.matrixInstance().value;\n matrix.each(cell => cell.valueOf().firebolt().mapSideEffects(map));\n });\n });\n return this;\n }\n\n for (...components) {\n this._registrableComponents = components;\n return this;\n }\n\n registerSideEffects (...sideEffects) {\n const registrableComponents = this._registrableComponents;\n\n registrableComponents.forEach((canvas) => {\n canvas.once('canvas.updated').then((args) => {\n const matrix = args.client.composition().visualGroup.matrixInstance().value;\n matrix.each(cell => cell.valueOf().firebolt().registerSideEffects(sideEffects));\n });\n });\n\n return this;\n }\n\n dissociateBehaviour (...maps) {\n const registrableComponents = this._registrableComponents;\n\n registrableComponents.forEach((canvas) => {\n canvas.once('canvas.updated').then((args) => {\n const matrix = args.client.composition().visualGroup.matrixInstance().value;\n matrix.each((cell) => {\n maps.forEach(val => cell.valueOf().firebolt().dissociateBehaviour(val[0], val[1]));\n });\n });\n });\n\n return this;\n }\n\n dissociateSideEffect (...maps) {\n const registrableComponents = this._registrableComponents;\n\n registrableComponents.forEach((canvas) => {\n canvas.once('canvas.updated').then((args) => {\n const matrix = args.client.composition().visualGroup.matrixInstance().value;\n matrix.each((cell) => {\n maps.forEach(val => cell.valueOf().firebolt().dissociateSideEffect(val[0], val[1]));\n });\n });\n });\n\n return this;\n }\n\n enableCrossInteractivity (policy = {}) {\n const registrableComponents = this._registrableComponents;\n const mergedPolicy = mergeRecursive(mergeRecursive({}, defaultPolicy(registrableComponents)), policy);\n\n registrableComponents.forEach((canvas) => {\n canvas.firebolt().crossInteractionPolicy(mergedPolicy);\n });\n\n return this;\n }\n}\n\nexport const actionModel = (() => new ActionModel())();\n","export const DEFAULT_CONFIG = {\n classPrefix: 'muze',\n interaction: {\n sideEffect: 'individual'\n },\n legend: {\n position: 'right',\n color: {\n show: true,\n padding: 1,\n margin: 3,\n border: 1,\n height: 20,\n width: 20\n },\n shape: {\n show: true,\n padding: 1,\n margin: 3,\n border: 1,\n height: 20,\n width: 20\n },\n size: {\n show: true,\n padding: 1,\n margin: 3,\n border: 1,\n height: 20,\n width: 20\n }\n },\n showHeaders: false,\n minWidth: 100,\n minHeight: 100,\n border: {\n style: 'solid',\n color: '#d6d6d6',\n width: 2,\n collapse: true,\n spacing: 0\n },\n autoGroupBy: {\n disabled: false\n }\n};\n","/**\n * @module\n * This is the global options semantics based on which setters getters are created and reactivity is initiated.\n * Format\n * PROPERTRY_NAME: {\n * value: // default value of the property,\n * meta: {\n * typeCheck: // The setter value will be checked using this. If the value is function then the setter value\n * // is passed as args.\n * typeExpected: // The output of typecheck action will be tested against this. Truthy value will set the\n * // value to the setter\n * sanitizaiton: // Need for sanitization before type is checked\n * }\n * }\n */\n\nimport { intSanitizer, mergeRecursive, DataModel } from 'muze-utils';\nimport { DEFAULT_CONFIG } from './defaults';\n\nexport default {\n data: {\n value: null,\n meta: {\n typeCheck: d => d instanceof DataModel\n }\n },\n width: {\n value: 0,\n meta: {\n sanitization: intSanitizer,\n typeCheck: Number.isInteger\n }\n },\n height: {\n value: 0,\n meta: {\n sanitization: intSanitizer,\n typeCheck: Number.isInteger\n }\n },\n minUnitWidth: {\n value: 50,\n meta: {\n sanitization: intSanitizer,\n typeCheck: Number.isInteger\n }\n },\n minUnitHeight: {\n value: 50,\n meta: {\n sanitization: intSanitizer,\n typeCheck: Number.isInteger\n }\n },\n config: {\n value: null,\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Object',\n sanitization: (config, oldConfig) => {\n const oldConf = mergeRecursive({}, oldConfig);\n const defConfig = mergeRecursive(oldConf, DEFAULT_CONFIG);\n const newConf = mergeRecursive(defConfig, config);\n return newConf;\n }\n\n }\n }\n};\n","/**\n * This file exports constants that will be used to\n * create the state store of the table layout.\n */\n/**\n * The index of top, bottom and center in the matrix\n */\nexport const VIEW_INDEX = {\n top: 0,\n center: 1,\n bottom: 2\n};\n\n/**\n * The width of the grid suppied by the user.\n */\nexport const GRID_WIDTH = 'width';\n\n/**\n * The height of the grid supplied by the user.\n */\nexport const GRID_HEIGHT = 'height';\n\n/**\n * The border for the grid\n */\nexport const BORDER = 'border';\n\n /**\n * The index of the first visible row in view matrix.\n */\nexport const ROW_POINTER = 'rowPointer';\n\n/**\n * The index of the first visible column in the view matrix.\n */\nexport const COLUMN_POINTER = 'columnPointer';\n\n/**\n * Flag to specify whether row sizes should be equal.\n */\nexport const ROW_SIZE_IS_EQUAL = 'isRowSizeEqual';\n\n/**\n * Flag to specify whether column sizes are equal.\n */\nexport const COLUMN_SIZE_IS_EQUAL = 'isColumnSizeEqual';\n\n/**\n * Field to store an array an of the widths of visible columns.\n * @computed\n */\nexport const COLUMN_WIDTHS = 'visibleColumnWidths';\n\n/**\n * Field to store an array of heights of visible rows.\n * @computed\n */\nexport const ROW_HEIGHTS = 'visibleRowHeights';\n\n/**\n * Field to store the width of the left matrix.\n * @computed\n */\nexport const LEFT_MATRIX_WIDTH = 'leftMatrixWidth';\n\n/**\n * Field to store the width of the right matrix.\n * @computed\n */\nexport const RIGHT_MATRIX_WIDTH = 'rightMatrixWidth';\n\n/**\n * Field to store the height of the top matrix.\n * @computed\n */\nexport const TOP_MATRIX_HEIGHT = 'topMatrixHeight';\n\n/**\n * Field to store the height of the bottom matrix.\n * @computed\n */\nexport const BOTTOM_MATRIX_HEIGHT = 'bottomMatrixHeight';\n\n/**\n * The dom element to render the layout inside.\n */\nexport const MOUNT_POINT = 'mount';\n\n/**\n * The id attribute of the left table element.\n */\nexport const LEFT_TABLE_ID = 'grid-left';\n\n/**\n * The id attribute of the right table element.\n */\nexport const RIGHT_TABLE_ID = 'grid-right';\n\n/**\n * The id attribute of the top table.\n */\nexport const TOP_TABLE_ID = 'grid-top';\n\n/**\n * The id attribute of the bottom table.\n */\nexport const BOTTOM_TABLE_ID = 'grid-bottom';\n\n/**\n * The id attribute of the center table.\n */\nexport const CENTER_TABLE_ID = 'grid-center';\n\n/**\n * The id attribute of the top div.\n */\nexport const TOP_DIV_ID = 'muze-div-top';\n\n/**\n * The id attribute of the bottom div.\n */\nexport const BOTTOM_DIV_ID = 'muze-div-bottom';\n\n/**\n * The id attribute of the center div.\n */\nexport const CENTER_DIV_ID = 'muze-div-center';\n\n/**\n * Field that indicates if the row configuration has changed\n */\nexport const HAVE_ROWS_CHANGED = 'haveRowsChanged';\n\n/**\n * Field that indicates if the column configuration has changed\n */\nexport const HAVE_COLUMNS_CHANGED = 'haveColumnsChanged';\n\n/**\n * Field that indicates if the values configuration for the center matrix has changed\n */\nexport const HAVE_VALUES_CHANGED = 'haveValuesChanged';\n\n/**\n * Field that indicates the width of row matrix\n */\nexport const ROW_MATRIX_WIDTH = 'rowMatrixWidth';\n\n/**\n * Field that indicates the height of row matrix\n */\nexport const COLUMN_MATRIX_HEIGHT = 'columnMatrixHeight';\n\n/**\n * Field that indicates the unit width of layout\n */\nexport const UNIT_WIDTH = 'unitWidth';\n\n/**\n * Field that indicates the unit height of layout\n */\nexport const UNIT_HEIGHT = 'unitHeight';\n\n/**\n * Field that indicates the style object\n */\nexport const STYLE = 'style';\n\n/**\n * Field that indicates the color configuration\n */\nexport const COLOR = 'color';\n\n/**\n * Field that indicates width\n */\nexport const WIDTH = 'width';\n\n/**\n * Field that indicates collpase property for border\n */\nexport const COLLAPSE = 'collapse';\n\n/**\n * Field that indicates spacing property for border\n */\nexport const SPACING = 'spacing';\n\n/**\n * Field that indicates spacing property for border\n */\nexport const DISTRIBUTION = 'distribution';\n\n/**\n * Field that indicates spacing property for border\n */\nexport const GUTTERSPACE = 'gutterSpace';\n\n/**\n * Field that indicates spacing property for border\n */\nexport const BREAK_PAGE = 'breakPage';\n\n/**\n * Field that indicates spacing property for border\n */\nexport const SHOW_ROW_BORDERS = 'showRowBorders';\n\n/**\n * Field that indicates spacing property for border\n */\nexport const SHOW_COL_BORDERS = 'showColBorders';\n\n/**\n * Field that indicates spacing property for border\n */\nexport const SHOW_VALUE_BORDERS = 'showValueBorders';\n\nexport const HEIGHT = 'height';\nexport const COLUMN = 'column';\nexport const ROW = 'row';\nexport const TOP = 'top';\nexport const LEFT = 'left';\nexport const RIGHT = 'right';\nexport const BOTTOM = 'bottom';\nexport const CENTER = 'center';\nexport const CLICK = 'click';\nexport const ROW_LEFT = 'rowLeft';\nexport const ROW_RIGHT = 'rowRight';\nexport const COLUMN_BOTTOM = 'colBottom';\nexport const COLUMN_TOP = 'colTop';\nexport const AUTO = 'auto';\nexport const ROW_SPAN = 'rowSpan';\nexport const COL_SPAN = 'colSpan';\nexport const ROW_ROOT = 'rowRoot';\nexport const COLUMN_ROOT = 'columnRoot';\nexport const PRIMARY = 'primary';\nexport const SECONDARY = 'secondary';\n","import { sanitizeIP, mergeRecursive } from 'muze-utils';\nimport { TOP, CENTER, BOTTOM } from '../enums/constants';\n\n/*\n * This is the abstract implementation of the root layout. This takes care of common work which all the layouts\n * has to handle. The common work includes sanitizaion of inputs, update, rerender, dispose etc. This class can't be\n * used directly (as ofcourse this is an abstract implementaiton), the class which is implementing it has to implement\n * the necessary methods and gives its on visual.\n */\n\n/**\n * This class is used to create a generic layout. It can be extended to create layouts\n * of different types\n * @class GenericLayout\n */\nexport default class GenericLayout {\n\n /**\n * Creates an instance of TableLayout.\n * @param {HTMLElement} mountPoint DOM element/d3 selection where the layout is to be mounted\n * @param {Object} measurement The dimensions of the layout\n * @param {Object} config configuration to be given for the layout\n * @param {Object} dependencies external dependencies.\n * @memberof GenericLayout\n *\n * measurement : {\n * width : number => width of the container\n * height : number => height of the container\n * unitHeight : number => height of unit of the cells\n * unitWidth : number => width of unit of the cells\n * }\n *\n */\n constructor (mountPoint, measurement, config, dependencies) {\n this._config = {};\n this._measurement = {};\n this._matrices = [];\n // External dependencies to be included for the layout. This includes the ext global dependencies like\n // smartlabel which has one single implementation of throughout the page or per isntance\n this._dependencies = dependencies;\n\n this.measurement(measurement);\n this.mountPoint(mountPoint);\n this.config(config);\n }\n\n /**\n * Returns an object which is used to recreate the layout.\n * @return {Object} the serialized components\n */\n serialize () {\n return {\n measurement: this.measurement(),\n config: this.config(),\n matrices: this.matrices()\n };\n }\n\n /**\n * Sets/Gets the config for the layout\n * @param {Object} config configuration for the layout\n * @return {Layout|Object} Gets the Config/ Returns this instance when set\n */\n config (config) {\n if (config) {\n this._config = mergeRecursive(this._config || {}, config);\n return this;\n }\n return this._config;\n }\n\n /**\n * Sets/Gets the measurement for the layout\n * @param {Object} measurement measurement for the layout\n * @return {Layout|Object} Gets the measurement/ Returns this instance when set\n */\n measurement (measurement) {\n if (measurement) {\n this._measurement = mergeRecursive(this._measurement || {}, measurement);\n\n return this;\n }\n return this._measurement;\n }\n\n /**\n * Sets/Gets the matrices for the layout\n * @param {Object} matrices matrices for the layout\n * @return {Layout|Object} Gets the matrices/ Returns this instance when set\n */\n matrices (matrices) {\n if (matrices) {\n this._matrices = sanitizeIP.typeObj([TOP, CENTER, BOTTOM], matrices);\n\n return this;\n }\n return this._matrices;\n }\n\n /**\n * Sets/Gets the matrix for row\n * @param {Object} matrix matrices for the layout\n * @return {Layout|Object} Gets the matrix/ Returns this instance when set\n */\n rowMatrix (matrix) {\n if (matrix) {\n this._rowMatrix = matrix;\n return this;\n }\n return this._rowMatrix;\n }\n\n /**\n * Sets/Gets the matrix for columns\n * @param {Object} matrix matrices for the layout\n * @return {Layout|Object} Gets the matrix/ Returns this instance when set\n */\n columnMatrix (matrix) {\n if (matrix) {\n this._columnMatrix = matrix;\n return this;\n }\n return this._columnMatrix;\n }\n\n /**\n * Sets/Gets the matrix for value\n * @param {Object} matrix matrices for the layout\n * @return {Layout|Object} Gets the matrix/ Returns this instance when set\n */\n centerMatrix (matrix) {\n if (matrix) {\n this._centerMatrix = matrix;\n return this;\n }\n return this._centerMatrix;\n }\n\n /**\n * Sets/Gets the mountPoint for the layout\n * @param {Object} mountPoint mountPoint for the layout\n * @return {Layout|Object} Gets the mountPoint/ Returns this instance when set\n */\n mountPoint (mountPoint) {\n if (mountPoint) {\n this._mountPoint = mountPoint;\n\n return this;\n }\n return this._mountPoint;\n }\n}\n","import * as FieldNames from '../enums/constants';\n\n/**\n * Default configuration of the layout\n * @return {Object} returns the default configuration\n */\nexport const DEFAULT_CONFIGURATION = {\n [FieldNames.BORDER]: {\n [FieldNames.STYLE]: 'solid',\n [FieldNames.COLOR]: '#d6d6d6',\n [FieldNames.WIDTH]: 2,\n [FieldNames.COLLAPSE]: true,\n [FieldNames.SPACING]: 0\n },\n [FieldNames.GUTTERSPACE]: { rows: [], columns: [] },\n [FieldNames.DISTRIBUTION]: { rows: [], columns: [] },\n [FieldNames.BREAK_PAGE]: { rows: [], columns: [] },\n [FieldNames.ROW_SIZE_IS_EQUAL]: false,\n [FieldNames.COLUMN_SIZE_IS_EQUAL]: false,\n [FieldNames.COLUMN_POINTER]: 0,\n [FieldNames.ROW_POINTER]: 0\n};\n\n/**\n * Default measurements for the layout\n * @return {Object} returns the default measurements\n */\nexport const DEFAULT_MEASUREMENTS = {\n [FieldNames.GRID_WIDTH]: 100,\n [FieldNames.GRID_HEIGHT]: 100,\n [FieldNames.UNIT_WIDTH]: 100,\n [FieldNames.UNIT_HEIGHT]: 100\n};\n\nexport const BLANK_BORDERS = 'rgba(0,0,0,0)';\n","import { ROW_LEFT, ROW_RIGHT, COLUMN_BOTTOM, COLUMN_TOP, TOP, BOTTOM } from '../enums/constants';\n/**\n * This callback is used to filter the array of\n * placeholder cells and filter out cells which have\n * appeared in a previous row.\n *\n * @param {Placeholder} colData Instance of placeholder.\n * @param {number} colIdx The index of the placeholder in array.\n * @param {Array} matrix The 2d array for which filtering is to be done\n * @param {number} rIdx The index of the row of the placeholder in array.\n * @param {string} type The type of matrix it is (rowLeft, rowRight, colTop, colBottom)\n * @return {boolean} flag to keep/remove element.\n */\nconst columnFilter = (colData, colIdx, matrix, rIdx, type) => {\n const previousRow = matrix[rIdx - 1];\n const currentRow = matrix[rIdx];\n\n // Row Span for left\n if (type === ROW_LEFT) {\n if (!previousRow) {\n return colData;\n }\n let i = 0;\n for (;i <= colIdx; i += 1) {\n if (currentRow[i].valueOf() !== previousRow[i].valueOf()) {\n break;\n }\n }\n return (i - 1 === colIdx) ? null : colData;\n } else if (type === ROW_RIGHT) {\n if (!previousRow || colIdx === 0) {\n return colData;\n }\n let j = colIdx;\n for (; j < currentRow.length; j += 1) {\n if (previousRow[j].valueOf() !== currentRow[j].valueOf()) {\n break;\n }\n }\n return (j === currentRow.length) ? null : colData;\n } else if (type === COLUMN_BOTTOM) {\n if (rIdx === 0) {\n return colData;\n }\n const prevCell = currentRow[colIdx - 1];\n if (prevCell) {\n if (prevCell.valueOf() === colData.valueOf()) {\n const nextRow = matrix[rIdx + 1];\n if (!nextRow) {\n return null;\n }\n if (nextRow[colIdx].valueOf() === nextRow[colIdx - 1].valueOf()) {\n return null;\n }\n return colData;\n }\n return colData;\n }\n return colData;\n } else if (type === COLUMN_TOP) {\n if (rIdx === matrix.length - 1 && matrix.length > 1) {\n return colData;\n }\n const prevCell = currentRow[colIdx - 1];\n if (prevCell && (prevCell.valueOf() === colData.valueOf())) {\n const prevRow = matrix[rIdx - 1];\n if (prevRow) {\n if (prevRow[colIdx].valueOf() === prevRow[colIdx - 1].valueOf()) {\n return null;\n }\n return colData;\n }\n return null;\n }\n return colData;\n }\n return colData;\n};\n\n/**\n * This callback is used to calculate the rowspan\n * by checking for repeating entries in subsequent rows\n * at the specified column.\n *\n * @param {Placeholder} colData Instance of placeholder.\n * @param {number} colIdx The index of the placeholder in the array.\n * @param {Array} matrix The 2d array for which filtering is to be done\n * @param {number} rIdx The index of the row of the placeholder in array.\n * @return {number} The row span.\n */\nconst calcRowSpan = (colData, colIdx, matrix, rIdx) => {\n let count = 1;\n // if data is not header cell then rowspan\n // has to be 1\n if (!colData || typeof colData.valueOf() !== 'string') {\n return 1;\n }\n let isNull = false;\n while (!isNull) {\n if (matrix[rIdx + count] && matrix[rIdx + count][colIdx] === null) {\n count += 1;\n } else {\n isNull = true;\n }\n }\n return count;\n};\n/**\n * This callback is used to calculate the rowspan\n * by checking for repeating entries in subsequent rows\n * at the specified column.\n *\n * @param {Placeholder} colData Instance of placeholder.\n * @param {number} colIdx The index of the placeholder in the array.\n * @param {Array} matrix The 2d array for which filtering is to be done\n * @param {number} rIdx The index of the row of the placeholder in array.\n * @return {number} The row span.\n */\nconst calcColSpan = (colData, colIdx, matrix, rIdx) => {\n let count = 1;\n // if data is not header cell then rowspan\n // has to be 1\n if (!colData || typeof colData.valueOf() !== 'string') {\n return 1;\n }\n let isNull = false;\n while (!isNull) {\n if (matrix[rIdx][colIdx + count] === null) {\n count += 1;\n } else {\n isNull = true;\n }\n }\n return count;\n};\n\n// create a masking matrix to strip out repeating columns\n// and calculate rowspan.\nconst mask = function (matrix, type) {\n return matrix.map((row, rIdx) => {\n if (type === ROW_LEFT || type === ROW_RIGHT) {\n const filteredRow = row.map((col, colIndex) => columnFilter(col, colIndex, matrix, rIdx, type));\n const temp = [];\n const diff = row.length - filteredRow.length;\n for (let i = 0; i < diff; i += 1) {\n temp.push(null);\n }\n if (type === ROW_RIGHT) {\n temp.unshift(...filteredRow);\n return temp;\n }\n temp.push(...filteredRow);\n return temp;\n }\n\n const filteredRow = row.map((col, colIndex) => columnFilter(col, colIndex, matrix, rIdx, type));\n const temp = [];\n temp.push(...filteredRow);\n return temp;\n });\n};\n\n/**\n * This function is used to set the col and row spans\n * for the matrices based on repeated/hierarchichal data\n *\n * @export\n * @param {Array} matrix The 2d array for which filtering is to be done\n * @param {string} type Type of array (center, top, bottom)\n * @param {number} index Index of array in the row\n * @return {Object} containing the view matrix and their spans\n */\nexport function cellSpanMaker (matrix, type, index) {\n let span = '';\n if (type === TOP || type === BOTTOM) {\n span = type === TOP ? COLUMN_TOP : COLUMN_BOTTOM;\n const viewMatrix = mask(matrix, span);\n const spans = viewMatrix.map((row, ridx) => row.map((col, i) => calcColSpan(col, i, viewMatrix, ridx))\n .filter(col => col !== 1));\n return { viewMatrix, spans };\n } else if (index === 0 || index === 2) {\n span = index === 0 ? ROW_LEFT : ROW_RIGHT;\n const viewMatrix = mask(matrix, span);\n const spans = [];\n viewMatrix.forEach((row, ridx) => {\n spans[ridx] = spans[ridx] || [];\n row.forEach((col, i) => {\n if (viewMatrix[ridx][i]) {\n const currSpan = calcRowSpan(col, i, viewMatrix, ridx);\n currSpan && spans[ridx].push(currSpan);\n }\n });\n });\n return { viewMatrix, spans };\n }\n return { viewMatrix: matrix };\n}\n","import { makeElement, selectElement } from 'muze-utils';\nimport { cellSpanMaker } from './span-maker';\nimport {\n TOP, LEFT, RIGHT, BOTTOM, CENTER, WIDTH, ROW_SPAN, COL_SPAN\n} from '../enums/constants';\nimport { BLANK_BORDERS } from './defaults';\n\n/**\n * Creates a table element of the layout\n *\n * @param {Object} mount Mount point for table elements\n * @param {string} className defines class name\n * @param {Array} rowData set of rows for the table\n * @return {Selection} set of selections for the table\n */\nfunction renderTable (mount, className, rowData) {\n const table = makeElement(mount, 'table', ['layout'], `${className}-table`);\n const body = makeElement(table, 'tbody', ['layout'], `${className}-body`);\n const rows = makeElement(body, 'tr', rowData, `${className}-tr`);\n const cells = makeElement(rows, 'td', (d, i) => d.filter(e => e !== null && e.config().show).map(e =>\n ({ placeholder: e, rowIndex: i })), `${className}-td`, {}, key => key.placeholder.id);\n\n return { table, body, rows, cells };\n}\n\nfunction applyRowBorders (cells, borderStyle, showBorders, color) {\n [TOP, BOTTOM].forEach((borderType) => {\n const style = `${borderStyle} ${showBorders[borderType] ? color : BLANK_BORDERS}`;\n cells.style(`border-${borderType}`, style);\n });\n}\n\nfunction applyColBorders (cells, borderStyle, showBorders, color) {\n [LEFT, RIGHT].forEach((borderType) => {\n const style = `${borderStyle} ${showBorders[borderType] ? color : BLANK_BORDERS}`;\n cells.style(`border-${borderType}`, style);\n });\n}\n\n/**\n * Applies borders to the cells in a matrix\n *\n * @param {Selection} cells Set of cells made from the matrix\n * @param {Object} border Border info for layout\n * @param {string} type Type of matrix(top/center/bottom)\n * @param {number} index Column index of matrix in the row\n */\nfunction applyBorders (cells, border, type, index) {\n const {\n width,\n style,\n color,\n showRowBorders,\n showColBorders,\n showValueBorders\n } = border;\n const borderStyle = `${width}px ${style}`;\n\n if (type === CENTER && index === 1) {\n [TOP, BOTTOM, LEFT, RIGHT].forEach((borderType) => {\n cells.style(`border-${borderType}`, `${borderStyle} ${showValueBorders[borderType] ?\n color : BLANK_BORDERS}`);\n });\n } else if (type === CENTER) {\n applyRowBorders(cells, borderStyle, showRowBorders, color);\n } else if (index === 1) {\n applyColBorders(cells, borderStyle, showColBorders, color);\n }\n}\n\n/**\n * Renders a set of matrices in a row\n *\n * @param {Array} matrices Set of matrices in a row\n * @param {Selection} mountPoint Mount point for the row\n * @param {string} type top/center/bottom\n * @param {Object} dimensions dimensions of the matrix\n */\nfunction renderMatrix (matrices, mountPoint, type, dimensions, classPrefix) {\n matrices.forEach((matrix, index) => {\n // Creating containers for each matrix individually\n const containerForMatrix = makeElement(mountPoint, 'div', [1], `${classPrefix}-grid-${type}-${index + 1}`)\n .classed(`${classPrefix}-grid-${type}`, true)\n .classed(`${classPrefix}-grid`, true);\n\n const {\n viewMatrix,\n spans\n } = cellSpanMaker(matrix, type, index);\n\n // Rendering the table components\n const { cells } = renderTable(containerForMatrix, `${classPrefix}-grid`, viewMatrix);\n\n if (type === CENTER && spans) {\n cells.attr(ROW_SPAN, function (cell, colIndex) {\n const placeholder = cell.placeholder;\n selectElement(this).style('height', `${placeholder.availHeight() + dimensions.border.width}px`);\n return spans[cell.rowIndex][colIndex];\n });\n } else if ((type === TOP || type === BOTTOM) && index === 1) {\n cells.attr(COL_SPAN, function (cell, colIndex) {\n const span = spans[cell.rowIndex][colIndex];\n const placeholder = cell.placeholder;\n if (span > 1) {\n placeholder.setAvailableSpace(0, placeholder.availHeight());\n }\n selectElement(this).style('height', `${placeholder.availHeight()}px`);\n return span;\n });\n }\n // Rendering content within placeholders\n cells.each(function (cell) {\n cell.placeholder && cell.placeholder.render(this);\n }).exit().each((cell) => {\n cell.placeholder && cell.placeholder.remove();\n });\n\n applyBorders(cells, dimensions.border, type, index);\n });\n}\n\n/**\n * Renders all the matrices of the layout\n *\n * @export\n * @param {Array} matrices Set of matrices in the layout\n * @param {Array} mountPoints Mount points for each row of matrix\n * @param {Array} layoutDimensions Dimensions(height/width) of all the matrices\n */\nexport function renderMatrices (context, matrices, layoutDimensions) {\n const {\n top,\n center,\n bottom\n } = matrices;\n const {\n classPrefix\n } = context.config();\n const {\n width\n } = context.measurement();\n const mount = context.mountPoint();\n\n const data = [\n { type: TOP, matrix: top },\n { type: CENTER, matrix: center },\n { type: BOTTOM, matrix: bottom }\n ];\n makeElement(mount, 'div', data, `${classPrefix}-grid-layout-row`)\n .each(function (d, i) {\n const row = selectElement(this);\n row.classed(`${classPrefix}-grid-layout-row-${i}`, true);\n renderMatrix(d.matrix, row, d.type, layoutDimensions, classPrefix);\n })\n .style(WIDTH, `${Math.ceil(width)}px`);\n}\n","/**\n * This file exports utility functions that are used across the layout module\n */\nimport { Symbols } from 'muze-utils';\nimport { PRIMARY, SECONDARY, HEIGHT, WIDTH } from '../enums/constants';\n\nconst nest = Symbols.nest;\n/**\n *\n *\n * @param {*} isTransposed\n * @returns\n */\nconst getMeasureInfo = (isTransposed) => {\n if (isTransposed) {\n return {\n firstMeasure: HEIGHT,\n secondMeasure: WIDTH\n };\n }\n return {\n firstMeasure: WIDTH,\n secondMeasure: HEIGHT\n };\n};\n\n/**\n *\n *\n * @param {*} i\n * @param {*} page\n * @returns\n */\nconst findInPage = (i, page) => {\n let count = 0;\n for (const x in page) {\n if (i < page[x]) {\n count = x;\n break;\n }\n }\n return count;\n};\n\n/**\n * Creates a single matrix from two matrices\n *\n * @param {Array} matrix Input matrix\n * @return {Array} Joined matrix\n * @memberof VisualMatrix\n */\nexport const combineMatrices = (matrix, config) => {\n const { isTransposed } = config;\n let joinedMatrix = matrix[0].length > 0 ? matrix[0] : matrix[1];\n if (isTransposed) {\n joinedMatrix = matrix[0].length > 0 ? [...matrix[0]] : [];\n joinedMatrix = matrix[1].length > 0 ? [...joinedMatrix, ...matrix[1]] : joinedMatrix;\n } else {\n joinedMatrix = joinedMatrix.map((row, rowIndex) => {\n let rowData = [];\n if (matrix[0].length > 0) {\n rowData = [...matrix[0][rowIndex]];\n }\n if (matrix[1].length > 0) {\n rowData = [...rowData, ...matrix[1][rowIndex]];\n }\n return rowData;\n });\n }\n return joinedMatrix;\n};\n\n/**\n * Creates a hirachical tree from the context\n *\n * @param {Object} context context for creating tree\n * @return {Object} nested tree\n */\nexport const createTree = (context) => {\n let matrixTree = {};\n let lastLevelKey = 0;\n let facet = PRIMARY;\n const nestFn = nest();\n const keys = [];\n const layoutMatrix = context._layoutMatrix;\n const primaryMatrix = context.primaryMatrix();\n const secondaryMatrix = context.secondaryMatrix();\n const { isTransposed, breakPage } = context.config();\n\n if (!isTransposed) {\n if (primaryMatrix.length === 0) {\n facet = PRIMARY;\n } else if (secondaryMatrix.length === 0) {\n facet = SECONDARY;\n } else {\n facet = primaryMatrix.length >= secondaryMatrix.length ? PRIMARY : SECONDARY;\n }\n if (primaryMatrix.length > 0) {\n for (let i = 0; i < primaryMatrix[0].length - 1; i++) {\n keys.push(i);\n }\n keys.push(primaryMatrix[0].length - 1);\n if (facet === SECONDARY || secondaryMatrix.length === 0) {\n lastLevelKey = primaryMatrix[0].length - 1;\n }\n }\n if (secondaryMatrix.length > 0) {\n const keyLength = primaryMatrix.length > 0 ? primaryMatrix[0].length : 0;\n for (let i = secondaryMatrix[0].length - 1; i > 0; i--) {\n keys.push(i + keyLength);\n }\n keys.push(keyLength);\n\n if (facet === PRIMARY) {\n lastLevelKey = keyLength;\n }\n } else {\n lastLevelKey = primaryMatrix.length > 0 ? primaryMatrix[0].length - 1 : 0;\n }\n keys.forEach((key) => {\n let counter = -1;\n return nestFn.key((d) => {\n counter++;\n return `${d[key].valueOf()}-${findInPage(counter, breakPage)}`;\n });\n });\n matrixTree = nestFn.entries(layoutMatrix);\n } else {\n if (primaryMatrix.length === 0) {\n facet = PRIMARY;\n } else if (secondaryMatrix.length === 0) {\n facet = SECONDARY;\n } else {\n facet = primaryMatrix.length >= secondaryMatrix.length ? PRIMARY : SECONDARY;\n }\n if (primaryMatrix.length > 0) {\n for (let i = 0; i < primaryMatrix.length - 1; i++) {\n keys.push(i);\n }\n // if (facet === PRIMARY) {\n keys.push(primaryMatrix.length - 1);\n // } else {\n if (facet === SECONDARY) {\n lastLevelKey = primaryMatrix.length - 1;\n }\n }\n if (secondaryMatrix.length > 0) {\n const primaryMatrixLength = primaryMatrix.length;\n for (let i = secondaryMatrix.length - 1; i > 0; i--) {\n keys.push(i + primaryMatrixLength);\n }\n // if (facet === SECONDARY) {\n keys.push(primaryMatrixLength);\n // }\n if (facet === PRIMARY) {\n lastLevelKey = primaryMatrixLength;\n }\n }\n keys.forEach((key) => {\n let counter = -1;\n return nestFn.key((d) => {\n counter++;\n return `${d[key].valueOf()}-${findInPage(counter, breakPage)}`;\n });\n });\n let newMatrix = [];\n newMatrix = layoutMatrix[0].map((col, colIndex) => layoutMatrix.map(row => row[colIndex]));\n matrixTree = nestFn.entries(newMatrix);\n }\n return { tree: matrixTree, lastLevelKey };\n};\n\n/**\n * Gives the min measues\n *\n * @param {boolean} isTransposed is column matrix\n * @param {Object} unitMeasures min measures to be given to cells\n * @return {Object} dimension min cell\n */\nexport const getMinMeasures = (isTransposed, unitMeasures) => {\n if (!isTransposed) {\n return {\n height: unitMeasures.height,\n width: 0\n };\n }\n return {\n height: 0,\n width: unitMeasures.width\n };\n};\n\n/**\n * Get the logical space from the tree\n *\n * @param {Node} item tree to be calculated\n * @param {number} measures width and height\n * @param {Array} minMeasures min measures for a cell\n * @param {Array} maxMeasure max measures for a col/row\n * @return {Object} dimension\n */\nexport const getLogicalSpace = (item, measures, minMeasures, maxMeasure = []) => {\n const { firstMeasure, secondMeasure } = measures;\n let firstMeasureValue = 0;\n let secondMeasureValue = 0;\n item.values.forEach((valueArray) => {\n let fMeasure = 0;\n let sMeasure = 0;\n valueArray.forEach((placeholder, colIndex) => {\n placeholder.logicalSpace(null);\n const space = placeholder.getLogicalSpace();\n sMeasure = Math.max(sMeasure, +space[secondMeasure], minMeasures[secondMeasure]);\n maxMeasure[colIndex] = Math.max(maxMeasure[colIndex] || 0, space[firstMeasure]);\n fMeasure += +maxMeasure[colIndex];\n });\n secondMeasureValue += sMeasure;\n firstMeasureValue = Math.max(firstMeasureValue, fMeasure);\n item.space = {\n [secondMeasure]: Math.ceil(secondMeasureValue),\n [firstMeasure]: Math.ceil(firstMeasureValue)\n };\n });\n return {\n [secondMeasure]: secondMeasureValue,\n [firstMeasure]: firstMeasureValue\n };\n};\n\n/**\n * Computes the logical spcae taken by the matrix tree\n *\n * @param {*} [item={}] tree to be viewed\n * @param {boolean} [isTransposed=false] is column matrix\n * @param {*} unitMeasures min measues for a cell\n * @param {Array} maxMeasure max measures for a col/row\n * @return {Object} logical space taken\n */\nexport const computeLogicalSpace = (item = {}, config, maxMeasures) => {\n const { isTransposed = false, unitMeasures } = config;\n const { firstMeasure, secondMeasure } = getMeasureInfo(isTransposed);\n const { values } = item;\n const minMeasures = getMinMeasures(isTransposed, unitMeasures);\n if (values[0].key) {\n const logicalSpace = { [firstMeasure]: 0, [secondMeasure]: 0 };\n\n values.forEach((valueItem) => {\n // Compute logical space for lowest level\n const space = computeLogicalSpace(valueItem, config, maxMeasures);\n // Set logical space for first measure\n logicalSpace[firstMeasure] = Math.max(logicalSpace[firstMeasure], space[firstMeasure],\n minMeasures[firstMeasure]);\n // Set logical space for second measure\n logicalSpace[secondMeasure] += +space[secondMeasure];\n });\n item.space = logicalSpace;\n return logicalSpace;\n }\n return getLogicalSpace(item, { firstMeasure, secondMeasure }, minMeasures, maxMeasures);\n};\n\n/**\n * Gives the space taken by a row\n *\n * @param {Array} row matrix array of rows\n * @return {Object} dimension of the row\n */\nexport const spaceTakenByRow = (row) => {\n let height = 0;\n let width = 0;\n row.forEach((col) => {\n const spaces = col.getLogicalSpace();\n height = Math.max(height, spaces.height);\n width += spaces.width;\n });\n return {\n width,\n height\n };\n};\n\n/**\n * Gives the space taken by a column\n *\n * @param {Array} matrix column matrix\n * @param {number} colIndex column index\n * @return {Object} dimension of the column\n */\nexport const spaceTakenByColumn = (matrix, colIndex) => {\n let height = 0;\n let width = 0;\n matrix.forEach((row) => {\n const col = row[colIndex];\n const spaces = col.getLogicalSpace();\n width = Math.max(width, spaces.width);\n height += spaces.height;\n });\n return {\n width,\n height\n };\n};\n\n/**\n * Creates different level matrices\n *\n * @param {Object} item matrix tree\n * @param {boolean} isTransposed is column matrix\n * @return {Object} matrix of each level\n */\nexport const createMatrixEachLevel = (item, isTransposed) => {\n if (item.values[0].key) {\n const arr = [];\n item.values.forEach((child) => {\n if (!isTransposed) {\n arr.push(...createMatrixEachLevel(child, isTransposed));\n } else {\n const eachLevel = createMatrixEachLevel(child, isTransposed);\n eachLevel.forEach((e, i) => {\n arr[i] = arr[i] || [];\n arr[i].push(...e);\n });\n }\n });\n item.matrix = arr;\n return arr;\n }\n if (!isTransposed) {\n item.matrix = item.values;\n } else {\n item.matrix = item.values[0].map((col, colIndex) => item.values.map(row => row[colIndex]));\n }\n return item.matrix;\n};\n\n/**\n * Breaks the matrix into two part\n *\n * @param {Array} matrix input matrix\n * @param {boolean} isTransposed is column matrix\n * @param {number} breakPointer point in matrix where it is to be broken\n * @return {Array} two broken matrix\n */\nexport const breakMatrix = (matrix, isTransposed, breakPointer) => {\n const primaryMatrix = [];\n const secondaryMatrix = [];\n if (isTransposed) {\n matrix.forEach((row, rowIndex) => {\n if (rowIndex >= breakPointer) {\n secondaryMatrix.push(row);\n } else {\n primaryMatrix.push(row);\n }\n });\n } else {\n matrix.forEach((row, rowIndex) => {\n row.forEach((column, columnIndex) => {\n if (columnIndex >= breakPointer) {\n secondaryMatrix[rowIndex] = secondaryMatrix[rowIndex] || [];\n secondaryMatrix[rowIndex].push(column);\n } else {\n primaryMatrix[rowIndex] = primaryMatrix[rowIndex] || [];\n primaryMatrix[rowIndex].push(column);\n }\n });\n });\n }\n return [primaryMatrix, secondaryMatrix];\n};\n\n/**\n * Distributed width returned\n *\n * @param {Object} context context for the width distibution\n * @return {number} distributed widths\n */\nexport const getDistributedWidth = (context, layoutConfig) => {\n const {\n availableWidth,\n width,\n row\n } = context;\n const {\n isDistributionEqual,\n isTransposed,\n distribution\n } = layoutConfig;\n let distSum = 0;\n if (distribution && distribution[0]) {\n distSum = distribution.reduce((t, n) => {\n t += n;\n return t;\n });\n }\n return row.map((col, colIndex) => {\n const space = col.getLogicalSpace().width;\n let distWidth = (space + (availableWidth - width) * (space / width));\n if (isTransposed) {\n if (distribution.length > 0) {\n distWidth = (availableWidth * distribution[colIndex] / distSum);\n } else if (isDistributionEqual || width === 0) {\n const rowLen = row.length;\n distWidth = (availableWidth / rowLen);\n }\n }\n return Math.floor(distWidth);\n });\n};\n\n/**\n * Distributeed heights returned\n *\n * @param {Object} context input for the height distribution\n * @return {Object} distribured heights\n */\nexport const getDistributedHeight = (context) => {\n let distSum = 0;\n let gutterSum = 0;\n let heightWithoutGutter = 0;\n const {\n isTransposed,\n distribution,\n availableHeight,\n height,\n isDistributionEqual,\n gutter,\n matrix,\n cIdx\n } = context;\n\n if (distribution && distribution[0] !== undefined) {\n distSum = distribution.reduce((t, n) => {\n t += n;\n return t;\n });\n }\n if (gutter && gutter[0] !== undefined) {\n gutterSum = gutter.reduce((t, n) => {\n t += n;\n return t;\n });\n }\n heightWithoutGutter = availableHeight - Math.floor(availableHeight * gutterSum);\n\n const colLen = matrix.length;\n return matrix.map((row, rIdx) => {\n const col = row[cIdx];\n const space = col.getLogicalSpace().height;\n let distHeight = (space + (heightWithoutGutter - height) * (space / height));\n\n if (!isTransposed) {\n if (distribution.length > 0 && colLen === distribution.length) {\n distHeight = (heightWithoutGutter * distribution[rIdx] / distSum);\n } else if (isDistributionEqual || context.height === 0) {\n distHeight = (heightWithoutGutter / colLen);\n }\n }\n return Math.floor(distHeight);\n });\n};\n\n/**\n *\n *\n * @param {*} arr\n * @param {*} beg\n * @param {*} end\n */\nexport const extraCellsRemover = (arr, beg, end) => arr.slice(beg, -end);\n\n/**\n * Creates matrix instancess\n *\n * @param {Array} [arr=[]] mutated arry\n * @param {number} depth depth of the tree\n * @param {Array} matrixInfo Details about the matrix(tree, etc) to be inserted\n * @param {boolean} layout Instance of layout\n */\nexport const createMatrixInstances = (arr = [], depth, matrixInfo, layout) => {\n const breakPointer = layout._breakPointer;\n const config = layout.config();\n const {\n isTransposed\n } = config;\n const {\n tree,\n layoutMatrix\n } = matrixInfo;\n\n if (depth === 0) {\n const brokenMatrix = breakMatrix(tree.matrix, isTransposed, breakPointer);\n arr.push({\n matrix: tree.matrix,\n primaryMatrix: brokenMatrix[0],\n secondaryMatrix: brokenMatrix[1],\n space: tree.space\n });\n return arr;\n }\n const nextLevel = depth - 1;\n tree.values.forEach((e) => {\n createMatrixInstances(arr, nextLevel, {\n tree: e,\n layoutMatrix\n }, layout);\n });\n return arr;\n};\n","import { mergeRecursive } from 'muze-utils';\n\nexport const PROPS = {\n config: {\n sanitization: (context, value) => mergeRecursive(context._config || {}, value)\n },\n maxMeasures: {},\n availableSpace: {},\n logicalSpace: {}\n};\n","import { PRIMARY } from '../enums/constants';\n/**\n *\n *\n */\nexport const defaultConfig = {\n distribution: [],\n classPrefix: 'muze',\n isDistributionEqual: true,\n unitMeasures: {\n height: 100,\n width: 100,\n border: 1\n },\n isTransposed: false,\n facet: PRIMARY,\n extraCellLengths: []\n};\n","import { mergeRecursive, generateGetterSetters } from 'muze-utils';\nimport {\n createTree,\n extraCellsRemover,\n combineMatrices,\n spaceTakenByColumn,\n getDistributedHeight,\n getDistributedWidth,\n spaceTakenByRow,\n computeLogicalSpace,\n createMatrixEachLevel,\n createMatrixInstances\n } from '../utils';\nimport { PROPS } from './props';\nimport { COLUMN_ROOT, ROW_ROOT, HEIGHT, WIDTH } from '../enums/constants';\nimport { defaultConfig } from './default-config';\n\n/**\n * This class used to create column / row matrix for GridLayout\n *\n * @class VisualMatrix\n */\nexport default class VisualMatrix {\n\n /**\n *Creates an instance of VisualMatrix.\n * @param {any} matrix Two set of matrices\n * @param {any} [config={}] Configuration for VisualMatrix\n * @memberof VisualMatrix\n */\n constructor (matrix, config = {}) {\n // Prepare matrices\n this._lastLevelKey = 0;\n this._primaryMatrix = matrix[0] || [];\n this._secondaryMatrix = matrix[1] || [];\n this._maxMeasures = [];\n this._availableSpace = {};\n\n // Store the config\n generateGetterSetters(this, PROPS);\n const defCon = Object.assign({}, this.constructor.defaultConfig());\n this.config(mergeRecursive(defCon, config));\n\n this._breakPointer = this.config().isTransposed ? matrix[0].length :\n (matrix[0].length > 0 ? matrix[0][0].length : 0);\n this._layoutMatrix = combineMatrices([matrix[0] || [], matrix[1] || []], this.config());\n\n // Create Tree\n this._tree = {\n key: this.config().isTransposed ? COLUMN_ROOT : ROW_ROOT,\n values: this.createTree()\n };\n this._logicalSpace = this.setLogicalSpace();\n }\n\n /**\n *\n *\n * @param {*} params\n * @returns\n * @memberof VisualMatrix\n */\n primaryMatrix (...params) {\n if (params.length) {\n return this;\n }\n return this._primaryMatrix;\n }\n\n /**\n *\n *\n * @param {*} params\n * @returns\n * @memberof VisualMatrix\n */\n secondaryMatrix (...params) {\n if (params.length) {\n return this;\n }\n return this._secondaryMatrix;\n }\n\n /**\n *\n *\n * @param {*} params\n * @returns\n * @memberof VisualMatrix\n */\n tree (...params) {\n if (params.length) {\n return this;\n }\n return this._tree;\n }\n\n /**\n *\n *\n * @static\n * @return\n * @memberof VisualMatrix\n */\n static defaultConfig () {\n return defaultConfig;\n }\n\n /**\n *\n *\n * @return\n * @memberof VisualMatrix\n */\n createTree () {\n const { tree, lastLevelKey } = createTree(this);\n this._lastLevelKey = lastLevelKey;\n return tree;\n }\n\n /**\n * Computes the logical space taken by the entire matrixTree\n *\n * @return {Object} Logical space taken\n * @memberof VisualMatrix\n */\n setLogicalSpace () {\n const {\n isTransposed\n } = this.config();\n const matrixTree = this.tree();\n createMatrixEachLevel(matrixTree, isTransposed);\n return computeLogicalSpace(matrixTree, this.config(), this.maxMeasures());\n }\n\n /**\n * Returns the space taken by visual matrix\n *\n * @return {Object} space taken by the matrix\n * @memberof VisualMatrix\n */\n getLogicalSpace () {\n return this.logicalSpace();\n }\n\n /**\n * Sets the provied space to the visual matrix\n *\n * @param {number} width width provided\n * @param {number} height height provided\n * @memberof VisualMatrix\n */\n setAvailableSpace (width, height) {\n this.availableSpace({ width, height });\n const tree = this.tree();\n const heightMeasures = this.populateMaxMeasures(HEIGHT, tree);\n const widthMeasures = this.populateMaxMeasures(WIDTH, tree);\n const depth = this.calculateDepth(widthMeasures, heightMeasures);\n\n this.viewableMatrix = this.createViewPortMatrix(depth);\n this.viewableMeasures = this.redistribute(this.viewableMatrix, width, height);\n return this;\n }\n\n /**\n * Populate the max measures in the array\n *\n * @param {Array} measures array to be filled with max measures\n * @param {Object} matrixTree matrix tree of visual matrix\n * @param {number} measure width or height\n * @param {number} [depth=0] depth of the tree that to be calculated\n * @memberof VisualMatrix\n */\n populateMaxMeasures (type, matrixTree, depth = 0, measures = []) {\n measures[depth] = Math.max(measures[depth] || 0, matrixTree.space[type]);\n if (matrixTree.values) {\n const childDepth = depth + 1;\n matrixTree.values.forEach((child) => {\n if (child.space) {\n measures = this.populateMaxMeasures(type, child, childDepth, measures);\n }\n });\n }\n return measures;\n }\n\n /**\n * Calculates the depth of the tree that can be viewed\n *\n * @param {Array} widthMeasures array of widths\n * @param {Array} heightMeasures array of heights\n * @return {number} depth of the tree\n * @memberof VisualMatrix\n */\n calculateDepth (widthMeasures, heightMeasures) {\n let i;\n let j;\n const { height, width } = this.availableSpace();\n\n for (i = 0; i < heightMeasures.length; i++) {\n if (heightMeasures[i] <= height) break;\n }\n for (j = 0; j < widthMeasures.length; j++) {\n if (widthMeasures[j] <= width) break;\n }\n return Math.min(widthMeasures.length - 1, Math.max(i, j));\n }\n\n /**\n * Redistributes the provied space to all cells\n *\n * @param {*} viewableMatrix current viewport matrix\n * @param {*} width provied width\n * @param {*} height provied height\n * @return {Object} current viewports matrixes with measures\n * @memberof VisualMatrix\n */\n redistribute (viewableMatrix, width, height) {\n let maxHeights = [];\n let maxWidths = [];\n const {\n isTransposed\n } = this.config();\n\n viewableMatrix.forEach((matrixInst) => {\n const matrix = matrixInst.matrix;\n const mWidth = 0;\n const mHeight = 0;\n const options = { mWidth, mHeight, matrix, width, height, maxHeights, maxWidths };\n const maxMeasures = isTransposed ? this.redistributeColumnWise(options) : this.redistributeRowWise(options);\n maxWidths = maxMeasures.maxWidths;\n maxHeights = maxMeasures.maxHeights;\n });\n\n const measurements = viewableMatrix.map((matrixInst, i) => {\n let heightMeasures;\n let columnMeasures;\n const cellDimOptions = { matrixInst, maxWidths, maxHeights, matrixIndex: i };\n const { heights, widths, rowHeights, columnWidths } = this.getCellDimensions(cellDimOptions);\n\n if (!isTransposed) {\n heightMeasures = [height, height];\n columnMeasures = widths;\n } else {\n heightMeasures = heights;\n columnMeasures = [width, width];\n }\n return {\n rowHeights: {\n primary: rowHeights[0],\n secondary: rowHeights[1]\n },\n columnWidths: {\n primary: columnWidths[0],\n secondary: columnWidths[1]\n },\n height: {\n primary: heightMeasures[0],\n secondary: heightMeasures[1]\n },\n width: {\n primary: columnMeasures[0],\n secondary: columnMeasures[1]\n }\n };\n });\n\n return measurements;\n }\n\n /**\n * Gets the viewable measures for the current viewable matrix\n *\n * @return {Object} Set of viewable measures\n * @memberof VisualMatrix\n */\n getViewableSpaces () {\n return this.viewableMeasures;\n }\n\n /**\n * Returns the matrix that can be viewed in the current viewport\n *\n * @return {Array} Set of matrices that can be viewed\n * @memberof VisualMatrix\n */\n getViewableData () {\n return this.viewableMatrix;\n }\n\n /**\n *\n *\n * @return\n * @memberof VisualMatrix\n */\n removeExtraCells () {\n const {\n isTransposed,\n extraCellLengths\n } = this.config();\n const matrix = this._layoutMatrix;\n const tree = mergeRecursive({}, this.tree());\n const begCellLen = extraCellLengths[0];\n const endCellLen = extraCellLengths[1] || Number.NEGATIVE_INFINITY;\n const layoutMatrix = !isTransposed ? extraCellsRemover(matrix, begCellLen, endCellLen) :\n matrix.slice(0).map(e => extraCellsRemover(e, begCellLen, endCellLen));\n\n tree.values = extraCellsRemover(tree.values, begCellLen, endCellLen);\n if (!isTransposed) {\n tree.matrix = extraCellsRemover(tree.matrix, begCellLen, endCellLen);\n } else {\n tree.matrix = tree.matrix.map(e => extraCellsRemover(e, begCellLen, endCellLen));\n }\n return {\n tree,\n layoutMatrix\n };\n }\n\n /**\n * Creates the viewport that can be viewed together\n *\n * @param {number} depth maxDepth that can be viewed in the viewport\n * @return {Array} Set of matrices that can be viewed\n * @memberof VisualMatrix\n */\n createViewPortMatrix (depth) {\n const arr = [];\n createMatrixInstances(arr, depth, this.removeExtraCells(), this);\n return arr;\n }\n\n /**\n * Distibutes the given space row wisely\n *\n * @param {Object} options Redistribution information\n * @memberof VisualMatrix\n */\n redistributeRowWise (options) {\n let cWidths = [];\n let rHeights = [];\n let mHeight = 0;\n const maxMeasures = this.maxMeasures();\n const {\n isDistributionEqual,\n distribution,\n isTransposed,\n gutter\n } = this.config();\n const { matrix, width, height, maxHeights, maxWidths } = options;\n\n mHeight = spaceTakenByColumn(matrix, this._lastLevelKey).height;\n\n const maxWidth = maxMeasures.reduce((t, n) => {\n t += n;\n return t;\n });\n if (maxWidth > 0) {\n cWidths = maxMeasures.map(space => space + (width - maxWidth) * (space / maxWidth));\n } else {\n cWidths = maxMeasures.map(() => 0);\n }\n rHeights = getDistributedHeight({\n matrix,\n cIdx: this._lastLevelKey,\n height: mHeight,\n availableHeight: height,\n isDistributionEqual,\n distribution,\n isTransposed,\n gutter\n });\n maxWidths.push(cWidths);\n maxHeights.push(rHeights);\n return { maxWidths, maxHeights };\n }\n\n /**\n * Distibutes the given space column wisely\n *\n * @param {Object} options Redistribution information\n * @memberof VisualMatrix\n */\n redistributeColumnWise (options) {\n let rHeights = [];\n const { matrix, width, maxHeights, maxWidths } = options;\n const borderWidth = this.config().unitMeasures.border;\n const mWidth = spaceTakenByRow(matrix[this._lastLevelKey]).width;\n const cWidths = getDistributedWidth({\n row: matrix[this._lastLevelKey],\n width: mWidth,\n availableWidth: width\n }, this.config());\n\n matrix.forEach((row, rIdx) => row.forEach((col, cIdx) => {\n const oldLogicalSpace = col.getLogicalSpace().height;\n col.setAvailableSpace(cWidths[cIdx] - borderWidth, oldLogicalSpace);\n rHeights[rIdx] = Math.max(rHeights[rIdx] || 0, col.getLogicalSpace().height);\n }));\n\n if (maxHeights.length > 0) {\n rHeights = rHeights.map((e, i) => Math.max(e, maxHeights[0][i]));\n }\n\n maxHeights.push(rHeights);\n\n for (let x = 0; x < maxHeights.length; x++) {\n maxHeights[x] = rHeights;\n }\n maxWidths.push(cWidths);\n return { maxHeights, maxWidths };\n }\n\n /**\n * Dispatch the calculated cell dimensions to all the cells\n *\n * @param {Object} options cell dimension information\n * @return {Object} row and column heights / widths\n * @memberof VisualMatrix\n */\n getCellDimensions (options) {\n let indices = [];\n let unitMeasures = [];\n let mainMeasures = [];\n let computedMeasures = [];\n const {\n isTransposed,\n unitMeasures: measures\n } = this.config();\n const borderWidth = measures.border;\n const { matrixInst, maxWidths, maxHeights, matrixIndex } = options;\n const matrix = matrixInst.matrix;\n const rowHeights = [[0], [0]];\n const columnWidths = [[0], [0]];\n const heights = [0, 0];\n const widths = [0, 0];\n const breakPointer = this._breakPointer;\n\n matrix.forEach((row, rIdx) => {\n row.forEach((cell, cIdx) => {\n const colHeight = maxHeights[matrixIndex][rIdx] || 0;\n const colWidth = maxWidths[matrixIndex][cIdx];\n\n if (!isTransposed) {\n cell.setAvailableSpace(colWidth, colHeight - borderWidth);\n indices = [rIdx, cIdx];\n unitMeasures = [columnWidths, rowHeights];\n mainMeasures = [widths, heights];\n computedMeasures = [colWidth, colHeight];\n } else {\n cell.setAvailableSpace(colWidth - borderWidth, colHeight);\n indices = [cIdx, rIdx];\n unitMeasures = [rowHeights, columnWidths];\n mainMeasures = [heights, widths];\n computedMeasures = [colHeight, colWidth];\n }\n\n if (indices[0] === 0 && indices[1] < breakPointer) {\n unitMeasures[0][0][indices[1]] = computedMeasures[0];\n mainMeasures[0][0] = (mainMeasures[0][0] || 0) + computedMeasures[0];\n } else if (indices[0] === 0 && indices[1] >= breakPointer) {\n unitMeasures[0][1][indices[1] - breakPointer] = computedMeasures[0];\n mainMeasures[0][1] = (mainMeasures[0][1] || 0) + computedMeasures[0];\n }\n if (indices[1] === this._lastLevelKey) {\n unitMeasures[1][0][indices[0]] = computedMeasures[1];\n unitMeasures[1][1][indices[0]] = computedMeasures[1];\n }\n });\n });\n return {\n heights,\n widths,\n rowHeights,\n columnWidths\n };\n }\n}\n\n","import { HEIGHT, WIDTH, COLUMN, ROW } from '../enums/constants';\n\n/**\n * Gets measurement for an instance of visual matrix\n *\n * @param {Array} matrix instance of visual matrix\n * @param {string} type height/width\n * @return {Object} Logical height/width of the matrix\n */\nexport function getMatrixMeasurement (matrix, type) {\n if (matrix) {\n return matrix.getLogicalSpace()[type];\n }\n return 0;\n}\n\n/**\n * Sets available space for an instance of visual matrix\n *\n * @param {Array} matrix instance of visual matrix\n * @param {string} type height/width\n * @param {number} value Value of measurement\n */\nexport function setMatrixMeasurement (matrix, type, value) {\n if (matrix) {\n const spaces = matrix.getLogicalSpace();\n if (value && spaces[type] !== value) {\n type === HEIGHT ? matrix.setAvailableSpace(spaces.width, value) :\n matrix.setAvailableSpace(value, spaces.height);\n }\n }\n}\n\n/**\n *\n *\n * @param {*} matrix\n * @param {*} widths\n * @param {*} heights\n */\nconst setAvailableSpace = (matrix, widths, heights) => {\n matrix.forEach((row, rIdx) => {\n row.forEach((placeholder, cIdx) => {\n placeholder.setAvailableSpace(widths[cIdx], heights[rIdx]);\n });\n });\n};\n\n/**\n *\n *\n * @param {*} layout\n * @param {*} matrix\n * @param {*} pointer\n * @returns\n */\nconst setViewSpaces = (layout, pointerType, viewSpaces) => {\n let pointer = layout.config()[`${pointerType}Pointer`];\n if (viewSpaces.length - 1 < pointer) {\n pointer = 0;\n layout.config({ [`${pointerType}Pointer`]: pointer });\n }\n return pointer;\n};\n\n/**\n * Computes the measurements of space for all matrices in the\n * layout\n *\n * @param {Object} layout Instance of grid layout\n * @return {Object} set of measurements for the layout\n */\nexport const computeLayoutMeasurements = (layout) => {\n const rowMatrix = layout.rowMatrix();\n const columnMatrix = layout.columnMatrix();\n const centerMatrix = layout.centerMatrix();\n const {\n width,\n height\n } = layout.measurement();\n const {\n border\n } = layout.config();\n const matrices = layout.matrices();\n const {\n top,\n bottom\n } = matrices;\n\n // Get width of row matrix\n const rowMatrixWidth = getMatrixMeasurement(rowMatrix, WIDTH);\n\n // Set width for column matrix\n\n // Border adjustment for each cell in the central matrix\n const borderWidth = border.width;\n\n const columnMatrixWidth = width - rowMatrixWidth - borderWidth;\n setMatrixMeasurement(columnMatrix, WIDTH, columnMatrixWidth);\n const columnViewPages = columnMatrix.getViewableSpaces();\n setViewSpaces(layout, COLUMN, columnViewPages);\n\n // Figuring out total space needed by current view space\n const columnViewSpace = columnViewPages[layout.config().columnPointer];\n\n // Getting height of column matrix\n const columnMatrixHeight = columnViewSpace.height.primary + columnViewSpace.height.secondary;\n\n // Set height for row matrix\n const rowMatrixHeight = height - columnMatrixHeight;\n\n setMatrixMeasurement(rowMatrix, HEIGHT, rowMatrixHeight);\n\n // Get heights of each cell of row matrix\n const rowViewableSpaces = rowMatrix.getViewableSpaces();\n setViewSpaces(layout, ROW, rowViewableSpaces);\n const rowHeights = [].concat(...rowViewableSpaces.map(e => e.rowHeights.primary));\n const rowWidthsPrimary = [].concat(...rowViewableSpaces.map(e => e.columnWidths.primary));\n const rowWidthsSecondary = [].concat(...rowViewableSpaces.map(e => e.columnWidths.secondary));\n const columnViewableSpaces = columnMatrix.getViewableSpaces();\n // Get widths of each cell of column matrix\n const columnWidths = [].concat(...columnViewableSpaces.map(e => e.columnWidths.primary));\n const columnHeightsPrimary = columnViewableSpaces[0].rowHeights.primary;\n\n const columnHeightsSecondary = [].concat(...columnViewableSpaces.map(e => e.rowHeights.secondary));\n\n // Setting the available space for each cell in the centre matrix\n centerMatrix.forEach((matrix, rIdx) => {\n matrix.forEach((placeholder, cIdx) => {\n placeholder.setAvailableSpace(columnWidths[cIdx] - borderWidth, rowHeights[rIdx] - borderWidth);\n });\n });\n setAvailableSpace(top[0], rowWidthsPrimary, columnHeightsPrimary);\n setAvailableSpace(top[2], rowWidthsSecondary, columnHeightsPrimary);\n setAvailableSpace(bottom[0], rowWidthsPrimary, columnHeightsSecondary);\n setAvailableSpace(bottom[2], rowWidthsSecondary, columnHeightsSecondary);\n\n return {\n rowMatrixHeight,\n rowMatrixWidth,\n columnMatrixHeight,\n columnMatrixWidth\n };\n};\n\n/**\n * Gets view matrices based on current pointers for row and column\n *\n * @param {Object} layout instance of layout\n * @param {number} rowPointer current row pointer\n * @param {number} columnPointer current column pointer\n * @return {Object} returns the view matrix and its relevant information\n */\nexport const getViewMatrices = (layout, rowPointer, columnPointer) => {\n const rowMatrix = layout.rowMatrix();\n const columnMatrix = layout.columnMatrix();\n const centerMatrix = layout.centerMatrix();\n const matrices = layout.matrices();\n const rowMatrices = rowMatrix.getViewableData();\n const columnMatrices = columnMatrix.getViewableData();\n const centralMatrixPointer = {\n row: 0,\n column: 0\n };\n\n for (let i = rowPointer - 1; i >= 0; i--) {\n const length = Math.max(rowMatrices[i].primaryMatrix.length,\n rowMatrices[i].secondaryMatrix.length);\n centralMatrixPointer.row += length;\n }\n /* istanbul ignore next */\n for (let i = columnPointer - 1; i >= 0; i--) {\n const matrix = columnMatrices[i];\n const { primaryMatrix, secondaryMatrix } = matrix;\n const length = Math.max(primaryMatrix[0] ? primaryMatrix[0].length : 0,\n secondaryMatrix[0] ? secondaryMatrix[0].length : 0);\n centralMatrixPointer.column += length;\n }\n\n matrices.top[1] = columnMatrices[columnPointer].primaryMatrix;\n matrices.bottom[1] = columnMatrices[columnPointer].secondaryMatrix;\n\n matrices.center[0] = rowMatrices[rowPointer].primaryMatrix;\n matrices.center[2] = rowMatrices[rowPointer].secondaryMatrix;\n\n const rowMatrixLen = Math.max(matrices.center[0].length, matrices.center[2].length);\n /* istanbul ignore next */\n const columnMatrixLen = Math.max(matrices.top[1][0] ? matrices.top[1][0].length : 0, matrices.bottom[1][0] ?\n matrices.bottom[1][0].length : 0);\n matrices.center[1] = centerMatrix.slice(centralMatrixPointer.row, centralMatrixPointer.row + rowMatrixLen)\n .map(matrix => matrix.slice(centralMatrixPointer.column, centralMatrixPointer.column + columnMatrixLen));\n\n return {\n matrices,\n rowPages: rowMatrices.length,\n columnPages: columnMatrices.length\n };\n};\n/**\n * Returns measurements of the cells of the current matrix\n *\n * @param {Object} layout instance of layout\n * @return {Object} returns the measurements for current view matrix\n */\nexport const getViewMeasurements = (layout) => {\n const rowMatrix = layout.rowMatrix();\n const columnMatrix = layout.columnMatrix();\n const {\n width,\n height\n } = layout.measurement();\n const {\n columnPointer,\n rowPointer\n } = layout.config();\n\n const rowMatrixWidth = rowMatrix.getViewableSpaces()[rowPointer].width;\n const { primary: leftWidth, secondary: rightWidth } = rowMatrixWidth;\n\n const columnMatrixHeight = columnMatrix.getViewableSpaces()[columnPointer].height;\n const { primary: topHeight, secondary: bottomHeight } = columnMatrixHeight;\n\n const centerHeight = height - (topHeight + bottomHeight);\n const centerWidth = width - (leftWidth + rightWidth);\n\n return {\n viewWidth: [leftWidth, centerWidth, rightWidth],\n viewHeight: [topHeight, centerHeight, bottomHeight]\n };\n};\n","/**\n * This file declares a table that can be extended to create a Datagrid, crosstab\n * and man other visualzations that require a tabular structure.\n */\n\nimport { getUniqueId } from 'muze-utils';\nimport GenericLayout from '../generic-layout';\nimport { DEFAULT_CONFIGURATION, DEFAULT_MEASUREMENTS } from './defaults';\nimport {\n renderMatrices\n} from './renderer';\nimport { generateVisualMatrices } from './layout-helper';\nimport { computeLayoutMeasurements, getViewMeasurements, getViewMatrices } from './computations';\n/**\n * This class is used to create a tabular structure that\n * can house charts and values.\n *\n * @class GridLayout\n */\nexport default class GridLayout extends GenericLayout {\n\n /**\n * Creates an instance of TableLayout.\n * @param {HTMLElement} matrices Set of upto 9 matrices containing the cells to be rendered\n * @param {HTMLElement} mountPoint DOM element/d3 selection where the layout is to be mounted\n * @param {Object} measurement The dimensions of the layout\n * @param {Object} config external configurations.\n * @memberof GenericLayout\n *\n * measurement : {\n * width : number => width of the container\n * height : number => height of the container\n * unitHeight : number => height of unit of the cells\n * unitWidth : number => width of unit of the cells\n * }\n *\n */\n constructor (matrices, mountPoint, measurement, config) {\n super(mountPoint, measurement, config);\n this.matrices(matrices);\n this.config(this.constructor.defaultConfig());\n this._layoutId = getUniqueId();\n }\n\n /**\n * Returns initial set of measurements for the grid layout\n *\n * @static\n * @return {Object} Returns initial set of measurements\n * @memberof GridLayout\n */\n static defaultMeasurement () {\n return DEFAULT_MEASUREMENTS;\n }\n\n /**\n * Returns initialconfiguration for grid layout\n *\n * @static\n * @return {Object} Returns initial configuration for grid layout\n * @memberof GridLayout\n */\n static defaultConfig () {\n return DEFAULT_CONFIGURATION;\n }\n\n /**\n * This function is used to return an instance of GridLayout\n *\n * @return {GridLayout} Instance of grid layout.\n * @static\n * @memberof GridLayout\n */\n static create () {\n return new GridLayout(null, null, this.defaultMeasurement(), this.defaultConfig());\n }\n\n /**\n * Sets/Gets the matrices for the layout\n *\n * @param {Array} matrices Set of matrices\n * @return {Object} Getter/Setter\n * @memberof GridLayout\n */\n matrices (matrices) {\n if (matrices) {\n this._matrices = generateVisualMatrices(this, matrices);\n return this;\n }\n return super.matrices(matrices);\n }\n\n /**\n * Triggers the computations for the layout based on the matrices available\n * This causes a reflow in the entire layout system.\n *\n * @return {Object} Layout instance\n * @memberof GridLayout\n */\n triggerReflow () {\n computeLayoutMeasurements(this);\n this.setViewInformation();\n return this;\n }\n\n /**\n *\n *\n * @param {*} type\n * @param {*} pageNumber\n * @returns\n * @memberof GridLayout\n */\n gotoPage (type, pageNumber) {\n const pageType = type.toLowerCase();\n const { viewMatricesInfo } = this.getViewInformation();\n const totalPages = viewMatricesInfo[`${pageType}Pages`];\n const pointer = Math.min(Math.max(1, pageNumber), totalPages);\n this.config({\n [`${pageType}Pointer`]: pointer - 1\n });\n this.setViewInformation();\n this.renderGrid();\n return this;\n }\n\n /**\n *\n *\n * @param {*} type\n * @returns\n * @memberof GridLayout\n */\n pages (type) {\n const { viewMatricesInfo } = this.getViewInformation();\n const pageType = type.toLowerCase();\n return {\n totalPages: viewMatricesInfo[`${pageType}Pages`],\n currentPage: this.config()[`${pageType}Pointer`] + 1\n };\n }\n\n /**\n *\n *\n * @returns\n * @memberof GridLayout\n */\n setViewInformation () {\n const {\n rowPointer,\n columnPointer,\n border\n } = this.config();\n const viewMatricesInfo = getViewMatrices(this, rowPointer, columnPointer);\n const layoutDimensions = getViewMeasurements(this);\n layoutDimensions.border = border;\n this.viewInfo = {\n viewMatricesInfo,\n layoutDimensions\n };\n return this;\n }\n\n /**\n *\n *\n * @returns\n * @memberof GridLayout\n */\n getViewInformation () {\n return this.viewInfo;\n }\n\n /**\n * Renders the layout\n *\n * @return {Object} current instance\n * @memberof GridLayout\n */\n renderGrid (mountPoint) {\n this.mountPoint(mountPoint);\n if (!this.mountPoint()) {\n return this;\n }\n const {\n viewMatricesInfo,\n layoutDimensions\n } = this.getViewInformation();\n // Render matrices\n renderMatrices(this, viewMatricesInfo.matrices, layoutDimensions);\n return this;\n }\n}\n","import VisualMatrix from '../visual-matrix/visual-matrix';\n\n/**\n * Generates the set of visual matrices for pagination and layouting algorithms\n *\n * @param {*} context\n * @param {*} matrices\n * @returns\n */\nexport const generateVisualMatrices = (context, matrices) => {\n // Set of matrices for layout is generated starting with the left matrix\n let leftMatrix = [];\n let rightMatrix = [];\n let topMatrix = [];\n let bottomMatrix = [];\n let begColCells;\n let endColCells;\n const {\n isRowSizeEqual,\n isColumnSizeEqual,\n gutterSpace,\n distribution,\n border,\n breakPage\n } = context.config();\n const {\n minUnitHeight,\n minUnitWidth\n } = context.measurement();\n const { top, center, bottom } = matrices;\n const [topLeft, topColumns, topRight] = top;\n const [leftRows, valueMatrix, rightRows] = center;\n const [bottomLeft, bottomColumns, bottomRight] = bottom;\n\n if (leftRows.length > 0) {\n // If no left matrix is present, context will be empty\n leftMatrix = [...topLeft, ...leftRows, ...bottomLeft];\n }\n if (rightRows.length > 0) {\n // If no right matrix is present, context will be empty\n rightMatrix = [...topRight, ...rightRows, ...bottomRight];\n }\n if (topColumns.length > 0 && topColumns[0].length > 0) {\n // If no top matrix is present, context will be empty\n topMatrix = topColumns.map((d, i) => [...topLeft[i], ...d, ...topRight[i]]);\n }\n if (bottomColumns.length > 0 && bottomColumns[0].length > 0) {\n // If no bottom matrix is present, context will be empty\n bottomMatrix = bottomColumns.map((d, i) => [...bottomLeft[i], ...d, ...bottomRight[i]]);\n }\n context.rowMatrix(new VisualMatrix([leftMatrix, rightMatrix], {\n isDistributionEqual: isRowSizeEqual,\n distribution: distribution.rows,\n gutter: gutterSpace.rows,\n unitMeasures: {\n width: minUnitWidth,\n height: minUnitHeight,\n border: border.width\n },\n breakPage: breakPage.rows.map(e => e + Math.max(topLeft.length, topRight.length)),\n extraCellLengths: [topLeft.length, bottomLeft.length]\n }));\n\n if (topLeft.length > 0) {\n begColCells = topLeft[0].length;\n } else {\n begColCells = bottomLeft.length > 0 ? bottomLeft[0].length : 0;\n }\n\n if (topRight.length > 0) {\n endColCells = topRight[0].length;\n } else {\n endColCells = bottomRight.length > 0 ? bottomRight[0].length : 0;\n }\n\n context.columnMatrix(new VisualMatrix([topMatrix, bottomMatrix], {\n isDistributionEqual: isColumnSizeEqual,\n distribution: distribution.columns,\n gutter: gutterSpace.columns,\n isTransposed: true,\n unitMeasures: {\n width: minUnitWidth,\n height: minUnitHeight,\n border: border.width\n },\n breakPage: breakPage.columns,\n extraCellLengths: [begColCells, endColCells]\n }));\n context.centerMatrix(valueMatrix);\n\n return matrices;\n};\n","import { ERROR_MSG } from 'muze-utils';\n/**\n * An Interface to be implemented if the transaction support is necessary. This class ensures reactivity to\n * global properties.\n */\nexport default class TransactionSupport {\n /**\n * Property accessor for data member of the class. Data is passed to the system by calling this method.\n */\n data () {\n throw new Error(ERROR_MSG.INTERFACE_IMPl);\n }\n\n /**\n * Property accessor for width of the class. Width is passed as an integer.\n */\n width () {\n throw new Error(ERROR_MSG.INTERFACE_IMPl);\n }\n\n /**\n * Property accessor for height of the class. Height is passed as an integer.\n */\n height () {\n throw new Error(ERROR_MSG.INTERFACE_IMPl);\n }\n\n /**\n * Property accessor for config of the class. Config is passed as an object.\n */\n config () {\n throw new Error(ERROR_MSG.INTERFACE_IMPl);\n }\n}\n","import { TOP, BOTTOM, LEFT, TITLE, SUB_TITLE, GROUP, LAYOUT, LEGEND } from '../constants';\n\n/**\n *\n *\n * @param {*} context\n * @returns\n */\nexport const arrangeComponents = (context) => {\n const legendConfig = context.config().legend;\n const titleConfig = context.title()[1];\n const subtitleConfig = context.subtitle()[1];\n const titleLayouts = {\n [`${TOP}-${TOP}`]: [TITLE, SUB_TITLE, GROUP],\n [`${BOTTOM}-${BOTTOM}`]: [GROUP, SUB_TITLE, TITLE],\n [`${TOP}-${BOTTOM}`]: [TITLE, GROUP, SUB_TITLE],\n [`${BOTTOM}-${TOP}`]: [SUB_TITLE, GROUP, TITLE]\n };\n const legendLayouts = [\n [LEGEND, LAYOUT],\n [LAYOUT, LEGEND]\n ];\n const titlePosition = titleConfig.position || TOP;\n const subtitlePosition = subtitleConfig.position || TOP;\n\n return {\n headers: titleLayouts[`${titlePosition}-${subtitlePosition}`],\n legends: legendConfig.position === LEFT || legendConfig.position === TOP ?\n legendLayouts[0] : legendLayouts[1]\n };\n};\n","/**\n * Flag to specify whether direction is vertical.\n */\nexport const MARGIN = 'margin';\nexport const LEFT = 'left';\nexport const RIGHT = 'right';\nexport const BOTTOM = 'bottom';\nexport const TOP = 'top';\nexport const SPACE_FIXER = 'spaceFixer';\nexport const CLASSPREFIX = 'muze';\nexport const VERTICAL_ALIGN = 'verticalAlign';\nexport const TEXT_ALIGN = 'textAlign';\nexport const IS_OFFSET = 'isOffset';\nexport const MIDDLE = 'middle';\nexport const BASELINE = 'baseline';\nexport const SHOW = 'show';\nexport const CENTER = 'center';\nexport const TEXT = 'text';\nexport const HEADER = 'header';\nexport const HEIGHT = 'height';\nexport const WIDTH = 'width';\nexport const DATA = 'data';\nexport const AXES = 'axes';\nexport const FACET_BY_FIELDS = 'facetByFields';\nexport const FIELDS = 'fields';\nexport const TRANSFORM = 'transform';\nexport const LAYER_DEF = 'layerDef';\nexport const CONFIG = 'config';\nexport const DETAIL_FIELDS = 'detailFields';\n\nexport const TEXT_CELL = 'text-cell';\nexport const AXIS_CELL = 'axis-cell';\nexport const GEOM_CELL = 'geom-cell';\nexport const BLANK_CELL = 'blank-cell';\n","// eneum to refer to simple cell\nexport const SIMPLE = 'simple';\n// eneum to refer to header cell\nexport const TEXT = 'text';\n// enum to refer to axis cell\nexport const AXIS = 'axis';\n// enum to refer to visual cell\nexport const GEOM = 'geom';\n// enum to refer blank cell\nexport const BLANK = 'blank';\n","import {\n ERROR_MSG,\n getUniqueId,\n mergeRecursive\n} from 'muze-utils';\nimport { SIMPLE } from './enums/cell-type';\n\n/**\n * This file declares a class that is used as an interface to create new\n * SimpleCell elements.\n * @module SimpleCell\n */\n/**\n * Base class for all table cells.\n *\n * @interface\n * @class SimpleCell\n */\nclass SimpleCell {\n\n /**\n * Creates an instance of SimpleCell.\n *\n * @param {*} config The input configuration.\n * @memberof SimpleCell\n */\n constructor (config) {\n this._id = getUniqueId();\n\n const defConfig = mergeRecursive({}, this.constructor.defaultConfig());\n this._config = mergeRecursive(defConfig, config || {});\n\n this._mount = null;\n }\n\n /**\n * Returns the type of the placehlder.\n *\n * @readonly\n * @memberof SimpleCell\n */\n get type () {\n return SIMPLE;\n }\n\n /**\n * Returns the type of the placehlder.\n *\n * @readonly\n * @memberof SimpleCell\n * @return {Object} Default config for the placeholder\n */\n static defaultConfig () {\n return {};\n }\n\n /**\n * Returns the value contained by the SimpleCell.\n *\n * @memberof SimpleCell\n */\n valueOf () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Returns a unique identifier for the instance used\n * to control selective rendering.\n *\n * @memberof SimpleCell\n */\n id () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Returns a serialized representation of the instance.\n *\n * @memberof SimpleCell\n */\n serialize () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Returns an object with width and height fields\n * specifying the space taken up by this metod.\n *\n * @memberof SimpleCell\n */\n getLogicalSpace () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Method used to set the space available to render the SimpleCell\n *\n * @param {number} width The available width.\n * @param {number} height The available height.\n * @memberof SimpleCell\n */\n setAvailableSpace () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Render the SimpleCell inthe supplied mount point.\n *\n * @param {HTMLElement} mount The mount point to render in.\n * @memberof SimpleCell\n */\n render () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Render the SimpleCell inthe supplied mount point.\n *\n * @param {HTMLElement} mount The mount point to render in.\n * @memberof SimpleCell\n */\n remove () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n}\n\nexport default SimpleCell;\n","/**\n * This file exports variables that are used as defaults for\n * the placeholders\n */\nimport * as CONSTANTS from './constants';\n\n /**\n * Default Configuration for the cells\n * @return {Object} Default configuration\n */\nexport const DEFAULT_CONFIG = {\n [CONSTANTS.MARGIN]: {\n [CONSTANTS.LEFT]: 0,\n [CONSTANTS.RIGHT]: 0,\n [CONSTANTS.TOP]: 0,\n [CONSTANTS.BOTTOM]: 0\n },\n [CONSTANTS.SPACE_FIXER]: 2,\n [CONSTANTS.IS_OFFSET]: false,\n [CONSTANTS.VERTICAL_ALIGN]: CONSTANTS.TOP,\n [CONSTANTS.TEXT_ALIGN]: CONSTANTS.CENTER,\n [CONSTANTS.SHOW]: true\n};\n","import { mergeRecursive } from 'muze-utils';\nimport { GEOM, TEXT, AXIS, BLANK } from './enums/cell-type';\n\nconst DEFAULT_PROPS = {\n mount: {},\n availHeight: {},\n availWidth: {},\n config: {\n sanitization: (context, value) => mergeRecursive(context._config, value)\n },\n logicalSpace: {},\n source: {}\n};\n\nconst geomProps = {\n data: {},\n caption: {},\n config: {},\n axes: {\n sanitization: (context, value) => Object.assign(context._axes, value)\n },\n facetByFields: {},\n fields: {},\n transform: {},\n layerDef: {},\n detailFields: {}\n};\n\nexport const PROPS = {\n [TEXT]: DEFAULT_PROPS,\n [GEOM]: mergeRecursive(geomProps, DEFAULT_PROPS),\n [AXIS]: DEFAULT_PROPS,\n [BLANK]: DEFAULT_PROPS\n};\n","/**\n * This file declares a class that represents a table cell\n * used to house an axis.\n * @module VisualCell\n */\nimport { selectElement, makeElement, generateGetterSetters } from 'muze-utils';\nimport { CLASSPREFIX, HEIGHT, WIDTH, AXIS_CELL } from './enums/constants';\nimport SimpleCell from './simple-cell';\nimport { DEFAULT_CONFIG } from './enums/defaults';\nimport { AXIS } from './enums/cell-type';\nimport { PROPS } from './props';\n\n/**\n * Computes the logical space of the an axis instance within an axis cell\n *\n * @param {Object} context Required to get the needed parameters to compute axis space\n * @return {Object} Returns the logical space for axis\n */\nconst computeAxisSpace = (context) => {\n let logicalWidth;\n let logicalHeight;\n const axis = context.source();\n const {\n spaceFixer,\n margin\n } = context.config();\n const {\n width,\n height\n } = axis.getLogicalSpace();\n const {\n show\n } = axis.config();\n if (show === true) {\n logicalHeight = Math.floor(height + margin.top + margin.bottom + spaceFixer);\n logicalWidth = Math.floor(width + margin.left + margin.right + spaceFixer);\n } else {\n [logicalWidth, logicalHeight] = [width, height];\n }\n return {\n width: logicalWidth,\n height: logicalHeight\n };\n};\n\n/**\n * Represents an axis cell.\n *\n * @class Axis\n */\nclass AxisCell extends SimpleCell {\n\n /**\n * Creates an instance of AxisCell.\n *\n * @param {Object} config The input config.\n * @memberof AxisCell\n */\n constructor (config) {\n super(config);\n\n this._axis = null;\n this._availHeight = null;\n this._availWidth = null;\n this._logicalSpace = null;\n\n generateGetterSetters(this, PROPS[AXIS]);\n }\n\n /**\n * return the type pf SimpleCell cell.\n *\n * @readonly\n * @memberof AxisCell\n */\n get type () {\n return AXIS;\n }\n\n /**\n * This method return the value conatined by this SimpleCell.\n *\n * @return {SimpleAxis | ColorAxis} Instance of SimpleAxis or ColorAxis.\n * @memberof AxisCell\n */\n valueOf () {\n return this.source().id;\n }\n\n /**\n * This method return the unique identififer of the axis\n *\n * @return {string} Id of the axis.\n * @memberof AxisCell\n */\n get id () {\n return this._id;\n }\n\n /**\n * Retrns the serialized representation of this cell.\n *\n * @return {Object}Object with serializable props.\n * @memberof AxisCell\n */\n serialize () {\n return {\n type: AXIS,\n axis: this.source().serialize()\n };\n }\n\n /**\n * return the default configuration for the text cell\n *\n * @static\n * @return {Object} Default configuration of the cell\n * @memberof AxisCell\n */\n static defaultConfig () {\n return DEFAULT_CONFIG;\n }\n\n /**\n * return the space taken up by an axis element in the dom.\n *\n * @return {Object} Object with width and height fields.\n * @memberof AxisCell\n */\n getLogicalSpace () {\n if (!this.logicalSpace()) {\n this.logicalSpace(computeAxisSpace(this));\n }\n return this.logicalSpace();\n }\n\n /**\n * This method is used to set the space availiable to render\n * the SimpleCell.\n *\n * @param {number} width The width of SimpleCell.\n * @param {number} height The height of SimpleCell.\n * @return {Instance} Returns current Instance\n * @memberof AxisCell\n */\n setAvailableSpace (width, height) {\n this.availWidth(width);\n this.availHeight(height);\n const {\n margin,\n isOffset\n } = this.config();\n this.source().setAvailableSpace(width, height, margin, isOffset);\n this.logicalSpace(null);\n this.source().logicalSpace(null);\n return this;\n }\n\n /**\n * This method is used to render the axis inside the axis cell.\n *\n * @param {HTMLElement} mount The mount point.\n * @return {Selection} node where axis mounted\n * @memberof AxisCell\n */\n /* istanbul ignore next */render (mount) {\n if (!mount) {\n return this;\n }\n const axis = this.source();\n const availHeight = this.availHeight();\n const availWidth = this.availWidth();\n const {\n margin\n } = this.config();\n const {\n top,\n bottom,\n left,\n right\n } = margin;\n const {\n show\n } = axis.config();\n const wrapperDiv = makeElement(selectElement(mount), 'div', [this], `${CLASSPREFIX}-${AXIS_CELL}`);\n const selection = makeElement(wrapperDiv, 'svg', [1], `${CLASSPREFIX}-axis-container`);\n\n this.mount(mount);\n if (availWidth === 0 || !availWidth) {\n selection.attr(WIDTH, `${0}px`);\n }\n if (availHeight === 0 || !availHeight) {\n selection.attr(HEIGHT, `${0}px`);\n }\n wrapperDiv.style(WIDTH, `${show ? availWidth : 0}px`)\n .style(HEIGHT, `${show ? availHeight : 0}px`)\n .style('margin-top', top)\n .style('margin-bottom', bottom)\n .style('margin-left', left)\n .style('margin-right', right);\n\n axis.mount(selection.node());\n return selection;\n }\n\n /**\n * Disposes the cell\n *\n * @return {Instance} Current instance of AxisCell\n * @memberof AxisCell\n */\n remove () {\n this.source() && this.source().remove();\n this.mount() && this.mount().remove();\n return this;\n }\n}\n\nexport default AxisCell;\n\n","/**\n * This file declares a class that represents a BLANK element in a table.\n * @module VisualCell\n */\nimport {\n selectElement,\n makeElement,\n applyStyle,\n generateGetterSetters\n } from 'muze-utils';\nimport SimpleCell from './simple-cell';\nimport { CLASSPREFIX, BLANK_CELL } from './enums/constants';\nimport { BLANK } from './enums/cell-type';\nimport { DEFAULT_CONFIG } from './enums/defaults';\nimport { PROPS } from './props';\n\n/**\n * Represents a table haeder.\n *\n * @class BLANK\n */\nclass BlankCell extends SimpleCell {\n\n /**\n * Creates an instance of BLANK.\n * @param {Object} config The input configuration.\n * @memberof BLANK\n */\n constructor (config) {\n super(config);\n\n generateGetterSetters(this, PROPS[BLANK]);\n }\n\n /**\n * return the type pf SimpleCell cell.\n *\n * @readonly\n * @memberof BlankCell\n */\n get type () {\n return BLANK;\n }\n\n /**\n * This method return the value contained by this SimpleCell.\n *\n * @return {string} The text value contained by this cell.\n * @memberof BlankCell\n */\n valueOf () {\n return this.id;\n }\n\n /**\n * return the default configuration for the text cell\n *\n * @static\n * @return {Object} Default configuration of the cell\n * @memberof BlankCell\n */\n static defaultConfig () {\n return DEFAULT_CONFIG;\n }\n\n /**\n * This method is used to return a unique identifier for\n * the BLANK cell.\n *\n * @return {string} The unique identifier for the BLANK.\n * @memberof BlankCell\n */\n get id () {\n return this._id;\n }\n\n /**\n * This method is used to obtain a serialized representation of this instance.\n *\n * @return {Object} Object with serilizable props.\n * @memberof BLANK\n */\n serialize () {\n return {\n type: BLANK\n };\n }\n\n /**\n * This method return the space taken up\n * by the text with the style applied.\n *\n * @return {Object} width and height taken up by the text.\n * @memberof BLANK\n */\n getLogicalSpace () {\n if (!this.logicalSpace()) {\n return {\n width: this.width || 0,\n height: this.height || 0\n };\n }\n return this.logicalSpace();\n }\n\n /**\n * This method is used to set the available space.\n *\n * @param {number} width The available width.\n * @param {number} height The available height.\n * @return {Instance} Returns current Instance\n * @memberof BlankCell\n */\n setAvailableSpace (width, height) {\n this.availWidth(width);\n this.availHeight(height);\n this.logicalSpace(null);\n return this;\n }\n\n /**\n * This method is used to render the BLANK cell inside\n * the provided mount point.\n *\n * @param {HTMLElement} mount The mount point for this cell.\n * @return {Instance} Returns current Instance\n * @memberof BLANK\n */\n /* istanbul ignore next */render (mount) {\n if (mount) {\n const { style } = this.config();\n // append span element to mount point\n this.mount(mount);\n const container = selectElement(mount);\n const elem = makeElement(container, 'div', [this.id]);\n elem.classed(`${CLASSPREFIX}-${BLANK_CELL}`, true);\n elem.style('width', `${this.availWidth()}px`);\n elem.style('height', `${this.availHeight()}px`);\n elem.html('');\n // apply style on the returned element\n if (style) {\n applyStyle(elem, style);\n }\n } return this;\n }\n\n /**\n * Removes the cell(Disposal)\n *\n * @return {Instance} Returns current Instance\n * @memberof BlankCell\n */\n remove () {\n this.mount() && this.mount().remove();\n return this;\n }\n }\nexport default BlankCell;\n","/**\n * This file declares a class that represents a Text element in a table.\n * @module VisualCell\n */\n\nimport {\n selectElement,\n makeElement,\n getSmartComputedStyle,\n generateGetterSetters\n} from 'muze-utils';\nimport SimpleCell from './simple-cell';\nimport { TEXT } from './enums/cell-type';\nimport { PROPS } from './props';\nimport { DEFAULT_CONFIG } from './enums/defaults';\nimport { CLASSPREFIX, TOP, BOTTOM, LEFT, RIGHT, HEADER, WIDTH, TEXT_CELL } from './enums/constants';\nimport './text-cell.scss';\n\n/**\n* Computes the Logical Space for the text\n*\n* @param {Object} context Required to get the needed parameters to compute text space\n* @return {Object} Logical space taken up by text\n* @memberof TextCell\n*/\nconst computeTextSpace = (context) => {\n const { labelManager } = context.dependencies();\n const space = labelManager.getOriSize(context.source());\n const {\n margin,\n show\n } = context.config();\n\n labelManager.setStyle(context._computedStyle);\n if (show) {\n return {\n width: space.width + margin.left + margin.right + context._minTickDiff.width,\n height: space.height + margin.top + margin.bottom + context._minTickDiff.height\n };\n } return {\n width: 0,\n height: 0\n };\n};\n\n/**\n * Represents a table haeder.\n *\n * @class Text\n */\nclass TextCell extends SimpleCell {\n\n /**\n * Creates an instance of Text.\n * @param {Object} config The input configuration.\n * @param {string} dependencies Dependencies for the class(labelManager)\n * @memberof Text\n */\n constructor (config, dependencies) {\n super(config);\n\n this._dependencies = dependencies;\n this._className = this._config.className ||\n (this._config.type === HEADER ? `${CLASSPREFIX}-${HEADER}-cell` : `${CLASSPREFIX}-${TEXT}-cell`);\n this._computedStyle = getSmartComputedStyle(selectElement('body'), this._className);\n this._dependencies.labelManager.setStyle(this._computedStyle);\n this._minTickDiff = this._dependencies.labelManager.getOriSize('WW');\n\n generateGetterSetters(this, PROPS[TEXT]);\n }\n\n /**\n * return the type pf SimpleCell cell.\n *\n * @readonly\n * @memberof TextCell\n */\n get type () {\n return TEXT;\n }\n\n /**\n * This method return the value contained by this SimpleCell.\n *\n * @return {string} The text value contained by this cell.\n * @memberof TextCell\n */\n valueOf () {\n return this.source();\n }\n\n /**\n * This method is used to return a unique identifier for\n * the Text cell.\n *\n * @return {string} The unique identifier for the Text.\n * @memberof TextCell\n */\n get id () {\n return this._id;\n }\n\n /**\n * Returns the dependencies of the instance\n *\n * @return {Object} Dependencies needed by the class\n * @memberof TextCell\n */\n dependencies () {\n return this._dependencies;\n }\n\n /**\n * This method is used to obtain a serialized representation of this instance.\n *\n * @return {Object} Object with serilizable props.\n * @memberof TextCell\n */\n serialize () {\n return {\n text: this.source(),\n type: TEXT\n };\n }\n\n /**\n * return the default configuration for the text cell\n *\n * @static\n * @return {Object} Default configuration of the cell\n * @memberof TextCell\n */\n static defaultConfig () {\n return DEFAULT_CONFIG;\n }\n\n /**\n * This method return the space taken up\n * by the text with the style applied.\n *\n * @return {Object} width and height taken up by the text.\n * @memberof Text\n */\n getLogicalSpace () {\n if (!this.logicalSpace()) {\n this.logicalSpace(computeTextSpace(this));\n }\n return this.logicalSpace();\n }\n\n /**\n * This method is used to set the available space.\n *\n * @param {number} width The available width.\n * @param {number} height The available height.\n * @return {Instance} Returns current Instance\n * @memberof TextCell\n */\n setAvailableSpace (width, height) {\n this.availWidth(width);\n this.availHeight(height);\n this.logicalSpace(null);\n return this;\n }\n\n /**\n * This method is used to render the Text cell inside\n * the provided mount point.\n *\n * @param {HTMLElement} mount The mount point for this cell.\n * @return {Instance} Returns current Instance\n * @memberof Text\n */\n render (mount) {\n const availWidth = this.availWidth();\n const {\n margin,\n show,\n verticalAlign,\n textAlign\n } = this.config();\n\n this.mount(mount);\n if (show) {\n const container = selectElement(mount);\n const elem = makeElement(container, 'div', [this.id], `${CLASSPREFIX}-${TEXT_CELL}`);\n\n container.style('vertical-align', verticalAlign);\n elem.classed(this._className, true);\n // apply style on the returned element\n elem.style(WIDTH, availWidth ? `${availWidth}px` : '100%');\n [TOP, BOTTOM, LEFT, RIGHT].forEach((type) => {\n elem.style(`padding-${type}`, `${margin[type]}px`);\n });\n elem.style('text-align', textAlign);\n elem.style('display', 'inline');\n // set the text as the innerHTML\n elem.html(this.source());\n }\n return this;\n }\n\n /**\n * Disposes the cell\n *\n * @return {Instance} Returns current Instance\n * @memberof TextCell\n */\n remove () {\n this.mount() && this.mount().remove();\n return this;\n }\n }\n\nexport default TextCell;\n","/**\n * This file declares a class that is used to represent a table cell\n * that houses a visual unit.\n * @module VisualCell\n */\n\nimport { selectElement, makeElement, generateGetterSetters } from 'muze-utils';\nimport SimpleCell from './simple-cell';\nimport { GEOM } from './enums/cell-type';\nimport { PROPS } from './props';\nimport {\n CLASSPREFIX, HEIGHT, WIDTH, DATA, AXES, FACET_BY_FIELDS, FIELDS, TRANSFORM, LAYER_DEF, CONFIG, GEOM_CELL,\n DETAIL_FIELDS\n} from './enums/constants';\nimport { DEFAULT_CONFIG } from './enums/defaults';\n\n/**\n * Calculates the logical space of the cell\n *\n * @param {Object} context Required to get the needed parameters to compute unit space\n * @return {Object} Logical space taken up by the unit\n * @memberof GeomCell\n */\nconst computeGeomSpace = (context) => {\n const config = context.source().config();\n const { width, height } = config;\n return {\n width: Math.ceil(width),\n height: Math.ceil(height + context.getCaptionSpace().height)\n };\n};\n\n /**\n * This class represents a SimpleCell for visual unit.\n *\n * @class GeomCell\n */\nclass GeomCell extends SimpleCell {\n\n /**\n * Creates an instance of GeomCell.\n * @param {Object} config The input configuration.\n * @memberof GeomCell\n */\n constructor (config) {\n super(config);\n\n this._unit = null;\n this._layers = null;\n this._axes = {};\n this._datamodel = {};\n this._facetByFields = {};\n this._fields = null;\n this._transform = null;\n this._caption = null;\n\n generateGetterSetters(this, PROPS[GEOM]);\n }\n\n /**\n * return the type pf SimpleCell cell.\n *\n * @readonly\n * @memberof GeomCell\n */\n get type () {\n return GEOM;\n }\n\n /**\n * This method return the value contained by this cell.\n *\n * @return {VisualUnit} Instance of visual unit contained by visual unit.\n * @memberof GeomCell\n */\n valueOf () {\n return this.source();\n }\n\n /**\n * This method is used to return the id of the\n * visual unit housed by this cell.\n *\n * @return {string} The unique id of the visual unit.\n * @memberof GeomCell\n */\n get id () {\n return this.source().id();\n }\n\n /**\n * This method return a serialized representation of\n * this instance.\n *\n * @return {Object} Object with serializable props.\n * @memberof GeomCell\n */\n serialize () {\n return {\n type: GEOM,\n unit: this.source().serialize(),\n caption: this.caption()\n };\n }\n\n /**\n * return the default configuration for the geom cell\n *\n * @static\n * @return {Object} Default configuration of the cell\n * @memberof GeomCell\n */\n static defaultConfig () {\n return DEFAULT_CONFIG;\n }\n\n /**\n * Updates the model based on the changed parameters\n *\n * @return {Instance} return instance\n * @memberof GeomCell\n */\n updateModel () {\n const unit = this.source();\n unit.lockModel();\n [DATA, AXES, FACET_BY_FIELDS, FIELDS, TRANSFORM, LAYER_DEF, CONFIG, DETAIL_FIELDS].forEach((prop) => {\n this[prop]() && unit[prop](this[prop]());\n });\n unit.unlockModel();\n return this;\n }\n\n /**\n * It gives the space taken by the caption of the unit\n *\n * @return {Object} return the space taken by caption\n * @memberof GeomCell\n */\n getCaptionSpace () {\n const caption = this.caption();\n\n let captionSpace = { width: 0, height: 0 };\n if (caption) {\n captionSpace = caption.getLogicalSpace();\n }\n return captionSpace;\n }\n\n /**\n * return the space taken up by the element in the dom.\n *\n * @return {Object} Object with width and height fields.\n * @memberof GeomCell\n */\n getLogicalSpace () {\n if (!this.logicalSpace()) {\n this.logicalSpace(computeGeomSpace(this));\n }\n return this.logicalSpace();\n }\n\n /**\n * This method is used to set the space available to\n * render the SimpleCell.\n *\n * @param {number} width The available width.\n * @param {number} height The available height.\n * @return {Instance} Returns current Instance\n * @memberof GeomCell\n */\n setAvailableSpace (width, height) {\n const unit = this.source();\n\n this.availWidth(width);\n this.availHeight(height);\n unit.lockModel();\n unit.width(width).height(height - this.getCaptionSpace().height);\n unit.unlockModel();\n this.logicalSpace(null);\n return this;\n }\n\n /**\n * his method is used to render the visual unit inside the provided cell.\n *\n * @param {HTMLElement} mount The mountpoint in the table.\n * @return {Instance} Returns current Instance\n * @memberof GeomCell\n */\n render (mount) {\n if (mount) {\n this.mount(mount);\n const availHeight = this.availHeight();\n const availWidth = this.availWidth();\n const caption = this.caption();\n const wrapperDiv = makeElement(selectElement(mount), 'div', [1], `${CLASSPREFIX}-${GEOM_CELL}`);\n\n if (caption) {\n const captionDom = makeElement(wrapperDiv, 'div', [caption], `${CLASSPREFIX}-unit-caption`).node();\n caption.render(captionDom);\n }\n const selection = makeElement(wrapperDiv, 'div', [1], `${CLASSPREFIX}-unit`);\n wrapperDiv.style(WIDTH, `${availWidth}px`).style(HEIGHT, `${availHeight}px`);\n selection.style(WIDTH, `${availWidth}px`)\n .style(HEIGHT, `${availHeight - this.getCaptionSpace().height}px`);\n this.source().mount(selection.node());\n }\n return this;\n }\n\n /**\n * Disposes the cell\n *\n * @return {Object} Current instance\n * @memberof GeomCell\n */\n remove () {\n this.mount() && this.mount().remove();\n this.source().remove();\n return this;\n }\n}\n\nexport default GeomCell;\n","import AxisCell from './axis-cell';\nimport BlankCell from './blank-cell';\nimport TextCell from './text-cell';\nimport GeomCell from './geom-cell';\nimport SimpleCell from './simple-cell';\n\nimport * as CONSTANTS from './constants';\n\nexport const DEFAULT_PLACEHOLDERS = {\n [CONSTANTS.SIMPLE_CELL]: SimpleCell,\n [CONSTANTS.TEXT_CELL]: TextCell,\n [CONSTANTS.AXIS_CELL]: AxisCell,\n [CONSTANTS.GEOM_CELL]: GeomCell,\n [CONSTANTS.BLANK_CELL]: BlankCell\n};\n\n","export const SIMPLE_CELL = 'SimpleCell';\nexport const TEXT_CELL = 'TextCell';\nexport const AXIS_CELL = 'AxisCell';\nexport const BLANK_CELL = 'BlankCell';\nexport const GEOM_CELL = 'GeomCell';\n\n","import { DEFAULT_PLACEHOLDERS } from './defaults';\n\n/**\n * Creates a registry for the cells, which can be used for\n * setting a new cell or getting the registered cells\n *\n * @return {Object} Setters and getters for registered cells\n */\nconst cellRegistry = () => {\n const reg = DEFAULT_PLACEHOLDERS;\n return {\n set: (key, def) => {\n if (key in reg) {\n reg[key] = def;\n }\n return cellRegistry;\n },\n get: () => reg\n };\n};\nexport default cellRegistry;\n","import { TextCell } from '@chartshq/visual-cell';\nimport { escapeHTML } from 'muze-utils';\n\n/**\n *\n *\n * @param {*} rawContent\n * @returns\n */\nconst resolveTitleSubTitleContent = (rawContent) => {\n if (typeof rawContent === 'function' && !rawContent._sanitize) {\n return rawContent();\n }\n return escapeHTML(rawContent());\n};\n\n/**\n *\n *\n * @param {*} config\n * @param {*} cellType\n * @param {*} labelManager\n * @param {*} prevCell\n * @returns\n */\nconst headerCreator = (config, cellType, labelManager, prevCell) => {\n const {\n content\n } = config;\n const cell = prevCell || new TextCell({ type: cellType }, { labelManager });\n\n cell.source(content);\n\n return {\n height: cell.getLogicalSpace().height,\n cell\n };\n};\n\n/**\n *\n *\n * @param {*} config\n * @param {*} type\n * @param {*} labelManager\n * @param {*} cell\n * @returns\n */\nconst createHeading = (config, type, labelManager, prevCell) => {\n if (!config) { return ''; }\n\n return headerCreator(\n config,\n type === 'title' ? 'header' : 'text',\n labelManager,\n prevCell\n );\n};\n\n/**\n *\n *\n * @param {*} context\n */\nexport const createHeaders = (context, canvasHeight, canvasWidth) => {\n let headerHeight = 0;\n const headers = {};\n\n canvasHeight >= 200 && canvasWidth >= 200 && ['title', 'subtitle'].forEach((type) => {\n const headerOptions = context[type]();\n const content = resolveTitleSubTitleContent(headerOptions[0]);\n if (content.length) {\n const config = headerOptions[1];\n\n config.width = context.width();\n config.content = content;\n\n const { height, cell } = createHeading(config, type, context.dependencies().smartlabel,\n context[`${type}Cell`]);\n\n headers[`${type}Cell`] = cell;\n context._composition[type] = cell;\n headerHeight += height + config.padding;\n }\n });\n return { headerHeight, headers };\n};\n\n","import { TextCell, AxisCell } from '@chartshq/visual-cell';\nimport {\n VERTICAL, HORIZONTAL, LEFT, RIGHT, LEGEND_TYPE_MAP, PADDING, BORDER, MARGIN\n} from '../constants';\n\n/**\n *\n *\n * @param {*} legendConfig\n * @param {*} canvases\n * @returns\n */\nexport const legendCreator = (canvas) => {\n let LegendCls;\n const dataset = [];\n const axes = canvas.getRetinalAxes();\n\n Object.entries(axes).forEach((axisInfo) => {\n const scale = axisInfo[1][0];\n const scaleType = axisInfo[0];\n const scaleProps = canvas[scaleType]();\n\n if (scaleProps.field) {\n const {\n type,\n step\n } = scale.config();\n\n const stepMapper = typeof step === 'boolean' ? step : false;\n LegendCls = LEGEND_TYPE_MAP[`${type}-${stepMapper}-${scaleType}`];\n dataset.push({ scale, canvas, fieldName: scaleProps.field, LegendCls, scaleType });\n }\n });\n\n return dataset;\n};\n\n/**\n *\n *\n * @param {*} legendConfig\n * @param {*} canvases\n * @param {*} measurement\n * @param {*} prevLegends\n * @returns\n */\nexport const legendInitializer = (legendConfig, canvas, measurement, prevLegends) => {\n const legends = [];\n const {\n height,\n width,\n headerHeight\n } = measurement;\n const {\n position,\n align\n } = legendConfig;\n\n const legendInfo = legendCreator(canvas);\n\n legendInfo.forEach((dataInfo, index) => {\n let legend = {};\n\n const legendMeasures = {};\n const {\n LegendCls,\n scale,\n fieldName,\n scaleType\n } = dataInfo;\n const config = legendConfig[scaleType] || {};\n const title = config.title || {};\n title.text = title.text || fieldName;\n if (config.show) {\n config.position = position;\n config.align = align;\n\n if (prevLegends[index]) {\n legend = prevLegends[index].legend;\n } else {\n legend = LegendCls.create({\n labelManager: canvas._dependencies.smartlabel,\n cells: {\n AxisCell, TextCell\n }\n });\n }\n legendMeasures.maxHeight = align === VERTICAL ? (height - headerHeight) : height * 0.2;\n legendMeasures.maxWidth = align === HORIZONTAL ? width : width * 0.2;\n legendMeasures.width = Math.min(legendMeasures.maxWidth, config.width);\n legendMeasures.height = Math.min(legendMeasures.maxHeight, config.height);\n\n [PADDING, BORDER, MARGIN].forEach((e) => {\n legendMeasures[e] = config[e];\n });\n legend.scale(scale)\n .title(title)\n .fieldName(fieldName)\n .config(config)\n .metaData(canvas.composition().visualGroup.getGroupByData().project([fieldName]))\n .measurement(legendMeasures)\n .canvasAlias(canvas.alias())\n .setLegendMeasures();\n\n legends.push({ canvas, legend, scaleType });\n }\n });\n return legends;\n};\n\n/**\n *\n *\n * @param {*} legends\n * @param {*} legendConfig\n * @param {*} availableHeight\n * @param {*} availableWidth\n * @returns\n */\nexport const getLegendSpace = (legends, legendConfig, availableHeight, availableWidth) => {\n const legendMeasures = legends.map(legendInfo => legendInfo.legend.measurement());\n const legendSpace = { width: 0, height: 0 };\n\n legendMeasures.forEach((space) => {\n let height = 0;\n let width = 0;\n width = Math.min(space.width, space.maxWidth);\n height = Math.min(space.height, space.maxHeight);\n\n if (legendConfig.align === HORIZONTAL) {\n if (legendSpace.width + width > availableWidth) {\n legendSpace.width = availableWidth;\n legendSpace.height += height;\n } else {\n legendSpace.width += width;\n legendSpace.height = Math.max(legendSpace.height, height);\n }\n } else if (legendSpace.height + height > availableHeight) {\n legendSpace.height = height;\n legendSpace.width += width;\n } else {\n legendSpace.height += height;\n legendSpace.width = Math.max(legendSpace.width, width);\n }\n });\n if (legendConfig.align === HORIZONTAL) {\n legendSpace.width = availableWidth;\n }\n return legendSpace;\n};\n\n/**\n *\n *\n * @param {*} context\n * @param {*} headerHeight\n * @returns\n */\nexport const createLegend = (context, headerHeight, height, width) => {\n const measurement = {\n height,\n width,\n headerHeight\n };\n const { legend } = context.config();\n const { show, position } = legend;\n\n legend.classPrefix = context.config().classPrefix;\n const align = (position === LEFT || position === RIGHT) ? VERTICAL : HORIZONTAL;\n\n legend.show = show ? ((align === VERTICAL && width > 200) || (align === HORIZONTAL && height > 200)) : show;\n legend.align = align;\n return legendInitializer(legend, context, measurement, context.legends || []);\n};\n","import { mergeRecursive } from 'muze-utils';\nimport { arrangeComponents } from './component-resolver';\nimport { createHeaders } from './title-maker';\nimport { createLegend, getLegendSpace } from './legend-maker';\nimport { TOP, BOTTOM, LEFT, RIGHT } from '../constants';\n\n/**\n *\n *\n * @param {*} context\n * @returns\n */\nexport const prepareLayout = (layout, components, config, measurement) => {\n const {\n rows,\n columns,\n values,\n cornerMatrices\n } = components;\n\n const {\n topLeft,\n topRight,\n bottomLeft,\n bottomRight\n } = cornerMatrices;\n\n layout.measurement(measurement)\n .config(config)\n .matrices({\n top: [topLeft, columns[0], topRight],\n center: [rows[0], values, rows[1]],\n bottom: [bottomLeft, columns[1], bottomRight]\n })\n .triggerReflow();\n};\n\n/**\n *\n *\n * @param {*} context\n * @param {*} mount\n * @returns\n */\nexport const getRenderDetails = (context, mount) => {\n let layoutConfig = mergeRecursive({}, context.config());\n // Get height width of the mount point\n let { height, width } = mount.getBoundingClientRect();\n const heightAttr = context.height();\n const widthAttr = context.width();\n const visGroup = context.composition().visualGroup;\n const {\n isColumnSizeEqual,\n isRowSizeEqual,\n rows,\n columns,\n values\n } = visGroup.placeholderInfo();\n const {\n minWidth,\n minHeight,\n classPrefix,\n showHeaders,\n legend\n } = context.config();\n // Get title configuration\n const titleConfig = context.title()[1];\n // Get subtitle configuration\n const subtitleConfig = context.subtitle()[1];\n // Get legend position\n const legendPosition = legend.position;\n // Arrange components according to config\n const layoutArrangement = arrangeComponents(context);\n\n height = Math.floor(height);\n width = Math.floor(width);\n\n const availableHeightForCanvas = Math.max(heightAttr > 0 ? heightAttr : height, minHeight);\n const availableWidthForCanvas = Math.max(widthAttr > 0 ? widthAttr : width, minWidth);\n\n // Create headers and determine header height\n const { headers, headerHeight } = createHeaders(context, availableHeightForCanvas, availableWidthForCanvas);\n\n // Create legends and determine legend space\n const legends = createLegend(context, headerHeight, availableHeightForCanvas, availableWidthForCanvas);\n context._composition.legend = {};\n legends.forEach((e) => {\n context._composition.legend[e.scaleType] = e.legend;\n });\n\n const legendSpace = getLegendSpace(legends, legend, availableHeightForCanvas, availableWidthForCanvas);\n const legendWidth = (legendPosition === LEFT || legendPosition === RIGHT) ? legendSpace.width : 0;\n const legendHeight = (legendPosition === TOP || legendPosition === BOTTOM) ? legendSpace.height : 0;\n\n // Set components for layouting\n const components = {\n headers,\n legends,\n canvases: [context],\n rows,\n columns,\n values,\n cornerMatrices: visGroup.cornerMatrices()\n };\n const measurement = {\n mountSpace: {\n height,\n width\n },\n headerHeight,\n legendSpace,\n canvasWidth: availableWidthForCanvas,\n canvasHeight: availableHeightForCanvas,\n width: availableWidthForCanvas - legendWidth,\n height: availableHeightForCanvas - headerHeight - legendHeight,\n minUnitHeight: context.minUnitHeight(),\n minUnitWidth: context.minUnitWidth()\n };\n layoutConfig = mergeRecursive(layoutConfig, {\n classPrefix,\n showHeaders,\n border: mergeRecursive(visGroup.metaData().border, context.config().border),\n layoutArrangement,\n legend,\n title: titleConfig,\n subtitle: subtitleConfig,\n isColumnSizeEqual,\n isRowSizeEqual\n });\n return {\n layoutConfig,\n components,\n measurement\n };\n};\n","export const TITLE_CONFIG = {\n position: 'top',\n align: 'left',\n padding: 8\n};\n\nexport const SUB_TITLE_CONFIG = {\n position: 'top',\n align: 'left',\n padding: 16\n};\n","import { mergeRecursive, selectElement } from 'muze-utils';\nimport {\n ROWS,\n COLUMNS,\n COLOR,\n SHAPE,\n SIZE,\n DETAIL,\n LAYERS,\n TRANSFORM,\n MOUNT,\n TITLE,\n SUB_TITLE\n} from '../constants';\nimport { TITLE_CONFIG, SUB_TITLE_CONFIG } from './defaults';\n/**\n * @module\n * This is the local options semantics based on which setters getters are created and reactivity is initiated.\n * This local object is only valid for Canvas.\n * Canvas merges global and local object both to the model\n *\n * Format\n * PROPERTRY_NAME: {\n * value: // default value of the property,\n * meta: {\n * typeCheck: // The setter value will be checked using this. If the value is function then the setter value\n * // is passed as args.\n * typeExpected: // The output of typecheck action will be tested against this. Truthy value will set the\n * // value to the setter\n * sanitizaiton: // Need for sanitization before type is checked\n * }\n * }\n */\n\nexport const localOptions = {\n [ROWS]: {\n value: null,\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Array'\n }\n },\n [COLUMNS]: {\n value: null,\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Array'\n }\n },\n [COLOR]: {\n value: null,\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Object',\n sanitization: (config) => {\n if (typeof config === 'string') {\n return {\n field: config\n };\n }\n return config;\n }\n }\n },\n [SHAPE]: {\n value: null,\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Object',\n sanitization: (config) => {\n if (typeof config === 'string') {\n return {\n field: config\n };\n }\n return config;\n }\n }\n },\n [SIZE]: {\n value: null,\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Object',\n sanitization: (config) => {\n if (typeof config === 'string') {\n return {\n field: config\n };\n }\n return config;\n }\n }\n },\n [DETAIL]: {\n value: [],\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Array'\n }\n },\n\n [LAYERS]: {\n value: null,\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Array'\n }\n },\n [TRANSFORM]: {\n value: null,\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Object'\n }\n },\n [MOUNT]: {\n value: null,\n meta: {\n sanitization: (value) => {\n if (typeof value === 'string') {\n return selectElement(value).node();\n }\n return value;\n }\n }\n }\n};\n\nexport const canvasOptions = {\n [TITLE]: {\n value: [null, null],\n meta: {\n typeCheck: ['constructor', 'constructor'],\n typeExpected: ['Function', 'Object'],\n spreadParams: true,\n sanitization: [(title) => {\n if (typeof title === 'string') {\n const t = () => title;\n t._sanitized = true;\n return t;\n }\n return title;\n }, (titleConfig) => {\n const defConfig = mergeRecursive({}, TITLE_CONFIG);\n return mergeRecursive(defConfig, titleConfig);\n }]\n }\n },\n [SUB_TITLE]: {\n value: [null, null],\n meta: {\n typeCheck: ['constructor', 'constructor'],\n typeExpected: ['Function', 'Object'],\n spreadParams: true,\n sanitization: [(subtitle) => {\n if (typeof subtitle === 'string') {\n const sub = () => subtitle;\n sub._sanitized = true;\n return sub;\n }\n return subtitle;\n }, (subtitleConfig) => {\n const defConfig = mergeRecursive({}, SUB_TITLE_CONFIG);\n return mergeRecursive(defConfig, subtitleConfig);\n }]\n }\n }\n};\n","import { makeElement, selectElement } from 'muze-utils';\nimport { VERTICAL, HORIZONTAL, TOP, LEFT, RIGHT, BOTTOM } from '../constants';\n\n/**\n * Sets the rotation for all x axes if any axis has the rotation config set in the\n * entire view\n *\n * @param {Array} columns Column cells that contain the axes cells\n */\nconst setLabelRotationForAxes = (context) => {\n let rotation = 0;\n\n const xAxes = context.xAxes() || [];\n\n (() => {\n for (let i = 0; i < xAxes.length; i++) {\n for (let j = 0; j < xAxes[i].length; j++) {\n if (xAxes[i][j].config().labels.rotation !== 0) {\n rotation = xAxes[i][j].config().labels.rotation;\n return;\n }\n }\n }\n })();\n\n if (rotation) {\n xAxes.forEach((axes) => {\n axes.forEach((axis) => {\n axis.config({ labels: { rotation, smartTicks: false } });\n });\n });\n }\n};\n\n/**\n *\n *\n * @param {*} context\n * @param {*} mount\n * @returns\n */\nconst getSkeletons = (mount, layoutConfig, measurement) => {\n const {\n layoutArrangement,\n classPrefix\n } = layoutConfig;\n const {\n headers,\n legends\n } = layoutArrangement;\n const {\n canvasWidth,\n canvasHeight\n } = measurement;\n const container = selectElement(mount);\n const components = {};\n const mountPoint = makeElement(container, 'div', [1], `${classPrefix}-viz`)\n .style('width', `${canvasWidth}px`)\n .style('height', `${canvasHeight}px`);\n const containers = mountPoint\n .selectAll(`.${classPrefix}-container`)\n .data(headers);\n containers.exit().remove();\n const containersEnter = containers.enter().append('div');\n\n const mergedContainer = containersEnter.merge(containers)\n .attr('class', `${classPrefix}-container`)\n .style('width', `${canvasWidth}px`)\n .style('padding', `${null}px`)\n .style('margin', null)\n .each(function (type) {\n components[type] = selectElement(this).classed(`${classPrefix}-${type}-container`, true);\n });\n const innerContainer = mergedContainer\n .selectAll(`.${classPrefix}-inner-container`)\n .data((d) => {\n if (d === 'group') {\n return legends;\n } return [];\n });\n innerContainer.exit().remove();\n const innerContainerEnter = innerContainer.enter().append('div');\n\n innerContainerEnter\n .merge(innerContainer)\n .attr('class', `${classPrefix}-inner-container`)\n .style('width', 'auto')\n .style('height', 'auto')\n .each(function (layoutType) {\n components[layoutType] = selectElement(this)\n .classed(`${classPrefix}-${layoutType}-container`, true);\n });\n return components;\n};\n\n/**\n *\n *\n * @param {*} context\n * @param {*} container\n * @param {*} legendComponents\n */\nconst renderLegend = (legendConfig, container, legendComponents, measurement) => {\n const sectionComponents = [];\n const { legendSpace, headerHeight, height, width } = measurement;\n const { legend, classPrefix } = legendConfig;\n const { position } = legend;\n const legendMount = makeElement(container, 'div', [legendComponents], `${classPrefix}-inner-content`, {}, d => d);\n legendMount.classed(`${classPrefix}-legend`, true);\n const align = (position === LEFT || position === RIGHT) ? VERTICAL : HORIZONTAL;\n const legWidth = align === VERTICAL ? legendSpace.width : width;\n const legHeight = align === VERTICAL ? height - headerHeight : legendSpace.height;\n\n [container, legendMount].forEach((elem) => {\n elem.style('width', `${Math.floor(legWidth)}px`)\n .style('height', `${legHeight}px`)\n .style('float', LEFT);\n });\n\n if (align === VERTICAL) {\n let sections = -1;\n let currHeight = legHeight;\n let currWidth = 0;\n\n legendComponents.forEach((legendInfo) => {\n const leg = legendInfo.legend;\n if (leg.measurement().height > currHeight) {\n sections++;\n currWidth = 0;\n currHeight = legHeight;\n } else {\n sections < 0 && sections++;\n }\n sectionComponents[sections] = sectionComponents[sections] || [];\n currHeight -= Math.min(leg.measurement().height, currHeight);\n currWidth = Math.max(Math.min(leg.measurement().width, leg.measurement().maxWidth), currWidth);\n sectionComponents[sections].push({\n legend: leg,\n legendHeight: legHeight,\n legendWidth: currWidth\n });\n });\n\n const mount = makeElement(legendMount, ['div'], sectionComponents, `${classPrefix}-legend-section`)\n .each((d, i) => selectElement(this).classed(`${classPrefix}-legend-section-${i}`, true))\n .classed(`${classPrefix}-legend-vertical-section`, true)\n .style('width', d => `${d[0].legendWidth}px`);\n makeElement(mount, ['div'], d => d, `${classPrefix}-legend-components`, {}, d => d.legend.id())\n .each(function (d) {\n d.legend.mount(this);\n })\n .style('width', d => `${d.legendWidth}px`);\n } else {\n const mount = makeElement(legendMount, 'div', [1], `${classPrefix}-legend-section`)\n .classed(`${classPrefix}-legend-horizontal-section`, true)\n .classed(`${classPrefix}-legend-section-${0}`, true)\n .style('width', `${legWidth}px`);\n\n makeElement(mount, 'div', legendComponents, `${classPrefix}-legend-components`, {}, d => d.legend.id())\n .each(function (d) { d.legend.mount(this); })\n .style('width', d => `${d.legend.measurement().width}px`);\n }\n};\n\n/**\n *\n *\n * @param {*} context\n * @param {*} container\n * @param {*} type\n * @param {*} headers\n */\nconst renderHeader = (layoutConfig, container, type, headers) => {\n const headerCell = headers[`${type}Cell`];\n const config = layoutConfig[`${type}`];\n const { position, align, padding } = config;\n const sel = container\n .selectAll(`.${layoutConfig.classPrefix}-inner-container`)\n .data([type]);\n sel.exit().remove();\n const selEnter = sel.enter().append('div');\n\n const cont = selEnter.merge(sel);\n cont.classed(`${layoutConfig.classPrefix}-inner-container`, true);\n\n headerCell && headerCell.render(cont.node());\n\n cont.selectAll('div').classed(`${layoutConfig.classPrefix}-inner-content`, true);\n cont.style('width', `${100}%`);\n\n if (config && headerCell) {\n cont.style('float', LEFT)\n .style('text-align', align)\n .style(`padding-${position === TOP ? BOTTOM : TOP}`, `${padding}px`);\n }\n};\n\n/**\n *\n *\n * @param {*} context\n * @param {*} shifter\n */\nconst shiftHeaders = (config, shifter, measurement, mount) => {\n const { classPrefix, title, subtitle, legend } = config;\n const { legendSpace } = measurement;\n const { position } = legend;\n\n shifter += position === LEFT ? legendSpace.width : 0;\n title && selectElement(mount).select(`.${classPrefix}-title-container`)\n .style('width', title.align === LEFT ? `calc(100% - ${shifter}px` : '100%')\n .style('margin-left', title.align === LEFT ? `${shifter}px` : 0);\n subtitle && selectElement(mount).select(`.${classPrefix}-subtitle-container`)\n .style('width', subtitle.align === LEFT ? `calc(100% - ${shifter}px` : '100%')\n .style('margin-left', subtitle.align === LEFT ? `${shifter}px` : 0);\n\n selectElement(mount).select(`.${classPrefix}-legend-horizontal-section`)\n .style('margin-left', `${shifter}px`)\n .style('width', `${legendSpace.width - shifter}px`)\n .selectAll(`.${classPrefix}-legend-body, .${classPrefix}-legend-title`)\n .style('max-width', `${legendSpace.width - shifter}px`);\n selectElement(mount).select(`.${classPrefix}-legend-vertical-section`)\n .style('margin-left', null)\n .selectAll(`.${classPrefix}-legend-body, .${classPrefix}-legend-title`)\n .style('max-width', null);\n};\n\n/**\n *\n *\n * @param {*} mountPoint\n * @param {*} measurement\n * @param {*} classPrefix\n * @returns\n */\nconst prepareGridContainer = (mountPoint, measurement, classPrefix, alias) => {\n if (!mountPoint) {\n return this;\n }\n\n const {\n height,\n width\n } = measurement;\n // Create container for the layout\n\n const sel = selectElement(mountPoint)\n .selectAll(`.${classPrefix}-inner-content`)\n .data(['layout'], d => d);\n sel.exit().remove();\n const selEnter = sel.enter().append('div');\n\n const container = selEnter.merge(sel)\n .attr('class', `${classPrefix}-inner-content`)\n .classed(`${classPrefix}-grid-layout`, true)\n .attr('id', `${classPrefix}-grid-layout-${alias}`)\n .style('height', `${height}px`)\n .style('padding', null)\n .style('width', `${Math.ceil(width)}px`);\n // Mount for matrices\n const innerSel = container.selectAll(`.${classPrefix}-layout-grid-container`)\n .data(['layout2']);\n innerSel.exit().remove();\n const innerSelEnter = innerSel.enter().append('div');\n\n const mount = innerSelEnter.merge(innerSel);\n mount.classed(`${classPrefix}-layout-grid-container`, true)\n .attr('id', `${classPrefix}-layout-grid-container-${alias}`)\n .style('height', `${height}px`)\n .style('width', `${Math.ceil(width)}px`);\n\n return {\n mount,\n container\n };\n};\n\n/**\n *\n *\n * @param {*} context\n * @param {*} components\n * @param {*} layoutConfig\n * @param {*} measurement\n */\nexport const renderComponents = (context, components, layoutConfig, measurement) => {\n const mountPoint = context.mount();\n const {\n headers,\n legends\n } = components;\n const {\n classPrefix\n } = layoutConfig;\n const {\n title,\n legend,\n subtitle,\n layout\n } = getSkeletons(mountPoint, layoutConfig, measurement);\n const {\n mount\n } = prepareGridContainer(layout.node(), measurement, classPrefix, context.alias());\n const padding = context.layout().getViewInformation().layoutDimensions.viewWidth[0];\n measurement.padding = padding;\n setLabelRotationForAxes(context);\n\n // Render layout\n context.layout().renderGrid(mount);\n context.once('layer.drawn').then(() => {\n renderHeader(layoutConfig, title, 'title', headers);\n renderHeader(layoutConfig, subtitle, 'subtitle', headers);\n renderLegend(layoutConfig, legend, legends, measurement);\n shiftHeaders(layoutConfig, padding, measurement, mountPoint);\n });\n context.composition().visualGroup.matrixInstance().value.each((el) => {\n el.valueOf().parentContainer(layout.node());\n });\n};\n","import { isEqual } from 'muze-utils';\nimport { ROWS, COLUMNS, COLOR, SHAPE, SIZE, MOUNT, DETAIL, DATA, CONFIG } from '../constants';\nimport { canvasOptions } from './local-options';\n\n/**\n * Instantiate high level components. Canvas knows what all high level component it has.\n * @nice-to-have dynamic high level components.\n * - Is it even required ?\n * - Reactive to source (canvas) streaming ?\n * @param {*} context Canvas instance\n * @return {Object.fArray>} Arrays of Title, visualGroup, Legend\n */\nexport const initCanvas = (context) => {\n const reg = context._registry.components;\n\n return [new reg.VisualGroup(context._registry, context.dependencies())];\n};\n\n/**\n *\n *\n * @memberof Canvas\n */\nexport const dispatchProps = (context) => {\n const lifeCycleManager = context.dependencies().lifeCycleManager;\n lifeCycleManager.notify({ client: context, action: 'beforeupdate' });\n const visualGroup = context.composition().visualGroup;\n\n visualGroup.lockModel();\n const allOptions = context._allOptions;\n for (const key in allOptions) {\n const value = context[key]();\n if (value !== null) {\n visualGroup[key] && visualGroup[key](value);\n }\n }\n visualGroup.unlockModel();\n\n context._cachedProps = {};\n lifeCycleManager.notify({ client: context, action: 'initialized' });\n lifeCycleManager.notify({ client: context, action: 'updated' });\n};\n\n/**\n *\n *\n */\nexport const setupChangeListener = (context) => {\n const store = context._store;\n\n store.registerImmediateListener(MOUNT, () => {\n const allOptions = Object.keys(context._allOptions);\n const props = [...allOptions, ...Object.keys(canvasOptions)];\n let equalityChecker = () => false;\n store.registerChangeListener(props, (...params) => {\n const updateProps = props.every((option, i) => {\n switch (option) {\n case ROWS:\n case COLUMNS:\n case DETAIL:\n equalityChecker = isEqual('Array');\n break;\n\n case SHAPE:\n case SIZE:\n case COLOR:\n case DATA:\n case CONFIG:\n equalityChecker = isEqual('Object');\n break;\n default:\n equalityChecker = () => true;\n break;\n }\n const oldVal = params[i][0];\n const newVal = params[i][1];\n\n return equalityChecker(oldVal, newVal);\n });\n // inform attached board to rerender\n !updateProps && dispatchProps(context);\n context.render();\n }, true);\n });\n};\n\nexport const applyInteractionPolicy = (policies, firebolt) => {\n const canvas = firebolt.context;\n const visualGroup = canvas.composition().visualGroup;\n const valueMatrix = visualGroup.composition().matrices.value;\n policies.forEach(policy => policy(valueMatrix, firebolt));\n};\n","import {\n getDataModelFromIdentifiers,\n FieldType,\n mergeRecursive\n} from 'muze-utils';\n\nimport { applyInteractionPolicy } from './helper';\n\nconst defaultInteractionPolicy = (valueMatrix, firebolt) => {\n const isMeasure = field => field.type() === FieldType.MEASURE;\n const canvas = firebolt.context;\n const visualGroup = canvas.composition().visualGroup;\n const xFields = [].concat(...visualGroup.getFieldsFromChannel('x'));\n const yFields = [].concat(...visualGroup.getFieldsFromChannel('y'));\n const colDim = xFields.every(field => field.type() === FieldType.DIMENSION);\n const fieldInf = visualGroup.resolver().getAllFields();\n const rowFacets = fieldInf.rowFacets;\n const colFacets = fieldInf.colFacets;\n valueMatrix.each((cell) => {\n const unitFireBolt = cell.valueOf().firebolt();\n\n if (!(xFields.every(isMeasure) && yFields.every(isMeasure))) {\n const facetFields = cell.valueOf().facetByFields()[0];\n const unitColFacets = facetFields.filter(d => colFacets.findIndex(v => v.equals(d)) !== -1);\n const unitRowFacets = facetFields.filter(d => rowFacets.findIndex(v => v.equals(d)) !== -1);\n let propFields;\n if (colDim) {\n propFields = unitColFacets.map(d => `${d}`);\n } else {\n propFields = unitRowFacets.map(d => `${d}`);\n }\n\n unitFireBolt.propagateWith('*', propFields, true);\n }\n });\n};\n\nconst defaultCrossInteractionPolicy = {\n behaviours: {\n '*': (propagationPayload, context) => {\n const propagationCanvasAlias = propagationPayload.sourceCanvas;\n const canvasAlias = context.parentAlias();\n return propagationCanvasAlias ? canvasAlias === propagationCanvasAlias : true;\n }\n },\n sideEffects: {\n tooltip: (propagationPayload, context) => {\n const propagationUnit = propagationPayload.sourceUnit;\n const propagationCanvas = propagationPayload.sourceCanvas;\n const unitId = context.id();\n const canvasAlias = context.parentAlias();\n if (propagationCanvas) {\n return propagationCanvas !== canvasAlias ? true : unitId === propagationUnit;\n }\n return true;\n }\n }\n};\n\nexport default class GroupFireBolt {\n constructor (context) {\n this.context = context;\n this._interactionPolicy = this.constructor.defaultInteractionPolicy();\n this._crossInteractionPolicy = this.constructor.defaultCrossInteractionPolicy();\n this.context.once('canvas.updated').then(() => {\n applyInteractionPolicy([this._interactionPolicy], this);\n const crossInteractionPolicy = this._crossInteractionPolicy;\n const behaviours = crossInteractionPolicy.behaviours;\n const sideEffects = crossInteractionPolicy.sideEffects;\n const visualGroup = context.composition().visualGroup;\n const valueMatrix = visualGroup.composition().matrices.value;\n valueMatrix.each((cell) => {\n const unitFireBolt = cell.valueOf().firebolt();\n for (const key in behaviours) {\n unitFireBolt.changeBehaviourStateOnPropagation(key, behaviours[key]);\n }\n for (const key in sideEffects) {\n unitFireBolt.changeSideEffectStateOnPropagation(key, sideEffects[key]);\n }\n });\n });\n }\n\n static defaultInteractionPolicy () {\n return defaultInteractionPolicy;\n }\n\n static defaultCrossInteractionPolicy () {\n return defaultCrossInteractionPolicy;\n }\n\n interactionPolicy (...policy) {\n if (policy.length) {\n this._interactionPolicy = policy[0] || this.constructor.defaultInteractionPolicy();\n return this;\n }\n return this._interactionPolicy;\n }\n\n crossInteractionPolicy (...policy) {\n if (policy.length) {\n this._crossInteractionPolicy = mergeRecursive(mergeRecursive({},\n this.constructor.defaultCrossInteractionPolicy()), policy[0] || {});\n return this;\n }\n return this._crossInteractionPolicy;\n }\n\n dispatchBehaviour (behaviour, payload) {\n const propPayload = Object.assign(payload);\n const criteria = propPayload.criteria;\n const data = this.context.data();\n\n propPayload.action = behaviour;\n const model = getDataModelFromIdentifiers(data, criteria);\n data.propagate(model, propPayload, {\n sourceId: this.context.alias()\n });\n return this;\n }\n\n}\n","import { GridLayout } from '@chartshq/layout';\nimport { transactor, Store, getUniqueId } from 'muze-utils';\nimport { RETINAL } from '../constants';\nimport TransactionSupport from '../transaction-support';\nimport { getRenderDetails, prepareLayout } from './layout-maker';\nimport { localOptions, canvasOptions } from './local-options';\nimport { renderComponents } from './renderer';\nimport GroupFireBolt from './firebolt';\nimport options from '../options';\nimport { initCanvas, setupChangeListener } from './helper';\n\n/**\n * This is the primary class which manages highlevel components like visualGroup, Titles, Legend, Extensions\n * (in future). Global level Muze functionality is subset this. Every time user works with an instance of\n * canvas in dom which provides instance level settings.\n *\n */\nexport default class Canvas extends TransactionSupport {\n\n /**\n * Creates reactive property accessors.\n * - data\n * - height\n * - width\n * - config\n * This configs are retrieved from options.\n */\n constructor (globalDependencies) {\n super();\n\n this._allOptions = Object.assign({}, options, localOptions);\n this._registry = {};\n this._composition = {};\n this._cachedProps = {};\n this._alias = null;\n this._renderedResolve = null;\n this._renderedPromise = new Promise((resolve) => {\n this._renderedResolve = resolve;\n });\n this._composition.layout = new GridLayout();\n this._store = new Store({});\n\n // Setters and getters will be mounted on this. The object will be mutated.\n const [, store] = transactor(this, options, this._store.model);\n transactor(this, localOptions, store);\n transactor(this, canvasOptions, store);\n this.dependencies(Object.assign({}, globalDependencies, this._dependencies));\n this.firebolt(new GroupFireBolt(this));\n this.alias(`canvas-${getUniqueId()}`);\n this.title('', {});\n this.subtitle('', {});\n this.legend({});\n this.color({});\n this.shape({});\n this.size({});\n setupChangeListener(this);\n }\n\n /**\n *\n *\n * @readonly\n * @memberof Canvas\n */\n layout (...params) {\n if (params.length) {\n return this;\n }\n return this.composition().layout;\n }\n\n /**\n *\n *\n * @readonly\n * @memberof Canvas\n */\n composition (...params) {\n if (params.length) {\n return this;\n }\n return this._composition;\n }\n\n done () {\n return this._renderedPromise;\n }\n\n /**\n *\n *\n * @param {*} params\n * @returns\n * @memberof Canvas\n */\n alias (...params) {\n if (params.length) {\n const visualGroup = this.composition().visualGroup;\n this._alias = params[0];\n visualGroup && visualGroup.alias(this.alias());\n return this;\n }\n return this._alias;\n }\n\n /**\n * Creates an instance initiated with given settings.\n *\n * @param {Object} initialSettings Initial settings to be populated in the model\n * @param {Object} regEntry newly created instance with the initial settings\n * @param {Object} globalDependencies dependencies which will be created only once in the page\n *\n * @return {Object} newly created instance with the initial settings\n */\n static withSettings (initialSettings, regEntry, globalDependencies) {\n const instance = new Canvas(globalDependencies);\n\n for (const key in initialSettings) {\n instance[key](initialSettings[key]);\n }\n // set registry for instance\n instance.registry(regEntry);\n return instance;\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof Canvas\n */\n static formalName () {\n return 'canvas';\n }\n\n /**\n *\n *\n * @readonly\n * @memberof Canvas\n */\n firebolt (...firebolt) {\n if (firebolt.length) {\n this._firebolt = firebolt[0];\n return this;\n }\n return this._firebolt;\n }\n\n /**\n * Registry peoperty accessor\n *\n * @param {Object} reg plain old javascript object keyvalue pairs. Key containing module name and value contains\n * module definition class. The reg object has to be flat object of level 1.\n */\n registry (...params) {\n if (params.length) {\n const components = Object.assign({}, params[0].components);\n const componentSubRegistry = Object.assign({}, params[0].componentSubRegistry);\n\n this._registry = { components, componentSubRegistry };\n const initedComponents = initCanvas(this);\n // @todo is it okay to continue this tight behaviour? If not use a resolver to resolve diff component type.\n this._composition.visualGroup = initedComponents[0];\n\n this.composition().visualGroup.alias(this.alias());\n return this;\n }\n return this._registry;\n }\n\n /*\n * Prepare dependencies for top level elements\n */\n dependencies (...param) {\n if (param.length) {\n this._dependencies = param[0];\n return this;\n }\n // @todo prepare dependencies here.\n return this._dependencies;\n }\n\n /**\n *\n *\n * @param {*} lifeCycles\n * @returns\n * @memberof Canvas\n */\n lifeCycle (lifeCycles) {\n const lifeCycleManager = this.dependencies().lifeCycleManager;\n if (lifeCycles) {\n lifeCycleManager.register(lifeCycles);\n return this;\n }\n return lifeCycleManager;\n }\n\n /**\n *\n *\n * @readonly\n * @memberof Canvas\n */\n legend (...params) {\n if (params.length) {\n return this;\n }\n return this.composition().legend;\n }\n\n /**\n *\n *\n * @param {*} eventName\n * @returns\n * @memberof Canvas\n */\n once (eventName) {\n const lifeCycleManager = this.dependencies().lifeCycleManager;\n return lifeCycleManager.retrieve(eventName);\n }\n\n /**\n * Internal function to trigger render, this method is cognizant of all the properties of the core modules and\n * establish a passive reactivity. Passive reactivity is not always a bad thing :)\n * @internal\n */\n render () {\n const mount = this.mount();\n const visGroup = this.composition().visualGroup;\n const lifeCycleManager = this.dependencies().lifeCycleManager;\n // Get render details including arrangement and measurement\n const { components, layoutConfig, measurement } = getRenderDetails(this, mount);\n\n lifeCycleManager.notify({ client: this, action: 'beforedraw' });\n // Prepare the layout by triggering the matrix calculation\n prepareLayout(this.layout(), components, layoutConfig, measurement);\n // Render each component\n renderComponents(this, components, layoutConfig, measurement);\n // Update life cycle\n lifeCycleManager.notify({ client: this, action: 'drawn' });\n const promises = [];\n visGroup.matrixInstance().value.each((el) => {\n promises.push(el.valueOf().done());\n });\n Promise.all(promises).then(() => {\n this._renderedResolve();\n });\n }\n\n /**\n *\n *\n * @returns\n * @memberof Canvas\n */\n xAxes () {\n return this.composition().visualGroup.getAxes('x');\n }\n\n /**\n *\n *\n * @returns\n * @memberof Canvas\n */\n yAxes () {\n return this.composition().visualGroup.getAxes('y');\n }\n\n /**\n *\n *\n * @returns\n * @memberof Canvas\n */\n getRetinalAxes () {\n const visualGroup = this.composition().visualGroup;\n return visualGroup.getAxes(RETINAL);\n }\n}\n","import { cellRegistry, SimpleCell } from '@chartshq/visual-cell';\nimport { VisualUnit } from '@chartshq/visual-unit';\nimport { layerRegistry } from '@chartshq/visual-layer';\nimport { SimpleGroup, VisualGroup } from '@chartshq/visual-group';\n\nexport const COMPONENTS = {\n VisualGroup,\n VisualUnit\n};\nexport const SUBREGISTRIES = {\n cellRegistry,\n layerRegistry\n};\nexport const INTERFACES = {\n SimpleGroup,\n SimpleCell\n};\n\n","import { DEFAULT_LAYERS } from './defaults';\n\nexport default () => {\n const reg = DEFAULT_LAYERS;\n const regObj = {\n set: (key, def) => {\n reg[key] = def;\n return regObj;\n },\n get: () => reg\n };\n return regObj;\n};\n","import {\n transactor,\n Smartlabel,\n enableChainedTransaction,\n LifeCycleManager,\n DataModel,\n makeElement,\n getClientPoint,\n selectElement,\n getEvent,\n require,\n DateTimeFormatter\n} from 'muze-utils';\n\nimport {\n SurrogateSideEffect,\n SpawnableSideEffect,\n sideEffects,\n PersistentBehaviour,\n GenericBehaviour,\n VolatileBehaviour,\n behaviouralActions,\n GenericSideEffect\n} from '@chartshq/muze-firebolt';\nimport { layerFactory } from '@chartshq/visual-layer';\nimport pkg from '../package.json';\nimport * as operators from './operators';\nimport { actionModel as ActionModel } from './action-model';\nimport options from './options';\nimport { Canvas } from './canvas';\nimport { COMPONENTS, SUBREGISTRIES } from './default-registry';\nimport './muze.scss';\n\n// Cache singleton instances which should be included only once in a page\nconst globalCache = {};\nconst defaultRegistry = COMPONENTS;\n\nconst overrideRegistryDefinitions = (overrideRegistry, registry) => {\n for (const prop in overrideRegistry) {\n registry.set(prop, overrideRegistry[prop]);\n }\n};\n\n/**\n * Entry point to renderer. Initializes an environment with settings and registries for canvas. This is a simple wrapper\n * over {@link Canvas} which enables common configuration passing to multiple such canvases.\n *\n * Everytime `muze()` is called it creates an environment. These environment supports subset of APIs of Canvas. If\n * common configuration is used to render multiple canvases then it can be set directly in the env. Like if data is\n * common across all the visulization then its better to set the data in env. When a canvas is created it receives all\n * those configuration from env.\n *\n * ```\n * // Creates an environment\n * const env = muze()\n * // Set data property in environment, so that all the canvas created from the same environment gets this data\n * // automatically\n * env.data(dm);\n * // Creates canvas, by default env pushes data to canvas instance\n * const canvas = env.canvas();\n * ```\n *\n * If a property is set on both environment and canvas instance, property set on canvas instance gets more priority.\n *\n * @public\n * @module muze\n * @namespace Muze\n *\n * @return {Env} Instance of an environment\n */\nconst muze = () => {\n // Setters and getters will be mounted on this. Object will be mutated.\n const [env, globalStore] = transactor({}, options);\n const components = Object.assign({}, COMPONENTS);\n const componentSubRegistryDef = Object.assign(SUBREGISTRIES);\n const componentSubRegistry = {};\n\n for (const prop in componentSubRegistryDef) {\n componentSubRegistry[prop] = componentSubRegistryDef[prop]();\n }\n\n // Apart form the setter getter, an instance method is injected to create real renderer instances\n env.canvas = () => {\n // Create a canvas instance with this settings\n const settings = globalStore.serialize();\n const canvas = Canvas.withSettings(settings, { /* registry */\n components,\n componentSubRegistry\n }, env.globalDependencies());\n\n // Whenever settings is changed canvas is updated\n enableChainedTransaction(globalStore, canvas, Object.keys(settings));\n\n return canvas;\n };\n\n // Global dependencies for for compositions. Only one copy of the same should be in the page\n env.globalDependencies = () => {\n if (!globalCache.smartlabel) {\n globalCache.smartlabel = new Smartlabel(1, 'body');\n }\n return {\n smartlabel: globalCache.smartlabel,\n lifeCycleManager: new LifeCycleManager()\n };\n };\n\n // Retrieves global settings. This getter is readonly so that user can't change this as change should happen\n // only from setter to avoid unwanted sync issues.\n env.settings = () => globalStore.serialize();\n\n env.registry = (...overrideRegistry) => {\n // Selectively copy the properties from COMPONENTS\n if (overrideRegistry.length) {\n for (const prop in overrideRegistry) {\n if (prop in defaultRegistry) {\n components[prop] = overrideRegistry[prop];\n }\n }\n return env;\n }\n return components;\n };\n\n env.cellRegistry = (...overrideRegistry) => {\n const cellRegistry = componentSubRegistry.cellRegistry;\n if (overrideRegistry.length) {\n overrideRegistryDefinitions(overrideRegistry[0], cellRegistry);\n return env;\n }\n return cellRegistry.get();\n };\n\n env.layerRegistry = (...overrideRegistry) => {\n const layerRegistry = componentSubRegistry.layerRegistry;\n if (overrideRegistry.length) {\n overrideRegistryDefinitions(overrideRegistry[0], layerRegistry);\n return env;\n }\n return layerRegistry.get();\n };\n\n return env;\n};\n\nconst SideEffects = {\n sideEffects,\n standards: {\n SurrogateSideEffect,\n SpawnableSideEffect,\n GenericSideEffect\n }\n};\n\nconst Behaviours = {\n behaviouralActions,\n standards: {\n GenericBehaviour,\n PersistentBehaviour,\n VolatileBehaviour\n }\n};\n\nmuze.DataModel = DataModel;\nmuze.version = pkg.version;\nmuze.SideEffects = SideEffects;\nmuze.ActionModel = ActionModel;\nmuze.layerFactory = layerFactory;\nmuze.Operators = operators;\nmuze.Behaviours = Behaviours;\nmuze.utils = {\n getClientPoint,\n getEvent,\n makeElement,\n selectElement,\n DateTimeFormatter,\n require\n};\n\nexport default muze;\n"],"sourceRoot":""} \ No newline at end of file diff --git a/examples/js/sample.js b/examples/js/sample.js index 6362d1a4..09984ea4 100644 --- a/examples/js/sample.js +++ b/examples/js/sample.js @@ -77,7 +77,7 @@ d3.json('../data/cars.json', (data) => { .rows(['Cylinders', 'Origin']) .columns(['Miles_per_Gallon', 'Horsepower']) .data(rootData) - .color('Origin') + .color('Acceleration') .width(600) .height(500) .config({ @@ -98,11 +98,16 @@ d3.json('../data/cars.json', (data) => { const lineChart = env .canvas() - .rows(['Miles_per_Gallon']) + .rows([['Miles_per_Gallon'], ['Acceleration', 'Horsepower', 'Horsepower']]) .columns(['Year']) .data(rootData) - .width(400) - .height(300) + .width(450) + .height(700) + .color({ + field: 'Acceleration', + step: true, + stops: 5 + }) .config({ axes: { y: { @@ -184,6 +189,11 @@ d3.json('../data/cars.json', (data) => { return tooltipData; } } + }, + legend: { + color: { + position: 'bottom' + } } }) .title('Change of Avg Mileage of Cars over 12 Years', { @@ -203,21 +213,29 @@ d3.json('../data/cars.json', (data) => { const pieChart = env .canvas() - .rows([]) - .columns([]) + .rows(['Origin']) + .columns(['Acceleration']) .data(rootData) - .width(300) - .height(300) - .layers([ - { - mark: 'arc', - encoding: { - angle: 'CountVehicle' + .width(600) + .height(600) + // .layers([ + // { + // mark: 'arc', + // encoding: { + // angle: 'CountVehicle' + // } + // } + // ]) + .config({ legend: { + position: 'bottom', + color: { + title: { + // text: 'Country of Origin of Cars' } } - ]) - .config({ legend: { position: 'bottom' } }) + } }) .color('Origin') + .shape('Origin') .title('Count of Cars by Country', { align: 'center' }) diff --git a/packages/muze-legend/src/legend/defaults.js b/packages/muze-legend/src/legend/defaults.js index 03004e1f..8cbb0bd0 100644 --- a/packages/muze-legend/src/legend/defaults.js +++ b/packages/muze-legend/src/legend/defaults.js @@ -31,7 +31,8 @@ export const LEGEND_TITLE = { export const DEFAULT_CONFIG = { classPrefix: 'muze', - + borderStyle: 'solid', + borderColor: 'rgba(0,0,0,0)', formatter: { bounds: { lower: 'less than', diff --git a/packages/muze-legend/src/legend/legend-helper.js b/packages/muze-legend/src/legend/legend-helper.js index f1c06f6a..7ef20c21 100644 --- a/packages/muze-legend/src/legend/legend-helper.js +++ b/packages/muze-legend/src/legend/legend-helper.js @@ -50,19 +50,22 @@ export const getInterpolatedData = (domain, steps) => { * @param {*} measurement * @param {*} classPrefix */ -export const titleCreator = (container, title, measurement, config) => - makeElement(container, 'div', [1], `${config.classPrefix}-legend-title`) - .style(WIDTH, '100%') - .style(HEIGHT, `${measurement.height}px`) - .style('padding-left', `${measurement.padding}px`) - .style('padding-right', `${measurement.padding}px`) - .style('border-bottom-width', `${measurement.border}px`) - .style('text-align', title.orientation instanceof Function ? - title.orientation(config.position) : title.orientation) - .text(title.text) - .node(); +export const titleCreator = (container, title, measurement, config) => { + const titleContainer = makeElement(container, 'table', [1], `${config.classPrefix}-legend-title`) + .style(WIDTH, `${measurement.width}px`) + .style(HEIGHT, `${measurement.height}px`) + .style('border-bottom', `${measurement.border}px ${config.borderStyle} ${config.borderColor}`) + .style('text-align', title.orientation instanceof Function ? + title.orientation(config.position) : title.orientation); + return makeElement(titleContainer, 'td', [1], `${config.classPrefix}-legend-title-text`) + .style(WIDTH, `${measurement.width}px`) + .style(HEIGHT, '100%') + .style('padding', `${measurement.padding}px`) + .text(title.text) + .node(); +}; -/** + /** * * * @param {*} data @@ -180,7 +183,6 @@ export const computeItemSpaces = (config, measures, data) => { itemSpaces.push(itemSpace); iconSpaces.push(iconSpace); }); - itemSpaces.forEach((itemSpace, i) => { if (align === 'horizontal') { itemSpace.height = totalHeight; @@ -194,7 +196,7 @@ export const computeItemSpaces = (config, measures, data) => { itemSpaces[i].width = maxIconWidth; labelSpaces[i].width = maxIconWidth; } - totalWidth = Math.max(totalWidth + itemSpaces[i].width, titleWidth); + totalWidth = Math.max(totalWidth + itemSpaces[i].width); } else { itemSpace.width = Math.max(totalWidth, maxWidth); if (textOrientation === TOP || textOrientation === BOTTOM) { @@ -205,10 +207,11 @@ export const computeItemSpaces = (config, measures, data) => { iconSpaces[i].width = maxIconWidth; itemSpaces[i].width = labelSpaces[i].width + maxIconWidth; labelSpaces[i].width = maxItemSpaces.width - maxIconWidth; - totalWidth = Math.max(totalWidth, itemSpace.width, titleWidth) + effPadding; + totalWidth = Math.max(totalWidth, itemSpace.width) + effPadding; } } }); + totalWidth = Math.max(totalWidth, titleWidth); totalHeight += titleHeight + effPadding; return { totalHeight, totalWidth, itemSpaces, iconSpaces, maxItemSpaces, maxIconWidth }; diff --git a/packages/muze-legend/src/legend/simple-legend.js b/packages/muze-legend/src/legend/simple-legend.js index 6a0020b7..2ebea116 100644 --- a/packages/muze-legend/src/legend/simple-legend.js +++ b/packages/muze-legend/src/legend/simple-legend.js @@ -186,8 +186,8 @@ export default class SimpleLegend { this.data(this.dataFromScale(this.scale())); // Get space occupied by title const titleSpace = this.getTitleSpace(); - const titleHeight = titleSpace.height > 0 ? titleSpace.height * 1.25 : 0; - const titleWidth = titleSpace.width; + const titleHeight = titleSpace.height > 0 ? titleSpace.height + effPadding : 0; + const titleWidth = titleSpace.width + effPadding; // Get space occupied by labels const labelSpaces = this.getLabelSpaces(effPadding, align); @@ -233,11 +233,15 @@ export default class SimpleLegend { * @memberof Legend */ renderTitle (container) { - const { titleSpaces, border, padding } = this.measurement(); + const { titleSpaces, border, padding, width } = this.measurement(); + const { borderStyle, borderColor } = this.config(); return titleCreator(container, this.title(), { height: titleSpaces.height, + width, border, - padding + padding, + borderStyle, + borderColor }, this.config()); } @@ -251,7 +255,9 @@ export default class SimpleLegend { render () { const firebolt = this.firebolt(); const { - classPrefix + classPrefix, + borderStyle, + borderColor } = this.config(); const { maxWidth, @@ -269,7 +275,7 @@ export default class SimpleLegend { legendContainer.style('width', `${Math.min(maxWidth, width) - margin * 2}px`) .style('height', `${Math.min(maxHeight, height) - margin * 2}px`) .style('margin', `${margin}px`) - .style('border-width', `${border}px`); + .style('border', `${border}px ${borderStyle} ${borderColor}`); this.legendContainer(legendContainer.node()); // create title diff --git a/packages/muze-legend/src/styles.scss b/packages/muze-legend/src/styles.scss index 4498fed0..ba9e4223 100644 --- a/packages/muze-legend/src/styles.scss +++ b/packages/muze-legend/src/styles.scss @@ -8,13 +8,11 @@ $prefix: muze-; height: 100px; float: none !important; display: inline-block; - border: solid rgba(0, 0, 0, 0); } .#{$prefix}legend-title { - border-bottom: solid rgba(0,0,0,0); - display: block; + display: table; align-items: center; float: left; text-align: left; @@ -23,6 +21,11 @@ $prefix: muze-; fill:#5F5F5F; font-weight:600; } + +.#{$prefix}legend-title-text { + display: table-cell; + vertical-align: middle; +} .#{$prefix}legend-overflow { text-align: center } diff --git a/packages/muze/npm/dist/muze.css b/packages/muze/npm/dist/muze.css index 72ce6c7b..2ca2bff8 100644 --- a/packages/muze/npm/dist/muze.css +++ b/packages/muze/npm/dist/muze.css @@ -1 +1 @@ -.muze-selection-box-group{cursor:all-scroll;fill:#777;fill-opacity:.3;pointer-events:all;stroke:#fff}.muze-tooltip-box{-webkit-border-radius:1px;-webkit-box-shadow:2px 2px 3px 0 hsla(0,0%,82.7%,.5);background:#fbfbfb;border:1px solid hsla(0,0%,59.2%,.19);border-radius:1px;box-shadow:2px 2px 3px 0 hsla(0,0%,82.7%,.5);color:#5f5f5f;display:inline-block;font-size:12px;opacity:.9;padding-left:8px;padding-right:8px;padding-top:4px;pointer-events:none;text-align:left;z-index:9999999999}.muze-tooltip-row{overflow:auto;padding-bottom:8px}.muze-tooltip-row:last-child{padding-bottom:4px}.muze-tooltip-value{float:right;font-weight:600;margin-left:10px}.muze-tooltip-connectors path{stroke:#c7c7be;stroke-linecap:round;stroke-linejoin:round;stroke-width:2px}.muze-tooltip-arrow-bottom{border-left:5px solid transparent;border-right:5px solid transparent;border-top:10px solid #fbfbfb;right:0}.muze-tooltip-arrow-right{border-left:10px solid #fbfbfb;right:-10px}.muze-tooltip-arrow-left,.muze-tooltip-arrow-right{border-bottom:5px solid transparent;border-top:5px solid transparent}.muze-tooltip-arrow-left{border-right:10px solid #fbfbfb;left:-10px;right:0}.muze-tooltip-arrow-top{border-bottom:10px solid #fbfbfb;border-left:5px solid transparent;border-right:5px solid transparent;right:0}.muze-tooltip-background-arrow-top{border-bottom:12px solid hsla(0,0%,59.2%,.19);top:0}.muze-tooltip-background-arrow-bottom,.muze-tooltip-background-arrow-top{border-left:6px solid transparent;border-right:6px solid transparent;right:0}.muze-tooltip-background-arrow-bottom{border-top:12px solid hsla(0,0%,59.2%,.19);top:102%}.muze-tooltip-background-arrow-right{border-bottom:6px solid transparent;border-left:12px solid hsla(0,0%,59.2%,.19);border-top:6px solid transparent;right:-12px}.muze-tooltip-background-arrow-left{border-bottom:6px solid transparent;border-right:12px solid hsla(0,0%,59.2%,.19);border-top:6px solid transparent;left:-12px;right:0}.muze-tooltip-content-container{float:none!important;padding-left:8px;padding-right:8px;padding-top:4px}.muze--tooltip-value{font-weight:700}.muze-tooltip-table-tbody td{padding:3px}.muze-tooltip-table-row-0{font-weight:700}.muze-tooltip-content-container{border-bottom:1px solid #000}.muze-tooltip-content-parent-container :last-child{border-bottom:none}.muze-crossband{fill:grey;fill-opacity:.2;stroke-opacity:0}.muze-crossline{fill:grey;fill-opacity:.2;stroke:grey;stroke-dasharray:2,4}.muze-anchors-group{pointer-events:none}.muze-simple-axis text{font-family:Source Sans Pro,Helvetica Neue,Helvetica,Arial,sans-serif;text-align:center}.muze-ticks{fill:#858585}.muze-tick-lines,.muze-ticks{font-family:Source Sans Pro,Helvetica Neue,Helvetica,Arial,sans-serif;font-size:12px;font-weight:400;text-align:center}.muze-tick-lines{stroke:#efefef}.muze-axis-name{fill:#5f5f5f;font-family:Source Sans Pro,Helvetica Neue,Helvetica,Arial,sans-serif;font-size:14px;font-weight:400;text-align:center}.muze-axis-name.hidden{display:none}.muze-fadeout-interaction{stroke-opacity:.3}.muze-layer-line{stroke:#086bb6;stroke-linejoin:round;stroke-width:2px}.muze-layer-area{fill:#086bb6;fill-opacity:.7;stroke-linejoin:round}.muze-layer-arc-highlight{fill:#7f7f7f!important}.muze-layer-arc-fadeout{fill-opacity:.3!important}.muze-layer-arc-selected{fill:#e6e6e6!important}.muze-layer-arc{fill:#086bb6}.muze-layer-text text{fill:#000;font-size:12px}.muze-layer-text rect{fill:#7f7f7f;fill-opacity:.3}.muze-layer-text-highlight{fill-opacity:1}.muze-layer-text-fadeout{fill-opacity:.3!important}.muze-layer-text-selected{fill:#000!important}.muze-layer-point{fill:#086bb6;fill-opacity:.5;stroke:#086bb6;stroke-opacity:.5}.muze-layer-point-highlight{fill-opacity:0;stroke-opacity:1;stroke-width:2px!important}.muze-layer-point-fadeout{fill:#7f7f7f!important;fill-opacity:.3!important;stroke:#7f7f7f!important;stroke-opacity:.3!important}.muze-layer-point-selected{fill:#000!important}.muze-layer-bar,.muze-layer-bar-highlight{fill-opacity:1}.muze-layer-bar-fadeout{fill-opacity:.2!important}.muze-layer-bar-selected{fill:#4682b4!important}.muze-layer-tick{stroke:#f44336;stroke-opacity:.7}.muze-layer-tick-highlight{stroke-opacity:1}.muze-layer-tick-fadeout{stroke:#7f7f7f!important;stroke-opacity:.3!important}.muze-layer-tick-selected{stroke:#000!important}.muze-visual-unit{background:"#fff"}.muze-axis-zero-line{stroke-width:1px}.muze-grid-band-x-0,.muze-grid-band-y-0{fill-opacity:0}.muze-unit{-webkit-touch-callout:none;-webkit-user-select:none}.muze-legend-box{border:solid transparent;display:inline-block;float:none!important;font-family:Source Sans Pro,Helvetica Neue,Helvetica,Arial,sans-serif;height:100px;line-height:10px!important}.muze-legend-title{-webkit-align-items:center;-webkit-box-align:center;align-items:center;border-bottom:solid transparent;display:block;fill:#5f5f5f;float:left;font-size:14px;font-weight:600;height:30px;text-align:left}.muze-legend-overflow{text-align:center}.muze-legend-icon,.muze-legend-icon-svg{cursor:pointer}.muze-overflow-y{overflow-y:scroll}.muze-overflow-x{overflow-x:scroll}.muze-legend-fadeout{fill-opacity:.3;opacity:.3}.muze-legend-brighten{fill-opacity:1}.muze-legend-item-info{-webkit-align-items:center;-webkit-box-align:center;align-items:center;cursor:pointer;display:-webkit-box;display:-webkit-flex;display:flex;float:left;font-size:12px}.muze-legend-item-info.center{-webkit-box-pack:center;-webkit-justify-content:center;justify-content:center}.muze-legend-item-info.start{-webkit-box-pack:start;-webkit-justify-content:flex-start;justify-content:flex-start}.muze-legend-item-info.end{-webkit-box-pack:end;-webkit-justify-content:flex-end;justify-content:flex-end}.muze-legend-selection-box{cursor:all-scroll;fill:#777;fill-opacity:.3;pointer-events:all;stroke:#fff}.muze-text-cell{color:#5f5f5f;font-family:inherit;font-size:14px;font-weight:400;text-align:center}.muze-header-cell{font-size:16px}.muze-header-cell,.muze-subheader-cell{color:#858585;font-family:inherit;font-weight:800;text-align:center}.muze-subheader-cell{font-size:15px}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:200;src:local("Source Sans Pro ExtraLight Italic"),local("SourceSansPro-ExtraLightItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZYokSdh18S0xR41YDw.woff2) format("woff2");unicode-range:U+0460-052f,U+1c80-1c88,U+20b4,U+2de0-2dff,U+a640-a69f,U+fe2e-fe2f}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:200;src:local("Source Sans Pro ExtraLight Italic"),local("SourceSansPro-ExtraLightItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZYokSdo18S0xR41YDw.woff2) format("woff2");unicode-range:U+0400-045f,U+0490-0491,U+04b0-04b1,U+2116}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:200;src:local("Source Sans Pro ExtraLight Italic"),local("SourceSansPro-ExtraLightItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZYokSdg18S0xR41YDw.woff2) format("woff2");unicode-range:U+1f??}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:200;src:local("Source Sans Pro ExtraLight Italic"),local("SourceSansPro-ExtraLightItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZYokSdv18S0xR41YDw.woff2) format("woff2");unicode-range:U+0370-03ff}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:200;src:local("Source Sans Pro ExtraLight Italic"),local("SourceSansPro-ExtraLightItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZYokSdj18S0xR41YDw.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+1ea0-1ef9,U+20ab}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:200;src:local("Source Sans Pro ExtraLight Italic"),local("SourceSansPro-ExtraLightItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZYokSdi18S0xR41YDw.woff2) format("woff2");unicode-range:U+0100-024f,U+0259,U+1e??,U+2020,U+20a0-20ab,U+20ad-20cf,U+2113,U+2c60-2c7f,U+a720-a7ff}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:200;src:local("Source Sans Pro ExtraLight Italic"),local("SourceSansPro-ExtraLightItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZYokSds18S0xR41.woff2) format("woff2");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:300;src:local("Source Sans Pro Light Italic"),local("SourceSansPro-LightItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZMkidh18S0xR41YDw.woff2) format("woff2");unicode-range:U+0460-052f,U+1c80-1c88,U+20b4,U+2de0-2dff,U+a640-a69f,U+fe2e-fe2f}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:300;src:local("Source Sans Pro Light Italic"),local("SourceSansPro-LightItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZMkido18S0xR41YDw.woff2) format("woff2");unicode-range:U+0400-045f,U+0490-0491,U+04b0-04b1,U+2116}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:300;src:local("Source Sans Pro Light Italic"),local("SourceSansPro-LightItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZMkidg18S0xR41YDw.woff2) format("woff2");unicode-range:U+1f??}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:300;src:local("Source Sans Pro Light Italic"),local("SourceSansPro-LightItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZMkidv18S0xR41YDw.woff2) format("woff2");unicode-range:U+0370-03ff}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:300;src:local("Source Sans Pro Light Italic"),local("SourceSansPro-LightItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZMkidj18S0xR41YDw.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+1ea0-1ef9,U+20ab}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:300;src:local("Source Sans Pro Light Italic"),local("SourceSansPro-LightItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZMkidi18S0xR41YDw.woff2) format("woff2");unicode-range:U+0100-024f,U+0259,U+1e??,U+2020,U+20a0-20ab,U+20ad-20cf,U+2113,U+2c60-2c7f,U+a720-a7ff}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:300;src:local("Source Sans Pro Light Italic"),local("SourceSansPro-LightItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZMkids18S0xR41.woff2) format("woff2");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:400;src:local("Source Sans Pro Italic"),local("SourceSansPro-Italic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK1dSBYKcSV-LCoeQqfX1RYOo3qPZ7qsDJB9cme_xc.woff2) format("woff2");unicode-range:U+0460-052f,U+1c80-1c88,U+20b4,U+2de0-2dff,U+a640-a69f,U+fe2e-fe2f}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:400;src:local("Source Sans Pro Italic"),local("SourceSansPro-Italic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK1dSBYKcSV-LCoeQqfX1RYOo3qPZ7jsDJB9cme_xc.woff2) format("woff2");unicode-range:U+0400-045f,U+0490-0491,U+04b0-04b1,U+2116}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:400;src:local("Source Sans Pro Italic"),local("SourceSansPro-Italic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK1dSBYKcSV-LCoeQqfX1RYOo3qPZ7rsDJB9cme_xc.woff2) format("woff2");unicode-range:U+1f??}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:400;src:local("Source Sans Pro Italic"),local("SourceSansPro-Italic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK1dSBYKcSV-LCoeQqfX1RYOo3qPZ7ksDJB9cme_xc.woff2) format("woff2");unicode-range:U+0370-03ff}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:400;src:local("Source Sans Pro Italic"),local("SourceSansPro-Italic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK1dSBYKcSV-LCoeQqfX1RYOo3qPZ7osDJB9cme_xc.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+1ea0-1ef9,U+20ab}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:400;src:local("Source Sans Pro Italic"),local("SourceSansPro-Italic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK1dSBYKcSV-LCoeQqfX1RYOo3qPZ7psDJB9cme_xc.woff2) format("woff2");unicode-range:U+0100-024f,U+0259,U+1e??,U+2020,U+20a0-20ab,U+20ad-20cf,U+2113,U+2c60-2c7f,U+a720-a7ff}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:400;src:local("Source Sans Pro Italic"),local("SourceSansPro-Italic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK1dSBYKcSV-LCoeQqfX1RYOo3qPZ7nsDJB9cme.woff2) format("woff2");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:600;src:local("Source Sans Pro SemiBold Italic"),local("SourceSansPro-SemiBoldItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZY4lCdh18S0xR41YDw.woff2) format("woff2");unicode-range:U+0460-052f,U+1c80-1c88,U+20b4,U+2de0-2dff,U+a640-a69f,U+fe2e-fe2f}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:600;src:local("Source Sans Pro SemiBold Italic"),local("SourceSansPro-SemiBoldItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZY4lCdo18S0xR41YDw.woff2) format("woff2");unicode-range:U+0400-045f,U+0490-0491,U+04b0-04b1,U+2116}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:600;src:local("Source Sans Pro SemiBold Italic"),local("SourceSansPro-SemiBoldItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZY4lCdg18S0xR41YDw.woff2) format("woff2");unicode-range:U+1f??}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:600;src:local("Source Sans Pro SemiBold Italic"),local("SourceSansPro-SemiBoldItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZY4lCdv18S0xR41YDw.woff2) format("woff2");unicode-range:U+0370-03ff}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:600;src:local("Source Sans Pro SemiBold Italic"),local("SourceSansPro-SemiBoldItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZY4lCdj18S0xR41YDw.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+1ea0-1ef9,U+20ab}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:600;src:local("Source Sans Pro SemiBold Italic"),local("SourceSansPro-SemiBoldItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZY4lCdi18S0xR41YDw.woff2) format("woff2");unicode-range:U+0100-024f,U+0259,U+1e??,U+2020,U+20a0-20ab,U+20ad-20cf,U+2113,U+2c60-2c7f,U+a720-a7ff}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:600;src:local("Source Sans Pro SemiBold Italic"),local("SourceSansPro-SemiBoldItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZY4lCds18S0xR41.woff2) format("woff2");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:700;src:local("Source Sans Pro Bold Italic"),local("SourceSansPro-BoldItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZclSdh18S0xR41YDw.woff2) format("woff2");unicode-range:U+0460-052f,U+1c80-1c88,U+20b4,U+2de0-2dff,U+a640-a69f,U+fe2e-fe2f}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:700;src:local("Source Sans Pro Bold Italic"),local("SourceSansPro-BoldItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZclSdo18S0xR41YDw.woff2) format("woff2");unicode-range:U+0400-045f,U+0490-0491,U+04b0-04b1,U+2116}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:700;src:local("Source Sans Pro Bold Italic"),local("SourceSansPro-BoldItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZclSdg18S0xR41YDw.woff2) format("woff2");unicode-range:U+1f??}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:700;src:local("Source Sans Pro Bold Italic"),local("SourceSansPro-BoldItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZclSdv18S0xR41YDw.woff2) format("woff2");unicode-range:U+0370-03ff}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:700;src:local("Source Sans Pro Bold Italic"),local("SourceSansPro-BoldItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZclSdj18S0xR41YDw.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+1ea0-1ef9,U+20ab}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:700;src:local("Source Sans Pro Bold Italic"),local("SourceSansPro-BoldItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZclSdi18S0xR41YDw.woff2) format("woff2");unicode-range:U+0100-024f,U+0259,U+1e??,U+2020,U+20a0-20ab,U+20ad-20cf,U+2113,U+2c60-2c7f,U+a720-a7ff}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:700;src:local("Source Sans Pro Bold Italic"),local("SourceSansPro-BoldItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZclSds18S0xR41.woff2) format("woff2");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:900;src:local("Source Sans Pro Black Italic"),local("SourceSansPro-BlackItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZklydh18S0xR41YDw.woff2) format("woff2");unicode-range:U+0460-052f,U+1c80-1c88,U+20b4,U+2de0-2dff,U+a640-a69f,U+fe2e-fe2f}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:900;src:local("Source Sans Pro Black Italic"),local("SourceSansPro-BlackItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZklydo18S0xR41YDw.woff2) format("woff2");unicode-range:U+0400-045f,U+0490-0491,U+04b0-04b1,U+2116}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:900;src:local("Source Sans Pro Black Italic"),local("SourceSansPro-BlackItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZklydg18S0xR41YDw.woff2) format("woff2");unicode-range:U+1f??}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:900;src:local("Source Sans Pro Black Italic"),local("SourceSansPro-BlackItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZklydv18S0xR41YDw.woff2) format("woff2");unicode-range:U+0370-03ff}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:900;src:local("Source Sans Pro Black Italic"),local("SourceSansPro-BlackItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZklydj18S0xR41YDw.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+1ea0-1ef9,U+20ab}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:900;src:local("Source Sans Pro Black Italic"),local("SourceSansPro-BlackItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZklydi18S0xR41YDw.woff2) format("woff2");unicode-range:U+0100-024f,U+0259,U+1e??,U+2020,U+20a0-20ab,U+20ad-20cf,U+2113,U+2c60-2c7f,U+a720-a7ff}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:900;src:local("Source Sans Pro Black Italic"),local("SourceSansPro-BlackItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZklyds18S0xR41.woff2) format("woff2");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:200;src:local("Source Sans Pro ExtraLight"),local("SourceSansPro-ExtraLight"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i94_wmhdu3cOWxy40.woff2) format("woff2");unicode-range:U+0460-052f,U+1c80-1c88,U+20b4,U+2de0-2dff,U+a640-a69f,U+fe2e-fe2f}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:200;src:local("Source Sans Pro ExtraLight"),local("SourceSansPro-ExtraLight"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i94_wkxdu3cOWxy40.woff2) format("woff2");unicode-range:U+0400-045f,U+0490-0491,U+04b0-04b1,U+2116}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:200;src:local("Source Sans Pro ExtraLight"),local("SourceSansPro-ExtraLight"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i94_wmxdu3cOWxy40.woff2) format("woff2");unicode-range:U+1f??}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:200;src:local("Source Sans Pro ExtraLight"),local("SourceSansPro-ExtraLight"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i94_wlBdu3cOWxy40.woff2) format("woff2");unicode-range:U+0370-03ff}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:200;src:local("Source Sans Pro ExtraLight"),local("SourceSansPro-ExtraLight"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i94_wmBdu3cOWxy40.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+1ea0-1ef9,U+20ab}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:200;src:local("Source Sans Pro ExtraLight"),local("SourceSansPro-ExtraLight"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i94_wmRdu3cOWxy40.woff2) format("woff2");unicode-range:U+0100-024f,U+0259,U+1e??,U+2020,U+20a0-20ab,U+20ad-20cf,U+2113,U+2c60-2c7f,U+a720-a7ff}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:200;src:local("Source Sans Pro ExtraLight"),local("SourceSansPro-ExtraLight"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i94_wlxdu3cOWxw.woff2) format("woff2");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:300;src:local("Source Sans Pro Light"),local("SourceSansPro-Light"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ik4zwmhdu3cOWxy40.woff2) format("woff2");unicode-range:U+0460-052f,U+1c80-1c88,U+20b4,U+2de0-2dff,U+a640-a69f,U+fe2e-fe2f}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:300;src:local("Source Sans Pro Light"),local("SourceSansPro-Light"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ik4zwkxdu3cOWxy40.woff2) format("woff2");unicode-range:U+0400-045f,U+0490-0491,U+04b0-04b1,U+2116}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:300;src:local("Source Sans Pro Light"),local("SourceSansPro-Light"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ik4zwmxdu3cOWxy40.woff2) format("woff2");unicode-range:U+1f??}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:300;src:local("Source Sans Pro Light"),local("SourceSansPro-Light"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ik4zwlBdu3cOWxy40.woff2) format("woff2");unicode-range:U+0370-03ff}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:300;src:local("Source Sans Pro Light"),local("SourceSansPro-Light"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ik4zwmBdu3cOWxy40.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+1ea0-1ef9,U+20ab}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:300;src:local("Source Sans Pro Light"),local("SourceSansPro-Light"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ik4zwmRdu3cOWxy40.woff2) format("woff2");unicode-range:U+0100-024f,U+0259,U+1e??,U+2020,U+20a0-20ab,U+20ad-20cf,U+2113,U+2c60-2c7f,U+a720-a7ff}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:300;src:local("Source Sans Pro Light"),local("SourceSansPro-Light"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ik4zwlxdu3cOWxw.woff2) format("woff2");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:400;src:local("Source Sans Pro Regular"),local("SourceSansPro-Regular"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK3dSBYKcSV-LCoeQqfX1RYOo3qNa7lujVj9_mf.woff2) format("woff2");unicode-range:U+0460-052f,U+1c80-1c88,U+20b4,U+2de0-2dff,U+a640-a69f,U+fe2e-fe2f}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:400;src:local("Source Sans Pro Regular"),local("SourceSansPro-Regular"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK3dSBYKcSV-LCoeQqfX1RYOo3qPK7lujVj9_mf.woff2) format("woff2");unicode-range:U+0400-045f,U+0490-0491,U+04b0-04b1,U+2116}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:400;src:local("Source Sans Pro Regular"),local("SourceSansPro-Regular"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK3dSBYKcSV-LCoeQqfX1RYOo3qNK7lujVj9_mf.woff2) format("woff2");unicode-range:U+1f??}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:400;src:local("Source Sans Pro Regular"),local("SourceSansPro-Regular"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK3dSBYKcSV-LCoeQqfX1RYOo3qO67lujVj9_mf.woff2) format("woff2");unicode-range:U+0370-03ff}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:400;src:local("Source Sans Pro Regular"),local("SourceSansPro-Regular"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK3dSBYKcSV-LCoeQqfX1RYOo3qN67lujVj9_mf.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+1ea0-1ef9,U+20ab}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:400;src:local("Source Sans Pro Regular"),local("SourceSansPro-Regular"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK3dSBYKcSV-LCoeQqfX1RYOo3qNq7lujVj9_mf.woff2) format("woff2");unicode-range:U+0100-024f,U+0259,U+1e??,U+2020,U+20a0-20ab,U+20ad-20cf,U+2113,U+2c60-2c7f,U+a720-a7ff}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:400;src:local("Source Sans Pro Regular"),local("SourceSansPro-Regular"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK3dSBYKcSV-LCoeQqfX1RYOo3qOK7lujVj9w.woff2) format("woff2");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:600;src:local("Source Sans Pro SemiBold"),local("SourceSansPro-SemiBold"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i54rwmhdu3cOWxy40.woff2) format("woff2");unicode-range:U+0460-052f,U+1c80-1c88,U+20b4,U+2de0-2dff,U+a640-a69f,U+fe2e-fe2f}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:600;src:local("Source Sans Pro SemiBold"),local("SourceSansPro-SemiBold"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i54rwkxdu3cOWxy40.woff2) format("woff2");unicode-range:U+0400-045f,U+0490-0491,U+04b0-04b1,U+2116}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:600;src:local("Source Sans Pro SemiBold"),local("SourceSansPro-SemiBold"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i54rwmxdu3cOWxy40.woff2) format("woff2");unicode-range:U+1f??}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:600;src:local("Source Sans Pro SemiBold"),local("SourceSansPro-SemiBold"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i54rwlBdu3cOWxy40.woff2) format("woff2");unicode-range:U+0370-03ff}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:600;src:local("Source Sans Pro SemiBold"),local("SourceSansPro-SemiBold"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i54rwmBdu3cOWxy40.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+1ea0-1ef9,U+20ab}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:600;src:local("Source Sans Pro SemiBold"),local("SourceSansPro-SemiBold"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i54rwmRdu3cOWxy40.woff2) format("woff2");unicode-range:U+0100-024f,U+0259,U+1e??,U+2020,U+20a0-20ab,U+20ad-20cf,U+2113,U+2c60-2c7f,U+a720-a7ff}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:600;src:local("Source Sans Pro SemiBold"),local("SourceSansPro-SemiBold"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i54rwlxdu3cOWxw.woff2) format("woff2");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:700;src:local("Source Sans Pro Bold"),local("SourceSansPro-Bold"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ig4vwmhdu3cOWxy40.woff2) format("woff2");unicode-range:U+0460-052f,U+1c80-1c88,U+20b4,U+2de0-2dff,U+a640-a69f,U+fe2e-fe2f}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:700;src:local("Source Sans Pro Bold"),local("SourceSansPro-Bold"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ig4vwkxdu3cOWxy40.woff2) format("woff2");unicode-range:U+0400-045f,U+0490-0491,U+04b0-04b1,U+2116}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:700;src:local("Source Sans Pro Bold"),local("SourceSansPro-Bold"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ig4vwmxdu3cOWxy40.woff2) format("woff2");unicode-range:U+1f??}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:700;src:local("Source Sans Pro Bold"),local("SourceSansPro-Bold"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ig4vwlBdu3cOWxy40.woff2) format("woff2");unicode-range:U+0370-03ff}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:700;src:local("Source Sans Pro Bold"),local("SourceSansPro-Bold"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ig4vwmBdu3cOWxy40.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+1ea0-1ef9,U+20ab}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:700;src:local("Source Sans Pro Bold"),local("SourceSansPro-Bold"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ig4vwmRdu3cOWxy40.woff2) format("woff2");unicode-range:U+0100-024f,U+0259,U+1e??,U+2020,U+20a0-20ab,U+20ad-20cf,U+2113,U+2c60-2c7f,U+a720-a7ff}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:700;src:local("Source Sans Pro Bold"),local("SourceSansPro-Bold"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ig4vwlxdu3cOWxw.woff2) format("woff2");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:900;src:local("Source Sans Pro Black"),local("SourceSansPro-Black"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3iu4nwmhdu3cOWxy40.woff2) format("woff2");unicode-range:U+0460-052f,U+1c80-1c88,U+20b4,U+2de0-2dff,U+a640-a69f,U+fe2e-fe2f}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:900;src:local("Source Sans Pro Black"),local("SourceSansPro-Black"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3iu4nwkxdu3cOWxy40.woff2) format("woff2");unicode-range:U+0400-045f,U+0490-0491,U+04b0-04b1,U+2116}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:900;src:local("Source Sans Pro Black"),local("SourceSansPro-Black"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3iu4nwmxdu3cOWxy40.woff2) format("woff2");unicode-range:U+1f??}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:900;src:local("Source Sans Pro Black"),local("SourceSansPro-Black"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3iu4nwlBdu3cOWxy40.woff2) format("woff2");unicode-range:U+0370-03ff}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:900;src:local("Source Sans Pro Black"),local("SourceSansPro-Black"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3iu4nwmBdu3cOWxy40.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+1ea0-1ef9,U+20ab}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:900;src:local("Source Sans Pro Black"),local("SourceSansPro-Black"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3iu4nwmRdu3cOWxy40.woff2) format("woff2");unicode-range:U+0100-024f,U+0259,U+1e??,U+2020,U+20a0-20ab,U+20ad-20cf,U+2113,U+2c60-2c7f,U+a720-a7ff}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:900;src:local("Source Sans Pro Black"),local("SourceSansPro-Black"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3iu4nwlxdu3cOWxw.woff2) format("woff2");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}.muze-group-container{-webkit-tap-highlight-color:rgba(0,0,0,0);background-color:#fff;color:#333;font-family:Source Sans Pro,Helvetica Neue,Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143;margin:0}.muze-group-container *,.muze-group-container :after,.muze-group-container :before{-webkit-box-sizing:border-box;box-sizing:border-box}.muze-group-container .muze-table-arrow{cursor:pointer;height:0;margin:5px;opacity:.5;position:absolute;width:0;z-index:10}.muze-group-container .muze-table-arrow:hover{opacity:1}.muze-group-container .muze-table-arrow-right{border-left:15px solid #4682b4;left:100%}.muze-group-container .muze-table-arrow-left,.muze-group-container .muze-table-arrow-right{border-bottom:20px solid transparent;border-top:20px solid transparent;top:-webkit-calc(50% - 25px);top:calc(50% - 25px)}.muze-group-container .muze-table-arrow-left{border-right:15px solid #4682b4;right:100%}.muze-group-container .muze-table-arrow-bottom{border-top:15px solid #4682b4;top:100%}.muze-group-container .muze-table-arrow-bottom,.muze-group-container .muze-table-arrow-top{border-left:20px solid transparent;border-right:20px solid transparent;left:-webkit-calc(50% - 25px);left:calc(50% - 25px)}.muze-group-container .muze-table-arrow-top{border-bottom:15px solid #4682b4;bottom:100%}.muze-group-container .table-row-nested{border-top:none;visibility:hidden}.muze-group-container svg{display:block;float:left;height:inherit;vertical-align:top;width:inherit}.muze-group-container .axisName.hidden{opacity:0}.muze-group-container .axisName{opacity:1}.muze-group-container .grid-td svg{max-height:100%;max-width:100%}.muze-group-container .domain{opacity:0}.muze-board{float:left}.muze-layout-container{float:left;position:relative}.muze-board-legend,.muze-legend-section{float:left;text-align:center}.muze-legend-horizontal-section{-webkit-align-items:center;-webkit-box-align:center;-webkit-box-pack:center;-webkit-flex-wrap:wrap;-webkit-justify-content:center;align-items:center;display:-webkit-box;display:-webkit-flex;display:flex;flex-wrap:wrap;justify-content:center}.muze-legend-components{float:left;text-align:center}.muze-grid-layout,.muze-grid-layout-container,.muze-grid-layout-row{float:left;position:relative}.muze-grid-table{background-color:transparent;border-spacing:0;table-layout:fixed}.muze-grid-td,.muze-grid-th{padding:0}.muze-table-header{height:inherit;width:inherit}.muze-grid-layout,.muze-layout-grid-container{float:left;position:relative}.muze-layout-grid-container div,.muze-layout-grid-container table{border-collapse:collapse;float:left}.muze-title-container .muze-header-cell{color:#5f5f5f;font-size:24px;font-weight:700}.muze-subtitle-container .muze-text-cell{color:#b1b1b1;font-size:16px;font-weight:400}.domain{opacity:0}.muze-group-container,.muze-layout-container,.muze-legend-container{float:left}.hidden{display:none} \ No newline at end of file +.muze-selection-box-group{cursor:all-scroll;fill:#777;fill-opacity:.3;pointer-events:all;stroke:#fff}.muze-tooltip-box{-webkit-border-radius:1px;-webkit-box-shadow:2px 2px 3px 0 hsla(0,0%,82.7%,.5);background:#fbfbfb;border:1px solid hsla(0,0%,59.2%,.19);border-radius:1px;box-shadow:2px 2px 3px 0 hsla(0,0%,82.7%,.5);color:#5f5f5f;display:inline-block;font-size:12px;opacity:.9;padding-left:8px;padding-right:8px;padding-top:4px;pointer-events:none;text-align:left;z-index:9999999999}.muze-tooltip-row{overflow:auto;padding-bottom:8px}.muze-tooltip-row:last-child{padding-bottom:4px}.muze-tooltip-value{float:right;font-weight:600;margin-left:10px}.muze-tooltip-connectors path{stroke:#c7c7be;stroke-linecap:round;stroke-linejoin:round;stroke-width:2px}.muze-tooltip-arrow-bottom{border-left:5px solid transparent;border-right:5px solid transparent;border-top:10px solid #fbfbfb;right:0}.muze-tooltip-arrow-right{border-left:10px solid #fbfbfb;right:-10px}.muze-tooltip-arrow-left,.muze-tooltip-arrow-right{border-bottom:5px solid transparent;border-top:5px solid transparent}.muze-tooltip-arrow-left{border-right:10px solid #fbfbfb;left:-10px;right:0}.muze-tooltip-arrow-top{border-bottom:10px solid #fbfbfb;border-left:5px solid transparent;border-right:5px solid transparent;right:0}.muze-tooltip-background-arrow-top{border-bottom:12px solid hsla(0,0%,59.2%,.19);top:0}.muze-tooltip-background-arrow-bottom,.muze-tooltip-background-arrow-top{border-left:6px solid transparent;border-right:6px solid transparent;right:0}.muze-tooltip-background-arrow-bottom{border-top:12px solid hsla(0,0%,59.2%,.19);top:102%}.muze-tooltip-background-arrow-right{border-bottom:6px solid transparent;border-left:12px solid hsla(0,0%,59.2%,.19);border-top:6px solid transparent;right:-12px}.muze-tooltip-background-arrow-left{border-bottom:6px solid transparent;border-right:12px solid hsla(0,0%,59.2%,.19);border-top:6px solid transparent;left:-12px;right:0}.muze-tooltip-content-container{float:none!important;padding-left:8px;padding-right:8px;padding-top:4px}.muze--tooltip-value{font-weight:700}.muze-tooltip-table-tbody td{padding:3px}.muze-tooltip-table-row-0{font-weight:700}.muze-tooltip-content-container{border-bottom:1px solid #000}.muze-tooltip-content-parent-container :last-child{border-bottom:none}.muze-crossband{fill:grey;fill-opacity:.2;stroke-opacity:0}.muze-crossline{fill:grey;fill-opacity:.2;stroke:grey;stroke-dasharray:2,4}.muze-anchors-group{pointer-events:none}.muze-simple-axis text{font-family:Source Sans Pro,Helvetica Neue,Helvetica,Arial,sans-serif;text-align:center}.muze-ticks{fill:#858585}.muze-tick-lines,.muze-ticks{font-family:Source Sans Pro,Helvetica Neue,Helvetica,Arial,sans-serif;font-size:12px;font-weight:400;text-align:center}.muze-tick-lines{stroke:#efefef}.muze-axis-name{fill:#5f5f5f;font-family:Source Sans Pro,Helvetica Neue,Helvetica,Arial,sans-serif;font-size:14px;font-weight:400;text-align:center}.muze-axis-name.hidden{display:none}.muze-fadeout-interaction{stroke-opacity:.3}.muze-layer-line{stroke:#086bb6;stroke-linejoin:round;stroke-width:2px}.muze-layer-area{fill:#086bb6;fill-opacity:.7;stroke-linejoin:round}.muze-layer-arc-highlight{fill:#7f7f7f!important}.muze-layer-arc-fadeout{fill-opacity:.3!important}.muze-layer-arc-selected{fill:#e6e6e6!important}.muze-layer-arc{fill:#086bb6}.muze-layer-text text{fill:#000;font-size:12px}.muze-layer-text rect{fill:#7f7f7f;fill-opacity:.3}.muze-layer-text-highlight{fill-opacity:1}.muze-layer-text-fadeout{fill-opacity:.3!important}.muze-layer-text-selected{fill:#000!important}.muze-layer-point{fill:#086bb6;fill-opacity:.5;stroke:#086bb6;stroke-opacity:.5}.muze-layer-point-highlight{fill-opacity:0;stroke-opacity:1;stroke-width:2px!important}.muze-layer-point-fadeout{fill:#7f7f7f!important;fill-opacity:.3!important;stroke:#7f7f7f!important;stroke-opacity:.3!important}.muze-layer-point-selected{fill:#000!important}.muze-layer-bar,.muze-layer-bar-highlight{fill-opacity:1}.muze-layer-bar-fadeout{fill-opacity:.2!important}.muze-layer-bar-selected{fill:#4682b4!important}.muze-layer-tick{stroke:#f44336;stroke-opacity:.7}.muze-layer-tick-highlight{stroke-opacity:1}.muze-layer-tick-fadeout{stroke:#7f7f7f!important;stroke-opacity:.3!important}.muze-layer-tick-selected{stroke:#000!important}.muze-visual-unit{background:transparent}.muze-axis-zero-line{stroke-width:1px}.muze-grid-band-x-0,.muze-grid-band-y-0{fill-opacity:0}.muze-unit{-webkit-touch-callout:none;-webkit-user-select:none}.muze-legend-box{display:inline-block;float:none!important;font-family:Source Sans Pro,Helvetica Neue,Helvetica,Arial,sans-serif;height:100px;line-height:10px!important}.muze-legend-title{-webkit-align-items:center;-webkit-box-align:center;align-items:center;display:table;fill:#5f5f5f;float:left;font-size:14px;font-weight:600;height:30px;text-align:left}.muze-legend-title-text{display:table-cell;vertical-align:middle}.muze-legend-overflow{text-align:center}.muze-legend-icon,.muze-legend-icon-svg{cursor:pointer}.muze-overflow-y{overflow-y:scroll}.muze-overflow-x{overflow-x:scroll}.muze-legend-fadeout{fill-opacity:.3;opacity:.3}.muze-legend-brighten{fill-opacity:1}.muze-legend-item-info{-webkit-align-items:center;-webkit-box-align:center;align-items:center;cursor:pointer;display:-webkit-box;display:-webkit-flex;display:flex;float:left;font-size:12px}.muze-legend-item-info.center{-webkit-box-pack:center;-webkit-justify-content:center;justify-content:center}.muze-legend-item-info.start{-webkit-box-pack:start;-webkit-justify-content:flex-start;justify-content:flex-start}.muze-legend-item-info.end{-webkit-box-pack:end;-webkit-justify-content:flex-end;justify-content:flex-end}.muze-legend-selection-box{cursor:all-scroll;fill:#777;fill-opacity:.3;pointer-events:all;stroke:#fff}.muze-text-cell{color:#5f5f5f;font-family:inherit;font-size:14px;font-weight:400;text-align:center}.muze-header-cell{font-size:16px}.muze-header-cell,.muze-subheader-cell{color:#858585;font-family:inherit;font-weight:800;text-align:center}.muze-subheader-cell{font-size:15px}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:200;src:local("Source Sans Pro ExtraLight Italic"),local("SourceSansPro-ExtraLightItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZYokSdh18S0xR41YDw.woff2) format("woff2");unicode-range:U+0460-052f,U+1c80-1c88,U+20b4,U+2de0-2dff,U+a640-a69f,U+fe2e-fe2f}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:200;src:local("Source Sans Pro ExtraLight Italic"),local("SourceSansPro-ExtraLightItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZYokSdo18S0xR41YDw.woff2) format("woff2");unicode-range:U+0400-045f,U+0490-0491,U+04b0-04b1,U+2116}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:200;src:local("Source Sans Pro ExtraLight Italic"),local("SourceSansPro-ExtraLightItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZYokSdg18S0xR41YDw.woff2) format("woff2");unicode-range:U+1f??}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:200;src:local("Source Sans Pro ExtraLight Italic"),local("SourceSansPro-ExtraLightItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZYokSdv18S0xR41YDw.woff2) format("woff2");unicode-range:U+0370-03ff}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:200;src:local("Source Sans Pro ExtraLight Italic"),local("SourceSansPro-ExtraLightItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZYokSdj18S0xR41YDw.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+1ea0-1ef9,U+20ab}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:200;src:local("Source Sans Pro ExtraLight Italic"),local("SourceSansPro-ExtraLightItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZYokSdi18S0xR41YDw.woff2) format("woff2");unicode-range:U+0100-024f,U+0259,U+1e??,U+2020,U+20a0-20ab,U+20ad-20cf,U+2113,U+2c60-2c7f,U+a720-a7ff}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:200;src:local("Source Sans Pro ExtraLight Italic"),local("SourceSansPro-ExtraLightItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZYokSds18S0xR41.woff2) format("woff2");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:300;src:local("Source Sans Pro Light Italic"),local("SourceSansPro-LightItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZMkidh18S0xR41YDw.woff2) format("woff2");unicode-range:U+0460-052f,U+1c80-1c88,U+20b4,U+2de0-2dff,U+a640-a69f,U+fe2e-fe2f}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:300;src:local("Source Sans Pro Light Italic"),local("SourceSansPro-LightItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZMkido18S0xR41YDw.woff2) format("woff2");unicode-range:U+0400-045f,U+0490-0491,U+04b0-04b1,U+2116}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:300;src:local("Source Sans Pro Light Italic"),local("SourceSansPro-LightItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZMkidg18S0xR41YDw.woff2) format("woff2");unicode-range:U+1f??}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:300;src:local("Source Sans Pro Light Italic"),local("SourceSansPro-LightItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZMkidv18S0xR41YDw.woff2) format("woff2");unicode-range:U+0370-03ff}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:300;src:local("Source Sans Pro Light Italic"),local("SourceSansPro-LightItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZMkidj18S0xR41YDw.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+1ea0-1ef9,U+20ab}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:300;src:local("Source Sans Pro Light Italic"),local("SourceSansPro-LightItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZMkidi18S0xR41YDw.woff2) format("woff2");unicode-range:U+0100-024f,U+0259,U+1e??,U+2020,U+20a0-20ab,U+20ad-20cf,U+2113,U+2c60-2c7f,U+a720-a7ff}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:300;src:local("Source Sans Pro Light Italic"),local("SourceSansPro-LightItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZMkids18S0xR41.woff2) format("woff2");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:400;src:local("Source Sans Pro Italic"),local("SourceSansPro-Italic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK1dSBYKcSV-LCoeQqfX1RYOo3qPZ7qsDJB9cme_xc.woff2) format("woff2");unicode-range:U+0460-052f,U+1c80-1c88,U+20b4,U+2de0-2dff,U+a640-a69f,U+fe2e-fe2f}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:400;src:local("Source Sans Pro Italic"),local("SourceSansPro-Italic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK1dSBYKcSV-LCoeQqfX1RYOo3qPZ7jsDJB9cme_xc.woff2) format("woff2");unicode-range:U+0400-045f,U+0490-0491,U+04b0-04b1,U+2116}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:400;src:local("Source Sans Pro Italic"),local("SourceSansPro-Italic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK1dSBYKcSV-LCoeQqfX1RYOo3qPZ7rsDJB9cme_xc.woff2) format("woff2");unicode-range:U+1f??}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:400;src:local("Source Sans Pro Italic"),local("SourceSansPro-Italic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK1dSBYKcSV-LCoeQqfX1RYOo3qPZ7ksDJB9cme_xc.woff2) format("woff2");unicode-range:U+0370-03ff}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:400;src:local("Source Sans Pro Italic"),local("SourceSansPro-Italic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK1dSBYKcSV-LCoeQqfX1RYOo3qPZ7osDJB9cme_xc.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+1ea0-1ef9,U+20ab}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:400;src:local("Source Sans Pro Italic"),local("SourceSansPro-Italic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK1dSBYKcSV-LCoeQqfX1RYOo3qPZ7psDJB9cme_xc.woff2) format("woff2");unicode-range:U+0100-024f,U+0259,U+1e??,U+2020,U+20a0-20ab,U+20ad-20cf,U+2113,U+2c60-2c7f,U+a720-a7ff}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:400;src:local("Source Sans Pro Italic"),local("SourceSansPro-Italic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK1dSBYKcSV-LCoeQqfX1RYOo3qPZ7nsDJB9cme.woff2) format("woff2");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:600;src:local("Source Sans Pro SemiBold Italic"),local("SourceSansPro-SemiBoldItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZY4lCdh18S0xR41YDw.woff2) format("woff2");unicode-range:U+0460-052f,U+1c80-1c88,U+20b4,U+2de0-2dff,U+a640-a69f,U+fe2e-fe2f}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:600;src:local("Source Sans Pro SemiBold Italic"),local("SourceSansPro-SemiBoldItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZY4lCdo18S0xR41YDw.woff2) format("woff2");unicode-range:U+0400-045f,U+0490-0491,U+04b0-04b1,U+2116}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:600;src:local("Source Sans Pro SemiBold Italic"),local("SourceSansPro-SemiBoldItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZY4lCdg18S0xR41YDw.woff2) format("woff2");unicode-range:U+1f??}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:600;src:local("Source Sans Pro SemiBold Italic"),local("SourceSansPro-SemiBoldItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZY4lCdv18S0xR41YDw.woff2) format("woff2");unicode-range:U+0370-03ff}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:600;src:local("Source Sans Pro SemiBold Italic"),local("SourceSansPro-SemiBoldItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZY4lCdj18S0xR41YDw.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+1ea0-1ef9,U+20ab}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:600;src:local("Source Sans Pro SemiBold Italic"),local("SourceSansPro-SemiBoldItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZY4lCdi18S0xR41YDw.woff2) format("woff2");unicode-range:U+0100-024f,U+0259,U+1e??,U+2020,U+20a0-20ab,U+20ad-20cf,U+2113,U+2c60-2c7f,U+a720-a7ff}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:600;src:local("Source Sans Pro SemiBold Italic"),local("SourceSansPro-SemiBoldItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZY4lCds18S0xR41.woff2) format("woff2");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:700;src:local("Source Sans Pro Bold Italic"),local("SourceSansPro-BoldItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZclSdh18S0xR41YDw.woff2) format("woff2");unicode-range:U+0460-052f,U+1c80-1c88,U+20b4,U+2de0-2dff,U+a640-a69f,U+fe2e-fe2f}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:700;src:local("Source Sans Pro Bold Italic"),local("SourceSansPro-BoldItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZclSdo18S0xR41YDw.woff2) format("woff2");unicode-range:U+0400-045f,U+0490-0491,U+04b0-04b1,U+2116}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:700;src:local("Source Sans Pro Bold Italic"),local("SourceSansPro-BoldItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZclSdg18S0xR41YDw.woff2) format("woff2");unicode-range:U+1f??}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:700;src:local("Source Sans Pro Bold Italic"),local("SourceSansPro-BoldItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZclSdv18S0xR41YDw.woff2) format("woff2");unicode-range:U+0370-03ff}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:700;src:local("Source Sans Pro Bold Italic"),local("SourceSansPro-BoldItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZclSdj18S0xR41YDw.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+1ea0-1ef9,U+20ab}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:700;src:local("Source Sans Pro Bold Italic"),local("SourceSansPro-BoldItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZclSdi18S0xR41YDw.woff2) format("woff2");unicode-range:U+0100-024f,U+0259,U+1e??,U+2020,U+20a0-20ab,U+20ad-20cf,U+2113,U+2c60-2c7f,U+a720-a7ff}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:700;src:local("Source Sans Pro Bold Italic"),local("SourceSansPro-BoldItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZclSds18S0xR41.woff2) format("woff2");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:900;src:local("Source Sans Pro Black Italic"),local("SourceSansPro-BlackItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZklydh18S0xR41YDw.woff2) format("woff2");unicode-range:U+0460-052f,U+1c80-1c88,U+20b4,U+2de0-2dff,U+a640-a69f,U+fe2e-fe2f}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:900;src:local("Source Sans Pro Black Italic"),local("SourceSansPro-BlackItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZklydo18S0xR41YDw.woff2) format("woff2");unicode-range:U+0400-045f,U+0490-0491,U+04b0-04b1,U+2116}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:900;src:local("Source Sans Pro Black Italic"),local("SourceSansPro-BlackItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZklydg18S0xR41YDw.woff2) format("woff2");unicode-range:U+1f??}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:900;src:local("Source Sans Pro Black Italic"),local("SourceSansPro-BlackItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZklydv18S0xR41YDw.woff2) format("woff2");unicode-range:U+0370-03ff}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:900;src:local("Source Sans Pro Black Italic"),local("SourceSansPro-BlackItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZklydj18S0xR41YDw.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+1ea0-1ef9,U+20ab}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:900;src:local("Source Sans Pro Black Italic"),local("SourceSansPro-BlackItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZklydi18S0xR41YDw.woff2) format("woff2");unicode-range:U+0100-024f,U+0259,U+1e??,U+2020,U+20a0-20ab,U+20ad-20cf,U+2113,U+2c60-2c7f,U+a720-a7ff}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:900;src:local("Source Sans Pro Black Italic"),local("SourceSansPro-BlackItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZklyds18S0xR41.woff2) format("woff2");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:200;src:local("Source Sans Pro ExtraLight"),local("SourceSansPro-ExtraLight"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i94_wmhdu3cOWxy40.woff2) format("woff2");unicode-range:U+0460-052f,U+1c80-1c88,U+20b4,U+2de0-2dff,U+a640-a69f,U+fe2e-fe2f}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:200;src:local("Source Sans Pro ExtraLight"),local("SourceSansPro-ExtraLight"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i94_wkxdu3cOWxy40.woff2) format("woff2");unicode-range:U+0400-045f,U+0490-0491,U+04b0-04b1,U+2116}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:200;src:local("Source Sans Pro ExtraLight"),local("SourceSansPro-ExtraLight"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i94_wmxdu3cOWxy40.woff2) format("woff2");unicode-range:U+1f??}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:200;src:local("Source Sans Pro ExtraLight"),local("SourceSansPro-ExtraLight"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i94_wlBdu3cOWxy40.woff2) format("woff2");unicode-range:U+0370-03ff}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:200;src:local("Source Sans Pro ExtraLight"),local("SourceSansPro-ExtraLight"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i94_wmBdu3cOWxy40.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+1ea0-1ef9,U+20ab}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:200;src:local("Source Sans Pro ExtraLight"),local("SourceSansPro-ExtraLight"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i94_wmRdu3cOWxy40.woff2) format("woff2");unicode-range:U+0100-024f,U+0259,U+1e??,U+2020,U+20a0-20ab,U+20ad-20cf,U+2113,U+2c60-2c7f,U+a720-a7ff}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:200;src:local("Source Sans Pro ExtraLight"),local("SourceSansPro-ExtraLight"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i94_wlxdu3cOWxw.woff2) format("woff2");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:300;src:local("Source Sans Pro Light"),local("SourceSansPro-Light"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ik4zwmhdu3cOWxy40.woff2) format("woff2");unicode-range:U+0460-052f,U+1c80-1c88,U+20b4,U+2de0-2dff,U+a640-a69f,U+fe2e-fe2f}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:300;src:local("Source Sans Pro Light"),local("SourceSansPro-Light"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ik4zwkxdu3cOWxy40.woff2) format("woff2");unicode-range:U+0400-045f,U+0490-0491,U+04b0-04b1,U+2116}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:300;src:local("Source Sans Pro Light"),local("SourceSansPro-Light"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ik4zwmxdu3cOWxy40.woff2) format("woff2");unicode-range:U+1f??}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:300;src:local("Source Sans Pro Light"),local("SourceSansPro-Light"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ik4zwlBdu3cOWxy40.woff2) format("woff2");unicode-range:U+0370-03ff}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:300;src:local("Source Sans Pro Light"),local("SourceSansPro-Light"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ik4zwmBdu3cOWxy40.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+1ea0-1ef9,U+20ab}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:300;src:local("Source Sans Pro Light"),local("SourceSansPro-Light"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ik4zwmRdu3cOWxy40.woff2) format("woff2");unicode-range:U+0100-024f,U+0259,U+1e??,U+2020,U+20a0-20ab,U+20ad-20cf,U+2113,U+2c60-2c7f,U+a720-a7ff}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:300;src:local("Source Sans Pro Light"),local("SourceSansPro-Light"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ik4zwlxdu3cOWxw.woff2) format("woff2");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:400;src:local("Source Sans Pro Regular"),local("SourceSansPro-Regular"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK3dSBYKcSV-LCoeQqfX1RYOo3qNa7lujVj9_mf.woff2) format("woff2");unicode-range:U+0460-052f,U+1c80-1c88,U+20b4,U+2de0-2dff,U+a640-a69f,U+fe2e-fe2f}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:400;src:local("Source Sans Pro Regular"),local("SourceSansPro-Regular"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK3dSBYKcSV-LCoeQqfX1RYOo3qPK7lujVj9_mf.woff2) format("woff2");unicode-range:U+0400-045f,U+0490-0491,U+04b0-04b1,U+2116}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:400;src:local("Source Sans Pro Regular"),local("SourceSansPro-Regular"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK3dSBYKcSV-LCoeQqfX1RYOo3qNK7lujVj9_mf.woff2) format("woff2");unicode-range:U+1f??}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:400;src:local("Source Sans Pro Regular"),local("SourceSansPro-Regular"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK3dSBYKcSV-LCoeQqfX1RYOo3qO67lujVj9_mf.woff2) format("woff2");unicode-range:U+0370-03ff}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:400;src:local("Source Sans Pro Regular"),local("SourceSansPro-Regular"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK3dSBYKcSV-LCoeQqfX1RYOo3qN67lujVj9_mf.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+1ea0-1ef9,U+20ab}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:400;src:local("Source Sans Pro Regular"),local("SourceSansPro-Regular"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK3dSBYKcSV-LCoeQqfX1RYOo3qNq7lujVj9_mf.woff2) format("woff2");unicode-range:U+0100-024f,U+0259,U+1e??,U+2020,U+20a0-20ab,U+20ad-20cf,U+2113,U+2c60-2c7f,U+a720-a7ff}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:400;src:local("Source Sans Pro Regular"),local("SourceSansPro-Regular"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK3dSBYKcSV-LCoeQqfX1RYOo3qOK7lujVj9w.woff2) format("woff2");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:600;src:local("Source Sans Pro SemiBold"),local("SourceSansPro-SemiBold"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i54rwmhdu3cOWxy40.woff2) format("woff2");unicode-range:U+0460-052f,U+1c80-1c88,U+20b4,U+2de0-2dff,U+a640-a69f,U+fe2e-fe2f}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:600;src:local("Source Sans Pro SemiBold"),local("SourceSansPro-SemiBold"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i54rwkxdu3cOWxy40.woff2) format("woff2");unicode-range:U+0400-045f,U+0490-0491,U+04b0-04b1,U+2116}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:600;src:local("Source Sans Pro SemiBold"),local("SourceSansPro-SemiBold"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i54rwmxdu3cOWxy40.woff2) format("woff2");unicode-range:U+1f??}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:600;src:local("Source Sans Pro SemiBold"),local("SourceSansPro-SemiBold"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i54rwlBdu3cOWxy40.woff2) format("woff2");unicode-range:U+0370-03ff}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:600;src:local("Source Sans Pro SemiBold"),local("SourceSansPro-SemiBold"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i54rwmBdu3cOWxy40.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+1ea0-1ef9,U+20ab}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:600;src:local("Source Sans Pro SemiBold"),local("SourceSansPro-SemiBold"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i54rwmRdu3cOWxy40.woff2) format("woff2");unicode-range:U+0100-024f,U+0259,U+1e??,U+2020,U+20a0-20ab,U+20ad-20cf,U+2113,U+2c60-2c7f,U+a720-a7ff}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:600;src:local("Source Sans Pro SemiBold"),local("SourceSansPro-SemiBold"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i54rwlxdu3cOWxw.woff2) format("woff2");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:700;src:local("Source Sans Pro Bold"),local("SourceSansPro-Bold"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ig4vwmhdu3cOWxy40.woff2) format("woff2");unicode-range:U+0460-052f,U+1c80-1c88,U+20b4,U+2de0-2dff,U+a640-a69f,U+fe2e-fe2f}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:700;src:local("Source Sans Pro Bold"),local("SourceSansPro-Bold"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ig4vwkxdu3cOWxy40.woff2) format("woff2");unicode-range:U+0400-045f,U+0490-0491,U+04b0-04b1,U+2116}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:700;src:local("Source Sans Pro Bold"),local("SourceSansPro-Bold"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ig4vwmxdu3cOWxy40.woff2) format("woff2");unicode-range:U+1f??}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:700;src:local("Source Sans Pro Bold"),local("SourceSansPro-Bold"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ig4vwlBdu3cOWxy40.woff2) format("woff2");unicode-range:U+0370-03ff}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:700;src:local("Source Sans Pro Bold"),local("SourceSansPro-Bold"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ig4vwmBdu3cOWxy40.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+1ea0-1ef9,U+20ab}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:700;src:local("Source Sans Pro Bold"),local("SourceSansPro-Bold"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ig4vwmRdu3cOWxy40.woff2) format("woff2");unicode-range:U+0100-024f,U+0259,U+1e??,U+2020,U+20a0-20ab,U+20ad-20cf,U+2113,U+2c60-2c7f,U+a720-a7ff}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:700;src:local("Source Sans Pro Bold"),local("SourceSansPro-Bold"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ig4vwlxdu3cOWxw.woff2) format("woff2");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:900;src:local("Source Sans Pro Black"),local("SourceSansPro-Black"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3iu4nwmhdu3cOWxy40.woff2) format("woff2");unicode-range:U+0460-052f,U+1c80-1c88,U+20b4,U+2de0-2dff,U+a640-a69f,U+fe2e-fe2f}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:900;src:local("Source Sans Pro Black"),local("SourceSansPro-Black"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3iu4nwkxdu3cOWxy40.woff2) format("woff2");unicode-range:U+0400-045f,U+0490-0491,U+04b0-04b1,U+2116}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:900;src:local("Source Sans Pro Black"),local("SourceSansPro-Black"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3iu4nwmxdu3cOWxy40.woff2) format("woff2");unicode-range:U+1f??}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:900;src:local("Source Sans Pro Black"),local("SourceSansPro-Black"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3iu4nwlBdu3cOWxy40.woff2) format("woff2");unicode-range:U+0370-03ff}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:900;src:local("Source Sans Pro Black"),local("SourceSansPro-Black"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3iu4nwmBdu3cOWxy40.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+1ea0-1ef9,U+20ab}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:900;src:local("Source Sans Pro Black"),local("SourceSansPro-Black"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3iu4nwmRdu3cOWxy40.woff2) format("woff2");unicode-range:U+0100-024f,U+0259,U+1e??,U+2020,U+20a0-20ab,U+20ad-20cf,U+2113,U+2c60-2c7f,U+a720-a7ff}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:900;src:local("Source Sans Pro Black"),local("SourceSansPro-Black"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3iu4nwlxdu3cOWxw.woff2) format("woff2");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}.muze-group-container{-webkit-tap-highlight-color:rgba(0,0,0,0);background-color:transparent;color:#333;font-family:Source Sans Pro,Helvetica Neue,Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143;margin:0}.muze-group-container *,.muze-group-container :after,.muze-group-container :before{-webkit-box-sizing:border-box;box-sizing:border-box}.muze-group-container .muze-table-arrow{cursor:pointer;height:0;margin:5px;opacity:.5;position:absolute;width:0;z-index:10}.muze-group-container .muze-table-arrow:hover{opacity:1}.muze-group-container .muze-table-arrow-right{border-left:15px solid #4682b4;left:100%}.muze-group-container .muze-table-arrow-left,.muze-group-container .muze-table-arrow-right{border-bottom:20px solid transparent;border-top:20px solid transparent;top:-webkit-calc(50% - 25px);top:calc(50% - 25px)}.muze-group-container .muze-table-arrow-left{border-right:15px solid #4682b4;right:100%}.muze-group-container .muze-table-arrow-bottom{border-top:15px solid #4682b4;top:100%}.muze-group-container .muze-table-arrow-bottom,.muze-group-container .muze-table-arrow-top{border-left:20px solid transparent;border-right:20px solid transparent;left:-webkit-calc(50% - 25px);left:calc(50% - 25px)}.muze-group-container .muze-table-arrow-top{border-bottom:15px solid #4682b4;bottom:100%}.muze-group-container .table-row-nested{border-top:none;visibility:hidden}.muze-group-container svg{display:block;float:left;height:inherit;vertical-align:top;width:inherit}.muze-group-container .axisName.hidden{opacity:0}.muze-group-container .axisName{opacity:1}.muze-group-container .grid-td svg{max-height:100%;max-width:100%}.muze-group-container .domain{opacity:0}.muze-board{float:left}.muze-layout-container{float:left;position:relative}.muze-board-legend,.muze-legend-section{float:left;text-align:center}.muze-legend-horizontal-section{-webkit-align-items:center;-webkit-box-align:center;-webkit-box-pack:center;-webkit-flex-wrap:wrap;-webkit-justify-content:center;align-items:center;display:-webkit-box;display:-webkit-flex;display:flex;flex-wrap:wrap;justify-content:center}.muze-legend-components{float:left;text-align:center}.muze-grid-layout,.muze-grid-layout-container,.muze-grid-layout-row{float:left;position:relative}.muze-grid-table{background-color:transparent;border-spacing:0;table-layout:fixed}.muze-grid-td,.muze-grid-th{padding:0}.muze-table-header{height:inherit;width:inherit}.muze-grid-layout,.muze-layout-grid-container{float:left;position:relative}.muze-layout-grid-container div,.muze-layout-grid-container table{border-collapse:collapse;float:left}.muze-title-container .muze-header-cell{color:#5f5f5f;font-size:24px;font-weight:700}.muze-subtitle-container .muze-text-cell{color:#b1b1b1;font-size:16px;font-weight:400}.domain{opacity:0}.muze-group-container,.muze-layout-container,.muze-legend-container{float:left}.hidden{display:none} \ No newline at end of file diff --git a/packages/muze/npm/dist/muze.js b/packages/muze/npm/dist/muze.js index 79814fb1..37488f60 100644 --- a/packages/muze/npm/dist/muze.js +++ b/packages/muze/npm/dist/muze.js @@ -1,2 +1,2 @@ -!function webpackUniversalModuleDefinition(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define("muze",[],t):"object"==typeof exports?exports.muze=t():e.muze=t()}(window,function(){return function(e){var t={};function __webpack_require__(n){if(t[n])return t[n].exports;var r=t[n]={i:n,l:!1,exports:{}};return e[n].call(r.exports,r,r.exports,__webpack_require__),r.l=!0,r.exports}return __webpack_require__.m=e,__webpack_require__.c=t,__webpack_require__.d=function(e,t,n){__webpack_require__.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},__webpack_require__.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},__webpack_require__.t=function(e,t){if(1&t&&(e=__webpack_require__(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(__webpack_require__.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var r in e)__webpack_require__.d(n,r,function(t){return e[t]}.bind(null,r));return n},__webpack_require__.n=function(e){var t=e&&e.__esModule?function getDefault(){return e.default}:function getModuleExports(){return e};return __webpack_require__.d(t,"a",t),t},__webpack_require__.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},__webpack_require__.p="",__webpack_require__(__webpack_require__.s=7)}([function(e,t,n){(function(e){var r,i,a,o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};!function(n,u){"object"==o(t)&&"object"==o(e)?e.exports=u():(i=[],void 0===(a="function"==typeof(r=u)?r.apply(t,i):r)||(e.exports=a))}(window,function(){return function(e){var t={};function n(r){if(t[r])return t[r].exports;var i=t[r]={i:r,l:!1,exports:{}};return e[r].call(i.exports,i,i.exports,n),i.l=!0,i.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==(void 0===e?"undefined":o(e))&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var i in e)n.d(r,i,function(t){return e[t]}.bind(null,i));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=1)}([function(e){e.exports={name:"datamodel",description:"Relational algebra compliant in-memory tabular data store",homepage:"https://github.com/chartshq/datamodel",version:"2.0.2",license:"MIT",main:"dist/datamodel.js",author:"Charts.com ",keywords:["datamodel","data","relational","algebra","model","muze","fusioncharts","table","tabular","operation"],repository:{type:"git",url:"https://github.com/chartshq/datamodel.git"},contributors:[{name:"Akash Goswami",email:"akash@charts.com"},{name:"Subhash Haldar",email:"subhash@charts.com"},{name:"Rousan Ali",email:"rousan@charts.com",url:"https://rousan.io"},{name:"Ujjal Kumar Dutta",email:"ujjal@charts.com"}],dependencies:{"d3-dsv":"^1.0.8"},devDependencies:{"babel-cli":"6.26.0","babel-core":"^6.26.3","babel-eslint":"6.1.2","babel-loader":"^7.1.4","babel-plugin-transform-runtime":"^6.23.0","babel-preset-env":"^1.7.0","babel-preset-es2015":"^6.24.1","babel-preset-flow":"^6.23.0",chai:"3.5.0","cross-env":"^5.0.5",eslint:"3.19.0","eslint-config-airbnb":"15.1.0","eslint-plugin-import":"2.7.0","eslint-plugin-jsx-a11y":"5.1.1","eslint-plugin-react":"7.3.0","istanbul-instrumenter-loader":"^3.0.0",jsdoc:"3.5.5",json2yaml:"^1.1.0",karma:"1.7.1","karma-chai":"0.1.0","karma-chrome-launcher":"2.1.1","karma-coverage-istanbul-reporter":"^1.3.0","karma-mocha":"1.3.0","karma-spec-reporter":"0.0.31","karma-webpack":"2.0.3",marked:"^0.5.0",mocha:"3.4.2","mocha-webpack":"0.7.0","transform-runtime":"0.0.0",webpack:"^4.12.0","webpack-cli":"^3.0.7","webpack-dev-server":"^3.1.4"},scripts:{test:"npm run lint && npm run ut",ut:"karma start karma.conf.js",utd:"karma start --single-run false --browsers Chrome karma.conf.js ",build:"webpack --mode production","build:dev":"webpack --mode development",start:"webpack-dev-server --config webpack.config.dev.js --mode development --open",lint:"eslint ./src","lint-errors":"eslint --quiet ./src",docs:"rm -rf yaml && mkdir yaml && jsdoc -c jsdoc.conf.json"}}},function(e,t,n){var r=n(2);e.exports=r.default?r.default:r},function(n,c,f){"use strict";f.r(c);var p={};f.r(p),f.d(p,"DataFormat",function(){return b}),f.d(p,"DimensionSubtype",function(){return _}),f.d(p,"MeasureSubtype",function(){return C}),f.d(p,"FieldType",function(){return P}),f.d(p,"FilteringMode",function(){return A});var y={};f.r(y),f.d(y,"DSVArr",function(){return Je}),f.d(y,"DSVStr",function(){return lt}),f.d(y,"FlatJSON",function(){return ft}),f.d(y,"Auto",function(){return ht});var g={};f.r(g),f.d(g,"sum",function(){return Et}),f.d(g,"avg",function(){return Mt}),f.d(g,"min",function(){return Ot}),f.d(g,"max",function(){return Tt}),f.d(g,"first",function(){return Ft}),f.d(g,"last",function(){return Nt}),f.d(g,"count",function(){return jt}),f.d(g,"sd",function(){return It});var b={FLAT_JSON:"FlatJSON",DSV_STR:"DSVStr",DSV_ARR:"DSVArr",AUTO:"Auto"},_={CATEGORICAL:"categorical",TEMPORAL:"temporal",GEO:"geo"},C={DISCRETE:"discrete"},P={MEASURE:"measure",DIMENSION:"dimension"},A={NORMAL:"normal",INVERSE:"inverse",ALL:"all"};function l(e,t){e.length>0&&e.split(",").forEach(function(e){var n=e.split("-"),r=+n[0],i=+(n[1]||n[0]);if(i>=r)for(var a=r;a<=i;a+=1)t(a)})}var O=function(){function e(e,t){for(var n=0;n=0;)o=e[a+1],-1!==r.indexOf(o)&&i.push({index:a,token:o});return i},m.formatAs=function(e,t){var n,r=h(e),i=m.findTokens(t),a=m.getTokenDefinitions(),o=String(t),u=m.TOKEN_PREFIX,c=void 0,s=void 0,l=void 0;for(l=0,n=i.length;l=0;h--)(s=a[h].index)+1!==f.length-1?(void 0===u&&(u=f.length),l=f.substring(s+2,u),f=f.substring(0,s+2)+RegExp.escape(l)+f.substring(u,f.length),u=s):u=s;for(h=0;h1){r=Math.abs(n[1]-n[0]);for(var i=2,a=n.length;i3&&void 0!==arguments[3]&&arguments[3],i=arguments.length>4&&void 0!==arguments[4]?arguments[4]:ye.CROSS,a=[],o=[],u=n||K,c=e.getFieldspace(),s=t.getFieldspace(),f=c.name,h=s.name,d=c.name+"."+s.name,p=L(c,s);if(f===h)throw new Error("DataModels must have different alias names");return c.fields.forEach(function(e){var t=E({},e.schema);-1===p.indexOf(t.name)||r||(t.name=c.name+"."+t.name),a.push(t)}),s.fields.forEach(function(e){var t=E({},e.schema);-1!==p.indexOf(t.name)?r||(t.name=s.name+"."+t.name,a.push(t)):a.push(t)}),l(e._rowDiffset,function(e){var n=!1,d=void 0;l(t._rowDiffset,function(t){var l=[],y={};y[f]={},y[h]={},c.fields.forEach(function(t){l.push(t.data[e]),y[f][t.name]=t.data[e]}),s.fields.forEach(function(e){-1!==p.indexOf(e.schema.name)&&r||l.push(e.data[t]),y[h][e.name]=e.data[t]});var g=Ke(y[f]),v=Ke(y[h]);if(u(g,v)){var m={};l.forEach(function(e,t){m[a[t].name]=e}),n&&ye.CROSS!==i?o[d]=m:(o.push(m),n=!0,d=e)}else if((i===ye.LEFTOUTER||i===ye.RIGHTOUTER)&&!n){var b={},_=c.fields.length-1;l.forEach(function(e,t){b[a[t].name]=t<=_?e:null}),n=!0,d=e,o.push(b)}})}),new At(o,a,{name:d})}function z(e,t){var n=""+e,r=""+t;return nr?1:0}function X(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:z;return e.length>1&&function e(t,n,r,i){if(r===n)return t;var a=n+Math.floor((r-n)/2);return e(t,n,a,i),e(t,a+1,r,i),function(e,t,n,r,i){for(var a=e,o=[],u=t;u<=r;u+=1)o[u]=a[u];for(var c=t,s=n+1,l=t;l<=r;l+=1)c>n?(a[l]=o[s],s+=1):s>r?(a[l]=o[c],c+=1):i(o[c],o[s])<=0?(a[l]=o[c],c+=1):(a[l]=o[s],s+=1)}(t,n,a,r,i),t}(e,0,e.length-1,t),e}function Q(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);to?"desc"===t?-1:1:0}}return i}function Z(e,t){var n=new Map,r=[];return e.forEach(function(e){var i=e[t];n.has(i)?r[n.get(i)][1].push(e):(r.push([i,[e]]),n.set(i,r.length-1))}),r}function ee(e,t,n){var r={label:e[0]};return t.reduce(function(t,r,i){return t[r]=e[1].map(function(e){return e[n[i].index]}),t},r),r}function ne(e,t){var n={},r=[],i=[],a=[],o=e.getFieldspace(),u=t.getFieldspace(),c=o.fieldsObj(),s=u.fieldsObj(),f=o.name+" union "+u.name;if(!M(e._colIdentifier.split(",").sort(),t._colIdentifier.split(",").sort()))return null;function d(e,t,r){l(e._rowDiffset,function(e){var o={},u="";i.forEach(function(n){var r=t[n].data[e];u+="-"+r,o[n]=r}),n[u]||(r&&a.push(o),n[u]=!0)})}return e._colIdentifier.split(",").forEach(function(e){var t=c[e];r.push(E({},t.schema)),i.push(t.schema.name)}),d(t,s,!1),d(e,c,!0),new At(a,r,{name:f})}function re(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);tn&&(n=e)}),[t,n]}(this.data)}},{key:"parse",value:function value(e){return e=parseFloat(e,10),Number.isNaN(e)?null:e}},{key:"unit",value:function value(){return this.fieldUnit}},{key:"scale",value:function value(){return this.fieldScale}},{key:"numberFormat",value:function value(){var e=this.fieldNumberformat;return function(t){return e(t)}}},{key:"defAggFn",value:function value(){return this.fieldDefAggFn}}]),t}(),Ee=function(){function e(e,t){for(var n=0;n=a?c=!0:(r=e.charCodeAt(o++))===at?l=!0:r===ot&&(l=!0,e.charCodeAt(o)===at&&++o),e.slice(i+1,t-1).replace(/""/g,'"')}for(;o2&&void 0!==arguments[2]?arguments[2]:{},i=arguments[3],a=void 0;t!==fe?(a={op:t,meta:r,criteria:i},e._derivation.push(a)):(a=[].concat(Ge(i)),e._derivation.length=0,(n=e._derivation).push.apply(n,Ge(a)))},yt=function ze(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=n.operation||"and",i=n.filterByMeasure||!1,a=[];a=t.length?t.map(function(e){return function(e){var t=e.getData(),n=t.schema,r=e.getFieldsConfig(),a=e.getFieldspace().fieldsObj(),o=t.data,u=Object.values(r).reduce(function(e,t){return e[t.def.name]=a[t.def.name].domain(),e},{});return function(e){return!!o.length&&o.some(function(t){return n.every(function(n){if(!(n.name in e))return!0;var a=e[n.name].valueOf();if(i&&n.type===P.MEASURE)return a>=u[n.name][0]&&a<=u[n.name][1];if(n.type!==P.DIMENSION)return!0;var o=r[n.name].index;return t[o]===e[n.name].valueOf()})})}}(e)}):[function(){return!1}];return"and"===r?e.clone(!1,!1).select(function(e){return a.every(function(t){return t(e)})},{saveChild:!1,mode:A.ALL}):e.clone(!1,!1).select(function(e){return a.some(function(t){return t(e)})},{mode:A.ALL,saveChild:!1})},gt=function Xe(e,t,n,r){var i=e.clone(r.saveChild),a=function(e,t,n,r){var i=[],a=-1,o=void 0,c=function u(e){return n(qe(t,e),e)};return r.mode===A.INVERSE&&(c=function u(e){return!n(qe(t,e))}),l(e,function(e){c(e)&&(-1!==a&&e===a+1?(o=i.length-1,i[o]=i[o].split("-")[0]+"-"+e):i.push(""+e),a=e)}),i.join(",")}(i._rowDiffset,i.getPartialFieldspace().fields,t,n);return i._rowDiffset=a,i.__calculateFieldspace().calculateFieldsConfig(),r.saveChild&&pt(i,ce,{config:n},t),i},vt=function Qe(e,t,n,r){var i=e.clone(n.saveChild),a=t;return n.mode===A.INVERSE&&(a=r.filter(function(e){return-1===t.indexOf(e)})),i._colIdentifier=a.join(","),i.__calculateFieldspace().calculateFieldsConfig(),n.saveChild&&pt(i,se,{projField:t,config:n,actualProjField:a},null),i},mt=function $e(e,t,n,r){r=Object.assign(Object.assign({},Ze),r);var i=y[r.dataFormat];if(!i||"function"!=typeof i)throw new Error("No converter function found for "+r.dataFormat+" format");var a=i(t,r),o=dt(a,2),u=o[0],c=o[1],s=Ue(c,n,u),l=Y.createNamespace(s,r.name);return e._partialFieldspace=l,e._rowDiffset=c.length&&c[0].length?"0-"+(c[0].length-1):"",e._colIdentifier=n.map(function(e){return e.name}).join(),e},bt=function Ze(e,t){for(var n=0;n2&&void 0!==arguments[2]?arguments[2]:{},i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},a=i.nonTraversingModel,o=i.excludeModels||[];t!==a&&((!o.length||-1===o.indexOf(t))&&t.handlePropagation(n,r),t._children.forEach(function(t){var a=_t(n,t),o=dt(a,2),u=o[0],c=o[1];e(t,[u,c],r,i)}))},wt=function nt(e,t,n,r){var i=void 0,a=void 0,o=n.propagationNameSpace,u=n.propagateToSource,c=n.sourceId,s=r.propagateInterpolatedValues,l=[];if(null===e&&!0!==r.persistent)l=[{criteria:[]}];else{var f,h=Object.values(o.mutableActions);!1!==u&&(h=h.filter(function(e){return e.config.sourceId!==c}));var d=h.filter(function(e){return(r.filterFn||function(){return!0})(e,r)}).map(function(e){return e.config.criteria}),p=[];if(!1!==u){var y=Object.values(o.mutableActions);y.forEach(function(e){var t=e.config;!1===t.applyOnSource&&t.action===r.action&&t.sourceId!==c&&(p.push(e.model),(i=y.filter(function(t){return t!==e}).map(function(e){return e.config.criteria})).length&&l.push({criteria:i,models:e.model,path:function e(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];return null!==t._parent&&(n.push(t),e(t._parent,n)),n}(e.model)}))})}i=(f=[]).concat.apply(f,[].concat(Ge(d),[e])).filter(function(e){return null!==e}),l.push({criteria:i,excludeModels:[].concat(p,Ge(r.excludeModels||[]))})}var g=t.model,v=Object.assign({sourceIdentifiers:e,propagationSourceId:c},r),m=t.groupByModel;s&&m&&(a=yt(m,i,{filterByMeasure:s}),xt(m,a,v)),l.forEach(function(e){var t=yt(g,e.criteria),n=e.path;if(n){var r=function(e,t){for(var n=0,r=t.length;n0&&void 0!==arguments[0])||arguments[0],t=void 0;if(!1===(!(arguments.length>1&&void 0!==arguments[1])||arguments[1])){var n=this.getData({getAllFields:!0}),r=n.data,i=n.schema,a=r.map(function(e){var t={};return i.forEach(function(n,r){t[n.name]=e[r]}),t});t=new this.constructor(a,i)}else t=new this.constructor(this);return e&&this._children.push(t),t}},{key:"project",value:function value(e,t){var n={mode:A.NORMAL,saveChild:!0};t=Object.assign({},n,t);var r=this.getFieldsConfig(),i=Object.keys(r),a=t.mode,o=e.reduce(function(e,t){return"RegExp"===t.constructor.name?e.push.apply(e,function(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t1&&void 0!==arguments[1]?arguments[1]:[];pt(this,fe,null,t),this._parent=e,e._children.push(this)}}]),e}(),St=function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function(e,t){var n=[],r=!0,i=!1,a=void 0;try{for(var o,u=e[Symbol.iterator]();!(r=(o=u.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){i=!0,a=e}finally{try{!r&&u.return&&u.return()}finally{if(i)throw a}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")},Pt=function(){function e(e,t){for(var n=0;n0,c=[];if(n.split(",").forEach(function(t){for(var n=0;n=0;u--)i=t[u][0],a=t[u][1],(o=bt(r,i))&&(S(a)?X(n,function(e,t){return a(e[o.index],t[o.index])}):j(a)?function(){var e=Z(n,o.index),t=a[a.length-1],i=a.slice(0,a.length-1),u=i.map(function(e){return bt(r,e)});e.forEach(function(e){e.push(ee(e,i,u))}),X(e,function(e,n){var r=e[2],i=n[2];return t(r,i)}),n.length=0,e.forEach(function(e){n.push.apply(n,Q(e[1]))})}():(a="desc"===String(a).toLowerCase()?"desc":"asc",X(n,$(o.type,a,o.index))));e.uids=[],n.forEach(function(t){e.uids.push(t.pop())})}(a,r),i.columnWise){var s=Array.apply(void 0,Q(Array(a.schema.length))).map(function(){return[]});a.data.forEach(function(e){e.forEach(function(e,t){s[t].push(e)})}),a.data=s}return a}.call(this,this.getPartialFieldspace().fields,this._rowDiffset,e.getAllFields?t.map(function(e){return e.name}).join():this._colIdentifier,e.sort,{columnWise:"column"===e.order,addUid:!!e.withUid});if(!e.formatter)return n;var r=e.formatter,i=n.data,a=n.schema,o=n.uids,u=a.map(function(e){return e.name}),c=Object.keys(r).reduce(function(e,t){var n=u.indexOf(t);return-1!==n&&e.push([n,r[t]]),e},[]);return"column"===e.order?c.forEach(function(e){var t=e[0],n=e[1];i[t].forEach(function(e,r){i[t][r]=n.call(void 0,e,o[r],a[t])})}):i.forEach(function(e,t){c.forEach(function(n){var r=n[0],i=n[1];e[r]=i.call(void 0,e[r],o[t],a[r])})}),n}},{key:"groupBy",value:function value(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{saveChild:!0},r=""+e.join(),i=function de(e,t,n,r){var i=function(e,t){var n=[],r=e.getPartialFieldspace(),i=r.getDimension(),a=r.getMeasure();return Object.entries(i).forEach(function(e){var r=ke(e,1)[0];t&&t.length?-1!==t.indexOf(r)&&n.push(r):n.push(r)}),Object.entries(a).forEach(function(e){var r=ke(e,1)[0];"discrete"===a[r].subType()&&(t&&t.length?-1!==t.indexOf(r)&&n.push(r):n.push(r))}),n}(e,t),a=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n={},r=t,i=e.getPartialFieldspace().getMeasure(),a=we.defaultReducer();return"function"==typeof t&&(a=t),Object.entries(i).forEach(function(e){var o=ke(e,1)[0];"string"==typeof t[o]&&(r[o]=we.resolve(r[o])?we.resolve(r[o]):a),"function"!=typeof t[o]&&(r[o]=void 0),n[o]=r[o]||we.resolve(i[o].defAggFn())||a}),n}(e,n),o=e.getPartialFieldspace(),u=o.fieldsObj(),c=o.name,s=[],f=[],h=[],d={},p=[],y=void 0;Object.entries(u).forEach(function(e){var t=ke(e,2),n=t[0],r=t[1];(-1!==i.indexOf(n)||a[n])&&(h.push(E({},r.schema)),"measure"===r.schema.type&&"discrete"!==r.schema.subtype?f.push(n):"dimension"!==r.schema.type&&"discrete"!==r.schema.subtype||s.push(n))});var g=0;return l(e._rowDiffset,function(e){var t="";s.forEach(function(n){t=t+"-"+u[n].data[e]}),void 0===d[t]?(d[t]=g,p.push({}),s.forEach(function(t){p[g][t]=u[t].data[e]}),f.forEach(function(t){p[g][t]=[u[t].data[e]]}),g+=1):f.forEach(function(n){p[d[t]][n].push(u[n].data[e])})}),p.forEach(function(e){var t=e;f.forEach(function(n){t[n]=a[n](e[n])})}),r?(r.__calculateFieldspace(),y=r):y=new Lt(p,h,{name:c}),y}.apply(void 0,[this,e,t]);return n.saveChild&&(this._children.push(i),pt(i,le,{fieldsArr:e,groupByString:r,defaultReducer:we.defaultReducer()},t)),i._parent=this,i}},{key:"sort",value:function value(e){var t=this.getData({order:"row",sort:e}),n=[t.schema.map(function(e){return e.name})].concat(t.data),r=new this.constructor(n,t.schema,{dataFormat:"DSVArr"});return r._sortingDetails=e,r}},{key:"addField",value:function value(e){var t=e.fieldName();this._colIdentifier+=","+t;var n=this._partialFieldspace;if(n.fieldsObj()[e.fieldName()]){var r=n.fields.findIndex(function(e){return e.name===t});r>=0&&(n.fields[r]=e)}else n.fields.push(e);return this.__calculateFieldspace().calculateFieldsConfig(),this}},{key:"calculateVariable",value:function value(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{saveChild:!0,replaceVar:!1},r=this.getFieldsConfig(),i=t.slice(0,t.length-1),a=t[t.length-1];if(r[e.name]&&!n.replaceVar)throw new Error(e.name+" field already exists in model.");var o=i.map(function(e){var t=r[e];if(!t)throw new Error(e+" is not a valid column name.");return t.index}),u=this.clone(),c=u.getFieldspace().fields,s=o.map(function(e){return c[e]}),f=[];l(u._rowDiffset,function(e){var t=s.map(function(t){return t.data[e]});f[e]=a.apply(void 0,function(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t1&&void 0!==arguments[1]?arguments[1]:{},n=arguments[2],r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},i=t.isMutableAction,a=t.sourceId,o=t.payload,u=function e(t){return t._parent?e(t._parent):t}(this),c=u._propagationNameSpace,s={groupByModel:function e(t){return t._parent&&t._derivation.find(function(e){return"group"!==e.op})?e(t._parent):t}(this),model:u};return n&&function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments[2],r=void 0,i=t.isMutableAction,a=t.criteria,o=t.action+"-"+t.sourceId;r=i?e.mutableActions:e.immutableActions,null===a?delete r[o]:r[o]={model:n,config:t}}(c,t,this),wt(e,s,{propagationNameSpace:c,sourceId:a},Object.assign({payload:o},t)),i&&function(e,t,n){var r=e.immutableActions;for(var i in r){var a=r[i].config,o=n.config.sourceId,u=!n.propConfig.filterImmutableAction||n.propConfig.filterImmutableAction(a,n.config);if(a.sourceId!==o&&u){var c=a.criteria;wt(c,t,{propagationNameSpace:e,propagateToSource:!1,sourceId:o},a)}}}(c,s,{config:t,propConfig:r}),this}},{key:"on",value:function value(e,t){switch(e){case"propagation":this._onPropagation.push(t)}return this}},{key:"unsubscribe",value:function value(e){switch(e){case"propagation":this._onPropagation=[]}return this}},{key:"handlePropagation",value:function value(e,t){var n=this;this._onPropagation.forEach(function(r){return r.call(n,e,t)})}},{key:"bin",value:function value(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=this.clone(),r=t.name||e+"_binned";if(this.getFieldsConfig()[r]||!this.getFieldsConfig()[e])throw new Error("Field "+e+" already exists.");var i=function I(e,t,n){var r=n.buckets,i=n.binCount,a=n.binSize,o=n.start,u=[],c=[],s=e.domain(),f=ue(s,2),h=f[0],d=f[1],p=d,y=[],g=void 0,v=void 0,m=void 0,b=void 0;if(l(t,function(t){u.push({data:e.data[t],index:t})}),!r){var _=((d+=1)-h)%(a=a||(d-h)/i);for(i||0===_||(d=d+a-_),g=h+a;g<=d;)y.push(g),g+=a;r={start:o=o||h,stops:y}}v=0===r.start?0:r.start||h,r.stops.forEach(function(e){u.filter(function(t){return t.data>=v&&t.data=r.stops[r.stops.length-1]}).forEach(function(e){c[e.index]=r.stops[r.stops.length-1]+"-"+p}),r.stops.unshift(r.start),b=new Set(r.stops),hr.stops[r.stops.length-1]&&b.add(p),b=[].concat(function(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t1&&void 0!==arguments[1]?arguments[1]:{saveChild:!0}).saveChild;return t.forEach(function(e){n=e(n),i.push.apply(i,function(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t1&&r.dispose(),n}},bin:function bin(){for(var e=arguments.length,t=Array(e),n=0;n2?(i=arguments.length<=0?void 0:arguments[0],r=arguments.length<=1?void 0:arguments[1],a=arguments.length<=2?void 0:arguments[2]):(i=null,r=arguments.length<=0?void 0:arguments[0],a=arguments.length<=1?void 0:arguments[1]),t=a(w),(e=n=new A(t.fn)).addDependencies.apply(e,P(t.dependencies)),this._addPropInModel(i,function(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}({},r,n)),this}},{key:"_addPropInModel",value:function value(e,t){return this._graph.createNodesFrom(t,e),this}},{key:"on",value:function value(e,t,n){var r,i=e instanceof Array?e:[e],a=this._graph.createElectricNodeOf(i,{type:"CurrFrame",fn:t});return n&&(r=this._graph.stopPropagation().setPropagationOverride("nextFrame")).resetNodeValue.apply(r,P(e)),a}},{key:"next",value:function value(e,t,n){var r,i=e instanceof Array?e:[e],a=this._graph.createElectricNodeOf(i,{type:"NextFrame",fn:t});return n&&(r=this._graph.stopPropagation().setPropagationOverride("currentFrame")).resetNodeValue.apply(r,P(e)),a}},{key:"lock",value:function value(){return this._lockFlag=!0,this._reqQ.length=0,this}},{key:"unlock",value:function value(){return this._lockFlag=!1,this.setProp.apply(this,P(this._reqQ)),this._reqQ.length=0,this}},{key:"prop",value:function value(){var e,t=void 0,n=void 0;switch(e=arguments.length){case 1:t=arguments.length<=0?void 0:arguments[0];break;case 2:t=arguments.length<=0?void 0:arguments[0],n=arguments.length<=1?void 0:arguments[1];break;default:return this}return 2===e?(this._lockFlag?this._reqQ.push([t,n]):this.setProp([t,n]),this):this._graph.getNodeValue(t)}},{key:"setProp",value:function value(){for(var e,t=this,n=arguments.length,r=Array(n),i=0;i/gi),e},SmartLabelManager.store={},SmartLabelManager.prototype._calCharDimWithCache=function(e,t,n){if(!this._init)return!1;var r,i,a,o,u,c,s=this.options.maxCacheLimit,l=this._container,h=this.style||{},d=this._advancedCache||(this._advancedCache={}),p=this._advancedCacheKey||(this._advancedCacheKey=[]),y=e+(h.fontSize||"")+(h.fontFamily||"")+(h.fontWeight||"")+(h.fontStyle||""),g=e+"init"+(h.fontSize||"")+(h.fontFamily||"")+(h.fontWeight||"")+(h.fontStyle||"");return f[e]&&(e=f[e]),t?void 0===(c=d[g])&&(l.innerHTML=e.repeat?e.repeat(n):Array(n+1).join(e),a=l.offsetWidth,l.innerHTML=e,o=l.offsetWidth,c=d[g]=(a-n*o)/(n+1),p.push(g),p.length>s&&delete d[p.shift()]):c=0,(u=d[y])?(i=u.split(","),{width:parseFloat(i[0],10),height:parseFloat(i[1],10)}):(l.innerHTML=e,r={height:l.offsetHeight,width:l.offsetWidth+c},d[y]=r.width+","+r.height,p.push(y),p.length>s&&delete d[p.shift()],r)},SmartLabelManager.prototype._getWidthFn=function(){var e=this._containerObj,t=this._container,n=e.svgText;return n?function(e){var t,r;return n.textContent=e,(r=(t=n.getBBox()).width-d)<1&&(r=t.width),r}:function(e){return t.innerHTML=e,t.offsetWidth}},SmartLabelManager.prototype.setStyle=function(e){return this._init?e!==this.style||this._styleNotSet?(e||(e=this.style),o.setLineHeight(e),this.style=e,this._containerObj=t=this._containerManager.get(e),this._containerObj?(this._container=t.node,this._context=t.context,this._cache=t.charCache,this._lineHeight=t.lineHeight,this._styleNotSet=!1):this._styleNotSet=!0,this):void 0:this;var t},SmartLabelManager.prototype.useEllipsesOnOverflow=function(e){return this._init?(this._showNoEllipses=!e,this):this},SmartLabelManager.prototype.getSmartText=function(e,t,n,r){if(!this._init)return!1;void 0===e||null===e?e="":"string"!=typeof e&&(e=e.toString());var i,a,c,l,f,d,p,y,g,v,m,b,_,x,w,k,C,S,P,A,E,M,O,T,F,N,j=!1,I=0,D=-1,L=-1,R=-1,B=0,z=0,H=[],V=0,U=this._showNoEllipses?"":"...",W=this._lineHeight,q=this._context,G=this._container,Y=this._containerObj,X=Y.ellipsesWidth,K=Y.dotWidth,$=[],Q=-1,Z=-1,J=-1,ee=function fastTrim(e){for(var t=/\s/,n=(e=e.replace(/^\s\s*/,"")).length;t.test(e.charAt(n-=1)););return e.slice(0,n+1)},te={text:e,maxWidth:t,maxHeight:n,width:null,height:null,oriTextWidth:null,oriTextHeight:null,oriText:e,isTruncated:!1};if(b=this._getWidthFn(),n===W&&(n*=1.2),G){if(!h.isBrowserLess){if((j=o.xmlTagRegEx.test(e))?(G.innerHTML=e,te.oriTextWidth=p=G.offsetWidth,te.oriTextHeight=y=G.offsetHeight):(l=e.replace(o.ltgtRegex,function(e){return"<"===e?"<":">"}),w=this.getOriSize(l,!0),te.oriTextWidth=p=w.width,te.oriTextHeight=y=w.height),y<=n&&p<=t)return te.width=te.oriTextWidth=p,te.height=te.oriTextHeight=y,te;if(W>n)return te.text="",te.width=te.oriTextWidth=0,te.height=te.oriTextHeight=0,te}if(e=ee(e).replace(/(\s+)/g," "),f=this._showNoEllipses?t:t-X,!j){if(i=(H=e.split("")).length,a="",c=[],m=H[0],this._cache[m]?P=this._cache[m].width:(P=b(m),this._cache[m]={width:P}),f>P)V=(c=e.substr(0,o.getNearestBreakIndex(e,f,this)).split("")).length;else{if(P>t)return te.text="",te.width=te.oriTextWidth=te.height=te.oriTextHeight=0,te;U&&((f=t-2*K)>P?U="..":(f=t-K)>P?U=".":(f=0,U=""))}if(B=b(c.join("")),z=this._lineHeight,r){for(;Vf&&(a||(a=c.slice(0,-1).join("")),B>t))return te.text=ee(a)+U,te.tooltext=te.oriText,te.width=b(te.text),te.height=this._lineHeight,te;return te.text=c.join(""),te.width=B,te.height=this._lineHeight,te}for(;Vf&&(a||(a=c.slice(0,-1).join("")),B>t)){if(L=e.substr(0,c.length).lastIndexOf(" "),D=e.substr(0,c.length).lastIndexOf("-"),L>R?(B=b(c.slice(R+1,L).join("")),c.splice(L,1,"
"),R=L,g=L+1):D>R?(D===c.length-1?(B=b(c.slice(R+1,L).join("")),c.splice(D,1,"
-")):(B=b(c.slice(R+1,L).join("")),c.splice(D,1,"-
")),R=D,g=D+1):(c.splice(c.length-1,1,"
"+H[V]),J=c.length-2,B=b(c.slice(R+1,J+1).join("")),R=J,g=V),(z+=this._lineHeight)>n)return te.text=ee(a)+U,te.tooltext=te.oriText,te.width=t,te.height=z-this._lineHeight,te;I=s(I,B),a=null,v=o.getNearestBreakIndex(e.substr(g),f,this),B=b(e.substr(g,v||1)),c.length)/g,'$1'),G.innerHTML=e,C=0,S=(k=G[h.childRetriverFn](h.childRetriverString)).length;Ct)return te.text="",te.width=te.oriTextWidth=te.height=te.oriTextHeight=0,te;if(P>f&&!this._showNoEllipses&&((f=t-2*K)>P?U="..":(f=t-K)>P?U=".":(f=0,U="")),_=$[0].elem.offsetLeft,x=$[0].elem.offsetTop,r)for(;Vf&&(N||(N=V),G.offsetWidth>t&&(F=V,V=i));else for(;Vf?(N||(N=V),M>t&&(L=$[V].spaceIdx,D=$[V].dashIdx,L>R?($[L].elem.innerHTML="
",R=L):D>R?($[D].elem.innerHTML=D===V?"
-":"-
",R=D):A.parentNode.insertBefore(T=u.createElement("br"),A),A.offsetHeight+A.offsetTop>n?(T?T.parentNode.removeChild(T):R===D?$[D].elem.innerHTML="-":$[L].elem.innerHTML=" ",F=V,V=i):N=null)):O>n&&(F=V,V=i);if(F=N;V-=1)(A=$[V].elem).parentNode.removeChild(A);for(;V>=0;V-=1)A=$[V].elem,o.classNameBrReg.test(A.className)?A.parentNode.removeChild(A):V=0}return te.text=G.innerHTML.replace(o.spanRemovalRegx,"$1").replace(/\&\;/g,"&"),te.isTruncated&&(te.text+=U,te.tooltext=d),te.height=G.offsetHeight,te.width=G.offsetWidth,te}return te.error=new Error("Body Tag Missing!"),te},SmartLabelManager.prototype.getOriSize=function(e,t){if(!this._init)return!1;var n,r,i,a,o,u=0,c=0,f={};if(!t)return this._calCharDimWithCache(e);for(a=0,o=(n=e.split("")).length;a]+?\>)|(&(?:[a-z]+|#[0-9]+);|.)/gi,spanAdditionReplacer:'$1$2',spanRemovalRegx:new RegExp("\\]+?"+c+"[^\\>]{0,}\\>(.*?)\\<\\/span\\>","ig"),xmlTagRegEx:new RegExp("<[^>][^<]*[^>]+>","i"),ltgtRegex:/<|>/g,brReplaceRegex://gi,testStrAvg:"WgI",parentContainerStyle:{position:"absolute",top:"-9999em",whiteSpace:"nowrap",padding:"0px",width:"1px",height:"1px",overflow:"hidden"},supportedStyle:{font:"font",fontFamily:"font-family","font-family":"font-family",fontWeight:"font-weight","font-weight":"font-weight",fontSize:"font-size","font-size":"font-size",lineHeight:"line-height","line-height":"line-height",fontStyle:"font-style","font-style":"font-style"},getDocumentSupport:function getDocumentSupport(){var r,i,a;return t.getElementsByClassName?(r="getElementsByClassName",i=c,a=!0):(r="getElementsByTagName",i="span",a=!1),{isIE:/msie/i.test(n)&&!e.opera,hasSVG:Boolean(e.SVGAngle||t.implementation.hasFeature("http://www.w3.org/TR/SVG11/feature#BasicStructure","1.1")),isHeadLess:new RegExp(" HtmlUnit").test(n),isWebKit:new RegExp(" AppleWebKit/").test(n),childRetriverFn:r,childRetriverString:i,noClassTesting:a}},createContainer:function createContainer(e){var n,r;if(e&&(e.offsetWidth||e.offsetHeight)){if(e.appendChild)return e.appendChild(r=t.createElement("DIV")),r.className=u,r.setAttribute("aria-hidden","true"),r.setAttribute("role","presentation"),r}else if((n=t.getElementsByTagName("body")[0])&&n.appendChild)return(r=t.createElement("DIV")).className=u,r.setAttribute("aria-hidden","true"),r.setAttribute("role","presentation"),1,n.appendChild(r),r},getNearestBreakIndex:function getNearestBreakIndex(e,t,n){if(!e||!e.length)return 0;var r,o=n._getWidthFn(),u=0,c=0,s=o(e),l=s/e.length;if(r=t,u=i(t/l),se.length&&(r=t-s,u=e.length);r>0;){if(r=t-o(e.substr(0,u)),!(c=a(r/l)))return u;u+=c}for(;r<0;){if(r=t-o(e.substr(0,u)),!(c=a(r/l)))return u;u+=c}return u},setLineHeight:function setLineHeight(e){var t=e.fontSize=e.fontSize||"12px";return e.lineHeight=e.lineHeight||e["line-height"]||1.2*parseInt(t,10)+"px",e}}}};t.default=r,e.exports=t.default},function(e){e.exports={name:"muze",private:!0,version:"1.0.2",description:"Composable visualisation library for web with a data-first approach",homepage:"https://www.charts.com/muze",license:"MIT",author:"Charts.com ",contributors:[{name:"Akash Ghoswami",email:"akash@charts.com"},{name:"Ranajit Banerjee",email:"ranajit.banerjee@charts.com",url:"https://github.com/ranajitbanerjee"},{name:"Mridul Meharia",email:"mridul@charts.com",url:"https://github.com/mridulmeh"},{name:"Subhash Haldar",email:"subhash@charts.com"},{name:"Sandeep Acharya",email:"sandeep@charts.com"},{name:"Rousan Ali",email:"rousan@charts.com",url:"https://rousan.io"},{name:"Ujjal Kumar Dutta",email:"ujjal@charts.com"}],main:"src/index.js",keywords:["muze","svg","vector","graphics","data-visualization","visualization","renderer","fusioncharts","relational","algebra","relation"],repository:{type:"git",url:"https://github.com/chartshq/muze"},dependencies:{"@chartshq/layout":"^1.0.0","@chartshq/muze-firebolt":"^1.0.0","@chartshq/muze-legend":"^1.0.0","muze-utils":"^1.0.0","@chartshq/visual-cell":"^1.0.0","@chartshq/visual-group":"^1.0.0","@chartshq/visual-layer":"^1.0.0","@chartshq/visual-unit":"^1.0.0"}}},function(e,t,n){var r=n(44);e.exports=r.default?r.default:r},function(e,t,n){"use strict";var r=function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}(n(5)).default.init("undefined"!=typeof window?window:void 0),i=r.win.document,a=r.getDocumentSupport(),o=a.isWebKit?0:4.5;function ContainerManager(e,t,n){var r;n=(n=n>5?n:5)<20?n:20,this.maxContainers=n,this.first=null,this.last=null,this.containers={},this.length=0,this.rootNode=e,t&&((r=i.createElementNS("http://www.w3.org/2000/svg","svg")).setAttributeNS("http://www.w3.org/2000/svg","xlink","http://www.w3.org/1999/xlink"),r.setAttributeNS("http://www.w3.org/2000/svg","height","0"),r.setAttributeNS("http://www.w3.org/2000/svg","width","0"),this.svgRoot=r,this.rootNode.appendChild(r))}ContainerManager.prototype.get=function(e){var t,n,i,a=this.containers,o=this.length,u=this.maxContainers,c="";for(n in r.supportedStyle)void 0!==e[n]&&(c+=r.supportedStyle[n]+":"+e[n]+";");if(!c)return!1;if(i=a[c])this.first!==i&&(i.prev&&(i.prev.next=i.next),i.next&&(i.next.prev=i.prev),i.next=this.first,i.next.prev=i,this.last===i&&(this.last=i.prev),i.prev=null,this.first=i);else{if(o>=u)for(t=o-u+1;t--;)this.removeContainer(this.last);i=this.addContainer(c)}return i},ContainerManager.prototype.addContainer=function(e){var t,n;return this.containers[e]=n={next:null,prev:null,node:null,ellipsesWidth:0,lineHeight:0,dotWidth:0,avgCharWidth:4,keyStr:e,charCache:{}},n.next=this.first,n.next&&(n.next.prev=n),this.first=n,this.last||(this.last=n),this.length+=1,t=n.node=i.createElement("div"),this.rootNode.appendChild(t),a.isIE&&!a.hasSVG?t.style.setAttribute("cssText",e):t.setAttribute("style",e),t.setAttribute("aria-hidden","true"),t.setAttribute("role","presentation"),t.style.display="inline-block",t.innerHTML=r.testStrAvg,n.lineHeight=t.offsetHeight,n.avgCharWidth=t.offsetWidth/3,a.isBrowserLess?((t=n.svgText=i.createElementNS("http://www.w3.org/2000/svg","text")).setAttribute("style",e),this.svgRoot.appendChild(t),t.textContent=r.testStrAvg,n.lineHeight=t.getBBox().height,n.avgCharWidth=(t.getBBox().width-o)/3,t.textContent="...",n.ellipsesWidth=t.getBBox().width-o,t.textContent=".",n.dotWidth=t.getBBox().width-o):(t.innerHTML="...",n.ellipsesWidth=t.offsetWidth,t.innerHTML=".",n.dotWidth=t.offsetWidth,t.innerHTML=""),n},ContainerManager.prototype.removeContainer=function(e){var t=e.keyStr;t&&this.length&&e&&(this.length-=1,e.prev&&(e.prev.next=e.next),e.next&&(e.next.prev=e.prev),this.first===e&&(this.first=e.next),this.last===e&&(this.last=e.prev),e.node.parentNode.removeChild(e.node),delete this.containers[t])},ContainerManager.prototype.dispose=function(){var e,t=this.containers;for(e in this.maxContainers=null,t)this.removeContainer(t[e]);this.rootNode.parentNode.removeChild(this.rootNode),this.rootNode=null,this.first=null,this.last=null},e.exports=ContainerManager},function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,,function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,function(e,t,n){"use strict";n.r(t);var r={};n.r(r),n.d(r,"scaleLinear",function(){return linear_linear}),n.d(r,"scaleThreshold",function(){return threshold_threshold}),n.d(r,"scaleLog",function(){return log}),n.d(r,"scalePow",function(){return pow}),n.d(r,"scaleIdentity",function(){return identity_identity}),n.d(r,"scaleOrdinal",function(){return ordinal}),n.d(r,"scaleSequential",function(){return sequential}),n.d(r,"scaleQuantize",function(){return quantize_quantize}),n.d(r,"scaleQuantile",function(){return quantile_quantile}),n.d(r,"schemeCategory10",function(){return tn}),n.d(r,"schemeCategory20",function(){return rn}),n.d(r,"schemeCategory20b",function(){return nn}),n.d(r,"scaleBand",function(){return band}),n.d(r,"scaleTime",function(){return Jt});var i={};n.r(i),n.d(i,"schemeDark2",function(){return cn}),n.d(i,"schemePaired",function(){return sn}),n.d(i,"schemeAccent",function(){return un}),n.d(i,"schemePastel1",function(){return ln}),n.d(i,"schemePastel2",function(){return fn}),n.d(i,"schemeSet1",function(){return hn}),n.d(i,"schemeSet2",function(){return dn}),n.d(i,"schemeSet3",function(){return pn}),n.d(i,"schemeBlues",function(){return zn}),n.d(i,"schemeBrBG",function(){return gn}),n.d(i,"schemePRGn",function(){return mn}),n.d(i,"schemePiYG",function(){return _n}),n.d(i,"interpolateBrBG",function(){return vn}),n.d(i,"interpolatePRGn",function(){return bn}),n.d(i,"interpolatePiYG",function(){return xn}),n.d(i,"interpolatePuOr",function(){return wn}),n.d(i,"interpolateRdBu",function(){return kn}),n.d(i,"interpolateRdGy",function(){return Cn}),n.d(i,"interpolateRdYlBu",function(){return Sn}),n.d(i,"interpolateRdYlGn",function(){return Pn}),n.d(i,"interpolateSpectral",function(){return An}),n.d(i,"interpolateBlues",function(){return Hn}),n.d(i,"interpolateGreens",function(){return Vn}),n.d(i,"interpolateGreys",function(){return Un}),n.d(i,"interpolateOranges",function(){return Gn}),n.d(i,"interpolatePurples",function(){return Wn}),n.d(i,"interpolateReds",function(){return qn}),n.d(i,"interpolateViridis",function(){return Zn}),n.d(i,"interpolateInferno",function(){return er}),n.d(i,"interpolateMagma",function(){return Jn}),n.d(i,"interpolatePlasma",function(){return tr}),n.d(i,"interpolateWarm",function(){return Xn}),n.d(i,"interpolateCool",function(){return Kn}),n.d(i,"interpolateCubehelixDefault",function(){return Yn}),n.d(i,"interpolateBuGn",function(){return En}),n.d(i,"interpolateBuPu",function(){return Mn}),n.d(i,"interpolateGnBu",function(){return On}),n.d(i,"interpolateOrRd",function(){return Tn}),n.d(i,"interpolatePuBuGn",function(){return Fn}),n.d(i,"interpolatePuBu",function(){return Nn}),n.d(i,"interpolatePuRd",function(){return jn}),n.d(i,"interpolateRdPu",function(){return In}),n.d(i,"interpolateYlGnBu",function(){return Dn}),n.d(i,"interpolateYlGn",function(){return Ln}),n.d(i,"interpolateYlOrBr",function(){return Rn}),n.d(i,"interpolateYlOrRd",function(){return Bn}),n.d(i,"interpolateRainbow",function(){return Qn});var a={};n.r(a),n.d(a,"DRAG",function(){return Qo}),n.d(a,"HOVER",function(){return Zo}),n.d(a,"SELECTIONDRAG",function(){return Jo}),n.d(a,"CLICK",function(){return eu}),n.d(a,"LONGTOUCH",function(){return tu}),n.d(a,"TOUCHDRAG",function(){return nu}),n.d(a,"ALL_ACTIONS",function(){return ru});var o={};n.r(o),n.d(o,"SELECTION_NEW_ENTRY",function(){return iu}),n.d(o,"SELECTION_NEW_EXIT",function(){return au}),n.d(o,"SELECTION_NULL",function(){return ou}),n.d(o,"SELECTION_OLD_ENTRY",function(){return uu}),n.d(o,"SELECTION_OLD_EXIT",function(){return cu});var u={};n.r(u),n.d(u,"BRUSH",function(){return wu}),n.d(u,"HIGHLIGHT",function(){return ku}),n.d(u,"TOOLTIP",function(){return Cu}),n.d(u,"FILTER",function(){return Su}),n.d(u,"SELECT",function(){return Pu});var c={};n.r(c),n.d(c,"HighlightBeahviour",function(){return Eu}),n.d(c,"BrushBehaviour",function(){return Ou}),n.d(c,"FilterBehaviour",function(){return Fu}),n.d(c,"SelectBehaviour",function(){return Lu});var s={};n.r(s),n.d(s,"SelectionBox",function(){return Ju}),n.d(s,"Tooltip",function(){return gc}),n.d(s,"Crossline",function(){return mc}),n.d(s,"PlotHighlighter",function(){return xc}),n.d(s,"FilterEffect",function(){return kc}),n.d(s,"PersistentAnchors",function(){return Ec}),n.d(s,"BrushAnchors",function(){return Tc}),n.d(s,"AnchorEffect",function(){return Pc});var l={};n.r(l),n.d(l,"BOTTOM",function(){return Gc}),n.d(l,"TOP",function(){return Yc}),n.d(l,"LEFT",function(){return Xc}),n.d(l,"RIGHT",function(){return Kc}),n.d(l,"axisOrientationMap",function(){return $c});var f={};n.r(f),n.d(f,"LINEAR",function(){return Qc}),n.d(f,"BAND",function(){return Zc}),n.d(f,"TIME",function(){return Jc}),n.d(f,"COLOR",function(){return es}),n.d(f,"ORDINAL",function(){return ts}),n.d(f,"QUANTIZE",function(){return ns}),n.d(f,"QUANTILE",function(){return rs}),n.d(f,"LOG",function(){return is}),n.d(f,"POW",function(){return as}),n.d(f,"IDENTITY",function(){return os}),n.d(f,"SEQUENTIAL",function(){return us}),n.d(f,"THRESHOLD",function(){return cs});var h={};n.r(h),n.d(h,"CONFIG",function(){return ad}),n.d(h,"DATA",function(){return od}),n.d(h,"AXES",function(){return ud}),n.d(h,"LAYERDEFS",function(){return cd}),n.d(h,"WIDTH",function(){return sd}),n.d(h,"HEIGHT",function(){return ld}),n.d(h,"MOUNT",function(){return fd}),n.d(h,"primaryXAxisUpdated",function(){return hd}),n.d(h,"primaryYAxisUpdated",function(){return dd}),n.d(h,"secondaryXAxisUpdated",function(){return pd}),n.d(h,"secondaryYAxisUpdated",function(){return yd}),n.d(h,"TRANSFORM",function(){return gd}),n.d(h,"DATADOMAIN",function(){return vd}),n.d(h,"LAYERSCREATED",function(){return md}),n.d(h,"FIELDS",function(){return bd}),n.d(h,"TIMEDIFFS",function(){return _d}),n.d(h,"LAYERAXISINDEX",function(){return xd});var d={};n.r(d),n.d(d,"SelectBehaviour",function(){return wp});var y={};n.r(y),n.d(y,"SelectionBox",function(){return zp}),n.d(y,"LegendHighlighter",function(){return Up});var g={};n.r(g),n.d(g,"share",function(){return Oy}),n.d(g,"html",function(){return operators_html});var v=function(e,t){return et?1:e>=t?0:NaN},m=function(e){return 1===e.length&&(e=function ascendingComparator(e){return function(t,n){return v(e(t),n)}}(e)),{left:function left(t,n,r,i){for(null==r&&(r=0),null==i&&(i=t.length);r>>1;e(t[a],n)<0?r=a+1:i=a}return r},right:function right(t,n,r,i){for(null==r&&(r=0),null==i&&(i=t.length);r>>1;e(t[a],n)>0?i=a:r=a+1}return r}}};var b=m(v),_=b.right,x=(b.left,_);var w=function(e){return null===e?NaN:+e},k=Array.prototype,C=(k.slice,k.map,function(e,t,n){e=+e,t=+t,n=(i=arguments.length)<2?(t=e,e=0,1):i<3?1:+n;for(var r=-1,i=0|Math.max(0,Math.ceil((t-e)/n)),a=new Array(i);++r0)return[e];if((r=t0)for(e=Math.ceil(e/o),t=Math.floor(t/o),a=new Array(i=Math.ceil(t-e+1));++u=0?(a>=S?10:a>=P?5:a>=A?2:1)*Math.pow(10,i):-Math.pow(10,-i)/(a>=S?10:a>=P?5:a>=A?2:1)}function tickStep(e,t,n){var r=Math.abs(t-e)/Math.max(0,n),i=Math.pow(10,Math.floor(Math.log(r)/Math.LN10)),a=r/i;return a>=S?i*=10:a>=P?i*=5:a>=A&&(i*=2),t=1)return+n(e[r-1],r-1,e);var r,i=(r-1)*t,a=Math.floor(i),o=+n(e[a],a,e);return o+(+n(e[a+1],a+1,e)-o)*(i-a)}};function map_Map(){}function map_map(e,t){var n=new map_Map;if(e instanceof map_Map)e.each(function(e,t){n.set(t,e)});else if(Array.isArray(e)){var r,i=-1,a=e.length;if(null==t)for(;++i=r.length)return null!=e&&n.sort(e),null!=t?t(n):n;for(var u,c,s,l=-1,f=n.length,h=r[i++],d=O(),p=a();++lr.length)return e;var a,o=i[n-1];return null!=t&&n>=r.length?a=e.entries():(a=[],e.each(function(e,t){a.push({key:t,values:_entries(e,n)})})),null!=o?a.sort(function(e,t){return o(e.key,t.key)}):a}(apply(e,0,createMap,setMap),0)},key:function key(e){return r.push(e),n},sortKeys:function sortKeys(e){return i[r.length-1]=e,n},sortValues:function sortValues(t){return e=t,n},rollup:function rollup(e){return t=e,n}}};function createObject(){return{}}function setObject(e,t,n){e[t]=n}function createMap(){return O()}function setMap(e,t,n){e.set(t,n)}function set_Set(){}var F=O.prototype;function set_set(e,t){var n=new set_Set;if(e instanceof set_Set)e.each(function(e){n.add(e)});else if(e){var r=-1,i=e.length;if(null==t)for(;++r1?+t:s,f=a[1]a[1-f]))return n=Math.max(0,getClosestIndexOf(h,s)),c=getClosestIndexOf(h,l),o=s===l?n:Math.max(n,c-1),f&&(u=n,n=d-o,o=d-u),n>o?void 0:r().slice(n,o+1)},n.invert=function(e,t){var n,o,u=+e,c=arguments.length>1?+t:u,s=a[1]a[1-s]))return n=Math.max(0,getClosestIndexOf(l,u,"left")),r()[s?f-n:n]},rescale()}function getClosestIndexOf(e,t,n){for(var r,i,a,o=0,u=e.length-1;ot?0===u?u:"left"===n?u-1:u:u===e.length-1?u:"left"===n?u:u+1:u}var L=function(e,t,n){e.prototype=t.prototype=n,n.constructor=e};function extend(e,t){var n=Object.create(e.prototype);for(var r in t)n[r]=t[r];return n}function Color(){}var R="\\s*([+-]?\\d+)\\s*",B="\\s*([+-]?\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)\\s*",z="\\s*([+-]?\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)%\\s*",H=/^#([0-9a-f]{3})$/,V=/^#([0-9a-f]{6})$/,U=new RegExp("^rgb\\("+[R,R,R]+"\\)$"),W=new RegExp("^rgb\\("+[z,z,z]+"\\)$"),q=new RegExp("^rgba\\("+[R,R,R,B]+"\\)$"),G=new RegExp("^rgba\\("+[z,z,z,B]+"\\)$"),Y=new RegExp("^hsl\\("+[B,z,z]+"\\)$"),X=new RegExp("^hsla\\("+[B,z,z,B]+"\\)$"),K={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};function color_color(e){var t;return e=(e+"").trim().toLowerCase(),(t=H.exec(e))?new Rgb((t=parseInt(t[1],16))>>8&15|t>>4&240,t>>4&15|240&t,(15&t)<<4|15&t,1):(t=V.exec(e))?rgbn(parseInt(t[1],16)):(t=U.exec(e))?new Rgb(t[1],t[2],t[3],1):(t=W.exec(e))?new Rgb(255*t[1]/100,255*t[2]/100,255*t[3]/100,1):(t=q.exec(e))?rgba(t[1],t[2],t[3],t[4]):(t=G.exec(e))?rgba(255*t[1]/100,255*t[2]/100,255*t[3]/100,t[4]):(t=Y.exec(e))?hsla(t[1],t[2]/100,t[3]/100,1):(t=X.exec(e))?hsla(t[1],t[2]/100,t[3]/100,t[4]):K.hasOwnProperty(e)?rgbn(K[e]):"transparent"===e?new Rgb(NaN,NaN,NaN,0):null}function rgbn(e){return new Rgb(e>>16&255,e>>8&255,255&e,1)}function rgba(e,t,n,r){return r<=0&&(e=t=n=NaN),new Rgb(e,t,n,r)}function rgbConvert(e){return e instanceof Color||(e=color_color(e)),e?new Rgb((e=e.rgb()).r,e.g,e.b,e.opacity):new Rgb}function color_rgb(e,t,n,r){return 1===arguments.length?rgbConvert(e):new Rgb(e,t,n,null==r?1:r)}function Rgb(e,t,n,r){this.r=+e,this.g=+t,this.b=+n,this.opacity=+r}function _hex(e){return((e=Math.max(0,Math.min(255,Math.round(e)||0)))<16?"0":"")+e.toString(16)}function hsla(e,t,n,r){return r<=0?e=t=n=NaN:n<=0||n>=1?e=t=NaN:t<=0&&(e=NaN),new Hsl(e,t,n,r)}function hsl(e,t,n,r){return 1===arguments.length?function hslConvert(e){if(e instanceof Hsl)return new Hsl(e.h,e.s,e.l,e.opacity);if(e instanceof Color||(e=color_color(e)),!e)return new Hsl;if(e instanceof Hsl)return e;var t=(e=e.rgb()).r/255,n=e.g/255,r=e.b/255,i=Math.min(t,n,r),a=Math.max(t,n,r),o=NaN,u=a-i,c=(a+i)/2;return u?(o=t===a?(n-r)/u+6*(n0&&c<1?0:o,new Hsl(o,u,c,e.opacity)}(e):new Hsl(e,t,n,null==r?1:r)}function Hsl(e,t,n,r){this.h=+e,this.s=+t,this.l=+n,this.opacity=+r}function hsl2rgb(e,t,n){return 255*(e<60?t+(n-t)*e/60:e<180?n:e<240?t+(n-t)*(240-e)/60:t)}L(Color,color_color,{displayable:function displayable(){return this.rgb().displayable()},hex:function hex(){return this.rgb().hex()},toString:function toString(){return this.rgb()+""}}),L(Rgb,color_rgb,extend(Color,{brighter:function brighter(e){return e=null==e?1/.7:Math.pow(1/.7,e),new Rgb(this.r*e,this.g*e,this.b*e,this.opacity)},darker:function darker(e){return e=null==e?.7:Math.pow(.7,e),new Rgb(this.r*e,this.g*e,this.b*e,this.opacity)},rgb:function rgb(){return this},displayable:function displayable(){return 0<=this.r&&this.r<=255&&0<=this.g&&this.g<=255&&0<=this.b&&this.b<=255&&0<=this.opacity&&this.opacity<=1},hex:function hex(){return"#"+_hex(this.r)+_hex(this.g)+_hex(this.b)},toString:function toString(){var e=this.opacity;return(1===(e=isNaN(e)?1:Math.max(0,Math.min(1,e)))?"rgb(":"rgba(")+Math.max(0,Math.min(255,Math.round(this.r)||0))+", "+Math.max(0,Math.min(255,Math.round(this.g)||0))+", "+Math.max(0,Math.min(255,Math.round(this.b)||0))+(1===e?")":", "+e+")")}})),L(Hsl,hsl,extend(Color,{brighter:function brighter(e){return e=null==e?1/.7:Math.pow(1/.7,e),new Hsl(this.h,this.s,this.l*e,this.opacity)},darker:function darker(e){return e=null==e?.7:Math.pow(.7,e),new Hsl(this.h,this.s,this.l*e,this.opacity)},rgb:function rgb(){var e=this.h%360+360*(this.h<0),t=isNaN(e)||isNaN(this.s)?0:this.s,n=this.l,r=n+(n<.5?n:1-n)*t,i=2*n-r;return new Rgb(hsl2rgb(e>=240?e-240:e+120,i,r),hsl2rgb(e,i,r),hsl2rgb(e<120?e+240:e-120,i,r),this.opacity)},displayable:function displayable(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1}}));var $=Math.PI/180,Q=180/Math.PI,Z=.96422,J=1,ee=.82521,te=4/29,ne=6/29,re=3*ne*ne,ie=ne*ne*ne;function labConvert(e){if(e instanceof Lab)return new Lab(e.l,e.a,e.b,e.opacity);if(e instanceof Hcl){if(isNaN(e.h))return new Lab(e.l,0,0,e.opacity);var t=e.h*$;return new Lab(e.l,Math.cos(t)*e.c,Math.sin(t)*e.c,e.opacity)}e instanceof Rgb||(e=rgbConvert(e));var n,r,i=rgb2lrgb(e.r),a=rgb2lrgb(e.g),o=rgb2lrgb(e.b),u=xyz2lab((.2225045*i+.7168786*a+.0606169*o)/J);return i===a&&a===o?n=r=u:(n=xyz2lab((.4360747*i+.3850649*a+.1430804*o)/Z),r=xyz2lab((.0139322*i+.0971045*a+.7141733*o)/ee)),new Lab(116*u-16,500*(n-u),200*(u-r),e.opacity)}function lab(e,t,n,r){return 1===arguments.length?labConvert(e):new Lab(e,t,n,null==r?1:r)}function Lab(e,t,n,r){this.l=+e,this.a=+t,this.b=+n,this.opacity=+r}function xyz2lab(e){return e>ie?Math.pow(e,1/3):e/re+te}function lab2xyz(e){return e>ne?e*e*e:re*(e-te)}function lrgb2rgb(e){return 255*(e<=.0031308?12.92*e:1.055*Math.pow(e,1/2.4)-.055)}function rgb2lrgb(e){return(e/=255)<=.04045?e/12.92:Math.pow((e+.055)/1.055,2.4)}function hclConvert(e){if(e instanceof Hcl)return new Hcl(e.h,e.c,e.l,e.opacity);if(e instanceof Lab||(e=labConvert(e)),0===e.a&&0===e.b)return new Hcl(NaN,0,e.l,e.opacity);var t=Math.atan2(e.b,e.a)*Q;return new Hcl(t<0?t+360:t,Math.sqrt(e.a*e.a+e.b*e.b),e.l,e.opacity)}function hcl(e,t,n,r){return 1===arguments.length?hclConvert(e):new Hcl(e,t,n,null==r?1:r)}function Hcl(e,t,n,r){this.h=+e,this.c=+t,this.l=+n,this.opacity=+r}L(Lab,lab,extend(Color,{brighter:function brighter(e){return new Lab(this.l+18*(null==e?1:e),this.a,this.b,this.opacity)},darker:function darker(e){return new Lab(this.l-18*(null==e?1:e),this.a,this.b,this.opacity)},rgb:function rgb(){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 new Rgb(lrgb2rgb(3.1338561*(t=Z*lab2xyz(t))-1.6168667*(e=J*lab2xyz(e))-.4906146*(n=ee*lab2xyz(n))),lrgb2rgb(-.9787684*t+1.9161415*e+.033454*n),lrgb2rgb(.0719453*t-.2289914*e+1.4052427*n),this.opacity)}})),L(Hcl,hcl,extend(Color,{brighter:function brighter(e){return new Hcl(this.h,this.c,this.l+18*(null==e?1:e),this.opacity)},darker:function darker(e){return new Hcl(this.h,this.c,this.l-18*(null==e?1:e),this.opacity)},rgb:function rgb(){return labConvert(this).rgb()}}));var ae=-.14861,oe=1.78277,ue=-.29227,ce=-.90649,se=1.97294,le=se*ce,fe=se*oe,he=oe*ue-ce*ae;function cubehelix_cubehelix(e,t,n,r){return 1===arguments.length?function cubehelixConvert(e){if(e instanceof Cubehelix)return new Cubehelix(e.h,e.s,e.l,e.opacity);e instanceof Rgb||(e=rgbConvert(e));var t=e.r/255,n=e.g/255,r=e.b/255,i=(he*r+le*t-fe*n)/(he+le-fe),a=r-i,o=(se*(n-i)-ue*a)/ce,u=Math.sqrt(o*o+a*a)/(se*i*(1-i)),c=u?Math.atan2(o,a)*Q-120:NaN;return new Cubehelix(c<0?c+360:c,u,i,e.opacity)}(e):new Cubehelix(e,t,n,null==r?1:r)}function Cubehelix(e,t,n,r){this.h=+e,this.s=+t,this.l=+n,this.opacity=+r}function basis(e,t,n,r,i){var a=e*e,o=a*e;return((1-3*e+3*a-o)*t+(4-6*a+3*o)*n+(1+3*e+3*a-3*o)*r+o*i)/6}L(Cubehelix,cubehelix_cubehelix,extend(Color,{brighter:function brighter(e){return e=null==e?1/.7:Math.pow(1/.7,e),new Cubehelix(this.h,this.s,this.l*e,this.opacity)},darker:function darker(e){return e=null==e?.7:Math.pow(.7,e),new Cubehelix(this.h,this.s,this.l*e,this.opacity)},rgb:function rgb(){var e=isNaN(this.h)?0:(this.h+120)*$,t=+this.l,n=isNaN(this.s)?0:this.s*t*(1-t),r=Math.cos(e),i=Math.sin(e);return new Rgb(255*(t+n*(ae*r+oe*i)),255*(t+n*(ue*r+ce*i)),255*(t+n*(se*r)),this.opacity)}}));var de=function(e){return function(){return e}};function linear(e,t){return function(n){return e+n*t}}function color_hue(e,t){var n=t-e;return n?linear(e,n>180||n<-180?n-360*Math.round(n/360):n):de(isNaN(e)?t:e)}function gamma(e){return 1==(e=+e)?nogamma:function(t,n){return n-t?function exponential(e,t,n){return e=Math.pow(e,n),t=Math.pow(t,n)-e,n=1/n,function(r){return Math.pow(e+r*t,n)}}(t,n,e):de(isNaN(t)?n:t)}}function nogamma(e,t){var n=t-e;return n?linear(e,n):de(isNaN(e)?t:e)}var pe=function rgbGamma(e){var t=gamma(e);function rgb(e,n){var r=t((e=color_rgb(e)).r,(n=color_rgb(n)).r),i=t(e.g,n.g),a=t(e.b,n.b),o=nogamma(e.opacity,n.opacity);return function(t){return e.r=r(t),e.g=i(t),e.b=a(t),e.opacity=o(t),e+""}}return rgb.gamma=rgbGamma,rgb}(1);function rgbSpline(e){return function(t){var n,r,i=t.length,a=new Array(i),o=new Array(i),u=new Array(i);for(n=0;n=1?(n=1,t-1):Math.floor(n*t),i=e[r],a=e[r+1],o=r>0?e[r-1]:2*i-a,u=ra&&(i=t.slice(a,i),u[o]?u[o]+=i:u[++o]=i),(n=n[0])===(r=r[0])?u[o]?u[o]+=r:u[++o]=r:(u[++o]=null,c.push({i:o,x:ge(n,r)})),a=be.lastIndex;return a180?t+=360:t-e>180&&(e+=360),i.push({i:n.push(pop(n)+"rotate(",null,r)-2,x:ge(e,t)})):t&&n.push(pop(n)+"rotate("+t+r)}(i.rotate,a.rotate,o,u),function skewX(e,t,n,i){e!==t?i.push({i:n.push(pop(n)+"skewX(",null,r)-2,x:ge(e,t)}):t&&n.push(pop(n)+"skewX("+t+r)}(i.skewX,a.skewX,o,u),function scale(e,t,n,r,i,a){if(e!==n||t!==r){var o=i.push(pop(i)+"scale(",null,",",null,")");a.push({i:o-4,x:ge(e,n)},{i:o-2,x:ge(t,r)})}else 1===n&&1===r||i.push(pop(i)+"scale("+n+","+r+")")}(i.scaleX,i.scaleY,a.scaleX,a.scaleY,o,u),i=a=null,function(e){for(var t,n=-1,r=u.length;++n2?polymap:bimap,r=i=null,scale}function scale(t){return(r||(r=n(a,o,c?function deinterpolateClamp(e){return function(t,n){var r=e(t=+t,n=+n);return function(e){return e<=t?0:e>=n?1:r(e)}}}(e):e,u)))(+t)}return scale.invert=function(e){return(i||(i=n(o,a,deinterpolateLinear,c?function reinterpolateClamp(e){return function(t,n){var r=e(t=+t,n=+n);return function(e){return e<=0?t:e>=1?n:r(e)}}}(t):t)))(+e)},scale.domain=function(e){return arguments.length?(a=j.call(e,De),rescale()):a.slice()},scale.range=function(e){return arguments.length?(o=I.call(e),rescale()):o.slice()},scale.rangeRound=function(e){return o=I.call(e),u=Ae,rescale()},scale.clamp=function(e){return arguments.length?(c=!!e,rescale()):c},scale.interpolate=function(e){return arguments.length?(u=e,rescale()):u},rescale()}var Re=function(e,t){if((n=(e=t?e.toExponential(t-1):e.toExponential()).indexOf("e"))<0)return null;var n,r=e.slice(0,n);return[r.length>1?r[0]+r.slice(2):r,+e.slice(n+1)]},Be=function(e){return(e=Re(Math.abs(e)))?e[1]:NaN},ze=/^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;function formatSpecifier(e){return new FormatSpecifier(e)}function FormatSpecifier(e){if(!(t=ze.exec(e)))throw new Error("invalid format: "+e);var t;this.fill=t[1]||" ",this.align=t[2]||">",this.sign=t[3]||"-",this.symbol=t[4]||"",this.zero=!!t[5],this.width=t[6]&&+t[6],this.comma=!!t[7],this.precision=t[8]&&+t[8].slice(1),this.trim=!!t[9],this.type=t[10]||""}formatSpecifier.prototype=FormatSpecifier.prototype,FormatSpecifier.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.trim?"~":"")+this.type};var He,Ve,Ue,We,qe=function(e){e:for(var t,n=e.length,r=1,i=-1;r0){if(!+e[r])break e;i=0}}return i>0?e.slice(0,i)+e.slice(t+1):e},Ge=function(e,t){var n=Re(e,t);if(!n)return e+"";var r=n[0],i=n[1];return i<0?"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")},Ye={"%":function _(e,t){return(100*e).toFixed(t)},b:function b(e){return Math.round(e).toString(2)},c:function c(e){return e+""},d:function d(e){return Math.round(e).toString(10)},e:function e(t,n){return t.toExponential(n)},f:function f(e,t){return e.toFixed(t)},g:function g(e,t){return e.toPrecision(t)},o:function o(e){return Math.round(e).toString(8)},p:function p(e,t){return Ge(100*e,t)},r:Ge,s:function(e,t){var n=Re(e,t);if(!n)return e+"";var r=n[0],i=n[1],a=i-(He=3*Math.max(-8,Math.min(8,Math.floor(i/3))))+1,o=r.length;return a===o?r:a>o?r+new Array(a-o+1).join("0"):a>0?r.slice(0,a)+"."+r.slice(a):"0."+new Array(1-a).join("0")+Re(e,Math.max(0,t+a-1))[0]},X:function X(e){return Math.round(e).toString(16).toUpperCase()},x:function x(e){return Math.round(e).toString(16)}},Xe=function(e){return e},Ke=["y","z","a","f","p","n","µ","m","","k","M","G","T","P","E","Z","Y"],$e=function(e){var t=e.grouping&&e.thousands?function(e,t){return function(n,r){for(var i=n.length,a=[],o=0,u=e[0],c=0;i>0&&u>0&&(c+u+1>r&&(u=Math.max(1,r-c)),a.push(n.substring(i-=u,i+u)),!((c+=u+1)>r));)u=e[o=(o+1)%e.length];return a.reverse().join(t)}}(e.grouping,e.thousands):Xe,n=e.currency,r=e.decimal,i=e.numerals?function(e){return function(t){return t.replace(/[0-9]/g,function(t){return e[+t]})}}(e.numerals):Xe,a=e.percent||"%";function newFormat(e){var o=(e=formatSpecifier(e)).fill,u=e.align,c=e.sign,s=e.symbol,l=e.zero,f=e.width,h=e.comma,d=e.precision,p=e.trim,y=e.type;"n"===y?(h=!0,y="g"):Ye[y]||(null==d&&(d=12),p=!0,y="g"),(l||"0"===o&&"="===u)&&(l=!0,o="0",u="=");var g="$"===s?n[0]:"#"===s&&/[boxX]/.test(y)?"0"+y.toLowerCase():"",v="$"===s?n[1]:/[%p]/.test(y)?a:"",m=Ye[y],b=/[defgprs%]/.test(y);function format(e){var n,a,s,_=g,x=v;if("c"===y)x=m(e)+x,e="";else{var w=(e=+e)<0;if(e=m(Math.abs(e),d),p&&(e=qe(e)),w&&0==+e&&(w=!1),_=(w?"("===c?c:"-":"-"===c||"("===c?"":c)+_,x=("s"===y?Ke[8+He/3]:"")+x+(w&&"("===c?")":""),b)for(n=-1,a=e.length;++n(s=e.charCodeAt(n))||s>57){x=(46===s?r+e.slice(n+1):e.slice(n))+x,e=e.slice(0,n);break}}h&&!l&&(e=t(e,1/0));var k=_.length+e.length+x.length,C=k>1)+_+e+x+C.slice(k);break;default:e=C+_+e+x}return i(e)}return d=null==d?6:/[gprs]/.test(y)?Math.max(1,Math.min(21,d)):Math.max(0,Math.min(20,d)),format.toString=function(){return e+""},format}return{format:newFormat,formatPrefix:function formatPrefix(e,t){var n=newFormat(((e=formatSpecifier(e)).type="f",e)),r=3*Math.max(-8,Math.min(8,Math.floor(Be(t)/3))),i=Math.pow(10,-r),a=Ke[8+r/3];return function(e){return n(i*e)+a}}}};!function defaultLocale(e){return Ve=$e(e),Ue=Ve.format,We=Ve.formatPrefix,Ve}({decimal:".",thousands:",",grouping:[3],currency:["$",""]});var Qe=function(e,t,n){var r,i=e[0],a=e[e.length-1],o=tickStep(i,a,null==t?10:t);switch((n=formatSpecifier(null==n?",f":n)).type){case"s":var u=Math.max(Math.abs(i),Math.abs(a));return null!=n.precision||isNaN(r=function(e,t){return Math.max(0,3*Math.max(-8,Math.min(8,Math.floor(Be(t)/3)))-Be(Math.abs(e)))}(o,u))||(n.precision=r),We(n,u);case"":case"e":case"g":case"p":case"r":null!=n.precision||isNaN(r=function(e,t){return e=Math.abs(e),t=Math.abs(t)-e,Math.max(0,Be(t)-Be(e))+1}(o,Math.max(Math.abs(i),Math.abs(a))))||(n.precision=r-("e"===n.type));break;case"f":case"%":null!=n.precision||isNaN(r=function(e){return Math.max(0,-Be(Math.abs(e)))}(o))||(n.precision=r-2*("%"===n.type))}return Ue(n)};function linearish(e){var t=e.domain;return e.ticks=function(e){var n=t();return E(n[0],n[n.length-1],null==e?10:e)},e.tickFormat=function(e,n){return Qe(t(),e,n)},e.nice=function(n){null==n&&(n=10);var r,i=t(),a=0,o=i.length-1,u=i[a],c=i[o];return c0?r=tickIncrement(u=Math.floor(u/r)*r,c=Math.ceil(c/r)*r,n):r<0&&(r=tickIncrement(u=Math.ceil(u*r)/r,c=Math.floor(c*r)/r,n)),r>0?(i[a]=Math.floor(u/r)*r,i[o]=Math.ceil(c/r)*r,t(i)):r<0&&(i[a]=Math.ceil(u*r)/r,i[o]=Math.floor(c*r)/r,t(i)),e},e}function linear_linear(){var e=continuous(deinterpolateLinear,ge);return e.copy=function(){return copy(e,linear_linear())},linearish(e)}function identity_identity(){var e=[0,1];function scale(e){return+e}return scale.invert=scale,scale.domain=scale.range=function(t){return arguments.length?(e=j.call(t,De),scale):e.slice()},scale.copy=function(){return identity_identity().domain(e)},linearish(scale)}var Ze=function(e,t){var n,r=0,i=(e=e.slice()).length-1,a=e[r],o=e[i];return o0){for(;hc)break;y.push(f)}}else for(;h=1;--l)if(!((f=s*l)c)break;y.push(f)}}else y=E(h,d,Math.min(d-h,p)).map(i);return a?y.reverse():y},e.tickFormat=function(t,a){if(null==a&&(a=10===n?".0e":","),"function"!=typeof a&&(a=Ue(a)),t===1/0)return a;null==t&&(t=10);var o=Math.max(1,n*t/e.ticks().length);return function(e){var t=e/i(Math.round(r(e)));return t*n0?n[i-1]:e[0],i=n?[r[n-1],t]:[r[o-1],r[o]]},scale.copy=function(){return quantize_quantize().domain([e,t]).range(i)},linearish(scale)}function threshold_threshold(){var e=[.5],t=[0,1],n=1;function scale(r){if(r<=r)return t[x(e,r,0,n)]}return scale.domain=function(r){return arguments.length?(e=I.call(r),n=Math.min(e.length,t.length-1),scale):e.slice()},scale.range=function(r){return arguments.length?(t=I.call(r),n=Math.min(e.length,t.length-1),scale):t.slice()},scale.invertExtent=function(n){var r=t.indexOf(n);return[e[r-1],e[r]]},scale.copy=function(){return threshold_threshold().domain(e).range(t)},scale}var Je=new Date,et=new Date;function newInterval(e,t,n,r){function interval(t){return e(t=new Date(+t)),t}return interval.floor=interval,interval.ceil=function(n){return e(n=new Date(n-1)),t(n,1),e(n),n},interval.round=function(e){var t=interval(e),n=interval.ceil(e);return e-t0))return o;do{o.push(a=new Date(+n)),t(n,i),e(n)}while(a=t)for(;e(t),!n(t);)t.setTime(t-1)},function(e,r){if(e>=e)if(r<0)for(;++r<=0;)for(;t(e,-1),!n(e););else for(;--r>=0;)for(;t(e,1),!n(e););})},n&&(interval.count=function(t,r){return Je.setTime(+t),et.setTime(+r),e(Je),e(et),Math.floor(n(Je,et))},interval.every=function(e){return e=Math.floor(e),isFinite(e)&&e>0?e>1?interval.filter(r?function(t){return r(t)%e==0}:function(t){return interval.count(0,t)%e==0}):interval:null}),interval}var tt=newInterval(function(){},function(e,t){e.setTime(+e+t)},function(e,t){return t-e});tt.every=function(e){return e=Math.floor(e),isFinite(e)&&e>0?e>1?newInterval(function(t){t.setTime(Math.floor(t/e)*e)},function(t,n){t.setTime(+t+n*e)},function(t,n){return(n-t)/e}):tt:null};var nt=tt,rt=(tt.range,6e4),it=6048e5,at=newInterval(function(e){e.setTime(1e3*Math.floor(e/1e3))},function(e,t){e.setTime(+e+1e3*t)},function(e,t){return(t-e)/1e3},function(e){return e.getUTCSeconds()}),ot=at,ut=(at.range,newInterval(function(e){e.setTime(Math.floor(e/rt)*rt)},function(e,t){e.setTime(+e+t*rt)},function(e,t){return(t-e)/rt},function(e){return e.getMinutes()})),ct=ut,st=(ut.range,newInterval(function(e){var t=e.getTimezoneOffset()*rt%36e5;t<0&&(t+=36e5),e.setTime(36e5*Math.floor((+e-t)/36e5)+t)},function(e,t){e.setTime(+e+36e5*t)},function(e,t){return(t-e)/36e5},function(e){return e.getHours()})),lt=st,ft=(st.range,newInterval(function(e){e.setHours(0,0,0,0)},function(e,t){e.setDate(e.getDate()+t)},function(e,t){return(t-e-(t.getTimezoneOffset()-e.getTimezoneOffset())*rt)/864e5},function(e){return e.getDate()-1})),ht=ft;ft.range;function weekday(e){return newInterval(function(t){t.setDate(t.getDate()-(t.getDay()+7-e)%7),t.setHours(0,0,0,0)},function(e,t){e.setDate(e.getDate()+7*t)},function(e,t){return(t-e-(t.getTimezoneOffset()-e.getTimezoneOffset())*rt)/it})}var dt=weekday(0),pt=weekday(1),yt=weekday(2),gt=weekday(3),vt=weekday(4),mt=weekday(5),bt=weekday(6),_t=(dt.range,pt.range,yt.range,gt.range,vt.range,mt.range,bt.range,newInterval(function(e){e.setDate(1),e.setHours(0,0,0,0)},function(e,t){e.setMonth(e.getMonth()+t)},function(e,t){return t.getMonth()-e.getMonth()+12*(t.getFullYear()-e.getFullYear())},function(e){return e.getMonth()})),xt=_t,wt=(_t.range,newInterval(function(e){e.setMonth(0,1),e.setHours(0,0,0,0)},function(e,t){e.setFullYear(e.getFullYear()+t)},function(e,t){return t.getFullYear()-e.getFullYear()},function(e){return e.getFullYear()}));wt.every=function(e){return isFinite(e=Math.floor(e))&&e>0?newInterval(function(t){t.setFullYear(Math.floor(t.getFullYear()/e)*e),t.setMonth(0,1),t.setHours(0,0,0,0)},function(t,n){t.setFullYear(t.getFullYear()+n*e)}):null};var kt=wt,Ct=(wt.range,newInterval(function(e){e.setUTCSeconds(0,0)},function(e,t){e.setTime(+e+t*rt)},function(e,t){return(t-e)/rt},function(e){return e.getUTCMinutes()})),St=(Ct.range,newInterval(function(e){e.setUTCMinutes(0,0,0)},function(e,t){e.setTime(+e+36e5*t)},function(e,t){return(t-e)/36e5},function(e){return e.getUTCHours()})),Pt=(St.range,newInterval(function(e){e.setUTCHours(0,0,0,0)},function(e,t){e.setUTCDate(e.getUTCDate()+t)},function(e,t){return(t-e)/864e5},function(e){return e.getUTCDate()-1})),At=Pt;Pt.range;function utcWeekday(e){return newInterval(function(t){t.setUTCDate(t.getUTCDate()-(t.getUTCDay()+7-e)%7),t.setUTCHours(0,0,0,0)},function(e,t){e.setUTCDate(e.getUTCDate()+7*t)},function(e,t){return(t-e)/it})}var Et=utcWeekday(0),Mt=utcWeekday(1),Ot=utcWeekday(2),Tt=utcWeekday(3),Ft=utcWeekday(4),Nt=utcWeekday(5),jt=utcWeekday(6),It=(Et.range,Mt.range,Ot.range,Tt.range,Ft.range,Nt.range,jt.range,newInterval(function(e){e.setUTCDate(1),e.setUTCHours(0,0,0,0)},function(e,t){e.setUTCMonth(e.getUTCMonth()+t)},function(e,t){return t.getUTCMonth()-e.getUTCMonth()+12*(t.getUTCFullYear()-e.getUTCFullYear())},function(e){return e.getUTCMonth()})),Dt=(It.range,newInterval(function(e){e.setUTCMonth(0,1),e.setUTCHours(0,0,0,0)},function(e,t){e.setUTCFullYear(e.getUTCFullYear()+t)},function(e,t){return t.getUTCFullYear()-e.getUTCFullYear()},function(e){return e.getUTCFullYear()}));Dt.every=function(e){return isFinite(e=Math.floor(e))&&e>0?newInterval(function(t){t.setUTCFullYear(Math.floor(t.getUTCFullYear()/e)*e),t.setUTCMonth(0,1),t.setUTCHours(0,0,0,0)},function(t,n){t.setUTCFullYear(t.getUTCFullYear()+n*e)}):null};var Lt=Dt;Dt.range;function localDate(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 utcDate(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 newYear(e){return{y:e,m:0,d:1,H:0,M:0,S:0,L:0}}var Rt,Bt,zt,Ht,Vt={"-":"",_:" ",0:"0"},Ut=/^\s*\d+/,Wt=/^%/,qt=/[\\^$*+?|[\]().{}]/g;function locale_pad(e,t,n){var r=e<0?"-":"",i=(r?-e:e)+"",a=i.length;return r+(a68?1900:2e3),n+r[0].length):-1}function parseZone(e,t,n){var r=/^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(t.slice(n,n+6));return r?(e.Z=r[1]?0:-(r[2]+(r[3]||"00")),n+r[0].length):-1}function parseMonthNumber(e,t,n){var r=Ut.exec(t.slice(n,n+2));return r?(e.m=r[0]-1,n+r[0].length):-1}function parseDayOfMonth(e,t,n){var r=Ut.exec(t.slice(n,n+2));return r?(e.d=+r[0],n+r[0].length):-1}function parseDayOfYear(e,t,n){var r=Ut.exec(t.slice(n,n+3));return r?(e.m=0,e.d=+r[0],n+r[0].length):-1}function parseHour24(e,t,n){var r=Ut.exec(t.slice(n,n+2));return r?(e.H=+r[0],n+r[0].length):-1}function parseMinutes(e,t,n){var r=Ut.exec(t.slice(n,n+2));return r?(e.M=+r[0],n+r[0].length):-1}function parseSeconds(e,t,n){var r=Ut.exec(t.slice(n,n+2));return r?(e.S=+r[0],n+r[0].length):-1}function parseMilliseconds(e,t,n){var r=Ut.exec(t.slice(n,n+3));return r?(e.L=+r[0],n+r[0].length):-1}function parseMicroseconds(e,t,n){var r=Ut.exec(t.slice(n,n+6));return r?(e.L=Math.floor(r[0]/1e3),n+r[0].length):-1}function parseLiteralPercent(e,t,n){var r=Wt.exec(t.slice(n,n+1));return r?n+r[0].length:-1}function parseUnixTimestamp(e,t,n){var r=Ut.exec(t.slice(n));return r?(e.Q=+r[0],n+r[0].length):-1}function parseUnixTimestampSeconds(e,t,n){var r=Ut.exec(t.slice(n));return r?(e.Q=1e3*+r[0],n+r[0].length):-1}function formatDayOfMonth(e,t){return locale_pad(e.getDate(),t,2)}function formatHour24(e,t){return locale_pad(e.getHours(),t,2)}function formatHour12(e,t){return locale_pad(e.getHours()%12||12,t,2)}function formatDayOfYear(e,t){return locale_pad(1+ht.count(kt(e),e),t,3)}function formatMilliseconds(e,t){return locale_pad(e.getMilliseconds(),t,3)}function formatMicroseconds(e,t){return formatMilliseconds(e,t)+"000"}function formatMonthNumber(e,t){return locale_pad(e.getMonth()+1,t,2)}function formatMinutes(e,t){return locale_pad(e.getMinutes(),t,2)}function formatSeconds(e,t){return locale_pad(e.getSeconds(),t,2)}function formatWeekdayNumberMonday(e){var t=e.getDay();return 0===t?7:t}function formatWeekNumberSunday(e,t){return locale_pad(dt.count(kt(e),e),t,2)}function formatWeekNumberISO(e,t){var n=e.getDay();return e=n>=4||0===n?vt(e):vt.ceil(e),locale_pad(vt.count(kt(e),e)+(4===kt(e).getDay()),t,2)}function formatWeekdayNumberSunday(e){return e.getDay()}function formatWeekNumberMonday(e,t){return locale_pad(pt.count(kt(e),e),t,2)}function locale_formatYear(e,t){return locale_pad(e.getFullYear()%100,t,2)}function formatFullYear(e,t){return locale_pad(e.getFullYear()%1e4,t,4)}function formatZone(e){var t=e.getTimezoneOffset();return(t>0?"-":(t*=-1,"+"))+locale_pad(t/60|0,"0",2)+locale_pad(t%60,"0",2)}function formatUTCDayOfMonth(e,t){return locale_pad(e.getUTCDate(),t,2)}function formatUTCHour24(e,t){return locale_pad(e.getUTCHours(),t,2)}function formatUTCHour12(e,t){return locale_pad(e.getUTCHours()%12||12,t,2)}function formatUTCDayOfYear(e,t){return locale_pad(1+At.count(Lt(e),e),t,3)}function formatUTCMilliseconds(e,t){return locale_pad(e.getUTCMilliseconds(),t,3)}function formatUTCMicroseconds(e,t){return formatUTCMilliseconds(e,t)+"000"}function formatUTCMonthNumber(e,t){return locale_pad(e.getUTCMonth()+1,t,2)}function formatUTCMinutes(e,t){return locale_pad(e.getUTCMinutes(),t,2)}function formatUTCSeconds(e,t){return locale_pad(e.getUTCSeconds(),t,2)}function formatUTCWeekdayNumberMonday(e){var t=e.getUTCDay();return 0===t?7:t}function formatUTCWeekNumberSunday(e,t){return locale_pad(Et.count(Lt(e),e),t,2)}function formatUTCWeekNumberISO(e,t){var n=e.getUTCDay();return e=n>=4||0===n?Ft(e):Ft.ceil(e),locale_pad(Ft.count(Lt(e),e)+(4===Lt(e).getUTCDay()),t,2)}function formatUTCWeekdayNumberSunday(e){return e.getUTCDay()}function formatUTCWeekNumberMonday(e,t){return locale_pad(Mt.count(Lt(e),e),t,2)}function formatUTCYear(e,t){return locale_pad(e.getUTCFullYear()%100,t,2)}function formatUTCFullYear(e,t){return locale_pad(e.getUTCFullYear()%1e4,t,4)}function formatUTCZone(){return"+0000"}function formatLiteralPercent(){return"%"}function formatUnixTimestamp(e){return+e}function formatUnixTimestampSeconds(e){return Math.floor(+e/1e3)}!function defaultLocale_defaultLocale(e){return Rt=function formatLocale(e){var t=e.dateTime,n=e.date,r=e.time,i=e.periods,a=e.days,o=e.shortDays,u=e.months,c=e.shortMonths,s=formatRe(i),l=formatLookup(i),f=formatRe(a),h=formatLookup(a),d=formatRe(o),p=formatLookup(o),y=formatRe(u),g=formatLookup(u),v=formatRe(c),m=formatLookup(c),b={a:function formatShortWeekday(e){return o[e.getDay()]},A:function formatWeekday(e){return a[e.getDay()]},b:function formatShortMonth(e){return c[e.getMonth()]},B:function formatMonth(e){return u[e.getMonth()]},c:null,d:formatDayOfMonth,e:formatDayOfMonth,f:formatMicroseconds,H:formatHour24,I:formatHour12,j:formatDayOfYear,L:formatMilliseconds,m:formatMonthNumber,M:formatMinutes,p:function formatPeriod(e){return i[+(e.getHours()>=12)]},Q:formatUnixTimestamp,s:formatUnixTimestampSeconds,S:formatSeconds,u:formatWeekdayNumberMonday,U:formatWeekNumberSunday,V:formatWeekNumberISO,w:formatWeekdayNumberSunday,W:formatWeekNumberMonday,x:null,X:null,y:locale_formatYear,Y:formatFullYear,Z:formatZone,"%":formatLiteralPercent},_={a:function formatUTCShortWeekday(e){return o[e.getUTCDay()]},A:function formatUTCWeekday(e){return a[e.getUTCDay()]},b:function formatUTCShortMonth(e){return c[e.getUTCMonth()]},B:function formatUTCMonth(e){return u[e.getUTCMonth()]},c:null,d:formatUTCDayOfMonth,e:formatUTCDayOfMonth,f:formatUTCMicroseconds,H:formatUTCHour24,I:formatUTCHour12,j:formatUTCDayOfYear,L:formatUTCMilliseconds,m:formatUTCMonthNumber,M:formatUTCMinutes,p:function formatUTCPeriod(e){return i[+(e.getUTCHours()>=12)]},Q:formatUnixTimestamp,s:formatUnixTimestampSeconds,S:formatUTCSeconds,u:formatUTCWeekdayNumberMonday,U:formatUTCWeekNumberSunday,V:formatUTCWeekNumberISO,w:formatUTCWeekdayNumberSunday,W:formatUTCWeekNumberMonday,x:null,X:null,y:formatUTCYear,Y:formatUTCFullYear,Z:formatUTCZone,"%":formatLiteralPercent},x={a:function parseShortWeekday(e,t,n){var r=d.exec(t.slice(n));return r?(e.w=p[r[0].toLowerCase()],n+r[0].length):-1},A:function parseWeekday(e,t,n){var r=f.exec(t.slice(n));return r?(e.w=h[r[0].toLowerCase()],n+r[0].length):-1},b:function parseShortMonth(e,t,n){var r=v.exec(t.slice(n));return r?(e.m=m[r[0].toLowerCase()],n+r[0].length):-1},B:function parseMonth(e,t,n){var r=y.exec(t.slice(n));return r?(e.m=g[r[0].toLowerCase()],n+r[0].length):-1},c:function parseLocaleDateTime(e,n,r){return parseSpecifier(e,t,n,r)},d:parseDayOfMonth,e:parseDayOfMonth,f:parseMicroseconds,H:parseHour24,I:parseHour24,j:parseDayOfYear,L:parseMilliseconds,m:parseMonthNumber,M:parseMinutes,p:function parsePeriod(e,t,n){var r=s.exec(t.slice(n));return r?(e.p=l[r[0].toLowerCase()],n+r[0].length):-1},Q:parseUnixTimestamp,s:parseUnixTimestampSeconds,S:parseSeconds,u:parseWeekdayNumberMonday,U:parseWeekNumberSunday,V:parseWeekNumberISO,w:parseWeekdayNumberSunday,W:parseWeekNumberMonday,x:function parseLocaleDate(e,t,r){return parseSpecifier(e,n,t,r)},X:function parseLocaleTime(e,t,n){return parseSpecifier(e,r,t,n)},y:parseYear,Y:parseFullYear,Z:parseZone,"%":parseLiteralPercent};function newFormat(e,t){return function(n){var r,i,a,o=[],u=-1,c=0,s=e.length;for(n instanceof Date||(n=new Date(+n));++u53)return null;"w"in a||(a.w=1),"Z"in a?(r=(i=(r=utcDate(newYear(a.y))).getUTCDay())>4||0===i?Mt.ceil(r):Mt(r),r=At.offset(r,7*(a.V-1)),a.y=r.getUTCFullYear(),a.m=r.getUTCMonth(),a.d=r.getUTCDate()+(a.w+6)%7):(r=(i=(r=t(newYear(a.y))).getDay())>4||0===i?pt.ceil(r):pt(r),r=ht.offset(r,7*(a.V-1)),a.y=r.getFullYear(),a.m=r.getMonth(),a.d=r.getDate()+(a.w+6)%7)}else("W"in a||"U"in a)&&("w"in a||(a.w="u"in a?a.u%7:"W"in a?1:0),i="Z"in a?utcDate(newYear(a.y)).getUTCDay():t(newYear(a.y)).getDay(),a.m=0,a.d="W"in a?(a.w+6)%7+7*a.W-(i+5)%7:a.w+7*a.U-(i+6)%7);return"Z"in a?(a.H+=a.Z/100|0,a.M+=a.Z%100,utcDate(a)):t(a)}}function parseSpecifier(e,t,n,r){for(var i,a,o=0,u=t.length,c=n.length;o=c)return-1;if(37===(i=t.charCodeAt(o++))){if(i=t.charAt(o++),!(a=x[i in Vt?t.charAt(o++):i])||(r=a(e,n,r))<0)return-1}else if(i!=n.charCodeAt(r++))return-1}return r}return b.x=newFormat(n,b),b.X=newFormat(r,b),b.c=newFormat(t,b),_.x=newFormat(n,_),_.X=newFormat(r,_),_.c=newFormat(t,_),{format:function format(e){var t=newFormat(e+="",b);return t.toString=function(){return e},t},parse:function parse(e){var t=newParse(e+="",localDate);return t.toString=function(){return e},t},utcFormat:function utcFormat(e){var t=newFormat(e+="",_);return t.toString=function(){return e},t},utcParse:function utcParse(e){var t=newParse(e,utcDate);return t.toString=function(){return e},t}}}(e),Bt=Rt.format,Rt.parse,zt=Rt.utcFormat,Ht=Rt.utcParse,Rt}({dateTime:"%x, %X",date:"%-m/%-d/%Y",time:"%-I:%M:%S %p",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"]});Date.prototype.toISOString||zt("%Y-%m-%dT%H:%M:%S.%LZ");+new Date("2000-01-01T00:00:00.000Z")||Ht("%Y-%m-%dT%H:%M:%S.%LZ");var Gt=1e3,Yt=60*Gt,Xt=60*Yt,Kt=24*Xt,$t=7*Kt,Qt=30*Kt,Zt=365*Kt;function time_date(e){return new Date(e)}function time_number(e){return e instanceof Date?+e:+new Date(+e)}function calendar(e,t,n,r,i,a,o,u,c){var s=continuous(deinterpolateLinear,ge),l=s.invert,f=s.domain,h=c(".%L"),d=c(":%S"),p=c("%I:%M"),y=c("%I %p"),g=c("%a %d"),v=c("%b %d"),b=c("%B"),_=c("%Y"),x=[[o,1,Gt],[o,5,5*Gt],[o,15,15*Gt],[o,30,30*Gt],[a,1,Yt],[a,5,5*Yt],[a,15,15*Yt],[a,30,30*Yt],[i,1,Xt],[i,3,3*Xt],[i,6,6*Xt],[i,12,12*Xt],[r,1,Kt],[r,2,2*Kt],[n,1,$t],[t,1,Qt],[t,3,3*Qt],[e,1,Zt]];function tickFormat(u){return(o(u)1)&&(e-=Math.floor(e));var t=Math.abs(e-.5);return $n.h=360*e-100,$n.s=1.5-1.5*t,$n.l=.8-.9*t,$n+""};color_rgb(),Math.PI,Math.PI;function viridis_ramp(e){var t=e.length;return function(n){return e[Math.max(0,Math.min(t-1,Math.floor(n*t)))]}}var Zn=viridis_ramp(an("44015444025645045745055946075a46085c460a5d460b5e470d60470e6147106347116447136548146748166848176948186a481a6c481b6d481c6e481d6f481f70482071482173482374482475482576482677482878482979472a7a472c7a472d7b472e7c472f7d46307e46327e46337f463480453581453781453882443983443a83443b84433d84433e85423f854240864241864142874144874045884046883f47883f48893e49893e4a893e4c8a3d4d8a3d4e8a3c4f8a3c508b3b518b3b528b3a538b3a548c39558c39568c38588c38598c375a8c375b8d365c8d365d8d355e8d355f8d34608d34618d33628d33638d32648e32658e31668e31678e31688e30698e306a8e2f6b8e2f6c8e2e6d8e2e6e8e2e6f8e2d708e2d718e2c718e2c728e2c738e2b748e2b758e2a768e2a778e2a788e29798e297a8e297b8e287c8e287d8e277e8e277f8e27808e26818e26828e26828e25838e25848e25858e24868e24878e23888e23898e238a8d228b8d228c8d228d8d218e8d218f8d21908d21918c20928c20928c20938c1f948c1f958b1f968b1f978b1f988b1f998a1f9a8a1e9b8a1e9c891e9d891f9e891f9f881fa0881fa1881fa1871fa28720a38620a48621a58521a68522a78522a88423a98324aa8325ab8225ac8226ad8127ad8128ae8029af7f2ab07f2cb17e2db27d2eb37c2fb47c31b57b32b67a34b67935b77937b87838b9773aba763bbb753dbc743fbc7340bd7242be7144bf7046c06f48c16e4ac16d4cc26c4ec36b50c46a52c56954c56856c66758c7655ac8645cc8635ec96260ca6063cb5f65cb5e67cc5c69cd5b6ccd5a6ece5870cf5773d05675d05477d1537ad1517cd2507fd34e81d34d84d44b86d54989d5488bd6468ed64590d74393d74195d84098d83e9bd93c9dd93ba0da39a2da37a5db36a8db34aadc32addc30b0dd2fb2dd2db5de2bb8de29bade28bddf26c0df25c2df23c5e021c8e020cae11fcde11dd0e11cd2e21bd5e21ad8e219dae319dde318dfe318e2e418e5e419e7e419eae51aece51befe51cf1e51df4e61ef6e620f8e621fbe723fde725")),Jn=viridis_ramp(an("00000401000501010601010802010902020b02020d03030f03031204041405041606051806051a07061c08071e0907200a08220b09240c09260d0a290e0b2b100b2d110c2f120d31130d34140e36150e38160f3b180f3d19103f1a10421c10441d11471e114920114b21114e22115024125325125527125829115a2a115c2c115f2d11612f116331116533106734106936106b38106c390f6e3b0f703d0f713f0f72400f74420f75440f764510774710784910784a10794c117a4e117b4f127b51127c52137c54137d56147d57157e59157e5a167e5c167f5d177f5f187f601880621980641a80651a80671b80681c816a1c816b1d816d1d816e1e81701f81721f817320817521817621817822817922827b23827c23827e24828025828125818326818426818627818827818928818b29818c29818e2a81902a81912b81932b80942c80962c80982d80992d809b2e7f9c2e7f9e2f7fa02f7fa1307ea3307ea5317ea6317da8327daa337dab337cad347cae347bb0357bb2357bb3367ab5367ab73779b83779ba3878bc3978bd3977bf3a77c03a76c23b75c43c75c53c74c73d73c83e73ca3e72cc3f71cd4071cf4070d0416fd2426fd3436ed5446dd6456cd8456cd9466bdb476adc4869de4968df4a68e04c67e24d66e34e65e44f64e55064e75263e85362e95462ea5661eb5760ec5860ed5a5fee5b5eef5d5ef05f5ef1605df2625df2645cf3655cf4675cf4695cf56b5cf66c5cf66e5cf7705cf7725cf8745cf8765cf9785df9795df97b5dfa7d5efa7f5efa815ffb835ffb8560fb8761fc8961fc8a62fc8c63fc8e64fc9065fd9266fd9467fd9668fd9869fd9a6afd9b6bfe9d6cfe9f6dfea16efea36ffea571fea772fea973feaa74feac76feae77feb078feb27afeb47bfeb67cfeb77efeb97ffebb81febd82febf84fec185fec287fec488fec68afec88cfeca8dfecc8ffecd90fecf92fed194fed395fed597fed799fed89afdda9cfddc9efddea0fde0a1fde2a3fde3a5fde5a7fde7a9fde9aafdebacfcecaefceeb0fcf0b2fcf2b4fcf4b6fcf6b8fcf7b9fcf9bbfcfbbdfcfdbf")),er=viridis_ramp(an("00000401000501010601010802010a02020c02020e03021004031204031405041706041907051b08051d09061f0a07220b07240c08260d08290e092b10092d110a30120a32140b34150b37160b39180c3c190c3e1b0c411c0c431e0c451f0c48210c4a230c4c240c4f260c51280b53290b552b0b572d0b592f0a5b310a5c320a5e340a5f3609613809623909633b09643d09653e0966400a67420a68440a68450a69470b6a490b6a4a0c6b4c0c6b4d0d6c4f0d6c510e6c520e6d540f6d550f6d57106e59106e5a116e5c126e5d126e5f136e61136e62146e64156e65156e67166e69166e6a176e6c186e6d186e6f196e71196e721a6e741a6e751b6e771c6d781c6d7a1d6d7c1d6d7d1e6d7f1e6c801f6c82206c84206b85216b87216b88226a8a226a8c23698d23698f24699025689225689326679526679727669827669a28659b29649d29649f2a63a02a63a22b62a32c61a52c60a62d60a82e5fa92e5eab2f5ead305dae305cb0315bb1325ab3325ab43359b63458b73557b93556ba3655bc3754bd3853bf3952c03a51c13a50c33b4fc43c4ec63d4dc73e4cc83f4bca404acb4149cc4248ce4347cf4446d04545d24644d34743d44842d54a41d74b3fd84c3ed94d3dda4e3cdb503bdd513ade5238df5337e05536e15635e25734e35933e45a31e55c30e65d2fe75e2ee8602de9612bea632aeb6429eb6628ec6726ed6925ee6a24ef6c23ef6e21f06f20f1711ff1731df2741cf3761bf37819f47918f57b17f57d15f67e14f68013f78212f78410f8850ff8870ef8890cf98b0bf98c0af98e09fa9008fa9207fa9407fb9606fb9706fb9906fb9b06fb9d07fc9f07fca108fca309fca50afca60cfca80dfcaa0ffcac11fcae12fcb014fcb216fcb418fbb61afbb81dfbba1ffbbc21fbbe23fac026fac228fac42afac62df9c72ff9c932f9cb35f8cd37f8cf3af7d13df7d340f6d543f6d746f5d949f5db4cf4dd4ff4df53f4e156f3e35af3e55df2e661f2e865f2ea69f1ec6df1ed71f1ef75f1f179f2f27df2f482f3f586f3f68af4f88ef5f992f6fa96f8fb9af9fc9dfafda1fcffa4")),tr=viridis_ramp(an("0d088710078813078916078a19068c1b068d1d068e20068f2206902406912605912805922a05932c05942e05952f059631059733059735049837049938049a3a049a3c049b3e049c3f049c41049d43039e44039e46039f48039f4903a04b03a14c02a14e02a25002a25102a35302a35502a45601a45801a45901a55b01a55c01a65e01a66001a66100a76300a76400a76600a76700a86900a86a00a86c00a86e00a86f00a87100a87201a87401a87501a87701a87801a87a02a87b02a87d03a87e03a88004a88104a78305a78405a78606a68707a68808a68a09a58b0aa58d0ba58e0ca48f0da4910ea3920fa39410a29511a19613a19814a099159f9a169f9c179e9d189d9e199da01a9ca11b9ba21d9aa31e9aa51f99a62098a72197a82296aa2395ab2494ac2694ad2793ae2892b02991b12a90b22b8fb32c8eb42e8db52f8cb6308bb7318ab83289ba3388bb3488bc3587bd3786be3885bf3984c03a83c13b82c23c81c33d80c43e7fc5407ec6417dc7427cc8437bc9447aca457acb4679cc4778cc4977cd4a76ce4b75cf4c74d04d73d14e72d24f71d35171d45270d5536fd5546ed6556dd7566cd8576bd9586ada5a6ada5b69db5c68dc5d67dd5e66de5f65de6164df6263e06363e16462e26561e26660e3685fe4695ee56a5de56b5de66c5ce76e5be76f5ae87059e97158e97257ea7457eb7556eb7655ec7754ed7953ed7a52ee7b51ef7c51ef7e50f07f4ff0804ef1814df1834cf2844bf3854bf3874af48849f48948f58b47f58c46f68d45f68f44f79044f79143f79342f89441f89540f9973ff9983ef99a3efa9b3dfa9c3cfa9e3bfb9f3afba139fba238fca338fca537fca636fca835fca934fdab33fdac33fdae32fdaf31fdb130fdb22ffdb42ffdb52efeb72dfeb82cfeba2cfebb2bfebd2afebe2afec029fdc229fdc328fdc527fdc627fdc827fdca26fdcb26fccd25fcce25fcd025fcd225fbd324fbd524fbd724fad824fada24f9dc24f9dd25f8df25f8e125f7e225f7e425f6e626f6e826f5e926f5eb27f4ed27f3ee27f3f027f2f227f1f426f1f525f0f724f0f921")),nr={ROW_ID:"__id__"},rr={ACTION_INF:"actionInf",ON_LAYER_DRAW:"onlayerdraw"},ir=n(0),ar=n.n(ir),or=Array.prototype.slice,ur=function(e){return e},cr=1,sr=2,lr=3,fr=4,hr=1e-6;function translateX(e){return"translate("+(e+.5)+",0)"}function translateY(e){return"translate(0,"+(e+.5)+")"}function entering(){return!this.__axis}function axis_axis(e,t){var n=[],r=null,i=null,a=null,o=6,u=6,c=3,s=e===cr||e===fr?-1:1,l=e===fr||e===sr?"x":"y",f=e===cr||e===lr?translateX:translateY;function axis(h){var d=null==r?t.ticks?t.ticks.apply(t,n):t.domain():r,p=null==i?t.tickFormat?t.tickFormat.apply(t,n):ur:i,y=Math.max(o,0)+c,g=t.range(),v=+g[0]+.5,m=+g[g.length-1]+.5,b=(t.bandwidth?function axis_center(e){var t=Math.max(0,e.bandwidth()-1)/2;return e.round()&&(t=Math.round(t)),function(n){return+e(n)+t}}:function axis_number(e){return function(t){return+e(t)}})(t.copy()),_=h.selection?h.selection():h,x=_.selectAll(".domain").data([null]),w=_.selectAll(".tick").data(d,t).order(),k=w.exit(),C=w.enter().append("g").attr("class","tick"),S=w.select("line"),P=w.select("text");x=x.merge(x.enter().insert("path",".tick").attr("class","domain").attr("stroke","#000")),w=w.merge(C),S=S.merge(C.append("line").attr("stroke","#000").attr(l+"2",s*o)),P=P.merge(C.append("text").attr("fill","#000").attr(l,s*y).attr("dy",e===cr?"0em":e===lr?"0.71em":"0.32em")).style("transform",a),h!==_&&(x=x.transition(h),w=w.transition(h),S=S.transition(h),P=P.transition(h),k=k.transition(h).attr("opacity",hr).attr("transform",function(e){return isFinite(e=b(e))?f(e):this.getAttribute("transform")}),C.attr("opacity",hr).attr("transform",function(e){var t=this.parentNode.__axis;return f(t&&isFinite(t=t(e))?t:b(e))})),k.remove(),x.attr("d",e===fr||e==sr?"M"+s*u+","+v+"H0.5V"+m+"H"+s*u:"M"+v+","+s*u+"V0.5H"+m+"V"+s*u),w.attr("opacity",1).attr("transform",function(e){return f(b(e))}),S.attr(l+"2",s*o),P.attr(l,s*y).text(p),_.filter(entering).attr("fill","none").attr("font-size",10).attr("font-family","sans-serif").attr("text-anchor",e===sr?"start":e===fr?"end":"middle"),_.each(function(){this.__axis=b})}return axis.scale=function(e){return arguments.length?(t=e,axis):t},axis.tickTransform=function(e){return arguments.length?(a=e,axis):a},axis.ticks=function(){return n=or.call(arguments),axis},axis.tickArguments=function(e){return arguments.length?(n=null==e?[]:or.call(e),axis):n.slice()},axis.tickValues=function(e){return arguments.length?(r=null==e?null:or.call(e),axis):r&&r.slice()},axis.tickFormat=function(e){return arguments.length?(i=e,axis):i},axis.tickSize=function(e){return arguments.length?(o=u=+e,axis):o},axis.tickSizeInner=function(e){return arguments.length?(o=+e,axis):o},axis.tickSizeOuter=function(e){return arguments.length?(u=+e,axis):u},axis.tickPadding=function(e){return arguments.length?(c=+e,axis):c},axis}var dr=Math.PI,pr=2*dr,yr=pr-1e-6;function Path(){this._x0=this._y0=this._x1=this._y1=null,this._=""}function path_path(){return new Path}Path.prototype=path_path.prototype={constructor:Path,moveTo:function moveTo(e,t){this._+="M"+(this._x0=this._x1=+e)+","+(this._y0=this._y1=+t)},closePath:function closePath(){null!==this._x1&&(this._x1=this._x0,this._y1=this._y0,this._+="Z")},lineTo:function lineTo(e,t){this._+="L"+(this._x1=+e)+","+(this._y1=+t)},quadraticCurveTo:function quadraticCurveTo(e,t,n,r){this._+="Q"+ +e+","+ +t+","+(this._x1=+n)+","+(this._y1=+r)},bezierCurveTo:function bezierCurveTo(e,t,n,r,i,a){this._+="C"+ +e+","+ +t+","+ +n+","+ +r+","+(this._x1=+i)+","+(this._y1=+a)},arcTo:function arcTo(e,t,n,r,i){e=+e,t=+t,n=+n,r=+r,i=+i;var a=this._x1,o=this._y1,u=n-e,c=r-t,s=a-e,l=o-t,f=s*s+l*l;if(i<0)throw new Error("negative radius: "+i);if(null===this._x1)this._+="M"+(this._x1=e)+","+(this._y1=t);else if(f>1e-6)if(Math.abs(l*u-c*s)>1e-6&&i){var h=n-a,d=r-o,p=u*u+c*c,y=h*h+d*d,g=Math.sqrt(p),v=Math.sqrt(f),m=i*Math.tan((dr-Math.acos((p+f-y)/(2*g*v)))/2),b=m/v,_=m/g;Math.abs(b-1)>1e-6&&(this._+="L"+(e+b*s)+","+(t+b*l)),this._+="A"+i+","+i+",0,0,"+ +(l*h>s*d)+","+(this._x1=e+_*u)+","+(this._y1=t+_*c)}else this._+="L"+(this._x1=e)+","+(this._y1=t);else;},arc:function arc(e,t,n,r,i,a){e=+e,t=+t;var o=(n=+n)*Math.cos(r),u=n*Math.sin(r),c=e+o,s=t+u,l=1^a,f=a?r-i:i-r;if(n<0)throw new Error("negative radius: "+n);null===this._x1?this._+="M"+c+","+s:(Math.abs(this._x1-c)>1e-6||Math.abs(this._y1-s)>1e-6)&&(this._+="L"+c+","+s),n&&(f<0&&(f=f%pr+pr),f>yr?this._+="A"+n+","+n+",0,1,"+l+","+(e-o)+","+(t-u)+"A"+n+","+n+",0,1,"+l+","+(this._x1=c)+","+(this._y1=s):f>1e-6&&(this._+="A"+n+","+n+",0,"+ +(f>=dr)+","+l+","+(this._x1=e+n*Math.cos(i))+","+(this._y1=t+n*Math.sin(i))))},rect:function rect(e,t,n,r){this._+="M"+(this._x0=this._x1=+e)+","+(this._y0=this._y1=+t)+"h"+ +n+"v"+ +r+"h"+-n+"Z"},toString:function toString(){return this._}};var gr=path_path,vr=function(e){return function constant(){return e}},mr=Math.abs,br=Math.atan2,_r=Math.cos,xr=Math.max,wr=Math.min,kr=Math.sin,Cr=Math.sqrt,Sr=1e-12,Pr=Math.PI,Ar=Pr/2,Er=2*Pr;function asin(e){return e>=1?Ar:e<=-1?-Ar:Math.asin(e)}function arcInnerRadius(e){return e.innerRadius}function arcOuterRadius(e){return e.outerRadius}function arcStartAngle(e){return e.startAngle}function arcEndAngle(e){return e.endAngle}function arcPadAngle(e){return e&&e.padAngle}function cornerTangents(e,t,n,r,i,a,o){var u=e-n,c=t-r,s=(o?a:-a)/Cr(u*u+c*c),l=s*c,f=-s*u,h=e+l,d=t+f,p=n+l,y=r+f,g=(h+p)/2,v=(d+y)/2,m=p-h,b=y-d,_=m*m+b*b,x=i-a,w=h*y-p*d,k=(b<0?-1:1)*Cr(xr(0,x*x*_-w*w)),C=(w*b-m*k)/_,S=(-w*m-b*k)/_,P=(w*b+m*k)/_,A=(-w*m+b*k)/_,E=C-g,M=S-v,O=P-g,T=A-v;return E*E+M*M>O*O+T*T&&(C=P,S=A),{cx:C,cy:S,x01:-l,y01:-f,x11:C*(i/x-1),y11:S*(i/x-1)}}function Linear(e){this._context=e}Linear.prototype={areaStart:function areaStart(){this._line=0},areaEnd:function areaEnd(){this._line=NaN},lineStart:function lineStart(){this._point=0},lineEnd:function lineEnd(){(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function point(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;default:this._context.lineTo(e,t)}}};var Mr=function(e){return new Linear(e)};function point_x(e){return e[0]}function point_y(e){return e[1]}var Or=function(){var e=point_x,t=point_y,n=vr(!0),r=null,i=Mr,a=null;function line(o){var u,c,s,l=o.length,f=!1;for(null==r&&(a=i(s=gr())),u=0;u<=l;++u)!(u=l;--f)u.point(g[f],v[f]);u.lineEnd(),u.areaEnd()}y&&(g[s]=+e(h,s,c),v[s]=+n(h,s,c),u.point(t?+t(h,s,c):g[s],r?+r(h,s,c):v[s]))}if(d)return u=null,d+""||null}function arealine(){return Or().defined(i).curve(o).context(a)}return area.x=function(n){return arguments.length?(e="function"==typeof n?n:vr(+n),t=null,area):e},area.x0=function(t){return arguments.length?(e="function"==typeof t?t:vr(+t),area):e},area.x1=function(e){return arguments.length?(t=null==e?null:"function"==typeof e?e:vr(+e),area):t},area.y=function(e){return arguments.length?(n="function"==typeof e?e:vr(+e),r=null,area):n},area.y0=function(e){return arguments.length?(n="function"==typeof e?e:vr(+e),area):n},area.y1=function(e){return arguments.length?(r=null==e?null:"function"==typeof e?e:vr(+e),area):r},area.lineX0=area.lineY0=function(){return arealine().x(e).y(n)},area.lineY1=function(){return arealine().x(e).y(r)},area.lineX1=function(){return arealine().x(t).y(n)},area.defined=function(e){return arguments.length?(i="function"==typeof e?e:vr(!!e),area):i},area.curve=function(e){return arguments.length?(o=e,null!=a&&(u=o(a)),area):o},area.context=function(e){return arguments.length?(null==e?a=u=null:u=o(a=e),area):a},area},Fr=function(e,t){return te?1:t>=e?0:NaN},Nr=function(e){return e};curveRadial(Mr);function Radial(e){this._curve=e}function curveRadial(e){function radial(t){return new Radial(e(t))}return radial._curve=e,radial}Radial.prototype={areaStart:function areaStart(){this._curve.areaStart()},areaEnd:function areaEnd(){this._curve.areaEnd()},lineStart:function lineStart(){this._curve.lineStart()},lineEnd:function lineEnd(){this._curve.lineEnd()},point:function point(e,t){this._curve.point(t*Math.sin(e),t*-Math.cos(e))}};var jr=Array.prototype.slice;var Ir={draw:function draw(e,t){var n=Math.sqrt(t/Pr);e.moveTo(n,0),e.arc(0,0,n,0,Er)}},Dr={draw:function draw(e,t){var n=Math.sqrt(t/5)/2;e.moveTo(-3*n,-n),e.lineTo(-n,-n),e.lineTo(-n,-3*n),e.lineTo(n,-3*n),e.lineTo(n,-n),e.lineTo(3*n,-n),e.lineTo(3*n,n),e.lineTo(n,n),e.lineTo(n,3*n),e.lineTo(-n,3*n),e.lineTo(-n,n),e.lineTo(-3*n,n),e.closePath()}},Lr=Math.sqrt(1/3),Rr=2*Lr,Br={draw:function draw(e,t){var n=Math.sqrt(t/Rr),r=n*Lr;e.moveTo(0,-n),e.lineTo(r,0),e.lineTo(0,n),e.lineTo(-r,0),e.closePath()}},zr=Math.sin(Pr/10)/Math.sin(7*Pr/10),Hr=Math.sin(Er/10)*zr,Vr=-Math.cos(Er/10)*zr,Ur={draw:function draw(e,t){var n=Math.sqrt(.8908130915292852*t),r=Hr*n,i=Vr*n;e.moveTo(0,-n),e.lineTo(r,i);for(var a=1;a<5;++a){var o=Er*a/5,u=Math.cos(o),c=Math.sin(o);e.lineTo(c*n,-u*n),e.lineTo(u*r-c*i,c*r+u*i)}e.closePath()}},Wr={draw:function draw(e,t){var n=Math.sqrt(t),r=-n/2;e.rect(r,r,n,n)}},qr=Math.sqrt(3),Gr={draw:function draw(e,t){var n=-Math.sqrt(t/(3*qr));e.moveTo(0,2*n),e.lineTo(-qr*n,-n),e.lineTo(qr*n,-n),e.closePath()}},Yr=Math.sqrt(3)/2,Xr=1/Math.sqrt(12),Kr=3*(Xr/2+1),$r={draw:function draw(e,t){var n=Math.sqrt(t/Kr),r=n/2,i=n*Xr,a=r,o=n*Xr+n,u=-a,c=o;e.moveTo(r,i),e.lineTo(a,o),e.lineTo(u,c),e.lineTo(-.5*r-Yr*i,Yr*r+-.5*i),e.lineTo(-.5*a-Yr*o,Yr*a+-.5*o),e.lineTo(-.5*u-Yr*c,Yr*u+-.5*c),e.lineTo(-.5*r+Yr*i,-.5*i-Yr*r),e.lineTo(-.5*a+Yr*o,-.5*o-Yr*a),e.lineTo(-.5*u+Yr*c,-.5*c-Yr*u),e.closePath()}},Qr=function(){};function _point(e,t,n){e._context.bezierCurveTo((2*e._x0+e._x1)/3,(2*e._y0+e._y1)/3,(e._x0+2*e._x1)/3,(e._y0+2*e._y1)/3,(e._x0+4*e._x1+t)/6,(e._y0+4*e._y1+n)/6)}function Basis(e){this._context=e}Basis.prototype={areaStart:function areaStart(){this._line=0},areaEnd:function areaEnd(){this._line=NaN},lineStart:function lineStart(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function lineEnd(){switch(this._point){case 3:_point(this,this._x1,this._y1);case 2:this._context.lineTo(this._x1,this._y1)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function point(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;break;case 2:this._point=3,this._context.lineTo((5*this._x0+this._x1)/6,(5*this._y0+this._y1)/6);default:_point(this,e,t)}this._x0=this._x1,this._x1=e,this._y0=this._y1,this._y1=t}};function BasisClosed(e){this._context=e}BasisClosed.prototype={areaStart:Qr,areaEnd:Qr,lineStart:function lineStart(){this._x0=this._x1=this._x2=this._x3=this._x4=this._y0=this._y1=this._y2=this._y3=this._y4=NaN,this._point=0},lineEnd:function lineEnd(){switch(this._point){case 1:this._context.moveTo(this._x2,this._y2),this._context.closePath();break;case 2:this._context.moveTo((this._x2+2*this._x3)/3,(this._y2+2*this._y3)/3),this._context.lineTo((this._x3+2*this._x2)/3,(this._y3+2*this._y2)/3),this._context.closePath();break;case 3:this.point(this._x2,this._y2),this.point(this._x3,this._y3),this.point(this._x4,this._y4)}},point:function point(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._x2=e,this._y2=t;break;case 1:this._point=2,this._x3=e,this._y3=t;break;case 2:this._point=3,this._x4=e,this._y4=t,this._context.moveTo((this._x0+4*this._x1+e)/6,(this._y0+4*this._y1+t)/6);break;default:_point(this,e,t)}this._x0=this._x1,this._x1=e,this._y0=this._y1,this._y1=t}};function BasisOpen(e){this._context=e}BasisOpen.prototype={areaStart:function areaStart(){this._line=0},areaEnd:function areaEnd(){this._line=NaN},lineStart:function lineStart(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function lineEnd(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function point(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3;var n=(this._x0+4*this._x1+e)/6,r=(this._y0+4*this._y1+t)/6;this._line?this._context.lineTo(n,r):this._context.moveTo(n,r);break;case 3:this._point=4;default:_point(this,e,t)}this._x0=this._x1,this._x1=e,this._y0=this._y1,this._y1=t}};function Bundle(e,t){this._basis=new Basis(e),this._beta=t}Bundle.prototype={lineStart:function lineStart(){this._x=[],this._y=[],this._basis.lineStart()},lineEnd:function lineEnd(){var e=this._x,t=this._y,n=e.length-1;if(n>0)for(var r,i=e[0],a=t[0],o=e[n]-i,u=t[n]-a,c=-1;++c<=n;)r=c/n,this._basis.point(this._beta*e[c]+(1-this._beta)*(i+r*o),this._beta*t[c]+(1-this._beta)*(a+r*u));this._x=this._y=null,this._basis.lineEnd()},point:function point(e,t){this._x.push(+e),this._y.push(+t)}};(function custom(e){function bundle(t){return 1===e?new Basis(t):new Bundle(t,e)}return bundle.beta=function(e){return custom(+e)},bundle})(.85);function cardinal_point(e,t,n){e._context.bezierCurveTo(e._x1+e._k*(e._x2-e._x0),e._y1+e._k*(e._y2-e._y0),e._x2+e._k*(e._x1-t),e._y2+e._k*(e._y1-n),e._x2,e._y2)}function Cardinal(e,t){this._context=e,this._k=(1-t)/6}Cardinal.prototype={areaStart:function areaStart(){this._line=0},areaEnd:function areaEnd(){this._line=NaN},lineStart:function lineStart(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},lineEnd:function lineEnd(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:cardinal_point(this,this._x1,this._y1)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function point(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2,this._x1=e,this._y1=t;break;case 2:this._point=3;default:cardinal_point(this,e,t)}this._x0=this._x1,this._x1=this._x2,this._x2=e,this._y0=this._y1,this._y1=this._y2,this._y2=t}};(function custom(e){function cardinal(t){return new Cardinal(t,e)}return cardinal.tension=function(e){return custom(+e)},cardinal})(0);function CardinalClosed(e,t){this._context=e,this._k=(1-t)/6}CardinalClosed.prototype={areaStart:Qr,areaEnd:Qr,lineStart:function lineStart(){this._x0=this._x1=this._x2=this._x3=this._x4=this._x5=this._y0=this._y1=this._y2=this._y3=this._y4=this._y5=NaN,this._point=0},lineEnd:function lineEnd(){switch(this._point){case 1:this._context.moveTo(this._x3,this._y3),this._context.closePath();break;case 2:this._context.lineTo(this._x3,this._y3),this._context.closePath();break;case 3:this.point(this._x3,this._y3),this.point(this._x4,this._y4),this.point(this._x5,this._y5)}},point:function point(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._x3=e,this._y3=t;break;case 1:this._point=2,this._context.moveTo(this._x4=e,this._y4=t);break;case 2:this._point=3,this._x5=e,this._y5=t;break;default:cardinal_point(this,e,t)}this._x0=this._x1,this._x1=this._x2,this._x2=e,this._y0=this._y1,this._y1=this._y2,this._y2=t}};(function custom(e){function cardinal(t){return new CardinalClosed(t,e)}return cardinal.tension=function(e){return custom(+e)},cardinal})(0);function CardinalOpen(e,t){this._context=e,this._k=(1-t)/6}CardinalOpen.prototype={areaStart:function areaStart(){this._line=0},areaEnd:function areaEnd(){this._line=NaN},lineStart:function lineStart(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},lineEnd:function lineEnd(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function point(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3,this._line?this._context.lineTo(this._x2,this._y2):this._context.moveTo(this._x2,this._y2);break;case 3:this._point=4;default:cardinal_point(this,e,t)}this._x0=this._x1,this._x1=this._x2,this._x2=e,this._y0=this._y1,this._y1=this._y2,this._y2=t}};(function custom(e){function cardinal(t){return new CardinalOpen(t,e)}return cardinal.tension=function(e){return custom(+e)},cardinal})(0);function catmullRom_point(e,t,n){var r=e._x1,i=e._y1,a=e._x2,o=e._y2;if(e._l01_a>Sr){var u=2*e._l01_2a+3*e._l01_a*e._l12_a+e._l12_2a,c=3*e._l01_a*(e._l01_a+e._l12_a);r=(r*u-e._x0*e._l12_2a+e._x2*e._l01_2a)/c,i=(i*u-e._y0*e._l12_2a+e._y2*e._l01_2a)/c}if(e._l23_a>Sr){var s=2*e._l23_2a+3*e._l23_a*e._l12_a+e._l12_2a,l=3*e._l23_a*(e._l23_a+e._l12_a);a=(a*s+e._x1*e._l23_2a-t*e._l12_2a)/l,o=(o*s+e._y1*e._l23_2a-n*e._l12_2a)/l}e._context.bezierCurveTo(r,i,a,o,e._x2,e._y2)}function CatmullRom(e,t){this._context=e,this._alpha=t}CatmullRom.prototype={areaStart:function areaStart(){this._line=0},areaEnd:function areaEnd(){this._line=NaN},lineStart:function lineStart(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function lineEnd(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:this.point(this._x2,this._y2)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function point(e,t){if(e=+e,t=+t,this._point){var n=this._x2-e,r=this._y2-t;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(n*n+r*r,this._alpha))}switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;break;case 2:this._point=3;default:catmullRom_point(this,e,t)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=e,this._y0=this._y1,this._y1=this._y2,this._y2=t}};var Zr=function custom(e){function catmullRom(t){return e?new CatmullRom(t,e):new Cardinal(t,0)}return catmullRom.alpha=function(e){return custom(+e)},catmullRom}(.5);function CatmullRomClosed(e,t){this._context=e,this._alpha=t}CatmullRomClosed.prototype={areaStart:Qr,areaEnd:Qr,lineStart:function lineStart(){this._x0=this._x1=this._x2=this._x3=this._x4=this._x5=this._y0=this._y1=this._y2=this._y3=this._y4=this._y5=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function lineEnd(){switch(this._point){case 1:this._context.moveTo(this._x3,this._y3),this._context.closePath();break;case 2:this._context.lineTo(this._x3,this._y3),this._context.closePath();break;case 3:this.point(this._x3,this._y3),this.point(this._x4,this._y4),this.point(this._x5,this._y5)}},point:function point(e,t){if(e=+e,t=+t,this._point){var n=this._x2-e,r=this._y2-t;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(n*n+r*r,this._alpha))}switch(this._point){case 0:this._point=1,this._x3=e,this._y3=t;break;case 1:this._point=2,this._context.moveTo(this._x4=e,this._y4=t);break;case 2:this._point=3,this._x5=e,this._y5=t;break;default:catmullRom_point(this,e,t)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=e,this._y0=this._y1,this._y1=this._y2,this._y2=t}};(function custom(e){function catmullRom(t){return e?new CatmullRomClosed(t,e):new CardinalClosed(t,0)}return catmullRom.alpha=function(e){return custom(+e)},catmullRom})(.5);function CatmullRomOpen(e,t){this._context=e,this._alpha=t}CatmullRomOpen.prototype={areaStart:function areaStart(){this._line=0},areaEnd:function areaEnd(){this._line=NaN},lineStart:function lineStart(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function lineEnd(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function point(e,t){if(e=+e,t=+t,this._point){var n=this._x2-e,r=this._y2-t;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(n*n+r*r,this._alpha))}switch(this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3,this._line?this._context.lineTo(this._x2,this._y2):this._context.moveTo(this._x2,this._y2);break;case 3:this._point=4;default:catmullRom_point(this,e,t)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=e,this._y0=this._y1,this._y1=this._y2,this._y2=t}};(function custom(e){function catmullRom(t){return e?new CatmullRomOpen(t,e):new CardinalOpen(t,0)}return catmullRom.alpha=function(e){return custom(+e)},catmullRom})(.5);function LinearClosed(e){this._context=e}LinearClosed.prototype={areaStart:Qr,areaEnd:Qr,lineStart:function lineStart(){this._point=0},lineEnd:function lineEnd(){this._point&&this._context.closePath()},point:function point(e,t){e=+e,t=+t,this._point?this._context.lineTo(e,t):(this._point=1,this._context.moveTo(e,t))}};function monotone_sign(e){return e<0?-1:1}function slope3(e,t,n){var r=e._x1-e._x0,i=t-e._x1,a=(e._y1-e._y0)/(r||i<0&&-0),o=(n-e._y1)/(i||r<0&&-0),u=(a*i+o*r)/(r+i);return(monotone_sign(a)+monotone_sign(o))*Math.min(Math.abs(a),Math.abs(o),.5*Math.abs(u))||0}function slope2(e,t){var n=e._x1-e._x0;return n?(3*(e._y1-e._y0)/n-t)/2:t}function monotone_point(e,t,n){var r=e._x0,i=e._y0,a=e._x1,o=e._y1,u=(a-r)/3;e._context.bezierCurveTo(r+u,i+u*t,a-u,o-u*n,a,o)}function MonotoneX(e){this._context=e}function MonotoneY(e){this._context=new ReflectContext(e)}function ReflectContext(e){this._context=e}function Natural(e){this._context=e}function controlPoints(e){var t,n,r=e.length-1,i=new Array(r),a=new Array(r),o=new Array(r);for(i[0]=0,a[0]=2,o[0]=e[0]+2*e[1],t=1;t=0;--t)i[t]=(o[t]-i[t+1])/a[t];for(a[r-1]=(e[r]+i[r-1])/2,t=0;t=0&&(this._t=1-this._t,this._line=1-this._line)},point:function point(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;default:if(this._t<=0)this._context.lineTo(this._x,t),this._context.lineTo(e,t);else{var n=this._x*(1-this._t)+e*this._t;this._context.lineTo(n,this._y),this._context.lineTo(n,t)}}this._x=e,this._y=t}};var Jr=function(e){return new Step(e,.5)};function stepBefore(e){return new Step(e,0)}function stepAfter(e){return new Step(e,1)}var ei=function(e,t){if((i=e.length)>1)for(var n,r,i,a=1,o=e[t[0]],u=o.length;a=0;)n[t]=t;return n};function stackValue(e,t){return e[t]}var ni=function(e){var t=e.map(ascending_sum);return ti(e).sort(function(e,n){return t[e]-t[n]})};function ascending_sum(e){for(var t,n=0,r=-1,i=e.length;++r0)){if(a/=h,h<0){if(a0){if(a>f)return;a>l&&(l=a)}if(a=r-c,h||!(a<0)){if(a/=h,h<0){if(a>f)return;a>l&&(l=a)}else if(h>0){if(a0)){if(a/=d,d<0){if(a0){if(a>f)return;a>l&&(l=a)}if(a=i-s,d||!(a<0)){if(a/=d,d<0){if(a>f)return;a>l&&(l=a)}else if(d>0){if(a0||f<1)||(l>0&&(e[0]=[c+l*h,s+l*d]),f<1&&(e[1]=[c+f*h,s+f*d]),!0)}}}}}function connectEdge(e,t,n,r,i){var a=e[1];if(a)return!0;var o,u,c=e[0],s=e.left,l=e.right,f=s[0],h=s[1],d=l[0],p=l[1],y=(f+d)/2,g=(h+p)/2;if(p===h){if(y=r)return;if(f>d){if(c){if(c[1]>=i)return}else c=[y,n];a=[y,i]}else{if(c){if(c[1]1)if(f>d){if(c){if(c[1]>=i)return}else c=[(n-u)/o,n];a=[(i-u)/o,i]}else{if(c){if(c[1]=r)return}else c=[t,o*t+u];a=[r,o*r+u]}else{if(c){if(c[0]=-Ai)){var d=c*c+s*s,p=l*l+f*f,y=(f*d-s*p)/h,g=(c*p-l*d)/h,v=_i.pop()||new function Circle(){RedBlackNode(this),this.x=this.y=this.arc=this.site=this.cy=null};v.arc=e,v.site=i,v.x=y+o,v.y=(v.cy=g+u)+Math.sqrt(y*y+g*g),e.circle=v;for(var m=null,b=Ci._;b;)if(v.yPi)u=u.L;else{if(!((i=a-rightBreakPoint(u,o))>Pi)){r>-Pi?(t=u.P,n=u):i>-Pi?(t=u,n=u.N):t=n=u;break}if(!u.R){t=u;break}u=u.R}!function createCell(e){return ki[e.index]={site:e,halfedges:[]}}(e);var c=createBeach(e);if(wi.insert(t,c),t||n){if(t===n)return detachCircle(t),n=createBeach(t.site),wi.insert(c,n),c.edge=n.edge=createEdge(t.site,c.site),attachCircle(t),void attachCircle(n);if(n){detachCircle(t),detachCircle(n);var s=t.site,l=s[0],f=s[1],h=e[0]-l,d=e[1]-f,p=n.site,y=p[0]-l,g=p[1]-f,v=2*(h*g-d*y),m=h*h+d*d,b=y*y+g*g,_=[(g*m-d*b)/v+l,(h*b-y*m)/v+f];setEdgeEnd(n.edge,s,p,_),c.edge=createEdge(s,e,null,_),n.edge=createEdge(e,p,null,_),attachCircle(t),attachCircle(n)}else c.edge=createEdge(t.site,c.site)}}function leftBreakPoint(e,t){var n=e.site,r=n[0],i=n[1],a=i-t;if(!a)return r;var o=e.P;if(!o)return-1/0;var u=(n=o.site)[0],c=n[1],s=c-t;if(!s)return u;var l=u-r,f=1/a-1/s,h=l/s;return f?(-h+Math.sqrt(h*h-2*f*(l*l/(-2*s)-c+s/2+i-a/2)))/f+r:(r+u)/2}function rightBreakPoint(e,t){var n=e.N;if(n)return leftBreakPoint(n,t);var r=e.site;return r[1]===t?r[0]:1/0}var wi,ki,Ci,Si,Pi=1e-6,Ai=1e-12;function triangleArea(e,t,n){return(e[0]-n[0])*(t[1]-e[1])-(e[0]-t[0])*(n[1]-e[1])}function lexicographic(e,t){return t[1]-e[1]||t[0]-e[0]}function Diagram(e,t){var n,r,i,a=e.sort(lexicographic).pop();for(Si=[],ki=new Array(e.length),wi=new mi,Ci=new mi;;)if(i=bi,a&&(!i||a[1]Pi||Math.abs(i[0][1]-i[1][1])>Pi)||delete Si[a]}(o,u,c,s),function clipCells(e,t,n,r){var i,a,o,u,c,s,l,f,h,d,p,y,g=ki.length,v=!0;for(i=0;iPi||Math.abs(y-h)>Pi)&&(c.splice(u,0,Si.push(createBorderEdge(o,d,Math.abs(p-e)Pi?[e,Math.abs(f-e)Pi?[Math.abs(h-r)Pi?[n,Math.abs(f-n)Pi?[Math.abs(h-t)=u)return null;var c=e-i.site[0],s=t-i.site[1],l=c*c+s*s;do{i=a.cells[r=o],o=null,i.halfedges.forEach(function(n){var r=a.edges[n],u=r.left;if(u!==i.site&&u||(u=r.right)){var c=e-u[0],s=t-u[1],f=c*c+s*s;ft?0===i?i:"left"===n?i-1:i:i===e.length-1?i:"left"===n?i:i+1},Gi=(requestAnimationFrame,cancelAnimationFrame,function getQualifiedClassName(e,t,n){return[n+"-"+(e=e.replace(/^\.*/,"")),n+"-"+e+"-"+t]}),Yi=function defaultValue(e,t){return void 0===e||"object"===(void 0===e?"undefined":Ii(e))&&!e?t:e},Xi=function objectIterator(e,t){for(var n in e)Object.hasOwnProperty.call(e,n)&&t(n,e)},Ki=function(){function Voronoi(e){_classCallCheck(this,Voronoi),this._voronoi=Oi().x(function(e){return e.x}).y(function(e){return e.y}),this.data(e)}return ji(Voronoi,[{key:"data",value:function data(e){return e&&(this._voronoiFn=this._voronoi(e)),this}},{key:"find",value:function find(e,t,n){return this._voronoiFn.find(e,t,n)}}]),Voronoi}(),$i=function(){function Store(e){_classCallCheck(this,Store),this.model=Fi.a.create(e),this._listeners=[]}return ji(Store,[{key:"serialize",value:function serialize(){return this.model.serialize()}},{key:"commit",value:function commit(e,t){this.model.prop(e,t)}},{key:"registerChangeListener",value:function registerChangeListener(e,t,n){var r=e;Array.isArray(e)||(r=[e]);var i=this.model.next(r,t,n);return this._listeners.push(i),this}},{key:"registerImmediateListener",value:function registerImmediateListener(e,t,n){var r=e;Array.isArray(e)||(r=[e]);var i=this.model.on(r,t,n);return this._listeners.push(i),this}},{key:"get",value:function get(e){return this.model.prop(e)}},{key:"computed",value:function computed(e,t){return this.model.calculatedProp(e,t)}},{key:"unsubscribeAll",value:function unsubscribeAll(){this._listeners.forEach(function(e){return e()})}}]),Store}(),Qi=function intSanitizer(e){var t=e.toString().match(/(\d+)(px)*/g);return t?parseInt(t[0],10):null},Zi=function transactor(e,t,n){var r=void 0,i=n&&n instanceof Fi.a?n:Fi.a.create({}),a=function _loop(n){({}).hasOwnProperty.call(t,n)&&(r=t[n],i.prop(n)||i.append(_defineProperty({},n,r.value)),e[n]=function(t,r,a){return function(){for(var o=arguments.length,u=Array(o),c=0;c=0;n--)if(e[n]!==t[n])return!1;return!0}(t,n):"Object"===e?Object.is(t,n):t===n}},ta={INTERFACE_IMPL:"Method not implemented"},na=function mergeRecursive(e,t){for(var n in t)Di(e[n])&&Di(t[n])?mergeRecursive(e[n],t[n]):t[n]instanceof Object&&t[n].constructor===Object?(e[n]={},mergeRecursive(e[n],t[n])):e[n]=t[n];return e},ra=function interpolator(){return Pe},ia=function numberInterpolator(){return ge},aa=function piecewiseInterpolator(){return piecewise_piecewise};var oa=function rgbToHsv(e,t,n){var r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:1;e=+e,t=+t,n=+n,r=+r,e/=255,t/=255,n/=255;var i=Math.max(e,t,n),a=Math.min(e,t,n),o=void 0,u=void 0,c=(i+a)/2;if(i===a)o=u=0;else{var s=i-a;switch(u=c>.5?s/(2-i-a):s/(i+a),i){case e:o=(t-n)/s+(t=i[0]&&r<=i[1]})},{saveChild:!1,mode:n})},sa=function getDataModelFromIdentifiers(e,t,n){var r=void 0;if(t instanceof Array){var i=e.getFieldsConfig(),a=t.slice(1,t.length);if(t instanceof Function)r=t(e,{},!1);else if(t instanceof Array&&t[0].length){var o=t[0].filter(function(e){return e in i});r=e.select(function(e){var t=!0;return o.forEach(function(n,r){var i=e[n].valueOf(),o=a.findIndex(function(e){return e[r]===i});t=t&&-1!==o}),t},{saveChild:!1,mode:n})}}else r=ca(e,t,n);return r},la=function registerListeners(e,t){var n=t(e);for(var r in n)if({}.hasOwnProperty.call(n,r)){var i=n[r],a=i.type,o=i.props,u=i.listener;e.store()[a](o,u)}},fa=function isValidValue(e){return!isNaN(e)&&e!==-1/0&&e!==1/0},ha=function getObjProp(e){for(var t=arguments.length,n=Array(t>1?t-1:0),r=1;r1)for(var n,r,i,a,o,u,c=0,s=e[t[0]].length;c=0?(r[0]=a,r[1]=a+=i):i<0?(r[1]=o,r[0]=o+=i):r[0]=a}),_defineProperty(Mi,"none",ei),_defineProperty(Mi,"expand",function(e,t){if((r=e.length)>0){for(var n,r,i,a=0,o=e[0].length;a0&&(r=(n=e[t[0]]).length)>0){for(var n,r,i,a=0,o=1;o0&&(d+=f);for(null!=t?p.sort(function(e,n){return t(y[e],y[n])}):null!=n&&p.sort(function(e,t){return n(o[e],o[t])}),u=0,s=d?(v-h*b)/d:0;u0?f*s:0)+b,y[c]={data:o[c],index:u,value:f,startAngle:g,endAngle:l,padAngle:m};return y}return pie.value=function(t){return arguments.length?(e="function"==typeof t?t:vr(+t),pie):e},pie.sortValues=function(e){return arguments.length?(t=e,n=null,pie):t},pie.sort=function(e){return arguments.length?(n=e,t=null,pie):n},pie.startAngle=function(e){return arguments.length?(r="function"==typeof e?e:vr(+e),pie):r},pie.endAngle=function(e){return arguments.length?(i="function"==typeof e?e:vr(+e),pie):i},pie.padAngle=function(e){return arguments.length?(a="function"==typeof e?e:vr(+e),pie):a},pie},arc:function(){var e=arcInnerRadius,t=arcOuterRadius,n=vr(0),r=null,i=arcStartAngle,a=arcEndAngle,o=arcPadAngle,u=null;function arc(){var c,s,l=+e.apply(this,arguments),f=+t.apply(this,arguments),h=i.apply(this,arguments)-Ar,d=a.apply(this,arguments)-Ar,p=mr(d-h),y=d>h;if(u||(u=c=gr()),fSr)if(p>Er-Sr)u.moveTo(f*_r(h),f*kr(h)),u.arc(0,0,f,h,d,!y),l>Sr&&(u.moveTo(l*_r(d),l*kr(d)),u.arc(0,0,l,d,h,y));else{var g,v,m=h,b=d,_=h,x=d,w=p,k=p,C=o.apply(this,arguments)/2,S=C>Sr&&(r?+r.apply(this,arguments):Cr(l*l+f*f)),P=wr(mr(f-l)/2,+n.apply(this,arguments)),A=P,E=P;if(S>Sr){var M=asin(S/l*kr(C)),O=asin(S/f*kr(C));(w-=2*M)>Sr?(_+=M*=y?1:-1,x-=M):(w=0,_=x=(h+d)/2),(k-=2*O)>Sr?(m+=O*=y?1:-1,b-=O):(k=0,m=b=(h+d)/2)}var T=f*_r(m),F=f*kr(m),N=l*_r(x),j=l*kr(x);if(P>Sr){var I=f*_r(b),D=f*kr(b),L=l*_r(_),R=l*kr(_);if(pSr?function intersect(e,t,n,r,i,a,o,u){var c=n-e,s=r-t,l=o-i,f=u-a,h=(l*(t-a)-f*(e-i))/(f*c-l*s);return[e+h*c,t+h*s]}(T,F,L,R,I,D,N,j):[N,j],z=T-B[0],H=F-B[1],V=I-B[0],U=D-B[1],W=1/kr(function acos(e){return e>1?0:e<-1?Pr:Math.acos(e)}((z*V+H*U)/(Cr(z*z+H*H)*Cr(V*V+U*U)))/2),q=Cr(B[0]*B[0]+B[1]*B[1]);A=wr(P,(l-q)/(W-1)),E=wr(P,(f-q)/(W+1))}}k>Sr?E>Sr?(g=cornerTangents(L,R,T,F,f,E,y),v=cornerTangents(I,D,N,j,f,E,y),u.moveTo(g.cx+g.x01,g.cy+g.y01),ESr&&w>Sr?A>Sr?(g=cornerTangents(N,j,I,D,l,-A,y),v=cornerTangents(T,F,L,R,l,-A,y),u.lineTo(g.cx+g.x01,g.cy+g.y01),A=0&&"xmlns"!==(t=e.slice(0,n))&&(e=e.slice(n+1)),ka.hasOwnProperty(t)?{space:ka[t],local:e}:e};var Sa=function(e){var t=Ca(e);return(t.local?function creatorFixed(e){return function(){return this.ownerDocument.createElementNS(e.space,e.local)}}:function creatorInherit(e){return function(){var t=this.ownerDocument,n=this.namespaceURI;return n===wa&&t.documentElement.namespaceURI===wa?t.createElement(e):t.createElementNS(n,e)}})(t)};function selector_none(){}var Pa=function(e){return null==e?selector_none:function(){return this.querySelector(e)}};function selectorAll_empty(){return[]}var Aa=function(e){return null==e?selectorAll_empty:function(){return this.querySelectorAll(e)}},Ea=function matcher(e){return function(){return this.matches(e)}};if("undefined"!=typeof document){var Ma=document.documentElement;if(!Ma.matches){var Oa=Ma.webkitMatchesSelector||Ma.msMatchesSelector||Ma.mozMatchesSelector||Ma.oMatchesSelector;Ea=function matcher(e){return function(){return Oa.call(this,e)}}}}var Ta=Ea,Fa=function(e){return new Array(e.length)};function EnterNode(e,t){this.ownerDocument=e.ownerDocument,this.namespaceURI=e.namespaceURI,this._next=null,this._parent=e,this.__data__=t}EnterNode.prototype={constructor:EnterNode,appendChild:function appendChild(e){return this._parent.insertBefore(e,this._next)},insertBefore:function insertBefore(e,t){return this._parent.insertBefore(e,t)},querySelector:function querySelector(e){return this._parent.querySelector(e)},querySelectorAll:function querySelectorAll(e){return this._parent.querySelectorAll(e)}};var Na="$";function bindIndex(e,t,n,r,i,a){for(var o,u=0,c=t.length,s=a.length;ut?1:e>=t?0:NaN}var ja=function(e){return e.ownerDocument&&e.ownerDocument.defaultView||e.document&&e||e.defaultView};function styleValue(e,t){return e.style.getPropertyValue(t)||ja(e).getComputedStyle(e,null).getPropertyValue(t)}function classArray(e){return e.trim().split(/^|\s+/)}function classList(e){return e.classList||new ClassList(e)}function ClassList(e){this._node=e,this._names=classArray(e.getAttribute("class")||"")}function classedAdd(e,t){for(var n=classList(e),r=-1,i=t.length;++r=0&&(this._names.splice(t,1),this._node.setAttribute("class",this._names.join(" ")))},contains:function contains(e){return this._names.indexOf(e)>=0}};function textRemove(){this.textContent=""}function htmlRemove(){this.innerHTML=""}function raise_raise(){this.nextSibling&&this.parentNode.appendChild(this)}function lower(){this.previousSibling&&this.parentNode.insertBefore(this,this.parentNode.firstChild)}function constantNull(){return null}function remove_remove(){var e=this.parentNode;e&&e.removeChild(this)}function selection_cloneShallow(){return this.parentNode.insertBefore(this.cloneNode(!1),this.nextSibling)}function selection_cloneDeep(){return this.parentNode.insertBefore(this.cloneNode(!0),this.nextSibling)}var Ia={},Da=null;"undefined"!=typeof document&&("onmouseenter"in document.documentElement||(Ia={mouseenter:"mouseover",mouseleave:"mouseout"}));function filterContextListener(e,t,n){return e=contextListener(e,t,n),function(t){var n=t.relatedTarget;n&&(n===this||8&n.compareDocumentPosition(this))||e.call(this,t)}}function contextListener(e,t,n){return function(r){var i=Da;Da=r;try{e.call(this,this.__data__,t,n)}finally{Da=i}}}function onRemove(e){return function(){var t=this.__on;if(t){for(var n,r=0,i=-1,a=t.length;r=_&&(_=b+1);!(m=g[_])&&++_=0;)(r=i[a])&&(o&&o!==r.nextSibling&&o.parentNode.insertBefore(r,o),o=r);return this},sort:function(e){function compareNode(t,n){return t&&n?e(t.__data__,n.__data__):!t-!n}e||(e=sort_ascending);for(var t=this._groups,n=t.length,r=new Array(n),i=0;i1?this.each((null==t?function styleRemove(e){return function(){this.style.removeProperty(e)}}:"function"==typeof t?function styleFunction(e,t,n){return function(){var r=t.apply(this,arguments);null==r?this.style.removeProperty(e):this.style.setProperty(e,r,n)}}:function styleConstant(e,t,n){return function(){this.style.setProperty(e,t,n)}})(e,t,null==n?"":n)):styleValue(this.node(),e)},property:function(e,t){return arguments.length>1?this.each((null==t?function propertyRemove(e){return function(){delete this[e]}}:"function"==typeof t?function propertyFunction(e,t){return function(){var n=t.apply(this,arguments);null==n?delete this[e]:this[e]=n}}:function propertyConstant(e,t){return function(){this[e]=t}})(e,t)):this.node()[e]},classed:function(e,t){var n=classArray(e+"");if(arguments.length<2){for(var r=classList(this.node()),i=-1,a=n.length;++i=0&&(t=e.slice(n+1),e=e.slice(0,n)),{type:e,name:t}})}(e+""),o=a.length;if(!(arguments.length<2)){for(u=t?onAdd:onRemove,null==n&&(n=!1),r=0;r=0&&(n=e.slice(r+1),e=e.slice(0,r)),e&&!t.hasOwnProperty(e))throw new Error("unknown type: "+e);return{type:e,name:n}})}(e+"",r),a=-1,o=i.length;if(!(arguments.length<2)){if(null!=t&&"function"!=typeof t)throw new Error("invalid callback: "+t);for(;++a0)for(var n,r,i=new Array(n),a=0;af}c.mouse("drag")}function mouseupped(){Ba(Da.view).on("mousemove.drag mouseup.drag",null),function yesdrag(e,t){var n=e.document.documentElement,r=Ba(e).on("dragstart.drag",null);t&&(r.on("click.drag",Ya,!0),setTimeout(function(){r.on("click.drag",null)},0)),"onselectstart"in n?r.on("selectstart.drag",null):(n.style.MozUserSelect=n.__noselect,delete n.__noselect)}(Da.view,n),Ya(),c.mouse("end")}function touchstarted(){if(i.apply(this,arguments)){var e,t,n=Da.changedTouches,r=a.apply(this,arguments),o=n.length;for(e=0;e=0&&t._call.call(null,e),t=t._next;--eo}()}finally{eo=0,function nap(){var e,t,n=$a,r=1/0;for(;n;)n._call?(r>n._time&&(r=n._time),e=n,n=n._next):(t=n._next,n._next=null,n=e?e._next=t:$a=t);Qa=e,sleep(r)}(),ao=0}}function poke(){var e=uo.now(),t=e-io;t>ro&&(oo-=t,io=e)}function sleep(e){eo||(to&&(to=clearTimeout(to)),e-ao>24?(e<1/0&&(to=setTimeout(wake,e-uo.now()-oo)),no&&(no=clearInterval(no))):(no||(io=uo.now(),no=setInterval(poke,ro)),eo=1,co(wake)))}Timer.prototype=timer.prototype={constructor:Timer,restart:function restart(e,t,n){if("function"!=typeof e)throw new TypeError("callback is not a function");n=(null==n?now():+n)+(null==t?0:+t),this._next||Qa===this||(Qa?Qa._next=this:$a=this,Qa=this),this._call=e,this._time=n,sleep()},stop:function stop(){this._call&&(this._call=null,this._time=1/0,sleep())}};var so=function(e,t,n){var r=new Timer;return t=null==t?0:+t,r.restart(function(n){r.stop(),e(n+t)},t,n),r},lo=Ga("start","end","interrupt"),fo=[],ho=0,po=1,yo=2,go=3,vo=4,mo=5,bo=6,_o=function(e,t,n,r,i,a){var o=e.__transition;if(o){if(n in o)return}else e.__transition={};!function schedule_create(e,t,n){var r,i=e.__transition;function start(a){var o,u,c,s;if(n.state!==po)return stop();for(o in i)if((s=i[o]).name===n.name){if(s.state===go)return so(start);s.state===vo?(s.state=bo,s.timer.stop(),s.on.call("interrupt",e,e.__data__,s.index,s.group),delete i[o]):+oho)throw new Error("too late; already scheduled");return n}function schedule_set(e,t){var n=schedule_get(e,t);if(n.state>yo)throw new Error("too late; already started");return n}function schedule_get(e,t){var n=e.__transition;if(!n||!(n=n[t]))throw new Error("transition not found");return n}function tweenValue(e,t,n){var r=e._id;return e.each(function(){var e=schedule_set(this,r);(e.value||(e.value={}))[t]=n.apply(this,arguments)}),function(e){return schedule_get(e,r).value[t]}}var xo=function(e,t){var n;return("number"==typeof t?ge:t instanceof color_color?pe:(n=color_color(t))?(t=n,pe):Ce)(e,t)};var wo=Ra.prototype.constructor;var ko=0;function Transition(e,t,n,r){this._groups=e,this._parents=t,this._name=n,this._id=r}function newId(){return++ko}var Co=Ra.prototype;Transition.prototype=function src_transition_transition(e){return Ra().transition(e)}.prototype={constructor:Transition,select:function(e){var t=this._name,n=this._id;"function"!=typeof e&&(e=Pa(e));for(var r=this._groups,i=r.length,a=new Array(i),o=0;o=0&&(e=e.slice(0,t)),!e||"start"===e})}(t)?init:schedule_set;return function(){var o=a(this,e),u=o.on;u!==r&&(i=(r=u).copy()).on(t,n),o.on=i}}(n,e,t))},attr:function(e,t){var n=Ca(e),r="transform"===n?Fe:xo;return this.attrTween(e,"function"==typeof t?(n.local?function attr_attrFunctionNS(e,t,n){var r,i,a;return function(){var o,u=n(this);if(null!=u)return(o=this.getAttributeNS(e.space,e.local))===u?null:o===r&&u===i?a:a=t(r=o,i=u);this.removeAttributeNS(e.space,e.local)}}:function attr_attrFunction(e,t,n){var r,i,a;return function(){var o,u=n(this);if(null!=u)return(o=this.getAttribute(e))===u?null:o===r&&u===i?a:a=t(r=o,i=u);this.removeAttribute(e)}})(n,r,tweenValue(this,"attr."+e,t)):null==t?(n.local?function attr_attrRemoveNS(e){return function(){this.removeAttributeNS(e.space,e.local)}}:function attr_attrRemove(e){return function(){this.removeAttribute(e)}})(n):(n.local?function attr_attrConstantNS(e,t,n){var r,i;return function(){var a=this.getAttributeNS(e.space,e.local);return a===n?null:a===r?i:i=t(r=a,n)}}:function attr_attrConstant(e,t,n){var r,i;return function(){var a=this.getAttribute(e);return a===n?null:a===r?i:i=t(r=a,n)}})(n,r,t+""))},attrTween:function(e,t){var n="attr."+e;if(arguments.length<2)return(n=this.tween(n))&&n._value;if(null==t)return this.tween(n,null);if("function"!=typeof t)throw new Error;var r=Ca(e);return this.tween(n,(r.local?function attrTweenNS(e,t){function tween(){var n=this,r=t.apply(n,arguments);return r&&function(t){n.setAttributeNS(e.space,e.local,r(t))}}return tween._value=t,tween}:function attrTween(e,t){function tween(){var n=this,r=t.apply(n,arguments);return r&&function(t){n.setAttribute(e,r(t))}}return tween._value=t,tween})(r,t))},style:function(e,t,n){var r="transform"==(e+="")?Te:xo;return null==t?this.styleTween(e,function style_styleRemove(e,t){var n,r,i;return function(){var a=styleValue(this,e),o=(this.style.removeProperty(e),styleValue(this,e));return a===o?null:a===n&&o===r?i:i=t(n=a,r=o)}}(e,r)).on("end.style."+e,function styleRemoveEnd(e){return function(){this.style.removeProperty(e)}}(e)):this.styleTween(e,"function"==typeof t?function style_styleFunction(e,t,n){var r,i,a;return function(){var o=styleValue(this,e),u=n(this);return null==u&&(this.style.removeProperty(e),u=styleValue(this,e)),o===u?null:o===r&&u===i?a:a=t(r=o,i=u)}}(e,r,tweenValue(this,"style."+e,t)):function style_styleConstant(e,t,n){var r,i;return function(){var a=styleValue(this,e);return a===n?null:a===r?i:i=t(r=a,n)}}(e,r,t+""),n)},styleTween:function(e,t,n){var r="style."+(e+="");if(arguments.length<2)return(r=this.tween(r))&&r._value;if(null==t)return this.tween(r,null);if("function"!=typeof t)throw new Error;return this.tween(r,function styleTween(e,t,n){function tween(){var r=this,i=t.apply(r,arguments);return i&&function(t){r.style.setProperty(e,i(t),n)}}return tween._value=t,tween}(e,t,null==n?"":n))},text:function(e){return this.tween("text","function"==typeof e?function text_textFunction(e){return function(){var t=e(this);this.textContent=null==t?"":t}}(tweenValue(this,"text",e)):function text_textConstant(e){return function(){this.textContent=e}}(null==e?"":e+""))},remove:function(){return this.on("end.remove",function removeFunction(e){return function(){var t=this.parentNode;for(var n in this.__transition)if(+n!==e)return;t&&t.removeChild(this)}}(this._id))},tween:function(e,t){var n=this._id;if(e+="",arguments.length<2){for(var r,i=schedule_get(this.node(),n).tween,a=0,o=i.length;ayo&&n.state4&&void 0!==arguments[4]?arguments[4]:{},a=arguments[5];(e instanceof HTMLElement||e instanceof SVGElement)&&(e=Ao(e));var o=r?r[0]:null,u=null,c=null,s=null,l=null,f=null,h=void 0;o?"#"===o?(u="id",c=r):(u="class",c="."===r[0]?r:"."+r):(c=t,h=!0),s=e.selectAll(c),h&&(s=s.filter(function(){return this.parentNode===e.node()})),l=(s=s.data(n,a)).enter().append(t||"div"),i.enter&&l.each(function(){for(var e=arguments.length,t=Array(e),n=0;nthis._data.length)for(var a=this._data.length;a0&&void 0!==arguments[0]?arguments[0]:{};this._lifeCycles=e,this._releasePromisesFromCache()}},{key:"_resetTargetPromise",value:function _resetTargetPromise(e){var t=this;setTimeout(function(){t._notifiers[e]=Xo,t._promises.set(e,t._makeNotifierPromise(e))},0)}}]),LifeCycleManager}(),Qo="drag",Zo="hover",Jo="selectiondrag",eu="click",tu="longtouch",nu="touchdrag",ru="*",iu=1,au=-1,ou=0,uu=2,cu=-2,su=function(){function defineProperties(e,t){for(var n=0;n0?(e[n]===uu&&t.entrySet[0].push(n),e[n]===iu&&t.entrySet[1].push(n)):e[n]<0&&(e[n]===cu&&t.exitSet[0].push(n),e[n]===au&&t.exitSet[1].push(n)),t.completeSet.push(n);return["entrySet","exitSet"].forEach(function(e){t[e]=t[e].map(function(e){return e.map(Number)})}),t.completeSet=t.completeSet.map(Number),t}},{key:"reset",value:function reset(e){var t=this._set;if(e)e.forEach(function(e){t[e]=ou});else{var n=this._lockedSelection;for(var r in t)r in n||(t[r]=ou)}return this._resetted=!0,this}},{key:"getEntrySet",value:function getEntrySet(){var e=this._set,t=[];for(var n in e)e[n]===iu&&t.push(n);return t}},{key:"getExistingEntrySet",value:function getExistingEntrySet(e){var t=this._set;return e.filter(function(e){return t[e]===iu||t[e]===uu})}},{key:"getExistingExitSet",value:function getExistingExitSet(e){var t=this._set;return e.filter(function(e){return t[e]===au||t[e]===cu})}},{key:"getOldEntry",value:function getOldEntry(){var e=this._set,t=[];for(var n in e)e[n]===uu&&t.push(n);return t}},{key:"getOldExit",value:function getOldExit(){var e=this._set,t=[];for(var n in e)e[n]===cu&&t.push(n);return t}},{key:"getExitSet",value:function getExitSet(){var e=this._set,t=[];for(var n in e)e[n]===au&&t.push(n);return t}},{key:"getCompleteSet",value:function getCompleteSet(){var e=this._set,t=[];for(var n in e)t.push(n);return t}},{key:"getCompleteSetCount",value:function getCompleteSetCount(){return this._completeSetCount}},{key:"resetted",value:function resetted(){return this._resetted}},{key:"toggle",value:function toggle(){var e=this._set;for(var t in e)e[t]===iu?e[t]=au:e[t]===au?e[t]=iu:e[t]===uu?e[t]=cu:e[t]=uu;return this}}]),SelectionSet}();function helper_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t3&&void 0!==arguments[3]?arguments[3]:{},i=this.sideEffects(),a=i[e],o=!1;r.filter&&r.filter(a)&&(o=!0),!o&&i[e].apply(t,n,r)}},{key:"registerPropagationBehaviourMap",value:function registerPropagationBehaviourMap(e){return this._propagationBehaviourMap=Object.assign(this._propagationBehaviourMap,e||{}),this}},{key:"dispatchBehaviour",value:function dispatchBehaviour(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=void 0===n.propagate||n.propagate,i=this._actions.behavioural[e],a=function getSideEffects(e,t){var n=[];for(var r in t){var i=r.split(",");i.some(function(t){return t===e})&&n.push({effects:t[r],behaviours:i})}return n}(e,this._behaviourEffectMap);if(this._propagationInf=n,i){var o=i.dispatch(t),u=this.getPropagationSelectionSet(o);this._entryExitSet[e]=u;var c=this.shouldApplySideEffects(r);if(r&&this.propagate(e,t,o.find(function(e){return e.sourceSelectionSet}),a),c){var s=this.getApplicableSideEffects(a,t,n);this.applySideEffects(s,u,t)}}return this}},{key:"getPropagationSelectionSet",value:function getPropagationSelectionSet(e){return e.find(function(e){return!e.sourceSelectionSet})}},{key:"shouldApplySideEffects",value:function shouldApplySideEffects(){return!0}},{key:"changeBehaviourStateOnPropagation",value:function changeBehaviourStateOnPropagation(e,t){return t instanceof Function?this._sourceBehaviours[e]=t:this._sourceBehaviours[e]=function(){return t},this}},{key:"changeSideEffectStateOnPropagation",value:function changeSideEffectStateOnPropagation(e,t){t instanceof Function?this._sourceSideEffects[e]=t:this._sourceSideEffects[e]=function(){return t}}},{key:"propagate",value:function propagate(){return this}},{key:"sideEffects",value:function sideEffects(){return arguments.length?(this._sideEffects=arguments.length<=0?void 0:arguments[0],this):this._sideEffects}},{key:"enableSideEffects",value:function enableSideEffects(e){return fu(this,e,!0),this}},{key:"disableSideEffects",value:function disableSideEffects(e){return fu(this,e,!1),this}},{key:"dissociateBehaviour",value:function dissociateBehaviour(e,t){var n=this._actionBehaviourMap;for(var r in n)if(r===t){var i=n[r];i.behaviours=i.behaviours.filter(function(t){return t!==e})}return this}},{key:"dissociateSideEffect",value:function dissociateSideEffect(e,t){var n=this._behaviourEffectMap;return n[t]=n[t].filter(function(t){return(t.name||t)!==e}),this}},{key:"getApplicableSideEffects",value:function getApplicableSideEffects(e){return e}},{key:"attachPropagationListener",value:function attachPropagationListener(e){return e.unsubscribe("propagation"),e.on("propagation",this.onDataModelPropagation()),this}},{key:"onDataModelPropagation",value:function onDataModelPropagation(){var e=this;return function(t){var n=t.payload,r=n.action;e.dispatchBehaviour(r,n,{propagate:!1})}}},{key:"createSelectionSet",value:function createSelectionSet(e,t){var n=t||this._actions.behavioural,r=this._selectionSet,i=this._volatileSelectionSet;for(var a in n)({}).hasOwnProperty.call(n,a)&&(r[a]=new lu(e),i[a]=new lu(e,!0));return this._volatileSelectionSet=i,this.selectionSet(r),this}},{key:"selectionSet",value:function selectionSet(){return arguments.length?(this._selectionSet=arguments.length<=0?void 0:arguments[0],this):this._selectionSet}},{key:"initializeSideEffects",value:function initializeSideEffects(){var e=this._sideEffectDefinitions;return this.sideEffects(function initializeSideEffects(e,t){var n=e._sideEffects;return(t=t instanceof Array?t:Object.values(t)).forEach(function(t){var r=n[t.formalName()];n[t.formalName()]=r||new t(e)}),n}(this,e)),this}},{key:"registerPhysicalActions",value:function registerPhysicalActions(e){var t=function initializePhysicalActions(e,t){var n={};for(var r in t)({}).hasOwnProperty.call(r,t)||(n[r]=t[r](e));return n}(this,e);return Object.assign(this._actions.physical,t),this}},{key:"propagateWith",value:function propagateWith(e,t){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],r=this._actions.behavioural;if(t.length){if(e===ru)for(var i in r)this._propagationFields[i]={fields:t,append:n};else this._propagationFields[e]={fields:t,append:n};return this}return this._propagationFields}},{key:"mapActionsAndBehaviour",value:function mapActionsAndBehaviour(){var e=this._actions.physical,t=this._actionBehaviourMap,n=this._mappedActions;for(var r in t)if(!{}.hasOwnProperty.call(r,t)){var i=void 0,a=t[r];i=a.target;var o=a.touch;i||(i=this.context.getDefaultTargetContainer());var u=Ro()?!0===o||void 0===o:!o,c=r+"-"+a.behaviours.join();u&&!n[c]&&this.bindActionWithBehaviour(e[r],i,a.behaviours),n[c]=!0}return this}},{key:"registerPhysicalBehaviouralMap",value:function registerPhysicalBehaviouralMap(e){return Object.assign(this._actionBehaviourMap,e),this}},{key:"bindActionWithBehaviour",value:function bindActionWithBehaviour(e,t,n){var r=this;return"string"==typeof t&&(t=[t]),t.forEach(function(t){var i=r.context.mount(),a=t.node instanceof Function?t:Ao(i).selectAll(t);n.length&&!a.empty()&&(a instanceof Array?a.forEach(function(t){e(Ao(t),n)}):e(a,n))}),this}},{key:"getPropagationInf",value:function getPropagationInf(){return this._propagationInf}},{key:"getAddSetFromCriteria",value:function getAddSetFromCriteria(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=this.context,r=t.data?t.data:n.getDataModelFromIdentifiers(e,"all"),i=n.fields().x||[],a=n.fields().y||[],o=i.every(function(e){return e.type()===ir.FieldType.MEASURE}),u=a.every(function(e){return e.type()===ir.FieldType.MEASURE});return{model:r,uids:null===e?null:t.data?function filterPropagationModel(e,t,n){var r=t.getData(),i=r.data,a=r.schema,o=void 0;if(a.length){var u=e.getFieldsConfig();o=e.select(function(e){return i.some(function(t){return a.every(function(r,i){return!(n||r.name in u&&u[r.name].def.type!==ir.FieldType.MEASURE)||t[i]===e[r.name].valueOf()})})},{saveChild:!1})}else o=t;return o}(this.getFullData(),t.data[0],o&&u).getData().uids:r[0].getData().uids}}},{key:"getSelectionSets",value:function getSelectionSets(e){var t=this.context.id(),n=(this._propagationInf||{}).sourceId,r=[];return n!==t&&(r=[this._volatileSelectionSet[e]]),n&&r.push(this.selectionSet()[e]),r}},{key:"getFullData",value:function getFullData(){return this.context.data()}},{key:"resetted",value:function resetted(){return this._resetted}},{key:"getEntryExitSet",value:function getEntryExitSet(e){return this._entryExitSet[e]}}]),Firebolt}(),mu=function(){function defineProperties(e,t){for(var n=0;n1&&void 0!==arguments[1]?arguments[1]:{},n=e.sourceIdentifiers;return n?n.getSchema().map(function(e){return e.name}):t instanceof Array?t[0]:Object.keys(t||{})}(u,n.criteria),sourceSelectionSet:!0===e._volatile}}},{key:"enable",value:function enable(){this._enabled=!0}},{key:"disable",value:function disable(){this._enabled=!1}},{key:"isEnabled",value:function isEnabled(){return this._enabled}}],[{key:"mutates",value:function mutates(){return!1}}]),GenericBehaviour}(),_u=function(){function defineProperties(e,t){for(var n=0;nk[0]?k:w,S=C===k?w:k;C[1]100&&Math.abs(i.x-a.x)<=5)){a.x=Math.max(0,Math.min(a.x,o.width)),a.y=Math.max(0,Math.min(a.y,o.height));var s=Ru(n.context.getSourceInfo(),{startPos:i,endPos:a,snap:!0},n.context.data().getFieldsConfig());s.dragEnd=!0,t.forEach(function(e){return n.dispatchBehaviour(e,s)})}}))},zu=function hover(e){return function(t,n){var r=function dispatchBehaviour(t){var r=Io(),i=e.context,a=i.config().interaction.tooltip.mode,o=jo(i.getDrawingContext().svgContainer,r),u=i.getNearestPoint(o.x,o.y,{getAllPoints:"consolidated"===a||"fragmented"===a,data:t,event:r}),c={criteria:u?u.id:null,showInPosition:u.showInPosition,target:u.target,position:o,mode:a};n.forEach(function(t){return e.dispatchBehaviour(t,c)}),r.stopPropagation()};t.on("mouseover",r).on("mousemove",r).on("mouseout",function(){n.forEach(function(t){return e.dispatchBehaviour(t,{criteria:null})})})}},Hu=function generatePayloadFromEvent(e,t,n){var r=n.context,i=jo(r.getDrawingContext().svgContainer,t.touches?t.touches[0]:t),a=r.getNearestPoint(i.x,i.y,{data:e,event:t});return{criteria:a?a.id:null,showInPosition:a.showInPosition,target:a.target,position:i}},Vu=function click(e){return function(t,n){t.on("click",function dispatchBehaviour(t){var r=Io(),i=Hu(t,r,e);n.forEach(function(t){return e.dispatchBehaviour(t,i)}),r.stopPropagation()})}};function physical_defineProperty(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var Uu=(physical_defineProperty(Du={},Qo,function drag(e){return function(t,n){Bu(t,n,e)}}),physical_defineProperty(Du,Zo,zu),physical_defineProperty(Du,eu,Vu),physical_defineProperty(Du,tu,function longtouch(e){return function(t,n){var r=void 0,i=void 0;i=!1,r=Io(),t.on("touchstart",function(t){r=Io(),i=!1,setTimeout(function(){i?n.forEach(function(t){return e.dispatchBehaviour(t,{criteria:null})}):function dispatchBehaviour(t){var i=Hu(t,r,e);n.forEach(function(t){return e.dispatchBehaviour(t,i)}),r.stopPropagation()}(t)},100)}).on("touchend",function(){i=!0})}}),physical_defineProperty(Du,nu,function touchdrag(e){return function(t,n){Bu(t,n,e,!0)}}),Du),Wu=function(){function defineProperties(e,t){for(var n=0;n1&&void 0!==arguments[1]&&arguments[1];var t=arguments[2],n=arguments[3];this.firebolt.context.layers().forEach(function(r){return!1!==r.config().interactive&&r.applyInteractionStyle(t,e.uids,n)})}}]),SurrogateSideEffect}(),Xu=function(){function defineProperties(e,t){for(var n=0;n=0&&l<=t&&c>=0&&s<=n){var f=Ru(a.getSourceInfo(),{startPos:{x:u,y:c},endPos:{x:l,y:s}},a.data().getFieldsConfig());o(f)}}).on("end",function(){var e=i.width,t=i.height,n=Math.min(e-r.width,Math.max(r.x,0)),u=Math.min(t-r.height,Math.max(r.y,0)),c=u+r.height,s=n+r.width;if(n>=0&&s<=e&&u>=0&&c<=t){var l=Ru(a.getSourceInfo(),{startPos:{x:n,y:u},endPos:{x:s,y:c},snap:!0},a.data().getFieldsConfig());l.dragEnd=!0,o(l)}}))}}(c)(Ao(this),["brush"],x)}).merge(w).each(function(e){var t=Ao(this);for(var n in b&&(t=t.transition().duration(b.duration)),e)({}).hasOwnProperty.call(e,n)&&fa(e[n])&&t.attr(n,e[n])}),C=Gi(u.defClassName,this._id,d);return k.classed(C.join(" "),!0),k.classed(u.className,!0),this}},{key:"hide",value:function hide(e){Qu(this,e.sideEffectGroup,!1)}},{key:"show",value:function show(e){Qu(this,e.sideEffectGroup,!0)}}],[{key:"defaultConfig",value:function defaultConfig(){return{defClassName:"selection-box-group",className:"",classPrefix:"muze",box:{defClassName:"selection-box",className:""},transition:{duration:200}}}},{key:"formalName",value:function formalName(){return"selectionBox"}}]),SelectionBox}(),ec={position:"absolute",width:0,height:0},tc={classPrefix:"muze",defClassName:"tooltip-box",connectorClassName:"tooltip-connectors",className:"",row:{margin:0},content:{spacing:5,iconContainerSize:10,iconScale:1,iconShape:"circle",iconColor:"#ff0000",rowMargin:"0px",margin:10,separator:":",className:"tooltip-content-container",parentClassName:"tooltip-content-parent-container"},arrow:{size:10,disabled:!1,defClassName:"tooltip-arrow",className:"",color:"rgba(195,195,195,0.85)"}},nc=function getArrowPos(e,t,n,r){var i=void 0,a=n.x,o=n.y,u=n.boxHeight,c=n.boxWidth,s=r.arrow.disabled?0:r.arrow.size;if("left"===e||"right"===e){var l=0,f=u/2,h=t.y+t.height,d=o+u;t.y>o?(l=t.y-o,f=(h>=d?d-t.y:t.height)/2):d>h&&(f=Math.abs(o-(t.y+t.height))/2),i=l+f-s/2}else{var p=0,y=c/2,g=t.x+t.width,v=a+c;t.x>a?(p=t.x-a,y=(g>=v?v-t.x:t.width)/2):v>g&&(y=Math.abs(a-(t.x+t.width))/2),i=p+y-s/2}return i},rc=function placeArrow(e,t,n){var r=e._tooltipArrow,i=e._tooltipBackground,a=e._config,o=a.classPrefix,u=a.arrow,c=Gi(u.defClassName,e._id,a.classPrefix);r.style("display","block"),r.attr("class",""+c.join(" ")),"left"===t||"right"===t?(r.style("top",n+"px"),r.style("left",""),i.style("top",n+"px"),i.style("left","")):("bottom"===t?r.style("top","100%"):r.style("top","-"+u.size+"px"),r.style("left",n+"px"),"bottom"===t?i.style("top","100%"):i.style("top","-"+(u.size+3)+"px"),i.style("left",n+"px")),r.classed(o+"-tooltip-arrow",!0),r.classed(o+"-tooltip-arrow-"+e._arrowOrientation,!1),r.classed(o+"-tooltip-arrow-"+t,!0),i.classed(o+"-tooltip-background-arrow",!0),i.classed(o+"-tooltip-background-arrow-"+e._arrowOrientation,!1),i.classed(o+"-tooltip-background-arrow-"+t,!0)};n(11);function strategy_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t1&&void 0!==arguments[1]?arguments[1]:{},n=arguments[2],r=[],i=e.getData(),a=i.data,o=i.schema,u=t.formatters,c=t.separator,s=e.getFieldsConfig(),l=e.getFieldspace(),f=l.fieldsObj(),h=n.dimensionMeasureMap,d=n.axes,p=n.detailFields||[],y=o.filter(function(e){return e.type===ir.FieldType.DIMENSION}),g=o.filter(function(e){return e.type===ir.FieldType.MEASURE}),v=o.find(function(e){return-1!==p.indexOf(e.name)}),m=a.length,b=function getRowContent(e,n){var r=void 0,i=void 0,o=void 0,p=[],y=s[e].index,g=s[e].def.subtype===ir.DimensionSubtype.TEMPORAL?f[e].getMinDiff():0,v=u&&u[e]||oc(n,function(e){return e});if(null!==r){var b=n===ir.FieldType.MEASURE?a.map(function(e){return e[y]}):[].concat(strategy_toConsumableArray(new Set(a.map(function(e){return e[y]}))));b=b.filter(function(e){return""!==e});var _=d.color[0],x=d.shape[0],w=d.size[0],k=(_||x||w)&&m>1&&n!==ir.FieldType.MEASURE;b.forEach(function(n,u){var f=void 0,d=h[e];if(d&&d.length&&m>1){f=n;var y={value:""};k&&(y={type:"icon",color:_.getColor(n),shape:x.getShape(n),size:w.getSize(n)*t.iconScale}),d.length>1?(p.push([y,""+f]),d.forEach(function(e){o=s[e].index,r=a[u][o],i=oc("measure",l.fields[o]._ref.numberFormat())(r,g),p.push([{value:""+e+c,style:{"margin-left":t.margin+"px}"},className:t.classPrefix+"-tooltip-key"},{value:""+i,className:t.classPrefix+"-tooltip-value"}])})):(o=s[d[0]].index,r=a[u][o],i=oc("measure",l.fields[o]._ref.numberFormat())(r,g),p.push([y,{value:""+f+c,className:t.classPrefix+"-tooltip-key"},{value:""+i,className:t.classPrefix+"-tooltip-value"}]))}else f=e,i=v(r=n,g),p.push([{value:""+f+c,className:t.classPrefix+"-tooltip-key"},{value:""+i,className:t.classPrefix+"-tooltip-value"}])})}return p},_="keyValue";if(m>1&&v)r=function getTabularData(e,t,n,r){var i=[];return i.push(t.map(function(e){return e.name})),e.forEach(function(e){var a=[];t.forEach(function(t,i){var o=t.subtype===ir.DimensionSubtype.TEMPORAL?r[t.name]:0,u=t.type===ir.FieldType.MEASURE&&n.fields[i]._ref.numberFormat(),c=oc(t.subtype||t.type,u)(e[i],o);a.push(c)}),i.push(a)}),i}(a,o,l,n.timeDiffs),_="table";else{y.forEach(function(e){var t=e.subtype?e.subtype:e.type;r=[].concat(strategy_toConsumableArray(r),strategy_toConsumableArray(b(e.name,t)))});var x=[].concat(strategy_toConsumableArray(new(Function.prototype.bind.apply(Set,[null].concat(strategy_toConsumableArray(Object.values(h)))))));(m>1?g.filter(function(e){return-1===x.indexOf(e.name)}):g).forEach(function(e){var t=e.subtype?e.subtype:e.type;r=[].concat(strategy_toConsumableArray(r),strategy_toConsumableArray(b(e.name,t)))})}return{content:r,displayFormat:_}},cc={keyValue:function keyValue(e,t,n){return uc(e,t,n)}},sc="keyValue",lc=function(){function defineProperties(e,t){for(var n=0;n0?(this._config=na(this._config,arguments.length<=0?void 0:arguments[0]),this):this._config}},{key:"update",value:function update(e){return this._model=e.model,this._strategy=void 0!==e.strategy?e.strategy:sc,this._formatter=e.formatter,this}},{key:"context",value:function context(e){return this._context=e,this}},{key:"render",value:function render(e){var t=void 0,n=this._config,r=n.iconContainerSize,i=this._formatter,a=n.rowMargin,o=this._model;if(this._mount=e,(t=o instanceof Array?o:i instanceof Function?i(this._model,this._context):cc[this._strategy](this._model,this.config(),this._context))instanceof Function)e.html(t());else{var u=t,c="default";Di(t)&&(u=t.content,c=t.displayFormat);var s=Eo(e,"div",[c],n.classPrefix+"-tooltip-content",{},function(e){return e});if("table"===c){var l=Eo(s,"table",[1],n.classPrefix+"-tooltip-table"),f=Eo(l,"tbody",[1],n.classPrefix+"-tooltip-table-tbody"),h=Eo(f,"tr",u,n.classPrefix+"-tooltip-table-row");h.each(function(e,t){Ao(this).classed(n.classPrefix+"-tooltip-table-row-"+t,!0)}),Eo(h,"td",function(e){return e},n.classPrefix+"-tooltip-table-cell").each(function(e){Ao(this).html(e)})}else{var d=Eo(s,"div",u,n.classPrefix+"-tooltip-row"),p=Eo(d,"span",function(e){return e},n.classPrefix+"-tooltip-content");p.attr("class",n.classPrefix+"-tooltip-content"),Fo(d,{margin:a}),Fo(p,{display:"inline-block","margin-right":n.spacing+"px"}),p.each(function(e){var t=Ao(this);if(t.html(""),e instanceof Object)if("icon"===e.type){var n=Eo(t,"svg",[1]),i=Eo(n,"path",[1]),a=e.shape instanceof Function?e.shape:pa(e.shape);To(n,{x:0,y:0,width:r,height:r}),To(i,{d:a.size(e.size)(),transform:"translate("+r/2+", "+r/2+")"}),Fo(i,{fill:e.color}),Fo(n,{width:r+"px",height:r+"px"})}else t.html(e.value),e.className&&t.classed(e.className,!0),Fo(t,e.style);else t.html(e)})}}return this}},{key:"clear",value:function clear(){return this._model=null,this}}],[{key:"defaultConfig",value:function defaultConfig(){var e=tc.content;return e.classPrefix=tc.classPrefix,e}}]),Content}(),hc=function(){function defineProperties(e,t){for(var n=0;n0){var e=na({},this.constructor.defaultConfig());return this._config=na(e,arguments.length<=0?void 0:arguments[0]),this}return this._config}},{key:"addClass",value:function addClass(e){return this._tooltipContainer.classed(e,!0),this}},{key:"context",value:function context(){return arguments.length?(this._context=arguments.length<=0?void 0:arguments[0],this):this._context}},{key:"content",value:function content(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=this.config(),i=r.classPrefix,a=r.content.className,o=r.formatter,u=n.className||i+"-"+a+"-"+e,content=this._contents[e]=this._contents[e]||new fc,c=Eo(this._contentContainer,"div",[n.order],u);c.attr("class",i+"-"+a+" "+u),function reorderContainers(e,t){e.selectAll(t).sort(function(e,t){return e-t})}(this._contentContainer,"."+i+"-"+a);var s=r.content;return n.classPrefix=this._config.classPrefix,content.config(s),null===t?(content.clear(),c.remove(),delete this._contents[e]):(content.update({model:t,formatter:n.formatter||o}),content.context(this._context),content.render(c)),Object.keys(this._contents).length||this.hide(),this}},{key:"getContents",value:function getContents(){return Object.values(this._contents)}},{key:"position",value:function position(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(!Object.keys(this._contents).length)return this.hide(),this;this.show();var r=this._target,i=n.repositionArrow;if(r&&i){var a=this._tooltipContainer.node(),o=this._config,u=o.arrow.disabled,c=u?0:o.arrow.size,s=this._arrowOrientation,l="left"===s||"right"===s?t+a.offsetHeight-cr.y+r.height:e+a.offsetWidth-cr.x+r.width;if(!u)if(l){var f=void 0;this._tooltipArrow.style("display","none"),this._tooltipBackground.style("display","none"),this._tooltipConnectorContainer.style("display","block");var h=this._tooltipConnectorContainer.selectAll("path").data([1]),d=h.enter().append("path");"left"===s?f="M "+e+" "+(t+a.offsetHeight/2)+" L "+(r.x+r.width)+" "+(r.y+r.height/2):"right"===s?f="M "+(e+a.offsetWidth)+" "+(t+a.offsetHeight/2)+" L "+r.x+" "+(r.y+r.height/2):"bottom"===s&&(f="M "+(e+a.offsetWidth/2)+" "+(t+a.offsetHeight)+" L "+(r.x+r.width/2)+" "+r.y),d.merge(h).attr("d",f).style("display","block")}else{var p=nc(s,r,{x:e,y:t,boxHeight:a.offsetHeight,boxWidth:a.offsetWidth},this._config);rc(this,this._arrowOrientation,p),this._tooltipConnectorContainer.style("display","none")}}var y=this._offset||{x:0,y:0};return this._tooltipContainer.style("left",y.x+e+"px").style("top",y.y+t+"px"),this}},{key:"positionRelativeTo",value:function positionRelativeTo(e){var t=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=void 0,i=n.orientation;if(this.show(),!e)return this.hide(),this;var a=this._extent,o=this._tooltipContainer.node();this._tooltipContainer.style("top","0px").style("left","0px");var u=o.offsetWidth+2,c=o.offsetHeight+2,s=this._config,l=this._offset,f=s.arrow.disabled,h=f?0:s.arrow.size,d=void 0===n.draw||n.draw,p=e.y,y=e.x+e.width+l.x,g=a.width-y,v=e.x+l.x-a.x,m=p>c+h,b=g>=u+h,_=v>=u+h;return this._target=e,i||(i=m?"vertical":b||_?"horizontal":"vertical"),"horizontal"===i?r=function positionHorizontal(){var n=void 0,r=e.x+e.width,i=e.y;return b?(n="left",r+=h):_?(r=e.x-u,n="right",r-=h):(n="left",r+=h),e.height2&&void 0!==arguments[2]?arguments[2]:{},r=0,i=0,a=e.mergedEnter.model,o=this.firebolt.context,u=this.drawingContext();if(a.isEmpty()||null===t.criteria||!1===e.isSourceFieldPresent)return this.hide(n,null),this;var c=this._tooltips,s=this.config(),l={width:u.width,height:u.height},f=t.showInPosition,h=s.padding,d=[],p="fragmented"===s.mode,y=o.getSourceInfo(),g=y.fields,v=!!(!!g.x[0]&&g.x[0].type()===ir.FieldType.DIMENSION),m=t.position,b=[],_={},x=a.getData().uids;p?d.push.apply(d,function tooltip_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);tu.height:i>u.width)break;b.push({x:z.x,y:z.y,width:H.width,height:H.height,tooltip:R})}}for(var V in c)if(!_[V]){var U=c[V];U.content(t.action,null),U.getContents().length||(U.remove(),delete c[V])}return p&&(!function spaceOutBoxes(e,t,n){var r=void 0,i=void 0,a=void 0,o=void 0,u=void 0,c=e.length,s=function spaceOutIfOverlap(e,t,u){a=e.x,o=e.width,r=e.y,i=e.height;var c=r+i,s=a+o;n?(u?rt.y)&&(t.y=u?e.y-t.height-5:c+5):(u?at.x)&&(t.x=u?e.x-t.width-5:s+5)};for(e.sort(function(e,t){return n?e.y-t.y:e.x-t.x}),u=0,u=0;ut.height||e[u].x+e[u].width>t.width)for(n?e[u].y-=e[u].height+e[u].y-t.height:e[u].x-=e[u].width+e[u].x-t.width,u=c-1;u>0;u--)s(e[u],e[u-1],!0)}(b,l,v),b.forEach(function(e){return e.tooltip.position(e.x,e.y,{repositionArrow:!0})})),this}},{key:"hide",value:function hide(e){var t=this._tooltips;for(var n in t)if({}.hasOwnProperty.call(t,n)){var r=e.strategy||this._strategy;t[n].content(r,null),t[n].hide()}}}],[{key:"defaultConfig",value:function defaultConfig(){return{padding:5,offset:{x:0,y:0}}}},{key:"formalName",value:function formalName(){return"tooltip"}}]),Tooltip}(),vc=(n(15),function(){function defineProperties(e,t){for(var n=0;n2&&void 0!==arguments[2]?arguments[2]:{},r=this._strategies[n.strategy||this._strategy];return!1!==e.isSourceFieldPresent&&r(e,this,n.strategy||this._strategy),this}}],[{key:"formalName",value:function formalName(){return"highlighter"}},{key:"target",value:function target(){return"visual-unit"}}]),PlotHighlighter}(),wc=function(){function defineProperties(e,t){for(var n=0;n67.5&&v<=90||(r+=2*y),u=p,u=90===l?y:270===l?-y:0,o===Yc?(u=0===t&&c&&s===ds?u+u/2:u,Ao(this).attr("transform","translate("+(-u+f)+" \n "+(-r-f)+") rotate("+l+")")):(u=0===t&&c&&s===ds?u-u/2:u,Ao(this).attr("transform","translate("+(u-f)+" \n "+(r+f)+") rotate("+l+")"))}),t},Os=function changeTickOrientation(e,t,n){var r=t._smartTicks,i=t.config(),a=t.dependencies().labelManager,o=i.labels,u=i.orientation,c=o.rotation,s=o.smartTicks,l=e.selectAll(".tick text");if(l.selectAll("tspan").remove(),0===c||!1!==s||"top"!==u&&"bottom"!==u)if(0===c&&!1===s)l.attr("transform","");else{l.attr("y",0).attr("x",0).text(""),Eo(l,"tspan",function(e,t){return r[t].lines},"smart-text").attr("dy","0").style("opacity","0").transition().duration(1e3).attr("dy",function(e,t){return"bottom"===u||0!==t?r[t].oriTextHeight:-r[t].oriTextHeight*(r[t].lines.length-1)-n}).style("opacity",1).attr("x",0).text(function(e){return e})}else Ms(t,l,a,i);return l},Ts=function setFixedBaseline(e){e.config().fixedBaseline&&e.setFixedBaseline()},Fs=function setAxisNamePos(e,t,n){var r=n.axisNameHeight,i=n.yOffset,a=n.labelOffset,o=n.availableSpace;switch(t){case Xc:e.attr("transform","translate("+-(o.width-r)+","+(i+a)+")rotate(-90)");break;case Kc:e.attr("transform","translate("+(o.width-r)+","+(i+a)+")rotate(90)");break;case Yc:e.attr("transform","translate("+o.width/2+","+(-o.height+r)+")");break;case Gc:e.attr("transform","translate("+o.width/2+","+(o.height-r/2)+")")}return e};function cartesian_axis_helper_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);tt.length&&(t=p,r=e.smartTicks()?e.smartTicks()[s]:{},n=o[s]),d}),n=h.getOriSize(t),{largestLabel:t,largestLabelDim:n,axisTickLabels:i,allLabelLengths:o,smartTick:r}},js=function setOffset(e){var t=0,n=0,r=e.logicalSpace(),i=e.config(),a=i.orientation,o=i.xOffset,u=i.yOffset;a===Xc&&(t=void 0===o?r.width:o),a===Yc&&(n=void 0===u?r.height:u),e.config({xOffset:t,yOffset:n})},Is=function adjustRange(e,t,n,r){var i=function getAxisOffset(e,t,n){var r=Math.abs(t[1]-t[0])/(n[1]-n[0])*e,i=t[1]-t[0],a=i/r;return(i-i/(a+1)*a)/2}(e,t,n);return r===Yc||r===Gc?(t[0]+=i,t[1]-=i):(t[0]-=i,t[1]+=i),t},Ds=function registerChangeListeners(e){return e.store().model.next(["domain","range","mount","config"],function(){for(var t=arguments.length,n=Array(t),r=0;r0&&e.length*(t+this._minTickDistance.width)>i&&this.config({labels:{rotation:-90}})}return this}},{key:"adjustRange",value:function adjustRange(){return this}},{key:"getScaleValue",value:function getScaleValue(e){if(null!==e&&void 0!==e)return this.scale()(e)}},{key:"getTickSize",value:function getTickSize(){return this.axis().tickSize()}},{key:"getAxisDimensions",value:function getAxisDimensions(){return this.axisDimensions(function computeAxisDimensions(e){var t={},n=e.config(),r=n.name,i=n.labels,a=n.tickValues,o=(i.smartTicks?0:i.rotation)*Math.PI/180,u=e.dependencies().labelManager,c=Ns(e),s=c.largestLabelDim,l=c.axisTickLabels,f=c.smartTick,h=s.height,d=s.width;return 0===e.domain().length?null:(!1===e._rotationLock&&(e.setRotationConfig(a||l,s.width),e._rotationLock=!1),t=i.smartTicks?f:{width:Math.abs(h*Math.sin(o))+Math.abs(d*Math.cos(o)),height:Math.abs(d*Math.sin(o))+Math.abs(h*Math.cos(o))},u.setStyle(e._axisNameStyle),{tickSize:e.getTickSize(),tickLabelDim:t,axisLabelDim:u.getOriSize(r),largestLabelDim:s,axisTickLabels:l})}(this)),this.axisDimensions()}},{key:"getLogicalSpace",value:function getLogicalSpace(){return this.logicalSpace()||(this.logicalSpace(function calculateContinousSpace(e){e.range();var t=e.config(),n=e.getAxisDimensions(),r=t.orientation,i=t.show,a=t.showAxisName,o=n.axisLabelDim;if(!1===i)return{width:0,height:0};var u=o.width;if(r===Yc||r===Gc){var c=Ls(e,n,t),s=c.width,l=c.height;return{width:Math.max(s,u),height:l}}var f=Rs(e,n,t),h=f.width,d=f.height;return{width:h,height:Math.max(d,a?u:0)}}(this)),js(this),this.logicalSpace()),this.logicalSpace()}},{key:"invert",value:function invert(){for(var e=this,t=arguments.length,n=Array(t),r=0;ra[1];return"band"===r?(n=i.invertExtent(e,t),[i(o?n[n.length-1]:n[0]),i(o?n[0]:n[n.length-1])+i.bandwidth()]):[e,t]}},{key:"updateDomainBounds",value:function updateDomainBounds(e){var t=this.domain();return this.config().domain?t=this.config().domain:(0===t.length&&(t=e),e.length&&(t=[Math.min(t[0],e[0]),Math.max(t[1],e[1])])),this.domain(t)}},{key:"updateDomainCache",value:function updateDomainCache(e){!1===this._domainLock&&(this.domain([]),this._domainLock=!0);var t=[];return e&&e.forEach(function(e){void 0!==e&&null!==e&&t.push(e)}),this.updateDomainBounds(t)}},{key:"getMinTickDifference",value:function getMinTickDifference(){return this.domain()}},{key:"getFormattedTickValues",value:function getFormattedTickValues(e){return e}},{key:"setTickValues",value:function setTickValues(){var e=this.config().tickValues;return e?(e instanceof Array&&this.axis().tickValues(e),this):this}},{key:"getUnitWidth",value:function getUnitWidth(){return 0}},{key:"serialize",value:function serialize(){return{name:this.name,type:this.type,range:this.range(),config:this.config()}}},{key:"registerEvent",value:function registerEvent(e,t){this._eventList.push({name:e,action:t})}},{key:"on",value:function on(e,t){e=e||"update",this.registerEvent(e,t)}},{key:"render",value:function render(){return this.mount()&&function renderAxis(e){var t=e.config(),n=e.dependencies().labelManager,r=e.mount(),i=e.range(),a=e.axis(),o=e.scale(),u=e._axisNameStyle,c=e._tickLabelStyle,s=e.formatter,l=e.tickValues,f=t.orientation,h=t.name,d=t.labels,p=t.xOffset,y=t.yOffset,g=t.axisNamePadding,v=t.className,m=t.showAxisName,b=t.show,_=t.id,x=t.interpolator,w=t.classPrefix;if(b){var k=e.getTickSize(),C=Eo(Ao(r),"g",[e],""+v,{},function(e){return e.config().id});n.setStyle(c),"linear"===x&&e.setTickValues();var S=o.ticks||o.quantile||o.domain;s&&a.tickFormat(s(l||a.tickValues()||S()));var P=Math.abs(i[0]-i[1]),A=e.axisDimensions().tickLabelDim;C.attr("transform","translate("+p+","+y+")"),Ts(e),!1===d.smartTicks?C.transition().duration(1e3).call(a):C.call(a),C.selectAll(".tick").classed(w+"-ticks",!0),C.selectAll(".tick line").classed(w+"-tick-lines",!0),C.selectAll(".tick text").classed(w+"-ticks",!0).classed(w+"-ticks-"+_,!0),Os(C,e,k);var E=Eo(C,"text",[h],w+"-axis-name").attr("text-anchor","middle").classed(w+"-axis-name-"+_,!0).text(function(e){return e});E.classed(ys,!m);var M=P/2;n.setStyle(u);var O=n.getOriSize(h),T={labelProps:A,tickSize:k,axisNamePadding:g,axisNameHeight:O.height,axisNameWidth:O.width,yOffset:y,xOffset:p,labelOffset:M,availableSpace:e.availableSpace()};Fs(E,f,T)}}(this),this}},{key:"remove",value:function remove(){return this.store().unsubscribeAll(),Ao(this.mount()).remove(),this}},{key:"unsubscribe",value:function unsubscribe(){return this.store().unsubscribeAll(),this}},{key:"isReverse",value:function isReverse(){var e=this.range();return e[0]>e[1]}},{key:"getPixelToValueRatio",value:function getPixelToValueRatio(){var e=this.scale(),t=e.range(),n=e.domain();return Math.abs(t[1]-t[0])/(n[1]-n[0])}},{key:"id",get:function get(){return this._id}}],[{key:"defaultConfig",value:function defaultConfig(){return Es}}]),SimpleAxis}(),Vs=function(){function defineProperties(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:0,t=arguments[1],n=arguments[2],r=arguments[3],i=n.left,a=n.right,o=n.top,u=n.bottom,c=this.config(),s=c.orientation,l=c.fixedBaseline,f=this.getAxisDimensions().tickLabelDim;if(this.availableSpace({width:e,height:t}),s===Yc||s===Gc){var h=f.width;this.range([(l?0:h/2)+i,e-a-h/2]);var d=this.getLogicalSpace().height;r&&this.config({yOffset:Math.max(d,t)})}else{var p=f.height;this.range([t-u-(l?1:p/2),p/2+o]);var y=this.getLogicalSpace().width;r&&this.config({xOffset:Math.max(y,e)})}return this}},{key:"setTickValues",value:function setTickValues(){var e=this.config().tickValues,t=this.axis();return e?(e instanceof Array&&this.axis().tickValues(e),this):(t.tickValues(this.getTickValues()),this)}},{key:"getTickValues",value:function getTickValues(){var e=this.config(),t=e.orientation,n=e.tickValues,r=this.range(),i=this.axis(),a=Math.abs(r[0]-r[1]),o=Ns(this).largestLabelDim;return n?i.scale().ticks(n):function getNumberOfTicks(e,t,n,r){var i=n.scale().ticks(),a=r.config().numberOfTicks,o=i.length,u=o;return o*(1.5*t)>e&&(u=Math.floor(e/(1.5*t))),u=Math.min(a,Math.max(1,u)),n.scale().ticks(u)}(a,o[t===Gc||t===Yc?"width":"height"],i,this)}},{key:"getMinTickDifference",value:function getMinTickDifference(){return xa(this.config().tickValues)}},{key:"setFixedBaseline",value:function setFixedBaseline(e){var t=this.config(),n=t.orientation,r=t.labels.rotation,i=this.axis(),a=this._axisDimensions.largestLabelDim,o=a.width,u=a.height;return i.tickTransform(function(e,t){return 0!==t||n!==Xc&&n!==Kc?0!==t||n!==Yc&&n!==Gc||0!==r?"":"translate("+o/2+"px, 0px) rotate("+r+"deg)":"translate(0, -"+u/3+"px)"}),e}}],[{key:"type",value:function type(){return Qc}}]),ContinousAxis}(),Zs=function(){function defineProperties(e,t){for(var n=0;n0&&e.length*(t+this._minTickDistance.width)>a&&(a&&o0&&e.length*t>i&&(i&&1.25*a1?t.range:[al].concat(props_toConsumableArray(t.range)));var r=na(n,e.config()),i=na(r,t);return i.range instanceof Array&&(i.range=i.range.map(function(e,t){return sl(e,il[t])}),i.stops=t.stops||i.range.length),i.value=sl(i.value,i.value),i}},domain:{},scale:{},uniqueValues:{}};function color_strategy_defineProperty(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function color_strategy_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);tMath.min(t.length,18))for(var r=aa()(function hslInterpolator(){return Ne}(),t.map(function(e){return ul(e)})),i=0;i0&&void 0!==arguments[0]?arguments[0]:[];if(e.length){var t=this.scale(),n=t.range?t.range():null,r=this._colorStrategy.domainRange()(e,this.config().stops,n);this.domain(r.domain),r.range&&this.scale().range(r.range),this.uniqueValues(r.uniqueVals),this.scale().domain(r.scaleDomain||this.domain())}return this}},{key:"serialize",value:function serialize(){return{type:this.constructor.type(),scale:this.scale(),domain:this.domain(),config:this.config()}}},{key:"transformColor",value:function transformColor(e,t){var n=360*e[0],r=100*e[1],i=100*e[2],a=e[3]||1,o=n+t[0],u=r+t[1],c=i+t[2],s=a+t[3]||0;return{color:"hsla("+o+","+u+"%,"+c+"%,"+s+")",hsla:[o/360,u/100,c/100,s]}}},{key:"id",value:function id(){return this._id}}],[{key:"defaultConfig",value:function defaultConfig(){return ol}},{key:"type",value:function type(){return"color"}}]),ColorAxis}(),Sl={value:36,range:[36,1e3]};function size_strategy_defineProperty(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function size_strategy_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t0&&void 0!==arguments[0]?arguments[0]:0,t=this.config().value,n=this.scale(),r=this.domain()||[1,1];return n&&r[0]!==r[1]?this._sizeStrategy.range(e,n,this.domain(),this.uniqueValues()):t}},{key:"updateDomain",value:function updateDomain(e){if(e){var t=(0,this._sizeStrategy.domain)(e,this.config().intervals);this.domain(t.domain),this.uniqueValues(t.uniqueVals),this.scale().domain(t.scaleDomain||this.domain())}return this}},{key:"serialize",value:function serialize(){return{type:this.constructor.type(),scale:this.scale(),domain:this.domain(),range:this.range(),config:this.config()}}},{key:"id",value:function id(){return this._id}}],[{key:"defaultConfig",value:function defaultConfig(){return Sl}},{key:"type",value:function type(){return"size"}}]),SizeAxis}(),Ol={generator:null,value:"circle",range:["circle","diamond","star","cross","square","wye","triangle"]},Tl={config:{},domain:{},scale:{},uniqueValues:{},generator:{}},Fl=function(){function defineProperties(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:[];return e.length&&(this.uniqueValues(e),this.domain(e),this.scale().domain(e),this.config().generator&&(this._generatedShapes=function shapeGenerator(e,t){var n={};return e.forEach(function(e){n[e]=t(e)}),n}(e,this.config().generator))),this}},{key:"serialize",value:function serialize(){return{type:this.constructor.type(),scale:this.scale(),domain:this.domain(),range:this.config().range,config:this.config()}}},{key:"id",value:function id(){return this._id}}],[{key:"defaultConfig",value:function defaultConfig(){return Ol}},{key:"type",value:function type(){return"shape"}}]),ShapeAxis}();function data_type_scale_map_defineProperty(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var Il="measure",Dl="temporal",Ll=(data_type_scale_map_defineProperty(Nl={},"dimension",Zc),data_type_scale_map_defineProperty(Nl,Il,Qc),data_type_scale_map_defineProperty(Nl,Dl,Jc),function(e,t,n){var r=n.groupBy instanceof Array?n.groupBy:[n.groupBy],i=r.map(function(t){return e.findIndex(function(e){return e.name===t})});if(void 0!==i.find(function(e){return-1===e}))throw new Error("Groupby field "+r+" not found in schema");return function nestCollection(e){var t=T();return e.keys.forEach(function(e){return t.key(function(t){return t[e]})}),t.entries(e.data)}({keys:i,data:t})});var Rl;function transform_factory_defineProperty(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var Bl=(transform_factory_defineProperty(Rl={},"identity",function identityTransform(e,t,n){return t}),transform_factory_defineProperty(Rl,"group",Ll),transform_factory_defineProperty(Rl,"stack",function(e,t,n){var r=n.uniqueField,i=n.value,a=n.groupBy,o=n.sort||"descending",u=function normalizeData(e,t,n,r,i){var a=Ll(t,e,{groupBy:r}),o=t.findIndex(function(e){return e.name===r}),u=t.findIndex(function(e){return e.name===n}),c=t.findIndex(function(e){return e.name===i}),s=e.map(function(e){return e[c]}).filter(function(e,t,n){return n.indexOf(e)===t}).sort(),l=t.reduce(function(e,t,n){return e[n]=t.name,e},{});return{data:a.map(function(e){var t={},n=e.values.reduce(function(e,n){return e=n.reduce(function(e,r,i){return i===c?(e[r]=n[u],t[r]=n):i!==u&&(e[l[i]]=r),e},e)},{});return n._tuple=t,s.forEach(function(t){if(void 0===n[t]){n[t]=0;var r=new Array(e.values[0].length);r[o]=e.key,r[c]=t,n._tuple[t]=r}}),n}),keys:s}}(t,e,i,r,a),c=u.keys,s={},l=n.orderBy,f=e.findIndex(function(e){return e.name===l}),h=e.findIndex(function(e){return e.name===a});-1!==f&&(c.forEach(function(e){var n=t.find(function(t){return t[h]===e});s[e]=n[f]}),u.keys.sort(function(e,t){return s[e].localeCompare(s[t])}));var d=va({keys:u.keys,offset:n.offset||"diverging",order:o,data:u.data});return d.forEach(function(e){e.forEach(function(t){t.data=t.data._tuple[e.key]})}),d}),Rl);var zl=function transformFactory(e){var t=Bl[e];if("function"!=typeof t)throw new Error("Invalid transform type supplied.");return t},Hl=function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function sliceIterator(e,t){var n=[],r=!0,i=!1,a=void 0;try{for(var o,u=e[Symbol.iterator]();!(r=(o=u.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){i=!0,a=e}finally{try{!r&&u.return&&u.return()}finally{if(i)throw a}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}();var Vl,Ul=f.BAND,Wl=function getLayerColor(e,t){var n=e.datum,r=e.index,i=t.colorEncoding,a=t.colorAxis,o=t.colorFieldIndex,u="",c="";return i&&i.value instanceof Function?(c=i.value(n,r),u=i.value(n,r)):(u=a.getRawColor(n._data[o]),c=a.getHslString(u)),{color:c,rawColor:u}},ql=function transfromColor(e,t,n,r){t.meta.stateColor[n]=t.meta.stateColor[n]||t.meta.originalColor;var i=e.transformColor(t.meta.stateColor[n],r);return t.meta.stateColor[n]=i.hsla,i},Gl=function applyInteractionStyle(e,t,n,r){var i=e.getPlotElementsFromSet(t),a=e.axes().color,o=r.apply,u=r.interactionType;n.forEach(function(e){var t=e.type;i.style(t,function(n){var r=n.meta,i=r.colorTransform,c=r.stateColor,s=r.originalColor;if(i[u]=i[u]||{},o&&!i[u][t])return i[u][t]=e.intensity,ql(a,n,t,e.intensity).color;if(!o&&i[u][t])return i[u][t]=null,ql(a,n,t,e.intensity.map(function(e){return-e})).color;var l=c[t]?c[t]:s,f=Hl(l,4);return"hsla("+360*f[0]+","+100*f[1]+"%,"+100*f[2]+"%, "+(f[3]||1)+")"})})},Yl=function getAxesScales(e){var t=[Bc.X,Bc.Y].map(function(t){return e[t]}),n=Hl(t,2),r=n[0],i=n[1],a=[r,i].map(function(e){return e&&e.scale()}),o=Hl(a,2);return{xAxis:r,yAxis:i,xScale:o[0],yScale:o[1]}},Xl=function getIndividualClassName(e,t,n,r){var i=r.config().individualClassName,a="";return i instanceof Function&&(a=i(e,t,n,r)),a},Kl=function attachDataToVoronoi(e,t){var n;e.data((n=[]).concat.apply(n,function helpers_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t=e[0]?(i=d=e[1],h=f=e[0]):(i=d=e[0],h=f=e[1]),(t=a===ir.FieldType.MEASURE?{x:h,x0:d,y:n[u],y0:n[u]}:{x:n[o],x0:n[o],y:i,y0:f})._data=n,t._id=n[l]}else(t={x:e[o],y:e[u],x0:e[c],y0:e[s]})._data=e,t._id=e[l];return t})}).filter(function(e){return e.length})}(e,t,this.encodingFieldsInf(),this.transformType())}},{key:"getNearestPoint",value:function getNearestPoint(){return null}},{key:"applyInteractionStyle",value:function applyInteractionStyle(e,t,n){var r=(this.config().interaction||{})[e];r&&Gl(this,t,r,{apply:n,interactionType:e})}},{key:"transformType",value:function transformType(){return arguments.length?(this._transformType=arguments.length<=0?void 0:arguments[0],this):this._transformType}},{key:"render",value:function render(){return this}},{key:"elemType",value:function elemType(){return"g"}},{key:"remove",value:function remove(){return this.store().unsubscribeAll(),Ao(this.mount()).remove(),this}},{key:"cachePoint",value:function cachePoint(e,t){if(null===e)return this;var n=this._pointMap;return!n[e]&&(n[e]=[]),n[e].push(t),this}},{key:"dataProps",value:function dataProps(){return arguments.length?(this._dataProps=arguments.length<=0?void 0:arguments[0],this):this._dataProps}},{key:"getIdentifiersFromData",value:function getIdentifiersFromData(e){var t=this.data().getData().schema,n=this.data().getFieldsConfig(),r=[[],[]],i=this.encodingFieldsInf(),a=i.xFieldType,o=i.yFieldType,u=i.xField,c=i.yField,s=[a,o].map(function(e){return e===ir.FieldType.MEASURE}),l=tf(s,2),f=l[0],h=l[1];if(t.forEach(function(t,i){var a=t.name;n[a].def.type===ir.FieldType.DIMENSION&&(r[0].push(a),r[1].push(e[i]))}),f&&h){var d,p,y=n[u].index,g=n[c].index;(d=r[0]).push.apply(d,[u,c]),(p=r[1]).push.apply(p,[e[y],e[g]])}return r}},{key:"getPlotSpan",value:function getPlotSpan(){return{x:0,y:0}}},{key:"getPlotPadding",value:function getPlotPadding(){return{x:0,y:0}}},{key:"getPointsFromIdentifiers",value:function getPointsFromIdentifiers(e){var t,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=n.getAllAttrs,i=n.getBBox;if(!this.data())return[];var a=void 0,o=void 0;if(e instanceof ar.a){var u=e.getData();a=u.schema.map(function(e){return e.name}),o=u.data}else a=e[0],o=e.slice(1,e.length);var c=this._points,s=this.data().getFieldsConfig(),l=(t=[]).concat.apply(t,function base_layer_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t2&&void 0!==arguments[2]?arguments[2]:{},r=Ao(n.event.target).data()[0];if(Di(r)){var i=r.datum,a=i.data,o=i.uid;return{id:this.getIdentifiersFromData(a,o),layerId:this.id()}}return null}},{key:"getPlotElementsFromSet",value:function getPlotElementsFromSet(e){return Ao(this.mount()).selectAll(this.elemType()).filter(function(t){return-1!==e.indexOf(t.datum.uid)})}},{key:"render",value:function render(e){var t=this,n=this.measurement(),r=n.height,i=n.width,a=this.config(),o=a.classPrefix,u=a.defClassName,c=a.minOuterRadius,s=a.innerRadius,l=a.outerRadius,f=a.cornerRadius,h=a.padAngle,d=a.padRadius,p=a.padding,y=a.transition,g=a.innerRadiusFixer,v=this.axes().size,m=this._store,b=m.get("transformedData"),_=r-p.top-p.bottom,x=i-p.left-p.right,w=Gi(u,this.id(),o),k=function getRadiusRange(e,t,n){var r=n.minOuterRadius,i=n.innerRadius,a=n.outerRadius,o=n.innerRadiusFixer;return[Math.max(i+o||0,r),a||Math.min(t,e)/2]}(x,_,{minOuterRadius:c,innerRadius:s,outerRadius:l,innerRadiusFixer:g}),C=this.axes().color,S=l||Math.min(_,x)/2,P=m.get("domain").radius,A=function rangeValueGetter(e){return function getRangeValue(e,t,n,r,i){var a=1,o=e.outerRadiusValue,u=e.sizeVal,c=i.domain(),s=i.getSize(u)/(c?i.range()[1]:i.config().value);return a*=(t[1]-t[0])/(n[1]-n[0]),(t[0]+(o-n[0])*a||r)*s}(e,k,P,S,v)},E=bf().innerRadius(s?Math.min(_/2,x/2,s):0).cornerRadius(f).padAngle(h).padRadius(d);this._chartWidth=x,this._chartHeight=_;var M=Eo(Ao(e),"g",[1],w[0]+"-group").classed(w[1]+"-group",!0).attr("transform","translate("+x/2+","+_/2+")"),O=[],T=0;return Eo(M,"g",b,""+w[0],{update:function tween(e){Eo(e,"path",function(e,t){return[{datum:e,index:t,arcFn:E,meta:{originalColor:C.getRawColor(e.colorVal),stateColor:{},colorTransform:{}}}]},w[0]+"-path").style("fill",function(e){return C.getColor(e.datum.colorVal)}).transition().duration(y.duration).attrTween("d",function(){for(var e=arguments.length,t=Array(e),n=0;n0&&e.forEach(function(e){var i=e[0].datum.startAngle,a=e[e.length-1].datum.endAngle,o=2*Math.PI*i/(2*Math.PI+i-a);e.forEach(function(e){var i=e.elem,a=e.datum;i.each(function(){var e=Ao(this);e.selectAll("path").transition().duration(t.duration).attrTween("d",function(){return function(e){var t=n(a);return a.outerRadius=t,r(ra()(a,{startAngle:o,endAngle:o,outerRadius:t})(e))}}).remove(),e.remove()})})})}(O,y,A,E),this}},{key:"getPointsFromIdentifiers",value:function getPointsFromIdentifiers(e){if(!this.data())return[];var t=e[0],n=e.slice(1,e.length),r=Ao(this.mount()).selectAll("path").data(),i=this.data().getFieldsConfig(),a=r.filter(function(e){var r=e.datum.data,a=e.datum.uid;return t.every(function(e,t){return e in i&&i[e].def.type===ir.FieldType.DIMENSION?-1!==n.findIndex(function(n){return n[t]===r[i[e].index]}):e!==nr.ROW_ID||-1!==n.findIndex(function(e){return e[t]===a})})})[0];if(a){var o=a.arcFn.centroid(a.datum);return[{x:o[0]+this._chartWidth/2,y:o[1]+this._chartHeight/2,width:2,height:2}]}return[]}}],[{key:"defaultConfig",value:function defaultConfig(){return yf}},{key:"formalName",value:function formalName(){return"arc"}}]),ArcLayer}(),xf=function drawText(e,t,n,r){var i=Ao(e).selectAll("g").data(t),a=i.enter().append("g").each(function(e){To(this,e.enter)}).merge(i),o=Lo(Ao(e),n.className),u=parseInt(o.fontSize,10);return r.setStyle(o),a.each(function(e){var t,n=Ao(this),i=e.update,a=e.text,o=e.color,c=e.textanchor,s=e.style,l=e.background;if(t=l.value){var f=l.padding,h=void 0,d=r.getOriSize(e.text),p=d.width,y=d.height,g=Eo(n,"rect",[1]);h="end"===c?p:"start"===c?0:p/2,To(g.node(),{x:i.x-h-f/2,y:i.y-u-f/2,width:p+f,height:y+f}),l&&Fo(g,{background:t})}var v=Eo(n,"text",function(e){return[e]}).text(a),m=v.node();s&&Fo(m,s),o&&Fo(m,{fill:o}),e.className&&v.classed(e.className,!0),To(m,i),v.attr("text-anchor",c)}),i.exit().remove(),i},wf={defClassName:"layer-text",classPrefix:"muze",className:"",transform:{type:"identity"},interaction:{highlight:[{type:"fill",intensity:[0,0,-15,0]}],fade:[{type:"fill",intensity:[0,0,15,0]}],focus:[{type:"fill",intensity:[0,0,15,0]}]},transition:{effect:"cubic",duration:1e3},encoding:{color:{},text:{value:"",background:{padding:10}}},states:{highlight:{className:"muze-layer-text-highlight"},fadeout:{className:"muze-layer-text-fadeout"},selected:{className:"muze-layer-text-selected"}}},kf=(n(27),function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function sliceIterator(e,t){var n=[],r=!0,i=!1,a=void 0;try{for(var o,u=e[Symbol.iterator]();!(r=(o=u.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){i=!0,a=e}finally{try{!r&&u.return&&u.return()}finally{if(i)throw a}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}()),Cf=function(){function defineProperties(e,t){for(var n=0;n4)}(r)?r:pa(r).size(i)(a),Eo(n,"path",function(e){return[e]}).attr("d",s)}else e.shape="circle",createShape(e,t)}(e,this)}),(t=c?t:t.transition().duration(c?0:i.duration)).attr("transform",function(e){return"translate("+e.update.x+","+e.update.y+")"}).each(function(e){var t=e.style,n=Ao(this);Xi(t,function(e){return n.style(e,t[e])}),n.attr("class",""+a),n.classed(e.className,!0)});var h=l.exit();c?h.remove():h.transition().ease(Wi[u]).duration(o).on("end",function(){Ao(this).remove()}).style("fill-opacity",0).style("stroke-opacity",0)},Af={defClassName:"layer-point",className:"",classPrefix:"muze",defColorStyle:"stroke",interaction:{highlight:[{type:"fill",intensity:[0,0,-20,0]}],fade:[{type:"fill",intensity:[0,0,20,0]}],focus:[{type:"fill",intensity:[0,0,20,0]}]},innerPadding:.1,nearestPointThreshold:10,transform:{type:"identity"},transition:{effect:"cubic",duration:1e3},encoding:{size:{value:30},color:{},shape:{value:"circle"},x:{},y:{},strokeOpacity:{value:.5},fillOpacity:{value:.5}},shapes:["circle","cross","diamond","square","star","wye","triangle"],sizes:[20,30,40,50,60,70]},Ef=(n(29),function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function sliceIterator(e,t){var n=[],r=!0,i=!1,a=void 0;try{for(var o,u=e[Symbol.iterator]();!(r=(o=u.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){i=!0,a=e}finally{try{!r&&u.return&&u.return()}finally{if(i)throw a}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}()),Mf=function(){function defineProperties(e,t){for(var n=0;n3&&void 0!==arguments[3]?arguments[3]:{},a=[],o=t.size,u=t.shape,c=t.color,s=t.x,l=t.y,f=o.field,h=o.value,d=u.field,p=s.field,y=l.field,g=n.size,v=n.shape,m=this.data().getFieldsConfig(),b=m[p]&&m[p].def.type===ir.FieldType.DIMENSION,_=m[y]&&m[y].def.type===ir.FieldType.DIMENSION,x=b?Bc.X:_?Bc.Y:null,w=c&&c.field,k=m[w]&&m[w].index,C=this._store.get("measurement"),S=m[d]&&m[d].index,P=m[f]&&m[f].index,A=n.color,E=i.offset,M=E.x,O=E.y,T=function _loop(i,o){var u=e[i],s=u._data,l=h instanceof Function?h(u,i):g.getSize(s[P]),f=v.getShape(s[S]),d=[Bc.X,Bc.Y].map(function(e){var r=null===u[e]?void 0:u[e],i=e===Bc.X?C.width:C.height;return t[e].field?n[e].getScaleValue(r):i/2}),p=Ef(d,2),y=p[0],m=p[1];y+=M,m+=O;var b=Wl({datum:u,index:i},{colorEncoding:c,colorAxis:A,colorFieldIndex:k}),_=b.color,w=b.rawColor,E={fill:_,stroke:_};if(!isNaN(y)&&!isNaN(m)){var T={enter:{x:y,y:m},update:{x:y,y:m},shape:f,size:Math.abs(l),meta:{stateColor:{},originalColor:w,colorTransform:{}},style:E,_data:s,_id:u._id,source:u._data,rowId:u._id};T.className=Xl(u,i,e,r),a.push(T),r.cachePoint(u[x],T)}},F=0,N=e.length;F=0?C:k))):(p=c===Nc||r[e]>=0?C:k,y=Math.abs(p-(c===Nc?S:r[e]>=0?k:C))),d=k}else p=0,y=f[i];return{enterSpace:g,enter:d,pos:p,space:y}}),jf=function resolveDimensions(e,t,n){var r={xAxis:n.x,yAxis:n.y},i=Nf("x",r,t,e),a=i.enterSpace,o=i.enter,u=i.pos,c=i.space,s=Nf("y",r,t,e),l=s.enterSpace;return{enter:{x:o,y:s.enter,width:a,height:l},update:{x:u,y:s.pos,width:c,height:s.space}}},If=function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function sliceIterator(e,t){var n=[],r=!0,i=!1,a=void 0;try{for(var o,u=e[Symbol.iterator]();!(r=(o=u.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){i=!0,a=e}finally{try{!r&&u.return&&u.return()}finally{if(i)throw a}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),Df=function(){function defineProperties(e,t){for(var n=0;n=k.x&&e<=k.width+k.x&&t>=k.y&&t<=k.height+k.y){c=w;break}c=null}var C=c&&c._data;return C&&(u=this.getIdentifiersFromData(C,c._id)),c?{dimensions:[c.update],id:u,layerId:this.id()}:c}},{key:"getPlotSpan",value:function getPlotSpan(){return this._plotSpan}}],[{key:"formalName",value:function formalName(){return"bar"}},{key:"defaultConfig",value:function defaultConfig(){return Ff}},{key:"defaultPolicy",value:function defaultPolicy(e,t){var n=rf.defaultPolicy(e,t),r=n.encoding.color.field,i=n.transform;return r&&(i.groupBy=r),n}}]),BarLayer}(),zf={defClassName:"layer-tick",className:"",classPrefix:"muze",interaction:{highlight:[{type:"stroke",intensity:[0,0,-15,0]}],fade:[{type:"stroke",intensity:[0,0,15,0]}],focus:[{type:"stroke",intensity:[0,0,15,0]}]},innerPadding:.1,transform:{type:"identity"},transition:{effect:"cubic",duration:1e3},encoding:{color:{},x:{},y:{},x0:{},y0:{},strokeOpacity:{value:.5},fillOpacity:{value:.5}},states:{highlight:{className:"muze-layer-tick-highlight"},fadeout:{className:"muze-layer-tick-fadeout"},selected:{className:"muze-layer-tick-selected"}}},Hf=function(e){var t=e.points,n=e.container,r=e.keyFn,i=e.className,a=Ao(n),o=a.selectAll("path").data(t,r),u=o.enter().append("path");return a.attr("class",i||""),u.each(function(e){var t=Ao(this),n=e.enter||{};Object.entries(n).forEach(function(e){return!isNaN(e[1])&&t.attr(e[0],e[1])})}),o.exit().remove(),o.merge(u).each(function(e){var t=Ao(this),n=e.update,r=e.style||{},i=void 0!==n.x0?n.x0:n.x,a=void 0!==n.y0?n.y0:n.y,o="M "+n.x+" "+n.y+" L "+i+" "+a;e.className&&t.classed(e.className,!0),t.attr("d",o),Object.entries(r).forEach(function(e){return t.style(e[0],e[1])})})},Vf=(n(33),function(){function defineProperties(e,t){for(var n=0;n3&&void 0!==arguments[3]?arguments[3]:{},i=[],a=Yl(n),o=a.xAxis,u=a.yAxis,c=this.data().getFieldsConfig(),s=this.encodingFieldsInf(),l=s.xField,f=s.yField,h=s.x0Field,d=s.y0Field,p=s.xFieldType,y=s.yFieldType,g=p===ir.FieldType.DIMENSION,v=y===ir.FieldType.DIMENSION,m=g?Bc.X:v?Bc.Y:null,b=t.color,_=b&&b.field,x=c[_]&&c[_].index,w=this._store.get("measurement"),k=n.color,C=r.offset,S=C.x,P=C.y,A=r.span,E=A.x,M=A.y,O=0,T=e.length;O0&&(n[0]=[].concat(field_sanitizer_toConsumableArray(n[0]),field_sanitizer_toConsumableArray(n[1])),n[1]=[]),{fields:n.map(function(e,t){return 1===t?r[t].concat(n[t]):n[t].concat(r[t])}),dimensions:[].concat(field_sanitizer_toConsumableArray(n[0]),field_sanitizer_toConsumableArray(n[1])),measures:[].concat(field_sanitizer_toConsumableArray(r[0]),field_sanitizer_toConsumableArray(r[1])),temporal:[].concat(field_sanitizer_toConsumableArray(i[0]),field_sanitizer_toConsumableArray(i[1])),categorical:[].concat(field_sanitizer_toConsumableArray(a[0]),field_sanitizer_toConsumableArray(a[1]))}}(i,n)}),r=Sh(n,2),i=r[0],a=r[1],o=i.fields,u=i.dimensions,c=i.measures,s=i.temporal,l=i.categorical,f=a.fields,h=a.dimensions,d=a.measures;return{rows:o,rowDimensions:u,rowMeasures:c,rowTemporalFields:s,rowCategoricalFields:l,columns:f,columnTemporalFields:a.temporal,columnCategoricalFields:a.categorical,columnDimensions:h,columnMeasures:d}},Eh=function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function sliceIterator(e,t){var n=[],r=!0,i=!1,a=void 0;try{for(var o,u=e[Symbol.iterator]();!(r=(o=u.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){i=!0,a=e}finally{try{!r&&u.return&&u.return()}finally{if(i)throw a}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),Mh=function(){function defineProperties(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:{},t=arguments[1],n=Jh(th,t.rows,e),r=Eh(n,2),i=r[0],a=r[1],o=Jh("column",t.columns,e),u=Eh(o,2),c=u[0],s=u[1];return this.axisFrom({row:a,column:s}),this.headerFrom({row:i,column:c}),this}}]),VisualEncoder}(),Th={linear:Qs,band:Js,temporal:nl,size:Ml,color:Cl,shape:jl},Fh={dimension:f.BAND,categorical:f.BAND,measure:f.LINEAR,temporal:f.TIME},Nh=function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function sliceIterator(e,t){var n=[],r=!0,i=!1,a=void 0;try{for(var o,u=e[Symbol.iterator]();!(r=(o=u.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){i=!0,a=e}finally{try{!r&&u.return&&u.return()}finally{if(i)throw a}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}();function encoder_helper_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t1?e.position="both":e.position=n.axisFrom()[a],r[o]=Ih(o,s[i],e,o===$f?l:f)}),r}},{key:"getFacetsAndProjections",value:function getFacetsAndProjections(e,t){for(var n=[],r=[],i=0,a=[],o=[],u=e[0],c=e[1],s=u.length,l=c.length,f=this.axisFrom(),h=0;hi)for(var g=i;g-1&&(r=[[b,b]],a.splice(_,1)),o.splice(0,1)}else{var x=a.length-1,w=a[x];r=[[w]];var k=Dh(o,w);k>-1&&(r=[[w,w]],o.splice(k,1)),a.splice(x,1)}return{facets:n=(n=[].concat(a,o)).filter(function(e,t,n){return t===n.findIndex(function(t){return t.toString()===e.toString()})}),projections:r}}},{key:"fieldSanitizer",value:function fieldSanitizer(e,t){return function get(e,t,n){null===e&&(e=Function.prototype);var r=Object.getOwnPropertyDescriptor(e,t);if(void 0===r){var i=Object.getPrototypeOf(e);return null===i?void 0:get(i,t,n)}if("value"in r)return r.value;var a=r.get;return void 0!==a?a.call(n):void 0}(CartesianEncoder.prototype.__proto__||Object.getPrototypeOf(CartesianEncoder.prototype),"fieldSanitizer",this).call(this,e,t)}},{key:"getRetinalFieldsDomain",value:function getRetinalFieldsDomain(e,t){var n=e.groupedModel,r={};for(var i in t)if({}.hasOwnProperty.call(t,i)){var a=t[i],o=a.field;if(!a.domain&&o){var u=Zh(n,o);r[o]=u}}return r}},{key:"serializeLayerConfig",value:function serializeLayerConfig(e){var t=[];return e.length&&e.forEach(function(e,n){var r=Gf.sanitizeLayerConfig(e);r.order=n,t.push(r)}),t}},{key:"getLayerConfig",value:function getLayerConfig(e,t){var n=[],r=e.columnFields,i=e.rowFields;return r.forEach(function(e){var r=e.toString();i.forEach(function(i){var a=[],o=i.toString(),u={x:{field:r},y:{field:o}},c=i.subtype(),s=function getDefaultMark(e,t){return"categorical"===e||"categorical"===t?"bar":"temporal"===e||"temporal"===t?"line":"point"}(e.subtype(),c),l=[{mark:s,def:{mark:s,encoding:u}}],f=function getLayerConfFromFields(e,t,n){return n.filter(function(n){var r,i,a,o=n instanceof Array?n:[n],u=(r=[]).concat.apply(r,encoder_helper_toConsumableArray(o.map(function(e){return e.encoding}).filter(function(e){return void 0!==e})));if(!u.length)return!0;var c=(i=[]).concat.apply(i,encoder_helper_toConsumableArray(u.map(function(e){return[e.x&&e.x.field,e.x0&&e.x0.field]}))).filter(function(e){return void 0!==e&&null!==e}),s=(a=[]).concat.apply(a,encoder_helper_toConsumableArray(u.map(function(e){return[e.y&&e.y.field,e.y0&&e.y0.field]}))).filter(function(e){return void 0!==e&&null!==e});if(!c.length&&!s.length)return!0;var l=!!c.length&&c.every(function(t){return-1!==e.indexOf(t)}),f=!!s.length&&s.every(function(e){return-1!==t.indexOf(e)});return c.length&&s.length?l&&f:l||f})}(e.getMembers(),i.getMembers(),t||[]);a=f.length?f.map(function(e){var t=na(na({},l[0].def),e),n=Gf.getSerializedConf(t.mark,t);return{mark:t.mark,order:t.order,def:n}}):l,n.push.apply(n,function cartesian_encoder_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);tt)for(var h=t;h0&&(e=na(e,t[0])),n.push(e)}),0===n.length&&(n=t),this.layers(n),n}},{key:"serializeLayerConfig",value:function serializeLayerConfig(e){var t=[];return e.length&&e.forEach(function(e){var n=Gf.getSerializedConf(e.mark,e);t.push({mark:e.mark,def:n})}),t}}],[{key:"type",value:function type(){return"polar"}}]),PolarEncoder}(),Hh=function(){function defineProperties(e,t){for(var n=0;n1&&void 0!==arguments[1]?arguments[1]:{},n=e.axisType,r=e.fieldsConfig,i=t.field,a=[],o=Th[n];return t.type=t.type?t.type:Qh(r,i||null),a.push(new o(t)),a}({axisType:e,fieldsConfig:t},n[e])}),r}},{key:"getLayerConfig",value:function getLayerConfig(e,t){var n=[];return t.forEach(function(t){var r=t;[nh,rh,ih].forEach(function(t){if(e[t]&&e[t].field){var n=r.def;r.def instanceof Array?n.forEach(function(n){n.encoding=n.encoding||{},!n.encoding[t]&&(n.encoding[t]={}),n.encoding[t].field=e[t].field}):(n.encoding=n.encoding||{},!n.encoding[t]&&(n.encoding[t]={}),n.encoding[t].field=e[t].field)}}),n.push(r)}),n}},{key:"setCommonDomain",value:function setCommonDomain(e){var t=e.domains,n=e.axes,r=e.encoding;return Object.entries(r).forEach(function(e){if(e[1]&&e[1].field){var r=e[0],i=e[1].field;i&&n[r].forEach(function(n){var r=t[i];!e[1].domain&&n.updateDomain(r)})}}),n}}],[{key:"type",value:function type(){return"retinal"}}]),RetinalEncoder}(),Uh=function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function sliceIterator(e,t){var n=[],r=!0,i=!1,a=void 0;try{for(var o,u=e[Symbol.iterator]();!(r=(o=u.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){i=!0,a=e}finally{try{!r&&u.return&&u.return()}finally{if(i)throw a}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),Wh=void 0;function group_utils_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t0?e[0].map(function(i,a){return new n({type:"header"},{labelManager:r}).source(function getHeaderText(e,t,n){var r="";if(t===n-1&&e.length>n){for(var i=t;i0&&void 0!==arguments[0]?arguments[0]:[];return new Vo(e)}([]),a=(i=i.data(n,r)).enter().append(t).merge(i);return i.exit()&&i.exit().remove(),a},nd=function getBorders(e,t){var n={top:!1,bottom:!1},r={left:!1,right:!1},i={top:!1,bottom:!1,left:!1,right:!1},a=e.rows,o=e.columns,u=e.values,c=Uh(a,2),s=c[0],l=c[1],f=Uh(o,2),h=f[0],d=f[1],p=t.fieldInfo(),y=p.rowDimensions,g=p.columnDimensions,v=p.rowTemporalFields,m=p.columnTemporalFields,b=p.columnMeasures,_=p.rowMeasures,x=y.length+g.length,w=_.length+b.length,k=v.length+m.length;if("polar"===t.constructor.type()){if(!x)return{showRowBorders:n,showColBorders:r,showValueBorders:i}}else if(!w&&!k&&x<=2)return{showRowBorders:n,showColBorders:r,showValueBorders:i};return n=function getRowBorders(e,t){var n={top:!1,bottom:!1};return(e.length>1||t.length>1)&&(n.top=!0,n.bottom=!0),n}(s,l),r=function getColumnsBorders(e,t){var n={left:!1,right:!1};return(e.length||t.length)&&(e[0]&&e[0].length>1||t[0]&&t[0].length>1)&&(n.left=!0,n.right=!0),n}(h,d),i=function getValueBorders(e,t){var n={top:!0,left:!0,bottom:!0,right:!0},r=[ah,oh],i=["top","bottom"];return e.forEach(function(e,t){e[0]&&e[0].length?n[r[t]]=!0:n[r[t]]=!1}),t.forEach(function(e,t){e.length?n[i[t]]=!0:n[i[t]]=!1}),n}([s,l],[h,d]),u.length>1&&(i.top=!0,i.bottom=!0),u.length&&u[0].length>1&&(i.left=!0,i.right=!0),{showRowBorders:n,showColBorders:r,showValueBorders:i}};function action_behaviour_map_defineProperty(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var rd=(action_behaviour_map_defineProperty(qh={},a.DRAG,{behaviours:[u.BRUSH],touch:!1}),action_behaviour_map_defineProperty(qh,a.HOVER,{behaviours:[u.HIGHLIGHT]}),action_behaviour_map_defineProperty(qh,a.LONGTOUCH,{behaviours:[u.SELECT],touch:!0}),action_behaviour_map_defineProperty(qh,a.TOUCHDRAG,{behaviours:[u.BRUSH],touch:!0}),action_behaviour_map_defineProperty(qh,a.CLICK,{behaviours:[u.SELECT],touch:!1}),qh),ad="config",od="data",ud="axes",cd="layerDef",sd="width",ld="height",fd="mount",hd="primaryXAxisUpdated",dd="primaryYAxisUpdated",pd="secondaryXAxisUpdated",yd="secondaryYAxisUpdated",gd="transform",vd="dataDomain",md="layersCreated",bd="fields",_d="timeDiffs",xd="layerAxisIndex";function src_helper_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t2&&void 0!==arguments[2]?arguments[2]:{},r=void 0,i=n.payload,a=n.selectionSet,o=n.propagationFields[t]||{},u=o.fields||[],c=o.append,s=i.criteria,l=e.context,f=l.cachedData()[0],h=l.id(),d=e.sideEffects(),p=e._behaviourEffectMap,y=a.mergedEnter.model,g=f.getFieldsConfig();i.sourceUnit=h,i.action=t,i.sourceCanvas=l.parentAlias();var v=e._propagationBehaviourMap[t]||t,m=[];null===s?r=null:Di(s)?(m=Object.keys(s||{}),r=y?y.project(m):null):(m=s[0],r=y?y.project(m):null);var b=l.facetByFields();if(null!==r&&u.length){var _=r.getData().schema.map(function(e){return e.name});r=function getModelWithFacetData(e,t){var n=e.getData(),r=n.schema,i=n.data,a=[],o=t[0].map(function(e){return{name:""+e,type:ir.FieldType.DIMENSION}}),u=t[1];return i.forEach(function(e){var t={};r.forEach(function(n,r){t[n.name]=e[r]}),o.forEach(function(e,n){t[e.name]=u[n]}),a.push(t)}),new ar.a(a,[].concat(data_propagator_toConsumableArray(r),data_propagator_toConsumableArray(o)))}(r,b),m=c?[].concat(data_propagator_toConsumableArray(_),data_propagator_toConsumableArray(u)):u,r=r.project(m)}var x=!1;m.length&&m.every(function(e){return g[e]&&g[e].def.type===ir.FieldType.MEASURE})&&(x=!0);var w=l.parentAlias();i.action=t;var k=e._actions.behavioural[v],C=!!k&&k.constructor.mutates(),S=function filterFn(e,t){var n=p[e.config.action],r=!e.config.groupId||n.some(function(e){return d[e.name||e].constructor.mutates()});return e.config.groupId!==t.groupId&&r},P=e._actions.behavioural[t],A=!!P&&P.constructor.mutates(),E={payload:i,action:t,criteria:r,isMutableAction:A,propagateInterpolatedValues:x,groupId:w,sourceId:A?w:h,filterFn:S,enabled:function enabled(e,n){return t===v||e.payload.sourceCanvas===n.context.parentAlias()}};f.propagate(r,E,!0),t!==v&&(E={payload:i,sourceId:C?w:h,criteria:r,isMutableAction:C,propagateInterpolatedValues:x,action:v,groupId:w,applyOnSource:t===v,enabled:function enabled(e,t){return e.payload.sourceCanvas!==t.context.parentAlias()},filterFn:S},f.propagate(r,E,!0,{filterImmutableAction:function filterImmutableAction(e,t){return e.groupId!==t.groupId}}))},Xd=function(){function defineProperties(e,t){for(var n=0;n1){var u=r[0].config();if("linear"===r[0].constructor.type()){if(u.alignZeroLine){r.forEach(function(e){return e.config({nice:!1})});var c=function getAdjustedDomain(e,t){var n=e[0]/(e[0]-t[0]),r=e[1]/(e[1]-t[1]),i=!1;return t[0]>0&&t[1]>0&&t[1]>0&&e[1]>0&&(i=!0,t[0]=0,t[1]=0),t[0]<0&&t[1]<0&&t[1]<0&&e[1]<0&&(i=!0,e[0]=0,e[1]=0),i||n===r||(n1&&void 0!==arguments[1]?arguments[1]:{},n=[],r=e;if(null===e)return[];var i=this.layers(),a=i.length;Di(e)&&(r=[Object.keys(e)],r=[].concat(visual_unit_toConsumableArray(r),visual_unit_toConsumableArray(function transposeArray(e){return e[0].map(function(t,n){return e.map(function(e){return e[n]})})}(Object.values(e)))));for(var o=0;o1&&void 0!==arguments[1]?arguments[1]:[]].map(function(e){return e.reduce(function(e,t){return e=[].concat(matrix_model_toConsumableArray(e),matrix_model_toConsumableArray(t.getMembers()))},[])})},ep=function createSelectedDataModel(e,t,n){return e.select(function(e){return t.every(function(t,r){return e[t].value===n[r]})})},tp=function uniqueKeyGenerator(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:[],i=t.facets,a=t.dataModel,o=t.uniqueValues;if(i[n+1]){var u=i[n];o.forEach(function(t){var o=a.select(function(e){return e[u].value===t}),c=Zh(o,i[n+1]);uniqueKeyGenerator(e,{facets:i,dataModel:o,uniqueValues:c},n+1,[].concat(matrix_model_toConsumableArray(r),[t]))})}else o.forEach(function(t){e.push([].concat(matrix_model_toConsumableArray(r),[t]))})},np=function projectRows(e,t){var n=t.allColumnProjections,r=t.rowProjections,i=t.optionalProjections;return r.length>0?r.map(function(t){var r=Jd(t,n),a=Zd(r,2),o=a[0],u=a[1];return e.project([].concat(matrix_model_toConsumableArray(o),matrix_model_toConsumableArray(u),matrix_model_toConsumableArray(i)))}):[e]},rp=function pushToMatrix(e,t){var n,r=[],i=e.matrix,a=e.datamodel,o=e.facetInfo,u=e.fieldInfo,c=u.rowProjections,s=u.colProjections,l=u.optionalProjections,f=o.rowIndex,h=o.columnIndex,d=c[f%c.length]||[];s.length>0?r=s.map(function(e,n){var r=Jd(e,d),i=Zd(r,2),u=i[0],c=i[1],p=a.project([].concat(matrix_model_toConsumableArray(u),matrix_model_toConsumableArray(c),matrix_model_toConsumableArray(l))),y={rowFields:d,columnFields:e},g={rowIndex:f,columnIndex:h*s.length+n};return t(p,{projections:y,indices:g},o)}):r=[t(a,{projections:{rowFields:d,columnFields:[]},indices:{rowIndex:f,columnIndex:h}},o)];i[f]=i[f]||[],(n=i[f]).push.apply(n,matrix_model_toConsumableArray(r))},ip=function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function sliceIterator(e,t){var n=[],r=!0,i=!1,a=void 0;try{for(var o,u=e[Symbol.iterator]();!(r=(o=u.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){i=!0,a=e}finally{try{!r&&u.return&&u.return()}finally{if(i)throw a}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}();function cell_creator_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t0?d.length:1):(a=g,o=p.length>0?p.length:1),s.length&&f===u&&l&&a.length){var h={axis:l,length:o,type:u},v=[];i<2?(h.keys=a,h.facetConfig=c.rows,v=up(h,r,t,n)):(h.facetConfig=c.columns,h.keys=a[0].map(function(e,t){return a.map(function(e){return e[t]})}),v=up(h,r,t,n)),r[u+"Headers"]=v}else r[u+"Headers"]=null}),r},sp=function computeMatrices(e,t){var n=e.resolver,r=e.datamodel,i=e.componentRegistry,a=e.encoders,o=t.globalConfig,u=t.selection,c=t.transform,s=o.autoGroupBy,l=n.dependencies().smartlabel,f=r.getFieldsConfig(),h=n.layerConfig(),d=n.registry(),p=n.horizontalAxis().fields,y=n.verticalAxis().fields,g=n.optionalProjections(t,h),v=n.getAllFields(),m={normalizedColumns:y,normalizedRows:p,facetsAndProjections:v,layers:h,fieldMap:f,otherEncodings:g,encoders:a,facetConfig:o.facetConfig||{},axisFrom:o.axisFrom||{},selection:u},b={GeomCell:n.getCellDef(d.GeomCell),AxisCell:n.getCellDef(d.AxisCell),BlankCell:n.getCellDef(d.BlankCell),TextCell:n.getCellDef(d.TextCell)},_=Yh(p),x=Yh(y);n.colCells({}),n.rowCells({}),n.datamodelTransform(c||{}),n.resetSimpleAxes();var w={exitCellMap:n.cacheMaps().entryCellMap,entryCellMap:new Map};n.cacheMaps(w);var k={config:o,suppliedLayers:a.simpleEncoder.serializeLayerConfig(n.layerConfig()),resolver:n,cell:b.GeomCell,encoder:a.simpleEncoder,newCacheMap:w,detailFields:t.detail},C=r.getFieldsConfig(),S=r;if(!s.disabled){var P=function extractFields(e,t){var n,r=Object.values(e).map(function(e){var t,n,r=(t=[]).concat.apply(t,group_utils_toConsumableArray(e));return(n=[]).concat.apply(n,group_utils_toConsumableArray(r.map(function(e){return e instanceof _h?e.getMembers():e})))});return(n=[]).concat.apply(n,group_utils_toConsumableArray(r).concat(group_utils_toConsumableArray(t)))}(v,function getFieldsFromSuppliedLayers(e,t){var n,r=[],i=e.map(function(e){return e.encoding||{}});return r=(r=[].concat(group_utils_toConsumableArray(r),[(n=[]).concat.apply(n,group_utils_toConsumableArray(i.map(function(e){return Object.values(e).map(function(e){return e.field})})))])).filter(function(e){return t[e]&&t[e].def.type===ir.FieldType.DIMENSION})}(k.suppliedLayers,r.getFieldsConfig())),A=P.filter(function(e){return C[e]&&C[e].def.type===ir.FieldType.DIMENSION}),E=s.measures;S=r.groupBy(A.length?A:[""],E).project(P)}var M=function getMatrixModel(e,t,n){var r=[],i=[],a=[],o=[],u=[],c=[],s=t.rowFacets,l=t.colFacets;if(t.colProjections.forEach(function(e){o.push.apply(o,matrix_model_toConsumableArray(e))}),t.allColumnProjections=o,s.length>0){var f=s[0].toString(),h=Zh(e,f);tp(i,{facets:s,dataModel:e,uniqueValues:h}),i.forEach(function(n){var i,a=Jd(s),o=Zd(a,1)[0],u=ep(e,o,n);c.push([s,n]),(i=r).push.apply(i,matrix_model_toConsumableArray(np(u,t)))})}else{var d;(d=r).push.apply(d,matrix_model_toConsumableArray(np(e,t)))}if(r=r.length>0?r:[[]],l.length>0){var p=l.map(function(e){return""+e}),y=p[0],g=Zh(e,y);tp(a,{facets:p,dataModel:e,uniqueValues:g}),r.forEach(function(r,i){c[i]=c[i]||[[],[]],a.forEach(function(a,o){u[i]=u[i]||[];var s=r instanceof ar.a?r:e,f=ep(s,p,a),h={matrix:u,datamodel:f,facetInfo:{rowFacets:c[i],colFacets:[l,a],rowIndex:i,columnIndex:o},fieldInfo:t};rp(h,n)})})}else r.forEach(function(r,i){c[i]=c[i]||[[],[]];var a={matrix:u,datamodel:r||e,facetInfo:{rowFacets:c[i],colFacets:[[],[]],rowIndex:i,columnIndex:0},fieldInfo:t};rp(a,n)});var v=a.length>0?a[0].map(function(e,t){return a.map(function(e){return e[t]})}):a;return{matrix:u,rowKeys:i,columnKeys:v}}(S,v,n.valueCellsCreator(k));n.cacheMaps().exitCellMap.forEach(function(e){e.remove()}),n.cacheMaps().exitCellMap.clear(),n.valueMatrix(M.matrix),n.createUnits(i,t);var O=function mutateAxesFromMap(e,t){var n=null,r=null,i=e.xAxesMap,a=e.yAxesMap,o=t.x,u=t.y;return o&&o.forEach(function(e){var t=i.get(e);(n=n||[]).push(t)}),u&&u.forEach(function(e){var t=a.get(e);(r=r||[]).push(t)}),{xAxes:n,yAxes:r}}(n.cacheMaps(),n.axes()),T=O.xAxes,F=O.yAxes;n.axes({x:T,y:F});var N=function generateMatrices(e,t,n,r){var i=e.unitHeight,a=e.unitWidth,o=e.facetsAndProjections,u=e.normalizedRows,c=e.normalizedColumns,s=e.selection,l=e.axisFrom,f=e.facetConfig,h=e.encoders,d=cp({fields:{rows:u,columns:c},matrices:t,facetsAndProjections:o,selection:s,axisFrom:l,facetConfig:f,encoders:h},n,r),p=d.columnsPrimary,y=d.columnsSecondary,g=d.rowsPrimary,v=d.rowsSecondary,m=d.leftHeaders,b=d.topHeaders,_=d.bottomHeaders,x=d.rightHeaders,w=[g,v,p,y].map(function(e){return e?e.getObjects():[]}),k=ip(w,4),C=k[0],S=k[1],P=k[2],A=k[3],E=[m,x].map(function(e){return e?e.getObjects().map(function(e){return e.getObjects()}):[]}),M=ip(E,2),O=M[0],T=M[1],F=O.length?O.map(function(e,t){return C[t]=C[t]?[C[t]]:[],[].concat(cell_creator_toConsumableArray(e),cell_creator_toConsumableArray(C[t]))}):C?C.map(function(e){return[e]}):[],N=S.length?S.map(function(e,t){return[e].concat(cell_creator_toConsumableArray(T[t]||[]))}):T.length?T.map(function(e){return[].concat(cell_creator_toConsumableArray(e))}):[],j=[];b&&b.getObjects().forEach(function(e){e.getObjects().forEach(function(e,t){j[t]=j[t]||[],j[t].push(e)})});P.length&&j.push(P);var I=[];A.length&&I.push(A);var D=I.length;_&&_.getObjects().forEach(function(e){e.getObjects().forEach(function(e,t){I[t+D]=I[t+D]||[],I[t+D].push(e)})});if(!F.length&&!N.length){var L=new n.BlankCell;L.setAvailableSpace(a,i),F=[[L]]}if(!(j.length||I.length&&I[0].length)){var R=new n.BlankCell;R.setAvailableSpace(a,i),I=[[R]]}return{rows:[F,N],columns:[j,I],selectionObj:d}}(m,{valuesMatrix:M,axesMatrix:n.axes()},b,l),j=N.rows,I=N.columns,D=N.selectionObj;return n.rowMatrix(j),n.columnMatrix(I),{rows:n.rowMatrix(),columns:n.columnMatrix(),values:n.valueMatrix(),isColumnSizeEqual:x,isRowSizeEqual:_,selection:D,dataModels:{groupedModel:S,parentModel:r}}},lp=function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function sliceIterator(e,t){var n=[],r=!0,i=!1,a=void 0;try{for(var o,u=e[Symbol.iterator]();!(r=(o=u.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){i=!0,a=e}finally{try{!r&&u.return&&u.return()}finally{if(i)throw a}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),fp=function(){function defineProperties(e,t){for(var n=0;n0?d[0].map(b):[],right:p.length>0?p[0].map(b):[]},w=[ah,oh].map(function(e){return g.map(function(t,n){return n===g.length-1?_[e]:x[e]})}),k=lp(w,2),C=k[0],S=k[1];if(0===g.length){var P=[ah,oh].map(function(e){return v.map(function(t,n){return 0===n?_[e]:x[e]})}),A=lp(P,2);r=A[0],i=A[1]}else r=v.map(function(){return d.length>0?d[0].map(b):[]}),i=v.map(function(){return p.length>0?p[0].map(b):[]});return s.notify({client:[C,S,r,i],action:"initialized",formalName:"facet-headers"}),{topLeft:C,topRight:S,bottomLeft:r,bottomRight:i}}},{key:"getMatrices",value:function getMatrices(e,t,n,r){return sp({datamodel:e,componentRegistry:n,encoders:r,resolver:this},t)}}]),MatrixResolver}(),dp=function(){function defineProperties(e,t){for(var n=0;n3&&void 0!==arguments[3]?arguments[3]:{},i=void 0,a=e.context.constructor.type(),o=r.payload,u=e.context.data(),c=e.context.metaData(),s=c.getData().schema[0].type,l={},f=e.context._id;l.action=Pp[t]||t,l.sideEffects=Ep[t],l.sourceCanvas=e.context.canvasAlias();var h=e._actions.behavioural[l.action].constructor.mutates();if(null===o.criteria)i=null;else{var d=n.mergedEnter,p=u.filter(function(e){return-1!==d.uids.indexOf(e.id)}).map(function(e){return e.value});if("step"===a||"discrete"===a&&"measure"===s){var y=Object.keys(o.criteria||{})[0];i=(p=u.filter(function(e){return-1!==d.uids.indexOf(e.id)}).map(function(e){return e.range})).length?c.select(function(e){for(var t=!1,n=0;n=p[n][0]&&e[y].value<=p[n][1]);n++);return t},{saveChild:!1}):null}else"gradient"===a?i=ca(c,o.criteria):p.length?i=function assembleModelFromIdentifiers(e,t){var n=[],r=void 0,i=e.getFieldsConfig();return t.length?function(){for(var e=t[0],a=e.length,o=0;o=s+l?[i.invert(s+l-c),i.invert(s+l)]:f-l1&&void 0!==arguments[1]?arguments[1]:{},i=t.config().classPrefix;e.mergedEnter.length||e.mergedExit.length?(n(e.mergedExit,r.className||i+"-legend-brighten",!1),n(e.mergedExit,r.className||i+"-legend-fadeout",!0),n(e.mergedEnter,r.className||i+"-legend-fadeout",!1)):n(e.completeSet,r.className||i+"-legend-fadeout",!1)},brighten:function brighten(e){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},i=t.config().classPrefix;e.mergedEnter.length||e.mergedExit.length?(n(e.mergedEnter,r.className||i+"-legend-brighten",!0),n(e.mergedExit,r.className||i+"-legend-brighten",!1)):n(e.completeSet,r.className||i+"-legend-brighten",!1)}}},Vp=function(){function defineProperties(e,t){for(var n=0;n2&&void 0!==arguments[2]?arguments[2]:{};(0,this._strategies[n.strategy||this._strategy])(e,this)}}],[{key:"formalName",value:function formalName(){return"highlighter"}}]),LegendHighlighter}(),Wp={config:{sanitization:function sanitization(e,t){return na(e._config||{},t)}},data:{},fieldName:{},legendContainer:{},measurement:{sanitization:function sanitization(e,t){var n=na(e._measurement,t);return["padding","border","margin"].forEach(function(e){n[e]=Math.min(n[e]>0?n[e]:0,.1*n.maxWidth,.1*n.maxHeight)}),n}},logicalSpace:{},metaData:{},range:{sanitization:function sanitization(e,t){return e.scale().range(t),e.resetLogicalSpace(),e.store().commit("range",t),t}},scale:{},smartTicks:{},store:{},title:{sanitization:function sanitization(e,t){return na(e._title||{},t)}}},qp="horizontal",Gp="vertical",Yp={height:30,width:30,maxWidth:1/0,maxHeight:1/0,padding:2,margin:2,border:1},Xp={text:"",orientation:function orientation(e){return"left"===e||"right"===e?"left":"center"}},Kp={classPrefix:"muze",formatter:{bounds:{lower:"less than",upper:"more than"}},item:{text:{orientation:"right",width:10,formatter:function formatter(e){return e}},icon:{className:"legend-icon",height:20,width:20,color:"rgba(0,0,0,.5)",type:"square"}}},$p=function ICON_MAP(e){return e&&"string"==typeof e?pa(e):e};function legend_helper_defineProperty(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var Qp=function getScaleInfo(e){var t=e.constructor.type();return{scaleType:t,domain:e.uniqueValues(),steps:e.config().stops||1,scaleFn:Mp[t]}},Zp=function getInterpolatedData(e,t){for(var n=[],r=ia()(e[0],e[1]),i=0;i<=t;i++)n[i]=r(i/t);return n},Jp=function getDomainBounds(e,t,n){var r,i=t.scaleFn,a=t.scaleType,o=t.scale,u=n.domain,c=n.domainBounds,s=n.domainLeg,l=n.steps,f=u["lower"===e?0:u.length-1],h=l["lower"===e?0:l.length-1];return legend_helper_defineProperty(r={},a,"size"===a?o[i](f)*o.getScaleFactor():o[i](f)),legend_helper_defineProperty(r,"value",c[e]),legend_helper_defineProperty(r,"id","lower"===e?0:s.length+2),legend_helper_defineProperty(r,"range",[f,h]),r},ey=function(){function defineProperties(e,t){for(var n=0;n0?1.25*h.height:0,p=h.width,y=this.getLabelSpaces(s,c),g=function computeItemSpaces(e,t,n){var r=0,i=0,a={width:0,height:0},o=t.effPadding,u=t.titleWidth,c=t.labelSpaces,s=t.titleHeight,l=t.maxWidth,f=e.item,h=e.align,d=f.icon,p=f.text.orientation,y=[],g=[],v=0;return c.forEach(function(e,t){var c={width:0,height:0},s={width:0,height:0},l=n[t]||{};"left"===p||"right"===p?(e.width+=o,s.width=(l.size?2*Math.sqrt(l.size/Math.PI):d.width)+o,v=Math.max(s.width,v),c.width=e.width+v,e.height=Math.max(e.height,d.height)+o,s.height=e.height,c.height=e.height):(e.width=Math.max(e.width,l.size?2*Math.sqrt(l.size/Math.PI):d.width)+o,s.width=e.width,c.width=e.width,v=Math.max(s.width,v),e.height+=o,s.height=d.height+o,c.height=e.height+s.height),"horizontal"===h?r=Math.max(r,c.height):(r+=c.height,i=Math.max(i,c.width,u)+o),a={width:Math.max(c.width,a.width),height:Math.max(c.height,a.height)},y.push(c),g.push(s)}),y.forEach(function(e,t){"horizontal"===h?(e.height=r,g[t].width=v,"left"===p||"right"===p?(c[t].height=r,g[t].height=r,y[t].width=c[t].width+v):(c[t].width=v,y[t].width=v,c[t].width=v),i=Math.max(i+y[t].width,u)):(e.width=Math.max(i,l),"top"===p||"bottom"===p?(c[t].width=i,g[t].width=i,v=i):(g[t].width=v,y[t].width=c[t].width+v,c[t].width=a.width-v,i=Math.max(i,e.width,u)+o))}),{totalHeight:r+=s+o,totalWidth:i,itemSpaces:y,iconSpaces:g,maxItemSpaces:a,maxIconWidth:v}}(this.config(),{effPadding:s,titleWidth:p,labelSpaces:y,titleHeight:d,maxWidth:r,maxHeight:i},this.data()),v=g.totalHeight,m=g.totalWidth,b=g.itemSpaces,_=g.iconSpaces,x=g.maxItemSpaces,w=g.maxIconWidth;return this.measurement({width:Math.max(m,t)+f+l,height:Math.max(v,n)+f+l,labelSpaces:y,iconSpaces:_,itemSpaces:b,maxItemSpaces:x,maxIconWidth:w,titleSpaces:{width:Math.min(r,this.measurement().width)-f-l,height:d}}),this}},{key:"getTitleSpace",value:function getTitleSpace(){return this._labelManager.setStyle(Lo(Ao("body"),this.config().classPrefix+"-legend-title")),this._labelManager.getOriSize(this.title().text?this.title().text:"")}},{key:"renderTitle",value:function renderTitle(e){var t=this.measurement(),n=t.titleSpaces,r=t.border,i=t.padding;return function titleCreator(e,t,n,r){return Eo(e,"div",[1],r.classPrefix+"-legend-title").style("width","100%").style("height",n.height+"px").style("padding-left",n.padding+"px").style("padding-right",n.padding+"px").style("border-bottom-width",n.border+"px").style("text-align",t.orientation instanceof Function?t.orientation(r.position):t.orientation).text(t.text).node()}(e,this.title(),{height:n.height,border:r,padding:i},this.config())}},{key:"render",value:function render(){var e=this.firebolt(),t=this.config().classPrefix,n=this.measurement(),r=n.maxWidth,i=n.maxHeight,a=n.width,o=n.height,u=n.margin,c=n.border,s=Eo(Ao(this.mount()),"div",[1],t+"-legend-box");return s.classed(t+"-legend-box-"+this._id,!0),s.style("float","left"),s.style("width",Math.min(r,a)-2*u+"px").style("height",Math.min(i,o)-2*u+"px").style("margin",u+"px").style("border-width",c+"px"),this.legendContainer(s.node()),this.renderTitle(s),e.createSelectionSet(this.data().map(function(e){return e.id})),s}},{key:"getCriteriaFromData",value:function getCriteriaFromData(e){var t=this.fieldName();return"measure"===this.metaData().getData().schema[0].type?function simple_legend_defineProperty(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}({},t,e.range):[[t],[e.value]]}}],[{key:"create",value:function create(e){return new SimpleLegend(e)}},{key:"defaultConfig",value:function defaultConfig(){return Kp}},{key:"defaultMeasurement",value:function defaultMeasurement(){return Yp}}]),SimpleLegend}();function position_config_defineProperty(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var oy=(position_config_defineProperty(ty={},"horizontal",{datasets:function datasets(e){return{row:[1],column:e}},itemContainerMeasures:function itemContainerMeasures(e){var t=e.itemSpaces;return{row:{width:e.width+"px",padding:"0px"},column:{width:function width(e,n){return t[n].width+"px"},padding:"0px"}}},getStepSpacesInfo:function getStepSpacesInfo(e){var t=e.maxItemSpaces;return{iconHeight:e.height,iconWidth:t.width,stepPadding:{horizontal:!0,vertical:!1}}}}),position_config_defineProperty(ty,"vertical",{datasets:function datasets(e){return{row:e,column:function column(e){return[e]}}},itemContainerMeasures:function itemContainerMeasures(e,t){var n=e.width;return{row:{width:n+"px",padding:t.padding+"px"},column:{width:n+"px",padding:"0px"}}},getStepSpacesInfo:function getStepSpacesInfo(e){var t=e.maxItemSpaces,n=e.width;return{iconHeight:t.height,iconWidth:n,stepPadding:{horizontal:!1,vertical:!0}}}}),ty),uy=(position_config_defineProperty(ny={},"left",oy.vertical),position_config_defineProperty(ny,"right",oy.vertical),position_config_defineProperty(ny,"top",oy.horizontal),position_config_defineProperty(ny,"bottom",oy.horizontal),ny),cy=(position_config_defineProperty(ry={},"left","end"),position_config_defineProperty(ry,"right","start"),position_config_defineProperty(ry,"top","center"),position_config_defineProperty(ry,"bottom","center"),ry),sy=(position_config_defineProperty(iy={},"left",[Op,"shape"]),position_config_defineProperty(iy,"right",["shape",Op]),position_config_defineProperty(iy,"top",[Op,"shape"]),position_config_defineProperty(iy,"bottom",["shape",Op]),iy),ly=function createLegendSkeleton(e,t,n,r){var i,a,o,u,c=e.measurement(),s=c.margin,l=c.border,f=c.titleSpaces,h=c.width,d=c.height,p=c.maxWidth,y=c.maxHeight;a=d-(f.height+2*s+2*l),i=h-(2*s+2*l),o=y-(f.height+2*s+2*l),u=p-(2*s+2*l);var g=Eo(t,"div",[1],n+"-legend-body");return g.select("."+n+"-legend-overflow").remove(),u&&u4)}(u)?u:$p(u).size(o)(),Eo(a,"path",function(e){return[e]}).attr("d",l)}}return e[1]="circle",createShape(e,t,"circle")}(n,Eo(l,"g",[n[1]],i+"-legend-icon"),n[3]?"circle":"square",o,a).attr("transform","translate("+(u/2-c)+" "+a/2+")").attr("fill",n[2]||s):Eo(l,"rect",[n[1]],i+"-legend-icon").attr("x",0).attr("y",0).attr("width",u).attr("height",a).attr("fill",n[2]||s)},py=function(){function defineProperties(e,t){for(var n=0;na[a.length-1]&&t.push(i[1])):t=Zp(i,a-1),(t=[].concat(gradient_legend_toConsumableArray(new Set(t))).sort(function(e,t){return e-t})).map(function(n,i){var a,u=t[i];return gradient_legend_defineProperty(a={},r,"size"===r?e[o](n)*e.getScaleFactor():e[o](Math.floor(n))),gradient_legend_defineProperty(a,"value",+u.toFixed(2)),gradient_legend_defineProperty(a,"id",i),a}).filter(function(e){return null!==e.value})}},{key:"getLabelSpaces",value:function getLabelSpaces(e){this.config({item:{text:{orientation:this.config().position}}});var t=function createAxis(e){var t=e.data(),n=e.config().align,r=e._cells.AxisCell,i=new Qs({id:"legend-"+e._id,orientation:n===Gp?"right":"bottom",style:e._computedStyle,nice:!1,showAxisName:!1,tickValues:t.map(function(e){return e.value}),fixedBaseline:!1},{labelManager:e._labelManager});return i.domain(gy(t)),i.range([1,1]),(new r).source(i).config({margin:{left:0,bottom:0,top:0,right:0}})}(this),n=t.getLogicalSpace(),r={width:n.width-e,height:n.height-e},i=t.source().domain().length,a=new Array(i).fill(r);return this.axis(t),a}},{key:"getDrawingContext",value:function getDrawingContext(){return{svgContainer:this._legendGradientSvg}}},{key:"render",value:function render(){var e=this.firebolt(),t=function get(e,t,n){null===e&&(e=Function.prototype);var r=Object.getOwnPropertyDescriptor(e,t);if(void 0===r){var i=Object.getPrototypeOf(e);return null===i?void 0:get(i,t,n)}if("value"in r)return r.value;var a=r.get;return void 0!==a?a.call(n):void 0}(GradientLegend.prototype.__proto__||Object.getPrototypeOf(GradientLegend.prototype),"render",this).call(this,this.mount());return function renderGradient(e,t){var n,r,i=e.config(),a=i.align,o=i.classPrefix,u=i.item,c=e.data(),s=vy(t,o,c),l=s.legendContainer,f=s.legendGradSvg,h=s.legendGradCont,d=s.linearGradient,p=s.legendRect,y=e.axis().source().getAxisDimensions().tickLabelDim,g=e.measurement(),v=g.padding,m=g.margin,b=g.border,_=g.titleSpaces,x=g.maxHeight,w=g.maxWidth,k=g.height,C=g.width,S={};n=Math.floor(k-(_.height+2*m+2*b)),r=Math.floor(C-(2*m+2*b)),a===qp?(S.height=u.icon.height,S.width=r-2*v-y.width/2,d.attr("x2","100%").attr("y1","0%"),h.attr("transform","translate( "+y.width/2+" 0)"),my(e,l,n-u.icon.height-v,r-2*v-1),l.classed(o+"-overflow-x",C>w),Mo(l,{height:k+"px",width:Math.min(C,w)+"px",padding:v+"px"}),p.attr("height",S.height),p.attr("width",S.width-y.width/2)):(S.height=n-2*v-y.height/2,S.width=u.icon.width,d.attr("x2","0%").attr("y1","100%"),h.attr("transform","translate(0 "+y.height/2+")"),my(e,l,n-2*v-1,r-u.icon.width-2*v),l.classed(o+"-overflow-y",k>x),Mo(l,{height:Math.min(k,x)+"px",width:C+"px",padding:v+"px"}),p.attr("height",S.height-y.height/2),p.attr("width",S.width)),Mo(f,{height:S.height+"px",width:S.width+"px"}),Mo(p,{fill:"url(#linear-gradient)"}),f.attr("height",S.height),f.attr("width",S.width),e.measurement({gradientDimensions:S}),e._legendGradientSvg=f}(this,t),t.selectAll("div").style("float","left"),e.mapActionsAndBehaviour(),e.createSelectionSet(this.data().map(function(e){return e.id})),t}},{key:"getCriteriaFromData",value:function getCriteriaFromData(e){return[[this.fieldName()],[e.value]]}}],[{key:"create",value:function create(e){return new GradientLegend(e)}},{key:"type",value:function type(){return"gradient"}}]),GradientLegend}(),xy=function(){function defineProperties(e,t){for(var n=0;na[a.length-1]&&(c.upper=[u.bounds.upper+" "+a[a.length-1]])):t=Zp(i,a),t=(t=[].concat(step_legend_toConsumableArray(new Set(t))).sort(function(e,t){return e-t})).map(function(n,i){var a,u=null;return i0&&void 0!==arguments[0]?arguments[0]:{},t=this._registrableComponents,n=na(na({},function defaultPolicy(e){var t=e.map(function(e){return e.alias()});return{behaviours:{"*":function _(e){var n=e.sourceCanvas;return!n||-1!==t.indexOf(n)}}}}(t)),e);return t.forEach(function(e){e.firebolt().crossInteractionPolicy(n)}),this}}]),ActionModel}()),Ny={classPrefix:"muze",interaction:{sideEffect:"individual"},legend:{position:"right",color:{show:!0,padding:2,margin:2,border:1,height:30,width:30},shape:{show:!0,padding:2,margin:2,border:1,height:30,width:30},size:{show:!0,padding:2,margin:2,border:1,height:30,width:30}},showHeaders:!1,minWidth:100,minHeight:100,border:{style:"solid",color:"#d6d6d6",width:2,collapse:!0,spacing:0},autoGroupBy:{disabled:!1}},jy={data:{value:null,meta:{typeCheck:function typeCheck(e){return e instanceof ar.a}}},width:{value:0,meta:{sanitization:Qi,typeCheck:Number.isInteger}},height:{value:0,meta:{sanitization:Qi,typeCheck:Number.isInteger}},minUnitWidth:{value:50,meta:{sanitization:Qi,typeCheck:Number.isInteger}},minUnitHeight:{value:50,meta:{sanitization:Qi,typeCheck:Number.isInteger}},config:{value:null,meta:{typeCheck:"constructor",typeExpected:"Object",sanitization:function sanitization(e,t){var n=na({},t),r=na(n,Ny);return na(r,e)}}}},Iy="width",Dy="height",Ly="top",Ry="left",By="right",zy="bottom",Hy="center",Vy="rowLeft",Uy="rowRight",Wy="colBottom",qy="colTop",Gy="rowSpan",Yy="colSpan",Xy="rowRoot",Ky="columnRoot",$y=function(){function defineProperties(e,t){for(var n=0;n1)return e;var f=o[t-1];if(f&&f.valueOf()===e.valueOf()){var h=n[r-1];return h?h[t].valueOf()===h[t-1].valueOf()?null:e:null}return e}return e},ag=function calcRowSpan(e,t,n,r){var i=1;if(!e||"string"!=typeof e.valueOf())return 1;for(var a=!1;!a;)n[r+i]&&null===n[r+i][t]?i+=1:a=!0;return i},og=function calcColSpan(e,t,n,r){var i=1;if(!e||"string"!=typeof e.valueOf())return 1;for(var a=!1;!a;)null===n[r][t+i]?i+=1:a=!0;return i},ug=function mask(e,t){return e.map(function(n,r){if(t===Vy||t===Uy){for(var i=n.map(function(n,i){return ig(n,i,e,r,t)}),a=[],o=n.length-i.length,u=0;u1&&r.setAvailableSpace(0,r.availHeight()),Ao(this).style("height",r.availHeight()+"px"),n}),l.each(function(e){e.placeholder&&e.placeholder.render(this)}).exit().each(function(e){e.placeholder&&e.placeholder.remove()}),applyBorders(l,r.border,n,a)}})}function utils_defineProperty(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function utils_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t0?e[0]:e[1];return n?(r=e[0].length>0?[].concat(utils_toConsumableArray(e[0])):[],r=e[1].length>0?[].concat(utils_toConsumableArray(r),utils_toConsumableArray(e[1])):r):r=r.map(function(t,n){var r=[];return e[0].length>0&&(r=[].concat(utils_toConsumableArray(e[0][n]))),e[1].length>0&&(r=[].concat(utils_toConsumableArray(r),utils_toConsumableArray(e[1][n]))),r}),r},fg=function computeLogicalSpace(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments[1],n=arguments[2],r=t.isTransposed,i=void 0!==r&&r,a=t.unitMeasures,o=function getMeasureInfo(e){return e?{firstMeasure:Dy,secondMeasure:Iy}:{firstMeasure:Iy,secondMeasure:Dy}}(i),u=o.firstMeasure,c=o.secondMeasure,s=e.values,l=function getMinMeasures(e,t){return e?{height:0,width:t.width}:{height:t.height,width:0}}(i,a);if(s[0].key){var f,h=(utils_defineProperty(f={},u,0),utils_defineProperty(f,c,0),f);return s.forEach(function(e){var r=computeLogicalSpace(e,t,n);h[u]=Math.max(h[u],r[u],l[u]),h[c]+=+r[c]}),e.space=h,h}return function getLogicalSpace(e,t,n){var r,i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:[],a=t.firstMeasure,o=t.secondMeasure,u=0,c=0;return e.values.forEach(function(t){var r,s=0,l=0;t.forEach(function(e,t){e.logicalSpace(null);var r=e.getLogicalSpace();l=Math.max(l,+r[o],n[o]),i[t]=Math.max(i[t]||0,r[a]),s+=+i[t]}),c+=l,u=Math.max(u,s),e.space=(utils_defineProperty(r={},o,Math.ceil(c)),utils_defineProperty(r,a,Math.ceil(u)),r)}),utils_defineProperty(r={},o,c),utils_defineProperty(r,a,u),r}(e,{firstMeasure:u,secondMeasure:c},l,n)},hg=function extraCellsRemover(e,t,n){return e.slice(t,-n)},dg={config:{sanitization:function sanitization(e,t){return na(e._config||{},t)}},maxMeasures:{},availableSpace:{},logicalSpace:{}},pg={distribution:[],classPrefix:"muze",isDistributionEqual:!0,unitMeasures:{height:100,width:100,border:1},isTransposed:!1,facet:"primary",extraCellLengths:[]},yg=function(){function defineProperties(e,t){for(var n=0;n1&&void 0!==arguments[1]?arguments[1]:{};!function visual_matrix_classCallCheck(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,VisualMatrix),this._lastLevelKey=0,this._primaryMatrix=e[0]||[],this._secondaryMatrix=e[1]||[],this._maxMeasures=[],this._availableSpace={},Ji(this,dg);var n=Object.assign({},this.constructor.defaultConfig());this.config(na(n,t)),this._breakPointer=this.config().isTransposed?e[0].length:e[0].length>0?e[0][0].length:0,this._layoutMatrix=lg([e[0]||[],e[1]||[]],this.config()),this._tree={key:this.config().isTransposed?Ky:Xy,values:this.createTree()},this._logicalSpace=this.setLogicalSpace()}return yg(VisualMatrix,[{key:"primaryMatrix",value:function primaryMatrix(){return arguments.length?this:this._primaryMatrix}},{key:"secondaryMatrix",value:function secondaryMatrix(){return arguments.length?this:this._secondaryMatrix}},{key:"tree",value:function tree(){return arguments.length?this:this._tree}},{key:"createTree",value:function createTree(){var e=function createTree(e){var t={},n=0,r="primary",i=cg(),a=[],o=e._layoutMatrix,u=e.primaryMatrix(),c=e.secondaryMatrix(),s=e.config(),l=s.isTransposed,f=s.breakPage;if(l){if(r=0===u.length?"primary":0===c.length?"secondary":u.length>=c.length?"primary":"secondary",u.length>0){for(var h=0;h0){for(var d=u.length,p=c.length-1;p>0;p--)a.push(p+d);a.push(d),"primary"===r&&(n=d)}var y;a.forEach(function(e){var t=-1;return i.key(function(n){return t++,n[e].valueOf()+"-"+sg(t,f)})}),y=o[0].map(function(e,t){return o.map(function(e){return e[t]})}),t=i.entries(y)}else{if(r=0===u.length?"primary":0===c.length?"secondary":u.length>=c.length?"primary":"secondary",u.length>0){for(var g=0;g0){for(var v=u.length>0?u[0].length:0,m=c[0].length-1;m>0;m--)a.push(m+v);a.push(v),"primary"===r&&(n=v)}else n=u.length>0?u[0].length-1:0;a.forEach(function(e){var t=-1;return i.key(function(n){return t++,n[e].valueOf()+"-"+sg(t,f)})}),t=i.entries(o)}return{tree:t,lastLevelKey:n}}(this),t=e.tree,n=e.lastLevelKey;return this._lastLevelKey=n,t}},{key:"setLogicalSpace",value:function setLogicalSpace(){var e=this.config().isTransposed,t=this.tree();return function createMatrixEachLevel(e,t){if(e.values[0].key){var n=[];return e.values.forEach(function(e){t?createMatrixEachLevel(e,t).forEach(function(e,t){var r;n[t]=n[t]||[],(r=n[t]).push.apply(r,utils_toConsumableArray(e))}):n.push.apply(n,utils_toConsumableArray(createMatrixEachLevel(e,t)))}),e.matrix=n,n}return e.matrix=t?e.values[0].map(function(t,n){return e.values.map(function(e){return e[n]})}):e.values,e.matrix}(t,e),fg(t,this.config(),this.maxMeasures())}},{key:"getLogicalSpace",value:function getLogicalSpace(){return this.logicalSpace()}},{key:"setAvailableSpace",value:function setAvailableSpace(e,t){this.availableSpace({width:e,height:t});var n=this.tree(),r=this.populateMaxMeasures(Dy,n),i=this.populateMaxMeasures(Iy,n),a=this.calculateDepth(i,r);return this.viewableMatrix=this.createViewPortMatrix(a),this.viewableMeasures=this.redistribute(this.viewableMatrix,e,t),this}},{key:"populateMaxMeasures",value:function populateMaxMeasures(e,t){var n=this,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:[];if(i[r]=Math.max(i[r]||0,t.space[e]),t.values){var a=r+1;t.values.forEach(function(t){t.space&&(i=n.populateMaxMeasures(e,t,a,i))})}return i}},{key:"calculateDepth",value:function calculateDepth(e,t){var n=void 0,r=void 0,i=this.availableSpace(),a=i.height,o=i.width;for(n=0;n0&&void 0!==arguments[0]?arguments[0]:[],t=arguments[1],n=arguments[2],r=arguments[3],i=r._breakPointer,a=r.config().isTransposed,o=n.tree,u=n.layoutMatrix;if(0===t){var c=function breakMatrix(e,t,n){var r=[],i=[];return t?e.forEach(function(e,t){t>=n?i.push(e):r.push(e)}):e.forEach(function(e,t){e.forEach(function(e,a){a>=n?(i[t]=i[t]||[],i[t].push(e)):(r[t]=r[t]||[],r[t].push(e))})}),[r,i]}(o.matrix,a,i);return e.push({matrix:o.matrix,primaryMatrix:c[0],secondaryMatrix:c[1],space:o.space}),e}var s=t-1;return o.values.forEach(function(t){createMatrixInstances(e,s,{tree:t,layoutMatrix:u},r)}),e}(t,e,this.removeExtraCells(),this),t}},{key:"redistributeRowWise",value:function redistributeRowWise(e){var t,n,r=[],i=this.maxMeasures(),a=this.config(),o=a.isDistributionEqual,u=a.distribution,c=a.isTransposed,s=a.gutter,l=e.matrix,f=e.width,h=e.height,d=e.maxHeights,p=e.maxWidths;n=function spaceTakenByColumn(e,t){var n=0,r=0;return e.forEach(function(e){var i=e[t].getLogicalSpace();r=Math.max(r,i.width),n+=i.height}),{width:r,height:n}}(l,this._lastLevelKey).height;var y=i.reduce(function(e,t){return e+=t});return r=y>0?i.map(function(e){return e+e/y*(f-y)}):i.map(function(){return 0}),t=function getDistributedHeight(e){var t,n=0,r=0,i=e.isTransposed,a=e.distribution,o=e.availableHeight,u=e.height,c=e.isDistributionEqual,s=e.gutter,l=e.matrix,f=e.cIdx;a&&void 0!==a[0]&&(n=a.reduce(function(e,t){return e+=t})),s&&void 0!==s[0]&&(r=s.reduce(function(e,t){return e+=t})),t=o-Math.floor(o*r);var h=l.length;return l.map(function(r,o){var s=r[f].getLogicalSpace().height,l=s+s/u*(t-u);return i||(a.length>0&&h===a.length?l=t*a[o]/n:(c||0===e.height)&&(l=t/h)),Math.floor(l)})}({matrix:l,cIdx:this._lastLevelKey,height:n,availableHeight:h,isDistributionEqual:o,distribution:u,isTransposed:c,gutter:s}),p.push(r),d.push(t),{maxWidths:p,maxHeights:d}}},{key:"redistributeColumnWise",value:function redistributeColumnWise(e){var t=[],n=e.matrix,r=e.width,i=e.maxHeights,a=e.maxWidths,o=this.config().unitMeasures.border,u=function spaceTakenByRow(e){var t=0,n=0;return e.forEach(function(e){var r=e.getLogicalSpace();t=Math.max(t,r.height),n+=r.width}),{width:n,height:t}}(n[this._lastLevelKey]).width,c=function getDistributedWidth(e,t){var n=e.availableWidth,r=e.width,i=e.row,a=t.isDistributionEqual,o=t.isTransposed,u=t.distribution,c=0;return u&&u[0]&&(c=u.reduce(function(e,t){return e+=t})),i.map(function(e,t){var s=e.getLogicalSpace().width,l=s+s/r*(n-r);if(o)if(u.length>0)l=n*u[t]/c;else if(a||0===r){var f=i.length;l=n/f}return Math.floor(l)})}({row:n[this._lastLevelKey],width:u,availableWidth:r},this.config());n.forEach(function(e,n){return e.forEach(function(e,r){var i=e.getLogicalSpace().height;e.setAvailableSpace(c[r]-o,i),t[n]=Math.max(t[n]||0,e.getLogicalSpace().height)})}),i.length>0&&(t=t.map(function(e,t){return Math.max(e,i[0][t])})),i.push(t);for(var s=0;s=m&&(r[0][1][n[1]-m]=a[0],i[0][1]=(i[0][1]||0)+a[0]),n[1]===t._lastLevelKey&&(r[1][0][n[0]]=a[1],r[1][1][n[0]]=a[1])})}),{heights:g,widths:v,rowHeights:p,columnWidths:y}}}],[{key:"defaultConfig",value:function defaultConfig(){return pg}}]),VisualMatrix}(),vg=function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function sliceIterator(e,t){var n=[],r=!0,i=!1,a=void 0;try{for(var o,u=e[Symbol.iterator]();!(r=(o=u.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){i=!0,a=e}finally{try{!r&&u.return&&u.return()}finally{if(i)throw a}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}();function layout_helper_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t0&&(n=[].concat(layout_helper_toConsumableArray(w),layout_helper_toConsumableArray(P),layout_helper_toConsumableArray(O))),E.length>0&&(r=[].concat(layout_helper_toConsumableArray(C),layout_helper_toConsumableArray(E),layout_helper_toConsumableArray(F))),k.length>0&&k[0].length>0&&(i=k.map(function(e,t){return[].concat(layout_helper_toConsumableArray(w[t]),layout_helper_toConsumableArray(e),layout_helper_toConsumableArray(C[t]))})),T.length>0&&T[0].length>0&&(a=T.map(function(e,t){return[].concat(layout_helper_toConsumableArray(O[t]),layout_helper_toConsumableArray(e),layout_helper_toConsumableArray(F[t]))})),e.rowMatrix(new gg([n,r],{isDistributionEqual:s,distribution:h.rows,gutter:f.rows,unitMeasures:{width:v,height:g,border:d.width},breakPage:p.rows.map(function(e){return e+Math.max(w.length,C.length)}),extraCellLengths:[w.length,O.length]})),o=w.length>0?w[0].length:O.length>0?O[0].length:0,u=C.length>0?C[0].length:F.length>0?F[0].length:0,e.columnMatrix(new gg([i,a],{isDistributionEqual:l,distribution:h.columns,gutter:f.columns,isTransposed:!0,unitMeasures:{width:v,height:g,border:d.width},breakPage:p.columns,extraCellLengths:[o,u]})),e.centerMatrix(A),t}(this,e),this):function get(e,t,n){null===e&&(e=Function.prototype);var r=Object.getOwnPropertyDescriptor(e,t);if(void 0===r){var i=Object.getPrototypeOf(e);return null===i?void 0:get(i,t,n)}if("value"in r)return r.value;var a=r.get;return void 0!==a?a.call(n):void 0}(GridLayout.prototype.__proto__||Object.getPrototypeOf(GridLayout.prototype),"matrices",this).call(this,e)}},{key:"triggerReflow",value:function triggerReflow(){return function computeLayoutMeasurements(e){var t,n,r,i,a,o=e.rowMatrix(),u=e.columnMatrix(),c=e.centerMatrix(),s=e.measurement(),l=s.width,f=s.height,h=e.config().border,d=e.matrices(),p=d.top,y=d.bottom,g=function getMatrixMeasurement(e,t){return e?e.getLogicalSpace()[t]:0}(o,Iy),v=h.width,m=l-g-v;setMatrixMeasurement(u,Iy,m);var b=u.getViewableSpaces();bg(e,"column",b);var _=b[e.config().columnPointer],x=_.height.primary+_.height.secondary,w=f-x;setMatrixMeasurement(o,Dy,w);var k=o.getViewableSpaces();bg(e,"row",k);var C=(t=[]).concat.apply(t,computations_toConsumableArray(k.map(function(e){return e.rowHeights.primary}))),S=(n=[]).concat.apply(n,computations_toConsumableArray(k.map(function(e){return e.columnWidths.primary}))),P=(r=[]).concat.apply(r,computations_toConsumableArray(k.map(function(e){return e.columnWidths.secondary}))),A=u.getViewableSpaces(),E=(i=[]).concat.apply(i,computations_toConsumableArray(A.map(function(e){return e.columnWidths.primary}))),M=A[0].rowHeights.primary,O=(a=[]).concat.apply(a,computations_toConsumableArray(A.map(function(e){return e.rowHeights.secondary})));c.forEach(function(e,t){e.forEach(function(e,n){e.setAvailableSpace(E[n]-v,C[t]-v)})}),mg(p[0],S,M),mg(p[2],P,M),mg(y[0],S,O),mg(y[2],P,O)}(this),this.setViewInformation(),this}},{key:"gotoPage",value:function gotoPage(e,t){var n=e.toLowerCase(),r=this.getViewInformation().viewMatricesInfo[n+"Pages"],i=Math.min(Math.max(1,t),r);return this.config(function layout_defineProperty(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}({},n+"Pointer",i-1)),this.setViewInformation(),this.renderGrid(),this}},{key:"pages",value:function pages(e){var t=this.getViewInformation().viewMatricesInfo,n=e.toLowerCase();return{totalPages:t[n+"Pages"],currentPage:this.config()[n+"Pointer"]+1}}},{key:"setViewInformation",value:function setViewInformation(){var e=this.config(),t=e.rowPointer,n=e.columnPointer,r=e.border,i=function getViewMatrices(e,t,n){for(var r=e.rowMatrix(),i=e.columnMatrix(),a=e.centerMatrix(),o=e.matrices(),u=r.getViewableData(),c=i.getViewableData(),s={row:0,column:0},l=t-1;l>=0;l--){var f=Math.max(u[l].primaryMatrix.length,u[l].secondaryMatrix.length);s.row+=f}for(var h=n-1;h>=0;h--){var d=c[h],p=d.primaryMatrix,y=d.secondaryMatrix,g=Math.max(p[0]?p[0].length:0,y[0]?y[0].length:0);s.column+=g}o.top[1]=c[n].primaryMatrix,o.bottom[1]=c[n].secondaryMatrix,o.center[0]=u[t].primaryMatrix,o.center[2]=u[t].secondaryMatrix;var v=Math.max(o.center[0].length,o.center[2].length),m=Math.max(o.top[1][0]?o.top[1][0].length:0,o.bottom[1][0]?o.bottom[1][0].length:0);return o.center[1]=a.slice(s.row,s.row+v).map(function(e){return e.slice(s.column,s.column+m)}),{matrices:o,rowPages:u.length,columnPages:c.length}}(this,t,n),a=function getViewMeasurements(e){var t=e.rowMatrix(),n=e.columnMatrix(),r=e.measurement(),i=r.width,a=r.height,o=e.config(),u=o.columnPointer,c=o.rowPointer,s=t.getViewableSpaces()[c].width,l=s.primary,f=s.secondary,h=n.getViewableSpaces()[u].height,d=h.primary,p=h.secondary;return{viewWidth:[l,i-(l+f),f],viewHeight:[d,a-(d+p),p]}}(this);return a.border=r,this.viewInfo={viewMatricesInfo:i,layoutDimensions:a},this}},{key:"getViewInformation",value:function getViewInformation(){return this.viewInfo}},{key:"renderGrid",value:function renderGrid(e){if(this.mountPoint(e),!this.mountPoint())return this;var t=this.getViewInformation(),n=t.viewMatricesInfo,r=t.layoutDimensions;return function renderMatrices(e,t,n){var r=t.top,i=t.center,a=t.bottom,o=e.config().classPrefix,u=e.measurement().width,c=e.mountPoint();Eo(c,"div",[{type:Ly,matrix:r},{type:Hy,matrix:i},{type:zy,matrix:a}],o+"-grid-layout-row").each(function(e,t){var r=Ao(this);r.classed(o+"-grid-layout-row-"+t,!0),renderMatrix(e.matrix,r,e.type,n,o)}).style(Iy,Math.ceil(u)+"px")}(this,n.matrices,r),this}}],[{key:"defaultMeasurement",value:function defaultMeasurement(){return ng}},{key:"defaultConfig",value:function defaultConfig(){return tg}},{key:"create",value:function create(){return new GridLayout(null,null,this.defaultMeasurement(),this.defaultConfig())}}]),GridLayout}(),wg=function(){function defineProperties(e,t){for(var n=0;n0?o:i,v),P=Math.max(u>0?u:a,g),A=function createHeaders(e,t,n){var r=0,i={};return t>=200&&n>=200&&["title","subtitle"].forEach(function(t){var n=e[t](),a=function resolveTitleSubTitleContent(e){return"function"!=typeof e||e._sanitize?function escapeHTML(e){var t={"&":"&","<":"<",">":">",'"':""","'":"'","/":"/"};return(""+e).replace(/[&<>"'/]/g,function(e){return t[e]})}(e()):e()}(n[0]);if(a.length){var o=n[1];o.width=e.width(),o.content=a;var u=lv(o,t,e.dependencies().smartlabel,e[t+"Cell"]),c=u.height,s=u.cell;i[t+"Cell"]=s,e._composition[t]=s,r+=c+o.padding}}),{headerHeight:r,headers:i}}(e,S,P),E=A.headers,M=A.headerHeight,O=function createLegend(e,t,n,r){var i={height:n,width:r,headerHeight:t},a=e.config().legend,o=a.show,u=a.position;a.classPrefix=e.config().classPrefix;var c="left"===u||"right"===u?"vertical":"horizontal";return a.show=o?"vertical"===c&&r>200||"horizontal"===c&&n>200:o,a.align=c,fv(a,e,i,e.legends||[])}(e,M,S,P);e._composition.legend={},O.forEach(function(t){e._composition.legend[t.scaleType]=t.legend});var T=function getLegendSpace(e,t,n,r){var i={width:0,height:0};return e.map(function(e){return e.legend.measurement()}).forEach(function(e){var a,o;o=Math.min(e.width,e.maxWidth),a=Math.min(e.height,e.maxHeight),"horizontal"===t.align?i.width+o>r?(i.width=r,i.height+=a):(i.width+=o,i.height=Math.max(i.height,a)):i.height+a>n?(i.height=a,i.width+=o):(i.height+=a,i.width=Math.max(i.width,o))}),"horizontal"===t.align&&(i.width=r),i}(O,_,S,P),F="left"===k||"right"===k?T.width:0,N="top"===k||"bottom"===k?T.height:0,j={headers:E,legends:O,canvases:[e],rows:h,columns:d,values:p,cornerMatrices:c.cornerMatrices()},I={mountSpace:{height:i,width:a},headerHeight:M,legendSpace:T,canvasWidth:P,canvasHeight:S,width:P-F,height:S-M-N,minUnitHeight:e.minUnitHeight(),minUnitWidth:e.minUnitWidth()};return{layoutConfig:n=na(n,{classPrefix:m,showHeaders:b,border:na(c.metaData().border,e.config().border),layoutArrangement:C,legend:_,title:x,subtitle:w,isColumnSizeEqual:l,isRowSizeEqual:f}),components:j,measurement:I}},dv={position:"top",align:"left",padding:8},pv={position:"top",align:"left",padding:16};function canvas_local_options_defineProperty(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var yv=(canvas_local_options_defineProperty(ov={},"rows",{value:null,meta:{typeCheck:"constructor",typeExpected:"Array"}}),canvas_local_options_defineProperty(ov,"columns",{value:null,meta:{typeCheck:"constructor",typeExpected:"Array"}}),canvas_local_options_defineProperty(ov,"color",{value:null,meta:{typeCheck:"constructor",typeExpected:"Object",sanitization:function sanitization(e){return"string"==typeof e?{field:e}:e}}}),canvas_local_options_defineProperty(ov,"shape",{value:null,meta:{typeCheck:"constructor",typeExpected:"Object",sanitization:function sanitization(e){return"string"==typeof e?{field:e}:e}}}),canvas_local_options_defineProperty(ov,"size",{value:null,meta:{typeCheck:"constructor",typeExpected:"Object",sanitization:function sanitization(e){return"string"==typeof e?{field:e}:e}}}),canvas_local_options_defineProperty(ov,"detail",{value:[],meta:{typeCheck:"constructor",typeExpected:"Array"}}),canvas_local_options_defineProperty(ov,"layers",{value:null,meta:{typeCheck:"constructor",typeExpected:"Array"}}),canvas_local_options_defineProperty(ov,"transform",{value:null,meta:{typeCheck:"constructor",typeExpected:"Object"}}),canvas_local_options_defineProperty(ov,"mount",{value:null,meta:{sanitization:function sanitization(e){return"string"==typeof e?Ao(e).node():e}}}),ov),gv=(canvas_local_options_defineProperty(uv={},"title",{value:[null,null],meta:{typeCheck:["constructor","constructor"],typeExpected:["Function","Object"],spreadParams:!0,sanitization:[function(e){if("string"==typeof e){var n=function t(){return e};return n._sanitized=!0,n}return e},function(e){var t=na({},dv);return na(t,e)}]}}),canvas_local_options_defineProperty(uv,"subtitle",{value:[null,null],meta:{typeCheck:["constructor","constructor"],typeExpected:["Function","Object"],spreadParams:!0,sanitization:[function(e){if("string"==typeof e){var t=function sub(){return e};return t._sanitized=!0,t}return e},function(e){var t=na({},pv);return na(t,e)}]}}),uv),vv=function renderHeader(e,t,n,r){var i=r[n+"Cell"],a=e[""+n],o=a.position,u=a.align,c=a.padding,s=t.selectAll("."+e.classPrefix+"-inner-container").data([n]);s.exit().remove();var l=s.enter().append("div").merge(s);l.classed(e.classPrefix+"-inner-container",!0),i&&i.render(l.node()),l.selectAll("div").classed(e.classPrefix+"-inner-content",!0),l.style("width","100%"),a&&i&&l.style("float","left").style("text-align",u).style("padding-"+("top"===o?"bottom":"top"),c+"px")},mv=function renderComponents(e,t,n,r){var i=e.mount(),a=t.headers,o=t.legends,u=n.classPrefix,c=function getSkeletons(e,t,n){var r=t.layoutArrangement,i=t.classPrefix,a=r.headers,o=r.legends,u=n.canvasWidth,c=n.canvasHeight,s=Ao(e),l={},f=Eo(s,"div",[1],i+"-viz").style("width",u+"px").style("height",c+"px").selectAll("."+i+"-container").data(a);f.exit().remove();var h=f.enter().append("div").merge(f).attr("class",i+"-container").style("width",u+"px").style("padding","nullpx").style("margin",null).each(function(e){l[e]=Ao(this).classed(i+"-"+e+"-container",!0)}).selectAll("."+i+"-inner-container").data(function(e){return"group"===e?o:[]});return h.exit().remove(),h.enter().append("div").merge(h).attr("class",i+"-inner-container").style("width","auto").style("height","auto").each(function(e){l[e]=Ao(this).classed(i+"-"+e+"-container",!0)}),l}(i,n,r),s=c.title,l=c.legend,f=c.subtitle,h=c.layout,d=function prepareGridContainer(e,t,n,r){if(e){var i=t.height,a=t.width,o=Ao(e).selectAll("."+n+"-inner-content").data(["layout"],function(e){return e});o.exit().remove();var u=o.enter().append("div").merge(o).attr("class",n+"-inner-content").classed(n+"-grid-layout",!0).attr("id",n+"-grid-layout-"+r).style("height",i+"px").style("padding",null).style("width",Math.ceil(a)+"px"),c=u.selectAll("."+n+"-layout-grid-container").data(["layout2"]);c.exit().remove();var s=c.enter().append("div").merge(c);return s.classed(n+"-layout-grid-container",!0).attr("id",n+"-layout-grid-container-"+r).style("height",i+"px").style("width",Math.ceil(a)+"px"),{mount:s,container:u}}}(h.node(),r,u,e.alias()).mount,p=e.layout().getViewInformation().layoutDimensions.viewWidth[0];r.padding=p,function setLabelRotationForAxes(e){var t=0,n=e.xAxes()||[];!function(){for(var e=0;ev?(g++,m=0,v=y):g<0&&g++,i[g]=i[g]||[],v-=Math.min(t.measurement().height,v),m=Math.max(Math.min(t.measurement().width,t.measurement().maxWidth),m),i[g].push({legend:t,legendHeight:y,legendWidth:m})});var b=Eo(h,["div"],i,l+"-legend-section").each(function(e,t){return Ao(void 0).classed(l+"-legend-section-"+t,!0)}).classed(l+"-legend-vertical-section",!0).style("width",function(e){return e[0].legendWidth+"px"});Eo(b,["div"],function(e){return e},l+"-legend-components",{},function(e){return e.legend.id()}).each(function(e){e.legend.mount(this)}).style("width",function(e){return e.legendWidth+"px"})}else{var _=Eo(h,"div",[1],l+"-legend-section").classed(l+"-legend-horizontal-section",!0).classed(l+"-legend-section-0",!0).style("width",p+"px");Eo(_,"div",n,l+"-legend-components",{},function(e){return e.legend.id()}).each(function(e){e.legend.mount(this)}).style("width",function(e){return e.legend.measurement().width+"px"})}}(n,l,o,r),function shiftHeaders(e,t,n,r){var i=e.classPrefix,a=e.title,o=e.subtitle,u=e.legend,c=n.legendSpace;t+="left"===u.position?c.width:0,a&&Ao(r).select("."+i+"-title-container").style("width","left"===a.align?"calc(100% - "+t+"px":"100%").style("margin-left","left"===a.align?t+"px":0),o&&Ao(r).select("."+i+"-subtitle-container").style("width","left"===o.align?"calc(100% - "+t+"px":"100%").style("margin-left","left"===o.align?t+"px":0),Ao(r).select("."+i+"-legend-horizontal-section").style("margin-left",t+"px").style("width",c.width-t+"px").selectAll("."+i+"-legend-body, ."+i+"-legend-title").style("max-width",c.width-t+"px"),Ao(r).select("."+i+"-legend-vertical-section").style("margin-left",null).selectAll("."+i+"-legend-body, ."+i+"-legend-title").style("max-width",null)}(n,p,r,i)}),e.composition().visualGroup.matrixInstance().value.each(function(e){e.valueOf().parentContainer(h.node())})};function canvas_helper_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t",keywords:["datamodel","data","relational","algebra","model","muze","fusioncharts","table","tabular","operation"],repository:{type:"git",url:"https://github.com/chartshq/datamodel.git"},contributors:[{name:"Akash Goswami",email:"akash@charts.com"},{name:"Subhash Haldar",email:"subhash@charts.com"},{name:"Rousan Ali",email:"rousan@charts.com",url:"https://rousan.io"},{name:"Ujjal Kumar Dutta",email:"ujjal@charts.com"}],dependencies:{"d3-dsv":"^1.0.8"},devDependencies:{"babel-cli":"6.26.0","babel-core":"^6.26.3","babel-eslint":"6.1.2","babel-loader":"^7.1.4","babel-plugin-transform-runtime":"^6.23.0","babel-preset-env":"^1.7.0","babel-preset-es2015":"^6.24.1","babel-preset-flow":"^6.23.0",chai:"3.5.0","cross-env":"^5.0.5",eslint:"3.19.0","eslint-config-airbnb":"15.1.0","eslint-plugin-import":"2.7.0","eslint-plugin-jsx-a11y":"5.1.1","eslint-plugin-react":"7.3.0","istanbul-instrumenter-loader":"^3.0.0",jsdoc:"3.5.5",json2yaml:"^1.1.0",karma:"1.7.1","karma-chai":"0.1.0","karma-chrome-launcher":"2.1.1","karma-coverage-istanbul-reporter":"^1.3.0","karma-mocha":"1.3.0","karma-spec-reporter":"0.0.31","karma-webpack":"2.0.3",marked:"^0.5.0",mocha:"3.4.2","mocha-webpack":"0.7.0","transform-runtime":"0.0.0",webpack:"^4.12.0","webpack-cli":"^3.0.7","webpack-dev-server":"^3.1.4"},scripts:{test:"npm run lint && npm run ut",ut:"karma start karma.conf.js",utd:"karma start --single-run false --browsers Chrome karma.conf.js ",build:"webpack --mode production","build:dev":"webpack --mode development",start:"webpack-dev-server --config webpack.config.dev.js --mode development --open",lint:"eslint ./src","lint-errors":"eslint --quiet ./src",docs:"rm -rf yaml && mkdir yaml && jsdoc -c jsdoc.conf.json"}}},function(e,t,n){var r=n(2);e.exports=r.default?r.default:r},function(n,c,f){"use strict";f.r(c);var p={};f.r(p),f.d(p,"DataFormat",function(){return b}),f.d(p,"DimensionSubtype",function(){return _}),f.d(p,"MeasureSubtype",function(){return C}),f.d(p,"FieldType",function(){return P}),f.d(p,"FilteringMode",function(){return A});var y={};f.r(y),f.d(y,"DSVArr",function(){return Je}),f.d(y,"DSVStr",function(){return lt}),f.d(y,"FlatJSON",function(){return ft}),f.d(y,"Auto",function(){return ht});var g={};f.r(g),f.d(g,"sum",function(){return Et}),f.d(g,"avg",function(){return Mt}),f.d(g,"min",function(){return Ot}),f.d(g,"max",function(){return Tt}),f.d(g,"first",function(){return Ft}),f.d(g,"last",function(){return Nt}),f.d(g,"count",function(){return jt}),f.d(g,"sd",function(){return It});var b={FLAT_JSON:"FlatJSON",DSV_STR:"DSVStr",DSV_ARR:"DSVArr",AUTO:"Auto"},_={CATEGORICAL:"categorical",TEMPORAL:"temporal",GEO:"geo"},C={DISCRETE:"discrete"},P={MEASURE:"measure",DIMENSION:"dimension"},A={NORMAL:"normal",INVERSE:"inverse",ALL:"all"};function l(e,t){e.length>0&&e.split(",").forEach(function(e){var n=e.split("-"),r=+n[0],i=+(n[1]||n[0]);if(i>=r)for(var a=r;a<=i;a+=1)t(a)})}var O=function(){function e(e,t){for(var n=0;n=0;)o=e[a+1],-1!==r.indexOf(o)&&i.push({index:a,token:o});return i},m.formatAs=function(e,t){var n,r=h(e),i=m.findTokens(t),a=m.getTokenDefinitions(),o=String(t),u=m.TOKEN_PREFIX,c=void 0,s=void 0,l=void 0;for(l=0,n=i.length;l=0;h--)(s=a[h].index)+1!==f.length-1?(void 0===u&&(u=f.length),l=f.substring(s+2,u),f=f.substring(0,s+2)+RegExp.escape(l)+f.substring(u,f.length),u=s):u=s;for(h=0;h1){r=Math.abs(n[1]-n[0]);for(var i=2,a=n.length;i3&&void 0!==arguments[3]&&arguments[3],i=arguments.length>4&&void 0!==arguments[4]?arguments[4]:ye.CROSS,a=[],o=[],u=n||K,c=e.getFieldspace(),s=t.getFieldspace(),f=c.name,h=s.name,d=c.name+"."+s.name,p=L(c,s);if(f===h)throw new Error("DataModels must have different alias names");return c.fields.forEach(function(e){var t=E({},e.schema);-1===p.indexOf(t.name)||r||(t.name=c.name+"."+t.name),a.push(t)}),s.fields.forEach(function(e){var t=E({},e.schema);-1!==p.indexOf(t.name)?r||(t.name=s.name+"."+t.name,a.push(t)):a.push(t)}),l(e._rowDiffset,function(e){var n=!1,d=void 0;l(t._rowDiffset,function(t){var l=[],y={};y[f]={},y[h]={},c.fields.forEach(function(t){l.push(t.data[e]),y[f][t.name]=t.data[e]}),s.fields.forEach(function(e){-1!==p.indexOf(e.schema.name)&&r||l.push(e.data[t]),y[h][e.name]=e.data[t]});var g=Ke(y[f]),v=Ke(y[h]);if(u(g,v)){var m={};l.forEach(function(e,t){m[a[t].name]=e}),n&&ye.CROSS!==i?o[d]=m:(o.push(m),n=!0,d=e)}else if((i===ye.LEFTOUTER||i===ye.RIGHTOUTER)&&!n){var b={},_=c.fields.length-1;l.forEach(function(e,t){b[a[t].name]=t<=_?e:null}),n=!0,d=e,o.push(b)}})}),new At(o,a,{name:d})}function z(e,t){var n=""+e,r=""+t;return nr?1:0}function X(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:z;return e.length>1&&function e(t,n,r,i){if(r===n)return t;var a=n+Math.floor((r-n)/2);return e(t,n,a,i),e(t,a+1,r,i),function(e,t,n,r,i){for(var a=e,o=[],u=t;u<=r;u+=1)o[u]=a[u];for(var c=t,s=n+1,l=t;l<=r;l+=1)c>n?(a[l]=o[s],s+=1):s>r?(a[l]=o[c],c+=1):i(o[c],o[s])<=0?(a[l]=o[c],c+=1):(a[l]=o[s],s+=1)}(t,n,a,r,i),t}(e,0,e.length-1,t),e}function Q(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);to?"desc"===t?-1:1:0}}return i}function Z(e,t){var n=new Map,r=[];return e.forEach(function(e){var i=e[t];n.has(i)?r[n.get(i)][1].push(e):(r.push([i,[e]]),n.set(i,r.length-1))}),r}function ee(e,t,n){var r={label:e[0]};return t.reduce(function(t,r,i){return t[r]=e[1].map(function(e){return e[n[i].index]}),t},r),r}function ne(e,t){var n={},r=[],i=[],a=[],o=e.getFieldspace(),u=t.getFieldspace(),c=o.fieldsObj(),s=u.fieldsObj(),f=o.name+" union "+u.name;if(!M(e._colIdentifier.split(",").sort(),t._colIdentifier.split(",").sort()))return null;function d(e,t,r){l(e._rowDiffset,function(e){var o={},u="";i.forEach(function(n){var r=t[n].data[e];u+="-"+r,o[n]=r}),n[u]||(r&&a.push(o),n[u]=!0)})}return e._colIdentifier.split(",").forEach(function(e){var t=c[e];r.push(E({},t.schema)),i.push(t.schema.name)}),d(t,s,!1),d(e,c,!0),new At(a,r,{name:f})}function re(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);tn&&(n=e)}),[t,n]}(this.data)}},{key:"parse",value:function value(e){return e=parseFloat(e,10),Number.isNaN(e)?null:e}},{key:"unit",value:function value(){return this.fieldUnit}},{key:"scale",value:function value(){return this.fieldScale}},{key:"numberFormat",value:function value(){var e=this.fieldNumberformat;return function(t){return e(t)}}},{key:"defAggFn",value:function value(){return this.fieldDefAggFn}}]),t}(),Ee=function(){function e(e,t){for(var n=0;n=a?c=!0:(r=e.charCodeAt(o++))===at?l=!0:r===ot&&(l=!0,e.charCodeAt(o)===at&&++o),e.slice(i+1,t-1).replace(/""/g,'"')}for(;o2&&void 0!==arguments[2]?arguments[2]:{},i=arguments[3],a=void 0;t!==fe?(a={op:t,meta:r,criteria:i},e._derivation.push(a)):(a=[].concat(Ge(i)),e._derivation.length=0,(n=e._derivation).push.apply(n,Ge(a)))},yt=function ze(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=n.operation||"and",i=n.filterByMeasure||!1,a=[];a=t.length?t.map(function(e){return function(e){var t=e.getData(),n=t.schema,r=e.getFieldsConfig(),a=e.getFieldspace().fieldsObj(),o=t.data,u=Object.values(r).reduce(function(e,t){return e[t.def.name]=a[t.def.name].domain(),e},{});return function(e){return!!o.length&&o.some(function(t){return n.every(function(n){if(!(n.name in e))return!0;var a=e[n.name].valueOf();if(i&&n.type===P.MEASURE)return a>=u[n.name][0]&&a<=u[n.name][1];if(n.type!==P.DIMENSION)return!0;var o=r[n.name].index;return t[o]===e[n.name].valueOf()})})}}(e)}):[function(){return!1}];return"and"===r?e.clone(!1,!1).select(function(e){return a.every(function(t){return t(e)})},{saveChild:!1,mode:A.ALL}):e.clone(!1,!1).select(function(e){return a.some(function(t){return t(e)})},{mode:A.ALL,saveChild:!1})},gt=function Xe(e,t,n,r){var i=e.clone(r.saveChild),a=function(e,t,n,r){var i=[],a=-1,o=void 0,c=function u(e){return n(qe(t,e),e)};return r.mode===A.INVERSE&&(c=function u(e){return!n(qe(t,e))}),l(e,function(e){c(e)&&(-1!==a&&e===a+1?(o=i.length-1,i[o]=i[o].split("-")[0]+"-"+e):i.push(""+e),a=e)}),i.join(",")}(i._rowDiffset,i.getPartialFieldspace().fields,t,n);return i._rowDiffset=a,i.__calculateFieldspace().calculateFieldsConfig(),r.saveChild&&pt(i,ce,{config:n},t),i},vt=function Qe(e,t,n,r){var i=e.clone(n.saveChild),a=t;return n.mode===A.INVERSE&&(a=r.filter(function(e){return-1===t.indexOf(e)})),i._colIdentifier=a.join(","),i.__calculateFieldspace().calculateFieldsConfig(),n.saveChild&&pt(i,se,{projField:t,config:n,actualProjField:a},null),i},mt=function $e(e,t,n,r){r=Object.assign(Object.assign({},Ze),r);var i=y[r.dataFormat];if(!i||"function"!=typeof i)throw new Error("No converter function found for "+r.dataFormat+" format");var a=i(t,r),o=dt(a,2),u=o[0],c=o[1],s=Ue(c,n,u),l=Y.createNamespace(s,r.name);return e._partialFieldspace=l,e._rowDiffset=c.length&&c[0].length?"0-"+(c[0].length-1):"",e._colIdentifier=n.map(function(e){return e.name}).join(),e},bt=function Ze(e,t){for(var n=0;n2&&void 0!==arguments[2]?arguments[2]:{},i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},a=i.nonTraversingModel,o=i.excludeModels||[];t!==a&&((!o.length||-1===o.indexOf(t))&&t.handlePropagation(n,r),t._children.forEach(function(t){var a=_t(n,t),o=dt(a,2),u=o[0],c=o[1];e(t,[u,c],r,i)}))},wt=function nt(e,t,n,r){var i=void 0,a=void 0,o=n.propagationNameSpace,u=n.propagateToSource,c=n.sourceId,s=r.propagateInterpolatedValues,l=[];if(null===e&&!0!==r.persistent)l=[{criteria:[]}];else{var f,h=Object.values(o.mutableActions);!1!==u&&(h=h.filter(function(e){return e.config.sourceId!==c}));var d=h.filter(function(e){return(r.filterFn||function(){return!0})(e,r)}).map(function(e){return e.config.criteria}),p=[];if(!1!==u){var y=Object.values(o.mutableActions);y.forEach(function(e){var t=e.config;!1===t.applyOnSource&&t.action===r.action&&t.sourceId!==c&&(p.push(e.model),(i=y.filter(function(t){return t!==e}).map(function(e){return e.config.criteria})).length&&l.push({criteria:i,models:e.model,path:function e(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];return null!==t._parent&&(n.push(t),e(t._parent,n)),n}(e.model)}))})}i=(f=[]).concat.apply(f,[].concat(Ge(d),[e])).filter(function(e){return null!==e}),l.push({criteria:i,excludeModels:[].concat(p,Ge(r.excludeModels||[]))})}var g=t.model,v=Object.assign({sourceIdentifiers:e,propagationSourceId:c},r),m=t.groupByModel;s&&m&&(a=yt(m,i,{filterByMeasure:s}),xt(m,a,v)),l.forEach(function(e){var t=yt(g,e.criteria),n=e.path;if(n){var r=function(e,t){for(var n=0,r=t.length;n0&&void 0!==arguments[0])||arguments[0],t=void 0;if(!1===(!(arguments.length>1&&void 0!==arguments[1])||arguments[1])){var n=this.getData({getAllFields:!0}),r=n.data,i=n.schema,a=r.map(function(e){var t={};return i.forEach(function(n,r){t[n.name]=e[r]}),t});t=new this.constructor(a,i)}else t=new this.constructor(this);return e&&this._children.push(t),t}},{key:"project",value:function value(e,t){var n={mode:A.NORMAL,saveChild:!0};t=Object.assign({},n,t);var r=this.getFieldsConfig(),i=Object.keys(r),a=t.mode,o=e.reduce(function(e,t){return"RegExp"===t.constructor.name?e.push.apply(e,function(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t1&&void 0!==arguments[1]?arguments[1]:[];pt(this,fe,null,t),this._parent=e,e._children.push(this)}}]),e}(),St=function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function(e,t){var n=[],r=!0,i=!1,a=void 0;try{for(var o,u=e[Symbol.iterator]();!(r=(o=u.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){i=!0,a=e}finally{try{!r&&u.return&&u.return()}finally{if(i)throw a}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")},Pt=function(){function e(e,t){for(var n=0;n0,c=[];if(n.split(",").forEach(function(t){for(var n=0;n=0;u--)i=t[u][0],a=t[u][1],(o=bt(r,i))&&(S(a)?X(n,function(e,t){return a(e[o.index],t[o.index])}):j(a)?function(){var e=Z(n,o.index),t=a[a.length-1],i=a.slice(0,a.length-1),u=i.map(function(e){return bt(r,e)});e.forEach(function(e){e.push(ee(e,i,u))}),X(e,function(e,n){var r=e[2],i=n[2];return t(r,i)}),n.length=0,e.forEach(function(e){n.push.apply(n,Q(e[1]))})}():(a="desc"===String(a).toLowerCase()?"desc":"asc",X(n,$(o.type,a,o.index))));e.uids=[],n.forEach(function(t){e.uids.push(t.pop())})}(a,r),i.columnWise){var s=Array.apply(void 0,Q(Array(a.schema.length))).map(function(){return[]});a.data.forEach(function(e){e.forEach(function(e,t){s[t].push(e)})}),a.data=s}return a}.call(this,this.getPartialFieldspace().fields,this._rowDiffset,e.getAllFields?t.map(function(e){return e.name}).join():this._colIdentifier,e.sort,{columnWise:"column"===e.order,addUid:!!e.withUid});if(!e.formatter)return n;var r=e.formatter,i=n.data,a=n.schema,o=n.uids,u=a.map(function(e){return e.name}),c=Object.keys(r).reduce(function(e,t){var n=u.indexOf(t);return-1!==n&&e.push([n,r[t]]),e},[]);return"column"===e.order?c.forEach(function(e){var t=e[0],n=e[1];i[t].forEach(function(e,r){i[t][r]=n.call(void 0,e,o[r],a[t])})}):i.forEach(function(e,t){c.forEach(function(n){var r=n[0],i=n[1];e[r]=i.call(void 0,e[r],o[t],a[r])})}),n}},{key:"groupBy",value:function value(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{saveChild:!0},r=""+e.join(),i=function de(e,t,n,r){var i=function(e,t){var n=[],r=e.getPartialFieldspace(),i=r.getDimension(),a=r.getMeasure();return Object.entries(i).forEach(function(e){var r=ke(e,1)[0];t&&t.length?-1!==t.indexOf(r)&&n.push(r):n.push(r)}),Object.entries(a).forEach(function(e){var r=ke(e,1)[0];"discrete"===a[r].subType()&&(t&&t.length?-1!==t.indexOf(r)&&n.push(r):n.push(r))}),n}(e,t),a=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n={},r=t,i=e.getPartialFieldspace().getMeasure(),a=we.defaultReducer();return"function"==typeof t&&(a=t),Object.entries(i).forEach(function(e){var o=ke(e,1)[0];"string"==typeof t[o]&&(r[o]=we.resolve(r[o])?we.resolve(r[o]):a),"function"!=typeof t[o]&&(r[o]=void 0),n[o]=r[o]||we.resolve(i[o].defAggFn())||a}),n}(e,n),o=e.getPartialFieldspace(),u=o.fieldsObj(),c=o.name,s=[],f=[],h=[],d={},p=[],y=void 0;Object.entries(u).forEach(function(e){var t=ke(e,2),n=t[0],r=t[1];(-1!==i.indexOf(n)||a[n])&&(h.push(E({},r.schema)),"measure"===r.schema.type&&"discrete"!==r.schema.subtype?f.push(n):"dimension"!==r.schema.type&&"discrete"!==r.schema.subtype||s.push(n))});var g=0;return l(e._rowDiffset,function(e){var t="";s.forEach(function(n){t=t+"-"+u[n].data[e]}),void 0===d[t]?(d[t]=g,p.push({}),s.forEach(function(t){p[g][t]=u[t].data[e]}),f.forEach(function(t){p[g][t]=[u[t].data[e]]}),g+=1):f.forEach(function(n){p[d[t]][n].push(u[n].data[e])})}),p.forEach(function(e){var t=e;f.forEach(function(n){t[n]=a[n](e[n])})}),r?(r.__calculateFieldspace(),y=r):y=new Lt(p,h,{name:c}),y}.apply(void 0,[this,e,t]);return n.saveChild&&(this._children.push(i),pt(i,le,{fieldsArr:e,groupByString:r,defaultReducer:we.defaultReducer()},t)),i._parent=this,i}},{key:"sort",value:function value(e){var t=this.getData({order:"row",sort:e}),n=[t.schema.map(function(e){return e.name})].concat(t.data),r=new this.constructor(n,t.schema,{dataFormat:"DSVArr"});return r._sortingDetails=e,r}},{key:"addField",value:function value(e){var t=e.fieldName();this._colIdentifier+=","+t;var n=this._partialFieldspace;if(n.fieldsObj()[e.fieldName()]){var r=n.fields.findIndex(function(e){return e.name===t});r>=0&&(n.fields[r]=e)}else n.fields.push(e);return this.__calculateFieldspace().calculateFieldsConfig(),this}},{key:"calculateVariable",value:function value(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{saveChild:!0,replaceVar:!1},r=this.getFieldsConfig(),i=t.slice(0,t.length-1),a=t[t.length-1];if(r[e.name]&&!n.replaceVar)throw new Error(e.name+" field already exists in model.");var o=i.map(function(e){var t=r[e];if(!t)throw new Error(e+" is not a valid column name.");return t.index}),u=this.clone(),c=u.getFieldspace().fields,s=o.map(function(e){return c[e]}),f=[];l(u._rowDiffset,function(e){var t=s.map(function(t){return t.data[e]});f[e]=a.apply(void 0,function(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t1&&void 0!==arguments[1]?arguments[1]:{},n=arguments[2],r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},i=t.isMutableAction,a=t.sourceId,o=t.payload,u=function e(t){return t._parent?e(t._parent):t}(this),c=u._propagationNameSpace,s={groupByModel:function e(t){return t._parent&&t._derivation.find(function(e){return"group"!==e.op})?e(t._parent):t}(this),model:u};return n&&function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments[2],r=void 0,i=t.isMutableAction,a=t.criteria,o=t.action+"-"+t.sourceId;r=i?e.mutableActions:e.immutableActions,null===a?delete r[o]:r[o]={model:n,config:t}}(c,t,this),wt(e,s,{propagationNameSpace:c,sourceId:a},Object.assign({payload:o},t)),i&&function(e,t,n){var r=e.immutableActions;for(var i in r){var a=r[i].config,o=n.config.sourceId,u=!n.propConfig.filterImmutableAction||n.propConfig.filterImmutableAction(a,n.config);if(a.sourceId!==o&&u){var c=a.criteria;wt(c,t,{propagationNameSpace:e,propagateToSource:!1,sourceId:o},a)}}}(c,s,{config:t,propConfig:r}),this}},{key:"on",value:function value(e,t){switch(e){case"propagation":this._onPropagation.push(t)}return this}},{key:"unsubscribe",value:function value(e){switch(e){case"propagation":this._onPropagation=[]}return this}},{key:"handlePropagation",value:function value(e,t){var n=this;this._onPropagation.forEach(function(r){return r.call(n,e,t)})}},{key:"bin",value:function value(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=this.clone(),r=t.name||e+"_binned";if(this.getFieldsConfig()[r]||!this.getFieldsConfig()[e])throw new Error("Field "+e+" already exists.");var i=function I(e,t,n){var r=n.buckets,i=n.binCount,a=n.binSize,o=n.start,u=[],c=[],s=e.domain(),f=ue(s,2),h=f[0],d=f[1],p=d,y=[],g=void 0,v=void 0,m=void 0,b=void 0;if(l(t,function(t){u.push({data:e.data[t],index:t})}),!r){var _=((d+=1)-h)%(a=a||(d-h)/i);for(i||0===_||(d=d+a-_),g=h+a;g<=d;)y.push(g),g+=a;r={start:o=o||h,stops:y}}v=0===r.start?0:r.start||h,r.stops.forEach(function(e){u.filter(function(t){return t.data>=v&&t.data=r.stops[r.stops.length-1]}).forEach(function(e){c[e.index]=r.stops[r.stops.length-1]+"-"+p}),r.stops.unshift(r.start),b=new Set(r.stops),hr.stops[r.stops.length-1]&&b.add(p),b=[].concat(function(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t1&&void 0!==arguments[1]?arguments[1]:{saveChild:!0}).saveChild;return t.forEach(function(e){n=e(n),i.push.apply(i,function(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t1&&r.dispose(),n}},bin:function bin(){for(var e=arguments.length,t=Array(e),n=0;n2?(i=arguments.length<=0?void 0:arguments[0],r=arguments.length<=1?void 0:arguments[1],a=arguments.length<=2?void 0:arguments[2]):(i=null,r=arguments.length<=0?void 0:arguments[0],a=arguments.length<=1?void 0:arguments[1]),t=a(w),(e=n=new A(t.fn)).addDependencies.apply(e,P(t.dependencies)),this._addPropInModel(i,function(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}({},r,n)),this}},{key:"_addPropInModel",value:function value(e,t){return this._graph.createNodesFrom(t,e),this}},{key:"on",value:function value(e,t,n){var r,i=e instanceof Array?e:[e],a=this._graph.createElectricNodeOf(i,{type:"CurrFrame",fn:t});return n&&(r=this._graph.stopPropagation().setPropagationOverride("nextFrame")).resetNodeValue.apply(r,P(e)),a}},{key:"next",value:function value(e,t,n){var r,i=e instanceof Array?e:[e],a=this._graph.createElectricNodeOf(i,{type:"NextFrame",fn:t});return n&&(r=this._graph.stopPropagation().setPropagationOverride("currentFrame")).resetNodeValue.apply(r,P(e)),a}},{key:"lock",value:function value(){return this._lockFlag=!0,this._reqQ.length=0,this}},{key:"unlock",value:function value(){return this._lockFlag=!1,this.setProp.apply(this,P(this._reqQ)),this._reqQ.length=0,this}},{key:"prop",value:function value(){var e,t=void 0,n=void 0;switch(e=arguments.length){case 1:t=arguments.length<=0?void 0:arguments[0];break;case 2:t=arguments.length<=0?void 0:arguments[0],n=arguments.length<=1?void 0:arguments[1];break;default:return this}return 2===e?(this._lockFlag?this._reqQ.push([t,n]):this.setProp([t,n]),this):this._graph.getNodeValue(t)}},{key:"setProp",value:function value(){for(var e,t=this,n=arguments.length,r=Array(n),i=0;i/gi),e},SmartLabelManager.store={},SmartLabelManager.prototype._calCharDimWithCache=function(e,t,n){if(!this._init)return!1;var r,i,a,o,u,c,s=this.options.maxCacheLimit,l=this._container,h=this.style||{},d=this._advancedCache||(this._advancedCache={}),p=this._advancedCacheKey||(this._advancedCacheKey=[]),y=e+(h.fontSize||"")+(h.fontFamily||"")+(h.fontWeight||"")+(h.fontStyle||""),g=e+"init"+(h.fontSize||"")+(h.fontFamily||"")+(h.fontWeight||"")+(h.fontStyle||"");return f[e]&&(e=f[e]),t?void 0===(c=d[g])&&(l.innerHTML=e.repeat?e.repeat(n):Array(n+1).join(e),a=l.offsetWidth,l.innerHTML=e,o=l.offsetWidth,c=d[g]=(a-n*o)/(n+1),p.push(g),p.length>s&&delete d[p.shift()]):c=0,(u=d[y])?(i=u.split(","),{width:parseFloat(i[0],10),height:parseFloat(i[1],10)}):(l.innerHTML=e,r={height:l.offsetHeight,width:l.offsetWidth+c},d[y]=r.width+","+r.height,p.push(y),p.length>s&&delete d[p.shift()],r)},SmartLabelManager.prototype._getWidthFn=function(){var e=this._containerObj,t=this._container,n=e.svgText;return n?function(e){var t,r;return n.textContent=e,(r=(t=n.getBBox()).width-d)<1&&(r=t.width),r}:function(e){return t.innerHTML=e,t.offsetWidth}},SmartLabelManager.prototype.setStyle=function(e){return this._init?e!==this.style||this._styleNotSet?(e||(e=this.style),o.setLineHeight(e),this.style=e,this._containerObj=t=this._containerManager.get(e),this._containerObj?(this._container=t.node,this._context=t.context,this._cache=t.charCache,this._lineHeight=t.lineHeight,this._styleNotSet=!1):this._styleNotSet=!0,this):void 0:this;var t},SmartLabelManager.prototype.useEllipsesOnOverflow=function(e){return this._init?(this._showNoEllipses=!e,this):this},SmartLabelManager.prototype.getSmartText=function(e,t,n,r){if(!this._init)return!1;void 0===e||null===e?e="":"string"!=typeof e&&(e=e.toString());var i,a,c,l,f,d,p,y,g,v,m,b,_,x,w,k,C,S,P,A,E,M,O,T,F,N,j=!1,I=0,D=-1,L=-1,R=-1,B=0,z=0,H=[],V=0,U=this._showNoEllipses?"":"...",W=this._lineHeight,q=this._context,G=this._container,Y=this._containerObj,X=Y.ellipsesWidth,K=Y.dotWidth,$=[],Q=-1,Z=-1,J=-1,ee=function fastTrim(e){for(var t=/\s/,n=(e=e.replace(/^\s\s*/,"")).length;t.test(e.charAt(n-=1)););return e.slice(0,n+1)},te={text:e,maxWidth:t,maxHeight:n,width:null,height:null,oriTextWidth:null,oriTextHeight:null,oriText:e,isTruncated:!1};if(b=this._getWidthFn(),n===W&&(n*=1.2),G){if(!h.isBrowserLess){if((j=o.xmlTagRegEx.test(e))?(G.innerHTML=e,te.oriTextWidth=p=G.offsetWidth,te.oriTextHeight=y=G.offsetHeight):(l=e.replace(o.ltgtRegex,function(e){return"<"===e?"<":">"}),w=this.getOriSize(l,!0),te.oriTextWidth=p=w.width,te.oriTextHeight=y=w.height),y<=n&&p<=t)return te.width=te.oriTextWidth=p,te.height=te.oriTextHeight=y,te;if(W>n)return te.text="",te.width=te.oriTextWidth=0,te.height=te.oriTextHeight=0,te}if(e=ee(e).replace(/(\s+)/g," "),f=this._showNoEllipses?t:t-X,!j){if(i=(H=e.split("")).length,a="",c=[],m=H[0],this._cache[m]?P=this._cache[m].width:(P=b(m),this._cache[m]={width:P}),f>P)V=(c=e.substr(0,o.getNearestBreakIndex(e,f,this)).split("")).length;else{if(P>t)return te.text="",te.width=te.oriTextWidth=te.height=te.oriTextHeight=0,te;U&&((f=t-2*K)>P?U="..":(f=t-K)>P?U=".":(f=0,U=""))}if(B=b(c.join("")),z=this._lineHeight,r){for(;Vf&&(a||(a=c.slice(0,-1).join("")),B>t))return te.text=ee(a)+U,te.tooltext=te.oriText,te.width=b(te.text),te.height=this._lineHeight,te;return te.text=c.join(""),te.width=B,te.height=this._lineHeight,te}for(;Vf&&(a||(a=c.slice(0,-1).join("")),B>t)){if(L=e.substr(0,c.length).lastIndexOf(" "),D=e.substr(0,c.length).lastIndexOf("-"),L>R?(B=b(c.slice(R+1,L).join("")),c.splice(L,1,"
"),R=L,g=L+1):D>R?(D===c.length-1?(B=b(c.slice(R+1,L).join("")),c.splice(D,1,"
-")):(B=b(c.slice(R+1,L).join("")),c.splice(D,1,"-
")),R=D,g=D+1):(c.splice(c.length-1,1,"
"+H[V]),J=c.length-2,B=b(c.slice(R+1,J+1).join("")),R=J,g=V),(z+=this._lineHeight)>n)return te.text=ee(a)+U,te.tooltext=te.oriText,te.width=t,te.height=z-this._lineHeight,te;I=s(I,B),a=null,v=o.getNearestBreakIndex(e.substr(g),f,this),B=b(e.substr(g,v||1)),c.length)/g,'$1'),G.innerHTML=e,C=0,S=(k=G[h.childRetriverFn](h.childRetriverString)).length;Ct)return te.text="",te.width=te.oriTextWidth=te.height=te.oriTextHeight=0,te;if(P>f&&!this._showNoEllipses&&((f=t-2*K)>P?U="..":(f=t-K)>P?U=".":(f=0,U="")),_=$[0].elem.offsetLeft,x=$[0].elem.offsetTop,r)for(;Vf&&(N||(N=V),G.offsetWidth>t&&(F=V,V=i));else for(;Vf?(N||(N=V),M>t&&(L=$[V].spaceIdx,D=$[V].dashIdx,L>R?($[L].elem.innerHTML="
",R=L):D>R?($[D].elem.innerHTML=D===V?"
-":"-
",R=D):A.parentNode.insertBefore(T=u.createElement("br"),A),A.offsetHeight+A.offsetTop>n?(T?T.parentNode.removeChild(T):R===D?$[D].elem.innerHTML="-":$[L].elem.innerHTML=" ",F=V,V=i):N=null)):O>n&&(F=V,V=i);if(F=N;V-=1)(A=$[V].elem).parentNode.removeChild(A);for(;V>=0;V-=1)A=$[V].elem,o.classNameBrReg.test(A.className)?A.parentNode.removeChild(A):V=0}return te.text=G.innerHTML.replace(o.spanRemovalRegx,"$1").replace(/\&\;/g,"&"),te.isTruncated&&(te.text+=U,te.tooltext=d),te.height=G.offsetHeight,te.width=G.offsetWidth,te}return te.error=new Error("Body Tag Missing!"),te},SmartLabelManager.prototype.getOriSize=function(e,t){if(!this._init)return!1;var n,r,i,a,o,u=0,c=0,f={};if(!t)return this._calCharDimWithCache(e);for(a=0,o=(n=e.split("")).length;a]+?\>)|(&(?:[a-z]+|#[0-9]+);|.)/gi,spanAdditionReplacer:'$1$2',spanRemovalRegx:new RegExp("\\]+?"+c+"[^\\>]{0,}\\>(.*?)\\<\\/span\\>","ig"),xmlTagRegEx:new RegExp("<[^>][^<]*[^>]+>","i"),ltgtRegex:/<|>/g,brReplaceRegex://gi,testStrAvg:"WgI",parentContainerStyle:{position:"absolute",top:"-9999em",whiteSpace:"nowrap",padding:"0px",width:"1px",height:"1px",overflow:"hidden"},supportedStyle:{font:"font",fontFamily:"font-family","font-family":"font-family",fontWeight:"font-weight","font-weight":"font-weight",fontSize:"font-size","font-size":"font-size",lineHeight:"line-height","line-height":"line-height",fontStyle:"font-style","font-style":"font-style"},getDocumentSupport:function getDocumentSupport(){var r,i,a;return t.getElementsByClassName?(r="getElementsByClassName",i=c,a=!0):(r="getElementsByTagName",i="span",a=!1),{isIE:/msie/i.test(n)&&!e.opera,hasSVG:Boolean(e.SVGAngle||t.implementation.hasFeature("http://www.w3.org/TR/SVG11/feature#BasicStructure","1.1")),isHeadLess:new RegExp(" HtmlUnit").test(n),isWebKit:new RegExp(" AppleWebKit/").test(n),childRetriverFn:r,childRetriverString:i,noClassTesting:a}},createContainer:function createContainer(e){var n,r;if(e&&(e.offsetWidth||e.offsetHeight)){if(e.appendChild)return e.appendChild(r=t.createElement("DIV")),r.className=u,r.setAttribute("aria-hidden","true"),r.setAttribute("role","presentation"),r}else if((n=t.getElementsByTagName("body")[0])&&n.appendChild)return(r=t.createElement("DIV")).className=u,r.setAttribute("aria-hidden","true"),r.setAttribute("role","presentation"),1,n.appendChild(r),r},getNearestBreakIndex:function getNearestBreakIndex(e,t,n){if(!e||!e.length)return 0;var r,o=n._getWidthFn(),u=0,c=0,s=o(e),l=s/e.length;if(r=t,u=i(t/l),se.length&&(r=t-s,u=e.length);r>0;){if(r=t-o(e.substr(0,u)),!(c=a(r/l)))return u;u+=c}for(;r<0;){if(r=t-o(e.substr(0,u)),!(c=a(r/l)))return u;u+=c}return u},setLineHeight:function setLineHeight(e){var t=e.fontSize=e.fontSize||"12px";return e.lineHeight=e.lineHeight||e["line-height"]||1.2*parseInt(t,10)+"px",e}}}};t.default=r,e.exports=t.default},function(e){e.exports={name:"muze",private:!0,version:"1.0.2",description:"Composable visualisation library for web with a data-first approach",homepage:"https://www.charts.com/muze",license:"MIT",author:"Charts.com ",contributors:[{name:"Akash Ghoswami",email:"akash@charts.com"},{name:"Ranajit Banerjee",email:"ranajit.banerjee@charts.com",url:"https://github.com/ranajitbanerjee"},{name:"Mridul Meharia",email:"mridul@charts.com",url:"https://github.com/mridulmeh"},{name:"Subhash Haldar",email:"subhash@charts.com"},{name:"Sandeep Acharya",email:"sandeep@charts.com"},{name:"Rousan Ali",email:"rousan@charts.com",url:"https://rousan.io"},{name:"Ujjal Kumar Dutta",email:"ujjal@charts.com"}],main:"src/index.js",keywords:["muze","svg","vector","graphics","data-visualization","visualization","renderer","fusioncharts","relational","algebra","relation"],repository:{type:"git",url:"https://github.com/chartshq/muze"},dependencies:{"@chartshq/layout":"^1.0.0","@chartshq/muze-firebolt":"^1.0.0","@chartshq/muze-legend":"^1.0.0","muze-utils":"^1.0.0","@chartshq/visual-cell":"^1.0.0","@chartshq/visual-group":"^1.0.0","@chartshq/visual-layer":"^1.0.0","@chartshq/visual-unit":"^1.0.0"}}},function(e,t,n){var r=n(44);e.exports=r.default?r.default:r},function(e,t,n){"use strict";var r=function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}(n(5)).default.init("undefined"!=typeof window?window:void 0),i=r.win.document,a=r.getDocumentSupport(),o=a.isWebKit?0:4.5;function ContainerManager(e,t,n){var r;n=(n=n>5?n:5)<20?n:20,this.maxContainers=n,this.first=null,this.last=null,this.containers={},this.length=0,this.rootNode=e,t&&((r=i.createElementNS("http://www.w3.org/2000/svg","svg")).setAttributeNS("http://www.w3.org/2000/svg","xlink","http://www.w3.org/1999/xlink"),r.setAttributeNS("http://www.w3.org/2000/svg","height","0"),r.setAttributeNS("http://www.w3.org/2000/svg","width","0"),this.svgRoot=r,this.rootNode.appendChild(r))}ContainerManager.prototype.get=function(e){var t,n,i,a=this.containers,o=this.length,u=this.maxContainers,c="";for(n in r.supportedStyle)void 0!==e[n]&&(c+=r.supportedStyle[n]+":"+e[n]+";");if(!c)return!1;if(i=a[c])this.first!==i&&(i.prev&&(i.prev.next=i.next),i.next&&(i.next.prev=i.prev),i.next=this.first,i.next.prev=i,this.last===i&&(this.last=i.prev),i.prev=null,this.first=i);else{if(o>=u)for(t=o-u+1;t--;)this.removeContainer(this.last);i=this.addContainer(c)}return i},ContainerManager.prototype.addContainer=function(e){var t,n;return this.containers[e]=n={next:null,prev:null,node:null,ellipsesWidth:0,lineHeight:0,dotWidth:0,avgCharWidth:4,keyStr:e,charCache:{}},n.next=this.first,n.next&&(n.next.prev=n),this.first=n,this.last||(this.last=n),this.length+=1,t=n.node=i.createElement("div"),this.rootNode.appendChild(t),a.isIE&&!a.hasSVG?t.style.setAttribute("cssText",e):t.setAttribute("style",e),t.setAttribute("aria-hidden","true"),t.setAttribute("role","presentation"),t.style.display="inline-block",t.innerHTML=r.testStrAvg,n.lineHeight=t.offsetHeight,n.avgCharWidth=t.offsetWidth/3,a.isBrowserLess?((t=n.svgText=i.createElementNS("http://www.w3.org/2000/svg","text")).setAttribute("style",e),this.svgRoot.appendChild(t),t.textContent=r.testStrAvg,n.lineHeight=t.getBBox().height,n.avgCharWidth=(t.getBBox().width-o)/3,t.textContent="...",n.ellipsesWidth=t.getBBox().width-o,t.textContent=".",n.dotWidth=t.getBBox().width-o):(t.innerHTML="...",n.ellipsesWidth=t.offsetWidth,t.innerHTML=".",n.dotWidth=t.offsetWidth,t.innerHTML=""),n},ContainerManager.prototype.removeContainer=function(e){var t=e.keyStr;t&&this.length&&e&&(this.length-=1,e.prev&&(e.prev.next=e.next),e.next&&(e.next.prev=e.prev),this.first===e&&(this.first=e.next),this.last===e&&(this.last=e.prev),e.node.parentNode.removeChild(e.node),delete this.containers[t])},ContainerManager.prototype.dispose=function(){var e,t=this.containers;for(e in this.maxContainers=null,t)this.removeContainer(t[e]);this.rootNode.parentNode.removeChild(this.rootNode),this.rootNode=null,this.first=null,this.last=null},e.exports=ContainerManager},function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,,function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,function(e,t,n){"use strict";n.r(t);var r={};n.r(r),n.d(r,"scaleLinear",function(){return linear_linear}),n.d(r,"scaleThreshold",function(){return threshold_threshold}),n.d(r,"scaleLog",function(){return log}),n.d(r,"scalePow",function(){return pow}),n.d(r,"scaleIdentity",function(){return identity_identity}),n.d(r,"scaleOrdinal",function(){return ordinal}),n.d(r,"scaleSequential",function(){return sequential}),n.d(r,"scaleQuantize",function(){return quantize_quantize}),n.d(r,"scaleQuantile",function(){return quantile_quantile}),n.d(r,"schemeCategory10",function(){return tn}),n.d(r,"schemeCategory20",function(){return rn}),n.d(r,"schemeCategory20b",function(){return nn}),n.d(r,"scaleBand",function(){return band}),n.d(r,"scaleTime",function(){return Jt});var i={};n.r(i),n.d(i,"schemeDark2",function(){return cn}),n.d(i,"schemePaired",function(){return sn}),n.d(i,"schemeAccent",function(){return un}),n.d(i,"schemePastel1",function(){return ln}),n.d(i,"schemePastel2",function(){return fn}),n.d(i,"schemeSet1",function(){return hn}),n.d(i,"schemeSet2",function(){return dn}),n.d(i,"schemeSet3",function(){return pn}),n.d(i,"schemeBlues",function(){return zn}),n.d(i,"schemeBrBG",function(){return gn}),n.d(i,"schemePRGn",function(){return mn}),n.d(i,"schemePiYG",function(){return _n}),n.d(i,"interpolateBrBG",function(){return vn}),n.d(i,"interpolatePRGn",function(){return bn}),n.d(i,"interpolatePiYG",function(){return xn}),n.d(i,"interpolatePuOr",function(){return wn}),n.d(i,"interpolateRdBu",function(){return kn}),n.d(i,"interpolateRdGy",function(){return Cn}),n.d(i,"interpolateRdYlBu",function(){return Sn}),n.d(i,"interpolateRdYlGn",function(){return Pn}),n.d(i,"interpolateSpectral",function(){return An}),n.d(i,"interpolateBlues",function(){return Hn}),n.d(i,"interpolateGreens",function(){return Vn}),n.d(i,"interpolateGreys",function(){return Un}),n.d(i,"interpolateOranges",function(){return Gn}),n.d(i,"interpolatePurples",function(){return Wn}),n.d(i,"interpolateReds",function(){return qn}),n.d(i,"interpolateViridis",function(){return Zn}),n.d(i,"interpolateInferno",function(){return er}),n.d(i,"interpolateMagma",function(){return Jn}),n.d(i,"interpolatePlasma",function(){return tr}),n.d(i,"interpolateWarm",function(){return Xn}),n.d(i,"interpolateCool",function(){return Kn}),n.d(i,"interpolateCubehelixDefault",function(){return Yn}),n.d(i,"interpolateBuGn",function(){return En}),n.d(i,"interpolateBuPu",function(){return Mn}),n.d(i,"interpolateGnBu",function(){return On}),n.d(i,"interpolateOrRd",function(){return Tn}),n.d(i,"interpolatePuBuGn",function(){return Fn}),n.d(i,"interpolatePuBu",function(){return Nn}),n.d(i,"interpolatePuRd",function(){return jn}),n.d(i,"interpolateRdPu",function(){return In}),n.d(i,"interpolateYlGnBu",function(){return Dn}),n.d(i,"interpolateYlGn",function(){return Ln}),n.d(i,"interpolateYlOrBr",function(){return Rn}),n.d(i,"interpolateYlOrRd",function(){return Bn}),n.d(i,"interpolateRainbow",function(){return Qn});var a={};n.r(a),n.d(a,"DRAG",function(){return Qo}),n.d(a,"HOVER",function(){return Zo}),n.d(a,"SELECTIONDRAG",function(){return Jo}),n.d(a,"CLICK",function(){return eu}),n.d(a,"LONGTOUCH",function(){return tu}),n.d(a,"TOUCHDRAG",function(){return nu}),n.d(a,"ALL_ACTIONS",function(){return ru});var o={};n.r(o),n.d(o,"SELECTION_NEW_ENTRY",function(){return iu}),n.d(o,"SELECTION_NEW_EXIT",function(){return au}),n.d(o,"SELECTION_NULL",function(){return ou}),n.d(o,"SELECTION_OLD_ENTRY",function(){return uu}),n.d(o,"SELECTION_OLD_EXIT",function(){return cu});var u={};n.r(u),n.d(u,"BRUSH",function(){return wu}),n.d(u,"HIGHLIGHT",function(){return ku}),n.d(u,"TOOLTIP",function(){return Cu}),n.d(u,"FILTER",function(){return Su}),n.d(u,"SELECT",function(){return Pu});var c={};n.r(c),n.d(c,"HighlightBeahviour",function(){return Eu}),n.d(c,"BrushBehaviour",function(){return Ou}),n.d(c,"FilterBehaviour",function(){return Fu}),n.d(c,"SelectBehaviour",function(){return Lu});var s={};n.r(s),n.d(s,"SelectionBox",function(){return Ju}),n.d(s,"Tooltip",function(){return gc}),n.d(s,"Crossline",function(){return mc}),n.d(s,"PlotHighlighter",function(){return xc}),n.d(s,"FilterEffect",function(){return kc}),n.d(s,"PersistentAnchors",function(){return Ec}),n.d(s,"BrushAnchors",function(){return Tc}),n.d(s,"AnchorEffect",function(){return Pc});var l={};n.r(l),n.d(l,"BOTTOM",function(){return Gc}),n.d(l,"TOP",function(){return Yc}),n.d(l,"LEFT",function(){return Xc}),n.d(l,"RIGHT",function(){return Kc}),n.d(l,"axisOrientationMap",function(){return $c});var f={};n.r(f),n.d(f,"LINEAR",function(){return Qc}),n.d(f,"BAND",function(){return Zc}),n.d(f,"TIME",function(){return Jc}),n.d(f,"COLOR",function(){return es}),n.d(f,"ORDINAL",function(){return ts}),n.d(f,"QUANTIZE",function(){return ns}),n.d(f,"QUANTILE",function(){return rs}),n.d(f,"LOG",function(){return is}),n.d(f,"POW",function(){return as}),n.d(f,"IDENTITY",function(){return os}),n.d(f,"SEQUENTIAL",function(){return us}),n.d(f,"THRESHOLD",function(){return cs});var h={};n.r(h),n.d(h,"CONFIG",function(){return ad}),n.d(h,"DATA",function(){return od}),n.d(h,"AXES",function(){return ud}),n.d(h,"LAYERDEFS",function(){return cd}),n.d(h,"WIDTH",function(){return sd}),n.d(h,"HEIGHT",function(){return ld}),n.d(h,"MOUNT",function(){return fd}),n.d(h,"primaryXAxisUpdated",function(){return hd}),n.d(h,"primaryYAxisUpdated",function(){return dd}),n.d(h,"secondaryXAxisUpdated",function(){return pd}),n.d(h,"secondaryYAxisUpdated",function(){return yd}),n.d(h,"TRANSFORM",function(){return gd}),n.d(h,"DATADOMAIN",function(){return vd}),n.d(h,"LAYERSCREATED",function(){return md}),n.d(h,"FIELDS",function(){return bd}),n.d(h,"TIMEDIFFS",function(){return _d}),n.d(h,"LAYERAXISINDEX",function(){return xd});var d={};n.r(d),n.d(d,"SelectBehaviour",function(){return wp});var y={};n.r(y),n.d(y,"SelectionBox",function(){return zp}),n.d(y,"LegendHighlighter",function(){return Up});var g={};n.r(g),n.d(g,"share",function(){return Oy}),n.d(g,"html",function(){return operators_html});var v=function(e,t){return et?1:e>=t?0:NaN},m=function(e){return 1===e.length&&(e=function ascendingComparator(e){return function(t,n){return v(e(t),n)}}(e)),{left:function left(t,n,r,i){for(null==r&&(r=0),null==i&&(i=t.length);r>>1;e(t[a],n)<0?r=a+1:i=a}return r},right:function right(t,n,r,i){for(null==r&&(r=0),null==i&&(i=t.length);r>>1;e(t[a],n)>0?i=a:r=a+1}return r}}};var b=m(v),_=b.right,x=(b.left,_);var w=function(e){return null===e?NaN:+e},k=Array.prototype,C=(k.slice,k.map,function(e,t,n){e=+e,t=+t,n=(i=arguments.length)<2?(t=e,e=0,1):i<3?1:+n;for(var r=-1,i=0|Math.max(0,Math.ceil((t-e)/n)),a=new Array(i);++r0)return[e];if((r=t0)for(e=Math.ceil(e/o),t=Math.floor(t/o),a=new Array(i=Math.ceil(t-e+1));++u=0?(a>=S?10:a>=P?5:a>=A?2:1)*Math.pow(10,i):-Math.pow(10,-i)/(a>=S?10:a>=P?5:a>=A?2:1)}function tickStep(e,t,n){var r=Math.abs(t-e)/Math.max(0,n),i=Math.pow(10,Math.floor(Math.log(r)/Math.LN10)),a=r/i;return a>=S?i*=10:a>=P?i*=5:a>=A&&(i*=2),t=1)return+n(e[r-1],r-1,e);var r,i=(r-1)*t,a=Math.floor(i),o=+n(e[a],a,e);return o+(+n(e[a+1],a+1,e)-o)*(i-a)}};function map_Map(){}function map_map(e,t){var n=new map_Map;if(e instanceof map_Map)e.each(function(e,t){n.set(t,e)});else if(Array.isArray(e)){var r,i=-1,a=e.length;if(null==t)for(;++i=r.length)return null!=e&&n.sort(e),null!=t?t(n):n;for(var u,c,s,l=-1,f=n.length,h=r[i++],d=O(),p=a();++lr.length)return e;var a,o=i[n-1];return null!=t&&n>=r.length?a=e.entries():(a=[],e.each(function(e,t){a.push({key:t,values:_entries(e,n)})})),null!=o?a.sort(function(e,t){return o(e.key,t.key)}):a}(apply(e,0,createMap,setMap),0)},key:function key(e){return r.push(e),n},sortKeys:function sortKeys(e){return i[r.length-1]=e,n},sortValues:function sortValues(t){return e=t,n},rollup:function rollup(e){return t=e,n}}};function createObject(){return{}}function setObject(e,t,n){e[t]=n}function createMap(){return O()}function setMap(e,t,n){e.set(t,n)}function set_Set(){}var F=O.prototype;function set_set(e,t){var n=new set_Set;if(e instanceof set_Set)e.each(function(e){n.add(e)});else if(e){var r=-1,i=e.length;if(null==t)for(;++r1?+t:s,f=a[1]a[1-f]))return n=Math.max(0,getClosestIndexOf(h,s)),c=getClosestIndexOf(h,l),o=s===l?n:Math.max(n,c-1),f&&(u=n,n=d-o,o=d-u),n>o?void 0:r().slice(n,o+1)},n.invert=function(e,t){var n,o,u=+e,c=arguments.length>1?+t:u,s=a[1]a[1-s]))return n=Math.max(0,getClosestIndexOf(l,u,"left")),r()[s?f-n:n]},rescale()}function getClosestIndexOf(e,t,n){for(var r,i,a,o=0,u=e.length-1;ot?0===u?u:"left"===n?u-1:u:u===e.length-1?u:"left"===n?u:u+1:u}var L=function(e,t,n){e.prototype=t.prototype=n,n.constructor=e};function extend(e,t){var n=Object.create(e.prototype);for(var r in t)n[r]=t[r];return n}function Color(){}var R="\\s*([+-]?\\d+)\\s*",B="\\s*([+-]?\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)\\s*",z="\\s*([+-]?\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)%\\s*",H=/^#([0-9a-f]{3})$/,V=/^#([0-9a-f]{6})$/,U=new RegExp("^rgb\\("+[R,R,R]+"\\)$"),W=new RegExp("^rgb\\("+[z,z,z]+"\\)$"),q=new RegExp("^rgba\\("+[R,R,R,B]+"\\)$"),G=new RegExp("^rgba\\("+[z,z,z,B]+"\\)$"),Y=new RegExp("^hsl\\("+[B,z,z]+"\\)$"),X=new RegExp("^hsla\\("+[B,z,z,B]+"\\)$"),K={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};function color_color(e){var t;return e=(e+"").trim().toLowerCase(),(t=H.exec(e))?new Rgb((t=parseInt(t[1],16))>>8&15|t>>4&240,t>>4&15|240&t,(15&t)<<4|15&t,1):(t=V.exec(e))?rgbn(parseInt(t[1],16)):(t=U.exec(e))?new Rgb(t[1],t[2],t[3],1):(t=W.exec(e))?new Rgb(255*t[1]/100,255*t[2]/100,255*t[3]/100,1):(t=q.exec(e))?rgba(t[1],t[2],t[3],t[4]):(t=G.exec(e))?rgba(255*t[1]/100,255*t[2]/100,255*t[3]/100,t[4]):(t=Y.exec(e))?hsla(t[1],t[2]/100,t[3]/100,1):(t=X.exec(e))?hsla(t[1],t[2]/100,t[3]/100,t[4]):K.hasOwnProperty(e)?rgbn(K[e]):"transparent"===e?new Rgb(NaN,NaN,NaN,0):null}function rgbn(e){return new Rgb(e>>16&255,e>>8&255,255&e,1)}function rgba(e,t,n,r){return r<=0&&(e=t=n=NaN),new Rgb(e,t,n,r)}function rgbConvert(e){return e instanceof Color||(e=color_color(e)),e?new Rgb((e=e.rgb()).r,e.g,e.b,e.opacity):new Rgb}function color_rgb(e,t,n,r){return 1===arguments.length?rgbConvert(e):new Rgb(e,t,n,null==r?1:r)}function Rgb(e,t,n,r){this.r=+e,this.g=+t,this.b=+n,this.opacity=+r}function _hex(e){return((e=Math.max(0,Math.min(255,Math.round(e)||0)))<16?"0":"")+e.toString(16)}function hsla(e,t,n,r){return r<=0?e=t=n=NaN:n<=0||n>=1?e=t=NaN:t<=0&&(e=NaN),new Hsl(e,t,n,r)}function hsl(e,t,n,r){return 1===arguments.length?function hslConvert(e){if(e instanceof Hsl)return new Hsl(e.h,e.s,e.l,e.opacity);if(e instanceof Color||(e=color_color(e)),!e)return new Hsl;if(e instanceof Hsl)return e;var t=(e=e.rgb()).r/255,n=e.g/255,r=e.b/255,i=Math.min(t,n,r),a=Math.max(t,n,r),o=NaN,u=a-i,c=(a+i)/2;return u?(o=t===a?(n-r)/u+6*(n0&&c<1?0:o,new Hsl(o,u,c,e.opacity)}(e):new Hsl(e,t,n,null==r?1:r)}function Hsl(e,t,n,r){this.h=+e,this.s=+t,this.l=+n,this.opacity=+r}function hsl2rgb(e,t,n){return 255*(e<60?t+(n-t)*e/60:e<180?n:e<240?t+(n-t)*(240-e)/60:t)}L(Color,color_color,{displayable:function displayable(){return this.rgb().displayable()},hex:function hex(){return this.rgb().hex()},toString:function toString(){return this.rgb()+""}}),L(Rgb,color_rgb,extend(Color,{brighter:function brighter(e){return e=null==e?1/.7:Math.pow(1/.7,e),new Rgb(this.r*e,this.g*e,this.b*e,this.opacity)},darker:function darker(e){return e=null==e?.7:Math.pow(.7,e),new Rgb(this.r*e,this.g*e,this.b*e,this.opacity)},rgb:function rgb(){return this},displayable:function displayable(){return 0<=this.r&&this.r<=255&&0<=this.g&&this.g<=255&&0<=this.b&&this.b<=255&&0<=this.opacity&&this.opacity<=1},hex:function hex(){return"#"+_hex(this.r)+_hex(this.g)+_hex(this.b)},toString:function toString(){var e=this.opacity;return(1===(e=isNaN(e)?1:Math.max(0,Math.min(1,e)))?"rgb(":"rgba(")+Math.max(0,Math.min(255,Math.round(this.r)||0))+", "+Math.max(0,Math.min(255,Math.round(this.g)||0))+", "+Math.max(0,Math.min(255,Math.round(this.b)||0))+(1===e?")":", "+e+")")}})),L(Hsl,hsl,extend(Color,{brighter:function brighter(e){return e=null==e?1/.7:Math.pow(1/.7,e),new Hsl(this.h,this.s,this.l*e,this.opacity)},darker:function darker(e){return e=null==e?.7:Math.pow(.7,e),new Hsl(this.h,this.s,this.l*e,this.opacity)},rgb:function rgb(){var e=this.h%360+360*(this.h<0),t=isNaN(e)||isNaN(this.s)?0:this.s,n=this.l,r=n+(n<.5?n:1-n)*t,i=2*n-r;return new Rgb(hsl2rgb(e>=240?e-240:e+120,i,r),hsl2rgb(e,i,r),hsl2rgb(e<120?e+240:e-120,i,r),this.opacity)},displayable:function displayable(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1}}));var $=Math.PI/180,Q=180/Math.PI,Z=.96422,J=1,ee=.82521,te=4/29,ne=6/29,re=3*ne*ne,ie=ne*ne*ne;function labConvert(e){if(e instanceof Lab)return new Lab(e.l,e.a,e.b,e.opacity);if(e instanceof Hcl){if(isNaN(e.h))return new Lab(e.l,0,0,e.opacity);var t=e.h*$;return new Lab(e.l,Math.cos(t)*e.c,Math.sin(t)*e.c,e.opacity)}e instanceof Rgb||(e=rgbConvert(e));var n,r,i=rgb2lrgb(e.r),a=rgb2lrgb(e.g),o=rgb2lrgb(e.b),u=xyz2lab((.2225045*i+.7168786*a+.0606169*o)/J);return i===a&&a===o?n=r=u:(n=xyz2lab((.4360747*i+.3850649*a+.1430804*o)/Z),r=xyz2lab((.0139322*i+.0971045*a+.7141733*o)/ee)),new Lab(116*u-16,500*(n-u),200*(u-r),e.opacity)}function lab(e,t,n,r){return 1===arguments.length?labConvert(e):new Lab(e,t,n,null==r?1:r)}function Lab(e,t,n,r){this.l=+e,this.a=+t,this.b=+n,this.opacity=+r}function xyz2lab(e){return e>ie?Math.pow(e,1/3):e/re+te}function lab2xyz(e){return e>ne?e*e*e:re*(e-te)}function lrgb2rgb(e){return 255*(e<=.0031308?12.92*e:1.055*Math.pow(e,1/2.4)-.055)}function rgb2lrgb(e){return(e/=255)<=.04045?e/12.92:Math.pow((e+.055)/1.055,2.4)}function hclConvert(e){if(e instanceof Hcl)return new Hcl(e.h,e.c,e.l,e.opacity);if(e instanceof Lab||(e=labConvert(e)),0===e.a&&0===e.b)return new Hcl(NaN,0,e.l,e.opacity);var t=Math.atan2(e.b,e.a)*Q;return new Hcl(t<0?t+360:t,Math.sqrt(e.a*e.a+e.b*e.b),e.l,e.opacity)}function hcl(e,t,n,r){return 1===arguments.length?hclConvert(e):new Hcl(e,t,n,null==r?1:r)}function Hcl(e,t,n,r){this.h=+e,this.c=+t,this.l=+n,this.opacity=+r}L(Lab,lab,extend(Color,{brighter:function brighter(e){return new Lab(this.l+18*(null==e?1:e),this.a,this.b,this.opacity)},darker:function darker(e){return new Lab(this.l-18*(null==e?1:e),this.a,this.b,this.opacity)},rgb:function rgb(){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 new Rgb(lrgb2rgb(3.1338561*(t=Z*lab2xyz(t))-1.6168667*(e=J*lab2xyz(e))-.4906146*(n=ee*lab2xyz(n))),lrgb2rgb(-.9787684*t+1.9161415*e+.033454*n),lrgb2rgb(.0719453*t-.2289914*e+1.4052427*n),this.opacity)}})),L(Hcl,hcl,extend(Color,{brighter:function brighter(e){return new Hcl(this.h,this.c,this.l+18*(null==e?1:e),this.opacity)},darker:function darker(e){return new Hcl(this.h,this.c,this.l-18*(null==e?1:e),this.opacity)},rgb:function rgb(){return labConvert(this).rgb()}}));var ae=-.14861,oe=1.78277,ue=-.29227,ce=-.90649,se=1.97294,le=se*ce,fe=se*oe,he=oe*ue-ce*ae;function cubehelix_cubehelix(e,t,n,r){return 1===arguments.length?function cubehelixConvert(e){if(e instanceof Cubehelix)return new Cubehelix(e.h,e.s,e.l,e.opacity);e instanceof Rgb||(e=rgbConvert(e));var t=e.r/255,n=e.g/255,r=e.b/255,i=(he*r+le*t-fe*n)/(he+le-fe),a=r-i,o=(se*(n-i)-ue*a)/ce,u=Math.sqrt(o*o+a*a)/(se*i*(1-i)),c=u?Math.atan2(o,a)*Q-120:NaN;return new Cubehelix(c<0?c+360:c,u,i,e.opacity)}(e):new Cubehelix(e,t,n,null==r?1:r)}function Cubehelix(e,t,n,r){this.h=+e,this.s=+t,this.l=+n,this.opacity=+r}function basis(e,t,n,r,i){var a=e*e,o=a*e;return((1-3*e+3*a-o)*t+(4-6*a+3*o)*n+(1+3*e+3*a-3*o)*r+o*i)/6}L(Cubehelix,cubehelix_cubehelix,extend(Color,{brighter:function brighter(e){return e=null==e?1/.7:Math.pow(1/.7,e),new Cubehelix(this.h,this.s,this.l*e,this.opacity)},darker:function darker(e){return e=null==e?.7:Math.pow(.7,e),new Cubehelix(this.h,this.s,this.l*e,this.opacity)},rgb:function rgb(){var e=isNaN(this.h)?0:(this.h+120)*$,t=+this.l,n=isNaN(this.s)?0:this.s*t*(1-t),r=Math.cos(e),i=Math.sin(e);return new Rgb(255*(t+n*(ae*r+oe*i)),255*(t+n*(ue*r+ce*i)),255*(t+n*(se*r)),this.opacity)}}));var de=function(e){return function(){return e}};function linear(e,t){return function(n){return e+n*t}}function color_hue(e,t){var n=t-e;return n?linear(e,n>180||n<-180?n-360*Math.round(n/360):n):de(isNaN(e)?t:e)}function gamma(e){return 1==(e=+e)?nogamma:function(t,n){return n-t?function exponential(e,t,n){return e=Math.pow(e,n),t=Math.pow(t,n)-e,n=1/n,function(r){return Math.pow(e+r*t,n)}}(t,n,e):de(isNaN(t)?n:t)}}function nogamma(e,t){var n=t-e;return n?linear(e,n):de(isNaN(e)?t:e)}var pe=function rgbGamma(e){var t=gamma(e);function rgb(e,n){var r=t((e=color_rgb(e)).r,(n=color_rgb(n)).r),i=t(e.g,n.g),a=t(e.b,n.b),o=nogamma(e.opacity,n.opacity);return function(t){return e.r=r(t),e.g=i(t),e.b=a(t),e.opacity=o(t),e+""}}return rgb.gamma=rgbGamma,rgb}(1);function rgbSpline(e){return function(t){var n,r,i=t.length,a=new Array(i),o=new Array(i),u=new Array(i);for(n=0;n=1?(n=1,t-1):Math.floor(n*t),i=e[r],a=e[r+1],o=r>0?e[r-1]:2*i-a,u=ra&&(i=t.slice(a,i),u[o]?u[o]+=i:u[++o]=i),(n=n[0])===(r=r[0])?u[o]?u[o]+=r:u[++o]=r:(u[++o]=null,c.push({i:o,x:ge(n,r)})),a=be.lastIndex;return a180?t+=360:t-e>180&&(e+=360),i.push({i:n.push(pop(n)+"rotate(",null,r)-2,x:ge(e,t)})):t&&n.push(pop(n)+"rotate("+t+r)}(i.rotate,a.rotate,o,u),function skewX(e,t,n,i){e!==t?i.push({i:n.push(pop(n)+"skewX(",null,r)-2,x:ge(e,t)}):t&&n.push(pop(n)+"skewX("+t+r)}(i.skewX,a.skewX,o,u),function scale(e,t,n,r,i,a){if(e!==n||t!==r){var o=i.push(pop(i)+"scale(",null,",",null,")");a.push({i:o-4,x:ge(e,n)},{i:o-2,x:ge(t,r)})}else 1===n&&1===r||i.push(pop(i)+"scale("+n+","+r+")")}(i.scaleX,i.scaleY,a.scaleX,a.scaleY,o,u),i=a=null,function(e){for(var t,n=-1,r=u.length;++n2?polymap:bimap,r=i=null,scale}function scale(t){return(r||(r=n(a,o,c?function deinterpolateClamp(e){return function(t,n){var r=e(t=+t,n=+n);return function(e){return e<=t?0:e>=n?1:r(e)}}}(e):e,u)))(+t)}return scale.invert=function(e){return(i||(i=n(o,a,deinterpolateLinear,c?function reinterpolateClamp(e){return function(t,n){var r=e(t=+t,n=+n);return function(e){return e<=0?t:e>=1?n:r(e)}}}(t):t)))(+e)},scale.domain=function(e){return arguments.length?(a=j.call(e,De),rescale()):a.slice()},scale.range=function(e){return arguments.length?(o=I.call(e),rescale()):o.slice()},scale.rangeRound=function(e){return o=I.call(e),u=Ae,rescale()},scale.clamp=function(e){return arguments.length?(c=!!e,rescale()):c},scale.interpolate=function(e){return arguments.length?(u=e,rescale()):u},rescale()}var Re=function(e,t){if((n=(e=t?e.toExponential(t-1):e.toExponential()).indexOf("e"))<0)return null;var n,r=e.slice(0,n);return[r.length>1?r[0]+r.slice(2):r,+e.slice(n+1)]},Be=function(e){return(e=Re(Math.abs(e)))?e[1]:NaN},ze=/^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;function formatSpecifier(e){return new FormatSpecifier(e)}function FormatSpecifier(e){if(!(t=ze.exec(e)))throw new Error("invalid format: "+e);var t;this.fill=t[1]||" ",this.align=t[2]||">",this.sign=t[3]||"-",this.symbol=t[4]||"",this.zero=!!t[5],this.width=t[6]&&+t[6],this.comma=!!t[7],this.precision=t[8]&&+t[8].slice(1),this.trim=!!t[9],this.type=t[10]||""}formatSpecifier.prototype=FormatSpecifier.prototype,FormatSpecifier.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.trim?"~":"")+this.type};var He,Ve,Ue,We,qe=function(e){e:for(var t,n=e.length,r=1,i=-1;r0){if(!+e[r])break e;i=0}}return i>0?e.slice(0,i)+e.slice(t+1):e},Ge=function(e,t){var n=Re(e,t);if(!n)return e+"";var r=n[0],i=n[1];return i<0?"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")},Ye={"%":function _(e,t){return(100*e).toFixed(t)},b:function b(e){return Math.round(e).toString(2)},c:function c(e){return e+""},d:function d(e){return Math.round(e).toString(10)},e:function e(t,n){return t.toExponential(n)},f:function f(e,t){return e.toFixed(t)},g:function g(e,t){return e.toPrecision(t)},o:function o(e){return Math.round(e).toString(8)},p:function p(e,t){return Ge(100*e,t)},r:Ge,s:function(e,t){var n=Re(e,t);if(!n)return e+"";var r=n[0],i=n[1],a=i-(He=3*Math.max(-8,Math.min(8,Math.floor(i/3))))+1,o=r.length;return a===o?r:a>o?r+new Array(a-o+1).join("0"):a>0?r.slice(0,a)+"."+r.slice(a):"0."+new Array(1-a).join("0")+Re(e,Math.max(0,t+a-1))[0]},X:function X(e){return Math.round(e).toString(16).toUpperCase()},x:function x(e){return Math.round(e).toString(16)}},Xe=function(e){return e},Ke=["y","z","a","f","p","n","µ","m","","k","M","G","T","P","E","Z","Y"],$e=function(e){var t=e.grouping&&e.thousands?function(e,t){return function(n,r){for(var i=n.length,a=[],o=0,u=e[0],c=0;i>0&&u>0&&(c+u+1>r&&(u=Math.max(1,r-c)),a.push(n.substring(i-=u,i+u)),!((c+=u+1)>r));)u=e[o=(o+1)%e.length];return a.reverse().join(t)}}(e.grouping,e.thousands):Xe,n=e.currency,r=e.decimal,i=e.numerals?function(e){return function(t){return t.replace(/[0-9]/g,function(t){return e[+t]})}}(e.numerals):Xe,a=e.percent||"%";function newFormat(e){var o=(e=formatSpecifier(e)).fill,u=e.align,c=e.sign,s=e.symbol,l=e.zero,f=e.width,h=e.comma,d=e.precision,p=e.trim,y=e.type;"n"===y?(h=!0,y="g"):Ye[y]||(null==d&&(d=12),p=!0,y="g"),(l||"0"===o&&"="===u)&&(l=!0,o="0",u="=");var g="$"===s?n[0]:"#"===s&&/[boxX]/.test(y)?"0"+y.toLowerCase():"",v="$"===s?n[1]:/[%p]/.test(y)?a:"",m=Ye[y],b=/[defgprs%]/.test(y);function format(e){var n,a,s,_=g,x=v;if("c"===y)x=m(e)+x,e="";else{var w=(e=+e)<0;if(e=m(Math.abs(e),d),p&&(e=qe(e)),w&&0==+e&&(w=!1),_=(w?"("===c?c:"-":"-"===c||"("===c?"":c)+_,x=("s"===y?Ke[8+He/3]:"")+x+(w&&"("===c?")":""),b)for(n=-1,a=e.length;++n(s=e.charCodeAt(n))||s>57){x=(46===s?r+e.slice(n+1):e.slice(n))+x,e=e.slice(0,n);break}}h&&!l&&(e=t(e,1/0));var k=_.length+e.length+x.length,C=k>1)+_+e+x+C.slice(k);break;default:e=C+_+e+x}return i(e)}return d=null==d?6:/[gprs]/.test(y)?Math.max(1,Math.min(21,d)):Math.max(0,Math.min(20,d)),format.toString=function(){return e+""},format}return{format:newFormat,formatPrefix:function formatPrefix(e,t){var n=newFormat(((e=formatSpecifier(e)).type="f",e)),r=3*Math.max(-8,Math.min(8,Math.floor(Be(t)/3))),i=Math.pow(10,-r),a=Ke[8+r/3];return function(e){return n(i*e)+a}}}};!function defaultLocale(e){return Ve=$e(e),Ue=Ve.format,We=Ve.formatPrefix,Ve}({decimal:".",thousands:",",grouping:[3],currency:["$",""]});var Qe=function(e,t,n){var r,i=e[0],a=e[e.length-1],o=tickStep(i,a,null==t?10:t);switch((n=formatSpecifier(null==n?",f":n)).type){case"s":var u=Math.max(Math.abs(i),Math.abs(a));return null!=n.precision||isNaN(r=function(e,t){return Math.max(0,3*Math.max(-8,Math.min(8,Math.floor(Be(t)/3)))-Be(Math.abs(e)))}(o,u))||(n.precision=r),We(n,u);case"":case"e":case"g":case"p":case"r":null!=n.precision||isNaN(r=function(e,t){return e=Math.abs(e),t=Math.abs(t)-e,Math.max(0,Be(t)-Be(e))+1}(o,Math.max(Math.abs(i),Math.abs(a))))||(n.precision=r-("e"===n.type));break;case"f":case"%":null!=n.precision||isNaN(r=function(e){return Math.max(0,-Be(Math.abs(e)))}(o))||(n.precision=r-2*("%"===n.type))}return Ue(n)};function linearish(e){var t=e.domain;return e.ticks=function(e){var n=t();return E(n[0],n[n.length-1],null==e?10:e)},e.tickFormat=function(e,n){return Qe(t(),e,n)},e.nice=function(n){null==n&&(n=10);var r,i=t(),a=0,o=i.length-1,u=i[a],c=i[o];return c0?r=tickIncrement(u=Math.floor(u/r)*r,c=Math.ceil(c/r)*r,n):r<0&&(r=tickIncrement(u=Math.ceil(u*r)/r,c=Math.floor(c*r)/r,n)),r>0?(i[a]=Math.floor(u/r)*r,i[o]=Math.ceil(c/r)*r,t(i)):r<0&&(i[a]=Math.ceil(u*r)/r,i[o]=Math.floor(c*r)/r,t(i)),e},e}function linear_linear(){var e=continuous(deinterpolateLinear,ge);return e.copy=function(){return copy(e,linear_linear())},linearish(e)}function identity_identity(){var e=[0,1];function scale(e){return+e}return scale.invert=scale,scale.domain=scale.range=function(t){return arguments.length?(e=j.call(t,De),scale):e.slice()},scale.copy=function(){return identity_identity().domain(e)},linearish(scale)}var Ze=function(e,t){var n,r=0,i=(e=e.slice()).length-1,a=e[r],o=e[i];return o0){for(;hc)break;y.push(f)}}else for(;h=1;--l)if(!((f=s*l)c)break;y.push(f)}}else y=E(h,d,Math.min(d-h,p)).map(i);return a?y.reverse():y},e.tickFormat=function(t,a){if(null==a&&(a=10===n?".0e":","),"function"!=typeof a&&(a=Ue(a)),t===1/0)return a;null==t&&(t=10);var o=Math.max(1,n*t/e.ticks().length);return function(e){var t=e/i(Math.round(r(e)));return t*n0?n[i-1]:e[0],i=n?[r[n-1],t]:[r[o-1],r[o]]},scale.copy=function(){return quantize_quantize().domain([e,t]).range(i)},linearish(scale)}function threshold_threshold(){var e=[.5],t=[0,1],n=1;function scale(r){if(r<=r)return t[x(e,r,0,n)]}return scale.domain=function(r){return arguments.length?(e=I.call(r),n=Math.min(e.length,t.length-1),scale):e.slice()},scale.range=function(r){return arguments.length?(t=I.call(r),n=Math.min(e.length,t.length-1),scale):t.slice()},scale.invertExtent=function(n){var r=t.indexOf(n);return[e[r-1],e[r]]},scale.copy=function(){return threshold_threshold().domain(e).range(t)},scale}var Je=new Date,et=new Date;function newInterval(e,t,n,r){function interval(t){return e(t=new Date(+t)),t}return interval.floor=interval,interval.ceil=function(n){return e(n=new Date(n-1)),t(n,1),e(n),n},interval.round=function(e){var t=interval(e),n=interval.ceil(e);return e-t0))return o;do{o.push(a=new Date(+n)),t(n,i),e(n)}while(a=t)for(;e(t),!n(t);)t.setTime(t-1)},function(e,r){if(e>=e)if(r<0)for(;++r<=0;)for(;t(e,-1),!n(e););else for(;--r>=0;)for(;t(e,1),!n(e););})},n&&(interval.count=function(t,r){return Je.setTime(+t),et.setTime(+r),e(Je),e(et),Math.floor(n(Je,et))},interval.every=function(e){return e=Math.floor(e),isFinite(e)&&e>0?e>1?interval.filter(r?function(t){return r(t)%e==0}:function(t){return interval.count(0,t)%e==0}):interval:null}),interval}var tt=newInterval(function(){},function(e,t){e.setTime(+e+t)},function(e,t){return t-e});tt.every=function(e){return e=Math.floor(e),isFinite(e)&&e>0?e>1?newInterval(function(t){t.setTime(Math.floor(t/e)*e)},function(t,n){t.setTime(+t+n*e)},function(t,n){return(n-t)/e}):tt:null};var nt=tt,rt=(tt.range,6e4),it=6048e5,at=newInterval(function(e){e.setTime(1e3*Math.floor(e/1e3))},function(e,t){e.setTime(+e+1e3*t)},function(e,t){return(t-e)/1e3},function(e){return e.getUTCSeconds()}),ot=at,ut=(at.range,newInterval(function(e){e.setTime(Math.floor(e/rt)*rt)},function(e,t){e.setTime(+e+t*rt)},function(e,t){return(t-e)/rt},function(e){return e.getMinutes()})),ct=ut,st=(ut.range,newInterval(function(e){var t=e.getTimezoneOffset()*rt%36e5;t<0&&(t+=36e5),e.setTime(36e5*Math.floor((+e-t)/36e5)+t)},function(e,t){e.setTime(+e+36e5*t)},function(e,t){return(t-e)/36e5},function(e){return e.getHours()})),lt=st,ft=(st.range,newInterval(function(e){e.setHours(0,0,0,0)},function(e,t){e.setDate(e.getDate()+t)},function(e,t){return(t-e-(t.getTimezoneOffset()-e.getTimezoneOffset())*rt)/864e5},function(e){return e.getDate()-1})),ht=ft;ft.range;function weekday(e){return newInterval(function(t){t.setDate(t.getDate()-(t.getDay()+7-e)%7),t.setHours(0,0,0,0)},function(e,t){e.setDate(e.getDate()+7*t)},function(e,t){return(t-e-(t.getTimezoneOffset()-e.getTimezoneOffset())*rt)/it})}var dt=weekday(0),pt=weekday(1),yt=weekday(2),gt=weekday(3),vt=weekday(4),mt=weekday(5),bt=weekday(6),_t=(dt.range,pt.range,yt.range,gt.range,vt.range,mt.range,bt.range,newInterval(function(e){e.setDate(1),e.setHours(0,0,0,0)},function(e,t){e.setMonth(e.getMonth()+t)},function(e,t){return t.getMonth()-e.getMonth()+12*(t.getFullYear()-e.getFullYear())},function(e){return e.getMonth()})),xt=_t,wt=(_t.range,newInterval(function(e){e.setMonth(0,1),e.setHours(0,0,0,0)},function(e,t){e.setFullYear(e.getFullYear()+t)},function(e,t){return t.getFullYear()-e.getFullYear()},function(e){return e.getFullYear()}));wt.every=function(e){return isFinite(e=Math.floor(e))&&e>0?newInterval(function(t){t.setFullYear(Math.floor(t.getFullYear()/e)*e),t.setMonth(0,1),t.setHours(0,0,0,0)},function(t,n){t.setFullYear(t.getFullYear()+n*e)}):null};var kt=wt,Ct=(wt.range,newInterval(function(e){e.setUTCSeconds(0,0)},function(e,t){e.setTime(+e+t*rt)},function(e,t){return(t-e)/rt},function(e){return e.getUTCMinutes()})),St=(Ct.range,newInterval(function(e){e.setUTCMinutes(0,0,0)},function(e,t){e.setTime(+e+36e5*t)},function(e,t){return(t-e)/36e5},function(e){return e.getUTCHours()})),Pt=(St.range,newInterval(function(e){e.setUTCHours(0,0,0,0)},function(e,t){e.setUTCDate(e.getUTCDate()+t)},function(e,t){return(t-e)/864e5},function(e){return e.getUTCDate()-1})),At=Pt;Pt.range;function utcWeekday(e){return newInterval(function(t){t.setUTCDate(t.getUTCDate()-(t.getUTCDay()+7-e)%7),t.setUTCHours(0,0,0,0)},function(e,t){e.setUTCDate(e.getUTCDate()+7*t)},function(e,t){return(t-e)/it})}var Et=utcWeekday(0),Mt=utcWeekday(1),Ot=utcWeekday(2),Tt=utcWeekday(3),Ft=utcWeekday(4),Nt=utcWeekday(5),jt=utcWeekday(6),It=(Et.range,Mt.range,Ot.range,Tt.range,Ft.range,Nt.range,jt.range,newInterval(function(e){e.setUTCDate(1),e.setUTCHours(0,0,0,0)},function(e,t){e.setUTCMonth(e.getUTCMonth()+t)},function(e,t){return t.getUTCMonth()-e.getUTCMonth()+12*(t.getUTCFullYear()-e.getUTCFullYear())},function(e){return e.getUTCMonth()})),Dt=(It.range,newInterval(function(e){e.setUTCMonth(0,1),e.setUTCHours(0,0,0,0)},function(e,t){e.setUTCFullYear(e.getUTCFullYear()+t)},function(e,t){return t.getUTCFullYear()-e.getUTCFullYear()},function(e){return e.getUTCFullYear()}));Dt.every=function(e){return isFinite(e=Math.floor(e))&&e>0?newInterval(function(t){t.setUTCFullYear(Math.floor(t.getUTCFullYear()/e)*e),t.setUTCMonth(0,1),t.setUTCHours(0,0,0,0)},function(t,n){t.setUTCFullYear(t.getUTCFullYear()+n*e)}):null};var Lt=Dt;Dt.range;function localDate(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 utcDate(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 newYear(e){return{y:e,m:0,d:1,H:0,M:0,S:0,L:0}}var Rt,Bt,zt,Ht,Vt={"-":"",_:" ",0:"0"},Ut=/^\s*\d+/,Wt=/^%/,qt=/[\\^$*+?|[\]().{}]/g;function locale_pad(e,t,n){var r=e<0?"-":"",i=(r?-e:e)+"",a=i.length;return r+(a68?1900:2e3),n+r[0].length):-1}function parseZone(e,t,n){var r=/^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(t.slice(n,n+6));return r?(e.Z=r[1]?0:-(r[2]+(r[3]||"00")),n+r[0].length):-1}function parseMonthNumber(e,t,n){var r=Ut.exec(t.slice(n,n+2));return r?(e.m=r[0]-1,n+r[0].length):-1}function parseDayOfMonth(e,t,n){var r=Ut.exec(t.slice(n,n+2));return r?(e.d=+r[0],n+r[0].length):-1}function parseDayOfYear(e,t,n){var r=Ut.exec(t.slice(n,n+3));return r?(e.m=0,e.d=+r[0],n+r[0].length):-1}function parseHour24(e,t,n){var r=Ut.exec(t.slice(n,n+2));return r?(e.H=+r[0],n+r[0].length):-1}function parseMinutes(e,t,n){var r=Ut.exec(t.slice(n,n+2));return r?(e.M=+r[0],n+r[0].length):-1}function parseSeconds(e,t,n){var r=Ut.exec(t.slice(n,n+2));return r?(e.S=+r[0],n+r[0].length):-1}function parseMilliseconds(e,t,n){var r=Ut.exec(t.slice(n,n+3));return r?(e.L=+r[0],n+r[0].length):-1}function parseMicroseconds(e,t,n){var r=Ut.exec(t.slice(n,n+6));return r?(e.L=Math.floor(r[0]/1e3),n+r[0].length):-1}function parseLiteralPercent(e,t,n){var r=Wt.exec(t.slice(n,n+1));return r?n+r[0].length:-1}function parseUnixTimestamp(e,t,n){var r=Ut.exec(t.slice(n));return r?(e.Q=+r[0],n+r[0].length):-1}function parseUnixTimestampSeconds(e,t,n){var r=Ut.exec(t.slice(n));return r?(e.Q=1e3*+r[0],n+r[0].length):-1}function formatDayOfMonth(e,t){return locale_pad(e.getDate(),t,2)}function formatHour24(e,t){return locale_pad(e.getHours(),t,2)}function formatHour12(e,t){return locale_pad(e.getHours()%12||12,t,2)}function formatDayOfYear(e,t){return locale_pad(1+ht.count(kt(e),e),t,3)}function formatMilliseconds(e,t){return locale_pad(e.getMilliseconds(),t,3)}function formatMicroseconds(e,t){return formatMilliseconds(e,t)+"000"}function formatMonthNumber(e,t){return locale_pad(e.getMonth()+1,t,2)}function formatMinutes(e,t){return locale_pad(e.getMinutes(),t,2)}function formatSeconds(e,t){return locale_pad(e.getSeconds(),t,2)}function formatWeekdayNumberMonday(e){var t=e.getDay();return 0===t?7:t}function formatWeekNumberSunday(e,t){return locale_pad(dt.count(kt(e),e),t,2)}function formatWeekNumberISO(e,t){var n=e.getDay();return e=n>=4||0===n?vt(e):vt.ceil(e),locale_pad(vt.count(kt(e),e)+(4===kt(e).getDay()),t,2)}function formatWeekdayNumberSunday(e){return e.getDay()}function formatWeekNumberMonday(e,t){return locale_pad(pt.count(kt(e),e),t,2)}function locale_formatYear(e,t){return locale_pad(e.getFullYear()%100,t,2)}function formatFullYear(e,t){return locale_pad(e.getFullYear()%1e4,t,4)}function formatZone(e){var t=e.getTimezoneOffset();return(t>0?"-":(t*=-1,"+"))+locale_pad(t/60|0,"0",2)+locale_pad(t%60,"0",2)}function formatUTCDayOfMonth(e,t){return locale_pad(e.getUTCDate(),t,2)}function formatUTCHour24(e,t){return locale_pad(e.getUTCHours(),t,2)}function formatUTCHour12(e,t){return locale_pad(e.getUTCHours()%12||12,t,2)}function formatUTCDayOfYear(e,t){return locale_pad(1+At.count(Lt(e),e),t,3)}function formatUTCMilliseconds(e,t){return locale_pad(e.getUTCMilliseconds(),t,3)}function formatUTCMicroseconds(e,t){return formatUTCMilliseconds(e,t)+"000"}function formatUTCMonthNumber(e,t){return locale_pad(e.getUTCMonth()+1,t,2)}function formatUTCMinutes(e,t){return locale_pad(e.getUTCMinutes(),t,2)}function formatUTCSeconds(e,t){return locale_pad(e.getUTCSeconds(),t,2)}function formatUTCWeekdayNumberMonday(e){var t=e.getUTCDay();return 0===t?7:t}function formatUTCWeekNumberSunday(e,t){return locale_pad(Et.count(Lt(e),e),t,2)}function formatUTCWeekNumberISO(e,t){var n=e.getUTCDay();return e=n>=4||0===n?Ft(e):Ft.ceil(e),locale_pad(Ft.count(Lt(e),e)+(4===Lt(e).getUTCDay()),t,2)}function formatUTCWeekdayNumberSunday(e){return e.getUTCDay()}function formatUTCWeekNumberMonday(e,t){return locale_pad(Mt.count(Lt(e),e),t,2)}function formatUTCYear(e,t){return locale_pad(e.getUTCFullYear()%100,t,2)}function formatUTCFullYear(e,t){return locale_pad(e.getUTCFullYear()%1e4,t,4)}function formatUTCZone(){return"+0000"}function formatLiteralPercent(){return"%"}function formatUnixTimestamp(e){return+e}function formatUnixTimestampSeconds(e){return Math.floor(+e/1e3)}!function defaultLocale_defaultLocale(e){return Rt=function formatLocale(e){var t=e.dateTime,n=e.date,r=e.time,i=e.periods,a=e.days,o=e.shortDays,u=e.months,c=e.shortMonths,s=formatRe(i),l=formatLookup(i),f=formatRe(a),h=formatLookup(a),d=formatRe(o),p=formatLookup(o),y=formatRe(u),g=formatLookup(u),v=formatRe(c),m=formatLookup(c),b={a:function formatShortWeekday(e){return o[e.getDay()]},A:function formatWeekday(e){return a[e.getDay()]},b:function formatShortMonth(e){return c[e.getMonth()]},B:function formatMonth(e){return u[e.getMonth()]},c:null,d:formatDayOfMonth,e:formatDayOfMonth,f:formatMicroseconds,H:formatHour24,I:formatHour12,j:formatDayOfYear,L:formatMilliseconds,m:formatMonthNumber,M:formatMinutes,p:function formatPeriod(e){return i[+(e.getHours()>=12)]},Q:formatUnixTimestamp,s:formatUnixTimestampSeconds,S:formatSeconds,u:formatWeekdayNumberMonday,U:formatWeekNumberSunday,V:formatWeekNumberISO,w:formatWeekdayNumberSunday,W:formatWeekNumberMonday,x:null,X:null,y:locale_formatYear,Y:formatFullYear,Z:formatZone,"%":formatLiteralPercent},_={a:function formatUTCShortWeekday(e){return o[e.getUTCDay()]},A:function formatUTCWeekday(e){return a[e.getUTCDay()]},b:function formatUTCShortMonth(e){return c[e.getUTCMonth()]},B:function formatUTCMonth(e){return u[e.getUTCMonth()]},c:null,d:formatUTCDayOfMonth,e:formatUTCDayOfMonth,f:formatUTCMicroseconds,H:formatUTCHour24,I:formatUTCHour12,j:formatUTCDayOfYear,L:formatUTCMilliseconds,m:formatUTCMonthNumber,M:formatUTCMinutes,p:function formatUTCPeriod(e){return i[+(e.getUTCHours()>=12)]},Q:formatUnixTimestamp,s:formatUnixTimestampSeconds,S:formatUTCSeconds,u:formatUTCWeekdayNumberMonday,U:formatUTCWeekNumberSunday,V:formatUTCWeekNumberISO,w:formatUTCWeekdayNumberSunday,W:formatUTCWeekNumberMonday,x:null,X:null,y:formatUTCYear,Y:formatUTCFullYear,Z:formatUTCZone,"%":formatLiteralPercent},x={a:function parseShortWeekday(e,t,n){var r=d.exec(t.slice(n));return r?(e.w=p[r[0].toLowerCase()],n+r[0].length):-1},A:function parseWeekday(e,t,n){var r=f.exec(t.slice(n));return r?(e.w=h[r[0].toLowerCase()],n+r[0].length):-1},b:function parseShortMonth(e,t,n){var r=v.exec(t.slice(n));return r?(e.m=m[r[0].toLowerCase()],n+r[0].length):-1},B:function parseMonth(e,t,n){var r=y.exec(t.slice(n));return r?(e.m=g[r[0].toLowerCase()],n+r[0].length):-1},c:function parseLocaleDateTime(e,n,r){return parseSpecifier(e,t,n,r)},d:parseDayOfMonth,e:parseDayOfMonth,f:parseMicroseconds,H:parseHour24,I:parseHour24,j:parseDayOfYear,L:parseMilliseconds,m:parseMonthNumber,M:parseMinutes,p:function parsePeriod(e,t,n){var r=s.exec(t.slice(n));return r?(e.p=l[r[0].toLowerCase()],n+r[0].length):-1},Q:parseUnixTimestamp,s:parseUnixTimestampSeconds,S:parseSeconds,u:parseWeekdayNumberMonday,U:parseWeekNumberSunday,V:parseWeekNumberISO,w:parseWeekdayNumberSunday,W:parseWeekNumberMonday,x:function parseLocaleDate(e,t,r){return parseSpecifier(e,n,t,r)},X:function parseLocaleTime(e,t,n){return parseSpecifier(e,r,t,n)},y:parseYear,Y:parseFullYear,Z:parseZone,"%":parseLiteralPercent};function newFormat(e,t){return function(n){var r,i,a,o=[],u=-1,c=0,s=e.length;for(n instanceof Date||(n=new Date(+n));++u53)return null;"w"in a||(a.w=1),"Z"in a?(r=(i=(r=utcDate(newYear(a.y))).getUTCDay())>4||0===i?Mt.ceil(r):Mt(r),r=At.offset(r,7*(a.V-1)),a.y=r.getUTCFullYear(),a.m=r.getUTCMonth(),a.d=r.getUTCDate()+(a.w+6)%7):(r=(i=(r=t(newYear(a.y))).getDay())>4||0===i?pt.ceil(r):pt(r),r=ht.offset(r,7*(a.V-1)),a.y=r.getFullYear(),a.m=r.getMonth(),a.d=r.getDate()+(a.w+6)%7)}else("W"in a||"U"in a)&&("w"in a||(a.w="u"in a?a.u%7:"W"in a?1:0),i="Z"in a?utcDate(newYear(a.y)).getUTCDay():t(newYear(a.y)).getDay(),a.m=0,a.d="W"in a?(a.w+6)%7+7*a.W-(i+5)%7:a.w+7*a.U-(i+6)%7);return"Z"in a?(a.H+=a.Z/100|0,a.M+=a.Z%100,utcDate(a)):t(a)}}function parseSpecifier(e,t,n,r){for(var i,a,o=0,u=t.length,c=n.length;o=c)return-1;if(37===(i=t.charCodeAt(o++))){if(i=t.charAt(o++),!(a=x[i in Vt?t.charAt(o++):i])||(r=a(e,n,r))<0)return-1}else if(i!=n.charCodeAt(r++))return-1}return r}return b.x=newFormat(n,b),b.X=newFormat(r,b),b.c=newFormat(t,b),_.x=newFormat(n,_),_.X=newFormat(r,_),_.c=newFormat(t,_),{format:function format(e){var t=newFormat(e+="",b);return t.toString=function(){return e},t},parse:function parse(e){var t=newParse(e+="",localDate);return t.toString=function(){return e},t},utcFormat:function utcFormat(e){var t=newFormat(e+="",_);return t.toString=function(){return e},t},utcParse:function utcParse(e){var t=newParse(e,utcDate);return t.toString=function(){return e},t}}}(e),Bt=Rt.format,Rt.parse,zt=Rt.utcFormat,Ht=Rt.utcParse,Rt}({dateTime:"%x, %X",date:"%-m/%-d/%Y",time:"%-I:%M:%S %p",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"]});Date.prototype.toISOString||zt("%Y-%m-%dT%H:%M:%S.%LZ");+new Date("2000-01-01T00:00:00.000Z")||Ht("%Y-%m-%dT%H:%M:%S.%LZ");var Gt=1e3,Yt=60*Gt,Xt=60*Yt,Kt=24*Xt,$t=7*Kt,Qt=30*Kt,Zt=365*Kt;function time_date(e){return new Date(e)}function time_number(e){return e instanceof Date?+e:+new Date(+e)}function calendar(e,t,n,r,i,a,o,u,c){var s=continuous(deinterpolateLinear,ge),l=s.invert,f=s.domain,h=c(".%L"),d=c(":%S"),p=c("%I:%M"),y=c("%I %p"),g=c("%a %d"),v=c("%b %d"),b=c("%B"),_=c("%Y"),x=[[o,1,Gt],[o,5,5*Gt],[o,15,15*Gt],[o,30,30*Gt],[a,1,Yt],[a,5,5*Yt],[a,15,15*Yt],[a,30,30*Yt],[i,1,Xt],[i,3,3*Xt],[i,6,6*Xt],[i,12,12*Xt],[r,1,Kt],[r,2,2*Kt],[n,1,$t],[t,1,Qt],[t,3,3*Qt],[e,1,Zt]];function tickFormat(u){return(o(u)1)&&(e-=Math.floor(e));var t=Math.abs(e-.5);return $n.h=360*e-100,$n.s=1.5-1.5*t,$n.l=.8-.9*t,$n+""};color_rgb(),Math.PI,Math.PI;function viridis_ramp(e){var t=e.length;return function(n){return e[Math.max(0,Math.min(t-1,Math.floor(n*t)))]}}var Zn=viridis_ramp(an("44015444025645045745055946075a46085c460a5d460b5e470d60470e6147106347116447136548146748166848176948186a481a6c481b6d481c6e481d6f481f70482071482173482374482475482576482677482878482979472a7a472c7a472d7b472e7c472f7d46307e46327e46337f463480453581453781453882443983443a83443b84433d84433e85423f854240864241864142874144874045884046883f47883f48893e49893e4a893e4c8a3d4d8a3d4e8a3c4f8a3c508b3b518b3b528b3a538b3a548c39558c39568c38588c38598c375a8c375b8d365c8d365d8d355e8d355f8d34608d34618d33628d33638d32648e32658e31668e31678e31688e30698e306a8e2f6b8e2f6c8e2e6d8e2e6e8e2e6f8e2d708e2d718e2c718e2c728e2c738e2b748e2b758e2a768e2a778e2a788e29798e297a8e297b8e287c8e287d8e277e8e277f8e27808e26818e26828e26828e25838e25848e25858e24868e24878e23888e23898e238a8d228b8d228c8d228d8d218e8d218f8d21908d21918c20928c20928c20938c1f948c1f958b1f968b1f978b1f988b1f998a1f9a8a1e9b8a1e9c891e9d891f9e891f9f881fa0881fa1881fa1871fa28720a38620a48621a58521a68522a78522a88423a98324aa8325ab8225ac8226ad8127ad8128ae8029af7f2ab07f2cb17e2db27d2eb37c2fb47c31b57b32b67a34b67935b77937b87838b9773aba763bbb753dbc743fbc7340bd7242be7144bf7046c06f48c16e4ac16d4cc26c4ec36b50c46a52c56954c56856c66758c7655ac8645cc8635ec96260ca6063cb5f65cb5e67cc5c69cd5b6ccd5a6ece5870cf5773d05675d05477d1537ad1517cd2507fd34e81d34d84d44b86d54989d5488bd6468ed64590d74393d74195d84098d83e9bd93c9dd93ba0da39a2da37a5db36a8db34aadc32addc30b0dd2fb2dd2db5de2bb8de29bade28bddf26c0df25c2df23c5e021c8e020cae11fcde11dd0e11cd2e21bd5e21ad8e219dae319dde318dfe318e2e418e5e419e7e419eae51aece51befe51cf1e51df4e61ef6e620f8e621fbe723fde725")),Jn=viridis_ramp(an("00000401000501010601010802010902020b02020d03030f03031204041405041606051806051a07061c08071e0907200a08220b09240c09260d0a290e0b2b100b2d110c2f120d31130d34140e36150e38160f3b180f3d19103f1a10421c10441d11471e114920114b21114e22115024125325125527125829115a2a115c2c115f2d11612f116331116533106734106936106b38106c390f6e3b0f703d0f713f0f72400f74420f75440f764510774710784910784a10794c117a4e117b4f127b51127c52137c54137d56147d57157e59157e5a167e5c167f5d177f5f187f601880621980641a80651a80671b80681c816a1c816b1d816d1d816e1e81701f81721f817320817521817621817822817922827b23827c23827e24828025828125818326818426818627818827818928818b29818c29818e2a81902a81912b81932b80942c80962c80982d80992d809b2e7f9c2e7f9e2f7fa02f7fa1307ea3307ea5317ea6317da8327daa337dab337cad347cae347bb0357bb2357bb3367ab5367ab73779b83779ba3878bc3978bd3977bf3a77c03a76c23b75c43c75c53c74c73d73c83e73ca3e72cc3f71cd4071cf4070d0416fd2426fd3436ed5446dd6456cd8456cd9466bdb476adc4869de4968df4a68e04c67e24d66e34e65e44f64e55064e75263e85362e95462ea5661eb5760ec5860ed5a5fee5b5eef5d5ef05f5ef1605df2625df2645cf3655cf4675cf4695cf56b5cf66c5cf66e5cf7705cf7725cf8745cf8765cf9785df9795df97b5dfa7d5efa7f5efa815ffb835ffb8560fb8761fc8961fc8a62fc8c63fc8e64fc9065fd9266fd9467fd9668fd9869fd9a6afd9b6bfe9d6cfe9f6dfea16efea36ffea571fea772fea973feaa74feac76feae77feb078feb27afeb47bfeb67cfeb77efeb97ffebb81febd82febf84fec185fec287fec488fec68afec88cfeca8dfecc8ffecd90fecf92fed194fed395fed597fed799fed89afdda9cfddc9efddea0fde0a1fde2a3fde3a5fde5a7fde7a9fde9aafdebacfcecaefceeb0fcf0b2fcf2b4fcf4b6fcf6b8fcf7b9fcf9bbfcfbbdfcfdbf")),er=viridis_ramp(an("00000401000501010601010802010a02020c02020e03021004031204031405041706041907051b08051d09061f0a07220b07240c08260d08290e092b10092d110a30120a32140b34150b37160b39180c3c190c3e1b0c411c0c431e0c451f0c48210c4a230c4c240c4f260c51280b53290b552b0b572d0b592f0a5b310a5c320a5e340a5f3609613809623909633b09643d09653e0966400a67420a68440a68450a69470b6a490b6a4a0c6b4c0c6b4d0d6c4f0d6c510e6c520e6d540f6d550f6d57106e59106e5a116e5c126e5d126e5f136e61136e62146e64156e65156e67166e69166e6a176e6c186e6d186e6f196e71196e721a6e741a6e751b6e771c6d781c6d7a1d6d7c1d6d7d1e6d7f1e6c801f6c82206c84206b85216b87216b88226a8a226a8c23698d23698f24699025689225689326679526679727669827669a28659b29649d29649f2a63a02a63a22b62a32c61a52c60a62d60a82e5fa92e5eab2f5ead305dae305cb0315bb1325ab3325ab43359b63458b73557b93556ba3655bc3754bd3853bf3952c03a51c13a50c33b4fc43c4ec63d4dc73e4cc83f4bca404acb4149cc4248ce4347cf4446d04545d24644d34743d44842d54a41d74b3fd84c3ed94d3dda4e3cdb503bdd513ade5238df5337e05536e15635e25734e35933e45a31e55c30e65d2fe75e2ee8602de9612bea632aeb6429eb6628ec6726ed6925ee6a24ef6c23ef6e21f06f20f1711ff1731df2741cf3761bf37819f47918f57b17f57d15f67e14f68013f78212f78410f8850ff8870ef8890cf98b0bf98c0af98e09fa9008fa9207fa9407fb9606fb9706fb9906fb9b06fb9d07fc9f07fca108fca309fca50afca60cfca80dfcaa0ffcac11fcae12fcb014fcb216fcb418fbb61afbb81dfbba1ffbbc21fbbe23fac026fac228fac42afac62df9c72ff9c932f9cb35f8cd37f8cf3af7d13df7d340f6d543f6d746f5d949f5db4cf4dd4ff4df53f4e156f3e35af3e55df2e661f2e865f2ea69f1ec6df1ed71f1ef75f1f179f2f27df2f482f3f586f3f68af4f88ef5f992f6fa96f8fb9af9fc9dfafda1fcffa4")),tr=viridis_ramp(an("0d088710078813078916078a19068c1b068d1d068e20068f2206902406912605912805922a05932c05942e05952f059631059733059735049837049938049a3a049a3c049b3e049c3f049c41049d43039e44039e46039f48039f4903a04b03a14c02a14e02a25002a25102a35302a35502a45601a45801a45901a55b01a55c01a65e01a66001a66100a76300a76400a76600a76700a86900a86a00a86c00a86e00a86f00a87100a87201a87401a87501a87701a87801a87a02a87b02a87d03a87e03a88004a88104a78305a78405a78606a68707a68808a68a09a58b0aa58d0ba58e0ca48f0da4910ea3920fa39410a29511a19613a19814a099159f9a169f9c179e9d189d9e199da01a9ca11b9ba21d9aa31e9aa51f99a62098a72197a82296aa2395ab2494ac2694ad2793ae2892b02991b12a90b22b8fb32c8eb42e8db52f8cb6308bb7318ab83289ba3388bb3488bc3587bd3786be3885bf3984c03a83c13b82c23c81c33d80c43e7fc5407ec6417dc7427cc8437bc9447aca457acb4679cc4778cc4977cd4a76ce4b75cf4c74d04d73d14e72d24f71d35171d45270d5536fd5546ed6556dd7566cd8576bd9586ada5a6ada5b69db5c68dc5d67dd5e66de5f65de6164df6263e06363e16462e26561e26660e3685fe4695ee56a5de56b5de66c5ce76e5be76f5ae87059e97158e97257ea7457eb7556eb7655ec7754ed7953ed7a52ee7b51ef7c51ef7e50f07f4ff0804ef1814df1834cf2844bf3854bf3874af48849f48948f58b47f58c46f68d45f68f44f79044f79143f79342f89441f89540f9973ff9983ef99a3efa9b3dfa9c3cfa9e3bfb9f3afba139fba238fca338fca537fca636fca835fca934fdab33fdac33fdae32fdaf31fdb130fdb22ffdb42ffdb52efeb72dfeb82cfeba2cfebb2bfebd2afebe2afec029fdc229fdc328fdc527fdc627fdc827fdca26fdcb26fccd25fcce25fcd025fcd225fbd324fbd524fbd724fad824fada24f9dc24f9dd25f8df25f8e125f7e225f7e425f6e626f6e826f5e926f5eb27f4ed27f3ee27f3f027f2f227f1f426f1f525f0f724f0f921")),nr={ROW_ID:"__id__"},rr={ACTION_INF:"actionInf",ON_LAYER_DRAW:"onlayerdraw"},ir=n(0),ar=n.n(ir),or=Array.prototype.slice,ur=function(e){return e},cr=1,sr=2,lr=3,fr=4,hr=1e-6;function translateX(e){return"translate("+(e+.5)+",0)"}function translateY(e){return"translate(0,"+(e+.5)+")"}function entering(){return!this.__axis}function axis_axis(e,t){var n=[],r=null,i=null,a=null,o=6,u=6,c=3,s=e===cr||e===fr?-1:1,l=e===fr||e===sr?"x":"y",f=e===cr||e===lr?translateX:translateY;function axis(h){var d=null==r?t.ticks?t.ticks.apply(t,n):t.domain():r,p=null==i?t.tickFormat?t.tickFormat.apply(t,n):ur:i,y=Math.max(o,0)+c,g=t.range(),v=+g[0]+.5,m=+g[g.length-1]+.5,b=(t.bandwidth?function axis_center(e){var t=Math.max(0,e.bandwidth()-1)/2;return e.round()&&(t=Math.round(t)),function(n){return+e(n)+t}}:function axis_number(e){return function(t){return+e(t)}})(t.copy()),_=h.selection?h.selection():h,x=_.selectAll(".domain").data([null]),w=_.selectAll(".tick").data(d,t).order(),k=w.exit(),C=w.enter().append("g").attr("class","tick"),S=w.select("line"),P=w.select("text");x=x.merge(x.enter().insert("path",".tick").attr("class","domain").attr("stroke","#000")),w=w.merge(C),S=S.merge(C.append("line").attr("stroke","#000").attr(l+"2",s*o)),P=P.merge(C.append("text").attr("fill","#000").attr(l,s*y).attr("dy",e===cr?"0em":e===lr?"0.71em":"0.32em")).style("transform",a),h!==_&&(x=x.transition(h),w=w.transition(h),S=S.transition(h),P=P.transition(h),k=k.transition(h).attr("opacity",hr).attr("transform",function(e){return isFinite(e=b(e))?f(e):this.getAttribute("transform")}),C.attr("opacity",hr).attr("transform",function(e){var t=this.parentNode.__axis;return f(t&&isFinite(t=t(e))?t:b(e))})),k.remove(),x.attr("d",e===fr||e==sr?"M"+s*u+","+v+"H0.5V"+m+"H"+s*u:"M"+v+","+s*u+"V0.5H"+m+"V"+s*u),w.attr("opacity",1).attr("transform",function(e){return f(b(e))}),S.attr(l+"2",s*o),P.attr(l,s*y).text(p),_.filter(entering).attr("fill","none").attr("font-size",10).attr("font-family","sans-serif").attr("text-anchor",e===sr?"start":e===fr?"end":"middle"),_.each(function(){this.__axis=b})}return axis.scale=function(e){return arguments.length?(t=e,axis):t},axis.tickTransform=function(e){return arguments.length?(a=e,axis):a},axis.ticks=function(){return n=or.call(arguments),axis},axis.tickArguments=function(e){return arguments.length?(n=null==e?[]:or.call(e),axis):n.slice()},axis.tickValues=function(e){return arguments.length?(r=null==e?null:or.call(e),axis):r&&r.slice()},axis.tickFormat=function(e){return arguments.length?(i=e,axis):i},axis.tickSize=function(e){return arguments.length?(o=u=+e,axis):o},axis.tickSizeInner=function(e){return arguments.length?(o=+e,axis):o},axis.tickSizeOuter=function(e){return arguments.length?(u=+e,axis):u},axis.tickPadding=function(e){return arguments.length?(c=+e,axis):c},axis}var dr=Math.PI,pr=2*dr,yr=pr-1e-6;function Path(){this._x0=this._y0=this._x1=this._y1=null,this._=""}function path_path(){return new Path}Path.prototype=path_path.prototype={constructor:Path,moveTo:function moveTo(e,t){this._+="M"+(this._x0=this._x1=+e)+","+(this._y0=this._y1=+t)},closePath:function closePath(){null!==this._x1&&(this._x1=this._x0,this._y1=this._y0,this._+="Z")},lineTo:function lineTo(e,t){this._+="L"+(this._x1=+e)+","+(this._y1=+t)},quadraticCurveTo:function quadraticCurveTo(e,t,n,r){this._+="Q"+ +e+","+ +t+","+(this._x1=+n)+","+(this._y1=+r)},bezierCurveTo:function bezierCurveTo(e,t,n,r,i,a){this._+="C"+ +e+","+ +t+","+ +n+","+ +r+","+(this._x1=+i)+","+(this._y1=+a)},arcTo:function arcTo(e,t,n,r,i){e=+e,t=+t,n=+n,r=+r,i=+i;var a=this._x1,o=this._y1,u=n-e,c=r-t,s=a-e,l=o-t,f=s*s+l*l;if(i<0)throw new Error("negative radius: "+i);if(null===this._x1)this._+="M"+(this._x1=e)+","+(this._y1=t);else if(f>1e-6)if(Math.abs(l*u-c*s)>1e-6&&i){var h=n-a,d=r-o,p=u*u+c*c,y=h*h+d*d,g=Math.sqrt(p),v=Math.sqrt(f),m=i*Math.tan((dr-Math.acos((p+f-y)/(2*g*v)))/2),b=m/v,_=m/g;Math.abs(b-1)>1e-6&&(this._+="L"+(e+b*s)+","+(t+b*l)),this._+="A"+i+","+i+",0,0,"+ +(l*h>s*d)+","+(this._x1=e+_*u)+","+(this._y1=t+_*c)}else this._+="L"+(this._x1=e)+","+(this._y1=t);else;},arc:function arc(e,t,n,r,i,a){e=+e,t=+t;var o=(n=+n)*Math.cos(r),u=n*Math.sin(r),c=e+o,s=t+u,l=1^a,f=a?r-i:i-r;if(n<0)throw new Error("negative radius: "+n);null===this._x1?this._+="M"+c+","+s:(Math.abs(this._x1-c)>1e-6||Math.abs(this._y1-s)>1e-6)&&(this._+="L"+c+","+s),n&&(f<0&&(f=f%pr+pr),f>yr?this._+="A"+n+","+n+",0,1,"+l+","+(e-o)+","+(t-u)+"A"+n+","+n+",0,1,"+l+","+(this._x1=c)+","+(this._y1=s):f>1e-6&&(this._+="A"+n+","+n+",0,"+ +(f>=dr)+","+l+","+(this._x1=e+n*Math.cos(i))+","+(this._y1=t+n*Math.sin(i))))},rect:function rect(e,t,n,r){this._+="M"+(this._x0=this._x1=+e)+","+(this._y0=this._y1=+t)+"h"+ +n+"v"+ +r+"h"+-n+"Z"},toString:function toString(){return this._}};var gr=path_path,vr=function(e){return function constant(){return e}},mr=Math.abs,br=Math.atan2,_r=Math.cos,xr=Math.max,wr=Math.min,kr=Math.sin,Cr=Math.sqrt,Sr=1e-12,Pr=Math.PI,Ar=Pr/2,Er=2*Pr;function asin(e){return e>=1?Ar:e<=-1?-Ar:Math.asin(e)}function arcInnerRadius(e){return e.innerRadius}function arcOuterRadius(e){return e.outerRadius}function arcStartAngle(e){return e.startAngle}function arcEndAngle(e){return e.endAngle}function arcPadAngle(e){return e&&e.padAngle}function cornerTangents(e,t,n,r,i,a,o){var u=e-n,c=t-r,s=(o?a:-a)/Cr(u*u+c*c),l=s*c,f=-s*u,h=e+l,d=t+f,p=n+l,y=r+f,g=(h+p)/2,v=(d+y)/2,m=p-h,b=y-d,_=m*m+b*b,x=i-a,w=h*y-p*d,k=(b<0?-1:1)*Cr(xr(0,x*x*_-w*w)),C=(w*b-m*k)/_,S=(-w*m-b*k)/_,P=(w*b+m*k)/_,A=(-w*m+b*k)/_,E=C-g,M=S-v,O=P-g,T=A-v;return E*E+M*M>O*O+T*T&&(C=P,S=A),{cx:C,cy:S,x01:-l,y01:-f,x11:C*(i/x-1),y11:S*(i/x-1)}}function Linear(e){this._context=e}Linear.prototype={areaStart:function areaStart(){this._line=0},areaEnd:function areaEnd(){this._line=NaN},lineStart:function lineStart(){this._point=0},lineEnd:function lineEnd(){(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function point(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;default:this._context.lineTo(e,t)}}};var Mr=function(e){return new Linear(e)};function point_x(e){return e[0]}function point_y(e){return e[1]}var Or=function(){var e=point_x,t=point_y,n=vr(!0),r=null,i=Mr,a=null;function line(o){var u,c,s,l=o.length,f=!1;for(null==r&&(a=i(s=gr())),u=0;u<=l;++u)!(u=l;--f)u.point(g[f],v[f]);u.lineEnd(),u.areaEnd()}y&&(g[s]=+e(h,s,c),v[s]=+n(h,s,c),u.point(t?+t(h,s,c):g[s],r?+r(h,s,c):v[s]))}if(d)return u=null,d+""||null}function arealine(){return Or().defined(i).curve(o).context(a)}return area.x=function(n){return arguments.length?(e="function"==typeof n?n:vr(+n),t=null,area):e},area.x0=function(t){return arguments.length?(e="function"==typeof t?t:vr(+t),area):e},area.x1=function(e){return arguments.length?(t=null==e?null:"function"==typeof e?e:vr(+e),area):t},area.y=function(e){return arguments.length?(n="function"==typeof e?e:vr(+e),r=null,area):n},area.y0=function(e){return arguments.length?(n="function"==typeof e?e:vr(+e),area):n},area.y1=function(e){return arguments.length?(r=null==e?null:"function"==typeof e?e:vr(+e),area):r},area.lineX0=area.lineY0=function(){return arealine().x(e).y(n)},area.lineY1=function(){return arealine().x(e).y(r)},area.lineX1=function(){return arealine().x(t).y(n)},area.defined=function(e){return arguments.length?(i="function"==typeof e?e:vr(!!e),area):i},area.curve=function(e){return arguments.length?(o=e,null!=a&&(u=o(a)),area):o},area.context=function(e){return arguments.length?(null==e?a=u=null:u=o(a=e),area):a},area},Fr=function(e,t){return te?1:t>=e?0:NaN},Nr=function(e){return e};curveRadial(Mr);function Radial(e){this._curve=e}function curveRadial(e){function radial(t){return new Radial(e(t))}return radial._curve=e,radial}Radial.prototype={areaStart:function areaStart(){this._curve.areaStart()},areaEnd:function areaEnd(){this._curve.areaEnd()},lineStart:function lineStart(){this._curve.lineStart()},lineEnd:function lineEnd(){this._curve.lineEnd()},point:function point(e,t){this._curve.point(t*Math.sin(e),t*-Math.cos(e))}};var jr=Array.prototype.slice;var Ir={draw:function draw(e,t){var n=Math.sqrt(t/Pr);e.moveTo(n,0),e.arc(0,0,n,0,Er)}},Dr={draw:function draw(e,t){var n=Math.sqrt(t/5)/2;e.moveTo(-3*n,-n),e.lineTo(-n,-n),e.lineTo(-n,-3*n),e.lineTo(n,-3*n),e.lineTo(n,-n),e.lineTo(3*n,-n),e.lineTo(3*n,n),e.lineTo(n,n),e.lineTo(n,3*n),e.lineTo(-n,3*n),e.lineTo(-n,n),e.lineTo(-3*n,n),e.closePath()}},Lr=Math.sqrt(1/3),Rr=2*Lr,Br={draw:function draw(e,t){var n=Math.sqrt(t/Rr),r=n*Lr;e.moveTo(0,-n),e.lineTo(r,0),e.lineTo(0,n),e.lineTo(-r,0),e.closePath()}},zr=Math.sin(Pr/10)/Math.sin(7*Pr/10),Hr=Math.sin(Er/10)*zr,Vr=-Math.cos(Er/10)*zr,Ur={draw:function draw(e,t){var n=Math.sqrt(.8908130915292852*t),r=Hr*n,i=Vr*n;e.moveTo(0,-n),e.lineTo(r,i);for(var a=1;a<5;++a){var o=Er*a/5,u=Math.cos(o),c=Math.sin(o);e.lineTo(c*n,-u*n),e.lineTo(u*r-c*i,c*r+u*i)}e.closePath()}},Wr={draw:function draw(e,t){var n=Math.sqrt(t),r=-n/2;e.rect(r,r,n,n)}},qr=Math.sqrt(3),Gr={draw:function draw(e,t){var n=-Math.sqrt(t/(3*qr));e.moveTo(0,2*n),e.lineTo(-qr*n,-n),e.lineTo(qr*n,-n),e.closePath()}},Yr=Math.sqrt(3)/2,Xr=1/Math.sqrt(12),Kr=3*(Xr/2+1),$r={draw:function draw(e,t){var n=Math.sqrt(t/Kr),r=n/2,i=n*Xr,a=r,o=n*Xr+n,u=-a,c=o;e.moveTo(r,i),e.lineTo(a,o),e.lineTo(u,c),e.lineTo(-.5*r-Yr*i,Yr*r+-.5*i),e.lineTo(-.5*a-Yr*o,Yr*a+-.5*o),e.lineTo(-.5*u-Yr*c,Yr*u+-.5*c),e.lineTo(-.5*r+Yr*i,-.5*i-Yr*r),e.lineTo(-.5*a+Yr*o,-.5*o-Yr*a),e.lineTo(-.5*u+Yr*c,-.5*c-Yr*u),e.closePath()}},Qr=function(){};function _point(e,t,n){e._context.bezierCurveTo((2*e._x0+e._x1)/3,(2*e._y0+e._y1)/3,(e._x0+2*e._x1)/3,(e._y0+2*e._y1)/3,(e._x0+4*e._x1+t)/6,(e._y0+4*e._y1+n)/6)}function Basis(e){this._context=e}Basis.prototype={areaStart:function areaStart(){this._line=0},areaEnd:function areaEnd(){this._line=NaN},lineStart:function lineStart(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function lineEnd(){switch(this._point){case 3:_point(this,this._x1,this._y1);case 2:this._context.lineTo(this._x1,this._y1)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function point(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;break;case 2:this._point=3,this._context.lineTo((5*this._x0+this._x1)/6,(5*this._y0+this._y1)/6);default:_point(this,e,t)}this._x0=this._x1,this._x1=e,this._y0=this._y1,this._y1=t}};function BasisClosed(e){this._context=e}BasisClosed.prototype={areaStart:Qr,areaEnd:Qr,lineStart:function lineStart(){this._x0=this._x1=this._x2=this._x3=this._x4=this._y0=this._y1=this._y2=this._y3=this._y4=NaN,this._point=0},lineEnd:function lineEnd(){switch(this._point){case 1:this._context.moveTo(this._x2,this._y2),this._context.closePath();break;case 2:this._context.moveTo((this._x2+2*this._x3)/3,(this._y2+2*this._y3)/3),this._context.lineTo((this._x3+2*this._x2)/3,(this._y3+2*this._y2)/3),this._context.closePath();break;case 3:this.point(this._x2,this._y2),this.point(this._x3,this._y3),this.point(this._x4,this._y4)}},point:function point(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._x2=e,this._y2=t;break;case 1:this._point=2,this._x3=e,this._y3=t;break;case 2:this._point=3,this._x4=e,this._y4=t,this._context.moveTo((this._x0+4*this._x1+e)/6,(this._y0+4*this._y1+t)/6);break;default:_point(this,e,t)}this._x0=this._x1,this._x1=e,this._y0=this._y1,this._y1=t}};function BasisOpen(e){this._context=e}BasisOpen.prototype={areaStart:function areaStart(){this._line=0},areaEnd:function areaEnd(){this._line=NaN},lineStart:function lineStart(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function lineEnd(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function point(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3;var n=(this._x0+4*this._x1+e)/6,r=(this._y0+4*this._y1+t)/6;this._line?this._context.lineTo(n,r):this._context.moveTo(n,r);break;case 3:this._point=4;default:_point(this,e,t)}this._x0=this._x1,this._x1=e,this._y0=this._y1,this._y1=t}};function Bundle(e,t){this._basis=new Basis(e),this._beta=t}Bundle.prototype={lineStart:function lineStart(){this._x=[],this._y=[],this._basis.lineStart()},lineEnd:function lineEnd(){var e=this._x,t=this._y,n=e.length-1;if(n>0)for(var r,i=e[0],a=t[0],o=e[n]-i,u=t[n]-a,c=-1;++c<=n;)r=c/n,this._basis.point(this._beta*e[c]+(1-this._beta)*(i+r*o),this._beta*t[c]+(1-this._beta)*(a+r*u));this._x=this._y=null,this._basis.lineEnd()},point:function point(e,t){this._x.push(+e),this._y.push(+t)}};(function custom(e){function bundle(t){return 1===e?new Basis(t):new Bundle(t,e)}return bundle.beta=function(e){return custom(+e)},bundle})(.85);function cardinal_point(e,t,n){e._context.bezierCurveTo(e._x1+e._k*(e._x2-e._x0),e._y1+e._k*(e._y2-e._y0),e._x2+e._k*(e._x1-t),e._y2+e._k*(e._y1-n),e._x2,e._y2)}function Cardinal(e,t){this._context=e,this._k=(1-t)/6}Cardinal.prototype={areaStart:function areaStart(){this._line=0},areaEnd:function areaEnd(){this._line=NaN},lineStart:function lineStart(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},lineEnd:function lineEnd(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:cardinal_point(this,this._x1,this._y1)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function point(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2,this._x1=e,this._y1=t;break;case 2:this._point=3;default:cardinal_point(this,e,t)}this._x0=this._x1,this._x1=this._x2,this._x2=e,this._y0=this._y1,this._y1=this._y2,this._y2=t}};(function custom(e){function cardinal(t){return new Cardinal(t,e)}return cardinal.tension=function(e){return custom(+e)},cardinal})(0);function CardinalClosed(e,t){this._context=e,this._k=(1-t)/6}CardinalClosed.prototype={areaStart:Qr,areaEnd:Qr,lineStart:function lineStart(){this._x0=this._x1=this._x2=this._x3=this._x4=this._x5=this._y0=this._y1=this._y2=this._y3=this._y4=this._y5=NaN,this._point=0},lineEnd:function lineEnd(){switch(this._point){case 1:this._context.moveTo(this._x3,this._y3),this._context.closePath();break;case 2:this._context.lineTo(this._x3,this._y3),this._context.closePath();break;case 3:this.point(this._x3,this._y3),this.point(this._x4,this._y4),this.point(this._x5,this._y5)}},point:function point(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._x3=e,this._y3=t;break;case 1:this._point=2,this._context.moveTo(this._x4=e,this._y4=t);break;case 2:this._point=3,this._x5=e,this._y5=t;break;default:cardinal_point(this,e,t)}this._x0=this._x1,this._x1=this._x2,this._x2=e,this._y0=this._y1,this._y1=this._y2,this._y2=t}};(function custom(e){function cardinal(t){return new CardinalClosed(t,e)}return cardinal.tension=function(e){return custom(+e)},cardinal})(0);function CardinalOpen(e,t){this._context=e,this._k=(1-t)/6}CardinalOpen.prototype={areaStart:function areaStart(){this._line=0},areaEnd:function areaEnd(){this._line=NaN},lineStart:function lineStart(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},lineEnd:function lineEnd(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function point(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3,this._line?this._context.lineTo(this._x2,this._y2):this._context.moveTo(this._x2,this._y2);break;case 3:this._point=4;default:cardinal_point(this,e,t)}this._x0=this._x1,this._x1=this._x2,this._x2=e,this._y0=this._y1,this._y1=this._y2,this._y2=t}};(function custom(e){function cardinal(t){return new CardinalOpen(t,e)}return cardinal.tension=function(e){return custom(+e)},cardinal})(0);function catmullRom_point(e,t,n){var r=e._x1,i=e._y1,a=e._x2,o=e._y2;if(e._l01_a>Sr){var u=2*e._l01_2a+3*e._l01_a*e._l12_a+e._l12_2a,c=3*e._l01_a*(e._l01_a+e._l12_a);r=(r*u-e._x0*e._l12_2a+e._x2*e._l01_2a)/c,i=(i*u-e._y0*e._l12_2a+e._y2*e._l01_2a)/c}if(e._l23_a>Sr){var s=2*e._l23_2a+3*e._l23_a*e._l12_a+e._l12_2a,l=3*e._l23_a*(e._l23_a+e._l12_a);a=(a*s+e._x1*e._l23_2a-t*e._l12_2a)/l,o=(o*s+e._y1*e._l23_2a-n*e._l12_2a)/l}e._context.bezierCurveTo(r,i,a,o,e._x2,e._y2)}function CatmullRom(e,t){this._context=e,this._alpha=t}CatmullRom.prototype={areaStart:function areaStart(){this._line=0},areaEnd:function areaEnd(){this._line=NaN},lineStart:function lineStart(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function lineEnd(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:this.point(this._x2,this._y2)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function point(e,t){if(e=+e,t=+t,this._point){var n=this._x2-e,r=this._y2-t;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(n*n+r*r,this._alpha))}switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;break;case 2:this._point=3;default:catmullRom_point(this,e,t)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=e,this._y0=this._y1,this._y1=this._y2,this._y2=t}};var Zr=function custom(e){function catmullRom(t){return e?new CatmullRom(t,e):new Cardinal(t,0)}return catmullRom.alpha=function(e){return custom(+e)},catmullRom}(.5);function CatmullRomClosed(e,t){this._context=e,this._alpha=t}CatmullRomClosed.prototype={areaStart:Qr,areaEnd:Qr,lineStart:function lineStart(){this._x0=this._x1=this._x2=this._x3=this._x4=this._x5=this._y0=this._y1=this._y2=this._y3=this._y4=this._y5=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function lineEnd(){switch(this._point){case 1:this._context.moveTo(this._x3,this._y3),this._context.closePath();break;case 2:this._context.lineTo(this._x3,this._y3),this._context.closePath();break;case 3:this.point(this._x3,this._y3),this.point(this._x4,this._y4),this.point(this._x5,this._y5)}},point:function point(e,t){if(e=+e,t=+t,this._point){var n=this._x2-e,r=this._y2-t;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(n*n+r*r,this._alpha))}switch(this._point){case 0:this._point=1,this._x3=e,this._y3=t;break;case 1:this._point=2,this._context.moveTo(this._x4=e,this._y4=t);break;case 2:this._point=3,this._x5=e,this._y5=t;break;default:catmullRom_point(this,e,t)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=e,this._y0=this._y1,this._y1=this._y2,this._y2=t}};(function custom(e){function catmullRom(t){return e?new CatmullRomClosed(t,e):new CardinalClosed(t,0)}return catmullRom.alpha=function(e){return custom(+e)},catmullRom})(.5);function CatmullRomOpen(e,t){this._context=e,this._alpha=t}CatmullRomOpen.prototype={areaStart:function areaStart(){this._line=0},areaEnd:function areaEnd(){this._line=NaN},lineStart:function lineStart(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function lineEnd(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function point(e,t){if(e=+e,t=+t,this._point){var n=this._x2-e,r=this._y2-t;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(n*n+r*r,this._alpha))}switch(this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3,this._line?this._context.lineTo(this._x2,this._y2):this._context.moveTo(this._x2,this._y2);break;case 3:this._point=4;default:catmullRom_point(this,e,t)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=e,this._y0=this._y1,this._y1=this._y2,this._y2=t}};(function custom(e){function catmullRom(t){return e?new CatmullRomOpen(t,e):new CardinalOpen(t,0)}return catmullRom.alpha=function(e){return custom(+e)},catmullRom})(.5);function LinearClosed(e){this._context=e}LinearClosed.prototype={areaStart:Qr,areaEnd:Qr,lineStart:function lineStart(){this._point=0},lineEnd:function lineEnd(){this._point&&this._context.closePath()},point:function point(e,t){e=+e,t=+t,this._point?this._context.lineTo(e,t):(this._point=1,this._context.moveTo(e,t))}};function monotone_sign(e){return e<0?-1:1}function slope3(e,t,n){var r=e._x1-e._x0,i=t-e._x1,a=(e._y1-e._y0)/(r||i<0&&-0),o=(n-e._y1)/(i||r<0&&-0),u=(a*i+o*r)/(r+i);return(monotone_sign(a)+monotone_sign(o))*Math.min(Math.abs(a),Math.abs(o),.5*Math.abs(u))||0}function slope2(e,t){var n=e._x1-e._x0;return n?(3*(e._y1-e._y0)/n-t)/2:t}function monotone_point(e,t,n){var r=e._x0,i=e._y0,a=e._x1,o=e._y1,u=(a-r)/3;e._context.bezierCurveTo(r+u,i+u*t,a-u,o-u*n,a,o)}function MonotoneX(e){this._context=e}function MonotoneY(e){this._context=new ReflectContext(e)}function ReflectContext(e){this._context=e}function Natural(e){this._context=e}function controlPoints(e){var t,n,r=e.length-1,i=new Array(r),a=new Array(r),o=new Array(r);for(i[0]=0,a[0]=2,o[0]=e[0]+2*e[1],t=1;t=0;--t)i[t]=(o[t]-i[t+1])/a[t];for(a[r-1]=(e[r]+i[r-1])/2,t=0;t=0&&(this._t=1-this._t,this._line=1-this._line)},point:function point(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;default:if(this._t<=0)this._context.lineTo(this._x,t),this._context.lineTo(e,t);else{var n=this._x*(1-this._t)+e*this._t;this._context.lineTo(n,this._y),this._context.lineTo(n,t)}}this._x=e,this._y=t}};var Jr=function(e){return new Step(e,.5)};function stepBefore(e){return new Step(e,0)}function stepAfter(e){return new Step(e,1)}var ei=function(e,t){if((i=e.length)>1)for(var n,r,i,a=1,o=e[t[0]],u=o.length;a=0;)n[t]=t;return n};function stackValue(e,t){return e[t]}var ni=function(e){var t=e.map(ascending_sum);return ti(e).sort(function(e,n){return t[e]-t[n]})};function ascending_sum(e){for(var t,n=0,r=-1,i=e.length;++r0)){if(a/=h,h<0){if(a0){if(a>f)return;a>l&&(l=a)}if(a=r-c,h||!(a<0)){if(a/=h,h<0){if(a>f)return;a>l&&(l=a)}else if(h>0){if(a0)){if(a/=d,d<0){if(a0){if(a>f)return;a>l&&(l=a)}if(a=i-s,d||!(a<0)){if(a/=d,d<0){if(a>f)return;a>l&&(l=a)}else if(d>0){if(a0||f<1)||(l>0&&(e[0]=[c+l*h,s+l*d]),f<1&&(e[1]=[c+f*h,s+f*d]),!0)}}}}}function connectEdge(e,t,n,r,i){var a=e[1];if(a)return!0;var o,u,c=e[0],s=e.left,l=e.right,f=s[0],h=s[1],d=l[0],p=l[1],y=(f+d)/2,g=(h+p)/2;if(p===h){if(y=r)return;if(f>d){if(c){if(c[1]>=i)return}else c=[y,n];a=[y,i]}else{if(c){if(c[1]1)if(f>d){if(c){if(c[1]>=i)return}else c=[(n-u)/o,n];a=[(i-u)/o,i]}else{if(c){if(c[1]=r)return}else c=[t,o*t+u];a=[r,o*r+u]}else{if(c){if(c[0]=-Ai)){var d=c*c+s*s,p=l*l+f*f,y=(f*d-s*p)/h,g=(c*p-l*d)/h,v=_i.pop()||new function Circle(){RedBlackNode(this),this.x=this.y=this.arc=this.site=this.cy=null};v.arc=e,v.site=i,v.x=y+o,v.y=(v.cy=g+u)+Math.sqrt(y*y+g*g),e.circle=v;for(var m=null,b=Ci._;b;)if(v.yPi)u=u.L;else{if(!((i=a-rightBreakPoint(u,o))>Pi)){r>-Pi?(t=u.P,n=u):i>-Pi?(t=u,n=u.N):t=n=u;break}if(!u.R){t=u;break}u=u.R}!function createCell(e){return ki[e.index]={site:e,halfedges:[]}}(e);var c=createBeach(e);if(wi.insert(t,c),t||n){if(t===n)return detachCircle(t),n=createBeach(t.site),wi.insert(c,n),c.edge=n.edge=createEdge(t.site,c.site),attachCircle(t),void attachCircle(n);if(n){detachCircle(t),detachCircle(n);var s=t.site,l=s[0],f=s[1],h=e[0]-l,d=e[1]-f,p=n.site,y=p[0]-l,g=p[1]-f,v=2*(h*g-d*y),m=h*h+d*d,b=y*y+g*g,_=[(g*m-d*b)/v+l,(h*b-y*m)/v+f];setEdgeEnd(n.edge,s,p,_),c.edge=createEdge(s,e,null,_),n.edge=createEdge(e,p,null,_),attachCircle(t),attachCircle(n)}else c.edge=createEdge(t.site,c.site)}}function leftBreakPoint(e,t){var n=e.site,r=n[0],i=n[1],a=i-t;if(!a)return r;var o=e.P;if(!o)return-1/0;var u=(n=o.site)[0],c=n[1],s=c-t;if(!s)return u;var l=u-r,f=1/a-1/s,h=l/s;return f?(-h+Math.sqrt(h*h-2*f*(l*l/(-2*s)-c+s/2+i-a/2)))/f+r:(r+u)/2}function rightBreakPoint(e,t){var n=e.N;if(n)return leftBreakPoint(n,t);var r=e.site;return r[1]===t?r[0]:1/0}var wi,ki,Ci,Si,Pi=1e-6,Ai=1e-12;function triangleArea(e,t,n){return(e[0]-n[0])*(t[1]-e[1])-(e[0]-t[0])*(n[1]-e[1])}function lexicographic(e,t){return t[1]-e[1]||t[0]-e[0]}function Diagram(e,t){var n,r,i,a=e.sort(lexicographic).pop();for(Si=[],ki=new Array(e.length),wi=new mi,Ci=new mi;;)if(i=bi,a&&(!i||a[1]Pi||Math.abs(i[0][1]-i[1][1])>Pi)||delete Si[a]}(o,u,c,s),function clipCells(e,t,n,r){var i,a,o,u,c,s,l,f,h,d,p,y,g=ki.length,v=!0;for(i=0;iPi||Math.abs(y-h)>Pi)&&(c.splice(u,0,Si.push(createBorderEdge(o,d,Math.abs(p-e)Pi?[e,Math.abs(f-e)Pi?[Math.abs(h-r)Pi?[n,Math.abs(f-n)Pi?[Math.abs(h-t)=u)return null;var c=e-i.site[0],s=t-i.site[1],l=c*c+s*s;do{i=a.cells[r=o],o=null,i.halfedges.forEach(function(n){var r=a.edges[n],u=r.left;if(u!==i.site&&u||(u=r.right)){var c=e-u[0],s=t-u[1],f=c*c+s*s;ft?0===i?i:"left"===n?i-1:i:i===e.length-1?i:"left"===n?i:i+1},Gi=(requestAnimationFrame,cancelAnimationFrame,function getQualifiedClassName(e,t,n){return[n+"-"+(e=e.replace(/^\.*/,"")),n+"-"+e+"-"+t]}),Yi=function defaultValue(e,t){return void 0===e||"object"===(void 0===e?"undefined":Ii(e))&&!e?t:e},Xi=function objectIterator(e,t){for(var n in e)Object.hasOwnProperty.call(e,n)&&t(n,e)},Ki=function(){function Voronoi(e){_classCallCheck(this,Voronoi),this._voronoi=Oi().x(function(e){return e.x}).y(function(e){return e.y}),this.data(e)}return ji(Voronoi,[{key:"data",value:function data(e){return e&&(this._voronoiFn=this._voronoi(e)),this}},{key:"find",value:function find(e,t,n){return this._voronoiFn.find(e,t,n)}}]),Voronoi}(),$i=function(){function Store(e){_classCallCheck(this,Store),this.model=Fi.a.create(e),this._listeners=[]}return ji(Store,[{key:"serialize",value:function serialize(){return this.model.serialize()}},{key:"commit",value:function commit(e,t){this.model.prop(e,t)}},{key:"registerChangeListener",value:function registerChangeListener(e,t,n){var r=e;Array.isArray(e)||(r=[e]);var i=this.model.next(r,t,n);return this._listeners.push(i),this}},{key:"registerImmediateListener",value:function registerImmediateListener(e,t,n){var r=e;Array.isArray(e)||(r=[e]);var i=this.model.on(r,t,n);return this._listeners.push(i),this}},{key:"get",value:function get(e){return this.model.prop(e)}},{key:"computed",value:function computed(e,t){return this.model.calculatedProp(e,t)}},{key:"unsubscribeAll",value:function unsubscribeAll(){this._listeners.forEach(function(e){return e()})}}]),Store}(),Qi=function intSanitizer(e){var t=e.toString().match(/(\d+)(px)*/g);return t?parseInt(t[0],10):null},Zi=function transactor(e,t,n){var r=void 0,i=n&&n instanceof Fi.a?n:Fi.a.create({}),a=function _loop(n){({}).hasOwnProperty.call(t,n)&&(r=t[n],i.prop(n)||i.append(_defineProperty({},n,r.value)),e[n]=function(t,r,a){return function(){for(var o=arguments.length,u=Array(o),c=0;c=0;n--)if(e[n]!==t[n])return!1;return!0}(t,n):"Object"===e?Object.is(t,n):t===n}},ta={INTERFACE_IMPL:"Method not implemented"},na=function mergeRecursive(e,t){for(var n in t)Di(e[n])&&Di(t[n])?mergeRecursive(e[n],t[n]):t[n]instanceof Object&&t[n].constructor===Object?(e[n]={},mergeRecursive(e[n],t[n])):e[n]=t[n];return e},ra=function interpolator(){return Pe},ia=function numberInterpolator(){return ge},aa=function piecewiseInterpolator(){return piecewise_piecewise};var oa=function rgbToHsv(e,t,n){var r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:1;e=+e,t=+t,n=+n,r=+r,e/=255,t/=255,n/=255;var i=Math.max(e,t,n),a=Math.min(e,t,n),o=void 0,u=void 0,c=(i+a)/2;if(i===a)o=u=0;else{var s=i-a;switch(u=c>.5?s/(2-i-a):s/(i+a),i){case e:o=(t-n)/s+(t=i[0]&&r<=i[1]})},{saveChild:!1,mode:n})},sa=function getDataModelFromIdentifiers(e,t,n){var r=void 0;if(t instanceof Array){var i=e.getFieldsConfig(),a=t.slice(1,t.length);if(t instanceof Function)r=t(e,{},!1);else if(t instanceof Array&&t[0].length){var o=t[0].filter(function(e){return e in i});r=e.select(function(e){var t=!0;return o.forEach(function(n,r){var i=e[n].valueOf(),o=a.findIndex(function(e){return e[r]===i});t=t&&-1!==o}),t},{saveChild:!1,mode:n})}}else r=ca(e,t,n);return r},la=function registerListeners(e,t){var n=t(e);for(var r in n)if({}.hasOwnProperty.call(n,r)){var i=n[r],a=i.type,o=i.props,u=i.listener;e.store()[a](o,u)}},fa=function isValidValue(e){return!isNaN(e)&&e!==-1/0&&e!==1/0},ha=function getObjProp(e){for(var t=arguments.length,n=Array(t>1?t-1:0),r=1;r1)for(var n,r,i,a,o,u,c=0,s=e[t[0]].length;c=0?(r[0]=a,r[1]=a+=i):i<0?(r[1]=o,r[0]=o+=i):r[0]=a}),_defineProperty(Mi,"none",ei),_defineProperty(Mi,"expand",function(e,t){if((r=e.length)>0){for(var n,r,i,a=0,o=e[0].length;a0&&(r=(n=e[t[0]]).length)>0){for(var n,r,i,a=0,o=1;o0&&(d+=f);for(null!=t?p.sort(function(e,n){return t(y[e],y[n])}):null!=n&&p.sort(function(e,t){return n(o[e],o[t])}),u=0,s=d?(v-h*b)/d:0;u0?f*s:0)+b,y[c]={data:o[c],index:u,value:f,startAngle:g,endAngle:l,padAngle:m};return y}return pie.value=function(t){return arguments.length?(e="function"==typeof t?t:vr(+t),pie):e},pie.sortValues=function(e){return arguments.length?(t=e,n=null,pie):t},pie.sort=function(e){return arguments.length?(n=e,t=null,pie):n},pie.startAngle=function(e){return arguments.length?(r="function"==typeof e?e:vr(+e),pie):r},pie.endAngle=function(e){return arguments.length?(i="function"==typeof e?e:vr(+e),pie):i},pie.padAngle=function(e){return arguments.length?(a="function"==typeof e?e:vr(+e),pie):a},pie},arc:function(){var e=arcInnerRadius,t=arcOuterRadius,n=vr(0),r=null,i=arcStartAngle,a=arcEndAngle,o=arcPadAngle,u=null;function arc(){var c,s,l=+e.apply(this,arguments),f=+t.apply(this,arguments),h=i.apply(this,arguments)-Ar,d=a.apply(this,arguments)-Ar,p=mr(d-h),y=d>h;if(u||(u=c=gr()),fSr)if(p>Er-Sr)u.moveTo(f*_r(h),f*kr(h)),u.arc(0,0,f,h,d,!y),l>Sr&&(u.moveTo(l*_r(d),l*kr(d)),u.arc(0,0,l,d,h,y));else{var g,v,m=h,b=d,_=h,x=d,w=p,k=p,C=o.apply(this,arguments)/2,S=C>Sr&&(r?+r.apply(this,arguments):Cr(l*l+f*f)),P=wr(mr(f-l)/2,+n.apply(this,arguments)),A=P,E=P;if(S>Sr){var M=asin(S/l*kr(C)),O=asin(S/f*kr(C));(w-=2*M)>Sr?(_+=M*=y?1:-1,x-=M):(w=0,_=x=(h+d)/2),(k-=2*O)>Sr?(m+=O*=y?1:-1,b-=O):(k=0,m=b=(h+d)/2)}var T=f*_r(m),F=f*kr(m),N=l*_r(x),j=l*kr(x);if(P>Sr){var I=f*_r(b),D=f*kr(b),L=l*_r(_),R=l*kr(_);if(pSr?function intersect(e,t,n,r,i,a,o,u){var c=n-e,s=r-t,l=o-i,f=u-a,h=(l*(t-a)-f*(e-i))/(f*c-l*s);return[e+h*c,t+h*s]}(T,F,L,R,I,D,N,j):[N,j],z=T-B[0],H=F-B[1],V=I-B[0],U=D-B[1],W=1/kr(function acos(e){return e>1?0:e<-1?Pr:Math.acos(e)}((z*V+H*U)/(Cr(z*z+H*H)*Cr(V*V+U*U)))/2),q=Cr(B[0]*B[0]+B[1]*B[1]);A=wr(P,(l-q)/(W-1)),E=wr(P,(f-q)/(W+1))}}k>Sr?E>Sr?(g=cornerTangents(L,R,T,F,f,E,y),v=cornerTangents(I,D,N,j,f,E,y),u.moveTo(g.cx+g.x01,g.cy+g.y01),ESr&&w>Sr?A>Sr?(g=cornerTangents(N,j,I,D,l,-A,y),v=cornerTangents(T,F,L,R,l,-A,y),u.lineTo(g.cx+g.x01,g.cy+g.y01),A=0&&"xmlns"!==(t=e.slice(0,n))&&(e=e.slice(n+1)),ka.hasOwnProperty(t)?{space:ka[t],local:e}:e};var Sa=function(e){var t=Ca(e);return(t.local?function creatorFixed(e){return function(){return this.ownerDocument.createElementNS(e.space,e.local)}}:function creatorInherit(e){return function(){var t=this.ownerDocument,n=this.namespaceURI;return n===wa&&t.documentElement.namespaceURI===wa?t.createElement(e):t.createElementNS(n,e)}})(t)};function selector_none(){}var Pa=function(e){return null==e?selector_none:function(){return this.querySelector(e)}};function selectorAll_empty(){return[]}var Aa=function(e){return null==e?selectorAll_empty:function(){return this.querySelectorAll(e)}},Ea=function matcher(e){return function(){return this.matches(e)}};if("undefined"!=typeof document){var Ma=document.documentElement;if(!Ma.matches){var Oa=Ma.webkitMatchesSelector||Ma.msMatchesSelector||Ma.mozMatchesSelector||Ma.oMatchesSelector;Ea=function matcher(e){return function(){return Oa.call(this,e)}}}}var Ta=Ea,Fa=function(e){return new Array(e.length)};function EnterNode(e,t){this.ownerDocument=e.ownerDocument,this.namespaceURI=e.namespaceURI,this._next=null,this._parent=e,this.__data__=t}EnterNode.prototype={constructor:EnterNode,appendChild:function appendChild(e){return this._parent.insertBefore(e,this._next)},insertBefore:function insertBefore(e,t){return this._parent.insertBefore(e,t)},querySelector:function querySelector(e){return this._parent.querySelector(e)},querySelectorAll:function querySelectorAll(e){return this._parent.querySelectorAll(e)}};var Na="$";function bindIndex(e,t,n,r,i,a){for(var o,u=0,c=t.length,s=a.length;ut?1:e>=t?0:NaN}var ja=function(e){return e.ownerDocument&&e.ownerDocument.defaultView||e.document&&e||e.defaultView};function styleValue(e,t){return e.style.getPropertyValue(t)||ja(e).getComputedStyle(e,null).getPropertyValue(t)}function classArray(e){return e.trim().split(/^|\s+/)}function classList(e){return e.classList||new ClassList(e)}function ClassList(e){this._node=e,this._names=classArray(e.getAttribute("class")||"")}function classedAdd(e,t){for(var n=classList(e),r=-1,i=t.length;++r=0&&(this._names.splice(t,1),this._node.setAttribute("class",this._names.join(" ")))},contains:function contains(e){return this._names.indexOf(e)>=0}};function textRemove(){this.textContent=""}function htmlRemove(){this.innerHTML=""}function raise_raise(){this.nextSibling&&this.parentNode.appendChild(this)}function lower(){this.previousSibling&&this.parentNode.insertBefore(this,this.parentNode.firstChild)}function constantNull(){return null}function remove_remove(){var e=this.parentNode;e&&e.removeChild(this)}function selection_cloneShallow(){return this.parentNode.insertBefore(this.cloneNode(!1),this.nextSibling)}function selection_cloneDeep(){return this.parentNode.insertBefore(this.cloneNode(!0),this.nextSibling)}var Ia={},Da=null;"undefined"!=typeof document&&("onmouseenter"in document.documentElement||(Ia={mouseenter:"mouseover",mouseleave:"mouseout"}));function filterContextListener(e,t,n){return e=contextListener(e,t,n),function(t){var n=t.relatedTarget;n&&(n===this||8&n.compareDocumentPosition(this))||e.call(this,t)}}function contextListener(e,t,n){return function(r){var i=Da;Da=r;try{e.call(this,this.__data__,t,n)}finally{Da=i}}}function onRemove(e){return function(){var t=this.__on;if(t){for(var n,r=0,i=-1,a=t.length;r=_&&(_=b+1);!(m=g[_])&&++_=0;)(r=i[a])&&(o&&o!==r.nextSibling&&o.parentNode.insertBefore(r,o),o=r);return this},sort:function(e){function compareNode(t,n){return t&&n?e(t.__data__,n.__data__):!t-!n}e||(e=sort_ascending);for(var t=this._groups,n=t.length,r=new Array(n),i=0;i1?this.each((null==t?function styleRemove(e){return function(){this.style.removeProperty(e)}}:"function"==typeof t?function styleFunction(e,t,n){return function(){var r=t.apply(this,arguments);null==r?this.style.removeProperty(e):this.style.setProperty(e,r,n)}}:function styleConstant(e,t,n){return function(){this.style.setProperty(e,t,n)}})(e,t,null==n?"":n)):styleValue(this.node(),e)},property:function(e,t){return arguments.length>1?this.each((null==t?function propertyRemove(e){return function(){delete this[e]}}:"function"==typeof t?function propertyFunction(e,t){return function(){var n=t.apply(this,arguments);null==n?delete this[e]:this[e]=n}}:function propertyConstant(e,t){return function(){this[e]=t}})(e,t)):this.node()[e]},classed:function(e,t){var n=classArray(e+"");if(arguments.length<2){for(var r=classList(this.node()),i=-1,a=n.length;++i=0&&(t=e.slice(n+1),e=e.slice(0,n)),{type:e,name:t}})}(e+""),o=a.length;if(!(arguments.length<2)){for(u=t?onAdd:onRemove,null==n&&(n=!1),r=0;r=0&&(n=e.slice(r+1),e=e.slice(0,r)),e&&!t.hasOwnProperty(e))throw new Error("unknown type: "+e);return{type:e,name:n}})}(e+"",r),a=-1,o=i.length;if(!(arguments.length<2)){if(null!=t&&"function"!=typeof t)throw new Error("invalid callback: "+t);for(;++a0)for(var n,r,i=new Array(n),a=0;af}c.mouse("drag")}function mouseupped(){Ba(Da.view).on("mousemove.drag mouseup.drag",null),function yesdrag(e,t){var n=e.document.documentElement,r=Ba(e).on("dragstart.drag",null);t&&(r.on("click.drag",Ya,!0),setTimeout(function(){r.on("click.drag",null)},0)),"onselectstart"in n?r.on("selectstart.drag",null):(n.style.MozUserSelect=n.__noselect,delete n.__noselect)}(Da.view,n),Ya(),c.mouse("end")}function touchstarted(){if(i.apply(this,arguments)){var e,t,n=Da.changedTouches,r=a.apply(this,arguments),o=n.length;for(e=0;e=0&&t._call.call(null,e),t=t._next;--eo}()}finally{eo=0,function nap(){var e,t,n=$a,r=1/0;for(;n;)n._call?(r>n._time&&(r=n._time),e=n,n=n._next):(t=n._next,n._next=null,n=e?e._next=t:$a=t);Qa=e,sleep(r)}(),ao=0}}function poke(){var e=uo.now(),t=e-io;t>ro&&(oo-=t,io=e)}function sleep(e){eo||(to&&(to=clearTimeout(to)),e-ao>24?(e<1/0&&(to=setTimeout(wake,e-uo.now()-oo)),no&&(no=clearInterval(no))):(no||(io=uo.now(),no=setInterval(poke,ro)),eo=1,co(wake)))}Timer.prototype=timer.prototype={constructor:Timer,restart:function restart(e,t,n){if("function"!=typeof e)throw new TypeError("callback is not a function");n=(null==n?now():+n)+(null==t?0:+t),this._next||Qa===this||(Qa?Qa._next=this:$a=this,Qa=this),this._call=e,this._time=n,sleep()},stop:function stop(){this._call&&(this._call=null,this._time=1/0,sleep())}};var so=function(e,t,n){var r=new Timer;return t=null==t?0:+t,r.restart(function(n){r.stop(),e(n+t)},t,n),r},lo=Ga("start","end","interrupt"),fo=[],ho=0,po=1,yo=2,go=3,vo=4,mo=5,bo=6,_o=function(e,t,n,r,i,a){var o=e.__transition;if(o){if(n in o)return}else e.__transition={};!function schedule_create(e,t,n){var r,i=e.__transition;function start(a){var o,u,c,s;if(n.state!==po)return stop();for(o in i)if((s=i[o]).name===n.name){if(s.state===go)return so(start);s.state===vo?(s.state=bo,s.timer.stop(),s.on.call("interrupt",e,e.__data__,s.index,s.group),delete i[o]):+oho)throw new Error("too late; already scheduled");return n}function schedule_set(e,t){var n=schedule_get(e,t);if(n.state>yo)throw new Error("too late; already started");return n}function schedule_get(e,t){var n=e.__transition;if(!n||!(n=n[t]))throw new Error("transition not found");return n}function tweenValue(e,t,n){var r=e._id;return e.each(function(){var e=schedule_set(this,r);(e.value||(e.value={}))[t]=n.apply(this,arguments)}),function(e){return schedule_get(e,r).value[t]}}var xo=function(e,t){var n;return("number"==typeof t?ge:t instanceof color_color?pe:(n=color_color(t))?(t=n,pe):Ce)(e,t)};var wo=Ra.prototype.constructor;var ko=0;function Transition(e,t,n,r){this._groups=e,this._parents=t,this._name=n,this._id=r}function newId(){return++ko}var Co=Ra.prototype;Transition.prototype=function src_transition_transition(e){return Ra().transition(e)}.prototype={constructor:Transition,select:function(e){var t=this._name,n=this._id;"function"!=typeof e&&(e=Pa(e));for(var r=this._groups,i=r.length,a=new Array(i),o=0;o=0&&(e=e.slice(0,t)),!e||"start"===e})}(t)?init:schedule_set;return function(){var o=a(this,e),u=o.on;u!==r&&(i=(r=u).copy()).on(t,n),o.on=i}}(n,e,t))},attr:function(e,t){var n=Ca(e),r="transform"===n?Fe:xo;return this.attrTween(e,"function"==typeof t?(n.local?function attr_attrFunctionNS(e,t,n){var r,i,a;return function(){var o,u=n(this);if(null!=u)return(o=this.getAttributeNS(e.space,e.local))===u?null:o===r&&u===i?a:a=t(r=o,i=u);this.removeAttributeNS(e.space,e.local)}}:function attr_attrFunction(e,t,n){var r,i,a;return function(){var o,u=n(this);if(null!=u)return(o=this.getAttribute(e))===u?null:o===r&&u===i?a:a=t(r=o,i=u);this.removeAttribute(e)}})(n,r,tweenValue(this,"attr."+e,t)):null==t?(n.local?function attr_attrRemoveNS(e){return function(){this.removeAttributeNS(e.space,e.local)}}:function attr_attrRemove(e){return function(){this.removeAttribute(e)}})(n):(n.local?function attr_attrConstantNS(e,t,n){var r,i;return function(){var a=this.getAttributeNS(e.space,e.local);return a===n?null:a===r?i:i=t(r=a,n)}}:function attr_attrConstant(e,t,n){var r,i;return function(){var a=this.getAttribute(e);return a===n?null:a===r?i:i=t(r=a,n)}})(n,r,t+""))},attrTween:function(e,t){var n="attr."+e;if(arguments.length<2)return(n=this.tween(n))&&n._value;if(null==t)return this.tween(n,null);if("function"!=typeof t)throw new Error;var r=Ca(e);return this.tween(n,(r.local?function attrTweenNS(e,t){function tween(){var n=this,r=t.apply(n,arguments);return r&&function(t){n.setAttributeNS(e.space,e.local,r(t))}}return tween._value=t,tween}:function attrTween(e,t){function tween(){var n=this,r=t.apply(n,arguments);return r&&function(t){n.setAttribute(e,r(t))}}return tween._value=t,tween})(r,t))},style:function(e,t,n){var r="transform"==(e+="")?Te:xo;return null==t?this.styleTween(e,function style_styleRemove(e,t){var n,r,i;return function(){var a=styleValue(this,e),o=(this.style.removeProperty(e),styleValue(this,e));return a===o?null:a===n&&o===r?i:i=t(n=a,r=o)}}(e,r)).on("end.style."+e,function styleRemoveEnd(e){return function(){this.style.removeProperty(e)}}(e)):this.styleTween(e,"function"==typeof t?function style_styleFunction(e,t,n){var r,i,a;return function(){var o=styleValue(this,e),u=n(this);return null==u&&(this.style.removeProperty(e),u=styleValue(this,e)),o===u?null:o===r&&u===i?a:a=t(r=o,i=u)}}(e,r,tweenValue(this,"style."+e,t)):function style_styleConstant(e,t,n){var r,i;return function(){var a=styleValue(this,e);return a===n?null:a===r?i:i=t(r=a,n)}}(e,r,t+""),n)},styleTween:function(e,t,n){var r="style."+(e+="");if(arguments.length<2)return(r=this.tween(r))&&r._value;if(null==t)return this.tween(r,null);if("function"!=typeof t)throw new Error;return this.tween(r,function styleTween(e,t,n){function tween(){var r=this,i=t.apply(r,arguments);return i&&function(t){r.style.setProperty(e,i(t),n)}}return tween._value=t,tween}(e,t,null==n?"":n))},text:function(e){return this.tween("text","function"==typeof e?function text_textFunction(e){return function(){var t=e(this);this.textContent=null==t?"":t}}(tweenValue(this,"text",e)):function text_textConstant(e){return function(){this.textContent=e}}(null==e?"":e+""))},remove:function(){return this.on("end.remove",function removeFunction(e){return function(){var t=this.parentNode;for(var n in this.__transition)if(+n!==e)return;t&&t.removeChild(this)}}(this._id))},tween:function(e,t){var n=this._id;if(e+="",arguments.length<2){for(var r,i=schedule_get(this.node(),n).tween,a=0,o=i.length;ayo&&n.state4&&void 0!==arguments[4]?arguments[4]:{},a=arguments[5];(e instanceof HTMLElement||e instanceof SVGElement)&&(e=Ao(e));var o=r?r[0]:null,u=null,c=null,s=null,l=null,f=null,h=void 0;o?"#"===o?(u="id",c=r):(u="class",c="."===r[0]?r:"."+r):(c=t,h=!0),s=e.selectAll(c),h&&(s=s.filter(function(){return this.parentNode===e.node()})),l=(s=s.data(n,a)).enter().append(t||"div"),i.enter&&l.each(function(){for(var e=arguments.length,t=Array(e),n=0;nthis._data.length)for(var a=this._data.length;a0&&void 0!==arguments[0]?arguments[0]:{};this._lifeCycles=e,this._releasePromisesFromCache()}},{key:"_resetTargetPromise",value:function _resetTargetPromise(e){var t=this;setTimeout(function(){t._notifiers[e]=Xo,t._promises.set(e,t._makeNotifierPromise(e))},0)}}]),LifeCycleManager}(),Qo="drag",Zo="hover",Jo="selectiondrag",eu="click",tu="longtouch",nu="touchdrag",ru="*",iu=1,au=-1,ou=0,uu=2,cu=-2,su=function(){function defineProperties(e,t){for(var n=0;n0?(e[n]===uu&&t.entrySet[0].push(n),e[n]===iu&&t.entrySet[1].push(n)):e[n]<0&&(e[n]===cu&&t.exitSet[0].push(n),e[n]===au&&t.exitSet[1].push(n)),t.completeSet.push(n);return["entrySet","exitSet"].forEach(function(e){t[e]=t[e].map(function(e){return e.map(Number)})}),t.completeSet=t.completeSet.map(Number),t}},{key:"reset",value:function reset(e){var t=this._set;if(e)e.forEach(function(e){t[e]=ou});else{var n=this._lockedSelection;for(var r in t)r in n||(t[r]=ou)}return this._resetted=!0,this}},{key:"getEntrySet",value:function getEntrySet(){var e=this._set,t=[];for(var n in e)e[n]===iu&&t.push(n);return t}},{key:"getExistingEntrySet",value:function getExistingEntrySet(e){var t=this._set;return e.filter(function(e){return t[e]===iu||t[e]===uu})}},{key:"getExistingExitSet",value:function getExistingExitSet(e){var t=this._set;return e.filter(function(e){return t[e]===au||t[e]===cu})}},{key:"getOldEntry",value:function getOldEntry(){var e=this._set,t=[];for(var n in e)e[n]===uu&&t.push(n);return t}},{key:"getOldExit",value:function getOldExit(){var e=this._set,t=[];for(var n in e)e[n]===cu&&t.push(n);return t}},{key:"getExitSet",value:function getExitSet(){var e=this._set,t=[];for(var n in e)e[n]===au&&t.push(n);return t}},{key:"getCompleteSet",value:function getCompleteSet(){var e=this._set,t=[];for(var n in e)t.push(n);return t}},{key:"getCompleteSetCount",value:function getCompleteSetCount(){return this._completeSetCount}},{key:"resetted",value:function resetted(){return this._resetted}},{key:"toggle",value:function toggle(){var e=this._set;for(var t in e)e[t]===iu?e[t]=au:e[t]===au?e[t]=iu:e[t]===uu?e[t]=cu:e[t]=uu;return this}}]),SelectionSet}();function helper_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t3&&void 0!==arguments[3]?arguments[3]:{},i=this.sideEffects(),a=i[e],o=!1;r.filter&&r.filter(a)&&(o=!0),!o&&i[e].apply(t,n,r)}},{key:"registerPropagationBehaviourMap",value:function registerPropagationBehaviourMap(e){return this._propagationBehaviourMap=Object.assign(this._propagationBehaviourMap,e||{}),this}},{key:"dispatchBehaviour",value:function dispatchBehaviour(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=void 0===n.propagate||n.propagate,i=this._actions.behavioural[e],a=function getSideEffects(e,t){var n=[];for(var r in t){var i=r.split(",");i.some(function(t){return t===e})&&n.push({effects:t[r],behaviours:i})}return n}(e,this._behaviourEffectMap);if(this._propagationInf=n,i){var o=i.dispatch(t),u=this.getPropagationSelectionSet(o);this._entryExitSet[e]=u;var c=this.shouldApplySideEffects(r);if(r&&this.propagate(e,t,o.find(function(e){return e.sourceSelectionSet}),a),c){var s=this.getApplicableSideEffects(a,t,n);this.applySideEffects(s,u,t)}}return this}},{key:"getPropagationSelectionSet",value:function getPropagationSelectionSet(e){return e.find(function(e){return!e.sourceSelectionSet})}},{key:"shouldApplySideEffects",value:function shouldApplySideEffects(){return!0}},{key:"changeBehaviourStateOnPropagation",value:function changeBehaviourStateOnPropagation(e,t){return t instanceof Function?this._sourceBehaviours[e]=t:this._sourceBehaviours[e]=function(){return t},this}},{key:"changeSideEffectStateOnPropagation",value:function changeSideEffectStateOnPropagation(e,t){t instanceof Function?this._sourceSideEffects[e]=t:this._sourceSideEffects[e]=function(){return t}}},{key:"propagate",value:function propagate(){return this}},{key:"sideEffects",value:function sideEffects(){return arguments.length?(this._sideEffects=arguments.length<=0?void 0:arguments[0],this):this._sideEffects}},{key:"enableSideEffects",value:function enableSideEffects(e){return fu(this,e,!0),this}},{key:"disableSideEffects",value:function disableSideEffects(e){return fu(this,e,!1),this}},{key:"dissociateBehaviour",value:function dissociateBehaviour(e,t){var n=this._actionBehaviourMap;for(var r in n)if(r===t){var i=n[r];i.behaviours=i.behaviours.filter(function(t){return t!==e})}return this}},{key:"dissociateSideEffect",value:function dissociateSideEffect(e,t){var n=this._behaviourEffectMap;return n[t]=n[t].filter(function(t){return(t.name||t)!==e}),this}},{key:"getApplicableSideEffects",value:function getApplicableSideEffects(e){return e}},{key:"attachPropagationListener",value:function attachPropagationListener(e){return e.unsubscribe("propagation"),e.on("propagation",this.onDataModelPropagation()),this}},{key:"onDataModelPropagation",value:function onDataModelPropagation(){var e=this;return function(t){var n=t.payload,r=n.action;e.dispatchBehaviour(r,n,{propagate:!1})}}},{key:"createSelectionSet",value:function createSelectionSet(e,t){var n=t||this._actions.behavioural,r=this._selectionSet,i=this._volatileSelectionSet;for(var a in n)({}).hasOwnProperty.call(n,a)&&(r[a]=new lu(e),i[a]=new lu(e,!0));return this._volatileSelectionSet=i,this.selectionSet(r),this}},{key:"selectionSet",value:function selectionSet(){return arguments.length?(this._selectionSet=arguments.length<=0?void 0:arguments[0],this):this._selectionSet}},{key:"initializeSideEffects",value:function initializeSideEffects(){var e=this._sideEffectDefinitions;return this.sideEffects(function initializeSideEffects(e,t){var n=e._sideEffects;return(t=t instanceof Array?t:Object.values(t)).forEach(function(t){var r=n[t.formalName()];n[t.formalName()]=r||new t(e)}),n}(this,e)),this}},{key:"registerPhysicalActions",value:function registerPhysicalActions(e){var t=function initializePhysicalActions(e,t){var n={};for(var r in t)({}).hasOwnProperty.call(r,t)||(n[r]=t[r](e));return n}(this,e);return Object.assign(this._actions.physical,t),this}},{key:"propagateWith",value:function propagateWith(e,t){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],r=this._actions.behavioural;if(t.length){if(e===ru)for(var i in r)this._propagationFields[i]={fields:t,append:n};else this._propagationFields[e]={fields:t,append:n};return this}return this._propagationFields}},{key:"mapActionsAndBehaviour",value:function mapActionsAndBehaviour(){var e=this._actions.physical,t=this._actionBehaviourMap,n=this._mappedActions;for(var r in t)if(!{}.hasOwnProperty.call(r,t)){var i=void 0,a=t[r];i=a.target;var o=a.touch;i||(i=this.context.getDefaultTargetContainer());var u=Ro()?!0===o||void 0===o:!o,c=r+"-"+a.behaviours.join();u&&!n[c]&&this.bindActionWithBehaviour(e[r],i,a.behaviours),n[c]=!0}return this}},{key:"registerPhysicalBehaviouralMap",value:function registerPhysicalBehaviouralMap(e){return Object.assign(this._actionBehaviourMap,e),this}},{key:"bindActionWithBehaviour",value:function bindActionWithBehaviour(e,t,n){var r=this;return"string"==typeof t&&(t=[t]),t.forEach(function(t){var i=r.context.mount(),a=t.node instanceof Function?t:Ao(i).selectAll(t);n.length&&!a.empty()&&(a instanceof Array?a.forEach(function(t){e(Ao(t),n)}):e(a,n))}),this}},{key:"getPropagationInf",value:function getPropagationInf(){return this._propagationInf}},{key:"getAddSetFromCriteria",value:function getAddSetFromCriteria(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=this.context,r=t.data?t.data:n.getDataModelFromIdentifiers(e,"all"),i=n.fields().x||[],a=n.fields().y||[],o=i.every(function(e){return e.type()===ir.FieldType.MEASURE}),u=a.every(function(e){return e.type()===ir.FieldType.MEASURE});return{model:r,uids:null===e?null:t.data?function filterPropagationModel(e,t,n){var r=t.getData(),i=r.data,a=r.schema,o=void 0;if(a.length){var u=e.getFieldsConfig();o=e.select(function(e){return i.some(function(t){return a.every(function(r,i){return!(n||r.name in u&&u[r.name].def.type!==ir.FieldType.MEASURE)||t[i]===e[r.name].valueOf()})})},{saveChild:!1})}else o=t;return o}(this.getFullData(),t.data[0],o&&u).getData().uids:r[0].getData().uids}}},{key:"getSelectionSets",value:function getSelectionSets(e){var t=this.context.id(),n=(this._propagationInf||{}).sourceId,r=[];return n!==t&&(r=[this._volatileSelectionSet[e]]),n&&r.push(this.selectionSet()[e]),r}},{key:"getFullData",value:function getFullData(){return this.context.data()}},{key:"resetted",value:function resetted(){return this._resetted}},{key:"getEntryExitSet",value:function getEntryExitSet(e){return this._entryExitSet[e]}}]),Firebolt}(),mu=function(){function defineProperties(e,t){for(var n=0;n1&&void 0!==arguments[1]?arguments[1]:{},n=e.sourceIdentifiers;return n?n.getSchema().map(function(e){return e.name}):t instanceof Array?t[0]:Object.keys(t||{})}(u,n.criteria),sourceSelectionSet:!0===e._volatile}}},{key:"enable",value:function enable(){this._enabled=!0}},{key:"disable",value:function disable(){this._enabled=!1}},{key:"isEnabled",value:function isEnabled(){return this._enabled}}],[{key:"mutates",value:function mutates(){return!1}}]),GenericBehaviour}(),_u=function(){function defineProperties(e,t){for(var n=0;nk[0]?k:w,S=C===k?w:k;C[1]100&&Math.abs(i.x-a.x)<=5)){a.x=Math.max(0,Math.min(a.x,o.width)),a.y=Math.max(0,Math.min(a.y,o.height));var s=Ru(n.context.getSourceInfo(),{startPos:i,endPos:a,snap:!0},n.context.data().getFieldsConfig());s.dragEnd=!0,t.forEach(function(e){return n.dispatchBehaviour(e,s)})}}))},zu=function hover(e){return function(t,n){var r=function dispatchBehaviour(t){var r=Io(),i=e.context,a=i.config().interaction.tooltip.mode,o=jo(i.getDrawingContext().svgContainer,r),u=i.getNearestPoint(o.x,o.y,{getAllPoints:"consolidated"===a||"fragmented"===a,data:t,event:r}),c={criteria:u?u.id:null,showInPosition:u.showInPosition,target:u.target,position:o,mode:a};n.forEach(function(t){return e.dispatchBehaviour(t,c)}),r.stopPropagation()};t.on("mouseover",r).on("mousemove",r).on("mouseout",function(){n.forEach(function(t){return e.dispatchBehaviour(t,{criteria:null})})})}},Hu=function generatePayloadFromEvent(e,t,n){var r=n.context,i=jo(r.getDrawingContext().svgContainer,t.touches?t.touches[0]:t),a=r.getNearestPoint(i.x,i.y,{data:e,event:t});return{criteria:a?a.id:null,showInPosition:a.showInPosition,target:a.target,position:i}},Vu=function click(e){return function(t,n){t.on("click",function dispatchBehaviour(t){var r=Io(),i=Hu(t,r,e);n.forEach(function(t){return e.dispatchBehaviour(t,i)}),r.stopPropagation()})}};function physical_defineProperty(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var Uu=(physical_defineProperty(Du={},Qo,function drag(e){return function(t,n){Bu(t,n,e)}}),physical_defineProperty(Du,Zo,zu),physical_defineProperty(Du,eu,Vu),physical_defineProperty(Du,tu,function longtouch(e){return function(t,n){var r=void 0,i=void 0;i=!1,r=Io(),t.on("touchstart",function(t){r=Io(),i=!1,setTimeout(function(){i?n.forEach(function(t){return e.dispatchBehaviour(t,{criteria:null})}):function dispatchBehaviour(t){var i=Hu(t,r,e);n.forEach(function(t){return e.dispatchBehaviour(t,i)}),r.stopPropagation()}(t)},100)}).on("touchend",function(){i=!0})}}),physical_defineProperty(Du,nu,function touchdrag(e){return function(t,n){Bu(t,n,e,!0)}}),Du),Wu=function(){function defineProperties(e,t){for(var n=0;n1&&void 0!==arguments[1]&&arguments[1];var t=arguments[2],n=arguments[3];this.firebolt.context.layers().forEach(function(r){return!1!==r.config().interactive&&r.applyInteractionStyle(t,e.uids,n)})}}]),SurrogateSideEffect}(),Xu=function(){function defineProperties(e,t){for(var n=0;n=0&&l<=t&&c>=0&&s<=n){var f=Ru(a.getSourceInfo(),{startPos:{x:u,y:c},endPos:{x:l,y:s}},a.data().getFieldsConfig());o(f)}}).on("end",function(){var e=i.width,t=i.height,n=Math.min(e-r.width,Math.max(r.x,0)),u=Math.min(t-r.height,Math.max(r.y,0)),c=u+r.height,s=n+r.width;if(n>=0&&s<=e&&u>=0&&c<=t){var l=Ru(a.getSourceInfo(),{startPos:{x:n,y:u},endPos:{x:s,y:c},snap:!0},a.data().getFieldsConfig());l.dragEnd=!0,o(l)}}))}}(c)(Ao(this),["brush"],x)}).merge(w).each(function(e){var t=Ao(this);for(var n in b&&(t=t.transition().duration(b.duration)),e)({}).hasOwnProperty.call(e,n)&&fa(e[n])&&t.attr(n,e[n])}),C=Gi(u.defClassName,this._id,d);return k.classed(C.join(" "),!0),k.classed(u.className,!0),this}},{key:"hide",value:function hide(e){Qu(this,e.sideEffectGroup,!1)}},{key:"show",value:function show(e){Qu(this,e.sideEffectGroup,!0)}}],[{key:"defaultConfig",value:function defaultConfig(){return{defClassName:"selection-box-group",className:"",classPrefix:"muze",box:{defClassName:"selection-box",className:""},transition:{duration:200}}}},{key:"formalName",value:function formalName(){return"selectionBox"}}]),SelectionBox}(),ec={position:"absolute",width:0,height:0},tc={classPrefix:"muze",defClassName:"tooltip-box",connectorClassName:"tooltip-connectors",className:"",row:{margin:0},content:{spacing:5,iconContainerSize:10,iconScale:1,iconShape:"circle",iconColor:"#ff0000",rowMargin:"0px",margin:10,separator:":",className:"tooltip-content-container",parentClassName:"tooltip-content-parent-container"},arrow:{size:10,disabled:!1,defClassName:"tooltip-arrow",className:"",color:"rgba(195,195,195,0.85)"}},nc=function getArrowPos(e,t,n,r){var i=void 0,a=n.x,o=n.y,u=n.boxHeight,c=n.boxWidth,s=r.arrow.disabled?0:r.arrow.size;if("left"===e||"right"===e){var l=0,f=u/2,h=t.y+t.height,d=o+u;t.y>o?(l=t.y-o,f=(h>=d?d-t.y:t.height)/2):d>h&&(f=Math.abs(o-(t.y+t.height))/2),i=l+f-s/2}else{var p=0,y=c/2,g=t.x+t.width,v=a+c;t.x>a?(p=t.x-a,y=(g>=v?v-t.x:t.width)/2):v>g&&(y=Math.abs(a-(t.x+t.width))/2),i=p+y-s/2}return i},rc=function placeArrow(e,t,n){var r=e._tooltipArrow,i=e._tooltipBackground,a=e._config,o=a.classPrefix,u=a.arrow,c=Gi(u.defClassName,e._id,a.classPrefix);r.style("display","block"),r.attr("class",""+c.join(" ")),"left"===t||"right"===t?(r.style("top",n+"px"),r.style("left",""),i.style("top",n+"px"),i.style("left","")):("bottom"===t?r.style("top","100%"):r.style("top","-"+u.size+"px"),r.style("left",n+"px"),"bottom"===t?i.style("top","100%"):i.style("top","-"+(u.size+3)+"px"),i.style("left",n+"px")),r.classed(o+"-tooltip-arrow",!0),r.classed(o+"-tooltip-arrow-"+e._arrowOrientation,!1),r.classed(o+"-tooltip-arrow-"+t,!0),i.classed(o+"-tooltip-background-arrow",!0),i.classed(o+"-tooltip-background-arrow-"+e._arrowOrientation,!1),i.classed(o+"-tooltip-background-arrow-"+t,!0)};n(11);function strategy_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t1&&void 0!==arguments[1]?arguments[1]:{},n=arguments[2],r=[],i=e.getData(),a=i.data,o=i.schema,u=t.formatters,c=t.separator,s=e.getFieldsConfig(),l=e.getFieldspace(),f=l.fieldsObj(),h=n.dimensionMeasureMap,d=n.axes,p=n.detailFields||[],y=o.filter(function(e){return e.type===ir.FieldType.DIMENSION}),g=o.filter(function(e){return e.type===ir.FieldType.MEASURE}),v=o.find(function(e){return-1!==p.indexOf(e.name)}),m=a.length,b=function getRowContent(e,n){var r=void 0,i=void 0,o=void 0,p=[],y=s[e].index,g=s[e].def.subtype===ir.DimensionSubtype.TEMPORAL?f[e].getMinDiff():0,v=u&&u[e]||oc(n,function(e){return e});if(null!==r){var b=n===ir.FieldType.MEASURE?a.map(function(e){return e[y]}):[].concat(strategy_toConsumableArray(new Set(a.map(function(e){return e[y]}))));b=b.filter(function(e){return""!==e});var _=d.color[0],x=d.shape[0],w=d.size[0],k=(_||x||w)&&m>1&&n!==ir.FieldType.MEASURE;b.forEach(function(n,u){var f=void 0,d=h[e];if(d&&d.length&&m>1){f=n;var y={value:""};k&&(y={type:"icon",color:_.getColor(n),shape:x.getShape(n),size:w.getSize(n)*t.iconScale}),d.length>1?(p.push([y,""+f]),d.forEach(function(e){o=s[e].index,r=a[u][o],i=oc("measure",l.fields[o]._ref.numberFormat())(r,g),p.push([{value:""+e+c,style:{"margin-left":t.margin+"px}"},className:t.classPrefix+"-tooltip-key"},{value:""+i,className:t.classPrefix+"-tooltip-value"}])})):(o=s[d[0]].index,r=a[u][o],i=oc("measure",l.fields[o]._ref.numberFormat())(r,g),p.push([y,{value:""+f+c,className:t.classPrefix+"-tooltip-key"},{value:""+i,className:t.classPrefix+"-tooltip-value"}]))}else f=e,i=v(r=n,g),p.push([{value:""+f+c,className:t.classPrefix+"-tooltip-key"},{value:""+i,className:t.classPrefix+"-tooltip-value"}])})}return p},_="keyValue";if(m>1&&v)r=function getTabularData(e,t,n,r){var i=[];return i.push(t.map(function(e){return e.name})),e.forEach(function(e){var a=[];t.forEach(function(t,i){var o=t.subtype===ir.DimensionSubtype.TEMPORAL?r[t.name]:0,u=t.type===ir.FieldType.MEASURE&&n.fields[i]._ref.numberFormat(),c=oc(t.subtype||t.type,u)(e[i],o);a.push(c)}),i.push(a)}),i}(a,o,l,n.timeDiffs),_="table";else{y.forEach(function(e){var t=e.subtype?e.subtype:e.type;r=[].concat(strategy_toConsumableArray(r),strategy_toConsumableArray(b(e.name,t)))});var x=[].concat(strategy_toConsumableArray(new(Function.prototype.bind.apply(Set,[null].concat(strategy_toConsumableArray(Object.values(h)))))));(m>1?g.filter(function(e){return-1===x.indexOf(e.name)}):g).forEach(function(e){var t=e.subtype?e.subtype:e.type;r=[].concat(strategy_toConsumableArray(r),strategy_toConsumableArray(b(e.name,t)))})}return{content:r,displayFormat:_}},cc={keyValue:function keyValue(e,t,n){return uc(e,t,n)}},sc="keyValue",lc=function(){function defineProperties(e,t){for(var n=0;n0?(this._config=na(this._config,arguments.length<=0?void 0:arguments[0]),this):this._config}},{key:"update",value:function update(e){return this._model=e.model,this._strategy=void 0!==e.strategy?e.strategy:sc,this._formatter=e.formatter,this}},{key:"context",value:function context(e){return this._context=e,this}},{key:"render",value:function render(e){var t=void 0,n=this._config,r=n.iconContainerSize,i=this._formatter,a=n.rowMargin,o=this._model;if(this._mount=e,(t=o instanceof Array?o:i instanceof Function?i(this._model,this._context):cc[this._strategy](this._model,this.config(),this._context))instanceof Function)e.html(t());else{var u=t,c="default";Di(t)&&(u=t.content,c=t.displayFormat);var s=Eo(e,"div",[c],n.classPrefix+"-tooltip-content",{},function(e){return e});if("table"===c){var l=Eo(s,"table",[1],n.classPrefix+"-tooltip-table"),f=Eo(l,"tbody",[1],n.classPrefix+"-tooltip-table-tbody"),h=Eo(f,"tr",u,n.classPrefix+"-tooltip-table-row");h.each(function(e,t){Ao(this).classed(n.classPrefix+"-tooltip-table-row-"+t,!0)}),Eo(h,"td",function(e){return e},n.classPrefix+"-tooltip-table-cell").each(function(e){Ao(this).html(e)})}else{var d=Eo(s,"div",u,n.classPrefix+"-tooltip-row"),p=Eo(d,"span",function(e){return e},n.classPrefix+"-tooltip-content");p.attr("class",n.classPrefix+"-tooltip-content"),Fo(d,{margin:a}),Fo(p,{display:"inline-block","margin-right":n.spacing+"px"}),p.each(function(e){var t=Ao(this);if(t.html(""),e instanceof Object)if("icon"===e.type){var n=Eo(t,"svg",[1]),i=Eo(n,"path",[1]),a=e.shape instanceof Function?e.shape:pa(e.shape);To(n,{x:0,y:0,width:r,height:r}),To(i,{d:a.size(e.size)(),transform:"translate("+r/2+", "+r/2+")"}),Fo(i,{fill:e.color}),Fo(n,{width:r+"px",height:r+"px"})}else t.html(e.value),e.className&&t.classed(e.className,!0),Fo(t,e.style);else t.html(e)})}}return this}},{key:"clear",value:function clear(){return this._model=null,this}}],[{key:"defaultConfig",value:function defaultConfig(){var e=tc.content;return e.classPrefix=tc.classPrefix,e}}]),Content}(),hc=function(){function defineProperties(e,t){for(var n=0;n0){var e=na({},this.constructor.defaultConfig());return this._config=na(e,arguments.length<=0?void 0:arguments[0]),this}return this._config}},{key:"addClass",value:function addClass(e){return this._tooltipContainer.classed(e,!0),this}},{key:"context",value:function context(){return arguments.length?(this._context=arguments.length<=0?void 0:arguments[0],this):this._context}},{key:"content",value:function content(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=this.config(),i=r.classPrefix,a=r.content.className,o=r.formatter,u=n.className||i+"-"+a+"-"+e,content=this._contents[e]=this._contents[e]||new fc,c=Eo(this._contentContainer,"div",[n.order],u);c.attr("class",i+"-"+a+" "+u),function reorderContainers(e,t){e.selectAll(t).sort(function(e,t){return e-t})}(this._contentContainer,"."+i+"-"+a);var s=r.content;return n.classPrefix=this._config.classPrefix,content.config(s),null===t?(content.clear(),c.remove(),delete this._contents[e]):(content.update({model:t,formatter:n.formatter||o}),content.context(this._context),content.render(c)),Object.keys(this._contents).length||this.hide(),this}},{key:"getContents",value:function getContents(){return Object.values(this._contents)}},{key:"position",value:function position(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(!Object.keys(this._contents).length)return this.hide(),this;this.show();var r=this._target,i=n.repositionArrow;if(r&&i){var a=this._tooltipContainer.node(),o=this._config,u=o.arrow.disabled,c=u?0:o.arrow.size,s=this._arrowOrientation,l="left"===s||"right"===s?t+a.offsetHeight-cr.y+r.height:e+a.offsetWidth-cr.x+r.width;if(!u)if(l){var f=void 0;this._tooltipArrow.style("display","none"),this._tooltipBackground.style("display","none"),this._tooltipConnectorContainer.style("display","block");var h=this._tooltipConnectorContainer.selectAll("path").data([1]),d=h.enter().append("path");"left"===s?f="M "+e+" "+(t+a.offsetHeight/2)+" L "+(r.x+r.width)+" "+(r.y+r.height/2):"right"===s?f="M "+(e+a.offsetWidth)+" "+(t+a.offsetHeight/2)+" L "+r.x+" "+(r.y+r.height/2):"bottom"===s&&(f="M "+(e+a.offsetWidth/2)+" "+(t+a.offsetHeight)+" L "+(r.x+r.width/2)+" "+r.y),d.merge(h).attr("d",f).style("display","block")}else{var p=nc(s,r,{x:e,y:t,boxHeight:a.offsetHeight,boxWidth:a.offsetWidth},this._config);rc(this,this._arrowOrientation,p),this._tooltipConnectorContainer.style("display","none")}}var y=this._offset||{x:0,y:0};return this._tooltipContainer.style("left",y.x+e+"px").style("top",y.y+t+"px"),this}},{key:"positionRelativeTo",value:function positionRelativeTo(e){var t=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=void 0,i=n.orientation;if(this.show(),!e)return this.hide(),this;var a=this._extent,o=this._tooltipContainer.node();this._tooltipContainer.style("top","0px").style("left","0px");var u=o.offsetWidth+2,c=o.offsetHeight+2,s=this._config,l=this._offset,f=s.arrow.disabled,h=f?0:s.arrow.size,d=void 0===n.draw||n.draw,p=e.y,y=e.x+e.width+l.x,g=a.width-y,v=e.x+l.x-a.x,m=p>c+h,b=g>=u+h,_=v>=u+h;return this._target=e,i||(i=m?"vertical":b||_?"horizontal":"vertical"),"horizontal"===i?r=function positionHorizontal(){var n=void 0,r=e.x+e.width,i=e.y;return b?(n="left",r+=h):_?(r=e.x-u,n="right",r-=h):(n="left",r+=h),e.height2&&void 0!==arguments[2]?arguments[2]:{},r=0,i=0,a=e.mergedEnter.model,o=this.firebolt.context,u=this.drawingContext();if(a.isEmpty()||null===t.criteria||!1===e.isSourceFieldPresent)return this.hide(n,null),this;var c=this._tooltips,s=this.config(),l={width:u.width,height:u.height},f=t.showInPosition,h=s.padding,d=[],p="fragmented"===s.mode,y=o.getSourceInfo(),g=y.fields,v=!!(!!g.x[0]&&g.x[0].type()===ir.FieldType.DIMENSION),m=t.position,b=[],_={},x=a.getData().uids;p?d.push.apply(d,function tooltip_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);tu.height:i>u.width)break;b.push({x:z.x,y:z.y,width:H.width,height:H.height,tooltip:R})}}for(var V in c)if(!_[V]){var U=c[V];U.content(t.action,null),U.getContents().length||(U.remove(),delete c[V])}return p&&(!function spaceOutBoxes(e,t,n){var r=void 0,i=void 0,a=void 0,o=void 0,u=void 0,c=e.length,s=function spaceOutIfOverlap(e,t,u){a=e.x,o=e.width,r=e.y,i=e.height;var c=r+i,s=a+o;n?(u?rt.y)&&(t.y=u?e.y-t.height-5:c+5):(u?at.x)&&(t.x=u?e.x-t.width-5:s+5)};for(e.sort(function(e,t){return n?e.y-t.y:e.x-t.x}),u=0,u=0;ut.height||e[u].x+e[u].width>t.width)for(n?e[u].y-=e[u].height+e[u].y-t.height:e[u].x-=e[u].width+e[u].x-t.width,u=c-1;u>0;u--)s(e[u],e[u-1],!0)}(b,l,v),b.forEach(function(e){return e.tooltip.position(e.x,e.y,{repositionArrow:!0})})),this}},{key:"hide",value:function hide(e){var t=this._tooltips;for(var n in t)if({}.hasOwnProperty.call(t,n)){var r=e.strategy||this._strategy;t[n].content(r,null),t[n].hide()}}}],[{key:"defaultConfig",value:function defaultConfig(){return{padding:5,offset:{x:0,y:0}}}},{key:"formalName",value:function formalName(){return"tooltip"}}]),Tooltip}(),vc=(n(15),function(){function defineProperties(e,t){for(var n=0;n2&&void 0!==arguments[2]?arguments[2]:{},r=this._strategies[n.strategy||this._strategy];return!1!==e.isSourceFieldPresent&&r(e,this,n.strategy||this._strategy),this}}],[{key:"formalName",value:function formalName(){return"highlighter"}},{key:"target",value:function target(){return"visual-unit"}}]),PlotHighlighter}(),wc=function(){function defineProperties(e,t){for(var n=0;n67.5&&v<=90||(r+=2*y),u=p,u=90===l?y:270===l?-y:0,o===Yc?(u=0===t&&c&&s===ds?u+u/2:u,Ao(this).attr("transform","translate("+(-u+f)+" \n "+(-r-f)+") rotate("+l+")")):(u=0===t&&c&&s===ds?u-u/2:u,Ao(this).attr("transform","translate("+(u-f)+" \n "+(r+f)+") rotate("+l+")"))}),t},Os=function changeTickOrientation(e,t,n){var r=t._smartTicks,i=t.config(),a=t.dependencies().labelManager,o=i.labels,u=i.orientation,c=o.rotation,s=o.smartTicks,l=e.selectAll(".tick text");if(l.selectAll("tspan").remove(),0===c||!1!==s||"top"!==u&&"bottom"!==u)if(0===c&&!1===s)l.attr("transform","");else{l.attr("y",0).attr("x",0).text(""),Eo(l,"tspan",function(e,t){return r[t].lines},"smart-text").attr("dy","0").style("opacity","0").transition().duration(1e3).attr("dy",function(e,t){return"bottom"===u||0!==t?r[t].oriTextHeight:-r[t].oriTextHeight*(r[t].lines.length-1)-n}).style("opacity",1).attr("x",0).text(function(e){return e})}else Ms(t,l,a,i);return l},Ts=function setFixedBaseline(e){e.config().fixedBaseline&&e.setFixedBaseline()},Fs=function setAxisNamePos(e,t,n){var r=n.axisNameHeight,i=n.yOffset,a=n.labelOffset,o=n.availableSpace;switch(t){case Xc:e.attr("transform","translate("+-(o.width-r)+","+(i+a)+")rotate(-90)");break;case Kc:e.attr("transform","translate("+(o.width-r)+","+(i+a)+")rotate(90)");break;case Yc:e.attr("transform","translate("+o.width/2+","+(-o.height+r)+")");break;case Gc:e.attr("transform","translate("+o.width/2+","+(o.height-r/2)+")")}return e};function cartesian_axis_helper_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);tt.length&&(t=p,r=e.smartTicks()?e.smartTicks()[s]:{},n=o[s]),d}),n=h.getOriSize(t),{largestLabel:t,largestLabelDim:n,axisTickLabels:i,allLabelLengths:o,smartTick:r}},js=function setOffset(e){var t=0,n=0,r=e.logicalSpace(),i=e.config(),a=i.orientation,o=i.xOffset,u=i.yOffset;a===Xc&&(t=void 0===o?r.width:o),a===Yc&&(n=void 0===u?r.height:u),e.config({xOffset:t,yOffset:n})},Is=function adjustRange(e,t,n,r){var i=function getAxisOffset(e,t,n){var r=Math.abs(t[1]-t[0])/(n[1]-n[0])*e,i=t[1]-t[0],a=i/r;return(i-i/(a+1)*a)/2}(e,t,n);return r===Yc||r===Gc?(t[0]+=i,t[1]-=i):(t[0]-=i,t[1]+=i),t},Ds=function registerChangeListeners(e){return e.store().model.next(["domain","range","mount","config"],function(){for(var t=arguments.length,n=Array(t),r=0;r0&&e.length*(t+this._minTickDistance.width)>i&&this.config({labels:{rotation:-90}})}return this}},{key:"adjustRange",value:function adjustRange(){return this}},{key:"getScaleValue",value:function getScaleValue(e){if(null!==e&&void 0!==e)return this.scale()(e)}},{key:"getTickSize",value:function getTickSize(){return this.axis().tickSize()}},{key:"getAxisDimensions",value:function getAxisDimensions(){return this.axisDimensions(function computeAxisDimensions(e){var t={},n=e.config(),r=n.name,i=n.labels,a=n.tickValues,o=(i.smartTicks?0:i.rotation)*Math.PI/180,u=e.dependencies().labelManager,c=Ns(e),s=c.largestLabelDim,l=c.axisTickLabels,f=c.smartTick,h=s.height,d=s.width;return 0===e.domain().length?null:(!1===e._rotationLock&&(e.setRotationConfig(a||l,s.width),e._rotationLock=!1),t=i.smartTicks?f:{width:Math.abs(h*Math.sin(o))+Math.abs(d*Math.cos(o)),height:Math.abs(d*Math.sin(o))+Math.abs(h*Math.cos(o))},u.setStyle(e._axisNameStyle),{tickSize:e.getTickSize(),tickLabelDim:t,axisLabelDim:u.getOriSize(r),largestLabelDim:s,axisTickLabels:l})}(this)),this.axisDimensions()}},{key:"getLogicalSpace",value:function getLogicalSpace(){return this.logicalSpace()||(this.logicalSpace(function calculateContinousSpace(e){e.range();var t=e.config(),n=e.getAxisDimensions(),r=t.orientation,i=t.show,a=t.showAxisName,o=n.axisLabelDim;if(!1===i)return{width:0,height:0};var u=o.width;if(r===Yc||r===Gc){var c=Ls(e,n,t),s=c.width,l=c.height;return{width:Math.max(s,u),height:l}}var f=Rs(e,n,t),h=f.width,d=f.height;return{width:h,height:Math.max(d,a?u:0)}}(this)),js(this),this.logicalSpace()),this.logicalSpace()}},{key:"invert",value:function invert(){for(var e=this,t=arguments.length,n=Array(t),r=0;ra[1];return"band"===r?(n=i.invertExtent(e,t),[i(o?n[n.length-1]:n[0]),i(o?n[0]:n[n.length-1])+i.bandwidth()]):[e,t]}},{key:"updateDomainBounds",value:function updateDomainBounds(e){var t=this.domain();return this.config().domain?t=this.config().domain:(0===t.length&&(t=e),e.length&&(t=[Math.min(t[0],e[0]),Math.max(t[1],e[1])])),this.domain(t)}},{key:"updateDomainCache",value:function updateDomainCache(e){!1===this._domainLock&&(this.domain([]),this._domainLock=!0);var t=[];return e&&e.forEach(function(e){void 0!==e&&null!==e&&t.push(e)}),this.updateDomainBounds(t)}},{key:"getMinTickDifference",value:function getMinTickDifference(){return this.domain()}},{key:"getFormattedTickValues",value:function getFormattedTickValues(e){return e}},{key:"setTickValues",value:function setTickValues(){var e=this.config().tickValues;return e?(e instanceof Array&&this.axis().tickValues(e),this):this}},{key:"getUnitWidth",value:function getUnitWidth(){return 0}},{key:"serialize",value:function serialize(){return{name:this.name,type:this.type,range:this.range(),config:this.config()}}},{key:"registerEvent",value:function registerEvent(e,t){this._eventList.push({name:e,action:t})}},{key:"on",value:function on(e,t){e=e||"update",this.registerEvent(e,t)}},{key:"render",value:function render(){return this.mount()&&function renderAxis(e){var t=e.config(),n=e.dependencies().labelManager,r=e.mount(),i=e.range(),a=e.axis(),o=e.scale(),u=e._axisNameStyle,c=e._tickLabelStyle,s=e.formatter,l=e.tickValues,f=t.orientation,h=t.name,d=t.labels,p=t.xOffset,y=t.yOffset,g=t.axisNamePadding,v=t.className,m=t.showAxisName,b=t.show,_=t.id,x=t.interpolator,w=t.classPrefix;if(b){var k=e.getTickSize(),C=Eo(Ao(r),"g",[e],""+v,{},function(e){return e.config().id});n.setStyle(c),"linear"===x&&e.setTickValues();var S=o.ticks||o.quantile||o.domain;s&&a.tickFormat(s(l||a.tickValues()||S()));var P=Math.abs(i[0]-i[1]),A=e.axisDimensions().tickLabelDim;C.attr("transform","translate("+p+","+y+")"),Ts(e),!1===d.smartTicks?C.transition().duration(1e3).call(a):C.call(a),C.selectAll(".tick").classed(w+"-ticks",!0),C.selectAll(".tick line").classed(w+"-tick-lines",!0),C.selectAll(".tick text").classed(w+"-ticks",!0).classed(w+"-ticks-"+_,!0),Os(C,e,k);var E=Eo(C,"text",[h],w+"-axis-name").attr("text-anchor","middle").classed(w+"-axis-name-"+_,!0).text(function(e){return e});E.classed(ys,!m);var M=P/2;n.setStyle(u);var O=n.getOriSize(h),T={labelProps:A,tickSize:k,axisNamePadding:g,axisNameHeight:O.height,axisNameWidth:O.width,yOffset:y,xOffset:p,labelOffset:M,availableSpace:e.availableSpace()};Fs(E,f,T)}}(this),this}},{key:"remove",value:function remove(){return this.store().unsubscribeAll(),Ao(this.mount()).remove(),this}},{key:"unsubscribe",value:function unsubscribe(){return this.store().unsubscribeAll(),this}},{key:"isReverse",value:function isReverse(){var e=this.range();return e[0]>e[1]}},{key:"getPixelToValueRatio",value:function getPixelToValueRatio(){var e=this.scale(),t=e.range(),n=e.domain();return Math.abs(t[1]-t[0])/(n[1]-n[0])}},{key:"id",get:function get(){return this._id}}],[{key:"defaultConfig",value:function defaultConfig(){return Es}}]),SimpleAxis}(),Vs=function(){function defineProperties(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:0,t=arguments[1],n=arguments[2],r=arguments[3],i=n.left,a=n.right,o=n.top,u=n.bottom,c=this.config(),s=c.orientation,l=c.fixedBaseline,f=this.getAxisDimensions().tickLabelDim;if(this.availableSpace({width:e,height:t}),s===Yc||s===Gc){var h=f.width;this.range([(l?0:h/2)+i,e-a-h/2]);var d=this.getLogicalSpace().height;r&&this.config({yOffset:Math.max(d,t)})}else{var p=f.height;this.range([t-u-(l?1:p/2),p/2+o]);var y=this.getLogicalSpace().width;r&&this.config({xOffset:Math.max(y,e)})}return this}},{key:"setTickValues",value:function setTickValues(){var e=this.config().tickValues,t=this.axis();return e?(e instanceof Array&&this.axis().tickValues(e),this):(t.tickValues(this.getTickValues()),this)}},{key:"getTickValues",value:function getTickValues(){var e=this.config(),t=e.orientation,n=e.tickValues,r=this.range(),i=this.axis(),a=Math.abs(r[0]-r[1]),o=Ns(this).largestLabelDim;return n?i.scale().ticks(n):function getNumberOfTicks(e,t,n,r){var i=n.scale().ticks(),a=r.config().numberOfTicks,o=i.length,u=o;return o*(1.5*t)>e&&(u=Math.floor(e/(1.5*t))),u=Math.min(a,Math.max(1,u)),n.scale().ticks(u)}(a,o[t===Gc||t===Yc?"width":"height"],i,this)}},{key:"getMinTickDifference",value:function getMinTickDifference(){return xa(this.config().tickValues)}},{key:"setFixedBaseline",value:function setFixedBaseline(e){var t=this.config(),n=t.orientation,r=t.labels.rotation,i=this.axis(),a=this._axisDimensions.largestLabelDim,o=a.width,u=a.height;return i.tickTransform(function(e,t){return 0!==t||n!==Xc&&n!==Kc?0!==t||n!==Yc&&n!==Gc||0!==r?"":"translate("+o/2+"px, 0px) rotate("+r+"deg)":"translate(0, -"+u/3+"px)"}),e}}],[{key:"type",value:function type(){return Qc}}]),ContinousAxis}(),Zs=function(){function defineProperties(e,t){for(var n=0;n0&&e.length*(t+this._minTickDistance.width)>a&&(a&&o0&&e.length*t>i&&(i&&1.25*a1?t.range:[al].concat(props_toConsumableArray(t.range)));var r=na(n,e.config()),i=na(r,t);return i.range instanceof Array&&(i.range=i.range.map(function(e,t){return sl(e,il[t])}),i.stops=t.stops||i.range.length),i.value=sl(i.value,i.value),i}},domain:{},scale:{},uniqueValues:{}};function color_strategy_defineProperty(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function color_strategy_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);tMath.min(t.length,18))for(var r=aa()(function hslInterpolator(){return Ne}(),t.map(function(e){return ul(e)})),i=0;i0&&void 0!==arguments[0]?arguments[0]:[];if(e.length){var t=this.scale(),n=t.range?t.range():null,r=this._colorStrategy.domainRange()(e,this.config().stops,n);this.domain(r.domain),r.range&&this.scale().range(r.range),this.uniqueValues(r.uniqueVals),this.scale().domain(r.scaleDomain||this.domain())}return this}},{key:"serialize",value:function serialize(){return{type:this.constructor.type(),scale:this.scale(),domain:this.domain(),config:this.config()}}},{key:"transformColor",value:function transformColor(e,t){var n=360*e[0],r=100*e[1],i=100*e[2],a=e[3]||1,o=n+t[0],u=r+t[1],c=i+t[2],s=a+t[3]||0;return{color:"hsla("+o+","+u+"%,"+c+"%,"+s+")",hsla:[o/360,u/100,c/100,s]}}},{key:"id",value:function id(){return this._id}}],[{key:"defaultConfig",value:function defaultConfig(){return ol}},{key:"type",value:function type(){return"color"}}]),ColorAxis}(),Sl={value:36,range:[36,1e3]};function size_strategy_defineProperty(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function size_strategy_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t0&&void 0!==arguments[0]?arguments[0]:0,t=this.config().value,n=this.scale(),r=this.domain()||[1,1];return n&&r[0]!==r[1]?this._sizeStrategy.range(e,n,this.domain(),this.uniqueValues()):t}},{key:"updateDomain",value:function updateDomain(e){if(e){var t=(0,this._sizeStrategy.domain)(e,this.config().intervals);this.domain(t.domain),this.uniqueValues(t.uniqueVals),this.scale().domain(t.scaleDomain||this.domain())}return this}},{key:"serialize",value:function serialize(){return{type:this.constructor.type(),scale:this.scale(),domain:this.domain(),range:this.range(),config:this.config()}}},{key:"id",value:function id(){return this._id}}],[{key:"defaultConfig",value:function defaultConfig(){return Sl}},{key:"type",value:function type(){return"size"}}]),SizeAxis}(),Ol={generator:null,value:"circle",range:["circle","diamond","star","cross","square","wye","triangle"]},Tl={config:{},domain:{},scale:{},uniqueValues:{},generator:{}},Fl=function(){function defineProperties(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:[];return e.length&&(this.uniqueValues(e),this.domain(e),this.scale().domain(e),this.config().generator&&(this._generatedShapes=function shapeGenerator(e,t){var n={};return e.forEach(function(e){n[e]=t(e)}),n}(e,this.config().generator))),this}},{key:"serialize",value:function serialize(){return{type:this.constructor.type(),scale:this.scale(),domain:this.domain(),range:this.config().range,config:this.config()}}},{key:"id",value:function id(){return this._id}}],[{key:"defaultConfig",value:function defaultConfig(){return Ol}},{key:"type",value:function type(){return"shape"}}]),ShapeAxis}();function data_type_scale_map_defineProperty(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var Il="measure",Dl="temporal",Ll=(data_type_scale_map_defineProperty(Nl={},"dimension",Zc),data_type_scale_map_defineProperty(Nl,Il,Qc),data_type_scale_map_defineProperty(Nl,Dl,Jc),function(e,t,n){var r=n.groupBy instanceof Array?n.groupBy:[n.groupBy],i=r.map(function(t){return e.findIndex(function(e){return e.name===t})});if(void 0!==i.find(function(e){return-1===e}))throw new Error("Groupby field "+r+" not found in schema");return function nestCollection(e){var t=T();return e.keys.forEach(function(e){return t.key(function(t){return t[e]})}),t.entries(e.data)}({keys:i,data:t})});var Rl;function transform_factory_defineProperty(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var Bl=(transform_factory_defineProperty(Rl={},"identity",function identityTransform(e,t,n){return t}),transform_factory_defineProperty(Rl,"group",Ll),transform_factory_defineProperty(Rl,"stack",function(e,t,n){var r=n.uniqueField,i=n.value,a=n.groupBy,o=n.sort||"descending",u=function normalizeData(e,t,n,r,i){var a=Ll(t,e,{groupBy:r}),o=t.findIndex(function(e){return e.name===r}),u=t.findIndex(function(e){return e.name===n}),c=t.findIndex(function(e){return e.name===i}),s=e.map(function(e){return e[c]}).filter(function(e,t,n){return n.indexOf(e)===t}).sort(),l=t.reduce(function(e,t,n){return e[n]=t.name,e},{});return{data:a.map(function(e){var t={},n=e.values.reduce(function(e,n){return e=n.reduce(function(e,r,i){return i===c?(e[r]=n[u],t[r]=n):i!==u&&(e[l[i]]=r),e},e)},{});return n._tuple=t,s.forEach(function(t){if(void 0===n[t]){n[t]=0;var r=new Array(e.values[0].length);r[o]=e.key,r[c]=t,n._tuple[t]=r}}),n}),keys:s}}(t,e,i,r,a),c=u.keys,s={},l=n.orderBy,f=e.findIndex(function(e){return e.name===l}),h=e.findIndex(function(e){return e.name===a});-1!==f&&(c.forEach(function(e){var n=t.find(function(t){return t[h]===e});s[e]=n[f]}),u.keys.sort(function(e,t){return s[e].localeCompare(s[t])}));var d=va({keys:u.keys,offset:n.offset||"diverging",order:o,data:u.data});return d.forEach(function(e){e.forEach(function(t){t.data=t.data._tuple[e.key]})}),d}),Rl);var zl=function transformFactory(e){var t=Bl[e];if("function"!=typeof t)throw new Error("Invalid transform type supplied.");return t},Hl=function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function sliceIterator(e,t){var n=[],r=!0,i=!1,a=void 0;try{for(var o,u=e[Symbol.iterator]();!(r=(o=u.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){i=!0,a=e}finally{try{!r&&u.return&&u.return()}finally{if(i)throw a}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}();var Vl,Ul=f.BAND,Wl=function getLayerColor(e,t){var n=e.datum,r=e.index,i=t.colorEncoding,a=t.colorAxis,o=t.colorFieldIndex,u="",c="";return i&&i.value instanceof Function?(c=i.value(n,r),u=i.value(n,r)):(u=a.getRawColor(n._data[o]),c=a.getHslString(u)),{color:c,rawColor:u}},ql=function transfromColor(e,t,n,r){t.meta.stateColor[n]=t.meta.stateColor[n]||t.meta.originalColor;var i=e.transformColor(t.meta.stateColor[n],r);return t.meta.stateColor[n]=i.hsla,i},Gl=function applyInteractionStyle(e,t,n,r){var i=e.getPlotElementsFromSet(t),a=e.axes().color,o=r.apply,u=r.interactionType;n.forEach(function(e){var t=e.type;i.style(t,function(n){var r=n.meta,i=r.colorTransform,c=r.stateColor,s=r.originalColor;if(i[u]=i[u]||{},o&&!i[u][t])return i[u][t]=e.intensity,ql(a,n,t,e.intensity).color;if(!o&&i[u][t])return i[u][t]=null,ql(a,n,t,e.intensity.map(function(e){return-e})).color;var l=c[t]?c[t]:s,f=Hl(l,4);return"hsla("+360*f[0]+","+100*f[1]+"%,"+100*f[2]+"%, "+(f[3]||1)+")"})})},Yl=function getAxesScales(e){var t=[Bc.X,Bc.Y].map(function(t){return e[t]}),n=Hl(t,2),r=n[0],i=n[1],a=[r,i].map(function(e){return e&&e.scale()}),o=Hl(a,2);return{xAxis:r,yAxis:i,xScale:o[0],yScale:o[1]}},Xl=function getIndividualClassName(e,t,n,r){var i=r.config().individualClassName,a="";return i instanceof Function&&(a=i(e,t,n,r)),a},Kl=function attachDataToVoronoi(e,t){var n;e.data((n=[]).concat.apply(n,function helpers_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t=e[0]?(i=d=e[1],h=f=e[0]):(i=d=e[0],h=f=e[1]),(t=a===ir.FieldType.MEASURE?{x:h,x0:d,y:n[u],y0:n[u]}:{x:n[o],x0:n[o],y:i,y0:f})._data=n,t._id=n[l]}else(t={x:e[o],y:e[u],x0:e[c],y0:e[s]})._data=e,t._id=e[l];return t})}).filter(function(e){return e.length})}(e,t,this.encodingFieldsInf(),this.transformType())}},{key:"getNearestPoint",value:function getNearestPoint(){return null}},{key:"applyInteractionStyle",value:function applyInteractionStyle(e,t,n){var r=(this.config().interaction||{})[e];r&&Gl(this,t,r,{apply:n,interactionType:e})}},{key:"transformType",value:function transformType(){return arguments.length?(this._transformType=arguments.length<=0?void 0:arguments[0],this):this._transformType}},{key:"render",value:function render(){return this}},{key:"elemType",value:function elemType(){return"g"}},{key:"remove",value:function remove(){return this.store().unsubscribeAll(),Ao(this.mount()).remove(),this}},{key:"cachePoint",value:function cachePoint(e,t){if(null===e)return this;var n=this._pointMap;return!n[e]&&(n[e]=[]),n[e].push(t),this}},{key:"dataProps",value:function dataProps(){return arguments.length?(this._dataProps=arguments.length<=0?void 0:arguments[0],this):this._dataProps}},{key:"getIdentifiersFromData",value:function getIdentifiersFromData(e){var t=this.data().getData().schema,n=this.data().getFieldsConfig(),r=[[],[]],i=this.encodingFieldsInf(),a=i.xFieldType,o=i.yFieldType,u=i.xField,c=i.yField,s=[a,o].map(function(e){return e===ir.FieldType.MEASURE}),l=tf(s,2),f=l[0],h=l[1];if(t.forEach(function(t,i){var a=t.name;n[a].def.type===ir.FieldType.DIMENSION&&(r[0].push(a),r[1].push(e[i]))}),f&&h){var d,p,y=n[u].index,g=n[c].index;(d=r[0]).push.apply(d,[u,c]),(p=r[1]).push.apply(p,[e[y],e[g]])}return r}},{key:"getPlotSpan",value:function getPlotSpan(){return{x:0,y:0}}},{key:"getPlotPadding",value:function getPlotPadding(){return{x:0,y:0}}},{key:"getPointsFromIdentifiers",value:function getPointsFromIdentifiers(e){var t,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=n.getAllAttrs,i=n.getBBox;if(!this.data())return[];var a=void 0,o=void 0;if(e instanceof ar.a){var u=e.getData();a=u.schema.map(function(e){return e.name}),o=u.data}else a=e[0],o=e.slice(1,e.length);var c=this._points,s=this.data().getFieldsConfig(),l=(t=[]).concat.apply(t,function base_layer_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t2&&void 0!==arguments[2]?arguments[2]:{},r=Ao(n.event.target).data()[0];if(Di(r)){var i=r.datum,a=i.data,o=i.uid;return{id:this.getIdentifiersFromData(a,o),layerId:this.id()}}return null}},{key:"getPlotElementsFromSet",value:function getPlotElementsFromSet(e){return Ao(this.mount()).selectAll(this.elemType()).filter(function(t){return-1!==e.indexOf(t.datum.uid)})}},{key:"render",value:function render(e){var t=this,n=this.measurement(),r=n.height,i=n.width,a=this.config(),o=a.classPrefix,u=a.defClassName,c=a.minOuterRadius,s=a.innerRadius,l=a.outerRadius,f=a.cornerRadius,h=a.padAngle,d=a.padRadius,p=a.padding,y=a.transition,g=a.innerRadiusFixer,v=this.axes().size,m=this._store,b=m.get("transformedData"),_=r-p.top-p.bottom,x=i-p.left-p.right,w=Gi(u,this.id(),o),k=function getRadiusRange(e,t,n){var r=n.minOuterRadius,i=n.innerRadius,a=n.outerRadius,o=n.innerRadiusFixer;return[Math.max(i+o||0,r),a||Math.min(t,e)/2]}(x,_,{minOuterRadius:c,innerRadius:s,outerRadius:l,innerRadiusFixer:g}),C=this.axes().color,S=l||Math.min(_,x)/2,P=m.get("domain").radius,A=function rangeValueGetter(e){return function getRangeValue(e,t,n,r,i){var a=1,o=e.outerRadiusValue,u=e.sizeVal,c=i.domain(),s=i.getSize(u)/(c?i.range()[1]:i.config().value);return a*=(t[1]-t[0])/(n[1]-n[0]),(t[0]+(o-n[0])*a||r)*s}(e,k,P,S,v)},E=bf().innerRadius(s?Math.min(_/2,x/2,s):0).cornerRadius(f).padAngle(h).padRadius(d);this._chartWidth=x,this._chartHeight=_;var M=Eo(Ao(e),"g",[1],w[0]+"-group").classed(w[1]+"-group",!0).attr("transform","translate("+x/2+","+_/2+")"),O=[],T=0;return Eo(M,"g",b,""+w[0],{update:function tween(e){Eo(e,"path",function(e,t){return[{datum:e,index:t,arcFn:E,meta:{originalColor:C.getRawColor(e.colorVal),stateColor:{},colorTransform:{}}}]},w[0]+"-path").style("fill",function(e){return C.getColor(e.datum.colorVal)}).transition().duration(y.duration).attrTween("d",function(){for(var e=arguments.length,t=Array(e),n=0;n0&&e.forEach(function(e){var i=e[0].datum.startAngle,a=e[e.length-1].datum.endAngle,o=2*Math.PI*i/(2*Math.PI+i-a);e.forEach(function(e){var i=e.elem,a=e.datum;i.each(function(){var e=Ao(this);e.selectAll("path").transition().duration(t.duration).attrTween("d",function(){return function(e){var t=n(a);return a.outerRadius=t,r(ra()(a,{startAngle:o,endAngle:o,outerRadius:t})(e))}}).remove(),e.remove()})})})}(O,y,A,E),this}},{key:"getPointsFromIdentifiers",value:function getPointsFromIdentifiers(e){if(!this.data())return[];var t=e[0],n=e.slice(1,e.length),r=Ao(this.mount()).selectAll("path").data(),i=this.data().getFieldsConfig(),a=r.filter(function(e){var r=e.datum.data,a=e.datum.uid;return t.every(function(e,t){return e in i&&i[e].def.type===ir.FieldType.DIMENSION?-1!==n.findIndex(function(n){return n[t]===r[i[e].index]}):e!==nr.ROW_ID||-1!==n.findIndex(function(e){return e[t]===a})})})[0];if(a){var o=a.arcFn.centroid(a.datum);return[{x:o[0]+this._chartWidth/2,y:o[1]+this._chartHeight/2,width:2,height:2}]}return[]}}],[{key:"defaultConfig",value:function defaultConfig(){return yf}},{key:"formalName",value:function formalName(){return"arc"}}]),ArcLayer}(),xf=function drawText(e,t,n,r){var i=Ao(e).selectAll("g").data(t),a=i.enter().append("g").each(function(e){To(this,e.enter)}).merge(i),o=Lo(Ao(e),n.className),u=parseInt(o.fontSize,10);return r.setStyle(o),a.each(function(e){var t,n=Ao(this),i=e.update,a=e.text,o=e.color,c=e.textanchor,s=e.style,l=e.background;if(t=l.value){var f=l.padding,h=void 0,d=r.getOriSize(e.text),p=d.width,y=d.height,g=Eo(n,"rect",[1]);h="end"===c?p:"start"===c?0:p/2,To(g.node(),{x:i.x-h-f/2,y:i.y-u-f/2,width:p+f,height:y+f}),l&&Fo(g,{background:t})}var v=Eo(n,"text",function(e){return[e]}).text(a),m=v.node();s&&Fo(m,s),o&&Fo(m,{fill:o}),e.className&&v.classed(e.className,!0),To(m,i),v.attr("text-anchor",c)}),i.exit().remove(),i},wf={defClassName:"layer-text",classPrefix:"muze",className:"",transform:{type:"identity"},interaction:{highlight:[{type:"fill",intensity:[0,0,-15,0]}],fade:[{type:"fill",intensity:[0,0,15,0]}],focus:[{type:"fill",intensity:[0,0,15,0]}]},transition:{effect:"cubic",duration:1e3},encoding:{color:{},text:{value:"",background:{padding:10}}},states:{highlight:{className:"muze-layer-text-highlight"},fadeout:{className:"muze-layer-text-fadeout"},selected:{className:"muze-layer-text-selected"}}},kf=(n(27),function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function sliceIterator(e,t){var n=[],r=!0,i=!1,a=void 0;try{for(var o,u=e[Symbol.iterator]();!(r=(o=u.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){i=!0,a=e}finally{try{!r&&u.return&&u.return()}finally{if(i)throw a}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}()),Cf=function(){function defineProperties(e,t){for(var n=0;n4)}(r)?r:pa(r).size(i)(a),Eo(n,"path",function(e){return[e]}).attr("d",s)}else e.shape="circle",createShape(e,t)}(e,this)}),(t=c?t:t.transition().duration(c?0:i.duration)).attr("transform",function(e){return"translate("+e.update.x+","+e.update.y+")"}).each(function(e){var t=e.style,n=Ao(this);Xi(t,function(e){return n.style(e,t[e])}),n.attr("class",""+a),n.classed(e.className,!0)});var h=l.exit();c?h.remove():h.transition().ease(Wi[u]).duration(o).on("end",function(){Ao(this).remove()}).style("fill-opacity",0).style("stroke-opacity",0)},Af={defClassName:"layer-point",className:"",classPrefix:"muze",defColorStyle:"stroke",interaction:{highlight:[{type:"fill",intensity:[0,0,-20,0]}],fade:[{type:"fill",intensity:[0,0,20,0]}],focus:[{type:"fill",intensity:[0,0,20,0]}]},innerPadding:.1,nearestPointThreshold:10,transform:{type:"identity"},transition:{effect:"cubic",duration:1e3},encoding:{size:{value:30},color:{},shape:{value:"circle"},x:{},y:{},strokeOpacity:{value:.5},fillOpacity:{value:.5}},shapes:["circle","cross","diamond","square","star","wye","triangle"],sizes:[20,30,40,50,60,70]},Ef=(n(29),function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function sliceIterator(e,t){var n=[],r=!0,i=!1,a=void 0;try{for(var o,u=e[Symbol.iterator]();!(r=(o=u.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){i=!0,a=e}finally{try{!r&&u.return&&u.return()}finally{if(i)throw a}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}()),Mf=function(){function defineProperties(e,t){for(var n=0;n3&&void 0!==arguments[3]?arguments[3]:{},a=[],o=t.size,u=t.shape,c=t.color,s=t.x,l=t.y,f=o.field,h=o.value,d=u.field,p=s.field,y=l.field,g=n.size,v=n.shape,m=this.data().getFieldsConfig(),b=m[p]&&m[p].def.type===ir.FieldType.DIMENSION,_=m[y]&&m[y].def.type===ir.FieldType.DIMENSION,x=b?Bc.X:_?Bc.Y:null,w=c&&c.field,k=m[w]&&m[w].index,C=this._store.get("measurement"),S=m[d]&&m[d].index,P=m[f]&&m[f].index,A=n.color,E=i.offset,M=E.x,O=E.y,T=function _loop(i,o){var u=e[i],s=u._data,l=h instanceof Function?h(u,i):g.getSize(s[P]),f=v.getShape(s[S]),d=[Bc.X,Bc.Y].map(function(e){var r=null===u[e]?void 0:u[e],i=e===Bc.X?C.width:C.height;return t[e].field?n[e].getScaleValue(r):i/2}),p=Ef(d,2),y=p[0],m=p[1];y+=M,m+=O;var b=Wl({datum:u,index:i},{colorEncoding:c,colorAxis:A,colorFieldIndex:k}),_=b.color,w=b.rawColor,E={fill:_,stroke:_};if(!isNaN(y)&&!isNaN(m)){var T={enter:{x:y,y:m},update:{x:y,y:m},shape:f,size:Math.abs(l),meta:{stateColor:{},originalColor:w,colorTransform:{}},style:E,_data:s,_id:u._id,source:u._data,rowId:u._id};T.className=Xl(u,i,e,r),a.push(T),r.cachePoint(u[x],T)}},F=0,N=e.length;F=0?C:k))):(p=c===Nc||r[e]>=0?C:k,y=Math.abs(p-(c===Nc?S:r[e]>=0?k:C))),d=k}else p=0,y=f[i];return{enterSpace:g,enter:d,pos:p,space:y}}),jf=function resolveDimensions(e,t,n){var r={xAxis:n.x,yAxis:n.y},i=Nf("x",r,t,e),a=i.enterSpace,o=i.enter,u=i.pos,c=i.space,s=Nf("y",r,t,e),l=s.enterSpace;return{enter:{x:o,y:s.enter,width:a,height:l},update:{x:u,y:s.pos,width:c,height:s.space}}},If=function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function sliceIterator(e,t){var n=[],r=!0,i=!1,a=void 0;try{for(var o,u=e[Symbol.iterator]();!(r=(o=u.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){i=!0,a=e}finally{try{!r&&u.return&&u.return()}finally{if(i)throw a}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),Df=function(){function defineProperties(e,t){for(var n=0;n=k.x&&e<=k.width+k.x&&t>=k.y&&t<=k.height+k.y){c=w;break}c=null}var C=c&&c._data;return C&&(u=this.getIdentifiersFromData(C,c._id)),c?{dimensions:[c.update],id:u,layerId:this.id()}:c}},{key:"getPlotSpan",value:function getPlotSpan(){return this._plotSpan}}],[{key:"formalName",value:function formalName(){return"bar"}},{key:"defaultConfig",value:function defaultConfig(){return Ff}},{key:"defaultPolicy",value:function defaultPolicy(e,t){var n=rf.defaultPolicy(e,t),r=n.encoding.color.field,i=n.transform;return r&&(i.groupBy=r),n}}]),BarLayer}(),zf={defClassName:"layer-tick",className:"",classPrefix:"muze",interaction:{highlight:[{type:"stroke",intensity:[0,0,-15,0]}],fade:[{type:"stroke",intensity:[0,0,15,0]}],focus:[{type:"stroke",intensity:[0,0,15,0]}]},innerPadding:.1,transform:{type:"identity"},transition:{effect:"cubic",duration:1e3},encoding:{color:{},x:{},y:{},x0:{},y0:{},strokeOpacity:{value:.5},fillOpacity:{value:.5}},states:{highlight:{className:"muze-layer-tick-highlight"},fadeout:{className:"muze-layer-tick-fadeout"},selected:{className:"muze-layer-tick-selected"}}},Hf=function(e){var t=e.points,n=e.container,r=e.keyFn,i=e.className,a=Ao(n),o=a.selectAll("path").data(t,r),u=o.enter().append("path");return a.attr("class",i||""),u.each(function(e){var t=Ao(this),n=e.enter||{};Object.entries(n).forEach(function(e){return!isNaN(e[1])&&t.attr(e[0],e[1])})}),o.exit().remove(),o.merge(u).each(function(e){var t=Ao(this),n=e.update,r=e.style||{},i=void 0!==n.x0?n.x0:n.x,a=void 0!==n.y0?n.y0:n.y,o="M "+n.x+" "+n.y+" L "+i+" "+a;e.className&&t.classed(e.className,!0),t.attr("d",o),Object.entries(r).forEach(function(e){return t.style(e[0],e[1])})})},Vf=(n(33),function(){function defineProperties(e,t){for(var n=0;n3&&void 0!==arguments[3]?arguments[3]:{},i=[],a=Yl(n),o=a.xAxis,u=a.yAxis,c=this.data().getFieldsConfig(),s=this.encodingFieldsInf(),l=s.xField,f=s.yField,h=s.x0Field,d=s.y0Field,p=s.xFieldType,y=s.yFieldType,g=p===ir.FieldType.DIMENSION,v=y===ir.FieldType.DIMENSION,m=g?Bc.X:v?Bc.Y:null,b=t.color,_=b&&b.field,x=c[_]&&c[_].index,w=this._store.get("measurement"),k=n.color,C=r.offset,S=C.x,P=C.y,A=r.span,E=A.x,M=A.y,O=0,T=e.length;O0&&(n[0]=[].concat(field_sanitizer_toConsumableArray(n[0]),field_sanitizer_toConsumableArray(n[1])),n[1]=[]),{fields:n.map(function(e,t){return 1===t?r[t].concat(n[t]):n[t].concat(r[t])}),dimensions:[].concat(field_sanitizer_toConsumableArray(n[0]),field_sanitizer_toConsumableArray(n[1])),measures:[].concat(field_sanitizer_toConsumableArray(r[0]),field_sanitizer_toConsumableArray(r[1])),temporal:[].concat(field_sanitizer_toConsumableArray(i[0]),field_sanitizer_toConsumableArray(i[1])),categorical:[].concat(field_sanitizer_toConsumableArray(a[0]),field_sanitizer_toConsumableArray(a[1]))}}(i,n)}),r=Sh(n,2),i=r[0],a=r[1],o=i.fields,u=i.dimensions,c=i.measures,s=i.temporal,l=i.categorical,f=a.fields,h=a.dimensions,d=a.measures;return{rows:o,rowDimensions:u,rowMeasures:c,rowTemporalFields:s,rowCategoricalFields:l,columns:f,columnTemporalFields:a.temporal,columnCategoricalFields:a.categorical,columnDimensions:h,columnMeasures:d}},Eh=function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function sliceIterator(e,t){var n=[],r=!0,i=!1,a=void 0;try{for(var o,u=e[Symbol.iterator]();!(r=(o=u.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){i=!0,a=e}finally{try{!r&&u.return&&u.return()}finally{if(i)throw a}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),Mh=function(){function defineProperties(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:{},t=arguments[1],n=Jh(th,t.rows,e),r=Eh(n,2),i=r[0],a=r[1],o=Jh("column",t.columns,e),u=Eh(o,2),c=u[0],s=u[1];return this.axisFrom({row:a,column:s}),this.headerFrom({row:i,column:c}),this}}]),VisualEncoder}(),Th={linear:Qs,band:Js,temporal:nl,size:Ml,color:Cl,shape:jl},Fh={dimension:f.BAND,categorical:f.BAND,measure:f.LINEAR,temporal:f.TIME},Nh=function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function sliceIterator(e,t){var n=[],r=!0,i=!1,a=void 0;try{for(var o,u=e[Symbol.iterator]();!(r=(o=u.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){i=!0,a=e}finally{try{!r&&u.return&&u.return()}finally{if(i)throw a}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}();function encoder_helper_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t1?e.position="both":e.position=n.axisFrom()[a],r[o]=Ih(o,s[i],e,o===$f?l:f)}),r}},{key:"getFacetsAndProjections",value:function getFacetsAndProjections(e,t){for(var n=[],r=[],i=0,a=[],o=[],u=e[0],c=e[1],s=u.length,l=c.length,f=this.axisFrom(),h=0;hi)for(var g=i;g-1&&(r=[[b,b]],a.splice(_,1)),o.splice(0,1)}else{var x=a.length-1,w=a[x];r=[[w]];var k=Dh(o,w);k>-1&&(r=[[w,w]],o.splice(k,1)),a.splice(x,1)}return{facets:n=(n=[].concat(a,o)).filter(function(e,t,n){return t===n.findIndex(function(t){return t.toString()===e.toString()})}),projections:r}}},{key:"fieldSanitizer",value:function fieldSanitizer(e,t){return function get(e,t,n){null===e&&(e=Function.prototype);var r=Object.getOwnPropertyDescriptor(e,t);if(void 0===r){var i=Object.getPrototypeOf(e);return null===i?void 0:get(i,t,n)}if("value"in r)return r.value;var a=r.get;return void 0!==a?a.call(n):void 0}(CartesianEncoder.prototype.__proto__||Object.getPrototypeOf(CartesianEncoder.prototype),"fieldSanitizer",this).call(this,e,t)}},{key:"getRetinalFieldsDomain",value:function getRetinalFieldsDomain(e,t){var n=e.groupedModel,r={};for(var i in t)if({}.hasOwnProperty.call(t,i)){var a=t[i],o=a.field;if(!a.domain&&o){var u=Zh(n,o);r[o]=u}}return r}},{key:"serializeLayerConfig",value:function serializeLayerConfig(e){var t=[];return e.length&&e.forEach(function(e,n){var r=Gf.sanitizeLayerConfig(e);r.order=n,t.push(r)}),t}},{key:"getLayerConfig",value:function getLayerConfig(e,t){var n=[],r=e.columnFields,i=e.rowFields;return r.forEach(function(e){var r=e.toString();i.forEach(function(i){var a=[],o=i.toString(),u={x:{field:r},y:{field:o}},c=i.subtype(),s=function getDefaultMark(e,t){return"categorical"===e||"categorical"===t?"bar":"temporal"===e||"temporal"===t?"line":"point"}(e.subtype(),c),l=[{mark:s,def:{mark:s,encoding:u}}],f=function getLayerConfFromFields(e,t,n){return n.filter(function(n){var r,i,a,o=n instanceof Array?n:[n],u=(r=[]).concat.apply(r,encoder_helper_toConsumableArray(o.map(function(e){return e.encoding}).filter(function(e){return void 0!==e})));if(!u.length)return!0;var c=(i=[]).concat.apply(i,encoder_helper_toConsumableArray(u.map(function(e){return[e.x&&e.x.field,e.x0&&e.x0.field]}))).filter(function(e){return void 0!==e&&null!==e}),s=(a=[]).concat.apply(a,encoder_helper_toConsumableArray(u.map(function(e){return[e.y&&e.y.field,e.y0&&e.y0.field]}))).filter(function(e){return void 0!==e&&null!==e});if(!c.length&&!s.length)return!0;var l=!!c.length&&c.every(function(t){return-1!==e.indexOf(t)}),f=!!s.length&&s.every(function(e){return-1!==t.indexOf(e)});return c.length&&s.length?l&&f:l||f})}(e.getMembers(),i.getMembers(),t||[]);a=f.length?f.map(function(e){var t=na(na({},l[0].def),e),n=Gf.getSerializedConf(t.mark,t);return{mark:t.mark,order:t.order,def:n}}):l,n.push.apply(n,function cartesian_encoder_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);tt)for(var h=t;h0&&(e=na(e,t[0])),n.push(e)}),0===n.length&&(n=t),this.layers(n),n}},{key:"serializeLayerConfig",value:function serializeLayerConfig(e){var t=[];return e.length&&e.forEach(function(e){var n=Gf.getSerializedConf(e.mark,e);t.push({mark:e.mark,def:n})}),t}}],[{key:"type",value:function type(){return"polar"}}]),PolarEncoder}(),Hh=function(){function defineProperties(e,t){for(var n=0;n1&&void 0!==arguments[1]?arguments[1]:{},n=e.axisType,r=e.fieldsConfig,i=t.field,a=[],o=Th[n];return t.type=t.type?t.type:Qh(r,i||null),a.push(new o(t)),a}({axisType:e,fieldsConfig:t},n[e])}),r}},{key:"getLayerConfig",value:function getLayerConfig(e,t){var n=[];return t.forEach(function(t){var r=t;[nh,rh,ih].forEach(function(t){if(e[t]&&e[t].field){var n=r.def;r.def instanceof Array?n.forEach(function(n){n.encoding=n.encoding||{},!n.encoding[t]&&(n.encoding[t]={}),n.encoding[t].field=e[t].field}):(n.encoding=n.encoding||{},!n.encoding[t]&&(n.encoding[t]={}),n.encoding[t].field=e[t].field)}}),n.push(r)}),n}},{key:"setCommonDomain",value:function setCommonDomain(e){var t=e.domains,n=e.axes,r=e.encoding;return Object.entries(r).forEach(function(e){if(e[1]&&e[1].field){var r=e[0],i=e[1].field;i&&n[r].forEach(function(n){var r=t[i];!e[1].domain&&n.updateDomain(r)})}}),n}}],[{key:"type",value:function type(){return"retinal"}}]),RetinalEncoder}(),Uh=function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function sliceIterator(e,t){var n=[],r=!0,i=!1,a=void 0;try{for(var o,u=e[Symbol.iterator]();!(r=(o=u.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){i=!0,a=e}finally{try{!r&&u.return&&u.return()}finally{if(i)throw a}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),Wh=void 0;function group_utils_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t0?e[0].map(function(i,a){return new n({type:"header"},{labelManager:r}).source(function getHeaderText(e,t,n){var r="";if(t===n-1&&e.length>n){for(var i=t;i0&&void 0!==arguments[0]?arguments[0]:[];return new Vo(e)}([]),a=(i=i.data(n,r)).enter().append(t).merge(i);return i.exit()&&i.exit().remove(),a},nd=function getBorders(e,t){var n={top:!1,bottom:!1},r={left:!1,right:!1},i={top:!1,bottom:!1,left:!1,right:!1},a=e.rows,o=e.columns,u=e.values,c=Uh(a,2),s=c[0],l=c[1],f=Uh(o,2),h=f[0],d=f[1],p=t.fieldInfo(),y=p.rowDimensions,g=p.columnDimensions,v=p.rowTemporalFields,m=p.columnTemporalFields,b=p.columnMeasures,_=p.rowMeasures,x=y.length+g.length,w=_.length+b.length,k=v.length+m.length;if("polar"===t.constructor.type()){if(!x)return{showRowBorders:n,showColBorders:r,showValueBorders:i}}else if(!w&&!k&&x<=2)return{showRowBorders:n,showColBorders:r,showValueBorders:i};return n=function getRowBorders(e,t){var n={top:!1,bottom:!1};return(e.length>1||t.length>1)&&(n.top=!0,n.bottom=!0),n}(s,l),r=function getColumnsBorders(e,t){var n={left:!1,right:!1};return(e.length||t.length)&&(e[0]&&e[0].length>1||t[0]&&t[0].length>1)&&(n.left=!0,n.right=!0),n}(h,d),i=function getValueBorders(e,t){var n={top:!0,left:!0,bottom:!0,right:!0},r=[ah,oh],i=["top","bottom"];return e.forEach(function(e,t){e[0]&&e[0].length?n[r[t]]=!0:n[r[t]]=!1}),t.forEach(function(e,t){e.length?n[i[t]]=!0:n[i[t]]=!1}),n}([s,l],[h,d]),u.length>1&&(i.top=!0,i.bottom=!0),u.length&&u[0].length>1&&(i.left=!0,i.right=!0),{showRowBorders:n,showColBorders:r,showValueBorders:i}};function action_behaviour_map_defineProperty(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var rd=(action_behaviour_map_defineProperty(qh={},a.DRAG,{behaviours:[u.BRUSH],touch:!1}),action_behaviour_map_defineProperty(qh,a.HOVER,{behaviours:[u.HIGHLIGHT]}),action_behaviour_map_defineProperty(qh,a.LONGTOUCH,{behaviours:[u.SELECT],touch:!0}),action_behaviour_map_defineProperty(qh,a.TOUCHDRAG,{behaviours:[u.BRUSH],touch:!0}),action_behaviour_map_defineProperty(qh,a.CLICK,{behaviours:[u.SELECT],touch:!1}),qh),ad="config",od="data",ud="axes",cd="layerDef",sd="width",ld="height",fd="mount",hd="primaryXAxisUpdated",dd="primaryYAxisUpdated",pd="secondaryXAxisUpdated",yd="secondaryYAxisUpdated",gd="transform",vd="dataDomain",md="layersCreated",bd="fields",_d="timeDiffs",xd="layerAxisIndex";function src_helper_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t2&&void 0!==arguments[2]?arguments[2]:{},r=void 0,i=n.payload,a=n.selectionSet,o=n.propagationFields[t]||{},u=o.fields||[],c=o.append,s=i.criteria,l=e.context,f=l.cachedData()[0],h=l.id(),d=e.sideEffects(),p=e._behaviourEffectMap,y=a.mergedEnter.model,g=f.getFieldsConfig();i.sourceUnit=h,i.action=t,i.sourceCanvas=l.parentAlias();var v=e._propagationBehaviourMap[t]||t,m=[];null===s?r=null:Di(s)?(m=Object.keys(s||{}),r=y?y.project(m):null):(m=s[0],r=y?y.project(m):null);var b=l.facetByFields();if(null!==r&&u.length){var _=r.getData().schema.map(function(e){return e.name});r=function getModelWithFacetData(e,t){var n=e.getData(),r=n.schema,i=n.data,a=[],o=t[0].map(function(e){return{name:""+e,type:ir.FieldType.DIMENSION}}),u=t[1];return i.forEach(function(e){var t={};r.forEach(function(n,r){t[n.name]=e[r]}),o.forEach(function(e,n){t[e.name]=u[n]}),a.push(t)}),new ar.a(a,[].concat(data_propagator_toConsumableArray(r),data_propagator_toConsumableArray(o)))}(r,b),m=c?[].concat(data_propagator_toConsumableArray(_),data_propagator_toConsumableArray(u)):u,r=r.project(m)}var x=!1;m.length&&m.every(function(e){return g[e]&&g[e].def.type===ir.FieldType.MEASURE})&&(x=!0);var w=l.parentAlias();i.action=t;var k=e._actions.behavioural[v],C=!!k&&k.constructor.mutates(),S=function filterFn(e,t){var n=p[e.config.action],r=!e.config.groupId||n.some(function(e){return d[e.name||e].constructor.mutates()});return e.config.groupId!==t.groupId&&r},P=e._actions.behavioural[t],A=!!P&&P.constructor.mutates(),E={payload:i,action:t,criteria:r,isMutableAction:A,propagateInterpolatedValues:x,groupId:w,sourceId:A?w:h,filterFn:S,enabled:function enabled(e,n){return t===v||e.payload.sourceCanvas===n.context.parentAlias()}};f.propagate(r,E,!0),t!==v&&(E={payload:i,sourceId:C?w:h,criteria:r,isMutableAction:C,propagateInterpolatedValues:x,action:v,groupId:w,applyOnSource:t===v,enabled:function enabled(e,t){return e.payload.sourceCanvas!==t.context.parentAlias()},filterFn:S},f.propagate(r,E,!0,{filterImmutableAction:function filterImmutableAction(e,t){return e.groupId!==t.groupId}}))},Xd=function(){function defineProperties(e,t){for(var n=0;n1){var u=r[0].config();if("linear"===r[0].constructor.type()){if(u.alignZeroLine){r.forEach(function(e){return e.config({nice:!1})});var c=function getAdjustedDomain(e,t){var n=e[0]/(e[0]-t[0]),r=e[1]/(e[1]-t[1]),i=!1;return t[0]>0&&t[1]>0&&t[1]>0&&e[1]>0&&(i=!0,t[0]=0,t[1]=0),t[0]<0&&t[1]<0&&t[1]<0&&e[1]<0&&(i=!0,e[0]=0,e[1]=0),i||n===r||(n1&&void 0!==arguments[1]?arguments[1]:{},n=[],r=e;if(null===e)return[];var i=this.layers(),a=i.length;Di(e)&&(r=[Object.keys(e)],r=[].concat(visual_unit_toConsumableArray(r),visual_unit_toConsumableArray(function transposeArray(e){return e[0].map(function(t,n){return e.map(function(e){return e[n]})})}(Object.values(e)))));for(var o=0;o1&&void 0!==arguments[1]?arguments[1]:[]].map(function(e){return e.reduce(function(e,t){return e=[].concat(matrix_model_toConsumableArray(e),matrix_model_toConsumableArray(t.getMembers()))},[])})},ep=function createSelectedDataModel(e,t,n){return e.select(function(e){return t.every(function(t,r){return e[t].value===n[r]})})},tp=function uniqueKeyGenerator(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:[],i=t.facets,a=t.dataModel,o=t.uniqueValues;if(i[n+1]){var u=i[n];o.forEach(function(t){var o=a.select(function(e){return e[u].value===t}),c=Zh(o,i[n+1]);uniqueKeyGenerator(e,{facets:i,dataModel:o,uniqueValues:c},n+1,[].concat(matrix_model_toConsumableArray(r),[t]))})}else o.forEach(function(t){e.push([].concat(matrix_model_toConsumableArray(r),[t]))})},np=function projectRows(e,t){var n=t.allColumnProjections,r=t.rowProjections,i=t.optionalProjections;return r.length>0?r.map(function(t){var r=Jd(t,n),a=Zd(r,2),o=a[0],u=a[1];return e.project([].concat(matrix_model_toConsumableArray(o),matrix_model_toConsumableArray(u),matrix_model_toConsumableArray(i)))}):[e]},rp=function pushToMatrix(e,t){var n,r=[],i=e.matrix,a=e.datamodel,o=e.facetInfo,u=e.fieldInfo,c=u.rowProjections,s=u.colProjections,l=u.optionalProjections,f=o.rowIndex,h=o.columnIndex,d=c[f%c.length]||[];s.length>0?r=s.map(function(e,n){var r=Jd(e,d),i=Zd(r,2),u=i[0],c=i[1],p=a.project([].concat(matrix_model_toConsumableArray(u),matrix_model_toConsumableArray(c),matrix_model_toConsumableArray(l))),y={rowFields:d,columnFields:e},g={rowIndex:f,columnIndex:h*s.length+n};return t(p,{projections:y,indices:g},o)}):r=[t(a,{projections:{rowFields:d,columnFields:[]},indices:{rowIndex:f,columnIndex:h}},o)];i[f]=i[f]||[],(n=i[f]).push.apply(n,matrix_model_toConsumableArray(r))},ip=function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function sliceIterator(e,t){var n=[],r=!0,i=!1,a=void 0;try{for(var o,u=e[Symbol.iterator]();!(r=(o=u.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){i=!0,a=e}finally{try{!r&&u.return&&u.return()}finally{if(i)throw a}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}();function cell_creator_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t0?d.length:1):(a=g,o=p.length>0?p.length:1),s.length&&f===u&&l&&a.length){var h={axis:l,length:o,type:u},v=[];i<2?(h.keys=a,h.facetConfig=c.rows,v=up(h,r,t,n)):(h.facetConfig=c.columns,h.keys=a[0].map(function(e,t){return a.map(function(e){return e[t]})}),v=up(h,r,t,n)),r[u+"Headers"]=v}else r[u+"Headers"]=null}),r},sp=function computeMatrices(e,t){var n=e.resolver,r=e.datamodel,i=e.componentRegistry,a=e.encoders,o=t.globalConfig,u=t.selection,c=t.transform,s=o.autoGroupBy,l=n.dependencies().smartlabel,f=r.getFieldsConfig(),h=n.layerConfig(),d=n.registry(),p=n.horizontalAxis().fields,y=n.verticalAxis().fields,g=n.optionalProjections(t,h),v=n.getAllFields(),m={normalizedColumns:y,normalizedRows:p,facetsAndProjections:v,layers:h,fieldMap:f,otherEncodings:g,encoders:a,facetConfig:o.facetConfig||{},axisFrom:o.axisFrom||{},selection:u},b={GeomCell:n.getCellDef(d.GeomCell),AxisCell:n.getCellDef(d.AxisCell),BlankCell:n.getCellDef(d.BlankCell),TextCell:n.getCellDef(d.TextCell)},_=Yh(p),x=Yh(y);n.colCells({}),n.rowCells({}),n.datamodelTransform(c||{}),n.resetSimpleAxes();var w={exitCellMap:n.cacheMaps().entryCellMap,entryCellMap:new Map};n.cacheMaps(w);var k={config:o,suppliedLayers:a.simpleEncoder.serializeLayerConfig(n.layerConfig()),resolver:n,cell:b.GeomCell,encoder:a.simpleEncoder,newCacheMap:w,detailFields:t.detail},C=r.getFieldsConfig(),S=r;if(!s.disabled){var P=function extractFields(e,t){var n,r=Object.values(e).map(function(e){var t,n,r=(t=[]).concat.apply(t,group_utils_toConsumableArray(e));return(n=[]).concat.apply(n,group_utils_toConsumableArray(r.map(function(e){return e instanceof _h?e.getMembers():e})))});return(n=[]).concat.apply(n,group_utils_toConsumableArray(r).concat(group_utils_toConsumableArray(t)))}(v,function getFieldsFromSuppliedLayers(e,t){var n,r=[],i=e.map(function(e){return e.encoding||{}});return r=(r=[].concat(group_utils_toConsumableArray(r),[(n=[]).concat.apply(n,group_utils_toConsumableArray(i.map(function(e){return Object.values(e).map(function(e){return e.field})})))])).filter(function(e){return t[e]&&t[e].def.type===ir.FieldType.DIMENSION})}(k.suppliedLayers,r.getFieldsConfig())),A=P.filter(function(e){return C[e]&&C[e].def.type===ir.FieldType.DIMENSION}),E=s.measures;S=r.groupBy(A.length?A:[""],E).project(P)}var M=function getMatrixModel(e,t,n){var r=[],i=[],a=[],o=[],u=[],c=[],s=t.rowFacets,l=t.colFacets;if(t.colProjections.forEach(function(e){o.push.apply(o,matrix_model_toConsumableArray(e))}),t.allColumnProjections=o,s.length>0){var f=s[0].toString(),h=Zh(e,f);tp(i,{facets:s,dataModel:e,uniqueValues:h}),i.forEach(function(n){var i,a=Jd(s),o=Zd(a,1)[0],u=ep(e,o,n);c.push([s,n]),(i=r).push.apply(i,matrix_model_toConsumableArray(np(u,t)))})}else{var d;(d=r).push.apply(d,matrix_model_toConsumableArray(np(e,t)))}if(r=r.length>0?r:[[]],l.length>0){var p=l.map(function(e){return""+e}),y=p[0],g=Zh(e,y);tp(a,{facets:p,dataModel:e,uniqueValues:g}),r.forEach(function(r,i){c[i]=c[i]||[[],[]],a.forEach(function(a,o){u[i]=u[i]||[];var s=r instanceof ar.a?r:e,f=ep(s,p,a),h={matrix:u,datamodel:f,facetInfo:{rowFacets:c[i],colFacets:[l,a],rowIndex:i,columnIndex:o},fieldInfo:t};rp(h,n)})})}else r.forEach(function(r,i){c[i]=c[i]||[[],[]];var a={matrix:u,datamodel:r||e,facetInfo:{rowFacets:c[i],colFacets:[[],[]],rowIndex:i,columnIndex:0},fieldInfo:t};rp(a,n)});var v=a.length>0?a[0].map(function(e,t){return a.map(function(e){return e[t]})}):a;return{matrix:u,rowKeys:i,columnKeys:v}}(S,v,n.valueCellsCreator(k));n.cacheMaps().exitCellMap.forEach(function(e){e.remove()}),n.cacheMaps().exitCellMap.clear(),n.valueMatrix(M.matrix),n.createUnits(i,t);var O=function mutateAxesFromMap(e,t){var n=null,r=null,i=e.xAxesMap,a=e.yAxesMap,o=t.x,u=t.y;return o&&o.forEach(function(e){var t=i.get(e);(n=n||[]).push(t)}),u&&u.forEach(function(e){var t=a.get(e);(r=r||[]).push(t)}),{xAxes:n,yAxes:r}}(n.cacheMaps(),n.axes()),T=O.xAxes,F=O.yAxes;n.axes({x:T,y:F});var N=function generateMatrices(e,t,n,r){var i=e.unitHeight,a=e.unitWidth,o=e.facetsAndProjections,u=e.normalizedRows,c=e.normalizedColumns,s=e.selection,l=e.axisFrom,f=e.facetConfig,h=e.encoders,d=cp({fields:{rows:u,columns:c},matrices:t,facetsAndProjections:o,selection:s,axisFrom:l,facetConfig:f,encoders:h},n,r),p=d.columnsPrimary,y=d.columnsSecondary,g=d.rowsPrimary,v=d.rowsSecondary,m=d.leftHeaders,b=d.topHeaders,_=d.bottomHeaders,x=d.rightHeaders,w=[g,v,p,y].map(function(e){return e?e.getObjects():[]}),k=ip(w,4),C=k[0],S=k[1],P=k[2],A=k[3],E=[m,x].map(function(e){return e?e.getObjects().map(function(e){return e.getObjects()}):[]}),M=ip(E,2),O=M[0],T=M[1],F=O.length?O.map(function(e,t){return C[t]=C[t]?[C[t]]:[],[].concat(cell_creator_toConsumableArray(e),cell_creator_toConsumableArray(C[t]))}):C?C.map(function(e){return[e]}):[],N=S.length?S.map(function(e,t){return[e].concat(cell_creator_toConsumableArray(T[t]||[]))}):T.length?T.map(function(e){return[].concat(cell_creator_toConsumableArray(e))}):[],j=[];b&&b.getObjects().forEach(function(e){e.getObjects().forEach(function(e,t){j[t]=j[t]||[],j[t].push(e)})});P.length&&j.push(P);var I=[];A.length&&I.push(A);var D=I.length;_&&_.getObjects().forEach(function(e){e.getObjects().forEach(function(e,t){I[t+D]=I[t+D]||[],I[t+D].push(e)})});if(!F.length&&!N.length){var L=new n.BlankCell;L.setAvailableSpace(a,i),F=[[L]]}if(!(j.length||I.length&&I[0].length)){var R=new n.BlankCell;R.setAvailableSpace(a,i),I=[[R]]}return{rows:[F,N],columns:[j,I],selectionObj:d}}(m,{valuesMatrix:M,axesMatrix:n.axes()},b,l),j=N.rows,I=N.columns,D=N.selectionObj;return n.rowMatrix(j),n.columnMatrix(I),{rows:n.rowMatrix(),columns:n.columnMatrix(),values:n.valueMatrix(),isColumnSizeEqual:x,isRowSizeEqual:_,selection:D,dataModels:{groupedModel:S,parentModel:r}}},lp=function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function sliceIterator(e,t){var n=[],r=!0,i=!1,a=void 0;try{for(var o,u=e[Symbol.iterator]();!(r=(o=u.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){i=!0,a=e}finally{try{!r&&u.return&&u.return()}finally{if(i)throw a}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),fp=function(){function defineProperties(e,t){for(var n=0;n0?d[0].map(b):[],right:p.length>0?p[0].map(b):[]},w=[ah,oh].map(function(e){return g.map(function(t,n){return n===g.length-1?_[e]:x[e]})}),k=lp(w,2),C=k[0],S=k[1];if(0===g.length){var P=[ah,oh].map(function(e){return v.map(function(t,n){return 0===n?_[e]:x[e]})}),A=lp(P,2);r=A[0],i=A[1]}else r=v.map(function(){return d.length>0?d[0].map(b):[]}),i=v.map(function(){return p.length>0?p[0].map(b):[]});return s.notify({client:[C,S,r,i],action:"initialized",formalName:"facet-headers"}),{topLeft:C,topRight:S,bottomLeft:r,bottomRight:i}}},{key:"getMatrices",value:function getMatrices(e,t,n,r){return sp({datamodel:e,componentRegistry:n,encoders:r,resolver:this},t)}}]),MatrixResolver}(),dp=function(){function defineProperties(e,t){for(var n=0;n3&&void 0!==arguments[3]?arguments[3]:{},i=void 0,a=e.context.constructor.type(),o=r.payload,u=e.context.data(),c=e.context.metaData(),s=c.getData().schema[0].type,l={},f=e.context._id;l.action=Pp[t]||t,l.sideEffects=Ep[t],l.sourceCanvas=e.context.canvasAlias();var h=e._actions.behavioural[l.action].constructor.mutates();if(null===o.criteria)i=null;else{var d=n.mergedEnter,p=u.filter(function(e){return-1!==d.uids.indexOf(e.id)}).map(function(e){return e.value});if("step"===a||"discrete"===a&&"measure"===s){var y=Object.keys(o.criteria||{})[0];i=(p=u.filter(function(e){return-1!==d.uids.indexOf(e.id)}).map(function(e){return e.range})).length?c.select(function(e){for(var t=!1,n=0;n=p[n][0]&&e[y].value<=p[n][1]);n++);return t},{saveChild:!1}):null}else"gradient"===a?i=ca(c,o.criteria):p.length?i=function assembleModelFromIdentifiers(e,t){var n=[],r=void 0,i=e.getFieldsConfig();return t.length?function(){for(var e=t[0],a=e.length,o=0;o=s+l?[i.invert(s+l-c),i.invert(s+l)]:f-l1&&void 0!==arguments[1]?arguments[1]:{},i=t.config().classPrefix;e.mergedEnter.length||e.mergedExit.length?(n(e.mergedExit,r.className||i+"-legend-brighten",!1),n(e.mergedExit,r.className||i+"-legend-fadeout",!0),n(e.mergedEnter,r.className||i+"-legend-fadeout",!1)):n(e.completeSet,r.className||i+"-legend-fadeout",!1)},brighten:function brighten(e){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},i=t.config().classPrefix;e.mergedEnter.length||e.mergedExit.length?(n(e.mergedEnter,r.className||i+"-legend-brighten",!0),n(e.mergedExit,r.className||i+"-legend-brighten",!1)):n(e.completeSet,r.className||i+"-legend-brighten",!1)}}},Vp=function(){function defineProperties(e,t){for(var n=0;n2&&void 0!==arguments[2]?arguments[2]:{};(0,this._strategies[n.strategy||this._strategy])(e,this)}}],[{key:"formalName",value:function formalName(){return"highlighter"}}]),LegendHighlighter}(),Wp={config:{sanitization:function sanitization(e,t){return na(e._config||{},t)}},data:{},fieldName:{},legendContainer:{},measurement:{sanitization:function sanitization(e,t){var n=na(e._measurement,t);return["padding","border","margin"].forEach(function(e){n[e]=Math.min(n[e]>0?n[e]:0,.1*n.maxWidth,.1*n.maxHeight)}),n}},logicalSpace:{},metaData:{},range:{sanitization:function sanitization(e,t){return e.scale().range(t),e.resetLogicalSpace(),e.store().commit("range",t),t}},scale:{},smartTicks:{},store:{},title:{sanitization:function sanitization(e,t){return na(e._title||{},t)}}},qp="horizontal",Gp="vertical",Yp={height:30,width:30,maxWidth:1/0,maxHeight:1/0,padding:2,margin:2,border:1},Xp={text:"",orientation:function orientation(e){return"left"===e||"right"===e?"left":"center"}},Kp={classPrefix:"muze",borderStyle:"solid",borderColor:"rgba(0,0,0,0)",formatter:{bounds:{lower:"less than",upper:"more than"}},item:{text:{orientation:"right",width:10,formatter:function formatter(e){return e}},icon:{className:"legend-icon",height:20,width:20,color:"rgba(0,0,0,.5)",type:"square"}}},$p=function ICON_MAP(e){return e&&"string"==typeof e?pa(e):e};function legend_helper_defineProperty(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var Qp=function getScaleInfo(e){var t=e.constructor.type();return{scaleType:t,domain:e.uniqueValues(),steps:e.config().stops||1,scaleFn:Mp[t]}},Zp=function getInterpolatedData(e,t){for(var n=[],r=ia()(e[0],e[1]),i=0;i<=t;i++)n[i]=r(i/t);return n},Jp=function getDomainBounds(e,t,n){var r,i=t.scaleFn,a=t.scaleType,o=t.scale,u=n.domain,c=n.domainBounds,s=n.domainLeg,l=n.steps,f=u["lower"===e?0:u.length-1],h=l["lower"===e?0:l.length-1];return legend_helper_defineProperty(r={},a,"size"===a?o[i](f)*o.getScaleFactor():o[i](f)),legend_helper_defineProperty(r,"value",c[e]),legend_helper_defineProperty(r,"id","lower"===e?0:s.length+2),legend_helper_defineProperty(r,"range",[f,h]),r},ey=function(){function defineProperties(e,t){for(var n=0;n0?h.height+s:0,p=h.width+s,y=this.getLabelSpaces(s,c),g=function computeItemSpaces(e,t,n){var r=0,i=0,a={width:0,height:0},o=t.effPadding,u=t.titleWidth,c=t.labelSpaces,s=t.titleHeight,l=t.maxWidth,f=e.item,h=e.align,d=f.icon,p=f.text.orientation,y=[],g=[],v=0;return c.forEach(function(e,t){var c={width:0,height:0},s={width:0,height:0},l=n[t]||{};"left"===p||"right"===p?(e.width+=o,s.width=(l.size?2*Math.sqrt(l.size/Math.PI):d.width)+o,v=Math.max(s.width,v),c.width=e.width+v,e.height=Math.max(e.height,d.height)+o,s.height=e.height,c.height=e.height):(e.width=Math.max(e.width,l.size?2*Math.sqrt(l.size/Math.PI):d.width)+o,s.width=e.width,c.width=e.width,v=Math.max(s.width,v),e.height+=o,s.height=d.height+o,c.height=e.height+s.height),"horizontal"===h?r=Math.max(r,c.height):(r+=c.height,i=Math.max(i,c.width,u)+o),a={width:Math.max(c.width,a.width),height:Math.max(c.height,a.height)},y.push(c),g.push(s)}),y.forEach(function(e,t){"horizontal"===h?(e.height=r,g[t].width=v,"left"===p||"right"===p?(c[t].height=r,g[t].height=r,y[t].width=c[t].width+v):(c[t].width=v,y[t].width=v,c[t].width=v),i=Math.max(i+y[t].width)):(e.width=Math.max(i,l),"top"===p||"bottom"===p?(c[t].width=i,g[t].width=i,v=i):(g[t].width=v,y[t].width=c[t].width+v,c[t].width=a.width-v,i=Math.max(i,e.width)+o))}),i=Math.max(i,u),{totalHeight:r+=s+o,totalWidth:i,itemSpaces:y,iconSpaces:g,maxItemSpaces:a,maxIconWidth:v}}(this.config(),{effPadding:s,titleWidth:p,labelSpaces:y,titleHeight:d,maxWidth:r,maxHeight:i},this.data()),v=g.totalHeight,m=g.totalWidth,b=g.itemSpaces,_=g.iconSpaces,x=g.maxItemSpaces,w=g.maxIconWidth;return this.measurement({width:Math.max(m,t)+f+l,height:Math.max(v,n)+f+l,labelSpaces:y,iconSpaces:_,itemSpaces:b,maxItemSpaces:x,maxIconWidth:w,titleSpaces:{width:Math.min(r,this.measurement().width)-f-l,height:d}}),this}},{key:"getTitleSpace",value:function getTitleSpace(){return this._labelManager.setStyle(Lo(Ao("body"),this.config().classPrefix+"-legend-title")),this._labelManager.getOriSize(this.title().text?this.title().text:"")}},{key:"renderTitle",value:function renderTitle(e){var t=this.measurement(),n=t.titleSpaces,r=t.border,i=t.padding,a=t.width,o=this.config(),u=o.borderStyle,c=o.borderColor;return function titleCreator(e,t,n,r){var i=Eo(e,"table",[1],r.classPrefix+"-legend-title").style("width",n.width+"px").style("height",n.height+"px").style("border-bottom",n.border+"px "+r.borderStyle+" "+r.borderColor).style("text-align",t.orientation instanceof Function?t.orientation(r.position):t.orientation);return Eo(i,"td",[1],r.classPrefix+"-legend-title-text").style("width",n.width+"px").style("height","100%").style("padding",n.padding+"px").text(t.text).node()}(e,this.title(),{height:n.height,width:a,border:r,padding:i,borderStyle:u,borderColor:c},this.config())}},{key:"render",value:function render(){var e=this.firebolt(),t=this.config(),n=t.classPrefix,r=t.borderStyle,i=t.borderColor,a=this.measurement(),o=a.maxWidth,u=a.maxHeight,c=a.width,s=a.height,l=a.margin,f=a.border,h=Eo(Ao(this.mount()),"div",[1],n+"-legend-box");return h.classed(n+"-legend-box-"+this._id,!0),h.style("float","left"),h.style("width",Math.min(o,c)-2*l+"px").style("height",Math.min(u,s)-2*l+"px").style("margin",l+"px").style("border",f+"px "+r+" "+i),this.legendContainer(h.node()),this.renderTitle(h),e.createSelectionSet(this.data().map(function(e){return e.id})),h}},{key:"getCriteriaFromData",value:function getCriteriaFromData(e){var t=this.fieldName();return"measure"===this.metaData().getData().schema[0].type?function simple_legend_defineProperty(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}({},t,e.range):[[t],[e.value]]}}],[{key:"create",value:function create(e){return new SimpleLegend(e)}},{key:"defaultConfig",value:function defaultConfig(){return Kp}},{key:"defaultMeasurement",value:function defaultMeasurement(){return Yp}}]),SimpleLegend}();function position_config_defineProperty(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var oy=(position_config_defineProperty(ty={},"horizontal",{datasets:function datasets(e){return{row:[1],column:e}},itemContainerMeasures:function itemContainerMeasures(e){var t=e.itemSpaces;return{row:{width:e.width+"px",padding:"0px"},column:{width:function width(e,n){return t[n].width+"px"},padding:"0px"}}},getStepSpacesInfo:function getStepSpacesInfo(e){var t=e.maxItemSpaces;return{iconHeight:e.height,iconWidth:t.width,stepPadding:{horizontal:!0,vertical:!1}}}}),position_config_defineProperty(ty,"vertical",{datasets:function datasets(e){return{row:e,column:function column(e){return[e]}}},itemContainerMeasures:function itemContainerMeasures(e,t){var n=e.width;return{row:{width:n+"px",padding:t.padding+"px"},column:{width:n+"px",padding:"0px"}}},getStepSpacesInfo:function getStepSpacesInfo(e){var t=e.maxItemSpaces,n=e.width;return{iconHeight:t.height,iconWidth:n,stepPadding:{horizontal:!1,vertical:!0}}}}),ty),uy=(position_config_defineProperty(ny={},"left",oy.vertical),position_config_defineProperty(ny,"right",oy.vertical),position_config_defineProperty(ny,"top",oy.horizontal),position_config_defineProperty(ny,"bottom",oy.horizontal),ny),cy=(position_config_defineProperty(ry={},"left","end"),position_config_defineProperty(ry,"right","start"),position_config_defineProperty(ry,"top","center"),position_config_defineProperty(ry,"bottom","center"),ry),sy=(position_config_defineProperty(iy={},"left",[Op,"shape"]),position_config_defineProperty(iy,"right",["shape",Op]),position_config_defineProperty(iy,"top",[Op,"shape"]),position_config_defineProperty(iy,"bottom",["shape",Op]),iy),ly=function createLegendSkeleton(e,t,n,r){var i,a,o,u,c=e.measurement(),s=c.margin,l=c.border,f=c.titleSpaces,h=c.width,d=c.height,p=c.maxWidth,y=c.maxHeight;a=d-(f.height+2*s+2*l),i=h-(2*s+2*l),o=y-(f.height+2*s+2*l),u=p-(2*s+2*l);var g=Eo(t,"div",[1],n+"-legend-body");return g.select("."+n+"-legend-overflow").remove(),u&&u4)}(u)?u:$p(u).size(o)(),Eo(a,"path",function(e){return[e]}).attr("d",l)}}return e[1]="circle",createShape(e,t,"circle")}(n,Eo(l,"g",[n[1]],i+"-legend-icon"),n[3]?"circle":"square",o,a).attr("transform","translate("+(u/2-c)+" "+a/2+")").attr("fill",n[2]||s):Eo(l,"rect",[n[1]],i+"-legend-icon").attr("x",0).attr("y",0).attr("width",u).attr("height",a).attr("fill",n[2]||s)},py=function(){function defineProperties(e,t){for(var n=0;na[a.length-1]&&t.push(i[1])):t=Zp(i,a-1),(t=[].concat(gradient_legend_toConsumableArray(new Set(t))).sort(function(e,t){return e-t})).map(function(n,i){var a,u=t[i];return gradient_legend_defineProperty(a={},r,"size"===r?e[o](n)*e.getScaleFactor():e[o](Math.floor(n))),gradient_legend_defineProperty(a,"value",+u.toFixed(2)),gradient_legend_defineProperty(a,"id",i),a}).filter(function(e){return null!==e.value})}},{key:"getLabelSpaces",value:function getLabelSpaces(e){this.config({item:{text:{orientation:this.config().position}}});var t=function createAxis(e){var t=e.data(),n=e.config().align,r=e._cells.AxisCell,i=new Qs({id:"legend-"+e._id,orientation:n===Gp?"right":"bottom",style:e._computedStyle,nice:!1,showAxisName:!1,tickValues:t.map(function(e){return e.value}),fixedBaseline:!1},{labelManager:e._labelManager});return i.domain(gy(t)),i.range([1,1]),(new r).source(i).config({margin:{left:0,bottom:0,top:0,right:0}})}(this),n=t.getLogicalSpace(),r={width:n.width-e,height:n.height-e},i=t.source().domain().length,a=new Array(i).fill(r);return this.axis(t),a}},{key:"getDrawingContext",value:function getDrawingContext(){return{svgContainer:this._legendGradientSvg}}},{key:"render",value:function render(){var e=this.firebolt(),t=function get(e,t,n){null===e&&(e=Function.prototype);var r=Object.getOwnPropertyDescriptor(e,t);if(void 0===r){var i=Object.getPrototypeOf(e);return null===i?void 0:get(i,t,n)}if("value"in r)return r.value;var a=r.get;return void 0!==a?a.call(n):void 0}(GradientLegend.prototype.__proto__||Object.getPrototypeOf(GradientLegend.prototype),"render",this).call(this,this.mount());return function renderGradient(e,t){var n,r,i=e.config(),a=i.align,o=i.classPrefix,u=i.item,c=e.data(),s=vy(t,o,c),l=s.legendContainer,f=s.legendGradSvg,h=s.legendGradCont,d=s.linearGradient,p=s.legendRect,y=e.axis().source().getAxisDimensions().tickLabelDim,g=e.measurement(),v=g.padding,m=g.margin,b=g.border,_=g.titleSpaces,x=g.maxHeight,w=g.maxWidth,k=g.height,C=g.width,S={};n=Math.floor(k-(_.height+2*m+2*b)),r=Math.floor(C-(2*m+2*b)),a===qp?(S.height=u.icon.height,S.width=r-2*v-y.width/2,d.attr("x2","100%").attr("y1","0%"),h.attr("transform","translate( "+y.width/2+" 0)"),my(e,l,n-u.icon.height-v,r-2*v-1),l.classed(o+"-overflow-x",C>w),Mo(l,{height:k+"px",width:Math.min(C,w)+"px",padding:v+"px"}),p.attr("height",S.height),p.attr("width",S.width-y.width/2)):(S.height=n-2*v-y.height/2,S.width=u.icon.width,d.attr("x2","0%").attr("y1","100%"),h.attr("transform","translate(0 "+y.height/2+")"),my(e,l,n-2*v-1,r-u.icon.width-2*v),l.classed(o+"-overflow-y",k>x),Mo(l,{height:Math.min(k,x)+"px",width:C+"px",padding:v+"px"}),p.attr("height",S.height-y.height/2),p.attr("width",S.width)),Mo(f,{height:S.height+"px",width:S.width+"px"}),Mo(p,{fill:"url(#linear-gradient)"}),f.attr("height",S.height),f.attr("width",S.width),e.measurement({gradientDimensions:S}),e._legendGradientSvg=f}(this,t),t.selectAll("div").style("float","left"),e.mapActionsAndBehaviour(),e.createSelectionSet(this.data().map(function(e){return e.id})),t}},{key:"getCriteriaFromData",value:function getCriteriaFromData(e){return[[this.fieldName()],[e.value]]}}],[{key:"create",value:function create(e){return new GradientLegend(e)}},{key:"type",value:function type(){return"gradient"}}]),GradientLegend}(),xy=function(){function defineProperties(e,t){for(var n=0;na[a.length-1]&&(c.upper=[u.bounds.upper+" "+a[a.length-1]])):t=Zp(i,a),t=(t=[].concat(step_legend_toConsumableArray(new Set(t))).sort(function(e,t){return e-t})).map(function(n,i){var a,u=null;return i0&&void 0!==arguments[0]?arguments[0]:{},t=this._registrableComponents,n=na(na({},function defaultPolicy(e){var t=e.map(function(e){return e.alias()});return{behaviours:{"*":function _(e){var n=e.sourceCanvas;return!n||-1!==t.indexOf(n)}}}}(t)),e);return t.forEach(function(e){e.firebolt().crossInteractionPolicy(n)}),this}}]),ActionModel}()),Ny={classPrefix:"muze",interaction:{sideEffect:"individual"},legend:{position:"right",color:{show:!0,padding:1,margin:3,border:1,height:20,width:20},shape:{show:!0,padding:1,margin:3,border:1,height:20,width:20},size:{show:!0,padding:1,margin:3,border:1,height:20,width:20}},showHeaders:!1,minWidth:100,minHeight:100,border:{style:"solid",color:"#d6d6d6",width:2,collapse:!0,spacing:0},autoGroupBy:{disabled:!1}},jy={data:{value:null,meta:{typeCheck:function typeCheck(e){return e instanceof ar.a}}},width:{value:0,meta:{sanitization:Qi,typeCheck:Number.isInteger}},height:{value:0,meta:{sanitization:Qi,typeCheck:Number.isInteger}},minUnitWidth:{value:50,meta:{sanitization:Qi,typeCheck:Number.isInteger}},minUnitHeight:{value:50,meta:{sanitization:Qi,typeCheck:Number.isInteger}},config:{value:null,meta:{typeCheck:"constructor",typeExpected:"Object",sanitization:function sanitization(e,t){var n=na({},t),r=na(n,Ny);return na(r,e)}}}},Iy="width",Dy="height",Ly="top",Ry="left",By="right",zy="bottom",Hy="center",Vy="rowLeft",Uy="rowRight",Wy="colBottom",qy="colTop",Gy="rowSpan",Yy="colSpan",Xy="rowRoot",Ky="columnRoot",$y=function(){function defineProperties(e,t){for(var n=0;n1)return e;var f=o[t-1];if(f&&f.valueOf()===e.valueOf()){var h=n[r-1];return h?h[t].valueOf()===h[t-1].valueOf()?null:e:null}return e}return e},ag=function calcRowSpan(e,t,n,r){var i=1;if(!e||"string"!=typeof e.valueOf())return 1;for(var a=!1;!a;)n[r+i]&&null===n[r+i][t]?i+=1:a=!0;return i},og=function calcColSpan(e,t,n,r){var i=1;if(!e||"string"!=typeof e.valueOf())return 1;for(var a=!1;!a;)null===n[r][t+i]?i+=1:a=!0;return i},ug=function mask(e,t){return e.map(function(n,r){if(t===Vy||t===Uy){for(var i=n.map(function(n,i){return ig(n,i,e,r,t)}),a=[],o=n.length-i.length,u=0;u1&&r.setAvailableSpace(0,r.availHeight()),Ao(this).style("height",r.availHeight()+"px"),n}),l.each(function(e){e.placeholder&&e.placeholder.render(this)}).exit().each(function(e){e.placeholder&&e.placeholder.remove()}),applyBorders(l,r.border,n,a)})}function utils_defineProperty(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function utils_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t0?e[0]:e[1];return n?(r=e[0].length>0?[].concat(utils_toConsumableArray(e[0])):[],r=e[1].length>0?[].concat(utils_toConsumableArray(r),utils_toConsumableArray(e[1])):r):r=r.map(function(t,n){var r=[];return e[0].length>0&&(r=[].concat(utils_toConsumableArray(e[0][n]))),e[1].length>0&&(r=[].concat(utils_toConsumableArray(r),utils_toConsumableArray(e[1][n]))),r}),r},fg=function computeLogicalSpace(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments[1],n=arguments[2],r=t.isTransposed,i=void 0!==r&&r,a=t.unitMeasures,o=function getMeasureInfo(e){return e?{firstMeasure:Dy,secondMeasure:Iy}:{firstMeasure:Iy,secondMeasure:Dy}}(i),u=o.firstMeasure,c=o.secondMeasure,s=e.values,l=function getMinMeasures(e,t){return e?{height:0,width:t.width}:{height:t.height,width:0}}(i,a);if(s[0].key){var f,h=(utils_defineProperty(f={},u,0),utils_defineProperty(f,c,0),f);return s.forEach(function(e){var r=computeLogicalSpace(e,t,n);h[u]=Math.max(h[u],r[u],l[u]),h[c]+=+r[c]}),e.space=h,h}return function getLogicalSpace(e,t,n){var r,i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:[],a=t.firstMeasure,o=t.secondMeasure,u=0,c=0;return e.values.forEach(function(t){var r,s=0,l=0;t.forEach(function(e,t){e.logicalSpace(null);var r=e.getLogicalSpace();l=Math.max(l,+r[o],n[o]),i[t]=Math.max(i[t]||0,r[a]),s+=+i[t]}),c+=l,u=Math.max(u,s),e.space=(utils_defineProperty(r={},o,Math.ceil(c)),utils_defineProperty(r,a,Math.ceil(u)),r)}),utils_defineProperty(r={},o,c),utils_defineProperty(r,a,u),r}(e,{firstMeasure:u,secondMeasure:c},l,n)},hg=function extraCellsRemover(e,t,n){return e.slice(t,-n)},dg={config:{sanitization:function sanitization(e,t){return na(e._config||{},t)}},maxMeasures:{},availableSpace:{},logicalSpace:{}},pg={distribution:[],classPrefix:"muze",isDistributionEqual:!0,unitMeasures:{height:100,width:100,border:1},isTransposed:!1,facet:"primary",extraCellLengths:[]},yg=function(){function defineProperties(e,t){for(var n=0;n1&&void 0!==arguments[1]?arguments[1]:{};!function visual_matrix_classCallCheck(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,VisualMatrix),this._lastLevelKey=0,this._primaryMatrix=e[0]||[],this._secondaryMatrix=e[1]||[],this._maxMeasures=[],this._availableSpace={},Ji(this,dg);var n=Object.assign({},this.constructor.defaultConfig());this.config(na(n,t)),this._breakPointer=this.config().isTransposed?e[0].length:e[0].length>0?e[0][0].length:0,this._layoutMatrix=lg([e[0]||[],e[1]||[]],this.config()),this._tree={key:this.config().isTransposed?Ky:Xy,values:this.createTree()},this._logicalSpace=this.setLogicalSpace()}return yg(VisualMatrix,[{key:"primaryMatrix",value:function primaryMatrix(){return arguments.length?this:this._primaryMatrix}},{key:"secondaryMatrix",value:function secondaryMatrix(){return arguments.length?this:this._secondaryMatrix}},{key:"tree",value:function tree(){return arguments.length?this:this._tree}},{key:"createTree",value:function createTree(){var e=function createTree(e){var t={},n=0,r="primary",i=cg(),a=[],o=e._layoutMatrix,u=e.primaryMatrix(),c=e.secondaryMatrix(),s=e.config(),l=s.isTransposed,f=s.breakPage;if(l){if(r=0===u.length?"primary":0===c.length?"secondary":u.length>=c.length?"primary":"secondary",u.length>0){for(var h=0;h0){for(var d=u.length,p=c.length-1;p>0;p--)a.push(p+d);a.push(d),"primary"===r&&(n=d)}var y;a.forEach(function(e){var t=-1;return i.key(function(n){return t++,n[e].valueOf()+"-"+sg(t,f)})}),y=o[0].map(function(e,t){return o.map(function(e){return e[t]})}),t=i.entries(y)}else{if(r=0===u.length?"primary":0===c.length?"secondary":u.length>=c.length?"primary":"secondary",u.length>0){for(var g=0;g0){for(var v=u.length>0?u[0].length:0,m=c[0].length-1;m>0;m--)a.push(m+v);a.push(v),"primary"===r&&(n=v)}else n=u.length>0?u[0].length-1:0;a.forEach(function(e){var t=-1;return i.key(function(n){return t++,n[e].valueOf()+"-"+sg(t,f)})}),t=i.entries(o)}return{tree:t,lastLevelKey:n}}(this),t=e.tree,n=e.lastLevelKey;return this._lastLevelKey=n,t}},{key:"setLogicalSpace",value:function setLogicalSpace(){var e=this.config().isTransposed,t=this.tree();return function createMatrixEachLevel(e,t){if(e.values[0].key){var n=[];return e.values.forEach(function(e){t?createMatrixEachLevel(e,t).forEach(function(e,t){var r;n[t]=n[t]||[],(r=n[t]).push.apply(r,utils_toConsumableArray(e))}):n.push.apply(n,utils_toConsumableArray(createMatrixEachLevel(e,t)))}),e.matrix=n,n}return e.matrix=t?e.values[0].map(function(t,n){return e.values.map(function(e){return e[n]})}):e.values,e.matrix}(t,e),fg(t,this.config(),this.maxMeasures())}},{key:"getLogicalSpace",value:function getLogicalSpace(){return this.logicalSpace()}},{key:"setAvailableSpace",value:function setAvailableSpace(e,t){this.availableSpace({width:e,height:t});var n=this.tree(),r=this.populateMaxMeasures(Dy,n),i=this.populateMaxMeasures(Iy,n),a=this.calculateDepth(i,r);return this.viewableMatrix=this.createViewPortMatrix(a),this.viewableMeasures=this.redistribute(this.viewableMatrix,e,t),this}},{key:"populateMaxMeasures",value:function populateMaxMeasures(e,t){var n=this,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:[];if(i[r]=Math.max(i[r]||0,t.space[e]),t.values){var a=r+1;t.values.forEach(function(t){t.space&&(i=n.populateMaxMeasures(e,t,a,i))})}return i}},{key:"calculateDepth",value:function calculateDepth(e,t){var n=void 0,r=void 0,i=this.availableSpace(),a=i.height,o=i.width;for(n=0;n0&&void 0!==arguments[0]?arguments[0]:[],t=arguments[1],n=arguments[2],r=arguments[3],i=r._breakPointer,a=r.config().isTransposed,o=n.tree,u=n.layoutMatrix;if(0===t){var c=function breakMatrix(e,t,n){var r=[],i=[];return t?e.forEach(function(e,t){t>=n?i.push(e):r.push(e)}):e.forEach(function(e,t){e.forEach(function(e,a){a>=n?(i[t]=i[t]||[],i[t].push(e)):(r[t]=r[t]||[],r[t].push(e))})}),[r,i]}(o.matrix,a,i);return e.push({matrix:o.matrix,primaryMatrix:c[0],secondaryMatrix:c[1],space:o.space}),e}var s=t-1;return o.values.forEach(function(t){createMatrixInstances(e,s,{tree:t,layoutMatrix:u},r)}),e}(t,e,this.removeExtraCells(),this),t}},{key:"redistributeRowWise",value:function redistributeRowWise(e){var t,n,r=[],i=this.maxMeasures(),a=this.config(),o=a.isDistributionEqual,u=a.distribution,c=a.isTransposed,s=a.gutter,l=e.matrix,f=e.width,h=e.height,d=e.maxHeights,p=e.maxWidths;n=function spaceTakenByColumn(e,t){var n=0,r=0;return e.forEach(function(e){var i=e[t].getLogicalSpace();r=Math.max(r,i.width),n+=i.height}),{width:r,height:n}}(l,this._lastLevelKey).height;var y=i.reduce(function(e,t){return e+=t});return r=y>0?i.map(function(e){return e+e/y*(f-y)}):i.map(function(){return 0}),t=function getDistributedHeight(e){var t,n=0,r=0,i=e.isTransposed,a=e.distribution,o=e.availableHeight,u=e.height,c=e.isDistributionEqual,s=e.gutter,l=e.matrix,f=e.cIdx;a&&void 0!==a[0]&&(n=a.reduce(function(e,t){return e+=t})),s&&void 0!==s[0]&&(r=s.reduce(function(e,t){return e+=t})),t=o-Math.floor(o*r);var h=l.length;return l.map(function(r,o){var s=r[f].getLogicalSpace().height,l=s+s/u*(t-u);return i||(a.length>0&&h===a.length?l=t*a[o]/n:(c||0===e.height)&&(l=t/h)),Math.floor(l)})}({matrix:l,cIdx:this._lastLevelKey,height:n,availableHeight:h,isDistributionEqual:o,distribution:u,isTransposed:c,gutter:s}),p.push(r),d.push(t),{maxWidths:p,maxHeights:d}}},{key:"redistributeColumnWise",value:function redistributeColumnWise(e){var t=[],n=e.matrix,r=e.width,i=e.maxHeights,a=e.maxWidths,o=this.config().unitMeasures.border,u=function spaceTakenByRow(e){var t=0,n=0;return e.forEach(function(e){var r=e.getLogicalSpace();t=Math.max(t,r.height),n+=r.width}),{width:n,height:t}}(n[this._lastLevelKey]).width,c=function getDistributedWidth(e,t){var n=e.availableWidth,r=e.width,i=e.row,a=t.isDistributionEqual,o=t.isTransposed,u=t.distribution,c=0;return u&&u[0]&&(c=u.reduce(function(e,t){return e+=t})),i.map(function(e,t){var s=e.getLogicalSpace().width,l=s+s/r*(n-r);if(o)if(u.length>0)l=n*u[t]/c;else if(a||0===r){var f=i.length;l=n/f}return Math.floor(l)})}({row:n[this._lastLevelKey],width:u,availableWidth:r},this.config());n.forEach(function(e,n){return e.forEach(function(e,r){var i=e.getLogicalSpace().height;e.setAvailableSpace(c[r]-o,i),t[n]=Math.max(t[n]||0,e.getLogicalSpace().height)})}),i.length>0&&(t=t.map(function(e,t){return Math.max(e,i[0][t])})),i.push(t);for(var s=0;s=m&&(r[0][1][n[1]-m]=a[0],i[0][1]=(i[0][1]||0)+a[0]),n[1]===t._lastLevelKey&&(r[1][0][n[0]]=a[1],r[1][1][n[0]]=a[1])})}),{heights:g,widths:v,rowHeights:p,columnWidths:y}}}],[{key:"defaultConfig",value:function defaultConfig(){return pg}}]),VisualMatrix}(),vg=function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function sliceIterator(e,t){var n=[],r=!0,i=!1,a=void 0;try{for(var o,u=e[Symbol.iterator]();!(r=(o=u.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){i=!0,a=e}finally{try{!r&&u.return&&u.return()}finally{if(i)throw a}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}();function layout_helper_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t0&&(n=[].concat(layout_helper_toConsumableArray(w),layout_helper_toConsumableArray(P),layout_helper_toConsumableArray(O))),E.length>0&&(r=[].concat(layout_helper_toConsumableArray(C),layout_helper_toConsumableArray(E),layout_helper_toConsumableArray(F))),k.length>0&&k[0].length>0&&(i=k.map(function(e,t){return[].concat(layout_helper_toConsumableArray(w[t]),layout_helper_toConsumableArray(e),layout_helper_toConsumableArray(C[t]))})),T.length>0&&T[0].length>0&&(a=T.map(function(e,t){return[].concat(layout_helper_toConsumableArray(O[t]),layout_helper_toConsumableArray(e),layout_helper_toConsumableArray(F[t]))})),e.rowMatrix(new gg([n,r],{isDistributionEqual:s,distribution:h.rows,gutter:f.rows,unitMeasures:{width:v,height:g,border:d.width},breakPage:p.rows.map(function(e){return e+Math.max(w.length,C.length)}),extraCellLengths:[w.length,O.length]})),o=w.length>0?w[0].length:O.length>0?O[0].length:0,u=C.length>0?C[0].length:F.length>0?F[0].length:0,e.columnMatrix(new gg([i,a],{isDistributionEqual:l,distribution:h.columns,gutter:f.columns,isTransposed:!0,unitMeasures:{width:v,height:g,border:d.width},breakPage:p.columns,extraCellLengths:[o,u]})),e.centerMatrix(A),t}(this,e),this):function get(e,t,n){null===e&&(e=Function.prototype);var r=Object.getOwnPropertyDescriptor(e,t);if(void 0===r){var i=Object.getPrototypeOf(e);return null===i?void 0:get(i,t,n)}if("value"in r)return r.value;var a=r.get;return void 0!==a?a.call(n):void 0}(GridLayout.prototype.__proto__||Object.getPrototypeOf(GridLayout.prototype),"matrices",this).call(this,e)}},{key:"triggerReflow",value:function triggerReflow(){return function computeLayoutMeasurements(e){var t,n,r,i,a,o=e.rowMatrix(),u=e.columnMatrix(),c=e.centerMatrix(),s=e.measurement(),l=s.width,f=s.height,h=e.config().border,d=e.matrices(),p=d.top,y=d.bottom,g=function getMatrixMeasurement(e,t){return e?e.getLogicalSpace()[t]:0}(o,Iy),v=h.width,m=l-g-v;setMatrixMeasurement(u,Iy,m);var b=u.getViewableSpaces();bg(e,"column",b);var _=b[e.config().columnPointer],x=_.height.primary+_.height.secondary,w=f-x;setMatrixMeasurement(o,Dy,w);var k=o.getViewableSpaces();bg(e,"row",k);var C=(t=[]).concat.apply(t,computations_toConsumableArray(k.map(function(e){return e.rowHeights.primary}))),S=(n=[]).concat.apply(n,computations_toConsumableArray(k.map(function(e){return e.columnWidths.primary}))),P=(r=[]).concat.apply(r,computations_toConsumableArray(k.map(function(e){return e.columnWidths.secondary}))),A=u.getViewableSpaces(),E=(i=[]).concat.apply(i,computations_toConsumableArray(A.map(function(e){return e.columnWidths.primary}))),M=A[0].rowHeights.primary,O=(a=[]).concat.apply(a,computations_toConsumableArray(A.map(function(e){return e.rowHeights.secondary})));c.forEach(function(e,t){e.forEach(function(e,n){e.setAvailableSpace(E[n]-v,C[t]-v)})}),mg(p[0],S,M),mg(p[2],P,M),mg(y[0],S,O),mg(y[2],P,O)}(this),this.setViewInformation(),this}},{key:"gotoPage",value:function gotoPage(e,t){var n=e.toLowerCase(),r=this.getViewInformation().viewMatricesInfo[n+"Pages"],i=Math.min(Math.max(1,t),r);return this.config(function layout_defineProperty(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}({},n+"Pointer",i-1)),this.setViewInformation(),this.renderGrid(),this}},{key:"pages",value:function pages(e){var t=this.getViewInformation().viewMatricesInfo,n=e.toLowerCase();return{totalPages:t[n+"Pages"],currentPage:this.config()[n+"Pointer"]+1}}},{key:"setViewInformation",value:function setViewInformation(){var e=this.config(),t=e.rowPointer,n=e.columnPointer,r=e.border,i=function getViewMatrices(e,t,n){for(var r=e.rowMatrix(),i=e.columnMatrix(),a=e.centerMatrix(),o=e.matrices(),u=r.getViewableData(),c=i.getViewableData(),s={row:0,column:0},l=t-1;l>=0;l--){var f=Math.max(u[l].primaryMatrix.length,u[l].secondaryMatrix.length);s.row+=f}for(var h=n-1;h>=0;h--){var d=c[h],p=d.primaryMatrix,y=d.secondaryMatrix,g=Math.max(p[0]?p[0].length:0,y[0]?y[0].length:0);s.column+=g}o.top[1]=c[n].primaryMatrix,o.bottom[1]=c[n].secondaryMatrix,o.center[0]=u[t].primaryMatrix,o.center[2]=u[t].secondaryMatrix;var v=Math.max(o.center[0].length,o.center[2].length),m=Math.max(o.top[1][0]?o.top[1][0].length:0,o.bottom[1][0]?o.bottom[1][0].length:0);return o.center[1]=a.slice(s.row,s.row+v).map(function(e){return e.slice(s.column,s.column+m)}),{matrices:o,rowPages:u.length,columnPages:c.length}}(this,t,n),a=function getViewMeasurements(e){var t=e.rowMatrix(),n=e.columnMatrix(),r=e.measurement(),i=r.width,a=r.height,o=e.config(),u=o.columnPointer,c=o.rowPointer,s=t.getViewableSpaces()[c].width,l=s.primary,f=s.secondary,h=n.getViewableSpaces()[u].height,d=h.primary,p=h.secondary;return{viewWidth:[l,i-(l+f),f],viewHeight:[d,a-(d+p),p]}}(this);return a.border=r,this.viewInfo={viewMatricesInfo:i,layoutDimensions:a},this}},{key:"getViewInformation",value:function getViewInformation(){return this.viewInfo}},{key:"renderGrid",value:function renderGrid(e){if(this.mountPoint(e),!this.mountPoint())return this;var t=this.getViewInformation(),n=t.viewMatricesInfo,r=t.layoutDimensions;return function renderMatrices(e,t,n){var r=t.top,i=t.center,a=t.bottom,o=e.config().classPrefix,u=e.measurement().width,c=e.mountPoint();Eo(c,"div",[{type:Ly,matrix:r},{type:Hy,matrix:i},{type:zy,matrix:a}],o+"-grid-layout-row").each(function(e,t){var r=Ao(this);r.classed(o+"-grid-layout-row-"+t,!0),renderMatrix(e.matrix,r,e.type,n,o)}).style(Iy,Math.ceil(u)+"px")}(this,n.matrices,r),this}}],[{key:"defaultMeasurement",value:function defaultMeasurement(){return ng}},{key:"defaultConfig",value:function defaultConfig(){return tg}},{key:"create",value:function create(){return new GridLayout(null,null,this.defaultMeasurement(),this.defaultConfig())}}]),GridLayout}(),wg=function(){function defineProperties(e,t){for(var n=0;n0?o:i,v),P=Math.max(u>0?u:a,g),A=function createHeaders(e,t,n){var r=0,i={};return t>=200&&n>=200&&["title","subtitle"].forEach(function(t){var n=e[t](),a=function resolveTitleSubTitleContent(e){return"function"!=typeof e||e._sanitize?function escapeHTML(e){var t={"&":"&","<":"<",">":">",'"':""","'":"'","/":"/"};return(""+e).replace(/[&<>"'/]/g,function(e){return t[e]})}(e()):e()}(n[0]);if(a.length){var o=n[1];o.width=e.width(),o.content=a;var u=lv(o,t,e.dependencies().smartlabel,e[t+"Cell"]),c=u.height,s=u.cell;i[t+"Cell"]=s,e._composition[t]=s,r+=c+o.padding}}),{headerHeight:r,headers:i}}(e,S,P),E=A.headers,M=A.headerHeight,O=function createLegend(e,t,n,r){var i={height:n,width:r,headerHeight:t},a=e.config().legend,o=a.show,u=a.position;a.classPrefix=e.config().classPrefix;var c="left"===u||"right"===u?"vertical":"horizontal";return a.show=o?"vertical"===c&&r>200||"horizontal"===c&&n>200:o,a.align=c,fv(a,e,i,e.legends||[])}(e,M,S,P);e._composition.legend={},O.forEach(function(t){e._composition.legend[t.scaleType]=t.legend});var T=function getLegendSpace(e,t,n,r){var i={width:0,height:0};return e.map(function(e){return e.legend.measurement()}).forEach(function(e){var a,o;o=Math.min(e.width,e.maxWidth),a=Math.min(e.height,e.maxHeight),"horizontal"===t.align?i.width+o>r?(i.width=r,i.height+=a):(i.width+=o,i.height=Math.max(i.height,a)):i.height+a>n?(i.height=a,i.width+=o):(i.height+=a,i.width=Math.max(i.width,o))}),"horizontal"===t.align&&(i.width=r),i}(O,_,S,P),F="left"===k||"right"===k?T.width:0,N="top"===k||"bottom"===k?T.height:0,j={headers:E,legends:O,canvases:[e],rows:h,columns:d,values:p,cornerMatrices:c.cornerMatrices()},I={mountSpace:{height:i,width:a},headerHeight:M,legendSpace:T,canvasWidth:P,canvasHeight:S,width:P-F,height:S-M-N,minUnitHeight:e.minUnitHeight(),minUnitWidth:e.minUnitWidth()};return{layoutConfig:n=na(n,{classPrefix:m,showHeaders:b,border:na(c.metaData().border,e.config().border),layoutArrangement:C,legend:_,title:x,subtitle:w,isColumnSizeEqual:l,isRowSizeEqual:f}),components:j,measurement:I}},dv={position:"top",align:"left",padding:8},pv={position:"top",align:"left",padding:16};function canvas_local_options_defineProperty(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var yv=(canvas_local_options_defineProperty(ov={},"rows",{value:null,meta:{typeCheck:"constructor",typeExpected:"Array"}}),canvas_local_options_defineProperty(ov,"columns",{value:null,meta:{typeCheck:"constructor",typeExpected:"Array"}}),canvas_local_options_defineProperty(ov,"color",{value:null,meta:{typeCheck:"constructor",typeExpected:"Object",sanitization:function sanitization(e){return"string"==typeof e?{field:e}:e}}}),canvas_local_options_defineProperty(ov,"shape",{value:null,meta:{typeCheck:"constructor",typeExpected:"Object",sanitization:function sanitization(e){return"string"==typeof e?{field:e}:e}}}),canvas_local_options_defineProperty(ov,"size",{value:null,meta:{typeCheck:"constructor",typeExpected:"Object",sanitization:function sanitization(e){return"string"==typeof e?{field:e}:e}}}),canvas_local_options_defineProperty(ov,"detail",{value:[],meta:{typeCheck:"constructor",typeExpected:"Array"}}),canvas_local_options_defineProperty(ov,"layers",{value:null,meta:{typeCheck:"constructor",typeExpected:"Array"}}),canvas_local_options_defineProperty(ov,"transform",{value:null,meta:{typeCheck:"constructor",typeExpected:"Object"}}),canvas_local_options_defineProperty(ov,"mount",{value:null,meta:{sanitization:function sanitization(e){return"string"==typeof e?Ao(e).node():e}}}),ov),gv=(canvas_local_options_defineProperty(uv={},"title",{value:[null,null],meta:{typeCheck:["constructor","constructor"],typeExpected:["Function","Object"],spreadParams:!0,sanitization:[function(e){if("string"==typeof e){var n=function t(){return e};return n._sanitized=!0,n}return e},function(e){var t=na({},dv);return na(t,e)}]}}),canvas_local_options_defineProperty(uv,"subtitle",{value:[null,null],meta:{typeCheck:["constructor","constructor"],typeExpected:["Function","Object"],spreadParams:!0,sanitization:[function(e){if("string"==typeof e){var t=function sub(){return e};return t._sanitized=!0,t}return e},function(e){var t=na({},pv);return na(t,e)}]}}),uv),vv=function renderHeader(e,t,n,r){var i=r[n+"Cell"],a=e[""+n],o=a.position,u=a.align,c=a.padding,s=t.selectAll("."+e.classPrefix+"-inner-container").data([n]);s.exit().remove();var l=s.enter().append("div").merge(s);l.classed(e.classPrefix+"-inner-container",!0),i&&i.render(l.node()),l.selectAll("div").classed(e.classPrefix+"-inner-content",!0),l.style("width","100%"),a&&i&&l.style("float","left").style("text-align",u).style("padding-"+("top"===o?"bottom":"top"),c+"px")},mv=function renderComponents(e,t,n,r){var i=e.mount(),a=t.headers,o=t.legends,u=n.classPrefix,c=function getSkeletons(e,t,n){var r=t.layoutArrangement,i=t.classPrefix,a=r.headers,o=r.legends,u=n.canvasWidth,c=n.canvasHeight,s=Ao(e),l={},f=Eo(s,"div",[1],i+"-viz").style("width",u+"px").style("height",c+"px").selectAll("."+i+"-container").data(a);f.exit().remove();var h=f.enter().append("div").merge(f).attr("class",i+"-container").style("width",u+"px").style("padding","nullpx").style("margin",null).each(function(e){l[e]=Ao(this).classed(i+"-"+e+"-container",!0)}).selectAll("."+i+"-inner-container").data(function(e){return"group"===e?o:[]});return h.exit().remove(),h.enter().append("div").merge(h).attr("class",i+"-inner-container").style("width","auto").style("height","auto").each(function(e){l[e]=Ao(this).classed(i+"-"+e+"-container",!0)}),l}(i,n,r),s=c.title,l=c.legend,f=c.subtitle,h=c.layout,d=function prepareGridContainer(e,t,n,r){if(e){var i=t.height,a=t.width,o=Ao(e).selectAll("."+n+"-inner-content").data(["layout"],function(e){return e});o.exit().remove();var u=o.enter().append("div").merge(o).attr("class",n+"-inner-content").classed(n+"-grid-layout",!0).attr("id",n+"-grid-layout-"+r).style("height",i+"px").style("padding",null).style("width",Math.ceil(a)+"px"),c=u.selectAll("."+n+"-layout-grid-container").data(["layout2"]);c.exit().remove();var s=c.enter().append("div").merge(c);return s.classed(n+"-layout-grid-container",!0).attr("id",n+"-layout-grid-container-"+r).style("height",i+"px").style("width",Math.ceil(a)+"px"),{mount:s,container:u}}}(h.node(),r,u,e.alias()).mount,p=e.layout().getViewInformation().layoutDimensions.viewWidth[0];r.padding=p,function setLabelRotationForAxes(e){var t=0,n=e.xAxes()||[];!function(){for(var e=0;ev?(g++,m=0,v=y):g<0&&g++,i[g]=i[g]||[],v-=Math.min(t.measurement().height,v),m=Math.max(Math.min(t.measurement().width,t.measurement().maxWidth),m),i[g].push({legend:t,legendHeight:y,legendWidth:m})});var b=Eo(h,["div"],i,l+"-legend-section").each(function(e,t){return Ao(void 0).classed(l+"-legend-section-"+t,!0)}).classed(l+"-legend-vertical-section",!0).style("width",function(e){return e[0].legendWidth+"px"});Eo(b,["div"],function(e){return e},l+"-legend-components",{},function(e){return e.legend.id()}).each(function(e){e.legend.mount(this)}).style("width",function(e){return e.legendWidth+"px"})}else{var _=Eo(h,"div",[1],l+"-legend-section").classed(l+"-legend-horizontal-section",!0).classed(l+"-legend-section-0",!0).style("width",p+"px");Eo(_,"div",n,l+"-legend-components",{},function(e){return e.legend.id()}).each(function(e){e.legend.mount(this)}).style("width",function(e){return e.legend.measurement().width+"px"})}}(n,l,o,r),function shiftHeaders(e,t,n,r){var i=e.classPrefix,a=e.title,o=e.subtitle,u=e.legend,c=n.legendSpace;t+="left"===u.position?c.width:0,a&&Ao(r).select("."+i+"-title-container").style("width","left"===a.align?"calc(100% - "+t+"px":"100%").style("margin-left","left"===a.align?t+"px":0),o&&Ao(r).select("."+i+"-subtitle-container").style("width","left"===o.align?"calc(100% - "+t+"px":"100%").style("margin-left","left"===o.align?t+"px":0),Ao(r).select("."+i+"-legend-horizontal-section").style("margin-left",t+"px").style("width",c.width-t+"px").selectAll("."+i+"-legend-body, ."+i+"-legend-title").style("max-width",c.width-t+"px"),Ao(r).select("."+i+"-legend-vertical-section").style("margin-left",null).selectAll("."+i+"-legend-body, ."+i+"-legend-title").style("max-width",null)}(n,p,r,i)}),e.composition().visualGroup.matrixInstance().value.each(function(e){e.valueOf().parentContainer(h.node())})};function canvas_helper_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t","\"","'","/","title_maker_resolveTitleSubTitleContent","_createHeading","title_maker_createHeaders","createLegend","legend_maker_createLegend","legendSpace","getLegendSpace","legendInfo","legend_maker_getLegendSpace","legendWidth","legendHeight","canvases","mountSpace","TITLE_CONFIG","SUB_TITLE_CONFIG","localOptions","canvas_local_options_defineProperty","_localOptions","canvasOptions","_sanitized","_canvasOptions","sub","renderer_renderHeader","renderHeader","headerCell","cont","renderComponents","_getSkeletons","getSkeletons","innerContainer","layoutType","renderer_getSkeletons","prepareGridContainer","innerSel","renderer_prepareGridContainer","setLabelRotationForAxes","renderLegend","legendComponents","sectionComponents","legendMount","legWidth","legHeight","sections","currHeight","currWidth","leg","renderer_renderLegend","shiftHeaders","shifter","renderer_shiftHeaders","helper_setupChangeListener","setupChangeListener","allOptions","_allOptions","canvas_helper_toConsumableArray","equalityChecker","option","dispatchProps","_cachedProps","applyInteractionPolicy","policies","firebolt_defaultInteractionPolicy","defaultInteractionPolicy","isMeasure","canvas_firebolt_toConsumableArray","getFieldsFromChannel","colDim","fieldInf","unitFireBolt","unitColFacets","equals","unitRowFacets","propagateWith","defaultCrossInteractionPolicy","propagationCanvasAlias","propagationUnit","canvas_firebolt","GroupFireBolt","canvas_firebolt_classCallCheck","_interactionPolicy","_crossInteractionPolicy","changeBehaviourStateOnPropagation","changeSideEffectStateOnPropagation","canvas_canvas","Canvas","globalDependencies","canvas_classCallCheck","canvas_possibleConstructorReturn","_transactor","canvas_slicedToArray","initedComponents","initCanvas","register","_getRenderDetails","prepareLayout","triggerReflow","promises","all","getAxes","initialSettings","regEntry","COMPONENTS","SUBREGISTRIES","regObj","globalCache","defaultRegistry","overrideRegistryDefinitions","overrideRegistry","muze_muze","muze","_transactor2","muze_slicedToArray","env","globalStore","componentSubRegistryDef","settings","withSettings","enableChainedTransaction","transactionModel","transactionEndpoint","transactionItems","_slicedToArray","SmartlabelManager_default","SideEffects","standards","SurrogateSideEffect","SpawnableSideEffect","Behaviours","PersistentBehaviour","VolatileBehaviour","DataModel","muze_package","layerFactory","operators_namespaceObject","utils","require","lookupWhat","lookupDetails","lookupTarget","deps","__webpack_exports__"],"mappings":"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","file":"muze.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"muze\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"muze\"] = factory();\n\telse\n\t\troot[\"muze\"] = factory();\n})(window, function() {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 7);\n","!function(e,t){\"object\"==typeof exports&&\"object\"==typeof module?module.exports=t():\"function\"==typeof define&&define.amd?define(\"DataModel\",[],t):\"object\"==typeof exports?exports.DataModel=t():e.DataModel=t()}(window,function(){return function(e){var t={};function n(r){if(t[r])return t[r].exports;var i=t[r]={i:r,l:!1,exports:{}};return e[r].call(i.exports,i,i.exports,n),i.l=!0,i.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(e,\"__esModule\",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&\"object\"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,\"default\",{enumerable:!0,value:e}),2&t&&\"string\"!=typeof e)for(var i in e)n.d(r,i,function(t){return e[t]}.bind(null,i));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,\"a\",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p=\"\",n(n.s=1)}([function(e){e.exports={name:\"datamodel\",description:\"Relational algebra compliant in-memory tabular data store\",homepage:\"https://github.com/chartshq/datamodel\",version:\"2.0.2\",license:\"MIT\",main:\"dist/datamodel.js\",author:\"Charts.com \",keywords:[\"datamodel\",\"data\",\"relational\",\"algebra\",\"model\",\"muze\",\"fusioncharts\",\"table\",\"tabular\",\"operation\"],repository:{type:\"git\",url:\"https://github.com/chartshq/datamodel.git\"},contributors:[{name:\"Akash Goswami\",email:\"akash@charts.com\"},{name:\"Subhash Haldar\",email:\"subhash@charts.com\"},{name:\"Rousan Ali\",email:\"rousan@charts.com\",url:\"https://rousan.io\"},{name:\"Ujjal Kumar Dutta\",email:\"ujjal@charts.com\"}],dependencies:{\"d3-dsv\":\"^1.0.8\"},devDependencies:{\"babel-cli\":\"6.26.0\",\"babel-core\":\"^6.26.3\",\"babel-eslint\":\"6.1.2\",\"babel-loader\":\"^7.1.4\",\"babel-plugin-transform-runtime\":\"^6.23.0\",\"babel-preset-env\":\"^1.7.0\",\"babel-preset-es2015\":\"^6.24.1\",\"babel-preset-flow\":\"^6.23.0\",chai:\"3.5.0\",\"cross-env\":\"^5.0.5\",eslint:\"3.19.0\",\"eslint-config-airbnb\":\"15.1.0\",\"eslint-plugin-import\":\"2.7.0\",\"eslint-plugin-jsx-a11y\":\"5.1.1\",\"eslint-plugin-react\":\"7.3.0\",\"istanbul-instrumenter-loader\":\"^3.0.0\",jsdoc:\"3.5.5\",json2yaml:\"^1.1.0\",karma:\"1.7.1\",\"karma-chai\":\"0.1.0\",\"karma-chrome-launcher\":\"2.1.1\",\"karma-coverage-istanbul-reporter\":\"^1.3.0\",\"karma-mocha\":\"1.3.0\",\"karma-spec-reporter\":\"0.0.31\",\"karma-webpack\":\"2.0.3\",marked:\"^0.5.0\",mocha:\"3.4.2\",\"mocha-webpack\":\"0.7.0\",\"transform-runtime\":\"0.0.0\",webpack:\"^4.12.0\",\"webpack-cli\":\"^3.0.7\",\"webpack-dev-server\":\"^3.1.4\"},scripts:{test:\"npm run lint && npm run ut\",ut:\"karma start karma.conf.js\",utd:\"karma start --single-run false --browsers Chrome karma.conf.js \",build:\"webpack --mode production\",\"build:dev\":\"webpack --mode development\",start:\"webpack-dev-server --config webpack.config.dev.js --mode development --open\",lint:\"eslint ./src\",\"lint-errors\":\"eslint --quiet ./src\",docs:\"rm -rf yaml && mkdir yaml && jsdoc -c jsdoc.conf.json\"}}},function(e,t,n){var r=n(2);e.exports=r.default?r.default:r},function(e,t,n){\"use strict\";n.r(t);var r={};n.r(r),n.d(r,\"DataFormat\",function(){return o}),n.d(r,\"DimensionSubtype\",function(){return u}),n.d(r,\"MeasureSubtype\",function(){return c}),n.d(r,\"FieldType\",function(){return f}),n.d(r,\"FilteringMode\",function(){return s});var i={};n.r(i),n.d(i,\"DSVArr\",function(){return Me}),n.d(i,\"DSVStr\",function(){return Ve}),n.d(i,\"FlatJSON\",function(){return Ye}),n.d(i,\"Auto\",function(){return Be});var a={};n.r(a),n.d(a,\"sum\",function(){return ct}),n.d(a,\"avg\",function(){return ft}),n.d(a,\"min\",function(){return st}),n.d(a,\"max\",function(){return lt}),n.d(a,\"first\",function(){return dt}),n.d(a,\"last\",function(){return pt}),n.d(a,\"count\",function(){return ht}),n.d(a,\"sd\",function(){return vt});var o={FLAT_JSON:\"FlatJSON\",DSV_STR:\"DSVStr\",DSV_ARR:\"DSVArr\",AUTO:\"Auto\"},u={CATEGORICAL:\"categorical\",TEMPORAL:\"temporal\",GEO:\"geo\"},c={DISCRETE:\"discrete\"},f={MEASURE:\"measure\",DIMENSION:\"dimension\"},s={NORMAL:\"normal\",INVERSE:\"inverse\",ALL:\"all\"};function l(e,t){e.length>0&&e.split(\",\").forEach(function(e){var n=e.split(\"-\"),r=+n[0],i=+(n[1]||n[0]);if(i>=r)for(var a=r;a<=i;a+=1)t(a)})}var d=function(){function e(e,t){for(var n=0;n=0;)o=e[a+1],-1!==r.indexOf(o)&&i.push({index:a,token:o});return i},m.formatAs=function(e,t){var n,r=h(e),i=m.findTokens(t),a=m.getTokenDefinitions(),o=String(t),u=m.TOKEN_PREFIX,c=void 0,f=void 0,s=void 0;for(s=0,n=i.length;s=0;d--)(f=a[d].index)+1!==l.length-1?(void 0===u&&(u=l.length),s=l.substring(f+2,u),l=l.substring(0,f+2)+RegExp.escape(s)+l.substring(u,l.length),u=f):u=f;for(d=0;d1){n=Math.abs(r[1]-r[0]);for(var i=2,a=r.length;i=y&&t.data=r.stops[r.stops.length-1]}).forEach(function(e){c[e.index]=r.stops[r.stops.length-1]+\"-\"+h}),r.stops.unshift(r.start),b=new Set(r.stops),dr.stops[r.stops.length-1]&&b.add(h),b=[].concat(function(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t3&&void 0!==arguments[3]&&arguments[3],i=arguments.length>4&&void 0!==arguments[4]?arguments[4]:G.CROSS,a=[],o=[],u=n||K,c=e.getFieldspace(),f=t.getFieldspace(),s=c.name,d=f.name,p=c.name+\".\"+f.name,h=L(c,f);if(s===d)throw new Error(\"DataModels must have different alias names\");return c.fields.forEach(function(e){var t=E({},e.schema);-1===h.indexOf(t.name)||r||(t.name=c.name+\".\"+t.name),a.push(t)}),f.fields.forEach(function(e){var t=E({},e.schema);-1!==h.indexOf(t.name)?r||(t.name=f.name+\".\"+t.name,a.push(t)):a.push(t)}),l(e._rowDiffset,function(e){var n=!1,p=void 0;l(t._rowDiffset,function(t){var l=[],v={};v[s]={},v[d]={},c.fields.forEach(function(t){l.push(t.data[e]),v[s][t.name]=t.data[e]}),f.fields.forEach(function(e){-1!==h.indexOf(e.schema.name)&&r||l.push(e.data[t]),v[d][e.name]=e.data[t]});var m=Ke(v[s]),y=Ke(v[d]);if(u(m,y)){var g={};l.forEach(function(e,t){g[a[t].name]=e}),n&&G.CROSS!==i?o[p]=g:(o.push(g),n=!0,p=e)}else if((i===G.LEFTOUTER||i===G.RIGHTOUTER)&&!n){var b={},_=c.fields.length-1;l.forEach(function(e,t){b[a[t].name]=t<=_?e:null}),n=!0,p=e,o.push(b)}})}),new ut(o,a,{name:p})}function z(e,t){var n=\"\"+e,r=\"\"+t;return nr?1:0}function X(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:z;return e.length>1&&function e(t,n,r,i){if(r===n)return t;var a=n+Math.floor((r-n)/2);return e(t,n,a,i),e(t,a+1,r,i),function(e,t,n,r,i){for(var a=e,o=[],u=t;u<=r;u+=1)o[u]=a[u];for(var c=t,f=n+1,s=t;s<=r;s+=1)c>n?(a[s]=o[f],f+=1):f>r?(a[s]=o[c],c+=1):i(o[c],o[f])<=0?(a[s]=o[c],c+=1):(a[s]=o[f],f+=1)}(t,n,a,r,i),t}(e,0,e.length-1,t),e}function Q(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);ta?\"desc\"===t?-1:1:0}}return r}function Z(e,t){var n=new Map,r=[];return e.forEach(function(e){var i=e[t];n.has(i)?r[n.get(i)][1].push(e):(r.push([i,[e]]),n.set(i,r.length-1))}),r}function ee(e,t,n){var r={label:e[0]};return t.reduce(function(t,r,i){return t[r]=e[1].map(function(e){return e[n[i].index]}),t},r),r}function te(e,t,n,r,i){var a={schema:[],data:[],uids:[]},o=(i=Object.assign({},{addUid:!1,columnWise:!1},i)).addUid,u=r&&r.length>0,c=[];if(n.split(\",\").forEach(function(t){for(var n=0;n=0;u--)i=t[u][0],a=t[u][1],(o=Ze(r,i))&&(S(a)?X(n,function(e,t){return a(e[o.index],t[o.index])}):j(a)?function(){var e=Z(n,o.index),t=a[a.length-1],i=a.slice(0,a.length-1),u=i.map(function(e){return Ze(r,e)});e.forEach(function(e){e.push(ee(e,i,u))}),X(e,function(e,n){var r=e[2],i=n[2];return t(r,i)}),n.length=0,e.forEach(function(e){n.push.apply(n,Q(e[1]))})}():(a=\"desc\"===String(a).toLowerCase()?\"desc\":\"asc\",X(n,$(o.type,a,o.index))));e.uids=[],n.forEach(function(t){e.uids.push(t.pop())})}(a,r),i.columnWise){var f=Array.apply(void 0,Q(Array(a.schema.length))).map(function(){return[]});a.data.forEach(function(e){e.forEach(function(e,t){f[t].push(e)})}),a.data=f}return a}function ne(e,t){var n={},r=[],i=[],a=[],o=e.getFieldspace(),u=t.getFieldspace(),c=o.fieldsObj(),f=u.fieldsObj(),s=o.name+\" union \"+u.name;if(!M(e._colIdentifier.split(\",\").sort(),t._colIdentifier.split(\",\").sort()))return null;function d(e,t,r){l(e._rowDiffset,function(e){var o={},u=\"\";i.forEach(function(n){var r=t[n].data[e];u+=\"-\"+r,o[n]=r}),n[u]||(r&&a.push(o),n[u]=!0)})}return e._colIdentifier.split(\",\").forEach(function(e){var t=c[e];r.push(E({},t.schema)),i.push(t.schema.name)}),d(t,f,!1),d(e,c,!0),new ut(a,r,{name:s})}function re(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t1&&void 0!==arguments[1]?arguments[1]:{},n={},r=t,i=e.getPartialFieldspace().getMeasure(),a=se.defaultReducer();return\"function\"==typeof t&&(a=t),Object.entries(i).forEach(function(e){var o=le(e,1)[0];\"string\"==typeof t[o]&&(r[o]=se.resolve(r[o])?se.resolve(r[o]):a),\"function\"!=typeof t[o]&&(r[o]=void 0),n[o]=r[o]||se.resolve(i[o].defAggFn())||a}),n}(e,n),o=e.getPartialFieldspace(),u=o.fieldsObj(),c=o.name,f=[],s=[],d=[],p={},h=[],v=void 0;Object.entries(u).forEach(function(e){var t=le(e,2),n=t[0],r=t[1];(-1!==i.indexOf(n)||a[n])&&(d.push(E({},r.schema)),\"measure\"===r.schema.type&&\"discrete\"!==r.schema.subtype?s.push(n):\"dimension\"!==r.schema.type&&\"discrete\"!==r.schema.subtype||f.push(n))});var m=0;return l(e._rowDiffset,function(e){var t=\"\";f.forEach(function(n){t=t+\"-\"+u[n].data[e]}),void 0===p[t]?(p[t]=m,h.push({}),f.forEach(function(t){h[m][t]=u[t].data[e]}),s.forEach(function(t){h[m][t]=[u[t].data[e]]}),m+=1):s.forEach(function(n){h[p[t]][n].push(u[n].data[e])})}),h.forEach(function(e){var t=e;s.forEach(function(n){t[n]=a[n](e[n])})}),r?(r.__calculateFieldspace(),v=r):v=new yt(h,d,{name:c}),v}function pe(e,t){var n=L(e.getFieldspace(),t.getFieldspace());return function(e,t){var r=!0;return n.forEach(function(n){r=!(e[n].value!==t[n].value||!r)}),r}}function he(e,t){var n={},r=[],i=[],a=[],o=e.getFieldspace(),u=t.getFieldspace(),c=o.fieldsObj(),f=u.fieldsObj(),s=o.name+\" union \"+u.name;if(!M(e._colIdentifier.split(\",\").sort(),t._colIdentifier.split(\",\").sort()))return null;function d(e,t){l(e._rowDiffset,function(e){var r={},o=\"\";i.forEach(function(n){var i=t[n].data[e];o+=\"-\"+i,r[n]=i}),n[o]||(a.push(r),n[o]=!0)})}return e._colIdentifier.split(\",\").forEach(function(e){var t=c[e];r.push(E({},t.schema)),i.push(t.schema.name)}),d(e,c),d(t,f),new yt(a,r,{name:s})}function ve(e,t,n){return W(e,t,n,!1,G.LEFTOUTER)}function me(e,t,n){return W(t,e,n,!1,G.RIGHTOUTER)}var ye=function(){function e(e,t){for(var n=0;nn&&(n=e)}),[t,n]}(this.data)}},{key:\"parse\",value:function(e){return e=parseFloat(e,10),Number.isNaN(e)?null:e}},{key:\"unit\",value:function(){return this.fieldUnit}},{key:\"scale\",value:function(){return this.fieldScale}},{key:\"numberFormat\",value:function(){var e=this.fieldNumberformat;return function(t){return e(t)}}},{key:\"defAggFn\",value:function(){return this.fieldDefAggFn}}]),t}(),Oe=function(){function e(e,t){for(var n=0;n=a?c=!0:(r=e.charCodeAt(o++))===Pe?f=!0:r===Ce&&(f=!0,e.charCodeAt(o)===Pe&&++o),e.slice(i+1,t-1).replace(/\"\"/g,'\"')}for(;o2&&void 0!==arguments[2]?arguments[2]:{},i=arguments[3],a=void 0;t!==Y?(a={op:t,meta:r,criteria:i},e._derivation.push(a)):(a=[].concat(Ge(i)),e._derivation.length=0,(n=e._derivation).push.apply(n,Ge(a)))},ze=function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=n.operation||q,i=n.filterByMeasure||!1,a=[];a=t.length?t.map(function(e){return function(e){var t=e.getData(),n=t.schema,r=e.getFieldsConfig(),a=e.getFieldspace().fieldsObj(),o=t.data,u=Object.values(r).reduce(function(e,t){return e[t.def.name]=a[t.def.name].domain(),e},{});return function(e){return!!o.length&&o.some(function(t){return n.every(function(n){if(!(n.name in e))return!0;var a=e[n.name].valueOf();if(i&&n.type===f.MEASURE)return a>=u[n.name][0]&&a<=u[n.name][1];if(n.type!==f.DIMENSION)return!0;var o=r[n.name].index;return t[o]===e[n.name].valueOf()})})}}(e)}):[function(){return!1}];var o=void 0;r===q?o=e.clone(!1,!1).select(function(e){return a.every(function(t){return t(e)})},{saveChild:!1,mode:s.ALL}):o=e.clone(!1,!1).select(function(e){return a.some(function(t){return t(e)})},{mode:s.ALL,saveChild:!1});return o},Xe=function(e,t,n,r){var i=e.clone(r.saveChild),a=function(e,t,n,r){var i=[],a=-1,o=void 0,u=function(e){return n(qe(t,e),e)};return r.mode===s.INVERSE&&(u=function(e){return!n(qe(t,e))}),l(e,function(e){u(e)&&(-1!==a&&e===a+1?(o=i.length-1,i[o]=i[o].split(\"-\")[0]+\"-\"+e):i.push(\"\"+e),a=e)}),i.join(\",\")}(i._rowDiffset,i.getPartialFieldspace().fields,t,n);return i._rowDiffset=a,i.__calculateFieldspace().calculateFieldsConfig(),r.saveChild&&We(i,U,{config:n},t),i},Qe=function(e,t,n,r){var i=e.clone(n.saveChild),a=t;return n.mode===s.INVERSE&&(a=r.filter(function(e){return-1===t.indexOf(e)})),i._colIdentifier=a.join(\",\"),i.__calculateFieldspace().calculateFieldsConfig(),n.saveChild&&We(i,H,{projField:t,config:n,actualProjField:a},null),i},$e=function(e,t,n,r){r=Object.assign(Object.assign({},xe),r);var a=i[r.dataFormat];if(!a||\"function\"!=typeof a)throw new Error(\"No converter function found for \"+r.dataFormat+\" format\");var o=a(t,r),u=Je(o,2),c=u[0],f=u[1],s=Fe(f,n,c),l=R.createNamespace(s,r.name);return e._partialFieldspace=l,e._rowDiffset=f.length&&f[0].length?\"0-\"+(f[0].length-1):\"\",e._colIdentifier=n.map(function(e){return e.name}).join(),e},Ze=function(e,t){for(var n=0;n2&&void 0!==arguments[2]?arguments[2]:{},i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},a=i.nonTraversingModel,o=i.excludeModels||[];t!==a&&((!o.length||-1===o.indexOf(t))&&t.handlePropagation(n,r),t._children.forEach(function(t){var a=et(n,t),o=Je(a,2),u=o[0],c=o[1];e(t,[u,c],r,i)}))},nt=function(e,t,n,r){var i=void 0,a=void 0,o=n.propagationNameSpace,u=n.propagateToSource,c=n.sourceId,f=r.propagateInterpolatedValues,s=[];if(null===e&&!0!==r.persistent)s=[{criteria:[]}];else{var l,d=Object.values(o.mutableActions);!1!==u&&(d=d.filter(function(e){return e.config.sourceId!==c}));var p=d.filter(function(e){return(r.filterFn||function(){return!0})(e,r)}).map(function(e){return e.config.criteria}),h=[];if(!1!==u){var v=Object.values(o.mutableActions);v.forEach(function(e){var t=e.config;!1===t.applyOnSource&&t.action===r.action&&t.sourceId!==c&&(h.push(e.model),(i=v.filter(function(t){return t!==e}).map(function(e){return e.config.criteria})).length&&s.push({criteria:i,models:e.model,path:function e(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];return null!==t._parent&&(n.push(t),e(t._parent,n)),n}(e.model)}))})}i=(l=[]).concat.apply(l,[].concat(Ge(p),[e])).filter(function(e){return null!==e}),s.push({criteria:i,excludeModels:[].concat(h,Ge(r.excludeModels||[]))})}var m=t.model,y=Object.assign({sourceIdentifiers:e,propagationSourceId:c},r),g=t.groupByModel;f&&g&&(a=ze(g,i,{filterByMeasure:f}),tt(g,a,y)),s.forEach(function(e){var t=ze(m,e.criteria),n=e.path;if(n){var r=function(e,t){for(var n=0,r=t.length;n0&&void 0!==arguments[0])||arguments[0],t=void 0;if(!1===(!(arguments.length>1&&void 0!==arguments[1])||arguments[1])){var n=this.getData({getAllFields:!0}),r=n.data,i=n.schema,a=r.map(function(e){var t={};return i.forEach(function(n,r){t[n.name]=e[r]}),t});t=new this.constructor(a,i)}else t=new this.constructor(this);return e&&this._children.push(t),t}},{key:\"project\",value:function(e,t){var n={mode:s.NORMAL,saveChild:!0};t=Object.assign({},n,t);var r=this.getFieldsConfig(),i=Object.keys(r),a=t.mode,o=e.reduce(function(e,t){return\"RegExp\"===t.constructor.name?e.push.apply(e,function(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t1&&void 0!==arguments[1]?arguments[1]:[];We(this,Y,null,t),this._parent=e,e._children.push(this)}}]),e}(),at=function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function(e,t){var n=[],r=!0,i=!1,a=void 0;try{for(var o,u=e[Symbol.iterator]();!(r=(o=u.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){i=!0,a=e}finally{try{!r&&u.return&&u.return()}finally{if(i)throw a}}return n}(e,t);throw new TypeError(\"Invalid attempt to destructure non-iterable instance\")}}(),ot=function(){function e(e,t){for(var n=0;n1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{saveChild:!0},r=\"\"+e.join(),i=[this,e,t],a=de.apply(void 0,i);return n.saveChild&&(this._children.push(a),We(a,V,{fieldsArr:e,groupByString:r,defaultReducer:se.defaultReducer()},t)),a._parent=this,a}},{key:\"sort\",value:function(e){var t=this.getData({order:\"row\",sort:e}),n=[t.schema.map(function(e){return e.name})].concat(t.data),r=new this.constructor(n,t.schema,{dataFormat:\"DSVArr\"});return r._sortingDetails=e,r}},{key:\"addField\",value:function(e){var t=e.fieldName();this._colIdentifier+=\",\"+t;var n=this._partialFieldspace;if(n.fieldsObj()[e.fieldName()]){var r=n.fields.findIndex(function(e){return e.name===t});r>=0&&(n.fields[r]=e)}else n.fields.push(e);return this.__calculateFieldspace().calculateFieldsConfig(),this}},{key:\"calculateVariable\",value:function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{saveChild:!0,replaceVar:!1},r=this.getFieldsConfig(),i=t.slice(0,t.length-1),a=t[t.length-1];if(r[e.name]&&!n.replaceVar)throw new Error(e.name+\" field already exists in model.\");var o=i.map(function(e){var t=r[e];if(!t)throw new Error(e+\" is not a valid column name.\");return t.index}),u=this.clone(),c=u.getFieldspace().fields,f=o.map(function(e){return c[e]}),s=[];l(u._rowDiffset,function(e){var t=f.map(function(t){return t.data[e]});s[e]=a.apply(void 0,function(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t1&&void 0!==arguments[1]?arguments[1]:{},n=arguments[2],r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},i=t.isMutableAction,a=t.sourceId,o=t.payload,u=function e(t){return t._parent?e(t._parent):t}(this),c=u._propagationNameSpace,f={groupByModel:function e(t){return t._parent&&t._derivation.find(function(e){return\"group\"!==e.op})?e(t._parent):t}(this),model:u};return n&&function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments[2],r=void 0,i=t.isMutableAction,a=t.criteria,o=t.action+\"-\"+t.sourceId;r=i?e.mutableActions:e.immutableActions,null===a?delete r[o]:r[o]={model:n,config:t}}(c,t,this),nt(e,f,{propagationNameSpace:c,sourceId:a},Object.assign({payload:o},t)),i&&function(e,t,n){var r=e.immutableActions;for(var i in r){var a=r[i].config,o=n.config.sourceId,u=!n.propConfig.filterImmutableAction||n.propConfig.filterImmutableAction(a,n.config);if(a.sourceId!==o&&u){var c=a.criteria;nt(c,t,{propagationNameSpace:e,propagateToSource:!1,sourceId:o},a)}}}(c,f,{config:t,propConfig:r}),this}},{key:\"on\",value:function(e,t){switch(e){case\"propagation\":this._onPropagation.push(t)}return this}},{key:\"unsubscribe\",value:function(e){switch(e){case\"propagation\":this._onPropagation=[]}return this}},{key:\"handlePropagation\",value:function(e,t){var n=this;this._onPropagation.forEach(function(r){return r.call(n,e,t)})}},{key:\"bin\",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=this.clone(),r=t.name||e+\"_binned\";if(this.getFieldsConfig()[r]||!this.getFieldsConfig()[e])throw new Error(\"Field \"+e+\" already exists.\");var i=I(this._partialFieldspace.fields.find(function(t){return t.name===e}),this._rowDiffset,t),a=Fe([i.data],[{name:r,type:f.MEASURE,subtype:\"discrete\",bins:{range:i.range,mid:i.mid}}],[r])[0];return n.addField(a),We(n,J,{measureName:e,config:t,binFieldName:r},null),n}}],[{key:\"Reducers\",get:function(){return se}}]),t}(),ct=oe.sum,ft=oe.avg,st=oe.min,lt=oe.max,dt=oe.first,pt=oe.last,ht=oe.count,vt=oe.std,mt=n(0);ut.Operators={compose:function(){for(var e=arguments.length,t=Array(e),n=0;n1&&void 0!==arguments[1]?arguments[1]:{saveChild:!0}).saveChild;return t.forEach(function(e){n=e(n),i.push.apply(i,function(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t1&&r.dispose(),n}},bin:function(){for(var e=arguments.length,t=Array(e),n=0;n2?(i=arguments.length<=0?void 0:arguments[0],n=arguments.length<=1?void 0:arguments[1],o=arguments.length<=2?void 0:arguments[2]):(i=null,n=arguments.length<=0?void 0:arguments[0],o=arguments.length<=1?void 0:arguments[1]),t=o(y),(e=r=new _(t.fn)).addDependencies.apply(e,P(t.dependencies)),this._addPropInModel(i,function(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}({},n,r)),this}},{key:\"_addPropInModel\",value:function(e,t){return this._graph.createNodesFrom(t,e),this}},{key:\"on\",value:function(e,t,r){var n,i=e instanceof Array?e:[e],o=this._graph.createElectricNodeOf(i,{type:\"CurrFrame\",fn:t});r&&(n=this._graph.stopPropagation().setPropagationOverride(\"nextFrame\")).resetNodeValue.apply(n,P(e));return o}},{key:\"next\",value:function(e,t,r){var n,i=e instanceof Array?e:[e],o=this._graph.createElectricNodeOf(i,{type:\"NextFrame\",fn:t});r&&(n=this._graph.stopPropagation().setPropagationOverride(\"currentFrame\")).resetNodeValue.apply(n,P(e));return o}},{key:\"lock\",value:function(){return this._lockFlag=!0,this._reqQ.length=0,this}},{key:\"unlock\",value:function(){return this._lockFlag=!1,this.setProp.apply(this,P(this._reqQ)),this._reqQ.length=0,this}},{key:\"prop\",value:function(){var e,t=void 0,r=void 0;switch(e=arguments.length){case 1:t=arguments.length<=0?void 0:arguments[0];break;case 2:t=arguments.length<=0?void 0:arguments[0],r=arguments.length<=1?void 0:arguments[1];break;default:return this}return 2===e?(this._lockFlag?this._reqQ.push([t,r]):this.setProp([t,r]),this):this._graph.getNodeValue(t)}},{key:\"setProp\",value:function(){for(var e,t=this,r=arguments.length,n=Array(r),i=0;i whenever a break is necessary. This is to recgonize one\n * generalized format independent of the implementation (canvas based solution, svg based solution). This method\n * converts the output of getSmartText().text to array of lines if the text is wrapped. It sets a named property\n * `lines` on the object passed as parameter.\n *\n * @param {Object} smartlabel - the object returned by getSmartText based on which line arr which to be formed.\n *\n * @return {Object} - The same object which was passed in the arguments. Also a named property `lines` is set.\n */\nSmartLabelManager.textToLines = function (smartlabel) {\n smartlabel = smartlabel || {};\n\n if (!smartlabel.text) {\n smartlabel.text = '';\n } else if (typeof smartlabel.text !== 'string') {\n smartlabel.text = smartlabel.text.toString();\n }\n\n smartlabel.lines = smartlabel.text.split(/\\n|/ig);\n return smartlabel;\n};\n\n// Saves all the instance created so far\nSmartLabelManager.store = {};\n\n// Calculates space taken by a character with an approximation value which is calculated by repeating the\n// character by string length times.\nSmartLabelManager.prototype._calCharDimWithCache = function (text, calculateDifference, length) {\n if (!this._init) {\n return false;\n }\n\n var size,\n csArr,\n tw,\n twi,\n cachedStyle,\n asymmetricDifference,\n maxAdvancedCacheLimit = this.options.maxCacheLimit,\n container = this._container,\n style = this.style || {},\n cache = this._advancedCache || (this._advancedCache = {}),\n advancedCacheKey = this._advancedCacheKey || (this._advancedCacheKey = []),\n cacheName = text + (style.fontSize || BLANK) + (style.fontFamily || BLANK) + (style.fontWeight || BLANK) + (style.fontStyle || BLANK),\n cacheInitName = text + 'init' + (style.fontSize || BLANK) + (style.fontFamily || BLANK) + (style.fontWeight || BLANK) + (style.fontStyle || BLANK);\n\n htmlSplCharSpace[text] && (text = htmlSplCharSpace[text]);\n\n if (!calculateDifference) {\n asymmetricDifference = 0;\n } else {\n if ((asymmetricDifference = cache[cacheInitName]) === undefined) {\n container.innerHTML = text.repeat ? text.repeat(length) : Array(length + 1).join(text); // jshint ignore:line\n tw = container.offsetWidth;\n\n container.innerHTML = text;\n twi = container.offsetWidth;\n\n asymmetricDifference = cache[cacheInitName] = (tw - length * twi) / (length + 1);\n advancedCacheKey.push(cacheInitName);\n if (advancedCacheKey.length > maxAdvancedCacheLimit) {\n delete cache[advancedCacheKey.shift()];\n }\n }\n }\n\n if (cachedStyle = cache[cacheName]) {\n csArr = cachedStyle.split(',');\n return {\n width: parseFloat(csArr[0], 10),\n height: parseFloat(csArr[1], 10)\n };\n }\n\n container.innerHTML = text;\n\n size = {\n height: container.offsetHeight,\n width: container.offsetWidth + asymmetricDifference\n };\n\n cache[cacheName] = size.width + ',' + size.height;\n advancedCacheKey.push(cacheName);\n if (advancedCacheKey.length > maxAdvancedCacheLimit) {\n delete cache[advancedCacheKey.shift()];\n }\n\n return size;\n};\n\n// Provide function to calculate the height and width based on the environment and available support from dom.\nSmartLabelManager.prototype._getWidthFn = function () {\n var contObj = this._containerObj,\n container = this._container,\n svgText = contObj.svgText;\n\n if (svgText) {\n return function (str) {\n var bbox, width;\n\n svgText.textContent = str;\n bbox = svgText.getBBox();\n width = bbox.width - SVG_BBOX_CORRECTION;\n if (width < 1) {\n width = bbox.width;\n }\n\n return width;\n };\n } else {\n return function (str) {\n container.innerHTML = str;\n return container.offsetWidth;\n };\n }\n};\n\n/*\n * Sets the style based on which the text's metrics to be calculated.\n *\n * @param {Object} style - The style object which affects the text size\n * {\n * fontSize / 'font-size' : MUST BE FOLLOWED BY PX (10px, 11px)\n * fontFamily / 'font-family'\n * fontWeight / 'font-weight'\n * fontStyle / 'font-style'\n * }\n *\n * @return {SmartLabelManager} - Current instance of SmartLabelManager\n */\nSmartLabelManager.prototype.setStyle = function (style) {\n if (!this._init) {\n return this;\n }\n\n var sCont;\n\n if (style === this.style && !this._styleNotSet) {\n return;\n }\n\n if (!style) {\n style = this.style;\n }\n\n slLib.setLineHeight(style);\n this.style = style;\n\n this._containerObj = sCont = this._containerManager.get(style);\n\n if (this._containerObj) {\n this._container = sCont.node;\n this._context = sCont.context;\n this._cache = sCont.charCache;\n this._lineHeight = sCont.lineHeight;\n this._styleNotSet = false;\n } else {\n this._styleNotSet = true;\n }\n\n return this;\n};\n\n/*\n * Decides whether ellipses to be shown if the node is truncated\n *\n * @param {Boolean} useEllipses - decides if a ellipses to be appended if the text is truncated. Default: false\n *\n * @return {SmartLabelManager} - Current instance of SmartLabelManager\n */\nSmartLabelManager.prototype.useEllipsesOnOverflow = function (useEllipses) {\n if (!this._init) {\n return this;\n }\n this._showNoEllipses = !useEllipses;\n return this;\n};\n\n/*\n * Get wrapped or truncated text if a bound box is defined around it. The result text would be separated by
\n * if wrapped\n *\n * @param {String} text - the subject text\n * @param {Number} maxWidth - width in px of the the bound box\n * @param {Number} maxHeight - height in px of the the bound box\n * @param {Boolean} noWrap - whether the text to be wrapped. Default false.\n *\n * @return {Object} - The metrics of the text bounded by the box\n * {\n * height : height of the wrapped text\n * width : width of the wrapped text\n * isTruncated : whether the text is truncated\n * maxHeight : Maximum height given\n * maxWidth : Maximum width given\n * oriText : Original text sent\n * oriTextHeight : Original text height\n * oriTextWidth : Original text width\n * text : SMART TEXT\n * }\n */\nSmartLabelManager.prototype.getSmartText = function (text, maxWidth, maxHeight, noWrap) {\n if (!this._init) {\n return false;\n }\n\n if (text === undefined || text === null) {\n text = '';\n } else if (typeof text !== 'string') {\n text = text.toString();\n }\n\n var len,\n trimStr,\n tempArr,\n tmpText,\n maxWidthWithEll,\n toolText,\n oriWidth,\n oriHeight,\n newCharIndex,\n nearestChar,\n tempChar,\n getWidth,\n initialLeft,\n initialTop,\n getOriSizeImproveObj,\n spanArr,\n x,\n y,\n minWidth,\n elem,\n chr,\n elemRightMostPoint,\n elemLowestPoint,\n lastBR,\n removeFromIndex,\n removeFromIndexForEllipses,\n hasHTMLTag = false,\n maxStrWidth = 0,\n lastDash = -1,\n lastSpace = -1,\n lastIndexBroken = -1,\n strWidth = 0,\n strHeight = 0,\n oriTextArr = [],\n i = 0,\n ellipsesStr = this._showNoEllipses ? '' : '...',\n lineHeight = this._lineHeight,\n context = this._context,\n container = this._container,\n sCont = this._containerObj,\n ellipsesWidth = sCont.ellipsesWidth,\n dotWidth = sCont.dotWidth,\n characterArr = [],\n dashIndex = -1,\n spaceIndex = -1,\n lastLineBreak = -1,\n fastTrim = function fastTrim(str) {\n str = str.replace(/^\\s\\s*/, '');\n var ws = /\\s/,\n i = str.length;\n while (ws.test(str.charAt(i -= 1))) {/* jshint noempty:false */}\n return str.slice(0, i + 1);\n },\n smartLabel = {\n text: text,\n maxWidth: maxWidth,\n maxHeight: maxHeight,\n width: null,\n height: null,\n oriTextWidth: null,\n oriTextHeight: null,\n oriText: text,\n isTruncated: false\n };\n\n getWidth = this._getWidthFn();\n\n // In some browsers, offsetheight of a single-line text is getting little (1 px) heigher value of the\n // lineheight. As a result, smartLabel is unable to return single-line text.\n // To fix this, increase the maxHeight a little amount. Hence maxHeight = lineHeight * 1.2\n if (maxHeight === lineHeight) {\n maxHeight *= 1.2;\n }\n\n if (container) {\n if (!documentSupport.isBrowserLess) {\n hasHTMLTag = slLib.xmlTagRegEx.test(text);\n if (!hasHTMLTag) {\n // Due to support of <,> for xml we convert <, > to <,> respectively so to get the correct\n // width it is required to convert the same before calculation for the new improve version of the\n // get text width.\n tmpText = text.replace(slLib.ltgtRegex, function (match) {\n return match === '<' ? '<' : '>';\n });\n getOriSizeImproveObj = this.getOriSize(tmpText, true);\n\n smartLabel.oriTextWidth = oriWidth = getOriSizeImproveObj.width;\n smartLabel.oriTextHeight = oriHeight = getOriSizeImproveObj.height;\n } else {\n container.innerHTML = text;\n smartLabel.oriTextWidth = oriWidth = container.offsetWidth;\n smartLabel.oriTextHeight = oriHeight = container.offsetHeight;\n }\n\n if (oriHeight <= maxHeight && oriWidth <= maxWidth) {\n smartLabel.width = smartLabel.oriTextWidth = oriWidth;\n smartLabel.height = smartLabel.oriTextHeight = oriHeight;\n return smartLabel;\n }\n\n if (lineHeight > maxHeight) {\n smartLabel.text = '';\n smartLabel.width = smartLabel.oriTextWidth = 0;\n smartLabel.height = smartLabel.oriTextHeight = 0;\n return smartLabel;\n }\n }\n\n // Calculate width with ellipses\n text = fastTrim(text).replace(/(\\s+)/g, ' ');\n maxWidthWithEll = this._showNoEllipses ? maxWidth : maxWidth - ellipsesWidth;\n\n if (!hasHTMLTag) {\n oriTextArr = text.split('');\n len = oriTextArr.length;\n trimStr = '', tempArr = [];\n tempChar = oriTextArr[0];\n\n if (this._cache[tempChar]) {\n minWidth = this._cache[tempChar].width;\n } else {\n minWidth = getWidth(tempChar);\n this._cache[tempChar] = { width: minWidth };\n }\n\n if (maxWidthWithEll > minWidth) {\n tempArr = text.substr(0, slLib.getNearestBreakIndex(text, maxWidthWithEll, this)).split('');\n i = tempArr.length;\n } else if (minWidth > maxWidth) {\n smartLabel.text = '';\n smartLabel.width = smartLabel.oriTextWidth = smartLabel.height = smartLabel.oriTextHeight = 0;\n return smartLabel;\n } else if (ellipsesStr) {\n maxWidthWithEll = maxWidth - 2 * dotWidth;\n if (maxWidthWithEll > minWidth) {\n ellipsesStr = '..';\n } else {\n maxWidthWithEll = maxWidth - dotWidth;\n if (maxWidthWithEll > minWidth) {\n ellipsesStr = '.';\n } else {\n maxWidthWithEll = 0;\n ellipsesStr = '';\n }\n }\n }\n\n strWidth = getWidth(tempArr.join(''));\n strHeight = this._lineHeight;\n\n if (noWrap) {\n for (; i < len; i += 1) {\n tempChar = tempArr[i] = oriTextArr[i];\n if (this._cache[tempChar]) {\n minWidth = this._cache[tempChar].width;\n } else {\n if (!getOriSizeImproveObj || !(minWidth = getOriSizeImproveObj.detailObj[tempChar])) {\n minWidth = getWidth(tempChar);\n }\n this._cache[tempChar] = {\n width: minWidth\n };\n }\n strWidth += minWidth;\n if (strWidth > maxWidthWithEll) {\n if (!trimStr) {\n trimStr = tempArr.slice(0, -1).join('');\n }\n if (strWidth > maxWidth) {\n smartLabel.text = fastTrim(trimStr) + ellipsesStr;\n smartLabel.tooltext = smartLabel.oriText;\n smartLabel.width = getWidth(smartLabel.text);\n smartLabel.height = this._lineHeight;\n return smartLabel;\n }\n }\n }\n\n smartLabel.text = tempArr.join('');\n smartLabel.width = strWidth;\n smartLabel.height = this._lineHeight;\n return smartLabel;\n } else {\n for (; i < len; i += 1) {\n tempChar = tempArr[i] = oriTextArr[i];\n if (tempChar === ' ' && !context) {\n tempChar = ' ';\n }\n\n if (this._cache[tempChar]) {\n minWidth = this._cache[tempChar].width;\n } else {\n if (!getOriSizeImproveObj || !(minWidth = getOriSizeImproveObj.detailObj[tempChar])) {\n minWidth = getWidth(tempChar);\n }\n this._cache[tempChar] = {\n width: minWidth\n };\n }\n strWidth += minWidth;\n\n if (strWidth > maxWidthWithEll) {\n if (!trimStr) {\n trimStr = tempArr.slice(0, -1).join('');\n }\n if (strWidth > maxWidth) {\n /** @todo use regular expressions for better performance. */\n lastSpace = text.substr(0, tempArr.length).lastIndexOf(' ');\n lastDash = text.substr(0, tempArr.length).lastIndexOf('-');\n if (lastSpace > lastIndexBroken) {\n strWidth = getWidth(tempArr.slice(lastIndexBroken + 1, lastSpace).join(''));\n tempArr.splice(lastSpace, 1, '
');\n lastIndexBroken = lastSpace;\n newCharIndex = lastSpace + 1;\n } else if (lastDash > lastIndexBroken) {\n if (lastDash === tempArr.length - 1) {\n strWidth = getWidth(tempArr.slice(lastIndexBroken + 1, lastSpace).join(''));\n tempArr.splice(lastDash, 1, '
-');\n } else {\n strWidth = getWidth(tempArr.slice(lastIndexBroken + 1, lastSpace).join(''));\n tempArr.splice(lastDash, 1, '-
');\n }\n lastIndexBroken = lastDash;\n newCharIndex = lastDash + 1;\n } else {\n tempArr.splice(tempArr.length - 1, 1, '
' + oriTextArr[i]);\n lastLineBreak = tempArr.length - 2;\n strWidth = getWidth(tempArr.slice(lastIndexBroken + 1, lastLineBreak + 1).join(''));\n lastIndexBroken = lastLineBreak;\n newCharIndex = i;\n }\n strHeight += this._lineHeight;\n if (strHeight > maxHeight) {\n smartLabel.text = fastTrim(trimStr) + ellipsesStr;\n smartLabel.tooltext = smartLabel.oriText;\n // The max width among all the lines will be the width of the string.\n smartLabel.width = maxWidth;\n smartLabel.height = strHeight - this._lineHeight;\n return smartLabel;\n } else {\n maxStrWidth = max(maxStrWidth, strWidth);\n trimStr = null;\n nearestChar = slLib.getNearestBreakIndex(text.substr(newCharIndex), maxWidthWithEll, this);\n strWidth = getWidth(text.substr(newCharIndex, nearestChar || 1));\n if (tempArr.length < newCharIndex + nearestChar) {\n tempArr = tempArr.concat(text.substr(tempArr.length, newCharIndex + nearestChar - tempArr.length).split(''));\n i = tempArr.length - 1;\n }\n }\n }\n }\n }\n\n maxStrWidth = max(maxStrWidth, strWidth);\n\n smartLabel.text = tempArr.join('');\n smartLabel.width = maxStrWidth;\n smartLabel.height = strHeight;\n return smartLabel;\n }\n } else {\n toolText = text.replace(slLib.spanAdditionRegx, '$2');\n text = text.replace(slLib.spanAdditionRegx, slLib.spanAdditionReplacer);\n text = text.replace(/()/g, '$1');\n\n container.innerHTML = text;\n\n spanArr = container[documentSupport.childRetriverFn](documentSupport.childRetriverString);\n\n for (x = 0, y = spanArr.length; x < y; x += 1) {\n elem = spanArr[x];\n //chech whether this span is temporary inserted span from it's class\n if (documentSupport.noClassTesting || slLib.classNameReg.test(elem.className)) {\n chr = elem.innerHTML;\n if (chr !== '') {\n if (chr === ' ') {\n spaceIndex = characterArr.length;\n } else if (chr === '-') {\n dashIndex = characterArr.length;\n }\n\n characterArr.push({\n spaceIdx: spaceIndex,\n dashIdx: dashIndex,\n elem: elem\n });\n oriTextArr.push(chr);\n }\n }\n }\n\n i = 0;\n len = characterArr.length;\n minWidth = characterArr[0].elem.offsetWidth;\n\n if (minWidth > maxWidth) {\n smartLabel.text = '';\n smartLabel.width = smartLabel.oriTextWidth = smartLabel.height = smartLabel.oriTextHeight = 0;\n\n return smartLabel;\n } else if (minWidth > maxWidthWithEll && !this._showNoEllipses) {\n\n maxWidthWithEll = maxWidth - 2 * dotWidth;\n if (maxWidthWithEll > minWidth) {\n ellipsesStr = '..';\n } else {\n maxWidthWithEll = maxWidth - dotWidth;\n if (maxWidthWithEll > minWidth) {\n ellipsesStr = '.';\n } else {\n maxWidthWithEll = 0;\n ellipsesStr = '';\n }\n }\n }\n\n initialLeft = characterArr[0].elem.offsetLeft;\n initialTop = characterArr[0].elem.offsetTop;\n\n if (noWrap) {\n for (; i < len; i += 1) {\n elem = characterArr[i].elem;\n elemRightMostPoint = elem.offsetLeft - initialLeft + elem.offsetWidth;\n\n if (elemRightMostPoint > maxWidthWithEll) {\n if (!removeFromIndexForEllipses) {\n removeFromIndexForEllipses = i;\n }\n if (container.offsetWidth > maxWidth) {\n removeFromIndex = i;\n i = len;\n }\n }\n }\n } else {\n for (; i < len; i += 1) {\n elem = characterArr[i].elem;\n elemLowestPoint = elem.offsetHeight + (elem.offsetTop - initialTop);\n elemRightMostPoint = elem.offsetLeft - initialLeft + elem.offsetWidth;\n\n lastBR = null;\n\n if (elemRightMostPoint > maxWidthWithEll) {\n if (!removeFromIndexForEllipses) {\n removeFromIndexForEllipses = i;\n }\n\n if (elemRightMostPoint > maxWidth) {\n lastSpace = characterArr[i].spaceIdx;\n lastDash = characterArr[i].dashIdx;\n if (lastSpace > lastIndexBroken) {\n characterArr[lastSpace].elem.innerHTML = '
';\n lastIndexBroken = lastSpace;\n } else if (lastDash > lastIndexBroken) {\n if (lastDash === i) {\n // in case the overflowing character itself is the '-'\n characterArr[lastDash].elem.innerHTML = '
-';\n } else {\n characterArr[lastDash].elem.innerHTML = '-
';\n }\n lastIndexBroken = lastDash;\n } else {\n elem.parentNode.insertBefore(lastBR = doc.createElement('br'), elem);\n }\n\n //check whether this break made current element outside the area height\n if (elem.offsetHeight + elem.offsetTop > maxHeight) {\n //remove the lastly inserted line break\n if (lastBR) {\n lastBR.parentNode.removeChild(lastBR);\n } else if (lastIndexBroken === lastDash) {\n characterArr[lastDash].elem.innerHTML = '-';\n } else {\n characterArr[lastSpace].elem.innerHTML = ' ';\n }\n removeFromIndex = i;\n //break the looping condition\n i = len;\n } else {\n removeFromIndexForEllipses = null;\n }\n }\n } else {\n //check whether this break made current element outside the area height\n if (elemLowestPoint > maxHeight) {\n removeFromIndex = i;\n i = len;\n }\n }\n }\n }\n\n if (removeFromIndex < len) {\n //set the trancated property of the smartlabel\n smartLabel.isTruncated = true;\n\n /** @todo is this really needed? */\n removeFromIndexForEllipses = removeFromIndexForEllipses ? removeFromIndexForEllipses : removeFromIndex;\n\n for (i = len - 1; i >= removeFromIndexForEllipses; i -= 1) {\n elem = characterArr[i].elem;\n //chech whether this span is temporary inserted span from it's class\n elem.parentNode.removeChild(elem);\n }\n\n for (; i >= 0; i -= 1) {\n elem = characterArr[i].elem;\n if (slLib.classNameBrReg.test(elem.className)) {\n //chech whether this span is temporary inserted span from it's class\n elem.parentNode.removeChild(elem);\n } else {\n i = 0;\n }\n }\n }\n\n //get the smart text\n smartLabel.text = container.innerHTML.replace(slLib.spanRemovalRegx, '$1').replace(/\\&\\;/g, '&');\n if (smartLabel.isTruncated) {\n smartLabel.text += ellipsesStr;\n smartLabel.tooltext = toolText;\n }\n }\n\n smartLabel.height = container.offsetHeight;\n smartLabel.width = container.offsetWidth;\n\n return smartLabel;\n } else {\n smartLabel.error = new Error('Body Tag Missing!');\n return smartLabel;\n }\n};\n\n/*\n * Get the height and width of a text.\n *\n * @param {String} text - Text whose metrics to be measured\n * @param {Boolean} Optional detailedCalculationFlag - this flag if set it calculates per letter position\n * information and returns it. Ideally you dont need it unless you want to post process the\n * string. And its an EXPENSIVE OPERATION.\n *\n * @return {Object} - If detailedCalculationFlag is set to true the returned object would be\n * {\n * height: height of the text\n * width: width of the text\n * detailObj: detail calculation of letters in the format {lettername: width}\n * }\n * If detailedCalculationFlag is set to false the returned object wont have the detailObj prop.\n */\nSmartLabelManager.prototype.getOriSize = function (text, detailedCalculationFlag) {\n if (!this._init) {\n return false;\n }\n\n var textArr,\n letter,\n lSize,\n i,\n l,\n cumulativeSize = 0,\n height = 0,\n indiSizeStore = {};\n\n if (!detailedCalculationFlag) {\n return this._calCharDimWithCache(text);\n }\n\n // Calculate the width of every letter with an approximation\n textArr = text.split('');\n for (i = 0, l = textArr.length; i < l; i++) {\n letter = textArr[i];\n lSize = this._calCharDimWithCache(letter, true, textArr.length);\n height = max(height, lSize.height);\n cumulativeSize += lSize.width;\n indiSizeStore[letter] = lSize.width;\n }\n\n return {\n width: round(cumulativeSize),\n height: height,\n detailObj: indiSizeStore\n };\n};\n\n/*\n * Dispose the container and object allocated by the smartlabel\n */\nSmartLabelManager.prototype.dispose = function () {\n if (!this._init) {\n return this;\n }\n\n this._containerManager && this._containerManager.dispose && this._containerManager.dispose();\n\n delete this._container;\n delete this._context;\n delete this._cache;\n delete this._containerManager;\n delete this._containerObj;\n delete this.id;\n delete this.style;\n delete this.parentContainer;\n delete this._showNoEllipses;\n\n return this;\n};\n\nexports['default'] = SmartLabelManager;\nmodule.exports = exports['default'];","'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n\tvalue: true\n});\nvar lib = {\n\tinit: function init(win) {\n\t\tvar doc = win.document,\n\t\t nav = win.navigator,\n\t\t userAgent = nav.userAgent,\n\t\t DIV = 'DIV',\n\t\t ceil = Math.ceil,\n\t\t floor = Math.floor,\n\t\t containerInstanceCount = 0,\n\t\t clsNameSpace = 'fusioncharts-smartlabel-',\n\t\t containerClass = clsNameSpace + 'container',\n\t\t classNameWithTag = clsNameSpace + 'tag',\n\t\t classNameWithTagBR = clsNameSpace + 'br';\n\n\t\tlib = {\n\t\t\twin: win,\n\n\t\t\tcontainerClass: containerClass,\n\n\t\t\tclassNameWithTag: classNameWithTag,\n\n\t\t\tclassNameWithTagBR: classNameWithTagBR,\n\n\t\t\tmaxDefaultCacheLimit: 500,\n\n\t\t\tclassNameReg: new RegExp('\\b' + classNameWithTag + '\\b'),\n\n\t\t\tclassNameBrReg: new RegExp('\\b' + classNameWithTagBR + '\\b'),\n\n\t\t\tspanAdditionRegx: /(<[^<\\>]+?\\>)|(&(?:[a-z]+|#[0-9]+);|.)/ig,\n\n\t\t\tspanAdditionReplacer: '$1$2',\n\n\t\t\tspanRemovalRegx: new RegExp('\\\\]+?' + classNameWithTag + '[^\\\\>]{0,}\\\\>(.*?)\\\\<\\\\/span\\\\>', 'ig'),\n\n\t\t\txmlTagRegEx: new RegExp('<[^>][^<]*[^>]+>', 'i'),\n\n\t\t\tltgtRegex: /<|>/g,\n\n\t\t\tbrReplaceRegex: //ig,\n\n\t\t\ttestStrAvg: 'WgI',\n\n\t\t\t// This style is applied over the parent smartlabel container. The container is kept hidden from the viewport\n\t\t\tparentContainerStyle: {\n\t\t\t\tposition: 'absolute',\n\t\t\t\ttop: '-9999em',\n\t\t\t\twhiteSpace: 'nowrap',\n\t\t\t\tpadding: '0px',\n\t\t\t\twidth: '1px',\n\t\t\t\theight: '1px',\n\t\t\t\toverflow: 'hidden'\n\t\t\t},\n\n\t\t\t// All the style which might affect the text metrics\n\t\t\tsupportedStyle: {\n\t\t\t\tfont: 'font',\n\t\t\t\tfontFamily: 'font-family',\n\t\t\t\t'font-family': 'font-family',\n\t\t\t\tfontWeight: 'font-weight',\n\t\t\t\t'font-weight': 'font-weight',\n\t\t\t\tfontSize: 'font-size',\n\t\t\t\t'font-size': 'font-size',\n\t\t\t\tlineHeight: 'line-height',\n\t\t\t\t'line-height': 'line-height',\n\t\t\t\tfontStyle: 'font-style',\n\t\t\t\t'font-style': 'font-style'\n\t\t\t},\n\n\t\t\t// Get the support list for html the document where the text calcution is to be done.\n\t\t\tgetDocumentSupport: function getDocumentSupport() {\n\t\t\t\tvar childRetriverFn, childRetriverString, noClassTesting;\n\n\t\t\t\tif (doc.getElementsByClassName) {\n\t\t\t\t\tchildRetriverFn = 'getElementsByClassName';\n\t\t\t\t\tchildRetriverString = classNameWithTag;\n\t\t\t\t\tnoClassTesting = true;\n\t\t\t\t} else {\n\t\t\t\t\tchildRetriverFn = 'getElementsByTagName';\n\t\t\t\t\tchildRetriverString = 'span';\n\t\t\t\t\tnoClassTesting = false;\n\t\t\t\t}\n\n\t\t\t\treturn {\n\t\t\t\t\tisIE: /msie/i.test(userAgent) && !win.opera,\n\t\t\t\t\thasSVG: Boolean(win.SVGAngle || doc.implementation.hasFeature('http://www.w3.org/TR/SVG11/feature#BasicStructure', '1.1')),\n\t\t\t\t\tisHeadLess: new RegExp(' HtmlUnit').test(userAgent),\n\t\t\t\t\tisWebKit: new RegExp(' AppleWebKit/').test(userAgent),\n\t\t\t\t\tchildRetriverFn: childRetriverFn,\n\t\t\t\t\tchildRetriverString: childRetriverString,\n\t\t\t\t\tnoClassTesting: noClassTesting\n\t\t\t\t};\n\t\t\t},\n\n\t\t\t/*\n * Create a html div element and attach it with a parent. All the subsequent operations are performed\n * by upding this dom tree only.\n *\n * @param {HTMLElement} - The html element where the newly created div is to be attached. If not passed,\n * the new div is appended on the body.\n */\n\t\t\tcreateContainer: function createContainer(containerParent) {\n\t\t\t\tvar body, container;\n\n\t\t\t\tif (containerParent && (containerParent.offsetWidth || containerParent.offsetHeight)) {\n\t\t\t\t\tif (containerParent.appendChild) {\n\t\t\t\t\t\tcontainerParent.appendChild(container = doc.createElement(DIV));\n\t\t\t\t\t\tcontainer.className = containerClass;\n\t\t\t\t\t\tcontainer.setAttribute('aria-hidden', 'true');\n\t\t\t\t\t\tcontainer.setAttribute('role', 'presentation');\n\t\t\t\t\t\treturn container;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tbody = doc.getElementsByTagName('body')[0];\n\n\t\t\t\t\tif (body && body.appendChild) {\n\t\t\t\t\t\tcontainer = doc.createElement(DIV);\n\t\t\t\t\t\tcontainer.className = containerClass;\n\t\t\t\t\t\tcontainer.setAttribute('aria-hidden', 'true');\n\t\t\t\t\t\tcontainer.setAttribute('role', 'presentation');\n\t\t\t\t\t\tcontainerInstanceCount += 1;\n\t\t\t\t\t\tbody.appendChild(container);\n\t\t\t\t\t\treturn container;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// Finds a approximate position where the text is to be broken\n\t\t\tgetNearestBreakIndex: function getNearestBreakIndex(text, maxWidth, sl) {\n\t\t\t\tif (!text || !text.length) {\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\n\t\t\t\tvar difference,\n\t\t\t\t getWidth = sl._getWidthFn(),\n\t\t\t\t charLen = 0,\n\t\t\t\t increment = 0,\n\t\t\t\t oriWidth = getWidth(text),\n\t\t\t\t avgWidth = oriWidth / text.length;\n\n\t\t\t\tdifference = maxWidth;\n\t\t\t\tcharLen = ceil(maxWidth / avgWidth);\n\n\t\t\t\tif (oriWidth < maxWidth) {\n\t\t\t\t\treturn text.length - 1;\n\t\t\t\t}\n\n\t\t\t\tif (charLen > text.length) {\n\t\t\t\t\tdifference = maxWidth - oriWidth;\n\t\t\t\t\tcharLen = text.length;\n\t\t\t\t}\n\n\t\t\t\twhile (difference > 0) {\n\t\t\t\t\tdifference = maxWidth - getWidth(text.substr(0, charLen));\n\t\t\t\t\tincrement = floor(difference / avgWidth);\n\t\t\t\t\tif (increment) {\n\t\t\t\t\t\tcharLen += increment;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn charLen;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\twhile (difference < 0) {\n\t\t\t\t\tdifference = maxWidth - getWidth(text.substr(0, charLen));\n\t\t\t\t\tincrement = floor(difference / avgWidth);\n\t\t\t\t\tif (increment) {\n\t\t\t\t\t\tcharLen += increment;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn charLen;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn charLen;\n\t\t\t},\n\n\t\t\t/*\n * Determine lineheight of a text for a given style. It adds propery lineHeight to the style passed\n *\n * @param {Object} - The style based on which the text's metric needs to be calculated. The calculation happens\n * based on fontSize property, if its not present a default font size is assumed.\n *\n * @return {Object} - The style that was passed with lineHeight as a named propery set on the object.\n */\n\t\t\tsetLineHeight: function setLineHeight(styleObj) {\n\t\t\t\tvar fSize = styleObj.fontSize = styleObj.fontSize || '12px';\n\t\t\t\tstyleObj.lineHeight = styleObj.lineHeight || styleObj['line-height'] || parseInt(fSize, 10) * 1.2 + 'px';\n\t\t\t\treturn styleObj;\n\t\t\t}\n\t\t};\n\n\t\treturn lib;\n\t}\n};\n\nexports['default'] = lib;\nmodule.exports = exports['default'];","const Muze = require('./muze');\n\nmodule.exports = Muze.default ? Muze.default : Muze;\n","'use strict';\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _lib = require('./lib');\n\nvar _lib2 = _interopRequireDefault(_lib);\n\nvar slLib = _lib2['default'].init(typeof window !== \"undefined\" ? window : undefined),\n doc = slLib.win.document,\n documentSupport = slLib.getDocumentSupport(),\n SVG_BBOX_CORRECTION = documentSupport.isWebKit ? 0 : 4.5;\n\nfunction ContainerManager(parentContainer, isBrowserLess, maxContainers) {\n var svg;\n\n maxContainers = maxContainers > 5 ? maxContainers : 5;\n maxContainers = maxContainers < 20 ? maxContainers : 20;\n\n this.maxContainers = maxContainers;\n this.first = null;\n this.last = null;\n this.containers = {};\n this.length = 0;\n this.rootNode = parentContainer;\n\n if (isBrowserLess) {\n svg = doc.createElementNS('http://www.w3.org/2000/svg', 'svg');\n svg.setAttributeNS('http://www.w3.org/2000/svg', 'xlink', 'http://www.w3.org/1999/xlink');\n svg.setAttributeNS('http://www.w3.org/2000/svg', 'height', '0');\n svg.setAttributeNS('http://www.w3.org/2000/svg', 'width', '0');\n this.svgRoot = svg;\n this.rootNode.appendChild(svg);\n }\n}\n\nContainerManager.prototype.get = function (style) {\n var diff,\n key,\n containerObj,\n containers = this.containers,\n len = this.length,\n max = this.maxContainers,\n keyStr = '';\n\n for (key in slLib.supportedStyle) {\n if (style[key] !== undefined) {\n keyStr += slLib.supportedStyle[key] + ':' + style[key] + ';';\n }\n }\n\n if (!keyStr) {\n return false;\n }\n\n if (containerObj = containers[keyStr]) {\n if (this.first !== containerObj) {\n containerObj.prev && (containerObj.prev.next = containerObj.next);\n containerObj.next && (containerObj.next.prev = containerObj.prev);\n containerObj.next = this.first;\n containerObj.next.prev = containerObj;\n this.last === containerObj && (this.last = containerObj.prev);\n containerObj.prev = null;\n this.first = containerObj;\n }\n } else {\n if (len >= max) {\n diff = len - max + 1;\n // +1 is to remove an extra entry to make space for the new container to be added.\n while (diff--) {\n this.removeContainer(this.last);\n }\n }\n containerObj = this.addContainer(keyStr);\n }\n\n return containerObj;\n};\n\nContainerManager.prototype.addContainer = function (keyStr) {\n var node, container;\n\n this.containers[keyStr] = container = {\n next: null,\n prev: null,\n node: null,\n ellipsesWidth: 0,\n lineHeight: 0,\n dotWidth: 0,\n avgCharWidth: 4,\n keyStr: keyStr,\n charCache: {}\n };\n\n // Since the container objects are arranged from most recent to least recent order, we need to add the new\n // object at the beginning of the list.\n container.next = this.first;\n container.next && (container.next.prev = container);\n this.first = container;\n if (!this.last) {\n this.last = container;\n }\n this.length += 1;\n\n node = container.node = doc.createElement('div');\n this.rootNode.appendChild(node);\n\n if (documentSupport.isIE && !documentSupport.hasSVG) {\n node.style.setAttribute('cssText', keyStr);\n } else {\n node.setAttribute('style', keyStr);\n }\n\n node.setAttribute('aria-hidden', 'true');\n node.setAttribute('role', 'presentation');\n node.style.display = 'inline-block';\n\n node.innerHTML = slLib.testStrAvg; // A test string.\n container.lineHeight = node.offsetHeight;\n container.avgCharWidth = node.offsetWidth / 3;\n\n if (documentSupport.isBrowserLess) {\n node = container.svgText = doc.createElementNS('http://www.w3.org/2000/svg', 'text');\n node.setAttribute('style', keyStr);\n this.svgRoot.appendChild(node);\n\n node.textContent = slLib.testStrAvg; // A test string.\n container.lineHeight = node.getBBox().height;\n container.avgCharWidth = (node.getBBox().width - SVG_BBOX_CORRECTION) / 3;\n\n node.textContent = '...';\n container.ellipsesWidth = node.getBBox().width - SVG_BBOX_CORRECTION;\n node.textContent = '.';\n container.dotWidth = node.getBBox().width - SVG_BBOX_CORRECTION;\n } else {\n node.innerHTML = '...';\n container.ellipsesWidth = node.offsetWidth;\n node.innerHTML = '.';\n container.dotWidth = node.offsetWidth;\n node.innerHTML = '';\n }\n\n return container;\n};\n\nContainerManager.prototype.removeContainer = function (cObj) {\n var keyStr = cObj.keyStr;\n\n if (!keyStr || !this.length || !cObj) {\n return;\n }\n this.length -= 1;\n\n cObj.prev && (cObj.prev.next = cObj.next);\n cObj.next && (cObj.next.prev = cObj.prev);\n this.first === cObj && (this.first = cObj.next);\n this.last === cObj && (this.last = cObj.prev);\n\n cObj.node.parentNode.removeChild(cObj.node);\n\n delete this.containers[keyStr];\n};\n\nContainerManager.prototype.dispose = function () {\n var key,\n containers = this.containers;\n\n this.maxContainers = null;\n for (key in containers) {\n this.removeContainer(containers[key]);\n }\n\n this.rootNode.parentNode.removeChild(this.rootNode);\n\n this.rootNode = null;\n this.first = null;\n this.last = null;\n};\n\nmodule.exports = ContainerManager;","export default function(a, b) {\n return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","import ascending from \"./ascending\";\n\nexport default function(compare) {\n if (compare.length === 1) compare = ascendingComparator(compare);\n return {\n left: function(a, x, lo, hi) {\n if (lo == null) lo = 0;\n if (hi == null) hi = a.length;\n while (lo < hi) {\n var mid = lo + hi >>> 1;\n if (compare(a[mid], x) < 0) lo = mid + 1;\n else hi = mid;\n }\n return lo;\n },\n right: function(a, x, lo, hi) {\n if (lo == null) lo = 0;\n if (hi == null) hi = a.length;\n while (lo < hi) {\n var mid = lo + hi >>> 1;\n if (compare(a[mid], x) > 0) hi = mid;\n else lo = mid + 1;\n }\n return lo;\n }\n };\n}\n\nfunction ascendingComparator(f) {\n return function(d, x) {\n return ascending(f(d), x);\n };\n}\n","import ascending from \"./ascending\";\nimport bisector from \"./bisector\";\n\nvar ascendingBisect = bisector(ascending);\nexport var bisectRight = ascendingBisect.right;\nexport var bisectLeft = ascendingBisect.left;\nexport default bisectRight;\n","import {pair} from \"./pairs\";\n\nexport default function(values0, values1, reduce) {\n var n0 = values0.length,\n n1 = values1.length,\n values = new Array(n0 * n1),\n i0,\n i1,\n i,\n value0;\n\n if (reduce == null) reduce = pair;\n\n for (i0 = i = 0; i0 < n0; ++i0) {\n for (value0 = values0[i0], i1 = 0; i1 < n1; ++i1, ++i) {\n values[i] = reduce(value0, values1[i1]);\n }\n }\n\n return values;\n}\n","export default function(x) {\n return x === null ? NaN : +x;\n}\n","var array = Array.prototype;\n\nexport var slice = array.slice;\nexport var map = array.map;\n","export default function(start, stop, step) {\n start = +start, stop = +stop, step = (n = arguments.length) < 2 ? (stop = start, start = 0, 1) : n < 3 ? 1 : +step;\n\n var i = -1,\n n = Math.max(0, Math.ceil((stop - start) / step)) | 0,\n range = new Array(n);\n\n while (++i < n) {\n range[i] = start + i * step;\n }\n\n return range;\n}\n","var e10 = Math.sqrt(50),\n e5 = Math.sqrt(10),\n e2 = Math.sqrt(2);\n\nexport default function(start, stop, count) {\n var reverse,\n i = -1,\n n,\n ticks,\n step;\n\n stop = +stop, start = +start, count = +count;\n if (start === stop && count > 0) return [start];\n if (reverse = stop < start) n = start, start = stop, stop = n;\n if ((step = tickIncrement(start, stop, count)) === 0 || !isFinite(step)) return [];\n\n if (step > 0) {\n start = Math.ceil(start / step);\n stop = Math.floor(stop / step);\n ticks = new Array(n = Math.ceil(stop - start + 1));\n while (++i < n) ticks[i] = (start + i) * step;\n } else {\n start = Math.floor(start * step);\n stop = Math.ceil(stop * step);\n ticks = new Array(n = Math.ceil(start - stop + 1));\n while (++i < n) ticks[i] = (start - i) / step;\n }\n\n if (reverse) ticks.reverse();\n\n return ticks;\n}\n\nexport function tickIncrement(start, stop, count) {\n var step = (stop - start) / Math.max(0, count),\n power = Math.floor(Math.log(step) / Math.LN10),\n error = step / Math.pow(10, power);\n return power >= 0\n ? (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1) * Math.pow(10, power)\n : -Math.pow(10, -power) / (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1);\n}\n\nexport function tickStep(start, stop, count) {\n var step0 = Math.abs(stop - start) / Math.max(0, count),\n step1 = Math.pow(10, Math.floor(Math.log(step0) / Math.LN10)),\n error = step0 / step1;\n if (error >= e10) step1 *= 10;\n else if (error >= e5) step1 *= 5;\n else if (error >= e2) step1 *= 2;\n return stop < start ? -step1 : step1;\n}\n","export default function(values) {\n return Math.ceil(Math.log(values.length) / Math.LN2) + 1;\n}\n","import number from \"./number\";\n\nexport default function(values, p, valueof) {\n if (valueof == null) valueof = number;\n if (!(n = values.length)) return;\n if ((p = +p) <= 0 || n < 2) return +valueof(values[0], 0, values);\n if (p >= 1) return +valueof(values[n - 1], n - 1, values);\n var n,\n i = (n - 1) * p,\n i0 = Math.floor(i),\n value0 = +valueof(values[i0], i0, values),\n value1 = +valueof(values[i0 + 1], i0 + 1, values);\n return value0 + (value1 - value0) * (i - i0);\n}\n","export var prefix = \"$\";\n\nfunction Map() {}\n\nMap.prototype = map.prototype = {\n constructor: Map,\n has: function(key) {\n return (prefix + key) in this;\n },\n get: function(key) {\n return this[prefix + key];\n },\n set: function(key, value) {\n this[prefix + key] = value;\n return this;\n },\n remove: function(key) {\n var property = prefix + key;\n return property in this && delete this[property];\n },\n clear: function() {\n for (var property in this) if (property[0] === prefix) delete this[property];\n },\n keys: function() {\n var keys = [];\n for (var property in this) if (property[0] === prefix) keys.push(property.slice(1));\n return keys;\n },\n values: function() {\n var values = [];\n for (var property in this) if (property[0] === prefix) values.push(this[property]);\n return values;\n },\n entries: function() {\n var entries = [];\n for (var property in this) if (property[0] === prefix) entries.push({key: property.slice(1), value: this[property]});\n return entries;\n },\n size: function() {\n var size = 0;\n for (var property in this) if (property[0] === prefix) ++size;\n return size;\n },\n empty: function() {\n for (var property in this) if (property[0] === prefix) return false;\n return true;\n },\n each: function(f) {\n for (var property in this) if (property[0] === prefix) f(this[property], property.slice(1), this);\n }\n};\n\nfunction map(object, f) {\n var map = new Map;\n\n // Copy constructor.\n if (object instanceof Map) object.each(function(value, key) { map.set(key, value); });\n\n // Index array by numeric index or specified key function.\n else if (Array.isArray(object)) {\n var i = -1,\n n = object.length,\n o;\n\n if (f == null) while (++i < n) map.set(i, object[i]);\n else while (++i < n) map.set(f(o = object[i], i, object), o);\n }\n\n // Convert object to map.\n else if (object) for (var key in object) map.set(key, object[key]);\n\n return map;\n}\n\nexport default map;\n","import map from \"./map\";\n\nexport default function() {\n var keys = [],\n sortKeys = [],\n sortValues,\n rollup,\n nest;\n\n function apply(array, depth, createResult, setResult) {\n if (depth >= keys.length) {\n if (sortValues != null) array.sort(sortValues);\n return rollup != null ? rollup(array) : array;\n }\n\n var i = -1,\n n = array.length,\n key = keys[depth++],\n keyValue,\n value,\n valuesByKey = map(),\n values,\n result = createResult();\n\n while (++i < n) {\n if (values = valuesByKey.get(keyValue = key(value = array[i]) + \"\")) {\n values.push(value);\n } else {\n valuesByKey.set(keyValue, [value]);\n }\n }\n\n valuesByKey.each(function(values, key) {\n setResult(result, key, apply(values, depth, createResult, setResult));\n });\n\n return result;\n }\n\n function entries(map, depth) {\n if (++depth > keys.length) return map;\n var array, sortKey = sortKeys[depth - 1];\n if (rollup != null && depth >= keys.length) array = map.entries();\n else array = [], map.each(function(v, k) { array.push({key: k, values: entries(v, depth)}); });\n return sortKey != null ? array.sort(function(a, b) { return sortKey(a.key, b.key); }) : array;\n }\n\n return nest = {\n object: function(array) { return apply(array, 0, createObject, setObject); },\n map: function(array) { return apply(array, 0, createMap, setMap); },\n entries: function(array) { return entries(apply(array, 0, createMap, setMap), 0); },\n key: function(d) { keys.push(d); return nest; },\n sortKeys: function(order) { sortKeys[keys.length - 1] = order; return nest; },\n sortValues: function(order) { sortValues = order; return nest; },\n rollup: function(f) { rollup = f; return nest; }\n };\n}\n\nfunction createObject() {\n return {};\n}\n\nfunction setObject(object, key, value) {\n object[key] = value;\n}\n\nfunction createMap() {\n return map();\n}\n\nfunction setMap(map, key, value) {\n map.set(key, value);\n}\n","import {default as map, prefix} from \"./map\";\n\nfunction Set() {}\n\nvar proto = map.prototype;\n\nSet.prototype = set.prototype = {\n constructor: Set,\n has: proto.has,\n add: function(value) {\n value += \"\";\n this[prefix + value] = value;\n return this;\n },\n remove: proto.remove,\n clear: proto.clear,\n values: proto.keys,\n size: proto.size,\n empty: proto.empty,\n each: proto.each\n};\n\nfunction set(object, f) {\n var set = new Set;\n\n // Copy constructor.\n if (object instanceof Set) object.each(function(value) { set.add(value); });\n\n // Otherwise, assume it’s an array.\n else if (object) {\n var i = -1, n = object.length;\n if (f == null) while (++i < n) set.add(object[i]);\n else while (++i < n) set.add(f(object[i], i, object));\n }\n\n return set;\n}\n\nexport default set;\n","var array = Array.prototype;\n\nexport var map = array.map;\nexport var slice = array.slice;\n","import {map} from \"d3-collection\";\nimport {slice} from \"./array\";\n\nexport var implicit = {name: \"implicit\"};\n\nexport default function ordinal(range) {\n var index = map(),\n domain = [],\n unknown = implicit;\n\n range = range == null ? [] : slice.call(range);\n\n function scale(d) {\n var key = d + \"\", i = index.get(key);\n if (!i) {\n if (unknown !== implicit) return unknown;\n index.set(key, i = domain.push(d));\n }\n return range[(i - 1) % range.length];\n }\n\n scale.domain = function(_) {\n if (!arguments.length) return domain.slice();\n domain = [], index = map();\n var i = -1, n = _.length, d, key;\n while (++i < n) if (!index.has(key = (d = _[i]) + \"\")) index.set(key, domain.push(d));\n return scale;\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = slice.call(_), scale) : range.slice();\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n scale.copy = function() {\n return ordinal()\n .domain(domain)\n .range(range)\n .unknown(unknown);\n };\n\n return scale;\n}\n","import {range as sequence} from \"d3-array\";\nimport ordinal from \"./ordinal\";\n\nexport default function band() {\n var scale = ordinal().unknown(undefined),\n domain = scale.domain,\n ordinalRange = scale.range,\n range = [0, 1],\n step,\n bandwidth,\n round = false,\n paddingInner = 0,\n paddingOuter = 0,\n align = 0.5;\n\n delete scale.unknown;\n function rescale() {\n var n = domain().length,\n reverse = range[1] < range[0],\n start = range[reverse - 0],\n stop = range[1 - reverse];\n step = (stop - start) / Math.max(1, n - paddingInner + paddingOuter * 2);\n if (round) step = Math.floor(step);\n start += (stop - start - step * (n - paddingInner)) * align;\n bandwidth = step * (1 - paddingInner);\n if (round) start = Math.round(start), bandwidth = Math.round(bandwidth);\n var values = sequence(n).map(function(i) { return start + step * i; });\n return ordinalRange(reverse ? values.reverse() : values);\n }\n\n scale.domain = function(_) {\n return arguments.length ? (domain(_), rescale()) : domain();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = [+_[0], +_[1]], rescale()) : range.slice();\n };\n\n scale.rangeRound = function(_) {\n return range = [+_[0], +_[1]], round = true, rescale();\n };\n\n scale.bandwidth = function() {\n return bandwidth;\n };\n\n scale.step = function() {\n return step;\n };\n\n scale.round = function(_) {\n return arguments.length ? (round = !!_, rescale()) : round;\n };\n\n scale.padding = function(_) {\n return arguments.length ? (paddingInner = paddingOuter = Math.max(0, Math.min(1, _)), rescale()) : paddingInner;\n };\n\n scale.paddingInner = function(_) {\n return arguments.length ? (paddingInner = Math.max(0, Math.min(1, _)), rescale()) : paddingInner;\n };\n\n scale.paddingOuter = function(_) {\n return arguments.length ? (paddingOuter = Math.max(0, Math.min(1, _)), rescale()) : paddingOuter;\n };\n\n scale.align = function(_) {\n return arguments.length ? (align = Math.max(0, Math.min(1, _)), rescale()) : align;\n };\n\n scale.copy = function() {\n return band()\n .domain(domain())\n .range(range)\n .round(round)\n .paddingInner(paddingInner)\n .paddingOuter(paddingOuter)\n .align(align);\n };\n\n scale.invertExtent = function(r0, r1) {\n var lo = +r0,\n hi = arguments.length > 1 ? +r1 : lo,\n reverse = range[1] < range[0],\n values = reverse ? ordinalRange().reverse() : ordinalRange(),\n n = values.length - 1, a, b, t,\n hiIndex;\n values.push(values[n] + this.step());\n // order range inputs, bail if outside of scale range\n if (hi < lo) t = lo, lo = hi, hi = t;\n if (hi < values[0] || lo > range[1-reverse]) return undefined;\n\n // binary search to index into scale range\n a = Math.max(0, getClosestIndexOf(values, lo));\n hiIndex = getClosestIndexOf(values, hi);\n b = lo===hi ? a : Math.max(a, hiIndex - 1);\n\n // increment index a if lo is within padding gap\n // if (lo - values[a] > bandwidth + 1e-10) ++a;\n\n if (reverse) t = a, a = n - b, b = n - t; // map + swap\n return (a > b) ? undefined : domain().slice(a, b+1);\n };\n\n scale.invert = function (r0, r1) {\n var lo = +r0,\n hi = arguments.length > 1 ? +r1 : lo,\n reverse = range[1] < range[0],\n values = reverse ? ordinalRange().reverse() : ordinalRange(),\n n = values.length - 1,\n a,\n t;\n\n // order range inputs, bail if outside of scale range\n if (hi < lo) t = lo, lo = hi, hi = t;\n if (hi < values[0] || lo > range[1-reverse]) return undefined;\n\n // binary search to index into scale range\n a = Math.max(0, getClosestIndexOf(values, lo, 'left'));\n\n // increment index a if lo is within padding gap\n // if (lo - values[a] > bandwidth + 1e-10) ++a;\n\n return domain()[reverse ? n - a : a];\n }\n return rescale();\n}\n\nfunction pointish(scale) {\n var copy = scale.copy;\n\n scale.padding = scale.paddingOuter;\n delete scale.paddingInner;\n delete scale.paddingOuter;\n\n scale.copy = function() {\n return pointish(copy());\n };\n\n return scale;\n}\n\nexport function point() {\n return pointish(band().paddingInner(1));\n}\n\nfunction getClosestIndexOf (arr, value, side) {\n var low = 0,\n arrLen = arr.length,\n high = arrLen - 1,\n highVal,\n mid,\n d1,\n d2;\n\n while (low < high) {\n mid = Math.floor((low + high) / 2);\n d1 = Math.abs(arr[mid] - value);\n d2 = Math.abs(arr[mid + 1] - value);\n\n if (d2 <= d1) {\n low = mid + 1;\n }\n else {\n high = mid;\n }\n }\n\n if (!side) {\n return high;\n }\n\n highVal = arr[high];\n if (highVal === value) {\n return high;\n } else if (highVal > value) {\n if (high === 0) { return high; }\n return side === 'left'? high - 1 : high;\n } else {\n if (high === arr.length - 1) { return high; }\n return side === 'left'? high : high + 1;\n }\n}","export default function(constructor, factory, prototype) {\n constructor.prototype = factory.prototype = prototype;\n prototype.constructor = constructor;\n}\n\nexport function extend(parent, definition) {\n var prototype = Object.create(parent.prototype);\n for (var key in definition) prototype[key] = definition[key];\n return prototype;\n}\n","import define, {extend} from \"./define\";\n\nexport function Color() {}\n\nexport var darker = 0.7;\nexport var brighter = 1 / darker;\n\nvar reI = \"\\\\s*([+-]?\\\\d+)\\\\s*\",\n reN = \"\\\\s*([+-]?\\\\d*\\\\.?\\\\d+(?:[eE][+-]?\\\\d+)?)\\\\s*\",\n reP = \"\\\\s*([+-]?\\\\d*\\\\.?\\\\d+(?:[eE][+-]?\\\\d+)?)%\\\\s*\",\n reHex3 = /^#([0-9a-f]{3})$/,\n reHex6 = /^#([0-9a-f]{6})$/,\n reRgbInteger = new RegExp(\"^rgb\\\\(\" + [reI, reI, reI] + \"\\\\)$\"),\n reRgbPercent = new RegExp(\"^rgb\\\\(\" + [reP, reP, reP] + \"\\\\)$\"),\n reRgbaInteger = new RegExp(\"^rgba\\\\(\" + [reI, reI, reI, reN] + \"\\\\)$\"),\n reRgbaPercent = new RegExp(\"^rgba\\\\(\" + [reP, reP, reP, reN] + \"\\\\)$\"),\n reHslPercent = new RegExp(\"^hsl\\\\(\" + [reN, reP, reP] + \"\\\\)$\"),\n reHslaPercent = new RegExp(\"^hsla\\\\(\" + [reN, reP, reP, reN] + \"\\\\)$\");\n\nvar 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\ndefine(Color, color, {\n displayable: function() {\n return this.rgb().displayable();\n },\n hex: function() {\n return this.rgb().hex();\n },\n toString: function() {\n return this.rgb() + \"\";\n }\n});\n\nexport default function color(format) {\n var m;\n format = (format + \"\").trim().toLowerCase();\n return (m = reHex3.exec(format)) ? (m = parseInt(m[1], 16), new Rgb((m >> 8 & 0xf) | (m >> 4 & 0x0f0), (m >> 4 & 0xf) | (m & 0xf0), ((m & 0xf) << 4) | (m & 0xf), 1)) // #f00\n : (m = reHex6.exec(format)) ? rgbn(parseInt(m[1], 16)) // #ff0000\n : (m = reRgbInteger.exec(format)) ? new Rgb(m[1], m[2], m[3], 1) // rgb(255, 0, 0)\n : (m = reRgbPercent.exec(format)) ? new Rgb(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, 1) // rgb(100%, 0%, 0%)\n : (m = reRgbaInteger.exec(format)) ? rgba(m[1], m[2], m[3], m[4]) // rgba(255, 0, 0, 1)\n : (m = reRgbaPercent.exec(format)) ? rgba(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, m[4]) // rgb(100%, 0%, 0%, 1)\n : (m = reHslPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, 1) // hsl(120, 50%, 50%)\n : (m = reHslaPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, m[4]) // hsla(120, 50%, 50%, 1)\n : named.hasOwnProperty(format) ? rgbn(named[format])\n : format === \"transparent\" ? new Rgb(NaN, NaN, NaN, 0)\n : null;\n}\n\nfunction rgbn(n) {\n return new Rgb(n >> 16 & 0xff, n >> 8 & 0xff, n & 0xff, 1);\n}\n\nfunction rgba(r, g, b, a) {\n if (a <= 0) r = g = b = NaN;\n return new Rgb(r, g, b, a);\n}\n\nexport function rgbConvert(o) {\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Rgb;\n o = o.rgb();\n return new Rgb(o.r, o.g, o.b, o.opacity);\n}\n\nexport function rgb(r, g, b, opacity) {\n return arguments.length === 1 ? rgbConvert(r) : new Rgb(r, g, b, opacity == null ? 1 : opacity);\n}\n\nexport function Rgb(r, g, b, opacity) {\n this.r = +r;\n this.g = +g;\n this.b = +b;\n this.opacity = +opacity;\n}\n\ndefine(Rgb, rgb, extend(Color, {\n 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, this.opacity);\n },\n 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, this.opacity);\n },\n rgb: function() {\n return this;\n },\n 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 && (0 <= this.opacity && this.opacity <= 1);\n },\n hex: function() {\n return \"#\" + hex(this.r) + hex(this.g) + hex(this.b);\n },\n toString: function() {\n var a = this.opacity; a = isNaN(a) ? 1 : Math.max(0, Math.min(1, a));\n return (a === 1 ? \"rgb(\" : \"rgba(\")\n + Math.max(0, Math.min(255, Math.round(this.r) || 0)) + \", \"\n + Math.max(0, Math.min(255, Math.round(this.g) || 0)) + \", \"\n + Math.max(0, Math.min(255, Math.round(this.b) || 0))\n + (a === 1 ? \")\" : \", \" + a + \")\");\n }\n}));\n\nfunction hex(value) {\n value = Math.max(0, Math.min(255, Math.round(value) || 0));\n return (value < 16 ? \"0\" : \"\") + value.toString(16);\n}\n\nfunction hsla(h, s, l, a) {\n if (a <= 0) h = s = l = NaN;\n else if (l <= 0 || l >= 1) h = s = NaN;\n else if (s <= 0) h = NaN;\n return new Hsl(h, s, l, a);\n}\n\nexport function hslConvert(o) {\n if (o instanceof Hsl) return new Hsl(o.h, o.s, o.l, o.opacity);\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Hsl;\n if (o instanceof Hsl) return o;\n o = o.rgb();\n var r = o.r / 255,\n g = o.g / 255,\n b = o.b / 255,\n min = Math.min(r, g, b),\n max = Math.max(r, g, b),\n h = NaN,\n s = max - min,\n l = (max + min) / 2;\n if (s) {\n if (r === max) h = (g - b) / s + (g < b) * 6;\n else if (g === max) h = (b - r) / s + 2;\n else h = (r - g) / s + 4;\n s /= l < 0.5 ? max + min : 2 - max - min;\n h *= 60;\n } else {\n s = l > 0 && l < 1 ? 0 : h;\n }\n return new Hsl(h, s, l, o.opacity);\n}\n\nexport function hsl(h, s, l, opacity) {\n return arguments.length === 1 ? hslConvert(h) : new Hsl(h, s, l, opacity == null ? 1 : opacity);\n}\n\nfunction Hsl(h, s, l, opacity) {\n this.h = +h;\n this.s = +s;\n this.l = +l;\n this.opacity = +opacity;\n}\n\ndefine(Hsl, hsl, extend(Color, {\n brighter: function(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n darker: function(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n 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 < 0.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 this.opacity\n );\n },\n displayable: function() {\n return (0 <= this.s && this.s <= 1 || isNaN(this.s))\n && (0 <= this.l && this.l <= 1)\n && (0 <= this.opacity && this.opacity <= 1);\n }\n}));\n\n/* From FvD 13.37, CSS Color Module Level 3 */\nfunction 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","export var deg2rad = Math.PI / 180;\nexport var rad2deg = 180 / Math.PI;\n","import define, {extend} from \"./define\";\nimport {Color, rgbConvert, Rgb} from \"./color\";\nimport {deg2rad, rad2deg} from \"./math\";\n\n// https://beta.observablehq.com/@mbostock/lab-and-rgb\nvar K = 18,\n Xn = 0.96422,\n Yn = 1,\n Zn = 0.82521,\n t0 = 4 / 29,\n t1 = 6 / 29,\n t2 = 3 * t1 * t1,\n t3 = t1 * t1 * t1;\n\nfunction labConvert(o) {\n if (o instanceof Lab) return new Lab(o.l, o.a, o.b, o.opacity);\n if (o instanceof Hcl) {\n if (isNaN(o.h)) return new Lab(o.l, 0, 0, o.opacity);\n var h = o.h * deg2rad;\n return new Lab(o.l, Math.cos(h) * o.c, Math.sin(h) * o.c, o.opacity);\n }\n if (!(o instanceof Rgb)) o = rgbConvert(o);\n var r = rgb2lrgb(o.r),\n g = rgb2lrgb(o.g),\n b = rgb2lrgb(o.b),\n y = xyz2lab((0.2225045 * r + 0.7168786 * g + 0.0606169 * b) / Yn), x, z;\n if (r === g && g === b) x = z = y; else {\n x = xyz2lab((0.4360747 * r + 0.3850649 * g + 0.1430804 * b) / Xn);\n z = xyz2lab((0.0139322 * r + 0.0971045 * g + 0.7141733 * b) / Zn);\n }\n return new Lab(116 * y - 16, 500 * (x - y), 200 * (y - z), o.opacity);\n}\n\nexport function gray(l, opacity) {\n return new Lab(l, 0, 0, opacity == null ? 1 : opacity);\n}\n\nexport default function lab(l, a, b, opacity) {\n return arguments.length === 1 ? labConvert(l) : new Lab(l, a, b, opacity == null ? 1 : opacity);\n}\n\nexport function Lab(l, a, b, opacity) {\n this.l = +l;\n this.a = +a;\n this.b = +b;\n this.opacity = +opacity;\n}\n\ndefine(Lab, lab, extend(Color, {\n brighter: function(k) {\n return new Lab(this.l + K * (k == null ? 1 : k), this.a, this.b, this.opacity);\n },\n darker: function(k) {\n return new Lab(this.l - K * (k == null ? 1 : k), this.a, this.b, this.opacity);\n },\n 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 x = Xn * lab2xyz(x);\n y = Yn * lab2xyz(y);\n z = Zn * lab2xyz(z);\n return new Rgb(\n lrgb2rgb( 3.1338561 * x - 1.6168667 * y - 0.4906146 * z),\n lrgb2rgb(-0.9787684 * x + 1.9161415 * y + 0.0334540 * z),\n lrgb2rgb( 0.0719453 * x - 0.2289914 * y + 1.4052427 * z),\n this.opacity\n );\n }\n}));\n\nfunction xyz2lab(t) {\n return t > t3 ? Math.pow(t, 1 / 3) : t / t2 + t0;\n}\n\nfunction lab2xyz(t) {\n return t > t1 ? t * t * t : t2 * (t - t0);\n}\n\nfunction lrgb2rgb(x) {\n return 255 * (x <= 0.0031308 ? 12.92 * x : 1.055 * Math.pow(x, 1 / 2.4) - 0.055);\n}\n\nfunction rgb2lrgb(x) {\n return (x /= 255) <= 0.04045 ? x / 12.92 : Math.pow((x + 0.055) / 1.055, 2.4);\n}\n\nfunction hclConvert(o) {\n if (o instanceof Hcl) return new Hcl(o.h, o.c, o.l, o.opacity);\n if (!(o instanceof Lab)) o = labConvert(o);\n if (o.a === 0 && o.b === 0) return new Hcl(NaN, 0, o.l, o.opacity);\n var h = Math.atan2(o.b, o.a) * rad2deg;\n return new Hcl(h < 0 ? h + 360 : h, Math.sqrt(o.a * o.a + o.b * o.b), o.l, o.opacity);\n}\n\nexport function lch(l, c, h, opacity) {\n return arguments.length === 1 ? hclConvert(l) : new Hcl(h, c, l, opacity == null ? 1 : opacity);\n}\n\nexport function hcl(h, c, l, opacity) {\n return arguments.length === 1 ? hclConvert(h) : new Hcl(h, c, l, opacity == null ? 1 : opacity);\n}\n\nexport function Hcl(h, c, l, opacity) {\n this.h = +h;\n this.c = +c;\n this.l = +l;\n this.opacity = +opacity;\n}\n\ndefine(Hcl, hcl, extend(Color, {\n brighter: function(k) {\n return new Hcl(this.h, this.c, this.l + K * (k == null ? 1 : k), this.opacity);\n },\n darker: function(k) {\n return new Hcl(this.h, this.c, this.l - K * (k == null ? 1 : k), this.opacity);\n },\n rgb: function() {\n return labConvert(this).rgb();\n }\n}));\n","import define, {extend} from \"./define\";\nimport {Color, rgbConvert, Rgb, darker, brighter} from \"./color\";\nimport {deg2rad, rad2deg} from \"./math\";\n\nvar A = -0.14861,\n B = +1.78277,\n C = -0.29227,\n D = -0.90649,\n E = +1.97294,\n ED = E * D,\n EB = E * B,\n BC_DA = B * C - D * A;\n\nfunction cubehelixConvert(o) {\n if (o instanceof Cubehelix) return new Cubehelix(o.h, o.s, o.l, o.opacity);\n if (!(o instanceof Rgb)) o = rgbConvert(o);\n var r = o.r / 255,\n g = o.g / 255,\n b = o.b / 255,\n l = (BC_DA * b + ED * r - EB * g) / (BC_DA + ED - EB),\n bl = b - l,\n 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 return new Cubehelix(h < 0 ? h + 360 : h, s, l, o.opacity);\n}\n\nexport default function cubehelix(h, s, l, opacity) {\n return arguments.length === 1 ? cubehelixConvert(h) : new Cubehelix(h, s, l, opacity == null ? 1 : opacity);\n}\n\nexport function Cubehelix(h, s, l, opacity) {\n this.h = +h;\n this.s = +s;\n this.l = +l;\n this.opacity = +opacity;\n}\n\ndefine(Cubehelix, cubehelix, extend(Color, {\n brighter: function(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Cubehelix(this.h, this.s, this.l * k, this.opacity);\n },\n darker: function(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Cubehelix(this.h, this.s, this.l * k, this.opacity);\n },\n 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 this.opacity\n );\n }\n}));\n","export function basis(t1, v0, v1, v2, v3) {\n var t2 = t1 * t1, t3 = t2 * t1;\n return ((1 - 3 * t1 + 3 * t2 - t3) * v0\n + (4 - 6 * t2 + 3 * t3) * v1\n + (1 + 3 * t1 + 3 * t2 - 3 * t3) * v2\n + t3 * v3) / 6;\n}\n\nexport default function(values) {\n var n = values.length - 1;\n return function(t) {\n var i = t <= 0 ? (t = 0) : t >= 1 ? (t = 1, n - 1) : Math.floor(t * n),\n v1 = values[i],\n v2 = values[i + 1],\n v0 = i > 0 ? values[i - 1] : 2 * v1 - v2,\n v3 = i < n - 1 ? values[i + 2] : 2 * v2 - v1;\n return basis((t - i / n) * n, v0, v1, v2, v3);\n };\n}\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","import constant from \"./constant\";\n\nfunction linear(a, d) {\n return function(t) {\n return a + t * d;\n };\n}\n\nfunction exponential(a, b, y) {\n return a = Math.pow(a, y), b = Math.pow(b, y) - a, y = 1 / y, function(t) {\n return Math.pow(a + t * b, y);\n };\n}\n\nexport function hue(a, b) {\n var d = b - a;\n return d ? linear(a, d > 180 || d < -180 ? d - 360 * Math.round(d / 360) : d) : constant(isNaN(a) ? b : a);\n}\n\nexport function gamma(y) {\n return (y = +y) === 1 ? nogamma : function(a, b) {\n return b - a ? exponential(a, b, y) : constant(isNaN(a) ? b : a);\n };\n}\n\nexport default function nogamma(a, b) {\n var d = b - a;\n return d ? linear(a, d) : constant(isNaN(a) ? b : a);\n}\n","import {rgb as colorRgb} from \"d3-color\";\nimport basis from \"./basis\";\nimport basisClosed from \"./basisClosed\";\nimport nogamma, {gamma} from \"./color\";\n\nexport default (function rgbGamma(y) {\n var color = gamma(y);\n\n function rgb(start, end) {\n var r = color((start = colorRgb(start)).r, (end = colorRgb(end)).r),\n g = color(start.g, end.g),\n b = color(start.b, end.b),\n opacity = nogamma(start.opacity, end.opacity);\n return function(t) {\n start.r = r(t);\n start.g = g(t);\n start.b = b(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n\n rgb.gamma = rgbGamma;\n\n return rgb;\n})(1);\n\nfunction rgbSpline(spline) {\n return function(colors) {\n var n = colors.length,\n r = new Array(n),\n g = new Array(n),\n b = new Array(n),\n i, color;\n for (i = 0; i < n; ++i) {\n color = colorRgb(colors[i]);\n r[i] = color.r || 0;\n g[i] = color.g || 0;\n b[i] = color.b || 0;\n }\n r = spline(r);\n g = spline(g);\n b = spline(b);\n color.opacity = 1;\n return function(t) {\n color.r = r(t);\n color.g = g(t);\n color.b = b(t);\n return color + \"\";\n };\n };\n}\n\nexport var rgbBasis = rgbSpline(basis);\nexport var rgbBasisClosed = rgbSpline(basisClosed);\n","export default function(a, b) {\n return a = +a, b -= a, function(t) {\n return a + b * t;\n };\n}\n","import {basis} from \"./basis\";\n\nexport default function(values) {\n var n = values.length;\n return function(t) {\n var i = Math.floor(((t %= 1) < 0 ? ++t : t) * n),\n v0 = values[(i + n - 1) % n],\n v1 = values[i % n],\n v2 = values[(i + 1) % n],\n v3 = values[(i + 2) % n];\n return basis((t - i / n) * n, v0, v1, v2, v3);\n };\n}\n","import number from \"./number\";\n\nvar reA = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n reB = new RegExp(reA.source, \"g\");\n\nfunction zero(b) {\n return function() {\n return b;\n };\n}\n\nfunction one(b) {\n return function(t) {\n return b(t) + \"\";\n };\n}\n\nexport default function(a, b) {\n var bi = reA.lastIndex = reB.lastIndex = 0, // scan index for next number in b\n am, // current match in a\n bm, // current match in b\n bs, // string preceding current number in b, if any\n i = -1, // index in s\n s = [], // string constants and placeholders\n q = []; // number interpolators\n\n // Coerce inputs to strings.\n a = a + \"\", b = b + \"\";\n\n // Interpolate pairs of numbers in a & b.\n while ((am = reA.exec(a))\n && (bm = reB.exec(b))) {\n if ((bs = bm.index) > bi) { // a string precedes the next number in b\n bs = b.slice(bi, bs);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n if ((am = am[0]) === (bm = bm[0])) { // numbers in a & b match\n if (s[i]) s[i] += bm; // coalesce with previous string\n else s[++i] = bm;\n } else { // interpolate non-matching numbers\n s[++i] = null;\n q.push({i: i, x: number(am, bm)});\n }\n bi = reB.lastIndex;\n }\n\n // Add remains of b.\n if (bi < b.length) {\n bs = b.slice(bi);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n\n // Special optimization for only a single match.\n // Otherwise, interpolate each of the numbers and rejoin the string.\n return s.length < 2 ? (q[0]\n ? one(q[0].x)\n : zero(b))\n : (b = q.length, function(t) {\n for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t);\n return s.join(\"\");\n });\n}\n","import decompose, {identity} from \"./decompose\";\n\nvar cssNode,\n cssRoot,\n cssView,\n svgNode;\n\nexport function parseCss(value) {\n if (value === \"none\") return identity;\n if (!cssNode) cssNode = document.createElement(\"DIV\"), cssRoot = document.documentElement, cssView = document.defaultView;\n cssNode.style.transform = value;\n value = cssView.getComputedStyle(cssRoot.appendChild(cssNode), null).getPropertyValue(\"transform\");\n cssRoot.removeChild(cssNode);\n value = value.slice(7, -1).split(\",\");\n return decompose(+value[0], +value[1], +value[2], +value[3], +value[4], +value[5]);\n}\n\nexport function parseSvg(value) {\n if (value == null) return identity;\n if (!svgNode) svgNode = document.createElementNS(\"http://www.w3.org/2000/svg\", \"g\");\n svgNode.setAttribute(\"transform\", value);\n if (!(value = svgNode.transform.baseVal.consolidate())) return identity;\n value = value.matrix;\n return decompose(value.a, value.b, value.c, value.d, value.e, value.f);\n}\n","import {color} from \"d3-color\";\nimport rgb from \"./rgb\";\nimport array from \"./array\";\nimport date from \"./date\";\nimport number from \"./number\";\nimport object from \"./object\";\nimport string from \"./string\";\nimport constant from \"./constant\";\n\nexport default function(a, b) {\n var t = typeof b, c;\n return b == null || t === \"boolean\" ? constant(b)\n : (t === \"number\" ? number\n : t === \"string\" ? ((c = color(b)) ? (b = c, rgb) : string)\n : b instanceof color ? rgb\n : b instanceof Date ? date\n : Array.isArray(b) ? array\n : typeof b.valueOf !== \"function\" && typeof b.toString !== \"function\" || isNaN(b) ? object\n : number)(a, b);\n}\n","export default function(a, b) {\n var d = new Date;\n return a = +a, b -= a, function(t) {\n return d.setTime(a + b * t), d;\n };\n}\n","import value from \"./value\";\n\nexport default function(a, b) {\n var nb = b ? b.length : 0,\n na = a ? Math.min(nb, a.length) : 0,\n x = new Array(na),\n c = new Array(nb),\n i;\n\n for (i = 0; i < na; ++i) x[i] = value(a[i], b[i]);\n for (; i < nb; ++i) c[i] = b[i];\n\n return function(t) {\n for (i = 0; i < na; ++i) c[i] = x[i](t);\n return c;\n };\n}\n","import value from \"./value\";\n\nexport default function(a, b) {\n var i = {},\n c = {},\n k;\n\n if (a === null || typeof a !== \"object\") a = {};\n if (b === null || typeof b !== \"object\") b = {};\n\n for (k in b) {\n if (k in a) {\n i[k] = value(a[k], b[k]);\n } else {\n c[k] = b[k];\n }\n }\n\n return function(t) {\n for (k in i) c[k] = i[k](t);\n return c;\n };\n}\n","export default function(a, b) {\n return a = +a, b -= a, function(t) {\n return Math.round(a + b * t);\n };\n}\n","var degrees = 180 / Math.PI;\n\nexport var identity = {\n translateX: 0,\n translateY: 0,\n rotate: 0,\n skewX: 0,\n scaleX: 1,\n scaleY: 1\n};\n\nexport default function(a, b, c, d, e, f) {\n var scaleX, scaleY, skewX;\n if (scaleX = Math.sqrt(a * a + b * b)) a /= scaleX, b /= scaleX;\n if (skewX = a * c + b * d) c -= a * skewX, d -= b * skewX;\n if (scaleY = Math.sqrt(c * c + d * d)) c /= scaleY, d /= scaleY, skewX /= scaleY;\n if (a * d < b * c) a = -a, b = -b, skewX = -skewX, scaleX = -scaleX;\n return {\n translateX: e,\n translateY: f,\n rotate: Math.atan2(b, a) * degrees,\n skewX: Math.atan(skewX) * degrees,\n scaleX: scaleX,\n scaleY: scaleY\n };\n}\n","import number from \"../number\";\nimport {parseCss, parseSvg} from \"./parse\";\n\nfunction interpolateTransform(parse, pxComma, pxParen, degParen) {\n\n function pop(s) {\n return s.length ? s.pop() + \" \" : \"\";\n }\n\n function translate(xa, ya, xb, yb, s, q) {\n if (xa !== xb || ya !== yb) {\n var i = s.push(\"translate(\", null, pxComma, null, pxParen);\n q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\n } else if (xb || yb) {\n s.push(\"translate(\" + xb + pxComma + yb + pxParen);\n }\n }\n\n function rotate(a, b, s, q) {\n if (a !== b) {\n if (a - b > 180) b += 360; else if (b - a > 180) a += 360; // shortest path\n q.push({i: s.push(pop(s) + \"rotate(\", null, degParen) - 2, x: number(a, b)});\n } else if (b) {\n s.push(pop(s) + \"rotate(\" + b + degParen);\n }\n }\n\n function skewX(a, b, s, q) {\n if (a !== b) {\n q.push({i: s.push(pop(s) + \"skewX(\", null, degParen) - 2, x: number(a, b)});\n } else if (b) {\n s.push(pop(s) + \"skewX(\" + b + degParen);\n }\n }\n\n function scale(xa, ya, xb, yb, s, q) {\n if (xa !== xb || ya !== yb) {\n var i = s.push(pop(s) + \"scale(\", null, \",\", null, \")\");\n q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\n } else if (xb !== 1 || yb !== 1) {\n s.push(pop(s) + \"scale(\" + xb + \",\" + yb + \")\");\n }\n }\n\n return function(a, b) {\n var s = [], // string constants and placeholders\n q = []; // number interpolators\n a = parse(a), b = parse(b);\n translate(a.translateX, a.translateY, b.translateX, b.translateY, s, q);\n rotate(a.rotate, b.rotate, s, q);\n skewX(a.skewX, b.skewX, s, q);\n scale(a.scaleX, a.scaleY, b.scaleX, b.scaleY, s, q);\n a = b = null; // gc\n return function(t) {\n var i = -1, n = q.length, o;\n while (++i < n) s[(o = q[i]).i] = o.x(t);\n return s.join(\"\");\n };\n };\n}\n\nexport var interpolateTransformCss = interpolateTransform(parseCss, \"px, \", \"px)\", \"deg)\");\nexport var interpolateTransformSvg = interpolateTransform(parseSvg, \", \", \")\", \")\");\n","var rho = Math.SQRT2,\n rho2 = 2,\n rho4 = 4,\n epsilon2 = 1e-12;\n\nfunction cosh(x) {\n return ((x = Math.exp(x)) + 1 / x) / 2;\n}\n\nfunction sinh(x) {\n return ((x = Math.exp(x)) - 1 / x) / 2;\n}\n\nfunction tanh(x) {\n return ((x = Math.exp(2 * x)) - 1) / (x + 1);\n}\n\n// p0 = [ux0, uy0, w0]\n// p1 = [ux1, uy1, w1]\nexport default function(p0, p1) {\n var ux0 = p0[0], uy0 = p0[1], w0 = p0[2],\n ux1 = p1[0], uy1 = p1[1], w1 = p1[2],\n dx = ux1 - ux0,\n dy = uy1 - uy0,\n d2 = dx * dx + dy * dy,\n i,\n S;\n\n // Special case for u0 ≅ u1.\n if (d2 < epsilon2) {\n S = Math.log(w1 / w0) / rho;\n i = function(t) {\n return [\n ux0 + t * dx,\n uy0 + t * dy,\n w0 * Math.exp(rho * t * S)\n ];\n }\n }\n\n // General case.\n else {\n var d1 = Math.sqrt(d2),\n b0 = (w1 * w1 - w0 * w0 + rho4 * d2) / (2 * w0 * rho2 * d1),\n b1 = (w1 * w1 - w0 * w0 - rho4 * d2) / (2 * w1 * rho2 * d1),\n r0 = Math.log(Math.sqrt(b0 * b0 + 1) - b0),\n r1 = Math.log(Math.sqrt(b1 * b1 + 1) - b1);\n S = (r1 - r0) / rho;\n i = function(t) {\n var s = t * S,\n coshr0 = cosh(r0),\n u = w0 / (rho2 * d1) * (coshr0 * tanh(rho * s + r0) - sinh(r0));\n return [\n ux0 + u * dx,\n uy0 + u * dy,\n w0 * coshr0 / cosh(rho * s + r0)\n ];\n }\n }\n\n i.duration = S * 1000;\n\n return i;\n}\n","import {hsl as colorHsl} from \"d3-color\";\nimport color, {hue} from \"./color\";\n\nfunction hsl(hue) {\n return function(start, end) {\n var h = hue((start = colorHsl(start)).h, (end = colorHsl(end)).h),\n s = color(start.s, end.s),\n l = color(start.l, end.l),\n opacity = color(start.opacity, end.opacity);\n return function(t) {\n start.h = h(t);\n start.s = s(t);\n start.l = l(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n}\n\nexport default hsl(hue);\nexport var hslLong = hsl(color);\n","import {hcl as colorHcl} from \"d3-color\";\nimport color, {hue} from \"./color\";\n\nfunction hcl(hue) {\n return function(start, end) {\n var h = hue((start = colorHcl(start)).h, (end = colorHcl(end)).h),\n c = color(start.c, end.c),\n l = color(start.l, end.l),\n opacity = color(start.opacity, end.opacity);\n return function(t) {\n start.h = h(t);\n start.c = c(t);\n start.l = l(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n}\n\nexport default hcl(hue);\nexport var hclLong = hcl(color);\n","import {cubehelix as colorCubehelix} from \"d3-color\";\nimport color, {hue} from \"./color\";\n\nfunction cubehelix(hue) {\n return (function cubehelixGamma(y) {\n y = +y;\n\n function cubehelix(start, end) {\n var h = hue((start = colorCubehelix(start)).h, (end = colorCubehelix(end)).h),\n s = color(start.s, end.s),\n l = color(start.l, end.l),\n opacity = color(start.opacity, end.opacity);\n return function(t) {\n start.h = h(t);\n start.s = s(t);\n start.l = l(Math.pow(t, y));\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n\n cubehelix.gamma = cubehelixGamma;\n\n return cubehelix;\n })(1);\n}\n\nexport default cubehelix(hue);\nexport var cubehelixLong = cubehelix(color);\n","export default function piecewise(interpolate, values) {\n var i = 0, n = values.length - 1, v = values[0], I = new Array(n < 0 ? 0 : n);\n while (i < n) I[i] = interpolate(v, v = values[++i]);\n return function(t) {\n var i = Math.max(0, Math.min(n - 1, Math.floor(t *= n)));\n return I[i](t - i);\n };\n}\n","export default function(interpolator, n) {\n var samples = new Array(n);\n for (var i = 0; i < n; ++i) samples[i] = interpolator(i / (n - 1));\n return samples;\n}\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","export default function(x) {\n return +x;\n}\n","import {bisect} from \"d3-array\";\nimport {interpolate as interpolateValue, interpolateRound} from \"d3-interpolate\";\nimport {map, slice} from \"./array\";\nimport constant from \"./constant\";\nimport number from \"./number\";\n\nvar unit = [0, 1];\n\nexport function deinterpolateLinear(a, b) {\n return (b -= (a = +a))\n ? function(x) { return (x - a) / b; }\n : constant(b);\n}\n\nfunction deinterpolateClamp(deinterpolate) {\n return function(a, b) {\n var d = deinterpolate(a = +a, b = +b);\n return function(x) { return x <= a ? 0 : x >= b ? 1 : d(x); };\n };\n}\n\nfunction reinterpolateClamp(reinterpolate) {\n return function(a, b) {\n var r = reinterpolate(a = +a, b = +b);\n return function(t) { return t <= 0 ? a : t >= 1 ? b : r(t); };\n };\n}\n\nfunction bimap(domain, range, deinterpolate, reinterpolate) {\n var d0 = domain[0], d1 = domain[1], r0 = range[0], r1 = range[1];\n if (d1 < d0) d0 = deinterpolate(d1, d0), r0 = reinterpolate(r1, r0);\n else d0 = deinterpolate(d0, d1), r0 = reinterpolate(r0, r1);\n return function(x) { return r0(d0(x)); };\n}\n\nfunction polymap(domain, range, deinterpolate, reinterpolate) {\n var j = Math.min(domain.length, range.length) - 1,\n d = new Array(j),\n r = new Array(j),\n i = -1;\n\n // Reverse descending domains.\n if (domain[j] < domain[0]) {\n domain = domain.slice().reverse();\n range = range.slice().reverse();\n }\n\n while (++i < j) {\n d[i] = deinterpolate(domain[i], domain[i + 1]);\n r[i] = reinterpolate(range[i], range[i + 1]);\n }\n\n return function(x) {\n var i = bisect(domain, x, 1, j) - 1;\n return r[i](d[i](x));\n };\n}\n\nexport function copy(source, target) {\n return target\n .domain(source.domain())\n .range(source.range())\n .interpolate(source.interpolate())\n .clamp(source.clamp());\n}\n\n// deinterpolate(a, b)(x) takes a domain value x in [a,b] and returns the corresponding parameter t in [0,1].\n// reinterpolate(a, b)(t) takes a parameter t in [0,1] and returns the corresponding domain value x in [a,b].\nexport default function continuous(deinterpolate, reinterpolate) {\n var domain = unit,\n range = unit,\n interpolate = interpolateValue,\n clamp = false,\n piecewise,\n output,\n input;\n\n function rescale() {\n piecewise = Math.min(domain.length, range.length) > 2 ? polymap : bimap;\n output = input = null;\n return scale;\n }\n\n function scale(x) {\n return (output || (output = piecewise(domain, range, clamp ? deinterpolateClamp(deinterpolate) : deinterpolate, interpolate)))(+x);\n }\n\n scale.invert = function(y) {\n return (input || (input = piecewise(range, domain, deinterpolateLinear, clamp ? reinterpolateClamp(reinterpolate) : reinterpolate)))(+y);\n };\n\n scale.domain = function(_) {\n return arguments.length ? (domain = map.call(_, number), rescale()) : domain.slice();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = slice.call(_), rescale()) : range.slice();\n };\n\n scale.rangeRound = function(_) {\n return range = slice.call(_), interpolate = interpolateRound, rescale();\n };\n\n scale.clamp = function(_) {\n return arguments.length ? (clamp = !!_, rescale()) : clamp;\n };\n\n scale.interpolate = function(_) {\n return arguments.length ? (interpolate = _, rescale()) : interpolate;\n };\n\n return rescale();\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].\nexport default function(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","import formatDecimal from \"./formatDecimal\";\n\nexport default function(x) {\n return x = formatDecimal(Math.abs(x)), x ? x[1] : NaN;\n}\n","// [[fill]align][sign][symbol][0][width][,][.precision][~][type]\nvar re = /^(?:(.)?([<>=^]))?([+\\-( ])?([$#])?(0)?(\\d+)?(,)?(\\.\\d+)?(~)?([a-z%])?$/i;\n\nexport default function formatSpecifier(specifier) {\n return new FormatSpecifier(specifier);\n}\n\nformatSpecifier.prototype = FormatSpecifier.prototype; // instanceof\n\nfunction FormatSpecifier(specifier) {\n if (!(match = re.exec(specifier))) throw new Error(\"invalid format: \" + specifier);\n var match;\n this.fill = match[1] || \" \";\n this.align = match[2] || \">\";\n this.sign = match[3] || \"-\";\n this.symbol = match[4] || \"\";\n this.zero = !!match[5];\n this.width = match[6] && +match[6];\n this.comma = !!match[7];\n this.precision = match[8] && +match[8].slice(1);\n this.trim = !!match[9];\n this.type = match[10] || \"\";\n}\n\nFormatSpecifier.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.trim ? \"~\" : \"\")\n + this.type;\n};\n","// Trims insignificant zeros, e.g., replaces 1.2000k with 1.2k.\nexport default function(s) {\n out: for (var n = s.length, i = 1, i0 = -1, i1; i < n; ++i) {\n switch (s[i]) {\n case \".\": i0 = i1 = i; break;\n case \"0\": if (i0 === 0) i0 = i; i1 = i; break;\n default: if (i0 > 0) { if (!+s[i]) break out; i0 = 0; } break;\n }\n }\n return i0 > 0 ? s.slice(0, i0) + s.slice(i1 + 1) : s;\n}\n","import formatDecimal from \"./formatDecimal\";\n\nexport var prefixExponent;\n\nexport default function(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, Math.max(0, p + i - 1))[0]; // less than 1y!\n}\n","import formatLocale from \"./locale\";\n\nvar locale;\nexport var format;\nexport var formatPrefix;\n\ndefaultLocale({\n decimal: \".\",\n thousands: \",\",\n grouping: [3],\n currency: [\"$\", \"\"]\n});\n\nexport default function defaultLocale(definition) {\n locale = formatLocale(definition);\n format = locale.format;\n formatPrefix = locale.formatPrefix;\n return locale;\n}\n","import formatDecimal from \"./formatDecimal\";\n\nexport default function(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","import formatPrefixAuto from \"./formatPrefixAuto\";\nimport formatRounded from \"./formatRounded\";\n\nexport default {\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","export default function(x) {\n return x;\n}\n","import exponent from \"./exponent\";\nimport formatGroup from \"./formatGroup\";\nimport formatNumerals from \"./formatNumerals\";\nimport formatSpecifier from \"./formatSpecifier\";\nimport formatTrim from \"./formatTrim\";\nimport formatTypes from \"./formatTypes\";\nimport {prefixExponent} from \"./formatPrefixAuto\";\nimport identity from \"./identity\";\n\nvar prefixes = [\"y\",\"z\",\"a\",\"f\",\"p\",\"n\",\"µ\",\"m\",\"\",\"k\",\"M\",\"G\",\"T\",\"P\",\"E\",\"Z\",\"Y\"];\n\nexport default function(locale) {\n var group = locale.grouping && locale.thousands ? formatGroup(locale.grouping, locale.thousands) : identity,\n currency = locale.currency,\n decimal = locale.decimal,\n numerals = locale.numerals ? formatNumerals(locale.numerals) : identity,\n percent = locale.percent || \"%\";\n\n function newFormat(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 trim = specifier.trim,\n type = specifier.type;\n\n // The \"n\" type is an alias for \",g\".\n if (type === \"n\") comma = true, type = \"g\";\n\n // The \"\" type, and any invalid type, is an alias for \".12~g\".\n else if (!formatTypes[type]) precision == null && (precision = 12), trim = true, type = \"g\";\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 // 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) ? percent : \"\";\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 = /[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 ? 6\n : /[gprs]/.test(type) ? Math.max(1, Math.min(21, precision))\n : Math.max(0, Math.min(20, precision));\n\n function format(value) {\n var valuePrefix = prefix,\n valueSuffix = suffix,\n i, n, c;\n\n if (type === \"c\") {\n valueSuffix = formatType(value) + valueSuffix;\n value = \"\";\n } else {\n value = +value;\n\n // Perform the initial formatting.\n var valueNegative = value < 0;\n value = formatType(Math.abs(value), precision);\n\n // Trim insignificant zeros.\n if (trim) value = formatTrim(value);\n\n // If a negative value rounds to zero during formatting, treat as positive.\n if (valueNegative && +value === 0) valueNegative = false;\n\n // Compute the prefix and suffix.\n valuePrefix = (valueNegative ? (sign === \"(\" ? sign : \"-\") : sign === \"-\" || sign === \"(\" ? \"\" : sign) + valuePrefix;\n valueSuffix = (type === \"s\" ? prefixes[8 + prefixExponent / 3] : \"\") + valueSuffix + (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 i = -1, n = value.length;\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 \"<\": value = valuePrefix + value + valueSuffix + padding; break;\n case \"=\": value = valuePrefix + padding + value + valueSuffix; break;\n case \"^\": value = padding.slice(0, length = padding.length >> 1) + valuePrefix + value + valueSuffix + padding.slice(length); break;\n default: value = padding + valuePrefix + value + valueSuffix; break;\n }\n\n return numerals(value);\n }\n\n format.toString = function() {\n return specifier + \"\";\n };\n\n return format;\n }\n\n function formatPrefix(specifier, value) {\n var f = newFormat((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: newFormat,\n formatPrefix: formatPrefix\n };\n}\n","export default function(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","export default function(numerals) {\n return function(value) {\n return value.replace(/[0-9]/g, function(i) {\n return numerals[+i];\n });\n };\n}\n","import exponent from \"./exponent\";\n\nexport default function(step) {\n return Math.max(0, -exponent(Math.abs(step)));\n}\n","import {tickStep} from \"d3-array\";\nimport {format, formatPrefix, formatSpecifier, precisionFixed, precisionPrefix, precisionRound} from \"d3-format\";\n\nexport default function(domain, count, specifier) {\n var start = domain[0],\n stop = domain[domain.length - 1],\n step = tickStep(start, stop, count == null ? 10 : count),\n precision;\n specifier = formatSpecifier(specifier == null ? \",f\" : specifier);\n switch (specifier.type) {\n case \"s\": {\n var value = Math.max(Math.abs(start), Math.abs(stop));\n if (specifier.precision == null && !isNaN(precision = precisionPrefix(step, value))) specifier.precision = precision;\n return formatPrefix(specifier, value);\n }\n case \"\":\n case \"e\":\n case \"g\":\n case \"p\":\n case \"r\": {\n if (specifier.precision == null && !isNaN(precision = precisionRound(step, Math.max(Math.abs(start), Math.abs(stop))))) specifier.precision = precision - (specifier.type === \"e\");\n break;\n }\n case \"f\":\n case \"%\": {\n if (specifier.precision == null && !isNaN(precision = precisionFixed(step))) specifier.precision = precision - (specifier.type === \"%\") * 2;\n break;\n }\n }\n return format(specifier);\n}\n","import exponent from \"./exponent\";\n\nexport default function(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","import exponent from \"./exponent\";\n\nexport default function(step, max) {\n step = Math.abs(step), max = Math.abs(max) - step;\n return Math.max(0, exponent(max) - exponent(step)) + 1;\n}\n","import {ticks, tickIncrement} from \"d3-array\";\nimport {interpolateNumber as reinterpolate} from \"d3-interpolate\";\nimport {default as continuous, copy, deinterpolateLinear as deinterpolate} from \"./continuous\";\nimport tickFormat from \"./tickFormat\";\n\nexport function linearish(scale) {\n var domain = scale.domain;\n\n scale.ticks = function(count) {\n var d = domain();\n return ticks(d[0], d[d.length - 1], count == null ? 10 : count);\n };\n\n scale.tickFormat = function(count, specifier) {\n return tickFormat(domain(), count, specifier);\n };\n\n scale.nice = function(count) {\n if (count == null) count = 10;\n\n var d = domain(),\n i0 = 0,\n i1 = d.length - 1,\n start = d[i0],\n stop = d[i1],\n step;\n\n if (stop < start) {\n step = start, start = stop, stop = step;\n step = i0, i0 = i1, i1 = step;\n }\n\n step = tickIncrement(start, stop, count);\n\n if (step > 0) {\n start = Math.floor(start / step) * step;\n stop = Math.ceil(stop / step) * step;\n step = tickIncrement(start, stop, count);\n } else if (step < 0) {\n start = Math.ceil(start * step) / step;\n stop = Math.floor(stop * step) / step;\n step = tickIncrement(start, stop, count);\n }\n\n if (step > 0) {\n d[i0] = Math.floor(start / step) * step;\n d[i1] = Math.ceil(stop / step) * step;\n domain(d);\n } else if (step < 0) {\n d[i0] = Math.ceil(start * step) / step;\n d[i1] = Math.floor(stop * step) / step;\n domain(d);\n }\n\n return scale;\n };\n\n return scale;\n}\n\nexport default function linear() {\n var scale = continuous(deinterpolate, reinterpolate);\n\n scale.copy = function() {\n return copy(scale, linear());\n };\n\n return linearish(scale);\n}\n","import {map} from \"./array\";\nimport {linearish} from \"./linear\";\nimport number from \"./number\";\n\nexport default function identity() {\n var domain = [0, 1];\n\n function scale(x) {\n return +x;\n }\n\n scale.invert = scale;\n\n scale.domain = scale.range = function(_) {\n return arguments.length ? (domain = map.call(_, number), scale) : domain.slice();\n };\n\n scale.copy = function() {\n return identity().domain(domain);\n };\n\n return linearish(scale);\n}\n","export default function(domain, interval) {\n domain = domain.slice();\n\n var i0 = 0,\n i1 = domain.length - 1,\n x0 = domain[i0],\n x1 = domain[i1],\n t;\n\n if (x1 < x0) {\n t = i0, i0 = i1, i1 = t;\n t = x0, x0 = x1, x1 = t;\n }\n\n domain[i0] = interval.floor(x0);\n domain[i1] = interval.ceil(x1);\n return domain;\n}\n","import {ticks} from \"d3-array\";\nimport {format} from \"d3-format\";\nimport constant from \"./constant\";\nimport nice from \"./nice\";\nimport {default as continuous, copy} from \"./continuous\";\n\nfunction deinterpolate(a, b) {\n return (b = Math.log(b / a))\n ? function(x) { return Math.log(x / a) / b; }\n : constant(b);\n}\n\nfunction reinterpolate(a, b) {\n return a < 0\n ? function(t) { return -Math.pow(-b, t) * Math.pow(-a, 1 - t); }\n : function(t) { return Math.pow(b, t) * Math.pow(a, 1 - t); };\n}\n\nfunction pow10(x) {\n return isFinite(x) ? +(\"1e\" + x) : x < 0 ? 0 : x;\n}\n\nfunction powp(base) {\n return base === 10 ? pow10\n : base === Math.E ? Math.exp\n : function(x) { return Math.pow(base, x); };\n}\n\nfunction logp(base) {\n return base === Math.E ? Math.log\n : base === 10 && Math.log10\n || base === 2 && Math.log2\n || (base = Math.log(base), function(x) { return Math.log(x) / base; });\n}\n\nfunction reflect(f) {\n return function(x) {\n return -f(-x);\n };\n}\n\nexport default function log() {\n var scale = continuous(deinterpolate, reinterpolate).domain([1, 10]),\n domain = scale.domain,\n base = 10,\n logs = logp(10),\n pows = powp(10);\n\n function rescale() {\n logs = logp(base), pows = powp(base);\n if (domain()[0] < 0) logs = reflect(logs), pows = reflect(pows);\n return scale;\n }\n\n scale.base = function(_) {\n return arguments.length ? (base = +_, rescale()) : base;\n };\n\n scale.domain = function(_) {\n return arguments.length ? (domain(_), rescale()) : domain();\n };\n\n scale.ticks = function(count) {\n var d = domain(),\n u = d[0],\n v = d[d.length - 1],\n r;\n\n if (r = v < u) i = u, u = v, v = i;\n\n var i = logs(u),\n j = logs(v),\n p,\n k,\n t,\n n = count == null ? 10 : +count,\n z = [];\n\n if (!(base % 1) && j - i < n) {\n i = Math.round(i) - 1, j = Math.round(j) + 1;\n if (u > 0) for (; i < j; ++i) {\n for (k = 1, p = pows(i); k < base; ++k) {\n t = p * k;\n if (t < u) continue;\n if (t > v) break;\n z.push(t);\n }\n } else for (; i < j; ++i) {\n for (k = base - 1, p = pows(i); k >= 1; --k) {\n t = p * k;\n if (t < u) continue;\n if (t > v) break;\n z.push(t);\n }\n }\n } else {\n z = ticks(i, j, Math.min(j - i, n)).map(pows);\n }\n\n return r ? z.reverse() : z;\n };\n\n scale.tickFormat = function(count, specifier) {\n if (specifier == null) specifier = base === 10 ? \".0e\" : \",\";\n if (typeof specifier !== \"function\") specifier = format(specifier);\n if (count === Infinity) return specifier;\n if (count == null) count = 10;\n var k = Math.max(1, base * count / scale.ticks().length); // TODO fast estimate?\n return function(d) {\n var i = d / pows(Math.round(logs(d)));\n if (i * base < base - 0.5) i *= base;\n return i <= k ? specifier(d) : \"\";\n };\n };\n\n scale.nice = function() {\n return domain(nice(domain(), {\n floor: function(x) { return pows(Math.floor(logs(x))); },\n ceil: function(x) { return pows(Math.ceil(logs(x))); }\n }));\n };\n\n scale.copy = function() {\n return copy(scale, log().base(base));\n };\n\n return scale;\n}\n","import constant from \"./constant\";\nimport {linearish} from \"./linear\";\nimport {default as continuous, copy} from \"./continuous\";\n\nfunction raise(x, exponent) {\n return x < 0 ? -Math.pow(-x, exponent) : Math.pow(x, exponent);\n}\n\nexport default function pow() {\n var exponent = 1,\n scale = continuous(deinterpolate, reinterpolate),\n domain = scale.domain;\n\n function deinterpolate(a, b) {\n return (b = raise(b, exponent) - (a = raise(a, exponent)))\n ? function(x) { return (raise(x, exponent) - a) / b; }\n : constant(b);\n }\n\n function reinterpolate(a, b) {\n b = raise(b, exponent) - (a = raise(a, exponent));\n return function(t) { return raise(a + b * t, 1 / exponent); };\n }\n\n scale.exponent = function(_) {\n return arguments.length ? (exponent = +_, domain(domain())) : exponent;\n };\n\n scale.copy = function() {\n return copy(scale, pow().exponent(exponent));\n };\n\n return linearish(scale);\n}\n\nexport function sqrt() {\n return pow().exponent(0.5);\n}\n","import {ascending, bisect, quantile as threshold} from \"d3-array\";\nimport {slice} from \"./array\";\n\nexport default function quantile() {\n var domain = [],\n range = [],\n thresholds = [];\n\n function rescale() {\n var i = 0, n = Math.max(1, range.length);\n thresholds = new Array(n - 1);\n while (++i < n) thresholds[i - 1] = threshold(domain, i / n);\n return scale;\n }\n\n function scale(x) {\n if (!isNaN(x = +x)) return range[bisect(thresholds, x)];\n }\n\n scale.invertExtent = function(y) {\n var i = range.indexOf(y);\n return i < 0 ? [NaN, NaN] : [\n i > 0 ? thresholds[i - 1] : domain[0],\n i < thresholds.length ? thresholds[i] : domain[domain.length - 1]\n ];\n };\n\n scale.domain = function(_) {\n if (!arguments.length) return domain.slice();\n domain = [];\n for (var i = 0, n = _.length, d; i < n; ++i) if (d = _[i], d != null && !isNaN(d = +d)) domain.push(d);\n domain.sort(ascending);\n return rescale();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = slice.call(_), rescale()) : range.slice();\n };\n\n scale.quantiles = function() {\n return thresholds.slice();\n };\n\n scale.copy = function() {\n return quantile()\n .domain(domain)\n .range(range);\n };\n\n return scale;\n}\n","import {bisect} from \"d3-array\";\nimport {slice} from \"./array\";\nimport {linearish} from \"./linear\";\n\nexport default function quantize() {\n var x0 = 0,\n x1 = 1,\n n = 1,\n domain = [0.5],\n range = [0, 1];\n\n function scale(x) {\n if (x <= x) return range[bisect(domain, x, 0, n)];\n }\n\n function rescale() {\n var i = -1;\n domain = new Array(n);\n while (++i < n) domain[i] = ((i + 1) * x1 - (i - n) * x0) / (n + 1);\n return scale;\n }\n\n scale.domain = function(_) {\n return arguments.length ? (x0 = +_[0], x1 = +_[1], rescale()) : [x0, x1];\n };\n\n scale.range = function(_) {\n return arguments.length ? (n = (range = slice.call(_)).length - 1, rescale()) : range.slice();\n };\n\n scale.invertExtent = function(y) {\n var i = range.indexOf(y);\n return i < 0 ? [NaN, NaN]\n : i < 1 ? [x0, domain[0]]\n : i >= n ? [domain[n - 1], x1]\n : [domain[i - 1], domain[i]];\n };\n\n scale.copy = function() {\n return quantize()\n .domain([x0, x1])\n .range(range);\n };\n\n return linearish(scale);\n}\n","import {bisect} from \"d3-array\";\nimport {slice} from \"./array\";\n\nexport default function threshold() {\n var domain = [0.5],\n range = [0, 1],\n n = 1;\n\n function scale(x) {\n if (x <= x) return range[bisect(domain, x, 0, n)];\n }\n\n scale.domain = function(_) {\n return arguments.length ? (domain = slice.call(_), n = Math.min(domain.length, range.length - 1), scale) : domain.slice();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = slice.call(_), n = Math.min(domain.length, range.length - 1), scale) : range.slice();\n };\n\n scale.invertExtent = function(y) {\n var i = range.indexOf(y);\n return [domain[i - 1], domain[i]];\n };\n\n scale.copy = function() {\n return threshold()\n .domain(domain)\n .range(range);\n };\n\n return scale;\n}\n","var t0 = new Date,\n t1 = new Date;\n\nexport default function newInterval(floori, offseti, count, field) {\n\n function interval(date) {\n return floori(date = new Date(+date)), date;\n }\n\n interval.floor = interval;\n\n interval.ceil = function(date) {\n return floori(date = new Date(date - 1)), offseti(date, 1), floori(date), date;\n };\n\n interval.round = function(date) {\n var d0 = interval(date),\n d1 = interval.ceil(date);\n return date - d0 < d1 - date ? d0 : d1;\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 = [], previous;\n start = interval.ceil(start);\n step = step == null ? 1 : Math.floor(step);\n if (!(start < stop) || !(step > 0)) return range; // also handles Invalid Date\n do range.push(previous = new Date(+start)), offseti(start, step), floori(start);\n while (previous < start && start < stop);\n return range;\n };\n\n interval.filter = function(test) {\n return newInterval(function(date) {\n if (date >= date) while (floori(date), !test(date)) date.setTime(date - 1);\n }, function(date, step) {\n if (date >= date) {\n if (step < 0) while (++step <= 0) {\n while (offseti(date, -1), !test(date)) {} // eslint-disable-line no-empty\n } else while (--step >= 0) {\n while (offseti(date, +1), !test(date)) {} // eslint-disable-line no-empty\n }\n }\n });\n };\n\n if (count) {\n 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 interval.every = function(step) {\n step = Math.floor(step);\n return !isFinite(step) || !(step > 0) ? null\n : !(step > 1) ? interval\n : interval.filter(field\n ? function(d) { return field(d) % step === 0; }\n : function(d) { return interval.count(0, d) % step === 0; });\n };\n }\n\n return interval;\n}\n","import interval from \"./interval\";\n\nvar millisecond = interval(function() {\n // noop\n}, function(date, step) {\n date.setTime(+date + step);\n}, function(start, end) {\n return end - start;\n});\n\n// An optimized implementation for this simple case.\nmillisecond.every = function(k) {\n k = Math.floor(k);\n if (!isFinite(k) || !(k > 0)) return null;\n if (!(k > 1)) return millisecond;\n return interval(function(date) {\n date.setTime(Math.floor(date / k) * k);\n }, function(date, step) {\n date.setTime(+date + step * k);\n }, function(start, end) {\n return (end - start) / k;\n });\n};\n\nexport default millisecond;\nexport var milliseconds = millisecond.range;\n","export var durationSecond = 1e3;\nexport var durationMinute = 6e4;\nexport var durationHour = 36e5;\nexport var durationDay = 864e5;\nexport var durationWeek = 6048e5;\n","import interval from \"./interval\";\nimport {durationSecond} from \"./duration\";\n\nvar second = interval(function(date) {\n date.setTime(Math.floor(date / durationSecond) * durationSecond);\n}, function(date, step) {\n date.setTime(+date + step * durationSecond);\n}, function(start, end) {\n return (end - start) / durationSecond;\n}, function(date) {\n return date.getUTCSeconds();\n});\n\nexport default second;\nexport var seconds = second.range;\n","import interval from \"./interval\";\nimport {durationMinute} from \"./duration\";\n\nvar minute = interval(function(date) {\n date.setTime(Math.floor(date / durationMinute) * durationMinute);\n}, function(date, step) {\n date.setTime(+date + step * durationMinute);\n}, function(start, end) {\n return (end - start) / durationMinute;\n}, function(date) {\n return date.getMinutes();\n});\n\nexport default minute;\nexport var minutes = minute.range;\n","import interval from \"./interval\";\nimport {durationHour, durationMinute} from \"./duration\";\n\nvar hour = interval(function(date) {\n var offset = date.getTimezoneOffset() * durationMinute % durationHour;\n if (offset < 0) offset += durationHour;\n date.setTime(Math.floor((+date - offset) / durationHour) * durationHour + offset);\n}, function(date, step) {\n date.setTime(+date + step * durationHour);\n}, function(start, end) {\n return (end - start) / durationHour;\n}, function(date) {\n return date.getHours();\n});\n\nexport default hour;\nexport var hours = hour.range;\n","import interval from \"./interval\";\nimport {durationDay, durationMinute} from \"./duration\";\n\nvar day = interval(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()) * durationMinute) / durationDay;\n}, function(date) {\n return date.getDate() - 1;\n});\n\nexport default day;\nexport var days = day.range;\n","import interval from \"./interval\";\nimport {durationMinute, durationWeek} from \"./duration\";\n\nfunction weekday(i) {\n return interval(function(date) {\n date.setDate(date.getDate() - (date.getDay() + 7 - i) % 7);\n date.setHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setDate(date.getDate() + step * 7);\n }, function(start, end) {\n return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationWeek;\n });\n}\n\nexport var sunday = weekday(0);\nexport var monday = weekday(1);\nexport var tuesday = weekday(2);\nexport var wednesday = weekday(3);\nexport var thursday = weekday(4);\nexport var friday = weekday(5);\nexport var saturday = weekday(6);\n\nexport var sundays = sunday.range;\nexport var mondays = monday.range;\nexport var tuesdays = tuesday.range;\nexport var wednesdays = wednesday.range;\nexport var thursdays = thursday.range;\nexport var fridays = friday.range;\nexport var saturdays = saturday.range;\n","import interval from \"./interval\";\n\nvar month = interval(function(date) {\n date.setDate(1);\n date.setHours(0, 0, 0, 0);\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}, function(date) {\n return date.getMonth();\n});\n\nexport default month;\nexport var months = month.range;\n","import interval from \"./interval\";\n\nvar year = interval(function(date) {\n date.setMonth(0, 1);\n date.setHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setFullYear(date.getFullYear() + step);\n}, function(start, end) {\n return end.getFullYear() - start.getFullYear();\n}, function(date) {\n return date.getFullYear();\n});\n\n// An optimized implementation for this simple case.\nyear.every = function(k) {\n return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : interval(function(date) {\n date.setFullYear(Math.floor(date.getFullYear() / k) * k);\n date.setMonth(0, 1);\n date.setHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setFullYear(date.getFullYear() + step * k);\n });\n};\n\nexport default year;\nexport var years = year.range;\n","import interval from \"./interval\";\nimport {durationMinute} from \"./duration\";\n\nvar utcMinute = interval(function(date) {\n date.setUTCSeconds(0, 0);\n}, function(date, step) {\n date.setTime(+date + step * durationMinute);\n}, function(start, end) {\n return (end - start) / durationMinute;\n}, function(date) {\n return date.getUTCMinutes();\n});\n\nexport default utcMinute;\nexport var utcMinutes = utcMinute.range;\n","import interval from \"./interval\";\nimport {durationHour} from \"./duration\";\n\nvar utcHour = interval(function(date) {\n date.setUTCMinutes(0, 0, 0);\n}, function(date, step) {\n date.setTime(+date + step * durationHour);\n}, function(start, end) {\n return (end - start) / durationHour;\n}, function(date) {\n return date.getUTCHours();\n});\n\nexport default utcHour;\nexport var utcHours = utcHour.range;\n","import interval from \"./interval\";\nimport {durationDay} from \"./duration\";\n\nvar utcDay = interval(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) / durationDay;\n}, function(date) {\n return date.getUTCDate() - 1;\n});\n\nexport default utcDay;\nexport var utcDays = utcDay.range;\n","import interval from \"./interval\";\nimport {durationWeek} from \"./duration\";\n\nfunction utcWeekday(i) {\n return interval(function(date) {\n date.setUTCDate(date.getUTCDate() - (date.getUTCDay() + 7 - i) % 7);\n date.setUTCHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setUTCDate(date.getUTCDate() + step * 7);\n }, function(start, end) {\n return (end - start) / durationWeek;\n });\n}\n\nexport var utcSunday = utcWeekday(0);\nexport var utcMonday = utcWeekday(1);\nexport var utcTuesday = utcWeekday(2);\nexport var utcWednesday = utcWeekday(3);\nexport var utcThursday = utcWeekday(4);\nexport var utcFriday = utcWeekday(5);\nexport var utcSaturday = utcWeekday(6);\n\nexport var utcSundays = utcSunday.range;\nexport var utcMondays = utcMonday.range;\nexport var utcTuesdays = utcTuesday.range;\nexport var utcWednesdays = utcWednesday.range;\nexport var utcThursdays = utcThursday.range;\nexport var utcFridays = utcFriday.range;\nexport var utcSaturdays = utcSaturday.range;\n","import interval from \"./interval\";\n\nvar utcMonth = interval(function(date) {\n date.setUTCDate(1);\n date.setUTCHours(0, 0, 0, 0);\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}, function(date) {\n return date.getUTCMonth();\n});\n\nexport default utcMonth;\nexport var utcMonths = utcMonth.range;\n","import interval from \"./interval\";\n\nvar utcYear = interval(function(date) {\n date.setUTCMonth(0, 1);\n date.setUTCHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setUTCFullYear(date.getUTCFullYear() + step);\n}, function(start, end) {\n return end.getUTCFullYear() - start.getUTCFullYear();\n}, function(date) {\n return date.getUTCFullYear();\n});\n\n// An optimized implementation for this simple case.\nutcYear.every = function(k) {\n return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : interval(function(date) {\n date.setUTCFullYear(Math.floor(date.getUTCFullYear() / k) * k);\n date.setUTCMonth(0, 1);\n date.setUTCHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setUTCFullYear(date.getUTCFullYear() + step * k);\n });\n};\n\nexport default utcYear;\nexport var utcYears = utcYear.range;\n","import {\n timeDay,\n timeSunday,\n timeMonday,\n timeThursday,\n timeYear,\n utcDay,\n utcSunday,\n utcMonday,\n utcThursday,\n utcYear\n} from \"d3-time\";\n\nfunction 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\nfunction 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\nfunction newYear(y) {\n return {y: y, m: 0, d: 1, H: 0, M: 0, S: 0, L: 0};\n}\n\nexport default function formatLocale(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 periodRe = formatRe(locale_periods),\n 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 \"f\": formatMicroseconds,\n \"H\": formatHour24,\n \"I\": formatHour12,\n \"j\": formatDayOfYear,\n \"L\": formatMilliseconds,\n \"m\": formatMonthNumber,\n \"M\": formatMinutes,\n \"p\": formatPeriod,\n \"Q\": formatUnixTimestamp,\n \"s\": formatUnixTimestampSeconds,\n \"S\": formatSeconds,\n \"u\": formatWeekdayNumberMonday,\n \"U\": formatWeekNumberSunday,\n \"V\": formatWeekNumberISO,\n \"w\": formatWeekdayNumberSunday,\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 \"f\": formatUTCMicroseconds,\n \"H\": formatUTCHour24,\n \"I\": formatUTCHour12,\n \"j\": formatUTCDayOfYear,\n \"L\": formatUTCMilliseconds,\n \"m\": formatUTCMonthNumber,\n \"M\": formatUTCMinutes,\n \"p\": formatUTCPeriod,\n \"Q\": formatUnixTimestamp,\n \"s\": formatUnixTimestampSeconds,\n \"S\": formatUTCSeconds,\n \"u\": formatUTCWeekdayNumberMonday,\n \"U\": formatUTCWeekNumberSunday,\n \"V\": formatUTCWeekNumberISO,\n \"w\": formatUTCWeekdayNumberSunday,\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 \"f\": parseMicroseconds,\n \"H\": parseHour24,\n \"I\": parseHour24,\n \"j\": parseDayOfYear,\n \"L\": parseMilliseconds,\n \"m\": parseMonthNumber,\n \"M\": parseMinutes,\n \"p\": parsePeriod,\n \"Q\": parseUnixTimestamp,\n \"s\": parseUnixTimestampSeconds,\n \"S\": parseSeconds,\n \"u\": parseWeekdayNumberMonday,\n \"U\": parseWeekNumberSunday,\n \"V\": parseWeekNumberISO,\n \"w\": parseWeekdayNumberSunday,\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 if (!(date instanceof Date)) date = new Date(+date);\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 else pad = c === \"e\" ? \" \" : \"0\";\n if (format = formats[c]) c = format(date, 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 week, day;\n if (i != string.length) return null;\n\n // If a UNIX timestamp is specified, return it.\n if (\"Q\" in d) return new Date(d.Q);\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 // Convert day-of-week and week-of-year to day-of-year.\n if (\"V\" in d) {\n if (d.V < 1 || d.V > 53) return null;\n if (!(\"w\" in d)) d.w = 1;\n if (\"Z\" in d) {\n week = utcDate(newYear(d.y)), day = week.getUTCDay();\n week = day > 4 || day === 0 ? utcMonday.ceil(week) : utcMonday(week);\n week = utcDay.offset(week, (d.V - 1) * 7);\n d.y = week.getUTCFullYear();\n d.m = week.getUTCMonth();\n d.d = week.getUTCDate() + (d.w + 6) % 7;\n } else {\n week = newDate(newYear(d.y)), day = week.getDay();\n week = day > 4 || day === 0 ? timeMonday.ceil(week) : timeMonday(week);\n week = timeDay.offset(week, (d.V - 1) * 7);\n d.y = week.getFullYear();\n d.m = week.getMonth();\n d.d = week.getDate() + (d.w + 6) % 7;\n }\n } else if (\"W\" in d || \"U\" in d) {\n if (!(\"w\" in d)) d.w = \"u\" in d ? d.u % 7 : \"W\" in d ? 1 : 0;\n day = \"Z\" in d ? utcDate(newYear(d.y)).getUTCDay() : newDate(newYear(d.y)).getDay();\n d.m = 0;\n d.d = \"W\" in d ? (d.w + 6) % 7 + d.W * 7 - (day + 5) % 7 : d.w + d.U * 7 - (day + 6) % 7;\n }\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 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 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 parsePeriod(d, string, i) {\n var n = periodRe.exec(string.slice(i));\n return n ? (d.p = periodLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n }\n\n function parseShortWeekday(d, string, i) {\n var n = shortWeekdayRe.exec(string.slice(i));\n return n ? (d.w = shortWeekdayLookup[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[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[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[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 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.toString = function() { return specifier; };\n return f;\n },\n parse: function(specifier) {\n var p = newParse(specifier += \"\", localDate);\n p.toString = function() { return specifier; };\n return p;\n },\n utcFormat: function(specifier) {\n var f = newFormat(specifier += \"\", utcFormats);\n f.toString = function() { return specifier; };\n return f;\n },\n utcParse: function(specifier) {\n var p = newParse(specifier, utcDate);\n p.toString = function() { return specifier; };\n return p;\n }\n };\n}\n\nvar pads = {\"-\": \"\", \"_\": \" \", \"0\": \"0\"},\n numberRe = /^\\s*\\d+/, // note: ignores next directive\n percentRe = /^%/,\n requoteRe = /[\\\\^$*+?|[\\]().{}]/g;\n\nfunction 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\nfunction requote(s) {\n return s.replace(requoteRe, \"\\\\$&\");\n}\n\nfunction formatRe(names) {\n return new RegExp(\"^(?:\" + names.map(requote).join(\"|\") + \")\", \"i\");\n}\n\nfunction formatLookup(names) {\n var map = {}, i = -1, n = names.length;\n while (++i < n) map[names[i].toLowerCase()] = i;\n return map;\n}\n\nfunction parseWeekdayNumberSunday(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\nfunction parseWeekdayNumberMonday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 1));\n return n ? (d.u = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberSunday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.U = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberISO(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.V = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberMonday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.W = +n[0], i + n[0].length) : -1;\n}\n\nfunction 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\nfunction 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\nfunction parseZone(d, string, i) {\n var n = /^(Z)|([+-]\\d\\d)(?::?(\\d\\d))?/.exec(string.slice(i, i + 6));\n return n ? (d.Z = n[1] ? 0 : -(n[2] + (n[3] || \"00\")), i + n[0].length) : -1;\n}\n\nfunction 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\nfunction 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\nfunction 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\nfunction 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\nfunction 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\nfunction 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\nfunction 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\nfunction parseMicroseconds(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 6));\n return n ? (d.L = Math.floor(n[0] / 1000), i + n[0].length) : -1;\n}\n\nfunction parseLiteralPercent(d, string, i) {\n var n = percentRe.exec(string.slice(i, i + 1));\n return n ? i + n[0].length : -1;\n}\n\nfunction parseUnixTimestamp(d, string, i) {\n var n = numberRe.exec(string.slice(i));\n return n ? (d.Q = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseUnixTimestampSeconds(d, string, i) {\n var n = numberRe.exec(string.slice(i));\n return n ? (d.Q = (+n[0]) * 1000, i + n[0].length) : -1;\n}\n\nfunction formatDayOfMonth(d, p) {\n return pad(d.getDate(), p, 2);\n}\n\nfunction formatHour24(d, p) {\n return pad(d.getHours(), p, 2);\n}\n\nfunction formatHour12(d, p) {\n return pad(d.getHours() % 12 || 12, p, 2);\n}\n\nfunction formatDayOfYear(d, p) {\n return pad(1 + timeDay.count(timeYear(d), d), p, 3);\n}\n\nfunction formatMilliseconds(d, p) {\n return pad(d.getMilliseconds(), p, 3);\n}\n\nfunction formatMicroseconds(d, p) {\n return formatMilliseconds(d, p) + \"000\";\n}\n\nfunction formatMonthNumber(d, p) {\n return pad(d.getMonth() + 1, p, 2);\n}\n\nfunction formatMinutes(d, p) {\n return pad(d.getMinutes(), p, 2);\n}\n\nfunction formatSeconds(d, p) {\n return pad(d.getSeconds(), p, 2);\n}\n\nfunction formatWeekdayNumberMonday(d) {\n var day = d.getDay();\n return day === 0 ? 7 : day;\n}\n\nfunction formatWeekNumberSunday(d, p) {\n return pad(timeSunday.count(timeYear(d), d), p, 2);\n}\n\nfunction formatWeekNumberISO(d, p) {\n var day = d.getDay();\n d = (day >= 4 || day === 0) ? timeThursday(d) : timeThursday.ceil(d);\n return pad(timeThursday.count(timeYear(d), d) + (timeYear(d).getDay() === 4), p, 2);\n}\n\nfunction formatWeekdayNumberSunday(d) {\n return d.getDay();\n}\n\nfunction formatWeekNumberMonday(d, p) {\n return pad(timeMonday.count(timeYear(d), d), p, 2);\n}\n\nfunction formatYear(d, p) {\n return pad(d.getFullYear() % 100, p, 2);\n}\n\nfunction formatFullYear(d, p) {\n return pad(d.getFullYear() % 10000, p, 4);\n}\n\nfunction 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\nfunction formatUTCDayOfMonth(d, p) {\n return pad(d.getUTCDate(), p, 2);\n}\n\nfunction formatUTCHour24(d, p) {\n return pad(d.getUTCHours(), p, 2);\n}\n\nfunction formatUTCHour12(d, p) {\n return pad(d.getUTCHours() % 12 || 12, p, 2);\n}\n\nfunction formatUTCDayOfYear(d, p) {\n return pad(1 + utcDay.count(utcYear(d), d), p, 3);\n}\n\nfunction formatUTCMilliseconds(d, p) {\n return pad(d.getUTCMilliseconds(), p, 3);\n}\n\nfunction formatUTCMicroseconds(d, p) {\n return formatUTCMilliseconds(d, p) + \"000\";\n}\n\nfunction formatUTCMonthNumber(d, p) {\n return pad(d.getUTCMonth() + 1, p, 2);\n}\n\nfunction formatUTCMinutes(d, p) {\n return pad(d.getUTCMinutes(), p, 2);\n}\n\nfunction formatUTCSeconds(d, p) {\n return pad(d.getUTCSeconds(), p, 2);\n}\n\nfunction formatUTCWeekdayNumberMonday(d) {\n var dow = d.getUTCDay();\n return dow === 0 ? 7 : dow;\n}\n\nfunction formatUTCWeekNumberSunday(d, p) {\n return pad(utcSunday.count(utcYear(d), d), p, 2);\n}\n\nfunction formatUTCWeekNumberISO(d, p) {\n var day = d.getUTCDay();\n d = (day >= 4 || day === 0) ? utcThursday(d) : utcThursday.ceil(d);\n return pad(utcThursday.count(utcYear(d), d) + (utcYear(d).getUTCDay() === 4), p, 2);\n}\n\nfunction formatUTCWeekdayNumberSunday(d) {\n return d.getUTCDay();\n}\n\nfunction formatUTCWeekNumberMonday(d, p) {\n return pad(utcMonday.count(utcYear(d), d), p, 2);\n}\n\nfunction formatUTCYear(d, p) {\n return pad(d.getUTCFullYear() % 100, p, 2);\n}\n\nfunction formatUTCFullYear(d, p) {\n return pad(d.getUTCFullYear() % 10000, p, 4);\n}\n\nfunction formatUTCZone() {\n return \"+0000\";\n}\n\nfunction formatLiteralPercent() {\n return \"%\";\n}\n\nfunction formatUnixTimestamp(d) {\n return +d;\n}\n\nfunction formatUnixTimestampSeconds(d) {\n return Math.floor(+d / 1000);\n}\n","import formatLocale from \"./locale\";\n\nvar locale;\nexport var timeFormat;\nexport var timeParse;\nexport var utcFormat;\nexport var utcParse;\n\ndefaultLocale({\n dateTime: \"%x, %X\",\n date: \"%-m/%-d/%Y\",\n time: \"%-I:%M:%S %p\",\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\nexport default function defaultLocale(definition) {\n locale = formatLocale(definition);\n timeFormat = locale.format;\n timeParse = locale.parse;\n utcFormat = locale.utcFormat;\n utcParse = locale.utcParse;\n return locale;\n}\n","import {utcFormat} from \"./defaultLocale\";\n\nexport var isoSpecifier = \"%Y-%m-%dT%H:%M:%S.%LZ\";\n\nfunction formatIsoNative(date) {\n return date.toISOString();\n}\n\nvar formatIso = Date.prototype.toISOString\n ? formatIsoNative\n : utcFormat(isoSpecifier);\n\nexport default formatIso;\n","import {isoSpecifier} from \"./isoFormat\";\nimport {utcParse} from \"./defaultLocale\";\n\nfunction parseIsoNative(string) {\n var date = new Date(string);\n return isNaN(date) ? null : date;\n}\n\nvar parseIso = +new Date(\"2000-01-01T00:00:00.000Z\")\n ? parseIsoNative\n : utcParse(isoSpecifier);\n\nexport default parseIso;\n","import {bisector, tickStep} from \"d3-array\";\nimport {interpolateNumber as reinterpolate} from \"d3-interpolate\";\nimport {timeYear, timeMonth, timeWeek, timeDay, timeHour, timeMinute, timeSecond, timeMillisecond} from \"d3-time\";\nimport {timeFormat} from \"d3-time-format\";\nimport {map} from \"./array\";\nimport {default as continuous, copy, deinterpolateLinear as deinterpolate} from \"./continuous\";\nimport nice from \"./nice\";\n\nvar durationSecond = 1000,\n durationMinute = durationSecond * 60,\n durationHour = durationMinute * 60,\n durationDay = durationHour * 24,\n durationWeek = durationDay * 7,\n durationMonth = durationDay * 30,\n durationYear = durationDay * 365;\n\nfunction date(t) {\n return new Date(t);\n}\n\nfunction number(t) {\n return t instanceof Date ? +t : +new Date(+t);\n}\n\nexport function calendar(year, month, week, day, hour, minute, second, millisecond, format) {\n var scale = continuous(deinterpolate, reinterpolate),\n invert = scale.invert,\n domain = scale.domain;\n\n var formatMillisecond = format(\".%L\"),\n formatSecond = format(\":%S\"),\n formatMinute = format(\"%I:%M\"),\n formatHour = format(\"%I %p\"),\n formatDay = format(\"%a %d\"),\n formatWeek = format(\"%b %d\"),\n formatMonth = format(\"%B\"),\n formatYear = format(\"%Y\");\n\n var tickIntervals = [\n [second, 1, durationSecond],\n [second, 5, 5 * durationSecond],\n [second, 15, 15 * durationSecond],\n [second, 30, 30 * durationSecond],\n [minute, 1, durationMinute],\n [minute, 5, 5 * durationMinute],\n [minute, 15, 15 * durationMinute],\n [minute, 30, 30 * durationMinute],\n [ hour, 1, durationHour ],\n [ hour, 3, 3 * durationHour ],\n [ hour, 6, 6 * durationHour ],\n [ hour, 12, 12 * durationHour ],\n [ day, 1, durationDay ],\n [ day, 2, 2 * durationDay ],\n [ week, 1, durationWeek ],\n [ month, 1, durationMonth ],\n [ month, 3, 3 * durationMonth ],\n [ year, 1, durationYear ]\n ];\n\n function tickFormat(date) {\n return (second(date) < date ? formatMillisecond\n : minute(date) < date ? formatSecond\n : hour(date) < date ? formatMinute\n : day(date) < date ? formatHour\n : month(date) < date ? (week(date) < date ? formatDay : formatWeek)\n : year(date) < date ? formatMonth\n : formatYear)(date);\n }\n\n function tickInterval(interval, start, stop, step) {\n if (interval == null) interval = 10;\n\n // If a desired tick count is specified, pick a reasonable tick interval\n // based on the extent of the domain and a rough estimate of tick size.\n // Otherwise, assume interval is already a time interval and use it.\n if (typeof interval === \"number\") {\n var target = Math.abs(stop - start) / interval,\n i = bisector(function(i) { return i[2]; }).right(tickIntervals, target);\n if (i === tickIntervals.length) {\n step = tickStep(start / durationYear, stop / durationYear, interval);\n interval = year;\n } else if (i) {\n i = tickIntervals[target / tickIntervals[i - 1][2] < tickIntervals[i][2] / target ? i - 1 : i];\n step = i[1];\n interval = i[0];\n } else {\n step = Math.max(tickStep(start, stop, interval), 1);\n interval = millisecond;\n }\n }\n\n return step == null ? interval : interval.every(step);\n }\n\n scale.invert = function(y) {\n return new Date(invert(y));\n };\n\n scale.domain = function(_) {\n return arguments.length ? domain(map.call(_, number)) : domain().map(date);\n };\n\n scale.ticks = function(interval, step) {\n var d = domain(),\n t0 = d[0],\n t1 = d[d.length - 1],\n r = t1 < t0,\n t;\n if (r) t = t0, t0 = t1, t1 = t;\n t = tickInterval(interval, t0, t1, step);\n t = t ? t.range(t0, t1 + 1) : []; // inclusive stop\n return r ? t.reverse() : t;\n };\n\n scale.tickFormat = function(count, specifier) {\n return specifier == null ? tickFormat : format(specifier);\n };\n\n scale.nice = function(interval, step) {\n var d = domain();\n return (interval = tickInterval(interval, d[0], d[d.length - 1], step))\n ? domain(nice(d, interval))\n : scale;\n };\n\n scale.copy = function() {\n return copy(scale, calendar(year, month, week, day, hour, minute, second, millisecond, format));\n };\n\n return scale;\n}\n\nexport default function() {\n return calendar(timeYear, timeMonth, timeWeek, timeDay, timeHour, timeMinute, timeSecond, timeMillisecond, timeFormat).domain([new Date(2000, 0, 1), new Date(2000, 0, 2)]);\n}\n","export default function(s) {\n return s.match(/.{6}/g).map(function(x) {\n return \"#\" + x;\n });\n}\n","import colors from \"./colors\";\n\nexport default colors(\"1f77b4ff7f0e2ca02cd627289467bd8c564be377c27f7f7fbcbd2217becf\");\n","import colors from \"./colors\";\n\nexport default colors(\"393b795254a36b6ecf9c9ede6379398ca252b5cf6bcedb9c8c6d31bd9e39e7ba52e7cb94843c39ad494ad6616be7969c7b4173a55194ce6dbdde9ed6\");\n","import colors from \"./colors\";\n\nexport default colors(\"1f77b4aec7e8ff7f0effbb782ca02c98df8ad62728ff98969467bdc5b0d58c564bc49c94e377c2f7b6d27f7f7fc7c7c7bcbd22dbdb8d17becf9edae5\");\n","import colors from \"./colors\";\n\nexport default colors(\"3182bd6baed69ecae1c6dbefe6550dfd8d3cfdae6bfdd0a231a35474c476a1d99bc7e9c0756bb19e9ac8bcbddcdadaeb636363969696bdbdbdd9d9d9\");\n","import {cubehelix} from \"d3-color\";\nimport {interpolateCubehelixLong} from \"d3-interpolate\";\n\nexport default interpolateCubehelixLong(cubehelix(300, 0.5, 0.0), cubehelix(-240, 0.5, 1.0));\n","import {cubehelix} from \"d3-color\";\nimport {interpolateCubehelixLong} from \"d3-interpolate\";\n\nexport var warm = interpolateCubehelixLong(cubehelix(-100, 0.75, 0.35), cubehelix(80, 1.50, 0.8));\n\nexport var cool = interpolateCubehelixLong(cubehelix(260, 0.75, 0.35), cubehelix(80, 1.50, 0.8));\n\nvar rainbow = cubehelix();\n\nexport default function(t) {\n if (t < 0 || t > 1) t -= Math.floor(t);\n var ts = Math.abs(t - 0.5);\n rainbow.h = 360 * t - 100;\n rainbow.s = 1.5 - 1.5 * ts;\n rainbow.l = 0.8 - 0.9 * ts;\n return rainbow + \"\";\n}\n","import colors from \"./colors\";\n\nfunction ramp(range) {\n var n = range.length;\n return function(t) {\n return range[Math.max(0, Math.min(n - 1, Math.floor(t * n)))];\n };\n}\n\nexport default ramp(colors(\"44015444025645045745055946075a46085c460a5d460b5e470d60470e6147106347116447136548146748166848176948186a481a6c481b6d481c6e481d6f481f70482071482173482374482475482576482677482878482979472a7a472c7a472d7b472e7c472f7d46307e46327e46337f463480453581453781453882443983443a83443b84433d84433e85423f854240864241864142874144874045884046883f47883f48893e49893e4a893e4c8a3d4d8a3d4e8a3c4f8a3c508b3b518b3b528b3a538b3a548c39558c39568c38588c38598c375a8c375b8d365c8d365d8d355e8d355f8d34608d34618d33628d33638d32648e32658e31668e31678e31688e30698e306a8e2f6b8e2f6c8e2e6d8e2e6e8e2e6f8e2d708e2d718e2c718e2c728e2c738e2b748e2b758e2a768e2a778e2a788e29798e297a8e297b8e287c8e287d8e277e8e277f8e27808e26818e26828e26828e25838e25848e25858e24868e24878e23888e23898e238a8d228b8d228c8d228d8d218e8d218f8d21908d21918c20928c20928c20938c1f948c1f958b1f968b1f978b1f988b1f998a1f9a8a1e9b8a1e9c891e9d891f9e891f9f881fa0881fa1881fa1871fa28720a38620a48621a58521a68522a78522a88423a98324aa8325ab8225ac8226ad8127ad8128ae8029af7f2ab07f2cb17e2db27d2eb37c2fb47c31b57b32b67a34b67935b77937b87838b9773aba763bbb753dbc743fbc7340bd7242be7144bf7046c06f48c16e4ac16d4cc26c4ec36b50c46a52c56954c56856c66758c7655ac8645cc8635ec96260ca6063cb5f65cb5e67cc5c69cd5b6ccd5a6ece5870cf5773d05675d05477d1537ad1517cd2507fd34e81d34d84d44b86d54989d5488bd6468ed64590d74393d74195d84098d83e9bd93c9dd93ba0da39a2da37a5db36a8db34aadc32addc30b0dd2fb2dd2db5de2bb8de29bade28bddf26c0df25c2df23c5e021c8e020cae11fcde11dd0e11cd2e21bd5e21ad8e219dae319dde318dfe318e2e418e5e419e7e419eae51aece51befe51cf1e51df4e61ef6e620f8e621fbe723fde725\"));\n\nexport var magma = ramp(colors(\"00000401000501010601010802010902020b02020d03030f03031204041405041606051806051a07061c08071e0907200a08220b09240c09260d0a290e0b2b100b2d110c2f120d31130d34140e36150e38160f3b180f3d19103f1a10421c10441d11471e114920114b21114e22115024125325125527125829115a2a115c2c115f2d11612f116331116533106734106936106b38106c390f6e3b0f703d0f713f0f72400f74420f75440f764510774710784910784a10794c117a4e117b4f127b51127c52137c54137d56147d57157e59157e5a167e5c167f5d177f5f187f601880621980641a80651a80671b80681c816a1c816b1d816d1d816e1e81701f81721f817320817521817621817822817922827b23827c23827e24828025828125818326818426818627818827818928818b29818c29818e2a81902a81912b81932b80942c80962c80982d80992d809b2e7f9c2e7f9e2f7fa02f7fa1307ea3307ea5317ea6317da8327daa337dab337cad347cae347bb0357bb2357bb3367ab5367ab73779b83779ba3878bc3978bd3977bf3a77c03a76c23b75c43c75c53c74c73d73c83e73ca3e72cc3f71cd4071cf4070d0416fd2426fd3436ed5446dd6456cd8456cd9466bdb476adc4869de4968df4a68e04c67e24d66e34e65e44f64e55064e75263e85362e95462ea5661eb5760ec5860ed5a5fee5b5eef5d5ef05f5ef1605df2625df2645cf3655cf4675cf4695cf56b5cf66c5cf66e5cf7705cf7725cf8745cf8765cf9785df9795df97b5dfa7d5efa7f5efa815ffb835ffb8560fb8761fc8961fc8a62fc8c63fc8e64fc9065fd9266fd9467fd9668fd9869fd9a6afd9b6bfe9d6cfe9f6dfea16efea36ffea571fea772fea973feaa74feac76feae77feb078feb27afeb47bfeb67cfeb77efeb97ffebb81febd82febf84fec185fec287fec488fec68afec88cfeca8dfecc8ffecd90fecf92fed194fed395fed597fed799fed89afdda9cfddc9efddea0fde0a1fde2a3fde3a5fde5a7fde7a9fde9aafdebacfcecaefceeb0fcf0b2fcf2b4fcf4b6fcf6b8fcf7b9fcf9bbfcfbbdfcfdbf\"));\n\nexport var inferno = ramp(colors(\"00000401000501010601010802010a02020c02020e03021004031204031405041706041907051b08051d09061f0a07220b07240c08260d08290e092b10092d110a30120a32140b34150b37160b39180c3c190c3e1b0c411c0c431e0c451f0c48210c4a230c4c240c4f260c51280b53290b552b0b572d0b592f0a5b310a5c320a5e340a5f3609613809623909633b09643d09653e0966400a67420a68440a68450a69470b6a490b6a4a0c6b4c0c6b4d0d6c4f0d6c510e6c520e6d540f6d550f6d57106e59106e5a116e5c126e5d126e5f136e61136e62146e64156e65156e67166e69166e6a176e6c186e6d186e6f196e71196e721a6e741a6e751b6e771c6d781c6d7a1d6d7c1d6d7d1e6d7f1e6c801f6c82206c84206b85216b87216b88226a8a226a8c23698d23698f24699025689225689326679526679727669827669a28659b29649d29649f2a63a02a63a22b62a32c61a52c60a62d60a82e5fa92e5eab2f5ead305dae305cb0315bb1325ab3325ab43359b63458b73557b93556ba3655bc3754bd3853bf3952c03a51c13a50c33b4fc43c4ec63d4dc73e4cc83f4bca404acb4149cc4248ce4347cf4446d04545d24644d34743d44842d54a41d74b3fd84c3ed94d3dda4e3cdb503bdd513ade5238df5337e05536e15635e25734e35933e45a31e55c30e65d2fe75e2ee8602de9612bea632aeb6429eb6628ec6726ed6925ee6a24ef6c23ef6e21f06f20f1711ff1731df2741cf3761bf37819f47918f57b17f57d15f67e14f68013f78212f78410f8850ff8870ef8890cf98b0bf98c0af98e09fa9008fa9207fa9407fb9606fb9706fb9906fb9b06fb9d07fc9f07fca108fca309fca50afca60cfca80dfcaa0ffcac11fcae12fcb014fcb216fcb418fbb61afbb81dfbba1ffbbc21fbbe23fac026fac228fac42afac62df9c72ff9c932f9cb35f8cd37f8cf3af7d13df7d340f6d543f6d746f5d949f5db4cf4dd4ff4df53f4e156f3e35af3e55df2e661f2e865f2ea69f1ec6df1ed71f1ef75f1f179f2f27df2f482f3f586f3f68af4f88ef5f992f6fa96f8fb9af9fc9dfafda1fcffa4\"));\n\nexport var plasma = ramp(colors(\"0d088710078813078916078a19068c1b068d1d068e20068f2206902406912605912805922a05932c05942e05952f059631059733059735049837049938049a3a049a3c049b3e049c3f049c41049d43039e44039e46039f48039f4903a04b03a14c02a14e02a25002a25102a35302a35502a45601a45801a45901a55b01a55c01a65e01a66001a66100a76300a76400a76600a76700a86900a86a00a86c00a86e00a86f00a87100a87201a87401a87501a87701a87801a87a02a87b02a87d03a87e03a88004a88104a78305a78405a78606a68707a68808a68a09a58b0aa58d0ba58e0ca48f0da4910ea3920fa39410a29511a19613a19814a099159f9a169f9c179e9d189d9e199da01a9ca11b9ba21d9aa31e9aa51f99a62098a72197a82296aa2395ab2494ac2694ad2793ae2892b02991b12a90b22b8fb32c8eb42e8db52f8cb6308bb7318ab83289ba3388bb3488bc3587bd3786be3885bf3984c03a83c13b82c23c81c33d80c43e7fc5407ec6417dc7427cc8437bc9447aca457acb4679cc4778cc4977cd4a76ce4b75cf4c74d04d73d14e72d24f71d35171d45270d5536fd5546ed6556dd7566cd8576bd9586ada5a6ada5b69db5c68dc5d67dd5e66de5f65de6164df6263e06363e16462e26561e26660e3685fe4695ee56a5de56b5de66c5ce76e5be76f5ae87059e97158e97257ea7457eb7556eb7655ec7754ed7953ed7a52ee7b51ef7c51ef7e50f07f4ff0804ef1814df1834cf2844bf3854bf3874af48849f48948f58b47f58c46f68d45f68f44f79044f79143f79342f89441f89540f9973ff9983ef99a3efa9b3dfa9c3cfa9e3bfb9f3afba139fba238fca338fca537fca636fca835fca934fdab33fdac33fdae32fdaf31fdb130fdb22ffdb42ffdb52efeb72dfeb82cfeba2cfebb2bfebd2afebe2afec029fdc229fdc328fdc527fdc627fdc827fdca26fdcb26fccd25fcce25fcd025fcd225fbd324fbd524fbd724fad824fada24f9dc24f9dd25f8df25f8e125f7e225f7e425f6e626f6e826f5e926f5eb27f4ed27f3ee27f3f027f2f227f1f426f1f525f0f724f0f921\"));\n","import {linearish} from \"./linear\";\n\nexport default function sequential(interpolator) {\n var x0 = 0,\n x1 = 1,\n clamp = false;\n\n function scale(x) {\n var t = (x - x0) / (x1 - x0);\n return interpolator(clamp ? Math.max(0, Math.min(1, t)) : t);\n }\n\n scale.domain = function(_) {\n return arguments.length ? (x0 = +_[0], x1 = +_[1], scale) : [x0, x1];\n };\n\n scale.clamp = function(_) {\n return arguments.length ? (clamp = !!_, scale) : clamp;\n };\n\n scale.interpolator = function(_) {\n return arguments.length ? (interpolator = _, scale) : interpolator;\n };\n\n scale.copy = function() {\n return sequential(interpolator).domain([x0, x1]).clamp(clamp);\n };\n\n return linearish(scale);\n}\n","export default function(specifier) {\n var n = specifier.length / 6 | 0, colors = new Array(n), i = 0;\n while (i < n) colors[i] = \"#\" + specifier.slice(i * 6, ++i * 6);\n return colors;\n}\n","import colors from \"../colors\";\n\nexport default colors(\"7fc97fbeaed4fdc086ffff99386cb0f0027fbf5b17666666\");\n","import colors from \"../colors\";\n\nexport default colors(\"1f77b4ff7f0e2ca02cd627289467bd8c564be377c27f7f7fbcbd2217becf\");\n","import colors from \"../colors\";\n\nexport default colors(\"1b9e77d95f027570b3e7298a66a61ee6ab02a6761d666666\");\n","import colors from \"../colors\";\n\nexport default colors(\"a6cee31f78b4b2df8a33a02cfb9a99e31a1cfdbf6fff7f00cab2d66a3d9affff99b15928\");\n","import colors from \"../colors\";\n\nexport default colors(\"fbb4aeb3cde3ccebc5decbe4fed9a6ffffcce5d8bdfddaecf2f2f2\");\n","import colors from \"../colors\";\n\nexport default colors(\"b3e2cdfdcdaccbd5e8f4cae4e6f5c9fff2aef1e2cccccccc\");\n","import colors from \"../colors\";\n\nexport default colors(\"e41a1c377eb84daf4a984ea3ff7f00ffff33a65628f781bf999999\");\n","import colors from \"../colors\";\n\nexport default colors(\"66c2a5fc8d628da0cbe78ac3a6d854ffd92fe5c494b3b3b3\");\n","import colors from \"../colors\";\n\nexport default colors(\"8dd3c7ffffb3bebadafb807280b1d3fdb462b3de69fccde5d9d9d9bc80bdccebc5ffed6f\");\n","import {interpolateRgbBasis} from \"d3-interpolate\";\n\nexport default function(scheme) {\n return interpolateRgbBasis(scheme[scheme.length - 1]);\n}\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"d8b365f5f5f55ab4ac\",\n \"a6611adfc27d80cdc1018571\",\n \"a6611adfc27df5f5f580cdc1018571\",\n \"8c510ad8b365f6e8c3c7eae55ab4ac01665e\",\n \"8c510ad8b365f6e8c3f5f5f5c7eae55ab4ac01665e\",\n \"8c510abf812ddfc27df6e8c3c7eae580cdc135978f01665e\",\n \"8c510abf812ddfc27df6e8c3f5f5f5c7eae580cdc135978f01665e\",\n \"5430058c510abf812ddfc27df6e8c3c7eae580cdc135978f01665e003c30\",\n \"5430058c510abf812ddfc27df6e8c3f5f5f5c7eae580cdc135978f01665e003c30\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"af8dc3f7f7f77fbf7b\",\n \"7b3294c2a5cfa6dba0008837\",\n \"7b3294c2a5cff7f7f7a6dba0008837\",\n \"762a83af8dc3e7d4e8d9f0d37fbf7b1b7837\",\n \"762a83af8dc3e7d4e8f7f7f7d9f0d37fbf7b1b7837\",\n \"762a839970abc2a5cfe7d4e8d9f0d3a6dba05aae611b7837\",\n \"762a839970abc2a5cfe7d4e8f7f7f7d9f0d3a6dba05aae611b7837\",\n \"40004b762a839970abc2a5cfe7d4e8d9f0d3a6dba05aae611b783700441b\",\n \"40004b762a839970abc2a5cfe7d4e8f7f7f7d9f0d3a6dba05aae611b783700441b\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"e9a3c9f7f7f7a1d76a\",\n \"d01c8bf1b6dab8e1864dac26\",\n \"d01c8bf1b6daf7f7f7b8e1864dac26\",\n \"c51b7de9a3c9fde0efe6f5d0a1d76a4d9221\",\n \"c51b7de9a3c9fde0eff7f7f7e6f5d0a1d76a4d9221\",\n \"c51b7dde77aef1b6dafde0efe6f5d0b8e1867fbc414d9221\",\n \"c51b7dde77aef1b6dafde0eff7f7f7e6f5d0b8e1867fbc414d9221\",\n \"8e0152c51b7dde77aef1b6dafde0efe6f5d0b8e1867fbc414d9221276419\",\n \"8e0152c51b7dde77aef1b6dafde0eff7f7f7e6f5d0b8e1867fbc414d9221276419\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"998ec3f7f7f7f1a340\",\n \"5e3c99b2abd2fdb863e66101\",\n \"5e3c99b2abd2f7f7f7fdb863e66101\",\n \"542788998ec3d8daebfee0b6f1a340b35806\",\n \"542788998ec3d8daebf7f7f7fee0b6f1a340b35806\",\n \"5427888073acb2abd2d8daebfee0b6fdb863e08214b35806\",\n \"5427888073acb2abd2d8daebf7f7f7fee0b6fdb863e08214b35806\",\n \"2d004b5427888073acb2abd2d8daebfee0b6fdb863e08214b358067f3b08\",\n \"2d004b5427888073acb2abd2d8daebf7f7f7fee0b6fdb863e08214b358067f3b08\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"ef8a62f7f7f767a9cf\",\n \"ca0020f4a58292c5de0571b0\",\n \"ca0020f4a582f7f7f792c5de0571b0\",\n \"b2182bef8a62fddbc7d1e5f067a9cf2166ac\",\n \"b2182bef8a62fddbc7f7f7f7d1e5f067a9cf2166ac\",\n \"b2182bd6604df4a582fddbc7d1e5f092c5de4393c32166ac\",\n \"b2182bd6604df4a582fddbc7f7f7f7d1e5f092c5de4393c32166ac\",\n \"67001fb2182bd6604df4a582fddbc7d1e5f092c5de4393c32166ac053061\",\n \"67001fb2182bd6604df4a582fddbc7f7f7f7d1e5f092c5de4393c32166ac053061\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"ef8a62ffffff999999\",\n \"ca0020f4a582bababa404040\",\n \"ca0020f4a582ffffffbababa404040\",\n \"b2182bef8a62fddbc7e0e0e09999994d4d4d\",\n \"b2182bef8a62fddbc7ffffffe0e0e09999994d4d4d\",\n \"b2182bd6604df4a582fddbc7e0e0e0bababa8787874d4d4d\",\n \"b2182bd6604df4a582fddbc7ffffffe0e0e0bababa8787874d4d4d\",\n \"67001fb2182bd6604df4a582fddbc7e0e0e0bababa8787874d4d4d1a1a1a\",\n \"67001fb2182bd6604df4a582fddbc7ffffffe0e0e0bababa8787874d4d4d1a1a1a\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"fc8d59ffffbf91bfdb\",\n \"d7191cfdae61abd9e92c7bb6\",\n \"d7191cfdae61ffffbfabd9e92c7bb6\",\n \"d73027fc8d59fee090e0f3f891bfdb4575b4\",\n \"d73027fc8d59fee090ffffbfe0f3f891bfdb4575b4\",\n \"d73027f46d43fdae61fee090e0f3f8abd9e974add14575b4\",\n \"d73027f46d43fdae61fee090ffffbfe0f3f8abd9e974add14575b4\",\n \"a50026d73027f46d43fdae61fee090e0f3f8abd9e974add14575b4313695\",\n \"a50026d73027f46d43fdae61fee090ffffbfe0f3f8abd9e974add14575b4313695\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"fc8d59ffffbf91cf60\",\n \"d7191cfdae61a6d96a1a9641\",\n \"d7191cfdae61ffffbfa6d96a1a9641\",\n \"d73027fc8d59fee08bd9ef8b91cf601a9850\",\n \"d73027fc8d59fee08bffffbfd9ef8b91cf601a9850\",\n \"d73027f46d43fdae61fee08bd9ef8ba6d96a66bd631a9850\",\n \"d73027f46d43fdae61fee08bffffbfd9ef8ba6d96a66bd631a9850\",\n \"a50026d73027f46d43fdae61fee08bd9ef8ba6d96a66bd631a9850006837\",\n \"a50026d73027f46d43fdae61fee08bffffbfd9ef8ba6d96a66bd631a9850006837\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"fc8d59ffffbf99d594\",\n \"d7191cfdae61abdda42b83ba\",\n \"d7191cfdae61ffffbfabdda42b83ba\",\n \"d53e4ffc8d59fee08be6f59899d5943288bd\",\n \"d53e4ffc8d59fee08bffffbfe6f59899d5943288bd\",\n \"d53e4ff46d43fdae61fee08be6f598abdda466c2a53288bd\",\n \"d53e4ff46d43fdae61fee08bffffbfe6f598abdda466c2a53288bd\",\n \"9e0142d53e4ff46d43fdae61fee08be6f598abdda466c2a53288bd5e4fa2\",\n \"9e0142d53e4ff46d43fdae61fee08bffffbfe6f598abdda466c2a53288bd5e4fa2\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"e5f5f999d8c92ca25f\",\n \"edf8fbb2e2e266c2a4238b45\",\n \"edf8fbb2e2e266c2a42ca25f006d2c\",\n \"edf8fbccece699d8c966c2a42ca25f006d2c\",\n \"edf8fbccece699d8c966c2a441ae76238b45005824\",\n \"f7fcfde5f5f9ccece699d8c966c2a441ae76238b45005824\",\n \"f7fcfde5f5f9ccece699d8c966c2a441ae76238b45006d2c00441b\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"e0ecf49ebcda8856a7\",\n \"edf8fbb3cde38c96c688419d\",\n \"edf8fbb3cde38c96c68856a7810f7c\",\n \"edf8fbbfd3e69ebcda8c96c68856a7810f7c\",\n \"edf8fbbfd3e69ebcda8c96c68c6bb188419d6e016b\",\n \"f7fcfde0ecf4bfd3e69ebcda8c96c68c6bb188419d6e016b\",\n \"f7fcfde0ecf4bfd3e69ebcda8c96c68c6bb188419d810f7c4d004b\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"e0f3dba8ddb543a2ca\",\n \"f0f9e8bae4bc7bccc42b8cbe\",\n \"f0f9e8bae4bc7bccc443a2ca0868ac\",\n \"f0f9e8ccebc5a8ddb57bccc443a2ca0868ac\",\n \"f0f9e8ccebc5a8ddb57bccc44eb3d32b8cbe08589e\",\n \"f7fcf0e0f3dbccebc5a8ddb57bccc44eb3d32b8cbe08589e\",\n \"f7fcf0e0f3dbccebc5a8ddb57bccc44eb3d32b8cbe0868ac084081\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"fee8c8fdbb84e34a33\",\n \"fef0d9fdcc8afc8d59d7301f\",\n \"fef0d9fdcc8afc8d59e34a33b30000\",\n \"fef0d9fdd49efdbb84fc8d59e34a33b30000\",\n \"fef0d9fdd49efdbb84fc8d59ef6548d7301f990000\",\n \"fff7ecfee8c8fdd49efdbb84fc8d59ef6548d7301f990000\",\n \"fff7ecfee8c8fdd49efdbb84fc8d59ef6548d7301fb300007f0000\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"ece2f0a6bddb1c9099\",\n \"f6eff7bdc9e167a9cf02818a\",\n \"f6eff7bdc9e167a9cf1c9099016c59\",\n \"f6eff7d0d1e6a6bddb67a9cf1c9099016c59\",\n \"f6eff7d0d1e6a6bddb67a9cf3690c002818a016450\",\n \"fff7fbece2f0d0d1e6a6bddb67a9cf3690c002818a016450\",\n \"fff7fbece2f0d0d1e6a6bddb67a9cf3690c002818a016c59014636\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"ece7f2a6bddb2b8cbe\",\n \"f1eef6bdc9e174a9cf0570b0\",\n \"f1eef6bdc9e174a9cf2b8cbe045a8d\",\n \"f1eef6d0d1e6a6bddb74a9cf2b8cbe045a8d\",\n \"f1eef6d0d1e6a6bddb74a9cf3690c00570b0034e7b\",\n \"fff7fbece7f2d0d1e6a6bddb74a9cf3690c00570b0034e7b\",\n \"fff7fbece7f2d0d1e6a6bddb74a9cf3690c00570b0045a8d023858\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"e7e1efc994c7dd1c77\",\n \"f1eef6d7b5d8df65b0ce1256\",\n \"f1eef6d7b5d8df65b0dd1c77980043\",\n \"f1eef6d4b9dac994c7df65b0dd1c77980043\",\n \"f1eef6d4b9dac994c7df65b0e7298ace125691003f\",\n \"f7f4f9e7e1efd4b9dac994c7df65b0e7298ace125691003f\",\n \"f7f4f9e7e1efd4b9dac994c7df65b0e7298ace125698004367001f\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"fde0ddfa9fb5c51b8a\",\n \"feebe2fbb4b9f768a1ae017e\",\n \"feebe2fbb4b9f768a1c51b8a7a0177\",\n \"feebe2fcc5c0fa9fb5f768a1c51b8a7a0177\",\n \"feebe2fcc5c0fa9fb5f768a1dd3497ae017e7a0177\",\n \"fff7f3fde0ddfcc5c0fa9fb5f768a1dd3497ae017e7a0177\",\n \"fff7f3fde0ddfcc5c0fa9fb5f768a1dd3497ae017e7a017749006a\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"edf8b17fcdbb2c7fb8\",\n \"ffffcca1dab441b6c4225ea8\",\n \"ffffcca1dab441b6c42c7fb8253494\",\n \"ffffccc7e9b47fcdbb41b6c42c7fb8253494\",\n \"ffffccc7e9b47fcdbb41b6c41d91c0225ea80c2c84\",\n \"ffffd9edf8b1c7e9b47fcdbb41b6c41d91c0225ea80c2c84\",\n \"ffffd9edf8b1c7e9b47fcdbb41b6c41d91c0225ea8253494081d58\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"f7fcb9addd8e31a354\",\n \"ffffccc2e69978c679238443\",\n \"ffffccc2e69978c67931a354006837\",\n \"ffffccd9f0a3addd8e78c67931a354006837\",\n \"ffffccd9f0a3addd8e78c67941ab5d238443005a32\",\n \"ffffe5f7fcb9d9f0a3addd8e78c67941ab5d238443005a32\",\n \"ffffe5f7fcb9d9f0a3addd8e78c67941ab5d238443006837004529\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"fff7bcfec44fd95f0e\",\n \"ffffd4fed98efe9929cc4c02\",\n \"ffffd4fed98efe9929d95f0e993404\",\n \"ffffd4fee391fec44ffe9929d95f0e993404\",\n \"ffffd4fee391fec44ffe9929ec7014cc4c028c2d04\",\n \"ffffe5fff7bcfee391fec44ffe9929ec7014cc4c028c2d04\",\n \"ffffe5fff7bcfee391fec44ffe9929ec7014cc4c02993404662506\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"ffeda0feb24cf03b20\",\n \"ffffb2fecc5cfd8d3ce31a1c\",\n \"ffffb2fecc5cfd8d3cf03b20bd0026\",\n \"ffffb2fed976feb24cfd8d3cf03b20bd0026\",\n \"ffffb2fed976feb24cfd8d3cfc4e2ae31a1cb10026\",\n \"ffffccffeda0fed976feb24cfd8d3cfc4e2ae31a1cb10026\",\n \"ffffccffeda0fed976feb24cfd8d3cfc4e2ae31a1cbd0026800026\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"deebf79ecae13182bd\",\n \"eff3ffbdd7e76baed62171b5\",\n \"eff3ffbdd7e76baed63182bd08519c\",\n \"eff3ffc6dbef9ecae16baed63182bd08519c\",\n \"eff3ffc6dbef9ecae16baed64292c62171b5084594\",\n \"f7fbffdeebf7c6dbef9ecae16baed64292c62171b5084594\",\n \"f7fbffdeebf7c6dbef9ecae16baed64292c62171b508519c08306b\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"e5f5e0a1d99b31a354\",\n \"edf8e9bae4b374c476238b45\",\n \"edf8e9bae4b374c47631a354006d2c\",\n \"edf8e9c7e9c0a1d99b74c47631a354006d2c\",\n \"edf8e9c7e9c0a1d99b74c47641ab5d238b45005a32\",\n \"f7fcf5e5f5e0c7e9c0a1d99b74c47641ab5d238b45005a32\",\n \"f7fcf5e5f5e0c7e9c0a1d99b74c47641ab5d238b45006d2c00441b\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"f0f0f0bdbdbd636363\",\n \"f7f7f7cccccc969696525252\",\n \"f7f7f7cccccc969696636363252525\",\n \"f7f7f7d9d9d9bdbdbd969696636363252525\",\n \"f7f7f7d9d9d9bdbdbd969696737373525252252525\",\n \"fffffff0f0f0d9d9d9bdbdbd969696737373525252252525\",\n \"fffffff0f0f0d9d9d9bdbdbd969696737373525252252525000000\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"efedf5bcbddc756bb1\",\n \"f2f0f7cbc9e29e9ac86a51a3\",\n \"f2f0f7cbc9e29e9ac8756bb154278f\",\n \"f2f0f7dadaebbcbddc9e9ac8756bb154278f\",\n \"f2f0f7dadaebbcbddc9e9ac8807dba6a51a34a1486\",\n \"fcfbfdefedf5dadaebbcbddc9e9ac8807dba6a51a34a1486\",\n \"fcfbfdefedf5dadaebbcbddc9e9ac8807dba6a51a354278f3f007d\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"fee0d2fc9272de2d26\",\n \"fee5d9fcae91fb6a4acb181d\",\n \"fee5d9fcae91fb6a4ade2d26a50f15\",\n \"fee5d9fcbba1fc9272fb6a4ade2d26a50f15\",\n \"fee5d9fcbba1fc9272fb6a4aef3b2ccb181d99000d\",\n \"fff5f0fee0d2fcbba1fc9272fb6a4aef3b2ccb181d99000d\",\n \"fff5f0fee0d2fcbba1fc9272fb6a4aef3b2ccb181da50f1567000d\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"fee6cefdae6be6550d\",\n \"feeddefdbe85fd8d3cd94701\",\n \"feeddefdbe85fd8d3ce6550da63603\",\n \"feeddefdd0a2fdae6bfd8d3ce6550da63603\",\n \"feeddefdd0a2fdae6bfd8d3cf16913d948018c2d04\",\n \"fff5ebfee6cefdd0a2fdae6bfd8d3cf16913d948018c2d04\",\n \"fff5ebfee6cefdd0a2fdae6bfd8d3cf16913d94801a636037f2704\"\n).map(colors);\n\nexport default ramp(scheme);\n","import {cubehelix} from \"d3-color\";\nimport {interpolateCubehelixLong} from \"d3-interpolate\";\n\nexport default interpolateCubehelixLong(cubehelix(300, 0.5, 0.0), cubehelix(-240, 0.5, 1.0));\n","import {cubehelix} from \"d3-color\";\nimport {interpolateCubehelixLong} from \"d3-interpolate\";\n\nexport var warm = interpolateCubehelixLong(cubehelix(-100, 0.75, 0.35), cubehelix(80, 1.50, 0.8));\n\nexport var cool = interpolateCubehelixLong(cubehelix(260, 0.75, 0.35), cubehelix(80, 1.50, 0.8));\n\nvar c = cubehelix();\n\nexport default function(t) {\n if (t < 0 || t > 1) t -= Math.floor(t);\n var ts = Math.abs(t - 0.5);\n c.h = 360 * t - 100;\n c.s = 1.5 - 1.5 * ts;\n c.l = 0.8 - 0.9 * ts;\n return c + \"\";\n}\n","import {rgb} from \"d3-color\";\n\nvar c = rgb(),\n pi_1_3 = Math.PI / 3,\n pi_2_3 = Math.PI * 2 / 3;\n\nexport default function(t) {\n var x;\n t = (0.5 - t) * Math.PI;\n c.r = 255 * (x = Math.sin(t)) * x;\n c.g = 255 * (x = Math.sin(t + pi_1_3)) * x;\n c.b = 255 * (x = Math.sin(t + pi_2_3)) * x;\n return c + \"\";\n}\n","import colors from \"../colors\";\n\nfunction ramp(range) {\n var n = range.length;\n return function(t) {\n return range[Math.max(0, Math.min(n - 1, Math.floor(t * n)))];\n };\n}\n\nexport default ramp(colors(\"44015444025645045745055946075a46085c460a5d460b5e470d60470e6147106347116447136548146748166848176948186a481a6c481b6d481c6e481d6f481f70482071482173482374482475482576482677482878482979472a7a472c7a472d7b472e7c472f7d46307e46327e46337f463480453581453781453882443983443a83443b84433d84433e85423f854240864241864142874144874045884046883f47883f48893e49893e4a893e4c8a3d4d8a3d4e8a3c4f8a3c508b3b518b3b528b3a538b3a548c39558c39568c38588c38598c375a8c375b8d365c8d365d8d355e8d355f8d34608d34618d33628d33638d32648e32658e31668e31678e31688e30698e306a8e2f6b8e2f6c8e2e6d8e2e6e8e2e6f8e2d708e2d718e2c718e2c728e2c738e2b748e2b758e2a768e2a778e2a788e29798e297a8e297b8e287c8e287d8e277e8e277f8e27808e26818e26828e26828e25838e25848e25858e24868e24878e23888e23898e238a8d228b8d228c8d228d8d218e8d218f8d21908d21918c20928c20928c20938c1f948c1f958b1f968b1f978b1f988b1f998a1f9a8a1e9b8a1e9c891e9d891f9e891f9f881fa0881fa1881fa1871fa28720a38620a48621a58521a68522a78522a88423a98324aa8325ab8225ac8226ad8127ad8128ae8029af7f2ab07f2cb17e2db27d2eb37c2fb47c31b57b32b67a34b67935b77937b87838b9773aba763bbb753dbc743fbc7340bd7242be7144bf7046c06f48c16e4ac16d4cc26c4ec36b50c46a52c56954c56856c66758c7655ac8645cc8635ec96260ca6063cb5f65cb5e67cc5c69cd5b6ccd5a6ece5870cf5773d05675d05477d1537ad1517cd2507fd34e81d34d84d44b86d54989d5488bd6468ed64590d74393d74195d84098d83e9bd93c9dd93ba0da39a2da37a5db36a8db34aadc32addc30b0dd2fb2dd2db5de2bb8de29bade28bddf26c0df25c2df23c5e021c8e020cae11fcde11dd0e11cd2e21bd5e21ad8e219dae319dde318dfe318e2e418e5e419e7e419eae51aece51befe51cf1e51df4e61ef6e620f8e621fbe723fde725\"));\n\nexport var magma = ramp(colors(\"00000401000501010601010802010902020b02020d03030f03031204041405041606051806051a07061c08071e0907200a08220b09240c09260d0a290e0b2b100b2d110c2f120d31130d34140e36150e38160f3b180f3d19103f1a10421c10441d11471e114920114b21114e22115024125325125527125829115a2a115c2c115f2d11612f116331116533106734106936106b38106c390f6e3b0f703d0f713f0f72400f74420f75440f764510774710784910784a10794c117a4e117b4f127b51127c52137c54137d56147d57157e59157e5a167e5c167f5d177f5f187f601880621980641a80651a80671b80681c816a1c816b1d816d1d816e1e81701f81721f817320817521817621817822817922827b23827c23827e24828025828125818326818426818627818827818928818b29818c29818e2a81902a81912b81932b80942c80962c80982d80992d809b2e7f9c2e7f9e2f7fa02f7fa1307ea3307ea5317ea6317da8327daa337dab337cad347cae347bb0357bb2357bb3367ab5367ab73779b83779ba3878bc3978bd3977bf3a77c03a76c23b75c43c75c53c74c73d73c83e73ca3e72cc3f71cd4071cf4070d0416fd2426fd3436ed5446dd6456cd8456cd9466bdb476adc4869de4968df4a68e04c67e24d66e34e65e44f64e55064e75263e85362e95462ea5661eb5760ec5860ed5a5fee5b5eef5d5ef05f5ef1605df2625df2645cf3655cf4675cf4695cf56b5cf66c5cf66e5cf7705cf7725cf8745cf8765cf9785df9795df97b5dfa7d5efa7f5efa815ffb835ffb8560fb8761fc8961fc8a62fc8c63fc8e64fc9065fd9266fd9467fd9668fd9869fd9a6afd9b6bfe9d6cfe9f6dfea16efea36ffea571fea772fea973feaa74feac76feae77feb078feb27afeb47bfeb67cfeb77efeb97ffebb81febd82febf84fec185fec287fec488fec68afec88cfeca8dfecc8ffecd90fecf92fed194fed395fed597fed799fed89afdda9cfddc9efddea0fde0a1fde2a3fde3a5fde5a7fde7a9fde9aafdebacfcecaefceeb0fcf0b2fcf2b4fcf4b6fcf6b8fcf7b9fcf9bbfcfbbdfcfdbf\"));\n\nexport var inferno = ramp(colors(\"00000401000501010601010802010a02020c02020e03021004031204031405041706041907051b08051d09061f0a07220b07240c08260d08290e092b10092d110a30120a32140b34150b37160b39180c3c190c3e1b0c411c0c431e0c451f0c48210c4a230c4c240c4f260c51280b53290b552b0b572d0b592f0a5b310a5c320a5e340a5f3609613809623909633b09643d09653e0966400a67420a68440a68450a69470b6a490b6a4a0c6b4c0c6b4d0d6c4f0d6c510e6c520e6d540f6d550f6d57106e59106e5a116e5c126e5d126e5f136e61136e62146e64156e65156e67166e69166e6a176e6c186e6d186e6f196e71196e721a6e741a6e751b6e771c6d781c6d7a1d6d7c1d6d7d1e6d7f1e6c801f6c82206c84206b85216b87216b88226a8a226a8c23698d23698f24699025689225689326679526679727669827669a28659b29649d29649f2a63a02a63a22b62a32c61a52c60a62d60a82e5fa92e5eab2f5ead305dae305cb0315bb1325ab3325ab43359b63458b73557b93556ba3655bc3754bd3853bf3952c03a51c13a50c33b4fc43c4ec63d4dc73e4cc83f4bca404acb4149cc4248ce4347cf4446d04545d24644d34743d44842d54a41d74b3fd84c3ed94d3dda4e3cdb503bdd513ade5238df5337e05536e15635e25734e35933e45a31e55c30e65d2fe75e2ee8602de9612bea632aeb6429eb6628ec6726ed6925ee6a24ef6c23ef6e21f06f20f1711ff1731df2741cf3761bf37819f47918f57b17f57d15f67e14f68013f78212f78410f8850ff8870ef8890cf98b0bf98c0af98e09fa9008fa9207fa9407fb9606fb9706fb9906fb9b06fb9d07fc9f07fca108fca309fca50afca60cfca80dfcaa0ffcac11fcae12fcb014fcb216fcb418fbb61afbb81dfbba1ffbbc21fbbe23fac026fac228fac42afac62df9c72ff9c932f9cb35f8cd37f8cf3af7d13df7d340f6d543f6d746f5d949f5db4cf4dd4ff4df53f4e156f3e35af3e55df2e661f2e865f2ea69f1ec6df1ed71f1ef75f1f179f2f27df2f482f3f586f3f68af4f88ef5f992f6fa96f8fb9af9fc9dfafda1fcffa4\"));\n\nexport var plasma = ramp(colors(\"0d088710078813078916078a19068c1b068d1d068e20068f2206902406912605912805922a05932c05942e05952f059631059733059735049837049938049a3a049a3c049b3e049c3f049c41049d43039e44039e46039f48039f4903a04b03a14c02a14e02a25002a25102a35302a35502a45601a45801a45901a55b01a55c01a65e01a66001a66100a76300a76400a76600a76700a86900a86a00a86c00a86e00a86f00a87100a87201a87401a87501a87701a87801a87a02a87b02a87d03a87e03a88004a88104a78305a78405a78606a68707a68808a68a09a58b0aa58d0ba58e0ca48f0da4910ea3920fa39410a29511a19613a19814a099159f9a169f9c179e9d189d9e199da01a9ca11b9ba21d9aa31e9aa51f99a62098a72197a82296aa2395ab2494ac2694ad2793ae2892b02991b12a90b22b8fb32c8eb42e8db52f8cb6308bb7318ab83289ba3388bb3488bc3587bd3786be3885bf3984c03a83c13b82c23c81c33d80c43e7fc5407ec6417dc7427cc8437bc9447aca457acb4679cc4778cc4977cd4a76ce4b75cf4c74d04d73d14e72d24f71d35171d45270d5536fd5546ed6556dd7566cd8576bd9586ada5a6ada5b69db5c68dc5d67dd5e66de5f65de6164df6263e06363e16462e26561e26660e3685fe4695ee56a5de56b5de66c5ce76e5be76f5ae87059e97158e97257ea7457eb7556eb7655ec7754ed7953ed7a52ee7b51ef7c51ef7e50f07f4ff0804ef1814df1834cf2844bf3854bf3874af48849f48948f58b47f58c46f68d45f68f44f79044f79143f79342f89441f89540f9973ff9983ef99a3efa9b3dfa9c3cfa9e3bfb9f3afba139fba238fca338fca537fca636fca835fca934fdab33fdac33fdae32fdaf31fdb130fdb22ffdb42ffdb52efeb72dfeb82cfeba2cfebb2bfebd2afebe2afec029fdc229fdc328fdc527fdc627fdc827fdca26fdcb26fccd25fcce25fcd025fcd225fbd324fbd524fbd724fad824fada24f9dc24f9dd25f8df25f8e125f7e225f7e425f6e626f6e826f5e926f5eb27f4ed27f3ee27f3f027f2f227f1f426f1f525f0f724f0f921\"));\n","const ReservedFields = {\n ROW_ID: '__id__'\n};\n\nexport default ReservedFields;\n","const CommonProps = {\n ACTION_INF: 'actionInf',\n ON_LAYER_DRAW: 'onlayerdraw'\n};\n\nexport default CommonProps;\n","export var slice = Array.prototype.slice;\n","export default function(x) {\n return x;\n}\n","import {slice} from \"./array\";\nimport identity from \"./identity\";\n\nvar top = 1,\n right = 2,\n bottom = 3,\n left = 4,\n epsilon = 1e-6;\n\nfunction translateX(x) {\n return \"translate(\" + (x + 0.5) + \",0)\";\n}\n\nfunction translateY(y) {\n return \"translate(0,\" + (y + 0.5) + \")\";\n}\n\nfunction number(scale) {\n return function(d) {\n return +scale(d);\n };\n}\n\nfunction center(scale) {\n var offset = Math.max(0, scale.bandwidth() - 1) / 2; // Adjust for 0.5px offset.\n if (scale.round()) offset = Math.round(offset);\n return function(d) {\n return +scale(d) + offset;\n };\n}\n\nfunction entering() {\n return !this.__axis;\n}\n\nfunction axis(orient, scale) {\n var tickArguments = [],\n tickValues = null,\n tickFormat = null,\n tickTransform = null,\n tickSizeInner = 6,\n tickSizeOuter = 6,\n tickPadding = 3,\n k = orient === top || orient === left ? -1 : 1,\n x = orient === left || orient === right ? \"x\" : \"y\",\n transform = orient === top || orient === bottom ? translateX : translateY;\n\n function axis(context) {\n var values = tickValues == null ? (scale.ticks ? scale.ticks.apply(scale, tickArguments) : scale.domain()) : tickValues,\n format = tickFormat == null ? (scale.tickFormat ? scale.tickFormat.apply(scale, tickArguments) : identity) : tickFormat,\n spacing = Math.max(tickSizeInner, 0) + tickPadding,\n range = scale.range(),\n range0 = +range[0] + 0.5,\n range1 = +range[range.length - 1] + 0.5,\n position = (scale.bandwidth ? center : number)(scale.copy()),\n selection = context.selection ? context.selection() : context,\n path = selection.selectAll(\".domain\").data([null]),\n tick = selection.selectAll(\".tick\").data(values, scale).order(),\n tickExit = tick.exit(),\n tickEnter = tick.enter().append(\"g\").attr(\"class\", \"tick\"),\n line = tick.select(\"line\"),\n text = tick.select(\"text\");\n\n path = path.merge(path.enter().insert(\"path\", \".tick\")\n .attr(\"class\", \"domain\")\n .attr(\"stroke\", \"#000\"));\n\n tick = tick.merge(tickEnter);\n\n line = line.merge(tickEnter.append(\"line\")\n .attr(\"stroke\", \"#000\")\n .attr(x + \"2\", k * tickSizeInner));\n\n text = text.merge(tickEnter.append(\"text\")\n .attr(\"fill\", \"#000\")\n .attr(x, k * spacing)\n .attr(\"dy\", orient === top ? \"0em\" : orient === bottom ? \"0.71em\" : \"0.32em\"))\n .style('transform', tickTransform);\n\n if (context !== selection) {\n path = path.transition(context);\n tick = tick.transition(context);\n line = line.transition(context);\n text = text.transition(context);\n\n tickExit = tickExit.transition(context)\n .attr(\"opacity\", epsilon)\n .attr(\"transform\", function(d) { return isFinite(d = position(d)) ? transform(d) : this.getAttribute(\"transform\"); });\n\n tickEnter\n .attr(\"opacity\", epsilon)\n .attr(\"transform\", function(d) { var p = this.parentNode.__axis; return transform(p && isFinite(p = p(d)) ? p : position(d)); });\n }\n\n tickExit.remove();\n\n path\n .attr(\"d\", orient === left || orient == right\n ? \"M\" + k * tickSizeOuter + \",\" + range0 + \"H0.5V\" + range1 + \"H\" + k * tickSizeOuter\n : \"M\" + range0 + \",\" + k * tickSizeOuter + \"V0.5H\" + range1 + \"V\" + k * tickSizeOuter);\n\n tick\n .attr(\"opacity\", 1)\n .attr(\"transform\", function(d) { return transform(position(d)); });\n\n line\n .attr(x + \"2\", k * tickSizeInner);\n\n text\n .attr(x, k * spacing)\n .text(format);\n\n selection.filter(entering)\n .attr(\"fill\", \"none\")\n .attr(\"font-size\", 10)\n .attr(\"font-family\", \"sans-serif\")\n .attr(\"text-anchor\", orient === right ? \"start\" : orient === left ? \"end\" : \"middle\");\n\n selection\n .each(function() { this.__axis = position; });\n }\n\n axis.scale = function(_) {\n return arguments.length ? (scale = _, axis) : scale;\n };\n\n axis.tickTransform = function(_) {\n return arguments.length ? (tickTransform = _, axis) : tickTransform;\n };\n\n axis.ticks = function() {\n return tickArguments = slice.call(arguments), axis;\n };\n\n axis.tickArguments = function(_) {\n return arguments.length ? (tickArguments = _ == null ? [] : slice.call(_), axis) : tickArguments.slice();\n };\n\n axis.tickValues = function(_) {\n return arguments.length ? (tickValues = _ == null ? null : slice.call(_), axis) : tickValues && tickValues.slice();\n };\n\n axis.tickFormat = function(_) {\n return arguments.length ? (tickFormat = _, axis) : tickFormat;\n };\n\n axis.tickSize = function(_) {\n return arguments.length ? (tickSizeInner = tickSizeOuter = +_, axis) : tickSizeInner;\n };\n\n axis.tickSizeInner = function(_) {\n return arguments.length ? (tickSizeInner = +_, axis) : tickSizeInner;\n };\n\n axis.tickSizeOuter = function(_) {\n return arguments.length ? (tickSizeOuter = +_, axis) : tickSizeOuter;\n };\n\n axis.tickPadding = function(_) {\n return arguments.length ? (tickPadding = +_, axis) : tickPadding;\n };\n\n return axis;\n}\n\nexport function axisTop(scale) {\n return axis(top, scale);\n}\n\nexport function axisRight(scale) {\n return axis(right, scale);\n}\n\nexport function axisBottom(scale) {\n return axis(bottom, scale);\n}\n\nexport function axisLeft(scale) {\n return axis(left, scale);\n}\n","var pi = Math.PI,\n tau = 2 * pi,\n epsilon = 1e-6,\n tauEpsilon = tau - epsilon;\n\nfunction Path() {\n this._x0 = this._y0 = // start of current subpath\n this._x1 = this._y1 = null; // end of current subpath\n this._ = \"\";\n}\n\nfunction path() {\n return new Path;\n}\n\nPath.prototype = path.prototype = {\n constructor: Path,\n moveTo: function(x, y) {\n this._ += \"M\" + (this._x0 = this._x1 = +x) + \",\" + (this._y0 = this._y1 = +y);\n },\n closePath: function() {\n if (this._x1 !== null) {\n this._x1 = this._x0, this._y1 = this._y0;\n this._ += \"Z\";\n }\n },\n lineTo: function(x, y) {\n this._ += \"L\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n },\n quadraticCurveTo: function(x1, y1, x, y) {\n this._ += \"Q\" + (+x1) + \",\" + (+y1) + \",\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n },\n bezierCurveTo: function(x1, y1, x2, y2, x, y) {\n this._ += \"C\" + (+x1) + \",\" + (+y1) + \",\" + (+x2) + \",\" + (+y2) + \",\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n },\n arcTo: function(x1, y1, x2, y2, r) {\n x1 = +x1, y1 = +y1, x2 = +x2, y2 = +y2, r = +r;\n var x0 = this._x1,\n y0 = this._y1,\n x21 = x2 - x1,\n y21 = y2 - y1,\n x01 = x0 - x1,\n y01 = y0 - y1,\n l01_2 = x01 * x01 + y01 * y01;\n\n // Is the radius negative? Error.\n if (r < 0) throw new Error(\"negative radius: \" + r);\n\n // Is this path empty? Move to (x1,y1).\n if (this._x1 === null) {\n this._ += \"M\" + (this._x1 = x1) + \",\" + (this._y1 = y1);\n }\n\n // Or, is (x1,y1) coincident with (x0,y0)? Do nothing.\n else if (!(l01_2 > epsilon));\n\n // Or, are (x0,y0), (x1,y1) and (x2,y2) collinear?\n // Equivalently, is (x1,y1) coincident with (x2,y2)?\n // Or, is the radius zero? Line to (x1,y1).\n else if (!(Math.abs(y01 * x21 - y21 * x01) > epsilon) || !r) {\n this._ += \"L\" + (this._x1 = x1) + \",\" + (this._y1 = y1);\n }\n\n // Otherwise, draw an arc!\n else {\n var x20 = x2 - x0,\n y20 = y2 - y0,\n l21_2 = x21 * x21 + y21 * y21,\n l20_2 = x20 * x20 + y20 * y20,\n l21 = Math.sqrt(l21_2),\n l01 = Math.sqrt(l01_2),\n l = r * Math.tan((pi - Math.acos((l21_2 + l01_2 - l20_2) / (2 * l21 * l01))) / 2),\n t01 = l / l01,\n t21 = l / l21;\n\n // If the start tangent is not coincident with (x0,y0), line to.\n if (Math.abs(t01 - 1) > epsilon) {\n this._ += \"L\" + (x1 + t01 * x01) + \",\" + (y1 + t01 * y01);\n }\n\n this._ += \"A\" + r + \",\" + r + \",0,0,\" + (+(y01 * x20 > x01 * y20)) + \",\" + (this._x1 = x1 + t21 * x21) + \",\" + (this._y1 = y1 + t21 * y21);\n }\n },\n arc: function(x, y, r, a0, a1, ccw) {\n x = +x, y = +y, r = +r;\n var dx = r * Math.cos(a0),\n dy = r * Math.sin(a0),\n x0 = x + dx,\n y0 = y + dy,\n cw = 1 ^ ccw,\n da = ccw ? a0 - a1 : a1 - a0;\n\n // Is the radius negative? Error.\n if (r < 0) throw new Error(\"negative radius: \" + r);\n\n // Is this path empty? Move to (x0,y0).\n if (this._x1 === null) {\n this._ += \"M\" + x0 + \",\" + y0;\n }\n\n // Or, is (x0,y0) not coincident with the previous point? Line to (x0,y0).\n else if (Math.abs(this._x1 - x0) > epsilon || Math.abs(this._y1 - y0) > epsilon) {\n this._ += \"L\" + x0 + \",\" + y0;\n }\n\n // Is this arc empty? We’re done.\n if (!r) return;\n\n // Does the angle go the wrong way? Flip the direction.\n if (da < 0) da = da % tau + tau;\n\n // Is this a complete circle? Draw two arcs to complete the circle.\n if (da > tauEpsilon) {\n this._ += \"A\" + r + \",\" + r + \",0,1,\" + cw + \",\" + (x - dx) + \",\" + (y - dy) + \"A\" + r + \",\" + r + \",0,1,\" + cw + \",\" + (this._x1 = x0) + \",\" + (this._y1 = y0);\n }\n\n // Is this arc non-empty? Draw an arc!\n else if (da > epsilon) {\n this._ += \"A\" + r + \",\" + r + \",0,\" + (+(da >= pi)) + \",\" + cw + \",\" + (this._x1 = x + r * Math.cos(a1)) + \",\" + (this._y1 = y + r * Math.sin(a1));\n }\n },\n rect: function(x, y, w, h) {\n this._ += \"M\" + (this._x0 = this._x1 = +x) + \",\" + (this._y0 = this._y1 = +y) + \"h\" + (+w) + \"v\" + (+h) + \"h\" + (-w) + \"Z\";\n },\n toString: function() {\n return this._;\n }\n};\n\nexport default path;\n","export default function(x) {\n return function constant() {\n return x;\n };\n}\n","export var abs = Math.abs;\nexport var atan2 = Math.atan2;\nexport var cos = Math.cos;\nexport var max = Math.max;\nexport var min = Math.min;\nexport var sin = Math.sin;\nexport var sqrt = Math.sqrt;\n\nexport var epsilon = 1e-12;\nexport var pi = Math.PI;\nexport var halfPi = pi / 2;\nexport var tau = 2 * pi;\n\nexport function acos(x) {\n return x > 1 ? 0 : x < -1 ? pi : Math.acos(x);\n}\n\nexport function asin(x) {\n return x >= 1 ? halfPi : x <= -1 ? -halfPi : Math.asin(x);\n}\n","import {path} from \"d3-path\";\nimport constant from \"./constant\";\nimport {abs, acos, asin, atan2, cos, epsilon, halfPi, max, min, pi, sin, sqrt, tau} from \"./math\";\n\nfunction arcInnerRadius(d) {\n return d.innerRadius;\n}\n\nfunction arcOuterRadius(d) {\n return d.outerRadius;\n}\n\nfunction arcStartAngle(d) {\n return d.startAngle;\n}\n\nfunction arcEndAngle(d) {\n return d.endAngle;\n}\n\nfunction arcPadAngle(d) {\n return d && d.padAngle; // Note: optional!\n}\n\nfunction intersect(x0, y0, x1, y1, x2, y2, x3, y3) {\n var x10 = x1 - x0, y10 = y1 - y0,\n x32 = x3 - x2, y32 = y3 - y2,\n t = (x32 * (y0 - y2) - y32 * (x0 - x2)) / (y32 * x10 - x32 * y10);\n return [x0 + t * x10, y0 + t * y10];\n}\n\n// Compute perpendicular offset line of length rc.\n// http://mathworld.wolfram.com/Circle-LineIntersection.html\nfunction cornerTangents(x0, y0, x1, y1, r1, rc, cw) {\n var x01 = x0 - x1,\n y01 = y0 - y1,\n lo = (cw ? rc : -rc) / sqrt(x01 * x01 + y01 * y01),\n ox = lo * y01,\n oy = -lo * x01,\n x11 = x0 + ox,\n y11 = y0 + oy,\n x10 = x1 + ox,\n y10 = y1 + oy,\n x00 = (x11 + x10) / 2,\n y00 = (y11 + y10) / 2,\n dx = x10 - x11,\n dy = y10 - y11,\n d2 = dx * dx + dy * dy,\n r = r1 - rc,\n D = x11 * y10 - x10 * y11,\n d = (dy < 0 ? -1 : 1) * sqrt(max(0, r * r * d2 - D * D)),\n cx0 = (D * dy - dx * d) / d2,\n cy0 = (-D * dx - dy * d) / d2,\n cx1 = (D * dy + dx * d) / d2,\n cy1 = (-D * dx + dy * d) / d2,\n dx0 = cx0 - x00,\n dy0 = cy0 - y00,\n dx1 = cx1 - x00,\n dy1 = cy1 - y00;\n\n // Pick the closer of the two intersection points.\n // TODO Is there a faster way to determine which intersection to use?\n if (dx0 * dx0 + dy0 * dy0 > dx1 * dx1 + dy1 * dy1) cx0 = cx1, cy0 = cy1;\n\n return {\n cx: cx0,\n cy: cy0,\n x01: -ox,\n y01: -oy,\n x11: cx0 * (r1 / r - 1),\n y11: cy0 * (r1 / r - 1)\n };\n}\n\nexport default function() {\n var innerRadius = arcInnerRadius,\n outerRadius = arcOuterRadius,\n cornerRadius = constant(0),\n padRadius = null,\n startAngle = arcStartAngle,\n endAngle = arcEndAngle,\n padAngle = arcPadAngle,\n context = null;\n\n function arc() {\n var buffer,\n r,\n r0 = +innerRadius.apply(this, arguments),\n r1 = +outerRadius.apply(this, arguments),\n a0 = startAngle.apply(this, arguments) - halfPi,\n a1 = endAngle.apply(this, arguments) - halfPi,\n da = abs(a1 - a0),\n cw = a1 > a0;\n\n if (!context) context = buffer = path();\n\n // Ensure that the outer radius is always larger than the inner radius.\n if (r1 < r0) r = r1, r1 = r0, r0 = r;\n\n // Is it a point?\n if (!(r1 > epsilon)) context.moveTo(0, 0);\n\n // Or is it a circle or annulus?\n else if (da > tau - epsilon) {\n context.moveTo(r1 * cos(a0), r1 * sin(a0));\n context.arc(0, 0, r1, a0, a1, !cw);\n if (r0 > epsilon) {\n context.moveTo(r0 * cos(a1), r0 * sin(a1));\n context.arc(0, 0, r0, a1, a0, cw);\n }\n }\n\n // Or is it a circular or annular sector?\n else {\n var a01 = a0,\n a11 = a1,\n a00 = a0,\n a10 = a1,\n da0 = da,\n da1 = da,\n ap = padAngle.apply(this, arguments) / 2,\n rp = (ap > epsilon) && (padRadius ? +padRadius.apply(this, arguments) : sqrt(r0 * r0 + r1 * r1)),\n rc = min(abs(r1 - r0) / 2, +cornerRadius.apply(this, arguments)),\n rc0 = rc,\n rc1 = rc,\n t0,\n t1;\n\n // Apply padding? Note that since r1 ≥ r0, da1 ≥ da0.\n if (rp > epsilon) {\n var p0 = asin(rp / r0 * sin(ap)),\n p1 = asin(rp / r1 * sin(ap));\n if ((da0 -= p0 * 2) > epsilon) p0 *= (cw ? 1 : -1), a00 += p0, a10 -= p0;\n else da0 = 0, a00 = a10 = (a0 + a1) / 2;\n if ((da1 -= p1 * 2) > epsilon) p1 *= (cw ? 1 : -1), a01 += p1, a11 -= p1;\n else da1 = 0, a01 = a11 = (a0 + a1) / 2;\n }\n\n var x01 = r1 * cos(a01),\n y01 = r1 * sin(a01),\n x10 = r0 * cos(a10),\n y10 = r0 * sin(a10);\n\n // Apply rounded corners?\n if (rc > epsilon) {\n var x11 = r1 * cos(a11),\n y11 = r1 * sin(a11),\n x00 = r0 * cos(a00),\n y00 = r0 * sin(a00);\n\n // Restrict the corner radius according to the sector angle.\n if (da < pi) {\n var oc = da0 > epsilon ? intersect(x01, y01, x00, y00, x11, y11, x10, y10) : [x10, y10],\n ax = x01 - oc[0],\n ay = y01 - oc[1],\n bx = x11 - oc[0],\n by = y11 - oc[1],\n kc = 1 / sin(acos((ax * bx + ay * by) / (sqrt(ax * ax + ay * ay) * sqrt(bx * bx + by * by))) / 2),\n lc = sqrt(oc[0] * oc[0] + oc[1] * oc[1]);\n rc0 = min(rc, (r0 - lc) / (kc - 1));\n rc1 = min(rc, (r1 - lc) / (kc + 1));\n }\n }\n\n // Is the sector collapsed to a line?\n if (!(da1 > epsilon)) context.moveTo(x01, y01);\n\n // Does the sector’s outer ring have rounded corners?\n else if (rc1 > epsilon) {\n t0 = cornerTangents(x00, y00, x01, y01, r1, rc1, cw);\n t1 = cornerTangents(x11, y11, x10, y10, r1, rc1, cw);\n\n context.moveTo(t0.cx + t0.x01, t0.cy + t0.y01);\n\n // Have the corners merged?\n if (rc1 < rc) context.arc(t0.cx, t0.cy, rc1, atan2(t0.y01, t0.x01), atan2(t1.y01, t1.x01), !cw);\n\n // Otherwise, draw the two corners and the ring.\n else {\n context.arc(t0.cx, t0.cy, rc1, atan2(t0.y01, t0.x01), atan2(t0.y11, t0.x11), !cw);\n context.arc(0, 0, r1, atan2(t0.cy + t0.y11, t0.cx + t0.x11), atan2(t1.cy + t1.y11, t1.cx + t1.x11), !cw);\n context.arc(t1.cx, t1.cy, rc1, atan2(t1.y11, t1.x11), atan2(t1.y01, t1.x01), !cw);\n }\n }\n\n // Or is the outer ring just a circular arc?\n else context.moveTo(x01, y01), context.arc(0, 0, r1, a01, a11, !cw);\n\n // Is there no inner ring, and it’s a circular sector?\n // Or perhaps it’s an annular sector collapsed due to padding?\n if (!(r0 > epsilon) || !(da0 > epsilon)) context.lineTo(x10, y10);\n\n // Does the sector’s inner ring (or point) have rounded corners?\n else if (rc0 > epsilon) {\n t0 = cornerTangents(x10, y10, x11, y11, r0, -rc0, cw);\n t1 = cornerTangents(x01, y01, x00, y00, r0, -rc0, cw);\n\n context.lineTo(t0.cx + t0.x01, t0.cy + t0.y01);\n\n // Have the corners merged?\n if (rc0 < rc) context.arc(t0.cx, t0.cy, rc0, atan2(t0.y01, t0.x01), atan2(t1.y01, t1.x01), !cw);\n\n // Otherwise, draw the two corners and the ring.\n else {\n context.arc(t0.cx, t0.cy, rc0, atan2(t0.y01, t0.x01), atan2(t0.y11, t0.x11), !cw);\n context.arc(0, 0, r0, atan2(t0.cy + t0.y11, t0.cx + t0.x11), atan2(t1.cy + t1.y11, t1.cx + t1.x11), cw);\n context.arc(t1.cx, t1.cy, rc0, atan2(t1.y11, t1.x11), atan2(t1.y01, t1.x01), !cw);\n }\n }\n\n // Or is the inner ring just a circular arc?\n else context.arc(0, 0, r0, a10, a00, cw);\n }\n\n context.closePath();\n\n if (buffer) return context = null, buffer + \"\" || null;\n }\n\n arc.centroid = function() {\n var r = (+innerRadius.apply(this, arguments) + +outerRadius.apply(this, arguments)) / 2,\n a = (+startAngle.apply(this, arguments) + +endAngle.apply(this, arguments)) / 2 - pi / 2;\n return [cos(a) * r, sin(a) * r];\n };\n\n arc.innerRadius = function(_) {\n return arguments.length ? (innerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : innerRadius;\n };\n\n arc.outerRadius = function(_) {\n return arguments.length ? (outerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : outerRadius;\n };\n\n arc.cornerRadius = function(_) {\n return arguments.length ? (cornerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : cornerRadius;\n };\n\n arc.padRadius = function(_) {\n return arguments.length ? (padRadius = _ == null ? null : typeof _ === \"function\" ? _ : constant(+_), arc) : padRadius;\n };\n\n arc.startAngle = function(_) {\n return arguments.length ? (startAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : startAngle;\n };\n\n arc.endAngle = function(_) {\n return arguments.length ? (endAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : endAngle;\n };\n\n arc.padAngle = function(_) {\n return arguments.length ? (padAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : padAngle;\n };\n\n arc.context = function(_) {\n return arguments.length ? ((context = _ == null ? null : _), arc) : context;\n };\n\n return arc;\n}\n","function Linear(context) {\n this._context = context;\n}\n\nLinear.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; // proceed\n default: this._context.lineTo(x, y); break;\n }\n }\n};\n\nexport default function(context) {\n return new Linear(context);\n}\n","export function x(p) {\n return p[0];\n}\n\nexport function y(p) {\n return p[1];\n}\n","import {path} from \"d3-path\";\nimport constant from \"./constant\";\nimport curveLinear from \"./curve/linear\";\nimport {x as pointX, y as pointY} from \"./point\";\n\nexport default function() {\n var x = pointX,\n y = pointY,\n defined = constant(true),\n context = null,\n curve = curveLinear,\n output = null;\n\n function line(data) {\n var i,\n n = data.length,\n d,\n defined0 = false,\n buffer;\n\n if (context == null) output = curve(buffer = path());\n\n for (i = 0; i <= n; ++i) {\n if (!(i < n && defined(d = data[i], i, data)) === defined0) {\n if (defined0 = !defined0) output.lineStart();\n else output.lineEnd();\n }\n if (defined0) output.point(+x(d, i, data), +y(d, i, data));\n }\n\n if (buffer) return output = null, buffer + \"\" || null;\n }\n\n line.x = function(_) {\n return arguments.length ? (x = typeof _ === \"function\" ? _ : constant(+_), line) : x;\n };\n\n line.y = function(_) {\n return arguments.length ? (y = typeof _ === \"function\" ? _ : constant(+_), line) : y;\n };\n\n line.defined = function(_) {\n return arguments.length ? (defined = typeof _ === \"function\" ? _ : constant(!!_), line) : defined;\n };\n\n line.curve = function(_) {\n return arguments.length ? (curve = _, context != null && (output = curve(context)), line) : curve;\n };\n\n line.context = function(_) {\n return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), line) : context;\n };\n\n return line;\n}\n","import {path} from \"d3-path\";\nimport constant from \"./constant\";\nimport curveLinear from \"./curve/linear\";\nimport line from \"./line\";\nimport {x as pointX, y as pointY} from \"./point\";\n\nexport default function() {\n var x0 = pointX,\n x1 = null,\n y0 = constant(0),\n y1 = pointY,\n defined = constant(true),\n context = null,\n curve = curveLinear,\n output = null;\n\n function area(data) {\n var i,\n j,\n k,\n n = data.length,\n d,\n defined0 = false,\n buffer,\n x0z = new Array(n),\n y0z = new Array(n);\n\n if (context == null) output = curve(buffer = path());\n\n for (i = 0; i <= n; ++i) {\n if (!(i < n && defined(d = data[i], i, data)) === defined0) {\n if (defined0 = !defined0) {\n j = i;\n output.areaStart();\n output.lineStart();\n } else {\n output.lineEnd();\n output.lineStart();\n for (k = i - 1; k >= j; --k) {\n output.point(x0z[k], y0z[k]);\n }\n output.lineEnd();\n output.areaEnd();\n }\n }\n if (defined0) {\n x0z[i] = +x0(d, i, data), y0z[i] = +y0(d, i, data);\n output.point(x1 ? +x1(d, i, data) : x0z[i], y1 ? +y1(d, i, data) : y0z[i]);\n }\n }\n\n if (buffer) return output = null, buffer + \"\" || null;\n }\n\n function arealine() {\n return line().defined(defined).curve(curve).context(context);\n }\n\n area.x = function(_) {\n return arguments.length ? (x0 = typeof _ === \"function\" ? _ : constant(+_), x1 = null, area) : x0;\n };\n\n area.x0 = function(_) {\n return arguments.length ? (x0 = typeof _ === \"function\" ? _ : constant(+_), area) : x0;\n };\n\n area.x1 = function(_) {\n return arguments.length ? (x1 = _ == null ? null : typeof _ === \"function\" ? _ : constant(+_), area) : x1;\n };\n\n area.y = function(_) {\n return arguments.length ? (y0 = typeof _ === \"function\" ? _ : constant(+_), y1 = null, area) : y0;\n };\n\n area.y0 = function(_) {\n return arguments.length ? (y0 = typeof _ === \"function\" ? _ : constant(+_), area) : y0;\n };\n\n area.y1 = function(_) {\n return arguments.length ? (y1 = _ == null ? null : typeof _ === \"function\" ? _ : constant(+_), area) : y1;\n };\n\n area.lineX0 =\n area.lineY0 = function() {\n return arealine().x(x0).y(y0);\n };\n\n area.lineY1 = function() {\n return arealine().x(x0).y(y1);\n };\n\n area.lineX1 = function() {\n return arealine().x(x1).y(y0);\n };\n\n area.defined = function(_) {\n return arguments.length ? (defined = typeof _ === \"function\" ? _ : constant(!!_), area) : defined;\n };\n\n area.curve = function(_) {\n return arguments.length ? (curve = _, context != null && (output = curve(context)), area) : curve;\n };\n\n area.context = function(_) {\n return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), area) : context;\n };\n\n return area;\n}\n","export default function(a, b) {\n return b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN;\n}\n","export default function(d) {\n return d;\n}\n","import curveLinear from \"./linear\";\n\nexport var curveRadialLinear = curveRadial(curveLinear);\n\nfunction Radial(curve) {\n this._curve = curve;\n}\n\nRadial.prototype = {\n areaStart: function() {\n this._curve.areaStart();\n },\n areaEnd: function() {\n this._curve.areaEnd();\n },\n lineStart: function() {\n this._curve.lineStart();\n },\n lineEnd: function() {\n this._curve.lineEnd();\n },\n point: function(a, r) {\n this._curve.point(r * Math.sin(a), r * -Math.cos(a));\n }\n};\n\nexport default function curveRadial(curve) {\n\n function radial(context) {\n return new Radial(curve(context));\n }\n\n radial._curve = curve;\n\n return radial;\n}\n","import curveRadial, {curveRadialLinear} from \"./curve/radial\";\nimport line from \"./line\";\n\nexport function lineRadial(l) {\n var c = l.curve;\n\n l.angle = l.x, delete l.x;\n l.radius = l.y, delete l.y;\n\n l.curve = function(_) {\n return arguments.length ? c(curveRadial(_)) : c()._curve;\n };\n\n return l;\n}\n\nexport default function() {\n return lineRadial(line().curve(curveRadialLinear));\n}\n","export var slice = Array.prototype.slice;\n","import {pi, tau} from \"../math\";\n\nexport default {\n draw: function(context, size) {\n var r = Math.sqrt(size / pi);\n context.moveTo(r, 0);\n context.arc(0, 0, r, 0, tau);\n }\n};\n","export default {\n draw: function(context, size) {\n var r = Math.sqrt(size / 5) / 2;\n context.moveTo(-3 * r, -r);\n context.lineTo(-r, -r);\n context.lineTo(-r, -3 * r);\n context.lineTo(r, -3 * r);\n context.lineTo(r, -r);\n context.lineTo(3 * r, -r);\n context.lineTo(3 * r, r);\n context.lineTo(r, r);\n context.lineTo(r, 3 * r);\n context.lineTo(-r, 3 * r);\n context.lineTo(-r, r);\n context.lineTo(-3 * r, r);\n context.closePath();\n }\n};\n","var tan30 = Math.sqrt(1 / 3),\n tan30_2 = tan30 * 2;\n\nexport default {\n draw: function(context, size) {\n var y = Math.sqrt(size / tan30_2),\n x = y * tan30;\n context.moveTo(0, -y);\n context.lineTo(x, 0);\n context.lineTo(0, y);\n context.lineTo(-x, 0);\n context.closePath();\n }\n};\n","import {pi, tau} from \"../math\";\n\nvar ka = 0.89081309152928522810,\n kr = Math.sin(pi / 10) / Math.sin(7 * pi / 10),\n kx = Math.sin(tau / 10) * kr,\n ky = -Math.cos(tau / 10) * kr;\n\nexport default {\n draw: function(context, size) {\n var r = Math.sqrt(size * ka),\n x = kx * r,\n y = ky * r;\n context.moveTo(0, -r);\n context.lineTo(x, y);\n for (var i = 1; i < 5; ++i) {\n var a = tau * i / 5,\n c = Math.cos(a),\n s = Math.sin(a);\n context.lineTo(s * r, -c * r);\n context.lineTo(c * x - s * y, s * x + c * y);\n }\n context.closePath();\n }\n};\n","export default {\n draw: function(context, size) {\n var w = Math.sqrt(size),\n x = -w / 2;\n context.rect(x, x, w, w);\n }\n};\n","var sqrt3 = Math.sqrt(3);\n\nexport default {\n draw: function(context, size) {\n var y = -Math.sqrt(size / (sqrt3 * 3));\n context.moveTo(0, y * 2);\n context.lineTo(-sqrt3 * y, -y);\n context.lineTo(sqrt3 * y, -y);\n context.closePath();\n }\n};\n","var c = -0.5,\n s = Math.sqrt(3) / 2,\n k = 1 / Math.sqrt(12),\n a = (k / 2 + 1) * 3;\n\nexport default {\n draw: function(context, size) {\n var r = Math.sqrt(size / a),\n x0 = r / 2,\n y0 = r * k,\n x1 = x0,\n y1 = r * k + r,\n x2 = -x1,\n y2 = y1;\n context.moveTo(x0, y0);\n context.lineTo(x1, y1);\n context.lineTo(x2, y2);\n context.lineTo(c * x0 - s * y0, s * x0 + c * y0);\n context.lineTo(c * x1 - s * y1, s * x1 + c * y1);\n context.lineTo(c * x2 - s * y2, s * x2 + c * y2);\n context.lineTo(c * x0 + s * y0, c * y0 - s * x0);\n context.lineTo(c * x1 + s * y1, c * y1 - s * x1);\n context.lineTo(c * x2 + s * y2, c * y2 - s * x2);\n context.closePath();\n }\n};\n","export default function() {}\n","export function point(that, x, y) {\n that._context.bezierCurveTo(\n (2 * that._x0 + that._x1) / 3,\n (2 * that._y0 + that._y1) / 3,\n (that._x0 + 2 * that._x1) / 3,\n (that._y0 + 2 * that._y1) / 3,\n (that._x0 + 4 * that._x1 + x) / 6,\n (that._y0 + 4 * that._y1 + y) / 6\n );\n}\n\nexport function Basis(context) {\n this._context = context;\n}\n\nBasis.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 =\n this._y0 = this._y1 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 3: point(this, this._x1, this._y1); // proceed\n case 2: this._context.lineTo(this._x1, this._y1); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; this._context.lineTo((5 * this._x0 + this._x1) / 6, (5 * this._y0 + this._y1) / 6); // proceed\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n }\n};\n\nexport default function(context) {\n return new Basis(context);\n}\n","import noop from \"../noop\";\nimport {point} from \"./basis\";\n\nfunction BasisClosed(context) {\n this._context = context;\n}\n\nBasisClosed.prototype = {\n areaStart: noop,\n areaEnd: noop,\n lineStart: function() {\n this._x0 = this._x1 = this._x2 = this._x3 = this._x4 =\n this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 1: {\n this._context.moveTo(this._x2, this._y2);\n this._context.closePath();\n break;\n }\n case 2: {\n this._context.moveTo((this._x2 + 2 * this._x3) / 3, (this._y2 + 2 * this._y3) / 3);\n this._context.lineTo((this._x3 + 2 * this._x2) / 3, (this._y3 + 2 * this._y2) / 3);\n this._context.closePath();\n break;\n }\n case 3: {\n this.point(this._x2, this._y2);\n this.point(this._x3, this._y3);\n this.point(this._x4, this._y4);\n break;\n }\n }\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._x2 = x, this._y2 = y; break;\n case 1: this._point = 2; this._x3 = x, this._y3 = y; break;\n case 2: this._point = 3; this._x4 = x, this._y4 = y; this._context.moveTo((this._x0 + 4 * this._x1 + x) / 6, (this._y0 + 4 * this._y1 + y) / 6); break;\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n }\n};\n\nexport default function(context) {\n return new BasisClosed(context);\n}\n","import {point} from \"./basis\";\n\nfunction BasisOpen(context) {\n this._context = context;\n}\n\nBasisOpen.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 =\n this._y0 = this._y1 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; var x0 = (this._x0 + 4 * this._x1 + x) / 6, y0 = (this._y0 + 4 * this._y1 + y) / 6; this._line ? this._context.lineTo(x0, y0) : this._context.moveTo(x0, y0); break;\n case 3: this._point = 4; // proceed\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n }\n};\n\nexport default function(context) {\n return new BasisOpen(context);\n}\n","import {Basis} from \"./basis\";\n\nfunction Bundle(context, beta) {\n this._basis = new Basis(context);\n this._beta = beta;\n}\n\nBundle.prototype = {\n lineStart: function() {\n this._x = [];\n this._y = [];\n this._basis.lineStart();\n },\n lineEnd: function() {\n var x = this._x,\n y = this._y,\n j = x.length - 1;\n\n if (j > 0) {\n var x0 = x[0],\n y0 = y[0],\n dx = x[j] - x0,\n dy = y[j] - y0,\n i = -1,\n t;\n\n while (++i <= j) {\n t = i / j;\n this._basis.point(\n this._beta * x[i] + (1 - this._beta) * (x0 + t * dx),\n this._beta * y[i] + (1 - this._beta) * (y0 + t * dy)\n );\n }\n }\n\n this._x = this._y = null;\n this._basis.lineEnd();\n },\n point: function(x, y) {\n this._x.push(+x);\n this._y.push(+y);\n }\n};\n\nexport default (function custom(beta) {\n\n function bundle(context) {\n return beta === 1 ? new Basis(context) : new Bundle(context, beta);\n }\n\n bundle.beta = function(beta) {\n return custom(+beta);\n };\n\n return bundle;\n})(0.85);\n","export function point(that, x, y) {\n that._context.bezierCurveTo(\n that._x1 + that._k * (that._x2 - that._x0),\n that._y1 + that._k * (that._y2 - that._y0),\n that._x2 + that._k * (that._x1 - x),\n that._y2 + that._k * (that._y1 - y),\n that._x2,\n that._y2\n );\n}\n\nexport function Cardinal(context, tension) {\n this._context = context;\n this._k = (1 - tension) / 6;\n}\n\nCardinal.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 2: this._context.lineTo(this._x2, this._y2); break;\n case 3: point(this, this._x1, this._y1); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; this._x1 = x, this._y1 = y; break;\n case 2: this._point = 3; // proceed\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(tension) {\n\n function cardinal(context) {\n return new Cardinal(context, tension);\n }\n\n cardinal.tension = function(tension) {\n return custom(+tension);\n };\n\n return cardinal;\n})(0);\n","import noop from \"../noop\";\nimport {point} from \"./cardinal\";\n\nexport function CardinalClosed(context, tension) {\n this._context = context;\n this._k = (1 - tension) / 6;\n}\n\nCardinalClosed.prototype = {\n areaStart: noop,\n areaEnd: noop,\n lineStart: function() {\n this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = this._x5 =\n this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = this._y5 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 1: {\n this._context.moveTo(this._x3, this._y3);\n this._context.closePath();\n break;\n }\n case 2: {\n this._context.lineTo(this._x3, this._y3);\n this._context.closePath();\n break;\n }\n case 3: {\n this.point(this._x3, this._y3);\n this.point(this._x4, this._y4);\n this.point(this._x5, this._y5);\n break;\n }\n }\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._x3 = x, this._y3 = y; break;\n case 1: this._point = 2; this._context.moveTo(this._x4 = x, this._y4 = y); break;\n case 2: this._point = 3; this._x5 = x, this._y5 = y; break;\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(tension) {\n\n function cardinal(context) {\n return new CardinalClosed(context, tension);\n }\n\n cardinal.tension = function(tension) {\n return custom(+tension);\n };\n\n return cardinal;\n})(0);\n","import {point} from \"./cardinal\";\n\nexport function CardinalOpen(context, tension) {\n this._context = context;\n this._k = (1 - tension) / 6;\n}\n\nCardinalOpen.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; this._line ? this._context.lineTo(this._x2, this._y2) : this._context.moveTo(this._x2, this._y2); break;\n case 3: this._point = 4; // proceed\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(tension) {\n\n function cardinal(context) {\n return new CardinalOpen(context, tension);\n }\n\n cardinal.tension = function(tension) {\n return custom(+tension);\n };\n\n return cardinal;\n})(0);\n","import {epsilon} from \"../math\";\nimport {Cardinal} from \"./cardinal\";\n\nexport function point(that, x, y) {\n var x1 = that._x1,\n y1 = that._y1,\n x2 = that._x2,\n y2 = that._y2;\n\n if (that._l01_a > epsilon) {\n var a = 2 * that._l01_2a + 3 * that._l01_a * that._l12_a + that._l12_2a,\n n = 3 * that._l01_a * (that._l01_a + that._l12_a);\n x1 = (x1 * a - that._x0 * that._l12_2a + that._x2 * that._l01_2a) / n;\n y1 = (y1 * a - that._y0 * that._l12_2a + that._y2 * that._l01_2a) / n;\n }\n\n if (that._l23_a > epsilon) {\n var b = 2 * that._l23_2a + 3 * that._l23_a * that._l12_a + that._l12_2a,\n m = 3 * that._l23_a * (that._l23_a + that._l12_a);\n x2 = (x2 * b + that._x1 * that._l23_2a - x * that._l12_2a) / m;\n y2 = (y2 * b + that._y1 * that._l23_2a - y * that._l12_2a) / m;\n }\n\n that._context.bezierCurveTo(x1, y1, x2, y2, that._x2, that._y2);\n}\n\nfunction CatmullRom(context, alpha) {\n this._context = context;\n this._alpha = alpha;\n}\n\nCatmullRom.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._l01_a = this._l12_a = this._l23_a =\n this._l01_2a = this._l12_2a = this._l23_2a =\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 2: this._context.lineTo(this._x2, this._y2); break;\n case 3: this.point(this._x2, this._y2); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n\n if (this._point) {\n var x23 = this._x2 - x,\n y23 = this._y2 - y;\n this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));\n }\n\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; // proceed\n default: point(this, x, y); break;\n }\n\n this._l01_a = this._l12_a, this._l12_a = this._l23_a;\n this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(alpha) {\n\n function catmullRom(context) {\n return alpha ? new CatmullRom(context, alpha) : new Cardinal(context, 0);\n }\n\n catmullRom.alpha = function(alpha) {\n return custom(+alpha);\n };\n\n return catmullRom;\n})(0.5);\n","import {CardinalClosed} from \"./cardinalClosed\";\nimport noop from \"../noop\";\nimport {point} from \"./catmullRom\";\n\nfunction CatmullRomClosed(context, alpha) {\n this._context = context;\n this._alpha = alpha;\n}\n\nCatmullRomClosed.prototype = {\n areaStart: noop,\n areaEnd: noop,\n lineStart: function() {\n this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = this._x5 =\n this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = this._y5 = NaN;\n this._l01_a = this._l12_a = this._l23_a =\n this._l01_2a = this._l12_2a = this._l23_2a =\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 1: {\n this._context.moveTo(this._x3, this._y3);\n this._context.closePath();\n break;\n }\n case 2: {\n this._context.lineTo(this._x3, this._y3);\n this._context.closePath();\n break;\n }\n case 3: {\n this.point(this._x3, this._y3);\n this.point(this._x4, this._y4);\n this.point(this._x5, this._y5);\n break;\n }\n }\n },\n point: function(x, y) {\n x = +x, y = +y;\n\n if (this._point) {\n var x23 = this._x2 - x,\n y23 = this._y2 - y;\n this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));\n }\n\n switch (this._point) {\n case 0: this._point = 1; this._x3 = x, this._y3 = y; break;\n case 1: this._point = 2; this._context.moveTo(this._x4 = x, this._y4 = y); break;\n case 2: this._point = 3; this._x5 = x, this._y5 = y; break;\n default: point(this, x, y); break;\n }\n\n this._l01_a = this._l12_a, this._l12_a = this._l23_a;\n this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(alpha) {\n\n function catmullRom(context) {\n return alpha ? new CatmullRomClosed(context, alpha) : new CardinalClosed(context, 0);\n }\n\n catmullRom.alpha = function(alpha) {\n return custom(+alpha);\n };\n\n return catmullRom;\n})(0.5);\n","import {CardinalOpen} from \"./cardinalOpen\";\nimport {point} from \"./catmullRom\";\n\nfunction CatmullRomOpen(context, alpha) {\n this._context = context;\n this._alpha = alpha;\n}\n\nCatmullRomOpen.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._l01_a = this._l12_a = this._l23_a =\n this._l01_2a = this._l12_2a = this._l23_2a =\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n\n if (this._point) {\n var x23 = this._x2 - x,\n y23 = this._y2 - y;\n this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));\n }\n\n switch (this._point) {\n case 0: this._point = 1; break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; this._line ? this._context.lineTo(this._x2, this._y2) : this._context.moveTo(this._x2, this._y2); break;\n case 3: this._point = 4; // proceed\n default: point(this, x, y); break;\n }\n\n this._l01_a = this._l12_a, this._l12_a = this._l23_a;\n this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(alpha) {\n\n function catmullRom(context) {\n return alpha ? new CatmullRomOpen(context, alpha) : new CardinalOpen(context, 0);\n }\n\n catmullRom.alpha = function(alpha) {\n return custom(+alpha);\n };\n\n return catmullRom;\n})(0.5);\n","import noop from \"../noop\";\n\nfunction LinearClosed(context) {\n this._context = context;\n}\n\nLinearClosed.prototype = {\n areaStart: noop,\n areaEnd: noop,\n lineStart: function() {\n this._point = 0;\n },\n lineEnd: function() {\n if (this._point) this._context.closePath();\n },\n point: function(x, y) {\n x = +x, y = +y;\n if (this._point) this._context.lineTo(x, y);\n else this._point = 1, this._context.moveTo(x, y);\n }\n};\n\nexport default function(context) {\n return new LinearClosed(context);\n}\n","function sign(x) {\n return x < 0 ? -1 : 1;\n}\n\n// Calculate the slopes of the tangents (Hermite-type interpolation) based on\n// the following paper: Steffen, M. 1990. A Simple Method for Monotonic\n// Interpolation in One Dimension. Astronomy and Astrophysics, Vol. 239, NO.\n// NOV(II), P. 443, 1990.\nfunction slope3(that, x2, y2) {\n var h0 = that._x1 - that._x0,\n h1 = x2 - that._x1,\n s0 = (that._y1 - that._y0) / (h0 || h1 < 0 && -0),\n s1 = (y2 - that._y1) / (h1 || h0 < 0 && -0),\n p = (s0 * h1 + s1 * h0) / (h0 + h1);\n return (sign(s0) + sign(s1)) * Math.min(Math.abs(s0), Math.abs(s1), 0.5 * Math.abs(p)) || 0;\n}\n\n// Calculate a one-sided slope.\nfunction slope2(that, t) {\n var h = that._x1 - that._x0;\n return h ? (3 * (that._y1 - that._y0) / h - t) / 2 : t;\n}\n\n// According to https://en.wikipedia.org/wiki/Cubic_Hermite_spline#Representations\n// \"you can express cubic Hermite interpolation in terms of cubic Bézier curves\n// with respect to the four values p0, p0 + m0 / 3, p1 - m1 / 3, p1\".\nfunction point(that, t0, t1) {\n var x0 = that._x0,\n y0 = that._y0,\n x1 = that._x1,\n y1 = that._y1,\n dx = (x1 - x0) / 3;\n that._context.bezierCurveTo(x0 + dx, y0 + dx * t0, x1 - dx, y1 - dx * t1, x1, y1);\n}\n\nfunction MonotoneX(context) {\n this._context = context;\n}\n\nMonotoneX.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 =\n this._y0 = this._y1 =\n this._t0 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 2: this._context.lineTo(this._x1, this._y1); break;\n case 3: point(this, this._t0, slope2(this, this._t0)); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n var t1 = NaN;\n\n x = +x, y = +y;\n if (x === this._x1 && y === this._y1) return; // Ignore coincident points.\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; point(this, slope2(this, t1 = slope3(this, x, y)), t1); break;\n default: point(this, this._t0, t1 = slope3(this, x, y)); break;\n }\n\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n this._t0 = t1;\n }\n}\n\nfunction MonotoneY(context) {\n this._context = new ReflectContext(context);\n}\n\n(MonotoneY.prototype = Object.create(MonotoneX.prototype)).point = function(x, y) {\n MonotoneX.prototype.point.call(this, y, x);\n};\n\nfunction ReflectContext(context) {\n this._context = context;\n}\n\nReflectContext.prototype = {\n moveTo: function(x, y) { this._context.moveTo(y, x); },\n closePath: function() { this._context.closePath(); },\n lineTo: function(x, y) { this._context.lineTo(y, x); },\n bezierCurveTo: function(x1, y1, x2, y2, x, y) { this._context.bezierCurveTo(y1, x1, y2, x2, y, x); }\n};\n\nexport function monotoneX(context) {\n return new MonotoneX(context);\n}\n\nexport function monotoneY(context) {\n return new MonotoneY(context);\n}\n","function Natural(context) {\n this._context = context;\n}\n\nNatural.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x = [];\n this._y = [];\n },\n lineEnd: function() {\n var x = this._x,\n y = this._y,\n n = x.length;\n\n if (n) {\n this._line ? this._context.lineTo(x[0], y[0]) : this._context.moveTo(x[0], y[0]);\n if (n === 2) {\n this._context.lineTo(x[1], y[1]);\n } else {\n var px = controlPoints(x),\n py = controlPoints(y);\n for (var i0 = 0, i1 = 1; i1 < n; ++i0, ++i1) {\n this._context.bezierCurveTo(px[0][i0], py[0][i0], px[1][i0], py[1][i0], x[i1], y[i1]);\n }\n }\n }\n\n if (this._line || (this._line !== 0 && n === 1)) this._context.closePath();\n this._line = 1 - this._line;\n this._x = this._y = null;\n },\n point: function(x, y) {\n this._x.push(+x);\n this._y.push(+y);\n }\n};\n\n// See https://www.particleincell.com/2012/bezier-splines/ for derivation.\nfunction controlPoints(x) {\n var i,\n n = x.length - 1,\n m,\n a = new Array(n),\n b = new Array(n),\n r = new Array(n);\n a[0] = 0, b[0] = 2, r[0] = x[0] + 2 * x[1];\n for (i = 1; i < n - 1; ++i) a[i] = 1, b[i] = 4, r[i] = 4 * x[i] + 2 * x[i + 1];\n a[n - 1] = 2, b[n - 1] = 7, r[n - 1] = 8 * x[n - 1] + x[n];\n for (i = 1; i < n; ++i) m = a[i] / b[i - 1], b[i] -= m, r[i] -= m * r[i - 1];\n a[n - 1] = r[n - 1] / b[n - 1];\n for (i = n - 2; i >= 0; --i) a[i] = (r[i] - a[i + 1]) / b[i];\n b[n - 1] = (x[n] + a[n - 1]) / 2;\n for (i = 0; i < n - 1; ++i) b[i] = 2 * x[i + 1] - a[i + 1];\n return [a, b];\n}\n\nexport default function(context) {\n return new Natural(context);\n}\n","function Step(context, t) {\n this._context = context;\n this._t = t;\n}\n\nStep.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x = this._y = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n if (0 < this._t && this._t < 1 && this._point === 2) this._context.lineTo(this._x, this._y);\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n if (this._line >= 0) this._t = 1 - this._t, this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; // proceed\n default: {\n if (this._t <= 0) {\n this._context.lineTo(this._x, y);\n this._context.lineTo(x, y);\n } else {\n var x1 = this._x * (1 - this._t) + x * this._t;\n this._context.lineTo(x1, this._y);\n this._context.lineTo(x1, y);\n }\n break;\n }\n }\n this._x = x, this._y = y;\n }\n};\n\nexport default function(context) {\n return new Step(context, 0.5);\n}\n\nexport function stepBefore(context) {\n return new Step(context, 0);\n}\n\nexport function stepAfter(context) {\n return new Step(context, 1);\n}\n","export default function(series, order) {\n if (!((n = series.length) > 1)) return;\n for (var i = 1, j, s0, s1 = series[order[0]], n, m = s1.length; i < n; ++i) {\n s0 = s1, s1 = series[order[i]];\n for (j = 0; j < m; ++j) {\n s1[j][1] += s1[j][0] = isNaN(s0[j][1]) ? s0[j][0] : s0[j][1];\n }\n }\n}\n","export default function(series) {\n var n = series.length, o = new Array(n);\n while (--n >= 0) o[n] = n;\n return o;\n}\n","import {slice} from \"./array\";\nimport constant from \"./constant\";\nimport offsetNone from \"./offset/none\";\nimport orderNone from \"./order/none\";\n\nfunction stackValue(d, key) {\n return d[key];\n}\n\nexport default function() {\n var keys = constant([]),\n order = orderNone,\n offset = offsetNone,\n value = stackValue;\n\n function stack(data) {\n var kz = keys.apply(this, arguments),\n i,\n m = data.length,\n n = kz.length,\n sz = new Array(n),\n oz;\n\n for (i = 0; i < n; ++i) {\n for (var ki = kz[i], si = sz[i] = new Array(m), j = 0, sij; j < m; ++j) {\n si[j] = sij = [0, +value(data[j], ki, j, data)];\n sij.data = data[j];\n }\n si.key = ki;\n }\n\n for (i = 0, oz = order(sz); i < n; ++i) {\n sz[oz[i]].index = i;\n }\n\n offset(sz, oz);\n return sz;\n }\n\n stack.keys = function(_) {\n return arguments.length ? (keys = typeof _ === \"function\" ? _ : constant(slice.call(_)), stack) : keys;\n };\n\n stack.value = function(_) {\n return arguments.length ? (value = typeof _ === \"function\" ? _ : constant(+_), stack) : value;\n };\n\n stack.order = function(_) {\n return arguments.length ? (order = _ == null ? orderNone : typeof _ === \"function\" ? _ : constant(slice.call(_)), stack) : order;\n };\n\n stack.offset = function(_) {\n return arguments.length ? (offset = _ == null ? offsetNone : _, stack) : offset;\n };\n\n return stack;\n}\n","import none from \"./none\";\n\nexport default function(series) {\n var sums = series.map(sum);\n return none(series).sort(function(a, b) { return sums[a] - sums[b]; });\n}\n\nexport function sum(series) {\n var s = 0, i = -1, n = series.length, v;\n while (++i < n) if (v = +series[i][1]) s += v;\n return s;\n}\n","export function cubicIn(t) {\n return t * t * t;\n}\n\nexport function cubicOut(t) {\n return --t * t * t + 1;\n}\n\nexport function cubicInOut(t) {\n return ((t *= 2) <= 1 ? t * t * t : (t -= 2) * t * t + 2) / 2;\n}\n","var exponent = 3;\n\nexport var polyIn = (function custom(e) {\n e = +e;\n\n function polyIn(t) {\n return Math.pow(t, e);\n }\n\n polyIn.exponent = custom;\n\n return polyIn;\n})(exponent);\n\nexport var polyOut = (function custom(e) {\n e = +e;\n\n function polyOut(t) {\n return 1 - Math.pow(1 - t, e);\n }\n\n polyOut.exponent = custom;\n\n return polyOut;\n})(exponent);\n\nexport var polyInOut = (function custom(e) {\n e = +e;\n\n function polyInOut(t) {\n return ((t *= 2) <= 1 ? Math.pow(t, e) : 2 - Math.pow(2 - t, e)) / 2;\n }\n\n polyInOut.exponent = custom;\n\n return polyInOut;\n})(exponent);\n","var pi = Math.PI,\n halfPi = pi / 2;\n\nexport function sinIn(t) {\n return 1 - Math.cos(t * halfPi);\n}\n\nexport function sinOut(t) {\n return Math.sin(t * halfPi);\n}\n\nexport function sinInOut(t) {\n return (1 - Math.cos(pi * t)) / 2;\n}\n","var b1 = 4 / 11,\n b2 = 6 / 11,\n b3 = 8 / 11,\n b4 = 3 / 4,\n b5 = 9 / 11,\n b6 = 10 / 11,\n b7 = 15 / 16,\n b8 = 21 / 22,\n b9 = 63 / 64,\n b0 = 1 / b1 / b1;\n\nexport function bounceIn(t) {\n return 1 - bounceOut(1 - t);\n}\n\nexport function bounceOut(t) {\n return (t = +t) < b1 ? b0 * t * t : t < b3 ? b0 * (t -= b2) * t + b4 : t < b6 ? b0 * (t -= b5) * t + b7 : b0 * (t -= b8) * t + b9;\n}\n\nexport function bounceInOut(t) {\n return ((t *= 2) <= 1 ? 1 - bounceOut(1 - t) : bounceOut(t - 1) + 1) / 2;\n}\n","var overshoot = 1.70158;\n\nexport var backIn = (function custom(s) {\n s = +s;\n\n function backIn(t) {\n return t * t * ((s + 1) * t - s);\n }\n\n backIn.overshoot = custom;\n\n return backIn;\n})(overshoot);\n\nexport var backOut = (function custom(s) {\n s = +s;\n\n function backOut(t) {\n return --t * t * ((s + 1) * t + s) + 1;\n }\n\n backOut.overshoot = custom;\n\n return backOut;\n})(overshoot);\n\nexport var backInOut = (function custom(s) {\n s = +s;\n\n function backInOut(t) {\n return ((t *= 2) < 1 ? t * t * ((s + 1) * t - s) : (t -= 2) * t * ((s + 1) * t + s) + 2) / 2;\n }\n\n backInOut.overshoot = custom;\n\n return backInOut;\n})(overshoot);\n","var tau = 2 * Math.PI,\n amplitude = 1,\n period = 0.3;\n\nexport var elasticIn = (function custom(a, p) {\n var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau);\n\n function elasticIn(t) {\n return a * Math.pow(2, 10 * --t) * Math.sin((s - t) / p);\n }\n\n elasticIn.amplitude = function(a) { return custom(a, p * tau); };\n elasticIn.period = function(p) { return custom(a, p); };\n\n return elasticIn;\n})(amplitude, period);\n\nexport var elasticOut = (function custom(a, p) {\n var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau);\n\n function elasticOut(t) {\n return 1 - a * Math.pow(2, -10 * (t = +t)) * Math.sin((t + s) / p);\n }\n\n elasticOut.amplitude = function(a) { return custom(a, p * tau); };\n elasticOut.period = function(p) { return custom(a, p); };\n\n return elasticOut;\n})(amplitude, period);\n\nexport var elasticInOut = (function custom(a, p) {\n var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau);\n\n function elasticInOut(t) {\n return ((t = t * 2 - 1) < 0\n ? a * Math.pow(2, 10 * t) * Math.sin((s - t) / p)\n : 2 - a * Math.pow(2, -10 * t) * Math.sin((s + t) / p)) / 2;\n }\n\n elasticInOut.amplitude = function(a) { return custom(a, p * tau); };\n elasticInOut.period = function(p) { return custom(a, p); };\n\n return elasticInOut;\n})(amplitude, period);\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","export function x(d) {\n return d[0];\n}\n\nexport function y(d) {\n return d[1];\n}\n","function RedBlackTree() {\n this._ = null; // root node\n}\n\nexport function RedBlackNode(node) {\n node.U = // parent node\n node.C = // color - true for red, false for black\n node.L = // left node\n node.R = // right node\n node.P = // previous node\n node.N = null; // next node\n}\n\nRedBlackTree.prototype = {\n constructor: RedBlackTree,\n\n insert: function(after, node) {\n var parent, grandpa, uncle;\n\n if (after) {\n node.P = after;\n node.N = after.N;\n if (after.N) after.N.P = node;\n after.N = node;\n if (after.R) {\n after = after.R;\n while (after.L) after = after.L;\n after.L = node;\n } else {\n after.R = node;\n }\n parent = after;\n } else if (this._) {\n after = RedBlackFirst(this._);\n node.P = null;\n node.N = after;\n after.P = after.L = node;\n parent = after;\n } else {\n node.P = node.N = null;\n this._ = node;\n parent = null;\n }\n node.L = node.R = null;\n node.U = parent;\n node.C = true;\n\n after = node;\n while (parent && parent.C) {\n grandpa = parent.U;\n if (parent === grandpa.L) {\n uncle = grandpa.R;\n if (uncle && uncle.C) {\n parent.C = uncle.C = false;\n grandpa.C = true;\n after = grandpa;\n } else {\n if (after === parent.R) {\n RedBlackRotateLeft(this, parent);\n after = parent;\n parent = after.U;\n }\n parent.C = false;\n grandpa.C = true;\n RedBlackRotateRight(this, grandpa);\n }\n } else {\n uncle = grandpa.L;\n if (uncle && uncle.C) {\n parent.C = uncle.C = false;\n grandpa.C = true;\n after = grandpa;\n } else {\n if (after === parent.L) {\n RedBlackRotateRight(this, parent);\n after = parent;\n parent = after.U;\n }\n parent.C = false;\n grandpa.C = true;\n RedBlackRotateLeft(this, grandpa);\n }\n }\n parent = after.U;\n }\n this._.C = false;\n },\n\n remove: function(node) {\n if (node.N) node.N.P = node.P;\n if (node.P) node.P.N = node.N;\n node.N = node.P = null;\n\n var parent = node.U,\n sibling,\n left = node.L,\n right = node.R,\n next,\n red;\n\n if (!left) next = right;\n else if (!right) next = left;\n else next = RedBlackFirst(right);\n\n if (parent) {\n if (parent.L === node) parent.L = next;\n else parent.R = next;\n } else {\n this._ = next;\n }\n\n if (left && right) {\n red = next.C;\n next.C = node.C;\n next.L = left;\n left.U = next;\n if (next !== right) {\n parent = next.U;\n next.U = node.U;\n node = next.R;\n parent.L = node;\n next.R = right;\n right.U = next;\n } else {\n next.U = parent;\n parent = next;\n node = next.R;\n }\n } else {\n red = node.C;\n node = next;\n }\n\n if (node) node.U = parent;\n if (red) return;\n if (node && node.C) { node.C = false; return; }\n\n do {\n if (node === this._) break;\n if (node === parent.L) {\n sibling = parent.R;\n if (sibling.C) {\n sibling.C = false;\n parent.C = true;\n RedBlackRotateLeft(this, parent);\n sibling = parent.R;\n }\n if ((sibling.L && sibling.L.C)\n || (sibling.R && sibling.R.C)) {\n if (!sibling.R || !sibling.R.C) {\n sibling.L.C = false;\n sibling.C = true;\n RedBlackRotateRight(this, sibling);\n sibling = parent.R;\n }\n sibling.C = parent.C;\n parent.C = sibling.R.C = false;\n RedBlackRotateLeft(this, parent);\n node = this._;\n break;\n }\n } else {\n sibling = parent.L;\n if (sibling.C) {\n sibling.C = false;\n parent.C = true;\n RedBlackRotateRight(this, parent);\n sibling = parent.L;\n }\n if ((sibling.L && sibling.L.C)\n || (sibling.R && sibling.R.C)) {\n if (!sibling.L || !sibling.L.C) {\n sibling.R.C = false;\n sibling.C = true;\n RedBlackRotateLeft(this, sibling);\n sibling = parent.L;\n }\n sibling.C = parent.C;\n parent.C = sibling.L.C = false;\n RedBlackRotateRight(this, parent);\n node = this._;\n break;\n }\n }\n sibling.C = true;\n node = parent;\n parent = parent.U;\n } while (!node.C);\n\n if (node) node.C = false;\n }\n};\n\nfunction RedBlackRotateLeft(tree, node) {\n var p = node,\n q = node.R,\n parent = p.U;\n\n if (parent) {\n if (parent.L === p) parent.L = q;\n else parent.R = q;\n } else {\n tree._ = q;\n }\n\n q.U = parent;\n p.U = q;\n p.R = q.L;\n if (p.R) p.R.U = p;\n q.L = p;\n}\n\nfunction RedBlackRotateRight(tree, node) {\n var p = node,\n q = node.L,\n parent = p.U;\n\n if (parent) {\n if (parent.L === p) parent.L = q;\n else parent.R = q;\n } else {\n tree._ = q;\n }\n\n q.U = parent;\n p.U = q;\n p.L = q.R;\n if (p.L) p.L.U = p;\n q.R = p;\n}\n\nfunction RedBlackFirst(node) {\n while (node.L) node = node.L;\n return node;\n}\n\nexport default RedBlackTree;\n","import {cells, edges, epsilon} from \"./Diagram\";\n\nexport function createEdge(left, right, v0, v1) {\n var edge = [null, null],\n index = edges.push(edge) - 1;\n edge.left = left;\n edge.right = right;\n if (v0) setEdgeEnd(edge, left, right, v0);\n if (v1) setEdgeEnd(edge, right, left, v1);\n cells[left.index].halfedges.push(index);\n cells[right.index].halfedges.push(index);\n return edge;\n}\n\nexport function createBorderEdge(left, v0, v1) {\n var edge = [v0, v1];\n edge.left = left;\n return edge;\n}\n\nexport function setEdgeEnd(edge, left, right, vertex) {\n if (!edge[0] && !edge[1]) {\n edge[0] = vertex;\n edge.left = left;\n edge.right = right;\n } else if (edge.left === right) {\n edge[1] = vertex;\n } else {\n edge[0] = vertex;\n }\n}\n\n// Liang–Barsky line clipping.\nfunction clipEdge(edge, x0, y0, x1, y1) {\n var a = edge[0],\n b = edge[1],\n ax = a[0],\n ay = a[1],\n bx = b[0],\n by = b[1],\n t0 = 0,\n t1 = 1,\n dx = bx - ax,\n dy = by - ay,\n r;\n\n r = x0 - ax;\n if (!dx && r > 0) return;\n r /= dx;\n if (dx < 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n } else if (dx > 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n }\n\n r = x1 - ax;\n if (!dx && r < 0) return;\n r /= dx;\n if (dx < 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n } else if (dx > 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n }\n\n r = y0 - ay;\n if (!dy && r > 0) return;\n r /= dy;\n if (dy < 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n } else if (dy > 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n }\n\n r = y1 - ay;\n if (!dy && r < 0) return;\n r /= dy;\n if (dy < 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n } else if (dy > 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n }\n\n if (!(t0 > 0) && !(t1 < 1)) return true; // TODO Better check?\n\n if (t0 > 0) edge[0] = [ax + t0 * dx, ay + t0 * dy];\n if (t1 < 1) edge[1] = [ax + t1 * dx, ay + t1 * dy];\n return true;\n}\n\nfunction connectEdge(edge, x0, y0, x1, y1) {\n var v1 = edge[1];\n if (v1) return true;\n\n var v0 = edge[0],\n left = edge.left,\n right = edge.right,\n lx = left[0],\n ly = left[1],\n rx = right[0],\n ry = right[1],\n fx = (lx + rx) / 2,\n fy = (ly + ry) / 2,\n fm,\n fb;\n\n if (ry === ly) {\n if (fx < x0 || fx >= x1) return;\n if (lx > rx) {\n if (!v0) v0 = [fx, y0];\n else if (v0[1] >= y1) return;\n v1 = [fx, y1];\n } else {\n if (!v0) v0 = [fx, y1];\n else if (v0[1] < y0) return;\n v1 = [fx, y0];\n }\n } else {\n fm = (lx - rx) / (ry - ly);\n fb = fy - fm * fx;\n if (fm < -1 || fm > 1) {\n if (lx > rx) {\n if (!v0) v0 = [(y0 - fb) / fm, y0];\n else if (v0[1] >= y1) return;\n v1 = [(y1 - fb) / fm, y1];\n } else {\n if (!v0) v0 = [(y1 - fb) / fm, y1];\n else if (v0[1] < y0) return;\n v1 = [(y0 - fb) / fm, y0];\n }\n } else {\n if (ly < ry) {\n if (!v0) v0 = [x0, fm * x0 + fb];\n else if (v0[0] >= x1) return;\n v1 = [x1, fm * x1 + fb];\n } else {\n if (!v0) v0 = [x1, fm * x1 + fb];\n else if (v0[0] < x0) return;\n v1 = [x0, fm * x0 + fb];\n }\n }\n }\n\n edge[0] = v0;\n edge[1] = v1;\n return true;\n}\n\nexport function clipEdges(x0, y0, x1, y1) {\n var i = edges.length,\n edge;\n\n while (i--) {\n if (!connectEdge(edge = edges[i], x0, y0, x1, y1)\n || !clipEdge(edge, x0, y0, x1, y1)\n || !(Math.abs(edge[0][0] - edge[1][0]) > epsilon\n || Math.abs(edge[0][1] - edge[1][1]) > epsilon)) {\n delete edges[i];\n }\n }\n}\n","import {createBorderEdge} from \"./Edge\";\nimport {cells, edges, epsilon} from \"./Diagram\";\n\nexport function createCell(site) {\n return cells[site.index] = {\n site: site,\n halfedges: []\n };\n}\n\nfunction cellHalfedgeAngle(cell, edge) {\n var site = cell.site,\n va = edge.left,\n vb = edge.right;\n if (site === vb) vb = va, va = site;\n if (vb) return Math.atan2(vb[1] - va[1], vb[0] - va[0]);\n if (site === va) va = edge[1], vb = edge[0];\n else va = edge[0], vb = edge[1];\n return Math.atan2(va[0] - vb[0], vb[1] - va[1]);\n}\n\nexport function cellHalfedgeStart(cell, edge) {\n return edge[+(edge.left !== cell.site)];\n}\n\nexport function cellHalfedgeEnd(cell, edge) {\n return edge[+(edge.left === cell.site)];\n}\n\nexport function sortCellHalfedges() {\n for (var i = 0, n = cells.length, cell, halfedges, j, m; i < n; ++i) {\n if ((cell = cells[i]) && (m = (halfedges = cell.halfedges).length)) {\n var index = new Array(m),\n array = new Array(m);\n for (j = 0; j < m; ++j) index[j] = j, array[j] = cellHalfedgeAngle(cell, edges[halfedges[j]]);\n index.sort(function(i, j) { return array[j] - array[i]; });\n for (j = 0; j < m; ++j) array[j] = halfedges[index[j]];\n for (j = 0; j < m; ++j) halfedges[j] = array[j];\n }\n }\n}\n\nexport function clipCells(x0, y0, x1, y1) {\n var nCells = cells.length,\n iCell,\n cell,\n site,\n iHalfedge,\n halfedges,\n nHalfedges,\n start,\n startX,\n startY,\n end,\n endX,\n endY,\n cover = true;\n\n for (iCell = 0; iCell < nCells; ++iCell) {\n if (cell = cells[iCell]) {\n site = cell.site;\n halfedges = cell.halfedges;\n iHalfedge = halfedges.length;\n\n // Remove any dangling clipped edges.\n while (iHalfedge--) {\n if (!edges[halfedges[iHalfedge]]) {\n halfedges.splice(iHalfedge, 1);\n }\n }\n\n // Insert any border edges as necessary.\n iHalfedge = 0, nHalfedges = halfedges.length;\n while (iHalfedge < nHalfedges) {\n end = cellHalfedgeEnd(cell, edges[halfedges[iHalfedge]]), endX = end[0], endY = end[1];\n start = cellHalfedgeStart(cell, edges[halfedges[++iHalfedge % nHalfedges]]), startX = start[0], startY = start[1];\n if (Math.abs(endX - startX) > epsilon || Math.abs(endY - startY) > epsilon) {\n halfedges.splice(iHalfedge, 0, edges.push(createBorderEdge(site, end,\n Math.abs(endX - x0) < epsilon && y1 - endY > epsilon ? [x0, Math.abs(startX - x0) < epsilon ? startY : y1]\n : Math.abs(endY - y1) < epsilon && x1 - endX > epsilon ? [Math.abs(startY - y1) < epsilon ? startX : x1, y1]\n : Math.abs(endX - x1) < epsilon && endY - y0 > epsilon ? [x1, Math.abs(startX - x1) < epsilon ? startY : y0]\n : Math.abs(endY - y0) < epsilon && endX - x0 > epsilon ? [Math.abs(startY - y0) < epsilon ? startX : x0, y0]\n : null)) - 1);\n ++nHalfedges;\n }\n }\n\n if (nHalfedges) cover = false;\n }\n }\n\n // If there weren’t any edges, have the closest site cover the extent.\n // It doesn’t matter which corner of the extent we measure!\n if (cover) {\n var dx, dy, d2, dc = Infinity;\n\n for (iCell = 0, cover = null; iCell < nCells; ++iCell) {\n if (cell = cells[iCell]) {\n site = cell.site;\n dx = site[0] - x0;\n dy = site[1] - y0;\n d2 = dx * dx + dy * dy;\n if (d2 < dc) dc = d2, cover = cell;\n }\n }\n\n if (cover) {\n var v00 = [x0, y0], v01 = [x0, y1], v11 = [x1, y1], v10 = [x1, y0];\n cover.halfedges.push(\n edges.push(createBorderEdge(site = cover.site, v00, v01)) - 1,\n edges.push(createBorderEdge(site, v01, v11)) - 1,\n edges.push(createBorderEdge(site, v11, v10)) - 1,\n edges.push(createBorderEdge(site, v10, v00)) - 1\n );\n }\n }\n\n // Lastly delete any cells with no edges; these were entirely clipped.\n for (iCell = 0; iCell < nCells; ++iCell) {\n if (cell = cells[iCell]) {\n if (!cell.halfedges.length) {\n delete cells[iCell];\n }\n }\n }\n}\n","import {RedBlackNode} from \"./RedBlackTree\";\nimport {circles, epsilon2} from \"./Diagram\";\n\nvar circlePool = [];\n\nexport var firstCircle;\n\nfunction Circle() {\n RedBlackNode(this);\n this.x =\n this.y =\n this.arc =\n this.site =\n this.cy = null;\n}\n\nexport function attachCircle(arc) {\n var lArc = arc.P,\n rArc = arc.N;\n\n if (!lArc || !rArc) return;\n\n var lSite = lArc.site,\n cSite = arc.site,\n rSite = rArc.site;\n\n if (lSite === rSite) return;\n\n var bx = cSite[0],\n by = cSite[1],\n ax = lSite[0] - bx,\n ay = lSite[1] - by,\n cx = rSite[0] - bx,\n cy = rSite[1] - by;\n\n var d = 2 * (ax * cy - ay * cx);\n if (d >= -epsilon2) return;\n\n var ha = ax * ax + ay * ay,\n hc = cx * cx + cy * cy,\n x = (cy * ha - ay * hc) / d,\n y = (ax * hc - cx * ha) / d;\n\n var circle = circlePool.pop() || new Circle;\n circle.arc = arc;\n circle.site = cSite;\n circle.x = x + bx;\n circle.y = (circle.cy = y + by) + Math.sqrt(x * x + y * y); // y bottom\n\n arc.circle = circle;\n\n var before = null,\n node = circles._;\n\n while (node) {\n if (circle.y < node.y || (circle.y === node.y && circle.x <= node.x)) {\n if (node.L) node = node.L;\n else { before = node.P; break; }\n } else {\n if (node.R) node = node.R;\n else { before = node; break; }\n }\n }\n\n circles.insert(before, circle);\n if (!before) firstCircle = circle;\n}\n\nexport function detachCircle(arc) {\n var circle = arc.circle;\n if (circle) {\n if (!circle.P) firstCircle = circle.N;\n circles.remove(circle);\n circlePool.push(circle);\n RedBlackNode(circle);\n arc.circle = null;\n }\n}\n","import {RedBlackNode} from \"./RedBlackTree\";\nimport {createCell} from \"./Cell\";\nimport {attachCircle, detachCircle} from \"./Circle\";\nimport {createEdge, setEdgeEnd} from \"./Edge\";\nimport {beaches, epsilon} from \"./Diagram\";\n\nvar beachPool = [];\n\nfunction Beach() {\n RedBlackNode(this);\n this.edge =\n this.site =\n this.circle = null;\n}\n\nfunction createBeach(site) {\n var beach = beachPool.pop() || new Beach;\n beach.site = site;\n return beach;\n}\n\nfunction detachBeach(beach) {\n detachCircle(beach);\n beaches.remove(beach);\n beachPool.push(beach);\n RedBlackNode(beach);\n}\n\nexport function removeBeach(beach) {\n var circle = beach.circle,\n x = circle.x,\n y = circle.cy,\n vertex = [x, y],\n previous = beach.P,\n next = beach.N,\n disappearing = [beach];\n\n detachBeach(beach);\n\n var lArc = previous;\n while (lArc.circle\n && Math.abs(x - lArc.circle.x) < epsilon\n && Math.abs(y - lArc.circle.cy) < epsilon) {\n previous = lArc.P;\n disappearing.unshift(lArc);\n detachBeach(lArc);\n lArc = previous;\n }\n\n disappearing.unshift(lArc);\n detachCircle(lArc);\n\n var rArc = next;\n while (rArc.circle\n && Math.abs(x - rArc.circle.x) < epsilon\n && Math.abs(y - rArc.circle.cy) < epsilon) {\n next = rArc.N;\n disappearing.push(rArc);\n detachBeach(rArc);\n rArc = next;\n }\n\n disappearing.push(rArc);\n detachCircle(rArc);\n\n var nArcs = disappearing.length,\n iArc;\n for (iArc = 1; iArc < nArcs; ++iArc) {\n rArc = disappearing[iArc];\n lArc = disappearing[iArc - 1];\n setEdgeEnd(rArc.edge, lArc.site, rArc.site, vertex);\n }\n\n lArc = disappearing[0];\n rArc = disappearing[nArcs - 1];\n rArc.edge = createEdge(lArc.site, rArc.site, null, vertex);\n\n attachCircle(lArc);\n attachCircle(rArc);\n}\n\nexport function addBeach(site) {\n var x = site[0],\n directrix = site[1],\n lArc,\n rArc,\n dxl,\n dxr,\n node = beaches._;\n\n while (node) {\n dxl = leftBreakPoint(node, directrix) - x;\n if (dxl > epsilon) node = node.L; else {\n dxr = x - rightBreakPoint(node, directrix);\n if (dxr > epsilon) {\n if (!node.R) {\n lArc = node;\n break;\n }\n node = node.R;\n } else {\n if (dxl > -epsilon) {\n lArc = node.P;\n rArc = node;\n } else if (dxr > -epsilon) {\n lArc = node;\n rArc = node.N;\n } else {\n lArc = rArc = node;\n }\n break;\n }\n }\n }\n\n createCell(site);\n var newArc = createBeach(site);\n beaches.insert(lArc, newArc);\n\n if (!lArc && !rArc) return;\n\n if (lArc === rArc) {\n detachCircle(lArc);\n rArc = createBeach(lArc.site);\n beaches.insert(newArc, rArc);\n newArc.edge = rArc.edge = createEdge(lArc.site, newArc.site);\n attachCircle(lArc);\n attachCircle(rArc);\n return;\n }\n\n if (!rArc) { // && lArc\n newArc.edge = createEdge(lArc.site, newArc.site);\n return;\n }\n\n // else lArc !== rArc\n detachCircle(lArc);\n detachCircle(rArc);\n\n var lSite = lArc.site,\n ax = lSite[0],\n ay = lSite[1],\n bx = site[0] - ax,\n by = site[1] - ay,\n rSite = rArc.site,\n cx = rSite[0] - ax,\n cy = rSite[1] - ay,\n d = 2 * (bx * cy - by * cx),\n hb = bx * bx + by * by,\n hc = cx * cx + cy * cy,\n vertex = [(cy * hb - by * hc) / d + ax, (bx * hc - cx * hb) / d + ay];\n\n setEdgeEnd(rArc.edge, lSite, rSite, vertex);\n newArc.edge = createEdge(lSite, site, null, vertex);\n rArc.edge = createEdge(site, rSite, null, vertex);\n attachCircle(lArc);\n attachCircle(rArc);\n}\n\nfunction leftBreakPoint(arc, directrix) {\n var site = arc.site,\n rfocx = site[0],\n rfocy = site[1],\n pby2 = rfocy - directrix;\n\n if (!pby2) return rfocx;\n\n var lArc = arc.P;\n if (!lArc) return -Infinity;\n\n site = lArc.site;\n var lfocx = site[0],\n lfocy = site[1],\n plby2 = lfocy - directrix;\n\n if (!plby2) return lfocx;\n\n var hl = lfocx - rfocx,\n aby2 = 1 / pby2 - 1 / plby2,\n b = hl / plby2;\n\n if (aby2) return (-b + Math.sqrt(b * b - 2 * aby2 * (hl * hl / (-2 * plby2) - lfocy + plby2 / 2 + rfocy - pby2 / 2))) / aby2 + rfocx;\n\n return (rfocx + lfocx) / 2;\n}\n\nfunction rightBreakPoint(arc, directrix) {\n var rArc = arc.N;\n if (rArc) return leftBreakPoint(rArc, directrix);\n var site = arc.site;\n return site[1] === directrix ? site[0] : Infinity;\n}\n","import {addBeach, removeBeach} from \"./Beach\";\nimport {sortCellHalfedges, cellHalfedgeStart, clipCells} from \"./Cell\";\nimport {firstCircle} from \"./Circle\";\nimport {clipEdges} from \"./Edge\";\nimport RedBlackTree from \"./RedBlackTree\";\n\nexport var epsilon = 1e-6;\nexport var epsilon2 = 1e-12;\nexport var beaches;\nexport var cells;\nexport var circles;\nexport var edges;\n\nfunction triangleArea(a, b, c) {\n return (a[0] - c[0]) * (b[1] - a[1]) - (a[0] - b[0]) * (c[1] - a[1]);\n}\n\nfunction lexicographic(a, b) {\n return b[1] - a[1]\n || b[0] - a[0];\n}\n\nexport default function Diagram(sites, extent) {\n var site = sites.sort(lexicographic).pop(),\n x,\n y,\n circle;\n\n edges = [];\n cells = new Array(sites.length);\n beaches = new RedBlackTree;\n circles = new RedBlackTree;\n\n while (true) {\n circle = firstCircle;\n if (site && (!circle || site[1] < circle.y || (site[1] === circle.y && site[0] < circle.x))) {\n if (site[0] !== x || site[1] !== y) {\n addBeach(site);\n x = site[0], y = site[1];\n }\n site = sites.pop();\n } else if (circle) {\n removeBeach(circle.arc);\n } else {\n break;\n }\n }\n\n sortCellHalfedges();\n\n if (extent) {\n var x0 = +extent[0][0],\n y0 = +extent[0][1],\n x1 = +extent[1][0],\n y1 = +extent[1][1];\n clipEdges(x0, y0, x1, y1);\n clipCells(x0, y0, x1, y1);\n }\n\n this.edges = edges;\n this.cells = cells;\n\n beaches =\n circles =\n edges =\n cells = null;\n}\n\nDiagram.prototype = {\n constructor: Diagram,\n\n polygons: function() {\n var edges = this.edges;\n\n return this.cells.map(function(cell) {\n var polygon = cell.halfedges.map(function(i) { return cellHalfedgeStart(cell, edges[i]); });\n polygon.data = cell.site.data;\n return polygon;\n });\n },\n\n triangles: function() {\n var triangles = [],\n edges = this.edges;\n\n this.cells.forEach(function(cell, i) {\n if (!(m = (halfedges = cell.halfedges).length)) return;\n var site = cell.site,\n halfedges,\n j = -1,\n m,\n s0,\n e1 = edges[halfedges[m - 1]],\n s1 = e1.left === site ? e1.right : e1.left;\n\n while (++j < m) {\n s0 = s1;\n e1 = edges[halfedges[j]];\n s1 = e1.left === site ? e1.right : e1.left;\n if (s0 && s1 && i < s0.index && i < s1.index && triangleArea(site, s0, s1) < 0) {\n triangles.push([site.data, s0.data, s1.data]);\n }\n }\n });\n\n return triangles;\n },\n\n links: function() {\n return this.edges.filter(function(edge) {\n return edge.right;\n }).map(function(edge) {\n return {\n source: edge.left.data,\n target: edge.right.data\n };\n });\n },\n\n find: function(x, y, radius) {\n var that = this, i0, i1 = that._found || 0, n = that.cells.length, cell;\n\n // Use the previously-found cell, or start with an arbitrary one.\n while (!(cell = that.cells[i1])) if (++i1 >= n) return null;\n var dx = x - cell.site[0], dy = y - cell.site[1], d2 = dx * dx + dy * dy;\n\n // Traverse the half-edges to find a closer cell, if any.\n do {\n cell = that.cells[i0 = i1], i1 = null;\n cell.halfedges.forEach(function(e) {\n var edge = that.edges[e], v = edge.left;\n if ((v === cell.site || !v) && !(v = edge.right)) return;\n var vx = x - v[0], vy = y - v[1], v2 = vx * vx + vy * vy;\n if (v2 < d2) d2 = v2, i1 = v.index;\n });\n } while (i1 !== null);\n\n that._found = i0;\n\n return radius == null || d2 <= radius * radius ? cell.site : null;\n }\n}\n","import constant from \"./constant\";\nimport {x as pointX, y as pointY} from \"./point\";\nimport Diagram, {epsilon} from \"./Diagram\";\n\nexport default function() {\n var x = pointX,\n y = pointY,\n extent = null;\n\n function voronoi(data) {\n return new Diagram(data.map(function(d, i) {\n var s = [Math.round(x(d, i, data) / epsilon) * epsilon, Math.round(y(d, i, data) / epsilon) * epsilon];\n s.index = i;\n s.data = d;\n return s;\n }), extent);\n }\n\n voronoi.polygons = function(data) {\n return voronoi(data).polygons();\n };\n\n voronoi.links = function(data) {\n return voronoi(data).links();\n };\n\n voronoi.triangles = function(data) {\n return voronoi(data).triangles();\n };\n\n voronoi.x = function(_) {\n return arguments.length ? (x = typeof _ === \"function\" ? _ : constant(+_), voronoi) : x;\n };\n\n voronoi.y = function(_) {\n return arguments.length ? (y = typeof _ === \"function\" ? _ : constant(+_), voronoi) : y;\n };\n\n voronoi.extent = function(_) {\n return arguments.length ? (extent = _ == null ? null : [[+_[0][0], +_[0][1]], [+_[1][0], +_[1][1]]], voronoi) : extent && [[extent[0][0], extent[0][1]], [extent[1][0], extent[1][1]]];\n };\n\n voronoi.size = function(_) {\n return arguments.length ? (extent = _ == null ? null : [[0, 0], [+_[0], +_[1]]], voronoi) : extent && [extent[1][0] - extent[0][0], extent[1][1] - extent[0][1]];\n };\n\n return voronoi;\n}\n","/* global window, requestAnimationFrame, cancelAnimationFrame */\nimport { FieldType, DimensionSubtype } from 'datamodel';\nimport {\n axisLeft,\n axisRight,\n axisTop,\n axisBottom\n} from 'd3-axis';\nimport {\n symbolCircle,\n symbolCross,\n symbolDiamond,\n symbolSquare,\n symbolStar,\n symbolWye,\n symbolTriangle,\n symbol,\n stack as d3Stack,\n stackOffsetDiverging,\n stackOrderNone,\n stackOrderAscending,\n stackOrderDescending,\n stackOffsetNone,\n stackOffsetExpand,\n stackOffsetWiggle,\n pie,\n arc,\n line,\n curveLinear,\n curveStepAfter,\n curveStepBefore,\n curveStep,\n curveCatmullRom,\n area\n} from 'd3-shape';\nimport { scaleBand } from 'd3-scale';\nimport { nest } from 'd3-collection';\nimport {\n interpolate,\n interpolateRgb,\n piecewise,\n interpolateNumber,\n interpolateHslLong\n} from 'd3-interpolate';\nimport {\n easeCubic,\n easeBounce,\n easePoly,\n easeBack,\n easeCircle,\n easeLinear,\n easeElastic\n} from 'd3-ease';\nimport {\n color,\n rgb,\n hsl\n} from 'd3-color';\nimport { voronoi } from 'd3-voronoi';\nimport Model from 'hyperdis';\nimport * as STACK_CONFIG from './enums/stack-config';\n\nconst HTMLElement = window.HTMLElement;\n\nconst isSimpleObject = (obj) => {\n let token;\n if (typeof obj === 'object') {\n if (obj === null) { return false; }\n token = Object.prototype.toString.call(obj);\n if (token === '[object Object]') {\n return (obj.constructor.toString().match(/^function (.*)\\(\\)/m) || [])[1] === 'Object';\n }\n }\n return false;\n};\n\n/**\n * Returns unique id\n * @return {string} Unique id string\n */\nconst\n getUniqueId = () => `id-${new Date().getTime()}${Math.round(Math.random() * 10000)}`;\n\n/**\n * Deep copies an object and returns a new object.\n * @param {Object} o Object to clone\n * @return {Object} New Object.\n */\nconst clone = (o) => {\n const output = {};\n let v;\n for (const key in o) {\n if ({}.hasOwnProperty.call(o, key)) {\n v = o[key];\n output[key] = isSimpleObject(v) ? clone(v) : v;\n }\n }\n return output;\n};\n\n/**\n* Checks the existence of keys in an object\n* @param {Array} keys Set of keys which are to be checked\n* @param {Object} obj whose keys are checked from the set of keys provided\n* @return {Object} Error if the keys are absent, or the object itself\n*/\nconst checkExistence = (keys, obj) => {\n const nonExistentKeys = [];\n keys.forEach((key) => {\n if (key in obj) {\n return;\n }\n nonExistentKeys.push(key);\n });\n return nonExistentKeys;\n};\n\nconst sanitizeIP = {\n typeObj: (keys, obj) => {\n if (typeof obj !== 'object') {\n return Error('Argument type object expected');\n }\n\n const nonExistentKeys = checkExistence(keys, obj);\n if (nonExistentKeys.length) {\n return Error(`Missing keys from parameter ${nonExistentKeys.join(', ')}`);\n }\n return obj;\n },\n\n /* istanbul ignore next */ htmlElem: (elem) => {\n if (!(elem instanceof HTMLElement)) {\n return Error('HTMLElement required');\n }\n return elem;\n }\n};\n\n/**\n * Gets the maximum value from an array of objects for a given property name\n * @param {Array.} data Array of objects\n * @param {string} field Field name\n * @return {number} Maximum value\n */\nconst getMax = (data, field) => Math.max(...data.filter(d => !isNaN(d[field])).map(d => d[field]));\n\n/**\n * Gets the minimum value from an array of objects for a given property name\n * @param {Array.} data Array of objects\n * @param {string} field Field name\n * @return {number} Minimum value\n */\nconst getMin = (data, field) => Math.min(...data.filter(d => !isNaN(d[field])).map(d => d[field]));\n\n/**\n * Gets the domain from the data based on the field name and type of field\n * @param {Array. | Array.} data Data Array\n * @param {Array.} fields Array of fields from where the domain will be calculated\n * @param {string} fieldType Type of field - nominal, quantitiative, temporal.\n * @return {Array} Usually contains a min and max value if field is quantitative or\n * an array of values if field type is nominal or ordinal\n */\nconst getDomainFromData = (data, fields, fieldType) => {\n let domain;\n let domArr;\n data = data[0] instanceof Array ? data : [data];\n switch (fieldType) {\n case DimensionSubtype.CATEGORICAL:\n domain = [].concat(...data.map(arr => arr.map(d => d[fields[0]]).filter(d => d !== undefined)));\n break;\n default:\n domArr = data.map((arr) => {\n const firstMin = getMin(arr, fields[0]);\n const secondMin = getMin(arr, fields[1]);\n const firstMax = getMax(arr, fields[0]);\n const secondMax = getMax(arr, fields[1]);\n return [Math.min(firstMin, secondMin), Math.max(firstMax, secondMax)];\n });\n domain = [Math.min(...domArr.map(d => d[0])), Math.max(...domArr.map(d => d[1]))];\n break;\n }\n return domain;\n};\n\n/**\n * Union Domain values\n * @param {Array.} domains Array of domain values\n * @param {string} fieldType type of field - dimension,measure or datetime.\n * @return {Array} Unioned domain of all domain values.\n */\nconst unionDomain = (domains, fieldType) => {\n let domain;\n domains = domains.filter(dom => dom.length);\n if (fieldType === DimensionSubtype.CATEGORICAL) {\n domain = domain = [].concat(...domains);\n } else {\n domain = [Math.min(...domains.map(d => d[0])), Math.max(...domains.map(d => d[1]))];\n }\n\n return domain;\n};\n\nconst symbolFns = {\n circle: symbolCircle,\n cross: symbolCross,\n diamond: symbolDiamond,\n square: symbolSquare,\n star: symbolStar,\n wye: symbolWye,\n triangle: symbolTriangle\n};\n\nconst easeFns = {\n cubic: easeCubic,\n bounce: easeBounce,\n linear: easeLinear,\n elastic: easeElastic,\n back: easeBack,\n poly: easePoly,\n circle: easeCircle\n};\n\n/**\n * Returns the maximum or minimum points of a compare value from an array of objects.\n * @param {Array} points Array of objects\n * @param {string} compareValue Key in the object on which the comparing will be done.\n * @param {string} minOrMax minimum or maximum.\n * @return {Object} Minimum or maximum point.\n */\nconst getExtremePoint = (points, compareValue, minOrMax) => {\n let extremePoint;\n let point;\n const len = points.length;\n let minOrMaxVal = minOrMax === 'max' ? -Infinity : Infinity;\n let val;\n\n for (let i = 0; i < len; i++) {\n point = points[i];\n val = point[compareValue];\n if (minOrMax === 'min' ? val < minOrMaxVal : val > minOrMaxVal) {\n minOrMaxVal = val;\n extremePoint = point;\n }\n }\n\n return extremePoint;\n};\n\n/**\n * Returns the minimum point of a compare value from an array of objects.\n * @param {Array} points Array of objects\n * @param {string} compareValue Key in the object on which the comparing will be done.\n * @return {Object} Minimum point.\n */\nconst getMinPoint = (points, compareValue) => getExtremePoint(points, compareValue, 'min');\n\n/**\n * Returns the maximum point of a compare value from an array of objects.\n * @param {Array} points Array of objects\n * @param {string} compareValue Key in the object on which the comparing will be done.\n * @return {Object} Maximum point.\n */\nconst getMaxPoint = (points, compareValue) => getExtremePoint(points, compareValue, 'max');\n\n/**\n * Gets the index of the closest value of the given value from the array.\n * @param {Array} arr Array of values\n * @param {number} value Value from which the nearest value will be calculated.\n * @param {string} side side property.\n * @return {number} index of the closest value\n */\n/* istanbul ignore next */const getClosestIndexOf = (arr, value, side) => {\n let low = 0;\n const arrLen = arr.length;\n let high = arrLen - 1;\n\n let mid;\n let d1;\n let d2;\n\n while (low < high) {\n mid = Math.floor((low + high) / 2);\n d1 = Math.abs(arr[mid] - value);\n d2 = Math.abs(arr[mid + 1] - value);\n\n if (d2 <= d1) {\n low = mid + 1;\n } else {\n high = mid;\n }\n }\n\n if (!side) {\n return high;\n }\n\n const highVal = arr[high];\n if (highVal === value) {\n return high;\n } else if (highVal > value) {\n if (high === 0) { return high; }\n return side === 'left' ? high - 1 : high;\n }\n if (high === arr.length - 1) { return high; }\n return side === 'left' ? high : high + 1;\n};\n\n/**\n * Returns the browser window object\n * @return {Window} Window object\n*/\nconst getWindow = () => window;\n\n/**\n * Returns the browser window object\n * @return {Window} Window object\n*/\nconst reqAnimFrame = (() => requestAnimationFrame)();\n\nconst cancelAnimFrame = (() => cancelAnimationFrame)();\n\n/**\n * Capitalizes the first letter of the word\n * @param {string} text word\n * @return {string} Capitalized word\n */\nconst capitalizeFirst = (text) => {\n text = text.toLowerCase();\n\n return text.replace(/\\w\\S*/g, txt => txt.charAt(0).toUpperCase() + txt.substr(1));\n};\n\n/**\n *\n *\n * @param {*} arr\n */\nconst unique = arr => ([...new Set(arr)]);\n\n/**\n * Gets the minimum difference between two consecutive numbers in an array.\n * @param {Array} arr Array of numbers\n * @param {number} index index of the value\n * @return {number} minimum difference between values\n */\n/* istanbul ignore next */ const getMinDiff = (arr, index) => {\n let diff;\n let uniqueVals;\n if (index !== undefined) {\n uniqueVals = unique(arr.map(d => d[index]));\n } else {\n uniqueVals = unique(arr);\n }\n if (uniqueVals.length > 1) {\n diff = Math.abs(uniqueVals[1] - uniqueVals[0]);\n for (let i = 2, len = uniqueVals.length; i < len; i++) {\n diff = Math.min(diff, Math.abs(uniqueVals[i] - uniqueVals[i - 1]));\n }\n } else {\n diff = uniqueVals[0];\n }\n\n return diff;\n};\n\n/**\n * Returns the class name appended with a given id.\n * @param {string} cls class name\n * @param {string} id unique identifier\n * @param {string} prefix string needed to add before the classname\n * @return {string} qualified class name\n */\n/* istanbul ignore next */const getQualifiedClassName = (cls, id, prefix) => {\n cls = cls.replace(/^\\.*/, '');\n return [`${prefix}-${cls}`, `${prefix}-${cls}-${id}`];\n};\n\n/**\n * This method is used to set the default value for variables\n * without sullying the code with conditional statements.\n *\n * @export\n * @param {any} param The parameter to test.\n * @param {any} value The default value to assign.\n * @return {any} The value.\n */\n/* istanbul ignore next */ const defaultValue = (param, value) => {\n if (typeof param === 'undefined' || (typeof param === 'object' && !param)) {\n return value;\n }\n return param;\n};\n\n/**\n * DESCRIPTION TODO\n * @todo\n *\n * @export\n * @param {Object} graph graph whose dependency order has to be generated\n * @return {Object} @todo\n */\nconst getDependencyOrder = (graph) => {\n const dependencyOrder = [];\n const visited = {};\n const keys = Object.keys(graph);\n /**\n * DESCRIPTION TODO\n * @todo\n *\n * @export\n * @param {Object} name @todo\n * @return {Object} @todo\n */\n const visit = (name) => {\n if (dependencyOrder.length === keys.length) {\n return true;\n }\n visited[name] = true;\n const edges = graph[name];\n for (let e = 0; e < edges.length; e++) {\n const dep = edges[e];\n if (!visited[dep]) {\n visit(dep);\n }\n }\n\n dependencyOrder.push(name);\n return false;\n };\n\n for (let i = 0; i < keys.length; i++) {\n if (visit(keys[i], i)) break;\n }\n\n return dependencyOrder;\n};\n\n/**\n * Iterates over the properties of an object and applies the function\n *\n * @param {any} obj object to be iterated upon\n * @param {any} fn function to be applied on it\n */\nconst objectIterator = (obj, fn) => {\n for (const key in obj) {\n if (Object.hasOwnProperty.call(obj, key)) {\n fn(key, obj);\n }\n }\n};\n\n/**\n * This class creates a d3 voronoi for retrieving the nearest neighbour of any point from a set of two\n * dimensional points\n * @class Voronoi\n */\n/* istanbul ignore next */ class Voronoi {\n /**\n * Initialize the voronoi with the data given.\n * @param {Array.} data Array of points.\n */\n constructor (data) {\n this._voronoi = voronoi().x(d => d.x).y(d => d.y);\n this.data(data);\n }\n\n /**\n * Sets the data to voronoi\n * @param {Array.} data Array of objects.\n * @return {Voronoi} Instance of voronoi.\n */\n data (data) {\n if (data) {\n this._voronoiFn = this._voronoi(data);\n }\n return this;\n }\n\n /**\n * Finds the closest point to the x and y position given.\n * @param {number} x x value\n * @param {number} y y value\n * @param {number} radius search radius.\n * @return {Object} Details of the nearest point.\n */\n find (x, y, radius) {\n return this._voronoiFn.find(x, y, radius);\n }\n}\n\n/**\n * Methods to handle changes to table configuration and reactivity are handled by this\n * class.\n */\n/**\n * Common store class\n *\n * @class Store\n */\nclass Store {\n /**\n * Creates an instance of Store.\n * @param {Object} config The object to create the state store with.\n * @memberof Store\n */\n constructor (config) {\n // create reactive model\n this.model = Model.create(config);\n this._listeners = [];\n }\n\n /**\n * This method returns a plain JSON object\n * with all the fields in the state store.\n *\n * @return {Object} Serialized representation of state store.\n * @memberof Store\n */\n serialize () {\n return this.model.serialize();\n }\n\n /**\n * This method is used to update the value of a property in the state store.\n *\n * @param {string} propName The name of the property.\n * @param {number} value The new value of the property.\n * @memberof Store\n */\n commit (propName, value) {\n // check if appropriate enum has been used\n this.model.prop(propName, value);\n }\n\n /**\n * This method is used to register a callbacl that will execute\n * when one or more properties change.\n *\n * @param {string | Array} propNames name of property or array of props.\n * @param {Function} callBack The callback to execute.\n * @memberof Store\n */\n /* istanbul ignore next */registerChangeListener (propNames, callBack, instantCall) {\n let props = propNames;\n if (!Array.isArray(propNames)) {\n props = [propNames];\n }\n const fn = this.model.next(props, callBack, instantCall);\n this._listeners.push(fn);\n return this;\n }\n /**\n * This method is used to register a callbacl that will execute\n * when one or more properties change.\n *\n * @param {string | Array} propNames name of property or array of props.\n * @param {Function} callBack The callback to execute.\n * @memberof Store\n */\n /* istanbul ignore next */ registerImmediateListener (propNames, callBack, instantCall) {\n let props = propNames;\n if (!Array.isArray(propNames)) {\n props = [propNames];\n }\n const fn = this.model.on(props, callBack, instantCall);\n this._listeners.push(fn);\n return this;\n }\n /**\n * This method is used to get the name of the property\n * from the state store.\n *\n * @param {string} propName The name of the field in state store.\n * @return {any} The value of the field.\n * @memberof Store\n */\n get (propName) {\n return this.model.prop(propName);\n }\n\n /**\n * This method is used to register a computed property that is computed every time\n * the store value changes.\n *\n * @param {string} propName The name of the property to create.\n * @param {Function} callBack The function to execute when depemdent props change.\n * @memberof Store\n */\n computed (propName, callBack) {\n return this.model.calculatedProp(propName, callBack);\n }\n\n unsubscribeAll () {\n this._listeners.forEach(fn => fn());\n }\n}\n\n/**\n * Sanitize an input number / string mixed number. Currently dot in the no is not supported.\n *\n * @param {number | string} val pure number or string mixed number\n * @return {number | null} Number if it can be extracted. Otherwise null\n */\nconst intSanitizer = (val) => {\n const arr = val.toString().match(/(\\d+)(px)*/g);\n if (!arr) {\n // If only characters are passed\n return null;\n }\n\n return parseInt(arr[0], 10);\n};\n\n/**\n * Setter getter creator from config\n * Format\n * PROPERTRY_NAME: {\n * value: // default value of the property,\n * meta: {\n * typeCheck: // The setter value will be checked using this. If the value is function then the setter value\n * // is passed as args. (Optional)\n * typeExpected: // The output of typecheck action will be tested against this. Truthy value will set the\n * // value to the setter\n * sanitizaiton: // Need for sanitization before type is checked\n * }\n * }\n *\n * @param {Object} holder an empty object on which the getters and setters will be mounted\n * @param {Object} options options config based on which the getters and setters are determined.\n * @param {Hyperdis} model optional model to attach the property. If not sent new moel is created.\n * @return {Array} @todo\n */\nconst transactor = (holder, options, model) => {\n let conf;\n const store = model && model instanceof Model ? model : Model.create({});\n\n for (const prop in options) {\n if ({}.hasOwnProperty.call(options, prop)) {\n conf = options[prop];\n if (!store.prop(prop)) {\n store.append({ [prop]: conf.value });\n }\n holder[prop] = ((context, key, meta) => (...params) => {\n let val;\n let compareTo;\n const paramsLen = params.length;\n const prevVal = store.prop(prop);\n if (paramsLen) {\n // If parameters are passed then it's a setter\n const spreadParams = meta && meta.spreadParams;\n val = params;\n const values = [];\n if (meta) {\n for (let i = 0; i < paramsLen; i++) {\n val = params[i];\n const sanitization = meta.sanitization && (spreadParams ? meta.sanitization[i] :\n meta.sanitization);\n const typeCheck = meta.typeCheck && (spreadParams ? meta.typeCheck[i] : meta.typeCheck);\n if (sanitization && typeof sanitization === 'function') {\n // Sanitize if required\n val = sanitization(val, prevVal, holder);\n }\n\n if (typeCheck) {\n // Checking if a setter is valid\n if (typeof typeCheck === 'function') {\n let typeExpected = meta.typeExpected;\n if (typeExpected && spreadParams) {\n typeExpected = typeExpected[i];\n }\n if (typeExpected) {\n compareTo = typeExpected;\n } else {\n compareTo = true;\n }\n\n if (typeCheck(val) === compareTo) {\n values.push(val);\n }\n } else if (typeof typeCheck === 'string') {\n if (typeCheck === 'constructor') {\n const typeExpected = spreadParams ? meta.typeExpected[i] : meta.typeExpected;\n if (val && (val.constructor.name === typeExpected)) {\n values.push(val);\n }\n }\n } else {\n // context.prop(key, val);\n values.push(val);\n }\n } else {\n values.push(val);\n }\n }\n const preset = meta.preset;\n const oldValues = context.prop(key);\n preset && preset(values[0], holder);\n if (spreadParams) {\n oldValues.forEach((value, i) => {\n if (values[i] === undefined) {\n values[i] = value;\n }\n });\n }\n values.length && context.prop(key, spreadParams ? values : values[0]);\n } else {\n context.prop(key, spreadParams ? val : val[0]);\n }\n return holder;\n }\n // No parameters are passed hence its a getter\n return context.prop(key);\n })(store, prop, conf.meta);\n }\n }\n\n return [holder, store];\n};\n\n/**\n *\n *\n * @param {*} context\n * @param {*} props\n */\nconst generateGetterSetters = (context, props) => {\n Object.entries(props).forEach((propInfo) => {\n const prop = propInfo[0];\n const typeChecker = propInfo[1].typeChecker;\n const sanitization = propInfo[1].sanitization;\n const prototype = context.constructor.prototype;\n if (!(Object.hasOwnProperty.call(prototype, prop))) {\n context[prop] = (...params) => {\n if (params.length) {\n let value = params[0];\n if (sanitization) {\n value = sanitization(context, params[0]);\n }\n if (typeChecker && !typeChecker(value)) {\n return context[`_${prop}`];\n }\n context[`_${prop}`] = value;\n return context;\n } return context[`_${prop}`];\n };\n }\n });\n};\n\n/**\n *\n *\n * @param {*} arr\n * @param {*} prop\n */\nconst getArraySum = (arr, prop) => arr.reduce((total, elem) => {\n total += prop ? elem[prop] : elem;\n return total;\n}, 0);\n\n/**\n *\n *\n * @param {*} arr1\n * @param {*} arr2\n * @returns\n */\nconst arraysEqual = (arr1, arr2) => {\n if (arr1.length !== arr2.length) { return false; }\n for (let i = arr1.length; i >= 0; i--) {\n if (arr1[i] !== arr2[i]) { return false; }\n }\n\n return true;\n};\n\n/* eslint valid-typeof:0 */\n/**\n * Returns a validation function which can be used to validate variables against a type and value\n *\n * @param {any} type type of value that the object should have\n * @return {Object} validation function\n */\nconst isEqual = type => (oldVal, newVal) => {\n if (type === 'Array') {\n if (!oldVal) {\n return false;\n }\n return arraysEqual(oldVal, newVal);\n } else if (type === 'Object') {\n return Object.is(oldVal, newVal);\n } return oldVal === newVal;\n};\n\n/**\n * Description @todo\n *\n * @param {any} transactionModel @todo\n * @param {any} transactionEndpoint @todo\n * @param {any} transactionItems @todo\n * @return {any} @todo\n */\nconst enableChainedTransaction = (transactionModel, transactionEndpoint, transactionItems) =>\n transactionItems.forEach(item => transactionModel.on(item, ([, newVal]) => transactionEndpoint[item](newVal)));\n\n/**\n * Chceks if the element is istanceof HTMLElement\n *\n * @param {Object} elem any JS Object\n */\nconst isHTMLElem = elem => elem instanceof HTMLElement;\n\nconst ERROR_MSG = {\n INTERFACE_IMPL: 'Method not implemented'\n};\n\n/**\n * Merges the sink object in the source by recursively iterating through the object properties\n * @param {Object} source Source Object\n * @param {Object} sink Sink Object\n * @return {Object} Merged object\n */\nconst mergeRecursive = (source, sink) => {\n for (const prop in sink) {\n if (isSimpleObject(source[prop]) && isSimpleObject(sink[prop])) {\n mergeRecursive(source[prop], sink[prop]);\n } else if (sink[prop] instanceof Object && sink[prop].constructor === Object) {\n source[prop] = {};\n mergeRecursive(source[prop], sink[prop]);\n } else {\n source[prop] = sink[prop];\n }\n }\n return source;\n};\n\nconst interpolateArray = (data, fitCount) => {\n const linearInterpolate = function (before, after, atPoint) {\n return before + (after - before) * atPoint;\n };\n const newData = [];\n const springFactor = ((data.length - 1) / (fitCount - 1));\n newData[0] = data[0]; // for new allocation\n for (let i = 1; i < fitCount - 1; i++) {\n const tmp = i * springFactor;\n const before = (Math.floor(tmp)).toFixed();\n const after = (Math.ceil(tmp)).toFixed();\n const atPoint = tmp - before;\n newData[i] = linearInterpolate(data[before], data[after], atPoint);\n }\n newData[fitCount - 1] = data[data.length - 1]; // for new allocation\n return newData;\n};\n\n/**\n *\n *\n * @param {*} fn\n */\nconst nextFrame = (fn) => {\n setTimeout(() => {\n fn();\n }, 0);\n};\n\n/**\n *\n *\n * @param {*} angle\n */\nconst angleToRadian = angle => angle * Math.PI / 180;\n\n/**\n *\n *\n * @param {*} newName\n * @param {*} oldName\n */\nconst replaceCSSPrefix = () => {\n // @todo\n};\n\n/**\n * Gets the interpolator function from d3 color\n *\n */\nconst interpolator = () => interpolate;\n\n/**\n * Gets the number interpolator from d3 color\n *\n */\nconst numberInterpolator = () => interpolateNumber;\n\n/**\n * Gets the rgb interpolator from d3 color\n *\n */\nconst colorInterpolator = () => interpolateRgb;\n\n/**\n * Gets the hsl interpolator from d3 color\n *\n */\nconst hslInterpolator = () => interpolateHslLong;\n\nconst transformColors = () => ({\n color,\n rgb,\n hsl\n});\n\n/**\n * Gets the piecewise interpolator from d3 color\n *\n */\nconst piecewiseInterpolator = () => piecewise;\n\nfunction hue2rgb (p, q, t) {\n if (t < 0) t += 1;\n if (t > 1) t -= 1;\n if (t < 1 / 6) return p + (q - p) * 6 * t;\n if (t < 1 / 2) return q;\n if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n return p;\n}\n\n /**\n * Converts an HSL color value to RGB. Conversion formula\n * adapted from http://en.wikipedia.org/wiki/HSL_color_space.\n * Assumes h, s, and l are contained in the set [0, 1] and\n * returns r, g, and b in the set [0, 255].\n *\n * @param Number h The hue\n * @param Number s The saturation\n * @param Number l The lightness\n * @return Array The RGB representation\n */\nconst hslToRgb = (h, s, l, a = 1) => {\n let r;\n let g;\n let b;\n\n if (s === 0) {\n r = g = b = l; // achromatic\n } else {\n const q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n const p = 2 * l - q;\n\n r = hue2rgb(p, q, h + 1 / 3);\n g = hue2rgb(p, q, h);\n b = hue2rgb(p, q, h - 1 / 3);\n }\n\n return [r * 255, g * 255, b * 255, a];\n};\n\n /**\n * Converts an RGB color value to HSV. Conversion formula\n * adapted from http://en.wikipedia.org/wiki/HSV_color_space.\n * Assumes r, g, and b are contained in the set [0, 255] and\n * returns h, s, and v in the set [0, 1].\n *\n * @param Number r The red color value\n * @param Number g The green color value\n * @param Number b The blue color value\n * @return Array The HSV representation\n */\nconst rgbToHsv = (r, g, b, a = 1) => {\n r = +r; g = +g; b = +b; a = +a;\n r /= 255; g /= 255; b /= 255;\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n let h;\n let s;\n const l = (max + min) / 2;\n\n if (max === min) {\n h = s = 0; // achromatic\n } else {\n const d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n switch (max) {\n case r: h = (g - b) / d + (g < b ? 6 : 0); break;\n case g: h = (b - r) / d + 2; break;\n case b: h = (r - g) / d + 4; break;\n default: break;\n }\n h /= 6;\n }\n return [h, s, l, a];\n};\n\n /**\n * Converts an HSV color value to RGB. Conversion formula\n * adapted from http://en.wikipedia.org/wiki/HSV_color_space.\n * Assumes h, s, and v are contained in the set [0, 1] and\n * returns r, g, and b in the set [0, 255].\n *\n * @param Number h The hue\n * @param Number s The saturation\n * @param Number v The value\n * @return Array The RGB representation\n */\nconst hsvToRgb = (h, s, v, a = 1) => {\n let r;\n let g;\n let b;\n\n const i = Math.floor(h * 6);\n const f = h * 6 - i;\n const p = v * (1 - s);\n const q = v * (1 - f * s);\n const t = v * (1 - (1 - f) * s);\n\n switch (i % 6) {\n case 0: r = v; g = t; b = p; break;\n case 1: r = q; g = v; b = p; break;\n case 2: r = p; g = v; b = t; break;\n case 3: r = p; g = q; b = v; break;\n case 4: r = t; g = p; b = v; break;\n case 5: r = v; g = p; b = q; break;\n default: break;\n }\n\n return [r * 255, g * 255, b * 255, a];\n};\n\nconst hexToHsv = (hex) => {\n const result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\n\n const r = parseInt(result[1], 16);\n const g = parseInt(result[2], 16);\n const b = parseInt(result[3], 16);\n const a = result[4] ? parseInt(result[4], 16) : 1;\n return rgbToHsv(r, g, b, a);\n};\n\nconst detectColor = (col) => {\n const matchRgb = /rgb\\((\\d{1,3}), (\\d{1,3}), (\\d{1,3})\\)/;\n const matchHsl = /hsl\\((\\d+),\\s*([\\d.]+)%,\\s*([\\d.]+)%\\)/g;\n\n // Source : https://gist.github.com/sethlopezme/d072b945969a3cc2cc11\n // eslint-disable-next-line\n const matchRgba = /rgba?\\(((25[0-5]|2[0-4]\\d|1\\d{1,2}|\\d\\d?)\\s*,\\s*?){2}(25[0-5]|2[0-4]\\d|1\\d{1,2}|\\d\\d?)\\s*,?\\s*([01]\\.?\\d*?)?\\)/;\n // eslint-disable-next-line\n const matchHsla = /^hsla\\((0|360|35\\d|3[0-4]\\d|[12]\\d\\d|0?\\d?\\d),(0|100|\\d{1,2})%,(0|100|\\d{1,2})%,(0?\\.\\d|1(\\.0)?)\\)$/;\n const matchHex = /^#([0-9a-f]{3}){1,2}$/i;\n\n if (matchRgb.test(col) || matchRgba.test(col)) {\n return 'rgb';\n } else if (matchHsl.test(col) || matchHsla.test(col)) {\n return 'hsl';\n } else if (matchHex.test(col)) {\n return 'hex';\n } return col;\n};\n\n/**\n *\n *\n * @param {*} model\n * @param {*} propModel\n * @returns\n */\nconst filterPropagationModel = (model, propModel, measures) => {\n const { data, schema } = propModel.getData();\n let filteredModel;\n if (schema.length) {\n const fieldMap = model.getFieldsConfig();\n filteredModel = model.select((fields) => {\n const include = data.some(row => schema.every((propField, idx) => {\n if (!measures && (!(propField.name in fieldMap) ||\n fieldMap[propField.name].def.type === FieldType.MEASURE)) {\n return true;\n }\n return row[idx] === fields[propField.name].valueOf();\n }));\n return include;\n }, {\n saveChild: false\n });\n } else {\n filteredModel = propModel;\n }\n\n return filteredModel;\n};\n\nconst assembleModelFromIdentifiers = (model, identifiers) => {\n let schema = [];\n let data;\n const fieldMap = model.getFieldsConfig();\n if (identifiers.length) {\n const fields = identifiers[0];\n const len = fields.length;\n for (let i = 0; i < len; i++) {\n const field = fields[i];\n const fieldObj = fieldMap[field] && Object.assign({}, fieldMap[field].def);\n if (fieldObj) {\n schema.push(Object.assign(fieldObj));\n }\n }\n\n data = [];\n const header = identifiers[0];\n for (let i = 1; i < identifiers.length; i += 1) {\n const vals = identifiers[i];\n const temp = {};\n vals.forEach((fieldVal, cIdx) => {\n temp[header[cIdx]] = fieldVal;\n });\n data.push(temp);\n }\n } else {\n data = [];\n schema = [];\n }\n\n return new model.constructor(data, schema);\n};\n\n/**\n *\n *\n * @param {*} dataModel\n * @param {*} criteria\n * @returns\n */\nconst getDataModelFromRange = (dataModel, criteria, mode) => {\n if (criteria === null) {\n return null;\n }\n const selFields = Object.keys(criteria);\n const selFn = fields => selFields.every((field) => {\n const val = fields[field].value;\n const range = criteria[field][0] instanceof Array ? criteria[field][0] : criteria[field];\n if (typeof range[0] === 'string') {\n return range.find(d => d === val) !== undefined;\n }\n return range ? val >= range[0] && val <= range[1] : true;\n });\n\n return dataModel.select(selFn, {\n saveChild: false,\n mode\n });\n};\n\n/**\n *\n *\n * @param {*} dataModel\n * @param {*} identifiers\n * @returns\n */\nconst getDataModelFromIdentifiers = (dataModel, identifiers, mode) => {\n let filteredDataModel;\n if (identifiers instanceof Array) {\n const fieldsConfig = dataModel.getFieldsConfig();\n\n const dataArr = identifiers.slice(1, identifiers.length);\n if (identifiers instanceof Function) {\n filteredDataModel = identifiers(dataModel, {}, false);\n } else if (identifiers instanceof Array && identifiers[0].length) {\n const filteredSchema = identifiers[0].filter(d => d in fieldsConfig);\n filteredDataModel = dataModel.select((fields) => {\n let include = true;\n filteredSchema.forEach((propField, idx) => {\n const value = fields[propField].valueOf();\n const index = dataArr.findIndex(d => d[idx] === value);\n include = include && index !== -1;\n });\n return include;\n }, {\n saveChild: false,\n mode\n });\n }\n } else {\n filteredDataModel = getDataModelFromRange(dataModel, identifiers, mode);\n }\n return filteredDataModel;\n};\n\n/**\n *\n *\n * @param {*} context\n * @param {*} listenerMap\n */\nconst registerListeners = (context, listenerMap) => {\n const propListenerMap = listenerMap(context);\n for (const key in propListenerMap) {\n if ({}.hasOwnProperty.call(propListenerMap, key)) {\n const mapObj = propListenerMap[key];\n const propType = mapObj.type;\n const props = mapObj.props;\n const listenerFn = mapObj.listener;\n context.store()[propType](props, listenerFn);\n }\n }\n};\n\nconst isValidValue = value => !isNaN(value) && value !== -Infinity && value !== Infinity;\n/**\n *\n *\n * @param {*} obj\n * @param {*} fields\n * @returns\n */\nconst getObjProp = (obj, ...fields) => {\n if (obj === undefined || obj === null) {\n return obj;\n }\n let retObj = obj;\n for (let i = 0, len = fields.length; i < len; i++) {\n retObj = retObj[fields[i]];\n if (retObj === undefined || retObj === null) {\n break;\n }\n }\n return retObj;\n};\n\n/**\n *\n *\n * @param {*} str\n * @returns\n */\nconst escapeHTML = (str) => {\n const htmlEscapes = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": ''',\n '/': '/'\n };\n const htmlEscaper = /[&<>\"'/]/g;\n return (`${str}`).replace(htmlEscaper, match => htmlEscapes[match]);\n};\n\n/**\n *\n *\n * @param {*} arr\n */\nconst transposeArray = arr => arr[0].map((col, i) => arr.map(row => row[i]));\nconst toArray = arr => (arr instanceof Array ? arr : [arr]);\nconst extendsClass = (cls, extendsFrom, found) => {\n if (!cls) {\n return false;\n }\n const prototype = cls.prototype;\n if (prototype instanceof extendsFrom) {\n found = true;\n } else {\n found = extendsClass(prototype, extendsFrom, found);\n }\n return found;\n};\n\n/**\n *\n * @param {*} dm1\n * @param {*} dm2\n */\nconst concatModels = (dm1, dm2) => {\n const dataObj1 = dm1.getData();\n const dataObj2 = dm2.getData();\n const data1 = dataObj1.data;\n const data2 = dataObj2.data;\n const schema1 = dataObj1.schema;\n const schema2 = dataObj2.schema;\n const tuples1 = {};\n const tuples2 = {};\n const commonTuples = {};\n for (let i = 0; i < data1.length; i++) {\n for (let ii = 0; ii < data2.length; ii++) {\n const row1 = data1[i];\n const row2 = data2[ii];\n const dim1Values = row1.filter((d, idx) => schema1[idx].type === FieldType.DIMENSION);\n const dim2Values = row2.filter((d, idx) => schema2[idx].type === FieldType.DIMENSION);\n const allDimSame = dim1Values.every(value => dim2Values.indexOf(value) !== -1);\n if (allDimSame) {\n const key = dim1Values.join();\n !commonTuples[key] && (commonTuples[key] = {});\n row1.forEach((value, idx) => {\n commonTuples[key][schema1[idx].name] = value;\n });\n row2.forEach((value, idx) => {\n commonTuples[key][schema2[idx].name] = value;\n });\n } else {\n const dm1Key = dim1Values.join();\n const dm2Key = dim2Values.join();\n if (!commonTuples[dm1Key] && !commonTuples[dm2Key]) {\n !tuples1[dm1Key] && (tuples1[dm1Key] = {});\n !tuples2[dm2Key] && (tuples2[dm2Key] = {});\n row1.forEach((value, idx) => {\n tuples1[dm1Key][schema1[idx].name] = value;\n });\n row2.forEach((value, idx) => {\n tuples2[dm2Key][schema2[idx].name] = value;\n });\n }\n }\n }\n }\n\n const commonSchema = [...schema1, ...schema2.filter(s2 => schema1.findIndex(s1 => s1.name === s2.name) === -1)];\n const data = [...Object.values(tuples1), ...Object.values(tuples2), ...Object.values(commonTuples)];\n return [data, commonSchema];\n};\n\nconst getSymbol = type => symbol().type(symbolFns[type]);\n\nconst stackOrders = {\n [STACK_CONFIG.ORDER_NONE]: stackOrderNone,\n [STACK_CONFIG.ORDER_ASCENDING]: stackOrderAscending,\n [STACK_CONFIG.ORDER_DESCENDING]: stackOrderDescending\n};\nconst stackOffsets = {\n [STACK_CONFIG.OFFSET_DIVERGING]: stackOffsetDiverging,\n [STACK_CONFIG.OFFSET_NONE]: stackOffsetNone,\n [STACK_CONFIG.OFFSET_EXPAND]: stackOffsetExpand,\n [STACK_CONFIG.OFFSET_WIGGLE]: stackOffsetWiggle\n};\n\n// eslint-disable-next-line require-jsdoc\nconst stack = params => d3Stack().keys(params.keys).offset(stackOffsets[params.offset])\n .order(stackOrders[params.order])(params.data);\n\n/**\n * Groups the data into a hierarchical tree structure based on one or more fields.\n * @param { Object } params Configuration properties for nesting data\n * @param { Array. } params.data Data which needs to be grouped\n * @param { Array. } params.keys Field indices by which the data will be grouped\n * @return { Array. } Grouped data array\n */\nconst nestCollection = (params) => {\n const nestFn = nest();\n params.keys.forEach(key => nestFn.key(d => d[key]));\n return nestFn.entries(params.data);\n};\n\nconst pathInterpolators = {\n curveLinear,\n curveStepAfter,\n curveStepBefore,\n curveStep,\n curveCatmullRom,\n stepAfter: curveStepAfter,\n catmullRom: curveCatmullRom,\n step: curveStep,\n stepBefore: curveStepBefore,\n linear: curveLinear\n};\n\nconst Symbols = {\n axisLeft,\n axisRight,\n axisTop,\n axisBottom,\n line,\n area,\n pie,\n arc,\n nest\n};\n\nconst Scales = {\n band: scaleBand\n};\n\nconst getSmallestDiff = (points) => {\n points = points.sort((a, b) => a - b);\n let minDiff = points[1] - points[0];\n for (let i = 2; i < points.length; i++) {\n minDiff = Math.min(minDiff, points[i] - points[i - 1]);\n }\n\n return minDiff;\n};\n\nconst require = (lookupWhat, lookupDetails) => ({\n resolvable: (store) => {\n const lookupTarget = store[lookupWhat];\n const depArr = lookupDetails.slice(0, lookupDetails.length - 1);\n const fn = lookupDetails[lookupDetails.length - 1]; // fn\n\n const deps = depArr.map(str => lookupTarget[str]);\n return {\n fn: fn(...deps),\n depArr\n };\n }\n});\n\nconst nextAnimFrame = window.requestAnimationFrame || window.webkitRequestAnimationFrame ||\n window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame ||\n function (callback) {\n setTimeout(callback, 16);\n };\n\nexport {\n require,\n Scales,\n Symbols,\n pathInterpolators,\n stack,\n nestCollection,\n getSymbol,\n transformColors,\n detectColor,\n hexToHsv,\n hslToRgb,\n rgbToHsv,\n hsvToRgb,\n concatModels,\n toArray,\n angleToRadian,\n escapeHTML,\n generateGetterSetters,\n getArraySum,\n interpolator,\n piecewiseInterpolator,\n getDataModelFromIdentifiers,\n getDataModelFromRange,\n colorInterpolator,\n numberInterpolator,\n ERROR_MSG,\n reqAnimFrame,\n nextAnimFrame,\n filterPropagationModel,\n transposeArray,\n cancelAnimFrame,\n getMax,\n getMin,\n getDomainFromData,\n getUniqueId,\n mergeRecursive,\n unionDomain,\n symbolFns,\n easeFns,\n clone,\n isEqual,\n interpolateArray,\n getMinPoint,\n defaultValue,\n getMaxPoint,\n getClosestIndexOf,\n Voronoi,\n checkExistence,\n sanitizeIP,\n getMinDiff,\n capitalizeFirst,\n getWindow,\n getQualifiedClassName,\n Store,\n getDependencyOrder,\n objectIterator,\n intSanitizer,\n transactor,\n enableChainedTransaction,\n isHTMLElem,\n isSimpleObject,\n nextFrame,\n registerListeners,\n replaceCSSPrefix,\n getObjProp,\n extendsClass,\n assembleModelFromIdentifiers,\n isValidValue,\n hslInterpolator,\n getSmallestDiff\n};\n","export function linear(t) {\n return +t;\n}\n","export function circleIn(t) {\n return 1 - Math.sqrt(1 - t * t);\n}\n\nexport function circleOut(t) {\n return Math.sqrt(1 - --t * t);\n}\n\nexport function circleInOut(t) {\n return ((t *= 2) <= 1 ? 1 - Math.sqrt(1 - t * t) : Math.sqrt(1 - (t -= 2) * t) + 1) / 2;\n}\n","import {path} from \"d3-path\";\nimport circle from \"./symbol/circle\";\nimport cross from \"./symbol/cross\";\nimport diamond from \"./symbol/diamond\";\nimport star from \"./symbol/star\";\nimport square from \"./symbol/square\";\nimport triangle from \"./symbol/triangle\";\nimport wye from \"./symbol/wye\";\nimport constant from \"./constant\";\n\nexport var symbols = [\n circle,\n cross,\n diamond,\n square,\n star,\n triangle,\n wye\n];\n\nexport default function() {\n var type = constant(circle),\n size = constant(64),\n context = null;\n\n function symbol() {\n var buffer;\n if (!context) context = buffer = path();\n type.apply(this, arguments).draw(context, +size.apply(this, arguments));\n if (buffer) return context = null, buffer + \"\" || null;\n }\n\n symbol.type = function(_) {\n return arguments.length ? (type = typeof _ === \"function\" ? _ : constant(_), symbol) : type;\n };\n\n symbol.size = function(_) {\n return arguments.length ? (size = typeof _ === \"function\" ? _ : constant(+_), symbol) : size;\n };\n\n symbol.context = function(_) {\n return arguments.length ? (context = _ == null ? null : _, symbol) : context;\n };\n\n return symbol;\n}\n","export const ORDER_ASCENDING = 'ascending';\nexport const ORDER_DESCENDING = 'descending';\nexport const ORDER_NONE = 'none';\nexport const OFFSET_DIVERGING = 'diverging';\nexport const OFFSET_NONE = 'none';\nexport const OFFSET_EXPAND = 'expand';\nexport const OFFSET_WIGGLE = 'wiggle';\n","import ascending from \"./ascending\";\n\nexport default function(series) {\n return ascending(series).reverse();\n}\n","export default function(series, order) {\n if (!((n = series.length) > 1)) return;\n for (var i, j = 0, d, dy, yp, yn, n, m = series[order[0]].length; j < m; ++j) {\n for (yp = yn = 0, i = 0; i < n; ++i) {\n if ((dy = (d = series[order[i]][j])[1] - d[0]) >= 0) {\n d[0] = yp, d[1] = yp += dy;\n } else if (dy < 0) {\n d[1] = yn, d[0] = yn += dy;\n } else {\n d[0] = yp;\n }\n }\n }\n}\n","import none from \"./none\";\n\nexport default function(series, order) {\n if (!((n = series.length) > 0)) return;\n for (var i, n, j = 0, m = series[0].length, y; j < m; ++j) {\n for (y = i = 0; i < n; ++i) y += series[i][j][1] || 0;\n if (y) for (i = 0; i < n; ++i) series[i][j][1] /= y;\n }\n none(series, order);\n}\n","import none from \"./none\";\n\nexport default function(series, order) {\n if (!((n = series.length) > 0) || !((m = (s0 = series[order[0]]).length) > 0)) return;\n for (var y = 0, j = 1, s0, m, n; j < m; ++j) {\n for (var i = 0, s1 = 0, s2 = 0; i < n; ++i) {\n var si = series[order[i]],\n sij0 = si[j][1] || 0,\n sij1 = si[j - 1][1] || 0,\n s3 = (sij0 - sij1) / 2;\n for (var k = 0; k < i; ++k) {\n var sk = series[order[k]],\n skj0 = sk[j][1] || 0,\n skj1 = sk[j - 1][1] || 0;\n s3 += skj0 - skj1;\n }\n s1 += sij0, s2 += s3 * sij0;\n }\n s0[j - 1][1] += s0[j - 1][0] = y;\n if (s1) y -= s2 / s1;\n }\n s0[j - 1][1] += s0[j - 1][0] = y;\n none(series, order);\n}\n","import constant from \"./constant\";\nimport descending from \"./descending\";\nimport identity from \"./identity\";\nimport {tau} from \"./math\";\n\nexport default function() {\n var value = identity,\n sortValues = descending,\n sort = null,\n startAngle = constant(0),\n endAngle = constant(tau),\n padAngle = constant(0);\n\n function pie(data) {\n var i,\n n = data.length,\n j,\n k,\n sum = 0,\n index = new Array(n),\n arcs = new Array(n),\n a0 = +startAngle.apply(this, arguments),\n da = Math.min(tau, Math.max(-tau, endAngle.apply(this, arguments) - a0)),\n a1,\n p = Math.min(Math.abs(da) / n, padAngle.apply(this, arguments)),\n pa = p * (da < 0 ? -1 : 1),\n v;\n\n for (i = 0; i < n; ++i) {\n if ((v = arcs[index[i] = i] = +value(data[i], i, data)) > 0) {\n sum += v;\n }\n }\n\n // Optionally sort the arcs by previously-computed values or by data.\n if (sortValues != null) index.sort(function(i, j) { return sortValues(arcs[i], arcs[j]); });\n else if (sort != null) index.sort(function(i, j) { return sort(data[i], data[j]); });\n\n // Compute the arcs! They are stored in the original data's order.\n for (i = 0, k = sum ? (da - n * pa) / sum : 0; i < n; ++i, a0 = a1) {\n j = index[i], v = arcs[j], a1 = a0 + (v > 0 ? v * k : 0) + pa, arcs[j] = {\n data: data[j],\n index: i,\n value: v,\n startAngle: a0,\n endAngle: a1,\n padAngle: p\n };\n }\n\n return arcs;\n }\n\n pie.value = function(_) {\n return arguments.length ? (value = typeof _ === \"function\" ? _ : constant(+_), pie) : value;\n };\n\n pie.sortValues = function(_) {\n return arguments.length ? (sortValues = _, sort = null, pie) : sortValues;\n };\n\n pie.sort = function(_) {\n return arguments.length ? (sort = _, sortValues = null, pie) : sort;\n };\n\n pie.startAngle = function(_) {\n return arguments.length ? (startAngle = typeof _ === \"function\" ? _ : constant(+_), pie) : startAngle;\n };\n\n pie.endAngle = function(_) {\n return arguments.length ? (endAngle = typeof _ === \"function\" ? _ : constant(+_), pie) : endAngle;\n };\n\n pie.padAngle = function(_) {\n return arguments.length ? (padAngle = typeof _ === \"function\" ? _ : constant(+_), pie) : padAngle;\n };\n\n return pie;\n}\n","export var xhtml = \"http://www.w3.org/1999/xhtml\";\n\nexport default {\n svg: \"http://www.w3.org/2000/svg\",\n xhtml: xhtml,\n xlink: \"http://www.w3.org/1999/xlink\",\n xml: \"http://www.w3.org/XML/1998/namespace\",\n xmlns: \"http://www.w3.org/2000/xmlns/\"\n};\n","import namespaces from \"./namespaces\";\n\nexport default function(name) {\n var prefix = name += \"\", i = prefix.indexOf(\":\");\n if (i >= 0 && (prefix = name.slice(0, i)) !== \"xmlns\") name = name.slice(i + 1);\n return namespaces.hasOwnProperty(prefix) ? {space: namespaces[prefix], local: name} : name;\n}\n","import namespace from \"./namespace\";\nimport {xhtml} from \"./namespaces\";\n\nfunction creatorInherit(name) {\n return function() {\n var document = this.ownerDocument,\n uri = this.namespaceURI;\n return uri === xhtml && document.documentElement.namespaceURI === xhtml\n ? document.createElement(name)\n : document.createElementNS(uri, name);\n };\n}\n\nfunction creatorFixed(fullname) {\n return function() {\n return this.ownerDocument.createElementNS(fullname.space, fullname.local);\n };\n}\n\nexport default function(name) {\n var fullname = namespace(name);\n return (fullname.local\n ? creatorFixed\n : creatorInherit)(fullname);\n}\n","function none() {}\n\nexport default function(selector) {\n return selector == null ? none : function() {\n return this.querySelector(selector);\n };\n}\n","function empty() {\n return [];\n}\n\nexport default function(selector) {\n return selector == null ? empty : function() {\n return this.querySelectorAll(selector);\n };\n}\n","var matcher = function(selector) {\n return function() {\n return this.matches(selector);\n };\n};\n\nif (typeof document !== \"undefined\") {\n var element = document.documentElement;\n if (!element.matches) {\n var vendorMatches = element.webkitMatchesSelector\n || element.msMatchesSelector\n || element.mozMatchesSelector\n || element.oMatchesSelector;\n matcher = function(selector) {\n return function() {\n return vendorMatches.call(this, selector);\n };\n };\n }\n}\n\nexport default matcher;\n","export default function(update) {\n return new Array(update.length);\n}\n","import sparse from \"./sparse\";\nimport {Selection} from \"./index\";\n\nexport default function() {\n return new Selection(this._enter || this._groups.map(sparse), this._parents);\n}\n\nexport function EnterNode(parent, datum) {\n this.ownerDocument = parent.ownerDocument;\n this.namespaceURI = parent.namespaceURI;\n this._next = null;\n this._parent = parent;\n this.__data__ = datum;\n}\n\nEnterNode.prototype = {\n constructor: EnterNode,\n appendChild: function(child) { return this._parent.insertBefore(child, this._next); },\n insertBefore: function(child, next) { return this._parent.insertBefore(child, next); },\n querySelector: function(selector) { return this._parent.querySelector(selector); },\n querySelectorAll: function(selector) { return this._parent.querySelectorAll(selector); }\n};\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","import {Selection} from \"./index\";\nimport {EnterNode} from \"./enter\";\nimport constant from \"../constant\";\n\nvar keyPrefix = \"$\"; // Protect against keys like “__proto__”.\n\nfunction bindIndex(parent, group, enter, update, exit, data) {\n var i = 0,\n node,\n groupLength = group.length,\n dataLength = data.length;\n\n // Put any non-null nodes that fit into update.\n // Put any null nodes into enter.\n // Put any remaining data into enter.\n for (; i < dataLength; ++i) {\n if (node = group[i]) {\n node.__data__ = data[i];\n update[i] = node;\n } else {\n enter[i] = new EnterNode(parent, data[i]);\n }\n }\n\n // Put any non-null nodes that don’t fit into exit.\n for (; i < groupLength; ++i) {\n if (node = group[i]) {\n exit[i] = node;\n }\n }\n}\n\nfunction bindKey(parent, group, enter, update, exit, data, key) {\n var i,\n node,\n nodeByKeyValue = {},\n groupLength = group.length,\n dataLength = data.length,\n keyValues = new Array(groupLength),\n keyValue;\n\n // Compute the key for each node.\n // If multiple nodes have the same key, the duplicates are added to exit.\n for (i = 0; i < groupLength; ++i) {\n if (node = group[i]) {\n keyValues[i] = keyValue = keyPrefix + key.call(node, node.__data__, i, group);\n if (keyValue in nodeByKeyValue) {\n exit[i] = node;\n } else {\n nodeByKeyValue[keyValue] = node;\n }\n }\n }\n\n // Compute the key for each datum.\n // If there a node associated with this key, join and add it to update.\n // If there is not (or the key is a duplicate), add it to enter.\n for (i = 0; i < dataLength; ++i) {\n keyValue = keyPrefix + key.call(parent, data[i], i, data);\n if (node = nodeByKeyValue[keyValue]) {\n update[i] = node;\n node.__data__ = data[i];\n nodeByKeyValue[keyValue] = null;\n } else {\n enter[i] = new EnterNode(parent, data[i]);\n }\n }\n\n // Add any remaining nodes that were not bound to data to exit.\n for (i = 0; i < groupLength; ++i) {\n if ((node = group[i]) && (nodeByKeyValue[keyValues[i]] === node)) {\n exit[i] = node;\n }\n }\n}\n\nexport default function(value, key) {\n if (!value) {\n data = new Array(this.size()), j = -1;\n this.each(function(d) { data[++j] = d; });\n return data;\n }\n\n var bind = key ? bindKey : bindIndex,\n parents = this._parents,\n groups = this._groups;\n\n if (typeof value !== \"function\") value = constant(value);\n\n for (var m = groups.length, update = new Array(m), enter = new Array(m), exit = new Array(m), j = 0; j < m; ++j) {\n var parent = parents[j],\n group = groups[j],\n groupLength = group.length,\n data = value.call(parent, parent && parent.__data__, j, parents),\n dataLength = data.length,\n enterGroup = enter[j] = new Array(dataLength),\n updateGroup = update[j] = new Array(dataLength),\n exitGroup = exit[j] = new Array(groupLength);\n\n bind(parent, group, enterGroup, updateGroup, exitGroup, data, key);\n\n // Now connect the enter nodes to their following update node, such that\n // appendChild can insert the materialized enter node before this node,\n // rather than at the end of the parent node.\n for (var i0 = 0, i1 = 0, previous, next; i0 < dataLength; ++i0) {\n if (previous = enterGroup[i0]) {\n if (i0 >= i1) i1 = i0 + 1;\n while (!(next = updateGroup[i1]) && ++i1 < dataLength);\n previous._next = next || null;\n }\n }\n }\n\n update = new Selection(update, parents);\n update._enter = enter;\n update._exit = exit;\n return update;\n}\n","import {Selection} from \"./index\";\n\nexport default function(compare) {\n if (!compare) compare = ascending;\n\n function compareNode(a, b) {\n return a && b ? compare(a.__data__, b.__data__) : !a - !b;\n }\n\n for (var groups = this._groups, m = groups.length, sortgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, sortgroup = sortgroups[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n sortgroup[i] = node;\n }\n }\n sortgroup.sort(compareNode);\n }\n\n return new Selection(sortgroups, this._parents).order();\n}\n\nfunction ascending(a, b) {\n return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","import namespace from \"../namespace\";\n\nfunction attrRemove(name) {\n return function() {\n this.removeAttribute(name);\n };\n}\n\nfunction attrRemoveNS(fullname) {\n return function() {\n this.removeAttributeNS(fullname.space, fullname.local);\n };\n}\n\nfunction attrConstant(name, value) {\n return function() {\n this.setAttribute(name, value);\n };\n}\n\nfunction attrConstantNS(fullname, value) {\n return function() {\n this.setAttributeNS(fullname.space, fullname.local, value);\n };\n}\n\nfunction attrFunction(name, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.removeAttribute(name);\n else this.setAttribute(name, v);\n };\n}\n\nfunction attrFunctionNS(fullname, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.removeAttributeNS(fullname.space, fullname.local);\n else this.setAttributeNS(fullname.space, fullname.local, v);\n };\n}\n\nexport default function(name, value) {\n var fullname = namespace(name);\n\n if (arguments.length < 2) {\n var node = this.node();\n return fullname.local\n ? node.getAttributeNS(fullname.space, fullname.local)\n : node.getAttribute(fullname);\n }\n\n return this.each((value == null\n ? (fullname.local ? attrRemoveNS : attrRemove) : (typeof value === \"function\"\n ? (fullname.local ? attrFunctionNS : attrFunction)\n : (fullname.local ? attrConstantNS : attrConstant)))(fullname, value));\n}\n","export default function(node) {\n return (node.ownerDocument && node.ownerDocument.defaultView) // node is a Node\n || (node.document && node) // node is a Window\n || node.defaultView; // node is a Document\n}\n","import defaultView from \"../window\";\n\nfunction styleRemove(name) {\n return function() {\n this.style.removeProperty(name);\n };\n}\n\nfunction styleConstant(name, value, priority) {\n return function() {\n this.style.setProperty(name, value, priority);\n };\n}\n\nfunction styleFunction(name, value, priority) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.style.removeProperty(name);\n else this.style.setProperty(name, v, priority);\n };\n}\n\nexport default function(name, value, priority) {\n return arguments.length > 1\n ? this.each((value == null\n ? styleRemove : typeof value === \"function\"\n ? styleFunction\n : styleConstant)(name, value, priority == null ? \"\" : priority))\n : styleValue(this.node(), name);\n}\n\nexport function styleValue(node, name) {\n return node.style.getPropertyValue(name)\n || defaultView(node).getComputedStyle(node, null).getPropertyValue(name);\n}\n","function classArray(string) {\n return string.trim().split(/^|\\s+/);\n}\n\nfunction classList(node) {\n return node.classList || new ClassList(node);\n}\n\nfunction ClassList(node) {\n this._node = node;\n this._names = classArray(node.getAttribute(\"class\") || \"\");\n}\n\nClassList.prototype = {\n add: function(name) {\n var i = this._names.indexOf(name);\n if (i < 0) {\n this._names.push(name);\n this._node.setAttribute(\"class\", this._names.join(\" \"));\n }\n },\n remove: function(name) {\n var i = this._names.indexOf(name);\n if (i >= 0) {\n this._names.splice(i, 1);\n this._node.setAttribute(\"class\", this._names.join(\" \"));\n }\n },\n contains: function(name) {\n return this._names.indexOf(name) >= 0;\n }\n};\n\nfunction classedAdd(node, names) {\n var list = classList(node), i = -1, n = names.length;\n while (++i < n) list.add(names[i]);\n}\n\nfunction classedRemove(node, names) {\n var list = classList(node), i = -1, n = names.length;\n while (++i < n) list.remove(names[i]);\n}\n\nfunction classedTrue(names) {\n return function() {\n classedAdd(this, names);\n };\n}\n\nfunction classedFalse(names) {\n return function() {\n classedRemove(this, names);\n };\n}\n\nfunction classedFunction(names, value) {\n return function() {\n (value.apply(this, arguments) ? classedAdd : classedRemove)(this, names);\n };\n}\n\nexport default function(name, value) {\n var names = classArray(name + \"\");\n\n if (arguments.length < 2) {\n var list = classList(this.node()), i = -1, n = names.length;\n while (++i < n) if (!list.contains(names[i])) return false;\n return true;\n }\n\n return this.each((typeof value === \"function\"\n ? classedFunction : value\n ? classedTrue\n : classedFalse)(names, value));\n}\n","function textRemove() {\n this.textContent = \"\";\n}\n\nfunction textConstant(value) {\n return function() {\n this.textContent = value;\n };\n}\n\nfunction textFunction(value) {\n return function() {\n var v = value.apply(this, arguments);\n this.textContent = v == null ? \"\" : v;\n };\n}\n\nexport default function(value) {\n return arguments.length\n ? this.each(value == null\n ? textRemove : (typeof value === \"function\"\n ? textFunction\n : textConstant)(value))\n : this.node().textContent;\n}\n","function htmlRemove() {\n this.innerHTML = \"\";\n}\n\nfunction htmlConstant(value) {\n return function() {\n this.innerHTML = value;\n };\n}\n\nfunction htmlFunction(value) {\n return function() {\n var v = value.apply(this, arguments);\n this.innerHTML = v == null ? \"\" : v;\n };\n}\n\nexport default function(value) {\n return arguments.length\n ? this.each(value == null\n ? htmlRemove : (typeof value === \"function\"\n ? htmlFunction\n : htmlConstant)(value))\n : this.node().innerHTML;\n}\n","function raise() {\n if (this.nextSibling) this.parentNode.appendChild(this);\n}\n\nexport default function() {\n return this.each(raise);\n}\n","function lower() {\n if (this.previousSibling) this.parentNode.insertBefore(this, this.parentNode.firstChild);\n}\n\nexport default function() {\n return this.each(lower);\n}\n","import creator from \"../creator\";\nimport selector from \"../selector\";\n\nfunction constantNull() {\n return null;\n}\n\nexport default function(name, before) {\n var create = typeof name === \"function\" ? name : creator(name),\n select = before == null ? constantNull : typeof before === \"function\" ? before : selector(before);\n return this.select(function() {\n return this.insertBefore(create.apply(this, arguments), select.apply(this, arguments) || null);\n });\n}\n","function remove() {\n var parent = this.parentNode;\n if (parent) parent.removeChild(this);\n}\n\nexport default function() {\n return this.each(remove);\n}\n","function selection_cloneShallow() {\n return this.parentNode.insertBefore(this.cloneNode(false), this.nextSibling);\n}\n\nfunction selection_cloneDeep() {\n return this.parentNode.insertBefore(this.cloneNode(true), this.nextSibling);\n}\n\nexport default function(deep) {\n return this.select(deep ? selection_cloneDeep : selection_cloneShallow);\n}\n","var filterEvents = {};\n\nexport var event = null;\n\nif (typeof document !== \"undefined\") {\n var element = document.documentElement;\n if (!(\"onmouseenter\" in element)) {\n filterEvents = {mouseenter: \"mouseover\", mouseleave: \"mouseout\"};\n }\n}\n\nfunction filterContextListener(listener, index, group) {\n listener = contextListener(listener, index, group);\n return function(event) {\n var related = event.relatedTarget;\n if (!related || (related !== this && !(related.compareDocumentPosition(this) & 8))) {\n listener.call(this, event);\n }\n };\n}\n\nfunction contextListener(listener, index, group) {\n return function(event1) {\n var event0 = event; // Events can be reentrant (e.g., focus).\n event = event1;\n try {\n listener.call(this, this.__data__, index, group);\n } finally {\n event = event0;\n }\n };\n}\n\nfunction parseTypenames(typenames) {\n return typenames.trim().split(/^|\\s+/).map(function(t) {\n var name = \"\", i = t.indexOf(\".\");\n if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n return {type: t, name: name};\n });\n}\n\nfunction onRemove(typename) {\n return function() {\n var on = this.__on;\n if (!on) return;\n for (var j = 0, i = -1, m = on.length, o; j < m; ++j) {\n if (o = on[j], (!typename.type || o.type === typename.type) && o.name === typename.name) {\n this.removeEventListener(o.type, o.listener, o.capture);\n } else {\n on[++i] = o;\n }\n }\n if (++i) on.length = i;\n else delete this.__on;\n };\n}\n\nfunction onAdd(typename, value, capture) {\n var wrap = filterEvents.hasOwnProperty(typename.type) ? filterContextListener : contextListener;\n return function(d, i, group) {\n var on = this.__on, o, listener = wrap(value, i, group);\n if (on) for (var j = 0, m = on.length; j < m; ++j) {\n if ((o = on[j]).type === typename.type && o.name === typename.name) {\n this.removeEventListener(o.type, o.listener, o.capture);\n this.addEventListener(o.type, o.listener = listener, o.capture = capture);\n o.value = value;\n return;\n }\n }\n this.addEventListener(typename.type, listener, capture);\n o = {type: typename.type, name: typename.name, value: value, listener: listener, capture: capture};\n if (!on) this.__on = [o];\n else on.push(o);\n };\n}\n\nexport default function(typename, value, capture) {\n var typenames = parseTypenames(typename + \"\"), i, n = typenames.length, t;\n\n if (arguments.length < 2) {\n var on = this.node().__on;\n if (on) for (var j = 0, m = on.length, o; j < m; ++j) {\n for (i = 0, o = on[j]; i < n; ++i) {\n if ((t = typenames[i]).type === o.type && t.name === o.name) {\n return o.value;\n }\n }\n }\n return;\n }\n\n on = value ? onAdd : onRemove;\n if (capture == null) capture = false;\n for (i = 0; i < n; ++i) this.each(on(typenames[i], value, capture));\n return this;\n}\n\nexport function customEvent(event1, listener, that, args) {\n var event0 = event;\n event1.sourceEvent = event;\n event = event1;\n try {\n return listener.apply(that, args);\n } finally {\n event = event0;\n }\n}\n","import defaultView from \"../window\";\n\nfunction dispatchEvent(node, type, params) {\n var window = defaultView(node),\n event = window.CustomEvent;\n\n if (typeof event === \"function\") {\n event = new event(type, params);\n } else {\n event = window.document.createEvent(\"Event\");\n if (params) event.initEvent(type, params.bubbles, params.cancelable), event.detail = params.detail;\n else event.initEvent(type, false, false);\n }\n\n node.dispatchEvent(event);\n}\n\nfunction dispatchConstant(type, params) {\n return function() {\n return dispatchEvent(this, type, params);\n };\n}\n\nfunction dispatchFunction(type, params) {\n return function() {\n return dispatchEvent(this, type, params.apply(this, arguments));\n };\n}\n\nexport default function(type, params) {\n return this.each((typeof params === \"function\"\n ? dispatchFunction\n : dispatchConstant)(type, params));\n}\n","import selection_select from \"./select\";\nimport selection_selectAll from \"./selectAll\";\nimport selection_filter from \"./filter\";\nimport selection_data from \"./data\";\nimport selection_enter from \"./enter\";\nimport selection_exit from \"./exit\";\nimport selection_merge from \"./merge\";\nimport selection_order from \"./order\";\nimport selection_sort from \"./sort\";\nimport selection_call from \"./call\";\nimport selection_nodes from \"./nodes\";\nimport selection_node from \"./node\";\nimport selection_size from \"./size\";\nimport selection_empty from \"./empty\";\nimport selection_each from \"./each\";\nimport selection_attr from \"./attr\";\nimport selection_style from \"./style\";\nimport selection_property from \"./property\";\nimport selection_classed from \"./classed\";\nimport selection_text from \"./text\";\nimport selection_html from \"./html\";\nimport selection_raise from \"./raise\";\nimport selection_lower from \"./lower\";\nimport selection_append from \"./append\";\nimport selection_insert from \"./insert\";\nimport selection_remove from \"./remove\";\nimport selection_clone from \"./clone\";\nimport selection_datum from \"./datum\";\nimport selection_on from \"./on\";\nimport selection_dispatch from \"./dispatch\";\n\nexport var root = [null];\n\nexport function Selection(groups, parents) {\n this._groups = groups;\n this._parents = parents;\n}\n\nfunction selection() {\n return new Selection([[document.documentElement]], root);\n}\n\nSelection.prototype = selection.prototype = {\n constructor: Selection,\n select: selection_select,\n selectAll: selection_selectAll,\n filter: selection_filter,\n data: selection_data,\n enter: selection_enter,\n exit: selection_exit,\n merge: selection_merge,\n order: selection_order,\n sort: selection_sort,\n call: selection_call,\n nodes: selection_nodes,\n node: selection_node,\n size: selection_size,\n empty: selection_empty,\n each: selection_each,\n attr: selection_attr,\n style: selection_style,\n property: selection_property,\n classed: selection_classed,\n text: selection_text,\n html: selection_html,\n raise: selection_raise,\n lower: selection_lower,\n append: selection_append,\n insert: selection_insert,\n remove: selection_remove,\n clone: selection_clone,\n datum: selection_datum,\n on: selection_on,\n dispatch: selection_dispatch\n};\n\nexport default selection;\n","import {Selection} from \"./index\";\nimport selector from \"../selector\";\n\nexport default function(select) {\n if (typeof select !== \"function\") select = selector(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {\n if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {\n if (\"__data__\" in node) subnode.__data__ = node.__data__;\n subgroup[i] = subnode;\n }\n }\n }\n\n return new Selection(subgroups, this._parents);\n}\n","import {Selection} from \"./index\";\nimport selectorAll from \"../selectorAll\";\n\nexport default function(select) {\n if (typeof select !== \"function\") select = selectorAll(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n subgroups.push(select.call(node, node.__data__, i, group));\n parents.push(node);\n }\n }\n }\n\n return new Selection(subgroups, parents);\n}\n","import {Selection} from \"./index\";\nimport matcher from \"../matcher\";\n\nexport default function(match) {\n if (typeof match !== \"function\") match = matcher(match);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {\n if ((node = group[i]) && match.call(node, node.__data__, i, group)) {\n subgroup.push(node);\n }\n }\n }\n\n return new Selection(subgroups, this._parents);\n}\n","import sparse from \"./sparse\";\nimport {Selection} from \"./index\";\n\nexport default function() {\n return new Selection(this._exit || this._groups.map(sparse), this._parents);\n}\n","import {Selection} from \"./index\";\n\nexport default function(selection) {\n\n for (var groups0 = this._groups, groups1 = selection._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {\n for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group0[i] || group1[i]) {\n merge[i] = node;\n }\n }\n }\n\n for (; j < m0; ++j) {\n merges[j] = groups0[j];\n }\n\n return new Selection(merges, this._parents);\n}\n","export default function() {\n\n for (var groups = this._groups, j = -1, m = groups.length; ++j < m;) {\n for (var group = groups[j], i = group.length - 1, next = group[i], node; --i >= 0;) {\n if (node = group[i]) {\n if (next && next !== node.nextSibling) next.parentNode.insertBefore(node, next);\n next = node;\n }\n }\n }\n\n return this;\n}\n","export default function() {\n var callback = arguments[0];\n arguments[0] = this;\n callback.apply(null, arguments);\n return this;\n}\n","export default function() {\n var nodes = new Array(this.size()), i = -1;\n this.each(function() { nodes[++i] = this; });\n return nodes;\n}\n","export default function() {\n\n for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n for (var group = groups[j], i = 0, n = group.length; i < n; ++i) {\n var node = group[i];\n if (node) return node;\n }\n }\n\n return null;\n}\n","export default function() {\n var size = 0;\n this.each(function() { ++size; });\n return size;\n}\n","export default function() {\n return !this.node();\n}\n","export default function(callback) {\n\n for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n for (var group = groups[j], i = 0, n = group.length, node; i < n; ++i) {\n if (node = group[i]) callback.call(node, node.__data__, i, group);\n }\n }\n\n return this;\n}\n","function propertyRemove(name) {\n return function() {\n delete this[name];\n };\n}\n\nfunction propertyConstant(name, value) {\n return function() {\n this[name] = value;\n };\n}\n\nfunction propertyFunction(name, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) delete this[name];\n else this[name] = v;\n };\n}\n\nexport default function(name, value) {\n return arguments.length > 1\n ? this.each((value == null\n ? propertyRemove : typeof value === \"function\"\n ? propertyFunction\n : propertyConstant)(name, value))\n : this.node()[name];\n}\n","import creator from \"../creator\";\n\nexport default function(name) {\n var create = typeof name === \"function\" ? name : creator(name);\n return this.select(function() {\n return this.appendChild(create.apply(this, arguments));\n });\n}\n","export default function(value) {\n return arguments.length\n ? this.property(\"__data__\", value)\n : this.node().__data__;\n}\n","import {Selection, root} from \"./selection/index\";\n\nexport default function(selector) {\n return typeof selector === \"string\"\n ? new Selection([[document.querySelector(selector)]], [document.documentElement])\n : new Selection([[selector]], root);\n}\n","var nextId = 0;\n\nexport default function local() {\n return new Local;\n}\n\nfunction Local() {\n this._ = \"@\" + (++nextId).toString(36);\n}\n\nLocal.prototype = local.prototype = {\n constructor: Local,\n get: function(node) {\n var id = this._;\n while (!(id in node)) if (!(node = node.parentNode)) return;\n return node[id];\n },\n set: function(node, value) {\n return node[this._] = value;\n },\n remove: function(node) {\n return this._ in node && delete node[this._];\n },\n toString: function() {\n return this._;\n }\n};\n","import {event} from \"./selection/on\";\n\nexport default function() {\n var current = event, source;\n while (source = current.sourceEvent) current = source;\n return current;\n}\n","export default function(node, event) {\n var svg = node.ownerSVGElement || node;\n\n if (svg.createSVGPoint) {\n var point = svg.createSVGPoint();\n point.x = event.clientX, point.y = event.clientY;\n point = point.matrixTransform(node.getScreenCTM().inverse());\n return [point.x, point.y];\n }\n\n var rect = node.getBoundingClientRect();\n return [event.clientX - rect.left - node.clientLeft, event.clientY - rect.top - node.clientTop];\n}\n","import sourceEvent from \"./sourceEvent\";\nimport point from \"./point\";\n\nexport default function(node) {\n var event = sourceEvent();\n if (event.changedTouches) event = event.changedTouches[0];\n return point(node, event);\n}\n","import sourceEvent from \"./sourceEvent\";\nimport point from \"./point\";\n\nexport default function(node, touches, identifier) {\n if (arguments.length < 3) identifier = touches, touches = sourceEvent().changedTouches;\n\n for (var i = 0, n = touches ? touches.length : 0, touch; i < n; ++i) {\n if ((touch = touches[i]).identifier === identifier) {\n return point(node, touch);\n }\n }\n\n return null;\n}\n","var noop = {value: function() {}};\n\nfunction dispatch() {\n for (var i = 0, n = arguments.length, _ = {}, t; i < n; ++i) {\n if (!(t = arguments[i] + \"\") || (t in _)) throw new Error(\"illegal type: \" + t);\n _[t] = [];\n }\n return new Dispatch(_);\n}\n\nfunction Dispatch(_) {\n this._ = _;\n}\n\nfunction parseTypenames(typenames, types) {\n return typenames.trim().split(/^|\\s+/).map(function(t) {\n var name = \"\", i = t.indexOf(\".\");\n if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n if (t && !types.hasOwnProperty(t)) throw new Error(\"unknown type: \" + t);\n return {type: t, name: name};\n });\n}\n\nDispatch.prototype = dispatch.prototype = {\n constructor: Dispatch,\n on: function(typename, callback) {\n var _ = this._,\n T = parseTypenames(typename + \"\", _),\n t,\n i = -1,\n n = T.length;\n\n // If no callback was specified, return the callback of the given type and name.\n if (arguments.length < 2) {\n while (++i < n) if ((t = (typename = T[i]).type) && (t = get(_[t], typename.name))) return t;\n return;\n }\n\n // If a type was specified, set the callback for the given type and name.\n // Otherwise, if a null callback was specified, remove callbacks of the given name.\n if (callback != null && typeof callback !== \"function\") throw new Error(\"invalid callback: \" + callback);\n while (++i < n) {\n if (t = (typename = T[i]).type) _[t] = set(_[t], typename.name, callback);\n else if (callback == null) for (t in _) _[t] = set(_[t], typename.name, null);\n }\n\n return this;\n },\n copy: function() {\n var copy = {}, _ = this._;\n for (var t in _) copy[t] = _[t].slice();\n return new Dispatch(copy);\n },\n call: function(type, that) {\n if ((n = arguments.length - 2) > 0) for (var args = new Array(n), i = 0, n, t; i < n; ++i) args[i] = arguments[i + 2];\n if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n for (t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n },\n apply: function(type, that, args) {\n if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n for (var t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n }\n};\n\nfunction get(type, name) {\n for (var i = 0, n = type.length, c; i < n; ++i) {\n if ((c = type[i]).name === name) {\n return c.value;\n }\n }\n}\n\nfunction set(type, name, callback) {\n for (var i = 0, n = type.length; i < n; ++i) {\n if (type[i].name === name) {\n type[i] = noop, type = type.slice(0, i).concat(type.slice(i + 1));\n break;\n }\n }\n if (callback != null) type.push({name: name, value: callback});\n return type;\n}\n\nexport default dispatch;\n","import {event} from \"d3-selection\";\n\nexport function nopropagation() {\n event.stopImmediatePropagation();\n}\n\nexport default function() {\n event.preventDefault();\n event.stopImmediatePropagation();\n}\n","import {select} from \"d3-selection\";\nimport noevent from \"./noevent\";\n\nexport default function(view) {\n var root = view.document.documentElement,\n selection = select(view).on(\"dragstart.drag\", noevent, true);\n if (\"onselectstart\" in root) {\n selection.on(\"selectstart.drag\", noevent, true);\n } else {\n root.__noselect = root.style.MozUserSelect;\n root.style.MozUserSelect = \"none\";\n }\n}\n\nexport function yesdrag(view, noclick) {\n var root = view.document.documentElement,\n selection = select(view).on(\"dragstart.drag\", null);\n if (noclick) {\n selection.on(\"click.drag\", noevent, true);\n setTimeout(function() { selection.on(\"click.drag\", null); }, 0);\n }\n if (\"onselectstart\" in root) {\n selection.on(\"selectstart.drag\", null);\n } else {\n root.style.MozUserSelect = root.__noselect;\n delete root.__noselect;\n }\n}\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","export default function DragEvent(target, type, subject, id, active, x, y, dx, dy, dispatch) {\n this.target = target;\n this.type = type;\n this.subject = subject;\n this.identifier = id;\n this.active = active;\n this.x = x;\n this.y = y;\n this.dx = dx;\n this.dy = dy;\n this._ = dispatch;\n}\n\nDragEvent.prototype.on = function() {\n var value = this._.on.apply(this._, arguments);\n return value === this._ ? this : value;\n};\n","import {dispatch} from \"d3-dispatch\";\nimport {event, customEvent, select, mouse, touch} from \"d3-selection\";\nimport nodrag, {yesdrag} from \"./nodrag\";\nimport noevent, {nopropagation} from \"./noevent\";\nimport constant from \"./constant\";\nimport DragEvent from \"./event\";\n\n// Ignore right-click, since that should open the context menu.\nfunction defaultFilter() {\n return !event.button;\n}\n\nfunction defaultContainer() {\n return this.parentNode;\n}\n\nfunction defaultSubject(d) {\n return d == null ? {x: event.x, y: event.y} : d;\n}\n\nfunction defaultTouchable() {\n return \"ontouchstart\" in this;\n}\n\nexport default function() {\n var filter = defaultFilter,\n container = defaultContainer,\n subject = defaultSubject,\n touchable = defaultTouchable,\n gestures = {},\n listeners = dispatch(\"start\", \"drag\", \"end\"),\n active = 0,\n mousedownx,\n mousedowny,\n mousemoving,\n touchending,\n clickDistance2 = 0;\n\n function drag(selection) {\n selection\n .on(\"mousedown.drag\", mousedowned)\n .filter(touchable)\n .on(\"touchstart.drag\", touchstarted)\n .on(\"touchmove.drag\", touchmoved)\n .on(\"touchend.drag touchcancel.drag\", touchended)\n .style(\"touch-action\", \"none\")\n .style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\");\n }\n\n function mousedowned() {\n if (touchending || !filter.apply(this, arguments)) return;\n var gesture = beforestart(\"mouse\", container.apply(this, arguments), mouse, this, arguments);\n if (!gesture) return;\n select(event.view).on(\"mousemove.drag\", mousemoved, true).on(\"mouseup.drag\", mouseupped, true);\n nodrag(event.view);\n nopropagation();\n mousemoving = false;\n mousedownx = event.clientX;\n mousedowny = event.clientY;\n gesture(\"start\");\n }\n\n function mousemoved() {\n noevent();\n if (!mousemoving) {\n var dx = event.clientX - mousedownx, dy = event.clientY - mousedowny;\n mousemoving = dx * dx + dy * dy > clickDistance2;\n }\n gestures.mouse(\"drag\");\n }\n\n function mouseupped() {\n select(event.view).on(\"mousemove.drag mouseup.drag\", null);\n yesdrag(event.view, mousemoving);\n noevent();\n gestures.mouse(\"end\");\n }\n\n function touchstarted() {\n if (!filter.apply(this, arguments)) return;\n var touches = event.changedTouches,\n c = container.apply(this, arguments),\n n = touches.length, i, gesture;\n\n for (i = 0; i < n; ++i) {\n if (gesture = beforestart(touches[i].identifier, c, touch, this, arguments)) {\n nopropagation();\n gesture(\"start\");\n }\n }\n }\n\n function touchmoved() {\n var touches = event.changedTouches,\n n = touches.length, i, gesture;\n\n for (i = 0; i < n; ++i) {\n if (gesture = gestures[touches[i].identifier]) {\n noevent();\n gesture(\"drag\");\n }\n }\n }\n\n function touchended() {\n var touches = event.changedTouches,\n n = touches.length, i, gesture;\n\n if (touchending) clearTimeout(touchending);\n touchending = setTimeout(function() { touchending = null; }, 500); // Ghost clicks are delayed!\n for (i = 0; i < n; ++i) {\n if (gesture = gestures[touches[i].identifier]) {\n nopropagation();\n gesture(\"end\");\n }\n }\n }\n\n function beforestart(id, container, point, that, args) {\n var p = point(container, id), s, dx, dy,\n sublisteners = listeners.copy();\n\n if (!customEvent(new DragEvent(drag, \"beforestart\", s, id, active, p[0], p[1], 0, 0, sublisteners), function() {\n if ((event.subject = s = subject.apply(that, args)) == null) return false;\n dx = s.x - p[0] || 0;\n dy = s.y - p[1] || 0;\n return true;\n })) return;\n\n return function gesture(type) {\n var p0 = p, n;\n switch (type) {\n case \"start\": gestures[id] = gesture, n = active++; break;\n case \"end\": delete gestures[id], --active; // nobreak\n case \"drag\": p = point(container, id), n = active; break;\n }\n customEvent(new DragEvent(drag, type, s, id, n, p[0] + dx, p[1] + dy, p[0] - p0[0], p[1] - p0[1], sublisteners), sublisteners.apply, sublisteners, [type, that, args]);\n };\n }\n\n drag.filter = function(_) {\n return arguments.length ? (filter = typeof _ === \"function\" ? _ : constant(!!_), drag) : filter;\n };\n\n drag.container = function(_) {\n return arguments.length ? (container = typeof _ === \"function\" ? _ : constant(_), drag) : container;\n };\n\n drag.subject = function(_) {\n return arguments.length ? (subject = typeof _ === \"function\" ? _ : constant(_), drag) : subject;\n };\n\n drag.touchable = function(_) {\n return arguments.length ? (touchable = typeof _ === \"function\" ? _ : constant(!!_), drag) : touchable;\n };\n\n drag.on = function() {\n var value = listeners.on.apply(listeners, arguments);\n return value === listeners ? drag : value;\n };\n\n drag.clickDistance = function(_) {\n return arguments.length ? (clickDistance2 = (_ = +_) * _, drag) : Math.sqrt(clickDistance2);\n };\n\n return drag;\n}\n","var frame = 0, // is an animation frame pending?\n timeout = 0, // is a timeout pending?\n interval = 0, // are any timers active?\n pokeDelay = 1000, // how frequently we check for clock skew\n taskHead,\n taskTail,\n clockLast = 0,\n clockNow = 0,\n clockSkew = 0,\n clock = typeof performance === \"object\" && performance.now ? performance : Date,\n setFrame = typeof window === \"object\" && window.requestAnimationFrame ? window.requestAnimationFrame.bind(window) : function(f) { setTimeout(f, 17); };\n\nexport function now() {\n return clockNow || (setFrame(clearNow), clockNow = clock.now() + clockSkew);\n}\n\nfunction clearNow() {\n clockNow = 0;\n}\n\nexport function Timer() {\n this._call =\n this._time =\n this._next = null;\n}\n\nTimer.prototype = timer.prototype = {\n constructor: Timer,\n restart: function(callback, delay, time) {\n if (typeof callback !== \"function\") throw new TypeError(\"callback is not a function\");\n time = (time == null ? now() : +time) + (delay == null ? 0 : +delay);\n if (!this._next && taskTail !== this) {\n if (taskTail) taskTail._next = this;\n else taskHead = this;\n taskTail = this;\n }\n this._call = callback;\n this._time = time;\n sleep();\n },\n stop: function() {\n if (this._call) {\n this._call = null;\n this._time = Infinity;\n sleep();\n }\n }\n};\n\nexport function timer(callback, delay, time) {\n var t = new Timer;\n t.restart(callback, delay, time);\n return t;\n}\n\nexport function timerFlush() {\n now(); // Get the current time, if not already set.\n ++frame; // Pretend we’ve set an alarm, if we haven’t already.\n var t = taskHead, e;\n while (t) {\n if ((e = clockNow - t._time) >= 0) t._call.call(null, e);\n t = t._next;\n }\n --frame;\n}\n\nfunction wake() {\n clockNow = (clockLast = clock.now()) + clockSkew;\n frame = timeout = 0;\n try {\n timerFlush();\n } finally {\n frame = 0;\n nap();\n clockNow = 0;\n }\n}\n\nfunction poke() {\n var now = clock.now(), delay = now - clockLast;\n if (delay > pokeDelay) clockSkew -= delay, clockLast = now;\n}\n\nfunction nap() {\n var t0, t1 = taskHead, t2, time = Infinity;\n while (t1) {\n if (t1._call) {\n if (time > t1._time) time = t1._time;\n t0 = t1, t1 = t1._next;\n } else {\n t2 = t1._next, t1._next = null;\n t1 = t0 ? t0._next = t2 : taskHead = t2;\n }\n }\n taskTail = t0;\n sleep(time);\n}\n\nfunction sleep(time) {\n if (frame) return; // Soonest alarm already set, or will be.\n if (timeout) timeout = clearTimeout(timeout);\n var delay = time - clockNow; // Strictly less than if we recomputed clockNow.\n if (delay > 24) {\n if (time < Infinity) timeout = setTimeout(wake, time - clock.now() - clockSkew);\n if (interval) interval = clearInterval(interval);\n } else {\n if (!interval) clockLast = clock.now(), interval = setInterval(poke, pokeDelay);\n frame = 1, setFrame(wake);\n }\n}\n","import {Timer} from \"./timer\";\n\nexport default function(callback, delay, time) {\n var t = new Timer;\n delay = delay == null ? 0 : +delay;\n t.restart(function(elapsed) {\n t.stop();\n callback(elapsed + delay);\n }, delay, time);\n return t;\n}\n","import {dispatch} from \"d3-dispatch\";\nimport {timer, timeout} from \"d3-timer\";\n\nvar emptyOn = dispatch(\"start\", \"end\", \"interrupt\");\nvar emptyTween = [];\n\nexport var CREATED = 0;\nexport var SCHEDULED = 1;\nexport var STARTING = 2;\nexport var STARTED = 3;\nexport var RUNNING = 4;\nexport var ENDING = 5;\nexport var ENDED = 6;\n\nexport default function(node, name, id, index, group, timing) {\n var schedules = node.__transition;\n if (!schedules) node.__transition = {};\n else if (id in schedules) return;\n create(node, id, {\n name: name,\n index: index, // For context during callback.\n group: group, // For context during callback.\n on: emptyOn,\n tween: emptyTween,\n time: timing.time,\n delay: timing.delay,\n duration: timing.duration,\n ease: timing.ease,\n timer: null,\n state: CREATED\n });\n}\n\nexport function init(node, id) {\n var schedule = get(node, id);\n if (schedule.state > CREATED) throw new Error(\"too late; already scheduled\");\n return schedule;\n}\n\nexport function set(node, id) {\n var schedule = get(node, id);\n if (schedule.state > STARTING) throw new Error(\"too late; already started\");\n return schedule;\n}\n\nexport function get(node, id) {\n var schedule = node.__transition;\n if (!schedule || !(schedule = schedule[id])) throw new Error(\"transition not found\");\n return schedule;\n}\n\nfunction create(node, id, self) {\n var schedules = node.__transition,\n tween;\n\n // Initialize the self timer when the transition is created.\n // Note the actual delay is not known until the first callback!\n schedules[id] = self;\n self.timer = timer(schedule, 0, self.time);\n\n function schedule(elapsed) {\n self.state = SCHEDULED;\n self.timer.restart(start, self.delay, self.time);\n\n // If the elapsed delay is less than our first sleep, start immediately.\n if (self.delay <= elapsed) start(elapsed - self.delay);\n }\n\n function start(elapsed) {\n var i, j, n, o;\n\n // If the state is not SCHEDULED, then we previously errored on start.\n if (self.state !== SCHEDULED) return stop();\n\n for (i in schedules) {\n o = schedules[i];\n if (o.name !== self.name) continue;\n\n // While this element already has a starting transition during this frame,\n // defer starting an interrupting transition until that transition has a\n // chance to tick (and possibly end); see d3/d3-transition#54!\n if (o.state === STARTED) return timeout(start);\n\n // Interrupt the active transition, if any.\n // Dispatch the interrupt event.\n if (o.state === RUNNING) {\n o.state = ENDED;\n o.timer.stop();\n o.on.call(\"interrupt\", node, node.__data__, o.index, o.group);\n delete schedules[i];\n }\n\n // Cancel any pre-empted transitions. No interrupt event is dispatched\n // because the cancelled transitions never started. Note that this also\n // removes this transition from the pending list!\n else if (+i < id) {\n o.state = ENDED;\n o.timer.stop();\n delete schedules[i];\n }\n }\n\n // Defer the first tick to end of the current frame; see d3/d3#1576.\n // Note the transition may be canceled after start and before the first tick!\n // Note this must be scheduled before the start event; see d3/d3-transition#16!\n // Assuming this is successful, subsequent callbacks go straight to tick.\n timeout(function() {\n if (self.state === STARTED) {\n self.state = RUNNING;\n self.timer.restart(tick, self.delay, self.time);\n tick(elapsed);\n }\n });\n\n // Dispatch the start event.\n // Note this must be done before the tween are initialized.\n self.state = STARTING;\n self.on.call(\"start\", node, node.__data__, self.index, self.group);\n if (self.state !== STARTING) return; // interrupted\n self.state = STARTED;\n\n // Initialize the tween, deleting null tween.\n tween = new Array(n = self.tween.length);\n for (i = 0, j = -1; i < n; ++i) {\n if (o = self.tween[i].value.call(node, node.__data__, self.index, self.group)) {\n tween[++j] = o;\n }\n }\n tween.length = j + 1;\n }\n\n function tick(elapsed) {\n var t = elapsed < self.duration ? self.ease.call(null, elapsed / self.duration) : (self.timer.restart(stop), self.state = ENDING, 1),\n i = -1,\n n = tween.length;\n\n while (++i < n) {\n tween[i].call(null, t);\n }\n\n // Dispatch the end event.\n if (self.state === ENDING) {\n self.on.call(\"end\", node, node.__data__, self.index, self.group);\n stop();\n }\n }\n\n function stop() {\n self.state = ENDED;\n self.timer.stop();\n delete schedules[id];\n for (var i in schedules) return; // eslint-disable-line no-unused-vars\n delete node.__transition;\n }\n}\n","import {get, set} from \"./schedule\";\n\nfunction tweenRemove(id, name) {\n var tween0, tween1;\n return function() {\n var schedule = set(this, id),\n tween = schedule.tween;\n\n // If this node shared tween with the previous node,\n // just assign the updated shared tween and we’re done!\n // Otherwise, copy-on-write.\n if (tween !== tween0) {\n tween1 = tween0 = tween;\n for (var i = 0, n = tween1.length; i < n; ++i) {\n if (tween1[i].name === name) {\n tween1 = tween1.slice();\n tween1.splice(i, 1);\n break;\n }\n }\n }\n\n schedule.tween = tween1;\n };\n}\n\nfunction tweenFunction(id, name, value) {\n var tween0, tween1;\n if (typeof value !== \"function\") throw new Error;\n return function() {\n var schedule = set(this, id),\n tween = schedule.tween;\n\n // If this node shared tween with the previous node,\n // just assign the updated shared tween and we’re done!\n // Otherwise, copy-on-write.\n if (tween !== tween0) {\n tween1 = (tween0 = tween).slice();\n for (var t = {name: name, value: value}, i = 0, n = tween1.length; i < n; ++i) {\n if (tween1[i].name === name) {\n tween1[i] = t;\n break;\n }\n }\n if (i === n) tween1.push(t);\n }\n\n schedule.tween = tween1;\n };\n}\n\nexport default function(name, value) {\n var id = this._id;\n\n name += \"\";\n\n if (arguments.length < 2) {\n var tween = get(this.node(), id).tween;\n for (var i = 0, n = tween.length, t; i < n; ++i) {\n if ((t = tween[i]).name === name) {\n return t.value;\n }\n }\n return null;\n }\n\n return this.each((value == null ? tweenRemove : tweenFunction)(id, name, value));\n}\n\nexport function tweenValue(transition, name, value) {\n var id = transition._id;\n\n transition.each(function() {\n var schedule = set(this, id);\n (schedule.value || (schedule.value = {}))[name] = value.apply(this, arguments);\n });\n\n return function(node) {\n return get(node, id).value[name];\n };\n}\n","import {color} from \"d3-color\";\nimport {interpolateNumber, interpolateRgb, interpolateString} from \"d3-interpolate\";\n\nexport default function(a, b) {\n var c;\n return (typeof b === \"number\" ? interpolateNumber\n : b instanceof color ? interpolateRgb\n : (c = color(b)) ? (b = c, interpolateRgb)\n : interpolateString)(a, b);\n}\n","function removeFunction(id) {\n return function() {\n var parent = this.parentNode;\n for (var i in this.__transition) if (+i !== id) return;\n if (parent) parent.removeChild(this);\n };\n}\n\nexport default function() {\n return this.on(\"end.remove\", removeFunction(this._id));\n}\n","import {selection} from \"d3-selection\";\n\nvar Selection = selection.prototype.constructor;\n\nexport default function() {\n return new Selection(this._groups, this._parents);\n}\n","import {tweenValue} from \"./tween\";\n\nfunction textConstant(value) {\n return function() {\n this.textContent = value;\n };\n}\n\nfunction textFunction(value) {\n return function() {\n var value1 = value(this);\n this.textContent = value1 == null ? \"\" : value1;\n };\n}\n\nexport default function(value) {\n return this.tween(\"text\", typeof value === \"function\"\n ? textFunction(tweenValue(this, \"text\", value))\n : textConstant(value == null ? \"\" : value + \"\"));\n}\n","import {selection} from \"d3-selection\";\nimport transition_attr from \"./attr\";\nimport transition_attrTween from \"./attrTween\";\nimport transition_delay from \"./delay\";\nimport transition_duration from \"./duration\";\nimport transition_ease from \"./ease\";\nimport transition_filter from \"./filter\";\nimport transition_merge from \"./merge\";\nimport transition_on from \"./on\";\nimport transition_remove from \"./remove\";\nimport transition_select from \"./select\";\nimport transition_selectAll from \"./selectAll\";\nimport transition_selection from \"./selection\";\nimport transition_style from \"./style\";\nimport transition_styleTween from \"./styleTween\";\nimport transition_text from \"./text\";\nimport transition_transition from \"./transition\";\nimport transition_tween from \"./tween\";\n\nvar id = 0;\n\nexport function Transition(groups, parents, name, id) {\n this._groups = groups;\n this._parents = parents;\n this._name = name;\n this._id = id;\n}\n\nexport default function transition(name) {\n return selection().transition(name);\n}\n\nexport function newId() {\n return ++id;\n}\n\nvar selection_prototype = selection.prototype;\n\nTransition.prototype = transition.prototype = {\n constructor: Transition,\n select: transition_select,\n selectAll: transition_selectAll,\n filter: transition_filter,\n merge: transition_merge,\n selection: transition_selection,\n transition: transition_transition,\n call: selection_prototype.call,\n nodes: selection_prototype.nodes,\n node: selection_prototype.node,\n size: selection_prototype.size,\n empty: selection_prototype.empty,\n each: selection_prototype.each,\n on: transition_on,\n attr: transition_attr,\n attrTween: transition_attrTween,\n style: transition_style,\n styleTween: transition_styleTween,\n text: transition_text,\n remove: transition_remove,\n tween: transition_tween,\n delay: transition_delay,\n duration: transition_duration,\n ease: transition_ease\n};\n","import {selector} from \"d3-selection\";\nimport {Transition} from \"./index\";\nimport schedule, {get} from \"./schedule\";\n\nexport default function(select) {\n var name = this._name,\n id = this._id;\n\n if (typeof select !== \"function\") select = selector(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {\n if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {\n if (\"__data__\" in node) subnode.__data__ = node.__data__;\n subgroup[i] = subnode;\n schedule(subgroup[i], name, id, i, subgroup, get(node, id));\n }\n }\n }\n\n return new Transition(subgroups, this._parents, name, id);\n}\n","import {selectorAll} from \"d3-selection\";\nimport {Transition} from \"./index\";\nimport schedule, {get} from \"./schedule\";\n\nexport default function(select) {\n var name = this._name,\n id = this._id;\n\n if (typeof select !== \"function\") select = selectorAll(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n for (var children = select.call(node, node.__data__, i, group), child, inherit = get(node, id), k = 0, l = children.length; k < l; ++k) {\n if (child = children[k]) {\n schedule(child, name, id, k, children, inherit);\n }\n }\n subgroups.push(children);\n parents.push(node);\n }\n }\n }\n\n return new Transition(subgroups, parents, name, id);\n}\n","import {matcher} from \"d3-selection\";\nimport {Transition} from \"./index\";\n\nexport default function(match) {\n if (typeof match !== \"function\") match = matcher(match);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {\n if ((node = group[i]) && match.call(node, node.__data__, i, group)) {\n subgroup.push(node);\n }\n }\n }\n\n return new Transition(subgroups, this._parents, this._name, this._id);\n}\n","import {Transition} from \"./index\";\n\nexport default function(transition) {\n if (transition._id !== this._id) throw new Error;\n\n for (var groups0 = this._groups, groups1 = transition._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {\n for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group0[i] || group1[i]) {\n merge[i] = node;\n }\n }\n }\n\n for (; j < m0; ++j) {\n merges[j] = groups0[j];\n }\n\n return new Transition(merges, this._parents, this._name, this._id);\n}\n","import {Transition, newId} from \"./index\";\nimport schedule, {get} from \"./schedule\";\n\nexport default function() {\n var name = this._name,\n id0 = this._id,\n id1 = newId();\n\n for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n var inherit = get(node, id0);\n schedule(node, name, id1, i, group, {\n time: inherit.time + inherit.delay + inherit.duration,\n delay: 0,\n duration: inherit.duration,\n ease: inherit.ease\n });\n }\n }\n }\n\n return new Transition(groups, this._parents, name, id1);\n}\n","import {get, set, init} from \"./schedule\";\n\nfunction start(name) {\n return (name + \"\").trim().split(/^|\\s+/).every(function(t) {\n var i = t.indexOf(\".\");\n if (i >= 0) t = t.slice(0, i);\n return !t || t === \"start\";\n });\n}\n\nfunction onFunction(id, name, listener) {\n var on0, on1, sit = start(name) ? init : set;\n return function() {\n var schedule = sit(this, id),\n on = schedule.on;\n\n // If this node shared a dispatch with the previous node,\n // just assign the updated shared dispatch and we’re done!\n // Otherwise, copy-on-write.\n if (on !== on0) (on1 = (on0 = on).copy()).on(name, listener);\n\n schedule.on = on1;\n };\n}\n\nexport default function(name, listener) {\n var id = this._id;\n\n return arguments.length < 2\n ? get(this.node(), id).on.on(name)\n : this.each(onFunction(id, name, listener));\n}\n","import {interpolateTransformSvg as interpolateTransform} from \"d3-interpolate\";\nimport {namespace} from \"d3-selection\";\nimport {tweenValue} from \"./tween\";\nimport interpolate from \"./interpolate\";\n\nfunction attrRemove(name) {\n return function() {\n this.removeAttribute(name);\n };\n}\n\nfunction attrRemoveNS(fullname) {\n return function() {\n this.removeAttributeNS(fullname.space, fullname.local);\n };\n}\n\nfunction attrConstant(name, interpolate, value1) {\n var value00,\n interpolate0;\n return function() {\n var value0 = this.getAttribute(name);\n return value0 === value1 ? null\n : value0 === value00 ? interpolate0\n : interpolate0 = interpolate(value00 = value0, value1);\n };\n}\n\nfunction attrConstantNS(fullname, interpolate, value1) {\n var value00,\n interpolate0;\n return function() {\n var value0 = this.getAttributeNS(fullname.space, fullname.local);\n return value0 === value1 ? null\n : value0 === value00 ? interpolate0\n : interpolate0 = interpolate(value00 = value0, value1);\n };\n}\n\nfunction attrFunction(name, interpolate, value) {\n var value00,\n value10,\n interpolate0;\n return function() {\n var value0, value1 = value(this);\n if (value1 == null) return void this.removeAttribute(name);\n value0 = this.getAttribute(name);\n return value0 === value1 ? null\n : value0 === value00 && value1 === value10 ? interpolate0\n : interpolate0 = interpolate(value00 = value0, value10 = value1);\n };\n}\n\nfunction attrFunctionNS(fullname, interpolate, value) {\n var value00,\n value10,\n interpolate0;\n return function() {\n var value0, value1 = value(this);\n if (value1 == null) return void this.removeAttributeNS(fullname.space, fullname.local);\n value0 = this.getAttributeNS(fullname.space, fullname.local);\n return value0 === value1 ? null\n : value0 === value00 && value1 === value10 ? interpolate0\n : interpolate0 = interpolate(value00 = value0, value10 = value1);\n };\n}\n\nexport default function(name, value) {\n var fullname = namespace(name), i = fullname === \"transform\" ? interpolateTransform : interpolate;\n return this.attrTween(name, typeof value === \"function\"\n ? (fullname.local ? attrFunctionNS : attrFunction)(fullname, i, tweenValue(this, \"attr.\" + name, value))\n : value == null ? (fullname.local ? attrRemoveNS : attrRemove)(fullname)\n : (fullname.local ? attrConstantNS : attrConstant)(fullname, i, value + \"\"));\n}\n","import {namespace} from \"d3-selection\";\n\nfunction attrTweenNS(fullname, value) {\n function tween() {\n var node = this, i = value.apply(node, arguments);\n return i && function(t) {\n node.setAttributeNS(fullname.space, fullname.local, i(t));\n };\n }\n tween._value = value;\n return tween;\n}\n\nfunction attrTween(name, value) {\n function tween() {\n var node = this, i = value.apply(node, arguments);\n return i && function(t) {\n node.setAttribute(name, i(t));\n };\n }\n tween._value = value;\n return tween;\n}\n\nexport default function(name, value) {\n var key = \"attr.\" + name;\n if (arguments.length < 2) return (key = this.tween(key)) && key._value;\n if (value == null) return this.tween(key, null);\n if (typeof value !== \"function\") throw new Error;\n var fullname = namespace(name);\n return this.tween(key, (fullname.local ? attrTweenNS : attrTween)(fullname, value));\n}\n","import {interpolateTransformCss as interpolateTransform} from \"d3-interpolate\";\nimport {style} from \"d3-selection\";\nimport {tweenValue} from \"./tween\";\nimport interpolate from \"./interpolate\";\n\nfunction styleRemove(name, interpolate) {\n var value00,\n value10,\n interpolate0;\n return function() {\n var value0 = style(this, name),\n value1 = (this.style.removeProperty(name), style(this, name));\n return value0 === value1 ? null\n : value0 === value00 && value1 === value10 ? interpolate0\n : interpolate0 = interpolate(value00 = value0, value10 = value1);\n };\n}\n\nfunction styleRemoveEnd(name) {\n return function() {\n this.style.removeProperty(name);\n };\n}\n\nfunction styleConstant(name, interpolate, value1) {\n var value00,\n interpolate0;\n return function() {\n var value0 = style(this, name);\n return value0 === value1 ? null\n : value0 === value00 ? interpolate0\n : interpolate0 = interpolate(value00 = value0, value1);\n };\n}\n\nfunction styleFunction(name, interpolate, value) {\n var value00,\n value10,\n interpolate0;\n return function() {\n var value0 = style(this, name),\n value1 = value(this);\n if (value1 == null) value1 = (this.style.removeProperty(name), style(this, name));\n return value0 === value1 ? null\n : value0 === value00 && value1 === value10 ? interpolate0\n : interpolate0 = interpolate(value00 = value0, value10 = value1);\n };\n}\n\nexport default function(name, value, priority) {\n var i = (name += \"\") === \"transform\" ? interpolateTransform : interpolate;\n return value == null ? this\n .styleTween(name, styleRemove(name, i))\n .on(\"end.style.\" + name, styleRemoveEnd(name))\n : this.styleTween(name, typeof value === \"function\"\n ? styleFunction(name, i, tweenValue(this, \"style.\" + name, value))\n : styleConstant(name, i, value + \"\"), priority);\n}\n","function styleTween(name, value, priority) {\n function tween() {\n var node = this, i = value.apply(node, arguments);\n return i && function(t) {\n node.style.setProperty(name, i(t), priority);\n };\n }\n tween._value = value;\n return tween;\n}\n\nexport default function(name, value, priority) {\n var key = \"style.\" + (name += \"\");\n if (arguments.length < 2) return (key = this.tween(key)) && key._value;\n if (value == null) return this.tween(key, null);\n if (typeof value !== \"function\") throw new Error;\n return this.tween(key, styleTween(name, value, priority == null ? \"\" : priority));\n}\n","import {get, init} from \"./schedule\";\n\nfunction delayFunction(id, value) {\n return function() {\n init(this, id).delay = +value.apply(this, arguments);\n };\n}\n\nfunction delayConstant(id, value) {\n return value = +value, function() {\n init(this, id).delay = value;\n };\n}\n\nexport default function(value) {\n var id = this._id;\n\n return arguments.length\n ? this.each((typeof value === \"function\"\n ? delayFunction\n : delayConstant)(id, value))\n : get(this.node(), id).delay;\n}\n","import {get, set} from \"./schedule\";\n\nfunction durationFunction(id, value) {\n return function() {\n set(this, id).duration = +value.apply(this, arguments);\n };\n}\n\nfunction durationConstant(id, value) {\n return value = +value, function() {\n set(this, id).duration = value;\n };\n}\n\nexport default function(value) {\n var id = this._id;\n\n return arguments.length\n ? this.each((typeof value === \"function\"\n ? durationFunction\n : durationConstant)(id, value))\n : get(this.node(), id).duration;\n}\n","import {get, set} from \"./schedule\";\n\nfunction easeConstant(id, value) {\n if (typeof value !== \"function\") throw new Error;\n return function() {\n set(this, id).ease = value;\n };\n}\n\nexport default function(value) {\n var id = this._id;\n\n return arguments.length\n ? this.each(easeConstant(id, value))\n : get(this.node(), id).ease;\n}\n","import {Transition, newId} from \"../transition/index\";\nimport schedule from \"../transition/schedule\";\nimport {easeCubicInOut} from \"d3-ease\";\nimport {now} from \"d3-timer\";\n\nvar defaultTiming = {\n time: null, // Set on use.\n delay: 0,\n duration: 250,\n ease: easeCubicInOut\n};\n\nfunction inherit(node, id) {\n var timing;\n while (!(timing = node.__transition) || !(timing = timing[id])) {\n if (!(node = node.parentNode)) {\n return defaultTiming.time = now(), defaultTiming;\n }\n }\n return timing;\n}\n\nexport default function(name) {\n var id,\n timing;\n\n if (name instanceof Transition) {\n id = name._id, name = name._name;\n } else {\n id = newId(), (timing = defaultTiming).time = now(), name = name == null ? null : name + \"\";\n }\n\n for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n schedule(node, name, id, i, group, timing || inherit(node, id));\n }\n }\n }\n\n return new Transition(groups, this._parents, name, id);\n}\n","import {selection} from \"d3-selection\";\nimport selection_interrupt from \"./interrupt\";\nimport selection_transition from \"./transition\";\n\nselection.prototype.interrupt = selection_interrupt;\nselection.prototype.transition = selection_transition;\n","import interrupt from \"../interrupt\";\n\nexport default function(name) {\n return this.each(function() {\n interrupt(this, name);\n });\n}\n","import {STARTING, ENDING, ENDED} from \"./transition/schedule\";\n\nexport default function(node, name) {\n var schedules = node.__transition,\n schedule,\n active,\n empty = true,\n i;\n\n if (!schedules) return;\n\n name = name == null ? null : name + \"\";\n\n for (i in schedules) {\n if ((schedule = schedules[i]).name !== name) { empty = false; continue; }\n active = schedule.state > STARTING && schedule.state < ENDING;\n schedule.state = ENDED;\n schedule.timer.stop();\n if (active) schedule.on.call(\"interrupt\", node, node.__data__, schedule.index, schedule.group);\n delete schedules[i];\n }\n\n if (empty) delete node.__transition;\n}\n","import {Transition} from \"./transition/index\";\nimport {SCHEDULED} from \"./transition/schedule\";\n\nvar root = [null];\n\nexport default function(node, name) {\n var schedules = node.__transition,\n schedule,\n i;\n\n if (schedules) {\n name = name == null ? null : name + \"\";\n for (i in schedules) {\n if ((schedule = schedules[i]).state > SCHEDULED && schedule.name === name) {\n return new Transition([[node]], root, name, +i);\n }\n }\n }\n\n return null;\n}\n","import { select, event as d3event, selection, clientPoint } from 'd3-selection';\nimport { drag as d3drag } from 'd3-drag';\nimport 'd3-transition';\nimport { mergeRecursive } from './common-utils';\n/**\n * This function takes a raw DOM element or\n * a string and returns a d3 selection of that element.\n *\n * @param {HTMLElement | string} element The element to wrap in d3 selection.\n * @return {Selection} Instance of d3 selection.\n */\nconst selectElement = element => select(element);\n\n/**\n * It creates a new d3 element on the parent element\n * @param {Selection} parent Element to which the element is to be appended\n * @param {Object} elemType Type of the new element\n * @param {Array} data Data for the new element\n * @param {Object} selector classname/id/tagname for the element\n * @return {HTMLElement} Newly Created Element\n */\nconst makeElement = (parent, elemType, data, selector, callbacks = {}, keyFn) => {\n if ((parent instanceof HTMLElement || parent instanceof SVGElement)) {\n parent = selectElement(parent);\n }\n\n const selectorVal = selector ? selector[0] : null;\n let selectorType = null;\n let actualSelector = null;\n let element = null;\n let enterSel = null;\n let mergeSel = null;\n let filter;\n if (selectorVal) {\n if (selectorVal === '#') {\n selectorType = 'id';\n actualSelector = selector;\n } else {\n selectorType = 'class';\n actualSelector = selector[0] === '.' ? selector : `.${selector}`;\n }\n } else {\n actualSelector = elemType;\n filter = true;\n }\n element = parent.selectAll(actualSelector);\n\n filter && (element = element.filter(function () {\n return this.parentNode === parent.node();\n }));\n element = element.data(data, keyFn);\n\n enterSel = element.enter()\n .append(elemType || 'div');\n callbacks.enter && enterSel.each(function (...params) {\n callbacks.enter(selectElement(this), ...params);\n });\n\n mergeSel = enterSel.merge(element);\n callbacks.update && mergeSel.each(function (...params) {\n callbacks.update(selectElement(this), ...params);\n });\n if (selectorType === 'class') {\n mergeSel.classed(selectorVal === '.' ? selector.substring(1, selector.length) : selector, true);\n } else if (selectorType === 'id') {\n mergeSel.attr('id', selector.substring(1, selector.length));\n }\n const exitSel = element.exit();\n\n if (callbacks.exit) {\n exitSel.each(function (...params) {\n callbacks.exit(selectElement(this), ...params);\n });\n } else {\n exitSel.remove();\n }\n return mergeSel;\n};\n\n/**\n * This function applies styles to an element\n * @param {Object} elem Element Selection\n * @param {Object} styleObj Style Object to be applied\n * @return {Element} Newly Created Element\n*/\nconst applyStyle = (elem, styleObj) => {\n Object.entries(styleObj).forEach((d) => {\n elem.style(d[0], d[1]);\n }, this);\n return elem;\n};\n\n/**\n * This function appends a dom element in another element.\n * @param {HTMLElement | SVGElement} element1 The element in which to append the second element\n * @param {HTMLElement | SVGElement} element2 The element which will be appended.\n */\nconst appendElement = (element1, element2) => {\n element1.appendChild(element2);\n};\n\n/**\n * Sets the attributes to the element.\n * @param {HTMLElement | SVGElement} element Element on which attributes will be applied\n * @param {Object} attrs Attributes which need to be applied\n */\nconst setElementAttrs = (element, attrs) => {\n for (const key in attrs) {\n if ({}.hasOwnProperty.call(attrs, key)) {\n element.attr(key, attrs[key]);\n }\n }\n};\n\n/**\n * Sets attributes in the svg or html element\n * @param {SVGElement | HTMLElement} element The element on which attrs will be applied\n * @param {Array.} attrs Array of attributes\n * @param {string} className className of elements to select.\n * @return {SVGElement | HTMLElement} SVGElement or html element.\n */\nconst setAttrs = (element, attrs, className) => {\n if (!(element instanceof selection)) {\n element = selectElement(element);\n }\n className !== undefined ? element.selectAll(`.${className}`).each(function () {\n setElementAttrs(select(this), attrs);\n }) : setElementAttrs(element, attrs);\n return element;\n};\n\n/**\n * Adds a css class to elements which passes the filter function.If filter function is not given,\n * then all elements will be applied the class.\n * @param {HTMLElement | SVGElement} element element\n * @param {string} className css class\n * @param {string} selector css selector\n * @param {Function} filterFn filter method.\n */\nconst addClass = (element, className, selector, filterFn) => {\n select(element).selectAll(selector).each(function (data) {\n const elem = select(this);\n filterFn ? filterFn(data) && elem.classed(className, true) :\n elem.classed(className, true);\n });\n};\n\n/**\n * Removes the css class from elements which passes the filter function.If filter function is not given,\n * then all elements will be applied the class.\n * @param {HTMLElement | SVGElement} element element\n * @param {string} className css class\n * @param {string} selector css selector\n * @param {Function} filterFn filter method.\n */\nconst removeClass = (element, className, selector, filterFn) => {\n select(element).selectAll(selector).each(function (data) {\n const elem = select(this);\n filterFn ? filterFn(data) && elem.classed(className, false) :\n elem.classed(className, false);\n });\n};\n\n/**\n * Sets styles in the svg or html element\n * @param {SVGElement | HTMLElement} element The element on which styles will be applied\n * @param {Array.} styles Array of style attributes\n * @return {SVGElement | HTMLElement} SVGElement or html element.\n */\nconst setStyles = (element, styles) => {\n if (!(element instanceof selection)) {\n element = selectElement(element);\n }\n for (const key in styles) {\n if ({}.hasOwnProperty.call(styles, key)) {\n element.style(key, styles[key]);\n }\n }\n return element;\n};\n\n/**\n * Creates svg or html elements by binding data to the selection.Removes extra elements\n * on exit.\n * @param {Object} params Parameter object\n * @param {SVGElement | HTMLElement} params.container Container element where all elements will be appended\n * @param {string} params.selector Selector by which elements will be selected from dom\n * @param {string} params.append Append tag\n * @param {Function} params.each Function which will be executed for each data point and element.\n */\nconst createElements = (params) => {\n const container = select(params.container);\n let data;\n let sel;\n\n data = params.data;\n if (typeof data === 'number') {\n data = Array(data).fill().map((d, i) => i);\n }\n sel = container.selectAll(params.selector).data(data);\n\n sel = container.selectAll(params.selector).filter(function () {\n return this.parentNode === container.node();\n }).data(params.data);\n\n const selectionMerge = sel.enter().append(params.append).merge(sel).each(function (d, i) {\n params.each(d, select(this), i);\n });\n\n selectionMerge.attr('class', params.className || '');\n sel.exit().remove();\n};\n\n/**\n * Clips an element with given measurement. Basically it is used to hide overflowing portions\n * of any element.\n * @param {SVGElement} container svg element which needs to be clipped.\n * @param {Object} measurement Dimensions of the clipped rectangle.\n * @param {string} id Unique id of the clip element\n */\nconst clipElement = (container, measurement, id) => {\n const clipPathElement = makeElement(select(container), 'clipPath', [1], `#${id}`);\n const clipPathRect = makeElement(clipPathElement, 'rect', [1]);\n clipPathRect.attr('x', measurement.x)\n .attr('y', measurement.x)\n .attr('width', measurement.width)\n .attr('height', measurement.height);\n clipPathElement.attr('clip-path', `url(#${id})`);\n};\n\n/**\n * Returns the element of the corresponding classname.\n * @param {HTMLElement | SVGElement} node html or svg node element.\n * @param {string} className css class to be applied.\n * @return {HTMLElement | SVGElement} html or svg element.\n */\nconst getElementsByClassName = (node, className) => select(node).selectAll(className).nodes();\n\n/**\n * Gets the mouse position relative to an svg type of element\n * @param {SVGElement} element Any svg element like rect, circle, etc.\n * @param {Event} event Event object.\n * @return {Object} x and y position relative to the container element passed.\n */\nconst getMousePos = (element, event) => {\n const boundingClientRect = element.getBoundingClientRect();\n return {\n x: event.x - boundingClientRect.x,\n y: event.y - boundingClientRect.y\n };\n};\n\nconst getClientPoint = (...params) => {\n const pos = clientPoint(...params);\n return {\n x: pos[0],\n y: pos[1]\n };\n};\n\n/** This function appends a dom element in another element.\n * @param {Object} tag The tag name of the element to append\n * @param {Object} mount Mount point fo the element\n * @return {Object} selection of the appended element\n */\nconst createElement = (tag, mount) => select(mount).append(tag).node();\n\n/**\n * Gets the d3 event function\n * @return {Object} d3 event\n */\nconst getEvent = () => d3event;\n\n/**\n * Gets the d3 drag function\n * @return {Object} d3 drag\n */\nconst getD3Drag = () => d3drag;\n\nconst getSmartComputedStyle = (group, css) => {\n let textEl;\n const testText = 'W';\n const mandatoryStyle = {\n 'fill-opacity': 0\n };\n const className = typeof css === 'string' ? css : (css instanceof Array ? css.join(' ') : undefined);\n\n if (group.node() instanceof HTMLElement) {\n textEl = group.append('div').html(testText);\n } else {\n textEl = group.append('text').text(testText);\n }\n\n if (className) {\n textEl.attr('class', className);\n } else if (typeof css === 'object') {\n delete css['fill-opacity'];\n mergeRecursive(mandatoryStyle, css);\n }\n\n textEl.style(mandatoryStyle);\n\n const computedStyle = window.getComputedStyle(textEl.node());\n const styleForSmartLabel = {\n fontSize: computedStyle.fontSize,\n fontFamily: computedStyle.fontFamily,\n fontWeight: computedStyle.fontWeight,\n fontStyle: computedStyle.fontStyle\n };\n\n textEl.remove();\n\n return styleForSmartLabel;\n};\n\nconst hasTouch = () => 'ontouchstart' in document.documentElement;\n\nexport {\n hasTouch,\n selectElement,\n makeElement,\n applyStyle,\n addClass,\n removeClass,\n appendElement,\n setAttrs,\n setStyles,\n createElement,\n createElements,\n clipElement,\n getElementsByClassName,\n getMousePos,\n getEvent,\n getD3Drag,\n getSmartComputedStyle,\n getClientPoint\n};\n","/**\n * This class represents a selection applied on a data array.\n *\n * @class Selection\n */\nclass Selection {\n /**\n * Creates an instance of Selection.\n * @param {Array} data Array of DataObjects.\n * @memberof Selection\n */\n constructor () {\n this._data = [];\n // // map of id to data\n this._idMap = {};\n\n this._mode = '';\n // data.forEach((item, idx) => {\n // const index = item.id || idx;\n // this._idMap[index] = item;\n // });\n // // array to store data in enter phase\n this._enterdata = [];\n // // array to store data in exit phase\n this._exitdata = [];\n }\n /**\n * Gets the object bound to a class\n *\n * @return {Object} current data set bound to the class\n * @memberof Selection\n */\n getObjects () {\n return Object.keys(this._idMap).map(e => this._idMap[e]);\n }\n\n /**\n * This method is used to supply seed data to a selection.\n *\n * @param {Array} newData Seed data to create the enter selection.\n * @param {Functon | undefined } idGetter This function is used to uniqely identify a data entry.\n * @return {Selection} Modified selection.\n * @memberof Selection\n */\n data (newData, idGetter) {\n if (idGetter) {\n this._data = [];\n this._idGetter = idGetter;\n const tempMap = {};\n\n newData.forEach((...params) => {\n const index = idGetter(...params);\n tempMap[index] = params[0];\n });\n // check if any data items have been removed\n const purgedIds = [];\n\n Object.keys(this._idMap).forEach((id) => {\n if (!tempMap[id]) {\n purgedIds.push(id);\n }\n });\n\n Object.keys(tempMap).forEach((id) => {\n if (!this._idMap[id]) {\n this._enterdata.push(tempMap[id]);\n } else {\n this._idMap[id] = tempMap[id];\n this._data.push(tempMap[id]);\n }\n });\n // move the purged items to exit selection\n purgedIds.forEach((id) => {\n const purged = this._idMap[id];\n this._exitdata.push(purged);\n // this._data = this._data.slice(id, 1);\n delete this._idMap[id];\n });\n // this._data = this._data.slice(temp, this._data.length);\n\n return this;\n }\n // no id getter supplied so use indices\n if (newData.length > this._data.length) {\n const startIdx = this._data.length;\n for (let i = startIdx; i < newData.length; i += 1) {\n this._enterdata.push(newData[i]);\n }\n } else {\n // push to exit selection\n const temp = newData.length;\n for (let i = temp; i < this._data.length; i += 1) {\n const purged = this._data[i];\n delete this._idMap[purged.id];\n this._exitdata.push(purged);\n }\n this._data = this._data.slice(temp, this._data.length);\n }\n return this;\n }\n\n /**\n * Applies the supplied callback to each data element\n * and returns a new selection.\n *\n * @param {Function} callback Callback to execute on each item.\n * @return {Selection} New selection with data created using callback.\n * @memberof EnterSelection\n */\n append (callback) {\n this[`_${this._mode}data`].forEach((...params) => {\n const data = params[0];\n const id = this._idGetter ? this._idGetter(...params) : (data.id || params[1]);\n this._idMap[id] = callback(...params);\n });\n this._mode = '';\n return this;\n }\n\n /**\n * This method returns an enter selection that\n * allows or update operations.\n *\n * @return {EnterSelection} Instance of enter selection.\n * @memberof Selection\n */\n enter () {\n this._mode = 'enter';\n return this;\n // return new EnterSelection(this._enterdata, this._idMap, this._idGetter);\n }\n\n /**\n * This method is used to set key value pairs\n * on data objects.\n *\n * @param {string} key Name of property.\n * @param {any} value Value of property.\n * @return {Selection} Modified selection.\n * @memberof Selection\n */\n attr (key, value) {\n this._data.forEach(item => item.attr(key, value));\n return this;\n }\n\n /**\n * This method merges the data of one selection with another.\n *\n * @param {Selection} selection Instance of selection.\n * @return {Selection} Modified selection.\n * @memberof Selection\n */\n merge (selection) {\n selection._data.forEach((...params) => {\n const id = this._idGetter ? this._idGetter(...params) : (params[0].id || params[1]);\n this._idMap[id] = params[0];\n this._data.push(params[0]);\n });\n // reset enter selection\n this._enterdata = [];\n return this;\n }\n\n /**\n * Returns a selection with exit data.\n *\n * @return {Selection} Instance of selection.\n * @memberof Selection\n */\n exit () {\n this._mode = 'exit';\n // const exitdata = this._exitdata;\n // const exitSelection = new Selection(exitdata);\n // this._exitdata = [];\n return this;\n }\n\n each (fn) {\n Object.keys(this._idMap).forEach((e) => {\n fn(this._idMap[e]);\n });\n return this;\n }\n\n map (fn) {\n Object.keys(this._idMap).forEach((...params) => {\n this._idMap[params[0]] = fn(this._idMap[params[0]], ...params);\n });\n return this;\n }\n\n /**\n * Executes the cleanup operation associated with data objets.\n *\n * @memberof Selection\n */\n remove () {\n // do cleanup on DDO's\n const data = this[`_${this._mode}data`];\n\n data.forEach(item => item.remove());\n if (this._mode === '') {\n this.each(e => e.remove());\n }\n this[`_${this._mode}data`] = [];\n this._mode = '';\n }\n}\n\nexport default Selection;\n","import { getUniqueId } from '../index';\n/**\n * Represents the base class that all objects that form\n * the data for a selection must inherit from.\n *\n * @class DataObject\n */\nclass DataObject {\n/**\n * Creates an instance of DataObject.\n * @memberof DataObject\n */\n constructor () {\n this._id = getUniqueId();\n }\n /**\n * Returns the id.\n *\n * @readonly\n * @memberof DataObject\n */\n get id () {\n return this._id;\n }\n\n /**\n * Sets the value corresponding to supplied key.\n *\n * @param {string} key The property name.\n * @param {any} value Value associated with prop.\n * @memberof DataObject\n */\n attr (key, value) {\n this[key] = value;\n }\n\n /**\n * Clean up code to be executed by each object.\n *\n * @override\n * @memberof DataObject\n */\n remove () {\n // cleanup\n }\n}\n\nexport default DataObject;\n","const events = [\n 'initialized',\n 'beforeupdate',\n 'updated',\n 'beforedraw',\n 'drawn',\n 'beforeremove',\n 'removed'\n];\n\nconst compositions = [\n 'canvas',\n 'unit',\n 'layer',\n 'axis',\n 'facet-headers',\n 'legend',\n 'caption'\n];\n\nconst EVENT_LIST = [];\n\ncompositions.forEach((composition) => {\n events.forEach((event) => {\n EVENT_LIST.push(`${composition}.${event}`);\n });\n});\n\nexport default EVENT_LIST;\n","import EVENT_LIST from './event-list';\n\n/**\n * At first call it accepts one function\n * calling it second time accepts notification object.\n * notification object then called with first accepted function\n *\n * @param {Function} resolveFn a promise's resolve function\n * @return {Function} a function to accept notification object\n */\nconst resolver = resolveFn => notification => resolveFn(notification);\n\n/**\n * Checks if the property string is present in the source object\n *\n * @param {Object} source source object whom you want to check the property\n * @param {string} property key name that need to be checked\n * @return {boolean} returns true if the property found in the source object\n */\nconst hasOwn = (source, property) => Object.prototype.hasOwnProperty.call(source, property);\n\n/**\n * LifeCycleManager which goes as a dependendecy to a muze\n * it accepts notification from the entire library throughout\n * the exeecution life\n *\n * @export\n * @class LifeCycleManager\n */\nexport default class LifeCycleManager {\n\n /**\n * Creates an instance of LifeCycleManager.\n * @memberof LifeCycleManager\n */\n constructor () {\n this._eventList = EVENT_LIST;\n this._promises = new Map();\n this._notifiers = {};\n this._lifeCycles = {};\n this._unreleasedLifeCycles = {};\n this._boot();\n }\n\n /**\n * Fills all the notifiers with resolver callback\n *\n * @memberof LifeCycleManager\n */\n _boot () {\n this._notifiers = this._eventList.reduce((acc, name) => {\n acc[name] = resolver;\n return acc;\n }, {});\n this._preparePromises();\n }\n\n /**\n * Public method which gives the promise corresponding\n * to the event name\n *\n * @param {string} eventName name of the event like `canvas.drawn`\n * @return {promise} promise that is passed to the user\n * @memberof LifeCycleManager\n */\n retrieve (eventName) {\n return this._promises.get(eventName);\n }\n\n /**\n * Creates a promise that will be passed to user's callback\n *\n * @param {string} eventName name of the event like `canvas.drawn`\n * @return {promise} a pending promise waiting for resolve to be called\n * @memberof LifeCycleManager\n */\n _makeNotifierPromise (eventName) {\n return new Promise((resolve) => {\n this._notifiers[eventName] = this._notifiers[eventName](resolve);\n });\n }\n\n /**\n * Prepares the promise map with pending promises\n * all the promises are in a pending state where their's\n * resolve function waiting to be called with notification object\n * @memberof LifeCycleManager\n */\n _preparePromises () {\n this._eventList.forEach((eventName) => {\n this._promises.set(eventName, this._makeNotifierPromise(eventName));\n });\n }\n\n /**\n * Resolves the promise with notification object\n *\n * @param {string} eventName name of the event in the system\n * @param {Object} notification notification object\n * @param {string} notification.formalName name of the sender creating the notification\n * @param {Object} notification.client instance or array of instances sending the notification\n * @param {string} notification.action the stage name when the event happened like `beforedraw`\n *\n * @memberof LifeCycleManager\n */\n _resolvePromise (eventName, notification) {\n this._notifiers[eventName](notification);\n }\n\n /**\n * Public method which is being called by different\n * subcompoents of the system at different execution atages\n * @param {Object} notification notification object\n * @param {string} notification.formalName name of the sender creating the notification\n * @param {Object} notification.client instance or array of instances sending the notification\n * @param {string} notification.action the stage name when the event happened like `beforedraw`\n * @memberof LifeCycleManager\n */\n notify (notification) {\n // get the composition name from notification\n // or from static formalName() method\n const composition = notification.formalName || notification.client.constructor.formalName();\n notification.formalName = composition;\n this._releasePromisesFromCache();\n this._notify(composition, notification);\n }\n\n /**\n * Notify user the with promsie in a callback\n * if callback not found then cache it\n *\n * @param {string} composition\n * @param {Object} notification notification object\n * @param {string} notification.formalName name of the sender creating the notification\n * @param {Object} notification.client instance or array of instances sending the notification\n * @param {string} notification.action the stage name when the event happened like `beforedraw`\n * @memberof LifeCycleManager\n */\n _notify (composition, notification) {\n const stage = notification.action;\n const eventName = `${composition}.${stage}`;\n\n // resolves promise with the notification object\n this._resolvePromise(eventName, notification);\n\n // get the promise from the promise map\n const promise = this.retrieve(eventName);\n\n if (this._lifeCycles[composition]) {\n if (this._lifeCycles[composition][stage]) {\n // if user given call back exists, then call with promise\n this._callLifeCycleCallback(composition, stage, promise);\n } else {\n // otherwise cache the promise\n this._cachePromise(composition, stage, promise);\n }\n } else {\n this._cachePromise(composition, stage, promise);\n }\n }\n\n /**\n * Calls the user's callback with callback\n *\n * @param {string} composition name of the compositon like `canvas`\n * @param {string} stage the stage name when the event happened like `beforedraw`\n * @param {promise} promise promise that is passed to the user\n * @memberof LifeCycleManager\n */\n _callLifeCycleCallback (composition, stage, promise) {\n const eventName = `${composition}.${stage}`;\n this._lifeCycles[composition][stage](promise);\n this._resetTargetPromise(eventName);\n }\n\n /**\n * Try to clear the cached promsies once we have\n * macthed callbacks from the user\n *\n * @memberof LifeCycleManager\n */\n _releasePromisesFromCache () {\n const compositions = Object.keys(this._unreleasedLifeCycles);\n compositions.forEach((composition) => {\n const stages = Object.keys(this._unreleasedLifeCycles[composition]);\n stages.forEach((stage) => {\n if (this._lifeCycles[composition]) {\n if (this._lifeCycles[composition][stage]) {\n // take the promise from unreleased lifeCycles\n const promise = this._unreleasedLifeCycles[composition][stage];\n // call the user given callback with that promise\n this._callLifeCycleCallback(composition, stage, promise);\n // delete promise from unreleased lifeCycles\n delete this._unreleasedLifeCycles[composition][stage];\n }\n }\n });\n });\n }\n\n /**\n * Cache the promise in the map. This cache\n * then get consumed if we get user callbacks\n * @param {string} composition name of the compositon like `canvas`\n * @param {string} stage the stage name when the event happened like `beforedraw`\n * @param {promise} promise promise that is passed to the user\n * @memberof LifeCycleManager\n */\n _cachePromise (composition, stage, promise) {\n if (!hasOwn(this._unreleasedLifeCycles, composition)) {\n this._unreleasedLifeCycles[composition] = {};\n }\n\n if (!hasOwn(this._unreleasedLifeCycles[composition], stage)) {\n this._unreleasedLifeCycles[composition][stage] = {};\n }\n this._unreleasedLifeCycles[composition][stage] = promise;\n }\n\n /**\n * It register's the callbacks gievn the user\n *\n * @param {Object} [lifeCycles={}] a object with list of callbacks\n * @memberof LifeCycleManager\n */\n register (lifeCycles = {}) {\n this._lifeCycles = lifeCycles;\n // as we get all the callbacks, try to call them\n // from unreleased promise map\n this._releasePromisesFromCache();\n }\n\n /**\n * Reset the promise into pending state\n *\n * @param {string} eventName name of the event happening\n * @memberof LifeCycleManager\n */\n _resetTargetPromise (eventName) {\n setTimeout(() => {\n this._notifiers[eventName] = resolver;\n this._promises.set(eventName, this._makeNotifierPromise(eventName));\n }, 0);\n }\n}\n","import LifeCycleManager from './lifecycle-manager';\n\nexport default LifeCycleManager;\n","export const DRAG = 'drag';\nexport const HOVER = 'hover';\nexport const SELECTIONDRAG = 'selectiondrag';\nexport const CLICK = 'click';\nexport const LONGTOUCH = 'longtouch';\nexport const TOUCHDRAG = 'touchdrag';\nexport const ALL_ACTIONS = '*';\n","const SELECTION_NEW_ENTRY = 1;\nconst SELECTION_NEW_EXIT = -1;\nconst SELECTION_NULL = 0;\nconst SELECTION_OLD_ENTRY = 2;\nconst SELECTION_OLD_EXIT = -2;\n\nexport {\n SELECTION_NEW_ENTRY,\n SELECTION_NEW_EXIT,\n SELECTION_NULL,\n SELECTION_OLD_ENTRY,\n SELECTION_OLD_EXIT\n};\n","import {\n SELECTION_NEW_ENTRY, SELECTION_NEW_EXIT, SELECTION_NULL, SELECTION_OLD_ENTRY, SELECTION_OLD_EXIT\n} from '../enums/selection';\n/* eslint-disable guard-for-in */\n\n/**\n * This component is used to keep track of the row tuples of the data which gets added and removed.\n * @class SelectionSet\n */\nclass SelectionSet {\n /**\n * Creates an instance of selection set\n * @param {Array.} completeSet Set of unique ids.\n */\n constructor (completeSet, _volatile) {\n this.completeSet = completeSet;\n this._set = completeSet.reduce((obj, key) => {\n obj[key] = SELECTION_NULL;\n return obj;\n }, {});\n this._volatile = _volatile;\n this._completeSetCount = completeSet.length;\n this._lockedSelection = {};\n this._resetted = true;\n }\n\n /**\n * Adds a set of ids to the selection set.\n * @param {Array.} ids Array of unique ids\n * @return {SelectionSet} Instance of selection set.\n */\n add (ids) {\n this._resetted = false;\n\n const set = this._set;\n // from exitset to entryset\n ids.forEach((i) => {\n set[i] = SELECTION_NEW_ENTRY;\n });\n\n for (const key in set) {\n if (set[key] !== SELECTION_NEW_ENTRY && set[key] !== SELECTION_OLD_ENTRY) {\n set[key] = set[key] < 0 ? SELECTION_OLD_EXIT : SELECTION_NEW_EXIT;\n }\n }\n return this;\n }\n\n /**\n * Adds a set of ids to the selection set.\n * @param {Array.} ids Array of unique ids\n * @return {SelectionSet} Instance of selection set.\n */\n update (ids) {\n const set = this._set;\n // from exitset to entryset\n ids.forEach((i) => {\n set[i] = SELECTION_OLD_ENTRY;\n });\n\n return this;\n }\n\n /**\n * Adds a set of ids to the selection set.\n * @param {Array.} ids Array of unique ids\n * @return {SelectionSet} Instance of selection set.\n */\n updateEntry () {\n const set = this._set;\n\n // from exitset to entryset\n for (const key in set) {\n set[key] = set[key] === SELECTION_NEW_ENTRY ? SELECTION_OLD_ENTRY : set[key];\n }\n return this;\n }\n\n /**\n * Adds a set of ids to the selection set.\n * @param {Array.} ids Array of unique ids\n * @return {SelectionSet} Instance of selection set.\n */\n updateExit () {\n const set = this._set;\n // from exitset to entryset\n for (const key in set) {\n set[key] = set[key] === SELECTION_NEW_EXIT ? SELECTION_OLD_EXIT : set[key];\n }\n return this;\n }\n\n /**\n * Removes the ids from the selection set.\n * @param {Array.} ids Array of unique ids\n * @return {SelectionSet} Instance of selection set\n */\n remove (ids) {\n this._resetted = false;\n\n const set = this._set;\n ids.forEach((i) => {\n set[i] = SELECTION_NEW_EXIT;\n });\n\n for (const key in set) {\n if (set[key] !== SELECTION_NEW_EXIT && set[key] !== SELECTION_OLD_EXIT) {\n set[key] = set[key] === 0 ? SELECTION_NEW_ENTRY : SELECTION_OLD_ENTRY;\n }\n }\n\n return this;\n }\n\n getSets () {\n const set = this._set;\n const retObj = {\n entrySet: [[], []],\n exitSet: [[], []],\n completeSet: []\n };\n\n for (const key in set) {\n if (set[key] > 0) {\n set[key] === SELECTION_OLD_ENTRY && retObj.entrySet[0].push(key);\n set[key] === SELECTION_NEW_ENTRY && retObj.entrySet[1].push(key);\n } else if (set[key] < 0) {\n set[key] === SELECTION_OLD_EXIT && retObj.exitSet[0].push(key);\n set[key] === SELECTION_NEW_EXIT && retObj.exitSet[1].push(key);\n }\n retObj.completeSet.push(key);\n }\n\n ['entrySet', 'exitSet'].forEach((type) => {\n retObj[type] = retObj[type].map(e => e.map(Number));\n });\n retObj.completeSet = retObj.completeSet.map(Number);\n\n return retObj;\n }\n\n /**\n * Resets the selection set to initial state. It sets the value of every unique id value to\n * null in the selection set.\n * @return {SelectionSet} Instance of selection set.\n */\n reset (ids) {\n const set = this._set;\n if (ids) {\n ids.forEach((i) => {\n set[i] = SELECTION_NULL;\n });\n } else {\n const lockedSel = this._lockedSelection;\n for (const key in set) {\n if (!(key in lockedSel)) {\n set[key] = SELECTION_NULL;\n }\n }\n }\n this._resetted = true;\n return this;\n }\n\n /**\n * Gets the set of ids which are added in the selection set.\n * @return {Array.} Array of unique ids\n */\n getEntrySet () {\n const set = this._set;\n const addSet = [];\n\n for (const key in set) {\n set[key] === SELECTION_NEW_ENTRY && addSet.push(key);\n }\n\n return addSet;\n }\n\n /**\n * Returns a set of unique ids which are already present in entry set\n * @param {Array} addSet Array of unique ids which are added\n *\n * @return {Array} Array of unique ids which are already in old entry set or new entry set\n */\n getExistingEntrySet (addSet) {\n const set = this._set;\n return addSet.filter(d => set[d] === SELECTION_NEW_ENTRY || set[d] === SELECTION_OLD_ENTRY);\n }\n\n getExistingExitSet (removeSet) {\n const set = this._set;\n return removeSet.filter(d => set[d] === SELECTION_NEW_EXIT || set[d] === SELECTION_OLD_EXIT);\n }\n\n /**\n * Gets the set of ids which are added in the selection set.\n * @return {Array.} Array of unique ids\n */\n getOldEntry () {\n const set = this._set;\n const updateSet = [];\n\n for (const key in set) {\n set[key] === SELECTION_OLD_ENTRY && updateSet.push(key);\n }\n return updateSet;\n }\n\n /**\n * Gets the set of ids which are added in the selection set.\n * @return {Array.} Array of unique ids\n */\n getOldExit () {\n const set = this._set;\n const updateSet = [];\n\n for (const key in set) {\n set[key] === SELECTION_OLD_EXIT && updateSet.push(key);\n }\n\n return updateSet;\n }\n\n /**\n * Gets the set of ids which are in the remove set.\n * @return {Array.} Array of unique ids\n */\n getExitSet () {\n const set = this._set;\n const removeSet = [];\n\n for (const key in set) {\n set[key] === SELECTION_NEW_EXIT && removeSet.push(key);\n }\n return removeSet;\n }\n\n getCompleteSet () {\n const set = this._set;\n const completeSet = [];\n\n for (const key in set) {\n completeSet.push(key);\n }\n\n return completeSet;\n }\n\n getCompleteSetCount () {\n return this._completeSetCount;\n }\n\n resetted () {\n return this._resetted;\n }\n\n /**\n * Swaps the add set and remove set in the selection set.\n * @return {SelectionSet} Instance of selection set.\n */\n toggle () {\n const set = this._set;\n\n for (const key in set) {\n if (set[key] === SELECTION_NEW_ENTRY) {\n set[key] = SELECTION_NEW_EXIT;\n } else if (set[key] === SELECTION_NEW_EXIT) {\n set[key] = SELECTION_NEW_ENTRY;\n } else if (set[key] === SELECTION_OLD_ENTRY) {\n set[key] = SELECTION_OLD_EXIT;\n } else {\n set[key] = SELECTION_OLD_ENTRY;\n }\n }\n\n return this;\n }\n}\n\nexport default SelectionSet;\n","import { clone } from 'muze-utils';\nimport * as SELECTION from '../enums/selection';\n\nexport const initializeSideEffects = (context, sideEffects) => {\n const sideEffectsMap = context._sideEffects;\n\n sideEffects = sideEffects instanceof Array ? sideEffects : Object.values(sideEffects);\n sideEffects.forEach((SideEffect) => {\n const sideEffectInstance = sideEffectsMap[SideEffect.formalName()];\n sideEffectsMap[SideEffect.formalName()] = sideEffectInstance || new SideEffect(context);\n });\n return sideEffectsMap;\n};\n\nexport const initializeBehaviouralActions = (context, actions) => {\n const dispatchableBehaviours = {};\n\n actions = actions instanceof Array ? actions : Object.values(actions);\n actions.forEach((Action) => {\n dispatchableBehaviours[Action.formalName()] = new Action(context);\n });\n return dispatchableBehaviours;\n};\n\nexport const initializePhysicalActions = (context, actions) => {\n const physicalActions = {};\n\n for (const name in actions) {\n if (!({}).hasOwnProperty.call(name, actions)) {\n physicalActions[name] = actions[name](context);\n }\n }\n return physicalActions;\n};\n\nexport const changeSideEffectAvailability = (context, fn, toEnable) => {\n const sideEffects = context.sideEffects();\n for (const key in sideEffects) {\n if ({}.hasOwnProperty.call(sideEffects, key)) {\n let change = true;\n if (fn && fn(key) === false) {\n change = false;\n }\n if (change) {\n toEnable ? sideEffects[key].enable() : sideEffects[key].disable();\n }\n }\n }\n};\n\nexport const getMergedSet = set => [...new Set([...set[0], ...set[1]])];\n\nexport const getSourceFields = (propagationInf, criteria = {}) => {\n const sourceIdentifiers = propagationInf.sourceIdentifiers;\n let sourceFields;\n if (sourceIdentifiers) {\n sourceFields = sourceIdentifiers.getSchema().map(d => d.name);\n } else if (criteria instanceof Array) {\n sourceFields = criteria[0];\n } else {\n sourceFields = Object.keys(criteria || {});\n }\n return sourceFields;\n};\n\nconst conditionsMap = {\n newEntry: [SELECTION.SELECTION_NEW_ENTRY],\n oldEntry: [SELECTION.SELECTION_OLD_ENTRY],\n mergedEnter: [SELECTION.SELECTION_NEW_ENTRY, SELECTION.SELECTION_OLD_ENTRY],\n newExit: [SELECTION.SELECTION_NEW_EXIT],\n oldExit: [SELECTION.SELECTION_OLD_EXIT],\n mergedExit: [SELECTION.SELECTION_NEW_EXIT, SELECTION.SELECTION_OLD_EXIT],\n complete: []\n};\n\nexport const getModelFromSet = (type, model, set) => {\n if (model) {\n return model.select((fields, i) =>\n (conditionsMap[type].some(condition => set[i] === condition)), {\n saveChild: false\n });\n }\n return null;\n};\n\nexport const getSetInfo = (type, set, config) => {\n let model = null;\n const filteredDataModel = config.filteredDataModel;\n const selectionSet = config.selectionSet;\n if (!config.propagationData) {\n if (selectionSet.resetted()) {\n model = null;\n } else {\n model = getModelFromSet(type, config.dataModel, config.selectionSet._set);\n }\n } else if (filteredDataModel) {\n model = type === 'mergedEnter' ? filteredDataModel[0] : filteredDataModel[1];\n }\n return {\n uids: set,\n length: set.length,\n model\n };\n};\n\nexport const getSideEffects = (behaviour, behaviourEffectMap) => {\n const sideEffects = [];\n for (const key in behaviourEffectMap) {\n const behaviours = key.split(',');\n const found = behaviours.some(d => d === behaviour);\n if (found) {\n sideEffects.push({\n effects: behaviourEffectMap[key],\n behaviours\n });\n }\n }\n return sideEffects;\n};\n\nexport const unionSets = (context, behaviours) => {\n let combinedSet = {};\n const models = {\n mergedEnter: null,\n mergedExit: null\n };\n behaviours.forEach((behaviour) => {\n const entryExitSet = context._entryExitSet[behaviour];\n if (entryExitSet) {\n combinedSet = Object.assign(combinedSet, clone(entryExitSet));\n ['mergedEnter', 'mergedExit'].forEach((type) => {\n const model = entryExitSet[type].model;\n let existingModel = models[type];\n if (!existingModel) {\n existingModel = models[type] = model;\n } else {\n existingModel = models[type] = model.union(existingModel);\n }\n combinedSet[type].model = existingModel;\n });\n }\n });\n return combinedSet;\n};\n","import {\n mergeRecursive,\n hasTouch,\n filterPropagationModel,\n FieldType,\n selectElement,\n isSimpleObject\n} from 'muze-utils';\nimport { ALL_ACTIONS } from './enums/actions';\nimport SelectionSet from './selection-set';\nimport {\n initializeBehaviouralActions,\n initializeSideEffects,\n changeSideEffectAvailability,\n initializePhysicalActions,\n unionSets,\n getSideEffects\n} from './helper';\n\n/**\n * Relient firebolt is responsible for dispatching behaviours. It has only behaviours which can be\n * dispatched without any physical action being triggered.\n */\nexport default class Firebolt {\n constructor (context, actions, sideEffects, behaviourEffectMap) {\n this.context = context;\n this._sideEffectDefinitions = {};\n this._sideEffects = {};\n this._propagationInf = {};\n this._actions = {\n behavioural: {},\n physical: {}\n };\n this._selectionSet = {};\n this._volatileSelectionSet = {};\n this._propagationFields = {};\n this._sourceSideEffects = {\n selectionBox: () => false\n };\n this._propagationBehaviourMap = {};\n this._sourceBehaviours = {};\n this._actionBehaviourMap = {};\n this._config = {};\n this._behaviourEffectMap = {};\n this._entryExitSet = {};\n this._actionHistory = {};\n this._queuedSideEffects = {};\n this._mappedActions = {};\n\n this.mapSideEffects(behaviourEffectMap);\n this.registerBehaviouralActions(actions.behavioural);\n this.registerSideEffects(sideEffects);\n this.registerPhysicalBehaviouralMap(actions.physicalBehaviouralMap);\n this.registerPhysicalActions(actions.physical);\n }\n\n config (...config) {\n if (config.length) {\n const conf = this._config = mergeRecursive(this._config, config[0]);\n const sideEffects = this.sideEffects();\n for (const key in sideEffects) {\n if ({}.hasOwnProperty.call(sideEffects, key)) {\n const sideEffectConf = conf[key];\n sideEffectConf && sideEffects[key].config(sideEffectConf);\n }\n }\n return this;\n }\n return this._config;\n }\n\n mapSideEffects (behEffectMap) {\n const behaviourEffectMap = this._behaviourEffectMap;\n for (const key in behEffectMap) {\n if ({}.hasOwnProperty.call(behEffectMap, key)) {\n const sideEffects = behEffectMap[key] || [];\n let preventDefaultActions = false;\n let effectNames;\n if (isSimpleObject(sideEffects)) {\n effectNames = sideEffects.effects;\n preventDefaultActions = sideEffects.preventDefaultActions;\n } else {\n effectNames = sideEffects;\n }\n !behaviourEffectMap[key] && (behaviourEffectMap[key] = []);\n this._behaviourEffectMap[key] = [...new Set(preventDefaultActions ? effectNames :\n [...behaviourEffectMap[key], ...effectNames])];\n }\n }\n return this;\n }\n\n registerBehaviouralActions (actions) {\n const behaviours = initializeBehaviouralActions(this, actions);\n this.prepareSelectionSets(behaviours);\n Object.assign(this._actions.behavioural, behaviours);\n return this;\n }\n\n prepareSelectionSets () {\n return this;\n }\n\n registerSideEffects (sideEffects) {\n for (const key in sideEffects) {\n this._sideEffectDefinitions[sideEffects[key].formalName()] = sideEffects[key];\n }\n return this;\n }\n\n applySideEffects (sideEffects, selectionSet, payload) {\n const sideEffectStore = this.sideEffects();\n const actionHistory = this._actionHistory;\n const queuedSideEffects = this._queuedSideEffects;\n sideEffects.forEach((sideEffect) => {\n let options;\n let name;\n const effects = sideEffect.effects;\n const behaviours = sideEffect.behaviours;\n const combinedSet = unionSets(this, behaviours, selectionSet);\n effects.forEach((effect) => {\n if (typeof effect === 'object') {\n name = effect.name;\n options = effect.options;\n } else {\n name = effect;\n }\n\n const sideEffectInstance = sideEffectStore[name];\n if (sideEffectInstance.isEnabled()) {\n if (!sideEffectInstance.constructor.mutates() &&\n Object.values(actionHistory).some(d => d.isMutableAction)) {\n queuedSideEffects[`${name}-${behaviours.join()}`] = {\n name,\n params: [combinedSet, payload, options]\n };\n } else {\n this.dispatchSideEffect(name, combinedSet, payload, options);\n }\n }\n });\n });\n return this;\n }\n\n dispatchSideEffect (name, selectionSet, payload, options = {}) {\n const sideEffectStore = this.sideEffects();\n const sideEffect = sideEffectStore[name];\n let disable = false;\n if (options.filter && options.filter(sideEffect)) {\n disable = true;\n }\n !disable && sideEffectStore[name].apply(selectionSet, payload, options);\n }\n\n registerPropagationBehaviourMap (map) {\n this._propagationBehaviourMap = Object.assign(this._propagationBehaviourMap, map || {});\n return this;\n }\n\n dispatchBehaviour (behaviour, payload, propagationInfo = {}) {\n const propagate = propagationInfo.propagate !== undefined ? propagationInfo.propagate : true;\n const behaviouralActions = this._actions.behavioural;\n const action = behaviouralActions[behaviour];\n const behaviourEffectMap = this._behaviourEffectMap;\n const sideEffects = getSideEffects(behaviour, behaviourEffectMap);\n this._propagationInf = propagationInfo;\n\n if (action) {\n const selectionSet = action.dispatch(payload);\n const propagationSelectionSet = this.getPropagationSelectionSet(selectionSet);\n this._entryExitSet[behaviour] = propagationSelectionSet;\n const shouldApplySideEffects = this.shouldApplySideEffects(propagate);\n\n if (propagate) {\n this.propagate(behaviour, payload, selectionSet.find(d => d.sourceSelectionSet), sideEffects);\n }\n if (shouldApplySideEffects) {\n const applicableSideEffects = this.getApplicableSideEffects(sideEffects, payload, propagationInfo);\n this.applySideEffects(applicableSideEffects, propagationSelectionSet, payload);\n }\n }\n\n return this;\n }\n\n getPropagationSelectionSet (selectionSet) {\n return selectionSet.find(d => !d.sourceSelectionSet);\n }\n\n shouldApplySideEffects () {\n return true;\n }\n\n changeBehaviourStateOnPropagation (behaviour, value) {\n if (value instanceof Function) {\n this._sourceBehaviours[behaviour] = value;\n } else {\n this._sourceBehaviours[behaviour] = () => value;\n }\n return this;\n }\n\n changeSideEffectStateOnPropagation (sideEffect, value) {\n if (value instanceof Function) {\n this._sourceSideEffects[sideEffect] = value;\n } else {\n this._sourceSideEffects[sideEffect] = () => value;\n }\n }\n\n propagate () {\n return this;\n }\n\n sideEffects (...sideEffects) {\n if (sideEffects.length) {\n this._sideEffects = sideEffects[0];\n return this;\n }\n return this._sideEffects;\n }\n\n enableSideEffects (fn) {\n changeSideEffectAvailability(this, fn, true);\n return this;\n }\n\n disableSideEffects (fn) {\n changeSideEffectAvailability(this, fn, false);\n return this;\n }\n\n dissociateBehaviour (behaviour, physicalAction) {\n const actionBehaviourMap = this._actionBehaviourMap;\n for (const key in actionBehaviourMap) {\n if (key === physicalAction) {\n const behaviourMap = actionBehaviourMap[key];\n behaviourMap.behaviours = behaviourMap.behaviours.filter(d => d !== behaviour);\n }\n }\n\n return this;\n }\n\n dissociateSideEffect (sideEffect, behaviour) {\n const behaviourEffectMap = this._behaviourEffectMap;\n behaviourEffectMap[behaviour] = behaviourEffectMap[behaviour].filter(d => (d.name || d) !== sideEffect);\n return this;\n }\n\n getApplicableSideEffects (sideEffects) {\n return sideEffects;\n }\n\n attachPropagationListener (dataModel) {\n dataModel.unsubscribe('propagation');\n dataModel.on('propagation', this.onDataModelPropagation());\n return this;\n }\n\n onDataModelPropagation () {\n return (propValue) => {\n const payload = propValue.payload;\n const action = payload.action;\n\n this.dispatchBehaviour(action, payload, {\n propagate: false\n });\n };\n }\n\n createSelectionSet (uniqueIds, behaviouralActions) {\n const behaviours = behaviouralActions || this._actions.behavioural;\n const selectionSet = this._selectionSet;\n const volatileSelectionSet = this._volatileSelectionSet;\n\n for (const key in behaviours) {\n if ({}.hasOwnProperty.call(behaviours, key)) {\n selectionSet[key] = new SelectionSet(uniqueIds);\n volatileSelectionSet[key] = new SelectionSet(uniqueIds, true);\n }\n }\n this._volatileSelectionSet = volatileSelectionSet;\n this.selectionSet(selectionSet);\n return this;\n }\n\n selectionSet (...selectionSet) {\n if (selectionSet.length) {\n this._selectionSet = selectionSet[0];\n return this;\n }\n return this._selectionSet;\n }\n\n initializeSideEffects () {\n const sideEffectDefinitions = this._sideEffectDefinitions;\n this.sideEffects(initializeSideEffects(this, sideEffectDefinitions));\n return this;\n }\n\n registerPhysicalActions (actions) {\n const initedActions = initializePhysicalActions(this, actions);\n Object.assign(this._actions.physical, initedActions);\n return this;\n }\n\n propagateWith (action, fields, append = false) {\n const behaviouralActions = this._actions.behavioural;\n if (fields.length) {\n if (action === ALL_ACTIONS) {\n for (const key in behaviouralActions) {\n this._propagationFields[key] = {\n fields,\n append\n };\n }\n } else {\n this._propagationFields[action] = {\n fields,\n append\n };\n }\n return this;\n }\n return this._propagationFields;\n }\n\n /**\n * Map actions and behaviours\n * @return {Firebolt} Firebolt instance\n */\n mapActionsAndBehaviour () {\n const initedPhysicalActions = this._actions.physical;\n const map = this._actionBehaviourMap;\n const mappedActions = this._mappedActions;\n\n for (const action in map) {\n if (!({}).hasOwnProperty.call(action, map)) {\n let target;\n const mapObj = map[action];\n target = mapObj.target;\n const touch = mapObj.touch;\n if (!target) {\n target = this.context.getDefaultTargetContainer();\n }\n const bind = hasTouch() ? touch === true || touch === undefined : !touch;\n const keyName = `${action}-${mapObj.behaviours.join()}`;\n bind && !mappedActions[keyName] && this.bindActionWithBehaviour(initedPhysicalActions[action],\n target, mapObj.behaviours);\n mappedActions[keyName] = true;\n }\n }\n return this;\n }\n\n registerPhysicalBehaviouralMap (map) {\n Object.assign(this._actionBehaviourMap, map);\n return this;\n }\n\n /**\n * Binds a target element with an action.\n *\n * @param {Function} action Action method\n * @param {string} target Class name of element\n * @param {Array} behaviourList Array of behaviours\n * @return {FireBolt} Instance of firebolt\n */\n bindActionWithBehaviour (action, targets, behaviourList) {\n if (typeof (targets) === 'string') {\n targets = [targets];\n }\n targets.forEach((target) => {\n const mount = this.context.mount();\n const nodes = target.node instanceof Function ? target : selectElement(mount).selectAll(target);\n if (behaviourList.length && !nodes.empty()) {\n if (nodes instanceof Array) {\n nodes.forEach((node) => {\n action(selectElement(node), behaviourList);\n });\n } else {\n action(nodes, behaviourList);\n }\n }\n });\n return this;\n }\n\n getPropagationInf () {\n return this._propagationInf;\n }\n\n getAddSetFromCriteria (criteria, propagationInf = {}) {\n const context = this.context;\n const filteredDataModel = propagationInf.data ? propagationInf.data :\n context.getDataModelFromIdentifiers(criteria, 'all');\n const xFields = context.fields().x || [];\n const yFields = context.fields().y || [];\n const xMeasures = xFields.every(field => field.type() === FieldType.MEASURE);\n const yMeasures = yFields.every(field => field.type() === FieldType.MEASURE);\n return {\n model: filteredDataModel,\n uids: criteria === null ? null : (propagationInf.data ? filterPropagationModel(this.getFullData(),\n propagationInf.data[0], xMeasures && yMeasures).getData().uids : filteredDataModel[0].getData().uids)\n };\n }\n\n getSelectionSets (action) {\n const sourceId = this.context.id();\n const propagationInf = this._propagationInf || {};\n const propagationSource = propagationInf.sourceId;\n let applicableSelectionSets = [];\n if (propagationSource !== sourceId) {\n applicableSelectionSets = [this._volatileSelectionSet[action]];\n }\n\n if (propagationSource) {\n applicableSelectionSets.push(this.selectionSet()[action]);\n }\n return applicableSelectionSets;\n }\n\n getFullData () {\n return this.context.data();\n }\n\n resetted () {\n return this._resetted;\n }\n\n getEntryExitSet (behaviour) {\n return this._entryExitSet[behaviour];\n }\n}\n","import { getSetInfo, getMergedSet, getSourceFields } from '../../helper';\n\nexport default class GenericBehaviour {\n constructor (firebolt) {\n this.firebolt = firebolt;\n this._enabled = true;\n }\n\n dispatch (payload) {\n const criteria = payload.criteria;\n const firebolt = this.firebolt;\n const formalName = this.constructor.formalName();\n const selectionSets = firebolt.getSelectionSets(formalName);\n const {\n model: filteredDataModel,\n uids\n } = this.firebolt.getAddSetFromCriteria(criteria, this.firebolt.getPropagationInf());\n const entryExitSets = selectionSets.map((selectionSet) => {\n this.setSelectionSet(uids, selectionSet);\n return this.getEntryExitSet(selectionSet, filteredDataModel, payload);\n });\n\n return entryExitSets;\n }\n\n setSelectionSet () {\n return this;\n }\n\n getEntryExitSet (selectionSet, filteredDataModel, payload) {\n const {\n entrySet,\n exitSet,\n completeSet\n } = selectionSet.getSets();\n const propagationInf = this.firebolt.getPropagationInf();\n const dataModel = this.firebolt.getFullData();\n const setConfig = {\n isSourceFieldPresent: propagationInf.isSourceFieldPresent,\n dataModel,\n filteredDataModel,\n propagationData: propagationInf.data,\n selectionSet\n };\n\n return {\n entrySet: [getSetInfo('oldEntry', entrySet[0], setConfig),\n getSetInfo('newEntry', entrySet[1], setConfig)],\n exitSet: [getSetInfo('oldEntry', exitSet[0], setConfig),\n getSetInfo('newExit', exitSet[1], setConfig)],\n mergedEnter: getSetInfo('mergedEnter', getMergedSet(entrySet), setConfig),\n mergedExit: getSetInfo('mergedExit', getMergedSet(exitSet), setConfig),\n completeSet: getSetInfo('complete', completeSet, setConfig),\n isSourceFieldPresent: propagationInf.isSourceFieldPresent,\n fields: getSourceFields(propagationInf, payload.criteria),\n sourceSelectionSet: selectionSet._volatile === true\n };\n }\n\n static mutates () {\n return false;\n }\n\n enable () {\n this._enabled = true;\n }\n\n disable () {\n this._enabled = false;\n }\n\n isEnabled () {\n return this._enabled;\n }\n}\n\n","import GenericBehaviour from './generic';\nimport { getMergedSet } from '../../helper';\nimport * as SELECTION from '../../enums/selection';\n\nexport default class VolatileBehaviour extends GenericBehaviour {\n setSelectionSet (addSet, selectionSet) {\n if (addSet === null) {\n selectionSet.reset();\n } else if (addSet.length) {\n // new add set\n const existingAddSet = addSet.filter(d => selectionSet._set[d] === SELECTION.SELECTION_NEW_ENTRY\n || selectionSet._set[d] === SELECTION.SELECTION_OLD_ENTRY);\n selectionSet.updateExit();\n const { entrySet } = selectionSet.getSets();\n selectionSet.reset(getMergedSet(entrySet));\n selectionSet.add(addSet);\n selectionSet.update(existingAddSet);\n } else {\n selectionSet.remove(selectionSet.getCompleteSet());\n }\n }\n}\n","export const BRUSH = 'brush';\nexport const HIGHLIGHT = 'highlight';\nexport const TOOLTIP = 'tooltip';\nexport const FILTER = 'filter';\nexport const SELECT = 'select';\n","import VolatileBehaviour from './volatile';\nimport { HIGHLIGHT } from '../../enums/behaviours';\n\nexport default class HighlightBehaviour extends VolatileBehaviour {\n static formalName () {\n return HIGHLIGHT;\n }\n}\n","import VolatileBehaviour from './volatile';\nimport * as BEHAVIOURNAMES from '../../enums/behaviours';\n\n/**\n * This is the behaviour for brushing a region on the chart. It accepts a payload\n * which contains the x and y range of the data and other configuration. It will then\n * create a selection box from the range and select the points which fall within the range.\n */\nexport default class BrushBehaviour extends VolatileBehaviour {\n static formalName () {\n return BEHAVIOURNAMES.BRUSH;\n }\n}\n","import VolatileBehaviour from './volatile';\nimport { FILTER } from '../../enums/behaviours';\n\nexport default class FilterBehaviour extends VolatileBehaviour {\n static formalName () {\n return FILTER;\n }\n\n static mutates () {\n return true;\n }\n}\n","import GenericBehaviour from './generic';\nimport { getMergedSet } from '../../helper';\nimport * as SELECTION from '../../enums/selection';\n\nexport default class PersistentBehaviour extends GenericBehaviour {\n setSelectionSet (addSet, selectionSet) {\n if (addSet === null) {\n selectionSet.reset();\n } else if (addSet.length) {\n const propagationInf = this.firebolt.getPropagationInf();\n // new add set\n const existingAddSet = addSet.filter(d => selectionSet._set[d] === SELECTION.SELECTION_NEW_ENTRY\n || selectionSet._set[d] === SELECTION.SELECTION_OLD_ENTRY);\n if (propagationInf.propagate === false) {\n selectionSet.updateExit();\n const { entrySet } = selectionSet.getSets();\n selectionSet.reset(getMergedSet(entrySet));\n selectionSet.add(addSet);\n selectionSet.update(existingAddSet);\n } else {\n // existing add set\n if (existingAddSet.length) {\n selectionSet.updateExit();\n selectionSet.remove(existingAddSet);\n } else {\n selectionSet.updateEntry();\n selectionSet.add(addSet);\n }\n const { exitSet } = selectionSet.getSets();\n const mergedExitSet = getMergedSet(exitSet);\n const completeSetCount = selectionSet.getCompleteSet().length;\n if (mergedExitSet.length === completeSetCount) {\n selectionSet.reset();\n }\n }\n } else {\n selectionSet.remove(selectionSet.getCompleteSet());\n }\n\n return this;\n }\n}\n","import PersistentBehaviour from './persistent';\nimport { SELECT } from '../../enums/behaviours';\n\nexport default class SelectBehaviour extends PersistentBehaviour {\n static formalName () {\n return SELECT;\n }\n}\n\n","import { DimensionSubtype, FieldType } from 'muze-utils';\n/**\n * Gets the drag action configuration\n * @param {VisualUnit} instance instance of visual unit\n * @param {Object} config x y positions\n * @return {Object} Payload of behaviour\n*/\n/* istanbul ignore next */ const getDragActionConfig = (sourceInfo, config, fieldsConfig) => {\n if (!(sourceInfo.axes.x || sourceInfo.axes.y)) {\n return {\n criteria: null\n };\n }\n\n const axes = sourceInfo.axes;\n const xAxis = axes.x[0];\n const yAxis = axes.y[0];\n const axisFields = sourceInfo.fields;\n const xField = axisFields.x[0].getMembers()[0];\n const yField = axisFields.y[0].getMembers()[0];\n const xFieldType = fieldsConfig[xField].def.subtype ? fieldsConfig[xField].def.subtype :\n fieldsConfig[xField].def.type;\n const yFieldType = fieldsConfig[yField].def.subtype ? fieldsConfig[yField].def.subtype :\n fieldsConfig[yField].def.type;\n const dimensions = {};\n const stPos = config.startPos;\n const endPos = config.endPos;\n\n if (stPos.x === endPos.x && stPos.y === endPos.y) {\n return {\n criteria: null\n };\n }\n\n const dragDim = xFieldType === FieldType.MEASURE ? (yFieldType === FieldType.MEASURE ? ['x', 'y'] : ['y']) : ['x'];\n const criteria = {};\n const isXDimension = xFieldType === DimensionSubtype.CATEGORICAL;\n const isYDimension = yFieldType === DimensionSubtype.CATEGORICAL;\n const xRange = xAxis.constructor.type() === 'band' ? xAxis.scale().invertExtent(stPos.x, endPos.x) :\n xAxis.invert(stPos.x, endPos.x);\n const yRange = yAxis.constructor.type() === 'band' ? yAxis.scale().invertExtent(stPos.y, endPos.y) :\n yAxis.invert(stPos.y, endPos.y);\n const selectedDomains = {\n x: stPos.x === endPos.x ? [] : (isXDimension ? xRange : xRange.sort((a, b) => a - b)),\n y: stPos.y === endPos.y ? [] : (isYDimension ? yRange : yRange.sort((a, b) => a - b))\n };\n const rangeObj = {};\n\n if (dragDim.length === 2) {\n rangeObj[xField] = selectedDomains.x;\n rangeObj[yField] = selectedDomains.y;\n if (xField === yField) {\n const xdom = selectedDomains.x;\n const ydom = selectedDomains.y;\n const min = xdom[0] > ydom[0] ? ydom : xdom;\n const max = min === ydom ? xdom : ydom;\n if (min[1] < max[0]) {\n rangeObj[xField] = [];\n } else {\n rangeObj[xField] = [max[0], min[1] < max[1] ? min[1] : max[1]];\n }\n dimensions.x = [stPos.x, endPos.x];\n dimensions.y = [stPos.y, endPos.y];\n }\n } else {\n criteria[dragDim[0]] = selectedDomains[dragDim[0]] || [];\n\n if (dragDim[0] === 'x') {\n rangeObj[xField] = criteria.x;\n if (xFieldType === DimensionSubtype.CATEGORICAL) {\n dimensions.x = (config.snap && stPos.x !== endPos.x) ? xAxis.getNearestRange(stPos.x, endPos.x) :\n [stPos.x, endPos.x];\n }\n } else {\n rangeObj[yField] = criteria.y;\n if (yFieldType === DimensionSubtype.CATEGORICAL) {\n dimensions.y = (config.snap && stPos.y !== endPos.y) ? yAxis.getNearestRange(stPos.y, endPos.y) :\n [stPos.y, endPos.y];\n }\n }\n }\n\n return {\n criteria: rangeObj,\n dimensions\n };\n};\n\nexport default getDragActionConfig;\n","import {\n getEvent,\n getD3Drag\n } from 'muze-utils';\n\nimport getDragActionConfig from './drag-action-config';\n\n/**\n * Adds dragging action to the target element.\n * @param {VisualUnit} instance Instance of visual unit.\n * @param {SVGElement} targetEl Element on which brushing action is needed.\n * @param {Array} behaviours Array of behaviours\n */\nexport const attachDragEvent = (targetEl, behaviours, firebolt, touch) => {\n let startPos = {};\n let endPos = {};\n let drawingInf;\n\n const d3Drag = getD3Drag();\n let touchStart;\n targetEl.call(d3Drag().on('start', () => {\n const event = getEvent();\n startPos = {\n x: event.x,\n y: event.y\n };\n drawingInf = firebolt.context.getDrawingContext();\n touchStart = new Date().getTime();\n }).on('drag', () => {\n const event = getEvent();\n endPos = {\n x: event.x,\n y: event.y\n };\n if (touch && Math.abs(startPos.x - endPos.x) <= 5) {\n return;\n }\n endPos.x = Math.max(0, Math.min(endPos.x, drawingInf.width));\n endPos.y = Math.max(0, Math.min(endPos.y, drawingInf.height));\n\n const payload = getDragActionConfig(firebolt.context.getSourceInfo(), {\n startPos,\n endPos\n }, firebolt.context.data().getFieldsConfig());\n behaviours.forEach(beh => firebolt.dispatchBehaviour(beh, payload));\n }).on('end', () => {\n const event = getEvent();\n endPos = {\n x: event.x,\n y: event.y\n };\n const duration = new Date().getTime() - touchStart;\n\n if (touch && duration > 100 && Math.abs(startPos.x - endPos.x) <= 5) {\n return;\n }\n endPos.x = Math.max(0, Math.min(endPos.x, drawingInf.width));\n endPos.y = Math.max(0, Math.min(endPos.y, drawingInf.height));\n\n const payload = getDragActionConfig(firebolt.context.getSourceInfo(), {\n startPos,\n endPos,\n snap: true\n }, firebolt.context.data().getFieldsConfig());\n payload.dragEnd = true;\n behaviours.forEach(beh => firebolt.dispatchBehaviour(beh, payload));\n }));\n};\n\n","import { getClientPoint, getEvent } from 'muze-utils';\nimport { CONSOLIDATED, FRAGMENTED } from '../../enums/constants';\n\n/**\n * Adds mouse interactions to target element.\n * @param {Firebolt} instance instance of firebolt.\n * @param {SVGElement} targetEl Element on which the event listeners will be attached.\n * @param {Array} behaviours Array of behaviours\n */\n/* istanbul ignore next */ const hover = firebolt => (targetEl, behaviours) => {\n const dispatchBehaviour = function (args) {\n const event = getEvent();\n const context = firebolt.context;\n const tooltipConf = context.config().interaction.tooltip;\n const mode = tooltipConf.mode;\n const pos = getClientPoint(context.getDrawingContext().svgContainer, event);\n const nearestPoint = context.getNearestPoint(pos.x, pos.y, {\n getAllPoints: mode === CONSOLIDATED || mode === FRAGMENTED,\n data: args,\n event\n });\n const payload = {\n criteria: nearestPoint ? nearestPoint.id : null,\n showInPosition: nearestPoint.showInPosition,\n target: nearestPoint.target,\n position: pos,\n mode\n };\n\n behaviours.forEach(beh => firebolt.dispatchBehaviour(beh, payload));\n event.stopPropagation();\n };\n\n targetEl.on('mouseover', dispatchBehaviour)\n .on('mousemove', dispatchBehaviour)\n .on('mouseout', () => {\n behaviours.forEach(beh => firebolt.dispatchBehaviour(beh, {\n criteria: null\n }));\n });\n};\n\nexport default hover;\n","export const CLASSPREFIX = 'muze';\nexport const CONSOLIDATED = 'consolidated';\nexport const FRAGMENTED = 'fragmented';\n\n","import { getClientPoint } from 'muze-utils';\n\nexport const generatePayloadFromEvent = function (args, event, firebolt) {\n const context = firebolt.context;\n const pos = getClientPoint(context.getDrawingContext().svgContainer, event.touches ? event.touches[0] : event);\n const nearestPoint = context.getNearestPoint(pos.x, pos.y, {\n data: args,\n event\n });\n return {\n criteria: nearestPoint ? nearestPoint.id : null,\n showInPosition: nearestPoint.showInPosition,\n target: nearestPoint.target,\n position: pos\n };\n};\n","import { getEvent } from 'muze-utils';\nimport { generatePayloadFromEvent } from './helpers';\n\n/**\n * Adds mouse interactions to target element.\n * @param {VisualUnit} instance instance of visual unit.\n * @param {SVGElement} targetEl Element on which the event listeners will be attached.\n * @param {Array} behaviours Array of behaviours\n */\n/* istanbul ignore next */ const click = firebolt => (targetEl, behaviours) => {\n const dispatchBehaviour = function (args) {\n const event = getEvent();\n const payload = generatePayloadFromEvent(args, event, firebolt);\n behaviours.forEach(beh => firebolt.dispatchBehaviour(beh, payload));\n event.stopPropagation();\n };\n\n targetEl.on('click', dispatchBehaviour);\n};\nexport default click;\n","import drag from './drag';\nimport hover from './hover';\nimport { longtouch } from './longtouch';\nimport { touchdrag } from './touch-drag';\nimport * as ACTIONNAMES from '../../enums/actions';\nimport click from './click';\n\nexport const physicalActions = {\n [ACTIONNAMES.DRAG]: drag,\n [ACTIONNAMES.HOVER]: hover,\n [ACTIONNAMES.CLICK]: click,\n [ACTIONNAMES.LONGTOUCH]: longtouch,\n [ACTIONNAMES.TOUCHDRAG]: touchdrag\n};\n\n","import { attachDragEvent } from './helpers/drag-event';\n\n/**\n * Adds dragging action to the target element.\n * @param {VisualUnit} instance Instance of visual unit.\n * @param {SVGElement} targetEl Element on which brushing action is needed.\n * @param {Array} behaviours Array of behaviours\n */\n/* istanbul ignore next */ const drag = firebolt => (targetEl, behaviours) => {\n attachDragEvent(targetEl, behaviours, firebolt);\n};\n\nexport default drag;\n","/* global setTimeout */\nimport { getEvent } from 'muze-utils';\nimport { generatePayloadFromEvent } from './helpers';\n\n/**\n * Adds mouse interactions to target element.\n * @param {VisualUnit} instance instance of visual unit.\n * @param {SVGElement} targetEl Element on which the event listeners will be attached.\n * @param {Array} behaviours Array of behaviours\n */\nexport const longtouch = firebolt => (targetEl, behaviours) => {\n let event;\n let touchEnd;\n const dispatchBehaviour = function (args) {\n const payload = generatePayloadFromEvent(args, event, firebolt);\n behaviours.forEach(beh => firebolt.dispatchBehaviour(beh, payload));\n event.stopPropagation();\n };\n\n touchEnd = false;\n event = getEvent();\n targetEl.on('touchstart', (args) => {\n event = getEvent();\n touchEnd = false;\n setTimeout(() => {\n if (!touchEnd) {\n dispatchBehaviour(args);\n } else {\n behaviours.forEach(beh => firebolt.dispatchBehaviour(beh, {\n criteria: null\n }));\n }\n }, 100);\n }).on('touchend', () => {\n touchEnd = true;\n });\n};\n","import { attachDragEvent } from './helpers/drag-event';\n\n/**\n * Adds dragging action to the target element.\n * @param {VisualUnit} instance Instance of visual unit.\n * @param {SVGElement} targetEl Element on which brushing action is needed.\n * @param {Array} behaviours Array of behaviours\n */\nexport const touchdrag = firebolt => (targetEl, behaviours) => {\n attachDragEvent(targetEl, behaviours, firebolt, true);\n};\n\n","import { mergeRecursive, getUniqueId } from 'muze-utils';\n\nexport default class GenericSideEffect {\n constructor (firebolt) {\n this.firebolt = firebolt;\n this._enabled = true;\n this._strategy = 'default';\n this._config = {};\n this._id = getUniqueId();\n this._strategies = {};\n this.config(this.constructor.defaultConfig());\n }\n\n static defaultConfig () {\n return {};\n }\n\n static target () {\n return 'all';\n }\n\n static mutates () {\n return false;\n }\n\n config (...params) {\n if (params.length) {\n this._config = mergeRecursive(this._config, params[0]);\n return this;\n }\n return this._config;\n }\n\n disable () {\n this._enabled = false;\n return this;\n }\n\n enable () {\n this._enabled = true;\n return this;\n }\n\n isEnabled () {\n return this._enabled;\n }\n\n apply () {\n return this;\n }\n\n addStrategy (name, fn) {\n this._strategies[name] = fn;\n return this;\n }\n}\n","import GenericSideEffect from './generic';\n\nexport default class SurrogateSideEffect extends GenericSideEffect {\n applyInteractionStyle (set, config = {}, interactionType, apply) {\n const layers = this.firebolt.context.layers();\n layers.forEach(layer => layer.config().interactive !== false &&\n layer.applyInteractionStyle(interactionType, set.uids, apply));\n }\n}\n","import { makeElement } from 'muze-utils';\n\nimport GenericSideEffect from './generic';\n\nexport default class SpawnableSideEffect extends GenericSideEffect {\n createElement (container, elemType, data, className, callbacks) {\n return makeElement(container, elemType, data, className, callbacks);\n }\n\n drawingContext (...drawingContext) {\n if (drawingContext.length) {\n this._drawingContext = drawingContext[0];\n return this;\n }\n return this._drawingContext();\n }\n\n show () {\n return this;\n }\n\n hide () {\n return this;\n }\n}\n","import { selectElement } from 'muze-utils';\n\nexport const getBoxDimensionsFromPayload = (payload, axes, axisFields) => {\n let x1;\n let x2;\n let y1;\n let y2;\n let xRange;\n let yRange;\n let direction;\n const criteria = payload.criteria;\n const dimensions = payload.dimensions || {};\n const xDim = dimensions.x;\n const yDim = dimensions.y;\n\n if (criteria === null) {\n return null;\n }\n\n const xAxis = axes.x[0];\n const yAxis = axes.y[0];\n const xLinear = xAxis.constructor.type() === 'linear';\n const yLinear = yAxis.constructor.type() === 'linear';\n const xField = `${axisFields.x[0]}`;\n const yField = `${axisFields.y[0]}`;\n const xCriteria = criteria[xField];\n const yCriteria = criteria[yField];\n\n if (xCriteria && xCriteria[0] instanceof Array) {\n xRange = xCriteria[0];\n yRange = xCriteria[1];\n } else {\n xRange = xCriteria || [];\n yRange = yCriteria || [];\n }\n direction = xCriteria && yCriteria ? 'both' : (xCriteria ? 'vertical' : 'horizontal');\n if (xRange && xRange.length) {\n if ((yAxis.constructor.type() === 'band' && xLinear)) {\n x1 = x2 = undefined;\n direction = 'horizontal';\n } else {\n const domain = xAxis.domain();\n const bandScale = xAxis.constructor.type() === 'band';\n let x1Val;\n let x2Val;\n if (bandScale) {\n let x1DomainIndex = domain.indexOf(xRange[0]);\n let x2DomainIndex = domain.indexOf(xRange[xRange.length - 1]);\n [x1DomainIndex, x2DomainIndex] = [x1DomainIndex, x2DomainIndex].sort((a, b) => a - b);\n x1Val = domain[x1DomainIndex];\n x2Val = domain[x2DomainIndex];\n } else {\n x1Val = xRange[0];\n x2Val = xRange[xRange.length - 1];\n }\n x1 = xAxis.getScaleValue(x1Val);\n x2 = xAxis.getScaleValue(x2Val);\n x2 += bandScale ? xAxis.getUnitWidth() : 0;\n }\n } else {\n x1 = x2 = undefined;\n }\n if (yRange && yRange.length) {\n if ((xAxis.constructor.type() === 'band' && yLinear)) {\n y1 = y2 = undefined;\n direction = 'vertical';\n } else {\n const domain = yAxis.domain();\n const bandScale = yAxis.constructor.type() === 'band';\n let y1Val;\n let y2Val;\n if (bandScale) {\n let y1DomainIndex = domain.indexOf(yRange[0]);\n let y2DomainIndex = domain.indexOf(yRange[yRange.length - 1]);\n [y1DomainIndex, y2DomainIndex] = [y1DomainIndex, y2DomainIndex].sort(((a, b) => b - a));\n y1Val = domain[y1DomainIndex];\n y2Val = domain[y2DomainIndex];\n } else {\n y1Val = yRange[0];\n y2Val = yRange[yRange.length - 1];\n }\n y1 = yAxis.getScaleValue(y1Val);\n y2 = yAxis.getScaleValue(y2Val);\n y2 += yAxis.constructor.type() === 'band' ? yAxis.getUnitWidth() : 0;\n }\n } else {\n y1 = y2 = undefined;\n }\n\n if ((yLinear && xLinear) || !payload.dragEnd) {\n if (xDim) {\n [x1, x2] = xDim;\n }\n if (yDim) {\n [y1, y2] = yDim;\n }\n }\n\n return {\n dimension: {\n x1,\n x2,\n y1,\n y2\n },\n direction\n };\n};\n\nexport const changeVisibility = (context, sideEffectGroup, visible) => {\n const config = context.config();\n const className = config.defClassName;\n const classPrefix = config.classPrefix;\n selectElement(sideEffectGroup).selectAll(`.${classPrefix}-${className}`)\n .style('display', visible ? 'block' : 'none');\n};\n","import {\n getQualifiedClassName,\n selectElement,\n makeElement,\n isValidValue\n} from 'muze-utils';\nimport { CLASSPREFIX } from '../../enums/constants';\nimport './styles.scss';\nimport SpawnableSideEffect from '../spawnable';\nimport { selectionBoxDrag } from '../../actions/physical/selection-box-drag';\nimport { getBoxDimensionsFromPayload, changeVisibility } from './helper';\n\n/**\n * This class is used to create a selection box which is used by visual unit for brushing and\n * selection in the canvas.\n * @class SelectionBox\n */\nclass SelectionBox extends SpawnableSideEffect {\n /**\n * It returns the default configuration needed by selectionbox.\n * @return {Object} Default configuration of the selection box.\n */\n static defaultConfig () {\n return {\n defClassName: 'selection-box-group',\n className: '',\n classPrefix: CLASSPREFIX,\n box: {\n defClassName: 'selection-box',\n className: ''\n },\n transition: {\n duration: 200\n }\n };\n }\n\n static formalName () {\n return 'selectionBox';\n }\n\n /**\n * Draws the selectionbox with the specified dimensions.\n * @param {Object} dimension Dimensions of the selection box.\n * @param {number} dimension.x1 Starting x position\n * @param {number} dimension.x2 Ending x position\n * @param {number} dimension.y1 Starting y position\n * @param {number} dimension.y2 Ending y position\n * @param {Object} conf Configuration needed to draw the selection box\n * @param {number} unitWidth Width of the visual unit.\n * @param {number} unitHeight Height of the visual unit.\n */\n apply (selectionSet, payload) {\n let x;\n let y;\n let width;\n let height;\n const config = this._config;\n const boxConf = config.box;\n const firebolt = this.firebolt;\n const drawingInf = this.drawingContext();\n const mountPoint = drawingInf.sideEffectGroup;\n const unitWidth = drawingInf.width;\n const unitHeight = drawingInf.height;\n const classPrefix = config.classPrefix;\n const selectionGroupClassName = config.defClassName;\n\n if (payload.criteria === null) {\n this.hide(drawingInf);\n return this;\n }\n\n const sourceInf = firebolt.context.getSourceInfo();\n const { dimension, direction } = getBoxDimensionsFromPayload(payload, sourceInf.axes,\n sourceInf.fields);\n const transition = payload.dragEnd && config.transition;\n\n if (direction === 'both' || direction === 'vertical') {\n x = Math.min(dimension.x1, dimension.x2);\n width = Math.abs(dimension.x2 - dimension.x1);\n } else {\n x = 0;\n width = unitWidth;\n }\n if (direction === 'both' || direction === 'horizontal') {\n y = Math.min(dimension.y1, dimension.y2);\n height = Math.abs(dimension.y2 - dimension.y1);\n } else {\n height = unitHeight;\n y = 0;\n }\n this.show(drawingInf);\n // Create the data array for drawing the rectangle\n const points = [\n {\n x,\n y,\n width,\n height\n }\n ];\n // Create the container group for selection box.\n const selectionGroup = makeElement(selectElement(mountPoint), 'g', [1],\n `.${classPrefix}-${selectionGroupClassName}`);\n const sideEffect = this;\n const selection = selectionGroup.selectAll('rect').data(points);\n const selectionBox = selection.enter().append('rect')\n .each(function () {\n selectionBoxDrag(firebolt)(selectElement(this), ['brush'], sideEffect);\n })\n .merge(selection)\n .each(function (attrs) {\n let element = selectElement(this);\n transition && (element = element.transition().duration(transition.duration));\n for (const key in attrs) {\n if ({}.hasOwnProperty.call(attrs, key)) {\n isValidValue(attrs[key]) && element.attr(key, attrs[key]);\n }\n }\n });\n // Get the qualified class name for selection box rectangle\n const boxClassName = getQualifiedClassName(boxConf.defClassName, this._id, classPrefix);\n selectionBox.classed(boxClassName.join(' '), true);\n selectionBox.classed(boxConf.className, true);\n\n return this;\n }\n\n hide (drawingInf) {\n changeVisibility(this, drawingInf.sideEffectGroup, false);\n }\n\n show (drawingInf) {\n changeVisibility(this, drawingInf.sideEffectGroup, true);\n }\n}\n\nexport default SelectionBox;\n\n","import {\n getEvent,\n getD3Drag\n } from 'muze-utils';\n\nimport getDragActionConfig from './helpers/drag-action-config';\n\nexport const selectionBoxDrag = firebolt => (targetEl, behaviours) => {\n let subject;\n let drawingInf;\n const context = firebolt.context;\n const onDrag = (payload) => {\n behaviours.forEach(action => firebolt.dispatchBehaviour(action, payload));\n };\n const d3Drag = getD3Drag();\n\n targetEl.call(d3Drag().on('start', () => {\n const event = getEvent();\n drawingInf = context.getDrawingContext();\n subject = event.subject;\n }).on('drag', () => {\n const event = getEvent();\n subject.x += event.dx;\n subject.y += event.dy;\n const width = drawingInf.width;\n const height = drawingInf.height;\n const x = Math.min(width - subject.width, Math.max(subject.x, 0));\n const y = Math.min(height - subject.height, Math.max(subject.y, 0));\n const y2 = y + subject.height;\n const x2 = x + subject.width;\n\n if (x >= 0 && x2 <= width && y >= 0 && y2 <= height) {\n const payload = getDragActionConfig(context.getSourceInfo(), {\n startPos: {\n x,\n y\n },\n endPos: {\n x: x2,\n y: y2\n }\n }, context.data().getFieldsConfig());\n onDrag(payload);\n }\n }).on('end', () => {\n const width = drawingInf.width;\n const height = drawingInf.height;\n const x = Math.min(width - subject.width, Math.max(subject.x, 0));\n const y = Math.min(height - subject.height, Math.max(subject.y, 0));\n const y2 = y + subject.height;\n const x2 = x + subject.width;\n\n if (x >= 0 && x2 <= width && y >= 0 && y2 <= height) {\n const payload = getDragActionConfig(context.getSourceInfo(), {\n startPos: {\n x,\n y\n },\n endPos: {\n x: x2,\n y: y2\n },\n snap: true\n }, context.data().getFieldsConfig());\n payload.dragEnd = true;\n onDrag(payload);\n }\n }));\n};\n","export const CLASSPREFIX = 'muze';\nexport const ARROW_RIGHT = 'right';\nexport const ARROW_TOP = 'top';\nexport const ARROW_BOTTOM = 'bottom';\nexport const ARROW_LEFT = 'left';\nexport const TOOLTIP_LEFT = 'left';\nexport const TOOLTIP_RIGHT = 'right';\nexport const TOOLTIP_BOTTOM = 'bottom';\nexport const TOOLTIP_TOP = 'top';\nexport const INITIAL_STYLE = {\n position: 'absolute',\n width: 0,\n height: 0\n};\n","import { CLASSPREFIX } from './constants';\n\nexport const defaultConfig = {\n classPrefix: CLASSPREFIX,\n defClassName: 'tooltip-box',\n connectorClassName: 'tooltip-connectors',\n className: '',\n row: {\n margin: 0\n },\n content: {\n spacing: 5,\n iconContainerSize: 10,\n iconScale: 1,\n iconShape: 'circle',\n iconColor: '#ff0000',\n rowMargin: '0px',\n margin: 10,\n separator: ':',\n className: 'tooltip-content-container',\n parentClassName: 'tooltip-content-parent-container'\n },\n arrow: {\n size: 10,\n disabled: false,\n defClassName: 'tooltip-arrow',\n className: '',\n color: 'rgba(195,195,195,0.85)'\n }\n};\n","import { getQualifiedClassName } from 'muze-utils';\nimport { TOOLTIP_LEFT, TOOLTIP_RIGHT, ARROW_RIGHT, ARROW_LEFT, TOOLTIP_BOTTOM } from './constants';\n\nexport const getArrowPos = (orient, dim, measurement, config) => {\n let arrowPos;\n const { x, y, boxHeight, boxWidth } = measurement;\n const arrowDisabled = config.arrow.disabled;\n const arrowWidth = arrowDisabled ? 0 : config.arrow.size;\n\n if (orient === ARROW_LEFT || orient === ARROW_RIGHT) {\n let start = 0;\n let diff = boxHeight / 2;\n const plotBottom = dim.y + dim.height;\n const boxBottom = y + boxHeight;\n\n if (dim.y > y) {\n start = dim.y - y;\n diff = (plotBottom >= boxBottom ? (boxBottom - dim.y) : dim.height) / 2;\n } else if (boxBottom > plotBottom) {\n diff = Math.abs(y - (dim.y + dim.height)) / 2;\n }\n arrowPos = start + diff - arrowWidth / 2;\n } else {\n let start = 0;\n let diff = boxWidth / 2;\n const plotRight = dim.x + dim.width;\n const boxRight = x + boxWidth;\n\n if (dim.x > x) {\n start = dim.x - x;\n diff = (plotRight >= boxRight ? (boxRight - dim.x) : dim.width) / 2;\n } else if (boxRight > plotRight) {\n diff = Math.abs(x - (dim.x + dim.width)) / 2;\n }\n arrowPos = start + diff - arrowWidth / 2;\n }\n return arrowPos;\n};\n\n/**\n * Places the arrow in the specified arrow position. It also applies appropriate arrow\n * class name to the arrow element.\n * @param {string} position Left, bottom or right position of the arrow;\n * @param {number} arrowPos position of arrow in pixels\n * @return {Tooltip} Instance of tooltip.\n */\nexport const placeArrow = (context, position, arrowPos) => {\n const tooltipArrow = context._tooltipArrow;\n const tooltipBackground = context._tooltipBackground;\n const config = context._config;\n const classPrefix = config.classPrefix;\n const arrowConf = config.arrow;\n const className = getQualifiedClassName(arrowConf.defClassName, context._id, config.classPrefix);\n\n tooltipArrow.style('display', 'block');\n tooltipArrow.attr('class', `${className.join(' ')}`);\n if (position === TOOLTIP_LEFT || position === TOOLTIP_RIGHT) {\n tooltipArrow.style('top', `${arrowPos}px`);\n tooltipArrow.style('left', '');\n tooltipBackground.style('top', `${arrowPos}px`);\n tooltipBackground.style('left', '');\n } else {\n position === TOOLTIP_BOTTOM ? tooltipArrow.style('top', '100%') : tooltipArrow.style('top',\n `-${arrowConf.size}px`);\n tooltipArrow.style('left', `${arrowPos}px`);\n position === TOOLTIP_BOTTOM ? tooltipBackground.style('top', '100%') : tooltipBackground.style('top',\n `-${arrowConf.size + 3}px`);\n tooltipBackground.style('left', `${arrowPos}px`);\n }\n tooltipArrow.classed(`${classPrefix}-tooltip-arrow`, true);\n tooltipArrow.classed(`${classPrefix}-tooltip-arrow-${context._arrowOrientation}`, false);\n tooltipArrow.classed(`${classPrefix}-tooltip-arrow-${position}`, true);\n tooltipBackground.classed(`${classPrefix}-tooltip-background-arrow`, true);\n tooltipBackground.classed(`${classPrefix}-tooltip-background-arrow-${context._arrowOrientation}`, false);\n tooltipBackground.classed(`${classPrefix}-tooltip-background-arrow-${position}`, true);\n return this;\n};\n\nexport const reorderContainers = (parentContainer, className) => {\n parentContainer.selectAll(className).sort((a, b) => a - b);\n};\n","import {\n getClosestIndexOf,\n DateTimeFormatter,\n DimensionSubtype,\n FieldType\n} from 'muze-utils';\n\nconst timeFormats = {\n millisecond: '%A, %b %e, %H:%M:%S.%L',\n second: '%A, %b %e, %H:%M:%S',\n minute: '%A, %b %e, %H:%M',\n hour: '%A, %b %e, %H:%M',\n day: '%A, %b %e, %Y',\n month: '%B %Y',\n year: '%Y'\n};\nconst timeDurations = [\n ['millisecond', 'second', 'minute', 'hour', 'day', 'month', 'year'],\n [1, 1000, 60000, 3600000, 86400000, 2592000000, 31536000000]\n];\nconst getNearestInterval = (interval) => {\n const index = getClosestIndexOf(timeDurations[1], interval);\n return timeDurations[0][index];\n};\nconst defaultTooltipFormatters = (type, formatter) => {\n const formatters = {\n [DimensionSubtype.TEMPORAL]: (value, interval) => {\n const nearestInterval = getNearestInterval(interval);\n return DateTimeFormatter.formatAs(value, timeFormats[nearestInterval]);\n },\n [FieldType.MEASURE]: value => formatter(value ? value.toFixed(2) : value),\n [FieldType.DIMENSION]: value => value\n };\n return formatters[type];\n};\n\nconst getTabularData = (data, schema, fieldspace, timeDiffs) => {\n const rows = [];\n rows.push(schema.map(d => d.name));\n data.forEach((d) => {\n const row = [];\n schema.forEach((fieldObj, i) => {\n const interval = fieldObj.subtype === DimensionSubtype.TEMPORAL ? timeDiffs[fieldObj.name] : 0;\n const numberFormat = fieldObj.type === FieldType.MEASURE && fieldspace.fields[i]._ref.numberFormat();\n const formatterFn = defaultTooltipFormatters(fieldObj.subtype || fieldObj.type, numberFormat);\n const value = formatterFn(d[i], interval);\n row.push(value);\n });\n rows.push(row);\n });\n return rows;\n};\n\nexport const buildTooltipData = (dataModel, config = {}, context) => {\n let fieldValues = [];\n const dataObj = dataModel.getData();\n const data = dataObj.data;\n const schema = dataObj.schema;\n const formatters = config.formatters;\n const separator = config.separator;\n const fieldsConfig = dataModel.getFieldsConfig();\n const fieldspace = dataModel.getFieldspace();\n const fieldsObj = fieldspace.fieldsObj();\n const dimensionMeasureMap = context.dimensionMeasureMap;\n const axes = context.axes;\n const detailFields = context.detailFields || [];\n const dimensions = schema.filter(d => d.type === FieldType.DIMENSION);\n const measures = schema.filter(d => d.type === FieldType.MEASURE);\n // const containsRetinalField = schema.find(d => d.name in dimensionMeasureMap);\n const containsDetailField = schema.find(d => detailFields.indexOf(d.name) !== -1);\n const dataLen = data.length;\n const getRowContent = (field, type) => {\n let value;\n let formattedValue;\n let measureIndex;\n const values = [];\n const index = fieldsConfig[field].index;\n const interval = fieldsConfig[field].def.subtype === DimensionSubtype.TEMPORAL ?\n fieldsObj[field].getMinDiff() : 0;\n const formatterFn = (formatters && formatters[field]) || defaultTooltipFormatters(type, val => val);\n\n if (value !== null) {\n let uniqueVals = type === FieldType.MEASURE ? data.map(d => d[index]) :\n [...new Set(data.map(d => d[index]))];\n uniqueVals = uniqueVals.filter(d => d !== '');\n const colorAxis = axes.color[0];\n const shapeAxis = axes.shape[0];\n const sizeAxis = axes.size[0];\n const isRetinalField = (colorAxis || shapeAxis || sizeAxis) && dataLen > 1 &&\n type !== FieldType.MEASURE;\n\n uniqueVals.forEach((val, i) => {\n let key;\n const associatedMeasures = dimensionMeasureMap[field];\n\n if (associatedMeasures && associatedMeasures.length && dataLen > 1) {\n key = val;\n let icon = {\n value: ''\n };\n\n if (isRetinalField) {\n icon = {\n type: 'icon',\n color: colorAxis.getColor(val),\n shape: shapeAxis.getShape(val),\n size: sizeAxis.getSize(val) * config.iconScale\n };\n }\n if (associatedMeasures.length > 1) {\n values.push([icon, `${key}`]);\n associatedMeasures.forEach((measure) => {\n measureIndex = fieldsConfig[measure].index;\n value = data[i][measureIndex];\n formattedValue = defaultTooltipFormatters('measure',\n fieldspace.fields[measureIndex]._ref.numberFormat())(value, interval);\n values.push([{\n value: `${measure}${separator}`,\n style: {\n 'margin-left': `${config.margin}px}`\n },\n className: `${config.classPrefix}-tooltip-key`\n }, {\n value: `${formattedValue}`,\n className: `${config.classPrefix}-tooltip-value`\n }]);\n });\n } else {\n measureIndex = fieldsConfig[associatedMeasures[0]].index;\n value = data[i][measureIndex];\n formattedValue = defaultTooltipFormatters('measure',\n fieldspace.fields[measureIndex]._ref.numberFormat())(value, interval);\n values.push([icon, {\n value: `${key}${separator}`,\n className: `${config.classPrefix}-tooltip-key`\n }, {\n value: `${formattedValue}`,\n className: `${config.classPrefix}-tooltip-value`\n }]);\n }\n } else {\n key = field;\n value = val;\n formattedValue = formatterFn(value, interval);\n values.push([{\n value: `${key}${separator}`,\n className: `${config.classPrefix}-tooltip-key`\n }, {\n value: `${formattedValue}`,\n className: `${config.classPrefix}-tooltip-value`\n }]);\n }\n });\n }\n return values;\n };\n let displayFormat = 'keyValue';\n\n if (dataLen > 1 && containsDetailField) {\n fieldValues = getTabularData(data, schema, fieldspace, context.timeDiffs);\n displayFormat = 'table';\n } else {\n dimensions.forEach((item) => {\n const type = item.subtype ? item.subtype : item.type;\n fieldValues = [...fieldValues, ...getRowContent(item.name, type)];\n });\n\n const allMeasures = [...new Set(...Object.values(dimensionMeasureMap))];\n const filteredMeasures = dataLen > 1 ? measures.filter(d => allMeasures.indexOf(d.name) === -1)\n : measures;\n\n filteredMeasures.forEach((item) => {\n const type = item.subtype ? item.subtype : item.type;\n fieldValues = [...fieldValues, ...getRowContent(item.name, type)];\n });\n }\n\n return {\n content: fieldValues,\n displayFormat\n };\n};\n\n/**\n * This contains the strategy methods for showing tooltip in the chart.\n * @param {VisualUnit} context Attached instance.\n */\nexport const strategy = {\n keyValue: (data, config, context) => {\n const values = buildTooltipData(data, config, context);\n return values;\n }\n};\n\nexport const DEFAULT_STRATEGY = 'keyValue';\n","import {\n selectElement,\n mergeRecursive,\n makeElement,\n setAttrs,\n setStyles,\n getSymbol,\n isSimpleObject\n} from 'muze-utils';\nimport { DEFAULT_STRATEGY, strategy } from './strategy';\nimport { defaultConfig } from './default-config';\n\n/**\n * This class is used to manage the content of tooltip.\n */\nexport default class Content {\n /**\n * Creates an instance of content.\n */\n constructor () {\n this._model = null;\n this._strategy = DEFAULT_STRATEGY;\n this._formatter = null;\n this._config = this.constructor.defaultConfig();\n }\n /**\n * Returns the default configuration of tooltip\n * @return {Object} Configuration of tooltip.\n */\n static defaultConfig () {\n const config = defaultConfig.content;\n config.classPrefix = defaultConfig.classPrefix;\n return config;\n }\n\n config (...c) {\n if (c.length > 0) {\n this._config = mergeRecursive(this._config, c[0]);\n return this;\n }\n return this._config;\n }\n\n /**\n * Update model. The format contains presentation strategy which determines how to show the content.\n * If no strategy is mentioned then default is to show key value pair\n */\n update (item) {\n this._model = item.model;\n this._strategy = item.strategy !== undefined ? item.strategy : DEFAULT_STRATEGY;\n this._formatter = item.formatter;\n return this;\n }\n\n context (ctx) {\n this._context = ctx;\n return this;\n }\n\n render (mount) {\n let data;\n const config = this._config;\n const iconContainerSize = config.iconContainerSize;\n const formatter = this._formatter;\n const rowMargin = config.rowMargin;\n const model = this._model;\n\n this._mount = mount;\n if (model instanceof Array) {\n data = model;\n } else {\n data = formatter instanceof Function ? formatter(this._model, this._context) :\n strategy[this._strategy](this._model, this.config(), this._context);\n }\n\n if (data instanceof Function) {\n mount.html(data());\n } else {\n let content = data;\n let displayFormat = 'default';\n\n if (isSimpleObject(data)) {\n content = data.content;\n displayFormat = data.displayFormat;\n }\n\n const body = makeElement(mount, 'div', [displayFormat], `${config.classPrefix}-tooltip-content`, {},\n d => d);\n\n if (displayFormat === 'table') {\n const table = makeElement(body, 'table', [1], `${config.classPrefix}-tooltip-table`);\n const tbody = makeElement(table, 'tbody', [1], `${config.classPrefix}-tooltip-table-tbody`);\n const rows = makeElement(tbody, 'tr', content, `${config.classPrefix}-tooltip-table-row`);\n rows.each(function (d, i) {\n selectElement(this).classed(`${config.classPrefix}-tooltip-table-row-${i}`, true);\n });\n const cells = makeElement(rows, 'td', d => d, `${config.classPrefix}-tooltip-table-cell`);\n cells.each(function (d) {\n selectElement(this).html(d);\n });\n } else {\n const rows = makeElement(body, 'div', content, `${config.classPrefix}-tooltip-row`);\n const cells = makeElement(rows, 'span', d => d, `${config.classPrefix}-tooltip-content`);\n cells.attr('class', `${config.classPrefix}-tooltip-content`);\n setStyles(rows, {\n margin: rowMargin\n });\n setStyles(cells, {\n display: 'inline-block',\n 'margin-right': `${config.spacing}px`\n });\n\n cells.each(function (d) {\n const el = selectElement(this);\n el.html('');\n if (d instanceof Object) {\n if (d.type === 'icon') {\n const svg = makeElement(el, 'svg', [1]);\n const path = makeElement(svg, 'path', [1]);\n const shape = d.shape instanceof Function ? d.shape : getSymbol(d.shape);\n\n setAttrs(svg, {\n x: 0,\n y: 0,\n width: iconContainerSize,\n height: iconContainerSize\n });\n setAttrs(path, {\n d: shape.size(d.size)(),\n transform: `translate(${iconContainerSize / 2}, ${iconContainerSize / 2})`\n });\n setStyles(path, {\n fill: d.color\n });\n setStyles(svg, {\n width: `${iconContainerSize}px`,\n height: `${iconContainerSize}px`\n });\n } else {\n el.html(d.value);\n d.className && el.classed(d.className, true);\n setStyles(el, d.style);\n }\n } else {\n el.html(d);\n }\n });\n }\n }\n return this;\n }\n\n clear () {\n this._model = null;\n return this;\n }\n}\n","import {\n mergeRecursive,\n getQualifiedClassName,\n getUniqueId,\n selectElement,\n setStyles,\n makeElement\n} from 'muze-utils';\nimport { ARROW_BOTTOM, ARROW_LEFT, ARROW_RIGHT, TOOLTIP_LEFT, TOOLTIP_RIGHT, TOOLTIP_BOTTOM, TOOLTIP_TOP,\n INITIAL_STYLE } from './constants';\nimport { defaultConfig } from './default-config';\nimport { getArrowPos, placeArrow, reorderContainers } from './helper';\nimport './styles.scss';\nimport Content from './content';\n\n/**\n * This component is responsible for creating a tooltip element. It appends the tooltip\n * in the body element.\n * @class Tooltip\n */\nexport default class Tooltip {\n /**\n * Initializes the tooltip with the container element and configuration\n * @param {HTMLElement} container container where the tooltip will be mounted.\n * @param {string} className Class name of the tooltip.\n */\n constructor (htmlContainer, svgContainer) {\n let connectorContainer = svgContainer;\n this._id = getUniqueId();\n this._config = {};\n this.config({});\n const tooltipConf = this._config;\n const classPrefix = tooltipConf.classPrefix;\n const contentClass = tooltipConf.content.parentClassName;\n const container = makeElement(htmlContainer, 'div', [1], `${classPrefix}-tooltip-container`);\n this._container = container;\n this._tooltipContainer = container.append('div').style('position', 'absolute');\n this._contentContainer = this._tooltipContainer.append('div').attr('class', `${classPrefix}-${contentClass}`);\n this._tooltipBackground = this._tooltipContainer.append('div').style('position', 'relative');\n this._tooltipArrow = this._tooltipContainer.append('div');\n\n if (!svgContainer) {\n connectorContainer = htmlContainer.append('svg').style('pointer-events', 'none');\n }\n this._contents = {};\n this._tooltipConnectorContainer = selectElement(connectorContainer)\n .append('g')\n .attr('class', `${tooltipConf.classPrefix}-${tooltipConf.connectorClassName}`);\n const id = this._id;\n const defClassName = tooltipConf.defClassName;\n const qualifiedClassName = getQualifiedClassName(defClassName, id, tooltipConf.classPrefix);\n\n setStyles(this._tooltipArrow, INITIAL_STYLE);\n setStyles(this._tooltipBackground, INITIAL_STYLE);\n this.addClass(qualifiedClassName.join(' '));\n this.addClass(tooltipConf.className);\n this.hide();\n }\n\n /**\n * Sets the configuration of tooltip.\n * @param {Object} config Configuration of tooltip\n * @return {Tooltip} Instance of tooltip\n */\n config (...config) {\n if (config.length > 0) {\n const defConf = mergeRecursive({}, this.constructor.defaultConfig());\n this._config = mergeRecursive(defConf, config[0]);\n return this;\n }\n return this._config;\n }\n\n /**\n * Returns the default configuration of tooltip\n * @return {Object} Configuration of tooltip.\n */\n static defaultConfig () {\n return defaultConfig;\n }\n /**\n * Sets the class name of tooltip\n * @param {string} className tooltip class name\n * @return {Tooltip} Instance of tooltip.\n */\n addClass (className) {\n this._tooltipContainer.classed(className, true);\n return this;\n }\n\n context (...ctx) {\n if (ctx.length) {\n this._context = ctx[0];\n return this;\n }\n return this._context;\n }\n\n content (name, data, contentConfig = {}) {\n const config = this.config();\n const { classPrefix } = config;\n const contentClass = config.content.className;\n const formatter = config.formatter;\n const className = contentConfig.className || `${classPrefix}-${contentClass}-${name}`;\n const content = this._contents[name] = this._contents[name] || new Content();\n const container = makeElement(this._contentContainer, 'div', [contentConfig.order], className);\n container.attr('class', `${classPrefix}-${contentClass} ${className}`);\n reorderContainers(this._contentContainer, `.${classPrefix}-${contentClass}`);\n const contentConf = config.content;\n contentConfig.classPrefix = this._config.classPrefix;\n content.config(contentConf);\n\n if (data === null) {\n content.clear();\n container.remove();\n delete this._contents[name];\n } else {\n content.update({\n model: data,\n formatter: contentConfig.formatter || formatter\n });\n content.context(this._context);\n content.render(container);\n }\n\n if (!Object.keys(this._contents).length) {\n this.hide();\n }\n return this;\n }\n\n getContents () {\n return Object.values(this._contents);\n }\n\n /**\n * Positions the tooltip at the given x and y position.\n * @param {number} x x position\n * @param {number} y y position\n * @return {Tooltip} Instance of tooltip.\n */\n position (x, y, conf = {}) {\n if (!Object.keys(this._contents).length) {\n this.hide();\n return this;\n }\n this.show();\n const target = this._target;\n const repositionArrow = conf.repositionArrow;\n\n if (target && repositionArrow) {\n const node = this._tooltipContainer.node();\n const config = this._config;\n const arrowDisabled = config.arrow.disabled;\n const arrowWidth = arrowDisabled ? 0 : config.arrow.size;\n const arrowOrient = this._arrowOrientation;\n const outsidePlot = arrowOrient === ARROW_LEFT || arrowOrient === ARROW_RIGHT ?\n (y + node.offsetHeight - arrowWidth) < target.y || y > (target.y + target.height) :\n (x + node.offsetWidth - arrowWidth) < target.x || x > (target.x + target.width);\n\n if (!arrowDisabled) {\n if (outsidePlot) {\n let path;\n this._tooltipArrow.style('display', 'none');\n this._tooltipBackground.style('display', 'none');\n this._tooltipConnectorContainer.style('display', 'block');\n const connector = this._tooltipConnectorContainer.selectAll('path').data([1]);\n const enter = connector.enter().append('path');\n if (arrowOrient === ARROW_LEFT) {\n path = `M ${x} ${y + node.offsetHeight / 2} L ${target.x + target.width}`\n + ` ${target.y + target.height / 2}`;\n } else if (arrowOrient === ARROW_RIGHT) {\n path = `M ${x + node.offsetWidth} ${y + node.offsetHeight / 2}`\n + ` L ${target.x} ${target.y + target.height / 2}`;\n } else if (arrowOrient === ARROW_BOTTOM) {\n path = `M ${x + node.offsetWidth / 2} ${y + node.offsetHeight}`\n + ` L ${target.x + target.width / 2} ${target.y}`;\n }\n enter.merge(connector).attr('d', path).style('display', 'block');\n } else {\n const arrowPos = getArrowPos(arrowOrient, target, {\n x,\n y,\n boxHeight: node.offsetHeight,\n boxWidth: node.offsetWidth\n }, this._config);\n\n placeArrow(this, this._arrowOrientation, arrowPos);\n this._tooltipConnectorContainer.style('display', 'none');\n }\n }\n }\n\n const offset = this._offset || {\n x: 0,\n y: 0\n };\n this._tooltipContainer.style('left', `${offset.x + x}px`).style('top',\n `${offset.y + y}px`);\n\n return this;\n }\n\n /**\n * Positions the tooltip relative to a rectangular box. It takes care of tooltip overflowing the\n * boundaries.\n * @param {Object} dim Dimensions of the plot.\n */\n positionRelativeTo (dim, tooltipConf = {}) {\n let obj;\n let orientation = tooltipConf.orientation;\n this.show();\n if (!dim) {\n this.hide();\n return this;\n }\n\n const extent = this._extent;\n const node = this._tooltipContainer.node();\n\n this._tooltipContainer.style('top', '0px')\n .style('left', '0px');\n const offsetWidth = node.offsetWidth + 2;\n const offsetHeight = node.offsetHeight + 2;\n const config = this._config;\n const offset = this._offset;\n const arrowDisabled = config.arrow.disabled;\n const arrowSize = arrowDisabled ? 0 : config.arrow.size;\n const draw = tooltipConf.draw !== undefined ? tooltipConf.draw : true;\n const topSpace = dim.y;\n // When there is no space in right\n const dimX = dim.x + dim.width + offset.x;\n const rightSpace = extent.width - dimX;\n const leftSpace = dim.x + offset.x - extent.x;\n const positionTop = topSpace > (offsetHeight + arrowSize);\n const positionRight = rightSpace >= offsetWidth + arrowSize;\n const positionLeft = leftSpace >= offsetWidth + arrowSize;\n\n const positionHorizontal = () => {\n let position;\n let x = dim.x + dim.width;\n let y = dim.y;\n\n if (positionRight) {\n position = TOOLTIP_LEFT;\n x += arrowSize;\n } else if (positionLeft) {\n x = dim.x - offsetWidth;\n position = TOOLTIP_RIGHT;\n x -= arrowSize;\n } else {\n position = 'left';\n x += arrowSize;\n }\n if (dim.height < offsetHeight) {\n y = Math.max(0, dim.y + dim.height / 2 - offsetHeight / 2);\n }\n\n const arrowPos = getArrowPos(position, dim, {\n x,\n y,\n boxHeight: offsetHeight,\n boxWidth: offsetWidth\n }, this._config);\n\n return {\n position,\n arrowPos,\n x,\n y\n };\n };\n\n const positionVertical = () => {\n let position;\n let y;\n // Position tooltip at the center of plot\n let x = dim.x - offsetWidth / 2 + dim.width / 2;\n\n // Overflows to the right\n if ((extent.width - (dim.x + offset.x)) < offsetWidth) {\n x = extent.width - offsetWidth - offset.x;\n } else if ((x + offset.x) < extent.x) { // Overflows to the left\n x = extent.x;\n }\n\n if (positionTop) {\n y = dim.y - offsetHeight - arrowSize;\n position = TOOLTIP_BOTTOM;\n } else {\n y = dim.y + dim.height + arrowSize;\n position = TOOLTIP_TOP;\n }\n\n const arrowPos = getArrowPos(position, dim, {\n x,\n y,\n boxHeight: offsetHeight,\n boxWidth: offsetWidth\n }, this._config);\n\n return {\n position,\n arrowPos,\n x,\n y\n };\n };\n\n this._target = dim;\n if (!orientation) {\n if (positionTop) {\n orientation = 'vertical';\n } else if (positionRight || positionLeft) {\n orientation = 'horizontal';\n } else {\n orientation = 'vertical';\n }\n }\n\n if (orientation === 'horizontal') {\n obj = positionHorizontal();\n } else if (orientation === 'vertical') {\n obj = positionVertical();\n }\n\n this._position = {\n x: obj.x,\n y: obj.y\n };\n\n this._arrowPos = obj.arrowPos;\n if (!arrowDisabled) {\n placeArrow(this, obj.position, obj.arrowPos);\n } else {\n this._tooltipArrow.style('display', 'none');\n this._tooltipBackground.style('display', 'none');\n }\n this._arrowOrientation = obj.position;\n draw && this.position(obj.x, obj.y);\n return this;\n }\n\n /**\n * Hides the tooltip element.\n * @return {Tooltip} Instance of tooltip.\n */\n hide () {\n this._tooltipContainer.style('display', 'none');\n this._tooltipConnectorContainer.style('display', 'none');\n return this;\n }\n\n /**\n * Shows the tooltip element.\n * @return {Tooltip} Instance of tooltip.\n */\n show () {\n this._tooltipContainer.style('display', 'block');\n return this;\n }\n\n extent (extent) {\n this._extent = extent;\n return this;\n }\n\n offset (offset) {\n this._offset = offset;\n return this;\n }\n\n remove () {\n this._tooltipContainer.remove();\n this._tooltipBackground.remove();\n this._tooltipConnectorContainer.remove();\n return this;\n }\n}\n","import { FieldType } from 'muze-utils';\n\nexport const strategies = {\n showSelectedItems: (dm) => {\n const dataObj = dm.getData();\n const measures = dataObj.schema.filter(d => d.type === FieldType.MEASURE);\n const aggregatedModel = dm.groupBy([''], measures.reduce((acc, v) => {\n acc[v.name] = v.defAggFn === 'count' ? 'sum' : v.defAggFn;\n return acc;\n }, {}));\n const fieldsObj = dm.getFieldspace().fieldsObj();\n const fieldsConf = aggregatedModel.getFieldsConfig();\n let values = [{\n value: `${dataObj.data.length}`,\n style: {\n 'font-weight': 'bold'\n }\n }, 'Items Selected'];\n const measureNames = measures.map(d => d.name);\n if (measureNames.length) {\n values = [...values, ...[`(${fieldsObj[measureNames[0]].defAggFn().toUpperCase()}) ${measureNames[0]}`,\n {\n value: `${aggregatedModel.getData().data[0][fieldsConf[measureNames[0]].index].toFixed(2)}`,\n style: {\n 'font-weight': 'bold'\n }\n }]];\n }\n return [values];\n }\n};\n","import { Tooltip as TooltipRenderer } from '@chartshq/muze-tooltip';\nimport { FieldType } from 'muze-utils';\nimport { spaceOutBoxes } from '../helper';\nimport { strategies } from './strategies';\nimport { FRAGMENTED } from '../../enums/constants';\nimport SpawnableSideEffect from '../spawnable';\n\nimport './styles.scss';\n\nexport default class Tooltip extends SpawnableSideEffect {\n constructor (...params) {\n super(...params);\n this._tooltips = {};\n this._strategies = strategies;\n this._strategy = 'default';\n }\n\n static defaultConfig () {\n return {\n padding: 5,\n offset: {\n x: 0,\n y: 0\n }\n };\n }\n\n static formalName () {\n return 'tooltip';\n }\n\n apply (selectionSet, payload, options = {}) {\n let totalHeight = 0;\n let totalWidth = 0;\n const dataModel = selectionSet.mergedEnter.model;\n const context = this.firebolt.context;\n const drawingInf = this.drawingContext();\n if ((dataModel.isEmpty() || payload.criteria === null) || selectionSet.isSourceFieldPresent === false) {\n this.hide(options, null);\n return this;\n }\n\n const tooltips = this._tooltips;\n const config = this.config();\n const boundBox = {\n width: drawingInf.width,\n height: drawingInf.height\n };\n const showInPosition = payload.showInPosition;\n const pad = config.padding;\n const dataModels = [];\n const fragmented = config.mode === FRAGMENTED;\n const sourceInf = context.getSourceInfo();\n const fields = sourceInf.fields;\n const xFieldDim = fields.x[0] ? fields.x[0].type() === FieldType.DIMENSION : false;\n const showVertically = !!xFieldDim;\n const tooltipPos = payload.position;\n const boxes = [];\n const enter = {};\n const uids = dataModel.getData().uids;\n if (fragmented) {\n dataModels.push(...uids.map(d => dataModel.select((fieldsArr, i) => i === d, {\n saveChild: false\n })));\n } else {\n dataModels.push(dataModel);\n }\n\n let target = payload.target;\n let targetFields = [];\n if (target) {\n targetFields = target[0] || [];\n const sourceFields = payload.sourceFields;\n const indices = [];\n for (let i = 0, len = targetFields.length; i < len; i++) {\n if (sourceFields.indexOf(targetFields[i]) !== -1) {\n indices.push(i);\n }\n }\n target = target.map(d => d.filter((v, i) => indices.indexOf(i) !== -1));\n }\n\n const plotDimensions = context.getPlotPointsFromIdentifiers(target || payload.criteria, {\n getBBox: true\n });\n\n // Show tooltip for each datamodel\n for (let i = 0; i < dataModels.length; i++) {\n let plotDim = plotDimensions[i];\n if (fragmented) {\n const dimensions = dataModels[i].getData().schema.filter(d => d.type === FieldType.DIMENSION)\n .map(d => d.name);\n plotDim = context.getPlotPointsFromIdentifiers(dataModels[i].project(dimensions), { getBBox: true });\n plotDim = plotDim && plotDim[0];\n }\n\n let dt = dataModels[i];\n if (config.fields) {\n dt = dt.project(config.fields, {\n saveChild: false\n });\n }\n if (config.dataTransform) {\n dt = config.dataTransform(dt, i);\n }\n\n enter[i] = true;\n const layoutContainer = drawingInf.parentContainer;\n const layoutBoundBox = layoutContainer.getBoundingClientRect();\n const unitBoundBox = drawingInf.htmlContainer.getBoundingClientRect();\n\n const offsetLeft = unitBoundBox.left - layoutBoundBox.left;\n const offsetTop = unitBoundBox.top - layoutBoundBox.top;\n const tooltipInst = tooltips[i] = tooltips[i] || new TooltipRenderer(layoutContainer,\n drawingInf.svgContainer);\n\n sourceInf.payload = payload;\n sourceInf.firebolt = this.firebolt;\n sourceInf.detailFields = context.detailFields();\n sourceInf.timeDiffs = context.timeDiffsByField();\n tooltipInst.context(sourceInf);\n const strategy = strategies[options.strategy];\n tooltipInst.content(options.strategy || this._strategy, dt, {\n formatter: strategy,\n order: options.order\n })\n .config(this.config())\n .extent({\n x: 0,\n y: 0,\n width: layoutBoundBox.width,\n height: layoutBoundBox.height\n })\n .offset({\n x: offsetLeft + (config.offset.x || 0),\n y: offsetTop + (config.offset.y || 0)\n });\n\n if (showInPosition) {\n tooltipInst.position(tooltipPos.x + pad, tooltipPos.y + pad);\n } else if (plotDim) {\n tooltipInst.positionRelativeTo({\n x: plotDim.x,\n y: plotDim.y,\n width: plotDim.width || 0,\n height: plotDim.height || 0\n }, {\n orientation: fragmented ?\n (showVertically ? 'horizontal' : 'vertical') : undefined\n });\n } else {\n tooltipInst.hide();\n break;\n }\n\n if (fragmented) {\n const position = tooltipInst._position;\n const tooltipBoundBox = tooltipInst._tooltipContainer.node().getBoundingClientRect();\n\n totalHeight += tooltipBoundBox.height + pad;\n totalWidth += tooltipBoundBox.width + pad;\n if (showVertically ? totalHeight > drawingInf.height : totalWidth > drawingInf.width) {\n break;\n }\n boxes.push({\n x: position.x,\n y: position.y,\n width: tooltipBoundBox.width,\n height: tooltipBoundBox.height,\n tooltip: tooltipInst\n });\n }\n }\n\n for (const key in tooltips) {\n if (!enter[key]) {\n const tooltip = tooltips[key];\n tooltip.content(payload.action, null);\n if (!tooltip.getContents().length) {\n tooltip.remove();\n delete tooltips[key];\n }\n }\n }\n if (fragmented) {\n spaceOutBoxes(boxes, boundBox, showVertically);\n boxes.forEach(box => box.tooltip.position(box.x, box.y, {\n repositionArrow: true\n }));\n }\n return this;\n }\n\n hide (options) {\n const tooltips = this._tooltips;\n for (const key in tooltips) {\n if ({}.hasOwnProperty.call(tooltips, key)) {\n const strategy = options.strategy || this._strategy;\n tooltips[key].content(strategy, null);\n tooltips[key].hide();\n }\n }\n }\n}\n","export const spaceOutBoxes = (boxes, extent, showVertically) => {\n let y;\n let height;\n let x;\n let width;\n let i;\n const pad = 5;\n const len = boxes.length;\n const spaceOutIfOverlap = (firstBox, secondBox, opposite) => {\n x = firstBox.x;\n width = firstBox.width;\n y = firstBox.y;\n height = firstBox.height;\n const bottom = y + height;\n const right = x + width;\n\n if (showVertically) {\n if (opposite ? y < (secondBox.y + secondBox.height) : bottom > secondBox.y) {\n secondBox.y = opposite ? firstBox.y - secondBox.height - pad :\n bottom + pad;\n }\n } else if (opposite ? x < (secondBox.x + secondBox.width) : right > secondBox.x) {\n secondBox.x = opposite ? firstBox.x - secondBox.width - pad :\n right + pad;\n }\n };\n\n boxes.sort((a, b) => (showVertically ? a.y - b.y : a.x - b.x));\n i = 0;\n\n for (i = 0; i < len - 1; i++) {\n spaceOutIfOverlap(boxes[i], boxes[i + 1]);\n }\n\n if ((boxes[i].y + boxes[i].height) > extent.height ||\n (boxes[i].x + boxes[i].width) > extent.width) {\n if (showVertically) {\n boxes[i].y -= (boxes[i].height + boxes[i].y) - extent.height;\n } else {\n boxes[i].x -= (boxes[i].width + boxes[i].x) - extent.width;\n }\n for (i = len - 1; i > 0; i--) {\n spaceOutIfOverlap(boxes[i], boxes[i - 1], true);\n }\n }\n return boxes;\n}\n;\n","import { selectElement, FieldType } from 'muze-utils';\n\nimport './styles.scss';\nimport { CLASSPREFIX } from '../../enums/constants';\nimport SpawnableSideEffect from '../spawnable';\n\nexport default class Crossline extends SpawnableSideEffect {\n static defaultConfig () {\n return {\n className: `${CLASSPREFIX}-crossline-group`,\n bandClass: `${CLASSPREFIX}-crossband`,\n lineClass: `${CLASSPREFIX}-crossline`\n };\n }\n\n static formalName () {\n return 'crossline';\n }\n\n apply (selectionSet, payload) {\n let height;\n let bandWidth;\n let px;\n let width;\n const {\n className,\n bandClass,\n lineClass\n } = this.config();\n const dataModel = selectionSet.mergedEnter.model;\n const drawingInf = this.drawingContext();\n if (payload.criteria && dataModel && dataModel.isEmpty()) {\n return this;\n }\n if (payload.criteria === null || !dataModel) {\n this.hide();\n return this;\n }\n\n const dataObj = dataModel.getData();\n const sourceInf = this.firebolt.context.getSourceInfo();\n const axes = sourceInf.axes;\n const axisFields = sourceInf.fields;\n const fields = selectionSet.fields;\n const data = dataObj.data;\n const fieldsConfig = dataModel.getFieldsConfig();\n const svgContainer = drawingInf.sideEffectGroup;\n\n const elemData = [];\n fields.forEach((field) => {\n const fieldIndex = fieldsConfig[field] && fieldsConfig[field].index;\n const dataArr = data.map(d => d[fieldIndex]);\n const axisIndex = [['x', 0], ['x', 1], ['y', 0], ['y', 1]].find((arr) => {\n const fieldInst = axisFields[arr[0]][arr[1]];\n return fieldInst && fieldInst.type() === FieldType.DIMENSION &&\n fieldInst.getMembers().indexOf(field) !== -1;\n });\n if (axisIndex !== undefined && data.length) {\n const type = axisIndex[0];\n const axis = axes[type][axisIndex[1]];\n const value = dataArr[0];\n bandWidth = axis.getUnitWidth() || 0;\n px = axis.getScaleValue(value) + bandWidth / 2 + drawingInf.xOffset;\n const plotWidth = Math.max(...this.firebolt.context.layers().map(layer => layer.getPlotSpan()[type]));\n const pad = Math.max(...this.firebolt.context.layers().map(layer => layer.getPlotPadding()[type]));\n height = drawingInf.height;\n width = drawingInf.width;\n const startPx = px - plotWidth / 2 - pad / 2;\n const endPx = px + plotWidth / 2 + pad / 2;\n const dataPoint = {};\n if (type === 'y') {\n dataPoint.d = `M 0 ${startPx} L 0 ${endPx} L ${width} ${endPx} L ${width} ${startPx} Z`;\n } else {\n dataPoint.d = `M ${startPx} 0 L ${endPx} 0 L ${endPx} ${height} L ${startPx} ${height} Z`;\n }\n dataPoint.className = plotWidth ? bandClass : lineClass;\n elemData.push(dataPoint);\n }\n });\n if (elemData.length) {\n const parentGroup = this.createElement(svgContainer, 'g', [1], className);\n const elem = this.createElement(parentGroup, 'path', elemData);\n elem.attr('d', d => d.d).style('pointer-events', 'none')\n .attr('class', d => d.className);\n }\n return this;\n }\n\n hide () {\n const className = this.config().className;\n const drawingInf = this.drawingContext();\n selectElement(drawingInf.sideEffectGroup).selectAll(`.${className}`).remove();\n }\n}\n","const fadeFn = (set, context, strategy) => {\n const {\n mergedEnter,\n mergedExit,\n exitSet,\n completeSet\n } = set;\n\n if (!mergedEnter.length && !mergedExit.length) {\n context.applyInteractionStyle(completeSet, {}, strategy, false);\n } else {\n context.applyInteractionStyle(exitSet[1], {}, strategy, true);\n context.applyInteractionStyle(mergedEnter, {}, strategy, false);\n }\n};\n\nexport const strategies = {\n fade: fadeFn,\n focus: (set, context) => {\n const {\n mergedEnter,\n mergedExit,\n completeSet\n } = set;\n if (!mergedEnter.length && !mergedExit.length) {\n context.applyInteractionStyle(completeSet, {}, 'focus', false);\n } else {\n context.applyInteractionStyle(mergedExit, {}, 'focus', true);\n context.applyInteractionStyle(mergedEnter, {}, 'focus', false);\n }\n },\n highlight: (set, context) => {\n const {\n mergedEnter,\n mergedExit,\n entrySet,\n exitSet,\n completeSet\n } = set;\n if (!mergedEnter.length && !mergedExit.length) {\n context.applyInteractionStyle(completeSet, {}, 'highlight', false);\n } else {\n context.applyInteractionStyle(entrySet[1], {}, 'highlight', true);\n context.applyInteractionStyle(exitSet[1], {}, 'highlight', false);\n }\n }\n};\n","import SurrogateSideEffect from '../surrogate';\nimport { strategies } from './strategy';\n\nexport default class PlotHighlighter extends SurrogateSideEffect {\n constructor (...params) {\n super(...params);\n this._strategy = 'highlight';\n this._strategies = strategies;\n }\n\n static formalName () {\n return 'highlighter';\n }\n\n static target () {\n return 'visual-unit';\n }\n\n apply (selectionSet, payload, options = {}) {\n const strategy = this._strategies[options.strategy || this._strategy];\n\n if (selectionSet.isSourceFieldPresent !== false) {\n strategy(selectionSet, this, options.strategy || this._strategy);\n }\n\n return this;\n }\n}\n","import SurrogateSideEffect from '../surrogate';\n\nexport default class FilterEffect extends SurrogateSideEffect {\n static formalName () {\n return 'filter';\n }\n\n static target () {\n return 'visual-unit';\n }\n\n static mutates () {\n return true;\n }\n\n apply (selectionSet, payload) {\n const context = this.firebolt.context;\n const entryModel = selectionSet.mergedEnter.model;\n if (payload.criteria === null) {\n context.clearCaching().resetData();\n } else {\n context.enableCaching().data(entryModel);\n }\n return this;\n }\n}\n","import { DataModel } from 'muze-utils';\n\nimport { CLASSPREFIX } from '../../enums/constants';\nimport SpawnableSideEffect from '../spawnable';\n\nimport './styles.scss';\n\nexport default class AnchorEffect extends SpawnableSideEffect {\n constructor (...params) {\n super(...params);\n const context = this.firebolt.context;\n this._layers = this.addAnchorLayers(context);\n }\n\n static target () {\n return 'visual-unit';\n }\n\n static defaultConfig () {\n return {\n className: `${CLASSPREFIX}-anchors-group`\n };\n }\n\n static formalName () {\n return 'anchors';\n }\n\n addAnchorLayers (context) {\n const layers = [];\n this.firebolt.context.layers().forEach((layer, idx) => {\n const shouldDrawAnchors = layer.shouldDrawAnchors();\n if (shouldDrawAnchors) {\n const encodingFieldsInf = layer.encodingFieldsInf();\n const layerObj = {\n instances: context.addLayer({\n name: `${layer.alias()}-${this.constructor.formalName()}-${idx}`,\n mark: 'point',\n encoding: {\n x: encodingFieldsInf.xField,\n y: encodingFieldsInf.yField,\n color: {\n field: encodingFieldsInf.colorField\n },\n size: {\n field: encodingFieldsInf.sizeField,\n value: this.defaultSizeValue()\n }\n },\n transform: {\n type: 'identity'\n },\n transition: this.getTransitionConfig(),\n calculateDomain: false,\n source: dt => dt.select(() => false, {\n saveChild: false\n }),\n interactive: false,\n render: false\n }),\n linkedLayer: layer\n };\n\n layers.push(layerObj);\n }\n });\n return layers;\n }\n\n getTransitionConfig () {\n return {\n disabled: true\n };\n }\n\n /**\n * Returns the default area value of the anchor point.\n * @return { number } Default area value of anchor.\n */\n defaultSizeValue () {\n return 100;\n }\n\n apply (selectionSet) {\n const self = this;\n const dataModel = selectionSet.mergedEnter.model;\n if (selectionSet.isSourceFieldPresent !== false) {\n const drawingInf = this.drawingContext();\n const sideEffectGroup = drawingInf.sideEffectGroup;\n const className = `${this.config().className}`;\n const layers = this._layers;\n const parentGroup = this.createElement(sideEffectGroup, 'g', [1], `${className}-container`);\n const anchorGroups = this.createElement(parentGroup, 'g', layers);\n anchorGroups.each(function (layer) {\n const instances = layer.instances;\n const elems = self.createElement(this, 'g', instances, className);\n const linkedLayer = layer.linkedLayer;\n const [transformedData, schema] = linkedLayer.getTransformedDataFromIdentifiers(dataModel);\n const transformedDataModel = new DataModel(transformedData, schema);\n elems.each(function (d, i) {\n instances[i].data(transformedDataModel).mount(this);\n });\n });\n }\n return this;\n }\n}\n","import AnchorEffect from './anchors';\nimport { CLASSPREFIX } from '../enums/constants';\n\nexport default class PersistentAnchors extends AnchorEffect {\n static formalName () {\n return 'persistent-anchors';\n }\n\n static defaultConfig () {\n return {\n className: `${CLASSPREFIX}-persistent-anchors`\n };\n }\n\n getTransitionConfig () {\n return {\n disabled: true\n };\n }\n}\n","import AnchorEffect from './anchors';\nimport { CLASSPREFIX } from '../enums/constants';\n\nexport default class BrushAnchors extends AnchorEffect {\n static formalName () {\n return 'brush-anchors';\n }\n\n static defaultConfig () {\n return {\n className: `${CLASSPREFIX}-brush-anchors`\n };\n }\n\n getTransitionConfig () {\n return {\n disabled: true\n };\n }\n}\n","import * as BEHAVIOURS from './enums/behaviours';\n\nexport const behaviourEffectMap = {\n [BEHAVIOURS.BRUSH]: ['selectionBox', {\n name: 'highlighter',\n options: {\n strategy: 'fade'\n }\n }, 'brush-anchors'],\n [`${BEHAVIOURS.BRUSH},${BEHAVIOURS.SELECT}`]: [{\n name: 'tooltip',\n options: {\n strategy: 'showSelectedItems',\n order: 0,\n filter: context => context.config().mode === 'fragmented'\n }\n }],\n [BEHAVIOURS.HIGHLIGHT]: [{\n name: 'highlighter',\n options: {\n strategy: 'highlight'\n }\n }, 'crossline', {\n name: 'tooltip',\n options: {\n order: 9999\n }\n }, 'anchors'],\n [BEHAVIOURS.FILTER]: ['filter'],\n [BEHAVIOURS.SELECT]: [{\n name: 'highlighter',\n options: {\n strategy: 'focus'\n }\n }, 'persistent-anchors']\n};\n","export const CLASSPREFIX = 'muze';\nexport const STACK = 'stack';\nexport const GROUP = 'group';\nexport const IDENTITY = 'identity';\nexport const ANGLE = 'angle';\nexport const RADIUS = 'radius';\nexport const SIZE = 'size';\nexport const COLOR = 'color';\nexport const SHAPE = 'shape';\nexport const OUTER_RADIUS_VALUE = 'outerRadiusValue';\nexport const TEXT_ANCHOR_MIDDLE = 'middle';\nexport const ENCODING = {\n X: 'x',\n Y: 'y',\n X0: 'x0',\n Y0: 'y0'\n};\n\nexport const ASCENDING = 'asc';\n\nexport const AREA_LAYER = 'area';\nexport const ARC_LAYER = 'arc';\nexport const LINE_LAYER = 'line';\nexport const TEXT_LAYER = 'text';\nexport const POINT_LAYER = 'point';\nexport const BAR_LAYER = 'bar';\nexport const TICK_LAYER = 'tick';\nexport const SIMPLE_LAYER = 'simple';\nexport const BASE_LAYER = 'base';\n","import { CLASSPREFIX, STACK } from '../../enums/constants';\n\nexport const defaultConfig = {\n classPrefix: CLASSPREFIX,\n defClassName: 'layer-area',\n className: '',\n interpolate: 'linear',\n transform: {\n type: STACK\n },\n interaction: {\n\n },\n nearestPointThreshold: 10,\n encoding: {\n color: {},\n x: {},\n y: {},\n y0: {},\n strokeOpacity: {\n value: 1\n }\n },\n transition: {\n effect: 'cubic',\n duration: 1000\n },\n connectNullData: false\n};\n","import { ERROR_MSG } from 'muze-utils';\n\n/**\n * This is an interface class which any new layer class has to extend.\n *\n * @example\n * class BarLayer extends BaseLayer {\n * update (params) {\n * // super.update(params);\n * // Update the bar layer\n * }\n * }\n * @class\n */\nexport default class SimpleLayer {\n\n formalName () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Sets or gets the dependencies.\n * @param {Object} dependencies Dependencies needed by layer\n * @return {BaseLayer} Instance of base layer.\n */\n dependencies () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Returns the config of the layer\n *\n * @param {Object} config Configuration of layer\n * @return {Object} configuration of layer\n */\n config () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Acts as a getter or setter function\n * When setter\n * Returns the datamodel of the layer\n * @param { DataModel } dataModel instance of DataModel\n * @return { DataModel } DataModel instance of the layer\n */\n data () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Returns a serialized schema of the layer\n * @return {Object} Serialized schema\n */\n serialize () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Returns the unique identifier of this layer\n * @return {string} id of the layer\n */\n id () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n /*\n * This method resolves the x, y, x0 and y0 values from the transformed data.\n * It also checks the type of transformed data for example, if it is a stacked data\n * then it fetches the y and y0 values from the stacked data.\n * @param {Array.} transformedData transformed data\n * @param {Object} fieldMap field definitions\n * @param {string} transformType type of transformed data - stack, group or identity.\n * @return {Array.} Normalized data\n * @private\n */\n normalizeTransformedData () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Gets the transform method from transform factory based on type of transform. It then calls the\n * transform method with the data and passes the configuration parameters of transform such as\n * groupBy, value field, etc.\n *\n * @param {DataModel} dataModel Instance of dataModel\n * @param {Object} config configuration for transforming data\n * @return {Array.} Transformed data.\n * @private\n */\n getTransformedData () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Calculates the domain from the data.\n * It checks the type of field and calculates the domain based on that. For example, if it\n * is a quantitative or temporal field, then it calculates the min and max from the data or\n * if it is a nominal field then it gets all the values from the data of that field.\n * @param {Array} data DataArray\n * @return {Array} Domain values array.\n */\n _calculateDomainFromData () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Returns the domain for the axis.\n *\n * @param {string} encodingType type of encoding x, y, color, etc.\n * @return {Object} Axis domains\n */\n getDomain () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Abstract method for getting nearest point\n * @return {BaseLayer} Instance of base layer\n */\n getNearestPoint () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Abstract method for highlighting points\n * @return {BaseLayer} Instance of base layer\n */\n highlightPoint () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Abstract method for deselecting points\n * @return {BaseLayer} Instance of base layer\n */\n dehighlightPoint () {\n return this;\n }\n\n linkLayerStore () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Sets the container element for the layer to be renderered.\n * @param {SVGElement} mountPoint SVG element or group element.\n */\n mount () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n render () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n}\n","export const DATA = 'data';\nexport const CONFIG = 'config';\nexport const MEASUREMENT = 'measurement';\nexport const AXES = 'axes';\nexport const NORMALIZED_DATA = 'normalizedData';\nexport const TRANSFORMED_DATA = 'transformedData';\nexport const DOMAIN = 'domain';\nexport const MOUNT = 'mount';\nexport const FIELDMAP = 'fieldMap';\nexport const DATA_UPDATED = 'dataUpdated';\n","/**\n * @module Axis\n * This file declares a class that is used to render an axis to add meaning to\n * plots.\n */\nimport { Symbols } from 'muze-utils';\nimport * as AxisOrientation from '../enums/axis-orientation';\n\n/**\n * @module Axis\n * This file exports constants that are used to reference axis orientations\n * in a consistent manner.\n */\nexport const BOTTOM = 'bottom';\nexport const TOP = 'top';\nexport const LEFT = 'left';\nexport const RIGHT = 'right';\n\n/**\n * This object is used to associate the axis orientation with the d3 class\n * used to represent that axis.\n */\nexport const axisOrientationMap = {\n [AxisOrientation.LEFT]: Symbols.axisLeft,\n [AxisOrientation.BOTTOM]: Symbols.axisBottom,\n [AxisOrientation.RIGHT]: Symbols.axisRight,\n [AxisOrientation.TOP]: Symbols.axisTop\n};\n","/**\n * @module axis\n * This file exports constants used to reference scale type\n * consistently throughout the project.\n */\nexport const LINEAR = 'linear';\nexport const BAND = 'band';\nexport const TIME = 'temporal';\nexport const COLOR = 'color';\nexport const ORDINAL = 'ordinal';\nexport const QUANTIZE = 'quantize';\nexport const QUANTILE = 'quantile';\nexport const LOG = 'log';\nexport const POW = 'pow';\nexport const IDENTITY = 'identity';\nexport const SEQUENTIAL = 'sequential';\nexport const THRESHOLD = 'threshold';\n","export const CLASSPREFIX = 'muze';\n\nexport const CONTINOUS = 'continous';\nexport const DISCRETE = 'discrete';\nexport const SEQUENTIAL = 'sequential';\nexport const ORDINAL = 'ordinal';\nexport const LINEAR = 'linear';\nexport const THRESHOLD = 'threshold';\nexport const QUANTIZE = 'quantize';\nexport const QUANTILE = 'quantile';\n\nexport const COLOR = 'color';\nexport const SHAPE = 'shape';\nexport const SIZE = 'size';\n\nexport const DOMAIN = 'domain';\nexport const BAND = 'band';\nexport const HIDDEN = 'hidden';\nexport const NUMBER = 'number';\nexport const BOTTOM = 'bottom';\nexport const TOP = 'top';\n\nexport const RGB = 'rgb';\nexport const HEX = 'hex';\nexport const HSLA = 'hsla';\nexport const HSL = 'hsl';\n\n","import { scales, colorSchemes } from 'muze-utils';\n\nimport {\n SEQUENTIAL,\n ORDINAL,\n LINEAR,\n CONTINOUS,\n THRESHOLD,\n QUANTIZE\n} from './enums/constants';\n\nimport * as ScaleType from './enums/scale-type';\n\nconst {\n scaleLinear,\n scaleThreshold,\n scaleLog,\n scalePow,\n scaleIdentity,\n scaleOrdinal,\n scaleSequential,\n scaleQuantize,\n scaleQuantile,\n schemeCategory10,\n schemeCategory20,\n schemeCategory20b,\n scaleBand,\n scaleTime\n} = scales;\nexport const scaleMap = {\n [ScaleType.LINEAR]: scaleLinear,\n [ScaleType.BAND]: scaleBand,\n [ScaleType.QUANTIZE]: scaleQuantize,\n [ScaleType.QUANTILE]: scaleQuantile,\n [ScaleType.THRESHOLD]: scaleThreshold,\n [ScaleType.SEQUENTIAL]: scaleSequential,\n [ScaleType.LOG]: scaleLog,\n [ScaleType.POW]: scalePow,\n [ScaleType.IDENTITY]: scaleIdentity,\n [ScaleType.TIME]: scaleTime,\n [ScaleType.COLOR]: scaleLinear,\n [ScaleType.ORDINAL]: scaleOrdinal\n};\nexport const SCHEMES = {\n SCHEME1: schemeCategory10,\n SCHEME2: schemeCategory20,\n SCHEME3: schemeCategory20b\n};\n\n/**\n * Accepts a scheme in a string format and returns the scale from d3-scale-chromatic\n *\n * @export\n * @param {string} scheme a string representing the kind of scheme for the color axis\n * @return {Object} The corresponding scale from a scheme type from d3 chromatic scale\n */\nexport function getScheme (scheme) {\n if (scheme[0] === 'i') {\n return scaleSequential(colorSchemes[scheme]);\n }\n return scaleOrdinal(colorSchemes[scheme]);\n}\n\n/**\n *\n *\n * @export\n * @param {*} scheme\n * @returns\n */\nexport function getSchemeType (scheme) {\n let schemeType = '';\n if (scheme && typeof (scheme) === 'string') {\n schemeType = scheme[0] === 'i' ? SEQUENTIAL : ORDINAL;\n } else {\n schemeType = ORDINAL;\n }\n return schemeType;\n}\n\n/**\n * This function is used to create a scale that is assigned to\n * an instance of axis.\n *\n * @export\n * @param {Object} params the input parameters to create a Scale object\n * @param {string} params.type the type of scale\n * @param {Array} params.range the range of scale\n * @return {Object} instance of scale\n */\nexport function createScale (params) {\n if (!params.type || !scaleMap[params.type]) {\n throw new Error(`${params.type} is not a valid scale type`);\n }\n if (!Array.isArray(params.range)) {\n throw new Error('range parameter must be an array');\n }\n let scaleFactory = null;\n const range = params.range;\n // @todo: do it using scale decorator\n if (params.type === LINEAR && params.interpolator) {\n scaleFactory = scaleMap[params.interpolator];\n if (params.interpolator === ScaleType.POW) {\n return scaleFactory().range(range).exponent(params.exponent);\n } else if (params.interpolator === ScaleType.LOG) {\n return scaleFactory().range(range).base([params.base]);\n }\n } else {\n scaleFactory = scaleMap[params.type];\n }\n\n if (params.type === QUANTIZE) {\n scaleFactory().nice();\n }\n return scaleFactory().range(range);\n}\n\n/**\n * This method is used to update the range of a scale\n * so that the core module can remain agnostic of the d3\n * scale api.\n *\n * @export\n * @param {Scale} scale Instance of d3 Scale.\n * @param {Array} range new range of the scale.\n * @return {Scale} Updated scale.\n */\nexport function updateScaleRange (scale, range) {\n return scale.range(range);\n}\n\n/**\n *\n *\n * @export\n * @param {*} domainType\n * @param {*} rangeType\n * @param {*} steps\n * @returns\n */\nexport function getScaleType (domainType, rangeType, steps) {\n if (rangeType === CONTINOUS) {\n return LINEAR;\n }\n if (domainType === CONTINOUS) {\n if (steps instanceof Array) {\n return THRESHOLD;\n }\n return QUANTIZE;\n }\n return ORDINAL;\n}\n","import { getUniqueId } from 'muze-utils';\nimport { CLASSPREFIX } from '../enums/constants';\n\n/**\n *\n *\n */\nexport const defaultConfig = {\n id: getUniqueId(),\n axisName: {\n defClassName: 'axis-name'\n },\n axisNamePadding: 12,\n base: 10,\n classPrefix: CLASSPREFIX,\n className: `${CLASSPREFIX}-axis`,\n exponent: 1,\n interpolator: 'linear',\n fixedBaseline: true,\n labels: {\n rotation: 0,\n smartTicks: false\n },\n orientation: 'left',\n maxHeight: 50, // @todo: height and width wont be hardcoded\n maxWidth: 40,\n numberFormat: val => val,\n padding: 0.3,\n nice: true,\n numberOfTicks: 10,\n rotate: false,\n show: true,\n showAxisName: true,\n showInnerTicks: null,\n showOuterTicks: null,\n style: {},\n type: 'linear',\n tickFormat: null,\n tickValues: null,\n xOffset: undefined,\n yOffset: undefined\n};\n\n","/**\n * This file exports functionality that is used to render axis.\n */\nimport { selectElement, makeElement, angleToRadian } from 'muze-utils';\nimport * as AxisOrientation from './enums/axis-orientation';\nimport { LINEAR, HIDDEN, BOTTOM, TOP } from './enums/constants';\n\n/**\n *\n *\n * @param {*} instance\n * @param {*} container\n * @param {*} labelManager\n * @param {*} config\n */\nconst rotateAxis = (instance, tickText, labelManager, config) => {\n const axis = instance.axis();\n const scale = instance.scale();\n const {\n orientation,\n labels,\n fixedBaseline,\n type\n } = config;\n let { rotation } = labels;\n\n const tickSize = instance.getTickSize();\n\n tickText.each(function (datum, index) {\n let yShift;\n let xShift;\n const tickFormatter = axis.tickFormat() ? axis.tickFormat : scale.tickFormat;\n const temp = tickFormatter ? tickFormatter()(datum) : datum;\n\n datum = temp.toString();\n\n const tickLabelDim = labelManager.getOriSize(datum);\n const width = tickLabelDim.width * 0.5;\n const height = tickLabelDim.height * 0.5;\n\n if (rotation < 0) {\n rotation = 360 + rotation;\n }\n\n const quadrant = 4 - Math.floor(rotation / 90);\n const rotationNormalizer = ((quadrant % 2 === 0) ? rotation : 180 * Math.ceil(rotation / 180) - rotation) % 180;\n\n yShift = Math.sqrt(height ** 2 + width ** 2) * Math.sin(angleToRadian(rotationNormalizer));\n\n if ((quadrant === 3 || quadrant === 2) && !(rotationNormalizer > 67.5 && rotationNormalizer <= 90)) {\n yShift += height * 2;\n }\n xShift = width;\n\n if (rotation === 90) {\n xShift = height;\n } else if (rotation === 270) {\n xShift = -height;\n } else {\n xShift = 0;\n }\n\n if (orientation === AxisOrientation.TOP) {\n xShift = (index === 0 && fixedBaseline && type === LINEAR) ? xShift + xShift / 2 : xShift;\n selectElement(this)\n .attr('transform', `translate(${-xShift + tickSize} \n ${-yShift - tickSize}) rotate(${rotation})`);\n } else {\n xShift = (index === 0 && fixedBaseline && type === LINEAR) ? xShift - xShift / 2 : xShift;\n selectElement(this)\n .attr('transform', `translate(${xShift - tickSize} \n ${yShift + tickSize}) rotate(${rotation})`);\n }\n });\n return tickText;\n};\n\n/**\n *\n *\n * @param {*} tickText\n * @param {*} axisInstance\n */\nconst changeTickOrientation = (selectContainer, axisInstance, tickSize) => {\n const {\n _smartTicks\n } = axisInstance;\n const config = axisInstance.config();\n const labelManager = axisInstance.dependencies().labelManager;\n const {\n labels,\n orientation\n } = config;\n const {\n rotation,\n smartTicks: isSmartTicks\n } = labels;\n\n const tickText = selectContainer.selectAll('.tick text');\n tickText.selectAll('tspan').remove();\n\n // rotate labels if not enough space is available\n if (rotation !== 0 && isSmartTicks === false && (orientation === TOP || orientation === BOTTOM)) {\n rotateAxis(axisInstance, tickText, labelManager, config);\n } else if (rotation === 0 && isSmartTicks === false) {\n tickText.attr('transform', '');\n } else {\n tickText.attr('y', 0)\n .attr('x', 0)\n .text('');\n const tspan = makeElement(tickText, 'tspan', (d, i) => _smartTicks[i].lines, 'smart-text');\n tspan.attr('dy', '0')\n .style('opacity', '0')\n .transition()\n .duration(1000)\n .attr('dy', (d, i) => {\n if (orientation === BOTTOM || i !== 0) {\n return _smartTicks[i].oriTextHeight;\n }\n return -_smartTicks[i].oriTextHeight * (_smartTicks[i].lines.length - 1) - tickSize;\n })\n .style('opacity', 1)\n .attr('x', 0)\n .text(e => e);\n }\n\n return tickText;\n};\n\nconst setFixedBaseline = (axisInstance) => {\n const {\n fixedBaseline\n } = axisInstance.config();\n if (fixedBaseline) {\n axisInstance.setFixedBaseline();\n }\n};\n\n/**\n *\n *\n * @param {*} textNode\n * @param {*} orientation\n * @param {*} measures\n */\nconst setAxisNamePos = (textNode, orientation, measures) => {\n const {\n axisNameHeight,\n yOffset,\n labelOffset,\n availableSpace\n } = measures;\n switch (orientation) {\n case AxisOrientation.LEFT:\n textNode.attr('transform',\n `translate(${-(availableSpace.width - axisNameHeight)},${yOffset + labelOffset})rotate(-90)`);\n break;\n case AxisOrientation.RIGHT:\n textNode.attr('transform',\n `translate(${(availableSpace.width - axisNameHeight)},${yOffset + labelOffset})rotate(90)`);\n break;\n case AxisOrientation.TOP:\n textNode.attr('transform',\n `translate(${availableSpace.width / 2},${-availableSpace.height + axisNameHeight})`);\n break;\n case AxisOrientation.BOTTOM:\n textNode.attr('transform',\n `translate(${availableSpace.width / 2},${availableSpace.height - axisNameHeight / 2})`);\n break;\n default:\n }\n return textNode;\n};\n\n/**\n * This method is used to render the axis inside an\n * svg container.\n *\n * @export\n * @param {Object} axisInstance the nput object required to render axis\n * @param {string} axisInstance.orientation the orientation of axis\n * @param {Object} axisInstance.scale instance of d3 scale\n * @param {SVGElement} axisInstance.container the container in which to render\n */\nexport function renderAxis (axisInstance) {\n const config = axisInstance.config();\n const labelManager = axisInstance.dependencies().labelManager;\n const mount = axisInstance.mount();\n const range = axisInstance.range();\n const axis = axisInstance.axis();\n const scale = axisInstance.scale();\n const {\n _axisNameStyle,\n _tickLabelStyle,\n formatter,\n tickValues\n } = axisInstance;\n const {\n orientation,\n name,\n labels,\n xOffset,\n yOffset,\n axisNamePadding,\n className,\n showAxisName,\n show,\n id,\n interpolator,\n classPrefix\n } = config;\n\n if (!show) {\n return;\n }\n\n const tickSize = axisInstance.getTickSize();\n\n const selectContainer = makeElement(selectElement(mount), 'g', [axisInstance], `${className}`, {},\n key => key.config().id);\n\n // Set style for tick labels\n labelManager.setStyle(_tickLabelStyle);\n\n // @to-do: Need to write a configuration override using decorator pattern\n if (interpolator === 'linear') {\n // Set ticks for the axis\n axisInstance.setTickValues();\n }\n\n const labelFunc = scale.ticks || scale.quantile || scale.domain;\n\n formatter && axis.tickFormat(formatter(tickValues || axis.tickValues() || labelFunc()));\n\n // Get range(length of range)\n const availableSpace = Math.abs(range[0] - range[1]);\n\n // Get width and height taken by axis labels\n const labelProps = axisInstance.axisDimensions().tickLabelDim;\n\n // Draw axis ticks\n selectContainer.attr('transform', `translate(${xOffset},${yOffset})`);\n setFixedBaseline(axisInstance);\n if (labels.smartTicks === false) {\n selectContainer.transition()\n .duration(1000).call(axis);\n } else {\n selectContainer.call(axis);\n }\n selectContainer.selectAll('.tick').classed(`${classPrefix}-ticks`, true);\n selectContainer.selectAll('.tick line').classed(`${classPrefix}-tick-lines`, true);\n\n // Set classes for ticks\n const tickText = selectContainer.selectAll('.tick text');\n tickText.classed(`${classPrefix}-ticks`, true)\n .classed(`${classPrefix}-ticks-${id}`, true);\n changeTickOrientation(selectContainer, axisInstance, tickSize);\n\n // Create axis name\n const textNode = makeElement(selectContainer, 'text', [name], `${classPrefix}-axis-name`)\n .attr('text-anchor', 'middle')\n .classed(`${classPrefix}-axis-name-${id}`, true)\n .text(d => d);\n\n // Hide axis name if show is off\n textNode.classed(HIDDEN, !showAxisName);\n\n // render labels based on orientation of axis\n const labelOffset = availableSpace / 2;\n\n // Set style for axis name\n labelManager.setStyle(_axisNameStyle);\n const axisNameSpace = labelManager.getOriSize(name);\n const measures = {\n labelProps,\n tickSize,\n axisNamePadding,\n axisNameHeight: axisNameSpace.height,\n axisNameWidth: axisNameSpace.width,\n yOffset,\n xOffset,\n labelOffset,\n availableSpace: axisInstance.availableSpace()\n };\n // Set position for axis name\n setAxisNamePos(textNode, orientation, measures);\n}\n","import { TOP, LEFT, BOTTOM } from '../enums/axis-orientation';\nimport { LOG } from '../enums/scale-type';\n\nexport const getNumberOfTicks = (availableSpace, labelDim, axis, axisInstance) => {\n const ticks = axis.scale().ticks();\n const { numberOfTicks } = axisInstance.config();\n const tickLength = ticks.length;\n let numberOfValues = tickLength;\n\n if (tickLength * (labelDim * 1.5) > availableSpace) {\n numberOfValues = Math.floor(availableSpace / (labelDim * 1.5));\n }\n\n numberOfValues = Math.min(numberOfTicks, Math.max(1, numberOfValues));\n return axis.scale().ticks(numberOfValues);\n};\n\nexport const sanitizeDomain = (domain, context) => {\n const interpolator = context.config().interpolator;\n // @todo: Get from scale decorator\n if (interpolator === LOG && domain[0] >= 0) {\n return [Math.max(1, domain[0]), Math.max(1, domain[1])];\n }\n return domain;\n};\n\nexport const getTickFormatter = (tickFormat, numberFormat) => {\n if (tickFormat) {\n return ticks => (val, i) => tickFormat(numberFormat(val), i, ticks);\n }\n return () => val => numberFormat(val);\n};\n\n/**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\nexport const getTickLabelInfo = (context) => {\n let largestLabel = '';\n let labelProps;\n let smartTick = {};\n let axisTickLabels;\n const scale = context.scale();\n const allLabelLengths = [];\n const { tickFormat, tickValues, numberFormat } = context.config();\n const labelFunc = scale.ticks || scale.quantile || scale.domain;\n // set the style on the shared label manager instance\n const { labelManager } = context.dependencies();\n\n labelManager.setStyle(context._tickLabelStyle);\n // get the values along the domain\n\n axisTickLabels = tickValues || labelFunc();\n // Get the tick labels\n axisTickLabels = axisTickLabels.map((originalLabel, i) => {\n const formattedLabel = numberFormat(originalLabel);\n\n // get formats of tick if any\n const label = tickFormat ? tickFormat(formattedLabel, i, axisTickLabels) : (scale.tickFormat ?\n numberFormat(scale.tickFormat()(originalLabel)) : formattedLabel);\n\n // convert to string for quant values\n const temp = label.toString();\n // Get spaces for all labels\n allLabelLengths.push(labelManager.getOriSize(temp));\n // Getting largest label\n if (temp.length > largestLabel.length) {\n largestLabel = temp;\n smartTick = context.smartTicks() ? context.smartTicks()[i] : {};\n labelProps = allLabelLengths[i];\n }\n return label;\n });\n\n labelProps = labelManager.getOriSize(largestLabel);\n\n return { largestLabel, largestLabelDim: labelProps, axisTickLabels, allLabelLengths, smartTick };\n};\n\n/**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\nexport const computeAxisDimensions = (context) => {\n let tickLabelDim = {};\n const {\n name,\n labels,\n tickValues\n } = context.config();\n const angle = ((labels.smartTicks) ? 0 : labels.rotation) * Math.PI / 180;\n const { labelManager } = context.dependencies();\n const {\n largestLabelDim,\n axisTickLabels,\n smartTick\n } = getTickLabelInfo(context);\n const { height: labelHeight, width: labelWidth } = largestLabelDim;\n // get the domain of axis\n const domain = context.domain();\n\n if (domain.length === 0) {\n return null;\n }\n if (context._rotationLock === false) {\n context.setRotationConfig(tickValues || axisTickLabels, largestLabelDim.width);\n context._rotationLock = false;\n }\n if (labels.smartTicks) {\n tickLabelDim = smartTick;\n } else {\n tickLabelDim = {\n width: Math.abs(labelHeight * Math.sin(angle)) + Math.abs(labelWidth * Math.cos(angle)),\n height: Math.abs(labelWidth * Math.sin(angle)) + Math.abs(labelHeight * Math.cos(angle))\n };\n }\n\n labelManager.setStyle(context._axisNameStyle);\n return {\n tickSize: context.getTickSize(),\n tickLabelDim,\n axisLabelDim: labelManager.getOriSize(name),\n largestLabelDim,\n axisTickLabels\n };\n};\n\n/**\n*\n*\n* @memberof SimpleAxis\n*/\nexport const setOffset = (context) => {\n let x = 0;\n let y = 0;\n const logicalSpace = context.logicalSpace();\n const config = context.config();\n const {\n orientation,\n xOffset,\n yOffset\n } = config;\n if (orientation === LEFT) {\n x = xOffset === undefined ? logicalSpace.width : xOffset;\n }\n if (orientation === TOP) {\n y = yOffset === undefined ? logicalSpace.height : yOffset;\n }\n context.config({ xOffset: x, yOffset: y });\n};\n\n/**\n *\n *\n * @param {*} timeDiff\n * @param {*} range\n * @param {*} domain\n * @returns\n */\nconst getAxisOffset = (timeDiff, range, domain) => {\n const pvr = Math.abs(range[1] - range[0]) / (domain[1] - domain[0]);\n const width = (pvr * timeDiff);\n const avWidth = (range[1] - range[0]);\n const bars = avWidth / width;\n const barWidth = avWidth / (bars + 1);\n const diff = avWidth - barWidth * bars;\n\n return diff / 2;\n};\n\nexport const adjustRange = (minDiff, range, domain, orientation) => {\n const diff = getAxisOffset(minDiff, range, domain);\n\n if (orientation === TOP || orientation === BOTTOM) {\n range[0] += diff;\n range[1] -= diff;\n } else {\n range[0] -= diff;\n range[1] += diff;\n }\n return range;\n};\n\n /**\n * Listener attached to the axis on change of parameters.\n *\n * @param {Function} callback to be excuted on change of domain range etc\n * @memberof SimpleAxis\n */\nexport const registerChangeListeners = (context) => {\n const store = context.store();\n\n store.model.next(['domain', 'range', 'mount', 'config'], (...params) => {\n context.render();\n context._domainLock = false;\n context._eventList.forEach((e) => {\n e.action instanceof Function && e.action(...params);\n });\n }, true);\n return context;\n};\n\n/**\n *\n *\n * @param {*} axisDimensions\n * @param {*} config\n * @param {*} range\n * @returns\n */\nexport const getHorizontalAxisSpace = (context, axisDimensions, config, range) => {\n let width;\n let height;\n const {\n tickSize,\n tickLabelDim,\n axisLabelDim\n } = axisDimensions;\n const {\n axisNamePadding,\n showAxisName,\n tickValues\n } = config;\n const domain = context.domain();\n const { height: axisDimHeight } = axisLabelDim;\n const { height: tickDimHeight, width: tickDimWidth } = tickLabelDim;\n\n width = range && range.length ? range[1] - range[0] : 0;\n\n height = 0;\n if (tickValues) {\n const minTickDiff = context.getMinTickDifference();\n const [min, max] = [Math.min(...tickValues, ...domain), Math.max(...tickValues, ...domain)];\n\n width = ((max - min) / Math.abs(minTickDiff)) * (tickDimWidth + context._minTickDistance.width);\n }\n if (!width || width === 0) {\n height = Math.max(tickDimWidth, tickDimHeight);\n } else {\n height = tickDimHeight;\n }\n height += (showAxisName ? (axisDimHeight + axisNamePadding) : 0) + tickSize;\n return {\n width,\n height\n };\n};\n\n/**\n *\n *\n * @param {*} axisDimensions\n * @param {*} config\n * @param {*} range\n * @returns\n */\nexport const getVerticalAxisSpace = (context, axisDimensions, config) => {\n let height;\n let width;\n const {\n tickSize,\n tickLabelDim,\n axisLabelDim\n } = axisDimensions;\n const {\n axisNamePadding,\n showAxisName,\n tickValues\n } = config;\n const domain = context.domain();\n const { height: axisDimHeight } = axisLabelDim;\n const { height: tickDimHeight, width: tickDimWidth } = tickLabelDim;\n\n height = 0;\n width = tickDimWidth;\n if (tickValues) {\n const minTickDiff = context.getMinTickDifference();\n const [min, max] = [Math.min(...tickValues, ...domain), Math.max(...tickValues, ...domain)];\n\n height = ((max - min) / Math.abs(minTickDiff)) * (tickDimHeight);\n }\n width += (showAxisName ? axisDimHeight : 0) + tickSize + axisNamePadding;\n\n return {\n height,\n width\n };\n};\n\n /**\n * Calculates the logical space of the axis\n * @return {Object} Width and height occupied by the axis.\n */\nexport const calculateBandSpace = (context) => {\n const range = context.range();\n const config = context.config();\n const {\n orientation,\n show\n } = config;\n const axisDimensions = context.getAxisDimensions();\n const {\n largestLabelDim,\n axisTickLabels\n } = axisDimensions;\n const { height: largestDimHeight, width: largestDimWidth } = largestLabelDim;\n\n if (orientation === TOP || orientation === BOTTOM) {\n let { width, height } = getHorizontalAxisSpace(context, axisDimensions, config, range);\n if (!width || width === 0) {\n width = axisTickLabels.length * (Math.min(largestDimWidth + context._minTickDistance.width,\n largestDimHeight + context._minTickDistance.width));\n }\n if (show === false) {\n height = 0;\n }\n return {\n width,\n height\n };\n }\n\n let { width, height } = getVerticalAxisSpace(context, axisDimensions, config, range);\n\n if (!height || height === 0) {\n height = axisTickLabels.length * (largestDimHeight + largestDimHeight / 2) + largestDimHeight;\n }\n if (show === false) {\n width = 0;\n }\n return {\n width,\n height\n };\n};\n\n/**\n * Calculates the logical space of the axis\n * @return {Object} Width and height occupied by the axis.\n */\nexport const calculateContinousSpace = (context) => {\n const range = context.range();\n const config = context.config();\n const axisDimensions = context.getAxisDimensions();\n\n const {\n orientation,\n show,\n showAxisName\n } = config;\n const {\n axisLabelDim\n } = axisDimensions;\n\n if (show === false) {\n return {\n width: 0,\n height: 0\n };\n }\n\n const { width: axisDimWidth } = axisLabelDim;\n\n if (orientation === TOP || orientation === BOTTOM) {\n const { width, height } = getHorizontalAxisSpace(context, axisDimensions, config);\n const axisWidth = Math.max(width, axisDimWidth);\n\n return {\n width: axisWidth,\n height\n };\n }\n\n const { width, height } = getVerticalAxisSpace(context, axisDimensions, config, range);\n\n const effHeight = Math.max(height, showAxisName ? axisDimWidth : 0);\n\n return {\n width,\n height: effHeight\n };\n};\n\n","import { mergeRecursive } from 'muze-utils';\n\nexport const PROPS = {\n availableSpace: {},\n axisDimensions: {},\n config: {\n sanitization: (context, value) => {\n if (value.labels && value.labels.rotation) {\n context._rotationLock = true;\n }\n value = mergeRecursive(context._config || {}, value);\n value.axisNamePadding = Math.max(value.axisNamePadding, 0);\n context.axis(context.createAxis(value));\n context.store().commit('config', value);\n return value;\n }\n },\n logicalSpace: {},\n mount: {\n sanitization: (context, value) => {\n context.store().commit('mount', value);\n return value;\n }\n },\n range: {\n sanitization: (context, value) => {\n context.scale().range(value);\n context.logicalSpace(null);\n context.store().commit('range', value);\n return value;\n }\n },\n\n smartTicks: {},\n store: {},\n tickSize: {}\n};\n","import {\n Store,\n mergeRecursive,\n getSmartComputedStyle,\n selectElement,\n generateGetterSetters,\n getUniqueId\n} from 'muze-utils';\nimport { createScale } from '../scale-creator';\nimport { axisOrientationMap, BOTTOM, TOP } from '../enums/axis-orientation';\nimport { defaultConfig } from './default-config';\nimport { renderAxis } from '../axis-renderer';\nimport { DOMAIN, BAND } from '../enums/constants';\nimport {\n computeAxisDimensions,\n setOffset,\n registerChangeListeners,\n calculateContinousSpace\n} from './helper';\nimport { PROPS } from './props';\n\nexport default class SimpleAxis {\n\n /**\n * Creates an instance of SimpleAxis.\n * @memberof SimpleAxis\n */\n constructor (config, dependencies) {\n this._id = getUniqueId();\n\n this._dependencies = dependencies;\n this._mount = null;\n this._range = [];\n this._domain = [];\n this._domainLock = false;\n this._rotationLock = false;\n this._axisDimensions = {};\n this._eventList = [];\n\n const defCon = mergeRecursive({}, this.constructor.defaultConfig());\n const simpleConfig = mergeRecursive(defCon, config);\n\n const bodyElem = selectElement('body');\n const classPrefix = simpleConfig.classPrefix;\n this._tickLabelStyle = getSmartComputedStyle(bodyElem, `${classPrefix}-ticks`);\n this._axisNameStyle = getSmartComputedStyle(bodyElem, `${classPrefix}-axis-name`);\n dependencies.labelManager.setStyle(this._tickLabelStyle);\n this._minTickDistance = dependencies.labelManager.getOriSize('ww');\n\n generateGetterSetters(this, PROPS);\n this.store(new Store({\n domain: this.domain(),\n range: this.range(),\n config: simpleConfig,\n mount: this.mount()\n }));\n this.config(simpleConfig);\n\n this._scale = this.createScale(this._config);\n this._axis = this.createAxis(this._config);\n\n registerChangeListeners(this);\n }\n\n /**\n * Returns the default configuration of simple axis\n * @return {Object} default configurations\n */\n static defaultConfig () {\n return defaultConfig;\n }\n\n /**\n * Sets a fixed baseline for the first ticks so that they can render effectively within\n * the given area\n *\n * @param {*} tickText\n * @param {*} config\n * @param {*} labelManager\n */\n setFixedBaseline () {\n return this;\n }\n\n /**\n *\n *\n * @readonly\n * @memberof SimpleAxis\n */\n scale (...params) {\n if (params.length) {\n this._scale = params[0];\n return this;\n }\n return this._scale;\n }\n\n /**\n *\n *\n * @readonly\n * @memberof SimpleAxis\n */\n axis (...params) {\n if (params.length) {\n this._axis = params[0];\n return this;\n }\n return this._axis;\n }\n\n /**\n *\n *\n * @param {*} d\n * @returns\n * @memberof SimpleAxis\n */\n domain (...domain) {\n if (domain.length) {\n this.scale().domain(domain[0]);\n this._domain = this.scale().domain();\n this.smartTicks(this.setTickConfig());\n this.store().commit(DOMAIN, this._domain);\n this.logicalSpace(null);\n return this;\n }\n return this._domain;\n }\n\n /**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\n dependencies () {\n return this._dependencies;\n }\n\n /**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\n createScale (config) {\n const {\n base,\n padding,\n interpolator,\n exponent\n } = config;\n const range = this.range();\n const scale = createScale({\n padding,\n interpolator,\n exponent,\n base,\n range,\n type: this.constructor.type()\n });\n\n return scale;\n }\n\n getTickFormatter (tickFormat, numberFormat) {\n if (tickFormat) {\n return ticks => (val, i) => tickFormat(numberFormat(val), i, ticks);\n }\n return () => val => numberFormat(val);\n }\n\n /**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\n createAxis (config) {\n const {\n tickFormat,\n numberFormat,\n orientation\n } = config;\n const axisClass = axisOrientationMap[orientation];\n\n if (axisClass) {\n const axis = axisClass(this.scale());\n this.formatter = this.getTickFormatter(tickFormat, numberFormat);\n\n return axis;\n }\n return null;\n }\n\n /**\n *\n *\n * @memberof SimpleAxis\n */\n setTickConfig () {\n return this;\n }\n\n /**\n *\n *\n * @param {*} axisTickLabels\n * @param {*} labelWidth\n * @returns\n * @memberof SimpleAxis\n */\n setRotationConfig (axisTickLabels, labelWidth) {\n const { orientation } = this.config();\n\n if (orientation === TOP || orientation === BOTTOM) {\n const range = this.range();\n const length = Math.abs(range[0] - range[1]);\n this.config({ labels: { rotation: 0 } });\n if (length > 0 && axisTickLabels.length * (labelWidth + this._minTickDistance.width) > length) {\n this.config({ labels: { rotation: -90 } });\n }\n }\n return this;\n }\n\n /**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\n adjustRange () {\n return this;\n }\n\n getScaleValue (domainVal) {\n if (domainVal === null || domainVal === undefined) {\n return undefined;\n }\n return this.scale()(domainVal);\n }\n\n /**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\n getTickSize () {\n return this.axis().tickSize();\n }\n\n /**\n * Gets the space occupied by the parts of an axis\n *\n * @return {Object} object with details about sizes of the axis.\n * @memberof SimpleAxis\n */\n getAxisDimensions () {\n this.axisDimensions(computeAxisDimensions(this));\n return this.axisDimensions();\n }\n\n /**\n * Gets the space occupied by the axis\n *\n * @return {Object} object with details about size of the axis.\n * @memberof SimpleAxis\n */\n getLogicalSpace () {\n if (!this.logicalSpace()) {\n this.logicalSpace(calculateContinousSpace(this));\n setOffset(this);\n this.logicalSpace();\n }\n return this.logicalSpace();\n }\n\n /**\n * Returns the value from the domain when given a value from the range.\n * @param {number} value Value from the range.\n * @return {number} Value\n */\n invert (...value) {\n const values = value.map(d => this.scale().invert(d)) || [];\n return value.length === 1 ? values[0] : values;\n }\n\n /**\n * Gets the nearest range value from the given range values.\n * @param {number} v1 Start range value\n * @param {number} v2 End range value\n * @return {Array} range values\n */\n getNearestRange (v1, v2) {\n let p1;\n let p2;\n let extent;\n const {\n type\n } = this.config();\n const scale = this.scale();\n const range = scale.range();\n const reverse = range[0] > range[1];\n\n if (type === BAND) {\n extent = scale.invertExtent(v1, v2);\n p1 = scale(reverse ? extent[extent.length - 1] : extent[0]);\n p2 = scale(reverse ? extent[0] : extent[extent.length - 1]) + scale.bandwidth();\n return [p1, p2];\n }\n return [v1, v2];\n }\n\n /**\n * This method is used to assign a domain to the axis.\n *\n * @param {Array} domain the domain of the scale\n * @memberof SimpleAxis\n */\n updateDomainBounds (domain) {\n let currentDomain = this.domain();\n if (this.config().domain) {\n currentDomain = this.config().domain;\n } else {\n if (currentDomain.length === 0) {\n currentDomain = domain;\n }\n if (domain.length) {\n currentDomain = [Math.min(currentDomain[0], domain[0]), Math.max(currentDomain[1], domain[1])];\n }\n }\n\n return this.domain(currentDomain);\n }\n\n /**\n *\n *\n * @param {*} domain\n * @returns\n * @memberof SimpleAxis\n */\n updateDomainCache (domain) {\n if (this._domainLock === false) {\n this.domain([]);\n this._domainLock = true;\n }\n const cachedDomain = [];\n domain && domain.forEach((d) => {\n d !== undefined && d !== null && cachedDomain.push(d);\n });\n return this.updateDomainBounds(cachedDomain);\n }\n\n getMinTickDifference () {\n return this.domain();\n }\n\n getFormattedTickValues (tickValues) {\n return tickValues;\n }\n\n /**\n *\n *\n * @param {*} tickValues\n * @returns\n * @memberof SimpleAxis\n */\n setTickValues () {\n const {\n tickValues\n } = this.config();\n\n if (tickValues) {\n tickValues instanceof Array && this.axis().tickValues(tickValues);\n return this;\n }\n return this;\n }\n\n /**\n * This method returns the width in pixels for one\n * unit along the axis. It is only applicable to band scale\n * and returns undefined for other scale type.\n *\n * @return {number} the width of one band along band scale axis\n * @memberof SimpleAxis\n */\n getUnitWidth () {\n return 0;\n }\n\n /**\n * This method returns an object that can be used to\n * reconstruct this instance.\n *\n * @return {Object} the serializable props of axis\n * @memberof SimpleAxis\n */\n serialize () {\n return {\n name: this.name,\n type: this.type,\n range: this.range(),\n config: this.config()\n };\n }\n\n /**\n * Returns the id of the axis.\n * @return {string} Unique identifier of the axis.\n */\n get id () {\n return this._id;\n }\n\n registerEvent (event, fn) {\n this._eventList.push({ name: event, action: fn });\n }\n\n /**\n *\n *\n * @param {*} fn\n * @memberof SimpleAxis\n */\n on (event, fn) {\n event = event || 'update';\n this.registerEvent(event, fn);\n }\n\n /**\n * This method is used to render the axis inside\n * the supplied svg container.\n *\n * @param {SVGElement} svg the svg element in which to render the path\n * @memberof SimpleAxis\n */\n /* istanbul ignore next */render () {\n if (this.mount()) {\n renderAxis(this);\n }\n return this;\n }\n\n /**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\n remove () {\n this.store().unsubscribeAll();\n selectElement(this.mount()).remove();\n return this;\n }\n\n /**\n *\n *\n * @memberof SimpleAxis\n */\n unsubscribe () {\n this.store().unsubscribeAll();\n return this;\n }\n\n /**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\n isReverse () {\n const range = this.range();\n return range[0] > range[1];\n }\n\n /**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\n getPixelToValueRatio () {\n const scale = this.scale();\n const range = scale.range();\n const domain = scale.domain();\n\n return Math.abs(range[1] - range[0]) / (domain[1] - domain[0]);\n }\n}\n\n","import { scaleMap } from '../../scale-creator';\n\nexport default class LinearInterpolator {\n\n createScale (config) {\n const {\n range\n } = config;\n const scaleFactory = scaleMap.linear;\n this._scale = scaleFactory().range(range);\n return this._scale;\n }\n\n getScaleValue (domainVal) {\n return this._scale(domainVal) + 0.5;\n }\n\n sanitizeDomain (domain) {\n return domain;\n }\n}\n","import { scaleMap } from '../../scale-creator';\n\nexport default class LogInterpolator {\n\n createScale (config) {\n const {\n range,\n base\n } = config;\n const scaleFactory = scaleMap.log;\n this._scale = scaleFactory().range(range).base(base);\n return this._scale;\n }\n\n getScaleValue (domainVal) {\n if (domainVal <= 0) {\n return 1;\n }\n\n return this._scale(domainVal) + 0.5;\n }\n\n sanitizeDomain (domain) {\n if (domain[0] <= 0) {\n return [Math.max(1, domain[0]), Math.max(1, domain[1])];\n } return domain;\n }\n}\n","import { scaleMap } from '../../scale-creator';\n\nexport default class PowInterpolator {\n\n createScale (config) {\n const {\n range,\n exponent\n } = config;\n const scaleFactory = scaleMap.pow;\n this._scale = scaleFactory().range(range).exponent(exponent);\n return this._scale;\n }\n\n getScaleValue (domainVal) {\n return this._scale(domainVal) + 0.5;\n }\n\n sanitizeDomain (domain) {\n return domain;\n }\n}\n","import { getSmallestDiff } from 'muze-utils';\nimport SimpleAxis from './simple-axis';\nimport { BOTTOM, TOP, LEFT, RIGHT } from '../enums/axis-orientation';\nimport { LINEAR, LOG, POW } from '../enums/scale-type';\nimport { LogInterpolator, PowInterpolator, LinearInterpolator } from './interpolators';\nimport { DOMAIN } from '../enums/constants';\nimport {\n getTickLabelInfo,\n getNumberOfTicks\n} from './helper';\n\nexport const interpolatorMap = {\n [LOG]: LogInterpolator,\n [POW]: PowInterpolator,\n [LINEAR]: LinearInterpolator\n};\n\nexport default class ContinousAxis extends SimpleAxis {\n constructor (config, dependencies) {\n config.tickFormat = config.tickFormat || (val => val);\n super(config, dependencies);\n }\n /**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\n createScale (config) {\n const {\n base,\n padding,\n interpolator,\n exponent\n } = config;\n const range = this.range();\n const InterpolatorCls = interpolatorMap[interpolator];\n\n this._interpolator = new InterpolatorCls();\n let scale = this._interpolator.createScale({\n padding,\n exponent,\n base,\n range\n });\n\n scale = scale.nice();\n return scale;\n }\n\n /**\n * This method is used to assign a domain to the axis.\n *\n * @param {Array} domain the domain of the scale\n * @memberof SimpleAxis\n */\n updateDomainBounds (domain) {\n let currentDomain = this.domain();\n if (this.config().domain) {\n currentDomain = this.config().domain;\n } else {\n if (currentDomain.length === 0) {\n currentDomain = domain;\n }\n if (domain.length) {\n currentDomain = [Math.min(currentDomain[0], domain[0]), Math.max(currentDomain[1], domain[1])];\n }\n }\n\n return this.domain(currentDomain);\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof ContinousAxis\n */\n static type () {\n return LINEAR;\n }\n\n getScaleValue (domainVal) {\n if (domainVal === null || domainVal === undefined) {\n return undefined;\n }\n return this._interpolator.getScaleValue(domainVal);\n }\n /**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\n getTickSize () {\n const {\n showInnerTicks,\n showOuterTicks\n } = this.config();\n const axis = this.axis();\n axis.tickSizeInner(showInnerTicks === false ? 0 : 6);\n axis.tickSizeOuter(showOuterTicks === false ? 0 : 6);\n return axis.tickSize();\n }\n\n /**\n *\n *\n * @param {*} d\n * @returns\n * @memberof SimpleAxis\n */\n domain (domain) {\n if (domain && domain.length) {\n const { nice } = this.config();\n if (domain.length && domain[0] === domain[1]) {\n domain = [0, +domain[0] * 2];\n }\n this.scale().domain(domain);\n nice && this.scale().nice();\n this._domain = this.scale().domain();\n this.store().commit(DOMAIN, this._domain);\n this.logicalSpace(null);\n return this;\n } return this._domain;\n }\n\n /**\n * This method is used to set the space availiable to render\n * the SimpleCell.\n *\n * @param {number} width The width of SimpleCell.\n * @param {number} height The height of SimpleCell.\n * @memberof AxisCell\n */\n setAvailableSpace (width = 0, height, padding, isOffset) {\n const {\n left,\n right,\n top,\n bottom\n } = padding;\n const {\n orientation,\n fixedBaseline\n } = this.config();\n const { tickLabelDim } = this.getAxisDimensions();\n this.availableSpace({ width, height });\n\n if (orientation === TOP || orientation === BOTTOM) {\n const labelSpace = tickLabelDim.width;\n this.range([(fixedBaseline ? 0 : (labelSpace / 2)) + left, width - right - labelSpace / 2]);\n const axisHeight = this.getLogicalSpace().height;\n isOffset && this.config({ yOffset: Math.max(axisHeight, height) });\n } else {\n const labelSpace = tickLabelDim.height;\n this.range([height - bottom - (fixedBaseline ? 1 : (labelSpace / 2)), labelSpace / 2 + top]);\n const axisWidth = this.getLogicalSpace().width;\n isOffset && this.config({ xOffset: Math.max(axisWidth, width) });\n }\n return this;\n }\n\n /**\n *\n *\n * @param {*} tickValues\n * @returns\n * @memberof SimpleAxis\n */\n setTickValues () {\n const {\n tickValues\n } = this.config();\n const axis = this.axis();\n\n if (tickValues) {\n tickValues instanceof Array && this.axis().tickValues(tickValues);\n return this;\n }\n axis.tickValues(this.getTickValues());\n return this;\n }\n\n /**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\n getTickValues () {\n let labelDim = 0;\n const {\n orientation,\n tickValues\n } = this.config();\n const range = this.range();\n const axis = this.axis();\n\n const availableSpace = Math.abs(range[0] - range[1]);\n\n const labelProps = getTickLabelInfo(this).largestLabelDim;\n\n if (tickValues) {\n return axis.scale().ticks(tickValues);\n }\n labelDim = labelProps[orientation === BOTTOM || orientation === TOP ? 'width' : 'height'];\n\n return getNumberOfTicks(availableSpace, labelDim, axis, this);\n }\n\n getMinTickDifference () {\n return getSmallestDiff(this.config().tickValues);\n }\n\n /**\n * Sets a fixed baseline for the first ticks so that they can render effectively within\n * the given area\n *\n * @param {*} tickText\n * @param {*} config\n * @param {*} labelManager\n */\n setFixedBaseline (tickText) {\n const {\n orientation,\n labels\n } = this.config();\n const {\n rotation\n } = labels;\n const axis = this.axis();\n const { width, height } = this._axisDimensions.largestLabelDim;\n axis.tickTransform((d, i) => {\n if (i === 0 && (orientation === LEFT || orientation === RIGHT)) {\n return `translate(0, -${(height) / 3}px)`;\n }\n if (i === 0 && (orientation === TOP || orientation === BOTTOM) && rotation === 0) {\n return `translate(${width / 2}px, ${0}px) rotate(${rotation}deg)`;\n } return '';\n });\n return tickText;\n }\n\n}\n","import SimpleAxis from './simple-axis';\nimport { BAND } from '../enums/scale-type';\nimport { TOP, BOTTOM } from '../enums/axis-orientation';\nimport { calculateBandSpace, setOffset } from './helper';\n\nexport default class BandAxis extends SimpleAxis {\n\n /**\n *\n *\n * @param {*} range\n * @returns\n * @memberof BandAxis\n */\n createScale (range) {\n const scale = super.createScale(range);\n const { padding } = this.config();\n if (typeof padding === 'number') {\n scale.padding(padding);\n }\n return scale;\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof BandAxis\n */\n static type () {\n return BAND;\n }\n\n /**\n *\n *\n * @param {*} width\n * @param {*} height\n * @param {*} padding\n * @param {*} isOffset\n * @memberof BandAxis\n */\n setAvailableSpace (width, height, padding, isOffset) {\n const {\n left,\n right,\n top,\n bottom\n } = padding;\n const {\n orientation,\n showAxisName,\n axisNamePadding\n } = this.config();\n const { axisLabelDim } = this.getAxisDimensions();\n const { height: axisDimHeight } = axisLabelDim;\n\n this.availableSpace({ width, height });\n if (orientation === TOP || orientation === BOTTOM) {\n // Set x axis range\n this.range([0, width - left - right]);\n const axisHeight = this.getLogicalSpace().height - (showAxisName === false ?\n (axisDimHeight + axisNamePadding) : 0);\n isOffset && this.config({ yOffset: Math.max(axisHeight, height) });\n } else {\n // Set y axis range\n this.range([height - bottom, top]);\n const axisWidth = this.getLogicalSpace().width - (showAxisName === false ? axisDimHeight : 0);\n isOffset && this.config({ xOffset: Math.max(axisWidth, width) });\n }\n return this;\n }\n\n /**\n *\n *\n * @returns\n * @memberof BandAxis\n */\n getUnitWidth () {\n return this.scale().bandwidth();\n }\n\n /**\n *\n *\n * @returns\n * @memberof BandAxis\n */\n setTickConfig () {\n let smartTicks = '';\n let smartlabel;\n const { maxWidth, maxHeight, tickFormat } = this.config();\n const { labelManager } = this._dependencies;\n const domain = this.axis().scale().domain();\n\n smartTicks = domain;\n const tickFormatter = tickFormat || (val => val);\n\n if (domain && domain.length) {\n smartTicks = domain.map((d, i) => {\n labelManager.useEllipsesOnOverflow(true);\n smartlabel = labelManager.getSmartText(tickFormatter(d, i, domain), maxWidth, maxHeight);\n return labelManager.constructor.textToLines(smartlabel);\n });\n }\n return smartTicks;\n }\n\n/**\n * Gets the space occupied by the axis\n *\n * @return {Object} object with details about size of the axis.\n * @memberof SimpleAxis\n */\n getLogicalSpace () {\n if (!this.logicalSpace()) {\n this.logicalSpace(calculateBandSpace(this));\n setOffset(this);\n this.logicalSpace();\n }\n return this.logicalSpace();\n }\n /**\n *\n *\n * @param {*} axisTickLabels\n * @param {*} labelWidth\n * @returns\n * @memberof BandAxis\n */\n setRotationConfig (axisTickLabels, labelWidth) {\n const { orientation } = this.config();\n const range = this.range();\n const availSpace = Math.abs(range[0] - range[1]);\n\n this.config({ labels: { rotation: 0, smartTicks: false } });\n if (orientation === TOP || orientation === BOTTOM) {\n const smartWidth = this.smartTicks().reduce((acc, n) => acc + n.width + this._minTickDistance.width, 0);\n // set multiline config\n if (availSpace > 0 && axisTickLabels.length * (labelWidth + this._minTickDistance.width) > availSpace) {\n if (availSpace && smartWidth < availSpace) {\n this.config({ labels: { smartTicks: true } });\n } else {\n this.config({ labels: { rotation: -90 } });\n }\n }\n }\n return this;\n }\n\n /**\n *\n *\n * @returns\n * @memberof BandAxis\n */\n getTickValues () {\n return this.axis().scale().domain();\n }\n\n /**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\n getTickSize () {\n const {\n showInnerTicks,\n showOuterTicks\n } = this.config();\n const axis = this.axis();\n\n axis.tickSizeInner(showInnerTicks ? 6 : 0);\n axis.tickSizeOuter(showOuterTicks ? 6 : 0);\n return axis.tickSize();\n }\n\n /**\n * This method is used to assign a domain to the axis.\n *\n * @param {Array} domain the domain of the scale\n * @memberof SimpleAxis\n */\n updateDomainBounds (domain) {\n let currentDomain = this.domain();\n if (this.config().domain) {\n currentDomain = this.config().domain;\n } else {\n if (currentDomain.length === 0) {\n currentDomain = domain;\n }\n currentDomain = currentDomain.concat(domain);\n }\n this.domain(currentDomain);\n return this;\n }\n\n /**\n * Returns the value from the domain when given a value from the range.\n * @param {number} value Value from the range.\n * @return {number} Value\n */\n invert (...value) {\n const values = value.map(d => this.scale().invert(d)) || [];\n return value.length === 1 ? values[0] && values[0].toString() : values.map(d => d.toString());\n }\n}\n","import { getSmallestDiff } from 'muze-utils';\nimport SimpleAxis from './simple-axis';\nimport { adjustRange } from './helper';\nimport { TIME } from '../enums/scale-type';\nimport { axisOrientationMap, BOTTOM, TOP } from '../enums/axis-orientation';\nimport { DOMAIN } from '../enums/constants';\n\n/**\n *\n *\n * @export\n * @class TimeAxis\n * @extends {SimpleAxis}\n */\nexport default class TimeAxis extends SimpleAxis {\n\n constructor (...params) {\n super(...params);\n this._minDiff = Infinity;\n }\n\n /**\n *\n *\n * @param {*} range\n * @returns\n * @memberof TimeAxis\n */\n createScale (range) {\n let scale = super.createScale(range);\n\n scale = scale.nice();\n return scale;\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof TimeAxis\n */\n static type () {\n return TIME;\n }\n\n /**\n *\n *\n * @returns\n * @memberof BandAxis\n */\n setTickConfig () {\n let smartTicks;\n let smartlabel;\n const { maxWidth, maxHeight, tickFormat } = this.config();\n const { labelManager } = this._dependencies;\n const domain = this.getTickValues();\n const scale = this.scale();\n\n smartTicks = domain;\n const tickFormatter = tickFormat || scale.tickFormat();\n\n if (domain && domain.length) {\n smartTicks = domain.map((d, i) => {\n smartlabel = labelManager.getSmartText(tickFormatter(d, i, domain), maxWidth, maxHeight);\n return labelManager.constructor.textToLines(smartlabel);\n });\n }\n return smartTicks;\n }\n\n /**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\n createAxis (config) {\n const {\n tickFormat,\n orientation\n } = config;\n const axisClass = axisOrientationMap[orientation];\n\n if (axisClass) {\n const axis = axisClass(this.scale());\n this.formatter = this.getTickFormatter(tickFormat);\n return axis;\n }\n return null;\n }\n\n getTickFormatter (tickFormat) {\n if (tickFormat) {\n return ticks => (val, i) => tickFormat(val, i, ticks);\n }\n return null;\n }\n\n /**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\n getTickSize () {\n const {\n showInnerTicks,\n showOuterTicks\n } = this.config();\n const axis = this.axis();\n axis.tickSizeInner(showInnerTicks === false ? 0 : 6);\n axis.tickSizeOuter(showOuterTicks === false ? 0 : 6);\n return super.getTickSize();\n }\n\n /**\n *\n *\n * @returns\n * @memberof TimeAxis\n */\n getTickValues () {\n return this.scale().ticks();\n }\n\n /**\n *\n *\n * @param {*} diff\n * @returns\n * @memberof TimeAxis\n */\n minDiff (diff) {\n this._minDiff = Math.min(this._minDiff, diff);\n return this;\n }\n\n /**\n *\n *\n * @param {*} axisTickLabels\n * @param {*} labelWidth\n * @returns\n * @memberof BandAxis\n */\n setRotationConfig (axisTickLabels, labelWidth) {\n const { orientation } = this.config();\n const range = this.range();\n const availSpace = Math.abs(range[0] - range[1]);\n\n this.config({ labels: { rotation: 0, smartTicks: false } });\n if (orientation === TOP || orientation === BOTTOM) {\n const smartWidth = this.smartTicks().reduce((acc, n) => acc + n.width, 0);\n // set multiline config\n if (availSpace > 0 && axisTickLabels.length * labelWidth > availSpace) {\n if (availSpace && smartWidth * 1.25 < availSpace) {\n this.config({ labels: { smartTicks: true } });\n }\n this.config({ labels: { rotation: -90 } });\n }\n }\n return this;\n }\n\n /**\n *\n *\n * @param {*} d\n * @returns\n * @memberof SimpleAxis\n */\n domain (domain) {\n if (domain) {\n const { nice } = this.config();\n\n if (domain.length && domain[0] === domain[1]) {\n domain = [0, +domain[0] * 2];\n }\n this.scale().domain(domain);\n nice && this.scale().nice();\n this._domain = this.scale().domain();\n this.smartTicks(this.setTickConfig());\n this.store().commit(DOMAIN, this._domain);\n this.logicalSpace(null);\n return this;\n } return this._domain;\n }\n\n getMinTickDifference () {\n return getSmallestDiff(this.config().tickValues);\n }\n\n /**\n *\n *\n * @param {*} width\n * @param {*} height\n * @param {*} padding\n * @param {*} isOffset\n * @memberof TimeAxis\n */\n setAvailableSpace (width, height, padding, isOffset) {\n const {\n left,\n right,\n top,\n bottom\n } = padding;\n const {\n orientation,\n showAxisName,\n axisNamePadding\n } = this.config();\n const domain = this.domain();\n const { axisLabelDim, tickLabelDim } = this.getAxisDimensions();\n const { height: axisDimHeight } = axisLabelDim;\n const { height: tickDimHeight, width: tickDimWidth } = tickLabelDim;\n\n this.availableSpace({ width, height });\n if (orientation === TOP || orientation === BOTTOM) {\n const labelSpace = tickDimWidth;\n this.range(adjustRange(this._minDiff, [labelSpace / 2, width - left - right - labelSpace / 2],\n domain, orientation));\n const axisHeight = this.getLogicalSpace().height - (showAxisName === false ?\n (axisDimHeight + axisNamePadding) : 0);\n isOffset && this.config({ yOffset: Math.max(axisHeight, height) });\n } else {\n const labelSpace = tickDimHeight;\n this.range(adjustRange(this._minDiff, [height - top - bottom - labelSpace / 2, labelSpace / 2],\n domain, orientation));\n const axisWidth = this.getLogicalSpace().width - (showAxisName === false ? axisDimHeight : 0);\n this.isOffset && this.config({ xOffset: Math.max(axisWidth, width) });\n }\n return this;\n }\n\n}\n","export const x11Colors = {\n Pink: { hex: 'ffc0cb', rgb: '255,192,203' },\n LightPink: { hex: 'ffb6c1', rgb: '255,182,193' },\n HotPink: { hex: 'ff69b4', rgb: '255,105,180' },\n DeepPink: { hex: 'ff1493', rgb: '255,20,147' },\n PaleVioletRed: { hex: 'db7093', rgb: '219,112,147' },\n MediumVioletRed: { hex: 'c71585', rgb: '199,21,133' },\n LightSalmon: { hex: 'ffa07a', rgb: '255,160,122' },\n Salmon: { hex: 'fa8072', rgb: '250,128,114' },\n DarkSalmon: { hex: 'e9967a', rgb: '233,150,122' },\n LightCoral: { hex: 'f08080', rgb: '240,128,128' },\n IndianRed: { hex: 'cd5c5c', rgb: '205,92,92' },\n Crimson: { hex: 'dc143c', rgb: '220,20,60' },\n FireBrick: { hex: 'b22222', rgb: '178,34,34' },\n DarkRed: { hex: '8b0000', rgb: '139,0,0' },\n Red: { hex: 'ff0000', rgb: '255,0,0' },\n OrangeRed: { hex: 'ff4500', rgb: '255,69,0' },\n Tomato: { hex: 'ff6347', rgb: '255,99,71' },\n Coral: { hex: 'ff7f50', rgb: '255,127,80' },\n DarkOrange: { hex: 'ff8c00', rgb: '255,140,0' },\n Orange: { hex: 'ffa500', rgb: '255,165,0' },\n Gold: { hex: 'ffd700', rgb: '255,215,0' },\n Yellow: { hex: 'ffff00', rgb: '255,255,0' },\n LightYellow: { hex: 'ffffe0', rgb: '255,255,224' },\n LemonChiffon: { hex: 'fffacd', rgb: '255,250,205' },\n LightGoldenrodYellow: { hex: 'fafad2', rgb: '250,250,210' },\n PapayaWhip: { hex: 'ffefd5', rgb: '255,239,213' },\n Moccasin: { hex: 'ffe4b5', rgb: '255,228,181' },\n PeachPuff: { hex: 'ffdab9', rgb: '255,218,185' },\n PaleGoldenrod: { hex: 'eee8aa', rgb: '238,232,170' },\n Khaki: { hex: 'f0e68c', rgb: '240,230,140' },\n DarkKhaki: { hex: 'bdb76b', rgb: '189,183,107' },\n Cornsilk: { hex: 'fff8dc', rgb: '255,248,220' },\n BlanchedAlmond: { hex: 'ffebcd', rgb: '255,235,205' },\n Bisque: { hex: 'ffe4c4', rgb: '255,228,196' },\n NavajoWhite: { hex: 'ffdead', rgb: '255,222,173' },\n Wheat: { hex: 'f5deb3', rgb: '245,222,179' },\n BurlyWood: { hex: 'deb887', rgb: '222,184,135' },\n Tan: { hex: 'd2b48c', rgb: '210,180,140' },\n RosyBrown: { hex: 'bc8f8f', rgb: '188,143,143' },\n SandyBrown: { hex: 'f4a460', rgb: '244,164,96' },\n Goldenrod: { hex: 'daa520', rgb: '218,165,32' },\n DarkGoldenrod: { hex: 'b8860b', rgb: '184,134,11' },\n Peru: { hex: 'cd853f', rgb: '205,133,63' },\n Chocolate: { hex: 'd2691e', rgb: '210,105,30' },\n SaddleBrown: { hex: '8b4513', rgb: '139,69,19' },\n Sienna: { hex: 'a0522d', rgb: '160,82,45' },\n Brown: { hex: 'a52a2a', rgb: '165,42,42' },\n Maroon: { hex: '800000', rgb: '128,0,0' },\n DarkOliveGreen: { hex: '556b2f', rgb: '85,107,47' },\n Olive: { hex: '808000', rgb: '128,128,0' },\n OliveDrab: { hex: '6b8e23', rgb: '107,142,35' },\n YellowGreen: { hex: '9acd32', rgb: '154,205,50' },\n LimeGreen: { hex: '32cd32', rgb: '50,205,50' },\n Lime: { hex: '00ff00', rgb: '0,255,0' },\n LawnGreen: { hex: '7cfc00', rgb: '124,252,0' },\n Chartreuse: { hex: '7fff00', rgb: '127,255,0' },\n GreenYellow: { hex: 'adff2f', rgb: '173,255,47' },\n SpringGreen: { hex: '00ff7f', rgb: '0,255,127' },\n MediumSpringGreen: { hex: '00fa9a', rgb: '0,250,154' },\n LightGreen: { hex: '90ee90', rgb: '144,238,144' },\n PaleGreen: { hex: '98fb98', rgb: '152,251,152' },\n DarkSeaGreen: { hex: '8fbc8f', rgb: '143,188,143' },\n MediumSeaGreen: { hex: '3cb371', rgb: '60,179,113' },\n SeaGreen: { hex: '2e8b57', rgb: '46,139,87' },\n ForestGreen: { hex: '228b22', rgb: '34,139,34' },\n Green: { hex: '008000', rgb: '0,128,0' },\n DarkGreen: { hex: '006400', rgb: '0,100,0' },\n MediumAquamarine: { hex: '66cdaa', rgb: '102,205,170' },\n Aqua: { hex: '00ffff', rgb: '0,255,255' },\n Cyan: { hex: '00ffff', rgb: '0,255,255' },\n LightCyan: { hex: 'e0ffff', rgb: '224,255,255' },\n PaleTurquoise: { hex: 'afeeee', rgb: '175,238,238' },\n Aquamarine: { hex: '7fffd4', rgb: '127,255,212' },\n Turquoise: { hex: '40e0d0', rgb: '64,224,208' },\n MediumTurquoise: { hex: '48d1cc', rgb: '72,209,204' },\n DarkTurquoise: { hex: '00ced1', rgb: '0,206,209' },\n LightSeaGreen: { hex: '20b2aa', rgb: '32,178,170' },\n CadetBlue: { hex: '5f9ea0', rgb: '95,158,160' },\n DarkCyan: { hex: '008b8b', rgb: '0,139,139' },\n Teal: { hex: '008080', rgb: '0,128,128' },\n LightSteelBlue: { hex: 'b0c4de', rgb: '176,196,222' },\n PowderBlue: { hex: 'b0e0e6', rgb: '176,224,230' },\n LightBlue: { hex: 'add8e6', rgb: '173,216,230' },\n SkyBlue: { hex: '87ceeb', rgb: '135,206,235' },\n LightSkyBlue: { hex: '87cefa', rgb: '135,206,250' },\n DeepSkyBlue: { hex: '00bfff', rgb: '0,191,255' },\n DodgerBlue: { hex: '1e90ff', rgb: '30,144,255' },\n CornflowerBlue: { hex: '6495ed', rgb: '100,149,237' },\n SteelBlue: { hex: '4682b4', rgb: '70,130,180' },\n RoyalBlue: { hex: '4169e1', rgb: '65,105,225' },\n Blue: { hex: '0000ff', rgb: '0,0,255' },\n MediumBlue: { hex: '0000cd', rgb: '0,0,205' },\n DarkBlue: { hex: '00008b', rgb: '0,0,139' },\n Navy: { hex: '000080', rgb: '0,0,128' },\n MidnightBlue: { hex: '191970', rgb: '25,25,112' },\n Lavender: { hex: 'e6e6fa', rgb: '230,230,250' },\n Thistle: { hex: 'd8bfd8', rgb: '216,191,216' },\n Plum: { hex: 'dda0dd', rgb: '221,160,221' },\n Violet: { hex: 'ee82ee', rgb: '238,130,238' },\n Orchid: { hex: 'da70d6', rgb: '218,112,214' },\n Fuchsia: { hex: 'ff00ff', rgb: '255,0,255' },\n Magenta: { hex: 'ff00ff', rgb: '255,0,255' },\n MediumOrchid: { hex: 'ba55d3', rgb: '186,85,211' },\n MediumPurple: { hex: '9370db', rgb: '147,112,219' },\n BlueViolet: { hex: '8a2be2', rgb: '138,43,226' },\n DarkViolet: { hex: '9400d3', rgb: '148,0,211' },\n DarkOrchid: { hex: '9932cc', rgb: '153,50,204' },\n DarkMagenta: { hex: '8b008b', rgb: '139,0,139' },\n Purple: { hex: '800080', rgb: '128,0,128' },\n Indigo: { hex: '4b0082', rgb: '75,0,130' },\n DarkSlateBlue: { hex: '483d8b', rgb: '72,61,139' },\n SlateBlue: { hex: '6a5acd', rgb: '106,90,205' },\n MediumSlateBlue: { hex: '7b68ee', rgb: '123,104,238' },\n White: { hex: 'ffffff', rgb: '255,255,255' },\n Snow: { hex: 'fffafa', rgb: '255,250,250' },\n Honeydew: { hex: 'f0fff0', rgb: '240,255,240' },\n MintCream: { hex: 'f5fffa', rgb: '245,255,250' },\n Azure: { hex: 'f0ffff', rgb: '240,255,255' },\n AliceBlue: { hex: 'f0f8ff', rgb: '240,248,255' },\n GhostWhite: { hex: 'f8f8ff', rgb: '248,248,255' },\n WhiteSmoke: { hex: 'f5f5f5', rgb: '245,245,245' },\n Seashell: { hex: 'fff5ee', rgb: '255,245,238' },\n Beige: { hex: 'f5f5dc', rgb: '245,245,220' },\n OldLace: { hex: 'fdf5e6', rgb: '253,245,230' },\n FloralWhite: { hex: 'fffaf0', rgb: '255,250,240' },\n Ivory: { hex: 'fffff0', rgb: '255,255,240' },\n AntiqueWhite: { hex: 'faebd7', rgb: '250,235,215' },\n Linen: { hex: 'faf0e6', rgb: '250,240,230' },\n LavenderBlush: { hex: 'fff0f5', rgb: '255,240,245' },\n MistyRose: { hex: 'ffe4e1', rgb: '255,228,225' },\n Gainsboro: { hex: 'dcdcdc', rgb: '220,220,220' },\n LightGray: { hex: 'd3d3d3', rgb: '211,211,211' },\n Silver: { hex: 'c0c0c0', rgb: '192,192,192' },\n DarkGrey: { hex: 'a9a9a9', rgb: '169,169,169' },\n Grey: { hex: '808080', rgb: '128,128,128' },\n DimGrey: { hex: '696969', rgb: '105,105,105' },\n LightSlateGrey: { hex: '778899', rgb: '119,136,153' },\n SlateGrey: { hex: '708090', rgb: '112,128,144' },\n DarkSlateGrey: { hex: '2f4f4f', rgb: '47,79,79' },\n Black: { hex: '000000', rgb: '0,0,0' }\n};\n","import {\n LINEAR\n} from '../enums/constants';\n/**\n * Set of default colors\n */\nexport const palette = [\n '#086bb6',\n '#f37d45',\n '#f5ce02',\n '#67bda0',\n '#c54e4e',\n '#ae70af'\n];\n\nexport const DEFAULT_GRADIENT_COLOR = '#eaeaea';\n\nexport const DEFAULT_CONFIG = {\n range: palette,\n value: palette[0],\n step: false,\n stops: 5,\n type: LINEAR\n};\n","import { mergeRecursive, detectColor, hexToHsv, rgbToHsv } from 'muze-utils';\nimport { x11Colors } from './color-maps';\nimport { palette, DEFAULT_GRADIENT_COLOR } from './defaults';\nimport { LINEAR, RGB, HEX, HSL, HSLA } from '../enums/constants';\n\nexport const getHslString = hslArr => `hsla(${hslArr[0] * 360},${hslArr[1] * 100}%,${hslArr[2] * 100}%,\\\n${hslArr[3] || 1})`;\n\nexport const convertToXllString = baseString => (baseString.split(' ') || [])\n .reduce((x, e) => `${x}${e.charAt(0).toUpperCase()}${e.slice(1)}`, '');\n\nexport const getActualHslColor = (e, paletteColor) => {\n let color = '';\n if (typeof e === 'string') {\n e = e.replace(/ /g, '');\n e = e.toLowerCase();\n if (detectColor(e) === HSL || detectColor(e) === HSLA) {\n color = e.match(/(\\d+(\\.\\d+)?)/g);\n color = [color[0] / 360, color[1] / 100, color[2] / 100, color[3] || 1];\n } else if (detectColor(e) === HEX) {\n color = hexToHsv(e);\n } else if (detectColor(e) === RGB) {\n const col = e.substring(e.indexOf('(') + 1, e.lastIndexOf(')')).split(/,\\s*/);\n color = rgbToHsv(...col);\n } else if (x11Colors[convertToXllString(e)]) {\n color = rgbToHsv(...x11Colors[convertToXllString(e)].rgb.split(','));\n }\n } else if (!(e instanceof Array)) {\n color = rgbToHsv(paletteColor);\n } else {\n color = e;\n }\n return color;\n};\n\nexport const PROPS = {\n config: {\n sanitization: (context, config) => {\n const defCon = mergeRecursive({}, context.constructor.defaultConfig());\n if (config.type === LINEAR) {\n config.range = config.range || [defCon.range[0]];\n config.range = config.range.length > 1 ? config.range : [DEFAULT_GRADIENT_COLOR, ...config.range];\n }\n const oldConfig = mergeRecursive(defCon, context.config());\n const newConfig = mergeRecursive(oldConfig, config);\n\n if (newConfig.range instanceof Array) {\n newConfig.range = newConfig.range.map((e, i) => getActualHslColor(e, palette[i]));\n newConfig.stops = config.stops || newConfig.range.length;\n }\n newConfig.value = getActualHslColor(newConfig.value, newConfig.value);\n return newConfig;\n }\n },\n domain: {},\n scale: {},\n uniqueValues: {}\n};\n","import { numberInterpolator, piecewiseInterpolator, hslInterpolator } from 'muze-utils';\nimport { CONTINOUS, DISCRETE } from '../enums/constants';\nimport { LINEAR, SEQUENTIAL, ORDINAL, QUANTILE } from '../enums/scale-type';\nimport { getHslString } from './props';\n\nconst getStops = (domain, stops) => {\n let newStops = [];\n\n if (stops instanceof Array) {\n newStops = stops.slice().sort();\n newStops = [...new Set([domain[0], ...stops, domain[1]])].sort();\n } else {\n const interpolator = numberInterpolator()(...domain);\n for (let i = 0; i <= stops; i++) {\n newStops[i] = interpolator(i / stops);\n }\n }\n\n if (newStops[0] < domain[0]) {\n newStops.shift();\n }\n return { domain, newStops };\n};\n\nconst rangeStops = (newStopsLength, range) => {\n let newRange = [];\n const maxRangeLength = Math.min(range.length, 18);\n\n if (newStopsLength > maxRangeLength) {\n const interpolator = piecewiseInterpolator()(hslInterpolator(), range.map(e => getHslString(e)));\n for (let i = 0; i < newStopsLength; i++) {\n newRange[i] = interpolator(i / (newStopsLength - 1));\n }\n } else {\n newRange = range.slice(0, newStopsLength);\n }\n return { newRange };\n};\n\n/**\n*\n*\n* @param {*} domain\n* @returns\n*/\nconst indexedDomain = (domain) => {\n const uniqueVals = domain;\n const retDomain = domain.map((d, i) => (i) / (domain.length - 1));\n return { domain: retDomain, uniqueVals, scaleDomain: [0, 1] };\n};\n\n/**\n *\n *\n * @param {*} domain\n * @returns\n */\nconst indexedDomainMeasure = (domain, stops, range) => {\n const uniqueVals = domain;\n return { domain, uniqueVals, scaleDomain: [0, 1], range };\n};\n\n/**\n *\n *\n * @param {*} domain\n * @returns\n */\nconst normalDomain = (domain, stops, range) => {\n const uniqueVals = domain;\n return { uniqueVals, domain, nice: true, range };\n};\n\n/**\n *\n *\n * @param {*} domain\n * @param {*} stops\n * @returns\n */\nconst steppedDomain = (domain, stops, range) => {\n const { domain: uniqueVals, newStops } = getStops(domain, stops);\n const { newRange } = rangeStops(newStops.length - 1, range);\n\n return { uniqueVals, domain: newStops, nice: true, range: newRange };\n};\n\nconst continousSteppedDomain = (domain, stops, range) => {\n const { domain: uniqueVals, newStops } = getStops(domain, range.length - 1);\n const hslRange = range.map(e => getHslString(e));\n return { uniqueVals, domain: newStops, nice: true, range: hslRange };\n};\n\n/**\n *\n *\n * @param {*} domainValue\n * @param {*} scale\n * @param {*} domain\n * @param {*} uniqueVals\n * @returns\n */\nconst uniqueRange = (domainValue, scale, domain, uniqueVals) => {\n const index = uniqueVals.indexOf(domainValue);\n const numVal = domain[index];\n return scale(numVal);\n};\n\n/**\n *\n *\n * @param {*} domainValue\n * @param {*} scale\n * @param {*} domain\n * @returns\n */\nconst indexedRange = (domainValue, scale, domain) => {\n const numVal = (domainValue - domain[0]) / (domain[domain.length - 1] - domain[0]);\n\n return scale(numVal);\n};\n\n/**\n *\n *\n * @param {*} domainValue\n * @param {*} scale\n */\nconst normalRange = (domainValue, scale) => scale(domainValue);\n\n/**\n *\n *\n * @param {*} stops\n */\nconst strategies = () => ({\n [`${CONTINOUS}-${CONTINOUS}-${SEQUENTIAL}`]: {\n scale: SEQUENTIAL,\n domainRange: () => indexedDomainMeasure,\n value: () => indexedRange\n },\n [`${CONTINOUS}-${DISCRETE}-${SEQUENTIAL}`]: {\n scale: SEQUENTIAL,\n domainRange: () => indexedDomainMeasure,\n value: () => indexedRange\n },\n [`${DISCRETE}-${DISCRETE}-${SEQUENTIAL}`]: {\n scale: SEQUENTIAL,\n domainRange: () => indexedDomain,\n value: () => uniqueRange\n },\n [`${DISCRETE}-${DISCRETE}-${ORDINAL}`]: {\n scale: ORDINAL,\n domainRange: () => normalDomain,\n value: () => normalRange\n },\n [`${CONTINOUS}-${CONTINOUS}-${ORDINAL}`]: {\n scale: LINEAR,\n domainRange: () => continousSteppedDomain,\n value: () => normalRange\n },\n [`${CONTINOUS}-${DISCRETE}-${ORDINAL}`]: {\n scale: QUANTILE,\n domainRange: () => steppedDomain,\n value: () => normalRange\n\n }\n});\n\n/**\n *\n *\n * @param {*} domainType\n * @param {*} rangeType\n * @param {*} schemeType\n * @param {*} stops\n */\nexport const strategyGetter = (domainType, rangeType, schemeType, stops) =>\n strategies(stops)[`${domainType}-${rangeType}-${schemeType || ''}`];\n","/**\n * @module Axis\n * This file declares a class that is used to render an axis to add meaning to\n * plots.\n */\nimport { getUniqueId, generateGetterSetters, rgbToHsv } from 'muze-utils';\nimport { createScale, getScheme, getSchemeType } from '../scale-creator';\nimport { CONTINOUS, DISCRETE, COLOR } from '../enums/constants';\nimport { strategyGetter } from './color-strategy';\nimport { DEFAULT_CONFIG } from './defaults';\nimport { PROPS, getHslString } from './props';\n\n/**\n* This class is used to instantiate a SimpleAxis.\n* @class SimpleAxis\n*/\nexport default class ColorAxis {\n\n /**\n * Creates an instance of SimpleAxis.\n * @param {Object} config input parameters.\n * @param {Object | undefined} params.range Type of color range.\n * @param {string} params.name the label to show on axis.\n * @param {string} params.type The type of scale to handle.\n * @memberof ColorAxis\n */\n constructor (config) {\n generateGetterSetters(this, PROPS);\n this.config(config);\n\n this._domainType = this._config.type === 'linear' ? CONTINOUS : DISCRETE;\n this._rangeType = (this._config.type === 'linear' && !this._config.step) ? CONTINOUS : DISCRETE;\n\n this._schemeType = getSchemeType(this._config.range);\n\n this._colorStrategy = this.setColorStrategy(this._domainType, this._rangeType, this._schemeType);\n this._scale = this.createScale(this._colorStrategy);\n\n this._id = getUniqueId();\n\n this.updateDomain(config.domain);\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof ColorAxis\n */\n static defaultConfig () {\n return DEFAULT_CONFIG;\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof ColorAxis\n */\n static type () {\n return COLOR;\n }\n\n /**\n *\n *\n * @param {*} colorStrategy\n * @returns\n * @memberof ColorAxis\n */\n createScale (colorStrategy) {\n const { range } = this.config();\n if (range && typeof (range) === 'string') {\n return getScheme(range);\n }\n return createScale({\n type: colorStrategy.scale,\n range\n });\n }\n\n /**\n *\n *\n * @param {*} domainType\n * @param {*} rangeType\n * @param {*} schemeType\n * @returns\n * @memberof ColorAxis\n */\n setColorStrategy (domainType, rangeType, schemeType) {\n const { stops } = this.config();\n\n return strategyGetter(domainType, rangeType, schemeType, stops);\n }\n\n /**\n *\n *\n * @param {*} domainVal\n * @returns\n * @memberof ColorAxis\n */\n getHslString (hslColorArray) {\n return getHslString(hslColorArray);\n }\n /**\n *\n *\n * @param {*} domainVal\n * @returns\n * @memberof ColorAxis\n */\n getColor (domainVal) {\n return this.getHslString(this.getRawColor(domainVal));\n }\n /**\n *\n *\n * @param {*} domainVal\n * @returns\n * @memberof ColorAxis\n */\n getRawColor (domainVal) {\n if (this.domain() && domainVal !== undefined) {\n const scale = this.scale();\n const range = scale.range ? scale.range() : null;\n const color = this._colorStrategy.value(range)(domainVal, scale, this.domain(), this.uniqueValues());\n\n if (typeof color === 'string') {\n const col = color.substring(color.indexOf('(') + 1, color.lastIndexOf(')')).split(/,\\s*/);\n return rgbToHsv(...col);\n }\n return [...color];\n }\n return [...this.config().value];\n }\n\n /**\n *\n *\n * @param {*} [domain=[]]\n * @returns\n * @memberof ColorAxis\n */\n updateDomain (domain = []) {\n if (domain.length) {\n const scale = this.scale();\n const range = scale.range ? scale.range() : null;\n const domainRangeFn = this._colorStrategy.domainRange();\n const scaleInfo = domainRangeFn(domain, this.config().stops, range);\n\n this.domain(scaleInfo.domain);\n scaleInfo.range && this.scale().range(scaleInfo.range);\n this.uniqueValues(scaleInfo.uniqueVals);\n this.scale().domain(scaleInfo.scaleDomain || this.domain());\n }\n return this;\n }\n\n /**\n * This method returns an object that can be used to\n * reconstruct this instance.\n *\n * @return {Object} the serializable props of axis\n * @memberof ShapeAxis\n */\n serialize () {\n return {\n type: this.constructor.type(),\n scale: this.scale(),\n domain: this.domain(),\n config: this.config()\n };\n }\n\n transformColor (color, transformationArr) {\n const h = color[0] * 360;\n const s = color[1] * 100;\n const l = color[2] * 100;\n const a = color[3] || 1;\n const newH = h + transformationArr[0];\n const newS = s + transformationArr[1];\n const newL = l + transformationArr[2];\n const newA = a + transformationArr[3] || 0;\n\n return { color: `hsla(${newH},${newS}%,${newL}%,${newA})`, hsla: [newH / 360, newS / 100, newL / 100, newA] };\n }\n\n /**\n * Returns the id of the axis.\n * @return {string} Unique identifier of the axis.\n */\n id () {\n return this._id;\n }\n\n}\n","export const DEFAULT_CONFIG = {\n value: 36,\n range: [36, 1000]\n};\n","import { numberInterpolator, piecewiseInterpolator } from 'muze-utils';\nimport { CONTINOUS, DISCRETE } from '../enums/constants';\nimport { LINEAR, THRESHOLD } from '../enums/scale-type';\n\n/**\n *\n *\n * @param {*} domain\n * @returns\n */\nconst indexedDomain = (domain) => {\n const uniqueVals = domain;\n const retDomain = domain.map((d, i) => (i) / (domain.length - 1));\n return { domain: retDomain, uniqueVals, scaleDomain: [0, 1] };\n};\n\n/**\n *\n *\n * @param {*} domain\n * @returns\n */\nconst normalDomain = (domain) => {\n const uniqueVals = domain;\n return { uniqueVals, domain };\n};\n\n/**\n *\n *\n * @param {*} domain\n * @param {*} intervals\n * @returns\n */\nconst steppedDomain = (domain, intervals) => {\n let newIntervals = [];\n if (intervals instanceof Array) {\n newIntervals = intervals.slice().sort();\n } else {\n const interpolator = numberInterpolator()(...domain);\n for (let i = 0; i < intervals; i++) {\n newIntervals[i] = interpolator(i / (intervals - 1));\n }\n }\n if (newIntervals[0] < domain[0]) {\n newIntervals.shift();\n }\n const retDomain = newIntervals;\n return { uniqueVals: newIntervals, domain: retDomain, nice: true };\n};\n\n/**\n *\n *\n * @param {*} domainValue\n * @param {*} scale\n * @param {*} domain\n * @param {*} uniqueVals\n * @returns\n */\nconst discreteRange = (domainValue, scale, domain) => {\n const numVal = (domainValue - domain[0]) / (domain[domain.length - 1] - domain[0]);\n const interpolator = numberInterpolator()(...scale.range());\n return interpolator(numVal);\n};\n\n/**\n *\n *\n * @param {*} domainValue\n * @param {*} scale\n * @param {*} domain\n * @returns\n */\nconst pieceWiseRange = (domainValue, scale, domain, uniqueVals) => {\n const index = uniqueVals.indexOf(domainValue);\n const numVal = domain[index];\n const fn = piecewiseInterpolator()(numberInterpolator(), [...scale.range()]);\n return fn(numVal);\n};\n\n/**\n *\n *\n * @param {*} domainValue\n * @param {*} scale\n */\nconst normalRange = (domainValue, scale) => scale(domainValue);\n\n/**\n *\n *\n * @param {*} intervals\n */\nconst strategies = {\n [`${DISCRETE}-${CONTINOUS}`]: {\n scale: LINEAR,\n domain: indexedDomain,\n range: pieceWiseRange\n },\n [`${CONTINOUS}-${CONTINOUS}`]: {\n scale: LINEAR,\n domain: normalDomain,\n range: normalRange\n },\n [`${CONTINOUS}-${DISCRETE}`]: {\n scale: THRESHOLD,\n domain: steppedDomain,\n range: discreteRange\n }\n};\n\n/**\n *\n *\n * @param {*} domainType\n * @param {*} rangeType\n * @param {*} schemeType\n * @param {*} intervals\n */\nexport const strategyGetter = (domainType, rangeType) =>\n strategies[`${domainType}-${rangeType}`];\n","export const PROPS = {\n config: {},\n domain: {\n sanitization: (context, value) => {\n context.scale().domain(value);\n return value;\n }\n },\n range: {},\n scale: {},\n uniqueValues: {}\n};\n","/**\n * @module Axis\n * This file declares a class that is used to render an axis to add meaning to\n * plots.\n */\nimport { getUniqueId, generateGetterSetters } from 'muze-utils';\nimport { createScale } from '../scale-creator';\nimport { DEFAULT_CONFIG } from './defaults';\nimport { SIZE, CONTINOUS, DISCRETE } from '../enums/constants';\nimport { strategyGetter } from './size-strategy';\nimport { PROPS } from './props';\n\n/**\n* This class is used to instantiate a SimpleAxis.\n* @class SimpleAxis\n*/\nexport default class SizeAxis {\n\n /**\n * Creates an instance of SimpleAxis.\n * @param {Object} config input parameters.\n * @memberof SizeAxis\n */\n constructor (config) {\n generateGetterSetters(this, PROPS);\n\n this._id = getUniqueId();\n this._config = Object.assign({}, this.constructor.defaultConfig(), config);\n // @todo: Will use configuration override using scale decorator\n this._domainType = this._config.type === 'linear' ? CONTINOUS : DISCRETE;\n this._rangeType = CONTINOUS;\n\n this._sizeStrategy = this.setStrategy(this._domainType, this._rangeType);\n this._scale = this.createScale(this._sizeStrategy);\n this._range = this._config.range;\n\n this.updateDomain(config.domain);\n }\n\n /**\n *\n *\n * @param {*} domainType\n * @param {*} rangeType\n * @param {*} schemeType\n * @returns\n * @memberof ColorAxis\n */\n setStrategy (domainType, rangeType) {\n return strategyGetter(domainType, rangeType);\n }\n\n /**\n *\n *\n * @returns\n * @memberof SizeAxis\n */\n createScale (strategy) {\n const {\n range\n } = this.config();\n return createScale({\n type: strategy.scale,\n range\n });\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof ColorAxis\n */\n static defaultConfig () {\n return DEFAULT_CONFIG;\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof ColorAxis\n */\n static type () {\n return SIZE;\n }\n\n /**\n *\n *\n * @param {*} domainVal\n * @returns\n * @memberof SizeAxis\n */\n getSize (domainVal = 0) {\n let sizeVal = 1;\n const {\n value\n } = this.config();\n const scale = this.scale();\n const domain = this.domain() || [1, 1];\n\n if (!scale || domain[0] === domain[1]) {\n sizeVal = value;\n } else {\n return this._sizeStrategy.range(domainVal, scale, this.domain(), this.uniqueValues());\n }\n return sizeVal;\n }\n\n /**\n * This method is used to assign a domain to the axis.\n *\n * @param {Array} domain the domain of the scale\n * @memberof SizeAxis\n */\n updateDomain (domain) {\n if (domain) {\n const domainFn = this._sizeStrategy.domain;\n\n const domainInfo = domainFn(domain, this.config().intervals);\n\n this.domain(domainInfo.domain);\n this.uniqueValues(domainInfo.uniqueVals);\n\n this.scale().domain(domainInfo.scaleDomain || this.domain());\n }\n return this;\n }\n\n /**\n * This method returns an object that can be used to\n * reconstruct this instance.\n *\n * @return {Object} the serializable props of axis\n * @memberof ShapeAxis\n */\n serialize () {\n return {\n type: this.constructor.type(),\n scale: this.scale(),\n domain: this.domain(),\n range: this.range(),\n config: this.config()\n };\n }\n\n /**\n * Returns the id of the axis.\n * @return {string} Unique identifier of the axis.\n */\n id () {\n return this._id;\n }\n}\n","export const DEFAULT_CONFIG = {\n generator: null,\n value: 'circle',\n range: ['circle', 'diamond', 'star', 'cross', 'square', 'wye', 'triangle']\n};\n","export const PROPS = {\n config: {},\n domain: {},\n scale: {},\n uniqueValues: {},\n generator: {}\n};\n\n","/**\n * @module Axis\n * This file declares a class that is used to render an axis to add meaning to\n * plots.\n */\nimport { getUniqueId, getSymbol, generateGetterSetters, mergeRecursive } from 'muze-utils';\nimport { createScale } from '../scale-creator';\nimport { DEFAULT_CONFIG } from './defaults';\nimport { SHAPE } from '../enums/constants';\nimport { shapeGenerator } from './helper';\nimport { PROPS } from './props';\n\n/**\n* This class is used to instantiate a SimpleAxis.\n* @class SimpleAxis\n*/\nexport default class ShapeAxis {\n /**\n * Creates an instance of SimpleAxis.\n * @param {Object} params input parameters.\n * @param {Object | undefined} params.range Type of color scheme.\n * @memberof ShapeAxis\n */\n constructor (config) {\n generateGetterSetters(this, PROPS);\n\n this._id = getUniqueId();\n this._config = Object.assign({}, this.constructor.defaultConfig());\n this._config = mergeRecursive(this._config, config);\n\n this._scale = createScale({\n type: 'ordinal',\n range: this._config.range\n });\n this.updateDomain(config.domain);\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof ColorAxis\n */\n static defaultConfig () {\n return DEFAULT_CONFIG;\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof ColorAxis\n */\n static type () {\n return SHAPE;\n }\n\n /**\n *\n *\n * @param {*} value\n * @returns\n * @memberof ShapeAxis\n */\n getShape (value) {\n if (!this.scale() || !this.domain() || !value) {\n return this.config().value;\n }\n\n if (this._generatedShapes) {\n return this._generatedShapes[value];\n }\n\n const shapeType = this.scale()(value);\n if (shapeType === 'string') {\n return getSymbol(shapeType);\n }\n\n return shapeType;\n }\n\n /**\n * This method is used to assign a domain to the axis.\n *\n * @param {Array} domain the domain of the scale\n * @memberof ShapeAxis\n */\n updateDomain (domain = []) {\n if (domain.length) {\n this.uniqueValues(domain);\n this.domain(domain);\n this.scale().domain(domain);\n\n if (this.config().generator) {\n this._generatedShapes = shapeGenerator(domain, this.config().generator);\n }\n }\n return this;\n }\n\n /**\n * This method returns an object that can be used to\n * reconstruct this instance.\n *\n * @return {Object} the serializable props of axis\n * @memberof ShapeAxis\n */\n serialize () {\n return {\n type: this.constructor.type(),\n scale: this.scale(),\n domain: this.domain(),\n range: this.config().range,\n config: this.config()\n };\n }\n\n /**\n * Returns the id of the axis.\n * @return {string} Unique identifier of the axis.\n */\n id () {\n return this._id;\n }\n}\n","/**\n *\n *\n * @param {*} domain\n * @param {*} generatorFn\n * @returns\n */\nexport const shapeGenerator = (domain, generatorFn) => {\n const generatedShapes = {};\n domain.forEach((value) => {\n generatedShapes[value] = generatorFn(value);\n });\n return generatedShapes;\n};\n","import * as ScaleType from './enums/scale-type';\n\nconst DATA_TYPES = {\n DIMENSION: 'dimension',\n CATEGORICAL: 'categorical',\n MEASURE: 'measure',\n DATETIME: 'temporal'\n};\n\n/**\n * Map of DataModel types to associated field types.\n */\nexport const dataTypeScaleMap = {\n [DATA_TYPES.DIMENSION]: ScaleType.BAND,\n [DATA_TYPES.MEASURE]: ScaleType.LINEAR,\n [DATA_TYPES.DATETIME]: ScaleType.TIME\n};\n\n","import { nestCollection } from 'muze-utils';\n\n/**\n * Create multiple datasets from a single dataset by grouping the data using\n * a dimensional field.\n * @param {Array} schema Name and type of fields are stored in schema\n * @param {Array} data Data array\n * @param {Object} config Configuration object\n * @return {Array} Grouped data array\n */\nexport default (schema, data, config) => {\n const groupBy = config.groupBy instanceof Array ? config.groupBy : [config.groupBy];\n const groupByIndices = groupBy.map(fieldName => schema.findIndex(d => d.name === fieldName));\n\n if (groupByIndices.find(d => d === -1) !== undefined) {\n throw new Error(`Groupby field ${groupBy} not found in schema`);\n }\n\n return nestCollection({\n keys: groupByIndices,\n data\n });\n};\n","/**\n * @module Transform\n * This file exports a function that is used to implement\n * the identity transform\n */\n /* eslint no-unused-vars: 0 */\n /**\n * This function accepts data and returns the data unchanged.\n * @param {Object} schema The schema.\n * @param {Array} data The data array.\n * @param {Object} config The config object.\n * @return {Array} The unchanged data.\n */\n function identityTransform (schema, data, config) {\n return data;\n }\n\n export default identityTransform;\n","/**\n * @module Transform\n * This file exports the transform factory.\n */\nimport * as TransformType from '../enums/transform-type';\nimport identity from '../identity-transform';\nimport group from '../group-transform';\nimport stack from '../stack-transform';\n\n/* istanbul ignore next */\nconst transformMap = {\n [TransformType.IDENTITY]: identity,\n [TransformType.GROUP]: group,\n [TransformType.STACK]: stack\n};\n\n/**\n * This function is used to retirn a transform associated\n * with the given type.\n *\n * @param {string} type The type of the transform.\n * @return {Function} The transform function.\n */\nfunction transformFactory (type) {\n const transform = transformMap[type];\n if (typeof transform !== 'function') {\n throw new Error('Invalid transform type supplied.');\n }\n return transform;\n}\n\nexport default transformFactory;\n","/**\n * @module Transform\n * This module exports constants that are used to reference transforms in\n * a consistent manner throughout the project.\n */\n/* eslint one-var: 0 */\n export const IDENTITY = 'identity';\n export const GROUP = 'group';\n export const STACK = 'stack';\n export const FRACTURE = 'fracture';\n","import { stack } from 'muze-utils';\n\nimport group from '../group-transform';\n/*\n Normalize the data to a form which can be given to d3 stack for stacking the data\n ['Product', 'Sales', 'Region'],\n 0 ['A', 2000, 'North'],\n 1 ['A', 3000, 'South'],\n 2 ['B', 3000, 'South'],\n 3 ['B', 2000, 'North'],\n 4 ['C', 3000, 'South'],\n 5 ['C', 2000, 'North']\n |\n |\n ['Product', 'North', 'South'],\n ['A', 2000, 3000],\n ['B', 2000, 3000],\n ['C', 2000, 3000]\n*/\n// eslint-disable-next-line require-jsdoc\nconst normalizeData = (data, schema, valueField, uniqueField, groupBy) => {\n const groupedData = group(schema, data, {\n groupBy: uniqueField\n });\n const uniqueFieldIndex = schema.findIndex(d => d.name === uniqueField);\n const valueFieldIndex = schema.findIndex(d => d.name === valueField);\n const seriesKeyIndex = schema.findIndex(d => d.name === groupBy);\n const seriesKeys = data.map(d => d[seriesKeyIndex]).filter((item, pos, arr) => arr.indexOf(item) === pos).sort();\n const fieldNames = schema.reduce((acc, obj, i) => {\n acc[i] = obj.name;\n return acc;\n }, {});\n const dataArr = groupedData.map((arr) => {\n const tuples = {};\n const rowObj = arr.values.reduce((acc, row) => {\n acc = row.reduce((obj, value, i) => {\n if (i === seriesKeyIndex) {\n obj[value] = row[valueFieldIndex];\n tuples[value] = row;\n } else if (i !== valueFieldIndex) {\n obj[fieldNames[i]] = value;\n }\n return obj;\n }, acc);\n return acc;\n }, {});\n rowObj._tuple = tuples;\n // Set missing values field to zero value\n seriesKeys.forEach((seriesKey) => {\n if (rowObj[seriesKey] === undefined) {\n rowObj[seriesKey] = 0;\n const newArr = new Array(arr.values[0].length);\n newArr[uniqueFieldIndex] = arr.key;\n newArr[seriesKeyIndex] = seriesKey;\n rowObj._tuple[seriesKey] = newArr;\n }\n });\n return rowObj;\n });\n\n return {\n data: dataArr,\n keys: seriesKeys\n };\n};\n/**\n * Generate a stacked representation of data\n * @param {Array} schema schema Array\n * @param {Array} data data array\n * @param {Object} config Configuration object\n * @return {Array} stacked data\n */\nexport default (schema, data, config) => {\n const uniqueField = config.uniqueField;\n const valueField = config.value;\n const groupBy = config.groupBy;\n const sort = config.sort || 'descending';\n const normalizedData = normalizeData(data, schema, valueField, uniqueField, groupBy);\n const keys = normalizedData.keys;\n const map = {};\n const orderBy = config.orderBy;\n const orderIndex = schema.findIndex(d => d.name === orderBy);\n const groupByIndex = schema.findIndex(d => d.name === groupBy);\n if (orderIndex !== -1) {\n keys.forEach((key) => {\n const name = data.find(d => d[groupByIndex] === key);\n map[key] = name[orderIndex];\n });\n normalizedData.keys.sort((a, b) => map[a].localeCompare(map[b]));\n }\n\n const stackData = stack({\n keys: normalizedData.keys,\n offset: config.offset || 'diverging',\n order: sort,\n data: normalizedData.data\n });\n stackData.forEach((seriesData) => {\n seriesData.forEach((dataObj) => {\n dataObj.data = dataObj.data._tuple[seriesData.key];\n });\n });\n return stackData;\n};\n\n","import {\n FieldType,\n getDomainFromData,\n setStyles,\n easeFns,\n selectElement,\n DimensionSubtype\n} from 'muze-utils';\nimport { ScaleType } from '@chartshq/muze-axis';\nimport { transformFactory } from '@chartshq/transform';\nimport { IDENTITY, STACK, GROUP, COLOR, SHAPE, SIZE, ENCODING } from '../enums/constants';\n\nconst BAND = ScaleType.BAND;\n\nexport const getLayerColor = ({ datum, index }, { colorEncoding, colorAxis, colorFieldIndex }) => {\n let rawColor = '';\n let color = '';\n if (colorEncoding && colorEncoding.value instanceof Function) {\n color = colorEncoding.value(datum, index);\n rawColor = colorEncoding.value(datum, index);\n } else {\n rawColor = colorAxis.getRawColor(datum._data[colorFieldIndex]);\n color = colorAxis.getHslString(rawColor);\n }\n return { color, rawColor };\n};\n\nconst transfromColor = (colorAxis, datum, styleType, intensity) => {\n datum.meta.stateColor[styleType] = datum.meta.stateColor[styleType] || datum.meta.originalColor;\n const fillColorInfo = colorAxis.transformColor(datum.meta.stateColor[styleType], intensity);\n datum.meta.stateColor[styleType] = fillColorInfo.hsla;\n\n return fillColorInfo;\n};\n\nexport const applyInteractionStyle = (context, selectionSet, interactionStyles, config) => {\n const elements = context.getPlotElementsFromSet(selectionSet);\n const axes = context.axes();\n const colorAxis = axes.color;\n const apply = config.apply;\n const interactionType = config.interactionType;\n interactionStyles.forEach((style) => {\n const styleType = style.type;\n elements.style(styleType, ((d) => {\n const { colorTransform, stateColor, originalColor } = d.meta;\n colorTransform[interactionType] = colorTransform[interactionType] || {};\n if (apply && !colorTransform[interactionType][styleType]) {\n // fade selections\n colorTransform[interactionType][styleType] = style.intensity;\n const color = transfromColor(colorAxis, d, styleType, style.intensity).color;\n return color;\n }\n if (!apply && colorTransform[interactionType][styleType]) {\n // unfade selections\n colorTransform[interactionType][styleType] = null;\n return transfromColor(colorAxis, d, styleType, style.intensity.map(e => -e)).color;\n }\n const [h, s, l, a] = stateColor[styleType] ? stateColor[styleType] : originalColor;\n return `hsla(${h * 360},${s * 100}%,${l * 100}%, ${a || 1})`;\n }));\n });\n};\n\n/**\n *\n *\n * @param {*} selectionSet\n * @param {*} className\n * @param {*} hasFaded\n */\nexport const fadeUnfadeSelection = (context, selectionSet, hasFaded, interaction) => {\n const interactionConfig = { interaction, apply: hasFaded };\n applyInteractionStyle(context, selectionSet, 'fade', interactionConfig);\n};\n\n/**\n *\n *\n * @param {*} selectionSet\n * @param {*} className\n * @param {*} hasFaded\n */\nexport const focusUnfocusSelection = (context, selectionSet, isFocussed, interaction) => {\n const interactionConfig = { interaction, apply: isFocussed };\n applyInteractionStyle(context, selectionSet, 'focus', interactionConfig);\n};\n\n/**\n *\n *\n * @param {*} axes\n * @returns\n */\nexport const getAxesScales = (axes) => {\n const [xAxis, yAxis] = [ENCODING.X, ENCODING.Y].map(e => axes[e]);\n const [xScale, yScale] = [xAxis, yAxis].map(e => e && e.scale());\n return {\n xAxis,\n yAxis,\n xScale,\n yScale\n };\n};\n\n/**\n *\n *\n * @param {*} encoding\n * @param {*} fieldsConfig\n * @returns\n */\nexport const getEncodingFieldInf = (encoding, fieldsConfig) => {\n const [xField, yField, x0Field, y0Field, colorField, shapeField, sizeField] =\n [ENCODING.X, ENCODING.Y, ENCODING.X0, ENCODING.Y0, COLOR, SHAPE, SIZE].map(e => encoding[e] &&\n encoding[e].field);\n\n const [xFieldType, yFieldType] = [xField, yField, x0Field, y0Field].map(e => fieldsConfig[e] &&\n fieldsConfig[e].def.type);\n\n const [xFieldSubType, yFieldSubType] = [xField, yField].map(e => fieldsConfig[e] && (fieldsConfig[e].def.subtype ||\n fieldsConfig[e].def.type));\n\n const [xFieldIndex, yFieldIndex, x0FieldIndex, y0FieldIndex] = [xField, yField, x0Field, y0Field]\n .map(e => fieldsConfig[e] && fieldsConfig[e].index);\n\n return {\n xField,\n yField,\n colorField,\n shapeField,\n sizeField,\n x0Field,\n y0Field,\n xFieldType,\n yFieldType,\n xFieldSubType,\n yFieldSubType,\n xFieldIndex,\n yFieldIndex,\n x0FieldIndex,\n y0FieldIndex\n };\n};\n\n/**\n *\n *\n * @param {*} layerConfig\n * @param {*} fieldsConfig\n * @returns\n */\nexport const getValidTransform = (layerConfig, fieldsConfig, encodingFieldInf) => {\n let transformType;\n const {\n transform\n } = layerConfig;\n const {\n xField,\n yField,\n xFieldType,\n yFieldType\n } = encodingFieldInf;\n const groupByField = transform.groupBy;\n const groupByFieldMeasure = fieldsConfig[groupByField] && fieldsConfig[groupByField].def.type === FieldType.MEASURE;\n transformType = transform.type;\n if (!xField || !yField || groupByFieldMeasure || !groupByField || xFieldType === FieldType.DIMENSION &&\n yFieldType === FieldType.DIMENSION) {\n transformType = IDENTITY;\n }\n return transformType;\n};\n\n/**\n *\n *\n * @param {*} dataModel\n * @param {*} config\n * @param {*} transformType\n * @returns\n */\nexport const transformData = (dataModel, config, transformType, encodingFieldInf) => {\n const data = dataModel.getData({ withUid: true });\n const schema = data.schema;\n const transform = config.transform;\n const {\n xField,\n yField,\n xFieldType,\n yFieldType\n } = encodingFieldInf;\n const uniqueField = xFieldType === FieldType.MEASURE ? yField : xField;\n\n return transformFactory(transformType)(schema, data.data, {\n groupBy: transform.groupBy,\n uniqueField,\n sort: transform.sort || 'none',\n offset: transform.offset,\n orderBy: transform.orderBy,\n value: yFieldType === FieldType.MEASURE ? yField : xField\n }, data.uids);\n};\n\nexport const getIndividualClassName = (d, i, data, context) => {\n const className = context.config().individualClassName;\n let classNameStr = '';\n if (className instanceof Function) {\n classNameStr = className(d, i, data, context);\n }\n return classNameStr;\n};\n\n/*\n * This method resolves the x, y, x0 and y0 values from the transformed data.\n * It also checks the type of transformed data for example, if it is a stacked data\n * then it fetches the y and y0 values from the stacked data.\n * @param {Array.} transformedData transformed data\n * @param {Object} fieldsConfig field definitions\n * @param {string} transformType type of transformed data - stack, group or identity.\n * @return {Array.} Normalized data\n*/\nexport const getNormalizedData = (transformedData, fieldsConfig, encodingFieldInf, transformType) => {\n const transformedDataArr = transformType === IDENTITY ? [transformedData] : transformedData;\n const {\n xFieldType,\n xFieldIndex,\n yFieldIndex,\n x0FieldIndex,\n y0FieldIndex\n } = encodingFieldInf;\n const fieldsLen = Object.keys(fieldsConfig).length;\n /**\n * Returns normalized data from transformed data. It recursively traverses through\n * the transformed data if there it is nested.\n */\n return transformedDataArr.map((data) => {\n const values = transformType === GROUP ? data.values : data;\n return values.map((d) => {\n let pointObj = {};\n let tuple;\n if (transformType === STACK) {\n tuple = d.data || [];\n let y;\n let y0;\n let x;\n let x0;\n if (d[1] >= d[0]) {\n y = x0 = d[1];\n x = y0 = d[0];\n } else {\n y = x0 = d[0];\n x = y0 = d[1];\n }\n\n pointObj = xFieldType === FieldType.MEASURE ? {\n x,\n x0,\n y: tuple[yFieldIndex],\n y0: tuple[yFieldIndex]\n } : {\n x: tuple[xFieldIndex],\n x0: tuple[xFieldIndex],\n y,\n y0\n };\n pointObj._data = tuple;\n pointObj._id = tuple[fieldsLen];\n } else {\n pointObj = {\n x: d[xFieldIndex],\n y: d[yFieldIndex],\n x0: d[x0FieldIndex],\n y0: d[y0FieldIndex]\n };\n pointObj._data = d;\n pointObj._id = d[fieldsLen];\n }\n return pointObj;\n });\n }).filter(d => d.length);\n};\n\nexport const calculateDomainFromData = (data, encodingFieldInf, transformType) => {\n const {\n xFieldSubType,\n yFieldSubType,\n xField,\n yField,\n x0Field,\n y0Field\n } = encodingFieldInf;\n const domains = {};\n const yEnc = ENCODING.Y;\n const xEnc = ENCODING.X;\n if (xField) {\n domains.x = getDomainFromData(data, x0Field || transformType === STACK ? [xEnc, ENCODING.X0] : [xEnc, xEnc],\n xFieldSubType);\n }\n if (yField) {\n domains.y = getDomainFromData(data, y0Field || transformType === STACK ? [ENCODING.Y0, ENCODING.Y] :\n [yEnc, yEnc], yFieldSubType);\n }\n\n return domains;\n};\n\nexport const attachDataToVoronoi = (voronoi, points) => {\n voronoi.data([].concat(...points).filter(d => d._id !== undefined).map((d) => {\n const point = d.update;\n return {\n x: point.x,\n y: point.y,\n data: d\n };\n }));\n};\n\n/**\n *\n *\n * @param {*} target\n * @param {*} styles\n * @param {*} remove\n */\nexport const updateStyle = (target, styles, remove) => {\n for (const key in styles) {\n if ({}.hasOwnProperty.call(styles, key)) {\n target.style(key, remove ? null : styles[key]);\n }\n }\n};\n\n/**\n *\n *\n * @param {*} mount\n * @param {*} context\n */\nexport const animateGroup = (mount, context) => {\n let groupTransition;\n let update;\n const { transition, groupAnimateStyle } = context;\n const { duration, effect, disabled } = transition;\n if (groupAnimateStyle) {\n setStyles(mount.node(), groupAnimateStyle.enter);\n update = groupAnimateStyle.update;\n if (!disabled) {\n groupTransition = mount.transition()\n .ease(easeFns[effect])\n .duration(duration)\n .on('end', function () {\n updateStyle(selectElement(this), update, true);\n });\n } else {\n groupTransition = mount;\n }\n updateStyle(groupTransition, update);\n }\n};\n\nexport const positionPoints = (context, points) => {\n const positioner = context.encodingTransform();\n if (positioner) {\n return positioner(points, context, { smartLabel: context._dependencies.smartLabel });\n }\n return points;\n};\n\n/**\n * Gets the width of each group. It gets the width from axis if it is available for\n * example when the scale is nominal else it calculates the width from the\n * range of the axis and number of data points.\n *\n * @param {SimpleAxis} axis instance of axis\n * @param {number} minDiff Minimum difference between data points\n * @return {number} width of each bar\n * @private\n*/\nexport const getGroupSpan = (axis, minDiff) => {\n let groupSpan;\n const width = axis.getUnitWidth();\n const scale = axis.scale();\n const range = scale.range();\n const domain = scale.domain();\n !width ? groupSpan = (Math.abs(range[1] - range[0]) / Math.abs(domain[1] - domain[0])) * minDiff :\n (groupSpan = width);\n\n return groupSpan;\n};\n\nexport const getPlotMeasurement = (context, dimensionalValues) => {\n const fieldInfo = context.encodingFieldsInf();\n const axes = context.axes();\n const transformType = context.transformType();\n const config = context.config();\n const bandScale = context._bandScale;\n\n return ['x', 'y'].map((type) => {\n let span = 0;\n let groupSpan = 0;\n let padding = 0;\n let offsetValues = [];\n if (fieldInfo[`${type}FieldType`] === FieldType.DIMENSION) {\n let actualGroupWidth;\n const isTemporal = fieldInfo[`${type}FieldSubType`] === DimensionSubtype.TEMPORAL;\n const timeDiff = isTemporal ? context.dataProps().timeDiffs[type] : 0;\n const axis = axes[type];\n const pad = config[`pad${type.toUpperCase()}`];\n const innerPadding = config.innerPadding;\n const keys = dimensionalValues;\n const scale = axis.scale();\n groupSpan = getGroupSpan(axis, timeDiff);\n const isAxisBandScale = axis.constructor.type() === BAND;\n const axisPadding = axis.config().padding;\n // If it is a grouped bar then the width of each bar in a grouping is retrieved from\n // a band scale. The band scale will have range equal to width of one group of bars and\n // the domain is set to series keys.\n if (transformType === 'group') {\n const groupPadding = isAxisBandScale ? 0 : axisPadding * groupSpan / 2;\n bandScale.range([groupPadding, groupSpan - groupPadding]).domain(keys).paddingInner(innerPadding);\n span = bandScale.bandwidth();\n actualGroupWidth = groupSpan - (isAxisBandScale ? 0 : axisPadding * groupSpan);\n offsetValues = keys.map(key => bandScale(key) - (isAxisBandScale ? 0 : (groupSpan / 2)));\n } else if (pad !== undefined) {\n let offset;\n if (isAxisBandScale) {\n const step = scale.step();\n offset = scale.padding() * step;\n span = scale.bandwidth() + offset;\n } else {\n span = groupSpan;\n }\n offsetValues = keys.map(() => (isAxisBandScale ? -(offset / 2) : -(span / 2)));\n } else {\n padding = isAxisBandScale ? 0 : axisPadding * groupSpan;\n span = groupSpan - padding;\n actualGroupWidth = span;\n offsetValues = keys.map(() => (isAxisBandScale ? 0 : -(span / 2)));\n }\n\n groupSpan = actualGroupWidth;\n padding = isAxisBandScale ? axisPadding * axis.scale().step() : axisPadding * groupSpan;\n }\n\n return {\n span,\n offsetValues,\n groupSpan,\n padding\n };\n });\n};\n","import { nextFrame } from 'muze-utils';\nimport { getValidTransform, getEncodingFieldInf } from '../helpers';\nimport * as PROPS from '../enums/props';\n\nexport const listenerMap = context => [\n {\n props: [PROPS.TRANSFORMED_DATA],\n listener: fetch => fetch(PROPS.DATA, PROPS.CONFIG, (dataModel, config) => {\n const dataModelValue = dataModel.value;\n const configValue = config.value;\n const encodingValue = configValue && configValue.encoding;\n if (dataModelValue && encodingValue) {\n const fieldsConfig = dataModelValue.getFieldsConfig();\n const encodingFieldsInf = getEncodingFieldInf(encodingValue, fieldsConfig);\n context.encodingFieldsInf(encodingFieldsInf);\n context.transformType(getValidTransform(configValue, fieldsConfig, encodingFieldsInf));\n return context.getTransformedData(dataModelValue, configValue, context.transformType(),\n encodingFieldsInf);\n }\n return null;\n }),\n type: 'computed'\n },\n {\n props: [PROPS.NORMALIZED_DATA],\n listener: fetch => fetch(PROPS.TRANSFORMED_DATA, (transformedData) => {\n const transformedDataValue = transformedData.value;\n if (transformedDataValue) {\n const fieldsConfig = context.data().getFieldsConfig();\n return context.getNormalizedData(transformedDataValue, fieldsConfig);\n }\n return null;\n }),\n type: 'computed'\n },\n {\n props: [PROPS.DOMAIN],\n listener: fetch => fetch(PROPS.NORMALIZED_DATA, (normalizedData) => {\n const normalizedDataValue = normalizedData.value;\n if (normalizedDataValue) {\n return context.calculateDomainFromData(normalizedDataValue, context.encodingFieldsInf(),\n context.data().getFieldsConfig());\n }\n return null;\n }),\n type: 'computed'\n },\n {\n props: [PROPS.DATA],\n listener: (data) => {\n if (data[1]) {\n nextFrame(() => {\n context.store().commit(PROPS.DATA_UPDATED, true);\n });\n }\n },\n type: 'registerImmediateListener'\n },\n {\n props: [PROPS.MOUNT, PROPS.DATA_UPDATED],\n listener: (mount, dataUpdated) => {\n if (mount[1] && dataUpdated[1]) {\n context.render(mount[1]);\n context.dependencies().throwback.commit('onlayerdraw', true);\n }\n },\n type: 'registerChangeListener'\n }\n];\n\n","import { mergeRecursive } from 'muze-utils';\nimport * as PROPS from '../enums/props';\n\nexport const defaultOptions = {\n [PROPS.CONFIG]: {\n value: null,\n meta: {\n sanitization: (config, oldConfig, context) => {\n const constructor = context.constructor;\n const newConf = mergeRecursive({}, constructor.defaultConfig());\n return constructor.defaultPolicy(newConf, config);\n }\n }\n },\n [PROPS.DATA]: {\n value: null,\n meta: {\n preset: (data, context) => {\n if (context._cacheEnabled) {\n context._cachedData.push(data);\n } else {\n context._cachedData = [data];\n }\n }\n }\n },\n [PROPS.MOUNT]: {\n value: null\n },\n [PROPS.AXES]: {\n value: null\n },\n [PROPS.MEASUREMENT]: {\n value: null\n }\n};\n","import {\n getUniqueId,\n mergeRecursive,\n Store,\n FieldType,\n selectElement,\n ReservedFields,\n registerListeners,\n transactor,\n DataModel,\n clone\n} from 'muze-utils';\nimport { SimpleLayer } from '../simple-layer';\nimport * as PROPS from '../enums/props';\nimport {\n transformData,\n calculateDomainFromData,\n getNormalizedData,\n applyInteractionStyle\n} from '../helpers';\nimport { listenerMap } from './listener-map';\nimport { defaultOptions } from './default-options';\n\n/**\n * An abstract class which gives defination of common layer functionality like\n * - transfromation data for various {@link mode}\n * - calculating data domain\n * - linking dependent layers\n * - merging policy of configuration\n * - interaction sideffect helpers\n * - retrieving dom elements from data using id\n * - retrieving the physical dimensions of marks\n * - disposing layer\n *\n * Every layer has to extend base layer and give concrete definition.\n * This layer does not have any default visual. A new layer has to define the logic of `render` for rendering the\n * visuals\n *\n * @public\n * @class\n * @namespace Muze\n */\nexport default class BaseLayer extends SimpleLayer {\n\n /**\n * Creates a layer using a configuration and data.\n *\n * @public\n *\n * @param {DataModel} data Instance of DataModel to be used. This DataModel instance serves as the data for a layer.\n * @param {Object} axes Axes instances to be used for rendering the layer. Axes are used for mapping data from\n * value to px.\n * @param {SimpleAxis} axes.x X axis of the layer. Based on the type of variable it gets instance of BandAxis,\n * TimeAxis, ContinuousAxis\n * @param {SimpleAxis} axes.y X axis of the layer. Based on the type of variable it gets instance of BandAxis,\n * TimeAxis, ContinuousAxis\n * @param {ColorAxis} axes.color Axis for coloring a layer using color interpolators\n * @param {ShapeAxis} axes.shape Axis for providing a shape\n * @param {SizeAxis} axes.shape Axis for determining size of a mark using size interpolator\n * @param {LayerConfig} config Configuration of the layer\n * @param {Object} dependencies Dependencies of the layer\n * @param {SmartLabel} smartLabel Smartlabel singleton instance\n */\n constructor (data, axes, config, dependencies) {\n super();\n this.store(new Store({\n DATA: null,\n [PROPS.DATA_UPDATED]: null\n }));\n transactor(this, defaultOptions, this.store().model);\n this.data(data);\n this.axes(axes);\n this.config(config);\n this.alias(this.constructor.formalName() + getUniqueId());\n this.dependencies(dependencies);\n this._points = [];\n this._cachedData = [];\n this._id = getUniqueId();\n this._measurement = {};\n registerListeners(this, listenerMap);\n }\n\n /**\n * Creates a layer instance\n * @return {BaseLayer} Instance of a layer\n */\n static create (...params) {\n return new this(...params);\n }\n\n /**\n * Default configuration of the layer. This configuration gets merged to the user passed configuration using a\n * plolicy. Base layer only returns part of configuraion, any layer overridding base layer should return its own\n * configuration.\n *\n * @public\n * @static\n *\n * @return {Object} Default configuration\n */\n static defaultConfig () {\n return {\n transform: {\n type: 'identity'\n }\n };\n }\n\n /**\n * Policy defines how user config gets merged to default config. The default policy here does a deep copy\n * operation.\n * Any policy which does more than deep copying should define the policy as a static member.\n *\n * @static\n * @public\n *\n * @param {LayerConfig} conf Configuration with which the user config will be merged\n * @param {LayerConfig} userConf Configuration given by the user\n *\n * @return {LayerConfig} Merged layer configuration\n */\n static defaultPolicy (conf, userConf) {\n return mergeRecursive(conf, userConf);\n }\n\n /**\n * Determines a name for a layer. This name of the layer is used in the input data to refer to this layer.\n * ```\n * .layer([\n * mark: 'bar',\n * encoding: { ... }\n * ])\n * ```\n *\n * @static\n * @public\n *\n * @returns {string} name of layer\n */\n static formalName () {\n return 'base';\n }\n\n store (...store) {\n if (store.length) {\n this._store = store[0];\n return this;\n }\n return this._store;\n }\n\n encodingFieldsInf (...fieldsInf) {\n if (fieldsInf.length) {\n this._encodingFieldsInf = fieldsInf[0];\n return this;\n }\n return this._encodingFieldsInf;\n }\n\n encodingTransform (...encodingTransform) {\n if (encodingTransform.length) {\n this._encodingTransform = encodingTransform[0];\n return this;\n }\n return this._encodingTransform;\n }\n\n /**\n * Provides a alias for a layer. Like it's possible to have same layer (like bar) multiple times, but among multiple\n * layers of same type if one layer has to be referred, alias is used. If no alias is given then `formalName` is set\n * as the alias name.\n *\n * @public\n *\n * If used as setter\n * @param {string} alias Name of the alias\n * @return {BaseLayer} Instance of current base layer\n *\n * If used as getter\n * @return {string} Alias of the current layer\n */\n alias (...params) {\n if (params.length) {\n this._alias = params[0];\n return this;\n }\n return this._alias || this.constructor.formalName();\n }\n\n dependencies (...params) {\n if (params.length) {\n this._dependencies = params[0];\n return this;\n }\n return this._dependencies;\n }\n\n enableCaching () {\n this._cacheEnabled = true;\n return this;\n }\n\n clearCaching () {\n this._cacheEnabled = false;\n return this.data(this._cachedData[0]);\n }\n\n /**\n * Serialize the schema. Merge config is used for serialization.\n *\n * @public\n *\n * @return {LayerConfig} Serialized schema\n */\n serialize () {\n return this.config();\n }\n\n /**\n * Returns the unique identifier of this layer. Id is auto generated during the creation proceess of a schema.\n *\n * @return {string} id of the layer\n */\n id () {\n return this._id;\n }\n\n /**\n * Gets the transform method from transform factory based on type of transform. It then calls the\n * transform method with the data and passes the configuration parameters of transform such as\n * groupBy, value field, etc.\n *\n * @public\n *\n * @param {DataModel} dataModel Instance of DataModel\n * @param {Object} config Configuration for transforming data\n * @return {Array.} Transformed data.\n */\n getTransformedData (dataModel, config, transformType, encodingFieldsInf) {\n return transformData(dataModel, config, transformType, encodingFieldsInf);\n }\n\n /**\n * Calculates the domain from the data.\n * It checks the type of field and calculates the domain based on that. For example, if it\n * is a quantitative or temporal field, then it calculates the min and max from the data or\n * if it is a nominal field then it gets all the values from the data of that field.\n * @param {Array} data DataArray\n * @param {Object} fieldsConfig Configuration of fields\n * @return {Array} Domain values array.\n */\n calculateDomainFromData (data) {\n let domains = {};\n const isEmpty = this.data().isEmpty();\n\n if (!isEmpty) {\n domains = calculateDomainFromData(data, this.encodingFieldsInf(), this.transformType());\n }\n return domains;\n }\n\n shouldDrawAnchors () {\n return false;\n }\n\n /**\n * Returns the domain for the axis.\n *\n * @param {string} encodingType type of encoding x, y, etc.\n * @return {Object} Axis domains\n */\n getDataDomain (encodingType) {\n const domains = this.store().get(PROPS.DOMAIN);\n return encodingType !== undefined ? domains[encodingType] || [] : domains;\n }\n\n /**\n * Returns the domain for the axis.\n *\n * @param {string} encodingType type of encoding x, y, etc.\n * @return {Object} Axis domains\n */\n getNormalizedData (transformedData, fieldsConfig) {\n return getNormalizedData(transformedData, fieldsConfig, this.encodingFieldsInf(), this.transformType());\n }\n\n /**\n * Abstract method for getting nearest point\n * @return {BaseLayer} Instance of base layer\n */\n getNearestPoint () {\n return null;\n }\n\n applyInteractionStyle (interactionType, selectionSet, apply) {\n const interactionConfig = this.config().interaction || {};\n\n const interactionStyles = interactionConfig[interactionType];\n if (interactionStyles) {\n applyInteractionStyle(this, selectionSet, interactionStyles, {\n apply,\n interactionType\n });\n }\n }\n\n /**\n *\n *\n * @returns\n * @memberof BaseLayer\n */\n transformType (...transformType) {\n if (transformType.length) {\n this._transformType = transformType[0];\n return this;\n }\n return this._transformType;\n }\n\n /**\n * Renders the layer\n * @return {BaseLayer} Instance of the layer.\n */\n render () {\n return this;\n }\n\n /**\n *\n *\n * @returns\n * @memberof BaseLayer\n */\n elemType () {\n return 'g';\n }\n\n /**\n * Disposes the entire layer\n * @return {BaseLayer} Instance of layer.\n */\n remove () {\n this.store().unsubscribeAll();\n selectElement(this.mount()).remove();\n return this;\n }\n\n /**\n * Stores point in an object with key as the categorical value or temporal value\n *\n * @param {string} key categorical value or temporal value\n * @param {Object} data Information of the data point\n * @return {BarLayer} Instance of bar layer\n */\n cachePoint (key, data) {\n if (key === null) {\n return this;\n }\n const pointMap = this._pointMap;\n !pointMap[key] && (pointMap[key] = []);\n pointMap[key].push(data);\n return this;\n }\n\n /**\n *\n *\n * @param {*} dataProps\n * @returns\n * @memberof BaseLayer\n */\n dataProps (...dataProps) {\n if (dataProps.length) {\n this._dataProps = dataProps[0];\n return this;\n }\n return this._dataProps;\n }\n\n /**\n *\n *\n * @param {*} data\n * @param {*} id\n * @returns\n * @memberof BaseLayer\n */\n getIdentifiersFromData (data) {\n const schema = this.data().getData().schema;\n const fieldsConfig = this.data().getFieldsConfig();\n const identifiers = [[], []];\n const {\n xFieldType,\n yFieldType,\n xField,\n yField\n } = this.encodingFieldsInf();\n\n const [xMeasure, yMeasure] = [xFieldType, yFieldType].map(type => type === FieldType.MEASURE);\n schema.forEach((d, i) => {\n const name = d.name;\n if (fieldsConfig[name].def.type === FieldType.DIMENSION) {\n identifiers[0].push(name);\n identifiers[1].push(data[i]);\n }\n });\n\n if (xMeasure && yMeasure) {\n const xMeasureIndex = fieldsConfig[xField].index;\n const yMeasureIndex = fieldsConfig[yField].index;\n identifiers[0].push(...[xField, yField]);\n identifiers[1].push(...[data[xMeasureIndex], data[yMeasureIndex]]);\n }\n return identifiers;\n }\n\n getPlotSpan () {\n return {\n x: 0,\n y: 0\n };\n }\n\n getPlotPadding () {\n return {\n x: 0,\n y: 0\n };\n }\n\n /**\n *\n *\n * @param {*} identifiers\n * @returns\n * @memberof BaseLayer\n */\n getPointsFromIdentifiers (identifiers, config = {}) {\n const getAllAttrs = config.getAllAttrs;\n const getBBox = config.getBBox;\n if (!this.data()) {\n return [];\n }\n let fieldNames;\n let values;\n if (identifiers instanceof DataModel) {\n const dataObj = identifiers.getData();\n fieldNames = dataObj.schema.map(d => d.name);\n values = dataObj.data;\n } else {\n fieldNames = identifiers[0];\n values = identifiers.slice(1, identifiers.length);\n }\n\n const points = this._points;\n const fieldsConfig = this.data().getFieldsConfig();\n\n const filteredPoints = [].concat(...points).filter((point) => {\n const { _data, _id } = point;\n\n return fieldNames.every((field, idx) => {\n if (field in fieldsConfig && fieldsConfig[field].def.type === FieldType.DIMENSION) {\n return values.findIndex(d => d[idx] === _data[fieldsConfig[field].index]) !== -1;\n } else if (field === ReservedFields.ROW_ID) {\n return values.findIndex(d => d[idx] === _id) !== -1;\n } return true;\n });\n });\n return getAllAttrs ? filteredPoints : filteredPoints.map((d) => {\n const obj = clone(d);\n if (getBBox) {\n const update = obj.update || obj;\n if (obj.size !== undefined) {\n const sizeVal = Math.sqrt(obj.size / Math.PI) * 2;\n update.width = sizeVal;\n update.height = sizeVal;\n update.x -= sizeVal / 2;\n update.y -= sizeVal / 2;\n } else {\n if (update.width === undefined) {\n update.width = 2;\n }\n if (update.height === undefined) {\n update.height = 2;\n }\n }\n }\n\n return obj.update || obj;\n }).sort((a, b) => a.y - b.y);\n }\n\n getTransformedDataFromIdentifiers (identifiers) {\n const { data: identifierData, schema: identifierSchema } = identifiers.getData();\n const normalizedData = this.store().get(PROPS.NORMALIZED_DATA);\n const fieldsConfig = this.data().getFieldsConfig();\n const {\n yField,\n xField,\n yFieldType,\n xFieldType\n } = this.encodingFieldsInf();\n let measureIndex;\n let enc;\n if (xFieldType === FieldType.MEASURE) {\n measureIndex = fieldsConfig[xField].index;\n enc = 'x';\n } else if (yFieldType === FieldType.MEASURE) {\n measureIndex = fieldsConfig[yField].index;\n enc = 'y';\n }\n\n const transformedData = [];\n normalizedData.forEach((dataArr) => {\n dataArr.forEach((dataObj) => {\n const tupleArr = dataObj._data;\n const exist = identifierSchema.every((obj, i) =>\n identifierData.findIndex(d => tupleArr[fieldsConfig[obj.name].index] === d[i]) !== -1);\n if (exist) {\n const transformedVal = dataObj[enc];\n const row = dataObj._data;\n const tuple = {};\n for (const key in fieldsConfig) {\n const index = fieldsConfig[key].index;\n tuple[key] = row[index];\n if (index === measureIndex) {\n tuple[key] = transformedVal;\n }\n }\n transformedData.push(tuple);\n }\n });\n });\n\n return [transformedData, this.data().getData().schema];\n }\n\n /**\n *\n *\n * @param {*} set\n * @returns\n * @memberof BaseLayer\n */\n getPlotElementsFromSet (set) {\n return selectElement(this.mount()).selectAll(this.elemType()).filter(data =>\n (data ? set.indexOf(data._id) !== -1 : false));\n }\n}\n","import {\n selectElement,\n makeElement,\n pathInterpolators,\n Symbols\n} from 'muze-utils';\nimport { updateStyle } from '../../helpers';\n\nconst line = Symbols.line;\n\n/**\n * Draws a line from the points\n * Generates a svg path string\n * @param {Object} params Contains container, points and interpolate attribute.\n */\nexport const drawLine = (context) => {\n let filteredPoints;\n const { container, points, interpolate, connectNullData, className, style, transition } = context;\n const mount = selectElement(container).attr('class', className);\n const curveInterpolatorFn = pathInterpolators[interpolate];\n const linepath = line()\n .curve(curveInterpolatorFn)\n .x(d => d.update.x)\n .y(d => d.update.y)\n .defined(d => d.update.y !== null);\n\n filteredPoints = points;\n if (connectNullData) {\n filteredPoints = points.filter(d => d.update.y !== null);\n }\n\n updateStyle(mount, style);\n let element = makeElement(mount, 'path', [1]);\n element.classed(points[0].className, true);\n if (!transition.disabled) {\n element = element.transition().duration(transition.duration);\n }\n element.attr('d', linepath(filteredPoints))\n .style('fill-opacity', 0);\n return element;\n};\n","import { CLASSPREFIX } from '../../enums/constants';\n\nexport const defaultConfig = {\n classPrefix: CLASSPREFIX,\n defClassName: 'layer-line',\n className: '',\n interpolate: 'linear',\n transform: {\n type: 'group'\n },\n interaction: {\n highlight: [{\n type: 'stroke',\n intensity: [0, 0, -15, 0]\n }],\n fade: [{\n type: 'stroke',\n intensity: [0, 0, +15, 0]\n }],\n focus: [{\n type: 'stroke',\n intensity: [0, 0, +15, 0]\n }]\n },\n nearestPointThreshold: 20,\n encoding: {\n color: {},\n x: {},\n y: {},\n strokeOpacity: {\n value: 1\n }\n },\n transition: {\n effect: 'cubic',\n duration: 1000\n },\n connectNullData: false\n};\n\n","import {\n Voronoi,\n getQualifiedClassName,\n selectElement,\n makeElement,\n FieldType,\n getObjProp\n} from 'muze-utils';\nimport { BaseLayer } from '../../base-layer';\nimport { drawLine } from './renderer';\nimport { defaultConfig } from './default-config';\nimport { ENCODING } from '../../enums/constants';\nimport * as PROPS from '../../enums/props';\nimport {\n attachDataToVoronoi,\n animateGroup,\n getLayerColor,\n positionPoints,\n getIndividualClassName\n} from '../../helpers';\n\nimport './styles.scss';\n\n/**\n * Line Layer creates a line plot.\n * Example :-\n * const config = {\n * encoding = {\n * x: {\n * field: 'date'\n * },\n * y: {\n * field: 'sales'\n * }\n * }\n * };\n * const linelayer = layerFactory.getLayer('line', [dataModel, axes, config]);\n * linelayer.render(container);\n * @class\n */\nexport default class LineLayer extends BaseLayer {\n\n /**\n *Creates an instance of LineLayer.\n * @param {*} args\n * @memberof LineLayer\n */\n constructor (...args) {\n super(...args);\n this._voronoi = new Voronoi();\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof LineLayer\n */\n static formalName () {\n return 'line';\n }\n\n /**\n *\n *\n * @returns\n * @memberof LineLayer\n */\n elemType () {\n return 'path';\n }\n\n /**\n * Default configuration of line layer\n * @return {Object} Default configuration of layer\n */\n static defaultConfig () {\n return defaultConfig;\n }\n\n /**\n *\n *\n * @static\n * @param {*} conf\n * @param {*} userConf\n * @returns\n * @memberof LineLayer\n */\n static defaultPolicy (conf, userConf) {\n const config = BaseLayer.defaultPolicy(conf, userConf);\n const encoding = config.encoding;\n const transform = config.transform;\n const colorField = encoding.color && encoding.color.field;\n\n if (colorField && !transform.groupBy) {\n transform.groupBy = colorField;\n }\n return config;\n }\n\n /**\n * Returns the draw method for line\n * @return {Function} Draw method of line layer\n */\n getDrawFn () {\n return drawLine;\n }\n\n /**\n * Applies selection styles to the elements that fall within the selection set.\n * @param {Array} selectionSet Array of tuple ids.\n * @param {Object} config Configuration for selection.\n * @return {BarLayer} Instance of bar layer.\n */\n highlightPoint () {\n return this;\n }\n\n /**\n * Removes selection styles to the elements that fall within the selection set.\n * @param {Array} selectionSet Array of tuple ids.\n * @param {Object} config Configuration for selection.\n * @return {BarLayer} Instance of bar layer.\n */\n dehighlightPoint () {\n return this;\n }\n\n focusSelection () {\n return this;\n }\n\n focusOutSelection () {\n return this;\n }\n\n fadeOutSelection () {\n return this;\n }\n\n unfadeSelection () {\n return this;\n }\n\n shouldDrawAnchors () {\n return true;\n }\n\n /**\n * Generates the x and y positions for each point\n * @param {Array} data Data Array\n * @param {Object} encoding Visual Encodings of the layer\n * @param {Object} axes Contains the axis\n * @param {number} seriesIndex index of series\n * @return {Array} Array of points\n */\n translatePoints (data, encodingFieldsInf, axes) {\n let points = [];\n const xAxis = axes.x;\n const yAxis = axes.y;\n const colorAxis = axes.color;\n const encoding = this.config().encoding;\n const { xFieldType, yFieldType } = encodingFieldsInf;\n const isXDim = xFieldType === FieldType.DIMENSION;\n const isYDim = yFieldType === FieldType.DIMENSION;\n const key = isXDim ? ENCODING.X : (isYDim ? ENCODING.Y : null);\n const colorEncoding = encoding.color;\n const colorField = colorEncoding.field;\n const fieldsConfig = this.data().getFieldsConfig();\n const colorFieldIndex = colorField && fieldsConfig[colorField].index;\n const style = {};\n const meta = {};\n\n points = data.map((d, i) => {\n const xPx = xAxis.getScaleValue(d.x) + xAxis.getUnitWidth() / 2;\n const yPx = yAxis.getScaleValue(d.y);\n const { color, rawColor } = getLayerColor({ datum: d, index: i }, {\n colorEncoding, colorAxis, colorFieldIndex });\n\n style.stroke = color;\n style['fill-opacity'] = 0;\n meta.stateColor = {};\n meta.originalColor = rawColor;\n meta.colorTransform = {};\n\n const point = {\n enter: {},\n update: {\n x: xPx,\n y: d.y === null ? null : yPx\n },\n style,\n _data: d._data,\n _id: d._id,\n rowId: d._id,\n source: d._data,\n meta\n };\n point.className = getIndividualClassName(d, i, data, this);\n this.cachePoint(d[key], point);\n return point;\n });\n points = positionPoints(this, points);\n return points;\n }\n\n /**\n * Renders the line plot\n * @param {SVGElement} container svg element\n * @return {LineLayer} instance of line layer\n */\n render (container) {\n let points;\n let seriesClassName;\n let style;\n\n const config = this.config();\n const {\n encoding,\n interpolate,\n className,\n defClassName,\n transition\n } = config;\n const store = this._store;\n const normalizedData = store.get(PROPS.NORMALIZED_DATA);\n const transformedData = store.get(PROPS.TRANSFORMED_DATA);\n const fieldsConfig = this.data().getFieldsConfig();\n const axes = this.axes();\n const keys = transformedData.map(d => d.key);\n const qualifiedClassName = getQualifiedClassName(defClassName, this.id(), config.classPrefix);\n const containerSelection = selectElement(container);\n const colorField = encoding.color.field;\n const colorFieldIndex = fieldsConfig[colorField] && fieldsConfig[colorField].index;\n\n this._points = [];\n this._pointMap = {};\n containerSelection.classed(qualifiedClassName.join(' '), true);\n containerSelection.classed(className, true);\n makeElement(container, 'g', normalizedData, null, {\n enter: (group) => {\n animateGroup(group, {\n transition,\n groupAnimateStyle: {\n enter: {\n 'stroke-opacity': 0,\n 'fill-opacity': this.getPathStyle()['fill-opacity']\n },\n update: {\n 'stroke-opacity': encoding.strokeOpacity.value\n }\n }\n });\n },\n update: (group, dataArr, i) => {\n points = this.translatePoints(dataArr, this.encodingFieldsInf(), axes, i);\n this._points.push(points);\n seriesClassName = `${qualifiedClassName[0]}-${keys[i] || i}`.toLowerCase();\n\n let color;\n const colorValFn = encoding.color.value;\n const colorVal = points.find(d => d._data[colorFieldIndex] !== null &&\n d._data[colorFieldIndex] !== undefined);\n\n if (colorValFn) {\n color = colorValFn(dataArr, i, normalizedData);\n } else {\n color = axes.color.getColor(colorVal && colorVal._data[colorFieldIndex]);\n }\n\n style = this.getPathStyle(color);\n this.getDrawFn()({\n container: group.node(),\n interpolate,\n points,\n className: seriesClassName,\n transition,\n style: style || {},\n connectNullData: config.connectNullData\n });\n }\n }, d => d[0]._data[colorFieldIndex] || d[0]._id);\n\n attachDataToVoronoi(this._voronoi, this._points);\n return this;\n }\n\n /**\n * Get the css styles need to be applied on the line path\n * @param {string} color Color value\n * @return {Object} Path styles\n */\n getPathStyle (color) {\n return {\n stroke: color,\n 'fill-opacity': '0'\n };\n }\n\n /**\n * Gets the nearest point closest to the given position\n * @param {number} x x position\n * @param {number} y y position\n * @return {Object} Nearest point information\n */\n getNearestPoint (x, y, config) {\n let searchRadius = config.searchRadius;\n const data = this.data();\n\n if (!data || (data && data.isEmpty())) {\n return null;\n }\n\n searchRadius = searchRadius !== undefined ? searchRadius : this.config().nearestPointThreshold;\n const point = this._voronoi.find(x, y, searchRadius);\n const dimensions = getObjProp(point, 'data', 'data', 'update');\n\n if (point) {\n const { _data, _id } = point.data.data;\n const identifiers = this.getIdentifiersFromData(_data, _id);\n return {\n id: identifiers,\n dimensions: [{\n x: dimensions.x,\n y: dimensions.y,\n width: 2,\n height: 2\n }],\n layerId: this.id()\n };\n }\n return null;\n }\n}\n","import {\n easeFns,\n selectElement,\n pathInterpolators,\n Symbols\n} from 'muze-utils';\n\nconst area = Symbols.area;\n/**\n * Draws a line from the points\n * Generates a svg path string\n * @param {Object} params Contains container, points and interpolate attribute.\n */\nconst /* istanbul ignore next */ drawArea = (params) => {\n let filteredPoints;\n const { container, points, style, transition, className, connectNullData, interpolate } = params;\n\n const { effect: easeEffect, duration } = transition;\n const mount = selectElement(container);\n const curveInterpolatorFn = pathInterpolators[interpolate];\n const selection = mount.selectAll('path').data([params.points]);\n const [enterAreaPath, updateAreaPath] = ['enter', 'update'].map(e => area().curve(curveInterpolatorFn)\n .x(d => d[e].x)\n .y1(d => d[e].y)\n .y0(d => d[e].y0)\n .defined(d => d[e].y !== null\n ));\n\n filteredPoints = points;\n mount.attr('class', className);\n if (connectNullData) {\n filteredPoints = points.filter(d => d.update.y !== null);\n }\n const selectionEnter = selection.enter().append('path').attr('d', enterAreaPath(filteredPoints));\n selection.merge(selectionEnter).transition().ease(easeFns[easeEffect])\n .duration(duration)\n .attr('d', updateAreaPath(filteredPoints))\n .each(function (d) {\n const element = selectElement(this);\n\n element.classed(d[0].className, true);\n Object.keys(style).forEach(key => element.style(key, style[key]));\n });\n};\n\nexport default drawArea;\n","import { FieldType } from 'muze-utils';\nimport { defaultConfig } from './default-config';\nimport { LineLayer } from '../line';\nimport drawArea from './renderer';\nimport './styles.scss';\nimport { STACK, ENCODING } from '../../enums/constants';\nimport { getAxesScales, positionPoints, getLayerColor, getIndividualClassName } from '../../helpers';\n\n/**\n * Area Layer creates a area plot.\n * @example\n * const config = {\n * encoding = {\n * x: {\n * field: 'date'\n * },\n * // Top y value\n * y: {\n * field: 'maxTemp'\n * },\n * // Base y value\n * y0: {\n * field: 'minTemp\n * }\n * }\n * };\n * const areaLayer = layerFactory.getLayer('area', [dataModel, axes, config]);\n * areaLayer.render(container);\n * @class\n */\nexport default class AreaLayer extends LineLayer {\n /** oation of line layer\n * @return {Object} Default configuration of layer\n */\n static defaultConfig () {\n return defaultConfig;\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof AreaLayer\n */\n static formalName () {\n return 'area';\n }\n\n /**\n * Calculates the domain from data. It calls its parent class's method which is line layer\n * to get the domain and overwrites the domain according to its need.\n * @return {Array} Domain values\n */\n calculateDomainFromData (data, encodingFieldsInf, fieldsConfig) {\n const domains = super.calculateDomainFromData(data, fieldsConfig);\n [ENCODING.X, ENCODING.Y].forEach((type) => {\n const { [`${type}FieldType`]: fieldType } = encodingFieldsInf;\n if (fieldType === FieldType.MEASURE) {\n domains[type][0] = Math.min(domains[type][0], 0);\n }\n });\n return domains;\n }\n\n /**\n * Returns the drawing method of this layer\n * @return {Function} Draw method\n */\n getDrawFn () {\n return drawArea;\n }\n\n /**\n * Generates the x and y positions for each point\n * @param {Array} data Data Array\n * @param {Object} encoding Visual Encodings of the layer\n * @param {Object} axes Contains the axis\n * @return {Array} Array of points\n */\n translatePoints (data, encodingFieldsInf, axes) {\n let points = [];\n const transformType = this.transformType();\n const colorAxis = axes.color;\n const config = this.config();\n const encoding = config.encoding;\n const colorEncoding = encoding.color;\n const colorField = colorEncoding.field;\n const fieldsConfig = this.data().getFieldsConfig();\n const colorFieldIndex = colorField && fieldsConfig[colorField].index;\n const { xField, yField, y0Field } = encodingFieldsInf;\n const {\n xAxis,\n yAxis\n } = getAxesScales(axes);\n const classNameFn = config.individualClassName;\n const isXDim = fieldsConfig[xField] && fieldsConfig[xField].def.type === FieldType.DIMENSION;\n const isYDim = fieldsConfig[yField] && fieldsConfig[yField].def.type === FieldType.DIMENSION;\n const key = isXDim ? 'x' : (isYDim ? 'y' : null);\n points = data.map((d, i) => {\n const xPx = xAxis.getScaleValue(d.x) + xAxis.getUnitWidth() / 2;\n const yPx = yAxis.getScaleValue(d.y);\n const y0Px = (y0Field || transformType === STACK) ? yAxis.getScaleValue(d.y0) : yAxis.getScaleValue(0);\n const { color, rawColor } = getLayerColor({ datum: d, index: i }, {\n colorEncoding, colorAxis, colorFieldIndex });\n const style = {};\n const meta = {};\n style.fill = color;\n // style['fill-opacity'] = 0;\n meta.stateColor = {};\n meta.originalColor = rawColor;\n meta.colorTransform = {};\n const point = {\n enter: {\n x: xPx,\n y: d.y === null ? d.y : yAxis.getScaleValue(0),\n y0: d.y0 === null ? d.y0 : yAxis.getScaleValue(0)\n },\n update: {\n x: xPx,\n y: d.y === null ? d.y : yPx,\n y0: d.y0 === null ? d.y0 : y0Px\n },\n _id: d._id,\n _data: d._data,\n source: d._data,\n rowId: d._id,\n className: classNameFn ? classNameFn(d, i, data, this) : '',\n style,\n meta\n };\n point.className = getIndividualClassName(d, i, data, this);\n this.cachePoint(d[key], point);\n return point;\n });\n points = positionPoints(this, points);\n return points;\n }\n\n /**\n * Get the css styles need to be applied on the line path\n * @param {string} color Color value\n * @return {Object} Path styles\n */\n getPathStyle (color) {\n return {\n fill: color\n };\n }\n}\n\n","import { CLASSPREFIX } from '../../enums/constants';\n\nexport const defaultConfig = {\n classPrefix: CLASSPREFIX,\n defClassName: 'layer-arc',\n padding: { top: 1, bottom: 1, left: 1, right: 1 },\n className: '',\n minOuterRadius: 10,\n interaction: {\n highlight: [{\n type: 'fill',\n intensity: [0, 0, -15, 0]\n }],\n fade: [{\n type: 'fill',\n intensity: [0, 0, +15, 0]\n }],\n focus: [{\n type: 'fill',\n intensity: [0, 0, +15, 0]\n }]\n },\n height: 100,\n width: 100,\n sort: '',\n cornerRadius: 0,\n padAngle: 0,\n padRadius: 0,\n startAngle: 0,\n endAngle: 360,\n colors: ['#F44336', 'blue', 'green', 'yellow', 'orange', 'purple'],\n transform: {\n type: 'identity'\n },\n encoding: {\n 'stroke-width': {\n value: '2px'\n },\n 'stroke-linejoin': {\n value: 'round'\n },\n angle: {\n value: '1'\n },\n radius: {\n value: '1'\n },\n opacity: {\n value: '1'\n },\n color: {\n value: '1'\n },\n shape: {\n value: '1'\n },\n size: {\n value: '1'\n }\n },\n innerRadiusFixer: 10,\n transition: {\n effect: 'cubic',\n duration: 500\n },\n states: {\n highlight: {\n className: `${CLASSPREFIX}-layer-arc-highlight`\n },\n fadeout: {\n className: `${CLASSPREFIX}-layer-arc-fadeout`\n },\n selected: {\n className: `${CLASSPREFIX}-layer-arc-selected`\n }\n }\n};\n\n","import {\n makeElement,\n selectElement,\n getQualifiedClassName,\n isSimpleObject,\n getDomainFromData,\n Symbols,\n FieldType,\n ReservedFields\n} from 'muze-utils';\nimport { defaultConfig } from './default-config';\nimport { BaseLayer } from '../../base-layer';\nimport * as PROPS from '../../enums/props';\nimport { ASCENDING, OUTER_RADIUS_VALUE } from '../../enums/constants';\nimport { getIndividualClassName } from '../../helpers';\nimport { getRangeValue, getRadiusRange, tweenPie, tweenExitPie, getFieldIndices, getPreviousPoint } from './arc-helper';\nimport './styles.scss';\n\nconst pie = Symbols.pie;\nconst arc = Symbols.arc;\n\n/**\n * Arc Layer creates a plot with polar coordinates\n * Example :-\n * const config = {\n * height: 100,\n * width: 100,\n * startAngle: 0,\n * endAngle: Math.PI,\n * cornerRadius: 10,\n * minOuterRadius: 10,\n * outerRadius: 10,\n * innerRadius: 5,\n * padAngle: 2,\n * padRadius: 2,\n * colors: []\n * padding: {top: 10, bottom: 10, left: 10, right: 10},\n * encoding = {\n * angle: {\n * field: 'date' //Maps to angle of arc\n * },\n * radius: {\n * field: 'sales' // Maps to radius of arc\n * }\n * }\n * };\n * @class\n */\nexport default class ArcLayer extends BaseLayer {\n\n constructor (data, axes, config, dependencies) {\n super(data, axes, config, dependencies);\n this._prevPieData = {};\n }\n\n /**\n * returns the default configuration of the layer\n *\n * @static\n * @return {Object} Default configuration for arc layer\n * @memberof ArcLayer\n */\n static defaultConfig () {\n return defaultConfig;\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof ArcLayer\n */\n static formalName () {\n return 'arc';\n }\n\n /**\n *\n *\n * @returns\n * @memberof ArcLayer\n */\n elemType () {\n return 'path';\n }\n\n /**\n * Transforms data in the appropriate data structure to be consumed by the layer for rendering\n *\n * @param {Object} data data model associated with the layer\n * @param {Object} config configuration of the layer that contains encoding and other parameters\n * @return {Object} Transformed pie data\n * @memberof ArcLayer\n */\n getTransformedData (dataModel, config) {\n let pieData = [];\n const pieIndex = {};\n const {\n startAngle,\n endAngle,\n encoding,\n sort,\n minOuterRadius\n } = config;\n const prevData = this._store.get(PROPS.TRANSFORMED_DATA) || [];\n const fieldsConfig = this.data().getFieldsConfig();\n const {\n angleIndex,\n sizeIndex,\n radiusIndex,\n colorIndex\n } = getFieldIndices(encoding, fieldsConfig);\n const dataVal = dataModel.getData();\n const data = dataVal.data;\n const uids = dataVal.uids;\n\n this._prevPieData = {};\n\n prevData.forEach((e, index) => {\n this._prevPieData[e.uid] = [e, index];\n pieIndex[e.index] = e;\n });\n // Creating pie data using angle field provided. If the angle field is a dimension,\n // all the angles will be equal(360/number of dimensions)\n\n pieData = pie()\n .startAngle((startAngle / 180) * Math.PI)\n .endAngle(Math.PI * endAngle / 180)\n .value(d => d[angleIndex] || 1)\n .sortValues(null);\n\n sort.length && radiusIndex && pieData.sort((a, b) => {\n if (sort === ASCENDING) {\n return a[radiusIndex] - b[radiusIndex];\n } return b[radiusIndex] - a[radiusIndex];\n });\n const sizeVal = data.reduce((acc, d) => acc + (d[sizeIndex] || 0), 1);\n\n // Adding the radius field values to each data point in pie data\n pieData = pieData(data).map((d, i) => {\n d.outerRadiusValue = data[i][radiusIndex] || minOuterRadius;\n d.innerRadius = config.innerRadius;\n d.colorVal = data[i][colorIndex];\n d.angleVal = data[i][angleIndex];\n d.sizeVal = sizeVal;\n d.uid = uids[i];\n d.rowId = d.uid;\n d.source = data[i];\n d._previousInfo = this._prevPieData[d.uid] ? this._prevPieData[d.uid][0] :\n getPreviousPoint(pieIndex, d.index, config);\n return d;\n });\n return pieData;\n }\n\n /**\n * Returns normalized data after transformation (it is the same in the case of pie layer)\n *\n * @param {Object} data transformed data\n * @return {Object} normalized data\n * @memberof ArcLayer\n */\n getNormalizedData (data) {\n return data;\n }\n\n /**\n *\n *\n * @param {Object} data\n * @return {}\n * @memberof ArcLayer\n */\n calculateDomainFromData (data) {\n const domainKey = OUTER_RADIUS_VALUE;\n return {\n radius: getDomainFromData([data], [domainKey, domainKey])\n };\n }\n\n /**\n *\n *\n * @param {Object} x\n * @param {Object} y\n * @return {}\n * @memberof ArcLayer\n */\n getNearestPoint (x, y, config = {}) {\n const dataPoint = selectElement(config.event.target).data()[0];\n if (isSimpleObject(dataPoint)) {\n const { data, uid } = dataPoint.datum;\n return {\n id: this.getIdentifiersFromData(data, uid),\n layerId: this.id()\n };\n }\n return null;\n }\n\n /**\n *\n *\n * @param {*} set\n * @returns\n * @memberof ArcLayer\n */\n getPlotElementsFromSet (set) {\n return selectElement(this.mount()).selectAll(this.elemType()).filter(d => set.indexOf(d.datum.uid) !== -1);\n }\n\n /**\n *\n *\n * @param {Object} container\n * @return {}\n * @memberof ArcLayer\n */\n render (container) {\n const {\n height,\n width\n } = this.measurement();\n const {\n classPrefix,\n defClassName,\n minOuterRadius,\n innerRadius,\n outerRadius,\n cornerRadius,\n padAngle,\n padRadius,\n padding,\n transition,\n innerRadiusFixer\n } = this.config();\n const sizeAxis = this.axes().size;\n const store = this._store;\n const transformedData = store.get(PROPS.TRANSFORMED_DATA);\n const chartHeight = height - padding.top - padding.bottom;\n const chartWidth = width - padding.left - padding.right;\n const qualClassName = getQualifiedClassName(defClassName, this.id(), classPrefix);\n // Sets range for radius\n const range = getRadiusRange(chartWidth, chartHeight, {\n minOuterRadius,\n innerRadius,\n outerRadius,\n innerRadiusFixer\n });\n const colorAxis = this.axes().color;\n const defaultRadius = outerRadius || Math.min(chartHeight, chartWidth) / 2;\n const radiusDomain = store.get(PROPS.DOMAIN).radius;\n const rangeValueGetter = d => getRangeValue(d, range, radiusDomain, defaultRadius, sizeAxis);\n // This returns a function that generates the arc path based on the datum provided\n const path = arc()\n // .outerRadius(d => rangeValueGetter(d))\n .innerRadius(innerRadius ? Math.min(chartHeight / 2, chartWidth / 2, innerRadius) : 0)\n .cornerRadius(cornerRadius)\n .padAngle(padAngle)\n .padRadius(padRadius);\n this._chartWidth = chartWidth;\n this._chartHeight = chartHeight;\n // Creating the group that holds all the arcs\n const g = makeElement(selectElement(container), 'g', [1], `${qualClassName[0]}-group`)\n .classed(`${qualClassName[1]}-group`, true)\n .attr('transform', `translate(${chartWidth / 2},${chartHeight / 2})`);\n const tween = (elem) => {\n makeElement(elem, 'path', (d, i) => [{\n datum: d,\n index: i,\n arcFn: path,\n meta: {\n originalColor: colorAxis.getRawColor(d.colorVal),\n stateColor: {},\n colorTransform: {}\n }\n }], `${qualClassName[0]}-path`)\n .style('fill', d => colorAxis.getColor(d.datum.colorVal))\n .transition()\n .duration(transition.duration)\n .attrTween('d', (...params) => tweenPie(path, rangeValueGetter, params))\n .attr('class', (d, i) => {\n const individualClass = getIndividualClassName(d, i, transformedData, this);\n return `${qualClassName[0]}-path ${qualClassName[1]}-path-${d.index}\n ${individualClass}`;\n });\n };\n const consecutiveExits = [];\n let exitCounter = 0;\n const tweenExit = (elem, d) => {\n let exitArr = consecutiveExits[exitCounter];\n const oldExitCounter = exitCounter;\n if (!exitArr) {\n exitArr = [{ elem, datum: d }];\n } else if (exitArr[exitArr.length - 1].datum.index === d.index - 1) {\n exitArr.push({ elem, datum: d });\n } else {\n exitCounter++;\n }\n consecutiveExits[oldExitCounter] = exitArr;\n };\n // Creating groups for all the arcs present individually\n makeElement(g, 'g', transformedData, `${qualClassName[0]}`,\n {\n update: tween,\n exit: tweenExit\n })\n .attr('class', (d, i) => `${qualClassName[0]} ${qualClassName[1]}-${i}`);\n tweenExitPie(consecutiveExits, transition, rangeValueGetter, path);\n return this;\n }\n\n /**\n *\n *\n * @param {*} identifiers\n * @returns\n * @memberof BaseLayer\n */\n getPointsFromIdentifiers (identifiers) {\n if (!this.data()) {\n return [];\n }\n const fieldNames = identifiers[0];\n const values = identifiers.slice(1, identifiers.length);\n const pieSlices = selectElement(this.mount()).selectAll('path').data();\n const fieldsConfig = this.data().getFieldsConfig();\n\n const filteredPies = pieSlices.filter((tData) => {\n const data = tData.datum.data;\n const uid = tData.datum.uid;\n return fieldNames.every((field, idx) => {\n if (field in fieldsConfig && fieldsConfig[field].def.type === FieldType.DIMENSION) {\n return values.findIndex(d => d[idx] === data[fieldsConfig[field].index]) !== -1;\n } else if (field === ReservedFields.ROW_ID) {\n return values.findIndex(d => d[idx] === uid) !== -1;\n } return true;\n });\n });\n\n const pieSliceInf = filteredPies[0];\n if (pieSliceInf) {\n const centroid = pieSliceInf.arcFn.centroid(pieSliceInf.datum);\n return [{\n x: centroid[0] + this._chartWidth / 2,\n y: centroid[1] + this._chartHeight / 2,\n width: 2,\n height: 2\n }];\n }\n return [];\n }\n}\n\n","import { getObjProp, interpolator, FieldType, selectElement } from 'muze-utils';\nimport { ANGLE, RADIUS, SIZE, COLOR } from '../../enums/constants';\n\n/**\n * Returns the range value from a value inside the domain\n *\n * @param {Object} domainValue Value whose range has to be returned\n * @return {number} range value\n * @memberof ArcLayer\n */\nexport const getRangeValue = (datum, range, domain, defaultRadius, sizeAxis) => {\n let domainMultiplier = 1;\n const {\n outerRadiusValue,\n sizeVal\n } = datum;\n const sizeAxisDomain = sizeAxis.domain();\n const sizeMultiplier = sizeAxis.getSize(sizeVal) / (sizeAxisDomain ? sizeAxis.range()[1] : sizeAxis.config().value);\n\n domainMultiplier *= (range[1] - range[0]) / (domain[1] - domain[0]);\n const rangeVal = (range[0] + (outerRadiusValue - domain[0]) * domainMultiplier);\n return (rangeVal || defaultRadius) * sizeMultiplier;\n};\n\n/**\n *\n *\n * @memberof ArcLayer\n */\nexport const getRadiusRange = (width, height, config) => {\n const {\n minOuterRadius,\n innerRadius,\n outerRadius,\n innerRadiusFixer\n } = config;\n\n return [Math.max((innerRadius + innerRadiusFixer || 0), minOuterRadius), outerRadius || Math.min(height,\n width) / 2];\n};\nexport const getPreviousPoint = (prevData, currIndex, config) => {\n const prevArc = prevData[currIndex - 1];\n const nextArc = prevData[currIndex];\n\n if (prevArc && nextArc) {\n return {\n startAngle: prevArc.endAngle,\n endAngle: nextArc.startAngle\n };\n } else if (!nextArc) {\n return {\n startAngle: config.endAngle * Math.PI * 2 / 360,\n endAngle: config.endAngle * Math.PI * 2 / 360\n };\n }\n return {\n startAngle: config.startAngle * Math.PI * 2 / 360,\n endAngle: config.startAngle * Math.PI * 2 / 360\n };\n};\n\n/**\n *\n *\n * @param {*} path\n * @param {*} b\n * @returns\n * @memberof ArcLayer\n */\nexport const tweenPie = (path, rangeValueGetter, b) => {\n const { datum } = b[0];\n const outerRadius = rangeValueGetter(datum);\n datum.outerRadius = outerRadius;\n datum._previousInfo.outerRadius = datum._previousInfo.outerRadius || outerRadius;\n return function (t) {\n return path(interpolator()(datum._previousInfo, datum)(t));\n };\n};\n\n/**\n *\n *\n * @param {*} path\n * @param {*} b\n * @returns\n * @memberof ArcLayer\n */\nexport const tweenExitPie = (consecutiveExits, transition, rangeValueGetter, path) => {\n if (consecutiveExits.length > 0) {\n consecutiveExits.forEach((consecutiveExitArr) => {\n const startAngle = consecutiveExitArr[0].datum.startAngle;\n const endAngle = consecutiveExitArr[consecutiveExitArr.length - 1].datum.endAngle;\n const mid = (Math.PI * 2 * startAngle) / ((Math.PI * 2) + startAngle - endAngle);\n\n consecutiveExitArr.forEach((e) => {\n const { elem, datum } = e;\n\n elem.each(function () {\n const gElem = selectElement(this);\n gElem.selectAll('path')\n .transition()\n .duration(transition.duration)\n .attrTween('d', () => function (t) {\n const outerRadius = rangeValueGetter(datum);\n datum.outerRadius = outerRadius;\n return path(interpolator()(datum, {\n startAngle: mid,\n endAngle: mid,\n outerRadius\n })(t));\n })\n .remove();\n gElem.remove();\n });\n });\n });\n }\n};\n\nexport const getFieldIndices = (encoding, fieldsConfig) => {\n const [angleField, radiusField, colorField, sizeField] = [ANGLE, RADIUS, COLOR, SIZE]\n .map(e => encoding[e].field);\n const [angleIndex, sizeIndex, radiusIndex] = [angleField, sizeField, radiusField]\n .map((e) => {\n const conf = fieldsConfig[e];\n if (conf && conf.def.type === FieldType.MEASURE) {\n return conf.index;\n }\n return null;\n });\n const colorIndex = getObjProp(fieldsConfig, colorField, 'index');\n return {\n angleIndex,\n sizeIndex,\n radiusIndex,\n colorIndex\n };\n};\n","import {\n setAttrs,\n setStyles,\n selectElement,\n makeElement,\n getSmartComputedStyle\n} from 'muze-utils';\n\n/**\n * Draws svg text in the specified container.\n * @param {SVGElement} container Container where labels will be appended.\n * @param {Array.} data Data of the elements.\n * @return {Selection} d3 selection of the elements.\n */\nconst drawText = (container, data, config, smartLabel) => {\n const selection = selectElement(container).selectAll('g').data(data);\n\n const selectionMerge = selection.enter().append('g')\n .each(function (dataObj) {\n setAttrs(this, dataObj.enter);\n })\n .merge(selection);\n const style = getSmartComputedStyle(selectElement(container), config.className);\n const fontSize = parseInt(style.fontSize, 10);\n\n smartLabel.setStyle(style);\n selectionMerge.each(function (dataObj) {\n const element = selectElement(this);\n const { update, text, color, textanchor, style: textStyle } = dataObj;\n const background = dataObj.background;\n let backgroundVal;\n if (backgroundVal = background.value) {\n const backgroundPadding = background.padding;\n let diff;\n const { width, height } = smartLabel.getOriSize(dataObj.text);\n const backgroundEl = makeElement(element, 'rect', [1]);\n\n if (textanchor === 'end') {\n diff = width;\n } else if (textanchor === 'start') {\n diff = 0;\n } else {\n diff = width / 2;\n }\n\n setAttrs(backgroundEl.node(), {\n x: update.x - diff - backgroundPadding / 2,\n y: update.y - fontSize - backgroundPadding / 2,\n width: width + backgroundPadding,\n height: height + backgroundPadding\n });\n background && setStyles(backgroundEl, {\n background: backgroundVal\n });\n }\n const textEl = makeElement(element, 'text', d => [d]).text(text);\n const textNode = textEl.node();\n textStyle && setStyles(textNode, textStyle);\n color && setStyles(textNode, {\n fill: color\n });\n dataObj.className && textEl.classed(dataObj.className, true);\n setAttrs(textNode, update);\n textEl.attr('text-anchor', textanchor);\n });\n selection.exit().remove();\n return selection;\n};\n\nexport default drawText;\n","import { CLASSPREFIX } from '../../enums/constants';\n\nexport const defaultConfig = {\n defClassName: 'layer-text',\n classPrefix: CLASSPREFIX,\n className: '',\n transform: {\n type: 'identity'\n },\n interaction: {\n highlight: [{\n type: 'fill',\n intensity: [0, 0, -15, 0]\n }],\n fade: [{\n type: 'fill',\n intensity: [0, 0, +15, 0]\n }],\n focus: [{\n type: 'fill',\n intensity: [0, 0, +15, 0]\n }]\n },\n transition: {\n effect: 'cubic',\n duration: 1000\n },\n encoding: {\n color: {},\n text: {\n value: '',\n background: {\n padding: 10\n }\n }\n },\n states: {\n highlight: {\n className: `${CLASSPREFIX}-layer-text-highlight`\n },\n fadeout: {\n className: `${CLASSPREFIX}-layer-text-fadeout`\n },\n selected: {\n className: `${CLASSPREFIX}-layer-text-selected`\n }\n }\n};\n","import {\n getQualifiedClassName,\n selectElement,\n setStyles,\n createElements\n} from 'muze-utils';\nimport { BaseLayer } from '../../base-layer';\nimport drawText from './renderer';\nimport { defaultConfig } from './default-config';\nimport { getLayerColor, positionPoints, getIndividualClassName } from '../../helpers';\nimport { TEXT_ANCHOR_MIDDLE, ENCODING } from '../../enums/constants';\nimport * as PROPS from '../../enums/props';\n\nimport './styles.scss';\n\n/**\n * Text Layer creates labels. It needs to be passed a data table, axes and configuration\n * of the layer.\n * Example :-\n * const textLayer = layerFactory.getLayer('text', [dataModel, axes, config]);\n * textLayer.render(container);\n * @class\n */\nexport default class TextLayer extends BaseLayer {\n /**\n * Returns the default configuration of the text layer\n * @return {Object} Default configuration of the text layer\n */\n static defaultConfig () {\n return defaultConfig;\n }\n\n static formalName () {\n return 'text';\n }\n\n elemType () {\n return 'text';\n }\n\n /**\n * Generates an array of objects containing x, y, width and height of the points from the data\n * @param {Array.} data Data Array\n * @param {Object} encoding Config\n * @param {Object} axes Axes object\n * @return {Array.} Array of points\n */\n translatePoints (data, encoding, axes) {\n let points = [];\n const colorAxis = axes.color;\n const textEncoding = encoding.text;\n const { field: textField, value, formatter: textFormatter } = textEncoding;\n const colorEncoding = encoding.color;\n const colorField = colorEncoding && colorEncoding.field;\n const fieldsConfig = this.data().getFieldsConfig();\n\n const backgroundEncoding = encoding.text.background;\n const backgroundPadding = backgroundEncoding.padding;\n const backgroundValue = backgroundEncoding.value;\n const colorFieldIndex = fieldsConfig[colorField] ? fieldsConfig[colorField].index : -1;\n const textFieldIndex = textField ? fieldsConfig[textField] && fieldsConfig[textField].index : -1;\n const xEnc = ENCODING.X;\n const yEnc = ENCODING.Y;\n for (let i = 0, len = data.length; i < len; i++) {\n const d = data[i];\n const row = d._data;\n const textValue = textField ? row[textFieldIndex] : value;\n\n const [xPx, yPx] = [xEnc, yEnc].map(type => (axes[type] ? axes[type].getScaleValue(d[type]) +\n axes[type].getUnitWidth() / 2 : 0));\n\n const { color, rawColor } = getLayerColor({ datum: d, index: i },\n { colorEncoding, colorAxis, colorFieldIndex });\n\n const point = {\n enter: {},\n update: {\n x: xPx,\n y: yPx\n },\n text: textFormatter ? textFormatter(textValue) : textValue,\n color,\n background: {\n value: backgroundValue instanceof Function ? backgroundValue(d, i, data, this) : null,\n padding: backgroundPadding\n },\n meta: {\n stateColor: {},\n originalColor: rawColor,\n colorTransform: {}\n },\n style: {},\n _data: row,\n _id: d._id,\n source: d._data,\n rowId: d._id\n };\n\n if (d.x !== null && d.y !== null) {\n points.push(point);\n }\n\n point.className = getIndividualClassName(d, i, data, this);\n }\n\n points = positionPoints(this, points);\n\n return points;\n }\n\n /**\n * Renders the plot in the given container\n * @param {SVGElement} container SVGElement which will hold the plot\n * @return {textLayer} Instance of text layer\n */\n render (container) {\n let points;\n const config = this.config();\n const encoding = config.encoding;\n const normalizedData = this._store.get(PROPS.NORMALIZED_DATA);\n const className = config.className;\n const qualifiedClassName = getQualifiedClassName(config.defClassName, this.id(), config.classPrefix);\n const axes = this.axes();\n const containerSelection = selectElement(container);\n\n containerSelection.classed(`${qualifiedClassName.join(' ')} ${className}`, true);\n createElements({\n data: normalizedData,\n append: 'g',\n selector: 'g',\n container,\n each: (dataArr, group, i) => {\n const node = group.node();\n points = this.translatePoints(dataArr, encoding, axes, i);\n setStyles(node, {\n 'text-anchor': TEXT_ANCHOR_MIDDLE\n });\n drawText(node, points, {\n className: qualifiedClassName[0]\n }, this._dependencies.smartLabel);\n }\n });\n return this;\n }\n}\n","/* global Element, document */\nimport {\n makeElement,\n selectElement,\n easeFns,\n objectIterator,\n getSymbol\n} from 'muze-utils';\n\n/**\n *\n *\n * @param {*} str\n * @returns\n */\nconst checkPath = (str) => {\n if (/^[mzlhvcsqta]\\s*[-+.0-9][^mlhvzcsqta]+/i.test(str) && /[\\dz]$/i.test(str) && str.length > 4) {\n return true;\n }\n return false;\n};\n\n/**\n *\n *\n * @param {*} d\n * @param {*} elem\n */\nconst createShape = function (d, elem) {\n const groupElement = selectElement(elem);\n const { shape, size, update } = d;\n\n if (shape instanceof Promise) {\n shape.then((res) => {\n d.shape = res;\n createShape(d, elem);\n });\n } else if (shape instanceof Element) {\n let newShape = shape.cloneNode(true);\n\n if (newShape.nodeName.toLowerCase() === 'img') {\n const src = newShape.src || newShape.href;\n newShape = document.createElementNS('http://www.w3.org/2000/svg', 'image');\n newShape.setAttribute('href', src);\n }\n const shapeElement = selectElement(newShape);\n if (newShape.nodeName === 'path' || newShape.nodeName === 'image') {\n shapeElement.attr('transform', `scale(${size / 100})`);\n } else {\n shapeElement.attr('height', size);\n shapeElement.attr('width', size);\n }\n shapeElement.attr('x', -size / 2);\n shapeElement.attr('y', -size / 2);\n selectElement(groupElement.node().appendChild(newShape));\n } else if (typeof shape === 'string') {\n let pathStr;\n if (checkPath(shape)) {\n pathStr = shape;\n } else {\n pathStr = getSymbol(shape).size(size)(update);\n }\n makeElement(groupElement, 'path', data => [data]).attr('d', pathStr);\n } else {\n d.shape = 'circle';\n createShape(d, elem);\n }\n};\n\n/**\n * Draws symbols using d3 symbol api\n * @param {Object} params Contains the svg container, points and other symbol related attributes.\n */\n/* istanbul ignore next */ const drawSymbols = (params) => {\n let mergedGroups;\n const { container, points, transition, className } = params;\n const { duration, effect, disabled } = transition;\n const mount = selectElement(container);\n\n mount.attr('class', className);\n const symbolGroups = mount.selectAll('g').data(points, params.keyFn);\n const symbolEnter = symbolGroups.enter().append('g').attr('transform', d => `translate(${d.enter.x},${d.enter.y})`);\n mergedGroups = symbolGroups.merge(symbolEnter)\n .each(function (d) {\n createShape(d, this);\n });\n mergedGroups = disabled ? mergedGroups : mergedGroups.transition().duration(disabled ? 0 : transition.duration);\n mergedGroups.attr('transform', d => `translate(${d.update.x},${d.update.y})`)\n .each(function (d) {\n const style = d.style;\n const element = selectElement(this);\n objectIterator(style, key => element.style(key, style[key]));\n element.attr('class', `${className}`);\n element.classed(d.className, true);\n });\n\n const exitGroups = symbolGroups.exit();\n if (!disabled) {\n exitGroups.transition().ease(easeFns[effect])\n .duration(duration)\n .on('end', function () {\n selectElement(this).remove();\n })\n .style('fill-opacity', 0)\n .style('stroke-opacity', 0);\n } else {\n exitGroups.remove();\n }\n};\n\nexport default drawSymbols;\n","import { CLASSPREFIX } from '../../enums/constants';\n\nexport const defaultConfig = {\n defClassName: 'layer-point',\n className: '',\n classPrefix: CLASSPREFIX,\n defColorStyle: 'stroke',\n interaction: {\n highlight: [{\n type: 'fill',\n intensity: [0, 0, -20, 0]\n }],\n fade: [{\n type: 'fill',\n intensity: [0, 0, +20, 0]\n }],\n focus: [{\n type: 'fill',\n intensity: [0, 0, +20, 0]\n }\n ]\n },\n innerPadding: 0.1,\n nearestPointThreshold: 10,\n transform: {\n type: 'identity'\n },\n transition: {\n effect: 'cubic',\n duration: 1000\n },\n encoding: {\n size: {\n value: 30\n },\n color: { },\n shape: {\n value: 'circle'\n },\n x: {},\n y: {},\n strokeOpacity: {\n value: 0.5\n },\n fillOpacity: {\n value: 0.5\n }\n },\n shapes: ['circle', 'cross', 'diamond', 'square', 'star', 'wye', 'triangle'],\n sizes: [20, 30, 40, 50, 60, 70]\n};\n","import {\n Voronoi,\n selectElement,\n getQualifiedClassName,\n makeElement,\n FieldType,\n Scales\n} from 'muze-utils';\nimport { BaseLayer } from '../../base-layer';\nimport drawSymbols from './renderer';\nimport { defaultConfig } from './default-config';\nimport { ENCODING } from '../../enums/constants';\nimport * as PROPS from '../../enums/props';\nimport {\n attachDataToVoronoi,\n getLayerColor,\n positionPoints,\n getPlotMeasurement,\n getIndividualClassName\n} from '../../helpers';\n\nimport './styles.scss';\n\n/**\n * Point Layer creates point. Itt needs to be passed a data table, axes and configuration\n * of the layer.\n * Example :-\n * const pointLayer = layerFactory.getLayer('point', [data, axes, config]);\n * pointLayer.render(container);\n * @class\n */\nexport default class PointLayer extends BaseLayer {\n\n /**\n * Creates an instance of PointLayer.\n * @param {*} args\n * @memberof PointLayer\n */\n constructor (...args) {\n super(...args);\n this._voronoi = new Voronoi();\n this._bandScale = Scales.band();\n }\n\n /**\n *\n *\n * @returns\n * @memberof PointLayer\n */\n elemType () {\n return 'g';\n }\n\n /**\n * Returns the default configuration of the point layer\n * @return {Object} Default configuration of the point layer\n */\n static defaultConfig () {\n return defaultConfig;\n }\n\n static defaultPolicy (conf, userConf) {\n const config = BaseLayer.defaultPolicy(conf, userConf);\n const encoding = config.encoding;\n const transform = config.transform;\n const colorField = encoding.color && encoding.color.field;\n\n if (colorField) {\n transform.groupBy = colorField;\n }\n return config;\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof PointLayer\n */\n static formalName () {\n return 'point';\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof PointLayer\n */\n static drawFn () {\n return drawSymbols;\n }\n\n /**\n * Generates an array of objects containing x, y, width and height of the points from the data\n * @param {Array.} data Data Array\n * @param {Object} encoding Config\n * @param {Object} axes Axes object\n * @return {Array.} Array of points\n */\n translatePoints (data, encoding, axes, config = {}) {\n let points = [];\n const {\n size: sizeEncoding,\n shape: shapeEncoding,\n color: colorEncoding,\n x,\n y\n } = encoding;\n const sizeField = sizeEncoding.field;\n const sizeValue = sizeEncoding.value;\n const shapeField = shapeEncoding.field;\n const xField = x.field;\n const yField = y.field;\n const { size: sizeAxis, shape: shapeAxis } = axes;\n const fieldsConfig = this.data().getFieldsConfig();\n const isXDim = fieldsConfig[xField] && fieldsConfig[xField].def.type === FieldType.DIMENSION;\n const isYDim = fieldsConfig[yField] && fieldsConfig[yField].def.type === FieldType.DIMENSION;\n const key = isXDim ? ENCODING.X : (isYDim ? ENCODING.Y : null);\n const colorField = colorEncoding && colorEncoding.field;\n const colorFieldIndex = fieldsConfig[colorField] && fieldsConfig[colorField].index;\n const measurement = this._store.get(PROPS.MEASUREMENT);\n const shapeFieldIndex = fieldsConfig[shapeField] && fieldsConfig[shapeField].index;\n const sizeFieldIndex = fieldsConfig[sizeField] && fieldsConfig[sizeField].index;\n const colorAxis = axes.color;\n const { x: offsetX, y: offsetY } = config.offset;\n\n for (let i = 0, len = data.length; i < len; i++) {\n const d = data[i];\n const row = d._data;\n const size = sizeValue instanceof Function ? sizeValue(d, i) : sizeAxis.getSize(row[sizeFieldIndex]);\n const shape = shapeAxis.getShape(row[shapeFieldIndex]);\n\n let [xPx, yPx] = [ENCODING.X, ENCODING.Y].map((type) => {\n const value = d[type] === null ? undefined : d[type];\n const measure = type === ENCODING.X ? measurement.width : measurement.height;\n return !encoding[type].field ? measure / 2 : axes[type].getScaleValue(value);\n });\n\n xPx += offsetX;\n yPx += offsetY;\n\n const { color, rawColor } = getLayerColor({ datum: d, index: i },\n { colorEncoding, colorAxis, colorFieldIndex });\n\n const style = {\n fill: color,\n stroke: color\n };\n\n if (!isNaN(xPx) && !isNaN(yPx)) {\n const point = {\n enter: {\n x: xPx,\n y: yPx\n },\n update: {\n x: xPx,\n y: yPx\n },\n shape,\n size: Math.abs(size),\n meta: {\n stateColor: {},\n originalColor: rawColor,\n colorTransform: {}\n },\n style,\n _data: row,\n _id: d._id,\n source: d._data,\n rowId: d._id\n };\n point.className = getIndividualClassName(d, i, data, this);\n points.push(point);\n this.cachePoint(d[key], point);\n }\n }\n points = positionPoints(this, points);\n return points;\n }\n\n /**\n * Renders the plot in the given container.\n *\n * @param {SVGElement} container SVGElement which will hold the plot\n * @return {BarLayer} Instance of bar layer\n */\n render (container) {\n let maxSize = 0;\n let seriesClassName;\n const config = this.config();\n const keys = this._store.get(PROPS.TRANSFORMED_DATA).map(d => d.key);\n const { transition, className, defClassName, classPrefix } = config;\n const normalizedData = this._store.get(PROPS.NORMALIZED_DATA);\n const containerSelection = selectElement(container);\n const qualifiedClassName = getQualifiedClassName(defClassName, this.id(), classPrefix);\n this._points = [];\n this._pointMap = {};\n\n containerSelection.classed(qualifiedClassName.join(' '), true).classed(className, true);\n\n this._points = this.generateDataPoints(normalizedData, keys);\n\n makeElement(container, 'g', this._points, null, {\n update: (group, points) => {\n maxSize = Math.max(maxSize, ...points.map(d => d.size));\n seriesClassName = `${qualifiedClassName[0]}`;\n this.constructor.drawFn()({\n container: group.node(),\n points,\n className: seriesClassName,\n transition,\n keyFn: d => d._id\n });\n }\n }, data => data[0]._id);\n this._maxSize = Math.sqrt(maxSize / Math.PI) * 2;\n attachDataToVoronoi(this._voronoi, this._points);\n return this;\n }\n\n generateDataPoints (normalizedData, keys) {\n const encoding = this.config().encoding;\n const axes = this.axes();\n const [widthMetrics, heightMetrics] = getPlotMeasurement(this, keys);\n const offsetXValues = widthMetrics.offsetValues || [];\n const offsetYValues = heightMetrics.offsetValues || [];\n return normalizedData.map((dataArr, i) => {\n const measurementConf = this.getMeasurementConfig(offsetXValues[i], offsetYValues[i], widthMetrics.span,\n heightMetrics.span);\n return this.translatePoints(dataArr, encoding, axes, measurementConf);\n }).filter(d => d.length);\n }\n\n getMeasurementConfig (offsetX, offsetY, widthSpan, heightSpan) {\n return {\n offset: {\n x: (offsetX || 0) + widthSpan / 2,\n y: (offsetY || 0) + heightSpan / 2\n },\n span: {\n x: widthSpan,\n y: heightSpan\n }\n };\n }\n\n /**\n * Gets the nearest point from a position.\n * @param {number} x x position\n * @param {number} y y position\n * @return {Object} Point details\n */\n getNearestPoint (x, y) {\n const distanceLimit = Math.max(this._maxSize, this.config().nearestPointThreshold);\n\n if (!this.data()) {\n return null;\n }\n\n const point = this._voronoi.find(x, y, distanceLimit);\n const dimensions = point && point.data.data.update;\n const radius = point ? Math.sqrt(point.data.data.size / Math.PI) : 0;\n\n if (point) {\n const { _data, _id } = point.data.data;\n const identifiers = this.getIdentifiersFromData(_data, _id);\n return {\n id: identifiers,\n dimensions: [{\n x: dimensions.x,\n y: dimensions.y,\n width: radius,\n height: radius\n }],\n layerId: this.id()\n };\n }\n return null;\n }\n}\n","import { makeElement, easeFns } from 'muze-utils';\n\n/**\n *\n *\n * @param {*} elem\n * @param {*} datum\n * @param {*} index\n * @param {*} context\n */\nconst transitionBars = (elem, datum, index, context) => {\n const { transition } = context;\n const { duration, disabled, effect } = transition;\n const selection = elem;\n const selTransition = disabled ? selection : selection.transition().duration(duration).ease(easeFns[effect]);\n const update = datum.update || datum;\n const updateStyle = datum.style || {};\n datum.className && selection.classed(datum.className, true);\n Object.entries(update).forEach(attr => (!isNaN(attr[1]) && selTransition.attr(attr[0], attr[1])));\n Object.entries(updateStyle).forEach(styleObj => selection.style(styleObj[0], styleObj[1]));\n};\n\n/**\n *\n *\n * @param {*} elem\n * @param {*} d\n */\nconst barEnterFn = (elem, d) => {\n const selection = elem;\n const enter = d.enter || {};\n Object.entries(enter).forEach(attr => (!isNaN(attr[1]) && selection.attr(attr[0], attr[1])));\n};\n\n/**\n * Draws rectangles by using d3 selection\n * @param {Object} params Contains container element and points\n * @return {Selection} Bar Selection\n */\n/* istanbul ignore next */ export const drawRects = (params) => {\n const { points, container, keyFn } = params;\n const updateFns = {\n enter (elem, d) { barEnterFn(elem, d); },\n update (elem, d, i) { transitionBars(elem, d, i, params); }\n };\n return makeElement(container, 'rect', points, null, updateFns, keyFn);\n};\n","import { CLASSPREFIX } from '../../enums/constants';\n\nexport const defaultConfig = {\n classPrefix: CLASSPREFIX,\n defClassName: 'layer-bar',\n className: '',\n interaction: {\n highlight: [{\n type: 'fill',\n intensity: [0, 0, -15, 0]\n }],\n fade: [{\n type: 'fill',\n intensity: [0, 0, +15, 0]\n }],\n focus: [{\n type: 'fill',\n intensity: [0, 0, +15, 0]\n }]\n },\n transform: {\n type: 'stack'\n },\n transition: {\n effect: 'cubic',\n duration: 1000\n },\n innerPadding: 0.1,\n encoding: {\n color: {},\n x: {},\n y: {},\n x0: {},\n y0: {}\n },\n states: {\n highlight: {\n className: `${CLASSPREFIX}-layer-bar-highlight`\n },\n fadeout: {\n className: `${CLASSPREFIX}-layer-bar-fadeout`\n },\n selected: {\n className: `${CLASSPREFIX}-layer-bar-selected`\n }\n }\n};\n\n","import { FieldType, DimensionSubtype } from 'muze-utils';\nimport * as PROPS from '../../enums/props';\nimport { STACK } from '../../enums/constants';\nimport { getLayerColor, positionPoints, getIndividualClassName } from '../../helpers';\n\n/**\n *\n *\n * @param {*} type\n * @param {*} fieldInfo\n * @param {*} config\n * @param {*} data\n * @returns\n */\nconst resolveDimByField = (type, axesInfo, config, data) => {\n const spaceType = type === 'x' ? 'width' : 'height';\n const [fieldType, axis] = [config[`${type}FieldType`], axesInfo[`${type}Axis`]];\n const {\n transformType,\n sizeEncoding,\n sizeConfig,\n measurement\n } = config;\n\n const sizeValue = sizeEncoding.value;\n let enter = 0;\n let pos;\n let space = 0;\n let enterSpace = 0;\n if (fieldType !== undefined) {\n if (config[`${type}0Field`]) {\n const minVal = data[type];\n const maxVal = data[`${type}0`];\n let min;\n let max;\n if (minVal === null || maxVal === null) {\n return {\n enterSpace: undefined,\n enter: undefined,\n pos: undefined,\n space: undefined\n };\n } else if (fieldType === FieldType.MEASURE || fieldType === DimensionSubtype.TEMPORAL) {\n min = Math.min(minVal, maxVal);\n max = Math.max(minVal, maxVal);\n } else {\n min = minVal;\n max = maxVal;\n }\n const scales = type === 'x' ? [min, max] : [max, min];\n pos = axis.getScaleValue(scales[0]) + axis.getUnitWidth() / 2;\n space = Math.abs(axis.getScaleValue(scales[1]) - pos) + axis.getUnitWidth() / 2;\n\n enter = pos;\n enterSpace = 0;\n } else if (fieldType === DimensionSubtype.CATEGORICAL || fieldType === DimensionSubtype.TEMPORAL) {\n pos = axis.getScaleValue(data[type]) +\n (sizeConfig[type === 'x' ? 'barWidthOffset' : 'barHeightOffset'] || 0);\n\n space = sizeConfig[type === 'x' ? 'barWidth' : 'barHeight'];\n if (sizeValue !== undefined) {\n const diffPx = sizeValue * space;\n space -= diffPx;\n pos += diffPx / 2;\n }\n enter = pos;\n enterSpace = space;\n } else {\n const zeroPos = axis.getScaleValue(0);\n const axisType = axis.getScaleValue(data[type]);\n const axisType0 = axis.getScaleValue(data[`${type}0`]);\n\n enterSpace = 0;\n if (type === 'x') {\n pos = data[type] < 0 || transformType === STACK ? axisType : zeroPos;\n space = Math.abs(pos - (transformType === STACK ? axisType0 : (data[type] >= 0 ? axisType : zeroPos)));\n } else {\n pos = transformType === STACK || data[type] >= 0 ? axisType : zeroPos;\n space = Math.abs(pos - (transformType === STACK ? axisType0 : (data[type] >= 0 ? zeroPos : axisType)));\n }\n enter = zeroPos;\n }\n } else {\n pos = 0;\n space = measurement[spaceType];\n }\n\n return {\n enterSpace,\n enter,\n pos,\n space\n };\n};\n\n/**\n *\n *\n * @param {*} data\n * @param {*} config\n * @param {*} axes\n * @returns\n */\nconst resolveDimensions = (data, config, axes) => {\n const axesInfo = {\n xAxis: axes.x,\n yAxis: axes.y\n };\n const {\n enterSpace: enterWidth,\n enter: enterX,\n pos: xPos,\n space: width\n } = resolveDimByField('x', axesInfo, config, data);\n\n const {\n enterSpace: enterHeight,\n enter: enterY,\n pos: yPos,\n space: height\n } = resolveDimByField('y', axesInfo, config, data);\n return {\n enter: {\n x: enterX,\n y: enterY,\n width: enterWidth,\n height: enterHeight\n },\n update: {\n x: xPos,\n y: yPos,\n width,\n height\n }\n };\n};\n\n/**\n * Generates an array of objects containing x, y, width and height of the bars from the data\n * @param {Array.} data Data Array\n * @param {Object} encoding Config\n * @param {Object} axes Axes object\n * @param {Object} conf config object for point generation\n * @return {Array.} Array of points\n */\nexport const getTranslatedPoints = (context, data, sizeConfig) => {\n let points = [];\n const encoding = context.config().encoding;\n const axes = context.axes();\n const colorAxis = axes.color;\n const fieldsConfig = context.data().getFieldsConfig();\n const colorEncoding = encoding.color;\n const colorField = colorEncoding.field;\n const sizeEncoding = encoding.size || {};\n const {\n x0Field,\n y0Field,\n xFieldSubType,\n yFieldSubType\n } = context.encodingFieldsInf();\n const measurement = context._store.get(PROPS.MEASUREMENT);\n const isXDim = xFieldSubType === DimensionSubtype.CATEGORICAL || xFieldSubType === DimensionSubtype.TEMPORAL;\n const isYDim = yFieldSubType === DimensionSubtype.CATEGORICAL || yFieldSubType === DimensionSubtype.TEMPORAL;\n const key = isXDim ? 'x' : (isYDim ? 'y' : null);\n const transformType = context.transformType();\n const colorFieldIndex = colorField && fieldsConfig[colorField] && fieldsConfig[colorField].index;\n\n for (let i = 0, len = data.length; i < len; i++) {\n const d = data[i];\n const style = {};\n const meta = {};\n const dimensions = resolveDimensions(d, {\n xFieldType: xFieldSubType,\n yFieldType: yFieldSubType,\n x0Field,\n y0Field,\n transformType,\n measurement,\n sizeConfig,\n sizeEncoding\n }, axes);\n\n const { color, rawColor } = getLayerColor({ datum: d, index: i },\n { colorEncoding, colorAxis, colorFieldIndex });\n\n style.fill = color;\n meta.stateColor = {};\n meta.originalColor = rawColor;\n meta.colorTransform = {};\n\n const update = dimensions.update;\n\n if (!isNaN(update.x) && !isNaN(update.y) && d._id !== undefined) {\n let point = null;\n point = {\n enter: dimensions.enter,\n update,\n style,\n _data: d._data,\n _id: d._id,\n source: d._data,\n rowId: d._id,\n meta\n };\n point.className = getIndividualClassName(d, i, data, context);\n points.push(point);\n // Store each point in a hashmap with key as the dimensional or temporal field value\n context.cachePoint(d[key], point);\n }\n }\n\n points = positionPoints(context, points);\n return points;\n};\n","import {\n getClosestIndexOf,\n getQualifiedClassName,\n selectElement,\n createElements,\n clipElement,\n DimensionSubtype,\n FieldType,\n Scales\n} from 'muze-utils';\nimport { BaseLayer } from '../../base-layer';\nimport { drawRects } from './renderer';\nimport { defaultConfig } from './default-config';\nimport * as PROPS from '../../enums/props';\nimport { getPlotMeasurement } from '../../helpers';\nimport './styles.scss';\nimport { getTranslatedPoints } from './bar-helper';\n\nconst MEASURE = FieldType.MEASURE;\nconst scaleBand = Scales.band;\n\n/**\n * Bar Layer creates a bar plot. It needs to be passed a data table, axes and configuration of the layer.\n *\n * @example\n * const BarLayer = layerFactory.getLayer('bar');\n * BarLayer.create()\n * .config(config)\n * .data(dt)\n * .mountPoint(container);\n * @class\n */\nexport default class BarLayer extends BaseLayer {\n /**\n * Creates an instance of bar layer\n */\n constructor (...params) {\n super(...params);\n this._bandScale = scaleBand();\n this._plotPadding = {\n x: 0,\n y: 0\n };\n this._plotSpan = {\n x: 0,\n y: 0\n };\n this._pointMap = {};\n }\n\n /**\n *\n *\n * @returns\n * @memberof BarLayer\n */\n elemType () {\n return 'rect';\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof BarLayer\n */\n static formalName () {\n return 'bar';\n }\n\n /**\n * Returns the default configuration of the bar layer\n * @return {Object} Default configuration of the bar layer\n */\n static defaultConfig () {\n return defaultConfig;\n }\n\n /**\n *\n *\n * @static\n * @param {*} conf\n * @param {*} userConf\n * @returns\n * @memberof BarLayer\n */\n static defaultPolicy (conf, userConf) {\n const config = BaseLayer.defaultPolicy(conf, userConf);\n const encoding = config.encoding;\n const colorField = encoding.color.field;\n const transform = config.transform;\n\n if (colorField) {\n transform.groupBy = colorField;\n }\n return config;\n }\n\n /**\n *\n *\n * @param {*} data\n * @param {*} fieldsConfig\n * @returns\n * @memberof BarLayer\n */\n calculateDomainFromData (data, encodingFieldInf, fieldsConfig) {\n const domain = super.calculateDomainFromData(data, encodingFieldInf, fieldsConfig);\n ['x', 'y'].forEach((d) => {\n if (encodingFieldInf[`${d}FieldType`] === MEASURE && domain[d]) {\n encodingFieldInf[`${d}0Field}`] ? domain[d] = domain[d].sort((a, b) => a - b) :\n (domain[d][0] = Math.min(domain[d][0], 0));\n }\n });\n return domain;\n }\n\n /**\n * Generates an array of objects containing x, y, width and height of the bars from the data\n * @param {Array.} data Data Array\n * @param {Object} encoding Config\n * @param {Object} axes Axes object\n * @param {Object} conf config object for point generation\n * @return {Array.} Array of points\n */\n translatePoints (data, sizeConfig) {\n return getTranslatedPoints(this, data, sizeConfig);\n }\n\n /**\n * Renders the plot in the given container\n * @param {SVGGroup} container SVGGroup where plot will be rendered.\n * @return {BarLayer} Instance of bar layer.\n */\n render (container) {\n const config = this.config();\n const transition = config.transition;\n const store = this._store;\n const normalizedDataArr = store.get(PROPS.NORMALIZED_DATA);\n const transformedData = store.get(PROPS.TRANSFORMED_DATA);\n const keys = transformedData.map(d => d.key);\n const fieldsConfig = this.data().getFieldsConfig();\n const axes = this.axes();\n const height = axes.y && axes.y.scale().range()[0];\n const width = axes.x && axes.x.scale().range()[1];\n const defClassName = config.defClassName;\n const qualifiedClassName = getQualifiedClassName(defClassName, this.id(), config.classPrefix);\n const className = config.className;\n const containerSelection = selectElement(container);\n const dimensions = Object.values(fieldsConfig).filter(e => e.def.type === FieldType.DIMENSION)\n .map(e => e.index);\n containerSelection.classed(qualifiedClassName.join(' '), true);\n containerSelection.classed(className, true);\n clipElement(container, {\n x: 0,\n y: 0,\n width,\n height\n }, `id-${this.id()}`);\n\n this._points = this.generateDataPoints(normalizedDataArr, keys);\n\n createElements({\n data: this._points,\n container,\n selector: 'g',\n append: 'g',\n each: (points, group, i) => {\n const seriesClassName = `${qualifiedClassName[0]}-${keys[i] || i}`.toLowerCase();\n group.style('display', 'block');\n drawRects({\n container: group.node(),\n points,\n className: seriesClassName,\n transition,\n style: {},\n keyFn: d => dimensions.map(key => d._data[key]).join('-')\n });\n }\n });\n return this;\n }\n\n /**\n *\n *\n * @param {*} normalizedData\n * @param {*} keys\n * @returns\n * @memberof BarLayer\n */\n generateDataPoints (normalizedData, keys) {\n const [barWidthMetrics, barHeightMetrics] = getPlotMeasurement(this, keys);\n const barWidthOffsets = barWidthMetrics.offsetValues || [];\n const barHeightOffsets = barHeightMetrics.offsetValues || [];\n this._plotSpan = {\n x: barWidthMetrics.groupSpan || 0,\n y: barHeightMetrics.groupSpan || 0\n };\n this._plotPadding = {\n x: barWidthMetrics.padding || 0,\n y: barHeightMetrics.padding || 0\n };\n\n this._pointMap = {};\n return normalizedData.map((data, i) => this.translatePoints(data,\n {\n barWidth: barWidthMetrics.span,\n barWidthOffset: barWidthOffsets[i] || 0,\n barHeight: barHeightMetrics.span,\n barHeightOffset: barHeightOffsets[i] || 0\n }));\n }\n\n getPlotPadding () {\n return this._plotPadding;\n }\n\n /**\n * Gets the nearest point of the position passed.\n * @param {number} x x position\n * @param {number} y y position\n * @return {Object} Nearest point.\n */\n getNearestPoint (x, y) {\n if (!this.data()) {\n return null;\n }\n let axis;\n let value;\n let index;\n let points;\n let uniqueFieldType;\n let uniqueFieldIndex;\n let filterData;\n let identifiers;\n let pointFound = null;\n const dataModel = this.data();\n const dataObj = dataModel.getData();\n const fieldsConfig = dataModel.getFieldsConfig();\n const axes = this.axes();\n const data = dataObj.data;\n const pointMap = this._pointMap;\n const {\n xField,\n yField,\n xFieldSubType,\n yFieldSubType\n } = this.encodingFieldsInf();\n\n if (xFieldSubType === FieldType.MEASURE) {\n axis = axes.y;\n value = axis.invert(y);\n uniqueFieldIndex = fieldsConfig[yField].index;\n uniqueFieldType = yFieldSubType;\n } else {\n axis = axes.x;\n value = axis.invert(x);\n uniqueFieldIndex = fieldsConfig[xField].index;\n uniqueFieldType = xFieldSubType;\n }\n\n if (uniqueFieldType === DimensionSubtype.CATEGORICAL) {\n points = pointMap[value];\n }\n\n if (uniqueFieldType === DimensionSubtype.TEMPORAL) {\n filterData = [...new Set(data.map(d => d[uniqueFieldIndex]))];\n index = getClosestIndexOf(filterData, value);\n value = filterData[index];\n points = pointMap[value];\n }\n const len = points && points.length;\n points && points.sort((p1, p2) => p1.update.y - p2.update.y);\n for (let i = 0; i < len; i++) {\n const point = points[i];\n const update = point.update;\n if (x >= update.x && x <= (update.width + update.x) && y >= update.y && y <= (update.height + update.y)) {\n pointFound = point;\n break;\n }\n pointFound = null;\n }\n\n const values = pointFound && pointFound._data;\n if (values) {\n identifiers = this.getIdentifiersFromData(values, pointFound._id);\n }\n return pointFound ? {\n dimensions: [pointFound.update],\n id: identifiers,\n layerId: this.id()\n } : pointFound;\n }\n\n getPlotSpan () {\n return this._plotSpan;\n }\n}\n","import { CLASSPREFIX } from '../../enums/constants';\n\nexport const defaultConfig = {\n defClassName: 'layer-tick',\n className: '',\n classPrefix: CLASSPREFIX,\n interaction: {\n highlight: [{\n type: 'stroke',\n intensity: [0, 0, -15, 0]\n }],\n fade: [{\n type: 'stroke',\n intensity: [0, 0, 15, 0]\n }],\n focus: [{\n type: 'stroke',\n intensity: [0, 0, 15, 0]\n }]\n },\n innerPadding: 0.1,\n transform: {\n type: 'identity'\n },\n transition: {\n effect: 'cubic',\n duration: 1000\n },\n encoding: {\n color: { },\n x: {},\n y: {},\n x0: {},\n y0: {},\n strokeOpacity: {\n value: 0.5\n },\n fillOpacity: {\n value: 0.5\n }\n },\n states: {\n highlight: {\n className: `${CLASSPREFIX}-layer-tick-highlight`\n },\n fadeout: {\n className: `${CLASSPREFIX}-layer-tick-fadeout`\n },\n selected: {\n className: `${CLASSPREFIX}-layer-tick-selected`\n }\n }\n};\n","import { selectElement } from 'muze-utils';\n\n/**\n * Draws ticks by using d3 selection\n * @param {Object} params Contains container element and points\n * @return {Selection} Ticks Selection\n */\nexport default /* istanbul ignore next */ (params) => {\n const { points, container, keyFn, className } = params;\n const mount = selectElement(container);\n const ticks = mount.selectAll('path').data(points, keyFn);\n const ticksEnter = ticks.enter().append('path');\n\n mount.attr('class', className || '');\n ticksEnter.each(function (d) {\n const selection = selectElement(this);\n const enter = d.enter || {};\n Object.entries(enter).forEach(attr => (!isNaN(attr[1]) && selection.attr(attr[0], attr[1])));\n });\n\n ticks.exit().remove();\n return ticks.merge(ticksEnter)\n .each(function (d) {\n const selection = selectElement(this);\n const update = d.update;\n const updateStyle = d.style || {};\n const x0 = update.x0 !== undefined ? update.x0 : update.x;\n const y0 = update.y0 !== undefined ? update.y0 : update.y;\n const path = `M ${update.x} ${update.y} L ${x0} ${y0}`;\n d.className && selection.classed(d.className, true);\n selection.attr('d', path);\n Object.entries(updateStyle).forEach(styleObj => selection.style(styleObj[0], styleObj[1]));\n });\n};\n\n","import { FieldType } from 'muze-utils';\nimport { PointLayer } from '../point';\nimport { defaultConfig } from './default-config';\nimport * as PROPS from '../../enums/props';\nimport { ENCODING } from '../../enums/constants';\nimport drawTicks from './renderer';\nimport './styles.scss';\nimport { getAxesScales, getLayerColor, positionPoints, getIndividualClassName } from '../../helpers';\n\nexport default class TickLayer extends PointLayer {\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof TickLayer\n */\n static defaultConfig () {\n return defaultConfig;\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof TickLayer\n */\n static formalName () {\n return 'tick';\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof TickLayer\n */\n static drawFn () {\n return drawTicks;\n }\n\n /**\n *\n *\n * @returns\n * @memberof TickLayer\n */\n elemType () {\n return 'path';\n }\n\n /**\n * Generates an array of objects containing x, y, width and height of the points from the data\n * @param {Array.} data Data Array\n * @param {Object} encoding Config\n * @param {Object} axes Axes object\n * @return {Array.} Array of points\n */\n translatePoints (data, encoding, axes, config = {}) {\n let points = [];\n const {\n xAxis,\n yAxis\n } = getAxesScales(axes);\n const fieldsConfig = this.data().getFieldsConfig();\n const {\n xField,\n yField,\n x0Field,\n y0Field,\n xFieldType,\n yFieldType\n } = this.encodingFieldsInf();\n const isXDim = xFieldType === FieldType.DIMENSION;\n const isYDim = yFieldType === FieldType.DIMENSION;\n const key = isXDim ? ENCODING.X : (isYDim ? ENCODING.Y : null);\n const colorEncoding = encoding.color;\n const colorField = colorEncoding && colorEncoding.field;\n const colorFieldIndex = fieldsConfig[colorField] && fieldsConfig[colorField].index;\n const measurement = this._store.get(PROPS.MEASUREMENT);\n const colorAxis = axes.color;\n const { x: offsetX, y: offsetY } = config.offset;\n const { x: xSpan, y: ySpan } = config.span;\n for (let i = 0, len = data.length; i < len; i++) {\n let xPx;\n let x0Px;\n let y0Px;\n let yPx;\n const d = data[i];\n const row = d._data;\n if (xField) {\n xPx = xAxis.getScaleValue(d.x) + offsetX;\n x0Px = xPx + xSpan;\n }\n\n if (yField) {\n yPx = yAxis.getScaleValue(d.y) + offsetY;\n y0Px = yPx !== null ? yPx + ySpan : null;\n }\n\n if (!xField) {\n xPx = 0;\n x0Px = measurement.width;\n if (!isNaN(yPx)) {\n yPx += ySpan / 2;\n y0Px = yPx;\n }\n }\n\n if (!yField) {\n yPx = 0;\n y0Px = measurement.height;\n x0Px = xPx += xSpan / 2;\n }\n\n if (x0Field) {\n x0Px = xAxis.getScaleValue(d.x0) + xSpan;\n yPx += ySpan / 2;\n y0Px -= ySpan / 2;\n }\n\n if (y0Field) {\n y0Px = yAxis.getScaleValue(d.y0) + ySpan;\n xPx += xSpan / 2;\n x0Px -= xSpan / 2;\n }\n const style = {};\n const meta = {};\n const { color, rawColor } = getLayerColor({ datum: d, index: i },\n { colorEncoding, colorAxis, colorFieldIndex });\n\n style.stroke = color;\n meta.stateColor = {};\n meta.originalColor = rawColor;\n meta.colorTransform = {};\n if (!isNaN(xPx) && !isNaN(yPx)) {\n const point = {\n enter: {},\n update: {\n x: xPx,\n y: yPx,\n x0: x0Px,\n y0: y0Px\n },\n style,\n _data: row,\n _id: d._id,\n source: row,\n rowId: d._id,\n meta\n };\n point.className = getIndividualClassName(d, i, data, this);\n points.push(point);\n this.cachePoint(d[key], point);\n }\n }\n points = positionPoints(this, points);\n return points;\n }\n\n getMeasurementConfig (offsetX, offsetY, widthSpan, heightSpan) {\n return {\n offset: {\n x: (offsetX || 0),\n y: (offsetY || 0)\n },\n span: {\n x: widthSpan,\n y: heightSpan\n }\n };\n }\n}\n","import { isSimpleObject, mergeRecursive, getObjProp } from 'muze-utils';\n\nconst parseLayerDefinition = (sink, definition, layerDef, layerType) => {\n for (const key in definition) {\n if (Object.hasOwnProperty.call(definition, key)) {\n let strs;\n let propValue;\n const def = definition[key];\n if (isSimpleObject(def)) {\n sink[key] = {};\n parseLayerDefinition(sink[key], def, layerDef, layerType);\n } else if (typeof def === 'string' && (strs = def.split('.')) && strs[0] === layerType) {\n propValue = getObjProp(layerDef, ...strs.slice(1, strs.length));\n if (propValue !== undefined) {\n sink[key] = propValue;\n }\n } else {\n sink[key] = def;\n }\n }\n }\n};\n\nconst sanitizeEncoding = (encoding) => {\n // Create object for each encoding value if encoding value is a string\n for (const key in encoding) {\n if (typeof encoding[key] === 'string') {\n encoding[key] = {\n field: encoding[key]\n };\n }\n }\n};\n\n/**\n * Layer Factory creates layers based on the layer type. All types of layers needs to register in\n * the layer factory. For getting a layer instance, getLayer method needs to invoked with the\n * layerType and other arguments.\n */\nconst layerFactory = (() => {\n const compositeLayers = {};\n const factoryObj = {\n setLayerRegistry: (reg) => {\n factoryObj._layerRegistry = reg;\n },\n getSerializedConf: (mark, layerDef) => {\n let serializedDefs;\n const defs = compositeLayers[mark];\n const newConf = mergeRecursive({}, layerDef);\n\n // If it is a composite layer then resolve all the definitions of each unit layer\n if (defs) {\n serializedDefs = defs.map((unitLayerDef) => {\n const sDef = {};\n parseLayerDefinition(sDef, unitLayerDef, newConf, mark);\n sanitizeEncoding(sDef.encoding);\n return sDef;\n });\n } else {\n const encoding = newConf.encoding;\n // Create object for each encoding value if encoding value is a string\n sanitizeEncoding(encoding);\n serializedDefs = newConf;\n }\n\n return serializedDefs;\n },\n getLayerInstance: (layerDef) => {\n const layerRegistry = factoryObj._layerRegistry;\n layerDef = !(layerDef instanceof Array) ? [layerDef] : layerDef;\n const instances = layerDef.map((layerObj) => {\n const layerConstructor = layerRegistry[layerObj.mark];\n return layerConstructor.create();\n });\n return instances.length === 1 ? instances[0] : instances;\n },\n composeLayers: (layerType, layerDefs) => {\n compositeLayers[layerType] = layerDefs;\n },\n sanitizeLayerConfig: (layerDef) => {\n const newConf = mergeRecursive({}, layerDef);\n sanitizeEncoding(newConf.encoding);\n return newConf;\n }\n };\n return factoryObj;\n})();\n\nexport default layerFactory;\n","import { AreaLayer } from './layers/area';\nimport { ArcLayer } from './layers/arc';\nimport { LineLayer } from './layers/line';\nimport { TextLayer } from './layers/text';\nimport { PointLayer } from './layers/point';\nimport { BarLayer } from './layers/bar';\nimport { BaseLayer } from './base-layer';\nimport * as CONSTANTS from './enums/constants';\nimport { TickLayer } from './layers/tick';\n\nexport const DEFAULT_LAYERS = {\n [CONSTANTS.AREA_LAYER]: AreaLayer,\n [CONSTANTS.ARC_LAYER]: ArcLayer,\n [CONSTANTS.LINE_LAYER]: LineLayer,\n [CONSTANTS.TEXT_LAYER]: TextLayer,\n [CONSTANTS.POINT_LAYER]: PointLayer,\n [CONSTANTS.TICK_LAYER]: TickLayer,\n [CONSTANTS.BAR_LAYER]: BarLayer,\n [CONSTANTS.BASE_LAYER]: BaseLayer\n};\n","/**\n * This file exports constants that are used as enums in the\n * crosstab group implementation.\n */\n/**\n * Width of the crosstab.\n */\nexport const X = 'x';\n/**\n * Width of the crosstab.\n */\nexport const Y = 'y';\n/**\n * Width of the crosstab.\n */\nexport const WIDTH = 'width';\n\n/**\n * Height of the crosstab.\n */\nexport const HEIGHT = 'height';\n\n/**\n * Field referring to object storing measurement configuration.\n */\nexport const MEASUREMENT = 'measurement';\n\n/**\n * Field referring to object storing configuration properties.\n */\nexport const CONFIG = 'config';\n\n/**\n * Width of visual unit in crosstab.\n */\nexport const MIN_UNIT_WIDTH = 'minUnitWidth';\n\n/**\n * Height of visual unit.\n */\nexport const MIN_UNIT_HEIGHT = 'minUnitHeight';\n\n/**\n * Field to store the array of dimensions to facet by.\n */\nexport const DIMENSIONS = 'dimensions';\n\n/**\n * Field to store array of measures to use as x axis.\n */\nexport const MEASURES = 'measures';\n\n/**\n * Field to store the array of dimensions to facet by.\n */\nexport const DIMENSION = 'dimension';\n\n/**\n * Field to store array of measures to use as x axis.\n */\nexport const MEASURE = 'measure';\n\n/**\n * Flag to specify if model should be pivoted.\n */\nexport const PIVOT = 'pivot';\n\n/**\n * Flag to specify format\n */\nexport const FORMAT = 'format';\n\n/**\n * Mount point where the variable will be hosted\n */\nexport const MOUNT = 'mount';\n\n/**\n * Data update flag\n */\nexport const HAS_DATA_UPDATED = 'hasDataUpdated';\n\n/**\n * Field referring to object storing set of rows\n */\nexport const ROWS = 'rows';\n\n/**\n * Field referring to object storing set of columns\n */\nexport const COLUMNS = 'columns';\n\n/**\n * Field referring to object storing set of columns\n */\nexport const COL = 'col';\n\n/**\n * Field referring to object storing set of rows\n */\nexport const ROW = 'row';\n\n/**\n * Field referring to object storing set of columns\n */\nexport const COLUMN = 'column';\n\n/**\n * Field referring to object storing color field\n */\nexport const COLOR = 'color';\n\n/**\n * Field referring to object storing shape field\n */\nexport const SHAPE = 'shape';\n\n/**\n * Field referring to object storing size field\n */\nexport const SIZE = 'size';\n\n/**\n * Field referring to object storing detail field\n */\nexport const DETAIL = 'detail';\n\n/**\n * Field referring to object storing set of layers\n */\nexport const LAYERS = 'layers';\n\n/**\n * Field referring to object storing the transforms\n */\nexport const TRANSFORM = 'transform';\n\n/**\n * Field referring to object storing the transforms\n */\nexport const ORDINAL = 'ordinal';\n\n/**\n * Field referring to object storing the transforms\n */\nexport const LINEAR = 'linear';\n/**\n * Field referring to object storing the transforms\n */\nexport const LEFT = 'left';\n/**\n * Field referring to object storing the transforms\n */\nexport const RIGHT = 'right';\n/**\n * Field referring to object storing the transforms\n */\nexport const TOP = 'top';\n/**\n * Field referring to object storing the transforms\n */\nexport const BOTTOM = 'bottom';\n\n/**\n * Field referring to object storing the transforms\n */\nexport const RETINAL = 'retinal';\n/**\n * Field referring to object storing the transforms\n */\nexport const CELL = 'cell';\n/**\n * Field referring to object storing the transforms\n */\nexport const X_AXES = 'xAxes';\n/**\n * Field referring to object storing the transforms\n */\nexport const Y_AXES = 'yAxes';\n/**\n * Field referring to object storing the transforms\n */\nexport const ENTRY_CELLS = 'entryCell';\n/**\n * Field referring to object storing the transforms\n */\nexport const INITIALIZED = 'initialized';\n/**\n * Field referring to object storing the transforms\n */\nexport const EXIT_CELLS = 'exitCell';\n/**\n * Field referring to object storing the transforms\n */\nexport const AXIS = 'axis';\n/**\n * Field referring to object storing the transforms\n */\nexport const UNIT = 'unit';\n/**\n * Field referring to object storing the transforms\n */\nexport const UPDATED = 'updated';\n/**\n * Field referring to object storing the transforms\n */\nexport const BEFORE_UPDATE = 'beforeupdate';\n/**\n * Field referring to object storing the transforms\n */\nexport const VALUE_MATRIX = 'valueMatrix';\n/**\n * Field referring to object storing the transforms\n */\nexport const FACET_HEADERS = 'facet-headers';\n/**\n * Field referring to object storing the transforms\n */\nexport const RADIUS = 'radius';\n/**\n * Field referring to object storing the transforms\n */\nexport const ANGLE = 'angle';\n/**\n * Field referring to object storing the transforms\n */\nexport const ARC = 'arc';\n/**\n * Field referring to object storing the transforms\n */\nexport const CARTESIAN = 'cartesian';\n/**\n * Field referring to object storing the transforms\n */\nexport const POLAR = 'polar';\n/**\n * Field referring to object storing the transforms\n */\nexport const CATEGORICAL = 'categorical';\n/**\n * Field referring to object storing the transforms\n */\nexport const TEMPORAL = 'temporal';\n/**\n * Field referring to object storing the transforms\n */\nexport const BAR = 'bar';\n/**\n * Field referring to object storing the transforms\n */\nexport const LINE = 'line';\n/**\n * Field referring to object storing the transforms\n */\nexport const POINT = 'point';\n/**\n * Field referring to object storing the transforms\n */\nexport const PRIMARY = 'Primary';\n/**\n * Field referring to object storing the transforms\n */\nexport const SECONDARY = 'Secondary';\n/**\n * Field referring to object storing the transforms\n */\nexport const BOTH = 'both';\n/**\n * Field referring to object storing the transforms\n */\nexport const INTERACTION = 'interaction';\n/**\n * Field referring to object storing the transforms\n */\nexport const GRID_LINES = 'gridLines';\n/**\n * Field referring to object storing the transforms\n */\nexport const GRID_BANDS = 'gridBands';\n/**\n * Field referring to object storing the transforms\n */\nexport const HEADER = 'header';\n/**\n * Field referring to object storing the transforms\n */\nexport const FACET = 'facet';\n\n","import { ROWS, COLUMNS, COLOR, SHAPE, SIZE, DETAIL, LAYERS, TRANSFORM, CONFIG } from '../enums/constants';\n\n/**\n * @module\n * This is the local options semantics based on which setters getters are created and reactivity is initiated.\n * This local object is only valid for Artboard.\n * Artboard merges global and local object both to the model\n *\n * Format\n * PROPERTRY_NAME: {\n * value: // default value of the property,\n * meta: {\n * typeCheck: // The setter value will be checked using this. If the value is function then the setter value\n * // is passed as args.\n * typeExpected: // The output of typecheck action will be tested against this. Truthy value will set the\n * // value to the setter\n * sanitizaiton: // Need for sanitization before type is checked\n * }\n * }\n */\n\nexport default {\n [CONFIG]: {},\n [ROWS]: [],\n [COLUMNS]: [],\n [COLOR]: '',\n [SHAPE]: '',\n [SIZE]: '',\n [DETAIL]: '',\n [LAYERS]: '',\n [TRANSFORM]: []\n};\n","import { ERROR_MSG } from 'muze-utils';\n\n/**\n * Interfaces for VisualGroup. Any new VisualGroup has to implement this class.\n * @class SimpleGroup\n */\nclass SimpleGroup {\n\n /**\n * This method is used to set or get the DataModel instance.\n *\n * @param {DataModel | undefined} dataModel Instance of datamodel.\n\n * @memberof SimpleGroup\n */\n data () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * This method is used to set or get the group specific configuration\n * properties\n *\n * @param {Object | undefined} configObj The input configuration.\n * or instance of visual group.\n * @memberof SimpleGroup\n */\n config () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * This method is used to return a serialized representation of the\n * instance's properties.\n *\n * @memberof SimpleGroup\n */\n serialize () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * This method is used to get or set the measurement object which houses\n * layout properties like width and height.\n *\n * @param {Object | undefined} mObj The measurement properties.\n * @memberof SimpleGroup\n */\n measurement () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n}\n\nexport default SimpleGroup;\n","import { ERROR_MSG } from 'muze-utils';\n\n/**\n *\n *\n * @export\n * @class Variable\n */\nexport default class Variable {\n\n /**\n *\n *\n * @memberof Variable\n */\n type () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n *\n *\n * @memberof Variable\n */\n toString () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n}\n","import Variable from './variable';\n\n/**\n *\n *\n * @class ComposeVars\n * @extends {Variable}\n */\nclass ComposedVars extends Variable {\n\n /**\n *Creates an instance of ComposeVars.\n * @param {*} texts\n * @memberof ComposeVars\n */\n constructor (...texts) {\n super(...texts);\n this.vars(texts);\n }\n\n /**\n *\n *\n * @param {*} params\n * @returns\n * @memberof ComposeVars\n */\n vars (...params) {\n if (params.length) {\n this._vars = params[0];\n return this;\n }\n return this._vars;\n }\n\n /**\n *\n *\n * @param {*} dm\n * @returns\n * @memberof ComposeVars\n */\n data (...dm) {\n if (dm.length) {\n this.vars().forEach(d => d.data(dm[0]));\n return this;\n }\n return this._data;\n }\n\n /**\n *\n *\n * @returns\n * @memberof ComposeVars\n */\n getMembers () {\n const vars = this.vars();\n return vars.map(member => member.getMembers()[0]);\n }\n\n /**\n *\n *\n * @returns\n * @memberof ComposeVars\n */\n type () {\n return this.vars()[0].type();\n }\n\n /**\n *\n *\n * @returns\n * @memberof ComposeVars\n */\n toString () {\n return this.vars().map(d => d.toString()).join(',');\n }\n\n /**\n *\n *\n * @returns\n * @memberof ComposeVars\n */\n numberFormat () {\n return this.vars()[0].numberFormat();\n }\n\n /**\n *\n *\n * @returns\n * @memberof ComposeVars\n */\n format (values) {\n return this.vars()[0].format(values);\n }\n\n /**\n *\n *\n * @returns\n * @memberof ComposedVars\n */\n subtype () {\n return this.vars()[0].subtype();\n }\n\n /**\n *\n *\n * @returns\n * @memberof ComposedVars\n */\n getMinDiff () {\n return this.vars()[0].getMinDiff();\n }\n}\n\nexport default ComposedVars;\n","import { DateTimeFormatter } from 'muze-utils';\nimport Variable from './variable';\n\n/**\n *\n *\n * @export\n * @class Vars\n * @extends {Variable}\n */\nexport default class SimpleVariable extends Variable {\n\n /**\n *Creates an instance of Vars.\n * @param {*} text\n * @memberof Vars\n */\n constructor (text) {\n super();\n this.oneVar(text);\n }\n\n /**\n *\n *\n * @param {*} params\n * @returns\n * @memberof Vars\n */\n oneVar (...oneV) {\n if (oneV.length) {\n this._oneVar = oneV[0];\n return this;\n }\n return this._oneVar;\n }\n\n /**\n *\n *\n * @param {*} dm\n * @returns\n * @memberof Vars\n */\n data (...dm) {\n if (dm.length) {\n this._data = dm[0];\n return this;\n }\n return this._data;\n }\n\n /**\n *\n *\n * @returns\n * @memberof Vars\n */\n toString () {\n return this.oneVar();\n }\n\n /**\n *\n *\n * @memberof SimpleVariable\n */\n numberFormat () {\n if (this.type() === 'measure') {\n const formatter = this.data().getFieldspace().getMeasure()[this.oneVar()]._ref;\n return formatter.numberFormat();\n } return val => val;\n }\n\n /**\n *\n *\n * @memberof SimpleVariable\n */\n format (values) {\n if (values && this.subtype() === 'temporal') {\n const formatter = this.data().getFieldspace().getDimension()[this.oneVar()]._ref.schema.format;\n const dtFormat = new DateTimeFormatter(formatter);\n values = values.map(e => dtFormat.getNativeDate(e));\n }\n return values;\n }\n\n /**\n *\n *\n * @returns\n * @memberof Vars\n */\n getMembers () {\n return [this.oneVar()];\n }\n\n /**\n *\n *\n * @returns\n * @memberof Vars\n */\n type () {\n const fieldDef = this.data().getFieldsConfig()[this.oneVar()].def;\n return fieldDef.type;\n }\n\n /**\n *\n *\n * @returns\n * @memberof Vars\n */\n subtype () {\n const fieldDef = this.data().getFieldsConfig()[this.oneVar()].def;\n return fieldDef.subtype || fieldDef.type;\n }\n\n /**\n *\n *\n * @returns\n * @memberof SimpleVariable\n */\n getMinDiff () {\n const fieldSpace = this.data().getFieldspace();\n return fieldSpace.fieldsObj()[this.oneVar()].getMinDiff();\n }\n\n equals (varInst) {\n return this.oneVar() === varInst.oneVar();\n }\n}\n","import { ComposedVars, SimpleVariable } from '../variable';\nimport { DIMENSION, COLUMNS, ROWS, TEMPORAL } from '../enums/constants';\n\n/**\n * Gets the list of fields in a sorted order by measurement and dimension\n *\n * @param {Array} fieldList List of fields in the view\n * @param {Object} fieldMap Mapping of fields in the datamodel\n * @return {Array} fields sorted by measurement and dimensions\n */\nconst orderFields = (fieldArray, type) => {\n const dimensionArr = [[], []];\n const measureArr = [[], []];\n const temporalArr = [[], []];\n const categoricalArr = [[], []];\n\n fieldArray.forEach((fieldList, index) => {\n fieldList.forEach((field) => {\n if (field.type() === DIMENSION) {\n dimensionArr[index].push(field);\n field.subtype() === TEMPORAL ? temporalArr[index].push(field) : categoricalArr[index].push(field);\n } else {\n measureArr[index].push(field);\n }\n });\n });\n\n const numOfMeasures = measureArr[0].length + (measureArr[1] ? measureArr[1].length : 0);\n\n // Single array of fields\n if (!fieldArray[1]) {\n // Push measures to bottom\n measureArr[1] = type === COLUMNS ? measureArr[0] : [];\n // Push measures to left\n measureArr[0] = type !== COLUMNS ? measureArr[0] : [];\n // Bottom and right dimensions empty\n dimensionArr[1] = [];\n // Left and top filled with dimensions\n dimensionArr[0] = dimensionArr[0];\n if (numOfMeasures === 0) {\n const allDimensions = [...dimensionArr[0], ...dimensionArr[1]];\n if (type === COLUMNS) {\n dimensionArr[1] = allDimensions[allDimensions.length - 1] ? [allDimensions[allDimensions.length - 1]]\n : [];\n allDimensions.splice(-1, 1);\n } else {\n dimensionArr[1] = [];\n }\n dimensionArr[0] = [...allDimensions];\n }\n }\n\n if (dimensionArr[0].length && dimensionArr[1].length && numOfMeasures > 0) {\n dimensionArr[0] = [...dimensionArr[0], ...dimensionArr[1]];\n dimensionArr[1] = [];\n }\n return {\n fields: dimensionArr.map((list, i) => (i === 1 ?\n measureArr[i].concat(dimensionArr[i]) : dimensionArr[i].concat(measureArr[i]))),\n dimensions: [...dimensionArr[0], ...dimensionArr[1]],\n measures: [...measureArr[0], ...measureArr[1]],\n temporal: [...temporalArr[0], ...temporalArr[1]],\n categorical: [...categoricalArr[0], ...categoricalArr[1]]\n };\n};\n\n/**\n * Gets the list of normalized fields\n *\n * @param {Array} fields List of fields in the view\n * @param {Object} fieldMap Mapping of fields in the datamodel\n * @return {Array} fields normalized by measurement and dimensions\n */\nconst normalizeFields = (config, type) => {\n const fieldsArr = [];\n const fields = config[type];\n\n if (!(fields[0] instanceof Array)) {\n fieldsArr[0] = fields;\n } else {\n fieldsArr[0] = fields[0] || [];\n fieldsArr[1] = fields[1] || [];\n }\n return fieldsArr;\n};\n\n/**\n *\n *\n * @param {*} fields\n * @param {*} datamodel\n * @return\n */\nconst convertToVar = (datamodel, fields) => {\n const vars = [];\n\n fields && fields.forEach((field) => {\n if (field instanceof ComposedVars) {\n vars.push(field);\n field.data(datamodel);\n } else {\n vars.push(new SimpleVariable(field).data(datamodel));\n }\n });\n return vars;\n};\n\n/**\n *\n *\n * @param {*} rows\n * @param {*} columns\n * @param {*} datamodel\n * @return\n */\nexport const transformFields = (datamodel, config) => {\n const [rowsInfo, columnsInfo] = [ROWS, COLUMNS].map((fields) => {\n const normalizedFields = normalizeFields(config, fields);\n const norFields = [convertToVar(datamodel, normalizedFields[0])];\n\n if (normalizedFields[1]) {\n norFields[1] = convertToVar(datamodel, normalizedFields[1]);\n }\n return orderFields(norFields, fields);\n });\n const {\n fields: rows,\n dimensions: rowDimensions,\n measures: rowMeasures,\n temporal: rowTemporalFields,\n categorical: rowCategoricalFields\n } = rowsInfo;\n const {\n fields: columns,\n dimensions: columnDimensions,\n measures: columnMeasures,\n temporal: columnTemporalFields,\n categorical: columnCategoricalFields\n } = columnsInfo;\n return {\n rows,\n rowDimensions,\n rowMeasures,\n rowTemporalFields,\n rowCategoricalFields,\n columns,\n columnTemporalFields,\n columnCategoricalFields,\n columnDimensions,\n columnMeasures\n };\n};\n","import { ERROR_MSG, mergeRecursive } from 'muze-utils';\nimport { transformFields } from './field-sanitizer';\nimport { getHeaderAxisFrom } from '../group-helper/group-utils';\nimport { ROW, COLUMN } from '../enums/constants';\n\n/**\n *\n *\n * @export\n * @class VisualEncoder\n */\nexport default class VisualEncoder {\n\n /**\n *\n *\n * @memberof VisualEncoder\n */\n createAxis () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n *\n *\n * @memberof VisualEncoder\n */\n setCommonDomain () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n *\n *\n * @memberof VisualEncoder\n */\n getLayerConfig () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n fieldInfo (...info) {\n if (info.length) {\n this._fieldInfo = mergeRecursive(this._fieldInfo || {}, info[0]);\n return this;\n }\n return this._fieldInfo;\n }\n\n /**\n *\n *\n * @param {*} datamodel\n * @param {*} config\n * @return\n * @memberof VisualEncoder\n */\n fieldSanitizer (datamodel, config) {\n this.fieldInfo(transformFields(datamodel, config));\n return this.fieldInfo();\n }\n\n /**\n *\n *\n * @param {*} params\n * @return\n * @memberof VisualEncoder\n */\n axisFrom (...params) {\n if (params.length) {\n this._axisFrom = params[0];\n return this;\n }\n return this._axisFrom;\n }\n\n /**\n *\n *\n * @param {*} params\n * @return\n * @memberof VisualEncoder\n */\n headerFrom (...params) {\n if (params.length) {\n this._headerFrom = params[0];\n return this;\n }\n return this.__headerFrom;\n }\n\n /**\n *\n *\n * @param {*} axisFrom\n * @return\n * @memberof CartesianEncoder\n */\n setAxisAndHeaders (axisFrom = {}, fields) {\n const [rowHeader, rowAxis] = getHeaderAxisFrom(ROW, fields.rows, axisFrom);\n const [colHeader, colAxis] = getHeaderAxisFrom(COLUMN, fields.columns, axisFrom);\n\n this.axisFrom({\n row: rowAxis,\n column: colAxis\n });\n this.headerFrom({\n row: rowHeader,\n column: colHeader\n });\n return this;\n }\n}\n","import { ContinousAxis, BandAxis, TimeAxis, ColorAxis, SizeAxis, ShapeAxis } from '@chartshq/muze-axis';\n\nexport const scaleMaps = {\n linear: ContinousAxis,\n band: BandAxis,\n temporal: TimeAxis,\n size: SizeAxis,\n color: ColorAxis,\n shape: ShapeAxis\n};\n","import { ScaleType } from '@chartshq/muze-axis';\n\n/**\n * Map of DataModel types to associated field types.\n */\nexport const dataTypeScaleMap = {\n dimension: ScaleType.BAND,\n categorical: ScaleType.BAND,\n measure: ScaleType.LINEAR,\n temporal: ScaleType.TIME\n};\n\n","import { mergeRecursive } from 'muze-utils';\nimport { AxisOrientation } from '@chartshq/muze-axis';\nimport { scaleMaps } from '../enums/scale-maps';\nimport { getAxisType, getAxisKey } from '../group-helper';\nimport { dataTypeScaleMap } from '../data-type-scale-map';\nimport { CATEGORICAL, TEMPORAL, BAR, LINE, POINT, BOTH, Y } from '../enums/constants';\n\n/**\n *\n *\n * @param {*} axisInfo\n * @param {*} field\n * @param {*} axesCreators\n * @return\n */\nconst getAxisConfig = (axisInfo, field, axesCreators) => {\n let axisOrientation;\n const { index, axisIndex, axisType } = axisInfo;\n const { config, position } = axesCreators;\n const userAxisConfig = config.axes ? (config.axes[axisType] || {}) : {};\n const {\n LEFT,\n RIGHT,\n TOP,\n BOTTOM\n } = AxisOrientation;\n const allOrientations = axisType === Y ? [LEFT, RIGHT] : [TOP, BOTTOM];\n\n if (position === BOTH) {\n axisOrientation = allOrientations[axisIndex];\n } else {\n axisOrientation = position;\n }\n const axisConfig = {\n id: `${axisType}-${index}-${axisIndex}`,\n name: field.toString(),\n field: field.toString(),\n labels: { rotation: 0 },\n numberFormat: field.numberFormat(),\n orientation: axisOrientation,\n type: dataTypeScaleMap[field.subtype()]\n };\n userAxisConfig.tickValues = field.format(userAxisConfig.tickValues);\n userAxisConfig.domain = field.format(userAxisConfig.domain);\n\n return mergeRecursive(axisConfig, userAxisConfig);\n};\n\n/**\n *\n *\n * @param {*} axisInfo\n * @param {*} field\n * @param {*} axesCreators\n * @return\n */\nconst createSimpleAxis = (axisConfig, field, axesCreators) => {\n const { labelManager } = axesCreators;\n const Cls = scaleMaps[dataTypeScaleMap[field.subtype()]];\n const simpleAxis = new Cls(axisConfig, { labelManager });\n return simpleAxis;\n};\n\n/**\n *\n *\n * @param {*} axisType\n * @param {*} fieldInfo\n * @param {*} axesCreators\n * @param {*} groupAxes\n * @return\n */\nexport const generateAxisFromMap = (axisType, fieldInfo, axesCreators, groupAxes) => {\n let axisKey;\n const currentAxes = [];\n const { fields, index } = fieldInfo;\n const { cacheMaps } = axesCreators;\n const map = cacheMaps[`${axisType}AxesMap`];\n\n fields.forEach((field, axisIndex) => {\n axisKey = getAxisKey(axisType, index, dataTypeScaleMap[field.subtype()]);\n const axisConfig = getAxisConfig({ index, axisIndex, axisType }, field, axesCreators);\n\n if (!map.has(axisKey)) {\n const xAxis = createSimpleAxis(axisConfig, field, axesCreators);\n currentAxes.push(xAxis);\n } else {\n const axes = map.get(axisKey);\n axes[axisIndex] = axes[axisIndex] ? axes[axisIndex] : createSimpleAxis(axisConfig, field, axesCreators);\n axes[axisIndex]._rotationLock = false;\n axes[axisIndex] && axes[axisIndex].config(axisConfig).domain(axisConfig.domain || []);\n }\n });\n\n if (currentAxes.length) {\n map.set(axisKey, currentAxes);\n }\n\n for (const [key] of map.entries()) {\n if (key === axisKey) {\n groupAxes.add(axisKey);\n }\n }\n return map.get(axisKey);\n};\n\n/**\n *\n *\n * @memberof MatrixResolver\n */\nexport const mutateAxesFromMap = (cacheMaps, axes) => {\n const {\n xAxesMap,\n yAxesMap\n } = cacheMaps;\n const {\n x: xAxisSet,\n y: yAxisSet\n } = axes;\n const xAxes = [];\n const yAxes = [];\n\n xAxisSet.forEach((axisId) => {\n const xAxis = xAxesMap.get(axisId);\n xAxes.push(xAxis);\n });\n yAxisSet.forEach((axisId) => {\n const yAxis = yAxesMap.get(axisId);\n yAxes.push(yAxis);\n });\n return {\n xAxes, yAxes\n };\n};\n\n/**\n * return a default mark based on predefined set of rules of type and subtype of the fields\n *\n * @param {string} colFieldType dimension/measure - temporal/ordinal/nominal\n * @param {string} rowFieldType dimension/measure - temporal/ordinal/nominal\n * @return {Object} return mark type\n */\nexport const getDefaultMark = (colFieldType, rowFieldType) => {\n let mark;\n\n if (colFieldType === CATEGORICAL || rowFieldType === CATEGORICAL) {\n mark = BAR;\n } else if (colFieldType === TEMPORAL || rowFieldType === TEMPORAL) {\n mark = LINE;\n } else {\n mark = POINT;\n }\n\n return mark;\n};\n\n/**\n *\n *\n * @param {*} axesCreators\n * @param {*} [fieldInfo=[]]\n * @return\n */\nexport const createRetinalAxis = (axesCreators, fieldProps = {}) => {\n const { axisType, fieldsConfig } = axesCreators;\n const field = fieldProps.field;\n const axis = [];\n const Cls = scaleMaps[axisType];\n\n fieldProps.type = fieldProps.type ? fieldProps.type : getAxisType(fieldsConfig, field || null);\n axis.push(new Cls(fieldProps));\n return axis;\n};\n\n/**\n *\n *\n * @param {*} arr\n * @param {*} val\n * @return\n */\nexport const getIndex = (arr, val) => {\n let i = 0;\n let arrIndex = -1;\n\n while (arrIndex === -1 && i < arr.length) {\n if (arr[i].toString() === val.toString()) {\n arrIndex = i;\n }\n i++;\n }\n return arrIndex;\n};\n\n/**\n *\n *\n * @param {*} colFields\n * @param {*} rowFields\n * @param {*} userLayerConfig\n * @return\n * @memberof CartesianEncoder\n */\nexport const getLayerConfFromFields = (colFields, rowFields, userLayerConfig) => userLayerConfig.filter((conf) => {\n const userConf = conf instanceof Array ? conf : [conf];\n const encodingArr = [].concat(...userConf.map(d => d.encoding).filter(d => d !== undefined));\n\n if (!encodingArr.length) {\n return true;\n }\n\n const xFields = [].concat(...encodingArr.map(d => [d.x && d.x.field, d.x0 && d.x0.field]))\n .filter(d => d !== undefined && d !== null);\n const yFields = [].concat(...encodingArr.map(d => [d.y && d.y.field, d.y0 && d.y0.field]))\n .filter(d => d !== undefined && d !== null);\n\n if (!xFields.length && !yFields.length) {\n return true;\n }\n\n const colFieldExist = xFields.length ? xFields.every(d => colFields.indexOf(d) !== -1) : false;\n const rowFieldExist = yFields.length ? yFields.every(d => rowFields.indexOf(d) !== -1) : false;\n if (xFields.length && yFields.length) {\n return colFieldExist && rowFieldExist;\n }\n return colFieldExist || rowFieldExist;\n});\n","import { layerFactory } from '@chartshq/visual-layer';\nimport { mergeRecursive } from 'muze-utils';\nimport { generateAxisFromMap, getDefaultMark, getIndex, getLayerConfFromFields } from './encoder-helper';\nimport { retriveDomainFromData } from '../group-helper';\n\nimport { ROW, COLUMN, COL, LEFT, TOP, CARTESIAN, MEASURE, BOTH, X, Y } from '../enums/constants';\nimport VisualEncoder from './visual-encoder';\n\n/**\n *\n *\n * @export\n * @class CartesianEncoder\n * @extends {VisualEncoder}\n */\nexport default class CartesianEncoder extends VisualEncoder {\n\n /**\n *\n *\n * @return\n * @memberof CartesianEncoder\n */\n static type () {\n return CARTESIAN;\n }\n\n /**\n *\n *\n * @param {*} axesCreators\n * @param {*} fieldInfo\n * @return\n * @memberof CartesianEncoder\n */\n createAxis (axesCreators, fieldInfo) {\n const geomCellAxes = {};\n const {\n axes\n } = axesCreators;\n const {\n projections,\n indices\n } = fieldInfo;\n const {\n rowFields,\n columnFields\n } = projections;\n const {\n rowIndex,\n columnIndex\n } = indices;\n const axisFields = [{\n fields: rowFields,\n index: rowIndex\n }, {\n fields: columnFields,\n index: columnIndex\n }];\n const xAxes = axes.x || [];\n const yAxes = axes.y || [];\n\n [rowFields, columnFields].forEach((fields, i) => {\n const type = i === 0 ? ROW : COLUMN;\n const axis = i === 0 ? Y : X;\n\n if (fields.length > 1) {\n axesCreators.position = BOTH;\n } else {\n axesCreators.position = this.axisFrom()[type];\n }\n geomCellAxes[axis] = generateAxisFromMap(axis, axisFields[i], axesCreators, axis === X ? xAxes : yAxes);\n });\n return geomCellAxes;\n }\n\n /**\n *\n *\n * @param {*} fields\n * @return\n * @memberof CartesianEncoder\n */\n getFacetsAndProjections (fields, type) {\n let facets = [];\n let projections = [];\n let counter = 0;\n const primaryFacets = [];\n const secondaryFacets = [];\n const primaryFields = fields[0];\n const secondaryFields = fields[1];\n const primaryLen = primaryFields.length;\n const secondaryLen = secondaryFields.length;\n const axisFrom = this.axisFrom();\n\n for (let i = 0; i < primaryLen; i++) {\n let projArr = [primaryFields[i]];\n const primaryField = primaryFields[i];\n\n if (primaryField.type() === MEASURE) {\n const secondaryField = secondaryFields[counter];\n if (secondaryField && secondaryField.type() === MEASURE) {\n counter++;\n projArr = [primaryField, secondaryField];\n }\n projections.push(projArr);\n } else {\n facets.push(primaryField);\n primaryFacets.push(primaryField);\n }\n }\n if (secondaryLen > counter) {\n for (let i = counter; i < secondaryLen; i++) {\n const secondaryField = secondaryFields[i];\n const projArr = [secondaryField];\n if (secondaryField.type() === MEASURE) {\n projections.push(projArr);\n } else {\n facets.push(secondaryField);\n secondaryFacets.push(secondaryField);\n }\n }\n }\n if ((primaryFacets.length || secondaryFacets.length) && !projections.length) {\n type = type === COL ? COLUMN : type;\n if ((axisFrom[type] === LEFT || axisFrom[type] === TOP) && primaryFacets.length) {\n const axisFromIndex = primaryFacets.length - 1;\n const facet = primaryFacets[axisFromIndex];\n projections = [[facet]];\n const existIndex = getIndex(secondaryFacets, facet);\n if (existIndex > -1) {\n projections = [[facet, facet]];\n secondaryFacets.splice(existIndex, 1);\n }\n primaryFacets.splice(axisFromIndex, 1);\n } else {\n const axisFromIndex = 0;\n const facet = secondaryFacets[axisFromIndex];\n projections = [[facet]];\n const existIndex = getIndex(primaryFacets, facet);\n if (existIndex > -1) {\n projections = [[facet, facet]];\n primaryFacets.splice(existIndex, 1);\n }\n secondaryFacets.splice(axisFromIndex, 1);\n }\n }\n\n facets = [...primaryFacets, ...secondaryFacets];\n facets = facets.filter((el, index, self) => index === self.findIndex(t => (t.toString() === el.toString())));\n return {\n facets,\n projections\n };\n }\n\n /**\n *\n *\n * @param {*} datamodel\n * @param {*} config\n * @return\n * @memberof CartesianEncoder\n */\n fieldSanitizer (datamodel, config) {\n return super.fieldSanitizer(datamodel, config);\n }\n\n /**\n *\n *\n * @param {*} datamodel\n * @return\n * @memberof CartesianEncoder\n */\n getRetinalFieldsDomain (dataModels, encoding) {\n const groupedModel = dataModels.groupedModel;\n const domains = {};\n for (const key in encoding) {\n if ({}.hasOwnProperty.call(encoding, key)) {\n const encodingObj = encoding[key];\n const field = encodingObj.field;\n if (!encodingObj.domain && field) {\n const domain = retriveDomainFromData(groupedModel, field);\n domains[field] = domain;\n }\n }\n }\n return domains;\n }\n\n /**\n *\n *\n * @param {*} layerArray\n * @memberof CartesianEncoder\n */\n serializeLayerConfig (layerArray) {\n const serializedLayers = [];\n // let currentLayerIndex = 0;\n layerArray.length && layerArray.forEach((layer, i) => {\n const def = layerFactory.sanitizeLayerConfig(layer);\n def.order = i;\n serializedLayers.push(def);\n });\n return serializedLayers;\n }\n\n /**\n *\n *\n * @param {*} fields\n * @param {*} userLayerConfig\n * @return\n * @memberof CartesianEncoder\n */\n getLayerConfig (fields, userLayerConfig) {\n const layerConfig = [];\n const {\n columnFields,\n rowFields\n } = fields;\n\n // let currentLayerIndex = 0;\n columnFields.forEach((colField) => {\n const colFieldName = colField.toString();\n rowFields.forEach((rowField) => {\n let configs = [];\n const rowFieldName = rowField.toString();\n const encoding = {\n x: {\n field: colFieldName\n },\n y: {\n field: rowFieldName\n }\n };\n const rowFieldType = rowField.subtype();\n const colFieldType = colField.subtype();\n const mark = getDefaultMark(colFieldType, rowFieldType);\n\n const defConfigs = [{\n mark,\n def: {\n mark,\n encoding\n }\n }];\n\n const layerConfigs = getLayerConfFromFields(colField.getMembers(),\n rowField.getMembers(), userLayerConfig || []);\n if (layerConfigs.length) {\n configs = layerConfigs.map((layerConf) => {\n const mergedLayerConf = mergeRecursive(mergeRecursive({}, defConfigs[0].def), layerConf);\n const serializedLayerConfig = layerFactory.getSerializedConf(mergedLayerConf.mark,\n mergedLayerConf);\n return {\n mark: mergedLayerConf.mark,\n order: mergedLayerConf.order,\n def: serializedLayerConfig\n };\n });\n } else {\n configs = defConfigs;\n }\n\n layerConfig.push(...configs);\n });\n });\n return layerConfig;\n }\n}\n\n","import { layerFactory } from '@chartshq/visual-layer';\nimport { mergeRecursive } from 'muze-utils';\nimport VisualEncoder from './visual-encoder';\nimport { RADIUS, ANGLE, SIZE, MEASURE, ARC, POLAR, COLOR } from '../enums/constants';\n/**\n *\n *\n * @export\n * @class PolarEncoder\n * @extends {VisualEncoder}\n */\nexport default class PolarEncoder extends VisualEncoder {\n\n /**\n *\n *\n * @param {*} axesCreators\n * @param {*} fieldInfo\n * @return\n * @memberof PolarEncoder\n */\n createAxis (axesCreators, fieldInfo) {\n const {\n axes\n } = axesCreators;\n const geomCellAxes = axes;\n const {\n indices\n } = fieldInfo;\n const {\n rowIndex,\n columnIndex\n } = indices;\n // Dummy axes for polar, to create blank cells\n const pieAxes = geomCellAxes.pie || [];\n\n pieAxes[rowIndex] = pieAxes[rowIndex] || [];\n pieAxes[rowIndex][columnIndex] = [];\n\n geomCellAxes.pie = pieAxes;\n geomCellAxes.x = null;\n geomCellAxes.y = null;\n\n return geomCellAxes;\n }\n\n /**\n *\n *\n * @param {*} fields\n * @return\n * @memberof CartesianEncoder\n */\n getFacetsAndProjections (fields) {\n let counter = 0;\n const facets = [];\n const projections = [];\n const primaryFields = fields[0];\n const secondaryFields = fields[1];\n const primaryLen = primaryFields.length;\n const secondaryLen = secondaryFields.length;\n\n for (let i = 0; i < primaryLen; i++) {\n const primaryField = primaryFields[i];\n if (primaryField.type() === MEASURE) {\n const secondaryField = secondaryFields[counter++];\n const projArr = secondaryField ? [primaryField, secondaryField] : [primaryField];\n projections.push(projArr);\n } else {\n facets.push(primaryField);\n }\n }\n if (secondaryLen > counter) {\n for (let i = counter; i < secondaryLen; i++) {\n const secondaryField = secondaryFields[i];\n const projArr = [secondaryField];\n if (secondaryField.type() === MEASURE) {\n projections.push(projArr);\n } else {\n facets.push(secondaryField);\n }\n }\n }\n return {\n facets,\n projections\n };\n }\n\n /**\n *\n *\n * @return\n * @memberof PolarEncoder\n */\n setCommonDomain () {\n // No domain to be set\n return this;\n }\n\n /**\n *\n *\n * @return\n * @memberof PolarEncoder\n */\n static type () {\n return POLAR;\n }\n\n layers (...layers) {\n if (layers.length) {\n this._layers = layers[0];\n return this;\n }\n return this._layers;\n }\n\n /**\n *\n *\n * @param {*} datamodel\n * @param {*} config\n * @memberof PolarEncoder\n */\n fieldSanitizer (datamodel, config) {\n let sanitizedRows = [[], []];\n let sanitizedColumns = [[], []];\n const fields = super.fieldSanitizer(datamodel, config);\n const {\n layers\n } = config;\n const {\n rows,\n columns\n } = fields;\n const layer = layers[0];\n const encoding = layer.encoding;\n const radius = encoding && encoding.radius ? encoding.radius.field : null;\n const angle = encoding && encoding.angle ? encoding.angle.field : null;\n const sanitizedFields = [sanitizedRows, sanitizedColumns];\n\n [rows, columns].forEach((fieldType, typeIndex) => {\n fieldType.forEach((fieldSet, i) => fieldSet.forEach((field) => {\n if (field.toString() !== radius && field.toString() !== angle && field.type() !== MEASURE) {\n sanitizedFields[typeIndex][i].push(field);\n }\n }));\n });\n sanitizedColumns = [...new Set(sanitizedColumns)];\n sanitizedRows = [...new Set(sanitizedRows)];\n this.fieldInfo({ rows: sanitizedRows, columns: sanitizedColumns });\n return this.fieldInfo();\n }\n\n getRetinalFieldsDomain (dataModels, encoding, facetFields, groupBy) {\n let sizeField;\n let colorField;\n const fields = [];\n const layers = this.layers();\n const dataModel = dataModels.parentModel;\n const fieldsConfig = dataModel.getFieldsConfig();\n const domains = {};\n if (layers && layers[0]) {\n const layer = layers[0];\n const layerEncoding = layer.def.encoding || {};\n\n [RADIUS, ANGLE, SIZE, COLOR].forEach((encType) => {\n const field = layerEncoding[encType] ? layerEncoding[encType].field : '';\n const measureField = fieldsConfig[field] && fieldsConfig[field].def.type === MEASURE;\n if (encType === SIZE && measureField) {\n sizeField = field;\n }\n if (encType === COLOR) {\n colorField = field;\n }\n fieldsConfig[field] && !measureField && fields.push(field);\n });\n }\n\n if (sizeField) {\n domains[sizeField] = dataModel.groupBy(facetFields, {\n [sizeField]: 'sum'\n }).getFieldspace().fieldsObj()[sizeField].domain();\n }\n\n if (colorField) {\n const dm = dataModel.groupBy([...facetFields, ...fields], groupBy.measures);\n domains[colorField] = dm.getFieldspace().fieldsObj()[colorField].domain();\n }\n return domains;\n }\n /**\n *\n *\n * @param {*} fields\n * @param {*} userLayerConfig\n * @return\n * @memberof PolarEncoder\n */\n getLayerConfig (fields, userLayerConfig) {\n let layerConfig = [];\n const {\n columnFields,\n rowFields\n } = fields;\n const allFields = [...columnFields, ...rowFields];\n\n allFields.forEach(() => {\n const encoding = {};\n let config = {\n mark: ARC,\n def: {\n encoding\n }\n };\n if (userLayerConfig && userLayerConfig.length > 0) {\n config = mergeRecursive(config, userLayerConfig[0]);\n }\n layerConfig.push(config);\n });\n if (layerConfig.length === 0) {\n layerConfig = userLayerConfig;\n }\n\n this.layers(layerConfig);\n return layerConfig;\n }\n\n /**\n *\n *\n * @param {*} layerArray\n * @returns\n * @memberof PolarEncoder\n */\n serializeLayerConfig (layerArray) {\n const serializedLayers = [];\n\n layerArray.length && layerArray.forEach((layer) => {\n const def = layerFactory.getSerializedConf(layer.mark, layer);\n serializedLayers.push({\n mark: layer.mark,\n def\n });\n });\n return serializedLayers;\n }\n}\n","import { createRetinalAxis } from './encoder-helper';\nimport { COLOR, SHAPE, SIZE } from '../enums/constants';\nimport VisualEncoder from './visual-encoder';\n\n/**\n *\n *\n * @export\n * @class RetinalEncoder\n * @extends {VisualEncoder}\n */\nexport default class RetinalEncoder extends VisualEncoder {\n\n /**\n *\n *\n * @param {*} axesCreators\n * @return\n * @memberof RetinalEncoder\n */\n createAxis (axesCreators) {\n const { fieldsConfig, config } = axesCreators;\n const newAxes = {};\n\n [COLOR, SHAPE, SIZE].forEach((axisType) => {\n newAxes[`${axisType}`] = createRetinalAxis({ axisType, fieldsConfig }, config[axisType]);\n });\n return newAxes;\n }\n\n /**\n *\n *\n * @static\n * @return\n * @memberof RetinalEncoder\n */\n static type () {\n return 'retinal';\n }\n\n /**\n *\n *\n * @param {*} fields\n * @param {*} userLayerConfig\n * @return\n * @memberof RetinalEncoder\n */\n getLayerConfig (encodingConfigs, userLayerConfig) {\n const layerConfig = [];\n userLayerConfig.forEach((e) => {\n const config = e;\n [COLOR, SHAPE, SIZE].forEach((axis) => {\n if (encodingConfigs[axis] && encodingConfigs[axis].field) {\n const def = config.def;\n if (config.def instanceof Array) {\n def.forEach((conf) => {\n conf.encoding = conf.encoding || {};\n !conf.encoding[axis] && (conf.encoding[axis] = {});\n conf.encoding[axis].field = encodingConfigs[axis].field;\n });\n } else {\n def.encoding = def.encoding || {};\n !def.encoding[axis] && (def.encoding[axis] = {});\n def.encoding[axis].field = encodingConfigs[axis].field;\n }\n }\n });\n layerConfig.push(config);\n });\n return layerConfig;\n }\n\n /**\n *\n *\n * @param {*} context\n * @return\n * @memberof RetinalEncoder\n */\n setCommonDomain (context) {\n const { domains, axes, encoding } = context;\n\n Object.entries(encoding).forEach((enc) => {\n if (enc[1] && enc[1].field) {\n const encType = enc[0];\n const field = enc[1].field;\n\n if (field) {\n axes[encType].forEach((axis) => {\n const domain = domains[field];\n !enc[1].domain && axis.updateDomain(domain);\n });\n }\n }\n });\n return axes;\n }\n}\n","import { Store, dataSelect, FieldType } from 'muze-utils';\nimport { DATA_UPDATE_COUNTER } from '../enums/defaults';\nimport { Variable } from '../variable';\nimport { PolarEncoder, CartesianEncoder } from '../encoder';\nimport {\n DIMENSION,\n MEASURE,\n ORDINAL,\n LINEAR,\n ROW,\n COLUMN,\n COL,\n LEFT,\n RIGHT,\n TOP,\n BOTTOM,\n COLOR,\n SIZE,\n TEMPORAL,\n SHAPE,\n INTERACTION,\n GRID_LINES,\n GRID_BANDS,\n HEADER,\n FACET,\n X,\n Y,\n POLAR\n} from '../enums/constants';\n\n/**\n * Creates an instance of a store which contains the arguments to make the class reactive\n *\n * @return {Object} instance of store\n * @memberof VisualGroup\n */\nexport const initStore = () => new Store({\n [DATA_UPDATE_COUNTER]: DATA_UPDATE_COUNTER\n});\n\n/**\n *\n *\n * @param {*} arr\n */\nexport const isDistributionEqual = arr => [...arr[0], ...arr[1]].reduce((isEqual, row) => {\n const rowType = row.type();\n\n if (rowType === MEASURE || rowType === TEMPORAL) {\n isEqual = true;\n }\n return isEqual;\n}, false);\n\n/**\n *\n *\n */\nexport const initializeCacheMaps = () => ({\n cellMap: new Map(),\n xAxesMap: new Map(),\n yAxesMap: new Map(),\n entryCellMap: new Map(),\n exitCellMap: new Map()\n});\n\n/**\n *\n *\n * @param {*} axisName\n * @param {*} id\n */\nexport const getAxisKey = (axisName, id, scaleType) => `${axisName}-axis-${id}-${scaleType}`;\n\n/**\n *\n *\n * @param {*} rowId\n * @param {*} columnId\n */\nexport const getCellKey = (rowId, columnId) => `cell-${rowId}-${columnId}`;\n\n/**\n *\n *\n * @param {*} config\n * @return\n */\nexport const extractUnitConfig = (config) => {\n const unitConfig = {};\n const attrNames = [INTERACTION, GRID_LINES, GRID_BANDS];\n\n attrNames.forEach((attr) => {\n if (config[attr] !== undefined) {\n unitConfig[attr] = config[attr];\n }\n });\n return unitConfig;\n};\n\n/**\n *\n *\n * @param {*} headers\n * @param {*} index\n * @param {*} rowLength\n * @return\n * @memberof MatrixResolver\n */\nexport const getHeaderText = (headers, index, rowLength) => {\n let header = '';\n\n if (index === rowLength - 1 && headers.length > rowLength) {\n for (let i = index; i < headers.length - 1; i++) {\n header += `${headers[i].toString()} / `;\n }\n header += headers[headers.length - 1].toString();\n return header;\n } else if (headers[index]) {\n return headers[index].toString();\n }\n return '';\n};\n\n/**\n *\n *\n * @param {*} fields\n * @param {*} fieldHeaders\n * @param {*} TextCell\n * @param {*} labelManager\n * @return\n */\nexport const headerCreator = (fields, fieldHeaders, TextCell, labelManager) => {\n const headers = fields.length > 0 ? fields[0].map((cell, i) => new TextCell({ type: HEADER }, { labelManager })\n .source(getHeaderText(fieldHeaders, i, fields[0].length))\n .config({ show: cell.config().show })) : [];\n return headers;\n};\n\n/**\n *\n *\n * @param {*} variable\n * @param {*} allFields\n * @return\n */\nexport const findInGroup = (variable, allFields) => {\n let channel = null;\n\n [COLOR, SIZE, SHAPE].forEach((e) => {\n if (this.store.get(e) && variable === this.store.get(e)[0]) {\n channel = e;\n }\n });\n\n if (channel) {\n return { channel };\n }\n [ROW, COL].forEach((facetType) => {\n allFields[`${facetType}Facets`].forEach((e) => {\n if (e.toString() === variable) {\n channel = { channel: FACET, type: facetType === COL ? COLUMN : ROW };\n }\n });\n });\n\n if (channel) {\n return channel;\n }\n\n [ROW, COL].forEach((projType) => {\n allFields[`${projType}Projections`].forEach((e) => {\n e.forEach((m) => {\n if (m.toString() === variable) {\n channel = projType === COL ? X : Y;\n }\n });\n });\n });\n\n if (channel) {\n return { channel };\n }\n return null;\n};\n\n/**\n *\n *\n * @param {*} datamodel\n * @param {*} field\n */\nexport const getAxisType = (fieldsConfig, field) => {\n let fieldType = ORDINAL;\n\n if (field && fieldsConfig[field].def.type !== DIMENSION) {\n fieldType = LINEAR;\n }\n return fieldType;\n};\n\n/**\n *\n *\n * @param {*} datamodel\n * @param {*} fieldName\n * @return\n */\nexport const retriveDomainFromData = (datamodel, fieldName) => {\n const field = datamodel.getFieldspace().fields.find(d => d._ref.name === fieldName.toString());\n return field.domain();\n};\n\n/**\n *\n *\n * @memberof MatrixResolver\n */\nexport const mutateAxesFromMap = (cacheMaps, axes) => {\n let xAxes = null;\n let yAxes = null;\n const {\n xAxesMap,\n yAxesMap\n } = cacheMaps;\n const {\n x: xAxisSet,\n y: yAxisSet\n } = axes;\n\n xAxisSet && xAxisSet.forEach((axisId) => {\n const xAxis = xAxesMap.get(axisId);\n xAxes = xAxes || [];\n xAxes.push(xAxis);\n });\n\n yAxisSet && yAxisSet.forEach((axisId) => {\n const yAxis = yAxesMap.get(axisId);\n yAxes = yAxes || [];\n yAxes.push(yAxis);\n });\n\n return {\n xAxes, yAxes\n };\n};\n\n/**\n *\n *\n * @param {*} layers\n * @return\n */\nexport const getEncoder = (layers) => {\n let encoder = new CartesianEncoder();\n\n if (layers) {\n // Figuring out the kind of layers the group will have\n encoder = layers.every(e => e.mark === 'arc') ? new PolarEncoder() : encoder;\n }\n return encoder;\n};\n\n/**\n *\n *\n * @param {*} type\n * @param {*} fields\n * @param {*} userAxisFromConfig\n * @return\n */\nexport const getHeaderAxisFrom = (type, fields, userAxisFromConfig) => {\n let axisFrom = userAxisFromConfig[type];\n let headerFrom = '';\n const options = type === ROW ? [LEFT, RIGHT] : [BOTTOM, TOP];\n const [firstField, secondField] = fields;\n const firstFieldType = i => (firstField.length ? firstField[i].type() : null);\n const secondFieldType = i => (secondField.length ? secondField[i].type() : null);\n\n if (firstFieldType(firstField.length - 1) === DIMENSION && secondFieldType(0) === DIMENSION) {\n headerFrom = axisFrom ? options[1 - options.indexOf(axisFrom)] : options[1];\n\n if (type === COLUMN && (firstField[firstField.length - 1].toString() === secondField[0].toString())) {\n axisFrom = TOP;\n } else {\n axisFrom = axisFrom || options[0];\n }\n } else if (secondFieldType(secondField.length - 1) === DIMENSION) {\n headerFrom = type === ROW ? RIGHT : BOTTOM;\n axisFrom = type === ROW ? RIGHT : BOTTOM;\n } else {\n headerFrom = type === ROW ? LEFT : TOP;\n axisFrom = type === ROW ? LEFT : TOP;\n }\n if (firstFieldType(firstField.length - 1) === MEASURE && secondFieldType(0) === MEASURE) {\n axisFrom = type === ROW ? LEFT : TOP;\n } else if (secondFieldType(0) === MEASURE) {\n axisFrom = type === ROW ? RIGHT : BOTTOM;\n } else if (firstFieldType(firstField.length - 1) === MEASURE) {\n axisFrom = type === ROW ? LEFT : TOP;\n }\n return [headerFrom, axisFrom];\n};\n\n/**\n *\n *\n * @param {*} type\n * @param {*} fields\n * @param {*} layers\n * @return\n * @memberof MatrixResolver\n */\nexport const setFacetsAndProjections = (context, fieldInfo, encoder) => {\n const {\n fields,\n type\n } = fieldInfo;\n const { facets, projections } = encoder.simpleEncoder.getFacetsAndProjections(fields, type);\n\n context.facets({ [`${type}Facets`]: facets });\n context.projections({ [`${type}Projections`]: projections });\n\n return { facets, projections, fields };\n};\n\n/**\n * Creates a selection set from a data set with corresponding attributes\n *\n * @export\n * @param {Selection} sel contains previous selection\n * @param {Object} appendObj Object to be appended\n * @param {Array} data Data based on which the selection is entered/updated/removed\n * @param {Object} [attrs={}] Attributes to be set on the data\n * @return {Selection} Merged selection\n */\nexport const createSelection = (sel, appendObj, data, idFn) => {\n let selection = sel || dataSelect([]);\n\n selection = selection.data(data, idFn);\n\n const enter = selection.enter().append(appendObj);\n const mergedSelection = enter.merge(selection);\n\n selection.exit() && selection.exit().remove();\n return mergedSelection;\n};\n\nconst getRowBorders = (left, right) => {\n const borders = {};\n borders.top = false;\n borders.bottom = false;\n if (left.length > 1 || right.length > 1) {\n borders.top = true;\n borders.bottom = true;\n }\n return borders;\n};\n\nconst getColumnsBorders = (top, bottom) => {\n const borders = {};\n borders.left = false;\n borders.right = false;\n if (top.length || bottom.length) {\n if ((top[0] && top[0].length > 1) || (bottom[0] && bottom[0].length > 1)) {\n borders.left = true;\n borders.right = true;\n }\n }\n return borders;\n};\n\nconst getValueBorders = (rows, columns) => {\n const borders = { top: true, left: true, bottom: true, right: true };\n const borderTypeRow = [LEFT, RIGHT];\n const borderTypeCol = [TOP, BOTTOM];\n rows.forEach((e, i) => {\n if (e[0] && e[0].length) {\n borders[borderTypeRow[i]] = true;\n } else {\n borders[borderTypeRow[i]] = false;\n }\n });\n columns.forEach((e, i) => {\n if (e.length) {\n borders[borderTypeCol[i]] = true;\n } else {\n borders[borderTypeCol[i]] = false;\n }\n });\n\n return borders;\n};\n\nexport const getBorders = (matrices, encoder) => {\n let showRowBorders = { top: false, bottom: false };\n let showColBorders = { left: false, right: false };\n let showValueBorders = { top: false, bottom: false, left: false, right: false };\n const {\n rows,\n columns,\n values: valueMatrix\n } = matrices;\n const [leftRows, rightRows] = rows;\n const [topColumns, bottomColumns] = columns;\n const {\n rowDimensions,\n columnDimensions,\n rowTemporalFields,\n columnTemporalFields,\n columnMeasures,\n rowMeasures\n } = encoder.fieldInfo();\n const allDimensionLength = rowDimensions.length + columnDimensions.length;\n const allMeasuresLength = rowMeasures.length + columnMeasures.length;\n const allTemporalFieldsLength = rowTemporalFields.length + columnTemporalFields.length;\n\n if (encoder.constructor.type() === POLAR) {\n if (!allDimensionLength) {\n return { showRowBorders, showColBorders, showValueBorders };\n }\n } else if (!allMeasuresLength && !allTemporalFieldsLength && allDimensionLength <= 2) {\n return { showRowBorders, showColBorders, showValueBorders };\n }\n\n showRowBorders = getRowBorders(leftRows, rightRows);\n showColBorders = getColumnsBorders(topColumns, bottomColumns);\n showValueBorders = getValueBorders([leftRows, rightRows], [topColumns, bottomColumns]);\n\n if (valueMatrix.length > 1) {\n showValueBorders.top = true;\n showValueBorders.bottom = true;\n }\n if (valueMatrix.length && valueMatrix[0].length > 1) {\n showValueBorders.left = true;\n showValueBorders.right = true;\n }\n return { showRowBorders, showColBorders, showValueBorders };\n};\n\nexport const getFieldsFromSuppliedLayers = (suppliedLayerConfig, fieldsConfig) => {\n let fields = [];\n const encodingArr = suppliedLayerConfig.map(conf => (conf.encoding || {}));\n fields = [...fields, [].concat(...encodingArr.map(enc => Object.values(enc).map(d => d.field)))];\n fields = fields.filter(field => fieldsConfig[field] && fieldsConfig[field].def.type === FieldType.DIMENSION);\n return fields;\n};\n\nexport const extractFields = (facetsAndProjections, layerFields) => {\n const fields = Object.values(facetsAndProjections).map((arr) => {\n const flattenArray = [].concat(...arr);\n return [].concat(...flattenArray.map((field) => {\n if (field instanceof Variable) {\n return field.getMembers();\n }\n return field;\n }));\n });\n return [].concat(...fields, ...layerFields);\n};\n","/**\n * This file exports variables that are used as defaults for the crosstab group.\n */\nexport const DATA_UPDATE_COUNTER = 0;\n\nexport const DEFAULT_LAYER_TYPE = 'cartesian';\n\n","import Selection from './selection';\n/**\n * This function applies a selection operation on a data array.\n *\n * @export\n * @param {Array} [data=[]] The data array to be observed.\n * @return {Selection} Instance of a selection.\n */\nexport default function dataSelect (data = []) {\n return new Selection(data);\n}\n\n","import { BEHAVIOURS, ACTIONS } from '@chartshq/muze-firebolt';\n\nexport const actionBehaviourMap = {\n [ACTIONS.DRAG]: {\n behaviours: [BEHAVIOURS.BRUSH],\n touch: false\n },\n [ACTIONS.HOVER]: {\n behaviours: [BEHAVIOURS.HIGHLIGHT]\n },\n [ACTIONS.LONGTOUCH]: {\n behaviours: [BEHAVIOURS.SELECT],\n touch: true\n },\n [ACTIONS.TOUCHDRAG]: {\n behaviours: [BEHAVIOURS.BRUSH],\n touch: true\n },\n [ACTIONS.CLICK]: {\n behaviours: [BEHAVIOURS.SELECT],\n touch: false\n }\n};\n\n","export const CONFIG = 'config';\nexport const DATA = 'data';\nexport const AXES = 'axes';\nexport const LAYERDEFS = 'layerDef';\nexport const WIDTH = 'width';\nexport const HEIGHT = 'height';\nexport const MOUNT = 'mount';\nexport const primaryXAxisUpdated = 'primaryXAxisUpdated';\nexport const primaryYAxisUpdated = 'primaryYAxisUpdated';\nexport const secondaryXAxisUpdated = 'secondaryXAxisUpdated';\nexport const secondaryYAxisUpdated = 'secondaryYAxisUpdated';\nexport const TRANSFORM = 'transform';\nexport const DATADOMAIN = 'dataDomain';\nexport const LAYERSCREATED = 'layersCreated';\nexport const FIELDS = 'fields';\nexport const TIMEDIFFS = 'timeDiffs';\nexport const LAYERAXISINDEX = 'layerAxisIndex';\n\n","import { FieldType, getDependencyOrder, getObjProp,\n defaultValue, objectIterator, unionDomain, makeElement,\n DimensionSubtype, getClosestIndexOf, toArray } from 'muze-utils';\nimport { layerFactory } from '@chartshq/visual-layer';\nimport { TIMEDIFFS } from '../enums/reactive-props';\n\nexport const getDimensionMeasureMap = (layers, fieldsConfig) => {\n const retinalEncodingsAndMeasures = {};\n\n layers.forEach((layer) => {\n const {\n colorField,\n sizeField,\n shapeField,\n xField,\n yField\n } = layer.encodingFieldsInf();\n const measures = [xField, yField].filter(field => fieldsConfig[field] && fieldsConfig[field].def.type ===\n FieldType.MEASURE);\n [colorField, sizeField, shapeField].forEach((field) => {\n if (fieldsConfig[field] && fieldsConfig[field].def.type === FieldType.DIMENSION) {\n !retinalEncodingsAndMeasures[field] && (retinalEncodingsAndMeasures[field] = []);\n retinalEncodingsAndMeasures[field].push(...measures);\n }\n });\n });\n\n for (const key in retinalEncodingsAndMeasures) {\n if ({}.hasOwnProperty.call(retinalEncodingsAndMeasures, key)) {\n retinalEncodingsAndMeasures[key] = [...new Set(retinalEncodingsAndMeasures[key])];\n }\n }\n return retinalEncodingsAndMeasures;\n};\n\nexport const transformDataModels = (transform, dataModel) => {\n const dataModels = {};\n for (const key in transform) {\n if ({}.hasOwnProperty.call(transform, key)) {\n const transformVal = transform[key];\n dataModels[key] = transformVal(dataModel);\n }\n }\n\n return dataModels;\n};\n\nexport const getLayerFromDef = (context, definition, existingLayer) => {\n let instances = existingLayer;\n const dependencies = context._layerDeps;\n if (!existingLayer) {\n instances = layerFactory.getLayerInstance(definition);\n }\n const layers = {};\n const instanceArr = toArray(instances);\n definition = toArray(definition);\n definition.reduce((acc, def, idx) => {\n const instance = instanceArr[idx];\n instance.config(def);\n instance.dependencies(dependencies);\n if (def.name) {\n instance.alias(def.name);\n }\n layers[instance.alias()] = instance;\n return acc;\n }, {});\n return layers;\n};\n\nexport const resolveEncodingTransform = (layerInst, store) => {\n const encodingTransform = layerInst.config().encodingTransform || {};\n const resolvable = encodingTransform.resolvable;\n let depArr = [];\n if (resolvable) {\n const resolved = resolvable(store);\n depArr = resolved.depArr;\n layerInst.encodingTransform(resolved.fn);\n } else if (encodingTransform instanceof Function) {\n layerInst.encodingTransform(encodingTransform);\n }\n return depArr;\n};\n\nexport const createLayers = (context, layerDefinitions) => {\n const layersMap = context._layersMap;\n const markSet = {};\n const store = {\n layers: {},\n components: {\n unit: context\n }\n };\n let layerIndex = 0;\n let layers = layerDefinitions.sort((a, b) => a.order - b.order).reduce((layersArr, layerDef, i) => {\n const mark = layerDef.mark;\n const definition = layerDef.def;\n const markId = `${mark}-${i}`;\n const defArr = toArray(definition);\n defArr.forEach((def) => {\n def.order = layerDef.order + layerIndex;\n });\n layerIndex += defArr.length;\n const instances = getLayerFromDef(context, definition, layersMap[markId]);\n store.layers = Object.assign(store.layers, instances);\n const instanceValues = Object.values(instances);\n layersArr = layersArr.concat(...instanceValues);\n layersMap[markId] = instanceValues;\n markSet[markId] = markId;\n return layersArr;\n }, []);\n store.unit = context;\n const layerdeps = {};\n layers.forEach((layer) => {\n const depArr = resolveEncodingTransform(layer, store);\n layerdeps[layer.alias()] = depArr;\n });\n\n const order = getDependencyOrder(layerdeps);\n layers = order.map(name => store.layers[name]);\n for (const key in layersMap) {\n if (!(key in markSet)) {\n layersMap[key].forEach(layer => layer.remove());\n delete layersMap[key];\n }\n }\n return layers;\n};\n\nexport const attachDataToLayers = (layers, dm, transformedDataModels) => {\n layers.forEach((layer) => {\n const dataSource = layer.config().source;\n const dataModel = dataSource instanceof Function ? dataSource(dm) : (transformedDataModels[dataSource] || dm);\n layer.data(dataModel);\n });\n};\n\nexport const attachAxisToLayers = (axes, layers, layerAxisIndex) => {\n layers.forEach((layer) => {\n const layerId = layer.id();\n const axesObj = {};\n\n objectIterator(axes, (key) => {\n const axisInf = layerAxisIndex[layerId];\n if (axisInf) {\n axes[key] && (axesObj[key] = axes[key][axisInf[key] || 0]);\n }\n });\n Object.keys(axesObj).length && layer.axes(axesObj);\n });\n};\n\nexport const getLayerAxisIndex = (layers, fields) => {\n const layerAxisIndex = {};\n layers.forEach((layer) => {\n const { axis, encoding } = layer.config();\n const id = layer.id();\n ['x', 'y'].forEach((type) => {\n let index;\n const field = defaultValue(getObjProp(axis, type), encoding[type] && encoding[type].field);\n if (fields[type]) {\n index = fields[type].findIndex(fieldInst => fieldInst.getMembers().indexOf(field) !== -1);\n } else {\n index = 0;\n }\n !layerAxisIndex[id] && (layerAxisIndex[id] = {});\n layerAxisIndex[id][type] = index;\n });\n });\n return layerAxisIndex;\n};\n\nexport const unionDomainFromLayers = (layers, axisFields, layerAxisIndex, fieldsConfig) => {\n let domains = {};\n layers = layers.filter(layer => layer.getDataDomain() !== null);\n layers.forEach((layer) => {\n let domainValues = {};\n const config = layer.config();\n const encoding = config.encoding;\n const layerDomain = layer.getDataDomain();\n const layerId = layer.id();\n\n if (layerDomain !== null && config.calculateDomain !== false) {\n domainValues = Object.entries(layerDomain);\n if (layerDomain.x || layerDomain.y) {\n domains = domainValues.reduce((fieldDomain, domain) => {\n const encodingType = domain[0];\n const field = encoding[encodingType].field;\n const axisIndex = layerAxisIndex[layerId][encodingType];\n const fieldStr = `${axisFields[encodingType][axisIndex]}`;\n fieldDomain[fieldStr] = fieldDomain[fieldStr] || [];\n fieldDomain[fieldStr] = unionDomain(([fieldDomain[fieldStr], domain[1]]),\n fieldsConfig[field].def.subtype ? fieldsConfig[field].def.subtype :\n fieldsConfig[field].def.type);\n\n return fieldDomain;\n }, domains);\n } else { domains = domainValues; }\n }\n });\n return domains;\n};\n\nexport const renderLayers = (context, container, layers, measurement) => {\n context._lifeCycleManager.notify({ client: layers, action: 'beforedraw', formalName: 'layer' });\n const config = context.config();\n const classPrefix = config.classPrefix;\n const orderedLayers = context.layers().sort((a, b) => a.config().order - b.config().order);\n const layerParentGroup = makeElement(container, 'g', [1], `${classPrefix}-layer-group`);\n makeElement(layerParentGroup, 'g', orderedLayers, null, {\n update: (group, layer) => {\n layer.measurement(measurement);\n layer.dataProps({\n timeDiffs: context.store().get(TIMEDIFFS)\n });\n layer.config().render !== false && layer.mount(group.node());\n }\n });\n return this;\n};\n\nexport const getNearestDimensionalValue = (context, position) => {\n const fields = context.fields();\n if (!fields.x.length || !fields.y.length) {\n return null;\n }\n const data = context.data();\n const axes = context.axes();\n const fieldsConfig = data.getFieldsConfig();\n const xField = getObjProp(fields, 'x', 0).getMembers()[0];\n const yField = getObjProp(fields, 'y', 0).getMembers()[0];\n const xFieldType = fieldsConfig[xField] && (fieldsConfig[xField].def.subtype ? fieldsConfig[xField].def.subtype :\n fieldsConfig[xField].def.type);\n const yFieldType = fieldsConfig[yField] && (fieldsConfig[yField].def.subtype ? fieldsConfig[yField].def.subtype :\n fieldsConfig[yField].def.type);\n\n const entryVal = [['x', xFieldType, xField], ['y', yFieldType, yField]].find(entry =>\n entry[1] === DimensionSubtype.CATEGORICAL || entry[1] === DimensionSubtype.TEMPORAL);\n\n if (!entryVal || (xFieldType !== FieldType.MEASURE && yFieldType !== FieldType.MEASURE)) {\n return null;\n }\n const field = entryVal[2];\n const index = fieldsConfig[field].index;\n let key = axes[entryVal[0]][0].invert(position[entryVal[0]]);\n if (entryVal[1] === DimensionSubtype.TEMPORAL) {\n const filterData = [...new Set(data.getData().data.map(d => d[index]))];\n key = filterData[getClosestIndexOf(filterData, key)];\n }\n\n return key !== undefined ? [[field], [key]] : null;\n};\n\nexport const getLayersBy = (layers, searchBy, value) => layers.filter((layer) => {\n const name = searchBy === 'type' ? layer.constructor.formalName() : layer.alias();\n return name === value;\n});\n\nexport const removeLayersBy = (layers, searchBy, value) => {\n layers.filter((inst) => {\n const name = searchBy === 'type' ? inst.config().mark : inst.alias();\n if (name === value) {\n inst.remove();\n return false;\n }\n return true;\n });\n};\n\nexport const createSideEffectGroup = (container, className) => makeElement(container, 'g', [1], className).node();\n\nexport const getAdjustedDomain = (max, min) => {\n const y1ratio = max[0] / (max[0] - min[0]);\n const y2ratio = max[1] / (max[1] - min[1]);\n\n // adjust min/max values for positive negative values zero line etc\n let allSameSign = false;\n\n // if all numbers are positive set floor to zero\n if (min[0] > 0 && min[1] > 0 && min[1] > 0 && max[1] > 0) {\n allSameSign = true;\n min[0] = 0;\n min[1] = 0;\n }\n\n // if all numbers are negative set ceiling to zero\n if (min[0] < 0 && min[1] < 0 && min[1] < 0 && max[1] < 0) {\n allSameSign = true;\n max[0] = 0;\n max[1] = 0;\n }\n\n // align zero line if necessary\n if (!allSameSign && y1ratio !== y2ratio) {\n if (y1ratio < y2ratio) {\n // adjust min[1]\n min[1] = min[0] / max[0] * max[1];\n } else {\n // adjust min[0]\n min[0] = min[1] / max[1] * max[0];\n }\n }\n return {\n max,\n min\n };\n};\n","import { getObjProp, defaultValue, makeElement, DimensionSubtype, DataModel } from 'muze-utils';\nimport { ScaleType } from '@chartshq/muze-axis';\nimport { layerFactory } from '@chartshq/visual-layer';\nimport { GRIDLINEPARENTGROUPCLASS, GRIDBANDPARENTGROUPCLASS } from '../enums/constants';\nimport { TIMEDIFFS } from '../enums/reactive-props';\n\nconst LINEAR = ScaleType.LINEAR;\n\nconst getLayerDefinition = (context, axes, type, orientation) => {\n let encoding;\n const config = context.config();\n const { classPrefix, gridLines, gridBands } = config;\n const gridLineColor = gridLines.color;\n const zeroLineColor = gridLines.zeroLineColor;\n const defClassName = type === 'band' ? gridBands.defClassName : gridLines.defClassName;\n const gridBandColor = gridBands[orientation].color;\n const axis = axes[orientation][0];\n const isLinearScale = axis.constructor.type() === LINEAR;\n\n if (type === 'band' && isLinearScale) {\n encoding = {\n [orientation]: `${orientation}value`,\n [`${orientation}0`]: `${orientation}value0`\n };\n } else {\n encoding = {\n [orientation]: isLinearScale ? `${orientation}value` : `${orientation}dim`\n };\n }\n encoding.color = {\n value: (data, i) => {\n const isNegativeDomain = isLinearScale && axis.domain()[0] < 0;\n if (type === 'band') {\n return gridBandColor[i % 2];\n }\n return isNegativeDomain && data[orientation] === 0 ? zeroLineColor : gridLineColor;\n }\n };\n\n return {\n definition: {\n defClassName: `${defClassName}-${orientation}`,\n className: config.className,\n individualClassName: (data, i) => {\n let className;\n const isNegativeDomain = isLinearScale && axis.domain()[0] < 0;\n if (isNegativeDomain && data.y === 0 && type !== 'band') {\n className = `${classPrefix}-axis-zero-line`;\n } else {\n className = `${classPrefix}-grid-${type}-${orientation}-${i % 2}`;\n }\n return className;\n },\n [`pad${orientation.toUpperCase()}`]: type === 'band' ? 0 : undefined,\n encoding\n },\n axes: {\n [orientation]: axis\n },\n interactive: false\n };\n};\n\nconst getDefaultVisibilty = (show, axis) => {\n if (axis.constructor.type() === LINEAR) {\n return show;\n }\n return false;\n};\n\nexport const getGridLayerDefinitions = (context, config, type) => ['x', 'y'].map((axisType) => {\n const show = defaultValue(config[axisType] && config[axisType].show,\n getDefaultVisibilty(config.show, context.axes()[axisType][0]));\n\n return show ? getLayerDefinition(context, context.axes(), type, axisType) : undefined;\n}).filter(d => d !== undefined);\n\nexport const getGridLayerData = (axes, fields, fieldsConfig) => {\n const gridData = {};\n ['x', 'y'].forEach((type) => {\n let ticks = axes[type][0].getTickValues();\n const subtype = getObjProp(fieldsConfig, getObjProp(fields, type, 0).getMembers()[0], 'def', 'subtype');\n const jsonData = [];\n const schema = [\n {\n name: 'yvalue',\n type: 'measure'\n }, {\n name: 'xvalue',\n type: 'measure'\n },\n {\n name: 'yvalue0',\n type: 'measure'\n }, {\n name: 'xvalue0',\n type: 'measure'\n }, {\n name: 'xdim',\n type: 'dimension',\n subtype\n }, {\n name: 'ydim',\n type: 'dimension',\n subtype\n }\n ];\n const len = Math.max(ticks.length);\n ticks = subtype === DimensionSubtype.TEMPORAL ? ticks.map(d => d.getTime()) : ticks;\n for (let i = 0; i < len; i += 1) {\n jsonData.push({\n [`${type}value`]: ticks[i],\n [`${type}value0`]: ticks[i + 1],\n [`${type}dim`]: ticks[i],\n [`${type}dim`]: ticks[i]\n });\n }\n gridData[type] = new DataModel(jsonData, schema);\n });\n return gridData;\n};\n\nexport const createGridLineLayer = (context, data) => {\n const vuConf = context.config();\n const dependencies = context._layerDeps;\n const measurement = {\n width: context.width(),\n height: context.height()\n };\n\n ['band', 'line'].forEach((type) => {\n let mark;\n let config;\n let instances;\n if (type === 'band') {\n mark = 'bar';\n config = vuConf.gridBands;\n instances = context._gridbands;\n } else {\n mark = 'tick';\n config = vuConf.gridLines;\n instances = context._gridlines;\n }\n const definitions = getGridLayerDefinitions(context, config, type);\n\n definitions.forEach((atomicDef, i) => {\n let layer;\n const definition = atomicDef.definition;\n const axesObj = atomicDef.axes;\n const sConf = layerFactory.getSerializedConf(mark, definition);\n sConf.mark = mark;\n if (!instances[i]) {\n layer = layerFactory.getLayerInstance(sConf);\n layer.dependencies(dependencies);\n } else {\n layer = instances[i];\n }\n\n layer.config(sConf)\n .measurement(measurement)\n .data(axesObj.y ? data.y : data.x)\n .dataProps({\n timeDiffs: context.store().get(TIMEDIFFS)\n })\n .axes(axesObj);\n instances[i] = layer;\n });\n });\n};\n\nexport const renderGridLineLayers = (context, container) => {\n const axes = context.axes();\n const config = context.config();\n const classPrefix = config.classPrefix;\n\n if (axes && ((axes.x && axes.x.length) || (axes.y && axes.y.length))) {\n const gridBandData = getGridLayerData(axes, context.fields(), context.data().getFieldsConfig());\n createGridLineLayer(context, gridBandData);\n [[context._gridlines, `${classPrefix}-${GRIDLINEPARENTGROUPCLASS}`],\n [context._gridbands, `${classPrefix}-${GRIDBANDPARENTGROUPCLASS}`]].forEach((entry) => {\n const [instances, parentGroupClass] = entry;\n const mountPoint = makeElement(container, 'g', [1], `.${parentGroupClass}`);\n const className = `${parentGroupClass}-group`;\n makeElement(mountPoint, 'g', instances, `.${className}`, {\n update: (group, instance) => {\n instance.mount(group.node());\n }\n });\n });\n }\n};\n","import { CLASSPREFIX, CONSOLIDATED } from './enums/constants';\n\n/**\n * Returns the default configuration of the visual unit\n * @return {Object} Default configuration of visual unit\n */\nexport const defaultConfig = {\n classPrefix: CLASSPREFIX,\n defClassName: 'visual-unit',\n className: '',\n trackerClassName: 'visual-unit-tracker',\n gridLines: {\n defClassName: 'axis-grid-lines',\n className: '',\n show: true,\n color: '#efefef',\n zeroLineColor: '#b6b6b6'\n },\n gridBands: {\n defClassName: 'axis-grid-bands',\n className: '',\n show: false,\n y: {\n color: ['#fff', '#fbfbfb']\n },\n x: {\n color: ['#fff', '#f9f9f9']\n }\n },\n arcLayerClassName: 'layer-arc',\n interaction: {\n tooltip: {\n mode: CONSOLIDATED\n }\n },\n sideEffectClassName: 'side-effect-container'\n};\n","export const CLASSPREFIX = 'muze';\nexport const IDFIELD = '__id__';\nexport const GRIDLINEPARENTGROUPCLASS = 'grid-lines';\nexport const GRIDBANDPARENTGROUPCLASS = 'grid-bands';\nexport const CONSOLIDATED = 'consolidated';\nexport const FRAGMENTED = 'fragmented';\nexport const FACET_BY_FIELDS = 'facetByFields';\nexport const RETINAL_FIELDS = 'retinalFields';\nexport const PARENT_ALIAS = 'parentAlias';\nexport const LAYERS = 'layers';\nexport const CACHED_DATA = 'cachedData';\nexport const STORE = 'store';\n\n","import { mergeRecursive } from 'muze-utils';\nimport { defaultConfig } from './default-config';\nimport { CONFIG, LAYERDEFS, AXES, WIDTH, HEIGHT, MOUNT, TRANSFORM, FIELDS, DATA } from './enums/reactive-props';\n\nexport default {\n [CONFIG]: {\n value: null,\n meta: {\n sanitization: (config, oldConfig) => (\n mergeRecursive(oldConfig || mergeRecursive({}, defaultConfig), config)\n )\n }\n },\n [LAYERDEFS]: {\n value: null\n },\n [AXES]: {\n value: null,\n meta: {\n sanitization: (axes, prevAxes) => Object.assign(prevAxes || {}, axes)\n }\n },\n [WIDTH]: {\n value: null\n },\n [HEIGHT]: {\n value: null\n },\n [MOUNT]: {\n value: null\n },\n [TRANSFORM]: {\n value: null\n },\n [FIELDS]: {\n value: null\n },\n [DATA]: {\n value: null,\n meta: {\n preset: (data, context) => {\n if (context._cache) {\n const cachedData = context.cachedData();\n context.cachedData([...cachedData, data]);\n } else {\n const oldData = context.data();\n oldData && oldData.unsubscribe('propagation');\n context.cachedData([data]);\n }\n }\n }\n }\n};\n","import { DimensionSubtype } from 'muze-utils';\nimport * as PROPS from './enums/reactive-props';\nimport {\n transformDataModels,\n getDimensionMeasureMap,\n createLayers,\n attachDataToLayers,\n attachAxisToLayers,\n unionDomainFromLayers,\n getLayerAxisIndex\n} from './helper';\n\nconst axisMap = {\n 0: 'primary',\n 1: 'secondary'\n};\nconst axisProps = [PROPS.primaryXAxisUpdated, PROPS.secondaryXAxisUpdated, PROPS.primaryYAxisUpdated,\n PROPS.secondaryYAxisUpdated];\n\nexport const listenerMap = context => ([\n {\n type: 'registerImmediateListener',\n props: [PROPS.AXES],\n listener: ([, axes]) => {\n ['x', 'y'].forEach((type) => {\n const axesArr = axes[type] || [];\n axesArr.forEach((axis, i) => {\n axis.on('update', () => {\n context.store().commit(PROPS[`${axisMap[i]}${axis.isReverse() ? 'Y' : 'X'}AxisUpdated`], true);\n });\n });\n });\n }\n },\n {\n type: 'registerImmediateListener',\n props: [PROPS.CONFIG],\n listener: ([, config]) => {\n config && context.firebolt().config(config.interaction);\n }\n },\n {\n type: 'computed',\n props: [PROPS.LAYERSCREATED],\n listener: fetch => fetch(PROPS.LAYERDEFS, PROPS.FIELDS, (layerDefs, fields) => {\n const layerDefsValue = layerDefs.value;\n const fieldsVal = fields.value;\n if (layerDefsValue && fieldsVal) {\n const layers = createLayers(context, layerDefs.value);\n context.layers(layers);\n context._layerAxisIndex = getLayerAxisIndex(context.layers(), fieldsVal);\n context._lifeCycleManager.notify({ client: layers, action: 'initialized', formalName: 'layer' });\n return true;\n }\n return null;\n })\n },\n {\n type: 'computed',\n props: [PROPS.TIMEDIFFS],\n listener: fetch => fetch(PROPS.DATA, PROPS.FIELDS, PROPS.AXES, (data, fields, axes) => {\n const dataModel = data.value;\n const axisFields = fields.value;\n const axesObj = axes.value;\n if (dataModel && axisFields && axesObj) {\n const timeDiffs = {};\n const timeDiffsByField = {};\n ['x', 'y'].forEach((type) => {\n const field = axisFields[type][0];\n if (field && field.subtype() === DimensionSubtype.TEMPORAL) {\n timeDiffs[type] = field.getMinDiff();\n timeDiffsByField[field] = timeDiffs[type];\n axesObj[type].forEach(axis => axis.minDiff(timeDiffs[type]));\n }\n });\n context._timeDiffsByField = timeDiffsByField;\n return timeDiffs;\n }\n return null;\n })\n },\n {\n type: 'computed',\n props: [PROPS.DATADOMAIN],\n listener: fetch => fetch(PROPS.DATA, PROPS.LAYERSCREATED, PROPS.AXES, PROPS.TRANSFORM,\n (dataModel, layersCreated, axes, transform) => {\n const dataModelVal = dataModel.value;\n const layerAxisIndexVal = context._layerAxisIndex;\n const axesVal = axes.value;\n if (dataModelVal && layersCreated.value && axesVal && layerAxisIndexVal) {\n const layers = context.layers();\n const dataModels = transformDataModels(transform.value, dataModelVal);\n context._transformedDataModels = dataModels;\n context._lifeCycleManager.notify({ client: layers, action: 'beforeupdate', formalName: 'layer' });\n attachDataToLayers(layers, dataModelVal, context._transformedDataModels);\n context._dimensionMeasureMap = getDimensionMeasureMap(layers,\n dataModelVal.getFieldsConfig(), context.retinalFields());\n attachAxisToLayers(axesVal, layers, layerAxisIndexVal);\n context._lifeCycleManager.notify({ client: layers, action: 'updated', formalName: 'layer' });\n return unionDomainFromLayers(layers, context.fields(),\n layerAxisIndexVal, dataModelVal.getFieldsConfig());\n }\n return null;\n })\n },\n {\n type: 'registerImmediateListener',\n props: [PROPS.DATADOMAIN],\n listener: ([, dataDomain]) => {\n dataDomain !== null && context.updateAxisDomain(dataDomain);\n }\n },\n {\n type: 'registerChangeListener',\n props: [PROPS.MOUNT, PROPS.DATA, ...axisProps],\n listener: (mount, data) => {\n const container = mount[1];\n if (container && data[1]) {\n context.render(container);\n }\n }\n }\n]);\n","import { FACET_BY_FIELDS, RETINAL_FIELDS, PARENT_ALIAS, LAYERS, STORE, CACHED_DATA } from './enums/constants';\n\nexport const PROPS = {\n [FACET_BY_FIELDS]: {},\n [RETINAL_FIELDS]: {},\n [PARENT_ALIAS]: {},\n [LAYERS]: {},\n [STORE]: {},\n [CACHED_DATA]: {},\n detailFields: {}\n};\n","import { CommonProps } from 'muze-utils';\nimport { DATA, MOUNT } from '../enums/reactive-props';\n\nexport const clearActionHistory = (context) => {\n const actionHistory = context._actionHistory;\n for (const key in actionHistory) {\n if (actionHistory[key].isMutableAction) {\n delete context._actionHistory[key];\n }\n }\n};\n\nexport const dispatchQueuedSideEffects = (context) => {\n const queuedSideEffects = context._queuedSideEffects;\n Object.entries(queuedSideEffects).forEach((entry) => {\n const sideEffect = entry[1];\n context.dispatchSideEffect(sideEffect.name, ...sideEffect.params);\n });\n context._queuedSideEffects = {};\n};\n\nexport const registerListeners = (firebolt) => {\n const context = firebolt.context;\n const store = context.store();\n\n store.registerImmediateListener([DATA, MOUNT], (dataModel, mount) => {\n const dm = dataModel[1];\n\n if (dm && mount[1]) {\n const originalData = firebolt.context.cachedData()[0];\n firebolt.createSelectionSet(firebolt.context.data().getData().uids);\n firebolt.attachPropagationListener(originalData);\n }\n }, true);\n\n context._layerDeps.throwback.registerChangeListener([CommonProps.ON_LAYER_DRAW],\n ([, onlayerdraw]) => {\n if (onlayerdraw) {\n firebolt.initializeSideEffects();\n firebolt.config(context.config().interaction);\n firebolt.mapActionsAndBehaviour();\n dispatchQueuedSideEffects(firebolt);\n clearActionHistory(firebolt);\n }\n });\n};\n\n","import { DimensionSubtype } from 'muze-utils';\n\nconst getRangeFromData = (instance, selectionDataModel, propConfig) => {\n let criteria;\n const dataObj = selectionDataModel[0].getData();\n const propCriteria = propConfig.payload.criteria;\n const sourceIdentifiers = propConfig.sourceIdentifiers;\n const schema = dataObj.schema;\n const fieldMap = instance.data().getFieldsConfig();\n const data = dataObj.data;\n const isActionSourceSame = instance.id() === propConfig.sourceId;\n\n if (isActionSourceSame) {\n criteria = propCriteria;\n } else {\n criteria = (sourceIdentifiers !== null) ? schema.reduce((acc, obj, index) => {\n let range;\n const field = obj.name;\n const fieldObj = fieldMap[field];\n const type = fieldObj && (fieldObj.def.subtype ? fieldObj.def.subtype : fieldObj.def.type);\n const isDimension = type === DimensionSubtype.CATEGORICAL;\n\n if (!fieldObj) {\n return acc;\n }\n\n if (!isDimension) {\n range = [Math.min(...data.map(d => d[index])), Math.max(...data.map(d => d[index]))];\n } else {\n range = data.map(d => d[index]);\n }\n acc[field] = range;\n return acc;\n }, {}) : null;\n }\n return criteria;\n};\n\nexport const payloadGenerator = {\n brush: (instance, selectionDataModel, propConfig) => {\n const propPayload = propConfig.payload;\n const criteria = getRangeFromData(instance, selectionDataModel, propConfig);\n const payload = Object.assign({}, propPayload);\n payload.criteria = criteria;\n return payload;\n },\n\n __default: (instance, selectionDataModel, propConfig) => {\n const propPayload = propConfig.payload;\n const sourceIdentifiers = propConfig.sourceIdentifiers;\n const dataObj = selectionDataModel[0].getData();\n let schema = dataObj.schema;\n const payload = Object.assign({}, propPayload);\n schema = dataObj.schema;\n const data = dataObj.data;\n const sourceFields = schema.map(d => d.name);\n payload.criteria = !sourceIdentifiers && selectionDataModel[0].isEmpty() ? null :\n [sourceFields, ...data];\n payload.sourceFields = sourceIdentifiers ? sourceIdentifiers.getSchema().map(d => d.name) : [];\n return payload;\n }\n};\n\n","import { isSimpleObject, FieldType, DataModel } from 'muze-utils';\n\nconst getModelWithFacetData = (dm, data) => {\n const dataObj = dm.getData();\n const schema1 = dataObj.schema;\n const data1 = dataObj.data;\n const jsonData = [];\n const schema2 = data[0].map(d => ({\n name: `${d}`,\n type: FieldType.DIMENSION\n }));\n const data2 = data[1];\n\n data1.forEach((d) => {\n const tuple = {};\n schema1.forEach((obj, i) => {\n tuple[obj.name] = d[i];\n });\n schema2.forEach((obj, i) => {\n tuple[obj.name] = data2[i];\n });\n jsonData.push(tuple);\n });\n\n return new DataModel(jsonData, [...schema1, ...schema2]);\n};\n\nexport const propagateValues = (instance, action, config = {}) => {\n let propagationData;\n const payload = config.payload;\n const selectionSet = config.selectionSet;\n const propagationFieldInf = config.propagationFields[action] || {};\n const propagationFields = propagationFieldInf.fields || [];\n const append = propagationFieldInf.append;\n const criteria = payload.criteria;\n const context = instance.context;\n const dataModel = context.cachedData()[0];\n const sourceId = context.id();\n const sideEfffects = instance.sideEffects();\n const behaviourEffectMap = instance._behaviourEffectMap;\n const mergedModel = selectionSet.mergedEnter.model;\n const fieldsConfig = dataModel.getFieldsConfig();\n payload.sourceUnit = sourceId;\n payload.action = action;\n payload.sourceCanvas = context.parentAlias();\n const propagationBehaviourMap = instance._propagationBehaviourMap;\n const propagationBehaviour = propagationBehaviourMap[action] || action;\n\n let propFields = [];\n if (criteria === null) {\n propagationData = null;\n } else if (isSimpleObject(criteria)) {\n propFields = Object.keys(criteria || {});\n propagationData = mergedModel ? mergedModel.project(propFields) : null;\n } else {\n propFields = criteria[0];\n propagationData = mergedModel ? mergedModel.project(propFields) : null;\n }\n\n const facetByFields = context.facetByFields();\n if (propagationData !== null && propagationFields.length) {\n const fields = propagationData.getData().schema.map(d => d.name);\n propagationData = getModelWithFacetData(propagationData, facetByFields);\n propFields = append ? [...fields, ...propagationFields] : propagationFields;\n propagationData = propagationData.project(propFields);\n }\n\n let propagateInterpolatedValues = false;\n if (propFields.length && propFields.every(field => fieldsConfig[field] &&\n fieldsConfig[field].def.type === FieldType.MEASURE)) {\n propagateInterpolatedValues = true;\n }\n\n const groupId = context.parentAlias();\n payload.action = action;\n const behaviourInstance = instance._actions.behavioural[propagationBehaviour];\n const isMutableAction = behaviourInstance ? behaviourInstance.constructor.mutates() : false;\n\n const filterFn = (entry, propagationConf) => {\n const effects = behaviourEffectMap[entry.config.action];\n const mutates = entry.config.groupId ?\n effects.some(d => sideEfffects[d.name || d].constructor.mutates()) : true;\n return entry.config.groupId !== propagationConf.groupId && mutates;\n };\n\n const sourceBehaviour = instance._actions.behavioural[action];\n const mutates = sourceBehaviour ? sourceBehaviour.constructor.mutates() : false;\n let propConfig = {\n payload,\n action,\n criteria: propagationData,\n isMutableAction: mutates,\n propagateInterpolatedValues,\n groupId,\n sourceId: mutates ? groupId : sourceId,\n filterFn,\n enabled: (propConf, firebolt) => (action !== propagationBehaviour ?\n propConf.payload.sourceCanvas === firebolt.context.parentAlias() : true)\n };\n\n dataModel.propagate(propagationData, propConfig, true);\n\n if (action !== propagationBehaviour) {\n propConfig = {\n payload,\n sourceId: isMutableAction ? groupId : sourceId,\n criteria: propagationData,\n isMutableAction,\n propagateInterpolatedValues,\n action: propagationBehaviour,\n groupId,\n applyOnSource: action === propagationBehaviour,\n enabled: (propConf, firebolt) => propConf.payload.sourceCanvas !== firebolt.context.parentAlias(),\n filterFn\n };\n\n dataModel.propagate(propagationData, propConfig, true, {\n filterImmutableAction: (actionInf, propInf) => actionInf.groupId !== propInf.groupId\n });\n }\n};\n","import { FieldType } from 'muze-utils';\nimport { Firebolt, SpawnableSideEffect } from '@chartshq/muze-firebolt';\nimport { registerListeners } from './helper';\nimport { payloadGenerator } from './payload-generator';\nimport { propagateValues } from './data-propagator';\n\n/**\n * This class manages the interactions of visual unit. It associates physical actions with\n * behavioural actions. It also propagates the behavioural actions to other datamodels.\n */\nexport default class UnitFireBolt extends Firebolt {\n constructor (...params) {\n super(...params);\n registerListeners(this);\n }\n\n propagate (behaviour, payload, selectionSet, sideEffects) {\n propagateValues(this, behaviour, {\n payload,\n selectionSet,\n sideEffects,\n propagationFields: this._propagationFields\n });\n }\n\n getApplicableSideEffects (sideEffects, payload, propagationInf) {\n const context = this.context;\n const unitId = context.id();\n const aliasName = context.parentAlias();\n const propagationSourceCanvas = propagationInf.propPayload && propagationInf.propPayload.sourceCanvas;\n const sourceUnitId = propagationInf.propPayload && propagationInf.propPayload.sourceUnit;\n const sourceSideEffects = this._sourceSideEffects;\n const sideEffectInstances = this.sideEffects();\n const actionOnSource = sourceUnitId ? sourceUnitId === unitId : true;\n\n const applicableSideEffects = payload.sideEffects ? [{\n effects: payload.sideEffects,\n behaviours: [payload.action]\n }] : sideEffects;\n applicableSideEffects.forEach((d) => {\n let mappedEffects = d.effects;\n mappedEffects = mappedEffects.filter((se) => {\n const mutates = sideEffectInstances[se.name || se].constructor.mutates();\n if (mutates && propagationInf.isMutableAction === false) {\n return false;\n }\n if (!actionOnSource && payload.criteria !== null) {\n const sideEffectChecker = sourceSideEffects[se.name || se];\n return sideEffectChecker ? sideEffectChecker(propagationInf.propPayload, context) : true;\n }\n if (propagationSourceCanvas === aliasName || actionOnSource) {\n return se.applyOnSource !== false;\n }\n\n return true;\n });\n d.effects = mappedEffects;\n });\n return applicableSideEffects;\n }\n\n shouldApplySideEffects (propagate) {\n return propagate === false;\n }\n\n onDataModelPropagation () {\n return (data, config) => {\n let isSourceFieldPresent = true;\n let isMutableAction = false;\n const propPayload = config.payload;\n const sourceIdentifiers = config.sourceIdentifiers;\n const enabledFn = config.enabled;\n const action = config.action;\n const payloadFn = payloadGenerator[action] || payloadGenerator.__default;\n\n if (sourceIdentifiers) {\n const fieldsConfig = sourceIdentifiers.getFieldsConfig();\n const sourceIdentifierFields = Object.keys(fieldsConfig);\n const propFields = Object.keys(data[0].getFieldsConfig());\n if (!Object.values(fieldsConfig).some(d => d.def.type === FieldType.MEASURE)) {\n isSourceFieldPresent = sourceIdentifierFields.some(d => propFields.indexOf(d) !== -1);\n }\n }\n\n const payload = payloadFn(this.context, data, config);\n const sourceBehaviours = this._sourceBehaviours;\n const filterFn = sourceBehaviours[action] || sourceBehaviours['*'];\n let enabled = true;\n\n if (filterFn) {\n enabled = filterFn(propPayload || {}, this.context);\n }\n\n if (enabledFn) {\n enabled = enabledFn(config, this) && enabled !== false;\n }\n\n if (enabled) {\n const effects = this._behaviourEffectMap[action];\n const sideEffectInstances = this.sideEffects();\n isMutableAction = config.groupId ?\n effects.some(d => sideEffectInstances[d.name || d].constructor.mutates()) : config.isMutableAction;\n\n const propagationInf = {\n propagate: false,\n data,\n propPayload,\n sourceIdentifiers,\n persistent: false,\n isSourceFieldPresent,\n sourceId: config.propagationSourceId,\n isMutableAction: config.isMutableAction\n };\n\n this._actionHistory[action] = {\n payload,\n propagationInf,\n isMutableAction\n };\n this.dispatchBehaviour(action, payload, propagationInf);\n }\n };\n }\n\n initializeSideEffects () {\n super.initializeSideEffects();\n const sideEffects = this.sideEffects();\n for (const key in sideEffects) {\n if ({}.hasOwnProperty.call(sideEffects, key)) {\n sideEffects[key] instanceof SpawnableSideEffect && sideEffects[key].drawingContext(() => {\n const context = this.context;\n return context.getDrawingContext();\n });\n }\n }\n }\n\n prepareSelectionSets (behaviours) {\n const data = this.context.data();\n if (data) {\n this.createSelectionSet(data.getData().uids, behaviours);\n }\n return this;\n }\n\n remove () {\n this.context.cachedData()[0].unsubscribe('propagation');\n return this;\n }\n}\n","import { layerFactory } from '@chartshq/visual-layer';\nimport {\n setAttrs,\n CommonProps,\n getUniqueId,\n getQualifiedClassName,\n selectElement,\n transactor,\n Store,\n makeElement,\n registerListeners,\n generateGetterSetters,\n getDataModelFromIdentifiers,\n isSimpleObject,\n transposeArray,\n FieldType\n} from 'muze-utils';\nimport { physicalActions, sideEffects, behaviouralActions, behaviourEffectMap } from '@chartshq/muze-firebolt';\nimport { actionBehaviourMap } from './firebolt/action-behaviour-map';\nimport {\n renderLayers,\n getNearestDimensionalValue,\n removeLayersBy,\n getLayersBy,\n getLayerFromDef,\n attachAxisToLayers,\n getLayerAxisIndex,\n createSideEffectGroup,\n getAdjustedDomain,\n resolveEncodingTransform\n} from './helper';\nimport { renderGridLineLayers } from './helper/grid-lines';\nimport localOptions from './local-options';\nimport { listenerMap } from './listener-map';\nimport {\n primaryYAxisUpdated,\n primaryXAxisUpdated,\n secondaryXAxisUpdated,\n secondaryYAxisUpdated,\n DATADOMAIN,\n TIMEDIFFS\n} from './enums/reactive-props';\nimport { PROPS } from './props';\nimport UnitFireBolt from './firebolt';\nimport './styles.scss';\n\nconst FORMAL_NAME = 'unit';\n\n/**\n * @module VisualUnit\n * A hierarchical component of renderer which manages multiple layers. This logical\n * module is responsible for layouting layers, attach axis with them, resolving conflicts of layers.\n */\n\n/**\n * Basic unit implementaiton\n * @class VisualUnit\n */\nexport default class VisualUnit {\n\n /**\n * Creates instance of visualization unit\n * @param registry {Object} Component registry\n * @param dependencies {Object} Dependencies required by visual unit.\n */\n constructor (registry, dependencies) {\n this._id = getUniqueId();\n this._dependencies = dependencies;\n this._layerDeps = {\n throwback: new Store({\n onlayerdraw: false\n }),\n smartLabel: dependencies.smartLabel\n };\n this._renderedResolve = null;\n this._renderedPromise = new Promise((resolve) => {\n this._renderedResolve = resolve;\n });\n this._layerDeps.throwback.registerChangeListener([CommonProps.ON_LAYER_DRAW], () => {\n this._renderedResolve();\n this._lifeCycleManager.notify({ client: this.layers(), action: 'drawn', formalName: 'layer' });\n });\n\n this._lifeCycleManager = dependencies.lifeCycleManager;\n this._layersMap = {};\n this._gridlines = [];\n this._gridbands = [];\n this._layerAxisIndex = {};\n this._transformedDataModels = {};\n\n layerFactory.setLayerRegistry(registry.layerRegistry);\n generateGetterSetters(this, PROPS);\n this.cachedData([]);\n this.store(new Store({\n [primaryXAxisUpdated]: null,\n [primaryYAxisUpdated]: null,\n [secondaryXAxisUpdated]: null,\n [secondaryYAxisUpdated]: null\n }));\n transactor(this, localOptions, this.store().model);\n this.firebolt(new UnitFireBolt(this, {\n physical: physicalActions,\n behavioural: behaviouralActions,\n physicalBehaviouralMap: actionBehaviourMap\n }, sideEffects, behaviourEffectMap));\n registerListeners(this, listenerMap);\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof VisualUnit\n */\n static formalName () {\n return FORMAL_NAME;\n }\n\n /**\n * Static helper for creates a unit instance\n *\n * @param {Object} [id] optional unique identifier for a unit; , id is calculated internally\n * @param {DataModel} data instance of datamodel\n * @param {Array.} layers layer configuration\n * @param {Object} config configurtion for the visual unit\n * @return {VisualUnit} Instance of a unit\n */\n static create (...params) {\n return new this(...params);\n }\n\n /**\n *\n *\n * @readonly\n * @memberof VisualUnit\n */\n firebolt (...firebolt) {\n if (firebolt.length) {\n this._firebolt = firebolt[0];\n return this;\n }\n return this._firebolt;\n }\n\n /**\n * Gets the domain for all axes of this visual unit.\n * @return {Object} Domains of each data field.\n */\n getDataDomain () {\n return this.store().get(DATADOMAIN);\n }\n\n /**\n * Retrieves the id created for this instance of visual unit\n * @return {string} id associated with the instance\n */\n id () {\n return this._id;\n }\n\n /**\n *\n *\n * @returns\n * @memberof VisualUnit\n */\n lockModel () {\n this._store.model.lock();\n return this;\n }\n\n /**\n *\n *\n * @returns\n * @memberof VisualUnit\n */\n unlockModel () {\n this._store.model.unlock();\n return this;\n }\n\n timeDiffsByField (...params) {\n if (params.length) {\n return this;\n }\n return this._timeDiffsByField;\n }\n\n /**\n * Renders the visual unit. It creates the layout and renders the axes and layers.\n * @return {VisualUnit} Instance of visual unit.\n */\n render (container) {\n const config = this.config();\n const { className, defClassName, sideEffectClassName, classPrefix } = config;\n const qualifiedClassName = getQualifiedClassName(defClassName, this.id(), config.classPrefix);\n const width = this.width();\n const height = this.height();\n const containerSelection = selectElement(container).style('position', 'relative');\n\n this._rootSvg = makeElement(containerSelection, 'svg', [null], className)\n .style('width', `${width}px`).style('height', `${height}px`);\n\n const node = this._rootSvg.node();\n setAttrs(node, {\n width,\n height,\n class: qualifiedClassName.join(' ')\n });\n renderGridLineLayers(this, node);\n renderLayers(this, node, this.layers(), {\n width,\n height\n });\n this._sideEffectGroup = createSideEffectGroup(node, `${classPrefix}-${sideEffectClassName}`);\n return this;\n }\n\n done () {\n return this._renderedPromise;\n }\n /**\n *\n *\n * @returns\n * @memberof VisualUnit\n */\n enableCaching () {\n this._cache = true;\n return this;\n }\n\n /**\n *\n *\n * @returns\n * @memberof VisualUnit\n */\n clearCaching () {\n this._cache = false;\n this.cachedData([this.cachedData()[0]]);\n return this;\n }\n\n /**\n *\n *\n * @returns\n * @memberof VisualUnit\n */\n getDrawingContext () {\n const rootSvg = this._rootSvg && this._rootSvg.node();\n const width = this.width();\n const height = this.height();\n return {\n htmlContainer: this.mount(),\n svgContainer: rootSvg,\n width,\n height,\n sideEffectGroup: this._sideEffectGroup,\n parentContainer: this.parentContainer(),\n xOffset: 0,\n yOffset: 0\n };\n }\n\n /**\n * Returns the serialized configuration of visual unit.\n * @return {Object} serialized configuration\n */\n serialize () {\n return {\n layers: this.layers().map(layer => layer.serialize()),\n config: this.config(),\n axes: this.store().get('axes').map(axis => axis.serialize())\n };\n }\n\n /**\n *\n *\n * @param {*} layerDef\n * @returns\n * @memberof VisualUnit\n */\n addLayer (layerDef) {\n const layerName = layerDef.name;\n const layer = this.getLayerByName(layerName);\n const measurement = {\n width: this.width(),\n height: this.height()\n };\n\n if (layer) {\n return [layer];\n }\n const serializedDef = layerFactory.getSerializedConf(layerDef.mark, layerDef);\n const instances = Object.values(getLayerFromDef(this, serializedDef));\n this.layers().push(...instances);\n const layerAxisIndex = getLayerAxisIndex(instances, this.fields());\n this._layerAxisIndex = Object.assign(this._layerAxisIndex, layerAxisIndex);\n attachAxisToLayers(this.axes(), instances, layerAxisIndex);\n const store = { unit: this, layers: {} };\n this.layers().forEach((inst) => {\n store.layers[inst.alias()] = inst;\n });\n instances.forEach((lyr) => {\n resolveEncodingTransform(lyr, store);\n lyr.measurement(measurement);\n lyr.dataProps({\n timeDiffs: this.store().get(TIMEDIFFS)\n });\n });\n return instances;\n }\n\n /**\n *\n *\n * @returns\n * @memberof VisualUnit\n */\n remove () {\n const lifeCycleManager = this._dependencies.lifeCycleManager;\n lifeCycleManager.notify({ client: this, action: 'beforeremove', formalName: 'unit' });\n this.store().unsubscribeAll();\n selectElement(this.mount()).remove();\n this.firebolt().remove();\n // Remove layers\n lifeCycleManager.notify({ client: this.layers(), action: 'beforeremove', formalName: 'layer' });\n this.layers().forEach(layer => layer.remove());\n lifeCycleManager.notify({ client: this.layers(), action: 'removed', formalName: 'layer' });\n lifeCycleManager.notify({ client: this, action: 'removed', formalName: 'unit' });\n return this;\n }\n\n /**\n *\n *\n * @param {*} identifiers\n * @returns\n * @memberof VisualUnit\n */\n getDataModelFromIdentifiers (identifiers, mode, parentModel) {\n if (identifiers === null) {\n return null;\n }\n const dataModel = parentModel || this.data();\n return getDataModelFromIdentifiers(dataModel, identifiers, mode);\n }\n\n /**\n *\n *\n * @returns\n * @memberof VisualUnit\n */\n resetData () {\n this.data(this.cachedData()[0]);\n return this;\n }\n\n /**\n *\n *\n * @returns\n * @memberof VisualUnit\n */\n getSourceInfo () {\n return {\n dimensionMeasureMap: this._dimensionMeasureMap,\n fields: this.fields(),\n data: this.data(),\n axes: this.axes()\n };\n }\n\n /**\n *\n *\n * @returns\n * @memberof VisualUnit\n */\n getDefaultTargetContainer () {\n const { classPrefix, defClassName } = this.config();\n return [`.${classPrefix}-${defClassName}`];\n }\n\n /**\n *\n *\n * @param {*} type\n * @returns\n * @memberof VisualUnit\n */\n getLayersByType (type) {\n const layers = getLayersBy(this.layers(), 'type', type);\n return layers;\n }\n\n /**\n *\n *\n * @param {*} name\n * @returns\n * @memberof VisualUnit\n */\n getLayerByName (name) {\n const layers = getLayersBy(this.layers(), 'name', name);\n return layers[0];\n }\n\n /**\n *\n *\n * @param {*} domain\n * @returns\n * @memberof VisualUnit\n */\n updateAxisDomain (domain) {\n ['x', 'y'].forEach((type) => {\n const axes = this.axes()[type];\n let min = [];\n let max = [];\n let dom;\n axes && axes.forEach((axis, i) => {\n const field = this.fields()[type][i];\n dom = domain[`${this.fields()[type][i]}`];\n\n if (field.type() !== FieldType.DIMENSION && dom) {\n min[i] = dom[0];\n max[i] = dom[1];\n }\n });\n if (axes) {\n if (axes.length > 1) {\n const axisConf = axes[0].config();\n if (axes[0].constructor.type() === 'linear') {\n if (axisConf.alignZeroLine) {\n axes.forEach(axis => axis.config({\n nice: false\n }));\n const adjustedDomain = getAdjustedDomain(max, min);\n min = adjustedDomain.min;\n max = adjustedDomain.max;\n }\n\n axes[0].updateDomainCache([min[0], max[0]]);\n axes[1].updateDomainCache([min[1], max[1]]);\n } else {\n axes[0].updateDomainCache(dom);\n axes[1].updateDomainCache(dom);\n }\n } else {\n axes[0].updateDomainCache(dom);\n }\n }\n });\n return this;\n }\n\n /**\n * Finds the nearest point closest to the x and y position.\n * @param {number} x x position.\n * @param {number} y y position.\n * @return {Object} Nearest point.\n */\n getNearestPoint (x, y, args) {\n let pointObj = {\n id: null\n };\n const dimValue = getNearestDimensionalValue(this, {\n x,\n y\n });\n\n if (dimValue !== null && args.getAllPoints) {\n pointObj.id = dimValue;\n const pointInf = this.getMarkInfFromLayers(x, y, args);\n pointObj.target = pointInf && pointInf.id ? pointInf.id : pointObj.id;\n return pointObj;\n }\n\n const markInf = this.getMarkInfFromLayers(x, y, args) || { id: null };\n pointObj = Object.assign({}, markInf);\n\n pointObj.target = markInf.id;\n return pointObj;\n }\n\n getMarkInfFromLayers (x, y, args) {\n const layers = this.layers();\n const len = layers.length;\n let point = null;\n // Iterate through the layers array and fetch the nearest point from each layer. If a valid\n // nearest point is found from any layer, then return that point.\n for (let i = 0; i < len; i++) {\n const layer = layers[i];\n const config = layer.config();\n if (config.interactive !== false) {\n point = layer.getNearestPoint(x, y, args);\n }\n if (point) {\n return point;\n }\n }\n return point;\n }\n\n /**\n *\n *\n * @param {*} identifiers\n * @returns\n * @memberof VisualUnit\n */\n getPlotPointsFromIdentifiers (identifiers, config = {}) {\n let points = [];\n let parsedIdentifiers = identifiers;\n if (identifiers === null) {\n return [];\n }\n const layers = this.layers();\n const len = layers.length;\n if (isSimpleObject(identifiers)) {\n parsedIdentifiers = [Object.keys(identifiers)];\n parsedIdentifiers = [...parsedIdentifiers, ...transposeArray(Object.values(identifiers))];\n }\n for (let i = 0; i < len; i++) {\n const layer = layers[i];\n if (layer.config().interactive !== false) {\n points = [...points, ...layer.getPointsFromIdentifiers(parsedIdentifiers, config)];\n }\n }\n return points;\n }\n\n /**\n *\n *\n * @param {*} name\n * @returns\n * @memberof VisualUnit\n */\n removeLayerByName (name) {\n removeLayersBy('name', name);\n return this;\n }\n\n /**\n *\n *\n * @param {*} type\n * @returns\n * @memberof VisualUnit\n */\n removeLayersByType (type) {\n removeLayersBy('type', type);\n return this;\n }\n\n parentContainer (...container) {\n if (container.length) {\n this._parentContainer = container[0];\n\n return this;\n }\n return this._parentContainer;\n }\n}\n","import { DataModel } from 'muze-utils';\n\nimport { retriveDomainFromData } from './group-utils';\n\n/**\n * Gets name of fields form the variables\n *\n * @param {*} fields1\n * @param {*} [fields2=[]]\n * @return\n */\nconst getFieldNames = (fields1, fields2 = []) => [fields1, fields2].map(fields => fields.reduce((acc, d) => {\n acc = [...acc, ...d.getMembers()];\n return acc;\n}, []));\n\n/**\n * Creates a selected datamodel from a parent datamodel and a set of field names\n *\n * @param {Object} datamodel provided as input\n * @param {Array} fieldNames schema names\n * @param {Array} fieldValues values of those schema names to be selected\n * @return {Object} creates a new selected datamodel\n */\nconst createSelectedDataModel = (datamodel, fieldNames, fieldValues) =>\n datamodel.select(fields => fieldNames.every((field, k) => fields[field].value === fieldValues[k]));\n\n/**\n *\n *\n * @param {*} facets\n * @param {*} keyArray\n * @return\n */\nconst uniqueKeyGenerator = (keyArray, context, depth = 0, val = []) => {\n const {\n facets,\n dataModel,\n uniqueValues\n } = context;\n\n // Get unique keys for the next depth recursively if required\n if (facets[depth + 1]) {\n const field = facets[depth];\n uniqueValues.forEach((value) => {\n const newDm = dataModel.select(fields => fields[field].value === value);\n const nextDepthUniqueValues = retriveDomainFromData(newDm, facets[depth + 1]);\n const newContext = {\n facets,\n dataModel: newDm,\n uniqueValues: nextDepthUniqueValues\n };\n\n uniqueKeyGenerator(keyArray, newContext, depth + 1, [...val, value]);\n });\n } else {\n uniqueValues.forEach((value) => {\n keyArray.push([...val, value]);\n });\n }\n};\n\n/**\n * projects row model based on the set of row and/or column and other projection fields\n *\n * @param {Object} datamodel provided as input\n * @return {Object} Projected datamodel\n */\nconst projectRows = (datamodel, projections) => {\n const {\n allColumnProjections,\n rowProjections,\n optionalProjections\n } = projections;\n\n if (rowProjections.length > 0) {\n return rowProjections.map((projectFields) => {\n const [projFieldNames, colProjFieldNames] = getFieldNames(projectFields, allColumnProjections);\n return datamodel.project([...projFieldNames, ...colProjFieldNames, ...optionalProjections]);\n });\n }\n return [datamodel];\n};\n\n/**\n * Adds the datamodels to current row index based on column fields\n *\n * @param {Array} context current context\n * @param {Array} callback List of facets applied to the current datamodel\n */\nconst pushToMatrix = (context, callback) => {\n let cells = [];\n const {\n matrix,\n datamodel,\n facetInfo,\n fieldInfo\n } = context;\n // Get projected fields for current row\n const {\n rowProjections,\n colProjections,\n optionalProjections\n } = fieldInfo;\n const {\n rowIndex,\n columnIndex\n } = facetInfo;\n const rowProj = rowProjections[(rowIndex) % rowProjections.length] || [];\n\n // Get the cells for the matrix from the return function of the callback on the datamodel.\n // callback function -> (datamodel, {projections, indices}, facets)\n if (colProjections.length > 0) {\n cells = colProjections.map((projectFields, projIdx) => {\n const [colProjFieldNames, rowProjFieldNames] = getFieldNames(projectFields, rowProj);\n const projectedDm = datamodel.project([...colProjFieldNames, ...rowProjFieldNames, ...optionalProjections]);\n const projections = { rowFields: rowProj, columnFields: projectFields };\n const indices = { rowIndex, columnIndex: columnIndex * colProjections.length + projIdx };\n\n return callback(projectedDm, { projections, indices }, facetInfo);\n });\n } else {\n const projections = { rowFields: rowProj, columnFields: [] };\n const indices = { rowIndex, columnIndex };\n\n cells = [callback(datamodel, { projections, indices }, facetInfo)];\n }\n\n matrix[rowIndex] = matrix[rowIndex] || [];\n matrix[rowIndex].push(...cells);\n};\n\n/**\n * Gets Matrixes for corresponding datamodel, facets and projections\n *\n * @param {Object} dataModel input datamodel\n * @param {Object} fieldMap corresponding fieldmap\n * @param {Array} facetsAndProjections contains the set of facets and projections for the matrices\n * @param {Function} callback Callback executed after datamodels are prepared after sel/proj\n * @return {Object} set of matrices with the corresponding row and column keys\n */\nexport const getMatrixModel = (dataModel, fieldInfo, callback) => {\n let rowDataModels = [];\n const rowKeys = [];\n const columnKeys = [];\n const allColumnProjections = [];\n const matrix = [];\n const facetInfo = [];\n const {\n rowFacets,\n colFacets,\n colProjections\n } = fieldInfo;\n\n colProjections.forEach((colProj) => {\n allColumnProjections.push(...colProj);\n });\n fieldInfo.allColumnProjections = allColumnProjections;\n\n // Performing row selection and projection\n if (rowFacets.length > 0) {\n // Get unique values for the root level of facet\n const field = rowFacets[0].toString();\n const firstLevelRowKeys = retriveDomainFromData(dataModel, field);\n\n // Get unique keys in the form of an array of arrays for each row\n uniqueKeyGenerator(rowKeys, { facets: rowFacets, dataModel, uniqueValues: firstLevelRowKeys });\n\n // Apply selection -> projection -> row datamodels\n rowKeys.forEach((val) => {\n // Create faceted datamodel\n const [rowFacetFieldNames] = getFieldNames(rowFacets);\n const selectedDataModel = createSelectedDataModel(dataModel, rowFacetFieldNames, val);\n\n // Project the datamodel based on the number of projections (based on last levels)\n facetInfo.push([rowFacets, val]);\n rowDataModels.push(...projectRows(selectedDataModel, fieldInfo));\n });\n } else {\n // No row facets, hence only row projection\n rowDataModels.push(...projectRows(dataModel, fieldInfo));\n }\n\n // Maintaining set of row datamodels for column resolution\n rowDataModels = rowDataModels.length > 0 ? rowDataModels : [[]];\n\n // Performing column selection and projection\n if (colFacets.length > 0) {\n const colFacetNames = colFacets.map(d => `${d}`);\n // Get unique values for the root level of facet\n const field = colFacetNames[0];\n const firstLevelColumnKeys = retriveDomainFromData(dataModel, field);\n\n // Get unique keys to create faceted datamodels: this time for columns\n uniqueKeyGenerator(columnKeys, {\n facets: colFacetNames,\n dataModel,\n uniqueValues: firstLevelColumnKeys\n });\n\n // For each row in the datamodel, apply selection -> projection -> push the projection to matri\n rowDataModels.forEach((dme, rIndex) => {\n facetInfo[rIndex] = facetInfo[rIndex] || [[], []];\n columnKeys.forEach((val, cIndex) => {\n matrix[rIndex] = matrix[rIndex] || [];\n\n // If datamodel is not present in current row, choose parent datamodel\n const datamodel = dme instanceof DataModel ? dme : dataModel;\n\n // Selection is made on the datamodel for the current row\n const selectedDataModel = createSelectedDataModel(datamodel, colFacetNames, val);\n const context = {\n matrix,\n datamodel: selectedDataModel,\n facetInfo: {\n rowFacets: facetInfo[rIndex],\n colFacets: [colFacets, val],\n rowIndex: rIndex,\n columnIndex: cIndex\n },\n fieldInfo\n };\n pushToMatrix(context, callback);\n });\n });\n } else {\n // No column facets, hence only row projection\n rowDataModels.forEach((dme, rIndex) => {\n facetInfo[rIndex] = facetInfo[rIndex] || [[], []];\n const context = {\n matrix,\n datamodel: dme || dataModel,\n facetInfo: {\n rowFacets: facetInfo[rIndex],\n colFacets: [[], []],\n rowIndex: rIndex,\n columnIndex: 0\n },\n fieldInfo\n };\n\n pushToMatrix(context, callback);\n });\n }\n\n // Getting column keys\n const transposedColKeys = columnKeys.length > 0 ? columnKeys[0].map((col, i) =>\n columnKeys.map(row => row[i])) : columnKeys;\n\n return { matrix, rowKeys, columnKeys: transposedColKeys };\n};\n","import { AxisOrientation } from '@chartshq/muze-axis';\nimport { getObjProp, FieldType } from 'muze-utils';\nimport { getMatrixModel } from './matrix-model';\nimport {\n getCellKey,\n isDistributionEqual,\n mutateAxesFromMap,\n createSelection,\n getFieldsFromSuppliedLayers,\n extractFields\n} from './group-utils';\nimport { ROW, ROWS, COLUMNS, COL, LEFT, RIGHT, TOP, BOTTOM, PRIMARY, SECONDARY, X, Y } from '../enums/constants';\n\n/**\n * Updates row and column cells with the geom cell corresponding to the facet keys\n *\n * @param {*} resolver\n * @param {*} facets\n */\nconst updateCells = (resolver, facets, geomCell) => {\n [ROW, COL].forEach((field) => {\n const cells = resolver[`${field}Cells`]();\n const facetKey = facets[`${field}Facets`][1].join();\n\n !cells[facetKey] && (cells[facetKey] = []);\n cells[facetKey].push(geomCell);\n resolver[`${field}Cells`](cells);\n });\n};\n\n/**\n *\n *\n * @param {*} context\n * @param {*} datamodel\n * @param {*} fieldInfo\n * @param {*} facets\n * @return\n */\nexport const createValueCells = (context, datamodel, fieldInfo, facets) => {\n const {\n projections,\n indices\n } = fieldInfo;\n const {\n rowFields,\n columnFields\n } = projections;\n const {\n rowIndex,\n columnIndex\n } = indices;\n const {\n suppliedLayers,\n cell: GeomCell,\n resolver,\n config,\n encoder,\n detailFields\n } = context;\n const axes = resolver.axes();\n const cacheMaps = resolver.cacheMaps();\n const matrixLayers = resolver.matrixLayers();\n const labelManager = resolver.dependencies().smartlabel;\n const horizontalAxis = resolver.horizontalAxis();\n const verticalAxis = resolver.verticalAxis();\n const datamodelTransform = resolver.datamodelTransform();\n const {\n entryCellMap,\n exitCellMap\n } = cacheMaps;\n const layerConfigArr = encoder.getLayerConfig({ columnFields, rowFields }, suppliedLayers || []);\n const axesCreators = { config, labelManager, axes, cacheMaps };\n\n fieldInfo.normalizedColumns = verticalAxis.fields;\n fieldInfo.normalizedRows = horizontalAxis.fields;\n\n const groupAxes = encoder.createAxis(axesCreators, fieldInfo);\n\n matrixLayers[rowIndex] = matrixLayers[rowIndex] ? matrixLayers[rowIndex] : [];\n matrixLayers[rowIndex][columnIndex] = layerConfigArr;\n\n // return from map if already there otherwise create and put in map\n const geomCellKey = getCellKey(rowIndex, columnIndex);\n const fields = {\n y: rowFields,\n x: columnFields\n };\n const allFacets = [\n [...facets.rowFacets[0], ...facets.colFacets[0]],\n [...facets.rowFacets[1], ...facets.colFacets[1]]\n ];\n const geomCell = !exitCellMap.has(geomCellKey) ? new GeomCell() : exitCellMap.get(geomCellKey);\n\n geomCell.data(datamodel)\n .axes(groupAxes)\n .fields(fields)\n .transform(datamodelTransform)\n .detailFields(detailFields)\n .facetByFields(allFacets);\n entryCellMap.set(geomCellKey, geomCell);\n exitCellMap.delete(geomCellKey);\n\n updateCells(resolver, facets, geomCell);\n\n return entryCellMap.get(geomCellKey);\n};\n\n/**\n * Creates axis cells based on the set of axes\n *\n * @param {Selection} selection Contains a selection of the axis units\n * @param {Array} axes Actual axis units\n * @param {number} axisIndex 0-> primary axis, 1-> secondary axis(when dual axis is made)\n * @param {Object} cells Contains a collection of the cells\n * @return {Object} return either set of axis/blank cells depending on the config\n */\n\nconst createAxisCells = (selection, axes, axisIndex, cells) =>\n createSelection(selection, axis => axis, axes, (item, i) => i + item.reduce((e, n) => {\n const id = n.id + axisIndex;\n return e + id;\n }, '')).map((axis) => {\n if (axis && axis[axisIndex]) {\n const axisInst = axis[axisIndex];\n const { orientation, show } = axisInst.config();\n\n return new cells.AxisCell().source(axisInst).config({\n isOffset: orientation === AxisOrientation.LEFT || orientation === AxisOrientation.TOP,\n show\n });\n }\n return new cells.BlankCell();\n });\n\n/**\n *\n *\n * @param {*} context\n * @param {*} selectionObj\n * @param {*} cells\n * @retur\n */\nconst axisPlaceholderGn = (context, selObj, cells) => {\n const {\n matrices\n } = context;\n const {\n axesMatrix\n } = matrices;\n\n return (type, axisFrom) => {\n const axes = axesMatrix[`${type}`];\n\n if (axes && axes.length) {\n if (type === X || type === Y) {\n const fieldNames = type === Y ? ROWS : COLUMNS;\n\n [PRIMARY, SECONDARY].forEach((fieldType, index) => {\n const selObjProp = `${fieldNames}${fieldType}`;\n let axisIndex = index;\n let axesForDraw = axes;\n if (axisFrom === RIGHT || axisFrom === BOTTOM) {\n axisIndex = 1 - axisIndex;\n }\n if (!getObjProp(axes, 0, axisIndex)) {\n axesForDraw = [];\n }\n selObj[selObjProp] = createAxisCells(selObj[selObjProp], axesForDraw, axisIndex, cells);\n });\n } else {\n selObj.rowsPrimary = createAxisCells(selObj.rowPrime, axes.map(() => []), 0, cells);\n selObj.columnsPrimary = createAxisCells(selObj.colPrime, axes[0], 0, cells);\n }\n }\n return selObj;\n };\n};\n\n/**\n * Creates header cells based on the set of headers\n *\n * @param {Object} selection Contains a selection of the header units\n * @param {string} headers Contains a list of the headers\n * @param {Object} cells Contains a collection of the cells\n * @param {Object} labelManager smart label instance\n * @return {Object} return either set of header cells depending on the config\n */\nconst createTextCells = (selection, headers, cells, labelManager) => createSelection(selection,\n label => new cells.TextCell({}, { labelManager }).source(label), headers, (key, i) => key + i);\n\n/**\n *\n *\n * @param {*} context\n * @param {*} selectionObj\n * @param {*} cells\n * @param {*} labelManager\n * @return\n */\nconst headerPlaceholderGn = (context, selectionObj, cells, labelManager) => {\n const {\n axis,\n keys,\n type,\n facetConfig\n } = context;\n const counter = axis.length / keys.length;\n const selectionKeys = keys.length ? axis.map((d, i) => keys[Math.floor(i / counter)]) : [];\n return createSelection(selectionObj[`${type}Headers`], keySet => keySet, selectionKeys, (keySet, i) =>\n `${keySet.join(',')}-${i}`).map(keySet => createTextCells(null, keySet, cells, labelManager)\n .map((cell, k, i) => cell.source(keySet[i]).config(facetConfig || {})));\n};\n\n/**\n * Creates a set of placeholders as a part of selection object\n *\n * @param {Array} normalizedOptions contains normalized rows and columns\n * @param {Array} matrices contains axis and value matrices\n * @param {aArrayny} projections contains set of row and column projections\n * @param {Object} cells Contains a collection of the cells\n * @param {Object} labelManager smart label instance\n * @return {Object} Creates a set of placeholders as a part of selections\n */\nconst generatePlaceholders = (context, cells, labelManager) => {\n let selectionObj;\n const {\n matrices,\n fields,\n facetsAndProjections,\n selection,\n facetConfig,\n encoders\n } = context;\n const {\n rows,\n columns\n } = fields;\n const {\n valuesMatrix\n } = matrices;\n const {\n rowProjections,\n colProjections\n } = facetsAndProjections;\n const {\n rowKeys,\n columnKeys\n } = valuesMatrix;\n const takeAxisFrom = encoders.simpleEncoder._axisFrom;\n const takeHeaderFrom = encoders.simpleEncoder._headerFrom;\n\n selectionObj = selection || {};\n\n ['pie', X, Y].forEach((axis) => {\n const axisFrom = axis === X ? takeAxisFrom.column : takeAxisFrom.row;\n selectionObj = axisPlaceholderGn(context, selectionObj, cells)(axis, axisFrom);\n });\n\n const {\n rowsPrimary,\n rowsSecondary,\n columnsPrimary,\n columnsSecondary\n } = selectionObj;\n\n const rowAxis = rowsPrimary && rowsPrimary.getObjects().length ? rowsPrimary.getObjects() :\n (rowsSecondary && rowsSecondary.getObjects().length ? rowsSecondary.getObjects() : []);\n const colAxis = columnsPrimary && columnsPrimary.getObjects().length ? columnsPrimary.getObjects() :\n (columnsSecondary && columnsSecondary.getObjects().length ? columnsSecondary.getObjects() : []);\n\n const headerConfig = [\n { type: LEFT, section: rows[0], axis: rowAxis, headerFrom: takeHeaderFrom.row },\n { type: RIGHT, section: rows[1], axis: rowAxis, headerFrom: takeHeaderFrom.row },\n { type: TOP, section: columns[0], axis: colAxis, headerFrom: takeHeaderFrom.column },\n { type: BOTTOM, section: columns[1], axis: colAxis, headerFrom: takeHeaderFrom.column }\n ];\n\n headerConfig.forEach((config, index) => {\n let keys;\n let length;\n const {\n type,\n section,\n axis,\n headerFrom\n } = config;\n\n if (index < 2) {\n keys = rowKeys;\n length = rowProjections.length > 0 ? rowProjections.length : 1;\n } else {\n keys = columnKeys;\n length = colProjections.length > 0 ? colProjections.length : 1;\n }\n\n if (section.length && headerFrom === type && axis && keys.length) {\n const hContext = { axis, length, type };\n let headers = [];\n if (index < 2) {\n hContext.keys = keys;\n hContext.facetConfig = facetConfig.rows;\n headers = headerPlaceholderGn(hContext, selectionObj, cells, labelManager);\n } else {\n hContext.facetConfig = facetConfig.columns;\n hContext.keys = keys[0].map((key, i) => keys.map(e => e[i]));\n headers = headerPlaceholderGn(hContext, selectionObj, cells, labelManager);\n }\n selectionObj[`${type}Headers`] = headers;\n } else {\n selectionObj[`${type}Headers`] = null;\n }\n });\n return selectionObj;\n};\n\n/**\n * Generates matrices\n *\n * @param {Object} config Configuration to generate matrices\n * @param {Array} matrices Matrices containing the set of visual units and axes units\n * @param {Object} cells Contains a collection of the cells\n * @param {Object} labelManager smart label instance\n * @return {Object} contains a collection of matrices\n */\nexport const generateMatrices = (context, matrices, cells, labelManager) => {\n const {\n unitHeight,\n unitWidth,\n facetsAndProjections,\n normalizedRows,\n normalizedColumns,\n selection,\n axisFrom,\n facetConfig,\n encoders\n } = context;\n const placeholderContext = {\n fields: {\n rows: normalizedRows,\n columns: normalizedColumns\n },\n matrices,\n facetsAndProjections,\n selection,\n axisFrom,\n facetConfig,\n encoders\n };\n // Generate placeholders for all matrices\n const selectionObj = generatePlaceholders(placeholderContext, cells, labelManager);\n const {\n columnsPrimary,\n columnsSecondary,\n rowsPrimary,\n rowsSecondary,\n leftHeaders,\n topHeaders,\n bottomHeaders,\n rightHeaders\n } = selectionObj;\n const [rowPrime, rowSec, colPrime, colSec] = [rowsPrimary, rowsSecondary, columnsPrimary, columnsSecondary]\n .map(d => (d ? d.getObjects() : []));\n const [leftFacets, rightFacets] = [leftHeaders, rightHeaders].map(e => (e ? e.getObjects()\n .map(f => f.getObjects()) : []));\n\n // Compute left matrix using left headers and the axes on the rows\n let leftMatrix = leftFacets.length ? leftFacets.map((d, i) => {\n rowPrime[i] = rowPrime[i] ? [rowPrime[i]] : [];\n return [...d, ...rowPrime[i]];\n }) : (rowPrime ? rowPrime.map(d => [d]) : []);\n\n // Compute right matrix using right headers and the axes on the rows\n const rightMatrix = rowSec.length ? rowSec.map((d, i) => [d, ...(rightFacets[i] || [])]) : (rightFacets.length ?\n rightFacets.map(d => [...d]) : []);\n\n const topMatrix = [];\n if (topHeaders) {\n const headers = topHeaders.getObjects();\n headers.forEach((e) => {\n const innerHeaders = e.getObjects();\n innerHeaders.forEach((x, i) => {\n topMatrix[i] = topMatrix[i] || [];\n topMatrix[i].push(x);\n });\n });\n }\n // Compute top matrix using the top headers and axes on the columns\n if (colPrime.length) {\n topMatrix.push(colPrime);\n }\n\n // Bottom and right matrices are prepared using the user config.\n let bottomMatrix = [];\n if (colSec.length) {\n bottomMatrix.push(colSec);\n }\n const currentBottomLength = bottomMatrix.length;\n if (bottomHeaders) {\n const headers = bottomHeaders.getObjects();\n headers.forEach((e) => {\n const innerHeaders = e.getObjects();\n innerHeaders.forEach((x, i) => {\n bottomMatrix[i + currentBottomLength] = bottomMatrix[i + currentBottomLength] || [];\n bottomMatrix[i + currentBottomLength].push(x);\n });\n });\n }\n\n if (!leftMatrix.length && !rightMatrix.length) {\n const cell = new cells.BlankCell();\n cell.setAvailableSpace(unitWidth, unitHeight);\n leftMatrix = [[cell]];\n }\n\n if (!topMatrix.length && (!bottomMatrix.length || !bottomMatrix[0].length)) {\n const cell = new cells.BlankCell();\n cell.setAvailableSpace(unitWidth, unitHeight);\n bottomMatrix = [[cell]];\n }\n\n return {\n rows: [leftMatrix, rightMatrix],\n columns: [topMatrix, bottomMatrix],\n selectionObj\n };\n};\n\n/**\n * Computes matrices for a group\n *\n * @param {Object} datamodel on which the matrices are to be computed\n * @param {Object} config configuration of the matrices\n * @param {Object} layerRegistry contains the registered layers\n * @return {Object} conputed matrices\n * @memberof MatrixResolver\n */\nexport const computeMatrices = (context, config) => {\n const {\n resolver,\n datamodel,\n componentRegistry,\n encoders\n } = context;\n const {\n globalConfig,\n selection,\n transform\n } = config;\n const groupBy = globalConfig.autoGroupBy;\n const { smartlabel: labelManager } = resolver.dependencies();\n const fieldMap = datamodel.getFieldsConfig();\n const layerConfig = resolver.layerConfig();\n const registry = resolver.registry();\n const { fields: normalizedRows } = resolver.horizontalAxis();\n const { fields: normalizedColumns } = resolver.verticalAxis();\n const otherEncodings = resolver.optionalProjections(config, layerConfig);\n const facetsAndProjections = resolver.getAllFields();\n const matrixGnContext = {\n // Configuration to be passed to generate the different matrices.\n // A common config is used for both value matrices and other matrices\n normalizedColumns,\n normalizedRows,\n facetsAndProjections,\n layers: layerConfig,\n fieldMap,\n otherEncodings,\n encoders,\n facetConfig: globalConfig.facetConfig || {},\n axisFrom: globalConfig.axisFrom || {},\n selection\n };\n const cells = {\n GeomCell: resolver.getCellDef(registry.GeomCell),\n AxisCell: resolver.getCellDef(registry.AxisCell),\n BlankCell: resolver.getCellDef(registry.BlankCell),\n TextCell: resolver.getCellDef(registry.TextCell)\n };\n const isRowSizeEqual = isDistributionEqual(normalizedRows);\n const isColumnSizeEqual = isDistributionEqual(normalizedColumns);\n\n resolver.colCells({});\n resolver.rowCells({});\n resolver.datamodelTransform(transform || {});\n\n // Cell creation begins here\n resolver.resetSimpleAxes();\n\n const {\n entryCellMap\n } = resolver.cacheMaps();\n const newCacheMap = {\n exitCellMap: entryCellMap,\n entryCellMap: new Map()\n };\n\n resolver.cacheMaps(newCacheMap);\n\n const valueCellContext = {\n config: globalConfig,\n suppliedLayers: encoders.simpleEncoder.serializeLayerConfig(resolver.layerConfig()),\n resolver,\n cell: cells.GeomCell,\n encoder: encoders.simpleEncoder,\n newCacheMap,\n detailFields: config.detail\n };\n const fieldsConfig = datamodel.getFieldsConfig();\n let groupedModel = datamodel;\n if (!groupBy.disabled) {\n const fields = getFieldsFromSuppliedLayers(valueCellContext.suppliedLayers, datamodel.getFieldsConfig());\n const allFields = extractFields(facetsAndProjections, fields);\n\n const dimensions = allFields.filter(field =>\n fieldsConfig[field] && fieldsConfig[field].def.type === FieldType.DIMENSION);\n const aggregationFns = groupBy.measures;\n\n groupedModel = datamodel.groupBy(dimensions.length ? dimensions : [''], aggregationFns).project(allFields);\n }\n\n // return a callback function to create the cells from the matrix\n const cellCreator = resolver.valueCellsCreator(valueCellContext);\n // Creates value matrices from the datamodel and configs\n const valueMatrixInfo = getMatrixModel(groupedModel, facetsAndProjections, cellCreator);\n\n resolver.cacheMaps().exitCellMap.forEach((placeholder) => {\n placeholder.remove();\n });\n resolver.cacheMaps().exitCellMap.clear();\n resolver.valueMatrix(valueMatrixInfo.matrix);\n resolver.createUnits(componentRegistry, config);\n\n const { xAxes, yAxes } = mutateAxesFromMap(resolver.cacheMaps(), resolver.axes());\n\n resolver.axes({\n x: xAxes,\n y: yAxes\n });\n\n const matrices = {\n valuesMatrix: valueMatrixInfo,\n axesMatrix: resolver.axes()\n };\n // Create all matrices\n const { rows, columns, selectionObj } = generateMatrices(matrixGnContext, matrices, cells, labelManager);\n\n resolver.rowMatrix(rows);\n resolver.columnMatrix(columns);\n\n return {\n rows: resolver.rowMatrix(),\n columns: resolver.columnMatrix(),\n values: resolver.valueMatrix(),\n isColumnSizeEqual,\n isRowSizeEqual,\n selection: selectionObj,\n dataModels: {\n groupedModel,\n parentModel: datamodel\n }\n };\n};\n","import { VisualUnit } from '@chartshq/visual-unit';\nimport {\n initializeCacheMaps,\n headerCreator,\n extractUnitConfig,\n setFacetsAndProjections\n} from './group-utils';\nimport {\n ROW, COL, LEFT, RIGHT, COLOR, SIZE, SHAPE, DETAIL, CELL, X_AXES, Y_AXES, ENTRY_CELLS, EXIT_CELLS, INITIALIZED,\n AXIS, UNIT, BEFORE_UPDATE, UPDATED, VALUE_MATRIX, FACET_HEADERS\n} from '../enums/constants';\nimport { createValueCells, computeMatrices } from './cell-creator';\n/**\n * Resolves the matrices from configuration provided\n *\n * @export\n * @class MatrixResolver\n */\nexport default class MatrixResolver {\n\n /**\n * Creates an instance of MatrixResolver.\n * @param {Object} dependencies needed to run the resolver\n * @memberof MatrixResolver\n */\n constructor (dependencies) {\n this._registry = {};\n this._layerConfig = [];\n this._matrixLayers = [];\n this._dependencies = dependencies;\n this._rowMatrix = [];\n this._columnMatrix = [];\n this._valueMatrix = [];\n this._facets = {};\n this._projections = {};\n this._datamodelTransform = {};\n this._units = [];\n this._cacheMaps = {};\n this._axes = {\n x: {},\n y: {},\n color: [],\n size: [],\n shape: []\n };\n\n this.cacheMaps(initializeCacheMaps());\n }\n\n /**\n * Set: Registers placeholders, Get: return {Object} those placeholders\n *\n * @param {Object} placeholders cells that will construct the group\n * @return {Object} Either current instance or the set of placeholders\n * @memberof MatrixResolver\n */\n registry (...placeholders) {\n if (placeholders.length) {\n Object.entries(placeholders[0]).forEach((val) => {\n this._registry[val[0]] = val[1];\n });\n return this;\n }\n return this._registry;\n }\n\n /**\n * Used to set the layer config from outside or get current layer info\n *\n * @param {Object} type configuration of layer provided externally\n * @return {Object} either the layer or current instance\n * @memberof MatrixResolver\n */\n dependencies (...dep) {\n if (dep.length) {\n this._dependencies = dep[0];\n return this;\n }\n return this._dependencies;\n }\n\n /**\n * Used to set the layer config from outside or get current layer info\n *\n * @param {Object} type configuration of layer provided externally\n * @return {Object} either the layer or current instance\n * @memberof MatrixResolver\n */\n units (...unitArr) {\n if (unitArr.length) {\n this._units = unitArr[0];\n return this;\n }\n return this._units;\n }\n\n /**\n * Used to set the layer config from outside or get current layer info\n *\n * @param {Object} layer configuration of layer provided externally\n * @return {Object} either the layer or current instance\n * @memberof MatrixResolver\n */\n layerConfig (...config) {\n if (config.length) {\n this._layerConfig = config[0];\n return this;\n }\n return this._layerConfig;\n }\n\n /**\n * Used to set the layer config from outside or get current layer info\n *\n * @param {Object} type configuration of layer provided externally\n * @return {Object} either the layer or current instance\n * @memberof MatrixResolver\n */\n matrixLayers (...layers) {\n if (layers.length) {\n this._matrixLayers = layers[0];\n return this;\n }\n return this._matrixLayers;\n }\n\n /**\n * Used to set the layer config from outside or get current layer info\n *\n * @param {Object} type configuration of layer provided externally\n * @return {Object} either the layer or current instance\n * @memberof MatrixResolver\n */\n datamodelTransform (...transform) {\n if (transform.length) {\n this._datamodelTransform = transform[0];\n return this;\n }\n return this._datamodelTransform;\n }\n\n /**\n * Used to set the layer config from outside or get current layer info\n *\n * @param {Object} type configuration of layer provided externally\n * @return {Object} either the layer or current instance\n * @memberof MatrixResolver\n */\n cacheMaps (...maps) {\n if (maps.length) {\n [CELL, X_AXES, Y_AXES, ENTRY_CELLS, EXIT_CELLS].forEach((e) => {\n this._cacheMaps[`${e}Map`] = maps[0][`${e}Map`] || this._cacheMaps[`${e}Map`];\n });\n return this;\n }\n return this._cacheMaps;\n }\n\n /**\n * Used to set the layer config from outside or get current layer info\n *\n * @param {Object} type configuration of layer provided externally\n * @return {Object} either the layer or current instance\n * @memberof MatrixResolver\n */\n rowCells (...cells) {\n if (cells.length) {\n this._rowCells = cells[0];\n return this;\n }\n return this._rowCells;\n }\n\n /**\n * Used to set the layer config from outside or get current layer info\n *\n * @param {Object} type configuration of layer provided externally\n * @return {Object} either the layer or current instance\n * @memberof MatrixResolver\n */\n colCells (...cells) {\n if (cells.length) {\n this._colCells = cells[0];\n return this;\n }\n return this._colCells;\n }\n\n /**\n * Used to set the layer config from outside or get current layer info\n *\n * @param {Object} type configuration of layer provided externally\n * @return {Object} either the layer or current instance\n * @memberof MatrixResolver\n */\n axes (...axes) {\n if (axes.length) {\n this._axes = Object.assign({}, this._axes, axes[0]);\n return this;\n }\n return this._axes;\n }\n\n /**\n * Used to set the layer config from outside or get current layer info\n *\n * @param {Object} type configuration of layer provided externally\n * @return {Object} either the layer or current instance\n * @memberof MatrixResolver\n */\n rowMatrix (...rowMat) {\n if (rowMat.length) {\n this._rowMatrix = rowMat[0];\n return this;\n }\n return this._rowMatrix;\n }\n\n /**\n * Used to set the layer config from outside or get current layer info\n *\n * @param {Object} type configuration of layer provided externally\n * @return {Object} either the layer or current instance\n * @memberof MatrixResolver\n */\n columnMatrix (...colMat) {\n if (colMat.length) {\n this._columnMatrix = colMat[0];\n return this;\n }\n return this._columnMatrix;\n }\n\n /**\n * Used to set the layer config from outside or get current layer info\n *\n * @param {Object} type configuration of layer provided externally\n * @return {Object} either the layer or current instance\n * @memberof MatrixResolver\n */\n valueMatrix (...valMat) {\n if (valMat.length) {\n this._valueMatrix = valMat[0];\n return this;\n }\n return this._valueMatrix;\n }\n\n /**\n *\n *\n * @param {*} facets\n * @return\n * @memberof MatrixResolver\n */\n facets (...facets) {\n if (facets.length) {\n Object.entries(facets[0]).forEach((e) => {\n this._facets[e[0]] = e[1];\n });\n return this;\n }\n return this._facets;\n }\n\n /**\n *\n *\n * @param {*} projections\n * @return\n * @memberof MatrixResolver\n */\n projections (...projections) {\n if (projections.length) {\n Object.entries(projections[0]).forEach((e) => {\n this._projections[e[0]] = e[1];\n });\n return this;\n }\n return this._projections;\n }\n\n /**\n *\n *\n * @param {*} config\n * @param {*} layerConfig\n * @return\n * @memberof MatrixResolver\n */\n optionalProjections (config, layerConfig) {\n const otherEncodings = {};\n const optionalProjections = [];\n const otherEncodingTypes = [SIZE, COLOR, SHAPE];\n\n otherEncodingTypes.forEach((type) => {\n if (config[type] && config[type].field) {\n const enc = config[type];\n otherEncodings[type] = enc.field;\n optionalProjections.push(enc.field);\n }\n });\n\n if (config[DETAIL]) {\n optionalProjections.push(...config.detail);\n }\n\n if (layerConfig.length) {\n layerConfig.forEach((layer) => {\n if (layer.encoding) {\n Object.values(layer.encoding).forEach((enc) => {\n if (enc && optionalProjections.indexOf(enc.field) === -1) {\n optionalProjections.push(enc.field ? enc.field : enc);\n }\n });\n }\n });\n }\n this.projections({ optionalProjections });\n return otherEncodings;\n }\n\n /**\n * return the normalized set of rows and facets and projections\n *\n * @param {Object} rows parameters needed to set horizontal axis consisiting of rows\n * @return {Object} facets, projections and normalized rows\n * @memberof MatrixResolver\n */\n horizontalAxis (rows, encoder) {\n if (rows) {\n this._horizontalAxis = setFacetsAndProjections(this, { type: ROW, fields: rows }, encoder);\n return this;\n }\n return this._horizontalAxis;\n }\n\n /**\n * return the normalized set of columns and facets and projections\n *\n * @param {Object} columns parameters needed to set vertical axis consisiting of columns\n * @return {Object} facets, projections and normalized columns\n * @memberof MatrixResolver\n */\n verticalAxis (columns, encoder) {\n if (columns) {\n this._verticalAxis = setFacetsAndProjections(this, { type: COL, fields: columns }, encoder);\n return this;\n }\n return this._verticalAxis;\n }\n\n /**\n * Gets the class definition of a particular cell type(if the particular type has been extended, that particular\n * definition is returned)\n *\n * @param {Object} cell cell whose class definition is to be retrieved\n * @return {Object} cell definition\n * @memberof MatrixResolver\n */\n getCellDef (cell) {\n const registry = this.registry();\n\n Object.values(registry).forEach((e) => {\n if (e.prototype instanceof cell) {\n cell = e;\n }\n });\n return cell;\n }\n\n /**\n * return a visual cell creator along with its axis information to be injected to the datamodel creation\n * function\n *\n * @param {Object} GeomCell Type of cell to be created\n * @return {Object} Created cell\n * @memberof MatrixResolver\n */\n valueCellsCreator (context) {\n // reset matrix layers\n this.matrixLayers([]);\n\n return (datamodel, fieldInfo, facets) => createValueCells(context, datamodel, fieldInfo, facets);\n }\n\n /**\n * Callback to be applied on each cell of a matrix of a particular type\n *\n * @param {string} matrixType type of matrix on which callback is to be applied\n * @param {Function} callback function to be applied to each cell\n * @memberof MatrixResolver\n */\n forEach (matrixType, callback) {\n this[matrixType]().forEach((row, rIndex) => {\n row.forEach((col, cIndex) => {\n callback(rIndex, cIndex, col);\n });\n });\n }\n\n /**\n *\n *\n * @return\n * @memberof MatrixResolver\n */\n getAllFields () {\n const retObj = this.projections();\n\n Object.entries(this.facets()).forEach((e) => {\n retObj[e[0]] = e[1];\n });\n return retObj;\n }\n\n /**\n *\n *\n * @memberof MatrixResolver\n */\n resetSimpleAxes () {\n return this.axes({\n x: new Set(),\n y: new Set()\n });\n }\n\n /**\n *\n *\n * @param {*} componentRegistry\n * @param {*} config\n * @memberof MatrixResolver\n */\n createUnits (componentRegistry, config) {\n const {\n globalConfig,\n alias\n } = config;\n const {\n layerRegistry,\n sideEffectRegistry\n } = componentRegistry;\n const {\n smartlabel: smartLabel,\n lifeCycleManager\n } = this.dependencies();\n // Provide the source for the matrix\n const units = [];\n // Setting unit configuration\n const unitConfig = extractUnitConfig(globalConfig || {});\n\n this.forEach(VALUE_MATRIX, (i, j, el) => {\n let unit = el.source();\n if (!unit) {\n unit = VisualUnit.create({\n layerRegistry,\n sideEffectRegistry\n }, {\n smartLabel,\n lifeCycleManager\n });\n el.source(unit);\n units.push(unit);\n }\n unit.parentAlias(alias);\n el.config(unitConfig);\n });\n\n lifeCycleManager.notify({ client: units, action: INITIALIZED, formalName: UNIT });\n return this.units(units);\n }\n\n /**\n *\n *\n * @param {*} config\n * @memberof MatrixResolver\n */\n setDomains (config, datamodel, encoders) {\n const {\n color,\n shape,\n size,\n globalConfig\n } = config;\n const groupBy = globalConfig.autoGroupBy;\n const {\n rowFacets,\n colFacets\n } = this.getAllFields();\n const encoding = {\n color,\n shape,\n size\n };\n const facetFields = [...rowFacets.map(e => e.toString()), ...colFacets.map(e => e.toString())];\n const retContext = {\n domains: encoders.simpleEncoder.getRetinalFieldsDomain(datamodel, encoding, facetFields, groupBy),\n axes: this.axes(),\n encoding\n };\n encoders.retinalEncoder.setCommonDomain(retContext);\n return this;\n }\n\n /**\n *\n *\n * @return\n * @memberof MatrixResolver\n */\n getRetinalAxes () {\n const {\n color,\n shape,\n size\n } = this.axes();\n\n return {\n color: [...color],\n shape: [...shape],\n size: [...size]\n };\n }\n\n /**\n *\n *\n * @param {*} type\n * @return\n * @memberof MatrixResolver\n */\n getSimpleAxes (type) {\n return this.axes()[`${type}`];\n }\n\n /**\n *\n *\n * @param {*} datamodel\n * @param {*} config\n * @memberof MatrixResolver\n */\n createRetinalAxes (fieldsConfig, config, encoders) {\n const layerConfig = this.layerConfig();\n this.optionalProjections(config, layerConfig);\n const retinalAxes = encoders.retinalEncoder.createAxis({\n fieldsConfig,\n config,\n axes: this.axes()\n });\n const {\n lifeCycleManager\n } = this.dependencies();\n\n [COLOR, SHAPE, SIZE].forEach((e) => {\n this.axes()[e] = retinalAxes[e];\n });\n\n lifeCycleManager.notify({ client: this.axes(), action: INITIALIZED, formalName: AXIS });\n lifeCycleManager.notify({ client: this.units(), action: BEFORE_UPDATE, formalName: UNIT });\n\n const units = [];\n const matrixLayers = this.matrixLayers();\n\n this.forEach(VALUE_MATRIX, (i, j, el) => {\n el.axes(retinalAxes);\n el.source() && el.source().retinalFields(config);\n el.layerDef(encoders.retinalEncoder.getLayerConfig(config, matrixLayers[i][j]));\n el.updateModel();\n\n units.push(el.source());\n });\n\n lifeCycleManager.notify({ client: units, action: UPDATED, formalName: UNIT });\n return this;\n }\n\n /**\n *\n *\n * @param {*} placeholders\n * @param {*} fieldNames\n * @return\n * @memberof MatrixResolver\n */\n createHeaders (placeholders, fieldNames, config) {\n let bottomLeft = [];\n let bottomRight = [];\n const {\n rows,\n columns\n } = placeholders;\n const {\n smartlabel: labelManager,\n lifeCycleManager\n } = this.dependencies();\n const TextCell = this.getCellDef(this.registry().TextCell);\n const BlankCell = this.getCellDef(this.registry().BlankCell);\n const [leftRows, rightRows] = rows;\n const [topCols, bottomCols] = columns;\n const rowHeaders = fieldNames.rows;\n const blankCellCreator = cell => new BlankCell().config({ show: cell.config().show });\n\n // Headers and footers are created based on the rows. Thereafter, using the column information\n // they are tabularized into the current structure\n const headers = {\n left: headerCreator(leftRows, rowHeaders[0], config.showHeaders ? TextCell : BlankCell, labelManager),\n right: headerCreator(rightRows, rowHeaders[1], config.showHeaders ? TextCell : BlankCell, labelManager)\n };\n const footers = {\n left: leftRows.length > 0 ? leftRows[0].map(blankCellCreator) : [],\n right: rightRows.length > 0 ? rightRows[0].map(blankCellCreator) : []\n };\n const [topLeft, topRight] = [LEFT, RIGHT].map(type => topCols.map((col, i) => {\n if (i === topCols.length - 1) {\n return headers[type];\n }\n return footers[type];\n }));\n\n // Creating only bottom matrices if there is no information on the top\n if (topCols.length === 0) {\n [bottomLeft, bottomRight] = [LEFT, RIGHT].map(type => bottomCols.map((col, i) => {\n if (i === 0) {\n return headers[type];\n }\n return footers[type];\n }));\n } else {\n bottomLeft = bottomCols.map(() => (leftRows.length > 0 ? leftRows[0].map(blankCellCreator) : []));\n bottomRight = bottomCols.map(() => (rightRows.length > 0 ? rightRows[0].map(blankCellCreator) : []));\n }\n\n lifeCycleManager.notify({\n client: [topLeft, topRight, bottomLeft, bottomRight],\n action: INITIALIZED,\n formalName: FACET_HEADERS\n });\n\n return { topLeft, topRight, bottomLeft, bottomRight };\n }\n\n /**\n *\n *\n * @param {*} datamodel\n * @param {*} config\n * @param {*} componentRegistry\n * @param {*} encoders\n * @return\n * @memberof MatrixResolver\n */\n getMatrices (datamodel, config, componentRegistry, encoders) {\n const context = {\n datamodel,\n componentRegistry,\n encoders,\n resolver: this\n };\n\n return computeMatrices(context, config);\n }\n}\n","/**\n *\n *\n * @export\n * @class ValueMatrix\n */\nclass ValueMatrix {\n\n /**\n *Creates an instance of ValueMatrix.\n * @param {*} matrixArr\n * @memberof ValueMatrix\n */\n constructor (matrixArr) {\n const instancesById = {};\n\n this.matrix(matrixArr);\n this.filter(() => true);\n\n this.each((el, rIdx, cIdx) => {\n const cellValue = el.valueOf();\n if (cellValue && cellValue.id) {\n const id = cellValue.id();\n instancesById[id] = {\n instance: cellValue,\n rowIndex: rIdx,\n colIndex: cIdx\n };\n }\n });\n\n this.instancesById(instancesById);\n }\n\n /**\n *\n *\n * @param {*} id\n * @return\n * @memberof ValueMatrix\n */\n instancesById (...id) {\n if (id.length) {\n this._instancesById = id[0];\n return this;\n }\n return this._instancesById;\n }\n\n /**\n *\n *\n * @param {*} m\n * @return\n * @memberof ValueMatrix\n */\n matrix (...matrix) {\n if (matrix.length) {\n this._matrix = matrix[0];\n return this;\n }\n return this._matrix;\n }\n\n /**\n *\n *\n * @param {*} fn\n * @return\n * @memberof ValueMatrix\n */\n filter (...fn) {\n if (fn.length) {\n this._filterFn = fn[0];\n return this;\n }\n return this._filterFn;\n }\n\n /**\n *\n *\n * @return\n * @memberof ValueMatrix\n */\n width () {\n let rowWidth = 0;\n\n this.matrix().forEach((row) => {\n let currentRowWidth = 0;\n row.forEach((cell) => {\n currentRowWidth += cell.getLogicalSpace().width;\n });\n rowWidth = Math.max(rowWidth, currentRowWidth);\n });\n return rowWidth;\n }\n\n /**\n *\n *\n * @return\n * @memberof ValueMatrix\n */\n height () {\n let rowHeight = 0;\n\n this.matrix().forEach((row) => {\n let currentRowHeight = 0;\n row.forEach((cell) => {\n currentRowHeight = Math.max(currentRowHeight, cell.getLogicalSpace().height);\n });\n rowHeight += currentRowHeight;\n });\n return rowHeight;\n }\n\n /**\n *\n *\n * @param {*} fn\n * @return\n * @memberof ValueMatrix\n */\n each (fn) {\n const matrix = this.matrix();\n const filterFn = this.filter();\n\n matrix.forEach((row, rIndex) => {\n row.forEach((col, cIndex) => {\n if (filterFn(col)) {\n fn(col, rIndex, cIndex, matrix);\n }\n });\n });\n return this;\n }\n\n /**\n *\n *\n * @param {*} id\n * @return\n * @memberof ValueMatrix\n */\n findPlaceHolderById (id) {\n return this.instancesById()[id];\n }\n\n /**\n *\n *\n * @return\n * @memberof ValueMatrix\n */\n getMatrixArray () {\n return this.matrix();\n }\n}\n\nexport default ValueMatrix;\n","import { RetinalEncoder } from '../encoder';\nimport { DATA_UPDATE_COUNTER } from '../enums/defaults';\nimport { getEncoder, getBorders } from '../group-helper';\nimport ValueMatrix from './value-matrix';\nimport localOptions from './local-options';\n\nconst sanitizeRetinalConfig = (retinalConf) => {\n const conf = {};\n for (const key in retinalConf) {\n const confValue = retinalConf[key];\n if (typeof confValue === 'string' || !confValue) {\n conf[key] = {\n field: retinalConf[key]\n };\n } else {\n conf[key] = confValue;\n }\n }\n return conf;\n};\n\n/**\n *\n *\n * @param {*} placeholder\n * @memberof VisualGroup\n */\nconst setMatrixInstances = (context, placeholder) => {\n context._composition.matrices = {\n value: new ValueMatrix(placeholder.values),\n left: new ValueMatrix(placeholder.rows[0]),\n right: new ValueMatrix(placeholder.rows[1]),\n top: new ValueMatrix(placeholder.columns[0]),\n bottom: new ValueMatrix(placeholder.columns[1])\n };\n return context;\n};\n\n/**\n *\n *\n * @param {*} context\n * @returns\n */\nexport const setupChangeListeners = (context) => {\n context.store().registerImmediateListener([...Object.keys(localOptions), DATA_UPDATE_COUNTER], (...params) => {\n const datamodel = context.data();\n const [config, rows, columns, color, shape, size, detail, layers, transform] = params;\n\n if (datamodel && rows[1] && columns[1]) {\n // Get the resolver for the matrices\n const resolver = context.resolver();\n // Prepare configuration for matrix preparation\n let matrixConfig = {\n selection: context.selection(),\n alias: context.alias(),\n globalConfig: config[1] || {},\n rows: rows[1],\n columns: columns[1],\n detail: detail[1],\n layers: layers[1],\n transform: transform[1]\n };\n\n const retinalConfig = sanitizeRetinalConfig({\n color: color[1],\n shape: shape[1],\n size: size[1]\n });\n\n matrixConfig = Object.assign(matrixConfig, retinalConfig);\n // Create the encoders for the group\n const encoders = {};\n encoders.retinalEncoder = new RetinalEncoder();\n encoders.simpleEncoder = getEncoder(layers[1]);\n\n // Set the group type\n context.groupType(encoders.simpleEncoder.constructor.type());\n\n // Get sanitized fields as instances of the Vars Class\n const fields = encoders.simpleEncoder.fieldSanitizer(datamodel, matrixConfig);\n encoders.simpleEncoder.setAxisAndHeaders(config[1] ? config[1].axisFrom : {}, fields);\n // Setting layers for the code\n layers[1] && resolver.layerConfig(layers[1]);\n // Set the row and column axes\n resolver.horizontalAxis(fields.rows, encoders).verticalAxis(fields.columns, encoders);\n // Getting the placeholders\n const placeholderInfo = resolver.getMatrices(datamodel, matrixConfig, context.registry(), encoders);\n context._groupedDataModel = placeholderInfo.dataModels.groupedModel;\n // Set the selection object\n context.selection(placeholderInfo.selection);\n\n // Create retinal axes\n resolver.createRetinalAxes(placeholderInfo.dataModels.parentModel.getFieldsConfig(), retinalConfig,\n encoders);\n\n // Domains are evaluated for each of the axes for commonality\n resolver.setDomains(matrixConfig, placeholderInfo.dataModels, encoders);\n\n // Create matrix instances\n setMatrixInstances(context, placeholderInfo);\n\n // Prepare corner matrices\n context.cornerMatrices(resolver.createHeaders(placeholderInfo, fields, config[1]));\n\n // Set placeholder information\n context.placeholderInfo(placeholderInfo);\n\n context._composition.axes = resolver.axes();\n context.metaData({\n border: getBorders(placeholderInfo, encoders.simpleEncoder)\n });\n }\n return context;\n });\n return context;\n};\n","import { DATA_UPDATE_COUNTER } from '../enums/defaults';\n\nexport const PROPS = {\n alias: {},\n data: {\n sanitization: (context, value) => {\n if (context._data !== value) {\n const store = context.store();\n let hasDataUpdated = store.get(DATA_UPDATE_COUNTER);\n store.commit(DATA_UPDATE_COUNTER, ++hasDataUpdated);\n }\n return value;\n }\n },\n cornerMatrices: {},\n groupType: {},\n matrixInstance: {},\n metaData: {},\n placeholderInfo: {},\n resolver: {},\n registry: {\n sanitization: (context, value) => {\n if (context.resolver) {\n context.resolver().registry(value.cellRegistry);\n }\n return value;\n }\n },\n selection: {},\n store: {}\n};\n","import { transactor, generateGetterSetters } from 'muze-utils';\nimport localOptions from './local-options';\nimport { SimpleGroup } from '../simple-group';\nimport {\n MatrixResolver,\n initStore,\n findInGroup\n} from '../group-helper';\nimport { setupChangeListeners } from './change-listener';\nimport { PROPS } from './props';\nimport {\n CONFIG,\n MOUNT,\n RETINAL,\n Y\n} from '../enums/constants';\n\n/**\n * This class is used to create an instance of a visual group.\n * It extends the SimpleGroup (which is an interface). The visual group takes in a datamodel,\n * and a set of rows and columns, alongwith optional paramters (like color, size, shape).\n *\n * @class VisualGroup\n */\nclass VisualGroup extends SimpleGroup {\n\n /**\n * Creates an instance of VisualGroup. Requires dependencies and other registry options for placeholders\n * and layers that create individual units\n * @param {Object} registry Key value pair of compostions for the group\n * @param {Object} dependencies Dependencies needed to run the group\n * @memberof VisualGroup\n */\n constructor (registry, dependencies) {\n super();\n\n const {\n componentSubRegistry\n } = registry;\n\n this._dependencies = dependencies;\n // Generate getter/setter methods for all properties of the class\n // One can get each property by calling the method and can set it\n // by passing paramaters for the same. Thus, one can chain setter\n // getter methods.\n generateGetterSetters(this, PROPS);\n // Populate the store with default values\n this.store(initStore());\n\n // initialize group compositions\n this._composition = {};\n // store reference to data\n this._data = [];\n // matrix instance store each of the matrices\n this._matrixInstance = {};\n // store reference to mountpoint\n this._mount = null;\n // selection object that takes care of updating of components\n this._selection = {};\n // stores info about the placeholders generated after creation of matrices\n this._placeholderInfo = {};\n // corner matrices are the headers/footers for the application\n this._cornerMatrices = {};\n // Create instance of matrix resolver\n this.resolver(new MatrixResolver(this._dependencies));\n\n // Getting indiviual registered items\n this.registry({\n layerRegistry: componentSubRegistry.layerRegistry.get(),\n cellRegistry: componentSubRegistry.cellRegistry.get()\n });\n // Add local options to the store\n transactor(this, localOptions, this.store().model);\n // Register listeners\n setupChangeListeners(this);\n }\n\n matrixInstance (...matrices) {\n if (matrices.length) {\n return this;\n }\n return this.composition().matrices;\n }\n\n /**\n * Returns the composition of the Group\n *\n * @readonly\n * @memberof VisualGroup\n */\n composition (...params) {\n if (params.length) {\n return this;\n }\n return this._composition;\n }\n\n /**\n * Locks the model to prevent change listeners to be triggered until unlocked\n *\n * @return {Object} Instance of class VisualGroup\n * @memberof VisualGroup\n */\n lockModel () {\n this.store().model.lock();\n return this;\n }\n\n /**\n * Unlocks the model so that all change listeners can be triggered\n *\n * @return {Object} Instance of class VisualGroup\n * @memberof VisualGroup\n */\n unlockModel () {\n this.store().model.unlock();\n return this;\n }\n\n /**\n *\n *\n * @param {*} variable\n * @return\n * @memberof VisualGroup\n */\n where (variable) {\n return findInGroup(variable, this.resolver().getAllFields());\n }\n\n /**\n *\n *\n * @param {*} type\n * @return\n * @memberof VisualGroup\n */\n getAxes (type) {\n if (type === RETINAL) {\n return this.resolver().getRetinalAxes();\n }\n return this.resolver().getSimpleAxes(type);\n }\n\n /**\n *\n *\n * @return\n * @memberof VisualGroup\n */\n getCells (type) {\n return this.resolver()[`${type}Cells`]();\n }\n\n /**\n *\n *\n * @param {*} channel\n * @return\n * @memberof VisualGroup\n */\n getFieldsFromChannel (channel) {\n const {\n rowProjections,\n colProjections\n } = this.resolver().getAllFields();\n\n return channel === Y ? rowProjections : colProjections;\n }\n\n /**\n *\n *\n * @param {*} facetKey\n * @return\n * @memberof VisualGroup\n */\n getCellsByFacetKey (facetKey) {\n const resolver = this.resolver();\n const cells = resolver.rowCells()[facetKey] || resolver.colCells()[facetKey] || [];\n return cells;\n }\n\n /**\n *\n *\n * @param {*} facetKey\n * @return\n * @memberof VisualGroup\n */\n getAxesByFacetKey (axisType, facetKey) {\n const resolver = this.resolver();\n const cells = resolver.rowCells()[facetKey] || resolver.colCells()[facetKey];\n const axes = cells[0].valueOf().axes()[axisType] || [];\n\n return axes;\n }\n\n /**\n * This method is used to return a serialized representation of the instance's properties.\n *\n * @return {Object} Object with config proprties.\n * @memberof VisualGroup\n */\n serialize () {\n const store = this.store();\n\n return {\n [CONFIG]: store.get(CONFIG),\n [MOUNT]: store.get(MOUNT)\n };\n }\n\n getGroupByData () {\n return this._groupedDataModel;\n }\n}\n\nexport default VisualGroup;\n","import { PersistentBehaviour, SELECTION } from '@chartshq/muze-firebolt';\n\nexport default class SelectBehaviour extends PersistentBehaviour {\n static formalName () {\n return 'select';\n }\n\n setSelectionSet (addSet, selectionSet) {\n if (addSet === null) {\n selectionSet.reset();\n } else if (addSet.length) {\n // new add set\n const existingRemoveSet = addSet.filter(d => selectionSet._set[d] === SELECTION.SELECTION_OLD_EXIT\n || selectionSet._set[d] === SELECTION.SELECTION_NEW_EXIT);\n // existing add set\n if (existingRemoveSet.length) {\n selectionSet.updateEntry();\n selectionSet.add(existingRemoveSet);\n } else {\n selectionSet.updateExit();\n selectionSet.remove(addSet);\n }\n const { exitSet } = selectionSet.getSets();\n const mergedExitSet = [...new Set(exitSet[1]), ...new Set(exitSet[0])];\n const completeSetCount = selectionSet.getCompleteSet().length;\n if (exitSet[1].length !== completeSetCount && mergedExitSet.length === completeSetCount) {\n selectionSet.reset();\n }\n } else {\n selectionSet.remove(selectionSet.getCompleteSet());\n }\n return this;\n }\n}\n","import { BEHAVIOURS, ACTIONS } from '@chartshq/muze-firebolt';\n\nconst CLASSPREFIX = 'muze';\n\nexport const actionBehaviourMap = {\n [ACTIONS.DRAG]: {\n target: `.${CLASSPREFIX}-gradient-rect`,\n behaviours: [BEHAVIOURS.BRUSH]\n },\n [ACTIONS.HOVER]: {\n target: [`.${CLASSPREFIX}-legend-columns`],\n behaviours: [BEHAVIOURS.HIGHLIGHT]\n },\n [ACTIONS.CLICK]: {\n target: [`.${CLASSPREFIX}-legend-columns`],\n behaviours: [BEHAVIOURS.SELECT]\n }\n};\n\nexport const propagationBehaviourMap = {\n [BEHAVIOURS.SELECT]: BEHAVIOURS.FILTER,\n [BEHAVIOURS.BRUSH]: BEHAVIOURS.HIGHLIGHT\n};\n","import * as BEHAVIOURS from '../enums/behaviours';\nimport * as sideEffects from '../enums/side-effects';\n\nexport const behaviourEffectMap = {\n [BEHAVIOURS.BRUSH]: [sideEffects.SELECTIONBOX, {\n name: sideEffects.Highlighter,\n options: {\n strategy: 'fade'\n }\n }],\n [BEHAVIOURS.HIGHLIGHT]: [sideEffects.Highlighter],\n select: [{\n name: sideEffects.Highlighter,\n options: {\n strategy: 'fade'\n }\n }]\n};\n\nexport const propagationSideEffects = {\n [BEHAVIOURS.BRUSH]: [{\n name: sideEffects.Highlighter,\n options: {\n strategy: 'fade'\n }\n }],\n [BEHAVIOURS.HIGHLIGHT]: [{\n name: sideEffects.Highlighter,\n options: {\n strategy: 'fade'\n }\n }],\n [BEHAVIOURS.SELECT]: ['filter']\n};\n\n","export const BRUSH = 'brush';\nexport const HIGHLIGHT = 'highlight';\nexport const TOOLTIP = 'tooltip';\nexport const FILTER = 'filter';\nexport const SELECT = 'select';\n\n","export const SELECTIONBOX = 'selectionBox';\nexport const Highlighter = 'highlighter';\n\n","export const CLASSPREFIX = 'muze';\nexport const IDFIELD = '__id__';\nexport const CONFIG = 'config';\nexport const DATAMODEL = 'dataModel';\nexport const AXES = 'axes';\nexport const LAYERDEFS = 'layerDef';\nexport const WIDTH = 'width';\nexport const HEIGHT = 'height';\nexport const MOUNTPOINT = 'mountPoint';\nexport const GRIDLINEPARENTGROUPCLASS = 'grid-lines';\nexport const TRANSFORM = 'transform';\nexport const CONSOLIDATED = 'consolidated';\nexport const FRAGMENTED = 'fragmented';\nexport const DEFAULTCOLOR = '#F44336';\nexport const DEFAULTSIZE = 50;\nexport const DEFAULTSHAPE = 'circle';\nexport const STEP = 'step';\nexport const GRADIENT = 'gradient';\nexport const ORDINAL = 'ordinal';\nexport const SCALE_FUNCTIONS = {\n size: 'getSize',\n shape: 'getShape',\n color: 'getColor'\n};\nexport const TOP = 'top';\nexport const LEFT = 'left';\nexport const RIGHT = 'right';\nexport const BOTTOM = 'bottom';\nexport const HORIZONTAL = 'horizontal';\nexport const VERTICAL = 'vertical';\nexport const CENTER = 'center';\nexport const VALUE = 'value';\nexport const PATH = 'path';\nexport const SHAPE = 'shape';\nexport const ICON = 'icon';\nexport const RECT = 'rect';\nexport const START = 'start';\nexport const UPPER = 'upper';\nexport const LOWER = 'lower';\nexport const END = 'end';\nexport const SIZE = 'size';\nexport const DISCRETE = 'discrete';\nexport const MEASURE = 'measure';\n\n","import { assembleModelFromIdentifiers, getDataModelFromRange } from 'muze-utils';\nimport { propagationBehaviourMap } from './action-behaviour-map';\nimport { propagationSideEffects } from './behaviour-effect-map';\nimport { STEP, GRADIENT, DISCRETE, MEASURE } from '../enums/constants';\n\nexport const propagate = (firebolt, action, selectionSet, config = {}) => {\n let propagationData;\n const type = firebolt.context.constructor.type();\n const payload = config.payload;\n const data = firebolt.context.data();\n const metaData = firebolt.context.metaData();\n const fieldType = metaData.getData().schema[0].type;\n\n const propPayload = {};\n const sourceId = firebolt.context._id;\n propPayload.action = propagationBehaviourMap[action] || action;\n propPayload.sideEffects = propagationSideEffects[action];\n propPayload.sourceCanvas = firebolt.context.canvasAlias();\n const isMutableAction = firebolt._actions.behavioural[propPayload.action].constructor.mutates();\n if (payload.criteria === null) {\n propagationData = null;\n } else {\n const entrySet = selectionSet.mergedEnter;\n let values = data.filter(d => entrySet.uids.indexOf(d.id) !== -1).map(d => d.value);\n if (type === STEP || (type === DISCRETE && fieldType === MEASURE)) {\n const field = Object.keys(payload.criteria || {})[0];\n values = data.filter(d => entrySet.uids.indexOf(d.id) !== -1).map(d => d.range);\n propagationData = values.length ? metaData.select((fields) => {\n let check = false;\n for (let i = 0; i < values.length; i++) {\n check = fields[field].value >= values[i][0] && fields[field].value <= values[i][1];\n if (check === true) {\n break;\n }\n }\n return check;\n }, {\n saveChild: false\n }) : null;\n } else if (type === GRADIENT) {\n propagationData = getDataModelFromRange(metaData, payload.criteria);\n } else if (values.length) {\n propagationData = assembleModelFromIdentifiers(metaData, [payload.criteria[0], ...values.map(d => [d])]);\n } else {\n propPayload.criteria = null;\n propagationData = metaData.select(() => true, {\n saveChild: false\n });\n }\n }\n\n let propagateInterpolatedValues = false;\n\n if (propagationData) {\n const schema = propagationData.getSchema();\n propagateInterpolatedValues = schema.every(d => d.type === fieldType.MEASURE);\n }\n\n const propConfig = {\n sourceId: `legend-${sourceId}`,\n payload: propPayload,\n criteria: propPayload.criteria === null ? null : propagationData,\n isMutableAction,\n propagateInterpolatedValues,\n action: propPayload.action\n };\n\n metaData.propagate(propagationData, propConfig, true);\n};\n","import { Firebolt } from '@chartshq/muze-firebolt';\nimport { propagate } from './helper';\nimport { STEP, GRADIENT } from '../enums/constants';\n\n/**\n * This class manages the interactions of legend.\n * @export\n * @class LegendFireBolt\n * @extends {Firebolt}\n */\nexport class LegendFireBolt extends Firebolt {\n constructor (...params) {\n super(...params);\n this.initializeSideEffects();\n }\n\n getPropagationSelectionSet (selectionSet) {\n return selectionSet[0];\n }\n\n propagate (behaviourName, payload, selectionSet) {\n propagate(this, behaviourName, selectionSet, {\n payload\n });\n }\n\n getAddSetFromCriteria (criteria) {\n let values;\n let uniqueIds;\n const type = this.context.constructor.type();\n\n if (criteria === null) {\n uniqueIds = null;\n } else if (type === STEP) {\n values = Object.values(criteria);\n uniqueIds = this.context.data().filter(d => values.indexOf(d.range) !== -1).map(d => d.id);\n } else if (type === GRADIENT) {\n uniqueIds = [];\n } else {\n values = criteria[1];\n if (values) {\n uniqueIds = this.context.data().filter(d => values.indexOf(d.value) !== -1).map(d => d.id);\n } else {\n values = Object.values(criteria);\n uniqueIds = this.context.data().filter(d => values.indexOf(d.range) !== -1).map(d => d.id);\n }\n }\n return {\n uids: uniqueIds,\n model: null\n };\n }\n\n getFullData () {\n return null;\n }\n}\n","import {\n getEvent,\n getD3Drag\n } from 'muze-utils';\n\n/**\n * Adds dragging action to the target element.\n * @param {firebolt} firebolt firebolt\n * @param {SVGElement} targetEl Element on which brushing action is needed.\n * @param {Array} behaviours Array of behaviours\n */\n/* istanbul ignore next */ const drag = firebolt => (targetEl, behaviours) => {\n let startPos = {};\n let endPos = {};\n let payload;\n const d3Drag = getD3Drag();\n const context = firebolt.context;\n const boundingBox = context.measurement().gradientDimensions;\n const axisType = context.config().align === 'horizontal' ? 'x' : 'y';\n const axisScale = context.axis().source().scale();\n const rangeShifter = axisScale.range()[axisType === 'x' ? 0 : 1];\n\n targetEl.call(d3Drag().on('start', () => {\n const event = getEvent();\n startPos = {\n x: event.x,\n y: event.y\n };\n }).on('drag', () => {\n const event = getEvent();\n\n endPos = {\n x: event.x,\n y: event.y\n };\n endPos.x = Math.max(0, Math.min(endPos.x, boundingBox.width));\n endPos.y = Math.max(0, Math.min(endPos.y, boundingBox.height));\n\n payload = {\n criteria: {\n [context.fieldName()]: [axisScale.invert(startPos[axisType] + rangeShifter * 2),\n axisScale.invert(endPos[axisType] + rangeShifter * 2)].sort((a, b) => a - b)\n }\n };\n behaviours.forEach(behaviour => firebolt.dispatchBehaviour(behaviour, payload));\n }).on('end', () => {\n const event = getEvent();\n\n endPos = {\n x: event.x,\n y: event.y\n };\n endPos.x = Math.max(0, Math.min(endPos.x, boundingBox.width));\n endPos.y = Math.max(0, Math.min(endPos.y, boundingBox.height));\n if (startPos[axisType] === endPos[axisType]) {\n payload = {\n criteria: {}\n };\n } else {\n payload = {\n criteria: {\n [context.fieldName()]: [axisScale.invert(startPos[axisType] + rangeShifter * 2),\n axisScale.invert(endPos[axisType] + rangeShifter * 2)].sort((a, b) => a - b)\n }\n };\n }\n behaviours.forEach(behaviour => firebolt.dispatchBehaviour(behaviour, payload));\n }));\n};\n\nexport default drag;\n","/**\n * Adds mouse interactions to target element.\n * @param {Firebolt} Firebolt instance of firebolt.\n * @param {SVGElement} targetEl Element on which the event listeners will be attached.\n * @param {Array} behaviours Array of behaviours\n */\n/* istanbul ignore next */ const hover = firebolt => (targetEl, behaviours) => {\n const dispatchBehaviour = function (args) {\n const payload = {\n criteria: firebolt.context.getCriteriaFromData(args)\n };\n behaviours.forEach(behaviour => firebolt.dispatchBehaviour(behaviour, payload));\n event.stopPropagation();\n };\n\n targetEl.on('mouseover', dispatchBehaviour)\n .on('mousemove', dispatchBehaviour)\n .on('mouseout', () => {\n behaviours.forEach(behaviour => firebolt.dispatchBehaviour(behaviour, {\n criteria: null\n }));\n event.stopPropagation();\n });\n};\n\nexport default hover;\n","/**\n * Adds mouse interactions to target element.\n * @param {VisualUnit} instance instance of visual unit.\n * @param {SVGElement} targetEl Element on which the event listeners will be attached.\n * @param {Array} behaviours Array of behaviours\n */\nconst click = firebolt => (targetEl, behaviours) => {\n const dispatchBehaviour = function (args) {\n const payload = {\n criteria: firebolt.context.getCriteriaFromData(args)\n };\n behaviours.forEach(behaviour => firebolt.dispatchBehaviour(behaviour, payload));\n };\n\n targetEl.on('click', dispatchBehaviour);\n};\n\nexport default click;\n","import drag from './drag';\nimport hover from './hover';\nimport click from './click';\nimport * as ACTIONNAMES from '../../enums/actions';\n\nexport const physicalActions = {\n [ACTIONNAMES.DRAG]: drag,\n [ACTIONNAMES.HOVER]: hover,\n [ACTIONNAMES.CLICK]: click\n};\n\n","export const DRAG = 'drag';\nexport const HOVER = 'hover';\nexport const SELECTIONDRAG = 'selectiondrag';\nexport const CLICK = 'click';\n","import {\n getMousePos,\n getEvent,\n getD3Drag\n } from 'muze-utils';\nimport { HEIGHT, WIDTH, HORIZONTAL } from '../../enums/constants';\n\nconst getSelectionCriteria = (subject, axis, measures) => {\n let criteria = [];\n const {\n axisScale,\n axisType\n } = axis;\n const {\n startPos,\n endPos,\n selectionBoxMeasure,\n drawingInfMeasure,\n offset\n } = measures;\n const subjectStartPoint = subject[axisType];\n\n if (startPos[axisType] === endPos[axisType]) {\n criteria = [];\n } else if (subjectStartPoint + selectionBoxMeasure >= drawingInfMeasure + offset) {\n criteria = [axisScale.invert(drawingInfMeasure + offset - selectionBoxMeasure),\n axisScale.invert(drawingInfMeasure + offset)];\n } else if (subjectStartPoint - offset < offset) {\n criteria = [axisScale.invert(offset * 2), axisScale.invert(selectionBoxMeasure + offset * 2)];\n } else {\n criteria = [axisScale.invert(subjectStartPoint), axisScale.invert(subjectStartPoint + selectionBoxMeasure)];\n }\n axisType === 'x' ? criteria : criteria.reverse();\n return criteria;\n};\n\nexport const selectionBoxDrag = firebolt => (targetEl, behaviours) => {\n let startPos = {};\n let payload;\n const endPos = {};\n const d3Drag = getD3Drag();\n const context = firebolt.context;\n const axisScale = context.axis().source().scale();\n const axisType = context.config().align === HORIZONTAL ? 'x' : 'y';\n const drawingInfMeasure = context.measurement().gradientDimensions[axisType === 'x' ?\n WIDTH : HEIGHT];\n const offset = axisScale.range()[axisType === 'x' ? 0 : 1];\n const measures = {\n drawingInfMeasure,\n offset\n };\n let subject = {};\n\n targetEl.call(d3Drag().on('start', function () {\n const event = getEvent();\n startPos = getMousePos(this, event.sourceEvent);\n subject = event.subject;\n }).on('drag', () => {\n const event = getEvent();\n const selectionBoxMeasure = subject[axisType === 'x' ? WIDTH : HEIGHT];\n\n subject.x += event.dx;\n subject.y += event.dy;\n\n measures.selectionBoxMeasure = selectionBoxMeasure;\n measures.startPos = startPos;\n measures.endPos = endPos;\n const criteria = getSelectionCriteria(subject, { axisScale, axisType }, measures);\n\n payload = {\n criteria: {\n [context.fieldName()]: criteria\n },\n fadeOut: true\n };\n firebolt.dispatchBehaviour(behaviours[0], payload);\n }).on('end', () => {\n const event = getEvent();\n const selectionBoxMeasure = subject[axisType === 'x' ? WIDTH : HEIGHT];\n measures.selectionBoxMeasure = selectionBoxMeasure;\n measures.startPos = startPos;\n measures.endPos = endPos;\n const criteria = getSelectionCriteria(event, { axisScale, axisType }, measures);\n payload = {\n criteria: {\n [context.fieldName()]: criteria\n },\n fadeOut: true,\n config: {\n transition: {\n duration: 200\n }\n }\n };\n firebolt.dispatchBehaviour(behaviours[0], payload);\n }));\n};\n\n","import { makeElement } from 'muze-utils';\nimport { SpawnableSideEffect } from '@chartshq/muze-firebolt';\nimport { CLASSPREFIX, HEIGHT, WIDTH, HORIZONTAL, RECT } from '../../../enums/constants';\nimport { SELECTIONBOX } from '../../../enums/side-effects';\nimport { selectionBoxDrag } from '../../physical/selection-box-drag';\nimport './styles.scss';\n\n/**\n * This class is used to create a selection box which is used by visual unit for brushing and\n * selection in the canvas.\n * @class SelectionBox\n */\n/* istanbul ignore next */ class SelectionBox extends SpawnableSideEffect {\n static formalName () {\n return SELECTIONBOX;\n }\n\n /**\n * It returns the default configuration needed by selectionbox.\n * @return {Object} Default configuration of the selection box.\n */\n static defaultConfig () {\n return {\n className: 'legend-selection-box',\n classPrefix: CLASSPREFIX\n };\n }\n\n /**\n * Draws the selectionbox with the specified dimensions.\n */\n /* istanbul ignore next */ apply (selectionSet, payload) {\n let x;\n let y;\n let width;\n let height;\n const firebolt = this.firebolt;\n const context = firebolt.context;\n const config = this.config();\n const axis = context.axis().source();\n const className = `${config.classPrefix}-${config.className}`;\n\n const domain = payload.criteria[firebolt.context.fieldName()];\n const axisScale = axis.scale();\n const range = domain ? [axis.getScaleValue(domain[0]), axis.getScaleValue(domain[1])] : [];\n\n const axisType = context.config().align === HORIZONTAL ? 'x' : 'y';\n\n const gradientDimension = firebolt.context.measurement().gradientDimensions[axisType === 'x' ?\n HEIGHT : WIDTH];\n\n const rangeShifter = axisScale.range()[axisType === 'x' ? 0 : 1];\n const legendGradContainer = context.getDrawingContext().svgContainer;\n const legendSelGroup = makeElement(legendGradContainer, 'g', [1], `${config.classPrefix}-selection-box-group`);\n\n if (firebolt.context.config().align === HORIZONTAL) {\n x = range[0] - rangeShifter || 0;\n y = 0;\n width = range[1] - range[0] || 0;\n height = gradientDimension;\n } else {\n x = 0;\n y = range[1] - rangeShifter || 0;\n height = range[0] - range[1] || 0;\n width = gradientDimension;\n }\n const enterFn = function (el) {\n selectionBoxDrag(firebolt)(el, ['brush']);\n };\n const selBox = makeElement(legendSelGroup, RECT, [{ domain, x, y, width, height }], className,\n { enter: enterFn });\n selBox.attr('y', y)\n .attr('x', x)\n .attr(WIDTH, width)\n .attr(HEIGHT, height);\n }\n}\n\nexport default SelectionBox;\n\n","import { selectElement } from 'muze-utils';\n\nexport const strategies = (firebolt) => {\n const context = firebolt.context;\n const classed = (set, className, change) => {\n const classPrefix = context.config().classPrefix;\n selectElement(context.mount())\n .selectAll(`.${classPrefix}-legend-columns`)\n .filter(d => set.uids.indexOf(d.id) !== -1)\n .selectAll('div')\n .classed(className, change);\n };\n\n return {\n fade: (set, config = {}) => {\n const classPrefix = context.config().classPrefix;\n if (!set.mergedEnter.length && !set.mergedExit.length) {\n classed(set.completeSet, config.className || `${classPrefix}-legend-fadeout`, false);\n } else {\n classed(set.mergedExit, config.className || `${classPrefix}-legend-brighten`, false);\n classed(set.mergedExit, config.className || `${classPrefix}-legend-fadeout`, true);\n classed(set.mergedEnter, config.className || `${classPrefix}-legend-fadeout`, false);\n }\n },\n brighten: (set, config = {}) => {\n const classPrefix = context.config().classPrefix;\n if (!set.mergedEnter.length && !set.mergedExit.length) {\n classed(set.completeSet, config.className || `${classPrefix}-legend-brighten`, false);\n } else {\n classed(set.mergedEnter, config.className || `${classPrefix}-legend-brighten`, true);\n classed(set.mergedExit, config.className || `${classPrefix}-legend-brighten`, false);\n }\n }\n };\n};\n","import { GenericSideEffect } from '@chartshq/muze-firebolt';\nimport { strategies } from './strategies';\nimport { Highlighter } from '../../../enums/side-effects';\n\nexport default class LegendHighlighter extends GenericSideEffect {\n constructor (...params) {\n super(...params);\n this._strategies = strategies(this.firebolt);\n this._strategy = 'brighten';\n }\n\n static formalName () {\n return Highlighter;\n }\n\n apply (selectionSet, payload, options = {}) {\n const strategy = this._strategies[options.strategy || this._strategy];\n\n strategy(selectionSet, this);\n }\n}\n","import { mergeRecursive } from 'muze-utils';\n\nexport const PROPS = {\n config: {\n sanitization: (context, value) => mergeRecursive(context._config || {}, value)\n },\n data: {},\n fieldName: {},\n legendContainer: {},\n measurement: {\n sanitization: (context, value) => {\n const measurement = mergeRecursive(context._measurement, value);\n ['padding', 'border', 'margin'].forEach((space) => {\n measurement[space] = Math.min(measurement[space] > 0 ? measurement[space] : 0,\n measurement.maxWidth * 0.1, measurement.maxHeight * 0.1);\n });\n return measurement;\n }\n },\n logicalSpace: {},\n metaData: {},\n range: {\n sanitization: (context, value) => {\n context.scale().range(value);\n context.resetLogicalSpace();\n context.store().commit('range', value);\n return value;\n }\n },\n scale: {},\n smartTicks: {},\n store: {},\n title: {\n sanitization: (context, value) => mergeRecursive(context._title || {}, value)\n }\n};\n","import { getSymbol } from 'muze-utils';\nimport {\n CENTER,\n LEFT,\n RIGHT\n} from '../enums/constants';\n\nexport const ALIGN = {\n HORIZONTAL: 'horizontal',\n VERTICAL: 'vertical'\n};\n\nexport const DEFAULT_MEASUREMENT = {\n height: 30,\n width: 30,\n maxWidth: Infinity,\n maxHeight: Infinity,\n padding: 2,\n margin: 2,\n border: 1\n};\n\nexport const LEGEND_TITLE = {\n text: '',\n orientation: (pos) => {\n if (pos === LEFT || pos === RIGHT) {\n return LEFT;\n } return CENTER;\n }\n};\n\nexport const DEFAULT_CONFIG = {\n classPrefix: 'muze',\n\n formatter: {\n bounds: {\n lower: 'less than',\n upper: 'more than'\n }\n },\n item: {\n text: {\n orientation: 'right',\n width: 10,\n formatter: val => val\n },\n icon: {\n className: 'legend-icon',\n height: 20,\n width: 20,\n color: 'rgba(0,0,0,.5)',\n type: 'square'\n }\n }\n};\n\n/**\n * Creates a map of pre defined icons\n *\n * @param {string} icon Accepts a icon name like 'square', 'cross', 'diamond' etc\n * @return {Object} icon object which can be used to draw the icons\n */\nexport const ICON_MAP = (icon) => {\n if (icon && typeof (icon) === 'string') {\n return getSymbol(icon);\n } return icon;\n};\n","import { makeElement, numberInterpolator } from 'muze-utils';\n\nimport {\n SCALE_FUNCTIONS,\n WIDTH,\n HEIGHT,\n LEFT,\n RIGHT,\n TOP,\n BOTTOM\n} from '../enums/constants';\n\n/**\n *\n *\n * @param {*} scale\n * @returns\n */\nexport const getScaleInfo = (scale) => {\n const scaleType = scale.constructor.type();\n const domain = scale.uniqueValues();\n const steps = scale.config().stops || 1;\n const scaleFn = SCALE_FUNCTIONS[scaleType];\n\n return { scaleType, domain, steps, scaleFn };\n};\n\n/**\n *\n *\n * @param {*} domain\n * @param {*} steps\n * @returns\n */\nexport const getInterpolatedData = (domain, steps) => {\n const domainForLegend = [];\n const interpolatedFn = numberInterpolator()(domain[0], domain[1]);\n\n for (let i = 0; i <= steps; i++) {\n domainForLegend[i] = interpolatedFn(i / steps);\n }\n return domainForLegend;\n};\n\n/**\n *\n *\n * @param {*} container\n * @param {*} text\n * @param {*} measurement\n * @param {*} classPrefix\n */\nexport const titleCreator = (container, title, measurement, config) =>\n makeElement(container, 'div', [1], `${config.classPrefix}-legend-title`)\n .style(WIDTH, '100%')\n .style(HEIGHT, `${measurement.height}px`)\n .style('padding-left', `${measurement.padding}px`)\n .style('padding-right', `${measurement.padding}px`)\n .style('border-bottom-width', `${measurement.border}px`)\n .style('text-align', title.orientation instanceof Function ?\n title.orientation(config.position) : title.orientation)\n .text(title.text)\n .node();\n\n/**\n *\n *\n * @param {*} data\n * @param {*} prop\n * @param {*} labelManager\n * @return\n */\nexport const getMaxMeasures = (data, prop, labelManager) => {\n let maxHeight = -Infinity;\n let maxWidth = -Infinity;\n\n data.forEach((item) => {\n const value = prop ? item[prop] : item;\n const space = labelManager.getOriSize(value);\n maxHeight = Math.max(space.height + 2, maxHeight);\n maxWidth = Math.max(space.width + 2, maxWidth);\n });\n\n return { height: maxHeight, width: maxWidth };\n};\n\n/**\n *\n *\n * @param {*} data\n * @param {*} prop\n * @param {*} labelManager\n * @return\n */\nexport const getItemMeasures = (data, prop, labelManager, formatter) => {\n const space = [];\n\n data.forEach((item, index) => {\n const value = prop ? item[prop] : item;\n const { height, width } = labelManager.getOriSize(formatter(value));\n space[index] = { height: height + 1, width: width + 1 };\n });\n return space;\n};\n\n/**\n *\n *\n * @param {*} textOrientation\n * @param {*} effPadding\n * @param {*} titleSpace\n * @return\n * @memberof Legend\n */\nexport const computeItemSpaces = (config, measures, data) => {\n let totalHeight = 0;\n let totalWidth = 0;\n let maxItemSpaces = {\n width: 0, height: 0\n };\n const {\n effPadding,\n titleWidth,\n labelSpaces,\n titleHeight,\n maxWidth\n } = measures;\n const {\n item,\n align\n } = config;\n const {\n icon,\n text\n } = item;\n const textOrientation = text.orientation;\n const itemSpaces = [];\n const iconSpaces = [];\n let maxIconWidth = 0;\n labelSpaces.forEach((labelSpace, i) => {\n const itemSpace = { width: 0, height: 0 };\n const iconSpace = { width: 0, height: 0 };\n const datum = data[i] || {};\n // Compute each legend item height/width\n if (textOrientation === LEFT || textOrientation === RIGHT) {\n // Get label, icon and item widths\n labelSpace.width += effPadding;\n iconSpace.width = (datum.size ? 2 * Math.sqrt(datum.size / Math.PI) : icon.width) + effPadding;\n maxIconWidth = Math.max(iconSpace.width, maxIconWidth);\n itemSpace.width = labelSpace.width + maxIconWidth;\n\n // Get label, icon and item heights\n labelSpace.height = Math.max(labelSpace.height, icon.height) + effPadding;\n iconSpace.height = labelSpace.height;\n itemSpace.height = labelSpace.height;\n } else {\n // Get label, icon and item widths\n labelSpace.width = Math.max(labelSpace.width, datum.size ? 2 * Math.sqrt(datum.size / Math.PI)\n : icon.width) + effPadding;\n iconSpace.width = labelSpace.width;\n itemSpace.width = labelSpace.width;\n maxIconWidth = Math.max(iconSpace.width, maxIconWidth);\n\n // Get label, icon and item heights\n labelSpace.height += effPadding;\n iconSpace.height = icon.height + effPadding;\n itemSpace.height = labelSpace.height + iconSpace.height;\n }\n // Compute height and width of legend for each alignment\n if (align === 'horizontal') {\n totalHeight = Math.max(totalHeight, itemSpace.height);\n } else {\n totalHeight += itemSpace.height;\n totalWidth = Math.max(totalWidth, itemSpace.width, titleWidth) + effPadding;\n }\n maxItemSpaces = {\n width: Math.max(itemSpace.width, maxItemSpaces.width),\n height: Math.max(itemSpace.height, maxItemSpaces.height)\n };\n itemSpaces.push(itemSpace);\n iconSpaces.push(iconSpace);\n });\n\n itemSpaces.forEach((itemSpace, i) => {\n if (align === 'horizontal') {\n itemSpace.height = totalHeight;\n iconSpaces[i].width = maxIconWidth;\n if (textOrientation === LEFT || textOrientation === RIGHT) {\n labelSpaces[i].height = totalHeight;\n iconSpaces[i].height = totalHeight;\n itemSpaces[i].width = labelSpaces[i].width + maxIconWidth;\n } else {\n labelSpaces[i].width = maxIconWidth;\n itemSpaces[i].width = maxIconWidth;\n labelSpaces[i].width = maxIconWidth;\n }\n totalWidth = Math.max(totalWidth + itemSpaces[i].width, titleWidth);\n } else {\n itemSpace.width = Math.max(totalWidth, maxWidth);\n if (textOrientation === TOP || textOrientation === BOTTOM) {\n labelSpaces[i].width = totalWidth;\n iconSpaces[i].width = totalWidth;\n maxIconWidth = totalWidth;\n } else {\n iconSpaces[i].width = maxIconWidth;\n itemSpaces[i].width = labelSpaces[i].width + maxIconWidth;\n labelSpaces[i].width = maxItemSpaces.width - maxIconWidth;\n totalWidth = Math.max(totalWidth, itemSpace.width, titleWidth) + effPadding;\n }\n }\n });\n totalHeight += titleHeight + effPadding;\n\n return { totalHeight, totalWidth, itemSpaces, iconSpaces, maxItemSpaces, maxIconWidth };\n};\n\n/**\n *\n *\n * @param {*} type\n * @param {*} scaleInfo\n * @param {*} domainInfo\n * @returns\n */\nexport const getDomainBounds = (type, scaleInfo, domainInfo) => {\n const {\n scaleFn,\n scaleType,\n scale\n } = scaleInfo;\n const {\n domain,\n domainBounds,\n domainLeg,\n steps\n } = domainInfo;\n const ele = domain[type === 'lower' ? 0 : domain.length - 1];\n const step = steps[type === 'lower' ? 0 : steps.length - 1];\n\n return {\n [scaleType]: scaleType === 'size' ? scale[scaleFn](ele) * scale.getScaleFactor() : scale[scaleFn](ele),\n value: domainBounds[type],\n id: type === 'lower' ? 0 : domainLeg.length + 2,\n range: [ele, step]\n };\n};\n","import {\n makeElement,\n selectElement,\n getUniqueId,\n getSmartComputedStyle,\n generateGetterSetters,\n mergeRecursive\n} from 'muze-utils';\nimport { behaviouralActions } from '@chartshq/muze-firebolt';\nimport * as legendBehaviours from '../firebolt/behavioural';\n\nimport { LegendFireBolt } from '../firebolt/legend-firebolt';\nimport { actionBehaviourMap } from '../firebolt/action-behaviour-map';\nimport { physicalActions } from '../firebolt/physical';\nimport * as sideEffects from '../firebolt/side-effects';\nimport { behaviourEffectMap } from '../firebolt/behaviour-effect-map';\nimport { VALUE, PATH } from '../enums/constants';\nimport { PROPS } from './props';\nimport { DEFAULT_MEASUREMENT, DEFAULT_CONFIG, LEGEND_TITLE } from './defaults';\nimport { getItemMeasures, titleCreator, computeItemSpaces } from './legend-helper';\n\n/**\n * Creates a Legend from the axes of a canvas\n *\n * @param {Object} dependencies : legend data\n * @class SimpleLegend\n */\nexport default class SimpleLegend {\n\n /**\n * Creates an instance of Legend.\n * @param {Object} dependencies Set of dependencies required by the legend\n * @memberof Legend\n */\n constructor (dependencies) {\n this._data = [];\n this._metaData = [];\n this._mount = null;\n this._fieldName = null;\n this._title = Object.assign({}, LEGEND_TITLE);\n this._metaData = null;\n this._labelManager = dependencies.labelManager;\n this._cells = dependencies.cells;\n this._id = getUniqueId();\n this._measurement = Object.assign({}, this.constructor.defaultMeasurement());\n this._config = mergeRecursive({}, this.constructor.defaultConfig());\n\n generateGetterSetters(this, PROPS);\n this._computedStyle = getSmartComputedStyle(selectElement('body'),\n `${this.config().classPrefix}-legend-item-info`);\n\n this._firebolt = new LegendFireBolt(this, {\n behavioural: Object.assign({}, behaviouralActions, legendBehaviours),\n physical: physicalActions,\n physicalBehaviouralMap: actionBehaviourMap\n }, sideEffects, behaviourEffectMap);\n }\n\n id () {\n return this._id;\n }\n /**\n * Initializes an instance of the class\n *\n * @static\n * @param {Object} dependencies Set of dependencies required by the legend\n * @return {Instance} returns a new instance of Legend\n * @memberof Legend\n */\n static create (dependencies) {\n return new SimpleLegend(dependencies);\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof SimpleLegend\n */\n static defaultConfig () {\n return DEFAULT_CONFIG;\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof SimpleLegend\n */\n static defaultMeasurement () {\n return DEFAULT_MEASUREMENT;\n }\n\n /**\n *\n *\n * @readonly\n * @memberof SimpleLegend\n */\n firebolt (...params) {\n if (params.length) {\n return this;\n }\n return this._firebolt;\n }\n\n /**\n *\n *\n * @return\n * @memberof Legend\n */\n elemType () {\n return PATH;\n }\n\n canvasAlias (...alias) {\n if (alias.length) {\n this._canvasAlias = alias[0];\n return this;\n }\n return this._canvasAlias;\n }\n\n /**\n *\n *\n * @return\n * @memberof Legend\n */\n mount (...params) {\n if (params.length) {\n this._mount = params[0];\n this.render();\n return this;\n }\n return this._mount;\n }\n\n /**\n *\n *\n * @param {*} effPadding\n * @param {*} align\n * @return\n * @memberof Legend\n */\n getLabelSpaces () {\n const {\n item,\n classPrefix\n } = this.config();\n this._labelManager.setStyle(getSmartComputedStyle(selectElement('body'),\n `${classPrefix}-legend-item-info`));\n return getItemMeasures(this.data(), VALUE, this._labelManager, item.text.formatter);\n }\n\n /**\n * Sets the height and width of a legend based on provided max\n * height and width and based on its contents\n *\n * @return {Instance} Current instance\n * @memberof Legend\n */\n setLegendMeasures () {\n const {\n width,\n height,\n maxWidth,\n maxHeight,\n padding,\n margin,\n border\n } = this.measurement();\n const {\n align\n } = this.config();\n\n // Effective padding, margin and padding\n const effPadding = padding * 2;\n const effBorder = border * 2;\n const effMargin = margin * 2;\n\n this.data(this.dataFromScale(this.scale()));\n // Get space occupied by title\n const titleSpace = this.getTitleSpace();\n const titleHeight = titleSpace.height > 0 ? titleSpace.height * 1.25 : 0;\n const titleWidth = titleSpace.width;\n\n // Get space occupied by labels\n const labelSpaces = this.getLabelSpaces(effPadding, align);\n\n const {\n totalHeight, totalWidth, itemSpaces, iconSpaces, maxItemSpaces, maxIconWidth\n } = computeItemSpaces(this.config(),\n { effPadding, titleWidth, labelSpaces, titleHeight, maxWidth, maxHeight }, this.data());\n\n this.measurement({\n width: Math.max(totalWidth, width) + effMargin + effBorder,\n height: Math.max(totalHeight, height) + effMargin + effBorder,\n labelSpaces,\n iconSpaces,\n itemSpaces,\n maxItemSpaces,\n maxIconWidth,\n titleSpaces: {\n width: Math.min(maxWidth, this.measurement().width) - effMargin - effBorder,\n height: titleHeight\n }\n });\n return this;\n }\n\n /**\n * Returns the space occupied by the legend title\n *\n * @return {Object} Space occupied by title\n * @memberof Legend\n */\n getTitleSpace () {\n this._labelManager.setStyle(getSmartComputedStyle(selectElement('body'),\n `${this.config().classPrefix}-legend-title`));\n return this._labelManager.getOriSize(this.title().text ? this.title().text : '');\n }\n\n /**\n * Creates the title for the legend\n *\n * @param {DOM} container Container made for the title\n * @return {Selection} Title and it's node\n * @memberof Legend\n */\n renderTitle (container) {\n const { titleSpaces, border, padding } = this.measurement();\n return titleCreator(container, this.title(), {\n height: titleSpaces.height,\n border,\n padding\n }, this.config());\n }\n\n /**\n * Render the legend with its title\n *\n * @param {DOM} mountPoint Point where the legend and title are to be appended\n * @return {Instance} Current instance of legend\n * @memberof Legend\n */\n render () {\n const firebolt = this.firebolt();\n const {\n classPrefix\n } = this.config();\n const {\n maxWidth,\n maxHeight,\n width,\n height,\n margin,\n border\n } = this.measurement();\n const legendContainer = makeElement(selectElement(this.mount()), 'div', [1], `${classPrefix}-legend-box`);\n\n legendContainer.classed(`${classPrefix}-legend-box-${this._id}`, true);\n legendContainer.style('float', 'left');\n // set height and width\n legendContainer.style('width', `${Math.min(maxWidth, width) - margin * 2}px`)\n .style('height', `${Math.min(maxHeight, height) - margin * 2}px`)\n .style('margin', `${margin}px`)\n .style('border-width', `${border}px`);\n this.legendContainer(legendContainer.node());\n\n // create title\n this.renderTitle(legendContainer);\n firebolt.createSelectionSet(this.data().map(d => d.id));\n return legendContainer;\n }\n /**\n *\n *\n * @param {*} data\n * @returns\n * @memberof StepLegend\n */\n getCriteriaFromData (data) {\n const fieldName = this.fieldName();\n const type = this.metaData().getData().schema[0].type;\n if (type === 'measure') {\n return {\n [fieldName]: data.range\n };\n }\n return [[fieldName], [data.value]];\n }\n}\n","import {\n LEFT,\n RIGHT,\n START,\n END,\n TOP,\n BOTTOM,\n HORIZONTAL,\n VERTICAL,\n CENTER,\n SHAPE,\n VALUE\n} from '../enums/constants';\n\nconst legendOrientation = {\n [HORIZONTAL]: {\n datasets: data => ({\n row: [1],\n column: data\n }),\n itemContainerMeasures: (measurement) => {\n const {\n itemSpaces,\n width\n } = measurement;\n return {\n row: {\n width: `${width}px`,\n padding: `${0}px`\n },\n column: {\n width: (d, i) => `${itemSpaces[i].width}px`,\n padding: `${0}px`\n }\n };\n },\n getStepSpacesInfo: (measurement) => {\n const { maxItemSpaces, height } = measurement;\n return {\n iconHeight: height,\n iconWidth: maxItemSpaces.width,\n stepPadding: {\n horizontal: true,\n vertical: false\n }\n };\n }\n },\n [VERTICAL]: {\n datasets: data => ({\n row: data,\n column: d => [d]\n }),\n itemContainerMeasures: (measurement, config) => {\n const {\n width\n } = measurement;\n const { padding } = config;\n return {\n row: {\n width: `${width}px`,\n padding: `${padding}px`\n },\n column: {\n width: `${width}px`,\n padding: `${0}px`\n }\n };\n },\n getStepSpacesInfo: (measurement) => {\n const { maxItemSpaces, width } = measurement;\n return {\n iconHeight: maxItemSpaces.height,\n iconWidth: width,\n stepPadding: {\n horizontal: false,\n vertical: true\n }\n };\n }\n }\n};\n\nexport const positionConfig = {\n [LEFT]: legendOrientation[VERTICAL],\n [RIGHT]: legendOrientation[VERTICAL],\n [TOP]: legendOrientation[HORIZONTAL],\n [BOTTOM]: legendOrientation[HORIZONTAL]\n};\n\nexport const alignmentMap = {\n [LEFT]: END,\n [RIGHT]: START,\n [TOP]: CENTER,\n [BOTTOM]: CENTER\n};\n\n// Reverses data for step legend\nexport const stepData = data => ({\n [LEFT]: data.reverse(),\n [RIGHT]: data.reverse(),\n [TOP]: data,\n [BOTTOM]: data\n});\n\n// Changes the item layout based on the position of the text\nexport const itemStack = {\n [LEFT]: [VALUE, SHAPE],\n [RIGHT]: [SHAPE, VALUE],\n [TOP]: [VALUE, SHAPE],\n [BOTTOM]: [SHAPE, VALUE]\n};\n","import { makeElement, selectElement, applyStyle } from 'muze-utils';\nimport { ICON_MAP } from './defaults';\nimport { positionConfig, alignmentMap, itemStack } from './position-config';\nimport {\n WIDTH,\n HEIGHT,\n CENTER,\n VALUE,\n RECT,\n LEFT,\n RIGHT\n} from '../enums/constants';\n\n/**\n *\n *\n * @param {*} container\n * @param {*} data\n * @param {*} legendInstance\n * @param {*} align\n * @return\n */\nexport const getItemContainers = (container, data, legendInstance) => {\n const measurement = legendInstance.measurement();\n const config = legendInstance.config();\n const {\n itemSpaces\n } = measurement;\n const {\n classPrefix,\n position\n } = config;\n const positionObj = positionConfig[position];\n const datasets = positionObj.datasets(data);\n const measures = positionObj.itemContainerMeasures(measurement, config);\n\n const rows = makeElement(container, 'div', datasets.row, `${classPrefix}-legend-row`);\n rows.style(HEIGHT, (d, i) => `${itemSpaces[i].height}px`);\n rows.style(WIDTH, measures.row.width);\n rows.style('padding', measures.row.padding);\n\n const columns = makeElement(rows, 'div', datasets.column, `${classPrefix}-legend-columns`);\n columns.style(WIDTH, measures.column.width);\n columns.style('padding', measures.column.padding);\n\n return columns;\n};\n\n/**\n *\n *\n * @param {*} container\n * @param {*} classPrefix\n * @param {*} data\n * @returns\n * @memberof DiscreteLegend\n */\nexport const createLegendSkeleton = (context, container, classPrefix, data) => {\n let gradWidth = 0;\n let gradHeight = 0;\n let maxGradHeight = 0;\n let maxGradWidth = 0;\n const measurement = context.measurement();\n const {\n margin,\n border,\n titleSpaces,\n width,\n height,\n maxWidth,\n maxHeight\n } = measurement;\n\n gradHeight = height - (titleSpaces.height + 2 * margin + 2 * border);\n gradWidth = width - (margin * 2 + border * 2);\n\n maxGradHeight = maxHeight - (titleSpaces.height + margin * 2 + border * 2);\n maxGradWidth = maxWidth - (margin * 2 + border * 2);\n\n let legendBody = makeElement(container, 'div', [1], `${classPrefix}-legend-body`);\n legendBody.select(`.${classPrefix}-legend-overflow`).remove();\n // Create a div with scroll when overflow\n if (maxGradWidth && maxGradWidth < gradWidth) {\n legendBody = legendBody.style(WIDTH, `${maxGradWidth}px`).style('overflow-x', 'scroll');\n }\n // Create a div with scroll when overflow\n if (maxGradHeight && maxGradHeight < gradHeight) {\n legendBody.style(HEIGHT, `${maxGradHeight}px`).style('overflow-y', 'scroll');\n }\n\n legendBody = makeElement(legendBody, 'div', [1], `${classPrefix}-legend-overflow`);\n\n legendBody.style(WIDTH, `${gradWidth}px`);\n legendBody.style(HEIGHT, `${gradHeight}px`);\n\n const legendItem = getItemContainers(legendBody, data, context);\n return { legendItem };\n};\n\n/**\n * Creates legend item based on alignment and text orientation\n *\n * @param {Selection} container Point where items are to be mounted\n * @return {Instance} Current instance\n * @memberof Legend\n */\nexport const createItemSkeleton = (context, container) => {\n const {\n classPrefix,\n item\n } = context.config();\n const textOrientation = item.text.orientation;\n\n const stack = itemStack[textOrientation];\n const itemSkeleton = makeElement(container, 'div', (d, i) => stack.map(e => [e, d[e], d.color, d.size,\n d.value, context.fieldName(), i]), `${classPrefix}-legend-item-info`);\n\n const alignClass = alignmentMap[textOrientation];\n\n itemSkeleton.classed(alignClass, true);\n return { itemSkeleton };\n};\n\n/**\n *\n *\n * @param {*} measureType\n * @param {*} stepColorCheck\n */\nexport const applyItemStyle = (item, measureType, stepColorCheck, context) => {\n const {\n padding,\n labelSpaces,\n iconSpaces,\n maxIconWidth\n } = context.measurement();\n const diff = stepColorCheck ? -padding * 2 : 0;\n\n if (item[0] === VALUE) {\n return `${labelSpaces[item[6]][measureType]}px`;\n }\n return `${measureType === 'width' && !stepColorCheck ? maxIconWidth : iconSpaces[item[6]][measureType] - diff}px`;\n};\n\n/**\n *\n *\n * @param {*} str\n * @returns\n */\nconst checkPath = (str) => {\n if (/^[mzlhvcsqta]\\s*[-+.0-9][^mlhvzcsqta]+/i.test(str) && /[\\dz]$/i.test(str) && str.length > 4) {\n return true;\n }\n return false;\n};\n\n/**\n *\n *\n * @param {*} d\n * @param {*} elem\n */\nconst createShape = function (d, elem, defaultIcon, width, height) {\n const groupElement = elem;\n // const { shape, size, update } = d;\n const size = d[3] || Math.min(width, height) * Math.PI;\n const shape = d[1] || defaultIcon;\n\n if (shape instanceof Promise) {\n shape.then((res) => {\n d.shape = res;\n return createShape(d, elem);\n });\n } else if (shape instanceof Element) {\n let newShape = shape.cloneNode(true);\n\n if (newShape.nodeName.toLowerCase() === 'img') {\n const src = newShape.src || newShape.href;\n newShape = document.createElementNS('http://www.w3.org/2000/svg', 'image');\n newShape.setAttribute('href', src);\n }\n const shapeElement = selectElement(newShape);\n shapeElement.attr('transform', `scale(${size / 100})`);\n return selectElement(groupElement.node().appendChild(newShape));\n } else if (typeof shape === 'string') {\n let pathStr;\n if (checkPath(shape)) {\n pathStr = shape;\n } else {\n pathStr = ICON_MAP(shape).size(size)();\n }\n return makeElement(groupElement, 'path', data => [data]).attr('d', pathStr);\n }\n d[1] = 'circle';\n return createShape(d, elem, 'circle');\n};\n\n/**\n * Returns the icon of the legend item\n *\n * @param {Object} datum Data property attached to the item\n * @param {number} width width of the item\n * @param {number} height height of the item\n * @return {Object|string} returns the path string or the string name of the icon\n * @memberof Legend\n */\nexport const getLegendIcon = (datum, width, height, defaultIcon) => {\n const icon = ICON_MAP(datum[1]);\n\n if (icon) {\n return icon.size(datum[3] || Math.min(width, height) * Math.PI);\n }\n return ICON_MAP(datum[3] ? 'circle' : defaultIcon).size(datum[3] || Math.min(width, height) * Math.PI);\n};\n\n/**\n *\n *\n */\nexport const renderIcon = (icon, container, datum, context) => {\n const {\n classPrefix,\n iconHeight,\n iconWidth,\n maxIconWidth,\n padding,\n color\n } = context;\n const svg = makeElement(container, 'svg', f => [f], `${classPrefix}-legend-icon-svg`)\n .attr(WIDTH, maxIconWidth)\n .attr(HEIGHT, iconHeight)\n .style(WIDTH, `${maxIconWidth}px`)\n .style(HEIGHT, `${iconHeight}px`);\n\n if (icon !== RECT) {\n const group = makeElement(svg, 'g', [datum[1]], `${classPrefix}-legend-icon`);\n createShape(datum, group, datum[3] ? 'circle' : 'square', iconWidth, iconHeight)\n .attr('transform', `translate(${maxIconWidth / 2 - padding} ${iconHeight / 2})`)\n .attr('fill', datum[2] || color);\n } else {\n makeElement(svg, RECT, [datum[1]], `${classPrefix}-legend-icon`)\n .attr('x', 0)\n .attr('y', 0)\n .attr(WIDTH, maxIconWidth)\n .attr(HEIGHT, iconHeight)\n .attr('fill', datum[2] || color);\n }\n};\n\n/**\n * Renders the items in the legend i.e, icon and text\n *\n * @param {DOM} container Point where item is to be mounted\n * @memberof Legend\n */\nexport const renderDiscreteItem = (context, container) => {\n const labelManager = context._labelManager;\n const {\n item,\n classPrefix\n } = context.config();\n const {\n maxIconWidth,\n padding\n } = context.measurement();\n const {\n width: iconWidth,\n height: iconHeight,\n color,\n className\n } = item.icon;\n\n const textOrientation = item.text.orientation;\n const formatter = item.text.formatter;\n\n labelManager.useEllipsesOnOverflow(true);\n applyStyle(container, {\n width: d => applyItemStyle(d, WIDTH, false, context),\n height: d => applyItemStyle(d, HEIGHT, false, context),\n 'text-align': CENTER,\n padding: `${padding}px`\n });\n\n labelManager.setStyle(context._computedStyle);\n container.each(function (d, i) {\n if (d[0] === VALUE) {\n selectElement(this).text(formatter(d[1]))\n .style(`padding-${textOrientation === RIGHT ? LEFT : RIGHT}`, '0px');\n } else {\n // const icon = getLegendIcon(d, iconWidth, iconHeight, type);\n selectElement(this).classed(`${classPrefix}-${className}`, true);\n selectElement(this).classed(`${classPrefix}-${className}-${i}`, true);\n renderIcon('circle', selectElement(this), d, {\n classPrefix,\n iconWidth,\n // iconWidth: 2 * Math.sqrt(d[3] / Math.PI) || iconWidth,\n iconHeight,\n maxIconWidth,\n padding,\n color\n });\n }\n });\n};\n\n/**\n* Renders the items in the legend i.e, icon and text\n*\n* @param {DOM} container Point where item is to be mounted\n* @memberof Legend\n*/\nexport const renderStepItem = (context, container) => {\n const labelManager = context._labelManager;\n const {\n item,\n position,\n classPrefix\n } = context.config();\n const {\n maxItemSpaces,\n maxIconWidth,\n padding\n } = context.measurement();\n const {\n width,\n height,\n color\n } = item.icon;\n const {\n formatter\n } = item.text;\n\n labelManager.useEllipsesOnOverflow(true);\n const { iconHeight, iconWidth, stepPadding } = positionConfig[position].getStepSpacesInfo({\n maxItemSpaces, height, width\n });\n\n applyStyle(container, {\n width: d => applyItemStyle(d, WIDTH, stepPadding.horizontal, context),\n height: d => applyItemStyle(d, HEIGHT, stepPadding.vertical, context),\n 'text-align': 'center',\n padding: `${padding}px`\n });\n\n labelManager.setStyle(context._computedStyle);\n container.each(function (d) {\n if (d[0] === VALUE) {\n selectElement(this).text(formatter(d[1]));\n } else {\n renderIcon(RECT, selectElement(this), d, {\n classPrefix,\n iconWidth,\n iconHeight,\n maxIconWidth,\n color\n });\n }\n });\n};\n","import SimpleLegend from './simple-legend';\nimport { DISCRETE, LEFT, SIZE } from '../enums/constants';\nimport { getScaleInfo } from './legend-helper';\nimport { createLegendSkeleton, createItemSkeleton, renderDiscreteItem } from './renderer';\nimport '../styles.scss';\n\n/**\n * Creates a Legend from the axes of a canvas\n *\n * @param {Object} dependencies : legend data\n * @class Legend\n */\nexport default class DiscreteLegend extends SimpleLegend {\n\n /**\n * Initializes an instance of the class\n *\n * @static\n * @param {Object} dependencies Set of dependencies required by the legend\n * @return {Instance} returns a new instance of Legend\n * @memberof Legend\n */\n static create (dependencies) {\n return new DiscreteLegend(dependencies);\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof DiscreteLegend\n */\n static type () {\n return DISCRETE;\n }\n\n /**\n *\n *\n * @param {*} scale\n * @returns\n * @memberof DiscreteLegend\n */\n dataFromScale (scale) {\n const { scaleType, domain, scaleFn } = getScaleInfo(scale);\n let domainForLegend = [...new Set(domain)];\n const type = this.metaData().getData().schema[0].type;\n\n domainForLegend = domainForLegend.map((ele, i) => {\n let value = 0;\n let range = 0;\n if (type === 'measure') {\n value = (+domainForLegend[i]).toFixed(0);\n const nextVal = domainForLegend[i + 1] ? +domainForLegend[i + 1] : +value;\n range = [value, nextVal.toFixed(0)];\n } else {\n value = domainForLegend[i];\n range = [domainForLegend[i]];\n }\n return {\n [scaleType]: scale[scaleFn](ele),\n value,\n id: i,\n range\n };\n }).filter(d => d.value !== null);\n\n domainForLegend = scaleType === SIZE ? domainForLegend.sort((a, b) => a[scaleType] - b[scaleType])\n : domainForLegend;\n return domainForLegend;\n }\n\n /**\n * Render the legend with its title\n *\n * @param {DOM} mountPoint Point where the legend and title are to be appended\n * @return {Instance} Current instance of legend\n * @memberof Legend\n */\n render () {\n const firebolt = this.firebolt();\n const data = this.data();\n const { classPrefix } = this.config();\n const legendContainer = super.render(this.mount());\n // create Legend\n const { legendItem } = createLegendSkeleton(this, legendContainer, classPrefix, data);\n const { itemSkeleton } = createItemSkeleton(this, legendItem);\n renderDiscreteItem(this, itemSkeleton);\n legendContainer.selectAll('div').style('float', LEFT);\n firebolt.mapActionsAndBehaviour();\n firebolt.createSelectionSet(this.data().map(d => d.id));\n return legendContainer;\n }\n}\n","import { makeElement, applyStyle } from 'muze-utils';\nimport { ContinousAxis } from '@chartshq/muze-axis';\nimport { BOTTOM, RIGHT } from '../enums/constants';\nimport { ALIGN } from './defaults';\nimport '../styles.scss';\n\n/**\n *\n *\n * @param {*} data\n * @returns\n */\nexport const getGradientDomain = (data) => {\n if (typeof data[0].value === 'number') {\n return data.reduce((accumulator, currentValue) =>\n [Math.min(currentValue.value, accumulator[0]), Math.max(currentValue.value, accumulator[1])],\n [Number.MAX_VALUE, Number.MIN_VALUE]);\n }\n return data.map(e => e.value);\n};\n\n/**\n *\n *\n * @param {*} container\n * @param {*} data\n * @param {*} domain\n * @returns\n */\nexport const makeLinearGradient = (container, data, domain) => {\n const defs = makeElement(container, 'defs', [1]);\n const linearGradient = makeElement(defs, 'linearGradient', [1])\n .attr('id', 'linear-gradient')\n .attr('x1', '0%')\n .attr('y2', '0%');\n makeElement(linearGradient, 'stop', data, 'stop-gradient')\n .attr('offset', d => `${(d.value - domain[0]) * 100 / (domain[1] - domain[0])}%`)\n .attr('stop-color', d => d.color);\n return linearGradient;\n};\n\n/**\n * Creates an axis cell with a linear axis for computing space and\n * creating gradient legend\n *\n * @return {AxisCell} Instance of Axis Cell for the gradient axis\n * @memberof Legend\n */\nexport const createAxis = (context) => {\n const data = context.data();\n const { align } = context.config();\n const AxisCell = context._cells.AxisCell;\n const newAxis = new ContinousAxis({\n id: `legend-${context._id}`,\n orientation: align === ALIGN.VERTICAL ? RIGHT : BOTTOM,\n style: context._computedStyle,\n nice: false,\n showAxisName: false,\n tickValues: data.map(d => d.value),\n fixedBaseline: false\n }, { labelManager: context._labelManager });\n\n newAxis.domain(getGradientDomain(data));\n newAxis.range([1, 1]);\n return new AxisCell().source(newAxis).config({\n margin: { left: 0, bottom: 0, top: 0, right: 0 }\n });\n};\n\n/**\n *\n *\n * @param {*} container\n * @param {*} data\n * @param {*} classPrefix\n * @returns\n * @memberof GradientLegend\n */\nconst createLegendSkeleton = (container, classPrefix, data) => {\n const domain = getGradientDomain(data);\n const legendContainer = makeElement(container, 'div', [1], `${classPrefix}-legend-body`);\n const legendGradSvg = makeElement(legendContainer, 'svg', [1], `${classPrefix}-gradient`);\n const legendGradCont = makeElement(legendGradSvg, 'g', [1], `${classPrefix}-gradient-group`);\n const linearGradient = makeLinearGradient(legendGradSvg, data, domain);\n const legendRect = makeElement(legendGradCont, 'rect', [1], `${classPrefix}-gradient-rect`);\n\n return {\n legendContainer,\n legendGradCont,\n legendGradSvg,\n linearGradient,\n legendRect\n };\n};\n\n/**\n * Renders the axis for the gradient\n *\n * @param {Selection} container Point where axis is to be mounted\n * @param {number} height Height for axis\n * @param {number} width Width for axis\n * @memberof Legend\n */\nexport const renderAxis = (context, container, height, width) => {\n const axis = context.axis();\n\n axis.setAvailableSpace(width, height);\n axis.render(container.node());\n};\n\n/**\n * Renders gradient legends\n *\n * @param {Selection} container Point where the legend is to be appended\n * @memberof GradientLegend\n */\nexport const renderGradient = (context, container) => {\n let gradHeight = 0;\n let gradWidth = 0;\n const {\n align,\n classPrefix,\n item\n } = context.config();\n const data = context.data();\n // Create the skeleton for the legend\n const {\n legendContainer,\n legendGradSvg,\n legendGradCont,\n linearGradient,\n legendRect\n } = createLegendSkeleton(container, classPrefix, data);\n const labelDim = context.axis().source().getAxisDimensions().tickLabelDim;\n const {\n padding,\n margin,\n border,\n titleSpaces,\n maxHeight,\n maxWidth,\n height,\n width\n } = context.measurement();\n const gradientDimensions = {};\n\n gradHeight = Math.floor(height - (titleSpaces.height + 2 * margin + 2 * border));\n gradWidth = Math.floor(width - (margin * 2 + border * 2));\n\n if (align === ALIGN.HORIZONTAL) {\n gradientDimensions.height = item.icon.height;\n gradientDimensions.width = gradWidth - 2 * padding - labelDim.width / 2;\n linearGradient.attr('x2', '100%').attr('y1', '0%');\n legendGradCont.attr('transform', `translate( ${labelDim.width / 2} 0)`);\n renderAxis(context, legendContainer, gradHeight - item.icon.height - padding, gradWidth - 2 * padding - 1);\n legendContainer.classed(`${classPrefix}-overflow-x`, width > maxWidth);\n\n applyStyle(legendContainer, {\n height: `${height}px`,\n width: `${Math.min(width, maxWidth)}px`,\n padding: `${padding}px`\n });\n\n legendRect.attr('height', gradientDimensions.height);\n legendRect.attr('width', gradientDimensions.width - labelDim.width / 2);\n } else {\n gradientDimensions.height = gradHeight - 2 * padding - labelDim.height / 2;\n gradientDimensions.width = item.icon.width;\n linearGradient.attr('x2', '0%').attr('y1', '100%');\n legendGradCont.attr('transform', `translate(0 ${labelDim.height / 2})`);\n renderAxis(context, legendContainer, gradHeight - 2 * padding - 1, gradWidth - item.icon.width - padding * 2);\n legendContainer.classed(`${classPrefix}-overflow-y`, height > maxHeight);\n applyStyle(legendContainer, {\n height: `${Math.min(height, maxHeight)}px`,\n width: `${width}px`,\n padding: `${padding}px`\n });\n legendRect.attr('height', gradientDimensions.height - labelDim.height / 2);\n legendRect.attr('width', gradientDimensions.width);\n }\n\n // Apply Styles to the legend plot area\n applyStyle(legendGradSvg, {\n height: `${gradientDimensions.height}px`,\n width: `${gradientDimensions.width}px`\n });\n\n // Apply styles to the legend rect\n applyStyle(legendRect, {\n fill: 'url(#linear-gradient)'\n });\n legendGradSvg.attr('height', gradientDimensions.height);\n legendGradSvg.attr('width', gradientDimensions.width);\n\n context.measurement({\n gradientDimensions\n });\n context._legendGradientSvg = legendGradSvg;\n return context;\n};\n","import SimpleLegend from './simple-legend';\nimport { getScaleInfo, getInterpolatedData } from './legend-helper';\nimport { GRADIENT, LEFT, SIZE } from '../enums/constants';\nimport { renderGradient, createAxis } from './gradient-helper';\nimport '../styles.scss';\n\n/**\n * Creates a Legend from the axes of a canvas\n *\n * @param {Object} dependencies : legend data\n * @class Legend\n */\nexport default class GradientLegend extends SimpleLegend {\n\n /**\n * Initializes an instance of the class\n *\n * @static\n * @param {Object} dependencies Set of dependencies required by the legend\n * @return {Instance} returns a new instance of Legend\n * @memberof Legend\n */\n static create (dependencies) {\n return new GradientLegend(dependencies);\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof GradientLegend\n */\n static type () {\n return GRADIENT;\n }\n\n /**\n *\n *\n * @param {*} axis\n * @returns\n * @memberof GradientLegend\n */\n axis (...axis) {\n if (axis.length) {\n this._axis = axis[0];\n return this;\n }\n return this._axis;\n }\n\n /**\n *\n *\n * @param {*} scale\n * @returns\n * @memberof GradientLegend\n */\n dataFromScale (scale) {\n let domainForLegend = [];\n const { scaleType, domain, steps, scaleFn } = getScaleInfo(scale);\n\n if (steps instanceof Array) {\n if (domain[0] < steps[0]) {\n domainForLegend[0] = domain[0];\n }\n domainForLegend = [...domainForLegend, ...steps];\n if (domain[domain.length - 1] > steps[steps.length - 1]) {\n domainForLegend.push(domain[1]);\n }\n } else {\n domainForLegend = getInterpolatedData(domain, steps - 1);\n }\n domainForLegend = [...new Set(domainForLegend)].sort((a, b) => a - b);\n\n return domainForLegend.map((ele, i) => {\n const value = domainForLegend[i];\n return {\n [scaleType]: scaleType === SIZE ? scale[scaleFn](ele) * scale.getScaleFactor()\n : scale[scaleFn](Math.floor(ele)),\n value: +value.toFixed(2),\n id: i\n };\n }).filter(d => d.value !== null);\n }\n\n /**\n *\n *\n * @param {*} effPadding\n * @param {*} align\n * @return\n * @memberof Legend\n */\n getLabelSpaces (effPadding) {\n this.config({\n item: {\n text: {\n orientation: this.config().position\n }\n }\n });\n const axis = createAxis(this);\n const axisSpace = axis.getLogicalSpace();\n const space = { width: axisSpace.width - effPadding, height: axisSpace.height - effPadding };\n const axisDomainLength = axis.source().domain().length;\n const labelSpaces = new Array(axisDomainLength).fill(space);\n\n this.axis(axis);\n return labelSpaces;\n }\n\n /**\n *\n *\n * @returns\n * @memberof GradientLegend\n */\n getDrawingContext () {\n return {\n svgContainer: this._legendGradientSvg\n };\n }\n\n /**\n * Render the legend with its title\n *\n * @param {DOM} mountPoint Point where the legend and title are to be appended\n * @return {Instance} Current instance of legend\n * @memberof Legend\n */\n render () {\n const firebolt = this.firebolt();\n const legendContainer = super.render(this.mount());\n // create Legend\n renderGradient(this, legendContainer);\n legendContainer.selectAll('div').style('float', LEFT);\n firebolt.mapActionsAndBehaviour();\n firebolt.createSelectionSet(this.data().map(d => d.id));\n return legendContainer;\n }\n /**\n *\n *\n * @param {*} data\n * @returns\n * @memberof SimpleLegend\n */\n getCriteriaFromData (data) {\n return [[this.fieldName()], [data.value]];\n }\n}\n","import SimpleLegend from './simple-legend';\nimport {\n getScaleInfo,\n getInterpolatedData,\n getDomainBounds\n} from './legend-helper';\nimport {\n createLegendSkeleton,\n createItemSkeleton,\n renderStepItem\n} from './renderer';\nimport { STEP, RECT, LEFT, SIZE, UPPER, LOWER } from '../enums/constants';\nimport { stepData } from './position-config';\nimport '../styles.scss';\n\n/**\n * Creates a Legend from the axes of a canvas\n *\n * @param {Object} dependencies : legend data\n * @class Legend\n */\nexport default class StepLegend extends SimpleLegend {\n\n /**\n * Initializes an instance of the class\n *\n * @static\n * @param {Object} dependencies Set of dependencies required by the legend\n * @return {Instance} returns a new instance of Legend\n * @memberof Legend\n */\n static create (dependencies) {\n return new StepLegend(dependencies);\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof StepLegend\n */\n static type () {\n return STEP;\n }\n\n /**\n *\n *\n * @param {*} scale\n * @returns\n * @memberof StepLegend\n */\n dataFromScale (scale) {\n let domainLeg = [];\n const { scaleType, domain, steps, scaleFn } = getScaleInfo(scale);\n\n const { formatter } = this.config();\n const domainBounds = {\n lower: null, upper: null\n };\n\n if (steps instanceof Array) {\n if (domain[0] < steps[0]) {\n domainBounds.lower = [`${formatter.bounds.lower} ${steps[0]}`];\n }\n domainLeg = [...domainLeg, ...steps];\n if (domain[domain.length - 1] > steps[steps.length - 1]) {\n domainBounds.upper = [`${formatter.bounds.upper} ${steps[steps.length - 1]}`];\n }\n } else {\n domainLeg = getInterpolatedData(domain, steps);\n }\n\n domainLeg = [...new Set(domainLeg)].sort((a, b) => a - b);\n domainLeg = domainLeg.map((ele, i) => {\n let value = null;\n if (i < domainLeg.length - 1) {\n value = `${(ele.toFixed(1))} - ${(+domainLeg[i + 1].toFixed(1))}`;\n }\n return {\n [scaleType]: scaleType === SIZE ? scale[scaleFn](ele) * scale.getScaleFactor() : scale[scaleFn](ele),\n value,\n id: i + 1,\n range: [ele, domainLeg[i + 1]]\n };\n }).filter(d => d.value !== null);\n\n if (domainBounds.lower) {\n const lowerBounds = getDomainBounds(LOWER, { scale, scaleFn, scaleType },\n { domain, steps, domainBounds });\n domainLeg = [lowerBounds, ...domainLeg];\n }\n if (domainBounds.upper) {\n const upperBounds = getDomainBounds(UPPER, { scale, scaleFn, scaleType },\n { domain, steps, domainBounds, domainLeg });\n domainLeg = [...domainLeg, upperBounds];\n }\n return domainLeg;\n }\n\n /**\n *\n *\n * @param {*} effPadding\n * @param {*} align\n * @return\n * @memberof Legend\n */\n getLabelSpaces (effPadding, align) {\n this.config({\n item: {\n text: {\n orientation: this.config().position\n }\n }\n });\n return super.getLabelSpaces(effPadding, align);\n }\n\n /**\n *\n *\n * @return\n * @memberof Legend\n */\n elemType () {\n return RECT;\n }\n\n /**\n * Render the legend with its title\n *\n * @param {DOM} mountPoint Point where the legend and title are to be appended\n * @return {Instance} Current instance of legend\n * @memberof Legend\n */\n render () {\n const firebolt = this.firebolt();\n const { classPrefix, position } = this.config();\n const data = stepData(this.data())[position];\n\n const legendContainer = super.render(this.mount());\n\n // create Legend\n const { legendItem } = createLegendSkeleton(this, legendContainer, classPrefix, data);\n const { itemSkeleton } = createItemSkeleton(this, legendItem);\n\n renderStepItem(this, itemSkeleton);\n legendContainer.selectAll('div').style('float', LEFT);\n firebolt.mapActionsAndBehaviour();\n firebolt.createSelectionSet(this.data().map(d => d.id));\n return legendContainer;\n }\n\n /**\n *\n *\n * @param {*} data\n * @returns\n * @memberof StepLegend\n */\n getCriteriaFromData (data) {\n const fieldName = this.fieldName();\n return {\n [fieldName]: data.range\n };\n }\n}\n","import { GradientLegend, DiscreteLegend, StepLegend } from '@chartshq/muze-legend';\n\n/**\n * Contants to be used as attr\n */\nexport const ROWS = 'rows';\nexport const COLUMNS = 'columns';\nexport const DATA = 'data';\nexport const COLOR = 'color';\nexport const SHAPE = 'shape';\nexport const SIZE = 'size';\nexport const DETAIL = 'detail';\nexport const LAYERS = 'layers';\nexport const TRANSFORM = 'transform';\nexport const INITIALIZED = 'isInitialized';\nexport const SOURCE = 'source';\nexport const WIDTH = 'width';\nexport const HEIGHT = 'height';\nexport const PADDING = 'padding';\nexport const BORDER = 'border';\nexport const MARGIN = 'margin';\nexport const CONFIG = 'config';\nexport const MOUNT = 'mount';\nexport const CANVAS_UPDATED = 'canvasUpdated';\nexport const CLASSPREFIX = 'classPrefix';\nexport const POLICIES = '_policies';\nexport const LEGEND = 'legend';\nexport const TITLE = 'title';\nexport const SUB_TITLE = 'subtitle';\nexport const RESOLVE = 'resolve';\nexport const DISCRETE = 'discrete';\nexport const STEP_COLOR = 'step-color';\nexport const GRADIENT = 'gradient';\nexport const LINEAR = 'linear';\nexport const ORDINAL = 'ordinal';\n\nexport const TITLE_TEMPLATE_NOT_ALLOWED_TAGS = [\n 'script',\n 'style'\n];\n\nexport const LEGEND_TYPE_MAP = {\n [`${ORDINAL}-${true}-${COLOR}`]: DiscreteLegend,\n [`${ORDINAL}-${true}-${SIZE}`]: DiscreteLegend,\n [`${ORDINAL}-${true}-${SHAPE}`]: DiscreteLegend,\n [`${ORDINAL}-${false}-${COLOR}`]: DiscreteLegend,\n [`${ORDINAL}-${false}-${SHAPE}`]: DiscreteLegend,\n [`${ORDINAL}-${false}-${SIZE}`]: DiscreteLegend,\n [`${LINEAR}-${false}-${SIZE}`]: DiscreteLegend,\n [`${LINEAR}-${true}-${SIZE}`]: DiscreteLegend,\n [`${LINEAR}-${false}-${SHAPE}`]: DiscreteLegend,\n [`${LINEAR}-${true}-${COLOR}`]: StepLegend,\n [`${LINEAR}-${false}-${COLOR}`]: GradientLegend\n};\n\nexport const LEFT = 'left';\nexport const RIGHT = 'right';\nexport const BOTTOM = 'bottom';\nexport const TOP = 'top';\nexport const GROUP = 'group';\nexport const LAYOUT = 'layout';\nexport const RETINAL = 'retinal';\nexport const DIMENSION = 'dimension';\nexport const MEASURE = 'measure';\nexport const VERTICAL = 'vertical';\nexport const HORIZONTAL = 'horizontal';\n\n","import { ComposedVars, SimpleVariable } from '@chartshq/visual-group';\nimport { TITLE_TEMPLATE_NOT_ALLOWED_TAGS } from './constants';\n\n/**\n * This method creates a new composed variable instance from multiple variables.\n * @param {Array} vars Variable names\n * @return {ComposedVars} Instance of composed variable\n */\nexport const share = (...vars) => new ComposedVars(...vars.map(variable => new SimpleVariable(variable)));\n\n/**\n *\n *\n * @param {*} node\n * @returns\n */\nfunction treeShakeNode (node) {\n if (node.nodeType !== Node.ELEMENT_NODE) { return; }\n\n if (TITLE_TEMPLATE_NOT_ALLOWED_TAGS.indexOf(node.tagName.toLowerCase()) !== -1) {\n node.parentNode.removeChild(node);\n } else {\n for (const childNode of node.childNodes) {\n treeShakeNode(childNode);\n }\n }\n}\n\n/**\n * A string template tagged function which sanitizes input html formatted\n * string according to the allowed html tags.\n *\n * @param {Array.} strings - The string parts of the template.\n * @param {Array} exps - The list of evaluated expression values.\n * @return {Function} Returns a function which returns the sanitized html string.\n */\nexport function html (strings, ...exps) {\n let htmlCode = '';\n const expLn = exps.length;\n let i = 0;\n\n for (; i < expLn; ++i) {\n htmlCode += strings[i] + exps[i];\n }\n htmlCode += strings[i];\n\n const frag = document.createDocumentFragment();\n const wrapper = document.createElement('div');\n\n frag.appendChild(wrapper);\n wrapper.innerHTML = htmlCode;\n\n treeShakeNode(wrapper);\n const { innerHTML } = wrapper;\n\n return () => innerHTML;\n}\n","import { mergeRecursive } from 'muze-utils';\n\nconst defaultPolicy = (registrableComponents) => {\n const aliases = registrableComponents.map(comp => comp.alias());\n return {\n behaviours: {\n '*': (propagationPayload) => {\n const propagationCanvas = propagationPayload.sourceCanvas;\n return propagationCanvas ? aliases.indexOf(propagationCanvas) !== -1 : true;\n }\n }\n };\n};\n\nclass ActionModel {\n constructor () {\n this._registrableComponents = [];\n }\n\n registerPhysicalActions (action) {\n const canvases = this._registrableComponents;\n\n canvases.forEach((canvas) => {\n canvas.once('canvas.updated').then((args) => {\n const matrix = args.client.composition().visualGroup.matrixInstance().value;\n matrix.each(cell => cell.valueOf().firebolt().registerPhysicalActions(action));\n });\n });\n return this;\n }\n\n registerBehaviouralActions (...actions) {\n const canvases = this._registrableComponents;\n\n canvases.forEach((canvas) => {\n canvas.once('canvas.updated').then(() => {\n const matrix = canvas.composition().visualGroup.matrixInstance().value;\n matrix.each(cell => cell.valueOf().firebolt().registerBehaviouralActions(...actions));\n });\n });\n return this;\n }\n\n /**\n *\n *\n * @param {*} map\n * @returns\n * @memberof ActionModel\n */\n registerPhysicalBehaviouralMap (map) {\n const canvases = this._registrableComponents;\n\n canvases.forEach((canvas) => {\n canvas.once('canvas.updated').then((args) => {\n const matrix = args.client.composition().visualGroup.matrixInstance().value;\n matrix.each(cell => cell.valueOf().firebolt().registerPhysicalBehaviouralMap(map));\n });\n });\n return this;\n }\n\n registerPropagationBehaviourMap (map) {\n const canvases = this._registrableComponents;\n\n canvases.forEach((canvas) => {\n canvas.once('canvas.updated').then((args) => {\n const matrix = args.client.composition().visualGroup.matrixInstance().value;\n matrix.each(cell => cell.valueOf().firebolt().registerPropagationBehaviourMap(map));\n });\n });\n return this;\n }\n\n mapSideEffects (map) {\n const canvases = this._registrableComponents;\n\n canvases.forEach((canvas) => {\n canvas.once('canvas.updated').then(() => {\n const matrix = canvas.composition().visualGroup.matrixInstance().value;\n matrix.each(cell => cell.valueOf().firebolt().mapSideEffects(map));\n });\n });\n return this;\n }\n\n for (...components) {\n this._registrableComponents = components;\n return this;\n }\n\n registerSideEffects (...sideEffects) {\n const registrableComponents = this._registrableComponents;\n\n registrableComponents.forEach((canvas) => {\n canvas.once('canvas.updated').then((args) => {\n const matrix = args.client.composition().visualGroup.matrixInstance().value;\n matrix.each(cell => cell.valueOf().firebolt().registerSideEffects(sideEffects));\n });\n });\n\n return this;\n }\n\n dissociateBehaviour (...maps) {\n const registrableComponents = this._registrableComponents;\n\n registrableComponents.forEach((canvas) => {\n canvas.once('canvas.updated').then((args) => {\n const matrix = args.client.composition().visualGroup.matrixInstance().value;\n matrix.each((cell) => {\n maps.forEach(val => cell.valueOf().firebolt().dissociateBehaviour(val[0], val[1]));\n });\n });\n });\n\n return this;\n }\n\n dissociateSideEffect (...maps) {\n const registrableComponents = this._registrableComponents;\n\n registrableComponents.forEach((canvas) => {\n canvas.once('canvas.updated').then((args) => {\n const matrix = args.client.composition().visualGroup.matrixInstance().value;\n matrix.each((cell) => {\n maps.forEach(val => cell.valueOf().firebolt().dissociateSideEffect(val[0], val[1]));\n });\n });\n });\n\n return this;\n }\n\n enableCrossInteractivity (policy = {}) {\n const registrableComponents = this._registrableComponents;\n const mergedPolicy = mergeRecursive(mergeRecursive({}, defaultPolicy(registrableComponents)), policy);\n\n registrableComponents.forEach((canvas) => {\n canvas.firebolt().crossInteractionPolicy(mergedPolicy);\n });\n\n return this;\n }\n}\n\nexport const actionModel = (() => new ActionModel())();\n","export const DEFAULT_CONFIG = {\n classPrefix: 'muze',\n interaction: {\n sideEffect: 'individual'\n },\n legend: {\n position: 'right',\n color: {\n show: true,\n padding: 2,\n margin: 2,\n border: 1,\n height: 30,\n width: 30\n },\n shape: {\n show: true,\n padding: 2,\n margin: 2,\n border: 1,\n height: 30,\n width: 30\n },\n size: {\n show: true,\n padding: 2,\n margin: 2,\n border: 1,\n height: 30,\n width: 30\n }\n },\n showHeaders: false,\n minWidth: 100,\n minHeight: 100,\n border: {\n style: 'solid',\n color: '#d6d6d6',\n width: 2,\n collapse: true,\n spacing: 0\n },\n autoGroupBy: {\n disabled: false\n }\n};\n","/**\n * @module\n * This is the global options semantics based on which setters getters are created and reactivity is initiated.\n * Format\n * PROPERTRY_NAME: {\n * value: // default value of the property,\n * meta: {\n * typeCheck: // The setter value will be checked using this. If the value is function then the setter value\n * // is passed as args.\n * typeExpected: // The output of typecheck action will be tested against this. Truthy value will set the\n * // value to the setter\n * sanitizaiton: // Need for sanitization before type is checked\n * }\n * }\n */\n\nimport { intSanitizer, mergeRecursive, DataModel } from 'muze-utils';\nimport { DEFAULT_CONFIG } from './defaults';\n\nexport default {\n data: {\n value: null,\n meta: {\n typeCheck: d => d instanceof DataModel\n }\n },\n width: {\n value: 0,\n meta: {\n sanitization: intSanitizer,\n typeCheck: Number.isInteger\n }\n },\n height: {\n value: 0,\n meta: {\n sanitization: intSanitizer,\n typeCheck: Number.isInteger\n }\n },\n minUnitWidth: {\n value: 50,\n meta: {\n sanitization: intSanitizer,\n typeCheck: Number.isInteger\n }\n },\n minUnitHeight: {\n value: 50,\n meta: {\n sanitization: intSanitizer,\n typeCheck: Number.isInteger\n }\n },\n config: {\n value: null,\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Object',\n sanitization: (config, oldConfig) => {\n const oldConf = mergeRecursive({}, oldConfig);\n const defConfig = mergeRecursive(oldConf, DEFAULT_CONFIG);\n const newConf = mergeRecursive(defConfig, config);\n return newConf;\n }\n\n }\n }\n};\n","/**\n * This file exports constants that will be used to\n * create the state store of the table layout.\n */\n/**\n * The index of top, bottom and center in the matrix\n */\nexport const VIEW_INDEX = {\n top: 0,\n center: 1,\n bottom: 2\n};\n\n/**\n * The width of the grid suppied by the user.\n */\nexport const GRID_WIDTH = 'width';\n\n/**\n * The height of the grid supplied by the user.\n */\nexport const GRID_HEIGHT = 'height';\n\n/**\n * The border for the grid\n */\nexport const BORDER = 'border';\n\n /**\n * The index of the first visible row in view matrix.\n */\nexport const ROW_POINTER = 'rowPointer';\n\n/**\n * The index of the first visible column in the view matrix.\n */\nexport const COLUMN_POINTER = 'columnPointer';\n\n/**\n * Flag to specify whether row sizes should be equal.\n */\nexport const ROW_SIZE_IS_EQUAL = 'isRowSizeEqual';\n\n/**\n * Flag to specify whether column sizes are equal.\n */\nexport const COLUMN_SIZE_IS_EQUAL = 'isColumnSizeEqual';\n\n/**\n * Field to store an array an of the widths of visible columns.\n * @computed\n */\nexport const COLUMN_WIDTHS = 'visibleColumnWidths';\n\n/**\n * Field to store an array of heights of visible rows.\n * @computed\n */\nexport const ROW_HEIGHTS = 'visibleRowHeights';\n\n/**\n * Field to store the width of the left matrix.\n * @computed\n */\nexport const LEFT_MATRIX_WIDTH = 'leftMatrixWidth';\n\n/**\n * Field to store the width of the right matrix.\n * @computed\n */\nexport const RIGHT_MATRIX_WIDTH = 'rightMatrixWidth';\n\n/**\n * Field to store the height of the top matrix.\n * @computed\n */\nexport const TOP_MATRIX_HEIGHT = 'topMatrixHeight';\n\n/**\n * Field to store the height of the bottom matrix.\n * @computed\n */\nexport const BOTTOM_MATRIX_HEIGHT = 'bottomMatrixHeight';\n\n/**\n * The dom element to render the layout inside.\n */\nexport const MOUNT_POINT = 'mount';\n\n/**\n * The id attribute of the left table element.\n */\nexport const LEFT_TABLE_ID = 'grid-left';\n\n/**\n * The id attribute of the right table element.\n */\nexport const RIGHT_TABLE_ID = 'grid-right';\n\n/**\n * The id attribute of the top table.\n */\nexport const TOP_TABLE_ID = 'grid-top';\n\n/**\n * The id attribute of the bottom table.\n */\nexport const BOTTOM_TABLE_ID = 'grid-bottom';\n\n/**\n * The id attribute of the center table.\n */\nexport const CENTER_TABLE_ID = 'grid-center';\n\n/**\n * The id attribute of the top div.\n */\nexport const TOP_DIV_ID = 'muze-div-top';\n\n/**\n * The id attribute of the bottom div.\n */\nexport const BOTTOM_DIV_ID = 'muze-div-bottom';\n\n/**\n * The id attribute of the center div.\n */\nexport const CENTER_DIV_ID = 'muze-div-center';\n\n/**\n * Field that indicates if the row configuration has changed\n */\nexport const HAVE_ROWS_CHANGED = 'haveRowsChanged';\n\n/**\n * Field that indicates if the column configuration has changed\n */\nexport const HAVE_COLUMNS_CHANGED = 'haveColumnsChanged';\n\n/**\n * Field that indicates if the values configuration for the center matrix has changed\n */\nexport const HAVE_VALUES_CHANGED = 'haveValuesChanged';\n\n/**\n * Field that indicates the width of row matrix\n */\nexport const ROW_MATRIX_WIDTH = 'rowMatrixWidth';\n\n/**\n * Field that indicates the height of row matrix\n */\nexport const COLUMN_MATRIX_HEIGHT = 'columnMatrixHeight';\n\n/**\n * Field that indicates the unit width of layout\n */\nexport const UNIT_WIDTH = 'unitWidth';\n\n/**\n * Field that indicates the unit height of layout\n */\nexport const UNIT_HEIGHT = 'unitHeight';\n\n/**\n * Field that indicates the style object\n */\nexport const STYLE = 'style';\n\n/**\n * Field that indicates the color configuration\n */\nexport const COLOR = 'color';\n\n/**\n * Field that indicates width\n */\nexport const WIDTH = 'width';\n\n/**\n * Field that indicates collpase property for border\n */\nexport const COLLAPSE = 'collapse';\n\n/**\n * Field that indicates spacing property for border\n */\nexport const SPACING = 'spacing';\n\n/**\n * Field that indicates spacing property for border\n */\nexport const DISTRIBUTION = 'distribution';\n\n/**\n * Field that indicates spacing property for border\n */\nexport const GUTTERSPACE = 'gutterSpace';\n\n/**\n * Field that indicates spacing property for border\n */\nexport const BREAK_PAGE = 'breakPage';\n\n/**\n * Field that indicates spacing property for border\n */\nexport const SHOW_ROW_BORDERS = 'showRowBorders';\n\n/**\n * Field that indicates spacing property for border\n */\nexport const SHOW_COL_BORDERS = 'showColBorders';\n\n/**\n * Field that indicates spacing property for border\n */\nexport const SHOW_VALUE_BORDERS = 'showValueBorders';\n\nexport const HEIGHT = 'height';\nexport const COLUMN = 'column';\nexport const ROW = 'row';\nexport const TOP = 'top';\nexport const LEFT = 'left';\nexport const RIGHT = 'right';\nexport const BOTTOM = 'bottom';\nexport const CENTER = 'center';\nexport const CLICK = 'click';\nexport const ROW_LEFT = 'rowLeft';\nexport const ROW_RIGHT = 'rowRight';\nexport const COLUMN_BOTTOM = 'colBottom';\nexport const COLUMN_TOP = 'colTop';\nexport const AUTO = 'auto';\nexport const ROW_SPAN = 'rowSpan';\nexport const COL_SPAN = 'colSpan';\nexport const ROW_ROOT = 'rowRoot';\nexport const COLUMN_ROOT = 'columnRoot';\nexport const PRIMARY = 'primary';\nexport const SECONDARY = 'secondary';\n","import { sanitizeIP, mergeRecursive } from 'muze-utils';\nimport { TOP, CENTER, BOTTOM } from '../enums/constants';\n\n/*\n * This is the abstract implementation of the root layout. This takes care of common work which all the layouts\n * has to handle. The common work includes sanitizaion of inputs, update, rerender, dispose etc. This class can't be\n * used directly (as ofcourse this is an abstract implementaiton), the class which is implementing it has to implement\n * the necessary methods and gives its on visual.\n */\n\n/**\n * This class is used to create a generic layout. It can be extended to create layouts\n * of different types\n * @class GenericLayout\n */\nexport default class GenericLayout {\n\n /**\n * Creates an instance of TableLayout.\n * @param {HTMLElement} mountPoint DOM element/d3 selection where the layout is to be mounted\n * @param {Object} measurement The dimensions of the layout\n * @param {Object} config configuration to be given for the layout\n * @param {Object} dependencies external dependencies.\n * @memberof GenericLayout\n *\n * measurement : {\n * width : number => width of the container\n * height : number => height of the container\n * unitHeight : number => height of unit of the cells\n * unitWidth : number => width of unit of the cells\n * }\n *\n */\n constructor (mountPoint, measurement, config, dependencies) {\n this._config = {};\n this._measurement = {};\n this._matrices = [];\n // External dependencies to be included for the layout. This includes the ext global dependencies like\n // smartlabel which has one single implementation of throughout the page or per isntance\n this._dependencies = dependencies;\n\n this.measurement(measurement);\n this.mountPoint(mountPoint);\n this.config(config);\n }\n\n /**\n * Returns an object which is used to recreate the layout.\n * @return {Object} the serialized components\n */\n serialize () {\n return {\n measurement: this.measurement(),\n config: this.config(),\n matrices: this.matrices()\n };\n }\n\n /**\n * Sets/Gets the config for the layout\n * @param {Object} config configuration for the layout\n * @return {Layout|Object} Gets the Config/ Returns this instance when set\n */\n config (config) {\n if (config) {\n this._config = mergeRecursive(this._config || {}, config);\n return this;\n }\n return this._config;\n }\n\n /**\n * Sets/Gets the measurement for the layout\n * @param {Object} measurement measurement for the layout\n * @return {Layout|Object} Gets the measurement/ Returns this instance when set\n */\n measurement (measurement) {\n if (measurement) {\n this._measurement = mergeRecursive(this._measurement || {}, measurement);\n\n return this;\n }\n return this._measurement;\n }\n\n /**\n * Sets/Gets the matrices for the layout\n * @param {Object} matrices matrices for the layout\n * @return {Layout|Object} Gets the matrices/ Returns this instance when set\n */\n matrices (matrices) {\n if (matrices) {\n this._matrices = sanitizeIP.typeObj([TOP, CENTER, BOTTOM], matrices);\n\n return this;\n }\n return this._matrices;\n }\n\n /**\n * Sets/Gets the matrix for row\n * @param {Object} matrix matrices for the layout\n * @return {Layout|Object} Gets the matrix/ Returns this instance when set\n */\n rowMatrix (matrix) {\n if (matrix) {\n this._rowMatrix = matrix;\n return this;\n }\n return this._rowMatrix;\n }\n\n /**\n * Sets/Gets the matrix for columns\n * @param {Object} matrix matrices for the layout\n * @return {Layout|Object} Gets the matrix/ Returns this instance when set\n */\n columnMatrix (matrix) {\n if (matrix) {\n this._columnMatrix = matrix;\n return this;\n }\n return this._columnMatrix;\n }\n\n /**\n * Sets/Gets the matrix for value\n * @param {Object} matrix matrices for the layout\n * @return {Layout|Object} Gets the matrix/ Returns this instance when set\n */\n centerMatrix (matrix) {\n if (matrix) {\n this._centerMatrix = matrix;\n return this;\n }\n return this._centerMatrix;\n }\n\n /**\n * Sets/Gets the mountPoint for the layout\n * @param {Object} mountPoint mountPoint for the layout\n * @return {Layout|Object} Gets the mountPoint/ Returns this instance when set\n */\n mountPoint (mountPoint) {\n if (mountPoint) {\n this._mountPoint = mountPoint;\n\n return this;\n }\n return this._mountPoint;\n }\n}\n","import * as FieldNames from '../enums/constants';\n\n/**\n * Default configuration of the layout\n * @return {Object} returns the default configuration\n */\nexport const DEFAULT_CONFIGURATION = {\n [FieldNames.BORDER]: {\n [FieldNames.STYLE]: 'solid',\n [FieldNames.COLOR]: '#d6d6d6',\n [FieldNames.WIDTH]: 2,\n [FieldNames.COLLAPSE]: true,\n [FieldNames.SPACING]: 0\n },\n [FieldNames.GUTTERSPACE]: { rows: [], columns: [] },\n [FieldNames.DISTRIBUTION]: { rows: [], columns: [] },\n [FieldNames.BREAK_PAGE]: { rows: [], columns: [] },\n [FieldNames.ROW_SIZE_IS_EQUAL]: false,\n [FieldNames.COLUMN_SIZE_IS_EQUAL]: false,\n [FieldNames.COLUMN_POINTER]: 0,\n [FieldNames.ROW_POINTER]: 0\n};\n\n/**\n * Default measurements for the layout\n * @return {Object} returns the default measurements\n */\nexport const DEFAULT_MEASUREMENTS = {\n [FieldNames.GRID_WIDTH]: 100,\n [FieldNames.GRID_HEIGHT]: 100,\n [FieldNames.UNIT_WIDTH]: 100,\n [FieldNames.UNIT_HEIGHT]: 100\n};\n\nexport const BLANK_BORDERS = 'rgba(0,0,0,0)';\n","import { ROW_LEFT, ROW_RIGHT, COLUMN_BOTTOM, COLUMN_TOP, TOP, BOTTOM } from '../enums/constants';\n/**\n * This callback is used to filter the array of\n * placeholder cells and filter out cells which have\n * appeared in a previous row.\n *\n * @param {Placeholder} colData Instance of placeholder.\n * @param {number} colIdx The index of the placeholder in array.\n * @param {Array} matrix The 2d array for which filtering is to be done\n * @param {number} rIdx The index of the row of the placeholder in array.\n * @param {string} type The type of matrix it is (rowLeft, rowRight, colTop, colBottom)\n * @return {boolean} flag to keep/remove element.\n */\nconst columnFilter = (colData, colIdx, matrix, rIdx, type) => {\n const previousRow = matrix[rIdx - 1];\n const currentRow = matrix[rIdx];\n\n // Row Span for left\n if (type === ROW_LEFT) {\n if (!previousRow) {\n return colData;\n }\n let i = 0;\n for (;i <= colIdx; i += 1) {\n if (currentRow[i].valueOf() !== previousRow[i].valueOf()) {\n break;\n }\n }\n return (i - 1 === colIdx) ? null : colData;\n } else if (type === ROW_RIGHT) {\n if (!previousRow || colIdx === 0) {\n return colData;\n }\n let j = colIdx;\n for (; j < currentRow.length; j += 1) {\n if (previousRow[j].valueOf() !== currentRow[j].valueOf()) {\n break;\n }\n }\n return (j === currentRow.length) ? null : colData;\n } else if (type === COLUMN_BOTTOM) {\n if (rIdx === 0) {\n return colData;\n }\n const prevCell = currentRow[colIdx - 1];\n if (prevCell) {\n if (prevCell.valueOf() === colData.valueOf()) {\n const nextRow = matrix[rIdx + 1];\n if (!nextRow) {\n return null;\n }\n if (nextRow[colIdx].valueOf() === nextRow[colIdx - 1].valueOf()) {\n return null;\n }\n return colData;\n }\n return colData;\n }\n return colData;\n } else if (type === COLUMN_TOP) {\n if (rIdx === matrix.length - 1 && matrix.length > 1) {\n return colData;\n }\n const prevCell = currentRow[colIdx - 1];\n if (prevCell && (prevCell.valueOf() === colData.valueOf())) {\n const prevRow = matrix[rIdx - 1];\n if (prevRow) {\n if (prevRow[colIdx].valueOf() === prevRow[colIdx - 1].valueOf()) {\n return null;\n }\n return colData;\n }\n return null;\n }\n return colData;\n }\n return colData;\n};\n\n/**\n * This callback is used to calculate the rowspan\n * by checking for repeating entries in subsequent rows\n * at the specified column.\n *\n * @param {Placeholder} colData Instance of placeholder.\n * @param {number} colIdx The index of the placeholder in the array.\n * @param {Array} matrix The 2d array for which filtering is to be done\n * @param {number} rIdx The index of the row of the placeholder in array.\n * @return {number} The row span.\n */\nconst calcRowSpan = (colData, colIdx, matrix, rIdx) => {\n let count = 1;\n // if data is not header cell then rowspan\n // has to be 1\n if (!colData || typeof colData.valueOf() !== 'string') {\n return 1;\n }\n let isNull = false;\n while (!isNull) {\n if (matrix[rIdx + count] && matrix[rIdx + count][colIdx] === null) {\n count += 1;\n } else {\n isNull = true;\n }\n }\n return count;\n};\n/**\n * This callback is used to calculate the rowspan\n * by checking for repeating entries in subsequent rows\n * at the specified column.\n *\n * @param {Placeholder} colData Instance of placeholder.\n * @param {number} colIdx The index of the placeholder in the array.\n * @param {Array} matrix The 2d array for which filtering is to be done\n * @param {number} rIdx The index of the row of the placeholder in array.\n * @return {number} The row span.\n */\nconst calcColSpan = (colData, colIdx, matrix, rIdx) => {\n let count = 1;\n // if data is not header cell then rowspan\n // has to be 1\n if (!colData || typeof colData.valueOf() !== 'string') {\n return 1;\n }\n let isNull = false;\n while (!isNull) {\n if (matrix[rIdx][colIdx + count] === null) {\n count += 1;\n } else {\n isNull = true;\n }\n }\n return count;\n};\n\n// create a masking matrix to strip out repeating columns\n// and calculate rowspan.\nconst mask = function (matrix, type) {\n return matrix.map((row, rIdx) => {\n if (type === ROW_LEFT || type === ROW_RIGHT) {\n const filteredRow = row.map((col, colIndex) => columnFilter(col, colIndex, matrix, rIdx, type));\n const temp = [];\n const diff = row.length - filteredRow.length;\n for (let i = 0; i < diff; i += 1) {\n temp.push(null);\n }\n if (type === ROW_RIGHT) {\n temp.unshift(...filteredRow);\n return temp;\n }\n temp.push(...filteredRow);\n return temp;\n }\n\n const filteredRow = row.map((col, colIndex) => columnFilter(col, colIndex, matrix, rIdx, type));\n const temp = [];\n temp.push(...filteredRow);\n return temp;\n });\n};\n\n/**\n * This function is used to set the col and row spans\n * for the matrices based on repeated/hierarchichal data\n *\n * @export\n * @param {Array} matrix The 2d array for which filtering is to be done\n * @param {string} type Type of array (center, top, bottom)\n * @param {number} index Index of array in the row\n * @return {Object} containing the view matrix and their spans\n */\nexport function cellSpanMaker (matrix, type, index) {\n let span = '';\n if (type === TOP || type === BOTTOM) {\n span = type === TOP ? COLUMN_TOP : COLUMN_BOTTOM;\n const viewMatrix = mask(matrix, span);\n const spans = viewMatrix.map((row, ridx) => row.map((col, i) => calcColSpan(col, i, viewMatrix, ridx))\n .filter(col => col !== 1));\n return { viewMatrix, spans };\n } else if (index === 0 || index === 2) {\n span = index === 0 ? ROW_LEFT : ROW_RIGHT;\n const viewMatrix = mask(matrix, span);\n const spans = [];\n viewMatrix.forEach((row, ridx) => {\n spans[ridx] = spans[ridx] || [];\n row.forEach((col, i) => {\n if (viewMatrix[ridx][i]) {\n const currSpan = calcRowSpan(col, i, viewMatrix, ridx);\n currSpan && spans[ridx].push(currSpan);\n }\n });\n });\n return { viewMatrix, spans };\n }\n return { viewMatrix: matrix };\n}\n","import { makeElement, selectElement } from 'muze-utils';\nimport { cellSpanMaker } from './span-maker';\nimport {\n TOP, LEFT, RIGHT, BOTTOM, CENTER, WIDTH, ROW_SPAN, COL_SPAN\n} from '../enums/constants';\nimport { BLANK_BORDERS } from './defaults';\n\n/**\n * Creates a table element of the layout\n *\n * @param {Object} mount Mount point for table elements\n * @param {string} className defines class name\n * @param {Array} rowData set of rows for the table\n * @return {Selection} set of selections for the table\n */\nfunction renderTable (mount, className, rowData) {\n const table = makeElement(mount, 'table', ['layout'], `${className}-table`);\n const body = makeElement(table, 'tbody', ['layout'], `${className}-body`);\n const rows = makeElement(body, 'tr', rowData, `${className}-tr`);\n const cells = makeElement(rows, 'td', (d, i) => d.filter(e => e !== null && e.config().show).map(e =>\n ({ placeholder: e, rowIndex: i })), `${className}-td`, {}, key => key.placeholder.id);\n\n return { table, body, rows, cells };\n}\n\nfunction applyRowBorders (cells, borderStyle, showBorders, color) {\n [TOP, BOTTOM].forEach((borderType) => {\n const style = `${borderStyle} ${showBorders[borderType] ? color : BLANK_BORDERS}`;\n cells.style(`border-${borderType}`, style);\n });\n}\n\nfunction applyColBorders (cells, borderStyle, showBorders, color) {\n [LEFT, RIGHT].forEach((borderType) => {\n const style = `${borderStyle} ${showBorders[borderType] ? color : BLANK_BORDERS}`;\n cells.style(`border-${borderType}`, style);\n });\n}\n\n/**\n * Applies borders to the cells in a matrix\n *\n * @param {Selection} cells Set of cells made from the matrix\n * @param {Object} border Border info for layout\n * @param {string} type Type of matrix(top/center/bottom)\n * @param {number} index Column index of matrix in the row\n */\nfunction applyBorders (cells, border, type, index) {\n const {\n width,\n style,\n color,\n showRowBorders,\n showColBorders,\n showValueBorders\n } = border;\n const borderStyle = `${width}px ${style}`;\n\n if (type === CENTER && index === 1) {\n [TOP, BOTTOM, LEFT, RIGHT].forEach((borderType) => {\n cells.style(`border-${borderType}`, `${borderStyle} ${showValueBorders[borderType] ?\n color : BLANK_BORDERS}`);\n });\n } else if (type === CENTER) {\n applyRowBorders(cells, borderStyle, showRowBorders, color);\n } else if (index === 1) {\n applyColBorders(cells, borderStyle, showColBorders, color);\n }\n}\n\n/**\n * Renders a set of matrices in a row\n *\n * @param {Array} matrices Set of matrices in a row\n * @param {Selection} mountPoint Mount point for the row\n * @param {string} type top/center/bottom\n * @param {Object} dimensions dimensions of the matrix\n */\nfunction renderMatrix (matrices, mountPoint, type, dimensions, classPrefix) {\n matrices.forEach((matrix, index) => {\n if (dimensions.viewWidth[index]) {\n // Creating containers for each matrix individually\n const containerForMatrix = makeElement(mountPoint, 'div', [1], `${classPrefix}-grid-${type}-${index + 1}`)\n .classed(`${classPrefix}-grid-${type}`, true)\n .classed(`${classPrefix}-grid`, true);\n\n const {\n viewMatrix,\n spans\n } = cellSpanMaker(matrix, type, index);\n\n // Rendering the table components\n const { cells } = renderTable(containerForMatrix, `${classPrefix}-grid`, viewMatrix);\n\n if (type === CENTER && spans) {\n cells.attr(ROW_SPAN, function (cell, colIndex) {\n const placeholder = cell.placeholder;\n selectElement(this).style('height', `${placeholder.availHeight() + dimensions.border.width}px`);\n return spans[cell.rowIndex][colIndex];\n });\n } else if ((type === TOP || type === BOTTOM) && index === 1) {\n cells.attr(COL_SPAN, function (cell, colIndex) {\n const span = spans[cell.rowIndex][colIndex];\n const placeholder = cell.placeholder;\n if (span > 1) {\n placeholder.setAvailableSpace(0, placeholder.availHeight());\n }\n selectElement(this).style('height', `${placeholder.availHeight()}px`);\n return span;\n });\n }\n // Rendering content within placeholders\n cells.each(function (cell) {\n cell.placeholder && cell.placeholder.render(this);\n }).exit().each((cell) => {\n cell.placeholder && cell.placeholder.remove();\n });\n\n applyBorders(cells, dimensions.border, type, index);\n }\n });\n}\n\n/**\n * Renders all the matrices of the layout\n *\n * @export\n * @param {Array} matrices Set of matrices in the layout\n * @param {Array} mountPoints Mount points for each row of matrix\n * @param {Array} layoutDimensions Dimensions(height/width) of all the matrices\n */\nexport function renderMatrices (context, matrices, layoutDimensions) {\n const {\n top,\n center,\n bottom\n } = matrices;\n const {\n classPrefix\n } = context.config();\n const {\n width\n } = context.measurement();\n const mount = context.mountPoint();\n\n const data = [\n { type: TOP, matrix: top },\n { type: CENTER, matrix: center },\n { type: BOTTOM, matrix: bottom }\n ];\n makeElement(mount, 'div', data, `${classPrefix}-grid-layout-row`)\n .each(function (d, i) {\n const row = selectElement(this);\n row.classed(`${classPrefix}-grid-layout-row-${i}`, true);\n renderMatrix(d.matrix, row, d.type, layoutDimensions, classPrefix);\n })\n .style(WIDTH, `${Math.ceil(width)}px`);\n}\n","/**\n * This file exports utility functions that are used across the layout module\n */\nimport { Symbols } from 'muze-utils';\nimport { PRIMARY, SECONDARY, HEIGHT, WIDTH } from '../enums/constants';\n\nconst nest = Symbols.nest;\n/**\n *\n *\n * @param {*} isTransposed\n * @returns\n */\nconst getMeasureInfo = (isTransposed) => {\n if (isTransposed) {\n return {\n firstMeasure: HEIGHT,\n secondMeasure: WIDTH\n };\n }\n return {\n firstMeasure: WIDTH,\n secondMeasure: HEIGHT\n };\n};\n\n/**\n *\n *\n * @param {*} i\n * @param {*} page\n * @returns\n */\nconst findInPage = (i, page) => {\n let count = 0;\n for (const x in page) {\n if (i < page[x]) {\n count = x;\n break;\n }\n }\n return count;\n};\n\n/**\n * Creates a single matrix from two matrices\n *\n * @param {Array} matrix Input matrix\n * @return {Array} Joined matrix\n * @memberof VisualMatrix\n */\nexport const combineMatrices = (matrix, config) => {\n const { isTransposed } = config;\n let joinedMatrix = matrix[0].length > 0 ? matrix[0] : matrix[1];\n if (isTransposed) {\n joinedMatrix = matrix[0].length > 0 ? [...matrix[0]] : [];\n joinedMatrix = matrix[1].length > 0 ? [...joinedMatrix, ...matrix[1]] : joinedMatrix;\n } else {\n joinedMatrix = joinedMatrix.map((row, rowIndex) => {\n let rowData = [];\n if (matrix[0].length > 0) {\n rowData = [...matrix[0][rowIndex]];\n }\n if (matrix[1].length > 0) {\n rowData = [...rowData, ...matrix[1][rowIndex]];\n }\n return rowData;\n });\n }\n return joinedMatrix;\n};\n\n/**\n * Creates a hirachical tree from the context\n *\n * @param {Object} context context for creating tree\n * @return {Object} nested tree\n */\nexport const createTree = (context) => {\n let matrixTree = {};\n let lastLevelKey = 0;\n let facet = PRIMARY;\n const nestFn = nest();\n const keys = [];\n const layoutMatrix = context._layoutMatrix;\n const primaryMatrix = context.primaryMatrix();\n const secondaryMatrix = context.secondaryMatrix();\n const { isTransposed, breakPage } = context.config();\n\n if (!isTransposed) {\n if (primaryMatrix.length === 0) {\n facet = PRIMARY;\n } else if (secondaryMatrix.length === 0) {\n facet = SECONDARY;\n } else {\n facet = primaryMatrix.length >= secondaryMatrix.length ? PRIMARY : SECONDARY;\n }\n if (primaryMatrix.length > 0) {\n for (let i = 0; i < primaryMatrix[0].length - 1; i++) {\n keys.push(i);\n }\n keys.push(primaryMatrix[0].length - 1);\n if (facet === SECONDARY || secondaryMatrix.length === 0) {\n lastLevelKey = primaryMatrix[0].length - 1;\n }\n }\n if (secondaryMatrix.length > 0) {\n const keyLength = primaryMatrix.length > 0 ? primaryMatrix[0].length : 0;\n for (let i = secondaryMatrix[0].length - 1; i > 0; i--) {\n keys.push(i + keyLength);\n }\n keys.push(keyLength);\n\n if (facet === PRIMARY) {\n lastLevelKey = keyLength;\n }\n } else {\n lastLevelKey = primaryMatrix.length > 0 ? primaryMatrix[0].length - 1 : 0;\n }\n keys.forEach((key) => {\n let counter = -1;\n return nestFn.key((d) => {\n counter++;\n return `${d[key].valueOf()}-${findInPage(counter, breakPage)}`;\n });\n });\n matrixTree = nestFn.entries(layoutMatrix);\n } else {\n if (primaryMatrix.length === 0) {\n facet = PRIMARY;\n } else if (secondaryMatrix.length === 0) {\n facet = SECONDARY;\n } else {\n facet = primaryMatrix.length >= secondaryMatrix.length ? PRIMARY : SECONDARY;\n }\n if (primaryMatrix.length > 0) {\n for (let i = 0; i < primaryMatrix.length - 1; i++) {\n keys.push(i);\n }\n // if (facet === PRIMARY) {\n keys.push(primaryMatrix.length - 1);\n // } else {\n if (facet === SECONDARY) {\n lastLevelKey = primaryMatrix.length - 1;\n }\n }\n if (secondaryMatrix.length > 0) {\n const primaryMatrixLength = primaryMatrix.length;\n for (let i = secondaryMatrix.length - 1; i > 0; i--) {\n keys.push(i + primaryMatrixLength);\n }\n // if (facet === SECONDARY) {\n keys.push(primaryMatrixLength);\n // }\n if (facet === PRIMARY) {\n lastLevelKey = primaryMatrixLength;\n }\n }\n keys.forEach((key) => {\n let counter = -1;\n return nestFn.key((d) => {\n counter++;\n return `${d[key].valueOf()}-${findInPage(counter, breakPage)}`;\n });\n });\n let newMatrix = [];\n newMatrix = layoutMatrix[0].map((col, colIndex) => layoutMatrix.map(row => row[colIndex]));\n matrixTree = nestFn.entries(newMatrix);\n }\n return { tree: matrixTree, lastLevelKey };\n};\n\n/**\n * Gives the min measues\n *\n * @param {boolean} isTransposed is column matrix\n * @param {Object} unitMeasures min measures to be given to cells\n * @return {Object} dimension min cell\n */\nexport const getMinMeasures = (isTransposed, unitMeasures) => {\n if (!isTransposed) {\n return {\n height: unitMeasures.height,\n width: 0\n };\n }\n return {\n height: 0,\n width: unitMeasures.width\n };\n};\n\n/**\n * Get the logical space from the tree\n *\n * @param {Node} item tree to be calculated\n * @param {number} measures width and height\n * @param {Array} minMeasures min measures for a cell\n * @param {Array} maxMeasure max measures for a col/row\n * @return {Object} dimension\n */\nexport const getLogicalSpace = (item, measures, minMeasures, maxMeasure = []) => {\n const { firstMeasure, secondMeasure } = measures;\n let firstMeasureValue = 0;\n let secondMeasureValue = 0;\n item.values.forEach((valueArray) => {\n let fMeasure = 0;\n let sMeasure = 0;\n valueArray.forEach((placeholder, colIndex) => {\n placeholder.logicalSpace(null);\n const space = placeholder.getLogicalSpace();\n sMeasure = Math.max(sMeasure, +space[secondMeasure], minMeasures[secondMeasure]);\n maxMeasure[colIndex] = Math.max(maxMeasure[colIndex] || 0, space[firstMeasure]);\n fMeasure += +maxMeasure[colIndex];\n });\n secondMeasureValue += sMeasure;\n firstMeasureValue = Math.max(firstMeasureValue, fMeasure);\n item.space = {\n [secondMeasure]: Math.ceil(secondMeasureValue),\n [firstMeasure]: Math.ceil(firstMeasureValue)\n };\n });\n return {\n [secondMeasure]: secondMeasureValue,\n [firstMeasure]: firstMeasureValue\n };\n};\n\n/**\n * Computes the logical spcae taken by the matrix tree\n *\n * @param {*} [item={}] tree to be viewed\n * @param {boolean} [isTransposed=false] is column matrix\n * @param {*} unitMeasures min measues for a cell\n * @param {Array} maxMeasure max measures for a col/row\n * @return {Object} logical space taken\n */\nexport const computeLogicalSpace = (item = {}, config, maxMeasures) => {\n const { isTransposed = false, unitMeasures } = config;\n const { firstMeasure, secondMeasure } = getMeasureInfo(isTransposed);\n const { values } = item;\n const minMeasures = getMinMeasures(isTransposed, unitMeasures);\n if (values[0].key) {\n const logicalSpace = { [firstMeasure]: 0, [secondMeasure]: 0 };\n\n values.forEach((valueItem) => {\n // Compute logical space for lowest level\n const space = computeLogicalSpace(valueItem, config, maxMeasures);\n // Set logical space for first measure\n logicalSpace[firstMeasure] = Math.max(logicalSpace[firstMeasure], space[firstMeasure],\n minMeasures[firstMeasure]);\n // Set logical space for second measure\n logicalSpace[secondMeasure] += +space[secondMeasure];\n });\n item.space = logicalSpace;\n return logicalSpace;\n }\n return getLogicalSpace(item, { firstMeasure, secondMeasure }, minMeasures, maxMeasures);\n};\n\n/**\n * Gives the space taken by a row\n *\n * @param {Array} row matrix array of rows\n * @return {Object} dimension of the row\n */\nexport const spaceTakenByRow = (row) => {\n let height = 0;\n let width = 0;\n row.forEach((col) => {\n const spaces = col.getLogicalSpace();\n height = Math.max(height, spaces.height);\n width += spaces.width;\n });\n return {\n width,\n height\n };\n};\n\n/**\n * Gives the space taken by a column\n *\n * @param {Array} matrix column matrix\n * @param {number} colIndex column index\n * @return {Object} dimension of the column\n */\nexport const spaceTakenByColumn = (matrix, colIndex) => {\n let height = 0;\n let width = 0;\n matrix.forEach((row) => {\n const col = row[colIndex];\n const spaces = col.getLogicalSpace();\n width = Math.max(width, spaces.width);\n height += spaces.height;\n });\n return {\n width,\n height\n };\n};\n\n/**\n * Creates different level matrices\n *\n * @param {Object} item matrix tree\n * @param {boolean} isTransposed is column matrix\n * @return {Object} matrix of each level\n */\nexport const createMatrixEachLevel = (item, isTransposed) => {\n if (item.values[0].key) {\n const arr = [];\n item.values.forEach((child) => {\n if (!isTransposed) {\n arr.push(...createMatrixEachLevel(child, isTransposed));\n } else {\n const eachLevel = createMatrixEachLevel(child, isTransposed);\n eachLevel.forEach((e, i) => {\n arr[i] = arr[i] || [];\n arr[i].push(...e);\n });\n }\n });\n item.matrix = arr;\n return arr;\n }\n if (!isTransposed) {\n item.matrix = item.values;\n } else {\n item.matrix = item.values[0].map((col, colIndex) => item.values.map(row => row[colIndex]));\n }\n return item.matrix;\n};\n\n/**\n * Breaks the matrix into two part\n *\n * @param {Array} matrix input matrix\n * @param {boolean} isTransposed is column matrix\n * @param {number} breakPointer point in matrix where it is to be broken\n * @return {Array} two broken matrix\n */\nexport const breakMatrix = (matrix, isTransposed, breakPointer) => {\n const primaryMatrix = [];\n const secondaryMatrix = [];\n if (isTransposed) {\n matrix.forEach((row, rowIndex) => {\n if (rowIndex >= breakPointer) {\n secondaryMatrix.push(row);\n } else {\n primaryMatrix.push(row);\n }\n });\n } else {\n matrix.forEach((row, rowIndex) => {\n row.forEach((column, columnIndex) => {\n if (columnIndex >= breakPointer) {\n secondaryMatrix[rowIndex] = secondaryMatrix[rowIndex] || [];\n secondaryMatrix[rowIndex].push(column);\n } else {\n primaryMatrix[rowIndex] = primaryMatrix[rowIndex] || [];\n primaryMatrix[rowIndex].push(column);\n }\n });\n });\n }\n return [primaryMatrix, secondaryMatrix];\n};\n\n/**\n * Distributed width returned\n *\n * @param {Object} context context for the width distibution\n * @return {number} distributed widths\n */\nexport const getDistributedWidth = (context, layoutConfig) => {\n const {\n availableWidth,\n width,\n row\n } = context;\n const {\n isDistributionEqual,\n isTransposed,\n distribution\n } = layoutConfig;\n let distSum = 0;\n if (distribution && distribution[0]) {\n distSum = distribution.reduce((t, n) => {\n t += n;\n return t;\n });\n }\n return row.map((col, colIndex) => {\n const space = col.getLogicalSpace().width;\n let distWidth = (space + (availableWidth - width) * (space / width));\n if (isTransposed) {\n if (distribution.length > 0) {\n distWidth = (availableWidth * distribution[colIndex] / distSum);\n } else if (isDistributionEqual || width === 0) {\n const rowLen = row.length;\n distWidth = (availableWidth / rowLen);\n }\n }\n return Math.floor(distWidth);\n });\n};\n\n/**\n * Distributeed heights returned\n *\n * @param {Object} context input for the height distribution\n * @return {Object} distribured heights\n */\nexport const getDistributedHeight = (context) => {\n let distSum = 0;\n let gutterSum = 0;\n let heightWithoutGutter = 0;\n const {\n isTransposed,\n distribution,\n availableHeight,\n height,\n isDistributionEqual,\n gutter,\n matrix,\n cIdx\n } = context;\n\n if (distribution && distribution[0] !== undefined) {\n distSum = distribution.reduce((t, n) => {\n t += n;\n return t;\n });\n }\n if (gutter && gutter[0] !== undefined) {\n gutterSum = gutter.reduce((t, n) => {\n t += n;\n return t;\n });\n }\n heightWithoutGutter = availableHeight - Math.floor(availableHeight * gutterSum);\n\n const colLen = matrix.length;\n return matrix.map((row, rIdx) => {\n const col = row[cIdx];\n const space = col.getLogicalSpace().height;\n let distHeight = (space + (heightWithoutGutter - height) * (space / height));\n\n if (!isTransposed) {\n if (distribution.length > 0 && colLen === distribution.length) {\n distHeight = (heightWithoutGutter * distribution[rIdx] / distSum);\n } else if (isDistributionEqual || context.height === 0) {\n distHeight = (heightWithoutGutter / colLen);\n }\n }\n return Math.floor(distHeight);\n });\n};\n\n/**\n *\n *\n * @param {*} arr\n * @param {*} beg\n * @param {*} end\n */\nexport const extraCellsRemover = (arr, beg, end) => arr.slice(beg, -end);\n\n/**\n * Creates matrix instancess\n *\n * @param {Array} [arr=[]] mutated arry\n * @param {number} depth depth of the tree\n * @param {Array} matrixInfo Details about the matrix(tree, etc) to be inserted\n * @param {boolean} layout Instance of layout\n */\nexport const createMatrixInstances = (arr = [], depth, matrixInfo, layout) => {\n const breakPointer = layout._breakPointer;\n const config = layout.config();\n const {\n isTransposed\n } = config;\n const {\n tree,\n layoutMatrix\n } = matrixInfo;\n\n if (depth === 0) {\n const brokenMatrix = breakMatrix(tree.matrix, isTransposed, breakPointer);\n arr.push({\n matrix: tree.matrix,\n primaryMatrix: brokenMatrix[0],\n secondaryMatrix: brokenMatrix[1],\n space: tree.space\n });\n return arr;\n }\n const nextLevel = depth - 1;\n tree.values.forEach((e) => {\n createMatrixInstances(arr, nextLevel, {\n tree: e,\n layoutMatrix\n }, layout);\n });\n return arr;\n};\n","import { mergeRecursive } from 'muze-utils';\n\nexport const PROPS = {\n config: {\n sanitization: (context, value) => mergeRecursive(context._config || {}, value)\n },\n maxMeasures: {},\n availableSpace: {},\n logicalSpace: {}\n};\n","import { PRIMARY } from '../enums/constants';\n/**\n *\n *\n */\nexport const defaultConfig = {\n distribution: [],\n classPrefix: 'muze',\n isDistributionEqual: true,\n unitMeasures: {\n height: 100,\n width: 100,\n border: 1\n },\n isTransposed: false,\n facet: PRIMARY,\n extraCellLengths: []\n};\n","import { mergeRecursive, generateGetterSetters } from 'muze-utils';\nimport {\n createTree,\n extraCellsRemover,\n combineMatrices,\n spaceTakenByColumn,\n getDistributedHeight,\n getDistributedWidth,\n spaceTakenByRow,\n computeLogicalSpace,\n createMatrixEachLevel,\n createMatrixInstances\n } from '../utils';\nimport { PROPS } from './props';\nimport { COLUMN_ROOT, ROW_ROOT, HEIGHT, WIDTH } from '../enums/constants';\nimport { defaultConfig } from './default-config';\n\n/**\n * This class used to create column / row matrix for GridLayout\n *\n * @class VisualMatrix\n */\nexport default class VisualMatrix {\n\n /**\n *Creates an instance of VisualMatrix.\n * @param {any} matrix Two set of matrices\n * @param {any} [config={}] Configuration for VisualMatrix\n * @memberof VisualMatrix\n */\n constructor (matrix, config = {}) {\n // Prepare matrices\n this._lastLevelKey = 0;\n this._primaryMatrix = matrix[0] || [];\n this._secondaryMatrix = matrix[1] || [];\n this._maxMeasures = [];\n this._availableSpace = {};\n\n // Store the config\n generateGetterSetters(this, PROPS);\n const defCon = Object.assign({}, this.constructor.defaultConfig());\n this.config(mergeRecursive(defCon, config));\n\n this._breakPointer = this.config().isTransposed ? matrix[0].length :\n (matrix[0].length > 0 ? matrix[0][0].length : 0);\n this._layoutMatrix = combineMatrices([matrix[0] || [], matrix[1] || []], this.config());\n\n // Create Tree\n this._tree = {\n key: this.config().isTransposed ? COLUMN_ROOT : ROW_ROOT,\n values: this.createTree()\n };\n this._logicalSpace = this.setLogicalSpace();\n }\n\n /**\n *\n *\n * @param {*} params\n * @returns\n * @memberof VisualMatrix\n */\n primaryMatrix (...params) {\n if (params.length) {\n return this;\n }\n return this._primaryMatrix;\n }\n\n /**\n *\n *\n * @param {*} params\n * @returns\n * @memberof VisualMatrix\n */\n secondaryMatrix (...params) {\n if (params.length) {\n return this;\n }\n return this._secondaryMatrix;\n }\n\n /**\n *\n *\n * @param {*} params\n * @returns\n * @memberof VisualMatrix\n */\n tree (...params) {\n if (params.length) {\n return this;\n }\n return this._tree;\n }\n\n /**\n *\n *\n * @static\n * @return\n * @memberof VisualMatrix\n */\n static defaultConfig () {\n return defaultConfig;\n }\n\n /**\n *\n *\n * @return\n * @memberof VisualMatrix\n */\n createTree () {\n const { tree, lastLevelKey } = createTree(this);\n this._lastLevelKey = lastLevelKey;\n return tree;\n }\n\n /**\n * Computes the logical space taken by the entire matrixTree\n *\n * @return {Object} Logical space taken\n * @memberof VisualMatrix\n */\n setLogicalSpace () {\n const {\n isTransposed\n } = this.config();\n const matrixTree = this.tree();\n createMatrixEachLevel(matrixTree, isTransposed);\n return computeLogicalSpace(matrixTree, this.config(), this.maxMeasures());\n }\n\n /**\n * Returns the space taken by visual matrix\n *\n * @return {Object} space taken by the matrix\n * @memberof VisualMatrix\n */\n getLogicalSpace () {\n return this.logicalSpace();\n }\n\n /**\n * Sets the provied space to the visual matrix\n *\n * @param {number} width width provided\n * @param {number} height height provided\n * @memberof VisualMatrix\n */\n setAvailableSpace (width, height) {\n this.availableSpace({ width, height });\n const tree = this.tree();\n const heightMeasures = this.populateMaxMeasures(HEIGHT, tree);\n const widthMeasures = this.populateMaxMeasures(WIDTH, tree);\n const depth = this.calculateDepth(widthMeasures, heightMeasures);\n\n this.viewableMatrix = this.createViewPortMatrix(depth);\n this.viewableMeasures = this.redistribute(this.viewableMatrix, width, height);\n return this;\n }\n\n /**\n * Populate the max measures in the array\n *\n * @param {Array} measures array to be filled with max measures\n * @param {Object} matrixTree matrix tree of visual matrix\n * @param {number} measure width or height\n * @param {number} [depth=0] depth of the tree that to be calculated\n * @memberof VisualMatrix\n */\n populateMaxMeasures (type, matrixTree, depth = 0, measures = []) {\n measures[depth] = Math.max(measures[depth] || 0, matrixTree.space[type]);\n if (matrixTree.values) {\n const childDepth = depth + 1;\n matrixTree.values.forEach((child) => {\n if (child.space) {\n measures = this.populateMaxMeasures(type, child, childDepth, measures);\n }\n });\n }\n return measures;\n }\n\n /**\n * Calculates the depth of the tree that can be viewed\n *\n * @param {Array} widthMeasures array of widths\n * @param {Array} heightMeasures array of heights\n * @return {number} depth of the tree\n * @memberof VisualMatrix\n */\n calculateDepth (widthMeasures, heightMeasures) {\n let i;\n let j;\n const { height, width } = this.availableSpace();\n\n for (i = 0; i < heightMeasures.length; i++) {\n if (heightMeasures[i] <= height) break;\n }\n for (j = 0; j < widthMeasures.length; j++) {\n if (widthMeasures[j] <= width) break;\n }\n return Math.min(widthMeasures.length - 1, Math.max(i, j));\n }\n\n /**\n * Redistributes the provied space to all cells\n *\n * @param {*} viewableMatrix current viewport matrix\n * @param {*} width provied width\n * @param {*} height provied height\n * @return {Object} current viewports matrixes with measures\n * @memberof VisualMatrix\n */\n redistribute (viewableMatrix, width, height) {\n let maxHeights = [];\n let maxWidths = [];\n const {\n isTransposed\n } = this.config();\n\n viewableMatrix.forEach((matrixInst) => {\n const matrix = matrixInst.matrix;\n const mWidth = 0;\n const mHeight = 0;\n const options = { mWidth, mHeight, matrix, width, height, maxHeights, maxWidths };\n const maxMeasures = isTransposed ? this.redistributeColumnWise(options) : this.redistributeRowWise(options);\n maxWidths = maxMeasures.maxWidths;\n maxHeights = maxMeasures.maxHeights;\n });\n\n const measurements = viewableMatrix.map((matrixInst, i) => {\n let heightMeasures;\n let columnMeasures;\n const cellDimOptions = { matrixInst, maxWidths, maxHeights, matrixIndex: i };\n const { heights, widths, rowHeights, columnWidths } = this.getCellDimensions(cellDimOptions);\n\n if (!isTransposed) {\n heightMeasures = [height, height];\n columnMeasures = widths;\n } else {\n heightMeasures = heights;\n columnMeasures = [width, width];\n }\n return {\n rowHeights: {\n primary: rowHeights[0],\n secondary: rowHeights[1]\n },\n columnWidths: {\n primary: columnWidths[0],\n secondary: columnWidths[1]\n },\n height: {\n primary: heightMeasures[0],\n secondary: heightMeasures[1]\n },\n width: {\n primary: columnMeasures[0],\n secondary: columnMeasures[1]\n }\n };\n });\n\n return measurements;\n }\n\n /**\n * Gets the viewable measures for the current viewable matrix\n *\n * @return {Object} Set of viewable measures\n * @memberof VisualMatrix\n */\n getViewableSpaces () {\n return this.viewableMeasures;\n }\n\n /**\n * Returns the matrix that can be viewed in the current viewport\n *\n * @return {Array} Set of matrices that can be viewed\n * @memberof VisualMatrix\n */\n getViewableData () {\n return this.viewableMatrix;\n }\n\n /**\n *\n *\n * @return\n * @memberof VisualMatrix\n */\n removeExtraCells () {\n const {\n isTransposed,\n extraCellLengths\n } = this.config();\n const matrix = this._layoutMatrix;\n const tree = mergeRecursive({}, this.tree());\n const begCellLen = extraCellLengths[0];\n const endCellLen = extraCellLengths[1] || Number.NEGATIVE_INFINITY;\n const layoutMatrix = !isTransposed ? extraCellsRemover(matrix, begCellLen, endCellLen) :\n matrix.slice(0).map(e => extraCellsRemover(e, begCellLen, endCellLen));\n\n tree.values = extraCellsRemover(tree.values, begCellLen, endCellLen);\n if (!isTransposed) {\n tree.matrix = extraCellsRemover(tree.matrix, begCellLen, endCellLen);\n } else {\n tree.matrix = tree.matrix.map(e => extraCellsRemover(e, begCellLen, endCellLen));\n }\n return {\n tree,\n layoutMatrix\n };\n }\n\n /**\n * Creates the viewport that can be viewed together\n *\n * @param {number} depth maxDepth that can be viewed in the viewport\n * @return {Array} Set of matrices that can be viewed\n * @memberof VisualMatrix\n */\n createViewPortMatrix (depth) {\n const arr = [];\n createMatrixInstances(arr, depth, this.removeExtraCells(), this);\n return arr;\n }\n\n /**\n * Distibutes the given space row wisely\n *\n * @param {Object} options Redistribution information\n * @memberof VisualMatrix\n */\n redistributeRowWise (options) {\n let cWidths = [];\n let rHeights = [];\n let mHeight = 0;\n const maxMeasures = this.maxMeasures();\n const {\n isDistributionEqual,\n distribution,\n isTransposed,\n gutter\n } = this.config();\n const { matrix, width, height, maxHeights, maxWidths } = options;\n\n mHeight = spaceTakenByColumn(matrix, this._lastLevelKey).height;\n\n const maxWidth = maxMeasures.reduce((t, n) => {\n t += n;\n return t;\n });\n if (maxWidth > 0) {\n cWidths = maxMeasures.map(space => space + (width - maxWidth) * (space / maxWidth));\n } else {\n cWidths = maxMeasures.map(() => 0);\n }\n rHeights = getDistributedHeight({\n matrix,\n cIdx: this._lastLevelKey,\n height: mHeight,\n availableHeight: height,\n isDistributionEqual,\n distribution,\n isTransposed,\n gutter\n });\n maxWidths.push(cWidths);\n maxHeights.push(rHeights);\n return { maxWidths, maxHeights };\n }\n\n /**\n * Distibutes the given space column wisely\n *\n * @param {Object} options Redistribution information\n * @memberof VisualMatrix\n */\n redistributeColumnWise (options) {\n let rHeights = [];\n const { matrix, width, maxHeights, maxWidths } = options;\n const borderWidth = this.config().unitMeasures.border;\n const mWidth = spaceTakenByRow(matrix[this._lastLevelKey]).width;\n const cWidths = getDistributedWidth({\n row: matrix[this._lastLevelKey],\n width: mWidth,\n availableWidth: width\n }, this.config());\n\n matrix.forEach((row, rIdx) => row.forEach((col, cIdx) => {\n const oldLogicalSpace = col.getLogicalSpace().height;\n col.setAvailableSpace(cWidths[cIdx] - borderWidth, oldLogicalSpace);\n rHeights[rIdx] = Math.max(rHeights[rIdx] || 0, col.getLogicalSpace().height);\n }));\n\n if (maxHeights.length > 0) {\n rHeights = rHeights.map((e, i) => Math.max(e, maxHeights[0][i]));\n }\n\n maxHeights.push(rHeights);\n\n for (let x = 0; x < maxHeights.length; x++) {\n maxHeights[x] = rHeights;\n }\n maxWidths.push(cWidths);\n return { maxHeights, maxWidths };\n }\n\n /**\n * Dispatch the calculated cell dimensions to all the cells\n *\n * @param {Object} options cell dimension information\n * @return {Object} row and column heights / widths\n * @memberof VisualMatrix\n */\n getCellDimensions (options) {\n let indices = [];\n let unitMeasures = [];\n let mainMeasures = [];\n let computedMeasures = [];\n const {\n isTransposed,\n unitMeasures: measures\n } = this.config();\n const borderWidth = measures.border;\n const { matrixInst, maxWidths, maxHeights, matrixIndex } = options;\n const matrix = matrixInst.matrix;\n const rowHeights = [[0], [0]];\n const columnWidths = [[0], [0]];\n const heights = [0, 0];\n const widths = [0, 0];\n const breakPointer = this._breakPointer;\n\n matrix.forEach((row, rIdx) => {\n row.forEach((cell, cIdx) => {\n const colHeight = maxHeights[matrixIndex][rIdx] || 0;\n const colWidth = maxWidths[matrixIndex][cIdx];\n\n if (!isTransposed) {\n cell.setAvailableSpace(colWidth, colHeight - borderWidth);\n indices = [rIdx, cIdx];\n unitMeasures = [columnWidths, rowHeights];\n mainMeasures = [widths, heights];\n computedMeasures = [colWidth, colHeight];\n } else {\n cell.setAvailableSpace(colWidth - borderWidth, colHeight);\n indices = [cIdx, rIdx];\n unitMeasures = [rowHeights, columnWidths];\n mainMeasures = [heights, widths];\n computedMeasures = [colHeight, colWidth];\n }\n\n if (indices[0] === 0 && indices[1] < breakPointer) {\n unitMeasures[0][0][indices[1]] = computedMeasures[0];\n mainMeasures[0][0] = (mainMeasures[0][0] || 0) + computedMeasures[0];\n } else if (indices[0] === 0 && indices[1] >= breakPointer) {\n unitMeasures[0][1][indices[1] - breakPointer] = computedMeasures[0];\n mainMeasures[0][1] = (mainMeasures[0][1] || 0) + computedMeasures[0];\n }\n if (indices[1] === this._lastLevelKey) {\n unitMeasures[1][0][indices[0]] = computedMeasures[1];\n unitMeasures[1][1][indices[0]] = computedMeasures[1];\n }\n });\n });\n return {\n heights,\n widths,\n rowHeights,\n columnWidths\n };\n }\n}\n\n","import { HEIGHT, WIDTH, COLUMN, ROW } from '../enums/constants';\n\n/**\n * Gets measurement for an instance of visual matrix\n *\n * @param {Array} matrix instance of visual matrix\n * @param {string} type height/width\n * @return {Object} Logical height/width of the matrix\n */\nexport function getMatrixMeasurement (matrix, type) {\n if (matrix) {\n return matrix.getLogicalSpace()[type];\n }\n return 0;\n}\n\n/**\n * Sets available space for an instance of visual matrix\n *\n * @param {Array} matrix instance of visual matrix\n * @param {string} type height/width\n * @param {number} value Value of measurement\n */\nexport function setMatrixMeasurement (matrix, type, value) {\n if (matrix) {\n const spaces = matrix.getLogicalSpace();\n if (value && spaces[type] !== value) {\n type === HEIGHT ? matrix.setAvailableSpace(spaces.width, value) :\n matrix.setAvailableSpace(value, spaces.height);\n }\n }\n}\n\n/**\n *\n *\n * @param {*} matrix\n * @param {*} widths\n * @param {*} heights\n */\nconst setAvailableSpace = (matrix, widths, heights) => {\n matrix.forEach((row, rIdx) => {\n row.forEach((placeholder, cIdx) => {\n placeholder.setAvailableSpace(widths[cIdx], heights[rIdx]);\n });\n });\n};\n\n/**\n *\n *\n * @param {*} layout\n * @param {*} matrix\n * @param {*} pointer\n * @returns\n */\nconst setViewSpaces = (layout, pointerType, viewSpaces) => {\n let pointer = layout.config()[`${pointerType}Pointer`];\n if (viewSpaces.length - 1 < pointer) {\n pointer = 0;\n layout.config({ [`${pointerType}Pointer`]: pointer });\n }\n return pointer;\n};\n\n/**\n * Computes the measurements of space for all matrices in the\n * layout\n *\n * @param {Object} layout Instance of grid layout\n * @return {Object} set of measurements for the layout\n */\nexport const computeLayoutMeasurements = (layout) => {\n const rowMatrix = layout.rowMatrix();\n const columnMatrix = layout.columnMatrix();\n const centerMatrix = layout.centerMatrix();\n const {\n width,\n height\n } = layout.measurement();\n const {\n border\n } = layout.config();\n const matrices = layout.matrices();\n const {\n top,\n bottom\n } = matrices;\n\n // Get width of row matrix\n const rowMatrixWidth = getMatrixMeasurement(rowMatrix, WIDTH);\n\n // Set width for column matrix\n\n // Border adjustment for each cell in the central matrix\n const borderWidth = border.width;\n\n const columnMatrixWidth = width - rowMatrixWidth - borderWidth;\n setMatrixMeasurement(columnMatrix, WIDTH, columnMatrixWidth);\n const columnViewPages = columnMatrix.getViewableSpaces();\n setViewSpaces(layout, COLUMN, columnViewPages);\n\n // Figuring out total space needed by current view space\n const columnViewSpace = columnViewPages[layout.config().columnPointer];\n\n // Getting height of column matrix\n const columnMatrixHeight = columnViewSpace.height.primary + columnViewSpace.height.secondary;\n\n // Set height for row matrix\n const rowMatrixHeight = height - columnMatrixHeight;\n\n setMatrixMeasurement(rowMatrix, HEIGHT, rowMatrixHeight);\n\n // Get heights of each cell of row matrix\n const rowViewableSpaces = rowMatrix.getViewableSpaces();\n setViewSpaces(layout, ROW, rowViewableSpaces);\n const rowHeights = [].concat(...rowViewableSpaces.map(e => e.rowHeights.primary));\n const rowWidthsPrimary = [].concat(...rowViewableSpaces.map(e => e.columnWidths.primary));\n const rowWidthsSecondary = [].concat(...rowViewableSpaces.map(e => e.columnWidths.secondary));\n const columnViewableSpaces = columnMatrix.getViewableSpaces();\n // Get widths of each cell of column matrix\n const columnWidths = [].concat(...columnViewableSpaces.map(e => e.columnWidths.primary));\n const columnHeightsPrimary = columnViewableSpaces[0].rowHeights.primary;\n\n const columnHeightsSecondary = [].concat(...columnViewableSpaces.map(e => e.rowHeights.secondary));\n\n // Setting the available space for each cell in the centre matrix\n centerMatrix.forEach((matrix, rIdx) => {\n matrix.forEach((placeholder, cIdx) => {\n placeholder.setAvailableSpace(columnWidths[cIdx] - borderWidth, rowHeights[rIdx] - borderWidth);\n });\n });\n setAvailableSpace(top[0], rowWidthsPrimary, columnHeightsPrimary);\n setAvailableSpace(top[2], rowWidthsSecondary, columnHeightsPrimary);\n setAvailableSpace(bottom[0], rowWidthsPrimary, columnHeightsSecondary);\n setAvailableSpace(bottom[2], rowWidthsSecondary, columnHeightsSecondary);\n\n return {\n rowMatrixHeight,\n rowMatrixWidth,\n columnMatrixHeight,\n columnMatrixWidth\n };\n};\n\n/**\n * Gets view matrices based on current pointers for row and column\n *\n * @param {Object} layout instance of layout\n * @param {number} rowPointer current row pointer\n * @param {number} columnPointer current column pointer\n * @return {Object} returns the view matrix and its relevant information\n */\nexport const getViewMatrices = (layout, rowPointer, columnPointer) => {\n const rowMatrix = layout.rowMatrix();\n const columnMatrix = layout.columnMatrix();\n const centerMatrix = layout.centerMatrix();\n const matrices = layout.matrices();\n const rowMatrices = rowMatrix.getViewableData();\n const columnMatrices = columnMatrix.getViewableData();\n const centralMatrixPointer = {\n row: 0,\n column: 0\n };\n\n for (let i = rowPointer - 1; i >= 0; i--) {\n const length = Math.max(rowMatrices[i].primaryMatrix.length,\n rowMatrices[i].secondaryMatrix.length);\n centralMatrixPointer.row += length;\n }\n /* istanbul ignore next */\n for (let i = columnPointer - 1; i >= 0; i--) {\n const matrix = columnMatrices[i];\n const { primaryMatrix, secondaryMatrix } = matrix;\n const length = Math.max(primaryMatrix[0] ? primaryMatrix[0].length : 0,\n secondaryMatrix[0] ? secondaryMatrix[0].length : 0);\n centralMatrixPointer.column += length;\n }\n\n matrices.top[1] = columnMatrices[columnPointer].primaryMatrix;\n matrices.bottom[1] = columnMatrices[columnPointer].secondaryMatrix;\n\n matrices.center[0] = rowMatrices[rowPointer].primaryMatrix;\n matrices.center[2] = rowMatrices[rowPointer].secondaryMatrix;\n\n const rowMatrixLen = Math.max(matrices.center[0].length, matrices.center[2].length);\n /* istanbul ignore next */\n const columnMatrixLen = Math.max(matrices.top[1][0] ? matrices.top[1][0].length : 0, matrices.bottom[1][0] ?\n matrices.bottom[1][0].length : 0);\n matrices.center[1] = centerMatrix.slice(centralMatrixPointer.row, centralMatrixPointer.row + rowMatrixLen)\n .map(matrix => matrix.slice(centralMatrixPointer.column, centralMatrixPointer.column + columnMatrixLen));\n\n return {\n matrices,\n rowPages: rowMatrices.length,\n columnPages: columnMatrices.length\n };\n};\n/**\n * Returns measurements of the cells of the current matrix\n *\n * @param {Object} layout instance of layout\n * @return {Object} returns the measurements for current view matrix\n */\nexport const getViewMeasurements = (layout) => {\n const rowMatrix = layout.rowMatrix();\n const columnMatrix = layout.columnMatrix();\n const {\n width,\n height\n } = layout.measurement();\n const {\n columnPointer,\n rowPointer\n } = layout.config();\n\n const rowMatrixWidth = rowMatrix.getViewableSpaces()[rowPointer].width;\n const { primary: leftWidth, secondary: rightWidth } = rowMatrixWidth;\n\n const columnMatrixHeight = columnMatrix.getViewableSpaces()[columnPointer].height;\n const { primary: topHeight, secondary: bottomHeight } = columnMatrixHeight;\n\n const centerHeight = height - (topHeight + bottomHeight);\n const centerWidth = width - (leftWidth + rightWidth);\n\n return {\n viewWidth: [leftWidth, centerWidth, rightWidth],\n viewHeight: [topHeight, centerHeight, bottomHeight]\n };\n};\n","/**\n * This file declares a table that can be extended to create a Datagrid, crosstab\n * and man other visualzations that require a tabular structure.\n */\n\nimport { getUniqueId } from 'muze-utils';\nimport GenericLayout from '../generic-layout';\nimport { DEFAULT_CONFIGURATION, DEFAULT_MEASUREMENTS } from './defaults';\nimport {\n renderMatrices\n} from './renderer';\nimport { generateVisualMatrices } from './layout-helper';\nimport { computeLayoutMeasurements, getViewMeasurements, getViewMatrices } from './computations';\n/**\n * This class is used to create a tabular structure that\n * can house charts and values.\n *\n * @class GridLayout\n */\nexport default class GridLayout extends GenericLayout {\n\n /**\n * Creates an instance of TableLayout.\n * @param {HTMLElement} matrices Set of upto 9 matrices containing the cells to be rendered\n * @param {HTMLElement} mountPoint DOM element/d3 selection where the layout is to be mounted\n * @param {Object} measurement The dimensions of the layout\n * @param {Object} config external configurations.\n * @memberof GenericLayout\n *\n * measurement : {\n * width : number => width of the container\n * height : number => height of the container\n * unitHeight : number => height of unit of the cells\n * unitWidth : number => width of unit of the cells\n * }\n *\n */\n constructor (matrices, mountPoint, measurement, config) {\n super(mountPoint, measurement, config);\n this.matrices(matrices);\n this.config(this.constructor.defaultConfig());\n this._layoutId = getUniqueId();\n }\n\n /**\n * Returns initial set of measurements for the grid layout\n *\n * @static\n * @return {Object} Returns initial set of measurements\n * @memberof GridLayout\n */\n static defaultMeasurement () {\n return DEFAULT_MEASUREMENTS;\n }\n\n /**\n * Returns initialconfiguration for grid layout\n *\n * @static\n * @return {Object} Returns initial configuration for grid layout\n * @memberof GridLayout\n */\n static defaultConfig () {\n return DEFAULT_CONFIGURATION;\n }\n\n /**\n * This function is used to return an instance of GridLayout\n *\n * @return {GridLayout} Instance of grid layout.\n * @static\n * @memberof GridLayout\n */\n static create () {\n return new GridLayout(null, null, this.defaultMeasurement(), this.defaultConfig());\n }\n\n /**\n * Sets/Gets the matrices for the layout\n *\n * @param {Array} matrices Set of matrices\n * @return {Object} Getter/Setter\n * @memberof GridLayout\n */\n matrices (matrices) {\n if (matrices) {\n this._matrices = generateVisualMatrices(this, matrices);\n return this;\n }\n return super.matrices(matrices);\n }\n\n /**\n * Triggers the computations for the layout based on the matrices available\n * This causes a reflow in the entire layout system.\n *\n * @return {Object} Layout instance\n * @memberof GridLayout\n */\n triggerReflow () {\n computeLayoutMeasurements(this);\n this.setViewInformation();\n return this;\n }\n\n /**\n *\n *\n * @param {*} type\n * @param {*} pageNumber\n * @returns\n * @memberof GridLayout\n */\n gotoPage (type, pageNumber) {\n const pageType = type.toLowerCase();\n const { viewMatricesInfo } = this.getViewInformation();\n const totalPages = viewMatricesInfo[`${pageType}Pages`];\n const pointer = Math.min(Math.max(1, pageNumber), totalPages);\n this.config({\n [`${pageType}Pointer`]: pointer - 1\n });\n this.setViewInformation();\n this.renderGrid();\n return this;\n }\n\n /**\n *\n *\n * @param {*} type\n * @returns\n * @memberof GridLayout\n */\n pages (type) {\n const { viewMatricesInfo } = this.getViewInformation();\n const pageType = type.toLowerCase();\n return {\n totalPages: viewMatricesInfo[`${pageType}Pages`],\n currentPage: this.config()[`${pageType}Pointer`] + 1\n };\n }\n\n /**\n *\n *\n * @returns\n * @memberof GridLayout\n */\n setViewInformation () {\n const {\n rowPointer,\n columnPointer,\n border\n } = this.config();\n const viewMatricesInfo = getViewMatrices(this, rowPointer, columnPointer);\n const layoutDimensions = getViewMeasurements(this);\n layoutDimensions.border = border;\n this.viewInfo = {\n viewMatricesInfo,\n layoutDimensions\n };\n return this;\n }\n\n /**\n *\n *\n * @returns\n * @memberof GridLayout\n */\n getViewInformation () {\n return this.viewInfo;\n }\n\n /**\n * Renders the layout\n *\n * @return {Object} current instance\n * @memberof GridLayout\n */\n renderGrid (mountPoint) {\n this.mountPoint(mountPoint);\n if (!this.mountPoint()) {\n return this;\n }\n const {\n viewMatricesInfo,\n layoutDimensions\n } = this.getViewInformation();\n // Render matrices\n renderMatrices(this, viewMatricesInfo.matrices, layoutDimensions);\n return this;\n }\n}\n","import VisualMatrix from '../visual-matrix/visual-matrix';\n\n/**\n * Generates the set of visual matrices for pagination and layouting algorithms\n *\n * @param {*} context\n * @param {*} matrices\n * @returns\n */\nexport const generateVisualMatrices = (context, matrices) => {\n // Set of matrices for layout is generated starting with the left matrix\n let leftMatrix = [];\n let rightMatrix = [];\n let topMatrix = [];\n let bottomMatrix = [];\n let begColCells;\n let endColCells;\n const {\n isRowSizeEqual,\n isColumnSizeEqual,\n gutterSpace,\n distribution,\n border,\n breakPage\n } = context.config();\n const {\n minUnitHeight,\n minUnitWidth\n } = context.measurement();\n const { top, center, bottom } = matrices;\n const [topLeft, topColumns, topRight] = top;\n const [leftRows, valueMatrix, rightRows] = center;\n const [bottomLeft, bottomColumns, bottomRight] = bottom;\n\n if (leftRows.length > 0) {\n // If no left matrix is present, context will be empty\n leftMatrix = [...topLeft, ...leftRows, ...bottomLeft];\n }\n if (rightRows.length > 0) {\n // If no right matrix is present, context will be empty\n rightMatrix = [...topRight, ...rightRows, ...bottomRight];\n }\n if (topColumns.length > 0 && topColumns[0].length > 0) {\n // If no top matrix is present, context will be empty\n topMatrix = topColumns.map((d, i) => [...topLeft[i], ...d, ...topRight[i]]);\n }\n if (bottomColumns.length > 0 && bottomColumns[0].length > 0) {\n // If no bottom matrix is present, context will be empty\n bottomMatrix = bottomColumns.map((d, i) => [...bottomLeft[i], ...d, ...bottomRight[i]]);\n }\n context.rowMatrix(new VisualMatrix([leftMatrix, rightMatrix], {\n isDistributionEqual: isRowSizeEqual,\n distribution: distribution.rows,\n gutter: gutterSpace.rows,\n unitMeasures: {\n width: minUnitWidth,\n height: minUnitHeight,\n border: border.width\n },\n breakPage: breakPage.rows.map(e => e + Math.max(topLeft.length, topRight.length)),\n extraCellLengths: [topLeft.length, bottomLeft.length]\n }));\n\n if (topLeft.length > 0) {\n begColCells = topLeft[0].length;\n } else {\n begColCells = bottomLeft.length > 0 ? bottomLeft[0].length : 0;\n }\n\n if (topRight.length > 0) {\n endColCells = topRight[0].length;\n } else {\n endColCells = bottomRight.length > 0 ? bottomRight[0].length : 0;\n }\n\n context.columnMatrix(new VisualMatrix([topMatrix, bottomMatrix], {\n isDistributionEqual: isColumnSizeEqual,\n distribution: distribution.columns,\n gutter: gutterSpace.columns,\n isTransposed: true,\n unitMeasures: {\n width: minUnitWidth,\n height: minUnitHeight,\n border: border.width\n },\n breakPage: breakPage.columns,\n extraCellLengths: [begColCells, endColCells]\n }));\n context.centerMatrix(valueMatrix);\n\n return matrices;\n};\n","import { ERROR_MSG } from 'muze-utils';\n/**\n * An Interface to be implemented if the transaction support is necessary. This class ensures reactivity to\n * global properties.\n */\nexport default class TransactionSupport {\n /**\n * Property accessor for data member of the class. Data is passed to the system by calling this method.\n */\n data () {\n throw new Error(ERROR_MSG.INTERFACE_IMPl);\n }\n\n /**\n * Property accessor for width of the class. Width is passed as an integer.\n */\n width () {\n throw new Error(ERROR_MSG.INTERFACE_IMPl);\n }\n\n /**\n * Property accessor for height of the class. Height is passed as an integer.\n */\n height () {\n throw new Error(ERROR_MSG.INTERFACE_IMPl);\n }\n\n /**\n * Property accessor for config of the class. Config is passed as an object.\n */\n config () {\n throw new Error(ERROR_MSG.INTERFACE_IMPl);\n }\n}\n","import { TOP, BOTTOM, LEFT, TITLE, SUB_TITLE, GROUP, LAYOUT, LEGEND } from '../constants';\n\n/**\n *\n *\n * @param {*} context\n * @returns\n */\nexport const arrangeComponents = (context) => {\n const legendConfig = context.config().legend;\n const titleConfig = context.title()[1];\n const subtitleConfig = context.subtitle()[1];\n const titleLayouts = {\n [`${TOP}-${TOP}`]: [TITLE, SUB_TITLE, GROUP],\n [`${BOTTOM}-${BOTTOM}`]: [GROUP, SUB_TITLE, TITLE],\n [`${TOP}-${BOTTOM}`]: [TITLE, GROUP, SUB_TITLE],\n [`${BOTTOM}-${TOP}`]: [SUB_TITLE, GROUP, TITLE]\n };\n const legendLayouts = [\n [LEGEND, LAYOUT],\n [LAYOUT, LEGEND]\n ];\n const titlePosition = titleConfig.position || TOP;\n const subtitlePosition = subtitleConfig.position || TOP;\n\n return {\n headers: titleLayouts[`${titlePosition}-${subtitlePosition}`],\n legends: legendConfig.position === LEFT || legendConfig.position === TOP ?\n legendLayouts[0] : legendLayouts[1]\n };\n};\n","/**\n * Flag to specify whether direction is vertical.\n */\nexport const MARGIN = 'margin';\nexport const LEFT = 'left';\nexport const RIGHT = 'right';\nexport const BOTTOM = 'bottom';\nexport const TOP = 'top';\nexport const SPACE_FIXER = 'spaceFixer';\nexport const CLASSPREFIX = 'muze';\nexport const VERTICAL_ALIGN = 'verticalAlign';\nexport const TEXT_ALIGN = 'textAlign';\nexport const IS_OFFSET = 'isOffset';\nexport const MIDDLE = 'middle';\nexport const BASELINE = 'baseline';\nexport const SHOW = 'show';\nexport const CENTER = 'center';\nexport const TEXT = 'text';\nexport const HEADER = 'header';\nexport const HEIGHT = 'height';\nexport const WIDTH = 'width';\nexport const DATA = 'data';\nexport const AXES = 'axes';\nexport const FACET_BY_FIELDS = 'facetByFields';\nexport const FIELDS = 'fields';\nexport const TRANSFORM = 'transform';\nexport const LAYER_DEF = 'layerDef';\nexport const CONFIG = 'config';\nexport const DETAIL_FIELDS = 'detailFields';\n\nexport const TEXT_CELL = 'text-cell';\nexport const AXIS_CELL = 'axis-cell';\nexport const GEOM_CELL = 'geom-cell';\nexport const BLANK_CELL = 'blank-cell';\n","// eneum to refer to simple cell\nexport const SIMPLE = 'simple';\n// eneum to refer to header cell\nexport const TEXT = 'text';\n// enum to refer to axis cell\nexport const AXIS = 'axis';\n// enum to refer to visual cell\nexport const GEOM = 'geom';\n// enum to refer blank cell\nexport const BLANK = 'blank';\n","import {\n ERROR_MSG,\n getUniqueId,\n mergeRecursive\n} from 'muze-utils';\nimport { SIMPLE } from './enums/cell-type';\n\n/**\n * This file declares a class that is used as an interface to create new\n * SimpleCell elements.\n * @module SimpleCell\n */\n/**\n * Base class for all table cells.\n *\n * @interface\n * @class SimpleCell\n */\nclass SimpleCell {\n\n /**\n * Creates an instance of SimpleCell.\n *\n * @param {*} config The input configuration.\n * @memberof SimpleCell\n */\n constructor (config) {\n this._id = getUniqueId();\n\n const defConfig = mergeRecursive({}, this.constructor.defaultConfig());\n this._config = mergeRecursive(defConfig, config || {});\n\n this._mount = null;\n }\n\n /**\n * Returns the type of the placehlder.\n *\n * @readonly\n * @memberof SimpleCell\n */\n get type () {\n return SIMPLE;\n }\n\n /**\n * Returns the type of the placehlder.\n *\n * @readonly\n * @memberof SimpleCell\n * @return {Object} Default config for the placeholder\n */\n static defaultConfig () {\n return {};\n }\n\n /**\n * Returns the value contained by the SimpleCell.\n *\n * @memberof SimpleCell\n */\n valueOf () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Returns a unique identifier for the instance used\n * to control selective rendering.\n *\n * @memberof SimpleCell\n */\n id () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Returns a serialized representation of the instance.\n *\n * @memberof SimpleCell\n */\n serialize () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Returns an object with width and height fields\n * specifying the space taken up by this metod.\n *\n * @memberof SimpleCell\n */\n getLogicalSpace () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Method used to set the space available to render the SimpleCell\n *\n * @param {number} width The available width.\n * @param {number} height The available height.\n * @memberof SimpleCell\n */\n setAvailableSpace () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Render the SimpleCell inthe supplied mount point.\n *\n * @param {HTMLElement} mount The mount point to render in.\n * @memberof SimpleCell\n */\n render () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Render the SimpleCell inthe supplied mount point.\n *\n * @param {HTMLElement} mount The mount point to render in.\n * @memberof SimpleCell\n */\n remove () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n}\n\nexport default SimpleCell;\n","/**\n * This file exports variables that are used as defaults for\n * the placeholders\n */\nimport * as CONSTANTS from './constants';\n\n /**\n * Default Configuration for the cells\n * @return {Object} Default configuration\n */\nexport const DEFAULT_CONFIG = {\n [CONSTANTS.MARGIN]: {\n [CONSTANTS.LEFT]: 0,\n [CONSTANTS.RIGHT]: 0,\n [CONSTANTS.TOP]: 0,\n [CONSTANTS.BOTTOM]: 0\n },\n [CONSTANTS.SPACE_FIXER]: 2,\n [CONSTANTS.IS_OFFSET]: false,\n [CONSTANTS.VERTICAL_ALIGN]: CONSTANTS.TOP,\n [CONSTANTS.TEXT_ALIGN]: CONSTANTS.CENTER,\n [CONSTANTS.SHOW]: true\n};\n","import { mergeRecursive } from 'muze-utils';\nimport { GEOM, TEXT, AXIS, BLANK } from './enums/cell-type';\n\nconst DEFAULT_PROPS = {\n mount: {},\n availHeight: {},\n availWidth: {},\n config: {\n sanitization: (context, value) => mergeRecursive(context._config, value)\n },\n logicalSpace: {},\n source: {}\n};\n\nconst geomProps = {\n data: {},\n caption: {},\n config: {},\n axes: {\n sanitization: (context, value) => Object.assign(context._axes, value)\n },\n facetByFields: {},\n fields: {},\n transform: {},\n layerDef: {},\n detailFields: {}\n};\n\nexport const PROPS = {\n [TEXT]: DEFAULT_PROPS,\n [GEOM]: mergeRecursive(geomProps, DEFAULT_PROPS),\n [AXIS]: DEFAULT_PROPS,\n [BLANK]: DEFAULT_PROPS\n};\n","/**\n * This file declares a class that represents a table cell\n * used to house an axis.\n * @module VisualCell\n */\nimport { selectElement, makeElement, generateGetterSetters } from 'muze-utils';\nimport { CLASSPREFIX, HEIGHT, WIDTH, AXIS_CELL } from './enums/constants';\nimport SimpleCell from './simple-cell';\nimport { DEFAULT_CONFIG } from './enums/defaults';\nimport { AXIS } from './enums/cell-type';\nimport { PROPS } from './props';\n\n/**\n * Computes the logical space of the an axis instance within an axis cell\n *\n * @param {Object} context Required to get the needed parameters to compute axis space\n * @return {Object} Returns the logical space for axis\n */\nconst computeAxisSpace = (context) => {\n let logicalWidth;\n let logicalHeight;\n const axis = context.source();\n const {\n spaceFixer,\n margin\n } = context.config();\n const {\n width,\n height\n } = axis.getLogicalSpace();\n const {\n show\n } = axis.config();\n if (show === true) {\n logicalHeight = Math.floor(height + margin.top + margin.bottom + spaceFixer);\n logicalWidth = Math.floor(width + margin.left + margin.right + spaceFixer);\n } else {\n [logicalWidth, logicalHeight] = [width, height];\n }\n return {\n width: logicalWidth,\n height: logicalHeight\n };\n};\n\n/**\n * Represents an axis cell.\n *\n * @class Axis\n */\nclass AxisCell extends SimpleCell {\n\n /**\n * Creates an instance of AxisCell.\n *\n * @param {Object} config The input config.\n * @memberof AxisCell\n */\n constructor (config) {\n super(config);\n\n this._axis = null;\n this._availHeight = null;\n this._availWidth = null;\n this._logicalSpace = null;\n\n generateGetterSetters(this, PROPS[AXIS]);\n }\n\n /**\n * return the type pf SimpleCell cell.\n *\n * @readonly\n * @memberof AxisCell\n */\n get type () {\n return AXIS;\n }\n\n /**\n * This method return the value conatined by this SimpleCell.\n *\n * @return {SimpleAxis | ColorAxis} Instance of SimpleAxis or ColorAxis.\n * @memberof AxisCell\n */\n valueOf () {\n return this.source().id;\n }\n\n /**\n * This method return the unique identififer of the axis\n *\n * @return {string} Id of the axis.\n * @memberof AxisCell\n */\n get id () {\n return this._id;\n }\n\n /**\n * Retrns the serialized representation of this cell.\n *\n * @return {Object}Object with serializable props.\n * @memberof AxisCell\n */\n serialize () {\n return {\n type: AXIS,\n axis: this.source().serialize()\n };\n }\n\n /**\n * return the default configuration for the text cell\n *\n * @static\n * @return {Object} Default configuration of the cell\n * @memberof AxisCell\n */\n static defaultConfig () {\n return DEFAULT_CONFIG;\n }\n\n /**\n * return the space taken up by an axis element in the dom.\n *\n * @return {Object} Object with width and height fields.\n * @memberof AxisCell\n */\n getLogicalSpace () {\n if (!this.logicalSpace()) {\n this.logicalSpace(computeAxisSpace(this));\n }\n return this.logicalSpace();\n }\n\n /**\n * This method is used to set the space availiable to render\n * the SimpleCell.\n *\n * @param {number} width The width of SimpleCell.\n * @param {number} height The height of SimpleCell.\n * @return {Instance} Returns current Instance\n * @memberof AxisCell\n */\n setAvailableSpace (width, height) {\n this.availWidth(width);\n this.availHeight(height);\n const {\n margin,\n isOffset\n } = this.config();\n this.source().setAvailableSpace(width, height, margin, isOffset);\n this.logicalSpace(null);\n this.source().logicalSpace(null);\n return this;\n }\n\n /**\n * This method is used to render the axis inside the axis cell.\n *\n * @param {HTMLElement} mount The mount point.\n * @return {Selection} node where axis mounted\n * @memberof AxisCell\n */\n /* istanbul ignore next */render (mount) {\n if (!mount) {\n return this;\n }\n const axis = this.source();\n const availHeight = this.availHeight();\n const availWidth = this.availWidth();\n const {\n margin\n } = this.config();\n const {\n top,\n bottom,\n left,\n right\n } = margin;\n const {\n show\n } = axis.config();\n const wrapperDiv = makeElement(selectElement(mount), 'div', [this], `${CLASSPREFIX}-${AXIS_CELL}`);\n const selection = makeElement(wrapperDiv, 'svg', [1], `${CLASSPREFIX}-axis-container`);\n\n this.mount(mount);\n if (availWidth === 0 || !availWidth) {\n selection.attr(WIDTH, `${0}px`);\n }\n if (availHeight === 0 || !availHeight) {\n selection.attr(HEIGHT, `${0}px`);\n }\n wrapperDiv.style(WIDTH, `${show ? availWidth : 0}px`)\n .style(HEIGHT, `${show ? availHeight : 0}px`)\n .style('margin-top', top)\n .style('margin-bottom', bottom)\n .style('margin-left', left)\n .style('margin-right', right);\n\n axis.mount(selection.node());\n return selection;\n }\n\n /**\n * Disposes the cell\n *\n * @return {Instance} Current instance of AxisCell\n * @memberof AxisCell\n */\n remove () {\n this.source() && this.source().remove();\n this.mount() && this.mount().remove();\n return this;\n }\n}\n\nexport default AxisCell;\n\n","/**\n * This file declares a class that represents a BLANK element in a table.\n * @module VisualCell\n */\nimport {\n selectElement,\n makeElement,\n applyStyle,\n generateGetterSetters\n } from 'muze-utils';\nimport SimpleCell from './simple-cell';\nimport { CLASSPREFIX, BLANK_CELL } from './enums/constants';\nimport { BLANK } from './enums/cell-type';\nimport { DEFAULT_CONFIG } from './enums/defaults';\nimport { PROPS } from './props';\n\n/**\n * Represents a table haeder.\n *\n * @class BLANK\n */\nclass BlankCell extends SimpleCell {\n\n /**\n * Creates an instance of BLANK.\n * @param {Object} config The input configuration.\n * @memberof BLANK\n */\n constructor (config) {\n super(config);\n\n generateGetterSetters(this, PROPS[BLANK]);\n }\n\n /**\n * return the type pf SimpleCell cell.\n *\n * @readonly\n * @memberof BlankCell\n */\n get type () {\n return BLANK;\n }\n\n /**\n * This method return the value contained by this SimpleCell.\n *\n * @return {string} The text value contained by this cell.\n * @memberof BlankCell\n */\n valueOf () {\n return this.id;\n }\n\n /**\n * return the default configuration for the text cell\n *\n * @static\n * @return {Object} Default configuration of the cell\n * @memberof BlankCell\n */\n static defaultConfig () {\n return DEFAULT_CONFIG;\n }\n\n /**\n * This method is used to return a unique identifier for\n * the BLANK cell.\n *\n * @return {string} The unique identifier for the BLANK.\n * @memberof BlankCell\n */\n get id () {\n return this._id;\n }\n\n /**\n * This method is used to obtain a serialized representation of this instance.\n *\n * @return {Object} Object with serilizable props.\n * @memberof BLANK\n */\n serialize () {\n return {\n type: BLANK\n };\n }\n\n /**\n * This method return the space taken up\n * by the text with the style applied.\n *\n * @return {Object} width and height taken up by the text.\n * @memberof BLANK\n */\n getLogicalSpace () {\n if (!this.logicalSpace()) {\n return {\n width: this.width || 0,\n height: this.height || 0\n };\n }\n return this.logicalSpace();\n }\n\n /**\n * This method is used to set the available space.\n *\n * @param {number} width The available width.\n * @param {number} height The available height.\n * @return {Instance} Returns current Instance\n * @memberof BlankCell\n */\n setAvailableSpace (width, height) {\n this.availWidth(width);\n this.availHeight(height);\n this.logicalSpace(null);\n return this;\n }\n\n /**\n * This method is used to render the BLANK cell inside\n * the provided mount point.\n *\n * @param {HTMLElement} mount The mount point for this cell.\n * @return {Instance} Returns current Instance\n * @memberof BLANK\n */\n /* istanbul ignore next */render (mount) {\n if (mount) {\n const { style } = this.config();\n // append span element to mount point\n this.mount(mount);\n const container = selectElement(mount);\n const elem = makeElement(container, 'div', [this.id]);\n elem.classed(`${CLASSPREFIX}-${BLANK_CELL}`, true);\n elem.style('width', `${this.availWidth()}px`);\n elem.style('height', `${this.availHeight()}px`);\n elem.html('');\n // apply style on the returned element\n if (style) {\n applyStyle(elem, style);\n }\n } return this;\n }\n\n /**\n * Removes the cell(Disposal)\n *\n * @return {Instance} Returns current Instance\n * @memberof BlankCell\n */\n remove () {\n this.mount() && this.mount().remove();\n return this;\n }\n }\nexport default BlankCell;\n","/**\n * This file declares a class that represents a Text element in a table.\n * @module VisualCell\n */\n\nimport {\n selectElement,\n makeElement,\n getSmartComputedStyle,\n generateGetterSetters\n} from 'muze-utils';\nimport SimpleCell from './simple-cell';\nimport { TEXT } from './enums/cell-type';\nimport { PROPS } from './props';\nimport { DEFAULT_CONFIG } from './enums/defaults';\nimport { CLASSPREFIX, TOP, BOTTOM, LEFT, RIGHT, HEADER, WIDTH, TEXT_CELL } from './enums/constants';\nimport './text-cell.scss';\n\n/**\n* Computes the Logical Space for the text\n*\n* @param {Object} context Required to get the needed parameters to compute text space\n* @return {Object} Logical space taken up by text\n* @memberof TextCell\n*/\nconst computeTextSpace = (context) => {\n const { labelManager } = context.dependencies();\n const space = labelManager.getOriSize(context.source());\n const {\n margin,\n show\n } = context.config();\n\n labelManager.setStyle(context._computedStyle);\n if (show) {\n return {\n width: space.width + margin.left + margin.right + context._minTickDiff.width,\n height: space.height + margin.top + margin.bottom + context._minTickDiff.height\n };\n } return {\n width: 0,\n height: 0\n };\n};\n\n/**\n * Represents a table haeder.\n *\n * @class Text\n */\nclass TextCell extends SimpleCell {\n\n /**\n * Creates an instance of Text.\n * @param {Object} config The input configuration.\n * @param {string} dependencies Dependencies for the class(labelManager)\n * @memberof Text\n */\n constructor (config, dependencies) {\n super(config);\n\n this._dependencies = dependencies;\n this._className = this._config.className ||\n (this._config.type === HEADER ? `${CLASSPREFIX}-${HEADER}-cell` : `${CLASSPREFIX}-${TEXT}-cell`);\n this._computedStyle = getSmartComputedStyle(selectElement('body'), this._className);\n this._dependencies.labelManager.setStyle(this._computedStyle);\n this._minTickDiff = this._dependencies.labelManager.getOriSize('WW');\n\n generateGetterSetters(this, PROPS[TEXT]);\n }\n\n /**\n * return the type pf SimpleCell cell.\n *\n * @readonly\n * @memberof TextCell\n */\n get type () {\n return TEXT;\n }\n\n /**\n * This method return the value contained by this SimpleCell.\n *\n * @return {string} The text value contained by this cell.\n * @memberof TextCell\n */\n valueOf () {\n return this.source();\n }\n\n /**\n * This method is used to return a unique identifier for\n * the Text cell.\n *\n * @return {string} The unique identifier for the Text.\n * @memberof TextCell\n */\n get id () {\n return this._id;\n }\n\n /**\n * Returns the dependencies of the instance\n *\n * @return {Object} Dependencies needed by the class\n * @memberof TextCell\n */\n dependencies () {\n return this._dependencies;\n }\n\n /**\n * This method is used to obtain a serialized representation of this instance.\n *\n * @return {Object} Object with serilizable props.\n * @memberof TextCell\n */\n serialize () {\n return {\n text: this.source(),\n type: TEXT\n };\n }\n\n /**\n * return the default configuration for the text cell\n *\n * @static\n * @return {Object} Default configuration of the cell\n * @memberof TextCell\n */\n static defaultConfig () {\n return DEFAULT_CONFIG;\n }\n\n /**\n * This method return the space taken up\n * by the text with the style applied.\n *\n * @return {Object} width and height taken up by the text.\n * @memberof Text\n */\n getLogicalSpace () {\n if (!this.logicalSpace()) {\n this.logicalSpace(computeTextSpace(this));\n }\n return this.logicalSpace();\n }\n\n /**\n * This method is used to set the available space.\n *\n * @param {number} width The available width.\n * @param {number} height The available height.\n * @return {Instance} Returns current Instance\n * @memberof TextCell\n */\n setAvailableSpace (width, height) {\n this.availWidth(width);\n this.availHeight(height);\n this.logicalSpace(null);\n return this;\n }\n\n /**\n * This method is used to render the Text cell inside\n * the provided mount point.\n *\n * @param {HTMLElement} mount The mount point for this cell.\n * @return {Instance} Returns current Instance\n * @memberof Text\n */\n render (mount) {\n const availWidth = this.availWidth();\n const {\n margin,\n show,\n verticalAlign,\n textAlign\n } = this.config();\n\n this.mount(mount);\n if (show) {\n const container = selectElement(mount);\n const elem = makeElement(container, 'div', [this.id], `${CLASSPREFIX}-${TEXT_CELL}`);\n\n container.style('vertical-align', verticalAlign);\n elem.classed(this._className, true);\n // apply style on the returned element\n elem.style(WIDTH, availWidth ? `${availWidth}px` : '100%');\n [TOP, BOTTOM, LEFT, RIGHT].forEach((type) => {\n elem.style(`padding-${type}`, `${margin[type]}px`);\n });\n elem.style('text-align', textAlign);\n elem.style('display', 'inline');\n // set the text as the innerHTML\n elem.html(this.source());\n }\n return this;\n }\n\n /**\n * Disposes the cell\n *\n * @return {Instance} Returns current Instance\n * @memberof TextCell\n */\n remove () {\n this.mount() && this.mount().remove();\n return this;\n }\n }\n\nexport default TextCell;\n","/**\n * This file declares a class that is used to represent a table cell\n * that houses a visual unit.\n * @module VisualCell\n */\n\nimport { selectElement, makeElement, generateGetterSetters } from 'muze-utils';\nimport SimpleCell from './simple-cell';\nimport { GEOM } from './enums/cell-type';\nimport { PROPS } from './props';\nimport {\n CLASSPREFIX, HEIGHT, WIDTH, DATA, AXES, FACET_BY_FIELDS, FIELDS, TRANSFORM, LAYER_DEF, CONFIG, GEOM_CELL,\n DETAIL_FIELDS\n} from './enums/constants';\nimport { DEFAULT_CONFIG } from './enums/defaults';\n\n/**\n * Calculates the logical space of the cell\n *\n * @param {Object} context Required to get the needed parameters to compute unit space\n * @return {Object} Logical space taken up by the unit\n * @memberof GeomCell\n */\nconst computeGeomSpace = (context) => {\n const config = context.source().config();\n const { width, height } = config;\n return {\n width: Math.ceil(width),\n height: Math.ceil(height + context.getCaptionSpace().height)\n };\n};\n\n /**\n * This class represents a SimpleCell for visual unit.\n *\n * @class GeomCell\n */\nclass GeomCell extends SimpleCell {\n\n /**\n * Creates an instance of GeomCell.\n * @param {Object} config The input configuration.\n * @memberof GeomCell\n */\n constructor (config) {\n super(config);\n\n this._unit = null;\n this._layers = null;\n this._axes = {};\n this._datamodel = {};\n this._facetByFields = {};\n this._fields = null;\n this._transform = null;\n this._caption = null;\n\n generateGetterSetters(this, PROPS[GEOM]);\n }\n\n /**\n * return the type pf SimpleCell cell.\n *\n * @readonly\n * @memberof GeomCell\n */\n get type () {\n return GEOM;\n }\n\n /**\n * This method return the value contained by this cell.\n *\n * @return {VisualUnit} Instance of visual unit contained by visual unit.\n * @memberof GeomCell\n */\n valueOf () {\n return this.source();\n }\n\n /**\n * This method is used to return the id of the\n * visual unit housed by this cell.\n *\n * @return {string} The unique id of the visual unit.\n * @memberof GeomCell\n */\n get id () {\n return this.source().id();\n }\n\n /**\n * This method return a serialized representation of\n * this instance.\n *\n * @return {Object} Object with serializable props.\n * @memberof GeomCell\n */\n serialize () {\n return {\n type: GEOM,\n unit: this.source().serialize(),\n caption: this.caption()\n };\n }\n\n /**\n * return the default configuration for the geom cell\n *\n * @static\n * @return {Object} Default configuration of the cell\n * @memberof GeomCell\n */\n static defaultConfig () {\n return DEFAULT_CONFIG;\n }\n\n /**\n * Updates the model based on the changed parameters\n *\n * @return {Instance} return instance\n * @memberof GeomCell\n */\n updateModel () {\n const unit = this.source();\n unit.lockModel();\n [DATA, AXES, FACET_BY_FIELDS, FIELDS, TRANSFORM, LAYER_DEF, CONFIG, DETAIL_FIELDS].forEach((prop) => {\n this[prop]() && unit[prop](this[prop]());\n });\n unit.unlockModel();\n return this;\n }\n\n /**\n * It gives the space taken by the caption of the unit\n *\n * @return {Object} return the space taken by caption\n * @memberof GeomCell\n */\n getCaptionSpace () {\n const caption = this.caption();\n\n let captionSpace = { width: 0, height: 0 };\n if (caption) {\n captionSpace = caption.getLogicalSpace();\n }\n return captionSpace;\n }\n\n /**\n * return the space taken up by the element in the dom.\n *\n * @return {Object} Object with width and height fields.\n * @memberof GeomCell\n */\n getLogicalSpace () {\n if (!this.logicalSpace()) {\n this.logicalSpace(computeGeomSpace(this));\n }\n return this.logicalSpace();\n }\n\n /**\n * This method is used to set the space available to\n * render the SimpleCell.\n *\n * @param {number} width The available width.\n * @param {number} height The available height.\n * @return {Instance} Returns current Instance\n * @memberof GeomCell\n */\n setAvailableSpace (width, height) {\n const unit = this.source();\n\n this.availWidth(width);\n this.availHeight(height);\n unit.lockModel();\n unit.width(width).height(height - this.getCaptionSpace().height);\n unit.unlockModel();\n this.logicalSpace(null);\n return this;\n }\n\n /**\n * his method is used to render the visual unit inside the provided cell.\n *\n * @param {HTMLElement} mount The mountpoint in the table.\n * @return {Instance} Returns current Instance\n * @memberof GeomCell\n */\n render (mount) {\n if (mount) {\n this.mount(mount);\n const availHeight = this.availHeight();\n const availWidth = this.availWidth();\n const caption = this.caption();\n const wrapperDiv = makeElement(selectElement(mount), 'div', [1], `${CLASSPREFIX}-${GEOM_CELL}`);\n\n if (caption) {\n const captionDom = makeElement(wrapperDiv, 'div', [caption], `${CLASSPREFIX}-unit-caption`).node();\n caption.render(captionDom);\n }\n const selection = makeElement(wrapperDiv, 'div', [1], `${CLASSPREFIX}-unit`);\n wrapperDiv.style(WIDTH, `${availWidth}px`).style(HEIGHT, `${availHeight}px`);\n selection.style(WIDTH, `${availWidth}px`)\n .style(HEIGHT, `${availHeight - this.getCaptionSpace().height}px`);\n this.source().mount(selection.node());\n }\n return this;\n }\n\n /**\n * Disposes the cell\n *\n * @return {Object} Current instance\n * @memberof GeomCell\n */\n remove () {\n this.mount() && this.mount().remove();\n this.source().remove();\n return this;\n }\n}\n\nexport default GeomCell;\n","import AxisCell from './axis-cell';\nimport BlankCell from './blank-cell';\nimport TextCell from './text-cell';\nimport GeomCell from './geom-cell';\nimport SimpleCell from './simple-cell';\n\nimport * as CONSTANTS from './constants';\n\nexport const DEFAULT_PLACEHOLDERS = {\n [CONSTANTS.SIMPLE_CELL]: SimpleCell,\n [CONSTANTS.TEXT_CELL]: TextCell,\n [CONSTANTS.AXIS_CELL]: AxisCell,\n [CONSTANTS.GEOM_CELL]: GeomCell,\n [CONSTANTS.BLANK_CELL]: BlankCell\n};\n\n","export const SIMPLE_CELL = 'SimpleCell';\nexport const TEXT_CELL = 'TextCell';\nexport const AXIS_CELL = 'AxisCell';\nexport const BLANK_CELL = 'BlankCell';\nexport const GEOM_CELL = 'GeomCell';\n\n","import { DEFAULT_PLACEHOLDERS } from './defaults';\n\n/**\n * Creates a registry for the cells, which can be used for\n * setting a new cell or getting the registered cells\n *\n * @return {Object} Setters and getters for registered cells\n */\nconst cellRegistry = () => {\n const reg = DEFAULT_PLACEHOLDERS;\n return {\n set: (key, def) => {\n if (key in reg) {\n reg[key] = def;\n }\n return cellRegistry;\n },\n get: () => reg\n };\n};\nexport default cellRegistry;\n","import { TextCell } from '@chartshq/visual-cell';\nimport { escapeHTML } from 'muze-utils';\n\n/**\n *\n *\n * @param {*} rawContent\n * @returns\n */\nconst resolveTitleSubTitleContent = (rawContent) => {\n if (typeof rawContent === 'function' && !rawContent._sanitize) {\n return rawContent();\n }\n return escapeHTML(rawContent());\n};\n\n/**\n *\n *\n * @param {*} config\n * @param {*} cellType\n * @param {*} labelManager\n * @param {*} prevCell\n * @returns\n */\nconst headerCreator = (config, cellType, labelManager, prevCell) => {\n const {\n content\n } = config;\n const cell = prevCell || new TextCell({ type: cellType }, { labelManager });\n\n cell.source(content);\n\n return {\n height: cell.getLogicalSpace().height,\n cell\n };\n};\n\n/**\n *\n *\n * @param {*} config\n * @param {*} type\n * @param {*} labelManager\n * @param {*} cell\n * @returns\n */\nconst createHeading = (config, type, labelManager, prevCell) => {\n if (!config) { return ''; }\n\n return headerCreator(\n config,\n type === 'title' ? 'header' : 'text',\n labelManager,\n prevCell\n );\n};\n\n/**\n *\n *\n * @param {*} context\n */\nexport const createHeaders = (context, canvasHeight, canvasWidth) => {\n let headerHeight = 0;\n const headers = {};\n\n canvasHeight >= 200 && canvasWidth >= 200 && ['title', 'subtitle'].forEach((type) => {\n const headerOptions = context[type]();\n const content = resolveTitleSubTitleContent(headerOptions[0]);\n if (content.length) {\n const config = headerOptions[1];\n\n config.width = context.width();\n config.content = content;\n\n const { height, cell } = createHeading(config, type, context.dependencies().smartlabel,\n context[`${type}Cell`]);\n\n headers[`${type}Cell`] = cell;\n context._composition[type] = cell;\n headerHeight += height + config.padding;\n }\n });\n return { headerHeight, headers };\n};\n\n","import { TextCell, AxisCell } from '@chartshq/visual-cell';\nimport {\n VERTICAL, HORIZONTAL, LEFT, RIGHT, LEGEND_TYPE_MAP, PADDING, BORDER, MARGIN\n} from '../constants';\n\n/**\n *\n *\n * @param {*} legendConfig\n * @param {*} canvases\n * @returns\n */\nexport const legendCreator = (canvas) => {\n let LegendCls;\n const dataset = [];\n const axes = canvas.getRetinalAxes();\n\n Object.entries(axes).forEach((axisInfo) => {\n const scale = axisInfo[1][0];\n const scaleType = axisInfo[0];\n const scaleProps = canvas[scaleType]();\n\n if (scaleProps.field) {\n const {\n type,\n step\n } = scale.config();\n\n const stepMapper = typeof step === 'boolean' ? step : false;\n LegendCls = LEGEND_TYPE_MAP[`${type}-${stepMapper}-${scaleType}`];\n dataset.push({ scale, canvas, fieldName: scaleProps.field, LegendCls, scaleType });\n }\n });\n\n return dataset;\n};\n\n/**\n *\n *\n * @param {*} legendConfig\n * @param {*} canvases\n * @param {*} measurement\n * @param {*} prevLegends\n * @returns\n */\nexport const legendInitializer = (legendConfig, canvas, measurement, prevLegends) => {\n const legends = [];\n const {\n height,\n width,\n headerHeight\n } = measurement;\n const {\n position,\n align\n } = legendConfig;\n\n const legendInfo = legendCreator(canvas);\n\n legendInfo.forEach((dataInfo, index) => {\n let legend = {};\n\n const legendMeasures = {};\n const {\n LegendCls,\n scale,\n fieldName,\n scaleType\n } = dataInfo;\n const config = legendConfig[scaleType] || {};\n const title = config.title || {};\n title.text = title.text || fieldName;\n if (config.show) {\n config.position = position;\n config.align = align;\n\n if (prevLegends[index]) {\n legend = prevLegends[index].legend;\n } else {\n legend = LegendCls.create({\n labelManager: canvas._dependencies.smartlabel,\n cells: {\n AxisCell, TextCell\n }\n });\n }\n legendMeasures.maxHeight = align === VERTICAL ? (height - headerHeight) : height * 0.2;\n legendMeasures.maxWidth = align === HORIZONTAL ? width : width * 0.2;\n legendMeasures.width = Math.min(legendMeasures.maxWidth, config.width);\n legendMeasures.height = Math.min(legendMeasures.maxHeight, config.height);\n\n [PADDING, BORDER, MARGIN].forEach((e) => {\n legendMeasures[e] = config[e];\n });\n legend.scale(scale)\n .title(title)\n .fieldName(fieldName)\n .config(config)\n .metaData(canvas.composition().visualGroup.getGroupByData().project([fieldName]))\n .measurement(legendMeasures)\n .canvasAlias(canvas.alias())\n .setLegendMeasures();\n\n legends.push({ canvas, legend, scaleType });\n }\n });\n return legends;\n};\n\n/**\n *\n *\n * @param {*} legends\n * @param {*} legendConfig\n * @param {*} availableHeight\n * @param {*} availableWidth\n * @returns\n */\nexport const getLegendSpace = (legends, legendConfig, availableHeight, availableWidth) => {\n const legendMeasures = legends.map(legendInfo => legendInfo.legend.measurement());\n const legendSpace = { width: 0, height: 0 };\n\n legendMeasures.forEach((space) => {\n let height = 0;\n let width = 0;\n width = Math.min(space.width, space.maxWidth);\n height = Math.min(space.height, space.maxHeight);\n\n if (legendConfig.align === HORIZONTAL) {\n if (legendSpace.width + width > availableWidth) {\n legendSpace.width = availableWidth;\n legendSpace.height += height;\n } else {\n legendSpace.width += width;\n legendSpace.height = Math.max(legendSpace.height, height);\n }\n } else if (legendSpace.height + height > availableHeight) {\n legendSpace.height = height;\n legendSpace.width += width;\n } else {\n legendSpace.height += height;\n legendSpace.width = Math.max(legendSpace.width, width);\n }\n });\n if (legendConfig.align === HORIZONTAL) {\n legendSpace.width = availableWidth;\n }\n return legendSpace;\n};\n\n/**\n *\n *\n * @param {*} context\n * @param {*} headerHeight\n * @returns\n */\nexport const createLegend = (context, headerHeight, height, width) => {\n const measurement = {\n height,\n width,\n headerHeight\n };\n const { legend } = context.config();\n const { show, position } = legend;\n\n legend.classPrefix = context.config().classPrefix;\n const align = (position === LEFT || position === RIGHT) ? VERTICAL : HORIZONTAL;\n\n legend.show = show ? ((align === VERTICAL && width > 200) || (align === HORIZONTAL && height > 200)) : show;\n legend.align = align;\n return legendInitializer(legend, context, measurement, context.legends || []);\n};\n","import { mergeRecursive } from 'muze-utils';\nimport { arrangeComponents } from './component-resolver';\nimport { createHeaders } from './title-maker';\nimport { createLegend, getLegendSpace } from './legend-maker';\nimport { TOP, BOTTOM, LEFT, RIGHT } from '../constants';\n\n/**\n *\n *\n * @param {*} context\n * @returns\n */\nexport const prepareLayout = (layout, components, config, measurement) => {\n const {\n rows,\n columns,\n values,\n cornerMatrices\n } = components;\n\n const {\n topLeft,\n topRight,\n bottomLeft,\n bottomRight\n } = cornerMatrices;\n\n layout.measurement(measurement)\n .config(config)\n .matrices({\n top: [topLeft, columns[0], topRight],\n center: [rows[0], values, rows[1]],\n bottom: [bottomLeft, columns[1], bottomRight]\n })\n .triggerReflow();\n};\n\n/**\n *\n *\n * @param {*} context\n * @param {*} mount\n * @returns\n */\nexport const getRenderDetails = (context, mount) => {\n let layoutConfig = mergeRecursive({}, context.config());\n // Get height width of the mount point\n let { height, width } = mount.getBoundingClientRect();\n const heightAttr = context.height();\n const widthAttr = context.width();\n const visGroup = context.composition().visualGroup;\n const {\n isColumnSizeEqual,\n isRowSizeEqual,\n rows,\n columns,\n values\n } = visGroup.placeholderInfo();\n const {\n minWidth,\n minHeight,\n classPrefix,\n showHeaders,\n legend\n } = context.config();\n // Get title configuration\n const titleConfig = context.title()[1];\n // Get subtitle configuration\n const subtitleConfig = context.subtitle()[1];\n // Get legend position\n const legendPosition = legend.position;\n // Arrange components according to config\n const layoutArrangement = arrangeComponents(context);\n\n height = Math.floor(height);\n width = Math.floor(width);\n\n const availableHeightForCanvas = Math.max(heightAttr > 0 ? heightAttr : height, minHeight);\n const availableWidthForCanvas = Math.max(widthAttr > 0 ? widthAttr : width, minWidth);\n\n // Create headers and determine header height\n const { headers, headerHeight } = createHeaders(context, availableHeightForCanvas, availableWidthForCanvas);\n\n // Create legends and determine legend space\n const legends = createLegend(context, headerHeight, availableHeightForCanvas, availableWidthForCanvas);\n context._composition.legend = {};\n legends.forEach((e) => {\n context._composition.legend[e.scaleType] = e.legend;\n });\n\n const legendSpace = getLegendSpace(legends, legend, availableHeightForCanvas, availableWidthForCanvas);\n const legendWidth = (legendPosition === LEFT || legendPosition === RIGHT) ? legendSpace.width : 0;\n const legendHeight = (legendPosition === TOP || legendPosition === BOTTOM) ? legendSpace.height : 0;\n\n // Set components for layouting\n const components = {\n headers,\n legends,\n canvases: [context],\n rows,\n columns,\n values,\n cornerMatrices: visGroup.cornerMatrices()\n };\n const measurement = {\n mountSpace: {\n height,\n width\n },\n headerHeight,\n legendSpace,\n canvasWidth: availableWidthForCanvas,\n canvasHeight: availableHeightForCanvas,\n width: availableWidthForCanvas - legendWidth,\n height: availableHeightForCanvas - headerHeight - legendHeight,\n minUnitHeight: context.minUnitHeight(),\n minUnitWidth: context.minUnitWidth()\n };\n layoutConfig = mergeRecursive(layoutConfig, {\n classPrefix,\n showHeaders,\n border: mergeRecursive(visGroup.metaData().border, context.config().border),\n layoutArrangement,\n legend,\n title: titleConfig,\n subtitle: subtitleConfig,\n isColumnSizeEqual,\n isRowSizeEqual\n });\n return {\n layoutConfig,\n components,\n measurement\n };\n};\n","export const TITLE_CONFIG = {\n position: 'top',\n align: 'left',\n padding: 8\n};\n\nexport const SUB_TITLE_CONFIG = {\n position: 'top',\n align: 'left',\n padding: 16\n};\n","import { mergeRecursive, selectElement } from 'muze-utils';\nimport {\n ROWS,\n COLUMNS,\n COLOR,\n SHAPE,\n SIZE,\n DETAIL,\n LAYERS,\n TRANSFORM,\n MOUNT,\n TITLE,\n SUB_TITLE\n} from '../constants';\nimport { TITLE_CONFIG, SUB_TITLE_CONFIG } from './defaults';\n/**\n * @module\n * This is the local options semantics based on which setters getters are created and reactivity is initiated.\n * This local object is only valid for Canvas.\n * Canvas merges global and local object both to the model\n *\n * Format\n * PROPERTRY_NAME: {\n * value: // default value of the property,\n * meta: {\n * typeCheck: // The setter value will be checked using this. If the value is function then the setter value\n * // is passed as args.\n * typeExpected: // The output of typecheck action will be tested against this. Truthy value will set the\n * // value to the setter\n * sanitizaiton: // Need for sanitization before type is checked\n * }\n * }\n */\n\nexport const localOptions = {\n [ROWS]: {\n value: null,\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Array'\n }\n },\n [COLUMNS]: {\n value: null,\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Array'\n }\n },\n [COLOR]: {\n value: null,\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Object',\n sanitization: (config) => {\n if (typeof config === 'string') {\n return {\n field: config\n };\n }\n return config;\n }\n }\n },\n [SHAPE]: {\n value: null,\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Object',\n sanitization: (config) => {\n if (typeof config === 'string') {\n return {\n field: config\n };\n }\n return config;\n }\n }\n },\n [SIZE]: {\n value: null,\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Object',\n sanitization: (config) => {\n if (typeof config === 'string') {\n return {\n field: config\n };\n }\n return config;\n }\n }\n },\n [DETAIL]: {\n value: [],\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Array'\n }\n },\n\n [LAYERS]: {\n value: null,\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Array'\n }\n },\n [TRANSFORM]: {\n value: null,\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Object'\n }\n },\n [MOUNT]: {\n value: null,\n meta: {\n sanitization: (value) => {\n if (typeof value === 'string') {\n return selectElement(value).node();\n }\n return value;\n }\n }\n }\n};\n\nexport const canvasOptions = {\n [TITLE]: {\n value: [null, null],\n meta: {\n typeCheck: ['constructor', 'constructor'],\n typeExpected: ['Function', 'Object'],\n spreadParams: true,\n sanitization: [(title) => {\n if (typeof title === 'string') {\n const t = () => title;\n t._sanitized = true;\n return t;\n }\n return title;\n }, (titleConfig) => {\n const defConfig = mergeRecursive({}, TITLE_CONFIG);\n return mergeRecursive(defConfig, titleConfig);\n }]\n }\n },\n [SUB_TITLE]: {\n value: [null, null],\n meta: {\n typeCheck: ['constructor', 'constructor'],\n typeExpected: ['Function', 'Object'],\n spreadParams: true,\n sanitization: [(subtitle) => {\n if (typeof subtitle === 'string') {\n const sub = () => subtitle;\n sub._sanitized = true;\n return sub;\n }\n return subtitle;\n }, (subtitleConfig) => {\n const defConfig = mergeRecursive({}, SUB_TITLE_CONFIG);\n return mergeRecursive(defConfig, subtitleConfig);\n }]\n }\n }\n};\n","import { makeElement, selectElement } from 'muze-utils';\nimport { VERTICAL, HORIZONTAL, TOP, LEFT, RIGHT, BOTTOM } from '../constants';\n\n/**\n * Sets the rotation for all x axes if any axis has the rotation config set in the\n * entire view\n *\n * @param {Array} columns Column cells that contain the axes cells\n */\nconst setLabelRotationForAxes = (context) => {\n let rotation = 0;\n\n const xAxes = context.xAxes() || [];\n\n (() => {\n for (let i = 0; i < xAxes.length; i++) {\n for (let j = 0; j < xAxes[i].length; j++) {\n if (xAxes[i][j].config().labels.rotation !== 0) {\n rotation = xAxes[i][j].config().labels.rotation;\n return;\n }\n }\n }\n })();\n\n if (rotation) {\n xAxes.forEach((axes) => {\n axes.forEach((axis) => {\n axis.config({ labels: { rotation, smartTicks: false } });\n });\n });\n }\n};\n\n/**\n *\n *\n * @param {*} context\n * @param {*} mount\n * @returns\n */\nconst getSkeletons = (mount, layoutConfig, measurement) => {\n const {\n layoutArrangement,\n classPrefix\n } = layoutConfig;\n const {\n headers,\n legends\n } = layoutArrangement;\n const {\n canvasWidth,\n canvasHeight\n } = measurement;\n const container = selectElement(mount);\n const components = {};\n const mountPoint = makeElement(container, 'div', [1], `${classPrefix}-viz`)\n .style('width', `${canvasWidth}px`)\n .style('height', `${canvasHeight}px`);\n const containers = mountPoint\n .selectAll(`.${classPrefix}-container`)\n .data(headers);\n containers.exit().remove();\n const containersEnter = containers.enter().append('div');\n\n const mergedContainer = containersEnter.merge(containers)\n .attr('class', `${classPrefix}-container`)\n .style('width', `${canvasWidth}px`)\n .style('padding', `${null}px`)\n .style('margin', null)\n .each(function (type) {\n components[type] = selectElement(this).classed(`${classPrefix}-${type}-container`, true);\n });\n const innerContainer = mergedContainer\n .selectAll(`.${classPrefix}-inner-container`)\n .data((d) => {\n if (d === 'group') {\n return legends;\n } return [];\n });\n innerContainer.exit().remove();\n const innerContainerEnter = innerContainer.enter().append('div');\n\n innerContainerEnter\n .merge(innerContainer)\n .attr('class', `${classPrefix}-inner-container`)\n .style('width', 'auto')\n .style('height', 'auto')\n .each(function (layoutType) {\n components[layoutType] = selectElement(this)\n .classed(`${classPrefix}-${layoutType}-container`, true);\n });\n return components;\n};\n\n/**\n *\n *\n * @param {*} context\n * @param {*} container\n * @param {*} legendComponents\n */\nconst renderLegend = (legendConfig, container, legendComponents, measurement) => {\n const sectionComponents = [];\n const { legendSpace, headerHeight, height, width } = measurement;\n const { legend, classPrefix } = legendConfig;\n const { position } = legend;\n const legendMount = makeElement(container, 'div', [legendComponents], `${classPrefix}-inner-content`, {}, d => d);\n legendMount.classed(`${classPrefix}-legend`, true);\n const align = (position === LEFT || position === RIGHT) ? VERTICAL : HORIZONTAL;\n const legWidth = align === VERTICAL ? legendSpace.width : width;\n const legHeight = align === VERTICAL ? height - headerHeight : legendSpace.height;\n\n [container, legendMount].forEach((elem) => {\n elem.style('width', `${Math.floor(legWidth)}px`)\n .style('height', `${legHeight}px`)\n .style('float', LEFT);\n });\n\n if (align === VERTICAL) {\n let sections = -1;\n let currHeight = legHeight;\n let currWidth = 0;\n\n legendComponents.forEach((legendInfo) => {\n const leg = legendInfo.legend;\n if (leg.measurement().height > currHeight) {\n sections++;\n currWidth = 0;\n currHeight = legHeight;\n } else {\n sections < 0 && sections++;\n }\n sectionComponents[sections] = sectionComponents[sections] || [];\n currHeight -= Math.min(leg.measurement().height, currHeight);\n currWidth = Math.max(Math.min(leg.measurement().width, leg.measurement().maxWidth), currWidth);\n sectionComponents[sections].push({\n legend: leg,\n legendHeight: legHeight,\n legendWidth: currWidth\n });\n });\n\n const mount = makeElement(legendMount, ['div'], sectionComponents, `${classPrefix}-legend-section`)\n .each((d, i) => selectElement(this).classed(`${classPrefix}-legend-section-${i}`, true))\n .classed(`${classPrefix}-legend-vertical-section`, true)\n .style('width', d => `${d[0].legendWidth}px`);\n makeElement(mount, ['div'], d => d, `${classPrefix}-legend-components`, {}, d => d.legend.id())\n .each(function (d) {\n d.legend.mount(this);\n })\n .style('width', d => `${d.legendWidth}px`);\n } else {\n const mount = makeElement(legendMount, 'div', [1], `${classPrefix}-legend-section`)\n .classed(`${classPrefix}-legend-horizontal-section`, true)\n .classed(`${classPrefix}-legend-section-${0}`, true)\n .style('width', `${legWidth}px`);\n\n makeElement(mount, 'div', legendComponents, `${classPrefix}-legend-components`, {}, d => d.legend.id())\n .each(function (d) { d.legend.mount(this); })\n .style('width', d => `${d.legend.measurement().width}px`);\n }\n};\n\n/**\n *\n *\n * @param {*} context\n * @param {*} container\n * @param {*} type\n * @param {*} headers\n */\nconst renderHeader = (layoutConfig, container, type, headers) => {\n const headerCell = headers[`${type}Cell`];\n const config = layoutConfig[`${type}`];\n const { position, align, padding } = config;\n const sel = container\n .selectAll(`.${layoutConfig.classPrefix}-inner-container`)\n .data([type]);\n sel.exit().remove();\n const selEnter = sel.enter().append('div');\n\n const cont = selEnter.merge(sel);\n cont.classed(`${layoutConfig.classPrefix}-inner-container`, true);\n\n headerCell && headerCell.render(cont.node());\n\n cont.selectAll('div').classed(`${layoutConfig.classPrefix}-inner-content`, true);\n cont.style('width', `${100}%`);\n\n if (config && headerCell) {\n cont.style('float', LEFT)\n .style('text-align', align)\n .style(`padding-${position === TOP ? BOTTOM : TOP}`, `${padding}px`);\n }\n};\n\n/**\n *\n *\n * @param {*} context\n * @param {*} shifter\n */\nconst shiftHeaders = (config, shifter, measurement, mount) => {\n const { classPrefix, title, subtitle, legend } = config;\n const { legendSpace } = measurement;\n const { position } = legend;\n\n shifter += position === LEFT ? legendSpace.width : 0;\n title && selectElement(mount).select(`.${classPrefix}-title-container`)\n .style('width', title.align === LEFT ? `calc(100% - ${shifter}px` : '100%')\n .style('margin-left', title.align === LEFT ? `${shifter}px` : 0);\n subtitle && selectElement(mount).select(`.${classPrefix}-subtitle-container`)\n .style('width', subtitle.align === LEFT ? `calc(100% - ${shifter}px` : '100%')\n .style('margin-left', subtitle.align === LEFT ? `${shifter}px` : 0);\n\n selectElement(mount).select(`.${classPrefix}-legend-horizontal-section`)\n .style('margin-left', `${shifter}px`)\n .style('width', `${legendSpace.width - shifter}px`)\n .selectAll(`.${classPrefix}-legend-body, .${classPrefix}-legend-title`)\n .style('max-width', `${legendSpace.width - shifter}px`);\n selectElement(mount).select(`.${classPrefix}-legend-vertical-section`)\n .style('margin-left', null)\n .selectAll(`.${classPrefix}-legend-body, .${classPrefix}-legend-title`)\n .style('max-width', null);\n};\n\n/**\n *\n *\n * @param {*} mountPoint\n * @param {*} measurement\n * @param {*} classPrefix\n * @returns\n */\nconst prepareGridContainer = (mountPoint, measurement, classPrefix, alias) => {\n if (!mountPoint) {\n return this;\n }\n\n const {\n height,\n width\n } = measurement;\n // Create container for the layout\n\n const sel = selectElement(mountPoint)\n .selectAll(`.${classPrefix}-inner-content`)\n .data(['layout'], d => d);\n sel.exit().remove();\n const selEnter = sel.enter().append('div');\n\n const container = selEnter.merge(sel)\n .attr('class', `${classPrefix}-inner-content`)\n .classed(`${classPrefix}-grid-layout`, true)\n .attr('id', `${classPrefix}-grid-layout-${alias}`)\n .style('height', `${height}px`)\n .style('padding', null)\n .style('width', `${Math.ceil(width)}px`);\n // Mount for matrices\n const innerSel = container.selectAll(`.${classPrefix}-layout-grid-container`)\n .data(['layout2']);\n innerSel.exit().remove();\n const innerSelEnter = innerSel.enter().append('div');\n\n const mount = innerSelEnter.merge(innerSel);\n mount.classed(`${classPrefix}-layout-grid-container`, true)\n .attr('id', `${classPrefix}-layout-grid-container-${alias}`)\n .style('height', `${height}px`)\n .style('width', `${Math.ceil(width)}px`);\n\n return {\n mount,\n container\n };\n};\n\n/**\n *\n *\n * @param {*} context\n * @param {*} components\n * @param {*} layoutConfig\n * @param {*} measurement\n */\nexport const renderComponents = (context, components, layoutConfig, measurement) => {\n const mountPoint = context.mount();\n const {\n headers,\n legends\n } = components;\n const {\n classPrefix\n } = layoutConfig;\n const {\n title,\n legend,\n subtitle,\n layout\n } = getSkeletons(mountPoint, layoutConfig, measurement);\n const {\n mount\n } = prepareGridContainer(layout.node(), measurement, classPrefix, context.alias());\n const padding = context.layout().getViewInformation().layoutDimensions.viewWidth[0];\n measurement.padding = padding;\n setLabelRotationForAxes(context);\n\n // Render layout\n context.layout().renderGrid(mount);\n context.once('layer.drawn').then(() => {\n renderHeader(layoutConfig, title, 'title', headers);\n renderHeader(layoutConfig, subtitle, 'subtitle', headers);\n renderLegend(layoutConfig, legend, legends, measurement);\n shiftHeaders(layoutConfig, padding, measurement, mountPoint);\n });\n context.composition().visualGroup.matrixInstance().value.each((el) => {\n el.valueOf().parentContainer(layout.node());\n });\n};\n","import { isEqual } from 'muze-utils';\nimport { ROWS, COLUMNS, COLOR, SHAPE, SIZE, MOUNT, DETAIL, DATA, CONFIG } from '../constants';\nimport { canvasOptions } from './local-options';\n\n/**\n * Instantiate high level components. Canvas knows what all high level component it has.\n * @nice-to-have dynamic high level components.\n * - Is it even required ?\n * - Reactive to source (canvas) streaming ?\n * @param {*} context Canvas instance\n * @return {Object.fArray>} Arrays of Title, visualGroup, Legend\n */\nexport const initCanvas = (context) => {\n const reg = context._registry.components;\n\n return [new reg.VisualGroup(context._registry, context.dependencies())];\n};\n\n/**\n *\n *\n * @memberof Canvas\n */\nexport const dispatchProps = (context) => {\n const lifeCycleManager = context.dependencies().lifeCycleManager;\n lifeCycleManager.notify({ client: context, action: 'beforeupdate' });\n const visualGroup = context.composition().visualGroup;\n\n visualGroup.lockModel();\n const allOptions = context._allOptions;\n for (const key in allOptions) {\n const value = context[key]();\n if (value !== null) {\n visualGroup[key] && visualGroup[key](value);\n }\n }\n visualGroup.unlockModel();\n\n context._cachedProps = {};\n lifeCycleManager.notify({ client: context, action: 'initialized' });\n lifeCycleManager.notify({ client: context, action: 'updated' });\n};\n\n/**\n *\n *\n */\nexport const setupChangeListener = (context) => {\n const store = context._store;\n\n store.registerImmediateListener(MOUNT, () => {\n const allOptions = Object.keys(context._allOptions);\n const props = [...allOptions, ...Object.keys(canvasOptions)];\n let equalityChecker = () => false;\n store.registerChangeListener(props, (...params) => {\n const updateProps = props.every((option, i) => {\n switch (option) {\n case ROWS:\n case COLUMNS:\n case DETAIL:\n equalityChecker = isEqual('Array');\n break;\n\n case SHAPE:\n case SIZE:\n case COLOR:\n case DATA:\n case CONFIG:\n equalityChecker = isEqual('Object');\n break;\n default:\n equalityChecker = () => true;\n break;\n }\n const oldVal = params[i][0];\n const newVal = params[i][1];\n\n return equalityChecker(oldVal, newVal);\n });\n // inform attached board to rerender\n !updateProps && dispatchProps(context);\n context.render();\n }, true);\n });\n};\n\nexport const applyInteractionPolicy = (policies, firebolt) => {\n const canvas = firebolt.context;\n const visualGroup = canvas.composition().visualGroup;\n const valueMatrix = visualGroup.composition().matrices.value;\n policies.forEach(policy => policy(valueMatrix, firebolt));\n};\n","import {\n getDataModelFromIdentifiers,\n FieldType,\n mergeRecursive\n} from 'muze-utils';\n\nimport { applyInteractionPolicy } from './helper';\n\nconst defaultInteractionPolicy = (valueMatrix, firebolt) => {\n const isMeasure = field => field.type() === FieldType.MEASURE;\n const canvas = firebolt.context;\n const visualGroup = canvas.composition().visualGroup;\n const xFields = [].concat(...visualGroup.getFieldsFromChannel('x'));\n const yFields = [].concat(...visualGroup.getFieldsFromChannel('y'));\n const colDim = xFields.every(field => field.type() === FieldType.DIMENSION);\n const fieldInf = visualGroup.resolver().getAllFields();\n const rowFacets = fieldInf.rowFacets;\n const colFacets = fieldInf.colFacets;\n valueMatrix.each((cell) => {\n const unitFireBolt = cell.valueOf().firebolt();\n\n if (!(xFields.every(isMeasure) && yFields.every(isMeasure))) {\n const facetFields = cell.valueOf().facetByFields()[0];\n const unitColFacets = facetFields.filter(d => colFacets.findIndex(v => v.equals(d)) !== -1);\n const unitRowFacets = facetFields.filter(d => rowFacets.findIndex(v => v.equals(d)) !== -1);\n let propFields;\n if (colDim) {\n propFields = unitColFacets.map(d => `${d}`);\n } else {\n propFields = unitRowFacets.map(d => `${d}`);\n }\n\n unitFireBolt.propagateWith('*', propFields, true);\n }\n });\n};\n\nconst defaultCrossInteractionPolicy = {\n behaviours: {\n '*': (propagationPayload, context) => {\n const propagationCanvasAlias = propagationPayload.sourceCanvas;\n const canvasAlias = context.parentAlias();\n return propagationCanvasAlias ? canvasAlias === propagationCanvasAlias : true;\n }\n },\n sideEffects: {\n tooltip: (propagationPayload, context) => {\n const propagationUnit = propagationPayload.sourceUnit;\n const propagationCanvas = propagationPayload.sourceCanvas;\n const unitId = context.id();\n const canvasAlias = context.parentAlias();\n if (propagationCanvas) {\n return propagationCanvas !== canvasAlias ? true : unitId === propagationUnit;\n }\n return true;\n }\n }\n};\n\nexport default class GroupFireBolt {\n constructor (context) {\n this.context = context;\n this._interactionPolicy = this.constructor.defaultInteractionPolicy();\n this._crossInteractionPolicy = this.constructor.defaultCrossInteractionPolicy();\n this.context.once('canvas.updated').then(() => {\n applyInteractionPolicy([this._interactionPolicy], this);\n const crossInteractionPolicy = this._crossInteractionPolicy;\n const behaviours = crossInteractionPolicy.behaviours;\n const sideEffects = crossInteractionPolicy.sideEffects;\n const visualGroup = context.composition().visualGroup;\n const valueMatrix = visualGroup.composition().matrices.value;\n valueMatrix.each((cell) => {\n const unitFireBolt = cell.valueOf().firebolt();\n for (const key in behaviours) {\n unitFireBolt.changeBehaviourStateOnPropagation(key, behaviours[key]);\n }\n for (const key in sideEffects) {\n unitFireBolt.changeSideEffectStateOnPropagation(key, sideEffects[key]);\n }\n });\n });\n }\n\n static defaultInteractionPolicy () {\n return defaultInteractionPolicy;\n }\n\n static defaultCrossInteractionPolicy () {\n return defaultCrossInteractionPolicy;\n }\n\n interactionPolicy (...policy) {\n if (policy.length) {\n this._interactionPolicy = policy[0] || this.constructor.defaultInteractionPolicy();\n return this;\n }\n return this._interactionPolicy;\n }\n\n crossInteractionPolicy (...policy) {\n if (policy.length) {\n this._crossInteractionPolicy = mergeRecursive(mergeRecursive({},\n this.constructor.defaultCrossInteractionPolicy()), policy[0] || {});\n return this;\n }\n return this._crossInteractionPolicy;\n }\n\n dispatchBehaviour (behaviour, payload) {\n const propPayload = Object.assign(payload);\n const criteria = propPayload.criteria;\n const data = this.context.data();\n\n propPayload.action = behaviour;\n const model = getDataModelFromIdentifiers(data, criteria);\n data.propagate(model, propPayload, {\n sourceId: this.context.alias()\n });\n return this;\n }\n\n}\n","import { GridLayout } from '@chartshq/layout';\nimport { transactor, Store, getUniqueId } from 'muze-utils';\nimport { RETINAL } from '../constants';\nimport TransactionSupport from '../transaction-support';\nimport { getRenderDetails, prepareLayout } from './layout-maker';\nimport { localOptions, canvasOptions } from './local-options';\nimport { renderComponents } from './renderer';\nimport GroupFireBolt from './firebolt';\nimport options from '../options';\nimport { initCanvas, setupChangeListener } from './helper';\n\n/**\n * This is the primary class which manages highlevel components like visualGroup, Titles, Legend, Extensions\n * (in future). Global level Muze functionality is subset this. Every time user works with an instance of\n * canvas in dom which provides instance level settings.\n *\n */\nexport default class Canvas extends TransactionSupport {\n\n /**\n * Creates reactive property accessors.\n * - data\n * - height\n * - width\n * - config\n * This configs are retrieved from options.\n */\n constructor (globalDependencies) {\n super();\n\n this._allOptions = Object.assign({}, options, localOptions);\n this._registry = {};\n this._composition = {};\n this._cachedProps = {};\n this._alias = null;\n this._renderedResolve = null;\n this._renderedPromise = new Promise((resolve) => {\n this._renderedResolve = resolve;\n });\n this._composition.layout = new GridLayout();\n this._store = new Store({});\n\n // Setters and getters will be mounted on this. The object will be mutated.\n const [, store] = transactor(this, options, this._store.model);\n transactor(this, localOptions, store);\n transactor(this, canvasOptions, store);\n this.dependencies(Object.assign({}, globalDependencies, this._dependencies));\n this.firebolt(new GroupFireBolt(this));\n this.alias(`canvas-${getUniqueId()}`);\n this.title('', {});\n this.subtitle('', {});\n this.legend({});\n this.color({});\n this.shape({});\n this.size({});\n setupChangeListener(this);\n }\n\n /**\n *\n *\n * @readonly\n * @memberof Canvas\n */\n layout (...params) {\n if (params.length) {\n return this;\n }\n return this.composition().layout;\n }\n\n /**\n *\n *\n * @readonly\n * @memberof Canvas\n */\n composition (...params) {\n if (params.length) {\n return this;\n }\n return this._composition;\n }\n\n done () {\n return this._renderedPromise;\n }\n\n /**\n *\n *\n * @param {*} params\n * @returns\n * @memberof Canvas\n */\n alias (...params) {\n if (params.length) {\n const visualGroup = this.composition().visualGroup;\n this._alias = params[0];\n visualGroup && visualGroup.alias(this.alias());\n return this;\n }\n return this._alias;\n }\n\n /**\n * Creates an instance initiated with given settings.\n *\n * @param {Object} initialSettings Initial settings to be populated in the model\n * @param {Object} regEntry newly created instance with the initial settings\n * @param {Object} globalDependencies dependencies which will be created only once in the page\n *\n * @return {Object} newly created instance with the initial settings\n */\n static withSettings (initialSettings, regEntry, globalDependencies) {\n const instance = new Canvas(globalDependencies);\n\n for (const key in initialSettings) {\n instance[key](initialSettings[key]);\n }\n // set registry for instance\n instance.registry(regEntry);\n return instance;\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof Canvas\n */\n static formalName () {\n return 'canvas';\n }\n\n /**\n *\n *\n * @readonly\n * @memberof Canvas\n */\n firebolt (...firebolt) {\n if (firebolt.length) {\n this._firebolt = firebolt[0];\n return this;\n }\n return this._firebolt;\n }\n\n /**\n * Registry peoperty accessor\n *\n * @param {Object} reg plain old javascript object keyvalue pairs. Key containing module name and value contains\n * module definition class. The reg object has to be flat object of level 1.\n */\n registry (...params) {\n if (params.length) {\n const components = Object.assign({}, params[0].components);\n const componentSubRegistry = Object.assign({}, params[0].componentSubRegistry);\n\n this._registry = { components, componentSubRegistry };\n const initedComponents = initCanvas(this);\n // @todo is it okay to continue this tight behaviour? If not use a resolver to resolve diff component type.\n this._composition.visualGroup = initedComponents[0];\n\n this.composition().visualGroup.alias(this.alias());\n return this;\n }\n return this._registry;\n }\n\n /*\n * Prepare dependencies for top level elements\n */\n dependencies (...param) {\n if (param.length) {\n this._dependencies = param[0];\n return this;\n }\n // @todo prepare dependencies here.\n return this._dependencies;\n }\n\n /**\n *\n *\n * @param {*} lifeCycles\n * @returns\n * @memberof Canvas\n */\n lifeCycle (lifeCycles) {\n const lifeCycleManager = this.dependencies().lifeCycleManager;\n if (lifeCycles) {\n lifeCycleManager.register(lifeCycles);\n return this;\n }\n return lifeCycleManager;\n }\n\n /**\n *\n *\n * @readonly\n * @memberof Canvas\n */\n legend (...params) {\n if (params.length) {\n return this;\n }\n return this.composition().legend;\n }\n\n /**\n *\n *\n * @param {*} eventName\n * @returns\n * @memberof Canvas\n */\n once (eventName) {\n const lifeCycleManager = this.dependencies().lifeCycleManager;\n return lifeCycleManager.retrieve(eventName);\n }\n\n /**\n * Internal function to trigger render, this method is cognizant of all the properties of the core modules and\n * establish a passive reactivity. Passive reactivity is not always a bad thing :)\n * @internal\n */\n render () {\n const mount = this.mount();\n const visGroup = this.composition().visualGroup;\n const lifeCycleManager = this.dependencies().lifeCycleManager;\n // Get render details including arrangement and measurement\n const { components, layoutConfig, measurement } = getRenderDetails(this, mount);\n\n lifeCycleManager.notify({ client: this, action: 'beforedraw' });\n // Prepare the layout by triggering the matrix calculation\n prepareLayout(this.layout(), components, layoutConfig, measurement);\n // Render each component\n renderComponents(this, components, layoutConfig, measurement);\n // Update life cycle\n lifeCycleManager.notify({ client: this, action: 'drawn' });\n const promises = [];\n visGroup.matrixInstance().value.each((el) => {\n promises.push(el.valueOf().done());\n });\n Promise.all(promises).then(() => {\n this._renderedResolve();\n });\n }\n\n /**\n *\n *\n * @returns\n * @memberof Canvas\n */\n xAxes () {\n return this.composition().visualGroup.getAxes('x');\n }\n\n /**\n *\n *\n * @returns\n * @memberof Canvas\n */\n yAxes () {\n return this.composition().visualGroup.getAxes('y');\n }\n\n /**\n *\n *\n * @returns\n * @memberof Canvas\n */\n getRetinalAxes () {\n const visualGroup = this.composition().visualGroup;\n return visualGroup.getAxes(RETINAL);\n }\n}\n","import { cellRegistry, SimpleCell } from '@chartshq/visual-cell';\nimport { VisualUnit } from '@chartshq/visual-unit';\nimport { layerRegistry } from '@chartshq/visual-layer';\nimport { SimpleGroup, VisualGroup } from '@chartshq/visual-group';\n\nexport const COMPONENTS = {\n VisualGroup,\n VisualUnit\n};\nexport const SUBREGISTRIES = {\n cellRegistry,\n layerRegistry\n};\nexport const INTERFACES = {\n SimpleGroup,\n SimpleCell\n};\n\n","import { DEFAULT_LAYERS } from './defaults';\n\nexport default () => {\n const reg = DEFAULT_LAYERS;\n const regObj = {\n set: (key, def) => {\n reg[key] = def;\n return regObj;\n },\n get: () => reg\n };\n return regObj;\n};\n","import {\n transactor,\n Smartlabel,\n enableChainedTransaction,\n LifeCycleManager,\n DataModel,\n makeElement,\n getClientPoint,\n selectElement,\n getEvent,\n require,\n DateTimeFormatter\n} from 'muze-utils';\n\nimport {\n SurrogateSideEffect,\n SpawnableSideEffect,\n sideEffects,\n PersistentBehaviour,\n GenericBehaviour,\n VolatileBehaviour,\n behaviouralActions,\n GenericSideEffect\n} from '@chartshq/muze-firebolt';\nimport { layerFactory } from '@chartshq/visual-layer';\nimport pkg from '../package.json';\nimport * as operators from './operators';\nimport { actionModel as ActionModel } from './action-model';\nimport options from './options';\nimport { Canvas } from './canvas';\nimport { COMPONENTS, SUBREGISTRIES } from './default-registry';\nimport './muze.scss';\n\n// Cache singleton instances which should be included only once in a page\nconst globalCache = {};\nconst defaultRegistry = COMPONENTS;\n\nconst overrideRegistryDefinitions = (overrideRegistry, registry) => {\n for (const prop in overrideRegistry) {\n registry.set(prop, overrideRegistry[prop]);\n }\n};\n\n/**\n * Entry point to renderer. Initializes an environment with settings and registries for canvas. This is a simple wrapper\n * over {@link Canvas} which enables common configuration passing to multiple such canvases.\n *\n * Everytime `muze()` is called it creates an environment. These environment supports subset of APIs of Canvas. If\n * common configuration is used to render multiple canvases then it can be set directly in the env. Like if data is\n * common across all the visulization then its better to set the data in env. When a canvas is created it receives all\n * those configuration from env.\n *\n * ```\n * // Creates an environment\n * const env = muze()\n * // Set data property in environment, so that all the canvas created from the same environment gets this data\n * // automatically\n * env.data(dm);\n * // Creates canvas, by default env pushes data to canvas instance\n * const canvas = env.canvas();\n * ```\n *\n * If a property is set on both environment and canvas instance, property set on canvas instance gets more priority.\n *\n * @public\n * @module muze\n * @namespace Muze\n *\n * @return {Env} Instance of an environment\n */\nconst muze = () => {\n // Setters and getters will be mounted on this. Object will be mutated.\n const [env, globalStore] = transactor({}, options);\n const components = Object.assign({}, COMPONENTS);\n const componentSubRegistryDef = Object.assign(SUBREGISTRIES);\n const componentSubRegistry = {};\n\n for (const prop in componentSubRegistryDef) {\n componentSubRegistry[prop] = componentSubRegistryDef[prop]();\n }\n\n // Apart form the setter getter, an instance method is injected to create real renderer instances\n env.canvas = () => {\n // Create a canvas instance with this settings\n const settings = globalStore.serialize();\n const canvas = Canvas.withSettings(settings, { /* registry */\n components,\n componentSubRegistry\n }, env.globalDependencies());\n\n // Whenever settings is changed canvas is updated\n enableChainedTransaction(globalStore, canvas, Object.keys(settings));\n\n return canvas;\n };\n\n // Global dependencies for for compositions. Only one copy of the same should be in the page\n env.globalDependencies = () => {\n if (!globalCache.smartlabel) {\n globalCache.smartlabel = new Smartlabel(1, 'body');\n }\n return {\n smartlabel: globalCache.smartlabel,\n lifeCycleManager: new LifeCycleManager()\n };\n };\n\n // Retrieves global settings. This getter is readonly so that user can't change this as change should happen\n // only from setter to avoid unwanted sync issues.\n env.settings = () => globalStore.serialize();\n\n env.registry = (...overrideRegistry) => {\n // Selectively copy the properties from COMPONENTS\n if (overrideRegistry.length) {\n for (const prop in overrideRegistry) {\n if (prop in defaultRegistry) {\n components[prop] = overrideRegistry[prop];\n }\n }\n return env;\n }\n return components;\n };\n\n env.cellRegistry = (...overrideRegistry) => {\n const cellRegistry = componentSubRegistry.cellRegistry;\n if (overrideRegistry.length) {\n overrideRegistryDefinitions(overrideRegistry[0], cellRegistry);\n return env;\n }\n return cellRegistry.get();\n };\n\n env.layerRegistry = (...overrideRegistry) => {\n const layerRegistry = componentSubRegistry.layerRegistry;\n if (overrideRegistry.length) {\n overrideRegistryDefinitions(overrideRegistry[0], layerRegistry);\n return env;\n }\n return layerRegistry.get();\n };\n\n return env;\n};\n\nconst SideEffects = {\n sideEffects,\n standards: {\n SurrogateSideEffect,\n SpawnableSideEffect,\n GenericSideEffect\n }\n};\n\nconst Behaviours = {\n behaviouralActions,\n standards: {\n GenericBehaviour,\n PersistentBehaviour,\n VolatileBehaviour\n }\n};\n\nmuze.DataModel = DataModel;\nmuze.version = pkg.version;\nmuze.SideEffects = SideEffects;\nmuze.ActionModel = ActionModel;\nmuze.layerFactory = layerFactory;\nmuze.Operators = operators;\nmuze.Behaviours = Behaviours;\nmuze.utils = {\n getClientPoint,\n getEvent,\n makeElement,\n selectElement,\n DateTimeFormatter,\n require\n};\n\nexport default muze;\n"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack://muze/webpack/universalModuleDefinition","webpack://muze/webpack/bootstrap","webpack://muze/../Documents/Muze/datamodel/dist/datamodel.js","webpack://muze/./packages/muze-utils/node_modules/hyperdis/dist/hyperdis.js","webpack://muze/(webpack)/buildin/module.js","webpack://muze/./packages/muze-utils/node_modules/fusioncharts-smartlabel/lib/SmartlabelManager.js","webpack://muze/./packages/muze-utils/node_modules/fusioncharts-smartlabel/lib/lib.js","webpack://muze/./packages/muze/src/index.js","webpack://muze/./packages/muze-utils/node_modules/fusioncharts-smartlabel/lib/container-manager.js","webpack://muze/./packages/muze-utils/node_modules/d3-array/src/ascending.js","webpack://muze/./packages/muze-utils/node_modules/d3-array/src/bisector.js","webpack://muze/./packages/muze-utils/node_modules/d3-array/src/bisect.js","webpack://muze/./packages/muze-utils/node_modules/d3-array/src/cross.js","webpack://muze/./packages/muze-utils/node_modules/d3-array/src/number.js","webpack://muze/./packages/muze-utils/node_modules/d3-array/src/array.js","webpack://muze/./packages/muze-utils/node_modules/d3-array/src/range.js","webpack://muze/./packages/muze-utils/node_modules/d3-array/src/ticks.js","webpack://muze/./packages/muze-utils/node_modules/d3-array/src/threshold/sturges.js","webpack://muze/./packages/muze-utils/node_modules/d3-array/src/quantile.js","webpack://muze/./packages/muze-utils/node_modules/d3-collection/src/map.js","webpack://muze/./packages/muze-utils/node_modules/d3-collection/src/nest.js","webpack://muze/./packages/muze-utils/node_modules/d3-collection/src/set.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/array.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/ordinal.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/band.js","webpack://muze/./packages/muze-utils/node_modules/d3-color/src/define.js","webpack://muze/./packages/muze-utils/node_modules/d3-color/src/color.js","webpack://muze/./packages/muze-utils/node_modules/d3-color/src/math.js","webpack://muze/./packages/muze-utils/node_modules/d3-color/src/lab.js","webpack://muze/./packages/muze-utils/node_modules/d3-color/src/cubehelix.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/basis.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/constant.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/color.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/rgb.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/number.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/basisClosed.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/string.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/transform/parse.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/value.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/date.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/array.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/object.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/round.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/transform/decompose.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/transform/index.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/zoom.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/hsl.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/hcl.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/cubehelix.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/piecewise.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/quantize.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/constant.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/number.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/continuous.js","webpack://muze/./packages/muze-utils/node_modules/d3-format/src/formatDecimal.js","webpack://muze/./packages/muze-utils/node_modules/d3-format/src/exponent.js","webpack://muze/./packages/muze-utils/node_modules/d3-format/src/formatSpecifier.js","webpack://muze/./packages/muze-utils/node_modules/d3-format/src/formatTrim.js","webpack://muze/./packages/muze-utils/node_modules/d3-format/src/formatPrefixAuto.js","webpack://muze/./packages/muze-utils/node_modules/d3-format/src/defaultLocale.js","webpack://muze/./packages/muze-utils/node_modules/d3-format/src/formatRounded.js","webpack://muze/./packages/muze-utils/node_modules/d3-format/src/formatTypes.js","webpack://muze/./packages/muze-utils/node_modules/d3-format/src/identity.js","webpack://muze/./packages/muze-utils/node_modules/d3-format/src/locale.js","webpack://muze/./packages/muze-utils/node_modules/d3-format/src/formatGroup.js","webpack://muze/./packages/muze-utils/node_modules/d3-format/src/formatNumerals.js","webpack://muze/./packages/muze-utils/node_modules/d3-format/src/precisionFixed.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/tickFormat.js","webpack://muze/./packages/muze-utils/node_modules/d3-format/src/precisionPrefix.js","webpack://muze/./packages/muze-utils/node_modules/d3-format/src/precisionRound.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/linear.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/identity.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/nice.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/log.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/pow.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/quantile.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/quantize.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/threshold.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/interval.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/millisecond.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/duration.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/second.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/minute.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/hour.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/day.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/week.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/month.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/year.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/utcMinute.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/utcHour.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/utcDay.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/utcWeek.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/utcMonth.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/utcYear.js","webpack://muze/./packages/muze-utils/node_modules/d3-time-format/src/locale.js","webpack://muze/./packages/muze-utils/node_modules/d3-time-format/src/defaultLocale.js","webpack://muze/./packages/muze-utils/node_modules/d3-time-format/src/isoFormat.js","webpack://muze/./packages/muze-utils/node_modules/d3-time-format/src/isoParse.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/time.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/colors.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/category10.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/category20b.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/category20.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/category20c.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/cubehelix.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/rainbow.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/viridis.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/sequential.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/colors.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/categorical/Accent.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/categorical/category10.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/categorical/Dark2.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/categorical/Paired.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/categorical/Pastel1.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/categorical/Pastel2.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/categorical/Set1.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/categorical/Set2.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/categorical/Set3.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/ramp.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/diverging/BrBG.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/diverging/PRGn.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/diverging/PiYG.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/diverging/PuOr.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/diverging/RdBu.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/diverging/RdGy.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/diverging/RdYlBu.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/diverging/RdYlGn.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/diverging/Spectral.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/BuGn.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/BuPu.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/GnBu.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/OrRd.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/PuBuGn.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/PuBu.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/PuRd.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/RdPu.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/YlGnBu.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/YlGn.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/YlOrBr.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/YlOrRd.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-single/Blues.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-single/Greens.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-single/Greys.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-single/Purples.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-single/Reds.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-single/Oranges.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/cubehelix.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/rainbow.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/sinebow.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/viridis.js","webpack://muze/./packages/muze-utils/src/enums/reserved-fields.js","webpack://muze/./packages/muze-utils/src/enums/common-props.js","webpack://muze/./packages/muze-utils/node_modules/d3-axis/src/array.js","webpack://muze/./packages/muze-utils/node_modules/d3-axis/src/identity.js","webpack://muze/./packages/muze-utils/node_modules/d3-axis/src/axis.js","webpack://muze/./packages/muze-utils/node_modules/d3-path/src/path.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/constant.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/math.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/arc.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/curve/linear.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/point.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/line.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/area.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/descending.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/identity.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/curve/radial.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/lineRadial.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/array.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/symbol/circle.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/symbol/cross.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/symbol/diamond.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/symbol/star.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/symbol/square.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/symbol/triangle.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/symbol/wye.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/noop.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/curve/basis.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/curve/basisClosed.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/curve/basisOpen.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/curve/bundle.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/curve/cardinal.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/curve/cardinalClosed.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/curve/cardinalOpen.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/curve/catmullRom.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/curve/catmullRomClosed.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/curve/catmullRomOpen.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/curve/linearClosed.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/curve/monotone.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/curve/natural.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/curve/step.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/offset/none.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/order/none.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/stack.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/order/ascending.js","webpack://muze/./packages/muze-utils/node_modules/d3-ease/src/cubic.js","webpack://muze/./packages/muze-utils/node_modules/d3-ease/src/poly.js","webpack://muze/./packages/muze-utils/node_modules/d3-ease/src/sin.js","webpack://muze/./packages/muze-utils/node_modules/d3-ease/src/bounce.js","webpack://muze/./packages/muze-utils/node_modules/d3-ease/src/back.js","webpack://muze/./packages/muze-utils/node_modules/d3-ease/src/elastic.js","webpack://muze/./packages/muze-utils/node_modules/d3-voronoi/src/constant.js","webpack://muze/./packages/muze-utils/node_modules/d3-voronoi/src/point.js","webpack://muze/./packages/muze-utils/node_modules/d3-voronoi/src/RedBlackTree.js","webpack://muze/./packages/muze-utils/node_modules/d3-voronoi/src/Edge.js","webpack://muze/./packages/muze-utils/node_modules/d3-voronoi/src/Cell.js","webpack://muze/./packages/muze-utils/node_modules/d3-voronoi/src/Circle.js","webpack://muze/./packages/muze-utils/node_modules/d3-voronoi/src/Beach.js","webpack://muze/./packages/muze-utils/node_modules/d3-voronoi/src/Diagram.js","webpack://muze/./packages/muze-utils/node_modules/d3-voronoi/src/voronoi.js","webpack://muze/./packages/muze-utils/src/common-utils.js","webpack://muze/./packages/muze-utils/node_modules/d3-ease/src/linear.js","webpack://muze/./packages/muze-utils/node_modules/d3-ease/src/circle.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/symbol.js","webpack://muze/./packages/muze-utils/src/enums/stack-config.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/order/descending.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/offset/diverging.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/offset/expand.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/offset/wiggle.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/pie.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/namespaces.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/namespace.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/creator.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selector.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selectorAll.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/matcher.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/sparse.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/enter.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/constant.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/data.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/sort.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/attr.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/window.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/style.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/classed.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/text.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/html.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/raise.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/lower.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/insert.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/remove.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/clone.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/on.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/dispatch.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/index.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/select.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/selectAll.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/filter.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/exit.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/merge.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/order.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/call.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/nodes.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/node.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/size.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/empty.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/each.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/property.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/append.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/datum.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/select.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/local.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/sourceEvent.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/point.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/mouse.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/touch.js","webpack://muze/./packages/muze-utils/node_modules/d3-dispatch/src/dispatch.js","webpack://muze/./packages/muze-utils/node_modules/d3-drag/src/noevent.js","webpack://muze/./packages/muze-utils/node_modules/d3-drag/src/nodrag.js","webpack://muze/./packages/muze-utils/node_modules/d3-drag/src/constant.js","webpack://muze/./packages/muze-utils/node_modules/d3-drag/src/event.js","webpack://muze/./packages/muze-utils/node_modules/d3-drag/src/drag.js","webpack://muze/./packages/muze-utils/node_modules/d3-timer/src/timer.js","webpack://muze/./packages/muze-utils/node_modules/d3-timer/src/timeout.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/schedule.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/tween.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/interpolate.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/remove.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/selection.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/text.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/index.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/select.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/selectAll.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/filter.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/merge.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/transition.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/on.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/attr.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/attrTween.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/style.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/styleTween.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/delay.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/duration.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/ease.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/selection/transition.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/selection/index.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/selection/interrupt.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/interrupt.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/active.js","webpack://muze/./packages/muze-utils/src/renderer-utils.js","webpack://muze/./packages/muze-utils/src/DataSystem/selection.js","webpack://muze/./packages/muze-utils/src/DataSystem/data-object.js","webpack://muze/./packages/muze-utils/src/lifecycle-manager/event-list.js","webpack://muze/./packages/muze-utils/src/lifecycle-manager/lifecycle-manager.js","webpack://muze/./packages/muze-utils/src/lifecycle-manager/index.js","webpack://muze/./packages/muze-firebolt/src/enums/actions.js","webpack://muze/./packages/muze-firebolt/src/enums/selection.js","webpack://muze/./packages/muze-firebolt/src/selection-set/index.js","webpack://muze/./packages/muze-firebolt/src/helper/index.js","webpack://muze/./packages/muze-firebolt/src/firebolt.js","webpack://muze/./packages/muze-firebolt/src/actions/behavioural/generic.js","webpack://muze/./packages/muze-firebolt/src/actions/behavioural/volatile.js","webpack://muze/./packages/muze-firebolt/src/enums/behaviours.js","webpack://muze/./packages/muze-firebolt/src/actions/behavioural/highlight.js","webpack://muze/./packages/muze-firebolt/src/actions/behavioural/brush.js","webpack://muze/./packages/muze-firebolt/src/actions/behavioural/filter.js","webpack://muze/./packages/muze-firebolt/src/actions/behavioural/persistent.js","webpack://muze/./packages/muze-firebolt/src/actions/behavioural/select.js","webpack://muze/./packages/muze-firebolt/src/actions/physical/helpers/drag-action-config.js","webpack://muze/./packages/muze-firebolt/src/actions/physical/helpers/drag-event.js","webpack://muze/./packages/muze-firebolt/src/actions/physical/hover.js","webpack://muze/./packages/muze-firebolt/src/enums/constants.js","webpack://muze/./packages/muze-firebolt/src/actions/physical/helpers/index.js","webpack://muze/./packages/muze-firebolt/src/actions/physical/click.js","webpack://muze/./packages/muze-firebolt/src/actions/physical/index.js","webpack://muze/./packages/muze-firebolt/src/actions/physical/drag.js","webpack://muze/./packages/muze-firebolt/src/actions/physical/longtouch.js","webpack://muze/./packages/muze-firebolt/src/actions/physical/touch-drag.js","webpack://muze/./packages/muze-firebolt/src/side-effects/generic.js","webpack://muze/./packages/muze-firebolt/src/side-effects/surrogate.js","webpack://muze/./packages/muze-firebolt/src/side-effects/spawnable.js","webpack://muze/./packages/muze-firebolt/src/side-effects/selection-box/helper.js","webpack://muze/./packages/muze-firebolt/src/side-effects/selection-box/index.js","webpack://muze/./packages/muze-firebolt/src/actions/physical/selection-box-drag.js","webpack://muze/./packages/muze-tooltip/src/constants.js","webpack://muze/./packages/muze-tooltip/src/default-config.js","webpack://muze/./packages/muze-tooltip/src/helper.js","webpack://muze/./packages/muze-tooltip/src/strategy.js","webpack://muze/./packages/muze-tooltip/src/content.js","webpack://muze/./packages/muze-tooltip/src/tooltip.js","webpack://muze/./packages/muze-firebolt/src/side-effects/tooltip/strategies.js","webpack://muze/./packages/muze-firebolt/src/side-effects/tooltip/index.js","webpack://muze/./packages/muze-firebolt/src/side-effects/helper/index.js","webpack://muze/./packages/muze-firebolt/src/side-effects/crossline/index.js","webpack://muze/./packages/muze-firebolt/src/side-effects/plot-highlighter/strategy.js","webpack://muze/./packages/muze-firebolt/src/side-effects/plot-highlighter/index.js","webpack://muze/./packages/muze-firebolt/src/side-effects/filter/index.js","webpack://muze/./packages/muze-firebolt/src/side-effects/anchors/index.js","webpack://muze/./packages/muze-firebolt/src/side-effects/persistent-anchors.js","webpack://muze/./packages/muze-firebolt/src/side-effects/brush-anchors.js","webpack://muze/./packages/muze-firebolt/src/behaviour-effect-map.js","webpack://muze/./packages/visual-layer/src/enums/constants.js","webpack://muze/./packages/visual-layer/src/layers/area/default-config.js","webpack://muze/./packages/visual-layer/src/simple-layer/simple-layer.js","webpack://muze/./packages/visual-layer/src/enums/props.js","webpack://muze/./packages/muze-axis/src/enums/axis-orientation.js","webpack://muze/./packages/muze-axis/src/enums/scale-type.js","webpack://muze/./packages/muze-axis/src/enums/constants.js","webpack://muze/./packages/muze-axis/src/scale-creator.js","webpack://muze/./packages/muze-axis/src/cartesian-axis/default-config.js","webpack://muze/./packages/muze-axis/src/axis-renderer.js","webpack://muze/./packages/muze-axis/src/cartesian-axis/helper.js","webpack://muze/./packages/muze-axis/src/cartesian-axis/props.js","webpack://muze/./packages/muze-axis/src/cartesian-axis/simple-axis.js","webpack://muze/./packages/muze-axis/src/cartesian-axis/interpolators/linear.js","webpack://muze/./packages/muze-axis/src/cartesian-axis/interpolators/log.js","webpack://muze/./packages/muze-axis/src/cartesian-axis/interpolators/pow.js","webpack://muze/./packages/muze-axis/src/cartesian-axis/continous-axis.js","webpack://muze/./packages/muze-axis/src/cartesian-axis/band-axis.js","webpack://muze/./packages/muze-axis/src/cartesian-axis/time-axis.js","webpack://muze/./packages/muze-axis/src/color-axis/color-maps.js","webpack://muze/./packages/muze-axis/src/color-axis/defaults.js","webpack://muze/./packages/muze-axis/src/color-axis/props.js","webpack://muze/./packages/muze-axis/src/color-axis/color-strategy.js","webpack://muze/./packages/muze-axis/src/color-axis/color-axis.js","webpack://muze/./packages/muze-axis/src/size-axis/defaults.js","webpack://muze/./packages/muze-axis/src/size-axis/size-strategy.js","webpack://muze/./packages/muze-axis/src/size-axis/props.js","webpack://muze/./packages/muze-axis/src/size-axis/size-axis.js","webpack://muze/./packages/muze-axis/src/shape-axis/defaults.js","webpack://muze/./packages/muze-axis/src/shape-axis/props.js","webpack://muze/./packages/muze-axis/src/shape-axis/shape-axis.js","webpack://muze/./packages/muze-axis/src/shape-axis/helper.js","webpack://muze/./packages/muze-axis/src/data-type-scale-map.js","webpack://muze/./packages/transform/src/group-transform/index.js","webpack://muze/./packages/transform/src/identity-transform/index.js","webpack://muze/./packages/transform/src/transform-factory/index.js","webpack://muze/./packages/transform/src/enums/transform-type.js","webpack://muze/./packages/transform/src/stack-transform/index.js","webpack://muze/./packages/visual-layer/src/helpers/index.js","webpack://muze/./packages/visual-layer/src/base-layer/listener-map.js","webpack://muze/./packages/visual-layer/src/base-layer/default-options.js","webpack://muze/./packages/visual-layer/src/base-layer/base-layer.js","webpack://muze/./packages/visual-layer/src/layers/line/renderer.js","webpack://muze/./packages/visual-layer/src/layers/line/default-config.js","webpack://muze/./packages/visual-layer/src/layers/line/line.js","webpack://muze/./packages/visual-layer/src/layers/area/renderer.js","webpack://muze/./packages/visual-layer/src/layers/area/area.js","webpack://muze/./packages/visual-layer/src/layers/arc/default-config.js","webpack://muze/./packages/visual-layer/src/layers/arc/arc.js","webpack://muze/./packages/visual-layer/src/layers/arc/arc-helper.js","webpack://muze/./packages/visual-layer/src/layers/text/renderer.js","webpack://muze/./packages/visual-layer/src/layers/text/default-config.js","webpack://muze/./packages/visual-layer/src/layers/text/text.js","webpack://muze/./packages/visual-layer/src/layers/point/renderer.js","webpack://muze/./packages/visual-layer/src/layers/point/default-config.js","webpack://muze/./packages/visual-layer/src/layers/point/point.js","webpack://muze/./packages/visual-layer/src/layers/bar/renderer.js","webpack://muze/./packages/visual-layer/src/layers/bar/default-config.js","webpack://muze/./packages/visual-layer/src/layers/bar/bar-helper.js","webpack://muze/./packages/visual-layer/src/layers/bar/bar.js","webpack://muze/./packages/visual-layer/src/layers/tick/default-config.js","webpack://muze/./packages/visual-layer/src/layers/tick/renderer.js","webpack://muze/./packages/visual-layer/src/layers/tick/tick.js","webpack://muze/./packages/visual-layer/src/layer-factory/index.js","webpack://muze/./packages/visual-layer/src/defaults.js","webpack://muze/./packages/visual-group/src/enums/constants.js","webpack://muze/./packages/visual-group/src/visual-group/local-options.js","webpack://muze/./packages/visual-group/src/simple-group/simple-group.js","webpack://muze/./packages/visual-group/src/variable/variable.js","webpack://muze/./packages/visual-group/src/variable/composed-vars.js","webpack://muze/./packages/visual-group/src/variable/simple-var.js","webpack://muze/./packages/visual-group/src/encoder/field-sanitizer.js","webpack://muze/./packages/visual-group/src/encoder/visual-encoder.js","webpack://muze/./packages/visual-group/src/enums/scale-maps.js","webpack://muze/./packages/visual-group/src/data-type-scale-map.js","webpack://muze/./packages/visual-group/src/encoder/encoder-helper.js","webpack://muze/./packages/visual-group/src/encoder/cartesian-encoder.js","webpack://muze/./packages/visual-group/src/encoder/polar-encoder.js","webpack://muze/./packages/visual-group/src/encoder/retinal-encoder.js","webpack://muze/./packages/visual-group/src/group-helper/group-utils.js","webpack://muze/./packages/visual-group/src/enums/defaults.js","webpack://muze/./packages/muze-utils/src/DataSystem/dataSelect.js","webpack://muze/./packages/visual-unit/src/firebolt/action-behaviour-map.js","webpack://muze/./packages/visual-unit/src/enums/reactive-props.js","webpack://muze/./packages/visual-unit/src/helper/index.js","webpack://muze/./packages/visual-unit/src/helper/grid-lines.js","webpack://muze/./packages/visual-unit/src/default-config.js","webpack://muze/./packages/visual-unit/src/enums/constants.js","webpack://muze/./packages/visual-unit/src/local-options.js","webpack://muze/./packages/visual-unit/src/listener-map.js","webpack://muze/./packages/visual-unit/src/props.js","webpack://muze/./packages/visual-unit/src/firebolt/helper.js","webpack://muze/./packages/visual-unit/src/firebolt/payload-generator.js","webpack://muze/./packages/visual-unit/src/firebolt/data-propagator.js","webpack://muze/./packages/visual-unit/src/firebolt/index.js","webpack://muze/./packages/visual-unit/src/visual-unit.js","webpack://muze/./packages/visual-group/src/group-helper/matrix-model.js","webpack://muze/./packages/visual-group/src/group-helper/cell-creator.js","webpack://muze/./packages/visual-group/src/group-helper/matrix-resolver.js","webpack://muze/./packages/visual-group/src/visual-group/value-matrix.js","webpack://muze/./packages/visual-group/src/visual-group/change-listener.js","webpack://muze/./packages/visual-group/src/visual-group/props.js","webpack://muze/./packages/visual-group/src/visual-group/visual-group.js","webpack://muze/./packages/muze-legend/src/firebolt/behavioural/select.js","webpack://muze/./packages/muze-legend/src/firebolt/action-behaviour-map.js","webpack://muze/./packages/muze-legend/src/firebolt/behaviour-effect-map.js","webpack://muze/./packages/muze-legend/src/enums/behaviours.js","webpack://muze/./packages/muze-legend/src/enums/side-effects.js","webpack://muze/./packages/muze-legend/src/enums/constants.js","webpack://muze/./packages/muze-legend/src/firebolt/helper.js","webpack://muze/./packages/muze-legend/src/firebolt/legend-firebolt.js","webpack://muze/./packages/muze-legend/src/firebolt/physical/drag.js","webpack://muze/./packages/muze-legend/src/firebolt/physical/hover.js","webpack://muze/./packages/muze-legend/src/firebolt/physical/click.js","webpack://muze/./packages/muze-legend/src/firebolt/physical/index.js","webpack://muze/./packages/muze-legend/src/enums/actions.js","webpack://muze/./packages/muze-legend/src/firebolt/physical/selection-box-drag.js","webpack://muze/./packages/muze-legend/src/firebolt/side-effects/selection-box/index.js","webpack://muze/./packages/muze-legend/src/firebolt/side-effects/legend-highlighter/strategies.js","webpack://muze/./packages/muze-legend/src/firebolt/side-effects/legend-highlighter/index.js","webpack://muze/./packages/muze-legend/src/legend/props.js","webpack://muze/./packages/muze-legend/src/legend/defaults.js","webpack://muze/./packages/muze-legend/src/legend/legend-helper.js","webpack://muze/./packages/muze-legend/src/legend/simple-legend.js","webpack://muze/./packages/muze-legend/src/legend/position-config.js","webpack://muze/./packages/muze-legend/src/legend/renderer.js","webpack://muze/./packages/muze-legend/src/legend/discrete-legend.js","webpack://muze/./packages/muze-legend/src/legend/gradient-helper.js","webpack://muze/./packages/muze-legend/src/legend/gradient-legend.js","webpack://muze/./packages/muze-legend/src/legend/step-legend.js","webpack://muze/./packages/muze/src/constants.js","webpack://muze/./packages/muze/src/operators.js","webpack://muze/./packages/muze/src/action-model.js","webpack://muze/./packages/muze/src/defaults.js","webpack://muze/./packages/muze/src/options.js","webpack://muze/./packages/layout/src/enums/constants.js","webpack://muze/./packages/layout/src/generic-layout/index.js","webpack://muze/./packages/layout/src/grid-layout/defaults.js","webpack://muze/./packages/layout/src/grid-layout/span-maker.js","webpack://muze/./packages/layout/src/grid-layout/renderer.js","webpack://muze/./packages/layout/src/utils/index.js","webpack://muze/./packages/layout/src/visual-matrix/props.js","webpack://muze/./packages/layout/src/visual-matrix/default-config.js","webpack://muze/./packages/layout/src/visual-matrix/visual-matrix.js","webpack://muze/./packages/layout/src/grid-layout/computations.js","webpack://muze/./packages/layout/src/grid-layout/layout.js","webpack://muze/./packages/layout/src/grid-layout/layout-helper.js","webpack://muze/./packages/muze/src/transaction-support.js","webpack://muze/./packages/muze/src/canvas/component-resolver.js","webpack://muze/./packages/visual-cell/src/enums/constants.js","webpack://muze/./packages/visual-cell/src/enums/cell-type.js","webpack://muze/./packages/visual-cell/src/simple-cell.js","webpack://muze/./packages/visual-cell/src/enums/defaults.js","webpack://muze/./packages/visual-cell/src/props.js","webpack://muze/./packages/visual-cell/src/axis-cell.js","webpack://muze/./packages/visual-cell/src/blank-cell.js","webpack://muze/./packages/visual-cell/src/text-cell.js","webpack://muze/./packages/visual-cell/src/geom-cell.js","webpack://muze/./packages/visual-cell/src/defaults.js","webpack://muze/./packages/visual-cell/src/constants.js","webpack://muze/./packages/visual-cell/src/cell-registry.js","webpack://muze/./packages/muze/src/canvas/title-maker.js","webpack://muze/./packages/muze/src/canvas/legend-maker.js","webpack://muze/./packages/muze/src/canvas/layout-maker.js","webpack://muze/./packages/muze/src/canvas/defaults.js","webpack://muze/./packages/muze/src/canvas/local-options.js","webpack://muze/./packages/muze/src/canvas/renderer.js","webpack://muze/./packages/muze/src/canvas/helper.js","webpack://muze/./packages/muze/src/canvas/firebolt.js","webpack://muze/./packages/muze/src/canvas/canvas.js","webpack://muze/./packages/muze/src/default-registry.js","webpack://muze/./packages/visual-layer/src/layer-registry.js","webpack://muze/./packages/muze/src/muze.js"],"names":["webpackUniversalModuleDefinition","root","factory","exports","module","define","amd","window","installedModules","__webpack_require__","moduleId","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","getDefault","getModuleExports","object","property","prototype","hasOwnProperty","p","s","e","_typeof","__WEBPACK_AMD_DEFINE_ARRAY__","undefined","__WEBPACK_AMD_DEFINE_RESULT__","__WEBPACK_AMD_DEFINE_FACTORY__","apply","default","description","homepage","version","license","main","author","keywords","repository","type","url","contributors","email","dependencies","d3-dsv","devDependencies","babel-cli","babel-core","babel-eslint","babel-loader","babel-plugin-transform-runtime","babel-preset-env","babel-preset-es2015","babel-preset-flow","chai","cross-env","eslint","eslint-config-airbnb","eslint-plugin-import","eslint-plugin-jsx-a11y","eslint-plugin-react","istanbul-instrumenter-loader","jsdoc","json2yaml","karma","karma-chai","karma-chrome-launcher","karma-coverage-istanbul-reporter","karma-mocha","karma-spec-reporter","karma-webpack","marked","mocha","mocha-webpack","transform-runtime","webpack","webpack-cli","webpack-dev-server","scripts","test","ut","utd","build","build:dev","start","lint","lint-errors","docs","u","f","Me","Ve","Ye","Be","a","ct","ft","st","lt","dt","pt","ht","vt","FLAT_JSON","DSV_STR","DSV_ARR","AUTO","CATEGORICAL","TEMPORAL","GEO","DISCRETE","MEASURE","DIMENSION","NORMAL","INVERSE","ALL","length","split","forEach","configurable","writable","TypeError","this","_ref","_rowDiff","sanitize","parsed","getData","fieldType","subType","concat","Array","isArray","from","Set","Math","min","max","parse","clone","fieldName","getMinDiff","unit","scale","defAggFn","push","data","bins","schema","h","Date","v","format","dtParams","nativeDate","RegExp","escape","replace","TOKEN_PREFIX","DATETIME_PARAM_SEQUENCE","YEAR","MONTH","DAY","HOUR","MINUTE","SECOND","MILLISECOND","defaultNumberParser","isFinite","parseInt","defaultRangeParser","toLowerCase","getTokenDefinitions","short","long","H","index","extract","parser","formatter","getHours","toString","P","M","getMinutes","S","getSeconds","K","getMilliseconds","join","getDay","A","getDate","b","getMonth","B","y","substring","getFullYear","Y","getTokenFormalNames","HOUR_12","AMPM_UPPERCASE","AMPM_LOWERCASE","SHORT_DAY","LONG_DAY","DAY_OF_MONTH","DAY_OF_MONTH_CONSTANT_WIDTH","SHORT_MONTH","LONG_MONTH","MONTH_OF_YEAR","SHORT_YEAR","LONG_YEAR","tokenResolver","arguments","findTokens","keys","indexOf","token","formatAs","String","extractTokenValue","noBreak","splice","map","match","shift","getNativeDate","unshift","Function","g","iterator","constructor","_","O","w","E","k","j","T","getTime","round","random","x","F","abs","N","R","createNamespace","fields","fieldsObj","getMeasure","getDimension","D","field","_value","C","next","done","return","L","U","V","G","CROSS","LEFTOUTER","RIGHTOUTER","NATURAL","FULLOUTER","W","getFieldspace","Error","_rowDiffset","Ke","z","X","floor","Q","$","Z","Map","has","set","ee","label","reduce","ne","_colIdentifier","sort","re","ie","ae","oe","sum","avg","every","first","last","count","std","sqrt","pow","ue","ce","fe","store","entries","__unregister","delete","se","le","pe","he","yt","ve","me","ye","ge","fieldDescription","be","_e","ReferenceError","__proto__","getPrototypeOf","fieldUnit","fieldScale","fieldDefAggFn","fieldNumberformat","numberFormat","setPrototypeOf","Number","POSITIVE_INFINITY","NEGATIVE_INFINITY","parseFloat","isNaN","Oe","Ae","trim","_unique","we","Ee","subtype","ke","je","minDiff","_dtf","Se","Te","bin","Fe","xe","dataFormat","assign","firstRowHeader","Ne","Re","De","Pe","Ce","Ie","JSON","stringify","Le","charCodeAt","slice","columns","parseRows","formatRows","Ue","He","fieldSeparator","Je","Ge","qe","We","op","meta","criteria","_derivation","ze","operation","filterByMeasure","getFieldsConfig","values","def","domain","some","valueOf","select","saveChild","Xe","getPartialFieldspace","__calculateFieldspace","calculateFieldsConfig","config","Qe","filter","projField","actualProjField","$e","_partialFieldspace","Ze","et","groupByString","params","tt","nonTraversingModel","excludeModels","handlePropagation","_children","nt","propagationNameSpace","propagateToSource","sourceId","propagateInterpolatedValues","persistent","mutableActions","filterFn","applyOnSource","action","model","models","path","_parent","sourceIdentifiers","propagationSourceId","groupByModel","reverse","rt","it","_fieldStoreName","_propagationNameSpace","immutableActions","_fieldspace","getAllFields","search","_fieldConfig","removeChild","findIndex","at","ot","_onPropagation","_sortingDetails","order","withUid","te","uids","addUid","columnWise","pop","de","defaultReducer","resolve","fieldsArr","replaceVar","addField","isMutableAction","payload","find","propConfig","filterImmutableAction","I","buckets","binCount","binSize","stops","add","mid","range","measureName","binFieldName","mt","Operators","compose","addParent","dispose","project","groupBy","calculateVariable","crossProduct","difference","naturalJoin","leftOuterJoin","rightOuterJoin","fullOuterJoin","union","Stats","DateTimeFormatter","DataFormat","FilteringMode","_set","requestAnimationFrame","webkitRequestAnimationFrame","mozRequestAnimationFrame","oRequestAnimationFrame","msRequestAnimationFrame","setTimeout","__lastTime","__id","unique","qualifiedName","seed","fn","outgoingEdges","accumulate","identity","dep","edges","_seed","requireResolve","retriever","history","resolver","electricEdges","retrieveDetails","q","listeners","nextFrame","currentFrame","qualifiedNodeMap","_wholeSet","_propagate","propagationOverride","currentFrameListeners","nextFrameListeners","_schedule","flush","perv","addDependencies","getDependencies","getResolvedList","addEdges","addElectricNode","append","__execUniqueElectricEdges","toArray","repeatHead","resetPropagationOverride","update","isRoot","_graph","_lockFlag","_reqQ","_addPropInModel","createNodesFrom","createElectricNodeOf","stopPropagation","setPropagationOverride","resetNodeValue","setProp","getNodeValue","getNodeFromQualifiedName","webpackPolyfill","deprecate","paths","children","_interopRequireDefault","obj","_lib2","_containerManager2","slLib","init","doc","win","document","htmlSplCharSpace"," ","documentSupport","getDocumentSupport","SVG_BBOX_CORRECTION","isWebKit","SmartLabelManager","id","container","useEllipses","options","wrapper","prop","prevInstance","isBrowserLess","maxCacheLimit","maxDefaultCacheLimit","getElementById","createContainer","innerHTML","testStrAvg","isHeadLess","isIE","offsetHeight","offsetWidth","parentContainerStyle","style","parentContainer","_containerManager","_showNoEllipses","_init","setStyle","textToLines","smartlabel","text","lines","_calCharDimWithCache","calculateDifference","size","csArr","tw","twi","cachedStyle","asymmetricDifference","maxAdvancedCacheLimit","_container","cache","_advancedCache","advancedCacheKey","_advancedCacheKey","cacheName","fontSize","fontFamily","fontWeight","fontStyle","cacheInitName","repeat","width","height","_getWidthFn","contObj","_containerObj","svgText","str","bbox","textContent","getBBox","_styleNotSet","setLineHeight","sCont","node","_context","context","_cache","charCache","_lineHeight","lineHeight","useEllipsesOnOverflow","getSmartText","maxWidth","maxHeight","noWrap","len","trimStr","tempArr","tmpText","maxWidthWithEll","toolText","oriWidth","oriHeight","newCharIndex","nearestChar","tempChar","getWidth","initialLeft","initialTop","getOriSizeImproveObj","spanArr","minWidth","elem","chr","elemRightMostPoint","elemLowestPoint","lastBR","removeFromIndex","removeFromIndexForEllipses","hasHTMLTag","maxStrWidth","lastDash","lastSpace","lastIndexBroken","strWidth","strHeight","oriTextArr","ellipsesStr","ellipsesWidth","dotWidth","characterArr","dashIndex","spaceIndex","lastLineBreak","fastTrim","ws","charAt","smartLabel","oriTextWidth","oriTextHeight","oriText","isTruncated","xmlTagRegEx","ltgtRegex","getOriSize","substr","getNearestBreakIndex","detailObj","tooltext","lastIndexOf","spanAdditionRegx","spanAdditionReplacer","classNameWithTag","classNameWithTagBR","childRetriverFn","childRetriverString","noClassTesting","classNameReg","className","spaceIdx","dashIdx","offsetLeft","offsetTop","parentNode","insertBefore","createElement","classNameBrReg","spanRemovalRegx","error","detailedCalculationFlag","textArr","letter","lSize","cumulativeSize","indiSizeStore","lib","userAgent","navigator","ceil","clsNameSpace","containerClass","brReplaceRegex","position","top","whiteSpace","padding","overflow","supportedStyle","font","font-family","font-weight","font-size","line-height","font-style","getElementsByClassName","opera","hasSVG","Boolean","SVGAngle","implementation","hasFeature","containerParent","body","appendChild","setAttribute","getElementsByTagName","sl","charLen","increment","avgWidth","styleObj","fSize","Muze","ContainerManager","maxContainers","svg","containers","rootNode","createElementNS","setAttributeNS","svgRoot","diff","containerObj","keyStr","prev","removeContainer","addContainer","avgCharWidth","display","cObj","ascending","NaN","bisector","compare","ascendingComparator","left","lo","hi","right","ascendingBisect","bisectRight","bisect","number","array_array","src_range","stop","step","e10","e5","e2","src_ticks","ticks","tickIncrement","power","log","LN10","tickStep","step0","step1","quantile","valueof","i0","value0","map_Map","map_map","each","remove","clear","empty","src_map","src_nest","sortValues","rollup","nest","sortKeys","array","depth","createResult","setResult","keyValue","valuesByKey","result","createObject","setObject","createMap","setMap","sortKey","set_Set","proto","set_set","src_array_array","src_array_map","array_slice","implicit","ordinal","unknown","copy","band","bandwidth","ordinalRange","paddingInner","paddingOuter","align","rescale","rangeRound","invertExtent","r0","r1","hiIndex","getClosestIndexOf","invert","arr","side","highVal","d1","low","high","extend","parent","definition","Color","reI","reN","reP","reHex3","reHex6","reRgbInteger","reRgbPercent","reRgbaInteger","reRgbaPercent","reHslPercent","reHslaPercent","named","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","color_color","exec","Rgb","rgbn","rgba","hsla","rgbConvert","rgb","opacity","color_rgb","hex","Hsl","hsl","hslConvert","hsl2rgb","m1","m2","displayable","brighter","darker","deg2rad","PI","rad2deg","Xn","Yn","Zn","lab_t0","lab_t1","t2","t3","labConvert","Lab","Hcl","cos","sin","rgb2lrgb","xyz2lab","lab","lab2xyz","lrgb2rgb","hclConvert","atan2","hcl","cubehelix_D","ED","EB","BC_DA","cubehelix_cubehelix","cubehelixConvert","Cubehelix","bl","basis","t1","v0","v1","v2","v3","cosh","sinh","src_constant","linear","color_hue","gamma","nogamma","exponential","src_rgb","rgbGamma","color","end","rgbSpline","spline","colors","rgbBasis","src_number","reA","reB","source","cssNode","cssRoot","cssView","svgNode","src_string","am","bm","bs","bi","lastIndex","one","string_zero","src_value","value_typeof","setTime","nb","na","src_round","degrees","decompose_identity","translateX","translateY","rotate","skewX","scaleX","scaleY","decompose","atan","interpolateTransform","pxComma","pxParen","degParen","translate","xa","ya","xb","yb","interpolateTransformCss","parseCss","documentElement","defaultView","transform","getComputedStyle","getPropertyValue","interpolateTransformSvg","parseSvg","baseVal","consolidate","matrix","SQRT2","hsl_hsl","hue","hslLong","hcl_hcl","src_cubehelix_cubehelix","cubehelixGamma","cubehelix","cubehelixLong","piecewise_piecewise","interpolate","d3_scale_src_constant","d3_scale_src_number","continuous_unit","deinterpolateLinear","bimap","deinterpolate","reinterpolate","d0","polymap","target","clamp","continuous","piecewise","output","input","deinterpolateClamp","reinterpolateClamp","formatDecimal","toExponential","coefficient","src_exponent","formatSpecifier","specifier","FormatSpecifier","fill","sign","symbol","zero","comma","precision","prefixExponent","defaultLocale_locale","defaultLocale_format","defaultLocale_formatPrefix","formatTrim","out","i1","formatRounded","exponent","formatTypes","%","toFixed","toPrecision","toUpperCase","src_identity","prefixes","src_locale","locale","group","grouping","thousands","formatGroup","currency","decimal","numerals","formatNumerals","percent","newFormat","prefix","suffix","formatType","maybeSuffix","valuePrefix","valueSuffix","valueNegative","Infinity","formatPrefix","defaultLocale","src_tickFormat","precisionPrefix","precisionRound","precisionFixed","linearish","tickFormat","nice","linear_linear","identity_identity","src_nice","interval","x0","x1","log_deinterpolate","log_reinterpolate","pow10","powp","base","exp","logp","log10","log2","reflect","logs","pows","raise","quantile_quantile","thresholds","quantiles","quantize_quantize","threshold_threshold","interval_t0","interval_t1","newInterval","floori","offseti","date","offset","previous","millisecond_millisecond","src_millisecond","durationMinute","durationWeek","second_second","getUTCSeconds","src_second","minute_minute","src_minute","hour_hour","getTimezoneOffset","src_hour","day_day","setHours","setDate","src_day","weekday","sunday","monday","tuesday","wednesday","thursday","friday","saturday","month_month","setMonth","src_month","year_year","setFullYear","src_year","utcMinute","setUTCSeconds","getUTCMinutes","utcHour","setUTCMinutes","getUTCHours","utcDay","setUTCHours","setUTCDate","getUTCDate","src_utcDay","utcWeekday","getUTCDay","utcSunday","utcMonday","utcTuesday","utcWednesday","utcThursday","utcFriday","utcSaturday","utcMonth","setUTCMonth","getUTCMonth","getUTCFullYear","utcYear","setUTCFullYear","src_utcYear","localDate","utcDate","UTC","newYear","src_defaultLocale_locale","timeFormat","utcFormat","utcParse","pads","-","0","numberRe","percentRe","requoteRe","locale_pad","string","requote","formatRe","names","formatLookup","parseWeekdayNumberSunday","parseWeekdayNumberMonday","parseWeekNumberSunday","parseWeekNumberISO","parseWeekNumberMonday","parseFullYear","parseYear","parseZone","parseMonthNumber","parseDayOfMonth","parseDayOfYear","parseHour24","parseMinutes","parseSeconds","parseMilliseconds","parseMicroseconds","parseLiteralPercent","parseUnixTimestamp","parseUnixTimestampSeconds","formatDayOfMonth","formatHour24","formatHour12","formatDayOfYear","formatMilliseconds","formatMicroseconds","formatMonthNumber","formatMinutes","formatSeconds","formatWeekdayNumberMonday","day","formatWeekNumberSunday","formatWeekNumberISO","formatWeekdayNumberSunday","formatWeekNumberMonday","locale_formatYear","formatFullYear","formatZone","formatUTCDayOfMonth","formatUTCHour24","formatUTCHour12","formatUTCDayOfYear","formatUTCMilliseconds","getUTCMilliseconds","formatUTCMicroseconds","formatUTCMonthNumber","formatUTCMinutes","formatUTCSeconds","formatUTCWeekdayNumberMonday","dow","formatUTCWeekNumberSunday","formatUTCWeekNumberISO","formatUTCWeekdayNumberSunday","formatUTCWeekNumberMonday","formatUTCYear","formatUTCFullYear","formatUTCZone","formatLiteralPercent","formatUnixTimestamp","formatUnixTimestampSeconds","defaultLocale_defaultLocale","formatLocale","locale_dateTime","dateTime","locale_date","locale_time","time","locale_periods","periods","locale_weekdays","days","locale_shortWeekdays","shortDays","locale_months","months","locale_shortMonths","shortMonths","periodRe","periodLookup","weekdayRe","weekdayLookup","shortWeekdayRe","shortWeekdayLookup","monthRe","monthLookup","shortMonthRe","shortMonthLookup","formats","formatShortWeekday","formatWeekday","formatShortMonth","formatMonth","formatPeriod","utcFormats","formatUTCShortWeekday","formatUTCWeekday","formatUTCShortMonth","formatUTCMonth","formatUTCPeriod","parses","parseShortWeekday","parseWeekday","parseShortMonth","parseMonth","parseLocaleDateTime","parseSpecifier","parsePeriod","parseLocaleDate","parseLocaleTime","pad","newParse","newDate","week","toISOString","time_durationSecond","time_durationMinute","time_durationHour","time_durationDay","time_durationWeek","durationMonth","durationYear","time_date","time_number","calendar","year","month","hour","minute","second","millisecond","formatMillisecond","formatSecond","formatMinute","formatHour","formatDay","formatWeek","formatYear","tickIntervals","tickInterval","t0","src_time","src_colors","category10","category20b","category20","ramp","sequential","interpolator","d3_scale_chromatic_src_colors","Accent","Dark2","Paired","Pastel1","Pastel2","Set1","Set2","Set3","src_ramp","scheme","BrBG_scheme","BrBG","PRGn_scheme","PRGn","PiYG_scheme","PiYG","PuOr","RdBu","RdGy","RdYlBu","RdYlGn","Spectral","BuGn","BuPu","GnBu","OrRd","PuBuGn","PuBu","PuRd","RdPu","YlGnBu","YlGn","YlOrBr","YlOrRd","Blues_scheme","Blues","Greens","Greys","Purples","Reds","Oranges","sequential_multi_cubehelix","rainbow_warm","rainbow_cool","rainbow_c","sequential_multi_rainbow","ts","viridis_ramp","sequential_multi_viridis","viridis_magma","viridis_inferno","viridis_plasma","reserved_fields","ROW_ID","common_props","ACTION_INF","ON_LAYER_DRAW","src_array_slice","d3_axis_src_identity","axis_top","axis_right","axis_bottom","axis_left","epsilon","entering","__axis","axis_axis","orient","tickArguments","tickValues","tickTransform","tickSizeInner","tickSizeOuter","tickPadding","axis","spacing","range0","range1","axis_center","axis_number","selection","selectAll","tick","tickExit","exit","tickEnter","enter","attr","line","merge","insert","transition","getAttribute","tickSize","pi","tau","tauEpsilon","Path","_x0","_y0","_x1","_y1","path_path","moveTo","closePath","lineTo","quadraticCurveTo","y1","bezierCurveTo","x2","y2","arcTo","y0","x21","y21","x01","y01","l01_2","x20","y20","l21_2","l20_2","l21","l01","acos","t01","t21","arc","a0","a1","ccw","dx","dy","cw","da","rect","src_path","d3_shape_src_constant","constant","math_max","math_min","math_sqrt","math_epsilon","math_pi","halfPi","math_tau","asin","arcInnerRadius","innerRadius","arcOuterRadius","outerRadius","arcStartAngle","startAngle","arcEndAngle","endAngle","arcPadAngle","padAngle","cornerTangents","rc","ox","oy","x11","y11","x10","y10","x00","y00","d2","cx0","cy0","cx1","cy1","dx0","dy0","dx1","dy1","cx","cy","Linear","areaStart","_line","areaEnd","lineStart","_point","lineEnd","point","curve_linear","point_x","point_y","src_line","defined","curve","buffer","defined0","src_area","area","x0z","y0z","arealine","lineX0","lineY0","lineY1","lineX1","src_descending","d3_shape_src_identity","curveRadial","Radial","_curve","radial","d3_shape_src_array_slice","symbol_circle","draw","symbol_cross","tan30","tan30_2","diamond","kr","kx","ky","star","square","sqrt3","triangle","wye_s","wye_k","wye_a","wye","noop","that","Basis","BasisClosed","_x2","_x3","_x4","_y2","_y3","_y4","BasisOpen","Bundle","beta","_basis","_beta","_x","_y","custom","bundle","cardinal_point","_k","Cardinal","tension","cardinal","CardinalClosed","_x5","_y5","CardinalOpen","catmullRom_point","_l01_a","_l01_2a","_l12_a","_l12_2a","_l23_a","_l23_2a","CatmullRom","alpha","_alpha","x23","y23","curve_catmullRom","catmullRom","CatmullRomClosed","CatmullRomOpen","LinearClosed","monotone_sign","slope3","h0","h1","s0","s1","slope2","monotone_point","MonotoneX","MonotoneY","ReflectContext","Natural","controlPoints","_t0","px","py","Step","_t","curve_step","stepBefore","stepAfter","none","series","order_none","stackValue","order_ascending","sums","ascending_sum","cubicInOut","polyIn","polyOut","polyInOut","b1","b2","b3","b4","b5","b6","b7","b8","b9","b0","bounceOut","backIn","overshoot","backOut","backInOut","elastic_tau","elasticOut","elasticIn","amplitude","period","d3_voronoi_src_constant","elasticInOut","src_point_x","src_point_y","RedBlackTree","RedBlackNode","RedBlackRotateLeft","tree","RedBlackRotateRight","RedBlackFirst","after","grandpa","uncle","sibling","src_RedBlackTree","createEdge","edge","Diagram_edges","setEdgeEnd","Diagram_cells","halfedges","createBorderEdge","vertex","clipEdge","ax","ay","connectEdge","fm","fb","lx","ly","rx","ry","fx","fy","cellHalfedgeAngle","cell","site","va","vb","cellHalfedgeStart","cellHalfedgeEnd","firstCircle","circlePool","attachCircle","lArc","rArc","lSite","cSite","rSite","bx","by","Diagram_epsilon2","ha","hc","circle","Circle","before","circles","detachCircle","beachPool","createBeach","beach","Beach","detachBeach","beaches","removeBeach","disappearing","Diagram_epsilon","iArc","nArcs","addBeach","dxl","dxr","directrix","leftBreakPoint","rightBreakPoint","createCell","newArc","hb","rfocx","rfocy","pby2","lfocx","lfocy","plby2","hl","aby2","triangleArea","lexicographic","Diagram","sites","extent","sortCellHalfedges","clipEdges","clipCells","iCell","iHalfedge","nHalfedges","startX","startY","endX","endY","nCells","cover","dc","v00","v01","v11","v10","cells","polygons","polygon","triangles","e1","links","radius","_found","vx","vy","src_voronoi","voronoi","HTMLElement","isSimpleObject","common_utils_typeof","getUniqueId","sanitizeIP","typeObj","nonExistentKeys","checkExistence","getMax","_toConsumableArray","getMin","common_utils_getDomainFromData","getDomainFromData","domArr","dist_datamodel","firstMin","secondMin","firstMax","secondMax","symbolFns","cross","easeFns","cubic","bounce","src_linear_linear","elastic","back","poly","circleInOut","common_utils_getClosestIndexOf","getQualifiedClassName","cancelAnimationFrame","cls","defaultValue","param","objectIterator","common_utils_Voronoi","Voronoi","_classCallCheck","_voronoi","_voronoiFn","common_utils_Store","Store","hyperdis_default","_listeners","serialize","propName","propNames","callBack","instantCall","props","on","calculatedProp","intSanitizer","val","common_utils_transactor","transactor","holder","conf","_loop","_defineProperty","_len","_key","compareTo","paramsLen","prevVal","spreadParams","sanitization","typeCheck","typeExpected","preset","oldValues","generateGetterSetters","propInfo","typeChecker","common_utils_isEqual","isEqual","oldVal","newVal","arraysEqual","arr1","arr2","is","ERROR_MSG","INTERFACE_IMPL","mergeRecursive","sink","common_utils_interpolator","common_utils_numberInterpolator","numberInterpolator","common_utils_piecewiseInterpolator","piecewiseInterpolator","rgbToHsv","detectColor","col","getDataModelFromRange","dataModel","selFields","selFn","common_utils_getDataModelFromIdentifiers","getDataModelFromIdentifiers","identifiers","filteredDataModel","fieldsConfig","dataArr","filteredSchema","include","propField","idx","common_utils_registerListeners","registerListeners","listenerMap","propListenerMap","mapObj","propType","listenerFn","listener","isValidValue","getObjProp","_len2","_key2","retObj","common_utils_getSymbol","getSymbol","src_symbol","stackOrders","_stackOrders","stackOffsets","yp","yn","_stackOffsets","s2","si","sij0","s3","sk","common_utils_stack","stack","oz","kz","sz","sij","ki","src_stack","pathInterpolators","curveLinear","curveStepAfter","curveStepBefore","curveStep","curveCatmullRom","Symbols","axisLeft","axisRight","axisTop","axisBottom","pie","arcs","pa","cornerRadius","padRadius","a01","a11","a00","a10","da0","da1","ap","rp","rc0","rc1","p0","p1","oc","intersect","x3","y3","x32","y32","kc","lc","centroid","Scales","getSmallestDiff","points","xhtml","namespaces","xlink","xml","xmlns","namespace","space","local","creator","fullname","creatorFixed","ownerDocument","creatorInherit","uri","namespaceURI","selector_none","src_selector","selector","querySelector","selectorAll_empty","selectorAll","querySelectorAll","matcher","matches","matcher_element","vendorMatches","webkitMatchesSelector","msMatchesSelector","mozMatchesSelector","oMatchesSelector","src_matcher","sparse","EnterNode","datum","_next","__data__","child","keyPrefix","bindIndex","groupLength","dataLength","bindKey","nodeByKeyValue","keyValues","sort_ascending","src_window","styleValue","classArray","classList","ClassList","_node","_names","classedAdd","list","classedRemove","contains","textRemove","htmlRemove","raise_raise","nextSibling","lower","previousSibling","firstChild","constantNull","remove_remove","selection_cloneShallow","cloneNode","selection_cloneDeep","filterEvents","on_event","mouseenter","mouseleave","filterContextListener","contextListener","event","related","relatedTarget","compareDocumentPosition","event1","event0","onRemove","typename","__on","removeEventListener","capture","onAdd","wrap","addEventListener","customEvent","args","sourceEvent","dispatchEvent","CustomEvent","createEvent","initEvent","bubbles","cancelable","detail","selection_root","Selection","groups","parents","_groups","_parents","selection_selection","subgroups","subnode","subgroup","d3_selection_src_constant","enterGroup","updateGroup","_enter","_exit","groups0","groups1","m0","merges","group0","group1","compareNode","sortgroups","sortgroup","callback","nodes","getAttributeNS","attrRemoveNS","removeAttributeNS","attrRemove","removeAttribute","attrFunctionNS","attrFunction","attrConstantNS","attrConstant","priority","styleRemove","removeProperty","styleFunction","setProperty","styleConstant","propertyRemove","propertyFunction","propertyConstant","classed","classedFunction","classedTrue","classedFalse","textFunction","textConstant","html","htmlFunction","htmlConstant","deep","typenames","parseTypenames","dispatch","dispatchFunction","dispatchConstant","src_selection","src_select","nextId","Local","current","src_point","ownerSVGElement","createSVGPoint","clientX","clientY","matrixTransform","getScreenCTM","inverse","getBoundingClientRect","clientLeft","clientTop","mouse","changedTouches","src_touch","touches","identifier","touch","dispatch_noop","dispatch_dispatch","Dispatch","dispatch_get","dispatch_set","dispatch_parseTypenames","types","src_dispatch","nopropagation","stopImmediatePropagation","noevent","preventDefault","nodrag","view","__noselect","MozUserSelect","d3_drag_src_constant","DragEvent","subject","active","defaultFilter","button","defaultContainer","defaultSubject","defaultTouchable","taskHead","taskTail","src_drag","mousedownx","mousedowny","mousemoving","touchending","touchable","gestures","clickDistance2","drag","mousedowned","touchstarted","touchmoved","touchended","gesture","beforestart","mousemoved","mouseupped","yesdrag","noclick","clearTimeout","sublisteners","clickDistance","timer_frame","timeout","timer_interval","pokeDelay","clockLast","clockNow","clockSkew","clock","performance","timer_typeof","now","setFrame","clearNow","Timer","_call","_time","timer","delay","restart","wake","timerFlush","nap","sleep","poke","clearInterval","setInterval","src_timeout","elapsed","emptyOn","emptyTween","CREATED","SCHEDULED","STARTING","STARTED","RUNNING","ENDING","ENDED","transition_schedule","timing","schedules","__transition","schedule_create","self","tween","state","duration","ease","schedule","schedule_get","schedule_set","tweenValue","_id","transition_interpolate","selection_Selection","transition_id","Transition","_name","newId","selection_prototype","src_transition_transition","inherit","id0","id1","onFunction","on0","on1","sit","on_start","attrTween","attr_attrFunctionNS","value00","value10","interpolate0","value1","attr_attrFunction","attr_attrRemoveNS","attr_attrRemove","attr_attrConstantNS","attr_attrConstant","attrTweenNS","styleTween","style_styleRemove","styleRemoveEnd","style_styleFunction","style_styleConstant","text_textFunction","text_textConstant","removeFunction","tweenRemove","tween0","tween1","tweenFunction","delayFunction","delayConstant","durationFunction","durationConstant","easeConstant","defaultTiming","transition_inherit","interrupt","renderer_utils_selectElement","selectElement","element","makeElement","elemType","callbacks","keyFn","SVGElement","selectorVal","selectorType","actualSelector","enterSel","mergeSel","exitSel","_len3","_key3","applyStyle","setElementAttrs","attrs","renderer_utils_setAttrs","setAttrs","renderer_utils_setStyles","setStyles","styles","renderer_utils_createElements","createElements","sel","renderer_utils_getClientPoint","getClientPoint","pos","clientPoint","renderer_utils_getEvent","getEvent","renderer_utils_getD3Drag","getD3Drag","renderer_utils_getSmartComputedStyle","getSmartComputedStyle","css","textEl","mandatoryStyle","fill-opacity","renderer_utils_typeof","computedStyle","styleForSmartLabel","hasTouch","DataSystem_selection","selection_classCallCheck","_data","_idMap","_mode","_enterdata","_exitdata","_this","newData","idGetter","_this2","_idGetter","tempMap","purgedIds","purged","temp","_this3","item","_this4","_this5","_this6","DataObject","data_object_classCallCheck","events","EVENT_LIST","composition","event_list","lifecycle_manager_resolver","resolveFn","notification","hasOwn","src_lifecycle_manager","LifeCycleManager","lifecycle_manager_classCallCheck","_eventList","_promises","_notifiers","_lifeCycles","_unreleasedLifeCycles","_boot","acc","_preparePromises","eventName","Promise","_makeNotifierPromise","formalName","client","_releasePromisesFromCache","_notify","stage","_resolvePromise","promise","retrieve","_callLifeCycleCallback","_cachePromise","_resetTargetPromise","lifeCycles","DRAG","HOVER","SELECTIONDRAG","CLICK","LONGTOUCH","TOUCHDRAG","ALL_ACTIONS","SELECTION_NEW_ENTRY","SELECTION_NEW_EXIT","SELECTION_NULL","SELECTION_OLD_ENTRY","SELECTION_OLD_EXIT","selection_set","SelectionSet","completeSet","_volatile","selection_set_classCallCheck","_completeSetCount","_lockedSelection","_resetted","ids","entrySet","exitSet","lockedSel","addSet","removeSet","updateSet","changeSideEffectAvailability","toEnable","sideEffects","change","enable","disable","getMergedSet","helper_toConsumableArray","conditionsMap","newEntry","oldEntry","mergedEnter","newExit","oldExit","mergedExit","complete","getSetInfo","selectionSet","propagationData","resetted","getModelFromSet","condition","src_firebolt","Firebolt","actions","behaviourEffectMap","firebolt_classCallCheck","_sideEffectDefinitions","_sideEffects","_propagationInf","_actions","behavioural","physical","_selectionSet","_volatileSelectionSet","_propagationFields","_sourceSideEffects","selectionBox","_propagationBehaviourMap","_sourceBehaviours","_actionBehaviourMap","_config","_behaviourEffectMap","_entryExitSet","_actionHistory","_queuedSideEffects","_mappedActions","mapSideEffects","registerBehaviouralActions","registerSideEffects","registerPhysicalBehaviouralMap","physicalBehaviouralMap","registerPhysicalActions","sideEffectConf","behEffectMap","preventDefaultActions","effectNames","effects","firebolt_toConsumableArray","behaviours","initializeBehaviouralActions","dispatchableBehaviours","Action","prepareSelectionSets","sideEffectStore","actionHistory","queuedSideEffects","sideEffect","combinedSet","unionSets","behaviour","entryExitSet","existingModel","helper_unionSets","effect","firebolt_typeof","sideEffectInstance","isEnabled","mutates","dispatchSideEffect","propagationInfo","propagate","getSideEffects","propagationSelectionSet","getPropagationSelectionSet","shouldApplySideEffects","sourceSelectionSet","applicableSideEffects","getApplicableSideEffects","applySideEffects","physicalAction","actionBehaviourMap","behaviourMap","unsubscribe","onDataModelPropagation","propValue","dispatchBehaviour","uniqueIds","behaviouralActions","volatileSelectionSet","sideEffectDefinitions","initializeSideEffects","sideEffectsMap","SideEffect","helper_initializeSideEffects","initedActions","initializePhysicalActions","physicalActions","initedPhysicalActions","mappedActions","getDefaultTargetContainer","keyName","bindActionWithBehaviour","targets","behaviourList","mount","propagationInf","xFields","yFields","xMeasures","yMeasures","filterPropagationModel","propModel","measures","_propModel$getData","filteredModel","fieldMap","row","common_utils_filterPropagationModel","getFullData","propagationSource","applicableSelectionSets","generic","GenericBehaviour","firebolt","generic_classCallCheck","_enabled","selectionSets","getSelectionSets","_firebolt$getAddSetFr","getAddSetFromCriteria","getPropagationInf","setSelectionSet","getEntryExitSet","_selectionSet$getSets","getSets","setConfig","isSourceFieldPresent","getSourceFields","getSchema","behavioural_volatile","reset","existingAddSet","updateExit","getCompleteSet","BRUSH","HIGHLIGHT","TOOLTIP","FILTER","SELECT","highlight","brush","behavioural_filter","updateEntry","mergedExitSet","completeSetCount","behavioural_select","drag_action_config","getDragActionConfig","sourceInfo","axes","xAxis","yAxis","axisFields","xField","getMembers","yField","xFieldType","yFieldType","dimensions","stPos","startPos","endPos","dragDim","isXDimension","isYDimension","xRange","yRange","selectedDomains","rangeObj","xdom","ydom","snap","getNearestRange","drag_event_attachDragEvent","attachDragEvent","targetEl","drawingInf","d3Drag","touchStart","getDrawingContext","getSourceInfo","beh","dragEnd","physical_hover","hover","interaction","tooltip","svgContainer","nearestPoint","getNearestPoint","getAllPoints","showInPosition","helpers_generatePayloadFromEvent","generatePayloadFromEvent","physical_click","click","physical_defineProperty","_physicalActions","longtouch","touchEnd","touchdrag","side_effects_generic","GenericSideEffect","side_effects_generic_classCallCheck","_strategy","_strategies","defaultConfig","surrogate","interactionType","layers","layer","interactive","applyInteractionStyle","spawnable","_drawingContext","helper_changeVisibility","changeVisibility","sideEffectGroup","visible","defClassName","classPrefix","selection_box","boxConf","box","drawingContext","mountPoint","unitWidth","unitHeight","selectionGroupClassName","hide","sourceInf","_getBoxDimensionsFrom","getBoxDimensionsFromPayload","direction","xDim","yDim","xLinear","yLinear","xCriteria","yCriteria","bandScale","x1Val","x2Val","x1DomainIndex","x2DomainIndex","_sort","_sort2","helper_slicedToArray","getScaleValue","getUnitWidth","y1Val","y2Val","y1DomainIndex","y2DomainIndex","_sort3","_sort4","_xDim","_yDim","dimension","show","selectionBoxDrag","onDrag","selection_box_drag_selectionBoxDrag","boxClassName","INITIAL_STYLE","default_config_defaultConfig","connectorClassName","margin","content","iconContainerSize","iconScale","iconShape","iconColor","rowMargin","separator","parentClassName","arrow","disabled","helper_getArrowPos","getArrowPos","dim","measurement","arrowPos","boxHeight","boxWidth","arrowWidth","plotBottom","boxBottom","plotRight","boxRight","helper_placeArrow","placeArrow","tooltipArrow","_tooltipArrow","tooltipBackground","_tooltipBackground","arrowConf","_arrowOrientation","timeFormats","timeDurations","strategy_defaultTooltipFormatters","defaultTooltipFormatters","_formatters","strategy_defineProperty","formatters","nearestInterval","getNearestInterval","strategy_getNearestInterval","strategy_buildTooltipData","buildTooltipData","fieldValues","dataObj","fieldspace","dimensionMeasureMap","detailFields","containsDetailField","dataLen","getRowContent","formattedValue","measureIndex","formatterFn","uniqueVals","strategy_toConsumableArray","colorAxis","shapeAxis","shape","sizeAxis","isRetinalField","associatedMeasures","icon","getColor","getShape","getSize","measure","margin-left","displayFormat","getTabularData","timeDiffs","rows","fieldObj","strategy_getTabularData","allMeasures","strategy_strategy","DEFAULT_STRATEGY","src_content","Content","content_classCallCheck","_model","_formatter","strategy","ctx","_mount","table","tbody","margin-right","el","src_tooltip","Tooltip","htmlContainer","tooltip_classCallCheck","connectorContainer","tooltipConf","contentClass","_tooltipContainer","_contentContainer","_contents","_tooltipConnectorContainer","qualifiedClassName","addClass","defConf","contentConfig","reorderContainers","contentConf","render","_target","repositionArrow","arrowDisabled","arrowOrient","outsidePlot","connector","_offset","orientation","_extent","arrowSize","topSpace","dimX","rightSpace","leftSpace","positionTop","positionRight","positionLeft","positionHorizontal","positionVertical","_position","_arrowPos","strategies_strategies","showSelectedItems","dm","aggregatedModel","fieldsConf","measureNames","strategies_toConsumableArray","side_effects_tooltip","side_effects_tooltip_classCallCheck","tooltip_possibleConstructorReturn","_tooltips","totalHeight","totalWidth","isEmpty","tooltips","boundBox","dataModels","fragmented","showVertically","tooltipPos","boxes","tooltip_toConsumableArray","targetFields","sourceFields","indices","plotDimensions","getPlotPointsFromIdentifiers","plotDim","dataTransform","layoutContainer","layoutBoundBox","unitBoundBox","tooltipInst","timeDiffsByField","positionRelativeTo","tooltipBoundBox","getContents","spaceOutBoxes","spaceOutIfOverlap","firstBox","secondBox","opposite","bottom","crossline","bandWidth","bandClass","lineClass","elemData","fieldIndex","axisIndex","fieldInst","xOffset","plotWidth","crossline_toConsumableArray","getPlotSpan","getPlotPadding","startPx","endPx","dataPoint","parentGroup","CLASSPREFIX","strategy_strategies","fade","fadeFn","focus","plot_highlighter","PlotHighlighter","plot_highlighter_classCallCheck","plot_highlighter_possibleConstructorReturn","side_effects_filter","entryModel","clearCaching","resetData","enableCaching","side_effects_anchors","AnchorEffect","anchors_classCallCheck","anchors_possibleConstructorReturn","_layers","addAnchorLayers","shouldDrawAnchors","encodingFieldsInf","layerObj","instances","addLayer","alias","mark","encoding","colorField","sizeField","defaultSizeValue","getTransitionConfig","calculateDomain","linkedLayer","elems","_linkedLayer$getTrans","getTransformedDataFromIdentifiers","_linkedLayer$getTrans2","anchors_slicedToArray","transformedData","transformedDataModel","datamodel_default","persistent_anchors","brush_anchors","behaviour_effect_map_behaviourEffectMap","behaviour_effect_map_defineProperty","STACK","ANGLE","RADIUS","SIZE","COLOR","SHAPE","ENCODING","X0","Y0","area_default_config_defaultConfig","nearestPointThreshold","strokeOpacity","connectNullData","simple_layer","DATA_UPDATED","axis_orientation_BOTTOM","axis_orientation_TOP","axis_orientation_LEFT","axis_orientation_RIGHT","axisOrientationMap","axis_orientation_defineProperty","_axisOrientationMap","LINEAR","BAND","TIME","scale_type_COLOR","ORDINAL","QUANTIZE","QUANTILE","LOG","POW","scale_type_IDENTITY","SEQUENTIAL","THRESHOLD","CONTINOUS","constants_SEQUENTIAL","constants_ORDINAL","constants_LINEAR","constants_QUANTIZE","HIDDEN","scaleLinear","scales_namespaceObject","scaleThreshold","scaleLog","scalePow","scaleIdentity","scaleOrdinal","scaleSequential","scaleQuantize","scaleQuantile","scaleBand","scaleTime","scaleMap","scale_creator_defineProperty","_scaleMap","scale_creator_createScale","scaleFactory","cartesian_axis_default_config_defaultConfig","axisName","axisNamePadding","src_enums_constants_CLASSPREFIX","fixedBaseline","labels","rotation","smartTicks","numberOfTicks","showAxisName","showInnerTicks","showOuterTicks","yOffset","axis_renderer_rotateAxis","rotateAxis","instance","tickText","labelManager","getTickSize","yShift","xShift","tickFormatter","tickLabelDim","quadrant","rotationNormalizer","angleToRadian","angle","axis_renderer_changeTickOrientation","changeTickOrientation","selectContainer","axisInstance","_smartTicks","isSmartTicks","axis_renderer_setFixedBaseline","setFixedBaseline","axis_renderer_setAxisNamePos","setAxisNamePos","textNode","axisNameHeight","labelOffset","availableSpace","getTickLabelInfo","largestLabel","labelProps","smartTick","axisTickLabels","allLabelLengths","_context$config","labelFunc","_tickLabelStyle","originalLabel","formattedLabel","largestLabelDim","helper_setOffset","setOffset","logicalSpace","helper_adjustRange","adjustRange","getAxisOffset","timeDiff","avWidth","bars","registerChangeListeners","_domainLock","getHorizontalAxisSpace","axisDimensions","axisLabelDim","axisDimHeight","tickDimHeight","tickDimWidth","minTickDiff","getMinTickDifference","cartesian_axis_helper_toConsumableArray","_minTickDistance","getVerticalAxisSpace","_ref2","PROPS","_rotationLock","createAxis","commit","simple_axis","SimpleAxis","simple_axis_classCallCheck","_dependencies","_range","_domain","_axisDimensions","defCon","simpleConfig","bodyElem","_axisNameStyle","_scale","createScale","_axis","setTickConfig","axisClass","getTickFormatter","labelWidth","domainVal","computeAxisDimensions","_context$config2","_getTickLabelInfo","labelHeight","setRotationConfig","calculateContinousSpace","getAxisDimensions","axisDimWidth","_getHorizontalAxisSpa2","_getVerticalAxisSpace2","helper_calculateContinousSpace","currentDomain","cachedDomain","updateDomainBounds","registerEvent","renderAxis","setTickValues","axisNameSpace","axisNameWidth","unsubscribeAll","interpolators_linear","interpolators_log","interpolators_pow","interpolatorMap","continous_axis_defineProperty","_interpolatorMap","continous_axis","ContinousAxis","continous_axis_classCallCheck","continous_axis_possibleConstructorReturn","InterpolatorCls","_interpolator","isOffset","_config3","labelSpace","axisHeight","getLogicalSpace","axisWidth","getTickValues","_config5","getNumberOfTicks","labelDim","tickLength","numberOfValues","_config6","_axisDimensions$large","band_axis","_config2","calculateBandSpace","largestDimHeight","largestDimWidth","_getHorizontalAxisSpa","_getVerticalAxisSpace","helper_calculateBandSpace","availSpace","smartWidth","time_axis","TimeAxis","time_axis_classCallCheck","time_axis_possibleConstructorReturn","_minDiff","time_axis_get","_getAxisDimensions","x11Colors","Pink","LightPink","HotPink","DeepPink","PaleVioletRed","MediumVioletRed","LightSalmon","Salmon","DarkSalmon","LightCoral","IndianRed","Crimson","FireBrick","DarkRed","Red","OrangeRed","Tomato","Coral","DarkOrange","Orange","Gold","Yellow","LightYellow","LemonChiffon","LightGoldenrodYellow","PapayaWhip","Moccasin","PeachPuff","PaleGoldenrod","Khaki","DarkKhaki","Cornsilk","BlanchedAlmond","Bisque","NavajoWhite","Wheat","BurlyWood","Tan","RosyBrown","SandyBrown","Goldenrod","DarkGoldenrod","Peru","Chocolate","SaddleBrown","Sienna","Brown","Maroon","DarkOliveGreen","Olive","OliveDrab","YellowGreen","LimeGreen","Lime","LawnGreen","Chartreuse","GreenYellow","SpringGreen","MediumSpringGreen","LightGreen","PaleGreen","DarkSeaGreen","MediumSeaGreen","SeaGreen","ForestGreen","Green","DarkGreen","MediumAquamarine","Aqua","Cyan","LightCyan","PaleTurquoise","Aquamarine","Turquoise","MediumTurquoise","DarkTurquoise","LightSeaGreen","CadetBlue","DarkCyan","Teal","LightSteelBlue","PowderBlue","LightBlue","SkyBlue","LightSkyBlue","DeepSkyBlue","DodgerBlue","CornflowerBlue","SteelBlue","RoyalBlue","Blue","MediumBlue","DarkBlue","Navy","MidnightBlue","Lavender","Thistle","Plum","Violet","Orchid","Fuchsia","Magenta","MediumOrchid","MediumPurple","BlueViolet","DarkViolet","DarkOrchid","DarkMagenta","Purple","Indigo","DarkSlateBlue","SlateBlue","MediumSlateBlue","White","Snow","Honeydew","MintCream","Azure","AliceBlue","GhostWhite","WhiteSmoke","Seashell","Beige","OldLace","FloralWhite","Ivory","AntiqueWhite","Linen","LavenderBlush","MistyRose","Gainsboro","LightGray","Silver","DarkGrey","Grey","DimGrey","LightSlateGrey","SlateGrey","DarkSlateGrey","Black","palette","DEFAULT_GRADIENT_COLOR","DEFAULT_CONFIG","props_getHslString","getHslString","hslArr","convertToXllString","baseString","props_getActualHslColor","getActualHslColor","paletteColor","hexToHsv","props_toConsumableArray","props_PROPS","oldConfig","newConfig","uniqueValues","color_strategy_getStops","getStops","newStops","color_strategy_toConsumableArray","color_strategy_rangeStops","rangeStops","newStopsLength","newRange","hslInterpolator","common_utils_hslInterpolator","indexedDomain","scaleDomain","indexedDomainMeasure","normalDomain","color_strategy_steppedDomain","steppedDomain","_getStops","color_strategy_continousSteppedDomain","continousSteppedDomain","_getStops2","uniqueRange","domainValue","indexedRange","normalRange","strategyGetter","domainType","rangeType","schemeType","strategies","color_strategy_defineProperty","domainRange","color_strategy_strategies","color_axis","ColorAxis","color_axis_classCallCheck","_domainType","_rangeType","_schemeType","getSchemeType","_colorStrategy","setColorStrategy","updateDomain","colorStrategy","getScheme","color_schemes_namespaceObject","hslColorArray","getRawColor","color_axis_toConsumableArray","scaleInfo","domainRangeFn","transformationArr","newH","newS","newL","newA","defaults_DEFAULT_CONFIG","size_strategy_strategies","size_strategy_defineProperty","pieceWiseRange","numVal","size_strategy_toConsumableArray","intervals","newIntervals","discreteRange","size_axis_props_PROPS","size_axis","SizeAxis","size_axis_classCallCheck","_sizeStrategy","setStrategy","size_strategy_strategyGetter","domainInfo","domainFn","shape_axis_defaults_DEFAULT_CONFIG","generator","shape_axis_props_PROPS","shape_axis","ShapeAxis","shape_axis_classCallCheck","_generatedShapes","shapeType","shapeGenerator","generatorFn","generatedShapes","DATA_TYPES","group_transform","data_type_scale_map_defineProperty","dataTypeScaleMap","_dataTypeScaleMap","groupByIndices","nestCollection","nestFn","common_utils_nestCollection","transformMap","transform_factory_defineProperty","identityTransform","_transformMap","uniqueField","valueField","normalizedData","normalizeData","groupedData","uniqueFieldIndex","valueFieldIndex","seriesKeyIndex","seriesKeys","fieldNames","tuples","rowObj","_tuple","seriesKey","newArr","stack_transform_normalizeData","orderBy","orderIndex","groupByIndex","localeCompare","stackData","seriesData","transform_factory","transformFactory","helpers_BAND","scale_type_namespaceObject","getLayerColor","colorEncoding","colorFieldIndex","rawColor","transfromColor","styleType","intensity","stateColor","originalColor","fillColorInfo","transformColor","helpers_applyInteractionStyle","interactionStyles","elements","getPlotElementsFromSet","_d$meta","colorTransform","_ref3","_ref4","helpers_slicedToArray","helpers_getAxesScales","getAxesScales","_map","_map2","_map3","_map4","xScale","yScale","getIndividualClassName","individualClassName","classNameStr","attachDataToVoronoi","_ref5","helpers_toConsumableArray","helpers_updateStyle","updateStyle","positionPoints","positioner","encodingTransform","helpers_getPlotMeasurement","getPlotMeasurement","dimensionalValues","fieldInfo","transformType","_bandScale","span","groupSpan","offsetValues","actualGroupWidth","dataProps","innerPadding","getGroupSpan","isAxisBandScale","axisPadding","groupPadding","listener_map_listenerMap","fetch","dataModelValue","configValue","encodingValue","getEncodingFieldInf","_map5","_map6","x0Field","y0Field","shapeField","_map7","_map8","_map9","_map10","xFieldSubType","yFieldSubType","_map11","_map12","xFieldIndex","yFieldIndex","x0FieldIndex","y0FieldIndex","helpers_getEncodingFieldInf","getValidTransform","layerConfig","encodingFieldInf","groupByField","groupByFieldMeasure","helpers_getValidTransform","getTransformedData","transformedDataValue","getNormalizedData","normalizedDataValue","calculateDomainFromData","dataUpdated","throwback","defaultOptions","default_options_defineProperty","newConf","defaultPolicy","_defaultOptions","_cacheEnabled","_cachedData","base_layer","BaseLayer","base_layer_classCallCheck","base_layer_possibleConstructorReturn","base_layer_defineProperty","DATA","_points","_measurement","_store","_encodingFieldsInf","_encodingTransform","_alias","transformData","helpers_transformData","domains","yEnc","xEnc","helpers_calculateDomainFromData","encodingType","transformedDataArr","fieldsLen","pointObj","tuple","helpers_getNormalizedData","_transformType","pointMap","_pointMap","_dataProps","base_layer_slicedToArray","xMeasure","yMeasure","_identifiers$","_identifiers$2","xMeasureIndex","yMeasureIndex","getAllAttrs","filteredPoints","base_layer_toConsumableArray","sizeVal","_identifiers$getData","identifierData","identifierSchema","_encodingFieldsInf2","enc","tupleArr","transformedVal","userConf","renderer_line","renderer_drawLine","drawLine","curveInterpolatorFn","linepath","line_default_config_defaultConfig","line_line","LineLayer","line_classCallCheck","line_possibleConstructorReturn","isXDim","isYDim","xPx","yPx","_getLayerColor","stroke","rowId","cachePoint","seriesClassName","containerSelection","animateGroup","groupTransition","groupAnimateStyle","helpers_animateGroup","stroke-opacity","getPathStyle","translatePoints","colorValFn","colorVal","getDrawFn","searchRadius","_point$data$data","getIdentifiersFromData","layerId","renderer_area","renderer","drawArea","easeEffect","renderer_slicedToArray","enterAreaPath","updateAreaPath","selectionEnter","area_area","area_get","_getAxesScales","classNameFn","y0Px","arc_default_config_defaultConfig","minOuterRadius","stroke-width","stroke-linejoin","innerRadiusFixer","states","enums_constants_CLASSPREFIX","fadeout","selected","arc_pie","arc_arc","layers_arc_arc","ArcLayer","arc_classCallCheck","arc_possibleConstructorReturn","_prevPieData","pieData","pieIndex","prevData","_getFieldIndices","getFieldIndices","arc_helper_slicedToArray","angleField","radiusField","angleIndex","sizeIndex","radiusIndex","colorIndex","arc_helper_getFieldIndices","dataVal","uid","outerRadiusValue","angleVal","_previousInfo","getPreviousPoint","currIndex","prevArc","nextArc","_dataPoint$datum","chartHeight","chartWidth","qualClassName","getRadiusRange","defaultRadius","radiusDomain","rangeValueGetter","getRangeValue","domainMultiplier","sizeAxisDomain","sizeMultiplier","_chartWidth","_chartHeight","consecutiveExits","exitCounter","arcFn","tweenPie","arc_helper_tweenPie","individualClass","tweenExit","exitArr","oldExitCounter","tweenExitPie","consecutiveExitArr","gElem","arc_helper_tweenExitPie","pieSlices","pieSliceInf","tData","text_renderer","drawText","selectionMerge","backgroundVal","textanchor","textStyle","background","backgroundPadding","_smartLabel$getOriSiz","backgroundEl","text_default_config_defaultConfig","text_text","textEncoding","textField","textFormatter","backgroundEncoding","backgroundValue","textFieldIndex","textValue","text_slicedToArray","text-anchor","point_renderer","drawSymbols","mergedGroups","symbolGroups","symbolEnter","createShape","groupElement","then","res","Element","newShape","nodeName","src","href","shapeElement","pathStr","checkPath","renderer_createShape","exitGroups","point_default_config_defaultConfig","defColorStyle","fillOpacity","shapes","sizes","point_point","PointLayer","point_classCallCheck","point_possibleConstructorReturn","sizeEncoding","shapeEncoding","sizeValue","shapeFieldIndex","sizeFieldIndex","_config$offset","offsetX","offsetY","point_slicedToArray","maxSize","generateDataPoints","point_toConsumableArray","drawFn","_maxSize","_getPlotMeasurement","_getPlotMeasurement2","widthMetrics","heightMetrics","offsetXValues","offsetYValues","measurementConf","getMeasurementConfig","widthSpan","heightSpan","distanceLimit","renderer_drawRects","drawRects","barEnterFn","transitionBars","selTransition","renderer_transitionBars","bar_default_config_defaultConfig","bar_helper_resolveDimByField","resolveDimByField","axesInfo","spaceType","sizeConfig","enterSpace","minVal","maxVal","scales","diffPx","zeroPos","axisType","axisType0","resolveDimensions","_resolveDimByField","enterWidth","enterX","xPos","_resolveDimByField2","enterHeight","bar_scaleBand","bar","BarLayer","bar_classCallCheck","bar_possibleConstructorReturn","_plotPadding","_plotSpan","bar_get","getTranslatedPoints","_context$encodingFiel","bar_helper_getTranslatedPoints","normalizedDataArr","clipElement","clipPathElement","renderer_utils_clipElement","bar_slicedToArray","barWidthMetrics","barHeightMetrics","barWidthOffsets","barHeightOffsets","barWidth","barWidthOffset","barHeight","barHeightOffset","uniqueFieldType","filterData","pointFound","bar_toConsumableArray","p2","tick_default_config_defaultConfig","tick_renderer","ticksEnter","tick_tick","_config$span","xSpan","ySpan","x0Px","sanitizeEncoding","layer_factory","compositeLayers","factoryObj","setLayerRegistry","reg","_layerRegistry","getSerializedConf","layerDef","serializedDefs","defs","unitLayerDef","sDef","parseLayerDefinition","layerType","strs","layer_factory_toConsumableArray","layer_factory_parseLayerDefinition","getLayerInstance","layerRegistry","composeLayers","layerDefs","sanitizeLayerConfig","DEFAULT_LAYERS","defaults_defineProperty","_DEFAULT_LAYERS","ROWS","COLUMNS","COL","ROW","enums_constants_COLOR","enums_constants_SHAPE","enums_constants_SIZE","constants_LEFT","constants_RIGHT","CELL","X_AXES","Y_AXES","ENTRY_CELLS","EXIT_CELLS","constants_RADIUS","constants_ANGLE","PRIMARY","SECONDARY","local_options","local_options_defineProperty","_CONFIG$ROWS$COLUMNS$","simple_group","variable_variable","composed_vars","ComposedVars","composed_vars_classCallCheck","texts","composed_vars_possibleConstructorReturn","vars","_vars","member","simple_var","SimpleVariable","simple_var_classCallCheck","simple_var_possibleConstructorReturn","oneVar","_oneVar","dtFormat","fieldDef","varInst","field_sanitizer_convertToVar","convertToVar","datamodel","field_sanitizer_transformFields","transformFields","normalizedFields","normalizeFields","norFields","orderFields","fieldArray","dimensionArr","measureArr","temporalArr","categoricalArr","fieldList","numOfMeasures","allDimensions","field_sanitizer_toConsumableArray","temporal","categorical","field_sanitizer_orderFields","field_sanitizer_slicedToArray","rowsInfo","columnsInfo","rowDimensions","rowMeasures","rowTemporalFields","rowCategoricalFields","columnDimensions","columnMeasures","columnTemporalFields","columnCategoricalFields","visual_encoder","_fieldInfo","_axisFrom","_headerFrom","__headerFrom","axisFrom","_getHeaderAxisFrom","group_utils_getHeaderAxisFrom","_getHeaderAxisFrom2","visual_encoder_slicedToArray","rowHeader","rowAxis","_getHeaderAxisFrom3","_getHeaderAxisFrom4","colHeader","colAxis","column","headerFrom","scaleMaps","data_type_scale_map_dataTypeScaleMap","encoder_helper_createSimpleAxis","createSimpleAxis","axisConfig","axesCreators","Cls","encoder_helper_generateAxisFromMap","generateAxisFromMap","groupAxes","axisKey","currentAxes","cacheMaps","getAxisKey","getAxisConfig","axisInfo","axisOrientation","userAxisConfig","axis_orientation_namespaceObject","LEFT","RIGHT","TOP","BOTTOM","encoder_helper_getAxisConfig","_iteratorNormalCompletion","_didIteratorError","_iteratorError","_step","_iterator","encoder_helper_slicedToArray","err","getIndex","arrIndex","cartesian_encoder","geomCellAxes","projections","rowFields","columnFields","rowIndex","columnIndex","xAxes","yAxes","facets","counter","primaryFacets","secondaryFacets","primaryFields","secondaryFields","primaryLen","secondaryLen","projArr","primaryField","secondaryField","facet","existIndex","axisFromIndex","cartesian_encoder_get","CartesianEncoder","groupedModel","encodingObj","retriveDomainFromData","layerArray","serializedLayers","userLayerConfig","colField","colFieldName","rowField","configs","rowFieldName","rowFieldType","getDefaultMark","colFieldType","encoder_helper_getDefaultMark","defConfigs","layerConfigs","getLayerConfFromFields","colFields","encodingArr","encoder_helper_toConsumableArray","colFieldExist","rowFieldExist","layerConf","mergedLayerConf","serializedLayerConfig","cartesian_encoder_toConsumableArray","polar_encoder","pieAxes","sanitizedRows","sanitizedColumns","polar_encoder_get","sanitizedFields","typeIndex","fieldSet","polar_encoder_toConsumableArray","facetFields","parentModel","layerEncoding","encType","measureField","polar_encoder_defineProperty","allFields","retinal_encoder","newAxes","createRetinalAxis","fieldProps","group_utils_getAxisType","encoder_helper_createRetinalAxis","encodingConfigs","group_utils_initStore","initStore","group_utils_defineProperty","group_utils_isDistributionEqual","isDistributionEqual","group_utils_toConsumableArray","rowType","initializeCacheMaps","cellMap","xAxesMap","yAxesMap","entryCellMap","exitCellMap","scaleType","group_utils_headerCreator","headerCreator","fieldHeaders","TextCell","getHeaderText","headers","rowLength","header","getAxisType","getHeaderAxisFrom","userAxisFromConfig","_fields","group_utils_slicedToArray","firstField","secondField","firstFieldType","secondFieldType","setFacetsAndProjections","encoder","_encoder$simpleEncode","simpleEncoder","getFacetsAndProjections","group_utils_createSelection","createSelection","appendObj","idFn","dataSelect","mergedSelection","group_utils_getBorders","getBorders","matrices","showRowBorders","showColBorders","showValueBorders","valueMatrix","_rows","leftRows","rightRows","_columns","topColumns","bottomColumns","_encoder$fieldInfo","allDimensionLength","allMeasuresLength","allTemporalFieldsLength","getRowBorders","borders","getColumnsBorders","getValueBorders","borderTypeRow","borderTypeCol","group_utils_getValueBorders","action_behaviour_map_defineProperty","actions_namespaceObject","behaviours_namespaceObject","reactive_props_CONFIG","reactive_props_DATA","reactive_props_AXES","LAYERDEFS","reactive_props_WIDTH","reactive_props_HEIGHT","reactive_props_MOUNT","primaryXAxisUpdated","primaryYAxisUpdated","secondaryXAxisUpdated","secondaryYAxisUpdated","reactive_props_TRANSFORM","DATADOMAIN","LAYERSCREATED","FIELDS","TIMEDIFFS","LAYERAXISINDEX","helper_getLayerFromDef","getLayerFromDef","existingLayer","_layerDeps","instanceArr","resolveEncodingTransform","layerInst","resolvable","depArr","resolved","helper_createLayers","createLayers","layerDefinitions","layersMap","_layersMap","markSet","components","layerIndex","layersArr","_layersArr","markId","defArr","instanceValues","src_helper_toConsumableArray","layerdeps","getDependencyOrder","graph","dependencyOrder","visited","visit","helper_attachAxisToLayers","attachAxisToLayers","layerAxisIndex","axesObj","axisInf","helper_getLayerAxisIndex","getLayerAxisIndex","_layer$config","helper_unionDomainFromLayers","unionDomainFromLayers","getDataDomain","domainValues","layerDomain","fieldDomain","fieldStr","unionDomain","dom","common_utils_unionDomain","getLayersBy","searchBy","removeLayersBy","inst","grid_lines_LINEAR","grid_lines_getGridLayerDefinitions","getGridLayerDefinitions","getDefaultVisibilty","getLayerDefinition","_definition","_encoding","gridLines","gridBands","gridLineColor","zeroLineColor","gridBandColor","isLinearScale","grid_lines_defineProperty","isNegativeDomain","grid_lines_renderGridLineLayers","renderGridLineLayers","createGridLineLayer","vuConf","_gridbands","_gridlines","atomicDef","sConf","grid_lines_createGridLineLayer","getGridLayerData","gridData","jsonData","_jsonData$push","grid_lines_getGridLayerData","entry","_entry","grid_lines_slicedToArray","parentGroupClass","src_default_config_defaultConfig","trackerClassName","arcLayerClassName","sideEffectClassName","src_local_options","src_local_options_defineProperty","_CONFIG$LAYERDEFS$AXE","prevAxes","cachedData","local_options_toConsumableArray","oldData","axisMap","1","axisProps","src_listener_map_listenerMap","listener_map_slicedToArray","reactive_props_namespaceObject","isReverse","layerDefsValue","fieldsVal","_layerAxisIndex","_lifeCycleManager","notify","_timeDiffsByField","layersCreated","dataModelVal","layerAxisIndexVal","axesVal","transformDataModels","transformVal","_transformedDataModels","attachDataToLayers","transformedDataModels","dataSource","_dimensionMeasureMap","getDimensionMeasureMap","retinalEncodingsAndMeasures","_layer$encodingFields","_retinalEncodingsAndM","helper_getDimensionMeasureMap","retinalFields","dataDomain","updateAxisDomain","src_props_PROPS","props_defineProperty","_PROPS","dispatchQueuedSideEffects","firebolt_helper_toConsumableArray","helper_registerListeners","registerImmediateListener","originalData","createSelectionSet","attachPropagationListener","registerChangeListener","firebolt_helper_slicedToArray","mapActionsAndBehaviour","clearActionHistory","payloadGenerator","selectionDataModel","propPayload","getRangeFromData","propCriteria","isDimension","payload_generator_toConsumableArray","payload_generator_getRangeFromData","__default","data_propagator_propagateValues","propagateValues","propagationFieldInf","propagationFields","sideEfffects","mergedModel","sourceUnit","sourceCanvas","parentAlias","propagationBehaviour","propFields","facetByFields","getModelWithFacetData","schema1","data1","schema2","data2","data_propagator_toConsumableArray","data_propagator_getModelWithFacetData","groupId","behaviourInstance","propagationConf","sourceBehaviour","enabled","propConf","actionInf","propInf","visual_unit_src_firebolt","UnitFireBolt","src_firebolt_classCallCheck","firebolt_possibleConstructorReturn","unitId","aliasName","propagationSourceCanvas","sourceUnitId","sourceSideEffects","sideEffectInstances","actionOnSource","mappedEffects","sideEffectChecker","enabledFn","payloadFn","sourceIdentifierFields","sourceBehaviours","firebolt_get","visual_unit","VisualUnit","registry","visual_unit_classCallCheck","onlayerdraw","_renderedResolve","_renderedPromise","lifeCycleManager","visual_unit_defineProperty","behavioural_namespaceObject","side_effects_namespaceObject","_firebolt","lock","unlock","_rootSvg","class","renderLayers","orderedLayers","layerParentGroup","helper_renderLayers","_sideEffectGroup","createSideEffectGroup","helper_createSideEffectGroup","rootSvg","layerName","getLayerByName","serializedDef","visual_unit_toConsumableArray","lyr","axisConf","alignZeroLine","adjustedDomain","getAdjustedDomain","y1ratio","y2ratio","allSameSign","updateDomainCache","dimValue","getNearestDimensionalValue","entryVal","helper_getNearestDimensionalValue","pointInf","getMarkInfFromLayers","markInf","parsedIdentifiers","transposeArray","getPointsFromIdentifiers","_parentContainer","getFieldNames","fields1","matrix_model_toConsumableArray","createSelectedDataModel","matrix_model_uniqueKeyGenerator","uniqueKeyGenerator","keyArray","newDm","nextDepthUniqueValues","projectRows","allColumnProjections","rowProjections","optionalProjections","projectFields","_getFieldNames","_getFieldNames2","matrix_model_slicedToArray","projFieldNames","colProjFieldNames","pushToMatrix","_matrix$rowIndex","facetInfo","colProjections","rowProj","projIdx","_getFieldNames3","_getFieldNames4","rowProjFieldNames","projectedDm","cell_creator_createValueCells","createValueCells","suppliedLayers","GeomCell","matrixLayers","horizontalAxis","verticalAxis","datamodelTransform","layerConfigArr","getLayerConfig","normalizedColumns","normalizedRows","geomCellKey","getCellKey","columnId","allFacets","cell_creator_toConsumableArray","rowFacets","colFacets","geomCell","updateCells","facetKey","cell_creator_updateCells","cell_creator_createAxisCells","createAxisCells","axisInst","_axisInst$config","AxisCell","BlankCell","cell_creator_headerPlaceholderGn","headerPlaceholderGn","selectionObj","facetConfig","selectionKeys","keySet","createTextCells","cell_creator_createTextCells","cell_creator_generatePlaceholders","generatePlaceholders","facetsAndProjections","encoders","valuesMatrix","rowKeys","columnKeys","takeAxisFrom","takeHeaderFrom","axisPlaceholderGn","selObj","axesMatrix","selObjProp","axesForDraw","rowsPrimary","rowPrime","columnsPrimary","colPrime","cell_creator_axisPlaceholderGn","_selectionObj","rowsSecondary","columnsSecondary","getObjects","section","hContext","cell_creator_computeMatrices","computeMatrices","componentRegistry","globalConfig","autoGroupBy","otherEncodings","matrixGnContext","getCellDef","isRowSizeEqual","isColumnSizeEqual","colCells","rowCells","resetSimpleAxes","newCacheMap","valueCellContext","serializeLayerConfig","extractFields","layerFields","flattenArray","group_utils_extractFields","getFieldsFromSuppliedLayers","suppliedLayerConfig","group_utils_getFieldsFromSuppliedLayers","aggregationFns","valueMatrixInfo","getMatrixModel","rowDataModels","colProj","firstLevelRowKeys","_rowDataModels","_getFieldNames5","rowFacetFieldNames","selectedDataModel","_rowDataModels2","colFacetNames","firstLevelColumnKeys","dme","rIndex","cIndex","transposedColKeys","matrix_model_getMatrixModel","valueCellsCreator","placeholder","createUnits","_mutateAxesFromMap","mutateAxesFromMap","xAxisSet","yAxisSet","axisId","group_utils_mutateAxesFromMap","_generateMatrices","generateMatrices","leftHeaders","topHeaders","bottomHeaders","rightHeaders","cell_creator_slicedToArray","rowSec","colSec","leftFacets","rightFacets","leftMatrix","rightMatrix","topMatrix","bottomMatrix","currentBottomLength","setAvailableSpace","rowMatrix","columnMatrix","matrix_resolver","MatrixResolver","matrix_resolver_classCallCheck","_registry","_layerConfig","_matrixLayers","_rowMatrix","_columnMatrix","_valueMatrix","_facets","_projections","_datamodelTransform","_units","_cacheMaps","_axes","maps","_rowCells","_colCells","matrix_resolver_toConsumableArray","_horizontalAxis","_verticalAxis","matrixType","sideEffectRegistry","units","unitConfig","extractUnitConfig","group_utils_extractUnitConfig","_getAllFields","retContext","getRetinalFieldsDomain","retinalEncoder","setCommonDomain","_axes2","retinalAxes","updateModel","placeholders","bottomLeft","bottomRight","_dependencies3","matrix_resolver_slicedToArray","topCols","bottomCols","rowHeaders","blankCellCreator","showHeaders","footers","topLeft","topRight","value_matrix","ValueMatrix","matrixArr","value_matrix_classCallCheck","instancesById","rIdx","cIdx","cellValue","colIndex","_instancesById","_matrix","_filterFn","rowWidth","currentRowWidth","rowHeight","currentRowHeight","change_listener_setupChangeListeners","setupChangeListeners","change_listener_toConsumableArray","matrixConfig","retinalConfig","sanitizeRetinalConfig","retinalConf","confValue","getEncoder","group_utils_getEncoder","groupType","fieldSanitizer","setAxisAndHeaders","placeholderInfo","getMatrices","_groupedDataModel","createRetinalAxes","setDomains","setMatrixInstances","_composition","change_listener_setMatrixInstances","cornerMatrices","createHeaders","metaData","border","visual_group_props_PROPS","hasDataUpdated","matrixInstance","cellRegistry","visual_group","VisualGroup","visual_group_classCallCheck","visual_group_possibleConstructorReturn","componentSubRegistry","_matrixInstance","_selection","_placeholderInfo","_cornerMatrices","variable","findInGroup","channel","group_utils_this","facetType","projType","group_utils_findInGroup","getRetinalAxes","getSimpleAxes","_resolver$getAllField","visual_group_defineProperty","firebolt_behavioural_select","existingRemoveSet","enums_selection_namespaceObject","select_toConsumableArray","firebolt_action_behaviour_map_actionBehaviourMap","firebolt_action_behaviour_map_defineProperty","action_behaviour_map_actionBehaviourMap","action_behaviour_map_propagationBehaviourMap","propagationBehaviourMap","_propagationBehaviour","src_firebolt_behaviour_effect_map_behaviourEffectMap","firebolt_behaviour_effect_map_defineProperty","firebolt_behaviour_effect_map_behaviourEffectMap","propagationSideEffects","_propagationSideEffec","SCALE_FUNCTIONS","VALUE","helper_propagate","canvasAlias","check","assembleModelFromIdentifiers","_loop2","fieldVal","src_firebolt_helper_toConsumableArray","legend_firebolt_LegendFireBolt","_Firebolt","LegendFireBolt","legend_firebolt_classCallCheck","legend_firebolt_possibleConstructorReturn","legend_firebolt_inherits","legend_firebolt_createClass","behaviourName","firebolt_physical_hover","getCriteriaFromData","firebolt_physical_click","firebolt_physical_physicalActions","firebolt_physical_defineProperty","physical_physicalActions","boundingBox","gradientDimensions","axisScale","rangeShifter","drag_defineProperty","getSelectionCriteria","selectionBoxMeasure","drawingInfMeasure","subjectStartPoint","side_effects_selection_box","gradientDimension","legendGradContainer","legendSelGroup","enterFn","getMousePos","boundingClientRect","selection_box_drag_defineProperty","fadeOut","physical_selection_box_drag_selectionBoxDrag","legend_highlighter_strategies_strategies","brighten","legend_highlighter","LegendHighlighter","legend_highlighter_classCallCheck","legend_highlighter_possibleConstructorReturn","legend_props_PROPS","legendContainer","resetLogicalSpace","title","_title","ALIGN","DEFAULT_MEASUREMENT","LEGEND_TITLE","legend_defaults_DEFAULT_CONFIG","borderStyle","borderColor","bounds","upper","defaults_ICON_MAP","ICON_MAP","legend_helper_getScaleInfo","getScaleInfo","steps","scaleFn","legend_helper_getInterpolatedData","getInterpolatedData","domainForLegend","interpolatedFn","getDomainBounds","domainBounds","domainLeg","ele","legend_helper_defineProperty","getScaleFactor","simple_legend","SimpleLegend","simple_legend_classCallCheck","_metaData","_fieldName","_labelManager","_cells","defaultMeasurement","_computedStyle","firebolt_behavioural_namespaceObject","firebolt_side_effects_namespaceObject","_canvasAlias","getItemMeasures","_labelManager$getOriS","effPadding","effBorder","effMargin","dataFromScale","titleSpace","getTitleSpace","titleHeight","titleWidth","labelSpaces","getLabelSpaces","_computeItemSpaces","computeItemSpaces","maxItemSpaces","textOrientation","itemSpaces","iconSpaces","maxIconWidth","itemSpace","iconSpace","legend_helper_computeItemSpaces","titleSpaces","_measurement2","titleCreator","titleContainer","legend_helper_titleCreator","_config4","_measurement3","renderTitle","simple_legend_defineProperty","legendOrientation","position_config_defineProperty","datasets","itemContainerMeasures","getStepSpacesInfo","iconHeight","iconWidth","stepPadding","horizontal","vertical","_legendOrientation","positionConfig","_positionConfig","alignmentMap","_alignmentMap","itemStack","_itemStack","renderer_createLegendSkeleton","createLegendSkeleton","gradWidth","gradHeight","maxGradHeight","maxGradWidth","legendBody","legendItem","getItemContainers","legendInstance","positionObj","renderer_getItemContainers","renderer_createItemSkeleton","createItemSkeleton","itemSkeleton","alignClass","renderer_applyItemStyle","applyItemStyle","measureType","stepColorCheck","_context$measurement","renderer_renderIcon","renderIcon","defaultIcon","renderer_checkPath","legend_renderer_createShape","discrete_legend","_getScaleInfo","discrete_legend_toConsumableArray","discrete_legend_defineProperty","discrete_legend_get","renderDiscreteItem","_context$measurement2","_item$icon","text-align","renderer_renderDiscreteItem","DiscreteLegend","getGradientDomain","accumulator","currentValue","MAX_VALUE","MIN_VALUE","gradient_helper_createLegendSkeleton","legendGradSvg","legendGradCont","linearGradient","makeLinearGradient","gradient_helper_makeLinearGradient","legendRect","gradient_helper_renderAxis","gradient_legend","gradient_legend_toConsumableArray","gradient_legend_defineProperty","newAxis","gradient_helper_createAxis","axisSpace","axisDomainLength","_legendGradientSvg","gradient_legend_get","renderGradient","_createLegendSkeleton","gradient_helper_renderGradient","GradientLegend","step_legend","step_legend_toConsumableArray","step_legend_defineProperty","lowerBounds","upperBounds","step_legend_get","StepLegend","stepData","position_config_stepData","renderStepItem","_context$config3","_context$measurement3","_item$icon2","_positionConfig$posit","renderer_renderStepItem","PADDING","BORDER","MARGIN","TITLE_TEMPLATE_NOT_ALLOWED_TAGS","LEGEND_TYPE_MAP","constants_defineProperty","src_constants_ORDINAL","_LEGEND_TYPE_MAP","src_constants_LINEAR","operators_share","share","operators_toConsumableArray","operators_html","strings","htmlCode","expLn","frag","createDocumentFragment","treeShakeNode","nodeType","Node","ELEMENT_NODE","tagName","childNodes","actionModel","ActionModel","action_model_classCallCheck","_registrableComponents","canvas","once","visualGroup","_cell$valueOf$firebol","registerPropagationBehaviourMap","_len4","_key4","dissociateBehaviour","_len5","_key5","dissociateSideEffect","policy","registrableComponents","mergedPolicy","aliases","comp","*","propagationPayload","propagationCanvas","action_model_defaultPolicy","crossInteractionPolicy","src_defaults_DEFAULT_CONFIG","legend","minHeight","collapse","src_options","isInteger","minUnitWidth","minUnitHeight","oldConf","defConfig","enums_constants_WIDTH","enums_constants_HEIGHT","layout_src_enums_constants_TOP","src_enums_constants_LEFT","src_enums_constants_RIGHT","layout_src_enums_constants_BOTTOM","constants_CENTER","ROW_LEFT","ROW_RIGHT","COLUMN_BOTTOM","COLUMN_TOP","ROW_SPAN","COL_SPAN","ROW_ROOT","COLUMN_ROOT","generic_layout","GenericLayout","generic_layout_classCallCheck","_matrices","_centerMatrix","_mountPoint","DEFAULT_CONFIGURATION","grid_layout_defaults_defineProperty","_FieldNames$BORDER","_DEFAULT_CONFIGURATIO","DEFAULT_MEASUREMENTS","_DEFAULT_MEASUREMENTS","BLANK_BORDERS","span_maker_columnFilter","columnFilter","colData","colIdx","previousRow","currentRow","prevCell","nextRow","prevRow","calcRowSpan","isNull","calcColSpan","span_maker_mask","mask","filteredRow","_temp","span_maker_toConsumableArray","applyBorders","borderType","applyRowBorders","showBorders","applyColBorders","renderMatrix","containerForMatrix","_cellSpanMaker","cellSpanMaker","viewMatrix","spans","ridx","currSpan","renderTable","rowData","availHeight","utils_nest","findInPage","page","combineMatrices","isTransposed","joinedMatrix","utils_toConsumableArray","computeLogicalSpace","maxMeasures","_config$isTransposed","unitMeasures","_getMeasureInfo","getMeasureInfo","firstMeasure","secondMeasure","utils_getMeasureInfo","minMeasures","getMinMeasures","_logicalSpace","utils_defineProperty","valueItem","maxMeasure","firstMeasureValue","secondMeasureValue","valueArray","_item$space","fMeasure","sMeasure","utils_getLogicalSpace","extraCellsRemover","beg","visual_matrix_props_PROPS","visual_matrix_default_config_defaultConfig","distribution","extraCellLengths","visual_matrix","VisualMatrix","visual_matrix_classCallCheck","_lastLevelKey","_primaryMatrix","_secondaryMatrix","_maxMeasures","_availableSpace","_breakPointer","_layoutMatrix","_tree","createTree","setLogicalSpace","_createTree2","matrixTree","lastLevelKey","layoutMatrix","primaryMatrix","secondaryMatrix","breakPage","primaryMatrixLength","newMatrix","keyLength","utils_createTree","createMatrixEachLevel","_arr$i","heightMeasures","populateMaxMeasures","widthMeasures","calculateDepth","viewableMatrix","createViewPortMatrix","viewableMeasures","redistribute","childDepth","maxHeights","maxWidths","matrixInst","mWidth","mHeight","redistributeColumnWise","redistributeRowWise","cellDimOptions","matrixIndex","_getCellDimensions","getCellDimensions","heights","widths","rowHeights","columnWidths","primary","secondary","begCellLen","endCellLen","createMatrixInstances","matrixInfo","layout","breakPointer","brokenMatrix","breakMatrix","nextLevel","removeExtraCells","rHeights","cWidths","gutter","spaceTakenByColumn","spaces","getDistributedHeight","heightWithoutGutter","distSum","gutterSum","availableHeight","colLen","distHeight","borderWidth","spaceTakenByRow","getDistributedWidth","layoutConfig","availableWidth","distWidth","rowLen","oldLogicalSpace","mainMeasures","computedMeasures","colHeight","colWidth","setMatrixMeasurement","computations_setAvailableSpace","setViewSpaces","pointerType","viewSpaces","pointer","computations_defineProperty","grid_layout_layout","GridLayout","layout_classCallCheck","layout_possibleConstructorReturn","_layoutId","generateVisualMatrices","begColCells","endColCells","gutterSpace","center","_top","layout_helper_slicedToArray","_center","_bottom","layout_helper_toConsumableArray","centerMatrix","layout_helper_generateVisualMatrices","layout_get","computeLayoutMeasurements","_layout$measurement","rowMatrixWidth","getMatrixMeasurement","columnMatrixWidth","columnViewPages","getViewableSpaces","columnViewSpace","columnPointer","columnMatrixHeight","rowMatrixHeight","rowViewableSpaces","computations_toConsumableArray","rowWidthsPrimary","rowWidthsSecondary","columnViewableSpaces","columnHeightsPrimary","columnHeightsSecondary","computations_computeLayoutMeasurements","setViewInformation","pageNumber","pageType","totalPages","getViewInformation","viewMatricesInfo","layout_defineProperty","renderGrid","currentPage","rowPointer","getViewMatrices","rowMatrices","getViewableData","columnMatrices","centralMatrixPointer","rowMatrixLen","columnMatrixLen","rowPages","columnPages","layoutDimensions","getViewMeasurements","_layout$measurement2","_layout$config3","leftWidth","rightWidth","topHeight","bottomHeight","viewWidth","viewHeight","viewInfo","_getViewInformation3","renderMatrices","transaction_support","INTERFACE_IMPl","visual_cell_src_enums_constants_LEFT","visual_cell_src_enums_constants_RIGHT","visual_cell_src_enums_constants_BOTTOM","visual_cell_src_enums_constants_TOP","visual_cell_src_enums_constants_CLASSPREFIX","constants_HEADER","enums_constants_DATA","enums_constants_AXES","constants_FACET_BY_FIELDS","constants_FIELDS","enums_constants_TRANSFORM","LAYER_DEF","src_enums_constants_CONFIG","DETAIL_FIELDS","cell_type_TEXT","cell_type_AXIS","GEOM","BLANK","simple_cell","SimpleCell","simple_cell_classCallCheck","enums_defaults_DEFAULT_CONFIG","enums_defaults_defineProperty","_CONSTANTS$MARGIN","_DEFAULT_CONFIG","DEFAULT_PROPS","availWidth","geomProps","caption","packages_visual_cell_src_props_PROPS","src_props_defineProperty","visual_cell_src_props_PROPS","axis_cell","axis_cell_classCallCheck","axis_cell_possibleConstructorReturn","_availHeight","_availWidth","computeAxisSpace","logicalWidth","logicalHeight","spaceFixer","_axis$getLogicalSpace","wrapperDiv","blank_cell","blank_cell_classCallCheck","blank_cell_possibleConstructorReturn","src_text_cell","text_cell_classCallCheck","text_cell_possibleConstructorReturn","_className","_minTickDiff","computeTextSpace","verticalAlign","textAlign","geom_cell","geom_cell_classCallCheck","geom_cell_possibleConstructorReturn","_unit","_datamodel","_facetByFields","_transform","_caption","lockModel","unlockModel","captionSpace","computeGeomSpace","getCaptionSpace","captionDom","DEFAULT_PLACEHOLDERS","src_defaults_defineProperty","_DEFAULT_PLACEHOLDERS","cell_registry","createHeading","cellType","title_maker_headerCreator","legend_maker_legendInitializer","legendInitializer","legendConfig","prevLegends","legends","headerHeight","legendCreator","LegendCls","dataset","scaleProps","_scale$config","legend_maker_legendCreator","dataInfo","legendMeasures","getGroupByData","setLegendMeasures","layout_maker_getRenderDetails","getRenderDetails","_mount$getBoundingCli","heightAttr","widthAttr","visGroup","_visGroup$placeholder","titleConfig","subtitleConfig","subtitle","legendPosition","layoutArrangement","arrangeComponents","_titleLayouts","legendLayouts","component_resolver_defineProperty","titleLayouts","src_constants_TOP","src_constants_BOTTOM","component_resolver_arrangeComponents","availableHeightForCanvas","availableWidthForCanvas","_createHeaders","canvasHeight","canvasWidth","headerOptions","resolveTitleSubTitleContent","rawContent","_sanitize","escapeHTML","htmlEscapes","&","<",">","\"","'","/","title_maker_resolveTitleSubTitleContent","_createHeading","title_maker_createHeaders","createLegend","legend_maker_createLegend","legendSpace","getLegendSpace","legendInfo","legend_maker_getLegendSpace","legendWidth","legendHeight","canvases","mountSpace","TITLE_CONFIG","SUB_TITLE_CONFIG","localOptions","canvas_local_options_defineProperty","_localOptions","canvasOptions","_sanitized","_canvasOptions","sub","renderer_renderHeader","renderHeader","headerCell","cont","renderComponents","_getSkeletons","getSkeletons","innerContainer","layoutType","renderer_getSkeletons","prepareGridContainer","innerSel","renderer_prepareGridContainer","setLabelRotationForAxes","renderLegend","legendComponents","sectionComponents","legendMount","legWidth","legHeight","sections","currHeight","currWidth","leg","renderer_renderLegend","shiftHeaders","shifter","renderer_shiftHeaders","helper_setupChangeListener","setupChangeListener","allOptions","_allOptions","canvas_helper_toConsumableArray","equalityChecker","option","dispatchProps","_cachedProps","applyInteractionPolicy","policies","firebolt_defaultInteractionPolicy","defaultInteractionPolicy","isMeasure","canvas_firebolt_toConsumableArray","getFieldsFromChannel","colDim","fieldInf","unitFireBolt","unitColFacets","equals","unitRowFacets","propagateWith","defaultCrossInteractionPolicy","propagationCanvasAlias","propagationUnit","canvas_firebolt","GroupFireBolt","canvas_firebolt_classCallCheck","_interactionPolicy","_crossInteractionPolicy","changeBehaviourStateOnPropagation","changeSideEffectStateOnPropagation","canvas_canvas","Canvas","globalDependencies","canvas_classCallCheck","canvas_possibleConstructorReturn","_transactor","canvas_slicedToArray","initedComponents","initCanvas","register","_getRenderDetails","prepareLayout","triggerReflow","promises","all","getAxes","initialSettings","regEntry","COMPONENTS","SUBREGISTRIES","regObj","globalCache","defaultRegistry","overrideRegistryDefinitions","overrideRegistry","muze_muze","muze","_transactor2","muze_slicedToArray","env","globalStore","componentSubRegistryDef","settings","withSettings","enableChainedTransaction","transactionModel","transactionEndpoint","transactionItems","_slicedToArray","SmartlabelManager_default","SideEffects","standards","SurrogateSideEffect","SpawnableSideEffect","Behaviours","PersistentBehaviour","VolatileBehaviour","DataModel","muze_package","layerFactory","operators_namespaceObject","utils","require","lookupWhat","lookupDetails","lookupTarget","deps","__webpack_exports__"],"mappings":"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","file":"muze.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"muze\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"muze\"] = factory();\n\telse\n\t\troot[\"muze\"] = factory();\n})(window, function() {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 7);\n","!function(e,t){\"object\"==typeof exports&&\"object\"==typeof module?module.exports=t():\"function\"==typeof define&&define.amd?define(\"DataModel\",[],t):\"object\"==typeof exports?exports.DataModel=t():e.DataModel=t()}(window,function(){return function(e){var t={};function n(r){if(t[r])return t[r].exports;var i=t[r]={i:r,l:!1,exports:{}};return e[r].call(i.exports,i,i.exports,n),i.l=!0,i.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(e,\"__esModule\",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&\"object\"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,\"default\",{enumerable:!0,value:e}),2&t&&\"string\"!=typeof e)for(var i in e)n.d(r,i,function(t){return e[t]}.bind(null,i));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,\"a\",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p=\"\",n(n.s=1)}([function(e){e.exports={name:\"datamodel\",description:\"Relational algebra compliant in-memory tabular data store\",homepage:\"https://github.com/chartshq/datamodel\",version:\"2.0.2\",license:\"MIT\",main:\"dist/datamodel.js\",author:\"Charts.com \",keywords:[\"datamodel\",\"data\",\"relational\",\"algebra\",\"model\",\"muze\",\"fusioncharts\",\"table\",\"tabular\",\"operation\"],repository:{type:\"git\",url:\"https://github.com/chartshq/datamodel.git\"},contributors:[{name:\"Akash Goswami\",email:\"akash@charts.com\"},{name:\"Subhash Haldar\",email:\"subhash@charts.com\"},{name:\"Rousan Ali\",email:\"rousan@charts.com\",url:\"https://rousan.io\"},{name:\"Ujjal Kumar Dutta\",email:\"ujjal@charts.com\"}],dependencies:{\"d3-dsv\":\"^1.0.8\"},devDependencies:{\"babel-cli\":\"6.26.0\",\"babel-core\":\"^6.26.3\",\"babel-eslint\":\"6.1.2\",\"babel-loader\":\"^7.1.4\",\"babel-plugin-transform-runtime\":\"^6.23.0\",\"babel-preset-env\":\"^1.7.0\",\"babel-preset-es2015\":\"^6.24.1\",\"babel-preset-flow\":\"^6.23.0\",chai:\"3.5.0\",\"cross-env\":\"^5.0.5\",eslint:\"3.19.0\",\"eslint-config-airbnb\":\"15.1.0\",\"eslint-plugin-import\":\"2.7.0\",\"eslint-plugin-jsx-a11y\":\"5.1.1\",\"eslint-plugin-react\":\"7.3.0\",\"istanbul-instrumenter-loader\":\"^3.0.0\",jsdoc:\"3.5.5\",json2yaml:\"^1.1.0\",karma:\"1.7.1\",\"karma-chai\":\"0.1.0\",\"karma-chrome-launcher\":\"2.1.1\",\"karma-coverage-istanbul-reporter\":\"^1.3.0\",\"karma-mocha\":\"1.3.0\",\"karma-spec-reporter\":\"0.0.31\",\"karma-webpack\":\"2.0.3\",marked:\"^0.5.0\",mocha:\"3.4.2\",\"mocha-webpack\":\"0.7.0\",\"transform-runtime\":\"0.0.0\",webpack:\"^4.12.0\",\"webpack-cli\":\"^3.0.7\",\"webpack-dev-server\":\"^3.1.4\"},scripts:{test:\"npm run lint && npm run ut\",ut:\"karma start karma.conf.js\",utd:\"karma start --single-run false --browsers Chrome karma.conf.js \",build:\"webpack --mode production\",\"build:dev\":\"webpack --mode development\",start:\"webpack-dev-server --config webpack.config.dev.js --mode development --open\",lint:\"eslint ./src\",\"lint-errors\":\"eslint --quiet ./src\",docs:\"rm -rf yaml && mkdir yaml && jsdoc -c jsdoc.conf.json\"}}},function(e,t,n){var r=n(2);e.exports=r.default?r.default:r},function(e,t,n){\"use strict\";n.r(t);var r={};n.r(r),n.d(r,\"DataFormat\",function(){return o}),n.d(r,\"DimensionSubtype\",function(){return u}),n.d(r,\"MeasureSubtype\",function(){return c}),n.d(r,\"FieldType\",function(){return f}),n.d(r,\"FilteringMode\",function(){return s});var i={};n.r(i),n.d(i,\"DSVArr\",function(){return Me}),n.d(i,\"DSVStr\",function(){return Ve}),n.d(i,\"FlatJSON\",function(){return Ye}),n.d(i,\"Auto\",function(){return Be});var a={};n.r(a),n.d(a,\"sum\",function(){return ct}),n.d(a,\"avg\",function(){return ft}),n.d(a,\"min\",function(){return st}),n.d(a,\"max\",function(){return lt}),n.d(a,\"first\",function(){return dt}),n.d(a,\"last\",function(){return pt}),n.d(a,\"count\",function(){return ht}),n.d(a,\"sd\",function(){return vt});var o={FLAT_JSON:\"FlatJSON\",DSV_STR:\"DSVStr\",DSV_ARR:\"DSVArr\",AUTO:\"Auto\"},u={CATEGORICAL:\"categorical\",TEMPORAL:\"temporal\",GEO:\"geo\"},c={DISCRETE:\"discrete\"},f={MEASURE:\"measure\",DIMENSION:\"dimension\"},s={NORMAL:\"normal\",INVERSE:\"inverse\",ALL:\"all\"};function l(e,t){e.length>0&&e.split(\",\").forEach(function(e){var n=e.split(\"-\"),r=+n[0],i=+(n[1]||n[0]);if(i>=r)for(var a=r;a<=i;a+=1)t(a)})}var d=function(){function e(e,t){for(var n=0;n=0;)o=e[a+1],-1!==r.indexOf(o)&&i.push({index:a,token:o});return i},m.formatAs=function(e,t){var n,r=h(e),i=m.findTokens(t),a=m.getTokenDefinitions(),o=String(t),u=m.TOKEN_PREFIX,c=void 0,f=void 0,s=void 0;for(s=0,n=i.length;s=0;d--)(f=a[d].index)+1!==l.length-1?(void 0===u&&(u=l.length),s=l.substring(f+2,u),l=l.substring(0,f+2)+RegExp.escape(s)+l.substring(u,l.length),u=f):u=f;for(d=0;d1){n=Math.abs(r[1]-r[0]);for(var i=2,a=r.length;i=y&&t.data=r.stops[r.stops.length-1]}).forEach(function(e){c[e.index]=r.stops[r.stops.length-1]+\"-\"+h}),r.stops.unshift(r.start),b=new Set(r.stops),dr.stops[r.stops.length-1]&&b.add(h),b=[].concat(function(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t3&&void 0!==arguments[3]&&arguments[3],i=arguments.length>4&&void 0!==arguments[4]?arguments[4]:G.CROSS,a=[],o=[],u=n||K,c=e.getFieldspace(),f=t.getFieldspace(),s=c.name,d=f.name,p=c.name+\".\"+f.name,h=L(c,f);if(s===d)throw new Error(\"DataModels must have different alias names\");return c.fields.forEach(function(e){var t=E({},e.schema);-1===h.indexOf(t.name)||r||(t.name=c.name+\".\"+t.name),a.push(t)}),f.fields.forEach(function(e){var t=E({},e.schema);-1!==h.indexOf(t.name)?r||(t.name=f.name+\".\"+t.name,a.push(t)):a.push(t)}),l(e._rowDiffset,function(e){var n=!1,p=void 0;l(t._rowDiffset,function(t){var l=[],v={};v[s]={},v[d]={},c.fields.forEach(function(t){l.push(t.data[e]),v[s][t.name]=t.data[e]}),f.fields.forEach(function(e){-1!==h.indexOf(e.schema.name)&&r||l.push(e.data[t]),v[d][e.name]=e.data[t]});var m=Ke(v[s]),y=Ke(v[d]);if(u(m,y)){var g={};l.forEach(function(e,t){g[a[t].name]=e}),n&&G.CROSS!==i?o[p]=g:(o.push(g),n=!0,p=e)}else if((i===G.LEFTOUTER||i===G.RIGHTOUTER)&&!n){var b={},_=c.fields.length-1;l.forEach(function(e,t){b[a[t].name]=t<=_?e:null}),n=!0,p=e,o.push(b)}})}),new ut(o,a,{name:p})}function z(e,t){var n=\"\"+e,r=\"\"+t;return nr?1:0}function X(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:z;return e.length>1&&function e(t,n,r,i){if(r===n)return t;var a=n+Math.floor((r-n)/2);return e(t,n,a,i),e(t,a+1,r,i),function(e,t,n,r,i){for(var a=e,o=[],u=t;u<=r;u+=1)o[u]=a[u];for(var c=t,f=n+1,s=t;s<=r;s+=1)c>n?(a[s]=o[f],f+=1):f>r?(a[s]=o[c],c+=1):i(o[c],o[f])<=0?(a[s]=o[c],c+=1):(a[s]=o[f],f+=1)}(t,n,a,r,i),t}(e,0,e.length-1,t),e}function Q(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);ta?\"desc\"===t?-1:1:0}}return r}function Z(e,t){var n=new Map,r=[];return e.forEach(function(e){var i=e[t];n.has(i)?r[n.get(i)][1].push(e):(r.push([i,[e]]),n.set(i,r.length-1))}),r}function ee(e,t,n){var r={label:e[0]};return t.reduce(function(t,r,i){return t[r]=e[1].map(function(e){return e[n[i].index]}),t},r),r}function te(e,t,n,r,i){var a={schema:[],data:[],uids:[]},o=(i=Object.assign({},{addUid:!1,columnWise:!1},i)).addUid,u=r&&r.length>0,c=[];if(n.split(\",\").forEach(function(t){for(var n=0;n=0;u--)i=t[u][0],a=t[u][1],(o=Ze(r,i))&&(S(a)?X(n,function(e,t){return a(e[o.index],t[o.index])}):j(a)?function(){var e=Z(n,o.index),t=a[a.length-1],i=a.slice(0,a.length-1),u=i.map(function(e){return Ze(r,e)});e.forEach(function(e){e.push(ee(e,i,u))}),X(e,function(e,n){var r=e[2],i=n[2];return t(r,i)}),n.length=0,e.forEach(function(e){n.push.apply(n,Q(e[1]))})}():(a=\"desc\"===String(a).toLowerCase()?\"desc\":\"asc\",X(n,$(o.type,a,o.index))));e.uids=[],n.forEach(function(t){e.uids.push(t.pop())})}(a,r),i.columnWise){var f=Array.apply(void 0,Q(Array(a.schema.length))).map(function(){return[]});a.data.forEach(function(e){e.forEach(function(e,t){f[t].push(e)})}),a.data=f}return a}function ne(e,t){var n={},r=[],i=[],a=[],o=e.getFieldspace(),u=t.getFieldspace(),c=o.fieldsObj(),f=u.fieldsObj(),s=o.name+\" union \"+u.name;if(!M(e._colIdentifier.split(\",\").sort(),t._colIdentifier.split(\",\").sort()))return null;function d(e,t,r){l(e._rowDiffset,function(e){var o={},u=\"\";i.forEach(function(n){var r=t[n].data[e];u+=\"-\"+r,o[n]=r}),n[u]||(r&&a.push(o),n[u]=!0)})}return e._colIdentifier.split(\",\").forEach(function(e){var t=c[e];r.push(E({},t.schema)),i.push(t.schema.name)}),d(t,f,!1),d(e,c,!0),new ut(a,r,{name:s})}function re(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t1&&void 0!==arguments[1]?arguments[1]:{},n={},r=t,i=e.getPartialFieldspace().getMeasure(),a=se.defaultReducer();return\"function\"==typeof t&&(a=t),Object.entries(i).forEach(function(e){var o=le(e,1)[0];\"string\"==typeof t[o]&&(r[o]=se.resolve(r[o])?se.resolve(r[o]):a),\"function\"!=typeof t[o]&&(r[o]=void 0),n[o]=r[o]||se.resolve(i[o].defAggFn())||a}),n}(e,n),o=e.getPartialFieldspace(),u=o.fieldsObj(),c=o.name,f=[],s=[],d=[],p={},h=[],v=void 0;Object.entries(u).forEach(function(e){var t=le(e,2),n=t[0],r=t[1];(-1!==i.indexOf(n)||a[n])&&(d.push(E({},r.schema)),\"measure\"===r.schema.type&&\"discrete\"!==r.schema.subtype?s.push(n):\"dimension\"!==r.schema.type&&\"discrete\"!==r.schema.subtype||f.push(n))});var m=0;return l(e._rowDiffset,function(e){var t=\"\";f.forEach(function(n){t=t+\"-\"+u[n].data[e]}),void 0===p[t]?(p[t]=m,h.push({}),f.forEach(function(t){h[m][t]=u[t].data[e]}),s.forEach(function(t){h[m][t]=[u[t].data[e]]}),m+=1):s.forEach(function(n){h[p[t]][n].push(u[n].data[e])})}),h.forEach(function(e){var t=e;s.forEach(function(n){t[n]=a[n](e[n])})}),r?(r.__calculateFieldspace(),v=r):v=new yt(h,d,{name:c}),v}function pe(e,t){var n=L(e.getFieldspace(),t.getFieldspace());return function(e,t){var r=!0;return n.forEach(function(n){r=!(e[n].value!==t[n].value||!r)}),r}}function he(e,t){var n={},r=[],i=[],a=[],o=e.getFieldspace(),u=t.getFieldspace(),c=o.fieldsObj(),f=u.fieldsObj(),s=o.name+\" union \"+u.name;if(!M(e._colIdentifier.split(\",\").sort(),t._colIdentifier.split(\",\").sort()))return null;function d(e,t){l(e._rowDiffset,function(e){var r={},o=\"\";i.forEach(function(n){var i=t[n].data[e];o+=\"-\"+i,r[n]=i}),n[o]||(a.push(r),n[o]=!0)})}return e._colIdentifier.split(\",\").forEach(function(e){var t=c[e];r.push(E({},t.schema)),i.push(t.schema.name)}),d(e,c),d(t,f),new yt(a,r,{name:s})}function ve(e,t,n){return W(e,t,n,!1,G.LEFTOUTER)}function me(e,t,n){return W(t,e,n,!1,G.RIGHTOUTER)}var ye=function(){function e(e,t){for(var n=0;nn&&(n=e)}),[t,n]}(this.data)}},{key:\"parse\",value:function(e){return e=parseFloat(e,10),Number.isNaN(e)?null:e}},{key:\"unit\",value:function(){return this.fieldUnit}},{key:\"scale\",value:function(){return this.fieldScale}},{key:\"numberFormat\",value:function(){var e=this.fieldNumberformat;return function(t){return e(t)}}},{key:\"defAggFn\",value:function(){return this.fieldDefAggFn}}]),t}(),Oe=function(){function e(e,t){for(var n=0;n=a?c=!0:(r=e.charCodeAt(o++))===Pe?f=!0:r===Ce&&(f=!0,e.charCodeAt(o)===Pe&&++o),e.slice(i+1,t-1).replace(/\"\"/g,'\"')}for(;o2&&void 0!==arguments[2]?arguments[2]:{},i=arguments[3],a=void 0;t!==Y?(a={op:t,meta:r,criteria:i},e._derivation.push(a)):(a=[].concat(Ge(i)),e._derivation.length=0,(n=e._derivation).push.apply(n,Ge(a)))},ze=function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=n.operation||q,i=n.filterByMeasure||!1,a=[];a=t.length?t.map(function(e){return function(e){var t=e.getData(),n=t.schema,r=e.getFieldsConfig(),a=e.getFieldspace().fieldsObj(),o=t.data,u=Object.values(r).reduce(function(e,t){return e[t.def.name]=a[t.def.name].domain(),e},{});return function(e){return!!o.length&&o.some(function(t){return n.every(function(n){if(!(n.name in e))return!0;var a=e[n.name].valueOf();if(i&&n.type===f.MEASURE)return a>=u[n.name][0]&&a<=u[n.name][1];if(n.type!==f.DIMENSION)return!0;var o=r[n.name].index;return t[o]===e[n.name].valueOf()})})}}(e)}):[function(){return!1}];var o=void 0;r===q?o=e.clone(!1,!1).select(function(e){return a.every(function(t){return t(e)})},{saveChild:!1,mode:s.ALL}):o=e.clone(!1,!1).select(function(e){return a.some(function(t){return t(e)})},{mode:s.ALL,saveChild:!1});return o},Xe=function(e,t,n,r){var i=e.clone(r.saveChild),a=function(e,t,n,r){var i=[],a=-1,o=void 0,u=function(e){return n(qe(t,e),e)};return r.mode===s.INVERSE&&(u=function(e){return!n(qe(t,e))}),l(e,function(e){u(e)&&(-1!==a&&e===a+1?(o=i.length-1,i[o]=i[o].split(\"-\")[0]+\"-\"+e):i.push(\"\"+e),a=e)}),i.join(\",\")}(i._rowDiffset,i.getPartialFieldspace().fields,t,n);return i._rowDiffset=a,i.__calculateFieldspace().calculateFieldsConfig(),r.saveChild&&We(i,U,{config:n},t),i},Qe=function(e,t,n,r){var i=e.clone(n.saveChild),a=t;return n.mode===s.INVERSE&&(a=r.filter(function(e){return-1===t.indexOf(e)})),i._colIdentifier=a.join(\",\"),i.__calculateFieldspace().calculateFieldsConfig(),n.saveChild&&We(i,H,{projField:t,config:n,actualProjField:a},null),i},$e=function(e,t,n,r){r=Object.assign(Object.assign({},xe),r);var a=i[r.dataFormat];if(!a||\"function\"!=typeof a)throw new Error(\"No converter function found for \"+r.dataFormat+\" format\");var o=a(t,r),u=Je(o,2),c=u[0],f=u[1],s=Fe(f,n,c),l=R.createNamespace(s,r.name);return e._partialFieldspace=l,e._rowDiffset=f.length&&f[0].length?\"0-\"+(f[0].length-1):\"\",e._colIdentifier=n.map(function(e){return e.name}).join(),e},Ze=function(e,t){for(var n=0;n2&&void 0!==arguments[2]?arguments[2]:{},i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},a=i.nonTraversingModel,o=i.excludeModels||[];t!==a&&((!o.length||-1===o.indexOf(t))&&t.handlePropagation(n,r),t._children.forEach(function(t){var a=et(n,t),o=Je(a,2),u=o[0],c=o[1];e(t,[u,c],r,i)}))},nt=function(e,t,n,r){var i=void 0,a=void 0,o=n.propagationNameSpace,u=n.propagateToSource,c=n.sourceId,f=r.propagateInterpolatedValues,s=[];if(null===e&&!0!==r.persistent)s=[{criteria:[]}];else{var l,d=Object.values(o.mutableActions);!1!==u&&(d=d.filter(function(e){return e.config.sourceId!==c}));var p=d.filter(function(e){return(r.filterFn||function(){return!0})(e,r)}).map(function(e){return e.config.criteria}),h=[];if(!1!==u){var v=Object.values(o.mutableActions);v.forEach(function(e){var t=e.config;!1===t.applyOnSource&&t.action===r.action&&t.sourceId!==c&&(h.push(e.model),(i=v.filter(function(t){return t!==e}).map(function(e){return e.config.criteria})).length&&s.push({criteria:i,models:e.model,path:function e(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];return null!==t._parent&&(n.push(t),e(t._parent,n)),n}(e.model)}))})}i=(l=[]).concat.apply(l,[].concat(Ge(p),[e])).filter(function(e){return null!==e}),s.push({criteria:i,excludeModels:[].concat(h,Ge(r.excludeModels||[]))})}var m=t.model,y=Object.assign({sourceIdentifiers:e,propagationSourceId:c},r),g=t.groupByModel;f&&g&&(a=ze(g,i,{filterByMeasure:f}),tt(g,a,y)),s.forEach(function(e){var t=ze(m,e.criteria),n=e.path;if(n){var r=function(e,t){for(var n=0,r=t.length;n0&&void 0!==arguments[0])||arguments[0],t=void 0;if(!1===(!(arguments.length>1&&void 0!==arguments[1])||arguments[1])){var n=this.getData({getAllFields:!0}),r=n.data,i=n.schema,a=r.map(function(e){var t={};return i.forEach(function(n,r){t[n.name]=e[r]}),t});t=new this.constructor(a,i)}else t=new this.constructor(this);return e&&this._children.push(t),t}},{key:\"project\",value:function(e,t){var n={mode:s.NORMAL,saveChild:!0};t=Object.assign({},n,t);var r=this.getFieldsConfig(),i=Object.keys(r),a=t.mode,o=e.reduce(function(e,t){return\"RegExp\"===t.constructor.name?e.push.apply(e,function(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t1&&void 0!==arguments[1]?arguments[1]:[];We(this,Y,null,t),this._parent=e,e._children.push(this)}}]),e}(),at=function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function(e,t){var n=[],r=!0,i=!1,a=void 0;try{for(var o,u=e[Symbol.iterator]();!(r=(o=u.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){i=!0,a=e}finally{try{!r&&u.return&&u.return()}finally{if(i)throw a}}return n}(e,t);throw new TypeError(\"Invalid attempt to destructure non-iterable instance\")}}(),ot=function(){function e(e,t){for(var n=0;n1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{saveChild:!0},r=\"\"+e.join(),i=[this,e,t],a=de.apply(void 0,i);return n.saveChild&&(this._children.push(a),We(a,V,{fieldsArr:e,groupByString:r,defaultReducer:se.defaultReducer()},t)),a._parent=this,a}},{key:\"sort\",value:function(e){var t=this.getData({order:\"row\",sort:e}),n=[t.schema.map(function(e){return e.name})].concat(t.data),r=new this.constructor(n,t.schema,{dataFormat:\"DSVArr\"});return r._sortingDetails=e,r}},{key:\"addField\",value:function(e){var t=e.fieldName();this._colIdentifier+=\",\"+t;var n=this._partialFieldspace;if(n.fieldsObj()[e.fieldName()]){var r=n.fields.findIndex(function(e){return e.name===t});r>=0&&(n.fields[r]=e)}else n.fields.push(e);return this.__calculateFieldspace().calculateFieldsConfig(),this}},{key:\"calculateVariable\",value:function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{saveChild:!0,replaceVar:!1},r=this.getFieldsConfig(),i=t.slice(0,t.length-1),a=t[t.length-1];if(r[e.name]&&!n.replaceVar)throw new Error(e.name+\" field already exists in model.\");var o=i.map(function(e){var t=r[e];if(!t)throw new Error(e+\" is not a valid column name.\");return t.index}),u=this.clone(),c=u.getFieldspace().fields,f=o.map(function(e){return c[e]}),s=[];l(u._rowDiffset,function(e){var t=f.map(function(t){return t.data[e]});s[e]=a.apply(void 0,function(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t1&&void 0!==arguments[1]?arguments[1]:{},n=arguments[2],r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},i=t.isMutableAction,a=t.sourceId,o=t.payload,u=function e(t){return t._parent?e(t._parent):t}(this),c=u._propagationNameSpace,f={groupByModel:function e(t){return t._parent&&t._derivation.find(function(e){return\"group\"!==e.op})?e(t._parent):t}(this),model:u};return n&&function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments[2],r=void 0,i=t.isMutableAction,a=t.criteria,o=t.action+\"-\"+t.sourceId;r=i?e.mutableActions:e.immutableActions,null===a?delete r[o]:r[o]={model:n,config:t}}(c,t,this),nt(e,f,{propagationNameSpace:c,sourceId:a},Object.assign({payload:o},t)),i&&function(e,t,n){var r=e.immutableActions;for(var i in r){var a=r[i].config,o=n.config.sourceId,u=!n.propConfig.filterImmutableAction||n.propConfig.filterImmutableAction(a,n.config);if(a.sourceId!==o&&u){var c=a.criteria;nt(c,t,{propagationNameSpace:e,propagateToSource:!1,sourceId:o},a)}}}(c,f,{config:t,propConfig:r}),this}},{key:\"on\",value:function(e,t){switch(e){case\"propagation\":this._onPropagation.push(t)}return this}},{key:\"unsubscribe\",value:function(e){switch(e){case\"propagation\":this._onPropagation=[]}return this}},{key:\"handlePropagation\",value:function(e,t){var n=this;this._onPropagation.forEach(function(r){return r.call(n,e,t)})}},{key:\"bin\",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=this.clone(),r=t.name||e+\"_binned\";if(this.getFieldsConfig()[r]||!this.getFieldsConfig()[e])throw new Error(\"Field \"+e+\" already exists.\");var i=I(this._partialFieldspace.fields.find(function(t){return t.name===e}),this._rowDiffset,t),a=Fe([i.data],[{name:r,type:f.MEASURE,subtype:\"discrete\",bins:{range:i.range,mid:i.mid}}],[r])[0];return n.addField(a),We(n,J,{measureName:e,config:t,binFieldName:r},null),n}}],[{key:\"Reducers\",get:function(){return se}}]),t}(),ct=oe.sum,ft=oe.avg,st=oe.min,lt=oe.max,dt=oe.first,pt=oe.last,ht=oe.count,vt=oe.std,mt=n(0);ut.Operators={compose:function(){for(var e=arguments.length,t=Array(e),n=0;n1&&void 0!==arguments[1]?arguments[1]:{saveChild:!0}).saveChild;return t.forEach(function(e){n=e(n),i.push.apply(i,function(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t1&&r.dispose(),n}},bin:function(){for(var e=arguments.length,t=Array(e),n=0;n2?(i=arguments.length<=0?void 0:arguments[0],n=arguments.length<=1?void 0:arguments[1],o=arguments.length<=2?void 0:arguments[2]):(i=null,n=arguments.length<=0?void 0:arguments[0],o=arguments.length<=1?void 0:arguments[1]),t=o(y),(e=r=new _(t.fn)).addDependencies.apply(e,P(t.dependencies)),this._addPropInModel(i,function(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}({},n,r)),this}},{key:\"_addPropInModel\",value:function(e,t){return this._graph.createNodesFrom(t,e),this}},{key:\"on\",value:function(e,t,r){var n,i=e instanceof Array?e:[e],o=this._graph.createElectricNodeOf(i,{type:\"CurrFrame\",fn:t});r&&(n=this._graph.stopPropagation().setPropagationOverride(\"nextFrame\")).resetNodeValue.apply(n,P(e));return o}},{key:\"next\",value:function(e,t,r){var n,i=e instanceof Array?e:[e],o=this._graph.createElectricNodeOf(i,{type:\"NextFrame\",fn:t});r&&(n=this._graph.stopPropagation().setPropagationOverride(\"currentFrame\")).resetNodeValue.apply(n,P(e));return o}},{key:\"lock\",value:function(){return this._lockFlag=!0,this._reqQ.length=0,this}},{key:\"unlock\",value:function(){return this._lockFlag=!1,this.setProp.apply(this,P(this._reqQ)),this._reqQ.length=0,this}},{key:\"prop\",value:function(){var e,t=void 0,r=void 0;switch(e=arguments.length){case 1:t=arguments.length<=0?void 0:arguments[0];break;case 2:t=arguments.length<=0?void 0:arguments[0],r=arguments.length<=1?void 0:arguments[1];break;default:return this}return 2===e?(this._lockFlag?this._reqQ.push([t,r]):this.setProp([t,r]),this):this._graph.getNodeValue(t)}},{key:\"setProp\",value:function(){for(var e,t=this,r=arguments.length,n=Array(r),i=0;i whenever a break is necessary. This is to recgonize one\n * generalized format independent of the implementation (canvas based solution, svg based solution). This method\n * converts the output of getSmartText().text to array of lines if the text is wrapped. It sets a named property\n * `lines` on the object passed as parameter.\n *\n * @param {Object} smartlabel - the object returned by getSmartText based on which line arr which to be formed.\n *\n * @return {Object} - The same object which was passed in the arguments. Also a named property `lines` is set.\n */\nSmartLabelManager.textToLines = function (smartlabel) {\n smartlabel = smartlabel || {};\n\n if (!smartlabel.text) {\n smartlabel.text = '';\n } else if (typeof smartlabel.text !== 'string') {\n smartlabel.text = smartlabel.text.toString();\n }\n\n smartlabel.lines = smartlabel.text.split(/\\n|/ig);\n return smartlabel;\n};\n\n// Saves all the instance created so far\nSmartLabelManager.store = {};\n\n// Calculates space taken by a character with an approximation value which is calculated by repeating the\n// character by string length times.\nSmartLabelManager.prototype._calCharDimWithCache = function (text, calculateDifference, length) {\n if (!this._init) {\n return false;\n }\n\n var size,\n csArr,\n tw,\n twi,\n cachedStyle,\n asymmetricDifference,\n maxAdvancedCacheLimit = this.options.maxCacheLimit,\n container = this._container,\n style = this.style || {},\n cache = this._advancedCache || (this._advancedCache = {}),\n advancedCacheKey = this._advancedCacheKey || (this._advancedCacheKey = []),\n cacheName = text + (style.fontSize || BLANK) + (style.fontFamily || BLANK) + (style.fontWeight || BLANK) + (style.fontStyle || BLANK),\n cacheInitName = text + 'init' + (style.fontSize || BLANK) + (style.fontFamily || BLANK) + (style.fontWeight || BLANK) + (style.fontStyle || BLANK);\n\n htmlSplCharSpace[text] && (text = htmlSplCharSpace[text]);\n\n if (!calculateDifference) {\n asymmetricDifference = 0;\n } else {\n if ((asymmetricDifference = cache[cacheInitName]) === undefined) {\n container.innerHTML = text.repeat ? text.repeat(length) : Array(length + 1).join(text); // jshint ignore:line\n tw = container.offsetWidth;\n\n container.innerHTML = text;\n twi = container.offsetWidth;\n\n asymmetricDifference = cache[cacheInitName] = (tw - length * twi) / (length + 1);\n advancedCacheKey.push(cacheInitName);\n if (advancedCacheKey.length > maxAdvancedCacheLimit) {\n delete cache[advancedCacheKey.shift()];\n }\n }\n }\n\n if (cachedStyle = cache[cacheName]) {\n csArr = cachedStyle.split(',');\n return {\n width: parseFloat(csArr[0], 10),\n height: parseFloat(csArr[1], 10)\n };\n }\n\n container.innerHTML = text;\n\n size = {\n height: container.offsetHeight,\n width: container.offsetWidth + asymmetricDifference\n };\n\n cache[cacheName] = size.width + ',' + size.height;\n advancedCacheKey.push(cacheName);\n if (advancedCacheKey.length > maxAdvancedCacheLimit) {\n delete cache[advancedCacheKey.shift()];\n }\n\n return size;\n};\n\n// Provide function to calculate the height and width based on the environment and available support from dom.\nSmartLabelManager.prototype._getWidthFn = function () {\n var contObj = this._containerObj,\n container = this._container,\n svgText = contObj.svgText;\n\n if (svgText) {\n return function (str) {\n var bbox, width;\n\n svgText.textContent = str;\n bbox = svgText.getBBox();\n width = bbox.width - SVG_BBOX_CORRECTION;\n if (width < 1) {\n width = bbox.width;\n }\n\n return width;\n };\n } else {\n return function (str) {\n container.innerHTML = str;\n return container.offsetWidth;\n };\n }\n};\n\n/*\n * Sets the style based on which the text's metrics to be calculated.\n *\n * @param {Object} style - The style object which affects the text size\n * {\n * fontSize / 'font-size' : MUST BE FOLLOWED BY PX (10px, 11px)\n * fontFamily / 'font-family'\n * fontWeight / 'font-weight'\n * fontStyle / 'font-style'\n * }\n *\n * @return {SmartLabelManager} - Current instance of SmartLabelManager\n */\nSmartLabelManager.prototype.setStyle = function (style) {\n if (!this._init) {\n return this;\n }\n\n var sCont;\n\n if (style === this.style && !this._styleNotSet) {\n return;\n }\n\n if (!style) {\n style = this.style;\n }\n\n slLib.setLineHeight(style);\n this.style = style;\n\n this._containerObj = sCont = this._containerManager.get(style);\n\n if (this._containerObj) {\n this._container = sCont.node;\n this._context = sCont.context;\n this._cache = sCont.charCache;\n this._lineHeight = sCont.lineHeight;\n this._styleNotSet = false;\n } else {\n this._styleNotSet = true;\n }\n\n return this;\n};\n\n/*\n * Decides whether ellipses to be shown if the node is truncated\n *\n * @param {Boolean} useEllipses - decides if a ellipses to be appended if the text is truncated. Default: false\n *\n * @return {SmartLabelManager} - Current instance of SmartLabelManager\n */\nSmartLabelManager.prototype.useEllipsesOnOverflow = function (useEllipses) {\n if (!this._init) {\n return this;\n }\n this._showNoEllipses = !useEllipses;\n return this;\n};\n\n/*\n * Get wrapped or truncated text if a bound box is defined around it. The result text would be separated by
\n * if wrapped\n *\n * @param {String} text - the subject text\n * @param {Number} maxWidth - width in px of the the bound box\n * @param {Number} maxHeight - height in px of the the bound box\n * @param {Boolean} noWrap - whether the text to be wrapped. Default false.\n *\n * @return {Object} - The metrics of the text bounded by the box\n * {\n * height : height of the wrapped text\n * width : width of the wrapped text\n * isTruncated : whether the text is truncated\n * maxHeight : Maximum height given\n * maxWidth : Maximum width given\n * oriText : Original text sent\n * oriTextHeight : Original text height\n * oriTextWidth : Original text width\n * text : SMART TEXT\n * }\n */\nSmartLabelManager.prototype.getSmartText = function (text, maxWidth, maxHeight, noWrap) {\n if (!this._init) {\n return false;\n }\n\n if (text === undefined || text === null) {\n text = '';\n } else if (typeof text !== 'string') {\n text = text.toString();\n }\n\n var len,\n trimStr,\n tempArr,\n tmpText,\n maxWidthWithEll,\n toolText,\n oriWidth,\n oriHeight,\n newCharIndex,\n nearestChar,\n tempChar,\n getWidth,\n initialLeft,\n initialTop,\n getOriSizeImproveObj,\n spanArr,\n x,\n y,\n minWidth,\n elem,\n chr,\n elemRightMostPoint,\n elemLowestPoint,\n lastBR,\n removeFromIndex,\n removeFromIndexForEllipses,\n hasHTMLTag = false,\n maxStrWidth = 0,\n lastDash = -1,\n lastSpace = -1,\n lastIndexBroken = -1,\n strWidth = 0,\n strHeight = 0,\n oriTextArr = [],\n i = 0,\n ellipsesStr = this._showNoEllipses ? '' : '...',\n lineHeight = this._lineHeight,\n context = this._context,\n container = this._container,\n sCont = this._containerObj,\n ellipsesWidth = sCont.ellipsesWidth,\n dotWidth = sCont.dotWidth,\n characterArr = [],\n dashIndex = -1,\n spaceIndex = -1,\n lastLineBreak = -1,\n fastTrim = function fastTrim(str) {\n str = str.replace(/^\\s\\s*/, '');\n var ws = /\\s/,\n i = str.length;\n while (ws.test(str.charAt(i -= 1))) {/* jshint noempty:false */}\n return str.slice(0, i + 1);\n },\n smartLabel = {\n text: text,\n maxWidth: maxWidth,\n maxHeight: maxHeight,\n width: null,\n height: null,\n oriTextWidth: null,\n oriTextHeight: null,\n oriText: text,\n isTruncated: false\n };\n\n getWidth = this._getWidthFn();\n\n // In some browsers, offsetheight of a single-line text is getting little (1 px) heigher value of the\n // lineheight. As a result, smartLabel is unable to return single-line text.\n // To fix this, increase the maxHeight a little amount. Hence maxHeight = lineHeight * 1.2\n if (maxHeight === lineHeight) {\n maxHeight *= 1.2;\n }\n\n if (container) {\n if (!documentSupport.isBrowserLess) {\n hasHTMLTag = slLib.xmlTagRegEx.test(text);\n if (!hasHTMLTag) {\n // Due to support of <,> for xml we convert <, > to <,> respectively so to get the correct\n // width it is required to convert the same before calculation for the new improve version of the\n // get text width.\n tmpText = text.replace(slLib.ltgtRegex, function (match) {\n return match === '<' ? '<' : '>';\n });\n getOriSizeImproveObj = this.getOriSize(tmpText, true);\n\n smartLabel.oriTextWidth = oriWidth = getOriSizeImproveObj.width;\n smartLabel.oriTextHeight = oriHeight = getOriSizeImproveObj.height;\n } else {\n container.innerHTML = text;\n smartLabel.oriTextWidth = oriWidth = container.offsetWidth;\n smartLabel.oriTextHeight = oriHeight = container.offsetHeight;\n }\n\n if (oriHeight <= maxHeight && oriWidth <= maxWidth) {\n smartLabel.width = smartLabel.oriTextWidth = oriWidth;\n smartLabel.height = smartLabel.oriTextHeight = oriHeight;\n return smartLabel;\n }\n\n if (lineHeight > maxHeight) {\n smartLabel.text = '';\n smartLabel.width = smartLabel.oriTextWidth = 0;\n smartLabel.height = smartLabel.oriTextHeight = 0;\n return smartLabel;\n }\n }\n\n // Calculate width with ellipses\n text = fastTrim(text).replace(/(\\s+)/g, ' ');\n maxWidthWithEll = this._showNoEllipses ? maxWidth : maxWidth - ellipsesWidth;\n\n if (!hasHTMLTag) {\n oriTextArr = text.split('');\n len = oriTextArr.length;\n trimStr = '', tempArr = [];\n tempChar = oriTextArr[0];\n\n if (this._cache[tempChar]) {\n minWidth = this._cache[tempChar].width;\n } else {\n minWidth = getWidth(tempChar);\n this._cache[tempChar] = { width: minWidth };\n }\n\n if (maxWidthWithEll > minWidth) {\n tempArr = text.substr(0, slLib.getNearestBreakIndex(text, maxWidthWithEll, this)).split('');\n i = tempArr.length;\n } else if (minWidth > maxWidth) {\n smartLabel.text = '';\n smartLabel.width = smartLabel.oriTextWidth = smartLabel.height = smartLabel.oriTextHeight = 0;\n return smartLabel;\n } else if (ellipsesStr) {\n maxWidthWithEll = maxWidth - 2 * dotWidth;\n if (maxWidthWithEll > minWidth) {\n ellipsesStr = '..';\n } else {\n maxWidthWithEll = maxWidth - dotWidth;\n if (maxWidthWithEll > minWidth) {\n ellipsesStr = '.';\n } else {\n maxWidthWithEll = 0;\n ellipsesStr = '';\n }\n }\n }\n\n strWidth = getWidth(tempArr.join(''));\n strHeight = this._lineHeight;\n\n if (noWrap) {\n for (; i < len; i += 1) {\n tempChar = tempArr[i] = oriTextArr[i];\n if (this._cache[tempChar]) {\n minWidth = this._cache[tempChar].width;\n } else {\n if (!getOriSizeImproveObj || !(minWidth = getOriSizeImproveObj.detailObj[tempChar])) {\n minWidth = getWidth(tempChar);\n }\n this._cache[tempChar] = {\n width: minWidth\n };\n }\n strWidth += minWidth;\n if (strWidth > maxWidthWithEll) {\n if (!trimStr) {\n trimStr = tempArr.slice(0, -1).join('');\n }\n if (strWidth > maxWidth) {\n smartLabel.text = fastTrim(trimStr) + ellipsesStr;\n smartLabel.tooltext = smartLabel.oriText;\n smartLabel.width = getWidth(smartLabel.text);\n smartLabel.height = this._lineHeight;\n return smartLabel;\n }\n }\n }\n\n smartLabel.text = tempArr.join('');\n smartLabel.width = strWidth;\n smartLabel.height = this._lineHeight;\n return smartLabel;\n } else {\n for (; i < len; i += 1) {\n tempChar = tempArr[i] = oriTextArr[i];\n if (tempChar === ' ' && !context) {\n tempChar = ' ';\n }\n\n if (this._cache[tempChar]) {\n minWidth = this._cache[tempChar].width;\n } else {\n if (!getOriSizeImproveObj || !(minWidth = getOriSizeImproveObj.detailObj[tempChar])) {\n minWidth = getWidth(tempChar);\n }\n this._cache[tempChar] = {\n width: minWidth\n };\n }\n strWidth += minWidth;\n\n if (strWidth > maxWidthWithEll) {\n if (!trimStr) {\n trimStr = tempArr.slice(0, -1).join('');\n }\n if (strWidth > maxWidth) {\n /** @todo use regular expressions for better performance. */\n lastSpace = text.substr(0, tempArr.length).lastIndexOf(' ');\n lastDash = text.substr(0, tempArr.length).lastIndexOf('-');\n if (lastSpace > lastIndexBroken) {\n strWidth = getWidth(tempArr.slice(lastIndexBroken + 1, lastSpace).join(''));\n tempArr.splice(lastSpace, 1, '
');\n lastIndexBroken = lastSpace;\n newCharIndex = lastSpace + 1;\n } else if (lastDash > lastIndexBroken) {\n if (lastDash === tempArr.length - 1) {\n strWidth = getWidth(tempArr.slice(lastIndexBroken + 1, lastSpace).join(''));\n tempArr.splice(lastDash, 1, '
-');\n } else {\n strWidth = getWidth(tempArr.slice(lastIndexBroken + 1, lastSpace).join(''));\n tempArr.splice(lastDash, 1, '-
');\n }\n lastIndexBroken = lastDash;\n newCharIndex = lastDash + 1;\n } else {\n tempArr.splice(tempArr.length - 1, 1, '
' + oriTextArr[i]);\n lastLineBreak = tempArr.length - 2;\n strWidth = getWidth(tempArr.slice(lastIndexBroken + 1, lastLineBreak + 1).join(''));\n lastIndexBroken = lastLineBreak;\n newCharIndex = i;\n }\n strHeight += this._lineHeight;\n if (strHeight > maxHeight) {\n smartLabel.text = fastTrim(trimStr) + ellipsesStr;\n smartLabel.tooltext = smartLabel.oriText;\n // The max width among all the lines will be the width of the string.\n smartLabel.width = maxWidth;\n smartLabel.height = strHeight - this._lineHeight;\n return smartLabel;\n } else {\n maxStrWidth = max(maxStrWidth, strWidth);\n trimStr = null;\n nearestChar = slLib.getNearestBreakIndex(text.substr(newCharIndex), maxWidthWithEll, this);\n strWidth = getWidth(text.substr(newCharIndex, nearestChar || 1));\n if (tempArr.length < newCharIndex + nearestChar) {\n tempArr = tempArr.concat(text.substr(tempArr.length, newCharIndex + nearestChar - tempArr.length).split(''));\n i = tempArr.length - 1;\n }\n }\n }\n }\n }\n\n maxStrWidth = max(maxStrWidth, strWidth);\n\n smartLabel.text = tempArr.join('');\n smartLabel.width = maxStrWidth;\n smartLabel.height = strHeight;\n return smartLabel;\n }\n } else {\n toolText = text.replace(slLib.spanAdditionRegx, '$2');\n text = text.replace(slLib.spanAdditionRegx, slLib.spanAdditionReplacer);\n text = text.replace(/()/g, '$1');\n\n container.innerHTML = text;\n\n spanArr = container[documentSupport.childRetriverFn](documentSupport.childRetriverString);\n\n for (x = 0, y = spanArr.length; x < y; x += 1) {\n elem = spanArr[x];\n //chech whether this span is temporary inserted span from it's class\n if (documentSupport.noClassTesting || slLib.classNameReg.test(elem.className)) {\n chr = elem.innerHTML;\n if (chr !== '') {\n if (chr === ' ') {\n spaceIndex = characterArr.length;\n } else if (chr === '-') {\n dashIndex = characterArr.length;\n }\n\n characterArr.push({\n spaceIdx: spaceIndex,\n dashIdx: dashIndex,\n elem: elem\n });\n oriTextArr.push(chr);\n }\n }\n }\n\n i = 0;\n len = characterArr.length;\n minWidth = characterArr[0].elem.offsetWidth;\n\n if (minWidth > maxWidth) {\n smartLabel.text = '';\n smartLabel.width = smartLabel.oriTextWidth = smartLabel.height = smartLabel.oriTextHeight = 0;\n\n return smartLabel;\n } else if (minWidth > maxWidthWithEll && !this._showNoEllipses) {\n\n maxWidthWithEll = maxWidth - 2 * dotWidth;\n if (maxWidthWithEll > minWidth) {\n ellipsesStr = '..';\n } else {\n maxWidthWithEll = maxWidth - dotWidth;\n if (maxWidthWithEll > minWidth) {\n ellipsesStr = '.';\n } else {\n maxWidthWithEll = 0;\n ellipsesStr = '';\n }\n }\n }\n\n initialLeft = characterArr[0].elem.offsetLeft;\n initialTop = characterArr[0].elem.offsetTop;\n\n if (noWrap) {\n for (; i < len; i += 1) {\n elem = characterArr[i].elem;\n elemRightMostPoint = elem.offsetLeft - initialLeft + elem.offsetWidth;\n\n if (elemRightMostPoint > maxWidthWithEll) {\n if (!removeFromIndexForEllipses) {\n removeFromIndexForEllipses = i;\n }\n if (container.offsetWidth > maxWidth) {\n removeFromIndex = i;\n i = len;\n }\n }\n }\n } else {\n for (; i < len; i += 1) {\n elem = characterArr[i].elem;\n elemLowestPoint = elem.offsetHeight + (elem.offsetTop - initialTop);\n elemRightMostPoint = elem.offsetLeft - initialLeft + elem.offsetWidth;\n\n lastBR = null;\n\n if (elemRightMostPoint > maxWidthWithEll) {\n if (!removeFromIndexForEllipses) {\n removeFromIndexForEllipses = i;\n }\n\n if (elemRightMostPoint > maxWidth) {\n lastSpace = characterArr[i].spaceIdx;\n lastDash = characterArr[i].dashIdx;\n if (lastSpace > lastIndexBroken) {\n characterArr[lastSpace].elem.innerHTML = '
';\n lastIndexBroken = lastSpace;\n } else if (lastDash > lastIndexBroken) {\n if (lastDash === i) {\n // in case the overflowing character itself is the '-'\n characterArr[lastDash].elem.innerHTML = '
-';\n } else {\n characterArr[lastDash].elem.innerHTML = '-
';\n }\n lastIndexBroken = lastDash;\n } else {\n elem.parentNode.insertBefore(lastBR = doc.createElement('br'), elem);\n }\n\n //check whether this break made current element outside the area height\n if (elem.offsetHeight + elem.offsetTop > maxHeight) {\n //remove the lastly inserted line break\n if (lastBR) {\n lastBR.parentNode.removeChild(lastBR);\n } else if (lastIndexBroken === lastDash) {\n characterArr[lastDash].elem.innerHTML = '-';\n } else {\n characterArr[lastSpace].elem.innerHTML = ' ';\n }\n removeFromIndex = i;\n //break the looping condition\n i = len;\n } else {\n removeFromIndexForEllipses = null;\n }\n }\n } else {\n //check whether this break made current element outside the area height\n if (elemLowestPoint > maxHeight) {\n removeFromIndex = i;\n i = len;\n }\n }\n }\n }\n\n if (removeFromIndex < len) {\n //set the trancated property of the smartlabel\n smartLabel.isTruncated = true;\n\n /** @todo is this really needed? */\n removeFromIndexForEllipses = removeFromIndexForEllipses ? removeFromIndexForEllipses : removeFromIndex;\n\n for (i = len - 1; i >= removeFromIndexForEllipses; i -= 1) {\n elem = characterArr[i].elem;\n //chech whether this span is temporary inserted span from it's class\n elem.parentNode.removeChild(elem);\n }\n\n for (; i >= 0; i -= 1) {\n elem = characterArr[i].elem;\n if (slLib.classNameBrReg.test(elem.className)) {\n //chech whether this span is temporary inserted span from it's class\n elem.parentNode.removeChild(elem);\n } else {\n i = 0;\n }\n }\n }\n\n //get the smart text\n smartLabel.text = container.innerHTML.replace(slLib.spanRemovalRegx, '$1').replace(/\\&\\;/g, '&');\n if (smartLabel.isTruncated) {\n smartLabel.text += ellipsesStr;\n smartLabel.tooltext = toolText;\n }\n }\n\n smartLabel.height = container.offsetHeight;\n smartLabel.width = container.offsetWidth;\n\n return smartLabel;\n } else {\n smartLabel.error = new Error('Body Tag Missing!');\n return smartLabel;\n }\n};\n\n/*\n * Get the height and width of a text.\n *\n * @param {String} text - Text whose metrics to be measured\n * @param {Boolean} Optional detailedCalculationFlag - this flag if set it calculates per letter position\n * information and returns it. Ideally you dont need it unless you want to post process the\n * string. And its an EXPENSIVE OPERATION.\n *\n * @return {Object} - If detailedCalculationFlag is set to true the returned object would be\n * {\n * height: height of the text\n * width: width of the text\n * detailObj: detail calculation of letters in the format {lettername: width}\n * }\n * If detailedCalculationFlag is set to false the returned object wont have the detailObj prop.\n */\nSmartLabelManager.prototype.getOriSize = function (text, detailedCalculationFlag) {\n if (!this._init) {\n return false;\n }\n\n var textArr,\n letter,\n lSize,\n i,\n l,\n cumulativeSize = 0,\n height = 0,\n indiSizeStore = {};\n\n if (!detailedCalculationFlag) {\n return this._calCharDimWithCache(text);\n }\n\n // Calculate the width of every letter with an approximation\n textArr = text.split('');\n for (i = 0, l = textArr.length; i < l; i++) {\n letter = textArr[i];\n lSize = this._calCharDimWithCache(letter, true, textArr.length);\n height = max(height, lSize.height);\n cumulativeSize += lSize.width;\n indiSizeStore[letter] = lSize.width;\n }\n\n return {\n width: round(cumulativeSize),\n height: height,\n detailObj: indiSizeStore\n };\n};\n\n/*\n * Dispose the container and object allocated by the smartlabel\n */\nSmartLabelManager.prototype.dispose = function () {\n if (!this._init) {\n return this;\n }\n\n this._containerManager && this._containerManager.dispose && this._containerManager.dispose();\n\n delete this._container;\n delete this._context;\n delete this._cache;\n delete this._containerManager;\n delete this._containerObj;\n delete this.id;\n delete this.style;\n delete this.parentContainer;\n delete this._showNoEllipses;\n\n return this;\n};\n\nexports['default'] = SmartLabelManager;\nmodule.exports = exports['default'];","'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n\tvalue: true\n});\nvar lib = {\n\tinit: function init(win) {\n\t\tvar doc = win.document,\n\t\t nav = win.navigator,\n\t\t userAgent = nav.userAgent,\n\t\t DIV = 'DIV',\n\t\t ceil = Math.ceil,\n\t\t floor = Math.floor,\n\t\t containerInstanceCount = 0,\n\t\t clsNameSpace = 'fusioncharts-smartlabel-',\n\t\t containerClass = clsNameSpace + 'container',\n\t\t classNameWithTag = clsNameSpace + 'tag',\n\t\t classNameWithTagBR = clsNameSpace + 'br';\n\n\t\tlib = {\n\t\t\twin: win,\n\n\t\t\tcontainerClass: containerClass,\n\n\t\t\tclassNameWithTag: classNameWithTag,\n\n\t\t\tclassNameWithTagBR: classNameWithTagBR,\n\n\t\t\tmaxDefaultCacheLimit: 500,\n\n\t\t\tclassNameReg: new RegExp('\\b' + classNameWithTag + '\\b'),\n\n\t\t\tclassNameBrReg: new RegExp('\\b' + classNameWithTagBR + '\\b'),\n\n\t\t\tspanAdditionRegx: /(<[^<\\>]+?\\>)|(&(?:[a-z]+|#[0-9]+);|.)/ig,\n\n\t\t\tspanAdditionReplacer: '$1$2',\n\n\t\t\tspanRemovalRegx: new RegExp('\\\\]+?' + classNameWithTag + '[^\\\\>]{0,}\\\\>(.*?)\\\\<\\\\/span\\\\>', 'ig'),\n\n\t\t\txmlTagRegEx: new RegExp('<[^>][^<]*[^>]+>', 'i'),\n\n\t\t\tltgtRegex: /<|>/g,\n\n\t\t\tbrReplaceRegex: //ig,\n\n\t\t\ttestStrAvg: 'WgI',\n\n\t\t\t// This style is applied over the parent smartlabel container. The container is kept hidden from the viewport\n\t\t\tparentContainerStyle: {\n\t\t\t\tposition: 'absolute',\n\t\t\t\ttop: '-9999em',\n\t\t\t\twhiteSpace: 'nowrap',\n\t\t\t\tpadding: '0px',\n\t\t\t\twidth: '1px',\n\t\t\t\theight: '1px',\n\t\t\t\toverflow: 'hidden'\n\t\t\t},\n\n\t\t\t// All the style which might affect the text metrics\n\t\t\tsupportedStyle: {\n\t\t\t\tfont: 'font',\n\t\t\t\tfontFamily: 'font-family',\n\t\t\t\t'font-family': 'font-family',\n\t\t\t\tfontWeight: 'font-weight',\n\t\t\t\t'font-weight': 'font-weight',\n\t\t\t\tfontSize: 'font-size',\n\t\t\t\t'font-size': 'font-size',\n\t\t\t\tlineHeight: 'line-height',\n\t\t\t\t'line-height': 'line-height',\n\t\t\t\tfontStyle: 'font-style',\n\t\t\t\t'font-style': 'font-style'\n\t\t\t},\n\n\t\t\t// Get the support list for html the document where the text calcution is to be done.\n\t\t\tgetDocumentSupport: function getDocumentSupport() {\n\t\t\t\tvar childRetriverFn, childRetriverString, noClassTesting;\n\n\t\t\t\tif (doc.getElementsByClassName) {\n\t\t\t\t\tchildRetriverFn = 'getElementsByClassName';\n\t\t\t\t\tchildRetriverString = classNameWithTag;\n\t\t\t\t\tnoClassTesting = true;\n\t\t\t\t} else {\n\t\t\t\t\tchildRetriverFn = 'getElementsByTagName';\n\t\t\t\t\tchildRetriverString = 'span';\n\t\t\t\t\tnoClassTesting = false;\n\t\t\t\t}\n\n\t\t\t\treturn {\n\t\t\t\t\tisIE: /msie/i.test(userAgent) && !win.opera,\n\t\t\t\t\thasSVG: Boolean(win.SVGAngle || doc.implementation.hasFeature('http://www.w3.org/TR/SVG11/feature#BasicStructure', '1.1')),\n\t\t\t\t\tisHeadLess: new RegExp(' HtmlUnit').test(userAgent),\n\t\t\t\t\tisWebKit: new RegExp(' AppleWebKit/').test(userAgent),\n\t\t\t\t\tchildRetriverFn: childRetriverFn,\n\t\t\t\t\tchildRetriverString: childRetriverString,\n\t\t\t\t\tnoClassTesting: noClassTesting\n\t\t\t\t};\n\t\t\t},\n\n\t\t\t/*\n * Create a html div element and attach it with a parent. All the subsequent operations are performed\n * by upding this dom tree only.\n *\n * @param {HTMLElement} - The html element where the newly created div is to be attached. If not passed,\n * the new div is appended on the body.\n */\n\t\t\tcreateContainer: function createContainer(containerParent) {\n\t\t\t\tvar body, container;\n\n\t\t\t\tif (containerParent && (containerParent.offsetWidth || containerParent.offsetHeight)) {\n\t\t\t\t\tif (containerParent.appendChild) {\n\t\t\t\t\t\tcontainerParent.appendChild(container = doc.createElement(DIV));\n\t\t\t\t\t\tcontainer.className = containerClass;\n\t\t\t\t\t\tcontainer.setAttribute('aria-hidden', 'true');\n\t\t\t\t\t\tcontainer.setAttribute('role', 'presentation');\n\t\t\t\t\t\treturn container;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tbody = doc.getElementsByTagName('body')[0];\n\n\t\t\t\t\tif (body && body.appendChild) {\n\t\t\t\t\t\tcontainer = doc.createElement(DIV);\n\t\t\t\t\t\tcontainer.className = containerClass;\n\t\t\t\t\t\tcontainer.setAttribute('aria-hidden', 'true');\n\t\t\t\t\t\tcontainer.setAttribute('role', 'presentation');\n\t\t\t\t\t\tcontainerInstanceCount += 1;\n\t\t\t\t\t\tbody.appendChild(container);\n\t\t\t\t\t\treturn container;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// Finds a approximate position where the text is to be broken\n\t\t\tgetNearestBreakIndex: function getNearestBreakIndex(text, maxWidth, sl) {\n\t\t\t\tif (!text || !text.length) {\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\n\t\t\t\tvar difference,\n\t\t\t\t getWidth = sl._getWidthFn(),\n\t\t\t\t charLen = 0,\n\t\t\t\t increment = 0,\n\t\t\t\t oriWidth = getWidth(text),\n\t\t\t\t avgWidth = oriWidth / text.length;\n\n\t\t\t\tdifference = maxWidth;\n\t\t\t\tcharLen = ceil(maxWidth / avgWidth);\n\n\t\t\t\tif (oriWidth < maxWidth) {\n\t\t\t\t\treturn text.length - 1;\n\t\t\t\t}\n\n\t\t\t\tif (charLen > text.length) {\n\t\t\t\t\tdifference = maxWidth - oriWidth;\n\t\t\t\t\tcharLen = text.length;\n\t\t\t\t}\n\n\t\t\t\twhile (difference > 0) {\n\t\t\t\t\tdifference = maxWidth - getWidth(text.substr(0, charLen));\n\t\t\t\t\tincrement = floor(difference / avgWidth);\n\t\t\t\t\tif (increment) {\n\t\t\t\t\t\tcharLen += increment;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn charLen;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\twhile (difference < 0) {\n\t\t\t\t\tdifference = maxWidth - getWidth(text.substr(0, charLen));\n\t\t\t\t\tincrement = floor(difference / avgWidth);\n\t\t\t\t\tif (increment) {\n\t\t\t\t\t\tcharLen += increment;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn charLen;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn charLen;\n\t\t\t},\n\n\t\t\t/*\n * Determine lineheight of a text for a given style. It adds propery lineHeight to the style passed\n *\n * @param {Object} - The style based on which the text's metric needs to be calculated. The calculation happens\n * based on fontSize property, if its not present a default font size is assumed.\n *\n * @return {Object} - The style that was passed with lineHeight as a named propery set on the object.\n */\n\t\t\tsetLineHeight: function setLineHeight(styleObj) {\n\t\t\t\tvar fSize = styleObj.fontSize = styleObj.fontSize || '12px';\n\t\t\t\tstyleObj.lineHeight = styleObj.lineHeight || styleObj['line-height'] || parseInt(fSize, 10) * 1.2 + 'px';\n\t\t\t\treturn styleObj;\n\t\t\t}\n\t\t};\n\n\t\treturn lib;\n\t}\n};\n\nexports['default'] = lib;\nmodule.exports = exports['default'];","const Muze = require('./muze');\n\nmodule.exports = Muze.default ? Muze.default : Muze;\n","'use strict';\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _lib = require('./lib');\n\nvar _lib2 = _interopRequireDefault(_lib);\n\nvar slLib = _lib2['default'].init(typeof window !== \"undefined\" ? window : undefined),\n doc = slLib.win.document,\n documentSupport = slLib.getDocumentSupport(),\n SVG_BBOX_CORRECTION = documentSupport.isWebKit ? 0 : 4.5;\n\nfunction ContainerManager(parentContainer, isBrowserLess, maxContainers) {\n var svg;\n\n maxContainers = maxContainers > 5 ? maxContainers : 5;\n maxContainers = maxContainers < 20 ? maxContainers : 20;\n\n this.maxContainers = maxContainers;\n this.first = null;\n this.last = null;\n this.containers = {};\n this.length = 0;\n this.rootNode = parentContainer;\n\n if (isBrowserLess) {\n svg = doc.createElementNS('http://www.w3.org/2000/svg', 'svg');\n svg.setAttributeNS('http://www.w3.org/2000/svg', 'xlink', 'http://www.w3.org/1999/xlink');\n svg.setAttributeNS('http://www.w3.org/2000/svg', 'height', '0');\n svg.setAttributeNS('http://www.w3.org/2000/svg', 'width', '0');\n this.svgRoot = svg;\n this.rootNode.appendChild(svg);\n }\n}\n\nContainerManager.prototype.get = function (style) {\n var diff,\n key,\n containerObj,\n containers = this.containers,\n len = this.length,\n max = this.maxContainers,\n keyStr = '';\n\n for (key in slLib.supportedStyle) {\n if (style[key] !== undefined) {\n keyStr += slLib.supportedStyle[key] + ':' + style[key] + ';';\n }\n }\n\n if (!keyStr) {\n return false;\n }\n\n if (containerObj = containers[keyStr]) {\n if (this.first !== containerObj) {\n containerObj.prev && (containerObj.prev.next = containerObj.next);\n containerObj.next && (containerObj.next.prev = containerObj.prev);\n containerObj.next = this.first;\n containerObj.next.prev = containerObj;\n this.last === containerObj && (this.last = containerObj.prev);\n containerObj.prev = null;\n this.first = containerObj;\n }\n } else {\n if (len >= max) {\n diff = len - max + 1;\n // +1 is to remove an extra entry to make space for the new container to be added.\n while (diff--) {\n this.removeContainer(this.last);\n }\n }\n containerObj = this.addContainer(keyStr);\n }\n\n return containerObj;\n};\n\nContainerManager.prototype.addContainer = function (keyStr) {\n var node, container;\n\n this.containers[keyStr] = container = {\n next: null,\n prev: null,\n node: null,\n ellipsesWidth: 0,\n lineHeight: 0,\n dotWidth: 0,\n avgCharWidth: 4,\n keyStr: keyStr,\n charCache: {}\n };\n\n // Since the container objects are arranged from most recent to least recent order, we need to add the new\n // object at the beginning of the list.\n container.next = this.first;\n container.next && (container.next.prev = container);\n this.first = container;\n if (!this.last) {\n this.last = container;\n }\n this.length += 1;\n\n node = container.node = doc.createElement('div');\n this.rootNode.appendChild(node);\n\n if (documentSupport.isIE && !documentSupport.hasSVG) {\n node.style.setAttribute('cssText', keyStr);\n } else {\n node.setAttribute('style', keyStr);\n }\n\n node.setAttribute('aria-hidden', 'true');\n node.setAttribute('role', 'presentation');\n node.style.display = 'inline-block';\n\n node.innerHTML = slLib.testStrAvg; // A test string.\n container.lineHeight = node.offsetHeight;\n container.avgCharWidth = node.offsetWidth / 3;\n\n if (documentSupport.isBrowserLess) {\n node = container.svgText = doc.createElementNS('http://www.w3.org/2000/svg', 'text');\n node.setAttribute('style', keyStr);\n this.svgRoot.appendChild(node);\n\n node.textContent = slLib.testStrAvg; // A test string.\n container.lineHeight = node.getBBox().height;\n container.avgCharWidth = (node.getBBox().width - SVG_BBOX_CORRECTION) / 3;\n\n node.textContent = '...';\n container.ellipsesWidth = node.getBBox().width - SVG_BBOX_CORRECTION;\n node.textContent = '.';\n container.dotWidth = node.getBBox().width - SVG_BBOX_CORRECTION;\n } else {\n node.innerHTML = '...';\n container.ellipsesWidth = node.offsetWidth;\n node.innerHTML = '.';\n container.dotWidth = node.offsetWidth;\n node.innerHTML = '';\n }\n\n return container;\n};\n\nContainerManager.prototype.removeContainer = function (cObj) {\n var keyStr = cObj.keyStr;\n\n if (!keyStr || !this.length || !cObj) {\n return;\n }\n this.length -= 1;\n\n cObj.prev && (cObj.prev.next = cObj.next);\n cObj.next && (cObj.next.prev = cObj.prev);\n this.first === cObj && (this.first = cObj.next);\n this.last === cObj && (this.last = cObj.prev);\n\n cObj.node.parentNode.removeChild(cObj.node);\n\n delete this.containers[keyStr];\n};\n\nContainerManager.prototype.dispose = function () {\n var key,\n containers = this.containers;\n\n this.maxContainers = null;\n for (key in containers) {\n this.removeContainer(containers[key]);\n }\n\n this.rootNode.parentNode.removeChild(this.rootNode);\n\n this.rootNode = null;\n this.first = null;\n this.last = null;\n};\n\nmodule.exports = ContainerManager;","export default function(a, b) {\n return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","import ascending from \"./ascending\";\n\nexport default function(compare) {\n if (compare.length === 1) compare = ascendingComparator(compare);\n return {\n left: function(a, x, lo, hi) {\n if (lo == null) lo = 0;\n if (hi == null) hi = a.length;\n while (lo < hi) {\n var mid = lo + hi >>> 1;\n if (compare(a[mid], x) < 0) lo = mid + 1;\n else hi = mid;\n }\n return lo;\n },\n right: function(a, x, lo, hi) {\n if (lo == null) lo = 0;\n if (hi == null) hi = a.length;\n while (lo < hi) {\n var mid = lo + hi >>> 1;\n if (compare(a[mid], x) > 0) hi = mid;\n else lo = mid + 1;\n }\n return lo;\n }\n };\n}\n\nfunction ascendingComparator(f) {\n return function(d, x) {\n return ascending(f(d), x);\n };\n}\n","import ascending from \"./ascending\";\nimport bisector from \"./bisector\";\n\nvar ascendingBisect = bisector(ascending);\nexport var bisectRight = ascendingBisect.right;\nexport var bisectLeft = ascendingBisect.left;\nexport default bisectRight;\n","import {pair} from \"./pairs\";\n\nexport default function(values0, values1, reduce) {\n var n0 = values0.length,\n n1 = values1.length,\n values = new Array(n0 * n1),\n i0,\n i1,\n i,\n value0;\n\n if (reduce == null) reduce = pair;\n\n for (i0 = i = 0; i0 < n0; ++i0) {\n for (value0 = values0[i0], i1 = 0; i1 < n1; ++i1, ++i) {\n values[i] = reduce(value0, values1[i1]);\n }\n }\n\n return values;\n}\n","export default function(x) {\n return x === null ? NaN : +x;\n}\n","var array = Array.prototype;\n\nexport var slice = array.slice;\nexport var map = array.map;\n","export default function(start, stop, step) {\n start = +start, stop = +stop, step = (n = arguments.length) < 2 ? (stop = start, start = 0, 1) : n < 3 ? 1 : +step;\n\n var i = -1,\n n = Math.max(0, Math.ceil((stop - start) / step)) | 0,\n range = new Array(n);\n\n while (++i < n) {\n range[i] = start + i * step;\n }\n\n return range;\n}\n","var e10 = Math.sqrt(50),\n e5 = Math.sqrt(10),\n e2 = Math.sqrt(2);\n\nexport default function(start, stop, count) {\n var reverse,\n i = -1,\n n,\n ticks,\n step;\n\n stop = +stop, start = +start, count = +count;\n if (start === stop && count > 0) return [start];\n if (reverse = stop < start) n = start, start = stop, stop = n;\n if ((step = tickIncrement(start, stop, count)) === 0 || !isFinite(step)) return [];\n\n if (step > 0) {\n start = Math.ceil(start / step);\n stop = Math.floor(stop / step);\n ticks = new Array(n = Math.ceil(stop - start + 1));\n while (++i < n) ticks[i] = (start + i) * step;\n } else {\n start = Math.floor(start * step);\n stop = Math.ceil(stop * step);\n ticks = new Array(n = Math.ceil(start - stop + 1));\n while (++i < n) ticks[i] = (start - i) / step;\n }\n\n if (reverse) ticks.reverse();\n\n return ticks;\n}\n\nexport function tickIncrement(start, stop, count) {\n var step = (stop - start) / Math.max(0, count),\n power = Math.floor(Math.log(step) / Math.LN10),\n error = step / Math.pow(10, power);\n return power >= 0\n ? (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1) * Math.pow(10, power)\n : -Math.pow(10, -power) / (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1);\n}\n\nexport function tickStep(start, stop, count) {\n var step0 = Math.abs(stop - start) / Math.max(0, count),\n step1 = Math.pow(10, Math.floor(Math.log(step0) / Math.LN10)),\n error = step0 / step1;\n if (error >= e10) step1 *= 10;\n else if (error >= e5) step1 *= 5;\n else if (error >= e2) step1 *= 2;\n return stop < start ? -step1 : step1;\n}\n","export default function(values) {\n return Math.ceil(Math.log(values.length) / Math.LN2) + 1;\n}\n","import number from \"./number\";\n\nexport default function(values, p, valueof) {\n if (valueof == null) valueof = number;\n if (!(n = values.length)) return;\n if ((p = +p) <= 0 || n < 2) return +valueof(values[0], 0, values);\n if (p >= 1) return +valueof(values[n - 1], n - 1, values);\n var n,\n i = (n - 1) * p,\n i0 = Math.floor(i),\n value0 = +valueof(values[i0], i0, values),\n value1 = +valueof(values[i0 + 1], i0 + 1, values);\n return value0 + (value1 - value0) * (i - i0);\n}\n","export var prefix = \"$\";\n\nfunction Map() {}\n\nMap.prototype = map.prototype = {\n constructor: Map,\n has: function(key) {\n return (prefix + key) in this;\n },\n get: function(key) {\n return this[prefix + key];\n },\n set: function(key, value) {\n this[prefix + key] = value;\n return this;\n },\n remove: function(key) {\n var property = prefix + key;\n return property in this && delete this[property];\n },\n clear: function() {\n for (var property in this) if (property[0] === prefix) delete this[property];\n },\n keys: function() {\n var keys = [];\n for (var property in this) if (property[0] === prefix) keys.push(property.slice(1));\n return keys;\n },\n values: function() {\n var values = [];\n for (var property in this) if (property[0] === prefix) values.push(this[property]);\n return values;\n },\n entries: function() {\n var entries = [];\n for (var property in this) if (property[0] === prefix) entries.push({key: property.slice(1), value: this[property]});\n return entries;\n },\n size: function() {\n var size = 0;\n for (var property in this) if (property[0] === prefix) ++size;\n return size;\n },\n empty: function() {\n for (var property in this) if (property[0] === prefix) return false;\n return true;\n },\n each: function(f) {\n for (var property in this) if (property[0] === prefix) f(this[property], property.slice(1), this);\n }\n};\n\nfunction map(object, f) {\n var map = new Map;\n\n // Copy constructor.\n if (object instanceof Map) object.each(function(value, key) { map.set(key, value); });\n\n // Index array by numeric index or specified key function.\n else if (Array.isArray(object)) {\n var i = -1,\n n = object.length,\n o;\n\n if (f == null) while (++i < n) map.set(i, object[i]);\n else while (++i < n) map.set(f(o = object[i], i, object), o);\n }\n\n // Convert object to map.\n else if (object) for (var key in object) map.set(key, object[key]);\n\n return map;\n}\n\nexport default map;\n","import map from \"./map\";\n\nexport default function() {\n var keys = [],\n sortKeys = [],\n sortValues,\n rollup,\n nest;\n\n function apply(array, depth, createResult, setResult) {\n if (depth >= keys.length) {\n if (sortValues != null) array.sort(sortValues);\n return rollup != null ? rollup(array) : array;\n }\n\n var i = -1,\n n = array.length,\n key = keys[depth++],\n keyValue,\n value,\n valuesByKey = map(),\n values,\n result = createResult();\n\n while (++i < n) {\n if (values = valuesByKey.get(keyValue = key(value = array[i]) + \"\")) {\n values.push(value);\n } else {\n valuesByKey.set(keyValue, [value]);\n }\n }\n\n valuesByKey.each(function(values, key) {\n setResult(result, key, apply(values, depth, createResult, setResult));\n });\n\n return result;\n }\n\n function entries(map, depth) {\n if (++depth > keys.length) return map;\n var array, sortKey = sortKeys[depth - 1];\n if (rollup != null && depth >= keys.length) array = map.entries();\n else array = [], map.each(function(v, k) { array.push({key: k, values: entries(v, depth)}); });\n return sortKey != null ? array.sort(function(a, b) { return sortKey(a.key, b.key); }) : array;\n }\n\n return nest = {\n object: function(array) { return apply(array, 0, createObject, setObject); },\n map: function(array) { return apply(array, 0, createMap, setMap); },\n entries: function(array) { return entries(apply(array, 0, createMap, setMap), 0); },\n key: function(d) { keys.push(d); return nest; },\n sortKeys: function(order) { sortKeys[keys.length - 1] = order; return nest; },\n sortValues: function(order) { sortValues = order; return nest; },\n rollup: function(f) { rollup = f; return nest; }\n };\n}\n\nfunction createObject() {\n return {};\n}\n\nfunction setObject(object, key, value) {\n object[key] = value;\n}\n\nfunction createMap() {\n return map();\n}\n\nfunction setMap(map, key, value) {\n map.set(key, value);\n}\n","import {default as map, prefix} from \"./map\";\n\nfunction Set() {}\n\nvar proto = map.prototype;\n\nSet.prototype = set.prototype = {\n constructor: Set,\n has: proto.has,\n add: function(value) {\n value += \"\";\n this[prefix + value] = value;\n return this;\n },\n remove: proto.remove,\n clear: proto.clear,\n values: proto.keys,\n size: proto.size,\n empty: proto.empty,\n each: proto.each\n};\n\nfunction set(object, f) {\n var set = new Set;\n\n // Copy constructor.\n if (object instanceof Set) object.each(function(value) { set.add(value); });\n\n // Otherwise, assume it’s an array.\n else if (object) {\n var i = -1, n = object.length;\n if (f == null) while (++i < n) set.add(object[i]);\n else while (++i < n) set.add(f(object[i], i, object));\n }\n\n return set;\n}\n\nexport default set;\n","var array = Array.prototype;\n\nexport var map = array.map;\nexport var slice = array.slice;\n","import {map} from \"d3-collection\";\nimport {slice} from \"./array\";\n\nexport var implicit = {name: \"implicit\"};\n\nexport default function ordinal(range) {\n var index = map(),\n domain = [],\n unknown = implicit;\n\n range = range == null ? [] : slice.call(range);\n\n function scale(d) {\n var key = d + \"\", i = index.get(key);\n if (!i) {\n if (unknown !== implicit) return unknown;\n index.set(key, i = domain.push(d));\n }\n return range[(i - 1) % range.length];\n }\n\n scale.domain = function(_) {\n if (!arguments.length) return domain.slice();\n domain = [], index = map();\n var i = -1, n = _.length, d, key;\n while (++i < n) if (!index.has(key = (d = _[i]) + \"\")) index.set(key, domain.push(d));\n return scale;\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = slice.call(_), scale) : range.slice();\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n scale.copy = function() {\n return ordinal()\n .domain(domain)\n .range(range)\n .unknown(unknown);\n };\n\n return scale;\n}\n","import {range as sequence} from \"d3-array\";\nimport ordinal from \"./ordinal\";\n\nexport default function band() {\n var scale = ordinal().unknown(undefined),\n domain = scale.domain,\n ordinalRange = scale.range,\n range = [0, 1],\n step,\n bandwidth,\n round = false,\n paddingInner = 0,\n paddingOuter = 0,\n align = 0.5;\n\n delete scale.unknown;\n function rescale() {\n var n = domain().length,\n reverse = range[1] < range[0],\n start = range[reverse - 0],\n stop = range[1 - reverse];\n step = (stop - start) / Math.max(1, n - paddingInner + paddingOuter * 2);\n if (round) step = Math.floor(step);\n start += (stop - start - step * (n - paddingInner)) * align;\n bandwidth = step * (1 - paddingInner);\n if (round) start = Math.round(start), bandwidth = Math.round(bandwidth);\n var values = sequence(n).map(function(i) { return start + step * i; });\n return ordinalRange(reverse ? values.reverse() : values);\n }\n\n scale.domain = function(_) {\n return arguments.length ? (domain(_), rescale()) : domain();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = [+_[0], +_[1]], rescale()) : range.slice();\n };\n\n scale.rangeRound = function(_) {\n return range = [+_[0], +_[1]], round = true, rescale();\n };\n\n scale.bandwidth = function() {\n return bandwidth;\n };\n\n scale.step = function() {\n return step;\n };\n\n scale.round = function(_) {\n return arguments.length ? (round = !!_, rescale()) : round;\n };\n\n scale.padding = function(_) {\n return arguments.length ? (paddingInner = paddingOuter = Math.max(0, Math.min(1, _)), rescale()) : paddingInner;\n };\n\n scale.paddingInner = function(_) {\n return arguments.length ? (paddingInner = Math.max(0, Math.min(1, _)), rescale()) : paddingInner;\n };\n\n scale.paddingOuter = function(_) {\n return arguments.length ? (paddingOuter = Math.max(0, Math.min(1, _)), rescale()) : paddingOuter;\n };\n\n scale.align = function(_) {\n return arguments.length ? (align = Math.max(0, Math.min(1, _)), rescale()) : align;\n };\n\n scale.copy = function() {\n return band()\n .domain(domain())\n .range(range)\n .round(round)\n .paddingInner(paddingInner)\n .paddingOuter(paddingOuter)\n .align(align);\n };\n\n scale.invertExtent = function(r0, r1) {\n var lo = +r0,\n hi = arguments.length > 1 ? +r1 : lo,\n reverse = range[1] < range[0],\n values = reverse ? ordinalRange().reverse() : ordinalRange(),\n n = values.length - 1, a, b, t,\n hiIndex;\n values.push(values[n] + this.step());\n // order range inputs, bail if outside of scale range\n if (hi < lo) t = lo, lo = hi, hi = t;\n if (hi < values[0] || lo > range[1-reverse]) return undefined;\n\n // binary search to index into scale range\n a = Math.max(0, getClosestIndexOf(values, lo));\n hiIndex = getClosestIndexOf(values, hi);\n b = lo===hi ? a : Math.max(a, hiIndex - 1);\n\n // increment index a if lo is within padding gap\n // if (lo - values[a] > bandwidth + 1e-10) ++a;\n\n if (reverse) t = a, a = n - b, b = n - t; // map + swap\n return (a > b) ? undefined : domain().slice(a, b+1);\n };\n\n scale.invert = function (r0, r1) {\n var lo = +r0,\n hi = arguments.length > 1 ? +r1 : lo,\n reverse = range[1] < range[0],\n values = reverse ? ordinalRange().reverse() : ordinalRange(),\n n = values.length - 1,\n a,\n t;\n\n // order range inputs, bail if outside of scale range\n if (hi < lo) t = lo, lo = hi, hi = t;\n if (hi < values[0] || lo > range[1-reverse]) return undefined;\n\n // binary search to index into scale range\n a = Math.max(0, getClosestIndexOf(values, lo, 'left'));\n\n // increment index a if lo is within padding gap\n // if (lo - values[a] > bandwidth + 1e-10) ++a;\n\n return domain()[reverse ? n - a : a];\n }\n return rescale();\n}\n\nfunction pointish(scale) {\n var copy = scale.copy;\n\n scale.padding = scale.paddingOuter;\n delete scale.paddingInner;\n delete scale.paddingOuter;\n\n scale.copy = function() {\n return pointish(copy());\n };\n\n return scale;\n}\n\nexport function point() {\n return pointish(band().paddingInner(1));\n}\n\nfunction getClosestIndexOf (arr, value, side) {\n var low = 0,\n arrLen = arr.length,\n high = arrLen - 1,\n highVal,\n mid,\n d1,\n d2;\n\n while (low < high) {\n mid = Math.floor((low + high) / 2);\n d1 = Math.abs(arr[mid] - value);\n d2 = Math.abs(arr[mid + 1] - value);\n\n if (d2 <= d1) {\n low = mid + 1;\n }\n else {\n high = mid;\n }\n }\n\n if (!side) {\n return high;\n }\n\n highVal = arr[high];\n if (highVal === value) {\n return high;\n } else if (highVal > value) {\n if (high === 0) { return high; }\n return side === 'left'? high - 1 : high;\n } else {\n if (high === arr.length - 1) { return high; }\n return side === 'left'? high : high + 1;\n }\n}","export default function(constructor, factory, prototype) {\n constructor.prototype = factory.prototype = prototype;\n prototype.constructor = constructor;\n}\n\nexport function extend(parent, definition) {\n var prototype = Object.create(parent.prototype);\n for (var key in definition) prototype[key] = definition[key];\n return prototype;\n}\n","import define, {extend} from \"./define\";\n\nexport function Color() {}\n\nexport var darker = 0.7;\nexport var brighter = 1 / darker;\n\nvar reI = \"\\\\s*([+-]?\\\\d+)\\\\s*\",\n reN = \"\\\\s*([+-]?\\\\d*\\\\.?\\\\d+(?:[eE][+-]?\\\\d+)?)\\\\s*\",\n reP = \"\\\\s*([+-]?\\\\d*\\\\.?\\\\d+(?:[eE][+-]?\\\\d+)?)%\\\\s*\",\n reHex3 = /^#([0-9a-f]{3})$/,\n reHex6 = /^#([0-9a-f]{6})$/,\n reRgbInteger = new RegExp(\"^rgb\\\\(\" + [reI, reI, reI] + \"\\\\)$\"),\n reRgbPercent = new RegExp(\"^rgb\\\\(\" + [reP, reP, reP] + \"\\\\)$\"),\n reRgbaInteger = new RegExp(\"^rgba\\\\(\" + [reI, reI, reI, reN] + \"\\\\)$\"),\n reRgbaPercent = new RegExp(\"^rgba\\\\(\" + [reP, reP, reP, reN] + \"\\\\)$\"),\n reHslPercent = new RegExp(\"^hsl\\\\(\" + [reN, reP, reP] + \"\\\\)$\"),\n reHslaPercent = new RegExp(\"^hsla\\\\(\" + [reN, reP, reP, reN] + \"\\\\)$\");\n\nvar 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\ndefine(Color, color, {\n displayable: function() {\n return this.rgb().displayable();\n },\n hex: function() {\n return this.rgb().hex();\n },\n toString: function() {\n return this.rgb() + \"\";\n }\n});\n\nexport default function color(format) {\n var m;\n format = (format + \"\").trim().toLowerCase();\n return (m = reHex3.exec(format)) ? (m = parseInt(m[1], 16), new Rgb((m >> 8 & 0xf) | (m >> 4 & 0x0f0), (m >> 4 & 0xf) | (m & 0xf0), ((m & 0xf) << 4) | (m & 0xf), 1)) // #f00\n : (m = reHex6.exec(format)) ? rgbn(parseInt(m[1], 16)) // #ff0000\n : (m = reRgbInteger.exec(format)) ? new Rgb(m[1], m[2], m[3], 1) // rgb(255, 0, 0)\n : (m = reRgbPercent.exec(format)) ? new Rgb(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, 1) // rgb(100%, 0%, 0%)\n : (m = reRgbaInteger.exec(format)) ? rgba(m[1], m[2], m[3], m[4]) // rgba(255, 0, 0, 1)\n : (m = reRgbaPercent.exec(format)) ? rgba(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, m[4]) // rgb(100%, 0%, 0%, 1)\n : (m = reHslPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, 1) // hsl(120, 50%, 50%)\n : (m = reHslaPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, m[4]) // hsla(120, 50%, 50%, 1)\n : named.hasOwnProperty(format) ? rgbn(named[format])\n : format === \"transparent\" ? new Rgb(NaN, NaN, NaN, 0)\n : null;\n}\n\nfunction rgbn(n) {\n return new Rgb(n >> 16 & 0xff, n >> 8 & 0xff, n & 0xff, 1);\n}\n\nfunction rgba(r, g, b, a) {\n if (a <= 0) r = g = b = NaN;\n return new Rgb(r, g, b, a);\n}\n\nexport function rgbConvert(o) {\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Rgb;\n o = o.rgb();\n return new Rgb(o.r, o.g, o.b, o.opacity);\n}\n\nexport function rgb(r, g, b, opacity) {\n return arguments.length === 1 ? rgbConvert(r) : new Rgb(r, g, b, opacity == null ? 1 : opacity);\n}\n\nexport function Rgb(r, g, b, opacity) {\n this.r = +r;\n this.g = +g;\n this.b = +b;\n this.opacity = +opacity;\n}\n\ndefine(Rgb, rgb, extend(Color, {\n 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, this.opacity);\n },\n 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, this.opacity);\n },\n rgb: function() {\n return this;\n },\n 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 && (0 <= this.opacity && this.opacity <= 1);\n },\n hex: function() {\n return \"#\" + hex(this.r) + hex(this.g) + hex(this.b);\n },\n toString: function() {\n var a = this.opacity; a = isNaN(a) ? 1 : Math.max(0, Math.min(1, a));\n return (a === 1 ? \"rgb(\" : \"rgba(\")\n + Math.max(0, Math.min(255, Math.round(this.r) || 0)) + \", \"\n + Math.max(0, Math.min(255, Math.round(this.g) || 0)) + \", \"\n + Math.max(0, Math.min(255, Math.round(this.b) || 0))\n + (a === 1 ? \")\" : \", \" + a + \")\");\n }\n}));\n\nfunction hex(value) {\n value = Math.max(0, Math.min(255, Math.round(value) || 0));\n return (value < 16 ? \"0\" : \"\") + value.toString(16);\n}\n\nfunction hsla(h, s, l, a) {\n if (a <= 0) h = s = l = NaN;\n else if (l <= 0 || l >= 1) h = s = NaN;\n else if (s <= 0) h = NaN;\n return new Hsl(h, s, l, a);\n}\n\nexport function hslConvert(o) {\n if (o instanceof Hsl) return new Hsl(o.h, o.s, o.l, o.opacity);\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Hsl;\n if (o instanceof Hsl) return o;\n o = o.rgb();\n var r = o.r / 255,\n g = o.g / 255,\n b = o.b / 255,\n min = Math.min(r, g, b),\n max = Math.max(r, g, b),\n h = NaN,\n s = max - min,\n l = (max + min) / 2;\n if (s) {\n if (r === max) h = (g - b) / s + (g < b) * 6;\n else if (g === max) h = (b - r) / s + 2;\n else h = (r - g) / s + 4;\n s /= l < 0.5 ? max + min : 2 - max - min;\n h *= 60;\n } else {\n s = l > 0 && l < 1 ? 0 : h;\n }\n return new Hsl(h, s, l, o.opacity);\n}\n\nexport function hsl(h, s, l, opacity) {\n return arguments.length === 1 ? hslConvert(h) : new Hsl(h, s, l, opacity == null ? 1 : opacity);\n}\n\nfunction Hsl(h, s, l, opacity) {\n this.h = +h;\n this.s = +s;\n this.l = +l;\n this.opacity = +opacity;\n}\n\ndefine(Hsl, hsl, extend(Color, {\n brighter: function(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n darker: function(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n 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 < 0.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 this.opacity\n );\n },\n displayable: function() {\n return (0 <= this.s && this.s <= 1 || isNaN(this.s))\n && (0 <= this.l && this.l <= 1)\n && (0 <= this.opacity && this.opacity <= 1);\n }\n}));\n\n/* From FvD 13.37, CSS Color Module Level 3 */\nfunction 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","export var deg2rad = Math.PI / 180;\nexport var rad2deg = 180 / Math.PI;\n","import define, {extend} from \"./define\";\nimport {Color, rgbConvert, Rgb} from \"./color\";\nimport {deg2rad, rad2deg} from \"./math\";\n\n// https://beta.observablehq.com/@mbostock/lab-and-rgb\nvar K = 18,\n Xn = 0.96422,\n Yn = 1,\n Zn = 0.82521,\n t0 = 4 / 29,\n t1 = 6 / 29,\n t2 = 3 * t1 * t1,\n t3 = t1 * t1 * t1;\n\nfunction labConvert(o) {\n if (o instanceof Lab) return new Lab(o.l, o.a, o.b, o.opacity);\n if (o instanceof Hcl) {\n if (isNaN(o.h)) return new Lab(o.l, 0, 0, o.opacity);\n var h = o.h * deg2rad;\n return new Lab(o.l, Math.cos(h) * o.c, Math.sin(h) * o.c, o.opacity);\n }\n if (!(o instanceof Rgb)) o = rgbConvert(o);\n var r = rgb2lrgb(o.r),\n g = rgb2lrgb(o.g),\n b = rgb2lrgb(o.b),\n y = xyz2lab((0.2225045 * r + 0.7168786 * g + 0.0606169 * b) / Yn), x, z;\n if (r === g && g === b) x = z = y; else {\n x = xyz2lab((0.4360747 * r + 0.3850649 * g + 0.1430804 * b) / Xn);\n z = xyz2lab((0.0139322 * r + 0.0971045 * g + 0.7141733 * b) / Zn);\n }\n return new Lab(116 * y - 16, 500 * (x - y), 200 * (y - z), o.opacity);\n}\n\nexport function gray(l, opacity) {\n return new Lab(l, 0, 0, opacity == null ? 1 : opacity);\n}\n\nexport default function lab(l, a, b, opacity) {\n return arguments.length === 1 ? labConvert(l) : new Lab(l, a, b, opacity == null ? 1 : opacity);\n}\n\nexport function Lab(l, a, b, opacity) {\n this.l = +l;\n this.a = +a;\n this.b = +b;\n this.opacity = +opacity;\n}\n\ndefine(Lab, lab, extend(Color, {\n brighter: function(k) {\n return new Lab(this.l + K * (k == null ? 1 : k), this.a, this.b, this.opacity);\n },\n darker: function(k) {\n return new Lab(this.l - K * (k == null ? 1 : k), this.a, this.b, this.opacity);\n },\n 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 x = Xn * lab2xyz(x);\n y = Yn * lab2xyz(y);\n z = Zn * lab2xyz(z);\n return new Rgb(\n lrgb2rgb( 3.1338561 * x - 1.6168667 * y - 0.4906146 * z),\n lrgb2rgb(-0.9787684 * x + 1.9161415 * y + 0.0334540 * z),\n lrgb2rgb( 0.0719453 * x - 0.2289914 * y + 1.4052427 * z),\n this.opacity\n );\n }\n}));\n\nfunction xyz2lab(t) {\n return t > t3 ? Math.pow(t, 1 / 3) : t / t2 + t0;\n}\n\nfunction lab2xyz(t) {\n return t > t1 ? t * t * t : t2 * (t - t0);\n}\n\nfunction lrgb2rgb(x) {\n return 255 * (x <= 0.0031308 ? 12.92 * x : 1.055 * Math.pow(x, 1 / 2.4) - 0.055);\n}\n\nfunction rgb2lrgb(x) {\n return (x /= 255) <= 0.04045 ? x / 12.92 : Math.pow((x + 0.055) / 1.055, 2.4);\n}\n\nfunction hclConvert(o) {\n if (o instanceof Hcl) return new Hcl(o.h, o.c, o.l, o.opacity);\n if (!(o instanceof Lab)) o = labConvert(o);\n if (o.a === 0 && o.b === 0) return new Hcl(NaN, 0, o.l, o.opacity);\n var h = Math.atan2(o.b, o.a) * rad2deg;\n return new Hcl(h < 0 ? h + 360 : h, Math.sqrt(o.a * o.a + o.b * o.b), o.l, o.opacity);\n}\n\nexport function lch(l, c, h, opacity) {\n return arguments.length === 1 ? hclConvert(l) : new Hcl(h, c, l, opacity == null ? 1 : opacity);\n}\n\nexport function hcl(h, c, l, opacity) {\n return arguments.length === 1 ? hclConvert(h) : new Hcl(h, c, l, opacity == null ? 1 : opacity);\n}\n\nexport function Hcl(h, c, l, opacity) {\n this.h = +h;\n this.c = +c;\n this.l = +l;\n this.opacity = +opacity;\n}\n\ndefine(Hcl, hcl, extend(Color, {\n brighter: function(k) {\n return new Hcl(this.h, this.c, this.l + K * (k == null ? 1 : k), this.opacity);\n },\n darker: function(k) {\n return new Hcl(this.h, this.c, this.l - K * (k == null ? 1 : k), this.opacity);\n },\n rgb: function() {\n return labConvert(this).rgb();\n }\n}));\n","import define, {extend} from \"./define\";\nimport {Color, rgbConvert, Rgb, darker, brighter} from \"./color\";\nimport {deg2rad, rad2deg} from \"./math\";\n\nvar A = -0.14861,\n B = +1.78277,\n C = -0.29227,\n D = -0.90649,\n E = +1.97294,\n ED = E * D,\n EB = E * B,\n BC_DA = B * C - D * A;\n\nfunction cubehelixConvert(o) {\n if (o instanceof Cubehelix) return new Cubehelix(o.h, o.s, o.l, o.opacity);\n if (!(o instanceof Rgb)) o = rgbConvert(o);\n var r = o.r / 255,\n g = o.g / 255,\n b = o.b / 255,\n l = (BC_DA * b + ED * r - EB * g) / (BC_DA + ED - EB),\n bl = b - l,\n 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 return new Cubehelix(h < 0 ? h + 360 : h, s, l, o.opacity);\n}\n\nexport default function cubehelix(h, s, l, opacity) {\n return arguments.length === 1 ? cubehelixConvert(h) : new Cubehelix(h, s, l, opacity == null ? 1 : opacity);\n}\n\nexport function Cubehelix(h, s, l, opacity) {\n this.h = +h;\n this.s = +s;\n this.l = +l;\n this.opacity = +opacity;\n}\n\ndefine(Cubehelix, cubehelix, extend(Color, {\n brighter: function(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Cubehelix(this.h, this.s, this.l * k, this.opacity);\n },\n darker: function(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Cubehelix(this.h, this.s, this.l * k, this.opacity);\n },\n 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 this.opacity\n );\n }\n}));\n","export function basis(t1, v0, v1, v2, v3) {\n var t2 = t1 * t1, t3 = t2 * t1;\n return ((1 - 3 * t1 + 3 * t2 - t3) * v0\n + (4 - 6 * t2 + 3 * t3) * v1\n + (1 + 3 * t1 + 3 * t2 - 3 * t3) * v2\n + t3 * v3) / 6;\n}\n\nexport default function(values) {\n var n = values.length - 1;\n return function(t) {\n var i = t <= 0 ? (t = 0) : t >= 1 ? (t = 1, n - 1) : Math.floor(t * n),\n v1 = values[i],\n v2 = values[i + 1],\n v0 = i > 0 ? values[i - 1] : 2 * v1 - v2,\n v3 = i < n - 1 ? values[i + 2] : 2 * v2 - v1;\n return basis((t - i / n) * n, v0, v1, v2, v3);\n };\n}\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","import constant from \"./constant\";\n\nfunction linear(a, d) {\n return function(t) {\n return a + t * d;\n };\n}\n\nfunction exponential(a, b, y) {\n return a = Math.pow(a, y), b = Math.pow(b, y) - a, y = 1 / y, function(t) {\n return Math.pow(a + t * b, y);\n };\n}\n\nexport function hue(a, b) {\n var d = b - a;\n return d ? linear(a, d > 180 || d < -180 ? d - 360 * Math.round(d / 360) : d) : constant(isNaN(a) ? b : a);\n}\n\nexport function gamma(y) {\n return (y = +y) === 1 ? nogamma : function(a, b) {\n return b - a ? exponential(a, b, y) : constant(isNaN(a) ? b : a);\n };\n}\n\nexport default function nogamma(a, b) {\n var d = b - a;\n return d ? linear(a, d) : constant(isNaN(a) ? b : a);\n}\n","import {rgb as colorRgb} from \"d3-color\";\nimport basis from \"./basis\";\nimport basisClosed from \"./basisClosed\";\nimport nogamma, {gamma} from \"./color\";\n\nexport default (function rgbGamma(y) {\n var color = gamma(y);\n\n function rgb(start, end) {\n var r = color((start = colorRgb(start)).r, (end = colorRgb(end)).r),\n g = color(start.g, end.g),\n b = color(start.b, end.b),\n opacity = nogamma(start.opacity, end.opacity);\n return function(t) {\n start.r = r(t);\n start.g = g(t);\n start.b = b(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n\n rgb.gamma = rgbGamma;\n\n return rgb;\n})(1);\n\nfunction rgbSpline(spline) {\n return function(colors) {\n var n = colors.length,\n r = new Array(n),\n g = new Array(n),\n b = new Array(n),\n i, color;\n for (i = 0; i < n; ++i) {\n color = colorRgb(colors[i]);\n r[i] = color.r || 0;\n g[i] = color.g || 0;\n b[i] = color.b || 0;\n }\n r = spline(r);\n g = spline(g);\n b = spline(b);\n color.opacity = 1;\n return function(t) {\n color.r = r(t);\n color.g = g(t);\n color.b = b(t);\n return color + \"\";\n };\n };\n}\n\nexport var rgbBasis = rgbSpline(basis);\nexport var rgbBasisClosed = rgbSpline(basisClosed);\n","export default function(a, b) {\n return a = +a, b -= a, function(t) {\n return a + b * t;\n };\n}\n","import {basis} from \"./basis\";\n\nexport default function(values) {\n var n = values.length;\n return function(t) {\n var i = Math.floor(((t %= 1) < 0 ? ++t : t) * n),\n v0 = values[(i + n - 1) % n],\n v1 = values[i % n],\n v2 = values[(i + 1) % n],\n v3 = values[(i + 2) % n];\n return basis((t - i / n) * n, v0, v1, v2, v3);\n };\n}\n","import number from \"./number\";\n\nvar reA = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n reB = new RegExp(reA.source, \"g\");\n\nfunction zero(b) {\n return function() {\n return b;\n };\n}\n\nfunction one(b) {\n return function(t) {\n return b(t) + \"\";\n };\n}\n\nexport default function(a, b) {\n var bi = reA.lastIndex = reB.lastIndex = 0, // scan index for next number in b\n am, // current match in a\n bm, // current match in b\n bs, // string preceding current number in b, if any\n i = -1, // index in s\n s = [], // string constants and placeholders\n q = []; // number interpolators\n\n // Coerce inputs to strings.\n a = a + \"\", b = b + \"\";\n\n // Interpolate pairs of numbers in a & b.\n while ((am = reA.exec(a))\n && (bm = reB.exec(b))) {\n if ((bs = bm.index) > bi) { // a string precedes the next number in b\n bs = b.slice(bi, bs);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n if ((am = am[0]) === (bm = bm[0])) { // numbers in a & b match\n if (s[i]) s[i] += bm; // coalesce with previous string\n else s[++i] = bm;\n } else { // interpolate non-matching numbers\n s[++i] = null;\n q.push({i: i, x: number(am, bm)});\n }\n bi = reB.lastIndex;\n }\n\n // Add remains of b.\n if (bi < b.length) {\n bs = b.slice(bi);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n\n // Special optimization for only a single match.\n // Otherwise, interpolate each of the numbers and rejoin the string.\n return s.length < 2 ? (q[0]\n ? one(q[0].x)\n : zero(b))\n : (b = q.length, function(t) {\n for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t);\n return s.join(\"\");\n });\n}\n","import decompose, {identity} from \"./decompose\";\n\nvar cssNode,\n cssRoot,\n cssView,\n svgNode;\n\nexport function parseCss(value) {\n if (value === \"none\") return identity;\n if (!cssNode) cssNode = document.createElement(\"DIV\"), cssRoot = document.documentElement, cssView = document.defaultView;\n cssNode.style.transform = value;\n value = cssView.getComputedStyle(cssRoot.appendChild(cssNode), null).getPropertyValue(\"transform\");\n cssRoot.removeChild(cssNode);\n value = value.slice(7, -1).split(\",\");\n return decompose(+value[0], +value[1], +value[2], +value[3], +value[4], +value[5]);\n}\n\nexport function parseSvg(value) {\n if (value == null) return identity;\n if (!svgNode) svgNode = document.createElementNS(\"http://www.w3.org/2000/svg\", \"g\");\n svgNode.setAttribute(\"transform\", value);\n if (!(value = svgNode.transform.baseVal.consolidate())) return identity;\n value = value.matrix;\n return decompose(value.a, value.b, value.c, value.d, value.e, value.f);\n}\n","import {color} from \"d3-color\";\nimport rgb from \"./rgb\";\nimport array from \"./array\";\nimport date from \"./date\";\nimport number from \"./number\";\nimport object from \"./object\";\nimport string from \"./string\";\nimport constant from \"./constant\";\n\nexport default function(a, b) {\n var t = typeof b, c;\n return b == null || t === \"boolean\" ? constant(b)\n : (t === \"number\" ? number\n : t === \"string\" ? ((c = color(b)) ? (b = c, rgb) : string)\n : b instanceof color ? rgb\n : b instanceof Date ? date\n : Array.isArray(b) ? array\n : typeof b.valueOf !== \"function\" && typeof b.toString !== \"function\" || isNaN(b) ? object\n : number)(a, b);\n}\n","export default function(a, b) {\n var d = new Date;\n return a = +a, b -= a, function(t) {\n return d.setTime(a + b * t), d;\n };\n}\n","import value from \"./value\";\n\nexport default function(a, b) {\n var nb = b ? b.length : 0,\n na = a ? Math.min(nb, a.length) : 0,\n x = new Array(na),\n c = new Array(nb),\n i;\n\n for (i = 0; i < na; ++i) x[i] = value(a[i], b[i]);\n for (; i < nb; ++i) c[i] = b[i];\n\n return function(t) {\n for (i = 0; i < na; ++i) c[i] = x[i](t);\n return c;\n };\n}\n","import value from \"./value\";\n\nexport default function(a, b) {\n var i = {},\n c = {},\n k;\n\n if (a === null || typeof a !== \"object\") a = {};\n if (b === null || typeof b !== \"object\") b = {};\n\n for (k in b) {\n if (k in a) {\n i[k] = value(a[k], b[k]);\n } else {\n c[k] = b[k];\n }\n }\n\n return function(t) {\n for (k in i) c[k] = i[k](t);\n return c;\n };\n}\n","export default function(a, b) {\n return a = +a, b -= a, function(t) {\n return Math.round(a + b * t);\n };\n}\n","var degrees = 180 / Math.PI;\n\nexport var identity = {\n translateX: 0,\n translateY: 0,\n rotate: 0,\n skewX: 0,\n scaleX: 1,\n scaleY: 1\n};\n\nexport default function(a, b, c, d, e, f) {\n var scaleX, scaleY, skewX;\n if (scaleX = Math.sqrt(a * a + b * b)) a /= scaleX, b /= scaleX;\n if (skewX = a * c + b * d) c -= a * skewX, d -= b * skewX;\n if (scaleY = Math.sqrt(c * c + d * d)) c /= scaleY, d /= scaleY, skewX /= scaleY;\n if (a * d < b * c) a = -a, b = -b, skewX = -skewX, scaleX = -scaleX;\n return {\n translateX: e,\n translateY: f,\n rotate: Math.atan2(b, a) * degrees,\n skewX: Math.atan(skewX) * degrees,\n scaleX: scaleX,\n scaleY: scaleY\n };\n}\n","import number from \"../number\";\nimport {parseCss, parseSvg} from \"./parse\";\n\nfunction interpolateTransform(parse, pxComma, pxParen, degParen) {\n\n function pop(s) {\n return s.length ? s.pop() + \" \" : \"\";\n }\n\n function translate(xa, ya, xb, yb, s, q) {\n if (xa !== xb || ya !== yb) {\n var i = s.push(\"translate(\", null, pxComma, null, pxParen);\n q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\n } else if (xb || yb) {\n s.push(\"translate(\" + xb + pxComma + yb + pxParen);\n }\n }\n\n function rotate(a, b, s, q) {\n if (a !== b) {\n if (a - b > 180) b += 360; else if (b - a > 180) a += 360; // shortest path\n q.push({i: s.push(pop(s) + \"rotate(\", null, degParen) - 2, x: number(a, b)});\n } else if (b) {\n s.push(pop(s) + \"rotate(\" + b + degParen);\n }\n }\n\n function skewX(a, b, s, q) {\n if (a !== b) {\n q.push({i: s.push(pop(s) + \"skewX(\", null, degParen) - 2, x: number(a, b)});\n } else if (b) {\n s.push(pop(s) + \"skewX(\" + b + degParen);\n }\n }\n\n function scale(xa, ya, xb, yb, s, q) {\n if (xa !== xb || ya !== yb) {\n var i = s.push(pop(s) + \"scale(\", null, \",\", null, \")\");\n q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\n } else if (xb !== 1 || yb !== 1) {\n s.push(pop(s) + \"scale(\" + xb + \",\" + yb + \")\");\n }\n }\n\n return function(a, b) {\n var s = [], // string constants and placeholders\n q = []; // number interpolators\n a = parse(a), b = parse(b);\n translate(a.translateX, a.translateY, b.translateX, b.translateY, s, q);\n rotate(a.rotate, b.rotate, s, q);\n skewX(a.skewX, b.skewX, s, q);\n scale(a.scaleX, a.scaleY, b.scaleX, b.scaleY, s, q);\n a = b = null; // gc\n return function(t) {\n var i = -1, n = q.length, o;\n while (++i < n) s[(o = q[i]).i] = o.x(t);\n return s.join(\"\");\n };\n };\n}\n\nexport var interpolateTransformCss = interpolateTransform(parseCss, \"px, \", \"px)\", \"deg)\");\nexport var interpolateTransformSvg = interpolateTransform(parseSvg, \", \", \")\", \")\");\n","var rho = Math.SQRT2,\n rho2 = 2,\n rho4 = 4,\n epsilon2 = 1e-12;\n\nfunction cosh(x) {\n return ((x = Math.exp(x)) + 1 / x) / 2;\n}\n\nfunction sinh(x) {\n return ((x = Math.exp(x)) - 1 / x) / 2;\n}\n\nfunction tanh(x) {\n return ((x = Math.exp(2 * x)) - 1) / (x + 1);\n}\n\n// p0 = [ux0, uy0, w0]\n// p1 = [ux1, uy1, w1]\nexport default function(p0, p1) {\n var ux0 = p0[0], uy0 = p0[1], w0 = p0[2],\n ux1 = p1[0], uy1 = p1[1], w1 = p1[2],\n dx = ux1 - ux0,\n dy = uy1 - uy0,\n d2 = dx * dx + dy * dy,\n i,\n S;\n\n // Special case for u0 ≅ u1.\n if (d2 < epsilon2) {\n S = Math.log(w1 / w0) / rho;\n i = function(t) {\n return [\n ux0 + t * dx,\n uy0 + t * dy,\n w0 * Math.exp(rho * t * S)\n ];\n }\n }\n\n // General case.\n else {\n var d1 = Math.sqrt(d2),\n b0 = (w1 * w1 - w0 * w0 + rho4 * d2) / (2 * w0 * rho2 * d1),\n b1 = (w1 * w1 - w0 * w0 - rho4 * d2) / (2 * w1 * rho2 * d1),\n r0 = Math.log(Math.sqrt(b0 * b0 + 1) - b0),\n r1 = Math.log(Math.sqrt(b1 * b1 + 1) - b1);\n S = (r1 - r0) / rho;\n i = function(t) {\n var s = t * S,\n coshr0 = cosh(r0),\n u = w0 / (rho2 * d1) * (coshr0 * tanh(rho * s + r0) - sinh(r0));\n return [\n ux0 + u * dx,\n uy0 + u * dy,\n w0 * coshr0 / cosh(rho * s + r0)\n ];\n }\n }\n\n i.duration = S * 1000;\n\n return i;\n}\n","import {hsl as colorHsl} from \"d3-color\";\nimport color, {hue} from \"./color\";\n\nfunction hsl(hue) {\n return function(start, end) {\n var h = hue((start = colorHsl(start)).h, (end = colorHsl(end)).h),\n s = color(start.s, end.s),\n l = color(start.l, end.l),\n opacity = color(start.opacity, end.opacity);\n return function(t) {\n start.h = h(t);\n start.s = s(t);\n start.l = l(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n}\n\nexport default hsl(hue);\nexport var hslLong = hsl(color);\n","import {hcl as colorHcl} from \"d3-color\";\nimport color, {hue} from \"./color\";\n\nfunction hcl(hue) {\n return function(start, end) {\n var h = hue((start = colorHcl(start)).h, (end = colorHcl(end)).h),\n c = color(start.c, end.c),\n l = color(start.l, end.l),\n opacity = color(start.opacity, end.opacity);\n return function(t) {\n start.h = h(t);\n start.c = c(t);\n start.l = l(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n}\n\nexport default hcl(hue);\nexport var hclLong = hcl(color);\n","import {cubehelix as colorCubehelix} from \"d3-color\";\nimport color, {hue} from \"./color\";\n\nfunction cubehelix(hue) {\n return (function cubehelixGamma(y) {\n y = +y;\n\n function cubehelix(start, end) {\n var h = hue((start = colorCubehelix(start)).h, (end = colorCubehelix(end)).h),\n s = color(start.s, end.s),\n l = color(start.l, end.l),\n opacity = color(start.opacity, end.opacity);\n return function(t) {\n start.h = h(t);\n start.s = s(t);\n start.l = l(Math.pow(t, y));\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n\n cubehelix.gamma = cubehelixGamma;\n\n return cubehelix;\n })(1);\n}\n\nexport default cubehelix(hue);\nexport var cubehelixLong = cubehelix(color);\n","export default function piecewise(interpolate, values) {\n var i = 0, n = values.length - 1, v = values[0], I = new Array(n < 0 ? 0 : n);\n while (i < n) I[i] = interpolate(v, v = values[++i]);\n return function(t) {\n var i = Math.max(0, Math.min(n - 1, Math.floor(t *= n)));\n return I[i](t - i);\n };\n}\n","export default function(interpolator, n) {\n var samples = new Array(n);\n for (var i = 0; i < n; ++i) samples[i] = interpolator(i / (n - 1));\n return samples;\n}\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","export default function(x) {\n return +x;\n}\n","import {bisect} from \"d3-array\";\nimport {interpolate as interpolateValue, interpolateRound} from \"d3-interpolate\";\nimport {map, slice} from \"./array\";\nimport constant from \"./constant\";\nimport number from \"./number\";\n\nvar unit = [0, 1];\n\nexport function deinterpolateLinear(a, b) {\n return (b -= (a = +a))\n ? function(x) { return (x - a) / b; }\n : constant(b);\n}\n\nfunction deinterpolateClamp(deinterpolate) {\n return function(a, b) {\n var d = deinterpolate(a = +a, b = +b);\n return function(x) { return x <= a ? 0 : x >= b ? 1 : d(x); };\n };\n}\n\nfunction reinterpolateClamp(reinterpolate) {\n return function(a, b) {\n var r = reinterpolate(a = +a, b = +b);\n return function(t) { return t <= 0 ? a : t >= 1 ? b : r(t); };\n };\n}\n\nfunction bimap(domain, range, deinterpolate, reinterpolate) {\n var d0 = domain[0], d1 = domain[1], r0 = range[0], r1 = range[1];\n if (d1 < d0) d0 = deinterpolate(d1, d0), r0 = reinterpolate(r1, r0);\n else d0 = deinterpolate(d0, d1), r0 = reinterpolate(r0, r1);\n return function(x) { return r0(d0(x)); };\n}\n\nfunction polymap(domain, range, deinterpolate, reinterpolate) {\n var j = Math.min(domain.length, range.length) - 1,\n d = new Array(j),\n r = new Array(j),\n i = -1;\n\n // Reverse descending domains.\n if (domain[j] < domain[0]) {\n domain = domain.slice().reverse();\n range = range.slice().reverse();\n }\n\n while (++i < j) {\n d[i] = deinterpolate(domain[i], domain[i + 1]);\n r[i] = reinterpolate(range[i], range[i + 1]);\n }\n\n return function(x) {\n var i = bisect(domain, x, 1, j) - 1;\n return r[i](d[i](x));\n };\n}\n\nexport function copy(source, target) {\n return target\n .domain(source.domain())\n .range(source.range())\n .interpolate(source.interpolate())\n .clamp(source.clamp());\n}\n\n// deinterpolate(a, b)(x) takes a domain value x in [a,b] and returns the corresponding parameter t in [0,1].\n// reinterpolate(a, b)(t) takes a parameter t in [0,1] and returns the corresponding domain value x in [a,b].\nexport default function continuous(deinterpolate, reinterpolate) {\n var domain = unit,\n range = unit,\n interpolate = interpolateValue,\n clamp = false,\n piecewise,\n output,\n input;\n\n function rescale() {\n piecewise = Math.min(domain.length, range.length) > 2 ? polymap : bimap;\n output = input = null;\n return scale;\n }\n\n function scale(x) {\n return (output || (output = piecewise(domain, range, clamp ? deinterpolateClamp(deinterpolate) : deinterpolate, interpolate)))(+x);\n }\n\n scale.invert = function(y) {\n return (input || (input = piecewise(range, domain, deinterpolateLinear, clamp ? reinterpolateClamp(reinterpolate) : reinterpolate)))(+y);\n };\n\n scale.domain = function(_) {\n return arguments.length ? (domain = map.call(_, number), rescale()) : domain.slice();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = slice.call(_), rescale()) : range.slice();\n };\n\n scale.rangeRound = function(_) {\n return range = slice.call(_), interpolate = interpolateRound, rescale();\n };\n\n scale.clamp = function(_) {\n return arguments.length ? (clamp = !!_, rescale()) : clamp;\n };\n\n scale.interpolate = function(_) {\n return arguments.length ? (interpolate = _, rescale()) : interpolate;\n };\n\n return rescale();\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].\nexport default function(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","import formatDecimal from \"./formatDecimal\";\n\nexport default function(x) {\n return x = formatDecimal(Math.abs(x)), x ? x[1] : NaN;\n}\n","// [[fill]align][sign][symbol][0][width][,][.precision][~][type]\nvar re = /^(?:(.)?([<>=^]))?([+\\-( ])?([$#])?(0)?(\\d+)?(,)?(\\.\\d+)?(~)?([a-z%])?$/i;\n\nexport default function formatSpecifier(specifier) {\n return new FormatSpecifier(specifier);\n}\n\nformatSpecifier.prototype = FormatSpecifier.prototype; // instanceof\n\nfunction FormatSpecifier(specifier) {\n if (!(match = re.exec(specifier))) throw new Error(\"invalid format: \" + specifier);\n var match;\n this.fill = match[1] || \" \";\n this.align = match[2] || \">\";\n this.sign = match[3] || \"-\";\n this.symbol = match[4] || \"\";\n this.zero = !!match[5];\n this.width = match[6] && +match[6];\n this.comma = !!match[7];\n this.precision = match[8] && +match[8].slice(1);\n this.trim = !!match[9];\n this.type = match[10] || \"\";\n}\n\nFormatSpecifier.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.trim ? \"~\" : \"\")\n + this.type;\n};\n","// Trims insignificant zeros, e.g., replaces 1.2000k with 1.2k.\nexport default function(s) {\n out: for (var n = s.length, i = 1, i0 = -1, i1; i < n; ++i) {\n switch (s[i]) {\n case \".\": i0 = i1 = i; break;\n case \"0\": if (i0 === 0) i0 = i; i1 = i; break;\n default: if (i0 > 0) { if (!+s[i]) break out; i0 = 0; } break;\n }\n }\n return i0 > 0 ? s.slice(0, i0) + s.slice(i1 + 1) : s;\n}\n","import formatDecimal from \"./formatDecimal\";\n\nexport var prefixExponent;\n\nexport default function(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, Math.max(0, p + i - 1))[0]; // less than 1y!\n}\n","import formatLocale from \"./locale\";\n\nvar locale;\nexport var format;\nexport var formatPrefix;\n\ndefaultLocale({\n decimal: \".\",\n thousands: \",\",\n grouping: [3],\n currency: [\"$\", \"\"]\n});\n\nexport default function defaultLocale(definition) {\n locale = formatLocale(definition);\n format = locale.format;\n formatPrefix = locale.formatPrefix;\n return locale;\n}\n","import formatDecimal from \"./formatDecimal\";\n\nexport default function(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","import formatPrefixAuto from \"./formatPrefixAuto\";\nimport formatRounded from \"./formatRounded\";\n\nexport default {\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","export default function(x) {\n return x;\n}\n","import exponent from \"./exponent\";\nimport formatGroup from \"./formatGroup\";\nimport formatNumerals from \"./formatNumerals\";\nimport formatSpecifier from \"./formatSpecifier\";\nimport formatTrim from \"./formatTrim\";\nimport formatTypes from \"./formatTypes\";\nimport {prefixExponent} from \"./formatPrefixAuto\";\nimport identity from \"./identity\";\n\nvar prefixes = [\"y\",\"z\",\"a\",\"f\",\"p\",\"n\",\"µ\",\"m\",\"\",\"k\",\"M\",\"G\",\"T\",\"P\",\"E\",\"Z\",\"Y\"];\n\nexport default function(locale) {\n var group = locale.grouping && locale.thousands ? formatGroup(locale.grouping, locale.thousands) : identity,\n currency = locale.currency,\n decimal = locale.decimal,\n numerals = locale.numerals ? formatNumerals(locale.numerals) : identity,\n percent = locale.percent || \"%\";\n\n function newFormat(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 trim = specifier.trim,\n type = specifier.type;\n\n // The \"n\" type is an alias for \",g\".\n if (type === \"n\") comma = true, type = \"g\";\n\n // The \"\" type, and any invalid type, is an alias for \".12~g\".\n else if (!formatTypes[type]) precision == null && (precision = 12), trim = true, type = \"g\";\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 // 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) ? percent : \"\";\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 = /[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 ? 6\n : /[gprs]/.test(type) ? Math.max(1, Math.min(21, precision))\n : Math.max(0, Math.min(20, precision));\n\n function format(value) {\n var valuePrefix = prefix,\n valueSuffix = suffix,\n i, n, c;\n\n if (type === \"c\") {\n valueSuffix = formatType(value) + valueSuffix;\n value = \"\";\n } else {\n value = +value;\n\n // Perform the initial formatting.\n var valueNegative = value < 0;\n value = formatType(Math.abs(value), precision);\n\n // Trim insignificant zeros.\n if (trim) value = formatTrim(value);\n\n // If a negative value rounds to zero during formatting, treat as positive.\n if (valueNegative && +value === 0) valueNegative = false;\n\n // Compute the prefix and suffix.\n valuePrefix = (valueNegative ? (sign === \"(\" ? sign : \"-\") : sign === \"-\" || sign === \"(\" ? \"\" : sign) + valuePrefix;\n valueSuffix = (type === \"s\" ? prefixes[8 + prefixExponent / 3] : \"\") + valueSuffix + (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 i = -1, n = value.length;\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 \"<\": value = valuePrefix + value + valueSuffix + padding; break;\n case \"=\": value = valuePrefix + padding + value + valueSuffix; break;\n case \"^\": value = padding.slice(0, length = padding.length >> 1) + valuePrefix + value + valueSuffix + padding.slice(length); break;\n default: value = padding + valuePrefix + value + valueSuffix; break;\n }\n\n return numerals(value);\n }\n\n format.toString = function() {\n return specifier + \"\";\n };\n\n return format;\n }\n\n function formatPrefix(specifier, value) {\n var f = newFormat((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: newFormat,\n formatPrefix: formatPrefix\n };\n}\n","export default function(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","export default function(numerals) {\n return function(value) {\n return value.replace(/[0-9]/g, function(i) {\n return numerals[+i];\n });\n };\n}\n","import exponent from \"./exponent\";\n\nexport default function(step) {\n return Math.max(0, -exponent(Math.abs(step)));\n}\n","import {tickStep} from \"d3-array\";\nimport {format, formatPrefix, formatSpecifier, precisionFixed, precisionPrefix, precisionRound} from \"d3-format\";\n\nexport default function(domain, count, specifier) {\n var start = domain[0],\n stop = domain[domain.length - 1],\n step = tickStep(start, stop, count == null ? 10 : count),\n precision;\n specifier = formatSpecifier(specifier == null ? \",f\" : specifier);\n switch (specifier.type) {\n case \"s\": {\n var value = Math.max(Math.abs(start), Math.abs(stop));\n if (specifier.precision == null && !isNaN(precision = precisionPrefix(step, value))) specifier.precision = precision;\n return formatPrefix(specifier, value);\n }\n case \"\":\n case \"e\":\n case \"g\":\n case \"p\":\n case \"r\": {\n if (specifier.precision == null && !isNaN(precision = precisionRound(step, Math.max(Math.abs(start), Math.abs(stop))))) specifier.precision = precision - (specifier.type === \"e\");\n break;\n }\n case \"f\":\n case \"%\": {\n if (specifier.precision == null && !isNaN(precision = precisionFixed(step))) specifier.precision = precision - (specifier.type === \"%\") * 2;\n break;\n }\n }\n return format(specifier);\n}\n","import exponent from \"./exponent\";\n\nexport default function(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","import exponent from \"./exponent\";\n\nexport default function(step, max) {\n step = Math.abs(step), max = Math.abs(max) - step;\n return Math.max(0, exponent(max) - exponent(step)) + 1;\n}\n","import {ticks, tickIncrement} from \"d3-array\";\nimport {interpolateNumber as reinterpolate} from \"d3-interpolate\";\nimport {default as continuous, copy, deinterpolateLinear as deinterpolate} from \"./continuous\";\nimport tickFormat from \"./tickFormat\";\n\nexport function linearish(scale) {\n var domain = scale.domain;\n\n scale.ticks = function(count) {\n var d = domain();\n return ticks(d[0], d[d.length - 1], count == null ? 10 : count);\n };\n\n scale.tickFormat = function(count, specifier) {\n return tickFormat(domain(), count, specifier);\n };\n\n scale.nice = function(count) {\n if (count == null) count = 10;\n\n var d = domain(),\n i0 = 0,\n i1 = d.length - 1,\n start = d[i0],\n stop = d[i1],\n step;\n\n if (stop < start) {\n step = start, start = stop, stop = step;\n step = i0, i0 = i1, i1 = step;\n }\n\n step = tickIncrement(start, stop, count);\n\n if (step > 0) {\n start = Math.floor(start / step) * step;\n stop = Math.ceil(stop / step) * step;\n step = tickIncrement(start, stop, count);\n } else if (step < 0) {\n start = Math.ceil(start * step) / step;\n stop = Math.floor(stop * step) / step;\n step = tickIncrement(start, stop, count);\n }\n\n if (step > 0) {\n d[i0] = Math.floor(start / step) * step;\n d[i1] = Math.ceil(stop / step) * step;\n domain(d);\n } else if (step < 0) {\n d[i0] = Math.ceil(start * step) / step;\n d[i1] = Math.floor(stop * step) / step;\n domain(d);\n }\n\n return scale;\n };\n\n return scale;\n}\n\nexport default function linear() {\n var scale = continuous(deinterpolate, reinterpolate);\n\n scale.copy = function() {\n return copy(scale, linear());\n };\n\n return linearish(scale);\n}\n","import {map} from \"./array\";\nimport {linearish} from \"./linear\";\nimport number from \"./number\";\n\nexport default function identity() {\n var domain = [0, 1];\n\n function scale(x) {\n return +x;\n }\n\n scale.invert = scale;\n\n scale.domain = scale.range = function(_) {\n return arguments.length ? (domain = map.call(_, number), scale) : domain.slice();\n };\n\n scale.copy = function() {\n return identity().domain(domain);\n };\n\n return linearish(scale);\n}\n","export default function(domain, interval) {\n domain = domain.slice();\n\n var i0 = 0,\n i1 = domain.length - 1,\n x0 = domain[i0],\n x1 = domain[i1],\n t;\n\n if (x1 < x0) {\n t = i0, i0 = i1, i1 = t;\n t = x0, x0 = x1, x1 = t;\n }\n\n domain[i0] = interval.floor(x0);\n domain[i1] = interval.ceil(x1);\n return domain;\n}\n","import {ticks} from \"d3-array\";\nimport {format} from \"d3-format\";\nimport constant from \"./constant\";\nimport nice from \"./nice\";\nimport {default as continuous, copy} from \"./continuous\";\n\nfunction deinterpolate(a, b) {\n return (b = Math.log(b / a))\n ? function(x) { return Math.log(x / a) / b; }\n : constant(b);\n}\n\nfunction reinterpolate(a, b) {\n return a < 0\n ? function(t) { return -Math.pow(-b, t) * Math.pow(-a, 1 - t); }\n : function(t) { return Math.pow(b, t) * Math.pow(a, 1 - t); };\n}\n\nfunction pow10(x) {\n return isFinite(x) ? +(\"1e\" + x) : x < 0 ? 0 : x;\n}\n\nfunction powp(base) {\n return base === 10 ? pow10\n : base === Math.E ? Math.exp\n : function(x) { return Math.pow(base, x); };\n}\n\nfunction logp(base) {\n return base === Math.E ? Math.log\n : base === 10 && Math.log10\n || base === 2 && Math.log2\n || (base = Math.log(base), function(x) { return Math.log(x) / base; });\n}\n\nfunction reflect(f) {\n return function(x) {\n return -f(-x);\n };\n}\n\nexport default function log() {\n var scale = continuous(deinterpolate, reinterpolate).domain([1, 10]),\n domain = scale.domain,\n base = 10,\n logs = logp(10),\n pows = powp(10);\n\n function rescale() {\n logs = logp(base), pows = powp(base);\n if (domain()[0] < 0) logs = reflect(logs), pows = reflect(pows);\n return scale;\n }\n\n scale.base = function(_) {\n return arguments.length ? (base = +_, rescale()) : base;\n };\n\n scale.domain = function(_) {\n return arguments.length ? (domain(_), rescale()) : domain();\n };\n\n scale.ticks = function(count) {\n var d = domain(),\n u = d[0],\n v = d[d.length - 1],\n r;\n\n if (r = v < u) i = u, u = v, v = i;\n\n var i = logs(u),\n j = logs(v),\n p,\n k,\n t,\n n = count == null ? 10 : +count,\n z = [];\n\n if (!(base % 1) && j - i < n) {\n i = Math.round(i) - 1, j = Math.round(j) + 1;\n if (u > 0) for (; i < j; ++i) {\n for (k = 1, p = pows(i); k < base; ++k) {\n t = p * k;\n if (t < u) continue;\n if (t > v) break;\n z.push(t);\n }\n } else for (; i < j; ++i) {\n for (k = base - 1, p = pows(i); k >= 1; --k) {\n t = p * k;\n if (t < u) continue;\n if (t > v) break;\n z.push(t);\n }\n }\n } else {\n z = ticks(i, j, Math.min(j - i, n)).map(pows);\n }\n\n return r ? z.reverse() : z;\n };\n\n scale.tickFormat = function(count, specifier) {\n if (specifier == null) specifier = base === 10 ? \".0e\" : \",\";\n if (typeof specifier !== \"function\") specifier = format(specifier);\n if (count === Infinity) return specifier;\n if (count == null) count = 10;\n var k = Math.max(1, base * count / scale.ticks().length); // TODO fast estimate?\n return function(d) {\n var i = d / pows(Math.round(logs(d)));\n if (i * base < base - 0.5) i *= base;\n return i <= k ? specifier(d) : \"\";\n };\n };\n\n scale.nice = function() {\n return domain(nice(domain(), {\n floor: function(x) { return pows(Math.floor(logs(x))); },\n ceil: function(x) { return pows(Math.ceil(logs(x))); }\n }));\n };\n\n scale.copy = function() {\n return copy(scale, log().base(base));\n };\n\n return scale;\n}\n","import constant from \"./constant\";\nimport {linearish} from \"./linear\";\nimport {default as continuous, copy} from \"./continuous\";\n\nfunction raise(x, exponent) {\n return x < 0 ? -Math.pow(-x, exponent) : Math.pow(x, exponent);\n}\n\nexport default function pow() {\n var exponent = 1,\n scale = continuous(deinterpolate, reinterpolate),\n domain = scale.domain;\n\n function deinterpolate(a, b) {\n return (b = raise(b, exponent) - (a = raise(a, exponent)))\n ? function(x) { return (raise(x, exponent) - a) / b; }\n : constant(b);\n }\n\n function reinterpolate(a, b) {\n b = raise(b, exponent) - (a = raise(a, exponent));\n return function(t) { return raise(a + b * t, 1 / exponent); };\n }\n\n scale.exponent = function(_) {\n return arguments.length ? (exponent = +_, domain(domain())) : exponent;\n };\n\n scale.copy = function() {\n return copy(scale, pow().exponent(exponent));\n };\n\n return linearish(scale);\n}\n\nexport function sqrt() {\n return pow().exponent(0.5);\n}\n","import {ascending, bisect, quantile as threshold} from \"d3-array\";\nimport {slice} from \"./array\";\n\nexport default function quantile() {\n var domain = [],\n range = [],\n thresholds = [];\n\n function rescale() {\n var i = 0, n = Math.max(1, range.length);\n thresholds = new Array(n - 1);\n while (++i < n) thresholds[i - 1] = threshold(domain, i / n);\n return scale;\n }\n\n function scale(x) {\n if (!isNaN(x = +x)) return range[bisect(thresholds, x)];\n }\n\n scale.invertExtent = function(y) {\n var i = range.indexOf(y);\n return i < 0 ? [NaN, NaN] : [\n i > 0 ? thresholds[i - 1] : domain[0],\n i < thresholds.length ? thresholds[i] : domain[domain.length - 1]\n ];\n };\n\n scale.domain = function(_) {\n if (!arguments.length) return domain.slice();\n domain = [];\n for (var i = 0, n = _.length, d; i < n; ++i) if (d = _[i], d != null && !isNaN(d = +d)) domain.push(d);\n domain.sort(ascending);\n return rescale();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = slice.call(_), rescale()) : range.slice();\n };\n\n scale.quantiles = function() {\n return thresholds.slice();\n };\n\n scale.copy = function() {\n return quantile()\n .domain(domain)\n .range(range);\n };\n\n return scale;\n}\n","import {bisect} from \"d3-array\";\nimport {slice} from \"./array\";\nimport {linearish} from \"./linear\";\n\nexport default function quantize() {\n var x0 = 0,\n x1 = 1,\n n = 1,\n domain = [0.5],\n range = [0, 1];\n\n function scale(x) {\n if (x <= x) return range[bisect(domain, x, 0, n)];\n }\n\n function rescale() {\n var i = -1;\n domain = new Array(n);\n while (++i < n) domain[i] = ((i + 1) * x1 - (i - n) * x0) / (n + 1);\n return scale;\n }\n\n scale.domain = function(_) {\n return arguments.length ? (x0 = +_[0], x1 = +_[1], rescale()) : [x0, x1];\n };\n\n scale.range = function(_) {\n return arguments.length ? (n = (range = slice.call(_)).length - 1, rescale()) : range.slice();\n };\n\n scale.invertExtent = function(y) {\n var i = range.indexOf(y);\n return i < 0 ? [NaN, NaN]\n : i < 1 ? [x0, domain[0]]\n : i >= n ? [domain[n - 1], x1]\n : [domain[i - 1], domain[i]];\n };\n\n scale.copy = function() {\n return quantize()\n .domain([x0, x1])\n .range(range);\n };\n\n return linearish(scale);\n}\n","import {bisect} from \"d3-array\";\nimport {slice} from \"./array\";\n\nexport default function threshold() {\n var domain = [0.5],\n range = [0, 1],\n n = 1;\n\n function scale(x) {\n if (x <= x) return range[bisect(domain, x, 0, n)];\n }\n\n scale.domain = function(_) {\n return arguments.length ? (domain = slice.call(_), n = Math.min(domain.length, range.length - 1), scale) : domain.slice();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = slice.call(_), n = Math.min(domain.length, range.length - 1), scale) : range.slice();\n };\n\n scale.invertExtent = function(y) {\n var i = range.indexOf(y);\n return [domain[i - 1], domain[i]];\n };\n\n scale.copy = function() {\n return threshold()\n .domain(domain)\n .range(range);\n };\n\n return scale;\n}\n","var t0 = new Date,\n t1 = new Date;\n\nexport default function newInterval(floori, offseti, count, field) {\n\n function interval(date) {\n return floori(date = new Date(+date)), date;\n }\n\n interval.floor = interval;\n\n interval.ceil = function(date) {\n return floori(date = new Date(date - 1)), offseti(date, 1), floori(date), date;\n };\n\n interval.round = function(date) {\n var d0 = interval(date),\n d1 = interval.ceil(date);\n return date - d0 < d1 - date ? d0 : d1;\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 = [], previous;\n start = interval.ceil(start);\n step = step == null ? 1 : Math.floor(step);\n if (!(start < stop) || !(step > 0)) return range; // also handles Invalid Date\n do range.push(previous = new Date(+start)), offseti(start, step), floori(start);\n while (previous < start && start < stop);\n return range;\n };\n\n interval.filter = function(test) {\n return newInterval(function(date) {\n if (date >= date) while (floori(date), !test(date)) date.setTime(date - 1);\n }, function(date, step) {\n if (date >= date) {\n if (step < 0) while (++step <= 0) {\n while (offseti(date, -1), !test(date)) {} // eslint-disable-line no-empty\n } else while (--step >= 0) {\n while (offseti(date, +1), !test(date)) {} // eslint-disable-line no-empty\n }\n }\n });\n };\n\n if (count) {\n 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 interval.every = function(step) {\n step = Math.floor(step);\n return !isFinite(step) || !(step > 0) ? null\n : !(step > 1) ? interval\n : interval.filter(field\n ? function(d) { return field(d) % step === 0; }\n : function(d) { return interval.count(0, d) % step === 0; });\n };\n }\n\n return interval;\n}\n","import interval from \"./interval\";\n\nvar millisecond = interval(function() {\n // noop\n}, function(date, step) {\n date.setTime(+date + step);\n}, function(start, end) {\n return end - start;\n});\n\n// An optimized implementation for this simple case.\nmillisecond.every = function(k) {\n k = Math.floor(k);\n if (!isFinite(k) || !(k > 0)) return null;\n if (!(k > 1)) return millisecond;\n return interval(function(date) {\n date.setTime(Math.floor(date / k) * k);\n }, function(date, step) {\n date.setTime(+date + step * k);\n }, function(start, end) {\n return (end - start) / k;\n });\n};\n\nexport default millisecond;\nexport var milliseconds = millisecond.range;\n","export var durationSecond = 1e3;\nexport var durationMinute = 6e4;\nexport var durationHour = 36e5;\nexport var durationDay = 864e5;\nexport var durationWeek = 6048e5;\n","import interval from \"./interval\";\nimport {durationSecond} from \"./duration\";\n\nvar second = interval(function(date) {\n date.setTime(Math.floor(date / durationSecond) * durationSecond);\n}, function(date, step) {\n date.setTime(+date + step * durationSecond);\n}, function(start, end) {\n return (end - start) / durationSecond;\n}, function(date) {\n return date.getUTCSeconds();\n});\n\nexport default second;\nexport var seconds = second.range;\n","import interval from \"./interval\";\nimport {durationMinute} from \"./duration\";\n\nvar minute = interval(function(date) {\n date.setTime(Math.floor(date / durationMinute) * durationMinute);\n}, function(date, step) {\n date.setTime(+date + step * durationMinute);\n}, function(start, end) {\n return (end - start) / durationMinute;\n}, function(date) {\n return date.getMinutes();\n});\n\nexport default minute;\nexport var minutes = minute.range;\n","import interval from \"./interval\";\nimport {durationHour, durationMinute} from \"./duration\";\n\nvar hour = interval(function(date) {\n var offset = date.getTimezoneOffset() * durationMinute % durationHour;\n if (offset < 0) offset += durationHour;\n date.setTime(Math.floor((+date - offset) / durationHour) * durationHour + offset);\n}, function(date, step) {\n date.setTime(+date + step * durationHour);\n}, function(start, end) {\n return (end - start) / durationHour;\n}, function(date) {\n return date.getHours();\n});\n\nexport default hour;\nexport var hours = hour.range;\n","import interval from \"./interval\";\nimport {durationDay, durationMinute} from \"./duration\";\n\nvar day = interval(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()) * durationMinute) / durationDay;\n}, function(date) {\n return date.getDate() - 1;\n});\n\nexport default day;\nexport var days = day.range;\n","import interval from \"./interval\";\nimport {durationMinute, durationWeek} from \"./duration\";\n\nfunction weekday(i) {\n return interval(function(date) {\n date.setDate(date.getDate() - (date.getDay() + 7 - i) % 7);\n date.setHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setDate(date.getDate() + step * 7);\n }, function(start, end) {\n return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationWeek;\n });\n}\n\nexport var sunday = weekday(0);\nexport var monday = weekday(1);\nexport var tuesday = weekday(2);\nexport var wednesday = weekday(3);\nexport var thursday = weekday(4);\nexport var friday = weekday(5);\nexport var saturday = weekday(6);\n\nexport var sundays = sunday.range;\nexport var mondays = monday.range;\nexport var tuesdays = tuesday.range;\nexport var wednesdays = wednesday.range;\nexport var thursdays = thursday.range;\nexport var fridays = friday.range;\nexport var saturdays = saturday.range;\n","import interval from \"./interval\";\n\nvar month = interval(function(date) {\n date.setDate(1);\n date.setHours(0, 0, 0, 0);\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}, function(date) {\n return date.getMonth();\n});\n\nexport default month;\nexport var months = month.range;\n","import interval from \"./interval\";\n\nvar year = interval(function(date) {\n date.setMonth(0, 1);\n date.setHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setFullYear(date.getFullYear() + step);\n}, function(start, end) {\n return end.getFullYear() - start.getFullYear();\n}, function(date) {\n return date.getFullYear();\n});\n\n// An optimized implementation for this simple case.\nyear.every = function(k) {\n return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : interval(function(date) {\n date.setFullYear(Math.floor(date.getFullYear() / k) * k);\n date.setMonth(0, 1);\n date.setHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setFullYear(date.getFullYear() + step * k);\n });\n};\n\nexport default year;\nexport var years = year.range;\n","import interval from \"./interval\";\nimport {durationMinute} from \"./duration\";\n\nvar utcMinute = interval(function(date) {\n date.setUTCSeconds(0, 0);\n}, function(date, step) {\n date.setTime(+date + step * durationMinute);\n}, function(start, end) {\n return (end - start) / durationMinute;\n}, function(date) {\n return date.getUTCMinutes();\n});\n\nexport default utcMinute;\nexport var utcMinutes = utcMinute.range;\n","import interval from \"./interval\";\nimport {durationHour} from \"./duration\";\n\nvar utcHour = interval(function(date) {\n date.setUTCMinutes(0, 0, 0);\n}, function(date, step) {\n date.setTime(+date + step * durationHour);\n}, function(start, end) {\n return (end - start) / durationHour;\n}, function(date) {\n return date.getUTCHours();\n});\n\nexport default utcHour;\nexport var utcHours = utcHour.range;\n","import interval from \"./interval\";\nimport {durationDay} from \"./duration\";\n\nvar utcDay = interval(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) / durationDay;\n}, function(date) {\n return date.getUTCDate() - 1;\n});\n\nexport default utcDay;\nexport var utcDays = utcDay.range;\n","import interval from \"./interval\";\nimport {durationWeek} from \"./duration\";\n\nfunction utcWeekday(i) {\n return interval(function(date) {\n date.setUTCDate(date.getUTCDate() - (date.getUTCDay() + 7 - i) % 7);\n date.setUTCHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setUTCDate(date.getUTCDate() + step * 7);\n }, function(start, end) {\n return (end - start) / durationWeek;\n });\n}\n\nexport var utcSunday = utcWeekday(0);\nexport var utcMonday = utcWeekday(1);\nexport var utcTuesday = utcWeekday(2);\nexport var utcWednesday = utcWeekday(3);\nexport var utcThursday = utcWeekday(4);\nexport var utcFriday = utcWeekday(5);\nexport var utcSaturday = utcWeekday(6);\n\nexport var utcSundays = utcSunday.range;\nexport var utcMondays = utcMonday.range;\nexport var utcTuesdays = utcTuesday.range;\nexport var utcWednesdays = utcWednesday.range;\nexport var utcThursdays = utcThursday.range;\nexport var utcFridays = utcFriday.range;\nexport var utcSaturdays = utcSaturday.range;\n","import interval from \"./interval\";\n\nvar utcMonth = interval(function(date) {\n date.setUTCDate(1);\n date.setUTCHours(0, 0, 0, 0);\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}, function(date) {\n return date.getUTCMonth();\n});\n\nexport default utcMonth;\nexport var utcMonths = utcMonth.range;\n","import interval from \"./interval\";\n\nvar utcYear = interval(function(date) {\n date.setUTCMonth(0, 1);\n date.setUTCHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setUTCFullYear(date.getUTCFullYear() + step);\n}, function(start, end) {\n return end.getUTCFullYear() - start.getUTCFullYear();\n}, function(date) {\n return date.getUTCFullYear();\n});\n\n// An optimized implementation for this simple case.\nutcYear.every = function(k) {\n return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : interval(function(date) {\n date.setUTCFullYear(Math.floor(date.getUTCFullYear() / k) * k);\n date.setUTCMonth(0, 1);\n date.setUTCHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setUTCFullYear(date.getUTCFullYear() + step * k);\n });\n};\n\nexport default utcYear;\nexport var utcYears = utcYear.range;\n","import {\n timeDay,\n timeSunday,\n timeMonday,\n timeThursday,\n timeYear,\n utcDay,\n utcSunday,\n utcMonday,\n utcThursday,\n utcYear\n} from \"d3-time\";\n\nfunction 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\nfunction 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\nfunction newYear(y) {\n return {y: y, m: 0, d: 1, H: 0, M: 0, S: 0, L: 0};\n}\n\nexport default function formatLocale(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 periodRe = formatRe(locale_periods),\n 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 \"f\": formatMicroseconds,\n \"H\": formatHour24,\n \"I\": formatHour12,\n \"j\": formatDayOfYear,\n \"L\": formatMilliseconds,\n \"m\": formatMonthNumber,\n \"M\": formatMinutes,\n \"p\": formatPeriod,\n \"Q\": formatUnixTimestamp,\n \"s\": formatUnixTimestampSeconds,\n \"S\": formatSeconds,\n \"u\": formatWeekdayNumberMonday,\n \"U\": formatWeekNumberSunday,\n \"V\": formatWeekNumberISO,\n \"w\": formatWeekdayNumberSunday,\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 \"f\": formatUTCMicroseconds,\n \"H\": formatUTCHour24,\n \"I\": formatUTCHour12,\n \"j\": formatUTCDayOfYear,\n \"L\": formatUTCMilliseconds,\n \"m\": formatUTCMonthNumber,\n \"M\": formatUTCMinutes,\n \"p\": formatUTCPeriod,\n \"Q\": formatUnixTimestamp,\n \"s\": formatUnixTimestampSeconds,\n \"S\": formatUTCSeconds,\n \"u\": formatUTCWeekdayNumberMonday,\n \"U\": formatUTCWeekNumberSunday,\n \"V\": formatUTCWeekNumberISO,\n \"w\": formatUTCWeekdayNumberSunday,\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 \"f\": parseMicroseconds,\n \"H\": parseHour24,\n \"I\": parseHour24,\n \"j\": parseDayOfYear,\n \"L\": parseMilliseconds,\n \"m\": parseMonthNumber,\n \"M\": parseMinutes,\n \"p\": parsePeriod,\n \"Q\": parseUnixTimestamp,\n \"s\": parseUnixTimestampSeconds,\n \"S\": parseSeconds,\n \"u\": parseWeekdayNumberMonday,\n \"U\": parseWeekNumberSunday,\n \"V\": parseWeekNumberISO,\n \"w\": parseWeekdayNumberSunday,\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 if (!(date instanceof Date)) date = new Date(+date);\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 else pad = c === \"e\" ? \" \" : \"0\";\n if (format = formats[c]) c = format(date, 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 week, day;\n if (i != string.length) return null;\n\n // If a UNIX timestamp is specified, return it.\n if (\"Q\" in d) return new Date(d.Q);\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 // Convert day-of-week and week-of-year to day-of-year.\n if (\"V\" in d) {\n if (d.V < 1 || d.V > 53) return null;\n if (!(\"w\" in d)) d.w = 1;\n if (\"Z\" in d) {\n week = utcDate(newYear(d.y)), day = week.getUTCDay();\n week = day > 4 || day === 0 ? utcMonday.ceil(week) : utcMonday(week);\n week = utcDay.offset(week, (d.V - 1) * 7);\n d.y = week.getUTCFullYear();\n d.m = week.getUTCMonth();\n d.d = week.getUTCDate() + (d.w + 6) % 7;\n } else {\n week = newDate(newYear(d.y)), day = week.getDay();\n week = day > 4 || day === 0 ? timeMonday.ceil(week) : timeMonday(week);\n week = timeDay.offset(week, (d.V - 1) * 7);\n d.y = week.getFullYear();\n d.m = week.getMonth();\n d.d = week.getDate() + (d.w + 6) % 7;\n }\n } else if (\"W\" in d || \"U\" in d) {\n if (!(\"w\" in d)) d.w = \"u\" in d ? d.u % 7 : \"W\" in d ? 1 : 0;\n day = \"Z\" in d ? utcDate(newYear(d.y)).getUTCDay() : newDate(newYear(d.y)).getDay();\n d.m = 0;\n d.d = \"W\" in d ? (d.w + 6) % 7 + d.W * 7 - (day + 5) % 7 : d.w + d.U * 7 - (day + 6) % 7;\n }\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 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 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 parsePeriod(d, string, i) {\n var n = periodRe.exec(string.slice(i));\n return n ? (d.p = periodLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n }\n\n function parseShortWeekday(d, string, i) {\n var n = shortWeekdayRe.exec(string.slice(i));\n return n ? (d.w = shortWeekdayLookup[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[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[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[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 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.toString = function() { return specifier; };\n return f;\n },\n parse: function(specifier) {\n var p = newParse(specifier += \"\", localDate);\n p.toString = function() { return specifier; };\n return p;\n },\n utcFormat: function(specifier) {\n var f = newFormat(specifier += \"\", utcFormats);\n f.toString = function() { return specifier; };\n return f;\n },\n utcParse: function(specifier) {\n var p = newParse(specifier, utcDate);\n p.toString = function() { return specifier; };\n return p;\n }\n };\n}\n\nvar pads = {\"-\": \"\", \"_\": \" \", \"0\": \"0\"},\n numberRe = /^\\s*\\d+/, // note: ignores next directive\n percentRe = /^%/,\n requoteRe = /[\\\\^$*+?|[\\]().{}]/g;\n\nfunction 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\nfunction requote(s) {\n return s.replace(requoteRe, \"\\\\$&\");\n}\n\nfunction formatRe(names) {\n return new RegExp(\"^(?:\" + names.map(requote).join(\"|\") + \")\", \"i\");\n}\n\nfunction formatLookup(names) {\n var map = {}, i = -1, n = names.length;\n while (++i < n) map[names[i].toLowerCase()] = i;\n return map;\n}\n\nfunction parseWeekdayNumberSunday(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\nfunction parseWeekdayNumberMonday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 1));\n return n ? (d.u = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberSunday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.U = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberISO(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.V = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberMonday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.W = +n[0], i + n[0].length) : -1;\n}\n\nfunction 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\nfunction 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\nfunction parseZone(d, string, i) {\n var n = /^(Z)|([+-]\\d\\d)(?::?(\\d\\d))?/.exec(string.slice(i, i + 6));\n return n ? (d.Z = n[1] ? 0 : -(n[2] + (n[3] || \"00\")), i + n[0].length) : -1;\n}\n\nfunction 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\nfunction 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\nfunction 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\nfunction 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\nfunction 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\nfunction 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\nfunction 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\nfunction parseMicroseconds(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 6));\n return n ? (d.L = Math.floor(n[0] / 1000), i + n[0].length) : -1;\n}\n\nfunction parseLiteralPercent(d, string, i) {\n var n = percentRe.exec(string.slice(i, i + 1));\n return n ? i + n[0].length : -1;\n}\n\nfunction parseUnixTimestamp(d, string, i) {\n var n = numberRe.exec(string.slice(i));\n return n ? (d.Q = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseUnixTimestampSeconds(d, string, i) {\n var n = numberRe.exec(string.slice(i));\n return n ? (d.Q = (+n[0]) * 1000, i + n[0].length) : -1;\n}\n\nfunction formatDayOfMonth(d, p) {\n return pad(d.getDate(), p, 2);\n}\n\nfunction formatHour24(d, p) {\n return pad(d.getHours(), p, 2);\n}\n\nfunction formatHour12(d, p) {\n return pad(d.getHours() % 12 || 12, p, 2);\n}\n\nfunction formatDayOfYear(d, p) {\n return pad(1 + timeDay.count(timeYear(d), d), p, 3);\n}\n\nfunction formatMilliseconds(d, p) {\n return pad(d.getMilliseconds(), p, 3);\n}\n\nfunction formatMicroseconds(d, p) {\n return formatMilliseconds(d, p) + \"000\";\n}\n\nfunction formatMonthNumber(d, p) {\n return pad(d.getMonth() + 1, p, 2);\n}\n\nfunction formatMinutes(d, p) {\n return pad(d.getMinutes(), p, 2);\n}\n\nfunction formatSeconds(d, p) {\n return pad(d.getSeconds(), p, 2);\n}\n\nfunction formatWeekdayNumberMonday(d) {\n var day = d.getDay();\n return day === 0 ? 7 : day;\n}\n\nfunction formatWeekNumberSunday(d, p) {\n return pad(timeSunday.count(timeYear(d), d), p, 2);\n}\n\nfunction formatWeekNumberISO(d, p) {\n var day = d.getDay();\n d = (day >= 4 || day === 0) ? timeThursday(d) : timeThursday.ceil(d);\n return pad(timeThursday.count(timeYear(d), d) + (timeYear(d).getDay() === 4), p, 2);\n}\n\nfunction formatWeekdayNumberSunday(d) {\n return d.getDay();\n}\n\nfunction formatWeekNumberMonday(d, p) {\n return pad(timeMonday.count(timeYear(d), d), p, 2);\n}\n\nfunction formatYear(d, p) {\n return pad(d.getFullYear() % 100, p, 2);\n}\n\nfunction formatFullYear(d, p) {\n return pad(d.getFullYear() % 10000, p, 4);\n}\n\nfunction 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\nfunction formatUTCDayOfMonth(d, p) {\n return pad(d.getUTCDate(), p, 2);\n}\n\nfunction formatUTCHour24(d, p) {\n return pad(d.getUTCHours(), p, 2);\n}\n\nfunction formatUTCHour12(d, p) {\n return pad(d.getUTCHours() % 12 || 12, p, 2);\n}\n\nfunction formatUTCDayOfYear(d, p) {\n return pad(1 + utcDay.count(utcYear(d), d), p, 3);\n}\n\nfunction formatUTCMilliseconds(d, p) {\n return pad(d.getUTCMilliseconds(), p, 3);\n}\n\nfunction formatUTCMicroseconds(d, p) {\n return formatUTCMilliseconds(d, p) + \"000\";\n}\n\nfunction formatUTCMonthNumber(d, p) {\n return pad(d.getUTCMonth() + 1, p, 2);\n}\n\nfunction formatUTCMinutes(d, p) {\n return pad(d.getUTCMinutes(), p, 2);\n}\n\nfunction formatUTCSeconds(d, p) {\n return pad(d.getUTCSeconds(), p, 2);\n}\n\nfunction formatUTCWeekdayNumberMonday(d) {\n var dow = d.getUTCDay();\n return dow === 0 ? 7 : dow;\n}\n\nfunction formatUTCWeekNumberSunday(d, p) {\n return pad(utcSunday.count(utcYear(d), d), p, 2);\n}\n\nfunction formatUTCWeekNumberISO(d, p) {\n var day = d.getUTCDay();\n d = (day >= 4 || day === 0) ? utcThursday(d) : utcThursday.ceil(d);\n return pad(utcThursday.count(utcYear(d), d) + (utcYear(d).getUTCDay() === 4), p, 2);\n}\n\nfunction formatUTCWeekdayNumberSunday(d) {\n return d.getUTCDay();\n}\n\nfunction formatUTCWeekNumberMonday(d, p) {\n return pad(utcMonday.count(utcYear(d), d), p, 2);\n}\n\nfunction formatUTCYear(d, p) {\n return pad(d.getUTCFullYear() % 100, p, 2);\n}\n\nfunction formatUTCFullYear(d, p) {\n return pad(d.getUTCFullYear() % 10000, p, 4);\n}\n\nfunction formatUTCZone() {\n return \"+0000\";\n}\n\nfunction formatLiteralPercent() {\n return \"%\";\n}\n\nfunction formatUnixTimestamp(d) {\n return +d;\n}\n\nfunction formatUnixTimestampSeconds(d) {\n return Math.floor(+d / 1000);\n}\n","import formatLocale from \"./locale\";\n\nvar locale;\nexport var timeFormat;\nexport var timeParse;\nexport var utcFormat;\nexport var utcParse;\n\ndefaultLocale({\n dateTime: \"%x, %X\",\n date: \"%-m/%-d/%Y\",\n time: \"%-I:%M:%S %p\",\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\nexport default function defaultLocale(definition) {\n locale = formatLocale(definition);\n timeFormat = locale.format;\n timeParse = locale.parse;\n utcFormat = locale.utcFormat;\n utcParse = locale.utcParse;\n return locale;\n}\n","import {utcFormat} from \"./defaultLocale\";\n\nexport var isoSpecifier = \"%Y-%m-%dT%H:%M:%S.%LZ\";\n\nfunction formatIsoNative(date) {\n return date.toISOString();\n}\n\nvar formatIso = Date.prototype.toISOString\n ? formatIsoNative\n : utcFormat(isoSpecifier);\n\nexport default formatIso;\n","import {isoSpecifier} from \"./isoFormat\";\nimport {utcParse} from \"./defaultLocale\";\n\nfunction parseIsoNative(string) {\n var date = new Date(string);\n return isNaN(date) ? null : date;\n}\n\nvar parseIso = +new Date(\"2000-01-01T00:00:00.000Z\")\n ? parseIsoNative\n : utcParse(isoSpecifier);\n\nexport default parseIso;\n","import {bisector, tickStep} from \"d3-array\";\nimport {interpolateNumber as reinterpolate} from \"d3-interpolate\";\nimport {timeYear, timeMonth, timeWeek, timeDay, timeHour, timeMinute, timeSecond, timeMillisecond} from \"d3-time\";\nimport {timeFormat} from \"d3-time-format\";\nimport {map} from \"./array\";\nimport {default as continuous, copy, deinterpolateLinear as deinterpolate} from \"./continuous\";\nimport nice from \"./nice\";\n\nvar durationSecond = 1000,\n durationMinute = durationSecond * 60,\n durationHour = durationMinute * 60,\n durationDay = durationHour * 24,\n durationWeek = durationDay * 7,\n durationMonth = durationDay * 30,\n durationYear = durationDay * 365;\n\nfunction date(t) {\n return new Date(t);\n}\n\nfunction number(t) {\n return t instanceof Date ? +t : +new Date(+t);\n}\n\nexport function calendar(year, month, week, day, hour, minute, second, millisecond, format) {\n var scale = continuous(deinterpolate, reinterpolate),\n invert = scale.invert,\n domain = scale.domain;\n\n var formatMillisecond = format(\".%L\"),\n formatSecond = format(\":%S\"),\n formatMinute = format(\"%I:%M\"),\n formatHour = format(\"%I %p\"),\n formatDay = format(\"%a %d\"),\n formatWeek = format(\"%b %d\"),\n formatMonth = format(\"%B\"),\n formatYear = format(\"%Y\");\n\n var tickIntervals = [\n [second, 1, durationSecond],\n [second, 5, 5 * durationSecond],\n [second, 15, 15 * durationSecond],\n [second, 30, 30 * durationSecond],\n [minute, 1, durationMinute],\n [minute, 5, 5 * durationMinute],\n [minute, 15, 15 * durationMinute],\n [minute, 30, 30 * durationMinute],\n [ hour, 1, durationHour ],\n [ hour, 3, 3 * durationHour ],\n [ hour, 6, 6 * durationHour ],\n [ hour, 12, 12 * durationHour ],\n [ day, 1, durationDay ],\n [ day, 2, 2 * durationDay ],\n [ week, 1, durationWeek ],\n [ month, 1, durationMonth ],\n [ month, 3, 3 * durationMonth ],\n [ year, 1, durationYear ]\n ];\n\n function tickFormat(date) {\n return (second(date) < date ? formatMillisecond\n : minute(date) < date ? formatSecond\n : hour(date) < date ? formatMinute\n : day(date) < date ? formatHour\n : month(date) < date ? (week(date) < date ? formatDay : formatWeek)\n : year(date) < date ? formatMonth\n : formatYear)(date);\n }\n\n function tickInterval(interval, start, stop, step) {\n if (interval == null) interval = 10;\n\n // If a desired tick count is specified, pick a reasonable tick interval\n // based on the extent of the domain and a rough estimate of tick size.\n // Otherwise, assume interval is already a time interval and use it.\n if (typeof interval === \"number\") {\n var target = Math.abs(stop - start) / interval,\n i = bisector(function(i) { return i[2]; }).right(tickIntervals, target);\n if (i === tickIntervals.length) {\n step = tickStep(start / durationYear, stop / durationYear, interval);\n interval = year;\n } else if (i) {\n i = tickIntervals[target / tickIntervals[i - 1][2] < tickIntervals[i][2] / target ? i - 1 : i];\n step = i[1];\n interval = i[0];\n } else {\n step = Math.max(tickStep(start, stop, interval), 1);\n interval = millisecond;\n }\n }\n\n return step == null ? interval : interval.every(step);\n }\n\n scale.invert = function(y) {\n return new Date(invert(y));\n };\n\n scale.domain = function(_) {\n return arguments.length ? domain(map.call(_, number)) : domain().map(date);\n };\n\n scale.ticks = function(interval, step) {\n var d = domain(),\n t0 = d[0],\n t1 = d[d.length - 1],\n r = t1 < t0,\n t;\n if (r) t = t0, t0 = t1, t1 = t;\n t = tickInterval(interval, t0, t1, step);\n t = t ? t.range(t0, t1 + 1) : []; // inclusive stop\n return r ? t.reverse() : t;\n };\n\n scale.tickFormat = function(count, specifier) {\n return specifier == null ? tickFormat : format(specifier);\n };\n\n scale.nice = function(interval, step) {\n var d = domain();\n return (interval = tickInterval(interval, d[0], d[d.length - 1], step))\n ? domain(nice(d, interval))\n : scale;\n };\n\n scale.copy = function() {\n return copy(scale, calendar(year, month, week, day, hour, minute, second, millisecond, format));\n };\n\n return scale;\n}\n\nexport default function() {\n return calendar(timeYear, timeMonth, timeWeek, timeDay, timeHour, timeMinute, timeSecond, timeMillisecond, timeFormat).domain([new Date(2000, 0, 1), new Date(2000, 0, 2)]);\n}\n","export default function(s) {\n return s.match(/.{6}/g).map(function(x) {\n return \"#\" + x;\n });\n}\n","import colors from \"./colors\";\n\nexport default colors(\"1f77b4ff7f0e2ca02cd627289467bd8c564be377c27f7f7fbcbd2217becf\");\n","import colors from \"./colors\";\n\nexport default colors(\"393b795254a36b6ecf9c9ede6379398ca252b5cf6bcedb9c8c6d31bd9e39e7ba52e7cb94843c39ad494ad6616be7969c7b4173a55194ce6dbdde9ed6\");\n","import colors from \"./colors\";\n\nexport default colors(\"1f77b4aec7e8ff7f0effbb782ca02c98df8ad62728ff98969467bdc5b0d58c564bc49c94e377c2f7b6d27f7f7fc7c7c7bcbd22dbdb8d17becf9edae5\");\n","import colors from \"./colors\";\n\nexport default colors(\"3182bd6baed69ecae1c6dbefe6550dfd8d3cfdae6bfdd0a231a35474c476a1d99bc7e9c0756bb19e9ac8bcbddcdadaeb636363969696bdbdbdd9d9d9\");\n","import {cubehelix} from \"d3-color\";\nimport {interpolateCubehelixLong} from \"d3-interpolate\";\n\nexport default interpolateCubehelixLong(cubehelix(300, 0.5, 0.0), cubehelix(-240, 0.5, 1.0));\n","import {cubehelix} from \"d3-color\";\nimport {interpolateCubehelixLong} from \"d3-interpolate\";\n\nexport var warm = interpolateCubehelixLong(cubehelix(-100, 0.75, 0.35), cubehelix(80, 1.50, 0.8));\n\nexport var cool = interpolateCubehelixLong(cubehelix(260, 0.75, 0.35), cubehelix(80, 1.50, 0.8));\n\nvar rainbow = cubehelix();\n\nexport default function(t) {\n if (t < 0 || t > 1) t -= Math.floor(t);\n var ts = Math.abs(t - 0.5);\n rainbow.h = 360 * t - 100;\n rainbow.s = 1.5 - 1.5 * ts;\n rainbow.l = 0.8 - 0.9 * ts;\n return rainbow + \"\";\n}\n","import colors from \"./colors\";\n\nfunction ramp(range) {\n var n = range.length;\n return function(t) {\n return range[Math.max(0, Math.min(n - 1, Math.floor(t * n)))];\n };\n}\n\nexport default ramp(colors(\"44015444025645045745055946075a46085c460a5d460b5e470d60470e6147106347116447136548146748166848176948186a481a6c481b6d481c6e481d6f481f70482071482173482374482475482576482677482878482979472a7a472c7a472d7b472e7c472f7d46307e46327e46337f463480453581453781453882443983443a83443b84433d84433e85423f854240864241864142874144874045884046883f47883f48893e49893e4a893e4c8a3d4d8a3d4e8a3c4f8a3c508b3b518b3b528b3a538b3a548c39558c39568c38588c38598c375a8c375b8d365c8d365d8d355e8d355f8d34608d34618d33628d33638d32648e32658e31668e31678e31688e30698e306a8e2f6b8e2f6c8e2e6d8e2e6e8e2e6f8e2d708e2d718e2c718e2c728e2c738e2b748e2b758e2a768e2a778e2a788e29798e297a8e297b8e287c8e287d8e277e8e277f8e27808e26818e26828e26828e25838e25848e25858e24868e24878e23888e23898e238a8d228b8d228c8d228d8d218e8d218f8d21908d21918c20928c20928c20938c1f948c1f958b1f968b1f978b1f988b1f998a1f9a8a1e9b8a1e9c891e9d891f9e891f9f881fa0881fa1881fa1871fa28720a38620a48621a58521a68522a78522a88423a98324aa8325ab8225ac8226ad8127ad8128ae8029af7f2ab07f2cb17e2db27d2eb37c2fb47c31b57b32b67a34b67935b77937b87838b9773aba763bbb753dbc743fbc7340bd7242be7144bf7046c06f48c16e4ac16d4cc26c4ec36b50c46a52c56954c56856c66758c7655ac8645cc8635ec96260ca6063cb5f65cb5e67cc5c69cd5b6ccd5a6ece5870cf5773d05675d05477d1537ad1517cd2507fd34e81d34d84d44b86d54989d5488bd6468ed64590d74393d74195d84098d83e9bd93c9dd93ba0da39a2da37a5db36a8db34aadc32addc30b0dd2fb2dd2db5de2bb8de29bade28bddf26c0df25c2df23c5e021c8e020cae11fcde11dd0e11cd2e21bd5e21ad8e219dae319dde318dfe318e2e418e5e419e7e419eae51aece51befe51cf1e51df4e61ef6e620f8e621fbe723fde725\"));\n\nexport var magma = ramp(colors(\"00000401000501010601010802010902020b02020d03030f03031204041405041606051806051a07061c08071e0907200a08220b09240c09260d0a290e0b2b100b2d110c2f120d31130d34140e36150e38160f3b180f3d19103f1a10421c10441d11471e114920114b21114e22115024125325125527125829115a2a115c2c115f2d11612f116331116533106734106936106b38106c390f6e3b0f703d0f713f0f72400f74420f75440f764510774710784910784a10794c117a4e117b4f127b51127c52137c54137d56147d57157e59157e5a167e5c167f5d177f5f187f601880621980641a80651a80671b80681c816a1c816b1d816d1d816e1e81701f81721f817320817521817621817822817922827b23827c23827e24828025828125818326818426818627818827818928818b29818c29818e2a81902a81912b81932b80942c80962c80982d80992d809b2e7f9c2e7f9e2f7fa02f7fa1307ea3307ea5317ea6317da8327daa337dab337cad347cae347bb0357bb2357bb3367ab5367ab73779b83779ba3878bc3978bd3977bf3a77c03a76c23b75c43c75c53c74c73d73c83e73ca3e72cc3f71cd4071cf4070d0416fd2426fd3436ed5446dd6456cd8456cd9466bdb476adc4869de4968df4a68e04c67e24d66e34e65e44f64e55064e75263e85362e95462ea5661eb5760ec5860ed5a5fee5b5eef5d5ef05f5ef1605df2625df2645cf3655cf4675cf4695cf56b5cf66c5cf66e5cf7705cf7725cf8745cf8765cf9785df9795df97b5dfa7d5efa7f5efa815ffb835ffb8560fb8761fc8961fc8a62fc8c63fc8e64fc9065fd9266fd9467fd9668fd9869fd9a6afd9b6bfe9d6cfe9f6dfea16efea36ffea571fea772fea973feaa74feac76feae77feb078feb27afeb47bfeb67cfeb77efeb97ffebb81febd82febf84fec185fec287fec488fec68afec88cfeca8dfecc8ffecd90fecf92fed194fed395fed597fed799fed89afdda9cfddc9efddea0fde0a1fde2a3fde3a5fde5a7fde7a9fde9aafdebacfcecaefceeb0fcf0b2fcf2b4fcf4b6fcf6b8fcf7b9fcf9bbfcfbbdfcfdbf\"));\n\nexport var inferno = ramp(colors(\"00000401000501010601010802010a02020c02020e03021004031204031405041706041907051b08051d09061f0a07220b07240c08260d08290e092b10092d110a30120a32140b34150b37160b39180c3c190c3e1b0c411c0c431e0c451f0c48210c4a230c4c240c4f260c51280b53290b552b0b572d0b592f0a5b310a5c320a5e340a5f3609613809623909633b09643d09653e0966400a67420a68440a68450a69470b6a490b6a4a0c6b4c0c6b4d0d6c4f0d6c510e6c520e6d540f6d550f6d57106e59106e5a116e5c126e5d126e5f136e61136e62146e64156e65156e67166e69166e6a176e6c186e6d186e6f196e71196e721a6e741a6e751b6e771c6d781c6d7a1d6d7c1d6d7d1e6d7f1e6c801f6c82206c84206b85216b87216b88226a8a226a8c23698d23698f24699025689225689326679526679727669827669a28659b29649d29649f2a63a02a63a22b62a32c61a52c60a62d60a82e5fa92e5eab2f5ead305dae305cb0315bb1325ab3325ab43359b63458b73557b93556ba3655bc3754bd3853bf3952c03a51c13a50c33b4fc43c4ec63d4dc73e4cc83f4bca404acb4149cc4248ce4347cf4446d04545d24644d34743d44842d54a41d74b3fd84c3ed94d3dda4e3cdb503bdd513ade5238df5337e05536e15635e25734e35933e45a31e55c30e65d2fe75e2ee8602de9612bea632aeb6429eb6628ec6726ed6925ee6a24ef6c23ef6e21f06f20f1711ff1731df2741cf3761bf37819f47918f57b17f57d15f67e14f68013f78212f78410f8850ff8870ef8890cf98b0bf98c0af98e09fa9008fa9207fa9407fb9606fb9706fb9906fb9b06fb9d07fc9f07fca108fca309fca50afca60cfca80dfcaa0ffcac11fcae12fcb014fcb216fcb418fbb61afbb81dfbba1ffbbc21fbbe23fac026fac228fac42afac62df9c72ff9c932f9cb35f8cd37f8cf3af7d13df7d340f6d543f6d746f5d949f5db4cf4dd4ff4df53f4e156f3e35af3e55df2e661f2e865f2ea69f1ec6df1ed71f1ef75f1f179f2f27df2f482f3f586f3f68af4f88ef5f992f6fa96f8fb9af9fc9dfafda1fcffa4\"));\n\nexport var plasma = ramp(colors(\"0d088710078813078916078a19068c1b068d1d068e20068f2206902406912605912805922a05932c05942e05952f059631059733059735049837049938049a3a049a3c049b3e049c3f049c41049d43039e44039e46039f48039f4903a04b03a14c02a14e02a25002a25102a35302a35502a45601a45801a45901a55b01a55c01a65e01a66001a66100a76300a76400a76600a76700a86900a86a00a86c00a86e00a86f00a87100a87201a87401a87501a87701a87801a87a02a87b02a87d03a87e03a88004a88104a78305a78405a78606a68707a68808a68a09a58b0aa58d0ba58e0ca48f0da4910ea3920fa39410a29511a19613a19814a099159f9a169f9c179e9d189d9e199da01a9ca11b9ba21d9aa31e9aa51f99a62098a72197a82296aa2395ab2494ac2694ad2793ae2892b02991b12a90b22b8fb32c8eb42e8db52f8cb6308bb7318ab83289ba3388bb3488bc3587bd3786be3885bf3984c03a83c13b82c23c81c33d80c43e7fc5407ec6417dc7427cc8437bc9447aca457acb4679cc4778cc4977cd4a76ce4b75cf4c74d04d73d14e72d24f71d35171d45270d5536fd5546ed6556dd7566cd8576bd9586ada5a6ada5b69db5c68dc5d67dd5e66de5f65de6164df6263e06363e16462e26561e26660e3685fe4695ee56a5de56b5de66c5ce76e5be76f5ae87059e97158e97257ea7457eb7556eb7655ec7754ed7953ed7a52ee7b51ef7c51ef7e50f07f4ff0804ef1814df1834cf2844bf3854bf3874af48849f48948f58b47f58c46f68d45f68f44f79044f79143f79342f89441f89540f9973ff9983ef99a3efa9b3dfa9c3cfa9e3bfb9f3afba139fba238fca338fca537fca636fca835fca934fdab33fdac33fdae32fdaf31fdb130fdb22ffdb42ffdb52efeb72dfeb82cfeba2cfebb2bfebd2afebe2afec029fdc229fdc328fdc527fdc627fdc827fdca26fdcb26fccd25fcce25fcd025fcd225fbd324fbd524fbd724fad824fada24f9dc24f9dd25f8df25f8e125f7e225f7e425f6e626f6e826f5e926f5eb27f4ed27f3ee27f3f027f2f227f1f426f1f525f0f724f0f921\"));\n","import {linearish} from \"./linear\";\n\nexport default function sequential(interpolator) {\n var x0 = 0,\n x1 = 1,\n clamp = false;\n\n function scale(x) {\n var t = (x - x0) / (x1 - x0);\n return interpolator(clamp ? Math.max(0, Math.min(1, t)) : t);\n }\n\n scale.domain = function(_) {\n return arguments.length ? (x0 = +_[0], x1 = +_[1], scale) : [x0, x1];\n };\n\n scale.clamp = function(_) {\n return arguments.length ? (clamp = !!_, scale) : clamp;\n };\n\n scale.interpolator = function(_) {\n return arguments.length ? (interpolator = _, scale) : interpolator;\n };\n\n scale.copy = function() {\n return sequential(interpolator).domain([x0, x1]).clamp(clamp);\n };\n\n return linearish(scale);\n}\n","export default function(specifier) {\n var n = specifier.length / 6 | 0, colors = new Array(n), i = 0;\n while (i < n) colors[i] = \"#\" + specifier.slice(i * 6, ++i * 6);\n return colors;\n}\n","import colors from \"../colors\";\n\nexport default colors(\"7fc97fbeaed4fdc086ffff99386cb0f0027fbf5b17666666\");\n","import colors from \"../colors\";\n\nexport default colors(\"1f77b4ff7f0e2ca02cd627289467bd8c564be377c27f7f7fbcbd2217becf\");\n","import colors from \"../colors\";\n\nexport default colors(\"1b9e77d95f027570b3e7298a66a61ee6ab02a6761d666666\");\n","import colors from \"../colors\";\n\nexport default colors(\"a6cee31f78b4b2df8a33a02cfb9a99e31a1cfdbf6fff7f00cab2d66a3d9affff99b15928\");\n","import colors from \"../colors\";\n\nexport default colors(\"fbb4aeb3cde3ccebc5decbe4fed9a6ffffcce5d8bdfddaecf2f2f2\");\n","import colors from \"../colors\";\n\nexport default colors(\"b3e2cdfdcdaccbd5e8f4cae4e6f5c9fff2aef1e2cccccccc\");\n","import colors from \"../colors\";\n\nexport default colors(\"e41a1c377eb84daf4a984ea3ff7f00ffff33a65628f781bf999999\");\n","import colors from \"../colors\";\n\nexport default colors(\"66c2a5fc8d628da0cbe78ac3a6d854ffd92fe5c494b3b3b3\");\n","import colors from \"../colors\";\n\nexport default colors(\"8dd3c7ffffb3bebadafb807280b1d3fdb462b3de69fccde5d9d9d9bc80bdccebc5ffed6f\");\n","import {interpolateRgbBasis} from \"d3-interpolate\";\n\nexport default function(scheme) {\n return interpolateRgbBasis(scheme[scheme.length - 1]);\n}\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"d8b365f5f5f55ab4ac\",\n \"a6611adfc27d80cdc1018571\",\n \"a6611adfc27df5f5f580cdc1018571\",\n \"8c510ad8b365f6e8c3c7eae55ab4ac01665e\",\n \"8c510ad8b365f6e8c3f5f5f5c7eae55ab4ac01665e\",\n \"8c510abf812ddfc27df6e8c3c7eae580cdc135978f01665e\",\n \"8c510abf812ddfc27df6e8c3f5f5f5c7eae580cdc135978f01665e\",\n \"5430058c510abf812ddfc27df6e8c3c7eae580cdc135978f01665e003c30\",\n \"5430058c510abf812ddfc27df6e8c3f5f5f5c7eae580cdc135978f01665e003c30\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"af8dc3f7f7f77fbf7b\",\n \"7b3294c2a5cfa6dba0008837\",\n \"7b3294c2a5cff7f7f7a6dba0008837\",\n \"762a83af8dc3e7d4e8d9f0d37fbf7b1b7837\",\n \"762a83af8dc3e7d4e8f7f7f7d9f0d37fbf7b1b7837\",\n \"762a839970abc2a5cfe7d4e8d9f0d3a6dba05aae611b7837\",\n \"762a839970abc2a5cfe7d4e8f7f7f7d9f0d3a6dba05aae611b7837\",\n \"40004b762a839970abc2a5cfe7d4e8d9f0d3a6dba05aae611b783700441b\",\n \"40004b762a839970abc2a5cfe7d4e8f7f7f7d9f0d3a6dba05aae611b783700441b\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"e9a3c9f7f7f7a1d76a\",\n \"d01c8bf1b6dab8e1864dac26\",\n \"d01c8bf1b6daf7f7f7b8e1864dac26\",\n \"c51b7de9a3c9fde0efe6f5d0a1d76a4d9221\",\n \"c51b7de9a3c9fde0eff7f7f7e6f5d0a1d76a4d9221\",\n \"c51b7dde77aef1b6dafde0efe6f5d0b8e1867fbc414d9221\",\n \"c51b7dde77aef1b6dafde0eff7f7f7e6f5d0b8e1867fbc414d9221\",\n \"8e0152c51b7dde77aef1b6dafde0efe6f5d0b8e1867fbc414d9221276419\",\n \"8e0152c51b7dde77aef1b6dafde0eff7f7f7e6f5d0b8e1867fbc414d9221276419\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"998ec3f7f7f7f1a340\",\n \"5e3c99b2abd2fdb863e66101\",\n \"5e3c99b2abd2f7f7f7fdb863e66101\",\n \"542788998ec3d8daebfee0b6f1a340b35806\",\n \"542788998ec3d8daebf7f7f7fee0b6f1a340b35806\",\n \"5427888073acb2abd2d8daebfee0b6fdb863e08214b35806\",\n \"5427888073acb2abd2d8daebf7f7f7fee0b6fdb863e08214b35806\",\n \"2d004b5427888073acb2abd2d8daebfee0b6fdb863e08214b358067f3b08\",\n \"2d004b5427888073acb2abd2d8daebf7f7f7fee0b6fdb863e08214b358067f3b08\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"ef8a62f7f7f767a9cf\",\n \"ca0020f4a58292c5de0571b0\",\n \"ca0020f4a582f7f7f792c5de0571b0\",\n \"b2182bef8a62fddbc7d1e5f067a9cf2166ac\",\n \"b2182bef8a62fddbc7f7f7f7d1e5f067a9cf2166ac\",\n \"b2182bd6604df4a582fddbc7d1e5f092c5de4393c32166ac\",\n \"b2182bd6604df4a582fddbc7f7f7f7d1e5f092c5de4393c32166ac\",\n \"67001fb2182bd6604df4a582fddbc7d1e5f092c5de4393c32166ac053061\",\n \"67001fb2182bd6604df4a582fddbc7f7f7f7d1e5f092c5de4393c32166ac053061\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"ef8a62ffffff999999\",\n \"ca0020f4a582bababa404040\",\n \"ca0020f4a582ffffffbababa404040\",\n \"b2182bef8a62fddbc7e0e0e09999994d4d4d\",\n \"b2182bef8a62fddbc7ffffffe0e0e09999994d4d4d\",\n \"b2182bd6604df4a582fddbc7e0e0e0bababa8787874d4d4d\",\n \"b2182bd6604df4a582fddbc7ffffffe0e0e0bababa8787874d4d4d\",\n \"67001fb2182bd6604df4a582fddbc7e0e0e0bababa8787874d4d4d1a1a1a\",\n \"67001fb2182bd6604df4a582fddbc7ffffffe0e0e0bababa8787874d4d4d1a1a1a\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"fc8d59ffffbf91bfdb\",\n \"d7191cfdae61abd9e92c7bb6\",\n \"d7191cfdae61ffffbfabd9e92c7bb6\",\n \"d73027fc8d59fee090e0f3f891bfdb4575b4\",\n \"d73027fc8d59fee090ffffbfe0f3f891bfdb4575b4\",\n \"d73027f46d43fdae61fee090e0f3f8abd9e974add14575b4\",\n \"d73027f46d43fdae61fee090ffffbfe0f3f8abd9e974add14575b4\",\n \"a50026d73027f46d43fdae61fee090e0f3f8abd9e974add14575b4313695\",\n \"a50026d73027f46d43fdae61fee090ffffbfe0f3f8abd9e974add14575b4313695\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"fc8d59ffffbf91cf60\",\n \"d7191cfdae61a6d96a1a9641\",\n \"d7191cfdae61ffffbfa6d96a1a9641\",\n \"d73027fc8d59fee08bd9ef8b91cf601a9850\",\n \"d73027fc8d59fee08bffffbfd9ef8b91cf601a9850\",\n \"d73027f46d43fdae61fee08bd9ef8ba6d96a66bd631a9850\",\n \"d73027f46d43fdae61fee08bffffbfd9ef8ba6d96a66bd631a9850\",\n \"a50026d73027f46d43fdae61fee08bd9ef8ba6d96a66bd631a9850006837\",\n \"a50026d73027f46d43fdae61fee08bffffbfd9ef8ba6d96a66bd631a9850006837\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"fc8d59ffffbf99d594\",\n \"d7191cfdae61abdda42b83ba\",\n \"d7191cfdae61ffffbfabdda42b83ba\",\n \"d53e4ffc8d59fee08be6f59899d5943288bd\",\n \"d53e4ffc8d59fee08bffffbfe6f59899d5943288bd\",\n \"d53e4ff46d43fdae61fee08be6f598abdda466c2a53288bd\",\n \"d53e4ff46d43fdae61fee08bffffbfe6f598abdda466c2a53288bd\",\n \"9e0142d53e4ff46d43fdae61fee08be6f598abdda466c2a53288bd5e4fa2\",\n \"9e0142d53e4ff46d43fdae61fee08bffffbfe6f598abdda466c2a53288bd5e4fa2\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"e5f5f999d8c92ca25f\",\n \"edf8fbb2e2e266c2a4238b45\",\n \"edf8fbb2e2e266c2a42ca25f006d2c\",\n \"edf8fbccece699d8c966c2a42ca25f006d2c\",\n \"edf8fbccece699d8c966c2a441ae76238b45005824\",\n \"f7fcfde5f5f9ccece699d8c966c2a441ae76238b45005824\",\n \"f7fcfde5f5f9ccece699d8c966c2a441ae76238b45006d2c00441b\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"e0ecf49ebcda8856a7\",\n \"edf8fbb3cde38c96c688419d\",\n \"edf8fbb3cde38c96c68856a7810f7c\",\n \"edf8fbbfd3e69ebcda8c96c68856a7810f7c\",\n \"edf8fbbfd3e69ebcda8c96c68c6bb188419d6e016b\",\n \"f7fcfde0ecf4bfd3e69ebcda8c96c68c6bb188419d6e016b\",\n \"f7fcfde0ecf4bfd3e69ebcda8c96c68c6bb188419d810f7c4d004b\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"e0f3dba8ddb543a2ca\",\n \"f0f9e8bae4bc7bccc42b8cbe\",\n \"f0f9e8bae4bc7bccc443a2ca0868ac\",\n \"f0f9e8ccebc5a8ddb57bccc443a2ca0868ac\",\n \"f0f9e8ccebc5a8ddb57bccc44eb3d32b8cbe08589e\",\n \"f7fcf0e0f3dbccebc5a8ddb57bccc44eb3d32b8cbe08589e\",\n \"f7fcf0e0f3dbccebc5a8ddb57bccc44eb3d32b8cbe0868ac084081\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"fee8c8fdbb84e34a33\",\n \"fef0d9fdcc8afc8d59d7301f\",\n \"fef0d9fdcc8afc8d59e34a33b30000\",\n \"fef0d9fdd49efdbb84fc8d59e34a33b30000\",\n \"fef0d9fdd49efdbb84fc8d59ef6548d7301f990000\",\n \"fff7ecfee8c8fdd49efdbb84fc8d59ef6548d7301f990000\",\n \"fff7ecfee8c8fdd49efdbb84fc8d59ef6548d7301fb300007f0000\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"ece2f0a6bddb1c9099\",\n \"f6eff7bdc9e167a9cf02818a\",\n \"f6eff7bdc9e167a9cf1c9099016c59\",\n \"f6eff7d0d1e6a6bddb67a9cf1c9099016c59\",\n \"f6eff7d0d1e6a6bddb67a9cf3690c002818a016450\",\n \"fff7fbece2f0d0d1e6a6bddb67a9cf3690c002818a016450\",\n \"fff7fbece2f0d0d1e6a6bddb67a9cf3690c002818a016c59014636\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"ece7f2a6bddb2b8cbe\",\n \"f1eef6bdc9e174a9cf0570b0\",\n \"f1eef6bdc9e174a9cf2b8cbe045a8d\",\n \"f1eef6d0d1e6a6bddb74a9cf2b8cbe045a8d\",\n \"f1eef6d0d1e6a6bddb74a9cf3690c00570b0034e7b\",\n \"fff7fbece7f2d0d1e6a6bddb74a9cf3690c00570b0034e7b\",\n \"fff7fbece7f2d0d1e6a6bddb74a9cf3690c00570b0045a8d023858\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"e7e1efc994c7dd1c77\",\n \"f1eef6d7b5d8df65b0ce1256\",\n \"f1eef6d7b5d8df65b0dd1c77980043\",\n \"f1eef6d4b9dac994c7df65b0dd1c77980043\",\n \"f1eef6d4b9dac994c7df65b0e7298ace125691003f\",\n \"f7f4f9e7e1efd4b9dac994c7df65b0e7298ace125691003f\",\n \"f7f4f9e7e1efd4b9dac994c7df65b0e7298ace125698004367001f\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"fde0ddfa9fb5c51b8a\",\n \"feebe2fbb4b9f768a1ae017e\",\n \"feebe2fbb4b9f768a1c51b8a7a0177\",\n \"feebe2fcc5c0fa9fb5f768a1c51b8a7a0177\",\n \"feebe2fcc5c0fa9fb5f768a1dd3497ae017e7a0177\",\n \"fff7f3fde0ddfcc5c0fa9fb5f768a1dd3497ae017e7a0177\",\n \"fff7f3fde0ddfcc5c0fa9fb5f768a1dd3497ae017e7a017749006a\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"edf8b17fcdbb2c7fb8\",\n \"ffffcca1dab441b6c4225ea8\",\n \"ffffcca1dab441b6c42c7fb8253494\",\n \"ffffccc7e9b47fcdbb41b6c42c7fb8253494\",\n \"ffffccc7e9b47fcdbb41b6c41d91c0225ea80c2c84\",\n \"ffffd9edf8b1c7e9b47fcdbb41b6c41d91c0225ea80c2c84\",\n \"ffffd9edf8b1c7e9b47fcdbb41b6c41d91c0225ea8253494081d58\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"f7fcb9addd8e31a354\",\n \"ffffccc2e69978c679238443\",\n \"ffffccc2e69978c67931a354006837\",\n \"ffffccd9f0a3addd8e78c67931a354006837\",\n \"ffffccd9f0a3addd8e78c67941ab5d238443005a32\",\n \"ffffe5f7fcb9d9f0a3addd8e78c67941ab5d238443005a32\",\n \"ffffe5f7fcb9d9f0a3addd8e78c67941ab5d238443006837004529\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"fff7bcfec44fd95f0e\",\n \"ffffd4fed98efe9929cc4c02\",\n \"ffffd4fed98efe9929d95f0e993404\",\n \"ffffd4fee391fec44ffe9929d95f0e993404\",\n \"ffffd4fee391fec44ffe9929ec7014cc4c028c2d04\",\n \"ffffe5fff7bcfee391fec44ffe9929ec7014cc4c028c2d04\",\n \"ffffe5fff7bcfee391fec44ffe9929ec7014cc4c02993404662506\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"ffeda0feb24cf03b20\",\n \"ffffb2fecc5cfd8d3ce31a1c\",\n \"ffffb2fecc5cfd8d3cf03b20bd0026\",\n \"ffffb2fed976feb24cfd8d3cf03b20bd0026\",\n \"ffffb2fed976feb24cfd8d3cfc4e2ae31a1cb10026\",\n \"ffffccffeda0fed976feb24cfd8d3cfc4e2ae31a1cb10026\",\n \"ffffccffeda0fed976feb24cfd8d3cfc4e2ae31a1cbd0026800026\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"deebf79ecae13182bd\",\n \"eff3ffbdd7e76baed62171b5\",\n \"eff3ffbdd7e76baed63182bd08519c\",\n \"eff3ffc6dbef9ecae16baed63182bd08519c\",\n \"eff3ffc6dbef9ecae16baed64292c62171b5084594\",\n \"f7fbffdeebf7c6dbef9ecae16baed64292c62171b5084594\",\n \"f7fbffdeebf7c6dbef9ecae16baed64292c62171b508519c08306b\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"e5f5e0a1d99b31a354\",\n \"edf8e9bae4b374c476238b45\",\n \"edf8e9bae4b374c47631a354006d2c\",\n \"edf8e9c7e9c0a1d99b74c47631a354006d2c\",\n \"edf8e9c7e9c0a1d99b74c47641ab5d238b45005a32\",\n \"f7fcf5e5f5e0c7e9c0a1d99b74c47641ab5d238b45005a32\",\n \"f7fcf5e5f5e0c7e9c0a1d99b74c47641ab5d238b45006d2c00441b\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"f0f0f0bdbdbd636363\",\n \"f7f7f7cccccc969696525252\",\n \"f7f7f7cccccc969696636363252525\",\n \"f7f7f7d9d9d9bdbdbd969696636363252525\",\n \"f7f7f7d9d9d9bdbdbd969696737373525252252525\",\n \"fffffff0f0f0d9d9d9bdbdbd969696737373525252252525\",\n \"fffffff0f0f0d9d9d9bdbdbd969696737373525252252525000000\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"efedf5bcbddc756bb1\",\n \"f2f0f7cbc9e29e9ac86a51a3\",\n \"f2f0f7cbc9e29e9ac8756bb154278f\",\n \"f2f0f7dadaebbcbddc9e9ac8756bb154278f\",\n \"f2f0f7dadaebbcbddc9e9ac8807dba6a51a34a1486\",\n \"fcfbfdefedf5dadaebbcbddc9e9ac8807dba6a51a34a1486\",\n \"fcfbfdefedf5dadaebbcbddc9e9ac8807dba6a51a354278f3f007d\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"fee0d2fc9272de2d26\",\n \"fee5d9fcae91fb6a4acb181d\",\n \"fee5d9fcae91fb6a4ade2d26a50f15\",\n \"fee5d9fcbba1fc9272fb6a4ade2d26a50f15\",\n \"fee5d9fcbba1fc9272fb6a4aef3b2ccb181d99000d\",\n \"fff5f0fee0d2fcbba1fc9272fb6a4aef3b2ccb181d99000d\",\n \"fff5f0fee0d2fcbba1fc9272fb6a4aef3b2ccb181da50f1567000d\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"fee6cefdae6be6550d\",\n \"feeddefdbe85fd8d3cd94701\",\n \"feeddefdbe85fd8d3ce6550da63603\",\n \"feeddefdd0a2fdae6bfd8d3ce6550da63603\",\n \"feeddefdd0a2fdae6bfd8d3cf16913d948018c2d04\",\n \"fff5ebfee6cefdd0a2fdae6bfd8d3cf16913d948018c2d04\",\n \"fff5ebfee6cefdd0a2fdae6bfd8d3cf16913d94801a636037f2704\"\n).map(colors);\n\nexport default ramp(scheme);\n","import {cubehelix} from \"d3-color\";\nimport {interpolateCubehelixLong} from \"d3-interpolate\";\n\nexport default interpolateCubehelixLong(cubehelix(300, 0.5, 0.0), cubehelix(-240, 0.5, 1.0));\n","import {cubehelix} from \"d3-color\";\nimport {interpolateCubehelixLong} from \"d3-interpolate\";\n\nexport var warm = interpolateCubehelixLong(cubehelix(-100, 0.75, 0.35), cubehelix(80, 1.50, 0.8));\n\nexport var cool = interpolateCubehelixLong(cubehelix(260, 0.75, 0.35), cubehelix(80, 1.50, 0.8));\n\nvar c = cubehelix();\n\nexport default function(t) {\n if (t < 0 || t > 1) t -= Math.floor(t);\n var ts = Math.abs(t - 0.5);\n c.h = 360 * t - 100;\n c.s = 1.5 - 1.5 * ts;\n c.l = 0.8 - 0.9 * ts;\n return c + \"\";\n}\n","import {rgb} from \"d3-color\";\n\nvar c = rgb(),\n pi_1_3 = Math.PI / 3,\n pi_2_3 = Math.PI * 2 / 3;\n\nexport default function(t) {\n var x;\n t = (0.5 - t) * Math.PI;\n c.r = 255 * (x = Math.sin(t)) * x;\n c.g = 255 * (x = Math.sin(t + pi_1_3)) * x;\n c.b = 255 * (x = Math.sin(t + pi_2_3)) * x;\n return c + \"\";\n}\n","import colors from \"../colors\";\n\nfunction ramp(range) {\n var n = range.length;\n return function(t) {\n return range[Math.max(0, Math.min(n - 1, Math.floor(t * n)))];\n };\n}\n\nexport default ramp(colors(\"44015444025645045745055946075a46085c460a5d460b5e470d60470e6147106347116447136548146748166848176948186a481a6c481b6d481c6e481d6f481f70482071482173482374482475482576482677482878482979472a7a472c7a472d7b472e7c472f7d46307e46327e46337f463480453581453781453882443983443a83443b84433d84433e85423f854240864241864142874144874045884046883f47883f48893e49893e4a893e4c8a3d4d8a3d4e8a3c4f8a3c508b3b518b3b528b3a538b3a548c39558c39568c38588c38598c375a8c375b8d365c8d365d8d355e8d355f8d34608d34618d33628d33638d32648e32658e31668e31678e31688e30698e306a8e2f6b8e2f6c8e2e6d8e2e6e8e2e6f8e2d708e2d718e2c718e2c728e2c738e2b748e2b758e2a768e2a778e2a788e29798e297a8e297b8e287c8e287d8e277e8e277f8e27808e26818e26828e26828e25838e25848e25858e24868e24878e23888e23898e238a8d228b8d228c8d228d8d218e8d218f8d21908d21918c20928c20928c20938c1f948c1f958b1f968b1f978b1f988b1f998a1f9a8a1e9b8a1e9c891e9d891f9e891f9f881fa0881fa1881fa1871fa28720a38620a48621a58521a68522a78522a88423a98324aa8325ab8225ac8226ad8127ad8128ae8029af7f2ab07f2cb17e2db27d2eb37c2fb47c31b57b32b67a34b67935b77937b87838b9773aba763bbb753dbc743fbc7340bd7242be7144bf7046c06f48c16e4ac16d4cc26c4ec36b50c46a52c56954c56856c66758c7655ac8645cc8635ec96260ca6063cb5f65cb5e67cc5c69cd5b6ccd5a6ece5870cf5773d05675d05477d1537ad1517cd2507fd34e81d34d84d44b86d54989d5488bd6468ed64590d74393d74195d84098d83e9bd93c9dd93ba0da39a2da37a5db36a8db34aadc32addc30b0dd2fb2dd2db5de2bb8de29bade28bddf26c0df25c2df23c5e021c8e020cae11fcde11dd0e11cd2e21bd5e21ad8e219dae319dde318dfe318e2e418e5e419e7e419eae51aece51befe51cf1e51df4e61ef6e620f8e621fbe723fde725\"));\n\nexport var magma = ramp(colors(\"00000401000501010601010802010902020b02020d03030f03031204041405041606051806051a07061c08071e0907200a08220b09240c09260d0a290e0b2b100b2d110c2f120d31130d34140e36150e38160f3b180f3d19103f1a10421c10441d11471e114920114b21114e22115024125325125527125829115a2a115c2c115f2d11612f116331116533106734106936106b38106c390f6e3b0f703d0f713f0f72400f74420f75440f764510774710784910784a10794c117a4e117b4f127b51127c52137c54137d56147d57157e59157e5a167e5c167f5d177f5f187f601880621980641a80651a80671b80681c816a1c816b1d816d1d816e1e81701f81721f817320817521817621817822817922827b23827c23827e24828025828125818326818426818627818827818928818b29818c29818e2a81902a81912b81932b80942c80962c80982d80992d809b2e7f9c2e7f9e2f7fa02f7fa1307ea3307ea5317ea6317da8327daa337dab337cad347cae347bb0357bb2357bb3367ab5367ab73779b83779ba3878bc3978bd3977bf3a77c03a76c23b75c43c75c53c74c73d73c83e73ca3e72cc3f71cd4071cf4070d0416fd2426fd3436ed5446dd6456cd8456cd9466bdb476adc4869de4968df4a68e04c67e24d66e34e65e44f64e55064e75263e85362e95462ea5661eb5760ec5860ed5a5fee5b5eef5d5ef05f5ef1605df2625df2645cf3655cf4675cf4695cf56b5cf66c5cf66e5cf7705cf7725cf8745cf8765cf9785df9795df97b5dfa7d5efa7f5efa815ffb835ffb8560fb8761fc8961fc8a62fc8c63fc8e64fc9065fd9266fd9467fd9668fd9869fd9a6afd9b6bfe9d6cfe9f6dfea16efea36ffea571fea772fea973feaa74feac76feae77feb078feb27afeb47bfeb67cfeb77efeb97ffebb81febd82febf84fec185fec287fec488fec68afec88cfeca8dfecc8ffecd90fecf92fed194fed395fed597fed799fed89afdda9cfddc9efddea0fde0a1fde2a3fde3a5fde5a7fde7a9fde9aafdebacfcecaefceeb0fcf0b2fcf2b4fcf4b6fcf6b8fcf7b9fcf9bbfcfbbdfcfdbf\"));\n\nexport var inferno = ramp(colors(\"00000401000501010601010802010a02020c02020e03021004031204031405041706041907051b08051d09061f0a07220b07240c08260d08290e092b10092d110a30120a32140b34150b37160b39180c3c190c3e1b0c411c0c431e0c451f0c48210c4a230c4c240c4f260c51280b53290b552b0b572d0b592f0a5b310a5c320a5e340a5f3609613809623909633b09643d09653e0966400a67420a68440a68450a69470b6a490b6a4a0c6b4c0c6b4d0d6c4f0d6c510e6c520e6d540f6d550f6d57106e59106e5a116e5c126e5d126e5f136e61136e62146e64156e65156e67166e69166e6a176e6c186e6d186e6f196e71196e721a6e741a6e751b6e771c6d781c6d7a1d6d7c1d6d7d1e6d7f1e6c801f6c82206c84206b85216b87216b88226a8a226a8c23698d23698f24699025689225689326679526679727669827669a28659b29649d29649f2a63a02a63a22b62a32c61a52c60a62d60a82e5fa92e5eab2f5ead305dae305cb0315bb1325ab3325ab43359b63458b73557b93556ba3655bc3754bd3853bf3952c03a51c13a50c33b4fc43c4ec63d4dc73e4cc83f4bca404acb4149cc4248ce4347cf4446d04545d24644d34743d44842d54a41d74b3fd84c3ed94d3dda4e3cdb503bdd513ade5238df5337e05536e15635e25734e35933e45a31e55c30e65d2fe75e2ee8602de9612bea632aeb6429eb6628ec6726ed6925ee6a24ef6c23ef6e21f06f20f1711ff1731df2741cf3761bf37819f47918f57b17f57d15f67e14f68013f78212f78410f8850ff8870ef8890cf98b0bf98c0af98e09fa9008fa9207fa9407fb9606fb9706fb9906fb9b06fb9d07fc9f07fca108fca309fca50afca60cfca80dfcaa0ffcac11fcae12fcb014fcb216fcb418fbb61afbb81dfbba1ffbbc21fbbe23fac026fac228fac42afac62df9c72ff9c932f9cb35f8cd37f8cf3af7d13df7d340f6d543f6d746f5d949f5db4cf4dd4ff4df53f4e156f3e35af3e55df2e661f2e865f2ea69f1ec6df1ed71f1ef75f1f179f2f27df2f482f3f586f3f68af4f88ef5f992f6fa96f8fb9af9fc9dfafda1fcffa4\"));\n\nexport var plasma = ramp(colors(\"0d088710078813078916078a19068c1b068d1d068e20068f2206902406912605912805922a05932c05942e05952f059631059733059735049837049938049a3a049a3c049b3e049c3f049c41049d43039e44039e46039f48039f4903a04b03a14c02a14e02a25002a25102a35302a35502a45601a45801a45901a55b01a55c01a65e01a66001a66100a76300a76400a76600a76700a86900a86a00a86c00a86e00a86f00a87100a87201a87401a87501a87701a87801a87a02a87b02a87d03a87e03a88004a88104a78305a78405a78606a68707a68808a68a09a58b0aa58d0ba58e0ca48f0da4910ea3920fa39410a29511a19613a19814a099159f9a169f9c179e9d189d9e199da01a9ca11b9ba21d9aa31e9aa51f99a62098a72197a82296aa2395ab2494ac2694ad2793ae2892b02991b12a90b22b8fb32c8eb42e8db52f8cb6308bb7318ab83289ba3388bb3488bc3587bd3786be3885bf3984c03a83c13b82c23c81c33d80c43e7fc5407ec6417dc7427cc8437bc9447aca457acb4679cc4778cc4977cd4a76ce4b75cf4c74d04d73d14e72d24f71d35171d45270d5536fd5546ed6556dd7566cd8576bd9586ada5a6ada5b69db5c68dc5d67dd5e66de5f65de6164df6263e06363e16462e26561e26660e3685fe4695ee56a5de56b5de66c5ce76e5be76f5ae87059e97158e97257ea7457eb7556eb7655ec7754ed7953ed7a52ee7b51ef7c51ef7e50f07f4ff0804ef1814df1834cf2844bf3854bf3874af48849f48948f58b47f58c46f68d45f68f44f79044f79143f79342f89441f89540f9973ff9983ef99a3efa9b3dfa9c3cfa9e3bfb9f3afba139fba238fca338fca537fca636fca835fca934fdab33fdac33fdae32fdaf31fdb130fdb22ffdb42ffdb52efeb72dfeb82cfeba2cfebb2bfebd2afebe2afec029fdc229fdc328fdc527fdc627fdc827fdca26fdcb26fccd25fcce25fcd025fcd225fbd324fbd524fbd724fad824fada24f9dc24f9dd25f8df25f8e125f7e225f7e425f6e626f6e826f5e926f5eb27f4ed27f3ee27f3f027f2f227f1f426f1f525f0f724f0f921\"));\n","const ReservedFields = {\n ROW_ID: '__id__'\n};\n\nexport default ReservedFields;\n","const CommonProps = {\n ACTION_INF: 'actionInf',\n ON_LAYER_DRAW: 'onlayerdraw'\n};\n\nexport default CommonProps;\n","export var slice = Array.prototype.slice;\n","export default function(x) {\n return x;\n}\n","import {slice} from \"./array\";\nimport identity from \"./identity\";\n\nvar top = 1,\n right = 2,\n bottom = 3,\n left = 4,\n epsilon = 1e-6;\n\nfunction translateX(x) {\n return \"translate(\" + (x + 0.5) + \",0)\";\n}\n\nfunction translateY(y) {\n return \"translate(0,\" + (y + 0.5) + \")\";\n}\n\nfunction number(scale) {\n return function(d) {\n return +scale(d);\n };\n}\n\nfunction center(scale) {\n var offset = Math.max(0, scale.bandwidth() - 1) / 2; // Adjust for 0.5px offset.\n if (scale.round()) offset = Math.round(offset);\n return function(d) {\n return +scale(d) + offset;\n };\n}\n\nfunction entering() {\n return !this.__axis;\n}\n\nfunction axis(orient, scale) {\n var tickArguments = [],\n tickValues = null,\n tickFormat = null,\n tickTransform = null,\n tickSizeInner = 6,\n tickSizeOuter = 6,\n tickPadding = 3,\n k = orient === top || orient === left ? -1 : 1,\n x = orient === left || orient === right ? \"x\" : \"y\",\n transform = orient === top || orient === bottom ? translateX : translateY;\n\n function axis(context) {\n var values = tickValues == null ? (scale.ticks ? scale.ticks.apply(scale, tickArguments) : scale.domain()) : tickValues,\n format = tickFormat == null ? (scale.tickFormat ? scale.tickFormat.apply(scale, tickArguments) : identity) : tickFormat,\n spacing = Math.max(tickSizeInner, 0) + tickPadding,\n range = scale.range(),\n range0 = +range[0] + 0.5,\n range1 = +range[range.length - 1] + 0.5,\n position = (scale.bandwidth ? center : number)(scale.copy()),\n selection = context.selection ? context.selection() : context,\n path = selection.selectAll(\".domain\").data([null]),\n tick = selection.selectAll(\".tick\").data(values, scale).order(),\n tickExit = tick.exit(),\n tickEnter = tick.enter().append(\"g\").attr(\"class\", \"tick\"),\n line = tick.select(\"line\"),\n text = tick.select(\"text\");\n\n path = path.merge(path.enter().insert(\"path\", \".tick\")\n .attr(\"class\", \"domain\")\n .attr(\"stroke\", \"#000\"));\n\n tick = tick.merge(tickEnter);\n\n line = line.merge(tickEnter.append(\"line\")\n .attr(\"stroke\", \"#000\")\n .attr(x + \"2\", k * tickSizeInner));\n\n text = text.merge(tickEnter.append(\"text\")\n .attr(\"fill\", \"#000\")\n .attr(x, k * spacing)\n .attr(\"dy\", orient === top ? \"0em\" : orient === bottom ? \"0.71em\" : \"0.32em\"))\n .style('transform', tickTransform);\n\n if (context !== selection) {\n path = path.transition(context);\n tick = tick.transition(context);\n line = line.transition(context);\n text = text.transition(context);\n\n tickExit = tickExit.transition(context)\n .attr(\"opacity\", epsilon)\n .attr(\"transform\", function(d) { return isFinite(d = position(d)) ? transform(d) : this.getAttribute(\"transform\"); });\n\n tickEnter\n .attr(\"opacity\", epsilon)\n .attr(\"transform\", function(d) { var p = this.parentNode.__axis; return transform(p && isFinite(p = p(d)) ? p : position(d)); });\n }\n\n tickExit.remove();\n\n path\n .attr(\"d\", orient === left || orient == right\n ? \"M\" + k * tickSizeOuter + \",\" + range0 + \"H0.5V\" + range1 + \"H\" + k * tickSizeOuter\n : \"M\" + range0 + \",\" + k * tickSizeOuter + \"V0.5H\" + range1 + \"V\" + k * tickSizeOuter);\n\n tick\n .attr(\"opacity\", 1)\n .attr(\"transform\", function(d) { return transform(position(d)); });\n\n line\n .attr(x + \"2\", k * tickSizeInner);\n\n text\n .attr(x, k * spacing)\n .text(format);\n\n selection.filter(entering)\n .attr(\"fill\", \"none\")\n .attr(\"font-size\", 10)\n .attr(\"font-family\", \"sans-serif\")\n .attr(\"text-anchor\", orient === right ? \"start\" : orient === left ? \"end\" : \"middle\");\n\n selection\n .each(function() { this.__axis = position; });\n }\n\n axis.scale = function(_) {\n return arguments.length ? (scale = _, axis) : scale;\n };\n\n axis.tickTransform = function(_) {\n return arguments.length ? (tickTransform = _, axis) : tickTransform;\n };\n\n axis.ticks = function() {\n return tickArguments = slice.call(arguments), axis;\n };\n\n axis.tickArguments = function(_) {\n return arguments.length ? (tickArguments = _ == null ? [] : slice.call(_), axis) : tickArguments.slice();\n };\n\n axis.tickValues = function(_) {\n return arguments.length ? (tickValues = _ == null ? null : slice.call(_), axis) : tickValues && tickValues.slice();\n };\n\n axis.tickFormat = function(_) {\n return arguments.length ? (tickFormat = _, axis) : tickFormat;\n };\n\n axis.tickSize = function(_) {\n return arguments.length ? (tickSizeInner = tickSizeOuter = +_, axis) : tickSizeInner;\n };\n\n axis.tickSizeInner = function(_) {\n return arguments.length ? (tickSizeInner = +_, axis) : tickSizeInner;\n };\n\n axis.tickSizeOuter = function(_) {\n return arguments.length ? (tickSizeOuter = +_, axis) : tickSizeOuter;\n };\n\n axis.tickPadding = function(_) {\n return arguments.length ? (tickPadding = +_, axis) : tickPadding;\n };\n\n return axis;\n}\n\nexport function axisTop(scale) {\n return axis(top, scale);\n}\n\nexport function axisRight(scale) {\n return axis(right, scale);\n}\n\nexport function axisBottom(scale) {\n return axis(bottom, scale);\n}\n\nexport function axisLeft(scale) {\n return axis(left, scale);\n}\n","var pi = Math.PI,\n tau = 2 * pi,\n epsilon = 1e-6,\n tauEpsilon = tau - epsilon;\n\nfunction Path() {\n this._x0 = this._y0 = // start of current subpath\n this._x1 = this._y1 = null; // end of current subpath\n this._ = \"\";\n}\n\nfunction path() {\n return new Path;\n}\n\nPath.prototype = path.prototype = {\n constructor: Path,\n moveTo: function(x, y) {\n this._ += \"M\" + (this._x0 = this._x1 = +x) + \",\" + (this._y0 = this._y1 = +y);\n },\n closePath: function() {\n if (this._x1 !== null) {\n this._x1 = this._x0, this._y1 = this._y0;\n this._ += \"Z\";\n }\n },\n lineTo: function(x, y) {\n this._ += \"L\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n },\n quadraticCurveTo: function(x1, y1, x, y) {\n this._ += \"Q\" + (+x1) + \",\" + (+y1) + \",\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n },\n bezierCurveTo: function(x1, y1, x2, y2, x, y) {\n this._ += \"C\" + (+x1) + \",\" + (+y1) + \",\" + (+x2) + \",\" + (+y2) + \",\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n },\n arcTo: function(x1, y1, x2, y2, r) {\n x1 = +x1, y1 = +y1, x2 = +x2, y2 = +y2, r = +r;\n var x0 = this._x1,\n y0 = this._y1,\n x21 = x2 - x1,\n y21 = y2 - y1,\n x01 = x0 - x1,\n y01 = y0 - y1,\n l01_2 = x01 * x01 + y01 * y01;\n\n // Is the radius negative? Error.\n if (r < 0) throw new Error(\"negative radius: \" + r);\n\n // Is this path empty? Move to (x1,y1).\n if (this._x1 === null) {\n this._ += \"M\" + (this._x1 = x1) + \",\" + (this._y1 = y1);\n }\n\n // Or, is (x1,y1) coincident with (x0,y0)? Do nothing.\n else if (!(l01_2 > epsilon));\n\n // Or, are (x0,y0), (x1,y1) and (x2,y2) collinear?\n // Equivalently, is (x1,y1) coincident with (x2,y2)?\n // Or, is the radius zero? Line to (x1,y1).\n else if (!(Math.abs(y01 * x21 - y21 * x01) > epsilon) || !r) {\n this._ += \"L\" + (this._x1 = x1) + \",\" + (this._y1 = y1);\n }\n\n // Otherwise, draw an arc!\n else {\n var x20 = x2 - x0,\n y20 = y2 - y0,\n l21_2 = x21 * x21 + y21 * y21,\n l20_2 = x20 * x20 + y20 * y20,\n l21 = Math.sqrt(l21_2),\n l01 = Math.sqrt(l01_2),\n l = r * Math.tan((pi - Math.acos((l21_2 + l01_2 - l20_2) / (2 * l21 * l01))) / 2),\n t01 = l / l01,\n t21 = l / l21;\n\n // If the start tangent is not coincident with (x0,y0), line to.\n if (Math.abs(t01 - 1) > epsilon) {\n this._ += \"L\" + (x1 + t01 * x01) + \",\" + (y1 + t01 * y01);\n }\n\n this._ += \"A\" + r + \",\" + r + \",0,0,\" + (+(y01 * x20 > x01 * y20)) + \",\" + (this._x1 = x1 + t21 * x21) + \",\" + (this._y1 = y1 + t21 * y21);\n }\n },\n arc: function(x, y, r, a0, a1, ccw) {\n x = +x, y = +y, r = +r;\n var dx = r * Math.cos(a0),\n dy = r * Math.sin(a0),\n x0 = x + dx,\n y0 = y + dy,\n cw = 1 ^ ccw,\n da = ccw ? a0 - a1 : a1 - a0;\n\n // Is the radius negative? Error.\n if (r < 0) throw new Error(\"negative radius: \" + r);\n\n // Is this path empty? Move to (x0,y0).\n if (this._x1 === null) {\n this._ += \"M\" + x0 + \",\" + y0;\n }\n\n // Or, is (x0,y0) not coincident with the previous point? Line to (x0,y0).\n else if (Math.abs(this._x1 - x0) > epsilon || Math.abs(this._y1 - y0) > epsilon) {\n this._ += \"L\" + x0 + \",\" + y0;\n }\n\n // Is this arc empty? We’re done.\n if (!r) return;\n\n // Does the angle go the wrong way? Flip the direction.\n if (da < 0) da = da % tau + tau;\n\n // Is this a complete circle? Draw two arcs to complete the circle.\n if (da > tauEpsilon) {\n this._ += \"A\" + r + \",\" + r + \",0,1,\" + cw + \",\" + (x - dx) + \",\" + (y - dy) + \"A\" + r + \",\" + r + \",0,1,\" + cw + \",\" + (this._x1 = x0) + \",\" + (this._y1 = y0);\n }\n\n // Is this arc non-empty? Draw an arc!\n else if (da > epsilon) {\n this._ += \"A\" + r + \",\" + r + \",0,\" + (+(da >= pi)) + \",\" + cw + \",\" + (this._x1 = x + r * Math.cos(a1)) + \",\" + (this._y1 = y + r * Math.sin(a1));\n }\n },\n rect: function(x, y, w, h) {\n this._ += \"M\" + (this._x0 = this._x1 = +x) + \",\" + (this._y0 = this._y1 = +y) + \"h\" + (+w) + \"v\" + (+h) + \"h\" + (-w) + \"Z\";\n },\n toString: function() {\n return this._;\n }\n};\n\nexport default path;\n","export default function(x) {\n return function constant() {\n return x;\n };\n}\n","export var abs = Math.abs;\nexport var atan2 = Math.atan2;\nexport var cos = Math.cos;\nexport var max = Math.max;\nexport var min = Math.min;\nexport var sin = Math.sin;\nexport var sqrt = Math.sqrt;\n\nexport var epsilon = 1e-12;\nexport var pi = Math.PI;\nexport var halfPi = pi / 2;\nexport var tau = 2 * pi;\n\nexport function acos(x) {\n return x > 1 ? 0 : x < -1 ? pi : Math.acos(x);\n}\n\nexport function asin(x) {\n return x >= 1 ? halfPi : x <= -1 ? -halfPi : Math.asin(x);\n}\n","import {path} from \"d3-path\";\nimport constant from \"./constant\";\nimport {abs, acos, asin, atan2, cos, epsilon, halfPi, max, min, pi, sin, sqrt, tau} from \"./math\";\n\nfunction arcInnerRadius(d) {\n return d.innerRadius;\n}\n\nfunction arcOuterRadius(d) {\n return d.outerRadius;\n}\n\nfunction arcStartAngle(d) {\n return d.startAngle;\n}\n\nfunction arcEndAngle(d) {\n return d.endAngle;\n}\n\nfunction arcPadAngle(d) {\n return d && d.padAngle; // Note: optional!\n}\n\nfunction intersect(x0, y0, x1, y1, x2, y2, x3, y3) {\n var x10 = x1 - x0, y10 = y1 - y0,\n x32 = x3 - x2, y32 = y3 - y2,\n t = (x32 * (y0 - y2) - y32 * (x0 - x2)) / (y32 * x10 - x32 * y10);\n return [x0 + t * x10, y0 + t * y10];\n}\n\n// Compute perpendicular offset line of length rc.\n// http://mathworld.wolfram.com/Circle-LineIntersection.html\nfunction cornerTangents(x0, y0, x1, y1, r1, rc, cw) {\n var x01 = x0 - x1,\n y01 = y0 - y1,\n lo = (cw ? rc : -rc) / sqrt(x01 * x01 + y01 * y01),\n ox = lo * y01,\n oy = -lo * x01,\n x11 = x0 + ox,\n y11 = y0 + oy,\n x10 = x1 + ox,\n y10 = y1 + oy,\n x00 = (x11 + x10) / 2,\n y00 = (y11 + y10) / 2,\n dx = x10 - x11,\n dy = y10 - y11,\n d2 = dx * dx + dy * dy,\n r = r1 - rc,\n D = x11 * y10 - x10 * y11,\n d = (dy < 0 ? -1 : 1) * sqrt(max(0, r * r * d2 - D * D)),\n cx0 = (D * dy - dx * d) / d2,\n cy0 = (-D * dx - dy * d) / d2,\n cx1 = (D * dy + dx * d) / d2,\n cy1 = (-D * dx + dy * d) / d2,\n dx0 = cx0 - x00,\n dy0 = cy0 - y00,\n dx1 = cx1 - x00,\n dy1 = cy1 - y00;\n\n // Pick the closer of the two intersection points.\n // TODO Is there a faster way to determine which intersection to use?\n if (dx0 * dx0 + dy0 * dy0 > dx1 * dx1 + dy1 * dy1) cx0 = cx1, cy0 = cy1;\n\n return {\n cx: cx0,\n cy: cy0,\n x01: -ox,\n y01: -oy,\n x11: cx0 * (r1 / r - 1),\n y11: cy0 * (r1 / r - 1)\n };\n}\n\nexport default function() {\n var innerRadius = arcInnerRadius,\n outerRadius = arcOuterRadius,\n cornerRadius = constant(0),\n padRadius = null,\n startAngle = arcStartAngle,\n endAngle = arcEndAngle,\n padAngle = arcPadAngle,\n context = null;\n\n function arc() {\n var buffer,\n r,\n r0 = +innerRadius.apply(this, arguments),\n r1 = +outerRadius.apply(this, arguments),\n a0 = startAngle.apply(this, arguments) - halfPi,\n a1 = endAngle.apply(this, arguments) - halfPi,\n da = abs(a1 - a0),\n cw = a1 > a0;\n\n if (!context) context = buffer = path();\n\n // Ensure that the outer radius is always larger than the inner radius.\n if (r1 < r0) r = r1, r1 = r0, r0 = r;\n\n // Is it a point?\n if (!(r1 > epsilon)) context.moveTo(0, 0);\n\n // Or is it a circle or annulus?\n else if (da > tau - epsilon) {\n context.moveTo(r1 * cos(a0), r1 * sin(a0));\n context.arc(0, 0, r1, a0, a1, !cw);\n if (r0 > epsilon) {\n context.moveTo(r0 * cos(a1), r0 * sin(a1));\n context.arc(0, 0, r0, a1, a0, cw);\n }\n }\n\n // Or is it a circular or annular sector?\n else {\n var a01 = a0,\n a11 = a1,\n a00 = a0,\n a10 = a1,\n da0 = da,\n da1 = da,\n ap = padAngle.apply(this, arguments) / 2,\n rp = (ap > epsilon) && (padRadius ? +padRadius.apply(this, arguments) : sqrt(r0 * r0 + r1 * r1)),\n rc = min(abs(r1 - r0) / 2, +cornerRadius.apply(this, arguments)),\n rc0 = rc,\n rc1 = rc,\n t0,\n t1;\n\n // Apply padding? Note that since r1 ≥ r0, da1 ≥ da0.\n if (rp > epsilon) {\n var p0 = asin(rp / r0 * sin(ap)),\n p1 = asin(rp / r1 * sin(ap));\n if ((da0 -= p0 * 2) > epsilon) p0 *= (cw ? 1 : -1), a00 += p0, a10 -= p0;\n else da0 = 0, a00 = a10 = (a0 + a1) / 2;\n if ((da1 -= p1 * 2) > epsilon) p1 *= (cw ? 1 : -1), a01 += p1, a11 -= p1;\n else da1 = 0, a01 = a11 = (a0 + a1) / 2;\n }\n\n var x01 = r1 * cos(a01),\n y01 = r1 * sin(a01),\n x10 = r0 * cos(a10),\n y10 = r0 * sin(a10);\n\n // Apply rounded corners?\n if (rc > epsilon) {\n var x11 = r1 * cos(a11),\n y11 = r1 * sin(a11),\n x00 = r0 * cos(a00),\n y00 = r0 * sin(a00);\n\n // Restrict the corner radius according to the sector angle.\n if (da < pi) {\n var oc = da0 > epsilon ? intersect(x01, y01, x00, y00, x11, y11, x10, y10) : [x10, y10],\n ax = x01 - oc[0],\n ay = y01 - oc[1],\n bx = x11 - oc[0],\n by = y11 - oc[1],\n kc = 1 / sin(acos((ax * bx + ay * by) / (sqrt(ax * ax + ay * ay) * sqrt(bx * bx + by * by))) / 2),\n lc = sqrt(oc[0] * oc[0] + oc[1] * oc[1]);\n rc0 = min(rc, (r0 - lc) / (kc - 1));\n rc1 = min(rc, (r1 - lc) / (kc + 1));\n }\n }\n\n // Is the sector collapsed to a line?\n if (!(da1 > epsilon)) context.moveTo(x01, y01);\n\n // Does the sector’s outer ring have rounded corners?\n else if (rc1 > epsilon) {\n t0 = cornerTangents(x00, y00, x01, y01, r1, rc1, cw);\n t1 = cornerTangents(x11, y11, x10, y10, r1, rc1, cw);\n\n context.moveTo(t0.cx + t0.x01, t0.cy + t0.y01);\n\n // Have the corners merged?\n if (rc1 < rc) context.arc(t0.cx, t0.cy, rc1, atan2(t0.y01, t0.x01), atan2(t1.y01, t1.x01), !cw);\n\n // Otherwise, draw the two corners and the ring.\n else {\n context.arc(t0.cx, t0.cy, rc1, atan2(t0.y01, t0.x01), atan2(t0.y11, t0.x11), !cw);\n context.arc(0, 0, r1, atan2(t0.cy + t0.y11, t0.cx + t0.x11), atan2(t1.cy + t1.y11, t1.cx + t1.x11), !cw);\n context.arc(t1.cx, t1.cy, rc1, atan2(t1.y11, t1.x11), atan2(t1.y01, t1.x01), !cw);\n }\n }\n\n // Or is the outer ring just a circular arc?\n else context.moveTo(x01, y01), context.arc(0, 0, r1, a01, a11, !cw);\n\n // Is there no inner ring, and it’s a circular sector?\n // Or perhaps it’s an annular sector collapsed due to padding?\n if (!(r0 > epsilon) || !(da0 > epsilon)) context.lineTo(x10, y10);\n\n // Does the sector’s inner ring (or point) have rounded corners?\n else if (rc0 > epsilon) {\n t0 = cornerTangents(x10, y10, x11, y11, r0, -rc0, cw);\n t1 = cornerTangents(x01, y01, x00, y00, r0, -rc0, cw);\n\n context.lineTo(t0.cx + t0.x01, t0.cy + t0.y01);\n\n // Have the corners merged?\n if (rc0 < rc) context.arc(t0.cx, t0.cy, rc0, atan2(t0.y01, t0.x01), atan2(t1.y01, t1.x01), !cw);\n\n // Otherwise, draw the two corners and the ring.\n else {\n context.arc(t0.cx, t0.cy, rc0, atan2(t0.y01, t0.x01), atan2(t0.y11, t0.x11), !cw);\n context.arc(0, 0, r0, atan2(t0.cy + t0.y11, t0.cx + t0.x11), atan2(t1.cy + t1.y11, t1.cx + t1.x11), cw);\n context.arc(t1.cx, t1.cy, rc0, atan2(t1.y11, t1.x11), atan2(t1.y01, t1.x01), !cw);\n }\n }\n\n // Or is the inner ring just a circular arc?\n else context.arc(0, 0, r0, a10, a00, cw);\n }\n\n context.closePath();\n\n if (buffer) return context = null, buffer + \"\" || null;\n }\n\n arc.centroid = function() {\n var r = (+innerRadius.apply(this, arguments) + +outerRadius.apply(this, arguments)) / 2,\n a = (+startAngle.apply(this, arguments) + +endAngle.apply(this, arguments)) / 2 - pi / 2;\n return [cos(a) * r, sin(a) * r];\n };\n\n arc.innerRadius = function(_) {\n return arguments.length ? (innerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : innerRadius;\n };\n\n arc.outerRadius = function(_) {\n return arguments.length ? (outerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : outerRadius;\n };\n\n arc.cornerRadius = function(_) {\n return arguments.length ? (cornerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : cornerRadius;\n };\n\n arc.padRadius = function(_) {\n return arguments.length ? (padRadius = _ == null ? null : typeof _ === \"function\" ? _ : constant(+_), arc) : padRadius;\n };\n\n arc.startAngle = function(_) {\n return arguments.length ? (startAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : startAngle;\n };\n\n arc.endAngle = function(_) {\n return arguments.length ? (endAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : endAngle;\n };\n\n arc.padAngle = function(_) {\n return arguments.length ? (padAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : padAngle;\n };\n\n arc.context = function(_) {\n return arguments.length ? ((context = _ == null ? null : _), arc) : context;\n };\n\n return arc;\n}\n","function Linear(context) {\n this._context = context;\n}\n\nLinear.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; // proceed\n default: this._context.lineTo(x, y); break;\n }\n }\n};\n\nexport default function(context) {\n return new Linear(context);\n}\n","export function x(p) {\n return p[0];\n}\n\nexport function y(p) {\n return p[1];\n}\n","import {path} from \"d3-path\";\nimport constant from \"./constant\";\nimport curveLinear from \"./curve/linear\";\nimport {x as pointX, y as pointY} from \"./point\";\n\nexport default function() {\n var x = pointX,\n y = pointY,\n defined = constant(true),\n context = null,\n curve = curveLinear,\n output = null;\n\n function line(data) {\n var i,\n n = data.length,\n d,\n defined0 = false,\n buffer;\n\n if (context == null) output = curve(buffer = path());\n\n for (i = 0; i <= n; ++i) {\n if (!(i < n && defined(d = data[i], i, data)) === defined0) {\n if (defined0 = !defined0) output.lineStart();\n else output.lineEnd();\n }\n if (defined0) output.point(+x(d, i, data), +y(d, i, data));\n }\n\n if (buffer) return output = null, buffer + \"\" || null;\n }\n\n line.x = function(_) {\n return arguments.length ? (x = typeof _ === \"function\" ? _ : constant(+_), line) : x;\n };\n\n line.y = function(_) {\n return arguments.length ? (y = typeof _ === \"function\" ? _ : constant(+_), line) : y;\n };\n\n line.defined = function(_) {\n return arguments.length ? (defined = typeof _ === \"function\" ? _ : constant(!!_), line) : defined;\n };\n\n line.curve = function(_) {\n return arguments.length ? (curve = _, context != null && (output = curve(context)), line) : curve;\n };\n\n line.context = function(_) {\n return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), line) : context;\n };\n\n return line;\n}\n","import {path} from \"d3-path\";\nimport constant from \"./constant\";\nimport curveLinear from \"./curve/linear\";\nimport line from \"./line\";\nimport {x as pointX, y as pointY} from \"./point\";\n\nexport default function() {\n var x0 = pointX,\n x1 = null,\n y0 = constant(0),\n y1 = pointY,\n defined = constant(true),\n context = null,\n curve = curveLinear,\n output = null;\n\n function area(data) {\n var i,\n j,\n k,\n n = data.length,\n d,\n defined0 = false,\n buffer,\n x0z = new Array(n),\n y0z = new Array(n);\n\n if (context == null) output = curve(buffer = path());\n\n for (i = 0; i <= n; ++i) {\n if (!(i < n && defined(d = data[i], i, data)) === defined0) {\n if (defined0 = !defined0) {\n j = i;\n output.areaStart();\n output.lineStart();\n } else {\n output.lineEnd();\n output.lineStart();\n for (k = i - 1; k >= j; --k) {\n output.point(x0z[k], y0z[k]);\n }\n output.lineEnd();\n output.areaEnd();\n }\n }\n if (defined0) {\n x0z[i] = +x0(d, i, data), y0z[i] = +y0(d, i, data);\n output.point(x1 ? +x1(d, i, data) : x0z[i], y1 ? +y1(d, i, data) : y0z[i]);\n }\n }\n\n if (buffer) return output = null, buffer + \"\" || null;\n }\n\n function arealine() {\n return line().defined(defined).curve(curve).context(context);\n }\n\n area.x = function(_) {\n return arguments.length ? (x0 = typeof _ === \"function\" ? _ : constant(+_), x1 = null, area) : x0;\n };\n\n area.x0 = function(_) {\n return arguments.length ? (x0 = typeof _ === \"function\" ? _ : constant(+_), area) : x0;\n };\n\n area.x1 = function(_) {\n return arguments.length ? (x1 = _ == null ? null : typeof _ === \"function\" ? _ : constant(+_), area) : x1;\n };\n\n area.y = function(_) {\n return arguments.length ? (y0 = typeof _ === \"function\" ? _ : constant(+_), y1 = null, area) : y0;\n };\n\n area.y0 = function(_) {\n return arguments.length ? (y0 = typeof _ === \"function\" ? _ : constant(+_), area) : y0;\n };\n\n area.y1 = function(_) {\n return arguments.length ? (y1 = _ == null ? null : typeof _ === \"function\" ? _ : constant(+_), area) : y1;\n };\n\n area.lineX0 =\n area.lineY0 = function() {\n return arealine().x(x0).y(y0);\n };\n\n area.lineY1 = function() {\n return arealine().x(x0).y(y1);\n };\n\n area.lineX1 = function() {\n return arealine().x(x1).y(y0);\n };\n\n area.defined = function(_) {\n return arguments.length ? (defined = typeof _ === \"function\" ? _ : constant(!!_), area) : defined;\n };\n\n area.curve = function(_) {\n return arguments.length ? (curve = _, context != null && (output = curve(context)), area) : curve;\n };\n\n area.context = function(_) {\n return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), area) : context;\n };\n\n return area;\n}\n","export default function(a, b) {\n return b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN;\n}\n","export default function(d) {\n return d;\n}\n","import curveLinear from \"./linear\";\n\nexport var curveRadialLinear = curveRadial(curveLinear);\n\nfunction Radial(curve) {\n this._curve = curve;\n}\n\nRadial.prototype = {\n areaStart: function() {\n this._curve.areaStart();\n },\n areaEnd: function() {\n this._curve.areaEnd();\n },\n lineStart: function() {\n this._curve.lineStart();\n },\n lineEnd: function() {\n this._curve.lineEnd();\n },\n point: function(a, r) {\n this._curve.point(r * Math.sin(a), r * -Math.cos(a));\n }\n};\n\nexport default function curveRadial(curve) {\n\n function radial(context) {\n return new Radial(curve(context));\n }\n\n radial._curve = curve;\n\n return radial;\n}\n","import curveRadial, {curveRadialLinear} from \"./curve/radial\";\nimport line from \"./line\";\n\nexport function lineRadial(l) {\n var c = l.curve;\n\n l.angle = l.x, delete l.x;\n l.radius = l.y, delete l.y;\n\n l.curve = function(_) {\n return arguments.length ? c(curveRadial(_)) : c()._curve;\n };\n\n return l;\n}\n\nexport default function() {\n return lineRadial(line().curve(curveRadialLinear));\n}\n","export var slice = Array.prototype.slice;\n","import {pi, tau} from \"../math\";\n\nexport default {\n draw: function(context, size) {\n var r = Math.sqrt(size / pi);\n context.moveTo(r, 0);\n context.arc(0, 0, r, 0, tau);\n }\n};\n","export default {\n draw: function(context, size) {\n var r = Math.sqrt(size / 5) / 2;\n context.moveTo(-3 * r, -r);\n context.lineTo(-r, -r);\n context.lineTo(-r, -3 * r);\n context.lineTo(r, -3 * r);\n context.lineTo(r, -r);\n context.lineTo(3 * r, -r);\n context.lineTo(3 * r, r);\n context.lineTo(r, r);\n context.lineTo(r, 3 * r);\n context.lineTo(-r, 3 * r);\n context.lineTo(-r, r);\n context.lineTo(-3 * r, r);\n context.closePath();\n }\n};\n","var tan30 = Math.sqrt(1 / 3),\n tan30_2 = tan30 * 2;\n\nexport default {\n draw: function(context, size) {\n var y = Math.sqrt(size / tan30_2),\n x = y * tan30;\n context.moveTo(0, -y);\n context.lineTo(x, 0);\n context.lineTo(0, y);\n context.lineTo(-x, 0);\n context.closePath();\n }\n};\n","import {pi, tau} from \"../math\";\n\nvar ka = 0.89081309152928522810,\n kr = Math.sin(pi / 10) / Math.sin(7 * pi / 10),\n kx = Math.sin(tau / 10) * kr,\n ky = -Math.cos(tau / 10) * kr;\n\nexport default {\n draw: function(context, size) {\n var r = Math.sqrt(size * ka),\n x = kx * r,\n y = ky * r;\n context.moveTo(0, -r);\n context.lineTo(x, y);\n for (var i = 1; i < 5; ++i) {\n var a = tau * i / 5,\n c = Math.cos(a),\n s = Math.sin(a);\n context.lineTo(s * r, -c * r);\n context.lineTo(c * x - s * y, s * x + c * y);\n }\n context.closePath();\n }\n};\n","export default {\n draw: function(context, size) {\n var w = Math.sqrt(size),\n x = -w / 2;\n context.rect(x, x, w, w);\n }\n};\n","var sqrt3 = Math.sqrt(3);\n\nexport default {\n draw: function(context, size) {\n var y = -Math.sqrt(size / (sqrt3 * 3));\n context.moveTo(0, y * 2);\n context.lineTo(-sqrt3 * y, -y);\n context.lineTo(sqrt3 * y, -y);\n context.closePath();\n }\n};\n","var c = -0.5,\n s = Math.sqrt(3) / 2,\n k = 1 / Math.sqrt(12),\n a = (k / 2 + 1) * 3;\n\nexport default {\n draw: function(context, size) {\n var r = Math.sqrt(size / a),\n x0 = r / 2,\n y0 = r * k,\n x1 = x0,\n y1 = r * k + r,\n x2 = -x1,\n y2 = y1;\n context.moveTo(x0, y0);\n context.lineTo(x1, y1);\n context.lineTo(x2, y2);\n context.lineTo(c * x0 - s * y0, s * x0 + c * y0);\n context.lineTo(c * x1 - s * y1, s * x1 + c * y1);\n context.lineTo(c * x2 - s * y2, s * x2 + c * y2);\n context.lineTo(c * x0 + s * y0, c * y0 - s * x0);\n context.lineTo(c * x1 + s * y1, c * y1 - s * x1);\n context.lineTo(c * x2 + s * y2, c * y2 - s * x2);\n context.closePath();\n }\n};\n","export default function() {}\n","export function point(that, x, y) {\n that._context.bezierCurveTo(\n (2 * that._x0 + that._x1) / 3,\n (2 * that._y0 + that._y1) / 3,\n (that._x0 + 2 * that._x1) / 3,\n (that._y0 + 2 * that._y1) / 3,\n (that._x0 + 4 * that._x1 + x) / 6,\n (that._y0 + 4 * that._y1 + y) / 6\n );\n}\n\nexport function Basis(context) {\n this._context = context;\n}\n\nBasis.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 =\n this._y0 = this._y1 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 3: point(this, this._x1, this._y1); // proceed\n case 2: this._context.lineTo(this._x1, this._y1); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; this._context.lineTo((5 * this._x0 + this._x1) / 6, (5 * this._y0 + this._y1) / 6); // proceed\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n }\n};\n\nexport default function(context) {\n return new Basis(context);\n}\n","import noop from \"../noop\";\nimport {point} from \"./basis\";\n\nfunction BasisClosed(context) {\n this._context = context;\n}\n\nBasisClosed.prototype = {\n areaStart: noop,\n areaEnd: noop,\n lineStart: function() {\n this._x0 = this._x1 = this._x2 = this._x3 = this._x4 =\n this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 1: {\n this._context.moveTo(this._x2, this._y2);\n this._context.closePath();\n break;\n }\n case 2: {\n this._context.moveTo((this._x2 + 2 * this._x3) / 3, (this._y2 + 2 * this._y3) / 3);\n this._context.lineTo((this._x3 + 2 * this._x2) / 3, (this._y3 + 2 * this._y2) / 3);\n this._context.closePath();\n break;\n }\n case 3: {\n this.point(this._x2, this._y2);\n this.point(this._x3, this._y3);\n this.point(this._x4, this._y4);\n break;\n }\n }\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._x2 = x, this._y2 = y; break;\n case 1: this._point = 2; this._x3 = x, this._y3 = y; break;\n case 2: this._point = 3; this._x4 = x, this._y4 = y; this._context.moveTo((this._x0 + 4 * this._x1 + x) / 6, (this._y0 + 4 * this._y1 + y) / 6); break;\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n }\n};\n\nexport default function(context) {\n return new BasisClosed(context);\n}\n","import {point} from \"./basis\";\n\nfunction BasisOpen(context) {\n this._context = context;\n}\n\nBasisOpen.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 =\n this._y0 = this._y1 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; var x0 = (this._x0 + 4 * this._x1 + x) / 6, y0 = (this._y0 + 4 * this._y1 + y) / 6; this._line ? this._context.lineTo(x0, y0) : this._context.moveTo(x0, y0); break;\n case 3: this._point = 4; // proceed\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n }\n};\n\nexport default function(context) {\n return new BasisOpen(context);\n}\n","import {Basis} from \"./basis\";\n\nfunction Bundle(context, beta) {\n this._basis = new Basis(context);\n this._beta = beta;\n}\n\nBundle.prototype = {\n lineStart: function() {\n this._x = [];\n this._y = [];\n this._basis.lineStart();\n },\n lineEnd: function() {\n var x = this._x,\n y = this._y,\n j = x.length - 1;\n\n if (j > 0) {\n var x0 = x[0],\n y0 = y[0],\n dx = x[j] - x0,\n dy = y[j] - y0,\n i = -1,\n t;\n\n while (++i <= j) {\n t = i / j;\n this._basis.point(\n this._beta * x[i] + (1 - this._beta) * (x0 + t * dx),\n this._beta * y[i] + (1 - this._beta) * (y0 + t * dy)\n );\n }\n }\n\n this._x = this._y = null;\n this._basis.lineEnd();\n },\n point: function(x, y) {\n this._x.push(+x);\n this._y.push(+y);\n }\n};\n\nexport default (function custom(beta) {\n\n function bundle(context) {\n return beta === 1 ? new Basis(context) : new Bundle(context, beta);\n }\n\n bundle.beta = function(beta) {\n return custom(+beta);\n };\n\n return bundle;\n})(0.85);\n","export function point(that, x, y) {\n that._context.bezierCurveTo(\n that._x1 + that._k * (that._x2 - that._x0),\n that._y1 + that._k * (that._y2 - that._y0),\n that._x2 + that._k * (that._x1 - x),\n that._y2 + that._k * (that._y1 - y),\n that._x2,\n that._y2\n );\n}\n\nexport function Cardinal(context, tension) {\n this._context = context;\n this._k = (1 - tension) / 6;\n}\n\nCardinal.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 2: this._context.lineTo(this._x2, this._y2); break;\n case 3: point(this, this._x1, this._y1); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; this._x1 = x, this._y1 = y; break;\n case 2: this._point = 3; // proceed\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(tension) {\n\n function cardinal(context) {\n return new Cardinal(context, tension);\n }\n\n cardinal.tension = function(tension) {\n return custom(+tension);\n };\n\n return cardinal;\n})(0);\n","import noop from \"../noop\";\nimport {point} from \"./cardinal\";\n\nexport function CardinalClosed(context, tension) {\n this._context = context;\n this._k = (1 - tension) / 6;\n}\n\nCardinalClosed.prototype = {\n areaStart: noop,\n areaEnd: noop,\n lineStart: function() {\n this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = this._x5 =\n this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = this._y5 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 1: {\n this._context.moveTo(this._x3, this._y3);\n this._context.closePath();\n break;\n }\n case 2: {\n this._context.lineTo(this._x3, this._y3);\n this._context.closePath();\n break;\n }\n case 3: {\n this.point(this._x3, this._y3);\n this.point(this._x4, this._y4);\n this.point(this._x5, this._y5);\n break;\n }\n }\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._x3 = x, this._y3 = y; break;\n case 1: this._point = 2; this._context.moveTo(this._x4 = x, this._y4 = y); break;\n case 2: this._point = 3; this._x5 = x, this._y5 = y; break;\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(tension) {\n\n function cardinal(context) {\n return new CardinalClosed(context, tension);\n }\n\n cardinal.tension = function(tension) {\n return custom(+tension);\n };\n\n return cardinal;\n})(0);\n","import {point} from \"./cardinal\";\n\nexport function CardinalOpen(context, tension) {\n this._context = context;\n this._k = (1 - tension) / 6;\n}\n\nCardinalOpen.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; this._line ? this._context.lineTo(this._x2, this._y2) : this._context.moveTo(this._x2, this._y2); break;\n case 3: this._point = 4; // proceed\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(tension) {\n\n function cardinal(context) {\n return new CardinalOpen(context, tension);\n }\n\n cardinal.tension = function(tension) {\n return custom(+tension);\n };\n\n return cardinal;\n})(0);\n","import {epsilon} from \"../math\";\nimport {Cardinal} from \"./cardinal\";\n\nexport function point(that, x, y) {\n var x1 = that._x1,\n y1 = that._y1,\n x2 = that._x2,\n y2 = that._y2;\n\n if (that._l01_a > epsilon) {\n var a = 2 * that._l01_2a + 3 * that._l01_a * that._l12_a + that._l12_2a,\n n = 3 * that._l01_a * (that._l01_a + that._l12_a);\n x1 = (x1 * a - that._x0 * that._l12_2a + that._x2 * that._l01_2a) / n;\n y1 = (y1 * a - that._y0 * that._l12_2a + that._y2 * that._l01_2a) / n;\n }\n\n if (that._l23_a > epsilon) {\n var b = 2 * that._l23_2a + 3 * that._l23_a * that._l12_a + that._l12_2a,\n m = 3 * that._l23_a * (that._l23_a + that._l12_a);\n x2 = (x2 * b + that._x1 * that._l23_2a - x * that._l12_2a) / m;\n y2 = (y2 * b + that._y1 * that._l23_2a - y * that._l12_2a) / m;\n }\n\n that._context.bezierCurveTo(x1, y1, x2, y2, that._x2, that._y2);\n}\n\nfunction CatmullRom(context, alpha) {\n this._context = context;\n this._alpha = alpha;\n}\n\nCatmullRom.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._l01_a = this._l12_a = this._l23_a =\n this._l01_2a = this._l12_2a = this._l23_2a =\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 2: this._context.lineTo(this._x2, this._y2); break;\n case 3: this.point(this._x2, this._y2); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n\n if (this._point) {\n var x23 = this._x2 - x,\n y23 = this._y2 - y;\n this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));\n }\n\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; // proceed\n default: point(this, x, y); break;\n }\n\n this._l01_a = this._l12_a, this._l12_a = this._l23_a;\n this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(alpha) {\n\n function catmullRom(context) {\n return alpha ? new CatmullRom(context, alpha) : new Cardinal(context, 0);\n }\n\n catmullRom.alpha = function(alpha) {\n return custom(+alpha);\n };\n\n return catmullRom;\n})(0.5);\n","import {CardinalClosed} from \"./cardinalClosed\";\nimport noop from \"../noop\";\nimport {point} from \"./catmullRom\";\n\nfunction CatmullRomClosed(context, alpha) {\n this._context = context;\n this._alpha = alpha;\n}\n\nCatmullRomClosed.prototype = {\n areaStart: noop,\n areaEnd: noop,\n lineStart: function() {\n this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = this._x5 =\n this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = this._y5 = NaN;\n this._l01_a = this._l12_a = this._l23_a =\n this._l01_2a = this._l12_2a = this._l23_2a =\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 1: {\n this._context.moveTo(this._x3, this._y3);\n this._context.closePath();\n break;\n }\n case 2: {\n this._context.lineTo(this._x3, this._y3);\n this._context.closePath();\n break;\n }\n case 3: {\n this.point(this._x3, this._y3);\n this.point(this._x4, this._y4);\n this.point(this._x5, this._y5);\n break;\n }\n }\n },\n point: function(x, y) {\n x = +x, y = +y;\n\n if (this._point) {\n var x23 = this._x2 - x,\n y23 = this._y2 - y;\n this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));\n }\n\n switch (this._point) {\n case 0: this._point = 1; this._x3 = x, this._y3 = y; break;\n case 1: this._point = 2; this._context.moveTo(this._x4 = x, this._y4 = y); break;\n case 2: this._point = 3; this._x5 = x, this._y5 = y; break;\n default: point(this, x, y); break;\n }\n\n this._l01_a = this._l12_a, this._l12_a = this._l23_a;\n this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(alpha) {\n\n function catmullRom(context) {\n return alpha ? new CatmullRomClosed(context, alpha) : new CardinalClosed(context, 0);\n }\n\n catmullRom.alpha = function(alpha) {\n return custom(+alpha);\n };\n\n return catmullRom;\n})(0.5);\n","import {CardinalOpen} from \"./cardinalOpen\";\nimport {point} from \"./catmullRom\";\n\nfunction CatmullRomOpen(context, alpha) {\n this._context = context;\n this._alpha = alpha;\n}\n\nCatmullRomOpen.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._l01_a = this._l12_a = this._l23_a =\n this._l01_2a = this._l12_2a = this._l23_2a =\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n\n if (this._point) {\n var x23 = this._x2 - x,\n y23 = this._y2 - y;\n this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));\n }\n\n switch (this._point) {\n case 0: this._point = 1; break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; this._line ? this._context.lineTo(this._x2, this._y2) : this._context.moveTo(this._x2, this._y2); break;\n case 3: this._point = 4; // proceed\n default: point(this, x, y); break;\n }\n\n this._l01_a = this._l12_a, this._l12_a = this._l23_a;\n this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(alpha) {\n\n function catmullRom(context) {\n return alpha ? new CatmullRomOpen(context, alpha) : new CardinalOpen(context, 0);\n }\n\n catmullRom.alpha = function(alpha) {\n return custom(+alpha);\n };\n\n return catmullRom;\n})(0.5);\n","import noop from \"../noop\";\n\nfunction LinearClosed(context) {\n this._context = context;\n}\n\nLinearClosed.prototype = {\n areaStart: noop,\n areaEnd: noop,\n lineStart: function() {\n this._point = 0;\n },\n lineEnd: function() {\n if (this._point) this._context.closePath();\n },\n point: function(x, y) {\n x = +x, y = +y;\n if (this._point) this._context.lineTo(x, y);\n else this._point = 1, this._context.moveTo(x, y);\n }\n};\n\nexport default function(context) {\n return new LinearClosed(context);\n}\n","function sign(x) {\n return x < 0 ? -1 : 1;\n}\n\n// Calculate the slopes of the tangents (Hermite-type interpolation) based on\n// the following paper: Steffen, M. 1990. A Simple Method for Monotonic\n// Interpolation in One Dimension. Astronomy and Astrophysics, Vol. 239, NO.\n// NOV(II), P. 443, 1990.\nfunction slope3(that, x2, y2) {\n var h0 = that._x1 - that._x0,\n h1 = x2 - that._x1,\n s0 = (that._y1 - that._y0) / (h0 || h1 < 0 && -0),\n s1 = (y2 - that._y1) / (h1 || h0 < 0 && -0),\n p = (s0 * h1 + s1 * h0) / (h0 + h1);\n return (sign(s0) + sign(s1)) * Math.min(Math.abs(s0), Math.abs(s1), 0.5 * Math.abs(p)) || 0;\n}\n\n// Calculate a one-sided slope.\nfunction slope2(that, t) {\n var h = that._x1 - that._x0;\n return h ? (3 * (that._y1 - that._y0) / h - t) / 2 : t;\n}\n\n// According to https://en.wikipedia.org/wiki/Cubic_Hermite_spline#Representations\n// \"you can express cubic Hermite interpolation in terms of cubic Bézier curves\n// with respect to the four values p0, p0 + m0 / 3, p1 - m1 / 3, p1\".\nfunction point(that, t0, t1) {\n var x0 = that._x0,\n y0 = that._y0,\n x1 = that._x1,\n y1 = that._y1,\n dx = (x1 - x0) / 3;\n that._context.bezierCurveTo(x0 + dx, y0 + dx * t0, x1 - dx, y1 - dx * t1, x1, y1);\n}\n\nfunction MonotoneX(context) {\n this._context = context;\n}\n\nMonotoneX.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 =\n this._y0 = this._y1 =\n this._t0 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 2: this._context.lineTo(this._x1, this._y1); break;\n case 3: point(this, this._t0, slope2(this, this._t0)); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n var t1 = NaN;\n\n x = +x, y = +y;\n if (x === this._x1 && y === this._y1) return; // Ignore coincident points.\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; point(this, slope2(this, t1 = slope3(this, x, y)), t1); break;\n default: point(this, this._t0, t1 = slope3(this, x, y)); break;\n }\n\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n this._t0 = t1;\n }\n}\n\nfunction MonotoneY(context) {\n this._context = new ReflectContext(context);\n}\n\n(MonotoneY.prototype = Object.create(MonotoneX.prototype)).point = function(x, y) {\n MonotoneX.prototype.point.call(this, y, x);\n};\n\nfunction ReflectContext(context) {\n this._context = context;\n}\n\nReflectContext.prototype = {\n moveTo: function(x, y) { this._context.moveTo(y, x); },\n closePath: function() { this._context.closePath(); },\n lineTo: function(x, y) { this._context.lineTo(y, x); },\n bezierCurveTo: function(x1, y1, x2, y2, x, y) { this._context.bezierCurveTo(y1, x1, y2, x2, y, x); }\n};\n\nexport function monotoneX(context) {\n return new MonotoneX(context);\n}\n\nexport function monotoneY(context) {\n return new MonotoneY(context);\n}\n","function Natural(context) {\n this._context = context;\n}\n\nNatural.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x = [];\n this._y = [];\n },\n lineEnd: function() {\n var x = this._x,\n y = this._y,\n n = x.length;\n\n if (n) {\n this._line ? this._context.lineTo(x[0], y[0]) : this._context.moveTo(x[0], y[0]);\n if (n === 2) {\n this._context.lineTo(x[1], y[1]);\n } else {\n var px = controlPoints(x),\n py = controlPoints(y);\n for (var i0 = 0, i1 = 1; i1 < n; ++i0, ++i1) {\n this._context.bezierCurveTo(px[0][i0], py[0][i0], px[1][i0], py[1][i0], x[i1], y[i1]);\n }\n }\n }\n\n if (this._line || (this._line !== 0 && n === 1)) this._context.closePath();\n this._line = 1 - this._line;\n this._x = this._y = null;\n },\n point: function(x, y) {\n this._x.push(+x);\n this._y.push(+y);\n }\n};\n\n// See https://www.particleincell.com/2012/bezier-splines/ for derivation.\nfunction controlPoints(x) {\n var i,\n n = x.length - 1,\n m,\n a = new Array(n),\n b = new Array(n),\n r = new Array(n);\n a[0] = 0, b[0] = 2, r[0] = x[0] + 2 * x[1];\n for (i = 1; i < n - 1; ++i) a[i] = 1, b[i] = 4, r[i] = 4 * x[i] + 2 * x[i + 1];\n a[n - 1] = 2, b[n - 1] = 7, r[n - 1] = 8 * x[n - 1] + x[n];\n for (i = 1; i < n; ++i) m = a[i] / b[i - 1], b[i] -= m, r[i] -= m * r[i - 1];\n a[n - 1] = r[n - 1] / b[n - 1];\n for (i = n - 2; i >= 0; --i) a[i] = (r[i] - a[i + 1]) / b[i];\n b[n - 1] = (x[n] + a[n - 1]) / 2;\n for (i = 0; i < n - 1; ++i) b[i] = 2 * x[i + 1] - a[i + 1];\n return [a, b];\n}\n\nexport default function(context) {\n return new Natural(context);\n}\n","function Step(context, t) {\n this._context = context;\n this._t = t;\n}\n\nStep.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x = this._y = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n if (0 < this._t && this._t < 1 && this._point === 2) this._context.lineTo(this._x, this._y);\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n if (this._line >= 0) this._t = 1 - this._t, this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; // proceed\n default: {\n if (this._t <= 0) {\n this._context.lineTo(this._x, y);\n this._context.lineTo(x, y);\n } else {\n var x1 = this._x * (1 - this._t) + x * this._t;\n this._context.lineTo(x1, this._y);\n this._context.lineTo(x1, y);\n }\n break;\n }\n }\n this._x = x, this._y = y;\n }\n};\n\nexport default function(context) {\n return new Step(context, 0.5);\n}\n\nexport function stepBefore(context) {\n return new Step(context, 0);\n}\n\nexport function stepAfter(context) {\n return new Step(context, 1);\n}\n","export default function(series, order) {\n if (!((n = series.length) > 1)) return;\n for (var i = 1, j, s0, s1 = series[order[0]], n, m = s1.length; i < n; ++i) {\n s0 = s1, s1 = series[order[i]];\n for (j = 0; j < m; ++j) {\n s1[j][1] += s1[j][0] = isNaN(s0[j][1]) ? s0[j][0] : s0[j][1];\n }\n }\n}\n","export default function(series) {\n var n = series.length, o = new Array(n);\n while (--n >= 0) o[n] = n;\n return o;\n}\n","import {slice} from \"./array\";\nimport constant from \"./constant\";\nimport offsetNone from \"./offset/none\";\nimport orderNone from \"./order/none\";\n\nfunction stackValue(d, key) {\n return d[key];\n}\n\nexport default function() {\n var keys = constant([]),\n order = orderNone,\n offset = offsetNone,\n value = stackValue;\n\n function stack(data) {\n var kz = keys.apply(this, arguments),\n i,\n m = data.length,\n n = kz.length,\n sz = new Array(n),\n oz;\n\n for (i = 0; i < n; ++i) {\n for (var ki = kz[i], si = sz[i] = new Array(m), j = 0, sij; j < m; ++j) {\n si[j] = sij = [0, +value(data[j], ki, j, data)];\n sij.data = data[j];\n }\n si.key = ki;\n }\n\n for (i = 0, oz = order(sz); i < n; ++i) {\n sz[oz[i]].index = i;\n }\n\n offset(sz, oz);\n return sz;\n }\n\n stack.keys = function(_) {\n return arguments.length ? (keys = typeof _ === \"function\" ? _ : constant(slice.call(_)), stack) : keys;\n };\n\n stack.value = function(_) {\n return arguments.length ? (value = typeof _ === \"function\" ? _ : constant(+_), stack) : value;\n };\n\n stack.order = function(_) {\n return arguments.length ? (order = _ == null ? orderNone : typeof _ === \"function\" ? _ : constant(slice.call(_)), stack) : order;\n };\n\n stack.offset = function(_) {\n return arguments.length ? (offset = _ == null ? offsetNone : _, stack) : offset;\n };\n\n return stack;\n}\n","import none from \"./none\";\n\nexport default function(series) {\n var sums = series.map(sum);\n return none(series).sort(function(a, b) { return sums[a] - sums[b]; });\n}\n\nexport function sum(series) {\n var s = 0, i = -1, n = series.length, v;\n while (++i < n) if (v = +series[i][1]) s += v;\n return s;\n}\n","export function cubicIn(t) {\n return t * t * t;\n}\n\nexport function cubicOut(t) {\n return --t * t * t + 1;\n}\n\nexport function cubicInOut(t) {\n return ((t *= 2) <= 1 ? t * t * t : (t -= 2) * t * t + 2) / 2;\n}\n","var exponent = 3;\n\nexport var polyIn = (function custom(e) {\n e = +e;\n\n function polyIn(t) {\n return Math.pow(t, e);\n }\n\n polyIn.exponent = custom;\n\n return polyIn;\n})(exponent);\n\nexport var polyOut = (function custom(e) {\n e = +e;\n\n function polyOut(t) {\n return 1 - Math.pow(1 - t, e);\n }\n\n polyOut.exponent = custom;\n\n return polyOut;\n})(exponent);\n\nexport var polyInOut = (function custom(e) {\n e = +e;\n\n function polyInOut(t) {\n return ((t *= 2) <= 1 ? Math.pow(t, e) : 2 - Math.pow(2 - t, e)) / 2;\n }\n\n polyInOut.exponent = custom;\n\n return polyInOut;\n})(exponent);\n","var pi = Math.PI,\n halfPi = pi / 2;\n\nexport function sinIn(t) {\n return 1 - Math.cos(t * halfPi);\n}\n\nexport function sinOut(t) {\n return Math.sin(t * halfPi);\n}\n\nexport function sinInOut(t) {\n return (1 - Math.cos(pi * t)) / 2;\n}\n","var b1 = 4 / 11,\n b2 = 6 / 11,\n b3 = 8 / 11,\n b4 = 3 / 4,\n b5 = 9 / 11,\n b6 = 10 / 11,\n b7 = 15 / 16,\n b8 = 21 / 22,\n b9 = 63 / 64,\n b0 = 1 / b1 / b1;\n\nexport function bounceIn(t) {\n return 1 - bounceOut(1 - t);\n}\n\nexport function bounceOut(t) {\n return (t = +t) < b1 ? b0 * t * t : t < b3 ? b0 * (t -= b2) * t + b4 : t < b6 ? b0 * (t -= b5) * t + b7 : b0 * (t -= b8) * t + b9;\n}\n\nexport function bounceInOut(t) {\n return ((t *= 2) <= 1 ? 1 - bounceOut(1 - t) : bounceOut(t - 1) + 1) / 2;\n}\n","var overshoot = 1.70158;\n\nexport var backIn = (function custom(s) {\n s = +s;\n\n function backIn(t) {\n return t * t * ((s + 1) * t - s);\n }\n\n backIn.overshoot = custom;\n\n return backIn;\n})(overshoot);\n\nexport var backOut = (function custom(s) {\n s = +s;\n\n function backOut(t) {\n return --t * t * ((s + 1) * t + s) + 1;\n }\n\n backOut.overshoot = custom;\n\n return backOut;\n})(overshoot);\n\nexport var backInOut = (function custom(s) {\n s = +s;\n\n function backInOut(t) {\n return ((t *= 2) < 1 ? t * t * ((s + 1) * t - s) : (t -= 2) * t * ((s + 1) * t + s) + 2) / 2;\n }\n\n backInOut.overshoot = custom;\n\n return backInOut;\n})(overshoot);\n","var tau = 2 * Math.PI,\n amplitude = 1,\n period = 0.3;\n\nexport var elasticIn = (function custom(a, p) {\n var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau);\n\n function elasticIn(t) {\n return a * Math.pow(2, 10 * --t) * Math.sin((s - t) / p);\n }\n\n elasticIn.amplitude = function(a) { return custom(a, p * tau); };\n elasticIn.period = function(p) { return custom(a, p); };\n\n return elasticIn;\n})(amplitude, period);\n\nexport var elasticOut = (function custom(a, p) {\n var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau);\n\n function elasticOut(t) {\n return 1 - a * Math.pow(2, -10 * (t = +t)) * Math.sin((t + s) / p);\n }\n\n elasticOut.amplitude = function(a) { return custom(a, p * tau); };\n elasticOut.period = function(p) { return custom(a, p); };\n\n return elasticOut;\n})(amplitude, period);\n\nexport var elasticInOut = (function custom(a, p) {\n var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau);\n\n function elasticInOut(t) {\n return ((t = t * 2 - 1) < 0\n ? a * Math.pow(2, 10 * t) * Math.sin((s - t) / p)\n : 2 - a * Math.pow(2, -10 * t) * Math.sin((s + t) / p)) / 2;\n }\n\n elasticInOut.amplitude = function(a) { return custom(a, p * tau); };\n elasticInOut.period = function(p) { return custom(a, p); };\n\n return elasticInOut;\n})(amplitude, period);\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","export function x(d) {\n return d[0];\n}\n\nexport function y(d) {\n return d[1];\n}\n","function RedBlackTree() {\n this._ = null; // root node\n}\n\nexport function RedBlackNode(node) {\n node.U = // parent node\n node.C = // color - true for red, false for black\n node.L = // left node\n node.R = // right node\n node.P = // previous node\n node.N = null; // next node\n}\n\nRedBlackTree.prototype = {\n constructor: RedBlackTree,\n\n insert: function(after, node) {\n var parent, grandpa, uncle;\n\n if (after) {\n node.P = after;\n node.N = after.N;\n if (after.N) after.N.P = node;\n after.N = node;\n if (after.R) {\n after = after.R;\n while (after.L) after = after.L;\n after.L = node;\n } else {\n after.R = node;\n }\n parent = after;\n } else if (this._) {\n after = RedBlackFirst(this._);\n node.P = null;\n node.N = after;\n after.P = after.L = node;\n parent = after;\n } else {\n node.P = node.N = null;\n this._ = node;\n parent = null;\n }\n node.L = node.R = null;\n node.U = parent;\n node.C = true;\n\n after = node;\n while (parent && parent.C) {\n grandpa = parent.U;\n if (parent === grandpa.L) {\n uncle = grandpa.R;\n if (uncle && uncle.C) {\n parent.C = uncle.C = false;\n grandpa.C = true;\n after = grandpa;\n } else {\n if (after === parent.R) {\n RedBlackRotateLeft(this, parent);\n after = parent;\n parent = after.U;\n }\n parent.C = false;\n grandpa.C = true;\n RedBlackRotateRight(this, grandpa);\n }\n } else {\n uncle = grandpa.L;\n if (uncle && uncle.C) {\n parent.C = uncle.C = false;\n grandpa.C = true;\n after = grandpa;\n } else {\n if (after === parent.L) {\n RedBlackRotateRight(this, parent);\n after = parent;\n parent = after.U;\n }\n parent.C = false;\n grandpa.C = true;\n RedBlackRotateLeft(this, grandpa);\n }\n }\n parent = after.U;\n }\n this._.C = false;\n },\n\n remove: function(node) {\n if (node.N) node.N.P = node.P;\n if (node.P) node.P.N = node.N;\n node.N = node.P = null;\n\n var parent = node.U,\n sibling,\n left = node.L,\n right = node.R,\n next,\n red;\n\n if (!left) next = right;\n else if (!right) next = left;\n else next = RedBlackFirst(right);\n\n if (parent) {\n if (parent.L === node) parent.L = next;\n else parent.R = next;\n } else {\n this._ = next;\n }\n\n if (left && right) {\n red = next.C;\n next.C = node.C;\n next.L = left;\n left.U = next;\n if (next !== right) {\n parent = next.U;\n next.U = node.U;\n node = next.R;\n parent.L = node;\n next.R = right;\n right.U = next;\n } else {\n next.U = parent;\n parent = next;\n node = next.R;\n }\n } else {\n red = node.C;\n node = next;\n }\n\n if (node) node.U = parent;\n if (red) return;\n if (node && node.C) { node.C = false; return; }\n\n do {\n if (node === this._) break;\n if (node === parent.L) {\n sibling = parent.R;\n if (sibling.C) {\n sibling.C = false;\n parent.C = true;\n RedBlackRotateLeft(this, parent);\n sibling = parent.R;\n }\n if ((sibling.L && sibling.L.C)\n || (sibling.R && sibling.R.C)) {\n if (!sibling.R || !sibling.R.C) {\n sibling.L.C = false;\n sibling.C = true;\n RedBlackRotateRight(this, sibling);\n sibling = parent.R;\n }\n sibling.C = parent.C;\n parent.C = sibling.R.C = false;\n RedBlackRotateLeft(this, parent);\n node = this._;\n break;\n }\n } else {\n sibling = parent.L;\n if (sibling.C) {\n sibling.C = false;\n parent.C = true;\n RedBlackRotateRight(this, parent);\n sibling = parent.L;\n }\n if ((sibling.L && sibling.L.C)\n || (sibling.R && sibling.R.C)) {\n if (!sibling.L || !sibling.L.C) {\n sibling.R.C = false;\n sibling.C = true;\n RedBlackRotateLeft(this, sibling);\n sibling = parent.L;\n }\n sibling.C = parent.C;\n parent.C = sibling.L.C = false;\n RedBlackRotateRight(this, parent);\n node = this._;\n break;\n }\n }\n sibling.C = true;\n node = parent;\n parent = parent.U;\n } while (!node.C);\n\n if (node) node.C = false;\n }\n};\n\nfunction RedBlackRotateLeft(tree, node) {\n var p = node,\n q = node.R,\n parent = p.U;\n\n if (parent) {\n if (parent.L === p) parent.L = q;\n else parent.R = q;\n } else {\n tree._ = q;\n }\n\n q.U = parent;\n p.U = q;\n p.R = q.L;\n if (p.R) p.R.U = p;\n q.L = p;\n}\n\nfunction RedBlackRotateRight(tree, node) {\n var p = node,\n q = node.L,\n parent = p.U;\n\n if (parent) {\n if (parent.L === p) parent.L = q;\n else parent.R = q;\n } else {\n tree._ = q;\n }\n\n q.U = parent;\n p.U = q;\n p.L = q.R;\n if (p.L) p.L.U = p;\n q.R = p;\n}\n\nfunction RedBlackFirst(node) {\n while (node.L) node = node.L;\n return node;\n}\n\nexport default RedBlackTree;\n","import {cells, edges, epsilon} from \"./Diagram\";\n\nexport function createEdge(left, right, v0, v1) {\n var edge = [null, null],\n index = edges.push(edge) - 1;\n edge.left = left;\n edge.right = right;\n if (v0) setEdgeEnd(edge, left, right, v0);\n if (v1) setEdgeEnd(edge, right, left, v1);\n cells[left.index].halfedges.push(index);\n cells[right.index].halfedges.push(index);\n return edge;\n}\n\nexport function createBorderEdge(left, v0, v1) {\n var edge = [v0, v1];\n edge.left = left;\n return edge;\n}\n\nexport function setEdgeEnd(edge, left, right, vertex) {\n if (!edge[0] && !edge[1]) {\n edge[0] = vertex;\n edge.left = left;\n edge.right = right;\n } else if (edge.left === right) {\n edge[1] = vertex;\n } else {\n edge[0] = vertex;\n }\n}\n\n// Liang–Barsky line clipping.\nfunction clipEdge(edge, x0, y0, x1, y1) {\n var a = edge[0],\n b = edge[1],\n ax = a[0],\n ay = a[1],\n bx = b[0],\n by = b[1],\n t0 = 0,\n t1 = 1,\n dx = bx - ax,\n dy = by - ay,\n r;\n\n r = x0 - ax;\n if (!dx && r > 0) return;\n r /= dx;\n if (dx < 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n } else if (dx > 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n }\n\n r = x1 - ax;\n if (!dx && r < 0) return;\n r /= dx;\n if (dx < 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n } else if (dx > 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n }\n\n r = y0 - ay;\n if (!dy && r > 0) return;\n r /= dy;\n if (dy < 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n } else if (dy > 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n }\n\n r = y1 - ay;\n if (!dy && r < 0) return;\n r /= dy;\n if (dy < 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n } else if (dy > 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n }\n\n if (!(t0 > 0) && !(t1 < 1)) return true; // TODO Better check?\n\n if (t0 > 0) edge[0] = [ax + t0 * dx, ay + t0 * dy];\n if (t1 < 1) edge[1] = [ax + t1 * dx, ay + t1 * dy];\n return true;\n}\n\nfunction connectEdge(edge, x0, y0, x1, y1) {\n var v1 = edge[1];\n if (v1) return true;\n\n var v0 = edge[0],\n left = edge.left,\n right = edge.right,\n lx = left[0],\n ly = left[1],\n rx = right[0],\n ry = right[1],\n fx = (lx + rx) / 2,\n fy = (ly + ry) / 2,\n fm,\n fb;\n\n if (ry === ly) {\n if (fx < x0 || fx >= x1) return;\n if (lx > rx) {\n if (!v0) v0 = [fx, y0];\n else if (v0[1] >= y1) return;\n v1 = [fx, y1];\n } else {\n if (!v0) v0 = [fx, y1];\n else if (v0[1] < y0) return;\n v1 = [fx, y0];\n }\n } else {\n fm = (lx - rx) / (ry - ly);\n fb = fy - fm * fx;\n if (fm < -1 || fm > 1) {\n if (lx > rx) {\n if (!v0) v0 = [(y0 - fb) / fm, y0];\n else if (v0[1] >= y1) return;\n v1 = [(y1 - fb) / fm, y1];\n } else {\n if (!v0) v0 = [(y1 - fb) / fm, y1];\n else if (v0[1] < y0) return;\n v1 = [(y0 - fb) / fm, y0];\n }\n } else {\n if (ly < ry) {\n if (!v0) v0 = [x0, fm * x0 + fb];\n else if (v0[0] >= x1) return;\n v1 = [x1, fm * x1 + fb];\n } else {\n if (!v0) v0 = [x1, fm * x1 + fb];\n else if (v0[0] < x0) return;\n v1 = [x0, fm * x0 + fb];\n }\n }\n }\n\n edge[0] = v0;\n edge[1] = v1;\n return true;\n}\n\nexport function clipEdges(x0, y0, x1, y1) {\n var i = edges.length,\n edge;\n\n while (i--) {\n if (!connectEdge(edge = edges[i], x0, y0, x1, y1)\n || !clipEdge(edge, x0, y0, x1, y1)\n || !(Math.abs(edge[0][0] - edge[1][0]) > epsilon\n || Math.abs(edge[0][1] - edge[1][1]) > epsilon)) {\n delete edges[i];\n }\n }\n}\n","import {createBorderEdge} from \"./Edge\";\nimport {cells, edges, epsilon} from \"./Diagram\";\n\nexport function createCell(site) {\n return cells[site.index] = {\n site: site,\n halfedges: []\n };\n}\n\nfunction cellHalfedgeAngle(cell, edge) {\n var site = cell.site,\n va = edge.left,\n vb = edge.right;\n if (site === vb) vb = va, va = site;\n if (vb) return Math.atan2(vb[1] - va[1], vb[0] - va[0]);\n if (site === va) va = edge[1], vb = edge[0];\n else va = edge[0], vb = edge[1];\n return Math.atan2(va[0] - vb[0], vb[1] - va[1]);\n}\n\nexport function cellHalfedgeStart(cell, edge) {\n return edge[+(edge.left !== cell.site)];\n}\n\nexport function cellHalfedgeEnd(cell, edge) {\n return edge[+(edge.left === cell.site)];\n}\n\nexport function sortCellHalfedges() {\n for (var i = 0, n = cells.length, cell, halfedges, j, m; i < n; ++i) {\n if ((cell = cells[i]) && (m = (halfedges = cell.halfedges).length)) {\n var index = new Array(m),\n array = new Array(m);\n for (j = 0; j < m; ++j) index[j] = j, array[j] = cellHalfedgeAngle(cell, edges[halfedges[j]]);\n index.sort(function(i, j) { return array[j] - array[i]; });\n for (j = 0; j < m; ++j) array[j] = halfedges[index[j]];\n for (j = 0; j < m; ++j) halfedges[j] = array[j];\n }\n }\n}\n\nexport function clipCells(x0, y0, x1, y1) {\n var nCells = cells.length,\n iCell,\n cell,\n site,\n iHalfedge,\n halfedges,\n nHalfedges,\n start,\n startX,\n startY,\n end,\n endX,\n endY,\n cover = true;\n\n for (iCell = 0; iCell < nCells; ++iCell) {\n if (cell = cells[iCell]) {\n site = cell.site;\n halfedges = cell.halfedges;\n iHalfedge = halfedges.length;\n\n // Remove any dangling clipped edges.\n while (iHalfedge--) {\n if (!edges[halfedges[iHalfedge]]) {\n halfedges.splice(iHalfedge, 1);\n }\n }\n\n // Insert any border edges as necessary.\n iHalfedge = 0, nHalfedges = halfedges.length;\n while (iHalfedge < nHalfedges) {\n end = cellHalfedgeEnd(cell, edges[halfedges[iHalfedge]]), endX = end[0], endY = end[1];\n start = cellHalfedgeStart(cell, edges[halfedges[++iHalfedge % nHalfedges]]), startX = start[0], startY = start[1];\n if (Math.abs(endX - startX) > epsilon || Math.abs(endY - startY) > epsilon) {\n halfedges.splice(iHalfedge, 0, edges.push(createBorderEdge(site, end,\n Math.abs(endX - x0) < epsilon && y1 - endY > epsilon ? [x0, Math.abs(startX - x0) < epsilon ? startY : y1]\n : Math.abs(endY - y1) < epsilon && x1 - endX > epsilon ? [Math.abs(startY - y1) < epsilon ? startX : x1, y1]\n : Math.abs(endX - x1) < epsilon && endY - y0 > epsilon ? [x1, Math.abs(startX - x1) < epsilon ? startY : y0]\n : Math.abs(endY - y0) < epsilon && endX - x0 > epsilon ? [Math.abs(startY - y0) < epsilon ? startX : x0, y0]\n : null)) - 1);\n ++nHalfedges;\n }\n }\n\n if (nHalfedges) cover = false;\n }\n }\n\n // If there weren’t any edges, have the closest site cover the extent.\n // It doesn’t matter which corner of the extent we measure!\n if (cover) {\n var dx, dy, d2, dc = Infinity;\n\n for (iCell = 0, cover = null; iCell < nCells; ++iCell) {\n if (cell = cells[iCell]) {\n site = cell.site;\n dx = site[0] - x0;\n dy = site[1] - y0;\n d2 = dx * dx + dy * dy;\n if (d2 < dc) dc = d2, cover = cell;\n }\n }\n\n if (cover) {\n var v00 = [x0, y0], v01 = [x0, y1], v11 = [x1, y1], v10 = [x1, y0];\n cover.halfedges.push(\n edges.push(createBorderEdge(site = cover.site, v00, v01)) - 1,\n edges.push(createBorderEdge(site, v01, v11)) - 1,\n edges.push(createBorderEdge(site, v11, v10)) - 1,\n edges.push(createBorderEdge(site, v10, v00)) - 1\n );\n }\n }\n\n // Lastly delete any cells with no edges; these were entirely clipped.\n for (iCell = 0; iCell < nCells; ++iCell) {\n if (cell = cells[iCell]) {\n if (!cell.halfedges.length) {\n delete cells[iCell];\n }\n }\n }\n}\n","import {RedBlackNode} from \"./RedBlackTree\";\nimport {circles, epsilon2} from \"./Diagram\";\n\nvar circlePool = [];\n\nexport var firstCircle;\n\nfunction Circle() {\n RedBlackNode(this);\n this.x =\n this.y =\n this.arc =\n this.site =\n this.cy = null;\n}\n\nexport function attachCircle(arc) {\n var lArc = arc.P,\n rArc = arc.N;\n\n if (!lArc || !rArc) return;\n\n var lSite = lArc.site,\n cSite = arc.site,\n rSite = rArc.site;\n\n if (lSite === rSite) return;\n\n var bx = cSite[0],\n by = cSite[1],\n ax = lSite[0] - bx,\n ay = lSite[1] - by,\n cx = rSite[0] - bx,\n cy = rSite[1] - by;\n\n var d = 2 * (ax * cy - ay * cx);\n if (d >= -epsilon2) return;\n\n var ha = ax * ax + ay * ay,\n hc = cx * cx + cy * cy,\n x = (cy * ha - ay * hc) / d,\n y = (ax * hc - cx * ha) / d;\n\n var circle = circlePool.pop() || new Circle;\n circle.arc = arc;\n circle.site = cSite;\n circle.x = x + bx;\n circle.y = (circle.cy = y + by) + Math.sqrt(x * x + y * y); // y bottom\n\n arc.circle = circle;\n\n var before = null,\n node = circles._;\n\n while (node) {\n if (circle.y < node.y || (circle.y === node.y && circle.x <= node.x)) {\n if (node.L) node = node.L;\n else { before = node.P; break; }\n } else {\n if (node.R) node = node.R;\n else { before = node; break; }\n }\n }\n\n circles.insert(before, circle);\n if (!before) firstCircle = circle;\n}\n\nexport function detachCircle(arc) {\n var circle = arc.circle;\n if (circle) {\n if (!circle.P) firstCircle = circle.N;\n circles.remove(circle);\n circlePool.push(circle);\n RedBlackNode(circle);\n arc.circle = null;\n }\n}\n","import {RedBlackNode} from \"./RedBlackTree\";\nimport {createCell} from \"./Cell\";\nimport {attachCircle, detachCircle} from \"./Circle\";\nimport {createEdge, setEdgeEnd} from \"./Edge\";\nimport {beaches, epsilon} from \"./Diagram\";\n\nvar beachPool = [];\n\nfunction Beach() {\n RedBlackNode(this);\n this.edge =\n this.site =\n this.circle = null;\n}\n\nfunction createBeach(site) {\n var beach = beachPool.pop() || new Beach;\n beach.site = site;\n return beach;\n}\n\nfunction detachBeach(beach) {\n detachCircle(beach);\n beaches.remove(beach);\n beachPool.push(beach);\n RedBlackNode(beach);\n}\n\nexport function removeBeach(beach) {\n var circle = beach.circle,\n x = circle.x,\n y = circle.cy,\n vertex = [x, y],\n previous = beach.P,\n next = beach.N,\n disappearing = [beach];\n\n detachBeach(beach);\n\n var lArc = previous;\n while (lArc.circle\n && Math.abs(x - lArc.circle.x) < epsilon\n && Math.abs(y - lArc.circle.cy) < epsilon) {\n previous = lArc.P;\n disappearing.unshift(lArc);\n detachBeach(lArc);\n lArc = previous;\n }\n\n disappearing.unshift(lArc);\n detachCircle(lArc);\n\n var rArc = next;\n while (rArc.circle\n && Math.abs(x - rArc.circle.x) < epsilon\n && Math.abs(y - rArc.circle.cy) < epsilon) {\n next = rArc.N;\n disappearing.push(rArc);\n detachBeach(rArc);\n rArc = next;\n }\n\n disappearing.push(rArc);\n detachCircle(rArc);\n\n var nArcs = disappearing.length,\n iArc;\n for (iArc = 1; iArc < nArcs; ++iArc) {\n rArc = disappearing[iArc];\n lArc = disappearing[iArc - 1];\n setEdgeEnd(rArc.edge, lArc.site, rArc.site, vertex);\n }\n\n lArc = disappearing[0];\n rArc = disappearing[nArcs - 1];\n rArc.edge = createEdge(lArc.site, rArc.site, null, vertex);\n\n attachCircle(lArc);\n attachCircle(rArc);\n}\n\nexport function addBeach(site) {\n var x = site[0],\n directrix = site[1],\n lArc,\n rArc,\n dxl,\n dxr,\n node = beaches._;\n\n while (node) {\n dxl = leftBreakPoint(node, directrix) - x;\n if (dxl > epsilon) node = node.L; else {\n dxr = x - rightBreakPoint(node, directrix);\n if (dxr > epsilon) {\n if (!node.R) {\n lArc = node;\n break;\n }\n node = node.R;\n } else {\n if (dxl > -epsilon) {\n lArc = node.P;\n rArc = node;\n } else if (dxr > -epsilon) {\n lArc = node;\n rArc = node.N;\n } else {\n lArc = rArc = node;\n }\n break;\n }\n }\n }\n\n createCell(site);\n var newArc = createBeach(site);\n beaches.insert(lArc, newArc);\n\n if (!lArc && !rArc) return;\n\n if (lArc === rArc) {\n detachCircle(lArc);\n rArc = createBeach(lArc.site);\n beaches.insert(newArc, rArc);\n newArc.edge = rArc.edge = createEdge(lArc.site, newArc.site);\n attachCircle(lArc);\n attachCircle(rArc);\n return;\n }\n\n if (!rArc) { // && lArc\n newArc.edge = createEdge(lArc.site, newArc.site);\n return;\n }\n\n // else lArc !== rArc\n detachCircle(lArc);\n detachCircle(rArc);\n\n var lSite = lArc.site,\n ax = lSite[0],\n ay = lSite[1],\n bx = site[0] - ax,\n by = site[1] - ay,\n rSite = rArc.site,\n cx = rSite[0] - ax,\n cy = rSite[1] - ay,\n d = 2 * (bx * cy - by * cx),\n hb = bx * bx + by * by,\n hc = cx * cx + cy * cy,\n vertex = [(cy * hb - by * hc) / d + ax, (bx * hc - cx * hb) / d + ay];\n\n setEdgeEnd(rArc.edge, lSite, rSite, vertex);\n newArc.edge = createEdge(lSite, site, null, vertex);\n rArc.edge = createEdge(site, rSite, null, vertex);\n attachCircle(lArc);\n attachCircle(rArc);\n}\n\nfunction leftBreakPoint(arc, directrix) {\n var site = arc.site,\n rfocx = site[0],\n rfocy = site[1],\n pby2 = rfocy - directrix;\n\n if (!pby2) return rfocx;\n\n var lArc = arc.P;\n if (!lArc) return -Infinity;\n\n site = lArc.site;\n var lfocx = site[0],\n lfocy = site[1],\n plby2 = lfocy - directrix;\n\n if (!plby2) return lfocx;\n\n var hl = lfocx - rfocx,\n aby2 = 1 / pby2 - 1 / plby2,\n b = hl / plby2;\n\n if (aby2) return (-b + Math.sqrt(b * b - 2 * aby2 * (hl * hl / (-2 * plby2) - lfocy + plby2 / 2 + rfocy - pby2 / 2))) / aby2 + rfocx;\n\n return (rfocx + lfocx) / 2;\n}\n\nfunction rightBreakPoint(arc, directrix) {\n var rArc = arc.N;\n if (rArc) return leftBreakPoint(rArc, directrix);\n var site = arc.site;\n return site[1] === directrix ? site[0] : Infinity;\n}\n","import {addBeach, removeBeach} from \"./Beach\";\nimport {sortCellHalfedges, cellHalfedgeStart, clipCells} from \"./Cell\";\nimport {firstCircle} from \"./Circle\";\nimport {clipEdges} from \"./Edge\";\nimport RedBlackTree from \"./RedBlackTree\";\n\nexport var epsilon = 1e-6;\nexport var epsilon2 = 1e-12;\nexport var beaches;\nexport var cells;\nexport var circles;\nexport var edges;\n\nfunction triangleArea(a, b, c) {\n return (a[0] - c[0]) * (b[1] - a[1]) - (a[0] - b[0]) * (c[1] - a[1]);\n}\n\nfunction lexicographic(a, b) {\n return b[1] - a[1]\n || b[0] - a[0];\n}\n\nexport default function Diagram(sites, extent) {\n var site = sites.sort(lexicographic).pop(),\n x,\n y,\n circle;\n\n edges = [];\n cells = new Array(sites.length);\n beaches = new RedBlackTree;\n circles = new RedBlackTree;\n\n while (true) {\n circle = firstCircle;\n if (site && (!circle || site[1] < circle.y || (site[1] === circle.y && site[0] < circle.x))) {\n if (site[0] !== x || site[1] !== y) {\n addBeach(site);\n x = site[0], y = site[1];\n }\n site = sites.pop();\n } else if (circle) {\n removeBeach(circle.arc);\n } else {\n break;\n }\n }\n\n sortCellHalfedges();\n\n if (extent) {\n var x0 = +extent[0][0],\n y0 = +extent[0][1],\n x1 = +extent[1][0],\n y1 = +extent[1][1];\n clipEdges(x0, y0, x1, y1);\n clipCells(x0, y0, x1, y1);\n }\n\n this.edges = edges;\n this.cells = cells;\n\n beaches =\n circles =\n edges =\n cells = null;\n}\n\nDiagram.prototype = {\n constructor: Diagram,\n\n polygons: function() {\n var edges = this.edges;\n\n return this.cells.map(function(cell) {\n var polygon = cell.halfedges.map(function(i) { return cellHalfedgeStart(cell, edges[i]); });\n polygon.data = cell.site.data;\n return polygon;\n });\n },\n\n triangles: function() {\n var triangles = [],\n edges = this.edges;\n\n this.cells.forEach(function(cell, i) {\n if (!(m = (halfedges = cell.halfedges).length)) return;\n var site = cell.site,\n halfedges,\n j = -1,\n m,\n s0,\n e1 = edges[halfedges[m - 1]],\n s1 = e1.left === site ? e1.right : e1.left;\n\n while (++j < m) {\n s0 = s1;\n e1 = edges[halfedges[j]];\n s1 = e1.left === site ? e1.right : e1.left;\n if (s0 && s1 && i < s0.index && i < s1.index && triangleArea(site, s0, s1) < 0) {\n triangles.push([site.data, s0.data, s1.data]);\n }\n }\n });\n\n return triangles;\n },\n\n links: function() {\n return this.edges.filter(function(edge) {\n return edge.right;\n }).map(function(edge) {\n return {\n source: edge.left.data,\n target: edge.right.data\n };\n });\n },\n\n find: function(x, y, radius) {\n var that = this, i0, i1 = that._found || 0, n = that.cells.length, cell;\n\n // Use the previously-found cell, or start with an arbitrary one.\n while (!(cell = that.cells[i1])) if (++i1 >= n) return null;\n var dx = x - cell.site[0], dy = y - cell.site[1], d2 = dx * dx + dy * dy;\n\n // Traverse the half-edges to find a closer cell, if any.\n do {\n cell = that.cells[i0 = i1], i1 = null;\n cell.halfedges.forEach(function(e) {\n var edge = that.edges[e], v = edge.left;\n if ((v === cell.site || !v) && !(v = edge.right)) return;\n var vx = x - v[0], vy = y - v[1], v2 = vx * vx + vy * vy;\n if (v2 < d2) d2 = v2, i1 = v.index;\n });\n } while (i1 !== null);\n\n that._found = i0;\n\n return radius == null || d2 <= radius * radius ? cell.site : null;\n }\n}\n","import constant from \"./constant\";\nimport {x as pointX, y as pointY} from \"./point\";\nimport Diagram, {epsilon} from \"./Diagram\";\n\nexport default function() {\n var x = pointX,\n y = pointY,\n extent = null;\n\n function voronoi(data) {\n return new Diagram(data.map(function(d, i) {\n var s = [Math.round(x(d, i, data) / epsilon) * epsilon, Math.round(y(d, i, data) / epsilon) * epsilon];\n s.index = i;\n s.data = d;\n return s;\n }), extent);\n }\n\n voronoi.polygons = function(data) {\n return voronoi(data).polygons();\n };\n\n voronoi.links = function(data) {\n return voronoi(data).links();\n };\n\n voronoi.triangles = function(data) {\n return voronoi(data).triangles();\n };\n\n voronoi.x = function(_) {\n return arguments.length ? (x = typeof _ === \"function\" ? _ : constant(+_), voronoi) : x;\n };\n\n voronoi.y = function(_) {\n return arguments.length ? (y = typeof _ === \"function\" ? _ : constant(+_), voronoi) : y;\n };\n\n voronoi.extent = function(_) {\n return arguments.length ? (extent = _ == null ? null : [[+_[0][0], +_[0][1]], [+_[1][0], +_[1][1]]], voronoi) : extent && [[extent[0][0], extent[0][1]], [extent[1][0], extent[1][1]]];\n };\n\n voronoi.size = function(_) {\n return arguments.length ? (extent = _ == null ? null : [[0, 0], [+_[0], +_[1]]], voronoi) : extent && [extent[1][0] - extent[0][0], extent[1][1] - extent[0][1]];\n };\n\n return voronoi;\n}\n","/* global window, requestAnimationFrame, cancelAnimationFrame */\nimport { FieldType, DimensionSubtype } from 'datamodel';\nimport {\n axisLeft,\n axisRight,\n axisTop,\n axisBottom\n} from 'd3-axis';\nimport {\n symbolCircle,\n symbolCross,\n symbolDiamond,\n symbolSquare,\n symbolStar,\n symbolWye,\n symbolTriangle,\n symbol,\n stack as d3Stack,\n stackOffsetDiverging,\n stackOrderNone,\n stackOrderAscending,\n stackOrderDescending,\n stackOffsetNone,\n stackOffsetExpand,\n stackOffsetWiggle,\n pie,\n arc,\n line,\n curveLinear,\n curveStepAfter,\n curveStepBefore,\n curveStep,\n curveCatmullRom,\n area\n} from 'd3-shape';\nimport { scaleBand } from 'd3-scale';\nimport { nest } from 'd3-collection';\nimport {\n interpolate,\n interpolateRgb,\n piecewise,\n interpolateNumber,\n interpolateHslLong\n} from 'd3-interpolate';\nimport {\n easeCubic,\n easeBounce,\n easePoly,\n easeBack,\n easeCircle,\n easeLinear,\n easeElastic\n} from 'd3-ease';\nimport {\n color,\n rgb,\n hsl\n} from 'd3-color';\nimport { voronoi } from 'd3-voronoi';\nimport Model from 'hyperdis';\nimport * as STACK_CONFIG from './enums/stack-config';\n\nconst HTMLElement = window.HTMLElement;\n\nconst isSimpleObject = (obj) => {\n let token;\n if (typeof obj === 'object') {\n if (obj === null) { return false; }\n token = Object.prototype.toString.call(obj);\n if (token === '[object Object]') {\n return (obj.constructor.toString().match(/^function (.*)\\(\\)/m) || [])[1] === 'Object';\n }\n }\n return false;\n};\n\n/**\n * Returns unique id\n * @return {string} Unique id string\n */\nconst\n getUniqueId = () => `id-${new Date().getTime()}${Math.round(Math.random() * 10000)}`;\n\n/**\n * Deep copies an object and returns a new object.\n * @param {Object} o Object to clone\n * @return {Object} New Object.\n */\nconst clone = (o) => {\n const output = {};\n let v;\n for (const key in o) {\n if ({}.hasOwnProperty.call(o, key)) {\n v = o[key];\n output[key] = isSimpleObject(v) ? clone(v) : v;\n }\n }\n return output;\n};\n\n/**\n* Checks the existence of keys in an object\n* @param {Array} keys Set of keys which are to be checked\n* @param {Object} obj whose keys are checked from the set of keys provided\n* @return {Object} Error if the keys are absent, or the object itself\n*/\nconst checkExistence = (keys, obj) => {\n const nonExistentKeys = [];\n keys.forEach((key) => {\n if (key in obj) {\n return;\n }\n nonExistentKeys.push(key);\n });\n return nonExistentKeys;\n};\n\nconst sanitizeIP = {\n typeObj: (keys, obj) => {\n if (typeof obj !== 'object') {\n return Error('Argument type object expected');\n }\n\n const nonExistentKeys = checkExistence(keys, obj);\n if (nonExistentKeys.length) {\n return Error(`Missing keys from parameter ${nonExistentKeys.join(', ')}`);\n }\n return obj;\n },\n\n /* istanbul ignore next */ htmlElem: (elem) => {\n if (!(elem instanceof HTMLElement)) {\n return Error('HTMLElement required');\n }\n return elem;\n }\n};\n\n/**\n * Gets the maximum value from an array of objects for a given property name\n * @param {Array.} data Array of objects\n * @param {string} field Field name\n * @return {number} Maximum value\n */\nconst getMax = (data, field) => Math.max(...data.filter(d => !isNaN(d[field])).map(d => d[field]));\n\n/**\n * Gets the minimum value from an array of objects for a given property name\n * @param {Array.} data Array of objects\n * @param {string} field Field name\n * @return {number} Minimum value\n */\nconst getMin = (data, field) => Math.min(...data.filter(d => !isNaN(d[field])).map(d => d[field]));\n\n/**\n * Gets the domain from the data based on the field name and type of field\n * @param {Array. | Array.} data Data Array\n * @param {Array.} fields Array of fields from where the domain will be calculated\n * @param {string} fieldType Type of field - nominal, quantitiative, temporal.\n * @return {Array} Usually contains a min and max value if field is quantitative or\n * an array of values if field type is nominal or ordinal\n */\nconst getDomainFromData = (data, fields, fieldType) => {\n let domain;\n let domArr;\n data = data[0] instanceof Array ? data : [data];\n switch (fieldType) {\n case DimensionSubtype.CATEGORICAL:\n domain = [].concat(...data.map(arr => arr.map(d => d[fields[0]]).filter(d => d !== undefined)));\n break;\n default:\n domArr = data.map((arr) => {\n const firstMin = getMin(arr, fields[0]);\n const secondMin = getMin(arr, fields[1]);\n const firstMax = getMax(arr, fields[0]);\n const secondMax = getMax(arr, fields[1]);\n return [Math.min(firstMin, secondMin), Math.max(firstMax, secondMax)];\n });\n domain = [Math.min(...domArr.map(d => d[0])), Math.max(...domArr.map(d => d[1]))];\n break;\n }\n return domain;\n};\n\n/**\n * Union Domain values\n * @param {Array.} domains Array of domain values\n * @param {string} fieldType type of field - dimension,measure or datetime.\n * @return {Array} Unioned domain of all domain values.\n */\nconst unionDomain = (domains, fieldType) => {\n let domain;\n domains = domains.filter(dom => dom.length);\n if (fieldType === DimensionSubtype.CATEGORICAL) {\n domain = domain = [].concat(...domains);\n } else {\n domain = [Math.min(...domains.map(d => d[0])), Math.max(...domains.map(d => d[1]))];\n }\n\n return domain;\n};\n\nconst symbolFns = {\n circle: symbolCircle,\n cross: symbolCross,\n diamond: symbolDiamond,\n square: symbolSquare,\n star: symbolStar,\n wye: symbolWye,\n triangle: symbolTriangle\n};\n\nconst easeFns = {\n cubic: easeCubic,\n bounce: easeBounce,\n linear: easeLinear,\n elastic: easeElastic,\n back: easeBack,\n poly: easePoly,\n circle: easeCircle\n};\n\n/**\n * Returns the maximum or minimum points of a compare value from an array of objects.\n * @param {Array} points Array of objects\n * @param {string} compareValue Key in the object on which the comparing will be done.\n * @param {string} minOrMax minimum or maximum.\n * @return {Object} Minimum or maximum point.\n */\nconst getExtremePoint = (points, compareValue, minOrMax) => {\n let extremePoint;\n let point;\n const len = points.length;\n let minOrMaxVal = minOrMax === 'max' ? -Infinity : Infinity;\n let val;\n\n for (let i = 0; i < len; i++) {\n point = points[i];\n val = point[compareValue];\n if (minOrMax === 'min' ? val < minOrMaxVal : val > minOrMaxVal) {\n minOrMaxVal = val;\n extremePoint = point;\n }\n }\n\n return extremePoint;\n};\n\n/**\n * Returns the minimum point of a compare value from an array of objects.\n * @param {Array} points Array of objects\n * @param {string} compareValue Key in the object on which the comparing will be done.\n * @return {Object} Minimum point.\n */\nconst getMinPoint = (points, compareValue) => getExtremePoint(points, compareValue, 'min');\n\n/**\n * Returns the maximum point of a compare value from an array of objects.\n * @param {Array} points Array of objects\n * @param {string} compareValue Key in the object on which the comparing will be done.\n * @return {Object} Maximum point.\n */\nconst getMaxPoint = (points, compareValue) => getExtremePoint(points, compareValue, 'max');\n\n/**\n * Gets the index of the closest value of the given value from the array.\n * @param {Array} arr Array of values\n * @param {number} value Value from which the nearest value will be calculated.\n * @param {string} side side property.\n * @return {number} index of the closest value\n */\n/* istanbul ignore next */const getClosestIndexOf = (arr, value, side) => {\n let low = 0;\n const arrLen = arr.length;\n let high = arrLen - 1;\n\n let mid;\n let d1;\n let d2;\n\n while (low < high) {\n mid = Math.floor((low + high) / 2);\n d1 = Math.abs(arr[mid] - value);\n d2 = Math.abs(arr[mid + 1] - value);\n\n if (d2 <= d1) {\n low = mid + 1;\n } else {\n high = mid;\n }\n }\n\n if (!side) {\n return high;\n }\n\n const highVal = arr[high];\n if (highVal === value) {\n return high;\n } else if (highVal > value) {\n if (high === 0) { return high; }\n return side === 'left' ? high - 1 : high;\n }\n if (high === arr.length - 1) { return high; }\n return side === 'left' ? high : high + 1;\n};\n\n/**\n * Returns the browser window object\n * @return {Window} Window object\n*/\nconst getWindow = () => window;\n\n/**\n * Returns the browser window object\n * @return {Window} Window object\n*/\nconst reqAnimFrame = (() => requestAnimationFrame)();\n\nconst cancelAnimFrame = (() => cancelAnimationFrame)();\n\n/**\n * Capitalizes the first letter of the word\n * @param {string} text word\n * @return {string} Capitalized word\n */\nconst capitalizeFirst = (text) => {\n text = text.toLowerCase();\n\n return text.replace(/\\w\\S*/g, txt => txt.charAt(0).toUpperCase() + txt.substr(1));\n};\n\n/**\n *\n *\n * @param {*} arr\n */\nconst unique = arr => ([...new Set(arr)]);\n\n/**\n * Gets the minimum difference between two consecutive numbers in an array.\n * @param {Array} arr Array of numbers\n * @param {number} index index of the value\n * @return {number} minimum difference between values\n */\n/* istanbul ignore next */ const getMinDiff = (arr, index) => {\n let diff;\n let uniqueVals;\n if (index !== undefined) {\n uniqueVals = unique(arr.map(d => d[index]));\n } else {\n uniqueVals = unique(arr);\n }\n if (uniqueVals.length > 1) {\n diff = Math.abs(uniqueVals[1] - uniqueVals[0]);\n for (let i = 2, len = uniqueVals.length; i < len; i++) {\n diff = Math.min(diff, Math.abs(uniqueVals[i] - uniqueVals[i - 1]));\n }\n } else {\n diff = uniqueVals[0];\n }\n\n return diff;\n};\n\n/**\n * Returns the class name appended with a given id.\n * @param {string} cls class name\n * @param {string} id unique identifier\n * @param {string} prefix string needed to add before the classname\n * @return {string} qualified class name\n */\n/* istanbul ignore next */const getQualifiedClassName = (cls, id, prefix) => {\n cls = cls.replace(/^\\.*/, '');\n return [`${prefix}-${cls}`, `${prefix}-${cls}-${id}`];\n};\n\n/**\n * This method is used to set the default value for variables\n * without sullying the code with conditional statements.\n *\n * @export\n * @param {any} param The parameter to test.\n * @param {any} value The default value to assign.\n * @return {any} The value.\n */\n/* istanbul ignore next */ const defaultValue = (param, value) => {\n if (typeof param === 'undefined' || (typeof param === 'object' && !param)) {\n return value;\n }\n return param;\n};\n\n/**\n * DESCRIPTION TODO\n * @todo\n *\n * @export\n * @param {Object} graph graph whose dependency order has to be generated\n * @return {Object} @todo\n */\nconst getDependencyOrder = (graph) => {\n const dependencyOrder = [];\n const visited = {};\n const keys = Object.keys(graph);\n /**\n * DESCRIPTION TODO\n * @todo\n *\n * @export\n * @param {Object} name @todo\n * @return {Object} @todo\n */\n const visit = (name) => {\n if (dependencyOrder.length === keys.length) {\n return true;\n }\n visited[name] = true;\n const edges = graph[name];\n for (let e = 0; e < edges.length; e++) {\n const dep = edges[e];\n if (!visited[dep]) {\n visit(dep);\n }\n }\n\n dependencyOrder.push(name);\n return false;\n };\n\n for (let i = 0; i < keys.length; i++) {\n if (visit(keys[i], i)) break;\n }\n\n return dependencyOrder;\n};\n\n/**\n * Iterates over the properties of an object and applies the function\n *\n * @param {any} obj object to be iterated upon\n * @param {any} fn function to be applied on it\n */\nconst objectIterator = (obj, fn) => {\n for (const key in obj) {\n if (Object.hasOwnProperty.call(obj, key)) {\n fn(key, obj);\n }\n }\n};\n\n/**\n * This class creates a d3 voronoi for retrieving the nearest neighbour of any point from a set of two\n * dimensional points\n * @class Voronoi\n */\n/* istanbul ignore next */ class Voronoi {\n /**\n * Initialize the voronoi with the data given.\n * @param {Array.} data Array of points.\n */\n constructor (data) {\n this._voronoi = voronoi().x(d => d.x).y(d => d.y);\n this.data(data);\n }\n\n /**\n * Sets the data to voronoi\n * @param {Array.} data Array of objects.\n * @return {Voronoi} Instance of voronoi.\n */\n data (data) {\n if (data) {\n this._voronoiFn = this._voronoi(data);\n }\n return this;\n }\n\n /**\n * Finds the closest point to the x and y position given.\n * @param {number} x x value\n * @param {number} y y value\n * @param {number} radius search radius.\n * @return {Object} Details of the nearest point.\n */\n find (x, y, radius) {\n return this._voronoiFn.find(x, y, radius);\n }\n}\n\n/**\n * Methods to handle changes to table configuration and reactivity are handled by this\n * class.\n */\n/**\n * Common store class\n *\n * @class Store\n */\nclass Store {\n /**\n * Creates an instance of Store.\n * @param {Object} config The object to create the state store with.\n * @memberof Store\n */\n constructor (config) {\n // create reactive model\n this.model = Model.create(config);\n this._listeners = [];\n }\n\n /**\n * This method returns a plain JSON object\n * with all the fields in the state store.\n *\n * @return {Object} Serialized representation of state store.\n * @memberof Store\n */\n serialize () {\n return this.model.serialize();\n }\n\n /**\n * This method is used to update the value of a property in the state store.\n *\n * @param {string} propName The name of the property.\n * @param {number} value The new value of the property.\n * @memberof Store\n */\n commit (propName, value) {\n // check if appropriate enum has been used\n this.model.prop(propName, value);\n }\n\n /**\n * This method is used to register a callbacl that will execute\n * when one or more properties change.\n *\n * @param {string | Array} propNames name of property or array of props.\n * @param {Function} callBack The callback to execute.\n * @memberof Store\n */\n /* istanbul ignore next */registerChangeListener (propNames, callBack, instantCall) {\n let props = propNames;\n if (!Array.isArray(propNames)) {\n props = [propNames];\n }\n const fn = this.model.next(props, callBack, instantCall);\n this._listeners.push(fn);\n return this;\n }\n /**\n * This method is used to register a callbacl that will execute\n * when one or more properties change.\n *\n * @param {string | Array} propNames name of property or array of props.\n * @param {Function} callBack The callback to execute.\n * @memberof Store\n */\n /* istanbul ignore next */ registerImmediateListener (propNames, callBack, instantCall) {\n let props = propNames;\n if (!Array.isArray(propNames)) {\n props = [propNames];\n }\n const fn = this.model.on(props, callBack, instantCall);\n this._listeners.push(fn);\n return this;\n }\n /**\n * This method is used to get the name of the property\n * from the state store.\n *\n * @param {string} propName The name of the field in state store.\n * @return {any} The value of the field.\n * @memberof Store\n */\n get (propName) {\n return this.model.prop(propName);\n }\n\n /**\n * This method is used to register a computed property that is computed every time\n * the store value changes.\n *\n * @param {string} propName The name of the property to create.\n * @param {Function} callBack The function to execute when depemdent props change.\n * @memberof Store\n */\n computed (propName, callBack) {\n return this.model.calculatedProp(propName, callBack);\n }\n\n unsubscribeAll () {\n this._listeners.forEach(fn => fn());\n }\n}\n\n/**\n * Sanitize an input number / string mixed number. Currently dot in the no is not supported.\n *\n * @param {number | string} val pure number or string mixed number\n * @return {number | null} Number if it can be extracted. Otherwise null\n */\nconst intSanitizer = (val) => {\n const arr = val.toString().match(/(\\d+)(px)*/g);\n if (!arr) {\n // If only characters are passed\n return null;\n }\n\n return parseInt(arr[0], 10);\n};\n\n/**\n * Setter getter creator from config\n * Format\n * PROPERTRY_NAME: {\n * value: // default value of the property,\n * meta: {\n * typeCheck: // The setter value will be checked using this. If the value is function then the setter value\n * // is passed as args. (Optional)\n * typeExpected: // The output of typecheck action will be tested against this. Truthy value will set the\n * // value to the setter\n * sanitizaiton: // Need for sanitization before type is checked\n * }\n * }\n *\n * @param {Object} holder an empty object on which the getters and setters will be mounted\n * @param {Object} options options config based on which the getters and setters are determined.\n * @param {Hyperdis} model optional model to attach the property. If not sent new moel is created.\n * @return {Array} @todo\n */\nconst transactor = (holder, options, model) => {\n let conf;\n const store = model && model instanceof Model ? model : Model.create({});\n\n for (const prop in options) {\n if ({}.hasOwnProperty.call(options, prop)) {\n conf = options[prop];\n if (!store.prop(prop)) {\n store.append({ [prop]: conf.value });\n }\n holder[prop] = ((context, key, meta) => (...params) => {\n let val;\n let compareTo;\n const paramsLen = params.length;\n const prevVal = store.prop(prop);\n if (paramsLen) {\n // If parameters are passed then it's a setter\n const spreadParams = meta && meta.spreadParams;\n val = params;\n const values = [];\n if (meta) {\n for (let i = 0; i < paramsLen; i++) {\n val = params[i];\n const sanitization = meta.sanitization && (spreadParams ? meta.sanitization[i] :\n meta.sanitization);\n const typeCheck = meta.typeCheck && (spreadParams ? meta.typeCheck[i] : meta.typeCheck);\n if (sanitization && typeof sanitization === 'function') {\n // Sanitize if required\n val = sanitization(val, prevVal, holder);\n }\n\n if (typeCheck) {\n // Checking if a setter is valid\n if (typeof typeCheck === 'function') {\n let typeExpected = meta.typeExpected;\n if (typeExpected && spreadParams) {\n typeExpected = typeExpected[i];\n }\n if (typeExpected) {\n compareTo = typeExpected;\n } else {\n compareTo = true;\n }\n\n if (typeCheck(val) === compareTo) {\n values.push(val);\n }\n } else if (typeof typeCheck === 'string') {\n if (typeCheck === 'constructor') {\n const typeExpected = spreadParams ? meta.typeExpected[i] : meta.typeExpected;\n if (val && (val.constructor.name === typeExpected)) {\n values.push(val);\n }\n }\n } else {\n // context.prop(key, val);\n values.push(val);\n }\n } else {\n values.push(val);\n }\n }\n const preset = meta.preset;\n const oldValues = context.prop(key);\n preset && preset(values[0], holder);\n if (spreadParams) {\n oldValues.forEach((value, i) => {\n if (values[i] === undefined) {\n values[i] = value;\n }\n });\n }\n values.length && context.prop(key, spreadParams ? values : values[0]);\n } else {\n context.prop(key, spreadParams ? val : val[0]);\n }\n return holder;\n }\n // No parameters are passed hence its a getter\n return context.prop(key);\n })(store, prop, conf.meta);\n }\n }\n\n return [holder, store];\n};\n\n/**\n *\n *\n * @param {*} context\n * @param {*} props\n */\nconst generateGetterSetters = (context, props) => {\n Object.entries(props).forEach((propInfo) => {\n const prop = propInfo[0];\n const typeChecker = propInfo[1].typeChecker;\n const sanitization = propInfo[1].sanitization;\n const prototype = context.constructor.prototype;\n if (!(Object.hasOwnProperty.call(prototype, prop))) {\n context[prop] = (...params) => {\n if (params.length) {\n let value = params[0];\n if (sanitization) {\n value = sanitization(context, params[0]);\n }\n if (typeChecker && !typeChecker(value)) {\n return context[`_${prop}`];\n }\n context[`_${prop}`] = value;\n return context;\n } return context[`_${prop}`];\n };\n }\n });\n};\n\n/**\n *\n *\n * @param {*} arr\n * @param {*} prop\n */\nconst getArraySum = (arr, prop) => arr.reduce((total, elem) => {\n total += prop ? elem[prop] : elem;\n return total;\n}, 0);\n\n/**\n *\n *\n * @param {*} arr1\n * @param {*} arr2\n * @returns\n */\nconst arraysEqual = (arr1, arr2) => {\n if (arr1.length !== arr2.length) { return false; }\n for (let i = arr1.length; i >= 0; i--) {\n if (arr1[i] !== arr2[i]) { return false; }\n }\n\n return true;\n};\n\n/* eslint valid-typeof:0 */\n/**\n * Returns a validation function which can be used to validate variables against a type and value\n *\n * @param {any} type type of value that the object should have\n * @return {Object} validation function\n */\nconst isEqual = type => (oldVal, newVal) => {\n if (type === 'Array') {\n if (!oldVal) {\n return false;\n }\n return arraysEqual(oldVal, newVal);\n } else if (type === 'Object') {\n return Object.is(oldVal, newVal);\n } return oldVal === newVal;\n};\n\n/**\n * Description @todo\n *\n * @param {any} transactionModel @todo\n * @param {any} transactionEndpoint @todo\n * @param {any} transactionItems @todo\n * @return {any} @todo\n */\nconst enableChainedTransaction = (transactionModel, transactionEndpoint, transactionItems) =>\n transactionItems.forEach(item => transactionModel.on(item, ([, newVal]) => transactionEndpoint[item](newVal)));\n\n/**\n * Chceks if the element is istanceof HTMLElement\n *\n * @param {Object} elem any JS Object\n */\nconst isHTMLElem = elem => elem instanceof HTMLElement;\n\nconst ERROR_MSG = {\n INTERFACE_IMPL: 'Method not implemented'\n};\n\n/**\n * Merges the sink object in the source by recursively iterating through the object properties\n * @param {Object} source Source Object\n * @param {Object} sink Sink Object\n * @return {Object} Merged object\n */\nconst mergeRecursive = (source, sink) => {\n for (const prop in sink) {\n if (isSimpleObject(source[prop]) && isSimpleObject(sink[prop])) {\n mergeRecursive(source[prop], sink[prop]);\n } else if (sink[prop] instanceof Object && sink[prop].constructor === Object) {\n source[prop] = {};\n mergeRecursive(source[prop], sink[prop]);\n } else {\n source[prop] = sink[prop];\n }\n }\n return source;\n};\n\nconst interpolateArray = (data, fitCount) => {\n const linearInterpolate = function (before, after, atPoint) {\n return before + (after - before) * atPoint;\n };\n const newData = [];\n const springFactor = ((data.length - 1) / (fitCount - 1));\n newData[0] = data[0]; // for new allocation\n for (let i = 1; i < fitCount - 1; i++) {\n const tmp = i * springFactor;\n const before = (Math.floor(tmp)).toFixed();\n const after = (Math.ceil(tmp)).toFixed();\n const atPoint = tmp - before;\n newData[i] = linearInterpolate(data[before], data[after], atPoint);\n }\n newData[fitCount - 1] = data[data.length - 1]; // for new allocation\n return newData;\n};\n\n/**\n *\n *\n * @param {*} fn\n */\nconst nextFrame = (fn) => {\n setTimeout(() => {\n fn();\n }, 0);\n};\n\n/**\n *\n *\n * @param {*} angle\n */\nconst angleToRadian = angle => angle * Math.PI / 180;\n\n/**\n *\n *\n * @param {*} newName\n * @param {*} oldName\n */\nconst replaceCSSPrefix = () => {\n // @todo\n};\n\n/**\n * Gets the interpolator function from d3 color\n *\n */\nconst interpolator = () => interpolate;\n\n/**\n * Gets the number interpolator from d3 color\n *\n */\nconst numberInterpolator = () => interpolateNumber;\n\n/**\n * Gets the rgb interpolator from d3 color\n *\n */\nconst colorInterpolator = () => interpolateRgb;\n\n/**\n * Gets the hsl interpolator from d3 color\n *\n */\nconst hslInterpolator = () => interpolateHslLong;\n\nconst transformColors = () => ({\n color,\n rgb,\n hsl\n});\n\n/**\n * Gets the piecewise interpolator from d3 color\n *\n */\nconst piecewiseInterpolator = () => piecewise;\n\nfunction hue2rgb (p, q, t) {\n if (t < 0) t += 1;\n if (t > 1) t -= 1;\n if (t < 1 / 6) return p + (q - p) * 6 * t;\n if (t < 1 / 2) return q;\n if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n return p;\n}\n\n /**\n * Converts an HSL color value to RGB. Conversion formula\n * adapted from http://en.wikipedia.org/wiki/HSL_color_space.\n * Assumes h, s, and l are contained in the set [0, 1] and\n * returns r, g, and b in the set [0, 255].\n *\n * @param Number h The hue\n * @param Number s The saturation\n * @param Number l The lightness\n * @return Array The RGB representation\n */\nconst hslToRgb = (h, s, l, a = 1) => {\n let r;\n let g;\n let b;\n\n if (s === 0) {\n r = g = b = l; // achromatic\n } else {\n const q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n const p = 2 * l - q;\n\n r = hue2rgb(p, q, h + 1 / 3);\n g = hue2rgb(p, q, h);\n b = hue2rgb(p, q, h - 1 / 3);\n }\n\n return [r * 255, g * 255, b * 255, a];\n};\n\n /**\n * Converts an RGB color value to HSV. Conversion formula\n * adapted from http://en.wikipedia.org/wiki/HSV_color_space.\n * Assumes r, g, and b are contained in the set [0, 255] and\n * returns h, s, and v in the set [0, 1].\n *\n * @param Number r The red color value\n * @param Number g The green color value\n * @param Number b The blue color value\n * @return Array The HSV representation\n */\nconst rgbToHsv = (r, g, b, a = 1) => {\n r = +r; g = +g; b = +b; a = +a;\n r /= 255; g /= 255; b /= 255;\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n let h;\n let s;\n const l = (max + min) / 2;\n\n if (max === min) {\n h = s = 0; // achromatic\n } else {\n const d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n switch (max) {\n case r: h = (g - b) / d + (g < b ? 6 : 0); break;\n case g: h = (b - r) / d + 2; break;\n case b: h = (r - g) / d + 4; break;\n default: break;\n }\n h /= 6;\n }\n return [h, s, l, a];\n};\n\n /**\n * Converts an HSV color value to RGB. Conversion formula\n * adapted from http://en.wikipedia.org/wiki/HSV_color_space.\n * Assumes h, s, and v are contained in the set [0, 1] and\n * returns r, g, and b in the set [0, 255].\n *\n * @param Number h The hue\n * @param Number s The saturation\n * @param Number v The value\n * @return Array The RGB representation\n */\nconst hsvToRgb = (h, s, v, a = 1) => {\n let r;\n let g;\n let b;\n\n const i = Math.floor(h * 6);\n const f = h * 6 - i;\n const p = v * (1 - s);\n const q = v * (1 - f * s);\n const t = v * (1 - (1 - f) * s);\n\n switch (i % 6) {\n case 0: r = v; g = t; b = p; break;\n case 1: r = q; g = v; b = p; break;\n case 2: r = p; g = v; b = t; break;\n case 3: r = p; g = q; b = v; break;\n case 4: r = t; g = p; b = v; break;\n case 5: r = v; g = p; b = q; break;\n default: break;\n }\n\n return [r * 255, g * 255, b * 255, a];\n};\n\nconst hexToHsv = (hex) => {\n const result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\n\n const r = parseInt(result[1], 16);\n const g = parseInt(result[2], 16);\n const b = parseInt(result[3], 16);\n const a = result[4] ? parseInt(result[4], 16) : 1;\n return rgbToHsv(r, g, b, a);\n};\n\nconst detectColor = (col) => {\n const matchRgb = /rgb\\((\\d{1,3}), (\\d{1,3}), (\\d{1,3})\\)/;\n const matchHsl = /hsl\\((\\d+),\\s*([\\d.]+)%,\\s*([\\d.]+)%\\)/g;\n\n // Source : https://gist.github.com/sethlopezme/d072b945969a3cc2cc11\n // eslint-disable-next-line\n const matchRgba = /rgba?\\(((25[0-5]|2[0-4]\\d|1\\d{1,2}|\\d\\d?)\\s*,\\s*?){2}(25[0-5]|2[0-4]\\d|1\\d{1,2}|\\d\\d?)\\s*,?\\s*([01]\\.?\\d*?)?\\)/;\n // eslint-disable-next-line\n const matchHsla = /^hsla\\((0|360|35\\d|3[0-4]\\d|[12]\\d\\d|0?\\d?\\d),(0|100|\\d{1,2})%,(0|100|\\d{1,2})%,(0?\\.\\d|1(\\.0)?)\\)$/;\n const matchHex = /^#([0-9a-f]{3}){1,2}$/i;\n\n if (matchRgb.test(col) || matchRgba.test(col)) {\n return 'rgb';\n } else if (matchHsl.test(col) || matchHsla.test(col)) {\n return 'hsl';\n } else if (matchHex.test(col)) {\n return 'hex';\n } return col;\n};\n\n/**\n *\n *\n * @param {*} model\n * @param {*} propModel\n * @returns\n */\nconst filterPropagationModel = (model, propModel, measures) => {\n const { data, schema } = propModel.getData();\n let filteredModel;\n if (schema.length) {\n const fieldMap = model.getFieldsConfig();\n filteredModel = model.select((fields) => {\n const include = data.some(row => schema.every((propField, idx) => {\n if (!measures && (!(propField.name in fieldMap) ||\n fieldMap[propField.name].def.type === FieldType.MEASURE)) {\n return true;\n }\n return row[idx] === fields[propField.name].valueOf();\n }));\n return include;\n }, {\n saveChild: false\n });\n } else {\n filteredModel = propModel;\n }\n\n return filteredModel;\n};\n\nconst assembleModelFromIdentifiers = (model, identifiers) => {\n let schema = [];\n let data;\n const fieldMap = model.getFieldsConfig();\n if (identifiers.length) {\n const fields = identifiers[0];\n const len = fields.length;\n for (let i = 0; i < len; i++) {\n const field = fields[i];\n const fieldObj = fieldMap[field] && Object.assign({}, fieldMap[field].def);\n if (fieldObj) {\n schema.push(Object.assign(fieldObj));\n }\n }\n\n data = [];\n const header = identifiers[0];\n for (let i = 1; i < identifiers.length; i += 1) {\n const vals = identifiers[i];\n const temp = {};\n vals.forEach((fieldVal, cIdx) => {\n temp[header[cIdx]] = fieldVal;\n });\n data.push(temp);\n }\n } else {\n data = [];\n schema = [];\n }\n\n return new model.constructor(data, schema);\n};\n\n/**\n *\n *\n * @param {*} dataModel\n * @param {*} criteria\n * @returns\n */\nconst getDataModelFromRange = (dataModel, criteria, mode) => {\n if (criteria === null) {\n return null;\n }\n const selFields = Object.keys(criteria);\n const selFn = fields => selFields.every((field) => {\n const val = fields[field].value;\n const range = criteria[field][0] instanceof Array ? criteria[field][0] : criteria[field];\n if (typeof range[0] === 'string') {\n return range.find(d => d === val) !== undefined;\n }\n return range ? val >= range[0] && val <= range[1] : true;\n });\n\n return dataModel.select(selFn, {\n saveChild: false,\n mode\n });\n};\n\n/**\n *\n *\n * @param {*} dataModel\n * @param {*} identifiers\n * @returns\n */\nconst getDataModelFromIdentifiers = (dataModel, identifiers, mode) => {\n let filteredDataModel;\n if (identifiers instanceof Array) {\n const fieldsConfig = dataModel.getFieldsConfig();\n\n const dataArr = identifiers.slice(1, identifiers.length);\n if (identifiers instanceof Function) {\n filteredDataModel = identifiers(dataModel, {}, false);\n } else if (identifiers instanceof Array && identifiers[0].length) {\n const filteredSchema = identifiers[0].filter(d => d in fieldsConfig);\n filteredDataModel = dataModel.select((fields) => {\n let include = true;\n filteredSchema.forEach((propField, idx) => {\n const value = fields[propField].valueOf();\n const index = dataArr.findIndex(d => d[idx] === value);\n include = include && index !== -1;\n });\n return include;\n }, {\n saveChild: false,\n mode\n });\n }\n } else {\n filteredDataModel = getDataModelFromRange(dataModel, identifiers, mode);\n }\n return filteredDataModel;\n};\n\n/**\n *\n *\n * @param {*} context\n * @param {*} listenerMap\n */\nconst registerListeners = (context, listenerMap) => {\n const propListenerMap = listenerMap(context);\n for (const key in propListenerMap) {\n if ({}.hasOwnProperty.call(propListenerMap, key)) {\n const mapObj = propListenerMap[key];\n const propType = mapObj.type;\n const props = mapObj.props;\n const listenerFn = mapObj.listener;\n context.store()[propType](props, listenerFn);\n }\n }\n};\n\nconst isValidValue = value => !isNaN(value) && value !== -Infinity && value !== Infinity;\n/**\n *\n *\n * @param {*} obj\n * @param {*} fields\n * @returns\n */\nconst getObjProp = (obj, ...fields) => {\n if (obj === undefined || obj === null) {\n return obj;\n }\n let retObj = obj;\n for (let i = 0, len = fields.length; i < len; i++) {\n retObj = retObj[fields[i]];\n if (retObj === undefined || retObj === null) {\n break;\n }\n }\n return retObj;\n};\n\n/**\n *\n *\n * @param {*} str\n * @returns\n */\nconst escapeHTML = (str) => {\n const htmlEscapes = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": ''',\n '/': '/'\n };\n const htmlEscaper = /[&<>\"'/]/g;\n return (`${str}`).replace(htmlEscaper, match => htmlEscapes[match]);\n};\n\n/**\n *\n *\n * @param {*} arr\n */\nconst transposeArray = arr => arr[0].map((col, i) => arr.map(row => row[i]));\nconst toArray = arr => (arr instanceof Array ? arr : [arr]);\nconst extendsClass = (cls, extendsFrom, found) => {\n if (!cls) {\n return false;\n }\n const prototype = cls.prototype;\n if (prototype instanceof extendsFrom) {\n found = true;\n } else {\n found = extendsClass(prototype, extendsFrom, found);\n }\n return found;\n};\n\n/**\n *\n * @param {*} dm1\n * @param {*} dm2\n */\nconst concatModels = (dm1, dm2) => {\n const dataObj1 = dm1.getData();\n const dataObj2 = dm2.getData();\n const data1 = dataObj1.data;\n const data2 = dataObj2.data;\n const schema1 = dataObj1.schema;\n const schema2 = dataObj2.schema;\n const tuples1 = {};\n const tuples2 = {};\n const commonTuples = {};\n for (let i = 0; i < data1.length; i++) {\n for (let ii = 0; ii < data2.length; ii++) {\n const row1 = data1[i];\n const row2 = data2[ii];\n const dim1Values = row1.filter((d, idx) => schema1[idx].type === FieldType.DIMENSION);\n const dim2Values = row2.filter((d, idx) => schema2[idx].type === FieldType.DIMENSION);\n const allDimSame = dim1Values.every(value => dim2Values.indexOf(value) !== -1);\n if (allDimSame) {\n const key = dim1Values.join();\n !commonTuples[key] && (commonTuples[key] = {});\n row1.forEach((value, idx) => {\n commonTuples[key][schema1[idx].name] = value;\n });\n row2.forEach((value, idx) => {\n commonTuples[key][schema2[idx].name] = value;\n });\n } else {\n const dm1Key = dim1Values.join();\n const dm2Key = dim2Values.join();\n if (!commonTuples[dm1Key] && !commonTuples[dm2Key]) {\n !tuples1[dm1Key] && (tuples1[dm1Key] = {});\n !tuples2[dm2Key] && (tuples2[dm2Key] = {});\n row1.forEach((value, idx) => {\n tuples1[dm1Key][schema1[idx].name] = value;\n });\n row2.forEach((value, idx) => {\n tuples2[dm2Key][schema2[idx].name] = value;\n });\n }\n }\n }\n }\n\n const commonSchema = [...schema1, ...schema2.filter(s2 => schema1.findIndex(s1 => s1.name === s2.name) === -1)];\n const data = [...Object.values(tuples1), ...Object.values(tuples2), ...Object.values(commonTuples)];\n return [data, commonSchema];\n};\n\nconst getSymbol = type => symbol().type(symbolFns[type]);\n\nconst stackOrders = {\n [STACK_CONFIG.ORDER_NONE]: stackOrderNone,\n [STACK_CONFIG.ORDER_ASCENDING]: stackOrderAscending,\n [STACK_CONFIG.ORDER_DESCENDING]: stackOrderDescending\n};\nconst stackOffsets = {\n [STACK_CONFIG.OFFSET_DIVERGING]: stackOffsetDiverging,\n [STACK_CONFIG.OFFSET_NONE]: stackOffsetNone,\n [STACK_CONFIG.OFFSET_EXPAND]: stackOffsetExpand,\n [STACK_CONFIG.OFFSET_WIGGLE]: stackOffsetWiggle\n};\n\n// eslint-disable-next-line require-jsdoc\nconst stack = params => d3Stack().keys(params.keys).offset(stackOffsets[params.offset])\n .order(stackOrders[params.order])(params.data);\n\n/**\n * Groups the data into a hierarchical tree structure based on one or more fields.\n * @param { Object } params Configuration properties for nesting data\n * @param { Array. } params.data Data which needs to be grouped\n * @param { Array. } params.keys Field indices by which the data will be grouped\n * @return { Array. } Grouped data array\n */\nconst nestCollection = (params) => {\n const nestFn = nest();\n params.keys.forEach(key => nestFn.key(d => d[key]));\n return nestFn.entries(params.data);\n};\n\nconst pathInterpolators = {\n curveLinear,\n curveStepAfter,\n curveStepBefore,\n curveStep,\n curveCatmullRom,\n stepAfter: curveStepAfter,\n catmullRom: curveCatmullRom,\n step: curveStep,\n stepBefore: curveStepBefore,\n linear: curveLinear\n};\n\nconst Symbols = {\n axisLeft,\n axisRight,\n axisTop,\n axisBottom,\n line,\n area,\n pie,\n arc,\n nest\n};\n\nconst Scales = {\n band: scaleBand\n};\n\nconst getSmallestDiff = (points) => {\n points = points.sort((a, b) => a - b);\n let minDiff = points[1] - points[0];\n for (let i = 2; i < points.length; i++) {\n minDiff = Math.min(minDiff, points[i] - points[i - 1]);\n }\n\n return minDiff;\n};\n\nconst require = (lookupWhat, lookupDetails) => ({\n resolvable: (store) => {\n const lookupTarget = store[lookupWhat];\n const depArr = lookupDetails.slice(0, lookupDetails.length - 1);\n const fn = lookupDetails[lookupDetails.length - 1]; // fn\n\n const deps = depArr.map(str => lookupTarget[str]);\n return {\n fn: fn(...deps),\n depArr\n };\n }\n});\n\nconst nextAnimFrame = window.requestAnimationFrame || window.webkitRequestAnimationFrame ||\n window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame ||\n function (callback) {\n setTimeout(callback, 16);\n };\n\nexport {\n require,\n Scales,\n Symbols,\n pathInterpolators,\n stack,\n nestCollection,\n getSymbol,\n transformColors,\n detectColor,\n hexToHsv,\n hslToRgb,\n rgbToHsv,\n hsvToRgb,\n concatModels,\n toArray,\n angleToRadian,\n escapeHTML,\n generateGetterSetters,\n getArraySum,\n interpolator,\n piecewiseInterpolator,\n getDataModelFromIdentifiers,\n getDataModelFromRange,\n colorInterpolator,\n numberInterpolator,\n ERROR_MSG,\n reqAnimFrame,\n nextAnimFrame,\n filterPropagationModel,\n transposeArray,\n cancelAnimFrame,\n getMax,\n getMin,\n getDomainFromData,\n getUniqueId,\n mergeRecursive,\n unionDomain,\n symbolFns,\n easeFns,\n clone,\n isEqual,\n interpolateArray,\n getMinPoint,\n defaultValue,\n getMaxPoint,\n getClosestIndexOf,\n Voronoi,\n checkExistence,\n sanitizeIP,\n getMinDiff,\n capitalizeFirst,\n getWindow,\n getQualifiedClassName,\n Store,\n getDependencyOrder,\n objectIterator,\n intSanitizer,\n transactor,\n enableChainedTransaction,\n isHTMLElem,\n isSimpleObject,\n nextFrame,\n registerListeners,\n replaceCSSPrefix,\n getObjProp,\n extendsClass,\n assembleModelFromIdentifiers,\n isValidValue,\n hslInterpolator,\n getSmallestDiff\n};\n","export function linear(t) {\n return +t;\n}\n","export function circleIn(t) {\n return 1 - Math.sqrt(1 - t * t);\n}\n\nexport function circleOut(t) {\n return Math.sqrt(1 - --t * t);\n}\n\nexport function circleInOut(t) {\n return ((t *= 2) <= 1 ? 1 - Math.sqrt(1 - t * t) : Math.sqrt(1 - (t -= 2) * t) + 1) / 2;\n}\n","import {path} from \"d3-path\";\nimport circle from \"./symbol/circle\";\nimport cross from \"./symbol/cross\";\nimport diamond from \"./symbol/diamond\";\nimport star from \"./symbol/star\";\nimport square from \"./symbol/square\";\nimport triangle from \"./symbol/triangle\";\nimport wye from \"./symbol/wye\";\nimport constant from \"./constant\";\n\nexport var symbols = [\n circle,\n cross,\n diamond,\n square,\n star,\n triangle,\n wye\n];\n\nexport default function() {\n var type = constant(circle),\n size = constant(64),\n context = null;\n\n function symbol() {\n var buffer;\n if (!context) context = buffer = path();\n type.apply(this, arguments).draw(context, +size.apply(this, arguments));\n if (buffer) return context = null, buffer + \"\" || null;\n }\n\n symbol.type = function(_) {\n return arguments.length ? (type = typeof _ === \"function\" ? _ : constant(_), symbol) : type;\n };\n\n symbol.size = function(_) {\n return arguments.length ? (size = typeof _ === \"function\" ? _ : constant(+_), symbol) : size;\n };\n\n symbol.context = function(_) {\n return arguments.length ? (context = _ == null ? null : _, symbol) : context;\n };\n\n return symbol;\n}\n","export const ORDER_ASCENDING = 'ascending';\nexport const ORDER_DESCENDING = 'descending';\nexport const ORDER_NONE = 'none';\nexport const OFFSET_DIVERGING = 'diverging';\nexport const OFFSET_NONE = 'none';\nexport const OFFSET_EXPAND = 'expand';\nexport const OFFSET_WIGGLE = 'wiggle';\n","import ascending from \"./ascending\";\n\nexport default function(series) {\n return ascending(series).reverse();\n}\n","export default function(series, order) {\n if (!((n = series.length) > 1)) return;\n for (var i, j = 0, d, dy, yp, yn, n, m = series[order[0]].length; j < m; ++j) {\n for (yp = yn = 0, i = 0; i < n; ++i) {\n if ((dy = (d = series[order[i]][j])[1] - d[0]) >= 0) {\n d[0] = yp, d[1] = yp += dy;\n } else if (dy < 0) {\n d[1] = yn, d[0] = yn += dy;\n } else {\n d[0] = yp;\n }\n }\n }\n}\n","import none from \"./none\";\n\nexport default function(series, order) {\n if (!((n = series.length) > 0)) return;\n for (var i, n, j = 0, m = series[0].length, y; j < m; ++j) {\n for (y = i = 0; i < n; ++i) y += series[i][j][1] || 0;\n if (y) for (i = 0; i < n; ++i) series[i][j][1] /= y;\n }\n none(series, order);\n}\n","import none from \"./none\";\n\nexport default function(series, order) {\n if (!((n = series.length) > 0) || !((m = (s0 = series[order[0]]).length) > 0)) return;\n for (var y = 0, j = 1, s0, m, n; j < m; ++j) {\n for (var i = 0, s1 = 0, s2 = 0; i < n; ++i) {\n var si = series[order[i]],\n sij0 = si[j][1] || 0,\n sij1 = si[j - 1][1] || 0,\n s3 = (sij0 - sij1) / 2;\n for (var k = 0; k < i; ++k) {\n var sk = series[order[k]],\n skj0 = sk[j][1] || 0,\n skj1 = sk[j - 1][1] || 0;\n s3 += skj0 - skj1;\n }\n s1 += sij0, s2 += s3 * sij0;\n }\n s0[j - 1][1] += s0[j - 1][0] = y;\n if (s1) y -= s2 / s1;\n }\n s0[j - 1][1] += s0[j - 1][0] = y;\n none(series, order);\n}\n","import constant from \"./constant\";\nimport descending from \"./descending\";\nimport identity from \"./identity\";\nimport {tau} from \"./math\";\n\nexport default function() {\n var value = identity,\n sortValues = descending,\n sort = null,\n startAngle = constant(0),\n endAngle = constant(tau),\n padAngle = constant(0);\n\n function pie(data) {\n var i,\n n = data.length,\n j,\n k,\n sum = 0,\n index = new Array(n),\n arcs = new Array(n),\n a0 = +startAngle.apply(this, arguments),\n da = Math.min(tau, Math.max(-tau, endAngle.apply(this, arguments) - a0)),\n a1,\n p = Math.min(Math.abs(da) / n, padAngle.apply(this, arguments)),\n pa = p * (da < 0 ? -1 : 1),\n v;\n\n for (i = 0; i < n; ++i) {\n if ((v = arcs[index[i] = i] = +value(data[i], i, data)) > 0) {\n sum += v;\n }\n }\n\n // Optionally sort the arcs by previously-computed values or by data.\n if (sortValues != null) index.sort(function(i, j) { return sortValues(arcs[i], arcs[j]); });\n else if (sort != null) index.sort(function(i, j) { return sort(data[i], data[j]); });\n\n // Compute the arcs! They are stored in the original data's order.\n for (i = 0, k = sum ? (da - n * pa) / sum : 0; i < n; ++i, a0 = a1) {\n j = index[i], v = arcs[j], a1 = a0 + (v > 0 ? v * k : 0) + pa, arcs[j] = {\n data: data[j],\n index: i,\n value: v,\n startAngle: a0,\n endAngle: a1,\n padAngle: p\n };\n }\n\n return arcs;\n }\n\n pie.value = function(_) {\n return arguments.length ? (value = typeof _ === \"function\" ? _ : constant(+_), pie) : value;\n };\n\n pie.sortValues = function(_) {\n return arguments.length ? (sortValues = _, sort = null, pie) : sortValues;\n };\n\n pie.sort = function(_) {\n return arguments.length ? (sort = _, sortValues = null, pie) : sort;\n };\n\n pie.startAngle = function(_) {\n return arguments.length ? (startAngle = typeof _ === \"function\" ? _ : constant(+_), pie) : startAngle;\n };\n\n pie.endAngle = function(_) {\n return arguments.length ? (endAngle = typeof _ === \"function\" ? _ : constant(+_), pie) : endAngle;\n };\n\n pie.padAngle = function(_) {\n return arguments.length ? (padAngle = typeof _ === \"function\" ? _ : constant(+_), pie) : padAngle;\n };\n\n return pie;\n}\n","export var xhtml = \"http://www.w3.org/1999/xhtml\";\n\nexport default {\n svg: \"http://www.w3.org/2000/svg\",\n xhtml: xhtml,\n xlink: \"http://www.w3.org/1999/xlink\",\n xml: \"http://www.w3.org/XML/1998/namespace\",\n xmlns: \"http://www.w3.org/2000/xmlns/\"\n};\n","import namespaces from \"./namespaces\";\n\nexport default function(name) {\n var prefix = name += \"\", i = prefix.indexOf(\":\");\n if (i >= 0 && (prefix = name.slice(0, i)) !== \"xmlns\") name = name.slice(i + 1);\n return namespaces.hasOwnProperty(prefix) ? {space: namespaces[prefix], local: name} : name;\n}\n","import namespace from \"./namespace\";\nimport {xhtml} from \"./namespaces\";\n\nfunction creatorInherit(name) {\n return function() {\n var document = this.ownerDocument,\n uri = this.namespaceURI;\n return uri === xhtml && document.documentElement.namespaceURI === xhtml\n ? document.createElement(name)\n : document.createElementNS(uri, name);\n };\n}\n\nfunction creatorFixed(fullname) {\n return function() {\n return this.ownerDocument.createElementNS(fullname.space, fullname.local);\n };\n}\n\nexport default function(name) {\n var fullname = namespace(name);\n return (fullname.local\n ? creatorFixed\n : creatorInherit)(fullname);\n}\n","function none() {}\n\nexport default function(selector) {\n return selector == null ? none : function() {\n return this.querySelector(selector);\n };\n}\n","function empty() {\n return [];\n}\n\nexport default function(selector) {\n return selector == null ? empty : function() {\n return this.querySelectorAll(selector);\n };\n}\n","var matcher = function(selector) {\n return function() {\n return this.matches(selector);\n };\n};\n\nif (typeof document !== \"undefined\") {\n var element = document.documentElement;\n if (!element.matches) {\n var vendorMatches = element.webkitMatchesSelector\n || element.msMatchesSelector\n || element.mozMatchesSelector\n || element.oMatchesSelector;\n matcher = function(selector) {\n return function() {\n return vendorMatches.call(this, selector);\n };\n };\n }\n}\n\nexport default matcher;\n","export default function(update) {\n return new Array(update.length);\n}\n","import sparse from \"./sparse\";\nimport {Selection} from \"./index\";\n\nexport default function() {\n return new Selection(this._enter || this._groups.map(sparse), this._parents);\n}\n\nexport function EnterNode(parent, datum) {\n this.ownerDocument = parent.ownerDocument;\n this.namespaceURI = parent.namespaceURI;\n this._next = null;\n this._parent = parent;\n this.__data__ = datum;\n}\n\nEnterNode.prototype = {\n constructor: EnterNode,\n appendChild: function(child) { return this._parent.insertBefore(child, this._next); },\n insertBefore: function(child, next) { return this._parent.insertBefore(child, next); },\n querySelector: function(selector) { return this._parent.querySelector(selector); },\n querySelectorAll: function(selector) { return this._parent.querySelectorAll(selector); }\n};\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","import {Selection} from \"./index\";\nimport {EnterNode} from \"./enter\";\nimport constant from \"../constant\";\n\nvar keyPrefix = \"$\"; // Protect against keys like “__proto__”.\n\nfunction bindIndex(parent, group, enter, update, exit, data) {\n var i = 0,\n node,\n groupLength = group.length,\n dataLength = data.length;\n\n // Put any non-null nodes that fit into update.\n // Put any null nodes into enter.\n // Put any remaining data into enter.\n for (; i < dataLength; ++i) {\n if (node = group[i]) {\n node.__data__ = data[i];\n update[i] = node;\n } else {\n enter[i] = new EnterNode(parent, data[i]);\n }\n }\n\n // Put any non-null nodes that don’t fit into exit.\n for (; i < groupLength; ++i) {\n if (node = group[i]) {\n exit[i] = node;\n }\n }\n}\n\nfunction bindKey(parent, group, enter, update, exit, data, key) {\n var i,\n node,\n nodeByKeyValue = {},\n groupLength = group.length,\n dataLength = data.length,\n keyValues = new Array(groupLength),\n keyValue;\n\n // Compute the key for each node.\n // If multiple nodes have the same key, the duplicates are added to exit.\n for (i = 0; i < groupLength; ++i) {\n if (node = group[i]) {\n keyValues[i] = keyValue = keyPrefix + key.call(node, node.__data__, i, group);\n if (keyValue in nodeByKeyValue) {\n exit[i] = node;\n } else {\n nodeByKeyValue[keyValue] = node;\n }\n }\n }\n\n // Compute the key for each datum.\n // If there a node associated with this key, join and add it to update.\n // If there is not (or the key is a duplicate), add it to enter.\n for (i = 0; i < dataLength; ++i) {\n keyValue = keyPrefix + key.call(parent, data[i], i, data);\n if (node = nodeByKeyValue[keyValue]) {\n update[i] = node;\n node.__data__ = data[i];\n nodeByKeyValue[keyValue] = null;\n } else {\n enter[i] = new EnterNode(parent, data[i]);\n }\n }\n\n // Add any remaining nodes that were not bound to data to exit.\n for (i = 0; i < groupLength; ++i) {\n if ((node = group[i]) && (nodeByKeyValue[keyValues[i]] === node)) {\n exit[i] = node;\n }\n }\n}\n\nexport default function(value, key) {\n if (!value) {\n data = new Array(this.size()), j = -1;\n this.each(function(d) { data[++j] = d; });\n return data;\n }\n\n var bind = key ? bindKey : bindIndex,\n parents = this._parents,\n groups = this._groups;\n\n if (typeof value !== \"function\") value = constant(value);\n\n for (var m = groups.length, update = new Array(m), enter = new Array(m), exit = new Array(m), j = 0; j < m; ++j) {\n var parent = parents[j],\n group = groups[j],\n groupLength = group.length,\n data = value.call(parent, parent && parent.__data__, j, parents),\n dataLength = data.length,\n enterGroup = enter[j] = new Array(dataLength),\n updateGroup = update[j] = new Array(dataLength),\n exitGroup = exit[j] = new Array(groupLength);\n\n bind(parent, group, enterGroup, updateGroup, exitGroup, data, key);\n\n // Now connect the enter nodes to their following update node, such that\n // appendChild can insert the materialized enter node before this node,\n // rather than at the end of the parent node.\n for (var i0 = 0, i1 = 0, previous, next; i0 < dataLength; ++i0) {\n if (previous = enterGroup[i0]) {\n if (i0 >= i1) i1 = i0 + 1;\n while (!(next = updateGroup[i1]) && ++i1 < dataLength);\n previous._next = next || null;\n }\n }\n }\n\n update = new Selection(update, parents);\n update._enter = enter;\n update._exit = exit;\n return update;\n}\n","import {Selection} from \"./index\";\n\nexport default function(compare) {\n if (!compare) compare = ascending;\n\n function compareNode(a, b) {\n return a && b ? compare(a.__data__, b.__data__) : !a - !b;\n }\n\n for (var groups = this._groups, m = groups.length, sortgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, sortgroup = sortgroups[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n sortgroup[i] = node;\n }\n }\n sortgroup.sort(compareNode);\n }\n\n return new Selection(sortgroups, this._parents).order();\n}\n\nfunction ascending(a, b) {\n return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","import namespace from \"../namespace\";\n\nfunction attrRemove(name) {\n return function() {\n this.removeAttribute(name);\n };\n}\n\nfunction attrRemoveNS(fullname) {\n return function() {\n this.removeAttributeNS(fullname.space, fullname.local);\n };\n}\n\nfunction attrConstant(name, value) {\n return function() {\n this.setAttribute(name, value);\n };\n}\n\nfunction attrConstantNS(fullname, value) {\n return function() {\n this.setAttributeNS(fullname.space, fullname.local, value);\n };\n}\n\nfunction attrFunction(name, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.removeAttribute(name);\n else this.setAttribute(name, v);\n };\n}\n\nfunction attrFunctionNS(fullname, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.removeAttributeNS(fullname.space, fullname.local);\n else this.setAttributeNS(fullname.space, fullname.local, v);\n };\n}\n\nexport default function(name, value) {\n var fullname = namespace(name);\n\n if (arguments.length < 2) {\n var node = this.node();\n return fullname.local\n ? node.getAttributeNS(fullname.space, fullname.local)\n : node.getAttribute(fullname);\n }\n\n return this.each((value == null\n ? (fullname.local ? attrRemoveNS : attrRemove) : (typeof value === \"function\"\n ? (fullname.local ? attrFunctionNS : attrFunction)\n : (fullname.local ? attrConstantNS : attrConstant)))(fullname, value));\n}\n","export default function(node) {\n return (node.ownerDocument && node.ownerDocument.defaultView) // node is a Node\n || (node.document && node) // node is a Window\n || node.defaultView; // node is a Document\n}\n","import defaultView from \"../window\";\n\nfunction styleRemove(name) {\n return function() {\n this.style.removeProperty(name);\n };\n}\n\nfunction styleConstant(name, value, priority) {\n return function() {\n this.style.setProperty(name, value, priority);\n };\n}\n\nfunction styleFunction(name, value, priority) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.style.removeProperty(name);\n else this.style.setProperty(name, v, priority);\n };\n}\n\nexport default function(name, value, priority) {\n return arguments.length > 1\n ? this.each((value == null\n ? styleRemove : typeof value === \"function\"\n ? styleFunction\n : styleConstant)(name, value, priority == null ? \"\" : priority))\n : styleValue(this.node(), name);\n}\n\nexport function styleValue(node, name) {\n return node.style.getPropertyValue(name)\n || defaultView(node).getComputedStyle(node, null).getPropertyValue(name);\n}\n","function classArray(string) {\n return string.trim().split(/^|\\s+/);\n}\n\nfunction classList(node) {\n return node.classList || new ClassList(node);\n}\n\nfunction ClassList(node) {\n this._node = node;\n this._names = classArray(node.getAttribute(\"class\") || \"\");\n}\n\nClassList.prototype = {\n add: function(name) {\n var i = this._names.indexOf(name);\n if (i < 0) {\n this._names.push(name);\n this._node.setAttribute(\"class\", this._names.join(\" \"));\n }\n },\n remove: function(name) {\n var i = this._names.indexOf(name);\n if (i >= 0) {\n this._names.splice(i, 1);\n this._node.setAttribute(\"class\", this._names.join(\" \"));\n }\n },\n contains: function(name) {\n return this._names.indexOf(name) >= 0;\n }\n};\n\nfunction classedAdd(node, names) {\n var list = classList(node), i = -1, n = names.length;\n while (++i < n) list.add(names[i]);\n}\n\nfunction classedRemove(node, names) {\n var list = classList(node), i = -1, n = names.length;\n while (++i < n) list.remove(names[i]);\n}\n\nfunction classedTrue(names) {\n return function() {\n classedAdd(this, names);\n };\n}\n\nfunction classedFalse(names) {\n return function() {\n classedRemove(this, names);\n };\n}\n\nfunction classedFunction(names, value) {\n return function() {\n (value.apply(this, arguments) ? classedAdd : classedRemove)(this, names);\n };\n}\n\nexport default function(name, value) {\n var names = classArray(name + \"\");\n\n if (arguments.length < 2) {\n var list = classList(this.node()), i = -1, n = names.length;\n while (++i < n) if (!list.contains(names[i])) return false;\n return true;\n }\n\n return this.each((typeof value === \"function\"\n ? classedFunction : value\n ? classedTrue\n : classedFalse)(names, value));\n}\n","function textRemove() {\n this.textContent = \"\";\n}\n\nfunction textConstant(value) {\n return function() {\n this.textContent = value;\n };\n}\n\nfunction textFunction(value) {\n return function() {\n var v = value.apply(this, arguments);\n this.textContent = v == null ? \"\" : v;\n };\n}\n\nexport default function(value) {\n return arguments.length\n ? this.each(value == null\n ? textRemove : (typeof value === \"function\"\n ? textFunction\n : textConstant)(value))\n : this.node().textContent;\n}\n","function htmlRemove() {\n this.innerHTML = \"\";\n}\n\nfunction htmlConstant(value) {\n return function() {\n this.innerHTML = value;\n };\n}\n\nfunction htmlFunction(value) {\n return function() {\n var v = value.apply(this, arguments);\n this.innerHTML = v == null ? \"\" : v;\n };\n}\n\nexport default function(value) {\n return arguments.length\n ? this.each(value == null\n ? htmlRemove : (typeof value === \"function\"\n ? htmlFunction\n : htmlConstant)(value))\n : this.node().innerHTML;\n}\n","function raise() {\n if (this.nextSibling) this.parentNode.appendChild(this);\n}\n\nexport default function() {\n return this.each(raise);\n}\n","function lower() {\n if (this.previousSibling) this.parentNode.insertBefore(this, this.parentNode.firstChild);\n}\n\nexport default function() {\n return this.each(lower);\n}\n","import creator from \"../creator\";\nimport selector from \"../selector\";\n\nfunction constantNull() {\n return null;\n}\n\nexport default function(name, before) {\n var create = typeof name === \"function\" ? name : creator(name),\n select = before == null ? constantNull : typeof before === \"function\" ? before : selector(before);\n return this.select(function() {\n return this.insertBefore(create.apply(this, arguments), select.apply(this, arguments) || null);\n });\n}\n","function remove() {\n var parent = this.parentNode;\n if (parent) parent.removeChild(this);\n}\n\nexport default function() {\n return this.each(remove);\n}\n","function selection_cloneShallow() {\n return this.parentNode.insertBefore(this.cloneNode(false), this.nextSibling);\n}\n\nfunction selection_cloneDeep() {\n return this.parentNode.insertBefore(this.cloneNode(true), this.nextSibling);\n}\n\nexport default function(deep) {\n return this.select(deep ? selection_cloneDeep : selection_cloneShallow);\n}\n","var filterEvents = {};\n\nexport var event = null;\n\nif (typeof document !== \"undefined\") {\n var element = document.documentElement;\n if (!(\"onmouseenter\" in element)) {\n filterEvents = {mouseenter: \"mouseover\", mouseleave: \"mouseout\"};\n }\n}\n\nfunction filterContextListener(listener, index, group) {\n listener = contextListener(listener, index, group);\n return function(event) {\n var related = event.relatedTarget;\n if (!related || (related !== this && !(related.compareDocumentPosition(this) & 8))) {\n listener.call(this, event);\n }\n };\n}\n\nfunction contextListener(listener, index, group) {\n return function(event1) {\n var event0 = event; // Events can be reentrant (e.g., focus).\n event = event1;\n try {\n listener.call(this, this.__data__, index, group);\n } finally {\n event = event0;\n }\n };\n}\n\nfunction parseTypenames(typenames) {\n return typenames.trim().split(/^|\\s+/).map(function(t) {\n var name = \"\", i = t.indexOf(\".\");\n if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n return {type: t, name: name};\n });\n}\n\nfunction onRemove(typename) {\n return function() {\n var on = this.__on;\n if (!on) return;\n for (var j = 0, i = -1, m = on.length, o; j < m; ++j) {\n if (o = on[j], (!typename.type || o.type === typename.type) && o.name === typename.name) {\n this.removeEventListener(o.type, o.listener, o.capture);\n } else {\n on[++i] = o;\n }\n }\n if (++i) on.length = i;\n else delete this.__on;\n };\n}\n\nfunction onAdd(typename, value, capture) {\n var wrap = filterEvents.hasOwnProperty(typename.type) ? filterContextListener : contextListener;\n return function(d, i, group) {\n var on = this.__on, o, listener = wrap(value, i, group);\n if (on) for (var j = 0, m = on.length; j < m; ++j) {\n if ((o = on[j]).type === typename.type && o.name === typename.name) {\n this.removeEventListener(o.type, o.listener, o.capture);\n this.addEventListener(o.type, o.listener = listener, o.capture = capture);\n o.value = value;\n return;\n }\n }\n this.addEventListener(typename.type, listener, capture);\n o = {type: typename.type, name: typename.name, value: value, listener: listener, capture: capture};\n if (!on) this.__on = [o];\n else on.push(o);\n };\n}\n\nexport default function(typename, value, capture) {\n var typenames = parseTypenames(typename + \"\"), i, n = typenames.length, t;\n\n if (arguments.length < 2) {\n var on = this.node().__on;\n if (on) for (var j = 0, m = on.length, o; j < m; ++j) {\n for (i = 0, o = on[j]; i < n; ++i) {\n if ((t = typenames[i]).type === o.type && t.name === o.name) {\n return o.value;\n }\n }\n }\n return;\n }\n\n on = value ? onAdd : onRemove;\n if (capture == null) capture = false;\n for (i = 0; i < n; ++i) this.each(on(typenames[i], value, capture));\n return this;\n}\n\nexport function customEvent(event1, listener, that, args) {\n var event0 = event;\n event1.sourceEvent = event;\n event = event1;\n try {\n return listener.apply(that, args);\n } finally {\n event = event0;\n }\n}\n","import defaultView from \"../window\";\n\nfunction dispatchEvent(node, type, params) {\n var window = defaultView(node),\n event = window.CustomEvent;\n\n if (typeof event === \"function\") {\n event = new event(type, params);\n } else {\n event = window.document.createEvent(\"Event\");\n if (params) event.initEvent(type, params.bubbles, params.cancelable), event.detail = params.detail;\n else event.initEvent(type, false, false);\n }\n\n node.dispatchEvent(event);\n}\n\nfunction dispatchConstant(type, params) {\n return function() {\n return dispatchEvent(this, type, params);\n };\n}\n\nfunction dispatchFunction(type, params) {\n return function() {\n return dispatchEvent(this, type, params.apply(this, arguments));\n };\n}\n\nexport default function(type, params) {\n return this.each((typeof params === \"function\"\n ? dispatchFunction\n : dispatchConstant)(type, params));\n}\n","import selection_select from \"./select\";\nimport selection_selectAll from \"./selectAll\";\nimport selection_filter from \"./filter\";\nimport selection_data from \"./data\";\nimport selection_enter from \"./enter\";\nimport selection_exit from \"./exit\";\nimport selection_merge from \"./merge\";\nimport selection_order from \"./order\";\nimport selection_sort from \"./sort\";\nimport selection_call from \"./call\";\nimport selection_nodes from \"./nodes\";\nimport selection_node from \"./node\";\nimport selection_size from \"./size\";\nimport selection_empty from \"./empty\";\nimport selection_each from \"./each\";\nimport selection_attr from \"./attr\";\nimport selection_style from \"./style\";\nimport selection_property from \"./property\";\nimport selection_classed from \"./classed\";\nimport selection_text from \"./text\";\nimport selection_html from \"./html\";\nimport selection_raise from \"./raise\";\nimport selection_lower from \"./lower\";\nimport selection_append from \"./append\";\nimport selection_insert from \"./insert\";\nimport selection_remove from \"./remove\";\nimport selection_clone from \"./clone\";\nimport selection_datum from \"./datum\";\nimport selection_on from \"./on\";\nimport selection_dispatch from \"./dispatch\";\n\nexport var root = [null];\n\nexport function Selection(groups, parents) {\n this._groups = groups;\n this._parents = parents;\n}\n\nfunction selection() {\n return new Selection([[document.documentElement]], root);\n}\n\nSelection.prototype = selection.prototype = {\n constructor: Selection,\n select: selection_select,\n selectAll: selection_selectAll,\n filter: selection_filter,\n data: selection_data,\n enter: selection_enter,\n exit: selection_exit,\n merge: selection_merge,\n order: selection_order,\n sort: selection_sort,\n call: selection_call,\n nodes: selection_nodes,\n node: selection_node,\n size: selection_size,\n empty: selection_empty,\n each: selection_each,\n attr: selection_attr,\n style: selection_style,\n property: selection_property,\n classed: selection_classed,\n text: selection_text,\n html: selection_html,\n raise: selection_raise,\n lower: selection_lower,\n append: selection_append,\n insert: selection_insert,\n remove: selection_remove,\n clone: selection_clone,\n datum: selection_datum,\n on: selection_on,\n dispatch: selection_dispatch\n};\n\nexport default selection;\n","import {Selection} from \"./index\";\nimport selector from \"../selector\";\n\nexport default function(select) {\n if (typeof select !== \"function\") select = selector(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {\n if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {\n if (\"__data__\" in node) subnode.__data__ = node.__data__;\n subgroup[i] = subnode;\n }\n }\n }\n\n return new Selection(subgroups, this._parents);\n}\n","import {Selection} from \"./index\";\nimport selectorAll from \"../selectorAll\";\n\nexport default function(select) {\n if (typeof select !== \"function\") select = selectorAll(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n subgroups.push(select.call(node, node.__data__, i, group));\n parents.push(node);\n }\n }\n }\n\n return new Selection(subgroups, parents);\n}\n","import {Selection} from \"./index\";\nimport matcher from \"../matcher\";\n\nexport default function(match) {\n if (typeof match !== \"function\") match = matcher(match);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {\n if ((node = group[i]) && match.call(node, node.__data__, i, group)) {\n subgroup.push(node);\n }\n }\n }\n\n return new Selection(subgroups, this._parents);\n}\n","import sparse from \"./sparse\";\nimport {Selection} from \"./index\";\n\nexport default function() {\n return new Selection(this._exit || this._groups.map(sparse), this._parents);\n}\n","import {Selection} from \"./index\";\n\nexport default function(selection) {\n\n for (var groups0 = this._groups, groups1 = selection._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {\n for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group0[i] || group1[i]) {\n merge[i] = node;\n }\n }\n }\n\n for (; j < m0; ++j) {\n merges[j] = groups0[j];\n }\n\n return new Selection(merges, this._parents);\n}\n","export default function() {\n\n for (var groups = this._groups, j = -1, m = groups.length; ++j < m;) {\n for (var group = groups[j], i = group.length - 1, next = group[i], node; --i >= 0;) {\n if (node = group[i]) {\n if (next && next !== node.nextSibling) next.parentNode.insertBefore(node, next);\n next = node;\n }\n }\n }\n\n return this;\n}\n","export default function() {\n var callback = arguments[0];\n arguments[0] = this;\n callback.apply(null, arguments);\n return this;\n}\n","export default function() {\n var nodes = new Array(this.size()), i = -1;\n this.each(function() { nodes[++i] = this; });\n return nodes;\n}\n","export default function() {\n\n for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n for (var group = groups[j], i = 0, n = group.length; i < n; ++i) {\n var node = group[i];\n if (node) return node;\n }\n }\n\n return null;\n}\n","export default function() {\n var size = 0;\n this.each(function() { ++size; });\n return size;\n}\n","export default function() {\n return !this.node();\n}\n","export default function(callback) {\n\n for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n for (var group = groups[j], i = 0, n = group.length, node; i < n; ++i) {\n if (node = group[i]) callback.call(node, node.__data__, i, group);\n }\n }\n\n return this;\n}\n","function propertyRemove(name) {\n return function() {\n delete this[name];\n };\n}\n\nfunction propertyConstant(name, value) {\n return function() {\n this[name] = value;\n };\n}\n\nfunction propertyFunction(name, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) delete this[name];\n else this[name] = v;\n };\n}\n\nexport default function(name, value) {\n return arguments.length > 1\n ? this.each((value == null\n ? propertyRemove : typeof value === \"function\"\n ? propertyFunction\n : propertyConstant)(name, value))\n : this.node()[name];\n}\n","import creator from \"../creator\";\n\nexport default function(name) {\n var create = typeof name === \"function\" ? name : creator(name);\n return this.select(function() {\n return this.appendChild(create.apply(this, arguments));\n });\n}\n","export default function(value) {\n return arguments.length\n ? this.property(\"__data__\", value)\n : this.node().__data__;\n}\n","import {Selection, root} from \"./selection/index\";\n\nexport default function(selector) {\n return typeof selector === \"string\"\n ? new Selection([[document.querySelector(selector)]], [document.documentElement])\n : new Selection([[selector]], root);\n}\n","var nextId = 0;\n\nexport default function local() {\n return new Local;\n}\n\nfunction Local() {\n this._ = \"@\" + (++nextId).toString(36);\n}\n\nLocal.prototype = local.prototype = {\n constructor: Local,\n get: function(node) {\n var id = this._;\n while (!(id in node)) if (!(node = node.parentNode)) return;\n return node[id];\n },\n set: function(node, value) {\n return node[this._] = value;\n },\n remove: function(node) {\n return this._ in node && delete node[this._];\n },\n toString: function() {\n return this._;\n }\n};\n","import {event} from \"./selection/on\";\n\nexport default function() {\n var current = event, source;\n while (source = current.sourceEvent) current = source;\n return current;\n}\n","export default function(node, event) {\n var svg = node.ownerSVGElement || node;\n\n if (svg.createSVGPoint) {\n var point = svg.createSVGPoint();\n point.x = event.clientX, point.y = event.clientY;\n point = point.matrixTransform(node.getScreenCTM().inverse());\n return [point.x, point.y];\n }\n\n var rect = node.getBoundingClientRect();\n return [event.clientX - rect.left - node.clientLeft, event.clientY - rect.top - node.clientTop];\n}\n","import sourceEvent from \"./sourceEvent\";\nimport point from \"./point\";\n\nexport default function(node) {\n var event = sourceEvent();\n if (event.changedTouches) event = event.changedTouches[0];\n return point(node, event);\n}\n","import sourceEvent from \"./sourceEvent\";\nimport point from \"./point\";\n\nexport default function(node, touches, identifier) {\n if (arguments.length < 3) identifier = touches, touches = sourceEvent().changedTouches;\n\n for (var i = 0, n = touches ? touches.length : 0, touch; i < n; ++i) {\n if ((touch = touches[i]).identifier === identifier) {\n return point(node, touch);\n }\n }\n\n return null;\n}\n","var noop = {value: function() {}};\n\nfunction dispatch() {\n for (var i = 0, n = arguments.length, _ = {}, t; i < n; ++i) {\n if (!(t = arguments[i] + \"\") || (t in _)) throw new Error(\"illegal type: \" + t);\n _[t] = [];\n }\n return new Dispatch(_);\n}\n\nfunction Dispatch(_) {\n this._ = _;\n}\n\nfunction parseTypenames(typenames, types) {\n return typenames.trim().split(/^|\\s+/).map(function(t) {\n var name = \"\", i = t.indexOf(\".\");\n if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n if (t && !types.hasOwnProperty(t)) throw new Error(\"unknown type: \" + t);\n return {type: t, name: name};\n });\n}\n\nDispatch.prototype = dispatch.prototype = {\n constructor: Dispatch,\n on: function(typename, callback) {\n var _ = this._,\n T = parseTypenames(typename + \"\", _),\n t,\n i = -1,\n n = T.length;\n\n // If no callback was specified, return the callback of the given type and name.\n if (arguments.length < 2) {\n while (++i < n) if ((t = (typename = T[i]).type) && (t = get(_[t], typename.name))) return t;\n return;\n }\n\n // If a type was specified, set the callback for the given type and name.\n // Otherwise, if a null callback was specified, remove callbacks of the given name.\n if (callback != null && typeof callback !== \"function\") throw new Error(\"invalid callback: \" + callback);\n while (++i < n) {\n if (t = (typename = T[i]).type) _[t] = set(_[t], typename.name, callback);\n else if (callback == null) for (t in _) _[t] = set(_[t], typename.name, null);\n }\n\n return this;\n },\n copy: function() {\n var copy = {}, _ = this._;\n for (var t in _) copy[t] = _[t].slice();\n return new Dispatch(copy);\n },\n call: function(type, that) {\n if ((n = arguments.length - 2) > 0) for (var args = new Array(n), i = 0, n, t; i < n; ++i) args[i] = arguments[i + 2];\n if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n for (t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n },\n apply: function(type, that, args) {\n if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n for (var t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n }\n};\n\nfunction get(type, name) {\n for (var i = 0, n = type.length, c; i < n; ++i) {\n if ((c = type[i]).name === name) {\n return c.value;\n }\n }\n}\n\nfunction set(type, name, callback) {\n for (var i = 0, n = type.length; i < n; ++i) {\n if (type[i].name === name) {\n type[i] = noop, type = type.slice(0, i).concat(type.slice(i + 1));\n break;\n }\n }\n if (callback != null) type.push({name: name, value: callback});\n return type;\n}\n\nexport default dispatch;\n","import {event} from \"d3-selection\";\n\nexport function nopropagation() {\n event.stopImmediatePropagation();\n}\n\nexport default function() {\n event.preventDefault();\n event.stopImmediatePropagation();\n}\n","import {select} from \"d3-selection\";\nimport noevent from \"./noevent\";\n\nexport default function(view) {\n var root = view.document.documentElement,\n selection = select(view).on(\"dragstart.drag\", noevent, true);\n if (\"onselectstart\" in root) {\n selection.on(\"selectstart.drag\", noevent, true);\n } else {\n root.__noselect = root.style.MozUserSelect;\n root.style.MozUserSelect = \"none\";\n }\n}\n\nexport function yesdrag(view, noclick) {\n var root = view.document.documentElement,\n selection = select(view).on(\"dragstart.drag\", null);\n if (noclick) {\n selection.on(\"click.drag\", noevent, true);\n setTimeout(function() { selection.on(\"click.drag\", null); }, 0);\n }\n if (\"onselectstart\" in root) {\n selection.on(\"selectstart.drag\", null);\n } else {\n root.style.MozUserSelect = root.__noselect;\n delete root.__noselect;\n }\n}\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","export default function DragEvent(target, type, subject, id, active, x, y, dx, dy, dispatch) {\n this.target = target;\n this.type = type;\n this.subject = subject;\n this.identifier = id;\n this.active = active;\n this.x = x;\n this.y = y;\n this.dx = dx;\n this.dy = dy;\n this._ = dispatch;\n}\n\nDragEvent.prototype.on = function() {\n var value = this._.on.apply(this._, arguments);\n return value === this._ ? this : value;\n};\n","import {dispatch} from \"d3-dispatch\";\nimport {event, customEvent, select, mouse, touch} from \"d3-selection\";\nimport nodrag, {yesdrag} from \"./nodrag\";\nimport noevent, {nopropagation} from \"./noevent\";\nimport constant from \"./constant\";\nimport DragEvent from \"./event\";\n\n// Ignore right-click, since that should open the context menu.\nfunction defaultFilter() {\n return !event.button;\n}\n\nfunction defaultContainer() {\n return this.parentNode;\n}\n\nfunction defaultSubject(d) {\n return d == null ? {x: event.x, y: event.y} : d;\n}\n\nfunction defaultTouchable() {\n return \"ontouchstart\" in this;\n}\n\nexport default function() {\n var filter = defaultFilter,\n container = defaultContainer,\n subject = defaultSubject,\n touchable = defaultTouchable,\n gestures = {},\n listeners = dispatch(\"start\", \"drag\", \"end\"),\n active = 0,\n mousedownx,\n mousedowny,\n mousemoving,\n touchending,\n clickDistance2 = 0;\n\n function drag(selection) {\n selection\n .on(\"mousedown.drag\", mousedowned)\n .filter(touchable)\n .on(\"touchstart.drag\", touchstarted)\n .on(\"touchmove.drag\", touchmoved)\n .on(\"touchend.drag touchcancel.drag\", touchended)\n .style(\"touch-action\", \"none\")\n .style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\");\n }\n\n function mousedowned() {\n if (touchending || !filter.apply(this, arguments)) return;\n var gesture = beforestart(\"mouse\", container.apply(this, arguments), mouse, this, arguments);\n if (!gesture) return;\n select(event.view).on(\"mousemove.drag\", mousemoved, true).on(\"mouseup.drag\", mouseupped, true);\n nodrag(event.view);\n nopropagation();\n mousemoving = false;\n mousedownx = event.clientX;\n mousedowny = event.clientY;\n gesture(\"start\");\n }\n\n function mousemoved() {\n noevent();\n if (!mousemoving) {\n var dx = event.clientX - mousedownx, dy = event.clientY - mousedowny;\n mousemoving = dx * dx + dy * dy > clickDistance2;\n }\n gestures.mouse(\"drag\");\n }\n\n function mouseupped() {\n select(event.view).on(\"mousemove.drag mouseup.drag\", null);\n yesdrag(event.view, mousemoving);\n noevent();\n gestures.mouse(\"end\");\n }\n\n function touchstarted() {\n if (!filter.apply(this, arguments)) return;\n var touches = event.changedTouches,\n c = container.apply(this, arguments),\n n = touches.length, i, gesture;\n\n for (i = 0; i < n; ++i) {\n if (gesture = beforestart(touches[i].identifier, c, touch, this, arguments)) {\n nopropagation();\n gesture(\"start\");\n }\n }\n }\n\n function touchmoved() {\n var touches = event.changedTouches,\n n = touches.length, i, gesture;\n\n for (i = 0; i < n; ++i) {\n if (gesture = gestures[touches[i].identifier]) {\n noevent();\n gesture(\"drag\");\n }\n }\n }\n\n function touchended() {\n var touches = event.changedTouches,\n n = touches.length, i, gesture;\n\n if (touchending) clearTimeout(touchending);\n touchending = setTimeout(function() { touchending = null; }, 500); // Ghost clicks are delayed!\n for (i = 0; i < n; ++i) {\n if (gesture = gestures[touches[i].identifier]) {\n nopropagation();\n gesture(\"end\");\n }\n }\n }\n\n function beforestart(id, container, point, that, args) {\n var p = point(container, id), s, dx, dy,\n sublisteners = listeners.copy();\n\n if (!customEvent(new DragEvent(drag, \"beforestart\", s, id, active, p[0], p[1], 0, 0, sublisteners), function() {\n if ((event.subject = s = subject.apply(that, args)) == null) return false;\n dx = s.x - p[0] || 0;\n dy = s.y - p[1] || 0;\n return true;\n })) return;\n\n return function gesture(type) {\n var p0 = p, n;\n switch (type) {\n case \"start\": gestures[id] = gesture, n = active++; break;\n case \"end\": delete gestures[id], --active; // nobreak\n case \"drag\": p = point(container, id), n = active; break;\n }\n customEvent(new DragEvent(drag, type, s, id, n, p[0] + dx, p[1] + dy, p[0] - p0[0], p[1] - p0[1], sublisteners), sublisteners.apply, sublisteners, [type, that, args]);\n };\n }\n\n drag.filter = function(_) {\n return arguments.length ? (filter = typeof _ === \"function\" ? _ : constant(!!_), drag) : filter;\n };\n\n drag.container = function(_) {\n return arguments.length ? (container = typeof _ === \"function\" ? _ : constant(_), drag) : container;\n };\n\n drag.subject = function(_) {\n return arguments.length ? (subject = typeof _ === \"function\" ? _ : constant(_), drag) : subject;\n };\n\n drag.touchable = function(_) {\n return arguments.length ? (touchable = typeof _ === \"function\" ? _ : constant(!!_), drag) : touchable;\n };\n\n drag.on = function() {\n var value = listeners.on.apply(listeners, arguments);\n return value === listeners ? drag : value;\n };\n\n drag.clickDistance = function(_) {\n return arguments.length ? (clickDistance2 = (_ = +_) * _, drag) : Math.sqrt(clickDistance2);\n };\n\n return drag;\n}\n","var frame = 0, // is an animation frame pending?\n timeout = 0, // is a timeout pending?\n interval = 0, // are any timers active?\n pokeDelay = 1000, // how frequently we check for clock skew\n taskHead,\n taskTail,\n clockLast = 0,\n clockNow = 0,\n clockSkew = 0,\n clock = typeof performance === \"object\" && performance.now ? performance : Date,\n setFrame = typeof window === \"object\" && window.requestAnimationFrame ? window.requestAnimationFrame.bind(window) : function(f) { setTimeout(f, 17); };\n\nexport function now() {\n return clockNow || (setFrame(clearNow), clockNow = clock.now() + clockSkew);\n}\n\nfunction clearNow() {\n clockNow = 0;\n}\n\nexport function Timer() {\n this._call =\n this._time =\n this._next = null;\n}\n\nTimer.prototype = timer.prototype = {\n constructor: Timer,\n restart: function(callback, delay, time) {\n if (typeof callback !== \"function\") throw new TypeError(\"callback is not a function\");\n time = (time == null ? now() : +time) + (delay == null ? 0 : +delay);\n if (!this._next && taskTail !== this) {\n if (taskTail) taskTail._next = this;\n else taskHead = this;\n taskTail = this;\n }\n this._call = callback;\n this._time = time;\n sleep();\n },\n stop: function() {\n if (this._call) {\n this._call = null;\n this._time = Infinity;\n sleep();\n }\n }\n};\n\nexport function timer(callback, delay, time) {\n var t = new Timer;\n t.restart(callback, delay, time);\n return t;\n}\n\nexport function timerFlush() {\n now(); // Get the current time, if not already set.\n ++frame; // Pretend we’ve set an alarm, if we haven’t already.\n var t = taskHead, e;\n while (t) {\n if ((e = clockNow - t._time) >= 0) t._call.call(null, e);\n t = t._next;\n }\n --frame;\n}\n\nfunction wake() {\n clockNow = (clockLast = clock.now()) + clockSkew;\n frame = timeout = 0;\n try {\n timerFlush();\n } finally {\n frame = 0;\n nap();\n clockNow = 0;\n }\n}\n\nfunction poke() {\n var now = clock.now(), delay = now - clockLast;\n if (delay > pokeDelay) clockSkew -= delay, clockLast = now;\n}\n\nfunction nap() {\n var t0, t1 = taskHead, t2, time = Infinity;\n while (t1) {\n if (t1._call) {\n if (time > t1._time) time = t1._time;\n t0 = t1, t1 = t1._next;\n } else {\n t2 = t1._next, t1._next = null;\n t1 = t0 ? t0._next = t2 : taskHead = t2;\n }\n }\n taskTail = t0;\n sleep(time);\n}\n\nfunction sleep(time) {\n if (frame) return; // Soonest alarm already set, or will be.\n if (timeout) timeout = clearTimeout(timeout);\n var delay = time - clockNow; // Strictly less than if we recomputed clockNow.\n if (delay > 24) {\n if (time < Infinity) timeout = setTimeout(wake, time - clock.now() - clockSkew);\n if (interval) interval = clearInterval(interval);\n } else {\n if (!interval) clockLast = clock.now(), interval = setInterval(poke, pokeDelay);\n frame = 1, setFrame(wake);\n }\n}\n","import {Timer} from \"./timer\";\n\nexport default function(callback, delay, time) {\n var t = new Timer;\n delay = delay == null ? 0 : +delay;\n t.restart(function(elapsed) {\n t.stop();\n callback(elapsed + delay);\n }, delay, time);\n return t;\n}\n","import {dispatch} from \"d3-dispatch\";\nimport {timer, timeout} from \"d3-timer\";\n\nvar emptyOn = dispatch(\"start\", \"end\", \"interrupt\");\nvar emptyTween = [];\n\nexport var CREATED = 0;\nexport var SCHEDULED = 1;\nexport var STARTING = 2;\nexport var STARTED = 3;\nexport var RUNNING = 4;\nexport var ENDING = 5;\nexport var ENDED = 6;\n\nexport default function(node, name, id, index, group, timing) {\n var schedules = node.__transition;\n if (!schedules) node.__transition = {};\n else if (id in schedules) return;\n create(node, id, {\n name: name,\n index: index, // For context during callback.\n group: group, // For context during callback.\n on: emptyOn,\n tween: emptyTween,\n time: timing.time,\n delay: timing.delay,\n duration: timing.duration,\n ease: timing.ease,\n timer: null,\n state: CREATED\n });\n}\n\nexport function init(node, id) {\n var schedule = get(node, id);\n if (schedule.state > CREATED) throw new Error(\"too late; already scheduled\");\n return schedule;\n}\n\nexport function set(node, id) {\n var schedule = get(node, id);\n if (schedule.state > STARTING) throw new Error(\"too late; already started\");\n return schedule;\n}\n\nexport function get(node, id) {\n var schedule = node.__transition;\n if (!schedule || !(schedule = schedule[id])) throw new Error(\"transition not found\");\n return schedule;\n}\n\nfunction create(node, id, self) {\n var schedules = node.__transition,\n tween;\n\n // Initialize the self timer when the transition is created.\n // Note the actual delay is not known until the first callback!\n schedules[id] = self;\n self.timer = timer(schedule, 0, self.time);\n\n function schedule(elapsed) {\n self.state = SCHEDULED;\n self.timer.restart(start, self.delay, self.time);\n\n // If the elapsed delay is less than our first sleep, start immediately.\n if (self.delay <= elapsed) start(elapsed - self.delay);\n }\n\n function start(elapsed) {\n var i, j, n, o;\n\n // If the state is not SCHEDULED, then we previously errored on start.\n if (self.state !== SCHEDULED) return stop();\n\n for (i in schedules) {\n o = schedules[i];\n if (o.name !== self.name) continue;\n\n // While this element already has a starting transition during this frame,\n // defer starting an interrupting transition until that transition has a\n // chance to tick (and possibly end); see d3/d3-transition#54!\n if (o.state === STARTED) return timeout(start);\n\n // Interrupt the active transition, if any.\n // Dispatch the interrupt event.\n if (o.state === RUNNING) {\n o.state = ENDED;\n o.timer.stop();\n o.on.call(\"interrupt\", node, node.__data__, o.index, o.group);\n delete schedules[i];\n }\n\n // Cancel any pre-empted transitions. No interrupt event is dispatched\n // because the cancelled transitions never started. Note that this also\n // removes this transition from the pending list!\n else if (+i < id) {\n o.state = ENDED;\n o.timer.stop();\n delete schedules[i];\n }\n }\n\n // Defer the first tick to end of the current frame; see d3/d3#1576.\n // Note the transition may be canceled after start and before the first tick!\n // Note this must be scheduled before the start event; see d3/d3-transition#16!\n // Assuming this is successful, subsequent callbacks go straight to tick.\n timeout(function() {\n if (self.state === STARTED) {\n self.state = RUNNING;\n self.timer.restart(tick, self.delay, self.time);\n tick(elapsed);\n }\n });\n\n // Dispatch the start event.\n // Note this must be done before the tween are initialized.\n self.state = STARTING;\n self.on.call(\"start\", node, node.__data__, self.index, self.group);\n if (self.state !== STARTING) return; // interrupted\n self.state = STARTED;\n\n // Initialize the tween, deleting null tween.\n tween = new Array(n = self.tween.length);\n for (i = 0, j = -1; i < n; ++i) {\n if (o = self.tween[i].value.call(node, node.__data__, self.index, self.group)) {\n tween[++j] = o;\n }\n }\n tween.length = j + 1;\n }\n\n function tick(elapsed) {\n var t = elapsed < self.duration ? self.ease.call(null, elapsed / self.duration) : (self.timer.restart(stop), self.state = ENDING, 1),\n i = -1,\n n = tween.length;\n\n while (++i < n) {\n tween[i].call(null, t);\n }\n\n // Dispatch the end event.\n if (self.state === ENDING) {\n self.on.call(\"end\", node, node.__data__, self.index, self.group);\n stop();\n }\n }\n\n function stop() {\n self.state = ENDED;\n self.timer.stop();\n delete schedules[id];\n for (var i in schedules) return; // eslint-disable-line no-unused-vars\n delete node.__transition;\n }\n}\n","import {get, set} from \"./schedule\";\n\nfunction tweenRemove(id, name) {\n var tween0, tween1;\n return function() {\n var schedule = set(this, id),\n tween = schedule.tween;\n\n // If this node shared tween with the previous node,\n // just assign the updated shared tween and we’re done!\n // Otherwise, copy-on-write.\n if (tween !== tween0) {\n tween1 = tween0 = tween;\n for (var i = 0, n = tween1.length; i < n; ++i) {\n if (tween1[i].name === name) {\n tween1 = tween1.slice();\n tween1.splice(i, 1);\n break;\n }\n }\n }\n\n schedule.tween = tween1;\n };\n}\n\nfunction tweenFunction(id, name, value) {\n var tween0, tween1;\n if (typeof value !== \"function\") throw new Error;\n return function() {\n var schedule = set(this, id),\n tween = schedule.tween;\n\n // If this node shared tween with the previous node,\n // just assign the updated shared tween and we’re done!\n // Otherwise, copy-on-write.\n if (tween !== tween0) {\n tween1 = (tween0 = tween).slice();\n for (var t = {name: name, value: value}, i = 0, n = tween1.length; i < n; ++i) {\n if (tween1[i].name === name) {\n tween1[i] = t;\n break;\n }\n }\n if (i === n) tween1.push(t);\n }\n\n schedule.tween = tween1;\n };\n}\n\nexport default function(name, value) {\n var id = this._id;\n\n name += \"\";\n\n if (arguments.length < 2) {\n var tween = get(this.node(), id).tween;\n for (var i = 0, n = tween.length, t; i < n; ++i) {\n if ((t = tween[i]).name === name) {\n return t.value;\n }\n }\n return null;\n }\n\n return this.each((value == null ? tweenRemove : tweenFunction)(id, name, value));\n}\n\nexport function tweenValue(transition, name, value) {\n var id = transition._id;\n\n transition.each(function() {\n var schedule = set(this, id);\n (schedule.value || (schedule.value = {}))[name] = value.apply(this, arguments);\n });\n\n return function(node) {\n return get(node, id).value[name];\n };\n}\n","import {color} from \"d3-color\";\nimport {interpolateNumber, interpolateRgb, interpolateString} from \"d3-interpolate\";\n\nexport default function(a, b) {\n var c;\n return (typeof b === \"number\" ? interpolateNumber\n : b instanceof color ? interpolateRgb\n : (c = color(b)) ? (b = c, interpolateRgb)\n : interpolateString)(a, b);\n}\n","function removeFunction(id) {\n return function() {\n var parent = this.parentNode;\n for (var i in this.__transition) if (+i !== id) return;\n if (parent) parent.removeChild(this);\n };\n}\n\nexport default function() {\n return this.on(\"end.remove\", removeFunction(this._id));\n}\n","import {selection} from \"d3-selection\";\n\nvar Selection = selection.prototype.constructor;\n\nexport default function() {\n return new Selection(this._groups, this._parents);\n}\n","import {tweenValue} from \"./tween\";\n\nfunction textConstant(value) {\n return function() {\n this.textContent = value;\n };\n}\n\nfunction textFunction(value) {\n return function() {\n var value1 = value(this);\n this.textContent = value1 == null ? \"\" : value1;\n };\n}\n\nexport default function(value) {\n return this.tween(\"text\", typeof value === \"function\"\n ? textFunction(tweenValue(this, \"text\", value))\n : textConstant(value == null ? \"\" : value + \"\"));\n}\n","import {selection} from \"d3-selection\";\nimport transition_attr from \"./attr\";\nimport transition_attrTween from \"./attrTween\";\nimport transition_delay from \"./delay\";\nimport transition_duration from \"./duration\";\nimport transition_ease from \"./ease\";\nimport transition_filter from \"./filter\";\nimport transition_merge from \"./merge\";\nimport transition_on from \"./on\";\nimport transition_remove from \"./remove\";\nimport transition_select from \"./select\";\nimport transition_selectAll from \"./selectAll\";\nimport transition_selection from \"./selection\";\nimport transition_style from \"./style\";\nimport transition_styleTween from \"./styleTween\";\nimport transition_text from \"./text\";\nimport transition_transition from \"./transition\";\nimport transition_tween from \"./tween\";\n\nvar id = 0;\n\nexport function Transition(groups, parents, name, id) {\n this._groups = groups;\n this._parents = parents;\n this._name = name;\n this._id = id;\n}\n\nexport default function transition(name) {\n return selection().transition(name);\n}\n\nexport function newId() {\n return ++id;\n}\n\nvar selection_prototype = selection.prototype;\n\nTransition.prototype = transition.prototype = {\n constructor: Transition,\n select: transition_select,\n selectAll: transition_selectAll,\n filter: transition_filter,\n merge: transition_merge,\n selection: transition_selection,\n transition: transition_transition,\n call: selection_prototype.call,\n nodes: selection_prototype.nodes,\n node: selection_prototype.node,\n size: selection_prototype.size,\n empty: selection_prototype.empty,\n each: selection_prototype.each,\n on: transition_on,\n attr: transition_attr,\n attrTween: transition_attrTween,\n style: transition_style,\n styleTween: transition_styleTween,\n text: transition_text,\n remove: transition_remove,\n tween: transition_tween,\n delay: transition_delay,\n duration: transition_duration,\n ease: transition_ease\n};\n","import {selector} from \"d3-selection\";\nimport {Transition} from \"./index\";\nimport schedule, {get} from \"./schedule\";\n\nexport default function(select) {\n var name = this._name,\n id = this._id;\n\n if (typeof select !== \"function\") select = selector(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {\n if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {\n if (\"__data__\" in node) subnode.__data__ = node.__data__;\n subgroup[i] = subnode;\n schedule(subgroup[i], name, id, i, subgroup, get(node, id));\n }\n }\n }\n\n return new Transition(subgroups, this._parents, name, id);\n}\n","import {selectorAll} from \"d3-selection\";\nimport {Transition} from \"./index\";\nimport schedule, {get} from \"./schedule\";\n\nexport default function(select) {\n var name = this._name,\n id = this._id;\n\n if (typeof select !== \"function\") select = selectorAll(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n for (var children = select.call(node, node.__data__, i, group), child, inherit = get(node, id), k = 0, l = children.length; k < l; ++k) {\n if (child = children[k]) {\n schedule(child, name, id, k, children, inherit);\n }\n }\n subgroups.push(children);\n parents.push(node);\n }\n }\n }\n\n return new Transition(subgroups, parents, name, id);\n}\n","import {matcher} from \"d3-selection\";\nimport {Transition} from \"./index\";\n\nexport default function(match) {\n if (typeof match !== \"function\") match = matcher(match);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {\n if ((node = group[i]) && match.call(node, node.__data__, i, group)) {\n subgroup.push(node);\n }\n }\n }\n\n return new Transition(subgroups, this._parents, this._name, this._id);\n}\n","import {Transition} from \"./index\";\n\nexport default function(transition) {\n if (transition._id !== this._id) throw new Error;\n\n for (var groups0 = this._groups, groups1 = transition._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {\n for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group0[i] || group1[i]) {\n merge[i] = node;\n }\n }\n }\n\n for (; j < m0; ++j) {\n merges[j] = groups0[j];\n }\n\n return new Transition(merges, this._parents, this._name, this._id);\n}\n","import {Transition, newId} from \"./index\";\nimport schedule, {get} from \"./schedule\";\n\nexport default function() {\n var name = this._name,\n id0 = this._id,\n id1 = newId();\n\n for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n var inherit = get(node, id0);\n schedule(node, name, id1, i, group, {\n time: inherit.time + inherit.delay + inherit.duration,\n delay: 0,\n duration: inherit.duration,\n ease: inherit.ease\n });\n }\n }\n }\n\n return new Transition(groups, this._parents, name, id1);\n}\n","import {get, set, init} from \"./schedule\";\n\nfunction start(name) {\n return (name + \"\").trim().split(/^|\\s+/).every(function(t) {\n var i = t.indexOf(\".\");\n if (i >= 0) t = t.slice(0, i);\n return !t || t === \"start\";\n });\n}\n\nfunction onFunction(id, name, listener) {\n var on0, on1, sit = start(name) ? init : set;\n return function() {\n var schedule = sit(this, id),\n on = schedule.on;\n\n // If this node shared a dispatch with the previous node,\n // just assign the updated shared dispatch and we’re done!\n // Otherwise, copy-on-write.\n if (on !== on0) (on1 = (on0 = on).copy()).on(name, listener);\n\n schedule.on = on1;\n };\n}\n\nexport default function(name, listener) {\n var id = this._id;\n\n return arguments.length < 2\n ? get(this.node(), id).on.on(name)\n : this.each(onFunction(id, name, listener));\n}\n","import {interpolateTransformSvg as interpolateTransform} from \"d3-interpolate\";\nimport {namespace} from \"d3-selection\";\nimport {tweenValue} from \"./tween\";\nimport interpolate from \"./interpolate\";\n\nfunction attrRemove(name) {\n return function() {\n this.removeAttribute(name);\n };\n}\n\nfunction attrRemoveNS(fullname) {\n return function() {\n this.removeAttributeNS(fullname.space, fullname.local);\n };\n}\n\nfunction attrConstant(name, interpolate, value1) {\n var value00,\n interpolate0;\n return function() {\n var value0 = this.getAttribute(name);\n return value0 === value1 ? null\n : value0 === value00 ? interpolate0\n : interpolate0 = interpolate(value00 = value0, value1);\n };\n}\n\nfunction attrConstantNS(fullname, interpolate, value1) {\n var value00,\n interpolate0;\n return function() {\n var value0 = this.getAttributeNS(fullname.space, fullname.local);\n return value0 === value1 ? null\n : value0 === value00 ? interpolate0\n : interpolate0 = interpolate(value00 = value0, value1);\n };\n}\n\nfunction attrFunction(name, interpolate, value) {\n var value00,\n value10,\n interpolate0;\n return function() {\n var value0, value1 = value(this);\n if (value1 == null) return void this.removeAttribute(name);\n value0 = this.getAttribute(name);\n return value0 === value1 ? null\n : value0 === value00 && value1 === value10 ? interpolate0\n : interpolate0 = interpolate(value00 = value0, value10 = value1);\n };\n}\n\nfunction attrFunctionNS(fullname, interpolate, value) {\n var value00,\n value10,\n interpolate0;\n return function() {\n var value0, value1 = value(this);\n if (value1 == null) return void this.removeAttributeNS(fullname.space, fullname.local);\n value0 = this.getAttributeNS(fullname.space, fullname.local);\n return value0 === value1 ? null\n : value0 === value00 && value1 === value10 ? interpolate0\n : interpolate0 = interpolate(value00 = value0, value10 = value1);\n };\n}\n\nexport default function(name, value) {\n var fullname = namespace(name), i = fullname === \"transform\" ? interpolateTransform : interpolate;\n return this.attrTween(name, typeof value === \"function\"\n ? (fullname.local ? attrFunctionNS : attrFunction)(fullname, i, tweenValue(this, \"attr.\" + name, value))\n : value == null ? (fullname.local ? attrRemoveNS : attrRemove)(fullname)\n : (fullname.local ? attrConstantNS : attrConstant)(fullname, i, value + \"\"));\n}\n","import {namespace} from \"d3-selection\";\n\nfunction attrTweenNS(fullname, value) {\n function tween() {\n var node = this, i = value.apply(node, arguments);\n return i && function(t) {\n node.setAttributeNS(fullname.space, fullname.local, i(t));\n };\n }\n tween._value = value;\n return tween;\n}\n\nfunction attrTween(name, value) {\n function tween() {\n var node = this, i = value.apply(node, arguments);\n return i && function(t) {\n node.setAttribute(name, i(t));\n };\n }\n tween._value = value;\n return tween;\n}\n\nexport default function(name, value) {\n var key = \"attr.\" + name;\n if (arguments.length < 2) return (key = this.tween(key)) && key._value;\n if (value == null) return this.tween(key, null);\n if (typeof value !== \"function\") throw new Error;\n var fullname = namespace(name);\n return this.tween(key, (fullname.local ? attrTweenNS : attrTween)(fullname, value));\n}\n","import {interpolateTransformCss as interpolateTransform} from \"d3-interpolate\";\nimport {style} from \"d3-selection\";\nimport {tweenValue} from \"./tween\";\nimport interpolate from \"./interpolate\";\n\nfunction styleRemove(name, interpolate) {\n var value00,\n value10,\n interpolate0;\n return function() {\n var value0 = style(this, name),\n value1 = (this.style.removeProperty(name), style(this, name));\n return value0 === value1 ? null\n : value0 === value00 && value1 === value10 ? interpolate0\n : interpolate0 = interpolate(value00 = value0, value10 = value1);\n };\n}\n\nfunction styleRemoveEnd(name) {\n return function() {\n this.style.removeProperty(name);\n };\n}\n\nfunction styleConstant(name, interpolate, value1) {\n var value00,\n interpolate0;\n return function() {\n var value0 = style(this, name);\n return value0 === value1 ? null\n : value0 === value00 ? interpolate0\n : interpolate0 = interpolate(value00 = value0, value1);\n };\n}\n\nfunction styleFunction(name, interpolate, value) {\n var value00,\n value10,\n interpolate0;\n return function() {\n var value0 = style(this, name),\n value1 = value(this);\n if (value1 == null) value1 = (this.style.removeProperty(name), style(this, name));\n return value0 === value1 ? null\n : value0 === value00 && value1 === value10 ? interpolate0\n : interpolate0 = interpolate(value00 = value0, value10 = value1);\n };\n}\n\nexport default function(name, value, priority) {\n var i = (name += \"\") === \"transform\" ? interpolateTransform : interpolate;\n return value == null ? this\n .styleTween(name, styleRemove(name, i))\n .on(\"end.style.\" + name, styleRemoveEnd(name))\n : this.styleTween(name, typeof value === \"function\"\n ? styleFunction(name, i, tweenValue(this, \"style.\" + name, value))\n : styleConstant(name, i, value + \"\"), priority);\n}\n","function styleTween(name, value, priority) {\n function tween() {\n var node = this, i = value.apply(node, arguments);\n return i && function(t) {\n node.style.setProperty(name, i(t), priority);\n };\n }\n tween._value = value;\n return tween;\n}\n\nexport default function(name, value, priority) {\n var key = \"style.\" + (name += \"\");\n if (arguments.length < 2) return (key = this.tween(key)) && key._value;\n if (value == null) return this.tween(key, null);\n if (typeof value !== \"function\") throw new Error;\n return this.tween(key, styleTween(name, value, priority == null ? \"\" : priority));\n}\n","import {get, init} from \"./schedule\";\n\nfunction delayFunction(id, value) {\n return function() {\n init(this, id).delay = +value.apply(this, arguments);\n };\n}\n\nfunction delayConstant(id, value) {\n return value = +value, function() {\n init(this, id).delay = value;\n };\n}\n\nexport default function(value) {\n var id = this._id;\n\n return arguments.length\n ? this.each((typeof value === \"function\"\n ? delayFunction\n : delayConstant)(id, value))\n : get(this.node(), id).delay;\n}\n","import {get, set} from \"./schedule\";\n\nfunction durationFunction(id, value) {\n return function() {\n set(this, id).duration = +value.apply(this, arguments);\n };\n}\n\nfunction durationConstant(id, value) {\n return value = +value, function() {\n set(this, id).duration = value;\n };\n}\n\nexport default function(value) {\n var id = this._id;\n\n return arguments.length\n ? this.each((typeof value === \"function\"\n ? durationFunction\n : durationConstant)(id, value))\n : get(this.node(), id).duration;\n}\n","import {get, set} from \"./schedule\";\n\nfunction easeConstant(id, value) {\n if (typeof value !== \"function\") throw new Error;\n return function() {\n set(this, id).ease = value;\n };\n}\n\nexport default function(value) {\n var id = this._id;\n\n return arguments.length\n ? this.each(easeConstant(id, value))\n : get(this.node(), id).ease;\n}\n","import {Transition, newId} from \"../transition/index\";\nimport schedule from \"../transition/schedule\";\nimport {easeCubicInOut} from \"d3-ease\";\nimport {now} from \"d3-timer\";\n\nvar defaultTiming = {\n time: null, // Set on use.\n delay: 0,\n duration: 250,\n ease: easeCubicInOut\n};\n\nfunction inherit(node, id) {\n var timing;\n while (!(timing = node.__transition) || !(timing = timing[id])) {\n if (!(node = node.parentNode)) {\n return defaultTiming.time = now(), defaultTiming;\n }\n }\n return timing;\n}\n\nexport default function(name) {\n var id,\n timing;\n\n if (name instanceof Transition) {\n id = name._id, name = name._name;\n } else {\n id = newId(), (timing = defaultTiming).time = now(), name = name == null ? null : name + \"\";\n }\n\n for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n schedule(node, name, id, i, group, timing || inherit(node, id));\n }\n }\n }\n\n return new Transition(groups, this._parents, name, id);\n}\n","import {selection} from \"d3-selection\";\nimport selection_interrupt from \"./interrupt\";\nimport selection_transition from \"./transition\";\n\nselection.prototype.interrupt = selection_interrupt;\nselection.prototype.transition = selection_transition;\n","import interrupt from \"../interrupt\";\n\nexport default function(name) {\n return this.each(function() {\n interrupt(this, name);\n });\n}\n","import {STARTING, ENDING, ENDED} from \"./transition/schedule\";\n\nexport default function(node, name) {\n var schedules = node.__transition,\n schedule,\n active,\n empty = true,\n i;\n\n if (!schedules) return;\n\n name = name == null ? null : name + \"\";\n\n for (i in schedules) {\n if ((schedule = schedules[i]).name !== name) { empty = false; continue; }\n active = schedule.state > STARTING && schedule.state < ENDING;\n schedule.state = ENDED;\n schedule.timer.stop();\n if (active) schedule.on.call(\"interrupt\", node, node.__data__, schedule.index, schedule.group);\n delete schedules[i];\n }\n\n if (empty) delete node.__transition;\n}\n","import {Transition} from \"./transition/index\";\nimport {SCHEDULED} from \"./transition/schedule\";\n\nvar root = [null];\n\nexport default function(node, name) {\n var schedules = node.__transition,\n schedule,\n i;\n\n if (schedules) {\n name = name == null ? null : name + \"\";\n for (i in schedules) {\n if ((schedule = schedules[i]).state > SCHEDULED && schedule.name === name) {\n return new Transition([[node]], root, name, +i);\n }\n }\n }\n\n return null;\n}\n","import { select, event as d3event, selection, clientPoint } from 'd3-selection';\nimport { drag as d3drag } from 'd3-drag';\nimport 'd3-transition';\nimport { mergeRecursive } from './common-utils';\n/**\n * This function takes a raw DOM element or\n * a string and returns a d3 selection of that element.\n *\n * @param {HTMLElement | string} element The element to wrap in d3 selection.\n * @return {Selection} Instance of d3 selection.\n */\nconst selectElement = element => select(element);\n\n/**\n * It creates a new d3 element on the parent element\n * @param {Selection} parent Element to which the element is to be appended\n * @param {Object} elemType Type of the new element\n * @param {Array} data Data for the new element\n * @param {Object} selector classname/id/tagname for the element\n * @return {HTMLElement} Newly Created Element\n */\nconst makeElement = (parent, elemType, data, selector, callbacks = {}, keyFn) => {\n if ((parent instanceof HTMLElement || parent instanceof SVGElement)) {\n parent = selectElement(parent);\n }\n\n const selectorVal = selector ? selector[0] : null;\n let selectorType = null;\n let actualSelector = null;\n let element = null;\n let enterSel = null;\n let mergeSel = null;\n let filter;\n if (selectorVal) {\n if (selectorVal === '#') {\n selectorType = 'id';\n actualSelector = selector;\n } else {\n selectorType = 'class';\n actualSelector = selector[0] === '.' ? selector : `.${selector}`;\n }\n } else {\n actualSelector = elemType;\n filter = true;\n }\n element = parent.selectAll(actualSelector);\n\n filter && (element = element.filter(function () {\n return this.parentNode === parent.node();\n }));\n element = element.data(data, keyFn);\n\n enterSel = element.enter()\n .append(elemType || 'div');\n callbacks.enter && enterSel.each(function (...params) {\n callbacks.enter(selectElement(this), ...params);\n });\n\n mergeSel = enterSel.merge(element);\n callbacks.update && mergeSel.each(function (...params) {\n callbacks.update(selectElement(this), ...params);\n });\n if (selectorType === 'class') {\n mergeSel.classed(selectorVal === '.' ? selector.substring(1, selector.length) : selector, true);\n } else if (selectorType === 'id') {\n mergeSel.attr('id', selector.substring(1, selector.length));\n }\n const exitSel = element.exit();\n\n if (callbacks.exit) {\n exitSel.each(function (...params) {\n callbacks.exit(selectElement(this), ...params);\n });\n } else {\n exitSel.remove();\n }\n return mergeSel;\n};\n\n/**\n * This function applies styles to an element\n * @param {Object} elem Element Selection\n * @param {Object} styleObj Style Object to be applied\n * @return {Element} Newly Created Element\n*/\nconst applyStyle = (elem, styleObj) => {\n Object.entries(styleObj).forEach((d) => {\n elem.style(d[0], d[1]);\n }, this);\n return elem;\n};\n\n/**\n * This function appends a dom element in another element.\n * @param {HTMLElement | SVGElement} element1 The element in which to append the second element\n * @param {HTMLElement | SVGElement} element2 The element which will be appended.\n */\nconst appendElement = (element1, element2) => {\n element1.appendChild(element2);\n};\n\n/**\n * Sets the attributes to the element.\n * @param {HTMLElement | SVGElement} element Element on which attributes will be applied\n * @param {Object} attrs Attributes which need to be applied\n */\nconst setElementAttrs = (element, attrs) => {\n for (const key in attrs) {\n if ({}.hasOwnProperty.call(attrs, key)) {\n element.attr(key, attrs[key]);\n }\n }\n};\n\n/**\n * Sets attributes in the svg or html element\n * @param {SVGElement | HTMLElement} element The element on which attrs will be applied\n * @param {Array.} attrs Array of attributes\n * @param {string} className className of elements to select.\n * @return {SVGElement | HTMLElement} SVGElement or html element.\n */\nconst setAttrs = (element, attrs, className) => {\n if (!(element instanceof selection)) {\n element = selectElement(element);\n }\n className !== undefined ? element.selectAll(`.${className}`).each(function () {\n setElementAttrs(select(this), attrs);\n }) : setElementAttrs(element, attrs);\n return element;\n};\n\n/**\n * Adds a css class to elements which passes the filter function.If filter function is not given,\n * then all elements will be applied the class.\n * @param {HTMLElement | SVGElement} element element\n * @param {string} className css class\n * @param {string} selector css selector\n * @param {Function} filterFn filter method.\n */\nconst addClass = (element, className, selector, filterFn) => {\n select(element).selectAll(selector).each(function (data) {\n const elem = select(this);\n filterFn ? filterFn(data) && elem.classed(className, true) :\n elem.classed(className, true);\n });\n};\n\n/**\n * Removes the css class from elements which passes the filter function.If filter function is not given,\n * then all elements will be applied the class.\n * @param {HTMLElement | SVGElement} element element\n * @param {string} className css class\n * @param {string} selector css selector\n * @param {Function} filterFn filter method.\n */\nconst removeClass = (element, className, selector, filterFn) => {\n select(element).selectAll(selector).each(function (data) {\n const elem = select(this);\n filterFn ? filterFn(data) && elem.classed(className, false) :\n elem.classed(className, false);\n });\n};\n\n/**\n * Sets styles in the svg or html element\n * @param {SVGElement | HTMLElement} element The element on which styles will be applied\n * @param {Array.} styles Array of style attributes\n * @return {SVGElement | HTMLElement} SVGElement or html element.\n */\nconst setStyles = (element, styles) => {\n if (!(element instanceof selection)) {\n element = selectElement(element);\n }\n for (const key in styles) {\n if ({}.hasOwnProperty.call(styles, key)) {\n element.style(key, styles[key]);\n }\n }\n return element;\n};\n\n/**\n * Creates svg or html elements by binding data to the selection.Removes extra elements\n * on exit.\n * @param {Object} params Parameter object\n * @param {SVGElement | HTMLElement} params.container Container element where all elements will be appended\n * @param {string} params.selector Selector by which elements will be selected from dom\n * @param {string} params.append Append tag\n * @param {Function} params.each Function which will be executed for each data point and element.\n */\nconst createElements = (params) => {\n const container = select(params.container);\n let data;\n let sel;\n\n data = params.data;\n if (typeof data === 'number') {\n data = Array(data).fill().map((d, i) => i);\n }\n sel = container.selectAll(params.selector).data(data);\n\n sel = container.selectAll(params.selector).filter(function () {\n return this.parentNode === container.node();\n }).data(params.data);\n\n const selectionMerge = sel.enter().append(params.append).merge(sel).each(function (d, i) {\n params.each(d, select(this), i);\n });\n\n selectionMerge.attr('class', params.className || '');\n sel.exit().remove();\n};\n\n/**\n * Clips an element with given measurement. Basically it is used to hide overflowing portions\n * of any element.\n * @param {SVGElement} container svg element which needs to be clipped.\n * @param {Object} measurement Dimensions of the clipped rectangle.\n * @param {string} id Unique id of the clip element\n */\nconst clipElement = (container, measurement, id) => {\n const clipPathElement = makeElement(select(container), 'clipPath', [1], `#${id}`);\n const clipPathRect = makeElement(clipPathElement, 'rect', [1]);\n clipPathRect.attr('x', measurement.x)\n .attr('y', measurement.x)\n .attr('width', measurement.width)\n .attr('height', measurement.height);\n clipPathElement.attr('clip-path', `url(#${id})`);\n};\n\n/**\n * Returns the element of the corresponding classname.\n * @param {HTMLElement | SVGElement} node html or svg node element.\n * @param {string} className css class to be applied.\n * @return {HTMLElement | SVGElement} html or svg element.\n */\nconst getElementsByClassName = (node, className) => select(node).selectAll(className).nodes();\n\n/**\n * Gets the mouse position relative to an svg type of element\n * @param {SVGElement} element Any svg element like rect, circle, etc.\n * @param {Event} event Event object.\n * @return {Object} x and y position relative to the container element passed.\n */\nconst getMousePos = (element, event) => {\n const boundingClientRect = element.getBoundingClientRect();\n return {\n x: event.x - boundingClientRect.x,\n y: event.y - boundingClientRect.y\n };\n};\n\nconst getClientPoint = (...params) => {\n const pos = clientPoint(...params);\n return {\n x: pos[0],\n y: pos[1]\n };\n};\n\n/** This function appends a dom element in another element.\n * @param {Object} tag The tag name of the element to append\n * @param {Object} mount Mount point fo the element\n * @return {Object} selection of the appended element\n */\nconst createElement = (tag, mount) => select(mount).append(tag).node();\n\n/**\n * Gets the d3 event function\n * @return {Object} d3 event\n */\nconst getEvent = () => d3event;\n\n/**\n * Gets the d3 drag function\n * @return {Object} d3 drag\n */\nconst getD3Drag = () => d3drag;\n\nconst getSmartComputedStyle = (group, css) => {\n let textEl;\n const testText = 'W';\n const mandatoryStyle = {\n 'fill-opacity': 0\n };\n const className = typeof css === 'string' ? css : (css instanceof Array ? css.join(' ') : undefined);\n\n if (group.node() instanceof HTMLElement) {\n textEl = group.append('div').html(testText);\n } else {\n textEl = group.append('text').text(testText);\n }\n\n if (className) {\n textEl.attr('class', className);\n } else if (typeof css === 'object') {\n delete css['fill-opacity'];\n mergeRecursive(mandatoryStyle, css);\n }\n\n textEl.style(mandatoryStyle);\n\n const computedStyle = window.getComputedStyle(textEl.node());\n const styleForSmartLabel = {\n fontSize: computedStyle.fontSize,\n fontFamily: computedStyle.fontFamily,\n fontWeight: computedStyle.fontWeight,\n fontStyle: computedStyle.fontStyle\n };\n\n textEl.remove();\n\n return styleForSmartLabel;\n};\n\nconst hasTouch = () => 'ontouchstart' in document.documentElement;\n\nexport {\n hasTouch,\n selectElement,\n makeElement,\n applyStyle,\n addClass,\n removeClass,\n appendElement,\n setAttrs,\n setStyles,\n createElement,\n createElements,\n clipElement,\n getElementsByClassName,\n getMousePos,\n getEvent,\n getD3Drag,\n getSmartComputedStyle,\n getClientPoint\n};\n","/**\n * This class represents a selection applied on a data array.\n *\n * @class Selection\n */\nclass Selection {\n /**\n * Creates an instance of Selection.\n * @param {Array} data Array of DataObjects.\n * @memberof Selection\n */\n constructor () {\n this._data = [];\n // // map of id to data\n this._idMap = {};\n\n this._mode = '';\n // data.forEach((item, idx) => {\n // const index = item.id || idx;\n // this._idMap[index] = item;\n // });\n // // array to store data in enter phase\n this._enterdata = [];\n // // array to store data in exit phase\n this._exitdata = [];\n }\n /**\n * Gets the object bound to a class\n *\n * @return {Object} current data set bound to the class\n * @memberof Selection\n */\n getObjects () {\n return Object.keys(this._idMap).map(e => this._idMap[e]);\n }\n\n /**\n * This method is used to supply seed data to a selection.\n *\n * @param {Array} newData Seed data to create the enter selection.\n * @param {Functon | undefined } idGetter This function is used to uniqely identify a data entry.\n * @return {Selection} Modified selection.\n * @memberof Selection\n */\n data (newData, idGetter) {\n if (idGetter) {\n this._data = [];\n this._idGetter = idGetter;\n const tempMap = {};\n\n newData.forEach((...params) => {\n const index = idGetter(...params);\n tempMap[index] = params[0];\n });\n // check if any data items have been removed\n const purgedIds = [];\n\n Object.keys(this._idMap).forEach((id) => {\n if (!tempMap[id]) {\n purgedIds.push(id);\n }\n });\n\n Object.keys(tempMap).forEach((id) => {\n if (!this._idMap[id]) {\n this._enterdata.push(tempMap[id]);\n } else {\n this._idMap[id] = tempMap[id];\n this._data.push(tempMap[id]);\n }\n });\n // move the purged items to exit selection\n purgedIds.forEach((id) => {\n const purged = this._idMap[id];\n this._exitdata.push(purged);\n // this._data = this._data.slice(id, 1);\n delete this._idMap[id];\n });\n // this._data = this._data.slice(temp, this._data.length);\n\n return this;\n }\n // no id getter supplied so use indices\n if (newData.length > this._data.length) {\n const startIdx = this._data.length;\n for (let i = startIdx; i < newData.length; i += 1) {\n this._enterdata.push(newData[i]);\n }\n } else {\n // push to exit selection\n const temp = newData.length;\n for (let i = temp; i < this._data.length; i += 1) {\n const purged = this._data[i];\n delete this._idMap[purged.id];\n this._exitdata.push(purged);\n }\n this._data = this._data.slice(temp, this._data.length);\n }\n return this;\n }\n\n /**\n * Applies the supplied callback to each data element\n * and returns a new selection.\n *\n * @param {Function} callback Callback to execute on each item.\n * @return {Selection} New selection with data created using callback.\n * @memberof EnterSelection\n */\n append (callback) {\n this[`_${this._mode}data`].forEach((...params) => {\n const data = params[0];\n const id = this._idGetter ? this._idGetter(...params) : (data.id || params[1]);\n this._idMap[id] = callback(...params);\n });\n this._mode = '';\n return this;\n }\n\n /**\n * This method returns an enter selection that\n * allows or update operations.\n *\n * @return {EnterSelection} Instance of enter selection.\n * @memberof Selection\n */\n enter () {\n this._mode = 'enter';\n return this;\n // return new EnterSelection(this._enterdata, this._idMap, this._idGetter);\n }\n\n /**\n * This method is used to set key value pairs\n * on data objects.\n *\n * @param {string} key Name of property.\n * @param {any} value Value of property.\n * @return {Selection} Modified selection.\n * @memberof Selection\n */\n attr (key, value) {\n this._data.forEach(item => item.attr(key, value));\n return this;\n }\n\n /**\n * This method merges the data of one selection with another.\n *\n * @param {Selection} selection Instance of selection.\n * @return {Selection} Modified selection.\n * @memberof Selection\n */\n merge (selection) {\n selection._data.forEach((...params) => {\n const id = this._idGetter ? this._idGetter(...params) : (params[0].id || params[1]);\n this._idMap[id] = params[0];\n this._data.push(params[0]);\n });\n // reset enter selection\n this._enterdata = [];\n return this;\n }\n\n /**\n * Returns a selection with exit data.\n *\n * @return {Selection} Instance of selection.\n * @memberof Selection\n */\n exit () {\n this._mode = 'exit';\n // const exitdata = this._exitdata;\n // const exitSelection = new Selection(exitdata);\n // this._exitdata = [];\n return this;\n }\n\n each (fn) {\n Object.keys(this._idMap).forEach((e) => {\n fn(this._idMap[e]);\n });\n return this;\n }\n\n map (fn) {\n Object.keys(this._idMap).forEach((...params) => {\n this._idMap[params[0]] = fn(this._idMap[params[0]], ...params);\n });\n return this;\n }\n\n /**\n * Executes the cleanup operation associated with data objets.\n *\n * @memberof Selection\n */\n remove () {\n // do cleanup on DDO's\n const data = this[`_${this._mode}data`];\n\n data.forEach(item => item.remove());\n if (this._mode === '') {\n this.each(e => e.remove());\n }\n this[`_${this._mode}data`] = [];\n this._mode = '';\n }\n}\n\nexport default Selection;\n","import { getUniqueId } from '../index';\n/**\n * Represents the base class that all objects that form\n * the data for a selection must inherit from.\n *\n * @class DataObject\n */\nclass DataObject {\n/**\n * Creates an instance of DataObject.\n * @memberof DataObject\n */\n constructor () {\n this._id = getUniqueId();\n }\n /**\n * Returns the id.\n *\n * @readonly\n * @memberof DataObject\n */\n get id () {\n return this._id;\n }\n\n /**\n * Sets the value corresponding to supplied key.\n *\n * @param {string} key The property name.\n * @param {any} value Value associated with prop.\n * @memberof DataObject\n */\n attr (key, value) {\n this[key] = value;\n }\n\n /**\n * Clean up code to be executed by each object.\n *\n * @override\n * @memberof DataObject\n */\n remove () {\n // cleanup\n }\n}\n\nexport default DataObject;\n","const events = [\n 'initialized',\n 'beforeupdate',\n 'updated',\n 'beforedraw',\n 'drawn',\n 'beforeremove',\n 'removed'\n];\n\nconst compositions = [\n 'canvas',\n 'unit',\n 'layer',\n 'axis',\n 'facet-headers',\n 'legend',\n 'caption'\n];\n\nconst EVENT_LIST = [];\n\ncompositions.forEach((composition) => {\n events.forEach((event) => {\n EVENT_LIST.push(`${composition}.${event}`);\n });\n});\n\nexport default EVENT_LIST;\n","import EVENT_LIST from './event-list';\n\n/**\n * At first call it accepts one function\n * calling it second time accepts notification object.\n * notification object then called with first accepted function\n *\n * @param {Function} resolveFn a promise's resolve function\n * @return {Function} a function to accept notification object\n */\nconst resolver = resolveFn => notification => resolveFn(notification);\n\n/**\n * Checks if the property string is present in the source object\n *\n * @param {Object} source source object whom you want to check the property\n * @param {string} property key name that need to be checked\n * @return {boolean} returns true if the property found in the source object\n */\nconst hasOwn = (source, property) => Object.prototype.hasOwnProperty.call(source, property);\n\n/**\n * LifeCycleManager which goes as a dependendecy to a muze\n * it accepts notification from the entire library throughout\n * the exeecution life\n *\n * @export\n * @class LifeCycleManager\n */\nexport default class LifeCycleManager {\n\n /**\n * Creates an instance of LifeCycleManager.\n * @memberof LifeCycleManager\n */\n constructor () {\n this._eventList = EVENT_LIST;\n this._promises = new Map();\n this._notifiers = {};\n this._lifeCycles = {};\n this._unreleasedLifeCycles = {};\n this._boot();\n }\n\n /**\n * Fills all the notifiers with resolver callback\n *\n * @memberof LifeCycleManager\n */\n _boot () {\n this._notifiers = this._eventList.reduce((acc, name) => {\n acc[name] = resolver;\n return acc;\n }, {});\n this._preparePromises();\n }\n\n /**\n * Public method which gives the promise corresponding\n * to the event name\n *\n * @param {string} eventName name of the event like `canvas.drawn`\n * @return {promise} promise that is passed to the user\n * @memberof LifeCycleManager\n */\n retrieve (eventName) {\n return this._promises.get(eventName);\n }\n\n /**\n * Creates a promise that will be passed to user's callback\n *\n * @param {string} eventName name of the event like `canvas.drawn`\n * @return {promise} a pending promise waiting for resolve to be called\n * @memberof LifeCycleManager\n */\n _makeNotifierPromise (eventName) {\n return new Promise((resolve) => {\n this._notifiers[eventName] = this._notifiers[eventName](resolve);\n });\n }\n\n /**\n * Prepares the promise map with pending promises\n * all the promises are in a pending state where their's\n * resolve function waiting to be called with notification object\n * @memberof LifeCycleManager\n */\n _preparePromises () {\n this._eventList.forEach((eventName) => {\n this._promises.set(eventName, this._makeNotifierPromise(eventName));\n });\n }\n\n /**\n * Resolves the promise with notification object\n *\n * @param {string} eventName name of the event in the system\n * @param {Object} notification notification object\n * @param {string} notification.formalName name of the sender creating the notification\n * @param {Object} notification.client instance or array of instances sending the notification\n * @param {string} notification.action the stage name when the event happened like `beforedraw`\n *\n * @memberof LifeCycleManager\n */\n _resolvePromise (eventName, notification) {\n this._notifiers[eventName](notification);\n }\n\n /**\n * Public method which is being called by different\n * subcompoents of the system at different execution atages\n * @param {Object} notification notification object\n * @param {string} notification.formalName name of the sender creating the notification\n * @param {Object} notification.client instance or array of instances sending the notification\n * @param {string} notification.action the stage name when the event happened like `beforedraw`\n * @memberof LifeCycleManager\n */\n notify (notification) {\n // get the composition name from notification\n // or from static formalName() method\n const composition = notification.formalName || notification.client.constructor.formalName();\n notification.formalName = composition;\n this._releasePromisesFromCache();\n this._notify(composition, notification);\n }\n\n /**\n * Notify user the with promsie in a callback\n * if callback not found then cache it\n *\n * @param {string} composition\n * @param {Object} notification notification object\n * @param {string} notification.formalName name of the sender creating the notification\n * @param {Object} notification.client instance or array of instances sending the notification\n * @param {string} notification.action the stage name when the event happened like `beforedraw`\n * @memberof LifeCycleManager\n */\n _notify (composition, notification) {\n const stage = notification.action;\n const eventName = `${composition}.${stage}`;\n\n // resolves promise with the notification object\n this._resolvePromise(eventName, notification);\n\n // get the promise from the promise map\n const promise = this.retrieve(eventName);\n\n if (this._lifeCycles[composition]) {\n if (this._lifeCycles[composition][stage]) {\n // if user given call back exists, then call with promise\n this._callLifeCycleCallback(composition, stage, promise);\n } else {\n // otherwise cache the promise\n this._cachePromise(composition, stage, promise);\n }\n } else {\n this._cachePromise(composition, stage, promise);\n }\n }\n\n /**\n * Calls the user's callback with callback\n *\n * @param {string} composition name of the compositon like `canvas`\n * @param {string} stage the stage name when the event happened like `beforedraw`\n * @param {promise} promise promise that is passed to the user\n * @memberof LifeCycleManager\n */\n _callLifeCycleCallback (composition, stage, promise) {\n const eventName = `${composition}.${stage}`;\n this._lifeCycles[composition][stage](promise);\n this._resetTargetPromise(eventName);\n }\n\n /**\n * Try to clear the cached promsies once we have\n * macthed callbacks from the user\n *\n * @memberof LifeCycleManager\n */\n _releasePromisesFromCache () {\n const compositions = Object.keys(this._unreleasedLifeCycles);\n compositions.forEach((composition) => {\n const stages = Object.keys(this._unreleasedLifeCycles[composition]);\n stages.forEach((stage) => {\n if (this._lifeCycles[composition]) {\n if (this._lifeCycles[composition][stage]) {\n // take the promise from unreleased lifeCycles\n const promise = this._unreleasedLifeCycles[composition][stage];\n // call the user given callback with that promise\n this._callLifeCycleCallback(composition, stage, promise);\n // delete promise from unreleased lifeCycles\n delete this._unreleasedLifeCycles[composition][stage];\n }\n }\n });\n });\n }\n\n /**\n * Cache the promise in the map. This cache\n * then get consumed if we get user callbacks\n * @param {string} composition name of the compositon like `canvas`\n * @param {string} stage the stage name when the event happened like `beforedraw`\n * @param {promise} promise promise that is passed to the user\n * @memberof LifeCycleManager\n */\n _cachePromise (composition, stage, promise) {\n if (!hasOwn(this._unreleasedLifeCycles, composition)) {\n this._unreleasedLifeCycles[composition] = {};\n }\n\n if (!hasOwn(this._unreleasedLifeCycles[composition], stage)) {\n this._unreleasedLifeCycles[composition][stage] = {};\n }\n this._unreleasedLifeCycles[composition][stage] = promise;\n }\n\n /**\n * It register's the callbacks gievn the user\n *\n * @param {Object} [lifeCycles={}] a object with list of callbacks\n * @memberof LifeCycleManager\n */\n register (lifeCycles = {}) {\n this._lifeCycles = lifeCycles;\n // as we get all the callbacks, try to call them\n // from unreleased promise map\n this._releasePromisesFromCache();\n }\n\n /**\n * Reset the promise into pending state\n *\n * @param {string} eventName name of the event happening\n * @memberof LifeCycleManager\n */\n _resetTargetPromise (eventName) {\n setTimeout(() => {\n this._notifiers[eventName] = resolver;\n this._promises.set(eventName, this._makeNotifierPromise(eventName));\n }, 0);\n }\n}\n","import LifeCycleManager from './lifecycle-manager';\n\nexport default LifeCycleManager;\n","export const DRAG = 'drag';\nexport const HOVER = 'hover';\nexport const SELECTIONDRAG = 'selectiondrag';\nexport const CLICK = 'click';\nexport const LONGTOUCH = 'longtouch';\nexport const TOUCHDRAG = 'touchdrag';\nexport const ALL_ACTIONS = '*';\n","const SELECTION_NEW_ENTRY = 1;\nconst SELECTION_NEW_EXIT = -1;\nconst SELECTION_NULL = 0;\nconst SELECTION_OLD_ENTRY = 2;\nconst SELECTION_OLD_EXIT = -2;\n\nexport {\n SELECTION_NEW_ENTRY,\n SELECTION_NEW_EXIT,\n SELECTION_NULL,\n SELECTION_OLD_ENTRY,\n SELECTION_OLD_EXIT\n};\n","import {\n SELECTION_NEW_ENTRY, SELECTION_NEW_EXIT, SELECTION_NULL, SELECTION_OLD_ENTRY, SELECTION_OLD_EXIT\n} from '../enums/selection';\n/* eslint-disable guard-for-in */\n\n/**\n * This component is used to keep track of the row tuples of the data which gets added and removed.\n * @class SelectionSet\n */\nclass SelectionSet {\n /**\n * Creates an instance of selection set\n * @param {Array.} completeSet Set of unique ids.\n */\n constructor (completeSet, _volatile) {\n this.completeSet = completeSet;\n this._set = completeSet.reduce((obj, key) => {\n obj[key] = SELECTION_NULL;\n return obj;\n }, {});\n this._volatile = _volatile;\n this._completeSetCount = completeSet.length;\n this._lockedSelection = {};\n this._resetted = true;\n }\n\n /**\n * Adds a set of ids to the selection set.\n * @param {Array.} ids Array of unique ids\n * @return {SelectionSet} Instance of selection set.\n */\n add (ids) {\n this._resetted = false;\n\n const set = this._set;\n // from exitset to entryset\n ids.forEach((i) => {\n set[i] = SELECTION_NEW_ENTRY;\n });\n\n for (const key in set) {\n if (set[key] !== SELECTION_NEW_ENTRY && set[key] !== SELECTION_OLD_ENTRY) {\n set[key] = set[key] < 0 ? SELECTION_OLD_EXIT : SELECTION_NEW_EXIT;\n }\n }\n return this;\n }\n\n /**\n * Adds a set of ids to the selection set.\n * @param {Array.} ids Array of unique ids\n * @return {SelectionSet} Instance of selection set.\n */\n update (ids) {\n const set = this._set;\n // from exitset to entryset\n ids.forEach((i) => {\n set[i] = SELECTION_OLD_ENTRY;\n });\n\n return this;\n }\n\n /**\n * Adds a set of ids to the selection set.\n * @param {Array.} ids Array of unique ids\n * @return {SelectionSet} Instance of selection set.\n */\n updateEntry () {\n const set = this._set;\n\n // from exitset to entryset\n for (const key in set) {\n set[key] = set[key] === SELECTION_NEW_ENTRY ? SELECTION_OLD_ENTRY : set[key];\n }\n return this;\n }\n\n /**\n * Adds a set of ids to the selection set.\n * @param {Array.} ids Array of unique ids\n * @return {SelectionSet} Instance of selection set.\n */\n updateExit () {\n const set = this._set;\n // from exitset to entryset\n for (const key in set) {\n set[key] = set[key] === SELECTION_NEW_EXIT ? SELECTION_OLD_EXIT : set[key];\n }\n return this;\n }\n\n /**\n * Removes the ids from the selection set.\n * @param {Array.} ids Array of unique ids\n * @return {SelectionSet} Instance of selection set\n */\n remove (ids) {\n this._resetted = false;\n\n const set = this._set;\n ids.forEach((i) => {\n set[i] = SELECTION_NEW_EXIT;\n });\n\n for (const key in set) {\n if (set[key] !== SELECTION_NEW_EXIT && set[key] !== SELECTION_OLD_EXIT) {\n set[key] = set[key] === 0 ? SELECTION_NEW_ENTRY : SELECTION_OLD_ENTRY;\n }\n }\n\n return this;\n }\n\n getSets () {\n const set = this._set;\n const retObj = {\n entrySet: [[], []],\n exitSet: [[], []],\n completeSet: []\n };\n\n for (const key in set) {\n if (set[key] > 0) {\n set[key] === SELECTION_OLD_ENTRY && retObj.entrySet[0].push(key);\n set[key] === SELECTION_NEW_ENTRY && retObj.entrySet[1].push(key);\n } else if (set[key] < 0) {\n set[key] === SELECTION_OLD_EXIT && retObj.exitSet[0].push(key);\n set[key] === SELECTION_NEW_EXIT && retObj.exitSet[1].push(key);\n }\n retObj.completeSet.push(key);\n }\n\n ['entrySet', 'exitSet'].forEach((type) => {\n retObj[type] = retObj[type].map(e => e.map(Number));\n });\n retObj.completeSet = retObj.completeSet.map(Number);\n\n return retObj;\n }\n\n /**\n * Resets the selection set to initial state. It sets the value of every unique id value to\n * null in the selection set.\n * @return {SelectionSet} Instance of selection set.\n */\n reset (ids) {\n const set = this._set;\n if (ids) {\n ids.forEach((i) => {\n set[i] = SELECTION_NULL;\n });\n } else {\n const lockedSel = this._lockedSelection;\n for (const key in set) {\n if (!(key in lockedSel)) {\n set[key] = SELECTION_NULL;\n }\n }\n }\n this._resetted = true;\n return this;\n }\n\n /**\n * Gets the set of ids which are added in the selection set.\n * @return {Array.} Array of unique ids\n */\n getEntrySet () {\n const set = this._set;\n const addSet = [];\n\n for (const key in set) {\n set[key] === SELECTION_NEW_ENTRY && addSet.push(key);\n }\n\n return addSet;\n }\n\n /**\n * Returns a set of unique ids which are already present in entry set\n * @param {Array} addSet Array of unique ids which are added\n *\n * @return {Array} Array of unique ids which are already in old entry set or new entry set\n */\n getExistingEntrySet (addSet) {\n const set = this._set;\n return addSet.filter(d => set[d] === SELECTION_NEW_ENTRY || set[d] === SELECTION_OLD_ENTRY);\n }\n\n getExistingExitSet (removeSet) {\n const set = this._set;\n return removeSet.filter(d => set[d] === SELECTION_NEW_EXIT || set[d] === SELECTION_OLD_EXIT);\n }\n\n /**\n * Gets the set of ids which are added in the selection set.\n * @return {Array.} Array of unique ids\n */\n getOldEntry () {\n const set = this._set;\n const updateSet = [];\n\n for (const key in set) {\n set[key] === SELECTION_OLD_ENTRY && updateSet.push(key);\n }\n return updateSet;\n }\n\n /**\n * Gets the set of ids which are added in the selection set.\n * @return {Array.} Array of unique ids\n */\n getOldExit () {\n const set = this._set;\n const updateSet = [];\n\n for (const key in set) {\n set[key] === SELECTION_OLD_EXIT && updateSet.push(key);\n }\n\n return updateSet;\n }\n\n /**\n * Gets the set of ids which are in the remove set.\n * @return {Array.} Array of unique ids\n */\n getExitSet () {\n const set = this._set;\n const removeSet = [];\n\n for (const key in set) {\n set[key] === SELECTION_NEW_EXIT && removeSet.push(key);\n }\n return removeSet;\n }\n\n getCompleteSet () {\n const set = this._set;\n const completeSet = [];\n\n for (const key in set) {\n completeSet.push(key);\n }\n\n return completeSet;\n }\n\n getCompleteSetCount () {\n return this._completeSetCount;\n }\n\n resetted () {\n return this._resetted;\n }\n\n /**\n * Swaps the add set and remove set in the selection set.\n * @return {SelectionSet} Instance of selection set.\n */\n toggle () {\n const set = this._set;\n\n for (const key in set) {\n if (set[key] === SELECTION_NEW_ENTRY) {\n set[key] = SELECTION_NEW_EXIT;\n } else if (set[key] === SELECTION_NEW_EXIT) {\n set[key] = SELECTION_NEW_ENTRY;\n } else if (set[key] === SELECTION_OLD_ENTRY) {\n set[key] = SELECTION_OLD_EXIT;\n } else {\n set[key] = SELECTION_OLD_ENTRY;\n }\n }\n\n return this;\n }\n}\n\nexport default SelectionSet;\n","import { clone } from 'muze-utils';\nimport * as SELECTION from '../enums/selection';\n\nexport const initializeSideEffects = (context, sideEffects) => {\n const sideEffectsMap = context._sideEffects;\n\n sideEffects = sideEffects instanceof Array ? sideEffects : Object.values(sideEffects);\n sideEffects.forEach((SideEffect) => {\n const sideEffectInstance = sideEffectsMap[SideEffect.formalName()];\n sideEffectsMap[SideEffect.formalName()] = sideEffectInstance || new SideEffect(context);\n });\n return sideEffectsMap;\n};\n\nexport const initializeBehaviouralActions = (context, actions) => {\n const dispatchableBehaviours = {};\n\n actions = actions instanceof Array ? actions : Object.values(actions);\n actions.forEach((Action) => {\n dispatchableBehaviours[Action.formalName()] = new Action(context);\n });\n return dispatchableBehaviours;\n};\n\nexport const initializePhysicalActions = (context, actions) => {\n const physicalActions = {};\n\n for (const name in actions) {\n if (!({}).hasOwnProperty.call(name, actions)) {\n physicalActions[name] = actions[name](context);\n }\n }\n return physicalActions;\n};\n\nexport const changeSideEffectAvailability = (context, fn, toEnable) => {\n const sideEffects = context.sideEffects();\n for (const key in sideEffects) {\n if ({}.hasOwnProperty.call(sideEffects, key)) {\n let change = true;\n if (fn && fn(key) === false) {\n change = false;\n }\n if (change) {\n toEnable ? sideEffects[key].enable() : sideEffects[key].disable();\n }\n }\n }\n};\n\nexport const getMergedSet = set => [...new Set([...set[0], ...set[1]])];\n\nexport const getSourceFields = (propagationInf, criteria = {}) => {\n const sourceIdentifiers = propagationInf.sourceIdentifiers;\n let sourceFields;\n if (sourceIdentifiers) {\n sourceFields = sourceIdentifiers.getSchema().map(d => d.name);\n } else if (criteria instanceof Array) {\n sourceFields = criteria[0];\n } else {\n sourceFields = Object.keys(criteria || {});\n }\n return sourceFields;\n};\n\nconst conditionsMap = {\n newEntry: [SELECTION.SELECTION_NEW_ENTRY],\n oldEntry: [SELECTION.SELECTION_OLD_ENTRY],\n mergedEnter: [SELECTION.SELECTION_NEW_ENTRY, SELECTION.SELECTION_OLD_ENTRY],\n newExit: [SELECTION.SELECTION_NEW_EXIT],\n oldExit: [SELECTION.SELECTION_OLD_EXIT],\n mergedExit: [SELECTION.SELECTION_NEW_EXIT, SELECTION.SELECTION_OLD_EXIT],\n complete: []\n};\n\nexport const getModelFromSet = (type, model, set) => {\n if (model) {\n return model.select((fields, i) =>\n (conditionsMap[type].some(condition => set[i] === condition)), {\n saveChild: false\n });\n }\n return null;\n};\n\nexport const getSetInfo = (type, set, config) => {\n let model = null;\n const filteredDataModel = config.filteredDataModel;\n const selectionSet = config.selectionSet;\n if (!config.propagationData) {\n if (selectionSet.resetted()) {\n model = null;\n } else {\n model = getModelFromSet(type, config.dataModel, config.selectionSet._set);\n }\n } else if (filteredDataModel) {\n model = type === 'mergedEnter' ? filteredDataModel[0] : filteredDataModel[1];\n }\n return {\n uids: set,\n length: set.length,\n model\n };\n};\n\nexport const getSideEffects = (behaviour, behaviourEffectMap) => {\n const sideEffects = [];\n for (const key in behaviourEffectMap) {\n const behaviours = key.split(',');\n const found = behaviours.some(d => d === behaviour);\n if (found) {\n sideEffects.push({\n effects: behaviourEffectMap[key],\n behaviours\n });\n }\n }\n return sideEffects;\n};\n\nexport const unionSets = (context, behaviours) => {\n let combinedSet = {};\n const models = {\n mergedEnter: null,\n mergedExit: null\n };\n behaviours.forEach((behaviour) => {\n const entryExitSet = context._entryExitSet[behaviour];\n if (entryExitSet) {\n combinedSet = Object.assign(combinedSet, clone(entryExitSet));\n ['mergedEnter', 'mergedExit'].forEach((type) => {\n const model = entryExitSet[type].model;\n let existingModel = models[type];\n if (!existingModel) {\n existingModel = models[type] = model;\n } else {\n existingModel = models[type] = model.union(existingModel);\n }\n combinedSet[type].model = existingModel;\n });\n }\n });\n return combinedSet;\n};\n","import {\n mergeRecursive,\n hasTouch,\n filterPropagationModel,\n FieldType,\n selectElement,\n isSimpleObject\n} from 'muze-utils';\nimport { ALL_ACTIONS } from './enums/actions';\nimport SelectionSet from './selection-set';\nimport {\n initializeBehaviouralActions,\n initializeSideEffects,\n changeSideEffectAvailability,\n initializePhysicalActions,\n unionSets,\n getSideEffects\n} from './helper';\n\n/**\n * Relient firebolt is responsible for dispatching behaviours. It has only behaviours which can be\n * dispatched without any physical action being triggered.\n */\nexport default class Firebolt {\n constructor (context, actions, sideEffects, behaviourEffectMap) {\n this.context = context;\n this._sideEffectDefinitions = {};\n this._sideEffects = {};\n this._propagationInf = {};\n this._actions = {\n behavioural: {},\n physical: {}\n };\n this._selectionSet = {};\n this._volatileSelectionSet = {};\n this._propagationFields = {};\n this._sourceSideEffects = {\n selectionBox: () => false\n };\n this._propagationBehaviourMap = {};\n this._sourceBehaviours = {};\n this._actionBehaviourMap = {};\n this._config = {};\n this._behaviourEffectMap = {};\n this._entryExitSet = {};\n this._actionHistory = {};\n this._queuedSideEffects = {};\n this._mappedActions = {};\n\n this.mapSideEffects(behaviourEffectMap);\n this.registerBehaviouralActions(actions.behavioural);\n this.registerSideEffects(sideEffects);\n this.registerPhysicalBehaviouralMap(actions.physicalBehaviouralMap);\n this.registerPhysicalActions(actions.physical);\n }\n\n config (...config) {\n if (config.length) {\n const conf = this._config = mergeRecursive(this._config, config[0]);\n const sideEffects = this.sideEffects();\n for (const key in sideEffects) {\n if ({}.hasOwnProperty.call(sideEffects, key)) {\n const sideEffectConf = conf[key];\n sideEffectConf && sideEffects[key].config(sideEffectConf);\n }\n }\n return this;\n }\n return this._config;\n }\n\n mapSideEffects (behEffectMap) {\n const behaviourEffectMap = this._behaviourEffectMap;\n for (const key in behEffectMap) {\n if ({}.hasOwnProperty.call(behEffectMap, key)) {\n const sideEffects = behEffectMap[key] || [];\n let preventDefaultActions = false;\n let effectNames;\n if (isSimpleObject(sideEffects)) {\n effectNames = sideEffects.effects;\n preventDefaultActions = sideEffects.preventDefaultActions;\n } else {\n effectNames = sideEffects;\n }\n !behaviourEffectMap[key] && (behaviourEffectMap[key] = []);\n this._behaviourEffectMap[key] = [...new Set(preventDefaultActions ? effectNames :\n [...behaviourEffectMap[key], ...effectNames])];\n }\n }\n return this;\n }\n\n registerBehaviouralActions (actions) {\n const behaviours = initializeBehaviouralActions(this, actions);\n this.prepareSelectionSets(behaviours);\n Object.assign(this._actions.behavioural, behaviours);\n return this;\n }\n\n prepareSelectionSets () {\n return this;\n }\n\n registerSideEffects (sideEffects) {\n for (const key in sideEffects) {\n this._sideEffectDefinitions[sideEffects[key].formalName()] = sideEffects[key];\n }\n return this;\n }\n\n applySideEffects (sideEffects, selectionSet, payload) {\n const sideEffectStore = this.sideEffects();\n const actionHistory = this._actionHistory;\n const queuedSideEffects = this._queuedSideEffects;\n sideEffects.forEach((sideEffect) => {\n let options;\n let name;\n const effects = sideEffect.effects;\n const behaviours = sideEffect.behaviours;\n const combinedSet = unionSets(this, behaviours, selectionSet);\n effects.forEach((effect) => {\n if (typeof effect === 'object') {\n name = effect.name;\n options = effect.options;\n } else {\n name = effect;\n }\n\n const sideEffectInstance = sideEffectStore[name];\n if (sideEffectInstance.isEnabled()) {\n if (!sideEffectInstance.constructor.mutates() &&\n Object.values(actionHistory).some(d => d.isMutableAction)) {\n queuedSideEffects[`${name}-${behaviours.join()}`] = {\n name,\n params: [combinedSet, payload, options]\n };\n } else {\n this.dispatchSideEffect(name, combinedSet, payload, options);\n }\n }\n });\n });\n return this;\n }\n\n dispatchSideEffect (name, selectionSet, payload, options = {}) {\n const sideEffectStore = this.sideEffects();\n const sideEffect = sideEffectStore[name];\n let disable = false;\n if (options.filter && options.filter(sideEffect)) {\n disable = true;\n }\n !disable && sideEffectStore[name].apply(selectionSet, payload, options);\n }\n\n registerPropagationBehaviourMap (map) {\n this._propagationBehaviourMap = Object.assign(this._propagationBehaviourMap, map || {});\n return this;\n }\n\n dispatchBehaviour (behaviour, payload, propagationInfo = {}) {\n const propagate = propagationInfo.propagate !== undefined ? propagationInfo.propagate : true;\n const behaviouralActions = this._actions.behavioural;\n const action = behaviouralActions[behaviour];\n const behaviourEffectMap = this._behaviourEffectMap;\n const sideEffects = getSideEffects(behaviour, behaviourEffectMap);\n this._propagationInf = propagationInfo;\n\n if (action) {\n const selectionSet = action.dispatch(payload);\n const propagationSelectionSet = this.getPropagationSelectionSet(selectionSet);\n this._entryExitSet[behaviour] = propagationSelectionSet;\n const shouldApplySideEffects = this.shouldApplySideEffects(propagate);\n\n if (propagate) {\n this.propagate(behaviour, payload, selectionSet.find(d => d.sourceSelectionSet), sideEffects);\n }\n if (shouldApplySideEffects) {\n const applicableSideEffects = this.getApplicableSideEffects(sideEffects, payload, propagationInfo);\n this.applySideEffects(applicableSideEffects, propagationSelectionSet, payload);\n }\n }\n\n return this;\n }\n\n getPropagationSelectionSet (selectionSet) {\n return selectionSet.find(d => !d.sourceSelectionSet);\n }\n\n shouldApplySideEffects () {\n return true;\n }\n\n changeBehaviourStateOnPropagation (behaviour, value) {\n if (value instanceof Function) {\n this._sourceBehaviours[behaviour] = value;\n } else {\n this._sourceBehaviours[behaviour] = () => value;\n }\n return this;\n }\n\n changeSideEffectStateOnPropagation (sideEffect, value) {\n if (value instanceof Function) {\n this._sourceSideEffects[sideEffect] = value;\n } else {\n this._sourceSideEffects[sideEffect] = () => value;\n }\n }\n\n propagate () {\n return this;\n }\n\n sideEffects (...sideEffects) {\n if (sideEffects.length) {\n this._sideEffects = sideEffects[0];\n return this;\n }\n return this._sideEffects;\n }\n\n enableSideEffects (fn) {\n changeSideEffectAvailability(this, fn, true);\n return this;\n }\n\n disableSideEffects (fn) {\n changeSideEffectAvailability(this, fn, false);\n return this;\n }\n\n dissociateBehaviour (behaviour, physicalAction) {\n const actionBehaviourMap = this._actionBehaviourMap;\n for (const key in actionBehaviourMap) {\n if (key === physicalAction) {\n const behaviourMap = actionBehaviourMap[key];\n behaviourMap.behaviours = behaviourMap.behaviours.filter(d => d !== behaviour);\n }\n }\n\n return this;\n }\n\n dissociateSideEffect (sideEffect, behaviour) {\n const behaviourEffectMap = this._behaviourEffectMap;\n behaviourEffectMap[behaviour] = behaviourEffectMap[behaviour].filter(d => (d.name || d) !== sideEffect);\n return this;\n }\n\n getApplicableSideEffects (sideEffects) {\n return sideEffects;\n }\n\n attachPropagationListener (dataModel) {\n dataModel.unsubscribe('propagation');\n dataModel.on('propagation', this.onDataModelPropagation());\n return this;\n }\n\n onDataModelPropagation () {\n return (propValue) => {\n const payload = propValue.payload;\n const action = payload.action;\n\n this.dispatchBehaviour(action, payload, {\n propagate: false\n });\n };\n }\n\n createSelectionSet (uniqueIds, behaviouralActions) {\n const behaviours = behaviouralActions || this._actions.behavioural;\n const selectionSet = this._selectionSet;\n const volatileSelectionSet = this._volatileSelectionSet;\n\n for (const key in behaviours) {\n if ({}.hasOwnProperty.call(behaviours, key)) {\n selectionSet[key] = new SelectionSet(uniqueIds);\n volatileSelectionSet[key] = new SelectionSet(uniqueIds, true);\n }\n }\n this._volatileSelectionSet = volatileSelectionSet;\n this.selectionSet(selectionSet);\n return this;\n }\n\n selectionSet (...selectionSet) {\n if (selectionSet.length) {\n this._selectionSet = selectionSet[0];\n return this;\n }\n return this._selectionSet;\n }\n\n initializeSideEffects () {\n const sideEffectDefinitions = this._sideEffectDefinitions;\n this.sideEffects(initializeSideEffects(this, sideEffectDefinitions));\n return this;\n }\n\n registerPhysicalActions (actions) {\n const initedActions = initializePhysicalActions(this, actions);\n Object.assign(this._actions.physical, initedActions);\n return this;\n }\n\n propagateWith (action, fields, append = false) {\n const behaviouralActions = this._actions.behavioural;\n if (fields.length) {\n if (action === ALL_ACTIONS) {\n for (const key in behaviouralActions) {\n this._propagationFields[key] = {\n fields,\n append\n };\n }\n } else {\n this._propagationFields[action] = {\n fields,\n append\n };\n }\n return this;\n }\n return this._propagationFields;\n }\n\n /**\n * Map actions and behaviours\n * @return {Firebolt} Firebolt instance\n */\n mapActionsAndBehaviour () {\n const initedPhysicalActions = this._actions.physical;\n const map = this._actionBehaviourMap;\n const mappedActions = this._mappedActions;\n\n for (const action in map) {\n if (!({}).hasOwnProperty.call(action, map)) {\n let target;\n const mapObj = map[action];\n target = mapObj.target;\n const touch = mapObj.touch;\n if (!target) {\n target = this.context.getDefaultTargetContainer();\n }\n const bind = hasTouch() ? touch === true || touch === undefined : !touch;\n const keyName = `${action}-${mapObj.behaviours.join()}`;\n bind && !mappedActions[keyName] && this.bindActionWithBehaviour(initedPhysicalActions[action],\n target, mapObj.behaviours);\n mappedActions[keyName] = true;\n }\n }\n return this;\n }\n\n registerPhysicalBehaviouralMap (map) {\n Object.assign(this._actionBehaviourMap, map);\n return this;\n }\n\n /**\n * Binds a target element with an action.\n *\n * @param {Function} action Action method\n * @param {string} target Class name of element\n * @param {Array} behaviourList Array of behaviours\n * @return {FireBolt} Instance of firebolt\n */\n bindActionWithBehaviour (action, targets, behaviourList) {\n if (typeof (targets) === 'string') {\n targets = [targets];\n }\n targets.forEach((target) => {\n const mount = this.context.mount();\n const nodes = target.node instanceof Function ? target : selectElement(mount).selectAll(target);\n if (behaviourList.length && !nodes.empty()) {\n if (nodes instanceof Array) {\n nodes.forEach((node) => {\n action(selectElement(node), behaviourList);\n });\n } else {\n action(nodes, behaviourList);\n }\n }\n });\n return this;\n }\n\n getPropagationInf () {\n return this._propagationInf;\n }\n\n getAddSetFromCriteria (criteria, propagationInf = {}) {\n const context = this.context;\n const filteredDataModel = propagationInf.data ? propagationInf.data :\n context.getDataModelFromIdentifiers(criteria, 'all');\n const xFields = context.fields().x || [];\n const yFields = context.fields().y || [];\n const xMeasures = xFields.every(field => field.type() === FieldType.MEASURE);\n const yMeasures = yFields.every(field => field.type() === FieldType.MEASURE);\n return {\n model: filteredDataModel,\n uids: criteria === null ? null : (propagationInf.data ? filterPropagationModel(this.getFullData(),\n propagationInf.data[0], xMeasures && yMeasures).getData().uids : filteredDataModel[0].getData().uids)\n };\n }\n\n getSelectionSets (action) {\n const sourceId = this.context.id();\n const propagationInf = this._propagationInf || {};\n const propagationSource = propagationInf.sourceId;\n let applicableSelectionSets = [];\n if (propagationSource !== sourceId) {\n applicableSelectionSets = [this._volatileSelectionSet[action]];\n }\n\n if (propagationSource) {\n applicableSelectionSets.push(this.selectionSet()[action]);\n }\n return applicableSelectionSets;\n }\n\n getFullData () {\n return this.context.data();\n }\n\n resetted () {\n return this._resetted;\n }\n\n getEntryExitSet (behaviour) {\n return this._entryExitSet[behaviour];\n }\n}\n","import { getSetInfo, getMergedSet, getSourceFields } from '../../helper';\n\nexport default class GenericBehaviour {\n constructor (firebolt) {\n this.firebolt = firebolt;\n this._enabled = true;\n }\n\n dispatch (payload) {\n const criteria = payload.criteria;\n const firebolt = this.firebolt;\n const formalName = this.constructor.formalName();\n const selectionSets = firebolt.getSelectionSets(formalName);\n const {\n model: filteredDataModel,\n uids\n } = this.firebolt.getAddSetFromCriteria(criteria, this.firebolt.getPropagationInf());\n const entryExitSets = selectionSets.map((selectionSet) => {\n this.setSelectionSet(uids, selectionSet);\n return this.getEntryExitSet(selectionSet, filteredDataModel, payload);\n });\n\n return entryExitSets;\n }\n\n setSelectionSet () {\n return this;\n }\n\n getEntryExitSet (selectionSet, filteredDataModel, payload) {\n const {\n entrySet,\n exitSet,\n completeSet\n } = selectionSet.getSets();\n const propagationInf = this.firebolt.getPropagationInf();\n const dataModel = this.firebolt.getFullData();\n const setConfig = {\n isSourceFieldPresent: propagationInf.isSourceFieldPresent,\n dataModel,\n filteredDataModel,\n propagationData: propagationInf.data,\n selectionSet\n };\n\n return {\n entrySet: [getSetInfo('oldEntry', entrySet[0], setConfig),\n getSetInfo('newEntry', entrySet[1], setConfig)],\n exitSet: [getSetInfo('oldEntry', exitSet[0], setConfig),\n getSetInfo('newExit', exitSet[1], setConfig)],\n mergedEnter: getSetInfo('mergedEnter', getMergedSet(entrySet), setConfig),\n mergedExit: getSetInfo('mergedExit', getMergedSet(exitSet), setConfig),\n completeSet: getSetInfo('complete', completeSet, setConfig),\n isSourceFieldPresent: propagationInf.isSourceFieldPresent,\n fields: getSourceFields(propagationInf, payload.criteria),\n sourceSelectionSet: selectionSet._volatile === true\n };\n }\n\n static mutates () {\n return false;\n }\n\n enable () {\n this._enabled = true;\n }\n\n disable () {\n this._enabled = false;\n }\n\n isEnabled () {\n return this._enabled;\n }\n}\n\n","import GenericBehaviour from './generic';\nimport { getMergedSet } from '../../helper';\nimport * as SELECTION from '../../enums/selection';\n\nexport default class VolatileBehaviour extends GenericBehaviour {\n setSelectionSet (addSet, selectionSet) {\n if (addSet === null) {\n selectionSet.reset();\n } else if (addSet.length) {\n // new add set\n const existingAddSet = addSet.filter(d => selectionSet._set[d] === SELECTION.SELECTION_NEW_ENTRY\n || selectionSet._set[d] === SELECTION.SELECTION_OLD_ENTRY);\n selectionSet.updateExit();\n const { entrySet } = selectionSet.getSets();\n selectionSet.reset(getMergedSet(entrySet));\n selectionSet.add(addSet);\n selectionSet.update(existingAddSet);\n } else {\n selectionSet.remove(selectionSet.getCompleteSet());\n }\n }\n}\n","export const BRUSH = 'brush';\nexport const HIGHLIGHT = 'highlight';\nexport const TOOLTIP = 'tooltip';\nexport const FILTER = 'filter';\nexport const SELECT = 'select';\n","import VolatileBehaviour from './volatile';\nimport { HIGHLIGHT } from '../../enums/behaviours';\n\nexport default class HighlightBehaviour extends VolatileBehaviour {\n static formalName () {\n return HIGHLIGHT;\n }\n}\n","import VolatileBehaviour from './volatile';\nimport * as BEHAVIOURNAMES from '../../enums/behaviours';\n\n/**\n * This is the behaviour for brushing a region on the chart. It accepts a payload\n * which contains the x and y range of the data and other configuration. It will then\n * create a selection box from the range and select the points which fall within the range.\n */\nexport default class BrushBehaviour extends VolatileBehaviour {\n static formalName () {\n return BEHAVIOURNAMES.BRUSH;\n }\n}\n","import VolatileBehaviour from './volatile';\nimport { FILTER } from '../../enums/behaviours';\n\nexport default class FilterBehaviour extends VolatileBehaviour {\n static formalName () {\n return FILTER;\n }\n\n static mutates () {\n return true;\n }\n}\n","import GenericBehaviour from './generic';\nimport { getMergedSet } from '../../helper';\nimport * as SELECTION from '../../enums/selection';\n\nexport default class PersistentBehaviour extends GenericBehaviour {\n setSelectionSet (addSet, selectionSet) {\n if (addSet === null) {\n selectionSet.reset();\n } else if (addSet.length) {\n const propagationInf = this.firebolt.getPropagationInf();\n // new add set\n const existingAddSet = addSet.filter(d => selectionSet._set[d] === SELECTION.SELECTION_NEW_ENTRY\n || selectionSet._set[d] === SELECTION.SELECTION_OLD_ENTRY);\n if (propagationInf.propagate === false) {\n selectionSet.updateExit();\n const { entrySet } = selectionSet.getSets();\n selectionSet.reset(getMergedSet(entrySet));\n selectionSet.add(addSet);\n selectionSet.update(existingAddSet);\n } else {\n // existing add set\n if (existingAddSet.length) {\n selectionSet.updateExit();\n selectionSet.remove(existingAddSet);\n } else {\n selectionSet.updateEntry();\n selectionSet.add(addSet);\n }\n const { exitSet } = selectionSet.getSets();\n const mergedExitSet = getMergedSet(exitSet);\n const completeSetCount = selectionSet.getCompleteSet().length;\n if (mergedExitSet.length === completeSetCount) {\n selectionSet.reset();\n }\n }\n } else {\n selectionSet.remove(selectionSet.getCompleteSet());\n }\n\n return this;\n }\n}\n","import PersistentBehaviour from './persistent';\nimport { SELECT } from '../../enums/behaviours';\n\nexport default class SelectBehaviour extends PersistentBehaviour {\n static formalName () {\n return SELECT;\n }\n}\n\n","import { DimensionSubtype, FieldType } from 'muze-utils';\n/**\n * Gets the drag action configuration\n * @param {VisualUnit} instance instance of visual unit\n * @param {Object} config x y positions\n * @return {Object} Payload of behaviour\n*/\n/* istanbul ignore next */ const getDragActionConfig = (sourceInfo, config, fieldsConfig) => {\n if (!(sourceInfo.axes.x || sourceInfo.axes.y)) {\n return {\n criteria: null\n };\n }\n\n const axes = sourceInfo.axes;\n const xAxis = axes.x[0];\n const yAxis = axes.y[0];\n const axisFields = sourceInfo.fields;\n const xField = axisFields.x[0].getMembers()[0];\n const yField = axisFields.y[0].getMembers()[0];\n const xFieldType = fieldsConfig[xField].def.subtype ? fieldsConfig[xField].def.subtype :\n fieldsConfig[xField].def.type;\n const yFieldType = fieldsConfig[yField].def.subtype ? fieldsConfig[yField].def.subtype :\n fieldsConfig[yField].def.type;\n const dimensions = {};\n const stPos = config.startPos;\n const endPos = config.endPos;\n\n if (stPos.x === endPos.x && stPos.y === endPos.y) {\n return {\n criteria: null\n };\n }\n\n const dragDim = xFieldType === FieldType.MEASURE ? (yFieldType === FieldType.MEASURE ? ['x', 'y'] : ['y']) : ['x'];\n const criteria = {};\n const isXDimension = xFieldType === DimensionSubtype.CATEGORICAL;\n const isYDimension = yFieldType === DimensionSubtype.CATEGORICAL;\n const xRange = xAxis.constructor.type() === 'band' ? xAxis.scale().invertExtent(stPos.x, endPos.x) :\n xAxis.invert(stPos.x, endPos.x);\n const yRange = yAxis.constructor.type() === 'band' ? yAxis.scale().invertExtent(stPos.y, endPos.y) :\n yAxis.invert(stPos.y, endPos.y);\n const selectedDomains = {\n x: stPos.x === endPos.x ? [] : (isXDimension ? xRange : xRange.sort((a, b) => a - b)),\n y: stPos.y === endPos.y ? [] : (isYDimension ? yRange : yRange.sort((a, b) => a - b))\n };\n const rangeObj = {};\n\n if (dragDim.length === 2) {\n rangeObj[xField] = selectedDomains.x;\n rangeObj[yField] = selectedDomains.y;\n if (xField === yField) {\n const xdom = selectedDomains.x;\n const ydom = selectedDomains.y;\n const min = xdom[0] > ydom[0] ? ydom : xdom;\n const max = min === ydom ? xdom : ydom;\n if (min[1] < max[0]) {\n rangeObj[xField] = [];\n } else {\n rangeObj[xField] = [max[0], min[1] < max[1] ? min[1] : max[1]];\n }\n dimensions.x = [stPos.x, endPos.x];\n dimensions.y = [stPos.y, endPos.y];\n }\n } else {\n criteria[dragDim[0]] = selectedDomains[dragDim[0]] || [];\n\n if (dragDim[0] === 'x') {\n rangeObj[xField] = criteria.x;\n if (xFieldType === DimensionSubtype.CATEGORICAL) {\n dimensions.x = (config.snap && stPos.x !== endPos.x) ? xAxis.getNearestRange(stPos.x, endPos.x) :\n [stPos.x, endPos.x];\n }\n } else {\n rangeObj[yField] = criteria.y;\n if (yFieldType === DimensionSubtype.CATEGORICAL) {\n dimensions.y = (config.snap && stPos.y !== endPos.y) ? yAxis.getNearestRange(stPos.y, endPos.y) :\n [stPos.y, endPos.y];\n }\n }\n }\n\n return {\n criteria: rangeObj,\n dimensions\n };\n};\n\nexport default getDragActionConfig;\n","import {\n getEvent,\n getD3Drag\n } from 'muze-utils';\n\nimport getDragActionConfig from './drag-action-config';\n\n/**\n * Adds dragging action to the target element.\n * @param {VisualUnit} instance Instance of visual unit.\n * @param {SVGElement} targetEl Element on which brushing action is needed.\n * @param {Array} behaviours Array of behaviours\n */\nexport const attachDragEvent = (targetEl, behaviours, firebolt, touch) => {\n let startPos = {};\n let endPos = {};\n let drawingInf;\n\n const d3Drag = getD3Drag();\n let touchStart;\n targetEl.call(d3Drag().on('start', () => {\n const event = getEvent();\n startPos = {\n x: event.x,\n y: event.y\n };\n drawingInf = firebolt.context.getDrawingContext();\n touchStart = new Date().getTime();\n }).on('drag', () => {\n const event = getEvent();\n endPos = {\n x: event.x,\n y: event.y\n };\n if (touch && Math.abs(startPos.x - endPos.x) <= 5) {\n return;\n }\n endPos.x = Math.max(0, Math.min(endPos.x, drawingInf.width));\n endPos.y = Math.max(0, Math.min(endPos.y, drawingInf.height));\n\n const payload = getDragActionConfig(firebolt.context.getSourceInfo(), {\n startPos,\n endPos\n }, firebolt.context.data().getFieldsConfig());\n behaviours.forEach(beh => firebolt.dispatchBehaviour(beh, payload));\n }).on('end', () => {\n const event = getEvent();\n endPos = {\n x: event.x,\n y: event.y\n };\n const duration = new Date().getTime() - touchStart;\n\n if (touch && duration > 100 && Math.abs(startPos.x - endPos.x) <= 5) {\n return;\n }\n endPos.x = Math.max(0, Math.min(endPos.x, drawingInf.width));\n endPos.y = Math.max(0, Math.min(endPos.y, drawingInf.height));\n\n const payload = getDragActionConfig(firebolt.context.getSourceInfo(), {\n startPos,\n endPos,\n snap: true\n }, firebolt.context.data().getFieldsConfig());\n payload.dragEnd = true;\n behaviours.forEach(beh => firebolt.dispatchBehaviour(beh, payload));\n }));\n};\n\n","import { getClientPoint, getEvent } from 'muze-utils';\nimport { CONSOLIDATED, FRAGMENTED } from '../../enums/constants';\n\n/**\n * Adds mouse interactions to target element.\n * @param {Firebolt} instance instance of firebolt.\n * @param {SVGElement} targetEl Element on which the event listeners will be attached.\n * @param {Array} behaviours Array of behaviours\n */\n/* istanbul ignore next */ const hover = firebolt => (targetEl, behaviours) => {\n const dispatchBehaviour = function (args) {\n const event = getEvent();\n const context = firebolt.context;\n const tooltipConf = context.config().interaction.tooltip;\n const mode = tooltipConf.mode;\n const pos = getClientPoint(context.getDrawingContext().svgContainer, event);\n const nearestPoint = context.getNearestPoint(pos.x, pos.y, {\n getAllPoints: mode === CONSOLIDATED || mode === FRAGMENTED,\n data: args,\n event\n });\n const payload = {\n criteria: nearestPoint ? nearestPoint.id : null,\n showInPosition: nearestPoint.showInPosition,\n target: nearestPoint.target,\n position: pos,\n mode\n };\n\n behaviours.forEach(beh => firebolt.dispatchBehaviour(beh, payload));\n event.stopPropagation();\n };\n\n targetEl.on('mouseover', dispatchBehaviour)\n .on('mousemove', dispatchBehaviour)\n .on('mouseout', () => {\n behaviours.forEach(beh => firebolt.dispatchBehaviour(beh, {\n criteria: null\n }));\n });\n};\n\nexport default hover;\n","export const CLASSPREFIX = 'muze';\nexport const CONSOLIDATED = 'consolidated';\nexport const FRAGMENTED = 'fragmented';\n\n","import { getClientPoint } from 'muze-utils';\n\nexport const generatePayloadFromEvent = function (args, event, firebolt) {\n const context = firebolt.context;\n const pos = getClientPoint(context.getDrawingContext().svgContainer, event.touches ? event.touches[0] : event);\n const nearestPoint = context.getNearestPoint(pos.x, pos.y, {\n data: args,\n event\n });\n return {\n criteria: nearestPoint ? nearestPoint.id : null,\n showInPosition: nearestPoint.showInPosition,\n target: nearestPoint.target,\n position: pos\n };\n};\n","import { getEvent } from 'muze-utils';\nimport { generatePayloadFromEvent } from './helpers';\n\n/**\n * Adds mouse interactions to target element.\n * @param {VisualUnit} instance instance of visual unit.\n * @param {SVGElement} targetEl Element on which the event listeners will be attached.\n * @param {Array} behaviours Array of behaviours\n */\n/* istanbul ignore next */ const click = firebolt => (targetEl, behaviours) => {\n const dispatchBehaviour = function (args) {\n const event = getEvent();\n const payload = generatePayloadFromEvent(args, event, firebolt);\n behaviours.forEach(beh => firebolt.dispatchBehaviour(beh, payload));\n event.stopPropagation();\n };\n\n targetEl.on('click', dispatchBehaviour);\n};\nexport default click;\n","import drag from './drag';\nimport hover from './hover';\nimport { longtouch } from './longtouch';\nimport { touchdrag } from './touch-drag';\nimport * as ACTIONNAMES from '../../enums/actions';\nimport click from './click';\n\nexport const physicalActions = {\n [ACTIONNAMES.DRAG]: drag,\n [ACTIONNAMES.HOVER]: hover,\n [ACTIONNAMES.CLICK]: click,\n [ACTIONNAMES.LONGTOUCH]: longtouch,\n [ACTIONNAMES.TOUCHDRAG]: touchdrag\n};\n\n","import { attachDragEvent } from './helpers/drag-event';\n\n/**\n * Adds dragging action to the target element.\n * @param {VisualUnit} instance Instance of visual unit.\n * @param {SVGElement} targetEl Element on which brushing action is needed.\n * @param {Array} behaviours Array of behaviours\n */\n/* istanbul ignore next */ const drag = firebolt => (targetEl, behaviours) => {\n attachDragEvent(targetEl, behaviours, firebolt);\n};\n\nexport default drag;\n","/* global setTimeout */\nimport { getEvent } from 'muze-utils';\nimport { generatePayloadFromEvent } from './helpers';\n\n/**\n * Adds mouse interactions to target element.\n * @param {VisualUnit} instance instance of visual unit.\n * @param {SVGElement} targetEl Element on which the event listeners will be attached.\n * @param {Array} behaviours Array of behaviours\n */\nexport const longtouch = firebolt => (targetEl, behaviours) => {\n let event;\n let touchEnd;\n const dispatchBehaviour = function (args) {\n const payload = generatePayloadFromEvent(args, event, firebolt);\n behaviours.forEach(beh => firebolt.dispatchBehaviour(beh, payload));\n event.stopPropagation();\n };\n\n touchEnd = false;\n event = getEvent();\n targetEl.on('touchstart', (args) => {\n event = getEvent();\n touchEnd = false;\n setTimeout(() => {\n if (!touchEnd) {\n dispatchBehaviour(args);\n } else {\n behaviours.forEach(beh => firebolt.dispatchBehaviour(beh, {\n criteria: null\n }));\n }\n }, 100);\n }).on('touchend', () => {\n touchEnd = true;\n });\n};\n","import { attachDragEvent } from './helpers/drag-event';\n\n/**\n * Adds dragging action to the target element.\n * @param {VisualUnit} instance Instance of visual unit.\n * @param {SVGElement} targetEl Element on which brushing action is needed.\n * @param {Array} behaviours Array of behaviours\n */\nexport const touchdrag = firebolt => (targetEl, behaviours) => {\n attachDragEvent(targetEl, behaviours, firebolt, true);\n};\n\n","import { mergeRecursive, getUniqueId } from 'muze-utils';\n\nexport default class GenericSideEffect {\n constructor (firebolt) {\n this.firebolt = firebolt;\n this._enabled = true;\n this._strategy = 'default';\n this._config = {};\n this._id = getUniqueId();\n this._strategies = {};\n this.config(this.constructor.defaultConfig());\n }\n\n static defaultConfig () {\n return {};\n }\n\n static target () {\n return 'all';\n }\n\n static mutates () {\n return false;\n }\n\n config (...params) {\n if (params.length) {\n this._config = mergeRecursive(this._config, params[0]);\n return this;\n }\n return this._config;\n }\n\n disable () {\n this._enabled = false;\n return this;\n }\n\n enable () {\n this._enabled = true;\n return this;\n }\n\n isEnabled () {\n return this._enabled;\n }\n\n apply () {\n return this;\n }\n\n addStrategy (name, fn) {\n this._strategies[name] = fn;\n return this;\n }\n}\n","import GenericSideEffect from './generic';\n\nexport default class SurrogateSideEffect extends GenericSideEffect {\n applyInteractionStyle (set, config = {}, interactionType, apply) {\n const layers = this.firebolt.context.layers();\n layers.forEach(layer => layer.config().interactive !== false &&\n layer.applyInteractionStyle(interactionType, set.uids, apply));\n }\n}\n","import { makeElement } from 'muze-utils';\n\nimport GenericSideEffect from './generic';\n\nexport default class SpawnableSideEffect extends GenericSideEffect {\n createElement (container, elemType, data, className, callbacks) {\n return makeElement(container, elemType, data, className, callbacks);\n }\n\n drawingContext (...drawingContext) {\n if (drawingContext.length) {\n this._drawingContext = drawingContext[0];\n return this;\n }\n return this._drawingContext();\n }\n\n show () {\n return this;\n }\n\n hide () {\n return this;\n }\n}\n","import { selectElement } from 'muze-utils';\n\nexport const getBoxDimensionsFromPayload = (payload, axes, axisFields) => {\n let x1;\n let x2;\n let y1;\n let y2;\n let xRange;\n let yRange;\n let direction;\n const criteria = payload.criteria;\n const dimensions = payload.dimensions || {};\n const xDim = dimensions.x;\n const yDim = dimensions.y;\n\n if (criteria === null) {\n return null;\n }\n\n const xAxis = axes.x[0];\n const yAxis = axes.y[0];\n const xLinear = xAxis.constructor.type() === 'linear';\n const yLinear = yAxis.constructor.type() === 'linear';\n const xField = `${axisFields.x[0]}`;\n const yField = `${axisFields.y[0]}`;\n const xCriteria = criteria[xField];\n const yCriteria = criteria[yField];\n\n if (xCriteria && xCriteria[0] instanceof Array) {\n xRange = xCriteria[0];\n yRange = xCriteria[1];\n } else {\n xRange = xCriteria || [];\n yRange = yCriteria || [];\n }\n direction = xCriteria && yCriteria ? 'both' : (xCriteria ? 'vertical' : 'horizontal');\n if (xRange && xRange.length) {\n if ((yAxis.constructor.type() === 'band' && xLinear)) {\n x1 = x2 = undefined;\n direction = 'horizontal';\n } else {\n const domain = xAxis.domain();\n const bandScale = xAxis.constructor.type() === 'band';\n let x1Val;\n let x2Val;\n if (bandScale) {\n let x1DomainIndex = domain.indexOf(xRange[0]);\n let x2DomainIndex = domain.indexOf(xRange[xRange.length - 1]);\n [x1DomainIndex, x2DomainIndex] = [x1DomainIndex, x2DomainIndex].sort((a, b) => a - b);\n x1Val = domain[x1DomainIndex];\n x2Val = domain[x2DomainIndex];\n } else {\n x1Val = xRange[0];\n x2Val = xRange[xRange.length - 1];\n }\n x1 = xAxis.getScaleValue(x1Val);\n x2 = xAxis.getScaleValue(x2Val);\n x2 += bandScale ? xAxis.getUnitWidth() : 0;\n }\n } else {\n x1 = x2 = undefined;\n }\n if (yRange && yRange.length) {\n if ((xAxis.constructor.type() === 'band' && yLinear)) {\n y1 = y2 = undefined;\n direction = 'vertical';\n } else {\n const domain = yAxis.domain();\n const bandScale = yAxis.constructor.type() === 'band';\n let y1Val;\n let y2Val;\n if (bandScale) {\n let y1DomainIndex = domain.indexOf(yRange[0]);\n let y2DomainIndex = domain.indexOf(yRange[yRange.length - 1]);\n [y1DomainIndex, y2DomainIndex] = [y1DomainIndex, y2DomainIndex].sort(((a, b) => b - a));\n y1Val = domain[y1DomainIndex];\n y2Val = domain[y2DomainIndex];\n } else {\n y1Val = yRange[0];\n y2Val = yRange[yRange.length - 1];\n }\n y1 = yAxis.getScaleValue(y1Val);\n y2 = yAxis.getScaleValue(y2Val);\n y2 += yAxis.constructor.type() === 'band' ? yAxis.getUnitWidth() : 0;\n }\n } else {\n y1 = y2 = undefined;\n }\n\n if ((yLinear && xLinear) || !payload.dragEnd) {\n if (xDim) {\n [x1, x2] = xDim;\n }\n if (yDim) {\n [y1, y2] = yDim;\n }\n }\n\n return {\n dimension: {\n x1,\n x2,\n y1,\n y2\n },\n direction\n };\n};\n\nexport const changeVisibility = (context, sideEffectGroup, visible) => {\n const config = context.config();\n const className = config.defClassName;\n const classPrefix = config.classPrefix;\n selectElement(sideEffectGroup).selectAll(`.${classPrefix}-${className}`)\n .style('display', visible ? 'block' : 'none');\n};\n","import {\n getQualifiedClassName,\n selectElement,\n makeElement,\n isValidValue\n} from 'muze-utils';\nimport { CLASSPREFIX } from '../../enums/constants';\nimport './styles.scss';\nimport SpawnableSideEffect from '../spawnable';\nimport { selectionBoxDrag } from '../../actions/physical/selection-box-drag';\nimport { getBoxDimensionsFromPayload, changeVisibility } from './helper';\n\n/**\n * This class is used to create a selection box which is used by visual unit for brushing and\n * selection in the canvas.\n * @class SelectionBox\n */\nclass SelectionBox extends SpawnableSideEffect {\n /**\n * It returns the default configuration needed by selectionbox.\n * @return {Object} Default configuration of the selection box.\n */\n static defaultConfig () {\n return {\n defClassName: 'selection-box-group',\n className: '',\n classPrefix: CLASSPREFIX,\n box: {\n defClassName: 'selection-box',\n className: ''\n },\n transition: {\n duration: 200\n }\n };\n }\n\n static formalName () {\n return 'selectionBox';\n }\n\n /**\n * Draws the selectionbox with the specified dimensions.\n * @param {Object} dimension Dimensions of the selection box.\n * @param {number} dimension.x1 Starting x position\n * @param {number} dimension.x2 Ending x position\n * @param {number} dimension.y1 Starting y position\n * @param {number} dimension.y2 Ending y position\n * @param {Object} conf Configuration needed to draw the selection box\n * @param {number} unitWidth Width of the visual unit.\n * @param {number} unitHeight Height of the visual unit.\n */\n apply (selectionSet, payload) {\n let x;\n let y;\n let width;\n let height;\n const config = this._config;\n const boxConf = config.box;\n const firebolt = this.firebolt;\n const drawingInf = this.drawingContext();\n const mountPoint = drawingInf.sideEffectGroup;\n const unitWidth = drawingInf.width;\n const unitHeight = drawingInf.height;\n const classPrefix = config.classPrefix;\n const selectionGroupClassName = config.defClassName;\n\n if (payload.criteria === null) {\n this.hide(drawingInf);\n return this;\n }\n\n const sourceInf = firebolt.context.getSourceInfo();\n const { dimension, direction } = getBoxDimensionsFromPayload(payload, sourceInf.axes,\n sourceInf.fields);\n const transition = payload.dragEnd && config.transition;\n\n if (direction === 'both' || direction === 'vertical') {\n x = Math.min(dimension.x1, dimension.x2);\n width = Math.abs(dimension.x2 - dimension.x1);\n } else {\n x = 0;\n width = unitWidth;\n }\n if (direction === 'both' || direction === 'horizontal') {\n y = Math.min(dimension.y1, dimension.y2);\n height = Math.abs(dimension.y2 - dimension.y1);\n } else {\n height = unitHeight;\n y = 0;\n }\n this.show(drawingInf);\n // Create the data array for drawing the rectangle\n const points = [\n {\n x,\n y,\n width,\n height\n }\n ];\n // Create the container group for selection box.\n const selectionGroup = makeElement(selectElement(mountPoint), 'g', [1],\n `.${classPrefix}-${selectionGroupClassName}`);\n const sideEffect = this;\n const selection = selectionGroup.selectAll('rect').data(points);\n const selectionBox = selection.enter().append('rect')\n .each(function () {\n selectionBoxDrag(firebolt)(selectElement(this), ['brush'], sideEffect);\n })\n .merge(selection)\n .each(function (attrs) {\n let element = selectElement(this);\n transition && (element = element.transition().duration(transition.duration));\n for (const key in attrs) {\n if ({}.hasOwnProperty.call(attrs, key)) {\n isValidValue(attrs[key]) && element.attr(key, attrs[key]);\n }\n }\n });\n // Get the qualified class name for selection box rectangle\n const boxClassName = getQualifiedClassName(boxConf.defClassName, this._id, classPrefix);\n selectionBox.classed(boxClassName.join(' '), true);\n selectionBox.classed(boxConf.className, true);\n\n return this;\n }\n\n hide (drawingInf) {\n changeVisibility(this, drawingInf.sideEffectGroup, false);\n }\n\n show (drawingInf) {\n changeVisibility(this, drawingInf.sideEffectGroup, true);\n }\n}\n\nexport default SelectionBox;\n\n","import {\n getEvent,\n getD3Drag\n } from 'muze-utils';\n\nimport getDragActionConfig from './helpers/drag-action-config';\n\nexport const selectionBoxDrag = firebolt => (targetEl, behaviours) => {\n let subject;\n let drawingInf;\n const context = firebolt.context;\n const onDrag = (payload) => {\n behaviours.forEach(action => firebolt.dispatchBehaviour(action, payload));\n };\n const d3Drag = getD3Drag();\n\n targetEl.call(d3Drag().on('start', () => {\n const event = getEvent();\n drawingInf = context.getDrawingContext();\n subject = event.subject;\n }).on('drag', () => {\n const event = getEvent();\n subject.x += event.dx;\n subject.y += event.dy;\n const width = drawingInf.width;\n const height = drawingInf.height;\n const x = Math.min(width - subject.width, Math.max(subject.x, 0));\n const y = Math.min(height - subject.height, Math.max(subject.y, 0));\n const y2 = y + subject.height;\n const x2 = x + subject.width;\n\n if (x >= 0 && x2 <= width && y >= 0 && y2 <= height) {\n const payload = getDragActionConfig(context.getSourceInfo(), {\n startPos: {\n x,\n y\n },\n endPos: {\n x: x2,\n y: y2\n }\n }, context.data().getFieldsConfig());\n onDrag(payload);\n }\n }).on('end', () => {\n const width = drawingInf.width;\n const height = drawingInf.height;\n const x = Math.min(width - subject.width, Math.max(subject.x, 0));\n const y = Math.min(height - subject.height, Math.max(subject.y, 0));\n const y2 = y + subject.height;\n const x2 = x + subject.width;\n\n if (x >= 0 && x2 <= width && y >= 0 && y2 <= height) {\n const payload = getDragActionConfig(context.getSourceInfo(), {\n startPos: {\n x,\n y\n },\n endPos: {\n x: x2,\n y: y2\n },\n snap: true\n }, context.data().getFieldsConfig());\n payload.dragEnd = true;\n onDrag(payload);\n }\n }));\n};\n","export const CLASSPREFIX = 'muze';\nexport const ARROW_RIGHT = 'right';\nexport const ARROW_TOP = 'top';\nexport const ARROW_BOTTOM = 'bottom';\nexport const ARROW_LEFT = 'left';\nexport const TOOLTIP_LEFT = 'left';\nexport const TOOLTIP_RIGHT = 'right';\nexport const TOOLTIP_BOTTOM = 'bottom';\nexport const TOOLTIP_TOP = 'top';\nexport const INITIAL_STYLE = {\n position: 'absolute',\n width: 0,\n height: 0\n};\n","import { CLASSPREFIX } from './constants';\n\nexport const defaultConfig = {\n classPrefix: CLASSPREFIX,\n defClassName: 'tooltip-box',\n connectorClassName: 'tooltip-connectors',\n className: '',\n row: {\n margin: 0\n },\n content: {\n spacing: 5,\n iconContainerSize: 10,\n iconScale: 1,\n iconShape: 'circle',\n iconColor: '#ff0000',\n rowMargin: '0px',\n margin: 10,\n separator: ':',\n className: 'tooltip-content-container',\n parentClassName: 'tooltip-content-parent-container'\n },\n arrow: {\n size: 10,\n disabled: false,\n defClassName: 'tooltip-arrow',\n className: '',\n color: 'rgba(195,195,195,0.85)'\n }\n};\n","import { getQualifiedClassName } from 'muze-utils';\nimport { TOOLTIP_LEFT, TOOLTIP_RIGHT, ARROW_RIGHT, ARROW_LEFT, TOOLTIP_BOTTOM } from './constants';\n\nexport const getArrowPos = (orient, dim, measurement, config) => {\n let arrowPos;\n const { x, y, boxHeight, boxWidth } = measurement;\n const arrowDisabled = config.arrow.disabled;\n const arrowWidth = arrowDisabled ? 0 : config.arrow.size;\n\n if (orient === ARROW_LEFT || orient === ARROW_RIGHT) {\n let start = 0;\n let diff = boxHeight / 2;\n const plotBottom = dim.y + dim.height;\n const boxBottom = y + boxHeight;\n\n if (dim.y > y) {\n start = dim.y - y;\n diff = (plotBottom >= boxBottom ? (boxBottom - dim.y) : dim.height) / 2;\n } else if (boxBottom > plotBottom) {\n diff = Math.abs(y - (dim.y + dim.height)) / 2;\n }\n arrowPos = start + diff - arrowWidth / 2;\n } else {\n let start = 0;\n let diff = boxWidth / 2;\n const plotRight = dim.x + dim.width;\n const boxRight = x + boxWidth;\n\n if (dim.x > x) {\n start = dim.x - x;\n diff = (plotRight >= boxRight ? (boxRight - dim.x) : dim.width) / 2;\n } else if (boxRight > plotRight) {\n diff = Math.abs(x - (dim.x + dim.width)) / 2;\n }\n arrowPos = start + diff - arrowWidth / 2;\n }\n return arrowPos;\n};\n\n/**\n * Places the arrow in the specified arrow position. It also applies appropriate arrow\n * class name to the arrow element.\n * @param {string} position Left, bottom or right position of the arrow;\n * @param {number} arrowPos position of arrow in pixels\n * @return {Tooltip} Instance of tooltip.\n */\nexport const placeArrow = (context, position, arrowPos) => {\n const tooltipArrow = context._tooltipArrow;\n const tooltipBackground = context._tooltipBackground;\n const config = context._config;\n const classPrefix = config.classPrefix;\n const arrowConf = config.arrow;\n const className = getQualifiedClassName(arrowConf.defClassName, context._id, config.classPrefix);\n\n tooltipArrow.style('display', 'block');\n tooltipArrow.attr('class', `${className.join(' ')}`);\n if (position === TOOLTIP_LEFT || position === TOOLTIP_RIGHT) {\n tooltipArrow.style('top', `${arrowPos}px`);\n tooltipArrow.style('left', '');\n tooltipBackground.style('top', `${arrowPos}px`);\n tooltipBackground.style('left', '');\n } else {\n position === TOOLTIP_BOTTOM ? tooltipArrow.style('top', '100%') : tooltipArrow.style('top',\n `-${arrowConf.size}px`);\n tooltipArrow.style('left', `${arrowPos}px`);\n position === TOOLTIP_BOTTOM ? tooltipBackground.style('top', '100%') : tooltipBackground.style('top',\n `-${arrowConf.size + 3}px`);\n tooltipBackground.style('left', `${arrowPos}px`);\n }\n tooltipArrow.classed(`${classPrefix}-tooltip-arrow`, true);\n tooltipArrow.classed(`${classPrefix}-tooltip-arrow-${context._arrowOrientation}`, false);\n tooltipArrow.classed(`${classPrefix}-tooltip-arrow-${position}`, true);\n tooltipBackground.classed(`${classPrefix}-tooltip-background-arrow`, true);\n tooltipBackground.classed(`${classPrefix}-tooltip-background-arrow-${context._arrowOrientation}`, false);\n tooltipBackground.classed(`${classPrefix}-tooltip-background-arrow-${position}`, true);\n return this;\n};\n\nexport const reorderContainers = (parentContainer, className) => {\n parentContainer.selectAll(className).sort((a, b) => a - b);\n};\n","import {\n getClosestIndexOf,\n DateTimeFormatter,\n DimensionSubtype,\n FieldType\n} from 'muze-utils';\n\nconst timeFormats = {\n millisecond: '%A, %b %e, %H:%M:%S.%L',\n second: '%A, %b %e, %H:%M:%S',\n minute: '%A, %b %e, %H:%M',\n hour: '%A, %b %e, %H:%M',\n day: '%A, %b %e, %Y',\n month: '%B %Y',\n year: '%Y'\n};\nconst timeDurations = [\n ['millisecond', 'second', 'minute', 'hour', 'day', 'month', 'year'],\n [1, 1000, 60000, 3600000, 86400000, 2592000000, 31536000000]\n];\nconst getNearestInterval = (interval) => {\n const index = getClosestIndexOf(timeDurations[1], interval);\n return timeDurations[0][index];\n};\nconst defaultTooltipFormatters = (type, formatter) => {\n const formatters = {\n [DimensionSubtype.TEMPORAL]: (value, interval) => {\n const nearestInterval = getNearestInterval(interval);\n return DateTimeFormatter.formatAs(value, timeFormats[nearestInterval]);\n },\n [FieldType.MEASURE]: value => formatter(value ? value.toFixed(2) : value),\n [FieldType.DIMENSION]: value => value\n };\n return formatters[type];\n};\n\nconst getTabularData = (data, schema, fieldspace, timeDiffs) => {\n const rows = [];\n rows.push(schema.map(d => d.name));\n data.forEach((d) => {\n const row = [];\n schema.forEach((fieldObj, i) => {\n const interval = fieldObj.subtype === DimensionSubtype.TEMPORAL ? timeDiffs[fieldObj.name] : 0;\n const numberFormat = fieldObj.type === FieldType.MEASURE && fieldspace.fields[i]._ref.numberFormat();\n const formatterFn = defaultTooltipFormatters(fieldObj.subtype || fieldObj.type, numberFormat);\n const value = formatterFn(d[i], interval);\n row.push(value);\n });\n rows.push(row);\n });\n return rows;\n};\n\nexport const buildTooltipData = (dataModel, config = {}, context) => {\n let fieldValues = [];\n const dataObj = dataModel.getData();\n const data = dataObj.data;\n const schema = dataObj.schema;\n const formatters = config.formatters;\n const separator = config.separator;\n const fieldsConfig = dataModel.getFieldsConfig();\n const fieldspace = dataModel.getFieldspace();\n const fieldsObj = fieldspace.fieldsObj();\n const dimensionMeasureMap = context.dimensionMeasureMap;\n const axes = context.axes;\n const detailFields = context.detailFields || [];\n const dimensions = schema.filter(d => d.type === FieldType.DIMENSION);\n const measures = schema.filter(d => d.type === FieldType.MEASURE);\n // const containsRetinalField = schema.find(d => d.name in dimensionMeasureMap);\n const containsDetailField = schema.find(d => detailFields.indexOf(d.name) !== -1);\n const dataLen = data.length;\n const getRowContent = (field, type) => {\n let value;\n let formattedValue;\n let measureIndex;\n const values = [];\n const index = fieldsConfig[field].index;\n const interval = fieldsConfig[field].def.subtype === DimensionSubtype.TEMPORAL ?\n fieldsObj[field].getMinDiff() : 0;\n const formatterFn = (formatters && formatters[field]) || defaultTooltipFormatters(type, val => val);\n\n if (value !== null) {\n let uniqueVals = type === FieldType.MEASURE ? data.map(d => d[index]) :\n [...new Set(data.map(d => d[index]))];\n uniqueVals = uniqueVals.filter(d => d !== '');\n const colorAxis = axes.color[0];\n const shapeAxis = axes.shape[0];\n const sizeAxis = axes.size[0];\n const isRetinalField = (colorAxis || shapeAxis || sizeAxis) && dataLen > 1 &&\n type !== FieldType.MEASURE;\n\n uniqueVals.forEach((val, i) => {\n let key;\n const associatedMeasures = dimensionMeasureMap[field];\n\n if (associatedMeasures && associatedMeasures.length && dataLen > 1) {\n key = val;\n let icon = {\n value: ''\n };\n\n if (isRetinalField) {\n icon = {\n type: 'icon',\n color: colorAxis.getColor(val),\n shape: shapeAxis.getShape(val),\n size: sizeAxis.getSize(val) * config.iconScale\n };\n }\n if (associatedMeasures.length > 1) {\n values.push([icon, `${key}`]);\n associatedMeasures.forEach((measure) => {\n measureIndex = fieldsConfig[measure].index;\n value = data[i][measureIndex];\n formattedValue = defaultTooltipFormatters('measure',\n fieldspace.fields[measureIndex]._ref.numberFormat())(value, interval);\n values.push([{\n value: `${measure}${separator}`,\n style: {\n 'margin-left': `${config.margin}px}`\n },\n className: `${config.classPrefix}-tooltip-key`\n }, {\n value: `${formattedValue}`,\n className: `${config.classPrefix}-tooltip-value`\n }]);\n });\n } else {\n measureIndex = fieldsConfig[associatedMeasures[0]].index;\n value = data[i][measureIndex];\n formattedValue = defaultTooltipFormatters('measure',\n fieldspace.fields[measureIndex]._ref.numberFormat())(value, interval);\n values.push([icon, {\n value: `${key}${separator}`,\n className: `${config.classPrefix}-tooltip-key`\n }, {\n value: `${formattedValue}`,\n className: `${config.classPrefix}-tooltip-value`\n }]);\n }\n } else {\n key = field;\n value = val;\n formattedValue = formatterFn(value, interval);\n values.push([{\n value: `${key}${separator}`,\n className: `${config.classPrefix}-tooltip-key`\n }, {\n value: `${formattedValue}`,\n className: `${config.classPrefix}-tooltip-value`\n }]);\n }\n });\n }\n return values;\n };\n let displayFormat = 'keyValue';\n\n if (dataLen > 1 && containsDetailField) {\n fieldValues = getTabularData(data, schema, fieldspace, context.timeDiffs);\n displayFormat = 'table';\n } else {\n dimensions.forEach((item) => {\n const type = item.subtype ? item.subtype : item.type;\n fieldValues = [...fieldValues, ...getRowContent(item.name, type)];\n });\n\n const allMeasures = [...new Set(...Object.values(dimensionMeasureMap))];\n const filteredMeasures = dataLen > 1 ? measures.filter(d => allMeasures.indexOf(d.name) === -1)\n : measures;\n\n filteredMeasures.forEach((item) => {\n const type = item.subtype ? item.subtype : item.type;\n fieldValues = [...fieldValues, ...getRowContent(item.name, type)];\n });\n }\n\n return {\n content: fieldValues,\n displayFormat\n };\n};\n\n/**\n * This contains the strategy methods for showing tooltip in the chart.\n * @param {VisualUnit} context Attached instance.\n */\nexport const strategy = {\n keyValue: (data, config, context) => {\n const values = buildTooltipData(data, config, context);\n return values;\n }\n};\n\nexport const DEFAULT_STRATEGY = 'keyValue';\n","import {\n selectElement,\n mergeRecursive,\n makeElement,\n setAttrs,\n setStyles,\n getSymbol,\n isSimpleObject\n} from 'muze-utils';\nimport { DEFAULT_STRATEGY, strategy } from './strategy';\nimport { defaultConfig } from './default-config';\n\n/**\n * This class is used to manage the content of tooltip.\n */\nexport default class Content {\n /**\n * Creates an instance of content.\n */\n constructor () {\n this._model = null;\n this._strategy = DEFAULT_STRATEGY;\n this._formatter = null;\n this._config = this.constructor.defaultConfig();\n }\n /**\n * Returns the default configuration of tooltip\n * @return {Object} Configuration of tooltip.\n */\n static defaultConfig () {\n const config = defaultConfig.content;\n config.classPrefix = defaultConfig.classPrefix;\n return config;\n }\n\n config (...c) {\n if (c.length > 0) {\n this._config = mergeRecursive(this._config, c[0]);\n return this;\n }\n return this._config;\n }\n\n /**\n * Update model. The format contains presentation strategy which determines how to show the content.\n * If no strategy is mentioned then default is to show key value pair\n */\n update (item) {\n this._model = item.model;\n this._strategy = item.strategy !== undefined ? item.strategy : DEFAULT_STRATEGY;\n this._formatter = item.formatter;\n return this;\n }\n\n context (ctx) {\n this._context = ctx;\n return this;\n }\n\n render (mount) {\n let data;\n const config = this._config;\n const iconContainerSize = config.iconContainerSize;\n const formatter = this._formatter;\n const rowMargin = config.rowMargin;\n const model = this._model;\n\n this._mount = mount;\n if (model instanceof Array) {\n data = model;\n } else {\n data = formatter instanceof Function ? formatter(this._model, this._context) :\n strategy[this._strategy](this._model, this.config(), this._context);\n }\n\n if (data instanceof Function) {\n mount.html(data());\n } else {\n let content = data;\n let displayFormat = 'default';\n\n if (isSimpleObject(data)) {\n content = data.content;\n displayFormat = data.displayFormat;\n }\n\n const body = makeElement(mount, 'div', [displayFormat], `${config.classPrefix}-tooltip-content`, {},\n d => d);\n\n if (displayFormat === 'table') {\n const table = makeElement(body, 'table', [1], `${config.classPrefix}-tooltip-table`);\n const tbody = makeElement(table, 'tbody', [1], `${config.classPrefix}-tooltip-table-tbody`);\n const rows = makeElement(tbody, 'tr', content, `${config.classPrefix}-tooltip-table-row`);\n rows.each(function (d, i) {\n selectElement(this).classed(`${config.classPrefix}-tooltip-table-row-${i}`, true);\n });\n const cells = makeElement(rows, 'td', d => d, `${config.classPrefix}-tooltip-table-cell`);\n cells.each(function (d) {\n selectElement(this).html(d);\n });\n } else {\n const rows = makeElement(body, 'div', content, `${config.classPrefix}-tooltip-row`);\n const cells = makeElement(rows, 'span', d => d, `${config.classPrefix}-tooltip-content`);\n cells.attr('class', `${config.classPrefix}-tooltip-content`);\n setStyles(rows, {\n margin: rowMargin\n });\n setStyles(cells, {\n display: 'inline-block',\n 'margin-right': `${config.spacing}px`\n });\n\n cells.each(function (d) {\n const el = selectElement(this);\n el.html('');\n if (d instanceof Object) {\n if (d.type === 'icon') {\n const svg = makeElement(el, 'svg', [1]);\n const path = makeElement(svg, 'path', [1]);\n const shape = d.shape instanceof Function ? d.shape : getSymbol(d.shape);\n\n setAttrs(svg, {\n x: 0,\n y: 0,\n width: iconContainerSize,\n height: iconContainerSize\n });\n setAttrs(path, {\n d: shape.size(d.size)(),\n transform: `translate(${iconContainerSize / 2}, ${iconContainerSize / 2})`\n });\n setStyles(path, {\n fill: d.color\n });\n setStyles(svg, {\n width: `${iconContainerSize}px`,\n height: `${iconContainerSize}px`\n });\n } else {\n el.html(d.value);\n d.className && el.classed(d.className, true);\n setStyles(el, d.style);\n }\n } else {\n el.html(d);\n }\n });\n }\n }\n return this;\n }\n\n clear () {\n this._model = null;\n return this;\n }\n}\n","import {\n mergeRecursive,\n getQualifiedClassName,\n getUniqueId,\n selectElement,\n setStyles,\n makeElement\n} from 'muze-utils';\nimport { ARROW_BOTTOM, ARROW_LEFT, ARROW_RIGHT, TOOLTIP_LEFT, TOOLTIP_RIGHT, TOOLTIP_BOTTOM, TOOLTIP_TOP,\n INITIAL_STYLE } from './constants';\nimport { defaultConfig } from './default-config';\nimport { getArrowPos, placeArrow, reorderContainers } from './helper';\nimport './styles.scss';\nimport Content from './content';\n\n/**\n * This component is responsible for creating a tooltip element. It appends the tooltip\n * in the body element.\n * @class Tooltip\n */\nexport default class Tooltip {\n /**\n * Initializes the tooltip with the container element and configuration\n * @param {HTMLElement} container container where the tooltip will be mounted.\n * @param {string} className Class name of the tooltip.\n */\n constructor (htmlContainer, svgContainer) {\n let connectorContainer = svgContainer;\n this._id = getUniqueId();\n this._config = {};\n this.config({});\n const tooltipConf = this._config;\n const classPrefix = tooltipConf.classPrefix;\n const contentClass = tooltipConf.content.parentClassName;\n const container = makeElement(htmlContainer, 'div', [1], `${classPrefix}-tooltip-container`);\n this._container = container;\n this._tooltipContainer = container.append('div').style('position', 'absolute');\n this._contentContainer = this._tooltipContainer.append('div').attr('class', `${classPrefix}-${contentClass}`);\n this._tooltipBackground = this._tooltipContainer.append('div').style('position', 'relative');\n this._tooltipArrow = this._tooltipContainer.append('div');\n\n if (!svgContainer) {\n connectorContainer = htmlContainer.append('svg').style('pointer-events', 'none');\n }\n this._contents = {};\n this._tooltipConnectorContainer = selectElement(connectorContainer)\n .append('g')\n .attr('class', `${tooltipConf.classPrefix}-${tooltipConf.connectorClassName}`);\n const id = this._id;\n const defClassName = tooltipConf.defClassName;\n const qualifiedClassName = getQualifiedClassName(defClassName, id, tooltipConf.classPrefix);\n\n setStyles(this._tooltipArrow, INITIAL_STYLE);\n setStyles(this._tooltipBackground, INITIAL_STYLE);\n this.addClass(qualifiedClassName.join(' '));\n this.addClass(tooltipConf.className);\n this.hide();\n }\n\n /**\n * Sets the configuration of tooltip.\n * @param {Object} config Configuration of tooltip\n * @return {Tooltip} Instance of tooltip\n */\n config (...config) {\n if (config.length > 0) {\n const defConf = mergeRecursive({}, this.constructor.defaultConfig());\n this._config = mergeRecursive(defConf, config[0]);\n return this;\n }\n return this._config;\n }\n\n /**\n * Returns the default configuration of tooltip\n * @return {Object} Configuration of tooltip.\n */\n static defaultConfig () {\n return defaultConfig;\n }\n /**\n * Sets the class name of tooltip\n * @param {string} className tooltip class name\n * @return {Tooltip} Instance of tooltip.\n */\n addClass (className) {\n this._tooltipContainer.classed(className, true);\n return this;\n }\n\n context (...ctx) {\n if (ctx.length) {\n this._context = ctx[0];\n return this;\n }\n return this._context;\n }\n\n content (name, data, contentConfig = {}) {\n const config = this.config();\n const { classPrefix } = config;\n const contentClass = config.content.className;\n const formatter = config.formatter;\n const className = contentConfig.className || `${classPrefix}-${contentClass}-${name}`;\n const content = this._contents[name] = this._contents[name] || new Content();\n const container = makeElement(this._contentContainer, 'div', [contentConfig.order], className);\n container.attr('class', `${classPrefix}-${contentClass} ${className}`);\n reorderContainers(this._contentContainer, `.${classPrefix}-${contentClass}`);\n const contentConf = config.content;\n contentConfig.classPrefix = this._config.classPrefix;\n content.config(contentConf);\n\n if (data === null) {\n content.clear();\n container.remove();\n delete this._contents[name];\n } else {\n content.update({\n model: data,\n formatter: contentConfig.formatter || formatter\n });\n content.context(this._context);\n content.render(container);\n }\n\n if (!Object.keys(this._contents).length) {\n this.hide();\n }\n return this;\n }\n\n getContents () {\n return Object.values(this._contents);\n }\n\n /**\n * Positions the tooltip at the given x and y position.\n * @param {number} x x position\n * @param {number} y y position\n * @return {Tooltip} Instance of tooltip.\n */\n position (x, y, conf = {}) {\n if (!Object.keys(this._contents).length) {\n this.hide();\n return this;\n }\n this.show();\n const target = this._target;\n const repositionArrow = conf.repositionArrow;\n\n if (target && repositionArrow) {\n const node = this._tooltipContainer.node();\n const config = this._config;\n const arrowDisabled = config.arrow.disabled;\n const arrowWidth = arrowDisabled ? 0 : config.arrow.size;\n const arrowOrient = this._arrowOrientation;\n const outsidePlot = arrowOrient === ARROW_LEFT || arrowOrient === ARROW_RIGHT ?\n (y + node.offsetHeight - arrowWidth) < target.y || y > (target.y + target.height) :\n (x + node.offsetWidth - arrowWidth) < target.x || x > (target.x + target.width);\n\n if (!arrowDisabled) {\n if (outsidePlot) {\n let path;\n this._tooltipArrow.style('display', 'none');\n this._tooltipBackground.style('display', 'none');\n this._tooltipConnectorContainer.style('display', 'block');\n const connector = this._tooltipConnectorContainer.selectAll('path').data([1]);\n const enter = connector.enter().append('path');\n if (arrowOrient === ARROW_LEFT) {\n path = `M ${x} ${y + node.offsetHeight / 2} L ${target.x + target.width}`\n + ` ${target.y + target.height / 2}`;\n } else if (arrowOrient === ARROW_RIGHT) {\n path = `M ${x + node.offsetWidth} ${y + node.offsetHeight / 2}`\n + ` L ${target.x} ${target.y + target.height / 2}`;\n } else if (arrowOrient === ARROW_BOTTOM) {\n path = `M ${x + node.offsetWidth / 2} ${y + node.offsetHeight}`\n + ` L ${target.x + target.width / 2} ${target.y}`;\n }\n enter.merge(connector).attr('d', path).style('display', 'block');\n } else {\n const arrowPos = getArrowPos(arrowOrient, target, {\n x,\n y,\n boxHeight: node.offsetHeight,\n boxWidth: node.offsetWidth\n }, this._config);\n\n placeArrow(this, this._arrowOrientation, arrowPos);\n this._tooltipConnectorContainer.style('display', 'none');\n }\n }\n }\n\n const offset = this._offset || {\n x: 0,\n y: 0\n };\n this._tooltipContainer.style('left', `${offset.x + x}px`).style('top',\n `${offset.y + y}px`);\n\n return this;\n }\n\n /**\n * Positions the tooltip relative to a rectangular box. It takes care of tooltip overflowing the\n * boundaries.\n * @param {Object} dim Dimensions of the plot.\n */\n positionRelativeTo (dim, tooltipConf = {}) {\n let obj;\n let orientation = tooltipConf.orientation;\n this.show();\n if (!dim) {\n this.hide();\n return this;\n }\n\n const extent = this._extent;\n const node = this._tooltipContainer.node();\n\n this._tooltipContainer.style('top', '0px')\n .style('left', '0px');\n const offsetWidth = node.offsetWidth + 2;\n const offsetHeight = node.offsetHeight + 2;\n const config = this._config;\n const offset = this._offset;\n const arrowDisabled = config.arrow.disabled;\n const arrowSize = arrowDisabled ? 0 : config.arrow.size;\n const draw = tooltipConf.draw !== undefined ? tooltipConf.draw : true;\n const topSpace = dim.y;\n // When there is no space in right\n const dimX = dim.x + dim.width + offset.x;\n const rightSpace = extent.width - dimX;\n const leftSpace = dim.x + offset.x - extent.x;\n const positionTop = topSpace > (offsetHeight + arrowSize);\n const positionRight = rightSpace >= offsetWidth + arrowSize;\n const positionLeft = leftSpace >= offsetWidth + arrowSize;\n\n const positionHorizontal = () => {\n let position;\n let x = dim.x + dim.width;\n let y = dim.y;\n\n if (positionRight) {\n position = TOOLTIP_LEFT;\n x += arrowSize;\n } else if (positionLeft) {\n x = dim.x - offsetWidth;\n position = TOOLTIP_RIGHT;\n x -= arrowSize;\n } else {\n position = 'left';\n x += arrowSize;\n }\n if (dim.height < offsetHeight) {\n y = Math.max(0, dim.y + dim.height / 2 - offsetHeight / 2);\n }\n\n const arrowPos = getArrowPos(position, dim, {\n x,\n y,\n boxHeight: offsetHeight,\n boxWidth: offsetWidth\n }, this._config);\n\n return {\n position,\n arrowPos,\n x,\n y\n };\n };\n\n const positionVertical = () => {\n let position;\n let y;\n // Position tooltip at the center of plot\n let x = dim.x - offsetWidth / 2 + dim.width / 2;\n\n // Overflows to the right\n if ((extent.width - (dim.x + offset.x)) < offsetWidth) {\n x = extent.width - offsetWidth - offset.x;\n } else if ((x + offset.x) < extent.x) { // Overflows to the left\n x = extent.x;\n }\n\n if (positionTop) {\n y = dim.y - offsetHeight - arrowSize;\n position = TOOLTIP_BOTTOM;\n } else {\n y = dim.y + dim.height + arrowSize;\n position = TOOLTIP_TOP;\n }\n\n const arrowPos = getArrowPos(position, dim, {\n x,\n y,\n boxHeight: offsetHeight,\n boxWidth: offsetWidth\n }, this._config);\n\n return {\n position,\n arrowPos,\n x,\n y\n };\n };\n\n this._target = dim;\n if (!orientation) {\n if (positionTop) {\n orientation = 'vertical';\n } else if (positionRight || positionLeft) {\n orientation = 'horizontal';\n } else {\n orientation = 'vertical';\n }\n }\n\n if (orientation === 'horizontal') {\n obj = positionHorizontal();\n } else if (orientation === 'vertical') {\n obj = positionVertical();\n }\n\n this._position = {\n x: obj.x,\n y: obj.y\n };\n\n this._arrowPos = obj.arrowPos;\n if (!arrowDisabled) {\n placeArrow(this, obj.position, obj.arrowPos);\n } else {\n this._tooltipArrow.style('display', 'none');\n this._tooltipBackground.style('display', 'none');\n }\n this._arrowOrientation = obj.position;\n draw && this.position(obj.x, obj.y);\n return this;\n }\n\n /**\n * Hides the tooltip element.\n * @return {Tooltip} Instance of tooltip.\n */\n hide () {\n this._tooltipContainer.style('display', 'none');\n this._tooltipConnectorContainer.style('display', 'none');\n return this;\n }\n\n /**\n * Shows the tooltip element.\n * @return {Tooltip} Instance of tooltip.\n */\n show () {\n this._tooltipContainer.style('display', 'block');\n return this;\n }\n\n extent (extent) {\n this._extent = extent;\n return this;\n }\n\n offset (offset) {\n this._offset = offset;\n return this;\n }\n\n remove () {\n this._tooltipContainer.remove();\n this._tooltipBackground.remove();\n this._tooltipConnectorContainer.remove();\n return this;\n }\n}\n","import { FieldType } from 'muze-utils';\n\nexport const strategies = {\n showSelectedItems: (dm) => {\n const dataObj = dm.getData();\n const measures = dataObj.schema.filter(d => d.type === FieldType.MEASURE);\n const aggregatedModel = dm.groupBy([''], measures.reduce((acc, v) => {\n acc[v.name] = v.defAggFn === 'count' ? 'sum' : v.defAggFn;\n return acc;\n }, {}));\n const fieldsObj = dm.getFieldspace().fieldsObj();\n const fieldsConf = aggregatedModel.getFieldsConfig();\n let values = [{\n value: `${dataObj.data.length}`,\n style: {\n 'font-weight': 'bold'\n }\n }, 'Items Selected'];\n const measureNames = measures.map(d => d.name);\n if (measureNames.length) {\n values = [...values, ...[`(${fieldsObj[measureNames[0]].defAggFn().toUpperCase()}) ${measureNames[0]}`,\n {\n value: `${aggregatedModel.getData().data[0][fieldsConf[measureNames[0]].index].toFixed(2)}`,\n style: {\n 'font-weight': 'bold'\n }\n }]];\n }\n return [values];\n }\n};\n","import { Tooltip as TooltipRenderer } from '@chartshq/muze-tooltip';\nimport { FieldType } from 'muze-utils';\nimport { spaceOutBoxes } from '../helper';\nimport { strategies } from './strategies';\nimport { FRAGMENTED } from '../../enums/constants';\nimport SpawnableSideEffect from '../spawnable';\n\nimport './styles.scss';\n\nexport default class Tooltip extends SpawnableSideEffect {\n constructor (...params) {\n super(...params);\n this._tooltips = {};\n this._strategies = strategies;\n this._strategy = 'default';\n }\n\n static defaultConfig () {\n return {\n padding: 5,\n offset: {\n x: 0,\n y: 0\n }\n };\n }\n\n static formalName () {\n return 'tooltip';\n }\n\n apply (selectionSet, payload, options = {}) {\n let totalHeight = 0;\n let totalWidth = 0;\n const dataModel = selectionSet.mergedEnter.model;\n const context = this.firebolt.context;\n const drawingInf = this.drawingContext();\n if ((dataModel.isEmpty() || payload.criteria === null) || selectionSet.isSourceFieldPresent === false) {\n this.hide(options, null);\n return this;\n }\n\n const tooltips = this._tooltips;\n const config = this.config();\n const boundBox = {\n width: drawingInf.width,\n height: drawingInf.height\n };\n const showInPosition = payload.showInPosition;\n const pad = config.padding;\n const dataModels = [];\n const fragmented = config.mode === FRAGMENTED;\n const sourceInf = context.getSourceInfo();\n const fields = sourceInf.fields;\n const xFieldDim = fields.x[0] ? fields.x[0].type() === FieldType.DIMENSION : false;\n const showVertically = !!xFieldDim;\n const tooltipPos = payload.position;\n const boxes = [];\n const enter = {};\n const uids = dataModel.getData().uids;\n if (fragmented) {\n dataModels.push(...uids.map(d => dataModel.select((fieldsArr, i) => i === d, {\n saveChild: false\n })));\n } else {\n dataModels.push(dataModel);\n }\n\n let target = payload.target;\n let targetFields = [];\n if (target) {\n targetFields = target[0] || [];\n const sourceFields = payload.sourceFields;\n const indices = [];\n for (let i = 0, len = targetFields.length; i < len; i++) {\n if (sourceFields.indexOf(targetFields[i]) !== -1) {\n indices.push(i);\n }\n }\n target = target.map(d => d.filter((v, i) => indices.indexOf(i) !== -1));\n }\n\n const plotDimensions = context.getPlotPointsFromIdentifiers(target || payload.criteria, {\n getBBox: true\n });\n\n // Show tooltip for each datamodel\n for (let i = 0; i < dataModels.length; i++) {\n let plotDim = plotDimensions[i];\n if (fragmented) {\n const dimensions = dataModels[i].getData().schema.filter(d => d.type === FieldType.DIMENSION)\n .map(d => d.name);\n plotDim = context.getPlotPointsFromIdentifiers(dataModels[i].project(dimensions), { getBBox: true });\n plotDim = plotDim && plotDim[0];\n }\n\n let dt = dataModels[i];\n if (config.fields) {\n dt = dt.project(config.fields, {\n saveChild: false\n });\n }\n if (config.dataTransform) {\n dt = config.dataTransform(dt, i);\n }\n\n enter[i] = true;\n const layoutContainer = drawingInf.parentContainer;\n const layoutBoundBox = layoutContainer.getBoundingClientRect();\n const unitBoundBox = drawingInf.htmlContainer.getBoundingClientRect();\n\n const offsetLeft = unitBoundBox.left - layoutBoundBox.left;\n const offsetTop = unitBoundBox.top - layoutBoundBox.top;\n const tooltipInst = tooltips[i] = tooltips[i] || new TooltipRenderer(layoutContainer,\n drawingInf.svgContainer);\n\n sourceInf.payload = payload;\n sourceInf.firebolt = this.firebolt;\n sourceInf.detailFields = context.detailFields();\n sourceInf.timeDiffs = context.timeDiffsByField();\n tooltipInst.context(sourceInf);\n const strategy = strategies[options.strategy];\n tooltipInst.content(options.strategy || this._strategy, dt, {\n formatter: strategy,\n order: options.order\n })\n .config(this.config())\n .extent({\n x: 0,\n y: 0,\n width: layoutBoundBox.width,\n height: layoutBoundBox.height\n })\n .offset({\n x: offsetLeft + (config.offset.x || 0),\n y: offsetTop + (config.offset.y || 0)\n });\n\n if (showInPosition) {\n tooltipInst.position(tooltipPos.x + pad, tooltipPos.y + pad);\n } else if (plotDim) {\n tooltipInst.positionRelativeTo({\n x: plotDim.x,\n y: plotDim.y,\n width: plotDim.width || 0,\n height: plotDim.height || 0\n }, {\n orientation: fragmented ?\n (showVertically ? 'horizontal' : 'vertical') : undefined\n });\n } else {\n tooltipInst.hide();\n break;\n }\n\n if (fragmented) {\n const position = tooltipInst._position;\n const tooltipBoundBox = tooltipInst._tooltipContainer.node().getBoundingClientRect();\n\n totalHeight += tooltipBoundBox.height + pad;\n totalWidth += tooltipBoundBox.width + pad;\n if (showVertically ? totalHeight > drawingInf.height : totalWidth > drawingInf.width) {\n break;\n }\n boxes.push({\n x: position.x,\n y: position.y,\n width: tooltipBoundBox.width,\n height: tooltipBoundBox.height,\n tooltip: tooltipInst\n });\n }\n }\n\n for (const key in tooltips) {\n if (!enter[key]) {\n const tooltip = tooltips[key];\n tooltip.content(payload.action, null);\n if (!tooltip.getContents().length) {\n tooltip.remove();\n delete tooltips[key];\n }\n }\n }\n if (fragmented) {\n spaceOutBoxes(boxes, boundBox, showVertically);\n boxes.forEach(box => box.tooltip.position(box.x, box.y, {\n repositionArrow: true\n }));\n }\n return this;\n }\n\n hide (options) {\n const tooltips = this._tooltips;\n for (const key in tooltips) {\n if ({}.hasOwnProperty.call(tooltips, key)) {\n const strategy = options.strategy || this._strategy;\n tooltips[key].content(strategy, null);\n tooltips[key].hide();\n }\n }\n }\n}\n","export const spaceOutBoxes = (boxes, extent, showVertically) => {\n let y;\n let height;\n let x;\n let width;\n let i;\n const pad = 5;\n const len = boxes.length;\n const spaceOutIfOverlap = (firstBox, secondBox, opposite) => {\n x = firstBox.x;\n width = firstBox.width;\n y = firstBox.y;\n height = firstBox.height;\n const bottom = y + height;\n const right = x + width;\n\n if (showVertically) {\n if (opposite ? y < (secondBox.y + secondBox.height) : bottom > secondBox.y) {\n secondBox.y = opposite ? firstBox.y - secondBox.height - pad :\n bottom + pad;\n }\n } else if (opposite ? x < (secondBox.x + secondBox.width) : right > secondBox.x) {\n secondBox.x = opposite ? firstBox.x - secondBox.width - pad :\n right + pad;\n }\n };\n\n boxes.sort((a, b) => (showVertically ? a.y - b.y : a.x - b.x));\n i = 0;\n\n for (i = 0; i < len - 1; i++) {\n spaceOutIfOverlap(boxes[i], boxes[i + 1]);\n }\n\n if ((boxes[i].y + boxes[i].height) > extent.height ||\n (boxes[i].x + boxes[i].width) > extent.width) {\n if (showVertically) {\n boxes[i].y -= (boxes[i].height + boxes[i].y) - extent.height;\n } else {\n boxes[i].x -= (boxes[i].width + boxes[i].x) - extent.width;\n }\n for (i = len - 1; i > 0; i--) {\n spaceOutIfOverlap(boxes[i], boxes[i - 1], true);\n }\n }\n return boxes;\n}\n;\n","import { selectElement, FieldType } from 'muze-utils';\n\nimport './styles.scss';\nimport { CLASSPREFIX } from '../../enums/constants';\nimport SpawnableSideEffect from '../spawnable';\n\nexport default class Crossline extends SpawnableSideEffect {\n static defaultConfig () {\n return {\n className: `${CLASSPREFIX}-crossline-group`,\n bandClass: `${CLASSPREFIX}-crossband`,\n lineClass: `${CLASSPREFIX}-crossline`\n };\n }\n\n static formalName () {\n return 'crossline';\n }\n\n apply (selectionSet, payload) {\n let height;\n let bandWidth;\n let px;\n let width;\n const {\n className,\n bandClass,\n lineClass\n } = this.config();\n const dataModel = selectionSet.mergedEnter.model;\n const drawingInf = this.drawingContext();\n if (payload.criteria && dataModel && dataModel.isEmpty()) {\n return this;\n }\n if (payload.criteria === null || !dataModel) {\n this.hide();\n return this;\n }\n\n const dataObj = dataModel.getData();\n const sourceInf = this.firebolt.context.getSourceInfo();\n const axes = sourceInf.axes;\n const axisFields = sourceInf.fields;\n const fields = selectionSet.fields;\n const data = dataObj.data;\n const fieldsConfig = dataModel.getFieldsConfig();\n const svgContainer = drawingInf.sideEffectGroup;\n\n const elemData = [];\n fields.forEach((field) => {\n const fieldIndex = fieldsConfig[field] && fieldsConfig[field].index;\n const dataArr = data.map(d => d[fieldIndex]);\n const axisIndex = [['x', 0], ['x', 1], ['y', 0], ['y', 1]].find((arr) => {\n const fieldInst = axisFields[arr[0]][arr[1]];\n return fieldInst && fieldInst.type() === FieldType.DIMENSION &&\n fieldInst.getMembers().indexOf(field) !== -1;\n });\n if (axisIndex !== undefined && data.length) {\n const type = axisIndex[0];\n const axis = axes[type][axisIndex[1]];\n const value = dataArr[0];\n bandWidth = axis.getUnitWidth() || 0;\n px = axis.getScaleValue(value) + bandWidth / 2 + drawingInf.xOffset;\n const plotWidth = Math.max(...this.firebolt.context.layers().map(layer => layer.getPlotSpan()[type]));\n const pad = Math.max(...this.firebolt.context.layers().map(layer => layer.getPlotPadding()[type]));\n height = drawingInf.height;\n width = drawingInf.width;\n const startPx = px - plotWidth / 2 - pad / 2;\n const endPx = px + plotWidth / 2 + pad / 2;\n const dataPoint = {};\n if (type === 'y') {\n dataPoint.d = `M 0 ${startPx} L 0 ${endPx} L ${width} ${endPx} L ${width} ${startPx} Z`;\n } else {\n dataPoint.d = `M ${startPx} 0 L ${endPx} 0 L ${endPx} ${height} L ${startPx} ${height} Z`;\n }\n dataPoint.className = plotWidth ? bandClass : lineClass;\n elemData.push(dataPoint);\n }\n });\n if (elemData.length) {\n const parentGroup = this.createElement(svgContainer, 'g', [1], className);\n const elem = this.createElement(parentGroup, 'path', elemData);\n elem.attr('d', d => d.d).style('pointer-events', 'none')\n .attr('class', d => d.className);\n }\n return this;\n }\n\n hide () {\n const className = this.config().className;\n const drawingInf = this.drawingContext();\n selectElement(drawingInf.sideEffectGroup).selectAll(`.${className}`).remove();\n }\n}\n","const fadeFn = (set, context, strategy) => {\n const {\n mergedEnter,\n mergedExit,\n exitSet,\n completeSet\n } = set;\n\n if (!mergedEnter.length && !mergedExit.length) {\n context.applyInteractionStyle(completeSet, {}, strategy, false);\n } else {\n context.applyInteractionStyle(exitSet[1], {}, strategy, true);\n context.applyInteractionStyle(mergedEnter, {}, strategy, false);\n }\n};\n\nexport const strategies = {\n fade: fadeFn,\n focus: (set, context) => {\n const {\n mergedEnter,\n mergedExit,\n completeSet\n } = set;\n if (!mergedEnter.length && !mergedExit.length) {\n context.applyInteractionStyle(completeSet, {}, 'focus', false);\n } else {\n context.applyInteractionStyle(mergedExit, {}, 'focus', true);\n context.applyInteractionStyle(mergedEnter, {}, 'focus', false);\n }\n },\n highlight: (set, context) => {\n const {\n mergedEnter,\n mergedExit,\n entrySet,\n exitSet,\n completeSet\n } = set;\n if (!mergedEnter.length && !mergedExit.length) {\n context.applyInteractionStyle(completeSet, {}, 'highlight', false);\n } else {\n context.applyInteractionStyle(entrySet[1], {}, 'highlight', true);\n context.applyInteractionStyle(exitSet[1], {}, 'highlight', false);\n }\n }\n};\n","import SurrogateSideEffect from '../surrogate';\nimport { strategies } from './strategy';\n\nexport default class PlotHighlighter extends SurrogateSideEffect {\n constructor (...params) {\n super(...params);\n this._strategy = 'highlight';\n this._strategies = strategies;\n }\n\n static formalName () {\n return 'highlighter';\n }\n\n static target () {\n return 'visual-unit';\n }\n\n apply (selectionSet, payload, options = {}) {\n const strategy = this._strategies[options.strategy || this._strategy];\n\n if (selectionSet.isSourceFieldPresent !== false) {\n strategy(selectionSet, this, options.strategy || this._strategy);\n }\n\n return this;\n }\n}\n","import SurrogateSideEffect from '../surrogate';\n\nexport default class FilterEffect extends SurrogateSideEffect {\n static formalName () {\n return 'filter';\n }\n\n static target () {\n return 'visual-unit';\n }\n\n static mutates () {\n return true;\n }\n\n apply (selectionSet, payload) {\n const context = this.firebolt.context;\n const entryModel = selectionSet.mergedEnter.model;\n if (payload.criteria === null) {\n context.clearCaching().resetData();\n } else {\n context.enableCaching().data(entryModel);\n }\n return this;\n }\n}\n","import { DataModel } from 'muze-utils';\n\nimport { CLASSPREFIX } from '../../enums/constants';\nimport SpawnableSideEffect from '../spawnable';\n\nimport './styles.scss';\n\nexport default class AnchorEffect extends SpawnableSideEffect {\n constructor (...params) {\n super(...params);\n const context = this.firebolt.context;\n this._layers = this.addAnchorLayers(context);\n }\n\n static target () {\n return 'visual-unit';\n }\n\n static defaultConfig () {\n return {\n className: `${CLASSPREFIX}-anchors-group`\n };\n }\n\n static formalName () {\n return 'anchors';\n }\n\n addAnchorLayers (context) {\n const layers = [];\n this.firebolt.context.layers().forEach((layer, idx) => {\n const shouldDrawAnchors = layer.shouldDrawAnchors();\n if (shouldDrawAnchors) {\n const encodingFieldsInf = layer.encodingFieldsInf();\n const layerObj = {\n instances: context.addLayer({\n name: `${layer.alias()}-${this.constructor.formalName()}-${idx}`,\n mark: 'point',\n encoding: {\n x: encodingFieldsInf.xField,\n y: encodingFieldsInf.yField,\n color: {\n field: encodingFieldsInf.colorField\n },\n size: {\n field: encodingFieldsInf.sizeField,\n value: this.defaultSizeValue()\n }\n },\n transform: {\n type: 'identity'\n },\n transition: this.getTransitionConfig(),\n calculateDomain: false,\n source: dt => dt.select(() => false, {\n saveChild: false\n }),\n interactive: false,\n render: false\n }),\n linkedLayer: layer\n };\n\n layers.push(layerObj);\n }\n });\n return layers;\n }\n\n getTransitionConfig () {\n return {\n disabled: true\n };\n }\n\n /**\n * Returns the default area value of the anchor point.\n * @return { number } Default area value of anchor.\n */\n defaultSizeValue () {\n return 100;\n }\n\n apply (selectionSet) {\n const self = this;\n const dataModel = selectionSet.mergedEnter.model;\n if (selectionSet.isSourceFieldPresent !== false) {\n const drawingInf = this.drawingContext();\n const sideEffectGroup = drawingInf.sideEffectGroup;\n const className = `${this.config().className}`;\n const layers = this._layers;\n const parentGroup = this.createElement(sideEffectGroup, 'g', [1], `${className}-container`);\n const anchorGroups = this.createElement(parentGroup, 'g', layers);\n anchorGroups.each(function (layer) {\n const instances = layer.instances;\n const elems = self.createElement(this, 'g', instances, className);\n const linkedLayer = layer.linkedLayer;\n const [transformedData, schema] = linkedLayer.getTransformedDataFromIdentifiers(dataModel);\n const transformedDataModel = new DataModel(transformedData, schema);\n elems.each(function (d, i) {\n instances[i].data(transformedDataModel).mount(this);\n });\n });\n }\n return this;\n }\n}\n","import AnchorEffect from './anchors';\nimport { CLASSPREFIX } from '../enums/constants';\n\nexport default class PersistentAnchors extends AnchorEffect {\n static formalName () {\n return 'persistent-anchors';\n }\n\n static defaultConfig () {\n return {\n className: `${CLASSPREFIX}-persistent-anchors`\n };\n }\n\n getTransitionConfig () {\n return {\n disabled: true\n };\n }\n}\n","import AnchorEffect from './anchors';\nimport { CLASSPREFIX } from '../enums/constants';\n\nexport default class BrushAnchors extends AnchorEffect {\n static formalName () {\n return 'brush-anchors';\n }\n\n static defaultConfig () {\n return {\n className: `${CLASSPREFIX}-brush-anchors`\n };\n }\n\n getTransitionConfig () {\n return {\n disabled: true\n };\n }\n}\n","import * as BEHAVIOURS from './enums/behaviours';\n\nexport const behaviourEffectMap = {\n [BEHAVIOURS.BRUSH]: ['selectionBox', {\n name: 'highlighter',\n options: {\n strategy: 'fade'\n }\n }, 'brush-anchors'],\n [`${BEHAVIOURS.BRUSH},${BEHAVIOURS.SELECT}`]: [{\n name: 'tooltip',\n options: {\n strategy: 'showSelectedItems',\n order: 0,\n filter: context => context.config().mode === 'fragmented'\n }\n }],\n [BEHAVIOURS.HIGHLIGHT]: [{\n name: 'highlighter',\n options: {\n strategy: 'highlight'\n }\n }, 'crossline', {\n name: 'tooltip',\n options: {\n order: 9999\n }\n }, 'anchors'],\n [BEHAVIOURS.FILTER]: ['filter'],\n [BEHAVIOURS.SELECT]: [{\n name: 'highlighter',\n options: {\n strategy: 'focus'\n }\n }, 'persistent-anchors']\n};\n","export const CLASSPREFIX = 'muze';\nexport const STACK = 'stack';\nexport const GROUP = 'group';\nexport const IDENTITY = 'identity';\nexport const ANGLE = 'angle';\nexport const RADIUS = 'radius';\nexport const SIZE = 'size';\nexport const COLOR = 'color';\nexport const SHAPE = 'shape';\nexport const OUTER_RADIUS_VALUE = 'outerRadiusValue';\nexport const TEXT_ANCHOR_MIDDLE = 'middle';\nexport const ENCODING = {\n X: 'x',\n Y: 'y',\n X0: 'x0',\n Y0: 'y0'\n};\n\nexport const ASCENDING = 'asc';\n\nexport const AREA_LAYER = 'area';\nexport const ARC_LAYER = 'arc';\nexport const LINE_LAYER = 'line';\nexport const TEXT_LAYER = 'text';\nexport const POINT_LAYER = 'point';\nexport const BAR_LAYER = 'bar';\nexport const TICK_LAYER = 'tick';\nexport const SIMPLE_LAYER = 'simple';\nexport const BASE_LAYER = 'base';\n","import { CLASSPREFIX, STACK } from '../../enums/constants';\n\nexport const defaultConfig = {\n classPrefix: CLASSPREFIX,\n defClassName: 'layer-area',\n className: '',\n interpolate: 'linear',\n transform: {\n type: STACK\n },\n interaction: {\n\n },\n nearestPointThreshold: 10,\n encoding: {\n color: {},\n x: {},\n y: {},\n y0: {},\n strokeOpacity: {\n value: 1\n }\n },\n transition: {\n effect: 'cubic',\n duration: 1000\n },\n connectNullData: false\n};\n","import { ERROR_MSG } from 'muze-utils';\n\n/**\n * This is an interface class which any new layer class has to extend.\n *\n * @example\n * class BarLayer extends BaseLayer {\n * update (params) {\n * // super.update(params);\n * // Update the bar layer\n * }\n * }\n * @class\n */\nexport default class SimpleLayer {\n\n formalName () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Sets or gets the dependencies.\n * @param {Object} dependencies Dependencies needed by layer\n * @return {BaseLayer} Instance of base layer.\n */\n dependencies () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Returns the config of the layer\n *\n * @param {Object} config Configuration of layer\n * @return {Object} configuration of layer\n */\n config () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Acts as a getter or setter function\n * When setter\n * Returns the datamodel of the layer\n * @param { DataModel } dataModel instance of DataModel\n * @return { DataModel } DataModel instance of the layer\n */\n data () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Returns a serialized schema of the layer\n * @return {Object} Serialized schema\n */\n serialize () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Returns the unique identifier of this layer\n * @return {string} id of the layer\n */\n id () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n /*\n * This method resolves the x, y, x0 and y0 values from the transformed data.\n * It also checks the type of transformed data for example, if it is a stacked data\n * then it fetches the y and y0 values from the stacked data.\n * @param {Array.} transformedData transformed data\n * @param {Object} fieldMap field definitions\n * @param {string} transformType type of transformed data - stack, group or identity.\n * @return {Array.} Normalized data\n * @private\n */\n normalizeTransformedData () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Gets the transform method from transform factory based on type of transform. It then calls the\n * transform method with the data and passes the configuration parameters of transform such as\n * groupBy, value field, etc.\n *\n * @param {DataModel} dataModel Instance of dataModel\n * @param {Object} config configuration for transforming data\n * @return {Array.} Transformed data.\n * @private\n */\n getTransformedData () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Calculates the domain from the data.\n * It checks the type of field and calculates the domain based on that. For example, if it\n * is a quantitative or temporal field, then it calculates the min and max from the data or\n * if it is a nominal field then it gets all the values from the data of that field.\n * @param {Array} data DataArray\n * @return {Array} Domain values array.\n */\n _calculateDomainFromData () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Returns the domain for the axis.\n *\n * @param {string} encodingType type of encoding x, y, color, etc.\n * @return {Object} Axis domains\n */\n getDomain () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Abstract method for getting nearest point\n * @return {BaseLayer} Instance of base layer\n */\n getNearestPoint () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Abstract method for highlighting points\n * @return {BaseLayer} Instance of base layer\n */\n highlightPoint () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Abstract method for deselecting points\n * @return {BaseLayer} Instance of base layer\n */\n dehighlightPoint () {\n return this;\n }\n\n linkLayerStore () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Sets the container element for the layer to be renderered.\n * @param {SVGElement} mountPoint SVG element or group element.\n */\n mount () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n render () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n}\n","export const DATA = 'data';\nexport const CONFIG = 'config';\nexport const MEASUREMENT = 'measurement';\nexport const AXES = 'axes';\nexport const NORMALIZED_DATA = 'normalizedData';\nexport const TRANSFORMED_DATA = 'transformedData';\nexport const DOMAIN = 'domain';\nexport const MOUNT = 'mount';\nexport const FIELDMAP = 'fieldMap';\nexport const DATA_UPDATED = 'dataUpdated';\n","/**\n * @module Axis\n * This file declares a class that is used to render an axis to add meaning to\n * plots.\n */\nimport { Symbols } from 'muze-utils';\nimport * as AxisOrientation from '../enums/axis-orientation';\n\n/**\n * @module Axis\n * This file exports constants that are used to reference axis orientations\n * in a consistent manner.\n */\nexport const BOTTOM = 'bottom';\nexport const TOP = 'top';\nexport const LEFT = 'left';\nexport const RIGHT = 'right';\n\n/**\n * This object is used to associate the axis orientation with the d3 class\n * used to represent that axis.\n */\nexport const axisOrientationMap = {\n [AxisOrientation.LEFT]: Symbols.axisLeft,\n [AxisOrientation.BOTTOM]: Symbols.axisBottom,\n [AxisOrientation.RIGHT]: Symbols.axisRight,\n [AxisOrientation.TOP]: Symbols.axisTop\n};\n","/**\n * @module axis\n * This file exports constants used to reference scale type\n * consistently throughout the project.\n */\nexport const LINEAR = 'linear';\nexport const BAND = 'band';\nexport const TIME = 'temporal';\nexport const COLOR = 'color';\nexport const ORDINAL = 'ordinal';\nexport const QUANTIZE = 'quantize';\nexport const QUANTILE = 'quantile';\nexport const LOG = 'log';\nexport const POW = 'pow';\nexport const IDENTITY = 'identity';\nexport const SEQUENTIAL = 'sequential';\nexport const THRESHOLD = 'threshold';\n","export const CLASSPREFIX = 'muze';\n\nexport const CONTINOUS = 'continous';\nexport const DISCRETE = 'discrete';\nexport const SEQUENTIAL = 'sequential';\nexport const ORDINAL = 'ordinal';\nexport const LINEAR = 'linear';\nexport const THRESHOLD = 'threshold';\nexport const QUANTIZE = 'quantize';\nexport const QUANTILE = 'quantile';\n\nexport const COLOR = 'color';\nexport const SHAPE = 'shape';\nexport const SIZE = 'size';\n\nexport const DOMAIN = 'domain';\nexport const BAND = 'band';\nexport const HIDDEN = 'hidden';\nexport const NUMBER = 'number';\nexport const BOTTOM = 'bottom';\nexport const TOP = 'top';\n\nexport const RGB = 'rgb';\nexport const HEX = 'hex';\nexport const HSLA = 'hsla';\nexport const HSL = 'hsl';\n\n","import { scales, colorSchemes } from 'muze-utils';\n\nimport {\n SEQUENTIAL,\n ORDINAL,\n LINEAR,\n CONTINOUS,\n THRESHOLD,\n QUANTIZE\n} from './enums/constants';\n\nimport * as ScaleType from './enums/scale-type';\n\nconst {\n scaleLinear,\n scaleThreshold,\n scaleLog,\n scalePow,\n scaleIdentity,\n scaleOrdinal,\n scaleSequential,\n scaleQuantize,\n scaleQuantile,\n schemeCategory10,\n schemeCategory20,\n schemeCategory20b,\n scaleBand,\n scaleTime\n} = scales;\nexport const scaleMap = {\n [ScaleType.LINEAR]: scaleLinear,\n [ScaleType.BAND]: scaleBand,\n [ScaleType.QUANTIZE]: scaleQuantize,\n [ScaleType.QUANTILE]: scaleQuantile,\n [ScaleType.THRESHOLD]: scaleThreshold,\n [ScaleType.SEQUENTIAL]: scaleSequential,\n [ScaleType.LOG]: scaleLog,\n [ScaleType.POW]: scalePow,\n [ScaleType.IDENTITY]: scaleIdentity,\n [ScaleType.TIME]: scaleTime,\n [ScaleType.COLOR]: scaleLinear,\n [ScaleType.ORDINAL]: scaleOrdinal\n};\nexport const SCHEMES = {\n SCHEME1: schemeCategory10,\n SCHEME2: schemeCategory20,\n SCHEME3: schemeCategory20b\n};\n\n/**\n * Accepts a scheme in a string format and returns the scale from d3-scale-chromatic\n *\n * @export\n * @param {string} scheme a string representing the kind of scheme for the color axis\n * @return {Object} The corresponding scale from a scheme type from d3 chromatic scale\n */\nexport function getScheme (scheme) {\n if (scheme[0] === 'i') {\n return scaleSequential(colorSchemes[scheme]);\n }\n return scaleOrdinal(colorSchemes[scheme]);\n}\n\n/**\n *\n *\n * @export\n * @param {*} scheme\n * @returns\n */\nexport function getSchemeType (scheme) {\n let schemeType = '';\n if (scheme && typeof (scheme) === 'string') {\n schemeType = scheme[0] === 'i' ? SEQUENTIAL : ORDINAL;\n } else {\n schemeType = ORDINAL;\n }\n return schemeType;\n}\n\n/**\n * This function is used to create a scale that is assigned to\n * an instance of axis.\n *\n * @export\n * @param {Object} params the input parameters to create a Scale object\n * @param {string} params.type the type of scale\n * @param {Array} params.range the range of scale\n * @return {Object} instance of scale\n */\nexport function createScale (params) {\n if (!params.type || !scaleMap[params.type]) {\n throw new Error(`${params.type} is not a valid scale type`);\n }\n if (!Array.isArray(params.range)) {\n throw new Error('range parameter must be an array');\n }\n let scaleFactory = null;\n const range = params.range;\n // @todo: do it using scale decorator\n if (params.type === LINEAR && params.interpolator) {\n scaleFactory = scaleMap[params.interpolator];\n if (params.interpolator === ScaleType.POW) {\n return scaleFactory().range(range).exponent(params.exponent);\n } else if (params.interpolator === ScaleType.LOG) {\n return scaleFactory().range(range).base([params.base]);\n }\n } else {\n scaleFactory = scaleMap[params.type];\n }\n\n if (params.type === QUANTIZE) {\n scaleFactory().nice();\n }\n return scaleFactory().range(range);\n}\n\n/**\n * This method is used to update the range of a scale\n * so that the core module can remain agnostic of the d3\n * scale api.\n *\n * @export\n * @param {Scale} scale Instance of d3 Scale.\n * @param {Array} range new range of the scale.\n * @return {Scale} Updated scale.\n */\nexport function updateScaleRange (scale, range) {\n return scale.range(range);\n}\n\n/**\n *\n *\n * @export\n * @param {*} domainType\n * @param {*} rangeType\n * @param {*} steps\n * @returns\n */\nexport function getScaleType (domainType, rangeType, steps) {\n if (rangeType === CONTINOUS) {\n return LINEAR;\n }\n if (domainType === CONTINOUS) {\n if (steps instanceof Array) {\n return THRESHOLD;\n }\n return QUANTIZE;\n }\n return ORDINAL;\n}\n","import { getUniqueId } from 'muze-utils';\nimport { CLASSPREFIX } from '../enums/constants';\n\n/**\n *\n *\n */\nexport const defaultConfig = {\n id: getUniqueId(),\n axisName: {\n defClassName: 'axis-name'\n },\n axisNamePadding: 12,\n base: 10,\n classPrefix: CLASSPREFIX,\n className: `${CLASSPREFIX}-axis`,\n exponent: 1,\n interpolator: 'linear',\n fixedBaseline: true,\n labels: {\n rotation: 0,\n smartTicks: false\n },\n orientation: 'left',\n maxHeight: 50, // @todo: height and width wont be hardcoded\n maxWidth: 40,\n numberFormat: val => val,\n padding: 0.3,\n nice: true,\n numberOfTicks: 10,\n rotate: false,\n show: true,\n showAxisName: true,\n showInnerTicks: null,\n showOuterTicks: null,\n style: {},\n type: 'linear',\n tickFormat: null,\n tickValues: null,\n xOffset: undefined,\n yOffset: undefined\n};\n\n","/**\n * This file exports functionality that is used to render axis.\n */\nimport { selectElement, makeElement, angleToRadian } from 'muze-utils';\nimport * as AxisOrientation from './enums/axis-orientation';\nimport { LINEAR, HIDDEN, BOTTOM, TOP } from './enums/constants';\n\n/**\n *\n *\n * @param {*} instance\n * @param {*} container\n * @param {*} labelManager\n * @param {*} config\n */\nconst rotateAxis = (instance, tickText, labelManager, config) => {\n const axis = instance.axis();\n const scale = instance.scale();\n const {\n orientation,\n labels,\n fixedBaseline,\n type\n } = config;\n let { rotation } = labels;\n\n const tickSize = instance.getTickSize();\n\n tickText.each(function (datum, index) {\n let yShift;\n let xShift;\n const tickFormatter = axis.tickFormat() ? axis.tickFormat : scale.tickFormat;\n const temp = tickFormatter ? tickFormatter()(datum) : datum;\n\n datum = temp.toString();\n\n const tickLabelDim = labelManager.getOriSize(datum);\n const width = tickLabelDim.width * 0.5;\n const height = tickLabelDim.height * 0.5;\n\n if (rotation < 0) {\n rotation = 360 + rotation;\n }\n\n const quadrant = 4 - Math.floor(rotation / 90);\n const rotationNormalizer = ((quadrant % 2 === 0) ? rotation : 180 * Math.ceil(rotation / 180) - rotation) % 180;\n\n yShift = Math.sqrt(height ** 2 + width ** 2) * Math.sin(angleToRadian(rotationNormalizer));\n\n if ((quadrant === 3 || quadrant === 2) && !(rotationNormalizer > 67.5 && rotationNormalizer <= 90)) {\n yShift += height * 2;\n }\n xShift = width;\n\n if (rotation === 90) {\n xShift = height;\n } else if (rotation === 270) {\n xShift = -height;\n } else {\n xShift = 0;\n }\n\n if (orientation === AxisOrientation.TOP) {\n xShift = (index === 0 && fixedBaseline && type === LINEAR) ? xShift + xShift / 2 : xShift;\n selectElement(this)\n .attr('transform', `translate(${-xShift + tickSize} \n ${-yShift - tickSize}) rotate(${rotation})`);\n } else {\n xShift = (index === 0 && fixedBaseline && type === LINEAR) ? xShift - xShift / 2 : xShift;\n selectElement(this)\n .attr('transform', `translate(${xShift - tickSize} \n ${yShift + tickSize}) rotate(${rotation})`);\n }\n });\n return tickText;\n};\n\n/**\n *\n *\n * @param {*} tickText\n * @param {*} axisInstance\n */\nconst changeTickOrientation = (selectContainer, axisInstance, tickSize) => {\n const {\n _smartTicks\n } = axisInstance;\n const config = axisInstance.config();\n const labelManager = axisInstance.dependencies().labelManager;\n const {\n labels,\n orientation\n } = config;\n const {\n rotation,\n smartTicks: isSmartTicks\n } = labels;\n\n const tickText = selectContainer.selectAll('.tick text');\n tickText.selectAll('tspan').remove();\n\n // rotate labels if not enough space is available\n if (rotation !== 0 && isSmartTicks === false && (orientation === TOP || orientation === BOTTOM)) {\n rotateAxis(axisInstance, tickText, labelManager, config);\n } else if (rotation === 0 && isSmartTicks === false) {\n tickText.attr('transform', '');\n } else {\n tickText.attr('y', 0)\n .attr('x', 0)\n .text('');\n const tspan = makeElement(tickText, 'tspan', (d, i) => _smartTicks[i].lines, 'smart-text');\n tspan.attr('dy', '0')\n .style('opacity', '0')\n .transition()\n .duration(1000)\n .attr('dy', (d, i) => {\n if (orientation === BOTTOM || i !== 0) {\n return _smartTicks[i].oriTextHeight;\n }\n return -_smartTicks[i].oriTextHeight * (_smartTicks[i].lines.length - 1) - tickSize;\n })\n .style('opacity', 1)\n .attr('x', 0)\n .text(e => e);\n }\n\n return tickText;\n};\n\nconst setFixedBaseline = (axisInstance) => {\n const {\n fixedBaseline\n } = axisInstance.config();\n if (fixedBaseline) {\n axisInstance.setFixedBaseline();\n }\n};\n\n/**\n *\n *\n * @param {*} textNode\n * @param {*} orientation\n * @param {*} measures\n */\nconst setAxisNamePos = (textNode, orientation, measures) => {\n const {\n axisNameHeight,\n yOffset,\n labelOffset,\n availableSpace\n } = measures;\n switch (orientation) {\n case AxisOrientation.LEFT:\n textNode.attr('transform',\n `translate(${-(availableSpace.width - axisNameHeight)},${yOffset + labelOffset})rotate(-90)`);\n break;\n case AxisOrientation.RIGHT:\n textNode.attr('transform',\n `translate(${(availableSpace.width - axisNameHeight)},${yOffset + labelOffset})rotate(90)`);\n break;\n case AxisOrientation.TOP:\n textNode.attr('transform',\n `translate(${availableSpace.width / 2},${-availableSpace.height + axisNameHeight})`);\n break;\n case AxisOrientation.BOTTOM:\n textNode.attr('transform',\n `translate(${availableSpace.width / 2},${availableSpace.height - axisNameHeight / 2})`);\n break;\n default:\n }\n return textNode;\n};\n\n/**\n * This method is used to render the axis inside an\n * svg container.\n *\n * @export\n * @param {Object} axisInstance the nput object required to render axis\n * @param {string} axisInstance.orientation the orientation of axis\n * @param {Object} axisInstance.scale instance of d3 scale\n * @param {SVGElement} axisInstance.container the container in which to render\n */\nexport function renderAxis (axisInstance) {\n const config = axisInstance.config();\n const labelManager = axisInstance.dependencies().labelManager;\n const mount = axisInstance.mount();\n const range = axisInstance.range();\n const axis = axisInstance.axis();\n const scale = axisInstance.scale();\n const {\n _axisNameStyle,\n _tickLabelStyle,\n formatter,\n tickValues\n } = axisInstance;\n const {\n orientation,\n name,\n labels,\n xOffset,\n yOffset,\n axisNamePadding,\n className,\n showAxisName,\n show,\n id,\n interpolator,\n classPrefix\n } = config;\n\n if (!show) {\n return;\n }\n\n const tickSize = axisInstance.getTickSize();\n\n const selectContainer = makeElement(selectElement(mount), 'g', [axisInstance], `${className}`, {},\n key => key.config().id);\n\n // Set style for tick labels\n labelManager.setStyle(_tickLabelStyle);\n\n // @to-do: Need to write a configuration override using decorator pattern\n if (interpolator === 'linear') {\n // Set ticks for the axis\n axisInstance.setTickValues();\n }\n\n const labelFunc = scale.ticks || scale.quantile || scale.domain;\n\n formatter && axis.tickFormat(formatter(tickValues || axis.tickValues() || labelFunc()));\n\n // Get range(length of range)\n const availableSpace = Math.abs(range[0] - range[1]);\n\n // Get width and height taken by axis labels\n const labelProps = axisInstance.axisDimensions().tickLabelDim;\n\n // Draw axis ticks\n selectContainer.attr('transform', `translate(${xOffset},${yOffset})`);\n setFixedBaseline(axisInstance);\n if (labels.smartTicks === false) {\n selectContainer.transition()\n .duration(1000).call(axis);\n } else {\n selectContainer.call(axis);\n }\n selectContainer.selectAll('.tick').classed(`${classPrefix}-ticks`, true);\n selectContainer.selectAll('.tick line').classed(`${classPrefix}-tick-lines`, true);\n\n // Set classes for ticks\n const tickText = selectContainer.selectAll('.tick text');\n tickText.classed(`${classPrefix}-ticks`, true)\n .classed(`${classPrefix}-ticks-${id}`, true);\n changeTickOrientation(selectContainer, axisInstance, tickSize);\n\n // Create axis name\n const textNode = makeElement(selectContainer, 'text', [name], `${classPrefix}-axis-name`)\n .attr('text-anchor', 'middle')\n .classed(`${classPrefix}-axis-name-${id}`, true)\n .text(d => d);\n\n // Hide axis name if show is off\n textNode.classed(HIDDEN, !showAxisName);\n\n // render labels based on orientation of axis\n const labelOffset = availableSpace / 2;\n\n // Set style for axis name\n labelManager.setStyle(_axisNameStyle);\n const axisNameSpace = labelManager.getOriSize(name);\n const measures = {\n labelProps,\n tickSize,\n axisNamePadding,\n axisNameHeight: axisNameSpace.height,\n axisNameWidth: axisNameSpace.width,\n yOffset,\n xOffset,\n labelOffset,\n availableSpace: axisInstance.availableSpace()\n };\n // Set position for axis name\n setAxisNamePos(textNode, orientation, measures);\n}\n","import { TOP, LEFT, BOTTOM } from '../enums/axis-orientation';\nimport { LOG } from '../enums/scale-type';\n\nexport const getNumberOfTicks = (availableSpace, labelDim, axis, axisInstance) => {\n const ticks = axis.scale().ticks();\n const { numberOfTicks } = axisInstance.config();\n const tickLength = ticks.length;\n let numberOfValues = tickLength;\n\n if (tickLength * (labelDim * 1.5) > availableSpace) {\n numberOfValues = Math.floor(availableSpace / (labelDim * 1.5));\n }\n\n numberOfValues = Math.min(numberOfTicks, Math.max(1, numberOfValues));\n return axis.scale().ticks(numberOfValues);\n};\n\nexport const sanitizeDomain = (domain, context) => {\n const interpolator = context.config().interpolator;\n // @todo: Get from scale decorator\n if (interpolator === LOG && domain[0] >= 0) {\n return [Math.max(1, domain[0]), Math.max(1, domain[1])];\n }\n return domain;\n};\n\nexport const getTickFormatter = (tickFormat, numberFormat) => {\n if (tickFormat) {\n return ticks => (val, i) => tickFormat(numberFormat(val), i, ticks);\n }\n return () => val => numberFormat(val);\n};\n\n/**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\nexport const getTickLabelInfo = (context) => {\n let largestLabel = '';\n let labelProps;\n let smartTick = {};\n let axisTickLabels;\n const scale = context.scale();\n const allLabelLengths = [];\n const { tickFormat, tickValues, numberFormat } = context.config();\n const labelFunc = scale.ticks || scale.quantile || scale.domain;\n // set the style on the shared label manager instance\n const { labelManager } = context.dependencies();\n\n labelManager.setStyle(context._tickLabelStyle);\n // get the values along the domain\n\n axisTickLabels = tickValues || labelFunc();\n // Get the tick labels\n axisTickLabels = axisTickLabels.map((originalLabel, i) => {\n const formattedLabel = numberFormat(originalLabel);\n\n // get formats of tick if any\n const label = tickFormat ? tickFormat(formattedLabel, i, axisTickLabels) : (scale.tickFormat ?\n numberFormat(scale.tickFormat()(originalLabel)) : formattedLabel);\n\n // convert to string for quant values\n const temp = label.toString();\n // Get spaces for all labels\n allLabelLengths.push(labelManager.getOriSize(temp));\n // Getting largest label\n if (temp.length > largestLabel.length) {\n largestLabel = temp;\n smartTick = context.smartTicks() ? context.smartTicks()[i] : {};\n labelProps = allLabelLengths[i];\n }\n return label;\n });\n\n labelProps = labelManager.getOriSize(largestLabel);\n\n return { largestLabel, largestLabelDim: labelProps, axisTickLabels, allLabelLengths, smartTick };\n};\n\n/**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\nexport const computeAxisDimensions = (context) => {\n let tickLabelDim = {};\n const {\n name,\n labels,\n tickValues\n } = context.config();\n const angle = ((labels.smartTicks) ? 0 : labels.rotation) * Math.PI / 180;\n const { labelManager } = context.dependencies();\n const {\n largestLabelDim,\n axisTickLabels,\n smartTick\n } = getTickLabelInfo(context);\n const { height: labelHeight, width: labelWidth } = largestLabelDim;\n // get the domain of axis\n const domain = context.domain();\n\n if (domain.length === 0) {\n return null;\n }\n if (context._rotationLock === false) {\n context.setRotationConfig(tickValues || axisTickLabels, largestLabelDim.width);\n context._rotationLock = false;\n }\n if (labels.smartTicks) {\n tickLabelDim = smartTick;\n } else {\n tickLabelDim = {\n width: Math.abs(labelHeight * Math.sin(angle)) + Math.abs(labelWidth * Math.cos(angle)),\n height: Math.abs(labelWidth * Math.sin(angle)) + Math.abs(labelHeight * Math.cos(angle))\n };\n }\n\n labelManager.setStyle(context._axisNameStyle);\n return {\n tickSize: context.getTickSize(),\n tickLabelDim,\n axisLabelDim: labelManager.getOriSize(name),\n largestLabelDim,\n axisTickLabels\n };\n};\n\n/**\n*\n*\n* @memberof SimpleAxis\n*/\nexport const setOffset = (context) => {\n let x = 0;\n let y = 0;\n const logicalSpace = context.logicalSpace();\n const config = context.config();\n const {\n orientation,\n xOffset,\n yOffset\n } = config;\n if (orientation === LEFT) {\n x = xOffset === undefined ? logicalSpace.width : xOffset;\n }\n if (orientation === TOP) {\n y = yOffset === undefined ? logicalSpace.height : yOffset;\n }\n context.config({ xOffset: x, yOffset: y });\n};\n\n/**\n *\n *\n * @param {*} timeDiff\n * @param {*} range\n * @param {*} domain\n * @returns\n */\nconst getAxisOffset = (timeDiff, range, domain) => {\n const pvr = Math.abs(range[1] - range[0]) / (domain[1] - domain[0]);\n const width = (pvr * timeDiff);\n const avWidth = (range[1] - range[0]);\n const bars = avWidth / width;\n const barWidth = avWidth / (bars + 1);\n const diff = avWidth - barWidth * bars;\n\n return diff / 2;\n};\n\nexport const adjustRange = (minDiff, range, domain, orientation) => {\n const diff = getAxisOffset(minDiff, range, domain);\n\n if (orientation === TOP || orientation === BOTTOM) {\n range[0] += diff;\n range[1] -= diff;\n } else {\n range[0] -= diff;\n range[1] += diff;\n }\n return range;\n};\n\n /**\n * Listener attached to the axis on change of parameters.\n *\n * @param {Function} callback to be excuted on change of domain range etc\n * @memberof SimpleAxis\n */\nexport const registerChangeListeners = (context) => {\n const store = context.store();\n\n store.model.next(['domain', 'range', 'mount', 'config'], (...params) => {\n context.render();\n context._domainLock = false;\n context._eventList.forEach((e) => {\n e.action instanceof Function && e.action(...params);\n });\n }, true);\n return context;\n};\n\n/**\n *\n *\n * @param {*} axisDimensions\n * @param {*} config\n * @param {*} range\n * @returns\n */\nexport const getHorizontalAxisSpace = (context, axisDimensions, config, range) => {\n let width;\n let height;\n const {\n tickSize,\n tickLabelDim,\n axisLabelDim\n } = axisDimensions;\n const {\n axisNamePadding,\n showAxisName,\n tickValues\n } = config;\n const domain = context.domain();\n const { height: axisDimHeight } = axisLabelDim;\n const { height: tickDimHeight, width: tickDimWidth } = tickLabelDim;\n\n width = range && range.length ? range[1] - range[0] : 0;\n\n height = 0;\n if (tickValues) {\n const minTickDiff = context.getMinTickDifference();\n const [min, max] = [Math.min(...tickValues, ...domain), Math.max(...tickValues, ...domain)];\n\n width = ((max - min) / Math.abs(minTickDiff)) * (tickDimWidth + context._minTickDistance.width);\n }\n if (!width || width === 0) {\n height = Math.max(tickDimWidth, tickDimHeight);\n } else {\n height = tickDimHeight;\n }\n height += (showAxisName ? (axisDimHeight + axisNamePadding) : 0) + tickSize;\n return {\n width,\n height\n };\n};\n\n/**\n *\n *\n * @param {*} axisDimensions\n * @param {*} config\n * @param {*} range\n * @returns\n */\nexport const getVerticalAxisSpace = (context, axisDimensions, config) => {\n let height;\n let width;\n const {\n tickSize,\n tickLabelDim,\n axisLabelDim\n } = axisDimensions;\n const {\n axisNamePadding,\n showAxisName,\n tickValues\n } = config;\n const domain = context.domain();\n const { height: axisDimHeight } = axisLabelDim;\n const { height: tickDimHeight, width: tickDimWidth } = tickLabelDim;\n\n height = 0;\n width = tickDimWidth;\n if (tickValues) {\n const minTickDiff = context.getMinTickDifference();\n const [min, max] = [Math.min(...tickValues, ...domain), Math.max(...tickValues, ...domain)];\n\n height = ((max - min) / Math.abs(minTickDiff)) * (tickDimHeight);\n }\n width += (showAxisName ? axisDimHeight : 0) + tickSize + axisNamePadding;\n\n return {\n height,\n width\n };\n};\n\n /**\n * Calculates the logical space of the axis\n * @return {Object} Width and height occupied by the axis.\n */\nexport const calculateBandSpace = (context) => {\n const range = context.range();\n const config = context.config();\n const {\n orientation,\n show\n } = config;\n const axisDimensions = context.getAxisDimensions();\n const {\n largestLabelDim,\n axisTickLabels\n } = axisDimensions;\n const { height: largestDimHeight, width: largestDimWidth } = largestLabelDim;\n\n if (orientation === TOP || orientation === BOTTOM) {\n let { width, height } = getHorizontalAxisSpace(context, axisDimensions, config, range);\n if (!width || width === 0) {\n width = axisTickLabels.length * (Math.min(largestDimWidth + context._minTickDistance.width,\n largestDimHeight + context._minTickDistance.width));\n }\n if (show === false) {\n height = 0;\n }\n return {\n width,\n height\n };\n }\n\n let { width, height } = getVerticalAxisSpace(context, axisDimensions, config, range);\n\n if (!height || height === 0) {\n height = axisTickLabels.length * (largestDimHeight + largestDimHeight / 2) + largestDimHeight;\n }\n if (show === false) {\n width = 0;\n }\n return {\n width,\n height\n };\n};\n\n/**\n * Calculates the logical space of the axis\n * @return {Object} Width and height occupied by the axis.\n */\nexport const calculateContinousSpace = (context) => {\n const range = context.range();\n const config = context.config();\n const axisDimensions = context.getAxisDimensions();\n\n const {\n orientation,\n show,\n showAxisName\n } = config;\n const {\n axisLabelDim\n } = axisDimensions;\n\n if (show === false) {\n return {\n width: 0,\n height: 0\n };\n }\n\n const { width: axisDimWidth } = axisLabelDim;\n\n if (orientation === TOP || orientation === BOTTOM) {\n const { width, height } = getHorizontalAxisSpace(context, axisDimensions, config);\n const axisWidth = Math.max(width, axisDimWidth);\n\n return {\n width: axisWidth,\n height\n };\n }\n\n const { width, height } = getVerticalAxisSpace(context, axisDimensions, config, range);\n\n const effHeight = Math.max(height, showAxisName ? axisDimWidth : 0);\n\n return {\n width,\n height: effHeight\n };\n};\n\n","import { mergeRecursive } from 'muze-utils';\n\nexport const PROPS = {\n availableSpace: {},\n axisDimensions: {},\n config: {\n sanitization: (context, value) => {\n if (value.labels && value.labels.rotation) {\n context._rotationLock = true;\n }\n value = mergeRecursive(context._config || {}, value);\n value.axisNamePadding = Math.max(value.axisNamePadding, 0);\n context.axis(context.createAxis(value));\n context.store().commit('config', value);\n return value;\n }\n },\n logicalSpace: {},\n mount: {\n sanitization: (context, value) => {\n context.store().commit('mount', value);\n return value;\n }\n },\n range: {\n sanitization: (context, value) => {\n context.scale().range(value);\n context.logicalSpace(null);\n context.store().commit('range', value);\n return value;\n }\n },\n\n smartTicks: {},\n store: {},\n tickSize: {}\n};\n","import {\n Store,\n mergeRecursive,\n getSmartComputedStyle,\n selectElement,\n generateGetterSetters,\n getUniqueId\n} from 'muze-utils';\nimport { createScale } from '../scale-creator';\nimport { axisOrientationMap, BOTTOM, TOP } from '../enums/axis-orientation';\nimport { defaultConfig } from './default-config';\nimport { renderAxis } from '../axis-renderer';\nimport { DOMAIN, BAND } from '../enums/constants';\nimport {\n computeAxisDimensions,\n setOffset,\n registerChangeListeners,\n calculateContinousSpace\n} from './helper';\nimport { PROPS } from './props';\n\nexport default class SimpleAxis {\n\n /**\n * Creates an instance of SimpleAxis.\n * @memberof SimpleAxis\n */\n constructor (config, dependencies) {\n this._id = getUniqueId();\n\n this._dependencies = dependencies;\n this._mount = null;\n this._range = [];\n this._domain = [];\n this._domainLock = false;\n this._rotationLock = false;\n this._axisDimensions = {};\n this._eventList = [];\n\n const defCon = mergeRecursive({}, this.constructor.defaultConfig());\n const simpleConfig = mergeRecursive(defCon, config);\n\n const bodyElem = selectElement('body');\n const classPrefix = simpleConfig.classPrefix;\n this._tickLabelStyle = getSmartComputedStyle(bodyElem, `${classPrefix}-ticks`);\n this._axisNameStyle = getSmartComputedStyle(bodyElem, `${classPrefix}-axis-name`);\n dependencies.labelManager.setStyle(this._tickLabelStyle);\n this._minTickDistance = dependencies.labelManager.getOriSize('ww');\n\n generateGetterSetters(this, PROPS);\n this.store(new Store({\n domain: this.domain(),\n range: this.range(),\n config: simpleConfig,\n mount: this.mount()\n }));\n this.config(simpleConfig);\n\n this._scale = this.createScale(this._config);\n this._axis = this.createAxis(this._config);\n\n registerChangeListeners(this);\n }\n\n /**\n * Returns the default configuration of simple axis\n * @return {Object} default configurations\n */\n static defaultConfig () {\n return defaultConfig;\n }\n\n /**\n * Sets a fixed baseline for the first ticks so that they can render effectively within\n * the given area\n *\n * @param {*} tickText\n * @param {*} config\n * @param {*} labelManager\n */\n setFixedBaseline () {\n return this;\n }\n\n /**\n *\n *\n * @readonly\n * @memberof SimpleAxis\n */\n scale (...params) {\n if (params.length) {\n this._scale = params[0];\n return this;\n }\n return this._scale;\n }\n\n /**\n *\n *\n * @readonly\n * @memberof SimpleAxis\n */\n axis (...params) {\n if (params.length) {\n this._axis = params[0];\n return this;\n }\n return this._axis;\n }\n\n /**\n *\n *\n * @param {*} d\n * @returns\n * @memberof SimpleAxis\n */\n domain (...domain) {\n if (domain.length) {\n this.scale().domain(domain[0]);\n this._domain = this.scale().domain();\n this.smartTicks(this.setTickConfig());\n this.store().commit(DOMAIN, this._domain);\n this.logicalSpace(null);\n return this;\n }\n return this._domain;\n }\n\n /**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\n dependencies () {\n return this._dependencies;\n }\n\n /**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\n createScale (config) {\n const {\n base,\n padding,\n interpolator,\n exponent\n } = config;\n const range = this.range();\n const scale = createScale({\n padding,\n interpolator,\n exponent,\n base,\n range,\n type: this.constructor.type()\n });\n\n return scale;\n }\n\n getTickFormatter (tickFormat, numberFormat) {\n if (tickFormat) {\n return ticks => (val, i) => tickFormat(numberFormat(val), i, ticks);\n }\n return () => val => numberFormat(val);\n }\n\n /**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\n createAxis (config) {\n const {\n tickFormat,\n numberFormat,\n orientation\n } = config;\n const axisClass = axisOrientationMap[orientation];\n\n if (axisClass) {\n const axis = axisClass(this.scale());\n this.formatter = this.getTickFormatter(tickFormat, numberFormat);\n\n return axis;\n }\n return null;\n }\n\n /**\n *\n *\n * @memberof SimpleAxis\n */\n setTickConfig () {\n return this;\n }\n\n /**\n *\n *\n * @param {*} axisTickLabels\n * @param {*} labelWidth\n * @returns\n * @memberof SimpleAxis\n */\n setRotationConfig (axisTickLabels, labelWidth) {\n const { orientation } = this.config();\n\n if (orientation === TOP || orientation === BOTTOM) {\n const range = this.range();\n const length = Math.abs(range[0] - range[1]);\n this.config({ labels: { rotation: 0 } });\n if (length > 0 && axisTickLabels.length * (labelWidth + this._minTickDistance.width) > length) {\n this.config({ labels: { rotation: -90 } });\n }\n }\n return this;\n }\n\n /**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\n adjustRange () {\n return this;\n }\n\n getScaleValue (domainVal) {\n if (domainVal === null || domainVal === undefined) {\n return undefined;\n }\n return this.scale()(domainVal);\n }\n\n /**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\n getTickSize () {\n return this.axis().tickSize();\n }\n\n /**\n * Gets the space occupied by the parts of an axis\n *\n * @return {Object} object with details about sizes of the axis.\n * @memberof SimpleAxis\n */\n getAxisDimensions () {\n this.axisDimensions(computeAxisDimensions(this));\n return this.axisDimensions();\n }\n\n /**\n * Gets the space occupied by the axis\n *\n * @return {Object} object with details about size of the axis.\n * @memberof SimpleAxis\n */\n getLogicalSpace () {\n if (!this.logicalSpace()) {\n this.logicalSpace(calculateContinousSpace(this));\n setOffset(this);\n this.logicalSpace();\n }\n return this.logicalSpace();\n }\n\n /**\n * Returns the value from the domain when given a value from the range.\n * @param {number} value Value from the range.\n * @return {number} Value\n */\n invert (...value) {\n const values = value.map(d => this.scale().invert(d)) || [];\n return value.length === 1 ? values[0] : values;\n }\n\n /**\n * Gets the nearest range value from the given range values.\n * @param {number} v1 Start range value\n * @param {number} v2 End range value\n * @return {Array} range values\n */\n getNearestRange (v1, v2) {\n let p1;\n let p2;\n let extent;\n const {\n type\n } = this.config();\n const scale = this.scale();\n const range = scale.range();\n const reverse = range[0] > range[1];\n\n if (type === BAND) {\n extent = scale.invertExtent(v1, v2);\n p1 = scale(reverse ? extent[extent.length - 1] : extent[0]);\n p2 = scale(reverse ? extent[0] : extent[extent.length - 1]) + scale.bandwidth();\n return [p1, p2];\n }\n return [v1, v2];\n }\n\n /**\n * This method is used to assign a domain to the axis.\n *\n * @param {Array} domain the domain of the scale\n * @memberof SimpleAxis\n */\n updateDomainBounds (domain) {\n let currentDomain = this.domain();\n if (this.config().domain) {\n currentDomain = this.config().domain;\n } else {\n if (currentDomain.length === 0) {\n currentDomain = domain;\n }\n if (domain.length) {\n currentDomain = [Math.min(currentDomain[0], domain[0]), Math.max(currentDomain[1], domain[1])];\n }\n }\n\n return this.domain(currentDomain);\n }\n\n /**\n *\n *\n * @param {*} domain\n * @returns\n * @memberof SimpleAxis\n */\n updateDomainCache (domain) {\n if (this._domainLock === false) {\n this.domain([]);\n this._domainLock = true;\n }\n const cachedDomain = [];\n domain && domain.forEach((d) => {\n d !== undefined && d !== null && cachedDomain.push(d);\n });\n return this.updateDomainBounds(cachedDomain);\n }\n\n getMinTickDifference () {\n return this.domain();\n }\n\n getFormattedTickValues (tickValues) {\n return tickValues;\n }\n\n /**\n *\n *\n * @param {*} tickValues\n * @returns\n * @memberof SimpleAxis\n */\n setTickValues () {\n const {\n tickValues\n } = this.config();\n\n if (tickValues) {\n tickValues instanceof Array && this.axis().tickValues(tickValues);\n return this;\n }\n return this;\n }\n\n /**\n * This method returns the width in pixels for one\n * unit along the axis. It is only applicable to band scale\n * and returns undefined for other scale type.\n *\n * @return {number} the width of one band along band scale axis\n * @memberof SimpleAxis\n */\n getUnitWidth () {\n return 0;\n }\n\n /**\n * This method returns an object that can be used to\n * reconstruct this instance.\n *\n * @return {Object} the serializable props of axis\n * @memberof SimpleAxis\n */\n serialize () {\n return {\n name: this.name,\n type: this.type,\n range: this.range(),\n config: this.config()\n };\n }\n\n /**\n * Returns the id of the axis.\n * @return {string} Unique identifier of the axis.\n */\n get id () {\n return this._id;\n }\n\n registerEvent (event, fn) {\n this._eventList.push({ name: event, action: fn });\n }\n\n /**\n *\n *\n * @param {*} fn\n * @memberof SimpleAxis\n */\n on (event, fn) {\n event = event || 'update';\n this.registerEvent(event, fn);\n }\n\n /**\n * This method is used to render the axis inside\n * the supplied svg container.\n *\n * @param {SVGElement} svg the svg element in which to render the path\n * @memberof SimpleAxis\n */\n /* istanbul ignore next */render () {\n if (this.mount()) {\n renderAxis(this);\n }\n return this;\n }\n\n /**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\n remove () {\n this.store().unsubscribeAll();\n selectElement(this.mount()).remove();\n return this;\n }\n\n /**\n *\n *\n * @memberof SimpleAxis\n */\n unsubscribe () {\n this.store().unsubscribeAll();\n return this;\n }\n\n /**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\n isReverse () {\n const range = this.range();\n return range[0] > range[1];\n }\n\n /**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\n getPixelToValueRatio () {\n const scale = this.scale();\n const range = scale.range();\n const domain = scale.domain();\n\n return Math.abs(range[1] - range[0]) / (domain[1] - domain[0]);\n }\n}\n\n","import { scaleMap } from '../../scale-creator';\n\nexport default class LinearInterpolator {\n\n createScale (config) {\n const {\n range\n } = config;\n const scaleFactory = scaleMap.linear;\n this._scale = scaleFactory().range(range);\n return this._scale;\n }\n\n getScaleValue (domainVal) {\n return this._scale(domainVal) + 0.5;\n }\n\n sanitizeDomain (domain) {\n return domain;\n }\n}\n","import { scaleMap } from '../../scale-creator';\n\nexport default class LogInterpolator {\n\n createScale (config) {\n const {\n range,\n base\n } = config;\n const scaleFactory = scaleMap.log;\n this._scale = scaleFactory().range(range).base(base);\n return this._scale;\n }\n\n getScaleValue (domainVal) {\n if (domainVal <= 0) {\n return 1;\n }\n\n return this._scale(domainVal) + 0.5;\n }\n\n sanitizeDomain (domain) {\n if (domain[0] <= 0) {\n return [Math.max(1, domain[0]), Math.max(1, domain[1])];\n } return domain;\n }\n}\n","import { scaleMap } from '../../scale-creator';\n\nexport default class PowInterpolator {\n\n createScale (config) {\n const {\n range,\n exponent\n } = config;\n const scaleFactory = scaleMap.pow;\n this._scale = scaleFactory().range(range).exponent(exponent);\n return this._scale;\n }\n\n getScaleValue (domainVal) {\n return this._scale(domainVal) + 0.5;\n }\n\n sanitizeDomain (domain) {\n return domain;\n }\n}\n","import { getSmallestDiff } from 'muze-utils';\nimport SimpleAxis from './simple-axis';\nimport { BOTTOM, TOP, LEFT, RIGHT } from '../enums/axis-orientation';\nimport { LINEAR, LOG, POW } from '../enums/scale-type';\nimport { LogInterpolator, PowInterpolator, LinearInterpolator } from './interpolators';\nimport { DOMAIN } from '../enums/constants';\nimport {\n getTickLabelInfo,\n getNumberOfTicks\n} from './helper';\n\nexport const interpolatorMap = {\n [LOG]: LogInterpolator,\n [POW]: PowInterpolator,\n [LINEAR]: LinearInterpolator\n};\n\nexport default class ContinousAxis extends SimpleAxis {\n constructor (config, dependencies) {\n config.tickFormat = config.tickFormat || (val => val);\n super(config, dependencies);\n }\n /**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\n createScale (config) {\n const {\n base,\n padding,\n interpolator,\n exponent\n } = config;\n const range = this.range();\n const InterpolatorCls = interpolatorMap[interpolator];\n\n this._interpolator = new InterpolatorCls();\n let scale = this._interpolator.createScale({\n padding,\n exponent,\n base,\n range\n });\n\n scale = scale.nice();\n return scale;\n }\n\n /**\n * This method is used to assign a domain to the axis.\n *\n * @param {Array} domain the domain of the scale\n * @memberof SimpleAxis\n */\n updateDomainBounds (domain) {\n let currentDomain = this.domain();\n if (this.config().domain) {\n currentDomain = this.config().domain;\n } else {\n if (currentDomain.length === 0) {\n currentDomain = domain;\n }\n if (domain.length) {\n currentDomain = [Math.min(currentDomain[0], domain[0]), Math.max(currentDomain[1], domain[1])];\n }\n }\n\n return this.domain(currentDomain);\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof ContinousAxis\n */\n static type () {\n return LINEAR;\n }\n\n getScaleValue (domainVal) {\n if (domainVal === null || domainVal === undefined) {\n return undefined;\n }\n return this._interpolator.getScaleValue(domainVal);\n }\n /**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\n getTickSize () {\n const {\n showInnerTicks,\n showOuterTicks\n } = this.config();\n const axis = this.axis();\n axis.tickSizeInner(showInnerTicks === false ? 0 : 6);\n axis.tickSizeOuter(showOuterTicks === false ? 0 : 6);\n return axis.tickSize();\n }\n\n /**\n *\n *\n * @param {*} d\n * @returns\n * @memberof SimpleAxis\n */\n domain (domain) {\n if (domain && domain.length) {\n const { nice } = this.config();\n if (domain.length && domain[0] === domain[1]) {\n domain = [0, +domain[0] * 2];\n }\n this.scale().domain(domain);\n nice && this.scale().nice();\n this._domain = this.scale().domain();\n this.store().commit(DOMAIN, this._domain);\n this.logicalSpace(null);\n return this;\n } return this._domain;\n }\n\n /**\n * This method is used to set the space availiable to render\n * the SimpleCell.\n *\n * @param {number} width The width of SimpleCell.\n * @param {number} height The height of SimpleCell.\n * @memberof AxisCell\n */\n setAvailableSpace (width = 0, height, padding, isOffset) {\n const {\n left,\n right,\n top,\n bottom\n } = padding;\n const {\n orientation,\n fixedBaseline\n } = this.config();\n const { tickLabelDim } = this.getAxisDimensions();\n this.availableSpace({ width, height });\n\n if (orientation === TOP || orientation === BOTTOM) {\n const labelSpace = tickLabelDim.width;\n this.range([(fixedBaseline ? 0 : (labelSpace / 2)) + left, width - right - labelSpace / 2]);\n const axisHeight = this.getLogicalSpace().height;\n isOffset && this.config({ yOffset: Math.max(axisHeight, height) });\n } else {\n const labelSpace = tickLabelDim.height;\n this.range([height - bottom - (fixedBaseline ? 1 : (labelSpace / 2)), labelSpace / 2 + top]);\n const axisWidth = this.getLogicalSpace().width;\n isOffset && this.config({ xOffset: Math.max(axisWidth, width) });\n }\n return this;\n }\n\n /**\n *\n *\n * @param {*} tickValues\n * @returns\n * @memberof SimpleAxis\n */\n setTickValues () {\n const {\n tickValues\n } = this.config();\n const axis = this.axis();\n\n if (tickValues) {\n tickValues instanceof Array && this.axis().tickValues(tickValues);\n return this;\n }\n axis.tickValues(this.getTickValues());\n return this;\n }\n\n /**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\n getTickValues () {\n let labelDim = 0;\n const {\n orientation,\n tickValues\n } = this.config();\n const range = this.range();\n const axis = this.axis();\n\n const availableSpace = Math.abs(range[0] - range[1]);\n\n const labelProps = getTickLabelInfo(this).largestLabelDim;\n\n if (tickValues) {\n return axis.scale().ticks(tickValues);\n }\n labelDim = labelProps[orientation === BOTTOM || orientation === TOP ? 'width' : 'height'];\n\n return getNumberOfTicks(availableSpace, labelDim, axis, this);\n }\n\n getMinTickDifference () {\n return getSmallestDiff(this.config().tickValues);\n }\n\n /**\n * Sets a fixed baseline for the first ticks so that they can render effectively within\n * the given area\n *\n * @param {*} tickText\n * @param {*} config\n * @param {*} labelManager\n */\n setFixedBaseline (tickText) {\n const {\n orientation,\n labels\n } = this.config();\n const {\n rotation\n } = labels;\n const axis = this.axis();\n const { width, height } = this._axisDimensions.largestLabelDim;\n axis.tickTransform((d, i) => {\n if (i === 0 && (orientation === LEFT || orientation === RIGHT)) {\n return `translate(0, -${(height) / 3}px)`;\n }\n if (i === 0 && (orientation === TOP || orientation === BOTTOM) && rotation === 0) {\n return `translate(${width / 2}px, ${0}px) rotate(${rotation}deg)`;\n } return '';\n });\n return tickText;\n }\n\n}\n","import SimpleAxis from './simple-axis';\nimport { BAND } from '../enums/scale-type';\nimport { TOP, BOTTOM } from '../enums/axis-orientation';\nimport { calculateBandSpace, setOffset } from './helper';\n\nexport default class BandAxis extends SimpleAxis {\n\n /**\n *\n *\n * @param {*} range\n * @returns\n * @memberof BandAxis\n */\n createScale (range) {\n const scale = super.createScale(range);\n const { padding } = this.config();\n if (typeof padding === 'number') {\n scale.padding(padding);\n }\n return scale;\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof BandAxis\n */\n static type () {\n return BAND;\n }\n\n /**\n *\n *\n * @param {*} width\n * @param {*} height\n * @param {*} padding\n * @param {*} isOffset\n * @memberof BandAxis\n */\n setAvailableSpace (width, height, padding, isOffset) {\n const {\n left,\n right,\n top,\n bottom\n } = padding;\n const {\n orientation,\n showAxisName,\n axisNamePadding\n } = this.config();\n const { axisLabelDim } = this.getAxisDimensions();\n const { height: axisDimHeight } = axisLabelDim;\n\n this.availableSpace({ width, height });\n if (orientation === TOP || orientation === BOTTOM) {\n // Set x axis range\n this.range([0, width - left - right]);\n const axisHeight = this.getLogicalSpace().height - (showAxisName === false ?\n (axisDimHeight + axisNamePadding) : 0);\n isOffset && this.config({ yOffset: Math.max(axisHeight, height) });\n } else {\n // Set y axis range\n this.range([height - bottom, top]);\n const axisWidth = this.getLogicalSpace().width - (showAxisName === false ? axisDimHeight : 0);\n isOffset && this.config({ xOffset: Math.max(axisWidth, width) });\n }\n return this;\n }\n\n /**\n *\n *\n * @returns\n * @memberof BandAxis\n */\n getUnitWidth () {\n return this.scale().bandwidth();\n }\n\n /**\n *\n *\n * @returns\n * @memberof BandAxis\n */\n setTickConfig () {\n let smartTicks = '';\n let smartlabel;\n const { maxWidth, maxHeight, tickFormat } = this.config();\n const { labelManager } = this._dependencies;\n const domain = this.axis().scale().domain();\n\n smartTicks = domain;\n const tickFormatter = tickFormat || (val => val);\n\n if (domain && domain.length) {\n smartTicks = domain.map((d, i) => {\n labelManager.useEllipsesOnOverflow(true);\n smartlabel = labelManager.getSmartText(tickFormatter(d, i, domain), maxWidth, maxHeight);\n return labelManager.constructor.textToLines(smartlabel);\n });\n }\n return smartTicks;\n }\n\n/**\n * Gets the space occupied by the axis\n *\n * @return {Object} object with details about size of the axis.\n * @memberof SimpleAxis\n */\n getLogicalSpace () {\n if (!this.logicalSpace()) {\n this.logicalSpace(calculateBandSpace(this));\n setOffset(this);\n this.logicalSpace();\n }\n return this.logicalSpace();\n }\n /**\n *\n *\n * @param {*} axisTickLabels\n * @param {*} labelWidth\n * @returns\n * @memberof BandAxis\n */\n setRotationConfig (axisTickLabels, labelWidth) {\n const { orientation } = this.config();\n const range = this.range();\n const availSpace = Math.abs(range[0] - range[1]);\n\n this.config({ labels: { rotation: 0, smartTicks: false } });\n if (orientation === TOP || orientation === BOTTOM) {\n const smartWidth = this.smartTicks().reduce((acc, n) => acc + n.width + this._minTickDistance.width, 0);\n // set multiline config\n if (availSpace > 0 && axisTickLabels.length * (labelWidth + this._minTickDistance.width) > availSpace) {\n if (availSpace && smartWidth < availSpace) {\n this.config({ labels: { smartTicks: true } });\n } else {\n this.config({ labels: { rotation: -90 } });\n }\n }\n }\n return this;\n }\n\n /**\n *\n *\n * @returns\n * @memberof BandAxis\n */\n getTickValues () {\n return this.axis().scale().domain();\n }\n\n /**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\n getTickSize () {\n const {\n showInnerTicks,\n showOuterTicks\n } = this.config();\n const axis = this.axis();\n\n axis.tickSizeInner(showInnerTicks ? 6 : 0);\n axis.tickSizeOuter(showOuterTicks ? 6 : 0);\n return axis.tickSize();\n }\n\n /**\n * This method is used to assign a domain to the axis.\n *\n * @param {Array} domain the domain of the scale\n * @memberof SimpleAxis\n */\n updateDomainBounds (domain) {\n let currentDomain = this.domain();\n if (this.config().domain) {\n currentDomain = this.config().domain;\n } else {\n if (currentDomain.length === 0) {\n currentDomain = domain;\n }\n currentDomain = currentDomain.concat(domain);\n }\n this.domain(currentDomain);\n return this;\n }\n\n /**\n * Returns the value from the domain when given a value from the range.\n * @param {number} value Value from the range.\n * @return {number} Value\n */\n invert (...value) {\n const values = value.map(d => this.scale().invert(d)) || [];\n return value.length === 1 ? values[0] && values[0].toString() : values.map(d => d.toString());\n }\n}\n","import { getSmallestDiff } from 'muze-utils';\nimport SimpleAxis from './simple-axis';\nimport { adjustRange } from './helper';\nimport { TIME } from '../enums/scale-type';\nimport { axisOrientationMap, BOTTOM, TOP } from '../enums/axis-orientation';\nimport { DOMAIN } from '../enums/constants';\n\n/**\n *\n *\n * @export\n * @class TimeAxis\n * @extends {SimpleAxis}\n */\nexport default class TimeAxis extends SimpleAxis {\n\n constructor (...params) {\n super(...params);\n this._minDiff = Infinity;\n }\n\n /**\n *\n *\n * @param {*} range\n * @returns\n * @memberof TimeAxis\n */\n createScale (range) {\n let scale = super.createScale(range);\n\n scale = scale.nice();\n return scale;\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof TimeAxis\n */\n static type () {\n return TIME;\n }\n\n /**\n *\n *\n * @returns\n * @memberof BandAxis\n */\n setTickConfig () {\n let smartTicks;\n let smartlabel;\n const { maxWidth, maxHeight, tickFormat } = this.config();\n const { labelManager } = this._dependencies;\n const domain = this.getTickValues();\n const scale = this.scale();\n\n smartTicks = domain;\n const tickFormatter = tickFormat || scale.tickFormat();\n\n if (domain && domain.length) {\n smartTicks = domain.map((d, i) => {\n smartlabel = labelManager.getSmartText(tickFormatter(d, i, domain), maxWidth, maxHeight);\n return labelManager.constructor.textToLines(smartlabel);\n });\n }\n return smartTicks;\n }\n\n /**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\n createAxis (config) {\n const {\n tickFormat,\n orientation\n } = config;\n const axisClass = axisOrientationMap[orientation];\n\n if (axisClass) {\n const axis = axisClass(this.scale());\n this.formatter = this.getTickFormatter(tickFormat);\n return axis;\n }\n return null;\n }\n\n getTickFormatter (tickFormat) {\n if (tickFormat) {\n return ticks => (val, i) => tickFormat(val, i, ticks);\n }\n return null;\n }\n\n /**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\n getTickSize () {\n const {\n showInnerTicks,\n showOuterTicks\n } = this.config();\n const axis = this.axis();\n axis.tickSizeInner(showInnerTicks === false ? 0 : 6);\n axis.tickSizeOuter(showOuterTicks === false ? 0 : 6);\n return super.getTickSize();\n }\n\n /**\n *\n *\n * @returns\n * @memberof TimeAxis\n */\n getTickValues () {\n return this.scale().ticks();\n }\n\n /**\n *\n *\n * @param {*} diff\n * @returns\n * @memberof TimeAxis\n */\n minDiff (diff) {\n this._minDiff = Math.min(this._minDiff, diff);\n return this;\n }\n\n /**\n *\n *\n * @param {*} axisTickLabels\n * @param {*} labelWidth\n * @returns\n * @memberof BandAxis\n */\n setRotationConfig (axisTickLabels, labelWidth) {\n const { orientation } = this.config();\n const range = this.range();\n const availSpace = Math.abs(range[0] - range[1]);\n\n this.config({ labels: { rotation: 0, smartTicks: false } });\n if (orientation === TOP || orientation === BOTTOM) {\n const smartWidth = this.smartTicks().reduce((acc, n) => acc + n.width, 0);\n // set multiline config\n if (availSpace > 0 && axisTickLabels.length * labelWidth > availSpace) {\n if (availSpace && smartWidth * 1.25 < availSpace) {\n this.config({ labels: { smartTicks: true } });\n }\n this.config({ labels: { rotation: -90 } });\n }\n }\n return this;\n }\n\n /**\n *\n *\n * @param {*} d\n * @returns\n * @memberof SimpleAxis\n */\n domain (domain) {\n if (domain) {\n const { nice } = this.config();\n\n if (domain.length && domain[0] === domain[1]) {\n domain = [0, +domain[0] * 2];\n }\n this.scale().domain(domain);\n nice && this.scale().nice();\n this._domain = this.scale().domain();\n this.smartTicks(this.setTickConfig());\n this.store().commit(DOMAIN, this._domain);\n this.logicalSpace(null);\n return this;\n } return this._domain;\n }\n\n getMinTickDifference () {\n return getSmallestDiff(this.config().tickValues);\n }\n\n /**\n *\n *\n * @param {*} width\n * @param {*} height\n * @param {*} padding\n * @param {*} isOffset\n * @memberof TimeAxis\n */\n setAvailableSpace (width, height, padding, isOffset) {\n const {\n left,\n right,\n top,\n bottom\n } = padding;\n const {\n orientation,\n showAxisName,\n axisNamePadding\n } = this.config();\n const domain = this.domain();\n const { axisLabelDim, tickLabelDim } = this.getAxisDimensions();\n const { height: axisDimHeight } = axisLabelDim;\n const { height: tickDimHeight, width: tickDimWidth } = tickLabelDim;\n\n this.availableSpace({ width, height });\n if (orientation === TOP || orientation === BOTTOM) {\n const labelSpace = tickDimWidth;\n this.range(adjustRange(this._minDiff, [labelSpace / 2, width - left - right - labelSpace / 2],\n domain, orientation));\n const axisHeight = this.getLogicalSpace().height - (showAxisName === false ?\n (axisDimHeight + axisNamePadding) : 0);\n isOffset && this.config({ yOffset: Math.max(axisHeight, height) });\n } else {\n const labelSpace = tickDimHeight;\n this.range(adjustRange(this._minDiff, [height - top - bottom - labelSpace / 2, labelSpace / 2],\n domain, orientation));\n const axisWidth = this.getLogicalSpace().width - (showAxisName === false ? axisDimHeight : 0);\n this.isOffset && this.config({ xOffset: Math.max(axisWidth, width) });\n }\n return this;\n }\n\n}\n","export const x11Colors = {\n Pink: { hex: 'ffc0cb', rgb: '255,192,203' },\n LightPink: { hex: 'ffb6c1', rgb: '255,182,193' },\n HotPink: { hex: 'ff69b4', rgb: '255,105,180' },\n DeepPink: { hex: 'ff1493', rgb: '255,20,147' },\n PaleVioletRed: { hex: 'db7093', rgb: '219,112,147' },\n MediumVioletRed: { hex: 'c71585', rgb: '199,21,133' },\n LightSalmon: { hex: 'ffa07a', rgb: '255,160,122' },\n Salmon: { hex: 'fa8072', rgb: '250,128,114' },\n DarkSalmon: { hex: 'e9967a', rgb: '233,150,122' },\n LightCoral: { hex: 'f08080', rgb: '240,128,128' },\n IndianRed: { hex: 'cd5c5c', rgb: '205,92,92' },\n Crimson: { hex: 'dc143c', rgb: '220,20,60' },\n FireBrick: { hex: 'b22222', rgb: '178,34,34' },\n DarkRed: { hex: '8b0000', rgb: '139,0,0' },\n Red: { hex: 'ff0000', rgb: '255,0,0' },\n OrangeRed: { hex: 'ff4500', rgb: '255,69,0' },\n Tomato: { hex: 'ff6347', rgb: '255,99,71' },\n Coral: { hex: 'ff7f50', rgb: '255,127,80' },\n DarkOrange: { hex: 'ff8c00', rgb: '255,140,0' },\n Orange: { hex: 'ffa500', rgb: '255,165,0' },\n Gold: { hex: 'ffd700', rgb: '255,215,0' },\n Yellow: { hex: 'ffff00', rgb: '255,255,0' },\n LightYellow: { hex: 'ffffe0', rgb: '255,255,224' },\n LemonChiffon: { hex: 'fffacd', rgb: '255,250,205' },\n LightGoldenrodYellow: { hex: 'fafad2', rgb: '250,250,210' },\n PapayaWhip: { hex: 'ffefd5', rgb: '255,239,213' },\n Moccasin: { hex: 'ffe4b5', rgb: '255,228,181' },\n PeachPuff: { hex: 'ffdab9', rgb: '255,218,185' },\n PaleGoldenrod: { hex: 'eee8aa', rgb: '238,232,170' },\n Khaki: { hex: 'f0e68c', rgb: '240,230,140' },\n DarkKhaki: { hex: 'bdb76b', rgb: '189,183,107' },\n Cornsilk: { hex: 'fff8dc', rgb: '255,248,220' },\n BlanchedAlmond: { hex: 'ffebcd', rgb: '255,235,205' },\n Bisque: { hex: 'ffe4c4', rgb: '255,228,196' },\n NavajoWhite: { hex: 'ffdead', rgb: '255,222,173' },\n Wheat: { hex: 'f5deb3', rgb: '245,222,179' },\n BurlyWood: { hex: 'deb887', rgb: '222,184,135' },\n Tan: { hex: 'd2b48c', rgb: '210,180,140' },\n RosyBrown: { hex: 'bc8f8f', rgb: '188,143,143' },\n SandyBrown: { hex: 'f4a460', rgb: '244,164,96' },\n Goldenrod: { hex: 'daa520', rgb: '218,165,32' },\n DarkGoldenrod: { hex: 'b8860b', rgb: '184,134,11' },\n Peru: { hex: 'cd853f', rgb: '205,133,63' },\n Chocolate: { hex: 'd2691e', rgb: '210,105,30' },\n SaddleBrown: { hex: '8b4513', rgb: '139,69,19' },\n Sienna: { hex: 'a0522d', rgb: '160,82,45' },\n Brown: { hex: 'a52a2a', rgb: '165,42,42' },\n Maroon: { hex: '800000', rgb: '128,0,0' },\n DarkOliveGreen: { hex: '556b2f', rgb: '85,107,47' },\n Olive: { hex: '808000', rgb: '128,128,0' },\n OliveDrab: { hex: '6b8e23', rgb: '107,142,35' },\n YellowGreen: { hex: '9acd32', rgb: '154,205,50' },\n LimeGreen: { hex: '32cd32', rgb: '50,205,50' },\n Lime: { hex: '00ff00', rgb: '0,255,0' },\n LawnGreen: { hex: '7cfc00', rgb: '124,252,0' },\n Chartreuse: { hex: '7fff00', rgb: '127,255,0' },\n GreenYellow: { hex: 'adff2f', rgb: '173,255,47' },\n SpringGreen: { hex: '00ff7f', rgb: '0,255,127' },\n MediumSpringGreen: { hex: '00fa9a', rgb: '0,250,154' },\n LightGreen: { hex: '90ee90', rgb: '144,238,144' },\n PaleGreen: { hex: '98fb98', rgb: '152,251,152' },\n DarkSeaGreen: { hex: '8fbc8f', rgb: '143,188,143' },\n MediumSeaGreen: { hex: '3cb371', rgb: '60,179,113' },\n SeaGreen: { hex: '2e8b57', rgb: '46,139,87' },\n ForestGreen: { hex: '228b22', rgb: '34,139,34' },\n Green: { hex: '008000', rgb: '0,128,0' },\n DarkGreen: { hex: '006400', rgb: '0,100,0' },\n MediumAquamarine: { hex: '66cdaa', rgb: '102,205,170' },\n Aqua: { hex: '00ffff', rgb: '0,255,255' },\n Cyan: { hex: '00ffff', rgb: '0,255,255' },\n LightCyan: { hex: 'e0ffff', rgb: '224,255,255' },\n PaleTurquoise: { hex: 'afeeee', rgb: '175,238,238' },\n Aquamarine: { hex: '7fffd4', rgb: '127,255,212' },\n Turquoise: { hex: '40e0d0', rgb: '64,224,208' },\n MediumTurquoise: { hex: '48d1cc', rgb: '72,209,204' },\n DarkTurquoise: { hex: '00ced1', rgb: '0,206,209' },\n LightSeaGreen: { hex: '20b2aa', rgb: '32,178,170' },\n CadetBlue: { hex: '5f9ea0', rgb: '95,158,160' },\n DarkCyan: { hex: '008b8b', rgb: '0,139,139' },\n Teal: { hex: '008080', rgb: '0,128,128' },\n LightSteelBlue: { hex: 'b0c4de', rgb: '176,196,222' },\n PowderBlue: { hex: 'b0e0e6', rgb: '176,224,230' },\n LightBlue: { hex: 'add8e6', rgb: '173,216,230' },\n SkyBlue: { hex: '87ceeb', rgb: '135,206,235' },\n LightSkyBlue: { hex: '87cefa', rgb: '135,206,250' },\n DeepSkyBlue: { hex: '00bfff', rgb: '0,191,255' },\n DodgerBlue: { hex: '1e90ff', rgb: '30,144,255' },\n CornflowerBlue: { hex: '6495ed', rgb: '100,149,237' },\n SteelBlue: { hex: '4682b4', rgb: '70,130,180' },\n RoyalBlue: { hex: '4169e1', rgb: '65,105,225' },\n Blue: { hex: '0000ff', rgb: '0,0,255' },\n MediumBlue: { hex: '0000cd', rgb: '0,0,205' },\n DarkBlue: { hex: '00008b', rgb: '0,0,139' },\n Navy: { hex: '000080', rgb: '0,0,128' },\n MidnightBlue: { hex: '191970', rgb: '25,25,112' },\n Lavender: { hex: 'e6e6fa', rgb: '230,230,250' },\n Thistle: { hex: 'd8bfd8', rgb: '216,191,216' },\n Plum: { hex: 'dda0dd', rgb: '221,160,221' },\n Violet: { hex: 'ee82ee', rgb: '238,130,238' },\n Orchid: { hex: 'da70d6', rgb: '218,112,214' },\n Fuchsia: { hex: 'ff00ff', rgb: '255,0,255' },\n Magenta: { hex: 'ff00ff', rgb: '255,0,255' },\n MediumOrchid: { hex: 'ba55d3', rgb: '186,85,211' },\n MediumPurple: { hex: '9370db', rgb: '147,112,219' },\n BlueViolet: { hex: '8a2be2', rgb: '138,43,226' },\n DarkViolet: { hex: '9400d3', rgb: '148,0,211' },\n DarkOrchid: { hex: '9932cc', rgb: '153,50,204' },\n DarkMagenta: { hex: '8b008b', rgb: '139,0,139' },\n Purple: { hex: '800080', rgb: '128,0,128' },\n Indigo: { hex: '4b0082', rgb: '75,0,130' },\n DarkSlateBlue: { hex: '483d8b', rgb: '72,61,139' },\n SlateBlue: { hex: '6a5acd', rgb: '106,90,205' },\n MediumSlateBlue: { hex: '7b68ee', rgb: '123,104,238' },\n White: { hex: 'ffffff', rgb: '255,255,255' },\n Snow: { hex: 'fffafa', rgb: '255,250,250' },\n Honeydew: { hex: 'f0fff0', rgb: '240,255,240' },\n MintCream: { hex: 'f5fffa', rgb: '245,255,250' },\n Azure: { hex: 'f0ffff', rgb: '240,255,255' },\n AliceBlue: { hex: 'f0f8ff', rgb: '240,248,255' },\n GhostWhite: { hex: 'f8f8ff', rgb: '248,248,255' },\n WhiteSmoke: { hex: 'f5f5f5', rgb: '245,245,245' },\n Seashell: { hex: 'fff5ee', rgb: '255,245,238' },\n Beige: { hex: 'f5f5dc', rgb: '245,245,220' },\n OldLace: { hex: 'fdf5e6', rgb: '253,245,230' },\n FloralWhite: { hex: 'fffaf0', rgb: '255,250,240' },\n Ivory: { hex: 'fffff0', rgb: '255,255,240' },\n AntiqueWhite: { hex: 'faebd7', rgb: '250,235,215' },\n Linen: { hex: 'faf0e6', rgb: '250,240,230' },\n LavenderBlush: { hex: 'fff0f5', rgb: '255,240,245' },\n MistyRose: { hex: 'ffe4e1', rgb: '255,228,225' },\n Gainsboro: { hex: 'dcdcdc', rgb: '220,220,220' },\n LightGray: { hex: 'd3d3d3', rgb: '211,211,211' },\n Silver: { hex: 'c0c0c0', rgb: '192,192,192' },\n DarkGrey: { hex: 'a9a9a9', rgb: '169,169,169' },\n Grey: { hex: '808080', rgb: '128,128,128' },\n DimGrey: { hex: '696969', rgb: '105,105,105' },\n LightSlateGrey: { hex: '778899', rgb: '119,136,153' },\n SlateGrey: { hex: '708090', rgb: '112,128,144' },\n DarkSlateGrey: { hex: '2f4f4f', rgb: '47,79,79' },\n Black: { hex: '000000', rgb: '0,0,0' }\n};\n","import {\n LINEAR\n} from '../enums/constants';\n/**\n * Set of default colors\n */\nexport const palette = [\n '#086bb6',\n '#f37d45',\n '#f5ce02',\n '#67bda0',\n '#c54e4e',\n '#ae70af'\n];\n\nexport const DEFAULT_GRADIENT_COLOR = '#eaeaea';\n\nexport const DEFAULT_CONFIG = {\n range: palette,\n value: palette[0],\n step: false,\n stops: 5,\n type: LINEAR\n};\n","import { mergeRecursive, detectColor, hexToHsv, rgbToHsv } from 'muze-utils';\nimport { x11Colors } from './color-maps';\nimport { palette, DEFAULT_GRADIENT_COLOR } from './defaults';\nimport { LINEAR, RGB, HEX, HSL, HSLA } from '../enums/constants';\n\nexport const getHslString = hslArr => `hsla(${hslArr[0] * 360},${hslArr[1] * 100}%,${hslArr[2] * 100}%,\\\n${hslArr[3] || 1})`;\n\nexport const convertToXllString = baseString => (baseString.split(' ') || [])\n .reduce((x, e) => `${x}${e.charAt(0).toUpperCase()}${e.slice(1)}`, '');\n\nexport const getActualHslColor = (e, paletteColor) => {\n let color = '';\n if (typeof e === 'string') {\n e = e.replace(/ /g, '');\n e = e.toLowerCase();\n if (detectColor(e) === HSL || detectColor(e) === HSLA) {\n color = e.match(/(\\d+(\\.\\d+)?)/g);\n color = [color[0] / 360, color[1] / 100, color[2] / 100, color[3] || 1];\n } else if (detectColor(e) === HEX) {\n color = hexToHsv(e);\n } else if (detectColor(e) === RGB) {\n const col = e.substring(e.indexOf('(') + 1, e.lastIndexOf(')')).split(/,\\s*/);\n color = rgbToHsv(...col);\n } else if (x11Colors[convertToXllString(e)]) {\n color = rgbToHsv(...x11Colors[convertToXllString(e)].rgb.split(','));\n }\n } else if (!(e instanceof Array)) {\n color = rgbToHsv(paletteColor);\n } else {\n color = e;\n }\n return color;\n};\n\nexport const PROPS = {\n config: {\n sanitization: (context, config) => {\n const defCon = mergeRecursive({}, context.constructor.defaultConfig());\n if (config.type === LINEAR) {\n config.range = config.range || [defCon.range[0]];\n config.range = config.range.length > 1 ? config.range : [DEFAULT_GRADIENT_COLOR, ...config.range];\n }\n const oldConfig = mergeRecursive(defCon, context.config());\n const newConfig = mergeRecursive(oldConfig, config);\n\n if (newConfig.range instanceof Array) {\n newConfig.range = newConfig.range.map((e, i) => getActualHslColor(e, palette[i]));\n newConfig.stops = config.stops || newConfig.range.length;\n }\n newConfig.value = getActualHslColor(newConfig.value, newConfig.value);\n return newConfig;\n }\n },\n domain: {},\n scale: {},\n uniqueValues: {}\n};\n","import { numberInterpolator, piecewiseInterpolator, hslInterpolator } from 'muze-utils';\nimport { CONTINOUS, DISCRETE } from '../enums/constants';\nimport { LINEAR, SEQUENTIAL, ORDINAL, QUANTILE } from '../enums/scale-type';\nimport { getHslString } from './props';\n\nconst getStops = (domain, stops) => {\n let newStops = [];\n\n if (stops instanceof Array) {\n newStops = stops.slice().sort();\n newStops = [...new Set([domain[0], ...stops, domain[1]])].sort();\n } else {\n const interpolator = numberInterpolator()(...domain);\n for (let i = 0; i <= stops; i++) {\n newStops[i] = interpolator(i / stops);\n }\n }\n\n if (newStops[0] < domain[0]) {\n newStops.shift();\n }\n return { domain, newStops };\n};\n\nconst rangeStops = (newStopsLength, range) => {\n let newRange = [];\n const maxRangeLength = Math.min(range.length, 18);\n\n if (newStopsLength > maxRangeLength) {\n const interpolator = piecewiseInterpolator()(hslInterpolator(), range.map(e => getHslString(e)));\n for (let i = 0; i < newStopsLength; i++) {\n newRange[i] = interpolator(i / (newStopsLength - 1));\n }\n } else {\n newRange = range.slice(0, newStopsLength);\n }\n return { newRange };\n};\n\n/**\n*\n*\n* @param {*} domain\n* @returns\n*/\nconst indexedDomain = (domain) => {\n const uniqueVals = domain;\n const retDomain = domain.map((d, i) => (i) / (domain.length - 1));\n return { domain: retDomain, uniqueVals, scaleDomain: [0, 1] };\n};\n\n/**\n *\n *\n * @param {*} domain\n * @returns\n */\nconst indexedDomainMeasure = (domain, stops, range) => {\n const uniqueVals = domain;\n return { domain, uniqueVals, scaleDomain: [0, 1], range };\n};\n\n/**\n *\n *\n * @param {*} domain\n * @returns\n */\nconst normalDomain = (domain, stops, range) => {\n const uniqueVals = domain;\n return { uniqueVals, domain, nice: true, range };\n};\n\n/**\n *\n *\n * @param {*} domain\n * @param {*} stops\n * @returns\n */\nconst steppedDomain = (domain, stops, range) => {\n const { domain: uniqueVals, newStops } = getStops(domain, stops);\n const { newRange } = rangeStops(newStops.length - 1, range);\n\n return { uniqueVals, domain: newStops, nice: true, range: newRange };\n};\n\nconst continousSteppedDomain = (domain, stops, range) => {\n const { domain: uniqueVals, newStops } = getStops(domain, range.length - 1);\n const hslRange = range.map(e => getHslString(e));\n return { uniqueVals, domain: newStops, nice: true, range: hslRange };\n};\n\n/**\n *\n *\n * @param {*} domainValue\n * @param {*} scale\n * @param {*} domain\n * @param {*} uniqueVals\n * @returns\n */\nconst uniqueRange = (domainValue, scale, domain, uniqueVals) => {\n const index = uniqueVals.indexOf(domainValue);\n const numVal = domain[index];\n return scale(numVal);\n};\n\n/**\n *\n *\n * @param {*} domainValue\n * @param {*} scale\n * @param {*} domain\n * @returns\n */\nconst indexedRange = (domainValue, scale, domain) => {\n const numVal = (domainValue - domain[0]) / (domain[domain.length - 1] - domain[0]);\n\n return scale(numVal);\n};\n\n/**\n *\n *\n * @param {*} domainValue\n * @param {*} scale\n */\nconst normalRange = (domainValue, scale) => scale(domainValue);\n\n/**\n *\n *\n * @param {*} stops\n */\nconst strategies = () => ({\n [`${CONTINOUS}-${CONTINOUS}-${SEQUENTIAL}`]: {\n scale: SEQUENTIAL,\n domainRange: () => indexedDomainMeasure,\n value: () => indexedRange\n },\n [`${CONTINOUS}-${DISCRETE}-${SEQUENTIAL}`]: {\n scale: SEQUENTIAL,\n domainRange: () => indexedDomainMeasure,\n value: () => indexedRange\n },\n [`${DISCRETE}-${DISCRETE}-${SEQUENTIAL}`]: {\n scale: SEQUENTIAL,\n domainRange: () => indexedDomain,\n value: () => uniqueRange\n },\n [`${DISCRETE}-${DISCRETE}-${ORDINAL}`]: {\n scale: ORDINAL,\n domainRange: () => normalDomain,\n value: () => normalRange\n },\n [`${CONTINOUS}-${CONTINOUS}-${ORDINAL}`]: {\n scale: LINEAR,\n domainRange: () => continousSteppedDomain,\n value: () => normalRange\n },\n [`${CONTINOUS}-${DISCRETE}-${ORDINAL}`]: {\n scale: QUANTILE,\n domainRange: () => steppedDomain,\n value: () => normalRange\n\n }\n});\n\n/**\n *\n *\n * @param {*} domainType\n * @param {*} rangeType\n * @param {*} schemeType\n * @param {*} stops\n */\nexport const strategyGetter = (domainType, rangeType, schemeType, stops) =>\n strategies(stops)[`${domainType}-${rangeType}-${schemeType || ''}`];\n","/**\n * @module Axis\n * This file declares a class that is used to render an axis to add meaning to\n * plots.\n */\nimport { getUniqueId, generateGetterSetters, rgbToHsv } from 'muze-utils';\nimport { createScale, getScheme, getSchemeType } from '../scale-creator';\nimport { CONTINOUS, DISCRETE, COLOR } from '../enums/constants';\nimport { strategyGetter } from './color-strategy';\nimport { DEFAULT_CONFIG } from './defaults';\nimport { PROPS, getHslString } from './props';\n\n/**\n* This class is used to instantiate a SimpleAxis.\n* @class SimpleAxis\n*/\nexport default class ColorAxis {\n\n /**\n * Creates an instance of SimpleAxis.\n * @param {Object} config input parameters.\n * @param {Object | undefined} params.range Type of color range.\n * @param {string} params.name the label to show on axis.\n * @param {string} params.type The type of scale to handle.\n * @memberof ColorAxis\n */\n constructor (config) {\n generateGetterSetters(this, PROPS);\n this.config(config);\n\n this._domainType = this._config.type === 'linear' ? CONTINOUS : DISCRETE;\n this._rangeType = (this._config.type === 'linear' && !this._config.step) ? CONTINOUS : DISCRETE;\n\n this._schemeType = getSchemeType(this._config.range);\n\n this._colorStrategy = this.setColorStrategy(this._domainType, this._rangeType, this._schemeType);\n this._scale = this.createScale(this._colorStrategy);\n\n this._id = getUniqueId();\n\n this.updateDomain(config.domain);\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof ColorAxis\n */\n static defaultConfig () {\n return DEFAULT_CONFIG;\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof ColorAxis\n */\n static type () {\n return COLOR;\n }\n\n /**\n *\n *\n * @param {*} colorStrategy\n * @returns\n * @memberof ColorAxis\n */\n createScale (colorStrategy) {\n const { range } = this.config();\n if (range && typeof (range) === 'string') {\n return getScheme(range);\n }\n return createScale({\n type: colorStrategy.scale,\n range\n });\n }\n\n /**\n *\n *\n * @param {*} domainType\n * @param {*} rangeType\n * @param {*} schemeType\n * @returns\n * @memberof ColorAxis\n */\n setColorStrategy (domainType, rangeType, schemeType) {\n const { stops } = this.config();\n\n return strategyGetter(domainType, rangeType, schemeType, stops);\n }\n\n /**\n *\n *\n * @param {*} domainVal\n * @returns\n * @memberof ColorAxis\n */\n getHslString (hslColorArray) {\n return getHslString(hslColorArray);\n }\n /**\n *\n *\n * @param {*} domainVal\n * @returns\n * @memberof ColorAxis\n */\n getColor (domainVal) {\n return this.getHslString(this.getRawColor(domainVal));\n }\n /**\n *\n *\n * @param {*} domainVal\n * @returns\n * @memberof ColorAxis\n */\n getRawColor (domainVal) {\n if (this.domain() && domainVal !== undefined) {\n const scale = this.scale();\n const range = scale.range ? scale.range() : null;\n const color = this._colorStrategy.value(range)(domainVal, scale, this.domain(), this.uniqueValues());\n\n if (typeof color === 'string') {\n const col = color.substring(color.indexOf('(') + 1, color.lastIndexOf(')')).split(/,\\s*/);\n return rgbToHsv(...col);\n }\n return [...color];\n }\n return [...this.config().value];\n }\n\n /**\n *\n *\n * @param {*} [domain=[]]\n * @returns\n * @memberof ColorAxis\n */\n updateDomain (domain = []) {\n if (domain.length) {\n const scale = this.scale();\n const range = scale.range ? scale.range() : null;\n const domainRangeFn = this._colorStrategy.domainRange();\n const scaleInfo = domainRangeFn(domain, this.config().stops, range);\n\n this.domain(scaleInfo.domain);\n scaleInfo.range && this.scale().range(scaleInfo.range);\n this.uniqueValues(scaleInfo.uniqueVals);\n this.scale().domain(scaleInfo.scaleDomain || this.domain());\n }\n return this;\n }\n\n /**\n * This method returns an object that can be used to\n * reconstruct this instance.\n *\n * @return {Object} the serializable props of axis\n * @memberof ShapeAxis\n */\n serialize () {\n return {\n type: this.constructor.type(),\n scale: this.scale(),\n domain: this.domain(),\n config: this.config()\n };\n }\n\n transformColor (color, transformationArr) {\n const h = color[0] * 360;\n const s = color[1] * 100;\n const l = color[2] * 100;\n const a = color[3] || 1;\n const newH = h + transformationArr[0];\n const newS = s + transformationArr[1];\n const newL = l + transformationArr[2];\n const newA = a + transformationArr[3] || 0;\n\n return { color: `hsla(${newH},${newS}%,${newL}%,${newA})`, hsla: [newH / 360, newS / 100, newL / 100, newA] };\n }\n\n /**\n * Returns the id of the axis.\n * @return {string} Unique identifier of the axis.\n */\n id () {\n return this._id;\n }\n\n}\n","export const DEFAULT_CONFIG = {\n value: 36,\n range: [36, 1000]\n};\n","import { numberInterpolator, piecewiseInterpolator } from 'muze-utils';\nimport { CONTINOUS, DISCRETE } from '../enums/constants';\nimport { LINEAR, THRESHOLD } from '../enums/scale-type';\n\n/**\n *\n *\n * @param {*} domain\n * @returns\n */\nconst indexedDomain = (domain) => {\n const uniqueVals = domain;\n const retDomain = domain.map((d, i) => (i) / (domain.length - 1));\n return { domain: retDomain, uniqueVals, scaleDomain: [0, 1] };\n};\n\n/**\n *\n *\n * @param {*} domain\n * @returns\n */\nconst normalDomain = (domain) => {\n const uniqueVals = domain;\n return { uniqueVals, domain };\n};\n\n/**\n *\n *\n * @param {*} domain\n * @param {*} intervals\n * @returns\n */\nconst steppedDomain = (domain, intervals) => {\n let newIntervals = [];\n if (intervals instanceof Array) {\n newIntervals = intervals.slice().sort();\n } else {\n const interpolator = numberInterpolator()(...domain);\n for (let i = 0; i < intervals; i++) {\n newIntervals[i] = interpolator(i / (intervals - 1));\n }\n }\n if (newIntervals[0] < domain[0]) {\n newIntervals.shift();\n }\n const retDomain = newIntervals;\n return { uniqueVals: newIntervals, domain: retDomain, nice: true };\n};\n\n/**\n *\n *\n * @param {*} domainValue\n * @param {*} scale\n * @param {*} domain\n * @param {*} uniqueVals\n * @returns\n */\nconst discreteRange = (domainValue, scale, domain) => {\n const numVal = (domainValue - domain[0]) / (domain[domain.length - 1] - domain[0]);\n const interpolator = numberInterpolator()(...scale.range());\n return interpolator(numVal);\n};\n\n/**\n *\n *\n * @param {*} domainValue\n * @param {*} scale\n * @param {*} domain\n * @returns\n */\nconst pieceWiseRange = (domainValue, scale, domain, uniqueVals) => {\n const index = uniqueVals.indexOf(domainValue);\n const numVal = domain[index];\n const fn = piecewiseInterpolator()(numberInterpolator(), [...scale.range()]);\n return fn(numVal);\n};\n\n/**\n *\n *\n * @param {*} domainValue\n * @param {*} scale\n */\nconst normalRange = (domainValue, scale) => scale(domainValue);\n\n/**\n *\n *\n * @param {*} intervals\n */\nconst strategies = {\n [`${DISCRETE}-${CONTINOUS}`]: {\n scale: LINEAR,\n domain: indexedDomain,\n range: pieceWiseRange\n },\n [`${CONTINOUS}-${CONTINOUS}`]: {\n scale: LINEAR,\n domain: normalDomain,\n range: normalRange\n },\n [`${CONTINOUS}-${DISCRETE}`]: {\n scale: THRESHOLD,\n domain: steppedDomain,\n range: discreteRange\n }\n};\n\n/**\n *\n *\n * @param {*} domainType\n * @param {*} rangeType\n * @param {*} schemeType\n * @param {*} intervals\n */\nexport const strategyGetter = (domainType, rangeType) =>\n strategies[`${domainType}-${rangeType}`];\n","export const PROPS = {\n config: {},\n domain: {\n sanitization: (context, value) => {\n context.scale().domain(value);\n return value;\n }\n },\n range: {},\n scale: {},\n uniqueValues: {}\n};\n","/**\n * @module Axis\n * This file declares a class that is used to render an axis to add meaning to\n * plots.\n */\nimport { getUniqueId, generateGetterSetters } from 'muze-utils';\nimport { createScale } from '../scale-creator';\nimport { DEFAULT_CONFIG } from './defaults';\nimport { SIZE, CONTINOUS, DISCRETE } from '../enums/constants';\nimport { strategyGetter } from './size-strategy';\nimport { PROPS } from './props';\n\n/**\n* This class is used to instantiate a SimpleAxis.\n* @class SimpleAxis\n*/\nexport default class SizeAxis {\n\n /**\n * Creates an instance of SimpleAxis.\n * @param {Object} config input parameters.\n * @memberof SizeAxis\n */\n constructor (config) {\n generateGetterSetters(this, PROPS);\n\n this._id = getUniqueId();\n this._config = Object.assign({}, this.constructor.defaultConfig(), config);\n // @todo: Will use configuration override using scale decorator\n this._domainType = this._config.type === 'linear' ? CONTINOUS : DISCRETE;\n this._rangeType = CONTINOUS;\n\n this._sizeStrategy = this.setStrategy(this._domainType, this._rangeType);\n this._scale = this.createScale(this._sizeStrategy);\n this._range = this._config.range;\n\n this.updateDomain(config.domain);\n }\n\n /**\n *\n *\n * @param {*} domainType\n * @param {*} rangeType\n * @param {*} schemeType\n * @returns\n * @memberof ColorAxis\n */\n setStrategy (domainType, rangeType) {\n return strategyGetter(domainType, rangeType);\n }\n\n /**\n *\n *\n * @returns\n * @memberof SizeAxis\n */\n createScale (strategy) {\n const {\n range\n } = this.config();\n return createScale({\n type: strategy.scale,\n range\n });\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof ColorAxis\n */\n static defaultConfig () {\n return DEFAULT_CONFIG;\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof ColorAxis\n */\n static type () {\n return SIZE;\n }\n\n /**\n *\n *\n * @param {*} domainVal\n * @returns\n * @memberof SizeAxis\n */\n getSize (domainVal = 0) {\n let sizeVal = 1;\n const {\n value\n } = this.config();\n const scale = this.scale();\n const domain = this.domain() || [1, 1];\n\n if (!scale || domain[0] === domain[1]) {\n sizeVal = value;\n } else {\n return this._sizeStrategy.range(domainVal, scale, this.domain(), this.uniqueValues());\n }\n return sizeVal;\n }\n\n /**\n * This method is used to assign a domain to the axis.\n *\n * @param {Array} domain the domain of the scale\n * @memberof SizeAxis\n */\n updateDomain (domain) {\n if (domain) {\n const domainFn = this._sizeStrategy.domain;\n\n const domainInfo = domainFn(domain, this.config().intervals);\n\n this.domain(domainInfo.domain);\n this.uniqueValues(domainInfo.uniqueVals);\n\n this.scale().domain(domainInfo.scaleDomain || this.domain());\n }\n return this;\n }\n\n /**\n * This method returns an object that can be used to\n * reconstruct this instance.\n *\n * @return {Object} the serializable props of axis\n * @memberof ShapeAxis\n */\n serialize () {\n return {\n type: this.constructor.type(),\n scale: this.scale(),\n domain: this.domain(),\n range: this.range(),\n config: this.config()\n };\n }\n\n /**\n * Returns the id of the axis.\n * @return {string} Unique identifier of the axis.\n */\n id () {\n return this._id;\n }\n}\n","export const DEFAULT_CONFIG = {\n generator: null,\n value: 'circle',\n range: ['circle', 'diamond', 'star', 'cross', 'square', 'wye', 'triangle']\n};\n","export const PROPS = {\n config: {},\n domain: {},\n scale: {},\n uniqueValues: {},\n generator: {}\n};\n\n","/**\n * @module Axis\n * This file declares a class that is used to render an axis to add meaning to\n * plots.\n */\nimport { getUniqueId, getSymbol, generateGetterSetters, mergeRecursive } from 'muze-utils';\nimport { createScale } from '../scale-creator';\nimport { DEFAULT_CONFIG } from './defaults';\nimport { SHAPE } from '../enums/constants';\nimport { shapeGenerator } from './helper';\nimport { PROPS } from './props';\n\n/**\n* This class is used to instantiate a SimpleAxis.\n* @class SimpleAxis\n*/\nexport default class ShapeAxis {\n /**\n * Creates an instance of SimpleAxis.\n * @param {Object} params input parameters.\n * @param {Object | undefined} params.range Type of color scheme.\n * @memberof ShapeAxis\n */\n constructor (config) {\n generateGetterSetters(this, PROPS);\n\n this._id = getUniqueId();\n this._config = Object.assign({}, this.constructor.defaultConfig());\n this._config = mergeRecursive(this._config, config);\n\n this._scale = createScale({\n type: 'ordinal',\n range: this._config.range\n });\n this.updateDomain(config.domain);\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof ColorAxis\n */\n static defaultConfig () {\n return DEFAULT_CONFIG;\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof ColorAxis\n */\n static type () {\n return SHAPE;\n }\n\n /**\n *\n *\n * @param {*} value\n * @returns\n * @memberof ShapeAxis\n */\n getShape (value) {\n if (!this.scale() || !this.domain() || !value) {\n return this.config().value;\n }\n\n if (this._generatedShapes) {\n return this._generatedShapes[value];\n }\n\n const shapeType = this.scale()(value);\n if (shapeType === 'string') {\n return getSymbol(shapeType);\n }\n\n return shapeType;\n }\n\n /**\n * This method is used to assign a domain to the axis.\n *\n * @param {Array} domain the domain of the scale\n * @memberof ShapeAxis\n */\n updateDomain (domain = []) {\n if (domain.length) {\n this.uniqueValues(domain);\n this.domain(domain);\n this.scale().domain(domain);\n\n if (this.config().generator) {\n this._generatedShapes = shapeGenerator(domain, this.config().generator);\n }\n }\n return this;\n }\n\n /**\n * This method returns an object that can be used to\n * reconstruct this instance.\n *\n * @return {Object} the serializable props of axis\n * @memberof ShapeAxis\n */\n serialize () {\n return {\n type: this.constructor.type(),\n scale: this.scale(),\n domain: this.domain(),\n range: this.config().range,\n config: this.config()\n };\n }\n\n /**\n * Returns the id of the axis.\n * @return {string} Unique identifier of the axis.\n */\n id () {\n return this._id;\n }\n}\n","/**\n *\n *\n * @param {*} domain\n * @param {*} generatorFn\n * @returns\n */\nexport const shapeGenerator = (domain, generatorFn) => {\n const generatedShapes = {};\n domain.forEach((value) => {\n generatedShapes[value] = generatorFn(value);\n });\n return generatedShapes;\n};\n","import * as ScaleType from './enums/scale-type';\n\nconst DATA_TYPES = {\n DIMENSION: 'dimension',\n CATEGORICAL: 'categorical',\n MEASURE: 'measure',\n DATETIME: 'temporal'\n};\n\n/**\n * Map of DataModel types to associated field types.\n */\nexport const dataTypeScaleMap = {\n [DATA_TYPES.DIMENSION]: ScaleType.BAND,\n [DATA_TYPES.MEASURE]: ScaleType.LINEAR,\n [DATA_TYPES.DATETIME]: ScaleType.TIME\n};\n\n","import { nestCollection } from 'muze-utils';\n\n/**\n * Create multiple datasets from a single dataset by grouping the data using\n * a dimensional field.\n * @param {Array} schema Name and type of fields are stored in schema\n * @param {Array} data Data array\n * @param {Object} config Configuration object\n * @return {Array} Grouped data array\n */\nexport default (schema, data, config) => {\n const groupBy = config.groupBy instanceof Array ? config.groupBy : [config.groupBy];\n const groupByIndices = groupBy.map(fieldName => schema.findIndex(d => d.name === fieldName));\n\n if (groupByIndices.find(d => d === -1) !== undefined) {\n throw new Error(`Groupby field ${groupBy} not found in schema`);\n }\n\n return nestCollection({\n keys: groupByIndices,\n data\n });\n};\n","/**\n * @module Transform\n * This file exports a function that is used to implement\n * the identity transform\n */\n /* eslint no-unused-vars: 0 */\n /**\n * This function accepts data and returns the data unchanged.\n * @param {Object} schema The schema.\n * @param {Array} data The data array.\n * @param {Object} config The config object.\n * @return {Array} The unchanged data.\n */\n function identityTransform (schema, data, config) {\n return data;\n }\n\n export default identityTransform;\n","/**\n * @module Transform\n * This file exports the transform factory.\n */\nimport * as TransformType from '../enums/transform-type';\nimport identity from '../identity-transform';\nimport group from '../group-transform';\nimport stack from '../stack-transform';\n\n/* istanbul ignore next */\nconst transformMap = {\n [TransformType.IDENTITY]: identity,\n [TransformType.GROUP]: group,\n [TransformType.STACK]: stack\n};\n\n/**\n * This function is used to retirn a transform associated\n * with the given type.\n *\n * @param {string} type The type of the transform.\n * @return {Function} The transform function.\n */\nfunction transformFactory (type) {\n const transform = transformMap[type];\n if (typeof transform !== 'function') {\n throw new Error('Invalid transform type supplied.');\n }\n return transform;\n}\n\nexport default transformFactory;\n","/**\n * @module Transform\n * This module exports constants that are used to reference transforms in\n * a consistent manner throughout the project.\n */\n/* eslint one-var: 0 */\n export const IDENTITY = 'identity';\n export const GROUP = 'group';\n export const STACK = 'stack';\n export const FRACTURE = 'fracture';\n","import { stack } from 'muze-utils';\n\nimport group from '../group-transform';\n/*\n Normalize the data to a form which can be given to d3 stack for stacking the data\n ['Product', 'Sales', 'Region'],\n 0 ['A', 2000, 'North'],\n 1 ['A', 3000, 'South'],\n 2 ['B', 3000, 'South'],\n 3 ['B', 2000, 'North'],\n 4 ['C', 3000, 'South'],\n 5 ['C', 2000, 'North']\n |\n |\n ['Product', 'North', 'South'],\n ['A', 2000, 3000],\n ['B', 2000, 3000],\n ['C', 2000, 3000]\n*/\n// eslint-disable-next-line require-jsdoc\nconst normalizeData = (data, schema, valueField, uniqueField, groupBy) => {\n const groupedData = group(schema, data, {\n groupBy: uniqueField\n });\n const uniqueFieldIndex = schema.findIndex(d => d.name === uniqueField);\n const valueFieldIndex = schema.findIndex(d => d.name === valueField);\n const seriesKeyIndex = schema.findIndex(d => d.name === groupBy);\n const seriesKeys = data.map(d => d[seriesKeyIndex]).filter((item, pos, arr) => arr.indexOf(item) === pos).sort();\n const fieldNames = schema.reduce((acc, obj, i) => {\n acc[i] = obj.name;\n return acc;\n }, {});\n const dataArr = groupedData.map((arr) => {\n const tuples = {};\n const rowObj = arr.values.reduce((acc, row) => {\n acc = row.reduce((obj, value, i) => {\n if (i === seriesKeyIndex) {\n obj[value] = row[valueFieldIndex];\n tuples[value] = row;\n } else if (i !== valueFieldIndex) {\n obj[fieldNames[i]] = value;\n }\n return obj;\n }, acc);\n return acc;\n }, {});\n rowObj._tuple = tuples;\n // Set missing values field to zero value\n seriesKeys.forEach((seriesKey) => {\n if (rowObj[seriesKey] === undefined) {\n rowObj[seriesKey] = 0;\n const newArr = new Array(arr.values[0].length);\n newArr[uniqueFieldIndex] = arr.key;\n newArr[seriesKeyIndex] = seriesKey;\n rowObj._tuple[seriesKey] = newArr;\n }\n });\n return rowObj;\n });\n\n return {\n data: dataArr,\n keys: seriesKeys\n };\n};\n/**\n * Generate a stacked representation of data\n * @param {Array} schema schema Array\n * @param {Array} data data array\n * @param {Object} config Configuration object\n * @return {Array} stacked data\n */\nexport default (schema, data, config) => {\n const uniqueField = config.uniqueField;\n const valueField = config.value;\n const groupBy = config.groupBy;\n const sort = config.sort || 'descending';\n const normalizedData = normalizeData(data, schema, valueField, uniqueField, groupBy);\n const keys = normalizedData.keys;\n const map = {};\n const orderBy = config.orderBy;\n const orderIndex = schema.findIndex(d => d.name === orderBy);\n const groupByIndex = schema.findIndex(d => d.name === groupBy);\n if (orderIndex !== -1) {\n keys.forEach((key) => {\n const name = data.find(d => d[groupByIndex] === key);\n map[key] = name[orderIndex];\n });\n normalizedData.keys.sort((a, b) => map[a].localeCompare(map[b]));\n }\n\n const stackData = stack({\n keys: normalizedData.keys,\n offset: config.offset || 'diverging',\n order: sort,\n data: normalizedData.data\n });\n stackData.forEach((seriesData) => {\n seriesData.forEach((dataObj) => {\n dataObj.data = dataObj.data._tuple[seriesData.key];\n });\n });\n return stackData;\n};\n\n","import {\n FieldType,\n getDomainFromData,\n setStyles,\n easeFns,\n selectElement,\n DimensionSubtype\n} from 'muze-utils';\nimport { ScaleType } from '@chartshq/muze-axis';\nimport { transformFactory } from '@chartshq/transform';\nimport { IDENTITY, STACK, GROUP, COLOR, SHAPE, SIZE, ENCODING } from '../enums/constants';\n\nconst BAND = ScaleType.BAND;\n\nexport const getLayerColor = ({ datum, index }, { colorEncoding, colorAxis, colorFieldIndex }) => {\n let rawColor = '';\n let color = '';\n if (colorEncoding && colorEncoding.value instanceof Function) {\n color = colorEncoding.value(datum, index);\n rawColor = colorEncoding.value(datum, index);\n } else {\n rawColor = colorAxis.getRawColor(datum._data[colorFieldIndex]);\n color = colorAxis.getHslString(rawColor);\n }\n return { color, rawColor };\n};\n\nconst transfromColor = (colorAxis, datum, styleType, intensity) => {\n datum.meta.stateColor[styleType] = datum.meta.stateColor[styleType] || datum.meta.originalColor;\n const fillColorInfo = colorAxis.transformColor(datum.meta.stateColor[styleType], intensity);\n datum.meta.stateColor[styleType] = fillColorInfo.hsla;\n\n return fillColorInfo;\n};\n\nexport const applyInteractionStyle = (context, selectionSet, interactionStyles, config) => {\n const elements = context.getPlotElementsFromSet(selectionSet);\n const axes = context.axes();\n const colorAxis = axes.color;\n const apply = config.apply;\n const interactionType = config.interactionType;\n interactionStyles.forEach((style) => {\n const styleType = style.type;\n elements.style(styleType, ((d) => {\n const { colorTransform, stateColor, originalColor } = d.meta;\n colorTransform[interactionType] = colorTransform[interactionType] || {};\n if (apply && !colorTransform[interactionType][styleType]) {\n // fade selections\n colorTransform[interactionType][styleType] = style.intensity;\n const color = transfromColor(colorAxis, d, styleType, style.intensity).color;\n return color;\n }\n if (!apply && colorTransform[interactionType][styleType]) {\n // unfade selections\n colorTransform[interactionType][styleType] = null;\n return transfromColor(colorAxis, d, styleType, style.intensity.map(e => -e)).color;\n }\n const [h, s, l, a] = stateColor[styleType] ? stateColor[styleType] : originalColor;\n return `hsla(${h * 360},${s * 100}%,${l * 100}%, ${a || 1})`;\n }));\n });\n};\n\n/**\n *\n *\n * @param {*} selectionSet\n * @param {*} className\n * @param {*} hasFaded\n */\nexport const fadeUnfadeSelection = (context, selectionSet, hasFaded, interaction) => {\n const interactionConfig = { interaction, apply: hasFaded };\n applyInteractionStyle(context, selectionSet, 'fade', interactionConfig);\n};\n\n/**\n *\n *\n * @param {*} selectionSet\n * @param {*} className\n * @param {*} hasFaded\n */\nexport const focusUnfocusSelection = (context, selectionSet, isFocussed, interaction) => {\n const interactionConfig = { interaction, apply: isFocussed };\n applyInteractionStyle(context, selectionSet, 'focus', interactionConfig);\n};\n\n/**\n *\n *\n * @param {*} axes\n * @returns\n */\nexport const getAxesScales = (axes) => {\n const [xAxis, yAxis] = [ENCODING.X, ENCODING.Y].map(e => axes[e]);\n const [xScale, yScale] = [xAxis, yAxis].map(e => e && e.scale());\n return {\n xAxis,\n yAxis,\n xScale,\n yScale\n };\n};\n\n/**\n *\n *\n * @param {*} encoding\n * @param {*} fieldsConfig\n * @returns\n */\nexport const getEncodingFieldInf = (encoding, fieldsConfig) => {\n const [xField, yField, x0Field, y0Field, colorField, shapeField, sizeField] =\n [ENCODING.X, ENCODING.Y, ENCODING.X0, ENCODING.Y0, COLOR, SHAPE, SIZE].map(e => encoding[e] &&\n encoding[e].field);\n\n const [xFieldType, yFieldType] = [xField, yField, x0Field, y0Field].map(e => fieldsConfig[e] &&\n fieldsConfig[e].def.type);\n\n const [xFieldSubType, yFieldSubType] = [xField, yField].map(e => fieldsConfig[e] && (fieldsConfig[e].def.subtype ||\n fieldsConfig[e].def.type));\n\n const [xFieldIndex, yFieldIndex, x0FieldIndex, y0FieldIndex] = [xField, yField, x0Field, y0Field]\n .map(e => fieldsConfig[e] && fieldsConfig[e].index);\n\n return {\n xField,\n yField,\n colorField,\n shapeField,\n sizeField,\n x0Field,\n y0Field,\n xFieldType,\n yFieldType,\n xFieldSubType,\n yFieldSubType,\n xFieldIndex,\n yFieldIndex,\n x0FieldIndex,\n y0FieldIndex\n };\n};\n\n/**\n *\n *\n * @param {*} layerConfig\n * @param {*} fieldsConfig\n * @returns\n */\nexport const getValidTransform = (layerConfig, fieldsConfig, encodingFieldInf) => {\n let transformType;\n const {\n transform\n } = layerConfig;\n const {\n xField,\n yField,\n xFieldType,\n yFieldType\n } = encodingFieldInf;\n const groupByField = transform.groupBy;\n const groupByFieldMeasure = fieldsConfig[groupByField] && fieldsConfig[groupByField].def.type === FieldType.MEASURE;\n transformType = transform.type;\n if (!xField || !yField || groupByFieldMeasure || !groupByField || xFieldType === FieldType.DIMENSION &&\n yFieldType === FieldType.DIMENSION) {\n transformType = IDENTITY;\n }\n return transformType;\n};\n\n/**\n *\n *\n * @param {*} dataModel\n * @param {*} config\n * @param {*} transformType\n * @returns\n */\nexport const transformData = (dataModel, config, transformType, encodingFieldInf) => {\n const data = dataModel.getData({ withUid: true });\n const schema = data.schema;\n const transform = config.transform;\n const {\n xField,\n yField,\n xFieldType,\n yFieldType\n } = encodingFieldInf;\n const uniqueField = xFieldType === FieldType.MEASURE ? yField : xField;\n\n return transformFactory(transformType)(schema, data.data, {\n groupBy: transform.groupBy,\n uniqueField,\n sort: transform.sort || 'none',\n offset: transform.offset,\n orderBy: transform.orderBy,\n value: yFieldType === FieldType.MEASURE ? yField : xField\n }, data.uids);\n};\n\nexport const getIndividualClassName = (d, i, data, context) => {\n const className = context.config().individualClassName;\n let classNameStr = '';\n if (className instanceof Function) {\n classNameStr = className(d, i, data, context);\n }\n return classNameStr;\n};\n\n/*\n * This method resolves the x, y, x0 and y0 values from the transformed data.\n * It also checks the type of transformed data for example, if it is a stacked data\n * then it fetches the y and y0 values from the stacked data.\n * @param {Array.} transformedData transformed data\n * @param {Object} fieldsConfig field definitions\n * @param {string} transformType type of transformed data - stack, group or identity.\n * @return {Array.} Normalized data\n*/\nexport const getNormalizedData = (transformedData, fieldsConfig, encodingFieldInf, transformType) => {\n const transformedDataArr = transformType === IDENTITY ? [transformedData] : transformedData;\n const {\n xFieldType,\n xFieldIndex,\n yFieldIndex,\n x0FieldIndex,\n y0FieldIndex\n } = encodingFieldInf;\n const fieldsLen = Object.keys(fieldsConfig).length;\n /**\n * Returns normalized data from transformed data. It recursively traverses through\n * the transformed data if there it is nested.\n */\n return transformedDataArr.map((data) => {\n const values = transformType === GROUP ? data.values : data;\n return values.map((d) => {\n let pointObj = {};\n let tuple;\n if (transformType === STACK) {\n tuple = d.data || [];\n let y;\n let y0;\n let x;\n let x0;\n if (d[1] >= d[0]) {\n y = x0 = d[1];\n x = y0 = d[0];\n } else {\n y = x0 = d[0];\n x = y0 = d[1];\n }\n\n pointObj = xFieldType === FieldType.MEASURE ? {\n x,\n x0,\n y: tuple[yFieldIndex],\n y0: tuple[yFieldIndex]\n } : {\n x: tuple[xFieldIndex],\n x0: tuple[xFieldIndex],\n y,\n y0\n };\n pointObj._data = tuple;\n pointObj._id = tuple[fieldsLen];\n } else {\n pointObj = {\n x: d[xFieldIndex],\n y: d[yFieldIndex],\n x0: d[x0FieldIndex],\n y0: d[y0FieldIndex]\n };\n pointObj._data = d;\n pointObj._id = d[fieldsLen];\n }\n return pointObj;\n });\n }).filter(d => d.length);\n};\n\nexport const calculateDomainFromData = (data, encodingFieldInf, transformType) => {\n const {\n xFieldSubType,\n yFieldSubType,\n xField,\n yField,\n x0Field,\n y0Field\n } = encodingFieldInf;\n const domains = {};\n const yEnc = ENCODING.Y;\n const xEnc = ENCODING.X;\n if (xField) {\n domains.x = getDomainFromData(data, x0Field || transformType === STACK ? [xEnc, ENCODING.X0] : [xEnc, xEnc],\n xFieldSubType);\n }\n if (yField) {\n domains.y = getDomainFromData(data, y0Field || transformType === STACK ? [ENCODING.Y0, ENCODING.Y] :\n [yEnc, yEnc], yFieldSubType);\n }\n\n return domains;\n};\n\nexport const attachDataToVoronoi = (voronoi, points) => {\n voronoi.data([].concat(...points).filter(d => d._id !== undefined).map((d) => {\n const point = d.update;\n return {\n x: point.x,\n y: point.y,\n data: d\n };\n }));\n};\n\n/**\n *\n *\n * @param {*} target\n * @param {*} styles\n * @param {*} remove\n */\nexport const updateStyle = (target, styles, remove) => {\n for (const key in styles) {\n if ({}.hasOwnProperty.call(styles, key)) {\n target.style(key, remove ? null : styles[key]);\n }\n }\n};\n\n/**\n *\n *\n * @param {*} mount\n * @param {*} context\n */\nexport const animateGroup = (mount, context) => {\n let groupTransition;\n let update;\n const { transition, groupAnimateStyle } = context;\n const { duration, effect, disabled } = transition;\n if (groupAnimateStyle) {\n setStyles(mount.node(), groupAnimateStyle.enter);\n update = groupAnimateStyle.update;\n if (!disabled) {\n groupTransition = mount.transition()\n .ease(easeFns[effect])\n .duration(duration)\n .on('end', function () {\n updateStyle(selectElement(this), update, true);\n });\n } else {\n groupTransition = mount;\n }\n updateStyle(groupTransition, update);\n }\n};\n\nexport const positionPoints = (context, points) => {\n const positioner = context.encodingTransform();\n if (positioner) {\n return positioner(points, context, { smartLabel: context._dependencies.smartLabel });\n }\n return points;\n};\n\n/**\n * Gets the width of each group. It gets the width from axis if it is available for\n * example when the scale is nominal else it calculates the width from the\n * range of the axis and number of data points.\n *\n * @param {SimpleAxis} axis instance of axis\n * @param {number} minDiff Minimum difference between data points\n * @return {number} width of each bar\n * @private\n*/\nexport const getGroupSpan = (axis, minDiff) => {\n let groupSpan;\n const width = axis.getUnitWidth();\n const scale = axis.scale();\n const range = scale.range();\n const domain = scale.domain();\n !width ? groupSpan = (Math.abs(range[1] - range[0]) / Math.abs(domain[1] - domain[0])) * minDiff :\n (groupSpan = width);\n\n return groupSpan;\n};\n\nexport const getPlotMeasurement = (context, dimensionalValues) => {\n const fieldInfo = context.encodingFieldsInf();\n const axes = context.axes();\n const transformType = context.transformType();\n const config = context.config();\n const bandScale = context._bandScale;\n\n return ['x', 'y'].map((type) => {\n let span = 0;\n let groupSpan = 0;\n let padding = 0;\n let offsetValues = [];\n if (fieldInfo[`${type}FieldType`] === FieldType.DIMENSION) {\n let actualGroupWidth;\n const isTemporal = fieldInfo[`${type}FieldSubType`] === DimensionSubtype.TEMPORAL;\n const timeDiff = isTemporal ? context.dataProps().timeDiffs[type] : 0;\n const axis = axes[type];\n const pad = config[`pad${type.toUpperCase()}`];\n const innerPadding = config.innerPadding;\n const keys = dimensionalValues;\n const scale = axis.scale();\n groupSpan = getGroupSpan(axis, timeDiff);\n const isAxisBandScale = axis.constructor.type() === BAND;\n const axisPadding = axis.config().padding;\n // If it is a grouped bar then the width of each bar in a grouping is retrieved from\n // a band scale. The band scale will have range equal to width of one group of bars and\n // the domain is set to series keys.\n if (transformType === 'group') {\n const groupPadding = isAxisBandScale ? 0 : axisPadding * groupSpan / 2;\n bandScale.range([groupPadding, groupSpan - groupPadding]).domain(keys).paddingInner(innerPadding);\n span = bandScale.bandwidth();\n actualGroupWidth = groupSpan - (isAxisBandScale ? 0 : axisPadding * groupSpan);\n offsetValues = keys.map(key => bandScale(key) - (isAxisBandScale ? 0 : (groupSpan / 2)));\n } else if (pad !== undefined) {\n let offset;\n if (isAxisBandScale) {\n const step = scale.step();\n offset = scale.padding() * step;\n span = scale.bandwidth() + offset;\n } else {\n span = groupSpan;\n }\n offsetValues = keys.map(() => (isAxisBandScale ? -(offset / 2) : -(span / 2)));\n } else {\n padding = isAxisBandScale ? 0 : axisPadding * groupSpan;\n span = groupSpan - padding;\n actualGroupWidth = span;\n offsetValues = keys.map(() => (isAxisBandScale ? 0 : -(span / 2)));\n }\n\n groupSpan = actualGroupWidth;\n padding = isAxisBandScale ? axisPadding * axis.scale().step() : axisPadding * groupSpan;\n }\n\n return {\n span,\n offsetValues,\n groupSpan,\n padding\n };\n });\n};\n","import { nextFrame } from 'muze-utils';\nimport { getValidTransform, getEncodingFieldInf } from '../helpers';\nimport * as PROPS from '../enums/props';\n\nexport const listenerMap = context => [\n {\n props: [PROPS.TRANSFORMED_DATA],\n listener: fetch => fetch(PROPS.DATA, PROPS.CONFIG, (dataModel, config) => {\n const dataModelValue = dataModel.value;\n const configValue = config.value;\n const encodingValue = configValue && configValue.encoding;\n if (dataModelValue && encodingValue) {\n const fieldsConfig = dataModelValue.getFieldsConfig();\n const encodingFieldsInf = getEncodingFieldInf(encodingValue, fieldsConfig);\n context.encodingFieldsInf(encodingFieldsInf);\n context.transformType(getValidTransform(configValue, fieldsConfig, encodingFieldsInf));\n return context.getTransformedData(dataModelValue, configValue, context.transformType(),\n encodingFieldsInf);\n }\n return null;\n }),\n type: 'computed'\n },\n {\n props: [PROPS.NORMALIZED_DATA],\n listener: fetch => fetch(PROPS.TRANSFORMED_DATA, (transformedData) => {\n const transformedDataValue = transformedData.value;\n if (transformedDataValue) {\n const fieldsConfig = context.data().getFieldsConfig();\n return context.getNormalizedData(transformedDataValue, fieldsConfig);\n }\n return null;\n }),\n type: 'computed'\n },\n {\n props: [PROPS.DOMAIN],\n listener: fetch => fetch(PROPS.NORMALIZED_DATA, (normalizedData) => {\n const normalizedDataValue = normalizedData.value;\n if (normalizedDataValue) {\n return context.calculateDomainFromData(normalizedDataValue, context.encodingFieldsInf(),\n context.data().getFieldsConfig());\n }\n return null;\n }),\n type: 'computed'\n },\n {\n props: [PROPS.DATA],\n listener: (data) => {\n if (data[1]) {\n nextFrame(() => {\n context.store().commit(PROPS.DATA_UPDATED, true);\n });\n }\n },\n type: 'registerImmediateListener'\n },\n {\n props: [PROPS.MOUNT, PROPS.DATA_UPDATED],\n listener: (mount, dataUpdated) => {\n if (mount[1] && dataUpdated[1]) {\n context.render(mount[1]);\n context.dependencies().throwback.commit('onlayerdraw', true);\n }\n },\n type: 'registerChangeListener'\n }\n];\n\n","import { mergeRecursive } from 'muze-utils';\nimport * as PROPS from '../enums/props';\n\nexport const defaultOptions = {\n [PROPS.CONFIG]: {\n value: null,\n meta: {\n sanitization: (config, oldConfig, context) => {\n const constructor = context.constructor;\n const newConf = mergeRecursive({}, constructor.defaultConfig());\n return constructor.defaultPolicy(newConf, config);\n }\n }\n },\n [PROPS.DATA]: {\n value: null,\n meta: {\n preset: (data, context) => {\n if (context._cacheEnabled) {\n context._cachedData.push(data);\n } else {\n context._cachedData = [data];\n }\n }\n }\n },\n [PROPS.MOUNT]: {\n value: null\n },\n [PROPS.AXES]: {\n value: null\n },\n [PROPS.MEASUREMENT]: {\n value: null\n }\n};\n","import {\n getUniqueId,\n mergeRecursive,\n Store,\n FieldType,\n selectElement,\n ReservedFields,\n registerListeners,\n transactor,\n DataModel,\n clone\n} from 'muze-utils';\nimport { SimpleLayer } from '../simple-layer';\nimport * as PROPS from '../enums/props';\nimport {\n transformData,\n calculateDomainFromData,\n getNormalizedData,\n applyInteractionStyle\n} from '../helpers';\nimport { listenerMap } from './listener-map';\nimport { defaultOptions } from './default-options';\n\n/**\n * An abstract class which gives defination of common layer functionality like\n * - transfromation data for various {@link mode}\n * - calculating data domain\n * - linking dependent layers\n * - merging policy of configuration\n * - interaction sideffect helpers\n * - retrieving dom elements from data using id\n * - retrieving the physical dimensions of marks\n * - disposing layer\n *\n * Every layer has to extend base layer and give concrete definition.\n * This layer does not have any default visual. A new layer has to define the logic of `render` for rendering the\n * visuals\n *\n * @public\n * @class\n * @namespace Muze\n */\nexport default class BaseLayer extends SimpleLayer {\n\n /**\n * Creates a layer using a configuration and data.\n *\n * @public\n *\n * @param {DataModel} data Instance of DataModel to be used. This DataModel instance serves as the data for a layer.\n * @param {Object} axes Axes instances to be used for rendering the layer. Axes are used for mapping data from\n * value to px.\n * @param {SimpleAxis} axes.x X axis of the layer. Based on the type of variable it gets instance of BandAxis,\n * TimeAxis, ContinuousAxis\n * @param {SimpleAxis} axes.y X axis of the layer. Based on the type of variable it gets instance of BandAxis,\n * TimeAxis, ContinuousAxis\n * @param {ColorAxis} axes.color Axis for coloring a layer using color interpolators\n * @param {ShapeAxis} axes.shape Axis for providing a shape\n * @param {SizeAxis} axes.shape Axis for determining size of a mark using size interpolator\n * @param {LayerConfig} config Configuration of the layer\n * @param {Object} dependencies Dependencies of the layer\n * @param {SmartLabel} smartLabel Smartlabel singleton instance\n */\n constructor (data, axes, config, dependencies) {\n super();\n this.store(new Store({\n DATA: null,\n [PROPS.DATA_UPDATED]: null\n }));\n transactor(this, defaultOptions, this.store().model);\n this.data(data);\n this.axes(axes);\n this.config(config);\n this.alias(this.constructor.formalName() + getUniqueId());\n this.dependencies(dependencies);\n this._points = [];\n this._cachedData = [];\n this._id = getUniqueId();\n this._measurement = {};\n registerListeners(this, listenerMap);\n }\n\n /**\n * Creates a layer instance\n * @return {BaseLayer} Instance of a layer\n */\n static create (...params) {\n return new this(...params);\n }\n\n /**\n * Default configuration of the layer. This configuration gets merged to the user passed configuration using a\n * plolicy. Base layer only returns part of configuraion, any layer overridding base layer should return its own\n * configuration.\n *\n * @public\n * @static\n *\n * @return {Object} Default configuration\n */\n static defaultConfig () {\n return {\n transform: {\n type: 'identity'\n }\n };\n }\n\n /**\n * Policy defines how user config gets merged to default config. The default policy here does a deep copy\n * operation.\n * Any policy which does more than deep copying should define the policy as a static member.\n *\n * @static\n * @public\n *\n * @param {LayerConfig} conf Configuration with which the user config will be merged\n * @param {LayerConfig} userConf Configuration given by the user\n *\n * @return {LayerConfig} Merged layer configuration\n */\n static defaultPolicy (conf, userConf) {\n return mergeRecursive(conf, userConf);\n }\n\n /**\n * Determines a name for a layer. This name of the layer is used in the input data to refer to this layer.\n * ```\n * .layer([\n * mark: 'bar',\n * encoding: { ... }\n * ])\n * ```\n *\n * @static\n * @public\n *\n * @returns {string} name of layer\n */\n static formalName () {\n return 'base';\n }\n\n store (...store) {\n if (store.length) {\n this._store = store[0];\n return this;\n }\n return this._store;\n }\n\n encodingFieldsInf (...fieldsInf) {\n if (fieldsInf.length) {\n this._encodingFieldsInf = fieldsInf[0];\n return this;\n }\n return this._encodingFieldsInf;\n }\n\n encodingTransform (...encodingTransform) {\n if (encodingTransform.length) {\n this._encodingTransform = encodingTransform[0];\n return this;\n }\n return this._encodingTransform;\n }\n\n /**\n * Provides a alias for a layer. Like it's possible to have same layer (like bar) multiple times, but among multiple\n * layers of same type if one layer has to be referred, alias is used. If no alias is given then `formalName` is set\n * as the alias name.\n *\n * @public\n *\n * If used as setter\n * @param {string} alias Name of the alias\n * @return {BaseLayer} Instance of current base layer\n *\n * If used as getter\n * @return {string} Alias of the current layer\n */\n alias (...params) {\n if (params.length) {\n this._alias = params[0];\n return this;\n }\n return this._alias || this.constructor.formalName();\n }\n\n dependencies (...params) {\n if (params.length) {\n this._dependencies = params[0];\n return this;\n }\n return this._dependencies;\n }\n\n enableCaching () {\n this._cacheEnabled = true;\n return this;\n }\n\n clearCaching () {\n this._cacheEnabled = false;\n return this.data(this._cachedData[0]);\n }\n\n /**\n * Serialize the schema. Merge config is used for serialization.\n *\n * @public\n *\n * @return {LayerConfig} Serialized schema\n */\n serialize () {\n return this.config();\n }\n\n /**\n * Returns the unique identifier of this layer. Id is auto generated during the creation proceess of a schema.\n *\n * @return {string} id of the layer\n */\n id () {\n return this._id;\n }\n\n /**\n * Gets the transform method from transform factory based on type of transform. It then calls the\n * transform method with the data and passes the configuration parameters of transform such as\n * groupBy, value field, etc.\n *\n * @public\n *\n * @param {DataModel} dataModel Instance of DataModel\n * @param {Object} config Configuration for transforming data\n * @return {Array.} Transformed data.\n */\n getTransformedData (dataModel, config, transformType, encodingFieldsInf) {\n return transformData(dataModel, config, transformType, encodingFieldsInf);\n }\n\n /**\n * Calculates the domain from the data.\n * It checks the type of field and calculates the domain based on that. For example, if it\n * is a quantitative or temporal field, then it calculates the min and max from the data or\n * if it is a nominal field then it gets all the values from the data of that field.\n * @param {Array} data DataArray\n * @param {Object} fieldsConfig Configuration of fields\n * @return {Array} Domain values array.\n */\n calculateDomainFromData (data) {\n let domains = {};\n const isEmpty = this.data().isEmpty();\n\n if (!isEmpty) {\n domains = calculateDomainFromData(data, this.encodingFieldsInf(), this.transformType());\n }\n return domains;\n }\n\n shouldDrawAnchors () {\n return false;\n }\n\n /**\n * Returns the domain for the axis.\n *\n * @param {string} encodingType type of encoding x, y, etc.\n * @return {Object} Axis domains\n */\n getDataDomain (encodingType) {\n const domains = this.store().get(PROPS.DOMAIN);\n return encodingType !== undefined ? domains[encodingType] || [] : domains;\n }\n\n /**\n * Returns the domain for the axis.\n *\n * @param {string} encodingType type of encoding x, y, etc.\n * @return {Object} Axis domains\n */\n getNormalizedData (transformedData, fieldsConfig) {\n return getNormalizedData(transformedData, fieldsConfig, this.encodingFieldsInf(), this.transformType());\n }\n\n /**\n * Abstract method for getting nearest point\n * @return {BaseLayer} Instance of base layer\n */\n getNearestPoint () {\n return null;\n }\n\n applyInteractionStyle (interactionType, selectionSet, apply) {\n const interactionConfig = this.config().interaction || {};\n\n const interactionStyles = interactionConfig[interactionType];\n if (interactionStyles) {\n applyInteractionStyle(this, selectionSet, interactionStyles, {\n apply,\n interactionType\n });\n }\n }\n\n /**\n *\n *\n * @returns\n * @memberof BaseLayer\n */\n transformType (...transformType) {\n if (transformType.length) {\n this._transformType = transformType[0];\n return this;\n }\n return this._transformType;\n }\n\n /**\n * Renders the layer\n * @return {BaseLayer} Instance of the layer.\n */\n render () {\n return this;\n }\n\n /**\n *\n *\n * @returns\n * @memberof BaseLayer\n */\n elemType () {\n return 'g';\n }\n\n /**\n * Disposes the entire layer\n * @return {BaseLayer} Instance of layer.\n */\n remove () {\n this.store().unsubscribeAll();\n selectElement(this.mount()).remove();\n return this;\n }\n\n /**\n * Stores point in an object with key as the categorical value or temporal value\n *\n * @param {string} key categorical value or temporal value\n * @param {Object} data Information of the data point\n * @return {BarLayer} Instance of bar layer\n */\n cachePoint (key, data) {\n if (key === null) {\n return this;\n }\n const pointMap = this._pointMap;\n !pointMap[key] && (pointMap[key] = []);\n pointMap[key].push(data);\n return this;\n }\n\n /**\n *\n *\n * @param {*} dataProps\n * @returns\n * @memberof BaseLayer\n */\n dataProps (...dataProps) {\n if (dataProps.length) {\n this._dataProps = dataProps[0];\n return this;\n }\n return this._dataProps;\n }\n\n /**\n *\n *\n * @param {*} data\n * @param {*} id\n * @returns\n * @memberof BaseLayer\n */\n getIdentifiersFromData (data) {\n const schema = this.data().getData().schema;\n const fieldsConfig = this.data().getFieldsConfig();\n const identifiers = [[], []];\n const {\n xFieldType,\n yFieldType,\n xField,\n yField\n } = this.encodingFieldsInf();\n\n const [xMeasure, yMeasure] = [xFieldType, yFieldType].map(type => type === FieldType.MEASURE);\n schema.forEach((d, i) => {\n const name = d.name;\n if (fieldsConfig[name].def.type === FieldType.DIMENSION) {\n identifiers[0].push(name);\n identifiers[1].push(data[i]);\n }\n });\n\n if (xMeasure && yMeasure) {\n const xMeasureIndex = fieldsConfig[xField].index;\n const yMeasureIndex = fieldsConfig[yField].index;\n identifiers[0].push(...[xField, yField]);\n identifiers[1].push(...[data[xMeasureIndex], data[yMeasureIndex]]);\n }\n return identifiers;\n }\n\n getPlotSpan () {\n return {\n x: 0,\n y: 0\n };\n }\n\n getPlotPadding () {\n return {\n x: 0,\n y: 0\n };\n }\n\n /**\n *\n *\n * @param {*} identifiers\n * @returns\n * @memberof BaseLayer\n */\n getPointsFromIdentifiers (identifiers, config = {}) {\n const getAllAttrs = config.getAllAttrs;\n const getBBox = config.getBBox;\n if (!this.data()) {\n return [];\n }\n let fieldNames;\n let values;\n if (identifiers instanceof DataModel) {\n const dataObj = identifiers.getData();\n fieldNames = dataObj.schema.map(d => d.name);\n values = dataObj.data;\n } else {\n fieldNames = identifiers[0];\n values = identifiers.slice(1, identifiers.length);\n }\n\n const points = this._points;\n const fieldsConfig = this.data().getFieldsConfig();\n\n const filteredPoints = [].concat(...points).filter((point) => {\n const { _data, _id } = point;\n\n return fieldNames.every((field, idx) => {\n if (field in fieldsConfig && fieldsConfig[field].def.type === FieldType.DIMENSION) {\n return values.findIndex(d => d[idx] === _data[fieldsConfig[field].index]) !== -1;\n } else if (field === ReservedFields.ROW_ID) {\n return values.findIndex(d => d[idx] === _id) !== -1;\n } return true;\n });\n });\n return getAllAttrs ? filteredPoints : filteredPoints.map((d) => {\n const obj = clone(d);\n if (getBBox) {\n const update = obj.update || obj;\n if (obj.size !== undefined) {\n const sizeVal = Math.sqrt(obj.size / Math.PI) * 2;\n update.width = sizeVal;\n update.height = sizeVal;\n update.x -= sizeVal / 2;\n update.y -= sizeVal / 2;\n } else {\n if (update.width === undefined) {\n update.width = 2;\n }\n if (update.height === undefined) {\n update.height = 2;\n }\n }\n }\n\n return obj.update || obj;\n }).sort((a, b) => a.y - b.y);\n }\n\n getTransformedDataFromIdentifiers (identifiers) {\n const { data: identifierData, schema: identifierSchema } = identifiers.getData();\n const normalizedData = this.store().get(PROPS.NORMALIZED_DATA);\n const fieldsConfig = this.data().getFieldsConfig();\n const {\n yField,\n xField,\n yFieldType,\n xFieldType\n } = this.encodingFieldsInf();\n let measureIndex;\n let enc;\n if (xFieldType === FieldType.MEASURE) {\n measureIndex = fieldsConfig[xField].index;\n enc = 'x';\n } else if (yFieldType === FieldType.MEASURE) {\n measureIndex = fieldsConfig[yField].index;\n enc = 'y';\n }\n\n const transformedData = [];\n normalizedData.forEach((dataArr) => {\n dataArr.forEach((dataObj) => {\n const tupleArr = dataObj._data;\n const exist = identifierSchema.every((obj, i) =>\n identifierData.findIndex(d => tupleArr[fieldsConfig[obj.name].index] === d[i]) !== -1);\n if (exist) {\n const transformedVal = dataObj[enc];\n const row = dataObj._data;\n const tuple = {};\n for (const key in fieldsConfig) {\n const index = fieldsConfig[key].index;\n tuple[key] = row[index];\n if (index === measureIndex) {\n tuple[key] = transformedVal;\n }\n }\n transformedData.push(tuple);\n }\n });\n });\n\n return [transformedData, this.data().getData().schema];\n }\n\n /**\n *\n *\n * @param {*} set\n * @returns\n * @memberof BaseLayer\n */\n getPlotElementsFromSet (set) {\n return selectElement(this.mount()).selectAll(this.elemType()).filter(data =>\n (data ? set.indexOf(data._id) !== -1 : false));\n }\n}\n","import {\n selectElement,\n makeElement,\n pathInterpolators,\n Symbols\n} from 'muze-utils';\nimport { updateStyle } from '../../helpers';\n\nconst line = Symbols.line;\n\n/**\n * Draws a line from the points\n * Generates a svg path string\n * @param {Object} params Contains container, points and interpolate attribute.\n */\nexport const drawLine = (context) => {\n let filteredPoints;\n const { container, points, interpolate, connectNullData, className, style, transition } = context;\n const mount = selectElement(container).attr('class', className);\n const curveInterpolatorFn = pathInterpolators[interpolate];\n const linepath = line()\n .curve(curveInterpolatorFn)\n .x(d => d.update.x)\n .y(d => d.update.y)\n .defined(d => d.update.y !== null);\n\n filteredPoints = points;\n if (connectNullData) {\n filteredPoints = points.filter(d => d.update.y !== null);\n }\n\n updateStyle(mount, style);\n let element = makeElement(mount, 'path', [1]);\n element.classed(points[0].className, true);\n if (!transition.disabled) {\n element = element.transition().duration(transition.duration);\n }\n element.attr('d', linepath(filteredPoints))\n .style('fill-opacity', 0);\n return element;\n};\n","import { CLASSPREFIX } from '../../enums/constants';\n\nexport const defaultConfig = {\n classPrefix: CLASSPREFIX,\n defClassName: 'layer-line',\n className: '',\n interpolate: 'linear',\n transform: {\n type: 'group'\n },\n interaction: {\n highlight: [{\n type: 'stroke',\n intensity: [0, 0, -15, 0]\n }],\n fade: [{\n type: 'stroke',\n intensity: [0, 0, +15, 0]\n }],\n focus: [{\n type: 'stroke',\n intensity: [0, 0, +15, 0]\n }]\n },\n nearestPointThreshold: 20,\n encoding: {\n color: {},\n x: {},\n y: {},\n strokeOpacity: {\n value: 1\n }\n },\n transition: {\n effect: 'cubic',\n duration: 1000\n },\n connectNullData: false\n};\n\n","import {\n Voronoi,\n getQualifiedClassName,\n selectElement,\n makeElement,\n FieldType,\n getObjProp\n} from 'muze-utils';\nimport { BaseLayer } from '../../base-layer';\nimport { drawLine } from './renderer';\nimport { defaultConfig } from './default-config';\nimport { ENCODING } from '../../enums/constants';\nimport * as PROPS from '../../enums/props';\nimport {\n attachDataToVoronoi,\n animateGroup,\n getLayerColor,\n positionPoints,\n getIndividualClassName\n} from '../../helpers';\n\nimport './styles.scss';\n\n/**\n * Line Layer creates a line plot.\n * Example :-\n * const config = {\n * encoding = {\n * x: {\n * field: 'date'\n * },\n * y: {\n * field: 'sales'\n * }\n * }\n * };\n * const linelayer = layerFactory.getLayer('line', [dataModel, axes, config]);\n * linelayer.render(container);\n * @class\n */\nexport default class LineLayer extends BaseLayer {\n\n /**\n *Creates an instance of LineLayer.\n * @param {*} args\n * @memberof LineLayer\n */\n constructor (...args) {\n super(...args);\n this._voronoi = new Voronoi();\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof LineLayer\n */\n static formalName () {\n return 'line';\n }\n\n /**\n *\n *\n * @returns\n * @memberof LineLayer\n */\n elemType () {\n return 'path';\n }\n\n /**\n * Default configuration of line layer\n * @return {Object} Default configuration of layer\n */\n static defaultConfig () {\n return defaultConfig;\n }\n\n /**\n *\n *\n * @static\n * @param {*} conf\n * @param {*} userConf\n * @returns\n * @memberof LineLayer\n */\n static defaultPolicy (conf, userConf) {\n const config = BaseLayer.defaultPolicy(conf, userConf);\n const encoding = config.encoding;\n const transform = config.transform;\n const colorField = encoding.color && encoding.color.field;\n\n if (colorField && !transform.groupBy) {\n transform.groupBy = colorField;\n }\n return config;\n }\n\n /**\n * Returns the draw method for line\n * @return {Function} Draw method of line layer\n */\n getDrawFn () {\n return drawLine;\n }\n\n /**\n * Applies selection styles to the elements that fall within the selection set.\n * @param {Array} selectionSet Array of tuple ids.\n * @param {Object} config Configuration for selection.\n * @return {BarLayer} Instance of bar layer.\n */\n highlightPoint () {\n return this;\n }\n\n /**\n * Removes selection styles to the elements that fall within the selection set.\n * @param {Array} selectionSet Array of tuple ids.\n * @param {Object} config Configuration for selection.\n * @return {BarLayer} Instance of bar layer.\n */\n dehighlightPoint () {\n return this;\n }\n\n focusSelection () {\n return this;\n }\n\n focusOutSelection () {\n return this;\n }\n\n fadeOutSelection () {\n return this;\n }\n\n unfadeSelection () {\n return this;\n }\n\n shouldDrawAnchors () {\n return true;\n }\n\n /**\n * Generates the x and y positions for each point\n * @param {Array} data Data Array\n * @param {Object} encoding Visual Encodings of the layer\n * @param {Object} axes Contains the axis\n * @param {number} seriesIndex index of series\n * @return {Array} Array of points\n */\n translatePoints (data, encodingFieldsInf, axes) {\n let points = [];\n const xAxis = axes.x;\n const yAxis = axes.y;\n const colorAxis = axes.color;\n const encoding = this.config().encoding;\n const { xFieldType, yFieldType } = encodingFieldsInf;\n const isXDim = xFieldType === FieldType.DIMENSION;\n const isYDim = yFieldType === FieldType.DIMENSION;\n const key = isXDim ? ENCODING.X : (isYDim ? ENCODING.Y : null);\n const colorEncoding = encoding.color;\n const colorField = colorEncoding.field;\n const fieldsConfig = this.data().getFieldsConfig();\n const colorFieldIndex = colorField && fieldsConfig[colorField].index;\n const style = {};\n const meta = {};\n\n points = data.map((d, i) => {\n const xPx = xAxis.getScaleValue(d.x) + xAxis.getUnitWidth() / 2;\n const yPx = yAxis.getScaleValue(d.y);\n const { color, rawColor } = getLayerColor({ datum: d, index: i }, {\n colorEncoding, colorAxis, colorFieldIndex });\n\n style.stroke = color;\n style['fill-opacity'] = 0;\n meta.stateColor = {};\n meta.originalColor = rawColor;\n meta.colorTransform = {};\n\n const point = {\n enter: {},\n update: {\n x: xPx,\n y: d.y === null ? null : yPx\n },\n style,\n _data: d._data,\n _id: d._id,\n rowId: d._id,\n source: d._data,\n meta\n };\n point.className = getIndividualClassName(d, i, data, this);\n this.cachePoint(d[key], point);\n return point;\n });\n points = positionPoints(this, points);\n return points;\n }\n\n /**\n * Renders the line plot\n * @param {SVGElement} container svg element\n * @return {LineLayer} instance of line layer\n */\n render (container) {\n let points;\n let seriesClassName;\n let style;\n\n const config = this.config();\n const {\n encoding,\n interpolate,\n className,\n defClassName,\n transition\n } = config;\n const store = this._store;\n const normalizedData = store.get(PROPS.NORMALIZED_DATA);\n const transformedData = store.get(PROPS.TRANSFORMED_DATA);\n const fieldsConfig = this.data().getFieldsConfig();\n const axes = this.axes();\n const keys = transformedData.map(d => d.key);\n const qualifiedClassName = getQualifiedClassName(defClassName, this.id(), config.classPrefix);\n const containerSelection = selectElement(container);\n const colorField = encoding.color.field;\n const colorFieldIndex = fieldsConfig[colorField] && fieldsConfig[colorField].index;\n\n this._points = [];\n this._pointMap = {};\n containerSelection.classed(qualifiedClassName.join(' '), true);\n containerSelection.classed(className, true);\n makeElement(container, 'g', normalizedData, null, {\n enter: (group) => {\n animateGroup(group, {\n transition,\n groupAnimateStyle: {\n enter: {\n 'stroke-opacity': 0,\n 'fill-opacity': this.getPathStyle()['fill-opacity']\n },\n update: {\n 'stroke-opacity': encoding.strokeOpacity.value\n }\n }\n });\n },\n update: (group, dataArr, i) => {\n points = this.translatePoints(dataArr, this.encodingFieldsInf(), axes, i);\n this._points.push(points);\n seriesClassName = `${qualifiedClassName[0]}-${keys[i] || i}`.toLowerCase();\n\n let color;\n const colorValFn = encoding.color.value;\n const colorVal = points.find(d => d._data[colorFieldIndex] !== null &&\n d._data[colorFieldIndex] !== undefined);\n\n if (colorValFn) {\n color = colorValFn(dataArr, i, normalizedData);\n } else {\n color = axes.color.getColor(colorVal && colorVal._data[colorFieldIndex]);\n }\n\n style = this.getPathStyle(color);\n this.getDrawFn()({\n container: group.node(),\n interpolate,\n points,\n className: seriesClassName,\n transition,\n style: style || {},\n connectNullData: config.connectNullData\n });\n }\n }, d => d[0]._data[colorFieldIndex] || d[0]._id);\n\n attachDataToVoronoi(this._voronoi, this._points);\n return this;\n }\n\n /**\n * Get the css styles need to be applied on the line path\n * @param {string} color Color value\n * @return {Object} Path styles\n */\n getPathStyle (color) {\n return {\n stroke: color,\n 'fill-opacity': '0'\n };\n }\n\n /**\n * Gets the nearest point closest to the given position\n * @param {number} x x position\n * @param {number} y y position\n * @return {Object} Nearest point information\n */\n getNearestPoint (x, y, config) {\n let searchRadius = config.searchRadius;\n const data = this.data();\n\n if (!data || (data && data.isEmpty())) {\n return null;\n }\n\n searchRadius = searchRadius !== undefined ? searchRadius : this.config().nearestPointThreshold;\n const point = this._voronoi.find(x, y, searchRadius);\n const dimensions = getObjProp(point, 'data', 'data', 'update');\n\n if (point) {\n const { _data, _id } = point.data.data;\n const identifiers = this.getIdentifiersFromData(_data, _id);\n return {\n id: identifiers,\n dimensions: [{\n x: dimensions.x,\n y: dimensions.y,\n width: 2,\n height: 2\n }],\n layerId: this.id()\n };\n }\n return null;\n }\n}\n","import {\n easeFns,\n selectElement,\n pathInterpolators,\n Symbols\n} from 'muze-utils';\n\nconst area = Symbols.area;\n/**\n * Draws a line from the points\n * Generates a svg path string\n * @param {Object} params Contains container, points and interpolate attribute.\n */\nconst /* istanbul ignore next */ drawArea = (params) => {\n let filteredPoints;\n const { container, points, style, transition, className, connectNullData, interpolate } = params;\n\n const { effect: easeEffect, duration } = transition;\n const mount = selectElement(container);\n const curveInterpolatorFn = pathInterpolators[interpolate];\n const selection = mount.selectAll('path').data([params.points]);\n const [enterAreaPath, updateAreaPath] = ['enter', 'update'].map(e => area().curve(curveInterpolatorFn)\n .x(d => d[e].x)\n .y1(d => d[e].y)\n .y0(d => d[e].y0)\n .defined(d => d[e].y !== null\n ));\n\n filteredPoints = points;\n mount.attr('class', className);\n if (connectNullData) {\n filteredPoints = points.filter(d => d.update.y !== null);\n }\n const selectionEnter = selection.enter().append('path').attr('d', enterAreaPath(filteredPoints));\n selection.merge(selectionEnter).transition().ease(easeFns[easeEffect])\n .duration(duration)\n .attr('d', updateAreaPath(filteredPoints))\n .each(function (d) {\n const element = selectElement(this);\n\n element.classed(d[0].className, true);\n Object.keys(style).forEach(key => element.style(key, style[key]));\n });\n};\n\nexport default drawArea;\n","import { FieldType } from 'muze-utils';\nimport { defaultConfig } from './default-config';\nimport { LineLayer } from '../line';\nimport drawArea from './renderer';\nimport './styles.scss';\nimport { STACK, ENCODING } from '../../enums/constants';\nimport { getAxesScales, positionPoints, getLayerColor, getIndividualClassName } from '../../helpers';\n\n/**\n * Area Layer creates a area plot.\n * @example\n * const config = {\n * encoding = {\n * x: {\n * field: 'date'\n * },\n * // Top y value\n * y: {\n * field: 'maxTemp'\n * },\n * // Base y value\n * y0: {\n * field: 'minTemp\n * }\n * }\n * };\n * const areaLayer = layerFactory.getLayer('area', [dataModel, axes, config]);\n * areaLayer.render(container);\n * @class\n */\nexport default class AreaLayer extends LineLayer {\n /** oation of line layer\n * @return {Object} Default configuration of layer\n */\n static defaultConfig () {\n return defaultConfig;\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof AreaLayer\n */\n static formalName () {\n return 'area';\n }\n\n /**\n * Calculates the domain from data. It calls its parent class's method which is line layer\n * to get the domain and overwrites the domain according to its need.\n * @return {Array} Domain values\n */\n calculateDomainFromData (data, encodingFieldsInf, fieldsConfig) {\n const domains = super.calculateDomainFromData(data, fieldsConfig);\n [ENCODING.X, ENCODING.Y].forEach((type) => {\n const { [`${type}FieldType`]: fieldType } = encodingFieldsInf;\n if (fieldType === FieldType.MEASURE) {\n domains[type][0] = Math.min(domains[type][0], 0);\n }\n });\n return domains;\n }\n\n /**\n * Returns the drawing method of this layer\n * @return {Function} Draw method\n */\n getDrawFn () {\n return drawArea;\n }\n\n /**\n * Generates the x and y positions for each point\n * @param {Array} data Data Array\n * @param {Object} encoding Visual Encodings of the layer\n * @param {Object} axes Contains the axis\n * @return {Array} Array of points\n */\n translatePoints (data, encodingFieldsInf, axes) {\n let points = [];\n const transformType = this.transformType();\n const colorAxis = axes.color;\n const config = this.config();\n const encoding = config.encoding;\n const colorEncoding = encoding.color;\n const colorField = colorEncoding.field;\n const fieldsConfig = this.data().getFieldsConfig();\n const colorFieldIndex = colorField && fieldsConfig[colorField].index;\n const { xField, yField, y0Field } = encodingFieldsInf;\n const {\n xAxis,\n yAxis\n } = getAxesScales(axes);\n const classNameFn = config.individualClassName;\n const isXDim = fieldsConfig[xField] && fieldsConfig[xField].def.type === FieldType.DIMENSION;\n const isYDim = fieldsConfig[yField] && fieldsConfig[yField].def.type === FieldType.DIMENSION;\n const key = isXDim ? 'x' : (isYDim ? 'y' : null);\n points = data.map((d, i) => {\n const xPx = xAxis.getScaleValue(d.x) + xAxis.getUnitWidth() / 2;\n const yPx = yAxis.getScaleValue(d.y);\n const y0Px = (y0Field || transformType === STACK) ? yAxis.getScaleValue(d.y0) : yAxis.getScaleValue(0);\n const { color, rawColor } = getLayerColor({ datum: d, index: i }, {\n colorEncoding, colorAxis, colorFieldIndex });\n const style = {};\n const meta = {};\n style.fill = color;\n // style['fill-opacity'] = 0;\n meta.stateColor = {};\n meta.originalColor = rawColor;\n meta.colorTransform = {};\n const point = {\n enter: {\n x: xPx,\n y: d.y === null ? d.y : yAxis.getScaleValue(0),\n y0: d.y0 === null ? d.y0 : yAxis.getScaleValue(0)\n },\n update: {\n x: xPx,\n y: d.y === null ? d.y : yPx,\n y0: d.y0 === null ? d.y0 : y0Px\n },\n _id: d._id,\n _data: d._data,\n source: d._data,\n rowId: d._id,\n className: classNameFn ? classNameFn(d, i, data, this) : '',\n style,\n meta\n };\n point.className = getIndividualClassName(d, i, data, this);\n this.cachePoint(d[key], point);\n return point;\n });\n points = positionPoints(this, points);\n return points;\n }\n\n /**\n * Get the css styles need to be applied on the line path\n * @param {string} color Color value\n * @return {Object} Path styles\n */\n getPathStyle (color) {\n return {\n fill: color\n };\n }\n}\n\n","import { CLASSPREFIX } from '../../enums/constants';\n\nexport const defaultConfig = {\n classPrefix: CLASSPREFIX,\n defClassName: 'layer-arc',\n padding: { top: 1, bottom: 1, left: 1, right: 1 },\n className: '',\n minOuterRadius: 10,\n interaction: {\n highlight: [{\n type: 'fill',\n intensity: [0, 0, -15, 0]\n }],\n fade: [{\n type: 'fill',\n intensity: [0, 0, +15, 0]\n }],\n focus: [{\n type: 'fill',\n intensity: [0, 0, +15, 0]\n }]\n },\n height: 100,\n width: 100,\n sort: '',\n cornerRadius: 0,\n padAngle: 0,\n padRadius: 0,\n startAngle: 0,\n endAngle: 360,\n colors: ['#F44336', 'blue', 'green', 'yellow', 'orange', 'purple'],\n transform: {\n type: 'identity'\n },\n encoding: {\n 'stroke-width': {\n value: '2px'\n },\n 'stroke-linejoin': {\n value: 'round'\n },\n angle: {\n value: '1'\n },\n radius: {\n value: '1'\n },\n opacity: {\n value: '1'\n },\n color: {\n value: '1'\n },\n shape: {\n value: '1'\n },\n size: {\n value: '1'\n }\n },\n innerRadiusFixer: 10,\n transition: {\n effect: 'cubic',\n duration: 500\n },\n states: {\n highlight: {\n className: `${CLASSPREFIX}-layer-arc-highlight`\n },\n fadeout: {\n className: `${CLASSPREFIX}-layer-arc-fadeout`\n },\n selected: {\n className: `${CLASSPREFIX}-layer-arc-selected`\n }\n }\n};\n\n","import {\n makeElement,\n selectElement,\n getQualifiedClassName,\n isSimpleObject,\n getDomainFromData,\n Symbols,\n FieldType,\n ReservedFields\n} from 'muze-utils';\nimport { defaultConfig } from './default-config';\nimport { BaseLayer } from '../../base-layer';\nimport * as PROPS from '../../enums/props';\nimport { ASCENDING, OUTER_RADIUS_VALUE } from '../../enums/constants';\nimport { getIndividualClassName } from '../../helpers';\nimport { getRangeValue, getRadiusRange, tweenPie, tweenExitPie, getFieldIndices, getPreviousPoint } from './arc-helper';\nimport './styles.scss';\n\nconst pie = Symbols.pie;\nconst arc = Symbols.arc;\n\n/**\n * Arc Layer creates a plot with polar coordinates\n * Example :-\n * const config = {\n * height: 100,\n * width: 100,\n * startAngle: 0,\n * endAngle: Math.PI,\n * cornerRadius: 10,\n * minOuterRadius: 10,\n * outerRadius: 10,\n * innerRadius: 5,\n * padAngle: 2,\n * padRadius: 2,\n * colors: []\n * padding: {top: 10, bottom: 10, left: 10, right: 10},\n * encoding = {\n * angle: {\n * field: 'date' //Maps to angle of arc\n * },\n * radius: {\n * field: 'sales' // Maps to radius of arc\n * }\n * }\n * };\n * @class\n */\nexport default class ArcLayer extends BaseLayer {\n\n constructor (data, axes, config, dependencies) {\n super(data, axes, config, dependencies);\n this._prevPieData = {};\n }\n\n /**\n * returns the default configuration of the layer\n *\n * @static\n * @return {Object} Default configuration for arc layer\n * @memberof ArcLayer\n */\n static defaultConfig () {\n return defaultConfig;\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof ArcLayer\n */\n static formalName () {\n return 'arc';\n }\n\n /**\n *\n *\n * @returns\n * @memberof ArcLayer\n */\n elemType () {\n return 'path';\n }\n\n /**\n * Transforms data in the appropriate data structure to be consumed by the layer for rendering\n *\n * @param {Object} data data model associated with the layer\n * @param {Object} config configuration of the layer that contains encoding and other parameters\n * @return {Object} Transformed pie data\n * @memberof ArcLayer\n */\n getTransformedData (dataModel, config) {\n let pieData = [];\n const pieIndex = {};\n const {\n startAngle,\n endAngle,\n encoding,\n sort,\n minOuterRadius\n } = config;\n const prevData = this._store.get(PROPS.TRANSFORMED_DATA) || [];\n const fieldsConfig = this.data().getFieldsConfig();\n const {\n angleIndex,\n sizeIndex,\n radiusIndex,\n colorIndex\n } = getFieldIndices(encoding, fieldsConfig);\n const dataVal = dataModel.getData();\n const data = dataVal.data;\n const uids = dataVal.uids;\n\n this._prevPieData = {};\n\n prevData.forEach((e, index) => {\n this._prevPieData[e.uid] = [e, index];\n pieIndex[e.index] = e;\n });\n // Creating pie data using angle field provided. If the angle field is a dimension,\n // all the angles will be equal(360/number of dimensions)\n\n pieData = pie()\n .startAngle((startAngle / 180) * Math.PI)\n .endAngle(Math.PI * endAngle / 180)\n .value(d => d[angleIndex] || 1)\n .sortValues(null);\n\n sort.length && radiusIndex && pieData.sort((a, b) => {\n if (sort === ASCENDING) {\n return a[radiusIndex] - b[radiusIndex];\n } return b[radiusIndex] - a[radiusIndex];\n });\n const sizeVal = data.reduce((acc, d) => acc + (d[sizeIndex] || 0), 1);\n\n // Adding the radius field values to each data point in pie data\n pieData = pieData(data).map((d, i) => {\n d.outerRadiusValue = data[i][radiusIndex] || minOuterRadius;\n d.innerRadius = config.innerRadius;\n d.colorVal = data[i][colorIndex];\n d.angleVal = data[i][angleIndex];\n d.sizeVal = sizeVal;\n d.uid = uids[i];\n d.rowId = d.uid;\n d.source = data[i];\n d._previousInfo = this._prevPieData[d.uid] ? this._prevPieData[d.uid][0] :\n getPreviousPoint(pieIndex, d.index, config);\n return d;\n });\n return pieData;\n }\n\n /**\n * Returns normalized data after transformation (it is the same in the case of pie layer)\n *\n * @param {Object} data transformed data\n * @return {Object} normalized data\n * @memberof ArcLayer\n */\n getNormalizedData (data) {\n return data;\n }\n\n /**\n *\n *\n * @param {Object} data\n * @return {}\n * @memberof ArcLayer\n */\n calculateDomainFromData (data) {\n const domainKey = OUTER_RADIUS_VALUE;\n return {\n radius: getDomainFromData([data], [domainKey, domainKey])\n };\n }\n\n /**\n *\n *\n * @param {Object} x\n * @param {Object} y\n * @return {}\n * @memberof ArcLayer\n */\n getNearestPoint (x, y, config = {}) {\n const dataPoint = selectElement(config.event.target).data()[0];\n if (isSimpleObject(dataPoint)) {\n const { data, uid } = dataPoint.datum;\n return {\n id: this.getIdentifiersFromData(data, uid),\n layerId: this.id()\n };\n }\n return null;\n }\n\n /**\n *\n *\n * @param {*} set\n * @returns\n * @memberof ArcLayer\n */\n getPlotElementsFromSet (set) {\n return selectElement(this.mount()).selectAll(this.elemType()).filter(d => set.indexOf(d.datum.uid) !== -1);\n }\n\n /**\n *\n *\n * @param {Object} container\n * @return {}\n * @memberof ArcLayer\n */\n render (container) {\n const {\n height,\n width\n } = this.measurement();\n const {\n classPrefix,\n defClassName,\n minOuterRadius,\n innerRadius,\n outerRadius,\n cornerRadius,\n padAngle,\n padRadius,\n padding,\n transition,\n innerRadiusFixer\n } = this.config();\n const sizeAxis = this.axes().size;\n const store = this._store;\n const transformedData = store.get(PROPS.TRANSFORMED_DATA);\n const chartHeight = height - padding.top - padding.bottom;\n const chartWidth = width - padding.left - padding.right;\n const qualClassName = getQualifiedClassName(defClassName, this.id(), classPrefix);\n // Sets range for radius\n const range = getRadiusRange(chartWidth, chartHeight, {\n minOuterRadius,\n innerRadius,\n outerRadius,\n innerRadiusFixer\n });\n const colorAxis = this.axes().color;\n const defaultRadius = outerRadius || Math.min(chartHeight, chartWidth) / 2;\n const radiusDomain = store.get(PROPS.DOMAIN).radius;\n const rangeValueGetter = d => getRangeValue(d, range, radiusDomain, defaultRadius, sizeAxis);\n // This returns a function that generates the arc path based on the datum provided\n const path = arc()\n // .outerRadius(d => rangeValueGetter(d))\n .innerRadius(innerRadius ? Math.min(chartHeight / 2, chartWidth / 2, innerRadius) : 0)\n .cornerRadius(cornerRadius)\n .padAngle(padAngle)\n .padRadius(padRadius);\n this._chartWidth = chartWidth;\n this._chartHeight = chartHeight;\n // Creating the group that holds all the arcs\n const g = makeElement(selectElement(container), 'g', [1], `${qualClassName[0]}-group`)\n .classed(`${qualClassName[1]}-group`, true)\n .attr('transform', `translate(${chartWidth / 2},${chartHeight / 2})`);\n const tween = (elem) => {\n makeElement(elem, 'path', (d, i) => [{\n datum: d,\n index: i,\n arcFn: path,\n meta: {\n originalColor: colorAxis.getRawColor(d.colorVal),\n stateColor: {},\n colorTransform: {}\n }\n }], `${qualClassName[0]}-path`)\n .style('fill', d => colorAxis.getColor(d.datum.colorVal))\n .transition()\n .duration(transition.duration)\n .attrTween('d', (...params) => tweenPie(path, rangeValueGetter, params))\n .attr('class', (d, i) => {\n const individualClass = getIndividualClassName(d, i, transformedData, this);\n return `${qualClassName[0]}-path ${qualClassName[1]}-path-${d.index}\n ${individualClass}`;\n });\n };\n const consecutiveExits = [];\n let exitCounter = 0;\n const tweenExit = (elem, d) => {\n let exitArr = consecutiveExits[exitCounter];\n const oldExitCounter = exitCounter;\n if (!exitArr) {\n exitArr = [{ elem, datum: d }];\n } else if (exitArr[exitArr.length - 1].datum.index === d.index - 1) {\n exitArr.push({ elem, datum: d });\n } else {\n exitCounter++;\n }\n consecutiveExits[oldExitCounter] = exitArr;\n };\n // Creating groups for all the arcs present individually\n makeElement(g, 'g', transformedData, `${qualClassName[0]}`,\n {\n update: tween,\n exit: tweenExit\n })\n .attr('class', (d, i) => `${qualClassName[0]} ${qualClassName[1]}-${i}`);\n tweenExitPie(consecutiveExits, transition, rangeValueGetter, path);\n return this;\n }\n\n /**\n *\n *\n * @param {*} identifiers\n * @returns\n * @memberof BaseLayer\n */\n getPointsFromIdentifiers (identifiers) {\n if (!this.data()) {\n return [];\n }\n const fieldNames = identifiers[0];\n const values = identifiers.slice(1, identifiers.length);\n const pieSlices = selectElement(this.mount()).selectAll('path').data();\n const fieldsConfig = this.data().getFieldsConfig();\n\n const filteredPies = pieSlices.filter((tData) => {\n const data = tData.datum.data;\n const uid = tData.datum.uid;\n return fieldNames.every((field, idx) => {\n if (field in fieldsConfig && fieldsConfig[field].def.type === FieldType.DIMENSION) {\n return values.findIndex(d => d[idx] === data[fieldsConfig[field].index]) !== -1;\n } else if (field === ReservedFields.ROW_ID) {\n return values.findIndex(d => d[idx] === uid) !== -1;\n } return true;\n });\n });\n\n const pieSliceInf = filteredPies[0];\n if (pieSliceInf) {\n const centroid = pieSliceInf.arcFn.centroid(pieSliceInf.datum);\n return [{\n x: centroid[0] + this._chartWidth / 2,\n y: centroid[1] + this._chartHeight / 2,\n width: 2,\n height: 2\n }];\n }\n return [];\n }\n}\n\n","import { getObjProp, interpolator, FieldType, selectElement } from 'muze-utils';\nimport { ANGLE, RADIUS, SIZE, COLOR } from '../../enums/constants';\n\n/**\n * Returns the range value from a value inside the domain\n *\n * @param {Object} domainValue Value whose range has to be returned\n * @return {number} range value\n * @memberof ArcLayer\n */\nexport const getRangeValue = (datum, range, domain, defaultRadius, sizeAxis) => {\n let domainMultiplier = 1;\n const {\n outerRadiusValue,\n sizeVal\n } = datum;\n const sizeAxisDomain = sizeAxis.domain();\n const sizeMultiplier = sizeAxis.getSize(sizeVal) / (sizeAxisDomain ? sizeAxis.range()[1] : sizeAxis.config().value);\n\n domainMultiplier *= (range[1] - range[0]) / (domain[1] - domain[0]);\n const rangeVal = (range[0] + (outerRadiusValue - domain[0]) * domainMultiplier);\n return (rangeVal || defaultRadius) * sizeMultiplier;\n};\n\n/**\n *\n *\n * @memberof ArcLayer\n */\nexport const getRadiusRange = (width, height, config) => {\n const {\n minOuterRadius,\n innerRadius,\n outerRadius,\n innerRadiusFixer\n } = config;\n\n return [Math.max((innerRadius + innerRadiusFixer || 0), minOuterRadius), outerRadius || Math.min(height,\n width) / 2];\n};\nexport const getPreviousPoint = (prevData, currIndex, config) => {\n const prevArc = prevData[currIndex - 1];\n const nextArc = prevData[currIndex];\n\n if (prevArc && nextArc) {\n return {\n startAngle: prevArc.endAngle,\n endAngle: nextArc.startAngle\n };\n } else if (!nextArc) {\n return {\n startAngle: config.endAngle * Math.PI * 2 / 360,\n endAngle: config.endAngle * Math.PI * 2 / 360\n };\n }\n return {\n startAngle: config.startAngle * Math.PI * 2 / 360,\n endAngle: config.startAngle * Math.PI * 2 / 360\n };\n};\n\n/**\n *\n *\n * @param {*} path\n * @param {*} b\n * @returns\n * @memberof ArcLayer\n */\nexport const tweenPie = (path, rangeValueGetter, b) => {\n const { datum } = b[0];\n const outerRadius = rangeValueGetter(datum);\n datum.outerRadius = outerRadius;\n datum._previousInfo.outerRadius = datum._previousInfo.outerRadius || outerRadius;\n return function (t) {\n return path(interpolator()(datum._previousInfo, datum)(t));\n };\n};\n\n/**\n *\n *\n * @param {*} path\n * @param {*} b\n * @returns\n * @memberof ArcLayer\n */\nexport const tweenExitPie = (consecutiveExits, transition, rangeValueGetter, path) => {\n if (consecutiveExits.length > 0) {\n consecutiveExits.forEach((consecutiveExitArr) => {\n const startAngle = consecutiveExitArr[0].datum.startAngle;\n const endAngle = consecutiveExitArr[consecutiveExitArr.length - 1].datum.endAngle;\n const mid = (Math.PI * 2 * startAngle) / ((Math.PI * 2) + startAngle - endAngle);\n\n consecutiveExitArr.forEach((e) => {\n const { elem, datum } = e;\n\n elem.each(function () {\n const gElem = selectElement(this);\n gElem.selectAll('path')\n .transition()\n .duration(transition.duration)\n .attrTween('d', () => function (t) {\n const outerRadius = rangeValueGetter(datum);\n datum.outerRadius = outerRadius;\n return path(interpolator()(datum, {\n startAngle: mid,\n endAngle: mid,\n outerRadius\n })(t));\n })\n .remove();\n gElem.remove();\n });\n });\n });\n }\n};\n\nexport const getFieldIndices = (encoding, fieldsConfig) => {\n const [angleField, radiusField, colorField, sizeField] = [ANGLE, RADIUS, COLOR, SIZE]\n .map(e => encoding[e].field);\n const [angleIndex, sizeIndex, radiusIndex] = [angleField, sizeField, radiusField]\n .map((e) => {\n const conf = fieldsConfig[e];\n if (conf && conf.def.type === FieldType.MEASURE) {\n return conf.index;\n }\n return null;\n });\n const colorIndex = getObjProp(fieldsConfig, colorField, 'index');\n return {\n angleIndex,\n sizeIndex,\n radiusIndex,\n colorIndex\n };\n};\n","import {\n setAttrs,\n setStyles,\n selectElement,\n makeElement,\n getSmartComputedStyle\n} from 'muze-utils';\n\n/**\n * Draws svg text in the specified container.\n * @param {SVGElement} container Container where labels will be appended.\n * @param {Array.} data Data of the elements.\n * @return {Selection} d3 selection of the elements.\n */\nconst drawText = (container, data, config, smartLabel) => {\n const selection = selectElement(container).selectAll('g').data(data);\n\n const selectionMerge = selection.enter().append('g')\n .each(function (dataObj) {\n setAttrs(this, dataObj.enter);\n })\n .merge(selection);\n const style = getSmartComputedStyle(selectElement(container), config.className);\n const fontSize = parseInt(style.fontSize, 10);\n\n smartLabel.setStyle(style);\n selectionMerge.each(function (dataObj) {\n const element = selectElement(this);\n const { update, text, color, textanchor, style: textStyle } = dataObj;\n const background = dataObj.background;\n let backgroundVal;\n if (backgroundVal = background.value) {\n const backgroundPadding = background.padding;\n let diff;\n const { width, height } = smartLabel.getOriSize(dataObj.text);\n const backgroundEl = makeElement(element, 'rect', [1]);\n\n if (textanchor === 'end') {\n diff = width;\n } else if (textanchor === 'start') {\n diff = 0;\n } else {\n diff = width / 2;\n }\n\n setAttrs(backgroundEl.node(), {\n x: update.x - diff - backgroundPadding / 2,\n y: update.y - fontSize - backgroundPadding / 2,\n width: width + backgroundPadding,\n height: height + backgroundPadding\n });\n background && setStyles(backgroundEl, {\n background: backgroundVal\n });\n }\n const textEl = makeElement(element, 'text', d => [d]).text(text);\n const textNode = textEl.node();\n textStyle && setStyles(textNode, textStyle);\n color && setStyles(textNode, {\n fill: color\n });\n dataObj.className && textEl.classed(dataObj.className, true);\n setAttrs(textNode, update);\n textEl.attr('text-anchor', textanchor);\n });\n selection.exit().remove();\n return selection;\n};\n\nexport default drawText;\n","import { CLASSPREFIX } from '../../enums/constants';\n\nexport const defaultConfig = {\n defClassName: 'layer-text',\n classPrefix: CLASSPREFIX,\n className: '',\n transform: {\n type: 'identity'\n },\n interaction: {\n highlight: [{\n type: 'fill',\n intensity: [0, 0, -15, 0]\n }],\n fade: [{\n type: 'fill',\n intensity: [0, 0, +15, 0]\n }],\n focus: [{\n type: 'fill',\n intensity: [0, 0, +15, 0]\n }]\n },\n transition: {\n effect: 'cubic',\n duration: 1000\n },\n encoding: {\n color: {},\n text: {\n value: '',\n background: {\n padding: 10\n }\n }\n },\n states: {\n highlight: {\n className: `${CLASSPREFIX}-layer-text-highlight`\n },\n fadeout: {\n className: `${CLASSPREFIX}-layer-text-fadeout`\n },\n selected: {\n className: `${CLASSPREFIX}-layer-text-selected`\n }\n }\n};\n","import {\n getQualifiedClassName,\n selectElement,\n setStyles,\n createElements\n} from 'muze-utils';\nimport { BaseLayer } from '../../base-layer';\nimport drawText from './renderer';\nimport { defaultConfig } from './default-config';\nimport { getLayerColor, positionPoints, getIndividualClassName } from '../../helpers';\nimport { TEXT_ANCHOR_MIDDLE, ENCODING } from '../../enums/constants';\nimport * as PROPS from '../../enums/props';\n\nimport './styles.scss';\n\n/**\n * Text Layer creates labels. It needs to be passed a data table, axes and configuration\n * of the layer.\n * Example :-\n * const textLayer = layerFactory.getLayer('text', [dataModel, axes, config]);\n * textLayer.render(container);\n * @class\n */\nexport default class TextLayer extends BaseLayer {\n /**\n * Returns the default configuration of the text layer\n * @return {Object} Default configuration of the text layer\n */\n static defaultConfig () {\n return defaultConfig;\n }\n\n static formalName () {\n return 'text';\n }\n\n elemType () {\n return 'text';\n }\n\n /**\n * Generates an array of objects containing x, y, width and height of the points from the data\n * @param {Array.} data Data Array\n * @param {Object} encoding Config\n * @param {Object} axes Axes object\n * @return {Array.} Array of points\n */\n translatePoints (data, encoding, axes) {\n let points = [];\n const colorAxis = axes.color;\n const textEncoding = encoding.text;\n const { field: textField, value, formatter: textFormatter } = textEncoding;\n const colorEncoding = encoding.color;\n const colorField = colorEncoding && colorEncoding.field;\n const fieldsConfig = this.data().getFieldsConfig();\n\n const backgroundEncoding = encoding.text.background;\n const backgroundPadding = backgroundEncoding.padding;\n const backgroundValue = backgroundEncoding.value;\n const colorFieldIndex = fieldsConfig[colorField] ? fieldsConfig[colorField].index : -1;\n const textFieldIndex = textField ? fieldsConfig[textField] && fieldsConfig[textField].index : -1;\n const xEnc = ENCODING.X;\n const yEnc = ENCODING.Y;\n for (let i = 0, len = data.length; i < len; i++) {\n const d = data[i];\n const row = d._data;\n const textValue = textField ? row[textFieldIndex] : value;\n\n const [xPx, yPx] = [xEnc, yEnc].map(type => (axes[type] ? axes[type].getScaleValue(d[type]) +\n axes[type].getUnitWidth() / 2 : 0));\n\n const { color, rawColor } = getLayerColor({ datum: d, index: i },\n { colorEncoding, colorAxis, colorFieldIndex });\n\n const point = {\n enter: {},\n update: {\n x: xPx,\n y: yPx\n },\n text: textFormatter ? textFormatter(textValue) : textValue,\n color,\n background: {\n value: backgroundValue instanceof Function ? backgroundValue(d, i, data, this) : null,\n padding: backgroundPadding\n },\n meta: {\n stateColor: {},\n originalColor: rawColor,\n colorTransform: {}\n },\n style: {},\n _data: row,\n _id: d._id,\n source: d._data,\n rowId: d._id\n };\n\n if (d.x !== null && d.y !== null) {\n points.push(point);\n }\n\n point.className = getIndividualClassName(d, i, data, this);\n }\n\n points = positionPoints(this, points);\n\n return points;\n }\n\n /**\n * Renders the plot in the given container\n * @param {SVGElement} container SVGElement which will hold the plot\n * @return {textLayer} Instance of text layer\n */\n render (container) {\n let points;\n const config = this.config();\n const encoding = config.encoding;\n const normalizedData = this._store.get(PROPS.NORMALIZED_DATA);\n const className = config.className;\n const qualifiedClassName = getQualifiedClassName(config.defClassName, this.id(), config.classPrefix);\n const axes = this.axes();\n const containerSelection = selectElement(container);\n\n containerSelection.classed(`${qualifiedClassName.join(' ')} ${className}`, true);\n createElements({\n data: normalizedData,\n append: 'g',\n selector: 'g',\n container,\n each: (dataArr, group, i) => {\n const node = group.node();\n points = this.translatePoints(dataArr, encoding, axes, i);\n setStyles(node, {\n 'text-anchor': TEXT_ANCHOR_MIDDLE\n });\n drawText(node, points, {\n className: qualifiedClassName[0]\n }, this._dependencies.smartLabel);\n }\n });\n return this;\n }\n}\n","/* global Element, document */\nimport {\n makeElement,\n selectElement,\n easeFns,\n objectIterator,\n getSymbol\n} from 'muze-utils';\n\n/**\n *\n *\n * @param {*} str\n * @returns\n */\nconst checkPath = (str) => {\n if (/^[mzlhvcsqta]\\s*[-+.0-9][^mlhvzcsqta]+/i.test(str) && /[\\dz]$/i.test(str) && str.length > 4) {\n return true;\n }\n return false;\n};\n\n/**\n *\n *\n * @param {*} d\n * @param {*} elem\n */\nconst createShape = function (d, elem) {\n const groupElement = selectElement(elem);\n const { shape, size, update } = d;\n\n if (shape instanceof Promise) {\n shape.then((res) => {\n d.shape = res;\n createShape(d, elem);\n });\n } else if (shape instanceof Element) {\n let newShape = shape.cloneNode(true);\n\n if (newShape.nodeName.toLowerCase() === 'img') {\n const src = newShape.src || newShape.href;\n newShape = document.createElementNS('http://www.w3.org/2000/svg', 'image');\n newShape.setAttribute('href', src);\n }\n const shapeElement = selectElement(newShape);\n if (newShape.nodeName === 'path' || newShape.nodeName === 'image') {\n shapeElement.attr('transform', `scale(${size / 100})`);\n } else {\n shapeElement.attr('height', size);\n shapeElement.attr('width', size);\n }\n shapeElement.attr('x', -size / 2);\n shapeElement.attr('y', -size / 2);\n selectElement(groupElement.node().appendChild(newShape));\n } else if (typeof shape === 'string') {\n let pathStr;\n if (checkPath(shape)) {\n pathStr = shape;\n } else {\n pathStr = getSymbol(shape).size(size)(update);\n }\n makeElement(groupElement, 'path', data => [data]).attr('d', pathStr);\n } else {\n d.shape = 'circle';\n createShape(d, elem);\n }\n};\n\n/**\n * Draws symbols using d3 symbol api\n * @param {Object} params Contains the svg container, points and other symbol related attributes.\n */\n/* istanbul ignore next */ const drawSymbols = (params) => {\n let mergedGroups;\n const { container, points, transition, className } = params;\n const { duration, effect, disabled } = transition;\n const mount = selectElement(container);\n\n mount.attr('class', className);\n const symbolGroups = mount.selectAll('g').data(points, params.keyFn);\n const symbolEnter = symbolGroups.enter().append('g').attr('transform', d => `translate(${d.enter.x},${d.enter.y})`);\n mergedGroups = symbolGroups.merge(symbolEnter)\n .each(function (d) {\n createShape(d, this);\n });\n mergedGroups = disabled ? mergedGroups : mergedGroups.transition().duration(disabled ? 0 : transition.duration);\n mergedGroups.attr('transform', d => `translate(${d.update.x},${d.update.y})`)\n .each(function (d) {\n const style = d.style;\n const element = selectElement(this);\n objectIterator(style, key => element.style(key, style[key]));\n element.attr('class', `${className}`);\n element.classed(d.className, true);\n });\n\n const exitGroups = symbolGroups.exit();\n if (!disabled) {\n exitGroups.transition().ease(easeFns[effect])\n .duration(duration)\n .on('end', function () {\n selectElement(this).remove();\n })\n .style('fill-opacity', 0)\n .style('stroke-opacity', 0);\n } else {\n exitGroups.remove();\n }\n};\n\nexport default drawSymbols;\n","import { CLASSPREFIX } from '../../enums/constants';\n\nexport const defaultConfig = {\n defClassName: 'layer-point',\n className: '',\n classPrefix: CLASSPREFIX,\n defColorStyle: 'stroke',\n interaction: {\n highlight: [{\n type: 'fill',\n intensity: [0, 0, -20, 0]\n }],\n fade: [{\n type: 'fill',\n intensity: [0, 0, +20, 0]\n }],\n focus: [{\n type: 'fill',\n intensity: [0, 0, +20, 0]\n }\n ]\n },\n innerPadding: 0.1,\n nearestPointThreshold: 10,\n transform: {\n type: 'identity'\n },\n transition: {\n effect: 'cubic',\n duration: 1000\n },\n encoding: {\n size: {\n value: 30\n },\n color: { },\n shape: {\n value: 'circle'\n },\n x: {},\n y: {},\n strokeOpacity: {\n value: 0.5\n },\n fillOpacity: {\n value: 0.5\n }\n },\n shapes: ['circle', 'cross', 'diamond', 'square', 'star', 'wye', 'triangle'],\n sizes: [20, 30, 40, 50, 60, 70]\n};\n","import {\n Voronoi,\n selectElement,\n getQualifiedClassName,\n makeElement,\n FieldType,\n Scales\n} from 'muze-utils';\nimport { BaseLayer } from '../../base-layer';\nimport drawSymbols from './renderer';\nimport { defaultConfig } from './default-config';\nimport { ENCODING } from '../../enums/constants';\nimport * as PROPS from '../../enums/props';\nimport {\n attachDataToVoronoi,\n getLayerColor,\n positionPoints,\n getPlotMeasurement,\n getIndividualClassName\n} from '../../helpers';\n\nimport './styles.scss';\n\n/**\n * Point Layer creates point. Itt needs to be passed a data table, axes and configuration\n * of the layer.\n * Example :-\n * const pointLayer = layerFactory.getLayer('point', [data, axes, config]);\n * pointLayer.render(container);\n * @class\n */\nexport default class PointLayer extends BaseLayer {\n\n /**\n * Creates an instance of PointLayer.\n * @param {*} args\n * @memberof PointLayer\n */\n constructor (...args) {\n super(...args);\n this._voronoi = new Voronoi();\n this._bandScale = Scales.band();\n }\n\n /**\n *\n *\n * @returns\n * @memberof PointLayer\n */\n elemType () {\n return 'g';\n }\n\n /**\n * Returns the default configuration of the point layer\n * @return {Object} Default configuration of the point layer\n */\n static defaultConfig () {\n return defaultConfig;\n }\n\n static defaultPolicy (conf, userConf) {\n const config = BaseLayer.defaultPolicy(conf, userConf);\n const encoding = config.encoding;\n const transform = config.transform;\n const colorField = encoding.color && encoding.color.field;\n\n if (colorField) {\n transform.groupBy = colorField;\n }\n return config;\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof PointLayer\n */\n static formalName () {\n return 'point';\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof PointLayer\n */\n static drawFn () {\n return drawSymbols;\n }\n\n /**\n * Generates an array of objects containing x, y, width and height of the points from the data\n * @param {Array.} data Data Array\n * @param {Object} encoding Config\n * @param {Object} axes Axes object\n * @return {Array.} Array of points\n */\n translatePoints (data, encoding, axes, config = {}) {\n let points = [];\n const {\n size: sizeEncoding,\n shape: shapeEncoding,\n color: colorEncoding,\n x,\n y\n } = encoding;\n const sizeField = sizeEncoding.field;\n const sizeValue = sizeEncoding.value;\n const shapeField = shapeEncoding.field;\n const xField = x.field;\n const yField = y.field;\n const { size: sizeAxis, shape: shapeAxis } = axes;\n const fieldsConfig = this.data().getFieldsConfig();\n const isXDim = fieldsConfig[xField] && fieldsConfig[xField].def.type === FieldType.DIMENSION;\n const isYDim = fieldsConfig[yField] && fieldsConfig[yField].def.type === FieldType.DIMENSION;\n const key = isXDim ? ENCODING.X : (isYDim ? ENCODING.Y : null);\n const colorField = colorEncoding && colorEncoding.field;\n const colorFieldIndex = fieldsConfig[colorField] && fieldsConfig[colorField].index;\n const measurement = this._store.get(PROPS.MEASUREMENT);\n const shapeFieldIndex = fieldsConfig[shapeField] && fieldsConfig[shapeField].index;\n const sizeFieldIndex = fieldsConfig[sizeField] && fieldsConfig[sizeField].index;\n const colorAxis = axes.color;\n const { x: offsetX, y: offsetY } = config.offset;\n\n for (let i = 0, len = data.length; i < len; i++) {\n const d = data[i];\n const row = d._data;\n const size = sizeValue instanceof Function ? sizeValue(d, i) : sizeAxis.getSize(row[sizeFieldIndex]);\n const shape = shapeAxis.getShape(row[shapeFieldIndex]);\n\n let [xPx, yPx] = [ENCODING.X, ENCODING.Y].map((type) => {\n const value = d[type] === null ? undefined : d[type];\n const measure = type === ENCODING.X ? measurement.width : measurement.height;\n return !encoding[type].field ? measure / 2 : axes[type].getScaleValue(value);\n });\n\n xPx += offsetX;\n yPx += offsetY;\n\n const { color, rawColor } = getLayerColor({ datum: d, index: i },\n { colorEncoding, colorAxis, colorFieldIndex });\n\n const style = {\n fill: color,\n stroke: color\n };\n\n if (!isNaN(xPx) && !isNaN(yPx)) {\n const point = {\n enter: {\n x: xPx,\n y: yPx\n },\n update: {\n x: xPx,\n y: yPx\n },\n shape,\n size: Math.abs(size),\n meta: {\n stateColor: {},\n originalColor: rawColor,\n colorTransform: {}\n },\n style,\n _data: row,\n _id: d._id,\n source: d._data,\n rowId: d._id\n };\n point.className = getIndividualClassName(d, i, data, this);\n points.push(point);\n this.cachePoint(d[key], point);\n }\n }\n points = positionPoints(this, points);\n return points;\n }\n\n /**\n * Renders the plot in the given container.\n *\n * @param {SVGElement} container SVGElement which will hold the plot\n * @return {BarLayer} Instance of bar layer\n */\n render (container) {\n let maxSize = 0;\n let seriesClassName;\n const config = this.config();\n const keys = this._store.get(PROPS.TRANSFORMED_DATA).map(d => d.key);\n const { transition, className, defClassName, classPrefix } = config;\n const normalizedData = this._store.get(PROPS.NORMALIZED_DATA);\n const containerSelection = selectElement(container);\n const qualifiedClassName = getQualifiedClassName(defClassName, this.id(), classPrefix);\n this._points = [];\n this._pointMap = {};\n\n containerSelection.classed(qualifiedClassName.join(' '), true).classed(className, true);\n\n this._points = this.generateDataPoints(normalizedData, keys);\n\n makeElement(container, 'g', this._points, null, {\n update: (group, points) => {\n maxSize = Math.max(maxSize, ...points.map(d => d.size));\n seriesClassName = `${qualifiedClassName[0]}`;\n this.constructor.drawFn()({\n container: group.node(),\n points,\n className: seriesClassName,\n transition,\n keyFn: d => d._id\n });\n }\n }, data => data[0]._id);\n this._maxSize = Math.sqrt(maxSize / Math.PI) * 2;\n attachDataToVoronoi(this._voronoi, this._points);\n return this;\n }\n\n generateDataPoints (normalizedData, keys) {\n const encoding = this.config().encoding;\n const axes = this.axes();\n const [widthMetrics, heightMetrics] = getPlotMeasurement(this, keys);\n const offsetXValues = widthMetrics.offsetValues || [];\n const offsetYValues = heightMetrics.offsetValues || [];\n return normalizedData.map((dataArr, i) => {\n const measurementConf = this.getMeasurementConfig(offsetXValues[i], offsetYValues[i], widthMetrics.span,\n heightMetrics.span);\n return this.translatePoints(dataArr, encoding, axes, measurementConf);\n }).filter(d => d.length);\n }\n\n getMeasurementConfig (offsetX, offsetY, widthSpan, heightSpan) {\n return {\n offset: {\n x: (offsetX || 0) + widthSpan / 2,\n y: (offsetY || 0) + heightSpan / 2\n },\n span: {\n x: widthSpan,\n y: heightSpan\n }\n };\n }\n\n /**\n * Gets the nearest point from a position.\n * @param {number} x x position\n * @param {number} y y position\n * @return {Object} Point details\n */\n getNearestPoint (x, y) {\n const distanceLimit = Math.max(this._maxSize, this.config().nearestPointThreshold);\n\n if (!this.data()) {\n return null;\n }\n\n const point = this._voronoi.find(x, y, distanceLimit);\n const dimensions = point && point.data.data.update;\n const radius = point ? Math.sqrt(point.data.data.size / Math.PI) : 0;\n\n if (point) {\n const { _data, _id } = point.data.data;\n const identifiers = this.getIdentifiersFromData(_data, _id);\n return {\n id: identifiers,\n dimensions: [{\n x: dimensions.x,\n y: dimensions.y,\n width: radius,\n height: radius\n }],\n layerId: this.id()\n };\n }\n return null;\n }\n}\n","import { makeElement, easeFns } from 'muze-utils';\n\n/**\n *\n *\n * @param {*} elem\n * @param {*} datum\n * @param {*} index\n * @param {*} context\n */\nconst transitionBars = (elem, datum, index, context) => {\n const { transition } = context;\n const { duration, disabled, effect } = transition;\n const selection = elem;\n const selTransition = disabled ? selection : selection.transition().duration(duration).ease(easeFns[effect]);\n const update = datum.update || datum;\n const updateStyle = datum.style || {};\n datum.className && selection.classed(datum.className, true);\n Object.entries(update).forEach(attr => (!isNaN(attr[1]) && selTransition.attr(attr[0], attr[1])));\n Object.entries(updateStyle).forEach(styleObj => selection.style(styleObj[0], styleObj[1]));\n};\n\n/**\n *\n *\n * @param {*} elem\n * @param {*} d\n */\nconst barEnterFn = (elem, d) => {\n const selection = elem;\n const enter = d.enter || {};\n Object.entries(enter).forEach(attr => (!isNaN(attr[1]) && selection.attr(attr[0], attr[1])));\n};\n\n/**\n * Draws rectangles by using d3 selection\n * @param {Object} params Contains container element and points\n * @return {Selection} Bar Selection\n */\n/* istanbul ignore next */ export const drawRects = (params) => {\n const { points, container, keyFn } = params;\n const updateFns = {\n enter (elem, d) { barEnterFn(elem, d); },\n update (elem, d, i) { transitionBars(elem, d, i, params); }\n };\n return makeElement(container, 'rect', points, null, updateFns, keyFn);\n};\n","import { CLASSPREFIX } from '../../enums/constants';\n\nexport const defaultConfig = {\n classPrefix: CLASSPREFIX,\n defClassName: 'layer-bar',\n className: '',\n interaction: {\n highlight: [{\n type: 'fill',\n intensity: [0, 0, -15, 0]\n }],\n fade: [{\n type: 'fill',\n intensity: [0, 0, +15, 0]\n }],\n focus: [{\n type: 'fill',\n intensity: [0, 0, +15, 0]\n }]\n },\n transform: {\n type: 'stack'\n },\n transition: {\n effect: 'cubic',\n duration: 1000\n },\n innerPadding: 0.1,\n encoding: {\n color: {},\n x: {},\n y: {},\n x0: {},\n y0: {}\n },\n states: {\n highlight: {\n className: `${CLASSPREFIX}-layer-bar-highlight`\n },\n fadeout: {\n className: `${CLASSPREFIX}-layer-bar-fadeout`\n },\n selected: {\n className: `${CLASSPREFIX}-layer-bar-selected`\n }\n }\n};\n\n","import { FieldType, DimensionSubtype } from 'muze-utils';\nimport * as PROPS from '../../enums/props';\nimport { STACK } from '../../enums/constants';\nimport { getLayerColor, positionPoints, getIndividualClassName } from '../../helpers';\n\n/**\n *\n *\n * @param {*} type\n * @param {*} fieldInfo\n * @param {*} config\n * @param {*} data\n * @returns\n */\nconst resolveDimByField = (type, axesInfo, config, data) => {\n const spaceType = type === 'x' ? 'width' : 'height';\n const [fieldType, axis] = [config[`${type}FieldType`], axesInfo[`${type}Axis`]];\n const {\n transformType,\n sizeEncoding,\n sizeConfig,\n measurement\n } = config;\n\n const sizeValue = sizeEncoding.value;\n let enter = 0;\n let pos;\n let space = 0;\n let enterSpace = 0;\n if (fieldType !== undefined) {\n if (config[`${type}0Field`]) {\n const minVal = data[type];\n const maxVal = data[`${type}0`];\n let min;\n let max;\n if (minVal === null || maxVal === null) {\n return {\n enterSpace: undefined,\n enter: undefined,\n pos: undefined,\n space: undefined\n };\n } else if (fieldType === FieldType.MEASURE || fieldType === DimensionSubtype.TEMPORAL) {\n min = Math.min(minVal, maxVal);\n max = Math.max(minVal, maxVal);\n } else {\n min = minVal;\n max = maxVal;\n }\n const scales = type === 'x' ? [min, max] : [max, min];\n pos = axis.getScaleValue(scales[0]) + axis.getUnitWidth() / 2;\n space = Math.abs(axis.getScaleValue(scales[1]) - pos) + axis.getUnitWidth() / 2;\n\n enter = pos;\n enterSpace = 0;\n } else if (fieldType === DimensionSubtype.CATEGORICAL || fieldType === DimensionSubtype.TEMPORAL) {\n pos = axis.getScaleValue(data[type]) +\n (sizeConfig[type === 'x' ? 'barWidthOffset' : 'barHeightOffset'] || 0);\n\n space = sizeConfig[type === 'x' ? 'barWidth' : 'barHeight'];\n if (sizeValue !== undefined) {\n const diffPx = sizeValue * space;\n space -= diffPx;\n pos += diffPx / 2;\n }\n enter = pos;\n enterSpace = space;\n } else {\n const zeroPos = axis.getScaleValue(0);\n const axisType = axis.getScaleValue(data[type]);\n const axisType0 = axis.getScaleValue(data[`${type}0`]);\n\n enterSpace = 0;\n if (type === 'x') {\n pos = data[type] < 0 || transformType === STACK ? axisType : zeroPos;\n space = Math.abs(pos - (transformType === STACK ? axisType0 : (data[type] >= 0 ? axisType : zeroPos)));\n } else {\n pos = transformType === STACK || data[type] >= 0 ? axisType : zeroPos;\n space = Math.abs(pos - (transformType === STACK ? axisType0 : (data[type] >= 0 ? zeroPos : axisType)));\n }\n enter = zeroPos;\n }\n } else {\n pos = 0;\n space = measurement[spaceType];\n }\n\n return {\n enterSpace,\n enter,\n pos,\n space\n };\n};\n\n/**\n *\n *\n * @param {*} data\n * @param {*} config\n * @param {*} axes\n * @returns\n */\nconst resolveDimensions = (data, config, axes) => {\n const axesInfo = {\n xAxis: axes.x,\n yAxis: axes.y\n };\n const {\n enterSpace: enterWidth,\n enter: enterX,\n pos: xPos,\n space: width\n } = resolveDimByField('x', axesInfo, config, data);\n\n const {\n enterSpace: enterHeight,\n enter: enterY,\n pos: yPos,\n space: height\n } = resolveDimByField('y', axesInfo, config, data);\n return {\n enter: {\n x: enterX,\n y: enterY,\n width: enterWidth,\n height: enterHeight\n },\n update: {\n x: xPos,\n y: yPos,\n width,\n height\n }\n };\n};\n\n/**\n * Generates an array of objects containing x, y, width and height of the bars from the data\n * @param {Array.} data Data Array\n * @param {Object} encoding Config\n * @param {Object} axes Axes object\n * @param {Object} conf config object for point generation\n * @return {Array.} Array of points\n */\nexport const getTranslatedPoints = (context, data, sizeConfig) => {\n let points = [];\n const encoding = context.config().encoding;\n const axes = context.axes();\n const colorAxis = axes.color;\n const fieldsConfig = context.data().getFieldsConfig();\n const colorEncoding = encoding.color;\n const colorField = colorEncoding.field;\n const sizeEncoding = encoding.size || {};\n const {\n x0Field,\n y0Field,\n xFieldSubType,\n yFieldSubType\n } = context.encodingFieldsInf();\n const measurement = context._store.get(PROPS.MEASUREMENT);\n const isXDim = xFieldSubType === DimensionSubtype.CATEGORICAL || xFieldSubType === DimensionSubtype.TEMPORAL;\n const isYDim = yFieldSubType === DimensionSubtype.CATEGORICAL || yFieldSubType === DimensionSubtype.TEMPORAL;\n const key = isXDim ? 'x' : (isYDim ? 'y' : null);\n const transformType = context.transformType();\n const colorFieldIndex = colorField && fieldsConfig[colorField] && fieldsConfig[colorField].index;\n\n for (let i = 0, len = data.length; i < len; i++) {\n const d = data[i];\n const style = {};\n const meta = {};\n const dimensions = resolveDimensions(d, {\n xFieldType: xFieldSubType,\n yFieldType: yFieldSubType,\n x0Field,\n y0Field,\n transformType,\n measurement,\n sizeConfig,\n sizeEncoding\n }, axes);\n\n const { color, rawColor } = getLayerColor({ datum: d, index: i },\n { colorEncoding, colorAxis, colorFieldIndex });\n\n style.fill = color;\n meta.stateColor = {};\n meta.originalColor = rawColor;\n meta.colorTransform = {};\n\n const update = dimensions.update;\n\n if (!isNaN(update.x) && !isNaN(update.y) && d._id !== undefined) {\n let point = null;\n point = {\n enter: dimensions.enter,\n update,\n style,\n _data: d._data,\n _id: d._id,\n source: d._data,\n rowId: d._id,\n meta\n };\n point.className = getIndividualClassName(d, i, data, context);\n points.push(point);\n // Store each point in a hashmap with key as the dimensional or temporal field value\n context.cachePoint(d[key], point);\n }\n }\n\n points = positionPoints(context, points);\n return points;\n};\n","import {\n getClosestIndexOf,\n getQualifiedClassName,\n selectElement,\n createElements,\n clipElement,\n DimensionSubtype,\n FieldType,\n Scales\n} from 'muze-utils';\nimport { BaseLayer } from '../../base-layer';\nimport { drawRects } from './renderer';\nimport { defaultConfig } from './default-config';\nimport * as PROPS from '../../enums/props';\nimport { getPlotMeasurement } from '../../helpers';\nimport './styles.scss';\nimport { getTranslatedPoints } from './bar-helper';\n\nconst MEASURE = FieldType.MEASURE;\nconst scaleBand = Scales.band;\n\n/**\n * Bar Layer creates a bar plot. It needs to be passed a data table, axes and configuration of the layer.\n *\n * @example\n * const BarLayer = layerFactory.getLayer('bar');\n * BarLayer.create()\n * .config(config)\n * .data(dt)\n * .mountPoint(container);\n * @class\n */\nexport default class BarLayer extends BaseLayer {\n /**\n * Creates an instance of bar layer\n */\n constructor (...params) {\n super(...params);\n this._bandScale = scaleBand();\n this._plotPadding = {\n x: 0,\n y: 0\n };\n this._plotSpan = {\n x: 0,\n y: 0\n };\n this._pointMap = {};\n }\n\n /**\n *\n *\n * @returns\n * @memberof BarLayer\n */\n elemType () {\n return 'rect';\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof BarLayer\n */\n static formalName () {\n return 'bar';\n }\n\n /**\n * Returns the default configuration of the bar layer\n * @return {Object} Default configuration of the bar layer\n */\n static defaultConfig () {\n return defaultConfig;\n }\n\n /**\n *\n *\n * @static\n * @param {*} conf\n * @param {*} userConf\n * @returns\n * @memberof BarLayer\n */\n static defaultPolicy (conf, userConf) {\n const config = BaseLayer.defaultPolicy(conf, userConf);\n const encoding = config.encoding;\n const colorField = encoding.color.field;\n const transform = config.transform;\n\n if (colorField) {\n transform.groupBy = colorField;\n }\n return config;\n }\n\n /**\n *\n *\n * @param {*} data\n * @param {*} fieldsConfig\n * @returns\n * @memberof BarLayer\n */\n calculateDomainFromData (data, encodingFieldInf, fieldsConfig) {\n const domain = super.calculateDomainFromData(data, encodingFieldInf, fieldsConfig);\n ['x', 'y'].forEach((d) => {\n if (encodingFieldInf[`${d}FieldType`] === MEASURE && domain[d]) {\n encodingFieldInf[`${d}0Field}`] ? domain[d] = domain[d].sort((a, b) => a - b) :\n (domain[d][0] = Math.min(domain[d][0], 0));\n }\n });\n return domain;\n }\n\n /**\n * Generates an array of objects containing x, y, width and height of the bars from the data\n * @param {Array.} data Data Array\n * @param {Object} encoding Config\n * @param {Object} axes Axes object\n * @param {Object} conf config object for point generation\n * @return {Array.} Array of points\n */\n translatePoints (data, sizeConfig) {\n return getTranslatedPoints(this, data, sizeConfig);\n }\n\n /**\n * Renders the plot in the given container\n * @param {SVGGroup} container SVGGroup where plot will be rendered.\n * @return {BarLayer} Instance of bar layer.\n */\n render (container) {\n const config = this.config();\n const transition = config.transition;\n const store = this._store;\n const normalizedDataArr = store.get(PROPS.NORMALIZED_DATA);\n const transformedData = store.get(PROPS.TRANSFORMED_DATA);\n const keys = transformedData.map(d => d.key);\n const fieldsConfig = this.data().getFieldsConfig();\n const axes = this.axes();\n const height = axes.y && axes.y.scale().range()[0];\n const width = axes.x && axes.x.scale().range()[1];\n const defClassName = config.defClassName;\n const qualifiedClassName = getQualifiedClassName(defClassName, this.id(), config.classPrefix);\n const className = config.className;\n const containerSelection = selectElement(container);\n const dimensions = Object.values(fieldsConfig).filter(e => e.def.type === FieldType.DIMENSION)\n .map(e => e.index);\n containerSelection.classed(qualifiedClassName.join(' '), true);\n containerSelection.classed(className, true);\n clipElement(container, {\n x: 0,\n y: 0,\n width,\n height\n }, `id-${this.id()}`);\n\n this._points = this.generateDataPoints(normalizedDataArr, keys);\n\n createElements({\n data: this._points,\n container,\n selector: 'g',\n append: 'g',\n each: (points, group, i) => {\n const seriesClassName = `${qualifiedClassName[0]}-${keys[i] || i}`.toLowerCase();\n group.style('display', 'block');\n drawRects({\n container: group.node(),\n points,\n className: seriesClassName,\n transition,\n style: {},\n keyFn: d => dimensions.map(key => d._data[key]).join('-')\n });\n }\n });\n return this;\n }\n\n /**\n *\n *\n * @param {*} normalizedData\n * @param {*} keys\n * @returns\n * @memberof BarLayer\n */\n generateDataPoints (normalizedData, keys) {\n const [barWidthMetrics, barHeightMetrics] = getPlotMeasurement(this, keys);\n const barWidthOffsets = barWidthMetrics.offsetValues || [];\n const barHeightOffsets = barHeightMetrics.offsetValues || [];\n this._plotSpan = {\n x: barWidthMetrics.groupSpan || 0,\n y: barHeightMetrics.groupSpan || 0\n };\n this._plotPadding = {\n x: barWidthMetrics.padding || 0,\n y: barHeightMetrics.padding || 0\n };\n\n this._pointMap = {};\n return normalizedData.map((data, i) => this.translatePoints(data,\n {\n barWidth: barWidthMetrics.span,\n barWidthOffset: barWidthOffsets[i] || 0,\n barHeight: barHeightMetrics.span,\n barHeightOffset: barHeightOffsets[i] || 0\n }));\n }\n\n getPlotPadding () {\n return this._plotPadding;\n }\n\n /**\n * Gets the nearest point of the position passed.\n * @param {number} x x position\n * @param {number} y y position\n * @return {Object} Nearest point.\n */\n getNearestPoint (x, y) {\n if (!this.data()) {\n return null;\n }\n let axis;\n let value;\n let index;\n let points;\n let uniqueFieldType;\n let uniqueFieldIndex;\n let filterData;\n let identifiers;\n let pointFound = null;\n const dataModel = this.data();\n const dataObj = dataModel.getData();\n const fieldsConfig = dataModel.getFieldsConfig();\n const axes = this.axes();\n const data = dataObj.data;\n const pointMap = this._pointMap;\n const {\n xField,\n yField,\n xFieldSubType,\n yFieldSubType\n } = this.encodingFieldsInf();\n\n if (xFieldSubType === FieldType.MEASURE) {\n axis = axes.y;\n value = axis.invert(y);\n uniqueFieldIndex = fieldsConfig[yField].index;\n uniqueFieldType = yFieldSubType;\n } else {\n axis = axes.x;\n value = axis.invert(x);\n uniqueFieldIndex = fieldsConfig[xField].index;\n uniqueFieldType = xFieldSubType;\n }\n\n if (uniqueFieldType === DimensionSubtype.CATEGORICAL) {\n points = pointMap[value];\n }\n\n if (uniqueFieldType === DimensionSubtype.TEMPORAL) {\n filterData = [...new Set(data.map(d => d[uniqueFieldIndex]))];\n index = getClosestIndexOf(filterData, value);\n value = filterData[index];\n points = pointMap[value];\n }\n const len = points && points.length;\n points && points.sort((p1, p2) => p1.update.y - p2.update.y);\n for (let i = 0; i < len; i++) {\n const point = points[i];\n const update = point.update;\n if (x >= update.x && x <= (update.width + update.x) && y >= update.y && y <= (update.height + update.y)) {\n pointFound = point;\n break;\n }\n pointFound = null;\n }\n\n const values = pointFound && pointFound._data;\n if (values) {\n identifiers = this.getIdentifiersFromData(values, pointFound._id);\n }\n return pointFound ? {\n dimensions: [pointFound.update],\n id: identifiers,\n layerId: this.id()\n } : pointFound;\n }\n\n getPlotSpan () {\n return this._plotSpan;\n }\n}\n","import { CLASSPREFIX } from '../../enums/constants';\n\nexport const defaultConfig = {\n defClassName: 'layer-tick',\n className: '',\n classPrefix: CLASSPREFIX,\n interaction: {\n highlight: [{\n type: 'stroke',\n intensity: [0, 0, -15, 0]\n }],\n fade: [{\n type: 'stroke',\n intensity: [0, 0, 15, 0]\n }],\n focus: [{\n type: 'stroke',\n intensity: [0, 0, 15, 0]\n }]\n },\n innerPadding: 0.1,\n transform: {\n type: 'identity'\n },\n transition: {\n effect: 'cubic',\n duration: 1000\n },\n encoding: {\n color: { },\n x: {},\n y: {},\n x0: {},\n y0: {},\n strokeOpacity: {\n value: 0.5\n },\n fillOpacity: {\n value: 0.5\n }\n },\n states: {\n highlight: {\n className: `${CLASSPREFIX}-layer-tick-highlight`\n },\n fadeout: {\n className: `${CLASSPREFIX}-layer-tick-fadeout`\n },\n selected: {\n className: `${CLASSPREFIX}-layer-tick-selected`\n }\n }\n};\n","import { selectElement } from 'muze-utils';\n\n/**\n * Draws ticks by using d3 selection\n * @param {Object} params Contains container element and points\n * @return {Selection} Ticks Selection\n */\nexport default /* istanbul ignore next */ (params) => {\n const { points, container, keyFn, className } = params;\n const mount = selectElement(container);\n const ticks = mount.selectAll('path').data(points, keyFn);\n const ticksEnter = ticks.enter().append('path');\n\n mount.attr('class', className || '');\n ticksEnter.each(function (d) {\n const selection = selectElement(this);\n const enter = d.enter || {};\n Object.entries(enter).forEach(attr => (!isNaN(attr[1]) && selection.attr(attr[0], attr[1])));\n });\n\n ticks.exit().remove();\n return ticks.merge(ticksEnter)\n .each(function (d) {\n const selection = selectElement(this);\n const update = d.update;\n const updateStyle = d.style || {};\n const x0 = update.x0 !== undefined ? update.x0 : update.x;\n const y0 = update.y0 !== undefined ? update.y0 : update.y;\n const path = `M ${update.x} ${update.y} L ${x0} ${y0}`;\n d.className && selection.classed(d.className, true);\n selection.attr('d', path);\n Object.entries(updateStyle).forEach(styleObj => selection.style(styleObj[0], styleObj[1]));\n });\n};\n\n","import { FieldType } from 'muze-utils';\nimport { PointLayer } from '../point';\nimport { defaultConfig } from './default-config';\nimport * as PROPS from '../../enums/props';\nimport { ENCODING } from '../../enums/constants';\nimport drawTicks from './renderer';\nimport './styles.scss';\nimport { getAxesScales, getLayerColor, positionPoints, getIndividualClassName } from '../../helpers';\n\nexport default class TickLayer extends PointLayer {\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof TickLayer\n */\n static defaultConfig () {\n return defaultConfig;\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof TickLayer\n */\n static formalName () {\n return 'tick';\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof TickLayer\n */\n static drawFn () {\n return drawTicks;\n }\n\n /**\n *\n *\n * @returns\n * @memberof TickLayer\n */\n elemType () {\n return 'path';\n }\n\n /**\n * Generates an array of objects containing x, y, width and height of the points from the data\n * @param {Array.} data Data Array\n * @param {Object} encoding Config\n * @param {Object} axes Axes object\n * @return {Array.} Array of points\n */\n translatePoints (data, encoding, axes, config = {}) {\n let points = [];\n const {\n xAxis,\n yAxis\n } = getAxesScales(axes);\n const fieldsConfig = this.data().getFieldsConfig();\n const {\n xField,\n yField,\n x0Field,\n y0Field,\n xFieldType,\n yFieldType\n } = this.encodingFieldsInf();\n const isXDim = xFieldType === FieldType.DIMENSION;\n const isYDim = yFieldType === FieldType.DIMENSION;\n const key = isXDim ? ENCODING.X : (isYDim ? ENCODING.Y : null);\n const colorEncoding = encoding.color;\n const colorField = colorEncoding && colorEncoding.field;\n const colorFieldIndex = fieldsConfig[colorField] && fieldsConfig[colorField].index;\n const measurement = this._store.get(PROPS.MEASUREMENT);\n const colorAxis = axes.color;\n const { x: offsetX, y: offsetY } = config.offset;\n const { x: xSpan, y: ySpan } = config.span;\n for (let i = 0, len = data.length; i < len; i++) {\n let xPx;\n let x0Px;\n let y0Px;\n let yPx;\n const d = data[i];\n const row = d._data;\n if (xField) {\n xPx = xAxis.getScaleValue(d.x) + offsetX;\n x0Px = xPx + xSpan;\n }\n\n if (yField) {\n yPx = yAxis.getScaleValue(d.y) + offsetY;\n y0Px = yPx !== null ? yPx + ySpan : null;\n }\n\n if (!xField) {\n xPx = 0;\n x0Px = measurement.width;\n if (!isNaN(yPx)) {\n yPx += ySpan / 2;\n y0Px = yPx;\n }\n }\n\n if (!yField) {\n yPx = 0;\n y0Px = measurement.height;\n x0Px = xPx += xSpan / 2;\n }\n\n if (x0Field) {\n x0Px = xAxis.getScaleValue(d.x0) + xSpan;\n yPx += ySpan / 2;\n y0Px -= ySpan / 2;\n }\n\n if (y0Field) {\n y0Px = yAxis.getScaleValue(d.y0) + ySpan;\n xPx += xSpan / 2;\n x0Px -= xSpan / 2;\n }\n const style = {};\n const meta = {};\n const { color, rawColor } = getLayerColor({ datum: d, index: i },\n { colorEncoding, colorAxis, colorFieldIndex });\n\n style.stroke = color;\n meta.stateColor = {};\n meta.originalColor = rawColor;\n meta.colorTransform = {};\n if (!isNaN(xPx) && !isNaN(yPx)) {\n const point = {\n enter: {},\n update: {\n x: xPx,\n y: yPx,\n x0: x0Px,\n y0: y0Px\n },\n style,\n _data: row,\n _id: d._id,\n source: row,\n rowId: d._id,\n meta\n };\n point.className = getIndividualClassName(d, i, data, this);\n points.push(point);\n this.cachePoint(d[key], point);\n }\n }\n points = positionPoints(this, points);\n return points;\n }\n\n getMeasurementConfig (offsetX, offsetY, widthSpan, heightSpan) {\n return {\n offset: {\n x: (offsetX || 0),\n y: (offsetY || 0)\n },\n span: {\n x: widthSpan,\n y: heightSpan\n }\n };\n }\n}\n","import { isSimpleObject, mergeRecursive, getObjProp } from 'muze-utils';\n\nconst parseLayerDefinition = (sink, definition, layerDef, layerType) => {\n for (const key in definition) {\n if (Object.hasOwnProperty.call(definition, key)) {\n let strs;\n let propValue;\n const def = definition[key];\n if (isSimpleObject(def)) {\n sink[key] = {};\n parseLayerDefinition(sink[key], def, layerDef, layerType);\n } else if (typeof def === 'string' && (strs = def.split('.')) && strs[0] === layerType) {\n propValue = getObjProp(layerDef, ...strs.slice(1, strs.length));\n if (propValue !== undefined) {\n sink[key] = propValue;\n }\n } else {\n sink[key] = def;\n }\n }\n }\n};\n\nconst sanitizeEncoding = (encoding) => {\n // Create object for each encoding value if encoding value is a string\n for (const key in encoding) {\n if (typeof encoding[key] === 'string') {\n encoding[key] = {\n field: encoding[key]\n };\n }\n }\n};\n\n/**\n * Layer Factory creates layers based on the layer type. All types of layers needs to register in\n * the layer factory. For getting a layer instance, getLayer method needs to invoked with the\n * layerType and other arguments.\n */\nconst layerFactory = (() => {\n const compositeLayers = {};\n const factoryObj = {\n setLayerRegistry: (reg) => {\n factoryObj._layerRegistry = reg;\n },\n getSerializedConf: (mark, layerDef) => {\n let serializedDefs;\n const defs = compositeLayers[mark];\n const newConf = mergeRecursive({}, layerDef);\n\n // If it is a composite layer then resolve all the definitions of each unit layer\n if (defs) {\n serializedDefs = defs.map((unitLayerDef) => {\n const sDef = {};\n parseLayerDefinition(sDef, unitLayerDef, newConf, mark);\n sanitizeEncoding(sDef.encoding);\n return sDef;\n });\n } else {\n const encoding = newConf.encoding;\n // Create object for each encoding value if encoding value is a string\n sanitizeEncoding(encoding);\n serializedDefs = newConf;\n }\n\n return serializedDefs;\n },\n getLayerInstance: (layerDef) => {\n const layerRegistry = factoryObj._layerRegistry;\n layerDef = !(layerDef instanceof Array) ? [layerDef] : layerDef;\n const instances = layerDef.map((layerObj) => {\n const layerConstructor = layerRegistry[layerObj.mark];\n return layerConstructor.create();\n });\n return instances.length === 1 ? instances[0] : instances;\n },\n composeLayers: (layerType, layerDefs) => {\n compositeLayers[layerType] = layerDefs;\n },\n sanitizeLayerConfig: (layerDef) => {\n const newConf = mergeRecursive({}, layerDef);\n sanitizeEncoding(newConf.encoding);\n return newConf;\n }\n };\n return factoryObj;\n})();\n\nexport default layerFactory;\n","import { AreaLayer } from './layers/area';\nimport { ArcLayer } from './layers/arc';\nimport { LineLayer } from './layers/line';\nimport { TextLayer } from './layers/text';\nimport { PointLayer } from './layers/point';\nimport { BarLayer } from './layers/bar';\nimport { BaseLayer } from './base-layer';\nimport * as CONSTANTS from './enums/constants';\nimport { TickLayer } from './layers/tick';\n\nexport const DEFAULT_LAYERS = {\n [CONSTANTS.AREA_LAYER]: AreaLayer,\n [CONSTANTS.ARC_LAYER]: ArcLayer,\n [CONSTANTS.LINE_LAYER]: LineLayer,\n [CONSTANTS.TEXT_LAYER]: TextLayer,\n [CONSTANTS.POINT_LAYER]: PointLayer,\n [CONSTANTS.TICK_LAYER]: TickLayer,\n [CONSTANTS.BAR_LAYER]: BarLayer,\n [CONSTANTS.BASE_LAYER]: BaseLayer\n};\n","/**\n * This file exports constants that are used as enums in the\n * crosstab group implementation.\n */\n/**\n * Width of the crosstab.\n */\nexport const X = 'x';\n/**\n * Width of the crosstab.\n */\nexport const Y = 'y';\n/**\n * Width of the crosstab.\n */\nexport const WIDTH = 'width';\n\n/**\n * Height of the crosstab.\n */\nexport const HEIGHT = 'height';\n\n/**\n * Field referring to object storing measurement configuration.\n */\nexport const MEASUREMENT = 'measurement';\n\n/**\n * Field referring to object storing configuration properties.\n */\nexport const CONFIG = 'config';\n\n/**\n * Width of visual unit in crosstab.\n */\nexport const MIN_UNIT_WIDTH = 'minUnitWidth';\n\n/**\n * Height of visual unit.\n */\nexport const MIN_UNIT_HEIGHT = 'minUnitHeight';\n\n/**\n * Field to store the array of dimensions to facet by.\n */\nexport const DIMENSIONS = 'dimensions';\n\n/**\n * Field to store array of measures to use as x axis.\n */\nexport const MEASURES = 'measures';\n\n/**\n * Field to store the array of dimensions to facet by.\n */\nexport const DIMENSION = 'dimension';\n\n/**\n * Field to store array of measures to use as x axis.\n */\nexport const MEASURE = 'measure';\n\n/**\n * Flag to specify if model should be pivoted.\n */\nexport const PIVOT = 'pivot';\n\n/**\n * Flag to specify format\n */\nexport const FORMAT = 'format';\n\n/**\n * Mount point where the variable will be hosted\n */\nexport const MOUNT = 'mount';\n\n/**\n * Data update flag\n */\nexport const HAS_DATA_UPDATED = 'hasDataUpdated';\n\n/**\n * Field referring to object storing set of rows\n */\nexport const ROWS = 'rows';\n\n/**\n * Field referring to object storing set of columns\n */\nexport const COLUMNS = 'columns';\n\n/**\n * Field referring to object storing set of columns\n */\nexport const COL = 'col';\n\n/**\n * Field referring to object storing set of rows\n */\nexport const ROW = 'row';\n\n/**\n * Field referring to object storing set of columns\n */\nexport const COLUMN = 'column';\n\n/**\n * Field referring to object storing color field\n */\nexport const COLOR = 'color';\n\n/**\n * Field referring to object storing shape field\n */\nexport const SHAPE = 'shape';\n\n/**\n * Field referring to object storing size field\n */\nexport const SIZE = 'size';\n\n/**\n * Field referring to object storing detail field\n */\nexport const DETAIL = 'detail';\n\n/**\n * Field referring to object storing set of layers\n */\nexport const LAYERS = 'layers';\n\n/**\n * Field referring to object storing the transforms\n */\nexport const TRANSFORM = 'transform';\n\n/**\n * Field referring to object storing the transforms\n */\nexport const ORDINAL = 'ordinal';\n\n/**\n * Field referring to object storing the transforms\n */\nexport const LINEAR = 'linear';\n/**\n * Field referring to object storing the transforms\n */\nexport const LEFT = 'left';\n/**\n * Field referring to object storing the transforms\n */\nexport const RIGHT = 'right';\n/**\n * Field referring to object storing the transforms\n */\nexport const TOP = 'top';\n/**\n * Field referring to object storing the transforms\n */\nexport const BOTTOM = 'bottom';\n\n/**\n * Field referring to object storing the transforms\n */\nexport const RETINAL = 'retinal';\n/**\n * Field referring to object storing the transforms\n */\nexport const CELL = 'cell';\n/**\n * Field referring to object storing the transforms\n */\nexport const X_AXES = 'xAxes';\n/**\n * Field referring to object storing the transforms\n */\nexport const Y_AXES = 'yAxes';\n/**\n * Field referring to object storing the transforms\n */\nexport const ENTRY_CELLS = 'entryCell';\n/**\n * Field referring to object storing the transforms\n */\nexport const INITIALIZED = 'initialized';\n/**\n * Field referring to object storing the transforms\n */\nexport const EXIT_CELLS = 'exitCell';\n/**\n * Field referring to object storing the transforms\n */\nexport const AXIS = 'axis';\n/**\n * Field referring to object storing the transforms\n */\nexport const UNIT = 'unit';\n/**\n * Field referring to object storing the transforms\n */\nexport const UPDATED = 'updated';\n/**\n * Field referring to object storing the transforms\n */\nexport const BEFORE_UPDATE = 'beforeupdate';\n/**\n * Field referring to object storing the transforms\n */\nexport const VALUE_MATRIX = 'valueMatrix';\n/**\n * Field referring to object storing the transforms\n */\nexport const FACET_HEADERS = 'facet-headers';\n/**\n * Field referring to object storing the transforms\n */\nexport const RADIUS = 'radius';\n/**\n * Field referring to object storing the transforms\n */\nexport const ANGLE = 'angle';\n/**\n * Field referring to object storing the transforms\n */\nexport const ARC = 'arc';\n/**\n * Field referring to object storing the transforms\n */\nexport const CARTESIAN = 'cartesian';\n/**\n * Field referring to object storing the transforms\n */\nexport const POLAR = 'polar';\n/**\n * Field referring to object storing the transforms\n */\nexport const CATEGORICAL = 'categorical';\n/**\n * Field referring to object storing the transforms\n */\nexport const TEMPORAL = 'temporal';\n/**\n * Field referring to object storing the transforms\n */\nexport const BAR = 'bar';\n/**\n * Field referring to object storing the transforms\n */\nexport const LINE = 'line';\n/**\n * Field referring to object storing the transforms\n */\nexport const POINT = 'point';\n/**\n * Field referring to object storing the transforms\n */\nexport const PRIMARY = 'Primary';\n/**\n * Field referring to object storing the transforms\n */\nexport const SECONDARY = 'Secondary';\n/**\n * Field referring to object storing the transforms\n */\nexport const BOTH = 'both';\n/**\n * Field referring to object storing the transforms\n */\nexport const INTERACTION = 'interaction';\n/**\n * Field referring to object storing the transforms\n */\nexport const GRID_LINES = 'gridLines';\n/**\n * Field referring to object storing the transforms\n */\nexport const GRID_BANDS = 'gridBands';\n/**\n * Field referring to object storing the transforms\n */\nexport const HEADER = 'header';\n/**\n * Field referring to object storing the transforms\n */\nexport const FACET = 'facet';\n\n","import { ROWS, COLUMNS, COLOR, SHAPE, SIZE, DETAIL, LAYERS, TRANSFORM, CONFIG } from '../enums/constants';\n\n/**\n * @module\n * This is the local options semantics based on which setters getters are created and reactivity is initiated.\n * This local object is only valid for Artboard.\n * Artboard merges global and local object both to the model\n *\n * Format\n * PROPERTRY_NAME: {\n * value: // default value of the property,\n * meta: {\n * typeCheck: // The setter value will be checked using this. If the value is function then the setter value\n * // is passed as args.\n * typeExpected: // The output of typecheck action will be tested against this. Truthy value will set the\n * // value to the setter\n * sanitizaiton: // Need for sanitization before type is checked\n * }\n * }\n */\n\nexport default {\n [CONFIG]: {},\n [ROWS]: [],\n [COLUMNS]: [],\n [COLOR]: '',\n [SHAPE]: '',\n [SIZE]: '',\n [DETAIL]: '',\n [LAYERS]: '',\n [TRANSFORM]: []\n};\n","import { ERROR_MSG } from 'muze-utils';\n\n/**\n * Interfaces for VisualGroup. Any new VisualGroup has to implement this class.\n * @class SimpleGroup\n */\nclass SimpleGroup {\n\n /**\n * This method is used to set or get the DataModel instance.\n *\n * @param {DataModel | undefined} dataModel Instance of datamodel.\n\n * @memberof SimpleGroup\n */\n data () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * This method is used to set or get the group specific configuration\n * properties\n *\n * @param {Object | undefined} configObj The input configuration.\n * or instance of visual group.\n * @memberof SimpleGroup\n */\n config () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * This method is used to return a serialized representation of the\n * instance's properties.\n *\n * @memberof SimpleGroup\n */\n serialize () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * This method is used to get or set the measurement object which houses\n * layout properties like width and height.\n *\n * @param {Object | undefined} mObj The measurement properties.\n * @memberof SimpleGroup\n */\n measurement () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n}\n\nexport default SimpleGroup;\n","import { ERROR_MSG } from 'muze-utils';\n\n/**\n *\n *\n * @export\n * @class Variable\n */\nexport default class Variable {\n\n /**\n *\n *\n * @memberof Variable\n */\n type () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n *\n *\n * @memberof Variable\n */\n toString () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n}\n","import Variable from './variable';\n\n/**\n *\n *\n * @class ComposeVars\n * @extends {Variable}\n */\nclass ComposedVars extends Variable {\n\n /**\n *Creates an instance of ComposeVars.\n * @param {*} texts\n * @memberof ComposeVars\n */\n constructor (...texts) {\n super(...texts);\n this.vars(texts);\n }\n\n /**\n *\n *\n * @param {*} params\n * @returns\n * @memberof ComposeVars\n */\n vars (...params) {\n if (params.length) {\n this._vars = params[0];\n return this;\n }\n return this._vars;\n }\n\n /**\n *\n *\n * @param {*} dm\n * @returns\n * @memberof ComposeVars\n */\n data (...dm) {\n if (dm.length) {\n this.vars().forEach(d => d.data(dm[0]));\n return this;\n }\n return this._data;\n }\n\n /**\n *\n *\n * @returns\n * @memberof ComposeVars\n */\n getMembers () {\n const vars = this.vars();\n return vars.map(member => member.getMembers()[0]);\n }\n\n /**\n *\n *\n * @returns\n * @memberof ComposeVars\n */\n type () {\n return this.vars()[0].type();\n }\n\n /**\n *\n *\n * @returns\n * @memberof ComposeVars\n */\n toString () {\n return this.vars().map(d => d.toString()).join(',');\n }\n\n /**\n *\n *\n * @returns\n * @memberof ComposeVars\n */\n numberFormat () {\n return this.vars()[0].numberFormat();\n }\n\n /**\n *\n *\n * @returns\n * @memberof ComposeVars\n */\n format (values) {\n return this.vars()[0].format(values);\n }\n\n /**\n *\n *\n * @returns\n * @memberof ComposedVars\n */\n subtype () {\n return this.vars()[0].subtype();\n }\n\n /**\n *\n *\n * @returns\n * @memberof ComposedVars\n */\n getMinDiff () {\n return this.vars()[0].getMinDiff();\n }\n}\n\nexport default ComposedVars;\n","import { DateTimeFormatter } from 'muze-utils';\nimport Variable from './variable';\n\n/**\n *\n *\n * @export\n * @class Vars\n * @extends {Variable}\n */\nexport default class SimpleVariable extends Variable {\n\n /**\n *Creates an instance of Vars.\n * @param {*} text\n * @memberof Vars\n */\n constructor (text) {\n super();\n this.oneVar(text);\n }\n\n /**\n *\n *\n * @param {*} params\n * @returns\n * @memberof Vars\n */\n oneVar (...oneV) {\n if (oneV.length) {\n this._oneVar = oneV[0];\n return this;\n }\n return this._oneVar;\n }\n\n /**\n *\n *\n * @param {*} dm\n * @returns\n * @memberof Vars\n */\n data (...dm) {\n if (dm.length) {\n this._data = dm[0];\n return this;\n }\n return this._data;\n }\n\n /**\n *\n *\n * @returns\n * @memberof Vars\n */\n toString () {\n return this.oneVar();\n }\n\n /**\n *\n *\n * @memberof SimpleVariable\n */\n numberFormat () {\n if (this.type() === 'measure') {\n const formatter = this.data().getFieldspace().getMeasure()[this.oneVar()]._ref;\n return formatter.numberFormat();\n } return val => val;\n }\n\n /**\n *\n *\n * @memberof SimpleVariable\n */\n format (values) {\n if (values && this.subtype() === 'temporal') {\n const formatter = this.data().getFieldspace().getDimension()[this.oneVar()]._ref.schema.format;\n const dtFormat = new DateTimeFormatter(formatter);\n values = values.map(e => dtFormat.getNativeDate(e));\n }\n return values;\n }\n\n /**\n *\n *\n * @returns\n * @memberof Vars\n */\n getMembers () {\n return [this.oneVar()];\n }\n\n /**\n *\n *\n * @returns\n * @memberof Vars\n */\n type () {\n const fieldDef = this.data().getFieldsConfig()[this.oneVar()].def;\n return fieldDef.type;\n }\n\n /**\n *\n *\n * @returns\n * @memberof Vars\n */\n subtype () {\n const fieldDef = this.data().getFieldsConfig()[this.oneVar()].def;\n return fieldDef.subtype || fieldDef.type;\n }\n\n /**\n *\n *\n * @returns\n * @memberof SimpleVariable\n */\n getMinDiff () {\n const fieldSpace = this.data().getFieldspace();\n return fieldSpace.fieldsObj()[this.oneVar()].getMinDiff();\n }\n\n equals (varInst) {\n return this.oneVar() === varInst.oneVar();\n }\n}\n","import { ComposedVars, SimpleVariable } from '../variable';\nimport { DIMENSION, COLUMNS, ROWS, TEMPORAL } from '../enums/constants';\n\n/**\n * Gets the list of fields in a sorted order by measurement and dimension\n *\n * @param {Array} fieldList List of fields in the view\n * @param {Object} fieldMap Mapping of fields in the datamodel\n * @return {Array} fields sorted by measurement and dimensions\n */\nconst orderFields = (fieldArray, type) => {\n const dimensionArr = [[], []];\n const measureArr = [[], []];\n const temporalArr = [[], []];\n const categoricalArr = [[], []];\n\n fieldArray.forEach((fieldList, index) => {\n fieldList.forEach((field) => {\n if (field.type() === DIMENSION) {\n dimensionArr[index].push(field);\n field.subtype() === TEMPORAL ? temporalArr[index].push(field) : categoricalArr[index].push(field);\n } else {\n measureArr[index].push(field);\n }\n });\n });\n\n const numOfMeasures = measureArr[0].length + (measureArr[1] ? measureArr[1].length : 0);\n\n // Single array of fields\n if (!fieldArray[1]) {\n // Push measures to bottom\n measureArr[1] = type === COLUMNS ? measureArr[0] : [];\n // Push measures to left\n measureArr[0] = type !== COLUMNS ? measureArr[0] : [];\n // Bottom and right dimensions empty\n dimensionArr[1] = [];\n // Left and top filled with dimensions\n dimensionArr[0] = dimensionArr[0];\n if (numOfMeasures === 0) {\n const allDimensions = [...dimensionArr[0], ...dimensionArr[1]];\n if (type === COLUMNS) {\n dimensionArr[1] = allDimensions[allDimensions.length - 1] ? [allDimensions[allDimensions.length - 1]]\n : [];\n allDimensions.splice(-1, 1);\n } else {\n dimensionArr[1] = [];\n }\n dimensionArr[0] = [...allDimensions];\n }\n }\n\n if (dimensionArr[0].length && dimensionArr[1].length && numOfMeasures > 0) {\n dimensionArr[0] = [...dimensionArr[0], ...dimensionArr[1]];\n dimensionArr[1] = [];\n }\n return {\n fields: dimensionArr.map((list, i) => (i === 1 ?\n measureArr[i].concat(dimensionArr[i]) : dimensionArr[i].concat(measureArr[i]))),\n dimensions: [...dimensionArr[0], ...dimensionArr[1]],\n measures: [...measureArr[0], ...measureArr[1]],\n temporal: [...temporalArr[0], ...temporalArr[1]],\n categorical: [...categoricalArr[0], ...categoricalArr[1]]\n };\n};\n\n/**\n * Gets the list of normalized fields\n *\n * @param {Array} fields List of fields in the view\n * @param {Object} fieldMap Mapping of fields in the datamodel\n * @return {Array} fields normalized by measurement and dimensions\n */\nconst normalizeFields = (config, type) => {\n const fieldsArr = [];\n const fields = config[type];\n\n if (!(fields[0] instanceof Array)) {\n fieldsArr[0] = fields;\n } else {\n fieldsArr[0] = fields[0] || [];\n fieldsArr[1] = fields[1] || [];\n }\n return fieldsArr;\n};\n\n/**\n *\n *\n * @param {*} fields\n * @param {*} datamodel\n * @return\n */\nconst convertToVar = (datamodel, fields) => {\n const vars = [];\n\n fields && fields.forEach((field) => {\n if (field instanceof ComposedVars) {\n vars.push(field);\n field.data(datamodel);\n } else {\n vars.push(new SimpleVariable(field).data(datamodel));\n }\n });\n return vars;\n};\n\n/**\n *\n *\n * @param {*} rows\n * @param {*} columns\n * @param {*} datamodel\n * @return\n */\nexport const transformFields = (datamodel, config) => {\n const [rowsInfo, columnsInfo] = [ROWS, COLUMNS].map((fields) => {\n const normalizedFields = normalizeFields(config, fields);\n const norFields = [convertToVar(datamodel, normalizedFields[0])];\n\n if (normalizedFields[1]) {\n norFields[1] = convertToVar(datamodel, normalizedFields[1]);\n }\n return orderFields(norFields, fields);\n });\n const {\n fields: rows,\n dimensions: rowDimensions,\n measures: rowMeasures,\n temporal: rowTemporalFields,\n categorical: rowCategoricalFields\n } = rowsInfo;\n const {\n fields: columns,\n dimensions: columnDimensions,\n measures: columnMeasures,\n temporal: columnTemporalFields,\n categorical: columnCategoricalFields\n } = columnsInfo;\n return {\n rows,\n rowDimensions,\n rowMeasures,\n rowTemporalFields,\n rowCategoricalFields,\n columns,\n columnTemporalFields,\n columnCategoricalFields,\n columnDimensions,\n columnMeasures\n };\n};\n","import { ERROR_MSG, mergeRecursive } from 'muze-utils';\nimport { transformFields } from './field-sanitizer';\nimport { getHeaderAxisFrom } from '../group-helper/group-utils';\nimport { ROW, COLUMN } from '../enums/constants';\n\n/**\n *\n *\n * @export\n * @class VisualEncoder\n */\nexport default class VisualEncoder {\n\n /**\n *\n *\n * @memberof VisualEncoder\n */\n createAxis () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n *\n *\n * @memberof VisualEncoder\n */\n setCommonDomain () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n *\n *\n * @memberof VisualEncoder\n */\n getLayerConfig () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n fieldInfo (...info) {\n if (info.length) {\n this._fieldInfo = mergeRecursive(this._fieldInfo || {}, info[0]);\n return this;\n }\n return this._fieldInfo;\n }\n\n /**\n *\n *\n * @param {*} datamodel\n * @param {*} config\n * @return\n * @memberof VisualEncoder\n */\n fieldSanitizer (datamodel, config) {\n this.fieldInfo(transformFields(datamodel, config));\n return this.fieldInfo();\n }\n\n /**\n *\n *\n * @param {*} params\n * @return\n * @memberof VisualEncoder\n */\n axisFrom (...params) {\n if (params.length) {\n this._axisFrom = params[0];\n return this;\n }\n return this._axisFrom;\n }\n\n /**\n *\n *\n * @param {*} params\n * @return\n * @memberof VisualEncoder\n */\n headerFrom (...params) {\n if (params.length) {\n this._headerFrom = params[0];\n return this;\n }\n return this.__headerFrom;\n }\n\n /**\n *\n *\n * @param {*} axisFrom\n * @return\n * @memberof CartesianEncoder\n */\n setAxisAndHeaders (axisFrom = {}, fields) {\n const [rowHeader, rowAxis] = getHeaderAxisFrom(ROW, fields.rows, axisFrom);\n const [colHeader, colAxis] = getHeaderAxisFrom(COLUMN, fields.columns, axisFrom);\n\n this.axisFrom({\n row: rowAxis,\n column: colAxis\n });\n this.headerFrom({\n row: rowHeader,\n column: colHeader\n });\n return this;\n }\n}\n","import { ContinousAxis, BandAxis, TimeAxis, ColorAxis, SizeAxis, ShapeAxis } from '@chartshq/muze-axis';\n\nexport const scaleMaps = {\n linear: ContinousAxis,\n band: BandAxis,\n temporal: TimeAxis,\n size: SizeAxis,\n color: ColorAxis,\n shape: ShapeAxis\n};\n","import { ScaleType } from '@chartshq/muze-axis';\n\n/**\n * Map of DataModel types to associated field types.\n */\nexport const dataTypeScaleMap = {\n dimension: ScaleType.BAND,\n categorical: ScaleType.BAND,\n measure: ScaleType.LINEAR,\n temporal: ScaleType.TIME\n};\n\n","import { mergeRecursive } from 'muze-utils';\nimport { AxisOrientation } from '@chartshq/muze-axis';\nimport { scaleMaps } from '../enums/scale-maps';\nimport { getAxisType, getAxisKey } from '../group-helper';\nimport { dataTypeScaleMap } from '../data-type-scale-map';\nimport { CATEGORICAL, TEMPORAL, BAR, LINE, POINT, BOTH, Y } from '../enums/constants';\n\n/**\n *\n *\n * @param {*} axisInfo\n * @param {*} field\n * @param {*} axesCreators\n * @return\n */\nconst getAxisConfig = (axisInfo, field, axesCreators) => {\n let axisOrientation;\n const { index, axisIndex, axisType } = axisInfo;\n const { config, position } = axesCreators;\n const userAxisConfig = config.axes ? (config.axes[axisType] || {}) : {};\n const {\n LEFT,\n RIGHT,\n TOP,\n BOTTOM\n } = AxisOrientation;\n const allOrientations = axisType === Y ? [LEFT, RIGHT] : [TOP, BOTTOM];\n\n if (position === BOTH) {\n axisOrientation = allOrientations[axisIndex];\n } else {\n axisOrientation = position;\n }\n const axisConfig = {\n id: `${axisType}-${index}-${axisIndex}`,\n name: field.toString(),\n field: field.toString(),\n labels: { rotation: 0 },\n numberFormat: field.numberFormat(),\n orientation: axisOrientation,\n type: dataTypeScaleMap[field.subtype()]\n };\n userAxisConfig.tickValues = field.format(userAxisConfig.tickValues);\n userAxisConfig.domain = field.format(userAxisConfig.domain);\n\n return mergeRecursive(axisConfig, userAxisConfig);\n};\n\n/**\n *\n *\n * @param {*} axisInfo\n * @param {*} field\n * @param {*} axesCreators\n * @return\n */\nconst createSimpleAxis = (axisConfig, field, axesCreators) => {\n const { labelManager } = axesCreators;\n const Cls = scaleMaps[dataTypeScaleMap[field.subtype()]];\n const simpleAxis = new Cls(axisConfig, { labelManager });\n return simpleAxis;\n};\n\n/**\n *\n *\n * @param {*} axisType\n * @param {*} fieldInfo\n * @param {*} axesCreators\n * @param {*} groupAxes\n * @return\n */\nexport const generateAxisFromMap = (axisType, fieldInfo, axesCreators, groupAxes) => {\n let axisKey;\n const currentAxes = [];\n const { fields, index } = fieldInfo;\n const { cacheMaps } = axesCreators;\n const map = cacheMaps[`${axisType}AxesMap`];\n\n fields.forEach((field, axisIndex) => {\n axisKey = getAxisKey(axisType, index, dataTypeScaleMap[field.subtype()]);\n const axisConfig = getAxisConfig({ index, axisIndex, axisType }, field, axesCreators);\n\n if (!map.has(axisKey)) {\n const xAxis = createSimpleAxis(axisConfig, field, axesCreators);\n currentAxes.push(xAxis);\n } else {\n const axes = map.get(axisKey);\n axes[axisIndex] = axes[axisIndex] ? axes[axisIndex] : createSimpleAxis(axisConfig, field, axesCreators);\n axes[axisIndex]._rotationLock = false;\n axes[axisIndex] && axes[axisIndex].config(axisConfig).domain(axisConfig.domain || []);\n }\n });\n\n if (currentAxes.length) {\n map.set(axisKey, currentAxes);\n }\n\n for (const [key] of map.entries()) {\n if (key === axisKey) {\n groupAxes.add(axisKey);\n }\n }\n return map.get(axisKey);\n};\n\n/**\n *\n *\n * @memberof MatrixResolver\n */\nexport const mutateAxesFromMap = (cacheMaps, axes) => {\n const {\n xAxesMap,\n yAxesMap\n } = cacheMaps;\n const {\n x: xAxisSet,\n y: yAxisSet\n } = axes;\n const xAxes = [];\n const yAxes = [];\n\n xAxisSet.forEach((axisId) => {\n const xAxis = xAxesMap.get(axisId);\n xAxes.push(xAxis);\n });\n yAxisSet.forEach((axisId) => {\n const yAxis = yAxesMap.get(axisId);\n yAxes.push(yAxis);\n });\n return {\n xAxes, yAxes\n };\n};\n\n/**\n * return a default mark based on predefined set of rules of type and subtype of the fields\n *\n * @param {string} colFieldType dimension/measure - temporal/ordinal/nominal\n * @param {string} rowFieldType dimension/measure - temporal/ordinal/nominal\n * @return {Object} return mark type\n */\nexport const getDefaultMark = (colFieldType, rowFieldType) => {\n let mark;\n\n if (colFieldType === CATEGORICAL || rowFieldType === CATEGORICAL) {\n mark = BAR;\n } else if (colFieldType === TEMPORAL || rowFieldType === TEMPORAL) {\n mark = LINE;\n } else {\n mark = POINT;\n }\n\n return mark;\n};\n\n/**\n *\n *\n * @param {*} axesCreators\n * @param {*} [fieldInfo=[]]\n * @return\n */\nexport const createRetinalAxis = (axesCreators, fieldProps = {}) => {\n const { axisType, fieldsConfig } = axesCreators;\n const field = fieldProps.field;\n const axis = [];\n const Cls = scaleMaps[axisType];\n\n fieldProps.type = fieldProps.type ? fieldProps.type : getAxisType(fieldsConfig, field || null);\n axis.push(new Cls(fieldProps));\n return axis;\n};\n\n/**\n *\n *\n * @param {*} arr\n * @param {*} val\n * @return\n */\nexport const getIndex = (arr, val) => {\n let i = 0;\n let arrIndex = -1;\n\n while (arrIndex === -1 && i < arr.length) {\n if (arr[i].toString() === val.toString()) {\n arrIndex = i;\n }\n i++;\n }\n return arrIndex;\n};\n\n/**\n *\n *\n * @param {*} colFields\n * @param {*} rowFields\n * @param {*} userLayerConfig\n * @return\n * @memberof CartesianEncoder\n */\nexport const getLayerConfFromFields = (colFields, rowFields, userLayerConfig) => userLayerConfig.filter((conf) => {\n const userConf = conf instanceof Array ? conf : [conf];\n const encodingArr = [].concat(...userConf.map(d => d.encoding).filter(d => d !== undefined));\n\n if (!encodingArr.length) {\n return true;\n }\n\n const xFields = [].concat(...encodingArr.map(d => [d.x && d.x.field, d.x0 && d.x0.field]))\n .filter(d => d !== undefined && d !== null);\n const yFields = [].concat(...encodingArr.map(d => [d.y && d.y.field, d.y0 && d.y0.field]))\n .filter(d => d !== undefined && d !== null);\n\n if (!xFields.length && !yFields.length) {\n return true;\n }\n\n const colFieldExist = xFields.length ? xFields.every(d => colFields.indexOf(d) !== -1) : false;\n const rowFieldExist = yFields.length ? yFields.every(d => rowFields.indexOf(d) !== -1) : false;\n if (xFields.length && yFields.length) {\n return colFieldExist && rowFieldExist;\n }\n return colFieldExist || rowFieldExist;\n});\n","import { layerFactory } from '@chartshq/visual-layer';\nimport { mergeRecursive } from 'muze-utils';\nimport { generateAxisFromMap, getDefaultMark, getIndex, getLayerConfFromFields } from './encoder-helper';\nimport { retriveDomainFromData } from '../group-helper';\n\nimport { ROW, COLUMN, COL, LEFT, TOP, CARTESIAN, MEASURE, BOTH, X, Y } from '../enums/constants';\nimport VisualEncoder from './visual-encoder';\n\n/**\n *\n *\n * @export\n * @class CartesianEncoder\n * @extends {VisualEncoder}\n */\nexport default class CartesianEncoder extends VisualEncoder {\n\n /**\n *\n *\n * @return\n * @memberof CartesianEncoder\n */\n static type () {\n return CARTESIAN;\n }\n\n /**\n *\n *\n * @param {*} axesCreators\n * @param {*} fieldInfo\n * @return\n * @memberof CartesianEncoder\n */\n createAxis (axesCreators, fieldInfo) {\n const geomCellAxes = {};\n const {\n axes\n } = axesCreators;\n const {\n projections,\n indices\n } = fieldInfo;\n const {\n rowFields,\n columnFields\n } = projections;\n const {\n rowIndex,\n columnIndex\n } = indices;\n const axisFields = [{\n fields: rowFields,\n index: rowIndex\n }, {\n fields: columnFields,\n index: columnIndex\n }];\n const xAxes = axes.x || [];\n const yAxes = axes.y || [];\n\n [rowFields, columnFields].forEach((fields, i) => {\n const type = i === 0 ? ROW : COLUMN;\n const axis = i === 0 ? Y : X;\n\n if (fields.length > 1) {\n axesCreators.position = BOTH;\n } else {\n axesCreators.position = this.axisFrom()[type];\n }\n geomCellAxes[axis] = generateAxisFromMap(axis, axisFields[i], axesCreators, axis === X ? xAxes : yAxes);\n });\n return geomCellAxes;\n }\n\n /**\n *\n *\n * @param {*} fields\n * @return\n * @memberof CartesianEncoder\n */\n getFacetsAndProjections (fields, type) {\n let facets = [];\n let projections = [];\n let counter = 0;\n const primaryFacets = [];\n const secondaryFacets = [];\n const primaryFields = fields[0];\n const secondaryFields = fields[1];\n const primaryLen = primaryFields.length;\n const secondaryLen = secondaryFields.length;\n const axisFrom = this.axisFrom();\n\n for (let i = 0; i < primaryLen; i++) {\n let projArr = [primaryFields[i]];\n const primaryField = primaryFields[i];\n\n if (primaryField.type() === MEASURE) {\n const secondaryField = secondaryFields[counter];\n if (secondaryField && secondaryField.type() === MEASURE) {\n counter++;\n projArr = [primaryField, secondaryField];\n }\n projections.push(projArr);\n } else {\n facets.push(primaryField);\n primaryFacets.push(primaryField);\n }\n }\n if (secondaryLen > counter) {\n for (let i = counter; i < secondaryLen; i++) {\n const secondaryField = secondaryFields[i];\n const projArr = [secondaryField];\n if (secondaryField.type() === MEASURE) {\n projections.push(projArr);\n } else {\n facets.push(secondaryField);\n secondaryFacets.push(secondaryField);\n }\n }\n }\n if ((primaryFacets.length || secondaryFacets.length) && !projections.length) {\n type = type === COL ? COLUMN : type;\n if ((axisFrom[type] === LEFT || axisFrom[type] === TOP) && primaryFacets.length) {\n const axisFromIndex = primaryFacets.length - 1;\n const facet = primaryFacets[axisFromIndex];\n projections = [[facet]];\n const existIndex = getIndex(secondaryFacets, facet);\n if (existIndex > -1) {\n projections = [[facet, facet]];\n secondaryFacets.splice(existIndex, 1);\n }\n primaryFacets.splice(axisFromIndex, 1);\n } else {\n const axisFromIndex = 0;\n const facet = secondaryFacets[axisFromIndex];\n projections = [[facet]];\n const existIndex = getIndex(primaryFacets, facet);\n if (existIndex > -1) {\n projections = [[facet, facet]];\n primaryFacets.splice(existIndex, 1);\n }\n secondaryFacets.splice(axisFromIndex, 1);\n }\n }\n\n facets = [...primaryFacets, ...secondaryFacets];\n facets = facets.filter((el, index, self) => index === self.findIndex(t => (t.toString() === el.toString())));\n return {\n facets,\n projections\n };\n }\n\n /**\n *\n *\n * @param {*} datamodel\n * @param {*} config\n * @return\n * @memberof CartesianEncoder\n */\n fieldSanitizer (datamodel, config) {\n return super.fieldSanitizer(datamodel, config);\n }\n\n /**\n *\n *\n * @param {*} datamodel\n * @return\n * @memberof CartesianEncoder\n */\n getRetinalFieldsDomain (dataModels, encoding) {\n const groupedModel = dataModels.groupedModel;\n const domains = {};\n for (const key in encoding) {\n if ({}.hasOwnProperty.call(encoding, key)) {\n const encodingObj = encoding[key];\n const field = encodingObj.field;\n if (!encodingObj.domain && field) {\n const domain = retriveDomainFromData(groupedModel, field);\n domains[field] = domain;\n }\n }\n }\n return domains;\n }\n\n /**\n *\n *\n * @param {*} layerArray\n * @memberof CartesianEncoder\n */\n serializeLayerConfig (layerArray) {\n const serializedLayers = [];\n // let currentLayerIndex = 0;\n layerArray.length && layerArray.forEach((layer, i) => {\n const def = layerFactory.sanitizeLayerConfig(layer);\n def.order = i;\n serializedLayers.push(def);\n });\n return serializedLayers;\n }\n\n /**\n *\n *\n * @param {*} fields\n * @param {*} userLayerConfig\n * @return\n * @memberof CartesianEncoder\n */\n getLayerConfig (fields, userLayerConfig) {\n const layerConfig = [];\n const {\n columnFields,\n rowFields\n } = fields;\n\n // let currentLayerIndex = 0;\n columnFields.forEach((colField) => {\n const colFieldName = colField.toString();\n rowFields.forEach((rowField) => {\n let configs = [];\n const rowFieldName = rowField.toString();\n const encoding = {\n x: {\n field: colFieldName\n },\n y: {\n field: rowFieldName\n }\n };\n const rowFieldType = rowField.subtype();\n const colFieldType = colField.subtype();\n const mark = getDefaultMark(colFieldType, rowFieldType);\n\n const defConfigs = [{\n mark,\n def: {\n mark,\n encoding\n }\n }];\n\n const layerConfigs = getLayerConfFromFields(colField.getMembers(),\n rowField.getMembers(), userLayerConfig || []);\n if (layerConfigs.length) {\n configs = layerConfigs.map((layerConf) => {\n const mergedLayerConf = mergeRecursive(mergeRecursive({}, defConfigs[0].def), layerConf);\n const serializedLayerConfig = layerFactory.getSerializedConf(mergedLayerConf.mark,\n mergedLayerConf);\n return {\n mark: mergedLayerConf.mark,\n order: mergedLayerConf.order,\n def: serializedLayerConfig\n };\n });\n } else {\n configs = defConfigs;\n }\n\n layerConfig.push(...configs);\n });\n });\n return layerConfig;\n }\n}\n\n","import { layerFactory } from '@chartshq/visual-layer';\nimport { mergeRecursive } from 'muze-utils';\nimport VisualEncoder from './visual-encoder';\nimport { RADIUS, ANGLE, SIZE, MEASURE, ARC, POLAR, COLOR } from '../enums/constants';\n/**\n *\n *\n * @export\n * @class PolarEncoder\n * @extends {VisualEncoder}\n */\nexport default class PolarEncoder extends VisualEncoder {\n\n /**\n *\n *\n * @param {*} axesCreators\n * @param {*} fieldInfo\n * @return\n * @memberof PolarEncoder\n */\n createAxis (axesCreators, fieldInfo) {\n const {\n axes\n } = axesCreators;\n const geomCellAxes = axes;\n const {\n indices\n } = fieldInfo;\n const {\n rowIndex,\n columnIndex\n } = indices;\n // Dummy axes for polar, to create blank cells\n const pieAxes = geomCellAxes.pie || [];\n\n pieAxes[rowIndex] = pieAxes[rowIndex] || [];\n pieAxes[rowIndex][columnIndex] = [];\n\n geomCellAxes.pie = pieAxes;\n geomCellAxes.x = null;\n geomCellAxes.y = null;\n\n return geomCellAxes;\n }\n\n /**\n *\n *\n * @param {*} fields\n * @return\n * @memberof CartesianEncoder\n */\n getFacetsAndProjections (fields) {\n let counter = 0;\n const facets = [];\n const projections = [];\n const primaryFields = fields[0];\n const secondaryFields = fields[1];\n const primaryLen = primaryFields.length;\n const secondaryLen = secondaryFields.length;\n\n for (let i = 0; i < primaryLen; i++) {\n const primaryField = primaryFields[i];\n if (primaryField.type() === MEASURE) {\n const secondaryField = secondaryFields[counter++];\n const projArr = secondaryField ? [primaryField, secondaryField] : [primaryField];\n projections.push(projArr);\n } else {\n facets.push(primaryField);\n }\n }\n if (secondaryLen > counter) {\n for (let i = counter; i < secondaryLen; i++) {\n const secondaryField = secondaryFields[i];\n const projArr = [secondaryField];\n if (secondaryField.type() === MEASURE) {\n projections.push(projArr);\n } else {\n facets.push(secondaryField);\n }\n }\n }\n return {\n facets,\n projections\n };\n }\n\n /**\n *\n *\n * @return\n * @memberof PolarEncoder\n */\n setCommonDomain () {\n // No domain to be set\n return this;\n }\n\n /**\n *\n *\n * @return\n * @memberof PolarEncoder\n */\n static type () {\n return POLAR;\n }\n\n layers (...layers) {\n if (layers.length) {\n this._layers = layers[0];\n return this;\n }\n return this._layers;\n }\n\n /**\n *\n *\n * @param {*} datamodel\n * @param {*} config\n * @memberof PolarEncoder\n */\n fieldSanitizer (datamodel, config) {\n let sanitizedRows = [[], []];\n let sanitizedColumns = [[], []];\n const fields = super.fieldSanitizer(datamodel, config);\n const {\n layers\n } = config;\n const {\n rows,\n columns\n } = fields;\n const layer = layers[0];\n const encoding = layer.encoding;\n const radius = encoding && encoding.radius ? encoding.radius.field : null;\n const angle = encoding && encoding.angle ? encoding.angle.field : null;\n const sanitizedFields = [sanitizedRows, sanitizedColumns];\n\n [rows, columns].forEach((fieldType, typeIndex) => {\n fieldType.forEach((fieldSet, i) => fieldSet.forEach((field) => {\n if (field.toString() !== radius && field.toString() !== angle && field.type() !== MEASURE) {\n sanitizedFields[typeIndex][i].push(field);\n }\n }));\n });\n sanitizedColumns = [...new Set(sanitizedColumns)];\n sanitizedRows = [...new Set(sanitizedRows)];\n this.fieldInfo({ rows: sanitizedRows, columns: sanitizedColumns });\n return this.fieldInfo();\n }\n\n getRetinalFieldsDomain (dataModels, encoding, facetFields, groupBy) {\n let sizeField;\n let colorField;\n const fields = [];\n const layers = this.layers();\n const dataModel = dataModels.parentModel;\n const fieldsConfig = dataModel.getFieldsConfig();\n const domains = {};\n if (layers && layers[0]) {\n const layer = layers[0];\n const layerEncoding = layer.def.encoding || {};\n\n [RADIUS, ANGLE, SIZE, COLOR].forEach((encType) => {\n const field = layerEncoding[encType] ? layerEncoding[encType].field : '';\n const measureField = fieldsConfig[field] && fieldsConfig[field].def.type === MEASURE;\n if (encType === SIZE && measureField) {\n sizeField = field;\n }\n if (encType === COLOR) {\n colorField = field;\n }\n fieldsConfig[field] && !measureField && fields.push(field);\n });\n }\n\n if (sizeField) {\n domains[sizeField] = dataModel.groupBy(facetFields, {\n [sizeField]: 'sum'\n }).getFieldspace().fieldsObj()[sizeField].domain();\n }\n\n if (colorField) {\n const dm = dataModel.groupBy([...facetFields, ...fields], groupBy.measures);\n domains[colorField] = dm.getFieldspace().fieldsObj()[colorField].domain();\n }\n return domains;\n }\n /**\n *\n *\n * @param {*} fields\n * @param {*} userLayerConfig\n * @return\n * @memberof PolarEncoder\n */\n getLayerConfig (fields, userLayerConfig) {\n let layerConfig = [];\n const {\n columnFields,\n rowFields\n } = fields;\n const allFields = [...columnFields, ...rowFields];\n\n allFields.forEach(() => {\n const encoding = {};\n let config = {\n mark: ARC,\n def: {\n encoding\n }\n };\n if (userLayerConfig && userLayerConfig.length > 0) {\n config = mergeRecursive(config, userLayerConfig[0]);\n }\n layerConfig.push(config);\n });\n if (layerConfig.length === 0) {\n layerConfig = userLayerConfig;\n }\n\n this.layers(layerConfig);\n return layerConfig;\n }\n\n /**\n *\n *\n * @param {*} layerArray\n * @returns\n * @memberof PolarEncoder\n */\n serializeLayerConfig (layerArray) {\n const serializedLayers = [];\n\n layerArray.length && layerArray.forEach((layer) => {\n const def = layerFactory.getSerializedConf(layer.mark, layer);\n serializedLayers.push({\n mark: layer.mark,\n def\n });\n });\n return serializedLayers;\n }\n}\n","import { createRetinalAxis } from './encoder-helper';\nimport { COLOR, SHAPE, SIZE } from '../enums/constants';\nimport VisualEncoder from './visual-encoder';\n\n/**\n *\n *\n * @export\n * @class RetinalEncoder\n * @extends {VisualEncoder}\n */\nexport default class RetinalEncoder extends VisualEncoder {\n\n /**\n *\n *\n * @param {*} axesCreators\n * @return\n * @memberof RetinalEncoder\n */\n createAxis (axesCreators) {\n const { fieldsConfig, config } = axesCreators;\n const newAxes = {};\n\n [COLOR, SHAPE, SIZE].forEach((axisType) => {\n newAxes[`${axisType}`] = createRetinalAxis({ axisType, fieldsConfig }, config[axisType]);\n });\n return newAxes;\n }\n\n /**\n *\n *\n * @static\n * @return\n * @memberof RetinalEncoder\n */\n static type () {\n return 'retinal';\n }\n\n /**\n *\n *\n * @param {*} fields\n * @param {*} userLayerConfig\n * @return\n * @memberof RetinalEncoder\n */\n getLayerConfig (encodingConfigs, userLayerConfig) {\n const layerConfig = [];\n userLayerConfig.forEach((e) => {\n const config = e;\n [COLOR, SHAPE, SIZE].forEach((axis) => {\n if (encodingConfigs[axis] && encodingConfigs[axis].field) {\n const def = config.def;\n if (config.def instanceof Array) {\n def.forEach((conf) => {\n conf.encoding = conf.encoding || {};\n !conf.encoding[axis] && (conf.encoding[axis] = {});\n conf.encoding[axis].field = encodingConfigs[axis].field;\n });\n } else {\n def.encoding = def.encoding || {};\n !def.encoding[axis] && (def.encoding[axis] = {});\n def.encoding[axis].field = encodingConfigs[axis].field;\n }\n }\n });\n layerConfig.push(config);\n });\n return layerConfig;\n }\n\n /**\n *\n *\n * @param {*} context\n * @return\n * @memberof RetinalEncoder\n */\n setCommonDomain (context) {\n const { domains, axes, encoding } = context;\n\n Object.entries(encoding).forEach((enc) => {\n if (enc[1] && enc[1].field) {\n const encType = enc[0];\n const field = enc[1].field;\n\n if (field) {\n axes[encType].forEach((axis) => {\n const domain = domains[field];\n !enc[1].domain && axis.updateDomain(domain);\n });\n }\n }\n });\n return axes;\n }\n}\n","import { Store, dataSelect, FieldType } from 'muze-utils';\nimport { DATA_UPDATE_COUNTER } from '../enums/defaults';\nimport { Variable } from '../variable';\nimport { PolarEncoder, CartesianEncoder } from '../encoder';\nimport {\n DIMENSION,\n MEASURE,\n ORDINAL,\n LINEAR,\n ROW,\n COLUMN,\n COL,\n LEFT,\n RIGHT,\n TOP,\n BOTTOM,\n COLOR,\n SIZE,\n TEMPORAL,\n SHAPE,\n INTERACTION,\n GRID_LINES,\n GRID_BANDS,\n HEADER,\n FACET,\n X,\n Y,\n POLAR\n} from '../enums/constants';\n\n/**\n * Creates an instance of a store which contains the arguments to make the class reactive\n *\n * @return {Object} instance of store\n * @memberof VisualGroup\n */\nexport const initStore = () => new Store({\n [DATA_UPDATE_COUNTER]: DATA_UPDATE_COUNTER\n});\n\n/**\n *\n *\n * @param {*} arr\n */\nexport const isDistributionEqual = arr => [...arr[0], ...arr[1]].reduce((isEqual, row) => {\n const rowType = row.type();\n\n if (rowType === MEASURE || rowType === TEMPORAL) {\n isEqual = true;\n }\n return isEqual;\n}, false);\n\n/**\n *\n *\n */\nexport const initializeCacheMaps = () => ({\n cellMap: new Map(),\n xAxesMap: new Map(),\n yAxesMap: new Map(),\n entryCellMap: new Map(),\n exitCellMap: new Map()\n});\n\n/**\n *\n *\n * @param {*} axisName\n * @param {*} id\n */\nexport const getAxisKey = (axisName, id, scaleType) => `${axisName}-axis-${id}-${scaleType}`;\n\n/**\n *\n *\n * @param {*} rowId\n * @param {*} columnId\n */\nexport const getCellKey = (rowId, columnId) => `cell-${rowId}-${columnId}`;\n\n/**\n *\n *\n * @param {*} config\n * @return\n */\nexport const extractUnitConfig = (config) => {\n const unitConfig = {};\n const attrNames = [INTERACTION, GRID_LINES, GRID_BANDS];\n\n attrNames.forEach((attr) => {\n if (config[attr] !== undefined) {\n unitConfig[attr] = config[attr];\n }\n });\n return unitConfig;\n};\n\n/**\n *\n *\n * @param {*} headers\n * @param {*} index\n * @param {*} rowLength\n * @return\n * @memberof MatrixResolver\n */\nexport const getHeaderText = (headers, index, rowLength) => {\n let header = '';\n\n if (index === rowLength - 1 && headers.length > rowLength) {\n for (let i = index; i < headers.length - 1; i++) {\n header += `${headers[i].toString()} / `;\n }\n header += headers[headers.length - 1].toString();\n return header;\n } else if (headers[index]) {\n return headers[index].toString();\n }\n return '';\n};\n\n/**\n *\n *\n * @param {*} fields\n * @param {*} fieldHeaders\n * @param {*} TextCell\n * @param {*} labelManager\n * @return\n */\nexport const headerCreator = (fields, fieldHeaders, TextCell, labelManager) => {\n const headers = fields.length > 0 ? fields[0].map((cell, i) => new TextCell({ type: HEADER }, { labelManager })\n .source(getHeaderText(fieldHeaders, i, fields[0].length))\n .config({ show: cell.config().show })) : [];\n return headers;\n};\n\n/**\n *\n *\n * @param {*} variable\n * @param {*} allFields\n * @return\n */\nexport const findInGroup = (variable, allFields) => {\n let channel = null;\n\n [COLOR, SIZE, SHAPE].forEach((e) => {\n if (this.store.get(e) && variable === this.store.get(e)[0]) {\n channel = e;\n }\n });\n\n if (channel) {\n return { channel };\n }\n [ROW, COL].forEach((facetType) => {\n allFields[`${facetType}Facets`].forEach((e) => {\n if (e.toString() === variable) {\n channel = { channel: FACET, type: facetType === COL ? COLUMN : ROW };\n }\n });\n });\n\n if (channel) {\n return channel;\n }\n\n [ROW, COL].forEach((projType) => {\n allFields[`${projType}Projections`].forEach((e) => {\n e.forEach((m) => {\n if (m.toString() === variable) {\n channel = projType === COL ? X : Y;\n }\n });\n });\n });\n\n if (channel) {\n return { channel };\n }\n return null;\n};\n\n/**\n *\n *\n * @param {*} datamodel\n * @param {*} field\n */\nexport const getAxisType = (fieldsConfig, field) => {\n let fieldType = ORDINAL;\n\n if (field && fieldsConfig[field].def.type !== DIMENSION) {\n fieldType = LINEAR;\n }\n return fieldType;\n};\n\n/**\n *\n *\n * @param {*} datamodel\n * @param {*} fieldName\n * @return\n */\nexport const retriveDomainFromData = (datamodel, fieldName) => {\n const field = datamodel.getFieldspace().fields.find(d => d._ref.name === fieldName.toString());\n return field.domain();\n};\n\n/**\n *\n *\n * @memberof MatrixResolver\n */\nexport const mutateAxesFromMap = (cacheMaps, axes) => {\n let xAxes = null;\n let yAxes = null;\n const {\n xAxesMap,\n yAxesMap\n } = cacheMaps;\n const {\n x: xAxisSet,\n y: yAxisSet\n } = axes;\n\n xAxisSet && xAxisSet.forEach((axisId) => {\n const xAxis = xAxesMap.get(axisId);\n xAxes = xAxes || [];\n xAxes.push(xAxis);\n });\n\n yAxisSet && yAxisSet.forEach((axisId) => {\n const yAxis = yAxesMap.get(axisId);\n yAxes = yAxes || [];\n yAxes.push(yAxis);\n });\n\n return {\n xAxes, yAxes\n };\n};\n\n/**\n *\n *\n * @param {*} layers\n * @return\n */\nexport const getEncoder = (layers) => {\n let encoder = new CartesianEncoder();\n\n if (layers) {\n // Figuring out the kind of layers the group will have\n encoder = layers.every(e => e.mark === 'arc') ? new PolarEncoder() : encoder;\n }\n return encoder;\n};\n\n/**\n *\n *\n * @param {*} type\n * @param {*} fields\n * @param {*} userAxisFromConfig\n * @return\n */\nexport const getHeaderAxisFrom = (type, fields, userAxisFromConfig) => {\n let axisFrom = userAxisFromConfig[type];\n let headerFrom = '';\n const options = type === ROW ? [LEFT, RIGHT] : [BOTTOM, TOP];\n const [firstField, secondField] = fields;\n const firstFieldType = i => (firstField.length ? firstField[i].type() : null);\n const secondFieldType = i => (secondField.length ? secondField[i].type() : null);\n\n if (firstFieldType(firstField.length - 1) === DIMENSION && secondFieldType(0) === DIMENSION) {\n headerFrom = axisFrom ? options[1 - options.indexOf(axisFrom)] : options[1];\n\n if (type === COLUMN && (firstField[firstField.length - 1].toString() === secondField[0].toString())) {\n axisFrom = TOP;\n } else {\n axisFrom = axisFrom || options[0];\n }\n } else if (secondFieldType(secondField.length - 1) === DIMENSION) {\n headerFrom = type === ROW ? RIGHT : BOTTOM;\n axisFrom = type === ROW ? RIGHT : BOTTOM;\n } else {\n headerFrom = type === ROW ? LEFT : TOP;\n axisFrom = type === ROW ? LEFT : TOP;\n }\n if (firstFieldType(firstField.length - 1) === MEASURE && secondFieldType(0) === MEASURE) {\n axisFrom = type === ROW ? LEFT : TOP;\n } else if (secondFieldType(0) === MEASURE) {\n axisFrom = type === ROW ? RIGHT : BOTTOM;\n } else if (firstFieldType(firstField.length - 1) === MEASURE) {\n axisFrom = type === ROW ? LEFT : TOP;\n }\n return [headerFrom, axisFrom];\n};\n\n/**\n *\n *\n * @param {*} type\n * @param {*} fields\n * @param {*} layers\n * @return\n * @memberof MatrixResolver\n */\nexport const setFacetsAndProjections = (context, fieldInfo, encoder) => {\n const {\n fields,\n type\n } = fieldInfo;\n const { facets, projections } = encoder.simpleEncoder.getFacetsAndProjections(fields, type);\n\n context.facets({ [`${type}Facets`]: facets });\n context.projections({ [`${type}Projections`]: projections });\n\n return { facets, projections, fields };\n};\n\n/**\n * Creates a selection set from a data set with corresponding attributes\n *\n * @export\n * @param {Selection} sel contains previous selection\n * @param {Object} appendObj Object to be appended\n * @param {Array} data Data based on which the selection is entered/updated/removed\n * @param {Object} [attrs={}] Attributes to be set on the data\n * @return {Selection} Merged selection\n */\nexport const createSelection = (sel, appendObj, data, idFn) => {\n let selection = sel || dataSelect([]);\n\n selection = selection.data(data, idFn);\n\n const enter = selection.enter().append(appendObj);\n const mergedSelection = enter.merge(selection);\n\n selection.exit() && selection.exit().remove();\n return mergedSelection;\n};\n\nconst getRowBorders = (left, right) => {\n const borders = {};\n borders.top = false;\n borders.bottom = false;\n if (left.length > 1 || right.length > 1) {\n borders.top = true;\n borders.bottom = true;\n }\n return borders;\n};\n\nconst getColumnsBorders = (top, bottom) => {\n const borders = {};\n borders.left = false;\n borders.right = false;\n if (top.length || bottom.length) {\n if ((top[0] && top[0].length > 1) || (bottom[0] && bottom[0].length > 1)) {\n borders.left = true;\n borders.right = true;\n }\n }\n return borders;\n};\n\nconst getValueBorders = (rows, columns) => {\n const borders = { top: true, left: true, bottom: true, right: true };\n const borderTypeRow = [LEFT, RIGHT];\n const borderTypeCol = [TOP, BOTTOM];\n rows.forEach((e, i) => {\n if (e[0] && e[0].length) {\n borders[borderTypeRow[i]] = true;\n } else {\n borders[borderTypeRow[i]] = false;\n }\n });\n columns.forEach((e, i) => {\n if (e.length) {\n borders[borderTypeCol[i]] = true;\n } else {\n borders[borderTypeCol[i]] = false;\n }\n });\n\n return borders;\n};\n\nexport const getBorders = (matrices, encoder) => {\n let showRowBorders = { top: false, bottom: false };\n let showColBorders = { left: false, right: false };\n let showValueBorders = { top: false, bottom: false, left: false, right: false };\n const {\n rows,\n columns,\n values: valueMatrix\n } = matrices;\n const [leftRows, rightRows] = rows;\n const [topColumns, bottomColumns] = columns;\n const {\n rowDimensions,\n columnDimensions,\n rowTemporalFields,\n columnTemporalFields,\n columnMeasures,\n rowMeasures\n } = encoder.fieldInfo();\n const allDimensionLength = rowDimensions.length + columnDimensions.length;\n const allMeasuresLength = rowMeasures.length + columnMeasures.length;\n const allTemporalFieldsLength = rowTemporalFields.length + columnTemporalFields.length;\n\n if (encoder.constructor.type() === POLAR) {\n if (!allDimensionLength) {\n return { showRowBorders, showColBorders, showValueBorders };\n }\n } else if (!allMeasuresLength && !allTemporalFieldsLength && allDimensionLength <= 2) {\n return { showRowBorders, showColBorders, showValueBorders };\n }\n\n showRowBorders = getRowBorders(leftRows, rightRows);\n showColBorders = getColumnsBorders(topColumns, bottomColumns);\n showValueBorders = getValueBorders([leftRows, rightRows], [topColumns, bottomColumns]);\n\n if (valueMatrix.length > 1) {\n showValueBorders.top = true;\n showValueBorders.bottom = true;\n }\n if (valueMatrix.length && valueMatrix[0].length > 1) {\n showValueBorders.left = true;\n showValueBorders.right = true;\n }\n return { showRowBorders, showColBorders, showValueBorders };\n};\n\nexport const getFieldsFromSuppliedLayers = (suppliedLayerConfig, fieldsConfig) => {\n let fields = [];\n const encodingArr = suppliedLayerConfig.map(conf => (conf.encoding || {}));\n fields = [...fields, [].concat(...encodingArr.map(enc => Object.values(enc).map(d => d.field)))];\n fields = fields.filter(field => fieldsConfig[field] && fieldsConfig[field].def.type === FieldType.DIMENSION);\n return fields;\n};\n\nexport const extractFields = (facetsAndProjections, layerFields) => {\n const fields = Object.values(facetsAndProjections).map((arr) => {\n const flattenArray = [].concat(...arr);\n return [].concat(...flattenArray.map((field) => {\n if (field instanceof Variable) {\n return field.getMembers();\n }\n return field;\n }));\n });\n return [].concat(...fields, ...layerFields);\n};\n","/**\n * This file exports variables that are used as defaults for the crosstab group.\n */\nexport const DATA_UPDATE_COUNTER = 0;\n\nexport const DEFAULT_LAYER_TYPE = 'cartesian';\n\n","import Selection from './selection';\n/**\n * This function applies a selection operation on a data array.\n *\n * @export\n * @param {Array} [data=[]] The data array to be observed.\n * @return {Selection} Instance of a selection.\n */\nexport default function dataSelect (data = []) {\n return new Selection(data);\n}\n\n","import { BEHAVIOURS, ACTIONS } from '@chartshq/muze-firebolt';\n\nexport const actionBehaviourMap = {\n [ACTIONS.DRAG]: {\n behaviours: [BEHAVIOURS.BRUSH],\n touch: false\n },\n [ACTIONS.HOVER]: {\n behaviours: [BEHAVIOURS.HIGHLIGHT]\n },\n [ACTIONS.LONGTOUCH]: {\n behaviours: [BEHAVIOURS.SELECT],\n touch: true\n },\n [ACTIONS.TOUCHDRAG]: {\n behaviours: [BEHAVIOURS.BRUSH],\n touch: true\n },\n [ACTIONS.CLICK]: {\n behaviours: [BEHAVIOURS.SELECT],\n touch: false\n }\n};\n\n","export const CONFIG = 'config';\nexport const DATA = 'data';\nexport const AXES = 'axes';\nexport const LAYERDEFS = 'layerDef';\nexport const WIDTH = 'width';\nexport const HEIGHT = 'height';\nexport const MOUNT = 'mount';\nexport const primaryXAxisUpdated = 'primaryXAxisUpdated';\nexport const primaryYAxisUpdated = 'primaryYAxisUpdated';\nexport const secondaryXAxisUpdated = 'secondaryXAxisUpdated';\nexport const secondaryYAxisUpdated = 'secondaryYAxisUpdated';\nexport const TRANSFORM = 'transform';\nexport const DATADOMAIN = 'dataDomain';\nexport const LAYERSCREATED = 'layersCreated';\nexport const FIELDS = 'fields';\nexport const TIMEDIFFS = 'timeDiffs';\nexport const LAYERAXISINDEX = 'layerAxisIndex';\n\n","import { FieldType, getDependencyOrder, getObjProp,\n defaultValue, objectIterator, unionDomain, makeElement,\n DimensionSubtype, getClosestIndexOf, toArray } from 'muze-utils';\nimport { layerFactory } from '@chartshq/visual-layer';\nimport { TIMEDIFFS } from '../enums/reactive-props';\n\nexport const getDimensionMeasureMap = (layers, fieldsConfig) => {\n const retinalEncodingsAndMeasures = {};\n\n layers.forEach((layer) => {\n const {\n colorField,\n sizeField,\n shapeField,\n xField,\n yField\n } = layer.encodingFieldsInf();\n const measures = [xField, yField].filter(field => fieldsConfig[field] && fieldsConfig[field].def.type ===\n FieldType.MEASURE);\n [colorField, sizeField, shapeField].forEach((field) => {\n if (fieldsConfig[field] && fieldsConfig[field].def.type === FieldType.DIMENSION) {\n !retinalEncodingsAndMeasures[field] && (retinalEncodingsAndMeasures[field] = []);\n retinalEncodingsAndMeasures[field].push(...measures);\n }\n });\n });\n\n for (const key in retinalEncodingsAndMeasures) {\n if ({}.hasOwnProperty.call(retinalEncodingsAndMeasures, key)) {\n retinalEncodingsAndMeasures[key] = [...new Set(retinalEncodingsAndMeasures[key])];\n }\n }\n return retinalEncodingsAndMeasures;\n};\n\nexport const transformDataModels = (transform, dataModel) => {\n const dataModels = {};\n for (const key in transform) {\n if ({}.hasOwnProperty.call(transform, key)) {\n const transformVal = transform[key];\n dataModels[key] = transformVal(dataModel);\n }\n }\n\n return dataModels;\n};\n\nexport const getLayerFromDef = (context, definition, existingLayer) => {\n let instances = existingLayer;\n const dependencies = context._layerDeps;\n if (!existingLayer) {\n instances = layerFactory.getLayerInstance(definition);\n }\n const layers = {};\n const instanceArr = toArray(instances);\n definition = toArray(definition);\n definition.reduce((acc, def, idx) => {\n const instance = instanceArr[idx];\n instance.config(def);\n instance.dependencies(dependencies);\n if (def.name) {\n instance.alias(def.name);\n }\n layers[instance.alias()] = instance;\n return acc;\n }, {});\n return layers;\n};\n\nexport const resolveEncodingTransform = (layerInst, store) => {\n const encodingTransform = layerInst.config().encodingTransform || {};\n const resolvable = encodingTransform.resolvable;\n let depArr = [];\n if (resolvable) {\n const resolved = resolvable(store);\n depArr = resolved.depArr;\n layerInst.encodingTransform(resolved.fn);\n } else if (encodingTransform instanceof Function) {\n layerInst.encodingTransform(encodingTransform);\n }\n return depArr;\n};\n\nexport const createLayers = (context, layerDefinitions) => {\n const layersMap = context._layersMap;\n const markSet = {};\n const store = {\n layers: {},\n components: {\n unit: context\n }\n };\n let layerIndex = 0;\n let layers = layerDefinitions.sort((a, b) => a.order - b.order).reduce((layersArr, layerDef, i) => {\n const mark = layerDef.mark;\n const definition = layerDef.def;\n const markId = `${mark}-${i}`;\n const defArr = toArray(definition);\n defArr.forEach((def) => {\n def.order = layerDef.order + layerIndex;\n });\n layerIndex += defArr.length;\n const instances = getLayerFromDef(context, definition, layersMap[markId]);\n store.layers = Object.assign(store.layers, instances);\n const instanceValues = Object.values(instances);\n layersArr = layersArr.concat(...instanceValues);\n layersMap[markId] = instanceValues;\n markSet[markId] = markId;\n return layersArr;\n }, []);\n store.unit = context;\n const layerdeps = {};\n layers.forEach((layer) => {\n const depArr = resolveEncodingTransform(layer, store);\n layerdeps[layer.alias()] = depArr;\n });\n\n const order = getDependencyOrder(layerdeps);\n layers = order.map(name => store.layers[name]);\n for (const key in layersMap) {\n if (!(key in markSet)) {\n layersMap[key].forEach(layer => layer.remove());\n delete layersMap[key];\n }\n }\n return layers;\n};\n\nexport const attachDataToLayers = (layers, dm, transformedDataModels) => {\n layers.forEach((layer) => {\n const dataSource = layer.config().source;\n const dataModel = dataSource instanceof Function ? dataSource(dm) : (transformedDataModels[dataSource] || dm);\n layer.data(dataModel);\n });\n};\n\nexport const attachAxisToLayers = (axes, layers, layerAxisIndex) => {\n layers.forEach((layer) => {\n const layerId = layer.id();\n const axesObj = {};\n\n objectIterator(axes, (key) => {\n const axisInf = layerAxisIndex[layerId];\n if (axisInf) {\n axes[key] && (axesObj[key] = axes[key][axisInf[key] || 0]);\n }\n });\n Object.keys(axesObj).length && layer.axes(axesObj);\n });\n};\n\nexport const getLayerAxisIndex = (layers, fields) => {\n const layerAxisIndex = {};\n layers.forEach((layer) => {\n const { axis, encoding } = layer.config();\n const id = layer.id();\n ['x', 'y'].forEach((type) => {\n let index;\n const field = defaultValue(getObjProp(axis, type), encoding[type] && encoding[type].field);\n if (fields[type]) {\n index = fields[type].findIndex(fieldInst => fieldInst.getMembers().indexOf(field) !== -1);\n } else {\n index = 0;\n }\n !layerAxisIndex[id] && (layerAxisIndex[id] = {});\n layerAxisIndex[id][type] = index;\n });\n });\n return layerAxisIndex;\n};\n\nexport const unionDomainFromLayers = (layers, axisFields, layerAxisIndex, fieldsConfig) => {\n let domains = {};\n layers = layers.filter(layer => layer.getDataDomain() !== null);\n layers.forEach((layer) => {\n let domainValues = {};\n const config = layer.config();\n const encoding = config.encoding;\n const layerDomain = layer.getDataDomain();\n const layerId = layer.id();\n\n if (layerDomain !== null && config.calculateDomain !== false) {\n domainValues = Object.entries(layerDomain);\n if (layerDomain.x || layerDomain.y) {\n domains = domainValues.reduce((fieldDomain, domain) => {\n const encodingType = domain[0];\n const field = encoding[encodingType].field;\n const axisIndex = layerAxisIndex[layerId][encodingType];\n const fieldStr = `${axisFields[encodingType][axisIndex]}`;\n fieldDomain[fieldStr] = fieldDomain[fieldStr] || [];\n fieldDomain[fieldStr] = unionDomain(([fieldDomain[fieldStr], domain[1]]),\n fieldsConfig[field].def.subtype ? fieldsConfig[field].def.subtype :\n fieldsConfig[field].def.type);\n\n return fieldDomain;\n }, domains);\n } else { domains = domainValues; }\n }\n });\n return domains;\n};\n\nexport const renderLayers = (context, container, layers, measurement) => {\n context._lifeCycleManager.notify({ client: layers, action: 'beforedraw', formalName: 'layer' });\n const config = context.config();\n const classPrefix = config.classPrefix;\n const orderedLayers = context.layers().sort((a, b) => a.config().order - b.config().order);\n const layerParentGroup = makeElement(container, 'g', [1], `${classPrefix}-layer-group`);\n makeElement(layerParentGroup, 'g', orderedLayers, null, {\n update: (group, layer) => {\n layer.measurement(measurement);\n layer.dataProps({\n timeDiffs: context.store().get(TIMEDIFFS)\n });\n layer.config().render !== false && layer.mount(group.node());\n }\n });\n return this;\n};\n\nexport const getNearestDimensionalValue = (context, position) => {\n const fields = context.fields();\n if (!fields.x.length || !fields.y.length) {\n return null;\n }\n const data = context.data();\n const axes = context.axes();\n const fieldsConfig = data.getFieldsConfig();\n const xField = getObjProp(fields, 'x', 0).getMembers()[0];\n const yField = getObjProp(fields, 'y', 0).getMembers()[0];\n const xFieldType = fieldsConfig[xField] && (fieldsConfig[xField].def.subtype ? fieldsConfig[xField].def.subtype :\n fieldsConfig[xField].def.type);\n const yFieldType = fieldsConfig[yField] && (fieldsConfig[yField].def.subtype ? fieldsConfig[yField].def.subtype :\n fieldsConfig[yField].def.type);\n\n const entryVal = [['x', xFieldType, xField], ['y', yFieldType, yField]].find(entry =>\n entry[1] === DimensionSubtype.CATEGORICAL || entry[1] === DimensionSubtype.TEMPORAL);\n\n if (!entryVal || (xFieldType !== FieldType.MEASURE && yFieldType !== FieldType.MEASURE)) {\n return null;\n }\n const field = entryVal[2];\n const index = fieldsConfig[field].index;\n let key = axes[entryVal[0]][0].invert(position[entryVal[0]]);\n if (entryVal[1] === DimensionSubtype.TEMPORAL) {\n const filterData = [...new Set(data.getData().data.map(d => d[index]))];\n key = filterData[getClosestIndexOf(filterData, key)];\n }\n\n return key !== undefined ? [[field], [key]] : null;\n};\n\nexport const getLayersBy = (layers, searchBy, value) => layers.filter((layer) => {\n const name = searchBy === 'type' ? layer.constructor.formalName() : layer.alias();\n return name === value;\n});\n\nexport const removeLayersBy = (layers, searchBy, value) => {\n layers.filter((inst) => {\n const name = searchBy === 'type' ? inst.config().mark : inst.alias();\n if (name === value) {\n inst.remove();\n return false;\n }\n return true;\n });\n};\n\nexport const createSideEffectGroup = (container, className) => makeElement(container, 'g', [1], className).node();\n\nexport const getAdjustedDomain = (max, min) => {\n const y1ratio = max[0] / (max[0] - min[0]);\n const y2ratio = max[1] / (max[1] - min[1]);\n\n // adjust min/max values for positive negative values zero line etc\n let allSameSign = false;\n\n // if all numbers are positive set floor to zero\n if (min[0] > 0 && min[1] > 0 && min[1] > 0 && max[1] > 0) {\n allSameSign = true;\n min[0] = 0;\n min[1] = 0;\n }\n\n // if all numbers are negative set ceiling to zero\n if (min[0] < 0 && min[1] < 0 && min[1] < 0 && max[1] < 0) {\n allSameSign = true;\n max[0] = 0;\n max[1] = 0;\n }\n\n // align zero line if necessary\n if (!allSameSign && y1ratio !== y2ratio) {\n if (y1ratio < y2ratio) {\n // adjust min[1]\n min[1] = min[0] / max[0] * max[1];\n } else {\n // adjust min[0]\n min[0] = min[1] / max[1] * max[0];\n }\n }\n return {\n max,\n min\n };\n};\n","import { getObjProp, defaultValue, makeElement, DimensionSubtype, DataModel } from 'muze-utils';\nimport { ScaleType } from '@chartshq/muze-axis';\nimport { layerFactory } from '@chartshq/visual-layer';\nimport { GRIDLINEPARENTGROUPCLASS, GRIDBANDPARENTGROUPCLASS } from '../enums/constants';\nimport { TIMEDIFFS } from '../enums/reactive-props';\n\nconst LINEAR = ScaleType.LINEAR;\n\nconst getLayerDefinition = (context, axes, type, orientation) => {\n let encoding;\n const config = context.config();\n const { classPrefix, gridLines, gridBands } = config;\n const gridLineColor = gridLines.color;\n const zeroLineColor = gridLines.zeroLineColor;\n const defClassName = type === 'band' ? gridBands.defClassName : gridLines.defClassName;\n const gridBandColor = gridBands[orientation].color;\n const axis = axes[orientation][0];\n const isLinearScale = axis.constructor.type() === LINEAR;\n\n if (type === 'band' && isLinearScale) {\n encoding = {\n [orientation]: `${orientation}value`,\n [`${orientation}0`]: `${orientation}value0`\n };\n } else {\n encoding = {\n [orientation]: isLinearScale ? `${orientation}value` : `${orientation}dim`\n };\n }\n encoding.color = {\n value: (data, i) => {\n const isNegativeDomain = isLinearScale && axis.domain()[0] < 0;\n if (type === 'band') {\n return gridBandColor[i % 2];\n }\n return isNegativeDomain && data[orientation] === 0 ? zeroLineColor : gridLineColor;\n }\n };\n\n return {\n definition: {\n defClassName: `${defClassName}-${orientation}`,\n className: config.className,\n individualClassName: (data, i) => {\n let className;\n const isNegativeDomain = isLinearScale && axis.domain()[0] < 0;\n if (isNegativeDomain && data.y === 0 && type !== 'band') {\n className = `${classPrefix}-axis-zero-line`;\n } else {\n className = `${classPrefix}-grid-${type}-${orientation}-${i % 2}`;\n }\n return className;\n },\n [`pad${orientation.toUpperCase()}`]: type === 'band' ? 0 : undefined,\n encoding\n },\n axes: {\n [orientation]: axis\n },\n interactive: false\n };\n};\n\nconst getDefaultVisibilty = (show, axis) => {\n if (axis.constructor.type() === LINEAR) {\n return show;\n }\n return false;\n};\n\nexport const getGridLayerDefinitions = (context, config, type) => ['x', 'y'].map((axisType) => {\n const show = defaultValue(config[axisType] && config[axisType].show,\n getDefaultVisibilty(config.show, context.axes()[axisType][0]));\n\n return show ? getLayerDefinition(context, context.axes(), type, axisType) : undefined;\n}).filter(d => d !== undefined);\n\nexport const getGridLayerData = (axes, fields, fieldsConfig) => {\n const gridData = {};\n ['x', 'y'].forEach((type) => {\n let ticks = axes[type][0].getTickValues();\n const subtype = getObjProp(fieldsConfig, getObjProp(fields, type, 0).getMembers()[0], 'def', 'subtype');\n const jsonData = [];\n const schema = [\n {\n name: 'yvalue',\n type: 'measure'\n }, {\n name: 'xvalue',\n type: 'measure'\n },\n {\n name: 'yvalue0',\n type: 'measure'\n }, {\n name: 'xvalue0',\n type: 'measure'\n }, {\n name: 'xdim',\n type: 'dimension',\n subtype\n }, {\n name: 'ydim',\n type: 'dimension',\n subtype\n }\n ];\n const len = Math.max(ticks.length);\n ticks = subtype === DimensionSubtype.TEMPORAL ? ticks.map(d => d.getTime()) : ticks;\n for (let i = 0; i < len; i += 1) {\n jsonData.push({\n [`${type}value`]: ticks[i],\n [`${type}value0`]: ticks[i + 1],\n [`${type}dim`]: ticks[i],\n [`${type}dim`]: ticks[i]\n });\n }\n gridData[type] = new DataModel(jsonData, schema);\n });\n return gridData;\n};\n\nexport const createGridLineLayer = (context, data) => {\n const vuConf = context.config();\n const dependencies = context._layerDeps;\n const measurement = {\n width: context.width(),\n height: context.height()\n };\n\n ['band', 'line'].forEach((type) => {\n let mark;\n let config;\n let instances;\n if (type === 'band') {\n mark = 'bar';\n config = vuConf.gridBands;\n instances = context._gridbands;\n } else {\n mark = 'tick';\n config = vuConf.gridLines;\n instances = context._gridlines;\n }\n const definitions = getGridLayerDefinitions(context, config, type);\n\n definitions.forEach((atomicDef, i) => {\n let layer;\n const definition = atomicDef.definition;\n const axesObj = atomicDef.axes;\n const sConf = layerFactory.getSerializedConf(mark, definition);\n sConf.mark = mark;\n if (!instances[i]) {\n layer = layerFactory.getLayerInstance(sConf);\n layer.dependencies(dependencies);\n } else {\n layer = instances[i];\n }\n\n layer.config(sConf)\n .measurement(measurement)\n .data(axesObj.y ? data.y : data.x)\n .dataProps({\n timeDiffs: context.store().get(TIMEDIFFS)\n })\n .axes(axesObj);\n instances[i] = layer;\n });\n });\n};\n\nexport const renderGridLineLayers = (context, container) => {\n const axes = context.axes();\n const config = context.config();\n const classPrefix = config.classPrefix;\n\n if (axes && ((axes.x && axes.x.length) || (axes.y && axes.y.length))) {\n const gridBandData = getGridLayerData(axes, context.fields(), context.data().getFieldsConfig());\n createGridLineLayer(context, gridBandData);\n [[context._gridlines, `${classPrefix}-${GRIDLINEPARENTGROUPCLASS}`],\n [context._gridbands, `${classPrefix}-${GRIDBANDPARENTGROUPCLASS}`]].forEach((entry) => {\n const [instances, parentGroupClass] = entry;\n const mountPoint = makeElement(container, 'g', [1], `.${parentGroupClass}`);\n const className = `${parentGroupClass}-group`;\n makeElement(mountPoint, 'g', instances, `.${className}`, {\n update: (group, instance) => {\n instance.mount(group.node());\n }\n });\n });\n }\n};\n","import { CLASSPREFIX, CONSOLIDATED } from './enums/constants';\n\n/**\n * Returns the default configuration of the visual unit\n * @return {Object} Default configuration of visual unit\n */\nexport const defaultConfig = {\n classPrefix: CLASSPREFIX,\n defClassName: 'visual-unit',\n className: '',\n trackerClassName: 'visual-unit-tracker',\n gridLines: {\n defClassName: 'axis-grid-lines',\n className: '',\n show: true,\n color: '#efefef',\n zeroLineColor: '#b6b6b6'\n },\n gridBands: {\n defClassName: 'axis-grid-bands',\n className: '',\n show: false,\n y: {\n color: ['#fff', '#fbfbfb']\n },\n x: {\n color: ['#fff', '#f9f9f9']\n }\n },\n arcLayerClassName: 'layer-arc',\n interaction: {\n tooltip: {\n mode: CONSOLIDATED\n }\n },\n sideEffectClassName: 'side-effect-container'\n};\n","export const CLASSPREFIX = 'muze';\nexport const IDFIELD = '__id__';\nexport const GRIDLINEPARENTGROUPCLASS = 'grid-lines';\nexport const GRIDBANDPARENTGROUPCLASS = 'grid-bands';\nexport const CONSOLIDATED = 'consolidated';\nexport const FRAGMENTED = 'fragmented';\nexport const FACET_BY_FIELDS = 'facetByFields';\nexport const RETINAL_FIELDS = 'retinalFields';\nexport const PARENT_ALIAS = 'parentAlias';\nexport const LAYERS = 'layers';\nexport const CACHED_DATA = 'cachedData';\nexport const STORE = 'store';\n\n","import { mergeRecursive } from 'muze-utils';\nimport { defaultConfig } from './default-config';\nimport { CONFIG, LAYERDEFS, AXES, WIDTH, HEIGHT, MOUNT, TRANSFORM, FIELDS, DATA } from './enums/reactive-props';\n\nexport default {\n [CONFIG]: {\n value: null,\n meta: {\n sanitization: (config, oldConfig) => (\n mergeRecursive(oldConfig || mergeRecursive({}, defaultConfig), config)\n )\n }\n },\n [LAYERDEFS]: {\n value: null\n },\n [AXES]: {\n value: null,\n meta: {\n sanitization: (axes, prevAxes) => Object.assign(prevAxes || {}, axes)\n }\n },\n [WIDTH]: {\n value: null\n },\n [HEIGHT]: {\n value: null\n },\n [MOUNT]: {\n value: null\n },\n [TRANSFORM]: {\n value: null\n },\n [FIELDS]: {\n value: null\n },\n [DATA]: {\n value: null,\n meta: {\n preset: (data, context) => {\n if (context._cache) {\n const cachedData = context.cachedData();\n context.cachedData([...cachedData, data]);\n } else {\n const oldData = context.data();\n oldData && oldData.unsubscribe('propagation');\n context.cachedData([data]);\n }\n }\n }\n }\n};\n","import { DimensionSubtype } from 'muze-utils';\nimport * as PROPS from './enums/reactive-props';\nimport {\n transformDataModels,\n getDimensionMeasureMap,\n createLayers,\n attachDataToLayers,\n attachAxisToLayers,\n unionDomainFromLayers,\n getLayerAxisIndex\n} from './helper';\n\nconst axisMap = {\n 0: 'primary',\n 1: 'secondary'\n};\nconst axisProps = [PROPS.primaryXAxisUpdated, PROPS.secondaryXAxisUpdated, PROPS.primaryYAxisUpdated,\n PROPS.secondaryYAxisUpdated];\n\nexport const listenerMap = context => ([\n {\n type: 'registerImmediateListener',\n props: [PROPS.AXES],\n listener: ([, axes]) => {\n ['x', 'y'].forEach((type) => {\n const axesArr = axes[type] || [];\n axesArr.forEach((axis, i) => {\n axis.on('update', () => {\n context.store().commit(PROPS[`${axisMap[i]}${axis.isReverse() ? 'Y' : 'X'}AxisUpdated`], true);\n });\n });\n });\n }\n },\n {\n type: 'registerImmediateListener',\n props: [PROPS.CONFIG],\n listener: ([, config]) => {\n config && context.firebolt().config(config.interaction);\n }\n },\n {\n type: 'computed',\n props: [PROPS.LAYERSCREATED],\n listener: fetch => fetch(PROPS.LAYERDEFS, PROPS.FIELDS, (layerDefs, fields) => {\n const layerDefsValue = layerDefs.value;\n const fieldsVal = fields.value;\n if (layerDefsValue && fieldsVal) {\n const layers = createLayers(context, layerDefs.value);\n context.layers(layers);\n context._layerAxisIndex = getLayerAxisIndex(context.layers(), fieldsVal);\n context._lifeCycleManager.notify({ client: layers, action: 'initialized', formalName: 'layer' });\n return true;\n }\n return null;\n })\n },\n {\n type: 'computed',\n props: [PROPS.TIMEDIFFS],\n listener: fetch => fetch(PROPS.DATA, PROPS.FIELDS, PROPS.AXES, (data, fields, axes) => {\n const dataModel = data.value;\n const axisFields = fields.value;\n const axesObj = axes.value;\n if (dataModel && axisFields && axesObj) {\n const timeDiffs = {};\n const timeDiffsByField = {};\n ['x', 'y'].forEach((type) => {\n const field = axisFields[type][0];\n if (field && field.subtype() === DimensionSubtype.TEMPORAL) {\n timeDiffs[type] = field.getMinDiff();\n timeDiffsByField[field] = timeDiffs[type];\n axesObj[type].forEach(axis => axis.minDiff(timeDiffs[type]));\n }\n });\n context._timeDiffsByField = timeDiffsByField;\n return timeDiffs;\n }\n return null;\n })\n },\n {\n type: 'computed',\n props: [PROPS.DATADOMAIN],\n listener: fetch => fetch(PROPS.DATA, PROPS.LAYERSCREATED, PROPS.AXES, PROPS.TRANSFORM,\n (dataModel, layersCreated, axes, transform) => {\n const dataModelVal = dataModel.value;\n const layerAxisIndexVal = context._layerAxisIndex;\n const axesVal = axes.value;\n if (dataModelVal && layersCreated.value && axesVal && layerAxisIndexVal) {\n const layers = context.layers();\n const dataModels = transformDataModels(transform.value, dataModelVal);\n context._transformedDataModels = dataModels;\n context._lifeCycleManager.notify({ client: layers, action: 'beforeupdate', formalName: 'layer' });\n attachDataToLayers(layers, dataModelVal, context._transformedDataModels);\n context._dimensionMeasureMap = getDimensionMeasureMap(layers,\n dataModelVal.getFieldsConfig(), context.retinalFields());\n attachAxisToLayers(axesVal, layers, layerAxisIndexVal);\n context._lifeCycleManager.notify({ client: layers, action: 'updated', formalName: 'layer' });\n return unionDomainFromLayers(layers, context.fields(),\n layerAxisIndexVal, dataModelVal.getFieldsConfig());\n }\n return null;\n })\n },\n {\n type: 'registerImmediateListener',\n props: [PROPS.DATADOMAIN],\n listener: ([, dataDomain]) => {\n dataDomain !== null && context.updateAxisDomain(dataDomain);\n }\n },\n {\n type: 'registerChangeListener',\n props: [PROPS.MOUNT, PROPS.DATA, ...axisProps],\n listener: (mount, data) => {\n const container = mount[1];\n if (container && data[1]) {\n context.render(container);\n }\n }\n }\n]);\n","import { FACET_BY_FIELDS, RETINAL_FIELDS, PARENT_ALIAS, LAYERS, STORE, CACHED_DATA } from './enums/constants';\n\nexport const PROPS = {\n [FACET_BY_FIELDS]: {},\n [RETINAL_FIELDS]: {},\n [PARENT_ALIAS]: {},\n [LAYERS]: {},\n [STORE]: {},\n [CACHED_DATA]: {},\n detailFields: {}\n};\n","import { CommonProps } from 'muze-utils';\nimport { DATA, MOUNT } from '../enums/reactive-props';\n\nexport const clearActionHistory = (context) => {\n const actionHistory = context._actionHistory;\n for (const key in actionHistory) {\n if (actionHistory[key].isMutableAction) {\n delete context._actionHistory[key];\n }\n }\n};\n\nexport const dispatchQueuedSideEffects = (context) => {\n const queuedSideEffects = context._queuedSideEffects;\n Object.entries(queuedSideEffects).forEach((entry) => {\n const sideEffect = entry[1];\n context.dispatchSideEffect(sideEffect.name, ...sideEffect.params);\n });\n context._queuedSideEffects = {};\n};\n\nexport const registerListeners = (firebolt) => {\n const context = firebolt.context;\n const store = context.store();\n\n store.registerImmediateListener([DATA, MOUNT], (dataModel, mount) => {\n const dm = dataModel[1];\n\n if (dm && mount[1]) {\n const originalData = firebolt.context.cachedData()[0];\n firebolt.createSelectionSet(firebolt.context.data().getData().uids);\n firebolt.attachPropagationListener(originalData);\n }\n }, true);\n\n context._layerDeps.throwback.registerChangeListener([CommonProps.ON_LAYER_DRAW],\n ([, onlayerdraw]) => {\n if (onlayerdraw) {\n firebolt.initializeSideEffects();\n firebolt.config(context.config().interaction);\n firebolt.mapActionsAndBehaviour();\n dispatchQueuedSideEffects(firebolt);\n clearActionHistory(firebolt);\n }\n });\n};\n\n","import { DimensionSubtype } from 'muze-utils';\n\nconst getRangeFromData = (instance, selectionDataModel, propConfig) => {\n let criteria;\n const dataObj = selectionDataModel[0].getData();\n const propCriteria = propConfig.payload.criteria;\n const sourceIdentifiers = propConfig.sourceIdentifiers;\n const schema = dataObj.schema;\n const fieldMap = instance.data().getFieldsConfig();\n const data = dataObj.data;\n const isActionSourceSame = instance.id() === propConfig.sourceId;\n\n if (isActionSourceSame) {\n criteria = propCriteria;\n } else {\n criteria = (sourceIdentifiers !== null) ? schema.reduce((acc, obj, index) => {\n let range;\n const field = obj.name;\n const fieldObj = fieldMap[field];\n const type = fieldObj && (fieldObj.def.subtype ? fieldObj.def.subtype : fieldObj.def.type);\n const isDimension = type === DimensionSubtype.CATEGORICAL;\n\n if (!fieldObj) {\n return acc;\n }\n\n if (!isDimension) {\n range = [Math.min(...data.map(d => d[index])), Math.max(...data.map(d => d[index]))];\n } else {\n range = data.map(d => d[index]);\n }\n acc[field] = range;\n return acc;\n }, {}) : null;\n }\n return criteria;\n};\n\nexport const payloadGenerator = {\n brush: (instance, selectionDataModel, propConfig) => {\n const propPayload = propConfig.payload;\n const criteria = getRangeFromData(instance, selectionDataModel, propConfig);\n const payload = Object.assign({}, propPayload);\n payload.criteria = criteria;\n return payload;\n },\n\n __default: (instance, selectionDataModel, propConfig) => {\n const propPayload = propConfig.payload;\n const sourceIdentifiers = propConfig.sourceIdentifiers;\n const dataObj = selectionDataModel[0].getData();\n let schema = dataObj.schema;\n const payload = Object.assign({}, propPayload);\n schema = dataObj.schema;\n const data = dataObj.data;\n const sourceFields = schema.map(d => d.name);\n payload.criteria = !sourceIdentifiers && selectionDataModel[0].isEmpty() ? null :\n [sourceFields, ...data];\n payload.sourceFields = sourceIdentifiers ? sourceIdentifiers.getSchema().map(d => d.name) : [];\n return payload;\n }\n};\n\n","import { isSimpleObject, FieldType, DataModel } from 'muze-utils';\n\nconst getModelWithFacetData = (dm, data) => {\n const dataObj = dm.getData();\n const schema1 = dataObj.schema;\n const data1 = dataObj.data;\n const jsonData = [];\n const schema2 = data[0].map(d => ({\n name: `${d}`,\n type: FieldType.DIMENSION\n }));\n const data2 = data[1];\n\n data1.forEach((d) => {\n const tuple = {};\n schema1.forEach((obj, i) => {\n tuple[obj.name] = d[i];\n });\n schema2.forEach((obj, i) => {\n tuple[obj.name] = data2[i];\n });\n jsonData.push(tuple);\n });\n\n return new DataModel(jsonData, [...schema1, ...schema2]);\n};\n\nexport const propagateValues = (instance, action, config = {}) => {\n let propagationData;\n const payload = config.payload;\n const selectionSet = config.selectionSet;\n const propagationFieldInf = config.propagationFields[action] || {};\n const propagationFields = propagationFieldInf.fields || [];\n const append = propagationFieldInf.append;\n const criteria = payload.criteria;\n const context = instance.context;\n const dataModel = context.cachedData()[0];\n const sourceId = context.id();\n const sideEfffects = instance.sideEffects();\n const behaviourEffectMap = instance._behaviourEffectMap;\n const mergedModel = selectionSet.mergedEnter.model;\n const fieldsConfig = dataModel.getFieldsConfig();\n payload.sourceUnit = sourceId;\n payload.action = action;\n payload.sourceCanvas = context.parentAlias();\n const propagationBehaviourMap = instance._propagationBehaviourMap;\n const propagationBehaviour = propagationBehaviourMap[action] || action;\n\n let propFields = [];\n if (criteria === null) {\n propagationData = null;\n } else if (isSimpleObject(criteria)) {\n propFields = Object.keys(criteria || {});\n propagationData = mergedModel ? mergedModel.project(propFields) : null;\n } else {\n propFields = criteria[0];\n propagationData = mergedModel ? mergedModel.project(propFields) : null;\n }\n\n const facetByFields = context.facetByFields();\n if (propagationData !== null && propagationFields.length) {\n const fields = propagationData.getData().schema.map(d => d.name);\n propagationData = getModelWithFacetData(propagationData, facetByFields);\n propFields = append ? [...fields, ...propagationFields] : propagationFields;\n propagationData = propagationData.project(propFields);\n }\n\n let propagateInterpolatedValues = false;\n if (propFields.length && propFields.every(field => fieldsConfig[field] &&\n fieldsConfig[field].def.type === FieldType.MEASURE)) {\n propagateInterpolatedValues = true;\n }\n\n const groupId = context.parentAlias();\n payload.action = action;\n const behaviourInstance = instance._actions.behavioural[propagationBehaviour];\n const isMutableAction = behaviourInstance ? behaviourInstance.constructor.mutates() : false;\n\n const filterFn = (entry, propagationConf) => {\n const effects = behaviourEffectMap[entry.config.action];\n const mutates = entry.config.groupId ?\n effects.some(d => sideEfffects[d.name || d].constructor.mutates()) : true;\n return entry.config.groupId !== propagationConf.groupId && mutates;\n };\n\n const sourceBehaviour = instance._actions.behavioural[action];\n const mutates = sourceBehaviour ? sourceBehaviour.constructor.mutates() : false;\n let propConfig = {\n payload,\n action,\n criteria: propagationData,\n isMutableAction: mutates,\n propagateInterpolatedValues,\n groupId,\n sourceId: mutates ? groupId : sourceId,\n filterFn,\n enabled: (propConf, firebolt) => (action !== propagationBehaviour ?\n propConf.payload.sourceCanvas === firebolt.context.parentAlias() : true)\n };\n\n dataModel.propagate(propagationData, propConfig, true);\n\n if (action !== propagationBehaviour) {\n propConfig = {\n payload,\n sourceId: isMutableAction ? groupId : sourceId,\n criteria: propagationData,\n isMutableAction,\n propagateInterpolatedValues,\n action: propagationBehaviour,\n groupId,\n applyOnSource: action === propagationBehaviour,\n enabled: (propConf, firebolt) => propConf.payload.sourceCanvas !== firebolt.context.parentAlias(),\n filterFn\n };\n\n dataModel.propagate(propagationData, propConfig, true, {\n filterImmutableAction: (actionInf, propInf) => actionInf.groupId !== propInf.groupId\n });\n }\n};\n","import { FieldType } from 'muze-utils';\nimport { Firebolt, SpawnableSideEffect } from '@chartshq/muze-firebolt';\nimport { registerListeners } from './helper';\nimport { payloadGenerator } from './payload-generator';\nimport { propagateValues } from './data-propagator';\n\n/**\n * This class manages the interactions of visual unit. It associates physical actions with\n * behavioural actions. It also propagates the behavioural actions to other datamodels.\n */\nexport default class UnitFireBolt extends Firebolt {\n constructor (...params) {\n super(...params);\n registerListeners(this);\n }\n\n propagate (behaviour, payload, selectionSet, sideEffects) {\n propagateValues(this, behaviour, {\n payload,\n selectionSet,\n sideEffects,\n propagationFields: this._propagationFields\n });\n }\n\n getApplicableSideEffects (sideEffects, payload, propagationInf) {\n const context = this.context;\n const unitId = context.id();\n const aliasName = context.parentAlias();\n const propagationSourceCanvas = propagationInf.propPayload && propagationInf.propPayload.sourceCanvas;\n const sourceUnitId = propagationInf.propPayload && propagationInf.propPayload.sourceUnit;\n const sourceSideEffects = this._sourceSideEffects;\n const sideEffectInstances = this.sideEffects();\n const actionOnSource = sourceUnitId ? sourceUnitId === unitId : true;\n\n const applicableSideEffects = payload.sideEffects ? [{\n effects: payload.sideEffects,\n behaviours: [payload.action]\n }] : sideEffects;\n applicableSideEffects.forEach((d) => {\n let mappedEffects = d.effects;\n mappedEffects = mappedEffects.filter((se) => {\n const mutates = sideEffectInstances[se.name || se].constructor.mutates();\n if (mutates && propagationInf.isMutableAction === false) {\n return false;\n }\n if (!actionOnSource && payload.criteria !== null) {\n const sideEffectChecker = sourceSideEffects[se.name || se];\n return sideEffectChecker ? sideEffectChecker(propagationInf.propPayload, context) : true;\n }\n if (propagationSourceCanvas === aliasName || actionOnSource) {\n return se.applyOnSource !== false;\n }\n\n return true;\n });\n d.effects = mappedEffects;\n });\n return applicableSideEffects;\n }\n\n shouldApplySideEffects (propagate) {\n return propagate === false;\n }\n\n onDataModelPropagation () {\n return (data, config) => {\n let isSourceFieldPresent = true;\n let isMutableAction = false;\n const propPayload = config.payload;\n const sourceIdentifiers = config.sourceIdentifiers;\n const enabledFn = config.enabled;\n const action = config.action;\n const payloadFn = payloadGenerator[action] || payloadGenerator.__default;\n\n if (sourceIdentifiers) {\n const fieldsConfig = sourceIdentifiers.getFieldsConfig();\n const sourceIdentifierFields = Object.keys(fieldsConfig);\n const propFields = Object.keys(data[0].getFieldsConfig());\n if (!Object.values(fieldsConfig).some(d => d.def.type === FieldType.MEASURE)) {\n isSourceFieldPresent = sourceIdentifierFields.some(d => propFields.indexOf(d) !== -1);\n }\n }\n\n const payload = payloadFn(this.context, data, config);\n const sourceBehaviours = this._sourceBehaviours;\n const filterFn = sourceBehaviours[action] || sourceBehaviours['*'];\n let enabled = true;\n\n if (filterFn) {\n enabled = filterFn(propPayload || {}, this.context);\n }\n\n if (enabledFn) {\n enabled = enabledFn(config, this) && enabled !== false;\n }\n\n if (enabled) {\n const effects = this._behaviourEffectMap[action];\n const sideEffectInstances = this.sideEffects();\n isMutableAction = config.groupId ?\n effects.some(d => sideEffectInstances[d.name || d].constructor.mutates()) : config.isMutableAction;\n\n const propagationInf = {\n propagate: false,\n data,\n propPayload,\n sourceIdentifiers,\n persistent: false,\n isSourceFieldPresent,\n sourceId: config.propagationSourceId,\n isMutableAction: config.isMutableAction\n };\n\n this._actionHistory[action] = {\n payload,\n propagationInf,\n isMutableAction\n };\n this.dispatchBehaviour(action, payload, propagationInf);\n }\n };\n }\n\n initializeSideEffects () {\n super.initializeSideEffects();\n const sideEffects = this.sideEffects();\n for (const key in sideEffects) {\n if ({}.hasOwnProperty.call(sideEffects, key)) {\n sideEffects[key] instanceof SpawnableSideEffect && sideEffects[key].drawingContext(() => {\n const context = this.context;\n return context.getDrawingContext();\n });\n }\n }\n }\n\n prepareSelectionSets (behaviours) {\n const data = this.context.data();\n if (data) {\n this.createSelectionSet(data.getData().uids, behaviours);\n }\n return this;\n }\n\n remove () {\n this.context.cachedData()[0].unsubscribe('propagation');\n return this;\n }\n}\n","import { layerFactory } from '@chartshq/visual-layer';\nimport {\n setAttrs,\n CommonProps,\n getUniqueId,\n getQualifiedClassName,\n selectElement,\n transactor,\n Store,\n makeElement,\n registerListeners,\n generateGetterSetters,\n getDataModelFromIdentifiers,\n isSimpleObject,\n transposeArray,\n FieldType\n} from 'muze-utils';\nimport { physicalActions, sideEffects, behaviouralActions, behaviourEffectMap } from '@chartshq/muze-firebolt';\nimport { actionBehaviourMap } from './firebolt/action-behaviour-map';\nimport {\n renderLayers,\n getNearestDimensionalValue,\n removeLayersBy,\n getLayersBy,\n getLayerFromDef,\n attachAxisToLayers,\n getLayerAxisIndex,\n createSideEffectGroup,\n getAdjustedDomain,\n resolveEncodingTransform\n} from './helper';\nimport { renderGridLineLayers } from './helper/grid-lines';\nimport localOptions from './local-options';\nimport { listenerMap } from './listener-map';\nimport {\n primaryYAxisUpdated,\n primaryXAxisUpdated,\n secondaryXAxisUpdated,\n secondaryYAxisUpdated,\n DATADOMAIN,\n TIMEDIFFS\n} from './enums/reactive-props';\nimport { PROPS } from './props';\nimport UnitFireBolt from './firebolt';\nimport './styles.scss';\n\nconst FORMAL_NAME = 'unit';\n\n/**\n * @module VisualUnit\n * A hierarchical component of renderer which manages multiple layers. This logical\n * module is responsible for layouting layers, attach axis with them, resolving conflicts of layers.\n */\n\n/**\n * Basic unit implementaiton\n * @class VisualUnit\n */\nexport default class VisualUnit {\n\n /**\n * Creates instance of visualization unit\n * @param registry {Object} Component registry\n * @param dependencies {Object} Dependencies required by visual unit.\n */\n constructor (registry, dependencies) {\n this._id = getUniqueId();\n this._dependencies = dependencies;\n this._layerDeps = {\n throwback: new Store({\n onlayerdraw: false\n }),\n smartLabel: dependencies.smartLabel\n };\n this._renderedResolve = null;\n this._renderedPromise = new Promise((resolve) => {\n this._renderedResolve = resolve;\n });\n this._layerDeps.throwback.registerChangeListener([CommonProps.ON_LAYER_DRAW], () => {\n this._renderedResolve();\n this._lifeCycleManager.notify({ client: this.layers(), action: 'drawn', formalName: 'layer' });\n });\n\n this._lifeCycleManager = dependencies.lifeCycleManager;\n this._layersMap = {};\n this._gridlines = [];\n this._gridbands = [];\n this._layerAxisIndex = {};\n this._transformedDataModels = {};\n\n layerFactory.setLayerRegistry(registry.layerRegistry);\n generateGetterSetters(this, PROPS);\n this.cachedData([]);\n this.store(new Store({\n [primaryXAxisUpdated]: null,\n [primaryYAxisUpdated]: null,\n [secondaryXAxisUpdated]: null,\n [secondaryYAxisUpdated]: null\n }));\n transactor(this, localOptions, this.store().model);\n this.firebolt(new UnitFireBolt(this, {\n physical: physicalActions,\n behavioural: behaviouralActions,\n physicalBehaviouralMap: actionBehaviourMap\n }, sideEffects, behaviourEffectMap));\n registerListeners(this, listenerMap);\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof VisualUnit\n */\n static formalName () {\n return FORMAL_NAME;\n }\n\n /**\n * Static helper for creates a unit instance\n *\n * @param {Object} [id] optional unique identifier for a unit; , id is calculated internally\n * @param {DataModel} data instance of datamodel\n * @param {Array.} layers layer configuration\n * @param {Object} config configurtion for the visual unit\n * @return {VisualUnit} Instance of a unit\n */\n static create (...params) {\n return new this(...params);\n }\n\n /**\n *\n *\n * @readonly\n * @memberof VisualUnit\n */\n firebolt (...firebolt) {\n if (firebolt.length) {\n this._firebolt = firebolt[0];\n return this;\n }\n return this._firebolt;\n }\n\n /**\n * Gets the domain for all axes of this visual unit.\n * @return {Object} Domains of each data field.\n */\n getDataDomain () {\n return this.store().get(DATADOMAIN);\n }\n\n /**\n * Retrieves the id created for this instance of visual unit\n * @return {string} id associated with the instance\n */\n id () {\n return this._id;\n }\n\n /**\n *\n *\n * @returns\n * @memberof VisualUnit\n */\n lockModel () {\n this._store.model.lock();\n return this;\n }\n\n /**\n *\n *\n * @returns\n * @memberof VisualUnit\n */\n unlockModel () {\n this._store.model.unlock();\n return this;\n }\n\n timeDiffsByField (...params) {\n if (params.length) {\n return this;\n }\n return this._timeDiffsByField;\n }\n\n /**\n * Renders the visual unit. It creates the layout and renders the axes and layers.\n * @return {VisualUnit} Instance of visual unit.\n */\n render (container) {\n const config = this.config();\n const { className, defClassName, sideEffectClassName, classPrefix } = config;\n const qualifiedClassName = getQualifiedClassName(defClassName, this.id(), config.classPrefix);\n const width = this.width();\n const height = this.height();\n const containerSelection = selectElement(container).style('position', 'relative');\n\n this._rootSvg = makeElement(containerSelection, 'svg', [null], className)\n .style('width', `${width}px`).style('height', `${height}px`);\n\n const node = this._rootSvg.node();\n setAttrs(node, {\n width,\n height,\n class: qualifiedClassName.join(' ')\n });\n renderGridLineLayers(this, node);\n renderLayers(this, node, this.layers(), {\n width,\n height\n });\n this._sideEffectGroup = createSideEffectGroup(node, `${classPrefix}-${sideEffectClassName}`);\n return this;\n }\n\n done () {\n return this._renderedPromise;\n }\n /**\n *\n *\n * @returns\n * @memberof VisualUnit\n */\n enableCaching () {\n this._cache = true;\n return this;\n }\n\n /**\n *\n *\n * @returns\n * @memberof VisualUnit\n */\n clearCaching () {\n this._cache = false;\n this.cachedData([this.cachedData()[0]]);\n return this;\n }\n\n /**\n *\n *\n * @returns\n * @memberof VisualUnit\n */\n getDrawingContext () {\n const rootSvg = this._rootSvg && this._rootSvg.node();\n const width = this.width();\n const height = this.height();\n return {\n htmlContainer: this.mount(),\n svgContainer: rootSvg,\n width,\n height,\n sideEffectGroup: this._sideEffectGroup,\n parentContainer: this.parentContainer(),\n xOffset: 0,\n yOffset: 0\n };\n }\n\n /**\n * Returns the serialized configuration of visual unit.\n * @return {Object} serialized configuration\n */\n serialize () {\n return {\n layers: this.layers().map(layer => layer.serialize()),\n config: this.config(),\n axes: this.store().get('axes').map(axis => axis.serialize())\n };\n }\n\n /**\n *\n *\n * @param {*} layerDef\n * @returns\n * @memberof VisualUnit\n */\n addLayer (layerDef) {\n const layerName = layerDef.name;\n const layer = this.getLayerByName(layerName);\n const measurement = {\n width: this.width(),\n height: this.height()\n };\n\n if (layer) {\n return [layer];\n }\n const serializedDef = layerFactory.getSerializedConf(layerDef.mark, layerDef);\n const instances = Object.values(getLayerFromDef(this, serializedDef));\n this.layers().push(...instances);\n const layerAxisIndex = getLayerAxisIndex(instances, this.fields());\n this._layerAxisIndex = Object.assign(this._layerAxisIndex, layerAxisIndex);\n attachAxisToLayers(this.axes(), instances, layerAxisIndex);\n const store = { unit: this, layers: {} };\n this.layers().forEach((inst) => {\n store.layers[inst.alias()] = inst;\n });\n instances.forEach((lyr) => {\n resolveEncodingTransform(lyr, store);\n lyr.measurement(measurement);\n lyr.dataProps({\n timeDiffs: this.store().get(TIMEDIFFS)\n });\n });\n return instances;\n }\n\n /**\n *\n *\n * @returns\n * @memberof VisualUnit\n */\n remove () {\n const lifeCycleManager = this._dependencies.lifeCycleManager;\n lifeCycleManager.notify({ client: this, action: 'beforeremove', formalName: 'unit' });\n this.store().unsubscribeAll();\n selectElement(this.mount()).remove();\n this.firebolt().remove();\n // Remove layers\n lifeCycleManager.notify({ client: this.layers(), action: 'beforeremove', formalName: 'layer' });\n this.layers().forEach(layer => layer.remove());\n lifeCycleManager.notify({ client: this.layers(), action: 'removed', formalName: 'layer' });\n lifeCycleManager.notify({ client: this, action: 'removed', formalName: 'unit' });\n return this;\n }\n\n /**\n *\n *\n * @param {*} identifiers\n * @returns\n * @memberof VisualUnit\n */\n getDataModelFromIdentifiers (identifiers, mode, parentModel) {\n if (identifiers === null) {\n return null;\n }\n const dataModel = parentModel || this.data();\n return getDataModelFromIdentifiers(dataModel, identifiers, mode);\n }\n\n /**\n *\n *\n * @returns\n * @memberof VisualUnit\n */\n resetData () {\n this.data(this.cachedData()[0]);\n return this;\n }\n\n /**\n *\n *\n * @returns\n * @memberof VisualUnit\n */\n getSourceInfo () {\n return {\n dimensionMeasureMap: this._dimensionMeasureMap,\n fields: this.fields(),\n data: this.data(),\n axes: this.axes()\n };\n }\n\n /**\n *\n *\n * @returns\n * @memberof VisualUnit\n */\n getDefaultTargetContainer () {\n const { classPrefix, defClassName } = this.config();\n return [`.${classPrefix}-${defClassName}`];\n }\n\n /**\n *\n *\n * @param {*} type\n * @returns\n * @memberof VisualUnit\n */\n getLayersByType (type) {\n const layers = getLayersBy(this.layers(), 'type', type);\n return layers;\n }\n\n /**\n *\n *\n * @param {*} name\n * @returns\n * @memberof VisualUnit\n */\n getLayerByName (name) {\n const layers = getLayersBy(this.layers(), 'name', name);\n return layers[0];\n }\n\n /**\n *\n *\n * @param {*} domain\n * @returns\n * @memberof VisualUnit\n */\n updateAxisDomain (domain) {\n ['x', 'y'].forEach((type) => {\n const axes = this.axes()[type];\n let min = [];\n let max = [];\n let dom;\n axes && axes.forEach((axis, i) => {\n const field = this.fields()[type][i];\n dom = domain[`${this.fields()[type][i]}`];\n\n if (field.type() !== FieldType.DIMENSION && dom) {\n min[i] = dom[0];\n max[i] = dom[1];\n }\n });\n if (axes) {\n if (axes.length > 1) {\n const axisConf = axes[0].config();\n if (axes[0].constructor.type() === 'linear') {\n if (axisConf.alignZeroLine) {\n axes.forEach(axis => axis.config({\n nice: false\n }));\n const adjustedDomain = getAdjustedDomain(max, min);\n min = adjustedDomain.min;\n max = adjustedDomain.max;\n }\n\n axes[0].updateDomainCache([min[0], max[0]]);\n axes[1].updateDomainCache([min[1], max[1]]);\n } else {\n axes[0].updateDomainCache(dom);\n axes[1].updateDomainCache(dom);\n }\n } else {\n axes[0].updateDomainCache(dom);\n }\n }\n });\n return this;\n }\n\n /**\n * Finds the nearest point closest to the x and y position.\n * @param {number} x x position.\n * @param {number} y y position.\n * @return {Object} Nearest point.\n */\n getNearestPoint (x, y, args) {\n let pointObj = {\n id: null\n };\n const dimValue = getNearestDimensionalValue(this, {\n x,\n y\n });\n\n if (dimValue !== null && args.getAllPoints) {\n pointObj.id = dimValue;\n const pointInf = this.getMarkInfFromLayers(x, y, args);\n pointObj.target = pointInf && pointInf.id ? pointInf.id : pointObj.id;\n return pointObj;\n }\n\n const markInf = this.getMarkInfFromLayers(x, y, args) || { id: null };\n pointObj = Object.assign({}, markInf);\n\n pointObj.target = markInf.id;\n return pointObj;\n }\n\n getMarkInfFromLayers (x, y, args) {\n const layers = this.layers();\n const len = layers.length;\n let point = null;\n // Iterate through the layers array and fetch the nearest point from each layer. If a valid\n // nearest point is found from any layer, then return that point.\n for (let i = 0; i < len; i++) {\n const layer = layers[i];\n const config = layer.config();\n if (config.interactive !== false) {\n point = layer.getNearestPoint(x, y, args);\n }\n if (point) {\n return point;\n }\n }\n return point;\n }\n\n /**\n *\n *\n * @param {*} identifiers\n * @returns\n * @memberof VisualUnit\n */\n getPlotPointsFromIdentifiers (identifiers, config = {}) {\n let points = [];\n let parsedIdentifiers = identifiers;\n if (identifiers === null) {\n return [];\n }\n const layers = this.layers();\n const len = layers.length;\n if (isSimpleObject(identifiers)) {\n parsedIdentifiers = [Object.keys(identifiers)];\n parsedIdentifiers = [...parsedIdentifiers, ...transposeArray(Object.values(identifiers))];\n }\n for (let i = 0; i < len; i++) {\n const layer = layers[i];\n if (layer.config().interactive !== false) {\n points = [...points, ...layer.getPointsFromIdentifiers(parsedIdentifiers, config)];\n }\n }\n return points;\n }\n\n /**\n *\n *\n * @param {*} name\n * @returns\n * @memberof VisualUnit\n */\n removeLayerByName (name) {\n removeLayersBy('name', name);\n return this;\n }\n\n /**\n *\n *\n * @param {*} type\n * @returns\n * @memberof VisualUnit\n */\n removeLayersByType (type) {\n removeLayersBy('type', type);\n return this;\n }\n\n parentContainer (...container) {\n if (container.length) {\n this._parentContainer = container[0];\n\n return this;\n }\n return this._parentContainer;\n }\n}\n","import { DataModel } from 'muze-utils';\n\nimport { retriveDomainFromData } from './group-utils';\n\n/**\n * Gets name of fields form the variables\n *\n * @param {*} fields1\n * @param {*} [fields2=[]]\n * @return\n */\nconst getFieldNames = (fields1, fields2 = []) => [fields1, fields2].map(fields => fields.reduce((acc, d) => {\n acc = [...acc, ...d.getMembers()];\n return acc;\n}, []));\n\n/**\n * Creates a selected datamodel from a parent datamodel and a set of field names\n *\n * @param {Object} datamodel provided as input\n * @param {Array} fieldNames schema names\n * @param {Array} fieldValues values of those schema names to be selected\n * @return {Object} creates a new selected datamodel\n */\nconst createSelectedDataModel = (datamodel, fieldNames, fieldValues) =>\n datamodel.select(fields => fieldNames.every((field, k) => fields[field].value === fieldValues[k]));\n\n/**\n *\n *\n * @param {*} facets\n * @param {*} keyArray\n * @return\n */\nconst uniqueKeyGenerator = (keyArray, context, depth = 0, val = []) => {\n const {\n facets,\n dataModel,\n uniqueValues\n } = context;\n\n // Get unique keys for the next depth recursively if required\n if (facets[depth + 1]) {\n const field = facets[depth];\n uniqueValues.forEach((value) => {\n const newDm = dataModel.select(fields => fields[field].value === value);\n const nextDepthUniqueValues = retriveDomainFromData(newDm, facets[depth + 1]);\n const newContext = {\n facets,\n dataModel: newDm,\n uniqueValues: nextDepthUniqueValues\n };\n\n uniqueKeyGenerator(keyArray, newContext, depth + 1, [...val, value]);\n });\n } else {\n uniqueValues.forEach((value) => {\n keyArray.push([...val, value]);\n });\n }\n};\n\n/**\n * projects row model based on the set of row and/or column and other projection fields\n *\n * @param {Object} datamodel provided as input\n * @return {Object} Projected datamodel\n */\nconst projectRows = (datamodel, projections) => {\n const {\n allColumnProjections,\n rowProjections,\n optionalProjections\n } = projections;\n\n if (rowProjections.length > 0) {\n return rowProjections.map((projectFields) => {\n const [projFieldNames, colProjFieldNames] = getFieldNames(projectFields, allColumnProjections);\n return datamodel.project([...projFieldNames, ...colProjFieldNames, ...optionalProjections]);\n });\n }\n return [datamodel];\n};\n\n/**\n * Adds the datamodels to current row index based on column fields\n *\n * @param {Array} context current context\n * @param {Array} callback List of facets applied to the current datamodel\n */\nconst pushToMatrix = (context, callback) => {\n let cells = [];\n const {\n matrix,\n datamodel,\n facetInfo,\n fieldInfo\n } = context;\n // Get projected fields for current row\n const {\n rowProjections,\n colProjections,\n optionalProjections\n } = fieldInfo;\n const {\n rowIndex,\n columnIndex\n } = facetInfo;\n const rowProj = rowProjections[(rowIndex) % rowProjections.length] || [];\n\n // Get the cells for the matrix from the return function of the callback on the datamodel.\n // callback function -> (datamodel, {projections, indices}, facets)\n if (colProjections.length > 0) {\n cells = colProjections.map((projectFields, projIdx) => {\n const [colProjFieldNames, rowProjFieldNames] = getFieldNames(projectFields, rowProj);\n const projectedDm = datamodel.project([...colProjFieldNames, ...rowProjFieldNames, ...optionalProjections]);\n const projections = { rowFields: rowProj, columnFields: projectFields };\n const indices = { rowIndex, columnIndex: columnIndex * colProjections.length + projIdx };\n\n return callback(projectedDm, { projections, indices }, facetInfo);\n });\n } else {\n const projections = { rowFields: rowProj, columnFields: [] };\n const indices = { rowIndex, columnIndex };\n\n cells = [callback(datamodel, { projections, indices }, facetInfo)];\n }\n\n matrix[rowIndex] = matrix[rowIndex] || [];\n matrix[rowIndex].push(...cells);\n};\n\n/**\n * Gets Matrixes for corresponding datamodel, facets and projections\n *\n * @param {Object} dataModel input datamodel\n * @param {Object} fieldMap corresponding fieldmap\n * @param {Array} facetsAndProjections contains the set of facets and projections for the matrices\n * @param {Function} callback Callback executed after datamodels are prepared after sel/proj\n * @return {Object} set of matrices with the corresponding row and column keys\n */\nexport const getMatrixModel = (dataModel, fieldInfo, callback) => {\n let rowDataModels = [];\n const rowKeys = [];\n const columnKeys = [];\n const allColumnProjections = [];\n const matrix = [];\n const facetInfo = [];\n const {\n rowFacets,\n colFacets,\n colProjections\n } = fieldInfo;\n\n colProjections.forEach((colProj) => {\n allColumnProjections.push(...colProj);\n });\n fieldInfo.allColumnProjections = allColumnProjections;\n\n // Performing row selection and projection\n if (rowFacets.length > 0) {\n // Get unique values for the root level of facet\n const field = rowFacets[0].toString();\n const firstLevelRowKeys = retriveDomainFromData(dataModel, field);\n\n // Get unique keys in the form of an array of arrays for each row\n uniqueKeyGenerator(rowKeys, { facets: rowFacets, dataModel, uniqueValues: firstLevelRowKeys });\n\n // Apply selection -> projection -> row datamodels\n rowKeys.forEach((val) => {\n // Create faceted datamodel\n const [rowFacetFieldNames] = getFieldNames(rowFacets);\n const selectedDataModel = createSelectedDataModel(dataModel, rowFacetFieldNames, val);\n\n // Project the datamodel based on the number of projections (based on last levels)\n facetInfo.push([rowFacets, val]);\n rowDataModels.push(...projectRows(selectedDataModel, fieldInfo));\n });\n } else {\n // No row facets, hence only row projection\n rowDataModels.push(...projectRows(dataModel, fieldInfo));\n }\n\n // Maintaining set of row datamodels for column resolution\n rowDataModels = rowDataModels.length > 0 ? rowDataModels : [[]];\n\n // Performing column selection and projection\n if (colFacets.length > 0) {\n const colFacetNames = colFacets.map(d => `${d}`);\n // Get unique values for the root level of facet\n const field = colFacetNames[0];\n const firstLevelColumnKeys = retriveDomainFromData(dataModel, field);\n\n // Get unique keys to create faceted datamodels: this time for columns\n uniqueKeyGenerator(columnKeys, {\n facets: colFacetNames,\n dataModel,\n uniqueValues: firstLevelColumnKeys\n });\n\n // For each row in the datamodel, apply selection -> projection -> push the projection to matri\n rowDataModels.forEach((dme, rIndex) => {\n facetInfo[rIndex] = facetInfo[rIndex] || [[], []];\n columnKeys.forEach((val, cIndex) => {\n matrix[rIndex] = matrix[rIndex] || [];\n\n // If datamodel is not present in current row, choose parent datamodel\n const datamodel = dme instanceof DataModel ? dme : dataModel;\n\n // Selection is made on the datamodel for the current row\n const selectedDataModel = createSelectedDataModel(datamodel, colFacetNames, val);\n const context = {\n matrix,\n datamodel: selectedDataModel,\n facetInfo: {\n rowFacets: facetInfo[rIndex],\n colFacets: [colFacets, val],\n rowIndex: rIndex,\n columnIndex: cIndex\n },\n fieldInfo\n };\n pushToMatrix(context, callback);\n });\n });\n } else {\n // No column facets, hence only row projection\n rowDataModels.forEach((dme, rIndex) => {\n facetInfo[rIndex] = facetInfo[rIndex] || [[], []];\n const context = {\n matrix,\n datamodel: dme || dataModel,\n facetInfo: {\n rowFacets: facetInfo[rIndex],\n colFacets: [[], []],\n rowIndex: rIndex,\n columnIndex: 0\n },\n fieldInfo\n };\n\n pushToMatrix(context, callback);\n });\n }\n\n // Getting column keys\n const transposedColKeys = columnKeys.length > 0 ? columnKeys[0].map((col, i) =>\n columnKeys.map(row => row[i])) : columnKeys;\n\n return { matrix, rowKeys, columnKeys: transposedColKeys };\n};\n","import { AxisOrientation } from '@chartshq/muze-axis';\nimport { getObjProp, FieldType } from 'muze-utils';\nimport { getMatrixModel } from './matrix-model';\nimport {\n getCellKey,\n isDistributionEqual,\n mutateAxesFromMap,\n createSelection,\n getFieldsFromSuppliedLayers,\n extractFields\n} from './group-utils';\nimport { ROW, ROWS, COLUMNS, COL, LEFT, RIGHT, TOP, BOTTOM, PRIMARY, SECONDARY, X, Y } from '../enums/constants';\n\n/**\n * Updates row and column cells with the geom cell corresponding to the facet keys\n *\n * @param {*} resolver\n * @param {*} facets\n */\nconst updateCells = (resolver, facets, geomCell) => {\n [ROW, COL].forEach((field) => {\n const cells = resolver[`${field}Cells`]();\n const facetKey = facets[`${field}Facets`][1].join();\n\n !cells[facetKey] && (cells[facetKey] = []);\n cells[facetKey].push(geomCell);\n resolver[`${field}Cells`](cells);\n });\n};\n\n/**\n *\n *\n * @param {*} context\n * @param {*} datamodel\n * @param {*} fieldInfo\n * @param {*} facets\n * @return\n */\nexport const createValueCells = (context, datamodel, fieldInfo, facets) => {\n const {\n projections,\n indices\n } = fieldInfo;\n const {\n rowFields,\n columnFields\n } = projections;\n const {\n rowIndex,\n columnIndex\n } = indices;\n const {\n suppliedLayers,\n cell: GeomCell,\n resolver,\n config,\n encoder,\n detailFields\n } = context;\n const axes = resolver.axes();\n const cacheMaps = resolver.cacheMaps();\n const matrixLayers = resolver.matrixLayers();\n const labelManager = resolver.dependencies().smartlabel;\n const horizontalAxis = resolver.horizontalAxis();\n const verticalAxis = resolver.verticalAxis();\n const datamodelTransform = resolver.datamodelTransform();\n const {\n entryCellMap,\n exitCellMap\n } = cacheMaps;\n const layerConfigArr = encoder.getLayerConfig({ columnFields, rowFields }, suppliedLayers || []);\n const axesCreators = { config, labelManager, axes, cacheMaps };\n\n fieldInfo.normalizedColumns = verticalAxis.fields;\n fieldInfo.normalizedRows = horizontalAxis.fields;\n\n const groupAxes = encoder.createAxis(axesCreators, fieldInfo);\n\n matrixLayers[rowIndex] = matrixLayers[rowIndex] ? matrixLayers[rowIndex] : [];\n matrixLayers[rowIndex][columnIndex] = layerConfigArr;\n\n // return from map if already there otherwise create and put in map\n const geomCellKey = getCellKey(rowIndex, columnIndex);\n const fields = {\n y: rowFields,\n x: columnFields\n };\n const allFacets = [\n [...facets.rowFacets[0], ...facets.colFacets[0]],\n [...facets.rowFacets[1], ...facets.colFacets[1]]\n ];\n const geomCell = !exitCellMap.has(geomCellKey) ? new GeomCell() : exitCellMap.get(geomCellKey);\n\n geomCell.data(datamodel)\n .axes(groupAxes)\n .fields(fields)\n .transform(datamodelTransform)\n .detailFields(detailFields)\n .facetByFields(allFacets);\n entryCellMap.set(geomCellKey, geomCell);\n exitCellMap.delete(geomCellKey);\n\n updateCells(resolver, facets, geomCell);\n\n return entryCellMap.get(geomCellKey);\n};\n\n/**\n * Creates axis cells based on the set of axes\n *\n * @param {Selection} selection Contains a selection of the axis units\n * @param {Array} axes Actual axis units\n * @param {number} axisIndex 0-> primary axis, 1-> secondary axis(when dual axis is made)\n * @param {Object} cells Contains a collection of the cells\n * @return {Object} return either set of axis/blank cells depending on the config\n */\n\nconst createAxisCells = (selection, axes, axisIndex, cells) =>\n createSelection(selection, axis => axis, axes, (item, i) => i + item.reduce((e, n) => {\n const id = n.id + axisIndex;\n return e + id;\n }, '')).map((axis) => {\n if (axis && axis[axisIndex]) {\n const axisInst = axis[axisIndex];\n const { orientation, show } = axisInst.config();\n\n return new cells.AxisCell().source(axisInst).config({\n isOffset: orientation === AxisOrientation.LEFT || orientation === AxisOrientation.TOP,\n show\n });\n }\n return new cells.BlankCell().config({ show: false });\n });\n\n/**\n *\n *\n * @param {*} context\n * @param {*} selectionObj\n * @param {*} cells\n * @retur\n */\nconst axisPlaceholderGn = (context, selObj, cells) => {\n const {\n matrices\n } = context;\n const {\n axesMatrix\n } = matrices;\n\n return (type, axisFrom) => {\n const axes = axesMatrix[`${type}`];\n\n if (axes && axes.length) {\n if (type === X || type === Y) {\n const fieldNames = type === Y ? ROWS : COLUMNS;\n\n [PRIMARY, SECONDARY].forEach((fieldType, index) => {\n const selObjProp = `${fieldNames}${fieldType}`;\n let axisIndex = index;\n let axesForDraw = axes;\n if (axisFrom === RIGHT || axisFrom === BOTTOM) {\n axisIndex = 1 - axisIndex;\n }\n if (!getObjProp(axes, 0, axisIndex)) {\n axesForDraw = [];\n }\n selObj[selObjProp] = createAxisCells(selObj[selObjProp], axesForDraw, axisIndex, cells);\n });\n } else {\n selObj.rowsPrimary = createAxisCells(selObj.rowPrime, axes.map(() => []), 0, cells);\n selObj.columnsPrimary = createAxisCells(selObj.colPrime, axes[0], 0, cells);\n }\n }\n return selObj;\n };\n};\n\n/**\n * Creates header cells based on the set of headers\n *\n * @param {Object} selection Contains a selection of the header units\n * @param {string} headers Contains a list of the headers\n * @param {Object} cells Contains a collection of the cells\n * @param {Object} labelManager smart label instance\n * @return {Object} return either set of header cells depending on the config\n */\nconst createTextCells = (selection, headers, cells, labelManager) => createSelection(selection,\n label => new cells.TextCell({}, { labelManager }).source(label), headers, (key, i) => key + i);\n\n/**\n *\n *\n * @param {*} context\n * @param {*} selectionObj\n * @param {*} cells\n * @param {*} labelManager\n * @return\n */\nconst headerPlaceholderGn = (context, selectionObj, cells, labelManager) => {\n const {\n axis,\n keys,\n type,\n facetConfig\n } = context;\n const counter = axis.length / keys.length;\n const selectionKeys = keys.length ? axis.map((d, i) => keys[Math.floor(i / counter)]) : [];\n return createSelection(selectionObj[`${type}Headers`], keySet => keySet, selectionKeys, (keySet, i) =>\n `${keySet.join(',')}-${i}`).map(keySet => createTextCells(null, keySet, cells, labelManager)\n .map((cell, k, i) => cell.source(keySet[i]).config(facetConfig || {})));\n};\n\n/**\n * Creates a set of placeholders as a part of selection object\n *\n * @param {Array} normalizedOptions contains normalized rows and columns\n * @param {Array} matrices contains axis and value matrices\n * @param {aArrayny} projections contains set of row and column projections\n * @param {Object} cells Contains a collection of the cells\n * @param {Object} labelManager smart label instance\n * @return {Object} Creates a set of placeholders as a part of selections\n */\nconst generatePlaceholders = (context, cells, labelManager) => {\n let selectionObj;\n const {\n matrices,\n fields,\n facetsAndProjections,\n selection,\n facetConfig,\n encoders\n } = context;\n const {\n rows,\n columns\n } = fields;\n const {\n valuesMatrix\n } = matrices;\n const {\n rowProjections,\n colProjections\n } = facetsAndProjections;\n const {\n rowKeys,\n columnKeys\n } = valuesMatrix;\n const takeAxisFrom = encoders.simpleEncoder._axisFrom;\n const takeHeaderFrom = encoders.simpleEncoder._headerFrom;\n\n selectionObj = selection || {};\n\n ['pie', X, Y].forEach((axis) => {\n const axisFrom = axis === X ? takeAxisFrom.column : takeAxisFrom.row;\n selectionObj = axisPlaceholderGn(context, selectionObj, cells)(axis, axisFrom);\n });\n\n const {\n rowsPrimary,\n rowsSecondary,\n columnsPrimary,\n columnsSecondary\n } = selectionObj;\n\n const rowAxis = rowsPrimary && rowsPrimary.getObjects().length ? rowsPrimary.getObjects() :\n (rowsSecondary && rowsSecondary.getObjects().length ? rowsSecondary.getObjects() : []);\n const colAxis = columnsPrimary && columnsPrimary.getObjects().length ? columnsPrimary.getObjects() :\n (columnsSecondary && columnsSecondary.getObjects().length ? columnsSecondary.getObjects() : []);\n\n const headerConfig = [\n { type: LEFT, section: rows[0], axis: rowAxis, headerFrom: takeHeaderFrom.row },\n { type: RIGHT, section: rows[1], axis: rowAxis, headerFrom: takeHeaderFrom.row },\n { type: TOP, section: columns[0], axis: colAxis, headerFrom: takeHeaderFrom.column },\n { type: BOTTOM, section: columns[1], axis: colAxis, headerFrom: takeHeaderFrom.column }\n ];\n\n headerConfig.forEach((config, index) => {\n let keys;\n let length;\n const {\n type,\n section,\n axis,\n headerFrom\n } = config;\n\n if (index < 2) {\n keys = rowKeys;\n length = rowProjections.length > 0 ? rowProjections.length : 1;\n } else {\n keys = columnKeys;\n length = colProjections.length > 0 ? colProjections.length : 1;\n }\n\n if (section.length && headerFrom === type && axis && keys.length) {\n const hContext = { axis, length, type };\n let headers = [];\n if (index < 2) {\n hContext.keys = keys;\n hContext.facetConfig = facetConfig.rows;\n headers = headerPlaceholderGn(hContext, selectionObj, cells, labelManager);\n } else {\n hContext.facetConfig = facetConfig.columns;\n hContext.keys = keys[0].map((key, i) => keys.map(e => e[i]));\n headers = headerPlaceholderGn(hContext, selectionObj, cells, labelManager);\n }\n selectionObj[`${type}Headers`] = headers;\n } else {\n selectionObj[`${type}Headers`] = null;\n }\n });\n return selectionObj;\n};\n\n/**\n * Generates matrices\n *\n * @param {Object} config Configuration to generate matrices\n * @param {Array} matrices Matrices containing the set of visual units and axes units\n * @param {Object} cells Contains a collection of the cells\n * @param {Object} labelManager smart label instance\n * @return {Object} contains a collection of matrices\n */\nexport const generateMatrices = (context, matrices, cells, labelManager) => {\n const {\n unitHeight,\n unitWidth,\n facetsAndProjections,\n normalizedRows,\n normalizedColumns,\n selection,\n axisFrom,\n facetConfig,\n encoders\n } = context;\n const placeholderContext = {\n fields: {\n rows: normalizedRows,\n columns: normalizedColumns\n },\n matrices,\n facetsAndProjections,\n selection,\n axisFrom,\n facetConfig,\n encoders\n };\n // Generate placeholders for all matrices\n const selectionObj = generatePlaceholders(placeholderContext, cells, labelManager);\n const {\n columnsPrimary,\n columnsSecondary,\n rowsPrimary,\n rowsSecondary,\n leftHeaders,\n topHeaders,\n bottomHeaders,\n rightHeaders\n } = selectionObj;\n const [rowPrime, rowSec, colPrime, colSec] = [rowsPrimary, rowsSecondary, columnsPrimary, columnsSecondary]\n .map(d => (d ? d.getObjects() : []));\n const [leftFacets, rightFacets] = [leftHeaders, rightHeaders].map(e => (e ? e.getObjects()\n .map(f => f.getObjects()) : []));\n\n // Compute left matrix using left headers and the axes on the rows\n let leftMatrix = leftFacets.length ? leftFacets.map((d, i) => {\n rowPrime[i] = rowPrime[i] ? [rowPrime[i]] : [];\n return [...d, ...rowPrime[i]];\n }) : (rowPrime ? rowPrime.map(d => [d]) : []);\n\n // Compute right matrix using right headers and the axes on the rows\n const rightMatrix = rowSec.length ? rowSec.map((d, i) => [d, ...(rightFacets[i] || [])]) : (rightFacets.length ?\n rightFacets.map(d => [...d]) : []);\n\n const topMatrix = [];\n if (topHeaders) {\n const headers = topHeaders.getObjects();\n headers.forEach((e) => {\n const innerHeaders = e.getObjects();\n innerHeaders.forEach((x, i) => {\n topMatrix[i] = topMatrix[i] || [];\n topMatrix[i].push(x);\n });\n });\n }\n // Compute top matrix using the top headers and axes on the columns\n if (colPrime.length) {\n topMatrix.push(colPrime);\n }\n\n // Bottom and right matrices are prepared using the user config.\n let bottomMatrix = [];\n if (colSec.length) {\n bottomMatrix.push(colSec);\n }\n const currentBottomLength = bottomMatrix.length;\n if (bottomHeaders) {\n const headers = bottomHeaders.getObjects();\n headers.forEach((e) => {\n const innerHeaders = e.getObjects();\n innerHeaders.forEach((x, i) => {\n bottomMatrix[i + currentBottomLength] = bottomMatrix[i + currentBottomLength] || [];\n bottomMatrix[i + currentBottomLength].push(x);\n });\n });\n }\n\n if (!leftMatrix.length && !rightMatrix.length) {\n const cell = new cells.BlankCell();\n cell.setAvailableSpace(unitWidth, unitHeight);\n leftMatrix = [[cell]];\n }\n\n if (!topMatrix.length && (!bottomMatrix.length || !bottomMatrix[0].length)) {\n const cell = new cells.BlankCell();\n cell.setAvailableSpace(unitWidth, unitHeight);\n bottomMatrix = [[cell]];\n }\n\n return {\n rows: [leftMatrix, rightMatrix],\n columns: [topMatrix, bottomMatrix],\n selectionObj\n };\n};\n\n/**\n * Computes matrices for a group\n *\n * @param {Object} datamodel on which the matrices are to be computed\n * @param {Object} config configuration of the matrices\n * @param {Object} layerRegistry contains the registered layers\n * @return {Object} conputed matrices\n * @memberof MatrixResolver\n */\nexport const computeMatrices = (context, config) => {\n const {\n resolver,\n datamodel,\n componentRegistry,\n encoders\n } = context;\n const {\n globalConfig,\n selection,\n transform\n } = config;\n const groupBy = globalConfig.autoGroupBy;\n const { smartlabel: labelManager } = resolver.dependencies();\n const fieldMap = datamodel.getFieldsConfig();\n const layerConfig = resolver.layerConfig();\n const registry = resolver.registry();\n const { fields: normalizedRows } = resolver.horizontalAxis();\n const { fields: normalizedColumns } = resolver.verticalAxis();\n const otherEncodings = resolver.optionalProjections(config, layerConfig);\n const facetsAndProjections = resolver.getAllFields();\n const matrixGnContext = {\n // Configuration to be passed to generate the different matrices.\n // A common config is used for both value matrices and other matrices\n normalizedColumns,\n normalizedRows,\n facetsAndProjections,\n layers: layerConfig,\n fieldMap,\n otherEncodings,\n encoders,\n facetConfig: globalConfig.facetConfig || {},\n axisFrom: globalConfig.axisFrom || {},\n selection\n };\n const cells = {\n GeomCell: resolver.getCellDef(registry.GeomCell),\n AxisCell: resolver.getCellDef(registry.AxisCell),\n BlankCell: resolver.getCellDef(registry.BlankCell),\n TextCell: resolver.getCellDef(registry.TextCell)\n };\n const isRowSizeEqual = isDistributionEqual(normalizedRows);\n const isColumnSizeEqual = isDistributionEqual(normalizedColumns);\n\n resolver.colCells({});\n resolver.rowCells({});\n resolver.datamodelTransform(transform || {});\n\n // Cell creation begins here\n resolver.resetSimpleAxes();\n\n const {\n entryCellMap\n } = resolver.cacheMaps();\n const newCacheMap = {\n exitCellMap: entryCellMap,\n entryCellMap: new Map()\n };\n\n resolver.cacheMaps(newCacheMap);\n\n const valueCellContext = {\n config: globalConfig,\n suppliedLayers: encoders.simpleEncoder.serializeLayerConfig(resolver.layerConfig()),\n resolver,\n cell: cells.GeomCell,\n encoder: encoders.simpleEncoder,\n newCacheMap,\n detailFields: config.detail\n };\n const fieldsConfig = datamodel.getFieldsConfig();\n let groupedModel = datamodel;\n if (!groupBy.disabled) {\n const fields = getFieldsFromSuppliedLayers(valueCellContext.suppliedLayers, datamodel.getFieldsConfig());\n const allFields = extractFields(facetsAndProjections, fields);\n\n const dimensions = allFields.filter(field =>\n fieldsConfig[field] && fieldsConfig[field].def.type === FieldType.DIMENSION);\n const aggregationFns = groupBy.measures;\n\n groupedModel = datamodel.groupBy(dimensions.length ? dimensions : [''], aggregationFns).project(allFields);\n }\n\n // return a callback function to create the cells from the matrix\n const cellCreator = resolver.valueCellsCreator(valueCellContext);\n // Creates value matrices from the datamodel and configs\n const valueMatrixInfo = getMatrixModel(groupedModel, facetsAndProjections, cellCreator);\n\n resolver.cacheMaps().exitCellMap.forEach((placeholder) => {\n placeholder.remove();\n });\n resolver.cacheMaps().exitCellMap.clear();\n resolver.valueMatrix(valueMatrixInfo.matrix);\n resolver.createUnits(componentRegistry, config);\n\n const { xAxes, yAxes } = mutateAxesFromMap(resolver.cacheMaps(), resolver.axes());\n\n resolver.axes({\n x: xAxes,\n y: yAxes\n });\n\n const matrices = {\n valuesMatrix: valueMatrixInfo,\n axesMatrix: resolver.axes()\n };\n // Create all matrices\n const { rows, columns, selectionObj } = generateMatrices(matrixGnContext, matrices, cells, labelManager);\n\n resolver.rowMatrix(rows);\n resolver.columnMatrix(columns);\n\n return {\n rows: resolver.rowMatrix(),\n columns: resolver.columnMatrix(),\n values: resolver.valueMatrix(),\n isColumnSizeEqual,\n isRowSizeEqual,\n selection: selectionObj,\n dataModels: {\n groupedModel,\n parentModel: datamodel\n }\n };\n};\n","import { VisualUnit } from '@chartshq/visual-unit';\nimport {\n initializeCacheMaps,\n headerCreator,\n extractUnitConfig,\n setFacetsAndProjections\n} from './group-utils';\nimport {\n ROW, COL, LEFT, RIGHT, COLOR, SIZE, SHAPE, DETAIL, CELL, X_AXES, Y_AXES, ENTRY_CELLS, EXIT_CELLS, INITIALIZED,\n AXIS, UNIT, BEFORE_UPDATE, UPDATED, VALUE_MATRIX, FACET_HEADERS\n} from '../enums/constants';\nimport { createValueCells, computeMatrices } from './cell-creator';\n/**\n * Resolves the matrices from configuration provided\n *\n * @export\n * @class MatrixResolver\n */\nexport default class MatrixResolver {\n\n /**\n * Creates an instance of MatrixResolver.\n * @param {Object} dependencies needed to run the resolver\n * @memberof MatrixResolver\n */\n constructor (dependencies) {\n this._registry = {};\n this._layerConfig = [];\n this._matrixLayers = [];\n this._dependencies = dependencies;\n this._rowMatrix = [];\n this._columnMatrix = [];\n this._valueMatrix = [];\n this._facets = {};\n this._projections = {};\n this._datamodelTransform = {};\n this._units = [];\n this._cacheMaps = {};\n this._axes = {\n x: {},\n y: {},\n color: [],\n size: [],\n shape: []\n };\n\n this.cacheMaps(initializeCacheMaps());\n }\n\n /**\n * Set: Registers placeholders, Get: return {Object} those placeholders\n *\n * @param {Object} placeholders cells that will construct the group\n * @return {Object} Either current instance or the set of placeholders\n * @memberof MatrixResolver\n */\n registry (...placeholders) {\n if (placeholders.length) {\n Object.entries(placeholders[0]).forEach((val) => {\n this._registry[val[0]] = val[1];\n });\n return this;\n }\n return this._registry;\n }\n\n /**\n * Used to set the layer config from outside or get current layer info\n *\n * @param {Object} type configuration of layer provided externally\n * @return {Object} either the layer or current instance\n * @memberof MatrixResolver\n */\n dependencies (...dep) {\n if (dep.length) {\n this._dependencies = dep[0];\n return this;\n }\n return this._dependencies;\n }\n\n /**\n * Used to set the layer config from outside or get current layer info\n *\n * @param {Object} type configuration of layer provided externally\n * @return {Object} either the layer or current instance\n * @memberof MatrixResolver\n */\n units (...unitArr) {\n if (unitArr.length) {\n this._units = unitArr[0];\n return this;\n }\n return this._units;\n }\n\n /**\n * Used to set the layer config from outside or get current layer info\n *\n * @param {Object} layer configuration of layer provided externally\n * @return {Object} either the layer or current instance\n * @memberof MatrixResolver\n */\n layerConfig (...config) {\n if (config.length) {\n this._layerConfig = config[0];\n return this;\n }\n return this._layerConfig;\n }\n\n /**\n * Used to set the layer config from outside or get current layer info\n *\n * @param {Object} type configuration of layer provided externally\n * @return {Object} either the layer or current instance\n * @memberof MatrixResolver\n */\n matrixLayers (...layers) {\n if (layers.length) {\n this._matrixLayers = layers[0];\n return this;\n }\n return this._matrixLayers;\n }\n\n /**\n * Used to set the layer config from outside or get current layer info\n *\n * @param {Object} type configuration of layer provided externally\n * @return {Object} either the layer or current instance\n * @memberof MatrixResolver\n */\n datamodelTransform (...transform) {\n if (transform.length) {\n this._datamodelTransform = transform[0];\n return this;\n }\n return this._datamodelTransform;\n }\n\n /**\n * Used to set the layer config from outside or get current layer info\n *\n * @param {Object} type configuration of layer provided externally\n * @return {Object} either the layer or current instance\n * @memberof MatrixResolver\n */\n cacheMaps (...maps) {\n if (maps.length) {\n [CELL, X_AXES, Y_AXES, ENTRY_CELLS, EXIT_CELLS].forEach((e) => {\n this._cacheMaps[`${e}Map`] = maps[0][`${e}Map`] || this._cacheMaps[`${e}Map`];\n });\n return this;\n }\n return this._cacheMaps;\n }\n\n /**\n * Used to set the layer config from outside or get current layer info\n *\n * @param {Object} type configuration of layer provided externally\n * @return {Object} either the layer or current instance\n * @memberof MatrixResolver\n */\n rowCells (...cells) {\n if (cells.length) {\n this._rowCells = cells[0];\n return this;\n }\n return this._rowCells;\n }\n\n /**\n * Used to set the layer config from outside or get current layer info\n *\n * @param {Object} type configuration of layer provided externally\n * @return {Object} either the layer or current instance\n * @memberof MatrixResolver\n */\n colCells (...cells) {\n if (cells.length) {\n this._colCells = cells[0];\n return this;\n }\n return this._colCells;\n }\n\n /**\n * Used to set the layer config from outside or get current layer info\n *\n * @param {Object} type configuration of layer provided externally\n * @return {Object} either the layer or current instance\n * @memberof MatrixResolver\n */\n axes (...axes) {\n if (axes.length) {\n this._axes = Object.assign({}, this._axes, axes[0]);\n return this;\n }\n return this._axes;\n }\n\n /**\n * Used to set the layer config from outside or get current layer info\n *\n * @param {Object} type configuration of layer provided externally\n * @return {Object} either the layer or current instance\n * @memberof MatrixResolver\n */\n rowMatrix (...rowMat) {\n if (rowMat.length) {\n this._rowMatrix = rowMat[0];\n return this;\n }\n return this._rowMatrix;\n }\n\n /**\n * Used to set the layer config from outside or get current layer info\n *\n * @param {Object} type configuration of layer provided externally\n * @return {Object} either the layer or current instance\n * @memberof MatrixResolver\n */\n columnMatrix (...colMat) {\n if (colMat.length) {\n this._columnMatrix = colMat[0];\n return this;\n }\n return this._columnMatrix;\n }\n\n /**\n * Used to set the layer config from outside or get current layer info\n *\n * @param {Object} type configuration of layer provided externally\n * @return {Object} either the layer or current instance\n * @memberof MatrixResolver\n */\n valueMatrix (...valMat) {\n if (valMat.length) {\n this._valueMatrix = valMat[0];\n return this;\n }\n return this._valueMatrix;\n }\n\n /**\n *\n *\n * @param {*} facets\n * @return\n * @memberof MatrixResolver\n */\n facets (...facets) {\n if (facets.length) {\n Object.entries(facets[0]).forEach((e) => {\n this._facets[e[0]] = e[1];\n });\n return this;\n }\n return this._facets;\n }\n\n /**\n *\n *\n * @param {*} projections\n * @return\n * @memberof MatrixResolver\n */\n projections (...projections) {\n if (projections.length) {\n Object.entries(projections[0]).forEach((e) => {\n this._projections[e[0]] = e[1];\n });\n return this;\n }\n return this._projections;\n }\n\n /**\n *\n *\n * @param {*} config\n * @param {*} layerConfig\n * @return\n * @memberof MatrixResolver\n */\n optionalProjections (config, layerConfig) {\n const otherEncodings = {};\n const optionalProjections = [];\n const otherEncodingTypes = [SIZE, COLOR, SHAPE];\n\n otherEncodingTypes.forEach((type) => {\n if (config[type] && config[type].field) {\n const enc = config[type];\n otherEncodings[type] = enc.field;\n optionalProjections.push(enc.field);\n }\n });\n\n if (config[DETAIL]) {\n optionalProjections.push(...config.detail);\n }\n\n if (layerConfig.length) {\n layerConfig.forEach((layer) => {\n if (layer.encoding) {\n Object.values(layer.encoding).forEach((enc) => {\n if (enc && optionalProjections.indexOf(enc.field) === -1) {\n optionalProjections.push(enc.field ? enc.field : enc);\n }\n });\n }\n });\n }\n this.projections({ optionalProjections });\n return otherEncodings;\n }\n\n /**\n * return the normalized set of rows and facets and projections\n *\n * @param {Object} rows parameters needed to set horizontal axis consisiting of rows\n * @return {Object} facets, projections and normalized rows\n * @memberof MatrixResolver\n */\n horizontalAxis (rows, encoder) {\n if (rows) {\n this._horizontalAxis = setFacetsAndProjections(this, { type: ROW, fields: rows }, encoder);\n return this;\n }\n return this._horizontalAxis;\n }\n\n /**\n * return the normalized set of columns and facets and projections\n *\n * @param {Object} columns parameters needed to set vertical axis consisiting of columns\n * @return {Object} facets, projections and normalized columns\n * @memberof MatrixResolver\n */\n verticalAxis (columns, encoder) {\n if (columns) {\n this._verticalAxis = setFacetsAndProjections(this, { type: COL, fields: columns }, encoder);\n return this;\n }\n return this._verticalAxis;\n }\n\n /**\n * Gets the class definition of a particular cell type(if the particular type has been extended, that particular\n * definition is returned)\n *\n * @param {Object} cell cell whose class definition is to be retrieved\n * @return {Object} cell definition\n * @memberof MatrixResolver\n */\n getCellDef (cell) {\n const registry = this.registry();\n\n Object.values(registry).forEach((e) => {\n if (e.prototype instanceof cell) {\n cell = e;\n }\n });\n return cell;\n }\n\n /**\n * return a visual cell creator along with its axis information to be injected to the datamodel creation\n * function\n *\n * @param {Object} GeomCell Type of cell to be created\n * @return {Object} Created cell\n * @memberof MatrixResolver\n */\n valueCellsCreator (context) {\n // reset matrix layers\n this.matrixLayers([]);\n\n return (datamodel, fieldInfo, facets) => createValueCells(context, datamodel, fieldInfo, facets);\n }\n\n /**\n * Callback to be applied on each cell of a matrix of a particular type\n *\n * @param {string} matrixType type of matrix on which callback is to be applied\n * @param {Function} callback function to be applied to each cell\n * @memberof MatrixResolver\n */\n forEach (matrixType, callback) {\n this[matrixType]().forEach((row, rIndex) => {\n row.forEach((col, cIndex) => {\n callback(rIndex, cIndex, col);\n });\n });\n }\n\n /**\n *\n *\n * @return\n * @memberof MatrixResolver\n */\n getAllFields () {\n const retObj = this.projections();\n\n Object.entries(this.facets()).forEach((e) => {\n retObj[e[0]] = e[1];\n });\n return retObj;\n }\n\n /**\n *\n *\n * @memberof MatrixResolver\n */\n resetSimpleAxes () {\n return this.axes({\n x: new Set(),\n y: new Set()\n });\n }\n\n /**\n *\n *\n * @param {*} componentRegistry\n * @param {*} config\n * @memberof MatrixResolver\n */\n createUnits (componentRegistry, config) {\n const {\n globalConfig,\n alias\n } = config;\n const {\n layerRegistry,\n sideEffectRegistry\n } = componentRegistry;\n const {\n smartlabel: smartLabel,\n lifeCycleManager\n } = this.dependencies();\n // Provide the source for the matrix\n const units = [];\n // Setting unit configuration\n const unitConfig = extractUnitConfig(globalConfig || {});\n\n this.forEach(VALUE_MATRIX, (i, j, el) => {\n let unit = el.source();\n if (!unit) {\n unit = VisualUnit.create({\n layerRegistry,\n sideEffectRegistry\n }, {\n smartLabel,\n lifeCycleManager\n });\n el.source(unit);\n units.push(unit);\n }\n unit.parentAlias(alias);\n el.config(unitConfig);\n });\n\n lifeCycleManager.notify({ client: units, action: INITIALIZED, formalName: UNIT });\n return this.units(units);\n }\n\n /**\n *\n *\n * @param {*} config\n * @memberof MatrixResolver\n */\n setDomains (config, datamodel, encoders) {\n const {\n color,\n shape,\n size,\n globalConfig\n } = config;\n const groupBy = globalConfig.autoGroupBy;\n const {\n rowFacets,\n colFacets\n } = this.getAllFields();\n const encoding = {\n color,\n shape,\n size\n };\n const facetFields = [...rowFacets.map(e => e.toString()), ...colFacets.map(e => e.toString())];\n const retContext = {\n domains: encoders.simpleEncoder.getRetinalFieldsDomain(datamodel, encoding, facetFields, groupBy),\n axes: this.axes(),\n encoding\n };\n encoders.retinalEncoder.setCommonDomain(retContext);\n return this;\n }\n\n /**\n *\n *\n * @return\n * @memberof MatrixResolver\n */\n getRetinalAxes () {\n const {\n color,\n shape,\n size\n } = this.axes();\n\n return {\n color: [...color],\n shape: [...shape],\n size: [...size]\n };\n }\n\n /**\n *\n *\n * @param {*} type\n * @return\n * @memberof MatrixResolver\n */\n getSimpleAxes (type) {\n return this.axes()[`${type}`];\n }\n\n /**\n *\n *\n * @param {*} datamodel\n * @param {*} config\n * @memberof MatrixResolver\n */\n createRetinalAxes (fieldsConfig, config, encoders) {\n const layerConfig = this.layerConfig();\n this.optionalProjections(config, layerConfig);\n const retinalAxes = encoders.retinalEncoder.createAxis({\n fieldsConfig,\n config,\n axes: this.axes()\n });\n const {\n lifeCycleManager\n } = this.dependencies();\n\n [COLOR, SHAPE, SIZE].forEach((e) => {\n this.axes()[e] = retinalAxes[e];\n });\n\n lifeCycleManager.notify({ client: this.axes(), action: INITIALIZED, formalName: AXIS });\n lifeCycleManager.notify({ client: this.units(), action: BEFORE_UPDATE, formalName: UNIT });\n\n const units = [];\n const matrixLayers = this.matrixLayers();\n\n this.forEach(VALUE_MATRIX, (i, j, el) => {\n el.axes(retinalAxes);\n el.source() && el.source().retinalFields(config);\n el.layerDef(encoders.retinalEncoder.getLayerConfig(config, matrixLayers[i][j]));\n el.updateModel();\n\n units.push(el.source());\n });\n\n lifeCycleManager.notify({ client: units, action: UPDATED, formalName: UNIT });\n return this;\n }\n\n /**\n *\n *\n * @param {*} placeholders\n * @param {*} fieldNames\n * @return\n * @memberof MatrixResolver\n */\n createHeaders (placeholders, fieldNames, config) {\n let bottomLeft = [];\n let bottomRight = [];\n const {\n rows,\n columns\n } = placeholders;\n const {\n smartlabel: labelManager,\n lifeCycleManager\n } = this.dependencies();\n const TextCell = this.getCellDef(this.registry().TextCell);\n const BlankCell = this.getCellDef(this.registry().BlankCell);\n const [leftRows, rightRows] = rows;\n const [topCols, bottomCols] = columns;\n const rowHeaders = fieldNames.rows;\n const blankCellCreator = cell => new BlankCell().config({ show: cell.config().show });\n\n // Headers and footers are created based on the rows. Thereafter, using the column information\n // they are tabularized into the current structure\n const headers = {\n left: headerCreator(leftRows, rowHeaders[0], config.showHeaders ? TextCell : BlankCell, labelManager),\n right: headerCreator(rightRows, rowHeaders[1], config.showHeaders ? TextCell : BlankCell, labelManager)\n };\n const footers = {\n left: leftRows.length > 0 ? leftRows[0].map(blankCellCreator) : [],\n right: rightRows.length > 0 ? rightRows[0].map(blankCellCreator) : []\n };\n const [topLeft, topRight] = [LEFT, RIGHT].map(type => topCols.map((col, i) => {\n if (i === topCols.length - 1) {\n return headers[type];\n }\n return footers[type];\n }));\n\n // Creating only bottom matrices if there is no information on the top\n if (topCols.length === 0) {\n [bottomLeft, bottomRight] = [LEFT, RIGHT].map(type => bottomCols.map((col, i) => {\n if (i === 0) {\n return headers[type];\n }\n return footers[type];\n }));\n } else {\n bottomLeft = bottomCols.map(() => (leftRows.length > 0 ? leftRows[0].map(blankCellCreator) : []));\n bottomRight = bottomCols.map(() => (rightRows.length > 0 ? rightRows[0].map(blankCellCreator) : []));\n }\n\n lifeCycleManager.notify({\n client: [topLeft, topRight, bottomLeft, bottomRight],\n action: INITIALIZED,\n formalName: FACET_HEADERS\n });\n\n return { topLeft, topRight, bottomLeft, bottomRight };\n }\n\n /**\n *\n *\n * @param {*} datamodel\n * @param {*} config\n * @param {*} componentRegistry\n * @param {*} encoders\n * @return\n * @memberof MatrixResolver\n */\n getMatrices (datamodel, config, componentRegistry, encoders) {\n const context = {\n datamodel,\n componentRegistry,\n encoders,\n resolver: this\n };\n\n return computeMatrices(context, config);\n }\n}\n","/**\n *\n *\n * @export\n * @class ValueMatrix\n */\nclass ValueMatrix {\n\n /**\n *Creates an instance of ValueMatrix.\n * @param {*} matrixArr\n * @memberof ValueMatrix\n */\n constructor (matrixArr) {\n const instancesById = {};\n\n this.matrix(matrixArr);\n this.filter(() => true);\n\n this.each((el, rIdx, cIdx) => {\n const cellValue = el.valueOf();\n if (cellValue && cellValue.id) {\n const id = cellValue.id();\n instancesById[id] = {\n instance: cellValue,\n rowIndex: rIdx,\n colIndex: cIdx\n };\n }\n });\n\n this.instancesById(instancesById);\n }\n\n /**\n *\n *\n * @param {*} id\n * @return\n * @memberof ValueMatrix\n */\n instancesById (...id) {\n if (id.length) {\n this._instancesById = id[0];\n return this;\n }\n return this._instancesById;\n }\n\n /**\n *\n *\n * @param {*} m\n * @return\n * @memberof ValueMatrix\n */\n matrix (...matrix) {\n if (matrix.length) {\n this._matrix = matrix[0];\n return this;\n }\n return this._matrix;\n }\n\n /**\n *\n *\n * @param {*} fn\n * @return\n * @memberof ValueMatrix\n */\n filter (...fn) {\n if (fn.length) {\n this._filterFn = fn[0];\n return this;\n }\n return this._filterFn;\n }\n\n /**\n *\n *\n * @return\n * @memberof ValueMatrix\n */\n width () {\n let rowWidth = 0;\n\n this.matrix().forEach((row) => {\n let currentRowWidth = 0;\n row.forEach((cell) => {\n currentRowWidth += cell.getLogicalSpace().width;\n });\n rowWidth = Math.max(rowWidth, currentRowWidth);\n });\n return rowWidth;\n }\n\n /**\n *\n *\n * @return\n * @memberof ValueMatrix\n */\n height () {\n let rowHeight = 0;\n\n this.matrix().forEach((row) => {\n let currentRowHeight = 0;\n row.forEach((cell) => {\n currentRowHeight = Math.max(currentRowHeight, cell.getLogicalSpace().height);\n });\n rowHeight += currentRowHeight;\n });\n return rowHeight;\n }\n\n /**\n *\n *\n * @param {*} fn\n * @return\n * @memberof ValueMatrix\n */\n each (fn) {\n const matrix = this.matrix();\n const filterFn = this.filter();\n\n matrix.forEach((row, rIndex) => {\n row.forEach((col, cIndex) => {\n if (filterFn(col)) {\n fn(col, rIndex, cIndex, matrix);\n }\n });\n });\n return this;\n }\n\n /**\n *\n *\n * @param {*} id\n * @return\n * @memberof ValueMatrix\n */\n findPlaceHolderById (id) {\n return this.instancesById()[id];\n }\n\n /**\n *\n *\n * @return\n * @memberof ValueMatrix\n */\n getMatrixArray () {\n return this.matrix();\n }\n}\n\nexport default ValueMatrix;\n","import { RetinalEncoder } from '../encoder';\nimport { DATA_UPDATE_COUNTER } from '../enums/defaults';\nimport { getEncoder, getBorders } from '../group-helper';\nimport ValueMatrix from './value-matrix';\nimport localOptions from './local-options';\n\nconst sanitizeRetinalConfig = (retinalConf) => {\n const conf = {};\n for (const key in retinalConf) {\n const confValue = retinalConf[key];\n if (typeof confValue === 'string' || !confValue) {\n conf[key] = {\n field: retinalConf[key]\n };\n } else {\n conf[key] = confValue;\n }\n }\n return conf;\n};\n\n/**\n *\n *\n * @param {*} placeholder\n * @memberof VisualGroup\n */\nconst setMatrixInstances = (context, placeholder) => {\n context._composition.matrices = {\n value: new ValueMatrix(placeholder.values),\n left: new ValueMatrix(placeholder.rows[0]),\n right: new ValueMatrix(placeholder.rows[1]),\n top: new ValueMatrix(placeholder.columns[0]),\n bottom: new ValueMatrix(placeholder.columns[1])\n };\n return context;\n};\n\n/**\n *\n *\n * @param {*} context\n * @returns\n */\nexport const setupChangeListeners = (context) => {\n context.store().registerImmediateListener([...Object.keys(localOptions), DATA_UPDATE_COUNTER], (...params) => {\n const datamodel = context.data();\n const [config, rows, columns, color, shape, size, detail, layers, transform] = params;\n\n if (datamodel && rows[1] && columns[1]) {\n // Get the resolver for the matrices\n const resolver = context.resolver();\n // Prepare configuration for matrix preparation\n let matrixConfig = {\n selection: context.selection(),\n alias: context.alias(),\n globalConfig: config[1] || {},\n rows: rows[1],\n columns: columns[1],\n detail: detail[1],\n layers: layers[1],\n transform: transform[1]\n };\n\n const retinalConfig = sanitizeRetinalConfig({\n color: color[1],\n shape: shape[1],\n size: size[1]\n });\n\n matrixConfig = Object.assign(matrixConfig, retinalConfig);\n // Create the encoders for the group\n const encoders = {};\n encoders.retinalEncoder = new RetinalEncoder();\n encoders.simpleEncoder = getEncoder(layers[1]);\n\n // Set the group type\n context.groupType(encoders.simpleEncoder.constructor.type());\n\n // Get sanitized fields as instances of the Vars Class\n const fields = encoders.simpleEncoder.fieldSanitizer(datamodel, matrixConfig);\n encoders.simpleEncoder.setAxisAndHeaders(config[1] ? config[1].axisFrom : {}, fields);\n // Setting layers for the code\n layers[1] && resolver.layerConfig(layers[1]);\n // Set the row and column axes\n resolver.horizontalAxis(fields.rows, encoders).verticalAxis(fields.columns, encoders);\n // Getting the placeholders\n const placeholderInfo = resolver.getMatrices(datamodel, matrixConfig, context.registry(), encoders);\n context._groupedDataModel = placeholderInfo.dataModels.groupedModel;\n // Set the selection object\n context.selection(placeholderInfo.selection);\n\n // Create retinal axes\n resolver.createRetinalAxes(placeholderInfo.dataModels.parentModel.getFieldsConfig(), retinalConfig,\n encoders);\n\n // Domains are evaluated for each of the axes for commonality\n resolver.setDomains(matrixConfig, placeholderInfo.dataModels, encoders);\n\n // Create matrix instances\n setMatrixInstances(context, placeholderInfo);\n\n // Prepare corner matrices\n context.cornerMatrices(resolver.createHeaders(placeholderInfo, fields, config[1]));\n\n // Set placeholder information\n context.placeholderInfo(placeholderInfo);\n\n context._composition.axes = resolver.axes();\n context.metaData({\n border: getBorders(placeholderInfo, encoders.simpleEncoder)\n });\n }\n return context;\n });\n return context;\n};\n","import { DATA_UPDATE_COUNTER } from '../enums/defaults';\n\nexport const PROPS = {\n alias: {},\n data: {\n sanitization: (context, value) => {\n if (context._data !== value) {\n const store = context.store();\n let hasDataUpdated = store.get(DATA_UPDATE_COUNTER);\n store.commit(DATA_UPDATE_COUNTER, ++hasDataUpdated);\n }\n return value;\n }\n },\n cornerMatrices: {},\n groupType: {},\n matrixInstance: {},\n metaData: {},\n placeholderInfo: {},\n resolver: {},\n registry: {\n sanitization: (context, value) => {\n if (context.resolver) {\n context.resolver().registry(value.cellRegistry);\n }\n return value;\n }\n },\n selection: {},\n store: {}\n};\n","import { transactor, generateGetterSetters } from 'muze-utils';\nimport localOptions from './local-options';\nimport { SimpleGroup } from '../simple-group';\nimport {\n MatrixResolver,\n initStore,\n findInGroup\n} from '../group-helper';\nimport { setupChangeListeners } from './change-listener';\nimport { PROPS } from './props';\nimport {\n CONFIG,\n MOUNT,\n RETINAL,\n Y\n} from '../enums/constants';\n\n/**\n * This class is used to create an instance of a visual group.\n * It extends the SimpleGroup (which is an interface). The visual group takes in a datamodel,\n * and a set of rows and columns, alongwith optional paramters (like color, size, shape).\n *\n * @class VisualGroup\n */\nclass VisualGroup extends SimpleGroup {\n\n /**\n * Creates an instance of VisualGroup. Requires dependencies and other registry options for placeholders\n * and layers that create individual units\n * @param {Object} registry Key value pair of compostions for the group\n * @param {Object} dependencies Dependencies needed to run the group\n * @memberof VisualGroup\n */\n constructor (registry, dependencies) {\n super();\n\n const {\n componentSubRegistry\n } = registry;\n\n this._dependencies = dependencies;\n // Generate getter/setter methods for all properties of the class\n // One can get each property by calling the method and can set it\n // by passing paramaters for the same. Thus, one can chain setter\n // getter methods.\n generateGetterSetters(this, PROPS);\n // Populate the store with default values\n this.store(initStore());\n\n // initialize group compositions\n this._composition = {};\n // store reference to data\n this._data = [];\n // matrix instance store each of the matrices\n this._matrixInstance = {};\n // store reference to mountpoint\n this._mount = null;\n // selection object that takes care of updating of components\n this._selection = {};\n // stores info about the placeholders generated after creation of matrices\n this._placeholderInfo = {};\n // corner matrices are the headers/footers for the application\n this._cornerMatrices = {};\n // Create instance of matrix resolver\n this.resolver(new MatrixResolver(this._dependencies));\n\n // Getting indiviual registered items\n this.registry({\n layerRegistry: componentSubRegistry.layerRegistry.get(),\n cellRegistry: componentSubRegistry.cellRegistry.get()\n });\n // Add local options to the store\n transactor(this, localOptions, this.store().model);\n // Register listeners\n setupChangeListeners(this);\n }\n\n matrixInstance (...matrices) {\n if (matrices.length) {\n return this;\n }\n return this.composition().matrices;\n }\n\n /**\n * Returns the composition of the Group\n *\n * @readonly\n * @memberof VisualGroup\n */\n composition (...params) {\n if (params.length) {\n return this;\n }\n return this._composition;\n }\n\n /**\n * Locks the model to prevent change listeners to be triggered until unlocked\n *\n * @return {Object} Instance of class VisualGroup\n * @memberof VisualGroup\n */\n lockModel () {\n this.store().model.lock();\n return this;\n }\n\n /**\n * Unlocks the model so that all change listeners can be triggered\n *\n * @return {Object} Instance of class VisualGroup\n * @memberof VisualGroup\n */\n unlockModel () {\n this.store().model.unlock();\n return this;\n }\n\n /**\n *\n *\n * @param {*} variable\n * @return\n * @memberof VisualGroup\n */\n where (variable) {\n return findInGroup(variable, this.resolver().getAllFields());\n }\n\n /**\n *\n *\n * @param {*} type\n * @return\n * @memberof VisualGroup\n */\n getAxes (type) {\n if (type === RETINAL) {\n return this.resolver().getRetinalAxes();\n }\n return this.resolver().getSimpleAxes(type);\n }\n\n /**\n *\n *\n * @return\n * @memberof VisualGroup\n */\n getCells (type) {\n return this.resolver()[`${type}Cells`]();\n }\n\n /**\n *\n *\n * @param {*} channel\n * @return\n * @memberof VisualGroup\n */\n getFieldsFromChannel (channel) {\n const {\n rowProjections,\n colProjections\n } = this.resolver().getAllFields();\n\n return channel === Y ? rowProjections : colProjections;\n }\n\n /**\n *\n *\n * @param {*} facetKey\n * @return\n * @memberof VisualGroup\n */\n getCellsByFacetKey (facetKey) {\n const resolver = this.resolver();\n const cells = resolver.rowCells()[facetKey] || resolver.colCells()[facetKey] || [];\n return cells;\n }\n\n /**\n *\n *\n * @param {*} facetKey\n * @return\n * @memberof VisualGroup\n */\n getAxesByFacetKey (axisType, facetKey) {\n const resolver = this.resolver();\n const cells = resolver.rowCells()[facetKey] || resolver.colCells()[facetKey];\n const axes = cells[0].valueOf().axes()[axisType] || [];\n\n return axes;\n }\n\n /**\n * This method is used to return a serialized representation of the instance's properties.\n *\n * @return {Object} Object with config proprties.\n * @memberof VisualGroup\n */\n serialize () {\n const store = this.store();\n\n return {\n [CONFIG]: store.get(CONFIG),\n [MOUNT]: store.get(MOUNT)\n };\n }\n\n getGroupByData () {\n return this._groupedDataModel;\n }\n}\n\nexport default VisualGroup;\n","import { PersistentBehaviour, SELECTION } from '@chartshq/muze-firebolt';\n\nexport default class SelectBehaviour extends PersistentBehaviour {\n static formalName () {\n return 'select';\n }\n\n setSelectionSet (addSet, selectionSet) {\n if (addSet === null) {\n selectionSet.reset();\n } else if (addSet.length) {\n // new add set\n const existingRemoveSet = addSet.filter(d => selectionSet._set[d] === SELECTION.SELECTION_OLD_EXIT\n || selectionSet._set[d] === SELECTION.SELECTION_NEW_EXIT);\n // existing add set\n if (existingRemoveSet.length) {\n selectionSet.updateEntry();\n selectionSet.add(existingRemoveSet);\n } else {\n selectionSet.updateExit();\n selectionSet.remove(addSet);\n }\n const { exitSet } = selectionSet.getSets();\n const mergedExitSet = [...new Set(exitSet[1]), ...new Set(exitSet[0])];\n const completeSetCount = selectionSet.getCompleteSet().length;\n if (exitSet[1].length !== completeSetCount && mergedExitSet.length === completeSetCount) {\n selectionSet.reset();\n }\n } else {\n selectionSet.remove(selectionSet.getCompleteSet());\n }\n return this;\n }\n}\n","import { BEHAVIOURS, ACTIONS } from '@chartshq/muze-firebolt';\n\nconst CLASSPREFIX = 'muze';\n\nexport const actionBehaviourMap = {\n [ACTIONS.DRAG]: {\n target: `.${CLASSPREFIX}-gradient-rect`,\n behaviours: [BEHAVIOURS.BRUSH]\n },\n [ACTIONS.HOVER]: {\n target: [`.${CLASSPREFIX}-legend-columns`],\n behaviours: [BEHAVIOURS.HIGHLIGHT]\n },\n [ACTIONS.CLICK]: {\n target: [`.${CLASSPREFIX}-legend-columns`],\n behaviours: [BEHAVIOURS.SELECT]\n }\n};\n\nexport const propagationBehaviourMap = {\n [BEHAVIOURS.SELECT]: BEHAVIOURS.FILTER,\n [BEHAVIOURS.BRUSH]: BEHAVIOURS.HIGHLIGHT\n};\n","import * as BEHAVIOURS from '../enums/behaviours';\nimport * as sideEffects from '../enums/side-effects';\n\nexport const behaviourEffectMap = {\n [BEHAVIOURS.BRUSH]: [sideEffects.SELECTIONBOX, {\n name: sideEffects.Highlighter,\n options: {\n strategy: 'fade'\n }\n }],\n [BEHAVIOURS.HIGHLIGHT]: [sideEffects.Highlighter],\n select: [{\n name: sideEffects.Highlighter,\n options: {\n strategy: 'fade'\n }\n }]\n};\n\nexport const propagationSideEffects = {\n [BEHAVIOURS.BRUSH]: [{\n name: sideEffects.Highlighter,\n options: {\n strategy: 'fade'\n }\n }],\n [BEHAVIOURS.HIGHLIGHT]: [{\n name: sideEffects.Highlighter,\n options: {\n strategy: 'fade'\n }\n }],\n [BEHAVIOURS.SELECT]: ['filter']\n};\n\n","export const BRUSH = 'brush';\nexport const HIGHLIGHT = 'highlight';\nexport const TOOLTIP = 'tooltip';\nexport const FILTER = 'filter';\nexport const SELECT = 'select';\n\n","export const SELECTIONBOX = 'selectionBox';\nexport const Highlighter = 'highlighter';\n\n","export const CLASSPREFIX = 'muze';\nexport const IDFIELD = '__id__';\nexport const CONFIG = 'config';\nexport const DATAMODEL = 'dataModel';\nexport const AXES = 'axes';\nexport const LAYERDEFS = 'layerDef';\nexport const WIDTH = 'width';\nexport const HEIGHT = 'height';\nexport const MOUNTPOINT = 'mountPoint';\nexport const GRIDLINEPARENTGROUPCLASS = 'grid-lines';\nexport const TRANSFORM = 'transform';\nexport const CONSOLIDATED = 'consolidated';\nexport const FRAGMENTED = 'fragmented';\nexport const DEFAULTCOLOR = '#F44336';\nexport const DEFAULTSIZE = 50;\nexport const DEFAULTSHAPE = 'circle';\nexport const STEP = 'step';\nexport const GRADIENT = 'gradient';\nexport const ORDINAL = 'ordinal';\nexport const SCALE_FUNCTIONS = {\n size: 'getSize',\n shape: 'getShape',\n color: 'getColor'\n};\nexport const TOP = 'top';\nexport const LEFT = 'left';\nexport const RIGHT = 'right';\nexport const BOTTOM = 'bottom';\nexport const HORIZONTAL = 'horizontal';\nexport const VERTICAL = 'vertical';\nexport const CENTER = 'center';\nexport const VALUE = 'value';\nexport const PATH = 'path';\nexport const SHAPE = 'shape';\nexport const ICON = 'icon';\nexport const RECT = 'rect';\nexport const START = 'start';\nexport const UPPER = 'upper';\nexport const LOWER = 'lower';\nexport const END = 'end';\nexport const SIZE = 'size';\nexport const DISCRETE = 'discrete';\nexport const MEASURE = 'measure';\n\n","import { assembleModelFromIdentifiers, getDataModelFromRange } from 'muze-utils';\nimport { propagationBehaviourMap } from './action-behaviour-map';\nimport { propagationSideEffects } from './behaviour-effect-map';\nimport { STEP, GRADIENT, DISCRETE, MEASURE } from '../enums/constants';\n\nexport const propagate = (firebolt, action, selectionSet, config = {}) => {\n let propagationData;\n const type = firebolt.context.constructor.type();\n const payload = config.payload;\n const data = firebolt.context.data();\n const metaData = firebolt.context.metaData();\n const fieldType = metaData.getData().schema[0].type;\n\n const propPayload = {};\n const sourceId = firebolt.context._id;\n propPayload.action = propagationBehaviourMap[action] || action;\n propPayload.sideEffects = propagationSideEffects[action];\n propPayload.sourceCanvas = firebolt.context.canvasAlias();\n const isMutableAction = firebolt._actions.behavioural[propPayload.action].constructor.mutates();\n if (payload.criteria === null) {\n propagationData = null;\n } else {\n const entrySet = selectionSet.mergedEnter;\n let values = data.filter(d => entrySet.uids.indexOf(d.id) !== -1).map(d => d.value);\n if (type === STEP || (type === DISCRETE && fieldType === MEASURE)) {\n const field = Object.keys(payload.criteria || {})[0];\n values = data.filter(d => entrySet.uids.indexOf(d.id) !== -1).map(d => d.range);\n propagationData = values.length ? metaData.select((fields) => {\n let check = false;\n for (let i = 0; i < values.length; i++) {\n check = fields[field].value >= values[i][0] && fields[field].value <= values[i][1];\n if (check === true) {\n break;\n }\n }\n return check;\n }, {\n saveChild: false\n }) : null;\n } else if (type === GRADIENT) {\n propagationData = getDataModelFromRange(metaData, payload.criteria);\n } else if (values.length) {\n propagationData = assembleModelFromIdentifiers(metaData, [payload.criteria[0], ...values.map(d => [d])]);\n } else {\n propPayload.criteria = null;\n propagationData = metaData.select(() => true, {\n saveChild: false\n });\n }\n }\n\n let propagateInterpolatedValues = false;\n\n if (propagationData) {\n const schema = propagationData.getSchema();\n propagateInterpolatedValues = schema.every(d => d.type === fieldType.MEASURE);\n }\n\n const propConfig = {\n sourceId: `legend-${sourceId}`,\n payload: propPayload,\n criteria: propPayload.criteria === null ? null : propagationData,\n isMutableAction,\n propagateInterpolatedValues,\n action: propPayload.action\n };\n\n metaData.propagate(propagationData, propConfig, true);\n};\n","import { Firebolt } from '@chartshq/muze-firebolt';\nimport { propagate } from './helper';\nimport { STEP, GRADIENT } from '../enums/constants';\n\n/**\n * This class manages the interactions of legend.\n * @export\n * @class LegendFireBolt\n * @extends {Firebolt}\n */\nexport class LegendFireBolt extends Firebolt {\n constructor (...params) {\n super(...params);\n this.initializeSideEffects();\n }\n\n getPropagationSelectionSet (selectionSet) {\n return selectionSet[0];\n }\n\n propagate (behaviourName, payload, selectionSet) {\n propagate(this, behaviourName, selectionSet, {\n payload\n });\n }\n\n getAddSetFromCriteria (criteria) {\n let values;\n let uniqueIds;\n const type = this.context.constructor.type();\n\n if (criteria === null) {\n uniqueIds = null;\n } else if (type === STEP) {\n values = Object.values(criteria);\n uniqueIds = this.context.data().filter(d => values.indexOf(d.range) !== -1).map(d => d.id);\n } else if (type === GRADIENT) {\n uniqueIds = [];\n } else {\n values = criteria[1];\n if (values) {\n uniqueIds = this.context.data().filter(d => values.indexOf(d.value) !== -1).map(d => d.id);\n } else {\n values = Object.values(criteria);\n uniqueIds = this.context.data().filter(d => values.indexOf(d.range) !== -1).map(d => d.id);\n }\n }\n return {\n uids: uniqueIds,\n model: null\n };\n }\n\n getFullData () {\n return null;\n }\n}\n","import {\n getEvent,\n getD3Drag\n } from 'muze-utils';\n\n/**\n * Adds dragging action to the target element.\n * @param {firebolt} firebolt firebolt\n * @param {SVGElement} targetEl Element on which brushing action is needed.\n * @param {Array} behaviours Array of behaviours\n */\n/* istanbul ignore next */ const drag = firebolt => (targetEl, behaviours) => {\n let startPos = {};\n let endPos = {};\n let payload;\n const d3Drag = getD3Drag();\n const context = firebolt.context;\n const boundingBox = context.measurement().gradientDimensions;\n const axisType = context.config().align === 'horizontal' ? 'x' : 'y';\n const axisScale = context.axis().source().scale();\n const rangeShifter = axisScale.range()[axisType === 'x' ? 0 : 1];\n\n targetEl.call(d3Drag().on('start', () => {\n const event = getEvent();\n startPos = {\n x: event.x,\n y: event.y\n };\n }).on('drag', () => {\n const event = getEvent();\n\n endPos = {\n x: event.x,\n y: event.y\n };\n endPos.x = Math.max(0, Math.min(endPos.x, boundingBox.width));\n endPos.y = Math.max(0, Math.min(endPos.y, boundingBox.height));\n\n payload = {\n criteria: {\n [context.fieldName()]: [axisScale.invert(startPos[axisType] + rangeShifter * 2),\n axisScale.invert(endPos[axisType] + rangeShifter * 2)].sort((a, b) => a - b)\n }\n };\n behaviours.forEach(behaviour => firebolt.dispatchBehaviour(behaviour, payload));\n }).on('end', () => {\n const event = getEvent();\n\n endPos = {\n x: event.x,\n y: event.y\n };\n endPos.x = Math.max(0, Math.min(endPos.x, boundingBox.width));\n endPos.y = Math.max(0, Math.min(endPos.y, boundingBox.height));\n if (startPos[axisType] === endPos[axisType]) {\n payload = {\n criteria: {}\n };\n } else {\n payload = {\n criteria: {\n [context.fieldName()]: [axisScale.invert(startPos[axisType] + rangeShifter * 2),\n axisScale.invert(endPos[axisType] + rangeShifter * 2)].sort((a, b) => a - b)\n }\n };\n }\n behaviours.forEach(behaviour => firebolt.dispatchBehaviour(behaviour, payload));\n }));\n};\n\nexport default drag;\n","/**\n * Adds mouse interactions to target element.\n * @param {Firebolt} Firebolt instance of firebolt.\n * @param {SVGElement} targetEl Element on which the event listeners will be attached.\n * @param {Array} behaviours Array of behaviours\n */\n/* istanbul ignore next */ const hover = firebolt => (targetEl, behaviours) => {\n const dispatchBehaviour = function (args) {\n const payload = {\n criteria: firebolt.context.getCriteriaFromData(args)\n };\n behaviours.forEach(behaviour => firebolt.dispatchBehaviour(behaviour, payload));\n event.stopPropagation();\n };\n\n targetEl.on('mouseover', dispatchBehaviour)\n .on('mousemove', dispatchBehaviour)\n .on('mouseout', () => {\n behaviours.forEach(behaviour => firebolt.dispatchBehaviour(behaviour, {\n criteria: null\n }));\n event.stopPropagation();\n });\n};\n\nexport default hover;\n","/**\n * Adds mouse interactions to target element.\n * @param {VisualUnit} instance instance of visual unit.\n * @param {SVGElement} targetEl Element on which the event listeners will be attached.\n * @param {Array} behaviours Array of behaviours\n */\nconst click = firebolt => (targetEl, behaviours) => {\n const dispatchBehaviour = function (args) {\n const payload = {\n criteria: firebolt.context.getCriteriaFromData(args)\n };\n behaviours.forEach(behaviour => firebolt.dispatchBehaviour(behaviour, payload));\n };\n\n targetEl.on('click', dispatchBehaviour);\n};\n\nexport default click;\n","import drag from './drag';\nimport hover from './hover';\nimport click from './click';\nimport * as ACTIONNAMES from '../../enums/actions';\n\nexport const physicalActions = {\n [ACTIONNAMES.DRAG]: drag,\n [ACTIONNAMES.HOVER]: hover,\n [ACTIONNAMES.CLICK]: click\n};\n\n","export const DRAG = 'drag';\nexport const HOVER = 'hover';\nexport const SELECTIONDRAG = 'selectiondrag';\nexport const CLICK = 'click';\n","import {\n getMousePos,\n getEvent,\n getD3Drag\n } from 'muze-utils';\nimport { HEIGHT, WIDTH, HORIZONTAL } from '../../enums/constants';\n\nconst getSelectionCriteria = (subject, axis, measures) => {\n let criteria = [];\n const {\n axisScale,\n axisType\n } = axis;\n const {\n startPos,\n endPos,\n selectionBoxMeasure,\n drawingInfMeasure,\n offset\n } = measures;\n const subjectStartPoint = subject[axisType];\n\n if (startPos[axisType] === endPos[axisType]) {\n criteria = [];\n } else if (subjectStartPoint + selectionBoxMeasure >= drawingInfMeasure + offset) {\n criteria = [axisScale.invert(drawingInfMeasure + offset - selectionBoxMeasure),\n axisScale.invert(drawingInfMeasure + offset)];\n } else if (subjectStartPoint - offset < offset) {\n criteria = [axisScale.invert(offset * 2), axisScale.invert(selectionBoxMeasure + offset * 2)];\n } else {\n criteria = [axisScale.invert(subjectStartPoint), axisScale.invert(subjectStartPoint + selectionBoxMeasure)];\n }\n axisType === 'x' ? criteria : criteria.reverse();\n return criteria;\n};\n\nexport const selectionBoxDrag = firebolt => (targetEl, behaviours) => {\n let startPos = {};\n let payload;\n const endPos = {};\n const d3Drag = getD3Drag();\n const context = firebolt.context;\n const axisScale = context.axis().source().scale();\n const axisType = context.config().align === HORIZONTAL ? 'x' : 'y';\n const drawingInfMeasure = context.measurement().gradientDimensions[axisType === 'x' ?\n WIDTH : HEIGHT];\n const offset = axisScale.range()[axisType === 'x' ? 0 : 1];\n const measures = {\n drawingInfMeasure,\n offset\n };\n let subject = {};\n\n targetEl.call(d3Drag().on('start', function () {\n const event = getEvent();\n startPos = getMousePos(this, event.sourceEvent);\n subject = event.subject;\n }).on('drag', () => {\n const event = getEvent();\n const selectionBoxMeasure = subject[axisType === 'x' ? WIDTH : HEIGHT];\n\n subject.x += event.dx;\n subject.y += event.dy;\n\n measures.selectionBoxMeasure = selectionBoxMeasure;\n measures.startPos = startPos;\n measures.endPos = endPos;\n const criteria = getSelectionCriteria(subject, { axisScale, axisType }, measures);\n\n payload = {\n criteria: {\n [context.fieldName()]: criteria\n },\n fadeOut: true\n };\n firebolt.dispatchBehaviour(behaviours[0], payload);\n }).on('end', () => {\n const event = getEvent();\n const selectionBoxMeasure = subject[axisType === 'x' ? WIDTH : HEIGHT];\n measures.selectionBoxMeasure = selectionBoxMeasure;\n measures.startPos = startPos;\n measures.endPos = endPos;\n const criteria = getSelectionCriteria(event, { axisScale, axisType }, measures);\n payload = {\n criteria: {\n [context.fieldName()]: criteria\n },\n fadeOut: true,\n config: {\n transition: {\n duration: 200\n }\n }\n };\n firebolt.dispatchBehaviour(behaviours[0], payload);\n }));\n};\n\n","import { makeElement } from 'muze-utils';\nimport { SpawnableSideEffect } from '@chartshq/muze-firebolt';\nimport { CLASSPREFIX, HEIGHT, WIDTH, HORIZONTAL, RECT } from '../../../enums/constants';\nimport { SELECTIONBOX } from '../../../enums/side-effects';\nimport { selectionBoxDrag } from '../../physical/selection-box-drag';\nimport './styles.scss';\n\n/**\n * This class is used to create a selection box which is used by visual unit for brushing and\n * selection in the canvas.\n * @class SelectionBox\n */\n/* istanbul ignore next */ class SelectionBox extends SpawnableSideEffect {\n static formalName () {\n return SELECTIONBOX;\n }\n\n /**\n * It returns the default configuration needed by selectionbox.\n * @return {Object} Default configuration of the selection box.\n */\n static defaultConfig () {\n return {\n className: 'legend-selection-box',\n classPrefix: CLASSPREFIX\n };\n }\n\n /**\n * Draws the selectionbox with the specified dimensions.\n */\n /* istanbul ignore next */ apply (selectionSet, payload) {\n let x;\n let y;\n let width;\n let height;\n const firebolt = this.firebolt;\n const context = firebolt.context;\n const config = this.config();\n const axis = context.axis().source();\n const className = `${config.classPrefix}-${config.className}`;\n\n const domain = payload.criteria[firebolt.context.fieldName()];\n const axisScale = axis.scale();\n const range = domain ? [axis.getScaleValue(domain[0]), axis.getScaleValue(domain[1])] : [];\n\n const axisType = context.config().align === HORIZONTAL ? 'x' : 'y';\n\n const gradientDimension = firebolt.context.measurement().gradientDimensions[axisType === 'x' ?\n HEIGHT : WIDTH];\n\n const rangeShifter = axisScale.range()[axisType === 'x' ? 0 : 1];\n const legendGradContainer = context.getDrawingContext().svgContainer;\n const legendSelGroup = makeElement(legendGradContainer, 'g', [1], `${config.classPrefix}-selection-box-group`);\n\n if (firebolt.context.config().align === HORIZONTAL) {\n x = range[0] - rangeShifter || 0;\n y = 0;\n width = range[1] - range[0] || 0;\n height = gradientDimension;\n } else {\n x = 0;\n y = range[1] - rangeShifter || 0;\n height = range[0] - range[1] || 0;\n width = gradientDimension;\n }\n const enterFn = function (el) {\n selectionBoxDrag(firebolt)(el, ['brush']);\n };\n const selBox = makeElement(legendSelGroup, RECT, [{ domain, x, y, width, height }], className,\n { enter: enterFn });\n selBox.attr('y', y)\n .attr('x', x)\n .attr(WIDTH, width)\n .attr(HEIGHT, height);\n }\n}\n\nexport default SelectionBox;\n\n","import { selectElement } from 'muze-utils';\n\nexport const strategies = (firebolt) => {\n const context = firebolt.context;\n const classed = (set, className, change) => {\n const classPrefix = context.config().classPrefix;\n selectElement(context.mount())\n .selectAll(`.${classPrefix}-legend-columns`)\n .filter(d => set.uids.indexOf(d.id) !== -1)\n .selectAll('div')\n .classed(className, change);\n };\n\n return {\n fade: (set, config = {}) => {\n const classPrefix = context.config().classPrefix;\n if (!set.mergedEnter.length && !set.mergedExit.length) {\n classed(set.completeSet, config.className || `${classPrefix}-legend-fadeout`, false);\n } else {\n classed(set.mergedExit, config.className || `${classPrefix}-legend-brighten`, false);\n classed(set.mergedExit, config.className || `${classPrefix}-legend-fadeout`, true);\n classed(set.mergedEnter, config.className || `${classPrefix}-legend-fadeout`, false);\n }\n },\n brighten: (set, config = {}) => {\n const classPrefix = context.config().classPrefix;\n if (!set.mergedEnter.length && !set.mergedExit.length) {\n classed(set.completeSet, config.className || `${classPrefix}-legend-brighten`, false);\n } else {\n classed(set.mergedEnter, config.className || `${classPrefix}-legend-brighten`, true);\n classed(set.mergedExit, config.className || `${classPrefix}-legend-brighten`, false);\n }\n }\n };\n};\n","import { GenericSideEffect } from '@chartshq/muze-firebolt';\nimport { strategies } from './strategies';\nimport { Highlighter } from '../../../enums/side-effects';\n\nexport default class LegendHighlighter extends GenericSideEffect {\n constructor (...params) {\n super(...params);\n this._strategies = strategies(this.firebolt);\n this._strategy = 'brighten';\n }\n\n static formalName () {\n return Highlighter;\n }\n\n apply (selectionSet, payload, options = {}) {\n const strategy = this._strategies[options.strategy || this._strategy];\n\n strategy(selectionSet, this);\n }\n}\n","import { mergeRecursive } from 'muze-utils';\n\nexport const PROPS = {\n config: {\n sanitization: (context, value) => mergeRecursive(context._config || {}, value)\n },\n data: {},\n fieldName: {},\n legendContainer: {},\n measurement: {\n sanitization: (context, value) => {\n const measurement = mergeRecursive(context._measurement, value);\n ['padding', 'border', 'margin'].forEach((space) => {\n measurement[space] = Math.min(measurement[space] > 0 ? measurement[space] : 0,\n measurement.maxWidth * 0.1, measurement.maxHeight * 0.1);\n });\n return measurement;\n }\n },\n logicalSpace: {},\n metaData: {},\n range: {\n sanitization: (context, value) => {\n context.scale().range(value);\n context.resetLogicalSpace();\n context.store().commit('range', value);\n return value;\n }\n },\n scale: {},\n smartTicks: {},\n store: {},\n title: {\n sanitization: (context, value) => mergeRecursive(context._title || {}, value)\n }\n};\n","import { getSymbol } from 'muze-utils';\nimport {\n CENTER,\n LEFT,\n RIGHT\n} from '../enums/constants';\n\nexport const ALIGN = {\n HORIZONTAL: 'horizontal',\n VERTICAL: 'vertical'\n};\n\nexport const DEFAULT_MEASUREMENT = {\n height: 30,\n width: 30,\n maxWidth: Infinity,\n maxHeight: Infinity,\n padding: 2,\n margin: 2,\n border: 1\n};\n\nexport const LEGEND_TITLE = {\n text: '',\n orientation: (pos) => {\n if (pos === LEFT || pos === RIGHT) {\n return LEFT;\n } return CENTER;\n }\n};\n\nexport const DEFAULT_CONFIG = {\n classPrefix: 'muze',\n borderStyle: 'solid',\n borderColor: 'rgba(0,0,0,0)',\n formatter: {\n bounds: {\n lower: 'less than',\n upper: 'more than'\n }\n },\n item: {\n text: {\n orientation: 'right',\n width: 10,\n formatter: val => val\n },\n icon: {\n className: 'legend-icon',\n height: 20,\n width: 20,\n color: 'rgba(0,0,0,.5)',\n type: 'square'\n }\n }\n};\n\n/**\n * Creates a map of pre defined icons\n *\n * @param {string} icon Accepts a icon name like 'square', 'cross', 'diamond' etc\n * @return {Object} icon object which can be used to draw the icons\n */\nexport const ICON_MAP = (icon) => {\n if (icon && typeof (icon) === 'string') {\n return getSymbol(icon);\n } return icon;\n};\n","import { makeElement, numberInterpolator } from 'muze-utils';\n\nimport {\n SCALE_FUNCTIONS,\n WIDTH,\n HEIGHT,\n LEFT,\n RIGHT,\n TOP,\n BOTTOM\n} from '../enums/constants';\n\n/**\n *\n *\n * @param {*} scale\n * @returns\n */\nexport const getScaleInfo = (scale) => {\n const scaleType = scale.constructor.type();\n const domain = scale.uniqueValues();\n const steps = scale.config().stops || 1;\n const scaleFn = SCALE_FUNCTIONS[scaleType];\n\n return { scaleType, domain, steps, scaleFn };\n};\n\n/**\n *\n *\n * @param {*} domain\n * @param {*} steps\n * @returns\n */\nexport const getInterpolatedData = (domain, steps) => {\n const domainForLegend = [];\n const interpolatedFn = numberInterpolator()(domain[0], domain[1]);\n\n for (let i = 0; i <= steps; i++) {\n domainForLegend[i] = interpolatedFn(i / steps);\n }\n return domainForLegend;\n};\n\n/**\n *\n *\n * @param {*} container\n * @param {*} text\n * @param {*} measurement\n * @param {*} classPrefix\n */\nexport const titleCreator = (container, title, measurement, config) => {\n const titleContainer = makeElement(container, 'table', [1], `${config.classPrefix}-legend-title`)\n .style(WIDTH, `${measurement.width}px`)\n .style(HEIGHT, `${measurement.height}px`)\n .style('border-bottom', `${measurement.border}px ${config.borderStyle} ${config.borderColor}`)\n .style('text-align', title.orientation instanceof Function ?\n title.orientation(config.position) : title.orientation);\n return makeElement(titleContainer, 'td', [1], `${config.classPrefix}-legend-title-text`)\n .style(WIDTH, `${measurement.width}px`)\n .style(HEIGHT, '100%')\n .style('padding', `${measurement.padding}px`)\n .text(title.text)\n .node();\n};\n\n /**\n *\n *\n * @param {*} data\n * @param {*} prop\n * @param {*} labelManager\n * @return\n */\nexport const getMaxMeasures = (data, prop, labelManager) => {\n let maxHeight = -Infinity;\n let maxWidth = -Infinity;\n\n data.forEach((item) => {\n const value = prop ? item[prop] : item;\n const space = labelManager.getOriSize(value);\n maxHeight = Math.max(space.height + 2, maxHeight);\n maxWidth = Math.max(space.width + 2, maxWidth);\n });\n\n return { height: maxHeight, width: maxWidth };\n};\n\n/**\n *\n *\n * @param {*} data\n * @param {*} prop\n * @param {*} labelManager\n * @return\n */\nexport const getItemMeasures = (data, prop, labelManager, formatter) => {\n const space = [];\n\n data.forEach((item, index) => {\n const value = prop ? item[prop] : item;\n const { height, width } = labelManager.getOriSize(formatter(value));\n space[index] = { height: height + 1, width: width + 1 };\n });\n return space;\n};\n\n/**\n *\n *\n * @param {*} textOrientation\n * @param {*} effPadding\n * @param {*} titleSpace\n * @return\n * @memberof Legend\n */\nexport const computeItemSpaces = (config, measures, data) => {\n let totalHeight = 0;\n let totalWidth = 0;\n let maxItemSpaces = {\n width: 0, height: 0\n };\n const {\n effPadding,\n titleWidth,\n labelSpaces,\n titleHeight,\n maxWidth\n } = measures;\n const {\n item,\n align\n } = config;\n const {\n icon,\n text\n } = item;\n const textOrientation = text.orientation;\n const itemSpaces = [];\n const iconSpaces = [];\n let maxIconWidth = 0;\n labelSpaces.forEach((labelSpace, i) => {\n const itemSpace = { width: 0, height: 0 };\n const iconSpace = { width: 0, height: 0 };\n const datum = data[i] || {};\n // Compute each legend item height/width\n if (textOrientation === LEFT || textOrientation === RIGHT) {\n // Get label, icon and item widths\n labelSpace.width += effPadding;\n iconSpace.width = (datum.size ? 2 * Math.sqrt(datum.size / Math.PI) : icon.width) + effPadding;\n maxIconWidth = Math.max(iconSpace.width, maxIconWidth);\n itemSpace.width = labelSpace.width + maxIconWidth;\n\n // Get label, icon and item heights\n labelSpace.height = Math.max(labelSpace.height, icon.height) + effPadding;\n iconSpace.height = labelSpace.height;\n itemSpace.height = labelSpace.height;\n } else {\n // Get label, icon and item widths\n labelSpace.width = Math.max(labelSpace.width, datum.size ? 2 * Math.sqrt(datum.size / Math.PI)\n : icon.width) + effPadding;\n iconSpace.width = labelSpace.width;\n itemSpace.width = labelSpace.width;\n maxIconWidth = Math.max(iconSpace.width, maxIconWidth);\n\n // Get label, icon and item heights\n labelSpace.height += effPadding;\n iconSpace.height = icon.height + effPadding;\n itemSpace.height = labelSpace.height + iconSpace.height;\n }\n // Compute height and width of legend for each alignment\n if (align === 'horizontal') {\n totalHeight = Math.max(totalHeight, itemSpace.height);\n } else {\n totalHeight += itemSpace.height;\n totalWidth = Math.max(totalWidth, itemSpace.width, titleWidth) + effPadding;\n }\n maxItemSpaces = {\n width: Math.max(itemSpace.width, maxItemSpaces.width),\n height: Math.max(itemSpace.height, maxItemSpaces.height)\n };\n itemSpaces.push(itemSpace);\n iconSpaces.push(iconSpace);\n });\n itemSpaces.forEach((itemSpace, i) => {\n if (align === 'horizontal') {\n itemSpace.height = totalHeight;\n iconSpaces[i].width = maxIconWidth;\n if (textOrientation === LEFT || textOrientation === RIGHT) {\n labelSpaces[i].height = totalHeight;\n iconSpaces[i].height = totalHeight;\n itemSpaces[i].width = labelSpaces[i].width + maxIconWidth;\n } else {\n labelSpaces[i].width = maxIconWidth;\n itemSpaces[i].width = maxIconWidth;\n labelSpaces[i].width = maxIconWidth;\n }\n totalWidth = Math.max(totalWidth + itemSpaces[i].width);\n } else {\n itemSpace.width = Math.max(totalWidth, maxWidth);\n if (textOrientation === TOP || textOrientation === BOTTOM) {\n labelSpaces[i].width = totalWidth;\n iconSpaces[i].width = totalWidth;\n maxIconWidth = totalWidth;\n } else {\n iconSpaces[i].width = maxIconWidth;\n itemSpaces[i].width = labelSpaces[i].width + maxIconWidth;\n labelSpaces[i].width = maxItemSpaces.width - maxIconWidth;\n totalWidth = Math.max(totalWidth, itemSpace.width) + effPadding;\n }\n }\n });\n totalWidth = Math.max(totalWidth, titleWidth);\n totalHeight += titleHeight + effPadding;\n\n return { totalHeight, totalWidth, itemSpaces, iconSpaces, maxItemSpaces, maxIconWidth };\n};\n\n/**\n *\n *\n * @param {*} type\n * @param {*} scaleInfo\n * @param {*} domainInfo\n * @returns\n */\nexport const getDomainBounds = (type, scaleInfo, domainInfo) => {\n const {\n scaleFn,\n scaleType,\n scale\n } = scaleInfo;\n const {\n domain,\n domainBounds,\n domainLeg,\n steps\n } = domainInfo;\n const ele = domain[type === 'lower' ? 0 : domain.length - 1];\n const step = steps[type === 'lower' ? 0 : steps.length - 1];\n\n return {\n [scaleType]: scaleType === 'size' ? scale[scaleFn](ele) * scale.getScaleFactor() : scale[scaleFn](ele),\n value: domainBounds[type],\n id: type === 'lower' ? 0 : domainLeg.length + 2,\n range: [ele, step]\n };\n};\n","import {\n makeElement,\n selectElement,\n getUniqueId,\n getSmartComputedStyle,\n generateGetterSetters,\n mergeRecursive\n} from 'muze-utils';\nimport { behaviouralActions } from '@chartshq/muze-firebolt';\nimport * as legendBehaviours from '../firebolt/behavioural';\n\nimport { LegendFireBolt } from '../firebolt/legend-firebolt';\nimport { actionBehaviourMap } from '../firebolt/action-behaviour-map';\nimport { physicalActions } from '../firebolt/physical';\nimport * as sideEffects from '../firebolt/side-effects';\nimport { behaviourEffectMap } from '../firebolt/behaviour-effect-map';\nimport { VALUE, PATH } from '../enums/constants';\nimport { PROPS } from './props';\nimport { DEFAULT_MEASUREMENT, DEFAULT_CONFIG, LEGEND_TITLE } from './defaults';\nimport { getItemMeasures, titleCreator, computeItemSpaces } from './legend-helper';\n\n/**\n * Creates a Legend from the axes of a canvas\n *\n * @param {Object} dependencies : legend data\n * @class SimpleLegend\n */\nexport default class SimpleLegend {\n\n /**\n * Creates an instance of Legend.\n * @param {Object} dependencies Set of dependencies required by the legend\n * @memberof Legend\n */\n constructor (dependencies) {\n this._data = [];\n this._metaData = [];\n this._mount = null;\n this._fieldName = null;\n this._title = Object.assign({}, LEGEND_TITLE);\n this._metaData = null;\n this._labelManager = dependencies.labelManager;\n this._cells = dependencies.cells;\n this._id = getUniqueId();\n this._measurement = Object.assign({}, this.constructor.defaultMeasurement());\n this._config = mergeRecursive({}, this.constructor.defaultConfig());\n\n generateGetterSetters(this, PROPS);\n this._computedStyle = getSmartComputedStyle(selectElement('body'),\n `${this.config().classPrefix}-legend-item-info`);\n\n this._firebolt = new LegendFireBolt(this, {\n behavioural: Object.assign({}, behaviouralActions, legendBehaviours),\n physical: physicalActions,\n physicalBehaviouralMap: actionBehaviourMap\n }, sideEffects, behaviourEffectMap);\n }\n\n id () {\n return this._id;\n }\n /**\n * Initializes an instance of the class\n *\n * @static\n * @param {Object} dependencies Set of dependencies required by the legend\n * @return {Instance} returns a new instance of Legend\n * @memberof Legend\n */\n static create (dependencies) {\n return new SimpleLegend(dependencies);\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof SimpleLegend\n */\n static defaultConfig () {\n return DEFAULT_CONFIG;\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof SimpleLegend\n */\n static defaultMeasurement () {\n return DEFAULT_MEASUREMENT;\n }\n\n /**\n *\n *\n * @readonly\n * @memberof SimpleLegend\n */\n firebolt (...params) {\n if (params.length) {\n return this;\n }\n return this._firebolt;\n }\n\n /**\n *\n *\n * @return\n * @memberof Legend\n */\n elemType () {\n return PATH;\n }\n\n canvasAlias (...alias) {\n if (alias.length) {\n this._canvasAlias = alias[0];\n return this;\n }\n return this._canvasAlias;\n }\n\n /**\n *\n *\n * @return\n * @memberof Legend\n */\n mount (...params) {\n if (params.length) {\n this._mount = params[0];\n this.render();\n return this;\n }\n return this._mount;\n }\n\n /**\n *\n *\n * @param {*} effPadding\n * @param {*} align\n * @return\n * @memberof Legend\n */\n getLabelSpaces () {\n const {\n item,\n classPrefix\n } = this.config();\n this._labelManager.setStyle(getSmartComputedStyle(selectElement('body'),\n `${classPrefix}-legend-item-info`));\n return getItemMeasures(this.data(), VALUE, this._labelManager, item.text.formatter);\n }\n\n /**\n * Sets the height and width of a legend based on provided max\n * height and width and based on its contents\n *\n * @return {Instance} Current instance\n * @memberof Legend\n */\n setLegendMeasures () {\n const {\n width,\n height,\n maxWidth,\n maxHeight,\n padding,\n margin,\n border\n } = this.measurement();\n const {\n align\n } = this.config();\n\n // Effective padding, margin and padding\n const effPadding = padding * 2;\n const effBorder = border * 2;\n const effMargin = margin * 2;\n\n this.data(this.dataFromScale(this.scale()));\n // Get space occupied by title\n const titleSpace = this.getTitleSpace();\n const titleHeight = titleSpace.height > 0 ? titleSpace.height + effPadding : 0;\n const titleWidth = titleSpace.width + effPadding;\n\n // Get space occupied by labels\n const labelSpaces = this.getLabelSpaces(effPadding, align);\n\n const {\n totalHeight, totalWidth, itemSpaces, iconSpaces, maxItemSpaces, maxIconWidth\n } = computeItemSpaces(this.config(),\n { effPadding, titleWidth, labelSpaces, titleHeight, maxWidth, maxHeight }, this.data());\n\n this.measurement({\n width: Math.max(totalWidth, width) + effMargin + effBorder,\n height: Math.max(totalHeight, height) + effMargin + effBorder,\n labelSpaces,\n iconSpaces,\n itemSpaces,\n maxItemSpaces,\n maxIconWidth,\n titleSpaces: {\n width: Math.min(maxWidth, this.measurement().width) - effMargin - effBorder,\n height: titleHeight\n }\n });\n return this;\n }\n\n /**\n * Returns the space occupied by the legend title\n *\n * @return {Object} Space occupied by title\n * @memberof Legend\n */\n getTitleSpace () {\n this._labelManager.setStyle(getSmartComputedStyle(selectElement('body'),\n `${this.config().classPrefix}-legend-title`));\n return this._labelManager.getOriSize(this.title().text ? this.title().text : '');\n }\n\n /**\n * Creates the title for the legend\n *\n * @param {DOM} container Container made for the title\n * @return {Selection} Title and it's node\n * @memberof Legend\n */\n renderTitle (container) {\n const { titleSpaces, border, padding, width } = this.measurement();\n const { borderStyle, borderColor } = this.config();\n return titleCreator(container, this.title(), {\n height: titleSpaces.height,\n width,\n border,\n padding,\n borderStyle,\n borderColor\n }, this.config());\n }\n\n /**\n * Render the legend with its title\n *\n * @param {DOM} mountPoint Point where the legend and title are to be appended\n * @return {Instance} Current instance of legend\n * @memberof Legend\n */\n render () {\n const firebolt = this.firebolt();\n const {\n classPrefix,\n borderStyle,\n borderColor\n } = this.config();\n const {\n maxWidth,\n maxHeight,\n width,\n height,\n margin,\n border\n } = this.measurement();\n const legendContainer = makeElement(selectElement(this.mount()), 'div', [1], `${classPrefix}-legend-box`);\n\n legendContainer.classed(`${classPrefix}-legend-box-${this._id}`, true);\n legendContainer.style('float', 'left');\n // set height and width\n legendContainer.style('width', `${Math.min(maxWidth, width) - margin * 2}px`)\n .style('height', `${Math.min(maxHeight, height) - margin * 2}px`)\n .style('margin', `${margin}px`)\n .style('border', `${border}px ${borderStyle} ${borderColor}`);\n this.legendContainer(legendContainer.node());\n\n // create title\n this.renderTitle(legendContainer);\n firebolt.createSelectionSet(this.data().map(d => d.id));\n return legendContainer;\n }\n /**\n *\n *\n * @param {*} data\n * @returns\n * @memberof StepLegend\n */\n getCriteriaFromData (data) {\n const fieldName = this.fieldName();\n const type = this.metaData().getData().schema[0].type;\n if (type === 'measure') {\n return {\n [fieldName]: data.range\n };\n }\n return [[fieldName], [data.value]];\n }\n}\n","import {\n LEFT,\n RIGHT,\n START,\n END,\n TOP,\n BOTTOM,\n HORIZONTAL,\n VERTICAL,\n CENTER,\n SHAPE,\n VALUE\n} from '../enums/constants';\n\nconst legendOrientation = {\n [HORIZONTAL]: {\n datasets: data => ({\n row: [1],\n column: data\n }),\n itemContainerMeasures: (measurement) => {\n const {\n itemSpaces,\n width\n } = measurement;\n return {\n row: {\n width: `${width}px`,\n padding: `${0}px`\n },\n column: {\n width: (d, i) => `${itemSpaces[i].width}px`,\n padding: `${0}px`\n }\n };\n },\n getStepSpacesInfo: (measurement) => {\n const { maxItemSpaces, height } = measurement;\n return {\n iconHeight: height,\n iconWidth: maxItemSpaces.width,\n stepPadding: {\n horizontal: true,\n vertical: false\n }\n };\n }\n },\n [VERTICAL]: {\n datasets: data => ({\n row: data,\n column: d => [d]\n }),\n itemContainerMeasures: (measurement, config) => {\n const {\n width\n } = measurement;\n const { padding } = config;\n return {\n row: {\n width: `${width}px`,\n padding: `${padding}px`\n },\n column: {\n width: `${width}px`,\n padding: `${0}px`\n }\n };\n },\n getStepSpacesInfo: (measurement) => {\n const { maxItemSpaces, width } = measurement;\n return {\n iconHeight: maxItemSpaces.height,\n iconWidth: width,\n stepPadding: {\n horizontal: false,\n vertical: true\n }\n };\n }\n }\n};\n\nexport const positionConfig = {\n [LEFT]: legendOrientation[VERTICAL],\n [RIGHT]: legendOrientation[VERTICAL],\n [TOP]: legendOrientation[HORIZONTAL],\n [BOTTOM]: legendOrientation[HORIZONTAL]\n};\n\nexport const alignmentMap = {\n [LEFT]: END,\n [RIGHT]: START,\n [TOP]: CENTER,\n [BOTTOM]: CENTER\n};\n\n// Reverses data for step legend\nexport const stepData = data => ({\n [LEFT]: data.reverse(),\n [RIGHT]: data.reverse(),\n [TOP]: data,\n [BOTTOM]: data\n});\n\n// Changes the item layout based on the position of the text\nexport const itemStack = {\n [LEFT]: [VALUE, SHAPE],\n [RIGHT]: [SHAPE, VALUE],\n [TOP]: [VALUE, SHAPE],\n [BOTTOM]: [SHAPE, VALUE]\n};\n","import { makeElement, selectElement, applyStyle } from 'muze-utils';\nimport { ICON_MAP } from './defaults';\nimport { positionConfig, alignmentMap, itemStack } from './position-config';\nimport {\n WIDTH,\n HEIGHT,\n CENTER,\n VALUE,\n RECT,\n LEFT,\n RIGHT\n} from '../enums/constants';\n\n/**\n *\n *\n * @param {*} container\n * @param {*} data\n * @param {*} legendInstance\n * @param {*} align\n * @return\n */\nexport const getItemContainers = (container, data, legendInstance) => {\n const measurement = legendInstance.measurement();\n const config = legendInstance.config();\n const {\n itemSpaces\n } = measurement;\n const {\n classPrefix,\n position\n } = config;\n const positionObj = positionConfig[position];\n const datasets = positionObj.datasets(data);\n const measures = positionObj.itemContainerMeasures(measurement, config);\n\n const rows = makeElement(container, 'div', datasets.row, `${classPrefix}-legend-row`);\n rows.style(HEIGHT, (d, i) => `${itemSpaces[i].height}px`);\n rows.style(WIDTH, measures.row.width);\n rows.style('padding', measures.row.padding);\n\n const columns = makeElement(rows, 'div', datasets.column, `${classPrefix}-legend-columns`);\n columns.style(WIDTH, measures.column.width);\n columns.style('padding', measures.column.padding);\n\n return columns;\n};\n\n/**\n *\n *\n * @param {*} container\n * @param {*} classPrefix\n * @param {*} data\n * @returns\n * @memberof DiscreteLegend\n */\nexport const createLegendSkeleton = (context, container, classPrefix, data) => {\n let gradWidth = 0;\n let gradHeight = 0;\n let maxGradHeight = 0;\n let maxGradWidth = 0;\n const measurement = context.measurement();\n const {\n margin,\n border,\n titleSpaces,\n width,\n height,\n maxWidth,\n maxHeight\n } = measurement;\n\n gradHeight = height - (titleSpaces.height + 2 * margin + 2 * border);\n gradWidth = width - (margin * 2 + border * 2);\n\n maxGradHeight = maxHeight - (titleSpaces.height + margin * 2 + border * 2);\n maxGradWidth = maxWidth - (margin * 2 + border * 2);\n\n let legendBody = makeElement(container, 'div', [1], `${classPrefix}-legend-body`);\n legendBody.select(`.${classPrefix}-legend-overflow`).remove();\n // Create a div with scroll when overflow\n if (maxGradWidth && maxGradWidth < gradWidth) {\n legendBody = legendBody.style(WIDTH, `${maxGradWidth}px`).style('overflow-x', 'scroll');\n }\n // Create a div with scroll when overflow\n if (maxGradHeight && maxGradHeight < gradHeight) {\n legendBody.style(HEIGHT, `${maxGradHeight}px`).style('overflow-y', 'scroll');\n }\n\n legendBody = makeElement(legendBody, 'div', [1], `${classPrefix}-legend-overflow`);\n\n legendBody.style(WIDTH, `${gradWidth}px`);\n legendBody.style(HEIGHT, `${gradHeight}px`);\n\n const legendItem = getItemContainers(legendBody, data, context);\n return { legendItem };\n};\n\n/**\n * Creates legend item based on alignment and text orientation\n *\n * @param {Selection} container Point where items are to be mounted\n * @return {Instance} Current instance\n * @memberof Legend\n */\nexport const createItemSkeleton = (context, container) => {\n const {\n classPrefix,\n item\n } = context.config();\n const textOrientation = item.text.orientation;\n\n const stack = itemStack[textOrientation];\n const itemSkeleton = makeElement(container, 'div', (d, i) => stack.map(e => [e, d[e], d.color, d.size,\n d.value, context.fieldName(), i]), `${classPrefix}-legend-item-info`);\n\n const alignClass = alignmentMap[textOrientation];\n\n itemSkeleton.classed(alignClass, true);\n return { itemSkeleton };\n};\n\n/**\n *\n *\n * @param {*} measureType\n * @param {*} stepColorCheck\n */\nexport const applyItemStyle = (item, measureType, stepColorCheck, context) => {\n const {\n padding,\n labelSpaces,\n iconSpaces,\n maxIconWidth\n } = context.measurement();\n const diff = stepColorCheck ? -padding * 2 : 0;\n\n if (item[0] === VALUE) {\n return `${labelSpaces[item[6]][measureType]}px`;\n }\n return `${measureType === 'width' && !stepColorCheck ? maxIconWidth : iconSpaces[item[6]][measureType] - diff}px`;\n};\n\n/**\n *\n *\n * @param {*} str\n * @returns\n */\nconst checkPath = (str) => {\n if (/^[mzlhvcsqta]\\s*[-+.0-9][^mlhvzcsqta]+/i.test(str) && /[\\dz]$/i.test(str) && str.length > 4) {\n return true;\n }\n return false;\n};\n\n/**\n *\n *\n * @param {*} d\n * @param {*} elem\n */\nconst createShape = function (d, elem, defaultIcon, width, height) {\n const groupElement = elem;\n // const { shape, size, update } = d;\n const size = d[3] || Math.min(width, height) * Math.PI;\n const shape = d[1] || defaultIcon;\n\n if (shape instanceof Promise) {\n shape.then((res) => {\n d.shape = res;\n return createShape(d, elem);\n });\n } else if (shape instanceof Element) {\n let newShape = shape.cloneNode(true);\n\n if (newShape.nodeName.toLowerCase() === 'img') {\n const src = newShape.src || newShape.href;\n newShape = document.createElementNS('http://www.w3.org/2000/svg', 'image');\n newShape.setAttribute('href', src);\n }\n const shapeElement = selectElement(newShape);\n shapeElement.attr('transform', `scale(${size / 100})`);\n return selectElement(groupElement.node().appendChild(newShape));\n } else if (typeof shape === 'string') {\n let pathStr;\n if (checkPath(shape)) {\n pathStr = shape;\n } else {\n pathStr = ICON_MAP(shape).size(size)();\n }\n return makeElement(groupElement, 'path', data => [data]).attr('d', pathStr);\n }\n d[1] = 'circle';\n return createShape(d, elem, 'circle');\n};\n\n/**\n * Returns the icon of the legend item\n *\n * @param {Object} datum Data property attached to the item\n * @param {number} width width of the item\n * @param {number} height height of the item\n * @return {Object|string} returns the path string or the string name of the icon\n * @memberof Legend\n */\nexport const getLegendIcon = (datum, width, height, defaultIcon) => {\n const icon = ICON_MAP(datum[1]);\n\n if (icon) {\n return icon.size(datum[3] || Math.min(width, height) * Math.PI);\n }\n return ICON_MAP(datum[3] ? 'circle' : defaultIcon).size(datum[3] || Math.min(width, height) * Math.PI);\n};\n\n/**\n *\n *\n */\nexport const renderIcon = (icon, container, datum, context) => {\n const {\n classPrefix,\n iconHeight,\n iconWidth,\n maxIconWidth,\n padding,\n color\n } = context;\n const svg = makeElement(container, 'svg', f => [f], `${classPrefix}-legend-icon-svg`)\n .attr(WIDTH, maxIconWidth)\n .attr(HEIGHT, iconHeight)\n .style(WIDTH, `${maxIconWidth}px`)\n .style(HEIGHT, `${iconHeight}px`);\n\n if (icon !== RECT) {\n const group = makeElement(svg, 'g', [datum[1]], `${classPrefix}-legend-icon`);\n createShape(datum, group, datum[3] ? 'circle' : 'square', iconWidth, iconHeight)\n .attr('transform', `translate(${maxIconWidth / 2 - padding} ${iconHeight / 2})`)\n .attr('fill', datum[2] || color);\n } else {\n makeElement(svg, RECT, [datum[1]], `${classPrefix}-legend-icon`)\n .attr('x', 0)\n .attr('y', 0)\n .attr(WIDTH, maxIconWidth)\n .attr(HEIGHT, iconHeight)\n .attr('fill', datum[2] || color);\n }\n};\n\n/**\n * Renders the items in the legend i.e, icon and text\n *\n * @param {DOM} container Point where item is to be mounted\n * @memberof Legend\n */\nexport const renderDiscreteItem = (context, container) => {\n const labelManager = context._labelManager;\n const {\n item,\n classPrefix\n } = context.config();\n const {\n maxIconWidth,\n padding\n } = context.measurement();\n const {\n width: iconWidth,\n height: iconHeight,\n color,\n className\n } = item.icon;\n\n const textOrientation = item.text.orientation;\n const formatter = item.text.formatter;\n\n labelManager.useEllipsesOnOverflow(true);\n applyStyle(container, {\n width: d => applyItemStyle(d, WIDTH, false, context),\n height: d => applyItemStyle(d, HEIGHT, false, context),\n 'text-align': CENTER,\n padding: `${padding}px`\n });\n\n labelManager.setStyle(context._computedStyle);\n container.each(function (d, i) {\n if (d[0] === VALUE) {\n selectElement(this).text(formatter(d[1]))\n .style(`padding-${textOrientation === RIGHT ? LEFT : RIGHT}`, '0px');\n } else {\n // const icon = getLegendIcon(d, iconWidth, iconHeight, type);\n selectElement(this).classed(`${classPrefix}-${className}`, true);\n selectElement(this).classed(`${classPrefix}-${className}-${i}`, true);\n renderIcon('circle', selectElement(this), d, {\n classPrefix,\n iconWidth,\n // iconWidth: 2 * Math.sqrt(d[3] / Math.PI) || iconWidth,\n iconHeight,\n maxIconWidth,\n padding,\n color\n });\n }\n });\n};\n\n/**\n* Renders the items in the legend i.e, icon and text\n*\n* @param {DOM} container Point where item is to be mounted\n* @memberof Legend\n*/\nexport const renderStepItem = (context, container) => {\n const labelManager = context._labelManager;\n const {\n item,\n position,\n classPrefix\n } = context.config();\n const {\n maxItemSpaces,\n maxIconWidth,\n padding\n } = context.measurement();\n const {\n width,\n height,\n color\n } = item.icon;\n const {\n formatter\n } = item.text;\n\n labelManager.useEllipsesOnOverflow(true);\n const { iconHeight, iconWidth, stepPadding } = positionConfig[position].getStepSpacesInfo({\n maxItemSpaces, height, width\n });\n\n applyStyle(container, {\n width: d => applyItemStyle(d, WIDTH, stepPadding.horizontal, context),\n height: d => applyItemStyle(d, HEIGHT, stepPadding.vertical, context),\n 'text-align': 'center',\n padding: `${padding}px`\n });\n\n labelManager.setStyle(context._computedStyle);\n container.each(function (d) {\n if (d[0] === VALUE) {\n selectElement(this).text(formatter(d[1]));\n } else {\n renderIcon(RECT, selectElement(this), d, {\n classPrefix,\n iconWidth,\n iconHeight,\n maxIconWidth,\n color\n });\n }\n });\n};\n","import SimpleLegend from './simple-legend';\nimport { DISCRETE, LEFT, SIZE } from '../enums/constants';\nimport { getScaleInfo } from './legend-helper';\nimport { createLegendSkeleton, createItemSkeleton, renderDiscreteItem } from './renderer';\nimport '../styles.scss';\n\n/**\n * Creates a Legend from the axes of a canvas\n *\n * @param {Object} dependencies : legend data\n * @class Legend\n */\nexport default class DiscreteLegend extends SimpleLegend {\n\n /**\n * Initializes an instance of the class\n *\n * @static\n * @param {Object} dependencies Set of dependencies required by the legend\n * @return {Instance} returns a new instance of Legend\n * @memberof Legend\n */\n static create (dependencies) {\n return new DiscreteLegend(dependencies);\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof DiscreteLegend\n */\n static type () {\n return DISCRETE;\n }\n\n /**\n *\n *\n * @param {*} scale\n * @returns\n * @memberof DiscreteLegend\n */\n dataFromScale (scale) {\n const { scaleType, domain, scaleFn } = getScaleInfo(scale);\n let domainForLegend = [...new Set(domain)];\n const type = this.metaData().getData().schema[0].type;\n\n domainForLegend = domainForLegend.map((ele, i) => {\n let value = 0;\n let range = 0;\n if (type === 'measure') {\n value = (+domainForLegend[i]).toFixed(0);\n const nextVal = domainForLegend[i + 1] ? +domainForLegend[i + 1] : +value;\n range = [value, nextVal.toFixed(0)];\n } else {\n value = domainForLegend[i];\n range = [domainForLegend[i]];\n }\n return {\n [scaleType]: scale[scaleFn](ele),\n value,\n id: i,\n range\n };\n }).filter(d => d.value !== null);\n\n domainForLegend = scaleType === SIZE ? domainForLegend.sort((a, b) => a[scaleType] - b[scaleType])\n : domainForLegend;\n return domainForLegend;\n }\n\n /**\n * Render the legend with its title\n *\n * @param {DOM} mountPoint Point where the legend and title are to be appended\n * @return {Instance} Current instance of legend\n * @memberof Legend\n */\n render () {\n const firebolt = this.firebolt();\n const data = this.data();\n const { classPrefix } = this.config();\n const legendContainer = super.render(this.mount());\n // create Legend\n const { legendItem } = createLegendSkeleton(this, legendContainer, classPrefix, data);\n const { itemSkeleton } = createItemSkeleton(this, legendItem);\n renderDiscreteItem(this, itemSkeleton);\n legendContainer.selectAll('div').style('float', LEFT);\n firebolt.mapActionsAndBehaviour();\n firebolt.createSelectionSet(this.data().map(d => d.id));\n return legendContainer;\n }\n}\n","import { makeElement, applyStyle } from 'muze-utils';\nimport { ContinousAxis } from '@chartshq/muze-axis';\nimport { BOTTOM, RIGHT } from '../enums/constants';\nimport { ALIGN } from './defaults';\nimport '../styles.scss';\n\n/**\n *\n *\n * @param {*} data\n * @returns\n */\nexport const getGradientDomain = (data) => {\n if (typeof data[0].value === 'number') {\n return data.reduce((accumulator, currentValue) =>\n [Math.min(currentValue.value, accumulator[0]), Math.max(currentValue.value, accumulator[1])],\n [Number.MAX_VALUE, Number.MIN_VALUE]);\n }\n return data.map(e => e.value);\n};\n\n/**\n *\n *\n * @param {*} container\n * @param {*} data\n * @param {*} domain\n * @returns\n */\nexport const makeLinearGradient = (container, data, domain) => {\n const defs = makeElement(container, 'defs', [1]);\n const linearGradient = makeElement(defs, 'linearGradient', [1])\n .attr('id', 'linear-gradient')\n .attr('x1', '0%')\n .attr('y2', '0%');\n makeElement(linearGradient, 'stop', data, 'stop-gradient')\n .attr('offset', d => `${(d.value - domain[0]) * 100 / (domain[1] - domain[0])}%`)\n .attr('stop-color', d => d.color);\n return linearGradient;\n};\n\n/**\n * Creates an axis cell with a linear axis for computing space and\n * creating gradient legend\n *\n * @return {AxisCell} Instance of Axis Cell for the gradient axis\n * @memberof Legend\n */\nexport const createAxis = (context) => {\n const data = context.data();\n const { align } = context.config();\n const AxisCell = context._cells.AxisCell;\n const newAxis = new ContinousAxis({\n id: `legend-${context._id}`,\n orientation: align === ALIGN.VERTICAL ? RIGHT : BOTTOM,\n style: context._computedStyle,\n nice: false,\n showAxisName: false,\n tickValues: data.map(d => d.value),\n fixedBaseline: false\n }, { labelManager: context._labelManager });\n\n newAxis.domain(getGradientDomain(data));\n newAxis.range([1, 1]);\n return new AxisCell().source(newAxis).config({\n margin: { left: 0, bottom: 0, top: 0, right: 0 }\n });\n};\n\n/**\n *\n *\n * @param {*} container\n * @param {*} data\n * @param {*} classPrefix\n * @returns\n * @memberof GradientLegend\n */\nconst createLegendSkeleton = (container, classPrefix, data) => {\n const domain = getGradientDomain(data);\n const legendContainer = makeElement(container, 'div', [1], `${classPrefix}-legend-body`);\n const legendGradSvg = makeElement(legendContainer, 'svg', [1], `${classPrefix}-gradient`);\n const legendGradCont = makeElement(legendGradSvg, 'g', [1], `${classPrefix}-gradient-group`);\n const linearGradient = makeLinearGradient(legendGradSvg, data, domain);\n const legendRect = makeElement(legendGradCont, 'rect', [1], `${classPrefix}-gradient-rect`);\n\n return {\n legendContainer,\n legendGradCont,\n legendGradSvg,\n linearGradient,\n legendRect\n };\n};\n\n/**\n * Renders the axis for the gradient\n *\n * @param {Selection} container Point where axis is to be mounted\n * @param {number} height Height for axis\n * @param {number} width Width for axis\n * @memberof Legend\n */\nexport const renderAxis = (context, container, height, width) => {\n const axis = context.axis();\n\n axis.setAvailableSpace(width, height);\n axis.render(container.node());\n};\n\n/**\n * Renders gradient legends\n *\n * @param {Selection} container Point where the legend is to be appended\n * @memberof GradientLegend\n */\nexport const renderGradient = (context, container) => {\n let gradHeight = 0;\n let gradWidth = 0;\n const {\n align,\n classPrefix,\n item\n } = context.config();\n const data = context.data();\n // Create the skeleton for the legend\n const {\n legendContainer,\n legendGradSvg,\n legendGradCont,\n linearGradient,\n legendRect\n } = createLegendSkeleton(container, classPrefix, data);\n const labelDim = context.axis().source().getAxisDimensions().tickLabelDim;\n const {\n padding,\n margin,\n border,\n titleSpaces,\n maxHeight,\n maxWidth,\n height,\n width\n } = context.measurement();\n const gradientDimensions = {};\n\n gradHeight = Math.floor(height - (titleSpaces.height + 2 * margin + 2 * border));\n gradWidth = Math.floor(width - (margin * 2 + border * 2));\n\n if (align === ALIGN.HORIZONTAL) {\n gradientDimensions.height = item.icon.height;\n gradientDimensions.width = gradWidth - 2 * padding - labelDim.width / 2;\n linearGradient.attr('x2', '100%').attr('y1', '0%');\n legendGradCont.attr('transform', `translate( ${labelDim.width / 2} 0)`);\n renderAxis(context, legendContainer, gradHeight - item.icon.height - padding, gradWidth - 2 * padding - 1);\n legendContainer.classed(`${classPrefix}-overflow-x`, width > maxWidth);\n\n applyStyle(legendContainer, {\n height: `${height}px`,\n width: `${Math.min(width, maxWidth)}px`,\n padding: `${padding}px`\n });\n\n legendRect.attr('height', gradientDimensions.height);\n legendRect.attr('width', gradientDimensions.width - labelDim.width / 2);\n } else {\n gradientDimensions.height = gradHeight - 2 * padding - labelDim.height / 2;\n gradientDimensions.width = item.icon.width;\n linearGradient.attr('x2', '0%').attr('y1', '100%');\n legendGradCont.attr('transform', `translate(0 ${labelDim.height / 2})`);\n renderAxis(context, legendContainer, gradHeight - 2 * padding - 1, gradWidth - item.icon.width - padding * 2);\n legendContainer.classed(`${classPrefix}-overflow-y`, height > maxHeight);\n applyStyle(legendContainer, {\n height: `${Math.min(height, maxHeight)}px`,\n width: `${width}px`,\n padding: `${padding}px`\n });\n legendRect.attr('height', gradientDimensions.height - labelDim.height / 2);\n legendRect.attr('width', gradientDimensions.width);\n }\n\n // Apply Styles to the legend plot area\n applyStyle(legendGradSvg, {\n height: `${gradientDimensions.height}px`,\n width: `${gradientDimensions.width}px`\n });\n\n // Apply styles to the legend rect\n applyStyle(legendRect, {\n fill: 'url(#linear-gradient)'\n });\n legendGradSvg.attr('height', gradientDimensions.height);\n legendGradSvg.attr('width', gradientDimensions.width);\n\n context.measurement({\n gradientDimensions\n });\n context._legendGradientSvg = legendGradSvg;\n return context;\n};\n","import SimpleLegend from './simple-legend';\nimport { getScaleInfo, getInterpolatedData } from './legend-helper';\nimport { GRADIENT, LEFT, SIZE } from '../enums/constants';\nimport { renderGradient, createAxis } from './gradient-helper';\nimport '../styles.scss';\n\n/**\n * Creates a Legend from the axes of a canvas\n *\n * @param {Object} dependencies : legend data\n * @class Legend\n */\nexport default class GradientLegend extends SimpleLegend {\n\n /**\n * Initializes an instance of the class\n *\n * @static\n * @param {Object} dependencies Set of dependencies required by the legend\n * @return {Instance} returns a new instance of Legend\n * @memberof Legend\n */\n static create (dependencies) {\n return new GradientLegend(dependencies);\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof GradientLegend\n */\n static type () {\n return GRADIENT;\n }\n\n /**\n *\n *\n * @param {*} axis\n * @returns\n * @memberof GradientLegend\n */\n axis (...axis) {\n if (axis.length) {\n this._axis = axis[0];\n return this;\n }\n return this._axis;\n }\n\n /**\n *\n *\n * @param {*} scale\n * @returns\n * @memberof GradientLegend\n */\n dataFromScale (scale) {\n let domainForLegend = [];\n const { scaleType, domain, steps, scaleFn } = getScaleInfo(scale);\n\n if (steps instanceof Array) {\n if (domain[0] < steps[0]) {\n domainForLegend[0] = domain[0];\n }\n domainForLegend = [...domainForLegend, ...steps];\n if (domain[domain.length - 1] > steps[steps.length - 1]) {\n domainForLegend.push(domain[1]);\n }\n } else {\n domainForLegend = getInterpolatedData(domain, steps - 1);\n }\n domainForLegend = [...new Set(domainForLegend)].sort((a, b) => a - b);\n\n return domainForLegend.map((ele, i) => {\n const value = domainForLegend[i];\n return {\n [scaleType]: scaleType === SIZE ? scale[scaleFn](ele) * scale.getScaleFactor()\n : scale[scaleFn](Math.floor(ele)),\n value: +value.toFixed(2),\n id: i\n };\n }).filter(d => d.value !== null);\n }\n\n /**\n *\n *\n * @param {*} effPadding\n * @param {*} align\n * @return\n * @memberof Legend\n */\n getLabelSpaces (effPadding) {\n this.config({\n item: {\n text: {\n orientation: this.config().position\n }\n }\n });\n const axis = createAxis(this);\n const axisSpace = axis.getLogicalSpace();\n const space = { width: axisSpace.width - effPadding, height: axisSpace.height - effPadding };\n const axisDomainLength = axis.source().domain().length;\n const labelSpaces = new Array(axisDomainLength).fill(space);\n\n this.axis(axis);\n return labelSpaces;\n }\n\n /**\n *\n *\n * @returns\n * @memberof GradientLegend\n */\n getDrawingContext () {\n return {\n svgContainer: this._legendGradientSvg\n };\n }\n\n /**\n * Render the legend with its title\n *\n * @param {DOM} mountPoint Point where the legend and title are to be appended\n * @return {Instance} Current instance of legend\n * @memberof Legend\n */\n render () {\n const firebolt = this.firebolt();\n const legendContainer = super.render(this.mount());\n // create Legend\n renderGradient(this, legendContainer);\n legendContainer.selectAll('div').style('float', LEFT);\n firebolt.mapActionsAndBehaviour();\n firebolt.createSelectionSet(this.data().map(d => d.id));\n return legendContainer;\n }\n /**\n *\n *\n * @param {*} data\n * @returns\n * @memberof SimpleLegend\n */\n getCriteriaFromData (data) {\n return [[this.fieldName()], [data.value]];\n }\n}\n","import SimpleLegend from './simple-legend';\nimport {\n getScaleInfo,\n getInterpolatedData,\n getDomainBounds\n} from './legend-helper';\nimport {\n createLegendSkeleton,\n createItemSkeleton,\n renderStepItem\n} from './renderer';\nimport { STEP, RECT, LEFT, SIZE, UPPER, LOWER } from '../enums/constants';\nimport { stepData } from './position-config';\nimport '../styles.scss';\n\n/**\n * Creates a Legend from the axes of a canvas\n *\n * @param {Object} dependencies : legend data\n * @class Legend\n */\nexport default class StepLegend extends SimpleLegend {\n\n /**\n * Initializes an instance of the class\n *\n * @static\n * @param {Object} dependencies Set of dependencies required by the legend\n * @return {Instance} returns a new instance of Legend\n * @memberof Legend\n */\n static create (dependencies) {\n return new StepLegend(dependencies);\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof StepLegend\n */\n static type () {\n return STEP;\n }\n\n /**\n *\n *\n * @param {*} scale\n * @returns\n * @memberof StepLegend\n */\n dataFromScale (scale) {\n let domainLeg = [];\n const { scaleType, domain, steps, scaleFn } = getScaleInfo(scale);\n\n const { formatter } = this.config();\n const domainBounds = {\n lower: null, upper: null\n };\n\n if (steps instanceof Array) {\n if (domain[0] < steps[0]) {\n domainBounds.lower = [`${formatter.bounds.lower} ${steps[0]}`];\n }\n domainLeg = [...domainLeg, ...steps];\n if (domain[domain.length - 1] > steps[steps.length - 1]) {\n domainBounds.upper = [`${formatter.bounds.upper} ${steps[steps.length - 1]}`];\n }\n } else {\n domainLeg = getInterpolatedData(domain, steps);\n }\n\n domainLeg = [...new Set(domainLeg)].sort((a, b) => a - b);\n domainLeg = domainLeg.map((ele, i) => {\n let value = null;\n if (i < domainLeg.length - 1) {\n value = `${(ele.toFixed(1))} - ${(+domainLeg[i + 1].toFixed(1))}`;\n }\n return {\n [scaleType]: scaleType === SIZE ? scale[scaleFn](ele) * scale.getScaleFactor() : scale[scaleFn](ele),\n value,\n id: i + 1,\n range: [ele, domainLeg[i + 1]]\n };\n }).filter(d => d.value !== null);\n\n if (domainBounds.lower) {\n const lowerBounds = getDomainBounds(LOWER, { scale, scaleFn, scaleType },\n { domain, steps, domainBounds });\n domainLeg = [lowerBounds, ...domainLeg];\n }\n if (domainBounds.upper) {\n const upperBounds = getDomainBounds(UPPER, { scale, scaleFn, scaleType },\n { domain, steps, domainBounds, domainLeg });\n domainLeg = [...domainLeg, upperBounds];\n }\n return domainLeg;\n }\n\n /**\n *\n *\n * @param {*} effPadding\n * @param {*} align\n * @return\n * @memberof Legend\n */\n getLabelSpaces (effPadding, align) {\n this.config({\n item: {\n text: {\n orientation: this.config().position\n }\n }\n });\n return super.getLabelSpaces(effPadding, align);\n }\n\n /**\n *\n *\n * @return\n * @memberof Legend\n */\n elemType () {\n return RECT;\n }\n\n /**\n * Render the legend with its title\n *\n * @param {DOM} mountPoint Point where the legend and title are to be appended\n * @return {Instance} Current instance of legend\n * @memberof Legend\n */\n render () {\n const firebolt = this.firebolt();\n const { classPrefix, position } = this.config();\n const data = stepData(this.data())[position];\n\n const legendContainer = super.render(this.mount());\n\n // create Legend\n const { legendItem } = createLegendSkeleton(this, legendContainer, classPrefix, data);\n const { itemSkeleton } = createItemSkeleton(this, legendItem);\n\n renderStepItem(this, itemSkeleton);\n legendContainer.selectAll('div').style('float', LEFT);\n firebolt.mapActionsAndBehaviour();\n firebolt.createSelectionSet(this.data().map(d => d.id));\n return legendContainer;\n }\n\n /**\n *\n *\n * @param {*} data\n * @returns\n * @memberof StepLegend\n */\n getCriteriaFromData (data) {\n const fieldName = this.fieldName();\n return {\n [fieldName]: data.range\n };\n }\n}\n","import { GradientLegend, DiscreteLegend, StepLegend } from '@chartshq/muze-legend';\n\n/**\n * Contants to be used as attr\n */\nexport const ROWS = 'rows';\nexport const COLUMNS = 'columns';\nexport const DATA = 'data';\nexport const COLOR = 'color';\nexport const SHAPE = 'shape';\nexport const SIZE = 'size';\nexport const DETAIL = 'detail';\nexport const LAYERS = 'layers';\nexport const TRANSFORM = 'transform';\nexport const INITIALIZED = 'isInitialized';\nexport const SOURCE = 'source';\nexport const WIDTH = 'width';\nexport const HEIGHT = 'height';\nexport const PADDING = 'padding';\nexport const BORDER = 'border';\nexport const MARGIN = 'margin';\nexport const CONFIG = 'config';\nexport const MOUNT = 'mount';\nexport const CANVAS_UPDATED = 'canvasUpdated';\nexport const CLASSPREFIX = 'classPrefix';\nexport const POLICIES = '_policies';\nexport const LEGEND = 'legend';\nexport const TITLE = 'title';\nexport const SUB_TITLE = 'subtitle';\nexport const RESOLVE = 'resolve';\nexport const DISCRETE = 'discrete';\nexport const STEP_COLOR = 'step-color';\nexport const GRADIENT = 'gradient';\nexport const LINEAR = 'linear';\nexport const ORDINAL = 'ordinal';\n\nexport const TITLE_TEMPLATE_NOT_ALLOWED_TAGS = [\n 'script',\n 'style'\n];\n\nexport const LEGEND_TYPE_MAP = {\n [`${ORDINAL}-${true}-${COLOR}`]: DiscreteLegend,\n [`${ORDINAL}-${true}-${SIZE}`]: DiscreteLegend,\n [`${ORDINAL}-${true}-${SHAPE}`]: DiscreteLegend,\n [`${ORDINAL}-${false}-${COLOR}`]: DiscreteLegend,\n [`${ORDINAL}-${false}-${SHAPE}`]: DiscreteLegend,\n [`${ORDINAL}-${false}-${SIZE}`]: DiscreteLegend,\n [`${LINEAR}-${false}-${SIZE}`]: DiscreteLegend,\n [`${LINEAR}-${true}-${SIZE}`]: DiscreteLegend,\n [`${LINEAR}-${false}-${SHAPE}`]: DiscreteLegend,\n [`${LINEAR}-${true}-${COLOR}`]: StepLegend,\n [`${LINEAR}-${false}-${COLOR}`]: GradientLegend\n};\n\nexport const LEFT = 'left';\nexport const RIGHT = 'right';\nexport const BOTTOM = 'bottom';\nexport const TOP = 'top';\nexport const GROUP = 'group';\nexport const LAYOUT = 'layout';\nexport const RETINAL = 'retinal';\nexport const DIMENSION = 'dimension';\nexport const MEASURE = 'measure';\nexport const VERTICAL = 'vertical';\nexport const HORIZONTAL = 'horizontal';\n\n","import { ComposedVars, SimpleVariable } from '@chartshq/visual-group';\nimport { TITLE_TEMPLATE_NOT_ALLOWED_TAGS } from './constants';\n\n/**\n * This method creates a new composed variable instance from multiple variables.\n * @param {Array} vars Variable names\n * @return {ComposedVars} Instance of composed variable\n */\nexport const share = (...vars) => new ComposedVars(...vars.map(variable => new SimpleVariable(variable)));\n\n/**\n *\n *\n * @param {*} node\n * @returns\n */\nfunction treeShakeNode (node) {\n if (node.nodeType !== Node.ELEMENT_NODE) { return; }\n\n if (TITLE_TEMPLATE_NOT_ALLOWED_TAGS.indexOf(node.tagName.toLowerCase()) !== -1) {\n node.parentNode.removeChild(node);\n } else {\n for (const childNode of node.childNodes) {\n treeShakeNode(childNode);\n }\n }\n}\n\n/**\n * A string template tagged function which sanitizes input html formatted\n * string according to the allowed html tags.\n *\n * @param {Array.} strings - The string parts of the template.\n * @param {Array} exps - The list of evaluated expression values.\n * @return {Function} Returns a function which returns the sanitized html string.\n */\nexport function html (strings, ...exps) {\n let htmlCode = '';\n const expLn = exps.length;\n let i = 0;\n\n for (; i < expLn; ++i) {\n htmlCode += strings[i] + exps[i];\n }\n htmlCode += strings[i];\n\n const frag = document.createDocumentFragment();\n const wrapper = document.createElement('div');\n\n frag.appendChild(wrapper);\n wrapper.innerHTML = htmlCode;\n\n treeShakeNode(wrapper);\n const { innerHTML } = wrapper;\n\n return () => innerHTML;\n}\n","import { mergeRecursive } from 'muze-utils';\n\nconst defaultPolicy = (registrableComponents) => {\n const aliases = registrableComponents.map(comp => comp.alias());\n return {\n behaviours: {\n '*': (propagationPayload) => {\n const propagationCanvas = propagationPayload.sourceCanvas;\n return propagationCanvas ? aliases.indexOf(propagationCanvas) !== -1 : true;\n }\n }\n };\n};\n\nclass ActionModel {\n constructor () {\n this._registrableComponents = [];\n }\n\n registerPhysicalActions (action) {\n const canvases = this._registrableComponents;\n\n canvases.forEach((canvas) => {\n canvas.once('canvas.updated').then((args) => {\n const matrix = args.client.composition().visualGroup.matrixInstance().value;\n matrix.each(cell => cell.valueOf().firebolt().registerPhysicalActions(action));\n });\n });\n return this;\n }\n\n registerBehaviouralActions (...actions) {\n const canvases = this._registrableComponents;\n\n canvases.forEach((canvas) => {\n canvas.once('canvas.updated').then(() => {\n const matrix = canvas.composition().visualGroup.matrixInstance().value;\n matrix.each(cell => cell.valueOf().firebolt().registerBehaviouralActions(...actions));\n });\n });\n return this;\n }\n\n /**\n *\n *\n * @param {*} map\n * @returns\n * @memberof ActionModel\n */\n registerPhysicalBehaviouralMap (map) {\n const canvases = this._registrableComponents;\n\n canvases.forEach((canvas) => {\n canvas.once('canvas.updated').then((args) => {\n const matrix = args.client.composition().visualGroup.matrixInstance().value;\n matrix.each(cell => cell.valueOf().firebolt().registerPhysicalBehaviouralMap(map));\n });\n });\n return this;\n }\n\n registerPropagationBehaviourMap (map) {\n const canvases = this._registrableComponents;\n\n canvases.forEach((canvas) => {\n canvas.once('canvas.updated').then((args) => {\n const matrix = args.client.composition().visualGroup.matrixInstance().value;\n matrix.each(cell => cell.valueOf().firebolt().registerPropagationBehaviourMap(map));\n });\n });\n return this;\n }\n\n mapSideEffects (map) {\n const canvases = this._registrableComponents;\n\n canvases.forEach((canvas) => {\n canvas.once('canvas.updated').then(() => {\n const matrix = canvas.composition().visualGroup.matrixInstance().value;\n matrix.each(cell => cell.valueOf().firebolt().mapSideEffects(map));\n });\n });\n return this;\n }\n\n for (...components) {\n this._registrableComponents = components;\n return this;\n }\n\n registerSideEffects (...sideEffects) {\n const registrableComponents = this._registrableComponents;\n\n registrableComponents.forEach((canvas) => {\n canvas.once('canvas.updated').then((args) => {\n const matrix = args.client.composition().visualGroup.matrixInstance().value;\n matrix.each(cell => cell.valueOf().firebolt().registerSideEffects(sideEffects));\n });\n });\n\n return this;\n }\n\n dissociateBehaviour (...maps) {\n const registrableComponents = this._registrableComponents;\n\n registrableComponents.forEach((canvas) => {\n canvas.once('canvas.updated').then((args) => {\n const matrix = args.client.composition().visualGroup.matrixInstance().value;\n matrix.each((cell) => {\n maps.forEach(val => cell.valueOf().firebolt().dissociateBehaviour(val[0], val[1]));\n });\n });\n });\n\n return this;\n }\n\n dissociateSideEffect (...maps) {\n const registrableComponents = this._registrableComponents;\n\n registrableComponents.forEach((canvas) => {\n canvas.once('canvas.updated').then((args) => {\n const matrix = args.client.composition().visualGroup.matrixInstance().value;\n matrix.each((cell) => {\n maps.forEach(val => cell.valueOf().firebolt().dissociateSideEffect(val[0], val[1]));\n });\n });\n });\n\n return this;\n }\n\n enableCrossInteractivity (policy = {}) {\n const registrableComponents = this._registrableComponents;\n const mergedPolicy = mergeRecursive(mergeRecursive({}, defaultPolicy(registrableComponents)), policy);\n\n registrableComponents.forEach((canvas) => {\n canvas.firebolt().crossInteractionPolicy(mergedPolicy);\n });\n\n return this;\n }\n}\n\nexport const actionModel = (() => new ActionModel())();\n","export const DEFAULT_CONFIG = {\n classPrefix: 'muze',\n interaction: {\n sideEffect: 'individual'\n },\n legend: {\n position: 'right',\n color: {\n show: true,\n padding: 1,\n margin: 3,\n border: 1,\n height: 20,\n width: 20\n },\n shape: {\n show: true,\n padding: 1,\n margin: 3,\n border: 1,\n height: 20,\n width: 20\n },\n size: {\n show: true,\n padding: 1,\n margin: 3,\n border: 1,\n height: 20,\n width: 20\n }\n },\n showHeaders: false,\n minWidth: 100,\n minHeight: 100,\n border: {\n style: 'solid',\n color: '#d6d6d6',\n width: 2,\n collapse: true,\n spacing: 0\n },\n autoGroupBy: {\n disabled: false\n }\n};\n","/**\n * @module\n * This is the global options semantics based on which setters getters are created and reactivity is initiated.\n * Format\n * PROPERTRY_NAME: {\n * value: // default value of the property,\n * meta: {\n * typeCheck: // The setter value will be checked using this. If the value is function then the setter value\n * // is passed as args.\n * typeExpected: // The output of typecheck action will be tested against this. Truthy value will set the\n * // value to the setter\n * sanitizaiton: // Need for sanitization before type is checked\n * }\n * }\n */\n\nimport { intSanitizer, mergeRecursive, DataModel } from 'muze-utils';\nimport { DEFAULT_CONFIG } from './defaults';\n\nexport default {\n data: {\n value: null,\n meta: {\n typeCheck: d => d instanceof DataModel\n }\n },\n width: {\n value: 0,\n meta: {\n sanitization: intSanitizer,\n typeCheck: Number.isInteger\n }\n },\n height: {\n value: 0,\n meta: {\n sanitization: intSanitizer,\n typeCheck: Number.isInteger\n }\n },\n minUnitWidth: {\n value: 50,\n meta: {\n sanitization: intSanitizer,\n typeCheck: Number.isInteger\n }\n },\n minUnitHeight: {\n value: 50,\n meta: {\n sanitization: intSanitizer,\n typeCheck: Number.isInteger\n }\n },\n config: {\n value: null,\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Object',\n sanitization: (config, oldConfig) => {\n const oldConf = mergeRecursive({}, oldConfig);\n const defConfig = mergeRecursive(oldConf, DEFAULT_CONFIG);\n const newConf = mergeRecursive(defConfig, config);\n return newConf;\n }\n\n }\n }\n};\n","/**\n * This file exports constants that will be used to\n * create the state store of the table layout.\n */\n/**\n * The index of top, bottom and center in the matrix\n */\nexport const VIEW_INDEX = {\n top: 0,\n center: 1,\n bottom: 2\n};\n\n/**\n * The width of the grid suppied by the user.\n */\nexport const GRID_WIDTH = 'width';\n\n/**\n * The height of the grid supplied by the user.\n */\nexport const GRID_HEIGHT = 'height';\n\n/**\n * The border for the grid\n */\nexport const BORDER = 'border';\n\n /**\n * The index of the first visible row in view matrix.\n */\nexport const ROW_POINTER = 'rowPointer';\n\n/**\n * The index of the first visible column in the view matrix.\n */\nexport const COLUMN_POINTER = 'columnPointer';\n\n/**\n * Flag to specify whether row sizes should be equal.\n */\nexport const ROW_SIZE_IS_EQUAL = 'isRowSizeEqual';\n\n/**\n * Flag to specify whether column sizes are equal.\n */\nexport const COLUMN_SIZE_IS_EQUAL = 'isColumnSizeEqual';\n\n/**\n * Field to store an array an of the widths of visible columns.\n * @computed\n */\nexport const COLUMN_WIDTHS = 'visibleColumnWidths';\n\n/**\n * Field to store an array of heights of visible rows.\n * @computed\n */\nexport const ROW_HEIGHTS = 'visibleRowHeights';\n\n/**\n * Field to store the width of the left matrix.\n * @computed\n */\nexport const LEFT_MATRIX_WIDTH = 'leftMatrixWidth';\n\n/**\n * Field to store the width of the right matrix.\n * @computed\n */\nexport const RIGHT_MATRIX_WIDTH = 'rightMatrixWidth';\n\n/**\n * Field to store the height of the top matrix.\n * @computed\n */\nexport const TOP_MATRIX_HEIGHT = 'topMatrixHeight';\n\n/**\n * Field to store the height of the bottom matrix.\n * @computed\n */\nexport const BOTTOM_MATRIX_HEIGHT = 'bottomMatrixHeight';\n\n/**\n * The dom element to render the layout inside.\n */\nexport const MOUNT_POINT = 'mount';\n\n/**\n * The id attribute of the left table element.\n */\nexport const LEFT_TABLE_ID = 'grid-left';\n\n/**\n * The id attribute of the right table element.\n */\nexport const RIGHT_TABLE_ID = 'grid-right';\n\n/**\n * The id attribute of the top table.\n */\nexport const TOP_TABLE_ID = 'grid-top';\n\n/**\n * The id attribute of the bottom table.\n */\nexport const BOTTOM_TABLE_ID = 'grid-bottom';\n\n/**\n * The id attribute of the center table.\n */\nexport const CENTER_TABLE_ID = 'grid-center';\n\n/**\n * The id attribute of the top div.\n */\nexport const TOP_DIV_ID = 'muze-div-top';\n\n/**\n * The id attribute of the bottom div.\n */\nexport const BOTTOM_DIV_ID = 'muze-div-bottom';\n\n/**\n * The id attribute of the center div.\n */\nexport const CENTER_DIV_ID = 'muze-div-center';\n\n/**\n * Field that indicates if the row configuration has changed\n */\nexport const HAVE_ROWS_CHANGED = 'haveRowsChanged';\n\n/**\n * Field that indicates if the column configuration has changed\n */\nexport const HAVE_COLUMNS_CHANGED = 'haveColumnsChanged';\n\n/**\n * Field that indicates if the values configuration for the center matrix has changed\n */\nexport const HAVE_VALUES_CHANGED = 'haveValuesChanged';\n\n/**\n * Field that indicates the width of row matrix\n */\nexport const ROW_MATRIX_WIDTH = 'rowMatrixWidth';\n\n/**\n * Field that indicates the height of row matrix\n */\nexport const COLUMN_MATRIX_HEIGHT = 'columnMatrixHeight';\n\n/**\n * Field that indicates the unit width of layout\n */\nexport const UNIT_WIDTH = 'unitWidth';\n\n/**\n * Field that indicates the unit height of layout\n */\nexport const UNIT_HEIGHT = 'unitHeight';\n\n/**\n * Field that indicates the style object\n */\nexport const STYLE = 'style';\n\n/**\n * Field that indicates the color configuration\n */\nexport const COLOR = 'color';\n\n/**\n * Field that indicates width\n */\nexport const WIDTH = 'width';\n\n/**\n * Field that indicates collpase property for border\n */\nexport const COLLAPSE = 'collapse';\n\n/**\n * Field that indicates spacing property for border\n */\nexport const SPACING = 'spacing';\n\n/**\n * Field that indicates spacing property for border\n */\nexport const DISTRIBUTION = 'distribution';\n\n/**\n * Field that indicates spacing property for border\n */\nexport const GUTTERSPACE = 'gutterSpace';\n\n/**\n * Field that indicates spacing property for border\n */\nexport const BREAK_PAGE = 'breakPage';\n\n/**\n * Field that indicates spacing property for border\n */\nexport const SHOW_ROW_BORDERS = 'showRowBorders';\n\n/**\n * Field that indicates spacing property for border\n */\nexport const SHOW_COL_BORDERS = 'showColBorders';\n\n/**\n * Field that indicates spacing property for border\n */\nexport const SHOW_VALUE_BORDERS = 'showValueBorders';\n\nexport const HEIGHT = 'height';\nexport const COLUMN = 'column';\nexport const ROW = 'row';\nexport const TOP = 'top';\nexport const LEFT = 'left';\nexport const RIGHT = 'right';\nexport const BOTTOM = 'bottom';\nexport const CENTER = 'center';\nexport const CLICK = 'click';\nexport const ROW_LEFT = 'rowLeft';\nexport const ROW_RIGHT = 'rowRight';\nexport const COLUMN_BOTTOM = 'colBottom';\nexport const COLUMN_TOP = 'colTop';\nexport const AUTO = 'auto';\nexport const ROW_SPAN = 'rowSpan';\nexport const COL_SPAN = 'colSpan';\nexport const ROW_ROOT = 'rowRoot';\nexport const COLUMN_ROOT = 'columnRoot';\nexport const PRIMARY = 'primary';\nexport const SECONDARY = 'secondary';\n","import { sanitizeIP, mergeRecursive } from 'muze-utils';\nimport { TOP, CENTER, BOTTOM } from '../enums/constants';\n\n/*\n * This is the abstract implementation of the root layout. This takes care of common work which all the layouts\n * has to handle. The common work includes sanitizaion of inputs, update, rerender, dispose etc. This class can't be\n * used directly (as ofcourse this is an abstract implementaiton), the class which is implementing it has to implement\n * the necessary methods and gives its on visual.\n */\n\n/**\n * This class is used to create a generic layout. It can be extended to create layouts\n * of different types\n * @class GenericLayout\n */\nexport default class GenericLayout {\n\n /**\n * Creates an instance of TableLayout.\n * @param {HTMLElement} mountPoint DOM element/d3 selection where the layout is to be mounted\n * @param {Object} measurement The dimensions of the layout\n * @param {Object} config configuration to be given for the layout\n * @param {Object} dependencies external dependencies.\n * @memberof GenericLayout\n *\n * measurement : {\n * width : number => width of the container\n * height : number => height of the container\n * unitHeight : number => height of unit of the cells\n * unitWidth : number => width of unit of the cells\n * }\n *\n */\n constructor (mountPoint, measurement, config, dependencies) {\n this._config = {};\n this._measurement = {};\n this._matrices = [];\n // External dependencies to be included for the layout. This includes the ext global dependencies like\n // smartlabel which has one single implementation of throughout the page or per isntance\n this._dependencies = dependencies;\n\n this.measurement(measurement);\n this.mountPoint(mountPoint);\n this.config(config);\n }\n\n /**\n * Returns an object which is used to recreate the layout.\n * @return {Object} the serialized components\n */\n serialize () {\n return {\n measurement: this.measurement(),\n config: this.config(),\n matrices: this.matrices()\n };\n }\n\n /**\n * Sets/Gets the config for the layout\n * @param {Object} config configuration for the layout\n * @return {Layout|Object} Gets the Config/ Returns this instance when set\n */\n config (config) {\n if (config) {\n this._config = mergeRecursive(this._config || {}, config);\n return this;\n }\n return this._config;\n }\n\n /**\n * Sets/Gets the measurement for the layout\n * @param {Object} measurement measurement for the layout\n * @return {Layout|Object} Gets the measurement/ Returns this instance when set\n */\n measurement (measurement) {\n if (measurement) {\n this._measurement = mergeRecursive(this._measurement || {}, measurement);\n\n return this;\n }\n return this._measurement;\n }\n\n /**\n * Sets/Gets the matrices for the layout\n * @param {Object} matrices matrices for the layout\n * @return {Layout|Object} Gets the matrices/ Returns this instance when set\n */\n matrices (matrices) {\n if (matrices) {\n this._matrices = sanitizeIP.typeObj([TOP, CENTER, BOTTOM], matrices);\n\n return this;\n }\n return this._matrices;\n }\n\n /**\n * Sets/Gets the matrix for row\n * @param {Object} matrix matrices for the layout\n * @return {Layout|Object} Gets the matrix/ Returns this instance when set\n */\n rowMatrix (matrix) {\n if (matrix) {\n this._rowMatrix = matrix;\n return this;\n }\n return this._rowMatrix;\n }\n\n /**\n * Sets/Gets the matrix for columns\n * @param {Object} matrix matrices for the layout\n * @return {Layout|Object} Gets the matrix/ Returns this instance when set\n */\n columnMatrix (matrix) {\n if (matrix) {\n this._columnMatrix = matrix;\n return this;\n }\n return this._columnMatrix;\n }\n\n /**\n * Sets/Gets the matrix for value\n * @param {Object} matrix matrices for the layout\n * @return {Layout|Object} Gets the matrix/ Returns this instance when set\n */\n centerMatrix (matrix) {\n if (matrix) {\n this._centerMatrix = matrix;\n return this;\n }\n return this._centerMatrix;\n }\n\n /**\n * Sets/Gets the mountPoint for the layout\n * @param {Object} mountPoint mountPoint for the layout\n * @return {Layout|Object} Gets the mountPoint/ Returns this instance when set\n */\n mountPoint (mountPoint) {\n if (mountPoint) {\n this._mountPoint = mountPoint;\n\n return this;\n }\n return this._mountPoint;\n }\n}\n","import * as FieldNames from '../enums/constants';\n\n/**\n * Default configuration of the layout\n * @return {Object} returns the default configuration\n */\nexport const DEFAULT_CONFIGURATION = {\n [FieldNames.BORDER]: {\n [FieldNames.STYLE]: 'solid',\n [FieldNames.COLOR]: '#d6d6d6',\n [FieldNames.WIDTH]: 2,\n [FieldNames.COLLAPSE]: true,\n [FieldNames.SPACING]: 0\n },\n [FieldNames.GUTTERSPACE]: { rows: [], columns: [] },\n [FieldNames.DISTRIBUTION]: { rows: [], columns: [] },\n [FieldNames.BREAK_PAGE]: { rows: [], columns: [] },\n [FieldNames.ROW_SIZE_IS_EQUAL]: false,\n [FieldNames.COLUMN_SIZE_IS_EQUAL]: false,\n [FieldNames.COLUMN_POINTER]: 0,\n [FieldNames.ROW_POINTER]: 0\n};\n\n/**\n * Default measurements for the layout\n * @return {Object} returns the default measurements\n */\nexport const DEFAULT_MEASUREMENTS = {\n [FieldNames.GRID_WIDTH]: 100,\n [FieldNames.GRID_HEIGHT]: 100,\n [FieldNames.UNIT_WIDTH]: 100,\n [FieldNames.UNIT_HEIGHT]: 100\n};\n\nexport const BLANK_BORDERS = 'rgba(0,0,0,0)';\n","import { ROW_LEFT, ROW_RIGHT, COLUMN_BOTTOM, COLUMN_TOP, TOP, BOTTOM } from '../enums/constants';\n/**\n * This callback is used to filter the array of\n * placeholder cells and filter out cells which have\n * appeared in a previous row.\n *\n * @param {Placeholder} colData Instance of placeholder.\n * @param {number} colIdx The index of the placeholder in array.\n * @param {Array} matrix The 2d array for which filtering is to be done\n * @param {number} rIdx The index of the row of the placeholder in array.\n * @param {string} type The type of matrix it is (rowLeft, rowRight, colTop, colBottom)\n * @return {boolean} flag to keep/remove element.\n */\nconst columnFilter = (colData, colIdx, matrix, rIdx, type) => {\n const previousRow = matrix[rIdx - 1];\n const currentRow = matrix[rIdx];\n\n // Row Span for left\n if (type === ROW_LEFT) {\n if (!previousRow) {\n return colData;\n }\n let i = 0;\n for (;i <= colIdx; i += 1) {\n if (currentRow[i].valueOf() !== previousRow[i].valueOf()) {\n break;\n }\n }\n return (i - 1 === colIdx) ? null : colData;\n } else if (type === ROW_RIGHT) {\n if (!previousRow || colIdx === 0) {\n return colData;\n }\n let j = colIdx;\n for (; j < currentRow.length; j += 1) {\n if (previousRow[j].valueOf() !== currentRow[j].valueOf()) {\n break;\n }\n }\n return (j === currentRow.length) ? null : colData;\n } else if (type === COLUMN_BOTTOM) {\n if (rIdx === 0) {\n return colData;\n }\n const prevCell = currentRow[colIdx - 1];\n if (prevCell) {\n if (prevCell.valueOf() === colData.valueOf()) {\n const nextRow = matrix[rIdx + 1];\n if (!nextRow) {\n return null;\n }\n if (nextRow[colIdx].valueOf() === nextRow[colIdx - 1].valueOf()) {\n return null;\n }\n return colData;\n }\n return colData;\n }\n return colData;\n } else if (type === COLUMN_TOP) {\n if (rIdx === matrix.length - 1 && matrix.length > 1) {\n return colData;\n }\n const prevCell = currentRow[colIdx - 1];\n if (prevCell && (prevCell.valueOf() === colData.valueOf())) {\n const prevRow = matrix[rIdx - 1];\n if (prevRow) {\n if (prevRow[colIdx].valueOf() === prevRow[colIdx - 1].valueOf()) {\n return null;\n }\n return colData;\n }\n return null;\n }\n return colData;\n }\n return colData;\n};\n\n/**\n * This callback is used to calculate the rowspan\n * by checking for repeating entries in subsequent rows\n * at the specified column.\n *\n * @param {Placeholder} colData Instance of placeholder.\n * @param {number} colIdx The index of the placeholder in the array.\n * @param {Array} matrix The 2d array for which filtering is to be done\n * @param {number} rIdx The index of the row of the placeholder in array.\n * @return {number} The row span.\n */\nconst calcRowSpan = (colData, colIdx, matrix, rIdx) => {\n let count = 1;\n // if data is not header cell then rowspan\n // has to be 1\n if (!colData || typeof colData.valueOf() !== 'string') {\n return 1;\n }\n let isNull = false;\n while (!isNull) {\n if (matrix[rIdx + count] && matrix[rIdx + count][colIdx] === null) {\n count += 1;\n } else {\n isNull = true;\n }\n }\n return count;\n};\n/**\n * This callback is used to calculate the rowspan\n * by checking for repeating entries in subsequent rows\n * at the specified column.\n *\n * @param {Placeholder} colData Instance of placeholder.\n * @param {number} colIdx The index of the placeholder in the array.\n * @param {Array} matrix The 2d array for which filtering is to be done\n * @param {number} rIdx The index of the row of the placeholder in array.\n * @return {number} The row span.\n */\nconst calcColSpan = (colData, colIdx, matrix, rIdx) => {\n let count = 1;\n // if data is not header cell then rowspan\n // has to be 1\n if (!colData || typeof colData.valueOf() !== 'string') {\n return 1;\n }\n let isNull = false;\n while (!isNull) {\n if (matrix[rIdx][colIdx + count] === null) {\n count += 1;\n } else {\n isNull = true;\n }\n }\n return count;\n};\n\n// create a masking matrix to strip out repeating columns\n// and calculate rowspan.\nconst mask = function (matrix, type) {\n return matrix.map((row, rIdx) => {\n if (type === ROW_LEFT || type === ROW_RIGHT) {\n const filteredRow = row.map((col, colIndex) => columnFilter(col, colIndex, matrix, rIdx, type));\n const temp = [];\n const diff = row.length - filteredRow.length;\n for (let i = 0; i < diff; i += 1) {\n temp.push(null);\n }\n if (type === ROW_RIGHT) {\n temp.unshift(...filteredRow);\n return temp;\n }\n temp.push(...filteredRow);\n return temp;\n }\n\n const filteredRow = row.map((col, colIndex) => columnFilter(col, colIndex, matrix, rIdx, type));\n const temp = [];\n temp.push(...filteredRow);\n return temp;\n });\n};\n\n/**\n * This function is used to set the col and row spans\n * for the matrices based on repeated/hierarchichal data\n *\n * @export\n * @param {Array} matrix The 2d array for which filtering is to be done\n * @param {string} type Type of array (center, top, bottom)\n * @param {number} index Index of array in the row\n * @return {Object} containing the view matrix and their spans\n */\nexport function cellSpanMaker (matrix, type, index) {\n let span = '';\n if (type === TOP || type === BOTTOM) {\n span = type === TOP ? COLUMN_TOP : COLUMN_BOTTOM;\n const viewMatrix = mask(matrix, span);\n const spans = viewMatrix.map((row, ridx) => row.map((col, i) => calcColSpan(col, i, viewMatrix, ridx))\n .filter(col => col !== 1));\n return { viewMatrix, spans };\n } else if (index === 0 || index === 2) {\n span = index === 0 ? ROW_LEFT : ROW_RIGHT;\n const viewMatrix = mask(matrix, span);\n const spans = [];\n viewMatrix.forEach((row, ridx) => {\n spans[ridx] = spans[ridx] || [];\n row.forEach((col, i) => {\n if (viewMatrix[ridx][i]) {\n const currSpan = calcRowSpan(col, i, viewMatrix, ridx);\n currSpan && spans[ridx].push(currSpan);\n }\n });\n });\n return { viewMatrix, spans };\n }\n return { viewMatrix: matrix };\n}\n","import { makeElement, selectElement } from 'muze-utils';\nimport { cellSpanMaker } from './span-maker';\nimport {\n TOP, LEFT, RIGHT, BOTTOM, CENTER, WIDTH, ROW_SPAN, COL_SPAN\n} from '../enums/constants';\nimport { BLANK_BORDERS } from './defaults';\n\n/**\n * Creates a table element of the layout\n *\n * @param {Object} mount Mount point for table elements\n * @param {string} className defines class name\n * @param {Array} rowData set of rows for the table\n * @return {Selection} set of selections for the table\n */\nfunction renderTable (mount, className, rowData) {\n const table = makeElement(mount, 'table', ['layout'], `${className}-table`);\n const body = makeElement(table, 'tbody', ['layout'], `${className}-body`);\n const rows = makeElement(body, 'tr', rowData, `${className}-tr`);\n const cells = makeElement(rows, 'td', (d, i) => d.filter(e => e !== null && e.config().show).map(e =>\n ({ placeholder: e, rowIndex: i })), `${className}-td`, {}, key => key.placeholder.id);\n\n return { table, body, rows, cells };\n}\n\nfunction applyRowBorders (cells, borderStyle, showBorders, color) {\n [TOP, BOTTOM].forEach((borderType) => {\n const style = `${borderStyle} ${showBorders[borderType] ? color : BLANK_BORDERS}`;\n cells.style(`border-${borderType}`, style);\n });\n}\n\nfunction applyColBorders (cells, borderStyle, showBorders, color) {\n [LEFT, RIGHT].forEach((borderType) => {\n const style = `${borderStyle} ${showBorders[borderType] ? color : BLANK_BORDERS}`;\n cells.style(`border-${borderType}`, style);\n });\n}\n\n/**\n * Applies borders to the cells in a matrix\n *\n * @param {Selection} cells Set of cells made from the matrix\n * @param {Object} border Border info for layout\n * @param {string} type Type of matrix(top/center/bottom)\n * @param {number} index Column index of matrix in the row\n */\nfunction applyBorders (cells, border, type, index) {\n const {\n width,\n style,\n color,\n showRowBorders,\n showColBorders,\n showValueBorders\n } = border;\n const borderStyle = `${width}px ${style}`;\n\n if (type === CENTER && index === 1) {\n [TOP, BOTTOM, LEFT, RIGHT].forEach((borderType) => {\n cells.style(`border-${borderType}`, `${borderStyle} ${showValueBorders[borderType] ?\n color : BLANK_BORDERS}`);\n });\n } else if (type === CENTER) {\n applyRowBorders(cells, borderStyle, showRowBorders, color);\n } else if (index === 1) {\n applyColBorders(cells, borderStyle, showColBorders, color);\n }\n}\n\n/**\n * Renders a set of matrices in a row\n *\n * @param {Array} matrices Set of matrices in a row\n * @param {Selection} mountPoint Mount point for the row\n * @param {string} type top/center/bottom\n * @param {Object} dimensions dimensions of the matrix\n */\nfunction renderMatrix (matrices, mountPoint, type, dimensions, classPrefix) {\n matrices.forEach((matrix, index) => {\n // Creating containers for each matrix individually\n const containerForMatrix = makeElement(mountPoint, 'div', [1], `${classPrefix}-grid-${type}-${index + 1}`)\n .classed(`${classPrefix}-grid-${type}`, true)\n .classed(`${classPrefix}-grid`, true);\n\n const {\n viewMatrix,\n spans\n } = cellSpanMaker(matrix, type, index);\n\n // Rendering the table components\n const { cells } = renderTable(containerForMatrix, `${classPrefix}-grid`, viewMatrix);\n\n if (type === CENTER && spans) {\n cells.attr(ROW_SPAN, function (cell, colIndex) {\n const placeholder = cell.placeholder;\n selectElement(this).style('height', `${placeholder.availHeight() + dimensions.border.width}px`);\n return spans[cell.rowIndex][colIndex];\n });\n } else if ((type === TOP || type === BOTTOM) && index === 1) {\n cells.attr(COL_SPAN, function (cell, colIndex) {\n const span = spans[cell.rowIndex][colIndex];\n const placeholder = cell.placeholder;\n if (span > 1) {\n placeholder.setAvailableSpace(0, placeholder.availHeight());\n }\n selectElement(this).style('height', `${placeholder.availHeight()}px`);\n return span;\n });\n }\n // Rendering content within placeholders\n cells.each(function (cell) {\n cell.placeholder && cell.placeholder.render(this);\n }).exit().each((cell) => {\n cell.placeholder && cell.placeholder.remove();\n });\n\n applyBorders(cells, dimensions.border, type, index);\n });\n}\n\n/**\n * Renders all the matrices of the layout\n *\n * @export\n * @param {Array} matrices Set of matrices in the layout\n * @param {Array} mountPoints Mount points for each row of matrix\n * @param {Array} layoutDimensions Dimensions(height/width) of all the matrices\n */\nexport function renderMatrices (context, matrices, layoutDimensions) {\n const {\n top,\n center,\n bottom\n } = matrices;\n const {\n classPrefix\n } = context.config();\n const {\n width\n } = context.measurement();\n const mount = context.mountPoint();\n\n const data = [\n { type: TOP, matrix: top },\n { type: CENTER, matrix: center },\n { type: BOTTOM, matrix: bottom }\n ];\n makeElement(mount, 'div', data, `${classPrefix}-grid-layout-row`)\n .each(function (d, i) {\n const row = selectElement(this);\n row.classed(`${classPrefix}-grid-layout-row-${i}`, true);\n renderMatrix(d.matrix, row, d.type, layoutDimensions, classPrefix);\n })\n .style(WIDTH, `${Math.ceil(width)}px`);\n}\n","/**\n * This file exports utility functions that are used across the layout module\n */\nimport { Symbols } from 'muze-utils';\nimport { PRIMARY, SECONDARY, HEIGHT, WIDTH } from '../enums/constants';\n\nconst nest = Symbols.nest;\n/**\n *\n *\n * @param {*} isTransposed\n * @returns\n */\nconst getMeasureInfo = (isTransposed) => {\n if (isTransposed) {\n return {\n firstMeasure: HEIGHT,\n secondMeasure: WIDTH\n };\n }\n return {\n firstMeasure: WIDTH,\n secondMeasure: HEIGHT\n };\n};\n\n/**\n *\n *\n * @param {*} i\n * @param {*} page\n * @returns\n */\nconst findInPage = (i, page) => {\n let count = 0;\n for (const x in page) {\n if (i < page[x]) {\n count = x;\n break;\n }\n }\n return count;\n};\n\n/**\n * Creates a single matrix from two matrices\n *\n * @param {Array} matrix Input matrix\n * @return {Array} Joined matrix\n * @memberof VisualMatrix\n */\nexport const combineMatrices = (matrix, config) => {\n const { isTransposed } = config;\n let joinedMatrix = matrix[0].length > 0 ? matrix[0] : matrix[1];\n if (isTransposed) {\n joinedMatrix = matrix[0].length > 0 ? [...matrix[0]] : [];\n joinedMatrix = matrix[1].length > 0 ? [...joinedMatrix, ...matrix[1]] : joinedMatrix;\n } else {\n joinedMatrix = joinedMatrix.map((row, rowIndex) => {\n let rowData = [];\n if (matrix[0].length > 0) {\n rowData = [...matrix[0][rowIndex]];\n }\n if (matrix[1].length > 0) {\n rowData = [...rowData, ...matrix[1][rowIndex]];\n }\n return rowData;\n });\n }\n return joinedMatrix;\n};\n\n/**\n * Creates a hirachical tree from the context\n *\n * @param {Object} context context for creating tree\n * @return {Object} nested tree\n */\nexport const createTree = (context) => {\n let matrixTree = {};\n let lastLevelKey = 0;\n let facet = PRIMARY;\n const nestFn = nest();\n const keys = [];\n const layoutMatrix = context._layoutMatrix;\n const primaryMatrix = context.primaryMatrix();\n const secondaryMatrix = context.secondaryMatrix();\n const { isTransposed, breakPage } = context.config();\n\n if (!isTransposed) {\n if (primaryMatrix.length === 0) {\n facet = PRIMARY;\n } else if (secondaryMatrix.length === 0) {\n facet = SECONDARY;\n } else {\n facet = primaryMatrix.length >= secondaryMatrix.length ? PRIMARY : SECONDARY;\n }\n if (primaryMatrix.length > 0) {\n for (let i = 0; i < primaryMatrix[0].length - 1; i++) {\n keys.push(i);\n }\n keys.push(primaryMatrix[0].length - 1);\n if (facet === SECONDARY || secondaryMatrix.length === 0) {\n lastLevelKey = primaryMatrix[0].length - 1;\n }\n }\n if (secondaryMatrix.length > 0) {\n const keyLength = primaryMatrix.length > 0 ? primaryMatrix[0].length : 0;\n for (let i = secondaryMatrix[0].length - 1; i > 0; i--) {\n keys.push(i + keyLength);\n }\n keys.push(keyLength);\n\n if (facet === PRIMARY) {\n lastLevelKey = keyLength;\n }\n } else {\n lastLevelKey = primaryMatrix.length > 0 ? primaryMatrix[0].length - 1 : 0;\n }\n keys.forEach((key) => {\n let counter = -1;\n return nestFn.key((d) => {\n counter++;\n return `${d[key].valueOf()}-${findInPage(counter, breakPage)}`;\n });\n });\n matrixTree = nestFn.entries(layoutMatrix);\n } else {\n if (primaryMatrix.length === 0) {\n facet = PRIMARY;\n } else if (secondaryMatrix.length === 0) {\n facet = SECONDARY;\n } else {\n facet = primaryMatrix.length >= secondaryMatrix.length ? PRIMARY : SECONDARY;\n }\n if (primaryMatrix.length > 0) {\n for (let i = 0; i < primaryMatrix.length - 1; i++) {\n keys.push(i);\n }\n // if (facet === PRIMARY) {\n keys.push(primaryMatrix.length - 1);\n // } else {\n if (facet === SECONDARY) {\n lastLevelKey = primaryMatrix.length - 1;\n }\n }\n if (secondaryMatrix.length > 0) {\n const primaryMatrixLength = primaryMatrix.length;\n for (let i = secondaryMatrix.length - 1; i > 0; i--) {\n keys.push(i + primaryMatrixLength);\n }\n // if (facet === SECONDARY) {\n keys.push(primaryMatrixLength);\n // }\n if (facet === PRIMARY) {\n lastLevelKey = primaryMatrixLength;\n }\n }\n keys.forEach((key) => {\n let counter = -1;\n return nestFn.key((d) => {\n counter++;\n return `${d[key].valueOf()}-${findInPage(counter, breakPage)}`;\n });\n });\n let newMatrix = [];\n newMatrix = layoutMatrix[0].map((col, colIndex) => layoutMatrix.map(row => row[colIndex]));\n matrixTree = nestFn.entries(newMatrix);\n }\n return { tree: matrixTree, lastLevelKey };\n};\n\n/**\n * Gives the min measues\n *\n * @param {boolean} isTransposed is column matrix\n * @param {Object} unitMeasures min measures to be given to cells\n * @return {Object} dimension min cell\n */\nexport const getMinMeasures = (isTransposed, unitMeasures) => {\n if (!isTransposed) {\n return {\n height: unitMeasures.height,\n width: 0\n };\n }\n return {\n height: 0,\n width: unitMeasures.width\n };\n};\n\n/**\n * Get the logical space from the tree\n *\n * @param {Node} item tree to be calculated\n * @param {number} measures width and height\n * @param {Array} minMeasures min measures for a cell\n * @param {Array} maxMeasure max measures for a col/row\n * @return {Object} dimension\n */\nexport const getLogicalSpace = (item, measures, minMeasures, maxMeasure = []) => {\n const { firstMeasure, secondMeasure } = measures;\n let firstMeasureValue = 0;\n let secondMeasureValue = 0;\n item.values.forEach((valueArray) => {\n let fMeasure = 0;\n let sMeasure = 0;\n valueArray.forEach((placeholder, colIndex) => {\n placeholder.logicalSpace(null);\n const space = placeholder.getLogicalSpace();\n sMeasure = Math.max(sMeasure, +space[secondMeasure], minMeasures[secondMeasure]);\n maxMeasure[colIndex] = Math.max(maxMeasure[colIndex] || 0, space[firstMeasure]);\n fMeasure += +maxMeasure[colIndex];\n });\n secondMeasureValue += sMeasure;\n firstMeasureValue = Math.max(firstMeasureValue, fMeasure);\n item.space = {\n [secondMeasure]: Math.ceil(secondMeasureValue),\n [firstMeasure]: Math.ceil(firstMeasureValue)\n };\n });\n return {\n [secondMeasure]: secondMeasureValue,\n [firstMeasure]: firstMeasureValue\n };\n};\n\n/**\n * Computes the logical spcae taken by the matrix tree\n *\n * @param {*} [item={}] tree to be viewed\n * @param {boolean} [isTransposed=false] is column matrix\n * @param {*} unitMeasures min measues for a cell\n * @param {Array} maxMeasure max measures for a col/row\n * @return {Object} logical space taken\n */\nexport const computeLogicalSpace = (item = {}, config, maxMeasures) => {\n const { isTransposed = false, unitMeasures } = config;\n const { firstMeasure, secondMeasure } = getMeasureInfo(isTransposed);\n const { values } = item;\n const minMeasures = getMinMeasures(isTransposed, unitMeasures);\n if (values[0].key) {\n const logicalSpace = { [firstMeasure]: 0, [secondMeasure]: 0 };\n\n values.forEach((valueItem) => {\n // Compute logical space for lowest level\n const space = computeLogicalSpace(valueItem, config, maxMeasures);\n // Set logical space for first measure\n logicalSpace[firstMeasure] = Math.max(logicalSpace[firstMeasure], space[firstMeasure],\n minMeasures[firstMeasure]);\n // Set logical space for second measure\n logicalSpace[secondMeasure] += +space[secondMeasure];\n });\n item.space = logicalSpace;\n return logicalSpace;\n }\n return getLogicalSpace(item, { firstMeasure, secondMeasure }, minMeasures, maxMeasures);\n};\n\n/**\n * Gives the space taken by a row\n *\n * @param {Array} row matrix array of rows\n * @return {Object} dimension of the row\n */\nexport const spaceTakenByRow = (row) => {\n let height = 0;\n let width = 0;\n row.forEach((col) => {\n const spaces = col.getLogicalSpace();\n height = Math.max(height, spaces.height);\n width += spaces.width;\n });\n return {\n width,\n height\n };\n};\n\n/**\n * Gives the space taken by a column\n *\n * @param {Array} matrix column matrix\n * @param {number} colIndex column index\n * @return {Object} dimension of the column\n */\nexport const spaceTakenByColumn = (matrix, colIndex) => {\n let height = 0;\n let width = 0;\n matrix.forEach((row) => {\n const col = row[colIndex];\n const spaces = col.getLogicalSpace();\n width = Math.max(width, spaces.width);\n height += spaces.height;\n });\n return {\n width,\n height\n };\n};\n\n/**\n * Creates different level matrices\n *\n * @param {Object} item matrix tree\n * @param {boolean} isTransposed is column matrix\n * @return {Object} matrix of each level\n */\nexport const createMatrixEachLevel = (item, isTransposed) => {\n if (item.values[0].key) {\n const arr = [];\n item.values.forEach((child) => {\n if (!isTransposed) {\n arr.push(...createMatrixEachLevel(child, isTransposed));\n } else {\n const eachLevel = createMatrixEachLevel(child, isTransposed);\n eachLevel.forEach((e, i) => {\n arr[i] = arr[i] || [];\n arr[i].push(...e);\n });\n }\n });\n item.matrix = arr;\n return arr;\n }\n if (!isTransposed) {\n item.matrix = item.values;\n } else {\n item.matrix = item.values[0].map((col, colIndex) => item.values.map(row => row[colIndex]));\n }\n return item.matrix;\n};\n\n/**\n * Breaks the matrix into two part\n *\n * @param {Array} matrix input matrix\n * @param {boolean} isTransposed is column matrix\n * @param {number} breakPointer point in matrix where it is to be broken\n * @return {Array} two broken matrix\n */\nexport const breakMatrix = (matrix, isTransposed, breakPointer) => {\n const primaryMatrix = [];\n const secondaryMatrix = [];\n if (isTransposed) {\n matrix.forEach((row, rowIndex) => {\n if (rowIndex >= breakPointer) {\n secondaryMatrix.push(row);\n } else {\n primaryMatrix.push(row);\n }\n });\n } else {\n matrix.forEach((row, rowIndex) => {\n row.forEach((column, columnIndex) => {\n if (columnIndex >= breakPointer) {\n secondaryMatrix[rowIndex] = secondaryMatrix[rowIndex] || [];\n secondaryMatrix[rowIndex].push(column);\n } else {\n primaryMatrix[rowIndex] = primaryMatrix[rowIndex] || [];\n primaryMatrix[rowIndex].push(column);\n }\n });\n });\n }\n return [primaryMatrix, secondaryMatrix];\n};\n\n/**\n * Distributed width returned\n *\n * @param {Object} context context for the width distibution\n * @return {number} distributed widths\n */\nexport const getDistributedWidth = (context, layoutConfig) => {\n const {\n availableWidth,\n width,\n row\n } = context;\n const {\n isDistributionEqual,\n isTransposed,\n distribution\n } = layoutConfig;\n let distSum = 0;\n if (distribution && distribution[0]) {\n distSum = distribution.reduce((t, n) => {\n t += n;\n return t;\n });\n }\n return row.map((col, colIndex) => {\n const space = col.getLogicalSpace().width;\n let distWidth = (space + (availableWidth - width) * (space / width));\n if (isTransposed) {\n if (distribution.length > 0) {\n distWidth = (availableWidth * distribution[colIndex] / distSum);\n } else if (isDistributionEqual || width === 0) {\n const rowLen = row.length;\n distWidth = (availableWidth / rowLen);\n }\n }\n return Math.floor(distWidth);\n });\n};\n\n/**\n * Distributeed heights returned\n *\n * @param {Object} context input for the height distribution\n * @return {Object} distribured heights\n */\nexport const getDistributedHeight = (context) => {\n let distSum = 0;\n let gutterSum = 0;\n let heightWithoutGutter = 0;\n const {\n isTransposed,\n distribution,\n availableHeight,\n height,\n isDistributionEqual,\n gutter,\n matrix,\n cIdx\n } = context;\n\n if (distribution && distribution[0] !== undefined) {\n distSum = distribution.reduce((t, n) => {\n t += n;\n return t;\n });\n }\n if (gutter && gutter[0] !== undefined) {\n gutterSum = gutter.reduce((t, n) => {\n t += n;\n return t;\n });\n }\n heightWithoutGutter = availableHeight - Math.floor(availableHeight * gutterSum);\n\n const colLen = matrix.length;\n return matrix.map((row, rIdx) => {\n const col = row[cIdx];\n const space = col.getLogicalSpace().height;\n let distHeight = (space + (heightWithoutGutter - height) * (space / height));\n\n if (!isTransposed) {\n if (distribution.length > 0 && colLen === distribution.length) {\n distHeight = (heightWithoutGutter * distribution[rIdx] / distSum);\n } else if (isDistributionEqual || context.height === 0) {\n distHeight = (heightWithoutGutter / colLen);\n }\n }\n return Math.floor(distHeight);\n });\n};\n\n/**\n *\n *\n * @param {*} arr\n * @param {*} beg\n * @param {*} end\n */\nexport const extraCellsRemover = (arr, beg, end) => arr.slice(beg, -end);\n\n/**\n * Creates matrix instancess\n *\n * @param {Array} [arr=[]] mutated arry\n * @param {number} depth depth of the tree\n * @param {Array} matrixInfo Details about the matrix(tree, etc) to be inserted\n * @param {boolean} layout Instance of layout\n */\nexport const createMatrixInstances = (arr = [], depth, matrixInfo, layout) => {\n const breakPointer = layout._breakPointer;\n const config = layout.config();\n const {\n isTransposed\n } = config;\n const {\n tree,\n layoutMatrix\n } = matrixInfo;\n\n if (depth === 0) {\n const brokenMatrix = breakMatrix(tree.matrix, isTransposed, breakPointer);\n arr.push({\n matrix: tree.matrix,\n primaryMatrix: brokenMatrix[0],\n secondaryMatrix: brokenMatrix[1],\n space: tree.space\n });\n return arr;\n }\n const nextLevel = depth - 1;\n tree.values.forEach((e) => {\n createMatrixInstances(arr, nextLevel, {\n tree: e,\n layoutMatrix\n }, layout);\n });\n return arr;\n};\n","import { mergeRecursive } from 'muze-utils';\n\nexport const PROPS = {\n config: {\n sanitization: (context, value) => mergeRecursive(context._config || {}, value)\n },\n maxMeasures: {},\n availableSpace: {},\n logicalSpace: {}\n};\n","import { PRIMARY } from '../enums/constants';\n/**\n *\n *\n */\nexport const defaultConfig = {\n distribution: [],\n classPrefix: 'muze',\n isDistributionEqual: true,\n unitMeasures: {\n height: 100,\n width: 100,\n border: 1\n },\n isTransposed: false,\n facet: PRIMARY,\n extraCellLengths: []\n};\n","import { mergeRecursive, generateGetterSetters } from 'muze-utils';\nimport {\n createTree,\n extraCellsRemover,\n combineMatrices,\n spaceTakenByColumn,\n getDistributedHeight,\n getDistributedWidth,\n spaceTakenByRow,\n computeLogicalSpace,\n createMatrixEachLevel,\n createMatrixInstances\n } from '../utils';\nimport { PROPS } from './props';\nimport { COLUMN_ROOT, ROW_ROOT, HEIGHT, WIDTH } from '../enums/constants';\nimport { defaultConfig } from './default-config';\n\n/**\n * This class used to create column / row matrix for GridLayout\n *\n * @class VisualMatrix\n */\nexport default class VisualMatrix {\n\n /**\n *Creates an instance of VisualMatrix.\n * @param {any} matrix Two set of matrices\n * @param {any} [config={}] Configuration for VisualMatrix\n * @memberof VisualMatrix\n */\n constructor (matrix, config = {}) {\n // Prepare matrices\n this._lastLevelKey = 0;\n this._primaryMatrix = matrix[0] || [];\n this._secondaryMatrix = matrix[1] || [];\n this._maxMeasures = [];\n this._availableSpace = {};\n\n // Store the config\n generateGetterSetters(this, PROPS);\n const defCon = Object.assign({}, this.constructor.defaultConfig());\n this.config(mergeRecursive(defCon, config));\n\n this._breakPointer = this.config().isTransposed ? matrix[0].length :\n (matrix[0].length > 0 ? matrix[0][0].length : 0);\n this._layoutMatrix = combineMatrices([matrix[0] || [], matrix[1] || []], this.config());\n\n // Create Tree\n this._tree = {\n key: this.config().isTransposed ? COLUMN_ROOT : ROW_ROOT,\n values: this.createTree()\n };\n this._logicalSpace = this.setLogicalSpace();\n }\n\n /**\n *\n *\n * @param {*} params\n * @returns\n * @memberof VisualMatrix\n */\n primaryMatrix (...params) {\n if (params.length) {\n return this;\n }\n return this._primaryMatrix;\n }\n\n /**\n *\n *\n * @param {*} params\n * @returns\n * @memberof VisualMatrix\n */\n secondaryMatrix (...params) {\n if (params.length) {\n return this;\n }\n return this._secondaryMatrix;\n }\n\n /**\n *\n *\n * @param {*} params\n * @returns\n * @memberof VisualMatrix\n */\n tree (...params) {\n if (params.length) {\n return this;\n }\n return this._tree;\n }\n\n /**\n *\n *\n * @static\n * @return\n * @memberof VisualMatrix\n */\n static defaultConfig () {\n return defaultConfig;\n }\n\n /**\n *\n *\n * @return\n * @memberof VisualMatrix\n */\n createTree () {\n const { tree, lastLevelKey } = createTree(this);\n this._lastLevelKey = lastLevelKey;\n return tree;\n }\n\n /**\n * Computes the logical space taken by the entire matrixTree\n *\n * @return {Object} Logical space taken\n * @memberof VisualMatrix\n */\n setLogicalSpace () {\n const {\n isTransposed\n } = this.config();\n const matrixTree = this.tree();\n createMatrixEachLevel(matrixTree, isTransposed);\n return computeLogicalSpace(matrixTree, this.config(), this.maxMeasures());\n }\n\n /**\n * Returns the space taken by visual matrix\n *\n * @return {Object} space taken by the matrix\n * @memberof VisualMatrix\n */\n getLogicalSpace () {\n return this.logicalSpace();\n }\n\n /**\n * Sets the provied space to the visual matrix\n *\n * @param {number} width width provided\n * @param {number} height height provided\n * @memberof VisualMatrix\n */\n setAvailableSpace (width, height) {\n this.availableSpace({ width, height });\n const tree = this.tree();\n const heightMeasures = this.populateMaxMeasures(HEIGHT, tree);\n const widthMeasures = this.populateMaxMeasures(WIDTH, tree);\n const depth = this.calculateDepth(widthMeasures, heightMeasures);\n\n this.viewableMatrix = this.createViewPortMatrix(depth);\n this.viewableMeasures = this.redistribute(this.viewableMatrix, width, height);\n return this;\n }\n\n /**\n * Populate the max measures in the array\n *\n * @param {Array} measures array to be filled with max measures\n * @param {Object} matrixTree matrix tree of visual matrix\n * @param {number} measure width or height\n * @param {number} [depth=0] depth of the tree that to be calculated\n * @memberof VisualMatrix\n */\n populateMaxMeasures (type, matrixTree, depth = 0, measures = []) {\n measures[depth] = Math.max(measures[depth] || 0, matrixTree.space[type]);\n if (matrixTree.values) {\n const childDepth = depth + 1;\n matrixTree.values.forEach((child) => {\n if (child.space) {\n measures = this.populateMaxMeasures(type, child, childDepth, measures);\n }\n });\n }\n return measures;\n }\n\n /**\n * Calculates the depth of the tree that can be viewed\n *\n * @param {Array} widthMeasures array of widths\n * @param {Array} heightMeasures array of heights\n * @return {number} depth of the tree\n * @memberof VisualMatrix\n */\n calculateDepth (widthMeasures, heightMeasures) {\n let i;\n let j;\n const { height, width } = this.availableSpace();\n\n for (i = 0; i < heightMeasures.length; i++) {\n if (heightMeasures[i] <= height) break;\n }\n for (j = 0; j < widthMeasures.length; j++) {\n if (widthMeasures[j] <= width) break;\n }\n return Math.min(widthMeasures.length - 1, Math.max(i, j));\n }\n\n /**\n * Redistributes the provied space to all cells\n *\n * @param {*} viewableMatrix current viewport matrix\n * @param {*} width provied width\n * @param {*} height provied height\n * @return {Object} current viewports matrixes with measures\n * @memberof VisualMatrix\n */\n redistribute (viewableMatrix, width, height) {\n let maxHeights = [];\n let maxWidths = [];\n const {\n isTransposed\n } = this.config();\n\n viewableMatrix.forEach((matrixInst) => {\n const matrix = matrixInst.matrix;\n const mWidth = 0;\n const mHeight = 0;\n const options = { mWidth, mHeight, matrix, width, height, maxHeights, maxWidths };\n const maxMeasures = isTransposed ? this.redistributeColumnWise(options) : this.redistributeRowWise(options);\n maxWidths = maxMeasures.maxWidths;\n maxHeights = maxMeasures.maxHeights;\n });\n\n const measurements = viewableMatrix.map((matrixInst, i) => {\n let heightMeasures;\n let columnMeasures;\n const cellDimOptions = { matrixInst, maxWidths, maxHeights, matrixIndex: i };\n const { heights, widths, rowHeights, columnWidths } = this.getCellDimensions(cellDimOptions);\n\n if (!isTransposed) {\n heightMeasures = [height, height];\n columnMeasures = widths;\n } else {\n heightMeasures = heights;\n columnMeasures = [width, width];\n }\n return {\n rowHeights: {\n primary: rowHeights[0],\n secondary: rowHeights[1]\n },\n columnWidths: {\n primary: columnWidths[0],\n secondary: columnWidths[1]\n },\n height: {\n primary: heightMeasures[0],\n secondary: heightMeasures[1]\n },\n width: {\n primary: columnMeasures[0],\n secondary: columnMeasures[1]\n }\n };\n });\n\n return measurements;\n }\n\n /**\n * Gets the viewable measures for the current viewable matrix\n *\n * @return {Object} Set of viewable measures\n * @memberof VisualMatrix\n */\n getViewableSpaces () {\n return this.viewableMeasures;\n }\n\n /**\n * Returns the matrix that can be viewed in the current viewport\n *\n * @return {Array} Set of matrices that can be viewed\n * @memberof VisualMatrix\n */\n getViewableData () {\n return this.viewableMatrix;\n }\n\n /**\n *\n *\n * @return\n * @memberof VisualMatrix\n */\n removeExtraCells () {\n const {\n isTransposed,\n extraCellLengths\n } = this.config();\n const matrix = this._layoutMatrix;\n const tree = mergeRecursive({}, this.tree());\n const begCellLen = extraCellLengths[0];\n const endCellLen = extraCellLengths[1] || Number.NEGATIVE_INFINITY;\n const layoutMatrix = !isTransposed ? extraCellsRemover(matrix, begCellLen, endCellLen) :\n matrix.slice(0).map(e => extraCellsRemover(e, begCellLen, endCellLen));\n\n tree.values = extraCellsRemover(tree.values, begCellLen, endCellLen);\n if (!isTransposed) {\n tree.matrix = extraCellsRemover(tree.matrix, begCellLen, endCellLen);\n } else {\n tree.matrix = tree.matrix.map(e => extraCellsRemover(e, begCellLen, endCellLen));\n }\n return {\n tree,\n layoutMatrix\n };\n }\n\n /**\n * Creates the viewport that can be viewed together\n *\n * @param {number} depth maxDepth that can be viewed in the viewport\n * @return {Array} Set of matrices that can be viewed\n * @memberof VisualMatrix\n */\n createViewPortMatrix (depth) {\n const arr = [];\n createMatrixInstances(arr, depth, this.removeExtraCells(), this);\n return arr;\n }\n\n /**\n * Distibutes the given space row wisely\n *\n * @param {Object} options Redistribution information\n * @memberof VisualMatrix\n */\n redistributeRowWise (options) {\n let cWidths = [];\n let rHeights = [];\n let mHeight = 0;\n const maxMeasures = this.maxMeasures();\n const {\n isDistributionEqual,\n distribution,\n isTransposed,\n gutter\n } = this.config();\n const { matrix, width, height, maxHeights, maxWidths } = options;\n\n mHeight = spaceTakenByColumn(matrix, this._lastLevelKey).height;\n\n const maxWidth = maxMeasures.reduce((t, n) => {\n t += n;\n return t;\n });\n if (maxWidth > 0) {\n cWidths = maxMeasures.map(space => space + (width - maxWidth) * (space / maxWidth));\n } else {\n cWidths = maxMeasures.map(() => 0);\n }\n rHeights = getDistributedHeight({\n matrix,\n cIdx: this._lastLevelKey,\n height: mHeight,\n availableHeight: height,\n isDistributionEqual,\n distribution,\n isTransposed,\n gutter\n });\n maxWidths.push(cWidths);\n maxHeights.push(rHeights);\n return { maxWidths, maxHeights };\n }\n\n /**\n * Distibutes the given space column wisely\n *\n * @param {Object} options Redistribution information\n * @memberof VisualMatrix\n */\n redistributeColumnWise (options) {\n let rHeights = [];\n const { matrix, width, maxHeights, maxWidths } = options;\n const borderWidth = this.config().unitMeasures.border;\n const mWidth = spaceTakenByRow(matrix[this._lastLevelKey]).width;\n const cWidths = getDistributedWidth({\n row: matrix[this._lastLevelKey],\n width: mWidth,\n availableWidth: width\n }, this.config());\n\n matrix.forEach((row, rIdx) => row.forEach((col, cIdx) => {\n const oldLogicalSpace = col.getLogicalSpace().height;\n col.setAvailableSpace(cWidths[cIdx] - borderWidth, oldLogicalSpace);\n rHeights[rIdx] = Math.max(rHeights[rIdx] || 0, col.getLogicalSpace().height);\n }));\n\n if (maxHeights.length > 0) {\n rHeights = rHeights.map((e, i) => Math.max(e, maxHeights[0][i]));\n }\n\n maxHeights.push(rHeights);\n\n for (let x = 0; x < maxHeights.length; x++) {\n maxHeights[x] = rHeights;\n }\n maxWidths.push(cWidths);\n return { maxHeights, maxWidths };\n }\n\n /**\n * Dispatch the calculated cell dimensions to all the cells\n *\n * @param {Object} options cell dimension information\n * @return {Object} row and column heights / widths\n * @memberof VisualMatrix\n */\n getCellDimensions (options) {\n let indices = [];\n let unitMeasures = [];\n let mainMeasures = [];\n let computedMeasures = [];\n const {\n isTransposed,\n unitMeasures: measures\n } = this.config();\n const borderWidth = measures.border;\n const { matrixInst, maxWidths, maxHeights, matrixIndex } = options;\n const matrix = matrixInst.matrix;\n const rowHeights = [[0], [0]];\n const columnWidths = [[0], [0]];\n const heights = [0, 0];\n const widths = [0, 0];\n const breakPointer = this._breakPointer;\n\n matrix.forEach((row, rIdx) => {\n row.forEach((cell, cIdx) => {\n const colHeight = maxHeights[matrixIndex][rIdx] || 0;\n const colWidth = maxWidths[matrixIndex][cIdx];\n\n if (!isTransposed) {\n cell.setAvailableSpace(colWidth, colHeight - borderWidth);\n indices = [rIdx, cIdx];\n unitMeasures = [columnWidths, rowHeights];\n mainMeasures = [widths, heights];\n computedMeasures = [colWidth, colHeight];\n } else {\n cell.setAvailableSpace(colWidth - borderWidth, colHeight);\n indices = [cIdx, rIdx];\n unitMeasures = [rowHeights, columnWidths];\n mainMeasures = [heights, widths];\n computedMeasures = [colHeight, colWidth];\n }\n\n if (indices[0] === 0 && indices[1] < breakPointer) {\n unitMeasures[0][0][indices[1]] = computedMeasures[0];\n mainMeasures[0][0] = (mainMeasures[0][0] || 0) + computedMeasures[0];\n } else if (indices[0] === 0 && indices[1] >= breakPointer) {\n unitMeasures[0][1][indices[1] - breakPointer] = computedMeasures[0];\n mainMeasures[0][1] = (mainMeasures[0][1] || 0) + computedMeasures[0];\n }\n if (indices[1] === this._lastLevelKey) {\n unitMeasures[1][0][indices[0]] = computedMeasures[1];\n unitMeasures[1][1][indices[0]] = computedMeasures[1];\n }\n });\n });\n return {\n heights,\n widths,\n rowHeights,\n columnWidths\n };\n }\n}\n\n","import { HEIGHT, WIDTH, COLUMN, ROW } from '../enums/constants';\n\n/**\n * Gets measurement for an instance of visual matrix\n *\n * @param {Array} matrix instance of visual matrix\n * @param {string} type height/width\n * @return {Object} Logical height/width of the matrix\n */\nexport function getMatrixMeasurement (matrix, type) {\n if (matrix) {\n return matrix.getLogicalSpace()[type];\n }\n return 0;\n}\n\n/**\n * Sets available space for an instance of visual matrix\n *\n * @param {Array} matrix instance of visual matrix\n * @param {string} type height/width\n * @param {number} value Value of measurement\n */\nexport function setMatrixMeasurement (matrix, type, value) {\n if (matrix) {\n const spaces = matrix.getLogicalSpace();\n if (value && spaces[type] !== value) {\n type === HEIGHT ? matrix.setAvailableSpace(spaces.width, value) :\n matrix.setAvailableSpace(value, spaces.height);\n }\n }\n}\n\n/**\n *\n *\n * @param {*} matrix\n * @param {*} widths\n * @param {*} heights\n */\nconst setAvailableSpace = (matrix, widths, heights) => {\n matrix.forEach((row, rIdx) => {\n row.forEach((placeholder, cIdx) => {\n placeholder.setAvailableSpace(widths[cIdx], heights[rIdx]);\n });\n });\n};\n\n/**\n *\n *\n * @param {*} layout\n * @param {*} matrix\n * @param {*} pointer\n * @returns\n */\nconst setViewSpaces = (layout, pointerType, viewSpaces) => {\n let pointer = layout.config()[`${pointerType}Pointer`];\n if (viewSpaces.length - 1 < pointer) {\n pointer = 0;\n layout.config({ [`${pointerType}Pointer`]: pointer });\n }\n return pointer;\n};\n\n/**\n * Computes the measurements of space for all matrices in the\n * layout\n *\n * @param {Object} layout Instance of grid layout\n * @return {Object} set of measurements for the layout\n */\nexport const computeLayoutMeasurements = (layout) => {\n const rowMatrix = layout.rowMatrix();\n const columnMatrix = layout.columnMatrix();\n const centerMatrix = layout.centerMatrix();\n const {\n width,\n height\n } = layout.measurement();\n const {\n border\n } = layout.config();\n const matrices = layout.matrices();\n const {\n top,\n bottom\n } = matrices;\n\n // Get width of row matrix\n const rowMatrixWidth = getMatrixMeasurement(rowMatrix, WIDTH);\n\n // Set width for column matrix\n\n // Border adjustment for each cell in the central matrix\n const borderWidth = border.width;\n\n const columnMatrixWidth = width - rowMatrixWidth - borderWidth;\n setMatrixMeasurement(columnMatrix, WIDTH, columnMatrixWidth);\n const columnViewPages = columnMatrix.getViewableSpaces();\n setViewSpaces(layout, COLUMN, columnViewPages);\n\n // Figuring out total space needed by current view space\n const columnViewSpace = columnViewPages[layout.config().columnPointer];\n\n // Getting height of column matrix\n const columnMatrixHeight = columnViewSpace.height.primary + columnViewSpace.height.secondary;\n\n // Set height for row matrix\n const rowMatrixHeight = height - columnMatrixHeight;\n\n setMatrixMeasurement(rowMatrix, HEIGHT, rowMatrixHeight);\n\n // Get heights of each cell of row matrix\n const rowViewableSpaces = rowMatrix.getViewableSpaces();\n setViewSpaces(layout, ROW, rowViewableSpaces);\n const rowHeights = [].concat(...rowViewableSpaces.map(e => e.rowHeights.primary));\n const rowWidthsPrimary = [].concat(...rowViewableSpaces.map(e => e.columnWidths.primary));\n const rowWidthsSecondary = [].concat(...rowViewableSpaces.map(e => e.columnWidths.secondary));\n const columnViewableSpaces = columnMatrix.getViewableSpaces();\n // Get widths of each cell of column matrix\n const columnWidths = [].concat(...columnViewableSpaces.map(e => e.columnWidths.primary));\n const columnHeightsPrimary = columnViewableSpaces[0].rowHeights.primary;\n\n const columnHeightsSecondary = [].concat(...columnViewableSpaces.map(e => e.rowHeights.secondary));\n\n // Setting the available space for each cell in the centre matrix\n centerMatrix.forEach((matrix, rIdx) => {\n matrix.forEach((placeholder, cIdx) => {\n placeholder.setAvailableSpace(columnWidths[cIdx] - borderWidth, rowHeights[rIdx] - borderWidth);\n });\n });\n setAvailableSpace(top[0], rowWidthsPrimary, columnHeightsPrimary);\n setAvailableSpace(top[2], rowWidthsSecondary, columnHeightsPrimary);\n setAvailableSpace(bottom[0], rowWidthsPrimary, columnHeightsSecondary);\n setAvailableSpace(bottom[2], rowWidthsSecondary, columnHeightsSecondary);\n\n return {\n rowMatrixHeight,\n rowMatrixWidth,\n columnMatrixHeight,\n columnMatrixWidth\n };\n};\n\n/**\n * Gets view matrices based on current pointers for row and column\n *\n * @param {Object} layout instance of layout\n * @param {number} rowPointer current row pointer\n * @param {number} columnPointer current column pointer\n * @return {Object} returns the view matrix and its relevant information\n */\nexport const getViewMatrices = (layout, rowPointer, columnPointer) => {\n const rowMatrix = layout.rowMatrix();\n const columnMatrix = layout.columnMatrix();\n const centerMatrix = layout.centerMatrix();\n const matrices = layout.matrices();\n const rowMatrices = rowMatrix.getViewableData();\n const columnMatrices = columnMatrix.getViewableData();\n const centralMatrixPointer = {\n row: 0,\n column: 0\n };\n\n for (let i = rowPointer - 1; i >= 0; i--) {\n const length = Math.max(rowMatrices[i].primaryMatrix.length,\n rowMatrices[i].secondaryMatrix.length);\n centralMatrixPointer.row += length;\n }\n /* istanbul ignore next */\n for (let i = columnPointer - 1; i >= 0; i--) {\n const matrix = columnMatrices[i];\n const { primaryMatrix, secondaryMatrix } = matrix;\n const length = Math.max(primaryMatrix[0] ? primaryMatrix[0].length : 0,\n secondaryMatrix[0] ? secondaryMatrix[0].length : 0);\n centralMatrixPointer.column += length;\n }\n\n matrices.top[1] = columnMatrices[columnPointer].primaryMatrix;\n matrices.bottom[1] = columnMatrices[columnPointer].secondaryMatrix;\n\n matrices.center[0] = rowMatrices[rowPointer].primaryMatrix;\n matrices.center[2] = rowMatrices[rowPointer].secondaryMatrix;\n\n const rowMatrixLen = Math.max(matrices.center[0].length, matrices.center[2].length);\n /* istanbul ignore next */\n const columnMatrixLen = Math.max(matrices.top[1][0] ? matrices.top[1][0].length : 0, matrices.bottom[1][0] ?\n matrices.bottom[1][0].length : 0);\n matrices.center[1] = centerMatrix.slice(centralMatrixPointer.row, centralMatrixPointer.row + rowMatrixLen)\n .map(matrix => matrix.slice(centralMatrixPointer.column, centralMatrixPointer.column + columnMatrixLen));\n\n return {\n matrices,\n rowPages: rowMatrices.length,\n columnPages: columnMatrices.length\n };\n};\n/**\n * Returns measurements of the cells of the current matrix\n *\n * @param {Object} layout instance of layout\n * @return {Object} returns the measurements for current view matrix\n */\nexport const getViewMeasurements = (layout) => {\n const rowMatrix = layout.rowMatrix();\n const columnMatrix = layout.columnMatrix();\n const {\n width,\n height\n } = layout.measurement();\n const {\n columnPointer,\n rowPointer\n } = layout.config();\n\n const rowMatrixWidth = rowMatrix.getViewableSpaces()[rowPointer].width;\n const { primary: leftWidth, secondary: rightWidth } = rowMatrixWidth;\n\n const columnMatrixHeight = columnMatrix.getViewableSpaces()[columnPointer].height;\n const { primary: topHeight, secondary: bottomHeight } = columnMatrixHeight;\n\n const centerHeight = height - (topHeight + bottomHeight);\n const centerWidth = width - (leftWidth + rightWidth);\n\n return {\n viewWidth: [leftWidth, centerWidth, rightWidth],\n viewHeight: [topHeight, centerHeight, bottomHeight]\n };\n};\n","/**\n * This file declares a table that can be extended to create a Datagrid, crosstab\n * and man other visualzations that require a tabular structure.\n */\n\nimport { getUniqueId } from 'muze-utils';\nimport GenericLayout from '../generic-layout';\nimport { DEFAULT_CONFIGURATION, DEFAULT_MEASUREMENTS } from './defaults';\nimport {\n renderMatrices\n} from './renderer';\nimport { generateVisualMatrices } from './layout-helper';\nimport { computeLayoutMeasurements, getViewMeasurements, getViewMatrices } from './computations';\n/**\n * This class is used to create a tabular structure that\n * can house charts and values.\n *\n * @class GridLayout\n */\nexport default class GridLayout extends GenericLayout {\n\n /**\n * Creates an instance of TableLayout.\n * @param {HTMLElement} matrices Set of upto 9 matrices containing the cells to be rendered\n * @param {HTMLElement} mountPoint DOM element/d3 selection where the layout is to be mounted\n * @param {Object} measurement The dimensions of the layout\n * @param {Object} config external configurations.\n * @memberof GenericLayout\n *\n * measurement : {\n * width : number => width of the container\n * height : number => height of the container\n * unitHeight : number => height of unit of the cells\n * unitWidth : number => width of unit of the cells\n * }\n *\n */\n constructor (matrices, mountPoint, measurement, config) {\n super(mountPoint, measurement, config);\n this.matrices(matrices);\n this.config(this.constructor.defaultConfig());\n this._layoutId = getUniqueId();\n }\n\n /**\n * Returns initial set of measurements for the grid layout\n *\n * @static\n * @return {Object} Returns initial set of measurements\n * @memberof GridLayout\n */\n static defaultMeasurement () {\n return DEFAULT_MEASUREMENTS;\n }\n\n /**\n * Returns initialconfiguration for grid layout\n *\n * @static\n * @return {Object} Returns initial configuration for grid layout\n * @memberof GridLayout\n */\n static defaultConfig () {\n return DEFAULT_CONFIGURATION;\n }\n\n /**\n * This function is used to return an instance of GridLayout\n *\n * @return {GridLayout} Instance of grid layout.\n * @static\n * @memberof GridLayout\n */\n static create () {\n return new GridLayout(null, null, this.defaultMeasurement(), this.defaultConfig());\n }\n\n /**\n * Sets/Gets the matrices for the layout\n *\n * @param {Array} matrices Set of matrices\n * @return {Object} Getter/Setter\n * @memberof GridLayout\n */\n matrices (matrices) {\n if (matrices) {\n this._matrices = generateVisualMatrices(this, matrices);\n return this;\n }\n return super.matrices(matrices);\n }\n\n /**\n * Triggers the computations for the layout based on the matrices available\n * This causes a reflow in the entire layout system.\n *\n * @return {Object} Layout instance\n * @memberof GridLayout\n */\n triggerReflow () {\n computeLayoutMeasurements(this);\n this.setViewInformation();\n return this;\n }\n\n /**\n *\n *\n * @param {*} type\n * @param {*} pageNumber\n * @returns\n * @memberof GridLayout\n */\n gotoPage (type, pageNumber) {\n const pageType = type.toLowerCase();\n const { viewMatricesInfo } = this.getViewInformation();\n const totalPages = viewMatricesInfo[`${pageType}Pages`];\n const pointer = Math.min(Math.max(1, pageNumber), totalPages);\n this.config({\n [`${pageType}Pointer`]: pointer - 1\n });\n this.setViewInformation();\n this.renderGrid();\n return this;\n }\n\n /**\n *\n *\n * @param {*} type\n * @returns\n * @memberof GridLayout\n */\n pages (type) {\n const { viewMatricesInfo } = this.getViewInformation();\n const pageType = type.toLowerCase();\n return {\n totalPages: viewMatricesInfo[`${pageType}Pages`],\n currentPage: this.config()[`${pageType}Pointer`] + 1\n };\n }\n\n /**\n *\n *\n * @returns\n * @memberof GridLayout\n */\n setViewInformation () {\n const {\n rowPointer,\n columnPointer,\n border\n } = this.config();\n const viewMatricesInfo = getViewMatrices(this, rowPointer, columnPointer);\n const layoutDimensions = getViewMeasurements(this);\n layoutDimensions.border = border;\n this.viewInfo = {\n viewMatricesInfo,\n layoutDimensions\n };\n return this;\n }\n\n /**\n *\n *\n * @returns\n * @memberof GridLayout\n */\n getViewInformation () {\n return this.viewInfo;\n }\n\n /**\n * Renders the layout\n *\n * @return {Object} current instance\n * @memberof GridLayout\n */\n renderGrid (mountPoint) {\n this.mountPoint(mountPoint);\n if (!this.mountPoint()) {\n return this;\n }\n const {\n viewMatricesInfo,\n layoutDimensions\n } = this.getViewInformation();\n // Render matrices\n renderMatrices(this, viewMatricesInfo.matrices, layoutDimensions);\n return this;\n }\n}\n","import VisualMatrix from '../visual-matrix/visual-matrix';\n\n/**\n * Generates the set of visual matrices for pagination and layouting algorithms\n *\n * @param {*} context\n * @param {*} matrices\n * @returns\n */\nexport const generateVisualMatrices = (context, matrices) => {\n // Set of matrices for layout is generated starting with the left matrix\n let leftMatrix = [];\n let rightMatrix = [];\n let topMatrix = [];\n let bottomMatrix = [];\n let begColCells;\n let endColCells;\n const {\n isRowSizeEqual,\n isColumnSizeEqual,\n gutterSpace,\n distribution,\n border,\n breakPage\n } = context.config();\n const {\n minUnitHeight,\n minUnitWidth\n } = context.measurement();\n const { top, center, bottom } = matrices;\n const [topLeft, topColumns, topRight] = top;\n const [leftRows, valueMatrix, rightRows] = center;\n const [bottomLeft, bottomColumns, bottomRight] = bottom;\n\n if (leftRows.length > 0) {\n // If no left matrix is present, context will be empty\n leftMatrix = [...topLeft, ...leftRows, ...bottomLeft];\n }\n if (rightRows.length > 0) {\n // If no right matrix is present, context will be empty\n rightMatrix = [...topRight, ...rightRows, ...bottomRight];\n }\n if (topColumns.length > 0 && topColumns[0].length > 0) {\n // If no top matrix is present, context will be empty\n topMatrix = topColumns.map((d, i) => [...topLeft[i], ...d, ...topRight[i]]);\n }\n if (bottomColumns.length > 0 && bottomColumns[0].length > 0) {\n // If no bottom matrix is present, context will be empty\n bottomMatrix = bottomColumns.map((d, i) => [...bottomLeft[i], ...d, ...bottomRight[i]]);\n }\n context.rowMatrix(new VisualMatrix([leftMatrix, rightMatrix], {\n isDistributionEqual: isRowSizeEqual,\n distribution: distribution.rows,\n gutter: gutterSpace.rows,\n unitMeasures: {\n width: minUnitWidth,\n height: minUnitHeight,\n border: border.width\n },\n breakPage: breakPage.rows.map(e => e + Math.max(topLeft.length, topRight.length)),\n extraCellLengths: [topLeft.length, bottomLeft.length]\n }));\n\n if (topLeft.length > 0) {\n begColCells = topLeft[0].length;\n } else {\n begColCells = bottomLeft.length > 0 ? bottomLeft[0].length : 0;\n }\n\n if (topRight.length > 0) {\n endColCells = topRight[0].length;\n } else {\n endColCells = bottomRight.length > 0 ? bottomRight[0].length : 0;\n }\n\n context.columnMatrix(new VisualMatrix([topMatrix, bottomMatrix], {\n isDistributionEqual: isColumnSizeEqual,\n distribution: distribution.columns,\n gutter: gutterSpace.columns,\n isTransposed: true,\n unitMeasures: {\n width: minUnitWidth,\n height: minUnitHeight,\n border: border.width\n },\n breakPage: breakPage.columns,\n extraCellLengths: [begColCells, endColCells]\n }));\n context.centerMatrix(valueMatrix);\n\n return matrices;\n};\n","import { ERROR_MSG } from 'muze-utils';\n/**\n * An Interface to be implemented if the transaction support is necessary. This class ensures reactivity to\n * global properties.\n */\nexport default class TransactionSupport {\n /**\n * Property accessor for data member of the class. Data is passed to the system by calling this method.\n */\n data () {\n throw new Error(ERROR_MSG.INTERFACE_IMPl);\n }\n\n /**\n * Property accessor for width of the class. Width is passed as an integer.\n */\n width () {\n throw new Error(ERROR_MSG.INTERFACE_IMPl);\n }\n\n /**\n * Property accessor for height of the class. Height is passed as an integer.\n */\n height () {\n throw new Error(ERROR_MSG.INTERFACE_IMPl);\n }\n\n /**\n * Property accessor for config of the class. Config is passed as an object.\n */\n config () {\n throw new Error(ERROR_MSG.INTERFACE_IMPl);\n }\n}\n","import { TOP, BOTTOM, LEFT, TITLE, SUB_TITLE, GROUP, LAYOUT, LEGEND } from '../constants';\n\n/**\n *\n *\n * @param {*} context\n * @returns\n */\nexport const arrangeComponents = (context) => {\n const legendConfig = context.config().legend;\n const titleConfig = context.title()[1];\n const subtitleConfig = context.subtitle()[1];\n const titleLayouts = {\n [`${TOP}-${TOP}`]: [TITLE, SUB_TITLE, GROUP],\n [`${BOTTOM}-${BOTTOM}`]: [GROUP, SUB_TITLE, TITLE],\n [`${TOP}-${BOTTOM}`]: [TITLE, GROUP, SUB_TITLE],\n [`${BOTTOM}-${TOP}`]: [SUB_TITLE, GROUP, TITLE]\n };\n const legendLayouts = [\n [LEGEND, LAYOUT],\n [LAYOUT, LEGEND]\n ];\n const titlePosition = titleConfig.position || TOP;\n const subtitlePosition = subtitleConfig.position || TOP;\n\n return {\n headers: titleLayouts[`${titlePosition}-${subtitlePosition}`],\n legends: legendConfig.position === LEFT || legendConfig.position === TOP ?\n legendLayouts[0] : legendLayouts[1]\n };\n};\n","/**\n * Flag to specify whether direction is vertical.\n */\nexport const MARGIN = 'margin';\nexport const LEFT = 'left';\nexport const RIGHT = 'right';\nexport const BOTTOM = 'bottom';\nexport const TOP = 'top';\nexport const SPACE_FIXER = 'spaceFixer';\nexport const CLASSPREFIX = 'muze';\nexport const VERTICAL_ALIGN = 'verticalAlign';\nexport const TEXT_ALIGN = 'textAlign';\nexport const IS_OFFSET = 'isOffset';\nexport const MIDDLE = 'middle';\nexport const BASELINE = 'baseline';\nexport const SHOW = 'show';\nexport const CENTER = 'center';\nexport const TEXT = 'text';\nexport const HEADER = 'header';\nexport const HEIGHT = 'height';\nexport const WIDTH = 'width';\nexport const DATA = 'data';\nexport const AXES = 'axes';\nexport const FACET_BY_FIELDS = 'facetByFields';\nexport const FIELDS = 'fields';\nexport const TRANSFORM = 'transform';\nexport const LAYER_DEF = 'layerDef';\nexport const CONFIG = 'config';\nexport const DETAIL_FIELDS = 'detailFields';\n\nexport const TEXT_CELL = 'text-cell';\nexport const AXIS_CELL = 'axis-cell';\nexport const GEOM_CELL = 'geom-cell';\nexport const BLANK_CELL = 'blank-cell';\n","// eneum to refer to simple cell\nexport const SIMPLE = 'simple';\n// eneum to refer to header cell\nexport const TEXT = 'text';\n// enum to refer to axis cell\nexport const AXIS = 'axis';\n// enum to refer to visual cell\nexport const GEOM = 'geom';\n// enum to refer blank cell\nexport const BLANK = 'blank';\n","import {\n ERROR_MSG,\n getUniqueId,\n mergeRecursive\n} from 'muze-utils';\nimport { SIMPLE } from './enums/cell-type';\n\n/**\n * This file declares a class that is used as an interface to create new\n * SimpleCell elements.\n * @module SimpleCell\n */\n/**\n * Base class for all table cells.\n *\n * @interface\n * @class SimpleCell\n */\nclass SimpleCell {\n\n /**\n * Creates an instance of SimpleCell.\n *\n * @param {*} config The input configuration.\n * @memberof SimpleCell\n */\n constructor (config) {\n this._id = getUniqueId();\n\n const defConfig = mergeRecursive({}, this.constructor.defaultConfig());\n this._config = mergeRecursive(defConfig, config || {});\n\n this._mount = null;\n }\n\n /**\n * Returns the type of the placehlder.\n *\n * @readonly\n * @memberof SimpleCell\n */\n get type () {\n return SIMPLE;\n }\n\n /**\n * Returns the type of the placehlder.\n *\n * @readonly\n * @memberof SimpleCell\n * @return {Object} Default config for the placeholder\n */\n static defaultConfig () {\n return {};\n }\n\n /**\n * Returns the value contained by the SimpleCell.\n *\n * @memberof SimpleCell\n */\n valueOf () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Returns a unique identifier for the instance used\n * to control selective rendering.\n *\n * @memberof SimpleCell\n */\n id () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Returns a serialized representation of the instance.\n *\n * @memberof SimpleCell\n */\n serialize () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Returns an object with width and height fields\n * specifying the space taken up by this metod.\n *\n * @memberof SimpleCell\n */\n getLogicalSpace () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Method used to set the space available to render the SimpleCell\n *\n * @param {number} width The available width.\n * @param {number} height The available height.\n * @memberof SimpleCell\n */\n setAvailableSpace () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Render the SimpleCell inthe supplied mount point.\n *\n * @param {HTMLElement} mount The mount point to render in.\n * @memberof SimpleCell\n */\n render () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Render the SimpleCell inthe supplied mount point.\n *\n * @param {HTMLElement} mount The mount point to render in.\n * @memberof SimpleCell\n */\n remove () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n}\n\nexport default SimpleCell;\n","/**\n * This file exports variables that are used as defaults for\n * the placeholders\n */\nimport * as CONSTANTS from './constants';\n\n /**\n * Default Configuration for the cells\n * @return {Object} Default configuration\n */\nexport const DEFAULT_CONFIG = {\n [CONSTANTS.MARGIN]: {\n [CONSTANTS.LEFT]: 0,\n [CONSTANTS.RIGHT]: 0,\n [CONSTANTS.TOP]: 0,\n [CONSTANTS.BOTTOM]: 0\n },\n [CONSTANTS.SPACE_FIXER]: 2,\n [CONSTANTS.IS_OFFSET]: false,\n [CONSTANTS.VERTICAL_ALIGN]: CONSTANTS.TOP,\n [CONSTANTS.TEXT_ALIGN]: CONSTANTS.CENTER,\n [CONSTANTS.SHOW]: true\n};\n","import { mergeRecursive } from 'muze-utils';\nimport { GEOM, TEXT, AXIS, BLANK } from './enums/cell-type';\n\nconst DEFAULT_PROPS = {\n mount: {},\n availHeight: {},\n availWidth: {},\n config: {\n sanitization: (context, value) => mergeRecursive(context._config, value)\n },\n logicalSpace: {},\n source: {}\n};\n\nconst geomProps = {\n data: {},\n caption: {},\n config: {},\n axes: {\n sanitization: (context, value) => Object.assign(context._axes, value)\n },\n facetByFields: {},\n fields: {},\n transform: {},\n layerDef: {},\n detailFields: {}\n};\n\nexport const PROPS = {\n [TEXT]: DEFAULT_PROPS,\n [GEOM]: mergeRecursive(geomProps, DEFAULT_PROPS),\n [AXIS]: DEFAULT_PROPS,\n [BLANK]: DEFAULT_PROPS\n};\n","/**\n * This file declares a class that represents a table cell\n * used to house an axis.\n * @module VisualCell\n */\nimport { selectElement, makeElement, generateGetterSetters } from 'muze-utils';\nimport { CLASSPREFIX, HEIGHT, WIDTH, AXIS_CELL } from './enums/constants';\nimport SimpleCell from './simple-cell';\nimport { DEFAULT_CONFIG } from './enums/defaults';\nimport { AXIS } from './enums/cell-type';\nimport { PROPS } from './props';\n\n/**\n * Computes the logical space of the an axis instance within an axis cell\n *\n * @param {Object} context Required to get the needed parameters to compute axis space\n * @return {Object} Returns the logical space for axis\n */\nconst computeAxisSpace = (context) => {\n let logicalWidth;\n let logicalHeight;\n const axis = context.source();\n const {\n spaceFixer,\n margin\n } = context.config();\n const {\n width,\n height\n } = axis.getLogicalSpace();\n const {\n show\n } = axis.config();\n if (show === true) {\n logicalHeight = Math.floor(height + margin.top + margin.bottom + spaceFixer);\n logicalWidth = Math.floor(width + margin.left + margin.right + spaceFixer);\n } else {\n [logicalWidth, logicalHeight] = [width, height];\n }\n return {\n width: logicalWidth,\n height: logicalHeight\n };\n};\n\n/**\n * Represents an axis cell.\n *\n * @class Axis\n */\nclass AxisCell extends SimpleCell {\n\n /**\n * Creates an instance of AxisCell.\n *\n * @param {Object} config The input config.\n * @memberof AxisCell\n */\n constructor (config) {\n super(config);\n\n this._axis = null;\n this._availHeight = null;\n this._availWidth = null;\n this._logicalSpace = null;\n\n generateGetterSetters(this, PROPS[AXIS]);\n }\n\n /**\n * return the type pf SimpleCell cell.\n *\n * @readonly\n * @memberof AxisCell\n */\n get type () {\n return AXIS;\n }\n\n /**\n * This method return the value conatined by this SimpleCell.\n *\n * @return {SimpleAxis | ColorAxis} Instance of SimpleAxis or ColorAxis.\n * @memberof AxisCell\n */\n valueOf () {\n return this.source().id;\n }\n\n /**\n * This method return the unique identififer of the axis\n *\n * @return {string} Id of the axis.\n * @memberof AxisCell\n */\n get id () {\n return this._id;\n }\n\n /**\n * Retrns the serialized representation of this cell.\n *\n * @return {Object}Object with serializable props.\n * @memberof AxisCell\n */\n serialize () {\n return {\n type: AXIS,\n axis: this.source().serialize()\n };\n }\n\n /**\n * return the default configuration for the text cell\n *\n * @static\n * @return {Object} Default configuration of the cell\n * @memberof AxisCell\n */\n static defaultConfig () {\n return DEFAULT_CONFIG;\n }\n\n /**\n * return the space taken up by an axis element in the dom.\n *\n * @return {Object} Object with width and height fields.\n * @memberof AxisCell\n */\n getLogicalSpace () {\n if (!this.logicalSpace()) {\n this.logicalSpace(computeAxisSpace(this));\n }\n return this.logicalSpace();\n }\n\n /**\n * This method is used to set the space availiable to render\n * the SimpleCell.\n *\n * @param {number} width The width of SimpleCell.\n * @param {number} height The height of SimpleCell.\n * @return {Instance} Returns current Instance\n * @memberof AxisCell\n */\n setAvailableSpace (width, height) {\n this.availWidth(width);\n this.availHeight(height);\n const {\n margin,\n isOffset\n } = this.config();\n this.source().setAvailableSpace(width, height, margin, isOffset);\n this.logicalSpace(null);\n this.source().logicalSpace(null);\n return this;\n }\n\n /**\n * This method is used to render the axis inside the axis cell.\n *\n * @param {HTMLElement} mount The mount point.\n * @return {Selection} node where axis mounted\n * @memberof AxisCell\n */\n /* istanbul ignore next */render (mount) {\n if (!mount) {\n return this;\n }\n const axis = this.source();\n const availHeight = this.availHeight();\n const availWidth = this.availWidth();\n const {\n margin\n } = this.config();\n const {\n top,\n bottom,\n left,\n right\n } = margin;\n const {\n show\n } = axis.config();\n const wrapperDiv = makeElement(selectElement(mount), 'div', [this], `${CLASSPREFIX}-${AXIS_CELL}`);\n const selection = makeElement(wrapperDiv, 'svg', [1], `${CLASSPREFIX}-axis-container`);\n\n this.mount(mount);\n if (availWidth === 0 || !availWidth) {\n selection.attr(WIDTH, `${0}px`);\n }\n if (availHeight === 0 || !availHeight) {\n selection.attr(HEIGHT, `${0}px`);\n }\n wrapperDiv.style(WIDTH, `${show ? availWidth : 0}px`)\n .style(HEIGHT, `${show ? availHeight : 0}px`)\n .style('margin-top', top)\n .style('margin-bottom', bottom)\n .style('margin-left', left)\n .style('margin-right', right);\n\n axis.mount(selection.node());\n return selection;\n }\n\n /**\n * Disposes the cell\n *\n * @return {Instance} Current instance of AxisCell\n * @memberof AxisCell\n */\n remove () {\n this.source() && this.source().remove();\n this.mount() && this.mount().remove();\n return this;\n }\n}\n\nexport default AxisCell;\n\n","/**\n * This file declares a class that represents a BLANK element in a table.\n * @module VisualCell\n */\nimport {\n selectElement,\n makeElement,\n applyStyle,\n generateGetterSetters\n } from 'muze-utils';\nimport SimpleCell from './simple-cell';\nimport { CLASSPREFIX, BLANK_CELL } from './enums/constants';\nimport { BLANK } from './enums/cell-type';\nimport { DEFAULT_CONFIG } from './enums/defaults';\nimport { PROPS } from './props';\n\n/**\n * Represents a table haeder.\n *\n * @class BLANK\n */\nclass BlankCell extends SimpleCell {\n\n /**\n * Creates an instance of BLANK.\n * @param {Object} config The input configuration.\n * @memberof BLANK\n */\n constructor (config) {\n super(config);\n\n generateGetterSetters(this, PROPS[BLANK]);\n }\n\n /**\n * return the type pf SimpleCell cell.\n *\n * @readonly\n * @memberof BlankCell\n */\n get type () {\n return BLANK;\n }\n\n /**\n * This method return the value contained by this SimpleCell.\n *\n * @return {string} The text value contained by this cell.\n * @memberof BlankCell\n */\n valueOf () {\n return this.id;\n }\n\n /**\n * return the default configuration for the text cell\n *\n * @static\n * @return {Object} Default configuration of the cell\n * @memberof BlankCell\n */\n static defaultConfig () {\n return DEFAULT_CONFIG;\n }\n\n /**\n * This method is used to return a unique identifier for\n * the BLANK cell.\n *\n * @return {string} The unique identifier for the BLANK.\n * @memberof BlankCell\n */\n get id () {\n return this._id;\n }\n\n /**\n * This method is used to obtain a serialized representation of this instance.\n *\n * @return {Object} Object with serilizable props.\n * @memberof BLANK\n */\n serialize () {\n return {\n type: BLANK\n };\n }\n\n /**\n * This method return the space taken up\n * by the text with the style applied.\n *\n * @return {Object} width and height taken up by the text.\n * @memberof BLANK\n */\n getLogicalSpace () {\n if (!this.logicalSpace()) {\n return {\n width: this.width || 0,\n height: this.height || 0\n };\n }\n return this.logicalSpace();\n }\n\n /**\n * This method is used to set the available space.\n *\n * @param {number} width The available width.\n * @param {number} height The available height.\n * @return {Instance} Returns current Instance\n * @memberof BlankCell\n */\n setAvailableSpace (width, height) {\n this.availWidth(width);\n this.availHeight(height);\n this.logicalSpace(null);\n return this;\n }\n\n /**\n * This method is used to render the BLANK cell inside\n * the provided mount point.\n *\n * @param {HTMLElement} mount The mount point for this cell.\n * @return {Instance} Returns current Instance\n * @memberof BLANK\n */\n /* istanbul ignore next */render (mount) {\n if (mount) {\n const { style } = this.config();\n // append span element to mount point\n this.mount(mount);\n const container = selectElement(mount);\n const elem = makeElement(container, 'div', [this.id]);\n elem.classed(`${CLASSPREFIX}-${BLANK_CELL}`, true);\n elem.style('width', `${this.availWidth()}px`);\n elem.style('height', `${this.availHeight()}px`);\n elem.html('');\n // apply style on the returned element\n if (style) {\n applyStyle(elem, style);\n }\n } return this;\n }\n\n /**\n * Removes the cell(Disposal)\n *\n * @return {Instance} Returns current Instance\n * @memberof BlankCell\n */\n remove () {\n this.mount() && this.mount().remove();\n return this;\n }\n }\nexport default BlankCell;\n","/**\n * This file declares a class that represents a Text element in a table.\n * @module VisualCell\n */\n\nimport {\n selectElement,\n makeElement,\n getSmartComputedStyle,\n generateGetterSetters\n} from 'muze-utils';\nimport SimpleCell from './simple-cell';\nimport { TEXT } from './enums/cell-type';\nimport { PROPS } from './props';\nimport { DEFAULT_CONFIG } from './enums/defaults';\nimport { CLASSPREFIX, TOP, BOTTOM, LEFT, RIGHT, HEADER, WIDTH, TEXT_CELL } from './enums/constants';\nimport './text-cell.scss';\n\n/**\n* Computes the Logical Space for the text\n*\n* @param {Object} context Required to get the needed parameters to compute text space\n* @return {Object} Logical space taken up by text\n* @memberof TextCell\n*/\nconst computeTextSpace = (context) => {\n const { labelManager } = context.dependencies();\n const space = labelManager.getOriSize(context.source());\n const {\n margin,\n show\n } = context.config();\n\n labelManager.setStyle(context._computedStyle);\n if (show) {\n return {\n width: space.width + margin.left + margin.right + context._minTickDiff.width,\n height: space.height + margin.top + margin.bottom + context._minTickDiff.height\n };\n } return {\n width: 0,\n height: 0\n };\n};\n\n/**\n * Represents a table haeder.\n *\n * @class Text\n */\nclass TextCell extends SimpleCell {\n\n /**\n * Creates an instance of Text.\n * @param {Object} config The input configuration.\n * @param {string} dependencies Dependencies for the class(labelManager)\n * @memberof Text\n */\n constructor (config, dependencies) {\n super(config);\n\n this._dependencies = dependencies;\n this._className = this._config.className ||\n (this._config.type === HEADER ? `${CLASSPREFIX}-${HEADER}-cell` : `${CLASSPREFIX}-${TEXT}-cell`);\n this._computedStyle = getSmartComputedStyle(selectElement('body'), this._className);\n this._dependencies.labelManager.setStyle(this._computedStyle);\n this._minTickDiff = this._dependencies.labelManager.getOriSize('WW');\n\n generateGetterSetters(this, PROPS[TEXT]);\n }\n\n /**\n * return the type pf SimpleCell cell.\n *\n * @readonly\n * @memberof TextCell\n */\n get type () {\n return TEXT;\n }\n\n /**\n * This method return the value contained by this SimpleCell.\n *\n * @return {string} The text value contained by this cell.\n * @memberof TextCell\n */\n valueOf () {\n return this.source();\n }\n\n /**\n * This method is used to return a unique identifier for\n * the Text cell.\n *\n * @return {string} The unique identifier for the Text.\n * @memberof TextCell\n */\n get id () {\n return this._id;\n }\n\n /**\n * Returns the dependencies of the instance\n *\n * @return {Object} Dependencies needed by the class\n * @memberof TextCell\n */\n dependencies () {\n return this._dependencies;\n }\n\n /**\n * This method is used to obtain a serialized representation of this instance.\n *\n * @return {Object} Object with serilizable props.\n * @memberof TextCell\n */\n serialize () {\n return {\n text: this.source(),\n type: TEXT\n };\n }\n\n /**\n * return the default configuration for the text cell\n *\n * @static\n * @return {Object} Default configuration of the cell\n * @memberof TextCell\n */\n static defaultConfig () {\n return DEFAULT_CONFIG;\n }\n\n /**\n * This method return the space taken up\n * by the text with the style applied.\n *\n * @return {Object} width and height taken up by the text.\n * @memberof Text\n */\n getLogicalSpace () {\n if (!this.logicalSpace()) {\n this.logicalSpace(computeTextSpace(this));\n }\n return this.logicalSpace();\n }\n\n /**\n * This method is used to set the available space.\n *\n * @param {number} width The available width.\n * @param {number} height The available height.\n * @return {Instance} Returns current Instance\n * @memberof TextCell\n */\n setAvailableSpace (width, height) {\n this.availWidth(width);\n this.availHeight(height);\n this.logicalSpace(null);\n return this;\n }\n\n /**\n * This method is used to render the Text cell inside\n * the provided mount point.\n *\n * @param {HTMLElement} mount The mount point for this cell.\n * @return {Instance} Returns current Instance\n * @memberof Text\n */\n render (mount) {\n const availWidth = this.availWidth();\n const {\n margin,\n show,\n verticalAlign,\n textAlign\n } = this.config();\n\n this.mount(mount);\n if (show) {\n const container = selectElement(mount);\n const elem = makeElement(container, 'div', [this.id], `${CLASSPREFIX}-${TEXT_CELL}`);\n\n container.style('vertical-align', verticalAlign);\n elem.classed(this._className, true);\n // apply style on the returned element\n elem.style(WIDTH, availWidth ? `${availWidth}px` : '100%');\n [TOP, BOTTOM, LEFT, RIGHT].forEach((type) => {\n elem.style(`padding-${type}`, `${margin[type]}px`);\n });\n elem.style('text-align', textAlign);\n elem.style('display', 'inline');\n // set the text as the innerHTML\n elem.html(this.source());\n }\n return this;\n }\n\n /**\n * Disposes the cell\n *\n * @return {Instance} Returns current Instance\n * @memberof TextCell\n */\n remove () {\n this.mount() && this.mount().remove();\n return this;\n }\n }\n\nexport default TextCell;\n","/**\n * This file declares a class that is used to represent a table cell\n * that houses a visual unit.\n * @module VisualCell\n */\n\nimport { selectElement, makeElement, generateGetterSetters } from 'muze-utils';\nimport SimpleCell from './simple-cell';\nimport { GEOM } from './enums/cell-type';\nimport { PROPS } from './props';\nimport {\n CLASSPREFIX, HEIGHT, WIDTH, DATA, AXES, FACET_BY_FIELDS, FIELDS, TRANSFORM, LAYER_DEF, CONFIG, GEOM_CELL,\n DETAIL_FIELDS\n} from './enums/constants';\nimport { DEFAULT_CONFIG } from './enums/defaults';\n\n/**\n * Calculates the logical space of the cell\n *\n * @param {Object} context Required to get the needed parameters to compute unit space\n * @return {Object} Logical space taken up by the unit\n * @memberof GeomCell\n */\nconst computeGeomSpace = (context) => {\n const config = context.source().config();\n const { width, height } = config;\n return {\n width: Math.ceil(width),\n height: Math.ceil(height + context.getCaptionSpace().height)\n };\n};\n\n /**\n * This class represents a SimpleCell for visual unit.\n *\n * @class GeomCell\n */\nclass GeomCell extends SimpleCell {\n\n /**\n * Creates an instance of GeomCell.\n * @param {Object} config The input configuration.\n * @memberof GeomCell\n */\n constructor (config) {\n super(config);\n\n this._unit = null;\n this._layers = null;\n this._axes = {};\n this._datamodel = {};\n this._facetByFields = {};\n this._fields = null;\n this._transform = null;\n this._caption = null;\n\n generateGetterSetters(this, PROPS[GEOM]);\n }\n\n /**\n * return the type pf SimpleCell cell.\n *\n * @readonly\n * @memberof GeomCell\n */\n get type () {\n return GEOM;\n }\n\n /**\n * This method return the value contained by this cell.\n *\n * @return {VisualUnit} Instance of visual unit contained by visual unit.\n * @memberof GeomCell\n */\n valueOf () {\n return this.source();\n }\n\n /**\n * This method is used to return the id of the\n * visual unit housed by this cell.\n *\n * @return {string} The unique id of the visual unit.\n * @memberof GeomCell\n */\n get id () {\n return this.source().id();\n }\n\n /**\n * This method return a serialized representation of\n * this instance.\n *\n * @return {Object} Object with serializable props.\n * @memberof GeomCell\n */\n serialize () {\n return {\n type: GEOM,\n unit: this.source().serialize(),\n caption: this.caption()\n };\n }\n\n /**\n * return the default configuration for the geom cell\n *\n * @static\n * @return {Object} Default configuration of the cell\n * @memberof GeomCell\n */\n static defaultConfig () {\n return DEFAULT_CONFIG;\n }\n\n /**\n * Updates the model based on the changed parameters\n *\n * @return {Instance} return instance\n * @memberof GeomCell\n */\n updateModel () {\n const unit = this.source();\n unit.lockModel();\n [DATA, AXES, FACET_BY_FIELDS, FIELDS, TRANSFORM, LAYER_DEF, CONFIG, DETAIL_FIELDS].forEach((prop) => {\n this[prop]() && unit[prop](this[prop]());\n });\n unit.unlockModel();\n return this;\n }\n\n /**\n * It gives the space taken by the caption of the unit\n *\n * @return {Object} return the space taken by caption\n * @memberof GeomCell\n */\n getCaptionSpace () {\n const caption = this.caption();\n\n let captionSpace = { width: 0, height: 0 };\n if (caption) {\n captionSpace = caption.getLogicalSpace();\n }\n return captionSpace;\n }\n\n /**\n * return the space taken up by the element in the dom.\n *\n * @return {Object} Object with width and height fields.\n * @memberof GeomCell\n */\n getLogicalSpace () {\n if (!this.logicalSpace()) {\n this.logicalSpace(computeGeomSpace(this));\n }\n return this.logicalSpace();\n }\n\n /**\n * This method is used to set the space available to\n * render the SimpleCell.\n *\n * @param {number} width The available width.\n * @param {number} height The available height.\n * @return {Instance} Returns current Instance\n * @memberof GeomCell\n */\n setAvailableSpace (width, height) {\n const unit = this.source();\n\n this.availWidth(width);\n this.availHeight(height);\n unit.lockModel();\n unit.width(width).height(height - this.getCaptionSpace().height);\n unit.unlockModel();\n this.logicalSpace(null);\n return this;\n }\n\n /**\n * his method is used to render the visual unit inside the provided cell.\n *\n * @param {HTMLElement} mount The mountpoint in the table.\n * @return {Instance} Returns current Instance\n * @memberof GeomCell\n */\n render (mount) {\n if (mount) {\n this.mount(mount);\n const availHeight = this.availHeight();\n const availWidth = this.availWidth();\n const caption = this.caption();\n const wrapperDiv = makeElement(selectElement(mount), 'div', [1], `${CLASSPREFIX}-${GEOM_CELL}`);\n\n if (caption) {\n const captionDom = makeElement(wrapperDiv, 'div', [caption], `${CLASSPREFIX}-unit-caption`).node();\n caption.render(captionDom);\n }\n const selection = makeElement(wrapperDiv, 'div', [1], `${CLASSPREFIX}-unit`);\n wrapperDiv.style(WIDTH, `${availWidth}px`).style(HEIGHT, `${availHeight}px`);\n selection.style(WIDTH, `${availWidth}px`)\n .style(HEIGHT, `${availHeight - this.getCaptionSpace().height}px`);\n this.source().mount(selection.node());\n }\n return this;\n }\n\n /**\n * Disposes the cell\n *\n * @return {Object} Current instance\n * @memberof GeomCell\n */\n remove () {\n this.mount() && this.mount().remove();\n this.source().remove();\n return this;\n }\n}\n\nexport default GeomCell;\n","import AxisCell from './axis-cell';\nimport BlankCell from './blank-cell';\nimport TextCell from './text-cell';\nimport GeomCell from './geom-cell';\nimport SimpleCell from './simple-cell';\n\nimport * as CONSTANTS from './constants';\n\nexport const DEFAULT_PLACEHOLDERS = {\n [CONSTANTS.SIMPLE_CELL]: SimpleCell,\n [CONSTANTS.TEXT_CELL]: TextCell,\n [CONSTANTS.AXIS_CELL]: AxisCell,\n [CONSTANTS.GEOM_CELL]: GeomCell,\n [CONSTANTS.BLANK_CELL]: BlankCell\n};\n\n","export const SIMPLE_CELL = 'SimpleCell';\nexport const TEXT_CELL = 'TextCell';\nexport const AXIS_CELL = 'AxisCell';\nexport const BLANK_CELL = 'BlankCell';\nexport const GEOM_CELL = 'GeomCell';\n\n","import { DEFAULT_PLACEHOLDERS } from './defaults';\n\n/**\n * Creates a registry for the cells, which can be used for\n * setting a new cell or getting the registered cells\n *\n * @return {Object} Setters and getters for registered cells\n */\nconst cellRegistry = () => {\n const reg = DEFAULT_PLACEHOLDERS;\n return {\n set: (key, def) => {\n if (key in reg) {\n reg[key] = def;\n }\n return cellRegistry;\n },\n get: () => reg\n };\n};\nexport default cellRegistry;\n","import { TextCell } from '@chartshq/visual-cell';\nimport { escapeHTML } from 'muze-utils';\n\n/**\n *\n *\n * @param {*} rawContent\n * @returns\n */\nconst resolveTitleSubTitleContent = (rawContent) => {\n if (typeof rawContent === 'function' && !rawContent._sanitize) {\n return rawContent();\n }\n return escapeHTML(rawContent());\n};\n\n/**\n *\n *\n * @param {*} config\n * @param {*} cellType\n * @param {*} labelManager\n * @param {*} prevCell\n * @returns\n */\nconst headerCreator = (config, cellType, labelManager, prevCell) => {\n const {\n content\n } = config;\n const cell = prevCell || new TextCell({ type: cellType }, { labelManager });\n\n cell.source(content);\n\n return {\n height: cell.getLogicalSpace().height,\n cell\n };\n};\n\n/**\n *\n *\n * @param {*} config\n * @param {*} type\n * @param {*} labelManager\n * @param {*} cell\n * @returns\n */\nconst createHeading = (config, type, labelManager, prevCell) => {\n if (!config) { return ''; }\n\n return headerCreator(\n config,\n type === 'title' ? 'header' : 'text',\n labelManager,\n prevCell\n );\n};\n\n/**\n *\n *\n * @param {*} context\n */\nexport const createHeaders = (context, canvasHeight, canvasWidth) => {\n let headerHeight = 0;\n const headers = {};\n\n canvasHeight >= 200 && canvasWidth >= 200 && ['title', 'subtitle'].forEach((type) => {\n const headerOptions = context[type]();\n const content = resolveTitleSubTitleContent(headerOptions[0]);\n if (content.length) {\n const config = headerOptions[1];\n\n config.width = context.width();\n config.content = content;\n\n const { height, cell } = createHeading(config, type, context.dependencies().smartlabel,\n context[`${type}Cell`]);\n\n headers[`${type}Cell`] = cell;\n context._composition[type] = cell;\n headerHeight += height + config.padding;\n }\n });\n return { headerHeight, headers };\n};\n\n","import { TextCell, AxisCell } from '@chartshq/visual-cell';\nimport {\n VERTICAL, HORIZONTAL, LEFT, RIGHT, LEGEND_TYPE_MAP, PADDING, BORDER, MARGIN\n} from '../constants';\n\n/**\n *\n *\n * @param {*} legendConfig\n * @param {*} canvases\n * @returns\n */\nexport const legendCreator = (canvas) => {\n let LegendCls;\n const dataset = [];\n const axes = canvas.getRetinalAxes();\n\n Object.entries(axes).forEach((axisInfo) => {\n const scale = axisInfo[1][0];\n const scaleType = axisInfo[0];\n const scaleProps = canvas[scaleType]();\n\n if (scaleProps.field) {\n const {\n type,\n step\n } = scale.config();\n\n const stepMapper = typeof step === 'boolean' ? step : false;\n LegendCls = LEGEND_TYPE_MAP[`${type}-${stepMapper}-${scaleType}`];\n dataset.push({ scale, canvas, fieldName: scaleProps.field, LegendCls, scaleType });\n }\n });\n\n return dataset;\n};\n\n/**\n *\n *\n * @param {*} legendConfig\n * @param {*} canvases\n * @param {*} measurement\n * @param {*} prevLegends\n * @returns\n */\nexport const legendInitializer = (legendConfig, canvas, measurement, prevLegends) => {\n const legends = [];\n const {\n height,\n width,\n headerHeight\n } = measurement;\n const {\n position,\n align\n } = legendConfig;\n\n const legendInfo = legendCreator(canvas);\n\n legendInfo.forEach((dataInfo, index) => {\n let legend = {};\n\n const legendMeasures = {};\n const {\n LegendCls,\n scale,\n fieldName,\n scaleType\n } = dataInfo;\n const config = legendConfig[scaleType] || {};\n const title = config.title || {};\n title.text = title.text || fieldName;\n if (config.show) {\n config.position = position;\n config.align = align;\n\n if (prevLegends[index]) {\n legend = prevLegends[index].legend;\n } else {\n legend = LegendCls.create({\n labelManager: canvas._dependencies.smartlabel,\n cells: {\n AxisCell, TextCell\n }\n });\n }\n legendMeasures.maxHeight = align === VERTICAL ? (height - headerHeight) : height * 0.2;\n legendMeasures.maxWidth = align === HORIZONTAL ? width : width * 0.2;\n legendMeasures.width = Math.min(legendMeasures.maxWidth, config.width);\n legendMeasures.height = Math.min(legendMeasures.maxHeight, config.height);\n\n [PADDING, BORDER, MARGIN].forEach((e) => {\n legendMeasures[e] = config[e];\n });\n legend.scale(scale)\n .title(title)\n .fieldName(fieldName)\n .config(config)\n .metaData(canvas.composition().visualGroup.getGroupByData().project([fieldName]))\n .measurement(legendMeasures)\n .canvasAlias(canvas.alias())\n .setLegendMeasures();\n\n legends.push({ canvas, legend, scaleType });\n }\n });\n return legends;\n};\n\n/**\n *\n *\n * @param {*} legends\n * @param {*} legendConfig\n * @param {*} availableHeight\n * @param {*} availableWidth\n * @returns\n */\nexport const getLegendSpace = (legends, legendConfig, availableHeight, availableWidth) => {\n const legendMeasures = legends.map(legendInfo => legendInfo.legend.measurement());\n const legendSpace = { width: 0, height: 0 };\n\n legendMeasures.forEach((space) => {\n let height = 0;\n let width = 0;\n width = Math.min(space.width, space.maxWidth);\n height = Math.min(space.height, space.maxHeight);\n\n if (legendConfig.align === HORIZONTAL) {\n if (legendSpace.width + width > availableWidth) {\n legendSpace.width = availableWidth;\n legendSpace.height += height;\n } else {\n legendSpace.width += width;\n legendSpace.height = Math.max(legendSpace.height, height);\n }\n } else if (legendSpace.height + height > availableHeight) {\n legendSpace.height = height;\n legendSpace.width += width;\n } else {\n legendSpace.height += height;\n legendSpace.width = Math.max(legendSpace.width, width);\n }\n });\n if (legendConfig.align === HORIZONTAL) {\n legendSpace.width = availableWidth;\n }\n return legendSpace;\n};\n\n/**\n *\n *\n * @param {*} context\n * @param {*} headerHeight\n * @returns\n */\nexport const createLegend = (context, headerHeight, height, width) => {\n const measurement = {\n height,\n width,\n headerHeight\n };\n const { legend } = context.config();\n const { show, position } = legend;\n\n legend.classPrefix = context.config().classPrefix;\n const align = (position === LEFT || position === RIGHT) ? VERTICAL : HORIZONTAL;\n\n legend.show = show ? ((align === VERTICAL && width > 200) || (align === HORIZONTAL && height > 200)) : show;\n legend.align = align;\n return legendInitializer(legend, context, measurement, context.legends || []);\n};\n","import { mergeRecursive } from 'muze-utils';\nimport { arrangeComponents } from './component-resolver';\nimport { createHeaders } from './title-maker';\nimport { createLegend, getLegendSpace } from './legend-maker';\nimport { TOP, BOTTOM, LEFT, RIGHT } from '../constants';\n\n/**\n *\n *\n * @param {*} context\n * @returns\n */\nexport const prepareLayout = (layout, components, config, measurement) => {\n const {\n rows,\n columns,\n values,\n cornerMatrices\n } = components;\n\n const {\n topLeft,\n topRight,\n bottomLeft,\n bottomRight\n } = cornerMatrices;\n\n layout.measurement(measurement)\n .config(config)\n .matrices({\n top: [topLeft, columns[0], topRight],\n center: [rows[0], values, rows[1]],\n bottom: [bottomLeft, columns[1], bottomRight]\n })\n .triggerReflow();\n};\n\n/**\n *\n *\n * @param {*} context\n * @param {*} mount\n * @returns\n */\nexport const getRenderDetails = (context, mount) => {\n let layoutConfig = mergeRecursive({}, context.config());\n // Get height width of the mount point\n let { height, width } = mount.getBoundingClientRect();\n const heightAttr = context.height();\n const widthAttr = context.width();\n const visGroup = context.composition().visualGroup;\n const {\n isColumnSizeEqual,\n isRowSizeEqual,\n rows,\n columns,\n values\n } = visGroup.placeholderInfo();\n const {\n minWidth,\n minHeight,\n classPrefix,\n showHeaders,\n legend\n } = context.config();\n // Get title configuration\n const titleConfig = context.title()[1];\n // Get subtitle configuration\n const subtitleConfig = context.subtitle()[1];\n // Get legend position\n const legendPosition = legend.position;\n // Arrange components according to config\n const layoutArrangement = arrangeComponents(context);\n\n height = Math.floor(height);\n width = Math.floor(width);\n\n const availableHeightForCanvas = Math.max(heightAttr > 0 ? heightAttr : height, minHeight);\n const availableWidthForCanvas = Math.max(widthAttr > 0 ? widthAttr : width, minWidth);\n\n // Create headers and determine header height\n const { headers, headerHeight } = createHeaders(context, availableHeightForCanvas, availableWidthForCanvas);\n\n // Create legends and determine legend space\n const legends = createLegend(context, headerHeight, availableHeightForCanvas, availableWidthForCanvas);\n context._composition.legend = {};\n legends.forEach((e) => {\n context._composition.legend[e.scaleType] = e.legend;\n });\n\n const legendSpace = getLegendSpace(legends, legend, availableHeightForCanvas, availableWidthForCanvas);\n const legendWidth = (legendPosition === LEFT || legendPosition === RIGHT) ? legendSpace.width : 0;\n const legendHeight = (legendPosition === TOP || legendPosition === BOTTOM) ? legendSpace.height : 0;\n\n // Set components for layouting\n const components = {\n headers,\n legends,\n canvases: [context],\n rows,\n columns,\n values,\n cornerMatrices: visGroup.cornerMatrices()\n };\n const measurement = {\n mountSpace: {\n height,\n width\n },\n headerHeight,\n legendSpace,\n canvasWidth: availableWidthForCanvas,\n canvasHeight: availableHeightForCanvas,\n width: availableWidthForCanvas - legendWidth,\n height: availableHeightForCanvas - headerHeight - legendHeight,\n minUnitHeight: context.minUnitHeight(),\n minUnitWidth: context.minUnitWidth()\n };\n layoutConfig = mergeRecursive(layoutConfig, {\n classPrefix,\n showHeaders,\n border: mergeRecursive(visGroup.metaData().border, context.config().border),\n layoutArrangement,\n legend,\n title: titleConfig,\n subtitle: subtitleConfig,\n isColumnSizeEqual,\n isRowSizeEqual\n });\n return {\n layoutConfig,\n components,\n measurement\n };\n};\n","export const TITLE_CONFIG = {\n position: 'top',\n align: 'left',\n padding: 8\n};\n\nexport const SUB_TITLE_CONFIG = {\n position: 'top',\n align: 'left',\n padding: 16\n};\n","import { mergeRecursive, selectElement } from 'muze-utils';\nimport {\n ROWS,\n COLUMNS,\n COLOR,\n SHAPE,\n SIZE,\n DETAIL,\n LAYERS,\n TRANSFORM,\n MOUNT,\n TITLE,\n SUB_TITLE\n} from '../constants';\nimport { TITLE_CONFIG, SUB_TITLE_CONFIG } from './defaults';\n/**\n * @module\n * This is the local options semantics based on which setters getters are created and reactivity is initiated.\n * This local object is only valid for Canvas.\n * Canvas merges global and local object both to the model\n *\n * Format\n * PROPERTRY_NAME: {\n * value: // default value of the property,\n * meta: {\n * typeCheck: // The setter value will be checked using this. If the value is function then the setter value\n * // is passed as args.\n * typeExpected: // The output of typecheck action will be tested against this. Truthy value will set the\n * // value to the setter\n * sanitizaiton: // Need for sanitization before type is checked\n * }\n * }\n */\n\nexport const localOptions = {\n [ROWS]: {\n value: null,\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Array'\n }\n },\n [COLUMNS]: {\n value: null,\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Array'\n }\n },\n [COLOR]: {\n value: null,\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Object',\n sanitization: (config) => {\n if (typeof config === 'string') {\n return {\n field: config\n };\n }\n return config;\n }\n }\n },\n [SHAPE]: {\n value: null,\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Object',\n sanitization: (config) => {\n if (typeof config === 'string') {\n return {\n field: config\n };\n }\n return config;\n }\n }\n },\n [SIZE]: {\n value: null,\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Object',\n sanitization: (config) => {\n if (typeof config === 'string') {\n return {\n field: config\n };\n }\n return config;\n }\n }\n },\n [DETAIL]: {\n value: [],\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Array'\n }\n },\n\n [LAYERS]: {\n value: null,\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Array'\n }\n },\n [TRANSFORM]: {\n value: null,\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Object'\n }\n },\n [MOUNT]: {\n value: null,\n meta: {\n sanitization: (value) => {\n if (typeof value === 'string') {\n return selectElement(value).node();\n }\n return value;\n }\n }\n }\n};\n\nexport const canvasOptions = {\n [TITLE]: {\n value: [null, null],\n meta: {\n typeCheck: ['constructor', 'constructor'],\n typeExpected: ['Function', 'Object'],\n spreadParams: true,\n sanitization: [(title) => {\n if (typeof title === 'string') {\n const t = () => title;\n t._sanitized = true;\n return t;\n }\n return title;\n }, (titleConfig) => {\n const defConfig = mergeRecursive({}, TITLE_CONFIG);\n return mergeRecursive(defConfig, titleConfig);\n }]\n }\n },\n [SUB_TITLE]: {\n value: [null, null],\n meta: {\n typeCheck: ['constructor', 'constructor'],\n typeExpected: ['Function', 'Object'],\n spreadParams: true,\n sanitization: [(subtitle) => {\n if (typeof subtitle === 'string') {\n const sub = () => subtitle;\n sub._sanitized = true;\n return sub;\n }\n return subtitle;\n }, (subtitleConfig) => {\n const defConfig = mergeRecursive({}, SUB_TITLE_CONFIG);\n return mergeRecursive(defConfig, subtitleConfig);\n }]\n }\n }\n};\n","import { makeElement, selectElement } from 'muze-utils';\nimport { VERTICAL, HORIZONTAL, TOP, LEFT, RIGHT, BOTTOM } from '../constants';\n\n/**\n * Sets the rotation for all x axes if any axis has the rotation config set in the\n * entire view\n *\n * @param {Array} columns Column cells that contain the axes cells\n */\nconst setLabelRotationForAxes = (context) => {\n let rotation = 0;\n\n const xAxes = context.xAxes() || [];\n\n (() => {\n for (let i = 0; i < xAxes.length; i++) {\n for (let j = 0; j < xAxes[i].length; j++) {\n if (xAxes[i][j].config().labels.rotation !== 0) {\n rotation = xAxes[i][j].config().labels.rotation;\n return;\n }\n }\n }\n })();\n\n if (rotation) {\n xAxes.forEach((axes) => {\n axes.forEach((axis) => {\n axis.config({ labels: { rotation, smartTicks: false } });\n });\n });\n }\n};\n\n/**\n *\n *\n * @param {*} context\n * @param {*} mount\n * @returns\n */\nconst getSkeletons = (mount, layoutConfig, measurement) => {\n const {\n layoutArrangement,\n classPrefix\n } = layoutConfig;\n const {\n headers,\n legends\n } = layoutArrangement;\n const {\n canvasWidth,\n canvasHeight\n } = measurement;\n const container = selectElement(mount);\n const components = {};\n const mountPoint = makeElement(container, 'div', [1], `${classPrefix}-viz`)\n .style('width', `${canvasWidth}px`)\n .style('height', `${canvasHeight}px`);\n const containers = mountPoint\n .selectAll(`.${classPrefix}-container`)\n .data(headers);\n containers.exit().remove();\n const containersEnter = containers.enter().append('div');\n\n const mergedContainer = containersEnter.merge(containers)\n .attr('class', `${classPrefix}-container`)\n .style('width', `${canvasWidth}px`)\n .style('padding', `${null}px`)\n .style('margin', null)\n .each(function (type) {\n components[type] = selectElement(this).classed(`${classPrefix}-${type}-container`, true);\n });\n const innerContainer = mergedContainer\n .selectAll(`.${classPrefix}-inner-container`)\n .data((d) => {\n if (d === 'group') {\n return legends;\n } return [];\n });\n innerContainer.exit().remove();\n const innerContainerEnter = innerContainer.enter().append('div');\n\n innerContainerEnter\n .merge(innerContainer)\n .attr('class', `${classPrefix}-inner-container`)\n .style('width', 'auto')\n .style('height', 'auto')\n .each(function (layoutType) {\n components[layoutType] = selectElement(this)\n .classed(`${classPrefix}-${layoutType}-container`, true);\n });\n return components;\n};\n\n/**\n *\n *\n * @param {*} context\n * @param {*} container\n * @param {*} legendComponents\n */\nconst renderLegend = (legendConfig, container, legendComponents, measurement) => {\n const sectionComponents = [];\n const { legendSpace, headerHeight, height, width } = measurement;\n const { legend, classPrefix } = legendConfig;\n const { position } = legend;\n const legendMount = makeElement(container, 'div', [legendComponents], `${classPrefix}-inner-content`, {}, d => d);\n legendMount.classed(`${classPrefix}-legend`, true);\n const align = (position === LEFT || position === RIGHT) ? VERTICAL : HORIZONTAL;\n const legWidth = align === VERTICAL ? legendSpace.width : width;\n const legHeight = align === VERTICAL ? height - headerHeight : legendSpace.height;\n\n [container, legendMount].forEach((elem) => {\n elem.style('width', `${Math.floor(legWidth)}px`)\n .style('height', `${legHeight}px`)\n .style('float', LEFT);\n });\n\n if (align === VERTICAL) {\n let sections = -1;\n let currHeight = legHeight;\n let currWidth = 0;\n\n legendComponents.forEach((legendInfo) => {\n const leg = legendInfo.legend;\n if (leg.measurement().height > currHeight) {\n sections++;\n currWidth = 0;\n currHeight = legHeight;\n } else {\n sections < 0 && sections++;\n }\n sectionComponents[sections] = sectionComponents[sections] || [];\n currHeight -= Math.min(leg.measurement().height, currHeight);\n currWidth = Math.max(Math.min(leg.measurement().width, leg.measurement().maxWidth), currWidth);\n sectionComponents[sections].push({\n legend: leg,\n legendHeight: legHeight,\n legendWidth: currWidth\n });\n });\n\n const mount = makeElement(legendMount, ['div'], sectionComponents, `${classPrefix}-legend-section`)\n .each((d, i) => selectElement(this).classed(`${classPrefix}-legend-section-${i}`, true))\n .classed(`${classPrefix}-legend-vertical-section`, true)\n .style('width', d => `${d[0].legendWidth}px`);\n makeElement(mount, ['div'], d => d, `${classPrefix}-legend-components`, {}, d => d.legend.id())\n .each(function (d) {\n d.legend.mount(this);\n })\n .style('width', d => `${d.legendWidth}px`);\n } else {\n const mount = makeElement(legendMount, 'div', [1], `${classPrefix}-legend-section`)\n .classed(`${classPrefix}-legend-horizontal-section`, true)\n .classed(`${classPrefix}-legend-section-${0}`, true)\n .style('width', `${legWidth}px`);\n\n makeElement(mount, 'div', legendComponents, `${classPrefix}-legend-components`, {}, d => d.legend.id())\n .each(function (d) { d.legend.mount(this); })\n .style('width', d => `${d.legend.measurement().width}px`);\n }\n};\n\n/**\n *\n *\n * @param {*} context\n * @param {*} container\n * @param {*} type\n * @param {*} headers\n */\nconst renderHeader = (layoutConfig, container, type, headers) => {\n const headerCell = headers[`${type}Cell`];\n const config = layoutConfig[`${type}`];\n const { position, align, padding } = config;\n const sel = container\n .selectAll(`.${layoutConfig.classPrefix}-inner-container`)\n .data([type]);\n sel.exit().remove();\n const selEnter = sel.enter().append('div');\n\n const cont = selEnter.merge(sel);\n cont.classed(`${layoutConfig.classPrefix}-inner-container`, true);\n\n headerCell && headerCell.render(cont.node());\n\n cont.selectAll('div').classed(`${layoutConfig.classPrefix}-inner-content`, true);\n cont.style('width', `${100}%`);\n\n if (config && headerCell) {\n cont.style('float', LEFT)\n .style('text-align', align)\n .style(`padding-${position === TOP ? BOTTOM : TOP}`, `${padding}px`);\n }\n};\n\n/**\n *\n *\n * @param {*} context\n * @param {*} shifter\n */\nconst shiftHeaders = (config, shifter, measurement, mount) => {\n const { classPrefix, title, subtitle, legend } = config;\n const { legendSpace } = measurement;\n const { position } = legend;\n\n shifter += position === LEFT ? legendSpace.width : 0;\n title && selectElement(mount).select(`.${classPrefix}-title-container`)\n .style('width', title.align === LEFT ? `calc(100% - ${shifter}px` : '100%')\n .style('margin-left', title.align === LEFT ? `${shifter}px` : 0);\n subtitle && selectElement(mount).select(`.${classPrefix}-subtitle-container`)\n .style('width', subtitle.align === LEFT ? `calc(100% - ${shifter}px` : '100%')\n .style('margin-left', subtitle.align === LEFT ? `${shifter}px` : 0);\n\n selectElement(mount).select(`.${classPrefix}-legend-horizontal-section`)\n .style('margin-left', `${shifter}px`)\n .style('width', `${legendSpace.width - shifter}px`)\n .selectAll(`.${classPrefix}-legend-body, .${classPrefix}-legend-title`)\n .style('max-width', `${legendSpace.width - shifter}px`);\n selectElement(mount).select(`.${classPrefix}-legend-vertical-section`)\n .style('margin-left', null)\n .selectAll(`.${classPrefix}-legend-body, .${classPrefix}-legend-title`)\n .style('max-width', null);\n};\n\n/**\n *\n *\n * @param {*} mountPoint\n * @param {*} measurement\n * @param {*} classPrefix\n * @returns\n */\nconst prepareGridContainer = (mountPoint, measurement, classPrefix, alias) => {\n if (!mountPoint) {\n return this;\n }\n\n const {\n height,\n width\n } = measurement;\n // Create container for the layout\n\n const sel = selectElement(mountPoint)\n .selectAll(`.${classPrefix}-inner-content`)\n .data(['layout'], d => d);\n sel.exit().remove();\n const selEnter = sel.enter().append('div');\n\n const container = selEnter.merge(sel)\n .attr('class', `${classPrefix}-inner-content`)\n .classed(`${classPrefix}-grid-layout`, true)\n .attr('id', `${classPrefix}-grid-layout-${alias}`)\n .style('height', `${height}px`)\n .style('padding', null)\n .style('width', `${Math.ceil(width)}px`);\n // Mount for matrices\n const innerSel = container.selectAll(`.${classPrefix}-layout-grid-container`)\n .data(['layout2']);\n innerSel.exit().remove();\n const innerSelEnter = innerSel.enter().append('div');\n\n const mount = innerSelEnter.merge(innerSel);\n mount.classed(`${classPrefix}-layout-grid-container`, true)\n .attr('id', `${classPrefix}-layout-grid-container-${alias}`)\n .style('height', `${height}px`)\n .style('width', `${Math.ceil(width)}px`);\n\n return {\n mount,\n container\n };\n};\n\n/**\n *\n *\n * @param {*} context\n * @param {*} components\n * @param {*} layoutConfig\n * @param {*} measurement\n */\nexport const renderComponents = (context, components, layoutConfig, measurement) => {\n const mountPoint = context.mount();\n const {\n headers,\n legends\n } = components;\n const {\n classPrefix\n } = layoutConfig;\n const {\n title,\n legend,\n subtitle,\n layout\n } = getSkeletons(mountPoint, layoutConfig, measurement);\n const {\n mount\n } = prepareGridContainer(layout.node(), measurement, classPrefix, context.alias());\n const padding = context.layout().getViewInformation().layoutDimensions.viewWidth[0];\n measurement.padding = padding;\n setLabelRotationForAxes(context);\n\n // Render layout\n context.layout().renderGrid(mount);\n context.once('layer.drawn').then(() => {\n renderHeader(layoutConfig, title, 'title', headers);\n renderHeader(layoutConfig, subtitle, 'subtitle', headers);\n renderLegend(layoutConfig, legend, legends, measurement);\n shiftHeaders(layoutConfig, padding, measurement, mountPoint);\n });\n context.composition().visualGroup.matrixInstance().value.each((el) => {\n el.valueOf().parentContainer(layout.node());\n });\n};\n","import { isEqual } from 'muze-utils';\nimport { ROWS, COLUMNS, COLOR, SHAPE, SIZE, MOUNT, DETAIL, DATA, CONFIG } from '../constants';\nimport { canvasOptions } from './local-options';\n\n/**\n * Instantiate high level components. Canvas knows what all high level component it has.\n * @nice-to-have dynamic high level components.\n * - Is it even required ?\n * - Reactive to source (canvas) streaming ?\n * @param {*} context Canvas instance\n * @return {Object.fArray>} Arrays of Title, visualGroup, Legend\n */\nexport const initCanvas = (context) => {\n const reg = context._registry.components;\n\n return [new reg.VisualGroup(context._registry, context.dependencies())];\n};\n\n/**\n *\n *\n * @memberof Canvas\n */\nexport const dispatchProps = (context) => {\n const lifeCycleManager = context.dependencies().lifeCycleManager;\n lifeCycleManager.notify({ client: context, action: 'beforeupdate' });\n const visualGroup = context.composition().visualGroup;\n\n visualGroup.lockModel();\n const allOptions = context._allOptions;\n for (const key in allOptions) {\n const value = context[key]();\n if (value !== null) {\n visualGroup[key] && visualGroup[key](value);\n }\n }\n visualGroup.unlockModel();\n\n context._cachedProps = {};\n lifeCycleManager.notify({ client: context, action: 'initialized' });\n lifeCycleManager.notify({ client: context, action: 'updated' });\n};\n\n/**\n *\n *\n */\nexport const setupChangeListener = (context) => {\n const store = context._store;\n\n store.registerImmediateListener(MOUNT, () => {\n const allOptions = Object.keys(context._allOptions);\n const props = [...allOptions, ...Object.keys(canvasOptions)];\n let equalityChecker = () => false;\n store.registerChangeListener(props, (...params) => {\n const updateProps = props.every((option, i) => {\n switch (option) {\n case ROWS:\n case COLUMNS:\n case DETAIL:\n equalityChecker = isEqual('Array');\n break;\n\n case SHAPE:\n case SIZE:\n case COLOR:\n case DATA:\n case CONFIG:\n equalityChecker = isEqual('Object');\n break;\n default:\n equalityChecker = () => true;\n break;\n }\n const oldVal = params[i][0];\n const newVal = params[i][1];\n\n return equalityChecker(oldVal, newVal);\n });\n // inform attached board to rerender\n !updateProps && dispatchProps(context);\n context.render();\n }, true);\n });\n};\n\nexport const applyInteractionPolicy = (policies, firebolt) => {\n const canvas = firebolt.context;\n const visualGroup = canvas.composition().visualGroup;\n const valueMatrix = visualGroup.composition().matrices.value;\n policies.forEach(policy => policy(valueMatrix, firebolt));\n};\n","import {\n getDataModelFromIdentifiers,\n FieldType,\n mergeRecursive\n} from 'muze-utils';\n\nimport { applyInteractionPolicy } from './helper';\n\nconst defaultInteractionPolicy = (valueMatrix, firebolt) => {\n const isMeasure = field => field.type() === FieldType.MEASURE;\n const canvas = firebolt.context;\n const visualGroup = canvas.composition().visualGroup;\n const xFields = [].concat(...visualGroup.getFieldsFromChannel('x'));\n const yFields = [].concat(...visualGroup.getFieldsFromChannel('y'));\n const colDim = xFields.every(field => field.type() === FieldType.DIMENSION);\n const fieldInf = visualGroup.resolver().getAllFields();\n const rowFacets = fieldInf.rowFacets;\n const colFacets = fieldInf.colFacets;\n valueMatrix.each((cell) => {\n const unitFireBolt = cell.valueOf().firebolt();\n\n if (!(xFields.every(isMeasure) && yFields.every(isMeasure))) {\n const facetFields = cell.valueOf().facetByFields()[0];\n const unitColFacets = facetFields.filter(d => colFacets.findIndex(v => v.equals(d)) !== -1);\n const unitRowFacets = facetFields.filter(d => rowFacets.findIndex(v => v.equals(d)) !== -1);\n let propFields;\n if (colDim) {\n propFields = unitColFacets.map(d => `${d}`);\n } else {\n propFields = unitRowFacets.map(d => `${d}`);\n }\n\n unitFireBolt.propagateWith('*', propFields, true);\n }\n });\n};\n\nconst defaultCrossInteractionPolicy = {\n behaviours: {\n '*': (propagationPayload, context) => {\n const propagationCanvasAlias = propagationPayload.sourceCanvas;\n const canvasAlias = context.parentAlias();\n return propagationCanvasAlias ? canvasAlias === propagationCanvasAlias : true;\n }\n },\n sideEffects: {\n tooltip: (propagationPayload, context) => {\n const propagationUnit = propagationPayload.sourceUnit;\n const propagationCanvas = propagationPayload.sourceCanvas;\n const unitId = context.id();\n const canvasAlias = context.parentAlias();\n if (propagationCanvas) {\n return propagationCanvas !== canvasAlias ? true : unitId === propagationUnit;\n }\n return true;\n }\n }\n};\n\nexport default class GroupFireBolt {\n constructor (context) {\n this.context = context;\n this._interactionPolicy = this.constructor.defaultInteractionPolicy();\n this._crossInteractionPolicy = this.constructor.defaultCrossInteractionPolicy();\n this.context.once('canvas.updated').then(() => {\n applyInteractionPolicy([this._interactionPolicy], this);\n const crossInteractionPolicy = this._crossInteractionPolicy;\n const behaviours = crossInteractionPolicy.behaviours;\n const sideEffects = crossInteractionPolicy.sideEffects;\n const visualGroup = context.composition().visualGroup;\n const valueMatrix = visualGroup.composition().matrices.value;\n valueMatrix.each((cell) => {\n const unitFireBolt = cell.valueOf().firebolt();\n for (const key in behaviours) {\n unitFireBolt.changeBehaviourStateOnPropagation(key, behaviours[key]);\n }\n for (const key in sideEffects) {\n unitFireBolt.changeSideEffectStateOnPropagation(key, sideEffects[key]);\n }\n });\n });\n }\n\n static defaultInteractionPolicy () {\n return defaultInteractionPolicy;\n }\n\n static defaultCrossInteractionPolicy () {\n return defaultCrossInteractionPolicy;\n }\n\n interactionPolicy (...policy) {\n if (policy.length) {\n this._interactionPolicy = policy[0] || this.constructor.defaultInteractionPolicy();\n return this;\n }\n return this._interactionPolicy;\n }\n\n crossInteractionPolicy (...policy) {\n if (policy.length) {\n this._crossInteractionPolicy = mergeRecursive(mergeRecursive({},\n this.constructor.defaultCrossInteractionPolicy()), policy[0] || {});\n return this;\n }\n return this._crossInteractionPolicy;\n }\n\n dispatchBehaviour (behaviour, payload) {\n const propPayload = Object.assign(payload);\n const criteria = propPayload.criteria;\n const data = this.context.data();\n\n propPayload.action = behaviour;\n const model = getDataModelFromIdentifiers(data, criteria);\n data.propagate(model, propPayload, {\n sourceId: this.context.alias()\n });\n return this;\n }\n\n}\n","import { GridLayout } from '@chartshq/layout';\nimport { transactor, Store, getUniqueId } from 'muze-utils';\nimport { RETINAL } from '../constants';\nimport TransactionSupport from '../transaction-support';\nimport { getRenderDetails, prepareLayout } from './layout-maker';\nimport { localOptions, canvasOptions } from './local-options';\nimport { renderComponents } from './renderer';\nimport GroupFireBolt from './firebolt';\nimport options from '../options';\nimport { initCanvas, setupChangeListener } from './helper';\n\n/**\n * This is the primary class which manages highlevel components like visualGroup, Titles, Legend, Extensions\n * (in future). Global level Muze functionality is subset this. Every time user works with an instance of\n * canvas in dom which provides instance level settings.\n *\n */\nexport default class Canvas extends TransactionSupport {\n\n /**\n * Creates reactive property accessors.\n * - data\n * - height\n * - width\n * - config\n * This configs are retrieved from options.\n */\n constructor (globalDependencies) {\n super();\n\n this._allOptions = Object.assign({}, options, localOptions);\n this._registry = {};\n this._composition = {};\n this._cachedProps = {};\n this._alias = null;\n this._renderedResolve = null;\n this._renderedPromise = new Promise((resolve) => {\n this._renderedResolve = resolve;\n });\n this._composition.layout = new GridLayout();\n this._store = new Store({});\n\n // Setters and getters will be mounted on this. The object will be mutated.\n const [, store] = transactor(this, options, this._store.model);\n transactor(this, localOptions, store);\n transactor(this, canvasOptions, store);\n this.dependencies(Object.assign({}, globalDependencies, this._dependencies));\n this.firebolt(new GroupFireBolt(this));\n this.alias(`canvas-${getUniqueId()}`);\n this.title('', {});\n this.subtitle('', {});\n this.legend({});\n this.color({});\n this.shape({});\n this.size({});\n setupChangeListener(this);\n }\n\n /**\n *\n *\n * @readonly\n * @memberof Canvas\n */\n layout (...params) {\n if (params.length) {\n return this;\n }\n return this.composition().layout;\n }\n\n /**\n *\n *\n * @readonly\n * @memberof Canvas\n */\n composition (...params) {\n if (params.length) {\n return this;\n }\n return this._composition;\n }\n\n done () {\n return this._renderedPromise;\n }\n\n /**\n *\n *\n * @param {*} params\n * @returns\n * @memberof Canvas\n */\n alias (...params) {\n if (params.length) {\n const visualGroup = this.composition().visualGroup;\n this._alias = params[0];\n visualGroup && visualGroup.alias(this.alias());\n return this;\n }\n return this._alias;\n }\n\n /**\n * Creates an instance initiated with given settings.\n *\n * @param {Object} initialSettings Initial settings to be populated in the model\n * @param {Object} regEntry newly created instance with the initial settings\n * @param {Object} globalDependencies dependencies which will be created only once in the page\n *\n * @return {Object} newly created instance with the initial settings\n */\n static withSettings (initialSettings, regEntry, globalDependencies) {\n const instance = new Canvas(globalDependencies);\n\n for (const key in initialSettings) {\n instance[key](initialSettings[key]);\n }\n // set registry for instance\n instance.registry(regEntry);\n return instance;\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof Canvas\n */\n static formalName () {\n return 'canvas';\n }\n\n /**\n *\n *\n * @readonly\n * @memberof Canvas\n */\n firebolt (...firebolt) {\n if (firebolt.length) {\n this._firebolt = firebolt[0];\n return this;\n }\n return this._firebolt;\n }\n\n /**\n * Registry peoperty accessor\n *\n * @param {Object} reg plain old javascript object keyvalue pairs. Key containing module name and value contains\n * module definition class. The reg object has to be flat object of level 1.\n */\n registry (...params) {\n if (params.length) {\n const components = Object.assign({}, params[0].components);\n const componentSubRegistry = Object.assign({}, params[0].componentSubRegistry);\n\n this._registry = { components, componentSubRegistry };\n const initedComponents = initCanvas(this);\n // @todo is it okay to continue this tight behaviour? If not use a resolver to resolve diff component type.\n this._composition.visualGroup = initedComponents[0];\n\n this.composition().visualGroup.alias(this.alias());\n return this;\n }\n return this._registry;\n }\n\n /*\n * Prepare dependencies for top level elements\n */\n dependencies (...param) {\n if (param.length) {\n this._dependencies = param[0];\n return this;\n }\n // @todo prepare dependencies here.\n return this._dependencies;\n }\n\n /**\n *\n *\n * @param {*} lifeCycles\n * @returns\n * @memberof Canvas\n */\n lifeCycle (lifeCycles) {\n const lifeCycleManager = this.dependencies().lifeCycleManager;\n if (lifeCycles) {\n lifeCycleManager.register(lifeCycles);\n return this;\n }\n return lifeCycleManager;\n }\n\n /**\n *\n *\n * @readonly\n * @memberof Canvas\n */\n legend (...params) {\n if (params.length) {\n return this;\n }\n return this.composition().legend;\n }\n\n /**\n *\n *\n * @param {*} eventName\n * @returns\n * @memberof Canvas\n */\n once (eventName) {\n const lifeCycleManager = this.dependencies().lifeCycleManager;\n return lifeCycleManager.retrieve(eventName);\n }\n\n /**\n * Internal function to trigger render, this method is cognizant of all the properties of the core modules and\n * establish a passive reactivity. Passive reactivity is not always a bad thing :)\n * @internal\n */\n render () {\n const mount = this.mount();\n const visGroup = this.composition().visualGroup;\n const lifeCycleManager = this.dependencies().lifeCycleManager;\n // Get render details including arrangement and measurement\n const { components, layoutConfig, measurement } = getRenderDetails(this, mount);\n\n lifeCycleManager.notify({ client: this, action: 'beforedraw' });\n // Prepare the layout by triggering the matrix calculation\n prepareLayout(this.layout(), components, layoutConfig, measurement);\n // Render each component\n renderComponents(this, components, layoutConfig, measurement);\n // Update life cycle\n lifeCycleManager.notify({ client: this, action: 'drawn' });\n const promises = [];\n visGroup.matrixInstance().value.each((el) => {\n promises.push(el.valueOf().done());\n });\n Promise.all(promises).then(() => {\n this._renderedResolve();\n });\n }\n\n /**\n *\n *\n * @returns\n * @memberof Canvas\n */\n xAxes () {\n return this.composition().visualGroup.getAxes('x');\n }\n\n /**\n *\n *\n * @returns\n * @memberof Canvas\n */\n yAxes () {\n return this.composition().visualGroup.getAxes('y');\n }\n\n /**\n *\n *\n * @returns\n * @memberof Canvas\n */\n getRetinalAxes () {\n const visualGroup = this.composition().visualGroup;\n return visualGroup.getAxes(RETINAL);\n }\n}\n","import { cellRegistry, SimpleCell } from '@chartshq/visual-cell';\nimport { VisualUnit } from '@chartshq/visual-unit';\nimport { layerRegistry } from '@chartshq/visual-layer';\nimport { SimpleGroup, VisualGroup } from '@chartshq/visual-group';\n\nexport const COMPONENTS = {\n VisualGroup,\n VisualUnit\n};\nexport const SUBREGISTRIES = {\n cellRegistry,\n layerRegistry\n};\nexport const INTERFACES = {\n SimpleGroup,\n SimpleCell\n};\n\n","import { DEFAULT_LAYERS } from './defaults';\n\nexport default () => {\n const reg = DEFAULT_LAYERS;\n const regObj = {\n set: (key, def) => {\n reg[key] = def;\n return regObj;\n },\n get: () => reg\n };\n return regObj;\n};\n","import {\n transactor,\n Smartlabel,\n enableChainedTransaction,\n LifeCycleManager,\n DataModel,\n makeElement,\n getClientPoint,\n selectElement,\n getEvent,\n require,\n DateTimeFormatter\n} from 'muze-utils';\n\nimport {\n SurrogateSideEffect,\n SpawnableSideEffect,\n sideEffects,\n PersistentBehaviour,\n GenericBehaviour,\n VolatileBehaviour,\n behaviouralActions,\n GenericSideEffect\n} from '@chartshq/muze-firebolt';\nimport { layerFactory } from '@chartshq/visual-layer';\nimport pkg from '../package.json';\nimport * as operators from './operators';\nimport { actionModel as ActionModel } from './action-model';\nimport options from './options';\nimport { Canvas } from './canvas';\nimport { COMPONENTS, SUBREGISTRIES } from './default-registry';\nimport './muze.scss';\n\n// Cache singleton instances which should be included only once in a page\nconst globalCache = {};\nconst defaultRegistry = COMPONENTS;\n\nconst overrideRegistryDefinitions = (overrideRegistry, registry) => {\n for (const prop in overrideRegistry) {\n registry.set(prop, overrideRegistry[prop]);\n }\n};\n\n/**\n * Entry point to renderer. Initializes an environment with settings and registries for canvas. This is a simple wrapper\n * over {@link Canvas} which enables common configuration passing to multiple such canvases.\n *\n * Everytime `muze()` is called it creates an environment. These environment supports subset of APIs of Canvas. If\n * common configuration is used to render multiple canvases then it can be set directly in the env. Like if data is\n * common across all the visulization then its better to set the data in env. When a canvas is created it receives all\n * those configuration from env.\n *\n * ```\n * // Creates an environment\n * const env = muze()\n * // Set data property in environment, so that all the canvas created from the same environment gets this data\n * // automatically\n * env.data(dm);\n * // Creates canvas, by default env pushes data to canvas instance\n * const canvas = env.canvas();\n * ```\n *\n * If a property is set on both environment and canvas instance, property set on canvas instance gets more priority.\n *\n * @public\n * @module muze\n * @namespace Muze\n *\n * @return {Env} Instance of an environment\n */\nconst muze = () => {\n // Setters and getters will be mounted on this. Object will be mutated.\n const [env, globalStore] = transactor({}, options);\n const components = Object.assign({}, COMPONENTS);\n const componentSubRegistryDef = Object.assign(SUBREGISTRIES);\n const componentSubRegistry = {};\n\n for (const prop in componentSubRegistryDef) {\n componentSubRegistry[prop] = componentSubRegistryDef[prop]();\n }\n\n // Apart form the setter getter, an instance method is injected to create real renderer instances\n env.canvas = () => {\n // Create a canvas instance with this settings\n const settings = globalStore.serialize();\n const canvas = Canvas.withSettings(settings, { /* registry */\n components,\n componentSubRegistry\n }, env.globalDependencies());\n\n // Whenever settings is changed canvas is updated\n enableChainedTransaction(globalStore, canvas, Object.keys(settings));\n\n return canvas;\n };\n\n // Global dependencies for for compositions. Only one copy of the same should be in the page\n env.globalDependencies = () => {\n if (!globalCache.smartlabel) {\n globalCache.smartlabel = new Smartlabel(1, 'body');\n }\n return {\n smartlabel: globalCache.smartlabel,\n lifeCycleManager: new LifeCycleManager()\n };\n };\n\n // Retrieves global settings. This getter is readonly so that user can't change this as change should happen\n // only from setter to avoid unwanted sync issues.\n env.settings = () => globalStore.serialize();\n\n env.registry = (...overrideRegistry) => {\n // Selectively copy the properties from COMPONENTS\n if (overrideRegistry.length) {\n for (const prop in overrideRegistry) {\n if (prop in defaultRegistry) {\n components[prop] = overrideRegistry[prop];\n }\n }\n return env;\n }\n return components;\n };\n\n env.cellRegistry = (...overrideRegistry) => {\n const cellRegistry = componentSubRegistry.cellRegistry;\n if (overrideRegistry.length) {\n overrideRegistryDefinitions(overrideRegistry[0], cellRegistry);\n return env;\n }\n return cellRegistry.get();\n };\n\n env.layerRegistry = (...overrideRegistry) => {\n const layerRegistry = componentSubRegistry.layerRegistry;\n if (overrideRegistry.length) {\n overrideRegistryDefinitions(overrideRegistry[0], layerRegistry);\n return env;\n }\n return layerRegistry.get();\n };\n\n return env;\n};\n\nconst SideEffects = {\n sideEffects,\n standards: {\n SurrogateSideEffect,\n SpawnableSideEffect,\n GenericSideEffect\n }\n};\n\nconst Behaviours = {\n behaviouralActions,\n standards: {\n GenericBehaviour,\n PersistentBehaviour,\n VolatileBehaviour\n }\n};\n\nmuze.DataModel = DataModel;\nmuze.version = pkg.version;\nmuze.SideEffects = SideEffects;\nmuze.ActionModel = ActionModel;\nmuze.layerFactory = layerFactory;\nmuze.Operators = operators;\nmuze.Behaviours = Behaviours;\nmuze.utils = {\n getClientPoint,\n getEvent,\n makeElement,\n selectElement,\n DateTimeFormatter,\n require\n};\n\nexport default muze;\n"],"sourceRoot":""} \ No newline at end of file diff --git a/packages/muze/src/defaults.js b/packages/muze/src/defaults.js index eb63f8c2..03e13fc6 100644 --- a/packages/muze/src/defaults.js +++ b/packages/muze/src/defaults.js @@ -7,27 +7,27 @@ export const DEFAULT_CONFIG = { position: 'right', color: { show: true, - padding: 2, - margin: 2, + padding: 1, + margin: 3, border: 1, - height: 30, - width: 30 + height: 20, + width: 20 }, shape: { show: true, - padding: 2, - margin: 2, + padding: 1, + margin: 3, border: 1, - height: 30, - width: 30 + height: 20, + width: 20 }, size: { show: true, - padding: 2, - margin: 2, + padding: 1, + margin: 3, border: 1, - height: 30, - width: 30 + height: 20, + width: 20 } }, showHeaders: false, diff --git a/packages/muze/src/muze.scss b/packages/muze/src/muze.scss index d000678d..881efb9f 100644 --- a/packages/muze/src/muze.scss +++ b/packages/muze/src/muze.scss @@ -7,7 +7,7 @@ -webkit-tap-highlight-color: rgba(0, 0, 0, 0); line-height: 1.42857143; color: #333; - background-color: #fff; + background-color: transparent; margin: 0; * { diff --git a/packages/visual-group/src/group-helper/cell-creator.js b/packages/visual-group/src/group-helper/cell-creator.js index 05a86cec..158e46e5 100644 --- a/packages/visual-group/src/group-helper/cell-creator.js +++ b/packages/visual-group/src/group-helper/cell-creator.js @@ -130,7 +130,7 @@ const createAxisCells = (selection, axes, axisIndex, cells) => show }); } - return new cells.BlankCell(); + return new cells.BlankCell().config({ show: false }); }); /** diff --git a/packages/visual-unit/src/styles.scss b/packages/visual-unit/src/styles.scss index df94928b..25588f09 100644 --- a/packages/visual-unit/src/styles.scss +++ b/packages/visual-unit/src/styles.scss @@ -1,7 +1,7 @@ @import './prefix.scss'; .#{$prefix}visual-unit { - background: '#fff' + background: transparent; } .#{$prefix}axis-zero-line { From b7959efbdc1bbb6203ea048e85df2c628157d43a Mon Sep 17 00:00:00 2001 From: Rousan Ali Date: Tue, 2 Oct 2018 16:48:51 +0530 Subject: [PATCH 3/3] Bump version to v1.0.3 and make a new build --- dist/muze.css | 2 +- dist/muze.js | 2 +- dist/muze.js.map | 2 +- package-lock.json | 1166 ++++++++++++---------------- packages/muze/npm/dist/muze.css | 2 +- packages/muze/npm/dist/muze.js | 2 +- packages/muze/npm/dist/muze.js.map | 2 +- packages/muze/npm/package.json | 2 +- packages/muze/package.json | 2 +- 9 files changed, 490 insertions(+), 692 deletions(-) diff --git a/dist/muze.css b/dist/muze.css index 2ca2bff8..37fbb3db 100644 --- a/dist/muze.css +++ b/dist/muze.css @@ -1 +1 @@ -.muze-selection-box-group{cursor:all-scroll;fill:#777;fill-opacity:.3;pointer-events:all;stroke:#fff}.muze-tooltip-box{-webkit-border-radius:1px;-webkit-box-shadow:2px 2px 3px 0 hsla(0,0%,82.7%,.5);background:#fbfbfb;border:1px solid hsla(0,0%,59.2%,.19);border-radius:1px;box-shadow:2px 2px 3px 0 hsla(0,0%,82.7%,.5);color:#5f5f5f;display:inline-block;font-size:12px;opacity:.9;padding-left:8px;padding-right:8px;padding-top:4px;pointer-events:none;text-align:left;z-index:9999999999}.muze-tooltip-row{overflow:auto;padding-bottom:8px}.muze-tooltip-row:last-child{padding-bottom:4px}.muze-tooltip-value{float:right;font-weight:600;margin-left:10px}.muze-tooltip-connectors path{stroke:#c7c7be;stroke-linecap:round;stroke-linejoin:round;stroke-width:2px}.muze-tooltip-arrow-bottom{border-left:5px solid transparent;border-right:5px solid transparent;border-top:10px solid #fbfbfb;right:0}.muze-tooltip-arrow-right{border-left:10px solid #fbfbfb;right:-10px}.muze-tooltip-arrow-left,.muze-tooltip-arrow-right{border-bottom:5px solid transparent;border-top:5px solid transparent}.muze-tooltip-arrow-left{border-right:10px solid #fbfbfb;left:-10px;right:0}.muze-tooltip-arrow-top{border-bottom:10px solid #fbfbfb;border-left:5px solid transparent;border-right:5px solid transparent;right:0}.muze-tooltip-background-arrow-top{border-bottom:12px solid hsla(0,0%,59.2%,.19);top:0}.muze-tooltip-background-arrow-bottom,.muze-tooltip-background-arrow-top{border-left:6px solid transparent;border-right:6px solid transparent;right:0}.muze-tooltip-background-arrow-bottom{border-top:12px solid hsla(0,0%,59.2%,.19);top:102%}.muze-tooltip-background-arrow-right{border-bottom:6px solid transparent;border-left:12px solid hsla(0,0%,59.2%,.19);border-top:6px solid transparent;right:-12px}.muze-tooltip-background-arrow-left{border-bottom:6px solid transparent;border-right:12px solid hsla(0,0%,59.2%,.19);border-top:6px solid transparent;left:-12px;right:0}.muze-tooltip-content-container{float:none!important;padding-left:8px;padding-right:8px;padding-top:4px}.muze--tooltip-value{font-weight:700}.muze-tooltip-table-tbody td{padding:3px}.muze-tooltip-table-row-0{font-weight:700}.muze-tooltip-content-container{border-bottom:1px solid #000}.muze-tooltip-content-parent-container :last-child{border-bottom:none}.muze-crossband{fill:grey;fill-opacity:.2;stroke-opacity:0}.muze-crossline{fill:grey;fill-opacity:.2;stroke:grey;stroke-dasharray:2,4}.muze-anchors-group{pointer-events:none}.muze-simple-axis text{font-family:Source Sans Pro,Helvetica Neue,Helvetica,Arial,sans-serif;text-align:center}.muze-ticks{fill:#858585}.muze-tick-lines,.muze-ticks{font-family:Source Sans Pro,Helvetica Neue,Helvetica,Arial,sans-serif;font-size:12px;font-weight:400;text-align:center}.muze-tick-lines{stroke:#efefef}.muze-axis-name{fill:#5f5f5f;font-family:Source Sans Pro,Helvetica Neue,Helvetica,Arial,sans-serif;font-size:14px;font-weight:400;text-align:center}.muze-axis-name.hidden{display:none}.muze-fadeout-interaction{stroke-opacity:.3}.muze-layer-line{stroke:#086bb6;stroke-linejoin:round;stroke-width:2px}.muze-layer-area{fill:#086bb6;fill-opacity:.7;stroke-linejoin:round}.muze-layer-arc-highlight{fill:#7f7f7f!important}.muze-layer-arc-fadeout{fill-opacity:.3!important}.muze-layer-arc-selected{fill:#e6e6e6!important}.muze-layer-arc{fill:#086bb6}.muze-layer-text text{fill:#000;font-size:12px}.muze-layer-text rect{fill:#7f7f7f;fill-opacity:.3}.muze-layer-text-highlight{fill-opacity:1}.muze-layer-text-fadeout{fill-opacity:.3!important}.muze-layer-text-selected{fill:#000!important}.muze-layer-point{fill:#086bb6;fill-opacity:.5;stroke:#086bb6;stroke-opacity:.5}.muze-layer-point-highlight{fill-opacity:0;stroke-opacity:1;stroke-width:2px!important}.muze-layer-point-fadeout{fill:#7f7f7f!important;fill-opacity:.3!important;stroke:#7f7f7f!important;stroke-opacity:.3!important}.muze-layer-point-selected{fill:#000!important}.muze-layer-bar,.muze-layer-bar-highlight{fill-opacity:1}.muze-layer-bar-fadeout{fill-opacity:.2!important}.muze-layer-bar-selected{fill:#4682b4!important}.muze-layer-tick{stroke:#f44336;stroke-opacity:.7}.muze-layer-tick-highlight{stroke-opacity:1}.muze-layer-tick-fadeout{stroke:#7f7f7f!important;stroke-opacity:.3!important}.muze-layer-tick-selected{stroke:#000!important}.muze-visual-unit{background:transparent}.muze-axis-zero-line{stroke-width:1px}.muze-grid-band-x-0,.muze-grid-band-y-0{fill-opacity:0}.muze-unit{-webkit-touch-callout:none;-webkit-user-select:none}.muze-legend-box{display:inline-block;float:none!important;font-family:Source Sans Pro,Helvetica Neue,Helvetica,Arial,sans-serif;height:100px;line-height:10px!important}.muze-legend-title{-webkit-align-items:center;-webkit-box-align:center;align-items:center;display:table;fill:#5f5f5f;float:left;font-size:14px;font-weight:600;height:30px;text-align:left}.muze-legend-title-text{display:table-cell;vertical-align:middle}.muze-legend-overflow{text-align:center}.muze-legend-icon,.muze-legend-icon-svg{cursor:pointer}.muze-overflow-y{overflow-y:scroll}.muze-overflow-x{overflow-x:scroll}.muze-legend-fadeout{fill-opacity:.3;opacity:.3}.muze-legend-brighten{fill-opacity:1}.muze-legend-item-info{-webkit-align-items:center;-webkit-box-align:center;align-items:center;cursor:pointer;display:-webkit-box;display:-webkit-flex;display:flex;float:left;font-size:12px}.muze-legend-item-info.center{-webkit-box-pack:center;-webkit-justify-content:center;justify-content:center}.muze-legend-item-info.start{-webkit-box-pack:start;-webkit-justify-content:flex-start;justify-content:flex-start}.muze-legend-item-info.end{-webkit-box-pack:end;-webkit-justify-content:flex-end;justify-content:flex-end}.muze-legend-selection-box{cursor:all-scroll;fill:#777;fill-opacity:.3;pointer-events:all;stroke:#fff}.muze-text-cell{color:#5f5f5f;font-family:inherit;font-size:14px;font-weight:400;text-align:center}.muze-header-cell{font-size:16px}.muze-header-cell,.muze-subheader-cell{color:#858585;font-family:inherit;font-weight:800;text-align:center}.muze-subheader-cell{font-size:15px}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:200;src:local("Source Sans Pro ExtraLight Italic"),local("SourceSansPro-ExtraLightItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZYokSdh18S0xR41YDw.woff2) format("woff2");unicode-range:U+0460-052f,U+1c80-1c88,U+20b4,U+2de0-2dff,U+a640-a69f,U+fe2e-fe2f}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:200;src:local("Source Sans Pro ExtraLight Italic"),local("SourceSansPro-ExtraLightItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZYokSdo18S0xR41YDw.woff2) format("woff2");unicode-range:U+0400-045f,U+0490-0491,U+04b0-04b1,U+2116}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:200;src:local("Source Sans Pro ExtraLight Italic"),local("SourceSansPro-ExtraLightItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZYokSdg18S0xR41YDw.woff2) format("woff2");unicode-range:U+1f??}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:200;src:local("Source Sans Pro ExtraLight Italic"),local("SourceSansPro-ExtraLightItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZYokSdv18S0xR41YDw.woff2) format("woff2");unicode-range:U+0370-03ff}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:200;src:local("Source Sans Pro ExtraLight Italic"),local("SourceSansPro-ExtraLightItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZYokSdj18S0xR41YDw.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+1ea0-1ef9,U+20ab}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:200;src:local("Source Sans Pro ExtraLight Italic"),local("SourceSansPro-ExtraLightItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZYokSdi18S0xR41YDw.woff2) format("woff2");unicode-range:U+0100-024f,U+0259,U+1e??,U+2020,U+20a0-20ab,U+20ad-20cf,U+2113,U+2c60-2c7f,U+a720-a7ff}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:200;src:local("Source Sans Pro ExtraLight Italic"),local("SourceSansPro-ExtraLightItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZYokSds18S0xR41.woff2) format("woff2");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:300;src:local("Source Sans Pro Light Italic"),local("SourceSansPro-LightItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZMkidh18S0xR41YDw.woff2) format("woff2");unicode-range:U+0460-052f,U+1c80-1c88,U+20b4,U+2de0-2dff,U+a640-a69f,U+fe2e-fe2f}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:300;src:local("Source Sans Pro Light Italic"),local("SourceSansPro-LightItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZMkido18S0xR41YDw.woff2) format("woff2");unicode-range:U+0400-045f,U+0490-0491,U+04b0-04b1,U+2116}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:300;src:local("Source Sans Pro Light Italic"),local("SourceSansPro-LightItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZMkidg18S0xR41YDw.woff2) format("woff2");unicode-range:U+1f??}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:300;src:local("Source Sans Pro Light Italic"),local("SourceSansPro-LightItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZMkidv18S0xR41YDw.woff2) format("woff2");unicode-range:U+0370-03ff}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:300;src:local("Source Sans Pro Light Italic"),local("SourceSansPro-LightItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZMkidj18S0xR41YDw.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+1ea0-1ef9,U+20ab}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:300;src:local("Source Sans Pro Light Italic"),local("SourceSansPro-LightItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZMkidi18S0xR41YDw.woff2) format("woff2");unicode-range:U+0100-024f,U+0259,U+1e??,U+2020,U+20a0-20ab,U+20ad-20cf,U+2113,U+2c60-2c7f,U+a720-a7ff}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:300;src:local("Source Sans Pro Light Italic"),local("SourceSansPro-LightItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZMkids18S0xR41.woff2) format("woff2");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:400;src:local("Source Sans Pro Italic"),local("SourceSansPro-Italic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK1dSBYKcSV-LCoeQqfX1RYOo3qPZ7qsDJB9cme_xc.woff2) format("woff2");unicode-range:U+0460-052f,U+1c80-1c88,U+20b4,U+2de0-2dff,U+a640-a69f,U+fe2e-fe2f}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:400;src:local("Source Sans Pro Italic"),local("SourceSansPro-Italic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK1dSBYKcSV-LCoeQqfX1RYOo3qPZ7jsDJB9cme_xc.woff2) format("woff2");unicode-range:U+0400-045f,U+0490-0491,U+04b0-04b1,U+2116}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:400;src:local("Source Sans Pro Italic"),local("SourceSansPro-Italic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK1dSBYKcSV-LCoeQqfX1RYOo3qPZ7rsDJB9cme_xc.woff2) format("woff2");unicode-range:U+1f??}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:400;src:local("Source Sans Pro Italic"),local("SourceSansPro-Italic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK1dSBYKcSV-LCoeQqfX1RYOo3qPZ7ksDJB9cme_xc.woff2) format("woff2");unicode-range:U+0370-03ff}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:400;src:local("Source Sans Pro Italic"),local("SourceSansPro-Italic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK1dSBYKcSV-LCoeQqfX1RYOo3qPZ7osDJB9cme_xc.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+1ea0-1ef9,U+20ab}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:400;src:local("Source Sans Pro Italic"),local("SourceSansPro-Italic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK1dSBYKcSV-LCoeQqfX1RYOo3qPZ7psDJB9cme_xc.woff2) format("woff2");unicode-range:U+0100-024f,U+0259,U+1e??,U+2020,U+20a0-20ab,U+20ad-20cf,U+2113,U+2c60-2c7f,U+a720-a7ff}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:400;src:local("Source Sans Pro Italic"),local("SourceSansPro-Italic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK1dSBYKcSV-LCoeQqfX1RYOo3qPZ7nsDJB9cme.woff2) format("woff2");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:600;src:local("Source Sans Pro SemiBold Italic"),local("SourceSansPro-SemiBoldItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZY4lCdh18S0xR41YDw.woff2) format("woff2");unicode-range:U+0460-052f,U+1c80-1c88,U+20b4,U+2de0-2dff,U+a640-a69f,U+fe2e-fe2f}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:600;src:local("Source Sans Pro SemiBold Italic"),local("SourceSansPro-SemiBoldItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZY4lCdo18S0xR41YDw.woff2) format("woff2");unicode-range:U+0400-045f,U+0490-0491,U+04b0-04b1,U+2116}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:600;src:local("Source Sans Pro SemiBold Italic"),local("SourceSansPro-SemiBoldItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZY4lCdg18S0xR41YDw.woff2) format("woff2");unicode-range:U+1f??}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:600;src:local("Source Sans Pro SemiBold Italic"),local("SourceSansPro-SemiBoldItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZY4lCdv18S0xR41YDw.woff2) format("woff2");unicode-range:U+0370-03ff}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:600;src:local("Source Sans Pro SemiBold Italic"),local("SourceSansPro-SemiBoldItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZY4lCdj18S0xR41YDw.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+1ea0-1ef9,U+20ab}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:600;src:local("Source Sans Pro SemiBold Italic"),local("SourceSansPro-SemiBoldItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZY4lCdi18S0xR41YDw.woff2) format("woff2");unicode-range:U+0100-024f,U+0259,U+1e??,U+2020,U+20a0-20ab,U+20ad-20cf,U+2113,U+2c60-2c7f,U+a720-a7ff}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:600;src:local("Source Sans Pro SemiBold Italic"),local("SourceSansPro-SemiBoldItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZY4lCds18S0xR41.woff2) format("woff2");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:700;src:local("Source Sans Pro Bold Italic"),local("SourceSansPro-BoldItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZclSdh18S0xR41YDw.woff2) format("woff2");unicode-range:U+0460-052f,U+1c80-1c88,U+20b4,U+2de0-2dff,U+a640-a69f,U+fe2e-fe2f}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:700;src:local("Source Sans Pro Bold Italic"),local("SourceSansPro-BoldItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZclSdo18S0xR41YDw.woff2) format("woff2");unicode-range:U+0400-045f,U+0490-0491,U+04b0-04b1,U+2116}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:700;src:local("Source Sans Pro Bold Italic"),local("SourceSansPro-BoldItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZclSdg18S0xR41YDw.woff2) format("woff2");unicode-range:U+1f??}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:700;src:local("Source Sans Pro Bold Italic"),local("SourceSansPro-BoldItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZclSdv18S0xR41YDw.woff2) format("woff2");unicode-range:U+0370-03ff}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:700;src:local("Source Sans Pro Bold Italic"),local("SourceSansPro-BoldItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZclSdj18S0xR41YDw.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+1ea0-1ef9,U+20ab}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:700;src:local("Source Sans Pro Bold Italic"),local("SourceSansPro-BoldItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZclSdi18S0xR41YDw.woff2) format("woff2");unicode-range:U+0100-024f,U+0259,U+1e??,U+2020,U+20a0-20ab,U+20ad-20cf,U+2113,U+2c60-2c7f,U+a720-a7ff}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:700;src:local("Source Sans Pro Bold Italic"),local("SourceSansPro-BoldItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZclSds18S0xR41.woff2) format("woff2");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:900;src:local("Source Sans Pro Black Italic"),local("SourceSansPro-BlackItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZklydh18S0xR41YDw.woff2) format("woff2");unicode-range:U+0460-052f,U+1c80-1c88,U+20b4,U+2de0-2dff,U+a640-a69f,U+fe2e-fe2f}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:900;src:local("Source Sans Pro Black Italic"),local("SourceSansPro-BlackItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZklydo18S0xR41YDw.woff2) format("woff2");unicode-range:U+0400-045f,U+0490-0491,U+04b0-04b1,U+2116}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:900;src:local("Source Sans Pro Black Italic"),local("SourceSansPro-BlackItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZklydg18S0xR41YDw.woff2) format("woff2");unicode-range:U+1f??}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:900;src:local("Source Sans Pro Black Italic"),local("SourceSansPro-BlackItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZklydv18S0xR41YDw.woff2) format("woff2");unicode-range:U+0370-03ff}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:900;src:local("Source Sans Pro Black Italic"),local("SourceSansPro-BlackItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZklydj18S0xR41YDw.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+1ea0-1ef9,U+20ab}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:900;src:local("Source Sans Pro Black Italic"),local("SourceSansPro-BlackItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZklydi18S0xR41YDw.woff2) format("woff2");unicode-range:U+0100-024f,U+0259,U+1e??,U+2020,U+20a0-20ab,U+20ad-20cf,U+2113,U+2c60-2c7f,U+a720-a7ff}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:900;src:local("Source Sans Pro Black Italic"),local("SourceSansPro-BlackItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZklyds18S0xR41.woff2) format("woff2");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:200;src:local("Source Sans Pro ExtraLight"),local("SourceSansPro-ExtraLight"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i94_wmhdu3cOWxy40.woff2) format("woff2");unicode-range:U+0460-052f,U+1c80-1c88,U+20b4,U+2de0-2dff,U+a640-a69f,U+fe2e-fe2f}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:200;src:local("Source Sans Pro ExtraLight"),local("SourceSansPro-ExtraLight"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i94_wkxdu3cOWxy40.woff2) format("woff2");unicode-range:U+0400-045f,U+0490-0491,U+04b0-04b1,U+2116}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:200;src:local("Source Sans Pro ExtraLight"),local("SourceSansPro-ExtraLight"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i94_wmxdu3cOWxy40.woff2) format("woff2");unicode-range:U+1f??}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:200;src:local("Source Sans Pro ExtraLight"),local("SourceSansPro-ExtraLight"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i94_wlBdu3cOWxy40.woff2) format("woff2");unicode-range:U+0370-03ff}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:200;src:local("Source Sans Pro ExtraLight"),local("SourceSansPro-ExtraLight"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i94_wmBdu3cOWxy40.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+1ea0-1ef9,U+20ab}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:200;src:local("Source Sans Pro ExtraLight"),local("SourceSansPro-ExtraLight"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i94_wmRdu3cOWxy40.woff2) format("woff2");unicode-range:U+0100-024f,U+0259,U+1e??,U+2020,U+20a0-20ab,U+20ad-20cf,U+2113,U+2c60-2c7f,U+a720-a7ff}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:200;src:local("Source Sans Pro ExtraLight"),local("SourceSansPro-ExtraLight"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i94_wlxdu3cOWxw.woff2) format("woff2");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:300;src:local("Source Sans Pro Light"),local("SourceSansPro-Light"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ik4zwmhdu3cOWxy40.woff2) format("woff2");unicode-range:U+0460-052f,U+1c80-1c88,U+20b4,U+2de0-2dff,U+a640-a69f,U+fe2e-fe2f}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:300;src:local("Source Sans Pro Light"),local("SourceSansPro-Light"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ik4zwkxdu3cOWxy40.woff2) format("woff2");unicode-range:U+0400-045f,U+0490-0491,U+04b0-04b1,U+2116}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:300;src:local("Source Sans Pro Light"),local("SourceSansPro-Light"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ik4zwmxdu3cOWxy40.woff2) format("woff2");unicode-range:U+1f??}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:300;src:local("Source Sans Pro Light"),local("SourceSansPro-Light"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ik4zwlBdu3cOWxy40.woff2) format("woff2");unicode-range:U+0370-03ff}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:300;src:local("Source Sans Pro Light"),local("SourceSansPro-Light"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ik4zwmBdu3cOWxy40.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+1ea0-1ef9,U+20ab}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:300;src:local("Source Sans Pro Light"),local("SourceSansPro-Light"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ik4zwmRdu3cOWxy40.woff2) format("woff2");unicode-range:U+0100-024f,U+0259,U+1e??,U+2020,U+20a0-20ab,U+20ad-20cf,U+2113,U+2c60-2c7f,U+a720-a7ff}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:300;src:local("Source Sans Pro Light"),local("SourceSansPro-Light"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ik4zwlxdu3cOWxw.woff2) format("woff2");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:400;src:local("Source Sans Pro Regular"),local("SourceSansPro-Regular"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK3dSBYKcSV-LCoeQqfX1RYOo3qNa7lujVj9_mf.woff2) format("woff2");unicode-range:U+0460-052f,U+1c80-1c88,U+20b4,U+2de0-2dff,U+a640-a69f,U+fe2e-fe2f}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:400;src:local("Source Sans Pro Regular"),local("SourceSansPro-Regular"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK3dSBYKcSV-LCoeQqfX1RYOo3qPK7lujVj9_mf.woff2) format("woff2");unicode-range:U+0400-045f,U+0490-0491,U+04b0-04b1,U+2116}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:400;src:local("Source Sans Pro Regular"),local("SourceSansPro-Regular"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK3dSBYKcSV-LCoeQqfX1RYOo3qNK7lujVj9_mf.woff2) format("woff2");unicode-range:U+1f??}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:400;src:local("Source Sans Pro Regular"),local("SourceSansPro-Regular"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK3dSBYKcSV-LCoeQqfX1RYOo3qO67lujVj9_mf.woff2) format("woff2");unicode-range:U+0370-03ff}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:400;src:local("Source Sans Pro Regular"),local("SourceSansPro-Regular"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK3dSBYKcSV-LCoeQqfX1RYOo3qN67lujVj9_mf.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+1ea0-1ef9,U+20ab}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:400;src:local("Source Sans Pro Regular"),local("SourceSansPro-Regular"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK3dSBYKcSV-LCoeQqfX1RYOo3qNq7lujVj9_mf.woff2) format("woff2");unicode-range:U+0100-024f,U+0259,U+1e??,U+2020,U+20a0-20ab,U+20ad-20cf,U+2113,U+2c60-2c7f,U+a720-a7ff}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:400;src:local("Source Sans Pro Regular"),local("SourceSansPro-Regular"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK3dSBYKcSV-LCoeQqfX1RYOo3qOK7lujVj9w.woff2) format("woff2");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:600;src:local("Source Sans Pro SemiBold"),local("SourceSansPro-SemiBold"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i54rwmhdu3cOWxy40.woff2) format("woff2");unicode-range:U+0460-052f,U+1c80-1c88,U+20b4,U+2de0-2dff,U+a640-a69f,U+fe2e-fe2f}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:600;src:local("Source Sans Pro SemiBold"),local("SourceSansPro-SemiBold"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i54rwkxdu3cOWxy40.woff2) format("woff2");unicode-range:U+0400-045f,U+0490-0491,U+04b0-04b1,U+2116}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:600;src:local("Source Sans Pro SemiBold"),local("SourceSansPro-SemiBold"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i54rwmxdu3cOWxy40.woff2) format("woff2");unicode-range:U+1f??}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:600;src:local("Source Sans Pro SemiBold"),local("SourceSansPro-SemiBold"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i54rwlBdu3cOWxy40.woff2) format("woff2");unicode-range:U+0370-03ff}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:600;src:local("Source Sans Pro SemiBold"),local("SourceSansPro-SemiBold"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i54rwmBdu3cOWxy40.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+1ea0-1ef9,U+20ab}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:600;src:local("Source Sans Pro SemiBold"),local("SourceSansPro-SemiBold"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i54rwmRdu3cOWxy40.woff2) format("woff2");unicode-range:U+0100-024f,U+0259,U+1e??,U+2020,U+20a0-20ab,U+20ad-20cf,U+2113,U+2c60-2c7f,U+a720-a7ff}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:600;src:local("Source Sans Pro SemiBold"),local("SourceSansPro-SemiBold"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i54rwlxdu3cOWxw.woff2) format("woff2");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:700;src:local("Source Sans Pro Bold"),local("SourceSansPro-Bold"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ig4vwmhdu3cOWxy40.woff2) format("woff2");unicode-range:U+0460-052f,U+1c80-1c88,U+20b4,U+2de0-2dff,U+a640-a69f,U+fe2e-fe2f}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:700;src:local("Source Sans Pro Bold"),local("SourceSansPro-Bold"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ig4vwkxdu3cOWxy40.woff2) format("woff2");unicode-range:U+0400-045f,U+0490-0491,U+04b0-04b1,U+2116}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:700;src:local("Source Sans Pro Bold"),local("SourceSansPro-Bold"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ig4vwmxdu3cOWxy40.woff2) format("woff2");unicode-range:U+1f??}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:700;src:local("Source Sans Pro Bold"),local("SourceSansPro-Bold"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ig4vwlBdu3cOWxy40.woff2) format("woff2");unicode-range:U+0370-03ff}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:700;src:local("Source Sans Pro Bold"),local("SourceSansPro-Bold"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ig4vwmBdu3cOWxy40.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+1ea0-1ef9,U+20ab}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:700;src:local("Source Sans Pro Bold"),local("SourceSansPro-Bold"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ig4vwmRdu3cOWxy40.woff2) format("woff2");unicode-range:U+0100-024f,U+0259,U+1e??,U+2020,U+20a0-20ab,U+20ad-20cf,U+2113,U+2c60-2c7f,U+a720-a7ff}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:700;src:local("Source Sans Pro Bold"),local("SourceSansPro-Bold"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ig4vwlxdu3cOWxw.woff2) format("woff2");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:900;src:local("Source Sans Pro Black"),local("SourceSansPro-Black"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3iu4nwmhdu3cOWxy40.woff2) format("woff2");unicode-range:U+0460-052f,U+1c80-1c88,U+20b4,U+2de0-2dff,U+a640-a69f,U+fe2e-fe2f}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:900;src:local("Source Sans Pro Black"),local("SourceSansPro-Black"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3iu4nwkxdu3cOWxy40.woff2) format("woff2");unicode-range:U+0400-045f,U+0490-0491,U+04b0-04b1,U+2116}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:900;src:local("Source Sans Pro Black"),local("SourceSansPro-Black"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3iu4nwmxdu3cOWxy40.woff2) format("woff2");unicode-range:U+1f??}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:900;src:local("Source Sans Pro Black"),local("SourceSansPro-Black"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3iu4nwlBdu3cOWxy40.woff2) format("woff2");unicode-range:U+0370-03ff}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:900;src:local("Source Sans Pro Black"),local("SourceSansPro-Black"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3iu4nwmBdu3cOWxy40.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+1ea0-1ef9,U+20ab}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:900;src:local("Source Sans Pro Black"),local("SourceSansPro-Black"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3iu4nwmRdu3cOWxy40.woff2) format("woff2");unicode-range:U+0100-024f,U+0259,U+1e??,U+2020,U+20a0-20ab,U+20ad-20cf,U+2113,U+2c60-2c7f,U+a720-a7ff}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:900;src:local("Source Sans Pro Black"),local("SourceSansPro-Black"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3iu4nwlxdu3cOWxw.woff2) format("woff2");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}.muze-group-container{-webkit-tap-highlight-color:rgba(0,0,0,0);background-color:transparent;color:#333;font-family:Source Sans Pro,Helvetica Neue,Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143;margin:0}.muze-group-container *,.muze-group-container :after,.muze-group-container :before{-webkit-box-sizing:border-box;box-sizing:border-box}.muze-group-container .muze-table-arrow{cursor:pointer;height:0;margin:5px;opacity:.5;position:absolute;width:0;z-index:10}.muze-group-container .muze-table-arrow:hover{opacity:1}.muze-group-container .muze-table-arrow-right{border-left:15px solid #4682b4;left:100%}.muze-group-container .muze-table-arrow-left,.muze-group-container .muze-table-arrow-right{border-bottom:20px solid transparent;border-top:20px solid transparent;top:-webkit-calc(50% - 25px);top:calc(50% - 25px)}.muze-group-container .muze-table-arrow-left{border-right:15px solid #4682b4;right:100%}.muze-group-container .muze-table-arrow-bottom{border-top:15px solid #4682b4;top:100%}.muze-group-container .muze-table-arrow-bottom,.muze-group-container .muze-table-arrow-top{border-left:20px solid transparent;border-right:20px solid transparent;left:-webkit-calc(50% - 25px);left:calc(50% - 25px)}.muze-group-container .muze-table-arrow-top{border-bottom:15px solid #4682b4;bottom:100%}.muze-group-container .table-row-nested{border-top:none;visibility:hidden}.muze-group-container svg{display:block;float:left;height:inherit;vertical-align:top;width:inherit}.muze-group-container .axisName.hidden{opacity:0}.muze-group-container .axisName{opacity:1}.muze-group-container .grid-td svg{max-height:100%;max-width:100%}.muze-group-container .domain{opacity:0}.muze-board{float:left}.muze-layout-container{float:left;position:relative}.muze-board-legend,.muze-legend-section{float:left;text-align:center}.muze-legend-horizontal-section{-webkit-align-items:center;-webkit-box-align:center;-webkit-box-pack:center;-webkit-flex-wrap:wrap;-webkit-justify-content:center;align-items:center;display:-webkit-box;display:-webkit-flex;display:flex;flex-wrap:wrap;justify-content:center}.muze-legend-components{float:left;text-align:center}.muze-grid-layout,.muze-grid-layout-container,.muze-grid-layout-row{float:left;position:relative}.muze-grid-table{background-color:transparent;border-spacing:0;table-layout:fixed}.muze-grid-td,.muze-grid-th{padding:0}.muze-table-header{height:inherit;width:inherit}.muze-grid-layout,.muze-layout-grid-container{float:left;position:relative}.muze-layout-grid-container div,.muze-layout-grid-container table{border-collapse:collapse;float:left}.muze-title-container .muze-header-cell{color:#5f5f5f;font-size:24px;font-weight:700}.muze-subtitle-container .muze-text-cell{color:#b1b1b1;font-size:16px;font-weight:400}.domain{opacity:0}.muze-group-container,.muze-layout-container,.muze-legend-container{float:left}.hidden{display:none} \ No newline at end of file +.muze-selection-box-group{fill:#777;fill-opacity:.3;stroke:#fff;cursor:all-scroll;pointer-events:all}.muze-tooltip-box{opacity:.9;border:1px solid hsla(0,0%,59.2%,.19);background:#fbfbfb;-webkit-box-shadow:2px 2px 3px 0 hsla(0,0%,82.7%,.5);box-shadow:2px 2px 3px 0 hsla(0,0%,82.7%,.5);font-size:12px;color:#5f5f5f;-webkit-border-radius:1px;border-radius:1px;padding-left:8px;padding-right:8px;padding-top:4px;display:inline-block;pointer-events:none;z-index:9999999999;text-align:left}.muze-tooltip-row{padding-bottom:8px;overflow:auto}.muze-tooltip-row:last-child{padding-bottom:4px}.muze-tooltip-value{font-weight:600;float:right;margin-left:10px}.muze-tooltip-connectors path{stroke-width:2px;stroke:#c7c7be;stroke-linejoin:round;stroke-linecap:round}.muze-tooltip-arrow-bottom{border-top:10px solid #fbfbfb;border-left:5px solid transparent;border-right:5px solid transparent;right:0}.muze-tooltip-arrow-right{border-left:10px solid #fbfbfb;right:-10px}.muze-tooltip-arrow-left,.muze-tooltip-arrow-right{border-top:5px solid transparent;border-bottom:5px solid transparent}.muze-tooltip-arrow-left{border-right:10px solid #fbfbfb;right:0;left:-10px}.muze-tooltip-arrow-top{border-bottom:10px solid #fbfbfb;border-left:5px solid transparent;border-right:5px solid transparent;right:0}.muze-tooltip-background-arrow-top{border-bottom:12px solid hsla(0,0%,59.2%,.19);top:0}.muze-tooltip-background-arrow-bottom,.muze-tooltip-background-arrow-top{border-left:6px solid transparent;border-right:6px solid transparent;right:0}.muze-tooltip-background-arrow-bottom{border-top:12px solid hsla(0,0%,59.2%,.19);top:102%}.muze-tooltip-background-arrow-right{border-left:12px solid hsla(0,0%,59.2%,.19);border-top:6px solid transparent;border-bottom:6px solid transparent;right:-12px}.muze-tooltip-background-arrow-left{border-right:12px solid hsla(0,0%,59.2%,.19);border-top:6px solid transparent;border-bottom:6px solid transparent;right:0;left:-12px}.muze-tooltip-content-container{float:none!important;padding-left:8px;padding-right:8px;padding-top:4px}.muze--tooltip-value{font-weight:700}.muze-tooltip-table-tbody td{padding:3px}.muze-tooltip-table-row-0{font-weight:700}.muze-tooltip-content-container{border-bottom:1px solid #000}.muze-tooltip-content-parent-container :last-child{border-bottom:none}.muze-crossband{stroke-opacity:0;fill:grey;fill-opacity:.2}.muze-crossline{stroke:grey;stroke-dasharray:2,4;fill:grey;fill-opacity:.2}.muze-anchors-group{pointer-events:none}.muze-simple-axis text{text-align:center;font-family:Source Sans Pro,Helvetica Neue,Helvetica,Arial,sans-serif}.muze-ticks{fill:#858585}.muze-tick-lines,.muze-ticks{font-size:12px;text-align:center;font-weight:400;font-family:Source Sans Pro,Helvetica Neue,Helvetica,Arial,sans-serif}.muze-tick-lines{stroke:#efefef}.muze-axis-name{font-size:14px;text-align:center;font-weight:400;font-family:Source Sans Pro,Helvetica Neue,Helvetica,Arial,sans-serif;fill:#5f5f5f}.muze-axis-name.hidden{display:none}.muze-fadeout-interaction{stroke-opacity:.3}.muze-layer-line{stroke-linejoin:round;stroke-width:2px;stroke:#086bb6}.muze-layer-area{stroke-linejoin:round;fill:#086bb6;fill-opacity:.7}.muze-layer-arc-highlight{fill:#7f7f7f!important}.muze-layer-arc-fadeout{fill-opacity:.3!important}.muze-layer-arc-selected{fill:#e6e6e6!important}.muze-layer-arc{fill:#086bb6}.muze-layer-text text{font-size:12px;fill:#000}.muze-layer-text rect{fill:#7f7f7f;fill-opacity:.3}.muze-layer-text-highlight{fill-opacity:1}.muze-layer-text-fadeout{fill-opacity:.3!important}.muze-layer-text-selected{fill:#000!important}.muze-layer-point{fill-opacity:.5;stroke-opacity:.5;fill:#086bb6;stroke:#086bb6}.muze-layer-point-highlight{stroke-width:2px!important;fill-opacity:0;stroke-opacity:1}.muze-layer-point-fadeout{fill-opacity:.3!important;fill:#7f7f7f!important;stroke-opacity:.3!important;stroke:#7f7f7f!important}.muze-layer-point-selected{fill:#000!important}.muze-layer-bar,.muze-layer-bar-highlight{fill-opacity:1}.muze-layer-bar-fadeout{fill-opacity:.2!important}.muze-layer-bar-selected{fill:#4682b4!important}.muze-layer-tick{stroke-opacity:.7;stroke:#f44336}.muze-layer-tick-highlight{stroke-opacity:1}.muze-layer-tick-fadeout{stroke-opacity:.3!important;stroke:#7f7f7f!important}.muze-layer-tick-selected{stroke:#000!important}.muze-visual-unit{background:transparent}.muze-axis-zero-line{stroke-width:1px}.muze-grid-band-x-0,.muze-grid-band-y-0{fill-opacity:0}.muze-unit{-webkit-touch-callout:none;-webkit-user-select:none}.muze-legend-box{font-family:Source Sans Pro,Helvetica Neue,Helvetica,Arial,sans-serif;line-height:10px!important;height:100px;float:none!important;display:inline-block}.muze-legend-title{display:table;-webkit-box-align:center;-webkit-align-items:center;align-items:center;float:left;text-align:left;font-size:14px;height:30px;fill:#5f5f5f;font-weight:600}.muze-legend-title-text{display:table-cell;vertical-align:middle}.muze-legend-overflow{text-align:center}.muze-legend-icon,.muze-legend-icon-svg{cursor:pointer}.muze-overflow-y{overflow-y:scroll}.muze-overflow-x{overflow-x:scroll}.muze-legend-fadeout{fill-opacity:.3;opacity:.3}.muze-legend-brighten{fill-opacity:1}.muze-legend-item-info{float:left;display:-webkit-box;display:-webkit-flex;display:flex;-webkit-box-align:center;-webkit-align-items:center;align-items:center;cursor:pointer;font-size:12px}.muze-legend-item-info.center{-webkit-box-pack:center;-webkit-justify-content:center;justify-content:center}.muze-legend-item-info.start{-webkit-box-pack:start;-webkit-justify-content:flex-start;justify-content:flex-start}.muze-legend-item-info.end{-webkit-box-pack:end;-webkit-justify-content:flex-end;justify-content:flex-end}.muze-legend-selection-box{fill:#777;fill-opacity:.3;stroke:#fff;cursor:all-scroll;pointer-events:all}.muze-text-cell{font-size:14px;text-align:center;color:#5f5f5f;font-weight:400;font-family:inherit}.muze-header-cell{font-size:16px}.muze-header-cell,.muze-subheader-cell{text-align:center;color:#858585;font-weight:800;font-family:inherit}.muze-subheader-cell{font-size:15px}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:200;src:local("Source Sans Pro ExtraLight Italic"),local("SourceSansPro-ExtraLightItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZYokSdh18S0xR41YDw.woff2) format("woff2");unicode-range:U+0460-052f,U+1c80-1c88,U+20b4,U+2de0-2dff,U+a640-a69f,U+fe2e-fe2f}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:200;src:local("Source Sans Pro ExtraLight Italic"),local("SourceSansPro-ExtraLightItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZYokSdo18S0xR41YDw.woff2) format("woff2");unicode-range:U+0400-045f,U+0490-0491,U+04b0-04b1,U+2116}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:200;src:local("Source Sans Pro ExtraLight Italic"),local("SourceSansPro-ExtraLightItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZYokSdg18S0xR41YDw.woff2) format("woff2");unicode-range:U+1f??}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:200;src:local("Source Sans Pro ExtraLight Italic"),local("SourceSansPro-ExtraLightItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZYokSdv18S0xR41YDw.woff2) format("woff2");unicode-range:U+0370-03ff}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:200;src:local("Source Sans Pro ExtraLight Italic"),local("SourceSansPro-ExtraLightItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZYokSdj18S0xR41YDw.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+1ea0-1ef9,U+20ab}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:200;src:local("Source Sans Pro ExtraLight Italic"),local("SourceSansPro-ExtraLightItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZYokSdi18S0xR41YDw.woff2) format("woff2");unicode-range:U+0100-024f,U+0259,U+1e??,U+2020,U+20a0-20ab,U+20ad-20cf,U+2113,U+2c60-2c7f,U+a720-a7ff}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:200;src:local("Source Sans Pro ExtraLight Italic"),local("SourceSansPro-ExtraLightItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZYokSds18S0xR41.woff2) format("woff2");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:300;src:local("Source Sans Pro Light Italic"),local("SourceSansPro-LightItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZMkidh18S0xR41YDw.woff2) format("woff2");unicode-range:U+0460-052f,U+1c80-1c88,U+20b4,U+2de0-2dff,U+a640-a69f,U+fe2e-fe2f}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:300;src:local("Source Sans Pro Light Italic"),local("SourceSansPro-LightItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZMkido18S0xR41YDw.woff2) format("woff2");unicode-range:U+0400-045f,U+0490-0491,U+04b0-04b1,U+2116}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:300;src:local("Source Sans Pro Light Italic"),local("SourceSansPro-LightItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZMkidg18S0xR41YDw.woff2) format("woff2");unicode-range:U+1f??}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:300;src:local("Source Sans Pro Light Italic"),local("SourceSansPro-LightItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZMkidv18S0xR41YDw.woff2) format("woff2");unicode-range:U+0370-03ff}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:300;src:local("Source Sans Pro Light Italic"),local("SourceSansPro-LightItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZMkidj18S0xR41YDw.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+1ea0-1ef9,U+20ab}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:300;src:local("Source Sans Pro Light Italic"),local("SourceSansPro-LightItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZMkidi18S0xR41YDw.woff2) format("woff2");unicode-range:U+0100-024f,U+0259,U+1e??,U+2020,U+20a0-20ab,U+20ad-20cf,U+2113,U+2c60-2c7f,U+a720-a7ff}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:300;src:local("Source Sans Pro Light Italic"),local("SourceSansPro-LightItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZMkids18S0xR41.woff2) format("woff2");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:400;src:local("Source Sans Pro Italic"),local("SourceSansPro-Italic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK1dSBYKcSV-LCoeQqfX1RYOo3qPZ7qsDJB9cme_xc.woff2) format("woff2");unicode-range:U+0460-052f,U+1c80-1c88,U+20b4,U+2de0-2dff,U+a640-a69f,U+fe2e-fe2f}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:400;src:local("Source Sans Pro Italic"),local("SourceSansPro-Italic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK1dSBYKcSV-LCoeQqfX1RYOo3qPZ7jsDJB9cme_xc.woff2) format("woff2");unicode-range:U+0400-045f,U+0490-0491,U+04b0-04b1,U+2116}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:400;src:local("Source Sans Pro Italic"),local("SourceSansPro-Italic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK1dSBYKcSV-LCoeQqfX1RYOo3qPZ7rsDJB9cme_xc.woff2) format("woff2");unicode-range:U+1f??}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:400;src:local("Source Sans Pro Italic"),local("SourceSansPro-Italic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK1dSBYKcSV-LCoeQqfX1RYOo3qPZ7ksDJB9cme_xc.woff2) format("woff2");unicode-range:U+0370-03ff}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:400;src:local("Source Sans Pro Italic"),local("SourceSansPro-Italic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK1dSBYKcSV-LCoeQqfX1RYOo3qPZ7osDJB9cme_xc.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+1ea0-1ef9,U+20ab}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:400;src:local("Source Sans Pro Italic"),local("SourceSansPro-Italic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK1dSBYKcSV-LCoeQqfX1RYOo3qPZ7psDJB9cme_xc.woff2) format("woff2");unicode-range:U+0100-024f,U+0259,U+1e??,U+2020,U+20a0-20ab,U+20ad-20cf,U+2113,U+2c60-2c7f,U+a720-a7ff}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:400;src:local("Source Sans Pro Italic"),local("SourceSansPro-Italic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK1dSBYKcSV-LCoeQqfX1RYOo3qPZ7nsDJB9cme.woff2) format("woff2");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:600;src:local("Source Sans Pro SemiBold Italic"),local("SourceSansPro-SemiBoldItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZY4lCdh18S0xR41YDw.woff2) format("woff2");unicode-range:U+0460-052f,U+1c80-1c88,U+20b4,U+2de0-2dff,U+a640-a69f,U+fe2e-fe2f}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:600;src:local("Source Sans Pro SemiBold Italic"),local("SourceSansPro-SemiBoldItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZY4lCdo18S0xR41YDw.woff2) format("woff2");unicode-range:U+0400-045f,U+0490-0491,U+04b0-04b1,U+2116}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:600;src:local("Source Sans Pro SemiBold Italic"),local("SourceSansPro-SemiBoldItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZY4lCdg18S0xR41YDw.woff2) format("woff2");unicode-range:U+1f??}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:600;src:local("Source Sans Pro SemiBold Italic"),local("SourceSansPro-SemiBoldItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZY4lCdv18S0xR41YDw.woff2) format("woff2");unicode-range:U+0370-03ff}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:600;src:local("Source Sans Pro SemiBold Italic"),local("SourceSansPro-SemiBoldItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZY4lCdj18S0xR41YDw.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+1ea0-1ef9,U+20ab}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:600;src:local("Source Sans Pro SemiBold Italic"),local("SourceSansPro-SemiBoldItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZY4lCdi18S0xR41YDw.woff2) format("woff2");unicode-range:U+0100-024f,U+0259,U+1e??,U+2020,U+20a0-20ab,U+20ad-20cf,U+2113,U+2c60-2c7f,U+a720-a7ff}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:600;src:local("Source Sans Pro SemiBold Italic"),local("SourceSansPro-SemiBoldItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZY4lCds18S0xR41.woff2) format("woff2");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:700;src:local("Source Sans Pro Bold Italic"),local("SourceSansPro-BoldItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZclSdh18S0xR41YDw.woff2) format("woff2");unicode-range:U+0460-052f,U+1c80-1c88,U+20b4,U+2de0-2dff,U+a640-a69f,U+fe2e-fe2f}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:700;src:local("Source Sans Pro Bold Italic"),local("SourceSansPro-BoldItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZclSdo18S0xR41YDw.woff2) format("woff2");unicode-range:U+0400-045f,U+0490-0491,U+04b0-04b1,U+2116}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:700;src:local("Source Sans Pro Bold Italic"),local("SourceSansPro-BoldItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZclSdg18S0xR41YDw.woff2) format("woff2");unicode-range:U+1f??}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:700;src:local("Source Sans Pro Bold Italic"),local("SourceSansPro-BoldItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZclSdv18S0xR41YDw.woff2) format("woff2");unicode-range:U+0370-03ff}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:700;src:local("Source Sans Pro Bold Italic"),local("SourceSansPro-BoldItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZclSdj18S0xR41YDw.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+1ea0-1ef9,U+20ab}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:700;src:local("Source Sans Pro Bold Italic"),local("SourceSansPro-BoldItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZclSdi18S0xR41YDw.woff2) format("woff2");unicode-range:U+0100-024f,U+0259,U+1e??,U+2020,U+20a0-20ab,U+20ad-20cf,U+2113,U+2c60-2c7f,U+a720-a7ff}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:700;src:local("Source Sans Pro Bold Italic"),local("SourceSansPro-BoldItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZclSds18S0xR41.woff2) format("woff2");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:900;src:local("Source Sans Pro Black Italic"),local("SourceSansPro-BlackItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZklydh18S0xR41YDw.woff2) format("woff2");unicode-range:U+0460-052f,U+1c80-1c88,U+20b4,U+2de0-2dff,U+a640-a69f,U+fe2e-fe2f}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:900;src:local("Source Sans Pro Black Italic"),local("SourceSansPro-BlackItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZklydo18S0xR41YDw.woff2) format("woff2");unicode-range:U+0400-045f,U+0490-0491,U+04b0-04b1,U+2116}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:900;src:local("Source Sans Pro Black Italic"),local("SourceSansPro-BlackItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZklydg18S0xR41YDw.woff2) format("woff2");unicode-range:U+1f??}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:900;src:local("Source Sans Pro Black Italic"),local("SourceSansPro-BlackItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZklydv18S0xR41YDw.woff2) format("woff2");unicode-range:U+0370-03ff}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:900;src:local("Source Sans Pro Black Italic"),local("SourceSansPro-BlackItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZklydj18S0xR41YDw.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+1ea0-1ef9,U+20ab}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:900;src:local("Source Sans Pro Black Italic"),local("SourceSansPro-BlackItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZklydi18S0xR41YDw.woff2) format("woff2");unicode-range:U+0100-024f,U+0259,U+1e??,U+2020,U+20a0-20ab,U+20ad-20cf,U+2113,U+2c60-2c7f,U+a720-a7ff}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:900;src:local("Source Sans Pro Black Italic"),local("SourceSansPro-BlackItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZklyds18S0xR41.woff2) format("woff2");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:200;src:local("Source Sans Pro ExtraLight"),local("SourceSansPro-ExtraLight"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i94_wmhdu3cOWxy40.woff2) format("woff2");unicode-range:U+0460-052f,U+1c80-1c88,U+20b4,U+2de0-2dff,U+a640-a69f,U+fe2e-fe2f}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:200;src:local("Source Sans Pro ExtraLight"),local("SourceSansPro-ExtraLight"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i94_wkxdu3cOWxy40.woff2) format("woff2");unicode-range:U+0400-045f,U+0490-0491,U+04b0-04b1,U+2116}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:200;src:local("Source Sans Pro ExtraLight"),local("SourceSansPro-ExtraLight"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i94_wmxdu3cOWxy40.woff2) format("woff2");unicode-range:U+1f??}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:200;src:local("Source Sans Pro ExtraLight"),local("SourceSansPro-ExtraLight"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i94_wlBdu3cOWxy40.woff2) format("woff2");unicode-range:U+0370-03ff}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:200;src:local("Source Sans Pro ExtraLight"),local("SourceSansPro-ExtraLight"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i94_wmBdu3cOWxy40.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+1ea0-1ef9,U+20ab}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:200;src:local("Source Sans Pro ExtraLight"),local("SourceSansPro-ExtraLight"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i94_wmRdu3cOWxy40.woff2) format("woff2");unicode-range:U+0100-024f,U+0259,U+1e??,U+2020,U+20a0-20ab,U+20ad-20cf,U+2113,U+2c60-2c7f,U+a720-a7ff}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:200;src:local("Source Sans Pro ExtraLight"),local("SourceSansPro-ExtraLight"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i94_wlxdu3cOWxw.woff2) format("woff2");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:300;src:local("Source Sans Pro Light"),local("SourceSansPro-Light"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ik4zwmhdu3cOWxy40.woff2) format("woff2");unicode-range:U+0460-052f,U+1c80-1c88,U+20b4,U+2de0-2dff,U+a640-a69f,U+fe2e-fe2f}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:300;src:local("Source Sans Pro Light"),local("SourceSansPro-Light"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ik4zwkxdu3cOWxy40.woff2) format("woff2");unicode-range:U+0400-045f,U+0490-0491,U+04b0-04b1,U+2116}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:300;src:local("Source Sans Pro Light"),local("SourceSansPro-Light"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ik4zwmxdu3cOWxy40.woff2) format("woff2");unicode-range:U+1f??}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:300;src:local("Source Sans Pro Light"),local("SourceSansPro-Light"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ik4zwlBdu3cOWxy40.woff2) format("woff2");unicode-range:U+0370-03ff}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:300;src:local("Source Sans Pro Light"),local("SourceSansPro-Light"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ik4zwmBdu3cOWxy40.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+1ea0-1ef9,U+20ab}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:300;src:local("Source Sans Pro Light"),local("SourceSansPro-Light"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ik4zwmRdu3cOWxy40.woff2) format("woff2");unicode-range:U+0100-024f,U+0259,U+1e??,U+2020,U+20a0-20ab,U+20ad-20cf,U+2113,U+2c60-2c7f,U+a720-a7ff}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:300;src:local("Source Sans Pro Light"),local("SourceSansPro-Light"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ik4zwlxdu3cOWxw.woff2) format("woff2");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:400;src:local("Source Sans Pro Regular"),local("SourceSansPro-Regular"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK3dSBYKcSV-LCoeQqfX1RYOo3qNa7lujVj9_mf.woff2) format("woff2");unicode-range:U+0460-052f,U+1c80-1c88,U+20b4,U+2de0-2dff,U+a640-a69f,U+fe2e-fe2f}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:400;src:local("Source Sans Pro Regular"),local("SourceSansPro-Regular"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK3dSBYKcSV-LCoeQqfX1RYOo3qPK7lujVj9_mf.woff2) format("woff2");unicode-range:U+0400-045f,U+0490-0491,U+04b0-04b1,U+2116}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:400;src:local("Source Sans Pro Regular"),local("SourceSansPro-Regular"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK3dSBYKcSV-LCoeQqfX1RYOo3qNK7lujVj9_mf.woff2) format("woff2");unicode-range:U+1f??}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:400;src:local("Source Sans Pro Regular"),local("SourceSansPro-Regular"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK3dSBYKcSV-LCoeQqfX1RYOo3qO67lujVj9_mf.woff2) format("woff2");unicode-range:U+0370-03ff}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:400;src:local("Source Sans Pro Regular"),local("SourceSansPro-Regular"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK3dSBYKcSV-LCoeQqfX1RYOo3qN67lujVj9_mf.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+1ea0-1ef9,U+20ab}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:400;src:local("Source Sans Pro Regular"),local("SourceSansPro-Regular"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK3dSBYKcSV-LCoeQqfX1RYOo3qNq7lujVj9_mf.woff2) format("woff2");unicode-range:U+0100-024f,U+0259,U+1e??,U+2020,U+20a0-20ab,U+20ad-20cf,U+2113,U+2c60-2c7f,U+a720-a7ff}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:400;src:local("Source Sans Pro Regular"),local("SourceSansPro-Regular"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK3dSBYKcSV-LCoeQqfX1RYOo3qOK7lujVj9w.woff2) format("woff2");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:600;src:local("Source Sans Pro SemiBold"),local("SourceSansPro-SemiBold"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i54rwmhdu3cOWxy40.woff2) format("woff2");unicode-range:U+0460-052f,U+1c80-1c88,U+20b4,U+2de0-2dff,U+a640-a69f,U+fe2e-fe2f}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:600;src:local("Source Sans Pro SemiBold"),local("SourceSansPro-SemiBold"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i54rwkxdu3cOWxy40.woff2) format("woff2");unicode-range:U+0400-045f,U+0490-0491,U+04b0-04b1,U+2116}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:600;src:local("Source Sans Pro SemiBold"),local("SourceSansPro-SemiBold"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i54rwmxdu3cOWxy40.woff2) format("woff2");unicode-range:U+1f??}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:600;src:local("Source Sans Pro SemiBold"),local("SourceSansPro-SemiBold"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i54rwlBdu3cOWxy40.woff2) format("woff2");unicode-range:U+0370-03ff}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:600;src:local("Source Sans Pro SemiBold"),local("SourceSansPro-SemiBold"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i54rwmBdu3cOWxy40.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+1ea0-1ef9,U+20ab}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:600;src:local("Source Sans Pro SemiBold"),local("SourceSansPro-SemiBold"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i54rwmRdu3cOWxy40.woff2) format("woff2");unicode-range:U+0100-024f,U+0259,U+1e??,U+2020,U+20a0-20ab,U+20ad-20cf,U+2113,U+2c60-2c7f,U+a720-a7ff}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:600;src:local("Source Sans Pro SemiBold"),local("SourceSansPro-SemiBold"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i54rwlxdu3cOWxw.woff2) format("woff2");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:700;src:local("Source Sans Pro Bold"),local("SourceSansPro-Bold"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ig4vwmhdu3cOWxy40.woff2) format("woff2");unicode-range:U+0460-052f,U+1c80-1c88,U+20b4,U+2de0-2dff,U+a640-a69f,U+fe2e-fe2f}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:700;src:local("Source Sans Pro Bold"),local("SourceSansPro-Bold"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ig4vwkxdu3cOWxy40.woff2) format("woff2");unicode-range:U+0400-045f,U+0490-0491,U+04b0-04b1,U+2116}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:700;src:local("Source Sans Pro Bold"),local("SourceSansPro-Bold"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ig4vwmxdu3cOWxy40.woff2) format("woff2");unicode-range:U+1f??}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:700;src:local("Source Sans Pro Bold"),local("SourceSansPro-Bold"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ig4vwlBdu3cOWxy40.woff2) format("woff2");unicode-range:U+0370-03ff}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:700;src:local("Source Sans Pro Bold"),local("SourceSansPro-Bold"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ig4vwmBdu3cOWxy40.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+1ea0-1ef9,U+20ab}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:700;src:local("Source Sans Pro Bold"),local("SourceSansPro-Bold"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ig4vwmRdu3cOWxy40.woff2) format("woff2");unicode-range:U+0100-024f,U+0259,U+1e??,U+2020,U+20a0-20ab,U+20ad-20cf,U+2113,U+2c60-2c7f,U+a720-a7ff}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:700;src:local("Source Sans Pro Bold"),local("SourceSansPro-Bold"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ig4vwlxdu3cOWxw.woff2) format("woff2");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:900;src:local("Source Sans Pro Black"),local("SourceSansPro-Black"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3iu4nwmhdu3cOWxy40.woff2) format("woff2");unicode-range:U+0460-052f,U+1c80-1c88,U+20b4,U+2de0-2dff,U+a640-a69f,U+fe2e-fe2f}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:900;src:local("Source Sans Pro Black"),local("SourceSansPro-Black"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3iu4nwkxdu3cOWxy40.woff2) format("woff2");unicode-range:U+0400-045f,U+0490-0491,U+04b0-04b1,U+2116}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:900;src:local("Source Sans Pro Black"),local("SourceSansPro-Black"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3iu4nwmxdu3cOWxy40.woff2) format("woff2");unicode-range:U+1f??}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:900;src:local("Source Sans Pro Black"),local("SourceSansPro-Black"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3iu4nwlBdu3cOWxy40.woff2) format("woff2");unicode-range:U+0370-03ff}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:900;src:local("Source Sans Pro Black"),local("SourceSansPro-Black"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3iu4nwmBdu3cOWxy40.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+1ea0-1ef9,U+20ab}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:900;src:local("Source Sans Pro Black"),local("SourceSansPro-Black"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3iu4nwmRdu3cOWxy40.woff2) format("woff2");unicode-range:U+0100-024f,U+0259,U+1e??,U+2020,U+20a0-20ab,U+20ad-20cf,U+2113,U+2c60-2c7f,U+a720-a7ff}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:900;src:local("Source Sans Pro Black"),local("SourceSansPro-Black"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3iu4nwlxdu3cOWxw.woff2) format("woff2");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}.muze-group-container{font-family:Source Sans Pro,Helvetica Neue,Helvetica,Arial,sans-serif;font-size:14px;-webkit-tap-highlight-color:rgba(0,0,0,0);line-height:1.42857143;color:#333;background-color:transparent;margin:0}.muze-group-container *,.muze-group-container :after,.muze-group-container :before{-webkit-box-sizing:border-box;box-sizing:border-box}.muze-group-container .muze-table-arrow{margin:5px;width:0;height:0;position:absolute;opacity:.5;z-index:10;cursor:pointer}.muze-group-container .muze-table-arrow:hover{opacity:1}.muze-group-container .muze-table-arrow-right{left:100%;border-left:15px solid #4682b4}.muze-group-container .muze-table-arrow-left,.muze-group-container .muze-table-arrow-right{top:-webkit-calc(50% - 25px);top:calc(50% - 25px);border-top:20px solid transparent;border-bottom:20px solid transparent}.muze-group-container .muze-table-arrow-left{right:100%;border-right:15px solid #4682b4}.muze-group-container .muze-table-arrow-bottom{top:100%;border-top:15px solid #4682b4}.muze-group-container .muze-table-arrow-bottom,.muze-group-container .muze-table-arrow-top{left:-webkit-calc(50% - 25px);left:calc(50% - 25px);border-left:20px solid transparent;border-right:20px solid transparent}.muze-group-container .muze-table-arrow-top{bottom:100%;border-bottom:15px solid #4682b4}.muze-group-container .table-row-nested{visibility:hidden;border-top:none}.muze-group-container svg{display:block;width:inherit;height:inherit;float:left;vertical-align:top}.muze-group-container .axisName.hidden{opacity:0}.muze-group-container .axisName{opacity:1}.muze-group-container .grid-td svg{max-width:100%;max-height:100%}.muze-group-container .domain{opacity:0}.muze-board{float:left}.muze-layout-container{float:left;position:relative}.muze-board-legend,.muze-legend-section{text-align:center;float:left}.muze-legend-horizontal-section{display:-webkit-box;display:-webkit-flex;display:flex;-webkit-box-align:center;-webkit-align-items:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;justify-content:center;-webkit-flex-wrap:wrap;flex-wrap:wrap}.muze-legend-components{text-align:center;float:left}.muze-grid-layout,.muze-grid-layout-container,.muze-grid-layout-row{float:left;position:relative}.muze-grid-table{background-color:transparent;border-spacing:0;table-layout:fixed}.muze-grid-td,.muze-grid-th{padding:0}.muze-table-header{width:inherit;height:inherit}.muze-grid-layout,.muze-layout-grid-container{float:left;position:relative}.muze-layout-grid-container div,.muze-layout-grid-container table{float:left;border-collapse:collapse}.muze-title-container .muze-header-cell{font-size:24px;font-weight:700;color:#5f5f5f}.muze-subtitle-container .muze-text-cell{font-size:16px;font-weight:400;color:#b1b1b1}.domain{opacity:0}.muze-group-container,.muze-layout-container,.muze-legend-container{float:left}.hidden{display:none} \ No newline at end of file diff --git a/dist/muze.js b/dist/muze.js index 37488f60..d57204ad 100644 --- a/dist/muze.js +++ b/dist/muze.js @@ -1,2 +1,2 @@ -!function webpackUniversalModuleDefinition(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define("muze",[],t):"object"==typeof exports?exports.muze=t():e.muze=t()}(window,function(){return function(e){var t={};function __webpack_require__(n){if(t[n])return t[n].exports;var r=t[n]={i:n,l:!1,exports:{}};return e[n].call(r.exports,r,r.exports,__webpack_require__),r.l=!0,r.exports}return __webpack_require__.m=e,__webpack_require__.c=t,__webpack_require__.d=function(e,t,n){__webpack_require__.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},__webpack_require__.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},__webpack_require__.t=function(e,t){if(1&t&&(e=__webpack_require__(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(__webpack_require__.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var r in e)__webpack_require__.d(n,r,function(t){return e[t]}.bind(null,r));return n},__webpack_require__.n=function(e){var t=e&&e.__esModule?function getDefault(){return e.default}:function getModuleExports(){return e};return __webpack_require__.d(t,"a",t),t},__webpack_require__.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},__webpack_require__.p="",__webpack_require__(__webpack_require__.s=7)}([function(e,t,n){(function(e){var r,i,a,o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};!function(n,u){"object"==o(t)&&"object"==o(e)?e.exports=u():(i=[],void 0===(a="function"==typeof(r=u)?r.apply(t,i):r)||(e.exports=a))}(window,function(){return function(e){var t={};function n(r){if(t[r])return t[r].exports;var i=t[r]={i:r,l:!1,exports:{}};return e[r].call(i.exports,i,i.exports,n),i.l=!0,i.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==(void 0===e?"undefined":o(e))&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var i in e)n.d(r,i,function(t){return e[t]}.bind(null,i));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=1)}([function(e){e.exports={name:"datamodel",description:"Relational algebra compliant in-memory tabular data store",homepage:"https://github.com/chartshq/datamodel",version:"2.0.2",license:"MIT",main:"dist/datamodel.js",author:"Charts.com ",keywords:["datamodel","data","relational","algebra","model","muze","fusioncharts","table","tabular","operation"],repository:{type:"git",url:"https://github.com/chartshq/datamodel.git"},contributors:[{name:"Akash Goswami",email:"akash@charts.com"},{name:"Subhash Haldar",email:"subhash@charts.com"},{name:"Rousan Ali",email:"rousan@charts.com",url:"https://rousan.io"},{name:"Ujjal Kumar Dutta",email:"ujjal@charts.com"}],dependencies:{"d3-dsv":"^1.0.8"},devDependencies:{"babel-cli":"6.26.0","babel-core":"^6.26.3","babel-eslint":"6.1.2","babel-loader":"^7.1.4","babel-plugin-transform-runtime":"^6.23.0","babel-preset-env":"^1.7.0","babel-preset-es2015":"^6.24.1","babel-preset-flow":"^6.23.0",chai:"3.5.0","cross-env":"^5.0.5",eslint:"3.19.0","eslint-config-airbnb":"15.1.0","eslint-plugin-import":"2.7.0","eslint-plugin-jsx-a11y":"5.1.1","eslint-plugin-react":"7.3.0","istanbul-instrumenter-loader":"^3.0.0",jsdoc:"3.5.5",json2yaml:"^1.1.0",karma:"1.7.1","karma-chai":"0.1.0","karma-chrome-launcher":"2.1.1","karma-coverage-istanbul-reporter":"^1.3.0","karma-mocha":"1.3.0","karma-spec-reporter":"0.0.31","karma-webpack":"2.0.3",marked:"^0.5.0",mocha:"3.4.2","mocha-webpack":"0.7.0","transform-runtime":"0.0.0",webpack:"^4.12.0","webpack-cli":"^3.0.7","webpack-dev-server":"^3.1.4"},scripts:{test:"npm run lint && npm run ut",ut:"karma start karma.conf.js",utd:"karma start --single-run false --browsers Chrome karma.conf.js ",build:"webpack --mode production","build:dev":"webpack --mode development",start:"webpack-dev-server --config webpack.config.dev.js --mode development --open",lint:"eslint ./src","lint-errors":"eslint --quiet ./src",docs:"rm -rf yaml && mkdir yaml && jsdoc -c jsdoc.conf.json"}}},function(e,t,n){var r=n(2);e.exports=r.default?r.default:r},function(n,c,f){"use strict";f.r(c);var p={};f.r(p),f.d(p,"DataFormat",function(){return b}),f.d(p,"DimensionSubtype",function(){return _}),f.d(p,"MeasureSubtype",function(){return C}),f.d(p,"FieldType",function(){return P}),f.d(p,"FilteringMode",function(){return A});var y={};f.r(y),f.d(y,"DSVArr",function(){return Je}),f.d(y,"DSVStr",function(){return lt}),f.d(y,"FlatJSON",function(){return ft}),f.d(y,"Auto",function(){return ht});var g={};f.r(g),f.d(g,"sum",function(){return Et}),f.d(g,"avg",function(){return Mt}),f.d(g,"min",function(){return Ot}),f.d(g,"max",function(){return Tt}),f.d(g,"first",function(){return Ft}),f.d(g,"last",function(){return Nt}),f.d(g,"count",function(){return jt}),f.d(g,"sd",function(){return It});var b={FLAT_JSON:"FlatJSON",DSV_STR:"DSVStr",DSV_ARR:"DSVArr",AUTO:"Auto"},_={CATEGORICAL:"categorical",TEMPORAL:"temporal",GEO:"geo"},C={DISCRETE:"discrete"},P={MEASURE:"measure",DIMENSION:"dimension"},A={NORMAL:"normal",INVERSE:"inverse",ALL:"all"};function l(e,t){e.length>0&&e.split(",").forEach(function(e){var n=e.split("-"),r=+n[0],i=+(n[1]||n[0]);if(i>=r)for(var a=r;a<=i;a+=1)t(a)})}var O=function(){function e(e,t){for(var n=0;n=0;)o=e[a+1],-1!==r.indexOf(o)&&i.push({index:a,token:o});return i},m.formatAs=function(e,t){var n,r=h(e),i=m.findTokens(t),a=m.getTokenDefinitions(),o=String(t),u=m.TOKEN_PREFIX,c=void 0,s=void 0,l=void 0;for(l=0,n=i.length;l=0;h--)(s=a[h].index)+1!==f.length-1?(void 0===u&&(u=f.length),l=f.substring(s+2,u),f=f.substring(0,s+2)+RegExp.escape(l)+f.substring(u,f.length),u=s):u=s;for(h=0;h1){r=Math.abs(n[1]-n[0]);for(var i=2,a=n.length;i3&&void 0!==arguments[3]&&arguments[3],i=arguments.length>4&&void 0!==arguments[4]?arguments[4]:ye.CROSS,a=[],o=[],u=n||K,c=e.getFieldspace(),s=t.getFieldspace(),f=c.name,h=s.name,d=c.name+"."+s.name,p=L(c,s);if(f===h)throw new Error("DataModels must have different alias names");return c.fields.forEach(function(e){var t=E({},e.schema);-1===p.indexOf(t.name)||r||(t.name=c.name+"."+t.name),a.push(t)}),s.fields.forEach(function(e){var t=E({},e.schema);-1!==p.indexOf(t.name)?r||(t.name=s.name+"."+t.name,a.push(t)):a.push(t)}),l(e._rowDiffset,function(e){var n=!1,d=void 0;l(t._rowDiffset,function(t){var l=[],y={};y[f]={},y[h]={},c.fields.forEach(function(t){l.push(t.data[e]),y[f][t.name]=t.data[e]}),s.fields.forEach(function(e){-1!==p.indexOf(e.schema.name)&&r||l.push(e.data[t]),y[h][e.name]=e.data[t]});var g=Ke(y[f]),v=Ke(y[h]);if(u(g,v)){var m={};l.forEach(function(e,t){m[a[t].name]=e}),n&&ye.CROSS!==i?o[d]=m:(o.push(m),n=!0,d=e)}else if((i===ye.LEFTOUTER||i===ye.RIGHTOUTER)&&!n){var b={},_=c.fields.length-1;l.forEach(function(e,t){b[a[t].name]=t<=_?e:null}),n=!0,d=e,o.push(b)}})}),new At(o,a,{name:d})}function z(e,t){var n=""+e,r=""+t;return nr?1:0}function X(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:z;return e.length>1&&function e(t,n,r,i){if(r===n)return t;var a=n+Math.floor((r-n)/2);return e(t,n,a,i),e(t,a+1,r,i),function(e,t,n,r,i){for(var a=e,o=[],u=t;u<=r;u+=1)o[u]=a[u];for(var c=t,s=n+1,l=t;l<=r;l+=1)c>n?(a[l]=o[s],s+=1):s>r?(a[l]=o[c],c+=1):i(o[c],o[s])<=0?(a[l]=o[c],c+=1):(a[l]=o[s],s+=1)}(t,n,a,r,i),t}(e,0,e.length-1,t),e}function Q(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);to?"desc"===t?-1:1:0}}return i}function Z(e,t){var n=new Map,r=[];return e.forEach(function(e){var i=e[t];n.has(i)?r[n.get(i)][1].push(e):(r.push([i,[e]]),n.set(i,r.length-1))}),r}function ee(e,t,n){var r={label:e[0]};return t.reduce(function(t,r,i){return t[r]=e[1].map(function(e){return e[n[i].index]}),t},r),r}function ne(e,t){var n={},r=[],i=[],a=[],o=e.getFieldspace(),u=t.getFieldspace(),c=o.fieldsObj(),s=u.fieldsObj(),f=o.name+" union "+u.name;if(!M(e._colIdentifier.split(",").sort(),t._colIdentifier.split(",").sort()))return null;function d(e,t,r){l(e._rowDiffset,function(e){var o={},u="";i.forEach(function(n){var r=t[n].data[e];u+="-"+r,o[n]=r}),n[u]||(r&&a.push(o),n[u]=!0)})}return e._colIdentifier.split(",").forEach(function(e){var t=c[e];r.push(E({},t.schema)),i.push(t.schema.name)}),d(t,s,!1),d(e,c,!0),new At(a,r,{name:f})}function re(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);tn&&(n=e)}),[t,n]}(this.data)}},{key:"parse",value:function value(e){return e=parseFloat(e,10),Number.isNaN(e)?null:e}},{key:"unit",value:function value(){return this.fieldUnit}},{key:"scale",value:function value(){return this.fieldScale}},{key:"numberFormat",value:function value(){var e=this.fieldNumberformat;return function(t){return e(t)}}},{key:"defAggFn",value:function value(){return this.fieldDefAggFn}}]),t}(),Ee=function(){function e(e,t){for(var n=0;n=a?c=!0:(r=e.charCodeAt(o++))===at?l=!0:r===ot&&(l=!0,e.charCodeAt(o)===at&&++o),e.slice(i+1,t-1).replace(/""/g,'"')}for(;o2&&void 0!==arguments[2]?arguments[2]:{},i=arguments[3],a=void 0;t!==fe?(a={op:t,meta:r,criteria:i},e._derivation.push(a)):(a=[].concat(Ge(i)),e._derivation.length=0,(n=e._derivation).push.apply(n,Ge(a)))},yt=function ze(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=n.operation||"and",i=n.filterByMeasure||!1,a=[];a=t.length?t.map(function(e){return function(e){var t=e.getData(),n=t.schema,r=e.getFieldsConfig(),a=e.getFieldspace().fieldsObj(),o=t.data,u=Object.values(r).reduce(function(e,t){return e[t.def.name]=a[t.def.name].domain(),e},{});return function(e){return!!o.length&&o.some(function(t){return n.every(function(n){if(!(n.name in e))return!0;var a=e[n.name].valueOf();if(i&&n.type===P.MEASURE)return a>=u[n.name][0]&&a<=u[n.name][1];if(n.type!==P.DIMENSION)return!0;var o=r[n.name].index;return t[o]===e[n.name].valueOf()})})}}(e)}):[function(){return!1}];return"and"===r?e.clone(!1,!1).select(function(e){return a.every(function(t){return t(e)})},{saveChild:!1,mode:A.ALL}):e.clone(!1,!1).select(function(e){return a.some(function(t){return t(e)})},{mode:A.ALL,saveChild:!1})},gt=function Xe(e,t,n,r){var i=e.clone(r.saveChild),a=function(e,t,n,r){var i=[],a=-1,o=void 0,c=function u(e){return n(qe(t,e),e)};return r.mode===A.INVERSE&&(c=function u(e){return!n(qe(t,e))}),l(e,function(e){c(e)&&(-1!==a&&e===a+1?(o=i.length-1,i[o]=i[o].split("-")[0]+"-"+e):i.push(""+e),a=e)}),i.join(",")}(i._rowDiffset,i.getPartialFieldspace().fields,t,n);return i._rowDiffset=a,i.__calculateFieldspace().calculateFieldsConfig(),r.saveChild&&pt(i,ce,{config:n},t),i},vt=function Qe(e,t,n,r){var i=e.clone(n.saveChild),a=t;return n.mode===A.INVERSE&&(a=r.filter(function(e){return-1===t.indexOf(e)})),i._colIdentifier=a.join(","),i.__calculateFieldspace().calculateFieldsConfig(),n.saveChild&&pt(i,se,{projField:t,config:n,actualProjField:a},null),i},mt=function $e(e,t,n,r){r=Object.assign(Object.assign({},Ze),r);var i=y[r.dataFormat];if(!i||"function"!=typeof i)throw new Error("No converter function found for "+r.dataFormat+" format");var a=i(t,r),o=dt(a,2),u=o[0],c=o[1],s=Ue(c,n,u),l=Y.createNamespace(s,r.name);return e._partialFieldspace=l,e._rowDiffset=c.length&&c[0].length?"0-"+(c[0].length-1):"",e._colIdentifier=n.map(function(e){return e.name}).join(),e},bt=function Ze(e,t){for(var n=0;n2&&void 0!==arguments[2]?arguments[2]:{},i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},a=i.nonTraversingModel,o=i.excludeModels||[];t!==a&&((!o.length||-1===o.indexOf(t))&&t.handlePropagation(n,r),t._children.forEach(function(t){var a=_t(n,t),o=dt(a,2),u=o[0],c=o[1];e(t,[u,c],r,i)}))},wt=function nt(e,t,n,r){var i=void 0,a=void 0,o=n.propagationNameSpace,u=n.propagateToSource,c=n.sourceId,s=r.propagateInterpolatedValues,l=[];if(null===e&&!0!==r.persistent)l=[{criteria:[]}];else{var f,h=Object.values(o.mutableActions);!1!==u&&(h=h.filter(function(e){return e.config.sourceId!==c}));var d=h.filter(function(e){return(r.filterFn||function(){return!0})(e,r)}).map(function(e){return e.config.criteria}),p=[];if(!1!==u){var y=Object.values(o.mutableActions);y.forEach(function(e){var t=e.config;!1===t.applyOnSource&&t.action===r.action&&t.sourceId!==c&&(p.push(e.model),(i=y.filter(function(t){return t!==e}).map(function(e){return e.config.criteria})).length&&l.push({criteria:i,models:e.model,path:function e(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];return null!==t._parent&&(n.push(t),e(t._parent,n)),n}(e.model)}))})}i=(f=[]).concat.apply(f,[].concat(Ge(d),[e])).filter(function(e){return null!==e}),l.push({criteria:i,excludeModels:[].concat(p,Ge(r.excludeModels||[]))})}var g=t.model,v=Object.assign({sourceIdentifiers:e,propagationSourceId:c},r),m=t.groupByModel;s&&m&&(a=yt(m,i,{filterByMeasure:s}),xt(m,a,v)),l.forEach(function(e){var t=yt(g,e.criteria),n=e.path;if(n){var r=function(e,t){for(var n=0,r=t.length;n0&&void 0!==arguments[0])||arguments[0],t=void 0;if(!1===(!(arguments.length>1&&void 0!==arguments[1])||arguments[1])){var n=this.getData({getAllFields:!0}),r=n.data,i=n.schema,a=r.map(function(e){var t={};return i.forEach(function(n,r){t[n.name]=e[r]}),t});t=new this.constructor(a,i)}else t=new this.constructor(this);return e&&this._children.push(t),t}},{key:"project",value:function value(e,t){var n={mode:A.NORMAL,saveChild:!0};t=Object.assign({},n,t);var r=this.getFieldsConfig(),i=Object.keys(r),a=t.mode,o=e.reduce(function(e,t){return"RegExp"===t.constructor.name?e.push.apply(e,function(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t1&&void 0!==arguments[1]?arguments[1]:[];pt(this,fe,null,t),this._parent=e,e._children.push(this)}}]),e}(),St=function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function(e,t){var n=[],r=!0,i=!1,a=void 0;try{for(var o,u=e[Symbol.iterator]();!(r=(o=u.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){i=!0,a=e}finally{try{!r&&u.return&&u.return()}finally{if(i)throw a}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")},Pt=function(){function e(e,t){for(var n=0;n0,c=[];if(n.split(",").forEach(function(t){for(var n=0;n=0;u--)i=t[u][0],a=t[u][1],(o=bt(r,i))&&(S(a)?X(n,function(e,t){return a(e[o.index],t[o.index])}):j(a)?function(){var e=Z(n,o.index),t=a[a.length-1],i=a.slice(0,a.length-1),u=i.map(function(e){return bt(r,e)});e.forEach(function(e){e.push(ee(e,i,u))}),X(e,function(e,n){var r=e[2],i=n[2];return t(r,i)}),n.length=0,e.forEach(function(e){n.push.apply(n,Q(e[1]))})}():(a="desc"===String(a).toLowerCase()?"desc":"asc",X(n,$(o.type,a,o.index))));e.uids=[],n.forEach(function(t){e.uids.push(t.pop())})}(a,r),i.columnWise){var s=Array.apply(void 0,Q(Array(a.schema.length))).map(function(){return[]});a.data.forEach(function(e){e.forEach(function(e,t){s[t].push(e)})}),a.data=s}return a}.call(this,this.getPartialFieldspace().fields,this._rowDiffset,e.getAllFields?t.map(function(e){return e.name}).join():this._colIdentifier,e.sort,{columnWise:"column"===e.order,addUid:!!e.withUid});if(!e.formatter)return n;var r=e.formatter,i=n.data,a=n.schema,o=n.uids,u=a.map(function(e){return e.name}),c=Object.keys(r).reduce(function(e,t){var n=u.indexOf(t);return-1!==n&&e.push([n,r[t]]),e},[]);return"column"===e.order?c.forEach(function(e){var t=e[0],n=e[1];i[t].forEach(function(e,r){i[t][r]=n.call(void 0,e,o[r],a[t])})}):i.forEach(function(e,t){c.forEach(function(n){var r=n[0],i=n[1];e[r]=i.call(void 0,e[r],o[t],a[r])})}),n}},{key:"groupBy",value:function value(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{saveChild:!0},r=""+e.join(),i=function de(e,t,n,r){var i=function(e,t){var n=[],r=e.getPartialFieldspace(),i=r.getDimension(),a=r.getMeasure();return Object.entries(i).forEach(function(e){var r=ke(e,1)[0];t&&t.length?-1!==t.indexOf(r)&&n.push(r):n.push(r)}),Object.entries(a).forEach(function(e){var r=ke(e,1)[0];"discrete"===a[r].subType()&&(t&&t.length?-1!==t.indexOf(r)&&n.push(r):n.push(r))}),n}(e,t),a=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n={},r=t,i=e.getPartialFieldspace().getMeasure(),a=we.defaultReducer();return"function"==typeof t&&(a=t),Object.entries(i).forEach(function(e){var o=ke(e,1)[0];"string"==typeof t[o]&&(r[o]=we.resolve(r[o])?we.resolve(r[o]):a),"function"!=typeof t[o]&&(r[o]=void 0),n[o]=r[o]||we.resolve(i[o].defAggFn())||a}),n}(e,n),o=e.getPartialFieldspace(),u=o.fieldsObj(),c=o.name,s=[],f=[],h=[],d={},p=[],y=void 0;Object.entries(u).forEach(function(e){var t=ke(e,2),n=t[0],r=t[1];(-1!==i.indexOf(n)||a[n])&&(h.push(E({},r.schema)),"measure"===r.schema.type&&"discrete"!==r.schema.subtype?f.push(n):"dimension"!==r.schema.type&&"discrete"!==r.schema.subtype||s.push(n))});var g=0;return l(e._rowDiffset,function(e){var t="";s.forEach(function(n){t=t+"-"+u[n].data[e]}),void 0===d[t]?(d[t]=g,p.push({}),s.forEach(function(t){p[g][t]=u[t].data[e]}),f.forEach(function(t){p[g][t]=[u[t].data[e]]}),g+=1):f.forEach(function(n){p[d[t]][n].push(u[n].data[e])})}),p.forEach(function(e){var t=e;f.forEach(function(n){t[n]=a[n](e[n])})}),r?(r.__calculateFieldspace(),y=r):y=new Lt(p,h,{name:c}),y}.apply(void 0,[this,e,t]);return n.saveChild&&(this._children.push(i),pt(i,le,{fieldsArr:e,groupByString:r,defaultReducer:we.defaultReducer()},t)),i._parent=this,i}},{key:"sort",value:function value(e){var t=this.getData({order:"row",sort:e}),n=[t.schema.map(function(e){return e.name})].concat(t.data),r=new this.constructor(n,t.schema,{dataFormat:"DSVArr"});return r._sortingDetails=e,r}},{key:"addField",value:function value(e){var t=e.fieldName();this._colIdentifier+=","+t;var n=this._partialFieldspace;if(n.fieldsObj()[e.fieldName()]){var r=n.fields.findIndex(function(e){return e.name===t});r>=0&&(n.fields[r]=e)}else n.fields.push(e);return this.__calculateFieldspace().calculateFieldsConfig(),this}},{key:"calculateVariable",value:function value(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{saveChild:!0,replaceVar:!1},r=this.getFieldsConfig(),i=t.slice(0,t.length-1),a=t[t.length-1];if(r[e.name]&&!n.replaceVar)throw new Error(e.name+" field already exists in model.");var o=i.map(function(e){var t=r[e];if(!t)throw new Error(e+" is not a valid column name.");return t.index}),u=this.clone(),c=u.getFieldspace().fields,s=o.map(function(e){return c[e]}),f=[];l(u._rowDiffset,function(e){var t=s.map(function(t){return t.data[e]});f[e]=a.apply(void 0,function(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t1&&void 0!==arguments[1]?arguments[1]:{},n=arguments[2],r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},i=t.isMutableAction,a=t.sourceId,o=t.payload,u=function e(t){return t._parent?e(t._parent):t}(this),c=u._propagationNameSpace,s={groupByModel:function e(t){return t._parent&&t._derivation.find(function(e){return"group"!==e.op})?e(t._parent):t}(this),model:u};return n&&function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments[2],r=void 0,i=t.isMutableAction,a=t.criteria,o=t.action+"-"+t.sourceId;r=i?e.mutableActions:e.immutableActions,null===a?delete r[o]:r[o]={model:n,config:t}}(c,t,this),wt(e,s,{propagationNameSpace:c,sourceId:a},Object.assign({payload:o},t)),i&&function(e,t,n){var r=e.immutableActions;for(var i in r){var a=r[i].config,o=n.config.sourceId,u=!n.propConfig.filterImmutableAction||n.propConfig.filterImmutableAction(a,n.config);if(a.sourceId!==o&&u){var c=a.criteria;wt(c,t,{propagationNameSpace:e,propagateToSource:!1,sourceId:o},a)}}}(c,s,{config:t,propConfig:r}),this}},{key:"on",value:function value(e,t){switch(e){case"propagation":this._onPropagation.push(t)}return this}},{key:"unsubscribe",value:function value(e){switch(e){case"propagation":this._onPropagation=[]}return this}},{key:"handlePropagation",value:function value(e,t){var n=this;this._onPropagation.forEach(function(r){return r.call(n,e,t)})}},{key:"bin",value:function value(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=this.clone(),r=t.name||e+"_binned";if(this.getFieldsConfig()[r]||!this.getFieldsConfig()[e])throw new Error("Field "+e+" already exists.");var i=function I(e,t,n){var r=n.buckets,i=n.binCount,a=n.binSize,o=n.start,u=[],c=[],s=e.domain(),f=ue(s,2),h=f[0],d=f[1],p=d,y=[],g=void 0,v=void 0,m=void 0,b=void 0;if(l(t,function(t){u.push({data:e.data[t],index:t})}),!r){var _=((d+=1)-h)%(a=a||(d-h)/i);for(i||0===_||(d=d+a-_),g=h+a;g<=d;)y.push(g),g+=a;r={start:o=o||h,stops:y}}v=0===r.start?0:r.start||h,r.stops.forEach(function(e){u.filter(function(t){return t.data>=v&&t.data=r.stops[r.stops.length-1]}).forEach(function(e){c[e.index]=r.stops[r.stops.length-1]+"-"+p}),r.stops.unshift(r.start),b=new Set(r.stops),hr.stops[r.stops.length-1]&&b.add(p),b=[].concat(function(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t1&&void 0!==arguments[1]?arguments[1]:{saveChild:!0}).saveChild;return t.forEach(function(e){n=e(n),i.push.apply(i,function(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t1&&r.dispose(),n}},bin:function bin(){for(var e=arguments.length,t=Array(e),n=0;n2?(i=arguments.length<=0?void 0:arguments[0],r=arguments.length<=1?void 0:arguments[1],a=arguments.length<=2?void 0:arguments[2]):(i=null,r=arguments.length<=0?void 0:arguments[0],a=arguments.length<=1?void 0:arguments[1]),t=a(w),(e=n=new A(t.fn)).addDependencies.apply(e,P(t.dependencies)),this._addPropInModel(i,function(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}({},r,n)),this}},{key:"_addPropInModel",value:function value(e,t){return this._graph.createNodesFrom(t,e),this}},{key:"on",value:function value(e,t,n){var r,i=e instanceof Array?e:[e],a=this._graph.createElectricNodeOf(i,{type:"CurrFrame",fn:t});return n&&(r=this._graph.stopPropagation().setPropagationOverride("nextFrame")).resetNodeValue.apply(r,P(e)),a}},{key:"next",value:function value(e,t,n){var r,i=e instanceof Array?e:[e],a=this._graph.createElectricNodeOf(i,{type:"NextFrame",fn:t});return n&&(r=this._graph.stopPropagation().setPropagationOverride("currentFrame")).resetNodeValue.apply(r,P(e)),a}},{key:"lock",value:function value(){return this._lockFlag=!0,this._reqQ.length=0,this}},{key:"unlock",value:function value(){return this._lockFlag=!1,this.setProp.apply(this,P(this._reqQ)),this._reqQ.length=0,this}},{key:"prop",value:function value(){var e,t=void 0,n=void 0;switch(e=arguments.length){case 1:t=arguments.length<=0?void 0:arguments[0];break;case 2:t=arguments.length<=0?void 0:arguments[0],n=arguments.length<=1?void 0:arguments[1];break;default:return this}return 2===e?(this._lockFlag?this._reqQ.push([t,n]):this.setProp([t,n]),this):this._graph.getNodeValue(t)}},{key:"setProp",value:function value(){for(var e,t=this,n=arguments.length,r=Array(n),i=0;i/gi),e},SmartLabelManager.store={},SmartLabelManager.prototype._calCharDimWithCache=function(e,t,n){if(!this._init)return!1;var r,i,a,o,u,c,s=this.options.maxCacheLimit,l=this._container,h=this.style||{},d=this._advancedCache||(this._advancedCache={}),p=this._advancedCacheKey||(this._advancedCacheKey=[]),y=e+(h.fontSize||"")+(h.fontFamily||"")+(h.fontWeight||"")+(h.fontStyle||""),g=e+"init"+(h.fontSize||"")+(h.fontFamily||"")+(h.fontWeight||"")+(h.fontStyle||"");return f[e]&&(e=f[e]),t?void 0===(c=d[g])&&(l.innerHTML=e.repeat?e.repeat(n):Array(n+1).join(e),a=l.offsetWidth,l.innerHTML=e,o=l.offsetWidth,c=d[g]=(a-n*o)/(n+1),p.push(g),p.length>s&&delete d[p.shift()]):c=0,(u=d[y])?(i=u.split(","),{width:parseFloat(i[0],10),height:parseFloat(i[1],10)}):(l.innerHTML=e,r={height:l.offsetHeight,width:l.offsetWidth+c},d[y]=r.width+","+r.height,p.push(y),p.length>s&&delete d[p.shift()],r)},SmartLabelManager.prototype._getWidthFn=function(){var e=this._containerObj,t=this._container,n=e.svgText;return n?function(e){var t,r;return n.textContent=e,(r=(t=n.getBBox()).width-d)<1&&(r=t.width),r}:function(e){return t.innerHTML=e,t.offsetWidth}},SmartLabelManager.prototype.setStyle=function(e){return this._init?e!==this.style||this._styleNotSet?(e||(e=this.style),o.setLineHeight(e),this.style=e,this._containerObj=t=this._containerManager.get(e),this._containerObj?(this._container=t.node,this._context=t.context,this._cache=t.charCache,this._lineHeight=t.lineHeight,this._styleNotSet=!1):this._styleNotSet=!0,this):void 0:this;var t},SmartLabelManager.prototype.useEllipsesOnOverflow=function(e){return this._init?(this._showNoEllipses=!e,this):this},SmartLabelManager.prototype.getSmartText=function(e,t,n,r){if(!this._init)return!1;void 0===e||null===e?e="":"string"!=typeof e&&(e=e.toString());var i,a,c,l,f,d,p,y,g,v,m,b,_,x,w,k,C,S,P,A,E,M,O,T,F,N,j=!1,I=0,D=-1,L=-1,R=-1,B=0,z=0,H=[],V=0,U=this._showNoEllipses?"":"...",W=this._lineHeight,q=this._context,G=this._container,Y=this._containerObj,X=Y.ellipsesWidth,K=Y.dotWidth,$=[],Q=-1,Z=-1,J=-1,ee=function fastTrim(e){for(var t=/\s/,n=(e=e.replace(/^\s\s*/,"")).length;t.test(e.charAt(n-=1)););return e.slice(0,n+1)},te={text:e,maxWidth:t,maxHeight:n,width:null,height:null,oriTextWidth:null,oriTextHeight:null,oriText:e,isTruncated:!1};if(b=this._getWidthFn(),n===W&&(n*=1.2),G){if(!h.isBrowserLess){if((j=o.xmlTagRegEx.test(e))?(G.innerHTML=e,te.oriTextWidth=p=G.offsetWidth,te.oriTextHeight=y=G.offsetHeight):(l=e.replace(o.ltgtRegex,function(e){return"<"===e?"<":">"}),w=this.getOriSize(l,!0),te.oriTextWidth=p=w.width,te.oriTextHeight=y=w.height),y<=n&&p<=t)return te.width=te.oriTextWidth=p,te.height=te.oriTextHeight=y,te;if(W>n)return te.text="",te.width=te.oriTextWidth=0,te.height=te.oriTextHeight=0,te}if(e=ee(e).replace(/(\s+)/g," "),f=this._showNoEllipses?t:t-X,!j){if(i=(H=e.split("")).length,a="",c=[],m=H[0],this._cache[m]?P=this._cache[m].width:(P=b(m),this._cache[m]={width:P}),f>P)V=(c=e.substr(0,o.getNearestBreakIndex(e,f,this)).split("")).length;else{if(P>t)return te.text="",te.width=te.oriTextWidth=te.height=te.oriTextHeight=0,te;U&&((f=t-2*K)>P?U="..":(f=t-K)>P?U=".":(f=0,U=""))}if(B=b(c.join("")),z=this._lineHeight,r){for(;Vf&&(a||(a=c.slice(0,-1).join("")),B>t))return te.text=ee(a)+U,te.tooltext=te.oriText,te.width=b(te.text),te.height=this._lineHeight,te;return te.text=c.join(""),te.width=B,te.height=this._lineHeight,te}for(;Vf&&(a||(a=c.slice(0,-1).join("")),B>t)){if(L=e.substr(0,c.length).lastIndexOf(" "),D=e.substr(0,c.length).lastIndexOf("-"),L>R?(B=b(c.slice(R+1,L).join("")),c.splice(L,1,"
"),R=L,g=L+1):D>R?(D===c.length-1?(B=b(c.slice(R+1,L).join("")),c.splice(D,1,"
-")):(B=b(c.slice(R+1,L).join("")),c.splice(D,1,"-
")),R=D,g=D+1):(c.splice(c.length-1,1,"
"+H[V]),J=c.length-2,B=b(c.slice(R+1,J+1).join("")),R=J,g=V),(z+=this._lineHeight)>n)return te.text=ee(a)+U,te.tooltext=te.oriText,te.width=t,te.height=z-this._lineHeight,te;I=s(I,B),a=null,v=o.getNearestBreakIndex(e.substr(g),f,this),B=b(e.substr(g,v||1)),c.length)/g,'$1'),G.innerHTML=e,C=0,S=(k=G[h.childRetriverFn](h.childRetriverString)).length;Ct)return te.text="",te.width=te.oriTextWidth=te.height=te.oriTextHeight=0,te;if(P>f&&!this._showNoEllipses&&((f=t-2*K)>P?U="..":(f=t-K)>P?U=".":(f=0,U="")),_=$[0].elem.offsetLeft,x=$[0].elem.offsetTop,r)for(;Vf&&(N||(N=V),G.offsetWidth>t&&(F=V,V=i));else for(;Vf?(N||(N=V),M>t&&(L=$[V].spaceIdx,D=$[V].dashIdx,L>R?($[L].elem.innerHTML="
",R=L):D>R?($[D].elem.innerHTML=D===V?"
-":"-
",R=D):A.parentNode.insertBefore(T=u.createElement("br"),A),A.offsetHeight+A.offsetTop>n?(T?T.parentNode.removeChild(T):R===D?$[D].elem.innerHTML="-":$[L].elem.innerHTML=" ",F=V,V=i):N=null)):O>n&&(F=V,V=i);if(F=N;V-=1)(A=$[V].elem).parentNode.removeChild(A);for(;V>=0;V-=1)A=$[V].elem,o.classNameBrReg.test(A.className)?A.parentNode.removeChild(A):V=0}return te.text=G.innerHTML.replace(o.spanRemovalRegx,"$1").replace(/\&\;/g,"&"),te.isTruncated&&(te.text+=U,te.tooltext=d),te.height=G.offsetHeight,te.width=G.offsetWidth,te}return te.error=new Error("Body Tag Missing!"),te},SmartLabelManager.prototype.getOriSize=function(e,t){if(!this._init)return!1;var n,r,i,a,o,u=0,c=0,f={};if(!t)return this._calCharDimWithCache(e);for(a=0,o=(n=e.split("")).length;a]+?\>)|(&(?:[a-z]+|#[0-9]+);|.)/gi,spanAdditionReplacer:'$1$2',spanRemovalRegx:new RegExp("\\]+?"+c+"[^\\>]{0,}\\>(.*?)\\<\\/span\\>","ig"),xmlTagRegEx:new RegExp("<[^>][^<]*[^>]+>","i"),ltgtRegex:/<|>/g,brReplaceRegex://gi,testStrAvg:"WgI",parentContainerStyle:{position:"absolute",top:"-9999em",whiteSpace:"nowrap",padding:"0px",width:"1px",height:"1px",overflow:"hidden"},supportedStyle:{font:"font",fontFamily:"font-family","font-family":"font-family",fontWeight:"font-weight","font-weight":"font-weight",fontSize:"font-size","font-size":"font-size",lineHeight:"line-height","line-height":"line-height",fontStyle:"font-style","font-style":"font-style"},getDocumentSupport:function getDocumentSupport(){var r,i,a;return t.getElementsByClassName?(r="getElementsByClassName",i=c,a=!0):(r="getElementsByTagName",i="span",a=!1),{isIE:/msie/i.test(n)&&!e.opera,hasSVG:Boolean(e.SVGAngle||t.implementation.hasFeature("http://www.w3.org/TR/SVG11/feature#BasicStructure","1.1")),isHeadLess:new RegExp(" HtmlUnit").test(n),isWebKit:new RegExp(" AppleWebKit/").test(n),childRetriverFn:r,childRetriverString:i,noClassTesting:a}},createContainer:function createContainer(e){var n,r;if(e&&(e.offsetWidth||e.offsetHeight)){if(e.appendChild)return e.appendChild(r=t.createElement("DIV")),r.className=u,r.setAttribute("aria-hidden","true"),r.setAttribute("role","presentation"),r}else if((n=t.getElementsByTagName("body")[0])&&n.appendChild)return(r=t.createElement("DIV")).className=u,r.setAttribute("aria-hidden","true"),r.setAttribute("role","presentation"),1,n.appendChild(r),r},getNearestBreakIndex:function getNearestBreakIndex(e,t,n){if(!e||!e.length)return 0;var r,o=n._getWidthFn(),u=0,c=0,s=o(e),l=s/e.length;if(r=t,u=i(t/l),se.length&&(r=t-s,u=e.length);r>0;){if(r=t-o(e.substr(0,u)),!(c=a(r/l)))return u;u+=c}for(;r<0;){if(r=t-o(e.substr(0,u)),!(c=a(r/l)))return u;u+=c}return u},setLineHeight:function setLineHeight(e){var t=e.fontSize=e.fontSize||"12px";return e.lineHeight=e.lineHeight||e["line-height"]||1.2*parseInt(t,10)+"px",e}}}};t.default=r,e.exports=t.default},function(e){e.exports={name:"muze",private:!0,version:"1.0.2",description:"Composable visualisation library for web with a data-first approach",homepage:"https://www.charts.com/muze",license:"MIT",author:"Charts.com ",contributors:[{name:"Akash Ghoswami",email:"akash@charts.com"},{name:"Ranajit Banerjee",email:"ranajit.banerjee@charts.com",url:"https://github.com/ranajitbanerjee"},{name:"Mridul Meharia",email:"mridul@charts.com",url:"https://github.com/mridulmeh"},{name:"Subhash Haldar",email:"subhash@charts.com"},{name:"Sandeep Acharya",email:"sandeep@charts.com"},{name:"Rousan Ali",email:"rousan@charts.com",url:"https://rousan.io"},{name:"Ujjal Kumar Dutta",email:"ujjal@charts.com"}],main:"src/index.js",keywords:["muze","svg","vector","graphics","data-visualization","visualization","renderer","fusioncharts","relational","algebra","relation"],repository:{type:"git",url:"https://github.com/chartshq/muze"},dependencies:{"@chartshq/layout":"^1.0.0","@chartshq/muze-firebolt":"^1.0.0","@chartshq/muze-legend":"^1.0.0","muze-utils":"^1.0.0","@chartshq/visual-cell":"^1.0.0","@chartshq/visual-group":"^1.0.0","@chartshq/visual-layer":"^1.0.0","@chartshq/visual-unit":"^1.0.0"}}},function(e,t,n){var r=n(44);e.exports=r.default?r.default:r},function(e,t,n){"use strict";var r=function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}(n(5)).default.init("undefined"!=typeof window?window:void 0),i=r.win.document,a=r.getDocumentSupport(),o=a.isWebKit?0:4.5;function ContainerManager(e,t,n){var r;n=(n=n>5?n:5)<20?n:20,this.maxContainers=n,this.first=null,this.last=null,this.containers={},this.length=0,this.rootNode=e,t&&((r=i.createElementNS("http://www.w3.org/2000/svg","svg")).setAttributeNS("http://www.w3.org/2000/svg","xlink","http://www.w3.org/1999/xlink"),r.setAttributeNS("http://www.w3.org/2000/svg","height","0"),r.setAttributeNS("http://www.w3.org/2000/svg","width","0"),this.svgRoot=r,this.rootNode.appendChild(r))}ContainerManager.prototype.get=function(e){var t,n,i,a=this.containers,o=this.length,u=this.maxContainers,c="";for(n in r.supportedStyle)void 0!==e[n]&&(c+=r.supportedStyle[n]+":"+e[n]+";");if(!c)return!1;if(i=a[c])this.first!==i&&(i.prev&&(i.prev.next=i.next),i.next&&(i.next.prev=i.prev),i.next=this.first,i.next.prev=i,this.last===i&&(this.last=i.prev),i.prev=null,this.first=i);else{if(o>=u)for(t=o-u+1;t--;)this.removeContainer(this.last);i=this.addContainer(c)}return i},ContainerManager.prototype.addContainer=function(e){var t,n;return this.containers[e]=n={next:null,prev:null,node:null,ellipsesWidth:0,lineHeight:0,dotWidth:0,avgCharWidth:4,keyStr:e,charCache:{}},n.next=this.first,n.next&&(n.next.prev=n),this.first=n,this.last||(this.last=n),this.length+=1,t=n.node=i.createElement("div"),this.rootNode.appendChild(t),a.isIE&&!a.hasSVG?t.style.setAttribute("cssText",e):t.setAttribute("style",e),t.setAttribute("aria-hidden","true"),t.setAttribute("role","presentation"),t.style.display="inline-block",t.innerHTML=r.testStrAvg,n.lineHeight=t.offsetHeight,n.avgCharWidth=t.offsetWidth/3,a.isBrowserLess?((t=n.svgText=i.createElementNS("http://www.w3.org/2000/svg","text")).setAttribute("style",e),this.svgRoot.appendChild(t),t.textContent=r.testStrAvg,n.lineHeight=t.getBBox().height,n.avgCharWidth=(t.getBBox().width-o)/3,t.textContent="...",n.ellipsesWidth=t.getBBox().width-o,t.textContent=".",n.dotWidth=t.getBBox().width-o):(t.innerHTML="...",n.ellipsesWidth=t.offsetWidth,t.innerHTML=".",n.dotWidth=t.offsetWidth,t.innerHTML=""),n},ContainerManager.prototype.removeContainer=function(e){var t=e.keyStr;t&&this.length&&e&&(this.length-=1,e.prev&&(e.prev.next=e.next),e.next&&(e.next.prev=e.prev),this.first===e&&(this.first=e.next),this.last===e&&(this.last=e.prev),e.node.parentNode.removeChild(e.node),delete this.containers[t])},ContainerManager.prototype.dispose=function(){var e,t=this.containers;for(e in this.maxContainers=null,t)this.removeContainer(t[e]);this.rootNode.parentNode.removeChild(this.rootNode),this.rootNode=null,this.first=null,this.last=null},e.exports=ContainerManager},function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,,function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,function(e,t,n){"use strict";n.r(t);var r={};n.r(r),n.d(r,"scaleLinear",function(){return linear_linear}),n.d(r,"scaleThreshold",function(){return threshold_threshold}),n.d(r,"scaleLog",function(){return log}),n.d(r,"scalePow",function(){return pow}),n.d(r,"scaleIdentity",function(){return identity_identity}),n.d(r,"scaleOrdinal",function(){return ordinal}),n.d(r,"scaleSequential",function(){return sequential}),n.d(r,"scaleQuantize",function(){return quantize_quantize}),n.d(r,"scaleQuantile",function(){return quantile_quantile}),n.d(r,"schemeCategory10",function(){return tn}),n.d(r,"schemeCategory20",function(){return rn}),n.d(r,"schemeCategory20b",function(){return nn}),n.d(r,"scaleBand",function(){return band}),n.d(r,"scaleTime",function(){return Jt});var i={};n.r(i),n.d(i,"schemeDark2",function(){return cn}),n.d(i,"schemePaired",function(){return sn}),n.d(i,"schemeAccent",function(){return un}),n.d(i,"schemePastel1",function(){return ln}),n.d(i,"schemePastel2",function(){return fn}),n.d(i,"schemeSet1",function(){return hn}),n.d(i,"schemeSet2",function(){return dn}),n.d(i,"schemeSet3",function(){return pn}),n.d(i,"schemeBlues",function(){return zn}),n.d(i,"schemeBrBG",function(){return gn}),n.d(i,"schemePRGn",function(){return mn}),n.d(i,"schemePiYG",function(){return _n}),n.d(i,"interpolateBrBG",function(){return vn}),n.d(i,"interpolatePRGn",function(){return bn}),n.d(i,"interpolatePiYG",function(){return xn}),n.d(i,"interpolatePuOr",function(){return wn}),n.d(i,"interpolateRdBu",function(){return kn}),n.d(i,"interpolateRdGy",function(){return Cn}),n.d(i,"interpolateRdYlBu",function(){return Sn}),n.d(i,"interpolateRdYlGn",function(){return Pn}),n.d(i,"interpolateSpectral",function(){return An}),n.d(i,"interpolateBlues",function(){return Hn}),n.d(i,"interpolateGreens",function(){return Vn}),n.d(i,"interpolateGreys",function(){return Un}),n.d(i,"interpolateOranges",function(){return Gn}),n.d(i,"interpolatePurples",function(){return Wn}),n.d(i,"interpolateReds",function(){return qn}),n.d(i,"interpolateViridis",function(){return Zn}),n.d(i,"interpolateInferno",function(){return er}),n.d(i,"interpolateMagma",function(){return Jn}),n.d(i,"interpolatePlasma",function(){return tr}),n.d(i,"interpolateWarm",function(){return Xn}),n.d(i,"interpolateCool",function(){return Kn}),n.d(i,"interpolateCubehelixDefault",function(){return Yn}),n.d(i,"interpolateBuGn",function(){return En}),n.d(i,"interpolateBuPu",function(){return Mn}),n.d(i,"interpolateGnBu",function(){return On}),n.d(i,"interpolateOrRd",function(){return Tn}),n.d(i,"interpolatePuBuGn",function(){return Fn}),n.d(i,"interpolatePuBu",function(){return Nn}),n.d(i,"interpolatePuRd",function(){return jn}),n.d(i,"interpolateRdPu",function(){return In}),n.d(i,"interpolateYlGnBu",function(){return Dn}),n.d(i,"interpolateYlGn",function(){return Ln}),n.d(i,"interpolateYlOrBr",function(){return Rn}),n.d(i,"interpolateYlOrRd",function(){return Bn}),n.d(i,"interpolateRainbow",function(){return Qn});var a={};n.r(a),n.d(a,"DRAG",function(){return Qo}),n.d(a,"HOVER",function(){return Zo}),n.d(a,"SELECTIONDRAG",function(){return Jo}),n.d(a,"CLICK",function(){return eu}),n.d(a,"LONGTOUCH",function(){return tu}),n.d(a,"TOUCHDRAG",function(){return nu}),n.d(a,"ALL_ACTIONS",function(){return ru});var o={};n.r(o),n.d(o,"SELECTION_NEW_ENTRY",function(){return iu}),n.d(o,"SELECTION_NEW_EXIT",function(){return au}),n.d(o,"SELECTION_NULL",function(){return ou}),n.d(o,"SELECTION_OLD_ENTRY",function(){return uu}),n.d(o,"SELECTION_OLD_EXIT",function(){return cu});var u={};n.r(u),n.d(u,"BRUSH",function(){return wu}),n.d(u,"HIGHLIGHT",function(){return ku}),n.d(u,"TOOLTIP",function(){return Cu}),n.d(u,"FILTER",function(){return Su}),n.d(u,"SELECT",function(){return Pu});var c={};n.r(c),n.d(c,"HighlightBeahviour",function(){return Eu}),n.d(c,"BrushBehaviour",function(){return Ou}),n.d(c,"FilterBehaviour",function(){return Fu}),n.d(c,"SelectBehaviour",function(){return Lu});var s={};n.r(s),n.d(s,"SelectionBox",function(){return Ju}),n.d(s,"Tooltip",function(){return gc}),n.d(s,"Crossline",function(){return mc}),n.d(s,"PlotHighlighter",function(){return xc}),n.d(s,"FilterEffect",function(){return kc}),n.d(s,"PersistentAnchors",function(){return Ec}),n.d(s,"BrushAnchors",function(){return Tc}),n.d(s,"AnchorEffect",function(){return Pc});var l={};n.r(l),n.d(l,"BOTTOM",function(){return Gc}),n.d(l,"TOP",function(){return Yc}),n.d(l,"LEFT",function(){return Xc}),n.d(l,"RIGHT",function(){return Kc}),n.d(l,"axisOrientationMap",function(){return $c});var f={};n.r(f),n.d(f,"LINEAR",function(){return Qc}),n.d(f,"BAND",function(){return Zc}),n.d(f,"TIME",function(){return Jc}),n.d(f,"COLOR",function(){return es}),n.d(f,"ORDINAL",function(){return ts}),n.d(f,"QUANTIZE",function(){return ns}),n.d(f,"QUANTILE",function(){return rs}),n.d(f,"LOG",function(){return is}),n.d(f,"POW",function(){return as}),n.d(f,"IDENTITY",function(){return os}),n.d(f,"SEQUENTIAL",function(){return us}),n.d(f,"THRESHOLD",function(){return cs});var h={};n.r(h),n.d(h,"CONFIG",function(){return ad}),n.d(h,"DATA",function(){return od}),n.d(h,"AXES",function(){return ud}),n.d(h,"LAYERDEFS",function(){return cd}),n.d(h,"WIDTH",function(){return sd}),n.d(h,"HEIGHT",function(){return ld}),n.d(h,"MOUNT",function(){return fd}),n.d(h,"primaryXAxisUpdated",function(){return hd}),n.d(h,"primaryYAxisUpdated",function(){return dd}),n.d(h,"secondaryXAxisUpdated",function(){return pd}),n.d(h,"secondaryYAxisUpdated",function(){return yd}),n.d(h,"TRANSFORM",function(){return gd}),n.d(h,"DATADOMAIN",function(){return vd}),n.d(h,"LAYERSCREATED",function(){return md}),n.d(h,"FIELDS",function(){return bd}),n.d(h,"TIMEDIFFS",function(){return _d}),n.d(h,"LAYERAXISINDEX",function(){return xd});var d={};n.r(d),n.d(d,"SelectBehaviour",function(){return wp});var y={};n.r(y),n.d(y,"SelectionBox",function(){return zp}),n.d(y,"LegendHighlighter",function(){return Up});var g={};n.r(g),n.d(g,"share",function(){return Oy}),n.d(g,"html",function(){return operators_html});var v=function(e,t){return et?1:e>=t?0:NaN},m=function(e){return 1===e.length&&(e=function ascendingComparator(e){return function(t,n){return v(e(t),n)}}(e)),{left:function left(t,n,r,i){for(null==r&&(r=0),null==i&&(i=t.length);r>>1;e(t[a],n)<0?r=a+1:i=a}return r},right:function right(t,n,r,i){for(null==r&&(r=0),null==i&&(i=t.length);r>>1;e(t[a],n)>0?i=a:r=a+1}return r}}};var b=m(v),_=b.right,x=(b.left,_);var w=function(e){return null===e?NaN:+e},k=Array.prototype,C=(k.slice,k.map,function(e,t,n){e=+e,t=+t,n=(i=arguments.length)<2?(t=e,e=0,1):i<3?1:+n;for(var r=-1,i=0|Math.max(0,Math.ceil((t-e)/n)),a=new Array(i);++r0)return[e];if((r=t0)for(e=Math.ceil(e/o),t=Math.floor(t/o),a=new Array(i=Math.ceil(t-e+1));++u=0?(a>=S?10:a>=P?5:a>=A?2:1)*Math.pow(10,i):-Math.pow(10,-i)/(a>=S?10:a>=P?5:a>=A?2:1)}function tickStep(e,t,n){var r=Math.abs(t-e)/Math.max(0,n),i=Math.pow(10,Math.floor(Math.log(r)/Math.LN10)),a=r/i;return a>=S?i*=10:a>=P?i*=5:a>=A&&(i*=2),t=1)return+n(e[r-1],r-1,e);var r,i=(r-1)*t,a=Math.floor(i),o=+n(e[a],a,e);return o+(+n(e[a+1],a+1,e)-o)*(i-a)}};function map_Map(){}function map_map(e,t){var n=new map_Map;if(e instanceof map_Map)e.each(function(e,t){n.set(t,e)});else if(Array.isArray(e)){var r,i=-1,a=e.length;if(null==t)for(;++i=r.length)return null!=e&&n.sort(e),null!=t?t(n):n;for(var u,c,s,l=-1,f=n.length,h=r[i++],d=O(),p=a();++lr.length)return e;var a,o=i[n-1];return null!=t&&n>=r.length?a=e.entries():(a=[],e.each(function(e,t){a.push({key:t,values:_entries(e,n)})})),null!=o?a.sort(function(e,t){return o(e.key,t.key)}):a}(apply(e,0,createMap,setMap),0)},key:function key(e){return r.push(e),n},sortKeys:function sortKeys(e){return i[r.length-1]=e,n},sortValues:function sortValues(t){return e=t,n},rollup:function rollup(e){return t=e,n}}};function createObject(){return{}}function setObject(e,t,n){e[t]=n}function createMap(){return O()}function setMap(e,t,n){e.set(t,n)}function set_Set(){}var F=O.prototype;function set_set(e,t){var n=new set_Set;if(e instanceof set_Set)e.each(function(e){n.add(e)});else if(e){var r=-1,i=e.length;if(null==t)for(;++r1?+t:s,f=a[1]a[1-f]))return n=Math.max(0,getClosestIndexOf(h,s)),c=getClosestIndexOf(h,l),o=s===l?n:Math.max(n,c-1),f&&(u=n,n=d-o,o=d-u),n>o?void 0:r().slice(n,o+1)},n.invert=function(e,t){var n,o,u=+e,c=arguments.length>1?+t:u,s=a[1]a[1-s]))return n=Math.max(0,getClosestIndexOf(l,u,"left")),r()[s?f-n:n]},rescale()}function getClosestIndexOf(e,t,n){for(var r,i,a,o=0,u=e.length-1;ot?0===u?u:"left"===n?u-1:u:u===e.length-1?u:"left"===n?u:u+1:u}var L=function(e,t,n){e.prototype=t.prototype=n,n.constructor=e};function extend(e,t){var n=Object.create(e.prototype);for(var r in t)n[r]=t[r];return n}function Color(){}var R="\\s*([+-]?\\d+)\\s*",B="\\s*([+-]?\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)\\s*",z="\\s*([+-]?\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)%\\s*",H=/^#([0-9a-f]{3})$/,V=/^#([0-9a-f]{6})$/,U=new RegExp("^rgb\\("+[R,R,R]+"\\)$"),W=new RegExp("^rgb\\("+[z,z,z]+"\\)$"),q=new RegExp("^rgba\\("+[R,R,R,B]+"\\)$"),G=new RegExp("^rgba\\("+[z,z,z,B]+"\\)$"),Y=new RegExp("^hsl\\("+[B,z,z]+"\\)$"),X=new RegExp("^hsla\\("+[B,z,z,B]+"\\)$"),K={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};function color_color(e){var t;return e=(e+"").trim().toLowerCase(),(t=H.exec(e))?new Rgb((t=parseInt(t[1],16))>>8&15|t>>4&240,t>>4&15|240&t,(15&t)<<4|15&t,1):(t=V.exec(e))?rgbn(parseInt(t[1],16)):(t=U.exec(e))?new Rgb(t[1],t[2],t[3],1):(t=W.exec(e))?new Rgb(255*t[1]/100,255*t[2]/100,255*t[3]/100,1):(t=q.exec(e))?rgba(t[1],t[2],t[3],t[4]):(t=G.exec(e))?rgba(255*t[1]/100,255*t[2]/100,255*t[3]/100,t[4]):(t=Y.exec(e))?hsla(t[1],t[2]/100,t[3]/100,1):(t=X.exec(e))?hsla(t[1],t[2]/100,t[3]/100,t[4]):K.hasOwnProperty(e)?rgbn(K[e]):"transparent"===e?new Rgb(NaN,NaN,NaN,0):null}function rgbn(e){return new Rgb(e>>16&255,e>>8&255,255&e,1)}function rgba(e,t,n,r){return r<=0&&(e=t=n=NaN),new Rgb(e,t,n,r)}function rgbConvert(e){return e instanceof Color||(e=color_color(e)),e?new Rgb((e=e.rgb()).r,e.g,e.b,e.opacity):new Rgb}function color_rgb(e,t,n,r){return 1===arguments.length?rgbConvert(e):new Rgb(e,t,n,null==r?1:r)}function Rgb(e,t,n,r){this.r=+e,this.g=+t,this.b=+n,this.opacity=+r}function _hex(e){return((e=Math.max(0,Math.min(255,Math.round(e)||0)))<16?"0":"")+e.toString(16)}function hsla(e,t,n,r){return r<=0?e=t=n=NaN:n<=0||n>=1?e=t=NaN:t<=0&&(e=NaN),new Hsl(e,t,n,r)}function hsl(e,t,n,r){return 1===arguments.length?function hslConvert(e){if(e instanceof Hsl)return new Hsl(e.h,e.s,e.l,e.opacity);if(e instanceof Color||(e=color_color(e)),!e)return new Hsl;if(e instanceof Hsl)return e;var t=(e=e.rgb()).r/255,n=e.g/255,r=e.b/255,i=Math.min(t,n,r),a=Math.max(t,n,r),o=NaN,u=a-i,c=(a+i)/2;return u?(o=t===a?(n-r)/u+6*(n0&&c<1?0:o,new Hsl(o,u,c,e.opacity)}(e):new Hsl(e,t,n,null==r?1:r)}function Hsl(e,t,n,r){this.h=+e,this.s=+t,this.l=+n,this.opacity=+r}function hsl2rgb(e,t,n){return 255*(e<60?t+(n-t)*e/60:e<180?n:e<240?t+(n-t)*(240-e)/60:t)}L(Color,color_color,{displayable:function displayable(){return this.rgb().displayable()},hex:function hex(){return this.rgb().hex()},toString:function toString(){return this.rgb()+""}}),L(Rgb,color_rgb,extend(Color,{brighter:function brighter(e){return e=null==e?1/.7:Math.pow(1/.7,e),new Rgb(this.r*e,this.g*e,this.b*e,this.opacity)},darker:function darker(e){return e=null==e?.7:Math.pow(.7,e),new Rgb(this.r*e,this.g*e,this.b*e,this.opacity)},rgb:function rgb(){return this},displayable:function displayable(){return 0<=this.r&&this.r<=255&&0<=this.g&&this.g<=255&&0<=this.b&&this.b<=255&&0<=this.opacity&&this.opacity<=1},hex:function hex(){return"#"+_hex(this.r)+_hex(this.g)+_hex(this.b)},toString:function toString(){var e=this.opacity;return(1===(e=isNaN(e)?1:Math.max(0,Math.min(1,e)))?"rgb(":"rgba(")+Math.max(0,Math.min(255,Math.round(this.r)||0))+", "+Math.max(0,Math.min(255,Math.round(this.g)||0))+", "+Math.max(0,Math.min(255,Math.round(this.b)||0))+(1===e?")":", "+e+")")}})),L(Hsl,hsl,extend(Color,{brighter:function brighter(e){return e=null==e?1/.7:Math.pow(1/.7,e),new Hsl(this.h,this.s,this.l*e,this.opacity)},darker:function darker(e){return e=null==e?.7:Math.pow(.7,e),new Hsl(this.h,this.s,this.l*e,this.opacity)},rgb:function rgb(){var e=this.h%360+360*(this.h<0),t=isNaN(e)||isNaN(this.s)?0:this.s,n=this.l,r=n+(n<.5?n:1-n)*t,i=2*n-r;return new Rgb(hsl2rgb(e>=240?e-240:e+120,i,r),hsl2rgb(e,i,r),hsl2rgb(e<120?e+240:e-120,i,r),this.opacity)},displayable:function displayable(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1}}));var $=Math.PI/180,Q=180/Math.PI,Z=.96422,J=1,ee=.82521,te=4/29,ne=6/29,re=3*ne*ne,ie=ne*ne*ne;function labConvert(e){if(e instanceof Lab)return new Lab(e.l,e.a,e.b,e.opacity);if(e instanceof Hcl){if(isNaN(e.h))return new Lab(e.l,0,0,e.opacity);var t=e.h*$;return new Lab(e.l,Math.cos(t)*e.c,Math.sin(t)*e.c,e.opacity)}e instanceof Rgb||(e=rgbConvert(e));var n,r,i=rgb2lrgb(e.r),a=rgb2lrgb(e.g),o=rgb2lrgb(e.b),u=xyz2lab((.2225045*i+.7168786*a+.0606169*o)/J);return i===a&&a===o?n=r=u:(n=xyz2lab((.4360747*i+.3850649*a+.1430804*o)/Z),r=xyz2lab((.0139322*i+.0971045*a+.7141733*o)/ee)),new Lab(116*u-16,500*(n-u),200*(u-r),e.opacity)}function lab(e,t,n,r){return 1===arguments.length?labConvert(e):new Lab(e,t,n,null==r?1:r)}function Lab(e,t,n,r){this.l=+e,this.a=+t,this.b=+n,this.opacity=+r}function xyz2lab(e){return e>ie?Math.pow(e,1/3):e/re+te}function lab2xyz(e){return e>ne?e*e*e:re*(e-te)}function lrgb2rgb(e){return 255*(e<=.0031308?12.92*e:1.055*Math.pow(e,1/2.4)-.055)}function rgb2lrgb(e){return(e/=255)<=.04045?e/12.92:Math.pow((e+.055)/1.055,2.4)}function hclConvert(e){if(e instanceof Hcl)return new Hcl(e.h,e.c,e.l,e.opacity);if(e instanceof Lab||(e=labConvert(e)),0===e.a&&0===e.b)return new Hcl(NaN,0,e.l,e.opacity);var t=Math.atan2(e.b,e.a)*Q;return new Hcl(t<0?t+360:t,Math.sqrt(e.a*e.a+e.b*e.b),e.l,e.opacity)}function hcl(e,t,n,r){return 1===arguments.length?hclConvert(e):new Hcl(e,t,n,null==r?1:r)}function Hcl(e,t,n,r){this.h=+e,this.c=+t,this.l=+n,this.opacity=+r}L(Lab,lab,extend(Color,{brighter:function brighter(e){return new Lab(this.l+18*(null==e?1:e),this.a,this.b,this.opacity)},darker:function darker(e){return new Lab(this.l-18*(null==e?1:e),this.a,this.b,this.opacity)},rgb:function rgb(){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 new Rgb(lrgb2rgb(3.1338561*(t=Z*lab2xyz(t))-1.6168667*(e=J*lab2xyz(e))-.4906146*(n=ee*lab2xyz(n))),lrgb2rgb(-.9787684*t+1.9161415*e+.033454*n),lrgb2rgb(.0719453*t-.2289914*e+1.4052427*n),this.opacity)}})),L(Hcl,hcl,extend(Color,{brighter:function brighter(e){return new Hcl(this.h,this.c,this.l+18*(null==e?1:e),this.opacity)},darker:function darker(e){return new Hcl(this.h,this.c,this.l-18*(null==e?1:e),this.opacity)},rgb:function rgb(){return labConvert(this).rgb()}}));var ae=-.14861,oe=1.78277,ue=-.29227,ce=-.90649,se=1.97294,le=se*ce,fe=se*oe,he=oe*ue-ce*ae;function cubehelix_cubehelix(e,t,n,r){return 1===arguments.length?function cubehelixConvert(e){if(e instanceof Cubehelix)return new Cubehelix(e.h,e.s,e.l,e.opacity);e instanceof Rgb||(e=rgbConvert(e));var t=e.r/255,n=e.g/255,r=e.b/255,i=(he*r+le*t-fe*n)/(he+le-fe),a=r-i,o=(se*(n-i)-ue*a)/ce,u=Math.sqrt(o*o+a*a)/(se*i*(1-i)),c=u?Math.atan2(o,a)*Q-120:NaN;return new Cubehelix(c<0?c+360:c,u,i,e.opacity)}(e):new Cubehelix(e,t,n,null==r?1:r)}function Cubehelix(e,t,n,r){this.h=+e,this.s=+t,this.l=+n,this.opacity=+r}function basis(e,t,n,r,i){var a=e*e,o=a*e;return((1-3*e+3*a-o)*t+(4-6*a+3*o)*n+(1+3*e+3*a-3*o)*r+o*i)/6}L(Cubehelix,cubehelix_cubehelix,extend(Color,{brighter:function brighter(e){return e=null==e?1/.7:Math.pow(1/.7,e),new Cubehelix(this.h,this.s,this.l*e,this.opacity)},darker:function darker(e){return e=null==e?.7:Math.pow(.7,e),new Cubehelix(this.h,this.s,this.l*e,this.opacity)},rgb:function rgb(){var e=isNaN(this.h)?0:(this.h+120)*$,t=+this.l,n=isNaN(this.s)?0:this.s*t*(1-t),r=Math.cos(e),i=Math.sin(e);return new Rgb(255*(t+n*(ae*r+oe*i)),255*(t+n*(ue*r+ce*i)),255*(t+n*(se*r)),this.opacity)}}));var de=function(e){return function(){return e}};function linear(e,t){return function(n){return e+n*t}}function color_hue(e,t){var n=t-e;return n?linear(e,n>180||n<-180?n-360*Math.round(n/360):n):de(isNaN(e)?t:e)}function gamma(e){return 1==(e=+e)?nogamma:function(t,n){return n-t?function exponential(e,t,n){return e=Math.pow(e,n),t=Math.pow(t,n)-e,n=1/n,function(r){return Math.pow(e+r*t,n)}}(t,n,e):de(isNaN(t)?n:t)}}function nogamma(e,t){var n=t-e;return n?linear(e,n):de(isNaN(e)?t:e)}var pe=function rgbGamma(e){var t=gamma(e);function rgb(e,n){var r=t((e=color_rgb(e)).r,(n=color_rgb(n)).r),i=t(e.g,n.g),a=t(e.b,n.b),o=nogamma(e.opacity,n.opacity);return function(t){return e.r=r(t),e.g=i(t),e.b=a(t),e.opacity=o(t),e+""}}return rgb.gamma=rgbGamma,rgb}(1);function rgbSpline(e){return function(t){var n,r,i=t.length,a=new Array(i),o=new Array(i),u=new Array(i);for(n=0;n=1?(n=1,t-1):Math.floor(n*t),i=e[r],a=e[r+1],o=r>0?e[r-1]:2*i-a,u=ra&&(i=t.slice(a,i),u[o]?u[o]+=i:u[++o]=i),(n=n[0])===(r=r[0])?u[o]?u[o]+=r:u[++o]=r:(u[++o]=null,c.push({i:o,x:ge(n,r)})),a=be.lastIndex;return a180?t+=360:t-e>180&&(e+=360),i.push({i:n.push(pop(n)+"rotate(",null,r)-2,x:ge(e,t)})):t&&n.push(pop(n)+"rotate("+t+r)}(i.rotate,a.rotate,o,u),function skewX(e,t,n,i){e!==t?i.push({i:n.push(pop(n)+"skewX(",null,r)-2,x:ge(e,t)}):t&&n.push(pop(n)+"skewX("+t+r)}(i.skewX,a.skewX,o,u),function scale(e,t,n,r,i,a){if(e!==n||t!==r){var o=i.push(pop(i)+"scale(",null,",",null,")");a.push({i:o-4,x:ge(e,n)},{i:o-2,x:ge(t,r)})}else 1===n&&1===r||i.push(pop(i)+"scale("+n+","+r+")")}(i.scaleX,i.scaleY,a.scaleX,a.scaleY,o,u),i=a=null,function(e){for(var t,n=-1,r=u.length;++n2?polymap:bimap,r=i=null,scale}function scale(t){return(r||(r=n(a,o,c?function deinterpolateClamp(e){return function(t,n){var r=e(t=+t,n=+n);return function(e){return e<=t?0:e>=n?1:r(e)}}}(e):e,u)))(+t)}return scale.invert=function(e){return(i||(i=n(o,a,deinterpolateLinear,c?function reinterpolateClamp(e){return function(t,n){var r=e(t=+t,n=+n);return function(e){return e<=0?t:e>=1?n:r(e)}}}(t):t)))(+e)},scale.domain=function(e){return arguments.length?(a=j.call(e,De),rescale()):a.slice()},scale.range=function(e){return arguments.length?(o=I.call(e),rescale()):o.slice()},scale.rangeRound=function(e){return o=I.call(e),u=Ae,rescale()},scale.clamp=function(e){return arguments.length?(c=!!e,rescale()):c},scale.interpolate=function(e){return arguments.length?(u=e,rescale()):u},rescale()}var Re=function(e,t){if((n=(e=t?e.toExponential(t-1):e.toExponential()).indexOf("e"))<0)return null;var n,r=e.slice(0,n);return[r.length>1?r[0]+r.slice(2):r,+e.slice(n+1)]},Be=function(e){return(e=Re(Math.abs(e)))?e[1]:NaN},ze=/^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;function formatSpecifier(e){return new FormatSpecifier(e)}function FormatSpecifier(e){if(!(t=ze.exec(e)))throw new Error("invalid format: "+e);var t;this.fill=t[1]||" ",this.align=t[2]||">",this.sign=t[3]||"-",this.symbol=t[4]||"",this.zero=!!t[5],this.width=t[6]&&+t[6],this.comma=!!t[7],this.precision=t[8]&&+t[8].slice(1),this.trim=!!t[9],this.type=t[10]||""}formatSpecifier.prototype=FormatSpecifier.prototype,FormatSpecifier.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.trim?"~":"")+this.type};var He,Ve,Ue,We,qe=function(e){e:for(var t,n=e.length,r=1,i=-1;r0){if(!+e[r])break e;i=0}}return i>0?e.slice(0,i)+e.slice(t+1):e},Ge=function(e,t){var n=Re(e,t);if(!n)return e+"";var r=n[0],i=n[1];return i<0?"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")},Ye={"%":function _(e,t){return(100*e).toFixed(t)},b:function b(e){return Math.round(e).toString(2)},c:function c(e){return e+""},d:function d(e){return Math.round(e).toString(10)},e:function e(t,n){return t.toExponential(n)},f:function f(e,t){return e.toFixed(t)},g:function g(e,t){return e.toPrecision(t)},o:function o(e){return Math.round(e).toString(8)},p:function p(e,t){return Ge(100*e,t)},r:Ge,s:function(e,t){var n=Re(e,t);if(!n)return e+"";var r=n[0],i=n[1],a=i-(He=3*Math.max(-8,Math.min(8,Math.floor(i/3))))+1,o=r.length;return a===o?r:a>o?r+new Array(a-o+1).join("0"):a>0?r.slice(0,a)+"."+r.slice(a):"0."+new Array(1-a).join("0")+Re(e,Math.max(0,t+a-1))[0]},X:function X(e){return Math.round(e).toString(16).toUpperCase()},x:function x(e){return Math.round(e).toString(16)}},Xe=function(e){return e},Ke=["y","z","a","f","p","n","µ","m","","k","M","G","T","P","E","Z","Y"],$e=function(e){var t=e.grouping&&e.thousands?function(e,t){return function(n,r){for(var i=n.length,a=[],o=0,u=e[0],c=0;i>0&&u>0&&(c+u+1>r&&(u=Math.max(1,r-c)),a.push(n.substring(i-=u,i+u)),!((c+=u+1)>r));)u=e[o=(o+1)%e.length];return a.reverse().join(t)}}(e.grouping,e.thousands):Xe,n=e.currency,r=e.decimal,i=e.numerals?function(e){return function(t){return t.replace(/[0-9]/g,function(t){return e[+t]})}}(e.numerals):Xe,a=e.percent||"%";function newFormat(e){var o=(e=formatSpecifier(e)).fill,u=e.align,c=e.sign,s=e.symbol,l=e.zero,f=e.width,h=e.comma,d=e.precision,p=e.trim,y=e.type;"n"===y?(h=!0,y="g"):Ye[y]||(null==d&&(d=12),p=!0,y="g"),(l||"0"===o&&"="===u)&&(l=!0,o="0",u="=");var g="$"===s?n[0]:"#"===s&&/[boxX]/.test(y)?"0"+y.toLowerCase():"",v="$"===s?n[1]:/[%p]/.test(y)?a:"",m=Ye[y],b=/[defgprs%]/.test(y);function format(e){var n,a,s,_=g,x=v;if("c"===y)x=m(e)+x,e="";else{var w=(e=+e)<0;if(e=m(Math.abs(e),d),p&&(e=qe(e)),w&&0==+e&&(w=!1),_=(w?"("===c?c:"-":"-"===c||"("===c?"":c)+_,x=("s"===y?Ke[8+He/3]:"")+x+(w&&"("===c?")":""),b)for(n=-1,a=e.length;++n(s=e.charCodeAt(n))||s>57){x=(46===s?r+e.slice(n+1):e.slice(n))+x,e=e.slice(0,n);break}}h&&!l&&(e=t(e,1/0));var k=_.length+e.length+x.length,C=k>1)+_+e+x+C.slice(k);break;default:e=C+_+e+x}return i(e)}return d=null==d?6:/[gprs]/.test(y)?Math.max(1,Math.min(21,d)):Math.max(0,Math.min(20,d)),format.toString=function(){return e+""},format}return{format:newFormat,formatPrefix:function formatPrefix(e,t){var n=newFormat(((e=formatSpecifier(e)).type="f",e)),r=3*Math.max(-8,Math.min(8,Math.floor(Be(t)/3))),i=Math.pow(10,-r),a=Ke[8+r/3];return function(e){return n(i*e)+a}}}};!function defaultLocale(e){return Ve=$e(e),Ue=Ve.format,We=Ve.formatPrefix,Ve}({decimal:".",thousands:",",grouping:[3],currency:["$",""]});var Qe=function(e,t,n){var r,i=e[0],a=e[e.length-1],o=tickStep(i,a,null==t?10:t);switch((n=formatSpecifier(null==n?",f":n)).type){case"s":var u=Math.max(Math.abs(i),Math.abs(a));return null!=n.precision||isNaN(r=function(e,t){return Math.max(0,3*Math.max(-8,Math.min(8,Math.floor(Be(t)/3)))-Be(Math.abs(e)))}(o,u))||(n.precision=r),We(n,u);case"":case"e":case"g":case"p":case"r":null!=n.precision||isNaN(r=function(e,t){return e=Math.abs(e),t=Math.abs(t)-e,Math.max(0,Be(t)-Be(e))+1}(o,Math.max(Math.abs(i),Math.abs(a))))||(n.precision=r-("e"===n.type));break;case"f":case"%":null!=n.precision||isNaN(r=function(e){return Math.max(0,-Be(Math.abs(e)))}(o))||(n.precision=r-2*("%"===n.type))}return Ue(n)};function linearish(e){var t=e.domain;return e.ticks=function(e){var n=t();return E(n[0],n[n.length-1],null==e?10:e)},e.tickFormat=function(e,n){return Qe(t(),e,n)},e.nice=function(n){null==n&&(n=10);var r,i=t(),a=0,o=i.length-1,u=i[a],c=i[o];return c0?r=tickIncrement(u=Math.floor(u/r)*r,c=Math.ceil(c/r)*r,n):r<0&&(r=tickIncrement(u=Math.ceil(u*r)/r,c=Math.floor(c*r)/r,n)),r>0?(i[a]=Math.floor(u/r)*r,i[o]=Math.ceil(c/r)*r,t(i)):r<0&&(i[a]=Math.ceil(u*r)/r,i[o]=Math.floor(c*r)/r,t(i)),e},e}function linear_linear(){var e=continuous(deinterpolateLinear,ge);return e.copy=function(){return copy(e,linear_linear())},linearish(e)}function identity_identity(){var e=[0,1];function scale(e){return+e}return scale.invert=scale,scale.domain=scale.range=function(t){return arguments.length?(e=j.call(t,De),scale):e.slice()},scale.copy=function(){return identity_identity().domain(e)},linearish(scale)}var Ze=function(e,t){var n,r=0,i=(e=e.slice()).length-1,a=e[r],o=e[i];return o0){for(;hc)break;y.push(f)}}else for(;h=1;--l)if(!((f=s*l)c)break;y.push(f)}}else y=E(h,d,Math.min(d-h,p)).map(i);return a?y.reverse():y},e.tickFormat=function(t,a){if(null==a&&(a=10===n?".0e":","),"function"!=typeof a&&(a=Ue(a)),t===1/0)return a;null==t&&(t=10);var o=Math.max(1,n*t/e.ticks().length);return function(e){var t=e/i(Math.round(r(e)));return t*n0?n[i-1]:e[0],i=n?[r[n-1],t]:[r[o-1],r[o]]},scale.copy=function(){return quantize_quantize().domain([e,t]).range(i)},linearish(scale)}function threshold_threshold(){var e=[.5],t=[0,1],n=1;function scale(r){if(r<=r)return t[x(e,r,0,n)]}return scale.domain=function(r){return arguments.length?(e=I.call(r),n=Math.min(e.length,t.length-1),scale):e.slice()},scale.range=function(r){return arguments.length?(t=I.call(r),n=Math.min(e.length,t.length-1),scale):t.slice()},scale.invertExtent=function(n){var r=t.indexOf(n);return[e[r-1],e[r]]},scale.copy=function(){return threshold_threshold().domain(e).range(t)},scale}var Je=new Date,et=new Date;function newInterval(e,t,n,r){function interval(t){return e(t=new Date(+t)),t}return interval.floor=interval,interval.ceil=function(n){return e(n=new Date(n-1)),t(n,1),e(n),n},interval.round=function(e){var t=interval(e),n=interval.ceil(e);return e-t0))return o;do{o.push(a=new Date(+n)),t(n,i),e(n)}while(a=t)for(;e(t),!n(t);)t.setTime(t-1)},function(e,r){if(e>=e)if(r<0)for(;++r<=0;)for(;t(e,-1),!n(e););else for(;--r>=0;)for(;t(e,1),!n(e););})},n&&(interval.count=function(t,r){return Je.setTime(+t),et.setTime(+r),e(Je),e(et),Math.floor(n(Je,et))},interval.every=function(e){return e=Math.floor(e),isFinite(e)&&e>0?e>1?interval.filter(r?function(t){return r(t)%e==0}:function(t){return interval.count(0,t)%e==0}):interval:null}),interval}var tt=newInterval(function(){},function(e,t){e.setTime(+e+t)},function(e,t){return t-e});tt.every=function(e){return e=Math.floor(e),isFinite(e)&&e>0?e>1?newInterval(function(t){t.setTime(Math.floor(t/e)*e)},function(t,n){t.setTime(+t+n*e)},function(t,n){return(n-t)/e}):tt:null};var nt=tt,rt=(tt.range,6e4),it=6048e5,at=newInterval(function(e){e.setTime(1e3*Math.floor(e/1e3))},function(e,t){e.setTime(+e+1e3*t)},function(e,t){return(t-e)/1e3},function(e){return e.getUTCSeconds()}),ot=at,ut=(at.range,newInterval(function(e){e.setTime(Math.floor(e/rt)*rt)},function(e,t){e.setTime(+e+t*rt)},function(e,t){return(t-e)/rt},function(e){return e.getMinutes()})),ct=ut,st=(ut.range,newInterval(function(e){var t=e.getTimezoneOffset()*rt%36e5;t<0&&(t+=36e5),e.setTime(36e5*Math.floor((+e-t)/36e5)+t)},function(e,t){e.setTime(+e+36e5*t)},function(e,t){return(t-e)/36e5},function(e){return e.getHours()})),lt=st,ft=(st.range,newInterval(function(e){e.setHours(0,0,0,0)},function(e,t){e.setDate(e.getDate()+t)},function(e,t){return(t-e-(t.getTimezoneOffset()-e.getTimezoneOffset())*rt)/864e5},function(e){return e.getDate()-1})),ht=ft;ft.range;function weekday(e){return newInterval(function(t){t.setDate(t.getDate()-(t.getDay()+7-e)%7),t.setHours(0,0,0,0)},function(e,t){e.setDate(e.getDate()+7*t)},function(e,t){return(t-e-(t.getTimezoneOffset()-e.getTimezoneOffset())*rt)/it})}var dt=weekday(0),pt=weekday(1),yt=weekday(2),gt=weekday(3),vt=weekday(4),mt=weekday(5),bt=weekday(6),_t=(dt.range,pt.range,yt.range,gt.range,vt.range,mt.range,bt.range,newInterval(function(e){e.setDate(1),e.setHours(0,0,0,0)},function(e,t){e.setMonth(e.getMonth()+t)},function(e,t){return t.getMonth()-e.getMonth()+12*(t.getFullYear()-e.getFullYear())},function(e){return e.getMonth()})),xt=_t,wt=(_t.range,newInterval(function(e){e.setMonth(0,1),e.setHours(0,0,0,0)},function(e,t){e.setFullYear(e.getFullYear()+t)},function(e,t){return t.getFullYear()-e.getFullYear()},function(e){return e.getFullYear()}));wt.every=function(e){return isFinite(e=Math.floor(e))&&e>0?newInterval(function(t){t.setFullYear(Math.floor(t.getFullYear()/e)*e),t.setMonth(0,1),t.setHours(0,0,0,0)},function(t,n){t.setFullYear(t.getFullYear()+n*e)}):null};var kt=wt,Ct=(wt.range,newInterval(function(e){e.setUTCSeconds(0,0)},function(e,t){e.setTime(+e+t*rt)},function(e,t){return(t-e)/rt},function(e){return e.getUTCMinutes()})),St=(Ct.range,newInterval(function(e){e.setUTCMinutes(0,0,0)},function(e,t){e.setTime(+e+36e5*t)},function(e,t){return(t-e)/36e5},function(e){return e.getUTCHours()})),Pt=(St.range,newInterval(function(e){e.setUTCHours(0,0,0,0)},function(e,t){e.setUTCDate(e.getUTCDate()+t)},function(e,t){return(t-e)/864e5},function(e){return e.getUTCDate()-1})),At=Pt;Pt.range;function utcWeekday(e){return newInterval(function(t){t.setUTCDate(t.getUTCDate()-(t.getUTCDay()+7-e)%7),t.setUTCHours(0,0,0,0)},function(e,t){e.setUTCDate(e.getUTCDate()+7*t)},function(e,t){return(t-e)/it})}var Et=utcWeekday(0),Mt=utcWeekday(1),Ot=utcWeekday(2),Tt=utcWeekday(3),Ft=utcWeekday(4),Nt=utcWeekday(5),jt=utcWeekday(6),It=(Et.range,Mt.range,Ot.range,Tt.range,Ft.range,Nt.range,jt.range,newInterval(function(e){e.setUTCDate(1),e.setUTCHours(0,0,0,0)},function(e,t){e.setUTCMonth(e.getUTCMonth()+t)},function(e,t){return t.getUTCMonth()-e.getUTCMonth()+12*(t.getUTCFullYear()-e.getUTCFullYear())},function(e){return e.getUTCMonth()})),Dt=(It.range,newInterval(function(e){e.setUTCMonth(0,1),e.setUTCHours(0,0,0,0)},function(e,t){e.setUTCFullYear(e.getUTCFullYear()+t)},function(e,t){return t.getUTCFullYear()-e.getUTCFullYear()},function(e){return e.getUTCFullYear()}));Dt.every=function(e){return isFinite(e=Math.floor(e))&&e>0?newInterval(function(t){t.setUTCFullYear(Math.floor(t.getUTCFullYear()/e)*e),t.setUTCMonth(0,1),t.setUTCHours(0,0,0,0)},function(t,n){t.setUTCFullYear(t.getUTCFullYear()+n*e)}):null};var Lt=Dt;Dt.range;function localDate(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 utcDate(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 newYear(e){return{y:e,m:0,d:1,H:0,M:0,S:0,L:0}}var Rt,Bt,zt,Ht,Vt={"-":"",_:" ",0:"0"},Ut=/^\s*\d+/,Wt=/^%/,qt=/[\\^$*+?|[\]().{}]/g;function locale_pad(e,t,n){var r=e<0?"-":"",i=(r?-e:e)+"",a=i.length;return r+(a68?1900:2e3),n+r[0].length):-1}function parseZone(e,t,n){var r=/^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(t.slice(n,n+6));return r?(e.Z=r[1]?0:-(r[2]+(r[3]||"00")),n+r[0].length):-1}function parseMonthNumber(e,t,n){var r=Ut.exec(t.slice(n,n+2));return r?(e.m=r[0]-1,n+r[0].length):-1}function parseDayOfMonth(e,t,n){var r=Ut.exec(t.slice(n,n+2));return r?(e.d=+r[0],n+r[0].length):-1}function parseDayOfYear(e,t,n){var r=Ut.exec(t.slice(n,n+3));return r?(e.m=0,e.d=+r[0],n+r[0].length):-1}function parseHour24(e,t,n){var r=Ut.exec(t.slice(n,n+2));return r?(e.H=+r[0],n+r[0].length):-1}function parseMinutes(e,t,n){var r=Ut.exec(t.slice(n,n+2));return r?(e.M=+r[0],n+r[0].length):-1}function parseSeconds(e,t,n){var r=Ut.exec(t.slice(n,n+2));return r?(e.S=+r[0],n+r[0].length):-1}function parseMilliseconds(e,t,n){var r=Ut.exec(t.slice(n,n+3));return r?(e.L=+r[0],n+r[0].length):-1}function parseMicroseconds(e,t,n){var r=Ut.exec(t.slice(n,n+6));return r?(e.L=Math.floor(r[0]/1e3),n+r[0].length):-1}function parseLiteralPercent(e,t,n){var r=Wt.exec(t.slice(n,n+1));return r?n+r[0].length:-1}function parseUnixTimestamp(e,t,n){var r=Ut.exec(t.slice(n));return r?(e.Q=+r[0],n+r[0].length):-1}function parseUnixTimestampSeconds(e,t,n){var r=Ut.exec(t.slice(n));return r?(e.Q=1e3*+r[0],n+r[0].length):-1}function formatDayOfMonth(e,t){return locale_pad(e.getDate(),t,2)}function formatHour24(e,t){return locale_pad(e.getHours(),t,2)}function formatHour12(e,t){return locale_pad(e.getHours()%12||12,t,2)}function formatDayOfYear(e,t){return locale_pad(1+ht.count(kt(e),e),t,3)}function formatMilliseconds(e,t){return locale_pad(e.getMilliseconds(),t,3)}function formatMicroseconds(e,t){return formatMilliseconds(e,t)+"000"}function formatMonthNumber(e,t){return locale_pad(e.getMonth()+1,t,2)}function formatMinutes(e,t){return locale_pad(e.getMinutes(),t,2)}function formatSeconds(e,t){return locale_pad(e.getSeconds(),t,2)}function formatWeekdayNumberMonday(e){var t=e.getDay();return 0===t?7:t}function formatWeekNumberSunday(e,t){return locale_pad(dt.count(kt(e),e),t,2)}function formatWeekNumberISO(e,t){var n=e.getDay();return e=n>=4||0===n?vt(e):vt.ceil(e),locale_pad(vt.count(kt(e),e)+(4===kt(e).getDay()),t,2)}function formatWeekdayNumberSunday(e){return e.getDay()}function formatWeekNumberMonday(e,t){return locale_pad(pt.count(kt(e),e),t,2)}function locale_formatYear(e,t){return locale_pad(e.getFullYear()%100,t,2)}function formatFullYear(e,t){return locale_pad(e.getFullYear()%1e4,t,4)}function formatZone(e){var t=e.getTimezoneOffset();return(t>0?"-":(t*=-1,"+"))+locale_pad(t/60|0,"0",2)+locale_pad(t%60,"0",2)}function formatUTCDayOfMonth(e,t){return locale_pad(e.getUTCDate(),t,2)}function formatUTCHour24(e,t){return locale_pad(e.getUTCHours(),t,2)}function formatUTCHour12(e,t){return locale_pad(e.getUTCHours()%12||12,t,2)}function formatUTCDayOfYear(e,t){return locale_pad(1+At.count(Lt(e),e),t,3)}function formatUTCMilliseconds(e,t){return locale_pad(e.getUTCMilliseconds(),t,3)}function formatUTCMicroseconds(e,t){return formatUTCMilliseconds(e,t)+"000"}function formatUTCMonthNumber(e,t){return locale_pad(e.getUTCMonth()+1,t,2)}function formatUTCMinutes(e,t){return locale_pad(e.getUTCMinutes(),t,2)}function formatUTCSeconds(e,t){return locale_pad(e.getUTCSeconds(),t,2)}function formatUTCWeekdayNumberMonday(e){var t=e.getUTCDay();return 0===t?7:t}function formatUTCWeekNumberSunday(e,t){return locale_pad(Et.count(Lt(e),e),t,2)}function formatUTCWeekNumberISO(e,t){var n=e.getUTCDay();return e=n>=4||0===n?Ft(e):Ft.ceil(e),locale_pad(Ft.count(Lt(e),e)+(4===Lt(e).getUTCDay()),t,2)}function formatUTCWeekdayNumberSunday(e){return e.getUTCDay()}function formatUTCWeekNumberMonday(e,t){return locale_pad(Mt.count(Lt(e),e),t,2)}function formatUTCYear(e,t){return locale_pad(e.getUTCFullYear()%100,t,2)}function formatUTCFullYear(e,t){return locale_pad(e.getUTCFullYear()%1e4,t,4)}function formatUTCZone(){return"+0000"}function formatLiteralPercent(){return"%"}function formatUnixTimestamp(e){return+e}function formatUnixTimestampSeconds(e){return Math.floor(+e/1e3)}!function defaultLocale_defaultLocale(e){return Rt=function formatLocale(e){var t=e.dateTime,n=e.date,r=e.time,i=e.periods,a=e.days,o=e.shortDays,u=e.months,c=e.shortMonths,s=formatRe(i),l=formatLookup(i),f=formatRe(a),h=formatLookup(a),d=formatRe(o),p=formatLookup(o),y=formatRe(u),g=formatLookup(u),v=formatRe(c),m=formatLookup(c),b={a:function formatShortWeekday(e){return o[e.getDay()]},A:function formatWeekday(e){return a[e.getDay()]},b:function formatShortMonth(e){return c[e.getMonth()]},B:function formatMonth(e){return u[e.getMonth()]},c:null,d:formatDayOfMonth,e:formatDayOfMonth,f:formatMicroseconds,H:formatHour24,I:formatHour12,j:formatDayOfYear,L:formatMilliseconds,m:formatMonthNumber,M:formatMinutes,p:function formatPeriod(e){return i[+(e.getHours()>=12)]},Q:formatUnixTimestamp,s:formatUnixTimestampSeconds,S:formatSeconds,u:formatWeekdayNumberMonday,U:formatWeekNumberSunday,V:formatWeekNumberISO,w:formatWeekdayNumberSunday,W:formatWeekNumberMonday,x:null,X:null,y:locale_formatYear,Y:formatFullYear,Z:formatZone,"%":formatLiteralPercent},_={a:function formatUTCShortWeekday(e){return o[e.getUTCDay()]},A:function formatUTCWeekday(e){return a[e.getUTCDay()]},b:function formatUTCShortMonth(e){return c[e.getUTCMonth()]},B:function formatUTCMonth(e){return u[e.getUTCMonth()]},c:null,d:formatUTCDayOfMonth,e:formatUTCDayOfMonth,f:formatUTCMicroseconds,H:formatUTCHour24,I:formatUTCHour12,j:formatUTCDayOfYear,L:formatUTCMilliseconds,m:formatUTCMonthNumber,M:formatUTCMinutes,p:function formatUTCPeriod(e){return i[+(e.getUTCHours()>=12)]},Q:formatUnixTimestamp,s:formatUnixTimestampSeconds,S:formatUTCSeconds,u:formatUTCWeekdayNumberMonday,U:formatUTCWeekNumberSunday,V:formatUTCWeekNumberISO,w:formatUTCWeekdayNumberSunday,W:formatUTCWeekNumberMonday,x:null,X:null,y:formatUTCYear,Y:formatUTCFullYear,Z:formatUTCZone,"%":formatLiteralPercent},x={a:function parseShortWeekday(e,t,n){var r=d.exec(t.slice(n));return r?(e.w=p[r[0].toLowerCase()],n+r[0].length):-1},A:function parseWeekday(e,t,n){var r=f.exec(t.slice(n));return r?(e.w=h[r[0].toLowerCase()],n+r[0].length):-1},b:function parseShortMonth(e,t,n){var r=v.exec(t.slice(n));return r?(e.m=m[r[0].toLowerCase()],n+r[0].length):-1},B:function parseMonth(e,t,n){var r=y.exec(t.slice(n));return r?(e.m=g[r[0].toLowerCase()],n+r[0].length):-1},c:function parseLocaleDateTime(e,n,r){return parseSpecifier(e,t,n,r)},d:parseDayOfMonth,e:parseDayOfMonth,f:parseMicroseconds,H:parseHour24,I:parseHour24,j:parseDayOfYear,L:parseMilliseconds,m:parseMonthNumber,M:parseMinutes,p:function parsePeriod(e,t,n){var r=s.exec(t.slice(n));return r?(e.p=l[r[0].toLowerCase()],n+r[0].length):-1},Q:parseUnixTimestamp,s:parseUnixTimestampSeconds,S:parseSeconds,u:parseWeekdayNumberMonday,U:parseWeekNumberSunday,V:parseWeekNumberISO,w:parseWeekdayNumberSunday,W:parseWeekNumberMonday,x:function parseLocaleDate(e,t,r){return parseSpecifier(e,n,t,r)},X:function parseLocaleTime(e,t,n){return parseSpecifier(e,r,t,n)},y:parseYear,Y:parseFullYear,Z:parseZone,"%":parseLiteralPercent};function newFormat(e,t){return function(n){var r,i,a,o=[],u=-1,c=0,s=e.length;for(n instanceof Date||(n=new Date(+n));++u53)return null;"w"in a||(a.w=1),"Z"in a?(r=(i=(r=utcDate(newYear(a.y))).getUTCDay())>4||0===i?Mt.ceil(r):Mt(r),r=At.offset(r,7*(a.V-1)),a.y=r.getUTCFullYear(),a.m=r.getUTCMonth(),a.d=r.getUTCDate()+(a.w+6)%7):(r=(i=(r=t(newYear(a.y))).getDay())>4||0===i?pt.ceil(r):pt(r),r=ht.offset(r,7*(a.V-1)),a.y=r.getFullYear(),a.m=r.getMonth(),a.d=r.getDate()+(a.w+6)%7)}else("W"in a||"U"in a)&&("w"in a||(a.w="u"in a?a.u%7:"W"in a?1:0),i="Z"in a?utcDate(newYear(a.y)).getUTCDay():t(newYear(a.y)).getDay(),a.m=0,a.d="W"in a?(a.w+6)%7+7*a.W-(i+5)%7:a.w+7*a.U-(i+6)%7);return"Z"in a?(a.H+=a.Z/100|0,a.M+=a.Z%100,utcDate(a)):t(a)}}function parseSpecifier(e,t,n,r){for(var i,a,o=0,u=t.length,c=n.length;o=c)return-1;if(37===(i=t.charCodeAt(o++))){if(i=t.charAt(o++),!(a=x[i in Vt?t.charAt(o++):i])||(r=a(e,n,r))<0)return-1}else if(i!=n.charCodeAt(r++))return-1}return r}return b.x=newFormat(n,b),b.X=newFormat(r,b),b.c=newFormat(t,b),_.x=newFormat(n,_),_.X=newFormat(r,_),_.c=newFormat(t,_),{format:function format(e){var t=newFormat(e+="",b);return t.toString=function(){return e},t},parse:function parse(e){var t=newParse(e+="",localDate);return t.toString=function(){return e},t},utcFormat:function utcFormat(e){var t=newFormat(e+="",_);return t.toString=function(){return e},t},utcParse:function utcParse(e){var t=newParse(e,utcDate);return t.toString=function(){return e},t}}}(e),Bt=Rt.format,Rt.parse,zt=Rt.utcFormat,Ht=Rt.utcParse,Rt}({dateTime:"%x, %X",date:"%-m/%-d/%Y",time:"%-I:%M:%S %p",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"]});Date.prototype.toISOString||zt("%Y-%m-%dT%H:%M:%S.%LZ");+new Date("2000-01-01T00:00:00.000Z")||Ht("%Y-%m-%dT%H:%M:%S.%LZ");var Gt=1e3,Yt=60*Gt,Xt=60*Yt,Kt=24*Xt,$t=7*Kt,Qt=30*Kt,Zt=365*Kt;function time_date(e){return new Date(e)}function time_number(e){return e instanceof Date?+e:+new Date(+e)}function calendar(e,t,n,r,i,a,o,u,c){var s=continuous(deinterpolateLinear,ge),l=s.invert,f=s.domain,h=c(".%L"),d=c(":%S"),p=c("%I:%M"),y=c("%I %p"),g=c("%a %d"),v=c("%b %d"),b=c("%B"),_=c("%Y"),x=[[o,1,Gt],[o,5,5*Gt],[o,15,15*Gt],[o,30,30*Gt],[a,1,Yt],[a,5,5*Yt],[a,15,15*Yt],[a,30,30*Yt],[i,1,Xt],[i,3,3*Xt],[i,6,6*Xt],[i,12,12*Xt],[r,1,Kt],[r,2,2*Kt],[n,1,$t],[t,1,Qt],[t,3,3*Qt],[e,1,Zt]];function tickFormat(u){return(o(u)1)&&(e-=Math.floor(e));var t=Math.abs(e-.5);return $n.h=360*e-100,$n.s=1.5-1.5*t,$n.l=.8-.9*t,$n+""};color_rgb(),Math.PI,Math.PI;function viridis_ramp(e){var t=e.length;return function(n){return e[Math.max(0,Math.min(t-1,Math.floor(n*t)))]}}var Zn=viridis_ramp(an("44015444025645045745055946075a46085c460a5d460b5e470d60470e6147106347116447136548146748166848176948186a481a6c481b6d481c6e481d6f481f70482071482173482374482475482576482677482878482979472a7a472c7a472d7b472e7c472f7d46307e46327e46337f463480453581453781453882443983443a83443b84433d84433e85423f854240864241864142874144874045884046883f47883f48893e49893e4a893e4c8a3d4d8a3d4e8a3c4f8a3c508b3b518b3b528b3a538b3a548c39558c39568c38588c38598c375a8c375b8d365c8d365d8d355e8d355f8d34608d34618d33628d33638d32648e32658e31668e31678e31688e30698e306a8e2f6b8e2f6c8e2e6d8e2e6e8e2e6f8e2d708e2d718e2c718e2c728e2c738e2b748e2b758e2a768e2a778e2a788e29798e297a8e297b8e287c8e287d8e277e8e277f8e27808e26818e26828e26828e25838e25848e25858e24868e24878e23888e23898e238a8d228b8d228c8d228d8d218e8d218f8d21908d21918c20928c20928c20938c1f948c1f958b1f968b1f978b1f988b1f998a1f9a8a1e9b8a1e9c891e9d891f9e891f9f881fa0881fa1881fa1871fa28720a38620a48621a58521a68522a78522a88423a98324aa8325ab8225ac8226ad8127ad8128ae8029af7f2ab07f2cb17e2db27d2eb37c2fb47c31b57b32b67a34b67935b77937b87838b9773aba763bbb753dbc743fbc7340bd7242be7144bf7046c06f48c16e4ac16d4cc26c4ec36b50c46a52c56954c56856c66758c7655ac8645cc8635ec96260ca6063cb5f65cb5e67cc5c69cd5b6ccd5a6ece5870cf5773d05675d05477d1537ad1517cd2507fd34e81d34d84d44b86d54989d5488bd6468ed64590d74393d74195d84098d83e9bd93c9dd93ba0da39a2da37a5db36a8db34aadc32addc30b0dd2fb2dd2db5de2bb8de29bade28bddf26c0df25c2df23c5e021c8e020cae11fcde11dd0e11cd2e21bd5e21ad8e219dae319dde318dfe318e2e418e5e419e7e419eae51aece51befe51cf1e51df4e61ef6e620f8e621fbe723fde725")),Jn=viridis_ramp(an("00000401000501010601010802010902020b02020d03030f03031204041405041606051806051a07061c08071e0907200a08220b09240c09260d0a290e0b2b100b2d110c2f120d31130d34140e36150e38160f3b180f3d19103f1a10421c10441d11471e114920114b21114e22115024125325125527125829115a2a115c2c115f2d11612f116331116533106734106936106b38106c390f6e3b0f703d0f713f0f72400f74420f75440f764510774710784910784a10794c117a4e117b4f127b51127c52137c54137d56147d57157e59157e5a167e5c167f5d177f5f187f601880621980641a80651a80671b80681c816a1c816b1d816d1d816e1e81701f81721f817320817521817621817822817922827b23827c23827e24828025828125818326818426818627818827818928818b29818c29818e2a81902a81912b81932b80942c80962c80982d80992d809b2e7f9c2e7f9e2f7fa02f7fa1307ea3307ea5317ea6317da8327daa337dab337cad347cae347bb0357bb2357bb3367ab5367ab73779b83779ba3878bc3978bd3977bf3a77c03a76c23b75c43c75c53c74c73d73c83e73ca3e72cc3f71cd4071cf4070d0416fd2426fd3436ed5446dd6456cd8456cd9466bdb476adc4869de4968df4a68e04c67e24d66e34e65e44f64e55064e75263e85362e95462ea5661eb5760ec5860ed5a5fee5b5eef5d5ef05f5ef1605df2625df2645cf3655cf4675cf4695cf56b5cf66c5cf66e5cf7705cf7725cf8745cf8765cf9785df9795df97b5dfa7d5efa7f5efa815ffb835ffb8560fb8761fc8961fc8a62fc8c63fc8e64fc9065fd9266fd9467fd9668fd9869fd9a6afd9b6bfe9d6cfe9f6dfea16efea36ffea571fea772fea973feaa74feac76feae77feb078feb27afeb47bfeb67cfeb77efeb97ffebb81febd82febf84fec185fec287fec488fec68afec88cfeca8dfecc8ffecd90fecf92fed194fed395fed597fed799fed89afdda9cfddc9efddea0fde0a1fde2a3fde3a5fde5a7fde7a9fde9aafdebacfcecaefceeb0fcf0b2fcf2b4fcf4b6fcf6b8fcf7b9fcf9bbfcfbbdfcfdbf")),er=viridis_ramp(an("00000401000501010601010802010a02020c02020e03021004031204031405041706041907051b08051d09061f0a07220b07240c08260d08290e092b10092d110a30120a32140b34150b37160b39180c3c190c3e1b0c411c0c431e0c451f0c48210c4a230c4c240c4f260c51280b53290b552b0b572d0b592f0a5b310a5c320a5e340a5f3609613809623909633b09643d09653e0966400a67420a68440a68450a69470b6a490b6a4a0c6b4c0c6b4d0d6c4f0d6c510e6c520e6d540f6d550f6d57106e59106e5a116e5c126e5d126e5f136e61136e62146e64156e65156e67166e69166e6a176e6c186e6d186e6f196e71196e721a6e741a6e751b6e771c6d781c6d7a1d6d7c1d6d7d1e6d7f1e6c801f6c82206c84206b85216b87216b88226a8a226a8c23698d23698f24699025689225689326679526679727669827669a28659b29649d29649f2a63a02a63a22b62a32c61a52c60a62d60a82e5fa92e5eab2f5ead305dae305cb0315bb1325ab3325ab43359b63458b73557b93556ba3655bc3754bd3853bf3952c03a51c13a50c33b4fc43c4ec63d4dc73e4cc83f4bca404acb4149cc4248ce4347cf4446d04545d24644d34743d44842d54a41d74b3fd84c3ed94d3dda4e3cdb503bdd513ade5238df5337e05536e15635e25734e35933e45a31e55c30e65d2fe75e2ee8602de9612bea632aeb6429eb6628ec6726ed6925ee6a24ef6c23ef6e21f06f20f1711ff1731df2741cf3761bf37819f47918f57b17f57d15f67e14f68013f78212f78410f8850ff8870ef8890cf98b0bf98c0af98e09fa9008fa9207fa9407fb9606fb9706fb9906fb9b06fb9d07fc9f07fca108fca309fca50afca60cfca80dfcaa0ffcac11fcae12fcb014fcb216fcb418fbb61afbb81dfbba1ffbbc21fbbe23fac026fac228fac42afac62df9c72ff9c932f9cb35f8cd37f8cf3af7d13df7d340f6d543f6d746f5d949f5db4cf4dd4ff4df53f4e156f3e35af3e55df2e661f2e865f2ea69f1ec6df1ed71f1ef75f1f179f2f27df2f482f3f586f3f68af4f88ef5f992f6fa96f8fb9af9fc9dfafda1fcffa4")),tr=viridis_ramp(an("0d088710078813078916078a19068c1b068d1d068e20068f2206902406912605912805922a05932c05942e05952f059631059733059735049837049938049a3a049a3c049b3e049c3f049c41049d43039e44039e46039f48039f4903a04b03a14c02a14e02a25002a25102a35302a35502a45601a45801a45901a55b01a55c01a65e01a66001a66100a76300a76400a76600a76700a86900a86a00a86c00a86e00a86f00a87100a87201a87401a87501a87701a87801a87a02a87b02a87d03a87e03a88004a88104a78305a78405a78606a68707a68808a68a09a58b0aa58d0ba58e0ca48f0da4910ea3920fa39410a29511a19613a19814a099159f9a169f9c179e9d189d9e199da01a9ca11b9ba21d9aa31e9aa51f99a62098a72197a82296aa2395ab2494ac2694ad2793ae2892b02991b12a90b22b8fb32c8eb42e8db52f8cb6308bb7318ab83289ba3388bb3488bc3587bd3786be3885bf3984c03a83c13b82c23c81c33d80c43e7fc5407ec6417dc7427cc8437bc9447aca457acb4679cc4778cc4977cd4a76ce4b75cf4c74d04d73d14e72d24f71d35171d45270d5536fd5546ed6556dd7566cd8576bd9586ada5a6ada5b69db5c68dc5d67dd5e66de5f65de6164df6263e06363e16462e26561e26660e3685fe4695ee56a5de56b5de66c5ce76e5be76f5ae87059e97158e97257ea7457eb7556eb7655ec7754ed7953ed7a52ee7b51ef7c51ef7e50f07f4ff0804ef1814df1834cf2844bf3854bf3874af48849f48948f58b47f58c46f68d45f68f44f79044f79143f79342f89441f89540f9973ff9983ef99a3efa9b3dfa9c3cfa9e3bfb9f3afba139fba238fca338fca537fca636fca835fca934fdab33fdac33fdae32fdaf31fdb130fdb22ffdb42ffdb52efeb72dfeb82cfeba2cfebb2bfebd2afebe2afec029fdc229fdc328fdc527fdc627fdc827fdca26fdcb26fccd25fcce25fcd025fcd225fbd324fbd524fbd724fad824fada24f9dc24f9dd25f8df25f8e125f7e225f7e425f6e626f6e826f5e926f5eb27f4ed27f3ee27f3f027f2f227f1f426f1f525f0f724f0f921")),nr={ROW_ID:"__id__"},rr={ACTION_INF:"actionInf",ON_LAYER_DRAW:"onlayerdraw"},ir=n(0),ar=n.n(ir),or=Array.prototype.slice,ur=function(e){return e},cr=1,sr=2,lr=3,fr=4,hr=1e-6;function translateX(e){return"translate("+(e+.5)+",0)"}function translateY(e){return"translate(0,"+(e+.5)+")"}function entering(){return!this.__axis}function axis_axis(e,t){var n=[],r=null,i=null,a=null,o=6,u=6,c=3,s=e===cr||e===fr?-1:1,l=e===fr||e===sr?"x":"y",f=e===cr||e===lr?translateX:translateY;function axis(h){var d=null==r?t.ticks?t.ticks.apply(t,n):t.domain():r,p=null==i?t.tickFormat?t.tickFormat.apply(t,n):ur:i,y=Math.max(o,0)+c,g=t.range(),v=+g[0]+.5,m=+g[g.length-1]+.5,b=(t.bandwidth?function axis_center(e){var t=Math.max(0,e.bandwidth()-1)/2;return e.round()&&(t=Math.round(t)),function(n){return+e(n)+t}}:function axis_number(e){return function(t){return+e(t)}})(t.copy()),_=h.selection?h.selection():h,x=_.selectAll(".domain").data([null]),w=_.selectAll(".tick").data(d,t).order(),k=w.exit(),C=w.enter().append("g").attr("class","tick"),S=w.select("line"),P=w.select("text");x=x.merge(x.enter().insert("path",".tick").attr("class","domain").attr("stroke","#000")),w=w.merge(C),S=S.merge(C.append("line").attr("stroke","#000").attr(l+"2",s*o)),P=P.merge(C.append("text").attr("fill","#000").attr(l,s*y).attr("dy",e===cr?"0em":e===lr?"0.71em":"0.32em")).style("transform",a),h!==_&&(x=x.transition(h),w=w.transition(h),S=S.transition(h),P=P.transition(h),k=k.transition(h).attr("opacity",hr).attr("transform",function(e){return isFinite(e=b(e))?f(e):this.getAttribute("transform")}),C.attr("opacity",hr).attr("transform",function(e){var t=this.parentNode.__axis;return f(t&&isFinite(t=t(e))?t:b(e))})),k.remove(),x.attr("d",e===fr||e==sr?"M"+s*u+","+v+"H0.5V"+m+"H"+s*u:"M"+v+","+s*u+"V0.5H"+m+"V"+s*u),w.attr("opacity",1).attr("transform",function(e){return f(b(e))}),S.attr(l+"2",s*o),P.attr(l,s*y).text(p),_.filter(entering).attr("fill","none").attr("font-size",10).attr("font-family","sans-serif").attr("text-anchor",e===sr?"start":e===fr?"end":"middle"),_.each(function(){this.__axis=b})}return axis.scale=function(e){return arguments.length?(t=e,axis):t},axis.tickTransform=function(e){return arguments.length?(a=e,axis):a},axis.ticks=function(){return n=or.call(arguments),axis},axis.tickArguments=function(e){return arguments.length?(n=null==e?[]:or.call(e),axis):n.slice()},axis.tickValues=function(e){return arguments.length?(r=null==e?null:or.call(e),axis):r&&r.slice()},axis.tickFormat=function(e){return arguments.length?(i=e,axis):i},axis.tickSize=function(e){return arguments.length?(o=u=+e,axis):o},axis.tickSizeInner=function(e){return arguments.length?(o=+e,axis):o},axis.tickSizeOuter=function(e){return arguments.length?(u=+e,axis):u},axis.tickPadding=function(e){return arguments.length?(c=+e,axis):c},axis}var dr=Math.PI,pr=2*dr,yr=pr-1e-6;function Path(){this._x0=this._y0=this._x1=this._y1=null,this._=""}function path_path(){return new Path}Path.prototype=path_path.prototype={constructor:Path,moveTo:function moveTo(e,t){this._+="M"+(this._x0=this._x1=+e)+","+(this._y0=this._y1=+t)},closePath:function closePath(){null!==this._x1&&(this._x1=this._x0,this._y1=this._y0,this._+="Z")},lineTo:function lineTo(e,t){this._+="L"+(this._x1=+e)+","+(this._y1=+t)},quadraticCurveTo:function quadraticCurveTo(e,t,n,r){this._+="Q"+ +e+","+ +t+","+(this._x1=+n)+","+(this._y1=+r)},bezierCurveTo:function bezierCurveTo(e,t,n,r,i,a){this._+="C"+ +e+","+ +t+","+ +n+","+ +r+","+(this._x1=+i)+","+(this._y1=+a)},arcTo:function arcTo(e,t,n,r,i){e=+e,t=+t,n=+n,r=+r,i=+i;var a=this._x1,o=this._y1,u=n-e,c=r-t,s=a-e,l=o-t,f=s*s+l*l;if(i<0)throw new Error("negative radius: "+i);if(null===this._x1)this._+="M"+(this._x1=e)+","+(this._y1=t);else if(f>1e-6)if(Math.abs(l*u-c*s)>1e-6&&i){var h=n-a,d=r-o,p=u*u+c*c,y=h*h+d*d,g=Math.sqrt(p),v=Math.sqrt(f),m=i*Math.tan((dr-Math.acos((p+f-y)/(2*g*v)))/2),b=m/v,_=m/g;Math.abs(b-1)>1e-6&&(this._+="L"+(e+b*s)+","+(t+b*l)),this._+="A"+i+","+i+",0,0,"+ +(l*h>s*d)+","+(this._x1=e+_*u)+","+(this._y1=t+_*c)}else this._+="L"+(this._x1=e)+","+(this._y1=t);else;},arc:function arc(e,t,n,r,i,a){e=+e,t=+t;var o=(n=+n)*Math.cos(r),u=n*Math.sin(r),c=e+o,s=t+u,l=1^a,f=a?r-i:i-r;if(n<0)throw new Error("negative radius: "+n);null===this._x1?this._+="M"+c+","+s:(Math.abs(this._x1-c)>1e-6||Math.abs(this._y1-s)>1e-6)&&(this._+="L"+c+","+s),n&&(f<0&&(f=f%pr+pr),f>yr?this._+="A"+n+","+n+",0,1,"+l+","+(e-o)+","+(t-u)+"A"+n+","+n+",0,1,"+l+","+(this._x1=c)+","+(this._y1=s):f>1e-6&&(this._+="A"+n+","+n+",0,"+ +(f>=dr)+","+l+","+(this._x1=e+n*Math.cos(i))+","+(this._y1=t+n*Math.sin(i))))},rect:function rect(e,t,n,r){this._+="M"+(this._x0=this._x1=+e)+","+(this._y0=this._y1=+t)+"h"+ +n+"v"+ +r+"h"+-n+"Z"},toString:function toString(){return this._}};var gr=path_path,vr=function(e){return function constant(){return e}},mr=Math.abs,br=Math.atan2,_r=Math.cos,xr=Math.max,wr=Math.min,kr=Math.sin,Cr=Math.sqrt,Sr=1e-12,Pr=Math.PI,Ar=Pr/2,Er=2*Pr;function asin(e){return e>=1?Ar:e<=-1?-Ar:Math.asin(e)}function arcInnerRadius(e){return e.innerRadius}function arcOuterRadius(e){return e.outerRadius}function arcStartAngle(e){return e.startAngle}function arcEndAngle(e){return e.endAngle}function arcPadAngle(e){return e&&e.padAngle}function cornerTangents(e,t,n,r,i,a,o){var u=e-n,c=t-r,s=(o?a:-a)/Cr(u*u+c*c),l=s*c,f=-s*u,h=e+l,d=t+f,p=n+l,y=r+f,g=(h+p)/2,v=(d+y)/2,m=p-h,b=y-d,_=m*m+b*b,x=i-a,w=h*y-p*d,k=(b<0?-1:1)*Cr(xr(0,x*x*_-w*w)),C=(w*b-m*k)/_,S=(-w*m-b*k)/_,P=(w*b+m*k)/_,A=(-w*m+b*k)/_,E=C-g,M=S-v,O=P-g,T=A-v;return E*E+M*M>O*O+T*T&&(C=P,S=A),{cx:C,cy:S,x01:-l,y01:-f,x11:C*(i/x-1),y11:S*(i/x-1)}}function Linear(e){this._context=e}Linear.prototype={areaStart:function areaStart(){this._line=0},areaEnd:function areaEnd(){this._line=NaN},lineStart:function lineStart(){this._point=0},lineEnd:function lineEnd(){(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function point(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;default:this._context.lineTo(e,t)}}};var Mr=function(e){return new Linear(e)};function point_x(e){return e[0]}function point_y(e){return e[1]}var Or=function(){var e=point_x,t=point_y,n=vr(!0),r=null,i=Mr,a=null;function line(o){var u,c,s,l=o.length,f=!1;for(null==r&&(a=i(s=gr())),u=0;u<=l;++u)!(u=l;--f)u.point(g[f],v[f]);u.lineEnd(),u.areaEnd()}y&&(g[s]=+e(h,s,c),v[s]=+n(h,s,c),u.point(t?+t(h,s,c):g[s],r?+r(h,s,c):v[s]))}if(d)return u=null,d+""||null}function arealine(){return Or().defined(i).curve(o).context(a)}return area.x=function(n){return arguments.length?(e="function"==typeof n?n:vr(+n),t=null,area):e},area.x0=function(t){return arguments.length?(e="function"==typeof t?t:vr(+t),area):e},area.x1=function(e){return arguments.length?(t=null==e?null:"function"==typeof e?e:vr(+e),area):t},area.y=function(e){return arguments.length?(n="function"==typeof e?e:vr(+e),r=null,area):n},area.y0=function(e){return arguments.length?(n="function"==typeof e?e:vr(+e),area):n},area.y1=function(e){return arguments.length?(r=null==e?null:"function"==typeof e?e:vr(+e),area):r},area.lineX0=area.lineY0=function(){return arealine().x(e).y(n)},area.lineY1=function(){return arealine().x(e).y(r)},area.lineX1=function(){return arealine().x(t).y(n)},area.defined=function(e){return arguments.length?(i="function"==typeof e?e:vr(!!e),area):i},area.curve=function(e){return arguments.length?(o=e,null!=a&&(u=o(a)),area):o},area.context=function(e){return arguments.length?(null==e?a=u=null:u=o(a=e),area):a},area},Fr=function(e,t){return te?1:t>=e?0:NaN},Nr=function(e){return e};curveRadial(Mr);function Radial(e){this._curve=e}function curveRadial(e){function radial(t){return new Radial(e(t))}return radial._curve=e,radial}Radial.prototype={areaStart:function areaStart(){this._curve.areaStart()},areaEnd:function areaEnd(){this._curve.areaEnd()},lineStart:function lineStart(){this._curve.lineStart()},lineEnd:function lineEnd(){this._curve.lineEnd()},point:function point(e,t){this._curve.point(t*Math.sin(e),t*-Math.cos(e))}};var jr=Array.prototype.slice;var Ir={draw:function draw(e,t){var n=Math.sqrt(t/Pr);e.moveTo(n,0),e.arc(0,0,n,0,Er)}},Dr={draw:function draw(e,t){var n=Math.sqrt(t/5)/2;e.moveTo(-3*n,-n),e.lineTo(-n,-n),e.lineTo(-n,-3*n),e.lineTo(n,-3*n),e.lineTo(n,-n),e.lineTo(3*n,-n),e.lineTo(3*n,n),e.lineTo(n,n),e.lineTo(n,3*n),e.lineTo(-n,3*n),e.lineTo(-n,n),e.lineTo(-3*n,n),e.closePath()}},Lr=Math.sqrt(1/3),Rr=2*Lr,Br={draw:function draw(e,t){var n=Math.sqrt(t/Rr),r=n*Lr;e.moveTo(0,-n),e.lineTo(r,0),e.lineTo(0,n),e.lineTo(-r,0),e.closePath()}},zr=Math.sin(Pr/10)/Math.sin(7*Pr/10),Hr=Math.sin(Er/10)*zr,Vr=-Math.cos(Er/10)*zr,Ur={draw:function draw(e,t){var n=Math.sqrt(.8908130915292852*t),r=Hr*n,i=Vr*n;e.moveTo(0,-n),e.lineTo(r,i);for(var a=1;a<5;++a){var o=Er*a/5,u=Math.cos(o),c=Math.sin(o);e.lineTo(c*n,-u*n),e.lineTo(u*r-c*i,c*r+u*i)}e.closePath()}},Wr={draw:function draw(e,t){var n=Math.sqrt(t),r=-n/2;e.rect(r,r,n,n)}},qr=Math.sqrt(3),Gr={draw:function draw(e,t){var n=-Math.sqrt(t/(3*qr));e.moveTo(0,2*n),e.lineTo(-qr*n,-n),e.lineTo(qr*n,-n),e.closePath()}},Yr=Math.sqrt(3)/2,Xr=1/Math.sqrt(12),Kr=3*(Xr/2+1),$r={draw:function draw(e,t){var n=Math.sqrt(t/Kr),r=n/2,i=n*Xr,a=r,o=n*Xr+n,u=-a,c=o;e.moveTo(r,i),e.lineTo(a,o),e.lineTo(u,c),e.lineTo(-.5*r-Yr*i,Yr*r+-.5*i),e.lineTo(-.5*a-Yr*o,Yr*a+-.5*o),e.lineTo(-.5*u-Yr*c,Yr*u+-.5*c),e.lineTo(-.5*r+Yr*i,-.5*i-Yr*r),e.lineTo(-.5*a+Yr*o,-.5*o-Yr*a),e.lineTo(-.5*u+Yr*c,-.5*c-Yr*u),e.closePath()}},Qr=function(){};function _point(e,t,n){e._context.bezierCurveTo((2*e._x0+e._x1)/3,(2*e._y0+e._y1)/3,(e._x0+2*e._x1)/3,(e._y0+2*e._y1)/3,(e._x0+4*e._x1+t)/6,(e._y0+4*e._y1+n)/6)}function Basis(e){this._context=e}Basis.prototype={areaStart:function areaStart(){this._line=0},areaEnd:function areaEnd(){this._line=NaN},lineStart:function lineStart(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function lineEnd(){switch(this._point){case 3:_point(this,this._x1,this._y1);case 2:this._context.lineTo(this._x1,this._y1)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function point(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;break;case 2:this._point=3,this._context.lineTo((5*this._x0+this._x1)/6,(5*this._y0+this._y1)/6);default:_point(this,e,t)}this._x0=this._x1,this._x1=e,this._y0=this._y1,this._y1=t}};function BasisClosed(e){this._context=e}BasisClosed.prototype={areaStart:Qr,areaEnd:Qr,lineStart:function lineStart(){this._x0=this._x1=this._x2=this._x3=this._x4=this._y0=this._y1=this._y2=this._y3=this._y4=NaN,this._point=0},lineEnd:function lineEnd(){switch(this._point){case 1:this._context.moveTo(this._x2,this._y2),this._context.closePath();break;case 2:this._context.moveTo((this._x2+2*this._x3)/3,(this._y2+2*this._y3)/3),this._context.lineTo((this._x3+2*this._x2)/3,(this._y3+2*this._y2)/3),this._context.closePath();break;case 3:this.point(this._x2,this._y2),this.point(this._x3,this._y3),this.point(this._x4,this._y4)}},point:function point(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._x2=e,this._y2=t;break;case 1:this._point=2,this._x3=e,this._y3=t;break;case 2:this._point=3,this._x4=e,this._y4=t,this._context.moveTo((this._x0+4*this._x1+e)/6,(this._y0+4*this._y1+t)/6);break;default:_point(this,e,t)}this._x0=this._x1,this._x1=e,this._y0=this._y1,this._y1=t}};function BasisOpen(e){this._context=e}BasisOpen.prototype={areaStart:function areaStart(){this._line=0},areaEnd:function areaEnd(){this._line=NaN},lineStart:function lineStart(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function lineEnd(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function point(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3;var n=(this._x0+4*this._x1+e)/6,r=(this._y0+4*this._y1+t)/6;this._line?this._context.lineTo(n,r):this._context.moveTo(n,r);break;case 3:this._point=4;default:_point(this,e,t)}this._x0=this._x1,this._x1=e,this._y0=this._y1,this._y1=t}};function Bundle(e,t){this._basis=new Basis(e),this._beta=t}Bundle.prototype={lineStart:function lineStart(){this._x=[],this._y=[],this._basis.lineStart()},lineEnd:function lineEnd(){var e=this._x,t=this._y,n=e.length-1;if(n>0)for(var r,i=e[0],a=t[0],o=e[n]-i,u=t[n]-a,c=-1;++c<=n;)r=c/n,this._basis.point(this._beta*e[c]+(1-this._beta)*(i+r*o),this._beta*t[c]+(1-this._beta)*(a+r*u));this._x=this._y=null,this._basis.lineEnd()},point:function point(e,t){this._x.push(+e),this._y.push(+t)}};(function custom(e){function bundle(t){return 1===e?new Basis(t):new Bundle(t,e)}return bundle.beta=function(e){return custom(+e)},bundle})(.85);function cardinal_point(e,t,n){e._context.bezierCurveTo(e._x1+e._k*(e._x2-e._x0),e._y1+e._k*(e._y2-e._y0),e._x2+e._k*(e._x1-t),e._y2+e._k*(e._y1-n),e._x2,e._y2)}function Cardinal(e,t){this._context=e,this._k=(1-t)/6}Cardinal.prototype={areaStart:function areaStart(){this._line=0},areaEnd:function areaEnd(){this._line=NaN},lineStart:function lineStart(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},lineEnd:function lineEnd(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:cardinal_point(this,this._x1,this._y1)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function point(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2,this._x1=e,this._y1=t;break;case 2:this._point=3;default:cardinal_point(this,e,t)}this._x0=this._x1,this._x1=this._x2,this._x2=e,this._y0=this._y1,this._y1=this._y2,this._y2=t}};(function custom(e){function cardinal(t){return new Cardinal(t,e)}return cardinal.tension=function(e){return custom(+e)},cardinal})(0);function CardinalClosed(e,t){this._context=e,this._k=(1-t)/6}CardinalClosed.prototype={areaStart:Qr,areaEnd:Qr,lineStart:function lineStart(){this._x0=this._x1=this._x2=this._x3=this._x4=this._x5=this._y0=this._y1=this._y2=this._y3=this._y4=this._y5=NaN,this._point=0},lineEnd:function lineEnd(){switch(this._point){case 1:this._context.moveTo(this._x3,this._y3),this._context.closePath();break;case 2:this._context.lineTo(this._x3,this._y3),this._context.closePath();break;case 3:this.point(this._x3,this._y3),this.point(this._x4,this._y4),this.point(this._x5,this._y5)}},point:function point(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._x3=e,this._y3=t;break;case 1:this._point=2,this._context.moveTo(this._x4=e,this._y4=t);break;case 2:this._point=3,this._x5=e,this._y5=t;break;default:cardinal_point(this,e,t)}this._x0=this._x1,this._x1=this._x2,this._x2=e,this._y0=this._y1,this._y1=this._y2,this._y2=t}};(function custom(e){function cardinal(t){return new CardinalClosed(t,e)}return cardinal.tension=function(e){return custom(+e)},cardinal})(0);function CardinalOpen(e,t){this._context=e,this._k=(1-t)/6}CardinalOpen.prototype={areaStart:function areaStart(){this._line=0},areaEnd:function areaEnd(){this._line=NaN},lineStart:function lineStart(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},lineEnd:function lineEnd(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function point(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3,this._line?this._context.lineTo(this._x2,this._y2):this._context.moveTo(this._x2,this._y2);break;case 3:this._point=4;default:cardinal_point(this,e,t)}this._x0=this._x1,this._x1=this._x2,this._x2=e,this._y0=this._y1,this._y1=this._y2,this._y2=t}};(function custom(e){function cardinal(t){return new CardinalOpen(t,e)}return cardinal.tension=function(e){return custom(+e)},cardinal})(0);function catmullRom_point(e,t,n){var r=e._x1,i=e._y1,a=e._x2,o=e._y2;if(e._l01_a>Sr){var u=2*e._l01_2a+3*e._l01_a*e._l12_a+e._l12_2a,c=3*e._l01_a*(e._l01_a+e._l12_a);r=(r*u-e._x0*e._l12_2a+e._x2*e._l01_2a)/c,i=(i*u-e._y0*e._l12_2a+e._y2*e._l01_2a)/c}if(e._l23_a>Sr){var s=2*e._l23_2a+3*e._l23_a*e._l12_a+e._l12_2a,l=3*e._l23_a*(e._l23_a+e._l12_a);a=(a*s+e._x1*e._l23_2a-t*e._l12_2a)/l,o=(o*s+e._y1*e._l23_2a-n*e._l12_2a)/l}e._context.bezierCurveTo(r,i,a,o,e._x2,e._y2)}function CatmullRom(e,t){this._context=e,this._alpha=t}CatmullRom.prototype={areaStart:function areaStart(){this._line=0},areaEnd:function areaEnd(){this._line=NaN},lineStart:function lineStart(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function lineEnd(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:this.point(this._x2,this._y2)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function point(e,t){if(e=+e,t=+t,this._point){var n=this._x2-e,r=this._y2-t;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(n*n+r*r,this._alpha))}switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;break;case 2:this._point=3;default:catmullRom_point(this,e,t)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=e,this._y0=this._y1,this._y1=this._y2,this._y2=t}};var Zr=function custom(e){function catmullRom(t){return e?new CatmullRom(t,e):new Cardinal(t,0)}return catmullRom.alpha=function(e){return custom(+e)},catmullRom}(.5);function CatmullRomClosed(e,t){this._context=e,this._alpha=t}CatmullRomClosed.prototype={areaStart:Qr,areaEnd:Qr,lineStart:function lineStart(){this._x0=this._x1=this._x2=this._x3=this._x4=this._x5=this._y0=this._y1=this._y2=this._y3=this._y4=this._y5=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function lineEnd(){switch(this._point){case 1:this._context.moveTo(this._x3,this._y3),this._context.closePath();break;case 2:this._context.lineTo(this._x3,this._y3),this._context.closePath();break;case 3:this.point(this._x3,this._y3),this.point(this._x4,this._y4),this.point(this._x5,this._y5)}},point:function point(e,t){if(e=+e,t=+t,this._point){var n=this._x2-e,r=this._y2-t;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(n*n+r*r,this._alpha))}switch(this._point){case 0:this._point=1,this._x3=e,this._y3=t;break;case 1:this._point=2,this._context.moveTo(this._x4=e,this._y4=t);break;case 2:this._point=3,this._x5=e,this._y5=t;break;default:catmullRom_point(this,e,t)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=e,this._y0=this._y1,this._y1=this._y2,this._y2=t}};(function custom(e){function catmullRom(t){return e?new CatmullRomClosed(t,e):new CardinalClosed(t,0)}return catmullRom.alpha=function(e){return custom(+e)},catmullRom})(.5);function CatmullRomOpen(e,t){this._context=e,this._alpha=t}CatmullRomOpen.prototype={areaStart:function areaStart(){this._line=0},areaEnd:function areaEnd(){this._line=NaN},lineStart:function lineStart(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function lineEnd(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function point(e,t){if(e=+e,t=+t,this._point){var n=this._x2-e,r=this._y2-t;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(n*n+r*r,this._alpha))}switch(this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3,this._line?this._context.lineTo(this._x2,this._y2):this._context.moveTo(this._x2,this._y2);break;case 3:this._point=4;default:catmullRom_point(this,e,t)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=e,this._y0=this._y1,this._y1=this._y2,this._y2=t}};(function custom(e){function catmullRom(t){return e?new CatmullRomOpen(t,e):new CardinalOpen(t,0)}return catmullRom.alpha=function(e){return custom(+e)},catmullRom})(.5);function LinearClosed(e){this._context=e}LinearClosed.prototype={areaStart:Qr,areaEnd:Qr,lineStart:function lineStart(){this._point=0},lineEnd:function lineEnd(){this._point&&this._context.closePath()},point:function point(e,t){e=+e,t=+t,this._point?this._context.lineTo(e,t):(this._point=1,this._context.moveTo(e,t))}};function monotone_sign(e){return e<0?-1:1}function slope3(e,t,n){var r=e._x1-e._x0,i=t-e._x1,a=(e._y1-e._y0)/(r||i<0&&-0),o=(n-e._y1)/(i||r<0&&-0),u=(a*i+o*r)/(r+i);return(monotone_sign(a)+monotone_sign(o))*Math.min(Math.abs(a),Math.abs(o),.5*Math.abs(u))||0}function slope2(e,t){var n=e._x1-e._x0;return n?(3*(e._y1-e._y0)/n-t)/2:t}function monotone_point(e,t,n){var r=e._x0,i=e._y0,a=e._x1,o=e._y1,u=(a-r)/3;e._context.bezierCurveTo(r+u,i+u*t,a-u,o-u*n,a,o)}function MonotoneX(e){this._context=e}function MonotoneY(e){this._context=new ReflectContext(e)}function ReflectContext(e){this._context=e}function Natural(e){this._context=e}function controlPoints(e){var t,n,r=e.length-1,i=new Array(r),a=new Array(r),o=new Array(r);for(i[0]=0,a[0]=2,o[0]=e[0]+2*e[1],t=1;t=0;--t)i[t]=(o[t]-i[t+1])/a[t];for(a[r-1]=(e[r]+i[r-1])/2,t=0;t=0&&(this._t=1-this._t,this._line=1-this._line)},point:function point(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;default:if(this._t<=0)this._context.lineTo(this._x,t),this._context.lineTo(e,t);else{var n=this._x*(1-this._t)+e*this._t;this._context.lineTo(n,this._y),this._context.lineTo(n,t)}}this._x=e,this._y=t}};var Jr=function(e){return new Step(e,.5)};function stepBefore(e){return new Step(e,0)}function stepAfter(e){return new Step(e,1)}var ei=function(e,t){if((i=e.length)>1)for(var n,r,i,a=1,o=e[t[0]],u=o.length;a=0;)n[t]=t;return n};function stackValue(e,t){return e[t]}var ni=function(e){var t=e.map(ascending_sum);return ti(e).sort(function(e,n){return t[e]-t[n]})};function ascending_sum(e){for(var t,n=0,r=-1,i=e.length;++r0)){if(a/=h,h<0){if(a0){if(a>f)return;a>l&&(l=a)}if(a=r-c,h||!(a<0)){if(a/=h,h<0){if(a>f)return;a>l&&(l=a)}else if(h>0){if(a0)){if(a/=d,d<0){if(a0){if(a>f)return;a>l&&(l=a)}if(a=i-s,d||!(a<0)){if(a/=d,d<0){if(a>f)return;a>l&&(l=a)}else if(d>0){if(a0||f<1)||(l>0&&(e[0]=[c+l*h,s+l*d]),f<1&&(e[1]=[c+f*h,s+f*d]),!0)}}}}}function connectEdge(e,t,n,r,i){var a=e[1];if(a)return!0;var o,u,c=e[0],s=e.left,l=e.right,f=s[0],h=s[1],d=l[0],p=l[1],y=(f+d)/2,g=(h+p)/2;if(p===h){if(y=r)return;if(f>d){if(c){if(c[1]>=i)return}else c=[y,n];a=[y,i]}else{if(c){if(c[1]1)if(f>d){if(c){if(c[1]>=i)return}else c=[(n-u)/o,n];a=[(i-u)/o,i]}else{if(c){if(c[1]=r)return}else c=[t,o*t+u];a=[r,o*r+u]}else{if(c){if(c[0]=-Ai)){var d=c*c+s*s,p=l*l+f*f,y=(f*d-s*p)/h,g=(c*p-l*d)/h,v=_i.pop()||new function Circle(){RedBlackNode(this),this.x=this.y=this.arc=this.site=this.cy=null};v.arc=e,v.site=i,v.x=y+o,v.y=(v.cy=g+u)+Math.sqrt(y*y+g*g),e.circle=v;for(var m=null,b=Ci._;b;)if(v.yPi)u=u.L;else{if(!((i=a-rightBreakPoint(u,o))>Pi)){r>-Pi?(t=u.P,n=u):i>-Pi?(t=u,n=u.N):t=n=u;break}if(!u.R){t=u;break}u=u.R}!function createCell(e){return ki[e.index]={site:e,halfedges:[]}}(e);var c=createBeach(e);if(wi.insert(t,c),t||n){if(t===n)return detachCircle(t),n=createBeach(t.site),wi.insert(c,n),c.edge=n.edge=createEdge(t.site,c.site),attachCircle(t),void attachCircle(n);if(n){detachCircle(t),detachCircle(n);var s=t.site,l=s[0],f=s[1],h=e[0]-l,d=e[1]-f,p=n.site,y=p[0]-l,g=p[1]-f,v=2*(h*g-d*y),m=h*h+d*d,b=y*y+g*g,_=[(g*m-d*b)/v+l,(h*b-y*m)/v+f];setEdgeEnd(n.edge,s,p,_),c.edge=createEdge(s,e,null,_),n.edge=createEdge(e,p,null,_),attachCircle(t),attachCircle(n)}else c.edge=createEdge(t.site,c.site)}}function leftBreakPoint(e,t){var n=e.site,r=n[0],i=n[1],a=i-t;if(!a)return r;var o=e.P;if(!o)return-1/0;var u=(n=o.site)[0],c=n[1],s=c-t;if(!s)return u;var l=u-r,f=1/a-1/s,h=l/s;return f?(-h+Math.sqrt(h*h-2*f*(l*l/(-2*s)-c+s/2+i-a/2)))/f+r:(r+u)/2}function rightBreakPoint(e,t){var n=e.N;if(n)return leftBreakPoint(n,t);var r=e.site;return r[1]===t?r[0]:1/0}var wi,ki,Ci,Si,Pi=1e-6,Ai=1e-12;function triangleArea(e,t,n){return(e[0]-n[0])*(t[1]-e[1])-(e[0]-t[0])*(n[1]-e[1])}function lexicographic(e,t){return t[1]-e[1]||t[0]-e[0]}function Diagram(e,t){var n,r,i,a=e.sort(lexicographic).pop();for(Si=[],ki=new Array(e.length),wi=new mi,Ci=new mi;;)if(i=bi,a&&(!i||a[1]Pi||Math.abs(i[0][1]-i[1][1])>Pi)||delete Si[a]}(o,u,c,s),function clipCells(e,t,n,r){var i,a,o,u,c,s,l,f,h,d,p,y,g=ki.length,v=!0;for(i=0;iPi||Math.abs(y-h)>Pi)&&(c.splice(u,0,Si.push(createBorderEdge(o,d,Math.abs(p-e)Pi?[e,Math.abs(f-e)Pi?[Math.abs(h-r)Pi?[n,Math.abs(f-n)Pi?[Math.abs(h-t)=u)return null;var c=e-i.site[0],s=t-i.site[1],l=c*c+s*s;do{i=a.cells[r=o],o=null,i.halfedges.forEach(function(n){var r=a.edges[n],u=r.left;if(u!==i.site&&u||(u=r.right)){var c=e-u[0],s=t-u[1],f=c*c+s*s;ft?0===i?i:"left"===n?i-1:i:i===e.length-1?i:"left"===n?i:i+1},Gi=(requestAnimationFrame,cancelAnimationFrame,function getQualifiedClassName(e,t,n){return[n+"-"+(e=e.replace(/^\.*/,"")),n+"-"+e+"-"+t]}),Yi=function defaultValue(e,t){return void 0===e||"object"===(void 0===e?"undefined":Ii(e))&&!e?t:e},Xi=function objectIterator(e,t){for(var n in e)Object.hasOwnProperty.call(e,n)&&t(n,e)},Ki=function(){function Voronoi(e){_classCallCheck(this,Voronoi),this._voronoi=Oi().x(function(e){return e.x}).y(function(e){return e.y}),this.data(e)}return ji(Voronoi,[{key:"data",value:function data(e){return e&&(this._voronoiFn=this._voronoi(e)),this}},{key:"find",value:function find(e,t,n){return this._voronoiFn.find(e,t,n)}}]),Voronoi}(),$i=function(){function Store(e){_classCallCheck(this,Store),this.model=Fi.a.create(e),this._listeners=[]}return ji(Store,[{key:"serialize",value:function serialize(){return this.model.serialize()}},{key:"commit",value:function commit(e,t){this.model.prop(e,t)}},{key:"registerChangeListener",value:function registerChangeListener(e,t,n){var r=e;Array.isArray(e)||(r=[e]);var i=this.model.next(r,t,n);return this._listeners.push(i),this}},{key:"registerImmediateListener",value:function registerImmediateListener(e,t,n){var r=e;Array.isArray(e)||(r=[e]);var i=this.model.on(r,t,n);return this._listeners.push(i),this}},{key:"get",value:function get(e){return this.model.prop(e)}},{key:"computed",value:function computed(e,t){return this.model.calculatedProp(e,t)}},{key:"unsubscribeAll",value:function unsubscribeAll(){this._listeners.forEach(function(e){return e()})}}]),Store}(),Qi=function intSanitizer(e){var t=e.toString().match(/(\d+)(px)*/g);return t?parseInt(t[0],10):null},Zi=function transactor(e,t,n){var r=void 0,i=n&&n instanceof Fi.a?n:Fi.a.create({}),a=function _loop(n){({}).hasOwnProperty.call(t,n)&&(r=t[n],i.prop(n)||i.append(_defineProperty({},n,r.value)),e[n]=function(t,r,a){return function(){for(var o=arguments.length,u=Array(o),c=0;c=0;n--)if(e[n]!==t[n])return!1;return!0}(t,n):"Object"===e?Object.is(t,n):t===n}},ta={INTERFACE_IMPL:"Method not implemented"},na=function mergeRecursive(e,t){for(var n in t)Di(e[n])&&Di(t[n])?mergeRecursive(e[n],t[n]):t[n]instanceof Object&&t[n].constructor===Object?(e[n]={},mergeRecursive(e[n],t[n])):e[n]=t[n];return e},ra=function interpolator(){return Pe},ia=function numberInterpolator(){return ge},aa=function piecewiseInterpolator(){return piecewise_piecewise};var oa=function rgbToHsv(e,t,n){var r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:1;e=+e,t=+t,n=+n,r=+r,e/=255,t/=255,n/=255;var i=Math.max(e,t,n),a=Math.min(e,t,n),o=void 0,u=void 0,c=(i+a)/2;if(i===a)o=u=0;else{var s=i-a;switch(u=c>.5?s/(2-i-a):s/(i+a),i){case e:o=(t-n)/s+(t=i[0]&&r<=i[1]})},{saveChild:!1,mode:n})},sa=function getDataModelFromIdentifiers(e,t,n){var r=void 0;if(t instanceof Array){var i=e.getFieldsConfig(),a=t.slice(1,t.length);if(t instanceof Function)r=t(e,{},!1);else if(t instanceof Array&&t[0].length){var o=t[0].filter(function(e){return e in i});r=e.select(function(e){var t=!0;return o.forEach(function(n,r){var i=e[n].valueOf(),o=a.findIndex(function(e){return e[r]===i});t=t&&-1!==o}),t},{saveChild:!1,mode:n})}}else r=ca(e,t,n);return r},la=function registerListeners(e,t){var n=t(e);for(var r in n)if({}.hasOwnProperty.call(n,r)){var i=n[r],a=i.type,o=i.props,u=i.listener;e.store()[a](o,u)}},fa=function isValidValue(e){return!isNaN(e)&&e!==-1/0&&e!==1/0},ha=function getObjProp(e){for(var t=arguments.length,n=Array(t>1?t-1:0),r=1;r1)for(var n,r,i,a,o,u,c=0,s=e[t[0]].length;c=0?(r[0]=a,r[1]=a+=i):i<0?(r[1]=o,r[0]=o+=i):r[0]=a}),_defineProperty(Mi,"none",ei),_defineProperty(Mi,"expand",function(e,t){if((r=e.length)>0){for(var n,r,i,a=0,o=e[0].length;a0&&(r=(n=e[t[0]]).length)>0){for(var n,r,i,a=0,o=1;o0&&(d+=f);for(null!=t?p.sort(function(e,n){return t(y[e],y[n])}):null!=n&&p.sort(function(e,t){return n(o[e],o[t])}),u=0,s=d?(v-h*b)/d:0;u0?f*s:0)+b,y[c]={data:o[c],index:u,value:f,startAngle:g,endAngle:l,padAngle:m};return y}return pie.value=function(t){return arguments.length?(e="function"==typeof t?t:vr(+t),pie):e},pie.sortValues=function(e){return arguments.length?(t=e,n=null,pie):t},pie.sort=function(e){return arguments.length?(n=e,t=null,pie):n},pie.startAngle=function(e){return arguments.length?(r="function"==typeof e?e:vr(+e),pie):r},pie.endAngle=function(e){return arguments.length?(i="function"==typeof e?e:vr(+e),pie):i},pie.padAngle=function(e){return arguments.length?(a="function"==typeof e?e:vr(+e),pie):a},pie},arc:function(){var e=arcInnerRadius,t=arcOuterRadius,n=vr(0),r=null,i=arcStartAngle,a=arcEndAngle,o=arcPadAngle,u=null;function arc(){var c,s,l=+e.apply(this,arguments),f=+t.apply(this,arguments),h=i.apply(this,arguments)-Ar,d=a.apply(this,arguments)-Ar,p=mr(d-h),y=d>h;if(u||(u=c=gr()),fSr)if(p>Er-Sr)u.moveTo(f*_r(h),f*kr(h)),u.arc(0,0,f,h,d,!y),l>Sr&&(u.moveTo(l*_r(d),l*kr(d)),u.arc(0,0,l,d,h,y));else{var g,v,m=h,b=d,_=h,x=d,w=p,k=p,C=o.apply(this,arguments)/2,S=C>Sr&&(r?+r.apply(this,arguments):Cr(l*l+f*f)),P=wr(mr(f-l)/2,+n.apply(this,arguments)),A=P,E=P;if(S>Sr){var M=asin(S/l*kr(C)),O=asin(S/f*kr(C));(w-=2*M)>Sr?(_+=M*=y?1:-1,x-=M):(w=0,_=x=(h+d)/2),(k-=2*O)>Sr?(m+=O*=y?1:-1,b-=O):(k=0,m=b=(h+d)/2)}var T=f*_r(m),F=f*kr(m),N=l*_r(x),j=l*kr(x);if(P>Sr){var I=f*_r(b),D=f*kr(b),L=l*_r(_),R=l*kr(_);if(pSr?function intersect(e,t,n,r,i,a,o,u){var c=n-e,s=r-t,l=o-i,f=u-a,h=(l*(t-a)-f*(e-i))/(f*c-l*s);return[e+h*c,t+h*s]}(T,F,L,R,I,D,N,j):[N,j],z=T-B[0],H=F-B[1],V=I-B[0],U=D-B[1],W=1/kr(function acos(e){return e>1?0:e<-1?Pr:Math.acos(e)}((z*V+H*U)/(Cr(z*z+H*H)*Cr(V*V+U*U)))/2),q=Cr(B[0]*B[0]+B[1]*B[1]);A=wr(P,(l-q)/(W-1)),E=wr(P,(f-q)/(W+1))}}k>Sr?E>Sr?(g=cornerTangents(L,R,T,F,f,E,y),v=cornerTangents(I,D,N,j,f,E,y),u.moveTo(g.cx+g.x01,g.cy+g.y01),ESr&&w>Sr?A>Sr?(g=cornerTangents(N,j,I,D,l,-A,y),v=cornerTangents(T,F,L,R,l,-A,y),u.lineTo(g.cx+g.x01,g.cy+g.y01),A=0&&"xmlns"!==(t=e.slice(0,n))&&(e=e.slice(n+1)),ka.hasOwnProperty(t)?{space:ka[t],local:e}:e};var Sa=function(e){var t=Ca(e);return(t.local?function creatorFixed(e){return function(){return this.ownerDocument.createElementNS(e.space,e.local)}}:function creatorInherit(e){return function(){var t=this.ownerDocument,n=this.namespaceURI;return n===wa&&t.documentElement.namespaceURI===wa?t.createElement(e):t.createElementNS(n,e)}})(t)};function selector_none(){}var Pa=function(e){return null==e?selector_none:function(){return this.querySelector(e)}};function selectorAll_empty(){return[]}var Aa=function(e){return null==e?selectorAll_empty:function(){return this.querySelectorAll(e)}},Ea=function matcher(e){return function(){return this.matches(e)}};if("undefined"!=typeof document){var Ma=document.documentElement;if(!Ma.matches){var Oa=Ma.webkitMatchesSelector||Ma.msMatchesSelector||Ma.mozMatchesSelector||Ma.oMatchesSelector;Ea=function matcher(e){return function(){return Oa.call(this,e)}}}}var Ta=Ea,Fa=function(e){return new Array(e.length)};function EnterNode(e,t){this.ownerDocument=e.ownerDocument,this.namespaceURI=e.namespaceURI,this._next=null,this._parent=e,this.__data__=t}EnterNode.prototype={constructor:EnterNode,appendChild:function appendChild(e){return this._parent.insertBefore(e,this._next)},insertBefore:function insertBefore(e,t){return this._parent.insertBefore(e,t)},querySelector:function querySelector(e){return this._parent.querySelector(e)},querySelectorAll:function querySelectorAll(e){return this._parent.querySelectorAll(e)}};var Na="$";function bindIndex(e,t,n,r,i,a){for(var o,u=0,c=t.length,s=a.length;ut?1:e>=t?0:NaN}var ja=function(e){return e.ownerDocument&&e.ownerDocument.defaultView||e.document&&e||e.defaultView};function styleValue(e,t){return e.style.getPropertyValue(t)||ja(e).getComputedStyle(e,null).getPropertyValue(t)}function classArray(e){return e.trim().split(/^|\s+/)}function classList(e){return e.classList||new ClassList(e)}function ClassList(e){this._node=e,this._names=classArray(e.getAttribute("class")||"")}function classedAdd(e,t){for(var n=classList(e),r=-1,i=t.length;++r=0&&(this._names.splice(t,1),this._node.setAttribute("class",this._names.join(" ")))},contains:function contains(e){return this._names.indexOf(e)>=0}};function textRemove(){this.textContent=""}function htmlRemove(){this.innerHTML=""}function raise_raise(){this.nextSibling&&this.parentNode.appendChild(this)}function lower(){this.previousSibling&&this.parentNode.insertBefore(this,this.parentNode.firstChild)}function constantNull(){return null}function remove_remove(){var e=this.parentNode;e&&e.removeChild(this)}function selection_cloneShallow(){return this.parentNode.insertBefore(this.cloneNode(!1),this.nextSibling)}function selection_cloneDeep(){return this.parentNode.insertBefore(this.cloneNode(!0),this.nextSibling)}var Ia={},Da=null;"undefined"!=typeof document&&("onmouseenter"in document.documentElement||(Ia={mouseenter:"mouseover",mouseleave:"mouseout"}));function filterContextListener(e,t,n){return e=contextListener(e,t,n),function(t){var n=t.relatedTarget;n&&(n===this||8&n.compareDocumentPosition(this))||e.call(this,t)}}function contextListener(e,t,n){return function(r){var i=Da;Da=r;try{e.call(this,this.__data__,t,n)}finally{Da=i}}}function onRemove(e){return function(){var t=this.__on;if(t){for(var n,r=0,i=-1,a=t.length;r=_&&(_=b+1);!(m=g[_])&&++_=0;)(r=i[a])&&(o&&o!==r.nextSibling&&o.parentNode.insertBefore(r,o),o=r);return this},sort:function(e){function compareNode(t,n){return t&&n?e(t.__data__,n.__data__):!t-!n}e||(e=sort_ascending);for(var t=this._groups,n=t.length,r=new Array(n),i=0;i1?this.each((null==t?function styleRemove(e){return function(){this.style.removeProperty(e)}}:"function"==typeof t?function styleFunction(e,t,n){return function(){var r=t.apply(this,arguments);null==r?this.style.removeProperty(e):this.style.setProperty(e,r,n)}}:function styleConstant(e,t,n){return function(){this.style.setProperty(e,t,n)}})(e,t,null==n?"":n)):styleValue(this.node(),e)},property:function(e,t){return arguments.length>1?this.each((null==t?function propertyRemove(e){return function(){delete this[e]}}:"function"==typeof t?function propertyFunction(e,t){return function(){var n=t.apply(this,arguments);null==n?delete this[e]:this[e]=n}}:function propertyConstant(e,t){return function(){this[e]=t}})(e,t)):this.node()[e]},classed:function(e,t){var n=classArray(e+"");if(arguments.length<2){for(var r=classList(this.node()),i=-1,a=n.length;++i=0&&(t=e.slice(n+1),e=e.slice(0,n)),{type:e,name:t}})}(e+""),o=a.length;if(!(arguments.length<2)){for(u=t?onAdd:onRemove,null==n&&(n=!1),r=0;r=0&&(n=e.slice(r+1),e=e.slice(0,r)),e&&!t.hasOwnProperty(e))throw new Error("unknown type: "+e);return{type:e,name:n}})}(e+"",r),a=-1,o=i.length;if(!(arguments.length<2)){if(null!=t&&"function"!=typeof t)throw new Error("invalid callback: "+t);for(;++a0)for(var n,r,i=new Array(n),a=0;af}c.mouse("drag")}function mouseupped(){Ba(Da.view).on("mousemove.drag mouseup.drag",null),function yesdrag(e,t){var n=e.document.documentElement,r=Ba(e).on("dragstart.drag",null);t&&(r.on("click.drag",Ya,!0),setTimeout(function(){r.on("click.drag",null)},0)),"onselectstart"in n?r.on("selectstart.drag",null):(n.style.MozUserSelect=n.__noselect,delete n.__noselect)}(Da.view,n),Ya(),c.mouse("end")}function touchstarted(){if(i.apply(this,arguments)){var e,t,n=Da.changedTouches,r=a.apply(this,arguments),o=n.length;for(e=0;e=0&&t._call.call(null,e),t=t._next;--eo}()}finally{eo=0,function nap(){var e,t,n=$a,r=1/0;for(;n;)n._call?(r>n._time&&(r=n._time),e=n,n=n._next):(t=n._next,n._next=null,n=e?e._next=t:$a=t);Qa=e,sleep(r)}(),ao=0}}function poke(){var e=uo.now(),t=e-io;t>ro&&(oo-=t,io=e)}function sleep(e){eo||(to&&(to=clearTimeout(to)),e-ao>24?(e<1/0&&(to=setTimeout(wake,e-uo.now()-oo)),no&&(no=clearInterval(no))):(no||(io=uo.now(),no=setInterval(poke,ro)),eo=1,co(wake)))}Timer.prototype=timer.prototype={constructor:Timer,restart:function restart(e,t,n){if("function"!=typeof e)throw new TypeError("callback is not a function");n=(null==n?now():+n)+(null==t?0:+t),this._next||Qa===this||(Qa?Qa._next=this:$a=this,Qa=this),this._call=e,this._time=n,sleep()},stop:function stop(){this._call&&(this._call=null,this._time=1/0,sleep())}};var so=function(e,t,n){var r=new Timer;return t=null==t?0:+t,r.restart(function(n){r.stop(),e(n+t)},t,n),r},lo=Ga("start","end","interrupt"),fo=[],ho=0,po=1,yo=2,go=3,vo=4,mo=5,bo=6,_o=function(e,t,n,r,i,a){var o=e.__transition;if(o){if(n in o)return}else e.__transition={};!function schedule_create(e,t,n){var r,i=e.__transition;function start(a){var o,u,c,s;if(n.state!==po)return stop();for(o in i)if((s=i[o]).name===n.name){if(s.state===go)return so(start);s.state===vo?(s.state=bo,s.timer.stop(),s.on.call("interrupt",e,e.__data__,s.index,s.group),delete i[o]):+oho)throw new Error("too late; already scheduled");return n}function schedule_set(e,t){var n=schedule_get(e,t);if(n.state>yo)throw new Error("too late; already started");return n}function schedule_get(e,t){var n=e.__transition;if(!n||!(n=n[t]))throw new Error("transition not found");return n}function tweenValue(e,t,n){var r=e._id;return e.each(function(){var e=schedule_set(this,r);(e.value||(e.value={}))[t]=n.apply(this,arguments)}),function(e){return schedule_get(e,r).value[t]}}var xo=function(e,t){var n;return("number"==typeof t?ge:t instanceof color_color?pe:(n=color_color(t))?(t=n,pe):Ce)(e,t)};var wo=Ra.prototype.constructor;var ko=0;function Transition(e,t,n,r){this._groups=e,this._parents=t,this._name=n,this._id=r}function newId(){return++ko}var Co=Ra.prototype;Transition.prototype=function src_transition_transition(e){return Ra().transition(e)}.prototype={constructor:Transition,select:function(e){var t=this._name,n=this._id;"function"!=typeof e&&(e=Pa(e));for(var r=this._groups,i=r.length,a=new Array(i),o=0;o=0&&(e=e.slice(0,t)),!e||"start"===e})}(t)?init:schedule_set;return function(){var o=a(this,e),u=o.on;u!==r&&(i=(r=u).copy()).on(t,n),o.on=i}}(n,e,t))},attr:function(e,t){var n=Ca(e),r="transform"===n?Fe:xo;return this.attrTween(e,"function"==typeof t?(n.local?function attr_attrFunctionNS(e,t,n){var r,i,a;return function(){var o,u=n(this);if(null!=u)return(o=this.getAttributeNS(e.space,e.local))===u?null:o===r&&u===i?a:a=t(r=o,i=u);this.removeAttributeNS(e.space,e.local)}}:function attr_attrFunction(e,t,n){var r,i,a;return function(){var o,u=n(this);if(null!=u)return(o=this.getAttribute(e))===u?null:o===r&&u===i?a:a=t(r=o,i=u);this.removeAttribute(e)}})(n,r,tweenValue(this,"attr."+e,t)):null==t?(n.local?function attr_attrRemoveNS(e){return function(){this.removeAttributeNS(e.space,e.local)}}:function attr_attrRemove(e){return function(){this.removeAttribute(e)}})(n):(n.local?function attr_attrConstantNS(e,t,n){var r,i;return function(){var a=this.getAttributeNS(e.space,e.local);return a===n?null:a===r?i:i=t(r=a,n)}}:function attr_attrConstant(e,t,n){var r,i;return function(){var a=this.getAttribute(e);return a===n?null:a===r?i:i=t(r=a,n)}})(n,r,t+""))},attrTween:function(e,t){var n="attr."+e;if(arguments.length<2)return(n=this.tween(n))&&n._value;if(null==t)return this.tween(n,null);if("function"!=typeof t)throw new Error;var r=Ca(e);return this.tween(n,(r.local?function attrTweenNS(e,t){function tween(){var n=this,r=t.apply(n,arguments);return r&&function(t){n.setAttributeNS(e.space,e.local,r(t))}}return tween._value=t,tween}:function attrTween(e,t){function tween(){var n=this,r=t.apply(n,arguments);return r&&function(t){n.setAttribute(e,r(t))}}return tween._value=t,tween})(r,t))},style:function(e,t,n){var r="transform"==(e+="")?Te:xo;return null==t?this.styleTween(e,function style_styleRemove(e,t){var n,r,i;return function(){var a=styleValue(this,e),o=(this.style.removeProperty(e),styleValue(this,e));return a===o?null:a===n&&o===r?i:i=t(n=a,r=o)}}(e,r)).on("end.style."+e,function styleRemoveEnd(e){return function(){this.style.removeProperty(e)}}(e)):this.styleTween(e,"function"==typeof t?function style_styleFunction(e,t,n){var r,i,a;return function(){var o=styleValue(this,e),u=n(this);return null==u&&(this.style.removeProperty(e),u=styleValue(this,e)),o===u?null:o===r&&u===i?a:a=t(r=o,i=u)}}(e,r,tweenValue(this,"style."+e,t)):function style_styleConstant(e,t,n){var r,i;return function(){var a=styleValue(this,e);return a===n?null:a===r?i:i=t(r=a,n)}}(e,r,t+""),n)},styleTween:function(e,t,n){var r="style."+(e+="");if(arguments.length<2)return(r=this.tween(r))&&r._value;if(null==t)return this.tween(r,null);if("function"!=typeof t)throw new Error;return this.tween(r,function styleTween(e,t,n){function tween(){var r=this,i=t.apply(r,arguments);return i&&function(t){r.style.setProperty(e,i(t),n)}}return tween._value=t,tween}(e,t,null==n?"":n))},text:function(e){return this.tween("text","function"==typeof e?function text_textFunction(e){return function(){var t=e(this);this.textContent=null==t?"":t}}(tweenValue(this,"text",e)):function text_textConstant(e){return function(){this.textContent=e}}(null==e?"":e+""))},remove:function(){return this.on("end.remove",function removeFunction(e){return function(){var t=this.parentNode;for(var n in this.__transition)if(+n!==e)return;t&&t.removeChild(this)}}(this._id))},tween:function(e,t){var n=this._id;if(e+="",arguments.length<2){for(var r,i=schedule_get(this.node(),n).tween,a=0,o=i.length;ayo&&n.state4&&void 0!==arguments[4]?arguments[4]:{},a=arguments[5];(e instanceof HTMLElement||e instanceof SVGElement)&&(e=Ao(e));var o=r?r[0]:null,u=null,c=null,s=null,l=null,f=null,h=void 0;o?"#"===o?(u="id",c=r):(u="class",c="."===r[0]?r:"."+r):(c=t,h=!0),s=e.selectAll(c),h&&(s=s.filter(function(){return this.parentNode===e.node()})),l=(s=s.data(n,a)).enter().append(t||"div"),i.enter&&l.each(function(){for(var e=arguments.length,t=Array(e),n=0;nthis._data.length)for(var a=this._data.length;a0&&void 0!==arguments[0]?arguments[0]:{};this._lifeCycles=e,this._releasePromisesFromCache()}},{key:"_resetTargetPromise",value:function _resetTargetPromise(e){var t=this;setTimeout(function(){t._notifiers[e]=Xo,t._promises.set(e,t._makeNotifierPromise(e))},0)}}]),LifeCycleManager}(),Qo="drag",Zo="hover",Jo="selectiondrag",eu="click",tu="longtouch",nu="touchdrag",ru="*",iu=1,au=-1,ou=0,uu=2,cu=-2,su=function(){function defineProperties(e,t){for(var n=0;n0?(e[n]===uu&&t.entrySet[0].push(n),e[n]===iu&&t.entrySet[1].push(n)):e[n]<0&&(e[n]===cu&&t.exitSet[0].push(n),e[n]===au&&t.exitSet[1].push(n)),t.completeSet.push(n);return["entrySet","exitSet"].forEach(function(e){t[e]=t[e].map(function(e){return e.map(Number)})}),t.completeSet=t.completeSet.map(Number),t}},{key:"reset",value:function reset(e){var t=this._set;if(e)e.forEach(function(e){t[e]=ou});else{var n=this._lockedSelection;for(var r in t)r in n||(t[r]=ou)}return this._resetted=!0,this}},{key:"getEntrySet",value:function getEntrySet(){var e=this._set,t=[];for(var n in e)e[n]===iu&&t.push(n);return t}},{key:"getExistingEntrySet",value:function getExistingEntrySet(e){var t=this._set;return e.filter(function(e){return t[e]===iu||t[e]===uu})}},{key:"getExistingExitSet",value:function getExistingExitSet(e){var t=this._set;return e.filter(function(e){return t[e]===au||t[e]===cu})}},{key:"getOldEntry",value:function getOldEntry(){var e=this._set,t=[];for(var n in e)e[n]===uu&&t.push(n);return t}},{key:"getOldExit",value:function getOldExit(){var e=this._set,t=[];for(var n in e)e[n]===cu&&t.push(n);return t}},{key:"getExitSet",value:function getExitSet(){var e=this._set,t=[];for(var n in e)e[n]===au&&t.push(n);return t}},{key:"getCompleteSet",value:function getCompleteSet(){var e=this._set,t=[];for(var n in e)t.push(n);return t}},{key:"getCompleteSetCount",value:function getCompleteSetCount(){return this._completeSetCount}},{key:"resetted",value:function resetted(){return this._resetted}},{key:"toggle",value:function toggle(){var e=this._set;for(var t in e)e[t]===iu?e[t]=au:e[t]===au?e[t]=iu:e[t]===uu?e[t]=cu:e[t]=uu;return this}}]),SelectionSet}();function helper_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t3&&void 0!==arguments[3]?arguments[3]:{},i=this.sideEffects(),a=i[e],o=!1;r.filter&&r.filter(a)&&(o=!0),!o&&i[e].apply(t,n,r)}},{key:"registerPropagationBehaviourMap",value:function registerPropagationBehaviourMap(e){return this._propagationBehaviourMap=Object.assign(this._propagationBehaviourMap,e||{}),this}},{key:"dispatchBehaviour",value:function dispatchBehaviour(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=void 0===n.propagate||n.propagate,i=this._actions.behavioural[e],a=function getSideEffects(e,t){var n=[];for(var r in t){var i=r.split(",");i.some(function(t){return t===e})&&n.push({effects:t[r],behaviours:i})}return n}(e,this._behaviourEffectMap);if(this._propagationInf=n,i){var o=i.dispatch(t),u=this.getPropagationSelectionSet(o);this._entryExitSet[e]=u;var c=this.shouldApplySideEffects(r);if(r&&this.propagate(e,t,o.find(function(e){return e.sourceSelectionSet}),a),c){var s=this.getApplicableSideEffects(a,t,n);this.applySideEffects(s,u,t)}}return this}},{key:"getPropagationSelectionSet",value:function getPropagationSelectionSet(e){return e.find(function(e){return!e.sourceSelectionSet})}},{key:"shouldApplySideEffects",value:function shouldApplySideEffects(){return!0}},{key:"changeBehaviourStateOnPropagation",value:function changeBehaviourStateOnPropagation(e,t){return t instanceof Function?this._sourceBehaviours[e]=t:this._sourceBehaviours[e]=function(){return t},this}},{key:"changeSideEffectStateOnPropagation",value:function changeSideEffectStateOnPropagation(e,t){t instanceof Function?this._sourceSideEffects[e]=t:this._sourceSideEffects[e]=function(){return t}}},{key:"propagate",value:function propagate(){return this}},{key:"sideEffects",value:function sideEffects(){return arguments.length?(this._sideEffects=arguments.length<=0?void 0:arguments[0],this):this._sideEffects}},{key:"enableSideEffects",value:function enableSideEffects(e){return fu(this,e,!0),this}},{key:"disableSideEffects",value:function disableSideEffects(e){return fu(this,e,!1),this}},{key:"dissociateBehaviour",value:function dissociateBehaviour(e,t){var n=this._actionBehaviourMap;for(var r in n)if(r===t){var i=n[r];i.behaviours=i.behaviours.filter(function(t){return t!==e})}return this}},{key:"dissociateSideEffect",value:function dissociateSideEffect(e,t){var n=this._behaviourEffectMap;return n[t]=n[t].filter(function(t){return(t.name||t)!==e}),this}},{key:"getApplicableSideEffects",value:function getApplicableSideEffects(e){return e}},{key:"attachPropagationListener",value:function attachPropagationListener(e){return e.unsubscribe("propagation"),e.on("propagation",this.onDataModelPropagation()),this}},{key:"onDataModelPropagation",value:function onDataModelPropagation(){var e=this;return function(t){var n=t.payload,r=n.action;e.dispatchBehaviour(r,n,{propagate:!1})}}},{key:"createSelectionSet",value:function createSelectionSet(e,t){var n=t||this._actions.behavioural,r=this._selectionSet,i=this._volatileSelectionSet;for(var a in n)({}).hasOwnProperty.call(n,a)&&(r[a]=new lu(e),i[a]=new lu(e,!0));return this._volatileSelectionSet=i,this.selectionSet(r),this}},{key:"selectionSet",value:function selectionSet(){return arguments.length?(this._selectionSet=arguments.length<=0?void 0:arguments[0],this):this._selectionSet}},{key:"initializeSideEffects",value:function initializeSideEffects(){var e=this._sideEffectDefinitions;return this.sideEffects(function initializeSideEffects(e,t){var n=e._sideEffects;return(t=t instanceof Array?t:Object.values(t)).forEach(function(t){var r=n[t.formalName()];n[t.formalName()]=r||new t(e)}),n}(this,e)),this}},{key:"registerPhysicalActions",value:function registerPhysicalActions(e){var t=function initializePhysicalActions(e,t){var n={};for(var r in t)({}).hasOwnProperty.call(r,t)||(n[r]=t[r](e));return n}(this,e);return Object.assign(this._actions.physical,t),this}},{key:"propagateWith",value:function propagateWith(e,t){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],r=this._actions.behavioural;if(t.length){if(e===ru)for(var i in r)this._propagationFields[i]={fields:t,append:n};else this._propagationFields[e]={fields:t,append:n};return this}return this._propagationFields}},{key:"mapActionsAndBehaviour",value:function mapActionsAndBehaviour(){var e=this._actions.physical,t=this._actionBehaviourMap,n=this._mappedActions;for(var r in t)if(!{}.hasOwnProperty.call(r,t)){var i=void 0,a=t[r];i=a.target;var o=a.touch;i||(i=this.context.getDefaultTargetContainer());var u=Ro()?!0===o||void 0===o:!o,c=r+"-"+a.behaviours.join();u&&!n[c]&&this.bindActionWithBehaviour(e[r],i,a.behaviours),n[c]=!0}return this}},{key:"registerPhysicalBehaviouralMap",value:function registerPhysicalBehaviouralMap(e){return Object.assign(this._actionBehaviourMap,e),this}},{key:"bindActionWithBehaviour",value:function bindActionWithBehaviour(e,t,n){var r=this;return"string"==typeof t&&(t=[t]),t.forEach(function(t){var i=r.context.mount(),a=t.node instanceof Function?t:Ao(i).selectAll(t);n.length&&!a.empty()&&(a instanceof Array?a.forEach(function(t){e(Ao(t),n)}):e(a,n))}),this}},{key:"getPropagationInf",value:function getPropagationInf(){return this._propagationInf}},{key:"getAddSetFromCriteria",value:function getAddSetFromCriteria(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=this.context,r=t.data?t.data:n.getDataModelFromIdentifiers(e,"all"),i=n.fields().x||[],a=n.fields().y||[],o=i.every(function(e){return e.type()===ir.FieldType.MEASURE}),u=a.every(function(e){return e.type()===ir.FieldType.MEASURE});return{model:r,uids:null===e?null:t.data?function filterPropagationModel(e,t,n){var r=t.getData(),i=r.data,a=r.schema,o=void 0;if(a.length){var u=e.getFieldsConfig();o=e.select(function(e){return i.some(function(t){return a.every(function(r,i){return!(n||r.name in u&&u[r.name].def.type!==ir.FieldType.MEASURE)||t[i]===e[r.name].valueOf()})})},{saveChild:!1})}else o=t;return o}(this.getFullData(),t.data[0],o&&u).getData().uids:r[0].getData().uids}}},{key:"getSelectionSets",value:function getSelectionSets(e){var t=this.context.id(),n=(this._propagationInf||{}).sourceId,r=[];return n!==t&&(r=[this._volatileSelectionSet[e]]),n&&r.push(this.selectionSet()[e]),r}},{key:"getFullData",value:function getFullData(){return this.context.data()}},{key:"resetted",value:function resetted(){return this._resetted}},{key:"getEntryExitSet",value:function getEntryExitSet(e){return this._entryExitSet[e]}}]),Firebolt}(),mu=function(){function defineProperties(e,t){for(var n=0;n1&&void 0!==arguments[1]?arguments[1]:{},n=e.sourceIdentifiers;return n?n.getSchema().map(function(e){return e.name}):t instanceof Array?t[0]:Object.keys(t||{})}(u,n.criteria),sourceSelectionSet:!0===e._volatile}}},{key:"enable",value:function enable(){this._enabled=!0}},{key:"disable",value:function disable(){this._enabled=!1}},{key:"isEnabled",value:function isEnabled(){return this._enabled}}],[{key:"mutates",value:function mutates(){return!1}}]),GenericBehaviour}(),_u=function(){function defineProperties(e,t){for(var n=0;nk[0]?k:w,S=C===k?w:k;C[1]100&&Math.abs(i.x-a.x)<=5)){a.x=Math.max(0,Math.min(a.x,o.width)),a.y=Math.max(0,Math.min(a.y,o.height));var s=Ru(n.context.getSourceInfo(),{startPos:i,endPos:a,snap:!0},n.context.data().getFieldsConfig());s.dragEnd=!0,t.forEach(function(e){return n.dispatchBehaviour(e,s)})}}))},zu=function hover(e){return function(t,n){var r=function dispatchBehaviour(t){var r=Io(),i=e.context,a=i.config().interaction.tooltip.mode,o=jo(i.getDrawingContext().svgContainer,r),u=i.getNearestPoint(o.x,o.y,{getAllPoints:"consolidated"===a||"fragmented"===a,data:t,event:r}),c={criteria:u?u.id:null,showInPosition:u.showInPosition,target:u.target,position:o,mode:a};n.forEach(function(t){return e.dispatchBehaviour(t,c)}),r.stopPropagation()};t.on("mouseover",r).on("mousemove",r).on("mouseout",function(){n.forEach(function(t){return e.dispatchBehaviour(t,{criteria:null})})})}},Hu=function generatePayloadFromEvent(e,t,n){var r=n.context,i=jo(r.getDrawingContext().svgContainer,t.touches?t.touches[0]:t),a=r.getNearestPoint(i.x,i.y,{data:e,event:t});return{criteria:a?a.id:null,showInPosition:a.showInPosition,target:a.target,position:i}},Vu=function click(e){return function(t,n){t.on("click",function dispatchBehaviour(t){var r=Io(),i=Hu(t,r,e);n.forEach(function(t){return e.dispatchBehaviour(t,i)}),r.stopPropagation()})}};function physical_defineProperty(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var Uu=(physical_defineProperty(Du={},Qo,function drag(e){return function(t,n){Bu(t,n,e)}}),physical_defineProperty(Du,Zo,zu),physical_defineProperty(Du,eu,Vu),physical_defineProperty(Du,tu,function longtouch(e){return function(t,n){var r=void 0,i=void 0;i=!1,r=Io(),t.on("touchstart",function(t){r=Io(),i=!1,setTimeout(function(){i?n.forEach(function(t){return e.dispatchBehaviour(t,{criteria:null})}):function dispatchBehaviour(t){var i=Hu(t,r,e);n.forEach(function(t){return e.dispatchBehaviour(t,i)}),r.stopPropagation()}(t)},100)}).on("touchend",function(){i=!0})}}),physical_defineProperty(Du,nu,function touchdrag(e){return function(t,n){Bu(t,n,e,!0)}}),Du),Wu=function(){function defineProperties(e,t){for(var n=0;n1&&void 0!==arguments[1]&&arguments[1];var t=arguments[2],n=arguments[3];this.firebolt.context.layers().forEach(function(r){return!1!==r.config().interactive&&r.applyInteractionStyle(t,e.uids,n)})}}]),SurrogateSideEffect}(),Xu=function(){function defineProperties(e,t){for(var n=0;n=0&&l<=t&&c>=0&&s<=n){var f=Ru(a.getSourceInfo(),{startPos:{x:u,y:c},endPos:{x:l,y:s}},a.data().getFieldsConfig());o(f)}}).on("end",function(){var e=i.width,t=i.height,n=Math.min(e-r.width,Math.max(r.x,0)),u=Math.min(t-r.height,Math.max(r.y,0)),c=u+r.height,s=n+r.width;if(n>=0&&s<=e&&u>=0&&c<=t){var l=Ru(a.getSourceInfo(),{startPos:{x:n,y:u},endPos:{x:s,y:c},snap:!0},a.data().getFieldsConfig());l.dragEnd=!0,o(l)}}))}}(c)(Ao(this),["brush"],x)}).merge(w).each(function(e){var t=Ao(this);for(var n in b&&(t=t.transition().duration(b.duration)),e)({}).hasOwnProperty.call(e,n)&&fa(e[n])&&t.attr(n,e[n])}),C=Gi(u.defClassName,this._id,d);return k.classed(C.join(" "),!0),k.classed(u.className,!0),this}},{key:"hide",value:function hide(e){Qu(this,e.sideEffectGroup,!1)}},{key:"show",value:function show(e){Qu(this,e.sideEffectGroup,!0)}}],[{key:"defaultConfig",value:function defaultConfig(){return{defClassName:"selection-box-group",className:"",classPrefix:"muze",box:{defClassName:"selection-box",className:""},transition:{duration:200}}}},{key:"formalName",value:function formalName(){return"selectionBox"}}]),SelectionBox}(),ec={position:"absolute",width:0,height:0},tc={classPrefix:"muze",defClassName:"tooltip-box",connectorClassName:"tooltip-connectors",className:"",row:{margin:0},content:{spacing:5,iconContainerSize:10,iconScale:1,iconShape:"circle",iconColor:"#ff0000",rowMargin:"0px",margin:10,separator:":",className:"tooltip-content-container",parentClassName:"tooltip-content-parent-container"},arrow:{size:10,disabled:!1,defClassName:"tooltip-arrow",className:"",color:"rgba(195,195,195,0.85)"}},nc=function getArrowPos(e,t,n,r){var i=void 0,a=n.x,o=n.y,u=n.boxHeight,c=n.boxWidth,s=r.arrow.disabled?0:r.arrow.size;if("left"===e||"right"===e){var l=0,f=u/2,h=t.y+t.height,d=o+u;t.y>o?(l=t.y-o,f=(h>=d?d-t.y:t.height)/2):d>h&&(f=Math.abs(o-(t.y+t.height))/2),i=l+f-s/2}else{var p=0,y=c/2,g=t.x+t.width,v=a+c;t.x>a?(p=t.x-a,y=(g>=v?v-t.x:t.width)/2):v>g&&(y=Math.abs(a-(t.x+t.width))/2),i=p+y-s/2}return i},rc=function placeArrow(e,t,n){var r=e._tooltipArrow,i=e._tooltipBackground,a=e._config,o=a.classPrefix,u=a.arrow,c=Gi(u.defClassName,e._id,a.classPrefix);r.style("display","block"),r.attr("class",""+c.join(" ")),"left"===t||"right"===t?(r.style("top",n+"px"),r.style("left",""),i.style("top",n+"px"),i.style("left","")):("bottom"===t?r.style("top","100%"):r.style("top","-"+u.size+"px"),r.style("left",n+"px"),"bottom"===t?i.style("top","100%"):i.style("top","-"+(u.size+3)+"px"),i.style("left",n+"px")),r.classed(o+"-tooltip-arrow",!0),r.classed(o+"-tooltip-arrow-"+e._arrowOrientation,!1),r.classed(o+"-tooltip-arrow-"+t,!0),i.classed(o+"-tooltip-background-arrow",!0),i.classed(o+"-tooltip-background-arrow-"+e._arrowOrientation,!1),i.classed(o+"-tooltip-background-arrow-"+t,!0)};n(11);function strategy_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t1&&void 0!==arguments[1]?arguments[1]:{},n=arguments[2],r=[],i=e.getData(),a=i.data,o=i.schema,u=t.formatters,c=t.separator,s=e.getFieldsConfig(),l=e.getFieldspace(),f=l.fieldsObj(),h=n.dimensionMeasureMap,d=n.axes,p=n.detailFields||[],y=o.filter(function(e){return e.type===ir.FieldType.DIMENSION}),g=o.filter(function(e){return e.type===ir.FieldType.MEASURE}),v=o.find(function(e){return-1!==p.indexOf(e.name)}),m=a.length,b=function getRowContent(e,n){var r=void 0,i=void 0,o=void 0,p=[],y=s[e].index,g=s[e].def.subtype===ir.DimensionSubtype.TEMPORAL?f[e].getMinDiff():0,v=u&&u[e]||oc(n,function(e){return e});if(null!==r){var b=n===ir.FieldType.MEASURE?a.map(function(e){return e[y]}):[].concat(strategy_toConsumableArray(new Set(a.map(function(e){return e[y]}))));b=b.filter(function(e){return""!==e});var _=d.color[0],x=d.shape[0],w=d.size[0],k=(_||x||w)&&m>1&&n!==ir.FieldType.MEASURE;b.forEach(function(n,u){var f=void 0,d=h[e];if(d&&d.length&&m>1){f=n;var y={value:""};k&&(y={type:"icon",color:_.getColor(n),shape:x.getShape(n),size:w.getSize(n)*t.iconScale}),d.length>1?(p.push([y,""+f]),d.forEach(function(e){o=s[e].index,r=a[u][o],i=oc("measure",l.fields[o]._ref.numberFormat())(r,g),p.push([{value:""+e+c,style:{"margin-left":t.margin+"px}"},className:t.classPrefix+"-tooltip-key"},{value:""+i,className:t.classPrefix+"-tooltip-value"}])})):(o=s[d[0]].index,r=a[u][o],i=oc("measure",l.fields[o]._ref.numberFormat())(r,g),p.push([y,{value:""+f+c,className:t.classPrefix+"-tooltip-key"},{value:""+i,className:t.classPrefix+"-tooltip-value"}]))}else f=e,i=v(r=n,g),p.push([{value:""+f+c,className:t.classPrefix+"-tooltip-key"},{value:""+i,className:t.classPrefix+"-tooltip-value"}])})}return p},_="keyValue";if(m>1&&v)r=function getTabularData(e,t,n,r){var i=[];return i.push(t.map(function(e){return e.name})),e.forEach(function(e){var a=[];t.forEach(function(t,i){var o=t.subtype===ir.DimensionSubtype.TEMPORAL?r[t.name]:0,u=t.type===ir.FieldType.MEASURE&&n.fields[i]._ref.numberFormat(),c=oc(t.subtype||t.type,u)(e[i],o);a.push(c)}),i.push(a)}),i}(a,o,l,n.timeDiffs),_="table";else{y.forEach(function(e){var t=e.subtype?e.subtype:e.type;r=[].concat(strategy_toConsumableArray(r),strategy_toConsumableArray(b(e.name,t)))});var x=[].concat(strategy_toConsumableArray(new(Function.prototype.bind.apply(Set,[null].concat(strategy_toConsumableArray(Object.values(h)))))));(m>1?g.filter(function(e){return-1===x.indexOf(e.name)}):g).forEach(function(e){var t=e.subtype?e.subtype:e.type;r=[].concat(strategy_toConsumableArray(r),strategy_toConsumableArray(b(e.name,t)))})}return{content:r,displayFormat:_}},cc={keyValue:function keyValue(e,t,n){return uc(e,t,n)}},sc="keyValue",lc=function(){function defineProperties(e,t){for(var n=0;n0?(this._config=na(this._config,arguments.length<=0?void 0:arguments[0]),this):this._config}},{key:"update",value:function update(e){return this._model=e.model,this._strategy=void 0!==e.strategy?e.strategy:sc,this._formatter=e.formatter,this}},{key:"context",value:function context(e){return this._context=e,this}},{key:"render",value:function render(e){var t=void 0,n=this._config,r=n.iconContainerSize,i=this._formatter,a=n.rowMargin,o=this._model;if(this._mount=e,(t=o instanceof Array?o:i instanceof Function?i(this._model,this._context):cc[this._strategy](this._model,this.config(),this._context))instanceof Function)e.html(t());else{var u=t,c="default";Di(t)&&(u=t.content,c=t.displayFormat);var s=Eo(e,"div",[c],n.classPrefix+"-tooltip-content",{},function(e){return e});if("table"===c){var l=Eo(s,"table",[1],n.classPrefix+"-tooltip-table"),f=Eo(l,"tbody",[1],n.classPrefix+"-tooltip-table-tbody"),h=Eo(f,"tr",u,n.classPrefix+"-tooltip-table-row");h.each(function(e,t){Ao(this).classed(n.classPrefix+"-tooltip-table-row-"+t,!0)}),Eo(h,"td",function(e){return e},n.classPrefix+"-tooltip-table-cell").each(function(e){Ao(this).html(e)})}else{var d=Eo(s,"div",u,n.classPrefix+"-tooltip-row"),p=Eo(d,"span",function(e){return e},n.classPrefix+"-tooltip-content");p.attr("class",n.classPrefix+"-tooltip-content"),Fo(d,{margin:a}),Fo(p,{display:"inline-block","margin-right":n.spacing+"px"}),p.each(function(e){var t=Ao(this);if(t.html(""),e instanceof Object)if("icon"===e.type){var n=Eo(t,"svg",[1]),i=Eo(n,"path",[1]),a=e.shape instanceof Function?e.shape:pa(e.shape);To(n,{x:0,y:0,width:r,height:r}),To(i,{d:a.size(e.size)(),transform:"translate("+r/2+", "+r/2+")"}),Fo(i,{fill:e.color}),Fo(n,{width:r+"px",height:r+"px"})}else t.html(e.value),e.className&&t.classed(e.className,!0),Fo(t,e.style);else t.html(e)})}}return this}},{key:"clear",value:function clear(){return this._model=null,this}}],[{key:"defaultConfig",value:function defaultConfig(){var e=tc.content;return e.classPrefix=tc.classPrefix,e}}]),Content}(),hc=function(){function defineProperties(e,t){for(var n=0;n0){var e=na({},this.constructor.defaultConfig());return this._config=na(e,arguments.length<=0?void 0:arguments[0]),this}return this._config}},{key:"addClass",value:function addClass(e){return this._tooltipContainer.classed(e,!0),this}},{key:"context",value:function context(){return arguments.length?(this._context=arguments.length<=0?void 0:arguments[0],this):this._context}},{key:"content",value:function content(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=this.config(),i=r.classPrefix,a=r.content.className,o=r.formatter,u=n.className||i+"-"+a+"-"+e,content=this._contents[e]=this._contents[e]||new fc,c=Eo(this._contentContainer,"div",[n.order],u);c.attr("class",i+"-"+a+" "+u),function reorderContainers(e,t){e.selectAll(t).sort(function(e,t){return e-t})}(this._contentContainer,"."+i+"-"+a);var s=r.content;return n.classPrefix=this._config.classPrefix,content.config(s),null===t?(content.clear(),c.remove(),delete this._contents[e]):(content.update({model:t,formatter:n.formatter||o}),content.context(this._context),content.render(c)),Object.keys(this._contents).length||this.hide(),this}},{key:"getContents",value:function getContents(){return Object.values(this._contents)}},{key:"position",value:function position(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(!Object.keys(this._contents).length)return this.hide(),this;this.show();var r=this._target,i=n.repositionArrow;if(r&&i){var a=this._tooltipContainer.node(),o=this._config,u=o.arrow.disabled,c=u?0:o.arrow.size,s=this._arrowOrientation,l="left"===s||"right"===s?t+a.offsetHeight-cr.y+r.height:e+a.offsetWidth-cr.x+r.width;if(!u)if(l){var f=void 0;this._tooltipArrow.style("display","none"),this._tooltipBackground.style("display","none"),this._tooltipConnectorContainer.style("display","block");var h=this._tooltipConnectorContainer.selectAll("path").data([1]),d=h.enter().append("path");"left"===s?f="M "+e+" "+(t+a.offsetHeight/2)+" L "+(r.x+r.width)+" "+(r.y+r.height/2):"right"===s?f="M "+(e+a.offsetWidth)+" "+(t+a.offsetHeight/2)+" L "+r.x+" "+(r.y+r.height/2):"bottom"===s&&(f="M "+(e+a.offsetWidth/2)+" "+(t+a.offsetHeight)+" L "+(r.x+r.width/2)+" "+r.y),d.merge(h).attr("d",f).style("display","block")}else{var p=nc(s,r,{x:e,y:t,boxHeight:a.offsetHeight,boxWidth:a.offsetWidth},this._config);rc(this,this._arrowOrientation,p),this._tooltipConnectorContainer.style("display","none")}}var y=this._offset||{x:0,y:0};return this._tooltipContainer.style("left",y.x+e+"px").style("top",y.y+t+"px"),this}},{key:"positionRelativeTo",value:function positionRelativeTo(e){var t=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=void 0,i=n.orientation;if(this.show(),!e)return this.hide(),this;var a=this._extent,o=this._tooltipContainer.node();this._tooltipContainer.style("top","0px").style("left","0px");var u=o.offsetWidth+2,c=o.offsetHeight+2,s=this._config,l=this._offset,f=s.arrow.disabled,h=f?0:s.arrow.size,d=void 0===n.draw||n.draw,p=e.y,y=e.x+e.width+l.x,g=a.width-y,v=e.x+l.x-a.x,m=p>c+h,b=g>=u+h,_=v>=u+h;return this._target=e,i||(i=m?"vertical":b||_?"horizontal":"vertical"),"horizontal"===i?r=function positionHorizontal(){var n=void 0,r=e.x+e.width,i=e.y;return b?(n="left",r+=h):_?(r=e.x-u,n="right",r-=h):(n="left",r+=h),e.height2&&void 0!==arguments[2]?arguments[2]:{},r=0,i=0,a=e.mergedEnter.model,o=this.firebolt.context,u=this.drawingContext();if(a.isEmpty()||null===t.criteria||!1===e.isSourceFieldPresent)return this.hide(n,null),this;var c=this._tooltips,s=this.config(),l={width:u.width,height:u.height},f=t.showInPosition,h=s.padding,d=[],p="fragmented"===s.mode,y=o.getSourceInfo(),g=y.fields,v=!!(!!g.x[0]&&g.x[0].type()===ir.FieldType.DIMENSION),m=t.position,b=[],_={},x=a.getData().uids;p?d.push.apply(d,function tooltip_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);tu.height:i>u.width)break;b.push({x:z.x,y:z.y,width:H.width,height:H.height,tooltip:R})}}for(var V in c)if(!_[V]){var U=c[V];U.content(t.action,null),U.getContents().length||(U.remove(),delete c[V])}return p&&(!function spaceOutBoxes(e,t,n){var r=void 0,i=void 0,a=void 0,o=void 0,u=void 0,c=e.length,s=function spaceOutIfOverlap(e,t,u){a=e.x,o=e.width,r=e.y,i=e.height;var c=r+i,s=a+o;n?(u?rt.y)&&(t.y=u?e.y-t.height-5:c+5):(u?at.x)&&(t.x=u?e.x-t.width-5:s+5)};for(e.sort(function(e,t){return n?e.y-t.y:e.x-t.x}),u=0,u=0;ut.height||e[u].x+e[u].width>t.width)for(n?e[u].y-=e[u].height+e[u].y-t.height:e[u].x-=e[u].width+e[u].x-t.width,u=c-1;u>0;u--)s(e[u],e[u-1],!0)}(b,l,v),b.forEach(function(e){return e.tooltip.position(e.x,e.y,{repositionArrow:!0})})),this}},{key:"hide",value:function hide(e){var t=this._tooltips;for(var n in t)if({}.hasOwnProperty.call(t,n)){var r=e.strategy||this._strategy;t[n].content(r,null),t[n].hide()}}}],[{key:"defaultConfig",value:function defaultConfig(){return{padding:5,offset:{x:0,y:0}}}},{key:"formalName",value:function formalName(){return"tooltip"}}]),Tooltip}(),vc=(n(15),function(){function defineProperties(e,t){for(var n=0;n2&&void 0!==arguments[2]?arguments[2]:{},r=this._strategies[n.strategy||this._strategy];return!1!==e.isSourceFieldPresent&&r(e,this,n.strategy||this._strategy),this}}],[{key:"formalName",value:function formalName(){return"highlighter"}},{key:"target",value:function target(){return"visual-unit"}}]),PlotHighlighter}(),wc=function(){function defineProperties(e,t){for(var n=0;n67.5&&v<=90||(r+=2*y),u=p,u=90===l?y:270===l?-y:0,o===Yc?(u=0===t&&c&&s===ds?u+u/2:u,Ao(this).attr("transform","translate("+(-u+f)+" \n "+(-r-f)+") rotate("+l+")")):(u=0===t&&c&&s===ds?u-u/2:u,Ao(this).attr("transform","translate("+(u-f)+" \n "+(r+f)+") rotate("+l+")"))}),t},Os=function changeTickOrientation(e,t,n){var r=t._smartTicks,i=t.config(),a=t.dependencies().labelManager,o=i.labels,u=i.orientation,c=o.rotation,s=o.smartTicks,l=e.selectAll(".tick text");if(l.selectAll("tspan").remove(),0===c||!1!==s||"top"!==u&&"bottom"!==u)if(0===c&&!1===s)l.attr("transform","");else{l.attr("y",0).attr("x",0).text(""),Eo(l,"tspan",function(e,t){return r[t].lines},"smart-text").attr("dy","0").style("opacity","0").transition().duration(1e3).attr("dy",function(e,t){return"bottom"===u||0!==t?r[t].oriTextHeight:-r[t].oriTextHeight*(r[t].lines.length-1)-n}).style("opacity",1).attr("x",0).text(function(e){return e})}else Ms(t,l,a,i);return l},Ts=function setFixedBaseline(e){e.config().fixedBaseline&&e.setFixedBaseline()},Fs=function setAxisNamePos(e,t,n){var r=n.axisNameHeight,i=n.yOffset,a=n.labelOffset,o=n.availableSpace;switch(t){case Xc:e.attr("transform","translate("+-(o.width-r)+","+(i+a)+")rotate(-90)");break;case Kc:e.attr("transform","translate("+(o.width-r)+","+(i+a)+")rotate(90)");break;case Yc:e.attr("transform","translate("+o.width/2+","+(-o.height+r)+")");break;case Gc:e.attr("transform","translate("+o.width/2+","+(o.height-r/2)+")")}return e};function cartesian_axis_helper_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);tt.length&&(t=p,r=e.smartTicks()?e.smartTicks()[s]:{},n=o[s]),d}),n=h.getOriSize(t),{largestLabel:t,largestLabelDim:n,axisTickLabels:i,allLabelLengths:o,smartTick:r}},js=function setOffset(e){var t=0,n=0,r=e.logicalSpace(),i=e.config(),a=i.orientation,o=i.xOffset,u=i.yOffset;a===Xc&&(t=void 0===o?r.width:o),a===Yc&&(n=void 0===u?r.height:u),e.config({xOffset:t,yOffset:n})},Is=function adjustRange(e,t,n,r){var i=function getAxisOffset(e,t,n){var r=Math.abs(t[1]-t[0])/(n[1]-n[0])*e,i=t[1]-t[0],a=i/r;return(i-i/(a+1)*a)/2}(e,t,n);return r===Yc||r===Gc?(t[0]+=i,t[1]-=i):(t[0]-=i,t[1]+=i),t},Ds=function registerChangeListeners(e){return e.store().model.next(["domain","range","mount","config"],function(){for(var t=arguments.length,n=Array(t),r=0;r0&&e.length*(t+this._minTickDistance.width)>i&&this.config({labels:{rotation:-90}})}return this}},{key:"adjustRange",value:function adjustRange(){return this}},{key:"getScaleValue",value:function getScaleValue(e){if(null!==e&&void 0!==e)return this.scale()(e)}},{key:"getTickSize",value:function getTickSize(){return this.axis().tickSize()}},{key:"getAxisDimensions",value:function getAxisDimensions(){return this.axisDimensions(function computeAxisDimensions(e){var t={},n=e.config(),r=n.name,i=n.labels,a=n.tickValues,o=(i.smartTicks?0:i.rotation)*Math.PI/180,u=e.dependencies().labelManager,c=Ns(e),s=c.largestLabelDim,l=c.axisTickLabels,f=c.smartTick,h=s.height,d=s.width;return 0===e.domain().length?null:(!1===e._rotationLock&&(e.setRotationConfig(a||l,s.width),e._rotationLock=!1),t=i.smartTicks?f:{width:Math.abs(h*Math.sin(o))+Math.abs(d*Math.cos(o)),height:Math.abs(d*Math.sin(o))+Math.abs(h*Math.cos(o))},u.setStyle(e._axisNameStyle),{tickSize:e.getTickSize(),tickLabelDim:t,axisLabelDim:u.getOriSize(r),largestLabelDim:s,axisTickLabels:l})}(this)),this.axisDimensions()}},{key:"getLogicalSpace",value:function getLogicalSpace(){return this.logicalSpace()||(this.logicalSpace(function calculateContinousSpace(e){e.range();var t=e.config(),n=e.getAxisDimensions(),r=t.orientation,i=t.show,a=t.showAxisName,o=n.axisLabelDim;if(!1===i)return{width:0,height:0};var u=o.width;if(r===Yc||r===Gc){var c=Ls(e,n,t),s=c.width,l=c.height;return{width:Math.max(s,u),height:l}}var f=Rs(e,n,t),h=f.width,d=f.height;return{width:h,height:Math.max(d,a?u:0)}}(this)),js(this),this.logicalSpace()),this.logicalSpace()}},{key:"invert",value:function invert(){for(var e=this,t=arguments.length,n=Array(t),r=0;ra[1];return"band"===r?(n=i.invertExtent(e,t),[i(o?n[n.length-1]:n[0]),i(o?n[0]:n[n.length-1])+i.bandwidth()]):[e,t]}},{key:"updateDomainBounds",value:function updateDomainBounds(e){var t=this.domain();return this.config().domain?t=this.config().domain:(0===t.length&&(t=e),e.length&&(t=[Math.min(t[0],e[0]),Math.max(t[1],e[1])])),this.domain(t)}},{key:"updateDomainCache",value:function updateDomainCache(e){!1===this._domainLock&&(this.domain([]),this._domainLock=!0);var t=[];return e&&e.forEach(function(e){void 0!==e&&null!==e&&t.push(e)}),this.updateDomainBounds(t)}},{key:"getMinTickDifference",value:function getMinTickDifference(){return this.domain()}},{key:"getFormattedTickValues",value:function getFormattedTickValues(e){return e}},{key:"setTickValues",value:function setTickValues(){var e=this.config().tickValues;return e?(e instanceof Array&&this.axis().tickValues(e),this):this}},{key:"getUnitWidth",value:function getUnitWidth(){return 0}},{key:"serialize",value:function serialize(){return{name:this.name,type:this.type,range:this.range(),config:this.config()}}},{key:"registerEvent",value:function registerEvent(e,t){this._eventList.push({name:e,action:t})}},{key:"on",value:function on(e,t){e=e||"update",this.registerEvent(e,t)}},{key:"render",value:function render(){return this.mount()&&function renderAxis(e){var t=e.config(),n=e.dependencies().labelManager,r=e.mount(),i=e.range(),a=e.axis(),o=e.scale(),u=e._axisNameStyle,c=e._tickLabelStyle,s=e.formatter,l=e.tickValues,f=t.orientation,h=t.name,d=t.labels,p=t.xOffset,y=t.yOffset,g=t.axisNamePadding,v=t.className,m=t.showAxisName,b=t.show,_=t.id,x=t.interpolator,w=t.classPrefix;if(b){var k=e.getTickSize(),C=Eo(Ao(r),"g",[e],""+v,{},function(e){return e.config().id});n.setStyle(c),"linear"===x&&e.setTickValues();var S=o.ticks||o.quantile||o.domain;s&&a.tickFormat(s(l||a.tickValues()||S()));var P=Math.abs(i[0]-i[1]),A=e.axisDimensions().tickLabelDim;C.attr("transform","translate("+p+","+y+")"),Ts(e),!1===d.smartTicks?C.transition().duration(1e3).call(a):C.call(a),C.selectAll(".tick").classed(w+"-ticks",!0),C.selectAll(".tick line").classed(w+"-tick-lines",!0),C.selectAll(".tick text").classed(w+"-ticks",!0).classed(w+"-ticks-"+_,!0),Os(C,e,k);var E=Eo(C,"text",[h],w+"-axis-name").attr("text-anchor","middle").classed(w+"-axis-name-"+_,!0).text(function(e){return e});E.classed(ys,!m);var M=P/2;n.setStyle(u);var O=n.getOriSize(h),T={labelProps:A,tickSize:k,axisNamePadding:g,axisNameHeight:O.height,axisNameWidth:O.width,yOffset:y,xOffset:p,labelOffset:M,availableSpace:e.availableSpace()};Fs(E,f,T)}}(this),this}},{key:"remove",value:function remove(){return this.store().unsubscribeAll(),Ao(this.mount()).remove(),this}},{key:"unsubscribe",value:function unsubscribe(){return this.store().unsubscribeAll(),this}},{key:"isReverse",value:function isReverse(){var e=this.range();return e[0]>e[1]}},{key:"getPixelToValueRatio",value:function getPixelToValueRatio(){var e=this.scale(),t=e.range(),n=e.domain();return Math.abs(t[1]-t[0])/(n[1]-n[0])}},{key:"id",get:function get(){return this._id}}],[{key:"defaultConfig",value:function defaultConfig(){return Es}}]),SimpleAxis}(),Vs=function(){function defineProperties(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:0,t=arguments[1],n=arguments[2],r=arguments[3],i=n.left,a=n.right,o=n.top,u=n.bottom,c=this.config(),s=c.orientation,l=c.fixedBaseline,f=this.getAxisDimensions().tickLabelDim;if(this.availableSpace({width:e,height:t}),s===Yc||s===Gc){var h=f.width;this.range([(l?0:h/2)+i,e-a-h/2]);var d=this.getLogicalSpace().height;r&&this.config({yOffset:Math.max(d,t)})}else{var p=f.height;this.range([t-u-(l?1:p/2),p/2+o]);var y=this.getLogicalSpace().width;r&&this.config({xOffset:Math.max(y,e)})}return this}},{key:"setTickValues",value:function setTickValues(){var e=this.config().tickValues,t=this.axis();return e?(e instanceof Array&&this.axis().tickValues(e),this):(t.tickValues(this.getTickValues()),this)}},{key:"getTickValues",value:function getTickValues(){var e=this.config(),t=e.orientation,n=e.tickValues,r=this.range(),i=this.axis(),a=Math.abs(r[0]-r[1]),o=Ns(this).largestLabelDim;return n?i.scale().ticks(n):function getNumberOfTicks(e,t,n,r){var i=n.scale().ticks(),a=r.config().numberOfTicks,o=i.length,u=o;return o*(1.5*t)>e&&(u=Math.floor(e/(1.5*t))),u=Math.min(a,Math.max(1,u)),n.scale().ticks(u)}(a,o[t===Gc||t===Yc?"width":"height"],i,this)}},{key:"getMinTickDifference",value:function getMinTickDifference(){return xa(this.config().tickValues)}},{key:"setFixedBaseline",value:function setFixedBaseline(e){var t=this.config(),n=t.orientation,r=t.labels.rotation,i=this.axis(),a=this._axisDimensions.largestLabelDim,o=a.width,u=a.height;return i.tickTransform(function(e,t){return 0!==t||n!==Xc&&n!==Kc?0!==t||n!==Yc&&n!==Gc||0!==r?"":"translate("+o/2+"px, 0px) rotate("+r+"deg)":"translate(0, -"+u/3+"px)"}),e}}],[{key:"type",value:function type(){return Qc}}]),ContinousAxis}(),Zs=function(){function defineProperties(e,t){for(var n=0;n0&&e.length*(t+this._minTickDistance.width)>a&&(a&&o0&&e.length*t>i&&(i&&1.25*a1?t.range:[al].concat(props_toConsumableArray(t.range)));var r=na(n,e.config()),i=na(r,t);return i.range instanceof Array&&(i.range=i.range.map(function(e,t){return sl(e,il[t])}),i.stops=t.stops||i.range.length),i.value=sl(i.value,i.value),i}},domain:{},scale:{},uniqueValues:{}};function color_strategy_defineProperty(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function color_strategy_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);tMath.min(t.length,18))for(var r=aa()(function hslInterpolator(){return Ne}(),t.map(function(e){return ul(e)})),i=0;i0&&void 0!==arguments[0]?arguments[0]:[];if(e.length){var t=this.scale(),n=t.range?t.range():null,r=this._colorStrategy.domainRange()(e,this.config().stops,n);this.domain(r.domain),r.range&&this.scale().range(r.range),this.uniqueValues(r.uniqueVals),this.scale().domain(r.scaleDomain||this.domain())}return this}},{key:"serialize",value:function serialize(){return{type:this.constructor.type(),scale:this.scale(),domain:this.domain(),config:this.config()}}},{key:"transformColor",value:function transformColor(e,t){var n=360*e[0],r=100*e[1],i=100*e[2],a=e[3]||1,o=n+t[0],u=r+t[1],c=i+t[2],s=a+t[3]||0;return{color:"hsla("+o+","+u+"%,"+c+"%,"+s+")",hsla:[o/360,u/100,c/100,s]}}},{key:"id",value:function id(){return this._id}}],[{key:"defaultConfig",value:function defaultConfig(){return ol}},{key:"type",value:function type(){return"color"}}]),ColorAxis}(),Sl={value:36,range:[36,1e3]};function size_strategy_defineProperty(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function size_strategy_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t0&&void 0!==arguments[0]?arguments[0]:0,t=this.config().value,n=this.scale(),r=this.domain()||[1,1];return n&&r[0]!==r[1]?this._sizeStrategy.range(e,n,this.domain(),this.uniqueValues()):t}},{key:"updateDomain",value:function updateDomain(e){if(e){var t=(0,this._sizeStrategy.domain)(e,this.config().intervals);this.domain(t.domain),this.uniqueValues(t.uniqueVals),this.scale().domain(t.scaleDomain||this.domain())}return this}},{key:"serialize",value:function serialize(){return{type:this.constructor.type(),scale:this.scale(),domain:this.domain(),range:this.range(),config:this.config()}}},{key:"id",value:function id(){return this._id}}],[{key:"defaultConfig",value:function defaultConfig(){return Sl}},{key:"type",value:function type(){return"size"}}]),SizeAxis}(),Ol={generator:null,value:"circle",range:["circle","diamond","star","cross","square","wye","triangle"]},Tl={config:{},domain:{},scale:{},uniqueValues:{},generator:{}},Fl=function(){function defineProperties(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:[];return e.length&&(this.uniqueValues(e),this.domain(e),this.scale().domain(e),this.config().generator&&(this._generatedShapes=function shapeGenerator(e,t){var n={};return e.forEach(function(e){n[e]=t(e)}),n}(e,this.config().generator))),this}},{key:"serialize",value:function serialize(){return{type:this.constructor.type(),scale:this.scale(),domain:this.domain(),range:this.config().range,config:this.config()}}},{key:"id",value:function id(){return this._id}}],[{key:"defaultConfig",value:function defaultConfig(){return Ol}},{key:"type",value:function type(){return"shape"}}]),ShapeAxis}();function data_type_scale_map_defineProperty(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var Il="measure",Dl="temporal",Ll=(data_type_scale_map_defineProperty(Nl={},"dimension",Zc),data_type_scale_map_defineProperty(Nl,Il,Qc),data_type_scale_map_defineProperty(Nl,Dl,Jc),function(e,t,n){var r=n.groupBy instanceof Array?n.groupBy:[n.groupBy],i=r.map(function(t){return e.findIndex(function(e){return e.name===t})});if(void 0!==i.find(function(e){return-1===e}))throw new Error("Groupby field "+r+" not found in schema");return function nestCollection(e){var t=T();return e.keys.forEach(function(e){return t.key(function(t){return t[e]})}),t.entries(e.data)}({keys:i,data:t})});var Rl;function transform_factory_defineProperty(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var Bl=(transform_factory_defineProperty(Rl={},"identity",function identityTransform(e,t,n){return t}),transform_factory_defineProperty(Rl,"group",Ll),transform_factory_defineProperty(Rl,"stack",function(e,t,n){var r=n.uniqueField,i=n.value,a=n.groupBy,o=n.sort||"descending",u=function normalizeData(e,t,n,r,i){var a=Ll(t,e,{groupBy:r}),o=t.findIndex(function(e){return e.name===r}),u=t.findIndex(function(e){return e.name===n}),c=t.findIndex(function(e){return e.name===i}),s=e.map(function(e){return e[c]}).filter(function(e,t,n){return n.indexOf(e)===t}).sort(),l=t.reduce(function(e,t,n){return e[n]=t.name,e},{});return{data:a.map(function(e){var t={},n=e.values.reduce(function(e,n){return e=n.reduce(function(e,r,i){return i===c?(e[r]=n[u],t[r]=n):i!==u&&(e[l[i]]=r),e},e)},{});return n._tuple=t,s.forEach(function(t){if(void 0===n[t]){n[t]=0;var r=new Array(e.values[0].length);r[o]=e.key,r[c]=t,n._tuple[t]=r}}),n}),keys:s}}(t,e,i,r,a),c=u.keys,s={},l=n.orderBy,f=e.findIndex(function(e){return e.name===l}),h=e.findIndex(function(e){return e.name===a});-1!==f&&(c.forEach(function(e){var n=t.find(function(t){return t[h]===e});s[e]=n[f]}),u.keys.sort(function(e,t){return s[e].localeCompare(s[t])}));var d=va({keys:u.keys,offset:n.offset||"diverging",order:o,data:u.data});return d.forEach(function(e){e.forEach(function(t){t.data=t.data._tuple[e.key]})}),d}),Rl);var zl=function transformFactory(e){var t=Bl[e];if("function"!=typeof t)throw new Error("Invalid transform type supplied.");return t},Hl=function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function sliceIterator(e,t){var n=[],r=!0,i=!1,a=void 0;try{for(var o,u=e[Symbol.iterator]();!(r=(o=u.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){i=!0,a=e}finally{try{!r&&u.return&&u.return()}finally{if(i)throw a}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}();var Vl,Ul=f.BAND,Wl=function getLayerColor(e,t){var n=e.datum,r=e.index,i=t.colorEncoding,a=t.colorAxis,o=t.colorFieldIndex,u="",c="";return i&&i.value instanceof Function?(c=i.value(n,r),u=i.value(n,r)):(u=a.getRawColor(n._data[o]),c=a.getHslString(u)),{color:c,rawColor:u}},ql=function transfromColor(e,t,n,r){t.meta.stateColor[n]=t.meta.stateColor[n]||t.meta.originalColor;var i=e.transformColor(t.meta.stateColor[n],r);return t.meta.stateColor[n]=i.hsla,i},Gl=function applyInteractionStyle(e,t,n,r){var i=e.getPlotElementsFromSet(t),a=e.axes().color,o=r.apply,u=r.interactionType;n.forEach(function(e){var t=e.type;i.style(t,function(n){var r=n.meta,i=r.colorTransform,c=r.stateColor,s=r.originalColor;if(i[u]=i[u]||{},o&&!i[u][t])return i[u][t]=e.intensity,ql(a,n,t,e.intensity).color;if(!o&&i[u][t])return i[u][t]=null,ql(a,n,t,e.intensity.map(function(e){return-e})).color;var l=c[t]?c[t]:s,f=Hl(l,4);return"hsla("+360*f[0]+","+100*f[1]+"%,"+100*f[2]+"%, "+(f[3]||1)+")"})})},Yl=function getAxesScales(e){var t=[Bc.X,Bc.Y].map(function(t){return e[t]}),n=Hl(t,2),r=n[0],i=n[1],a=[r,i].map(function(e){return e&&e.scale()}),o=Hl(a,2);return{xAxis:r,yAxis:i,xScale:o[0],yScale:o[1]}},Xl=function getIndividualClassName(e,t,n,r){var i=r.config().individualClassName,a="";return i instanceof Function&&(a=i(e,t,n,r)),a},Kl=function attachDataToVoronoi(e,t){var n;e.data((n=[]).concat.apply(n,function helpers_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t=e[0]?(i=d=e[1],h=f=e[0]):(i=d=e[0],h=f=e[1]),(t=a===ir.FieldType.MEASURE?{x:h,x0:d,y:n[u],y0:n[u]}:{x:n[o],x0:n[o],y:i,y0:f})._data=n,t._id=n[l]}else(t={x:e[o],y:e[u],x0:e[c],y0:e[s]})._data=e,t._id=e[l];return t})}).filter(function(e){return e.length})}(e,t,this.encodingFieldsInf(),this.transformType())}},{key:"getNearestPoint",value:function getNearestPoint(){return null}},{key:"applyInteractionStyle",value:function applyInteractionStyle(e,t,n){var r=(this.config().interaction||{})[e];r&&Gl(this,t,r,{apply:n,interactionType:e})}},{key:"transformType",value:function transformType(){return arguments.length?(this._transformType=arguments.length<=0?void 0:arguments[0],this):this._transformType}},{key:"render",value:function render(){return this}},{key:"elemType",value:function elemType(){return"g"}},{key:"remove",value:function remove(){return this.store().unsubscribeAll(),Ao(this.mount()).remove(),this}},{key:"cachePoint",value:function cachePoint(e,t){if(null===e)return this;var n=this._pointMap;return!n[e]&&(n[e]=[]),n[e].push(t),this}},{key:"dataProps",value:function dataProps(){return arguments.length?(this._dataProps=arguments.length<=0?void 0:arguments[0],this):this._dataProps}},{key:"getIdentifiersFromData",value:function getIdentifiersFromData(e){var t=this.data().getData().schema,n=this.data().getFieldsConfig(),r=[[],[]],i=this.encodingFieldsInf(),a=i.xFieldType,o=i.yFieldType,u=i.xField,c=i.yField,s=[a,o].map(function(e){return e===ir.FieldType.MEASURE}),l=tf(s,2),f=l[0],h=l[1];if(t.forEach(function(t,i){var a=t.name;n[a].def.type===ir.FieldType.DIMENSION&&(r[0].push(a),r[1].push(e[i]))}),f&&h){var d,p,y=n[u].index,g=n[c].index;(d=r[0]).push.apply(d,[u,c]),(p=r[1]).push.apply(p,[e[y],e[g]])}return r}},{key:"getPlotSpan",value:function getPlotSpan(){return{x:0,y:0}}},{key:"getPlotPadding",value:function getPlotPadding(){return{x:0,y:0}}},{key:"getPointsFromIdentifiers",value:function getPointsFromIdentifiers(e){var t,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=n.getAllAttrs,i=n.getBBox;if(!this.data())return[];var a=void 0,o=void 0;if(e instanceof ar.a){var u=e.getData();a=u.schema.map(function(e){return e.name}),o=u.data}else a=e[0],o=e.slice(1,e.length);var c=this._points,s=this.data().getFieldsConfig(),l=(t=[]).concat.apply(t,function base_layer_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t2&&void 0!==arguments[2]?arguments[2]:{},r=Ao(n.event.target).data()[0];if(Di(r)){var i=r.datum,a=i.data,o=i.uid;return{id:this.getIdentifiersFromData(a,o),layerId:this.id()}}return null}},{key:"getPlotElementsFromSet",value:function getPlotElementsFromSet(e){return Ao(this.mount()).selectAll(this.elemType()).filter(function(t){return-1!==e.indexOf(t.datum.uid)})}},{key:"render",value:function render(e){var t=this,n=this.measurement(),r=n.height,i=n.width,a=this.config(),o=a.classPrefix,u=a.defClassName,c=a.minOuterRadius,s=a.innerRadius,l=a.outerRadius,f=a.cornerRadius,h=a.padAngle,d=a.padRadius,p=a.padding,y=a.transition,g=a.innerRadiusFixer,v=this.axes().size,m=this._store,b=m.get("transformedData"),_=r-p.top-p.bottom,x=i-p.left-p.right,w=Gi(u,this.id(),o),k=function getRadiusRange(e,t,n){var r=n.minOuterRadius,i=n.innerRadius,a=n.outerRadius,o=n.innerRadiusFixer;return[Math.max(i+o||0,r),a||Math.min(t,e)/2]}(x,_,{minOuterRadius:c,innerRadius:s,outerRadius:l,innerRadiusFixer:g}),C=this.axes().color,S=l||Math.min(_,x)/2,P=m.get("domain").radius,A=function rangeValueGetter(e){return function getRangeValue(e,t,n,r,i){var a=1,o=e.outerRadiusValue,u=e.sizeVal,c=i.domain(),s=i.getSize(u)/(c?i.range()[1]:i.config().value);return a*=(t[1]-t[0])/(n[1]-n[0]),(t[0]+(o-n[0])*a||r)*s}(e,k,P,S,v)},E=bf().innerRadius(s?Math.min(_/2,x/2,s):0).cornerRadius(f).padAngle(h).padRadius(d);this._chartWidth=x,this._chartHeight=_;var M=Eo(Ao(e),"g",[1],w[0]+"-group").classed(w[1]+"-group",!0).attr("transform","translate("+x/2+","+_/2+")"),O=[],T=0;return Eo(M,"g",b,""+w[0],{update:function tween(e){Eo(e,"path",function(e,t){return[{datum:e,index:t,arcFn:E,meta:{originalColor:C.getRawColor(e.colorVal),stateColor:{},colorTransform:{}}}]},w[0]+"-path").style("fill",function(e){return C.getColor(e.datum.colorVal)}).transition().duration(y.duration).attrTween("d",function(){for(var e=arguments.length,t=Array(e),n=0;n0&&e.forEach(function(e){var i=e[0].datum.startAngle,a=e[e.length-1].datum.endAngle,o=2*Math.PI*i/(2*Math.PI+i-a);e.forEach(function(e){var i=e.elem,a=e.datum;i.each(function(){var e=Ao(this);e.selectAll("path").transition().duration(t.duration).attrTween("d",function(){return function(e){var t=n(a);return a.outerRadius=t,r(ra()(a,{startAngle:o,endAngle:o,outerRadius:t})(e))}}).remove(),e.remove()})})})}(O,y,A,E),this}},{key:"getPointsFromIdentifiers",value:function getPointsFromIdentifiers(e){if(!this.data())return[];var t=e[0],n=e.slice(1,e.length),r=Ao(this.mount()).selectAll("path").data(),i=this.data().getFieldsConfig(),a=r.filter(function(e){var r=e.datum.data,a=e.datum.uid;return t.every(function(e,t){return e in i&&i[e].def.type===ir.FieldType.DIMENSION?-1!==n.findIndex(function(n){return n[t]===r[i[e].index]}):e!==nr.ROW_ID||-1!==n.findIndex(function(e){return e[t]===a})})})[0];if(a){var o=a.arcFn.centroid(a.datum);return[{x:o[0]+this._chartWidth/2,y:o[1]+this._chartHeight/2,width:2,height:2}]}return[]}}],[{key:"defaultConfig",value:function defaultConfig(){return yf}},{key:"formalName",value:function formalName(){return"arc"}}]),ArcLayer}(),xf=function drawText(e,t,n,r){var i=Ao(e).selectAll("g").data(t),a=i.enter().append("g").each(function(e){To(this,e.enter)}).merge(i),o=Lo(Ao(e),n.className),u=parseInt(o.fontSize,10);return r.setStyle(o),a.each(function(e){var t,n=Ao(this),i=e.update,a=e.text,o=e.color,c=e.textanchor,s=e.style,l=e.background;if(t=l.value){var f=l.padding,h=void 0,d=r.getOriSize(e.text),p=d.width,y=d.height,g=Eo(n,"rect",[1]);h="end"===c?p:"start"===c?0:p/2,To(g.node(),{x:i.x-h-f/2,y:i.y-u-f/2,width:p+f,height:y+f}),l&&Fo(g,{background:t})}var v=Eo(n,"text",function(e){return[e]}).text(a),m=v.node();s&&Fo(m,s),o&&Fo(m,{fill:o}),e.className&&v.classed(e.className,!0),To(m,i),v.attr("text-anchor",c)}),i.exit().remove(),i},wf={defClassName:"layer-text",classPrefix:"muze",className:"",transform:{type:"identity"},interaction:{highlight:[{type:"fill",intensity:[0,0,-15,0]}],fade:[{type:"fill",intensity:[0,0,15,0]}],focus:[{type:"fill",intensity:[0,0,15,0]}]},transition:{effect:"cubic",duration:1e3},encoding:{color:{},text:{value:"",background:{padding:10}}},states:{highlight:{className:"muze-layer-text-highlight"},fadeout:{className:"muze-layer-text-fadeout"},selected:{className:"muze-layer-text-selected"}}},kf=(n(27),function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function sliceIterator(e,t){var n=[],r=!0,i=!1,a=void 0;try{for(var o,u=e[Symbol.iterator]();!(r=(o=u.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){i=!0,a=e}finally{try{!r&&u.return&&u.return()}finally{if(i)throw a}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}()),Cf=function(){function defineProperties(e,t){for(var n=0;n4)}(r)?r:pa(r).size(i)(a),Eo(n,"path",function(e){return[e]}).attr("d",s)}else e.shape="circle",createShape(e,t)}(e,this)}),(t=c?t:t.transition().duration(c?0:i.duration)).attr("transform",function(e){return"translate("+e.update.x+","+e.update.y+")"}).each(function(e){var t=e.style,n=Ao(this);Xi(t,function(e){return n.style(e,t[e])}),n.attr("class",""+a),n.classed(e.className,!0)});var h=l.exit();c?h.remove():h.transition().ease(Wi[u]).duration(o).on("end",function(){Ao(this).remove()}).style("fill-opacity",0).style("stroke-opacity",0)},Af={defClassName:"layer-point",className:"",classPrefix:"muze",defColorStyle:"stroke",interaction:{highlight:[{type:"fill",intensity:[0,0,-20,0]}],fade:[{type:"fill",intensity:[0,0,20,0]}],focus:[{type:"fill",intensity:[0,0,20,0]}]},innerPadding:.1,nearestPointThreshold:10,transform:{type:"identity"},transition:{effect:"cubic",duration:1e3},encoding:{size:{value:30},color:{},shape:{value:"circle"},x:{},y:{},strokeOpacity:{value:.5},fillOpacity:{value:.5}},shapes:["circle","cross","diamond","square","star","wye","triangle"],sizes:[20,30,40,50,60,70]},Ef=(n(29),function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function sliceIterator(e,t){var n=[],r=!0,i=!1,a=void 0;try{for(var o,u=e[Symbol.iterator]();!(r=(o=u.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){i=!0,a=e}finally{try{!r&&u.return&&u.return()}finally{if(i)throw a}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}()),Mf=function(){function defineProperties(e,t){for(var n=0;n3&&void 0!==arguments[3]?arguments[3]:{},a=[],o=t.size,u=t.shape,c=t.color,s=t.x,l=t.y,f=o.field,h=o.value,d=u.field,p=s.field,y=l.field,g=n.size,v=n.shape,m=this.data().getFieldsConfig(),b=m[p]&&m[p].def.type===ir.FieldType.DIMENSION,_=m[y]&&m[y].def.type===ir.FieldType.DIMENSION,x=b?Bc.X:_?Bc.Y:null,w=c&&c.field,k=m[w]&&m[w].index,C=this._store.get("measurement"),S=m[d]&&m[d].index,P=m[f]&&m[f].index,A=n.color,E=i.offset,M=E.x,O=E.y,T=function _loop(i,o){var u=e[i],s=u._data,l=h instanceof Function?h(u,i):g.getSize(s[P]),f=v.getShape(s[S]),d=[Bc.X,Bc.Y].map(function(e){var r=null===u[e]?void 0:u[e],i=e===Bc.X?C.width:C.height;return t[e].field?n[e].getScaleValue(r):i/2}),p=Ef(d,2),y=p[0],m=p[1];y+=M,m+=O;var b=Wl({datum:u,index:i},{colorEncoding:c,colorAxis:A,colorFieldIndex:k}),_=b.color,w=b.rawColor,E={fill:_,stroke:_};if(!isNaN(y)&&!isNaN(m)){var T={enter:{x:y,y:m},update:{x:y,y:m},shape:f,size:Math.abs(l),meta:{stateColor:{},originalColor:w,colorTransform:{}},style:E,_data:s,_id:u._id,source:u._data,rowId:u._id};T.className=Xl(u,i,e,r),a.push(T),r.cachePoint(u[x],T)}},F=0,N=e.length;F=0?C:k))):(p=c===Nc||r[e]>=0?C:k,y=Math.abs(p-(c===Nc?S:r[e]>=0?k:C))),d=k}else p=0,y=f[i];return{enterSpace:g,enter:d,pos:p,space:y}}),jf=function resolveDimensions(e,t,n){var r={xAxis:n.x,yAxis:n.y},i=Nf("x",r,t,e),a=i.enterSpace,o=i.enter,u=i.pos,c=i.space,s=Nf("y",r,t,e),l=s.enterSpace;return{enter:{x:o,y:s.enter,width:a,height:l},update:{x:u,y:s.pos,width:c,height:s.space}}},If=function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function sliceIterator(e,t){var n=[],r=!0,i=!1,a=void 0;try{for(var o,u=e[Symbol.iterator]();!(r=(o=u.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){i=!0,a=e}finally{try{!r&&u.return&&u.return()}finally{if(i)throw a}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),Df=function(){function defineProperties(e,t){for(var n=0;n=k.x&&e<=k.width+k.x&&t>=k.y&&t<=k.height+k.y){c=w;break}c=null}var C=c&&c._data;return C&&(u=this.getIdentifiersFromData(C,c._id)),c?{dimensions:[c.update],id:u,layerId:this.id()}:c}},{key:"getPlotSpan",value:function getPlotSpan(){return this._plotSpan}}],[{key:"formalName",value:function formalName(){return"bar"}},{key:"defaultConfig",value:function defaultConfig(){return Ff}},{key:"defaultPolicy",value:function defaultPolicy(e,t){var n=rf.defaultPolicy(e,t),r=n.encoding.color.field,i=n.transform;return r&&(i.groupBy=r),n}}]),BarLayer}(),zf={defClassName:"layer-tick",className:"",classPrefix:"muze",interaction:{highlight:[{type:"stroke",intensity:[0,0,-15,0]}],fade:[{type:"stroke",intensity:[0,0,15,0]}],focus:[{type:"stroke",intensity:[0,0,15,0]}]},innerPadding:.1,transform:{type:"identity"},transition:{effect:"cubic",duration:1e3},encoding:{color:{},x:{},y:{},x0:{},y0:{},strokeOpacity:{value:.5},fillOpacity:{value:.5}},states:{highlight:{className:"muze-layer-tick-highlight"},fadeout:{className:"muze-layer-tick-fadeout"},selected:{className:"muze-layer-tick-selected"}}},Hf=function(e){var t=e.points,n=e.container,r=e.keyFn,i=e.className,a=Ao(n),o=a.selectAll("path").data(t,r),u=o.enter().append("path");return a.attr("class",i||""),u.each(function(e){var t=Ao(this),n=e.enter||{};Object.entries(n).forEach(function(e){return!isNaN(e[1])&&t.attr(e[0],e[1])})}),o.exit().remove(),o.merge(u).each(function(e){var t=Ao(this),n=e.update,r=e.style||{},i=void 0!==n.x0?n.x0:n.x,a=void 0!==n.y0?n.y0:n.y,o="M "+n.x+" "+n.y+" L "+i+" "+a;e.className&&t.classed(e.className,!0),t.attr("d",o),Object.entries(r).forEach(function(e){return t.style(e[0],e[1])})})},Vf=(n(33),function(){function defineProperties(e,t){for(var n=0;n3&&void 0!==arguments[3]?arguments[3]:{},i=[],a=Yl(n),o=a.xAxis,u=a.yAxis,c=this.data().getFieldsConfig(),s=this.encodingFieldsInf(),l=s.xField,f=s.yField,h=s.x0Field,d=s.y0Field,p=s.xFieldType,y=s.yFieldType,g=p===ir.FieldType.DIMENSION,v=y===ir.FieldType.DIMENSION,m=g?Bc.X:v?Bc.Y:null,b=t.color,_=b&&b.field,x=c[_]&&c[_].index,w=this._store.get("measurement"),k=n.color,C=r.offset,S=C.x,P=C.y,A=r.span,E=A.x,M=A.y,O=0,T=e.length;O0&&(n[0]=[].concat(field_sanitizer_toConsumableArray(n[0]),field_sanitizer_toConsumableArray(n[1])),n[1]=[]),{fields:n.map(function(e,t){return 1===t?r[t].concat(n[t]):n[t].concat(r[t])}),dimensions:[].concat(field_sanitizer_toConsumableArray(n[0]),field_sanitizer_toConsumableArray(n[1])),measures:[].concat(field_sanitizer_toConsumableArray(r[0]),field_sanitizer_toConsumableArray(r[1])),temporal:[].concat(field_sanitizer_toConsumableArray(i[0]),field_sanitizer_toConsumableArray(i[1])),categorical:[].concat(field_sanitizer_toConsumableArray(a[0]),field_sanitizer_toConsumableArray(a[1]))}}(i,n)}),r=Sh(n,2),i=r[0],a=r[1],o=i.fields,u=i.dimensions,c=i.measures,s=i.temporal,l=i.categorical,f=a.fields,h=a.dimensions,d=a.measures;return{rows:o,rowDimensions:u,rowMeasures:c,rowTemporalFields:s,rowCategoricalFields:l,columns:f,columnTemporalFields:a.temporal,columnCategoricalFields:a.categorical,columnDimensions:h,columnMeasures:d}},Eh=function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function sliceIterator(e,t){var n=[],r=!0,i=!1,a=void 0;try{for(var o,u=e[Symbol.iterator]();!(r=(o=u.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){i=!0,a=e}finally{try{!r&&u.return&&u.return()}finally{if(i)throw a}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),Mh=function(){function defineProperties(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:{},t=arguments[1],n=Jh(th,t.rows,e),r=Eh(n,2),i=r[0],a=r[1],o=Jh("column",t.columns,e),u=Eh(o,2),c=u[0],s=u[1];return this.axisFrom({row:a,column:s}),this.headerFrom({row:i,column:c}),this}}]),VisualEncoder}(),Th={linear:Qs,band:Js,temporal:nl,size:Ml,color:Cl,shape:jl},Fh={dimension:f.BAND,categorical:f.BAND,measure:f.LINEAR,temporal:f.TIME},Nh=function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function sliceIterator(e,t){var n=[],r=!0,i=!1,a=void 0;try{for(var o,u=e[Symbol.iterator]();!(r=(o=u.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){i=!0,a=e}finally{try{!r&&u.return&&u.return()}finally{if(i)throw a}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}();function encoder_helper_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t1?e.position="both":e.position=n.axisFrom()[a],r[o]=Ih(o,s[i],e,o===$f?l:f)}),r}},{key:"getFacetsAndProjections",value:function getFacetsAndProjections(e,t){for(var n=[],r=[],i=0,a=[],o=[],u=e[0],c=e[1],s=u.length,l=c.length,f=this.axisFrom(),h=0;hi)for(var g=i;g-1&&(r=[[b,b]],a.splice(_,1)),o.splice(0,1)}else{var x=a.length-1,w=a[x];r=[[w]];var k=Dh(o,w);k>-1&&(r=[[w,w]],o.splice(k,1)),a.splice(x,1)}return{facets:n=(n=[].concat(a,o)).filter(function(e,t,n){return t===n.findIndex(function(t){return t.toString()===e.toString()})}),projections:r}}},{key:"fieldSanitizer",value:function fieldSanitizer(e,t){return function get(e,t,n){null===e&&(e=Function.prototype);var r=Object.getOwnPropertyDescriptor(e,t);if(void 0===r){var i=Object.getPrototypeOf(e);return null===i?void 0:get(i,t,n)}if("value"in r)return r.value;var a=r.get;return void 0!==a?a.call(n):void 0}(CartesianEncoder.prototype.__proto__||Object.getPrototypeOf(CartesianEncoder.prototype),"fieldSanitizer",this).call(this,e,t)}},{key:"getRetinalFieldsDomain",value:function getRetinalFieldsDomain(e,t){var n=e.groupedModel,r={};for(var i in t)if({}.hasOwnProperty.call(t,i)){var a=t[i],o=a.field;if(!a.domain&&o){var u=Zh(n,o);r[o]=u}}return r}},{key:"serializeLayerConfig",value:function serializeLayerConfig(e){var t=[];return e.length&&e.forEach(function(e,n){var r=Gf.sanitizeLayerConfig(e);r.order=n,t.push(r)}),t}},{key:"getLayerConfig",value:function getLayerConfig(e,t){var n=[],r=e.columnFields,i=e.rowFields;return r.forEach(function(e){var r=e.toString();i.forEach(function(i){var a=[],o=i.toString(),u={x:{field:r},y:{field:o}},c=i.subtype(),s=function getDefaultMark(e,t){return"categorical"===e||"categorical"===t?"bar":"temporal"===e||"temporal"===t?"line":"point"}(e.subtype(),c),l=[{mark:s,def:{mark:s,encoding:u}}],f=function getLayerConfFromFields(e,t,n){return n.filter(function(n){var r,i,a,o=n instanceof Array?n:[n],u=(r=[]).concat.apply(r,encoder_helper_toConsumableArray(o.map(function(e){return e.encoding}).filter(function(e){return void 0!==e})));if(!u.length)return!0;var c=(i=[]).concat.apply(i,encoder_helper_toConsumableArray(u.map(function(e){return[e.x&&e.x.field,e.x0&&e.x0.field]}))).filter(function(e){return void 0!==e&&null!==e}),s=(a=[]).concat.apply(a,encoder_helper_toConsumableArray(u.map(function(e){return[e.y&&e.y.field,e.y0&&e.y0.field]}))).filter(function(e){return void 0!==e&&null!==e});if(!c.length&&!s.length)return!0;var l=!!c.length&&c.every(function(t){return-1!==e.indexOf(t)}),f=!!s.length&&s.every(function(e){return-1!==t.indexOf(e)});return c.length&&s.length?l&&f:l||f})}(e.getMembers(),i.getMembers(),t||[]);a=f.length?f.map(function(e){var t=na(na({},l[0].def),e),n=Gf.getSerializedConf(t.mark,t);return{mark:t.mark,order:t.order,def:n}}):l,n.push.apply(n,function cartesian_encoder_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);tt)for(var h=t;h0&&(e=na(e,t[0])),n.push(e)}),0===n.length&&(n=t),this.layers(n),n}},{key:"serializeLayerConfig",value:function serializeLayerConfig(e){var t=[];return e.length&&e.forEach(function(e){var n=Gf.getSerializedConf(e.mark,e);t.push({mark:e.mark,def:n})}),t}}],[{key:"type",value:function type(){return"polar"}}]),PolarEncoder}(),Hh=function(){function defineProperties(e,t){for(var n=0;n1&&void 0!==arguments[1]?arguments[1]:{},n=e.axisType,r=e.fieldsConfig,i=t.field,a=[],o=Th[n];return t.type=t.type?t.type:Qh(r,i||null),a.push(new o(t)),a}({axisType:e,fieldsConfig:t},n[e])}),r}},{key:"getLayerConfig",value:function getLayerConfig(e,t){var n=[];return t.forEach(function(t){var r=t;[nh,rh,ih].forEach(function(t){if(e[t]&&e[t].field){var n=r.def;r.def instanceof Array?n.forEach(function(n){n.encoding=n.encoding||{},!n.encoding[t]&&(n.encoding[t]={}),n.encoding[t].field=e[t].field}):(n.encoding=n.encoding||{},!n.encoding[t]&&(n.encoding[t]={}),n.encoding[t].field=e[t].field)}}),n.push(r)}),n}},{key:"setCommonDomain",value:function setCommonDomain(e){var t=e.domains,n=e.axes,r=e.encoding;return Object.entries(r).forEach(function(e){if(e[1]&&e[1].field){var r=e[0],i=e[1].field;i&&n[r].forEach(function(n){var r=t[i];!e[1].domain&&n.updateDomain(r)})}}),n}}],[{key:"type",value:function type(){return"retinal"}}]),RetinalEncoder}(),Uh=function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function sliceIterator(e,t){var n=[],r=!0,i=!1,a=void 0;try{for(var o,u=e[Symbol.iterator]();!(r=(o=u.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){i=!0,a=e}finally{try{!r&&u.return&&u.return()}finally{if(i)throw a}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),Wh=void 0;function group_utils_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t0?e[0].map(function(i,a){return new n({type:"header"},{labelManager:r}).source(function getHeaderText(e,t,n){var r="";if(t===n-1&&e.length>n){for(var i=t;i0&&void 0!==arguments[0]?arguments[0]:[];return new Vo(e)}([]),a=(i=i.data(n,r)).enter().append(t).merge(i);return i.exit()&&i.exit().remove(),a},nd=function getBorders(e,t){var n={top:!1,bottom:!1},r={left:!1,right:!1},i={top:!1,bottom:!1,left:!1,right:!1},a=e.rows,o=e.columns,u=e.values,c=Uh(a,2),s=c[0],l=c[1],f=Uh(o,2),h=f[0],d=f[1],p=t.fieldInfo(),y=p.rowDimensions,g=p.columnDimensions,v=p.rowTemporalFields,m=p.columnTemporalFields,b=p.columnMeasures,_=p.rowMeasures,x=y.length+g.length,w=_.length+b.length,k=v.length+m.length;if("polar"===t.constructor.type()){if(!x)return{showRowBorders:n,showColBorders:r,showValueBorders:i}}else if(!w&&!k&&x<=2)return{showRowBorders:n,showColBorders:r,showValueBorders:i};return n=function getRowBorders(e,t){var n={top:!1,bottom:!1};return(e.length>1||t.length>1)&&(n.top=!0,n.bottom=!0),n}(s,l),r=function getColumnsBorders(e,t){var n={left:!1,right:!1};return(e.length||t.length)&&(e[0]&&e[0].length>1||t[0]&&t[0].length>1)&&(n.left=!0,n.right=!0),n}(h,d),i=function getValueBorders(e,t){var n={top:!0,left:!0,bottom:!0,right:!0},r=[ah,oh],i=["top","bottom"];return e.forEach(function(e,t){e[0]&&e[0].length?n[r[t]]=!0:n[r[t]]=!1}),t.forEach(function(e,t){e.length?n[i[t]]=!0:n[i[t]]=!1}),n}([s,l],[h,d]),u.length>1&&(i.top=!0,i.bottom=!0),u.length&&u[0].length>1&&(i.left=!0,i.right=!0),{showRowBorders:n,showColBorders:r,showValueBorders:i}};function action_behaviour_map_defineProperty(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var rd=(action_behaviour_map_defineProperty(qh={},a.DRAG,{behaviours:[u.BRUSH],touch:!1}),action_behaviour_map_defineProperty(qh,a.HOVER,{behaviours:[u.HIGHLIGHT]}),action_behaviour_map_defineProperty(qh,a.LONGTOUCH,{behaviours:[u.SELECT],touch:!0}),action_behaviour_map_defineProperty(qh,a.TOUCHDRAG,{behaviours:[u.BRUSH],touch:!0}),action_behaviour_map_defineProperty(qh,a.CLICK,{behaviours:[u.SELECT],touch:!1}),qh),ad="config",od="data",ud="axes",cd="layerDef",sd="width",ld="height",fd="mount",hd="primaryXAxisUpdated",dd="primaryYAxisUpdated",pd="secondaryXAxisUpdated",yd="secondaryYAxisUpdated",gd="transform",vd="dataDomain",md="layersCreated",bd="fields",_d="timeDiffs",xd="layerAxisIndex";function src_helper_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t2&&void 0!==arguments[2]?arguments[2]:{},r=void 0,i=n.payload,a=n.selectionSet,o=n.propagationFields[t]||{},u=o.fields||[],c=o.append,s=i.criteria,l=e.context,f=l.cachedData()[0],h=l.id(),d=e.sideEffects(),p=e._behaviourEffectMap,y=a.mergedEnter.model,g=f.getFieldsConfig();i.sourceUnit=h,i.action=t,i.sourceCanvas=l.parentAlias();var v=e._propagationBehaviourMap[t]||t,m=[];null===s?r=null:Di(s)?(m=Object.keys(s||{}),r=y?y.project(m):null):(m=s[0],r=y?y.project(m):null);var b=l.facetByFields();if(null!==r&&u.length){var _=r.getData().schema.map(function(e){return e.name});r=function getModelWithFacetData(e,t){var n=e.getData(),r=n.schema,i=n.data,a=[],o=t[0].map(function(e){return{name:""+e,type:ir.FieldType.DIMENSION}}),u=t[1];return i.forEach(function(e){var t={};r.forEach(function(n,r){t[n.name]=e[r]}),o.forEach(function(e,n){t[e.name]=u[n]}),a.push(t)}),new ar.a(a,[].concat(data_propagator_toConsumableArray(r),data_propagator_toConsumableArray(o)))}(r,b),m=c?[].concat(data_propagator_toConsumableArray(_),data_propagator_toConsumableArray(u)):u,r=r.project(m)}var x=!1;m.length&&m.every(function(e){return g[e]&&g[e].def.type===ir.FieldType.MEASURE})&&(x=!0);var w=l.parentAlias();i.action=t;var k=e._actions.behavioural[v],C=!!k&&k.constructor.mutates(),S=function filterFn(e,t){var n=p[e.config.action],r=!e.config.groupId||n.some(function(e){return d[e.name||e].constructor.mutates()});return e.config.groupId!==t.groupId&&r},P=e._actions.behavioural[t],A=!!P&&P.constructor.mutates(),E={payload:i,action:t,criteria:r,isMutableAction:A,propagateInterpolatedValues:x,groupId:w,sourceId:A?w:h,filterFn:S,enabled:function enabled(e,n){return t===v||e.payload.sourceCanvas===n.context.parentAlias()}};f.propagate(r,E,!0),t!==v&&(E={payload:i,sourceId:C?w:h,criteria:r,isMutableAction:C,propagateInterpolatedValues:x,action:v,groupId:w,applyOnSource:t===v,enabled:function enabled(e,t){return e.payload.sourceCanvas!==t.context.parentAlias()},filterFn:S},f.propagate(r,E,!0,{filterImmutableAction:function filterImmutableAction(e,t){return e.groupId!==t.groupId}}))},Xd=function(){function defineProperties(e,t){for(var n=0;n1){var u=r[0].config();if("linear"===r[0].constructor.type()){if(u.alignZeroLine){r.forEach(function(e){return e.config({nice:!1})});var c=function getAdjustedDomain(e,t){var n=e[0]/(e[0]-t[0]),r=e[1]/(e[1]-t[1]),i=!1;return t[0]>0&&t[1]>0&&t[1]>0&&e[1]>0&&(i=!0,t[0]=0,t[1]=0),t[0]<0&&t[1]<0&&t[1]<0&&e[1]<0&&(i=!0,e[0]=0,e[1]=0),i||n===r||(n1&&void 0!==arguments[1]?arguments[1]:{},n=[],r=e;if(null===e)return[];var i=this.layers(),a=i.length;Di(e)&&(r=[Object.keys(e)],r=[].concat(visual_unit_toConsumableArray(r),visual_unit_toConsumableArray(function transposeArray(e){return e[0].map(function(t,n){return e.map(function(e){return e[n]})})}(Object.values(e)))));for(var o=0;o1&&void 0!==arguments[1]?arguments[1]:[]].map(function(e){return e.reduce(function(e,t){return e=[].concat(matrix_model_toConsumableArray(e),matrix_model_toConsumableArray(t.getMembers()))},[])})},ep=function createSelectedDataModel(e,t,n){return e.select(function(e){return t.every(function(t,r){return e[t].value===n[r]})})},tp=function uniqueKeyGenerator(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:[],i=t.facets,a=t.dataModel,o=t.uniqueValues;if(i[n+1]){var u=i[n];o.forEach(function(t){var o=a.select(function(e){return e[u].value===t}),c=Zh(o,i[n+1]);uniqueKeyGenerator(e,{facets:i,dataModel:o,uniqueValues:c},n+1,[].concat(matrix_model_toConsumableArray(r),[t]))})}else o.forEach(function(t){e.push([].concat(matrix_model_toConsumableArray(r),[t]))})},np=function projectRows(e,t){var n=t.allColumnProjections,r=t.rowProjections,i=t.optionalProjections;return r.length>0?r.map(function(t){var r=Jd(t,n),a=Zd(r,2),o=a[0],u=a[1];return e.project([].concat(matrix_model_toConsumableArray(o),matrix_model_toConsumableArray(u),matrix_model_toConsumableArray(i)))}):[e]},rp=function pushToMatrix(e,t){var n,r=[],i=e.matrix,a=e.datamodel,o=e.facetInfo,u=e.fieldInfo,c=u.rowProjections,s=u.colProjections,l=u.optionalProjections,f=o.rowIndex,h=o.columnIndex,d=c[f%c.length]||[];s.length>0?r=s.map(function(e,n){var r=Jd(e,d),i=Zd(r,2),u=i[0],c=i[1],p=a.project([].concat(matrix_model_toConsumableArray(u),matrix_model_toConsumableArray(c),matrix_model_toConsumableArray(l))),y={rowFields:d,columnFields:e},g={rowIndex:f,columnIndex:h*s.length+n};return t(p,{projections:y,indices:g},o)}):r=[t(a,{projections:{rowFields:d,columnFields:[]},indices:{rowIndex:f,columnIndex:h}},o)];i[f]=i[f]||[],(n=i[f]).push.apply(n,matrix_model_toConsumableArray(r))},ip=function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function sliceIterator(e,t){var n=[],r=!0,i=!1,a=void 0;try{for(var o,u=e[Symbol.iterator]();!(r=(o=u.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){i=!0,a=e}finally{try{!r&&u.return&&u.return()}finally{if(i)throw a}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}();function cell_creator_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t0?d.length:1):(a=g,o=p.length>0?p.length:1),s.length&&f===u&&l&&a.length){var h={axis:l,length:o,type:u},v=[];i<2?(h.keys=a,h.facetConfig=c.rows,v=up(h,r,t,n)):(h.facetConfig=c.columns,h.keys=a[0].map(function(e,t){return a.map(function(e){return e[t]})}),v=up(h,r,t,n)),r[u+"Headers"]=v}else r[u+"Headers"]=null}),r},sp=function computeMatrices(e,t){var n=e.resolver,r=e.datamodel,i=e.componentRegistry,a=e.encoders,o=t.globalConfig,u=t.selection,c=t.transform,s=o.autoGroupBy,l=n.dependencies().smartlabel,f=r.getFieldsConfig(),h=n.layerConfig(),d=n.registry(),p=n.horizontalAxis().fields,y=n.verticalAxis().fields,g=n.optionalProjections(t,h),v=n.getAllFields(),m={normalizedColumns:y,normalizedRows:p,facetsAndProjections:v,layers:h,fieldMap:f,otherEncodings:g,encoders:a,facetConfig:o.facetConfig||{},axisFrom:o.axisFrom||{},selection:u},b={GeomCell:n.getCellDef(d.GeomCell),AxisCell:n.getCellDef(d.AxisCell),BlankCell:n.getCellDef(d.BlankCell),TextCell:n.getCellDef(d.TextCell)},_=Yh(p),x=Yh(y);n.colCells({}),n.rowCells({}),n.datamodelTransform(c||{}),n.resetSimpleAxes();var w={exitCellMap:n.cacheMaps().entryCellMap,entryCellMap:new Map};n.cacheMaps(w);var k={config:o,suppliedLayers:a.simpleEncoder.serializeLayerConfig(n.layerConfig()),resolver:n,cell:b.GeomCell,encoder:a.simpleEncoder,newCacheMap:w,detailFields:t.detail},C=r.getFieldsConfig(),S=r;if(!s.disabled){var P=function extractFields(e,t){var n,r=Object.values(e).map(function(e){var t,n,r=(t=[]).concat.apply(t,group_utils_toConsumableArray(e));return(n=[]).concat.apply(n,group_utils_toConsumableArray(r.map(function(e){return e instanceof _h?e.getMembers():e})))});return(n=[]).concat.apply(n,group_utils_toConsumableArray(r).concat(group_utils_toConsumableArray(t)))}(v,function getFieldsFromSuppliedLayers(e,t){var n,r=[],i=e.map(function(e){return e.encoding||{}});return r=(r=[].concat(group_utils_toConsumableArray(r),[(n=[]).concat.apply(n,group_utils_toConsumableArray(i.map(function(e){return Object.values(e).map(function(e){return e.field})})))])).filter(function(e){return t[e]&&t[e].def.type===ir.FieldType.DIMENSION})}(k.suppliedLayers,r.getFieldsConfig())),A=P.filter(function(e){return C[e]&&C[e].def.type===ir.FieldType.DIMENSION}),E=s.measures;S=r.groupBy(A.length?A:[""],E).project(P)}var M=function getMatrixModel(e,t,n){var r=[],i=[],a=[],o=[],u=[],c=[],s=t.rowFacets,l=t.colFacets;if(t.colProjections.forEach(function(e){o.push.apply(o,matrix_model_toConsumableArray(e))}),t.allColumnProjections=o,s.length>0){var f=s[0].toString(),h=Zh(e,f);tp(i,{facets:s,dataModel:e,uniqueValues:h}),i.forEach(function(n){var i,a=Jd(s),o=Zd(a,1)[0],u=ep(e,o,n);c.push([s,n]),(i=r).push.apply(i,matrix_model_toConsumableArray(np(u,t)))})}else{var d;(d=r).push.apply(d,matrix_model_toConsumableArray(np(e,t)))}if(r=r.length>0?r:[[]],l.length>0){var p=l.map(function(e){return""+e}),y=p[0],g=Zh(e,y);tp(a,{facets:p,dataModel:e,uniqueValues:g}),r.forEach(function(r,i){c[i]=c[i]||[[],[]],a.forEach(function(a,o){u[i]=u[i]||[];var s=r instanceof ar.a?r:e,f=ep(s,p,a),h={matrix:u,datamodel:f,facetInfo:{rowFacets:c[i],colFacets:[l,a],rowIndex:i,columnIndex:o},fieldInfo:t};rp(h,n)})})}else r.forEach(function(r,i){c[i]=c[i]||[[],[]];var a={matrix:u,datamodel:r||e,facetInfo:{rowFacets:c[i],colFacets:[[],[]],rowIndex:i,columnIndex:0},fieldInfo:t};rp(a,n)});var v=a.length>0?a[0].map(function(e,t){return a.map(function(e){return e[t]})}):a;return{matrix:u,rowKeys:i,columnKeys:v}}(S,v,n.valueCellsCreator(k));n.cacheMaps().exitCellMap.forEach(function(e){e.remove()}),n.cacheMaps().exitCellMap.clear(),n.valueMatrix(M.matrix),n.createUnits(i,t);var O=function mutateAxesFromMap(e,t){var n=null,r=null,i=e.xAxesMap,a=e.yAxesMap,o=t.x,u=t.y;return o&&o.forEach(function(e){var t=i.get(e);(n=n||[]).push(t)}),u&&u.forEach(function(e){var t=a.get(e);(r=r||[]).push(t)}),{xAxes:n,yAxes:r}}(n.cacheMaps(),n.axes()),T=O.xAxes,F=O.yAxes;n.axes({x:T,y:F});var N=function generateMatrices(e,t,n,r){var i=e.unitHeight,a=e.unitWidth,o=e.facetsAndProjections,u=e.normalizedRows,c=e.normalizedColumns,s=e.selection,l=e.axisFrom,f=e.facetConfig,h=e.encoders,d=cp({fields:{rows:u,columns:c},matrices:t,facetsAndProjections:o,selection:s,axisFrom:l,facetConfig:f,encoders:h},n,r),p=d.columnsPrimary,y=d.columnsSecondary,g=d.rowsPrimary,v=d.rowsSecondary,m=d.leftHeaders,b=d.topHeaders,_=d.bottomHeaders,x=d.rightHeaders,w=[g,v,p,y].map(function(e){return e?e.getObjects():[]}),k=ip(w,4),C=k[0],S=k[1],P=k[2],A=k[3],E=[m,x].map(function(e){return e?e.getObjects().map(function(e){return e.getObjects()}):[]}),M=ip(E,2),O=M[0],T=M[1],F=O.length?O.map(function(e,t){return C[t]=C[t]?[C[t]]:[],[].concat(cell_creator_toConsumableArray(e),cell_creator_toConsumableArray(C[t]))}):C?C.map(function(e){return[e]}):[],N=S.length?S.map(function(e,t){return[e].concat(cell_creator_toConsumableArray(T[t]||[]))}):T.length?T.map(function(e){return[].concat(cell_creator_toConsumableArray(e))}):[],j=[];b&&b.getObjects().forEach(function(e){e.getObjects().forEach(function(e,t){j[t]=j[t]||[],j[t].push(e)})});P.length&&j.push(P);var I=[];A.length&&I.push(A);var D=I.length;_&&_.getObjects().forEach(function(e){e.getObjects().forEach(function(e,t){I[t+D]=I[t+D]||[],I[t+D].push(e)})});if(!F.length&&!N.length){var L=new n.BlankCell;L.setAvailableSpace(a,i),F=[[L]]}if(!(j.length||I.length&&I[0].length)){var R=new n.BlankCell;R.setAvailableSpace(a,i),I=[[R]]}return{rows:[F,N],columns:[j,I],selectionObj:d}}(m,{valuesMatrix:M,axesMatrix:n.axes()},b,l),j=N.rows,I=N.columns,D=N.selectionObj;return n.rowMatrix(j),n.columnMatrix(I),{rows:n.rowMatrix(),columns:n.columnMatrix(),values:n.valueMatrix(),isColumnSizeEqual:x,isRowSizeEqual:_,selection:D,dataModels:{groupedModel:S,parentModel:r}}},lp=function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function sliceIterator(e,t){var n=[],r=!0,i=!1,a=void 0;try{for(var o,u=e[Symbol.iterator]();!(r=(o=u.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){i=!0,a=e}finally{try{!r&&u.return&&u.return()}finally{if(i)throw a}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),fp=function(){function defineProperties(e,t){for(var n=0;n0?d[0].map(b):[],right:p.length>0?p[0].map(b):[]},w=[ah,oh].map(function(e){return g.map(function(t,n){return n===g.length-1?_[e]:x[e]})}),k=lp(w,2),C=k[0],S=k[1];if(0===g.length){var P=[ah,oh].map(function(e){return v.map(function(t,n){return 0===n?_[e]:x[e]})}),A=lp(P,2);r=A[0],i=A[1]}else r=v.map(function(){return d.length>0?d[0].map(b):[]}),i=v.map(function(){return p.length>0?p[0].map(b):[]});return s.notify({client:[C,S,r,i],action:"initialized",formalName:"facet-headers"}),{topLeft:C,topRight:S,bottomLeft:r,bottomRight:i}}},{key:"getMatrices",value:function getMatrices(e,t,n,r){return sp({datamodel:e,componentRegistry:n,encoders:r,resolver:this},t)}}]),MatrixResolver}(),dp=function(){function defineProperties(e,t){for(var n=0;n3&&void 0!==arguments[3]?arguments[3]:{},i=void 0,a=e.context.constructor.type(),o=r.payload,u=e.context.data(),c=e.context.metaData(),s=c.getData().schema[0].type,l={},f=e.context._id;l.action=Pp[t]||t,l.sideEffects=Ep[t],l.sourceCanvas=e.context.canvasAlias();var h=e._actions.behavioural[l.action].constructor.mutates();if(null===o.criteria)i=null;else{var d=n.mergedEnter,p=u.filter(function(e){return-1!==d.uids.indexOf(e.id)}).map(function(e){return e.value});if("step"===a||"discrete"===a&&"measure"===s){var y=Object.keys(o.criteria||{})[0];i=(p=u.filter(function(e){return-1!==d.uids.indexOf(e.id)}).map(function(e){return e.range})).length?c.select(function(e){for(var t=!1,n=0;n=p[n][0]&&e[y].value<=p[n][1]);n++);return t},{saveChild:!1}):null}else"gradient"===a?i=ca(c,o.criteria):p.length?i=function assembleModelFromIdentifiers(e,t){var n=[],r=void 0,i=e.getFieldsConfig();return t.length?function(){for(var e=t[0],a=e.length,o=0;o=s+l?[i.invert(s+l-c),i.invert(s+l)]:f-l1&&void 0!==arguments[1]?arguments[1]:{},i=t.config().classPrefix;e.mergedEnter.length||e.mergedExit.length?(n(e.mergedExit,r.className||i+"-legend-brighten",!1),n(e.mergedExit,r.className||i+"-legend-fadeout",!0),n(e.mergedEnter,r.className||i+"-legend-fadeout",!1)):n(e.completeSet,r.className||i+"-legend-fadeout",!1)},brighten:function brighten(e){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},i=t.config().classPrefix;e.mergedEnter.length||e.mergedExit.length?(n(e.mergedEnter,r.className||i+"-legend-brighten",!0),n(e.mergedExit,r.className||i+"-legend-brighten",!1)):n(e.completeSet,r.className||i+"-legend-brighten",!1)}}},Vp=function(){function defineProperties(e,t){for(var n=0;n2&&void 0!==arguments[2]?arguments[2]:{};(0,this._strategies[n.strategy||this._strategy])(e,this)}}],[{key:"formalName",value:function formalName(){return"highlighter"}}]),LegendHighlighter}(),Wp={config:{sanitization:function sanitization(e,t){return na(e._config||{},t)}},data:{},fieldName:{},legendContainer:{},measurement:{sanitization:function sanitization(e,t){var n=na(e._measurement,t);return["padding","border","margin"].forEach(function(e){n[e]=Math.min(n[e]>0?n[e]:0,.1*n.maxWidth,.1*n.maxHeight)}),n}},logicalSpace:{},metaData:{},range:{sanitization:function sanitization(e,t){return e.scale().range(t),e.resetLogicalSpace(),e.store().commit("range",t),t}},scale:{},smartTicks:{},store:{},title:{sanitization:function sanitization(e,t){return na(e._title||{},t)}}},qp="horizontal",Gp="vertical",Yp={height:30,width:30,maxWidth:1/0,maxHeight:1/0,padding:2,margin:2,border:1},Xp={text:"",orientation:function orientation(e){return"left"===e||"right"===e?"left":"center"}},Kp={classPrefix:"muze",borderStyle:"solid",borderColor:"rgba(0,0,0,0)",formatter:{bounds:{lower:"less than",upper:"more than"}},item:{text:{orientation:"right",width:10,formatter:function formatter(e){return e}},icon:{className:"legend-icon",height:20,width:20,color:"rgba(0,0,0,.5)",type:"square"}}},$p=function ICON_MAP(e){return e&&"string"==typeof e?pa(e):e};function legend_helper_defineProperty(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var Qp=function getScaleInfo(e){var t=e.constructor.type();return{scaleType:t,domain:e.uniqueValues(),steps:e.config().stops||1,scaleFn:Mp[t]}},Zp=function getInterpolatedData(e,t){for(var n=[],r=ia()(e[0],e[1]),i=0;i<=t;i++)n[i]=r(i/t);return n},Jp=function getDomainBounds(e,t,n){var r,i=t.scaleFn,a=t.scaleType,o=t.scale,u=n.domain,c=n.domainBounds,s=n.domainLeg,l=n.steps,f=u["lower"===e?0:u.length-1],h=l["lower"===e?0:l.length-1];return legend_helper_defineProperty(r={},a,"size"===a?o[i](f)*o.getScaleFactor():o[i](f)),legend_helper_defineProperty(r,"value",c[e]),legend_helper_defineProperty(r,"id","lower"===e?0:s.length+2),legend_helper_defineProperty(r,"range",[f,h]),r},ey=function(){function defineProperties(e,t){for(var n=0;n0?h.height+s:0,p=h.width+s,y=this.getLabelSpaces(s,c),g=function computeItemSpaces(e,t,n){var r=0,i=0,a={width:0,height:0},o=t.effPadding,u=t.titleWidth,c=t.labelSpaces,s=t.titleHeight,l=t.maxWidth,f=e.item,h=e.align,d=f.icon,p=f.text.orientation,y=[],g=[],v=0;return c.forEach(function(e,t){var c={width:0,height:0},s={width:0,height:0},l=n[t]||{};"left"===p||"right"===p?(e.width+=o,s.width=(l.size?2*Math.sqrt(l.size/Math.PI):d.width)+o,v=Math.max(s.width,v),c.width=e.width+v,e.height=Math.max(e.height,d.height)+o,s.height=e.height,c.height=e.height):(e.width=Math.max(e.width,l.size?2*Math.sqrt(l.size/Math.PI):d.width)+o,s.width=e.width,c.width=e.width,v=Math.max(s.width,v),e.height+=o,s.height=d.height+o,c.height=e.height+s.height),"horizontal"===h?r=Math.max(r,c.height):(r+=c.height,i=Math.max(i,c.width,u)+o),a={width:Math.max(c.width,a.width),height:Math.max(c.height,a.height)},y.push(c),g.push(s)}),y.forEach(function(e,t){"horizontal"===h?(e.height=r,g[t].width=v,"left"===p||"right"===p?(c[t].height=r,g[t].height=r,y[t].width=c[t].width+v):(c[t].width=v,y[t].width=v,c[t].width=v),i=Math.max(i+y[t].width)):(e.width=Math.max(i,l),"top"===p||"bottom"===p?(c[t].width=i,g[t].width=i,v=i):(g[t].width=v,y[t].width=c[t].width+v,c[t].width=a.width-v,i=Math.max(i,e.width)+o))}),i=Math.max(i,u),{totalHeight:r+=s+o,totalWidth:i,itemSpaces:y,iconSpaces:g,maxItemSpaces:a,maxIconWidth:v}}(this.config(),{effPadding:s,titleWidth:p,labelSpaces:y,titleHeight:d,maxWidth:r,maxHeight:i},this.data()),v=g.totalHeight,m=g.totalWidth,b=g.itemSpaces,_=g.iconSpaces,x=g.maxItemSpaces,w=g.maxIconWidth;return this.measurement({width:Math.max(m,t)+f+l,height:Math.max(v,n)+f+l,labelSpaces:y,iconSpaces:_,itemSpaces:b,maxItemSpaces:x,maxIconWidth:w,titleSpaces:{width:Math.min(r,this.measurement().width)-f-l,height:d}}),this}},{key:"getTitleSpace",value:function getTitleSpace(){return this._labelManager.setStyle(Lo(Ao("body"),this.config().classPrefix+"-legend-title")),this._labelManager.getOriSize(this.title().text?this.title().text:"")}},{key:"renderTitle",value:function renderTitle(e){var t=this.measurement(),n=t.titleSpaces,r=t.border,i=t.padding,a=t.width,o=this.config(),u=o.borderStyle,c=o.borderColor;return function titleCreator(e,t,n,r){var i=Eo(e,"table",[1],r.classPrefix+"-legend-title").style("width",n.width+"px").style("height",n.height+"px").style("border-bottom",n.border+"px "+r.borderStyle+" "+r.borderColor).style("text-align",t.orientation instanceof Function?t.orientation(r.position):t.orientation);return Eo(i,"td",[1],r.classPrefix+"-legend-title-text").style("width",n.width+"px").style("height","100%").style("padding",n.padding+"px").text(t.text).node()}(e,this.title(),{height:n.height,width:a,border:r,padding:i,borderStyle:u,borderColor:c},this.config())}},{key:"render",value:function render(){var e=this.firebolt(),t=this.config(),n=t.classPrefix,r=t.borderStyle,i=t.borderColor,a=this.measurement(),o=a.maxWidth,u=a.maxHeight,c=a.width,s=a.height,l=a.margin,f=a.border,h=Eo(Ao(this.mount()),"div",[1],n+"-legend-box");return h.classed(n+"-legend-box-"+this._id,!0),h.style("float","left"),h.style("width",Math.min(o,c)-2*l+"px").style("height",Math.min(u,s)-2*l+"px").style("margin",l+"px").style("border",f+"px "+r+" "+i),this.legendContainer(h.node()),this.renderTitle(h),e.createSelectionSet(this.data().map(function(e){return e.id})),h}},{key:"getCriteriaFromData",value:function getCriteriaFromData(e){var t=this.fieldName();return"measure"===this.metaData().getData().schema[0].type?function simple_legend_defineProperty(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}({},t,e.range):[[t],[e.value]]}}],[{key:"create",value:function create(e){return new SimpleLegend(e)}},{key:"defaultConfig",value:function defaultConfig(){return Kp}},{key:"defaultMeasurement",value:function defaultMeasurement(){return Yp}}]),SimpleLegend}();function position_config_defineProperty(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var oy=(position_config_defineProperty(ty={},"horizontal",{datasets:function datasets(e){return{row:[1],column:e}},itemContainerMeasures:function itemContainerMeasures(e){var t=e.itemSpaces;return{row:{width:e.width+"px",padding:"0px"},column:{width:function width(e,n){return t[n].width+"px"},padding:"0px"}}},getStepSpacesInfo:function getStepSpacesInfo(e){var t=e.maxItemSpaces;return{iconHeight:e.height,iconWidth:t.width,stepPadding:{horizontal:!0,vertical:!1}}}}),position_config_defineProperty(ty,"vertical",{datasets:function datasets(e){return{row:e,column:function column(e){return[e]}}},itemContainerMeasures:function itemContainerMeasures(e,t){var n=e.width;return{row:{width:n+"px",padding:t.padding+"px"},column:{width:n+"px",padding:"0px"}}},getStepSpacesInfo:function getStepSpacesInfo(e){var t=e.maxItemSpaces,n=e.width;return{iconHeight:t.height,iconWidth:n,stepPadding:{horizontal:!1,vertical:!0}}}}),ty),uy=(position_config_defineProperty(ny={},"left",oy.vertical),position_config_defineProperty(ny,"right",oy.vertical),position_config_defineProperty(ny,"top",oy.horizontal),position_config_defineProperty(ny,"bottom",oy.horizontal),ny),cy=(position_config_defineProperty(ry={},"left","end"),position_config_defineProperty(ry,"right","start"),position_config_defineProperty(ry,"top","center"),position_config_defineProperty(ry,"bottom","center"),ry),sy=(position_config_defineProperty(iy={},"left",[Op,"shape"]),position_config_defineProperty(iy,"right",["shape",Op]),position_config_defineProperty(iy,"top",[Op,"shape"]),position_config_defineProperty(iy,"bottom",["shape",Op]),iy),ly=function createLegendSkeleton(e,t,n,r){var i,a,o,u,c=e.measurement(),s=c.margin,l=c.border,f=c.titleSpaces,h=c.width,d=c.height,p=c.maxWidth,y=c.maxHeight;a=d-(f.height+2*s+2*l),i=h-(2*s+2*l),o=y-(f.height+2*s+2*l),u=p-(2*s+2*l);var g=Eo(t,"div",[1],n+"-legend-body");return g.select("."+n+"-legend-overflow").remove(),u&&u4)}(u)?u:$p(u).size(o)(),Eo(a,"path",function(e){return[e]}).attr("d",l)}}return e[1]="circle",createShape(e,t,"circle")}(n,Eo(l,"g",[n[1]],i+"-legend-icon"),n[3]?"circle":"square",o,a).attr("transform","translate("+(u/2-c)+" "+a/2+")").attr("fill",n[2]||s):Eo(l,"rect",[n[1]],i+"-legend-icon").attr("x",0).attr("y",0).attr("width",u).attr("height",a).attr("fill",n[2]||s)},py=function(){function defineProperties(e,t){for(var n=0;na[a.length-1]&&t.push(i[1])):t=Zp(i,a-1),(t=[].concat(gradient_legend_toConsumableArray(new Set(t))).sort(function(e,t){return e-t})).map(function(n,i){var a,u=t[i];return gradient_legend_defineProperty(a={},r,"size"===r?e[o](n)*e.getScaleFactor():e[o](Math.floor(n))),gradient_legend_defineProperty(a,"value",+u.toFixed(2)),gradient_legend_defineProperty(a,"id",i),a}).filter(function(e){return null!==e.value})}},{key:"getLabelSpaces",value:function getLabelSpaces(e){this.config({item:{text:{orientation:this.config().position}}});var t=function createAxis(e){var t=e.data(),n=e.config().align,r=e._cells.AxisCell,i=new Qs({id:"legend-"+e._id,orientation:n===Gp?"right":"bottom",style:e._computedStyle,nice:!1,showAxisName:!1,tickValues:t.map(function(e){return e.value}),fixedBaseline:!1},{labelManager:e._labelManager});return i.domain(gy(t)),i.range([1,1]),(new r).source(i).config({margin:{left:0,bottom:0,top:0,right:0}})}(this),n=t.getLogicalSpace(),r={width:n.width-e,height:n.height-e},i=t.source().domain().length,a=new Array(i).fill(r);return this.axis(t),a}},{key:"getDrawingContext",value:function getDrawingContext(){return{svgContainer:this._legendGradientSvg}}},{key:"render",value:function render(){var e=this.firebolt(),t=function get(e,t,n){null===e&&(e=Function.prototype);var r=Object.getOwnPropertyDescriptor(e,t);if(void 0===r){var i=Object.getPrototypeOf(e);return null===i?void 0:get(i,t,n)}if("value"in r)return r.value;var a=r.get;return void 0!==a?a.call(n):void 0}(GradientLegend.prototype.__proto__||Object.getPrototypeOf(GradientLegend.prototype),"render",this).call(this,this.mount());return function renderGradient(e,t){var n,r,i=e.config(),a=i.align,o=i.classPrefix,u=i.item,c=e.data(),s=vy(t,o,c),l=s.legendContainer,f=s.legendGradSvg,h=s.legendGradCont,d=s.linearGradient,p=s.legendRect,y=e.axis().source().getAxisDimensions().tickLabelDim,g=e.measurement(),v=g.padding,m=g.margin,b=g.border,_=g.titleSpaces,x=g.maxHeight,w=g.maxWidth,k=g.height,C=g.width,S={};n=Math.floor(k-(_.height+2*m+2*b)),r=Math.floor(C-(2*m+2*b)),a===qp?(S.height=u.icon.height,S.width=r-2*v-y.width/2,d.attr("x2","100%").attr("y1","0%"),h.attr("transform","translate( "+y.width/2+" 0)"),my(e,l,n-u.icon.height-v,r-2*v-1),l.classed(o+"-overflow-x",C>w),Mo(l,{height:k+"px",width:Math.min(C,w)+"px",padding:v+"px"}),p.attr("height",S.height),p.attr("width",S.width-y.width/2)):(S.height=n-2*v-y.height/2,S.width=u.icon.width,d.attr("x2","0%").attr("y1","100%"),h.attr("transform","translate(0 "+y.height/2+")"),my(e,l,n-2*v-1,r-u.icon.width-2*v),l.classed(o+"-overflow-y",k>x),Mo(l,{height:Math.min(k,x)+"px",width:C+"px",padding:v+"px"}),p.attr("height",S.height-y.height/2),p.attr("width",S.width)),Mo(f,{height:S.height+"px",width:S.width+"px"}),Mo(p,{fill:"url(#linear-gradient)"}),f.attr("height",S.height),f.attr("width",S.width),e.measurement({gradientDimensions:S}),e._legendGradientSvg=f}(this,t),t.selectAll("div").style("float","left"),e.mapActionsAndBehaviour(),e.createSelectionSet(this.data().map(function(e){return e.id})),t}},{key:"getCriteriaFromData",value:function getCriteriaFromData(e){return[[this.fieldName()],[e.value]]}}],[{key:"create",value:function create(e){return new GradientLegend(e)}},{key:"type",value:function type(){return"gradient"}}]),GradientLegend}(),xy=function(){function defineProperties(e,t){for(var n=0;na[a.length-1]&&(c.upper=[u.bounds.upper+" "+a[a.length-1]])):t=Zp(i,a),t=(t=[].concat(step_legend_toConsumableArray(new Set(t))).sort(function(e,t){return e-t})).map(function(n,i){var a,u=null;return i0&&void 0!==arguments[0]?arguments[0]:{},t=this._registrableComponents,n=na(na({},function defaultPolicy(e){var t=e.map(function(e){return e.alias()});return{behaviours:{"*":function _(e){var n=e.sourceCanvas;return!n||-1!==t.indexOf(n)}}}}(t)),e);return t.forEach(function(e){e.firebolt().crossInteractionPolicy(n)}),this}}]),ActionModel}()),Ny={classPrefix:"muze",interaction:{sideEffect:"individual"},legend:{position:"right",color:{show:!0,padding:1,margin:3,border:1,height:20,width:20},shape:{show:!0,padding:1,margin:3,border:1,height:20,width:20},size:{show:!0,padding:1,margin:3,border:1,height:20,width:20}},showHeaders:!1,minWidth:100,minHeight:100,border:{style:"solid",color:"#d6d6d6",width:2,collapse:!0,spacing:0},autoGroupBy:{disabled:!1}},jy={data:{value:null,meta:{typeCheck:function typeCheck(e){return e instanceof ar.a}}},width:{value:0,meta:{sanitization:Qi,typeCheck:Number.isInteger}},height:{value:0,meta:{sanitization:Qi,typeCheck:Number.isInteger}},minUnitWidth:{value:50,meta:{sanitization:Qi,typeCheck:Number.isInteger}},minUnitHeight:{value:50,meta:{sanitization:Qi,typeCheck:Number.isInteger}},config:{value:null,meta:{typeCheck:"constructor",typeExpected:"Object",sanitization:function sanitization(e,t){var n=na({},t),r=na(n,Ny);return na(r,e)}}}},Iy="width",Dy="height",Ly="top",Ry="left",By="right",zy="bottom",Hy="center",Vy="rowLeft",Uy="rowRight",Wy="colBottom",qy="colTop",Gy="rowSpan",Yy="colSpan",Xy="rowRoot",Ky="columnRoot",$y=function(){function defineProperties(e,t){for(var n=0;n1)return e;var f=o[t-1];if(f&&f.valueOf()===e.valueOf()){var h=n[r-1];return h?h[t].valueOf()===h[t-1].valueOf()?null:e:null}return e}return e},ag=function calcRowSpan(e,t,n,r){var i=1;if(!e||"string"!=typeof e.valueOf())return 1;for(var a=!1;!a;)n[r+i]&&null===n[r+i][t]?i+=1:a=!0;return i},og=function calcColSpan(e,t,n,r){var i=1;if(!e||"string"!=typeof e.valueOf())return 1;for(var a=!1;!a;)null===n[r][t+i]?i+=1:a=!0;return i},ug=function mask(e,t){return e.map(function(n,r){if(t===Vy||t===Uy){for(var i=n.map(function(n,i){return ig(n,i,e,r,t)}),a=[],o=n.length-i.length,u=0;u1&&r.setAvailableSpace(0,r.availHeight()),Ao(this).style("height",r.availHeight()+"px"),n}),l.each(function(e){e.placeholder&&e.placeholder.render(this)}).exit().each(function(e){e.placeholder&&e.placeholder.remove()}),applyBorders(l,r.border,n,a)})}function utils_defineProperty(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function utils_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t0?e[0]:e[1];return n?(r=e[0].length>0?[].concat(utils_toConsumableArray(e[0])):[],r=e[1].length>0?[].concat(utils_toConsumableArray(r),utils_toConsumableArray(e[1])):r):r=r.map(function(t,n){var r=[];return e[0].length>0&&(r=[].concat(utils_toConsumableArray(e[0][n]))),e[1].length>0&&(r=[].concat(utils_toConsumableArray(r),utils_toConsumableArray(e[1][n]))),r}),r},fg=function computeLogicalSpace(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments[1],n=arguments[2],r=t.isTransposed,i=void 0!==r&&r,a=t.unitMeasures,o=function getMeasureInfo(e){return e?{firstMeasure:Dy,secondMeasure:Iy}:{firstMeasure:Iy,secondMeasure:Dy}}(i),u=o.firstMeasure,c=o.secondMeasure,s=e.values,l=function getMinMeasures(e,t){return e?{height:0,width:t.width}:{height:t.height,width:0}}(i,a);if(s[0].key){var f,h=(utils_defineProperty(f={},u,0),utils_defineProperty(f,c,0),f);return s.forEach(function(e){var r=computeLogicalSpace(e,t,n);h[u]=Math.max(h[u],r[u],l[u]),h[c]+=+r[c]}),e.space=h,h}return function getLogicalSpace(e,t,n){var r,i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:[],a=t.firstMeasure,o=t.secondMeasure,u=0,c=0;return e.values.forEach(function(t){var r,s=0,l=0;t.forEach(function(e,t){e.logicalSpace(null);var r=e.getLogicalSpace();l=Math.max(l,+r[o],n[o]),i[t]=Math.max(i[t]||0,r[a]),s+=+i[t]}),c+=l,u=Math.max(u,s),e.space=(utils_defineProperty(r={},o,Math.ceil(c)),utils_defineProperty(r,a,Math.ceil(u)),r)}),utils_defineProperty(r={},o,c),utils_defineProperty(r,a,u),r}(e,{firstMeasure:u,secondMeasure:c},l,n)},hg=function extraCellsRemover(e,t,n){return e.slice(t,-n)},dg={config:{sanitization:function sanitization(e,t){return na(e._config||{},t)}},maxMeasures:{},availableSpace:{},logicalSpace:{}},pg={distribution:[],classPrefix:"muze",isDistributionEqual:!0,unitMeasures:{height:100,width:100,border:1},isTransposed:!1,facet:"primary",extraCellLengths:[]},yg=function(){function defineProperties(e,t){for(var n=0;n1&&void 0!==arguments[1]?arguments[1]:{};!function visual_matrix_classCallCheck(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,VisualMatrix),this._lastLevelKey=0,this._primaryMatrix=e[0]||[],this._secondaryMatrix=e[1]||[],this._maxMeasures=[],this._availableSpace={},Ji(this,dg);var n=Object.assign({},this.constructor.defaultConfig());this.config(na(n,t)),this._breakPointer=this.config().isTransposed?e[0].length:e[0].length>0?e[0][0].length:0,this._layoutMatrix=lg([e[0]||[],e[1]||[]],this.config()),this._tree={key:this.config().isTransposed?Ky:Xy,values:this.createTree()},this._logicalSpace=this.setLogicalSpace()}return yg(VisualMatrix,[{key:"primaryMatrix",value:function primaryMatrix(){return arguments.length?this:this._primaryMatrix}},{key:"secondaryMatrix",value:function secondaryMatrix(){return arguments.length?this:this._secondaryMatrix}},{key:"tree",value:function tree(){return arguments.length?this:this._tree}},{key:"createTree",value:function createTree(){var e=function createTree(e){var t={},n=0,r="primary",i=cg(),a=[],o=e._layoutMatrix,u=e.primaryMatrix(),c=e.secondaryMatrix(),s=e.config(),l=s.isTransposed,f=s.breakPage;if(l){if(r=0===u.length?"primary":0===c.length?"secondary":u.length>=c.length?"primary":"secondary",u.length>0){for(var h=0;h0){for(var d=u.length,p=c.length-1;p>0;p--)a.push(p+d);a.push(d),"primary"===r&&(n=d)}var y;a.forEach(function(e){var t=-1;return i.key(function(n){return t++,n[e].valueOf()+"-"+sg(t,f)})}),y=o[0].map(function(e,t){return o.map(function(e){return e[t]})}),t=i.entries(y)}else{if(r=0===u.length?"primary":0===c.length?"secondary":u.length>=c.length?"primary":"secondary",u.length>0){for(var g=0;g0){for(var v=u.length>0?u[0].length:0,m=c[0].length-1;m>0;m--)a.push(m+v);a.push(v),"primary"===r&&(n=v)}else n=u.length>0?u[0].length-1:0;a.forEach(function(e){var t=-1;return i.key(function(n){return t++,n[e].valueOf()+"-"+sg(t,f)})}),t=i.entries(o)}return{tree:t,lastLevelKey:n}}(this),t=e.tree,n=e.lastLevelKey;return this._lastLevelKey=n,t}},{key:"setLogicalSpace",value:function setLogicalSpace(){var e=this.config().isTransposed,t=this.tree();return function createMatrixEachLevel(e,t){if(e.values[0].key){var n=[];return e.values.forEach(function(e){t?createMatrixEachLevel(e,t).forEach(function(e,t){var r;n[t]=n[t]||[],(r=n[t]).push.apply(r,utils_toConsumableArray(e))}):n.push.apply(n,utils_toConsumableArray(createMatrixEachLevel(e,t)))}),e.matrix=n,n}return e.matrix=t?e.values[0].map(function(t,n){return e.values.map(function(e){return e[n]})}):e.values,e.matrix}(t,e),fg(t,this.config(),this.maxMeasures())}},{key:"getLogicalSpace",value:function getLogicalSpace(){return this.logicalSpace()}},{key:"setAvailableSpace",value:function setAvailableSpace(e,t){this.availableSpace({width:e,height:t});var n=this.tree(),r=this.populateMaxMeasures(Dy,n),i=this.populateMaxMeasures(Iy,n),a=this.calculateDepth(i,r);return this.viewableMatrix=this.createViewPortMatrix(a),this.viewableMeasures=this.redistribute(this.viewableMatrix,e,t),this}},{key:"populateMaxMeasures",value:function populateMaxMeasures(e,t){var n=this,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:[];if(i[r]=Math.max(i[r]||0,t.space[e]),t.values){var a=r+1;t.values.forEach(function(t){t.space&&(i=n.populateMaxMeasures(e,t,a,i))})}return i}},{key:"calculateDepth",value:function calculateDepth(e,t){var n=void 0,r=void 0,i=this.availableSpace(),a=i.height,o=i.width;for(n=0;n0&&void 0!==arguments[0]?arguments[0]:[],t=arguments[1],n=arguments[2],r=arguments[3],i=r._breakPointer,a=r.config().isTransposed,o=n.tree,u=n.layoutMatrix;if(0===t){var c=function breakMatrix(e,t,n){var r=[],i=[];return t?e.forEach(function(e,t){t>=n?i.push(e):r.push(e)}):e.forEach(function(e,t){e.forEach(function(e,a){a>=n?(i[t]=i[t]||[],i[t].push(e)):(r[t]=r[t]||[],r[t].push(e))})}),[r,i]}(o.matrix,a,i);return e.push({matrix:o.matrix,primaryMatrix:c[0],secondaryMatrix:c[1],space:o.space}),e}var s=t-1;return o.values.forEach(function(t){createMatrixInstances(e,s,{tree:t,layoutMatrix:u},r)}),e}(t,e,this.removeExtraCells(),this),t}},{key:"redistributeRowWise",value:function redistributeRowWise(e){var t,n,r=[],i=this.maxMeasures(),a=this.config(),o=a.isDistributionEqual,u=a.distribution,c=a.isTransposed,s=a.gutter,l=e.matrix,f=e.width,h=e.height,d=e.maxHeights,p=e.maxWidths;n=function spaceTakenByColumn(e,t){var n=0,r=0;return e.forEach(function(e){var i=e[t].getLogicalSpace();r=Math.max(r,i.width),n+=i.height}),{width:r,height:n}}(l,this._lastLevelKey).height;var y=i.reduce(function(e,t){return e+=t});return r=y>0?i.map(function(e){return e+e/y*(f-y)}):i.map(function(){return 0}),t=function getDistributedHeight(e){var t,n=0,r=0,i=e.isTransposed,a=e.distribution,o=e.availableHeight,u=e.height,c=e.isDistributionEqual,s=e.gutter,l=e.matrix,f=e.cIdx;a&&void 0!==a[0]&&(n=a.reduce(function(e,t){return e+=t})),s&&void 0!==s[0]&&(r=s.reduce(function(e,t){return e+=t})),t=o-Math.floor(o*r);var h=l.length;return l.map(function(r,o){var s=r[f].getLogicalSpace().height,l=s+s/u*(t-u);return i||(a.length>0&&h===a.length?l=t*a[o]/n:(c||0===e.height)&&(l=t/h)),Math.floor(l)})}({matrix:l,cIdx:this._lastLevelKey,height:n,availableHeight:h,isDistributionEqual:o,distribution:u,isTransposed:c,gutter:s}),p.push(r),d.push(t),{maxWidths:p,maxHeights:d}}},{key:"redistributeColumnWise",value:function redistributeColumnWise(e){var t=[],n=e.matrix,r=e.width,i=e.maxHeights,a=e.maxWidths,o=this.config().unitMeasures.border,u=function spaceTakenByRow(e){var t=0,n=0;return e.forEach(function(e){var r=e.getLogicalSpace();t=Math.max(t,r.height),n+=r.width}),{width:n,height:t}}(n[this._lastLevelKey]).width,c=function getDistributedWidth(e,t){var n=e.availableWidth,r=e.width,i=e.row,a=t.isDistributionEqual,o=t.isTransposed,u=t.distribution,c=0;return u&&u[0]&&(c=u.reduce(function(e,t){return e+=t})),i.map(function(e,t){var s=e.getLogicalSpace().width,l=s+s/r*(n-r);if(o)if(u.length>0)l=n*u[t]/c;else if(a||0===r){var f=i.length;l=n/f}return Math.floor(l)})}({row:n[this._lastLevelKey],width:u,availableWidth:r},this.config());n.forEach(function(e,n){return e.forEach(function(e,r){var i=e.getLogicalSpace().height;e.setAvailableSpace(c[r]-o,i),t[n]=Math.max(t[n]||0,e.getLogicalSpace().height)})}),i.length>0&&(t=t.map(function(e,t){return Math.max(e,i[0][t])})),i.push(t);for(var s=0;s=m&&(r[0][1][n[1]-m]=a[0],i[0][1]=(i[0][1]||0)+a[0]),n[1]===t._lastLevelKey&&(r[1][0][n[0]]=a[1],r[1][1][n[0]]=a[1])})}),{heights:g,widths:v,rowHeights:p,columnWidths:y}}}],[{key:"defaultConfig",value:function defaultConfig(){return pg}}]),VisualMatrix}(),vg=function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function sliceIterator(e,t){var n=[],r=!0,i=!1,a=void 0;try{for(var o,u=e[Symbol.iterator]();!(r=(o=u.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){i=!0,a=e}finally{try{!r&&u.return&&u.return()}finally{if(i)throw a}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}();function layout_helper_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t0&&(n=[].concat(layout_helper_toConsumableArray(w),layout_helper_toConsumableArray(P),layout_helper_toConsumableArray(O))),E.length>0&&(r=[].concat(layout_helper_toConsumableArray(C),layout_helper_toConsumableArray(E),layout_helper_toConsumableArray(F))),k.length>0&&k[0].length>0&&(i=k.map(function(e,t){return[].concat(layout_helper_toConsumableArray(w[t]),layout_helper_toConsumableArray(e),layout_helper_toConsumableArray(C[t]))})),T.length>0&&T[0].length>0&&(a=T.map(function(e,t){return[].concat(layout_helper_toConsumableArray(O[t]),layout_helper_toConsumableArray(e),layout_helper_toConsumableArray(F[t]))})),e.rowMatrix(new gg([n,r],{isDistributionEqual:s,distribution:h.rows,gutter:f.rows,unitMeasures:{width:v,height:g,border:d.width},breakPage:p.rows.map(function(e){return e+Math.max(w.length,C.length)}),extraCellLengths:[w.length,O.length]})),o=w.length>0?w[0].length:O.length>0?O[0].length:0,u=C.length>0?C[0].length:F.length>0?F[0].length:0,e.columnMatrix(new gg([i,a],{isDistributionEqual:l,distribution:h.columns,gutter:f.columns,isTransposed:!0,unitMeasures:{width:v,height:g,border:d.width},breakPage:p.columns,extraCellLengths:[o,u]})),e.centerMatrix(A),t}(this,e),this):function get(e,t,n){null===e&&(e=Function.prototype);var r=Object.getOwnPropertyDescriptor(e,t);if(void 0===r){var i=Object.getPrototypeOf(e);return null===i?void 0:get(i,t,n)}if("value"in r)return r.value;var a=r.get;return void 0!==a?a.call(n):void 0}(GridLayout.prototype.__proto__||Object.getPrototypeOf(GridLayout.prototype),"matrices",this).call(this,e)}},{key:"triggerReflow",value:function triggerReflow(){return function computeLayoutMeasurements(e){var t,n,r,i,a,o=e.rowMatrix(),u=e.columnMatrix(),c=e.centerMatrix(),s=e.measurement(),l=s.width,f=s.height,h=e.config().border,d=e.matrices(),p=d.top,y=d.bottom,g=function getMatrixMeasurement(e,t){return e?e.getLogicalSpace()[t]:0}(o,Iy),v=h.width,m=l-g-v;setMatrixMeasurement(u,Iy,m);var b=u.getViewableSpaces();bg(e,"column",b);var _=b[e.config().columnPointer],x=_.height.primary+_.height.secondary,w=f-x;setMatrixMeasurement(o,Dy,w);var k=o.getViewableSpaces();bg(e,"row",k);var C=(t=[]).concat.apply(t,computations_toConsumableArray(k.map(function(e){return e.rowHeights.primary}))),S=(n=[]).concat.apply(n,computations_toConsumableArray(k.map(function(e){return e.columnWidths.primary}))),P=(r=[]).concat.apply(r,computations_toConsumableArray(k.map(function(e){return e.columnWidths.secondary}))),A=u.getViewableSpaces(),E=(i=[]).concat.apply(i,computations_toConsumableArray(A.map(function(e){return e.columnWidths.primary}))),M=A[0].rowHeights.primary,O=(a=[]).concat.apply(a,computations_toConsumableArray(A.map(function(e){return e.rowHeights.secondary})));c.forEach(function(e,t){e.forEach(function(e,n){e.setAvailableSpace(E[n]-v,C[t]-v)})}),mg(p[0],S,M),mg(p[2],P,M),mg(y[0],S,O),mg(y[2],P,O)}(this),this.setViewInformation(),this}},{key:"gotoPage",value:function gotoPage(e,t){var n=e.toLowerCase(),r=this.getViewInformation().viewMatricesInfo[n+"Pages"],i=Math.min(Math.max(1,t),r);return this.config(function layout_defineProperty(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}({},n+"Pointer",i-1)),this.setViewInformation(),this.renderGrid(),this}},{key:"pages",value:function pages(e){var t=this.getViewInformation().viewMatricesInfo,n=e.toLowerCase();return{totalPages:t[n+"Pages"],currentPage:this.config()[n+"Pointer"]+1}}},{key:"setViewInformation",value:function setViewInformation(){var e=this.config(),t=e.rowPointer,n=e.columnPointer,r=e.border,i=function getViewMatrices(e,t,n){for(var r=e.rowMatrix(),i=e.columnMatrix(),a=e.centerMatrix(),o=e.matrices(),u=r.getViewableData(),c=i.getViewableData(),s={row:0,column:0},l=t-1;l>=0;l--){var f=Math.max(u[l].primaryMatrix.length,u[l].secondaryMatrix.length);s.row+=f}for(var h=n-1;h>=0;h--){var d=c[h],p=d.primaryMatrix,y=d.secondaryMatrix,g=Math.max(p[0]?p[0].length:0,y[0]?y[0].length:0);s.column+=g}o.top[1]=c[n].primaryMatrix,o.bottom[1]=c[n].secondaryMatrix,o.center[0]=u[t].primaryMatrix,o.center[2]=u[t].secondaryMatrix;var v=Math.max(o.center[0].length,o.center[2].length),m=Math.max(o.top[1][0]?o.top[1][0].length:0,o.bottom[1][0]?o.bottom[1][0].length:0);return o.center[1]=a.slice(s.row,s.row+v).map(function(e){return e.slice(s.column,s.column+m)}),{matrices:o,rowPages:u.length,columnPages:c.length}}(this,t,n),a=function getViewMeasurements(e){var t=e.rowMatrix(),n=e.columnMatrix(),r=e.measurement(),i=r.width,a=r.height,o=e.config(),u=o.columnPointer,c=o.rowPointer,s=t.getViewableSpaces()[c].width,l=s.primary,f=s.secondary,h=n.getViewableSpaces()[u].height,d=h.primary,p=h.secondary;return{viewWidth:[l,i-(l+f),f],viewHeight:[d,a-(d+p),p]}}(this);return a.border=r,this.viewInfo={viewMatricesInfo:i,layoutDimensions:a},this}},{key:"getViewInformation",value:function getViewInformation(){return this.viewInfo}},{key:"renderGrid",value:function renderGrid(e){if(this.mountPoint(e),!this.mountPoint())return this;var t=this.getViewInformation(),n=t.viewMatricesInfo,r=t.layoutDimensions;return function renderMatrices(e,t,n){var r=t.top,i=t.center,a=t.bottom,o=e.config().classPrefix,u=e.measurement().width,c=e.mountPoint();Eo(c,"div",[{type:Ly,matrix:r},{type:Hy,matrix:i},{type:zy,matrix:a}],o+"-grid-layout-row").each(function(e,t){var r=Ao(this);r.classed(o+"-grid-layout-row-"+t,!0),renderMatrix(e.matrix,r,e.type,n,o)}).style(Iy,Math.ceil(u)+"px")}(this,n.matrices,r),this}}],[{key:"defaultMeasurement",value:function defaultMeasurement(){return ng}},{key:"defaultConfig",value:function defaultConfig(){return tg}},{key:"create",value:function create(){return new GridLayout(null,null,this.defaultMeasurement(),this.defaultConfig())}}]),GridLayout}(),wg=function(){function defineProperties(e,t){for(var n=0;n0?o:i,v),P=Math.max(u>0?u:a,g),A=function createHeaders(e,t,n){var r=0,i={};return t>=200&&n>=200&&["title","subtitle"].forEach(function(t){var n=e[t](),a=function resolveTitleSubTitleContent(e){return"function"!=typeof e||e._sanitize?function escapeHTML(e){var t={"&":"&","<":"<",">":">",'"':""","'":"'","/":"/"};return(""+e).replace(/[&<>"'/]/g,function(e){return t[e]})}(e()):e()}(n[0]);if(a.length){var o=n[1];o.width=e.width(),o.content=a;var u=lv(o,t,e.dependencies().smartlabel,e[t+"Cell"]),c=u.height,s=u.cell;i[t+"Cell"]=s,e._composition[t]=s,r+=c+o.padding}}),{headerHeight:r,headers:i}}(e,S,P),E=A.headers,M=A.headerHeight,O=function createLegend(e,t,n,r){var i={height:n,width:r,headerHeight:t},a=e.config().legend,o=a.show,u=a.position;a.classPrefix=e.config().classPrefix;var c="left"===u||"right"===u?"vertical":"horizontal";return a.show=o?"vertical"===c&&r>200||"horizontal"===c&&n>200:o,a.align=c,fv(a,e,i,e.legends||[])}(e,M,S,P);e._composition.legend={},O.forEach(function(t){e._composition.legend[t.scaleType]=t.legend});var T=function getLegendSpace(e,t,n,r){var i={width:0,height:0};return e.map(function(e){return e.legend.measurement()}).forEach(function(e){var a,o;o=Math.min(e.width,e.maxWidth),a=Math.min(e.height,e.maxHeight),"horizontal"===t.align?i.width+o>r?(i.width=r,i.height+=a):(i.width+=o,i.height=Math.max(i.height,a)):i.height+a>n?(i.height=a,i.width+=o):(i.height+=a,i.width=Math.max(i.width,o))}),"horizontal"===t.align&&(i.width=r),i}(O,_,S,P),F="left"===k||"right"===k?T.width:0,N="top"===k||"bottom"===k?T.height:0,j={headers:E,legends:O,canvases:[e],rows:h,columns:d,values:p,cornerMatrices:c.cornerMatrices()},I={mountSpace:{height:i,width:a},headerHeight:M,legendSpace:T,canvasWidth:P,canvasHeight:S,width:P-F,height:S-M-N,minUnitHeight:e.minUnitHeight(),minUnitWidth:e.minUnitWidth()};return{layoutConfig:n=na(n,{classPrefix:m,showHeaders:b,border:na(c.metaData().border,e.config().border),layoutArrangement:C,legend:_,title:x,subtitle:w,isColumnSizeEqual:l,isRowSizeEqual:f}),components:j,measurement:I}},dv={position:"top",align:"left",padding:8},pv={position:"top",align:"left",padding:16};function canvas_local_options_defineProperty(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var yv=(canvas_local_options_defineProperty(ov={},"rows",{value:null,meta:{typeCheck:"constructor",typeExpected:"Array"}}),canvas_local_options_defineProperty(ov,"columns",{value:null,meta:{typeCheck:"constructor",typeExpected:"Array"}}),canvas_local_options_defineProperty(ov,"color",{value:null,meta:{typeCheck:"constructor",typeExpected:"Object",sanitization:function sanitization(e){return"string"==typeof e?{field:e}:e}}}),canvas_local_options_defineProperty(ov,"shape",{value:null,meta:{typeCheck:"constructor",typeExpected:"Object",sanitization:function sanitization(e){return"string"==typeof e?{field:e}:e}}}),canvas_local_options_defineProperty(ov,"size",{value:null,meta:{typeCheck:"constructor",typeExpected:"Object",sanitization:function sanitization(e){return"string"==typeof e?{field:e}:e}}}),canvas_local_options_defineProperty(ov,"detail",{value:[],meta:{typeCheck:"constructor",typeExpected:"Array"}}),canvas_local_options_defineProperty(ov,"layers",{value:null,meta:{typeCheck:"constructor",typeExpected:"Array"}}),canvas_local_options_defineProperty(ov,"transform",{value:null,meta:{typeCheck:"constructor",typeExpected:"Object"}}),canvas_local_options_defineProperty(ov,"mount",{value:null,meta:{sanitization:function sanitization(e){return"string"==typeof e?Ao(e).node():e}}}),ov),gv=(canvas_local_options_defineProperty(uv={},"title",{value:[null,null],meta:{typeCheck:["constructor","constructor"],typeExpected:["Function","Object"],spreadParams:!0,sanitization:[function(e){if("string"==typeof e){var n=function t(){return e};return n._sanitized=!0,n}return e},function(e){var t=na({},dv);return na(t,e)}]}}),canvas_local_options_defineProperty(uv,"subtitle",{value:[null,null],meta:{typeCheck:["constructor","constructor"],typeExpected:["Function","Object"],spreadParams:!0,sanitization:[function(e){if("string"==typeof e){var t=function sub(){return e};return t._sanitized=!0,t}return e},function(e){var t=na({},pv);return na(t,e)}]}}),uv),vv=function renderHeader(e,t,n,r){var i=r[n+"Cell"],a=e[""+n],o=a.position,u=a.align,c=a.padding,s=t.selectAll("."+e.classPrefix+"-inner-container").data([n]);s.exit().remove();var l=s.enter().append("div").merge(s);l.classed(e.classPrefix+"-inner-container",!0),i&&i.render(l.node()),l.selectAll("div").classed(e.classPrefix+"-inner-content",!0),l.style("width","100%"),a&&i&&l.style("float","left").style("text-align",u).style("padding-"+("top"===o?"bottom":"top"),c+"px")},mv=function renderComponents(e,t,n,r){var i=e.mount(),a=t.headers,o=t.legends,u=n.classPrefix,c=function getSkeletons(e,t,n){var r=t.layoutArrangement,i=t.classPrefix,a=r.headers,o=r.legends,u=n.canvasWidth,c=n.canvasHeight,s=Ao(e),l={},f=Eo(s,"div",[1],i+"-viz").style("width",u+"px").style("height",c+"px").selectAll("."+i+"-container").data(a);f.exit().remove();var h=f.enter().append("div").merge(f).attr("class",i+"-container").style("width",u+"px").style("padding","nullpx").style("margin",null).each(function(e){l[e]=Ao(this).classed(i+"-"+e+"-container",!0)}).selectAll("."+i+"-inner-container").data(function(e){return"group"===e?o:[]});return h.exit().remove(),h.enter().append("div").merge(h).attr("class",i+"-inner-container").style("width","auto").style("height","auto").each(function(e){l[e]=Ao(this).classed(i+"-"+e+"-container",!0)}),l}(i,n,r),s=c.title,l=c.legend,f=c.subtitle,h=c.layout,d=function prepareGridContainer(e,t,n,r){if(e){var i=t.height,a=t.width,o=Ao(e).selectAll("."+n+"-inner-content").data(["layout"],function(e){return e});o.exit().remove();var u=o.enter().append("div").merge(o).attr("class",n+"-inner-content").classed(n+"-grid-layout",!0).attr("id",n+"-grid-layout-"+r).style("height",i+"px").style("padding",null).style("width",Math.ceil(a)+"px"),c=u.selectAll("."+n+"-layout-grid-container").data(["layout2"]);c.exit().remove();var s=c.enter().append("div").merge(c);return s.classed(n+"-layout-grid-container",!0).attr("id",n+"-layout-grid-container-"+r).style("height",i+"px").style("width",Math.ceil(a)+"px"),{mount:s,container:u}}}(h.node(),r,u,e.alias()).mount,p=e.layout().getViewInformation().layoutDimensions.viewWidth[0];r.padding=p,function setLabelRotationForAxes(e){var t=0,n=e.xAxes()||[];!function(){for(var e=0;ev?(g++,m=0,v=y):g<0&&g++,i[g]=i[g]||[],v-=Math.min(t.measurement().height,v),m=Math.max(Math.min(t.measurement().width,t.measurement().maxWidth),m),i[g].push({legend:t,legendHeight:y,legendWidth:m})});var b=Eo(h,["div"],i,l+"-legend-section").each(function(e,t){return Ao(void 0).classed(l+"-legend-section-"+t,!0)}).classed(l+"-legend-vertical-section",!0).style("width",function(e){return e[0].legendWidth+"px"});Eo(b,["div"],function(e){return e},l+"-legend-components",{},function(e){return e.legend.id()}).each(function(e){e.legend.mount(this)}).style("width",function(e){return e.legendWidth+"px"})}else{var _=Eo(h,"div",[1],l+"-legend-section").classed(l+"-legend-horizontal-section",!0).classed(l+"-legend-section-0",!0).style("width",p+"px");Eo(_,"div",n,l+"-legend-components",{},function(e){return e.legend.id()}).each(function(e){e.legend.mount(this)}).style("width",function(e){return e.legend.measurement().width+"px"})}}(n,l,o,r),function shiftHeaders(e,t,n,r){var i=e.classPrefix,a=e.title,o=e.subtitle,u=e.legend,c=n.legendSpace;t+="left"===u.position?c.width:0,a&&Ao(r).select("."+i+"-title-container").style("width","left"===a.align?"calc(100% - "+t+"px":"100%").style("margin-left","left"===a.align?t+"px":0),o&&Ao(r).select("."+i+"-subtitle-container").style("width","left"===o.align?"calc(100% - "+t+"px":"100%").style("margin-left","left"===o.align?t+"px":0),Ao(r).select("."+i+"-legend-horizontal-section").style("margin-left",t+"px").style("width",c.width-t+"px").selectAll("."+i+"-legend-body, ."+i+"-legend-title").style("max-width",c.width-t+"px"),Ao(r).select("."+i+"-legend-vertical-section").style("margin-left",null).selectAll("."+i+"-legend-body, ."+i+"-legend-title").style("max-width",null)}(n,p,r,i)}),e.composition().visualGroup.matrixInstance().value.each(function(e){e.valueOf().parentContainer(h.node())})};function canvas_helper_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t",keywords:["datamodel","data","relational","algebra","model","muze","fusioncharts","table","tabular","operation"],repository:{type:"git",url:"https://github.com/chartshq/datamodel.git"},contributors:[{name:"Akash Goswami",email:"akash@charts.com"},{name:"Subhash Haldar",email:"subhash@charts.com"},{name:"Rousan Ali",email:"rousan@charts.com",url:"https://rousan.io"},{name:"Ujjal Kumar Dutta",email:"ujjal@charts.com"}],dependencies:{"d3-dsv":"^1.0.8"},devDependencies:{"babel-cli":"6.26.0","babel-core":"^6.26.3","babel-eslint":"6.1.2","babel-loader":"^7.1.4","babel-plugin-transform-runtime":"^6.23.0","babel-preset-env":"^1.7.0","babel-preset-es2015":"^6.24.1","babel-preset-flow":"^6.23.0",chai:"3.5.0","cross-env":"^5.0.5",eslint:"3.19.0","eslint-config-airbnb":"15.1.0","eslint-plugin-import":"2.7.0","eslint-plugin-jsx-a11y":"5.1.1","eslint-plugin-react":"7.3.0","istanbul-instrumenter-loader":"^3.0.0",jsdoc:"3.5.5",json2yaml:"^1.1.0",karma:"1.7.1","karma-chai":"0.1.0","karma-chrome-launcher":"2.1.1","karma-coverage-istanbul-reporter":"^1.3.0","karma-mocha":"1.3.0","karma-spec-reporter":"0.0.31","karma-webpack":"2.0.3",marked:"^0.5.0",mocha:"3.4.2","mocha-webpack":"0.7.0","transform-runtime":"0.0.0",webpack:"^4.12.0","webpack-cli":"^3.0.7","webpack-dev-server":"^3.1.4"},scripts:{test:"npm run lint && npm run ut",ut:"karma start karma.conf.js",utd:"karma start --single-run false --browsers Chrome karma.conf.js ",build:"webpack --mode production",start:"webpack-dev-server --config webpack.config.dev.js --mode development --open",lint:"eslint ./src","lint-errors":"eslint --quiet ./src",docs:"rm -rf yaml && mkdir yaml && jsdoc -c jsdoc.conf.json"}}},function(e,t,n){var r=n(2);e.exports=r.default?r.default:r},function(n,c,f){"use strict";f.r(c);var p={};f.r(p),f.d(p,"DataFormat",function(){return b}),f.d(p,"DimensionSubtype",function(){return _}),f.d(p,"MeasureSubtype",function(){return C}),f.d(p,"FieldType",function(){return P}),f.d(p,"FilteringMode",function(){return A});var y={};f.r(y),f.d(y,"DSVArr",function(){return Je}),f.d(y,"DSVStr",function(){return lt}),f.d(y,"FlatJSON",function(){return ft}),f.d(y,"Auto",function(){return ht});var g={};f.r(g),f.d(g,"sum",function(){return Et}),f.d(g,"avg",function(){return Mt}),f.d(g,"min",function(){return Ot}),f.d(g,"max",function(){return Tt}),f.d(g,"first",function(){return Ft}),f.d(g,"last",function(){return Nt}),f.d(g,"count",function(){return jt}),f.d(g,"sd",function(){return It});var b={FLAT_JSON:"FlatJSON",DSV_STR:"DSVStr",DSV_ARR:"DSVArr",AUTO:"Auto"},_={CATEGORICAL:"categorical",TEMPORAL:"temporal",GEO:"geo"},C={DISCRETE:"discrete"},P={MEASURE:"measure",DIMENSION:"dimension"},A={NORMAL:"normal",INVERSE:"inverse",ALL:"all"};function l(e,t){e.length>0&&e.split(",").forEach(function(e){var n=e.split("-"),r=+n[0],i=+(n[1]||n[0]);if(i>=r)for(var a=r;a<=i;a+=1)t(a)})}var O=function(){function e(e,t){for(var n=0;n=0;)o=e[a+1],-1!==r.indexOf(o)&&i.push({index:a,token:o});return i},m.formatAs=function(e,t){var n,r=h(e),i=m.findTokens(t),a=m.getTokenDefinitions(),o=String(t),u=m.TOKEN_PREFIX,c=void 0,s=void 0,l=void 0;for(l=0,n=i.length;l=0;h--)(s=a[h].index)+1!==f.length-1?(void 0===u&&(u=f.length),l=f.substring(s+2,u),f=f.substring(0,s+2)+RegExp.escape(l)+f.substring(u,f.length),u=s):u=s;for(h=0;h1){r=Math.abs(n[1]-n[0]);for(var i=2,a=n.length;i3&&void 0!==arguments[3]&&arguments[3],i=arguments.length>4&&void 0!==arguments[4]?arguments[4]:ye.CROSS,a=[],o=[],u=n||K,c=e.getFieldspace(),s=t.getFieldspace(),f=c.name,h=s.name,d=c.name+"."+s.name,p=L(c,s);if(f===h)throw new Error("DataModels must have different alias names");return c.fields.forEach(function(e){var t=E({},e.schema);-1===p.indexOf(t.name)||r||(t.name=c.name+"."+t.name),a.push(t)}),s.fields.forEach(function(e){var t=E({},e.schema);-1!==p.indexOf(t.name)?r||(t.name=s.name+"."+t.name,a.push(t)):a.push(t)}),l(e._rowDiffset,function(e){var n=!1,d=void 0;l(t._rowDiffset,function(t){var l=[],y={};y[f]={},y[h]={},c.fields.forEach(function(t){l.push(t.data[e]),y[f][t.name]=t.data[e]}),s.fields.forEach(function(e){-1!==p.indexOf(e.schema.name)&&r||l.push(e.data[t]),y[h][e.name]=e.data[t]});var g=Ke(y[f]),v=Ke(y[h]);if(u(g,v)){var m={};l.forEach(function(e,t){m[a[t].name]=e}),n&&ye.CROSS!==i?o[d]=m:(o.push(m),n=!0,d=e)}else if((i===ye.LEFTOUTER||i===ye.RIGHTOUTER)&&!n){var b={},_=c.fields.length-1;l.forEach(function(e,t){b[a[t].name]=t<=_?e:null}),n=!0,d=e,o.push(b)}})}),new At(o,a,{name:d})}function z(e,t){var n=""+e,r=""+t;return nr?1:0}function X(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:z;return e.length>1&&function e(t,n,r,i){if(r===n)return t;var a=n+Math.floor((r-n)/2);return e(t,n,a,i),e(t,a+1,r,i),function(e,t,n,r,i){for(var a=e,o=[],u=t;u<=r;u+=1)o[u]=a[u];for(var c=t,s=n+1,l=t;l<=r;l+=1)c>n?(a[l]=o[s],s+=1):s>r?(a[l]=o[c],c+=1):i(o[c],o[s])<=0?(a[l]=o[c],c+=1):(a[l]=o[s],s+=1)}(t,n,a,r,i),t}(e,0,e.length-1,t),e}function Q(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);to?"desc"===t?-1:1:0}}return i}function Z(e,t){var n=new Map,r=[];return e.forEach(function(e){var i=e[t];n.has(i)?r[n.get(i)][1].push(e):(r.push([i,[e]]),n.set(i,r.length-1))}),r}function ee(e,t,n){var r={label:e[0]};return t.reduce(function(t,r,i){return t[r]=e[1].map(function(e){return e[n[i].index]}),t},r),r}function ne(e,t){var n={},r=[],i=[],a=[],o=e.getFieldspace(),u=t.getFieldspace(),c=o.fieldsObj(),s=u.fieldsObj(),f=o.name+" union "+u.name;if(!M(e._colIdentifier.split(",").sort(),t._colIdentifier.split(",").sort()))return null;function d(e,t,r){l(e._rowDiffset,function(e){var o={},u="";i.forEach(function(n){var r=t[n].data[e];u+="-"+r,o[n]=r}),n[u]||(r&&a.push(o),n[u]=!0)})}return e._colIdentifier.split(",").forEach(function(e){var t=c[e];r.push(E({},t.schema)),i.push(t.schema.name)}),d(t,s,!1),d(e,c,!0),new At(a,r,{name:f})}function re(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);tn&&(n=e)}),[t,n]}(this.data)}},{key:"parse",value:function value(e){return e=parseFloat(e,10),Number.isNaN(e)?null:e}},{key:"unit",value:function value(){return this.fieldUnit}},{key:"scale",value:function value(){return this.fieldScale}},{key:"numberFormat",value:function value(){var e=this.fieldNumberformat;return function(t){return e(t)}}},{key:"defAggFn",value:function value(){return this.fieldDefAggFn}}]),t}(),Ee=function(){function e(e,t){for(var n=0;n=a?c=!0:(r=e.charCodeAt(o++))===at?l=!0:r===ot&&(l=!0,e.charCodeAt(o)===at&&++o),e.slice(i+1,t-1).replace(/""/g,'"')}for(;o2&&void 0!==arguments[2]?arguments[2]:{},i=arguments[3],a=void 0;t!==fe?(a={op:t,meta:r,criteria:i},e._derivation.push(a)):(a=[].concat(Ge(i)),e._derivation.length=0,(n=e._derivation).push.apply(n,Ge(a)))},yt=function ze(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=n.operation||"and",i=n.filterByMeasure||!1,a=[];a=t.length?t.map(function(e){return function(e){var t=e.getData(),n=t.schema,r=e.getFieldsConfig(),a=e.getFieldspace().fieldsObj(),o=t.data,u=Object.values(r).reduce(function(e,t){return e[t.def.name]=a[t.def.name].domain(),e},{});return function(e){return!!o.length&&o.some(function(t){return n.every(function(n){if(!(n.name in e))return!0;var a=e[n.name].valueOf();if(i&&n.type===P.MEASURE)return a>=u[n.name][0]&&a<=u[n.name][1];if(n.type!==P.DIMENSION)return!0;var o=r[n.name].index;return t[o]===e[n.name].valueOf()})})}}(e)}):[function(){return!1}];return"and"===r?e.clone(!1,!1).select(function(e){return a.every(function(t){return t(e)})},{saveChild:!1,mode:A.ALL}):e.clone(!1,!1).select(function(e){return a.some(function(t){return t(e)})},{mode:A.ALL,saveChild:!1})},gt=function Xe(e,t,n,r){var i=e.clone(r.saveChild),a=function(e,t,n,r){var i=[],a=-1,o=void 0,c=function u(e){return n(qe(t,e),e)};return r.mode===A.INVERSE&&(c=function u(e){return!n(qe(t,e))}),l(e,function(e){c(e)&&(-1!==a&&e===a+1?(o=i.length-1,i[o]=i[o].split("-")[0]+"-"+e):i.push(""+e),a=e)}),i.join(",")}(i._rowDiffset,i.getPartialFieldspace().fields,t,n);return i._rowDiffset=a,i.__calculateFieldspace().calculateFieldsConfig(),r.saveChild&&pt(i,ce,{config:n},t),i},vt=function Qe(e,t,n,r){var i=e.clone(n.saveChild),a=t;return n.mode===A.INVERSE&&(a=r.filter(function(e){return-1===t.indexOf(e)})),i._colIdentifier=a.join(","),i.__calculateFieldspace().calculateFieldsConfig(),n.saveChild&&pt(i,se,{projField:t,config:n,actualProjField:a},null),i},mt=function $e(e,t,n,r){r=Object.assign(Object.assign({},Ze),r);var i=y[r.dataFormat];if(!i||"function"!=typeof i)throw new Error("No converter function found for "+r.dataFormat+" format");var a=i(t,r),o=dt(a,2),u=o[0],c=o[1],s=Ue(c,n,u),l=Y.createNamespace(s,r.name);return e._partialFieldspace=l,e._rowDiffset=c.length&&c[0].length?"0-"+(c[0].length-1):"",e._colIdentifier=n.map(function(e){return e.name}).join(),e},bt=function Ze(e,t){for(var n=0;n2&&void 0!==arguments[2]?arguments[2]:{},i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},a=i.nonTraversingModel,o=i.excludeModels||[];t!==a&&((!o.length||-1===o.indexOf(t))&&t.handlePropagation(n,r),t._children.forEach(function(t){var a=_t(n,t),o=dt(a,2),u=o[0],c=o[1];e(t,[u,c],r,i)}))},wt=function nt(e,t,n,r){var i=void 0,a=void 0,o=n.propagationNameSpace,u=n.propagateToSource,c=n.sourceId,s=r.propagateInterpolatedValues,l=[];if(null===e&&!0!==r.persistent)l=[{criteria:[]}];else{var f,h=Object.values(o.mutableActions);!1!==u&&(h=h.filter(function(e){return e.config.sourceId!==c}));var d=h.filter(function(e){return(r.filterFn||function(){return!0})(e,r)}).map(function(e){return e.config.criteria}),p=[];if(!1!==u){var y=Object.values(o.mutableActions);y.forEach(function(e){var t=e.config;!1===t.applyOnSource&&t.action===r.action&&t.sourceId!==c&&(p.push(e.model),(i=y.filter(function(t){return t!==e}).map(function(e){return e.config.criteria})).length&&l.push({criteria:i,models:e.model,path:function e(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];return null!==t._parent&&(n.push(t),e(t._parent,n)),n}(e.model)}))})}i=(f=[]).concat.apply(f,[].concat(Ge(d),[e])).filter(function(e){return null!==e}),l.push({criteria:i,excludeModels:[].concat(p,Ge(r.excludeModels||[]))})}var g=t.model,v=Object.assign({sourceIdentifiers:e,propagationSourceId:c},r),m=t.groupByModel;s&&m&&(a=yt(m,i,{filterByMeasure:s}),xt(m,a,v)),l.forEach(function(e){var t=yt(g,e.criteria),n=e.path;if(n){var r=function(e,t){for(var n=0,r=t.length;n0&&void 0!==arguments[0])||arguments[0],t=void 0;if(!1===(!(arguments.length>1&&void 0!==arguments[1])||arguments[1])){var n=this.getData({getAllFields:!0}),r=n.data,i=n.schema,a=r.map(function(e){var t={};return i.forEach(function(n,r){t[n.name]=e[r]}),t});t=new this.constructor(a,i)}else t=new this.constructor(this);return e&&this._children.push(t),t}},{key:"project",value:function value(e,t){var n={mode:A.NORMAL,saveChild:!0};t=Object.assign({},n,t);var r=this.getFieldsConfig(),i=Object.keys(r),a=t.mode,o=e.reduce(function(e,t){return"RegExp"===t.constructor.name?e.push.apply(e,function(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t1&&void 0!==arguments[1]?arguments[1]:[];pt(this,fe,null,t),this._parent=e,e._children.push(this)}}]),e}(),St=function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function(e,t){var n=[],r=!0,i=!1,a=void 0;try{for(var o,u=e[Symbol.iterator]();!(r=(o=u.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){i=!0,a=e}finally{try{!r&&u.return&&u.return()}finally{if(i)throw a}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")},Pt=function(){function e(e,t){for(var n=0;n0,c=[];if(n.split(",").forEach(function(t){for(var n=0;n=0;u--)i=t[u][0],a=t[u][1],(o=bt(r,i))&&(S(a)?X(n,function(e,t){return a(e[o.index],t[o.index])}):j(a)?function(){var e=Z(n,o.index),t=a[a.length-1],i=a.slice(0,a.length-1),u=i.map(function(e){return bt(r,e)});e.forEach(function(e){e.push(ee(e,i,u))}),X(e,function(e,n){var r=e[2],i=n[2];return t(r,i)}),n.length=0,e.forEach(function(e){n.push.apply(n,Q(e[1]))})}():(a="desc"===String(a).toLowerCase()?"desc":"asc",X(n,$(o.type,a,o.index))));e.uids=[],n.forEach(function(t){e.uids.push(t.pop())})}(a,r),i.columnWise){var s=Array.apply(void 0,Q(Array(a.schema.length))).map(function(){return[]});a.data.forEach(function(e){e.forEach(function(e,t){s[t].push(e)})}),a.data=s}return a}.call(this,this.getPartialFieldspace().fields,this._rowDiffset,e.getAllFields?t.map(function(e){return e.name}).join():this._colIdentifier,e.sort,{columnWise:"column"===e.order,addUid:!!e.withUid});if(!e.formatter)return n;var r=e.formatter,i=n.data,a=n.schema,o=n.uids,u=a.map(function(e){return e.name}),c=Object.keys(r).reduce(function(e,t){var n=u.indexOf(t);return-1!==n&&e.push([n,r[t]]),e},[]);return"column"===e.order?c.forEach(function(e){var t=e[0],n=e[1];i[t].forEach(function(e,r){i[t][r]=n.call(void 0,e,o[r],a[t])})}):i.forEach(function(e,t){c.forEach(function(n){var r=n[0],i=n[1];e[r]=i.call(void 0,e[r],o[t],a[r])})}),n}},{key:"groupBy",value:function value(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{saveChild:!0},r=""+e.join(),i=function de(e,t,n,r){var i=function(e,t){var n=[],r=e.getPartialFieldspace(),i=r.getDimension(),a=r.getMeasure();return Object.entries(i).forEach(function(e){var r=Ce(e,1)[0];t&&t.length?-1!==t.indexOf(r)&&n.push(r):n.push(r)}),Object.entries(a).forEach(function(e){var r=Ce(e,1)[0];"discrete"===a[r].subType()&&(t&&t.length?-1!==t.indexOf(r)&&n.push(r):n.push(r))}),n}(e,t),a=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n={},r=t,i=e.getPartialFieldspace().getMeasure(),a=we.defaultReducer();return"function"==typeof t&&(a=t),Object.entries(i).forEach(function(e){var o=Ce(e,1)[0];"string"==typeof t[o]&&(r[o]=we.resolve(r[o])?we.resolve(r[o]):a),"function"!=typeof t[o]&&(r[o]=void 0),n[o]=r[o]||we.resolve(i[o].defAggFn())||a}),n}(e,n),o=e.getPartialFieldspace(),u=o.fieldsObj(),c=o.name,s=[],f=[],h=[],d={},p=[],y=void 0;Object.entries(u).forEach(function(e){var t=Ce(e,2),n=t[0],r=t[1];(-1!==i.indexOf(n)||a[n])&&(h.push(E({},r.schema)),"measure"===r.schema.type&&"discrete"!==r.schema.subtype?f.push(n):"dimension"!==r.schema.type&&"discrete"!==r.schema.subtype||s.push(n))});var g=0;return l(e._rowDiffset,function(e){var t="";s.forEach(function(n){t=t+"-"+u[n].data[e]}),void 0===d[t]?(d[t]=g,p.push({}),s.forEach(function(t){p[g][t]=u[t].data[e]}),f.forEach(function(t){p[g][t]=[u[t].data[e]]}),g+=1):f.forEach(function(n){p[d[t]][n].push(u[n].data[e])})}),p.forEach(function(e){var t=e;f.forEach(function(n){t[n]=a[n](e[n])})}),r?(r.__calculateFieldspace(),y=r):y=new Lt(p,h,{name:c}),y}.apply(void 0,[this,e,t]);return n.saveChild&&(this._children.push(i),pt(i,le,{fieldsArr:e,groupByString:r,defaultReducer:we.defaultReducer()},t)),i._parent=this,i}},{key:"sort",value:function value(e){var t=this.getData({order:"row",sort:e}),n=[t.schema.map(function(e){return e.name})].concat(t.data),r=new this.constructor(n,t.schema,{dataFormat:"DSVArr"});return r._sortingDetails=e,r}},{key:"addField",value:function value(e){var t=e.fieldName();this._colIdentifier+=","+t;var n=this._partialFieldspace;if(n.fieldsObj()[e.fieldName()]){var r=n.fields.findIndex(function(e){return e.name===t});r>=0&&(n.fields[r]=e)}else n.fields.push(e);return this.__calculateFieldspace().calculateFieldsConfig(),this}},{key:"calculateVariable",value:function value(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{saveChild:!0,replaceVar:!1},r=this.getFieldsConfig(),i=t.slice(0,t.length-1),a=t[t.length-1];if(r[e.name]&&!n.replaceVar)throw new Error(e.name+" field already exists in model.");var o=i.map(function(e){var t=r[e];if(!t)throw new Error(e+" is not a valid column name.");return t.index}),u=this.clone(),c=u.getFieldspace().fields,s=o.map(function(e){return c[e]}),f=[];l(u._rowDiffset,function(e){var t=s.map(function(t){return t.data[e]});f[e]=a.apply(void 0,function(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t1&&void 0!==arguments[1]?arguments[1]:{},n=arguments[2],r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},i=t.isMutableAction,a=t.sourceId,o=t.payload,u=function e(t){return t._parent?e(t._parent):t}(this),c=u._propagationNameSpace,s={groupByModel:function e(t){return t._parent&&t._derivation.find(function(e){return"group"!==e.op})?e(t._parent):t}(this),model:u};return n&&function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments[2],r=void 0,i=t.isMutableAction,a=t.criteria,o=t.action+"-"+t.sourceId;r=i?e.mutableActions:e.immutableActions,null===a?delete r[o]:r[o]={model:n,config:t}}(c,t,this),wt(e,s,{propagationNameSpace:c,sourceId:a},Object.assign({payload:o},t)),i&&function(e,t,n){var r=e.immutableActions;for(var i in r){var a=r[i].config,o=n.config.sourceId,u=!n.propConfig.filterImmutableAction||n.propConfig.filterImmutableAction(a,n.config);if(a.sourceId!==o&&u){var c=a.criteria;wt(c,t,{propagationNameSpace:e,propagateToSource:!1,sourceId:o},a)}}}(c,s,{config:t,propConfig:r}),this}},{key:"on",value:function value(e,t){switch(e){case"propagation":this._onPropagation.push(t)}return this}},{key:"unsubscribe",value:function value(e){switch(e){case"propagation":this._onPropagation=[]}return this}},{key:"handlePropagation",value:function value(e,t){var n=this;this._onPropagation.forEach(function(r){return r.call(n,e,t)})}},{key:"bin",value:function value(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=this.clone(),r=t.name||e+"_binned";if(this.getFieldsConfig()[r]||!this.getFieldsConfig()[e])throw new Error("Field "+e+" already exists.");var i=function I(e,t,n){var r=n.buckets,i=n.binCount,a=n.binSize,o=n.start,u=[],c=[],s=e.domain(),f=ue(s,2),h=f[0],d=f[1],p=d,y=[],g=void 0,v=void 0,m=void 0,b=void 0;if(l(t,function(t){u.push({data:e.data[t],index:t})}),!r){var _=((d+=1)-h)%(a=a||(d-h)/i);for(i||0===_||(d=d+a-_),g=h+a;g<=d;)y.push(g),g+=a;r={start:o=o||h,stops:y}}v=0===r.start?0:r.start||h,r.stops.forEach(function(e){u.filter(function(t){return t.data>=v&&t.data=r.stops[r.stops.length-1]}).forEach(function(e){c[e.index]=r.stops[r.stops.length-1]+"-"+p}),r.stops.unshift(r.start),b=new Set(r.stops),hr.stops[r.stops.length-1]&&b.add(p),b=[].concat(function(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t1&&void 0!==arguments[1]?arguments[1]:{saveChild:!0}).saveChild;return t.forEach(function(e){n=e(n),i.push.apply(i,function(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t1&&r.dispose(),n}},bin:function bin(){for(var e=arguments.length,t=Array(e),n=0;n2?(i=arguments.length<=0?void 0:arguments[0],r=arguments.length<=1?void 0:arguments[1],a=arguments.length<=2?void 0:arguments[2]):(i=null,r=arguments.length<=0?void 0:arguments[0],a=arguments.length<=1?void 0:arguments[1]),t=a(w),(e=n=new A(t.fn)).addDependencies.apply(e,P(t.dependencies)),this._addPropInModel(i,function(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}({},r,n)),this}},{key:"_addPropInModel",value:function value(e,t){return this._graph.createNodesFrom(t,e),this}},{key:"on",value:function value(e,t,n){var r,i=e instanceof Array?e:[e],a=this._graph.createElectricNodeOf(i,{type:"CurrFrame",fn:t});return n&&(r=this._graph.stopPropagation().setPropagationOverride("nextFrame")).resetNodeValue.apply(r,P(e)),a}},{key:"next",value:function value(e,t,n){var r,i=e instanceof Array?e:[e],a=this._graph.createElectricNodeOf(i,{type:"NextFrame",fn:t});return n&&(r=this._graph.stopPropagation().setPropagationOverride("currentFrame")).resetNodeValue.apply(r,P(e)),a}},{key:"lock",value:function value(){return this._lockFlag=!0,this._reqQ.length=0,this}},{key:"unlock",value:function value(){return this._lockFlag=!1,this.setProp.apply(this,P(this._reqQ)),this._reqQ.length=0,this}},{key:"prop",value:function value(){var e,t=void 0,n=void 0;switch(e=arguments.length){case 1:t=arguments.length<=0?void 0:arguments[0];break;case 2:t=arguments.length<=0?void 0:arguments[0],n=arguments.length<=1?void 0:arguments[1];break;default:return this}return 2===e?(this._lockFlag?this._reqQ.push([t,n]):this.setProp([t,n]),this):this._graph.getNodeValue(t)}},{key:"setProp",value:function value(){for(var e,t=this,n=arguments.length,r=Array(n),i=0;i/gi),e},SmartLabelManager.store={},SmartLabelManager.prototype._calCharDimWithCache=function(e,t,n){if(!this._init)return!1;var r,i,a,o,u,c,s=this.options.maxCacheLimit,l=this._container,h=this.style||{},d=this._advancedCache||(this._advancedCache={}),p=this._advancedCacheKey||(this._advancedCacheKey=[]),y=e+(h.fontSize||"")+(h.fontFamily||"")+(h.fontWeight||"")+(h.fontStyle||""),g=e+"init"+(h.fontSize||"")+(h.fontFamily||"")+(h.fontWeight||"")+(h.fontStyle||"");return f[e]&&(e=f[e]),t?void 0===(c=d[g])&&(l.innerHTML=e.repeat?e.repeat(n):Array(n+1).join(e),a=l.offsetWidth,l.innerHTML=e,o=l.offsetWidth,c=d[g]=(a-n*o)/(n+1),p.push(g),p.length>s&&delete d[p.shift()]):c=0,(u=d[y])?(i=u.split(","),{width:parseFloat(i[0],10),height:parseFloat(i[1],10)}):(l.innerHTML=e,r={height:l.offsetHeight,width:l.offsetWidth+c},d[y]=r.width+","+r.height,p.push(y),p.length>s&&delete d[p.shift()],r)},SmartLabelManager.prototype._getWidthFn=function(){var e=this._containerObj,t=this._container,n=e.svgText;return n?function(e){var t,r;return n.textContent=e,(r=(t=n.getBBox()).width-d)<1&&(r=t.width),r}:function(e){return t.innerHTML=e,t.offsetWidth}},SmartLabelManager.prototype.setStyle=function(e){return this._init?e!==this.style||this._styleNotSet?(e||(e=this.style),o.setLineHeight(e),this.style=e,this._containerObj=t=this._containerManager.get(e),this._containerObj?(this._container=t.node,this._context=t.context,this._cache=t.charCache,this._lineHeight=t.lineHeight,this._styleNotSet=!1):this._styleNotSet=!0,this):void 0:this;var t},SmartLabelManager.prototype.useEllipsesOnOverflow=function(e){return this._init?(this._showNoEllipses=!e,this):this},SmartLabelManager.prototype.getSmartText=function(e,t,n,r){if(!this._init)return!1;void 0===e||null===e?e="":"string"!=typeof e&&(e=e.toString());var i,a,c,l,f,d,p,y,g,v,m,b,_,x,w,C,k,S,P,A,E,M,O,T,F,N,j=!1,I=0,D=-1,L=-1,R=-1,B=0,z=0,H=[],V=0,U=this._showNoEllipses?"":"...",W=this._lineHeight,q=this._context,G=this._container,Y=this._containerObj,X=Y.ellipsesWidth,K=Y.dotWidth,$=[],Q=-1,Z=-1,J=-1,ee=function fastTrim(e){for(var t=/\s/,n=(e=e.replace(/^\s\s*/,"")).length;t.test(e.charAt(n-=1)););return e.slice(0,n+1)},te={text:e,maxWidth:t,maxHeight:n,width:null,height:null,oriTextWidth:null,oriTextHeight:null,oriText:e,isTruncated:!1};if(b=this._getWidthFn(),n===W&&(n*=1.2),G){if(!h.isBrowserLess){if((j=o.xmlTagRegEx.test(e))?(G.innerHTML=e,te.oriTextWidth=p=G.offsetWidth,te.oriTextHeight=y=G.offsetHeight):(l=e.replace(o.ltgtRegex,function(e){return"<"===e?"<":">"}),w=this.getOriSize(l,!0),te.oriTextWidth=p=w.width,te.oriTextHeight=y=w.height),y<=n&&p<=t)return te.width=te.oriTextWidth=p,te.height=te.oriTextHeight=y,te;if(W>n)return te.text="",te.width=te.oriTextWidth=0,te.height=te.oriTextHeight=0,te}if(e=ee(e).replace(/(\s+)/g," "),f=this._showNoEllipses?t:t-X,!j){if(i=(H=e.split("")).length,a="",c=[],m=H[0],this._cache[m]?P=this._cache[m].width:(P=b(m),this._cache[m]={width:P}),f>P)V=(c=e.substr(0,o.getNearestBreakIndex(e,f,this)).split("")).length;else{if(P>t)return te.text="",te.width=te.oriTextWidth=te.height=te.oriTextHeight=0,te;U&&((f=t-2*K)>P?U="..":(f=t-K)>P?U=".":(f=0,U=""))}if(B=b(c.join("")),z=this._lineHeight,r){for(;Vf&&(a||(a=c.slice(0,-1).join("")),B>t))return te.text=ee(a)+U,te.tooltext=te.oriText,te.width=b(te.text),te.height=this._lineHeight,te;return te.text=c.join(""),te.width=B,te.height=this._lineHeight,te}for(;Vf&&(a||(a=c.slice(0,-1).join("")),B>t)){if(L=e.substr(0,c.length).lastIndexOf(" "),D=e.substr(0,c.length).lastIndexOf("-"),L>R?(B=b(c.slice(R+1,L).join("")),c.splice(L,1,"
"),R=L,g=L+1):D>R?(D===c.length-1?(B=b(c.slice(R+1,L).join("")),c.splice(D,1,"
-")):(B=b(c.slice(R+1,L).join("")),c.splice(D,1,"-
")),R=D,g=D+1):(c.splice(c.length-1,1,"
"+H[V]),J=c.length-2,B=b(c.slice(R+1,J+1).join("")),R=J,g=V),(z+=this._lineHeight)>n)return te.text=ee(a)+U,te.tooltext=te.oriText,te.width=t,te.height=z-this._lineHeight,te;I=s(I,B),a=null,v=o.getNearestBreakIndex(e.substr(g),f,this),B=b(e.substr(g,v||1)),c.length)/g,'$1'),G.innerHTML=e,k=0,S=(C=G[h.childRetriverFn](h.childRetriverString)).length;kt)return te.text="",te.width=te.oriTextWidth=te.height=te.oriTextHeight=0,te;if(P>f&&!this._showNoEllipses&&((f=t-2*K)>P?U="..":(f=t-K)>P?U=".":(f=0,U="")),_=$[0].elem.offsetLeft,x=$[0].elem.offsetTop,r)for(;Vf&&(N||(N=V),G.offsetWidth>t&&(F=V,V=i));else for(;Vf?(N||(N=V),M>t&&(L=$[V].spaceIdx,D=$[V].dashIdx,L>R?($[L].elem.innerHTML="
",R=L):D>R?($[D].elem.innerHTML=D===V?"
-":"-
",R=D):A.parentNode.insertBefore(T=u.createElement("br"),A),A.offsetHeight+A.offsetTop>n?(T?T.parentNode.removeChild(T):R===D?$[D].elem.innerHTML="-":$[L].elem.innerHTML=" ",F=V,V=i):N=null)):O>n&&(F=V,V=i);if(F=N;V-=1)(A=$[V].elem).parentNode.removeChild(A);for(;V>=0;V-=1)A=$[V].elem,o.classNameBrReg.test(A.className)?A.parentNode.removeChild(A):V=0}return te.text=G.innerHTML.replace(o.spanRemovalRegx,"$1").replace(/\&\;/g,"&"),te.isTruncated&&(te.text+=U,te.tooltext=d),te.height=G.offsetHeight,te.width=G.offsetWidth,te}return te.error=new Error("Body Tag Missing!"),te},SmartLabelManager.prototype.getOriSize=function(e,t){if(!this._init)return!1;var n,r,i,a,o,u=0,c=0,f={};if(!t)return this._calCharDimWithCache(e);for(a=0,o=(n=e.split("")).length;a]+?\>)|(&(?:[a-z]+|#[0-9]+);|.)/gi,spanAdditionReplacer:'$1$2',spanRemovalRegx:new RegExp("\\]+?"+c+"[^\\>]{0,}\\>(.*?)\\<\\/span\\>","ig"),xmlTagRegEx:new RegExp("<[^>][^<]*[^>]+>","i"),ltgtRegex:/<|>/g,brReplaceRegex://gi,testStrAvg:"WgI",parentContainerStyle:{position:"absolute",top:"-9999em",whiteSpace:"nowrap",padding:"0px",width:"1px",height:"1px",overflow:"hidden"},supportedStyle:{font:"font",fontFamily:"font-family","font-family":"font-family",fontWeight:"font-weight","font-weight":"font-weight",fontSize:"font-size","font-size":"font-size",lineHeight:"line-height","line-height":"line-height",fontStyle:"font-style","font-style":"font-style"},getDocumentSupport:function getDocumentSupport(){var r,i,a;return t.getElementsByClassName?(r="getElementsByClassName",i=c,a=!0):(r="getElementsByTagName",i="span",a=!1),{isIE:/msie/i.test(n)&&!e.opera,hasSVG:Boolean(e.SVGAngle||t.implementation.hasFeature("http://www.w3.org/TR/SVG11/feature#BasicStructure","1.1")),isHeadLess:new RegExp(" HtmlUnit").test(n),isWebKit:new RegExp(" AppleWebKit/").test(n),childRetriverFn:r,childRetriverString:i,noClassTesting:a}},createContainer:function createContainer(e){var n,r;if(e&&(e.offsetWidth||e.offsetHeight)){if(e.appendChild)return e.appendChild(r=t.createElement("DIV")),r.className=u,r.setAttribute("aria-hidden","true"),r.setAttribute("role","presentation"),r}else if((n=t.getElementsByTagName("body")[0])&&n.appendChild)return(r=t.createElement("DIV")).className=u,r.setAttribute("aria-hidden","true"),r.setAttribute("role","presentation"),1,n.appendChild(r),r},getNearestBreakIndex:function getNearestBreakIndex(e,t,n){if(!e||!e.length)return 0;var r,o=n._getWidthFn(),u=0,c=0,s=o(e),l=s/e.length;if(r=t,u=i(t/l),se.length&&(r=t-s,u=e.length);r>0;){if(r=t-o(e.substr(0,u)),!(c=a(r/l)))return u;u+=c}for(;r<0;){if(r=t-o(e.substr(0,u)),!(c=a(r/l)))return u;u+=c}return u},setLineHeight:function setLineHeight(e){var t=e.fontSize=e.fontSize||"12px";return e.lineHeight=e.lineHeight||e["line-height"]||1.2*parseInt(t,10)+"px",e}}}};t.default=r,e.exports=t.default},function(e){e.exports={name:"muze",private:!0,version:"1.0.3",description:"Composable visualisation library for web with a data-first approach",homepage:"https://www.charts.com/muze",license:"MIT",author:"Charts.com ",contributors:[{name:"Akash Ghoswami",email:"akash@charts.com"},{name:"Ranajit Banerjee",email:"ranajit.banerjee@charts.com",url:"https://github.com/ranajitbanerjee"},{name:"Mridul Meharia",email:"mridul@charts.com",url:"https://github.com/mridulmeh"},{name:"Subhash Haldar",email:"subhash@charts.com"},{name:"Sandeep Acharya",email:"sandeep@charts.com"},{name:"Rousan Ali",email:"rousan@charts.com",url:"https://rousan.io"},{name:"Ujjal Kumar Dutta",email:"ujjal@charts.com"}],main:"src/index.js",keywords:["muze","svg","vector","graphics","data-visualization","visualization","renderer","fusioncharts","relational","algebra","relation"],repository:{type:"git",url:"https://github.com/chartshq/muze"},dependencies:{"@chartshq/layout":"^1.0.0","@chartshq/muze-firebolt":"^1.0.0","@chartshq/muze-legend":"^1.0.0","muze-utils":"^1.0.0","@chartshq/visual-cell":"^1.0.0","@chartshq/visual-group":"^1.0.0","@chartshq/visual-layer":"^1.0.0","@chartshq/visual-unit":"^1.0.0"}}},function(e,t,n){var r=n(44);e.exports=r.default?r.default:r},function(e,t,n){"use strict";var r=function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}(n(5)).default.init("undefined"!=typeof window?window:void 0),i=r.win.document,a=r.getDocumentSupport(),o=a.isWebKit?0:4.5;function ContainerManager(e,t,n){var r;n=(n=n>5?n:5)<20?n:20,this.maxContainers=n,this.first=null,this.last=null,this.containers={},this.length=0,this.rootNode=e,t&&((r=i.createElementNS("http://www.w3.org/2000/svg","svg")).setAttributeNS("http://www.w3.org/2000/svg","xlink","http://www.w3.org/1999/xlink"),r.setAttributeNS("http://www.w3.org/2000/svg","height","0"),r.setAttributeNS("http://www.w3.org/2000/svg","width","0"),this.svgRoot=r,this.rootNode.appendChild(r))}ContainerManager.prototype.get=function(e){var t,n,i,a=this.containers,o=this.length,u=this.maxContainers,c="";for(n in r.supportedStyle)void 0!==e[n]&&(c+=r.supportedStyle[n]+":"+e[n]+";");if(!c)return!1;if(i=a[c])this.first!==i&&(i.prev&&(i.prev.next=i.next),i.next&&(i.next.prev=i.prev),i.next=this.first,i.next.prev=i,this.last===i&&(this.last=i.prev),i.prev=null,this.first=i);else{if(o>=u)for(t=o-u+1;t--;)this.removeContainer(this.last);i=this.addContainer(c)}return i},ContainerManager.prototype.addContainer=function(e){var t,n;return this.containers[e]=n={next:null,prev:null,node:null,ellipsesWidth:0,lineHeight:0,dotWidth:0,avgCharWidth:4,keyStr:e,charCache:{}},n.next=this.first,n.next&&(n.next.prev=n),this.first=n,this.last||(this.last=n),this.length+=1,t=n.node=i.createElement("div"),this.rootNode.appendChild(t),a.isIE&&!a.hasSVG?t.style.setAttribute("cssText",e):t.setAttribute("style",e),t.setAttribute("aria-hidden","true"),t.setAttribute("role","presentation"),t.style.display="inline-block",t.innerHTML=r.testStrAvg,n.lineHeight=t.offsetHeight,n.avgCharWidth=t.offsetWidth/3,a.isBrowserLess?((t=n.svgText=i.createElementNS("http://www.w3.org/2000/svg","text")).setAttribute("style",e),this.svgRoot.appendChild(t),t.textContent=r.testStrAvg,n.lineHeight=t.getBBox().height,n.avgCharWidth=(t.getBBox().width-o)/3,t.textContent="...",n.ellipsesWidth=t.getBBox().width-o,t.textContent=".",n.dotWidth=t.getBBox().width-o):(t.innerHTML="...",n.ellipsesWidth=t.offsetWidth,t.innerHTML=".",n.dotWidth=t.offsetWidth,t.innerHTML=""),n},ContainerManager.prototype.removeContainer=function(e){var t=e.keyStr;t&&this.length&&e&&(this.length-=1,e.prev&&(e.prev.next=e.next),e.next&&(e.next.prev=e.prev),this.first===e&&(this.first=e.next),this.last===e&&(this.last=e.prev),e.node.parentNode.removeChild(e.node),delete this.containers[t])},ContainerManager.prototype.dispose=function(){var e,t=this.containers;for(e in this.maxContainers=null,t)this.removeContainer(t[e]);this.rootNode.parentNode.removeChild(this.rootNode),this.rootNode=null,this.first=null,this.last=null},e.exports=ContainerManager},function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,,function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,function(e,t,n){"use strict";n.r(t);var r={};n.r(r),n.d(r,"scaleLinear",function(){return linear_linear}),n.d(r,"scaleThreshold",function(){return threshold_threshold}),n.d(r,"scaleLog",function(){return log}),n.d(r,"scalePow",function(){return pow}),n.d(r,"scaleIdentity",function(){return identity_identity}),n.d(r,"scaleOrdinal",function(){return ordinal}),n.d(r,"scaleSequential",function(){return sequential}),n.d(r,"scaleQuantize",function(){return quantize_quantize}),n.d(r,"scaleQuantile",function(){return quantile_quantile}),n.d(r,"schemeCategory10",function(){return tn}),n.d(r,"schemeCategory20",function(){return rn}),n.d(r,"schemeCategory20b",function(){return nn}),n.d(r,"scaleBand",function(){return band}),n.d(r,"scaleTime",function(){return Jt});var i={};n.r(i),n.d(i,"schemeDark2",function(){return cn}),n.d(i,"schemePaired",function(){return sn}),n.d(i,"schemeAccent",function(){return un}),n.d(i,"schemePastel1",function(){return ln}),n.d(i,"schemePastel2",function(){return fn}),n.d(i,"schemeSet1",function(){return hn}),n.d(i,"schemeSet2",function(){return dn}),n.d(i,"schemeSet3",function(){return pn}),n.d(i,"schemeBlues",function(){return zn}),n.d(i,"schemeBrBG",function(){return gn}),n.d(i,"schemePRGn",function(){return mn}),n.d(i,"schemePiYG",function(){return _n}),n.d(i,"interpolateBrBG",function(){return vn}),n.d(i,"interpolatePRGn",function(){return bn}),n.d(i,"interpolatePiYG",function(){return xn}),n.d(i,"interpolatePuOr",function(){return wn}),n.d(i,"interpolateRdBu",function(){return Cn}),n.d(i,"interpolateRdGy",function(){return kn}),n.d(i,"interpolateRdYlBu",function(){return Sn}),n.d(i,"interpolateRdYlGn",function(){return Pn}),n.d(i,"interpolateSpectral",function(){return An}),n.d(i,"interpolateBlues",function(){return Hn}),n.d(i,"interpolateGreens",function(){return Vn}),n.d(i,"interpolateGreys",function(){return Un}),n.d(i,"interpolateOranges",function(){return Gn}),n.d(i,"interpolatePurples",function(){return Wn}),n.d(i,"interpolateReds",function(){return qn}),n.d(i,"interpolateViridis",function(){return Zn}),n.d(i,"interpolateInferno",function(){return er}),n.d(i,"interpolateMagma",function(){return Jn}),n.d(i,"interpolatePlasma",function(){return tr}),n.d(i,"interpolateWarm",function(){return Xn}),n.d(i,"interpolateCool",function(){return Kn}),n.d(i,"interpolateCubehelixDefault",function(){return Yn}),n.d(i,"interpolateBuGn",function(){return En}),n.d(i,"interpolateBuPu",function(){return Mn}),n.d(i,"interpolateGnBu",function(){return On}),n.d(i,"interpolateOrRd",function(){return Tn}),n.d(i,"interpolatePuBuGn",function(){return Fn}),n.d(i,"interpolatePuBu",function(){return Nn}),n.d(i,"interpolatePuRd",function(){return jn}),n.d(i,"interpolateRdPu",function(){return In}),n.d(i,"interpolateYlGnBu",function(){return Dn}),n.d(i,"interpolateYlGn",function(){return Ln}),n.d(i,"interpolateYlOrBr",function(){return Rn}),n.d(i,"interpolateYlOrRd",function(){return Bn}),n.d(i,"interpolateRainbow",function(){return Qn});var a={};n.r(a),n.d(a,"DRAG",function(){return Qo}),n.d(a,"HOVER",function(){return Zo}),n.d(a,"SELECTIONDRAG",function(){return Jo}),n.d(a,"CLICK",function(){return eu}),n.d(a,"LONGTOUCH",function(){return tu}),n.d(a,"TOUCHDRAG",function(){return nu}),n.d(a,"ALL_ACTIONS",function(){return ru});var o={};n.r(o),n.d(o,"SELECTION_NEW_ENTRY",function(){return iu}),n.d(o,"SELECTION_NEW_EXIT",function(){return au}),n.d(o,"SELECTION_NULL",function(){return ou}),n.d(o,"SELECTION_OLD_ENTRY",function(){return uu}),n.d(o,"SELECTION_OLD_EXIT",function(){return cu});var u={};n.r(u),n.d(u,"BRUSH",function(){return wu}),n.d(u,"HIGHLIGHT",function(){return Cu}),n.d(u,"TOOLTIP",function(){return ku}),n.d(u,"FILTER",function(){return Su}),n.d(u,"SELECT",function(){return Pu});var c={};n.r(c),n.d(c,"HighlightBeahviour",function(){return Eu}),n.d(c,"BrushBehaviour",function(){return Ou}),n.d(c,"FilterBehaviour",function(){return Fu}),n.d(c,"SelectBehaviour",function(){return Lu});var s={};n.r(s),n.d(s,"SelectionBox",function(){return Ju}),n.d(s,"Tooltip",function(){return gc}),n.d(s,"Crossline",function(){return mc}),n.d(s,"PlotHighlighter",function(){return xc}),n.d(s,"FilterEffect",function(){return Cc}),n.d(s,"PersistentAnchors",function(){return Ec}),n.d(s,"BrushAnchors",function(){return Tc}),n.d(s,"AnchorEffect",function(){return Pc});var l={};n.r(l),n.d(l,"BOTTOM",function(){return Gc}),n.d(l,"TOP",function(){return Yc}),n.d(l,"LEFT",function(){return Xc}),n.d(l,"RIGHT",function(){return Kc}),n.d(l,"axisOrientationMap",function(){return $c});var f={};n.r(f),n.d(f,"LINEAR",function(){return Qc}),n.d(f,"BAND",function(){return Zc}),n.d(f,"TIME",function(){return Jc}),n.d(f,"COLOR",function(){return es}),n.d(f,"ORDINAL",function(){return ts}),n.d(f,"QUANTIZE",function(){return ns}),n.d(f,"QUANTILE",function(){return rs}),n.d(f,"LOG",function(){return is}),n.d(f,"POW",function(){return as}),n.d(f,"IDENTITY",function(){return os}),n.d(f,"SEQUENTIAL",function(){return us}),n.d(f,"THRESHOLD",function(){return cs});var h={};n.r(h),n.d(h,"CONFIG",function(){return ad}),n.d(h,"DATA",function(){return od}),n.d(h,"AXES",function(){return ud}),n.d(h,"LAYERDEFS",function(){return cd}),n.d(h,"WIDTH",function(){return sd}),n.d(h,"HEIGHT",function(){return ld}),n.d(h,"MOUNT",function(){return fd}),n.d(h,"primaryXAxisUpdated",function(){return hd}),n.d(h,"primaryYAxisUpdated",function(){return dd}),n.d(h,"secondaryXAxisUpdated",function(){return pd}),n.d(h,"secondaryYAxisUpdated",function(){return yd}),n.d(h,"TRANSFORM",function(){return gd}),n.d(h,"DATADOMAIN",function(){return vd}),n.d(h,"LAYERSCREATED",function(){return md}),n.d(h,"FIELDS",function(){return bd}),n.d(h,"TIMEDIFFS",function(){return _d}),n.d(h,"LAYERAXISINDEX",function(){return xd});var d={};n.r(d),n.d(d,"SelectBehaviour",function(){return wp});var y={};n.r(y),n.d(y,"SelectionBox",function(){return zp}),n.d(y,"LegendHighlighter",function(){return Up});var g={};n.r(g),n.d(g,"share",function(){return Oy}),n.d(g,"html",function(){return operators_html});var v=function(e,t){return et?1:e>=t?0:NaN},m=function(e){return 1===e.length&&(e=function ascendingComparator(e){return function(t,n){return v(e(t),n)}}(e)),{left:function left(t,n,r,i){for(null==r&&(r=0),null==i&&(i=t.length);r>>1;e(t[a],n)<0?r=a+1:i=a}return r},right:function right(t,n,r,i){for(null==r&&(r=0),null==i&&(i=t.length);r>>1;e(t[a],n)>0?i=a:r=a+1}return r}}};var b=m(v),_=b.right,x=(b.left,_);var w=function(e){return null===e?NaN:+e},C=Array.prototype,k=(C.slice,C.map,function(e,t,n){e=+e,t=+t,n=(i=arguments.length)<2?(t=e,e=0,1):i<3?1:+n;for(var r=-1,i=0|Math.max(0,Math.ceil((t-e)/n)),a=new Array(i);++r0)return[e];if((r=t0)for(e=Math.ceil(e/o),t=Math.floor(t/o),a=new Array(i=Math.ceil(t-e+1));++u=0?(a>=S?10:a>=P?5:a>=A?2:1)*Math.pow(10,i):-Math.pow(10,-i)/(a>=S?10:a>=P?5:a>=A?2:1)}function tickStep(e,t,n){var r=Math.abs(t-e)/Math.max(0,n),i=Math.pow(10,Math.floor(Math.log(r)/Math.LN10)),a=r/i;return a>=S?i*=10:a>=P?i*=5:a>=A&&(i*=2),t=1)return+n(e[r-1],r-1,e);var r,i=(r-1)*t,a=Math.floor(i),o=+n(e[a],a,e);return o+(+n(e[a+1],a+1,e)-o)*(i-a)}};function map_Map(){}function map_map(e,t){var n=new map_Map;if(e instanceof map_Map)e.each(function(e,t){n.set(t,e)});else if(Array.isArray(e)){var r,i=-1,a=e.length;if(null==t)for(;++i=r.length)return null!=e&&n.sort(e),null!=t?t(n):n;for(var u,c,s,l=-1,f=n.length,h=r[i++],d=O(),p=a();++lr.length)return e;var a,o=i[n-1];return null!=t&&n>=r.length?a=e.entries():(a=[],e.each(function(e,t){a.push({key:t,values:_entries(e,n)})})),null!=o?a.sort(function(e,t){return o(e.key,t.key)}):a}(apply(e,0,createMap,setMap),0)},key:function key(e){return r.push(e),n},sortKeys:function sortKeys(e){return i[r.length-1]=e,n},sortValues:function sortValues(t){return e=t,n},rollup:function rollup(e){return t=e,n}}};function createObject(){return{}}function setObject(e,t,n){e[t]=n}function createMap(){return O()}function setMap(e,t,n){e.set(t,n)}function set_Set(){}var F=O.prototype;function set_set(e,t){var n=new set_Set;if(e instanceof set_Set)e.each(function(e){n.add(e)});else if(e){var r=-1,i=e.length;if(null==t)for(;++r1?+t:s,f=a[1]a[1-f]))return n=Math.max(0,getClosestIndexOf(h,s)),c=getClosestIndexOf(h,l),o=s===l?n:Math.max(n,c-1),f&&(u=n,n=d-o,o=d-u),n>o?void 0:r().slice(n,o+1)},n.invert=function(e,t){var n,o,u=+e,c=arguments.length>1?+t:u,s=a[1]a[1-s]))return n=Math.max(0,getClosestIndexOf(l,u,"left")),r()[s?f-n:n]},rescale()}function getClosestIndexOf(e,t,n){for(var r,i,a,o=0,u=e.length-1;ot?0===u?u:"left"===n?u-1:u:u===e.length-1?u:"left"===n?u:u+1:u}var L=function(e,t,n){e.prototype=t.prototype=n,n.constructor=e};function extend(e,t){var n=Object.create(e.prototype);for(var r in t)n[r]=t[r];return n}function Color(){}var R="\\s*([+-]?\\d+)\\s*",B="\\s*([+-]?\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)\\s*",z="\\s*([+-]?\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)%\\s*",H=/^#([0-9a-f]{3})$/,V=/^#([0-9a-f]{6})$/,U=new RegExp("^rgb\\("+[R,R,R]+"\\)$"),W=new RegExp("^rgb\\("+[z,z,z]+"\\)$"),q=new RegExp("^rgba\\("+[R,R,R,B]+"\\)$"),G=new RegExp("^rgba\\("+[z,z,z,B]+"\\)$"),Y=new RegExp("^hsl\\("+[B,z,z]+"\\)$"),X=new RegExp("^hsla\\("+[B,z,z,B]+"\\)$"),K={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};function color_color(e){var t;return e=(e+"").trim().toLowerCase(),(t=H.exec(e))?new Rgb((t=parseInt(t[1],16))>>8&15|t>>4&240,t>>4&15|240&t,(15&t)<<4|15&t,1):(t=V.exec(e))?rgbn(parseInt(t[1],16)):(t=U.exec(e))?new Rgb(t[1],t[2],t[3],1):(t=W.exec(e))?new Rgb(255*t[1]/100,255*t[2]/100,255*t[3]/100,1):(t=q.exec(e))?rgba(t[1],t[2],t[3],t[4]):(t=G.exec(e))?rgba(255*t[1]/100,255*t[2]/100,255*t[3]/100,t[4]):(t=Y.exec(e))?hsla(t[1],t[2]/100,t[3]/100,1):(t=X.exec(e))?hsla(t[1],t[2]/100,t[3]/100,t[4]):K.hasOwnProperty(e)?rgbn(K[e]):"transparent"===e?new Rgb(NaN,NaN,NaN,0):null}function rgbn(e){return new Rgb(e>>16&255,e>>8&255,255&e,1)}function rgba(e,t,n,r){return r<=0&&(e=t=n=NaN),new Rgb(e,t,n,r)}function rgbConvert(e){return e instanceof Color||(e=color_color(e)),e?new Rgb((e=e.rgb()).r,e.g,e.b,e.opacity):new Rgb}function color_rgb(e,t,n,r){return 1===arguments.length?rgbConvert(e):new Rgb(e,t,n,null==r?1:r)}function Rgb(e,t,n,r){this.r=+e,this.g=+t,this.b=+n,this.opacity=+r}function _hex(e){return((e=Math.max(0,Math.min(255,Math.round(e)||0)))<16?"0":"")+e.toString(16)}function hsla(e,t,n,r){return r<=0?e=t=n=NaN:n<=0||n>=1?e=t=NaN:t<=0&&(e=NaN),new Hsl(e,t,n,r)}function hsl(e,t,n,r){return 1===arguments.length?function hslConvert(e){if(e instanceof Hsl)return new Hsl(e.h,e.s,e.l,e.opacity);if(e instanceof Color||(e=color_color(e)),!e)return new Hsl;if(e instanceof Hsl)return e;var t=(e=e.rgb()).r/255,n=e.g/255,r=e.b/255,i=Math.min(t,n,r),a=Math.max(t,n,r),o=NaN,u=a-i,c=(a+i)/2;return u?(o=t===a?(n-r)/u+6*(n0&&c<1?0:o,new Hsl(o,u,c,e.opacity)}(e):new Hsl(e,t,n,null==r?1:r)}function Hsl(e,t,n,r){this.h=+e,this.s=+t,this.l=+n,this.opacity=+r}function hsl2rgb(e,t,n){return 255*(e<60?t+(n-t)*e/60:e<180?n:e<240?t+(n-t)*(240-e)/60:t)}L(Color,color_color,{displayable:function displayable(){return this.rgb().displayable()},hex:function hex(){return this.rgb().hex()},toString:function toString(){return this.rgb()+""}}),L(Rgb,color_rgb,extend(Color,{brighter:function brighter(e){return e=null==e?1/.7:Math.pow(1/.7,e),new Rgb(this.r*e,this.g*e,this.b*e,this.opacity)},darker:function darker(e){return e=null==e?.7:Math.pow(.7,e),new Rgb(this.r*e,this.g*e,this.b*e,this.opacity)},rgb:function rgb(){return this},displayable:function displayable(){return 0<=this.r&&this.r<=255&&0<=this.g&&this.g<=255&&0<=this.b&&this.b<=255&&0<=this.opacity&&this.opacity<=1},hex:function hex(){return"#"+_hex(this.r)+_hex(this.g)+_hex(this.b)},toString:function toString(){var e=this.opacity;return(1===(e=isNaN(e)?1:Math.max(0,Math.min(1,e)))?"rgb(":"rgba(")+Math.max(0,Math.min(255,Math.round(this.r)||0))+", "+Math.max(0,Math.min(255,Math.round(this.g)||0))+", "+Math.max(0,Math.min(255,Math.round(this.b)||0))+(1===e?")":", "+e+")")}})),L(Hsl,hsl,extend(Color,{brighter:function brighter(e){return e=null==e?1/.7:Math.pow(1/.7,e),new Hsl(this.h,this.s,this.l*e,this.opacity)},darker:function darker(e){return e=null==e?.7:Math.pow(.7,e),new Hsl(this.h,this.s,this.l*e,this.opacity)},rgb:function rgb(){var e=this.h%360+360*(this.h<0),t=isNaN(e)||isNaN(this.s)?0:this.s,n=this.l,r=n+(n<.5?n:1-n)*t,i=2*n-r;return new Rgb(hsl2rgb(e>=240?e-240:e+120,i,r),hsl2rgb(e,i,r),hsl2rgb(e<120?e+240:e-120,i,r),this.opacity)},displayable:function displayable(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1}}));var $=Math.PI/180,Q=180/Math.PI,Z=.96422,J=1,ee=.82521,te=4/29,ne=6/29,re=3*ne*ne,ie=ne*ne*ne;function labConvert(e){if(e instanceof Lab)return new Lab(e.l,e.a,e.b,e.opacity);if(e instanceof Hcl){if(isNaN(e.h))return new Lab(e.l,0,0,e.opacity);var t=e.h*$;return new Lab(e.l,Math.cos(t)*e.c,Math.sin(t)*e.c,e.opacity)}e instanceof Rgb||(e=rgbConvert(e));var n,r,i=rgb2lrgb(e.r),a=rgb2lrgb(e.g),o=rgb2lrgb(e.b),u=xyz2lab((.2225045*i+.7168786*a+.0606169*o)/J);return i===a&&a===o?n=r=u:(n=xyz2lab((.4360747*i+.3850649*a+.1430804*o)/Z),r=xyz2lab((.0139322*i+.0971045*a+.7141733*o)/ee)),new Lab(116*u-16,500*(n-u),200*(u-r),e.opacity)}function lab(e,t,n,r){return 1===arguments.length?labConvert(e):new Lab(e,t,n,null==r?1:r)}function Lab(e,t,n,r){this.l=+e,this.a=+t,this.b=+n,this.opacity=+r}function xyz2lab(e){return e>ie?Math.pow(e,1/3):e/re+te}function lab2xyz(e){return e>ne?e*e*e:re*(e-te)}function lrgb2rgb(e){return 255*(e<=.0031308?12.92*e:1.055*Math.pow(e,1/2.4)-.055)}function rgb2lrgb(e){return(e/=255)<=.04045?e/12.92:Math.pow((e+.055)/1.055,2.4)}function hclConvert(e){if(e instanceof Hcl)return new Hcl(e.h,e.c,e.l,e.opacity);if(e instanceof Lab||(e=labConvert(e)),0===e.a&&0===e.b)return new Hcl(NaN,0,e.l,e.opacity);var t=Math.atan2(e.b,e.a)*Q;return new Hcl(t<0?t+360:t,Math.sqrt(e.a*e.a+e.b*e.b),e.l,e.opacity)}function hcl(e,t,n,r){return 1===arguments.length?hclConvert(e):new Hcl(e,t,n,null==r?1:r)}function Hcl(e,t,n,r){this.h=+e,this.c=+t,this.l=+n,this.opacity=+r}L(Lab,lab,extend(Color,{brighter:function brighter(e){return new Lab(this.l+18*(null==e?1:e),this.a,this.b,this.opacity)},darker:function darker(e){return new Lab(this.l-18*(null==e?1:e),this.a,this.b,this.opacity)},rgb:function rgb(){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 new Rgb(lrgb2rgb(3.1338561*(t=Z*lab2xyz(t))-1.6168667*(e=J*lab2xyz(e))-.4906146*(n=ee*lab2xyz(n))),lrgb2rgb(-.9787684*t+1.9161415*e+.033454*n),lrgb2rgb(.0719453*t-.2289914*e+1.4052427*n),this.opacity)}})),L(Hcl,hcl,extend(Color,{brighter:function brighter(e){return new Hcl(this.h,this.c,this.l+18*(null==e?1:e),this.opacity)},darker:function darker(e){return new Hcl(this.h,this.c,this.l-18*(null==e?1:e),this.opacity)},rgb:function rgb(){return labConvert(this).rgb()}}));var ae=-.14861,oe=1.78277,ue=-.29227,ce=-.90649,se=1.97294,le=se*ce,fe=se*oe,he=oe*ue-ce*ae;function cubehelix_cubehelix(e,t,n,r){return 1===arguments.length?function cubehelixConvert(e){if(e instanceof Cubehelix)return new Cubehelix(e.h,e.s,e.l,e.opacity);e instanceof Rgb||(e=rgbConvert(e));var t=e.r/255,n=e.g/255,r=e.b/255,i=(he*r+le*t-fe*n)/(he+le-fe),a=r-i,o=(se*(n-i)-ue*a)/ce,u=Math.sqrt(o*o+a*a)/(se*i*(1-i)),c=u?Math.atan2(o,a)*Q-120:NaN;return new Cubehelix(c<0?c+360:c,u,i,e.opacity)}(e):new Cubehelix(e,t,n,null==r?1:r)}function Cubehelix(e,t,n,r){this.h=+e,this.s=+t,this.l=+n,this.opacity=+r}function basis(e,t,n,r,i){var a=e*e,o=a*e;return((1-3*e+3*a-o)*t+(4-6*a+3*o)*n+(1+3*e+3*a-3*o)*r+o*i)/6}L(Cubehelix,cubehelix_cubehelix,extend(Color,{brighter:function brighter(e){return e=null==e?1/.7:Math.pow(1/.7,e),new Cubehelix(this.h,this.s,this.l*e,this.opacity)},darker:function darker(e){return e=null==e?.7:Math.pow(.7,e),new Cubehelix(this.h,this.s,this.l*e,this.opacity)},rgb:function rgb(){var e=isNaN(this.h)?0:(this.h+120)*$,t=+this.l,n=isNaN(this.s)?0:this.s*t*(1-t),r=Math.cos(e),i=Math.sin(e);return new Rgb(255*(t+n*(ae*r+oe*i)),255*(t+n*(ue*r+ce*i)),255*(t+n*(se*r)),this.opacity)}}));var de=function(e){return function(){return e}};function linear(e,t){return function(n){return e+n*t}}function color_hue(e,t){var n=t-e;return n?linear(e,n>180||n<-180?n-360*Math.round(n/360):n):de(isNaN(e)?t:e)}function gamma(e){return 1==(e=+e)?nogamma:function(t,n){return n-t?function exponential(e,t,n){return e=Math.pow(e,n),t=Math.pow(t,n)-e,n=1/n,function(r){return Math.pow(e+r*t,n)}}(t,n,e):de(isNaN(t)?n:t)}}function nogamma(e,t){var n=t-e;return n?linear(e,n):de(isNaN(e)?t:e)}var pe=function rgbGamma(e){var t=gamma(e);function rgb(e,n){var r=t((e=color_rgb(e)).r,(n=color_rgb(n)).r),i=t(e.g,n.g),a=t(e.b,n.b),o=nogamma(e.opacity,n.opacity);return function(t){return e.r=r(t),e.g=i(t),e.b=a(t),e.opacity=o(t),e+""}}return rgb.gamma=rgbGamma,rgb}(1);function rgbSpline(e){return function(t){var n,r,i=t.length,a=new Array(i),o=new Array(i),u=new Array(i);for(n=0;n=1?(n=1,t-1):Math.floor(n*t),i=e[r],a=e[r+1],o=r>0?e[r-1]:2*i-a,u=ra&&(i=t.slice(a,i),u[o]?u[o]+=i:u[++o]=i),(n=n[0])===(r=r[0])?u[o]?u[o]+=r:u[++o]=r:(u[++o]=null,c.push({i:o,x:ge(n,r)})),a=be.lastIndex;return a180?t+=360:t-e>180&&(e+=360),i.push({i:n.push(pop(n)+"rotate(",null,r)-2,x:ge(e,t)})):t&&n.push(pop(n)+"rotate("+t+r)}(i.rotate,a.rotate,o,u),function skewX(e,t,n,i){e!==t?i.push({i:n.push(pop(n)+"skewX(",null,r)-2,x:ge(e,t)}):t&&n.push(pop(n)+"skewX("+t+r)}(i.skewX,a.skewX,o,u),function scale(e,t,n,r,i,a){if(e!==n||t!==r){var o=i.push(pop(i)+"scale(",null,",",null,")");a.push({i:o-4,x:ge(e,n)},{i:o-2,x:ge(t,r)})}else 1===n&&1===r||i.push(pop(i)+"scale("+n+","+r+")")}(i.scaleX,i.scaleY,a.scaleX,a.scaleY,o,u),i=a=null,function(e){for(var t,n=-1,r=u.length;++n2?polymap:bimap,r=i=null,scale}function scale(t){return(r||(r=n(a,o,c?function deinterpolateClamp(e){return function(t,n){var r=e(t=+t,n=+n);return function(e){return e<=t?0:e>=n?1:r(e)}}}(e):e,u)))(+t)}return scale.invert=function(e){return(i||(i=n(o,a,deinterpolateLinear,c?function reinterpolateClamp(e){return function(t,n){var r=e(t=+t,n=+n);return function(e){return e<=0?t:e>=1?n:r(e)}}}(t):t)))(+e)},scale.domain=function(e){return arguments.length?(a=j.call(e,De),rescale()):a.slice()},scale.range=function(e){return arguments.length?(o=I.call(e),rescale()):o.slice()},scale.rangeRound=function(e){return o=I.call(e),u=Ae,rescale()},scale.clamp=function(e){return arguments.length?(c=!!e,rescale()):c},scale.interpolate=function(e){return arguments.length?(u=e,rescale()):u},rescale()}var Re=function(e,t){if((n=(e=t?e.toExponential(t-1):e.toExponential()).indexOf("e"))<0)return null;var n,r=e.slice(0,n);return[r.length>1?r[0]+r.slice(2):r,+e.slice(n+1)]},Be=function(e){return(e=Re(Math.abs(e)))?e[1]:NaN},ze=/^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;function formatSpecifier(e){return new FormatSpecifier(e)}function FormatSpecifier(e){if(!(t=ze.exec(e)))throw new Error("invalid format: "+e);var t;this.fill=t[1]||" ",this.align=t[2]||">",this.sign=t[3]||"-",this.symbol=t[4]||"",this.zero=!!t[5],this.width=t[6]&&+t[6],this.comma=!!t[7],this.precision=t[8]&&+t[8].slice(1),this.trim=!!t[9],this.type=t[10]||""}formatSpecifier.prototype=FormatSpecifier.prototype,FormatSpecifier.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.trim?"~":"")+this.type};var He,Ve,Ue,We,qe=function(e){e:for(var t,n=e.length,r=1,i=-1;r0){if(!+e[r])break e;i=0}}return i>0?e.slice(0,i)+e.slice(t+1):e},Ge=function(e,t){var n=Re(e,t);if(!n)return e+"";var r=n[0],i=n[1];return i<0?"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")},Ye={"%":function _(e,t){return(100*e).toFixed(t)},b:function b(e){return Math.round(e).toString(2)},c:function c(e){return e+""},d:function d(e){return Math.round(e).toString(10)},e:function e(t,n){return t.toExponential(n)},f:function f(e,t){return e.toFixed(t)},g:function g(e,t){return e.toPrecision(t)},o:function o(e){return Math.round(e).toString(8)},p:function p(e,t){return Ge(100*e,t)},r:Ge,s:function(e,t){var n=Re(e,t);if(!n)return e+"";var r=n[0],i=n[1],a=i-(He=3*Math.max(-8,Math.min(8,Math.floor(i/3))))+1,o=r.length;return a===o?r:a>o?r+new Array(a-o+1).join("0"):a>0?r.slice(0,a)+"."+r.slice(a):"0."+new Array(1-a).join("0")+Re(e,Math.max(0,t+a-1))[0]},X:function X(e){return Math.round(e).toString(16).toUpperCase()},x:function x(e){return Math.round(e).toString(16)}},Xe=function(e){return e},Ke=["y","z","a","f","p","n","µ","m","","k","M","G","T","P","E","Z","Y"],$e=function(e){var t=e.grouping&&e.thousands?function(e,t){return function(n,r){for(var i=n.length,a=[],o=0,u=e[0],c=0;i>0&&u>0&&(c+u+1>r&&(u=Math.max(1,r-c)),a.push(n.substring(i-=u,i+u)),!((c+=u+1)>r));)u=e[o=(o+1)%e.length];return a.reverse().join(t)}}(e.grouping,e.thousands):Xe,n=e.currency,r=e.decimal,i=e.numerals?function(e){return function(t){return t.replace(/[0-9]/g,function(t){return e[+t]})}}(e.numerals):Xe,a=e.percent||"%";function newFormat(e){var o=(e=formatSpecifier(e)).fill,u=e.align,c=e.sign,s=e.symbol,l=e.zero,f=e.width,h=e.comma,d=e.precision,p=e.trim,y=e.type;"n"===y?(h=!0,y="g"):Ye[y]||(null==d&&(d=12),p=!0,y="g"),(l||"0"===o&&"="===u)&&(l=!0,o="0",u="=");var g="$"===s?n[0]:"#"===s&&/[boxX]/.test(y)?"0"+y.toLowerCase():"",v="$"===s?n[1]:/[%p]/.test(y)?a:"",m=Ye[y],b=/[defgprs%]/.test(y);function format(e){var n,a,s,_=g,x=v;if("c"===y)x=m(e)+x,e="";else{var w=(e=+e)<0;if(e=m(Math.abs(e),d),p&&(e=qe(e)),w&&0==+e&&(w=!1),_=(w?"("===c?c:"-":"-"===c||"("===c?"":c)+_,x=("s"===y?Ke[8+He/3]:"")+x+(w&&"("===c?")":""),b)for(n=-1,a=e.length;++n(s=e.charCodeAt(n))||s>57){x=(46===s?r+e.slice(n+1):e.slice(n))+x,e=e.slice(0,n);break}}h&&!l&&(e=t(e,1/0));var C=_.length+e.length+x.length,k=C>1)+_+e+x+k.slice(C);break;default:e=k+_+e+x}return i(e)}return d=null==d?6:/[gprs]/.test(y)?Math.max(1,Math.min(21,d)):Math.max(0,Math.min(20,d)),format.toString=function(){return e+""},format}return{format:newFormat,formatPrefix:function formatPrefix(e,t){var n=newFormat(((e=formatSpecifier(e)).type="f",e)),r=3*Math.max(-8,Math.min(8,Math.floor(Be(t)/3))),i=Math.pow(10,-r),a=Ke[8+r/3];return function(e){return n(i*e)+a}}}};!function defaultLocale(e){return Ve=$e(e),Ue=Ve.format,We=Ve.formatPrefix,Ve}({decimal:".",thousands:",",grouping:[3],currency:["$",""]});var Qe=function(e,t,n){var r,i=e[0],a=e[e.length-1],o=tickStep(i,a,null==t?10:t);switch((n=formatSpecifier(null==n?",f":n)).type){case"s":var u=Math.max(Math.abs(i),Math.abs(a));return null!=n.precision||isNaN(r=function(e,t){return Math.max(0,3*Math.max(-8,Math.min(8,Math.floor(Be(t)/3)))-Be(Math.abs(e)))}(o,u))||(n.precision=r),We(n,u);case"":case"e":case"g":case"p":case"r":null!=n.precision||isNaN(r=function(e,t){return e=Math.abs(e),t=Math.abs(t)-e,Math.max(0,Be(t)-Be(e))+1}(o,Math.max(Math.abs(i),Math.abs(a))))||(n.precision=r-("e"===n.type));break;case"f":case"%":null!=n.precision||isNaN(r=function(e){return Math.max(0,-Be(Math.abs(e)))}(o))||(n.precision=r-2*("%"===n.type))}return Ue(n)};function linearish(e){var t=e.domain;return e.ticks=function(e){var n=t();return E(n[0],n[n.length-1],null==e?10:e)},e.tickFormat=function(e,n){return Qe(t(),e,n)},e.nice=function(n){null==n&&(n=10);var r,i=t(),a=0,o=i.length-1,u=i[a],c=i[o];return c0?r=tickIncrement(u=Math.floor(u/r)*r,c=Math.ceil(c/r)*r,n):r<0&&(r=tickIncrement(u=Math.ceil(u*r)/r,c=Math.floor(c*r)/r,n)),r>0?(i[a]=Math.floor(u/r)*r,i[o]=Math.ceil(c/r)*r,t(i)):r<0&&(i[a]=Math.ceil(u*r)/r,i[o]=Math.floor(c*r)/r,t(i)),e},e}function linear_linear(){var e=continuous(deinterpolateLinear,ge);return e.copy=function(){return copy(e,linear_linear())},linearish(e)}function identity_identity(){var e=[0,1];function scale(e){return+e}return scale.invert=scale,scale.domain=scale.range=function(t){return arguments.length?(e=j.call(t,De),scale):e.slice()},scale.copy=function(){return identity_identity().domain(e)},linearish(scale)}var Ze=function(e,t){var n,r=0,i=(e=e.slice()).length-1,a=e[r],o=e[i];return o0){for(;hc)break;y.push(f)}}else for(;h=1;--l)if(!((f=s*l)c)break;y.push(f)}}else y=E(h,d,Math.min(d-h,p)).map(i);return a?y.reverse():y},e.tickFormat=function(t,a){if(null==a&&(a=10===n?".0e":","),"function"!=typeof a&&(a=Ue(a)),t===1/0)return a;null==t&&(t=10);var o=Math.max(1,n*t/e.ticks().length);return function(e){var t=e/i(Math.round(r(e)));return t*n0?n[i-1]:e[0],i=n?[r[n-1],t]:[r[o-1],r[o]]},scale.copy=function(){return quantize_quantize().domain([e,t]).range(i)},linearish(scale)}function threshold_threshold(){var e=[.5],t=[0,1],n=1;function scale(r){if(r<=r)return t[x(e,r,0,n)]}return scale.domain=function(r){return arguments.length?(e=I.call(r),n=Math.min(e.length,t.length-1),scale):e.slice()},scale.range=function(r){return arguments.length?(t=I.call(r),n=Math.min(e.length,t.length-1),scale):t.slice()},scale.invertExtent=function(n){var r=t.indexOf(n);return[e[r-1],e[r]]},scale.copy=function(){return threshold_threshold().domain(e).range(t)},scale}var Je=new Date,et=new Date;function newInterval(e,t,n,r){function interval(t){return e(t=new Date(+t)),t}return interval.floor=interval,interval.ceil=function(n){return e(n=new Date(n-1)),t(n,1),e(n),n},interval.round=function(e){var t=interval(e),n=interval.ceil(e);return e-t0))return o;do{o.push(a=new Date(+n)),t(n,i),e(n)}while(a=t)for(;e(t),!n(t);)t.setTime(t-1)},function(e,r){if(e>=e)if(r<0)for(;++r<=0;)for(;t(e,-1),!n(e););else for(;--r>=0;)for(;t(e,1),!n(e););})},n&&(interval.count=function(t,r){return Je.setTime(+t),et.setTime(+r),e(Je),e(et),Math.floor(n(Je,et))},interval.every=function(e){return e=Math.floor(e),isFinite(e)&&e>0?e>1?interval.filter(r?function(t){return r(t)%e==0}:function(t){return interval.count(0,t)%e==0}):interval:null}),interval}var tt=newInterval(function(){},function(e,t){e.setTime(+e+t)},function(e,t){return t-e});tt.every=function(e){return e=Math.floor(e),isFinite(e)&&e>0?e>1?newInterval(function(t){t.setTime(Math.floor(t/e)*e)},function(t,n){t.setTime(+t+n*e)},function(t,n){return(n-t)/e}):tt:null};var nt=tt,rt=(tt.range,6e4),it=6048e5,at=newInterval(function(e){e.setTime(1e3*Math.floor(e/1e3))},function(e,t){e.setTime(+e+1e3*t)},function(e,t){return(t-e)/1e3},function(e){return e.getUTCSeconds()}),ot=at,ut=(at.range,newInterval(function(e){e.setTime(Math.floor(e/rt)*rt)},function(e,t){e.setTime(+e+t*rt)},function(e,t){return(t-e)/rt},function(e){return e.getMinutes()})),ct=ut,st=(ut.range,newInterval(function(e){var t=e.getTimezoneOffset()*rt%36e5;t<0&&(t+=36e5),e.setTime(36e5*Math.floor((+e-t)/36e5)+t)},function(e,t){e.setTime(+e+36e5*t)},function(e,t){return(t-e)/36e5},function(e){return e.getHours()})),lt=st,ft=(st.range,newInterval(function(e){e.setHours(0,0,0,0)},function(e,t){e.setDate(e.getDate()+t)},function(e,t){return(t-e-(t.getTimezoneOffset()-e.getTimezoneOffset())*rt)/864e5},function(e){return e.getDate()-1})),ht=ft;ft.range;function weekday(e){return newInterval(function(t){t.setDate(t.getDate()-(t.getDay()+7-e)%7),t.setHours(0,0,0,0)},function(e,t){e.setDate(e.getDate()+7*t)},function(e,t){return(t-e-(t.getTimezoneOffset()-e.getTimezoneOffset())*rt)/it})}var dt=weekday(0),pt=weekday(1),yt=weekday(2),gt=weekday(3),vt=weekday(4),mt=weekday(5),bt=weekday(6),_t=(dt.range,pt.range,yt.range,gt.range,vt.range,mt.range,bt.range,newInterval(function(e){e.setDate(1),e.setHours(0,0,0,0)},function(e,t){e.setMonth(e.getMonth()+t)},function(e,t){return t.getMonth()-e.getMonth()+12*(t.getFullYear()-e.getFullYear())},function(e){return e.getMonth()})),xt=_t,wt=(_t.range,newInterval(function(e){e.setMonth(0,1),e.setHours(0,0,0,0)},function(e,t){e.setFullYear(e.getFullYear()+t)},function(e,t){return t.getFullYear()-e.getFullYear()},function(e){return e.getFullYear()}));wt.every=function(e){return isFinite(e=Math.floor(e))&&e>0?newInterval(function(t){t.setFullYear(Math.floor(t.getFullYear()/e)*e),t.setMonth(0,1),t.setHours(0,0,0,0)},function(t,n){t.setFullYear(t.getFullYear()+n*e)}):null};var Ct=wt,kt=(wt.range,newInterval(function(e){e.setUTCSeconds(0,0)},function(e,t){e.setTime(+e+t*rt)},function(e,t){return(t-e)/rt},function(e){return e.getUTCMinutes()})),St=(kt.range,newInterval(function(e){e.setUTCMinutes(0,0,0)},function(e,t){e.setTime(+e+36e5*t)},function(e,t){return(t-e)/36e5},function(e){return e.getUTCHours()})),Pt=(St.range,newInterval(function(e){e.setUTCHours(0,0,0,0)},function(e,t){e.setUTCDate(e.getUTCDate()+t)},function(e,t){return(t-e)/864e5},function(e){return e.getUTCDate()-1})),At=Pt;Pt.range;function utcWeekday(e){return newInterval(function(t){t.setUTCDate(t.getUTCDate()-(t.getUTCDay()+7-e)%7),t.setUTCHours(0,0,0,0)},function(e,t){e.setUTCDate(e.getUTCDate()+7*t)},function(e,t){return(t-e)/it})}var Et=utcWeekday(0),Mt=utcWeekday(1),Ot=utcWeekday(2),Tt=utcWeekday(3),Ft=utcWeekday(4),Nt=utcWeekday(5),jt=utcWeekday(6),It=(Et.range,Mt.range,Ot.range,Tt.range,Ft.range,Nt.range,jt.range,newInterval(function(e){e.setUTCDate(1),e.setUTCHours(0,0,0,0)},function(e,t){e.setUTCMonth(e.getUTCMonth()+t)},function(e,t){return t.getUTCMonth()-e.getUTCMonth()+12*(t.getUTCFullYear()-e.getUTCFullYear())},function(e){return e.getUTCMonth()})),Dt=(It.range,newInterval(function(e){e.setUTCMonth(0,1),e.setUTCHours(0,0,0,0)},function(e,t){e.setUTCFullYear(e.getUTCFullYear()+t)},function(e,t){return t.getUTCFullYear()-e.getUTCFullYear()},function(e){return e.getUTCFullYear()}));Dt.every=function(e){return isFinite(e=Math.floor(e))&&e>0?newInterval(function(t){t.setUTCFullYear(Math.floor(t.getUTCFullYear()/e)*e),t.setUTCMonth(0,1),t.setUTCHours(0,0,0,0)},function(t,n){t.setUTCFullYear(t.getUTCFullYear()+n*e)}):null};var Lt=Dt;Dt.range;function localDate(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 utcDate(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 newYear(e){return{y:e,m:0,d:1,H:0,M:0,S:0,L:0}}var Rt,Bt,zt,Ht,Vt={"-":"",_:" ",0:"0"},Ut=/^\s*\d+/,Wt=/^%/,qt=/[\\^$*+?|[\]().{}]/g;function locale_pad(e,t,n){var r=e<0?"-":"",i=(r?-e:e)+"",a=i.length;return r+(a68?1900:2e3),n+r[0].length):-1}function parseZone(e,t,n){var r=/^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(t.slice(n,n+6));return r?(e.Z=r[1]?0:-(r[2]+(r[3]||"00")),n+r[0].length):-1}function parseMonthNumber(e,t,n){var r=Ut.exec(t.slice(n,n+2));return r?(e.m=r[0]-1,n+r[0].length):-1}function parseDayOfMonth(e,t,n){var r=Ut.exec(t.slice(n,n+2));return r?(e.d=+r[0],n+r[0].length):-1}function parseDayOfYear(e,t,n){var r=Ut.exec(t.slice(n,n+3));return r?(e.m=0,e.d=+r[0],n+r[0].length):-1}function parseHour24(e,t,n){var r=Ut.exec(t.slice(n,n+2));return r?(e.H=+r[0],n+r[0].length):-1}function parseMinutes(e,t,n){var r=Ut.exec(t.slice(n,n+2));return r?(e.M=+r[0],n+r[0].length):-1}function parseSeconds(e,t,n){var r=Ut.exec(t.slice(n,n+2));return r?(e.S=+r[0],n+r[0].length):-1}function parseMilliseconds(e,t,n){var r=Ut.exec(t.slice(n,n+3));return r?(e.L=+r[0],n+r[0].length):-1}function parseMicroseconds(e,t,n){var r=Ut.exec(t.slice(n,n+6));return r?(e.L=Math.floor(r[0]/1e3),n+r[0].length):-1}function parseLiteralPercent(e,t,n){var r=Wt.exec(t.slice(n,n+1));return r?n+r[0].length:-1}function parseUnixTimestamp(e,t,n){var r=Ut.exec(t.slice(n));return r?(e.Q=+r[0],n+r[0].length):-1}function parseUnixTimestampSeconds(e,t,n){var r=Ut.exec(t.slice(n));return r?(e.Q=1e3*+r[0],n+r[0].length):-1}function formatDayOfMonth(e,t){return locale_pad(e.getDate(),t,2)}function formatHour24(e,t){return locale_pad(e.getHours(),t,2)}function formatHour12(e,t){return locale_pad(e.getHours()%12||12,t,2)}function formatDayOfYear(e,t){return locale_pad(1+ht.count(Ct(e),e),t,3)}function formatMilliseconds(e,t){return locale_pad(e.getMilliseconds(),t,3)}function formatMicroseconds(e,t){return formatMilliseconds(e,t)+"000"}function formatMonthNumber(e,t){return locale_pad(e.getMonth()+1,t,2)}function formatMinutes(e,t){return locale_pad(e.getMinutes(),t,2)}function formatSeconds(e,t){return locale_pad(e.getSeconds(),t,2)}function formatWeekdayNumberMonday(e){var t=e.getDay();return 0===t?7:t}function formatWeekNumberSunday(e,t){return locale_pad(dt.count(Ct(e),e),t,2)}function formatWeekNumberISO(e,t){var n=e.getDay();return e=n>=4||0===n?vt(e):vt.ceil(e),locale_pad(vt.count(Ct(e),e)+(4===Ct(e).getDay()),t,2)}function formatWeekdayNumberSunday(e){return e.getDay()}function formatWeekNumberMonday(e,t){return locale_pad(pt.count(Ct(e),e),t,2)}function locale_formatYear(e,t){return locale_pad(e.getFullYear()%100,t,2)}function formatFullYear(e,t){return locale_pad(e.getFullYear()%1e4,t,4)}function formatZone(e){var t=e.getTimezoneOffset();return(t>0?"-":(t*=-1,"+"))+locale_pad(t/60|0,"0",2)+locale_pad(t%60,"0",2)}function formatUTCDayOfMonth(e,t){return locale_pad(e.getUTCDate(),t,2)}function formatUTCHour24(e,t){return locale_pad(e.getUTCHours(),t,2)}function formatUTCHour12(e,t){return locale_pad(e.getUTCHours()%12||12,t,2)}function formatUTCDayOfYear(e,t){return locale_pad(1+At.count(Lt(e),e),t,3)}function formatUTCMilliseconds(e,t){return locale_pad(e.getUTCMilliseconds(),t,3)}function formatUTCMicroseconds(e,t){return formatUTCMilliseconds(e,t)+"000"}function formatUTCMonthNumber(e,t){return locale_pad(e.getUTCMonth()+1,t,2)}function formatUTCMinutes(e,t){return locale_pad(e.getUTCMinutes(),t,2)}function formatUTCSeconds(e,t){return locale_pad(e.getUTCSeconds(),t,2)}function formatUTCWeekdayNumberMonday(e){var t=e.getUTCDay();return 0===t?7:t}function formatUTCWeekNumberSunday(e,t){return locale_pad(Et.count(Lt(e),e),t,2)}function formatUTCWeekNumberISO(e,t){var n=e.getUTCDay();return e=n>=4||0===n?Ft(e):Ft.ceil(e),locale_pad(Ft.count(Lt(e),e)+(4===Lt(e).getUTCDay()),t,2)}function formatUTCWeekdayNumberSunday(e){return e.getUTCDay()}function formatUTCWeekNumberMonday(e,t){return locale_pad(Mt.count(Lt(e),e),t,2)}function formatUTCYear(e,t){return locale_pad(e.getUTCFullYear()%100,t,2)}function formatUTCFullYear(e,t){return locale_pad(e.getUTCFullYear()%1e4,t,4)}function formatUTCZone(){return"+0000"}function formatLiteralPercent(){return"%"}function formatUnixTimestamp(e){return+e}function formatUnixTimestampSeconds(e){return Math.floor(+e/1e3)}!function defaultLocale_defaultLocale(e){return Rt=function formatLocale(e){var t=e.dateTime,n=e.date,r=e.time,i=e.periods,a=e.days,o=e.shortDays,u=e.months,c=e.shortMonths,s=formatRe(i),l=formatLookup(i),f=formatRe(a),h=formatLookup(a),d=formatRe(o),p=formatLookup(o),y=formatRe(u),g=formatLookup(u),v=formatRe(c),m=formatLookup(c),b={a:function formatShortWeekday(e){return o[e.getDay()]},A:function formatWeekday(e){return a[e.getDay()]},b:function formatShortMonth(e){return c[e.getMonth()]},B:function formatMonth(e){return u[e.getMonth()]},c:null,d:formatDayOfMonth,e:formatDayOfMonth,f:formatMicroseconds,H:formatHour24,I:formatHour12,j:formatDayOfYear,L:formatMilliseconds,m:formatMonthNumber,M:formatMinutes,p:function formatPeriod(e){return i[+(e.getHours()>=12)]},Q:formatUnixTimestamp,s:formatUnixTimestampSeconds,S:formatSeconds,u:formatWeekdayNumberMonday,U:formatWeekNumberSunday,V:formatWeekNumberISO,w:formatWeekdayNumberSunday,W:formatWeekNumberMonday,x:null,X:null,y:locale_formatYear,Y:formatFullYear,Z:formatZone,"%":formatLiteralPercent},_={a:function formatUTCShortWeekday(e){return o[e.getUTCDay()]},A:function formatUTCWeekday(e){return a[e.getUTCDay()]},b:function formatUTCShortMonth(e){return c[e.getUTCMonth()]},B:function formatUTCMonth(e){return u[e.getUTCMonth()]},c:null,d:formatUTCDayOfMonth,e:formatUTCDayOfMonth,f:formatUTCMicroseconds,H:formatUTCHour24,I:formatUTCHour12,j:formatUTCDayOfYear,L:formatUTCMilliseconds,m:formatUTCMonthNumber,M:formatUTCMinutes,p:function formatUTCPeriod(e){return i[+(e.getUTCHours()>=12)]},Q:formatUnixTimestamp,s:formatUnixTimestampSeconds,S:formatUTCSeconds,u:formatUTCWeekdayNumberMonday,U:formatUTCWeekNumberSunday,V:formatUTCWeekNumberISO,w:formatUTCWeekdayNumberSunday,W:formatUTCWeekNumberMonday,x:null,X:null,y:formatUTCYear,Y:formatUTCFullYear,Z:formatUTCZone,"%":formatLiteralPercent},x={a:function parseShortWeekday(e,t,n){var r=d.exec(t.slice(n));return r?(e.w=p[r[0].toLowerCase()],n+r[0].length):-1},A:function parseWeekday(e,t,n){var r=f.exec(t.slice(n));return r?(e.w=h[r[0].toLowerCase()],n+r[0].length):-1},b:function parseShortMonth(e,t,n){var r=v.exec(t.slice(n));return r?(e.m=m[r[0].toLowerCase()],n+r[0].length):-1},B:function parseMonth(e,t,n){var r=y.exec(t.slice(n));return r?(e.m=g[r[0].toLowerCase()],n+r[0].length):-1},c:function parseLocaleDateTime(e,n,r){return parseSpecifier(e,t,n,r)},d:parseDayOfMonth,e:parseDayOfMonth,f:parseMicroseconds,H:parseHour24,I:parseHour24,j:parseDayOfYear,L:parseMilliseconds,m:parseMonthNumber,M:parseMinutes,p:function parsePeriod(e,t,n){var r=s.exec(t.slice(n));return r?(e.p=l[r[0].toLowerCase()],n+r[0].length):-1},Q:parseUnixTimestamp,s:parseUnixTimestampSeconds,S:parseSeconds,u:parseWeekdayNumberMonday,U:parseWeekNumberSunday,V:parseWeekNumberISO,w:parseWeekdayNumberSunday,W:parseWeekNumberMonday,x:function parseLocaleDate(e,t,r){return parseSpecifier(e,n,t,r)},X:function parseLocaleTime(e,t,n){return parseSpecifier(e,r,t,n)},y:parseYear,Y:parseFullYear,Z:parseZone,"%":parseLiteralPercent};function newFormat(e,t){return function(n){var r,i,a,o=[],u=-1,c=0,s=e.length;for(n instanceof Date||(n=new Date(+n));++u53)return null;"w"in a||(a.w=1),"Z"in a?(r=(i=(r=utcDate(newYear(a.y))).getUTCDay())>4||0===i?Mt.ceil(r):Mt(r),r=At.offset(r,7*(a.V-1)),a.y=r.getUTCFullYear(),a.m=r.getUTCMonth(),a.d=r.getUTCDate()+(a.w+6)%7):(r=(i=(r=t(newYear(a.y))).getDay())>4||0===i?pt.ceil(r):pt(r),r=ht.offset(r,7*(a.V-1)),a.y=r.getFullYear(),a.m=r.getMonth(),a.d=r.getDate()+(a.w+6)%7)}else("W"in a||"U"in a)&&("w"in a||(a.w="u"in a?a.u%7:"W"in a?1:0),i="Z"in a?utcDate(newYear(a.y)).getUTCDay():t(newYear(a.y)).getDay(),a.m=0,a.d="W"in a?(a.w+6)%7+7*a.W-(i+5)%7:a.w+7*a.U-(i+6)%7);return"Z"in a?(a.H+=a.Z/100|0,a.M+=a.Z%100,utcDate(a)):t(a)}}function parseSpecifier(e,t,n,r){for(var i,a,o=0,u=t.length,c=n.length;o=c)return-1;if(37===(i=t.charCodeAt(o++))){if(i=t.charAt(o++),!(a=x[i in Vt?t.charAt(o++):i])||(r=a(e,n,r))<0)return-1}else if(i!=n.charCodeAt(r++))return-1}return r}return b.x=newFormat(n,b),b.X=newFormat(r,b),b.c=newFormat(t,b),_.x=newFormat(n,_),_.X=newFormat(r,_),_.c=newFormat(t,_),{format:function format(e){var t=newFormat(e+="",b);return t.toString=function(){return e},t},parse:function parse(e){var t=newParse(e+="",localDate);return t.toString=function(){return e},t},utcFormat:function utcFormat(e){var t=newFormat(e+="",_);return t.toString=function(){return e},t},utcParse:function utcParse(e){var t=newParse(e,utcDate);return t.toString=function(){return e},t}}}(e),Bt=Rt.format,Rt.parse,zt=Rt.utcFormat,Ht=Rt.utcParse,Rt}({dateTime:"%x, %X",date:"%-m/%-d/%Y",time:"%-I:%M:%S %p",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"]});Date.prototype.toISOString||zt("%Y-%m-%dT%H:%M:%S.%LZ");+new Date("2000-01-01T00:00:00.000Z")||Ht("%Y-%m-%dT%H:%M:%S.%LZ");var Gt=1e3,Yt=60*Gt,Xt=60*Yt,Kt=24*Xt,$t=7*Kt,Qt=30*Kt,Zt=365*Kt;function time_date(e){return new Date(e)}function time_number(e){return e instanceof Date?+e:+new Date(+e)}function calendar(e,t,n,r,i,a,o,u,c){var s=continuous(deinterpolateLinear,ge),l=s.invert,f=s.domain,h=c(".%L"),d=c(":%S"),p=c("%I:%M"),y=c("%I %p"),g=c("%a %d"),v=c("%b %d"),b=c("%B"),_=c("%Y"),x=[[o,1,Gt],[o,5,5*Gt],[o,15,15*Gt],[o,30,30*Gt],[a,1,Yt],[a,5,5*Yt],[a,15,15*Yt],[a,30,30*Yt],[i,1,Xt],[i,3,3*Xt],[i,6,6*Xt],[i,12,12*Xt],[r,1,Kt],[r,2,2*Kt],[n,1,$t],[t,1,Qt],[t,3,3*Qt],[e,1,Zt]];function tickFormat(u){return(o(u)1)&&(e-=Math.floor(e));var t=Math.abs(e-.5);return $n.h=360*e-100,$n.s=1.5-1.5*t,$n.l=.8-.9*t,$n+""};color_rgb(),Math.PI,Math.PI;function viridis_ramp(e){var t=e.length;return function(n){return e[Math.max(0,Math.min(t-1,Math.floor(n*t)))]}}var Zn=viridis_ramp(an("44015444025645045745055946075a46085c460a5d460b5e470d60470e6147106347116447136548146748166848176948186a481a6c481b6d481c6e481d6f481f70482071482173482374482475482576482677482878482979472a7a472c7a472d7b472e7c472f7d46307e46327e46337f463480453581453781453882443983443a83443b84433d84433e85423f854240864241864142874144874045884046883f47883f48893e49893e4a893e4c8a3d4d8a3d4e8a3c4f8a3c508b3b518b3b528b3a538b3a548c39558c39568c38588c38598c375a8c375b8d365c8d365d8d355e8d355f8d34608d34618d33628d33638d32648e32658e31668e31678e31688e30698e306a8e2f6b8e2f6c8e2e6d8e2e6e8e2e6f8e2d708e2d718e2c718e2c728e2c738e2b748e2b758e2a768e2a778e2a788e29798e297a8e297b8e287c8e287d8e277e8e277f8e27808e26818e26828e26828e25838e25848e25858e24868e24878e23888e23898e238a8d228b8d228c8d228d8d218e8d218f8d21908d21918c20928c20928c20938c1f948c1f958b1f968b1f978b1f988b1f998a1f9a8a1e9b8a1e9c891e9d891f9e891f9f881fa0881fa1881fa1871fa28720a38620a48621a58521a68522a78522a88423a98324aa8325ab8225ac8226ad8127ad8128ae8029af7f2ab07f2cb17e2db27d2eb37c2fb47c31b57b32b67a34b67935b77937b87838b9773aba763bbb753dbc743fbc7340bd7242be7144bf7046c06f48c16e4ac16d4cc26c4ec36b50c46a52c56954c56856c66758c7655ac8645cc8635ec96260ca6063cb5f65cb5e67cc5c69cd5b6ccd5a6ece5870cf5773d05675d05477d1537ad1517cd2507fd34e81d34d84d44b86d54989d5488bd6468ed64590d74393d74195d84098d83e9bd93c9dd93ba0da39a2da37a5db36a8db34aadc32addc30b0dd2fb2dd2db5de2bb8de29bade28bddf26c0df25c2df23c5e021c8e020cae11fcde11dd0e11cd2e21bd5e21ad8e219dae319dde318dfe318e2e418e5e419e7e419eae51aece51befe51cf1e51df4e61ef6e620f8e621fbe723fde725")),Jn=viridis_ramp(an("00000401000501010601010802010902020b02020d03030f03031204041405041606051806051a07061c08071e0907200a08220b09240c09260d0a290e0b2b100b2d110c2f120d31130d34140e36150e38160f3b180f3d19103f1a10421c10441d11471e114920114b21114e22115024125325125527125829115a2a115c2c115f2d11612f116331116533106734106936106b38106c390f6e3b0f703d0f713f0f72400f74420f75440f764510774710784910784a10794c117a4e117b4f127b51127c52137c54137d56147d57157e59157e5a167e5c167f5d177f5f187f601880621980641a80651a80671b80681c816a1c816b1d816d1d816e1e81701f81721f817320817521817621817822817922827b23827c23827e24828025828125818326818426818627818827818928818b29818c29818e2a81902a81912b81932b80942c80962c80982d80992d809b2e7f9c2e7f9e2f7fa02f7fa1307ea3307ea5317ea6317da8327daa337dab337cad347cae347bb0357bb2357bb3367ab5367ab73779b83779ba3878bc3978bd3977bf3a77c03a76c23b75c43c75c53c74c73d73c83e73ca3e72cc3f71cd4071cf4070d0416fd2426fd3436ed5446dd6456cd8456cd9466bdb476adc4869de4968df4a68e04c67e24d66e34e65e44f64e55064e75263e85362e95462ea5661eb5760ec5860ed5a5fee5b5eef5d5ef05f5ef1605df2625df2645cf3655cf4675cf4695cf56b5cf66c5cf66e5cf7705cf7725cf8745cf8765cf9785df9795df97b5dfa7d5efa7f5efa815ffb835ffb8560fb8761fc8961fc8a62fc8c63fc8e64fc9065fd9266fd9467fd9668fd9869fd9a6afd9b6bfe9d6cfe9f6dfea16efea36ffea571fea772fea973feaa74feac76feae77feb078feb27afeb47bfeb67cfeb77efeb97ffebb81febd82febf84fec185fec287fec488fec68afec88cfeca8dfecc8ffecd90fecf92fed194fed395fed597fed799fed89afdda9cfddc9efddea0fde0a1fde2a3fde3a5fde5a7fde7a9fde9aafdebacfcecaefceeb0fcf0b2fcf2b4fcf4b6fcf6b8fcf7b9fcf9bbfcfbbdfcfdbf")),er=viridis_ramp(an("00000401000501010601010802010a02020c02020e03021004031204031405041706041907051b08051d09061f0a07220b07240c08260d08290e092b10092d110a30120a32140b34150b37160b39180c3c190c3e1b0c411c0c431e0c451f0c48210c4a230c4c240c4f260c51280b53290b552b0b572d0b592f0a5b310a5c320a5e340a5f3609613809623909633b09643d09653e0966400a67420a68440a68450a69470b6a490b6a4a0c6b4c0c6b4d0d6c4f0d6c510e6c520e6d540f6d550f6d57106e59106e5a116e5c126e5d126e5f136e61136e62146e64156e65156e67166e69166e6a176e6c186e6d186e6f196e71196e721a6e741a6e751b6e771c6d781c6d7a1d6d7c1d6d7d1e6d7f1e6c801f6c82206c84206b85216b87216b88226a8a226a8c23698d23698f24699025689225689326679526679727669827669a28659b29649d29649f2a63a02a63a22b62a32c61a52c60a62d60a82e5fa92e5eab2f5ead305dae305cb0315bb1325ab3325ab43359b63458b73557b93556ba3655bc3754bd3853bf3952c03a51c13a50c33b4fc43c4ec63d4dc73e4cc83f4bca404acb4149cc4248ce4347cf4446d04545d24644d34743d44842d54a41d74b3fd84c3ed94d3dda4e3cdb503bdd513ade5238df5337e05536e15635e25734e35933e45a31e55c30e65d2fe75e2ee8602de9612bea632aeb6429eb6628ec6726ed6925ee6a24ef6c23ef6e21f06f20f1711ff1731df2741cf3761bf37819f47918f57b17f57d15f67e14f68013f78212f78410f8850ff8870ef8890cf98b0bf98c0af98e09fa9008fa9207fa9407fb9606fb9706fb9906fb9b06fb9d07fc9f07fca108fca309fca50afca60cfca80dfcaa0ffcac11fcae12fcb014fcb216fcb418fbb61afbb81dfbba1ffbbc21fbbe23fac026fac228fac42afac62df9c72ff9c932f9cb35f8cd37f8cf3af7d13df7d340f6d543f6d746f5d949f5db4cf4dd4ff4df53f4e156f3e35af3e55df2e661f2e865f2ea69f1ec6df1ed71f1ef75f1f179f2f27df2f482f3f586f3f68af4f88ef5f992f6fa96f8fb9af9fc9dfafda1fcffa4")),tr=viridis_ramp(an("0d088710078813078916078a19068c1b068d1d068e20068f2206902406912605912805922a05932c05942e05952f059631059733059735049837049938049a3a049a3c049b3e049c3f049c41049d43039e44039e46039f48039f4903a04b03a14c02a14e02a25002a25102a35302a35502a45601a45801a45901a55b01a55c01a65e01a66001a66100a76300a76400a76600a76700a86900a86a00a86c00a86e00a86f00a87100a87201a87401a87501a87701a87801a87a02a87b02a87d03a87e03a88004a88104a78305a78405a78606a68707a68808a68a09a58b0aa58d0ba58e0ca48f0da4910ea3920fa39410a29511a19613a19814a099159f9a169f9c179e9d189d9e199da01a9ca11b9ba21d9aa31e9aa51f99a62098a72197a82296aa2395ab2494ac2694ad2793ae2892b02991b12a90b22b8fb32c8eb42e8db52f8cb6308bb7318ab83289ba3388bb3488bc3587bd3786be3885bf3984c03a83c13b82c23c81c33d80c43e7fc5407ec6417dc7427cc8437bc9447aca457acb4679cc4778cc4977cd4a76ce4b75cf4c74d04d73d14e72d24f71d35171d45270d5536fd5546ed6556dd7566cd8576bd9586ada5a6ada5b69db5c68dc5d67dd5e66de5f65de6164df6263e06363e16462e26561e26660e3685fe4695ee56a5de56b5de66c5ce76e5be76f5ae87059e97158e97257ea7457eb7556eb7655ec7754ed7953ed7a52ee7b51ef7c51ef7e50f07f4ff0804ef1814df1834cf2844bf3854bf3874af48849f48948f58b47f58c46f68d45f68f44f79044f79143f79342f89441f89540f9973ff9983ef99a3efa9b3dfa9c3cfa9e3bfb9f3afba139fba238fca338fca537fca636fca835fca934fdab33fdac33fdae32fdaf31fdb130fdb22ffdb42ffdb52efeb72dfeb82cfeba2cfebb2bfebd2afebe2afec029fdc229fdc328fdc527fdc627fdc827fdca26fdcb26fccd25fcce25fcd025fcd225fbd324fbd524fbd724fad824fada24f9dc24f9dd25f8df25f8e125f7e225f7e425f6e626f6e826f5e926f5eb27f4ed27f3ee27f3f027f2f227f1f426f1f525f0f724f0f921")),nr={ROW_ID:"__id__"},rr={ACTION_INF:"actionInf",ON_LAYER_DRAW:"onlayerdraw"},ir=n(0),ar=n.n(ir),or=Array.prototype.slice,ur=function(e){return e},cr=1,sr=2,lr=3,fr=4,hr=1e-6;function translateX(e){return"translate("+(e+.5)+",0)"}function translateY(e){return"translate(0,"+(e+.5)+")"}function entering(){return!this.__axis}function axis_axis(e,t){var n=[],r=null,i=null,a=null,o=6,u=6,c=3,s=e===cr||e===fr?-1:1,l=e===fr||e===sr?"x":"y",f=e===cr||e===lr?translateX:translateY;function axis(h){var d=null==r?t.ticks?t.ticks.apply(t,n):t.domain():r,p=null==i?t.tickFormat?t.tickFormat.apply(t,n):ur:i,y=Math.max(o,0)+c,g=t.range(),v=+g[0]+.5,m=+g[g.length-1]+.5,b=(t.bandwidth?function axis_center(e){var t=Math.max(0,e.bandwidth()-1)/2;return e.round()&&(t=Math.round(t)),function(n){return+e(n)+t}}:function axis_number(e){return function(t){return+e(t)}})(t.copy()),_=h.selection?h.selection():h,x=_.selectAll(".domain").data([null]),w=_.selectAll(".tick").data(d,t).order(),C=w.exit(),k=w.enter().append("g").attr("class","tick"),S=w.select("line"),P=w.select("text");x=x.merge(x.enter().insert("path",".tick").attr("class","domain").attr("stroke","#000")),w=w.merge(k),S=S.merge(k.append("line").attr("stroke","#000").attr(l+"2",s*o)),P=P.merge(k.append("text").attr("fill","#000").attr(l,s*y).attr("dy",e===cr?"0em":e===lr?"0.71em":"0.32em")).style("transform",a),h!==_&&(x=x.transition(h),w=w.transition(h),S=S.transition(h),P=P.transition(h),C=C.transition(h).attr("opacity",hr).attr("transform",function(e){return isFinite(e=b(e))?f(e):this.getAttribute("transform")}),k.attr("opacity",hr).attr("transform",function(e){var t=this.parentNode.__axis;return f(t&&isFinite(t=t(e))?t:b(e))})),C.remove(),x.attr("d",e===fr||e==sr?"M"+s*u+","+v+"H0.5V"+m+"H"+s*u:"M"+v+","+s*u+"V0.5H"+m+"V"+s*u),w.attr("opacity",1).attr("transform",function(e){return f(b(e))}),S.attr(l+"2",s*o),P.attr(l,s*y).text(p),_.filter(entering).attr("fill","none").attr("font-size",10).attr("font-family","sans-serif").attr("text-anchor",e===sr?"start":e===fr?"end":"middle"),_.each(function(){this.__axis=b})}return axis.scale=function(e){return arguments.length?(t=e,axis):t},axis.tickTransform=function(e){return arguments.length?(a=e,axis):a},axis.ticks=function(){return n=or.call(arguments),axis},axis.tickArguments=function(e){return arguments.length?(n=null==e?[]:or.call(e),axis):n.slice()},axis.tickValues=function(e){return arguments.length?(r=null==e?null:or.call(e),axis):r&&r.slice()},axis.tickFormat=function(e){return arguments.length?(i=e,axis):i},axis.tickSize=function(e){return arguments.length?(o=u=+e,axis):o},axis.tickSizeInner=function(e){return arguments.length?(o=+e,axis):o},axis.tickSizeOuter=function(e){return arguments.length?(u=+e,axis):u},axis.tickPadding=function(e){return arguments.length?(c=+e,axis):c},axis}var dr=Math.PI,pr=2*dr,yr=pr-1e-6;function Path(){this._x0=this._y0=this._x1=this._y1=null,this._=""}function path_path(){return new Path}Path.prototype=path_path.prototype={constructor:Path,moveTo:function moveTo(e,t){this._+="M"+(this._x0=this._x1=+e)+","+(this._y0=this._y1=+t)},closePath:function closePath(){null!==this._x1&&(this._x1=this._x0,this._y1=this._y0,this._+="Z")},lineTo:function lineTo(e,t){this._+="L"+(this._x1=+e)+","+(this._y1=+t)},quadraticCurveTo:function quadraticCurveTo(e,t,n,r){this._+="Q"+ +e+","+ +t+","+(this._x1=+n)+","+(this._y1=+r)},bezierCurveTo:function bezierCurveTo(e,t,n,r,i,a){this._+="C"+ +e+","+ +t+","+ +n+","+ +r+","+(this._x1=+i)+","+(this._y1=+a)},arcTo:function arcTo(e,t,n,r,i){e=+e,t=+t,n=+n,r=+r,i=+i;var a=this._x1,o=this._y1,u=n-e,c=r-t,s=a-e,l=o-t,f=s*s+l*l;if(i<0)throw new Error("negative radius: "+i);if(null===this._x1)this._+="M"+(this._x1=e)+","+(this._y1=t);else if(f>1e-6)if(Math.abs(l*u-c*s)>1e-6&&i){var h=n-a,d=r-o,p=u*u+c*c,y=h*h+d*d,g=Math.sqrt(p),v=Math.sqrt(f),m=i*Math.tan((dr-Math.acos((p+f-y)/(2*g*v)))/2),b=m/v,_=m/g;Math.abs(b-1)>1e-6&&(this._+="L"+(e+b*s)+","+(t+b*l)),this._+="A"+i+","+i+",0,0,"+ +(l*h>s*d)+","+(this._x1=e+_*u)+","+(this._y1=t+_*c)}else this._+="L"+(this._x1=e)+","+(this._y1=t);else;},arc:function arc(e,t,n,r,i,a){e=+e,t=+t;var o=(n=+n)*Math.cos(r),u=n*Math.sin(r),c=e+o,s=t+u,l=1^a,f=a?r-i:i-r;if(n<0)throw new Error("negative radius: "+n);null===this._x1?this._+="M"+c+","+s:(Math.abs(this._x1-c)>1e-6||Math.abs(this._y1-s)>1e-6)&&(this._+="L"+c+","+s),n&&(f<0&&(f=f%pr+pr),f>yr?this._+="A"+n+","+n+",0,1,"+l+","+(e-o)+","+(t-u)+"A"+n+","+n+",0,1,"+l+","+(this._x1=c)+","+(this._y1=s):f>1e-6&&(this._+="A"+n+","+n+",0,"+ +(f>=dr)+","+l+","+(this._x1=e+n*Math.cos(i))+","+(this._y1=t+n*Math.sin(i))))},rect:function rect(e,t,n,r){this._+="M"+(this._x0=this._x1=+e)+","+(this._y0=this._y1=+t)+"h"+ +n+"v"+ +r+"h"+-n+"Z"},toString:function toString(){return this._}};var gr=path_path,vr=function(e){return function constant(){return e}},mr=Math.abs,br=Math.atan2,_r=Math.cos,xr=Math.max,wr=Math.min,Cr=Math.sin,kr=Math.sqrt,Sr=1e-12,Pr=Math.PI,Ar=Pr/2,Er=2*Pr;function asin(e){return e>=1?Ar:e<=-1?-Ar:Math.asin(e)}function arcInnerRadius(e){return e.innerRadius}function arcOuterRadius(e){return e.outerRadius}function arcStartAngle(e){return e.startAngle}function arcEndAngle(e){return e.endAngle}function arcPadAngle(e){return e&&e.padAngle}function cornerTangents(e,t,n,r,i,a,o){var u=e-n,c=t-r,s=(o?a:-a)/kr(u*u+c*c),l=s*c,f=-s*u,h=e+l,d=t+f,p=n+l,y=r+f,g=(h+p)/2,v=(d+y)/2,m=p-h,b=y-d,_=m*m+b*b,x=i-a,w=h*y-p*d,C=(b<0?-1:1)*kr(xr(0,x*x*_-w*w)),k=(w*b-m*C)/_,S=(-w*m-b*C)/_,P=(w*b+m*C)/_,A=(-w*m+b*C)/_,E=k-g,M=S-v,O=P-g,T=A-v;return E*E+M*M>O*O+T*T&&(k=P,S=A),{cx:k,cy:S,x01:-l,y01:-f,x11:k*(i/x-1),y11:S*(i/x-1)}}function Linear(e){this._context=e}Linear.prototype={areaStart:function areaStart(){this._line=0},areaEnd:function areaEnd(){this._line=NaN},lineStart:function lineStart(){this._point=0},lineEnd:function lineEnd(){(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function point(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;default:this._context.lineTo(e,t)}}};var Mr=function(e){return new Linear(e)};function point_x(e){return e[0]}function point_y(e){return e[1]}var Or=function(){var e=point_x,t=point_y,n=vr(!0),r=null,i=Mr,a=null;function line(o){var u,c,s,l=o.length,f=!1;for(null==r&&(a=i(s=gr())),u=0;u<=l;++u)!(u=l;--f)u.point(g[f],v[f]);u.lineEnd(),u.areaEnd()}y&&(g[s]=+e(h,s,c),v[s]=+n(h,s,c),u.point(t?+t(h,s,c):g[s],r?+r(h,s,c):v[s]))}if(d)return u=null,d+""||null}function arealine(){return Or().defined(i).curve(o).context(a)}return area.x=function(n){return arguments.length?(e="function"==typeof n?n:vr(+n),t=null,area):e},area.x0=function(t){return arguments.length?(e="function"==typeof t?t:vr(+t),area):e},area.x1=function(e){return arguments.length?(t=null==e?null:"function"==typeof e?e:vr(+e),area):t},area.y=function(e){return arguments.length?(n="function"==typeof e?e:vr(+e),r=null,area):n},area.y0=function(e){return arguments.length?(n="function"==typeof e?e:vr(+e),area):n},area.y1=function(e){return arguments.length?(r=null==e?null:"function"==typeof e?e:vr(+e),area):r},area.lineX0=area.lineY0=function(){return arealine().x(e).y(n)},area.lineY1=function(){return arealine().x(e).y(r)},area.lineX1=function(){return arealine().x(t).y(n)},area.defined=function(e){return arguments.length?(i="function"==typeof e?e:vr(!!e),area):i},area.curve=function(e){return arguments.length?(o=e,null!=a&&(u=o(a)),area):o},area.context=function(e){return arguments.length?(null==e?a=u=null:u=o(a=e),area):a},area},Fr=function(e,t){return te?1:t>=e?0:NaN},Nr=function(e){return e};curveRadial(Mr);function Radial(e){this._curve=e}function curveRadial(e){function radial(t){return new Radial(e(t))}return radial._curve=e,radial}Radial.prototype={areaStart:function areaStart(){this._curve.areaStart()},areaEnd:function areaEnd(){this._curve.areaEnd()},lineStart:function lineStart(){this._curve.lineStart()},lineEnd:function lineEnd(){this._curve.lineEnd()},point:function point(e,t){this._curve.point(t*Math.sin(e),t*-Math.cos(e))}};var jr=Array.prototype.slice;var Ir={draw:function draw(e,t){var n=Math.sqrt(t/Pr);e.moveTo(n,0),e.arc(0,0,n,0,Er)}},Dr={draw:function draw(e,t){var n=Math.sqrt(t/5)/2;e.moveTo(-3*n,-n),e.lineTo(-n,-n),e.lineTo(-n,-3*n),e.lineTo(n,-3*n),e.lineTo(n,-n),e.lineTo(3*n,-n),e.lineTo(3*n,n),e.lineTo(n,n),e.lineTo(n,3*n),e.lineTo(-n,3*n),e.lineTo(-n,n),e.lineTo(-3*n,n),e.closePath()}},Lr=Math.sqrt(1/3),Rr=2*Lr,Br={draw:function draw(e,t){var n=Math.sqrt(t/Rr),r=n*Lr;e.moveTo(0,-n),e.lineTo(r,0),e.lineTo(0,n),e.lineTo(-r,0),e.closePath()}},zr=Math.sin(Pr/10)/Math.sin(7*Pr/10),Hr=Math.sin(Er/10)*zr,Vr=-Math.cos(Er/10)*zr,Ur={draw:function draw(e,t){var n=Math.sqrt(.8908130915292852*t),r=Hr*n,i=Vr*n;e.moveTo(0,-n),e.lineTo(r,i);for(var a=1;a<5;++a){var o=Er*a/5,u=Math.cos(o),c=Math.sin(o);e.lineTo(c*n,-u*n),e.lineTo(u*r-c*i,c*r+u*i)}e.closePath()}},Wr={draw:function draw(e,t){var n=Math.sqrt(t),r=-n/2;e.rect(r,r,n,n)}},qr=Math.sqrt(3),Gr={draw:function draw(e,t){var n=-Math.sqrt(t/(3*qr));e.moveTo(0,2*n),e.lineTo(-qr*n,-n),e.lineTo(qr*n,-n),e.closePath()}},Yr=Math.sqrt(3)/2,Xr=1/Math.sqrt(12),Kr=3*(Xr/2+1),$r={draw:function draw(e,t){var n=Math.sqrt(t/Kr),r=n/2,i=n*Xr,a=r,o=n*Xr+n,u=-a,c=o;e.moveTo(r,i),e.lineTo(a,o),e.lineTo(u,c),e.lineTo(-.5*r-Yr*i,Yr*r+-.5*i),e.lineTo(-.5*a-Yr*o,Yr*a+-.5*o),e.lineTo(-.5*u-Yr*c,Yr*u+-.5*c),e.lineTo(-.5*r+Yr*i,-.5*i-Yr*r),e.lineTo(-.5*a+Yr*o,-.5*o-Yr*a),e.lineTo(-.5*u+Yr*c,-.5*c-Yr*u),e.closePath()}},Qr=function(){};function _point(e,t,n){e._context.bezierCurveTo((2*e._x0+e._x1)/3,(2*e._y0+e._y1)/3,(e._x0+2*e._x1)/3,(e._y0+2*e._y1)/3,(e._x0+4*e._x1+t)/6,(e._y0+4*e._y1+n)/6)}function Basis(e){this._context=e}Basis.prototype={areaStart:function areaStart(){this._line=0},areaEnd:function areaEnd(){this._line=NaN},lineStart:function lineStart(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function lineEnd(){switch(this._point){case 3:_point(this,this._x1,this._y1);case 2:this._context.lineTo(this._x1,this._y1)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function point(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;break;case 2:this._point=3,this._context.lineTo((5*this._x0+this._x1)/6,(5*this._y0+this._y1)/6);default:_point(this,e,t)}this._x0=this._x1,this._x1=e,this._y0=this._y1,this._y1=t}};function BasisClosed(e){this._context=e}BasisClosed.prototype={areaStart:Qr,areaEnd:Qr,lineStart:function lineStart(){this._x0=this._x1=this._x2=this._x3=this._x4=this._y0=this._y1=this._y2=this._y3=this._y4=NaN,this._point=0},lineEnd:function lineEnd(){switch(this._point){case 1:this._context.moveTo(this._x2,this._y2),this._context.closePath();break;case 2:this._context.moveTo((this._x2+2*this._x3)/3,(this._y2+2*this._y3)/3),this._context.lineTo((this._x3+2*this._x2)/3,(this._y3+2*this._y2)/3),this._context.closePath();break;case 3:this.point(this._x2,this._y2),this.point(this._x3,this._y3),this.point(this._x4,this._y4)}},point:function point(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._x2=e,this._y2=t;break;case 1:this._point=2,this._x3=e,this._y3=t;break;case 2:this._point=3,this._x4=e,this._y4=t,this._context.moveTo((this._x0+4*this._x1+e)/6,(this._y0+4*this._y1+t)/6);break;default:_point(this,e,t)}this._x0=this._x1,this._x1=e,this._y0=this._y1,this._y1=t}};function BasisOpen(e){this._context=e}BasisOpen.prototype={areaStart:function areaStart(){this._line=0},areaEnd:function areaEnd(){this._line=NaN},lineStart:function lineStart(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function lineEnd(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function point(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3;var n=(this._x0+4*this._x1+e)/6,r=(this._y0+4*this._y1+t)/6;this._line?this._context.lineTo(n,r):this._context.moveTo(n,r);break;case 3:this._point=4;default:_point(this,e,t)}this._x0=this._x1,this._x1=e,this._y0=this._y1,this._y1=t}};function Bundle(e,t){this._basis=new Basis(e),this._beta=t}Bundle.prototype={lineStart:function lineStart(){this._x=[],this._y=[],this._basis.lineStart()},lineEnd:function lineEnd(){var e=this._x,t=this._y,n=e.length-1;if(n>0)for(var r,i=e[0],a=t[0],o=e[n]-i,u=t[n]-a,c=-1;++c<=n;)r=c/n,this._basis.point(this._beta*e[c]+(1-this._beta)*(i+r*o),this._beta*t[c]+(1-this._beta)*(a+r*u));this._x=this._y=null,this._basis.lineEnd()},point:function point(e,t){this._x.push(+e),this._y.push(+t)}};(function custom(e){function bundle(t){return 1===e?new Basis(t):new Bundle(t,e)}return bundle.beta=function(e){return custom(+e)},bundle})(.85);function cardinal_point(e,t,n){e._context.bezierCurveTo(e._x1+e._k*(e._x2-e._x0),e._y1+e._k*(e._y2-e._y0),e._x2+e._k*(e._x1-t),e._y2+e._k*(e._y1-n),e._x2,e._y2)}function Cardinal(e,t){this._context=e,this._k=(1-t)/6}Cardinal.prototype={areaStart:function areaStart(){this._line=0},areaEnd:function areaEnd(){this._line=NaN},lineStart:function lineStart(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},lineEnd:function lineEnd(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:cardinal_point(this,this._x1,this._y1)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function point(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2,this._x1=e,this._y1=t;break;case 2:this._point=3;default:cardinal_point(this,e,t)}this._x0=this._x1,this._x1=this._x2,this._x2=e,this._y0=this._y1,this._y1=this._y2,this._y2=t}};(function custom(e){function cardinal(t){return new Cardinal(t,e)}return cardinal.tension=function(e){return custom(+e)},cardinal})(0);function CardinalClosed(e,t){this._context=e,this._k=(1-t)/6}CardinalClosed.prototype={areaStart:Qr,areaEnd:Qr,lineStart:function lineStart(){this._x0=this._x1=this._x2=this._x3=this._x4=this._x5=this._y0=this._y1=this._y2=this._y3=this._y4=this._y5=NaN,this._point=0},lineEnd:function lineEnd(){switch(this._point){case 1:this._context.moveTo(this._x3,this._y3),this._context.closePath();break;case 2:this._context.lineTo(this._x3,this._y3),this._context.closePath();break;case 3:this.point(this._x3,this._y3),this.point(this._x4,this._y4),this.point(this._x5,this._y5)}},point:function point(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._x3=e,this._y3=t;break;case 1:this._point=2,this._context.moveTo(this._x4=e,this._y4=t);break;case 2:this._point=3,this._x5=e,this._y5=t;break;default:cardinal_point(this,e,t)}this._x0=this._x1,this._x1=this._x2,this._x2=e,this._y0=this._y1,this._y1=this._y2,this._y2=t}};(function custom(e){function cardinal(t){return new CardinalClosed(t,e)}return cardinal.tension=function(e){return custom(+e)},cardinal})(0);function CardinalOpen(e,t){this._context=e,this._k=(1-t)/6}CardinalOpen.prototype={areaStart:function areaStart(){this._line=0},areaEnd:function areaEnd(){this._line=NaN},lineStart:function lineStart(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},lineEnd:function lineEnd(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function point(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3,this._line?this._context.lineTo(this._x2,this._y2):this._context.moveTo(this._x2,this._y2);break;case 3:this._point=4;default:cardinal_point(this,e,t)}this._x0=this._x1,this._x1=this._x2,this._x2=e,this._y0=this._y1,this._y1=this._y2,this._y2=t}};(function custom(e){function cardinal(t){return new CardinalOpen(t,e)}return cardinal.tension=function(e){return custom(+e)},cardinal})(0);function catmullRom_point(e,t,n){var r=e._x1,i=e._y1,a=e._x2,o=e._y2;if(e._l01_a>Sr){var u=2*e._l01_2a+3*e._l01_a*e._l12_a+e._l12_2a,c=3*e._l01_a*(e._l01_a+e._l12_a);r=(r*u-e._x0*e._l12_2a+e._x2*e._l01_2a)/c,i=(i*u-e._y0*e._l12_2a+e._y2*e._l01_2a)/c}if(e._l23_a>Sr){var s=2*e._l23_2a+3*e._l23_a*e._l12_a+e._l12_2a,l=3*e._l23_a*(e._l23_a+e._l12_a);a=(a*s+e._x1*e._l23_2a-t*e._l12_2a)/l,o=(o*s+e._y1*e._l23_2a-n*e._l12_2a)/l}e._context.bezierCurveTo(r,i,a,o,e._x2,e._y2)}function CatmullRom(e,t){this._context=e,this._alpha=t}CatmullRom.prototype={areaStart:function areaStart(){this._line=0},areaEnd:function areaEnd(){this._line=NaN},lineStart:function lineStart(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function lineEnd(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:this.point(this._x2,this._y2)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function point(e,t){if(e=+e,t=+t,this._point){var n=this._x2-e,r=this._y2-t;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(n*n+r*r,this._alpha))}switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;break;case 2:this._point=3;default:catmullRom_point(this,e,t)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=e,this._y0=this._y1,this._y1=this._y2,this._y2=t}};var Zr=function custom(e){function catmullRom(t){return e?new CatmullRom(t,e):new Cardinal(t,0)}return catmullRom.alpha=function(e){return custom(+e)},catmullRom}(.5);function CatmullRomClosed(e,t){this._context=e,this._alpha=t}CatmullRomClosed.prototype={areaStart:Qr,areaEnd:Qr,lineStart:function lineStart(){this._x0=this._x1=this._x2=this._x3=this._x4=this._x5=this._y0=this._y1=this._y2=this._y3=this._y4=this._y5=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function lineEnd(){switch(this._point){case 1:this._context.moveTo(this._x3,this._y3),this._context.closePath();break;case 2:this._context.lineTo(this._x3,this._y3),this._context.closePath();break;case 3:this.point(this._x3,this._y3),this.point(this._x4,this._y4),this.point(this._x5,this._y5)}},point:function point(e,t){if(e=+e,t=+t,this._point){var n=this._x2-e,r=this._y2-t;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(n*n+r*r,this._alpha))}switch(this._point){case 0:this._point=1,this._x3=e,this._y3=t;break;case 1:this._point=2,this._context.moveTo(this._x4=e,this._y4=t);break;case 2:this._point=3,this._x5=e,this._y5=t;break;default:catmullRom_point(this,e,t)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=e,this._y0=this._y1,this._y1=this._y2,this._y2=t}};(function custom(e){function catmullRom(t){return e?new CatmullRomClosed(t,e):new CardinalClosed(t,0)}return catmullRom.alpha=function(e){return custom(+e)},catmullRom})(.5);function CatmullRomOpen(e,t){this._context=e,this._alpha=t}CatmullRomOpen.prototype={areaStart:function areaStart(){this._line=0},areaEnd:function areaEnd(){this._line=NaN},lineStart:function lineStart(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function lineEnd(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function point(e,t){if(e=+e,t=+t,this._point){var n=this._x2-e,r=this._y2-t;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(n*n+r*r,this._alpha))}switch(this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3,this._line?this._context.lineTo(this._x2,this._y2):this._context.moveTo(this._x2,this._y2);break;case 3:this._point=4;default:catmullRom_point(this,e,t)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=e,this._y0=this._y1,this._y1=this._y2,this._y2=t}};(function custom(e){function catmullRom(t){return e?new CatmullRomOpen(t,e):new CardinalOpen(t,0)}return catmullRom.alpha=function(e){return custom(+e)},catmullRom})(.5);function LinearClosed(e){this._context=e}LinearClosed.prototype={areaStart:Qr,areaEnd:Qr,lineStart:function lineStart(){this._point=0},lineEnd:function lineEnd(){this._point&&this._context.closePath()},point:function point(e,t){e=+e,t=+t,this._point?this._context.lineTo(e,t):(this._point=1,this._context.moveTo(e,t))}};function monotone_sign(e){return e<0?-1:1}function slope3(e,t,n){var r=e._x1-e._x0,i=t-e._x1,a=(e._y1-e._y0)/(r||i<0&&-0),o=(n-e._y1)/(i||r<0&&-0),u=(a*i+o*r)/(r+i);return(monotone_sign(a)+monotone_sign(o))*Math.min(Math.abs(a),Math.abs(o),.5*Math.abs(u))||0}function slope2(e,t){var n=e._x1-e._x0;return n?(3*(e._y1-e._y0)/n-t)/2:t}function monotone_point(e,t,n){var r=e._x0,i=e._y0,a=e._x1,o=e._y1,u=(a-r)/3;e._context.bezierCurveTo(r+u,i+u*t,a-u,o-u*n,a,o)}function MonotoneX(e){this._context=e}function MonotoneY(e){this._context=new ReflectContext(e)}function ReflectContext(e){this._context=e}function Natural(e){this._context=e}function controlPoints(e){var t,n,r=e.length-1,i=new Array(r),a=new Array(r),o=new Array(r);for(i[0]=0,a[0]=2,o[0]=e[0]+2*e[1],t=1;t=0;--t)i[t]=(o[t]-i[t+1])/a[t];for(a[r-1]=(e[r]+i[r-1])/2,t=0;t=0&&(this._t=1-this._t,this._line=1-this._line)},point:function point(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;default:if(this._t<=0)this._context.lineTo(this._x,t),this._context.lineTo(e,t);else{var n=this._x*(1-this._t)+e*this._t;this._context.lineTo(n,this._y),this._context.lineTo(n,t)}}this._x=e,this._y=t}};var Jr=function(e){return new Step(e,.5)};function stepBefore(e){return new Step(e,0)}function stepAfter(e){return new Step(e,1)}var ei=function(e,t){if((i=e.length)>1)for(var n,r,i,a=1,o=e[t[0]],u=o.length;a=0;)n[t]=t;return n};function stackValue(e,t){return e[t]}var ni=function(e){var t=e.map(ascending_sum);return ti(e).sort(function(e,n){return t[e]-t[n]})};function ascending_sum(e){for(var t,n=0,r=-1,i=e.length;++r0)){if(a/=h,h<0){if(a0){if(a>f)return;a>l&&(l=a)}if(a=r-c,h||!(a<0)){if(a/=h,h<0){if(a>f)return;a>l&&(l=a)}else if(h>0){if(a0)){if(a/=d,d<0){if(a0){if(a>f)return;a>l&&(l=a)}if(a=i-s,d||!(a<0)){if(a/=d,d<0){if(a>f)return;a>l&&(l=a)}else if(d>0){if(a0||f<1)||(l>0&&(e[0]=[c+l*h,s+l*d]),f<1&&(e[1]=[c+f*h,s+f*d]),!0)}}}}}function connectEdge(e,t,n,r,i){var a=e[1];if(a)return!0;var o,u,c=e[0],s=e.left,l=e.right,f=s[0],h=s[1],d=l[0],p=l[1],y=(f+d)/2,g=(h+p)/2;if(p===h){if(y=r)return;if(f>d){if(c){if(c[1]>=i)return}else c=[y,n];a=[y,i]}else{if(c){if(c[1]1)if(f>d){if(c){if(c[1]>=i)return}else c=[(n-u)/o,n];a=[(i-u)/o,i]}else{if(c){if(c[1]=r)return}else c=[t,o*t+u];a=[r,o*r+u]}else{if(c){if(c[0]=-Ai)){var d=c*c+s*s,p=l*l+f*f,y=(f*d-s*p)/h,g=(c*p-l*d)/h,v=_i.pop()||new function Circle(){RedBlackNode(this),this.x=this.y=this.arc=this.site=this.cy=null};v.arc=e,v.site=i,v.x=y+o,v.y=(v.cy=g+u)+Math.sqrt(y*y+g*g),e.circle=v;for(var m=null,b=ki._;b;)if(v.yPi)u=u.L;else{if(!((i=a-rightBreakPoint(u,o))>Pi)){r>-Pi?(t=u.P,n=u):i>-Pi?(t=u,n=u.N):t=n=u;break}if(!u.R){t=u;break}u=u.R}!function createCell(e){return Ci[e.index]={site:e,halfedges:[]}}(e);var c=createBeach(e);if(wi.insert(t,c),t||n){if(t===n)return detachCircle(t),n=createBeach(t.site),wi.insert(c,n),c.edge=n.edge=createEdge(t.site,c.site),attachCircle(t),void attachCircle(n);if(n){detachCircle(t),detachCircle(n);var s=t.site,l=s[0],f=s[1],h=e[0]-l,d=e[1]-f,p=n.site,y=p[0]-l,g=p[1]-f,v=2*(h*g-d*y),m=h*h+d*d,b=y*y+g*g,_=[(g*m-d*b)/v+l,(h*b-y*m)/v+f];setEdgeEnd(n.edge,s,p,_),c.edge=createEdge(s,e,null,_),n.edge=createEdge(e,p,null,_),attachCircle(t),attachCircle(n)}else c.edge=createEdge(t.site,c.site)}}function leftBreakPoint(e,t){var n=e.site,r=n[0],i=n[1],a=i-t;if(!a)return r;var o=e.P;if(!o)return-1/0;var u=(n=o.site)[0],c=n[1],s=c-t;if(!s)return u;var l=u-r,f=1/a-1/s,h=l/s;return f?(-h+Math.sqrt(h*h-2*f*(l*l/(-2*s)-c+s/2+i-a/2)))/f+r:(r+u)/2}function rightBreakPoint(e,t){var n=e.N;if(n)return leftBreakPoint(n,t);var r=e.site;return r[1]===t?r[0]:1/0}var wi,Ci,ki,Si,Pi=1e-6,Ai=1e-12;function triangleArea(e,t,n){return(e[0]-n[0])*(t[1]-e[1])-(e[0]-t[0])*(n[1]-e[1])}function lexicographic(e,t){return t[1]-e[1]||t[0]-e[0]}function Diagram(e,t){var n,r,i,a=e.sort(lexicographic).pop();for(Si=[],Ci=new Array(e.length),wi=new mi,ki=new mi;;)if(i=bi,a&&(!i||a[1]Pi||Math.abs(i[0][1]-i[1][1])>Pi)||delete Si[a]}(o,u,c,s),function clipCells(e,t,n,r){var i,a,o,u,c,s,l,f,h,d,p,y,g=Ci.length,v=!0;for(i=0;iPi||Math.abs(y-h)>Pi)&&(c.splice(u,0,Si.push(createBorderEdge(o,d,Math.abs(p-e)Pi?[e,Math.abs(f-e)Pi?[Math.abs(h-r)Pi?[n,Math.abs(f-n)Pi?[Math.abs(h-t)=u)return null;var c=e-i.site[0],s=t-i.site[1],l=c*c+s*s;do{i=a.cells[r=o],o=null,i.halfedges.forEach(function(n){var r=a.edges[n],u=r.left;if(u!==i.site&&u||(u=r.right)){var c=e-u[0],s=t-u[1],f=c*c+s*s;ft?0===i?i:"left"===n?i-1:i:i===e.length-1?i:"left"===n?i:i+1},Gi=(requestAnimationFrame,cancelAnimationFrame,function getQualifiedClassName(e,t,n){return[n+"-"+(e=e.replace(/^\.*/,"")),n+"-"+e+"-"+t]}),Yi=function defaultValue(e,t){return void 0===e||"object"===(void 0===e?"undefined":Ii(e))&&!e?t:e},Xi=function objectIterator(e,t){for(var n in e)Object.hasOwnProperty.call(e,n)&&t(n,e)},Ki=function(){function Voronoi(e){_classCallCheck(this,Voronoi),this._voronoi=Oi().x(function(e){return e.x}).y(function(e){return e.y}),this.data(e)}return ji(Voronoi,[{key:"data",value:function data(e){return e&&(this._voronoiFn=this._voronoi(e)),this}},{key:"find",value:function find(e,t,n){return this._voronoiFn.find(e,t,n)}}]),Voronoi}(),$i=function(){function Store(e){_classCallCheck(this,Store),this.model=Fi.a.create(e),this._listeners=[]}return ji(Store,[{key:"serialize",value:function serialize(){return this.model.serialize()}},{key:"commit",value:function commit(e,t){this.model.prop(e,t)}},{key:"registerChangeListener",value:function registerChangeListener(e,t,n){var r=e;Array.isArray(e)||(r=[e]);var i=this.model.next(r,t,n);return this._listeners.push(i),this}},{key:"registerImmediateListener",value:function registerImmediateListener(e,t,n){var r=e;Array.isArray(e)||(r=[e]);var i=this.model.on(r,t,n);return this._listeners.push(i),this}},{key:"get",value:function get(e){return this.model.prop(e)}},{key:"computed",value:function computed(e,t){return this.model.calculatedProp(e,t)}},{key:"unsubscribeAll",value:function unsubscribeAll(){this._listeners.forEach(function(e){return e()})}}]),Store}(),Qi=function intSanitizer(e){var t=e.toString().match(/(\d+)(px)*/g);return t?parseInt(t[0],10):null},Zi=function transactor(e,t,n){var r=void 0,i=n&&n instanceof Fi.a?n:Fi.a.create({}),a=function _loop(n){({}).hasOwnProperty.call(t,n)&&(r=t[n],i.prop(n)||i.append(_defineProperty({},n,r.value)),e[n]=function(t,r,a){return function(){for(var o=arguments.length,u=Array(o),c=0;c=0;n--)if(e[n]!==t[n])return!1;return!0}(t,n):"Object"===e?Object.is(t,n):t===n}},ta={INTERFACE_IMPL:"Method not implemented"},na=function mergeRecursive(e,t){for(var n in t)Di(e[n])&&Di(t[n])?mergeRecursive(e[n],t[n]):t[n]instanceof Object&&t[n].constructor===Object?(e[n]={},mergeRecursive(e[n],t[n])):e[n]=t[n];return e},ra=function interpolator(){return Pe},ia=function numberInterpolator(){return ge},aa=function piecewiseInterpolator(){return piecewise_piecewise};var oa=function rgbToHsv(e,t,n){var r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:1;e=+e,t=+t,n=+n,r=+r,e/=255,t/=255,n/=255;var i=Math.max(e,t,n),a=Math.min(e,t,n),o=void 0,u=void 0,c=(i+a)/2;if(i===a)o=u=0;else{var s=i-a;switch(u=c>.5?s/(2-i-a):s/(i+a),i){case e:o=(t-n)/s+(t=i[0]&&r<=i[1]})},{saveChild:!1,mode:n})},sa=function getDataModelFromIdentifiers(e,t,n){var r=void 0;if(t instanceof Array){var i=e.getFieldsConfig(),a=t.slice(1,t.length);if(t instanceof Function)r=t(e,{},!1);else if(t instanceof Array&&t[0].length){var o=t[0].filter(function(e){return e in i});r=e.select(function(e){var t=!0;return o.forEach(function(n,r){var i=e[n].valueOf(),o=a.findIndex(function(e){return e[r]===i});t=t&&-1!==o}),t},{saveChild:!1,mode:n})}}else r=ca(e,t,n);return r},la=function registerListeners(e,t){var n=t(e);for(var r in n)if({}.hasOwnProperty.call(n,r)){var i=n[r],a=i.type,o=i.props,u=i.listener;e.store()[a](o,u)}},fa=function isValidValue(e){return!isNaN(e)&&e!==-1/0&&e!==1/0},ha=function getObjProp(e){for(var t=arguments.length,n=Array(t>1?t-1:0),r=1;r1)for(var n,r,i,a,o,u,c=0,s=e[t[0]].length;c=0?(r[0]=a,r[1]=a+=i):i<0?(r[1]=o,r[0]=o+=i):r[0]=a}),_defineProperty(Mi,"none",ei),_defineProperty(Mi,"expand",function(e,t){if((r=e.length)>0){for(var n,r,i,a=0,o=e[0].length;a0&&(r=(n=e[t[0]]).length)>0){for(var n,r,i,a=0,o=1;o0&&(d+=f);for(null!=t?p.sort(function(e,n){return t(y[e],y[n])}):null!=n&&p.sort(function(e,t){return n(o[e],o[t])}),u=0,s=d?(v-h*b)/d:0;u0?f*s:0)+b,y[c]={data:o[c],index:u,value:f,startAngle:g,endAngle:l,padAngle:m};return y}return pie.value=function(t){return arguments.length?(e="function"==typeof t?t:vr(+t),pie):e},pie.sortValues=function(e){return arguments.length?(t=e,n=null,pie):t},pie.sort=function(e){return arguments.length?(n=e,t=null,pie):n},pie.startAngle=function(e){return arguments.length?(r="function"==typeof e?e:vr(+e),pie):r},pie.endAngle=function(e){return arguments.length?(i="function"==typeof e?e:vr(+e),pie):i},pie.padAngle=function(e){return arguments.length?(a="function"==typeof e?e:vr(+e),pie):a},pie},arc:function(){var e=arcInnerRadius,t=arcOuterRadius,n=vr(0),r=null,i=arcStartAngle,a=arcEndAngle,o=arcPadAngle,u=null;function arc(){var c,s,l=+e.apply(this,arguments),f=+t.apply(this,arguments),h=i.apply(this,arguments)-Ar,d=a.apply(this,arguments)-Ar,p=mr(d-h),y=d>h;if(u||(u=c=gr()),fSr)if(p>Er-Sr)u.moveTo(f*_r(h),f*Cr(h)),u.arc(0,0,f,h,d,!y),l>Sr&&(u.moveTo(l*_r(d),l*Cr(d)),u.arc(0,0,l,d,h,y));else{var g,v,m=h,b=d,_=h,x=d,w=p,C=p,k=o.apply(this,arguments)/2,S=k>Sr&&(r?+r.apply(this,arguments):kr(l*l+f*f)),P=wr(mr(f-l)/2,+n.apply(this,arguments)),A=P,E=P;if(S>Sr){var M=asin(S/l*Cr(k)),O=asin(S/f*Cr(k));(w-=2*M)>Sr?(_+=M*=y?1:-1,x-=M):(w=0,_=x=(h+d)/2),(C-=2*O)>Sr?(m+=O*=y?1:-1,b-=O):(C=0,m=b=(h+d)/2)}var T=f*_r(m),F=f*Cr(m),N=l*_r(x),j=l*Cr(x);if(P>Sr){var I=f*_r(b),D=f*Cr(b),L=l*_r(_),R=l*Cr(_);if(pSr?function intersect(e,t,n,r,i,a,o,u){var c=n-e,s=r-t,l=o-i,f=u-a,h=(l*(t-a)-f*(e-i))/(f*c-l*s);return[e+h*c,t+h*s]}(T,F,L,R,I,D,N,j):[N,j],z=T-B[0],H=F-B[1],V=I-B[0],U=D-B[1],W=1/Cr(function acos(e){return e>1?0:e<-1?Pr:Math.acos(e)}((z*V+H*U)/(kr(z*z+H*H)*kr(V*V+U*U)))/2),q=kr(B[0]*B[0]+B[1]*B[1]);A=wr(P,(l-q)/(W-1)),E=wr(P,(f-q)/(W+1))}}C>Sr?E>Sr?(g=cornerTangents(L,R,T,F,f,E,y),v=cornerTangents(I,D,N,j,f,E,y),u.moveTo(g.cx+g.x01,g.cy+g.y01),ESr&&w>Sr?A>Sr?(g=cornerTangents(N,j,I,D,l,-A,y),v=cornerTangents(T,F,L,R,l,-A,y),u.lineTo(g.cx+g.x01,g.cy+g.y01),A=0&&"xmlns"!==(t=e.slice(0,n))&&(e=e.slice(n+1)),Ca.hasOwnProperty(t)?{space:Ca[t],local:e}:e};var Sa=function(e){var t=ka(e);return(t.local?function creatorFixed(e){return function(){return this.ownerDocument.createElementNS(e.space,e.local)}}:function creatorInherit(e){return function(){var t=this.ownerDocument,n=this.namespaceURI;return n===wa&&t.documentElement.namespaceURI===wa?t.createElement(e):t.createElementNS(n,e)}})(t)};function selector_none(){}var Pa=function(e){return null==e?selector_none:function(){return this.querySelector(e)}};function selectorAll_empty(){return[]}var Aa=function(e){return null==e?selectorAll_empty:function(){return this.querySelectorAll(e)}},Ea=function matcher(e){return function(){return this.matches(e)}};if("undefined"!=typeof document){var Ma=document.documentElement;if(!Ma.matches){var Oa=Ma.webkitMatchesSelector||Ma.msMatchesSelector||Ma.mozMatchesSelector||Ma.oMatchesSelector;Ea=function matcher(e){return function(){return Oa.call(this,e)}}}}var Ta=Ea,Fa=function(e){return new Array(e.length)};function EnterNode(e,t){this.ownerDocument=e.ownerDocument,this.namespaceURI=e.namespaceURI,this._next=null,this._parent=e,this.__data__=t}EnterNode.prototype={constructor:EnterNode,appendChild:function appendChild(e){return this._parent.insertBefore(e,this._next)},insertBefore:function insertBefore(e,t){return this._parent.insertBefore(e,t)},querySelector:function querySelector(e){return this._parent.querySelector(e)},querySelectorAll:function querySelectorAll(e){return this._parent.querySelectorAll(e)}};var Na="$";function bindIndex(e,t,n,r,i,a){for(var o,u=0,c=t.length,s=a.length;ut?1:e>=t?0:NaN}var ja=function(e){return e.ownerDocument&&e.ownerDocument.defaultView||e.document&&e||e.defaultView};function styleValue(e,t){return e.style.getPropertyValue(t)||ja(e).getComputedStyle(e,null).getPropertyValue(t)}function classArray(e){return e.trim().split(/^|\s+/)}function classList(e){return e.classList||new ClassList(e)}function ClassList(e){this._node=e,this._names=classArray(e.getAttribute("class")||"")}function classedAdd(e,t){for(var n=classList(e),r=-1,i=t.length;++r=0&&(this._names.splice(t,1),this._node.setAttribute("class",this._names.join(" ")))},contains:function contains(e){return this._names.indexOf(e)>=0}};function textRemove(){this.textContent=""}function htmlRemove(){this.innerHTML=""}function raise_raise(){this.nextSibling&&this.parentNode.appendChild(this)}function lower(){this.previousSibling&&this.parentNode.insertBefore(this,this.parentNode.firstChild)}function constantNull(){return null}function remove_remove(){var e=this.parentNode;e&&e.removeChild(this)}function selection_cloneShallow(){return this.parentNode.insertBefore(this.cloneNode(!1),this.nextSibling)}function selection_cloneDeep(){return this.parentNode.insertBefore(this.cloneNode(!0),this.nextSibling)}var Ia={},Da=null;"undefined"!=typeof document&&("onmouseenter"in document.documentElement||(Ia={mouseenter:"mouseover",mouseleave:"mouseout"}));function filterContextListener(e,t,n){return e=contextListener(e,t,n),function(t){var n=t.relatedTarget;n&&(n===this||8&n.compareDocumentPosition(this))||e.call(this,t)}}function contextListener(e,t,n){return function(r){var i=Da;Da=r;try{e.call(this,this.__data__,t,n)}finally{Da=i}}}function onRemove(e){return function(){var t=this.__on;if(t){for(var n,r=0,i=-1,a=t.length;r=_&&(_=b+1);!(m=g[_])&&++_=0;)(r=i[a])&&(o&&o!==r.nextSibling&&o.parentNode.insertBefore(r,o),o=r);return this},sort:function(e){function compareNode(t,n){return t&&n?e(t.__data__,n.__data__):!t-!n}e||(e=sort_ascending);for(var t=this._groups,n=t.length,r=new Array(n),i=0;i1?this.each((null==t?function styleRemove(e){return function(){this.style.removeProperty(e)}}:"function"==typeof t?function styleFunction(e,t,n){return function(){var r=t.apply(this,arguments);null==r?this.style.removeProperty(e):this.style.setProperty(e,r,n)}}:function styleConstant(e,t,n){return function(){this.style.setProperty(e,t,n)}})(e,t,null==n?"":n)):styleValue(this.node(),e)},property:function(e,t){return arguments.length>1?this.each((null==t?function propertyRemove(e){return function(){delete this[e]}}:"function"==typeof t?function propertyFunction(e,t){return function(){var n=t.apply(this,arguments);null==n?delete this[e]:this[e]=n}}:function propertyConstant(e,t){return function(){this[e]=t}})(e,t)):this.node()[e]},classed:function(e,t){var n=classArray(e+"");if(arguments.length<2){for(var r=classList(this.node()),i=-1,a=n.length;++i=0&&(t=e.slice(n+1),e=e.slice(0,n)),{type:e,name:t}})}(e+""),o=a.length;if(!(arguments.length<2)){for(u=t?onAdd:onRemove,null==n&&(n=!1),r=0;r=0&&(n=e.slice(r+1),e=e.slice(0,r)),e&&!t.hasOwnProperty(e))throw new Error("unknown type: "+e);return{type:e,name:n}})}(e+"",r),a=-1,o=i.length;if(!(arguments.length<2)){if(null!=t&&"function"!=typeof t)throw new Error("invalid callback: "+t);for(;++a0)for(var n,r,i=new Array(n),a=0;af}c.mouse("drag")}function mouseupped(){Ba(Da.view).on("mousemove.drag mouseup.drag",null),function yesdrag(e,t){var n=e.document.documentElement,r=Ba(e).on("dragstart.drag",null);t&&(r.on("click.drag",Ya,!0),setTimeout(function(){r.on("click.drag",null)},0)),"onselectstart"in n?r.on("selectstart.drag",null):(n.style.MozUserSelect=n.__noselect,delete n.__noselect)}(Da.view,n),Ya(),c.mouse("end")}function touchstarted(){if(i.apply(this,arguments)){var e,t,n=Da.changedTouches,r=a.apply(this,arguments),o=n.length;for(e=0;e=0&&t._call.call(null,e),t=t._next;--eo}()}finally{eo=0,function nap(){var e,t,n=$a,r=1/0;for(;n;)n._call?(r>n._time&&(r=n._time),e=n,n=n._next):(t=n._next,n._next=null,n=e?e._next=t:$a=t);Qa=e,sleep(r)}(),ao=0}}function poke(){var e=uo.now(),t=e-io;t>ro&&(oo-=t,io=e)}function sleep(e){eo||(to&&(to=clearTimeout(to)),e-ao>24?(e<1/0&&(to=setTimeout(wake,e-uo.now()-oo)),no&&(no=clearInterval(no))):(no||(io=uo.now(),no=setInterval(poke,ro)),eo=1,co(wake)))}Timer.prototype=timer.prototype={constructor:Timer,restart:function restart(e,t,n){if("function"!=typeof e)throw new TypeError("callback is not a function");n=(null==n?now():+n)+(null==t?0:+t),this._next||Qa===this||(Qa?Qa._next=this:$a=this,Qa=this),this._call=e,this._time=n,sleep()},stop:function stop(){this._call&&(this._call=null,this._time=1/0,sleep())}};var so=function(e,t,n){var r=new Timer;return t=null==t?0:+t,r.restart(function(n){r.stop(),e(n+t)},t,n),r},lo=Ga("start","end","interrupt"),fo=[],ho=0,po=1,yo=2,go=3,vo=4,mo=5,bo=6,_o=function(e,t,n,r,i,a){var o=e.__transition;if(o){if(n in o)return}else e.__transition={};!function schedule_create(e,t,n){var r,i=e.__transition;function start(a){var o,u,c,s;if(n.state!==po)return stop();for(o in i)if((s=i[o]).name===n.name){if(s.state===go)return so(start);s.state===vo?(s.state=bo,s.timer.stop(),s.on.call("interrupt",e,e.__data__,s.index,s.group),delete i[o]):+oho)throw new Error("too late; already scheduled");return n}function schedule_set(e,t){var n=schedule_get(e,t);if(n.state>yo)throw new Error("too late; already started");return n}function schedule_get(e,t){var n=e.__transition;if(!n||!(n=n[t]))throw new Error("transition not found");return n}function tweenValue(e,t,n){var r=e._id;return e.each(function(){var e=schedule_set(this,r);(e.value||(e.value={}))[t]=n.apply(this,arguments)}),function(e){return schedule_get(e,r).value[t]}}var xo=function(e,t){var n;return("number"==typeof t?ge:t instanceof color_color?pe:(n=color_color(t))?(t=n,pe):ke)(e,t)};var wo=Ra.prototype.constructor;var Co=0;function Transition(e,t,n,r){this._groups=e,this._parents=t,this._name=n,this._id=r}function newId(){return++Co}var ko=Ra.prototype;Transition.prototype=function src_transition_transition(e){return Ra().transition(e)}.prototype={constructor:Transition,select:function(e){var t=this._name,n=this._id;"function"!=typeof e&&(e=Pa(e));for(var r=this._groups,i=r.length,a=new Array(i),o=0;o=0&&(e=e.slice(0,t)),!e||"start"===e})}(t)?init:schedule_set;return function(){var o=a(this,e),u=o.on;u!==r&&(i=(r=u).copy()).on(t,n),o.on=i}}(n,e,t))},attr:function(e,t){var n=ka(e),r="transform"===n?Fe:xo;return this.attrTween(e,"function"==typeof t?(n.local?function attr_attrFunctionNS(e,t,n){var r,i,a;return function(){var o,u=n(this);if(null!=u)return(o=this.getAttributeNS(e.space,e.local))===u?null:o===r&&u===i?a:a=t(r=o,i=u);this.removeAttributeNS(e.space,e.local)}}:function attr_attrFunction(e,t,n){var r,i,a;return function(){var o,u=n(this);if(null!=u)return(o=this.getAttribute(e))===u?null:o===r&&u===i?a:a=t(r=o,i=u);this.removeAttribute(e)}})(n,r,tweenValue(this,"attr."+e,t)):null==t?(n.local?function attr_attrRemoveNS(e){return function(){this.removeAttributeNS(e.space,e.local)}}:function attr_attrRemove(e){return function(){this.removeAttribute(e)}})(n):(n.local?function attr_attrConstantNS(e,t,n){var r,i;return function(){var a=this.getAttributeNS(e.space,e.local);return a===n?null:a===r?i:i=t(r=a,n)}}:function attr_attrConstant(e,t,n){var r,i;return function(){var a=this.getAttribute(e);return a===n?null:a===r?i:i=t(r=a,n)}})(n,r,t+""))},attrTween:function(e,t){var n="attr."+e;if(arguments.length<2)return(n=this.tween(n))&&n._value;if(null==t)return this.tween(n,null);if("function"!=typeof t)throw new Error;var r=ka(e);return this.tween(n,(r.local?function attrTweenNS(e,t){function tween(){var n=this,r=t.apply(n,arguments);return r&&function(t){n.setAttributeNS(e.space,e.local,r(t))}}return tween._value=t,tween}:function attrTween(e,t){function tween(){var n=this,r=t.apply(n,arguments);return r&&function(t){n.setAttribute(e,r(t))}}return tween._value=t,tween})(r,t))},style:function(e,t,n){var r="transform"==(e+="")?Te:xo;return null==t?this.styleTween(e,function style_styleRemove(e,t){var n,r,i;return function(){var a=styleValue(this,e),o=(this.style.removeProperty(e),styleValue(this,e));return a===o?null:a===n&&o===r?i:i=t(n=a,r=o)}}(e,r)).on("end.style."+e,function styleRemoveEnd(e){return function(){this.style.removeProperty(e)}}(e)):this.styleTween(e,"function"==typeof t?function style_styleFunction(e,t,n){var r,i,a;return function(){var o=styleValue(this,e),u=n(this);return null==u&&(this.style.removeProperty(e),u=styleValue(this,e)),o===u?null:o===r&&u===i?a:a=t(r=o,i=u)}}(e,r,tweenValue(this,"style."+e,t)):function style_styleConstant(e,t,n){var r,i;return function(){var a=styleValue(this,e);return a===n?null:a===r?i:i=t(r=a,n)}}(e,r,t+""),n)},styleTween:function(e,t,n){var r="style."+(e+="");if(arguments.length<2)return(r=this.tween(r))&&r._value;if(null==t)return this.tween(r,null);if("function"!=typeof t)throw new Error;return this.tween(r,function styleTween(e,t,n){function tween(){var r=this,i=t.apply(r,arguments);return i&&function(t){r.style.setProperty(e,i(t),n)}}return tween._value=t,tween}(e,t,null==n?"":n))},text:function(e){return this.tween("text","function"==typeof e?function text_textFunction(e){return function(){var t=e(this);this.textContent=null==t?"":t}}(tweenValue(this,"text",e)):function text_textConstant(e){return function(){this.textContent=e}}(null==e?"":e+""))},remove:function(){return this.on("end.remove",function removeFunction(e){return function(){var t=this.parentNode;for(var n in this.__transition)if(+n!==e)return;t&&t.removeChild(this)}}(this._id))},tween:function(e,t){var n=this._id;if(e+="",arguments.length<2){for(var r,i=schedule_get(this.node(),n).tween,a=0,o=i.length;ayo&&n.state4&&void 0!==arguments[4]?arguments[4]:{},a=arguments[5];(e instanceof HTMLElement||e instanceof SVGElement)&&(e=Ao(e));var o=r?r[0]:null,u=null,c=null,s=null,l=null,f=null,h=void 0;o?"#"===o?(u="id",c=r):(u="class",c="."===r[0]?r:"."+r):(c=t,h=!0),s=e.selectAll(c),h&&(s=s.filter(function(){return this.parentNode===e.node()})),l=(s=s.data(n,a)).enter().append(t||"div"),i.enter&&l.each(function(){for(var e=arguments.length,t=Array(e),n=0;nthis._data.length)for(var a=this._data.length;a0&&void 0!==arguments[0]?arguments[0]:{};this._lifeCycles=e,this._releasePromisesFromCache()}},{key:"_resetTargetPromise",value:function _resetTargetPromise(e){var t=this;setTimeout(function(){t._notifiers[e]=Xo,t._promises.set(e,t._makeNotifierPromise(e))},0)}}]),LifeCycleManager}(),Qo="drag",Zo="hover",Jo="selectiondrag",eu="click",tu="longtouch",nu="touchdrag",ru="*",iu=1,au=-1,ou=0,uu=2,cu=-2,su=function(){function defineProperties(e,t){for(var n=0;n0?(e[n]===uu&&t.entrySet[0].push(n),e[n]===iu&&t.entrySet[1].push(n)):e[n]<0&&(e[n]===cu&&t.exitSet[0].push(n),e[n]===au&&t.exitSet[1].push(n)),t.completeSet.push(n);return["entrySet","exitSet"].forEach(function(e){t[e]=t[e].map(function(e){return e.map(Number)})}),t.completeSet=t.completeSet.map(Number),t}},{key:"reset",value:function reset(e){var t=this._set;if(e)e.forEach(function(e){t[e]=ou});else{var n=this._lockedSelection;for(var r in t)r in n||(t[r]=ou)}return this._resetted=!0,this}},{key:"getEntrySet",value:function getEntrySet(){var e=this._set,t=[];for(var n in e)e[n]===iu&&t.push(n);return t}},{key:"getExistingEntrySet",value:function getExistingEntrySet(e){var t=this._set;return e.filter(function(e){return t[e]===iu||t[e]===uu})}},{key:"getExistingExitSet",value:function getExistingExitSet(e){var t=this._set;return e.filter(function(e){return t[e]===au||t[e]===cu})}},{key:"getOldEntry",value:function getOldEntry(){var e=this._set,t=[];for(var n in e)e[n]===uu&&t.push(n);return t}},{key:"getOldExit",value:function getOldExit(){var e=this._set,t=[];for(var n in e)e[n]===cu&&t.push(n);return t}},{key:"getExitSet",value:function getExitSet(){var e=this._set,t=[];for(var n in e)e[n]===au&&t.push(n);return t}},{key:"getCompleteSet",value:function getCompleteSet(){var e=this._set,t=[];for(var n in e)t.push(n);return t}},{key:"getCompleteSetCount",value:function getCompleteSetCount(){return this._completeSetCount}},{key:"resetted",value:function resetted(){return this._resetted}},{key:"toggle",value:function toggle(){var e=this._set;for(var t in e)e[t]===iu?e[t]=au:e[t]===au?e[t]=iu:e[t]===uu?e[t]=cu:e[t]=uu;return this}}]),SelectionSet}();function helper_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t3&&void 0!==arguments[3]?arguments[3]:{},i=this.sideEffects(),a=i[e],o=!1;r.filter&&r.filter(a)&&(o=!0),!o&&i[e].apply(t,n,r)}},{key:"registerPropagationBehaviourMap",value:function registerPropagationBehaviourMap(e){return this._propagationBehaviourMap=Object.assign(this._propagationBehaviourMap,e||{}),this}},{key:"dispatchBehaviour",value:function dispatchBehaviour(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=void 0===n.propagate||n.propagate,i=this._actions.behavioural[e],a=function getSideEffects(e,t){var n=[];for(var r in t){var i=r.split(",");i.some(function(t){return t===e})&&n.push({effects:t[r],behaviours:i})}return n}(e,this._behaviourEffectMap);if(this._propagationInf=n,i){var o=i.dispatch(t),u=this.getPropagationSelectionSet(o);this._entryExitSet[e]=u;var c=this.shouldApplySideEffects(r);if(r&&this.propagate(e,t,o.find(function(e){return e.sourceSelectionSet}),a),c){var s=this.getApplicableSideEffects(a,t,n);this.applySideEffects(s,u,t)}}return this}},{key:"getPropagationSelectionSet",value:function getPropagationSelectionSet(e){return e.find(function(e){return!e.sourceSelectionSet})}},{key:"shouldApplySideEffects",value:function shouldApplySideEffects(){return!0}},{key:"changeBehaviourStateOnPropagation",value:function changeBehaviourStateOnPropagation(e,t){return t instanceof Function?this._sourceBehaviours[e]=t:this._sourceBehaviours[e]=function(){return t},this}},{key:"changeSideEffectStateOnPropagation",value:function changeSideEffectStateOnPropagation(e,t){t instanceof Function?this._sourceSideEffects[e]=t:this._sourceSideEffects[e]=function(){return t}}},{key:"propagate",value:function propagate(){return this}},{key:"sideEffects",value:function sideEffects(){return arguments.length?(this._sideEffects=arguments.length<=0?void 0:arguments[0],this):this._sideEffects}},{key:"enableSideEffects",value:function enableSideEffects(e){return fu(this,e,!0),this}},{key:"disableSideEffects",value:function disableSideEffects(e){return fu(this,e,!1),this}},{key:"dissociateBehaviour",value:function dissociateBehaviour(e,t){var n=this._actionBehaviourMap;for(var r in n)if(r===t){var i=n[r];i.behaviours=i.behaviours.filter(function(t){return t!==e})}return this}},{key:"dissociateSideEffect",value:function dissociateSideEffect(e,t){var n=this._behaviourEffectMap;return n[t]=n[t].filter(function(t){return(t.name||t)!==e}),this}},{key:"getApplicableSideEffects",value:function getApplicableSideEffects(e){return e}},{key:"attachPropagationListener",value:function attachPropagationListener(e){return e.unsubscribe("propagation"),e.on("propagation",this.onDataModelPropagation()),this}},{key:"onDataModelPropagation",value:function onDataModelPropagation(){var e=this;return function(t){var n=t.payload,r=n.action;e.dispatchBehaviour(r,n,{propagate:!1})}}},{key:"createSelectionSet",value:function createSelectionSet(e,t){var n=t||this._actions.behavioural,r=this._selectionSet,i=this._volatileSelectionSet;for(var a in n)({}).hasOwnProperty.call(n,a)&&(r[a]=new lu(e),i[a]=new lu(e,!0));return this._volatileSelectionSet=i,this.selectionSet(r),this}},{key:"selectionSet",value:function selectionSet(){return arguments.length?(this._selectionSet=arguments.length<=0?void 0:arguments[0],this):this._selectionSet}},{key:"initializeSideEffects",value:function initializeSideEffects(){var e=this._sideEffectDefinitions;return this.sideEffects(function initializeSideEffects(e,t){var n=e._sideEffects;return(t=t instanceof Array?t:Object.values(t)).forEach(function(t){var r=n[t.formalName()];n[t.formalName()]=r||new t(e)}),n}(this,e)),this}},{key:"registerPhysicalActions",value:function registerPhysicalActions(e){var t=function initializePhysicalActions(e,t){var n={};for(var r in t)({}).hasOwnProperty.call(r,t)||(n[r]=t[r](e));return n}(this,e);return Object.assign(this._actions.physical,t),this}},{key:"propagateWith",value:function propagateWith(e,t){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],r=this._actions.behavioural;if(t.length){if(e===ru)for(var i in r)this._propagationFields[i]={fields:t,append:n};else this._propagationFields[e]={fields:t,append:n};return this}return this._propagationFields}},{key:"mapActionsAndBehaviour",value:function mapActionsAndBehaviour(){var e=this._actions.physical,t=this._actionBehaviourMap,n=this._mappedActions;for(var r in t)if(!{}.hasOwnProperty.call(r,t)){var i=void 0,a=t[r];i=a.target;var o=a.touch;i||(i=this.context.getDefaultTargetContainer());var u=Ro()?!0===o||void 0===o:!o,c=r+"-"+a.behaviours.join();u&&!n[c]&&this.bindActionWithBehaviour(e[r],i,a.behaviours),n[c]=!0}return this}},{key:"registerPhysicalBehaviouralMap",value:function registerPhysicalBehaviouralMap(e){return Object.assign(this._actionBehaviourMap,e),this}},{key:"bindActionWithBehaviour",value:function bindActionWithBehaviour(e,t,n){var r=this;return"string"==typeof t&&(t=[t]),t.forEach(function(t){var i=r.context.mount(),a=t.node instanceof Function?t:Ao(i).selectAll(t);n.length&&!a.empty()&&(a instanceof Array?a.forEach(function(t){e(Ao(t),n)}):e(a,n))}),this}},{key:"getPropagationInf",value:function getPropagationInf(){return this._propagationInf}},{key:"getAddSetFromCriteria",value:function getAddSetFromCriteria(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=this.context,r=t.data?t.data:n.getDataModelFromIdentifiers(e,"all"),i=n.fields().x||[],a=n.fields().y||[],o=i.every(function(e){return e.type()===ir.FieldType.MEASURE}),u=a.every(function(e){return e.type()===ir.FieldType.MEASURE});return{model:r,uids:null===e?null:t.data?function filterPropagationModel(e,t,n){var r=t.getData(),i=r.data,a=r.schema,o=void 0;if(a.length){var u=e.getFieldsConfig();o=e.select(function(e){return i.some(function(t){return a.every(function(r,i){return!(n||r.name in u&&u[r.name].def.type!==ir.FieldType.MEASURE)||t[i]===e[r.name].valueOf()})})},{saveChild:!1})}else o=t;return o}(this.getFullData(),t.data[0],o&&u).getData().uids:r[0].getData().uids}}},{key:"getSelectionSets",value:function getSelectionSets(e){var t=this.context.id(),n=(this._propagationInf||{}).sourceId,r=[];return n!==t&&(r=[this._volatileSelectionSet[e]]),n&&r.push(this.selectionSet()[e]),r}},{key:"getFullData",value:function getFullData(){return this.context.data()}},{key:"resetted",value:function resetted(){return this._resetted}},{key:"getEntryExitSet",value:function getEntryExitSet(e){return this._entryExitSet[e]}}]),Firebolt}(),mu=function(){function defineProperties(e,t){for(var n=0;n1&&void 0!==arguments[1]?arguments[1]:{},n=e.sourceIdentifiers;return n?n.getSchema().map(function(e){return e.name}):t instanceof Array?t[0]:Object.keys(t||{})}(u,n.criteria),sourceSelectionSet:!0===e._volatile}}},{key:"enable",value:function enable(){this._enabled=!0}},{key:"disable",value:function disable(){this._enabled=!1}},{key:"isEnabled",value:function isEnabled(){return this._enabled}}],[{key:"mutates",value:function mutates(){return!1}}]),GenericBehaviour}(),_u=function(){function defineProperties(e,t){for(var n=0;nC[0]?C:w,S=k===C?w:C;k[1]100&&Math.abs(i.x-a.x)<=5)){a.x=Math.max(0,Math.min(a.x,o.width)),a.y=Math.max(0,Math.min(a.y,o.height));var s=Ru(n.context.getSourceInfo(),{startPos:i,endPos:a,snap:!0},n.context.data().getFieldsConfig());s.dragEnd=!0,t.forEach(function(e){return n.dispatchBehaviour(e,s)})}}))},zu=function hover(e){return function(t,n){var r=function dispatchBehaviour(t){var r=Io(),i=e.context,a=i.config().interaction.tooltip.mode,o=jo(i.getDrawingContext().svgContainer,r),u=i.getNearestPoint(o.x,o.y,{getAllPoints:"consolidated"===a||"fragmented"===a,data:t,event:r}),c={criteria:u?u.id:null,showInPosition:u.showInPosition,target:u.target,position:o,mode:a};n.forEach(function(t){return e.dispatchBehaviour(t,c)}),r.stopPropagation()};t.on("mouseover",r).on("mousemove",r).on("mouseout",function(){n.forEach(function(t){return e.dispatchBehaviour(t,{criteria:null})})})}},Hu=function generatePayloadFromEvent(e,t,n){var r=n.context,i=jo(r.getDrawingContext().svgContainer,t.touches?t.touches[0]:t),a=r.getNearestPoint(i.x,i.y,{data:e,event:t});return{criteria:a?a.id:null,showInPosition:a.showInPosition,target:a.target,position:i}},Vu=function click(e){return function(t,n){t.on("click",function dispatchBehaviour(t){var r=Io(),i=Hu(t,r,e);n.forEach(function(t){return e.dispatchBehaviour(t,i)}),r.stopPropagation()})}};function physical_defineProperty(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var Uu=(physical_defineProperty(Du={},Qo,function drag(e){return function(t,n){Bu(t,n,e)}}),physical_defineProperty(Du,Zo,zu),physical_defineProperty(Du,eu,Vu),physical_defineProperty(Du,tu,function longtouch(e){return function(t,n){var r=void 0,i=void 0;i=!1,r=Io(),t.on("touchstart",function(t){r=Io(),i=!1,setTimeout(function(){i?n.forEach(function(t){return e.dispatchBehaviour(t,{criteria:null})}):function dispatchBehaviour(t){var i=Hu(t,r,e);n.forEach(function(t){return e.dispatchBehaviour(t,i)}),r.stopPropagation()}(t)},100)}).on("touchend",function(){i=!0})}}),physical_defineProperty(Du,nu,function touchdrag(e){return function(t,n){Bu(t,n,e,!0)}}),Du),Wu=function(){function defineProperties(e,t){for(var n=0;n1&&void 0!==arguments[1]&&arguments[1];var t=arguments[2],n=arguments[3];this.firebolt.context.layers().forEach(function(r){return!1!==r.config().interactive&&r.applyInteractionStyle(t,e.uids,n)})}}]),SurrogateSideEffect}(),Xu=function(){function defineProperties(e,t){for(var n=0;n=0&&l<=t&&c>=0&&s<=n){var f=Ru(a.getSourceInfo(),{startPos:{x:u,y:c},endPos:{x:l,y:s}},a.data().getFieldsConfig());o(f)}}).on("end",function(){var e=i.width,t=i.height,n=Math.min(e-r.width,Math.max(r.x,0)),u=Math.min(t-r.height,Math.max(r.y,0)),c=u+r.height,s=n+r.width;if(n>=0&&s<=e&&u>=0&&c<=t){var l=Ru(a.getSourceInfo(),{startPos:{x:n,y:u},endPos:{x:s,y:c},snap:!0},a.data().getFieldsConfig());l.dragEnd=!0,o(l)}}))}}(c)(Ao(this),["brush"],x)}).merge(w).each(function(e){var t=Ao(this);for(var n in b&&(t=t.transition().duration(b.duration)),e)({}).hasOwnProperty.call(e,n)&&fa(e[n])&&t.attr(n,e[n])}),k=Gi(u.defClassName,this._id,d);return C.classed(k.join(" "),!0),C.classed(u.className,!0),this}},{key:"hide",value:function hide(e){Qu(this,e.sideEffectGroup,!1)}},{key:"show",value:function show(e){Qu(this,e.sideEffectGroup,!0)}}],[{key:"defaultConfig",value:function defaultConfig(){return{defClassName:"selection-box-group",className:"",classPrefix:"muze",box:{defClassName:"selection-box",className:""},transition:{duration:200}}}},{key:"formalName",value:function formalName(){return"selectionBox"}}]),SelectionBox}(),ec={position:"absolute",width:0,height:0},tc={classPrefix:"muze",defClassName:"tooltip-box",connectorClassName:"tooltip-connectors",className:"",row:{margin:0},content:{spacing:5,iconContainerSize:10,iconScale:1,iconShape:"circle",iconColor:"#ff0000",rowMargin:"0px",margin:10,separator:":",className:"tooltip-content-container",parentClassName:"tooltip-content-parent-container"},arrow:{size:10,disabled:!1,defClassName:"tooltip-arrow",className:"",color:"rgba(195,195,195,0.85)"}},nc=function getArrowPos(e,t,n,r){var i=void 0,a=n.x,o=n.y,u=n.boxHeight,c=n.boxWidth,s=r.arrow.disabled?0:r.arrow.size;if("left"===e||"right"===e){var l=0,f=u/2,h=t.y+t.height,d=o+u;t.y>o?(l=t.y-o,f=(h>=d?d-t.y:t.height)/2):d>h&&(f=Math.abs(o-(t.y+t.height))/2),i=l+f-s/2}else{var p=0,y=c/2,g=t.x+t.width,v=a+c;t.x>a?(p=t.x-a,y=(g>=v?v-t.x:t.width)/2):v>g&&(y=Math.abs(a-(t.x+t.width))/2),i=p+y-s/2}return i},rc=function placeArrow(e,t,n){var r=e._tooltipArrow,i=e._tooltipBackground,a=e._config,o=a.classPrefix,u=a.arrow,c=Gi(u.defClassName,e._id,a.classPrefix);r.style("display","block"),r.attr("class",""+c.join(" ")),"left"===t||"right"===t?(r.style("top",n+"px"),r.style("left",""),i.style("top",n+"px"),i.style("left","")):("bottom"===t?r.style("top","100%"):r.style("top","-"+u.size+"px"),r.style("left",n+"px"),"bottom"===t?i.style("top","100%"):i.style("top","-"+(u.size+3)+"px"),i.style("left",n+"px")),r.classed(o+"-tooltip-arrow",!0),r.classed(o+"-tooltip-arrow-"+e._arrowOrientation,!1),r.classed(o+"-tooltip-arrow-"+t,!0),i.classed(o+"-tooltip-background-arrow",!0),i.classed(o+"-tooltip-background-arrow-"+e._arrowOrientation,!1),i.classed(o+"-tooltip-background-arrow-"+t,!0)};n(11);function strategy_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t1&&void 0!==arguments[1]?arguments[1]:{},n=arguments[2],r=[],i=e.getData(),a=i.data,o=i.schema,u=t.formatters,c=t.separator,s=e.getFieldsConfig(),l=e.getFieldspace(),f=l.fieldsObj(),h=n.dimensionMeasureMap,d=n.axes,p=n.detailFields||[],y=o.filter(function(e){return e.type===ir.FieldType.DIMENSION}),g=o.filter(function(e){return e.type===ir.FieldType.MEASURE}),v=o.find(function(e){return-1!==p.indexOf(e.name)}),m=a.length,b=function getRowContent(e,n){var r=void 0,i=void 0,o=void 0,p=[],y=s[e].index,g=s[e].def.subtype===ir.DimensionSubtype.TEMPORAL?f[e].getMinDiff():0,v=u&&u[e]||oc(n,function(e){return e});if(null!==r){var b=n===ir.FieldType.MEASURE?a.map(function(e){return e[y]}):[].concat(strategy_toConsumableArray(new Set(a.map(function(e){return e[y]}))));b=b.filter(function(e){return""!==e});var _=d.color[0],x=d.shape[0],w=d.size[0],C=(_||x||w)&&m>1&&n!==ir.FieldType.MEASURE;b.forEach(function(n,u){var f=void 0,d=h[e];if(d&&d.length&&m>1){f=n;var y={value:""};C&&(y={type:"icon",color:_.getColor(n),shape:x.getShape(n),size:w.getSize(n)*t.iconScale}),d.length>1?(p.push([y,""+f]),d.forEach(function(e){o=s[e].index,r=a[u][o],i=oc("measure",l.fields[o]._ref.numberFormat())(r,g),p.push([{value:""+e+c,style:{"margin-left":t.margin+"px}"},className:t.classPrefix+"-tooltip-key"},{value:""+i,className:t.classPrefix+"-tooltip-value"}])})):(o=s[d[0]].index,r=a[u][o],i=oc("measure",l.fields[o]._ref.numberFormat())(r,g),p.push([y,{value:""+f+c,className:t.classPrefix+"-tooltip-key"},{value:""+i,className:t.classPrefix+"-tooltip-value"}]))}else f=e,i=v(r=n,g),p.push([{value:""+f+c,className:t.classPrefix+"-tooltip-key"},{value:""+i,className:t.classPrefix+"-tooltip-value"}])})}return p},_="keyValue";if(m>1&&v)r=function getTabularData(e,t,n,r){var i=[];return i.push(t.map(function(e){return e.name})),e.forEach(function(e){var a=[];t.forEach(function(t,i){var o=t.subtype===ir.DimensionSubtype.TEMPORAL?r[t.name]:0,u=t.type===ir.FieldType.MEASURE&&n.fields[i]._ref.numberFormat(),c=oc(t.subtype||t.type,u)(e[i],o);a.push(c)}),i.push(a)}),i}(a,o,l,n.timeDiffs),_="table";else{y.forEach(function(e){var t=e.subtype?e.subtype:e.type;r=[].concat(strategy_toConsumableArray(r),strategy_toConsumableArray(b(e.name,t)))});var x=[].concat(strategy_toConsumableArray(new(Function.prototype.bind.apply(Set,[null].concat(strategy_toConsumableArray(Object.values(h)))))));(m>1?g.filter(function(e){return-1===x.indexOf(e.name)}):g).forEach(function(e){var t=e.subtype?e.subtype:e.type;r=[].concat(strategy_toConsumableArray(r),strategy_toConsumableArray(b(e.name,t)))})}return{content:r,displayFormat:_}},cc={keyValue:function keyValue(e,t,n){return uc(e,t,n)}},sc="keyValue",lc=function(){function defineProperties(e,t){for(var n=0;n0?(this._config=na(this._config,arguments.length<=0?void 0:arguments[0]),this):this._config}},{key:"update",value:function update(e){return this._model=e.model,this._strategy=void 0!==e.strategy?e.strategy:sc,this._formatter=e.formatter,this}},{key:"context",value:function context(e){return this._context=e,this}},{key:"render",value:function render(e){var t=void 0,n=this._config,r=n.iconContainerSize,i=this._formatter,a=n.rowMargin,o=this._model;if(this._mount=e,(t=o instanceof Array?o:i instanceof Function?i(this._model,this._context):cc[this._strategy](this._model,this.config(),this._context))instanceof Function)e.html(t());else{var u=t,c="default";Di(t)&&(u=t.content,c=t.displayFormat);var s=Eo(e,"div",[c],n.classPrefix+"-tooltip-content",{},function(e){return e});if("table"===c){var l=Eo(s,"table",[1],n.classPrefix+"-tooltip-table"),f=Eo(l,"tbody",[1],n.classPrefix+"-tooltip-table-tbody"),h=Eo(f,"tr",u,n.classPrefix+"-tooltip-table-row");h.each(function(e,t){Ao(this).classed(n.classPrefix+"-tooltip-table-row-"+t,!0)}),Eo(h,"td",function(e){return e},n.classPrefix+"-tooltip-table-cell").each(function(e){Ao(this).html(e)})}else{var d=Eo(s,"div",u,n.classPrefix+"-tooltip-row"),p=Eo(d,"span",function(e){return e},n.classPrefix+"-tooltip-content");p.attr("class",n.classPrefix+"-tooltip-content"),Fo(d,{margin:a}),Fo(p,{display:"inline-block","margin-right":n.spacing+"px"}),p.each(function(e){var t=Ao(this);if(t.html(""),e instanceof Object)if("icon"===e.type){var n=Eo(t,"svg",[1]),i=Eo(n,"path",[1]),a=e.shape instanceof Function?e.shape:pa(e.shape);To(n,{x:0,y:0,width:r,height:r}),To(i,{d:a.size(e.size)(),transform:"translate("+r/2+", "+r/2+")"}),Fo(i,{fill:e.color}),Fo(n,{width:r+"px",height:r+"px"})}else t.html(e.value),e.className&&t.classed(e.className,!0),Fo(t,e.style);else t.html(e)})}}return this}},{key:"clear",value:function clear(){return this._model=null,this}}],[{key:"defaultConfig",value:function defaultConfig(){var e=tc.content;return e.classPrefix=tc.classPrefix,e}}]),Content}(),hc=function(){function defineProperties(e,t){for(var n=0;n0){var e=na({},this.constructor.defaultConfig());return this._config=na(e,arguments.length<=0?void 0:arguments[0]),this}return this._config}},{key:"addClass",value:function addClass(e){return this._tooltipContainer.classed(e,!0),this}},{key:"context",value:function context(){return arguments.length?(this._context=arguments.length<=0?void 0:arguments[0],this):this._context}},{key:"content",value:function content(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=this.config(),i=r.classPrefix,a=r.content.className,o=r.formatter,u=n.className||i+"-"+a+"-"+e,content=this._contents[e]=this._contents[e]||new fc,c=Eo(this._contentContainer,"div",[n.order],u);c.attr("class",i+"-"+a+" "+u),function reorderContainers(e,t){e.selectAll(t).sort(function(e,t){return e-t})}(this._contentContainer,"."+i+"-"+a);var s=r.content;return n.classPrefix=this._config.classPrefix,content.config(s),null===t?(content.clear(),c.remove(),delete this._contents[e]):(content.update({model:t,formatter:n.formatter||o}),content.context(this._context),content.render(c)),Object.keys(this._contents).length||this.hide(),this}},{key:"getContents",value:function getContents(){return Object.values(this._contents)}},{key:"position",value:function position(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(!Object.keys(this._contents).length)return this.hide(),this;this.show();var r=this._target,i=n.repositionArrow;if(r&&i){var a=this._tooltipContainer.node(),o=this._config,u=o.arrow.disabled,c=u?0:o.arrow.size,s=this._arrowOrientation,l="left"===s||"right"===s?t+a.offsetHeight-cr.y+r.height:e+a.offsetWidth-cr.x+r.width;if(!u)if(l){var f=void 0;this._tooltipArrow.style("display","none"),this._tooltipBackground.style("display","none"),this._tooltipConnectorContainer.style("display","block");var h=this._tooltipConnectorContainer.selectAll("path").data([1]),d=h.enter().append("path");"left"===s?f="M "+e+" "+(t+a.offsetHeight/2)+" L "+(r.x+r.width)+" "+(r.y+r.height/2):"right"===s?f="M "+(e+a.offsetWidth)+" "+(t+a.offsetHeight/2)+" L "+r.x+" "+(r.y+r.height/2):"bottom"===s&&(f="M "+(e+a.offsetWidth/2)+" "+(t+a.offsetHeight)+" L "+(r.x+r.width/2)+" "+r.y),d.merge(h).attr("d",f).style("display","block")}else{var p=nc(s,r,{x:e,y:t,boxHeight:a.offsetHeight,boxWidth:a.offsetWidth},this._config);rc(this,this._arrowOrientation,p),this._tooltipConnectorContainer.style("display","none")}}var y=this._offset||{x:0,y:0};return this._tooltipContainer.style("left",y.x+e+"px").style("top",y.y+t+"px"),this}},{key:"positionRelativeTo",value:function positionRelativeTo(e){var t=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=void 0,i=n.orientation;if(this.show(),!e)return this.hide(),this;var a=this._extent,o=this._tooltipContainer.node();this._tooltipContainer.style("top","0px").style("left","0px");var u=o.offsetWidth+2,c=o.offsetHeight+2,s=this._config,l=this._offset,f=s.arrow.disabled,h=f?0:s.arrow.size,d=void 0===n.draw||n.draw,p=e.y,y=e.x+e.width+l.x,g=a.width-y,v=e.x+l.x-a.x,m=p>c+h,b=g>=u+h,_=v>=u+h;return this._target=e,i||(i=m?"vertical":b||_?"horizontal":"vertical"),"horizontal"===i?r=function positionHorizontal(){var n=void 0,r=e.x+e.width,i=e.y;return b?(n="left",r+=h):_?(r=e.x-u,n="right",r-=h):(n="left",r+=h),e.height2&&void 0!==arguments[2]?arguments[2]:{},r=0,i=0,a=e.mergedEnter.model,o=this.firebolt.context,u=this.drawingContext();if(a.isEmpty()||null===t.criteria||!1===e.isSourceFieldPresent)return this.hide(n,null),this;var c=this._tooltips,s=this.config(),l={width:u.width,height:u.height},f=t.showInPosition,h=s.padding,d=[],p="fragmented"===s.mode,y=o.getSourceInfo(),g=y.fields,v=!!(!!g.x[0]&&g.x[0].type()===ir.FieldType.DIMENSION),m=t.position,b=[],_={},x=a.getData().uids;p?d.push.apply(d,function tooltip_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);tu.height:i>u.width)break;b.push({x:z.x,y:z.y,width:H.width,height:H.height,tooltip:R})}}for(var V in c)if(!_[V]){var U=c[V];U.content(t.action,null),U.getContents().length||(U.remove(),delete c[V])}return p&&(!function spaceOutBoxes(e,t,n){var r=void 0,i=void 0,a=void 0,o=void 0,u=void 0,c=e.length,s=function spaceOutIfOverlap(e,t,u){a=e.x,o=e.width,r=e.y,i=e.height;var c=r+i,s=a+o;n?(u?rt.y)&&(t.y=u?e.y-t.height-5:c+5):(u?at.x)&&(t.x=u?e.x-t.width-5:s+5)};for(e.sort(function(e,t){return n?e.y-t.y:e.x-t.x}),u=0,u=0;ut.height||e[u].x+e[u].width>t.width)for(n?e[u].y-=e[u].height+e[u].y-t.height:e[u].x-=e[u].width+e[u].x-t.width,u=c-1;u>0;u--)s(e[u],e[u-1],!0)}(b,l,v),b.forEach(function(e){return e.tooltip.position(e.x,e.y,{repositionArrow:!0})})),this}},{key:"hide",value:function hide(e){var t=this._tooltips;for(var n in t)if({}.hasOwnProperty.call(t,n)){var r=e.strategy||this._strategy;t[n].content(r,null),t[n].hide()}}}],[{key:"defaultConfig",value:function defaultConfig(){return{padding:5,offset:{x:0,y:0}}}},{key:"formalName",value:function formalName(){return"tooltip"}}]),Tooltip}(),vc=(n(15),function(){function defineProperties(e,t){for(var n=0;n2&&void 0!==arguments[2]?arguments[2]:{},r=this._strategies[n.strategy||this._strategy];return!1!==e.isSourceFieldPresent&&r(e,this,n.strategy||this._strategy),this}}],[{key:"formalName",value:function formalName(){return"highlighter"}},{key:"target",value:function target(){return"visual-unit"}}]),PlotHighlighter}(),wc=function(){function defineProperties(e,t){for(var n=0;n67.5&&v<=90||(r+=2*y),u=p,u=90===l?y:270===l?-y:0,o===Yc?(u=0===t&&c&&s===ds?u+u/2:u,Ao(this).attr("transform","translate("+(-u+f)+" \n "+(-r-f)+") rotate("+l+")")):(u=0===t&&c&&s===ds?u-u/2:u,Ao(this).attr("transform","translate("+(u-f)+" \n "+(r+f)+") rotate("+l+")"))}),t},Os=function changeTickOrientation(e,t,n){var r=t._smartTicks,i=t.config(),a=t.dependencies().labelManager,o=i.labels,u=i.orientation,c=o.rotation,s=o.smartTicks,l=e.selectAll(".tick text");if(l.selectAll("tspan").remove(),0===c||!1!==s||"top"!==u&&"bottom"!==u)if(0===c&&!1===s)l.attr("transform","");else{l.attr("y",0).attr("x",0).text(""),Eo(l,"tspan",function(e,t){return r[t].lines},"smart-text").attr("dy","0").style("opacity","0").transition().duration(1e3).attr("dy",function(e,t){return"bottom"===u||0!==t?r[t].oriTextHeight:-r[t].oriTextHeight*(r[t].lines.length-1)-n}).style("opacity",1).attr("x",0).text(function(e){return e})}else Ms(t,l,a,i);return l},Ts=function setFixedBaseline(e){e.config().fixedBaseline&&e.setFixedBaseline()},Fs=function setAxisNamePos(e,t,n){var r=n.axisNameHeight,i=n.yOffset,a=n.labelOffset,o=n.availableSpace;switch(t){case Xc:e.attr("transform","translate("+-(o.width-r)+","+(i+a)+")rotate(-90)");break;case Kc:e.attr("transform","translate("+(o.width-r)+","+(i+a)+")rotate(90)");break;case Yc:e.attr("transform","translate("+o.width/2+","+(-o.height+r)+")");break;case Gc:e.attr("transform","translate("+o.width/2+","+(o.height-r/2)+")")}return e};function cartesian_axis_helper_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);tt.length&&(t=p,r=e.smartTicks()?e.smartTicks()[s]:{},n=o[s]),d}),n=h.getOriSize(t),{largestLabel:t,largestLabelDim:n,axisTickLabels:i,allLabelLengths:o,smartTick:r}},js=function setOffset(e){var t=0,n=0,r=e.logicalSpace(),i=e.config(),a=i.orientation,o=i.xOffset,u=i.yOffset;a===Xc&&(t=void 0===o?r.width:o),a===Yc&&(n=void 0===u?r.height:u),e.config({xOffset:t,yOffset:n})},Is=function adjustRange(e,t,n,r){var i=function getAxisOffset(e,t,n){var r=Math.abs(t[1]-t[0])/(n[1]-n[0])*e,i=t[1]-t[0],a=i/r;return(i-i/(a+1)*a)/2}(e,t,n);return r===Yc||r===Gc?(t[0]+=i,t[1]-=i):(t[0]-=i,t[1]+=i),t},Ds=function registerChangeListeners(e){return e.store().model.next(["domain","range","mount","config"],function(){for(var t=arguments.length,n=Array(t),r=0;r0&&e.length*(t+this._minTickDistance.width)>i&&this.config({labels:{rotation:-90}})}return this}},{key:"adjustRange",value:function adjustRange(){return this}},{key:"getScaleValue",value:function getScaleValue(e){if(null!==e&&void 0!==e)return this.scale()(e)}},{key:"getTickSize",value:function getTickSize(){return this.axis().tickSize()}},{key:"getAxisDimensions",value:function getAxisDimensions(){return this.axisDimensions(function computeAxisDimensions(e){var t={},n=e.config(),r=n.name,i=n.labels,a=n.tickValues,o=(i.smartTicks?0:i.rotation)*Math.PI/180,u=e.dependencies().labelManager,c=Ns(e),s=c.largestLabelDim,l=c.axisTickLabels,f=c.smartTick,h=s.height,d=s.width;return 0===e.domain().length?null:(!1===e._rotationLock&&(e.setRotationConfig(a||l,s.width),e._rotationLock=!1),t=i.smartTicks?f:{width:Math.abs(h*Math.sin(o))+Math.abs(d*Math.cos(o)),height:Math.abs(d*Math.sin(o))+Math.abs(h*Math.cos(o))},u.setStyle(e._axisNameStyle),{tickSize:e.getTickSize(),tickLabelDim:t,axisLabelDim:u.getOriSize(r),largestLabelDim:s,axisTickLabels:l})}(this)),this.axisDimensions()}},{key:"getLogicalSpace",value:function getLogicalSpace(){return this.logicalSpace()||(this.logicalSpace(function calculateContinousSpace(e){e.range();var t=e.config(),n=e.getAxisDimensions(),r=t.orientation,i=t.show,a=t.showAxisName,o=n.axisLabelDim;if(!1===i)return{width:0,height:0};var u=o.width;if(r===Yc||r===Gc){var c=Ls(e,n,t),s=c.width,l=c.height;return{width:Math.max(s,u),height:l}}var f=Rs(e,n,t),h=f.width,d=f.height;return{width:h,height:Math.max(d,a?u:0)}}(this)),js(this),this.logicalSpace()),this.logicalSpace()}},{key:"invert",value:function invert(){for(var e=this,t=arguments.length,n=Array(t),r=0;ra[1];return"band"===r?(n=i.invertExtent(e,t),[i(o?n[n.length-1]:n[0]),i(o?n[0]:n[n.length-1])+i.bandwidth()]):[e,t]}},{key:"updateDomainBounds",value:function updateDomainBounds(e){var t=this.domain();return this.config().domain?t=this.config().domain:(0===t.length&&(t=e),e.length&&(t=[Math.min(t[0],e[0]),Math.max(t[1],e[1])])),this.domain(t)}},{key:"updateDomainCache",value:function updateDomainCache(e){!1===this._domainLock&&(this.domain([]),this._domainLock=!0);var t=[];return e&&e.forEach(function(e){void 0!==e&&null!==e&&t.push(e)}),this.updateDomainBounds(t)}},{key:"getMinTickDifference",value:function getMinTickDifference(){return this.domain()}},{key:"getFormattedTickValues",value:function getFormattedTickValues(e){return e}},{key:"setTickValues",value:function setTickValues(){var e=this.config().tickValues;return e?(e instanceof Array&&this.axis().tickValues(e),this):this}},{key:"getUnitWidth",value:function getUnitWidth(){return 0}},{key:"serialize",value:function serialize(){return{name:this.name,type:this.type,range:this.range(),config:this.config()}}},{key:"registerEvent",value:function registerEvent(e,t){this._eventList.push({name:e,action:t})}},{key:"on",value:function on(e,t){e=e||"update",this.registerEvent(e,t)}},{key:"render",value:function render(){return this.mount()&&function renderAxis(e){var t=e.config(),n=e.dependencies().labelManager,r=e.mount(),i=e.range(),a=e.axis(),o=e.scale(),u=e._axisNameStyle,c=e._tickLabelStyle,s=e.formatter,l=e.tickValues,f=t.orientation,h=t.name,d=t.labels,p=t.xOffset,y=t.yOffset,g=t.axisNamePadding,v=t.className,m=t.showAxisName,b=t.show,_=t.id,x=t.interpolator,w=t.classPrefix;if(b){var C=e.getTickSize(),k=Eo(Ao(r),"g",[e],""+v,{},function(e){return e.config().id});n.setStyle(c),"linear"===x&&e.setTickValues();var S=o.ticks||o.quantile||o.domain;s&&a.tickFormat(s(l||a.tickValues()||S()));var P=Math.abs(i[0]-i[1]),A=e.axisDimensions().tickLabelDim;k.attr("transform","translate("+p+","+y+")"),Ts(e),!1===d.smartTicks?k.transition().duration(1e3).call(a):k.call(a),k.selectAll(".tick").classed(w+"-ticks",!0),k.selectAll(".tick line").classed(w+"-tick-lines",!0),k.selectAll(".tick text").classed(w+"-ticks",!0).classed(w+"-ticks-"+_,!0),Os(k,e,C);var E=Eo(k,"text",[h],w+"-axis-name").attr("text-anchor","middle").classed(w+"-axis-name-"+_,!0).text(function(e){return e});E.classed(ys,!m);var M=P/2;n.setStyle(u);var O=n.getOriSize(h),T={labelProps:A,tickSize:C,axisNamePadding:g,axisNameHeight:O.height,axisNameWidth:O.width,yOffset:y,xOffset:p,labelOffset:M,availableSpace:e.availableSpace()};Fs(E,f,T)}}(this),this}},{key:"remove",value:function remove(){return this.store().unsubscribeAll(),Ao(this.mount()).remove(),this}},{key:"unsubscribe",value:function unsubscribe(){return this.store().unsubscribeAll(),this}},{key:"isReverse",value:function isReverse(){var e=this.range();return e[0]>e[1]}},{key:"getPixelToValueRatio",value:function getPixelToValueRatio(){var e=this.scale(),t=e.range(),n=e.domain();return Math.abs(t[1]-t[0])/(n[1]-n[0])}},{key:"id",get:function get(){return this._id}}],[{key:"defaultConfig",value:function defaultConfig(){return Es}}]),SimpleAxis}(),Vs=function(){function defineProperties(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:0,t=arguments[1],n=arguments[2],r=arguments[3],i=n.left,a=n.right,o=n.top,u=n.bottom,c=this.config(),s=c.orientation,l=c.fixedBaseline,f=this.getAxisDimensions().tickLabelDim;if(this.availableSpace({width:e,height:t}),s===Yc||s===Gc){var h=f.width;this.range([(l?0:h/2)+i,e-a-h/2]);var d=this.getLogicalSpace().height;r&&this.config({yOffset:Math.max(d,t)})}else{var p=f.height;this.range([t-u-(l?1:p/2),p/2+o]);var y=this.getLogicalSpace().width;r&&this.config({xOffset:Math.max(y,e)})}return this}},{key:"setTickValues",value:function setTickValues(){var e=this.config().tickValues,t=this.axis();return e?(e instanceof Array&&this.axis().tickValues(e),this):(t.tickValues(this.getTickValues()),this)}},{key:"getTickValues",value:function getTickValues(){var e=this.config(),t=e.orientation,n=e.tickValues,r=this.range(),i=this.axis(),a=Math.abs(r[0]-r[1]),o=Ns(this).largestLabelDim;return n?i.scale().ticks(n):function getNumberOfTicks(e,t,n,r){var i=n.scale().ticks(),a=r.config().numberOfTicks,o=i.length,u=o;return o*(1.5*t)>e&&(u=Math.floor(e/(1.5*t))),u=Math.min(a,Math.max(1,u)),n.scale().ticks(u)}(a,o[t===Gc||t===Yc?"width":"height"],i,this)}},{key:"getMinTickDifference",value:function getMinTickDifference(){return xa(this.config().tickValues)}},{key:"setFixedBaseline",value:function setFixedBaseline(e){var t=this.config(),n=t.orientation,r=t.labels.rotation,i=this.axis(),a=this._axisDimensions.largestLabelDim,o=a.width,u=a.height;return i.tickTransform(function(e,t){return 0!==t||n!==Xc&&n!==Kc?0!==t||n!==Yc&&n!==Gc||0!==r?"":"translate("+o/2+"px, 0px) rotate("+r+"deg)":"translate(0, -"+u/3+"px)"}),e}}],[{key:"type",value:function type(){return Qc}}]),ContinousAxis}(),Zs=function(){function defineProperties(e,t){for(var n=0;n0&&e.length*(t+this._minTickDistance.width)>a&&(a&&o0&&e.length*t>i&&(i&&1.25*a1?t.range:[al].concat(props_toConsumableArray(t.range)));var r=na(n,e.config()),i=na(r,t);return i.range instanceof Array&&(i.range=i.range.map(function(e,t){return sl(e,il[t])}),i.stops=t.stops||i.range.length),i.value=sl(i.value,i.value),i}},domain:{},scale:{},uniqueValues:{}};function color_strategy_defineProperty(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function color_strategy_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);tMath.min(t.length,18))for(var r=aa()(function hslInterpolator(){return Ne}(),t.map(function(e){return ul(e)})),i=0;i0&&void 0!==arguments[0]?arguments[0]:[];if(e.length){var t=this.scale(),n=t.range?t.range():null,r=this._colorStrategy.domainRange()(e,this.config().stops,n);this.domain(r.domain),r.range&&this.scale().range(r.range),this.uniqueValues(r.uniqueVals),this.scale().domain(r.scaleDomain||this.domain())}return this}},{key:"serialize",value:function serialize(){return{type:this.constructor.type(),scale:this.scale(),domain:this.domain(),config:this.config()}}},{key:"transformColor",value:function transformColor(e,t){var n=360*e[0],r=100*e[1],i=100*e[2],a=e[3]||1,o=n+t[0],u=r+t[1],c=i+t[2],s=a+t[3]||0;return{color:"hsla("+o+","+u+"%,"+c+"%,"+s+")",hsla:[o/360,u/100,c/100,s]}}},{key:"id",value:function id(){return this._id}}],[{key:"defaultConfig",value:function defaultConfig(){return ol}},{key:"type",value:function type(){return"color"}}]),ColorAxis}(),Sl={value:36,range:[36,1e3]};function size_strategy_defineProperty(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function size_strategy_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t0&&void 0!==arguments[0]?arguments[0]:0,t=this.config().value,n=this.scale(),r=this.domain()||[1,1];return n&&r[0]!==r[1]?this._sizeStrategy.range(e,n,this.domain(),this.uniqueValues()):t}},{key:"updateDomain",value:function updateDomain(e){if(e){var t=(0,this._sizeStrategy.domain)(e,this.config().intervals);this.domain(t.domain),this.uniqueValues(t.uniqueVals),this.scale().domain(t.scaleDomain||this.domain())}return this}},{key:"serialize",value:function serialize(){return{type:this.constructor.type(),scale:this.scale(),domain:this.domain(),range:this.range(),config:this.config()}}},{key:"id",value:function id(){return this._id}}],[{key:"defaultConfig",value:function defaultConfig(){return Sl}},{key:"type",value:function type(){return"size"}}]),SizeAxis}(),Ol={generator:null,value:"circle",range:["circle","diamond","star","cross","square","wye","triangle"]},Tl={config:{},domain:{},scale:{},uniqueValues:{},generator:{}},Fl=function(){function defineProperties(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:[];return e.length&&(this.uniqueValues(e),this.domain(e),this.scale().domain(e),this.config().generator&&(this._generatedShapes=function shapeGenerator(e,t){var n={};return e.forEach(function(e){n[e]=t(e)}),n}(e,this.config().generator))),this}},{key:"serialize",value:function serialize(){return{type:this.constructor.type(),scale:this.scale(),domain:this.domain(),range:this.config().range,config:this.config()}}},{key:"id",value:function id(){return this._id}}],[{key:"defaultConfig",value:function defaultConfig(){return Ol}},{key:"type",value:function type(){return"shape"}}]),ShapeAxis}();function data_type_scale_map_defineProperty(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var Il="measure",Dl="temporal",Ll=(data_type_scale_map_defineProperty(Nl={},"dimension",Zc),data_type_scale_map_defineProperty(Nl,Il,Qc),data_type_scale_map_defineProperty(Nl,Dl,Jc),function(e,t,n){var r=n.groupBy instanceof Array?n.groupBy:[n.groupBy],i=r.map(function(t){return e.findIndex(function(e){return e.name===t})});if(void 0!==i.find(function(e){return-1===e}))throw new Error("Groupby field "+r+" not found in schema");return function nestCollection(e){var t=T();return e.keys.forEach(function(e){return t.key(function(t){return t[e]})}),t.entries(e.data)}({keys:i,data:t})});var Rl;function transform_factory_defineProperty(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var Bl=(transform_factory_defineProperty(Rl={},"identity",function identityTransform(e,t,n){return t}),transform_factory_defineProperty(Rl,"group",Ll),transform_factory_defineProperty(Rl,"stack",function(e,t,n){var r=n.uniqueField,i=n.value,a=n.groupBy,o=n.sort||"descending",u=function normalizeData(e,t,n,r,i){var a=Ll(t,e,{groupBy:r}),o=t.findIndex(function(e){return e.name===r}),u=t.findIndex(function(e){return e.name===n}),c=t.findIndex(function(e){return e.name===i}),s=e.map(function(e){return e[c]}).filter(function(e,t,n){return n.indexOf(e)===t}).sort(),l=t.reduce(function(e,t,n){return e[n]=t.name,e},{});return{data:a.map(function(e){var t={},n=e.values.reduce(function(e,n){return e=n.reduce(function(e,r,i){return i===c?(e[r]=n[u],t[r]=n):i!==u&&(e[l[i]]=r),e},e)},{});return n._tuple=t,s.forEach(function(t){if(void 0===n[t]){n[t]=0;var r=new Array(e.values[0].length);r[o]=e.key,r[c]=t,n._tuple[t]=r}}),n}),keys:s}}(t,e,i,r,a),c=u.keys,s={},l=n.orderBy,f=e.findIndex(function(e){return e.name===l}),h=e.findIndex(function(e){return e.name===a});-1!==f&&(c.forEach(function(e){var n=t.find(function(t){return t[h]===e});s[e]=n[f]}),u.keys.sort(function(e,t){return s[e].localeCompare(s[t])}));var d=va({keys:u.keys,offset:n.offset||"diverging",order:o,data:u.data});return d.forEach(function(e){e.forEach(function(t){t.data=t.data._tuple[e.key]})}),d}),Rl);var zl=function transformFactory(e){var t=Bl[e];if("function"!=typeof t)throw new Error("Invalid transform type supplied.");return t},Hl=function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function sliceIterator(e,t){var n=[],r=!0,i=!1,a=void 0;try{for(var o,u=e[Symbol.iterator]();!(r=(o=u.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){i=!0,a=e}finally{try{!r&&u.return&&u.return()}finally{if(i)throw a}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}();var Vl,Ul=f.BAND,Wl=function getLayerColor(e,t){var n=e.datum,r=e.index,i=t.colorEncoding,a=t.colorAxis,o=t.colorFieldIndex,u="",c="";return i&&i.value instanceof Function?(c=i.value(n,r),u=i.value(n,r)):(u=a.getRawColor(n._data[o]),c=a.getHslString(u)),{color:c,rawColor:u}},ql=function transfromColor(e,t,n,r){t.meta.stateColor[n]=t.meta.stateColor[n]||t.meta.originalColor;var i=e.transformColor(t.meta.stateColor[n],r);return t.meta.stateColor[n]=i.hsla,i},Gl=function applyInteractionStyle(e,t,n,r){var i=e.getPlotElementsFromSet(t),a=e.axes().color,o=r.apply,u=r.interactionType;n.forEach(function(e){var t=e.type;i.style(t,function(n){var r=n.meta,i=r.colorTransform,c=r.stateColor,s=r.originalColor;if(i[u]=i[u]||{},o&&!i[u][t])return i[u][t]=e.intensity,ql(a,n,t,e.intensity).color;if(!o&&i[u][t])return i[u][t]=null,ql(a,n,t,e.intensity.map(function(e){return-e})).color;var l=c[t]?c[t]:s,f=Hl(l,4);return"hsla("+360*f[0]+","+100*f[1]+"%,"+100*f[2]+"%, "+(f[3]||1)+")"})})},Yl=function getAxesScales(e){var t=[Bc.X,Bc.Y].map(function(t){return e[t]}),n=Hl(t,2),r=n[0],i=n[1],a=[r,i].map(function(e){return e&&e.scale()}),o=Hl(a,2);return{xAxis:r,yAxis:i,xScale:o[0],yScale:o[1]}},Xl=function getIndividualClassName(e,t,n,r){var i=r.config().individualClassName,a="";return i instanceof Function&&(a=i(e,t,n,r)),a},Kl=function attachDataToVoronoi(e,t){var n;e.data((n=[]).concat.apply(n,function helpers_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t=e[0]?(i=d=e[1],h=f=e[0]):(i=d=e[0],h=f=e[1]),(t=a===ir.FieldType.MEASURE?{x:h,x0:d,y:n[u],y0:n[u]}:{x:n[o],x0:n[o],y:i,y0:f})._data=n,t._id=n[l]}else(t={x:e[o],y:e[u],x0:e[c],y0:e[s]})._data=e,t._id=e[l];return t})}).filter(function(e){return e.length})}(e,t,this.encodingFieldsInf(),this.transformType())}},{key:"getNearestPoint",value:function getNearestPoint(){return null}},{key:"applyInteractionStyle",value:function applyInteractionStyle(e,t,n){var r=(this.config().interaction||{})[e];r&&Gl(this,t,r,{apply:n,interactionType:e})}},{key:"transformType",value:function transformType(){return arguments.length?(this._transformType=arguments.length<=0?void 0:arguments[0],this):this._transformType}},{key:"render",value:function render(){return this}},{key:"elemType",value:function elemType(){return"g"}},{key:"remove",value:function remove(){return this.store().unsubscribeAll(),Ao(this.mount()).remove(),this}},{key:"cachePoint",value:function cachePoint(e,t){if(null===e)return this;var n=this._pointMap;return!n[e]&&(n[e]=[]),n[e].push(t),this}},{key:"dataProps",value:function dataProps(){return arguments.length?(this._dataProps=arguments.length<=0?void 0:arguments[0],this):this._dataProps}},{key:"getIdentifiersFromData",value:function getIdentifiersFromData(e){var t=this.data().getData().schema,n=this.data().getFieldsConfig(),r=[[],[]],i=this.encodingFieldsInf(),a=i.xFieldType,o=i.yFieldType,u=i.xField,c=i.yField,s=[a,o].map(function(e){return e===ir.FieldType.MEASURE}),l=tf(s,2),f=l[0],h=l[1];if(t.forEach(function(t,i){var a=t.name;n[a].def.type===ir.FieldType.DIMENSION&&(r[0].push(a),r[1].push(e[i]))}),f&&h){var d,p,y=n[u].index,g=n[c].index;(d=r[0]).push.apply(d,[u,c]),(p=r[1]).push.apply(p,[e[y],e[g]])}return r}},{key:"getPlotSpan",value:function getPlotSpan(){return{x:0,y:0}}},{key:"getPlotPadding",value:function getPlotPadding(){return{x:0,y:0}}},{key:"getPointsFromIdentifiers",value:function getPointsFromIdentifiers(e){var t,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=n.getAllAttrs,i=n.getBBox;if(!this.data())return[];var a=void 0,o=void 0;if(e instanceof ar.a){var u=e.getData();a=u.schema.map(function(e){return e.name}),o=u.data}else a=e[0],o=e.slice(1,e.length);var c=this._points,s=this.data().getFieldsConfig(),l=(t=[]).concat.apply(t,function base_layer_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t2&&void 0!==arguments[2]?arguments[2]:{},r=Ao(n.event.target).data()[0];if(Di(r)){var i=r.datum,a=i.data,o=i.uid;return{id:this.getIdentifiersFromData(a,o),layerId:this.id()}}return null}},{key:"getPlotElementsFromSet",value:function getPlotElementsFromSet(e){return Ao(this.mount()).selectAll(this.elemType()).filter(function(t){return-1!==e.indexOf(t.datum.uid)})}},{key:"render",value:function render(e){var t=this,n=this.measurement(),r=n.height,i=n.width,a=this.config(),o=a.classPrefix,u=a.defClassName,c=a.minOuterRadius,s=a.innerRadius,l=a.outerRadius,f=a.cornerRadius,h=a.padAngle,d=a.padRadius,p=a.padding,y=a.transition,g=a.innerRadiusFixer,v=this.axes().size,m=this._store,b=m.get("transformedData"),_=r-p.top-p.bottom,x=i-p.left-p.right,w=Gi(u,this.id(),o),C=function getRadiusRange(e,t,n){var r=n.minOuterRadius,i=n.innerRadius,a=n.outerRadius,o=n.innerRadiusFixer;return[Math.max(i+o||0,r),a||Math.min(t,e)/2]}(x,_,{minOuterRadius:c,innerRadius:s,outerRadius:l,innerRadiusFixer:g}),k=this.axes().color,S=l||Math.min(_,x)/2,P=m.get("domain").radius,A=function rangeValueGetter(e){return function getRangeValue(e,t,n,r,i){var a=1,o=e.outerRadiusValue,u=e.sizeVal,c=i.domain(),s=i.getSize(u)/(c?i.range()[1]:i.config().value);return a*=(t[1]-t[0])/(n[1]-n[0]),(t[0]+(o-n[0])*a||r)*s}(e,C,P,S,v)},E=bf().innerRadius(s?Math.min(_/2,x/2,s):0).cornerRadius(f).padAngle(h).padRadius(d);this._chartWidth=x,this._chartHeight=_;var M=Eo(Ao(e),"g",[1],w[0]+"-group").classed(w[1]+"-group",!0).attr("transform","translate("+x/2+","+_/2+")"),O=[],T=0;return Eo(M,"g",b,""+w[0],{update:function tween(e){Eo(e,"path",function(e,t){return[{datum:e,index:t,arcFn:E,meta:{originalColor:k.getRawColor(e.colorVal),stateColor:{},colorTransform:{}}}]},w[0]+"-path").style("fill",function(e){return k.getColor(e.datum.colorVal)}).transition().duration(y.duration).attrTween("d",function(){for(var e=arguments.length,t=Array(e),n=0;n0&&e.forEach(function(e){var i=e[0].datum.startAngle,a=e[e.length-1].datum.endAngle,o=2*Math.PI*i/(2*Math.PI+i-a);e.forEach(function(e){var i=e.elem,a=e.datum;i.each(function(){var e=Ao(this);e.selectAll("path").transition().duration(t.duration).attrTween("d",function(){return function(e){var t=n(a);return a.outerRadius=t,r(ra()(a,{startAngle:o,endAngle:o,outerRadius:t})(e))}}).remove(),e.remove()})})})}(O,y,A,E),this}},{key:"getPointsFromIdentifiers",value:function getPointsFromIdentifiers(e){if(!this.data())return[];var t=e[0],n=e.slice(1,e.length),r=Ao(this.mount()).selectAll("path").data(),i=this.data().getFieldsConfig(),a=r.filter(function(e){var r=e.datum.data,a=e.datum.uid;return t.every(function(e,t){return e in i&&i[e].def.type===ir.FieldType.DIMENSION?-1!==n.findIndex(function(n){return n[t]===r[i[e].index]}):e!==nr.ROW_ID||-1!==n.findIndex(function(e){return e[t]===a})})})[0];if(a){var o=a.arcFn.centroid(a.datum);return[{x:o[0]+this._chartWidth/2,y:o[1]+this._chartHeight/2,width:2,height:2}]}return[]}}],[{key:"defaultConfig",value:function defaultConfig(){return yf}},{key:"formalName",value:function formalName(){return"arc"}}]),ArcLayer}(),xf=function drawText(e,t,n,r){var i=Ao(e).selectAll("g").data(t),a=i.enter().append("g").each(function(e){To(this,e.enter)}).merge(i),o=Lo(Ao(e),n.className),u=parseInt(o.fontSize,10);return r.setStyle(o),a.each(function(e){var t,n=Ao(this),i=e.update,a=e.text,o=e.color,c=e.textanchor,s=e.style,l=e.background;if(t=l.value){var f=l.padding,h=void 0,d=r.getOriSize(e.text),p=d.width,y=d.height,g=Eo(n,"rect",[1]);h="end"===c?p:"start"===c?0:p/2,To(g.node(),{x:i.x-h-f/2,y:i.y-u-f/2,width:p+f,height:y+f}),l&&Fo(g,{background:t})}var v=Eo(n,"text",function(e){return[e]}).text(a),m=v.node();s&&Fo(m,s),o&&Fo(m,{fill:o}),e.className&&v.classed(e.className,!0),To(m,i),v.attr("text-anchor",c)}),i.exit().remove(),i},wf={defClassName:"layer-text",classPrefix:"muze",className:"",transform:{type:"identity"},interaction:{highlight:[{type:"fill",intensity:[0,0,-15,0]}],fade:[{type:"fill",intensity:[0,0,15,0]}],focus:[{type:"fill",intensity:[0,0,15,0]}]},transition:{effect:"cubic",duration:1e3},encoding:{color:{},text:{value:"",background:{padding:10}}},states:{highlight:{className:"muze-layer-text-highlight"},fadeout:{className:"muze-layer-text-fadeout"},selected:{className:"muze-layer-text-selected"}}},Cf=(n(27),function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function sliceIterator(e,t){var n=[],r=!0,i=!1,a=void 0;try{for(var o,u=e[Symbol.iterator]();!(r=(o=u.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){i=!0,a=e}finally{try{!r&&u.return&&u.return()}finally{if(i)throw a}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}()),kf=function(){function defineProperties(e,t){for(var n=0;n4)}(r)?r:pa(r).size(i)(a),Eo(n,"path",function(e){return[e]}).attr("d",s)}else e.shape="circle",createShape(e,t)}(e,this)}),(t=c?t:t.transition().duration(c?0:i.duration)).attr("transform",function(e){return"translate("+e.update.x+","+e.update.y+")"}).each(function(e){var t=e.style,n=Ao(this);Xi(t,function(e){return n.style(e,t[e])}),n.attr("class",""+a),n.classed(e.className,!0)});var h=l.exit();c?h.remove():h.transition().ease(Wi[u]).duration(o).on("end",function(){Ao(this).remove()}).style("fill-opacity",0).style("stroke-opacity",0)},Af={defClassName:"layer-point",className:"",classPrefix:"muze",defColorStyle:"stroke",interaction:{highlight:[{type:"fill",intensity:[0,0,-20,0]}],fade:[{type:"fill",intensity:[0,0,20,0]}],focus:[{type:"fill",intensity:[0,0,20,0]}]},innerPadding:.1,nearestPointThreshold:10,transform:{type:"identity"},transition:{effect:"cubic",duration:1e3},encoding:{size:{value:30},color:{},shape:{value:"circle"},x:{},y:{},strokeOpacity:{value:.5},fillOpacity:{value:.5}},shapes:["circle","cross","diamond","square","star","wye","triangle"],sizes:[20,30,40,50,60,70]},Ef=(n(29),function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function sliceIterator(e,t){var n=[],r=!0,i=!1,a=void 0;try{for(var o,u=e[Symbol.iterator]();!(r=(o=u.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){i=!0,a=e}finally{try{!r&&u.return&&u.return()}finally{if(i)throw a}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}()),Mf=function(){function defineProperties(e,t){for(var n=0;n3&&void 0!==arguments[3]?arguments[3]:{},a=[],o=t.size,u=t.shape,c=t.color,s=t.x,l=t.y,f=o.field,h=o.value,d=u.field,p=s.field,y=l.field,g=n.size,v=n.shape,m=this.data().getFieldsConfig(),b=m[p]&&m[p].def.type===ir.FieldType.DIMENSION,_=m[y]&&m[y].def.type===ir.FieldType.DIMENSION,x=b?Bc.X:_?Bc.Y:null,w=c&&c.field,C=m[w]&&m[w].index,k=this._store.get("measurement"),S=m[d]&&m[d].index,P=m[f]&&m[f].index,A=n.color,E=i.offset,M=E.x,O=E.y,T=function _loop(i,o){var u=e[i],s=u._data,l=h instanceof Function?h(u,i):g.getSize(s[P]),f=v.getShape(s[S]),d=[Bc.X,Bc.Y].map(function(e){var r=null===u[e]?void 0:u[e],i=e===Bc.X?k.width:k.height;return t[e].field?n[e].getScaleValue(r):i/2}),p=Ef(d,2),y=p[0],m=p[1];y+=M,m+=O;var b=Wl({datum:u,index:i},{colorEncoding:c,colorAxis:A,colorFieldIndex:C}),_=b.color,w=b.rawColor,E={fill:_,stroke:_};if(!isNaN(y)&&!isNaN(m)){var T={enter:{x:y,y:m},update:{x:y,y:m},shape:f,size:Math.abs(l),meta:{stateColor:{},originalColor:w,colorTransform:{}},style:E,_data:s,_id:u._id,source:u._data,rowId:u._id};T.className=Xl(u,i,e,r),a.push(T),r.cachePoint(u[x],T)}},F=0,N=e.length;F=0?k:C))):(p=c===Nc||r[e]>=0?k:C,y=Math.abs(p-(c===Nc?S:r[e]>=0?C:k))),d=C}else p=0,y=f[i];return{enterSpace:g,enter:d,pos:p,space:y}}),jf=function resolveDimensions(e,t,n){var r={xAxis:n.x,yAxis:n.y},i=Nf("x",r,t,e),a=i.enterSpace,o=i.enter,u=i.pos,c=i.space,s=Nf("y",r,t,e),l=s.enterSpace;return{enter:{x:o,y:s.enter,width:a,height:l},update:{x:u,y:s.pos,width:c,height:s.space}}},If=function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function sliceIterator(e,t){var n=[],r=!0,i=!1,a=void 0;try{for(var o,u=e[Symbol.iterator]();!(r=(o=u.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){i=!0,a=e}finally{try{!r&&u.return&&u.return()}finally{if(i)throw a}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),Df=function(){function defineProperties(e,t){for(var n=0;n=C.x&&e<=C.width+C.x&&t>=C.y&&t<=C.height+C.y){c=w;break}c=null}var k=c&&c._data;return k&&(u=this.getIdentifiersFromData(k,c._id)),c?{dimensions:[c.update],id:u,layerId:this.id()}:c}},{key:"getPlotSpan",value:function getPlotSpan(){return this._plotSpan}}],[{key:"formalName",value:function formalName(){return"bar"}},{key:"defaultConfig",value:function defaultConfig(){return Ff}},{key:"defaultPolicy",value:function defaultPolicy(e,t){var n=rf.defaultPolicy(e,t),r=n.encoding.color.field,i=n.transform;return r&&(i.groupBy=r),n}}]),BarLayer}(),zf={defClassName:"layer-tick",className:"",classPrefix:"muze",interaction:{highlight:[{type:"stroke",intensity:[0,0,-15,0]}],fade:[{type:"stroke",intensity:[0,0,15,0]}],focus:[{type:"stroke",intensity:[0,0,15,0]}]},innerPadding:.1,transform:{type:"identity"},transition:{effect:"cubic",duration:1e3},encoding:{color:{},x:{},y:{},x0:{},y0:{},strokeOpacity:{value:.5},fillOpacity:{value:.5}},states:{highlight:{className:"muze-layer-tick-highlight"},fadeout:{className:"muze-layer-tick-fadeout"},selected:{className:"muze-layer-tick-selected"}}},Hf=function(e){var t=e.points,n=e.container,r=e.keyFn,i=e.className,a=Ao(n),o=a.selectAll("path").data(t,r),u=o.enter().append("path");return a.attr("class",i||""),u.each(function(e){var t=Ao(this),n=e.enter||{};Object.entries(n).forEach(function(e){return!isNaN(e[1])&&t.attr(e[0],e[1])})}),o.exit().remove(),o.merge(u).each(function(e){var t=Ao(this),n=e.update,r=e.style||{},i=void 0!==n.x0?n.x0:n.x,a=void 0!==n.y0?n.y0:n.y,o="M "+n.x+" "+n.y+" L "+i+" "+a;e.className&&t.classed(e.className,!0),t.attr("d",o),Object.entries(r).forEach(function(e){return t.style(e[0],e[1])})})},Vf=(n(33),function(){function defineProperties(e,t){for(var n=0;n3&&void 0!==arguments[3]?arguments[3]:{},i=[],a=Yl(n),o=a.xAxis,u=a.yAxis,c=this.data().getFieldsConfig(),s=this.encodingFieldsInf(),l=s.xField,f=s.yField,h=s.x0Field,d=s.y0Field,p=s.xFieldType,y=s.yFieldType,g=p===ir.FieldType.DIMENSION,v=y===ir.FieldType.DIMENSION,m=g?Bc.X:v?Bc.Y:null,b=t.color,_=b&&b.field,x=c[_]&&c[_].index,w=this._store.get("measurement"),C=n.color,k=r.offset,S=k.x,P=k.y,A=r.span,E=A.x,M=A.y,O=0,T=e.length;O0&&(n[0]=[].concat(field_sanitizer_toConsumableArray(n[0]),field_sanitizer_toConsumableArray(n[1])),n[1]=[]),{fields:n.map(function(e,t){return 1===t?r[t].concat(n[t]):n[t].concat(r[t])}),dimensions:[].concat(field_sanitizer_toConsumableArray(n[0]),field_sanitizer_toConsumableArray(n[1])),measures:[].concat(field_sanitizer_toConsumableArray(r[0]),field_sanitizer_toConsumableArray(r[1])),temporal:[].concat(field_sanitizer_toConsumableArray(i[0]),field_sanitizer_toConsumableArray(i[1])),categorical:[].concat(field_sanitizer_toConsumableArray(a[0]),field_sanitizer_toConsumableArray(a[1]))}}(i,n)}),r=Sh(n,2),i=r[0],a=r[1],o=i.fields,u=i.dimensions,c=i.measures,s=i.temporal,l=i.categorical,f=a.fields,h=a.dimensions,d=a.measures;return{rows:o,rowDimensions:u,rowMeasures:c,rowTemporalFields:s,rowCategoricalFields:l,columns:f,columnTemporalFields:a.temporal,columnCategoricalFields:a.categorical,columnDimensions:h,columnMeasures:d}},Eh=function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function sliceIterator(e,t){var n=[],r=!0,i=!1,a=void 0;try{for(var o,u=e[Symbol.iterator]();!(r=(o=u.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){i=!0,a=e}finally{try{!r&&u.return&&u.return()}finally{if(i)throw a}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),Mh=function(){function defineProperties(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:{},t=arguments[1],n=Jh(th,t.rows,e),r=Eh(n,2),i=r[0],a=r[1],o=Jh("column",t.columns,e),u=Eh(o,2),c=u[0],s=u[1];return this.axisFrom({row:a,column:s}),this.headerFrom({row:i,column:c}),this}}]),VisualEncoder}(),Th={linear:Qs,band:Js,temporal:nl,size:Ml,color:kl,shape:jl},Fh={dimension:f.BAND,categorical:f.BAND,measure:f.LINEAR,temporal:f.TIME},Nh=function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function sliceIterator(e,t){var n=[],r=!0,i=!1,a=void 0;try{for(var o,u=e[Symbol.iterator]();!(r=(o=u.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){i=!0,a=e}finally{try{!r&&u.return&&u.return()}finally{if(i)throw a}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}();function encoder_helper_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t1?e.position="both":e.position=n.axisFrom()[a],r[o]=Ih(o,s[i],e,o===$f?l:f)}),r}},{key:"getFacetsAndProjections",value:function getFacetsAndProjections(e,t){for(var n=[],r=[],i=0,a=[],o=[],u=e[0],c=e[1],s=u.length,l=c.length,f=this.axisFrom(),h=0;hi)for(var g=i;g-1&&(r=[[b,b]],a.splice(_,1)),o.splice(0,1)}else{var x=a.length-1,w=a[x];r=[[w]];var C=Dh(o,w);C>-1&&(r=[[w,w]],o.splice(C,1)),a.splice(x,1)}return{facets:n=(n=[].concat(a,o)).filter(function(e,t,n){return t===n.findIndex(function(t){return t.toString()===e.toString()})}),projections:r}}},{key:"fieldSanitizer",value:function fieldSanitizer(e,t){return function get(e,t,n){null===e&&(e=Function.prototype);var r=Object.getOwnPropertyDescriptor(e,t);if(void 0===r){var i=Object.getPrototypeOf(e);return null===i?void 0:get(i,t,n)}if("value"in r)return r.value;var a=r.get;return void 0!==a?a.call(n):void 0}(CartesianEncoder.prototype.__proto__||Object.getPrototypeOf(CartesianEncoder.prototype),"fieldSanitizer",this).call(this,e,t)}},{key:"getRetinalFieldsDomain",value:function getRetinalFieldsDomain(e,t){var n=e.groupedModel,r={};for(var i in t)if({}.hasOwnProperty.call(t,i)){var a=t[i],o=a.field;if(!a.domain&&o){var u=Zh(n,o);r[o]=u}}return r}},{key:"serializeLayerConfig",value:function serializeLayerConfig(e){var t=[];return e.length&&e.forEach(function(e,n){var r=Gf.sanitizeLayerConfig(e);r.order=n,t.push(r)}),t}},{key:"getLayerConfig",value:function getLayerConfig(e,t){var n=[],r=e.columnFields,i=e.rowFields;return r.forEach(function(e){var r=e.toString();i.forEach(function(i){var a=[],o=i.toString(),u={x:{field:r},y:{field:o}},c=i.subtype(),s=function getDefaultMark(e,t){return"categorical"===e||"categorical"===t?"bar":"temporal"===e||"temporal"===t?"line":"point"}(e.subtype(),c),l=[{mark:s,def:{mark:s,encoding:u}}],f=function getLayerConfFromFields(e,t,n){return n.filter(function(n){var r,i,a,o=n instanceof Array?n:[n],u=(r=[]).concat.apply(r,encoder_helper_toConsumableArray(o.map(function(e){return e.encoding}).filter(function(e){return void 0!==e})));if(!u.length)return!0;var c=(i=[]).concat.apply(i,encoder_helper_toConsumableArray(u.map(function(e){return[e.x&&e.x.field,e.x0&&e.x0.field]}))).filter(function(e){return void 0!==e&&null!==e}),s=(a=[]).concat.apply(a,encoder_helper_toConsumableArray(u.map(function(e){return[e.y&&e.y.field,e.y0&&e.y0.field]}))).filter(function(e){return void 0!==e&&null!==e});if(!c.length&&!s.length)return!0;var l=!!c.length&&c.every(function(t){return-1!==e.indexOf(t)}),f=!!s.length&&s.every(function(e){return-1!==t.indexOf(e)});return c.length&&s.length?l&&f:l||f})}(e.getMembers(),i.getMembers(),t||[]);a=f.length?f.map(function(e){var t=na(na({},l[0].def),e),n=Gf.getSerializedConf(t.mark,t);return{mark:t.mark,order:t.order,def:n}}):l,n.push.apply(n,function cartesian_encoder_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);tt)for(var h=t;h0&&(e=na(e,t[0])),n.push(e)}),0===n.length&&(n=t),this.layers(n),n}},{key:"serializeLayerConfig",value:function serializeLayerConfig(e){var t=[];return e.length&&e.forEach(function(e){var n=Gf.getSerializedConf(e.mark,e);t.push({mark:e.mark,def:n})}),t}}],[{key:"type",value:function type(){return"polar"}}]),PolarEncoder}(),Hh=function(){function defineProperties(e,t){for(var n=0;n1&&void 0!==arguments[1]?arguments[1]:{},n=e.axisType,r=e.fieldsConfig,i=t.field,a=[],o=Th[n];return t.type=t.type?t.type:Qh(r,i||null),a.push(new o(t)),a}({axisType:e,fieldsConfig:t},n[e])}),r}},{key:"getLayerConfig",value:function getLayerConfig(e,t){var n=[];return t.forEach(function(t){var r=t;[nh,rh,ih].forEach(function(t){if(e[t]&&e[t].field){var n=r.def;r.def instanceof Array?n.forEach(function(n){n.encoding=n.encoding||{},!n.encoding[t]&&(n.encoding[t]={}),n.encoding[t].field=e[t].field}):(n.encoding=n.encoding||{},!n.encoding[t]&&(n.encoding[t]={}),n.encoding[t].field=e[t].field)}}),n.push(r)}),n}},{key:"setCommonDomain",value:function setCommonDomain(e){var t=e.domains,n=e.axes,r=e.encoding;return Object.entries(r).forEach(function(e){if(e[1]&&e[1].field){var r=e[0],i=e[1].field;i&&n[r].forEach(function(n){var r=t[i];!e[1].domain&&n.updateDomain(r)})}}),n}}],[{key:"type",value:function type(){return"retinal"}}]),RetinalEncoder}(),Uh=function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function sliceIterator(e,t){var n=[],r=!0,i=!1,a=void 0;try{for(var o,u=e[Symbol.iterator]();!(r=(o=u.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){i=!0,a=e}finally{try{!r&&u.return&&u.return()}finally{if(i)throw a}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),Wh=void 0;function group_utils_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t0?e[0].map(function(i,a){return new n({type:"header"},{labelManager:r}).source(function getHeaderText(e,t,n){var r="";if(t===n-1&&e.length>n){for(var i=t;i0&&void 0!==arguments[0]?arguments[0]:[];return new Vo(e)}([]),a=(i=i.data(n,r)).enter().append(t).merge(i);return i.exit()&&i.exit().remove(),a},nd=function getBorders(e,t){var n={top:!1,bottom:!1},r={left:!1,right:!1},i={top:!1,bottom:!1,left:!1,right:!1},a=e.rows,o=e.columns,u=e.values,c=Uh(a,2),s=c[0],l=c[1],f=Uh(o,2),h=f[0],d=f[1],p=t.fieldInfo(),y=p.rowDimensions,g=p.columnDimensions,v=p.rowTemporalFields,m=p.columnTemporalFields,b=p.columnMeasures,_=p.rowMeasures,x=y.length+g.length,w=_.length+b.length,C=v.length+m.length;if("polar"===t.constructor.type()){if(!x)return{showRowBorders:n,showColBorders:r,showValueBorders:i}}else if(!w&&!C&&x<=2)return{showRowBorders:n,showColBorders:r,showValueBorders:i};return n=function getRowBorders(e,t){var n={top:!1,bottom:!1};return(e.length>1||t.length>1)&&(n.top=!0,n.bottom=!0),n}(s,l),r=function getColumnsBorders(e,t){var n={left:!1,right:!1};return(e.length||t.length)&&(e[0]&&e[0].length>1||t[0]&&t[0].length>1)&&(n.left=!0,n.right=!0),n}(h,d),i=function getValueBorders(e,t){var n={top:!0,left:!0,bottom:!0,right:!0},r=[ah,oh],i=["top","bottom"];return e.forEach(function(e,t){e[0]&&e[0].length?n[r[t]]=!0:n[r[t]]=!1}),t.forEach(function(e,t){e.length?n[i[t]]=!0:n[i[t]]=!1}),n}([s,l],[h,d]),u.length>1&&(i.top=!0,i.bottom=!0),u.length&&u[0].length>1&&(i.left=!0,i.right=!0),{showRowBorders:n,showColBorders:r,showValueBorders:i}};function action_behaviour_map_defineProperty(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var rd=(action_behaviour_map_defineProperty(qh={},a.DRAG,{behaviours:[u.BRUSH],touch:!1}),action_behaviour_map_defineProperty(qh,a.HOVER,{behaviours:[u.HIGHLIGHT]}),action_behaviour_map_defineProperty(qh,a.LONGTOUCH,{behaviours:[u.SELECT],touch:!0}),action_behaviour_map_defineProperty(qh,a.TOUCHDRAG,{behaviours:[u.BRUSH],touch:!0}),action_behaviour_map_defineProperty(qh,a.CLICK,{behaviours:[u.SELECT],touch:!1}),qh),ad="config",od="data",ud="axes",cd="layerDef",sd="width",ld="height",fd="mount",hd="primaryXAxisUpdated",dd="primaryYAxisUpdated",pd="secondaryXAxisUpdated",yd="secondaryYAxisUpdated",gd="transform",vd="dataDomain",md="layersCreated",bd="fields",_d="timeDiffs",xd="layerAxisIndex";function src_helper_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t2&&void 0!==arguments[2]?arguments[2]:{},r=void 0,i=n.payload,a=n.selectionSet,o=n.propagationFields[t]||{},u=o.fields||[],c=o.append,s=i.criteria,l=e.context,f=l.cachedData()[0],h=l.id(),d=e.sideEffects(),p=e._behaviourEffectMap,y=a.mergedEnter.model,g=f.getFieldsConfig();i.sourceUnit=h,i.action=t,i.sourceCanvas=l.parentAlias();var v=e._propagationBehaviourMap[t]||t,m=[];null===s?r=null:Di(s)?(m=Object.keys(s||{}),r=y?y.project(m):null):(m=s[0],r=y?y.project(m):null);var b=l.facetByFields();if(null!==r&&u.length){var _=r.getData().schema.map(function(e){return e.name});r=function getModelWithFacetData(e,t){var n=e.getData(),r=n.schema,i=n.data,a=[],o=t[0].map(function(e){return{name:""+e,type:ir.FieldType.DIMENSION}}),u=t[1];return i.forEach(function(e){var t={};r.forEach(function(n,r){t[n.name]=e[r]}),o.forEach(function(e,n){t[e.name]=u[n]}),a.push(t)}),new ar.a(a,[].concat(data_propagator_toConsumableArray(r),data_propagator_toConsumableArray(o)))}(r,b),m=c?[].concat(data_propagator_toConsumableArray(_),data_propagator_toConsumableArray(u)):u,r=r.project(m)}var x=!1;m.length&&m.every(function(e){return g[e]&&g[e].def.type===ir.FieldType.MEASURE})&&(x=!0);var w=l.parentAlias();i.action=t;var C=e._actions.behavioural[v],k=!!C&&C.constructor.mutates(),S=function filterFn(e,t){var n=p[e.config.action],r=!e.config.groupId||n.some(function(e){return d[e.name||e].constructor.mutates()});return e.config.groupId!==t.groupId&&r},P=e._actions.behavioural[t],A=!!P&&P.constructor.mutates(),E={payload:i,action:t,criteria:r,isMutableAction:A,propagateInterpolatedValues:x,groupId:w,sourceId:A?w:h,filterFn:S,enabled:function enabled(e,n){return t===v||e.payload.sourceCanvas===n.context.parentAlias()}};f.propagate(r,E,!0),t!==v&&(E={payload:i,sourceId:k?w:h,criteria:r,isMutableAction:k,propagateInterpolatedValues:x,action:v,groupId:w,applyOnSource:t===v,enabled:function enabled(e,t){return e.payload.sourceCanvas!==t.context.parentAlias()},filterFn:S},f.propagate(r,E,!0,{filterImmutableAction:function filterImmutableAction(e,t){return e.groupId!==t.groupId}}))},Xd=function(){function defineProperties(e,t){for(var n=0;n1){var u=r[0].config();if("linear"===r[0].constructor.type()){if(u.alignZeroLine){r.forEach(function(e){return e.config({nice:!1})});var c=function getAdjustedDomain(e,t){var n=e[0]/(e[0]-t[0]),r=e[1]/(e[1]-t[1]),i=!1;return t[0]>0&&t[1]>0&&t[1]>0&&e[1]>0&&(i=!0,t[0]=0,t[1]=0),t[0]<0&&t[1]<0&&t[1]<0&&e[1]<0&&(i=!0,e[0]=0,e[1]=0),i||n===r||(n1&&void 0!==arguments[1]?arguments[1]:{},n=[],r=e;if(null===e)return[];var i=this.layers(),a=i.length;Di(e)&&(r=[Object.keys(e)],r=[].concat(visual_unit_toConsumableArray(r),visual_unit_toConsumableArray(function transposeArray(e){return e[0].map(function(t,n){return e.map(function(e){return e[n]})})}(Object.values(e)))));for(var o=0;o1&&void 0!==arguments[1]?arguments[1]:[]].map(function(e){return e.reduce(function(e,t){return e=[].concat(matrix_model_toConsumableArray(e),matrix_model_toConsumableArray(t.getMembers()))},[])})},ep=function createSelectedDataModel(e,t,n){return e.select(function(e){return t.every(function(t,r){return e[t].value===n[r]})})},tp=function uniqueKeyGenerator(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:[],i=t.facets,a=t.dataModel,o=t.uniqueValues;if(i[n+1]){var u=i[n];o.forEach(function(t){var o=a.select(function(e){return e[u].value===t}),c=Zh(o,i[n+1]);uniqueKeyGenerator(e,{facets:i,dataModel:o,uniqueValues:c},n+1,[].concat(matrix_model_toConsumableArray(r),[t]))})}else o.forEach(function(t){e.push([].concat(matrix_model_toConsumableArray(r),[t]))})},np=function projectRows(e,t){var n=t.allColumnProjections,r=t.rowProjections,i=t.optionalProjections;return r.length>0?r.map(function(t){var r=Jd(t,n),a=Zd(r,2),o=a[0],u=a[1];return e.project([].concat(matrix_model_toConsumableArray(o),matrix_model_toConsumableArray(u),matrix_model_toConsumableArray(i)))}):[e]},rp=function pushToMatrix(e,t){var n,r=[],i=e.matrix,a=e.datamodel,o=e.facetInfo,u=e.fieldInfo,c=u.rowProjections,s=u.colProjections,l=u.optionalProjections,f=o.rowIndex,h=o.columnIndex,d=c[f%c.length]||[];s.length>0?r=s.map(function(e,n){var r=Jd(e,d),i=Zd(r,2),u=i[0],c=i[1],p=a.project([].concat(matrix_model_toConsumableArray(u),matrix_model_toConsumableArray(c),matrix_model_toConsumableArray(l))),y={rowFields:d,columnFields:e},g={rowIndex:f,columnIndex:h*s.length+n};return t(p,{projections:y,indices:g},o)}):r=[t(a,{projections:{rowFields:d,columnFields:[]},indices:{rowIndex:f,columnIndex:h}},o)];i[f]=i[f]||[],(n=i[f]).push.apply(n,matrix_model_toConsumableArray(r))},ip=function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function sliceIterator(e,t){var n=[],r=!0,i=!1,a=void 0;try{for(var o,u=e[Symbol.iterator]();!(r=(o=u.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){i=!0,a=e}finally{try{!r&&u.return&&u.return()}finally{if(i)throw a}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}();function cell_creator_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t0?d.length:1):(a=g,o=p.length>0?p.length:1),s.length&&f===u&&l&&a.length){var h={axis:l,length:o,type:u},v=[];i<2?(h.keys=a,h.facetConfig=c.rows,v=up(h,r,t,n)):(h.facetConfig=c.columns,h.keys=a[0].map(function(e,t){return a.map(function(e){return e[t]})}),v=up(h,r,t,n)),r[u+"Headers"]=v}else r[u+"Headers"]=null}),r},sp=function computeMatrices(e,t){var n=e.resolver,r=e.datamodel,i=e.componentRegistry,a=e.encoders,o=t.globalConfig,u=t.selection,c=t.transform,s=o.autoGroupBy,l=n.dependencies().smartlabel,f=r.getFieldsConfig(),h=n.layerConfig(),d=n.registry(),p=n.horizontalAxis().fields,y=n.verticalAxis().fields,g=n.optionalProjections(t,h),v=n.getAllFields(),m={normalizedColumns:y,normalizedRows:p,facetsAndProjections:v,layers:h,fieldMap:f,otherEncodings:g,encoders:a,facetConfig:o.facetConfig||{},axisFrom:o.axisFrom||{},selection:u},b={GeomCell:n.getCellDef(d.GeomCell),AxisCell:n.getCellDef(d.AxisCell),BlankCell:n.getCellDef(d.BlankCell),TextCell:n.getCellDef(d.TextCell)},_=Yh(p),x=Yh(y);n.colCells({}),n.rowCells({}),n.datamodelTransform(c||{}),n.resetSimpleAxes();var w={exitCellMap:n.cacheMaps().entryCellMap,entryCellMap:new Map};n.cacheMaps(w);var C={config:o,suppliedLayers:a.simpleEncoder.serializeLayerConfig(n.layerConfig()),resolver:n,cell:b.GeomCell,encoder:a.simpleEncoder,newCacheMap:w,detailFields:t.detail},k=r.getFieldsConfig(),S=r;if(!s.disabled){var P=function extractFields(e,t){var n,r=Object.values(e).map(function(e){var t,n,r=(t=[]).concat.apply(t,group_utils_toConsumableArray(e));return(n=[]).concat.apply(n,group_utils_toConsumableArray(r.map(function(e){return e instanceof _h?e.getMembers():e})))});return(n=[]).concat.apply(n,group_utils_toConsumableArray(r).concat(group_utils_toConsumableArray(t)))}(v,function getFieldsFromSuppliedLayers(e,t){var n,r=[],i=e.map(function(e){return e.encoding||{}});return r=(r=[].concat(group_utils_toConsumableArray(r),[(n=[]).concat.apply(n,group_utils_toConsumableArray(i.map(function(e){return Object.values(e).map(function(e){return e.field})})))])).filter(function(e){return t[e]&&t[e].def.type===ir.FieldType.DIMENSION})}(C.suppliedLayers,r.getFieldsConfig())),A=P.filter(function(e){return k[e]&&k[e].def.type===ir.FieldType.DIMENSION}),E=s.measures;S=r.groupBy(A.length?A:[""],E).project(P)}var M=function getMatrixModel(e,t,n){var r=[],i=[],a=[],o=[],u=[],c=[],s=t.rowFacets,l=t.colFacets;if(t.colProjections.forEach(function(e){o.push.apply(o,matrix_model_toConsumableArray(e))}),t.allColumnProjections=o,s.length>0){var f=s[0].toString(),h=Zh(e,f);tp(i,{facets:s,dataModel:e,uniqueValues:h}),i.forEach(function(n){var i,a=Jd(s),o=Zd(a,1)[0],u=ep(e,o,n);c.push([s,n]),(i=r).push.apply(i,matrix_model_toConsumableArray(np(u,t)))})}else{var d;(d=r).push.apply(d,matrix_model_toConsumableArray(np(e,t)))}if(r=r.length>0?r:[[]],l.length>0){var p=l.map(function(e){return""+e}),y=p[0],g=Zh(e,y);tp(a,{facets:p,dataModel:e,uniqueValues:g}),r.forEach(function(r,i){c[i]=c[i]||[[],[]],a.forEach(function(a,o){u[i]=u[i]||[];var s=r instanceof ar.a?r:e,f=ep(s,p,a),h={matrix:u,datamodel:f,facetInfo:{rowFacets:c[i],colFacets:[l,a],rowIndex:i,columnIndex:o},fieldInfo:t};rp(h,n)})})}else r.forEach(function(r,i){c[i]=c[i]||[[],[]];var a={matrix:u,datamodel:r||e,facetInfo:{rowFacets:c[i],colFacets:[[],[]],rowIndex:i,columnIndex:0},fieldInfo:t};rp(a,n)});var v=a.length>0?a[0].map(function(e,t){return a.map(function(e){return e[t]})}):a;return{matrix:u,rowKeys:i,columnKeys:v}}(S,v,n.valueCellsCreator(C));n.cacheMaps().exitCellMap.forEach(function(e){e.remove()}),n.cacheMaps().exitCellMap.clear(),n.valueMatrix(M.matrix),n.createUnits(i,t);var O=function mutateAxesFromMap(e,t){var n=null,r=null,i=e.xAxesMap,a=e.yAxesMap,o=t.x,u=t.y;return o&&o.forEach(function(e){var t=i.get(e);(n=n||[]).push(t)}),u&&u.forEach(function(e){var t=a.get(e);(r=r||[]).push(t)}),{xAxes:n,yAxes:r}}(n.cacheMaps(),n.axes()),T=O.xAxes,F=O.yAxes;n.axes({x:T,y:F});var N=function generateMatrices(e,t,n,r){var i=e.unitHeight,a=e.unitWidth,o=e.facetsAndProjections,u=e.normalizedRows,c=e.normalizedColumns,s=e.selection,l=e.axisFrom,f=e.facetConfig,h=e.encoders,d=cp({fields:{rows:u,columns:c},matrices:t,facetsAndProjections:o,selection:s,axisFrom:l,facetConfig:f,encoders:h},n,r),p=d.columnsPrimary,y=d.columnsSecondary,g=d.rowsPrimary,v=d.rowsSecondary,m=d.leftHeaders,b=d.topHeaders,_=d.bottomHeaders,x=d.rightHeaders,w=[g,v,p,y].map(function(e){return e?e.getObjects():[]}),C=ip(w,4),k=C[0],S=C[1],P=C[2],A=C[3],E=[m,x].map(function(e){return e?e.getObjects().map(function(e){return e.getObjects()}):[]}),M=ip(E,2),O=M[0],T=M[1],F=O.length?O.map(function(e,t){return k[t]=k[t]?[k[t]]:[],[].concat(cell_creator_toConsumableArray(e),cell_creator_toConsumableArray(k[t]))}):k?k.map(function(e){return[e]}):[],N=S.length?S.map(function(e,t){return[e].concat(cell_creator_toConsumableArray(T[t]||[]))}):T.length?T.map(function(e){return[].concat(cell_creator_toConsumableArray(e))}):[],j=[];b&&b.getObjects().forEach(function(e){e.getObjects().forEach(function(e,t){j[t]=j[t]||[],j[t].push(e)})});P.length&&j.push(P);var I=[];A.length&&I.push(A);var D=I.length;_&&_.getObjects().forEach(function(e){e.getObjects().forEach(function(e,t){I[t+D]=I[t+D]||[],I[t+D].push(e)})});if(!F.length&&!N.length){var L=new n.BlankCell;L.setAvailableSpace(a,i),F=[[L]]}if(!(j.length||I.length&&I[0].length)){var R=new n.BlankCell;R.setAvailableSpace(a,i),I=[[R]]}return{rows:[F,N],columns:[j,I],selectionObj:d}}(m,{valuesMatrix:M,axesMatrix:n.axes()},b,l),j=N.rows,I=N.columns,D=N.selectionObj;return n.rowMatrix(j),n.columnMatrix(I),{rows:n.rowMatrix(),columns:n.columnMatrix(),values:n.valueMatrix(),isColumnSizeEqual:x,isRowSizeEqual:_,selection:D,dataModels:{groupedModel:S,parentModel:r}}},lp=function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function sliceIterator(e,t){var n=[],r=!0,i=!1,a=void 0;try{for(var o,u=e[Symbol.iterator]();!(r=(o=u.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){i=!0,a=e}finally{try{!r&&u.return&&u.return()}finally{if(i)throw a}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),fp=function(){function defineProperties(e,t){for(var n=0;n0?d[0].map(b):[],right:p.length>0?p[0].map(b):[]},w=[ah,oh].map(function(e){return g.map(function(t,n){return n===g.length-1?_[e]:x[e]})}),C=lp(w,2),k=C[0],S=C[1];if(0===g.length){var P=[ah,oh].map(function(e){return v.map(function(t,n){return 0===n?_[e]:x[e]})}),A=lp(P,2);r=A[0],i=A[1]}else r=v.map(function(){return d.length>0?d[0].map(b):[]}),i=v.map(function(){return p.length>0?p[0].map(b):[]});return s.notify({client:[k,S,r,i],action:"initialized",formalName:"facet-headers"}),{topLeft:k,topRight:S,bottomLeft:r,bottomRight:i}}},{key:"getMatrices",value:function getMatrices(e,t,n,r){return sp({datamodel:e,componentRegistry:n,encoders:r,resolver:this},t)}}]),MatrixResolver}(),dp=function(){function defineProperties(e,t){for(var n=0;n3&&void 0!==arguments[3]?arguments[3]:{},i=void 0,a=e.context.constructor.type(),o=r.payload,u=e.context.data(),c=e.context.metaData(),s=c.getData().schema[0].type,l={},f=e.context._id;l.action=Pp[t]||t,l.sideEffects=Ep[t],l.sourceCanvas=e.context.canvasAlias();var h=e._actions.behavioural[l.action].constructor.mutates();if(null===o.criteria)i=null;else{var d=n.mergedEnter,p=u.filter(function(e){return-1!==d.uids.indexOf(e.id)}).map(function(e){return e.value});if("step"===a||"discrete"===a&&"measure"===s){var y=Object.keys(o.criteria||{})[0];i=(p=u.filter(function(e){return-1!==d.uids.indexOf(e.id)}).map(function(e){return e.range})).length?c.select(function(e){for(var t=!1,n=0;n=p[n][0]&&e[y].value<=p[n][1]);n++);return t},{saveChild:!1}):null}else"gradient"===a?i=ca(c,o.criteria):p.length?i=function assembleModelFromIdentifiers(e,t){var n=[],r=void 0,i=e.getFieldsConfig();return t.length?function(){for(var e=t[0],a=e.length,o=0;o=s+l?[i.invert(s+l-c),i.invert(s+l)]:f-l1&&void 0!==arguments[1]?arguments[1]:{},i=t.config().classPrefix;e.mergedEnter.length||e.mergedExit.length?(n(e.mergedExit,r.className||i+"-legend-brighten",!1),n(e.mergedExit,r.className||i+"-legend-fadeout",!0),n(e.mergedEnter,r.className||i+"-legend-fadeout",!1)):n(e.completeSet,r.className||i+"-legend-fadeout",!1)},brighten:function brighten(e){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},i=t.config().classPrefix;e.mergedEnter.length||e.mergedExit.length?(n(e.mergedEnter,r.className||i+"-legend-brighten",!0),n(e.mergedExit,r.className||i+"-legend-brighten",!1)):n(e.completeSet,r.className||i+"-legend-brighten",!1)}}},Vp=function(){function defineProperties(e,t){for(var n=0;n2&&void 0!==arguments[2]?arguments[2]:{};(0,this._strategies[n.strategy||this._strategy])(e,this)}}],[{key:"formalName",value:function formalName(){return"highlighter"}}]),LegendHighlighter}(),Wp={config:{sanitization:function sanitization(e,t){return na(e._config||{},t)}},data:{},fieldName:{},legendContainer:{},measurement:{sanitization:function sanitization(e,t){var n=na(e._measurement,t);return["padding","border","margin"].forEach(function(e){n[e]=Math.min(n[e]>0?n[e]:0,.1*n.maxWidth,.1*n.maxHeight)}),n}},logicalSpace:{},metaData:{},range:{sanitization:function sanitization(e,t){return e.scale().range(t),e.resetLogicalSpace(),e.store().commit("range",t),t}},scale:{},smartTicks:{},store:{},title:{sanitization:function sanitization(e,t){return na(e._title||{},t)}}},qp="horizontal",Gp="vertical",Yp={height:30,width:30,maxWidth:1/0,maxHeight:1/0,padding:2,margin:2,border:1},Xp={text:"",orientation:function orientation(e){return"left"===e||"right"===e?"left":"center"}},Kp={classPrefix:"muze",borderStyle:"solid",borderColor:"rgba(0,0,0,0)",formatter:{bounds:{lower:"less than",upper:"more than"}},item:{text:{orientation:"right",width:10,formatter:function formatter(e){return e}},icon:{className:"legend-icon",height:20,width:20,color:"rgba(0,0,0,.5)",type:"square"}}},$p=function ICON_MAP(e){return e&&"string"==typeof e?pa(e):e};function legend_helper_defineProperty(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var Qp=function getScaleInfo(e){var t=e.constructor.type();return{scaleType:t,domain:e.uniqueValues(),steps:e.config().stops||1,scaleFn:Mp[t]}},Zp=function getInterpolatedData(e,t){for(var n=[],r=ia()(e[0],e[1]),i=0;i<=t;i++)n[i]=r(i/t);return n},Jp=function getDomainBounds(e,t,n){var r,i=t.scaleFn,a=t.scaleType,o=t.scale,u=n.domain,c=n.domainBounds,s=n.domainLeg,l=n.steps,f=u["lower"===e?0:u.length-1],h=l["lower"===e?0:l.length-1];return legend_helper_defineProperty(r={},a,"size"===a?o[i](f)*o.getScaleFactor():o[i](f)),legend_helper_defineProperty(r,"value",c[e]),legend_helper_defineProperty(r,"id","lower"===e?0:s.length+2),legend_helper_defineProperty(r,"range",[f,h]),r},ey=function(){function defineProperties(e,t){for(var n=0;n0?h.height+s:0,p=h.width+s,y=this.getLabelSpaces(s,c),g=function computeItemSpaces(e,t,n){var r=0,i=0,a={width:0,height:0},o=t.effPadding,u=t.titleWidth,c=t.labelSpaces,s=t.titleHeight,l=t.maxWidth,f=e.item,h=e.align,d=f.icon,p=f.text.orientation,y=[],g=[],v=0;return c.forEach(function(e,t){var c={width:0,height:0},s={width:0,height:0},l=n[t]||{};"left"===p||"right"===p?(e.width+=o,s.width=(l.size?2*Math.sqrt(l.size/Math.PI):d.width)+o,v=Math.max(s.width,v),c.width=e.width+v,e.height=Math.max(e.height,d.height)+o,s.height=e.height,c.height=e.height):(e.width=Math.max(e.width,l.size?2*Math.sqrt(l.size/Math.PI):d.width)+o,s.width=e.width,c.width=e.width,v=Math.max(s.width,v),e.height+=o,s.height=d.height+o,c.height=e.height+s.height),"horizontal"===h?r=Math.max(r,c.height):(r+=c.height,i=Math.max(i,c.width,u)+o),a={width:Math.max(c.width,a.width),height:Math.max(c.height,a.height)},y.push(c),g.push(s)}),y.forEach(function(e,t){"horizontal"===h?(e.height=r,g[t].width=v,"left"===p||"right"===p?(c[t].height=r,g[t].height=r,y[t].width=c[t].width+v):(c[t].width=v,y[t].width=v,c[t].width=v),i=Math.max(i+y[t].width)):(e.width=Math.max(i,l),"top"===p||"bottom"===p?(c[t].width=i,g[t].width=i,v=i):(g[t].width=v,y[t].width=c[t].width+v,c[t].width=a.width-v,i=Math.max(i,e.width)+o))}),i=Math.max(i,u),{totalHeight:r+=s+o,totalWidth:i,itemSpaces:y,iconSpaces:g,maxItemSpaces:a,maxIconWidth:v}}(this.config(),{effPadding:s,titleWidth:p,labelSpaces:y,titleHeight:d,maxWidth:r,maxHeight:i},this.data()),v=g.totalHeight,m=g.totalWidth,b=g.itemSpaces,_=g.iconSpaces,x=g.maxItemSpaces,w=g.maxIconWidth;return this.measurement({width:Math.max(m,t)+f+l,height:Math.max(v,n)+f+l,labelSpaces:y,iconSpaces:_,itemSpaces:b,maxItemSpaces:x,maxIconWidth:w,titleSpaces:{width:Math.min(r,this.measurement().width)-f-l,height:d}}),this}},{key:"getTitleSpace",value:function getTitleSpace(){return this._labelManager.setStyle(Lo(Ao("body"),this.config().classPrefix+"-legend-title")),this._labelManager.getOriSize(this.title().text?this.title().text:"")}},{key:"renderTitle",value:function renderTitle(e){var t=this.measurement(),n=t.titleSpaces,r=t.border,i=t.padding,a=t.width,o=this.config(),u=o.borderStyle,c=o.borderColor;return function titleCreator(e,t,n,r){var i=Eo(e,"table",[1],r.classPrefix+"-legend-title").style("width",n.width+"px").style("height",n.height+"px").style("border-bottom",n.border+"px "+r.borderStyle+" "+r.borderColor).style("text-align",t.orientation instanceof Function?t.orientation(r.position):t.orientation);return Eo(i,"td",[1],r.classPrefix+"-legend-title-text").style("width",n.width+"px").style("height","100%").style("padding",n.padding+"px").text(t.text).node()}(e,this.title(),{height:n.height,width:a,border:r,padding:i,borderStyle:u,borderColor:c},this.config())}},{key:"render",value:function render(){var e=this.firebolt(),t=this.config(),n=t.classPrefix,r=t.borderStyle,i=t.borderColor,a=this.measurement(),o=a.maxWidth,u=a.maxHeight,c=a.width,s=a.height,l=a.margin,f=a.border,h=Eo(Ao(this.mount()),"div",[1],n+"-legend-box");return h.classed(n+"-legend-box-"+this._id,!0),h.style("float","left"),h.style("width",Math.min(o,c)-2*l+"px").style("height",Math.min(u,s)-2*l+"px").style("margin",l+"px").style("border",f+"px "+r+" "+i),this.legendContainer(h.node()),this.renderTitle(h),e.createSelectionSet(this.data().map(function(e){return e.id})),h}},{key:"getCriteriaFromData",value:function getCriteriaFromData(e){var t=this.fieldName();return"measure"===this.metaData().getData().schema[0].type?function simple_legend_defineProperty(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}({},t,e.range):[[t],[e.value]]}}],[{key:"create",value:function create(e){return new SimpleLegend(e)}},{key:"defaultConfig",value:function defaultConfig(){return Kp}},{key:"defaultMeasurement",value:function defaultMeasurement(){return Yp}}]),SimpleLegend}();function position_config_defineProperty(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var oy=(position_config_defineProperty(ty={},"horizontal",{datasets:function datasets(e){return{row:[1],column:e}},itemContainerMeasures:function itemContainerMeasures(e){var t=e.itemSpaces;return{row:{width:e.width+"px",padding:"0px"},column:{width:function width(e,n){return t[n].width+"px"},padding:"0px"}}},getStepSpacesInfo:function getStepSpacesInfo(e){var t=e.maxItemSpaces;return{iconHeight:e.height,iconWidth:t.width,stepPadding:{horizontal:!0,vertical:!1}}}}),position_config_defineProperty(ty,"vertical",{datasets:function datasets(e){return{row:e,column:function column(e){return[e]}}},itemContainerMeasures:function itemContainerMeasures(e,t){var n=e.width;return{row:{width:n+"px",padding:t.padding+"px"},column:{width:n+"px",padding:"0px"}}},getStepSpacesInfo:function getStepSpacesInfo(e){var t=e.maxItemSpaces,n=e.width;return{iconHeight:t.height,iconWidth:n,stepPadding:{horizontal:!1,vertical:!0}}}}),ty),uy=(position_config_defineProperty(ny={},"left",oy.vertical),position_config_defineProperty(ny,"right",oy.vertical),position_config_defineProperty(ny,"top",oy.horizontal),position_config_defineProperty(ny,"bottom",oy.horizontal),ny),cy=(position_config_defineProperty(ry={},"left","end"),position_config_defineProperty(ry,"right","start"),position_config_defineProperty(ry,"top","center"),position_config_defineProperty(ry,"bottom","center"),ry),sy=(position_config_defineProperty(iy={},"left",[Op,"shape"]),position_config_defineProperty(iy,"right",["shape",Op]),position_config_defineProperty(iy,"top",[Op,"shape"]),position_config_defineProperty(iy,"bottom",["shape",Op]),iy),ly=function createLegendSkeleton(e,t,n,r){var i,a,o,u,c=e.measurement(),s=c.margin,l=c.border,f=c.titleSpaces,h=c.width,d=c.height,p=c.maxWidth,y=c.maxHeight;a=d-(f.height+2*s+2*l),i=h-(2*s+2*l),o=y-(f.height+2*s+2*l),u=p-(2*s+2*l);var g=Eo(t,"div",[1],n+"-legend-body");return g.select("."+n+"-legend-overflow").remove(),u&&u4)}(u)?u:$p(u).size(o)(),Eo(a,"path",function(e){return[e]}).attr("d",l)}}return e[1]="circle",createShape(e,t,"circle")}(n,Eo(l,"g",[n[1]],i+"-legend-icon"),n[3]?"circle":"square",o,a).attr("transform","translate("+(u/2-c)+" "+a/2+")").attr("fill",n[2]||s):Eo(l,"rect",[n[1]],i+"-legend-icon").attr("x",0).attr("y",0).attr("width",u).attr("height",a).attr("fill",n[2]||s)},py=function(){function defineProperties(e,t){for(var n=0;na[a.length-1]&&t.push(i[1])):t=Zp(i,a-1),(t=[].concat(gradient_legend_toConsumableArray(new Set(t))).sort(function(e,t){return e-t})).map(function(n,i){var a,u=t[i];return gradient_legend_defineProperty(a={},r,"size"===r?e[o](n)*e.getScaleFactor():e[o](Math.floor(n))),gradient_legend_defineProperty(a,"value",+u.toFixed(2)),gradient_legend_defineProperty(a,"id",i),a}).filter(function(e){return null!==e.value})}},{key:"getLabelSpaces",value:function getLabelSpaces(e){this.config({item:{text:{orientation:this.config().position}}});var t=function createAxis(e){var t=e.data(),n=e.config().align,r=e._cells.AxisCell,i=new Qs({id:"legend-"+e._id,orientation:n===Gp?"right":"bottom",style:e._computedStyle,nice:!1,showAxisName:!1,tickValues:t.map(function(e){return e.value}),fixedBaseline:!1},{labelManager:e._labelManager});return i.domain(gy(t)),i.range([1,1]),(new r).source(i).config({margin:{left:0,bottom:0,top:0,right:0}})}(this),n=t.getLogicalSpace(),r={width:n.width-e,height:n.height-e},i=t.source().domain().length,a=new Array(i).fill(r);return this.axis(t),a}},{key:"getDrawingContext",value:function getDrawingContext(){return{svgContainer:this._legendGradientSvg}}},{key:"render",value:function render(){var e=this.firebolt(),t=function get(e,t,n){null===e&&(e=Function.prototype);var r=Object.getOwnPropertyDescriptor(e,t);if(void 0===r){var i=Object.getPrototypeOf(e);return null===i?void 0:get(i,t,n)}if("value"in r)return r.value;var a=r.get;return void 0!==a?a.call(n):void 0}(GradientLegend.prototype.__proto__||Object.getPrototypeOf(GradientLegend.prototype),"render",this).call(this,this.mount());return function renderGradient(e,t){var n,r,i=e.config(),a=i.align,o=i.classPrefix,u=i.item,c=e.data(),s=vy(t,o,c),l=s.legendContainer,f=s.legendGradSvg,h=s.legendGradCont,d=s.linearGradient,p=s.legendRect,y=e.axis().source().getAxisDimensions().tickLabelDim,g=e.measurement(),v=g.padding,m=g.margin,b=g.border,_=g.titleSpaces,x=g.maxHeight,w=g.maxWidth,C=g.height,k=g.width,S={};n=Math.floor(C-(_.height+2*m+2*b)),r=Math.floor(k-(2*m+2*b)),a===qp?(S.height=u.icon.height,S.width=r-2*v-y.width/2,d.attr("x2","100%").attr("y1","0%"),h.attr("transform","translate( "+y.width/2+" 0)"),my(e,l,n-u.icon.height-v,r-2*v-1),l.classed(o+"-overflow-x",k>w),Mo(l,{height:C+"px",width:Math.min(k,w)+"px",padding:v+"px"}),p.attr("height",S.height),p.attr("width",S.width-y.width/2)):(S.height=n-2*v-y.height/2,S.width=u.icon.width,d.attr("x2","0%").attr("y1","100%"),h.attr("transform","translate(0 "+y.height/2+")"),my(e,l,n-2*v-1,r-u.icon.width-2*v),l.classed(o+"-overflow-y",C>x),Mo(l,{height:Math.min(C,x)+"px",width:k+"px",padding:v+"px"}),p.attr("height",S.height-y.height/2),p.attr("width",S.width)),Mo(f,{height:S.height+"px",width:S.width+"px"}),Mo(p,{fill:"url(#linear-gradient)"}),f.attr("height",S.height),f.attr("width",S.width),e.measurement({gradientDimensions:S}),e._legendGradientSvg=f}(this,t),t.selectAll("div").style("float","left"),e.mapActionsAndBehaviour(),e.createSelectionSet(this.data().map(function(e){return e.id})),t}},{key:"getCriteriaFromData",value:function getCriteriaFromData(e){return[[this.fieldName()],[e.value]]}}],[{key:"create",value:function create(e){return new GradientLegend(e)}},{key:"type",value:function type(){return"gradient"}}]),GradientLegend}(),xy=function(){function defineProperties(e,t){for(var n=0;na[a.length-1]&&(c.upper=[u.bounds.upper+" "+a[a.length-1]])):t=Zp(i,a),t=(t=[].concat(step_legend_toConsumableArray(new Set(t))).sort(function(e,t){return e-t})).map(function(n,i){var a,u=null;return i0&&void 0!==arguments[0]?arguments[0]:{},t=this._registrableComponents,n=na(na({},function defaultPolicy(e){var t=e.map(function(e){return e.alias()});return{behaviours:{"*":function _(e){var n=e.sourceCanvas;return!n||-1!==t.indexOf(n)}}}}(t)),e);return t.forEach(function(e){e.firebolt().crossInteractionPolicy(n)}),this}}]),ActionModel}()),Ny={classPrefix:"muze",interaction:{sideEffect:"individual"},legend:{position:"right",color:{show:!0,padding:1,margin:3,border:1,height:20,width:20},shape:{show:!0,padding:1,margin:3,border:1,height:20,width:20},size:{show:!0,padding:1,margin:3,border:1,height:20,width:20}},showHeaders:!1,minWidth:100,minHeight:100,border:{style:"solid",color:"#d6d6d6",width:2,collapse:!0,spacing:0},autoGroupBy:{disabled:!1}},jy={data:{value:null,meta:{typeCheck:function typeCheck(e){return e instanceof ar.a}}},width:{value:0,meta:{sanitization:Qi,typeCheck:Number.isInteger}},height:{value:0,meta:{sanitization:Qi,typeCheck:Number.isInteger}},minUnitWidth:{value:50,meta:{sanitization:Qi,typeCheck:Number.isInteger}},minUnitHeight:{value:50,meta:{sanitization:Qi,typeCheck:Number.isInteger}},config:{value:null,meta:{typeCheck:"constructor",typeExpected:"Object",sanitization:function sanitization(e,t){var n=na({},t),r=na(n,Ny);return na(r,e)}}}},Iy="width",Dy="height",Ly="top",Ry="left",By="right",zy="bottom",Hy="center",Vy="rowLeft",Uy="rowRight",Wy="colBottom",qy="colTop",Gy="rowSpan",Yy="colSpan",Xy="rowRoot",Ky="columnRoot",$y=function(){function defineProperties(e,t){for(var n=0;n1)return e;var f=o[t-1];if(f&&f.valueOf()===e.valueOf()){var h=n[r-1];return h?h[t].valueOf()===h[t-1].valueOf()?null:e:null}return e}return e},ag=function calcRowSpan(e,t,n,r){var i=1;if(!e||"string"!=typeof e.valueOf())return 1;for(var a=!1;!a;)n[r+i]&&null===n[r+i][t]?i+=1:a=!0;return i},og=function calcColSpan(e,t,n,r){var i=1;if(!e||"string"!=typeof e.valueOf())return 1;for(var a=!1;!a;)null===n[r][t+i]?i+=1:a=!0;return i},ug=function mask(e,t){return e.map(function(n,r){if(t===Vy||t===Uy){for(var i=n.map(function(n,i){return ig(n,i,e,r,t)}),a=[],o=n.length-i.length,u=0;u1&&r.setAvailableSpace(0,r.availHeight()),Ao(this).style("height",r.availHeight()+"px"),n}),l.each(function(e){e.placeholder&&e.placeholder.render(this)}).exit().each(function(e){e.placeholder&&e.placeholder.remove()}),applyBorders(l,r.border,n,a)})}function utils_defineProperty(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function utils_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t0?e[0]:e[1];return n?(r=e[0].length>0?[].concat(utils_toConsumableArray(e[0])):[],r=e[1].length>0?[].concat(utils_toConsumableArray(r),utils_toConsumableArray(e[1])):r):r=r.map(function(t,n){var r=[];return e[0].length>0&&(r=[].concat(utils_toConsumableArray(e[0][n]))),e[1].length>0&&(r=[].concat(utils_toConsumableArray(r),utils_toConsumableArray(e[1][n]))),r}),r},fg=function computeLogicalSpace(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments[1],n=arguments[2],r=t.isTransposed,i=void 0!==r&&r,a=t.unitMeasures,o=function getMeasureInfo(e){return e?{firstMeasure:Dy,secondMeasure:Iy}:{firstMeasure:Iy,secondMeasure:Dy}}(i),u=o.firstMeasure,c=o.secondMeasure,s=e.values,l=function getMinMeasures(e,t){return e?{height:0,width:t.width}:{height:t.height,width:0}}(i,a);if(s[0].key){var f,h=(utils_defineProperty(f={},u,0),utils_defineProperty(f,c,0),f);return s.forEach(function(e){var r=computeLogicalSpace(e,t,n);h[u]=Math.max(h[u],r[u],l[u]),h[c]+=+r[c]}),e.space=h,h}return function getLogicalSpace(e,t,n){var r,i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:[],a=t.firstMeasure,o=t.secondMeasure,u=0,c=0;return e.values.forEach(function(t){var r,s=0,l=0;t.forEach(function(e,t){e.logicalSpace(null);var r=e.getLogicalSpace();l=Math.max(l,+r[o],n[o]),i[t]=Math.max(i[t]||0,r[a]),s+=+i[t]}),c+=l,u=Math.max(u,s),e.space=(utils_defineProperty(r={},o,Math.ceil(c)),utils_defineProperty(r,a,Math.ceil(u)),r)}),utils_defineProperty(r={},o,c),utils_defineProperty(r,a,u),r}(e,{firstMeasure:u,secondMeasure:c},l,n)},hg=function extraCellsRemover(e,t,n){return e.slice(t,-n)},dg={config:{sanitization:function sanitization(e,t){return na(e._config||{},t)}},maxMeasures:{},availableSpace:{},logicalSpace:{}},pg={distribution:[],classPrefix:"muze",isDistributionEqual:!0,unitMeasures:{height:100,width:100,border:1},isTransposed:!1,facet:"primary",extraCellLengths:[]},yg=function(){function defineProperties(e,t){for(var n=0;n1&&void 0!==arguments[1]?arguments[1]:{};!function visual_matrix_classCallCheck(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,VisualMatrix),this._lastLevelKey=0,this._primaryMatrix=e[0]||[],this._secondaryMatrix=e[1]||[],this._maxMeasures=[],this._availableSpace={},Ji(this,dg);var n=Object.assign({},this.constructor.defaultConfig());this.config(na(n,t)),this._breakPointer=this.config().isTransposed?e[0].length:e[0].length>0?e[0][0].length:0,this._layoutMatrix=lg([e[0]||[],e[1]||[]],this.config()),this._tree={key:this.config().isTransposed?Ky:Xy,values:this.createTree()},this._logicalSpace=this.setLogicalSpace()}return yg(VisualMatrix,[{key:"primaryMatrix",value:function primaryMatrix(){return arguments.length?this:this._primaryMatrix}},{key:"secondaryMatrix",value:function secondaryMatrix(){return arguments.length?this:this._secondaryMatrix}},{key:"tree",value:function tree(){return arguments.length?this:this._tree}},{key:"createTree",value:function createTree(){var e=function createTree(e){var t={},n=0,r="primary",i=cg(),a=[],o=e._layoutMatrix,u=e.primaryMatrix(),c=e.secondaryMatrix(),s=e.config(),l=s.isTransposed,f=s.breakPage;if(l){if(r=0===u.length?"primary":0===c.length?"secondary":u.length>=c.length?"primary":"secondary",u.length>0){for(var h=0;h0){for(var d=u.length,p=c.length-1;p>0;p--)a.push(p+d);a.push(d),"primary"===r&&(n=d)}var y;a.forEach(function(e){var t=-1;return i.key(function(n){return t++,n[e].valueOf()+"-"+sg(t,f)})}),y=o[0].map(function(e,t){return o.map(function(e){return e[t]})}),t=i.entries(y)}else{if(r=0===u.length?"primary":0===c.length?"secondary":u.length>=c.length?"primary":"secondary",u.length>0){for(var g=0;g0){for(var v=u.length>0?u[0].length:0,m=c[0].length-1;m>0;m--)a.push(m+v);a.push(v),"primary"===r&&(n=v)}else n=u.length>0?u[0].length-1:0;a.forEach(function(e){var t=-1;return i.key(function(n){return t++,n[e].valueOf()+"-"+sg(t,f)})}),t=i.entries(o)}return{tree:t,lastLevelKey:n}}(this),t=e.tree,n=e.lastLevelKey;return this._lastLevelKey=n,t}},{key:"setLogicalSpace",value:function setLogicalSpace(){var e=this.config().isTransposed,t=this.tree();return function createMatrixEachLevel(e,t){if(e.values[0].key){var n=[];return e.values.forEach(function(e){t?createMatrixEachLevel(e,t).forEach(function(e,t){var r;n[t]=n[t]||[],(r=n[t]).push.apply(r,utils_toConsumableArray(e))}):n.push.apply(n,utils_toConsumableArray(createMatrixEachLevel(e,t)))}),e.matrix=n,n}return e.matrix=t?e.values[0].map(function(t,n){return e.values.map(function(e){return e[n]})}):e.values,e.matrix}(t,e),fg(t,this.config(),this.maxMeasures())}},{key:"getLogicalSpace",value:function getLogicalSpace(){return this.logicalSpace()}},{key:"setAvailableSpace",value:function setAvailableSpace(e,t){this.availableSpace({width:e,height:t});var n=this.tree(),r=this.populateMaxMeasures(Dy,n),i=this.populateMaxMeasures(Iy,n),a=this.calculateDepth(i,r);return this.viewableMatrix=this.createViewPortMatrix(a),this.viewableMeasures=this.redistribute(this.viewableMatrix,e,t),this}},{key:"populateMaxMeasures",value:function populateMaxMeasures(e,t){var n=this,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:[];if(i[r]=Math.max(i[r]||0,t.space[e]),t.values){var a=r+1;t.values.forEach(function(t){t.space&&(i=n.populateMaxMeasures(e,t,a,i))})}return i}},{key:"calculateDepth",value:function calculateDepth(e,t){var n=void 0,r=void 0,i=this.availableSpace(),a=i.height,o=i.width;for(n=0;n0&&void 0!==arguments[0]?arguments[0]:[],t=arguments[1],n=arguments[2],r=arguments[3],i=r._breakPointer,a=r.config().isTransposed,o=n.tree,u=n.layoutMatrix;if(0===t){var c=function breakMatrix(e,t,n){var r=[],i=[];return t?e.forEach(function(e,t){t>=n?i.push(e):r.push(e)}):e.forEach(function(e,t){e.forEach(function(e,a){a>=n?(i[t]=i[t]||[],i[t].push(e)):(r[t]=r[t]||[],r[t].push(e))})}),[r,i]}(o.matrix,a,i);return e.push({matrix:o.matrix,primaryMatrix:c[0],secondaryMatrix:c[1],space:o.space}),e}var s=t-1;return o.values.forEach(function(t){createMatrixInstances(e,s,{tree:t,layoutMatrix:u},r)}),e}(t,e,this.removeExtraCells(),this),t}},{key:"redistributeRowWise",value:function redistributeRowWise(e){var t,n,r=[],i=this.maxMeasures(),a=this.config(),o=a.isDistributionEqual,u=a.distribution,c=a.isTransposed,s=a.gutter,l=e.matrix,f=e.width,h=e.height,d=e.maxHeights,p=e.maxWidths;n=function spaceTakenByColumn(e,t){var n=0,r=0;return e.forEach(function(e){var i=e[t].getLogicalSpace();r=Math.max(r,i.width),n+=i.height}),{width:r,height:n}}(l,this._lastLevelKey).height;var y=i.reduce(function(e,t){return e+=t});return r=y>0?i.map(function(e){return e+e/y*(f-y)}):i.map(function(){return 0}),t=function getDistributedHeight(e){var t,n=0,r=0,i=e.isTransposed,a=e.distribution,o=e.availableHeight,u=e.height,c=e.isDistributionEqual,s=e.gutter,l=e.matrix,f=e.cIdx;a&&void 0!==a[0]&&(n=a.reduce(function(e,t){return e+=t})),s&&void 0!==s[0]&&(r=s.reduce(function(e,t){return e+=t})),t=o-Math.floor(o*r);var h=l.length;return l.map(function(r,o){var s=r[f].getLogicalSpace().height,l=s+s/u*(t-u);return i||(a.length>0&&h===a.length?l=t*a[o]/n:(c||0===e.height)&&(l=t/h)),Math.floor(l)})}({matrix:l,cIdx:this._lastLevelKey,height:n,availableHeight:h,isDistributionEqual:o,distribution:u,isTransposed:c,gutter:s}),p.push(r),d.push(t),{maxWidths:p,maxHeights:d}}},{key:"redistributeColumnWise",value:function redistributeColumnWise(e){var t=[],n=e.matrix,r=e.width,i=e.maxHeights,a=e.maxWidths,o=this.config().unitMeasures.border,u=function spaceTakenByRow(e){var t=0,n=0;return e.forEach(function(e){var r=e.getLogicalSpace();t=Math.max(t,r.height),n+=r.width}),{width:n,height:t}}(n[this._lastLevelKey]).width,c=function getDistributedWidth(e,t){var n=e.availableWidth,r=e.width,i=e.row,a=t.isDistributionEqual,o=t.isTransposed,u=t.distribution,c=0;return u&&u[0]&&(c=u.reduce(function(e,t){return e+=t})),i.map(function(e,t){var s=e.getLogicalSpace().width,l=s+s/r*(n-r);if(o)if(u.length>0)l=n*u[t]/c;else if(a||0===r){var f=i.length;l=n/f}return Math.floor(l)})}({row:n[this._lastLevelKey],width:u,availableWidth:r},this.config());n.forEach(function(e,n){return e.forEach(function(e,r){var i=e.getLogicalSpace().height;e.setAvailableSpace(c[r]-o,i),t[n]=Math.max(t[n]||0,e.getLogicalSpace().height)})}),i.length>0&&(t=t.map(function(e,t){return Math.max(e,i[0][t])})),i.push(t);for(var s=0;s=m&&(r[0][1][n[1]-m]=a[0],i[0][1]=(i[0][1]||0)+a[0]),n[1]===t._lastLevelKey&&(r[1][0][n[0]]=a[1],r[1][1][n[0]]=a[1])})}),{heights:g,widths:v,rowHeights:p,columnWidths:y}}}],[{key:"defaultConfig",value:function defaultConfig(){return pg}}]),VisualMatrix}(),vg=function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function sliceIterator(e,t){var n=[],r=!0,i=!1,a=void 0;try{for(var o,u=e[Symbol.iterator]();!(r=(o=u.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){i=!0,a=e}finally{try{!r&&u.return&&u.return()}finally{if(i)throw a}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}();function layout_helper_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t0&&(n=[].concat(layout_helper_toConsumableArray(w),layout_helper_toConsumableArray(P),layout_helper_toConsumableArray(O))),E.length>0&&(r=[].concat(layout_helper_toConsumableArray(k),layout_helper_toConsumableArray(E),layout_helper_toConsumableArray(F))),C.length>0&&C[0].length>0&&(i=C.map(function(e,t){return[].concat(layout_helper_toConsumableArray(w[t]),layout_helper_toConsumableArray(e),layout_helper_toConsumableArray(k[t]))})),T.length>0&&T[0].length>0&&(a=T.map(function(e,t){return[].concat(layout_helper_toConsumableArray(O[t]),layout_helper_toConsumableArray(e),layout_helper_toConsumableArray(F[t]))})),e.rowMatrix(new gg([n,r],{isDistributionEqual:s,distribution:h.rows,gutter:f.rows,unitMeasures:{width:v,height:g,border:d.width},breakPage:p.rows.map(function(e){return e+Math.max(w.length,k.length)}),extraCellLengths:[w.length,O.length]})),o=w.length>0?w[0].length:O.length>0?O[0].length:0,u=k.length>0?k[0].length:F.length>0?F[0].length:0,e.columnMatrix(new gg([i,a],{isDistributionEqual:l,distribution:h.columns,gutter:f.columns,isTransposed:!0,unitMeasures:{width:v,height:g,border:d.width},breakPage:p.columns,extraCellLengths:[o,u]})),e.centerMatrix(A),t}(this,e),this):function get(e,t,n){null===e&&(e=Function.prototype);var r=Object.getOwnPropertyDescriptor(e,t);if(void 0===r){var i=Object.getPrototypeOf(e);return null===i?void 0:get(i,t,n)}if("value"in r)return r.value;var a=r.get;return void 0!==a?a.call(n):void 0}(GridLayout.prototype.__proto__||Object.getPrototypeOf(GridLayout.prototype),"matrices",this).call(this,e)}},{key:"triggerReflow",value:function triggerReflow(){return function computeLayoutMeasurements(e){var t,n,r,i,a,o=e.rowMatrix(),u=e.columnMatrix(),c=e.centerMatrix(),s=e.measurement(),l=s.width,f=s.height,h=e.config().border,d=e.matrices(),p=d.top,y=d.bottom,g=function getMatrixMeasurement(e,t){return e?e.getLogicalSpace()[t]:0}(o,Iy),v=h.width,m=l-g-v;setMatrixMeasurement(u,Iy,m);var b=u.getViewableSpaces();bg(e,"column",b);var _=b[e.config().columnPointer],x=_.height.primary+_.height.secondary,w=f-x;setMatrixMeasurement(o,Dy,w);var C=o.getViewableSpaces();bg(e,"row",C);var k=(t=[]).concat.apply(t,computations_toConsumableArray(C.map(function(e){return e.rowHeights.primary}))),S=(n=[]).concat.apply(n,computations_toConsumableArray(C.map(function(e){return e.columnWidths.primary}))),P=(r=[]).concat.apply(r,computations_toConsumableArray(C.map(function(e){return e.columnWidths.secondary}))),A=u.getViewableSpaces(),E=(i=[]).concat.apply(i,computations_toConsumableArray(A.map(function(e){return e.columnWidths.primary}))),M=A[0].rowHeights.primary,O=(a=[]).concat.apply(a,computations_toConsumableArray(A.map(function(e){return e.rowHeights.secondary})));c.forEach(function(e,t){e.forEach(function(e,n){e.setAvailableSpace(E[n]-v,k[t]-v)})}),mg(p[0],S,M),mg(p[2],P,M),mg(y[0],S,O),mg(y[2],P,O)}(this),this.setViewInformation(),this}},{key:"gotoPage",value:function gotoPage(e,t){var n=e.toLowerCase(),r=this.getViewInformation().viewMatricesInfo[n+"Pages"],i=Math.min(Math.max(1,t),r);return this.config(function layout_defineProperty(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}({},n+"Pointer",i-1)),this.setViewInformation(),this.renderGrid(),this}},{key:"pages",value:function pages(e){var t=this.getViewInformation().viewMatricesInfo,n=e.toLowerCase();return{totalPages:t[n+"Pages"],currentPage:this.config()[n+"Pointer"]+1}}},{key:"setViewInformation",value:function setViewInformation(){var e=this.config(),t=e.rowPointer,n=e.columnPointer,r=e.border,i=function getViewMatrices(e,t,n){for(var r=e.rowMatrix(),i=e.columnMatrix(),a=e.centerMatrix(),o=e.matrices(),u=r.getViewableData(),c=i.getViewableData(),s={row:0,column:0},l=t-1;l>=0;l--){var f=Math.max(u[l].primaryMatrix.length,u[l].secondaryMatrix.length);s.row+=f}for(var h=n-1;h>=0;h--){var d=c[h],p=d.primaryMatrix,y=d.secondaryMatrix,g=Math.max(p[0]?p[0].length:0,y[0]?y[0].length:0);s.column+=g}o.top[1]=c[n].primaryMatrix,o.bottom[1]=c[n].secondaryMatrix,o.center[0]=u[t].primaryMatrix,o.center[2]=u[t].secondaryMatrix;var v=Math.max(o.center[0].length,o.center[2].length),m=Math.max(o.top[1][0]?o.top[1][0].length:0,o.bottom[1][0]?o.bottom[1][0].length:0);return o.center[1]=a.slice(s.row,s.row+v).map(function(e){return e.slice(s.column,s.column+m)}),{matrices:o,rowPages:u.length,columnPages:c.length}}(this,t,n),a=function getViewMeasurements(e){var t=e.rowMatrix(),n=e.columnMatrix(),r=e.measurement(),i=r.width,a=r.height,o=e.config(),u=o.columnPointer,c=o.rowPointer,s=t.getViewableSpaces()[c].width,l=s.primary,f=s.secondary,h=n.getViewableSpaces()[u].height,d=h.primary,p=h.secondary;return{viewWidth:[l,i-(l+f),f],viewHeight:[d,a-(d+p),p]}}(this);return a.border=r,this.viewInfo={viewMatricesInfo:i,layoutDimensions:a},this}},{key:"getViewInformation",value:function getViewInformation(){return this.viewInfo}},{key:"renderGrid",value:function renderGrid(e){if(this.mountPoint(e),!this.mountPoint())return this;var t=this.getViewInformation(),n=t.viewMatricesInfo,r=t.layoutDimensions;return function renderMatrices(e,t,n){var r=t.top,i=t.center,a=t.bottom,o=e.config().classPrefix,u=e.measurement().width,c=e.mountPoint();Eo(c,"div",[{type:Ly,matrix:r},{type:Hy,matrix:i},{type:zy,matrix:a}],o+"-grid-layout-row").each(function(e,t){var r=Ao(this);r.classed(o+"-grid-layout-row-"+t,!0),renderMatrix(e.matrix,r,e.type,n,o)}).style(Iy,Math.ceil(u)+"px")}(this,n.matrices,r),this}}],[{key:"defaultMeasurement",value:function defaultMeasurement(){return ng}},{key:"defaultConfig",value:function defaultConfig(){return tg}},{key:"create",value:function create(){return new GridLayout(null,null,this.defaultMeasurement(),this.defaultConfig())}}]),GridLayout}(),wg=function(){function defineProperties(e,t){for(var n=0;n0?o:i,v),P=Math.max(u>0?u:a,g),A=function createHeaders(e,t,n){var r=0,i={};return t>=200&&n>=200&&["title","subtitle"].forEach(function(t){var n=e[t](),a=function resolveTitleSubTitleContent(e){return"function"!=typeof e||e._sanitize?function escapeHTML(e){var t={"&":"&","<":"<",">":">",'"':""","'":"'","/":"/"};return(""+e).replace(/[&<>"'/]/g,function(e){return t[e]})}(e()):e()}(n[0]);if(a.length){var o=n[1];o.width=e.width(),o.content=a;var u=lv(o,t,e.dependencies().smartlabel,e[t+"Cell"]),c=u.height,s=u.cell;i[t+"Cell"]=s,e._composition[t]=s,r+=c+o.padding}}),{headerHeight:r,headers:i}}(e,S,P),E=A.headers,M=A.headerHeight,O=function createLegend(e,t,n,r){var i={height:n,width:r,headerHeight:t},a=e.config().legend,o=a.show,u=a.position;a.classPrefix=e.config().classPrefix;var c="left"===u||"right"===u?"vertical":"horizontal";return a.show=o?"vertical"===c&&r>200||"horizontal"===c&&n>200:o,a.align=c,fv(a,e,i,e.legends||[])}(e,M,S,P);e._composition.legend={},O.forEach(function(t){e._composition.legend[t.scaleType]=t.legend});var T=function getLegendSpace(e,t,n,r){var i={width:0,height:0};return e.map(function(e){return e.legend.measurement()}).forEach(function(e){var a,o;o=Math.min(e.width,e.maxWidth),a=Math.min(e.height,e.maxHeight),"horizontal"===t.align?i.width+o>r?(i.width=r,i.height+=a):(i.width+=o,i.height=Math.max(i.height,a)):i.height+a>n?(i.height=a,i.width+=o):(i.height+=a,i.width=Math.max(i.width,o))}),"horizontal"===t.align&&(i.width=r),i}(O,_,S,P),F="left"===C||"right"===C?T.width:0,N="top"===C||"bottom"===C?T.height:0,j={headers:E,legends:O,canvases:[e],rows:h,columns:d,values:p,cornerMatrices:c.cornerMatrices()},I={mountSpace:{height:i,width:a},headerHeight:M,legendSpace:T,canvasWidth:P,canvasHeight:S,width:P-F,height:S-M-N,minUnitHeight:e.minUnitHeight(),minUnitWidth:e.minUnitWidth()};return{layoutConfig:n=na(n,{classPrefix:m,showHeaders:b,border:na(c.metaData().border,e.config().border),layoutArrangement:k,legend:_,title:x,subtitle:w,isColumnSizeEqual:l,isRowSizeEqual:f}),components:j,measurement:I}},dv={position:"top",align:"left",padding:8},pv={position:"top",align:"left",padding:16};function canvas_local_options_defineProperty(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var yv=(canvas_local_options_defineProperty(ov={},"rows",{value:null,meta:{typeCheck:"constructor",typeExpected:"Array"}}),canvas_local_options_defineProperty(ov,"columns",{value:null,meta:{typeCheck:"constructor",typeExpected:"Array"}}),canvas_local_options_defineProperty(ov,"color",{value:null,meta:{typeCheck:"constructor",typeExpected:"Object",sanitization:function sanitization(e){return"string"==typeof e?{field:e}:e}}}),canvas_local_options_defineProperty(ov,"shape",{value:null,meta:{typeCheck:"constructor",typeExpected:"Object",sanitization:function sanitization(e){return"string"==typeof e?{field:e}:e}}}),canvas_local_options_defineProperty(ov,"size",{value:null,meta:{typeCheck:"constructor",typeExpected:"Object",sanitization:function sanitization(e){return"string"==typeof e?{field:e}:e}}}),canvas_local_options_defineProperty(ov,"detail",{value:[],meta:{typeCheck:"constructor",typeExpected:"Array"}}),canvas_local_options_defineProperty(ov,"layers",{value:null,meta:{typeCheck:"constructor",typeExpected:"Array"}}),canvas_local_options_defineProperty(ov,"transform",{value:null,meta:{typeCheck:"constructor",typeExpected:"Object"}}),canvas_local_options_defineProperty(ov,"mount",{value:null,meta:{sanitization:function sanitization(e){return"string"==typeof e?Ao(e).node():e}}}),ov),gv=(canvas_local_options_defineProperty(uv={},"title",{value:[null,null],meta:{typeCheck:["constructor","constructor"],typeExpected:["Function","Object"],spreadParams:!0,sanitization:[function(e){if("string"==typeof e){var n=function t(){return e};return n._sanitized=!0,n}return e},function(e){var t=na({},dv);return na(t,e)}]}}),canvas_local_options_defineProperty(uv,"subtitle",{value:[null,null],meta:{typeCheck:["constructor","constructor"],typeExpected:["Function","Object"],spreadParams:!0,sanitization:[function(e){if("string"==typeof e){var t=function sub(){return e};return t._sanitized=!0,t}return e},function(e){var t=na({},pv);return na(t,e)}]}}),uv),vv=function renderHeader(e,t,n,r){var i=r[n+"Cell"],a=e[""+n],o=a.position,u=a.align,c=a.padding,s=t.selectAll("."+e.classPrefix+"-inner-container").data([n]);s.exit().remove();var l=s.enter().append("div").merge(s);l.classed(e.classPrefix+"-inner-container",!0),i&&i.render(l.node()),l.selectAll("div").classed(e.classPrefix+"-inner-content",!0),l.style("width","100%"),a&&i&&l.style("float","left").style("text-align",u).style("padding-"+("top"===o?"bottom":"top"),c+"px")},mv=function renderComponents(e,t,n,r){var i=e.mount(),a=t.headers,o=t.legends,u=n.classPrefix,c=function getSkeletons(e,t,n){var r=t.layoutArrangement,i=t.classPrefix,a=r.headers,o=r.legends,u=n.canvasWidth,c=n.canvasHeight,s=Ao(e),l={},f=Eo(s,"div",[1],i+"-viz").style("width",u+"px").style("height",c+"px").selectAll("."+i+"-container").data(a);f.exit().remove();var h=f.enter().append("div").merge(f).attr("class",i+"-container").style("width",u+"px").style("padding","nullpx").style("margin",null).each(function(e){l[e]=Ao(this).classed(i+"-"+e+"-container",!0)}).selectAll("."+i+"-inner-container").data(function(e){return"group"===e?o:[]});return h.exit().remove(),h.enter().append("div").merge(h).attr("class",i+"-inner-container").style("width","auto").style("height","auto").each(function(e){l[e]=Ao(this).classed(i+"-"+e+"-container",!0)}),l}(i,n,r),s=c.title,l=c.legend,f=c.subtitle,h=c.layout,d=function prepareGridContainer(e,t,n,r){if(e){var i=t.height,a=t.width,o=Ao(e).selectAll("."+n+"-inner-content").data(["layout"],function(e){return e});o.exit().remove();var u=o.enter().append("div").merge(o).attr("class",n+"-inner-content").classed(n+"-grid-layout",!0).attr("id",n+"-grid-layout-"+r).style("height",i+"px").style("padding",null).style("width",Math.ceil(a)+"px"),c=u.selectAll("."+n+"-layout-grid-container").data(["layout2"]);c.exit().remove();var s=c.enter().append("div").merge(c);return s.classed(n+"-layout-grid-container",!0).attr("id",n+"-layout-grid-container-"+r).style("height",i+"px").style("width",Math.ceil(a)+"px"),{mount:s,container:u}}}(h.node(),r,u,e.alias()).mount,p=e.layout().getViewInformation().layoutDimensions.viewWidth[0];r.padding=p,function setLabelRotationForAxes(e){var t=0,n=e.xAxes()||[];!function(){for(var e=0;ev?(g++,m=0,v=y):g<0&&g++,i[g]=i[g]||[],v-=Math.min(t.measurement().height,v),m=Math.max(Math.min(t.measurement().width,t.measurement().maxWidth),m),i[g].push({legend:t,legendHeight:y,legendWidth:m})});var b=Eo(h,["div"],i,l+"-legend-section").each(function(e,t){return Ao(void 0).classed(l+"-legend-section-"+t,!0)}).classed(l+"-legend-vertical-section",!0).style("width",function(e){return e[0].legendWidth+"px"});Eo(b,["div"],function(e){return e},l+"-legend-components",{},function(e){return e.legend.id()}).each(function(e){e.legend.mount(this)}).style("width",function(e){return e.legendWidth+"px"})}else{var _=Eo(h,"div",[1],l+"-legend-section").classed(l+"-legend-horizontal-section",!0).classed(l+"-legend-section-0",!0).style("width",p+"px");Eo(_,"div",n,l+"-legend-components",{},function(e){return e.legend.id()}).each(function(e){e.legend.mount(this)}).style("width",function(e){return e.legend.measurement().width+"px"})}}(n,l,o,r),function shiftHeaders(e,t,n,r){var i=e.classPrefix,a=e.title,o=e.subtitle,u=e.legend,c=n.legendSpace;t+="left"===u.position?c.width:0,a&&Ao(r).select("."+i+"-title-container").style("width","left"===a.align?"calc(100% - "+t+"px":"100%").style("margin-left","left"===a.align?t+"px":0),o&&Ao(r).select("."+i+"-subtitle-container").style("width","left"===o.align?"calc(100% - "+t+"px":"100%").style("margin-left","left"===o.align?t+"px":0),Ao(r).select("."+i+"-legend-horizontal-section").style("margin-left",t+"px").style("width",c.width-t+"px").selectAll("."+i+"-legend-body, ."+i+"-legend-title").style("max-width",c.width-t+"px"),Ao(r).select("."+i+"-legend-vertical-section").style("margin-left",null).selectAll("."+i+"-legend-body, ."+i+"-legend-title").style("max-width",null)}(n,p,r,i)}),e.composition().visualGroup.matrixInstance().value.each(function(e){e.valueOf().parentContainer(h.node())})};function canvas_helper_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t","\"","'","/","title_maker_resolveTitleSubTitleContent","_createHeading","title_maker_createHeaders","createLegend","legend_maker_createLegend","legendSpace","getLegendSpace","legendInfo","legend_maker_getLegendSpace","legendWidth","legendHeight","canvases","mountSpace","TITLE_CONFIG","SUB_TITLE_CONFIG","localOptions","canvas_local_options_defineProperty","_localOptions","canvasOptions","_sanitized","_canvasOptions","sub","renderer_renderHeader","renderHeader","headerCell","cont","renderComponents","_getSkeletons","getSkeletons","innerContainer","layoutType","renderer_getSkeletons","prepareGridContainer","innerSel","renderer_prepareGridContainer","setLabelRotationForAxes","renderLegend","legendComponents","sectionComponents","legendMount","legWidth","legHeight","sections","currHeight","currWidth","leg","renderer_renderLegend","shiftHeaders","shifter","renderer_shiftHeaders","helper_setupChangeListener","setupChangeListener","allOptions","_allOptions","canvas_helper_toConsumableArray","equalityChecker","option","dispatchProps","_cachedProps","applyInteractionPolicy","policies","firebolt_defaultInteractionPolicy","defaultInteractionPolicy","isMeasure","canvas_firebolt_toConsumableArray","getFieldsFromChannel","colDim","fieldInf","unitFireBolt","unitColFacets","equals","unitRowFacets","propagateWith","defaultCrossInteractionPolicy","propagationCanvasAlias","propagationUnit","canvas_firebolt","GroupFireBolt","canvas_firebolt_classCallCheck","_interactionPolicy","_crossInteractionPolicy","changeBehaviourStateOnPropagation","changeSideEffectStateOnPropagation","canvas_canvas","Canvas","globalDependencies","canvas_classCallCheck","canvas_possibleConstructorReturn","_transactor","canvas_slicedToArray","initedComponents","initCanvas","register","_getRenderDetails","prepareLayout","triggerReflow","promises","all","getAxes","initialSettings","regEntry","COMPONENTS","SUBREGISTRIES","regObj","globalCache","defaultRegistry","overrideRegistryDefinitions","overrideRegistry","muze_muze","muze","_transactor2","muze_slicedToArray","env","globalStore","componentSubRegistryDef","settings","withSettings","enableChainedTransaction","transactionModel","transactionEndpoint","transactionItems","_slicedToArray","SmartlabelManager_default","SideEffects","standards","SurrogateSideEffect","SpawnableSideEffect","Behaviours","PersistentBehaviour","VolatileBehaviour","DataModel","muze_package","layerFactory","operators_namespaceObject","utils","require","lookupWhat","lookupDetails","lookupTarget","deps","__webpack_exports__"],"mappings":"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","file":"muze.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"muze\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"muze\"] = factory();\n\telse\n\t\troot[\"muze\"] = factory();\n})(window, function() {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 7);\n","!function(e,t){\"object\"==typeof exports&&\"object\"==typeof module?module.exports=t():\"function\"==typeof define&&define.amd?define(\"DataModel\",[],t):\"object\"==typeof exports?exports.DataModel=t():e.DataModel=t()}(window,function(){return function(e){var t={};function n(r){if(t[r])return t[r].exports;var i=t[r]={i:r,l:!1,exports:{}};return e[r].call(i.exports,i,i.exports,n),i.l=!0,i.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(e,\"__esModule\",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&\"object\"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,\"default\",{enumerable:!0,value:e}),2&t&&\"string\"!=typeof e)for(var i in e)n.d(r,i,function(t){return e[t]}.bind(null,i));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,\"a\",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p=\"\",n(n.s=1)}([function(e){e.exports={name:\"datamodel\",description:\"Relational algebra compliant in-memory tabular data store\",homepage:\"https://github.com/chartshq/datamodel\",version:\"2.0.2\",license:\"MIT\",main:\"dist/datamodel.js\",author:\"Charts.com \",keywords:[\"datamodel\",\"data\",\"relational\",\"algebra\",\"model\",\"muze\",\"fusioncharts\",\"table\",\"tabular\",\"operation\"],repository:{type:\"git\",url:\"https://github.com/chartshq/datamodel.git\"},contributors:[{name:\"Akash Goswami\",email:\"akash@charts.com\"},{name:\"Subhash Haldar\",email:\"subhash@charts.com\"},{name:\"Rousan Ali\",email:\"rousan@charts.com\",url:\"https://rousan.io\"},{name:\"Ujjal Kumar Dutta\",email:\"ujjal@charts.com\"}],dependencies:{\"d3-dsv\":\"^1.0.8\"},devDependencies:{\"babel-cli\":\"6.26.0\",\"babel-core\":\"^6.26.3\",\"babel-eslint\":\"6.1.2\",\"babel-loader\":\"^7.1.4\",\"babel-plugin-transform-runtime\":\"^6.23.0\",\"babel-preset-env\":\"^1.7.0\",\"babel-preset-es2015\":\"^6.24.1\",\"babel-preset-flow\":\"^6.23.0\",chai:\"3.5.0\",\"cross-env\":\"^5.0.5\",eslint:\"3.19.0\",\"eslint-config-airbnb\":\"15.1.0\",\"eslint-plugin-import\":\"2.7.0\",\"eslint-plugin-jsx-a11y\":\"5.1.1\",\"eslint-plugin-react\":\"7.3.0\",\"istanbul-instrumenter-loader\":\"^3.0.0\",jsdoc:\"3.5.5\",json2yaml:\"^1.1.0\",karma:\"1.7.1\",\"karma-chai\":\"0.1.0\",\"karma-chrome-launcher\":\"2.1.1\",\"karma-coverage-istanbul-reporter\":\"^1.3.0\",\"karma-mocha\":\"1.3.0\",\"karma-spec-reporter\":\"0.0.31\",\"karma-webpack\":\"2.0.3\",marked:\"^0.5.0\",mocha:\"3.4.2\",\"mocha-webpack\":\"0.7.0\",\"transform-runtime\":\"0.0.0\",webpack:\"^4.12.0\",\"webpack-cli\":\"^3.0.7\",\"webpack-dev-server\":\"^3.1.4\"},scripts:{test:\"npm run lint && npm run ut\",ut:\"karma start karma.conf.js\",utd:\"karma start --single-run false --browsers Chrome karma.conf.js \",build:\"webpack --mode production\",\"build:dev\":\"webpack --mode development\",start:\"webpack-dev-server --config webpack.config.dev.js --mode development --open\",lint:\"eslint ./src\",\"lint-errors\":\"eslint --quiet ./src\",docs:\"rm -rf yaml && mkdir yaml && jsdoc -c jsdoc.conf.json\"}}},function(e,t,n){var r=n(2);e.exports=r.default?r.default:r},function(e,t,n){\"use strict\";n.r(t);var r={};n.r(r),n.d(r,\"DataFormat\",function(){return o}),n.d(r,\"DimensionSubtype\",function(){return u}),n.d(r,\"MeasureSubtype\",function(){return c}),n.d(r,\"FieldType\",function(){return f}),n.d(r,\"FilteringMode\",function(){return s});var i={};n.r(i),n.d(i,\"DSVArr\",function(){return Me}),n.d(i,\"DSVStr\",function(){return Ve}),n.d(i,\"FlatJSON\",function(){return Ye}),n.d(i,\"Auto\",function(){return Be});var a={};n.r(a),n.d(a,\"sum\",function(){return ct}),n.d(a,\"avg\",function(){return ft}),n.d(a,\"min\",function(){return st}),n.d(a,\"max\",function(){return lt}),n.d(a,\"first\",function(){return dt}),n.d(a,\"last\",function(){return pt}),n.d(a,\"count\",function(){return ht}),n.d(a,\"sd\",function(){return vt});var o={FLAT_JSON:\"FlatJSON\",DSV_STR:\"DSVStr\",DSV_ARR:\"DSVArr\",AUTO:\"Auto\"},u={CATEGORICAL:\"categorical\",TEMPORAL:\"temporal\",GEO:\"geo\"},c={DISCRETE:\"discrete\"},f={MEASURE:\"measure\",DIMENSION:\"dimension\"},s={NORMAL:\"normal\",INVERSE:\"inverse\",ALL:\"all\"};function l(e,t){e.length>0&&e.split(\",\").forEach(function(e){var n=e.split(\"-\"),r=+n[0],i=+(n[1]||n[0]);if(i>=r)for(var a=r;a<=i;a+=1)t(a)})}var d=function(){function e(e,t){for(var n=0;n=0;)o=e[a+1],-1!==r.indexOf(o)&&i.push({index:a,token:o});return i},m.formatAs=function(e,t){var n,r=h(e),i=m.findTokens(t),a=m.getTokenDefinitions(),o=String(t),u=m.TOKEN_PREFIX,c=void 0,f=void 0,s=void 0;for(s=0,n=i.length;s=0;d--)(f=a[d].index)+1!==l.length-1?(void 0===u&&(u=l.length),s=l.substring(f+2,u),l=l.substring(0,f+2)+RegExp.escape(s)+l.substring(u,l.length),u=f):u=f;for(d=0;d1){n=Math.abs(r[1]-r[0]);for(var i=2,a=r.length;i=y&&t.data=r.stops[r.stops.length-1]}).forEach(function(e){c[e.index]=r.stops[r.stops.length-1]+\"-\"+h}),r.stops.unshift(r.start),b=new Set(r.stops),dr.stops[r.stops.length-1]&&b.add(h),b=[].concat(function(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t3&&void 0!==arguments[3]&&arguments[3],i=arguments.length>4&&void 0!==arguments[4]?arguments[4]:G.CROSS,a=[],o=[],u=n||K,c=e.getFieldspace(),f=t.getFieldspace(),s=c.name,d=f.name,p=c.name+\".\"+f.name,h=L(c,f);if(s===d)throw new Error(\"DataModels must have different alias names\");return c.fields.forEach(function(e){var t=E({},e.schema);-1===h.indexOf(t.name)||r||(t.name=c.name+\".\"+t.name),a.push(t)}),f.fields.forEach(function(e){var t=E({},e.schema);-1!==h.indexOf(t.name)?r||(t.name=f.name+\".\"+t.name,a.push(t)):a.push(t)}),l(e._rowDiffset,function(e){var n=!1,p=void 0;l(t._rowDiffset,function(t){var l=[],v={};v[s]={},v[d]={},c.fields.forEach(function(t){l.push(t.data[e]),v[s][t.name]=t.data[e]}),f.fields.forEach(function(e){-1!==h.indexOf(e.schema.name)&&r||l.push(e.data[t]),v[d][e.name]=e.data[t]});var m=Ke(v[s]),y=Ke(v[d]);if(u(m,y)){var g={};l.forEach(function(e,t){g[a[t].name]=e}),n&&G.CROSS!==i?o[p]=g:(o.push(g),n=!0,p=e)}else if((i===G.LEFTOUTER||i===G.RIGHTOUTER)&&!n){var b={},_=c.fields.length-1;l.forEach(function(e,t){b[a[t].name]=t<=_?e:null}),n=!0,p=e,o.push(b)}})}),new ut(o,a,{name:p})}function z(e,t){var n=\"\"+e,r=\"\"+t;return nr?1:0}function X(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:z;return e.length>1&&function e(t,n,r,i){if(r===n)return t;var a=n+Math.floor((r-n)/2);return e(t,n,a,i),e(t,a+1,r,i),function(e,t,n,r,i){for(var a=e,o=[],u=t;u<=r;u+=1)o[u]=a[u];for(var c=t,f=n+1,s=t;s<=r;s+=1)c>n?(a[s]=o[f],f+=1):f>r?(a[s]=o[c],c+=1):i(o[c],o[f])<=0?(a[s]=o[c],c+=1):(a[s]=o[f],f+=1)}(t,n,a,r,i),t}(e,0,e.length-1,t),e}function Q(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);ta?\"desc\"===t?-1:1:0}}return r}function Z(e,t){var n=new Map,r=[];return e.forEach(function(e){var i=e[t];n.has(i)?r[n.get(i)][1].push(e):(r.push([i,[e]]),n.set(i,r.length-1))}),r}function ee(e,t,n){var r={label:e[0]};return t.reduce(function(t,r,i){return t[r]=e[1].map(function(e){return e[n[i].index]}),t},r),r}function te(e,t,n,r,i){var a={schema:[],data:[],uids:[]},o=(i=Object.assign({},{addUid:!1,columnWise:!1},i)).addUid,u=r&&r.length>0,c=[];if(n.split(\",\").forEach(function(t){for(var n=0;n=0;u--)i=t[u][0],a=t[u][1],(o=Ze(r,i))&&(S(a)?X(n,function(e,t){return a(e[o.index],t[o.index])}):j(a)?function(){var e=Z(n,o.index),t=a[a.length-1],i=a.slice(0,a.length-1),u=i.map(function(e){return Ze(r,e)});e.forEach(function(e){e.push(ee(e,i,u))}),X(e,function(e,n){var r=e[2],i=n[2];return t(r,i)}),n.length=0,e.forEach(function(e){n.push.apply(n,Q(e[1]))})}():(a=\"desc\"===String(a).toLowerCase()?\"desc\":\"asc\",X(n,$(o.type,a,o.index))));e.uids=[],n.forEach(function(t){e.uids.push(t.pop())})}(a,r),i.columnWise){var f=Array.apply(void 0,Q(Array(a.schema.length))).map(function(){return[]});a.data.forEach(function(e){e.forEach(function(e,t){f[t].push(e)})}),a.data=f}return a}function ne(e,t){var n={},r=[],i=[],a=[],o=e.getFieldspace(),u=t.getFieldspace(),c=o.fieldsObj(),f=u.fieldsObj(),s=o.name+\" union \"+u.name;if(!M(e._colIdentifier.split(\",\").sort(),t._colIdentifier.split(\",\").sort()))return null;function d(e,t,r){l(e._rowDiffset,function(e){var o={},u=\"\";i.forEach(function(n){var r=t[n].data[e];u+=\"-\"+r,o[n]=r}),n[u]||(r&&a.push(o),n[u]=!0)})}return e._colIdentifier.split(\",\").forEach(function(e){var t=c[e];r.push(E({},t.schema)),i.push(t.schema.name)}),d(t,f,!1),d(e,c,!0),new ut(a,r,{name:s})}function re(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t1&&void 0!==arguments[1]?arguments[1]:{},n={},r=t,i=e.getPartialFieldspace().getMeasure(),a=se.defaultReducer();return\"function\"==typeof t&&(a=t),Object.entries(i).forEach(function(e){var o=le(e,1)[0];\"string\"==typeof t[o]&&(r[o]=se.resolve(r[o])?se.resolve(r[o]):a),\"function\"!=typeof t[o]&&(r[o]=void 0),n[o]=r[o]||se.resolve(i[o].defAggFn())||a}),n}(e,n),o=e.getPartialFieldspace(),u=o.fieldsObj(),c=o.name,f=[],s=[],d=[],p={},h=[],v=void 0;Object.entries(u).forEach(function(e){var t=le(e,2),n=t[0],r=t[1];(-1!==i.indexOf(n)||a[n])&&(d.push(E({},r.schema)),\"measure\"===r.schema.type&&\"discrete\"!==r.schema.subtype?s.push(n):\"dimension\"!==r.schema.type&&\"discrete\"!==r.schema.subtype||f.push(n))});var m=0;return l(e._rowDiffset,function(e){var t=\"\";f.forEach(function(n){t=t+\"-\"+u[n].data[e]}),void 0===p[t]?(p[t]=m,h.push({}),f.forEach(function(t){h[m][t]=u[t].data[e]}),s.forEach(function(t){h[m][t]=[u[t].data[e]]}),m+=1):s.forEach(function(n){h[p[t]][n].push(u[n].data[e])})}),h.forEach(function(e){var t=e;s.forEach(function(n){t[n]=a[n](e[n])})}),r?(r.__calculateFieldspace(),v=r):v=new yt(h,d,{name:c}),v}function pe(e,t){var n=L(e.getFieldspace(),t.getFieldspace());return function(e,t){var r=!0;return n.forEach(function(n){r=!(e[n].value!==t[n].value||!r)}),r}}function he(e,t){var n={},r=[],i=[],a=[],o=e.getFieldspace(),u=t.getFieldspace(),c=o.fieldsObj(),f=u.fieldsObj(),s=o.name+\" union \"+u.name;if(!M(e._colIdentifier.split(\",\").sort(),t._colIdentifier.split(\",\").sort()))return null;function d(e,t){l(e._rowDiffset,function(e){var r={},o=\"\";i.forEach(function(n){var i=t[n].data[e];o+=\"-\"+i,r[n]=i}),n[o]||(a.push(r),n[o]=!0)})}return e._colIdentifier.split(\",\").forEach(function(e){var t=c[e];r.push(E({},t.schema)),i.push(t.schema.name)}),d(e,c),d(t,f),new yt(a,r,{name:s})}function ve(e,t,n){return W(e,t,n,!1,G.LEFTOUTER)}function me(e,t,n){return W(t,e,n,!1,G.RIGHTOUTER)}var ye=function(){function e(e,t){for(var n=0;nn&&(n=e)}),[t,n]}(this.data)}},{key:\"parse\",value:function(e){return e=parseFloat(e,10),Number.isNaN(e)?null:e}},{key:\"unit\",value:function(){return this.fieldUnit}},{key:\"scale\",value:function(){return this.fieldScale}},{key:\"numberFormat\",value:function(){var e=this.fieldNumberformat;return function(t){return e(t)}}},{key:\"defAggFn\",value:function(){return this.fieldDefAggFn}}]),t}(),Oe=function(){function e(e,t){for(var n=0;n=a?c=!0:(r=e.charCodeAt(o++))===Pe?f=!0:r===Ce&&(f=!0,e.charCodeAt(o)===Pe&&++o),e.slice(i+1,t-1).replace(/\"\"/g,'\"')}for(;o2&&void 0!==arguments[2]?arguments[2]:{},i=arguments[3],a=void 0;t!==Y?(a={op:t,meta:r,criteria:i},e._derivation.push(a)):(a=[].concat(Ge(i)),e._derivation.length=0,(n=e._derivation).push.apply(n,Ge(a)))},ze=function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=n.operation||q,i=n.filterByMeasure||!1,a=[];a=t.length?t.map(function(e){return function(e){var t=e.getData(),n=t.schema,r=e.getFieldsConfig(),a=e.getFieldspace().fieldsObj(),o=t.data,u=Object.values(r).reduce(function(e,t){return e[t.def.name]=a[t.def.name].domain(),e},{});return function(e){return!!o.length&&o.some(function(t){return n.every(function(n){if(!(n.name in e))return!0;var a=e[n.name].valueOf();if(i&&n.type===f.MEASURE)return a>=u[n.name][0]&&a<=u[n.name][1];if(n.type!==f.DIMENSION)return!0;var o=r[n.name].index;return t[o]===e[n.name].valueOf()})})}}(e)}):[function(){return!1}];var o=void 0;r===q?o=e.clone(!1,!1).select(function(e){return a.every(function(t){return t(e)})},{saveChild:!1,mode:s.ALL}):o=e.clone(!1,!1).select(function(e){return a.some(function(t){return t(e)})},{mode:s.ALL,saveChild:!1});return o},Xe=function(e,t,n,r){var i=e.clone(r.saveChild),a=function(e,t,n,r){var i=[],a=-1,o=void 0,u=function(e){return n(qe(t,e),e)};return r.mode===s.INVERSE&&(u=function(e){return!n(qe(t,e))}),l(e,function(e){u(e)&&(-1!==a&&e===a+1?(o=i.length-1,i[o]=i[o].split(\"-\")[0]+\"-\"+e):i.push(\"\"+e),a=e)}),i.join(\",\")}(i._rowDiffset,i.getPartialFieldspace().fields,t,n);return i._rowDiffset=a,i.__calculateFieldspace().calculateFieldsConfig(),r.saveChild&&We(i,U,{config:n},t),i},Qe=function(e,t,n,r){var i=e.clone(n.saveChild),a=t;return n.mode===s.INVERSE&&(a=r.filter(function(e){return-1===t.indexOf(e)})),i._colIdentifier=a.join(\",\"),i.__calculateFieldspace().calculateFieldsConfig(),n.saveChild&&We(i,H,{projField:t,config:n,actualProjField:a},null),i},$e=function(e,t,n,r){r=Object.assign(Object.assign({},xe),r);var a=i[r.dataFormat];if(!a||\"function\"!=typeof a)throw new Error(\"No converter function found for \"+r.dataFormat+\" format\");var o=a(t,r),u=Je(o,2),c=u[0],f=u[1],s=Fe(f,n,c),l=R.createNamespace(s,r.name);return e._partialFieldspace=l,e._rowDiffset=f.length&&f[0].length?\"0-\"+(f[0].length-1):\"\",e._colIdentifier=n.map(function(e){return e.name}).join(),e},Ze=function(e,t){for(var n=0;n2&&void 0!==arguments[2]?arguments[2]:{},i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},a=i.nonTraversingModel,o=i.excludeModels||[];t!==a&&((!o.length||-1===o.indexOf(t))&&t.handlePropagation(n,r),t._children.forEach(function(t){var a=et(n,t),o=Je(a,2),u=o[0],c=o[1];e(t,[u,c],r,i)}))},nt=function(e,t,n,r){var i=void 0,a=void 0,o=n.propagationNameSpace,u=n.propagateToSource,c=n.sourceId,f=r.propagateInterpolatedValues,s=[];if(null===e&&!0!==r.persistent)s=[{criteria:[]}];else{var l,d=Object.values(o.mutableActions);!1!==u&&(d=d.filter(function(e){return e.config.sourceId!==c}));var p=d.filter(function(e){return(r.filterFn||function(){return!0})(e,r)}).map(function(e){return e.config.criteria}),h=[];if(!1!==u){var v=Object.values(o.mutableActions);v.forEach(function(e){var t=e.config;!1===t.applyOnSource&&t.action===r.action&&t.sourceId!==c&&(h.push(e.model),(i=v.filter(function(t){return t!==e}).map(function(e){return e.config.criteria})).length&&s.push({criteria:i,models:e.model,path:function e(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];return null!==t._parent&&(n.push(t),e(t._parent,n)),n}(e.model)}))})}i=(l=[]).concat.apply(l,[].concat(Ge(p),[e])).filter(function(e){return null!==e}),s.push({criteria:i,excludeModels:[].concat(h,Ge(r.excludeModels||[]))})}var m=t.model,y=Object.assign({sourceIdentifiers:e,propagationSourceId:c},r),g=t.groupByModel;f&&g&&(a=ze(g,i,{filterByMeasure:f}),tt(g,a,y)),s.forEach(function(e){var t=ze(m,e.criteria),n=e.path;if(n){var r=function(e,t){for(var n=0,r=t.length;n0&&void 0!==arguments[0])||arguments[0],t=void 0;if(!1===(!(arguments.length>1&&void 0!==arguments[1])||arguments[1])){var n=this.getData({getAllFields:!0}),r=n.data,i=n.schema,a=r.map(function(e){var t={};return i.forEach(function(n,r){t[n.name]=e[r]}),t});t=new this.constructor(a,i)}else t=new this.constructor(this);return e&&this._children.push(t),t}},{key:\"project\",value:function(e,t){var n={mode:s.NORMAL,saveChild:!0};t=Object.assign({},n,t);var r=this.getFieldsConfig(),i=Object.keys(r),a=t.mode,o=e.reduce(function(e,t){return\"RegExp\"===t.constructor.name?e.push.apply(e,function(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t1&&void 0!==arguments[1]?arguments[1]:[];We(this,Y,null,t),this._parent=e,e._children.push(this)}}]),e}(),at=function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function(e,t){var n=[],r=!0,i=!1,a=void 0;try{for(var o,u=e[Symbol.iterator]();!(r=(o=u.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){i=!0,a=e}finally{try{!r&&u.return&&u.return()}finally{if(i)throw a}}return n}(e,t);throw new TypeError(\"Invalid attempt to destructure non-iterable instance\")}}(),ot=function(){function e(e,t){for(var n=0;n1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{saveChild:!0},r=\"\"+e.join(),i=[this,e,t],a=de.apply(void 0,i);return n.saveChild&&(this._children.push(a),We(a,V,{fieldsArr:e,groupByString:r,defaultReducer:se.defaultReducer()},t)),a._parent=this,a}},{key:\"sort\",value:function(e){var t=this.getData({order:\"row\",sort:e}),n=[t.schema.map(function(e){return e.name})].concat(t.data),r=new this.constructor(n,t.schema,{dataFormat:\"DSVArr\"});return r._sortingDetails=e,r}},{key:\"addField\",value:function(e){var t=e.fieldName();this._colIdentifier+=\",\"+t;var n=this._partialFieldspace;if(n.fieldsObj()[e.fieldName()]){var r=n.fields.findIndex(function(e){return e.name===t});r>=0&&(n.fields[r]=e)}else n.fields.push(e);return this.__calculateFieldspace().calculateFieldsConfig(),this}},{key:\"calculateVariable\",value:function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{saveChild:!0,replaceVar:!1},r=this.getFieldsConfig(),i=t.slice(0,t.length-1),a=t[t.length-1];if(r[e.name]&&!n.replaceVar)throw new Error(e.name+\" field already exists in model.\");var o=i.map(function(e){var t=r[e];if(!t)throw new Error(e+\" is not a valid column name.\");return t.index}),u=this.clone(),c=u.getFieldspace().fields,f=o.map(function(e){return c[e]}),s=[];l(u._rowDiffset,function(e){var t=f.map(function(t){return t.data[e]});s[e]=a.apply(void 0,function(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t1&&void 0!==arguments[1]?arguments[1]:{},n=arguments[2],r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},i=t.isMutableAction,a=t.sourceId,o=t.payload,u=function e(t){return t._parent?e(t._parent):t}(this),c=u._propagationNameSpace,f={groupByModel:function e(t){return t._parent&&t._derivation.find(function(e){return\"group\"!==e.op})?e(t._parent):t}(this),model:u};return n&&function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments[2],r=void 0,i=t.isMutableAction,a=t.criteria,o=t.action+\"-\"+t.sourceId;r=i?e.mutableActions:e.immutableActions,null===a?delete r[o]:r[o]={model:n,config:t}}(c,t,this),nt(e,f,{propagationNameSpace:c,sourceId:a},Object.assign({payload:o},t)),i&&function(e,t,n){var r=e.immutableActions;for(var i in r){var a=r[i].config,o=n.config.sourceId,u=!n.propConfig.filterImmutableAction||n.propConfig.filterImmutableAction(a,n.config);if(a.sourceId!==o&&u){var c=a.criteria;nt(c,t,{propagationNameSpace:e,propagateToSource:!1,sourceId:o},a)}}}(c,f,{config:t,propConfig:r}),this}},{key:\"on\",value:function(e,t){switch(e){case\"propagation\":this._onPropagation.push(t)}return this}},{key:\"unsubscribe\",value:function(e){switch(e){case\"propagation\":this._onPropagation=[]}return this}},{key:\"handlePropagation\",value:function(e,t){var n=this;this._onPropagation.forEach(function(r){return r.call(n,e,t)})}},{key:\"bin\",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=this.clone(),r=t.name||e+\"_binned\";if(this.getFieldsConfig()[r]||!this.getFieldsConfig()[e])throw new Error(\"Field \"+e+\" already exists.\");var i=I(this._partialFieldspace.fields.find(function(t){return t.name===e}),this._rowDiffset,t),a=Fe([i.data],[{name:r,type:f.MEASURE,subtype:\"discrete\",bins:{range:i.range,mid:i.mid}}],[r])[0];return n.addField(a),We(n,J,{measureName:e,config:t,binFieldName:r},null),n}}],[{key:\"Reducers\",get:function(){return se}}]),t}(),ct=oe.sum,ft=oe.avg,st=oe.min,lt=oe.max,dt=oe.first,pt=oe.last,ht=oe.count,vt=oe.std,mt=n(0);ut.Operators={compose:function(){for(var e=arguments.length,t=Array(e),n=0;n1&&void 0!==arguments[1]?arguments[1]:{saveChild:!0}).saveChild;return t.forEach(function(e){n=e(n),i.push.apply(i,function(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t1&&r.dispose(),n}},bin:function(){for(var e=arguments.length,t=Array(e),n=0;n2?(i=arguments.length<=0?void 0:arguments[0],n=arguments.length<=1?void 0:arguments[1],o=arguments.length<=2?void 0:arguments[2]):(i=null,n=arguments.length<=0?void 0:arguments[0],o=arguments.length<=1?void 0:arguments[1]),t=o(y),(e=r=new _(t.fn)).addDependencies.apply(e,P(t.dependencies)),this._addPropInModel(i,function(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}({},n,r)),this}},{key:\"_addPropInModel\",value:function(e,t){return this._graph.createNodesFrom(t,e),this}},{key:\"on\",value:function(e,t,r){var n,i=e instanceof Array?e:[e],o=this._graph.createElectricNodeOf(i,{type:\"CurrFrame\",fn:t});r&&(n=this._graph.stopPropagation().setPropagationOverride(\"nextFrame\")).resetNodeValue.apply(n,P(e));return o}},{key:\"next\",value:function(e,t,r){var n,i=e instanceof Array?e:[e],o=this._graph.createElectricNodeOf(i,{type:\"NextFrame\",fn:t});r&&(n=this._graph.stopPropagation().setPropagationOverride(\"currentFrame\")).resetNodeValue.apply(n,P(e));return o}},{key:\"lock\",value:function(){return this._lockFlag=!0,this._reqQ.length=0,this}},{key:\"unlock\",value:function(){return this._lockFlag=!1,this.setProp.apply(this,P(this._reqQ)),this._reqQ.length=0,this}},{key:\"prop\",value:function(){var e,t=void 0,r=void 0;switch(e=arguments.length){case 1:t=arguments.length<=0?void 0:arguments[0];break;case 2:t=arguments.length<=0?void 0:arguments[0],r=arguments.length<=1?void 0:arguments[1];break;default:return this}return 2===e?(this._lockFlag?this._reqQ.push([t,r]):this.setProp([t,r]),this):this._graph.getNodeValue(t)}},{key:\"setProp\",value:function(){for(var e,t=this,r=arguments.length,n=Array(r),i=0;i whenever a break is necessary. This is to recgonize one\n * generalized format independent of the implementation (canvas based solution, svg based solution). This method\n * converts the output of getSmartText().text to array of lines if the text is wrapped. It sets a named property\n * `lines` on the object passed as parameter.\n *\n * @param {Object} smartlabel - the object returned by getSmartText based on which line arr which to be formed.\n *\n * @return {Object} - The same object which was passed in the arguments. Also a named property `lines` is set.\n */\nSmartLabelManager.textToLines = function (smartlabel) {\n smartlabel = smartlabel || {};\n\n if (!smartlabel.text) {\n smartlabel.text = '';\n } else if (typeof smartlabel.text !== 'string') {\n smartlabel.text = smartlabel.text.toString();\n }\n\n smartlabel.lines = smartlabel.text.split(/\\n|/ig);\n return smartlabel;\n};\n\n// Saves all the instance created so far\nSmartLabelManager.store = {};\n\n// Calculates space taken by a character with an approximation value which is calculated by repeating the\n// character by string length times.\nSmartLabelManager.prototype._calCharDimWithCache = function (text, calculateDifference, length) {\n if (!this._init) {\n return false;\n }\n\n var size,\n csArr,\n tw,\n twi,\n cachedStyle,\n asymmetricDifference,\n maxAdvancedCacheLimit = this.options.maxCacheLimit,\n container = this._container,\n style = this.style || {},\n cache = this._advancedCache || (this._advancedCache = {}),\n advancedCacheKey = this._advancedCacheKey || (this._advancedCacheKey = []),\n cacheName = text + (style.fontSize || BLANK) + (style.fontFamily || BLANK) + (style.fontWeight || BLANK) + (style.fontStyle || BLANK),\n cacheInitName = text + 'init' + (style.fontSize || BLANK) + (style.fontFamily || BLANK) + (style.fontWeight || BLANK) + (style.fontStyle || BLANK);\n\n htmlSplCharSpace[text] && (text = htmlSplCharSpace[text]);\n\n if (!calculateDifference) {\n asymmetricDifference = 0;\n } else {\n if ((asymmetricDifference = cache[cacheInitName]) === undefined) {\n container.innerHTML = text.repeat ? text.repeat(length) : Array(length + 1).join(text); // jshint ignore:line\n tw = container.offsetWidth;\n\n container.innerHTML = text;\n twi = container.offsetWidth;\n\n asymmetricDifference = cache[cacheInitName] = (tw - length * twi) / (length + 1);\n advancedCacheKey.push(cacheInitName);\n if (advancedCacheKey.length > maxAdvancedCacheLimit) {\n delete cache[advancedCacheKey.shift()];\n }\n }\n }\n\n if (cachedStyle = cache[cacheName]) {\n csArr = cachedStyle.split(',');\n return {\n width: parseFloat(csArr[0], 10),\n height: parseFloat(csArr[1], 10)\n };\n }\n\n container.innerHTML = text;\n\n size = {\n height: container.offsetHeight,\n width: container.offsetWidth + asymmetricDifference\n };\n\n cache[cacheName] = size.width + ',' + size.height;\n advancedCacheKey.push(cacheName);\n if (advancedCacheKey.length > maxAdvancedCacheLimit) {\n delete cache[advancedCacheKey.shift()];\n }\n\n return size;\n};\n\n// Provide function to calculate the height and width based on the environment and available support from dom.\nSmartLabelManager.prototype._getWidthFn = function () {\n var contObj = this._containerObj,\n container = this._container,\n svgText = contObj.svgText;\n\n if (svgText) {\n return function (str) {\n var bbox, width;\n\n svgText.textContent = str;\n bbox = svgText.getBBox();\n width = bbox.width - SVG_BBOX_CORRECTION;\n if (width < 1) {\n width = bbox.width;\n }\n\n return width;\n };\n } else {\n return function (str) {\n container.innerHTML = str;\n return container.offsetWidth;\n };\n }\n};\n\n/*\n * Sets the style based on which the text's metrics to be calculated.\n *\n * @param {Object} style - The style object which affects the text size\n * {\n * fontSize / 'font-size' : MUST BE FOLLOWED BY PX (10px, 11px)\n * fontFamily / 'font-family'\n * fontWeight / 'font-weight'\n * fontStyle / 'font-style'\n * }\n *\n * @return {SmartLabelManager} - Current instance of SmartLabelManager\n */\nSmartLabelManager.prototype.setStyle = function (style) {\n if (!this._init) {\n return this;\n }\n\n var sCont;\n\n if (style === this.style && !this._styleNotSet) {\n return;\n }\n\n if (!style) {\n style = this.style;\n }\n\n slLib.setLineHeight(style);\n this.style = style;\n\n this._containerObj = sCont = this._containerManager.get(style);\n\n if (this._containerObj) {\n this._container = sCont.node;\n this._context = sCont.context;\n this._cache = sCont.charCache;\n this._lineHeight = sCont.lineHeight;\n this._styleNotSet = false;\n } else {\n this._styleNotSet = true;\n }\n\n return this;\n};\n\n/*\n * Decides whether ellipses to be shown if the node is truncated\n *\n * @param {Boolean} useEllipses - decides if a ellipses to be appended if the text is truncated. Default: false\n *\n * @return {SmartLabelManager} - Current instance of SmartLabelManager\n */\nSmartLabelManager.prototype.useEllipsesOnOverflow = function (useEllipses) {\n if (!this._init) {\n return this;\n }\n this._showNoEllipses = !useEllipses;\n return this;\n};\n\n/*\n * Get wrapped or truncated text if a bound box is defined around it. The result text would be separated by
\n * if wrapped\n *\n * @param {String} text - the subject text\n * @param {Number} maxWidth - width in px of the the bound box\n * @param {Number} maxHeight - height in px of the the bound box\n * @param {Boolean} noWrap - whether the text to be wrapped. Default false.\n *\n * @return {Object} - The metrics of the text bounded by the box\n * {\n * height : height of the wrapped text\n * width : width of the wrapped text\n * isTruncated : whether the text is truncated\n * maxHeight : Maximum height given\n * maxWidth : Maximum width given\n * oriText : Original text sent\n * oriTextHeight : Original text height\n * oriTextWidth : Original text width\n * text : SMART TEXT\n * }\n */\nSmartLabelManager.prototype.getSmartText = function (text, maxWidth, maxHeight, noWrap) {\n if (!this._init) {\n return false;\n }\n\n if (text === undefined || text === null) {\n text = '';\n } else if (typeof text !== 'string') {\n text = text.toString();\n }\n\n var len,\n trimStr,\n tempArr,\n tmpText,\n maxWidthWithEll,\n toolText,\n oriWidth,\n oriHeight,\n newCharIndex,\n nearestChar,\n tempChar,\n getWidth,\n initialLeft,\n initialTop,\n getOriSizeImproveObj,\n spanArr,\n x,\n y,\n minWidth,\n elem,\n chr,\n elemRightMostPoint,\n elemLowestPoint,\n lastBR,\n removeFromIndex,\n removeFromIndexForEllipses,\n hasHTMLTag = false,\n maxStrWidth = 0,\n lastDash = -1,\n lastSpace = -1,\n lastIndexBroken = -1,\n strWidth = 0,\n strHeight = 0,\n oriTextArr = [],\n i = 0,\n ellipsesStr = this._showNoEllipses ? '' : '...',\n lineHeight = this._lineHeight,\n context = this._context,\n container = this._container,\n sCont = this._containerObj,\n ellipsesWidth = sCont.ellipsesWidth,\n dotWidth = sCont.dotWidth,\n characterArr = [],\n dashIndex = -1,\n spaceIndex = -1,\n lastLineBreak = -1,\n fastTrim = function fastTrim(str) {\n str = str.replace(/^\\s\\s*/, '');\n var ws = /\\s/,\n i = str.length;\n while (ws.test(str.charAt(i -= 1))) {/* jshint noempty:false */}\n return str.slice(0, i + 1);\n },\n smartLabel = {\n text: text,\n maxWidth: maxWidth,\n maxHeight: maxHeight,\n width: null,\n height: null,\n oriTextWidth: null,\n oriTextHeight: null,\n oriText: text,\n isTruncated: false\n };\n\n getWidth = this._getWidthFn();\n\n // In some browsers, offsetheight of a single-line text is getting little (1 px) heigher value of the\n // lineheight. As a result, smartLabel is unable to return single-line text.\n // To fix this, increase the maxHeight a little amount. Hence maxHeight = lineHeight * 1.2\n if (maxHeight === lineHeight) {\n maxHeight *= 1.2;\n }\n\n if (container) {\n if (!documentSupport.isBrowserLess) {\n hasHTMLTag = slLib.xmlTagRegEx.test(text);\n if (!hasHTMLTag) {\n // Due to support of <,> for xml we convert <, > to <,> respectively so to get the correct\n // width it is required to convert the same before calculation for the new improve version of the\n // get text width.\n tmpText = text.replace(slLib.ltgtRegex, function (match) {\n return match === '<' ? '<' : '>';\n });\n getOriSizeImproveObj = this.getOriSize(tmpText, true);\n\n smartLabel.oriTextWidth = oriWidth = getOriSizeImproveObj.width;\n smartLabel.oriTextHeight = oriHeight = getOriSizeImproveObj.height;\n } else {\n container.innerHTML = text;\n smartLabel.oriTextWidth = oriWidth = container.offsetWidth;\n smartLabel.oriTextHeight = oriHeight = container.offsetHeight;\n }\n\n if (oriHeight <= maxHeight && oriWidth <= maxWidth) {\n smartLabel.width = smartLabel.oriTextWidth = oriWidth;\n smartLabel.height = smartLabel.oriTextHeight = oriHeight;\n return smartLabel;\n }\n\n if (lineHeight > maxHeight) {\n smartLabel.text = '';\n smartLabel.width = smartLabel.oriTextWidth = 0;\n smartLabel.height = smartLabel.oriTextHeight = 0;\n return smartLabel;\n }\n }\n\n // Calculate width with ellipses\n text = fastTrim(text).replace(/(\\s+)/g, ' ');\n maxWidthWithEll = this._showNoEllipses ? maxWidth : maxWidth - ellipsesWidth;\n\n if (!hasHTMLTag) {\n oriTextArr = text.split('');\n len = oriTextArr.length;\n trimStr = '', tempArr = [];\n tempChar = oriTextArr[0];\n\n if (this._cache[tempChar]) {\n minWidth = this._cache[tempChar].width;\n } else {\n minWidth = getWidth(tempChar);\n this._cache[tempChar] = { width: minWidth };\n }\n\n if (maxWidthWithEll > minWidth) {\n tempArr = text.substr(0, slLib.getNearestBreakIndex(text, maxWidthWithEll, this)).split('');\n i = tempArr.length;\n } else if (minWidth > maxWidth) {\n smartLabel.text = '';\n smartLabel.width = smartLabel.oriTextWidth = smartLabel.height = smartLabel.oriTextHeight = 0;\n return smartLabel;\n } else if (ellipsesStr) {\n maxWidthWithEll = maxWidth - 2 * dotWidth;\n if (maxWidthWithEll > minWidth) {\n ellipsesStr = '..';\n } else {\n maxWidthWithEll = maxWidth - dotWidth;\n if (maxWidthWithEll > minWidth) {\n ellipsesStr = '.';\n } else {\n maxWidthWithEll = 0;\n ellipsesStr = '';\n }\n }\n }\n\n strWidth = getWidth(tempArr.join(''));\n strHeight = this._lineHeight;\n\n if (noWrap) {\n for (; i < len; i += 1) {\n tempChar = tempArr[i] = oriTextArr[i];\n if (this._cache[tempChar]) {\n minWidth = this._cache[tempChar].width;\n } else {\n if (!getOriSizeImproveObj || !(minWidth = getOriSizeImproveObj.detailObj[tempChar])) {\n minWidth = getWidth(tempChar);\n }\n this._cache[tempChar] = {\n width: minWidth\n };\n }\n strWidth += minWidth;\n if (strWidth > maxWidthWithEll) {\n if (!trimStr) {\n trimStr = tempArr.slice(0, -1).join('');\n }\n if (strWidth > maxWidth) {\n smartLabel.text = fastTrim(trimStr) + ellipsesStr;\n smartLabel.tooltext = smartLabel.oriText;\n smartLabel.width = getWidth(smartLabel.text);\n smartLabel.height = this._lineHeight;\n return smartLabel;\n }\n }\n }\n\n smartLabel.text = tempArr.join('');\n smartLabel.width = strWidth;\n smartLabel.height = this._lineHeight;\n return smartLabel;\n } else {\n for (; i < len; i += 1) {\n tempChar = tempArr[i] = oriTextArr[i];\n if (tempChar === ' ' && !context) {\n tempChar = ' ';\n }\n\n if (this._cache[tempChar]) {\n minWidth = this._cache[tempChar].width;\n } else {\n if (!getOriSizeImproveObj || !(minWidth = getOriSizeImproveObj.detailObj[tempChar])) {\n minWidth = getWidth(tempChar);\n }\n this._cache[tempChar] = {\n width: minWidth\n };\n }\n strWidth += minWidth;\n\n if (strWidth > maxWidthWithEll) {\n if (!trimStr) {\n trimStr = tempArr.slice(0, -1).join('');\n }\n if (strWidth > maxWidth) {\n /** @todo use regular expressions for better performance. */\n lastSpace = text.substr(0, tempArr.length).lastIndexOf(' ');\n lastDash = text.substr(0, tempArr.length).lastIndexOf('-');\n if (lastSpace > lastIndexBroken) {\n strWidth = getWidth(tempArr.slice(lastIndexBroken + 1, lastSpace).join(''));\n tempArr.splice(lastSpace, 1, '
');\n lastIndexBroken = lastSpace;\n newCharIndex = lastSpace + 1;\n } else if (lastDash > lastIndexBroken) {\n if (lastDash === tempArr.length - 1) {\n strWidth = getWidth(tempArr.slice(lastIndexBroken + 1, lastSpace).join(''));\n tempArr.splice(lastDash, 1, '
-');\n } else {\n strWidth = getWidth(tempArr.slice(lastIndexBroken + 1, lastSpace).join(''));\n tempArr.splice(lastDash, 1, '-
');\n }\n lastIndexBroken = lastDash;\n newCharIndex = lastDash + 1;\n } else {\n tempArr.splice(tempArr.length - 1, 1, '
' + oriTextArr[i]);\n lastLineBreak = tempArr.length - 2;\n strWidth = getWidth(tempArr.slice(lastIndexBroken + 1, lastLineBreak + 1).join(''));\n lastIndexBroken = lastLineBreak;\n newCharIndex = i;\n }\n strHeight += this._lineHeight;\n if (strHeight > maxHeight) {\n smartLabel.text = fastTrim(trimStr) + ellipsesStr;\n smartLabel.tooltext = smartLabel.oriText;\n // The max width among all the lines will be the width of the string.\n smartLabel.width = maxWidth;\n smartLabel.height = strHeight - this._lineHeight;\n return smartLabel;\n } else {\n maxStrWidth = max(maxStrWidth, strWidth);\n trimStr = null;\n nearestChar = slLib.getNearestBreakIndex(text.substr(newCharIndex), maxWidthWithEll, this);\n strWidth = getWidth(text.substr(newCharIndex, nearestChar || 1));\n if (tempArr.length < newCharIndex + nearestChar) {\n tempArr = tempArr.concat(text.substr(tempArr.length, newCharIndex + nearestChar - tempArr.length).split(''));\n i = tempArr.length - 1;\n }\n }\n }\n }\n }\n\n maxStrWidth = max(maxStrWidth, strWidth);\n\n smartLabel.text = tempArr.join('');\n smartLabel.width = maxStrWidth;\n smartLabel.height = strHeight;\n return smartLabel;\n }\n } else {\n toolText = text.replace(slLib.spanAdditionRegx, '$2');\n text = text.replace(slLib.spanAdditionRegx, slLib.spanAdditionReplacer);\n text = text.replace(/()/g, '$1');\n\n container.innerHTML = text;\n\n spanArr = container[documentSupport.childRetriverFn](documentSupport.childRetriverString);\n\n for (x = 0, y = spanArr.length; x < y; x += 1) {\n elem = spanArr[x];\n //chech whether this span is temporary inserted span from it's class\n if (documentSupport.noClassTesting || slLib.classNameReg.test(elem.className)) {\n chr = elem.innerHTML;\n if (chr !== '') {\n if (chr === ' ') {\n spaceIndex = characterArr.length;\n } else if (chr === '-') {\n dashIndex = characterArr.length;\n }\n\n characterArr.push({\n spaceIdx: spaceIndex,\n dashIdx: dashIndex,\n elem: elem\n });\n oriTextArr.push(chr);\n }\n }\n }\n\n i = 0;\n len = characterArr.length;\n minWidth = characterArr[0].elem.offsetWidth;\n\n if (minWidth > maxWidth) {\n smartLabel.text = '';\n smartLabel.width = smartLabel.oriTextWidth = smartLabel.height = smartLabel.oriTextHeight = 0;\n\n return smartLabel;\n } else if (minWidth > maxWidthWithEll && !this._showNoEllipses) {\n\n maxWidthWithEll = maxWidth - 2 * dotWidth;\n if (maxWidthWithEll > minWidth) {\n ellipsesStr = '..';\n } else {\n maxWidthWithEll = maxWidth - dotWidth;\n if (maxWidthWithEll > minWidth) {\n ellipsesStr = '.';\n } else {\n maxWidthWithEll = 0;\n ellipsesStr = '';\n }\n }\n }\n\n initialLeft = characterArr[0].elem.offsetLeft;\n initialTop = characterArr[0].elem.offsetTop;\n\n if (noWrap) {\n for (; i < len; i += 1) {\n elem = characterArr[i].elem;\n elemRightMostPoint = elem.offsetLeft - initialLeft + elem.offsetWidth;\n\n if (elemRightMostPoint > maxWidthWithEll) {\n if (!removeFromIndexForEllipses) {\n removeFromIndexForEllipses = i;\n }\n if (container.offsetWidth > maxWidth) {\n removeFromIndex = i;\n i = len;\n }\n }\n }\n } else {\n for (; i < len; i += 1) {\n elem = characterArr[i].elem;\n elemLowestPoint = elem.offsetHeight + (elem.offsetTop - initialTop);\n elemRightMostPoint = elem.offsetLeft - initialLeft + elem.offsetWidth;\n\n lastBR = null;\n\n if (elemRightMostPoint > maxWidthWithEll) {\n if (!removeFromIndexForEllipses) {\n removeFromIndexForEllipses = i;\n }\n\n if (elemRightMostPoint > maxWidth) {\n lastSpace = characterArr[i].spaceIdx;\n lastDash = characterArr[i].dashIdx;\n if (lastSpace > lastIndexBroken) {\n characterArr[lastSpace].elem.innerHTML = '
';\n lastIndexBroken = lastSpace;\n } else if (lastDash > lastIndexBroken) {\n if (lastDash === i) {\n // in case the overflowing character itself is the '-'\n characterArr[lastDash].elem.innerHTML = '
-';\n } else {\n characterArr[lastDash].elem.innerHTML = '-
';\n }\n lastIndexBroken = lastDash;\n } else {\n elem.parentNode.insertBefore(lastBR = doc.createElement('br'), elem);\n }\n\n //check whether this break made current element outside the area height\n if (elem.offsetHeight + elem.offsetTop > maxHeight) {\n //remove the lastly inserted line break\n if (lastBR) {\n lastBR.parentNode.removeChild(lastBR);\n } else if (lastIndexBroken === lastDash) {\n characterArr[lastDash].elem.innerHTML = '-';\n } else {\n characterArr[lastSpace].elem.innerHTML = ' ';\n }\n removeFromIndex = i;\n //break the looping condition\n i = len;\n } else {\n removeFromIndexForEllipses = null;\n }\n }\n } else {\n //check whether this break made current element outside the area height\n if (elemLowestPoint > maxHeight) {\n removeFromIndex = i;\n i = len;\n }\n }\n }\n }\n\n if (removeFromIndex < len) {\n //set the trancated property of the smartlabel\n smartLabel.isTruncated = true;\n\n /** @todo is this really needed? */\n removeFromIndexForEllipses = removeFromIndexForEllipses ? removeFromIndexForEllipses : removeFromIndex;\n\n for (i = len - 1; i >= removeFromIndexForEllipses; i -= 1) {\n elem = characterArr[i].elem;\n //chech whether this span is temporary inserted span from it's class\n elem.parentNode.removeChild(elem);\n }\n\n for (; i >= 0; i -= 1) {\n elem = characterArr[i].elem;\n if (slLib.classNameBrReg.test(elem.className)) {\n //chech whether this span is temporary inserted span from it's class\n elem.parentNode.removeChild(elem);\n } else {\n i = 0;\n }\n }\n }\n\n //get the smart text\n smartLabel.text = container.innerHTML.replace(slLib.spanRemovalRegx, '$1').replace(/\\&\\;/g, '&');\n if (smartLabel.isTruncated) {\n smartLabel.text += ellipsesStr;\n smartLabel.tooltext = toolText;\n }\n }\n\n smartLabel.height = container.offsetHeight;\n smartLabel.width = container.offsetWidth;\n\n return smartLabel;\n } else {\n smartLabel.error = new Error('Body Tag Missing!');\n return smartLabel;\n }\n};\n\n/*\n * Get the height and width of a text.\n *\n * @param {String} text - Text whose metrics to be measured\n * @param {Boolean} Optional detailedCalculationFlag - this flag if set it calculates per letter position\n * information and returns it. Ideally you dont need it unless you want to post process the\n * string. And its an EXPENSIVE OPERATION.\n *\n * @return {Object} - If detailedCalculationFlag is set to true the returned object would be\n * {\n * height: height of the text\n * width: width of the text\n * detailObj: detail calculation of letters in the format {lettername: width}\n * }\n * If detailedCalculationFlag is set to false the returned object wont have the detailObj prop.\n */\nSmartLabelManager.prototype.getOriSize = function (text, detailedCalculationFlag) {\n if (!this._init) {\n return false;\n }\n\n var textArr,\n letter,\n lSize,\n i,\n l,\n cumulativeSize = 0,\n height = 0,\n indiSizeStore = {};\n\n if (!detailedCalculationFlag) {\n return this._calCharDimWithCache(text);\n }\n\n // Calculate the width of every letter with an approximation\n textArr = text.split('');\n for (i = 0, l = textArr.length; i < l; i++) {\n letter = textArr[i];\n lSize = this._calCharDimWithCache(letter, true, textArr.length);\n height = max(height, lSize.height);\n cumulativeSize += lSize.width;\n indiSizeStore[letter] = lSize.width;\n }\n\n return {\n width: round(cumulativeSize),\n height: height,\n detailObj: indiSizeStore\n };\n};\n\n/*\n * Dispose the container and object allocated by the smartlabel\n */\nSmartLabelManager.prototype.dispose = function () {\n if (!this._init) {\n return this;\n }\n\n this._containerManager && this._containerManager.dispose && this._containerManager.dispose();\n\n delete this._container;\n delete this._context;\n delete this._cache;\n delete this._containerManager;\n delete this._containerObj;\n delete this.id;\n delete this.style;\n delete this.parentContainer;\n delete this._showNoEllipses;\n\n return this;\n};\n\nexports['default'] = SmartLabelManager;\nmodule.exports = exports['default'];","'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n\tvalue: true\n});\nvar lib = {\n\tinit: function init(win) {\n\t\tvar doc = win.document,\n\t\t nav = win.navigator,\n\t\t userAgent = nav.userAgent,\n\t\t DIV = 'DIV',\n\t\t ceil = Math.ceil,\n\t\t floor = Math.floor,\n\t\t containerInstanceCount = 0,\n\t\t clsNameSpace = 'fusioncharts-smartlabel-',\n\t\t containerClass = clsNameSpace + 'container',\n\t\t classNameWithTag = clsNameSpace + 'tag',\n\t\t classNameWithTagBR = clsNameSpace + 'br';\n\n\t\tlib = {\n\t\t\twin: win,\n\n\t\t\tcontainerClass: containerClass,\n\n\t\t\tclassNameWithTag: classNameWithTag,\n\n\t\t\tclassNameWithTagBR: classNameWithTagBR,\n\n\t\t\tmaxDefaultCacheLimit: 500,\n\n\t\t\tclassNameReg: new RegExp('\\b' + classNameWithTag + '\\b'),\n\n\t\t\tclassNameBrReg: new RegExp('\\b' + classNameWithTagBR + '\\b'),\n\n\t\t\tspanAdditionRegx: /(<[^<\\>]+?\\>)|(&(?:[a-z]+|#[0-9]+);|.)/ig,\n\n\t\t\tspanAdditionReplacer: '$1$2',\n\n\t\t\tspanRemovalRegx: new RegExp('\\\\]+?' + classNameWithTag + '[^\\\\>]{0,}\\\\>(.*?)\\\\<\\\\/span\\\\>', 'ig'),\n\n\t\t\txmlTagRegEx: new RegExp('<[^>][^<]*[^>]+>', 'i'),\n\n\t\t\tltgtRegex: /<|>/g,\n\n\t\t\tbrReplaceRegex: //ig,\n\n\t\t\ttestStrAvg: 'WgI',\n\n\t\t\t// This style is applied over the parent smartlabel container. The container is kept hidden from the viewport\n\t\t\tparentContainerStyle: {\n\t\t\t\tposition: 'absolute',\n\t\t\t\ttop: '-9999em',\n\t\t\t\twhiteSpace: 'nowrap',\n\t\t\t\tpadding: '0px',\n\t\t\t\twidth: '1px',\n\t\t\t\theight: '1px',\n\t\t\t\toverflow: 'hidden'\n\t\t\t},\n\n\t\t\t// All the style which might affect the text metrics\n\t\t\tsupportedStyle: {\n\t\t\t\tfont: 'font',\n\t\t\t\tfontFamily: 'font-family',\n\t\t\t\t'font-family': 'font-family',\n\t\t\t\tfontWeight: 'font-weight',\n\t\t\t\t'font-weight': 'font-weight',\n\t\t\t\tfontSize: 'font-size',\n\t\t\t\t'font-size': 'font-size',\n\t\t\t\tlineHeight: 'line-height',\n\t\t\t\t'line-height': 'line-height',\n\t\t\t\tfontStyle: 'font-style',\n\t\t\t\t'font-style': 'font-style'\n\t\t\t},\n\n\t\t\t// Get the support list for html the document where the text calcution is to be done.\n\t\t\tgetDocumentSupport: function getDocumentSupport() {\n\t\t\t\tvar childRetriverFn, childRetriverString, noClassTesting;\n\n\t\t\t\tif (doc.getElementsByClassName) {\n\t\t\t\t\tchildRetriverFn = 'getElementsByClassName';\n\t\t\t\t\tchildRetriverString = classNameWithTag;\n\t\t\t\t\tnoClassTesting = true;\n\t\t\t\t} else {\n\t\t\t\t\tchildRetriverFn = 'getElementsByTagName';\n\t\t\t\t\tchildRetriverString = 'span';\n\t\t\t\t\tnoClassTesting = false;\n\t\t\t\t}\n\n\t\t\t\treturn {\n\t\t\t\t\tisIE: /msie/i.test(userAgent) && !win.opera,\n\t\t\t\t\thasSVG: Boolean(win.SVGAngle || doc.implementation.hasFeature('http://www.w3.org/TR/SVG11/feature#BasicStructure', '1.1')),\n\t\t\t\t\tisHeadLess: new RegExp(' HtmlUnit').test(userAgent),\n\t\t\t\t\tisWebKit: new RegExp(' AppleWebKit/').test(userAgent),\n\t\t\t\t\tchildRetriverFn: childRetriverFn,\n\t\t\t\t\tchildRetriverString: childRetriverString,\n\t\t\t\t\tnoClassTesting: noClassTesting\n\t\t\t\t};\n\t\t\t},\n\n\t\t\t/*\n * Create a html div element and attach it with a parent. All the subsequent operations are performed\n * by upding this dom tree only.\n *\n * @param {HTMLElement} - The html element where the newly created div is to be attached. If not passed,\n * the new div is appended on the body.\n */\n\t\t\tcreateContainer: function createContainer(containerParent) {\n\t\t\t\tvar body, container;\n\n\t\t\t\tif (containerParent && (containerParent.offsetWidth || containerParent.offsetHeight)) {\n\t\t\t\t\tif (containerParent.appendChild) {\n\t\t\t\t\t\tcontainerParent.appendChild(container = doc.createElement(DIV));\n\t\t\t\t\t\tcontainer.className = containerClass;\n\t\t\t\t\t\tcontainer.setAttribute('aria-hidden', 'true');\n\t\t\t\t\t\tcontainer.setAttribute('role', 'presentation');\n\t\t\t\t\t\treturn container;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tbody = doc.getElementsByTagName('body')[0];\n\n\t\t\t\t\tif (body && body.appendChild) {\n\t\t\t\t\t\tcontainer = doc.createElement(DIV);\n\t\t\t\t\t\tcontainer.className = containerClass;\n\t\t\t\t\t\tcontainer.setAttribute('aria-hidden', 'true');\n\t\t\t\t\t\tcontainer.setAttribute('role', 'presentation');\n\t\t\t\t\t\tcontainerInstanceCount += 1;\n\t\t\t\t\t\tbody.appendChild(container);\n\t\t\t\t\t\treturn container;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// Finds a approximate position where the text is to be broken\n\t\t\tgetNearestBreakIndex: function getNearestBreakIndex(text, maxWidth, sl) {\n\t\t\t\tif (!text || !text.length) {\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\n\t\t\t\tvar difference,\n\t\t\t\t getWidth = sl._getWidthFn(),\n\t\t\t\t charLen = 0,\n\t\t\t\t increment = 0,\n\t\t\t\t oriWidth = getWidth(text),\n\t\t\t\t avgWidth = oriWidth / text.length;\n\n\t\t\t\tdifference = maxWidth;\n\t\t\t\tcharLen = ceil(maxWidth / avgWidth);\n\n\t\t\t\tif (oriWidth < maxWidth) {\n\t\t\t\t\treturn text.length - 1;\n\t\t\t\t}\n\n\t\t\t\tif (charLen > text.length) {\n\t\t\t\t\tdifference = maxWidth - oriWidth;\n\t\t\t\t\tcharLen = text.length;\n\t\t\t\t}\n\n\t\t\t\twhile (difference > 0) {\n\t\t\t\t\tdifference = maxWidth - getWidth(text.substr(0, charLen));\n\t\t\t\t\tincrement = floor(difference / avgWidth);\n\t\t\t\t\tif (increment) {\n\t\t\t\t\t\tcharLen += increment;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn charLen;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\twhile (difference < 0) {\n\t\t\t\t\tdifference = maxWidth - getWidth(text.substr(0, charLen));\n\t\t\t\t\tincrement = floor(difference / avgWidth);\n\t\t\t\t\tif (increment) {\n\t\t\t\t\t\tcharLen += increment;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn charLen;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn charLen;\n\t\t\t},\n\n\t\t\t/*\n * Determine lineheight of a text for a given style. It adds propery lineHeight to the style passed\n *\n * @param {Object} - The style based on which the text's metric needs to be calculated. The calculation happens\n * based on fontSize property, if its not present a default font size is assumed.\n *\n * @return {Object} - The style that was passed with lineHeight as a named propery set on the object.\n */\n\t\t\tsetLineHeight: function setLineHeight(styleObj) {\n\t\t\t\tvar fSize = styleObj.fontSize = styleObj.fontSize || '12px';\n\t\t\t\tstyleObj.lineHeight = styleObj.lineHeight || styleObj['line-height'] || parseInt(fSize, 10) * 1.2 + 'px';\n\t\t\t\treturn styleObj;\n\t\t\t}\n\t\t};\n\n\t\treturn lib;\n\t}\n};\n\nexports['default'] = lib;\nmodule.exports = exports['default'];","const Muze = require('./muze');\n\nmodule.exports = Muze.default ? Muze.default : Muze;\n","'use strict';\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _lib = require('./lib');\n\nvar _lib2 = _interopRequireDefault(_lib);\n\nvar slLib = _lib2['default'].init(typeof window !== \"undefined\" ? window : undefined),\n doc = slLib.win.document,\n documentSupport = slLib.getDocumentSupport(),\n SVG_BBOX_CORRECTION = documentSupport.isWebKit ? 0 : 4.5;\n\nfunction ContainerManager(parentContainer, isBrowserLess, maxContainers) {\n var svg;\n\n maxContainers = maxContainers > 5 ? maxContainers : 5;\n maxContainers = maxContainers < 20 ? maxContainers : 20;\n\n this.maxContainers = maxContainers;\n this.first = null;\n this.last = null;\n this.containers = {};\n this.length = 0;\n this.rootNode = parentContainer;\n\n if (isBrowserLess) {\n svg = doc.createElementNS('http://www.w3.org/2000/svg', 'svg');\n svg.setAttributeNS('http://www.w3.org/2000/svg', 'xlink', 'http://www.w3.org/1999/xlink');\n svg.setAttributeNS('http://www.w3.org/2000/svg', 'height', '0');\n svg.setAttributeNS('http://www.w3.org/2000/svg', 'width', '0');\n this.svgRoot = svg;\n this.rootNode.appendChild(svg);\n }\n}\n\nContainerManager.prototype.get = function (style) {\n var diff,\n key,\n containerObj,\n containers = this.containers,\n len = this.length,\n max = this.maxContainers,\n keyStr = '';\n\n for (key in slLib.supportedStyle) {\n if (style[key] !== undefined) {\n keyStr += slLib.supportedStyle[key] + ':' + style[key] + ';';\n }\n }\n\n if (!keyStr) {\n return false;\n }\n\n if (containerObj = containers[keyStr]) {\n if (this.first !== containerObj) {\n containerObj.prev && (containerObj.prev.next = containerObj.next);\n containerObj.next && (containerObj.next.prev = containerObj.prev);\n containerObj.next = this.first;\n containerObj.next.prev = containerObj;\n this.last === containerObj && (this.last = containerObj.prev);\n containerObj.prev = null;\n this.first = containerObj;\n }\n } else {\n if (len >= max) {\n diff = len - max + 1;\n // +1 is to remove an extra entry to make space for the new container to be added.\n while (diff--) {\n this.removeContainer(this.last);\n }\n }\n containerObj = this.addContainer(keyStr);\n }\n\n return containerObj;\n};\n\nContainerManager.prototype.addContainer = function (keyStr) {\n var node, container;\n\n this.containers[keyStr] = container = {\n next: null,\n prev: null,\n node: null,\n ellipsesWidth: 0,\n lineHeight: 0,\n dotWidth: 0,\n avgCharWidth: 4,\n keyStr: keyStr,\n charCache: {}\n };\n\n // Since the container objects are arranged from most recent to least recent order, we need to add the new\n // object at the beginning of the list.\n container.next = this.first;\n container.next && (container.next.prev = container);\n this.first = container;\n if (!this.last) {\n this.last = container;\n }\n this.length += 1;\n\n node = container.node = doc.createElement('div');\n this.rootNode.appendChild(node);\n\n if (documentSupport.isIE && !documentSupport.hasSVG) {\n node.style.setAttribute('cssText', keyStr);\n } else {\n node.setAttribute('style', keyStr);\n }\n\n node.setAttribute('aria-hidden', 'true');\n node.setAttribute('role', 'presentation');\n node.style.display = 'inline-block';\n\n node.innerHTML = slLib.testStrAvg; // A test string.\n container.lineHeight = node.offsetHeight;\n container.avgCharWidth = node.offsetWidth / 3;\n\n if (documentSupport.isBrowserLess) {\n node = container.svgText = doc.createElementNS('http://www.w3.org/2000/svg', 'text');\n node.setAttribute('style', keyStr);\n this.svgRoot.appendChild(node);\n\n node.textContent = slLib.testStrAvg; // A test string.\n container.lineHeight = node.getBBox().height;\n container.avgCharWidth = (node.getBBox().width - SVG_BBOX_CORRECTION) / 3;\n\n node.textContent = '...';\n container.ellipsesWidth = node.getBBox().width - SVG_BBOX_CORRECTION;\n node.textContent = '.';\n container.dotWidth = node.getBBox().width - SVG_BBOX_CORRECTION;\n } else {\n node.innerHTML = '...';\n container.ellipsesWidth = node.offsetWidth;\n node.innerHTML = '.';\n container.dotWidth = node.offsetWidth;\n node.innerHTML = '';\n }\n\n return container;\n};\n\nContainerManager.prototype.removeContainer = function (cObj) {\n var keyStr = cObj.keyStr;\n\n if (!keyStr || !this.length || !cObj) {\n return;\n }\n this.length -= 1;\n\n cObj.prev && (cObj.prev.next = cObj.next);\n cObj.next && (cObj.next.prev = cObj.prev);\n this.first === cObj && (this.first = cObj.next);\n this.last === cObj && (this.last = cObj.prev);\n\n cObj.node.parentNode.removeChild(cObj.node);\n\n delete this.containers[keyStr];\n};\n\nContainerManager.prototype.dispose = function () {\n var key,\n containers = this.containers;\n\n this.maxContainers = null;\n for (key in containers) {\n this.removeContainer(containers[key]);\n }\n\n this.rootNode.parentNode.removeChild(this.rootNode);\n\n this.rootNode = null;\n this.first = null;\n this.last = null;\n};\n\nmodule.exports = ContainerManager;","export default function(a, b) {\n return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","import ascending from \"./ascending\";\n\nexport default function(compare) {\n if (compare.length === 1) compare = ascendingComparator(compare);\n return {\n left: function(a, x, lo, hi) {\n if (lo == null) lo = 0;\n if (hi == null) hi = a.length;\n while (lo < hi) {\n var mid = lo + hi >>> 1;\n if (compare(a[mid], x) < 0) lo = mid + 1;\n else hi = mid;\n }\n return lo;\n },\n right: function(a, x, lo, hi) {\n if (lo == null) lo = 0;\n if (hi == null) hi = a.length;\n while (lo < hi) {\n var mid = lo + hi >>> 1;\n if (compare(a[mid], x) > 0) hi = mid;\n else lo = mid + 1;\n }\n return lo;\n }\n };\n}\n\nfunction ascendingComparator(f) {\n return function(d, x) {\n return ascending(f(d), x);\n };\n}\n","import ascending from \"./ascending\";\nimport bisector from \"./bisector\";\n\nvar ascendingBisect = bisector(ascending);\nexport var bisectRight = ascendingBisect.right;\nexport var bisectLeft = ascendingBisect.left;\nexport default bisectRight;\n","import {pair} from \"./pairs\";\n\nexport default function(values0, values1, reduce) {\n var n0 = values0.length,\n n1 = values1.length,\n values = new Array(n0 * n1),\n i0,\n i1,\n i,\n value0;\n\n if (reduce == null) reduce = pair;\n\n for (i0 = i = 0; i0 < n0; ++i0) {\n for (value0 = values0[i0], i1 = 0; i1 < n1; ++i1, ++i) {\n values[i] = reduce(value0, values1[i1]);\n }\n }\n\n return values;\n}\n","export default function(x) {\n return x === null ? NaN : +x;\n}\n","var array = Array.prototype;\n\nexport var slice = array.slice;\nexport var map = array.map;\n","export default function(start, stop, step) {\n start = +start, stop = +stop, step = (n = arguments.length) < 2 ? (stop = start, start = 0, 1) : n < 3 ? 1 : +step;\n\n var i = -1,\n n = Math.max(0, Math.ceil((stop - start) / step)) | 0,\n range = new Array(n);\n\n while (++i < n) {\n range[i] = start + i * step;\n }\n\n return range;\n}\n","var e10 = Math.sqrt(50),\n e5 = Math.sqrt(10),\n e2 = Math.sqrt(2);\n\nexport default function(start, stop, count) {\n var reverse,\n i = -1,\n n,\n ticks,\n step;\n\n stop = +stop, start = +start, count = +count;\n if (start === stop && count > 0) return [start];\n if (reverse = stop < start) n = start, start = stop, stop = n;\n if ((step = tickIncrement(start, stop, count)) === 0 || !isFinite(step)) return [];\n\n if (step > 0) {\n start = Math.ceil(start / step);\n stop = Math.floor(stop / step);\n ticks = new Array(n = Math.ceil(stop - start + 1));\n while (++i < n) ticks[i] = (start + i) * step;\n } else {\n start = Math.floor(start * step);\n stop = Math.ceil(stop * step);\n ticks = new Array(n = Math.ceil(start - stop + 1));\n while (++i < n) ticks[i] = (start - i) / step;\n }\n\n if (reverse) ticks.reverse();\n\n return ticks;\n}\n\nexport function tickIncrement(start, stop, count) {\n var step = (stop - start) / Math.max(0, count),\n power = Math.floor(Math.log(step) / Math.LN10),\n error = step / Math.pow(10, power);\n return power >= 0\n ? (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1) * Math.pow(10, power)\n : -Math.pow(10, -power) / (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1);\n}\n\nexport function tickStep(start, stop, count) {\n var step0 = Math.abs(stop - start) / Math.max(0, count),\n step1 = Math.pow(10, Math.floor(Math.log(step0) / Math.LN10)),\n error = step0 / step1;\n if (error >= e10) step1 *= 10;\n else if (error >= e5) step1 *= 5;\n else if (error >= e2) step1 *= 2;\n return stop < start ? -step1 : step1;\n}\n","export default function(values) {\n return Math.ceil(Math.log(values.length) / Math.LN2) + 1;\n}\n","import number from \"./number\";\n\nexport default function(values, p, valueof) {\n if (valueof == null) valueof = number;\n if (!(n = values.length)) return;\n if ((p = +p) <= 0 || n < 2) return +valueof(values[0], 0, values);\n if (p >= 1) return +valueof(values[n - 1], n - 1, values);\n var n,\n i = (n - 1) * p,\n i0 = Math.floor(i),\n value0 = +valueof(values[i0], i0, values),\n value1 = +valueof(values[i0 + 1], i0 + 1, values);\n return value0 + (value1 - value0) * (i - i0);\n}\n","export var prefix = \"$\";\n\nfunction Map() {}\n\nMap.prototype = map.prototype = {\n constructor: Map,\n has: function(key) {\n return (prefix + key) in this;\n },\n get: function(key) {\n return this[prefix + key];\n },\n set: function(key, value) {\n this[prefix + key] = value;\n return this;\n },\n remove: function(key) {\n var property = prefix + key;\n return property in this && delete this[property];\n },\n clear: function() {\n for (var property in this) if (property[0] === prefix) delete this[property];\n },\n keys: function() {\n var keys = [];\n for (var property in this) if (property[0] === prefix) keys.push(property.slice(1));\n return keys;\n },\n values: function() {\n var values = [];\n for (var property in this) if (property[0] === prefix) values.push(this[property]);\n return values;\n },\n entries: function() {\n var entries = [];\n for (var property in this) if (property[0] === prefix) entries.push({key: property.slice(1), value: this[property]});\n return entries;\n },\n size: function() {\n var size = 0;\n for (var property in this) if (property[0] === prefix) ++size;\n return size;\n },\n empty: function() {\n for (var property in this) if (property[0] === prefix) return false;\n return true;\n },\n each: function(f) {\n for (var property in this) if (property[0] === prefix) f(this[property], property.slice(1), this);\n }\n};\n\nfunction map(object, f) {\n var map = new Map;\n\n // Copy constructor.\n if (object instanceof Map) object.each(function(value, key) { map.set(key, value); });\n\n // Index array by numeric index or specified key function.\n else if (Array.isArray(object)) {\n var i = -1,\n n = object.length,\n o;\n\n if (f == null) while (++i < n) map.set(i, object[i]);\n else while (++i < n) map.set(f(o = object[i], i, object), o);\n }\n\n // Convert object to map.\n else if (object) for (var key in object) map.set(key, object[key]);\n\n return map;\n}\n\nexport default map;\n","import map from \"./map\";\n\nexport default function() {\n var keys = [],\n sortKeys = [],\n sortValues,\n rollup,\n nest;\n\n function apply(array, depth, createResult, setResult) {\n if (depth >= keys.length) {\n if (sortValues != null) array.sort(sortValues);\n return rollup != null ? rollup(array) : array;\n }\n\n var i = -1,\n n = array.length,\n key = keys[depth++],\n keyValue,\n value,\n valuesByKey = map(),\n values,\n result = createResult();\n\n while (++i < n) {\n if (values = valuesByKey.get(keyValue = key(value = array[i]) + \"\")) {\n values.push(value);\n } else {\n valuesByKey.set(keyValue, [value]);\n }\n }\n\n valuesByKey.each(function(values, key) {\n setResult(result, key, apply(values, depth, createResult, setResult));\n });\n\n return result;\n }\n\n function entries(map, depth) {\n if (++depth > keys.length) return map;\n var array, sortKey = sortKeys[depth - 1];\n if (rollup != null && depth >= keys.length) array = map.entries();\n else array = [], map.each(function(v, k) { array.push({key: k, values: entries(v, depth)}); });\n return sortKey != null ? array.sort(function(a, b) { return sortKey(a.key, b.key); }) : array;\n }\n\n return nest = {\n object: function(array) { return apply(array, 0, createObject, setObject); },\n map: function(array) { return apply(array, 0, createMap, setMap); },\n entries: function(array) { return entries(apply(array, 0, createMap, setMap), 0); },\n key: function(d) { keys.push(d); return nest; },\n sortKeys: function(order) { sortKeys[keys.length - 1] = order; return nest; },\n sortValues: function(order) { sortValues = order; return nest; },\n rollup: function(f) { rollup = f; return nest; }\n };\n}\n\nfunction createObject() {\n return {};\n}\n\nfunction setObject(object, key, value) {\n object[key] = value;\n}\n\nfunction createMap() {\n return map();\n}\n\nfunction setMap(map, key, value) {\n map.set(key, value);\n}\n","import {default as map, prefix} from \"./map\";\n\nfunction Set() {}\n\nvar proto = map.prototype;\n\nSet.prototype = set.prototype = {\n constructor: Set,\n has: proto.has,\n add: function(value) {\n value += \"\";\n this[prefix + value] = value;\n return this;\n },\n remove: proto.remove,\n clear: proto.clear,\n values: proto.keys,\n size: proto.size,\n empty: proto.empty,\n each: proto.each\n};\n\nfunction set(object, f) {\n var set = new Set;\n\n // Copy constructor.\n if (object instanceof Set) object.each(function(value) { set.add(value); });\n\n // Otherwise, assume it’s an array.\n else if (object) {\n var i = -1, n = object.length;\n if (f == null) while (++i < n) set.add(object[i]);\n else while (++i < n) set.add(f(object[i], i, object));\n }\n\n return set;\n}\n\nexport default set;\n","var array = Array.prototype;\n\nexport var map = array.map;\nexport var slice = array.slice;\n","import {map} from \"d3-collection\";\nimport {slice} from \"./array\";\n\nexport var implicit = {name: \"implicit\"};\n\nexport default function ordinal(range) {\n var index = map(),\n domain = [],\n unknown = implicit;\n\n range = range == null ? [] : slice.call(range);\n\n function scale(d) {\n var key = d + \"\", i = index.get(key);\n if (!i) {\n if (unknown !== implicit) return unknown;\n index.set(key, i = domain.push(d));\n }\n return range[(i - 1) % range.length];\n }\n\n scale.domain = function(_) {\n if (!arguments.length) return domain.slice();\n domain = [], index = map();\n var i = -1, n = _.length, d, key;\n while (++i < n) if (!index.has(key = (d = _[i]) + \"\")) index.set(key, domain.push(d));\n return scale;\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = slice.call(_), scale) : range.slice();\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n scale.copy = function() {\n return ordinal()\n .domain(domain)\n .range(range)\n .unknown(unknown);\n };\n\n return scale;\n}\n","import {range as sequence} from \"d3-array\";\nimport ordinal from \"./ordinal\";\n\nexport default function band() {\n var scale = ordinal().unknown(undefined),\n domain = scale.domain,\n ordinalRange = scale.range,\n range = [0, 1],\n step,\n bandwidth,\n round = false,\n paddingInner = 0,\n paddingOuter = 0,\n align = 0.5;\n\n delete scale.unknown;\n function rescale() {\n var n = domain().length,\n reverse = range[1] < range[0],\n start = range[reverse - 0],\n stop = range[1 - reverse];\n step = (stop - start) / Math.max(1, n - paddingInner + paddingOuter * 2);\n if (round) step = Math.floor(step);\n start += (stop - start - step * (n - paddingInner)) * align;\n bandwidth = step * (1 - paddingInner);\n if (round) start = Math.round(start), bandwidth = Math.round(bandwidth);\n var values = sequence(n).map(function(i) { return start + step * i; });\n return ordinalRange(reverse ? values.reverse() : values);\n }\n\n scale.domain = function(_) {\n return arguments.length ? (domain(_), rescale()) : domain();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = [+_[0], +_[1]], rescale()) : range.slice();\n };\n\n scale.rangeRound = function(_) {\n return range = [+_[0], +_[1]], round = true, rescale();\n };\n\n scale.bandwidth = function() {\n return bandwidth;\n };\n\n scale.step = function() {\n return step;\n };\n\n scale.round = function(_) {\n return arguments.length ? (round = !!_, rescale()) : round;\n };\n\n scale.padding = function(_) {\n return arguments.length ? (paddingInner = paddingOuter = Math.max(0, Math.min(1, _)), rescale()) : paddingInner;\n };\n\n scale.paddingInner = function(_) {\n return arguments.length ? (paddingInner = Math.max(0, Math.min(1, _)), rescale()) : paddingInner;\n };\n\n scale.paddingOuter = function(_) {\n return arguments.length ? (paddingOuter = Math.max(0, Math.min(1, _)), rescale()) : paddingOuter;\n };\n\n scale.align = function(_) {\n return arguments.length ? (align = Math.max(0, Math.min(1, _)), rescale()) : align;\n };\n\n scale.copy = function() {\n return band()\n .domain(domain())\n .range(range)\n .round(round)\n .paddingInner(paddingInner)\n .paddingOuter(paddingOuter)\n .align(align);\n };\n\n scale.invertExtent = function(r0, r1) {\n var lo = +r0,\n hi = arguments.length > 1 ? +r1 : lo,\n reverse = range[1] < range[0],\n values = reverse ? ordinalRange().reverse() : ordinalRange(),\n n = values.length - 1, a, b, t,\n hiIndex;\n values.push(values[n] + this.step());\n // order range inputs, bail if outside of scale range\n if (hi < lo) t = lo, lo = hi, hi = t;\n if (hi < values[0] || lo > range[1-reverse]) return undefined;\n\n // binary search to index into scale range\n a = Math.max(0, getClosestIndexOf(values, lo));\n hiIndex = getClosestIndexOf(values, hi);\n b = lo===hi ? a : Math.max(a, hiIndex - 1);\n\n // increment index a if lo is within padding gap\n // if (lo - values[a] > bandwidth + 1e-10) ++a;\n\n if (reverse) t = a, a = n - b, b = n - t; // map + swap\n return (a > b) ? undefined : domain().slice(a, b+1);\n };\n\n scale.invert = function (r0, r1) {\n var lo = +r0,\n hi = arguments.length > 1 ? +r1 : lo,\n reverse = range[1] < range[0],\n values = reverse ? ordinalRange().reverse() : ordinalRange(),\n n = values.length - 1,\n a,\n t;\n\n // order range inputs, bail if outside of scale range\n if (hi < lo) t = lo, lo = hi, hi = t;\n if (hi < values[0] || lo > range[1-reverse]) return undefined;\n\n // binary search to index into scale range\n a = Math.max(0, getClosestIndexOf(values, lo, 'left'));\n\n // increment index a if lo is within padding gap\n // if (lo - values[a] > bandwidth + 1e-10) ++a;\n\n return domain()[reverse ? n - a : a];\n }\n return rescale();\n}\n\nfunction pointish(scale) {\n var copy = scale.copy;\n\n scale.padding = scale.paddingOuter;\n delete scale.paddingInner;\n delete scale.paddingOuter;\n\n scale.copy = function() {\n return pointish(copy());\n };\n\n return scale;\n}\n\nexport function point() {\n return pointish(band().paddingInner(1));\n}\n\nfunction getClosestIndexOf (arr, value, side) {\n var low = 0,\n arrLen = arr.length,\n high = arrLen - 1,\n highVal,\n mid,\n d1,\n d2;\n\n while (low < high) {\n mid = Math.floor((low + high) / 2);\n d1 = Math.abs(arr[mid] - value);\n d2 = Math.abs(arr[mid + 1] - value);\n\n if (d2 <= d1) {\n low = mid + 1;\n }\n else {\n high = mid;\n }\n }\n\n if (!side) {\n return high;\n }\n\n highVal = arr[high];\n if (highVal === value) {\n return high;\n } else if (highVal > value) {\n if (high === 0) { return high; }\n return side === 'left'? high - 1 : high;\n } else {\n if (high === arr.length - 1) { return high; }\n return side === 'left'? high : high + 1;\n }\n}","export default function(constructor, factory, prototype) {\n constructor.prototype = factory.prototype = prototype;\n prototype.constructor = constructor;\n}\n\nexport function extend(parent, definition) {\n var prototype = Object.create(parent.prototype);\n for (var key in definition) prototype[key] = definition[key];\n return prototype;\n}\n","import define, {extend} from \"./define\";\n\nexport function Color() {}\n\nexport var darker = 0.7;\nexport var brighter = 1 / darker;\n\nvar reI = \"\\\\s*([+-]?\\\\d+)\\\\s*\",\n reN = \"\\\\s*([+-]?\\\\d*\\\\.?\\\\d+(?:[eE][+-]?\\\\d+)?)\\\\s*\",\n reP = \"\\\\s*([+-]?\\\\d*\\\\.?\\\\d+(?:[eE][+-]?\\\\d+)?)%\\\\s*\",\n reHex3 = /^#([0-9a-f]{3})$/,\n reHex6 = /^#([0-9a-f]{6})$/,\n reRgbInteger = new RegExp(\"^rgb\\\\(\" + [reI, reI, reI] + \"\\\\)$\"),\n reRgbPercent = new RegExp(\"^rgb\\\\(\" + [reP, reP, reP] + \"\\\\)$\"),\n reRgbaInteger = new RegExp(\"^rgba\\\\(\" + [reI, reI, reI, reN] + \"\\\\)$\"),\n reRgbaPercent = new RegExp(\"^rgba\\\\(\" + [reP, reP, reP, reN] + \"\\\\)$\"),\n reHslPercent = new RegExp(\"^hsl\\\\(\" + [reN, reP, reP] + \"\\\\)$\"),\n reHslaPercent = new RegExp(\"^hsla\\\\(\" + [reN, reP, reP, reN] + \"\\\\)$\");\n\nvar 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\ndefine(Color, color, {\n displayable: function() {\n return this.rgb().displayable();\n },\n hex: function() {\n return this.rgb().hex();\n },\n toString: function() {\n return this.rgb() + \"\";\n }\n});\n\nexport default function color(format) {\n var m;\n format = (format + \"\").trim().toLowerCase();\n return (m = reHex3.exec(format)) ? (m = parseInt(m[1], 16), new Rgb((m >> 8 & 0xf) | (m >> 4 & 0x0f0), (m >> 4 & 0xf) | (m & 0xf0), ((m & 0xf) << 4) | (m & 0xf), 1)) // #f00\n : (m = reHex6.exec(format)) ? rgbn(parseInt(m[1], 16)) // #ff0000\n : (m = reRgbInteger.exec(format)) ? new Rgb(m[1], m[2], m[3], 1) // rgb(255, 0, 0)\n : (m = reRgbPercent.exec(format)) ? new Rgb(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, 1) // rgb(100%, 0%, 0%)\n : (m = reRgbaInteger.exec(format)) ? rgba(m[1], m[2], m[3], m[4]) // rgba(255, 0, 0, 1)\n : (m = reRgbaPercent.exec(format)) ? rgba(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, m[4]) // rgb(100%, 0%, 0%, 1)\n : (m = reHslPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, 1) // hsl(120, 50%, 50%)\n : (m = reHslaPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, m[4]) // hsla(120, 50%, 50%, 1)\n : named.hasOwnProperty(format) ? rgbn(named[format])\n : format === \"transparent\" ? new Rgb(NaN, NaN, NaN, 0)\n : null;\n}\n\nfunction rgbn(n) {\n return new Rgb(n >> 16 & 0xff, n >> 8 & 0xff, n & 0xff, 1);\n}\n\nfunction rgba(r, g, b, a) {\n if (a <= 0) r = g = b = NaN;\n return new Rgb(r, g, b, a);\n}\n\nexport function rgbConvert(o) {\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Rgb;\n o = o.rgb();\n return new Rgb(o.r, o.g, o.b, o.opacity);\n}\n\nexport function rgb(r, g, b, opacity) {\n return arguments.length === 1 ? rgbConvert(r) : new Rgb(r, g, b, opacity == null ? 1 : opacity);\n}\n\nexport function Rgb(r, g, b, opacity) {\n this.r = +r;\n this.g = +g;\n this.b = +b;\n this.opacity = +opacity;\n}\n\ndefine(Rgb, rgb, extend(Color, {\n 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, this.opacity);\n },\n 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, this.opacity);\n },\n rgb: function() {\n return this;\n },\n 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 && (0 <= this.opacity && this.opacity <= 1);\n },\n hex: function() {\n return \"#\" + hex(this.r) + hex(this.g) + hex(this.b);\n },\n toString: function() {\n var a = this.opacity; a = isNaN(a) ? 1 : Math.max(0, Math.min(1, a));\n return (a === 1 ? \"rgb(\" : \"rgba(\")\n + Math.max(0, Math.min(255, Math.round(this.r) || 0)) + \", \"\n + Math.max(0, Math.min(255, Math.round(this.g) || 0)) + \", \"\n + Math.max(0, Math.min(255, Math.round(this.b) || 0))\n + (a === 1 ? \")\" : \", \" + a + \")\");\n }\n}));\n\nfunction hex(value) {\n value = Math.max(0, Math.min(255, Math.round(value) || 0));\n return (value < 16 ? \"0\" : \"\") + value.toString(16);\n}\n\nfunction hsla(h, s, l, a) {\n if (a <= 0) h = s = l = NaN;\n else if (l <= 0 || l >= 1) h = s = NaN;\n else if (s <= 0) h = NaN;\n return new Hsl(h, s, l, a);\n}\n\nexport function hslConvert(o) {\n if (o instanceof Hsl) return new Hsl(o.h, o.s, o.l, o.opacity);\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Hsl;\n if (o instanceof Hsl) return o;\n o = o.rgb();\n var r = o.r / 255,\n g = o.g / 255,\n b = o.b / 255,\n min = Math.min(r, g, b),\n max = Math.max(r, g, b),\n h = NaN,\n s = max - min,\n l = (max + min) / 2;\n if (s) {\n if (r === max) h = (g - b) / s + (g < b) * 6;\n else if (g === max) h = (b - r) / s + 2;\n else h = (r - g) / s + 4;\n s /= l < 0.5 ? max + min : 2 - max - min;\n h *= 60;\n } else {\n s = l > 0 && l < 1 ? 0 : h;\n }\n return new Hsl(h, s, l, o.opacity);\n}\n\nexport function hsl(h, s, l, opacity) {\n return arguments.length === 1 ? hslConvert(h) : new Hsl(h, s, l, opacity == null ? 1 : opacity);\n}\n\nfunction Hsl(h, s, l, opacity) {\n this.h = +h;\n this.s = +s;\n this.l = +l;\n this.opacity = +opacity;\n}\n\ndefine(Hsl, hsl, extend(Color, {\n brighter: function(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n darker: function(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n 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 < 0.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 this.opacity\n );\n },\n displayable: function() {\n return (0 <= this.s && this.s <= 1 || isNaN(this.s))\n && (0 <= this.l && this.l <= 1)\n && (0 <= this.opacity && this.opacity <= 1);\n }\n}));\n\n/* From FvD 13.37, CSS Color Module Level 3 */\nfunction 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","export var deg2rad = Math.PI / 180;\nexport var rad2deg = 180 / Math.PI;\n","import define, {extend} from \"./define\";\nimport {Color, rgbConvert, Rgb} from \"./color\";\nimport {deg2rad, rad2deg} from \"./math\";\n\n// https://beta.observablehq.com/@mbostock/lab-and-rgb\nvar K = 18,\n Xn = 0.96422,\n Yn = 1,\n Zn = 0.82521,\n t0 = 4 / 29,\n t1 = 6 / 29,\n t2 = 3 * t1 * t1,\n t3 = t1 * t1 * t1;\n\nfunction labConvert(o) {\n if (o instanceof Lab) return new Lab(o.l, o.a, o.b, o.opacity);\n if (o instanceof Hcl) {\n if (isNaN(o.h)) return new Lab(o.l, 0, 0, o.opacity);\n var h = o.h * deg2rad;\n return new Lab(o.l, Math.cos(h) * o.c, Math.sin(h) * o.c, o.opacity);\n }\n if (!(o instanceof Rgb)) o = rgbConvert(o);\n var r = rgb2lrgb(o.r),\n g = rgb2lrgb(o.g),\n b = rgb2lrgb(o.b),\n y = xyz2lab((0.2225045 * r + 0.7168786 * g + 0.0606169 * b) / Yn), x, z;\n if (r === g && g === b) x = z = y; else {\n x = xyz2lab((0.4360747 * r + 0.3850649 * g + 0.1430804 * b) / Xn);\n z = xyz2lab((0.0139322 * r + 0.0971045 * g + 0.7141733 * b) / Zn);\n }\n return new Lab(116 * y - 16, 500 * (x - y), 200 * (y - z), o.opacity);\n}\n\nexport function gray(l, opacity) {\n return new Lab(l, 0, 0, opacity == null ? 1 : opacity);\n}\n\nexport default function lab(l, a, b, opacity) {\n return arguments.length === 1 ? labConvert(l) : new Lab(l, a, b, opacity == null ? 1 : opacity);\n}\n\nexport function Lab(l, a, b, opacity) {\n this.l = +l;\n this.a = +a;\n this.b = +b;\n this.opacity = +opacity;\n}\n\ndefine(Lab, lab, extend(Color, {\n brighter: function(k) {\n return new Lab(this.l + K * (k == null ? 1 : k), this.a, this.b, this.opacity);\n },\n darker: function(k) {\n return new Lab(this.l - K * (k == null ? 1 : k), this.a, this.b, this.opacity);\n },\n 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 x = Xn * lab2xyz(x);\n y = Yn * lab2xyz(y);\n z = Zn * lab2xyz(z);\n return new Rgb(\n lrgb2rgb( 3.1338561 * x - 1.6168667 * y - 0.4906146 * z),\n lrgb2rgb(-0.9787684 * x + 1.9161415 * y + 0.0334540 * z),\n lrgb2rgb( 0.0719453 * x - 0.2289914 * y + 1.4052427 * z),\n this.opacity\n );\n }\n}));\n\nfunction xyz2lab(t) {\n return t > t3 ? Math.pow(t, 1 / 3) : t / t2 + t0;\n}\n\nfunction lab2xyz(t) {\n return t > t1 ? t * t * t : t2 * (t - t0);\n}\n\nfunction lrgb2rgb(x) {\n return 255 * (x <= 0.0031308 ? 12.92 * x : 1.055 * Math.pow(x, 1 / 2.4) - 0.055);\n}\n\nfunction rgb2lrgb(x) {\n return (x /= 255) <= 0.04045 ? x / 12.92 : Math.pow((x + 0.055) / 1.055, 2.4);\n}\n\nfunction hclConvert(o) {\n if (o instanceof Hcl) return new Hcl(o.h, o.c, o.l, o.opacity);\n if (!(o instanceof Lab)) o = labConvert(o);\n if (o.a === 0 && o.b === 0) return new Hcl(NaN, 0, o.l, o.opacity);\n var h = Math.atan2(o.b, o.a) * rad2deg;\n return new Hcl(h < 0 ? h + 360 : h, Math.sqrt(o.a * o.a + o.b * o.b), o.l, o.opacity);\n}\n\nexport function lch(l, c, h, opacity) {\n return arguments.length === 1 ? hclConvert(l) : new Hcl(h, c, l, opacity == null ? 1 : opacity);\n}\n\nexport function hcl(h, c, l, opacity) {\n return arguments.length === 1 ? hclConvert(h) : new Hcl(h, c, l, opacity == null ? 1 : opacity);\n}\n\nexport function Hcl(h, c, l, opacity) {\n this.h = +h;\n this.c = +c;\n this.l = +l;\n this.opacity = +opacity;\n}\n\ndefine(Hcl, hcl, extend(Color, {\n brighter: function(k) {\n return new Hcl(this.h, this.c, this.l + K * (k == null ? 1 : k), this.opacity);\n },\n darker: function(k) {\n return new Hcl(this.h, this.c, this.l - K * (k == null ? 1 : k), this.opacity);\n },\n rgb: function() {\n return labConvert(this).rgb();\n }\n}));\n","import define, {extend} from \"./define\";\nimport {Color, rgbConvert, Rgb, darker, brighter} from \"./color\";\nimport {deg2rad, rad2deg} from \"./math\";\n\nvar A = -0.14861,\n B = +1.78277,\n C = -0.29227,\n D = -0.90649,\n E = +1.97294,\n ED = E * D,\n EB = E * B,\n BC_DA = B * C - D * A;\n\nfunction cubehelixConvert(o) {\n if (o instanceof Cubehelix) return new Cubehelix(o.h, o.s, o.l, o.opacity);\n if (!(o instanceof Rgb)) o = rgbConvert(o);\n var r = o.r / 255,\n g = o.g / 255,\n b = o.b / 255,\n l = (BC_DA * b + ED * r - EB * g) / (BC_DA + ED - EB),\n bl = b - l,\n 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 return new Cubehelix(h < 0 ? h + 360 : h, s, l, o.opacity);\n}\n\nexport default function cubehelix(h, s, l, opacity) {\n return arguments.length === 1 ? cubehelixConvert(h) : new Cubehelix(h, s, l, opacity == null ? 1 : opacity);\n}\n\nexport function Cubehelix(h, s, l, opacity) {\n this.h = +h;\n this.s = +s;\n this.l = +l;\n this.opacity = +opacity;\n}\n\ndefine(Cubehelix, cubehelix, extend(Color, {\n brighter: function(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Cubehelix(this.h, this.s, this.l * k, this.opacity);\n },\n darker: function(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Cubehelix(this.h, this.s, this.l * k, this.opacity);\n },\n 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 this.opacity\n );\n }\n}));\n","export function basis(t1, v0, v1, v2, v3) {\n var t2 = t1 * t1, t3 = t2 * t1;\n return ((1 - 3 * t1 + 3 * t2 - t3) * v0\n + (4 - 6 * t2 + 3 * t3) * v1\n + (1 + 3 * t1 + 3 * t2 - 3 * t3) * v2\n + t3 * v3) / 6;\n}\n\nexport default function(values) {\n var n = values.length - 1;\n return function(t) {\n var i = t <= 0 ? (t = 0) : t >= 1 ? (t = 1, n - 1) : Math.floor(t * n),\n v1 = values[i],\n v2 = values[i + 1],\n v0 = i > 0 ? values[i - 1] : 2 * v1 - v2,\n v3 = i < n - 1 ? values[i + 2] : 2 * v2 - v1;\n return basis((t - i / n) * n, v0, v1, v2, v3);\n };\n}\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","import constant from \"./constant\";\n\nfunction linear(a, d) {\n return function(t) {\n return a + t * d;\n };\n}\n\nfunction exponential(a, b, y) {\n return a = Math.pow(a, y), b = Math.pow(b, y) - a, y = 1 / y, function(t) {\n return Math.pow(a + t * b, y);\n };\n}\n\nexport function hue(a, b) {\n var d = b - a;\n return d ? linear(a, d > 180 || d < -180 ? d - 360 * Math.round(d / 360) : d) : constant(isNaN(a) ? b : a);\n}\n\nexport function gamma(y) {\n return (y = +y) === 1 ? nogamma : function(a, b) {\n return b - a ? exponential(a, b, y) : constant(isNaN(a) ? b : a);\n };\n}\n\nexport default function nogamma(a, b) {\n var d = b - a;\n return d ? linear(a, d) : constant(isNaN(a) ? b : a);\n}\n","import {rgb as colorRgb} from \"d3-color\";\nimport basis from \"./basis\";\nimport basisClosed from \"./basisClosed\";\nimport nogamma, {gamma} from \"./color\";\n\nexport default (function rgbGamma(y) {\n var color = gamma(y);\n\n function rgb(start, end) {\n var r = color((start = colorRgb(start)).r, (end = colorRgb(end)).r),\n g = color(start.g, end.g),\n b = color(start.b, end.b),\n opacity = nogamma(start.opacity, end.opacity);\n return function(t) {\n start.r = r(t);\n start.g = g(t);\n start.b = b(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n\n rgb.gamma = rgbGamma;\n\n return rgb;\n})(1);\n\nfunction rgbSpline(spline) {\n return function(colors) {\n var n = colors.length,\n r = new Array(n),\n g = new Array(n),\n b = new Array(n),\n i, color;\n for (i = 0; i < n; ++i) {\n color = colorRgb(colors[i]);\n r[i] = color.r || 0;\n g[i] = color.g || 0;\n b[i] = color.b || 0;\n }\n r = spline(r);\n g = spline(g);\n b = spline(b);\n color.opacity = 1;\n return function(t) {\n color.r = r(t);\n color.g = g(t);\n color.b = b(t);\n return color + \"\";\n };\n };\n}\n\nexport var rgbBasis = rgbSpline(basis);\nexport var rgbBasisClosed = rgbSpline(basisClosed);\n","export default function(a, b) {\n return a = +a, b -= a, function(t) {\n return a + b * t;\n };\n}\n","import {basis} from \"./basis\";\n\nexport default function(values) {\n var n = values.length;\n return function(t) {\n var i = Math.floor(((t %= 1) < 0 ? ++t : t) * n),\n v0 = values[(i + n - 1) % n],\n v1 = values[i % n],\n v2 = values[(i + 1) % n],\n v3 = values[(i + 2) % n];\n return basis((t - i / n) * n, v0, v1, v2, v3);\n };\n}\n","import number from \"./number\";\n\nvar reA = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n reB = new RegExp(reA.source, \"g\");\n\nfunction zero(b) {\n return function() {\n return b;\n };\n}\n\nfunction one(b) {\n return function(t) {\n return b(t) + \"\";\n };\n}\n\nexport default function(a, b) {\n var bi = reA.lastIndex = reB.lastIndex = 0, // scan index for next number in b\n am, // current match in a\n bm, // current match in b\n bs, // string preceding current number in b, if any\n i = -1, // index in s\n s = [], // string constants and placeholders\n q = []; // number interpolators\n\n // Coerce inputs to strings.\n a = a + \"\", b = b + \"\";\n\n // Interpolate pairs of numbers in a & b.\n while ((am = reA.exec(a))\n && (bm = reB.exec(b))) {\n if ((bs = bm.index) > bi) { // a string precedes the next number in b\n bs = b.slice(bi, bs);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n if ((am = am[0]) === (bm = bm[0])) { // numbers in a & b match\n if (s[i]) s[i] += bm; // coalesce with previous string\n else s[++i] = bm;\n } else { // interpolate non-matching numbers\n s[++i] = null;\n q.push({i: i, x: number(am, bm)});\n }\n bi = reB.lastIndex;\n }\n\n // Add remains of b.\n if (bi < b.length) {\n bs = b.slice(bi);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n\n // Special optimization for only a single match.\n // Otherwise, interpolate each of the numbers and rejoin the string.\n return s.length < 2 ? (q[0]\n ? one(q[0].x)\n : zero(b))\n : (b = q.length, function(t) {\n for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t);\n return s.join(\"\");\n });\n}\n","import decompose, {identity} from \"./decompose\";\n\nvar cssNode,\n cssRoot,\n cssView,\n svgNode;\n\nexport function parseCss(value) {\n if (value === \"none\") return identity;\n if (!cssNode) cssNode = document.createElement(\"DIV\"), cssRoot = document.documentElement, cssView = document.defaultView;\n cssNode.style.transform = value;\n value = cssView.getComputedStyle(cssRoot.appendChild(cssNode), null).getPropertyValue(\"transform\");\n cssRoot.removeChild(cssNode);\n value = value.slice(7, -1).split(\",\");\n return decompose(+value[0], +value[1], +value[2], +value[3], +value[4], +value[5]);\n}\n\nexport function parseSvg(value) {\n if (value == null) return identity;\n if (!svgNode) svgNode = document.createElementNS(\"http://www.w3.org/2000/svg\", \"g\");\n svgNode.setAttribute(\"transform\", value);\n if (!(value = svgNode.transform.baseVal.consolidate())) return identity;\n value = value.matrix;\n return decompose(value.a, value.b, value.c, value.d, value.e, value.f);\n}\n","import {color} from \"d3-color\";\nimport rgb from \"./rgb\";\nimport array from \"./array\";\nimport date from \"./date\";\nimport number from \"./number\";\nimport object from \"./object\";\nimport string from \"./string\";\nimport constant from \"./constant\";\n\nexport default function(a, b) {\n var t = typeof b, c;\n return b == null || t === \"boolean\" ? constant(b)\n : (t === \"number\" ? number\n : t === \"string\" ? ((c = color(b)) ? (b = c, rgb) : string)\n : b instanceof color ? rgb\n : b instanceof Date ? date\n : Array.isArray(b) ? array\n : typeof b.valueOf !== \"function\" && typeof b.toString !== \"function\" || isNaN(b) ? object\n : number)(a, b);\n}\n","export default function(a, b) {\n var d = new Date;\n return a = +a, b -= a, function(t) {\n return d.setTime(a + b * t), d;\n };\n}\n","import value from \"./value\";\n\nexport default function(a, b) {\n var nb = b ? b.length : 0,\n na = a ? Math.min(nb, a.length) : 0,\n x = new Array(na),\n c = new Array(nb),\n i;\n\n for (i = 0; i < na; ++i) x[i] = value(a[i], b[i]);\n for (; i < nb; ++i) c[i] = b[i];\n\n return function(t) {\n for (i = 0; i < na; ++i) c[i] = x[i](t);\n return c;\n };\n}\n","import value from \"./value\";\n\nexport default function(a, b) {\n var i = {},\n c = {},\n k;\n\n if (a === null || typeof a !== \"object\") a = {};\n if (b === null || typeof b !== \"object\") b = {};\n\n for (k in b) {\n if (k in a) {\n i[k] = value(a[k], b[k]);\n } else {\n c[k] = b[k];\n }\n }\n\n return function(t) {\n for (k in i) c[k] = i[k](t);\n return c;\n };\n}\n","export default function(a, b) {\n return a = +a, b -= a, function(t) {\n return Math.round(a + b * t);\n };\n}\n","var degrees = 180 / Math.PI;\n\nexport var identity = {\n translateX: 0,\n translateY: 0,\n rotate: 0,\n skewX: 0,\n scaleX: 1,\n scaleY: 1\n};\n\nexport default function(a, b, c, d, e, f) {\n var scaleX, scaleY, skewX;\n if (scaleX = Math.sqrt(a * a + b * b)) a /= scaleX, b /= scaleX;\n if (skewX = a * c + b * d) c -= a * skewX, d -= b * skewX;\n if (scaleY = Math.sqrt(c * c + d * d)) c /= scaleY, d /= scaleY, skewX /= scaleY;\n if (a * d < b * c) a = -a, b = -b, skewX = -skewX, scaleX = -scaleX;\n return {\n translateX: e,\n translateY: f,\n rotate: Math.atan2(b, a) * degrees,\n skewX: Math.atan(skewX) * degrees,\n scaleX: scaleX,\n scaleY: scaleY\n };\n}\n","import number from \"../number\";\nimport {parseCss, parseSvg} from \"./parse\";\n\nfunction interpolateTransform(parse, pxComma, pxParen, degParen) {\n\n function pop(s) {\n return s.length ? s.pop() + \" \" : \"\";\n }\n\n function translate(xa, ya, xb, yb, s, q) {\n if (xa !== xb || ya !== yb) {\n var i = s.push(\"translate(\", null, pxComma, null, pxParen);\n q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\n } else if (xb || yb) {\n s.push(\"translate(\" + xb + pxComma + yb + pxParen);\n }\n }\n\n function rotate(a, b, s, q) {\n if (a !== b) {\n if (a - b > 180) b += 360; else if (b - a > 180) a += 360; // shortest path\n q.push({i: s.push(pop(s) + \"rotate(\", null, degParen) - 2, x: number(a, b)});\n } else if (b) {\n s.push(pop(s) + \"rotate(\" + b + degParen);\n }\n }\n\n function skewX(a, b, s, q) {\n if (a !== b) {\n q.push({i: s.push(pop(s) + \"skewX(\", null, degParen) - 2, x: number(a, b)});\n } else if (b) {\n s.push(pop(s) + \"skewX(\" + b + degParen);\n }\n }\n\n function scale(xa, ya, xb, yb, s, q) {\n if (xa !== xb || ya !== yb) {\n var i = s.push(pop(s) + \"scale(\", null, \",\", null, \")\");\n q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\n } else if (xb !== 1 || yb !== 1) {\n s.push(pop(s) + \"scale(\" + xb + \",\" + yb + \")\");\n }\n }\n\n return function(a, b) {\n var s = [], // string constants and placeholders\n q = []; // number interpolators\n a = parse(a), b = parse(b);\n translate(a.translateX, a.translateY, b.translateX, b.translateY, s, q);\n rotate(a.rotate, b.rotate, s, q);\n skewX(a.skewX, b.skewX, s, q);\n scale(a.scaleX, a.scaleY, b.scaleX, b.scaleY, s, q);\n a = b = null; // gc\n return function(t) {\n var i = -1, n = q.length, o;\n while (++i < n) s[(o = q[i]).i] = o.x(t);\n return s.join(\"\");\n };\n };\n}\n\nexport var interpolateTransformCss = interpolateTransform(parseCss, \"px, \", \"px)\", \"deg)\");\nexport var interpolateTransformSvg = interpolateTransform(parseSvg, \", \", \")\", \")\");\n","var rho = Math.SQRT2,\n rho2 = 2,\n rho4 = 4,\n epsilon2 = 1e-12;\n\nfunction cosh(x) {\n return ((x = Math.exp(x)) + 1 / x) / 2;\n}\n\nfunction sinh(x) {\n return ((x = Math.exp(x)) - 1 / x) / 2;\n}\n\nfunction tanh(x) {\n return ((x = Math.exp(2 * x)) - 1) / (x + 1);\n}\n\n// p0 = [ux0, uy0, w0]\n// p1 = [ux1, uy1, w1]\nexport default function(p0, p1) {\n var ux0 = p0[0], uy0 = p0[1], w0 = p0[2],\n ux1 = p1[0], uy1 = p1[1], w1 = p1[2],\n dx = ux1 - ux0,\n dy = uy1 - uy0,\n d2 = dx * dx + dy * dy,\n i,\n S;\n\n // Special case for u0 ≅ u1.\n if (d2 < epsilon2) {\n S = Math.log(w1 / w0) / rho;\n i = function(t) {\n return [\n ux0 + t * dx,\n uy0 + t * dy,\n w0 * Math.exp(rho * t * S)\n ];\n }\n }\n\n // General case.\n else {\n var d1 = Math.sqrt(d2),\n b0 = (w1 * w1 - w0 * w0 + rho4 * d2) / (2 * w0 * rho2 * d1),\n b1 = (w1 * w1 - w0 * w0 - rho4 * d2) / (2 * w1 * rho2 * d1),\n r0 = Math.log(Math.sqrt(b0 * b0 + 1) - b0),\n r1 = Math.log(Math.sqrt(b1 * b1 + 1) - b1);\n S = (r1 - r0) / rho;\n i = function(t) {\n var s = t * S,\n coshr0 = cosh(r0),\n u = w0 / (rho2 * d1) * (coshr0 * tanh(rho * s + r0) - sinh(r0));\n return [\n ux0 + u * dx,\n uy0 + u * dy,\n w0 * coshr0 / cosh(rho * s + r0)\n ];\n }\n }\n\n i.duration = S * 1000;\n\n return i;\n}\n","import {hsl as colorHsl} from \"d3-color\";\nimport color, {hue} from \"./color\";\n\nfunction hsl(hue) {\n return function(start, end) {\n var h = hue((start = colorHsl(start)).h, (end = colorHsl(end)).h),\n s = color(start.s, end.s),\n l = color(start.l, end.l),\n opacity = color(start.opacity, end.opacity);\n return function(t) {\n start.h = h(t);\n start.s = s(t);\n start.l = l(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n}\n\nexport default hsl(hue);\nexport var hslLong = hsl(color);\n","import {hcl as colorHcl} from \"d3-color\";\nimport color, {hue} from \"./color\";\n\nfunction hcl(hue) {\n return function(start, end) {\n var h = hue((start = colorHcl(start)).h, (end = colorHcl(end)).h),\n c = color(start.c, end.c),\n l = color(start.l, end.l),\n opacity = color(start.opacity, end.opacity);\n return function(t) {\n start.h = h(t);\n start.c = c(t);\n start.l = l(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n}\n\nexport default hcl(hue);\nexport var hclLong = hcl(color);\n","import {cubehelix as colorCubehelix} from \"d3-color\";\nimport color, {hue} from \"./color\";\n\nfunction cubehelix(hue) {\n return (function cubehelixGamma(y) {\n y = +y;\n\n function cubehelix(start, end) {\n var h = hue((start = colorCubehelix(start)).h, (end = colorCubehelix(end)).h),\n s = color(start.s, end.s),\n l = color(start.l, end.l),\n opacity = color(start.opacity, end.opacity);\n return function(t) {\n start.h = h(t);\n start.s = s(t);\n start.l = l(Math.pow(t, y));\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n\n cubehelix.gamma = cubehelixGamma;\n\n return cubehelix;\n })(1);\n}\n\nexport default cubehelix(hue);\nexport var cubehelixLong = cubehelix(color);\n","export default function piecewise(interpolate, values) {\n var i = 0, n = values.length - 1, v = values[0], I = new Array(n < 0 ? 0 : n);\n while (i < n) I[i] = interpolate(v, v = values[++i]);\n return function(t) {\n var i = Math.max(0, Math.min(n - 1, Math.floor(t *= n)));\n return I[i](t - i);\n };\n}\n","export default function(interpolator, n) {\n var samples = new Array(n);\n for (var i = 0; i < n; ++i) samples[i] = interpolator(i / (n - 1));\n return samples;\n}\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","export default function(x) {\n return +x;\n}\n","import {bisect} from \"d3-array\";\nimport {interpolate as interpolateValue, interpolateRound} from \"d3-interpolate\";\nimport {map, slice} from \"./array\";\nimport constant from \"./constant\";\nimport number from \"./number\";\n\nvar unit = [0, 1];\n\nexport function deinterpolateLinear(a, b) {\n return (b -= (a = +a))\n ? function(x) { return (x - a) / b; }\n : constant(b);\n}\n\nfunction deinterpolateClamp(deinterpolate) {\n return function(a, b) {\n var d = deinterpolate(a = +a, b = +b);\n return function(x) { return x <= a ? 0 : x >= b ? 1 : d(x); };\n };\n}\n\nfunction reinterpolateClamp(reinterpolate) {\n return function(a, b) {\n var r = reinterpolate(a = +a, b = +b);\n return function(t) { return t <= 0 ? a : t >= 1 ? b : r(t); };\n };\n}\n\nfunction bimap(domain, range, deinterpolate, reinterpolate) {\n var d0 = domain[0], d1 = domain[1], r0 = range[0], r1 = range[1];\n if (d1 < d0) d0 = deinterpolate(d1, d0), r0 = reinterpolate(r1, r0);\n else d0 = deinterpolate(d0, d1), r0 = reinterpolate(r0, r1);\n return function(x) { return r0(d0(x)); };\n}\n\nfunction polymap(domain, range, deinterpolate, reinterpolate) {\n var j = Math.min(domain.length, range.length) - 1,\n d = new Array(j),\n r = new Array(j),\n i = -1;\n\n // Reverse descending domains.\n if (domain[j] < domain[0]) {\n domain = domain.slice().reverse();\n range = range.slice().reverse();\n }\n\n while (++i < j) {\n d[i] = deinterpolate(domain[i], domain[i + 1]);\n r[i] = reinterpolate(range[i], range[i + 1]);\n }\n\n return function(x) {\n var i = bisect(domain, x, 1, j) - 1;\n return r[i](d[i](x));\n };\n}\n\nexport function copy(source, target) {\n return target\n .domain(source.domain())\n .range(source.range())\n .interpolate(source.interpolate())\n .clamp(source.clamp());\n}\n\n// deinterpolate(a, b)(x) takes a domain value x in [a,b] and returns the corresponding parameter t in [0,1].\n// reinterpolate(a, b)(t) takes a parameter t in [0,1] and returns the corresponding domain value x in [a,b].\nexport default function continuous(deinterpolate, reinterpolate) {\n var domain = unit,\n range = unit,\n interpolate = interpolateValue,\n clamp = false,\n piecewise,\n output,\n input;\n\n function rescale() {\n piecewise = Math.min(domain.length, range.length) > 2 ? polymap : bimap;\n output = input = null;\n return scale;\n }\n\n function scale(x) {\n return (output || (output = piecewise(domain, range, clamp ? deinterpolateClamp(deinterpolate) : deinterpolate, interpolate)))(+x);\n }\n\n scale.invert = function(y) {\n return (input || (input = piecewise(range, domain, deinterpolateLinear, clamp ? reinterpolateClamp(reinterpolate) : reinterpolate)))(+y);\n };\n\n scale.domain = function(_) {\n return arguments.length ? (domain = map.call(_, number), rescale()) : domain.slice();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = slice.call(_), rescale()) : range.slice();\n };\n\n scale.rangeRound = function(_) {\n return range = slice.call(_), interpolate = interpolateRound, rescale();\n };\n\n scale.clamp = function(_) {\n return arguments.length ? (clamp = !!_, rescale()) : clamp;\n };\n\n scale.interpolate = function(_) {\n return arguments.length ? (interpolate = _, rescale()) : interpolate;\n };\n\n return rescale();\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].\nexport default function(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","import formatDecimal from \"./formatDecimal\";\n\nexport default function(x) {\n return x = formatDecimal(Math.abs(x)), x ? x[1] : NaN;\n}\n","// [[fill]align][sign][symbol][0][width][,][.precision][~][type]\nvar re = /^(?:(.)?([<>=^]))?([+\\-( ])?([$#])?(0)?(\\d+)?(,)?(\\.\\d+)?(~)?([a-z%])?$/i;\n\nexport default function formatSpecifier(specifier) {\n return new FormatSpecifier(specifier);\n}\n\nformatSpecifier.prototype = FormatSpecifier.prototype; // instanceof\n\nfunction FormatSpecifier(specifier) {\n if (!(match = re.exec(specifier))) throw new Error(\"invalid format: \" + specifier);\n var match;\n this.fill = match[1] || \" \";\n this.align = match[2] || \">\";\n this.sign = match[3] || \"-\";\n this.symbol = match[4] || \"\";\n this.zero = !!match[5];\n this.width = match[6] && +match[6];\n this.comma = !!match[7];\n this.precision = match[8] && +match[8].slice(1);\n this.trim = !!match[9];\n this.type = match[10] || \"\";\n}\n\nFormatSpecifier.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.trim ? \"~\" : \"\")\n + this.type;\n};\n","// Trims insignificant zeros, e.g., replaces 1.2000k with 1.2k.\nexport default function(s) {\n out: for (var n = s.length, i = 1, i0 = -1, i1; i < n; ++i) {\n switch (s[i]) {\n case \".\": i0 = i1 = i; break;\n case \"0\": if (i0 === 0) i0 = i; i1 = i; break;\n default: if (i0 > 0) { if (!+s[i]) break out; i0 = 0; } break;\n }\n }\n return i0 > 0 ? s.slice(0, i0) + s.slice(i1 + 1) : s;\n}\n","import formatDecimal from \"./formatDecimal\";\n\nexport var prefixExponent;\n\nexport default function(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, Math.max(0, p + i - 1))[0]; // less than 1y!\n}\n","import formatLocale from \"./locale\";\n\nvar locale;\nexport var format;\nexport var formatPrefix;\n\ndefaultLocale({\n decimal: \".\",\n thousands: \",\",\n grouping: [3],\n currency: [\"$\", \"\"]\n});\n\nexport default function defaultLocale(definition) {\n locale = formatLocale(definition);\n format = locale.format;\n formatPrefix = locale.formatPrefix;\n return locale;\n}\n","import formatDecimal from \"./formatDecimal\";\n\nexport default function(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","import formatPrefixAuto from \"./formatPrefixAuto\";\nimport formatRounded from \"./formatRounded\";\n\nexport default {\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","export default function(x) {\n return x;\n}\n","import exponent from \"./exponent\";\nimport formatGroup from \"./formatGroup\";\nimport formatNumerals from \"./formatNumerals\";\nimport formatSpecifier from \"./formatSpecifier\";\nimport formatTrim from \"./formatTrim\";\nimport formatTypes from \"./formatTypes\";\nimport {prefixExponent} from \"./formatPrefixAuto\";\nimport identity from \"./identity\";\n\nvar prefixes = [\"y\",\"z\",\"a\",\"f\",\"p\",\"n\",\"µ\",\"m\",\"\",\"k\",\"M\",\"G\",\"T\",\"P\",\"E\",\"Z\",\"Y\"];\n\nexport default function(locale) {\n var group = locale.grouping && locale.thousands ? formatGroup(locale.grouping, locale.thousands) : identity,\n currency = locale.currency,\n decimal = locale.decimal,\n numerals = locale.numerals ? formatNumerals(locale.numerals) : identity,\n percent = locale.percent || \"%\";\n\n function newFormat(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 trim = specifier.trim,\n type = specifier.type;\n\n // The \"n\" type is an alias for \",g\".\n if (type === \"n\") comma = true, type = \"g\";\n\n // The \"\" type, and any invalid type, is an alias for \".12~g\".\n else if (!formatTypes[type]) precision == null && (precision = 12), trim = true, type = \"g\";\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 // 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) ? percent : \"\";\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 = /[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 ? 6\n : /[gprs]/.test(type) ? Math.max(1, Math.min(21, precision))\n : Math.max(0, Math.min(20, precision));\n\n function format(value) {\n var valuePrefix = prefix,\n valueSuffix = suffix,\n i, n, c;\n\n if (type === \"c\") {\n valueSuffix = formatType(value) + valueSuffix;\n value = \"\";\n } else {\n value = +value;\n\n // Perform the initial formatting.\n var valueNegative = value < 0;\n value = formatType(Math.abs(value), precision);\n\n // Trim insignificant zeros.\n if (trim) value = formatTrim(value);\n\n // If a negative value rounds to zero during formatting, treat as positive.\n if (valueNegative && +value === 0) valueNegative = false;\n\n // Compute the prefix and suffix.\n valuePrefix = (valueNegative ? (sign === \"(\" ? sign : \"-\") : sign === \"-\" || sign === \"(\" ? \"\" : sign) + valuePrefix;\n valueSuffix = (type === \"s\" ? prefixes[8 + prefixExponent / 3] : \"\") + valueSuffix + (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 i = -1, n = value.length;\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 \"<\": value = valuePrefix + value + valueSuffix + padding; break;\n case \"=\": value = valuePrefix + padding + value + valueSuffix; break;\n case \"^\": value = padding.slice(0, length = padding.length >> 1) + valuePrefix + value + valueSuffix + padding.slice(length); break;\n default: value = padding + valuePrefix + value + valueSuffix; break;\n }\n\n return numerals(value);\n }\n\n format.toString = function() {\n return specifier + \"\";\n };\n\n return format;\n }\n\n function formatPrefix(specifier, value) {\n var f = newFormat((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: newFormat,\n formatPrefix: formatPrefix\n };\n}\n","export default function(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","export default function(numerals) {\n return function(value) {\n return value.replace(/[0-9]/g, function(i) {\n return numerals[+i];\n });\n };\n}\n","import exponent from \"./exponent\";\n\nexport default function(step) {\n return Math.max(0, -exponent(Math.abs(step)));\n}\n","import {tickStep} from \"d3-array\";\nimport {format, formatPrefix, formatSpecifier, precisionFixed, precisionPrefix, precisionRound} from \"d3-format\";\n\nexport default function(domain, count, specifier) {\n var start = domain[0],\n stop = domain[domain.length - 1],\n step = tickStep(start, stop, count == null ? 10 : count),\n precision;\n specifier = formatSpecifier(specifier == null ? \",f\" : specifier);\n switch (specifier.type) {\n case \"s\": {\n var value = Math.max(Math.abs(start), Math.abs(stop));\n if (specifier.precision == null && !isNaN(precision = precisionPrefix(step, value))) specifier.precision = precision;\n return formatPrefix(specifier, value);\n }\n case \"\":\n case \"e\":\n case \"g\":\n case \"p\":\n case \"r\": {\n if (specifier.precision == null && !isNaN(precision = precisionRound(step, Math.max(Math.abs(start), Math.abs(stop))))) specifier.precision = precision - (specifier.type === \"e\");\n break;\n }\n case \"f\":\n case \"%\": {\n if (specifier.precision == null && !isNaN(precision = precisionFixed(step))) specifier.precision = precision - (specifier.type === \"%\") * 2;\n break;\n }\n }\n return format(specifier);\n}\n","import exponent from \"./exponent\";\n\nexport default function(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","import exponent from \"./exponent\";\n\nexport default function(step, max) {\n step = Math.abs(step), max = Math.abs(max) - step;\n return Math.max(0, exponent(max) - exponent(step)) + 1;\n}\n","import {ticks, tickIncrement} from \"d3-array\";\nimport {interpolateNumber as reinterpolate} from \"d3-interpolate\";\nimport {default as continuous, copy, deinterpolateLinear as deinterpolate} from \"./continuous\";\nimport tickFormat from \"./tickFormat\";\n\nexport function linearish(scale) {\n var domain = scale.domain;\n\n scale.ticks = function(count) {\n var d = domain();\n return ticks(d[0], d[d.length - 1], count == null ? 10 : count);\n };\n\n scale.tickFormat = function(count, specifier) {\n return tickFormat(domain(), count, specifier);\n };\n\n scale.nice = function(count) {\n if (count == null) count = 10;\n\n var d = domain(),\n i0 = 0,\n i1 = d.length - 1,\n start = d[i0],\n stop = d[i1],\n step;\n\n if (stop < start) {\n step = start, start = stop, stop = step;\n step = i0, i0 = i1, i1 = step;\n }\n\n step = tickIncrement(start, stop, count);\n\n if (step > 0) {\n start = Math.floor(start / step) * step;\n stop = Math.ceil(stop / step) * step;\n step = tickIncrement(start, stop, count);\n } else if (step < 0) {\n start = Math.ceil(start * step) / step;\n stop = Math.floor(stop * step) / step;\n step = tickIncrement(start, stop, count);\n }\n\n if (step > 0) {\n d[i0] = Math.floor(start / step) * step;\n d[i1] = Math.ceil(stop / step) * step;\n domain(d);\n } else if (step < 0) {\n d[i0] = Math.ceil(start * step) / step;\n d[i1] = Math.floor(stop * step) / step;\n domain(d);\n }\n\n return scale;\n };\n\n return scale;\n}\n\nexport default function linear() {\n var scale = continuous(deinterpolate, reinterpolate);\n\n scale.copy = function() {\n return copy(scale, linear());\n };\n\n return linearish(scale);\n}\n","import {map} from \"./array\";\nimport {linearish} from \"./linear\";\nimport number from \"./number\";\n\nexport default function identity() {\n var domain = [0, 1];\n\n function scale(x) {\n return +x;\n }\n\n scale.invert = scale;\n\n scale.domain = scale.range = function(_) {\n return arguments.length ? (domain = map.call(_, number), scale) : domain.slice();\n };\n\n scale.copy = function() {\n return identity().domain(domain);\n };\n\n return linearish(scale);\n}\n","export default function(domain, interval) {\n domain = domain.slice();\n\n var i0 = 0,\n i1 = domain.length - 1,\n x0 = domain[i0],\n x1 = domain[i1],\n t;\n\n if (x1 < x0) {\n t = i0, i0 = i1, i1 = t;\n t = x0, x0 = x1, x1 = t;\n }\n\n domain[i0] = interval.floor(x0);\n domain[i1] = interval.ceil(x1);\n return domain;\n}\n","import {ticks} from \"d3-array\";\nimport {format} from \"d3-format\";\nimport constant from \"./constant\";\nimport nice from \"./nice\";\nimport {default as continuous, copy} from \"./continuous\";\n\nfunction deinterpolate(a, b) {\n return (b = Math.log(b / a))\n ? function(x) { return Math.log(x / a) / b; }\n : constant(b);\n}\n\nfunction reinterpolate(a, b) {\n return a < 0\n ? function(t) { return -Math.pow(-b, t) * Math.pow(-a, 1 - t); }\n : function(t) { return Math.pow(b, t) * Math.pow(a, 1 - t); };\n}\n\nfunction pow10(x) {\n return isFinite(x) ? +(\"1e\" + x) : x < 0 ? 0 : x;\n}\n\nfunction powp(base) {\n return base === 10 ? pow10\n : base === Math.E ? Math.exp\n : function(x) { return Math.pow(base, x); };\n}\n\nfunction logp(base) {\n return base === Math.E ? Math.log\n : base === 10 && Math.log10\n || base === 2 && Math.log2\n || (base = Math.log(base), function(x) { return Math.log(x) / base; });\n}\n\nfunction reflect(f) {\n return function(x) {\n return -f(-x);\n };\n}\n\nexport default function log() {\n var scale = continuous(deinterpolate, reinterpolate).domain([1, 10]),\n domain = scale.domain,\n base = 10,\n logs = logp(10),\n pows = powp(10);\n\n function rescale() {\n logs = logp(base), pows = powp(base);\n if (domain()[0] < 0) logs = reflect(logs), pows = reflect(pows);\n return scale;\n }\n\n scale.base = function(_) {\n return arguments.length ? (base = +_, rescale()) : base;\n };\n\n scale.domain = function(_) {\n return arguments.length ? (domain(_), rescale()) : domain();\n };\n\n scale.ticks = function(count) {\n var d = domain(),\n u = d[0],\n v = d[d.length - 1],\n r;\n\n if (r = v < u) i = u, u = v, v = i;\n\n var i = logs(u),\n j = logs(v),\n p,\n k,\n t,\n n = count == null ? 10 : +count,\n z = [];\n\n if (!(base % 1) && j - i < n) {\n i = Math.round(i) - 1, j = Math.round(j) + 1;\n if (u > 0) for (; i < j; ++i) {\n for (k = 1, p = pows(i); k < base; ++k) {\n t = p * k;\n if (t < u) continue;\n if (t > v) break;\n z.push(t);\n }\n } else for (; i < j; ++i) {\n for (k = base - 1, p = pows(i); k >= 1; --k) {\n t = p * k;\n if (t < u) continue;\n if (t > v) break;\n z.push(t);\n }\n }\n } else {\n z = ticks(i, j, Math.min(j - i, n)).map(pows);\n }\n\n return r ? z.reverse() : z;\n };\n\n scale.tickFormat = function(count, specifier) {\n if (specifier == null) specifier = base === 10 ? \".0e\" : \",\";\n if (typeof specifier !== \"function\") specifier = format(specifier);\n if (count === Infinity) return specifier;\n if (count == null) count = 10;\n var k = Math.max(1, base * count / scale.ticks().length); // TODO fast estimate?\n return function(d) {\n var i = d / pows(Math.round(logs(d)));\n if (i * base < base - 0.5) i *= base;\n return i <= k ? specifier(d) : \"\";\n };\n };\n\n scale.nice = function() {\n return domain(nice(domain(), {\n floor: function(x) { return pows(Math.floor(logs(x))); },\n ceil: function(x) { return pows(Math.ceil(logs(x))); }\n }));\n };\n\n scale.copy = function() {\n return copy(scale, log().base(base));\n };\n\n return scale;\n}\n","import constant from \"./constant\";\nimport {linearish} from \"./linear\";\nimport {default as continuous, copy} from \"./continuous\";\n\nfunction raise(x, exponent) {\n return x < 0 ? -Math.pow(-x, exponent) : Math.pow(x, exponent);\n}\n\nexport default function pow() {\n var exponent = 1,\n scale = continuous(deinterpolate, reinterpolate),\n domain = scale.domain;\n\n function deinterpolate(a, b) {\n return (b = raise(b, exponent) - (a = raise(a, exponent)))\n ? function(x) { return (raise(x, exponent) - a) / b; }\n : constant(b);\n }\n\n function reinterpolate(a, b) {\n b = raise(b, exponent) - (a = raise(a, exponent));\n return function(t) { return raise(a + b * t, 1 / exponent); };\n }\n\n scale.exponent = function(_) {\n return arguments.length ? (exponent = +_, domain(domain())) : exponent;\n };\n\n scale.copy = function() {\n return copy(scale, pow().exponent(exponent));\n };\n\n return linearish(scale);\n}\n\nexport function sqrt() {\n return pow().exponent(0.5);\n}\n","import {ascending, bisect, quantile as threshold} from \"d3-array\";\nimport {slice} from \"./array\";\n\nexport default function quantile() {\n var domain = [],\n range = [],\n thresholds = [];\n\n function rescale() {\n var i = 0, n = Math.max(1, range.length);\n thresholds = new Array(n - 1);\n while (++i < n) thresholds[i - 1] = threshold(domain, i / n);\n return scale;\n }\n\n function scale(x) {\n if (!isNaN(x = +x)) return range[bisect(thresholds, x)];\n }\n\n scale.invertExtent = function(y) {\n var i = range.indexOf(y);\n return i < 0 ? [NaN, NaN] : [\n i > 0 ? thresholds[i - 1] : domain[0],\n i < thresholds.length ? thresholds[i] : domain[domain.length - 1]\n ];\n };\n\n scale.domain = function(_) {\n if (!arguments.length) return domain.slice();\n domain = [];\n for (var i = 0, n = _.length, d; i < n; ++i) if (d = _[i], d != null && !isNaN(d = +d)) domain.push(d);\n domain.sort(ascending);\n return rescale();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = slice.call(_), rescale()) : range.slice();\n };\n\n scale.quantiles = function() {\n return thresholds.slice();\n };\n\n scale.copy = function() {\n return quantile()\n .domain(domain)\n .range(range);\n };\n\n return scale;\n}\n","import {bisect} from \"d3-array\";\nimport {slice} from \"./array\";\nimport {linearish} from \"./linear\";\n\nexport default function quantize() {\n var x0 = 0,\n x1 = 1,\n n = 1,\n domain = [0.5],\n range = [0, 1];\n\n function scale(x) {\n if (x <= x) return range[bisect(domain, x, 0, n)];\n }\n\n function rescale() {\n var i = -1;\n domain = new Array(n);\n while (++i < n) domain[i] = ((i + 1) * x1 - (i - n) * x0) / (n + 1);\n return scale;\n }\n\n scale.domain = function(_) {\n return arguments.length ? (x0 = +_[0], x1 = +_[1], rescale()) : [x0, x1];\n };\n\n scale.range = function(_) {\n return arguments.length ? (n = (range = slice.call(_)).length - 1, rescale()) : range.slice();\n };\n\n scale.invertExtent = function(y) {\n var i = range.indexOf(y);\n return i < 0 ? [NaN, NaN]\n : i < 1 ? [x0, domain[0]]\n : i >= n ? [domain[n - 1], x1]\n : [domain[i - 1], domain[i]];\n };\n\n scale.copy = function() {\n return quantize()\n .domain([x0, x1])\n .range(range);\n };\n\n return linearish(scale);\n}\n","import {bisect} from \"d3-array\";\nimport {slice} from \"./array\";\n\nexport default function threshold() {\n var domain = [0.5],\n range = [0, 1],\n n = 1;\n\n function scale(x) {\n if (x <= x) return range[bisect(domain, x, 0, n)];\n }\n\n scale.domain = function(_) {\n return arguments.length ? (domain = slice.call(_), n = Math.min(domain.length, range.length - 1), scale) : domain.slice();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = slice.call(_), n = Math.min(domain.length, range.length - 1), scale) : range.slice();\n };\n\n scale.invertExtent = function(y) {\n var i = range.indexOf(y);\n return [domain[i - 1], domain[i]];\n };\n\n scale.copy = function() {\n return threshold()\n .domain(domain)\n .range(range);\n };\n\n return scale;\n}\n","var t0 = new Date,\n t1 = new Date;\n\nexport default function newInterval(floori, offseti, count, field) {\n\n function interval(date) {\n return floori(date = new Date(+date)), date;\n }\n\n interval.floor = interval;\n\n interval.ceil = function(date) {\n return floori(date = new Date(date - 1)), offseti(date, 1), floori(date), date;\n };\n\n interval.round = function(date) {\n var d0 = interval(date),\n d1 = interval.ceil(date);\n return date - d0 < d1 - date ? d0 : d1;\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 = [], previous;\n start = interval.ceil(start);\n step = step == null ? 1 : Math.floor(step);\n if (!(start < stop) || !(step > 0)) return range; // also handles Invalid Date\n do range.push(previous = new Date(+start)), offseti(start, step), floori(start);\n while (previous < start && start < stop);\n return range;\n };\n\n interval.filter = function(test) {\n return newInterval(function(date) {\n if (date >= date) while (floori(date), !test(date)) date.setTime(date - 1);\n }, function(date, step) {\n if (date >= date) {\n if (step < 0) while (++step <= 0) {\n while (offseti(date, -1), !test(date)) {} // eslint-disable-line no-empty\n } else while (--step >= 0) {\n while (offseti(date, +1), !test(date)) {} // eslint-disable-line no-empty\n }\n }\n });\n };\n\n if (count) {\n 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 interval.every = function(step) {\n step = Math.floor(step);\n return !isFinite(step) || !(step > 0) ? null\n : !(step > 1) ? interval\n : interval.filter(field\n ? function(d) { return field(d) % step === 0; }\n : function(d) { return interval.count(0, d) % step === 0; });\n };\n }\n\n return interval;\n}\n","import interval from \"./interval\";\n\nvar millisecond = interval(function() {\n // noop\n}, function(date, step) {\n date.setTime(+date + step);\n}, function(start, end) {\n return end - start;\n});\n\n// An optimized implementation for this simple case.\nmillisecond.every = function(k) {\n k = Math.floor(k);\n if (!isFinite(k) || !(k > 0)) return null;\n if (!(k > 1)) return millisecond;\n return interval(function(date) {\n date.setTime(Math.floor(date / k) * k);\n }, function(date, step) {\n date.setTime(+date + step * k);\n }, function(start, end) {\n return (end - start) / k;\n });\n};\n\nexport default millisecond;\nexport var milliseconds = millisecond.range;\n","export var durationSecond = 1e3;\nexport var durationMinute = 6e4;\nexport var durationHour = 36e5;\nexport var durationDay = 864e5;\nexport var durationWeek = 6048e5;\n","import interval from \"./interval\";\nimport {durationSecond} from \"./duration\";\n\nvar second = interval(function(date) {\n date.setTime(Math.floor(date / durationSecond) * durationSecond);\n}, function(date, step) {\n date.setTime(+date + step * durationSecond);\n}, function(start, end) {\n return (end - start) / durationSecond;\n}, function(date) {\n return date.getUTCSeconds();\n});\n\nexport default second;\nexport var seconds = second.range;\n","import interval from \"./interval\";\nimport {durationMinute} from \"./duration\";\n\nvar minute = interval(function(date) {\n date.setTime(Math.floor(date / durationMinute) * durationMinute);\n}, function(date, step) {\n date.setTime(+date + step * durationMinute);\n}, function(start, end) {\n return (end - start) / durationMinute;\n}, function(date) {\n return date.getMinutes();\n});\n\nexport default minute;\nexport var minutes = minute.range;\n","import interval from \"./interval\";\nimport {durationHour, durationMinute} from \"./duration\";\n\nvar hour = interval(function(date) {\n var offset = date.getTimezoneOffset() * durationMinute % durationHour;\n if (offset < 0) offset += durationHour;\n date.setTime(Math.floor((+date - offset) / durationHour) * durationHour + offset);\n}, function(date, step) {\n date.setTime(+date + step * durationHour);\n}, function(start, end) {\n return (end - start) / durationHour;\n}, function(date) {\n return date.getHours();\n});\n\nexport default hour;\nexport var hours = hour.range;\n","import interval from \"./interval\";\nimport {durationDay, durationMinute} from \"./duration\";\n\nvar day = interval(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()) * durationMinute) / durationDay;\n}, function(date) {\n return date.getDate() - 1;\n});\n\nexport default day;\nexport var days = day.range;\n","import interval from \"./interval\";\nimport {durationMinute, durationWeek} from \"./duration\";\n\nfunction weekday(i) {\n return interval(function(date) {\n date.setDate(date.getDate() - (date.getDay() + 7 - i) % 7);\n date.setHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setDate(date.getDate() + step * 7);\n }, function(start, end) {\n return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationWeek;\n });\n}\n\nexport var sunday = weekday(0);\nexport var monday = weekday(1);\nexport var tuesday = weekday(2);\nexport var wednesday = weekday(3);\nexport var thursday = weekday(4);\nexport var friday = weekday(5);\nexport var saturday = weekday(6);\n\nexport var sundays = sunday.range;\nexport var mondays = monday.range;\nexport var tuesdays = tuesday.range;\nexport var wednesdays = wednesday.range;\nexport var thursdays = thursday.range;\nexport var fridays = friday.range;\nexport var saturdays = saturday.range;\n","import interval from \"./interval\";\n\nvar month = interval(function(date) {\n date.setDate(1);\n date.setHours(0, 0, 0, 0);\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}, function(date) {\n return date.getMonth();\n});\n\nexport default month;\nexport var months = month.range;\n","import interval from \"./interval\";\n\nvar year = interval(function(date) {\n date.setMonth(0, 1);\n date.setHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setFullYear(date.getFullYear() + step);\n}, function(start, end) {\n return end.getFullYear() - start.getFullYear();\n}, function(date) {\n return date.getFullYear();\n});\n\n// An optimized implementation for this simple case.\nyear.every = function(k) {\n return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : interval(function(date) {\n date.setFullYear(Math.floor(date.getFullYear() / k) * k);\n date.setMonth(0, 1);\n date.setHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setFullYear(date.getFullYear() + step * k);\n });\n};\n\nexport default year;\nexport var years = year.range;\n","import interval from \"./interval\";\nimport {durationMinute} from \"./duration\";\n\nvar utcMinute = interval(function(date) {\n date.setUTCSeconds(0, 0);\n}, function(date, step) {\n date.setTime(+date + step * durationMinute);\n}, function(start, end) {\n return (end - start) / durationMinute;\n}, function(date) {\n return date.getUTCMinutes();\n});\n\nexport default utcMinute;\nexport var utcMinutes = utcMinute.range;\n","import interval from \"./interval\";\nimport {durationHour} from \"./duration\";\n\nvar utcHour = interval(function(date) {\n date.setUTCMinutes(0, 0, 0);\n}, function(date, step) {\n date.setTime(+date + step * durationHour);\n}, function(start, end) {\n return (end - start) / durationHour;\n}, function(date) {\n return date.getUTCHours();\n});\n\nexport default utcHour;\nexport var utcHours = utcHour.range;\n","import interval from \"./interval\";\nimport {durationDay} from \"./duration\";\n\nvar utcDay = interval(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) / durationDay;\n}, function(date) {\n return date.getUTCDate() - 1;\n});\n\nexport default utcDay;\nexport var utcDays = utcDay.range;\n","import interval from \"./interval\";\nimport {durationWeek} from \"./duration\";\n\nfunction utcWeekday(i) {\n return interval(function(date) {\n date.setUTCDate(date.getUTCDate() - (date.getUTCDay() + 7 - i) % 7);\n date.setUTCHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setUTCDate(date.getUTCDate() + step * 7);\n }, function(start, end) {\n return (end - start) / durationWeek;\n });\n}\n\nexport var utcSunday = utcWeekday(0);\nexport var utcMonday = utcWeekday(1);\nexport var utcTuesday = utcWeekday(2);\nexport var utcWednesday = utcWeekday(3);\nexport var utcThursday = utcWeekday(4);\nexport var utcFriday = utcWeekday(5);\nexport var utcSaturday = utcWeekday(6);\n\nexport var utcSundays = utcSunday.range;\nexport var utcMondays = utcMonday.range;\nexport var utcTuesdays = utcTuesday.range;\nexport var utcWednesdays = utcWednesday.range;\nexport var utcThursdays = utcThursday.range;\nexport var utcFridays = utcFriday.range;\nexport var utcSaturdays = utcSaturday.range;\n","import interval from \"./interval\";\n\nvar utcMonth = interval(function(date) {\n date.setUTCDate(1);\n date.setUTCHours(0, 0, 0, 0);\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}, function(date) {\n return date.getUTCMonth();\n});\n\nexport default utcMonth;\nexport var utcMonths = utcMonth.range;\n","import interval from \"./interval\";\n\nvar utcYear = interval(function(date) {\n date.setUTCMonth(0, 1);\n date.setUTCHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setUTCFullYear(date.getUTCFullYear() + step);\n}, function(start, end) {\n return end.getUTCFullYear() - start.getUTCFullYear();\n}, function(date) {\n return date.getUTCFullYear();\n});\n\n// An optimized implementation for this simple case.\nutcYear.every = function(k) {\n return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : interval(function(date) {\n date.setUTCFullYear(Math.floor(date.getUTCFullYear() / k) * k);\n date.setUTCMonth(0, 1);\n date.setUTCHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setUTCFullYear(date.getUTCFullYear() + step * k);\n });\n};\n\nexport default utcYear;\nexport var utcYears = utcYear.range;\n","import {\n timeDay,\n timeSunday,\n timeMonday,\n timeThursday,\n timeYear,\n utcDay,\n utcSunday,\n utcMonday,\n utcThursday,\n utcYear\n} from \"d3-time\";\n\nfunction 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\nfunction 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\nfunction newYear(y) {\n return {y: y, m: 0, d: 1, H: 0, M: 0, S: 0, L: 0};\n}\n\nexport default function formatLocale(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 periodRe = formatRe(locale_periods),\n 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 \"f\": formatMicroseconds,\n \"H\": formatHour24,\n \"I\": formatHour12,\n \"j\": formatDayOfYear,\n \"L\": formatMilliseconds,\n \"m\": formatMonthNumber,\n \"M\": formatMinutes,\n \"p\": formatPeriod,\n \"Q\": formatUnixTimestamp,\n \"s\": formatUnixTimestampSeconds,\n \"S\": formatSeconds,\n \"u\": formatWeekdayNumberMonday,\n \"U\": formatWeekNumberSunday,\n \"V\": formatWeekNumberISO,\n \"w\": formatWeekdayNumberSunday,\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 \"f\": formatUTCMicroseconds,\n \"H\": formatUTCHour24,\n \"I\": formatUTCHour12,\n \"j\": formatUTCDayOfYear,\n \"L\": formatUTCMilliseconds,\n \"m\": formatUTCMonthNumber,\n \"M\": formatUTCMinutes,\n \"p\": formatUTCPeriod,\n \"Q\": formatUnixTimestamp,\n \"s\": formatUnixTimestampSeconds,\n \"S\": formatUTCSeconds,\n \"u\": formatUTCWeekdayNumberMonday,\n \"U\": formatUTCWeekNumberSunday,\n \"V\": formatUTCWeekNumberISO,\n \"w\": formatUTCWeekdayNumberSunday,\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 \"f\": parseMicroseconds,\n \"H\": parseHour24,\n \"I\": parseHour24,\n \"j\": parseDayOfYear,\n \"L\": parseMilliseconds,\n \"m\": parseMonthNumber,\n \"M\": parseMinutes,\n \"p\": parsePeriod,\n \"Q\": parseUnixTimestamp,\n \"s\": parseUnixTimestampSeconds,\n \"S\": parseSeconds,\n \"u\": parseWeekdayNumberMonday,\n \"U\": parseWeekNumberSunday,\n \"V\": parseWeekNumberISO,\n \"w\": parseWeekdayNumberSunday,\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 if (!(date instanceof Date)) date = new Date(+date);\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 else pad = c === \"e\" ? \" \" : \"0\";\n if (format = formats[c]) c = format(date, 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 week, day;\n if (i != string.length) return null;\n\n // If a UNIX timestamp is specified, return it.\n if (\"Q\" in d) return new Date(d.Q);\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 // Convert day-of-week and week-of-year to day-of-year.\n if (\"V\" in d) {\n if (d.V < 1 || d.V > 53) return null;\n if (!(\"w\" in d)) d.w = 1;\n if (\"Z\" in d) {\n week = utcDate(newYear(d.y)), day = week.getUTCDay();\n week = day > 4 || day === 0 ? utcMonday.ceil(week) : utcMonday(week);\n week = utcDay.offset(week, (d.V - 1) * 7);\n d.y = week.getUTCFullYear();\n d.m = week.getUTCMonth();\n d.d = week.getUTCDate() + (d.w + 6) % 7;\n } else {\n week = newDate(newYear(d.y)), day = week.getDay();\n week = day > 4 || day === 0 ? timeMonday.ceil(week) : timeMonday(week);\n week = timeDay.offset(week, (d.V - 1) * 7);\n d.y = week.getFullYear();\n d.m = week.getMonth();\n d.d = week.getDate() + (d.w + 6) % 7;\n }\n } else if (\"W\" in d || \"U\" in d) {\n if (!(\"w\" in d)) d.w = \"u\" in d ? d.u % 7 : \"W\" in d ? 1 : 0;\n day = \"Z\" in d ? utcDate(newYear(d.y)).getUTCDay() : newDate(newYear(d.y)).getDay();\n d.m = 0;\n d.d = \"W\" in d ? (d.w + 6) % 7 + d.W * 7 - (day + 5) % 7 : d.w + d.U * 7 - (day + 6) % 7;\n }\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 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 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 parsePeriod(d, string, i) {\n var n = periodRe.exec(string.slice(i));\n return n ? (d.p = periodLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n }\n\n function parseShortWeekday(d, string, i) {\n var n = shortWeekdayRe.exec(string.slice(i));\n return n ? (d.w = shortWeekdayLookup[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[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[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[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 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.toString = function() { return specifier; };\n return f;\n },\n parse: function(specifier) {\n var p = newParse(specifier += \"\", localDate);\n p.toString = function() { return specifier; };\n return p;\n },\n utcFormat: function(specifier) {\n var f = newFormat(specifier += \"\", utcFormats);\n f.toString = function() { return specifier; };\n return f;\n },\n utcParse: function(specifier) {\n var p = newParse(specifier, utcDate);\n p.toString = function() { return specifier; };\n return p;\n }\n };\n}\n\nvar pads = {\"-\": \"\", \"_\": \" \", \"0\": \"0\"},\n numberRe = /^\\s*\\d+/, // note: ignores next directive\n percentRe = /^%/,\n requoteRe = /[\\\\^$*+?|[\\]().{}]/g;\n\nfunction 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\nfunction requote(s) {\n return s.replace(requoteRe, \"\\\\$&\");\n}\n\nfunction formatRe(names) {\n return new RegExp(\"^(?:\" + names.map(requote).join(\"|\") + \")\", \"i\");\n}\n\nfunction formatLookup(names) {\n var map = {}, i = -1, n = names.length;\n while (++i < n) map[names[i].toLowerCase()] = i;\n return map;\n}\n\nfunction parseWeekdayNumberSunday(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\nfunction parseWeekdayNumberMonday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 1));\n return n ? (d.u = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberSunday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.U = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberISO(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.V = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberMonday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.W = +n[0], i + n[0].length) : -1;\n}\n\nfunction 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\nfunction 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\nfunction parseZone(d, string, i) {\n var n = /^(Z)|([+-]\\d\\d)(?::?(\\d\\d))?/.exec(string.slice(i, i + 6));\n return n ? (d.Z = n[1] ? 0 : -(n[2] + (n[3] || \"00\")), i + n[0].length) : -1;\n}\n\nfunction 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\nfunction 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\nfunction 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\nfunction 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\nfunction 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\nfunction 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\nfunction 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\nfunction parseMicroseconds(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 6));\n return n ? (d.L = Math.floor(n[0] / 1000), i + n[0].length) : -1;\n}\n\nfunction parseLiteralPercent(d, string, i) {\n var n = percentRe.exec(string.slice(i, i + 1));\n return n ? i + n[0].length : -1;\n}\n\nfunction parseUnixTimestamp(d, string, i) {\n var n = numberRe.exec(string.slice(i));\n return n ? (d.Q = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseUnixTimestampSeconds(d, string, i) {\n var n = numberRe.exec(string.slice(i));\n return n ? (d.Q = (+n[0]) * 1000, i + n[0].length) : -1;\n}\n\nfunction formatDayOfMonth(d, p) {\n return pad(d.getDate(), p, 2);\n}\n\nfunction formatHour24(d, p) {\n return pad(d.getHours(), p, 2);\n}\n\nfunction formatHour12(d, p) {\n return pad(d.getHours() % 12 || 12, p, 2);\n}\n\nfunction formatDayOfYear(d, p) {\n return pad(1 + timeDay.count(timeYear(d), d), p, 3);\n}\n\nfunction formatMilliseconds(d, p) {\n return pad(d.getMilliseconds(), p, 3);\n}\n\nfunction formatMicroseconds(d, p) {\n return formatMilliseconds(d, p) + \"000\";\n}\n\nfunction formatMonthNumber(d, p) {\n return pad(d.getMonth() + 1, p, 2);\n}\n\nfunction formatMinutes(d, p) {\n return pad(d.getMinutes(), p, 2);\n}\n\nfunction formatSeconds(d, p) {\n return pad(d.getSeconds(), p, 2);\n}\n\nfunction formatWeekdayNumberMonday(d) {\n var day = d.getDay();\n return day === 0 ? 7 : day;\n}\n\nfunction formatWeekNumberSunday(d, p) {\n return pad(timeSunday.count(timeYear(d), d), p, 2);\n}\n\nfunction formatWeekNumberISO(d, p) {\n var day = d.getDay();\n d = (day >= 4 || day === 0) ? timeThursday(d) : timeThursday.ceil(d);\n return pad(timeThursday.count(timeYear(d), d) + (timeYear(d).getDay() === 4), p, 2);\n}\n\nfunction formatWeekdayNumberSunday(d) {\n return d.getDay();\n}\n\nfunction formatWeekNumberMonday(d, p) {\n return pad(timeMonday.count(timeYear(d), d), p, 2);\n}\n\nfunction formatYear(d, p) {\n return pad(d.getFullYear() % 100, p, 2);\n}\n\nfunction formatFullYear(d, p) {\n return pad(d.getFullYear() % 10000, p, 4);\n}\n\nfunction 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\nfunction formatUTCDayOfMonth(d, p) {\n return pad(d.getUTCDate(), p, 2);\n}\n\nfunction formatUTCHour24(d, p) {\n return pad(d.getUTCHours(), p, 2);\n}\n\nfunction formatUTCHour12(d, p) {\n return pad(d.getUTCHours() % 12 || 12, p, 2);\n}\n\nfunction formatUTCDayOfYear(d, p) {\n return pad(1 + utcDay.count(utcYear(d), d), p, 3);\n}\n\nfunction formatUTCMilliseconds(d, p) {\n return pad(d.getUTCMilliseconds(), p, 3);\n}\n\nfunction formatUTCMicroseconds(d, p) {\n return formatUTCMilliseconds(d, p) + \"000\";\n}\n\nfunction formatUTCMonthNumber(d, p) {\n return pad(d.getUTCMonth() + 1, p, 2);\n}\n\nfunction formatUTCMinutes(d, p) {\n return pad(d.getUTCMinutes(), p, 2);\n}\n\nfunction formatUTCSeconds(d, p) {\n return pad(d.getUTCSeconds(), p, 2);\n}\n\nfunction formatUTCWeekdayNumberMonday(d) {\n var dow = d.getUTCDay();\n return dow === 0 ? 7 : dow;\n}\n\nfunction formatUTCWeekNumberSunday(d, p) {\n return pad(utcSunday.count(utcYear(d), d), p, 2);\n}\n\nfunction formatUTCWeekNumberISO(d, p) {\n var day = d.getUTCDay();\n d = (day >= 4 || day === 0) ? utcThursday(d) : utcThursday.ceil(d);\n return pad(utcThursday.count(utcYear(d), d) + (utcYear(d).getUTCDay() === 4), p, 2);\n}\n\nfunction formatUTCWeekdayNumberSunday(d) {\n return d.getUTCDay();\n}\n\nfunction formatUTCWeekNumberMonday(d, p) {\n return pad(utcMonday.count(utcYear(d), d), p, 2);\n}\n\nfunction formatUTCYear(d, p) {\n return pad(d.getUTCFullYear() % 100, p, 2);\n}\n\nfunction formatUTCFullYear(d, p) {\n return pad(d.getUTCFullYear() % 10000, p, 4);\n}\n\nfunction formatUTCZone() {\n return \"+0000\";\n}\n\nfunction formatLiteralPercent() {\n return \"%\";\n}\n\nfunction formatUnixTimestamp(d) {\n return +d;\n}\n\nfunction formatUnixTimestampSeconds(d) {\n return Math.floor(+d / 1000);\n}\n","import formatLocale from \"./locale\";\n\nvar locale;\nexport var timeFormat;\nexport var timeParse;\nexport var utcFormat;\nexport var utcParse;\n\ndefaultLocale({\n dateTime: \"%x, %X\",\n date: \"%-m/%-d/%Y\",\n time: \"%-I:%M:%S %p\",\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\nexport default function defaultLocale(definition) {\n locale = formatLocale(definition);\n timeFormat = locale.format;\n timeParse = locale.parse;\n utcFormat = locale.utcFormat;\n utcParse = locale.utcParse;\n return locale;\n}\n","import {utcFormat} from \"./defaultLocale\";\n\nexport var isoSpecifier = \"%Y-%m-%dT%H:%M:%S.%LZ\";\n\nfunction formatIsoNative(date) {\n return date.toISOString();\n}\n\nvar formatIso = Date.prototype.toISOString\n ? formatIsoNative\n : utcFormat(isoSpecifier);\n\nexport default formatIso;\n","import {isoSpecifier} from \"./isoFormat\";\nimport {utcParse} from \"./defaultLocale\";\n\nfunction parseIsoNative(string) {\n var date = new Date(string);\n return isNaN(date) ? null : date;\n}\n\nvar parseIso = +new Date(\"2000-01-01T00:00:00.000Z\")\n ? parseIsoNative\n : utcParse(isoSpecifier);\n\nexport default parseIso;\n","import {bisector, tickStep} from \"d3-array\";\nimport {interpolateNumber as reinterpolate} from \"d3-interpolate\";\nimport {timeYear, timeMonth, timeWeek, timeDay, timeHour, timeMinute, timeSecond, timeMillisecond} from \"d3-time\";\nimport {timeFormat} from \"d3-time-format\";\nimport {map} from \"./array\";\nimport {default as continuous, copy, deinterpolateLinear as deinterpolate} from \"./continuous\";\nimport nice from \"./nice\";\n\nvar durationSecond = 1000,\n durationMinute = durationSecond * 60,\n durationHour = durationMinute * 60,\n durationDay = durationHour * 24,\n durationWeek = durationDay * 7,\n durationMonth = durationDay * 30,\n durationYear = durationDay * 365;\n\nfunction date(t) {\n return new Date(t);\n}\n\nfunction number(t) {\n return t instanceof Date ? +t : +new Date(+t);\n}\n\nexport function calendar(year, month, week, day, hour, minute, second, millisecond, format) {\n var scale = continuous(deinterpolate, reinterpolate),\n invert = scale.invert,\n domain = scale.domain;\n\n var formatMillisecond = format(\".%L\"),\n formatSecond = format(\":%S\"),\n formatMinute = format(\"%I:%M\"),\n formatHour = format(\"%I %p\"),\n formatDay = format(\"%a %d\"),\n formatWeek = format(\"%b %d\"),\n formatMonth = format(\"%B\"),\n formatYear = format(\"%Y\");\n\n var tickIntervals = [\n [second, 1, durationSecond],\n [second, 5, 5 * durationSecond],\n [second, 15, 15 * durationSecond],\n [second, 30, 30 * durationSecond],\n [minute, 1, durationMinute],\n [minute, 5, 5 * durationMinute],\n [minute, 15, 15 * durationMinute],\n [minute, 30, 30 * durationMinute],\n [ hour, 1, durationHour ],\n [ hour, 3, 3 * durationHour ],\n [ hour, 6, 6 * durationHour ],\n [ hour, 12, 12 * durationHour ],\n [ day, 1, durationDay ],\n [ day, 2, 2 * durationDay ],\n [ week, 1, durationWeek ],\n [ month, 1, durationMonth ],\n [ month, 3, 3 * durationMonth ],\n [ year, 1, durationYear ]\n ];\n\n function tickFormat(date) {\n return (second(date) < date ? formatMillisecond\n : minute(date) < date ? formatSecond\n : hour(date) < date ? formatMinute\n : day(date) < date ? formatHour\n : month(date) < date ? (week(date) < date ? formatDay : formatWeek)\n : year(date) < date ? formatMonth\n : formatYear)(date);\n }\n\n function tickInterval(interval, start, stop, step) {\n if (interval == null) interval = 10;\n\n // If a desired tick count is specified, pick a reasonable tick interval\n // based on the extent of the domain and a rough estimate of tick size.\n // Otherwise, assume interval is already a time interval and use it.\n if (typeof interval === \"number\") {\n var target = Math.abs(stop - start) / interval,\n i = bisector(function(i) { return i[2]; }).right(tickIntervals, target);\n if (i === tickIntervals.length) {\n step = tickStep(start / durationYear, stop / durationYear, interval);\n interval = year;\n } else if (i) {\n i = tickIntervals[target / tickIntervals[i - 1][2] < tickIntervals[i][2] / target ? i - 1 : i];\n step = i[1];\n interval = i[0];\n } else {\n step = Math.max(tickStep(start, stop, interval), 1);\n interval = millisecond;\n }\n }\n\n return step == null ? interval : interval.every(step);\n }\n\n scale.invert = function(y) {\n return new Date(invert(y));\n };\n\n scale.domain = function(_) {\n return arguments.length ? domain(map.call(_, number)) : domain().map(date);\n };\n\n scale.ticks = function(interval, step) {\n var d = domain(),\n t0 = d[0],\n t1 = d[d.length - 1],\n r = t1 < t0,\n t;\n if (r) t = t0, t0 = t1, t1 = t;\n t = tickInterval(interval, t0, t1, step);\n t = t ? t.range(t0, t1 + 1) : []; // inclusive stop\n return r ? t.reverse() : t;\n };\n\n scale.tickFormat = function(count, specifier) {\n return specifier == null ? tickFormat : format(specifier);\n };\n\n scale.nice = function(interval, step) {\n var d = domain();\n return (interval = tickInterval(interval, d[0], d[d.length - 1], step))\n ? domain(nice(d, interval))\n : scale;\n };\n\n scale.copy = function() {\n return copy(scale, calendar(year, month, week, day, hour, minute, second, millisecond, format));\n };\n\n return scale;\n}\n\nexport default function() {\n return calendar(timeYear, timeMonth, timeWeek, timeDay, timeHour, timeMinute, timeSecond, timeMillisecond, timeFormat).domain([new Date(2000, 0, 1), new Date(2000, 0, 2)]);\n}\n","export default function(s) {\n return s.match(/.{6}/g).map(function(x) {\n return \"#\" + x;\n });\n}\n","import colors from \"./colors\";\n\nexport default colors(\"1f77b4ff7f0e2ca02cd627289467bd8c564be377c27f7f7fbcbd2217becf\");\n","import colors from \"./colors\";\n\nexport default colors(\"393b795254a36b6ecf9c9ede6379398ca252b5cf6bcedb9c8c6d31bd9e39e7ba52e7cb94843c39ad494ad6616be7969c7b4173a55194ce6dbdde9ed6\");\n","import colors from \"./colors\";\n\nexport default colors(\"1f77b4aec7e8ff7f0effbb782ca02c98df8ad62728ff98969467bdc5b0d58c564bc49c94e377c2f7b6d27f7f7fc7c7c7bcbd22dbdb8d17becf9edae5\");\n","import colors from \"./colors\";\n\nexport default colors(\"3182bd6baed69ecae1c6dbefe6550dfd8d3cfdae6bfdd0a231a35474c476a1d99bc7e9c0756bb19e9ac8bcbddcdadaeb636363969696bdbdbdd9d9d9\");\n","import {cubehelix} from \"d3-color\";\nimport {interpolateCubehelixLong} from \"d3-interpolate\";\n\nexport default interpolateCubehelixLong(cubehelix(300, 0.5, 0.0), cubehelix(-240, 0.5, 1.0));\n","import {cubehelix} from \"d3-color\";\nimport {interpolateCubehelixLong} from \"d3-interpolate\";\n\nexport var warm = interpolateCubehelixLong(cubehelix(-100, 0.75, 0.35), cubehelix(80, 1.50, 0.8));\n\nexport var cool = interpolateCubehelixLong(cubehelix(260, 0.75, 0.35), cubehelix(80, 1.50, 0.8));\n\nvar rainbow = cubehelix();\n\nexport default function(t) {\n if (t < 0 || t > 1) t -= Math.floor(t);\n var ts = Math.abs(t - 0.5);\n rainbow.h = 360 * t - 100;\n rainbow.s = 1.5 - 1.5 * ts;\n rainbow.l = 0.8 - 0.9 * ts;\n return rainbow + \"\";\n}\n","import colors from \"./colors\";\n\nfunction ramp(range) {\n var n = range.length;\n return function(t) {\n return range[Math.max(0, Math.min(n - 1, Math.floor(t * n)))];\n };\n}\n\nexport default ramp(colors(\"44015444025645045745055946075a46085c460a5d460b5e470d60470e6147106347116447136548146748166848176948186a481a6c481b6d481c6e481d6f481f70482071482173482374482475482576482677482878482979472a7a472c7a472d7b472e7c472f7d46307e46327e46337f463480453581453781453882443983443a83443b84433d84433e85423f854240864241864142874144874045884046883f47883f48893e49893e4a893e4c8a3d4d8a3d4e8a3c4f8a3c508b3b518b3b528b3a538b3a548c39558c39568c38588c38598c375a8c375b8d365c8d365d8d355e8d355f8d34608d34618d33628d33638d32648e32658e31668e31678e31688e30698e306a8e2f6b8e2f6c8e2e6d8e2e6e8e2e6f8e2d708e2d718e2c718e2c728e2c738e2b748e2b758e2a768e2a778e2a788e29798e297a8e297b8e287c8e287d8e277e8e277f8e27808e26818e26828e26828e25838e25848e25858e24868e24878e23888e23898e238a8d228b8d228c8d228d8d218e8d218f8d21908d21918c20928c20928c20938c1f948c1f958b1f968b1f978b1f988b1f998a1f9a8a1e9b8a1e9c891e9d891f9e891f9f881fa0881fa1881fa1871fa28720a38620a48621a58521a68522a78522a88423a98324aa8325ab8225ac8226ad8127ad8128ae8029af7f2ab07f2cb17e2db27d2eb37c2fb47c31b57b32b67a34b67935b77937b87838b9773aba763bbb753dbc743fbc7340bd7242be7144bf7046c06f48c16e4ac16d4cc26c4ec36b50c46a52c56954c56856c66758c7655ac8645cc8635ec96260ca6063cb5f65cb5e67cc5c69cd5b6ccd5a6ece5870cf5773d05675d05477d1537ad1517cd2507fd34e81d34d84d44b86d54989d5488bd6468ed64590d74393d74195d84098d83e9bd93c9dd93ba0da39a2da37a5db36a8db34aadc32addc30b0dd2fb2dd2db5de2bb8de29bade28bddf26c0df25c2df23c5e021c8e020cae11fcde11dd0e11cd2e21bd5e21ad8e219dae319dde318dfe318e2e418e5e419e7e419eae51aece51befe51cf1e51df4e61ef6e620f8e621fbe723fde725\"));\n\nexport var magma = ramp(colors(\"00000401000501010601010802010902020b02020d03030f03031204041405041606051806051a07061c08071e0907200a08220b09240c09260d0a290e0b2b100b2d110c2f120d31130d34140e36150e38160f3b180f3d19103f1a10421c10441d11471e114920114b21114e22115024125325125527125829115a2a115c2c115f2d11612f116331116533106734106936106b38106c390f6e3b0f703d0f713f0f72400f74420f75440f764510774710784910784a10794c117a4e117b4f127b51127c52137c54137d56147d57157e59157e5a167e5c167f5d177f5f187f601880621980641a80651a80671b80681c816a1c816b1d816d1d816e1e81701f81721f817320817521817621817822817922827b23827c23827e24828025828125818326818426818627818827818928818b29818c29818e2a81902a81912b81932b80942c80962c80982d80992d809b2e7f9c2e7f9e2f7fa02f7fa1307ea3307ea5317ea6317da8327daa337dab337cad347cae347bb0357bb2357bb3367ab5367ab73779b83779ba3878bc3978bd3977bf3a77c03a76c23b75c43c75c53c74c73d73c83e73ca3e72cc3f71cd4071cf4070d0416fd2426fd3436ed5446dd6456cd8456cd9466bdb476adc4869de4968df4a68e04c67e24d66e34e65e44f64e55064e75263e85362e95462ea5661eb5760ec5860ed5a5fee5b5eef5d5ef05f5ef1605df2625df2645cf3655cf4675cf4695cf56b5cf66c5cf66e5cf7705cf7725cf8745cf8765cf9785df9795df97b5dfa7d5efa7f5efa815ffb835ffb8560fb8761fc8961fc8a62fc8c63fc8e64fc9065fd9266fd9467fd9668fd9869fd9a6afd9b6bfe9d6cfe9f6dfea16efea36ffea571fea772fea973feaa74feac76feae77feb078feb27afeb47bfeb67cfeb77efeb97ffebb81febd82febf84fec185fec287fec488fec68afec88cfeca8dfecc8ffecd90fecf92fed194fed395fed597fed799fed89afdda9cfddc9efddea0fde0a1fde2a3fde3a5fde5a7fde7a9fde9aafdebacfcecaefceeb0fcf0b2fcf2b4fcf4b6fcf6b8fcf7b9fcf9bbfcfbbdfcfdbf\"));\n\nexport var inferno = ramp(colors(\"00000401000501010601010802010a02020c02020e03021004031204031405041706041907051b08051d09061f0a07220b07240c08260d08290e092b10092d110a30120a32140b34150b37160b39180c3c190c3e1b0c411c0c431e0c451f0c48210c4a230c4c240c4f260c51280b53290b552b0b572d0b592f0a5b310a5c320a5e340a5f3609613809623909633b09643d09653e0966400a67420a68440a68450a69470b6a490b6a4a0c6b4c0c6b4d0d6c4f0d6c510e6c520e6d540f6d550f6d57106e59106e5a116e5c126e5d126e5f136e61136e62146e64156e65156e67166e69166e6a176e6c186e6d186e6f196e71196e721a6e741a6e751b6e771c6d781c6d7a1d6d7c1d6d7d1e6d7f1e6c801f6c82206c84206b85216b87216b88226a8a226a8c23698d23698f24699025689225689326679526679727669827669a28659b29649d29649f2a63a02a63a22b62a32c61a52c60a62d60a82e5fa92e5eab2f5ead305dae305cb0315bb1325ab3325ab43359b63458b73557b93556ba3655bc3754bd3853bf3952c03a51c13a50c33b4fc43c4ec63d4dc73e4cc83f4bca404acb4149cc4248ce4347cf4446d04545d24644d34743d44842d54a41d74b3fd84c3ed94d3dda4e3cdb503bdd513ade5238df5337e05536e15635e25734e35933e45a31e55c30e65d2fe75e2ee8602de9612bea632aeb6429eb6628ec6726ed6925ee6a24ef6c23ef6e21f06f20f1711ff1731df2741cf3761bf37819f47918f57b17f57d15f67e14f68013f78212f78410f8850ff8870ef8890cf98b0bf98c0af98e09fa9008fa9207fa9407fb9606fb9706fb9906fb9b06fb9d07fc9f07fca108fca309fca50afca60cfca80dfcaa0ffcac11fcae12fcb014fcb216fcb418fbb61afbb81dfbba1ffbbc21fbbe23fac026fac228fac42afac62df9c72ff9c932f9cb35f8cd37f8cf3af7d13df7d340f6d543f6d746f5d949f5db4cf4dd4ff4df53f4e156f3e35af3e55df2e661f2e865f2ea69f1ec6df1ed71f1ef75f1f179f2f27df2f482f3f586f3f68af4f88ef5f992f6fa96f8fb9af9fc9dfafda1fcffa4\"));\n\nexport var plasma = ramp(colors(\"0d088710078813078916078a19068c1b068d1d068e20068f2206902406912605912805922a05932c05942e05952f059631059733059735049837049938049a3a049a3c049b3e049c3f049c41049d43039e44039e46039f48039f4903a04b03a14c02a14e02a25002a25102a35302a35502a45601a45801a45901a55b01a55c01a65e01a66001a66100a76300a76400a76600a76700a86900a86a00a86c00a86e00a86f00a87100a87201a87401a87501a87701a87801a87a02a87b02a87d03a87e03a88004a88104a78305a78405a78606a68707a68808a68a09a58b0aa58d0ba58e0ca48f0da4910ea3920fa39410a29511a19613a19814a099159f9a169f9c179e9d189d9e199da01a9ca11b9ba21d9aa31e9aa51f99a62098a72197a82296aa2395ab2494ac2694ad2793ae2892b02991b12a90b22b8fb32c8eb42e8db52f8cb6308bb7318ab83289ba3388bb3488bc3587bd3786be3885bf3984c03a83c13b82c23c81c33d80c43e7fc5407ec6417dc7427cc8437bc9447aca457acb4679cc4778cc4977cd4a76ce4b75cf4c74d04d73d14e72d24f71d35171d45270d5536fd5546ed6556dd7566cd8576bd9586ada5a6ada5b69db5c68dc5d67dd5e66de5f65de6164df6263e06363e16462e26561e26660e3685fe4695ee56a5de56b5de66c5ce76e5be76f5ae87059e97158e97257ea7457eb7556eb7655ec7754ed7953ed7a52ee7b51ef7c51ef7e50f07f4ff0804ef1814df1834cf2844bf3854bf3874af48849f48948f58b47f58c46f68d45f68f44f79044f79143f79342f89441f89540f9973ff9983ef99a3efa9b3dfa9c3cfa9e3bfb9f3afba139fba238fca338fca537fca636fca835fca934fdab33fdac33fdae32fdaf31fdb130fdb22ffdb42ffdb52efeb72dfeb82cfeba2cfebb2bfebd2afebe2afec029fdc229fdc328fdc527fdc627fdc827fdca26fdcb26fccd25fcce25fcd025fcd225fbd324fbd524fbd724fad824fada24f9dc24f9dd25f8df25f8e125f7e225f7e425f6e626f6e826f5e926f5eb27f4ed27f3ee27f3f027f2f227f1f426f1f525f0f724f0f921\"));\n","import {linearish} from \"./linear\";\n\nexport default function sequential(interpolator) {\n var x0 = 0,\n x1 = 1,\n clamp = false;\n\n function scale(x) {\n var t = (x - x0) / (x1 - x0);\n return interpolator(clamp ? Math.max(0, Math.min(1, t)) : t);\n }\n\n scale.domain = function(_) {\n return arguments.length ? (x0 = +_[0], x1 = +_[1], scale) : [x0, x1];\n };\n\n scale.clamp = function(_) {\n return arguments.length ? (clamp = !!_, scale) : clamp;\n };\n\n scale.interpolator = function(_) {\n return arguments.length ? (interpolator = _, scale) : interpolator;\n };\n\n scale.copy = function() {\n return sequential(interpolator).domain([x0, x1]).clamp(clamp);\n };\n\n return linearish(scale);\n}\n","export default function(specifier) {\n var n = specifier.length / 6 | 0, colors = new Array(n), i = 0;\n while (i < n) colors[i] = \"#\" + specifier.slice(i * 6, ++i * 6);\n return colors;\n}\n","import colors from \"../colors\";\n\nexport default colors(\"7fc97fbeaed4fdc086ffff99386cb0f0027fbf5b17666666\");\n","import colors from \"../colors\";\n\nexport default colors(\"1f77b4ff7f0e2ca02cd627289467bd8c564be377c27f7f7fbcbd2217becf\");\n","import colors from \"../colors\";\n\nexport default colors(\"1b9e77d95f027570b3e7298a66a61ee6ab02a6761d666666\");\n","import colors from \"../colors\";\n\nexport default colors(\"a6cee31f78b4b2df8a33a02cfb9a99e31a1cfdbf6fff7f00cab2d66a3d9affff99b15928\");\n","import colors from \"../colors\";\n\nexport default colors(\"fbb4aeb3cde3ccebc5decbe4fed9a6ffffcce5d8bdfddaecf2f2f2\");\n","import colors from \"../colors\";\n\nexport default colors(\"b3e2cdfdcdaccbd5e8f4cae4e6f5c9fff2aef1e2cccccccc\");\n","import colors from \"../colors\";\n\nexport default colors(\"e41a1c377eb84daf4a984ea3ff7f00ffff33a65628f781bf999999\");\n","import colors from \"../colors\";\n\nexport default colors(\"66c2a5fc8d628da0cbe78ac3a6d854ffd92fe5c494b3b3b3\");\n","import colors from \"../colors\";\n\nexport default colors(\"8dd3c7ffffb3bebadafb807280b1d3fdb462b3de69fccde5d9d9d9bc80bdccebc5ffed6f\");\n","import {interpolateRgbBasis} from \"d3-interpolate\";\n\nexport default function(scheme) {\n return interpolateRgbBasis(scheme[scheme.length - 1]);\n}\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"d8b365f5f5f55ab4ac\",\n \"a6611adfc27d80cdc1018571\",\n \"a6611adfc27df5f5f580cdc1018571\",\n \"8c510ad8b365f6e8c3c7eae55ab4ac01665e\",\n \"8c510ad8b365f6e8c3f5f5f5c7eae55ab4ac01665e\",\n \"8c510abf812ddfc27df6e8c3c7eae580cdc135978f01665e\",\n \"8c510abf812ddfc27df6e8c3f5f5f5c7eae580cdc135978f01665e\",\n \"5430058c510abf812ddfc27df6e8c3c7eae580cdc135978f01665e003c30\",\n \"5430058c510abf812ddfc27df6e8c3f5f5f5c7eae580cdc135978f01665e003c30\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"af8dc3f7f7f77fbf7b\",\n \"7b3294c2a5cfa6dba0008837\",\n \"7b3294c2a5cff7f7f7a6dba0008837\",\n \"762a83af8dc3e7d4e8d9f0d37fbf7b1b7837\",\n \"762a83af8dc3e7d4e8f7f7f7d9f0d37fbf7b1b7837\",\n \"762a839970abc2a5cfe7d4e8d9f0d3a6dba05aae611b7837\",\n \"762a839970abc2a5cfe7d4e8f7f7f7d9f0d3a6dba05aae611b7837\",\n \"40004b762a839970abc2a5cfe7d4e8d9f0d3a6dba05aae611b783700441b\",\n \"40004b762a839970abc2a5cfe7d4e8f7f7f7d9f0d3a6dba05aae611b783700441b\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"e9a3c9f7f7f7a1d76a\",\n \"d01c8bf1b6dab8e1864dac26\",\n \"d01c8bf1b6daf7f7f7b8e1864dac26\",\n \"c51b7de9a3c9fde0efe6f5d0a1d76a4d9221\",\n \"c51b7de9a3c9fde0eff7f7f7e6f5d0a1d76a4d9221\",\n \"c51b7dde77aef1b6dafde0efe6f5d0b8e1867fbc414d9221\",\n \"c51b7dde77aef1b6dafde0eff7f7f7e6f5d0b8e1867fbc414d9221\",\n \"8e0152c51b7dde77aef1b6dafde0efe6f5d0b8e1867fbc414d9221276419\",\n \"8e0152c51b7dde77aef1b6dafde0eff7f7f7e6f5d0b8e1867fbc414d9221276419\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"998ec3f7f7f7f1a340\",\n \"5e3c99b2abd2fdb863e66101\",\n \"5e3c99b2abd2f7f7f7fdb863e66101\",\n \"542788998ec3d8daebfee0b6f1a340b35806\",\n \"542788998ec3d8daebf7f7f7fee0b6f1a340b35806\",\n \"5427888073acb2abd2d8daebfee0b6fdb863e08214b35806\",\n \"5427888073acb2abd2d8daebf7f7f7fee0b6fdb863e08214b35806\",\n \"2d004b5427888073acb2abd2d8daebfee0b6fdb863e08214b358067f3b08\",\n \"2d004b5427888073acb2abd2d8daebf7f7f7fee0b6fdb863e08214b358067f3b08\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"ef8a62f7f7f767a9cf\",\n \"ca0020f4a58292c5de0571b0\",\n \"ca0020f4a582f7f7f792c5de0571b0\",\n \"b2182bef8a62fddbc7d1e5f067a9cf2166ac\",\n \"b2182bef8a62fddbc7f7f7f7d1e5f067a9cf2166ac\",\n \"b2182bd6604df4a582fddbc7d1e5f092c5de4393c32166ac\",\n \"b2182bd6604df4a582fddbc7f7f7f7d1e5f092c5de4393c32166ac\",\n \"67001fb2182bd6604df4a582fddbc7d1e5f092c5de4393c32166ac053061\",\n \"67001fb2182bd6604df4a582fddbc7f7f7f7d1e5f092c5de4393c32166ac053061\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"ef8a62ffffff999999\",\n \"ca0020f4a582bababa404040\",\n \"ca0020f4a582ffffffbababa404040\",\n \"b2182bef8a62fddbc7e0e0e09999994d4d4d\",\n \"b2182bef8a62fddbc7ffffffe0e0e09999994d4d4d\",\n \"b2182bd6604df4a582fddbc7e0e0e0bababa8787874d4d4d\",\n \"b2182bd6604df4a582fddbc7ffffffe0e0e0bababa8787874d4d4d\",\n \"67001fb2182bd6604df4a582fddbc7e0e0e0bababa8787874d4d4d1a1a1a\",\n \"67001fb2182bd6604df4a582fddbc7ffffffe0e0e0bababa8787874d4d4d1a1a1a\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"fc8d59ffffbf91bfdb\",\n \"d7191cfdae61abd9e92c7bb6\",\n \"d7191cfdae61ffffbfabd9e92c7bb6\",\n \"d73027fc8d59fee090e0f3f891bfdb4575b4\",\n \"d73027fc8d59fee090ffffbfe0f3f891bfdb4575b4\",\n \"d73027f46d43fdae61fee090e0f3f8abd9e974add14575b4\",\n \"d73027f46d43fdae61fee090ffffbfe0f3f8abd9e974add14575b4\",\n \"a50026d73027f46d43fdae61fee090e0f3f8abd9e974add14575b4313695\",\n \"a50026d73027f46d43fdae61fee090ffffbfe0f3f8abd9e974add14575b4313695\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"fc8d59ffffbf91cf60\",\n \"d7191cfdae61a6d96a1a9641\",\n \"d7191cfdae61ffffbfa6d96a1a9641\",\n \"d73027fc8d59fee08bd9ef8b91cf601a9850\",\n \"d73027fc8d59fee08bffffbfd9ef8b91cf601a9850\",\n \"d73027f46d43fdae61fee08bd9ef8ba6d96a66bd631a9850\",\n \"d73027f46d43fdae61fee08bffffbfd9ef8ba6d96a66bd631a9850\",\n \"a50026d73027f46d43fdae61fee08bd9ef8ba6d96a66bd631a9850006837\",\n \"a50026d73027f46d43fdae61fee08bffffbfd9ef8ba6d96a66bd631a9850006837\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"fc8d59ffffbf99d594\",\n \"d7191cfdae61abdda42b83ba\",\n \"d7191cfdae61ffffbfabdda42b83ba\",\n \"d53e4ffc8d59fee08be6f59899d5943288bd\",\n \"d53e4ffc8d59fee08bffffbfe6f59899d5943288bd\",\n \"d53e4ff46d43fdae61fee08be6f598abdda466c2a53288bd\",\n \"d53e4ff46d43fdae61fee08bffffbfe6f598abdda466c2a53288bd\",\n \"9e0142d53e4ff46d43fdae61fee08be6f598abdda466c2a53288bd5e4fa2\",\n \"9e0142d53e4ff46d43fdae61fee08bffffbfe6f598abdda466c2a53288bd5e4fa2\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"e5f5f999d8c92ca25f\",\n \"edf8fbb2e2e266c2a4238b45\",\n \"edf8fbb2e2e266c2a42ca25f006d2c\",\n \"edf8fbccece699d8c966c2a42ca25f006d2c\",\n \"edf8fbccece699d8c966c2a441ae76238b45005824\",\n \"f7fcfde5f5f9ccece699d8c966c2a441ae76238b45005824\",\n \"f7fcfde5f5f9ccece699d8c966c2a441ae76238b45006d2c00441b\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"e0ecf49ebcda8856a7\",\n \"edf8fbb3cde38c96c688419d\",\n \"edf8fbb3cde38c96c68856a7810f7c\",\n \"edf8fbbfd3e69ebcda8c96c68856a7810f7c\",\n \"edf8fbbfd3e69ebcda8c96c68c6bb188419d6e016b\",\n \"f7fcfde0ecf4bfd3e69ebcda8c96c68c6bb188419d6e016b\",\n \"f7fcfde0ecf4bfd3e69ebcda8c96c68c6bb188419d810f7c4d004b\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"e0f3dba8ddb543a2ca\",\n \"f0f9e8bae4bc7bccc42b8cbe\",\n \"f0f9e8bae4bc7bccc443a2ca0868ac\",\n \"f0f9e8ccebc5a8ddb57bccc443a2ca0868ac\",\n \"f0f9e8ccebc5a8ddb57bccc44eb3d32b8cbe08589e\",\n \"f7fcf0e0f3dbccebc5a8ddb57bccc44eb3d32b8cbe08589e\",\n \"f7fcf0e0f3dbccebc5a8ddb57bccc44eb3d32b8cbe0868ac084081\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"fee8c8fdbb84e34a33\",\n \"fef0d9fdcc8afc8d59d7301f\",\n \"fef0d9fdcc8afc8d59e34a33b30000\",\n \"fef0d9fdd49efdbb84fc8d59e34a33b30000\",\n \"fef0d9fdd49efdbb84fc8d59ef6548d7301f990000\",\n \"fff7ecfee8c8fdd49efdbb84fc8d59ef6548d7301f990000\",\n \"fff7ecfee8c8fdd49efdbb84fc8d59ef6548d7301fb300007f0000\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"ece2f0a6bddb1c9099\",\n \"f6eff7bdc9e167a9cf02818a\",\n \"f6eff7bdc9e167a9cf1c9099016c59\",\n \"f6eff7d0d1e6a6bddb67a9cf1c9099016c59\",\n \"f6eff7d0d1e6a6bddb67a9cf3690c002818a016450\",\n \"fff7fbece2f0d0d1e6a6bddb67a9cf3690c002818a016450\",\n \"fff7fbece2f0d0d1e6a6bddb67a9cf3690c002818a016c59014636\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"ece7f2a6bddb2b8cbe\",\n \"f1eef6bdc9e174a9cf0570b0\",\n \"f1eef6bdc9e174a9cf2b8cbe045a8d\",\n \"f1eef6d0d1e6a6bddb74a9cf2b8cbe045a8d\",\n \"f1eef6d0d1e6a6bddb74a9cf3690c00570b0034e7b\",\n \"fff7fbece7f2d0d1e6a6bddb74a9cf3690c00570b0034e7b\",\n \"fff7fbece7f2d0d1e6a6bddb74a9cf3690c00570b0045a8d023858\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"e7e1efc994c7dd1c77\",\n \"f1eef6d7b5d8df65b0ce1256\",\n \"f1eef6d7b5d8df65b0dd1c77980043\",\n \"f1eef6d4b9dac994c7df65b0dd1c77980043\",\n \"f1eef6d4b9dac994c7df65b0e7298ace125691003f\",\n \"f7f4f9e7e1efd4b9dac994c7df65b0e7298ace125691003f\",\n \"f7f4f9e7e1efd4b9dac994c7df65b0e7298ace125698004367001f\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"fde0ddfa9fb5c51b8a\",\n \"feebe2fbb4b9f768a1ae017e\",\n \"feebe2fbb4b9f768a1c51b8a7a0177\",\n \"feebe2fcc5c0fa9fb5f768a1c51b8a7a0177\",\n \"feebe2fcc5c0fa9fb5f768a1dd3497ae017e7a0177\",\n \"fff7f3fde0ddfcc5c0fa9fb5f768a1dd3497ae017e7a0177\",\n \"fff7f3fde0ddfcc5c0fa9fb5f768a1dd3497ae017e7a017749006a\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"edf8b17fcdbb2c7fb8\",\n \"ffffcca1dab441b6c4225ea8\",\n \"ffffcca1dab441b6c42c7fb8253494\",\n \"ffffccc7e9b47fcdbb41b6c42c7fb8253494\",\n \"ffffccc7e9b47fcdbb41b6c41d91c0225ea80c2c84\",\n \"ffffd9edf8b1c7e9b47fcdbb41b6c41d91c0225ea80c2c84\",\n \"ffffd9edf8b1c7e9b47fcdbb41b6c41d91c0225ea8253494081d58\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"f7fcb9addd8e31a354\",\n \"ffffccc2e69978c679238443\",\n \"ffffccc2e69978c67931a354006837\",\n \"ffffccd9f0a3addd8e78c67931a354006837\",\n \"ffffccd9f0a3addd8e78c67941ab5d238443005a32\",\n \"ffffe5f7fcb9d9f0a3addd8e78c67941ab5d238443005a32\",\n \"ffffe5f7fcb9d9f0a3addd8e78c67941ab5d238443006837004529\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"fff7bcfec44fd95f0e\",\n \"ffffd4fed98efe9929cc4c02\",\n \"ffffd4fed98efe9929d95f0e993404\",\n \"ffffd4fee391fec44ffe9929d95f0e993404\",\n \"ffffd4fee391fec44ffe9929ec7014cc4c028c2d04\",\n \"ffffe5fff7bcfee391fec44ffe9929ec7014cc4c028c2d04\",\n \"ffffe5fff7bcfee391fec44ffe9929ec7014cc4c02993404662506\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"ffeda0feb24cf03b20\",\n \"ffffb2fecc5cfd8d3ce31a1c\",\n \"ffffb2fecc5cfd8d3cf03b20bd0026\",\n \"ffffb2fed976feb24cfd8d3cf03b20bd0026\",\n \"ffffb2fed976feb24cfd8d3cfc4e2ae31a1cb10026\",\n \"ffffccffeda0fed976feb24cfd8d3cfc4e2ae31a1cb10026\",\n \"ffffccffeda0fed976feb24cfd8d3cfc4e2ae31a1cbd0026800026\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"deebf79ecae13182bd\",\n \"eff3ffbdd7e76baed62171b5\",\n \"eff3ffbdd7e76baed63182bd08519c\",\n \"eff3ffc6dbef9ecae16baed63182bd08519c\",\n \"eff3ffc6dbef9ecae16baed64292c62171b5084594\",\n \"f7fbffdeebf7c6dbef9ecae16baed64292c62171b5084594\",\n \"f7fbffdeebf7c6dbef9ecae16baed64292c62171b508519c08306b\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"e5f5e0a1d99b31a354\",\n \"edf8e9bae4b374c476238b45\",\n \"edf8e9bae4b374c47631a354006d2c\",\n \"edf8e9c7e9c0a1d99b74c47631a354006d2c\",\n \"edf8e9c7e9c0a1d99b74c47641ab5d238b45005a32\",\n \"f7fcf5e5f5e0c7e9c0a1d99b74c47641ab5d238b45005a32\",\n \"f7fcf5e5f5e0c7e9c0a1d99b74c47641ab5d238b45006d2c00441b\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"f0f0f0bdbdbd636363\",\n \"f7f7f7cccccc969696525252\",\n \"f7f7f7cccccc969696636363252525\",\n \"f7f7f7d9d9d9bdbdbd969696636363252525\",\n \"f7f7f7d9d9d9bdbdbd969696737373525252252525\",\n \"fffffff0f0f0d9d9d9bdbdbd969696737373525252252525\",\n \"fffffff0f0f0d9d9d9bdbdbd969696737373525252252525000000\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"efedf5bcbddc756bb1\",\n \"f2f0f7cbc9e29e9ac86a51a3\",\n \"f2f0f7cbc9e29e9ac8756bb154278f\",\n \"f2f0f7dadaebbcbddc9e9ac8756bb154278f\",\n \"f2f0f7dadaebbcbddc9e9ac8807dba6a51a34a1486\",\n \"fcfbfdefedf5dadaebbcbddc9e9ac8807dba6a51a34a1486\",\n \"fcfbfdefedf5dadaebbcbddc9e9ac8807dba6a51a354278f3f007d\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"fee0d2fc9272de2d26\",\n \"fee5d9fcae91fb6a4acb181d\",\n \"fee5d9fcae91fb6a4ade2d26a50f15\",\n \"fee5d9fcbba1fc9272fb6a4ade2d26a50f15\",\n \"fee5d9fcbba1fc9272fb6a4aef3b2ccb181d99000d\",\n \"fff5f0fee0d2fcbba1fc9272fb6a4aef3b2ccb181d99000d\",\n \"fff5f0fee0d2fcbba1fc9272fb6a4aef3b2ccb181da50f1567000d\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"fee6cefdae6be6550d\",\n \"feeddefdbe85fd8d3cd94701\",\n \"feeddefdbe85fd8d3ce6550da63603\",\n \"feeddefdd0a2fdae6bfd8d3ce6550da63603\",\n \"feeddefdd0a2fdae6bfd8d3cf16913d948018c2d04\",\n \"fff5ebfee6cefdd0a2fdae6bfd8d3cf16913d948018c2d04\",\n \"fff5ebfee6cefdd0a2fdae6bfd8d3cf16913d94801a636037f2704\"\n).map(colors);\n\nexport default ramp(scheme);\n","import {cubehelix} from \"d3-color\";\nimport {interpolateCubehelixLong} from \"d3-interpolate\";\n\nexport default interpolateCubehelixLong(cubehelix(300, 0.5, 0.0), cubehelix(-240, 0.5, 1.0));\n","import {cubehelix} from \"d3-color\";\nimport {interpolateCubehelixLong} from \"d3-interpolate\";\n\nexport var warm = interpolateCubehelixLong(cubehelix(-100, 0.75, 0.35), cubehelix(80, 1.50, 0.8));\n\nexport var cool = interpolateCubehelixLong(cubehelix(260, 0.75, 0.35), cubehelix(80, 1.50, 0.8));\n\nvar c = cubehelix();\n\nexport default function(t) {\n if (t < 0 || t > 1) t -= Math.floor(t);\n var ts = Math.abs(t - 0.5);\n c.h = 360 * t - 100;\n c.s = 1.5 - 1.5 * ts;\n c.l = 0.8 - 0.9 * ts;\n return c + \"\";\n}\n","import {rgb} from \"d3-color\";\n\nvar c = rgb(),\n pi_1_3 = Math.PI / 3,\n pi_2_3 = Math.PI * 2 / 3;\n\nexport default function(t) {\n var x;\n t = (0.5 - t) * Math.PI;\n c.r = 255 * (x = Math.sin(t)) * x;\n c.g = 255 * (x = Math.sin(t + pi_1_3)) * x;\n c.b = 255 * (x = Math.sin(t + pi_2_3)) * x;\n return c + \"\";\n}\n","import colors from \"../colors\";\n\nfunction ramp(range) {\n var n = range.length;\n return function(t) {\n return range[Math.max(0, Math.min(n - 1, Math.floor(t * n)))];\n };\n}\n\nexport default ramp(colors(\"44015444025645045745055946075a46085c460a5d460b5e470d60470e6147106347116447136548146748166848176948186a481a6c481b6d481c6e481d6f481f70482071482173482374482475482576482677482878482979472a7a472c7a472d7b472e7c472f7d46307e46327e46337f463480453581453781453882443983443a83443b84433d84433e85423f854240864241864142874144874045884046883f47883f48893e49893e4a893e4c8a3d4d8a3d4e8a3c4f8a3c508b3b518b3b528b3a538b3a548c39558c39568c38588c38598c375a8c375b8d365c8d365d8d355e8d355f8d34608d34618d33628d33638d32648e32658e31668e31678e31688e30698e306a8e2f6b8e2f6c8e2e6d8e2e6e8e2e6f8e2d708e2d718e2c718e2c728e2c738e2b748e2b758e2a768e2a778e2a788e29798e297a8e297b8e287c8e287d8e277e8e277f8e27808e26818e26828e26828e25838e25848e25858e24868e24878e23888e23898e238a8d228b8d228c8d228d8d218e8d218f8d21908d21918c20928c20928c20938c1f948c1f958b1f968b1f978b1f988b1f998a1f9a8a1e9b8a1e9c891e9d891f9e891f9f881fa0881fa1881fa1871fa28720a38620a48621a58521a68522a78522a88423a98324aa8325ab8225ac8226ad8127ad8128ae8029af7f2ab07f2cb17e2db27d2eb37c2fb47c31b57b32b67a34b67935b77937b87838b9773aba763bbb753dbc743fbc7340bd7242be7144bf7046c06f48c16e4ac16d4cc26c4ec36b50c46a52c56954c56856c66758c7655ac8645cc8635ec96260ca6063cb5f65cb5e67cc5c69cd5b6ccd5a6ece5870cf5773d05675d05477d1537ad1517cd2507fd34e81d34d84d44b86d54989d5488bd6468ed64590d74393d74195d84098d83e9bd93c9dd93ba0da39a2da37a5db36a8db34aadc32addc30b0dd2fb2dd2db5de2bb8de29bade28bddf26c0df25c2df23c5e021c8e020cae11fcde11dd0e11cd2e21bd5e21ad8e219dae319dde318dfe318e2e418e5e419e7e419eae51aece51befe51cf1e51df4e61ef6e620f8e621fbe723fde725\"));\n\nexport var magma = ramp(colors(\"00000401000501010601010802010902020b02020d03030f03031204041405041606051806051a07061c08071e0907200a08220b09240c09260d0a290e0b2b100b2d110c2f120d31130d34140e36150e38160f3b180f3d19103f1a10421c10441d11471e114920114b21114e22115024125325125527125829115a2a115c2c115f2d11612f116331116533106734106936106b38106c390f6e3b0f703d0f713f0f72400f74420f75440f764510774710784910784a10794c117a4e117b4f127b51127c52137c54137d56147d57157e59157e5a167e5c167f5d177f5f187f601880621980641a80651a80671b80681c816a1c816b1d816d1d816e1e81701f81721f817320817521817621817822817922827b23827c23827e24828025828125818326818426818627818827818928818b29818c29818e2a81902a81912b81932b80942c80962c80982d80992d809b2e7f9c2e7f9e2f7fa02f7fa1307ea3307ea5317ea6317da8327daa337dab337cad347cae347bb0357bb2357bb3367ab5367ab73779b83779ba3878bc3978bd3977bf3a77c03a76c23b75c43c75c53c74c73d73c83e73ca3e72cc3f71cd4071cf4070d0416fd2426fd3436ed5446dd6456cd8456cd9466bdb476adc4869de4968df4a68e04c67e24d66e34e65e44f64e55064e75263e85362e95462ea5661eb5760ec5860ed5a5fee5b5eef5d5ef05f5ef1605df2625df2645cf3655cf4675cf4695cf56b5cf66c5cf66e5cf7705cf7725cf8745cf8765cf9785df9795df97b5dfa7d5efa7f5efa815ffb835ffb8560fb8761fc8961fc8a62fc8c63fc8e64fc9065fd9266fd9467fd9668fd9869fd9a6afd9b6bfe9d6cfe9f6dfea16efea36ffea571fea772fea973feaa74feac76feae77feb078feb27afeb47bfeb67cfeb77efeb97ffebb81febd82febf84fec185fec287fec488fec68afec88cfeca8dfecc8ffecd90fecf92fed194fed395fed597fed799fed89afdda9cfddc9efddea0fde0a1fde2a3fde3a5fde5a7fde7a9fde9aafdebacfcecaefceeb0fcf0b2fcf2b4fcf4b6fcf6b8fcf7b9fcf9bbfcfbbdfcfdbf\"));\n\nexport var inferno = ramp(colors(\"00000401000501010601010802010a02020c02020e03021004031204031405041706041907051b08051d09061f0a07220b07240c08260d08290e092b10092d110a30120a32140b34150b37160b39180c3c190c3e1b0c411c0c431e0c451f0c48210c4a230c4c240c4f260c51280b53290b552b0b572d0b592f0a5b310a5c320a5e340a5f3609613809623909633b09643d09653e0966400a67420a68440a68450a69470b6a490b6a4a0c6b4c0c6b4d0d6c4f0d6c510e6c520e6d540f6d550f6d57106e59106e5a116e5c126e5d126e5f136e61136e62146e64156e65156e67166e69166e6a176e6c186e6d186e6f196e71196e721a6e741a6e751b6e771c6d781c6d7a1d6d7c1d6d7d1e6d7f1e6c801f6c82206c84206b85216b87216b88226a8a226a8c23698d23698f24699025689225689326679526679727669827669a28659b29649d29649f2a63a02a63a22b62a32c61a52c60a62d60a82e5fa92e5eab2f5ead305dae305cb0315bb1325ab3325ab43359b63458b73557b93556ba3655bc3754bd3853bf3952c03a51c13a50c33b4fc43c4ec63d4dc73e4cc83f4bca404acb4149cc4248ce4347cf4446d04545d24644d34743d44842d54a41d74b3fd84c3ed94d3dda4e3cdb503bdd513ade5238df5337e05536e15635e25734e35933e45a31e55c30e65d2fe75e2ee8602de9612bea632aeb6429eb6628ec6726ed6925ee6a24ef6c23ef6e21f06f20f1711ff1731df2741cf3761bf37819f47918f57b17f57d15f67e14f68013f78212f78410f8850ff8870ef8890cf98b0bf98c0af98e09fa9008fa9207fa9407fb9606fb9706fb9906fb9b06fb9d07fc9f07fca108fca309fca50afca60cfca80dfcaa0ffcac11fcae12fcb014fcb216fcb418fbb61afbb81dfbba1ffbbc21fbbe23fac026fac228fac42afac62df9c72ff9c932f9cb35f8cd37f8cf3af7d13df7d340f6d543f6d746f5d949f5db4cf4dd4ff4df53f4e156f3e35af3e55df2e661f2e865f2ea69f1ec6df1ed71f1ef75f1f179f2f27df2f482f3f586f3f68af4f88ef5f992f6fa96f8fb9af9fc9dfafda1fcffa4\"));\n\nexport var plasma = ramp(colors(\"0d088710078813078916078a19068c1b068d1d068e20068f2206902406912605912805922a05932c05942e05952f059631059733059735049837049938049a3a049a3c049b3e049c3f049c41049d43039e44039e46039f48039f4903a04b03a14c02a14e02a25002a25102a35302a35502a45601a45801a45901a55b01a55c01a65e01a66001a66100a76300a76400a76600a76700a86900a86a00a86c00a86e00a86f00a87100a87201a87401a87501a87701a87801a87a02a87b02a87d03a87e03a88004a88104a78305a78405a78606a68707a68808a68a09a58b0aa58d0ba58e0ca48f0da4910ea3920fa39410a29511a19613a19814a099159f9a169f9c179e9d189d9e199da01a9ca11b9ba21d9aa31e9aa51f99a62098a72197a82296aa2395ab2494ac2694ad2793ae2892b02991b12a90b22b8fb32c8eb42e8db52f8cb6308bb7318ab83289ba3388bb3488bc3587bd3786be3885bf3984c03a83c13b82c23c81c33d80c43e7fc5407ec6417dc7427cc8437bc9447aca457acb4679cc4778cc4977cd4a76ce4b75cf4c74d04d73d14e72d24f71d35171d45270d5536fd5546ed6556dd7566cd8576bd9586ada5a6ada5b69db5c68dc5d67dd5e66de5f65de6164df6263e06363e16462e26561e26660e3685fe4695ee56a5de56b5de66c5ce76e5be76f5ae87059e97158e97257ea7457eb7556eb7655ec7754ed7953ed7a52ee7b51ef7c51ef7e50f07f4ff0804ef1814df1834cf2844bf3854bf3874af48849f48948f58b47f58c46f68d45f68f44f79044f79143f79342f89441f89540f9973ff9983ef99a3efa9b3dfa9c3cfa9e3bfb9f3afba139fba238fca338fca537fca636fca835fca934fdab33fdac33fdae32fdaf31fdb130fdb22ffdb42ffdb52efeb72dfeb82cfeba2cfebb2bfebd2afebe2afec029fdc229fdc328fdc527fdc627fdc827fdca26fdcb26fccd25fcce25fcd025fcd225fbd324fbd524fbd724fad824fada24f9dc24f9dd25f8df25f8e125f7e225f7e425f6e626f6e826f5e926f5eb27f4ed27f3ee27f3f027f2f227f1f426f1f525f0f724f0f921\"));\n","const ReservedFields = {\n ROW_ID: '__id__'\n};\n\nexport default ReservedFields;\n","const CommonProps = {\n ACTION_INF: 'actionInf',\n ON_LAYER_DRAW: 'onlayerdraw'\n};\n\nexport default CommonProps;\n","export var slice = Array.prototype.slice;\n","export default function(x) {\n return x;\n}\n","import {slice} from \"./array\";\nimport identity from \"./identity\";\n\nvar top = 1,\n right = 2,\n bottom = 3,\n left = 4,\n epsilon = 1e-6;\n\nfunction translateX(x) {\n return \"translate(\" + (x + 0.5) + \",0)\";\n}\n\nfunction translateY(y) {\n return \"translate(0,\" + (y + 0.5) + \")\";\n}\n\nfunction number(scale) {\n return function(d) {\n return +scale(d);\n };\n}\n\nfunction center(scale) {\n var offset = Math.max(0, scale.bandwidth() - 1) / 2; // Adjust for 0.5px offset.\n if (scale.round()) offset = Math.round(offset);\n return function(d) {\n return +scale(d) + offset;\n };\n}\n\nfunction entering() {\n return !this.__axis;\n}\n\nfunction axis(orient, scale) {\n var tickArguments = [],\n tickValues = null,\n tickFormat = null,\n tickTransform = null,\n tickSizeInner = 6,\n tickSizeOuter = 6,\n tickPadding = 3,\n k = orient === top || orient === left ? -1 : 1,\n x = orient === left || orient === right ? \"x\" : \"y\",\n transform = orient === top || orient === bottom ? translateX : translateY;\n\n function axis(context) {\n var values = tickValues == null ? (scale.ticks ? scale.ticks.apply(scale, tickArguments) : scale.domain()) : tickValues,\n format = tickFormat == null ? (scale.tickFormat ? scale.tickFormat.apply(scale, tickArguments) : identity) : tickFormat,\n spacing = Math.max(tickSizeInner, 0) + tickPadding,\n range = scale.range(),\n range0 = +range[0] + 0.5,\n range1 = +range[range.length - 1] + 0.5,\n position = (scale.bandwidth ? center : number)(scale.copy()),\n selection = context.selection ? context.selection() : context,\n path = selection.selectAll(\".domain\").data([null]),\n tick = selection.selectAll(\".tick\").data(values, scale).order(),\n tickExit = tick.exit(),\n tickEnter = tick.enter().append(\"g\").attr(\"class\", \"tick\"),\n line = tick.select(\"line\"),\n text = tick.select(\"text\");\n\n path = path.merge(path.enter().insert(\"path\", \".tick\")\n .attr(\"class\", \"domain\")\n .attr(\"stroke\", \"#000\"));\n\n tick = tick.merge(tickEnter);\n\n line = line.merge(tickEnter.append(\"line\")\n .attr(\"stroke\", \"#000\")\n .attr(x + \"2\", k * tickSizeInner));\n\n text = text.merge(tickEnter.append(\"text\")\n .attr(\"fill\", \"#000\")\n .attr(x, k * spacing)\n .attr(\"dy\", orient === top ? \"0em\" : orient === bottom ? \"0.71em\" : \"0.32em\"))\n .style('transform', tickTransform);\n\n if (context !== selection) {\n path = path.transition(context);\n tick = tick.transition(context);\n line = line.transition(context);\n text = text.transition(context);\n\n tickExit = tickExit.transition(context)\n .attr(\"opacity\", epsilon)\n .attr(\"transform\", function(d) { return isFinite(d = position(d)) ? transform(d) : this.getAttribute(\"transform\"); });\n\n tickEnter\n .attr(\"opacity\", epsilon)\n .attr(\"transform\", function(d) { var p = this.parentNode.__axis; return transform(p && isFinite(p = p(d)) ? p : position(d)); });\n }\n\n tickExit.remove();\n\n path\n .attr(\"d\", orient === left || orient == right\n ? \"M\" + k * tickSizeOuter + \",\" + range0 + \"H0.5V\" + range1 + \"H\" + k * tickSizeOuter\n : \"M\" + range0 + \",\" + k * tickSizeOuter + \"V0.5H\" + range1 + \"V\" + k * tickSizeOuter);\n\n tick\n .attr(\"opacity\", 1)\n .attr(\"transform\", function(d) { return transform(position(d)); });\n\n line\n .attr(x + \"2\", k * tickSizeInner);\n\n text\n .attr(x, k * spacing)\n .text(format);\n\n selection.filter(entering)\n .attr(\"fill\", \"none\")\n .attr(\"font-size\", 10)\n .attr(\"font-family\", \"sans-serif\")\n .attr(\"text-anchor\", orient === right ? \"start\" : orient === left ? \"end\" : \"middle\");\n\n selection\n .each(function() { this.__axis = position; });\n }\n\n axis.scale = function(_) {\n return arguments.length ? (scale = _, axis) : scale;\n };\n\n axis.tickTransform = function(_) {\n return arguments.length ? (tickTransform = _, axis) : tickTransform;\n };\n\n axis.ticks = function() {\n return tickArguments = slice.call(arguments), axis;\n };\n\n axis.tickArguments = function(_) {\n return arguments.length ? (tickArguments = _ == null ? [] : slice.call(_), axis) : tickArguments.slice();\n };\n\n axis.tickValues = function(_) {\n return arguments.length ? (tickValues = _ == null ? null : slice.call(_), axis) : tickValues && tickValues.slice();\n };\n\n axis.tickFormat = function(_) {\n return arguments.length ? (tickFormat = _, axis) : tickFormat;\n };\n\n axis.tickSize = function(_) {\n return arguments.length ? (tickSizeInner = tickSizeOuter = +_, axis) : tickSizeInner;\n };\n\n axis.tickSizeInner = function(_) {\n return arguments.length ? (tickSizeInner = +_, axis) : tickSizeInner;\n };\n\n axis.tickSizeOuter = function(_) {\n return arguments.length ? (tickSizeOuter = +_, axis) : tickSizeOuter;\n };\n\n axis.tickPadding = function(_) {\n return arguments.length ? (tickPadding = +_, axis) : tickPadding;\n };\n\n return axis;\n}\n\nexport function axisTop(scale) {\n return axis(top, scale);\n}\n\nexport function axisRight(scale) {\n return axis(right, scale);\n}\n\nexport function axisBottom(scale) {\n return axis(bottom, scale);\n}\n\nexport function axisLeft(scale) {\n return axis(left, scale);\n}\n","var pi = Math.PI,\n tau = 2 * pi,\n epsilon = 1e-6,\n tauEpsilon = tau - epsilon;\n\nfunction Path() {\n this._x0 = this._y0 = // start of current subpath\n this._x1 = this._y1 = null; // end of current subpath\n this._ = \"\";\n}\n\nfunction path() {\n return new Path;\n}\n\nPath.prototype = path.prototype = {\n constructor: Path,\n moveTo: function(x, y) {\n this._ += \"M\" + (this._x0 = this._x1 = +x) + \",\" + (this._y0 = this._y1 = +y);\n },\n closePath: function() {\n if (this._x1 !== null) {\n this._x1 = this._x0, this._y1 = this._y0;\n this._ += \"Z\";\n }\n },\n lineTo: function(x, y) {\n this._ += \"L\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n },\n quadraticCurveTo: function(x1, y1, x, y) {\n this._ += \"Q\" + (+x1) + \",\" + (+y1) + \",\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n },\n bezierCurveTo: function(x1, y1, x2, y2, x, y) {\n this._ += \"C\" + (+x1) + \",\" + (+y1) + \",\" + (+x2) + \",\" + (+y2) + \",\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n },\n arcTo: function(x1, y1, x2, y2, r) {\n x1 = +x1, y1 = +y1, x2 = +x2, y2 = +y2, r = +r;\n var x0 = this._x1,\n y0 = this._y1,\n x21 = x2 - x1,\n y21 = y2 - y1,\n x01 = x0 - x1,\n y01 = y0 - y1,\n l01_2 = x01 * x01 + y01 * y01;\n\n // Is the radius negative? Error.\n if (r < 0) throw new Error(\"negative radius: \" + r);\n\n // Is this path empty? Move to (x1,y1).\n if (this._x1 === null) {\n this._ += \"M\" + (this._x1 = x1) + \",\" + (this._y1 = y1);\n }\n\n // Or, is (x1,y1) coincident with (x0,y0)? Do nothing.\n else if (!(l01_2 > epsilon));\n\n // Or, are (x0,y0), (x1,y1) and (x2,y2) collinear?\n // Equivalently, is (x1,y1) coincident with (x2,y2)?\n // Or, is the radius zero? Line to (x1,y1).\n else if (!(Math.abs(y01 * x21 - y21 * x01) > epsilon) || !r) {\n this._ += \"L\" + (this._x1 = x1) + \",\" + (this._y1 = y1);\n }\n\n // Otherwise, draw an arc!\n else {\n var x20 = x2 - x0,\n y20 = y2 - y0,\n l21_2 = x21 * x21 + y21 * y21,\n l20_2 = x20 * x20 + y20 * y20,\n l21 = Math.sqrt(l21_2),\n l01 = Math.sqrt(l01_2),\n l = r * Math.tan((pi - Math.acos((l21_2 + l01_2 - l20_2) / (2 * l21 * l01))) / 2),\n t01 = l / l01,\n t21 = l / l21;\n\n // If the start tangent is not coincident with (x0,y0), line to.\n if (Math.abs(t01 - 1) > epsilon) {\n this._ += \"L\" + (x1 + t01 * x01) + \",\" + (y1 + t01 * y01);\n }\n\n this._ += \"A\" + r + \",\" + r + \",0,0,\" + (+(y01 * x20 > x01 * y20)) + \",\" + (this._x1 = x1 + t21 * x21) + \",\" + (this._y1 = y1 + t21 * y21);\n }\n },\n arc: function(x, y, r, a0, a1, ccw) {\n x = +x, y = +y, r = +r;\n var dx = r * Math.cos(a0),\n dy = r * Math.sin(a0),\n x0 = x + dx,\n y0 = y + dy,\n cw = 1 ^ ccw,\n da = ccw ? a0 - a1 : a1 - a0;\n\n // Is the radius negative? Error.\n if (r < 0) throw new Error(\"negative radius: \" + r);\n\n // Is this path empty? Move to (x0,y0).\n if (this._x1 === null) {\n this._ += \"M\" + x0 + \",\" + y0;\n }\n\n // Or, is (x0,y0) not coincident with the previous point? Line to (x0,y0).\n else if (Math.abs(this._x1 - x0) > epsilon || Math.abs(this._y1 - y0) > epsilon) {\n this._ += \"L\" + x0 + \",\" + y0;\n }\n\n // Is this arc empty? We’re done.\n if (!r) return;\n\n // Does the angle go the wrong way? Flip the direction.\n if (da < 0) da = da % tau + tau;\n\n // Is this a complete circle? Draw two arcs to complete the circle.\n if (da > tauEpsilon) {\n this._ += \"A\" + r + \",\" + r + \",0,1,\" + cw + \",\" + (x - dx) + \",\" + (y - dy) + \"A\" + r + \",\" + r + \",0,1,\" + cw + \",\" + (this._x1 = x0) + \",\" + (this._y1 = y0);\n }\n\n // Is this arc non-empty? Draw an arc!\n else if (da > epsilon) {\n this._ += \"A\" + r + \",\" + r + \",0,\" + (+(da >= pi)) + \",\" + cw + \",\" + (this._x1 = x + r * Math.cos(a1)) + \",\" + (this._y1 = y + r * Math.sin(a1));\n }\n },\n rect: function(x, y, w, h) {\n this._ += \"M\" + (this._x0 = this._x1 = +x) + \",\" + (this._y0 = this._y1 = +y) + \"h\" + (+w) + \"v\" + (+h) + \"h\" + (-w) + \"Z\";\n },\n toString: function() {\n return this._;\n }\n};\n\nexport default path;\n","export default function(x) {\n return function constant() {\n return x;\n };\n}\n","export var abs = Math.abs;\nexport var atan2 = Math.atan2;\nexport var cos = Math.cos;\nexport var max = Math.max;\nexport var min = Math.min;\nexport var sin = Math.sin;\nexport var sqrt = Math.sqrt;\n\nexport var epsilon = 1e-12;\nexport var pi = Math.PI;\nexport var halfPi = pi / 2;\nexport var tau = 2 * pi;\n\nexport function acos(x) {\n return x > 1 ? 0 : x < -1 ? pi : Math.acos(x);\n}\n\nexport function asin(x) {\n return x >= 1 ? halfPi : x <= -1 ? -halfPi : Math.asin(x);\n}\n","import {path} from \"d3-path\";\nimport constant from \"./constant\";\nimport {abs, acos, asin, atan2, cos, epsilon, halfPi, max, min, pi, sin, sqrt, tau} from \"./math\";\n\nfunction arcInnerRadius(d) {\n return d.innerRadius;\n}\n\nfunction arcOuterRadius(d) {\n return d.outerRadius;\n}\n\nfunction arcStartAngle(d) {\n return d.startAngle;\n}\n\nfunction arcEndAngle(d) {\n return d.endAngle;\n}\n\nfunction arcPadAngle(d) {\n return d && d.padAngle; // Note: optional!\n}\n\nfunction intersect(x0, y0, x1, y1, x2, y2, x3, y3) {\n var x10 = x1 - x0, y10 = y1 - y0,\n x32 = x3 - x2, y32 = y3 - y2,\n t = (x32 * (y0 - y2) - y32 * (x0 - x2)) / (y32 * x10 - x32 * y10);\n return [x0 + t * x10, y0 + t * y10];\n}\n\n// Compute perpendicular offset line of length rc.\n// http://mathworld.wolfram.com/Circle-LineIntersection.html\nfunction cornerTangents(x0, y0, x1, y1, r1, rc, cw) {\n var x01 = x0 - x1,\n y01 = y0 - y1,\n lo = (cw ? rc : -rc) / sqrt(x01 * x01 + y01 * y01),\n ox = lo * y01,\n oy = -lo * x01,\n x11 = x0 + ox,\n y11 = y0 + oy,\n x10 = x1 + ox,\n y10 = y1 + oy,\n x00 = (x11 + x10) / 2,\n y00 = (y11 + y10) / 2,\n dx = x10 - x11,\n dy = y10 - y11,\n d2 = dx * dx + dy * dy,\n r = r1 - rc,\n D = x11 * y10 - x10 * y11,\n d = (dy < 0 ? -1 : 1) * sqrt(max(0, r * r * d2 - D * D)),\n cx0 = (D * dy - dx * d) / d2,\n cy0 = (-D * dx - dy * d) / d2,\n cx1 = (D * dy + dx * d) / d2,\n cy1 = (-D * dx + dy * d) / d2,\n dx0 = cx0 - x00,\n dy0 = cy0 - y00,\n dx1 = cx1 - x00,\n dy1 = cy1 - y00;\n\n // Pick the closer of the two intersection points.\n // TODO Is there a faster way to determine which intersection to use?\n if (dx0 * dx0 + dy0 * dy0 > dx1 * dx1 + dy1 * dy1) cx0 = cx1, cy0 = cy1;\n\n return {\n cx: cx0,\n cy: cy0,\n x01: -ox,\n y01: -oy,\n x11: cx0 * (r1 / r - 1),\n y11: cy0 * (r1 / r - 1)\n };\n}\n\nexport default function() {\n var innerRadius = arcInnerRadius,\n outerRadius = arcOuterRadius,\n cornerRadius = constant(0),\n padRadius = null,\n startAngle = arcStartAngle,\n endAngle = arcEndAngle,\n padAngle = arcPadAngle,\n context = null;\n\n function arc() {\n var buffer,\n r,\n r0 = +innerRadius.apply(this, arguments),\n r1 = +outerRadius.apply(this, arguments),\n a0 = startAngle.apply(this, arguments) - halfPi,\n a1 = endAngle.apply(this, arguments) - halfPi,\n da = abs(a1 - a0),\n cw = a1 > a0;\n\n if (!context) context = buffer = path();\n\n // Ensure that the outer radius is always larger than the inner radius.\n if (r1 < r0) r = r1, r1 = r0, r0 = r;\n\n // Is it a point?\n if (!(r1 > epsilon)) context.moveTo(0, 0);\n\n // Or is it a circle or annulus?\n else if (da > tau - epsilon) {\n context.moveTo(r1 * cos(a0), r1 * sin(a0));\n context.arc(0, 0, r1, a0, a1, !cw);\n if (r0 > epsilon) {\n context.moveTo(r0 * cos(a1), r0 * sin(a1));\n context.arc(0, 0, r0, a1, a0, cw);\n }\n }\n\n // Or is it a circular or annular sector?\n else {\n var a01 = a0,\n a11 = a1,\n a00 = a0,\n a10 = a1,\n da0 = da,\n da1 = da,\n ap = padAngle.apply(this, arguments) / 2,\n rp = (ap > epsilon) && (padRadius ? +padRadius.apply(this, arguments) : sqrt(r0 * r0 + r1 * r1)),\n rc = min(abs(r1 - r0) / 2, +cornerRadius.apply(this, arguments)),\n rc0 = rc,\n rc1 = rc,\n t0,\n t1;\n\n // Apply padding? Note that since r1 ≥ r0, da1 ≥ da0.\n if (rp > epsilon) {\n var p0 = asin(rp / r0 * sin(ap)),\n p1 = asin(rp / r1 * sin(ap));\n if ((da0 -= p0 * 2) > epsilon) p0 *= (cw ? 1 : -1), a00 += p0, a10 -= p0;\n else da0 = 0, a00 = a10 = (a0 + a1) / 2;\n if ((da1 -= p1 * 2) > epsilon) p1 *= (cw ? 1 : -1), a01 += p1, a11 -= p1;\n else da1 = 0, a01 = a11 = (a0 + a1) / 2;\n }\n\n var x01 = r1 * cos(a01),\n y01 = r1 * sin(a01),\n x10 = r0 * cos(a10),\n y10 = r0 * sin(a10);\n\n // Apply rounded corners?\n if (rc > epsilon) {\n var x11 = r1 * cos(a11),\n y11 = r1 * sin(a11),\n x00 = r0 * cos(a00),\n y00 = r0 * sin(a00);\n\n // Restrict the corner radius according to the sector angle.\n if (da < pi) {\n var oc = da0 > epsilon ? intersect(x01, y01, x00, y00, x11, y11, x10, y10) : [x10, y10],\n ax = x01 - oc[0],\n ay = y01 - oc[1],\n bx = x11 - oc[0],\n by = y11 - oc[1],\n kc = 1 / sin(acos((ax * bx + ay * by) / (sqrt(ax * ax + ay * ay) * sqrt(bx * bx + by * by))) / 2),\n lc = sqrt(oc[0] * oc[0] + oc[1] * oc[1]);\n rc0 = min(rc, (r0 - lc) / (kc - 1));\n rc1 = min(rc, (r1 - lc) / (kc + 1));\n }\n }\n\n // Is the sector collapsed to a line?\n if (!(da1 > epsilon)) context.moveTo(x01, y01);\n\n // Does the sector’s outer ring have rounded corners?\n else if (rc1 > epsilon) {\n t0 = cornerTangents(x00, y00, x01, y01, r1, rc1, cw);\n t1 = cornerTangents(x11, y11, x10, y10, r1, rc1, cw);\n\n context.moveTo(t0.cx + t0.x01, t0.cy + t0.y01);\n\n // Have the corners merged?\n if (rc1 < rc) context.arc(t0.cx, t0.cy, rc1, atan2(t0.y01, t0.x01), atan2(t1.y01, t1.x01), !cw);\n\n // Otherwise, draw the two corners and the ring.\n else {\n context.arc(t0.cx, t0.cy, rc1, atan2(t0.y01, t0.x01), atan2(t0.y11, t0.x11), !cw);\n context.arc(0, 0, r1, atan2(t0.cy + t0.y11, t0.cx + t0.x11), atan2(t1.cy + t1.y11, t1.cx + t1.x11), !cw);\n context.arc(t1.cx, t1.cy, rc1, atan2(t1.y11, t1.x11), atan2(t1.y01, t1.x01), !cw);\n }\n }\n\n // Or is the outer ring just a circular arc?\n else context.moveTo(x01, y01), context.arc(0, 0, r1, a01, a11, !cw);\n\n // Is there no inner ring, and it’s a circular sector?\n // Or perhaps it’s an annular sector collapsed due to padding?\n if (!(r0 > epsilon) || !(da0 > epsilon)) context.lineTo(x10, y10);\n\n // Does the sector’s inner ring (or point) have rounded corners?\n else if (rc0 > epsilon) {\n t0 = cornerTangents(x10, y10, x11, y11, r0, -rc0, cw);\n t1 = cornerTangents(x01, y01, x00, y00, r0, -rc0, cw);\n\n context.lineTo(t0.cx + t0.x01, t0.cy + t0.y01);\n\n // Have the corners merged?\n if (rc0 < rc) context.arc(t0.cx, t0.cy, rc0, atan2(t0.y01, t0.x01), atan2(t1.y01, t1.x01), !cw);\n\n // Otherwise, draw the two corners and the ring.\n else {\n context.arc(t0.cx, t0.cy, rc0, atan2(t0.y01, t0.x01), atan2(t0.y11, t0.x11), !cw);\n context.arc(0, 0, r0, atan2(t0.cy + t0.y11, t0.cx + t0.x11), atan2(t1.cy + t1.y11, t1.cx + t1.x11), cw);\n context.arc(t1.cx, t1.cy, rc0, atan2(t1.y11, t1.x11), atan2(t1.y01, t1.x01), !cw);\n }\n }\n\n // Or is the inner ring just a circular arc?\n else context.arc(0, 0, r0, a10, a00, cw);\n }\n\n context.closePath();\n\n if (buffer) return context = null, buffer + \"\" || null;\n }\n\n arc.centroid = function() {\n var r = (+innerRadius.apply(this, arguments) + +outerRadius.apply(this, arguments)) / 2,\n a = (+startAngle.apply(this, arguments) + +endAngle.apply(this, arguments)) / 2 - pi / 2;\n return [cos(a) * r, sin(a) * r];\n };\n\n arc.innerRadius = function(_) {\n return arguments.length ? (innerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : innerRadius;\n };\n\n arc.outerRadius = function(_) {\n return arguments.length ? (outerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : outerRadius;\n };\n\n arc.cornerRadius = function(_) {\n return arguments.length ? (cornerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : cornerRadius;\n };\n\n arc.padRadius = function(_) {\n return arguments.length ? (padRadius = _ == null ? null : typeof _ === \"function\" ? _ : constant(+_), arc) : padRadius;\n };\n\n arc.startAngle = function(_) {\n return arguments.length ? (startAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : startAngle;\n };\n\n arc.endAngle = function(_) {\n return arguments.length ? (endAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : endAngle;\n };\n\n arc.padAngle = function(_) {\n return arguments.length ? (padAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : padAngle;\n };\n\n arc.context = function(_) {\n return arguments.length ? ((context = _ == null ? null : _), arc) : context;\n };\n\n return arc;\n}\n","function Linear(context) {\n this._context = context;\n}\n\nLinear.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; // proceed\n default: this._context.lineTo(x, y); break;\n }\n }\n};\n\nexport default function(context) {\n return new Linear(context);\n}\n","export function x(p) {\n return p[0];\n}\n\nexport function y(p) {\n return p[1];\n}\n","import {path} from \"d3-path\";\nimport constant from \"./constant\";\nimport curveLinear from \"./curve/linear\";\nimport {x as pointX, y as pointY} from \"./point\";\n\nexport default function() {\n var x = pointX,\n y = pointY,\n defined = constant(true),\n context = null,\n curve = curveLinear,\n output = null;\n\n function line(data) {\n var i,\n n = data.length,\n d,\n defined0 = false,\n buffer;\n\n if (context == null) output = curve(buffer = path());\n\n for (i = 0; i <= n; ++i) {\n if (!(i < n && defined(d = data[i], i, data)) === defined0) {\n if (defined0 = !defined0) output.lineStart();\n else output.lineEnd();\n }\n if (defined0) output.point(+x(d, i, data), +y(d, i, data));\n }\n\n if (buffer) return output = null, buffer + \"\" || null;\n }\n\n line.x = function(_) {\n return arguments.length ? (x = typeof _ === \"function\" ? _ : constant(+_), line) : x;\n };\n\n line.y = function(_) {\n return arguments.length ? (y = typeof _ === \"function\" ? _ : constant(+_), line) : y;\n };\n\n line.defined = function(_) {\n return arguments.length ? (defined = typeof _ === \"function\" ? _ : constant(!!_), line) : defined;\n };\n\n line.curve = function(_) {\n return arguments.length ? (curve = _, context != null && (output = curve(context)), line) : curve;\n };\n\n line.context = function(_) {\n return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), line) : context;\n };\n\n return line;\n}\n","import {path} from \"d3-path\";\nimport constant from \"./constant\";\nimport curveLinear from \"./curve/linear\";\nimport line from \"./line\";\nimport {x as pointX, y as pointY} from \"./point\";\n\nexport default function() {\n var x0 = pointX,\n x1 = null,\n y0 = constant(0),\n y1 = pointY,\n defined = constant(true),\n context = null,\n curve = curveLinear,\n output = null;\n\n function area(data) {\n var i,\n j,\n k,\n n = data.length,\n d,\n defined0 = false,\n buffer,\n x0z = new Array(n),\n y0z = new Array(n);\n\n if (context == null) output = curve(buffer = path());\n\n for (i = 0; i <= n; ++i) {\n if (!(i < n && defined(d = data[i], i, data)) === defined0) {\n if (defined0 = !defined0) {\n j = i;\n output.areaStart();\n output.lineStart();\n } else {\n output.lineEnd();\n output.lineStart();\n for (k = i - 1; k >= j; --k) {\n output.point(x0z[k], y0z[k]);\n }\n output.lineEnd();\n output.areaEnd();\n }\n }\n if (defined0) {\n x0z[i] = +x0(d, i, data), y0z[i] = +y0(d, i, data);\n output.point(x1 ? +x1(d, i, data) : x0z[i], y1 ? +y1(d, i, data) : y0z[i]);\n }\n }\n\n if (buffer) return output = null, buffer + \"\" || null;\n }\n\n function arealine() {\n return line().defined(defined).curve(curve).context(context);\n }\n\n area.x = function(_) {\n return arguments.length ? (x0 = typeof _ === \"function\" ? _ : constant(+_), x1 = null, area) : x0;\n };\n\n area.x0 = function(_) {\n return arguments.length ? (x0 = typeof _ === \"function\" ? _ : constant(+_), area) : x0;\n };\n\n area.x1 = function(_) {\n return arguments.length ? (x1 = _ == null ? null : typeof _ === \"function\" ? _ : constant(+_), area) : x1;\n };\n\n area.y = function(_) {\n return arguments.length ? (y0 = typeof _ === \"function\" ? _ : constant(+_), y1 = null, area) : y0;\n };\n\n area.y0 = function(_) {\n return arguments.length ? (y0 = typeof _ === \"function\" ? _ : constant(+_), area) : y0;\n };\n\n area.y1 = function(_) {\n return arguments.length ? (y1 = _ == null ? null : typeof _ === \"function\" ? _ : constant(+_), area) : y1;\n };\n\n area.lineX0 =\n area.lineY0 = function() {\n return arealine().x(x0).y(y0);\n };\n\n area.lineY1 = function() {\n return arealine().x(x0).y(y1);\n };\n\n area.lineX1 = function() {\n return arealine().x(x1).y(y0);\n };\n\n area.defined = function(_) {\n return arguments.length ? (defined = typeof _ === \"function\" ? _ : constant(!!_), area) : defined;\n };\n\n area.curve = function(_) {\n return arguments.length ? (curve = _, context != null && (output = curve(context)), area) : curve;\n };\n\n area.context = function(_) {\n return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), area) : context;\n };\n\n return area;\n}\n","export default function(a, b) {\n return b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN;\n}\n","export default function(d) {\n return d;\n}\n","import curveLinear from \"./linear\";\n\nexport var curveRadialLinear = curveRadial(curveLinear);\n\nfunction Radial(curve) {\n this._curve = curve;\n}\n\nRadial.prototype = {\n areaStart: function() {\n this._curve.areaStart();\n },\n areaEnd: function() {\n this._curve.areaEnd();\n },\n lineStart: function() {\n this._curve.lineStart();\n },\n lineEnd: function() {\n this._curve.lineEnd();\n },\n point: function(a, r) {\n this._curve.point(r * Math.sin(a), r * -Math.cos(a));\n }\n};\n\nexport default function curveRadial(curve) {\n\n function radial(context) {\n return new Radial(curve(context));\n }\n\n radial._curve = curve;\n\n return radial;\n}\n","import curveRadial, {curveRadialLinear} from \"./curve/radial\";\nimport line from \"./line\";\n\nexport function lineRadial(l) {\n var c = l.curve;\n\n l.angle = l.x, delete l.x;\n l.radius = l.y, delete l.y;\n\n l.curve = function(_) {\n return arguments.length ? c(curveRadial(_)) : c()._curve;\n };\n\n return l;\n}\n\nexport default function() {\n return lineRadial(line().curve(curveRadialLinear));\n}\n","export var slice = Array.prototype.slice;\n","import {pi, tau} from \"../math\";\n\nexport default {\n draw: function(context, size) {\n var r = Math.sqrt(size / pi);\n context.moveTo(r, 0);\n context.arc(0, 0, r, 0, tau);\n }\n};\n","export default {\n draw: function(context, size) {\n var r = Math.sqrt(size / 5) / 2;\n context.moveTo(-3 * r, -r);\n context.lineTo(-r, -r);\n context.lineTo(-r, -3 * r);\n context.lineTo(r, -3 * r);\n context.lineTo(r, -r);\n context.lineTo(3 * r, -r);\n context.lineTo(3 * r, r);\n context.lineTo(r, r);\n context.lineTo(r, 3 * r);\n context.lineTo(-r, 3 * r);\n context.lineTo(-r, r);\n context.lineTo(-3 * r, r);\n context.closePath();\n }\n};\n","var tan30 = Math.sqrt(1 / 3),\n tan30_2 = tan30 * 2;\n\nexport default {\n draw: function(context, size) {\n var y = Math.sqrt(size / tan30_2),\n x = y * tan30;\n context.moveTo(0, -y);\n context.lineTo(x, 0);\n context.lineTo(0, y);\n context.lineTo(-x, 0);\n context.closePath();\n }\n};\n","import {pi, tau} from \"../math\";\n\nvar ka = 0.89081309152928522810,\n kr = Math.sin(pi / 10) / Math.sin(7 * pi / 10),\n kx = Math.sin(tau / 10) * kr,\n ky = -Math.cos(tau / 10) * kr;\n\nexport default {\n draw: function(context, size) {\n var r = Math.sqrt(size * ka),\n x = kx * r,\n y = ky * r;\n context.moveTo(0, -r);\n context.lineTo(x, y);\n for (var i = 1; i < 5; ++i) {\n var a = tau * i / 5,\n c = Math.cos(a),\n s = Math.sin(a);\n context.lineTo(s * r, -c * r);\n context.lineTo(c * x - s * y, s * x + c * y);\n }\n context.closePath();\n }\n};\n","export default {\n draw: function(context, size) {\n var w = Math.sqrt(size),\n x = -w / 2;\n context.rect(x, x, w, w);\n }\n};\n","var sqrt3 = Math.sqrt(3);\n\nexport default {\n draw: function(context, size) {\n var y = -Math.sqrt(size / (sqrt3 * 3));\n context.moveTo(0, y * 2);\n context.lineTo(-sqrt3 * y, -y);\n context.lineTo(sqrt3 * y, -y);\n context.closePath();\n }\n};\n","var c = -0.5,\n s = Math.sqrt(3) / 2,\n k = 1 / Math.sqrt(12),\n a = (k / 2 + 1) * 3;\n\nexport default {\n draw: function(context, size) {\n var r = Math.sqrt(size / a),\n x0 = r / 2,\n y0 = r * k,\n x1 = x0,\n y1 = r * k + r,\n x2 = -x1,\n y2 = y1;\n context.moveTo(x0, y0);\n context.lineTo(x1, y1);\n context.lineTo(x2, y2);\n context.lineTo(c * x0 - s * y0, s * x0 + c * y0);\n context.lineTo(c * x1 - s * y1, s * x1 + c * y1);\n context.lineTo(c * x2 - s * y2, s * x2 + c * y2);\n context.lineTo(c * x0 + s * y0, c * y0 - s * x0);\n context.lineTo(c * x1 + s * y1, c * y1 - s * x1);\n context.lineTo(c * x2 + s * y2, c * y2 - s * x2);\n context.closePath();\n }\n};\n","export default function() {}\n","export function point(that, x, y) {\n that._context.bezierCurveTo(\n (2 * that._x0 + that._x1) / 3,\n (2 * that._y0 + that._y1) / 3,\n (that._x0 + 2 * that._x1) / 3,\n (that._y0 + 2 * that._y1) / 3,\n (that._x0 + 4 * that._x1 + x) / 6,\n (that._y0 + 4 * that._y1 + y) / 6\n );\n}\n\nexport function Basis(context) {\n this._context = context;\n}\n\nBasis.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 =\n this._y0 = this._y1 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 3: point(this, this._x1, this._y1); // proceed\n case 2: this._context.lineTo(this._x1, this._y1); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; this._context.lineTo((5 * this._x0 + this._x1) / 6, (5 * this._y0 + this._y1) / 6); // proceed\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n }\n};\n\nexport default function(context) {\n return new Basis(context);\n}\n","import noop from \"../noop\";\nimport {point} from \"./basis\";\n\nfunction BasisClosed(context) {\n this._context = context;\n}\n\nBasisClosed.prototype = {\n areaStart: noop,\n areaEnd: noop,\n lineStart: function() {\n this._x0 = this._x1 = this._x2 = this._x3 = this._x4 =\n this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 1: {\n this._context.moveTo(this._x2, this._y2);\n this._context.closePath();\n break;\n }\n case 2: {\n this._context.moveTo((this._x2 + 2 * this._x3) / 3, (this._y2 + 2 * this._y3) / 3);\n this._context.lineTo((this._x3 + 2 * this._x2) / 3, (this._y3 + 2 * this._y2) / 3);\n this._context.closePath();\n break;\n }\n case 3: {\n this.point(this._x2, this._y2);\n this.point(this._x3, this._y3);\n this.point(this._x4, this._y4);\n break;\n }\n }\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._x2 = x, this._y2 = y; break;\n case 1: this._point = 2; this._x3 = x, this._y3 = y; break;\n case 2: this._point = 3; this._x4 = x, this._y4 = y; this._context.moveTo((this._x0 + 4 * this._x1 + x) / 6, (this._y0 + 4 * this._y1 + y) / 6); break;\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n }\n};\n\nexport default function(context) {\n return new BasisClosed(context);\n}\n","import {point} from \"./basis\";\n\nfunction BasisOpen(context) {\n this._context = context;\n}\n\nBasisOpen.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 =\n this._y0 = this._y1 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; var x0 = (this._x0 + 4 * this._x1 + x) / 6, y0 = (this._y0 + 4 * this._y1 + y) / 6; this._line ? this._context.lineTo(x0, y0) : this._context.moveTo(x0, y0); break;\n case 3: this._point = 4; // proceed\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n }\n};\n\nexport default function(context) {\n return new BasisOpen(context);\n}\n","import {Basis} from \"./basis\";\n\nfunction Bundle(context, beta) {\n this._basis = new Basis(context);\n this._beta = beta;\n}\n\nBundle.prototype = {\n lineStart: function() {\n this._x = [];\n this._y = [];\n this._basis.lineStart();\n },\n lineEnd: function() {\n var x = this._x,\n y = this._y,\n j = x.length - 1;\n\n if (j > 0) {\n var x0 = x[0],\n y0 = y[0],\n dx = x[j] - x0,\n dy = y[j] - y0,\n i = -1,\n t;\n\n while (++i <= j) {\n t = i / j;\n this._basis.point(\n this._beta * x[i] + (1 - this._beta) * (x0 + t * dx),\n this._beta * y[i] + (1 - this._beta) * (y0 + t * dy)\n );\n }\n }\n\n this._x = this._y = null;\n this._basis.lineEnd();\n },\n point: function(x, y) {\n this._x.push(+x);\n this._y.push(+y);\n }\n};\n\nexport default (function custom(beta) {\n\n function bundle(context) {\n return beta === 1 ? new Basis(context) : new Bundle(context, beta);\n }\n\n bundle.beta = function(beta) {\n return custom(+beta);\n };\n\n return bundle;\n})(0.85);\n","export function point(that, x, y) {\n that._context.bezierCurveTo(\n that._x1 + that._k * (that._x2 - that._x0),\n that._y1 + that._k * (that._y2 - that._y0),\n that._x2 + that._k * (that._x1 - x),\n that._y2 + that._k * (that._y1 - y),\n that._x2,\n that._y2\n );\n}\n\nexport function Cardinal(context, tension) {\n this._context = context;\n this._k = (1 - tension) / 6;\n}\n\nCardinal.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 2: this._context.lineTo(this._x2, this._y2); break;\n case 3: point(this, this._x1, this._y1); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; this._x1 = x, this._y1 = y; break;\n case 2: this._point = 3; // proceed\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(tension) {\n\n function cardinal(context) {\n return new Cardinal(context, tension);\n }\n\n cardinal.tension = function(tension) {\n return custom(+tension);\n };\n\n return cardinal;\n})(0);\n","import noop from \"../noop\";\nimport {point} from \"./cardinal\";\n\nexport function CardinalClosed(context, tension) {\n this._context = context;\n this._k = (1 - tension) / 6;\n}\n\nCardinalClosed.prototype = {\n areaStart: noop,\n areaEnd: noop,\n lineStart: function() {\n this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = this._x5 =\n this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = this._y5 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 1: {\n this._context.moveTo(this._x3, this._y3);\n this._context.closePath();\n break;\n }\n case 2: {\n this._context.lineTo(this._x3, this._y3);\n this._context.closePath();\n break;\n }\n case 3: {\n this.point(this._x3, this._y3);\n this.point(this._x4, this._y4);\n this.point(this._x5, this._y5);\n break;\n }\n }\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._x3 = x, this._y3 = y; break;\n case 1: this._point = 2; this._context.moveTo(this._x4 = x, this._y4 = y); break;\n case 2: this._point = 3; this._x5 = x, this._y5 = y; break;\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(tension) {\n\n function cardinal(context) {\n return new CardinalClosed(context, tension);\n }\n\n cardinal.tension = function(tension) {\n return custom(+tension);\n };\n\n return cardinal;\n})(0);\n","import {point} from \"./cardinal\";\n\nexport function CardinalOpen(context, tension) {\n this._context = context;\n this._k = (1 - tension) / 6;\n}\n\nCardinalOpen.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; this._line ? this._context.lineTo(this._x2, this._y2) : this._context.moveTo(this._x2, this._y2); break;\n case 3: this._point = 4; // proceed\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(tension) {\n\n function cardinal(context) {\n return new CardinalOpen(context, tension);\n }\n\n cardinal.tension = function(tension) {\n return custom(+tension);\n };\n\n return cardinal;\n})(0);\n","import {epsilon} from \"../math\";\nimport {Cardinal} from \"./cardinal\";\n\nexport function point(that, x, y) {\n var x1 = that._x1,\n y1 = that._y1,\n x2 = that._x2,\n y2 = that._y2;\n\n if (that._l01_a > epsilon) {\n var a = 2 * that._l01_2a + 3 * that._l01_a * that._l12_a + that._l12_2a,\n n = 3 * that._l01_a * (that._l01_a + that._l12_a);\n x1 = (x1 * a - that._x0 * that._l12_2a + that._x2 * that._l01_2a) / n;\n y1 = (y1 * a - that._y0 * that._l12_2a + that._y2 * that._l01_2a) / n;\n }\n\n if (that._l23_a > epsilon) {\n var b = 2 * that._l23_2a + 3 * that._l23_a * that._l12_a + that._l12_2a,\n m = 3 * that._l23_a * (that._l23_a + that._l12_a);\n x2 = (x2 * b + that._x1 * that._l23_2a - x * that._l12_2a) / m;\n y2 = (y2 * b + that._y1 * that._l23_2a - y * that._l12_2a) / m;\n }\n\n that._context.bezierCurveTo(x1, y1, x2, y2, that._x2, that._y2);\n}\n\nfunction CatmullRom(context, alpha) {\n this._context = context;\n this._alpha = alpha;\n}\n\nCatmullRom.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._l01_a = this._l12_a = this._l23_a =\n this._l01_2a = this._l12_2a = this._l23_2a =\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 2: this._context.lineTo(this._x2, this._y2); break;\n case 3: this.point(this._x2, this._y2); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n\n if (this._point) {\n var x23 = this._x2 - x,\n y23 = this._y2 - y;\n this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));\n }\n\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; // proceed\n default: point(this, x, y); break;\n }\n\n this._l01_a = this._l12_a, this._l12_a = this._l23_a;\n this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(alpha) {\n\n function catmullRom(context) {\n return alpha ? new CatmullRom(context, alpha) : new Cardinal(context, 0);\n }\n\n catmullRom.alpha = function(alpha) {\n return custom(+alpha);\n };\n\n return catmullRom;\n})(0.5);\n","import {CardinalClosed} from \"./cardinalClosed\";\nimport noop from \"../noop\";\nimport {point} from \"./catmullRom\";\n\nfunction CatmullRomClosed(context, alpha) {\n this._context = context;\n this._alpha = alpha;\n}\n\nCatmullRomClosed.prototype = {\n areaStart: noop,\n areaEnd: noop,\n lineStart: function() {\n this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = this._x5 =\n this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = this._y5 = NaN;\n this._l01_a = this._l12_a = this._l23_a =\n this._l01_2a = this._l12_2a = this._l23_2a =\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 1: {\n this._context.moveTo(this._x3, this._y3);\n this._context.closePath();\n break;\n }\n case 2: {\n this._context.lineTo(this._x3, this._y3);\n this._context.closePath();\n break;\n }\n case 3: {\n this.point(this._x3, this._y3);\n this.point(this._x4, this._y4);\n this.point(this._x5, this._y5);\n break;\n }\n }\n },\n point: function(x, y) {\n x = +x, y = +y;\n\n if (this._point) {\n var x23 = this._x2 - x,\n y23 = this._y2 - y;\n this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));\n }\n\n switch (this._point) {\n case 0: this._point = 1; this._x3 = x, this._y3 = y; break;\n case 1: this._point = 2; this._context.moveTo(this._x4 = x, this._y4 = y); break;\n case 2: this._point = 3; this._x5 = x, this._y5 = y; break;\n default: point(this, x, y); break;\n }\n\n this._l01_a = this._l12_a, this._l12_a = this._l23_a;\n this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(alpha) {\n\n function catmullRom(context) {\n return alpha ? new CatmullRomClosed(context, alpha) : new CardinalClosed(context, 0);\n }\n\n catmullRom.alpha = function(alpha) {\n return custom(+alpha);\n };\n\n return catmullRom;\n})(0.5);\n","import {CardinalOpen} from \"./cardinalOpen\";\nimport {point} from \"./catmullRom\";\n\nfunction CatmullRomOpen(context, alpha) {\n this._context = context;\n this._alpha = alpha;\n}\n\nCatmullRomOpen.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._l01_a = this._l12_a = this._l23_a =\n this._l01_2a = this._l12_2a = this._l23_2a =\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n\n if (this._point) {\n var x23 = this._x2 - x,\n y23 = this._y2 - y;\n this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));\n }\n\n switch (this._point) {\n case 0: this._point = 1; break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; this._line ? this._context.lineTo(this._x2, this._y2) : this._context.moveTo(this._x2, this._y2); break;\n case 3: this._point = 4; // proceed\n default: point(this, x, y); break;\n }\n\n this._l01_a = this._l12_a, this._l12_a = this._l23_a;\n this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(alpha) {\n\n function catmullRom(context) {\n return alpha ? new CatmullRomOpen(context, alpha) : new CardinalOpen(context, 0);\n }\n\n catmullRom.alpha = function(alpha) {\n return custom(+alpha);\n };\n\n return catmullRom;\n})(0.5);\n","import noop from \"../noop\";\n\nfunction LinearClosed(context) {\n this._context = context;\n}\n\nLinearClosed.prototype = {\n areaStart: noop,\n areaEnd: noop,\n lineStart: function() {\n this._point = 0;\n },\n lineEnd: function() {\n if (this._point) this._context.closePath();\n },\n point: function(x, y) {\n x = +x, y = +y;\n if (this._point) this._context.lineTo(x, y);\n else this._point = 1, this._context.moveTo(x, y);\n }\n};\n\nexport default function(context) {\n return new LinearClosed(context);\n}\n","function sign(x) {\n return x < 0 ? -1 : 1;\n}\n\n// Calculate the slopes of the tangents (Hermite-type interpolation) based on\n// the following paper: Steffen, M. 1990. A Simple Method for Monotonic\n// Interpolation in One Dimension. Astronomy and Astrophysics, Vol. 239, NO.\n// NOV(II), P. 443, 1990.\nfunction slope3(that, x2, y2) {\n var h0 = that._x1 - that._x0,\n h1 = x2 - that._x1,\n s0 = (that._y1 - that._y0) / (h0 || h1 < 0 && -0),\n s1 = (y2 - that._y1) / (h1 || h0 < 0 && -0),\n p = (s0 * h1 + s1 * h0) / (h0 + h1);\n return (sign(s0) + sign(s1)) * Math.min(Math.abs(s0), Math.abs(s1), 0.5 * Math.abs(p)) || 0;\n}\n\n// Calculate a one-sided slope.\nfunction slope2(that, t) {\n var h = that._x1 - that._x0;\n return h ? (3 * (that._y1 - that._y0) / h - t) / 2 : t;\n}\n\n// According to https://en.wikipedia.org/wiki/Cubic_Hermite_spline#Representations\n// \"you can express cubic Hermite interpolation in terms of cubic Bézier curves\n// with respect to the four values p0, p0 + m0 / 3, p1 - m1 / 3, p1\".\nfunction point(that, t0, t1) {\n var x0 = that._x0,\n y0 = that._y0,\n x1 = that._x1,\n y1 = that._y1,\n dx = (x1 - x0) / 3;\n that._context.bezierCurveTo(x0 + dx, y0 + dx * t0, x1 - dx, y1 - dx * t1, x1, y1);\n}\n\nfunction MonotoneX(context) {\n this._context = context;\n}\n\nMonotoneX.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 =\n this._y0 = this._y1 =\n this._t0 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 2: this._context.lineTo(this._x1, this._y1); break;\n case 3: point(this, this._t0, slope2(this, this._t0)); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n var t1 = NaN;\n\n x = +x, y = +y;\n if (x === this._x1 && y === this._y1) return; // Ignore coincident points.\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; point(this, slope2(this, t1 = slope3(this, x, y)), t1); break;\n default: point(this, this._t0, t1 = slope3(this, x, y)); break;\n }\n\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n this._t0 = t1;\n }\n}\n\nfunction MonotoneY(context) {\n this._context = new ReflectContext(context);\n}\n\n(MonotoneY.prototype = Object.create(MonotoneX.prototype)).point = function(x, y) {\n MonotoneX.prototype.point.call(this, y, x);\n};\n\nfunction ReflectContext(context) {\n this._context = context;\n}\n\nReflectContext.prototype = {\n moveTo: function(x, y) { this._context.moveTo(y, x); },\n closePath: function() { this._context.closePath(); },\n lineTo: function(x, y) { this._context.lineTo(y, x); },\n bezierCurveTo: function(x1, y1, x2, y2, x, y) { this._context.bezierCurveTo(y1, x1, y2, x2, y, x); }\n};\n\nexport function monotoneX(context) {\n return new MonotoneX(context);\n}\n\nexport function monotoneY(context) {\n return new MonotoneY(context);\n}\n","function Natural(context) {\n this._context = context;\n}\n\nNatural.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x = [];\n this._y = [];\n },\n lineEnd: function() {\n var x = this._x,\n y = this._y,\n n = x.length;\n\n if (n) {\n this._line ? this._context.lineTo(x[0], y[0]) : this._context.moveTo(x[0], y[0]);\n if (n === 2) {\n this._context.lineTo(x[1], y[1]);\n } else {\n var px = controlPoints(x),\n py = controlPoints(y);\n for (var i0 = 0, i1 = 1; i1 < n; ++i0, ++i1) {\n this._context.bezierCurveTo(px[0][i0], py[0][i0], px[1][i0], py[1][i0], x[i1], y[i1]);\n }\n }\n }\n\n if (this._line || (this._line !== 0 && n === 1)) this._context.closePath();\n this._line = 1 - this._line;\n this._x = this._y = null;\n },\n point: function(x, y) {\n this._x.push(+x);\n this._y.push(+y);\n }\n};\n\n// See https://www.particleincell.com/2012/bezier-splines/ for derivation.\nfunction controlPoints(x) {\n var i,\n n = x.length - 1,\n m,\n a = new Array(n),\n b = new Array(n),\n r = new Array(n);\n a[0] = 0, b[0] = 2, r[0] = x[0] + 2 * x[1];\n for (i = 1; i < n - 1; ++i) a[i] = 1, b[i] = 4, r[i] = 4 * x[i] + 2 * x[i + 1];\n a[n - 1] = 2, b[n - 1] = 7, r[n - 1] = 8 * x[n - 1] + x[n];\n for (i = 1; i < n; ++i) m = a[i] / b[i - 1], b[i] -= m, r[i] -= m * r[i - 1];\n a[n - 1] = r[n - 1] / b[n - 1];\n for (i = n - 2; i >= 0; --i) a[i] = (r[i] - a[i + 1]) / b[i];\n b[n - 1] = (x[n] + a[n - 1]) / 2;\n for (i = 0; i < n - 1; ++i) b[i] = 2 * x[i + 1] - a[i + 1];\n return [a, b];\n}\n\nexport default function(context) {\n return new Natural(context);\n}\n","function Step(context, t) {\n this._context = context;\n this._t = t;\n}\n\nStep.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x = this._y = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n if (0 < this._t && this._t < 1 && this._point === 2) this._context.lineTo(this._x, this._y);\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n if (this._line >= 0) this._t = 1 - this._t, this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; // proceed\n default: {\n if (this._t <= 0) {\n this._context.lineTo(this._x, y);\n this._context.lineTo(x, y);\n } else {\n var x1 = this._x * (1 - this._t) + x * this._t;\n this._context.lineTo(x1, this._y);\n this._context.lineTo(x1, y);\n }\n break;\n }\n }\n this._x = x, this._y = y;\n }\n};\n\nexport default function(context) {\n return new Step(context, 0.5);\n}\n\nexport function stepBefore(context) {\n return new Step(context, 0);\n}\n\nexport function stepAfter(context) {\n return new Step(context, 1);\n}\n","export default function(series, order) {\n if (!((n = series.length) > 1)) return;\n for (var i = 1, j, s0, s1 = series[order[0]], n, m = s1.length; i < n; ++i) {\n s0 = s1, s1 = series[order[i]];\n for (j = 0; j < m; ++j) {\n s1[j][1] += s1[j][0] = isNaN(s0[j][1]) ? s0[j][0] : s0[j][1];\n }\n }\n}\n","export default function(series) {\n var n = series.length, o = new Array(n);\n while (--n >= 0) o[n] = n;\n return o;\n}\n","import {slice} from \"./array\";\nimport constant from \"./constant\";\nimport offsetNone from \"./offset/none\";\nimport orderNone from \"./order/none\";\n\nfunction stackValue(d, key) {\n return d[key];\n}\n\nexport default function() {\n var keys = constant([]),\n order = orderNone,\n offset = offsetNone,\n value = stackValue;\n\n function stack(data) {\n var kz = keys.apply(this, arguments),\n i,\n m = data.length,\n n = kz.length,\n sz = new Array(n),\n oz;\n\n for (i = 0; i < n; ++i) {\n for (var ki = kz[i], si = sz[i] = new Array(m), j = 0, sij; j < m; ++j) {\n si[j] = sij = [0, +value(data[j], ki, j, data)];\n sij.data = data[j];\n }\n si.key = ki;\n }\n\n for (i = 0, oz = order(sz); i < n; ++i) {\n sz[oz[i]].index = i;\n }\n\n offset(sz, oz);\n return sz;\n }\n\n stack.keys = function(_) {\n return arguments.length ? (keys = typeof _ === \"function\" ? _ : constant(slice.call(_)), stack) : keys;\n };\n\n stack.value = function(_) {\n return arguments.length ? (value = typeof _ === \"function\" ? _ : constant(+_), stack) : value;\n };\n\n stack.order = function(_) {\n return arguments.length ? (order = _ == null ? orderNone : typeof _ === \"function\" ? _ : constant(slice.call(_)), stack) : order;\n };\n\n stack.offset = function(_) {\n return arguments.length ? (offset = _ == null ? offsetNone : _, stack) : offset;\n };\n\n return stack;\n}\n","import none from \"./none\";\n\nexport default function(series) {\n var sums = series.map(sum);\n return none(series).sort(function(a, b) { return sums[a] - sums[b]; });\n}\n\nexport function sum(series) {\n var s = 0, i = -1, n = series.length, v;\n while (++i < n) if (v = +series[i][1]) s += v;\n return s;\n}\n","export function cubicIn(t) {\n return t * t * t;\n}\n\nexport function cubicOut(t) {\n return --t * t * t + 1;\n}\n\nexport function cubicInOut(t) {\n return ((t *= 2) <= 1 ? t * t * t : (t -= 2) * t * t + 2) / 2;\n}\n","var exponent = 3;\n\nexport var polyIn = (function custom(e) {\n e = +e;\n\n function polyIn(t) {\n return Math.pow(t, e);\n }\n\n polyIn.exponent = custom;\n\n return polyIn;\n})(exponent);\n\nexport var polyOut = (function custom(e) {\n e = +e;\n\n function polyOut(t) {\n return 1 - Math.pow(1 - t, e);\n }\n\n polyOut.exponent = custom;\n\n return polyOut;\n})(exponent);\n\nexport var polyInOut = (function custom(e) {\n e = +e;\n\n function polyInOut(t) {\n return ((t *= 2) <= 1 ? Math.pow(t, e) : 2 - Math.pow(2 - t, e)) / 2;\n }\n\n polyInOut.exponent = custom;\n\n return polyInOut;\n})(exponent);\n","var pi = Math.PI,\n halfPi = pi / 2;\n\nexport function sinIn(t) {\n return 1 - Math.cos(t * halfPi);\n}\n\nexport function sinOut(t) {\n return Math.sin(t * halfPi);\n}\n\nexport function sinInOut(t) {\n return (1 - Math.cos(pi * t)) / 2;\n}\n","var b1 = 4 / 11,\n b2 = 6 / 11,\n b3 = 8 / 11,\n b4 = 3 / 4,\n b5 = 9 / 11,\n b6 = 10 / 11,\n b7 = 15 / 16,\n b8 = 21 / 22,\n b9 = 63 / 64,\n b0 = 1 / b1 / b1;\n\nexport function bounceIn(t) {\n return 1 - bounceOut(1 - t);\n}\n\nexport function bounceOut(t) {\n return (t = +t) < b1 ? b0 * t * t : t < b3 ? b0 * (t -= b2) * t + b4 : t < b6 ? b0 * (t -= b5) * t + b7 : b0 * (t -= b8) * t + b9;\n}\n\nexport function bounceInOut(t) {\n return ((t *= 2) <= 1 ? 1 - bounceOut(1 - t) : bounceOut(t - 1) + 1) / 2;\n}\n","var overshoot = 1.70158;\n\nexport var backIn = (function custom(s) {\n s = +s;\n\n function backIn(t) {\n return t * t * ((s + 1) * t - s);\n }\n\n backIn.overshoot = custom;\n\n return backIn;\n})(overshoot);\n\nexport var backOut = (function custom(s) {\n s = +s;\n\n function backOut(t) {\n return --t * t * ((s + 1) * t + s) + 1;\n }\n\n backOut.overshoot = custom;\n\n return backOut;\n})(overshoot);\n\nexport var backInOut = (function custom(s) {\n s = +s;\n\n function backInOut(t) {\n return ((t *= 2) < 1 ? t * t * ((s + 1) * t - s) : (t -= 2) * t * ((s + 1) * t + s) + 2) / 2;\n }\n\n backInOut.overshoot = custom;\n\n return backInOut;\n})(overshoot);\n","var tau = 2 * Math.PI,\n amplitude = 1,\n period = 0.3;\n\nexport var elasticIn = (function custom(a, p) {\n var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau);\n\n function elasticIn(t) {\n return a * Math.pow(2, 10 * --t) * Math.sin((s - t) / p);\n }\n\n elasticIn.amplitude = function(a) { return custom(a, p * tau); };\n elasticIn.period = function(p) { return custom(a, p); };\n\n return elasticIn;\n})(amplitude, period);\n\nexport var elasticOut = (function custom(a, p) {\n var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau);\n\n function elasticOut(t) {\n return 1 - a * Math.pow(2, -10 * (t = +t)) * Math.sin((t + s) / p);\n }\n\n elasticOut.amplitude = function(a) { return custom(a, p * tau); };\n elasticOut.period = function(p) { return custom(a, p); };\n\n return elasticOut;\n})(amplitude, period);\n\nexport var elasticInOut = (function custom(a, p) {\n var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau);\n\n function elasticInOut(t) {\n return ((t = t * 2 - 1) < 0\n ? a * Math.pow(2, 10 * t) * Math.sin((s - t) / p)\n : 2 - a * Math.pow(2, -10 * t) * Math.sin((s + t) / p)) / 2;\n }\n\n elasticInOut.amplitude = function(a) { return custom(a, p * tau); };\n elasticInOut.period = function(p) { return custom(a, p); };\n\n return elasticInOut;\n})(amplitude, period);\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","export function x(d) {\n return d[0];\n}\n\nexport function y(d) {\n return d[1];\n}\n","function RedBlackTree() {\n this._ = null; // root node\n}\n\nexport function RedBlackNode(node) {\n node.U = // parent node\n node.C = // color - true for red, false for black\n node.L = // left node\n node.R = // right node\n node.P = // previous node\n node.N = null; // next node\n}\n\nRedBlackTree.prototype = {\n constructor: RedBlackTree,\n\n insert: function(after, node) {\n var parent, grandpa, uncle;\n\n if (after) {\n node.P = after;\n node.N = after.N;\n if (after.N) after.N.P = node;\n after.N = node;\n if (after.R) {\n after = after.R;\n while (after.L) after = after.L;\n after.L = node;\n } else {\n after.R = node;\n }\n parent = after;\n } else if (this._) {\n after = RedBlackFirst(this._);\n node.P = null;\n node.N = after;\n after.P = after.L = node;\n parent = after;\n } else {\n node.P = node.N = null;\n this._ = node;\n parent = null;\n }\n node.L = node.R = null;\n node.U = parent;\n node.C = true;\n\n after = node;\n while (parent && parent.C) {\n grandpa = parent.U;\n if (parent === grandpa.L) {\n uncle = grandpa.R;\n if (uncle && uncle.C) {\n parent.C = uncle.C = false;\n grandpa.C = true;\n after = grandpa;\n } else {\n if (after === parent.R) {\n RedBlackRotateLeft(this, parent);\n after = parent;\n parent = after.U;\n }\n parent.C = false;\n grandpa.C = true;\n RedBlackRotateRight(this, grandpa);\n }\n } else {\n uncle = grandpa.L;\n if (uncle && uncle.C) {\n parent.C = uncle.C = false;\n grandpa.C = true;\n after = grandpa;\n } else {\n if (after === parent.L) {\n RedBlackRotateRight(this, parent);\n after = parent;\n parent = after.U;\n }\n parent.C = false;\n grandpa.C = true;\n RedBlackRotateLeft(this, grandpa);\n }\n }\n parent = after.U;\n }\n this._.C = false;\n },\n\n remove: function(node) {\n if (node.N) node.N.P = node.P;\n if (node.P) node.P.N = node.N;\n node.N = node.P = null;\n\n var parent = node.U,\n sibling,\n left = node.L,\n right = node.R,\n next,\n red;\n\n if (!left) next = right;\n else if (!right) next = left;\n else next = RedBlackFirst(right);\n\n if (parent) {\n if (parent.L === node) parent.L = next;\n else parent.R = next;\n } else {\n this._ = next;\n }\n\n if (left && right) {\n red = next.C;\n next.C = node.C;\n next.L = left;\n left.U = next;\n if (next !== right) {\n parent = next.U;\n next.U = node.U;\n node = next.R;\n parent.L = node;\n next.R = right;\n right.U = next;\n } else {\n next.U = parent;\n parent = next;\n node = next.R;\n }\n } else {\n red = node.C;\n node = next;\n }\n\n if (node) node.U = parent;\n if (red) return;\n if (node && node.C) { node.C = false; return; }\n\n do {\n if (node === this._) break;\n if (node === parent.L) {\n sibling = parent.R;\n if (sibling.C) {\n sibling.C = false;\n parent.C = true;\n RedBlackRotateLeft(this, parent);\n sibling = parent.R;\n }\n if ((sibling.L && sibling.L.C)\n || (sibling.R && sibling.R.C)) {\n if (!sibling.R || !sibling.R.C) {\n sibling.L.C = false;\n sibling.C = true;\n RedBlackRotateRight(this, sibling);\n sibling = parent.R;\n }\n sibling.C = parent.C;\n parent.C = sibling.R.C = false;\n RedBlackRotateLeft(this, parent);\n node = this._;\n break;\n }\n } else {\n sibling = parent.L;\n if (sibling.C) {\n sibling.C = false;\n parent.C = true;\n RedBlackRotateRight(this, parent);\n sibling = parent.L;\n }\n if ((sibling.L && sibling.L.C)\n || (sibling.R && sibling.R.C)) {\n if (!sibling.L || !sibling.L.C) {\n sibling.R.C = false;\n sibling.C = true;\n RedBlackRotateLeft(this, sibling);\n sibling = parent.L;\n }\n sibling.C = parent.C;\n parent.C = sibling.L.C = false;\n RedBlackRotateRight(this, parent);\n node = this._;\n break;\n }\n }\n sibling.C = true;\n node = parent;\n parent = parent.U;\n } while (!node.C);\n\n if (node) node.C = false;\n }\n};\n\nfunction RedBlackRotateLeft(tree, node) {\n var p = node,\n q = node.R,\n parent = p.U;\n\n if (parent) {\n if (parent.L === p) parent.L = q;\n else parent.R = q;\n } else {\n tree._ = q;\n }\n\n q.U = parent;\n p.U = q;\n p.R = q.L;\n if (p.R) p.R.U = p;\n q.L = p;\n}\n\nfunction RedBlackRotateRight(tree, node) {\n var p = node,\n q = node.L,\n parent = p.U;\n\n if (parent) {\n if (parent.L === p) parent.L = q;\n else parent.R = q;\n } else {\n tree._ = q;\n }\n\n q.U = parent;\n p.U = q;\n p.L = q.R;\n if (p.L) p.L.U = p;\n q.R = p;\n}\n\nfunction RedBlackFirst(node) {\n while (node.L) node = node.L;\n return node;\n}\n\nexport default RedBlackTree;\n","import {cells, edges, epsilon} from \"./Diagram\";\n\nexport function createEdge(left, right, v0, v1) {\n var edge = [null, null],\n index = edges.push(edge) - 1;\n edge.left = left;\n edge.right = right;\n if (v0) setEdgeEnd(edge, left, right, v0);\n if (v1) setEdgeEnd(edge, right, left, v1);\n cells[left.index].halfedges.push(index);\n cells[right.index].halfedges.push(index);\n return edge;\n}\n\nexport function createBorderEdge(left, v0, v1) {\n var edge = [v0, v1];\n edge.left = left;\n return edge;\n}\n\nexport function setEdgeEnd(edge, left, right, vertex) {\n if (!edge[0] && !edge[1]) {\n edge[0] = vertex;\n edge.left = left;\n edge.right = right;\n } else if (edge.left === right) {\n edge[1] = vertex;\n } else {\n edge[0] = vertex;\n }\n}\n\n// Liang–Barsky line clipping.\nfunction clipEdge(edge, x0, y0, x1, y1) {\n var a = edge[0],\n b = edge[1],\n ax = a[0],\n ay = a[1],\n bx = b[0],\n by = b[1],\n t0 = 0,\n t1 = 1,\n dx = bx - ax,\n dy = by - ay,\n r;\n\n r = x0 - ax;\n if (!dx && r > 0) return;\n r /= dx;\n if (dx < 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n } else if (dx > 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n }\n\n r = x1 - ax;\n if (!dx && r < 0) return;\n r /= dx;\n if (dx < 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n } else if (dx > 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n }\n\n r = y0 - ay;\n if (!dy && r > 0) return;\n r /= dy;\n if (dy < 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n } else if (dy > 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n }\n\n r = y1 - ay;\n if (!dy && r < 0) return;\n r /= dy;\n if (dy < 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n } else if (dy > 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n }\n\n if (!(t0 > 0) && !(t1 < 1)) return true; // TODO Better check?\n\n if (t0 > 0) edge[0] = [ax + t0 * dx, ay + t0 * dy];\n if (t1 < 1) edge[1] = [ax + t1 * dx, ay + t1 * dy];\n return true;\n}\n\nfunction connectEdge(edge, x0, y0, x1, y1) {\n var v1 = edge[1];\n if (v1) return true;\n\n var v0 = edge[0],\n left = edge.left,\n right = edge.right,\n lx = left[0],\n ly = left[1],\n rx = right[0],\n ry = right[1],\n fx = (lx + rx) / 2,\n fy = (ly + ry) / 2,\n fm,\n fb;\n\n if (ry === ly) {\n if (fx < x0 || fx >= x1) return;\n if (lx > rx) {\n if (!v0) v0 = [fx, y0];\n else if (v0[1] >= y1) return;\n v1 = [fx, y1];\n } else {\n if (!v0) v0 = [fx, y1];\n else if (v0[1] < y0) return;\n v1 = [fx, y0];\n }\n } else {\n fm = (lx - rx) / (ry - ly);\n fb = fy - fm * fx;\n if (fm < -1 || fm > 1) {\n if (lx > rx) {\n if (!v0) v0 = [(y0 - fb) / fm, y0];\n else if (v0[1] >= y1) return;\n v1 = [(y1 - fb) / fm, y1];\n } else {\n if (!v0) v0 = [(y1 - fb) / fm, y1];\n else if (v0[1] < y0) return;\n v1 = [(y0 - fb) / fm, y0];\n }\n } else {\n if (ly < ry) {\n if (!v0) v0 = [x0, fm * x0 + fb];\n else if (v0[0] >= x1) return;\n v1 = [x1, fm * x1 + fb];\n } else {\n if (!v0) v0 = [x1, fm * x1 + fb];\n else if (v0[0] < x0) return;\n v1 = [x0, fm * x0 + fb];\n }\n }\n }\n\n edge[0] = v0;\n edge[1] = v1;\n return true;\n}\n\nexport function clipEdges(x0, y0, x1, y1) {\n var i = edges.length,\n edge;\n\n while (i--) {\n if (!connectEdge(edge = edges[i], x0, y0, x1, y1)\n || !clipEdge(edge, x0, y0, x1, y1)\n || !(Math.abs(edge[0][0] - edge[1][0]) > epsilon\n || Math.abs(edge[0][1] - edge[1][1]) > epsilon)) {\n delete edges[i];\n }\n }\n}\n","import {createBorderEdge} from \"./Edge\";\nimport {cells, edges, epsilon} from \"./Diagram\";\n\nexport function createCell(site) {\n return cells[site.index] = {\n site: site,\n halfedges: []\n };\n}\n\nfunction cellHalfedgeAngle(cell, edge) {\n var site = cell.site,\n va = edge.left,\n vb = edge.right;\n if (site === vb) vb = va, va = site;\n if (vb) return Math.atan2(vb[1] - va[1], vb[0] - va[0]);\n if (site === va) va = edge[1], vb = edge[0];\n else va = edge[0], vb = edge[1];\n return Math.atan2(va[0] - vb[0], vb[1] - va[1]);\n}\n\nexport function cellHalfedgeStart(cell, edge) {\n return edge[+(edge.left !== cell.site)];\n}\n\nexport function cellHalfedgeEnd(cell, edge) {\n return edge[+(edge.left === cell.site)];\n}\n\nexport function sortCellHalfedges() {\n for (var i = 0, n = cells.length, cell, halfedges, j, m; i < n; ++i) {\n if ((cell = cells[i]) && (m = (halfedges = cell.halfedges).length)) {\n var index = new Array(m),\n array = new Array(m);\n for (j = 0; j < m; ++j) index[j] = j, array[j] = cellHalfedgeAngle(cell, edges[halfedges[j]]);\n index.sort(function(i, j) { return array[j] - array[i]; });\n for (j = 0; j < m; ++j) array[j] = halfedges[index[j]];\n for (j = 0; j < m; ++j) halfedges[j] = array[j];\n }\n }\n}\n\nexport function clipCells(x0, y0, x1, y1) {\n var nCells = cells.length,\n iCell,\n cell,\n site,\n iHalfedge,\n halfedges,\n nHalfedges,\n start,\n startX,\n startY,\n end,\n endX,\n endY,\n cover = true;\n\n for (iCell = 0; iCell < nCells; ++iCell) {\n if (cell = cells[iCell]) {\n site = cell.site;\n halfedges = cell.halfedges;\n iHalfedge = halfedges.length;\n\n // Remove any dangling clipped edges.\n while (iHalfedge--) {\n if (!edges[halfedges[iHalfedge]]) {\n halfedges.splice(iHalfedge, 1);\n }\n }\n\n // Insert any border edges as necessary.\n iHalfedge = 0, nHalfedges = halfedges.length;\n while (iHalfedge < nHalfedges) {\n end = cellHalfedgeEnd(cell, edges[halfedges[iHalfedge]]), endX = end[0], endY = end[1];\n start = cellHalfedgeStart(cell, edges[halfedges[++iHalfedge % nHalfedges]]), startX = start[0], startY = start[1];\n if (Math.abs(endX - startX) > epsilon || Math.abs(endY - startY) > epsilon) {\n halfedges.splice(iHalfedge, 0, edges.push(createBorderEdge(site, end,\n Math.abs(endX - x0) < epsilon && y1 - endY > epsilon ? [x0, Math.abs(startX - x0) < epsilon ? startY : y1]\n : Math.abs(endY - y1) < epsilon && x1 - endX > epsilon ? [Math.abs(startY - y1) < epsilon ? startX : x1, y1]\n : Math.abs(endX - x1) < epsilon && endY - y0 > epsilon ? [x1, Math.abs(startX - x1) < epsilon ? startY : y0]\n : Math.abs(endY - y0) < epsilon && endX - x0 > epsilon ? [Math.abs(startY - y0) < epsilon ? startX : x0, y0]\n : null)) - 1);\n ++nHalfedges;\n }\n }\n\n if (nHalfedges) cover = false;\n }\n }\n\n // If there weren’t any edges, have the closest site cover the extent.\n // It doesn’t matter which corner of the extent we measure!\n if (cover) {\n var dx, dy, d2, dc = Infinity;\n\n for (iCell = 0, cover = null; iCell < nCells; ++iCell) {\n if (cell = cells[iCell]) {\n site = cell.site;\n dx = site[0] - x0;\n dy = site[1] - y0;\n d2 = dx * dx + dy * dy;\n if (d2 < dc) dc = d2, cover = cell;\n }\n }\n\n if (cover) {\n var v00 = [x0, y0], v01 = [x0, y1], v11 = [x1, y1], v10 = [x1, y0];\n cover.halfedges.push(\n edges.push(createBorderEdge(site = cover.site, v00, v01)) - 1,\n edges.push(createBorderEdge(site, v01, v11)) - 1,\n edges.push(createBorderEdge(site, v11, v10)) - 1,\n edges.push(createBorderEdge(site, v10, v00)) - 1\n );\n }\n }\n\n // Lastly delete any cells with no edges; these were entirely clipped.\n for (iCell = 0; iCell < nCells; ++iCell) {\n if (cell = cells[iCell]) {\n if (!cell.halfedges.length) {\n delete cells[iCell];\n }\n }\n }\n}\n","import {RedBlackNode} from \"./RedBlackTree\";\nimport {circles, epsilon2} from \"./Diagram\";\n\nvar circlePool = [];\n\nexport var firstCircle;\n\nfunction Circle() {\n RedBlackNode(this);\n this.x =\n this.y =\n this.arc =\n this.site =\n this.cy = null;\n}\n\nexport function attachCircle(arc) {\n var lArc = arc.P,\n rArc = arc.N;\n\n if (!lArc || !rArc) return;\n\n var lSite = lArc.site,\n cSite = arc.site,\n rSite = rArc.site;\n\n if (lSite === rSite) return;\n\n var bx = cSite[0],\n by = cSite[1],\n ax = lSite[0] - bx,\n ay = lSite[1] - by,\n cx = rSite[0] - bx,\n cy = rSite[1] - by;\n\n var d = 2 * (ax * cy - ay * cx);\n if (d >= -epsilon2) return;\n\n var ha = ax * ax + ay * ay,\n hc = cx * cx + cy * cy,\n x = (cy * ha - ay * hc) / d,\n y = (ax * hc - cx * ha) / d;\n\n var circle = circlePool.pop() || new Circle;\n circle.arc = arc;\n circle.site = cSite;\n circle.x = x + bx;\n circle.y = (circle.cy = y + by) + Math.sqrt(x * x + y * y); // y bottom\n\n arc.circle = circle;\n\n var before = null,\n node = circles._;\n\n while (node) {\n if (circle.y < node.y || (circle.y === node.y && circle.x <= node.x)) {\n if (node.L) node = node.L;\n else { before = node.P; break; }\n } else {\n if (node.R) node = node.R;\n else { before = node; break; }\n }\n }\n\n circles.insert(before, circle);\n if (!before) firstCircle = circle;\n}\n\nexport function detachCircle(arc) {\n var circle = arc.circle;\n if (circle) {\n if (!circle.P) firstCircle = circle.N;\n circles.remove(circle);\n circlePool.push(circle);\n RedBlackNode(circle);\n arc.circle = null;\n }\n}\n","import {RedBlackNode} from \"./RedBlackTree\";\nimport {createCell} from \"./Cell\";\nimport {attachCircle, detachCircle} from \"./Circle\";\nimport {createEdge, setEdgeEnd} from \"./Edge\";\nimport {beaches, epsilon} from \"./Diagram\";\n\nvar beachPool = [];\n\nfunction Beach() {\n RedBlackNode(this);\n this.edge =\n this.site =\n this.circle = null;\n}\n\nfunction createBeach(site) {\n var beach = beachPool.pop() || new Beach;\n beach.site = site;\n return beach;\n}\n\nfunction detachBeach(beach) {\n detachCircle(beach);\n beaches.remove(beach);\n beachPool.push(beach);\n RedBlackNode(beach);\n}\n\nexport function removeBeach(beach) {\n var circle = beach.circle,\n x = circle.x,\n y = circle.cy,\n vertex = [x, y],\n previous = beach.P,\n next = beach.N,\n disappearing = [beach];\n\n detachBeach(beach);\n\n var lArc = previous;\n while (lArc.circle\n && Math.abs(x - lArc.circle.x) < epsilon\n && Math.abs(y - lArc.circle.cy) < epsilon) {\n previous = lArc.P;\n disappearing.unshift(lArc);\n detachBeach(lArc);\n lArc = previous;\n }\n\n disappearing.unshift(lArc);\n detachCircle(lArc);\n\n var rArc = next;\n while (rArc.circle\n && Math.abs(x - rArc.circle.x) < epsilon\n && Math.abs(y - rArc.circle.cy) < epsilon) {\n next = rArc.N;\n disappearing.push(rArc);\n detachBeach(rArc);\n rArc = next;\n }\n\n disappearing.push(rArc);\n detachCircle(rArc);\n\n var nArcs = disappearing.length,\n iArc;\n for (iArc = 1; iArc < nArcs; ++iArc) {\n rArc = disappearing[iArc];\n lArc = disappearing[iArc - 1];\n setEdgeEnd(rArc.edge, lArc.site, rArc.site, vertex);\n }\n\n lArc = disappearing[0];\n rArc = disappearing[nArcs - 1];\n rArc.edge = createEdge(lArc.site, rArc.site, null, vertex);\n\n attachCircle(lArc);\n attachCircle(rArc);\n}\n\nexport function addBeach(site) {\n var x = site[0],\n directrix = site[1],\n lArc,\n rArc,\n dxl,\n dxr,\n node = beaches._;\n\n while (node) {\n dxl = leftBreakPoint(node, directrix) - x;\n if (dxl > epsilon) node = node.L; else {\n dxr = x - rightBreakPoint(node, directrix);\n if (dxr > epsilon) {\n if (!node.R) {\n lArc = node;\n break;\n }\n node = node.R;\n } else {\n if (dxl > -epsilon) {\n lArc = node.P;\n rArc = node;\n } else if (dxr > -epsilon) {\n lArc = node;\n rArc = node.N;\n } else {\n lArc = rArc = node;\n }\n break;\n }\n }\n }\n\n createCell(site);\n var newArc = createBeach(site);\n beaches.insert(lArc, newArc);\n\n if (!lArc && !rArc) return;\n\n if (lArc === rArc) {\n detachCircle(lArc);\n rArc = createBeach(lArc.site);\n beaches.insert(newArc, rArc);\n newArc.edge = rArc.edge = createEdge(lArc.site, newArc.site);\n attachCircle(lArc);\n attachCircle(rArc);\n return;\n }\n\n if (!rArc) { // && lArc\n newArc.edge = createEdge(lArc.site, newArc.site);\n return;\n }\n\n // else lArc !== rArc\n detachCircle(lArc);\n detachCircle(rArc);\n\n var lSite = lArc.site,\n ax = lSite[0],\n ay = lSite[1],\n bx = site[0] - ax,\n by = site[1] - ay,\n rSite = rArc.site,\n cx = rSite[0] - ax,\n cy = rSite[1] - ay,\n d = 2 * (bx * cy - by * cx),\n hb = bx * bx + by * by,\n hc = cx * cx + cy * cy,\n vertex = [(cy * hb - by * hc) / d + ax, (bx * hc - cx * hb) / d + ay];\n\n setEdgeEnd(rArc.edge, lSite, rSite, vertex);\n newArc.edge = createEdge(lSite, site, null, vertex);\n rArc.edge = createEdge(site, rSite, null, vertex);\n attachCircle(lArc);\n attachCircle(rArc);\n}\n\nfunction leftBreakPoint(arc, directrix) {\n var site = arc.site,\n rfocx = site[0],\n rfocy = site[1],\n pby2 = rfocy - directrix;\n\n if (!pby2) return rfocx;\n\n var lArc = arc.P;\n if (!lArc) return -Infinity;\n\n site = lArc.site;\n var lfocx = site[0],\n lfocy = site[1],\n plby2 = lfocy - directrix;\n\n if (!plby2) return lfocx;\n\n var hl = lfocx - rfocx,\n aby2 = 1 / pby2 - 1 / plby2,\n b = hl / plby2;\n\n if (aby2) return (-b + Math.sqrt(b * b - 2 * aby2 * (hl * hl / (-2 * plby2) - lfocy + plby2 / 2 + rfocy - pby2 / 2))) / aby2 + rfocx;\n\n return (rfocx + lfocx) / 2;\n}\n\nfunction rightBreakPoint(arc, directrix) {\n var rArc = arc.N;\n if (rArc) return leftBreakPoint(rArc, directrix);\n var site = arc.site;\n return site[1] === directrix ? site[0] : Infinity;\n}\n","import {addBeach, removeBeach} from \"./Beach\";\nimport {sortCellHalfedges, cellHalfedgeStart, clipCells} from \"./Cell\";\nimport {firstCircle} from \"./Circle\";\nimport {clipEdges} from \"./Edge\";\nimport RedBlackTree from \"./RedBlackTree\";\n\nexport var epsilon = 1e-6;\nexport var epsilon2 = 1e-12;\nexport var beaches;\nexport var cells;\nexport var circles;\nexport var edges;\n\nfunction triangleArea(a, b, c) {\n return (a[0] - c[0]) * (b[1] - a[1]) - (a[0] - b[0]) * (c[1] - a[1]);\n}\n\nfunction lexicographic(a, b) {\n return b[1] - a[1]\n || b[0] - a[0];\n}\n\nexport default function Diagram(sites, extent) {\n var site = sites.sort(lexicographic).pop(),\n x,\n y,\n circle;\n\n edges = [];\n cells = new Array(sites.length);\n beaches = new RedBlackTree;\n circles = new RedBlackTree;\n\n while (true) {\n circle = firstCircle;\n if (site && (!circle || site[1] < circle.y || (site[1] === circle.y && site[0] < circle.x))) {\n if (site[0] !== x || site[1] !== y) {\n addBeach(site);\n x = site[0], y = site[1];\n }\n site = sites.pop();\n } else if (circle) {\n removeBeach(circle.arc);\n } else {\n break;\n }\n }\n\n sortCellHalfedges();\n\n if (extent) {\n var x0 = +extent[0][0],\n y0 = +extent[0][1],\n x1 = +extent[1][0],\n y1 = +extent[1][1];\n clipEdges(x0, y0, x1, y1);\n clipCells(x0, y0, x1, y1);\n }\n\n this.edges = edges;\n this.cells = cells;\n\n beaches =\n circles =\n edges =\n cells = null;\n}\n\nDiagram.prototype = {\n constructor: Diagram,\n\n polygons: function() {\n var edges = this.edges;\n\n return this.cells.map(function(cell) {\n var polygon = cell.halfedges.map(function(i) { return cellHalfedgeStart(cell, edges[i]); });\n polygon.data = cell.site.data;\n return polygon;\n });\n },\n\n triangles: function() {\n var triangles = [],\n edges = this.edges;\n\n this.cells.forEach(function(cell, i) {\n if (!(m = (halfedges = cell.halfedges).length)) return;\n var site = cell.site,\n halfedges,\n j = -1,\n m,\n s0,\n e1 = edges[halfedges[m - 1]],\n s1 = e1.left === site ? e1.right : e1.left;\n\n while (++j < m) {\n s0 = s1;\n e1 = edges[halfedges[j]];\n s1 = e1.left === site ? e1.right : e1.left;\n if (s0 && s1 && i < s0.index && i < s1.index && triangleArea(site, s0, s1) < 0) {\n triangles.push([site.data, s0.data, s1.data]);\n }\n }\n });\n\n return triangles;\n },\n\n links: function() {\n return this.edges.filter(function(edge) {\n return edge.right;\n }).map(function(edge) {\n return {\n source: edge.left.data,\n target: edge.right.data\n };\n });\n },\n\n find: function(x, y, radius) {\n var that = this, i0, i1 = that._found || 0, n = that.cells.length, cell;\n\n // Use the previously-found cell, or start with an arbitrary one.\n while (!(cell = that.cells[i1])) if (++i1 >= n) return null;\n var dx = x - cell.site[0], dy = y - cell.site[1], d2 = dx * dx + dy * dy;\n\n // Traverse the half-edges to find a closer cell, if any.\n do {\n cell = that.cells[i0 = i1], i1 = null;\n cell.halfedges.forEach(function(e) {\n var edge = that.edges[e], v = edge.left;\n if ((v === cell.site || !v) && !(v = edge.right)) return;\n var vx = x - v[0], vy = y - v[1], v2 = vx * vx + vy * vy;\n if (v2 < d2) d2 = v2, i1 = v.index;\n });\n } while (i1 !== null);\n\n that._found = i0;\n\n return radius == null || d2 <= radius * radius ? cell.site : null;\n }\n}\n","import constant from \"./constant\";\nimport {x as pointX, y as pointY} from \"./point\";\nimport Diagram, {epsilon} from \"./Diagram\";\n\nexport default function() {\n var x = pointX,\n y = pointY,\n extent = null;\n\n function voronoi(data) {\n return new Diagram(data.map(function(d, i) {\n var s = [Math.round(x(d, i, data) / epsilon) * epsilon, Math.round(y(d, i, data) / epsilon) * epsilon];\n s.index = i;\n s.data = d;\n return s;\n }), extent);\n }\n\n voronoi.polygons = function(data) {\n return voronoi(data).polygons();\n };\n\n voronoi.links = function(data) {\n return voronoi(data).links();\n };\n\n voronoi.triangles = function(data) {\n return voronoi(data).triangles();\n };\n\n voronoi.x = function(_) {\n return arguments.length ? (x = typeof _ === \"function\" ? _ : constant(+_), voronoi) : x;\n };\n\n voronoi.y = function(_) {\n return arguments.length ? (y = typeof _ === \"function\" ? _ : constant(+_), voronoi) : y;\n };\n\n voronoi.extent = function(_) {\n return arguments.length ? (extent = _ == null ? null : [[+_[0][0], +_[0][1]], [+_[1][0], +_[1][1]]], voronoi) : extent && [[extent[0][0], extent[0][1]], [extent[1][0], extent[1][1]]];\n };\n\n voronoi.size = function(_) {\n return arguments.length ? (extent = _ == null ? null : [[0, 0], [+_[0], +_[1]]], voronoi) : extent && [extent[1][0] - extent[0][0], extent[1][1] - extent[0][1]];\n };\n\n return voronoi;\n}\n","/* global window, requestAnimationFrame, cancelAnimationFrame */\nimport { FieldType, DimensionSubtype } from 'datamodel';\nimport {\n axisLeft,\n axisRight,\n axisTop,\n axisBottom\n} from 'd3-axis';\nimport {\n symbolCircle,\n symbolCross,\n symbolDiamond,\n symbolSquare,\n symbolStar,\n symbolWye,\n symbolTriangle,\n symbol,\n stack as d3Stack,\n stackOffsetDiverging,\n stackOrderNone,\n stackOrderAscending,\n stackOrderDescending,\n stackOffsetNone,\n stackOffsetExpand,\n stackOffsetWiggle,\n pie,\n arc,\n line,\n curveLinear,\n curveStepAfter,\n curveStepBefore,\n curveStep,\n curveCatmullRom,\n area\n} from 'd3-shape';\nimport { scaleBand } from 'd3-scale';\nimport { nest } from 'd3-collection';\nimport {\n interpolate,\n interpolateRgb,\n piecewise,\n interpolateNumber,\n interpolateHslLong\n} from 'd3-interpolate';\nimport {\n easeCubic,\n easeBounce,\n easePoly,\n easeBack,\n easeCircle,\n easeLinear,\n easeElastic\n} from 'd3-ease';\nimport {\n color,\n rgb,\n hsl\n} from 'd3-color';\nimport { voronoi } from 'd3-voronoi';\nimport Model from 'hyperdis';\nimport * as STACK_CONFIG from './enums/stack-config';\n\nconst HTMLElement = window.HTMLElement;\n\nconst isSimpleObject = (obj) => {\n let token;\n if (typeof obj === 'object') {\n if (obj === null) { return false; }\n token = Object.prototype.toString.call(obj);\n if (token === '[object Object]') {\n return (obj.constructor.toString().match(/^function (.*)\\(\\)/m) || [])[1] === 'Object';\n }\n }\n return false;\n};\n\n/**\n * Returns unique id\n * @return {string} Unique id string\n */\nconst\n getUniqueId = () => `id-${new Date().getTime()}${Math.round(Math.random() * 10000)}`;\n\n/**\n * Deep copies an object and returns a new object.\n * @param {Object} o Object to clone\n * @return {Object} New Object.\n */\nconst clone = (o) => {\n const output = {};\n let v;\n for (const key in o) {\n if ({}.hasOwnProperty.call(o, key)) {\n v = o[key];\n output[key] = isSimpleObject(v) ? clone(v) : v;\n }\n }\n return output;\n};\n\n/**\n* Checks the existence of keys in an object\n* @param {Array} keys Set of keys which are to be checked\n* @param {Object} obj whose keys are checked from the set of keys provided\n* @return {Object} Error if the keys are absent, or the object itself\n*/\nconst checkExistence = (keys, obj) => {\n const nonExistentKeys = [];\n keys.forEach((key) => {\n if (key in obj) {\n return;\n }\n nonExistentKeys.push(key);\n });\n return nonExistentKeys;\n};\n\nconst sanitizeIP = {\n typeObj: (keys, obj) => {\n if (typeof obj !== 'object') {\n return Error('Argument type object expected');\n }\n\n const nonExistentKeys = checkExistence(keys, obj);\n if (nonExistentKeys.length) {\n return Error(`Missing keys from parameter ${nonExistentKeys.join(', ')}`);\n }\n return obj;\n },\n\n /* istanbul ignore next */ htmlElem: (elem) => {\n if (!(elem instanceof HTMLElement)) {\n return Error('HTMLElement required');\n }\n return elem;\n }\n};\n\n/**\n * Gets the maximum value from an array of objects for a given property name\n * @param {Array.} data Array of objects\n * @param {string} field Field name\n * @return {number} Maximum value\n */\nconst getMax = (data, field) => Math.max(...data.filter(d => !isNaN(d[field])).map(d => d[field]));\n\n/**\n * Gets the minimum value from an array of objects for a given property name\n * @param {Array.} data Array of objects\n * @param {string} field Field name\n * @return {number} Minimum value\n */\nconst getMin = (data, field) => Math.min(...data.filter(d => !isNaN(d[field])).map(d => d[field]));\n\n/**\n * Gets the domain from the data based on the field name and type of field\n * @param {Array. | Array.} data Data Array\n * @param {Array.} fields Array of fields from where the domain will be calculated\n * @param {string} fieldType Type of field - nominal, quantitiative, temporal.\n * @return {Array} Usually contains a min and max value if field is quantitative or\n * an array of values if field type is nominal or ordinal\n */\nconst getDomainFromData = (data, fields, fieldType) => {\n let domain;\n let domArr;\n data = data[0] instanceof Array ? data : [data];\n switch (fieldType) {\n case DimensionSubtype.CATEGORICAL:\n domain = [].concat(...data.map(arr => arr.map(d => d[fields[0]]).filter(d => d !== undefined)));\n break;\n default:\n domArr = data.map((arr) => {\n const firstMin = getMin(arr, fields[0]);\n const secondMin = getMin(arr, fields[1]);\n const firstMax = getMax(arr, fields[0]);\n const secondMax = getMax(arr, fields[1]);\n return [Math.min(firstMin, secondMin), Math.max(firstMax, secondMax)];\n });\n domain = [Math.min(...domArr.map(d => d[0])), Math.max(...domArr.map(d => d[1]))];\n break;\n }\n return domain;\n};\n\n/**\n * Union Domain values\n * @param {Array.} domains Array of domain values\n * @param {string} fieldType type of field - dimension,measure or datetime.\n * @return {Array} Unioned domain of all domain values.\n */\nconst unionDomain = (domains, fieldType) => {\n let domain;\n domains = domains.filter(dom => dom.length);\n if (fieldType === DimensionSubtype.CATEGORICAL) {\n domain = domain = [].concat(...domains);\n } else {\n domain = [Math.min(...domains.map(d => d[0])), Math.max(...domains.map(d => d[1]))];\n }\n\n return domain;\n};\n\nconst symbolFns = {\n circle: symbolCircle,\n cross: symbolCross,\n diamond: symbolDiamond,\n square: symbolSquare,\n star: symbolStar,\n wye: symbolWye,\n triangle: symbolTriangle\n};\n\nconst easeFns = {\n cubic: easeCubic,\n bounce: easeBounce,\n linear: easeLinear,\n elastic: easeElastic,\n back: easeBack,\n poly: easePoly,\n circle: easeCircle\n};\n\n/**\n * Returns the maximum or minimum points of a compare value from an array of objects.\n * @param {Array} points Array of objects\n * @param {string} compareValue Key in the object on which the comparing will be done.\n * @param {string} minOrMax minimum or maximum.\n * @return {Object} Minimum or maximum point.\n */\nconst getExtremePoint = (points, compareValue, minOrMax) => {\n let extremePoint;\n let point;\n const len = points.length;\n let minOrMaxVal = minOrMax === 'max' ? -Infinity : Infinity;\n let val;\n\n for (let i = 0; i < len; i++) {\n point = points[i];\n val = point[compareValue];\n if (minOrMax === 'min' ? val < minOrMaxVal : val > minOrMaxVal) {\n minOrMaxVal = val;\n extremePoint = point;\n }\n }\n\n return extremePoint;\n};\n\n/**\n * Returns the minimum point of a compare value from an array of objects.\n * @param {Array} points Array of objects\n * @param {string} compareValue Key in the object on which the comparing will be done.\n * @return {Object} Minimum point.\n */\nconst getMinPoint = (points, compareValue) => getExtremePoint(points, compareValue, 'min');\n\n/**\n * Returns the maximum point of a compare value from an array of objects.\n * @param {Array} points Array of objects\n * @param {string} compareValue Key in the object on which the comparing will be done.\n * @return {Object} Maximum point.\n */\nconst getMaxPoint = (points, compareValue) => getExtremePoint(points, compareValue, 'max');\n\n/**\n * Gets the index of the closest value of the given value from the array.\n * @param {Array} arr Array of values\n * @param {number} value Value from which the nearest value will be calculated.\n * @param {string} side side property.\n * @return {number} index of the closest value\n */\n/* istanbul ignore next */const getClosestIndexOf = (arr, value, side) => {\n let low = 0;\n const arrLen = arr.length;\n let high = arrLen - 1;\n\n let mid;\n let d1;\n let d2;\n\n while (low < high) {\n mid = Math.floor((low + high) / 2);\n d1 = Math.abs(arr[mid] - value);\n d2 = Math.abs(arr[mid + 1] - value);\n\n if (d2 <= d1) {\n low = mid + 1;\n } else {\n high = mid;\n }\n }\n\n if (!side) {\n return high;\n }\n\n const highVal = arr[high];\n if (highVal === value) {\n return high;\n } else if (highVal > value) {\n if (high === 0) { return high; }\n return side === 'left' ? high - 1 : high;\n }\n if (high === arr.length - 1) { return high; }\n return side === 'left' ? high : high + 1;\n};\n\n/**\n * Returns the browser window object\n * @return {Window} Window object\n*/\nconst getWindow = () => window;\n\n/**\n * Returns the browser window object\n * @return {Window} Window object\n*/\nconst reqAnimFrame = (() => requestAnimationFrame)();\n\nconst cancelAnimFrame = (() => cancelAnimationFrame)();\n\n/**\n * Capitalizes the first letter of the word\n * @param {string} text word\n * @return {string} Capitalized word\n */\nconst capitalizeFirst = (text) => {\n text = text.toLowerCase();\n\n return text.replace(/\\w\\S*/g, txt => txt.charAt(0).toUpperCase() + txt.substr(1));\n};\n\n/**\n *\n *\n * @param {*} arr\n */\nconst unique = arr => ([...new Set(arr)]);\n\n/**\n * Gets the minimum difference between two consecutive numbers in an array.\n * @param {Array} arr Array of numbers\n * @param {number} index index of the value\n * @return {number} minimum difference between values\n */\n/* istanbul ignore next */ const getMinDiff = (arr, index) => {\n let diff;\n let uniqueVals;\n if (index !== undefined) {\n uniqueVals = unique(arr.map(d => d[index]));\n } else {\n uniqueVals = unique(arr);\n }\n if (uniqueVals.length > 1) {\n diff = Math.abs(uniqueVals[1] - uniqueVals[0]);\n for (let i = 2, len = uniqueVals.length; i < len; i++) {\n diff = Math.min(diff, Math.abs(uniqueVals[i] - uniqueVals[i - 1]));\n }\n } else {\n diff = uniqueVals[0];\n }\n\n return diff;\n};\n\n/**\n * Returns the class name appended with a given id.\n * @param {string} cls class name\n * @param {string} id unique identifier\n * @param {string} prefix string needed to add before the classname\n * @return {string} qualified class name\n */\n/* istanbul ignore next */const getQualifiedClassName = (cls, id, prefix) => {\n cls = cls.replace(/^\\.*/, '');\n return [`${prefix}-${cls}`, `${prefix}-${cls}-${id}`];\n};\n\n/**\n * This method is used to set the default value for variables\n * without sullying the code with conditional statements.\n *\n * @export\n * @param {any} param The parameter to test.\n * @param {any} value The default value to assign.\n * @return {any} The value.\n */\n/* istanbul ignore next */ const defaultValue = (param, value) => {\n if (typeof param === 'undefined' || (typeof param === 'object' && !param)) {\n return value;\n }\n return param;\n};\n\n/**\n * DESCRIPTION TODO\n * @todo\n *\n * @export\n * @param {Object} graph graph whose dependency order has to be generated\n * @return {Object} @todo\n */\nconst getDependencyOrder = (graph) => {\n const dependencyOrder = [];\n const visited = {};\n const keys = Object.keys(graph);\n /**\n * DESCRIPTION TODO\n * @todo\n *\n * @export\n * @param {Object} name @todo\n * @return {Object} @todo\n */\n const visit = (name) => {\n if (dependencyOrder.length === keys.length) {\n return true;\n }\n visited[name] = true;\n const edges = graph[name];\n for (let e = 0; e < edges.length; e++) {\n const dep = edges[e];\n if (!visited[dep]) {\n visit(dep);\n }\n }\n\n dependencyOrder.push(name);\n return false;\n };\n\n for (let i = 0; i < keys.length; i++) {\n if (visit(keys[i], i)) break;\n }\n\n return dependencyOrder;\n};\n\n/**\n * Iterates over the properties of an object and applies the function\n *\n * @param {any} obj object to be iterated upon\n * @param {any} fn function to be applied on it\n */\nconst objectIterator = (obj, fn) => {\n for (const key in obj) {\n if (Object.hasOwnProperty.call(obj, key)) {\n fn(key, obj);\n }\n }\n};\n\n/**\n * This class creates a d3 voronoi for retrieving the nearest neighbour of any point from a set of two\n * dimensional points\n * @class Voronoi\n */\n/* istanbul ignore next */ class Voronoi {\n /**\n * Initialize the voronoi with the data given.\n * @param {Array.} data Array of points.\n */\n constructor (data) {\n this._voronoi = voronoi().x(d => d.x).y(d => d.y);\n this.data(data);\n }\n\n /**\n * Sets the data to voronoi\n * @param {Array.} data Array of objects.\n * @return {Voronoi} Instance of voronoi.\n */\n data (data) {\n if (data) {\n this._voronoiFn = this._voronoi(data);\n }\n return this;\n }\n\n /**\n * Finds the closest point to the x and y position given.\n * @param {number} x x value\n * @param {number} y y value\n * @param {number} radius search radius.\n * @return {Object} Details of the nearest point.\n */\n find (x, y, radius) {\n return this._voronoiFn.find(x, y, radius);\n }\n}\n\n/**\n * Methods to handle changes to table configuration and reactivity are handled by this\n * class.\n */\n/**\n * Common store class\n *\n * @class Store\n */\nclass Store {\n /**\n * Creates an instance of Store.\n * @param {Object} config The object to create the state store with.\n * @memberof Store\n */\n constructor (config) {\n // create reactive model\n this.model = Model.create(config);\n this._listeners = [];\n }\n\n /**\n * This method returns a plain JSON object\n * with all the fields in the state store.\n *\n * @return {Object} Serialized representation of state store.\n * @memberof Store\n */\n serialize () {\n return this.model.serialize();\n }\n\n /**\n * This method is used to update the value of a property in the state store.\n *\n * @param {string} propName The name of the property.\n * @param {number} value The new value of the property.\n * @memberof Store\n */\n commit (propName, value) {\n // check if appropriate enum has been used\n this.model.prop(propName, value);\n }\n\n /**\n * This method is used to register a callbacl that will execute\n * when one or more properties change.\n *\n * @param {string | Array} propNames name of property or array of props.\n * @param {Function} callBack The callback to execute.\n * @memberof Store\n */\n /* istanbul ignore next */registerChangeListener (propNames, callBack, instantCall) {\n let props = propNames;\n if (!Array.isArray(propNames)) {\n props = [propNames];\n }\n const fn = this.model.next(props, callBack, instantCall);\n this._listeners.push(fn);\n return this;\n }\n /**\n * This method is used to register a callbacl that will execute\n * when one or more properties change.\n *\n * @param {string | Array} propNames name of property or array of props.\n * @param {Function} callBack The callback to execute.\n * @memberof Store\n */\n /* istanbul ignore next */ registerImmediateListener (propNames, callBack, instantCall) {\n let props = propNames;\n if (!Array.isArray(propNames)) {\n props = [propNames];\n }\n const fn = this.model.on(props, callBack, instantCall);\n this._listeners.push(fn);\n return this;\n }\n /**\n * This method is used to get the name of the property\n * from the state store.\n *\n * @param {string} propName The name of the field in state store.\n * @return {any} The value of the field.\n * @memberof Store\n */\n get (propName) {\n return this.model.prop(propName);\n }\n\n /**\n * This method is used to register a computed property that is computed every time\n * the store value changes.\n *\n * @param {string} propName The name of the property to create.\n * @param {Function} callBack The function to execute when depemdent props change.\n * @memberof Store\n */\n computed (propName, callBack) {\n return this.model.calculatedProp(propName, callBack);\n }\n\n unsubscribeAll () {\n this._listeners.forEach(fn => fn());\n }\n}\n\n/**\n * Sanitize an input number / string mixed number. Currently dot in the no is not supported.\n *\n * @param {number | string} val pure number or string mixed number\n * @return {number | null} Number if it can be extracted. Otherwise null\n */\nconst intSanitizer = (val) => {\n const arr = val.toString().match(/(\\d+)(px)*/g);\n if (!arr) {\n // If only characters are passed\n return null;\n }\n\n return parseInt(arr[0], 10);\n};\n\n/**\n * Setter getter creator from config\n * Format\n * PROPERTRY_NAME: {\n * value: // default value of the property,\n * meta: {\n * typeCheck: // The setter value will be checked using this. If the value is function then the setter value\n * // is passed as args. (Optional)\n * typeExpected: // The output of typecheck action will be tested against this. Truthy value will set the\n * // value to the setter\n * sanitizaiton: // Need for sanitization before type is checked\n * }\n * }\n *\n * @param {Object} holder an empty object on which the getters and setters will be mounted\n * @param {Object} options options config based on which the getters and setters are determined.\n * @param {Hyperdis} model optional model to attach the property. If not sent new moel is created.\n * @return {Array} @todo\n */\nconst transactor = (holder, options, model) => {\n let conf;\n const store = model && model instanceof Model ? model : Model.create({});\n\n for (const prop in options) {\n if ({}.hasOwnProperty.call(options, prop)) {\n conf = options[prop];\n if (!store.prop(prop)) {\n store.append({ [prop]: conf.value });\n }\n holder[prop] = ((context, key, meta) => (...params) => {\n let val;\n let compareTo;\n const paramsLen = params.length;\n const prevVal = store.prop(prop);\n if (paramsLen) {\n // If parameters are passed then it's a setter\n const spreadParams = meta && meta.spreadParams;\n val = params;\n const values = [];\n if (meta) {\n for (let i = 0; i < paramsLen; i++) {\n val = params[i];\n const sanitization = meta.sanitization && (spreadParams ? meta.sanitization[i] :\n meta.sanitization);\n const typeCheck = meta.typeCheck && (spreadParams ? meta.typeCheck[i] : meta.typeCheck);\n if (sanitization && typeof sanitization === 'function') {\n // Sanitize if required\n val = sanitization(val, prevVal, holder);\n }\n\n if (typeCheck) {\n // Checking if a setter is valid\n if (typeof typeCheck === 'function') {\n let typeExpected = meta.typeExpected;\n if (typeExpected && spreadParams) {\n typeExpected = typeExpected[i];\n }\n if (typeExpected) {\n compareTo = typeExpected;\n } else {\n compareTo = true;\n }\n\n if (typeCheck(val) === compareTo) {\n values.push(val);\n }\n } else if (typeof typeCheck === 'string') {\n if (typeCheck === 'constructor') {\n const typeExpected = spreadParams ? meta.typeExpected[i] : meta.typeExpected;\n if (val && (val.constructor.name === typeExpected)) {\n values.push(val);\n }\n }\n } else {\n // context.prop(key, val);\n values.push(val);\n }\n } else {\n values.push(val);\n }\n }\n const preset = meta.preset;\n const oldValues = context.prop(key);\n preset && preset(values[0], holder);\n if (spreadParams) {\n oldValues.forEach((value, i) => {\n if (values[i] === undefined) {\n values[i] = value;\n }\n });\n }\n values.length && context.prop(key, spreadParams ? values : values[0]);\n } else {\n context.prop(key, spreadParams ? val : val[0]);\n }\n return holder;\n }\n // No parameters are passed hence its a getter\n return context.prop(key);\n })(store, prop, conf.meta);\n }\n }\n\n return [holder, store];\n};\n\n/**\n *\n *\n * @param {*} context\n * @param {*} props\n */\nconst generateGetterSetters = (context, props) => {\n Object.entries(props).forEach((propInfo) => {\n const prop = propInfo[0];\n const typeChecker = propInfo[1].typeChecker;\n const sanitization = propInfo[1].sanitization;\n const prototype = context.constructor.prototype;\n if (!(Object.hasOwnProperty.call(prototype, prop))) {\n context[prop] = (...params) => {\n if (params.length) {\n let value = params[0];\n if (sanitization) {\n value = sanitization(context, params[0]);\n }\n if (typeChecker && !typeChecker(value)) {\n return context[`_${prop}`];\n }\n context[`_${prop}`] = value;\n return context;\n } return context[`_${prop}`];\n };\n }\n });\n};\n\n/**\n *\n *\n * @param {*} arr\n * @param {*} prop\n */\nconst getArraySum = (arr, prop) => arr.reduce((total, elem) => {\n total += prop ? elem[prop] : elem;\n return total;\n}, 0);\n\n/**\n *\n *\n * @param {*} arr1\n * @param {*} arr2\n * @returns\n */\nconst arraysEqual = (arr1, arr2) => {\n if (arr1.length !== arr2.length) { return false; }\n for (let i = arr1.length; i >= 0; i--) {\n if (arr1[i] !== arr2[i]) { return false; }\n }\n\n return true;\n};\n\n/* eslint valid-typeof:0 */\n/**\n * Returns a validation function which can be used to validate variables against a type and value\n *\n * @param {any} type type of value that the object should have\n * @return {Object} validation function\n */\nconst isEqual = type => (oldVal, newVal) => {\n if (type === 'Array') {\n if (!oldVal) {\n return false;\n }\n return arraysEqual(oldVal, newVal);\n } else if (type === 'Object') {\n return Object.is(oldVal, newVal);\n } return oldVal === newVal;\n};\n\n/**\n * Description @todo\n *\n * @param {any} transactionModel @todo\n * @param {any} transactionEndpoint @todo\n * @param {any} transactionItems @todo\n * @return {any} @todo\n */\nconst enableChainedTransaction = (transactionModel, transactionEndpoint, transactionItems) =>\n transactionItems.forEach(item => transactionModel.on(item, ([, newVal]) => transactionEndpoint[item](newVal)));\n\n/**\n * Chceks if the element is istanceof HTMLElement\n *\n * @param {Object} elem any JS Object\n */\nconst isHTMLElem = elem => elem instanceof HTMLElement;\n\nconst ERROR_MSG = {\n INTERFACE_IMPL: 'Method not implemented'\n};\n\n/**\n * Merges the sink object in the source by recursively iterating through the object properties\n * @param {Object} source Source Object\n * @param {Object} sink Sink Object\n * @return {Object} Merged object\n */\nconst mergeRecursive = (source, sink) => {\n for (const prop in sink) {\n if (isSimpleObject(source[prop]) && isSimpleObject(sink[prop])) {\n mergeRecursive(source[prop], sink[prop]);\n } else if (sink[prop] instanceof Object && sink[prop].constructor === Object) {\n source[prop] = {};\n mergeRecursive(source[prop], sink[prop]);\n } else {\n source[prop] = sink[prop];\n }\n }\n return source;\n};\n\nconst interpolateArray = (data, fitCount) => {\n const linearInterpolate = function (before, after, atPoint) {\n return before + (after - before) * atPoint;\n };\n const newData = [];\n const springFactor = ((data.length - 1) / (fitCount - 1));\n newData[0] = data[0]; // for new allocation\n for (let i = 1; i < fitCount - 1; i++) {\n const tmp = i * springFactor;\n const before = (Math.floor(tmp)).toFixed();\n const after = (Math.ceil(tmp)).toFixed();\n const atPoint = tmp - before;\n newData[i] = linearInterpolate(data[before], data[after], atPoint);\n }\n newData[fitCount - 1] = data[data.length - 1]; // for new allocation\n return newData;\n};\n\n/**\n *\n *\n * @param {*} fn\n */\nconst nextFrame = (fn) => {\n setTimeout(() => {\n fn();\n }, 0);\n};\n\n/**\n *\n *\n * @param {*} angle\n */\nconst angleToRadian = angle => angle * Math.PI / 180;\n\n/**\n *\n *\n * @param {*} newName\n * @param {*} oldName\n */\nconst replaceCSSPrefix = () => {\n // @todo\n};\n\n/**\n * Gets the interpolator function from d3 color\n *\n */\nconst interpolator = () => interpolate;\n\n/**\n * Gets the number interpolator from d3 color\n *\n */\nconst numberInterpolator = () => interpolateNumber;\n\n/**\n * Gets the rgb interpolator from d3 color\n *\n */\nconst colorInterpolator = () => interpolateRgb;\n\n/**\n * Gets the hsl interpolator from d3 color\n *\n */\nconst hslInterpolator = () => interpolateHslLong;\n\nconst transformColors = () => ({\n color,\n rgb,\n hsl\n});\n\n/**\n * Gets the piecewise interpolator from d3 color\n *\n */\nconst piecewiseInterpolator = () => piecewise;\n\nfunction hue2rgb (p, q, t) {\n if (t < 0) t += 1;\n if (t > 1) t -= 1;\n if (t < 1 / 6) return p + (q - p) * 6 * t;\n if (t < 1 / 2) return q;\n if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n return p;\n}\n\n /**\n * Converts an HSL color value to RGB. Conversion formula\n * adapted from http://en.wikipedia.org/wiki/HSL_color_space.\n * Assumes h, s, and l are contained in the set [0, 1] and\n * returns r, g, and b in the set [0, 255].\n *\n * @param Number h The hue\n * @param Number s The saturation\n * @param Number l The lightness\n * @return Array The RGB representation\n */\nconst hslToRgb = (h, s, l, a = 1) => {\n let r;\n let g;\n let b;\n\n if (s === 0) {\n r = g = b = l; // achromatic\n } else {\n const q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n const p = 2 * l - q;\n\n r = hue2rgb(p, q, h + 1 / 3);\n g = hue2rgb(p, q, h);\n b = hue2rgb(p, q, h - 1 / 3);\n }\n\n return [r * 255, g * 255, b * 255, a];\n};\n\n /**\n * Converts an RGB color value to HSV. Conversion formula\n * adapted from http://en.wikipedia.org/wiki/HSV_color_space.\n * Assumes r, g, and b are contained in the set [0, 255] and\n * returns h, s, and v in the set [0, 1].\n *\n * @param Number r The red color value\n * @param Number g The green color value\n * @param Number b The blue color value\n * @return Array The HSV representation\n */\nconst rgbToHsv = (r, g, b, a = 1) => {\n r = +r; g = +g; b = +b; a = +a;\n r /= 255; g /= 255; b /= 255;\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n let h;\n let s;\n const l = (max + min) / 2;\n\n if (max === min) {\n h = s = 0; // achromatic\n } else {\n const d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n switch (max) {\n case r: h = (g - b) / d + (g < b ? 6 : 0); break;\n case g: h = (b - r) / d + 2; break;\n case b: h = (r - g) / d + 4; break;\n default: break;\n }\n h /= 6;\n }\n return [h, s, l, a];\n};\n\n /**\n * Converts an HSV color value to RGB. Conversion formula\n * adapted from http://en.wikipedia.org/wiki/HSV_color_space.\n * Assumes h, s, and v are contained in the set [0, 1] and\n * returns r, g, and b in the set [0, 255].\n *\n * @param Number h The hue\n * @param Number s The saturation\n * @param Number v The value\n * @return Array The RGB representation\n */\nconst hsvToRgb = (h, s, v, a = 1) => {\n let r;\n let g;\n let b;\n\n const i = Math.floor(h * 6);\n const f = h * 6 - i;\n const p = v * (1 - s);\n const q = v * (1 - f * s);\n const t = v * (1 - (1 - f) * s);\n\n switch (i % 6) {\n case 0: r = v; g = t; b = p; break;\n case 1: r = q; g = v; b = p; break;\n case 2: r = p; g = v; b = t; break;\n case 3: r = p; g = q; b = v; break;\n case 4: r = t; g = p; b = v; break;\n case 5: r = v; g = p; b = q; break;\n default: break;\n }\n\n return [r * 255, g * 255, b * 255, a];\n};\n\nconst hexToHsv = (hex) => {\n const result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\n\n const r = parseInt(result[1], 16);\n const g = parseInt(result[2], 16);\n const b = parseInt(result[3], 16);\n const a = result[4] ? parseInt(result[4], 16) : 1;\n return rgbToHsv(r, g, b, a);\n};\n\nconst detectColor = (col) => {\n const matchRgb = /rgb\\((\\d{1,3}), (\\d{1,3}), (\\d{1,3})\\)/;\n const matchHsl = /hsl\\((\\d+),\\s*([\\d.]+)%,\\s*([\\d.]+)%\\)/g;\n\n // Source : https://gist.github.com/sethlopezme/d072b945969a3cc2cc11\n // eslint-disable-next-line\n const matchRgba = /rgba?\\(((25[0-5]|2[0-4]\\d|1\\d{1,2}|\\d\\d?)\\s*,\\s*?){2}(25[0-5]|2[0-4]\\d|1\\d{1,2}|\\d\\d?)\\s*,?\\s*([01]\\.?\\d*?)?\\)/;\n // eslint-disable-next-line\n const matchHsla = /^hsla\\((0|360|35\\d|3[0-4]\\d|[12]\\d\\d|0?\\d?\\d),(0|100|\\d{1,2})%,(0|100|\\d{1,2})%,(0?\\.\\d|1(\\.0)?)\\)$/;\n const matchHex = /^#([0-9a-f]{3}){1,2}$/i;\n\n if (matchRgb.test(col) || matchRgba.test(col)) {\n return 'rgb';\n } else if (matchHsl.test(col) || matchHsla.test(col)) {\n return 'hsl';\n } else if (matchHex.test(col)) {\n return 'hex';\n } return col;\n};\n\n/**\n *\n *\n * @param {*} model\n * @param {*} propModel\n * @returns\n */\nconst filterPropagationModel = (model, propModel, measures) => {\n const { data, schema } = propModel.getData();\n let filteredModel;\n if (schema.length) {\n const fieldMap = model.getFieldsConfig();\n filteredModel = model.select((fields) => {\n const include = data.some(row => schema.every((propField, idx) => {\n if (!measures && (!(propField.name in fieldMap) ||\n fieldMap[propField.name].def.type === FieldType.MEASURE)) {\n return true;\n }\n return row[idx] === fields[propField.name].valueOf();\n }));\n return include;\n }, {\n saveChild: false\n });\n } else {\n filteredModel = propModel;\n }\n\n return filteredModel;\n};\n\nconst assembleModelFromIdentifiers = (model, identifiers) => {\n let schema = [];\n let data;\n const fieldMap = model.getFieldsConfig();\n if (identifiers.length) {\n const fields = identifiers[0];\n const len = fields.length;\n for (let i = 0; i < len; i++) {\n const field = fields[i];\n const fieldObj = fieldMap[field] && Object.assign({}, fieldMap[field].def);\n if (fieldObj) {\n schema.push(Object.assign(fieldObj));\n }\n }\n\n data = [];\n const header = identifiers[0];\n for (let i = 1; i < identifiers.length; i += 1) {\n const vals = identifiers[i];\n const temp = {};\n vals.forEach((fieldVal, cIdx) => {\n temp[header[cIdx]] = fieldVal;\n });\n data.push(temp);\n }\n } else {\n data = [];\n schema = [];\n }\n\n return new model.constructor(data, schema);\n};\n\n/**\n *\n *\n * @param {*} dataModel\n * @param {*} criteria\n * @returns\n */\nconst getDataModelFromRange = (dataModel, criteria, mode) => {\n if (criteria === null) {\n return null;\n }\n const selFields = Object.keys(criteria);\n const selFn = fields => selFields.every((field) => {\n const val = fields[field].value;\n const range = criteria[field][0] instanceof Array ? criteria[field][0] : criteria[field];\n if (typeof range[0] === 'string') {\n return range.find(d => d === val) !== undefined;\n }\n return range ? val >= range[0] && val <= range[1] : true;\n });\n\n return dataModel.select(selFn, {\n saveChild: false,\n mode\n });\n};\n\n/**\n *\n *\n * @param {*} dataModel\n * @param {*} identifiers\n * @returns\n */\nconst getDataModelFromIdentifiers = (dataModel, identifiers, mode) => {\n let filteredDataModel;\n if (identifiers instanceof Array) {\n const fieldsConfig = dataModel.getFieldsConfig();\n\n const dataArr = identifiers.slice(1, identifiers.length);\n if (identifiers instanceof Function) {\n filteredDataModel = identifiers(dataModel, {}, false);\n } else if (identifiers instanceof Array && identifiers[0].length) {\n const filteredSchema = identifiers[0].filter(d => d in fieldsConfig);\n filteredDataModel = dataModel.select((fields) => {\n let include = true;\n filteredSchema.forEach((propField, idx) => {\n const value = fields[propField].valueOf();\n const index = dataArr.findIndex(d => d[idx] === value);\n include = include && index !== -1;\n });\n return include;\n }, {\n saveChild: false,\n mode\n });\n }\n } else {\n filteredDataModel = getDataModelFromRange(dataModel, identifiers, mode);\n }\n return filteredDataModel;\n};\n\n/**\n *\n *\n * @param {*} context\n * @param {*} listenerMap\n */\nconst registerListeners = (context, listenerMap) => {\n const propListenerMap = listenerMap(context);\n for (const key in propListenerMap) {\n if ({}.hasOwnProperty.call(propListenerMap, key)) {\n const mapObj = propListenerMap[key];\n const propType = mapObj.type;\n const props = mapObj.props;\n const listenerFn = mapObj.listener;\n context.store()[propType](props, listenerFn);\n }\n }\n};\n\nconst isValidValue = value => !isNaN(value) && value !== -Infinity && value !== Infinity;\n/**\n *\n *\n * @param {*} obj\n * @param {*} fields\n * @returns\n */\nconst getObjProp = (obj, ...fields) => {\n if (obj === undefined || obj === null) {\n return obj;\n }\n let retObj = obj;\n for (let i = 0, len = fields.length; i < len; i++) {\n retObj = retObj[fields[i]];\n if (retObj === undefined || retObj === null) {\n break;\n }\n }\n return retObj;\n};\n\n/**\n *\n *\n * @param {*} str\n * @returns\n */\nconst escapeHTML = (str) => {\n const htmlEscapes = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": ''',\n '/': '/'\n };\n const htmlEscaper = /[&<>\"'/]/g;\n return (`${str}`).replace(htmlEscaper, match => htmlEscapes[match]);\n};\n\n/**\n *\n *\n * @param {*} arr\n */\nconst transposeArray = arr => arr[0].map((col, i) => arr.map(row => row[i]));\nconst toArray = arr => (arr instanceof Array ? arr : [arr]);\nconst extendsClass = (cls, extendsFrom, found) => {\n if (!cls) {\n return false;\n }\n const prototype = cls.prototype;\n if (prototype instanceof extendsFrom) {\n found = true;\n } else {\n found = extendsClass(prototype, extendsFrom, found);\n }\n return found;\n};\n\n/**\n *\n * @param {*} dm1\n * @param {*} dm2\n */\nconst concatModels = (dm1, dm2) => {\n const dataObj1 = dm1.getData();\n const dataObj2 = dm2.getData();\n const data1 = dataObj1.data;\n const data2 = dataObj2.data;\n const schema1 = dataObj1.schema;\n const schema2 = dataObj2.schema;\n const tuples1 = {};\n const tuples2 = {};\n const commonTuples = {};\n for (let i = 0; i < data1.length; i++) {\n for (let ii = 0; ii < data2.length; ii++) {\n const row1 = data1[i];\n const row2 = data2[ii];\n const dim1Values = row1.filter((d, idx) => schema1[idx].type === FieldType.DIMENSION);\n const dim2Values = row2.filter((d, idx) => schema2[idx].type === FieldType.DIMENSION);\n const allDimSame = dim1Values.every(value => dim2Values.indexOf(value) !== -1);\n if (allDimSame) {\n const key = dim1Values.join();\n !commonTuples[key] && (commonTuples[key] = {});\n row1.forEach((value, idx) => {\n commonTuples[key][schema1[idx].name] = value;\n });\n row2.forEach((value, idx) => {\n commonTuples[key][schema2[idx].name] = value;\n });\n } else {\n const dm1Key = dim1Values.join();\n const dm2Key = dim2Values.join();\n if (!commonTuples[dm1Key] && !commonTuples[dm2Key]) {\n !tuples1[dm1Key] && (tuples1[dm1Key] = {});\n !tuples2[dm2Key] && (tuples2[dm2Key] = {});\n row1.forEach((value, idx) => {\n tuples1[dm1Key][schema1[idx].name] = value;\n });\n row2.forEach((value, idx) => {\n tuples2[dm2Key][schema2[idx].name] = value;\n });\n }\n }\n }\n }\n\n const commonSchema = [...schema1, ...schema2.filter(s2 => schema1.findIndex(s1 => s1.name === s2.name) === -1)];\n const data = [...Object.values(tuples1), ...Object.values(tuples2), ...Object.values(commonTuples)];\n return [data, commonSchema];\n};\n\nconst getSymbol = type => symbol().type(symbolFns[type]);\n\nconst stackOrders = {\n [STACK_CONFIG.ORDER_NONE]: stackOrderNone,\n [STACK_CONFIG.ORDER_ASCENDING]: stackOrderAscending,\n [STACK_CONFIG.ORDER_DESCENDING]: stackOrderDescending\n};\nconst stackOffsets = {\n [STACK_CONFIG.OFFSET_DIVERGING]: stackOffsetDiverging,\n [STACK_CONFIG.OFFSET_NONE]: stackOffsetNone,\n [STACK_CONFIG.OFFSET_EXPAND]: stackOffsetExpand,\n [STACK_CONFIG.OFFSET_WIGGLE]: stackOffsetWiggle\n};\n\n// eslint-disable-next-line require-jsdoc\nconst stack = params => d3Stack().keys(params.keys).offset(stackOffsets[params.offset])\n .order(stackOrders[params.order])(params.data);\n\n/**\n * Groups the data into a hierarchical tree structure based on one or more fields.\n * @param { Object } params Configuration properties for nesting data\n * @param { Array. } params.data Data which needs to be grouped\n * @param { Array. } params.keys Field indices by which the data will be grouped\n * @return { Array. } Grouped data array\n */\nconst nestCollection = (params) => {\n const nestFn = nest();\n params.keys.forEach(key => nestFn.key(d => d[key]));\n return nestFn.entries(params.data);\n};\n\nconst pathInterpolators = {\n curveLinear,\n curveStepAfter,\n curveStepBefore,\n curveStep,\n curveCatmullRom,\n stepAfter: curveStepAfter,\n catmullRom: curveCatmullRom,\n step: curveStep,\n stepBefore: curveStepBefore,\n linear: curveLinear\n};\n\nconst Symbols = {\n axisLeft,\n axisRight,\n axisTop,\n axisBottom,\n line,\n area,\n pie,\n arc,\n nest\n};\n\nconst Scales = {\n band: scaleBand\n};\n\nconst getSmallestDiff = (points) => {\n points = points.sort((a, b) => a - b);\n let minDiff = points[1] - points[0];\n for (let i = 2; i < points.length; i++) {\n minDiff = Math.min(minDiff, points[i] - points[i - 1]);\n }\n\n return minDiff;\n};\n\nconst require = (lookupWhat, lookupDetails) => ({\n resolvable: (store) => {\n const lookupTarget = store[lookupWhat];\n const depArr = lookupDetails.slice(0, lookupDetails.length - 1);\n const fn = lookupDetails[lookupDetails.length - 1]; // fn\n\n const deps = depArr.map(str => lookupTarget[str]);\n return {\n fn: fn(...deps),\n depArr\n };\n }\n});\n\nconst nextAnimFrame = window.requestAnimationFrame || window.webkitRequestAnimationFrame ||\n window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame ||\n function (callback) {\n setTimeout(callback, 16);\n };\n\nexport {\n require,\n Scales,\n Symbols,\n pathInterpolators,\n stack,\n nestCollection,\n getSymbol,\n transformColors,\n detectColor,\n hexToHsv,\n hslToRgb,\n rgbToHsv,\n hsvToRgb,\n concatModels,\n toArray,\n angleToRadian,\n escapeHTML,\n generateGetterSetters,\n getArraySum,\n interpolator,\n piecewiseInterpolator,\n getDataModelFromIdentifiers,\n getDataModelFromRange,\n colorInterpolator,\n numberInterpolator,\n ERROR_MSG,\n reqAnimFrame,\n nextAnimFrame,\n filterPropagationModel,\n transposeArray,\n cancelAnimFrame,\n getMax,\n getMin,\n getDomainFromData,\n getUniqueId,\n mergeRecursive,\n unionDomain,\n symbolFns,\n easeFns,\n clone,\n isEqual,\n interpolateArray,\n getMinPoint,\n defaultValue,\n getMaxPoint,\n getClosestIndexOf,\n Voronoi,\n checkExistence,\n sanitizeIP,\n getMinDiff,\n capitalizeFirst,\n getWindow,\n getQualifiedClassName,\n Store,\n getDependencyOrder,\n objectIterator,\n intSanitizer,\n transactor,\n enableChainedTransaction,\n isHTMLElem,\n isSimpleObject,\n nextFrame,\n registerListeners,\n replaceCSSPrefix,\n getObjProp,\n extendsClass,\n assembleModelFromIdentifiers,\n isValidValue,\n hslInterpolator,\n getSmallestDiff\n};\n","export function linear(t) {\n return +t;\n}\n","export function circleIn(t) {\n return 1 - Math.sqrt(1 - t * t);\n}\n\nexport function circleOut(t) {\n return Math.sqrt(1 - --t * t);\n}\n\nexport function circleInOut(t) {\n return ((t *= 2) <= 1 ? 1 - Math.sqrt(1 - t * t) : Math.sqrt(1 - (t -= 2) * t) + 1) / 2;\n}\n","import {path} from \"d3-path\";\nimport circle from \"./symbol/circle\";\nimport cross from \"./symbol/cross\";\nimport diamond from \"./symbol/diamond\";\nimport star from \"./symbol/star\";\nimport square from \"./symbol/square\";\nimport triangle from \"./symbol/triangle\";\nimport wye from \"./symbol/wye\";\nimport constant from \"./constant\";\n\nexport var symbols = [\n circle,\n cross,\n diamond,\n square,\n star,\n triangle,\n wye\n];\n\nexport default function() {\n var type = constant(circle),\n size = constant(64),\n context = null;\n\n function symbol() {\n var buffer;\n if (!context) context = buffer = path();\n type.apply(this, arguments).draw(context, +size.apply(this, arguments));\n if (buffer) return context = null, buffer + \"\" || null;\n }\n\n symbol.type = function(_) {\n return arguments.length ? (type = typeof _ === \"function\" ? _ : constant(_), symbol) : type;\n };\n\n symbol.size = function(_) {\n return arguments.length ? (size = typeof _ === \"function\" ? _ : constant(+_), symbol) : size;\n };\n\n symbol.context = function(_) {\n return arguments.length ? (context = _ == null ? null : _, symbol) : context;\n };\n\n return symbol;\n}\n","export const ORDER_ASCENDING = 'ascending';\nexport const ORDER_DESCENDING = 'descending';\nexport const ORDER_NONE = 'none';\nexport const OFFSET_DIVERGING = 'diverging';\nexport const OFFSET_NONE = 'none';\nexport const OFFSET_EXPAND = 'expand';\nexport const OFFSET_WIGGLE = 'wiggle';\n","import ascending from \"./ascending\";\n\nexport default function(series) {\n return ascending(series).reverse();\n}\n","export default function(series, order) {\n if (!((n = series.length) > 1)) return;\n for (var i, j = 0, d, dy, yp, yn, n, m = series[order[0]].length; j < m; ++j) {\n for (yp = yn = 0, i = 0; i < n; ++i) {\n if ((dy = (d = series[order[i]][j])[1] - d[0]) >= 0) {\n d[0] = yp, d[1] = yp += dy;\n } else if (dy < 0) {\n d[1] = yn, d[0] = yn += dy;\n } else {\n d[0] = yp;\n }\n }\n }\n}\n","import none from \"./none\";\n\nexport default function(series, order) {\n if (!((n = series.length) > 0)) return;\n for (var i, n, j = 0, m = series[0].length, y; j < m; ++j) {\n for (y = i = 0; i < n; ++i) y += series[i][j][1] || 0;\n if (y) for (i = 0; i < n; ++i) series[i][j][1] /= y;\n }\n none(series, order);\n}\n","import none from \"./none\";\n\nexport default function(series, order) {\n if (!((n = series.length) > 0) || !((m = (s0 = series[order[0]]).length) > 0)) return;\n for (var y = 0, j = 1, s0, m, n; j < m; ++j) {\n for (var i = 0, s1 = 0, s2 = 0; i < n; ++i) {\n var si = series[order[i]],\n sij0 = si[j][1] || 0,\n sij1 = si[j - 1][1] || 0,\n s3 = (sij0 - sij1) / 2;\n for (var k = 0; k < i; ++k) {\n var sk = series[order[k]],\n skj0 = sk[j][1] || 0,\n skj1 = sk[j - 1][1] || 0;\n s3 += skj0 - skj1;\n }\n s1 += sij0, s2 += s3 * sij0;\n }\n s0[j - 1][1] += s0[j - 1][0] = y;\n if (s1) y -= s2 / s1;\n }\n s0[j - 1][1] += s0[j - 1][0] = y;\n none(series, order);\n}\n","import constant from \"./constant\";\nimport descending from \"./descending\";\nimport identity from \"./identity\";\nimport {tau} from \"./math\";\n\nexport default function() {\n var value = identity,\n sortValues = descending,\n sort = null,\n startAngle = constant(0),\n endAngle = constant(tau),\n padAngle = constant(0);\n\n function pie(data) {\n var i,\n n = data.length,\n j,\n k,\n sum = 0,\n index = new Array(n),\n arcs = new Array(n),\n a0 = +startAngle.apply(this, arguments),\n da = Math.min(tau, Math.max(-tau, endAngle.apply(this, arguments) - a0)),\n a1,\n p = Math.min(Math.abs(da) / n, padAngle.apply(this, arguments)),\n pa = p * (da < 0 ? -1 : 1),\n v;\n\n for (i = 0; i < n; ++i) {\n if ((v = arcs[index[i] = i] = +value(data[i], i, data)) > 0) {\n sum += v;\n }\n }\n\n // Optionally sort the arcs by previously-computed values or by data.\n if (sortValues != null) index.sort(function(i, j) { return sortValues(arcs[i], arcs[j]); });\n else if (sort != null) index.sort(function(i, j) { return sort(data[i], data[j]); });\n\n // Compute the arcs! They are stored in the original data's order.\n for (i = 0, k = sum ? (da - n * pa) / sum : 0; i < n; ++i, a0 = a1) {\n j = index[i], v = arcs[j], a1 = a0 + (v > 0 ? v * k : 0) + pa, arcs[j] = {\n data: data[j],\n index: i,\n value: v,\n startAngle: a0,\n endAngle: a1,\n padAngle: p\n };\n }\n\n return arcs;\n }\n\n pie.value = function(_) {\n return arguments.length ? (value = typeof _ === \"function\" ? _ : constant(+_), pie) : value;\n };\n\n pie.sortValues = function(_) {\n return arguments.length ? (sortValues = _, sort = null, pie) : sortValues;\n };\n\n pie.sort = function(_) {\n return arguments.length ? (sort = _, sortValues = null, pie) : sort;\n };\n\n pie.startAngle = function(_) {\n return arguments.length ? (startAngle = typeof _ === \"function\" ? _ : constant(+_), pie) : startAngle;\n };\n\n pie.endAngle = function(_) {\n return arguments.length ? (endAngle = typeof _ === \"function\" ? _ : constant(+_), pie) : endAngle;\n };\n\n pie.padAngle = function(_) {\n return arguments.length ? (padAngle = typeof _ === \"function\" ? _ : constant(+_), pie) : padAngle;\n };\n\n return pie;\n}\n","export var xhtml = \"http://www.w3.org/1999/xhtml\";\n\nexport default {\n svg: \"http://www.w3.org/2000/svg\",\n xhtml: xhtml,\n xlink: \"http://www.w3.org/1999/xlink\",\n xml: \"http://www.w3.org/XML/1998/namespace\",\n xmlns: \"http://www.w3.org/2000/xmlns/\"\n};\n","import namespaces from \"./namespaces\";\n\nexport default function(name) {\n var prefix = name += \"\", i = prefix.indexOf(\":\");\n if (i >= 0 && (prefix = name.slice(0, i)) !== \"xmlns\") name = name.slice(i + 1);\n return namespaces.hasOwnProperty(prefix) ? {space: namespaces[prefix], local: name} : name;\n}\n","import namespace from \"./namespace\";\nimport {xhtml} from \"./namespaces\";\n\nfunction creatorInherit(name) {\n return function() {\n var document = this.ownerDocument,\n uri = this.namespaceURI;\n return uri === xhtml && document.documentElement.namespaceURI === xhtml\n ? document.createElement(name)\n : document.createElementNS(uri, name);\n };\n}\n\nfunction creatorFixed(fullname) {\n return function() {\n return this.ownerDocument.createElementNS(fullname.space, fullname.local);\n };\n}\n\nexport default function(name) {\n var fullname = namespace(name);\n return (fullname.local\n ? creatorFixed\n : creatorInherit)(fullname);\n}\n","function none() {}\n\nexport default function(selector) {\n return selector == null ? none : function() {\n return this.querySelector(selector);\n };\n}\n","function empty() {\n return [];\n}\n\nexport default function(selector) {\n return selector == null ? empty : function() {\n return this.querySelectorAll(selector);\n };\n}\n","var matcher = function(selector) {\n return function() {\n return this.matches(selector);\n };\n};\n\nif (typeof document !== \"undefined\") {\n var element = document.documentElement;\n if (!element.matches) {\n var vendorMatches = element.webkitMatchesSelector\n || element.msMatchesSelector\n || element.mozMatchesSelector\n || element.oMatchesSelector;\n matcher = function(selector) {\n return function() {\n return vendorMatches.call(this, selector);\n };\n };\n }\n}\n\nexport default matcher;\n","export default function(update) {\n return new Array(update.length);\n}\n","import sparse from \"./sparse\";\nimport {Selection} from \"./index\";\n\nexport default function() {\n return new Selection(this._enter || this._groups.map(sparse), this._parents);\n}\n\nexport function EnterNode(parent, datum) {\n this.ownerDocument = parent.ownerDocument;\n this.namespaceURI = parent.namespaceURI;\n this._next = null;\n this._parent = parent;\n this.__data__ = datum;\n}\n\nEnterNode.prototype = {\n constructor: EnterNode,\n appendChild: function(child) { return this._parent.insertBefore(child, this._next); },\n insertBefore: function(child, next) { return this._parent.insertBefore(child, next); },\n querySelector: function(selector) { return this._parent.querySelector(selector); },\n querySelectorAll: function(selector) { return this._parent.querySelectorAll(selector); }\n};\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","import {Selection} from \"./index\";\nimport {EnterNode} from \"./enter\";\nimport constant from \"../constant\";\n\nvar keyPrefix = \"$\"; // Protect against keys like “__proto__”.\n\nfunction bindIndex(parent, group, enter, update, exit, data) {\n var i = 0,\n node,\n groupLength = group.length,\n dataLength = data.length;\n\n // Put any non-null nodes that fit into update.\n // Put any null nodes into enter.\n // Put any remaining data into enter.\n for (; i < dataLength; ++i) {\n if (node = group[i]) {\n node.__data__ = data[i];\n update[i] = node;\n } else {\n enter[i] = new EnterNode(parent, data[i]);\n }\n }\n\n // Put any non-null nodes that don’t fit into exit.\n for (; i < groupLength; ++i) {\n if (node = group[i]) {\n exit[i] = node;\n }\n }\n}\n\nfunction bindKey(parent, group, enter, update, exit, data, key) {\n var i,\n node,\n nodeByKeyValue = {},\n groupLength = group.length,\n dataLength = data.length,\n keyValues = new Array(groupLength),\n keyValue;\n\n // Compute the key for each node.\n // If multiple nodes have the same key, the duplicates are added to exit.\n for (i = 0; i < groupLength; ++i) {\n if (node = group[i]) {\n keyValues[i] = keyValue = keyPrefix + key.call(node, node.__data__, i, group);\n if (keyValue in nodeByKeyValue) {\n exit[i] = node;\n } else {\n nodeByKeyValue[keyValue] = node;\n }\n }\n }\n\n // Compute the key for each datum.\n // If there a node associated with this key, join and add it to update.\n // If there is not (or the key is a duplicate), add it to enter.\n for (i = 0; i < dataLength; ++i) {\n keyValue = keyPrefix + key.call(parent, data[i], i, data);\n if (node = nodeByKeyValue[keyValue]) {\n update[i] = node;\n node.__data__ = data[i];\n nodeByKeyValue[keyValue] = null;\n } else {\n enter[i] = new EnterNode(parent, data[i]);\n }\n }\n\n // Add any remaining nodes that were not bound to data to exit.\n for (i = 0; i < groupLength; ++i) {\n if ((node = group[i]) && (nodeByKeyValue[keyValues[i]] === node)) {\n exit[i] = node;\n }\n }\n}\n\nexport default function(value, key) {\n if (!value) {\n data = new Array(this.size()), j = -1;\n this.each(function(d) { data[++j] = d; });\n return data;\n }\n\n var bind = key ? bindKey : bindIndex,\n parents = this._parents,\n groups = this._groups;\n\n if (typeof value !== \"function\") value = constant(value);\n\n for (var m = groups.length, update = new Array(m), enter = new Array(m), exit = new Array(m), j = 0; j < m; ++j) {\n var parent = parents[j],\n group = groups[j],\n groupLength = group.length,\n data = value.call(parent, parent && parent.__data__, j, parents),\n dataLength = data.length,\n enterGroup = enter[j] = new Array(dataLength),\n updateGroup = update[j] = new Array(dataLength),\n exitGroup = exit[j] = new Array(groupLength);\n\n bind(parent, group, enterGroup, updateGroup, exitGroup, data, key);\n\n // Now connect the enter nodes to their following update node, such that\n // appendChild can insert the materialized enter node before this node,\n // rather than at the end of the parent node.\n for (var i0 = 0, i1 = 0, previous, next; i0 < dataLength; ++i0) {\n if (previous = enterGroup[i0]) {\n if (i0 >= i1) i1 = i0 + 1;\n while (!(next = updateGroup[i1]) && ++i1 < dataLength);\n previous._next = next || null;\n }\n }\n }\n\n update = new Selection(update, parents);\n update._enter = enter;\n update._exit = exit;\n return update;\n}\n","import {Selection} from \"./index\";\n\nexport default function(compare) {\n if (!compare) compare = ascending;\n\n function compareNode(a, b) {\n return a && b ? compare(a.__data__, b.__data__) : !a - !b;\n }\n\n for (var groups = this._groups, m = groups.length, sortgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, sortgroup = sortgroups[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n sortgroup[i] = node;\n }\n }\n sortgroup.sort(compareNode);\n }\n\n return new Selection(sortgroups, this._parents).order();\n}\n\nfunction ascending(a, b) {\n return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","import namespace from \"../namespace\";\n\nfunction attrRemove(name) {\n return function() {\n this.removeAttribute(name);\n };\n}\n\nfunction attrRemoveNS(fullname) {\n return function() {\n this.removeAttributeNS(fullname.space, fullname.local);\n };\n}\n\nfunction attrConstant(name, value) {\n return function() {\n this.setAttribute(name, value);\n };\n}\n\nfunction attrConstantNS(fullname, value) {\n return function() {\n this.setAttributeNS(fullname.space, fullname.local, value);\n };\n}\n\nfunction attrFunction(name, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.removeAttribute(name);\n else this.setAttribute(name, v);\n };\n}\n\nfunction attrFunctionNS(fullname, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.removeAttributeNS(fullname.space, fullname.local);\n else this.setAttributeNS(fullname.space, fullname.local, v);\n };\n}\n\nexport default function(name, value) {\n var fullname = namespace(name);\n\n if (arguments.length < 2) {\n var node = this.node();\n return fullname.local\n ? node.getAttributeNS(fullname.space, fullname.local)\n : node.getAttribute(fullname);\n }\n\n return this.each((value == null\n ? (fullname.local ? attrRemoveNS : attrRemove) : (typeof value === \"function\"\n ? (fullname.local ? attrFunctionNS : attrFunction)\n : (fullname.local ? attrConstantNS : attrConstant)))(fullname, value));\n}\n","export default function(node) {\n return (node.ownerDocument && node.ownerDocument.defaultView) // node is a Node\n || (node.document && node) // node is a Window\n || node.defaultView; // node is a Document\n}\n","import defaultView from \"../window\";\n\nfunction styleRemove(name) {\n return function() {\n this.style.removeProperty(name);\n };\n}\n\nfunction styleConstant(name, value, priority) {\n return function() {\n this.style.setProperty(name, value, priority);\n };\n}\n\nfunction styleFunction(name, value, priority) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.style.removeProperty(name);\n else this.style.setProperty(name, v, priority);\n };\n}\n\nexport default function(name, value, priority) {\n return arguments.length > 1\n ? this.each((value == null\n ? styleRemove : typeof value === \"function\"\n ? styleFunction\n : styleConstant)(name, value, priority == null ? \"\" : priority))\n : styleValue(this.node(), name);\n}\n\nexport function styleValue(node, name) {\n return node.style.getPropertyValue(name)\n || defaultView(node).getComputedStyle(node, null).getPropertyValue(name);\n}\n","function classArray(string) {\n return string.trim().split(/^|\\s+/);\n}\n\nfunction classList(node) {\n return node.classList || new ClassList(node);\n}\n\nfunction ClassList(node) {\n this._node = node;\n this._names = classArray(node.getAttribute(\"class\") || \"\");\n}\n\nClassList.prototype = {\n add: function(name) {\n var i = this._names.indexOf(name);\n if (i < 0) {\n this._names.push(name);\n this._node.setAttribute(\"class\", this._names.join(\" \"));\n }\n },\n remove: function(name) {\n var i = this._names.indexOf(name);\n if (i >= 0) {\n this._names.splice(i, 1);\n this._node.setAttribute(\"class\", this._names.join(\" \"));\n }\n },\n contains: function(name) {\n return this._names.indexOf(name) >= 0;\n }\n};\n\nfunction classedAdd(node, names) {\n var list = classList(node), i = -1, n = names.length;\n while (++i < n) list.add(names[i]);\n}\n\nfunction classedRemove(node, names) {\n var list = classList(node), i = -1, n = names.length;\n while (++i < n) list.remove(names[i]);\n}\n\nfunction classedTrue(names) {\n return function() {\n classedAdd(this, names);\n };\n}\n\nfunction classedFalse(names) {\n return function() {\n classedRemove(this, names);\n };\n}\n\nfunction classedFunction(names, value) {\n return function() {\n (value.apply(this, arguments) ? classedAdd : classedRemove)(this, names);\n };\n}\n\nexport default function(name, value) {\n var names = classArray(name + \"\");\n\n if (arguments.length < 2) {\n var list = classList(this.node()), i = -1, n = names.length;\n while (++i < n) if (!list.contains(names[i])) return false;\n return true;\n }\n\n return this.each((typeof value === \"function\"\n ? classedFunction : value\n ? classedTrue\n : classedFalse)(names, value));\n}\n","function textRemove() {\n this.textContent = \"\";\n}\n\nfunction textConstant(value) {\n return function() {\n this.textContent = value;\n };\n}\n\nfunction textFunction(value) {\n return function() {\n var v = value.apply(this, arguments);\n this.textContent = v == null ? \"\" : v;\n };\n}\n\nexport default function(value) {\n return arguments.length\n ? this.each(value == null\n ? textRemove : (typeof value === \"function\"\n ? textFunction\n : textConstant)(value))\n : this.node().textContent;\n}\n","function htmlRemove() {\n this.innerHTML = \"\";\n}\n\nfunction htmlConstant(value) {\n return function() {\n this.innerHTML = value;\n };\n}\n\nfunction htmlFunction(value) {\n return function() {\n var v = value.apply(this, arguments);\n this.innerHTML = v == null ? \"\" : v;\n };\n}\n\nexport default function(value) {\n return arguments.length\n ? this.each(value == null\n ? htmlRemove : (typeof value === \"function\"\n ? htmlFunction\n : htmlConstant)(value))\n : this.node().innerHTML;\n}\n","function raise() {\n if (this.nextSibling) this.parentNode.appendChild(this);\n}\n\nexport default function() {\n return this.each(raise);\n}\n","function lower() {\n if (this.previousSibling) this.parentNode.insertBefore(this, this.parentNode.firstChild);\n}\n\nexport default function() {\n return this.each(lower);\n}\n","import creator from \"../creator\";\nimport selector from \"../selector\";\n\nfunction constantNull() {\n return null;\n}\n\nexport default function(name, before) {\n var create = typeof name === \"function\" ? name : creator(name),\n select = before == null ? constantNull : typeof before === \"function\" ? before : selector(before);\n return this.select(function() {\n return this.insertBefore(create.apply(this, arguments), select.apply(this, arguments) || null);\n });\n}\n","function remove() {\n var parent = this.parentNode;\n if (parent) parent.removeChild(this);\n}\n\nexport default function() {\n return this.each(remove);\n}\n","function selection_cloneShallow() {\n return this.parentNode.insertBefore(this.cloneNode(false), this.nextSibling);\n}\n\nfunction selection_cloneDeep() {\n return this.parentNode.insertBefore(this.cloneNode(true), this.nextSibling);\n}\n\nexport default function(deep) {\n return this.select(deep ? selection_cloneDeep : selection_cloneShallow);\n}\n","var filterEvents = {};\n\nexport var event = null;\n\nif (typeof document !== \"undefined\") {\n var element = document.documentElement;\n if (!(\"onmouseenter\" in element)) {\n filterEvents = {mouseenter: \"mouseover\", mouseleave: \"mouseout\"};\n }\n}\n\nfunction filterContextListener(listener, index, group) {\n listener = contextListener(listener, index, group);\n return function(event) {\n var related = event.relatedTarget;\n if (!related || (related !== this && !(related.compareDocumentPosition(this) & 8))) {\n listener.call(this, event);\n }\n };\n}\n\nfunction contextListener(listener, index, group) {\n return function(event1) {\n var event0 = event; // Events can be reentrant (e.g., focus).\n event = event1;\n try {\n listener.call(this, this.__data__, index, group);\n } finally {\n event = event0;\n }\n };\n}\n\nfunction parseTypenames(typenames) {\n return typenames.trim().split(/^|\\s+/).map(function(t) {\n var name = \"\", i = t.indexOf(\".\");\n if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n return {type: t, name: name};\n });\n}\n\nfunction onRemove(typename) {\n return function() {\n var on = this.__on;\n if (!on) return;\n for (var j = 0, i = -1, m = on.length, o; j < m; ++j) {\n if (o = on[j], (!typename.type || o.type === typename.type) && o.name === typename.name) {\n this.removeEventListener(o.type, o.listener, o.capture);\n } else {\n on[++i] = o;\n }\n }\n if (++i) on.length = i;\n else delete this.__on;\n };\n}\n\nfunction onAdd(typename, value, capture) {\n var wrap = filterEvents.hasOwnProperty(typename.type) ? filterContextListener : contextListener;\n return function(d, i, group) {\n var on = this.__on, o, listener = wrap(value, i, group);\n if (on) for (var j = 0, m = on.length; j < m; ++j) {\n if ((o = on[j]).type === typename.type && o.name === typename.name) {\n this.removeEventListener(o.type, o.listener, o.capture);\n this.addEventListener(o.type, o.listener = listener, o.capture = capture);\n o.value = value;\n return;\n }\n }\n this.addEventListener(typename.type, listener, capture);\n o = {type: typename.type, name: typename.name, value: value, listener: listener, capture: capture};\n if (!on) this.__on = [o];\n else on.push(o);\n };\n}\n\nexport default function(typename, value, capture) {\n var typenames = parseTypenames(typename + \"\"), i, n = typenames.length, t;\n\n if (arguments.length < 2) {\n var on = this.node().__on;\n if (on) for (var j = 0, m = on.length, o; j < m; ++j) {\n for (i = 0, o = on[j]; i < n; ++i) {\n if ((t = typenames[i]).type === o.type && t.name === o.name) {\n return o.value;\n }\n }\n }\n return;\n }\n\n on = value ? onAdd : onRemove;\n if (capture == null) capture = false;\n for (i = 0; i < n; ++i) this.each(on(typenames[i], value, capture));\n return this;\n}\n\nexport function customEvent(event1, listener, that, args) {\n var event0 = event;\n event1.sourceEvent = event;\n event = event1;\n try {\n return listener.apply(that, args);\n } finally {\n event = event0;\n }\n}\n","import defaultView from \"../window\";\n\nfunction dispatchEvent(node, type, params) {\n var window = defaultView(node),\n event = window.CustomEvent;\n\n if (typeof event === \"function\") {\n event = new event(type, params);\n } else {\n event = window.document.createEvent(\"Event\");\n if (params) event.initEvent(type, params.bubbles, params.cancelable), event.detail = params.detail;\n else event.initEvent(type, false, false);\n }\n\n node.dispatchEvent(event);\n}\n\nfunction dispatchConstant(type, params) {\n return function() {\n return dispatchEvent(this, type, params);\n };\n}\n\nfunction dispatchFunction(type, params) {\n return function() {\n return dispatchEvent(this, type, params.apply(this, arguments));\n };\n}\n\nexport default function(type, params) {\n return this.each((typeof params === \"function\"\n ? dispatchFunction\n : dispatchConstant)(type, params));\n}\n","import selection_select from \"./select\";\nimport selection_selectAll from \"./selectAll\";\nimport selection_filter from \"./filter\";\nimport selection_data from \"./data\";\nimport selection_enter from \"./enter\";\nimport selection_exit from \"./exit\";\nimport selection_merge from \"./merge\";\nimport selection_order from \"./order\";\nimport selection_sort from \"./sort\";\nimport selection_call from \"./call\";\nimport selection_nodes from \"./nodes\";\nimport selection_node from \"./node\";\nimport selection_size from \"./size\";\nimport selection_empty from \"./empty\";\nimport selection_each from \"./each\";\nimport selection_attr from \"./attr\";\nimport selection_style from \"./style\";\nimport selection_property from \"./property\";\nimport selection_classed from \"./classed\";\nimport selection_text from \"./text\";\nimport selection_html from \"./html\";\nimport selection_raise from \"./raise\";\nimport selection_lower from \"./lower\";\nimport selection_append from \"./append\";\nimport selection_insert from \"./insert\";\nimport selection_remove from \"./remove\";\nimport selection_clone from \"./clone\";\nimport selection_datum from \"./datum\";\nimport selection_on from \"./on\";\nimport selection_dispatch from \"./dispatch\";\n\nexport var root = [null];\n\nexport function Selection(groups, parents) {\n this._groups = groups;\n this._parents = parents;\n}\n\nfunction selection() {\n return new Selection([[document.documentElement]], root);\n}\n\nSelection.prototype = selection.prototype = {\n constructor: Selection,\n select: selection_select,\n selectAll: selection_selectAll,\n filter: selection_filter,\n data: selection_data,\n enter: selection_enter,\n exit: selection_exit,\n merge: selection_merge,\n order: selection_order,\n sort: selection_sort,\n call: selection_call,\n nodes: selection_nodes,\n node: selection_node,\n size: selection_size,\n empty: selection_empty,\n each: selection_each,\n attr: selection_attr,\n style: selection_style,\n property: selection_property,\n classed: selection_classed,\n text: selection_text,\n html: selection_html,\n raise: selection_raise,\n lower: selection_lower,\n append: selection_append,\n insert: selection_insert,\n remove: selection_remove,\n clone: selection_clone,\n datum: selection_datum,\n on: selection_on,\n dispatch: selection_dispatch\n};\n\nexport default selection;\n","import {Selection} from \"./index\";\nimport selector from \"../selector\";\n\nexport default function(select) {\n if (typeof select !== \"function\") select = selector(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {\n if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {\n if (\"__data__\" in node) subnode.__data__ = node.__data__;\n subgroup[i] = subnode;\n }\n }\n }\n\n return new Selection(subgroups, this._parents);\n}\n","import {Selection} from \"./index\";\nimport selectorAll from \"../selectorAll\";\n\nexport default function(select) {\n if (typeof select !== \"function\") select = selectorAll(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n subgroups.push(select.call(node, node.__data__, i, group));\n parents.push(node);\n }\n }\n }\n\n return new Selection(subgroups, parents);\n}\n","import {Selection} from \"./index\";\nimport matcher from \"../matcher\";\n\nexport default function(match) {\n if (typeof match !== \"function\") match = matcher(match);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {\n if ((node = group[i]) && match.call(node, node.__data__, i, group)) {\n subgroup.push(node);\n }\n }\n }\n\n return new Selection(subgroups, this._parents);\n}\n","import sparse from \"./sparse\";\nimport {Selection} from \"./index\";\n\nexport default function() {\n return new Selection(this._exit || this._groups.map(sparse), this._parents);\n}\n","import {Selection} from \"./index\";\n\nexport default function(selection) {\n\n for (var groups0 = this._groups, groups1 = selection._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {\n for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group0[i] || group1[i]) {\n merge[i] = node;\n }\n }\n }\n\n for (; j < m0; ++j) {\n merges[j] = groups0[j];\n }\n\n return new Selection(merges, this._parents);\n}\n","export default function() {\n\n for (var groups = this._groups, j = -1, m = groups.length; ++j < m;) {\n for (var group = groups[j], i = group.length - 1, next = group[i], node; --i >= 0;) {\n if (node = group[i]) {\n if (next && next !== node.nextSibling) next.parentNode.insertBefore(node, next);\n next = node;\n }\n }\n }\n\n return this;\n}\n","export default function() {\n var callback = arguments[0];\n arguments[0] = this;\n callback.apply(null, arguments);\n return this;\n}\n","export default function() {\n var nodes = new Array(this.size()), i = -1;\n this.each(function() { nodes[++i] = this; });\n return nodes;\n}\n","export default function() {\n\n for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n for (var group = groups[j], i = 0, n = group.length; i < n; ++i) {\n var node = group[i];\n if (node) return node;\n }\n }\n\n return null;\n}\n","export default function() {\n var size = 0;\n this.each(function() { ++size; });\n return size;\n}\n","export default function() {\n return !this.node();\n}\n","export default function(callback) {\n\n for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n for (var group = groups[j], i = 0, n = group.length, node; i < n; ++i) {\n if (node = group[i]) callback.call(node, node.__data__, i, group);\n }\n }\n\n return this;\n}\n","function propertyRemove(name) {\n return function() {\n delete this[name];\n };\n}\n\nfunction propertyConstant(name, value) {\n return function() {\n this[name] = value;\n };\n}\n\nfunction propertyFunction(name, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) delete this[name];\n else this[name] = v;\n };\n}\n\nexport default function(name, value) {\n return arguments.length > 1\n ? this.each((value == null\n ? propertyRemove : typeof value === \"function\"\n ? propertyFunction\n : propertyConstant)(name, value))\n : this.node()[name];\n}\n","import creator from \"../creator\";\n\nexport default function(name) {\n var create = typeof name === \"function\" ? name : creator(name);\n return this.select(function() {\n return this.appendChild(create.apply(this, arguments));\n });\n}\n","export default function(value) {\n return arguments.length\n ? this.property(\"__data__\", value)\n : this.node().__data__;\n}\n","import {Selection, root} from \"./selection/index\";\n\nexport default function(selector) {\n return typeof selector === \"string\"\n ? new Selection([[document.querySelector(selector)]], [document.documentElement])\n : new Selection([[selector]], root);\n}\n","var nextId = 0;\n\nexport default function local() {\n return new Local;\n}\n\nfunction Local() {\n this._ = \"@\" + (++nextId).toString(36);\n}\n\nLocal.prototype = local.prototype = {\n constructor: Local,\n get: function(node) {\n var id = this._;\n while (!(id in node)) if (!(node = node.parentNode)) return;\n return node[id];\n },\n set: function(node, value) {\n return node[this._] = value;\n },\n remove: function(node) {\n return this._ in node && delete node[this._];\n },\n toString: function() {\n return this._;\n }\n};\n","import {event} from \"./selection/on\";\n\nexport default function() {\n var current = event, source;\n while (source = current.sourceEvent) current = source;\n return current;\n}\n","export default function(node, event) {\n var svg = node.ownerSVGElement || node;\n\n if (svg.createSVGPoint) {\n var point = svg.createSVGPoint();\n point.x = event.clientX, point.y = event.clientY;\n point = point.matrixTransform(node.getScreenCTM().inverse());\n return [point.x, point.y];\n }\n\n var rect = node.getBoundingClientRect();\n return [event.clientX - rect.left - node.clientLeft, event.clientY - rect.top - node.clientTop];\n}\n","import sourceEvent from \"./sourceEvent\";\nimport point from \"./point\";\n\nexport default function(node) {\n var event = sourceEvent();\n if (event.changedTouches) event = event.changedTouches[0];\n return point(node, event);\n}\n","import sourceEvent from \"./sourceEvent\";\nimport point from \"./point\";\n\nexport default function(node, touches, identifier) {\n if (arguments.length < 3) identifier = touches, touches = sourceEvent().changedTouches;\n\n for (var i = 0, n = touches ? touches.length : 0, touch; i < n; ++i) {\n if ((touch = touches[i]).identifier === identifier) {\n return point(node, touch);\n }\n }\n\n return null;\n}\n","var noop = {value: function() {}};\n\nfunction dispatch() {\n for (var i = 0, n = arguments.length, _ = {}, t; i < n; ++i) {\n if (!(t = arguments[i] + \"\") || (t in _)) throw new Error(\"illegal type: \" + t);\n _[t] = [];\n }\n return new Dispatch(_);\n}\n\nfunction Dispatch(_) {\n this._ = _;\n}\n\nfunction parseTypenames(typenames, types) {\n return typenames.trim().split(/^|\\s+/).map(function(t) {\n var name = \"\", i = t.indexOf(\".\");\n if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n if (t && !types.hasOwnProperty(t)) throw new Error(\"unknown type: \" + t);\n return {type: t, name: name};\n });\n}\n\nDispatch.prototype = dispatch.prototype = {\n constructor: Dispatch,\n on: function(typename, callback) {\n var _ = this._,\n T = parseTypenames(typename + \"\", _),\n t,\n i = -1,\n n = T.length;\n\n // If no callback was specified, return the callback of the given type and name.\n if (arguments.length < 2) {\n while (++i < n) if ((t = (typename = T[i]).type) && (t = get(_[t], typename.name))) return t;\n return;\n }\n\n // If a type was specified, set the callback for the given type and name.\n // Otherwise, if a null callback was specified, remove callbacks of the given name.\n if (callback != null && typeof callback !== \"function\") throw new Error(\"invalid callback: \" + callback);\n while (++i < n) {\n if (t = (typename = T[i]).type) _[t] = set(_[t], typename.name, callback);\n else if (callback == null) for (t in _) _[t] = set(_[t], typename.name, null);\n }\n\n return this;\n },\n copy: function() {\n var copy = {}, _ = this._;\n for (var t in _) copy[t] = _[t].slice();\n return new Dispatch(copy);\n },\n call: function(type, that) {\n if ((n = arguments.length - 2) > 0) for (var args = new Array(n), i = 0, n, t; i < n; ++i) args[i] = arguments[i + 2];\n if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n for (t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n },\n apply: function(type, that, args) {\n if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n for (var t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n }\n};\n\nfunction get(type, name) {\n for (var i = 0, n = type.length, c; i < n; ++i) {\n if ((c = type[i]).name === name) {\n return c.value;\n }\n }\n}\n\nfunction set(type, name, callback) {\n for (var i = 0, n = type.length; i < n; ++i) {\n if (type[i].name === name) {\n type[i] = noop, type = type.slice(0, i).concat(type.slice(i + 1));\n break;\n }\n }\n if (callback != null) type.push({name: name, value: callback});\n return type;\n}\n\nexport default dispatch;\n","import {event} from \"d3-selection\";\n\nexport function nopropagation() {\n event.stopImmediatePropagation();\n}\n\nexport default function() {\n event.preventDefault();\n event.stopImmediatePropagation();\n}\n","import {select} from \"d3-selection\";\nimport noevent from \"./noevent\";\n\nexport default function(view) {\n var root = view.document.documentElement,\n selection = select(view).on(\"dragstart.drag\", noevent, true);\n if (\"onselectstart\" in root) {\n selection.on(\"selectstart.drag\", noevent, true);\n } else {\n root.__noselect = root.style.MozUserSelect;\n root.style.MozUserSelect = \"none\";\n }\n}\n\nexport function yesdrag(view, noclick) {\n var root = view.document.documentElement,\n selection = select(view).on(\"dragstart.drag\", null);\n if (noclick) {\n selection.on(\"click.drag\", noevent, true);\n setTimeout(function() { selection.on(\"click.drag\", null); }, 0);\n }\n if (\"onselectstart\" in root) {\n selection.on(\"selectstart.drag\", null);\n } else {\n root.style.MozUserSelect = root.__noselect;\n delete root.__noselect;\n }\n}\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","export default function DragEvent(target, type, subject, id, active, x, y, dx, dy, dispatch) {\n this.target = target;\n this.type = type;\n this.subject = subject;\n this.identifier = id;\n this.active = active;\n this.x = x;\n this.y = y;\n this.dx = dx;\n this.dy = dy;\n this._ = dispatch;\n}\n\nDragEvent.prototype.on = function() {\n var value = this._.on.apply(this._, arguments);\n return value === this._ ? this : value;\n};\n","import {dispatch} from \"d3-dispatch\";\nimport {event, customEvent, select, mouse, touch} from \"d3-selection\";\nimport nodrag, {yesdrag} from \"./nodrag\";\nimport noevent, {nopropagation} from \"./noevent\";\nimport constant from \"./constant\";\nimport DragEvent from \"./event\";\n\n// Ignore right-click, since that should open the context menu.\nfunction defaultFilter() {\n return !event.button;\n}\n\nfunction defaultContainer() {\n return this.parentNode;\n}\n\nfunction defaultSubject(d) {\n return d == null ? {x: event.x, y: event.y} : d;\n}\n\nfunction defaultTouchable() {\n return \"ontouchstart\" in this;\n}\n\nexport default function() {\n var filter = defaultFilter,\n container = defaultContainer,\n subject = defaultSubject,\n touchable = defaultTouchable,\n gestures = {},\n listeners = dispatch(\"start\", \"drag\", \"end\"),\n active = 0,\n mousedownx,\n mousedowny,\n mousemoving,\n touchending,\n clickDistance2 = 0;\n\n function drag(selection) {\n selection\n .on(\"mousedown.drag\", mousedowned)\n .filter(touchable)\n .on(\"touchstart.drag\", touchstarted)\n .on(\"touchmove.drag\", touchmoved)\n .on(\"touchend.drag touchcancel.drag\", touchended)\n .style(\"touch-action\", \"none\")\n .style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\");\n }\n\n function mousedowned() {\n if (touchending || !filter.apply(this, arguments)) return;\n var gesture = beforestart(\"mouse\", container.apply(this, arguments), mouse, this, arguments);\n if (!gesture) return;\n select(event.view).on(\"mousemove.drag\", mousemoved, true).on(\"mouseup.drag\", mouseupped, true);\n nodrag(event.view);\n nopropagation();\n mousemoving = false;\n mousedownx = event.clientX;\n mousedowny = event.clientY;\n gesture(\"start\");\n }\n\n function mousemoved() {\n noevent();\n if (!mousemoving) {\n var dx = event.clientX - mousedownx, dy = event.clientY - mousedowny;\n mousemoving = dx * dx + dy * dy > clickDistance2;\n }\n gestures.mouse(\"drag\");\n }\n\n function mouseupped() {\n select(event.view).on(\"mousemove.drag mouseup.drag\", null);\n yesdrag(event.view, mousemoving);\n noevent();\n gestures.mouse(\"end\");\n }\n\n function touchstarted() {\n if (!filter.apply(this, arguments)) return;\n var touches = event.changedTouches,\n c = container.apply(this, arguments),\n n = touches.length, i, gesture;\n\n for (i = 0; i < n; ++i) {\n if (gesture = beforestart(touches[i].identifier, c, touch, this, arguments)) {\n nopropagation();\n gesture(\"start\");\n }\n }\n }\n\n function touchmoved() {\n var touches = event.changedTouches,\n n = touches.length, i, gesture;\n\n for (i = 0; i < n; ++i) {\n if (gesture = gestures[touches[i].identifier]) {\n noevent();\n gesture(\"drag\");\n }\n }\n }\n\n function touchended() {\n var touches = event.changedTouches,\n n = touches.length, i, gesture;\n\n if (touchending) clearTimeout(touchending);\n touchending = setTimeout(function() { touchending = null; }, 500); // Ghost clicks are delayed!\n for (i = 0; i < n; ++i) {\n if (gesture = gestures[touches[i].identifier]) {\n nopropagation();\n gesture(\"end\");\n }\n }\n }\n\n function beforestart(id, container, point, that, args) {\n var p = point(container, id), s, dx, dy,\n sublisteners = listeners.copy();\n\n if (!customEvent(new DragEvent(drag, \"beforestart\", s, id, active, p[0], p[1], 0, 0, sublisteners), function() {\n if ((event.subject = s = subject.apply(that, args)) == null) return false;\n dx = s.x - p[0] || 0;\n dy = s.y - p[1] || 0;\n return true;\n })) return;\n\n return function gesture(type) {\n var p0 = p, n;\n switch (type) {\n case \"start\": gestures[id] = gesture, n = active++; break;\n case \"end\": delete gestures[id], --active; // nobreak\n case \"drag\": p = point(container, id), n = active; break;\n }\n customEvent(new DragEvent(drag, type, s, id, n, p[0] + dx, p[1] + dy, p[0] - p0[0], p[1] - p0[1], sublisteners), sublisteners.apply, sublisteners, [type, that, args]);\n };\n }\n\n drag.filter = function(_) {\n return arguments.length ? (filter = typeof _ === \"function\" ? _ : constant(!!_), drag) : filter;\n };\n\n drag.container = function(_) {\n return arguments.length ? (container = typeof _ === \"function\" ? _ : constant(_), drag) : container;\n };\n\n drag.subject = function(_) {\n return arguments.length ? (subject = typeof _ === \"function\" ? _ : constant(_), drag) : subject;\n };\n\n drag.touchable = function(_) {\n return arguments.length ? (touchable = typeof _ === \"function\" ? _ : constant(!!_), drag) : touchable;\n };\n\n drag.on = function() {\n var value = listeners.on.apply(listeners, arguments);\n return value === listeners ? drag : value;\n };\n\n drag.clickDistance = function(_) {\n return arguments.length ? (clickDistance2 = (_ = +_) * _, drag) : Math.sqrt(clickDistance2);\n };\n\n return drag;\n}\n","var frame = 0, // is an animation frame pending?\n timeout = 0, // is a timeout pending?\n interval = 0, // are any timers active?\n pokeDelay = 1000, // how frequently we check for clock skew\n taskHead,\n taskTail,\n clockLast = 0,\n clockNow = 0,\n clockSkew = 0,\n clock = typeof performance === \"object\" && performance.now ? performance : Date,\n setFrame = typeof window === \"object\" && window.requestAnimationFrame ? window.requestAnimationFrame.bind(window) : function(f) { setTimeout(f, 17); };\n\nexport function now() {\n return clockNow || (setFrame(clearNow), clockNow = clock.now() + clockSkew);\n}\n\nfunction clearNow() {\n clockNow = 0;\n}\n\nexport function Timer() {\n this._call =\n this._time =\n this._next = null;\n}\n\nTimer.prototype = timer.prototype = {\n constructor: Timer,\n restart: function(callback, delay, time) {\n if (typeof callback !== \"function\") throw new TypeError(\"callback is not a function\");\n time = (time == null ? now() : +time) + (delay == null ? 0 : +delay);\n if (!this._next && taskTail !== this) {\n if (taskTail) taskTail._next = this;\n else taskHead = this;\n taskTail = this;\n }\n this._call = callback;\n this._time = time;\n sleep();\n },\n stop: function() {\n if (this._call) {\n this._call = null;\n this._time = Infinity;\n sleep();\n }\n }\n};\n\nexport function timer(callback, delay, time) {\n var t = new Timer;\n t.restart(callback, delay, time);\n return t;\n}\n\nexport function timerFlush() {\n now(); // Get the current time, if not already set.\n ++frame; // Pretend we’ve set an alarm, if we haven’t already.\n var t = taskHead, e;\n while (t) {\n if ((e = clockNow - t._time) >= 0) t._call.call(null, e);\n t = t._next;\n }\n --frame;\n}\n\nfunction wake() {\n clockNow = (clockLast = clock.now()) + clockSkew;\n frame = timeout = 0;\n try {\n timerFlush();\n } finally {\n frame = 0;\n nap();\n clockNow = 0;\n }\n}\n\nfunction poke() {\n var now = clock.now(), delay = now - clockLast;\n if (delay > pokeDelay) clockSkew -= delay, clockLast = now;\n}\n\nfunction nap() {\n var t0, t1 = taskHead, t2, time = Infinity;\n while (t1) {\n if (t1._call) {\n if (time > t1._time) time = t1._time;\n t0 = t1, t1 = t1._next;\n } else {\n t2 = t1._next, t1._next = null;\n t1 = t0 ? t0._next = t2 : taskHead = t2;\n }\n }\n taskTail = t0;\n sleep(time);\n}\n\nfunction sleep(time) {\n if (frame) return; // Soonest alarm already set, or will be.\n if (timeout) timeout = clearTimeout(timeout);\n var delay = time - clockNow; // Strictly less than if we recomputed clockNow.\n if (delay > 24) {\n if (time < Infinity) timeout = setTimeout(wake, time - clock.now() - clockSkew);\n if (interval) interval = clearInterval(interval);\n } else {\n if (!interval) clockLast = clock.now(), interval = setInterval(poke, pokeDelay);\n frame = 1, setFrame(wake);\n }\n}\n","import {Timer} from \"./timer\";\n\nexport default function(callback, delay, time) {\n var t = new Timer;\n delay = delay == null ? 0 : +delay;\n t.restart(function(elapsed) {\n t.stop();\n callback(elapsed + delay);\n }, delay, time);\n return t;\n}\n","import {dispatch} from \"d3-dispatch\";\nimport {timer, timeout} from \"d3-timer\";\n\nvar emptyOn = dispatch(\"start\", \"end\", \"interrupt\");\nvar emptyTween = [];\n\nexport var CREATED = 0;\nexport var SCHEDULED = 1;\nexport var STARTING = 2;\nexport var STARTED = 3;\nexport var RUNNING = 4;\nexport var ENDING = 5;\nexport var ENDED = 6;\n\nexport default function(node, name, id, index, group, timing) {\n var schedules = node.__transition;\n if (!schedules) node.__transition = {};\n else if (id in schedules) return;\n create(node, id, {\n name: name,\n index: index, // For context during callback.\n group: group, // For context during callback.\n on: emptyOn,\n tween: emptyTween,\n time: timing.time,\n delay: timing.delay,\n duration: timing.duration,\n ease: timing.ease,\n timer: null,\n state: CREATED\n });\n}\n\nexport function init(node, id) {\n var schedule = get(node, id);\n if (schedule.state > CREATED) throw new Error(\"too late; already scheduled\");\n return schedule;\n}\n\nexport function set(node, id) {\n var schedule = get(node, id);\n if (schedule.state > STARTING) throw new Error(\"too late; already started\");\n return schedule;\n}\n\nexport function get(node, id) {\n var schedule = node.__transition;\n if (!schedule || !(schedule = schedule[id])) throw new Error(\"transition not found\");\n return schedule;\n}\n\nfunction create(node, id, self) {\n var schedules = node.__transition,\n tween;\n\n // Initialize the self timer when the transition is created.\n // Note the actual delay is not known until the first callback!\n schedules[id] = self;\n self.timer = timer(schedule, 0, self.time);\n\n function schedule(elapsed) {\n self.state = SCHEDULED;\n self.timer.restart(start, self.delay, self.time);\n\n // If the elapsed delay is less than our first sleep, start immediately.\n if (self.delay <= elapsed) start(elapsed - self.delay);\n }\n\n function start(elapsed) {\n var i, j, n, o;\n\n // If the state is not SCHEDULED, then we previously errored on start.\n if (self.state !== SCHEDULED) return stop();\n\n for (i in schedules) {\n o = schedules[i];\n if (o.name !== self.name) continue;\n\n // While this element already has a starting transition during this frame,\n // defer starting an interrupting transition until that transition has a\n // chance to tick (and possibly end); see d3/d3-transition#54!\n if (o.state === STARTED) return timeout(start);\n\n // Interrupt the active transition, if any.\n // Dispatch the interrupt event.\n if (o.state === RUNNING) {\n o.state = ENDED;\n o.timer.stop();\n o.on.call(\"interrupt\", node, node.__data__, o.index, o.group);\n delete schedules[i];\n }\n\n // Cancel any pre-empted transitions. No interrupt event is dispatched\n // because the cancelled transitions never started. Note that this also\n // removes this transition from the pending list!\n else if (+i < id) {\n o.state = ENDED;\n o.timer.stop();\n delete schedules[i];\n }\n }\n\n // Defer the first tick to end of the current frame; see d3/d3#1576.\n // Note the transition may be canceled after start and before the first tick!\n // Note this must be scheduled before the start event; see d3/d3-transition#16!\n // Assuming this is successful, subsequent callbacks go straight to tick.\n timeout(function() {\n if (self.state === STARTED) {\n self.state = RUNNING;\n self.timer.restart(tick, self.delay, self.time);\n tick(elapsed);\n }\n });\n\n // Dispatch the start event.\n // Note this must be done before the tween are initialized.\n self.state = STARTING;\n self.on.call(\"start\", node, node.__data__, self.index, self.group);\n if (self.state !== STARTING) return; // interrupted\n self.state = STARTED;\n\n // Initialize the tween, deleting null tween.\n tween = new Array(n = self.tween.length);\n for (i = 0, j = -1; i < n; ++i) {\n if (o = self.tween[i].value.call(node, node.__data__, self.index, self.group)) {\n tween[++j] = o;\n }\n }\n tween.length = j + 1;\n }\n\n function tick(elapsed) {\n var t = elapsed < self.duration ? self.ease.call(null, elapsed / self.duration) : (self.timer.restart(stop), self.state = ENDING, 1),\n i = -1,\n n = tween.length;\n\n while (++i < n) {\n tween[i].call(null, t);\n }\n\n // Dispatch the end event.\n if (self.state === ENDING) {\n self.on.call(\"end\", node, node.__data__, self.index, self.group);\n stop();\n }\n }\n\n function stop() {\n self.state = ENDED;\n self.timer.stop();\n delete schedules[id];\n for (var i in schedules) return; // eslint-disable-line no-unused-vars\n delete node.__transition;\n }\n}\n","import {get, set} from \"./schedule\";\n\nfunction tweenRemove(id, name) {\n var tween0, tween1;\n return function() {\n var schedule = set(this, id),\n tween = schedule.tween;\n\n // If this node shared tween with the previous node,\n // just assign the updated shared tween and we’re done!\n // Otherwise, copy-on-write.\n if (tween !== tween0) {\n tween1 = tween0 = tween;\n for (var i = 0, n = tween1.length; i < n; ++i) {\n if (tween1[i].name === name) {\n tween1 = tween1.slice();\n tween1.splice(i, 1);\n break;\n }\n }\n }\n\n schedule.tween = tween1;\n };\n}\n\nfunction tweenFunction(id, name, value) {\n var tween0, tween1;\n if (typeof value !== \"function\") throw new Error;\n return function() {\n var schedule = set(this, id),\n tween = schedule.tween;\n\n // If this node shared tween with the previous node,\n // just assign the updated shared tween and we’re done!\n // Otherwise, copy-on-write.\n if (tween !== tween0) {\n tween1 = (tween0 = tween).slice();\n for (var t = {name: name, value: value}, i = 0, n = tween1.length; i < n; ++i) {\n if (tween1[i].name === name) {\n tween1[i] = t;\n break;\n }\n }\n if (i === n) tween1.push(t);\n }\n\n schedule.tween = tween1;\n };\n}\n\nexport default function(name, value) {\n var id = this._id;\n\n name += \"\";\n\n if (arguments.length < 2) {\n var tween = get(this.node(), id).tween;\n for (var i = 0, n = tween.length, t; i < n; ++i) {\n if ((t = tween[i]).name === name) {\n return t.value;\n }\n }\n return null;\n }\n\n return this.each((value == null ? tweenRemove : tweenFunction)(id, name, value));\n}\n\nexport function tweenValue(transition, name, value) {\n var id = transition._id;\n\n transition.each(function() {\n var schedule = set(this, id);\n (schedule.value || (schedule.value = {}))[name] = value.apply(this, arguments);\n });\n\n return function(node) {\n return get(node, id).value[name];\n };\n}\n","import {color} from \"d3-color\";\nimport {interpolateNumber, interpolateRgb, interpolateString} from \"d3-interpolate\";\n\nexport default function(a, b) {\n var c;\n return (typeof b === \"number\" ? interpolateNumber\n : b instanceof color ? interpolateRgb\n : (c = color(b)) ? (b = c, interpolateRgb)\n : interpolateString)(a, b);\n}\n","function removeFunction(id) {\n return function() {\n var parent = this.parentNode;\n for (var i in this.__transition) if (+i !== id) return;\n if (parent) parent.removeChild(this);\n };\n}\n\nexport default function() {\n return this.on(\"end.remove\", removeFunction(this._id));\n}\n","import {selection} from \"d3-selection\";\n\nvar Selection = selection.prototype.constructor;\n\nexport default function() {\n return new Selection(this._groups, this._parents);\n}\n","import {tweenValue} from \"./tween\";\n\nfunction textConstant(value) {\n return function() {\n this.textContent = value;\n };\n}\n\nfunction textFunction(value) {\n return function() {\n var value1 = value(this);\n this.textContent = value1 == null ? \"\" : value1;\n };\n}\n\nexport default function(value) {\n return this.tween(\"text\", typeof value === \"function\"\n ? textFunction(tweenValue(this, \"text\", value))\n : textConstant(value == null ? \"\" : value + \"\"));\n}\n","import {selection} from \"d3-selection\";\nimport transition_attr from \"./attr\";\nimport transition_attrTween from \"./attrTween\";\nimport transition_delay from \"./delay\";\nimport transition_duration from \"./duration\";\nimport transition_ease from \"./ease\";\nimport transition_filter from \"./filter\";\nimport transition_merge from \"./merge\";\nimport transition_on from \"./on\";\nimport transition_remove from \"./remove\";\nimport transition_select from \"./select\";\nimport transition_selectAll from \"./selectAll\";\nimport transition_selection from \"./selection\";\nimport transition_style from \"./style\";\nimport transition_styleTween from \"./styleTween\";\nimport transition_text from \"./text\";\nimport transition_transition from \"./transition\";\nimport transition_tween from \"./tween\";\n\nvar id = 0;\n\nexport function Transition(groups, parents, name, id) {\n this._groups = groups;\n this._parents = parents;\n this._name = name;\n this._id = id;\n}\n\nexport default function transition(name) {\n return selection().transition(name);\n}\n\nexport function newId() {\n return ++id;\n}\n\nvar selection_prototype = selection.prototype;\n\nTransition.prototype = transition.prototype = {\n constructor: Transition,\n select: transition_select,\n selectAll: transition_selectAll,\n filter: transition_filter,\n merge: transition_merge,\n selection: transition_selection,\n transition: transition_transition,\n call: selection_prototype.call,\n nodes: selection_prototype.nodes,\n node: selection_prototype.node,\n size: selection_prototype.size,\n empty: selection_prototype.empty,\n each: selection_prototype.each,\n on: transition_on,\n attr: transition_attr,\n attrTween: transition_attrTween,\n style: transition_style,\n styleTween: transition_styleTween,\n text: transition_text,\n remove: transition_remove,\n tween: transition_tween,\n delay: transition_delay,\n duration: transition_duration,\n ease: transition_ease\n};\n","import {selector} from \"d3-selection\";\nimport {Transition} from \"./index\";\nimport schedule, {get} from \"./schedule\";\n\nexport default function(select) {\n var name = this._name,\n id = this._id;\n\n if (typeof select !== \"function\") select = selector(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {\n if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {\n if (\"__data__\" in node) subnode.__data__ = node.__data__;\n subgroup[i] = subnode;\n schedule(subgroup[i], name, id, i, subgroup, get(node, id));\n }\n }\n }\n\n return new Transition(subgroups, this._parents, name, id);\n}\n","import {selectorAll} from \"d3-selection\";\nimport {Transition} from \"./index\";\nimport schedule, {get} from \"./schedule\";\n\nexport default function(select) {\n var name = this._name,\n id = this._id;\n\n if (typeof select !== \"function\") select = selectorAll(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n for (var children = select.call(node, node.__data__, i, group), child, inherit = get(node, id), k = 0, l = children.length; k < l; ++k) {\n if (child = children[k]) {\n schedule(child, name, id, k, children, inherit);\n }\n }\n subgroups.push(children);\n parents.push(node);\n }\n }\n }\n\n return new Transition(subgroups, parents, name, id);\n}\n","import {matcher} from \"d3-selection\";\nimport {Transition} from \"./index\";\n\nexport default function(match) {\n if (typeof match !== \"function\") match = matcher(match);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {\n if ((node = group[i]) && match.call(node, node.__data__, i, group)) {\n subgroup.push(node);\n }\n }\n }\n\n return new Transition(subgroups, this._parents, this._name, this._id);\n}\n","import {Transition} from \"./index\";\n\nexport default function(transition) {\n if (transition._id !== this._id) throw new Error;\n\n for (var groups0 = this._groups, groups1 = transition._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {\n for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group0[i] || group1[i]) {\n merge[i] = node;\n }\n }\n }\n\n for (; j < m0; ++j) {\n merges[j] = groups0[j];\n }\n\n return new Transition(merges, this._parents, this._name, this._id);\n}\n","import {Transition, newId} from \"./index\";\nimport schedule, {get} from \"./schedule\";\n\nexport default function() {\n var name = this._name,\n id0 = this._id,\n id1 = newId();\n\n for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n var inherit = get(node, id0);\n schedule(node, name, id1, i, group, {\n time: inherit.time + inherit.delay + inherit.duration,\n delay: 0,\n duration: inherit.duration,\n ease: inherit.ease\n });\n }\n }\n }\n\n return new Transition(groups, this._parents, name, id1);\n}\n","import {get, set, init} from \"./schedule\";\n\nfunction start(name) {\n return (name + \"\").trim().split(/^|\\s+/).every(function(t) {\n var i = t.indexOf(\".\");\n if (i >= 0) t = t.slice(0, i);\n return !t || t === \"start\";\n });\n}\n\nfunction onFunction(id, name, listener) {\n var on0, on1, sit = start(name) ? init : set;\n return function() {\n var schedule = sit(this, id),\n on = schedule.on;\n\n // If this node shared a dispatch with the previous node,\n // just assign the updated shared dispatch and we’re done!\n // Otherwise, copy-on-write.\n if (on !== on0) (on1 = (on0 = on).copy()).on(name, listener);\n\n schedule.on = on1;\n };\n}\n\nexport default function(name, listener) {\n var id = this._id;\n\n return arguments.length < 2\n ? get(this.node(), id).on.on(name)\n : this.each(onFunction(id, name, listener));\n}\n","import {interpolateTransformSvg as interpolateTransform} from \"d3-interpolate\";\nimport {namespace} from \"d3-selection\";\nimport {tweenValue} from \"./tween\";\nimport interpolate from \"./interpolate\";\n\nfunction attrRemove(name) {\n return function() {\n this.removeAttribute(name);\n };\n}\n\nfunction attrRemoveNS(fullname) {\n return function() {\n this.removeAttributeNS(fullname.space, fullname.local);\n };\n}\n\nfunction attrConstant(name, interpolate, value1) {\n var value00,\n interpolate0;\n return function() {\n var value0 = this.getAttribute(name);\n return value0 === value1 ? null\n : value0 === value00 ? interpolate0\n : interpolate0 = interpolate(value00 = value0, value1);\n };\n}\n\nfunction attrConstantNS(fullname, interpolate, value1) {\n var value00,\n interpolate0;\n return function() {\n var value0 = this.getAttributeNS(fullname.space, fullname.local);\n return value0 === value1 ? null\n : value0 === value00 ? interpolate0\n : interpolate0 = interpolate(value00 = value0, value1);\n };\n}\n\nfunction attrFunction(name, interpolate, value) {\n var value00,\n value10,\n interpolate0;\n return function() {\n var value0, value1 = value(this);\n if (value1 == null) return void this.removeAttribute(name);\n value0 = this.getAttribute(name);\n return value0 === value1 ? null\n : value0 === value00 && value1 === value10 ? interpolate0\n : interpolate0 = interpolate(value00 = value0, value10 = value1);\n };\n}\n\nfunction attrFunctionNS(fullname, interpolate, value) {\n var value00,\n value10,\n interpolate0;\n return function() {\n var value0, value1 = value(this);\n if (value1 == null) return void this.removeAttributeNS(fullname.space, fullname.local);\n value0 = this.getAttributeNS(fullname.space, fullname.local);\n return value0 === value1 ? null\n : value0 === value00 && value1 === value10 ? interpolate0\n : interpolate0 = interpolate(value00 = value0, value10 = value1);\n };\n}\n\nexport default function(name, value) {\n var fullname = namespace(name), i = fullname === \"transform\" ? interpolateTransform : interpolate;\n return this.attrTween(name, typeof value === \"function\"\n ? (fullname.local ? attrFunctionNS : attrFunction)(fullname, i, tweenValue(this, \"attr.\" + name, value))\n : value == null ? (fullname.local ? attrRemoveNS : attrRemove)(fullname)\n : (fullname.local ? attrConstantNS : attrConstant)(fullname, i, value + \"\"));\n}\n","import {namespace} from \"d3-selection\";\n\nfunction attrTweenNS(fullname, value) {\n function tween() {\n var node = this, i = value.apply(node, arguments);\n return i && function(t) {\n node.setAttributeNS(fullname.space, fullname.local, i(t));\n };\n }\n tween._value = value;\n return tween;\n}\n\nfunction attrTween(name, value) {\n function tween() {\n var node = this, i = value.apply(node, arguments);\n return i && function(t) {\n node.setAttribute(name, i(t));\n };\n }\n tween._value = value;\n return tween;\n}\n\nexport default function(name, value) {\n var key = \"attr.\" + name;\n if (arguments.length < 2) return (key = this.tween(key)) && key._value;\n if (value == null) return this.tween(key, null);\n if (typeof value !== \"function\") throw new Error;\n var fullname = namespace(name);\n return this.tween(key, (fullname.local ? attrTweenNS : attrTween)(fullname, value));\n}\n","import {interpolateTransformCss as interpolateTransform} from \"d3-interpolate\";\nimport {style} from \"d3-selection\";\nimport {tweenValue} from \"./tween\";\nimport interpolate from \"./interpolate\";\n\nfunction styleRemove(name, interpolate) {\n var value00,\n value10,\n interpolate0;\n return function() {\n var value0 = style(this, name),\n value1 = (this.style.removeProperty(name), style(this, name));\n return value0 === value1 ? null\n : value0 === value00 && value1 === value10 ? interpolate0\n : interpolate0 = interpolate(value00 = value0, value10 = value1);\n };\n}\n\nfunction styleRemoveEnd(name) {\n return function() {\n this.style.removeProperty(name);\n };\n}\n\nfunction styleConstant(name, interpolate, value1) {\n var value00,\n interpolate0;\n return function() {\n var value0 = style(this, name);\n return value0 === value1 ? null\n : value0 === value00 ? interpolate0\n : interpolate0 = interpolate(value00 = value0, value1);\n };\n}\n\nfunction styleFunction(name, interpolate, value) {\n var value00,\n value10,\n interpolate0;\n return function() {\n var value0 = style(this, name),\n value1 = value(this);\n if (value1 == null) value1 = (this.style.removeProperty(name), style(this, name));\n return value0 === value1 ? null\n : value0 === value00 && value1 === value10 ? interpolate0\n : interpolate0 = interpolate(value00 = value0, value10 = value1);\n };\n}\n\nexport default function(name, value, priority) {\n var i = (name += \"\") === \"transform\" ? interpolateTransform : interpolate;\n return value == null ? this\n .styleTween(name, styleRemove(name, i))\n .on(\"end.style.\" + name, styleRemoveEnd(name))\n : this.styleTween(name, typeof value === \"function\"\n ? styleFunction(name, i, tweenValue(this, \"style.\" + name, value))\n : styleConstant(name, i, value + \"\"), priority);\n}\n","function styleTween(name, value, priority) {\n function tween() {\n var node = this, i = value.apply(node, arguments);\n return i && function(t) {\n node.style.setProperty(name, i(t), priority);\n };\n }\n tween._value = value;\n return tween;\n}\n\nexport default function(name, value, priority) {\n var key = \"style.\" + (name += \"\");\n if (arguments.length < 2) return (key = this.tween(key)) && key._value;\n if (value == null) return this.tween(key, null);\n if (typeof value !== \"function\") throw new Error;\n return this.tween(key, styleTween(name, value, priority == null ? \"\" : priority));\n}\n","import {get, init} from \"./schedule\";\n\nfunction delayFunction(id, value) {\n return function() {\n init(this, id).delay = +value.apply(this, arguments);\n };\n}\n\nfunction delayConstant(id, value) {\n return value = +value, function() {\n init(this, id).delay = value;\n };\n}\n\nexport default function(value) {\n var id = this._id;\n\n return arguments.length\n ? this.each((typeof value === \"function\"\n ? delayFunction\n : delayConstant)(id, value))\n : get(this.node(), id).delay;\n}\n","import {get, set} from \"./schedule\";\n\nfunction durationFunction(id, value) {\n return function() {\n set(this, id).duration = +value.apply(this, arguments);\n };\n}\n\nfunction durationConstant(id, value) {\n return value = +value, function() {\n set(this, id).duration = value;\n };\n}\n\nexport default function(value) {\n var id = this._id;\n\n return arguments.length\n ? this.each((typeof value === \"function\"\n ? durationFunction\n : durationConstant)(id, value))\n : get(this.node(), id).duration;\n}\n","import {get, set} from \"./schedule\";\n\nfunction easeConstant(id, value) {\n if (typeof value !== \"function\") throw new Error;\n return function() {\n set(this, id).ease = value;\n };\n}\n\nexport default function(value) {\n var id = this._id;\n\n return arguments.length\n ? this.each(easeConstant(id, value))\n : get(this.node(), id).ease;\n}\n","import {Transition, newId} from \"../transition/index\";\nimport schedule from \"../transition/schedule\";\nimport {easeCubicInOut} from \"d3-ease\";\nimport {now} from \"d3-timer\";\n\nvar defaultTiming = {\n time: null, // Set on use.\n delay: 0,\n duration: 250,\n ease: easeCubicInOut\n};\n\nfunction inherit(node, id) {\n var timing;\n while (!(timing = node.__transition) || !(timing = timing[id])) {\n if (!(node = node.parentNode)) {\n return defaultTiming.time = now(), defaultTiming;\n }\n }\n return timing;\n}\n\nexport default function(name) {\n var id,\n timing;\n\n if (name instanceof Transition) {\n id = name._id, name = name._name;\n } else {\n id = newId(), (timing = defaultTiming).time = now(), name = name == null ? null : name + \"\";\n }\n\n for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n schedule(node, name, id, i, group, timing || inherit(node, id));\n }\n }\n }\n\n return new Transition(groups, this._parents, name, id);\n}\n","import {selection} from \"d3-selection\";\nimport selection_interrupt from \"./interrupt\";\nimport selection_transition from \"./transition\";\n\nselection.prototype.interrupt = selection_interrupt;\nselection.prototype.transition = selection_transition;\n","import interrupt from \"../interrupt\";\n\nexport default function(name) {\n return this.each(function() {\n interrupt(this, name);\n });\n}\n","import {STARTING, ENDING, ENDED} from \"./transition/schedule\";\n\nexport default function(node, name) {\n var schedules = node.__transition,\n schedule,\n active,\n empty = true,\n i;\n\n if (!schedules) return;\n\n name = name == null ? null : name + \"\";\n\n for (i in schedules) {\n if ((schedule = schedules[i]).name !== name) { empty = false; continue; }\n active = schedule.state > STARTING && schedule.state < ENDING;\n schedule.state = ENDED;\n schedule.timer.stop();\n if (active) schedule.on.call(\"interrupt\", node, node.__data__, schedule.index, schedule.group);\n delete schedules[i];\n }\n\n if (empty) delete node.__transition;\n}\n","import {Transition} from \"./transition/index\";\nimport {SCHEDULED} from \"./transition/schedule\";\n\nvar root = [null];\n\nexport default function(node, name) {\n var schedules = node.__transition,\n schedule,\n i;\n\n if (schedules) {\n name = name == null ? null : name + \"\";\n for (i in schedules) {\n if ((schedule = schedules[i]).state > SCHEDULED && schedule.name === name) {\n return new Transition([[node]], root, name, +i);\n }\n }\n }\n\n return null;\n}\n","import { select, event as d3event, selection, clientPoint } from 'd3-selection';\nimport { drag as d3drag } from 'd3-drag';\nimport 'd3-transition';\nimport { mergeRecursive } from './common-utils';\n/**\n * This function takes a raw DOM element or\n * a string and returns a d3 selection of that element.\n *\n * @param {HTMLElement | string} element The element to wrap in d3 selection.\n * @return {Selection} Instance of d3 selection.\n */\nconst selectElement = element => select(element);\n\n/**\n * It creates a new d3 element on the parent element\n * @param {Selection} parent Element to which the element is to be appended\n * @param {Object} elemType Type of the new element\n * @param {Array} data Data for the new element\n * @param {Object} selector classname/id/tagname for the element\n * @return {HTMLElement} Newly Created Element\n */\nconst makeElement = (parent, elemType, data, selector, callbacks = {}, keyFn) => {\n if ((parent instanceof HTMLElement || parent instanceof SVGElement)) {\n parent = selectElement(parent);\n }\n\n const selectorVal = selector ? selector[0] : null;\n let selectorType = null;\n let actualSelector = null;\n let element = null;\n let enterSel = null;\n let mergeSel = null;\n let filter;\n if (selectorVal) {\n if (selectorVal === '#') {\n selectorType = 'id';\n actualSelector = selector;\n } else {\n selectorType = 'class';\n actualSelector = selector[0] === '.' ? selector : `.${selector}`;\n }\n } else {\n actualSelector = elemType;\n filter = true;\n }\n element = parent.selectAll(actualSelector);\n\n filter && (element = element.filter(function () {\n return this.parentNode === parent.node();\n }));\n element = element.data(data, keyFn);\n\n enterSel = element.enter()\n .append(elemType || 'div');\n callbacks.enter && enterSel.each(function (...params) {\n callbacks.enter(selectElement(this), ...params);\n });\n\n mergeSel = enterSel.merge(element);\n callbacks.update && mergeSel.each(function (...params) {\n callbacks.update(selectElement(this), ...params);\n });\n if (selectorType === 'class') {\n mergeSel.classed(selectorVal === '.' ? selector.substring(1, selector.length) : selector, true);\n } else if (selectorType === 'id') {\n mergeSel.attr('id', selector.substring(1, selector.length));\n }\n const exitSel = element.exit();\n\n if (callbacks.exit) {\n exitSel.each(function (...params) {\n callbacks.exit(selectElement(this), ...params);\n });\n } else {\n exitSel.remove();\n }\n return mergeSel;\n};\n\n/**\n * This function applies styles to an element\n * @param {Object} elem Element Selection\n * @param {Object} styleObj Style Object to be applied\n * @return {Element} Newly Created Element\n*/\nconst applyStyle = (elem, styleObj) => {\n Object.entries(styleObj).forEach((d) => {\n elem.style(d[0], d[1]);\n }, this);\n return elem;\n};\n\n/**\n * This function appends a dom element in another element.\n * @param {HTMLElement | SVGElement} element1 The element in which to append the second element\n * @param {HTMLElement | SVGElement} element2 The element which will be appended.\n */\nconst appendElement = (element1, element2) => {\n element1.appendChild(element2);\n};\n\n/**\n * Sets the attributes to the element.\n * @param {HTMLElement | SVGElement} element Element on which attributes will be applied\n * @param {Object} attrs Attributes which need to be applied\n */\nconst setElementAttrs = (element, attrs) => {\n for (const key in attrs) {\n if ({}.hasOwnProperty.call(attrs, key)) {\n element.attr(key, attrs[key]);\n }\n }\n};\n\n/**\n * Sets attributes in the svg or html element\n * @param {SVGElement | HTMLElement} element The element on which attrs will be applied\n * @param {Array.} attrs Array of attributes\n * @param {string} className className of elements to select.\n * @return {SVGElement | HTMLElement} SVGElement or html element.\n */\nconst setAttrs = (element, attrs, className) => {\n if (!(element instanceof selection)) {\n element = selectElement(element);\n }\n className !== undefined ? element.selectAll(`.${className}`).each(function () {\n setElementAttrs(select(this), attrs);\n }) : setElementAttrs(element, attrs);\n return element;\n};\n\n/**\n * Adds a css class to elements which passes the filter function.If filter function is not given,\n * then all elements will be applied the class.\n * @param {HTMLElement | SVGElement} element element\n * @param {string} className css class\n * @param {string} selector css selector\n * @param {Function} filterFn filter method.\n */\nconst addClass = (element, className, selector, filterFn) => {\n select(element).selectAll(selector).each(function (data) {\n const elem = select(this);\n filterFn ? filterFn(data) && elem.classed(className, true) :\n elem.classed(className, true);\n });\n};\n\n/**\n * Removes the css class from elements which passes the filter function.If filter function is not given,\n * then all elements will be applied the class.\n * @param {HTMLElement | SVGElement} element element\n * @param {string} className css class\n * @param {string} selector css selector\n * @param {Function} filterFn filter method.\n */\nconst removeClass = (element, className, selector, filterFn) => {\n select(element).selectAll(selector).each(function (data) {\n const elem = select(this);\n filterFn ? filterFn(data) && elem.classed(className, false) :\n elem.classed(className, false);\n });\n};\n\n/**\n * Sets styles in the svg or html element\n * @param {SVGElement | HTMLElement} element The element on which styles will be applied\n * @param {Array.} styles Array of style attributes\n * @return {SVGElement | HTMLElement} SVGElement or html element.\n */\nconst setStyles = (element, styles) => {\n if (!(element instanceof selection)) {\n element = selectElement(element);\n }\n for (const key in styles) {\n if ({}.hasOwnProperty.call(styles, key)) {\n element.style(key, styles[key]);\n }\n }\n return element;\n};\n\n/**\n * Creates svg or html elements by binding data to the selection.Removes extra elements\n * on exit.\n * @param {Object} params Parameter object\n * @param {SVGElement | HTMLElement} params.container Container element where all elements will be appended\n * @param {string} params.selector Selector by which elements will be selected from dom\n * @param {string} params.append Append tag\n * @param {Function} params.each Function which will be executed for each data point and element.\n */\nconst createElements = (params) => {\n const container = select(params.container);\n let data;\n let sel;\n\n data = params.data;\n if (typeof data === 'number') {\n data = Array(data).fill().map((d, i) => i);\n }\n sel = container.selectAll(params.selector).data(data);\n\n sel = container.selectAll(params.selector).filter(function () {\n return this.parentNode === container.node();\n }).data(params.data);\n\n const selectionMerge = sel.enter().append(params.append).merge(sel).each(function (d, i) {\n params.each(d, select(this), i);\n });\n\n selectionMerge.attr('class', params.className || '');\n sel.exit().remove();\n};\n\n/**\n * Clips an element with given measurement. Basically it is used to hide overflowing portions\n * of any element.\n * @param {SVGElement} container svg element which needs to be clipped.\n * @param {Object} measurement Dimensions of the clipped rectangle.\n * @param {string} id Unique id of the clip element\n */\nconst clipElement = (container, measurement, id) => {\n const clipPathElement = makeElement(select(container), 'clipPath', [1], `#${id}`);\n const clipPathRect = makeElement(clipPathElement, 'rect', [1]);\n clipPathRect.attr('x', measurement.x)\n .attr('y', measurement.x)\n .attr('width', measurement.width)\n .attr('height', measurement.height);\n clipPathElement.attr('clip-path', `url(#${id})`);\n};\n\n/**\n * Returns the element of the corresponding classname.\n * @param {HTMLElement | SVGElement} node html or svg node element.\n * @param {string} className css class to be applied.\n * @return {HTMLElement | SVGElement} html or svg element.\n */\nconst getElementsByClassName = (node, className) => select(node).selectAll(className).nodes();\n\n/**\n * Gets the mouse position relative to an svg type of element\n * @param {SVGElement} element Any svg element like rect, circle, etc.\n * @param {Event} event Event object.\n * @return {Object} x and y position relative to the container element passed.\n */\nconst getMousePos = (element, event) => {\n const boundingClientRect = element.getBoundingClientRect();\n return {\n x: event.x - boundingClientRect.x,\n y: event.y - boundingClientRect.y\n };\n};\n\nconst getClientPoint = (...params) => {\n const pos = clientPoint(...params);\n return {\n x: pos[0],\n y: pos[1]\n };\n};\n\n/** This function appends a dom element in another element.\n * @param {Object} tag The tag name of the element to append\n * @param {Object} mount Mount point fo the element\n * @return {Object} selection of the appended element\n */\nconst createElement = (tag, mount) => select(mount).append(tag).node();\n\n/**\n * Gets the d3 event function\n * @return {Object} d3 event\n */\nconst getEvent = () => d3event;\n\n/**\n * Gets the d3 drag function\n * @return {Object} d3 drag\n */\nconst getD3Drag = () => d3drag;\n\nconst getSmartComputedStyle = (group, css) => {\n let textEl;\n const testText = 'W';\n const mandatoryStyle = {\n 'fill-opacity': 0\n };\n const className = typeof css === 'string' ? css : (css instanceof Array ? css.join(' ') : undefined);\n\n if (group.node() instanceof HTMLElement) {\n textEl = group.append('div').html(testText);\n } else {\n textEl = group.append('text').text(testText);\n }\n\n if (className) {\n textEl.attr('class', className);\n } else if (typeof css === 'object') {\n delete css['fill-opacity'];\n mergeRecursive(mandatoryStyle, css);\n }\n\n textEl.style(mandatoryStyle);\n\n const computedStyle = window.getComputedStyle(textEl.node());\n const styleForSmartLabel = {\n fontSize: computedStyle.fontSize,\n fontFamily: computedStyle.fontFamily,\n fontWeight: computedStyle.fontWeight,\n fontStyle: computedStyle.fontStyle\n };\n\n textEl.remove();\n\n return styleForSmartLabel;\n};\n\nconst hasTouch = () => 'ontouchstart' in document.documentElement;\n\nexport {\n hasTouch,\n selectElement,\n makeElement,\n applyStyle,\n addClass,\n removeClass,\n appendElement,\n setAttrs,\n setStyles,\n createElement,\n createElements,\n clipElement,\n getElementsByClassName,\n getMousePos,\n getEvent,\n getD3Drag,\n getSmartComputedStyle,\n getClientPoint\n};\n","/**\n * This class represents a selection applied on a data array.\n *\n * @class Selection\n */\nclass Selection {\n /**\n * Creates an instance of Selection.\n * @param {Array} data Array of DataObjects.\n * @memberof Selection\n */\n constructor () {\n this._data = [];\n // // map of id to data\n this._idMap = {};\n\n this._mode = '';\n // data.forEach((item, idx) => {\n // const index = item.id || idx;\n // this._idMap[index] = item;\n // });\n // // array to store data in enter phase\n this._enterdata = [];\n // // array to store data in exit phase\n this._exitdata = [];\n }\n /**\n * Gets the object bound to a class\n *\n * @return {Object} current data set bound to the class\n * @memberof Selection\n */\n getObjects () {\n return Object.keys(this._idMap).map(e => this._idMap[e]);\n }\n\n /**\n * This method is used to supply seed data to a selection.\n *\n * @param {Array} newData Seed data to create the enter selection.\n * @param {Functon | undefined } idGetter This function is used to uniqely identify a data entry.\n * @return {Selection} Modified selection.\n * @memberof Selection\n */\n data (newData, idGetter) {\n if (idGetter) {\n this._data = [];\n this._idGetter = idGetter;\n const tempMap = {};\n\n newData.forEach((...params) => {\n const index = idGetter(...params);\n tempMap[index] = params[0];\n });\n // check if any data items have been removed\n const purgedIds = [];\n\n Object.keys(this._idMap).forEach((id) => {\n if (!tempMap[id]) {\n purgedIds.push(id);\n }\n });\n\n Object.keys(tempMap).forEach((id) => {\n if (!this._idMap[id]) {\n this._enterdata.push(tempMap[id]);\n } else {\n this._idMap[id] = tempMap[id];\n this._data.push(tempMap[id]);\n }\n });\n // move the purged items to exit selection\n purgedIds.forEach((id) => {\n const purged = this._idMap[id];\n this._exitdata.push(purged);\n // this._data = this._data.slice(id, 1);\n delete this._idMap[id];\n });\n // this._data = this._data.slice(temp, this._data.length);\n\n return this;\n }\n // no id getter supplied so use indices\n if (newData.length > this._data.length) {\n const startIdx = this._data.length;\n for (let i = startIdx; i < newData.length; i += 1) {\n this._enterdata.push(newData[i]);\n }\n } else {\n // push to exit selection\n const temp = newData.length;\n for (let i = temp; i < this._data.length; i += 1) {\n const purged = this._data[i];\n delete this._idMap[purged.id];\n this._exitdata.push(purged);\n }\n this._data = this._data.slice(temp, this._data.length);\n }\n return this;\n }\n\n /**\n * Applies the supplied callback to each data element\n * and returns a new selection.\n *\n * @param {Function} callback Callback to execute on each item.\n * @return {Selection} New selection with data created using callback.\n * @memberof EnterSelection\n */\n append (callback) {\n this[`_${this._mode}data`].forEach((...params) => {\n const data = params[0];\n const id = this._idGetter ? this._idGetter(...params) : (data.id || params[1]);\n this._idMap[id] = callback(...params);\n });\n this._mode = '';\n return this;\n }\n\n /**\n * This method returns an enter selection that\n * allows or update operations.\n *\n * @return {EnterSelection} Instance of enter selection.\n * @memberof Selection\n */\n enter () {\n this._mode = 'enter';\n return this;\n // return new EnterSelection(this._enterdata, this._idMap, this._idGetter);\n }\n\n /**\n * This method is used to set key value pairs\n * on data objects.\n *\n * @param {string} key Name of property.\n * @param {any} value Value of property.\n * @return {Selection} Modified selection.\n * @memberof Selection\n */\n attr (key, value) {\n this._data.forEach(item => item.attr(key, value));\n return this;\n }\n\n /**\n * This method merges the data of one selection with another.\n *\n * @param {Selection} selection Instance of selection.\n * @return {Selection} Modified selection.\n * @memberof Selection\n */\n merge (selection) {\n selection._data.forEach((...params) => {\n const id = this._idGetter ? this._idGetter(...params) : (params[0].id || params[1]);\n this._idMap[id] = params[0];\n this._data.push(params[0]);\n });\n // reset enter selection\n this._enterdata = [];\n return this;\n }\n\n /**\n * Returns a selection with exit data.\n *\n * @return {Selection} Instance of selection.\n * @memberof Selection\n */\n exit () {\n this._mode = 'exit';\n // const exitdata = this._exitdata;\n // const exitSelection = new Selection(exitdata);\n // this._exitdata = [];\n return this;\n }\n\n each (fn) {\n Object.keys(this._idMap).forEach((e) => {\n fn(this._idMap[e]);\n });\n return this;\n }\n\n map (fn) {\n Object.keys(this._idMap).forEach((...params) => {\n this._idMap[params[0]] = fn(this._idMap[params[0]], ...params);\n });\n return this;\n }\n\n /**\n * Executes the cleanup operation associated with data objets.\n *\n * @memberof Selection\n */\n remove () {\n // do cleanup on DDO's\n const data = this[`_${this._mode}data`];\n\n data.forEach(item => item.remove());\n if (this._mode === '') {\n this.each(e => e.remove());\n }\n this[`_${this._mode}data`] = [];\n this._mode = '';\n }\n}\n\nexport default Selection;\n","import { getUniqueId } from '../index';\n/**\n * Represents the base class that all objects that form\n * the data for a selection must inherit from.\n *\n * @class DataObject\n */\nclass DataObject {\n/**\n * Creates an instance of DataObject.\n * @memberof DataObject\n */\n constructor () {\n this._id = getUniqueId();\n }\n /**\n * Returns the id.\n *\n * @readonly\n * @memberof DataObject\n */\n get id () {\n return this._id;\n }\n\n /**\n * Sets the value corresponding to supplied key.\n *\n * @param {string} key The property name.\n * @param {any} value Value associated with prop.\n * @memberof DataObject\n */\n attr (key, value) {\n this[key] = value;\n }\n\n /**\n * Clean up code to be executed by each object.\n *\n * @override\n * @memberof DataObject\n */\n remove () {\n // cleanup\n }\n}\n\nexport default DataObject;\n","const events = [\n 'initialized',\n 'beforeupdate',\n 'updated',\n 'beforedraw',\n 'drawn',\n 'beforeremove',\n 'removed'\n];\n\nconst compositions = [\n 'canvas',\n 'unit',\n 'layer',\n 'axis',\n 'facet-headers',\n 'legend',\n 'caption'\n];\n\nconst EVENT_LIST = [];\n\ncompositions.forEach((composition) => {\n events.forEach((event) => {\n EVENT_LIST.push(`${composition}.${event}`);\n });\n});\n\nexport default EVENT_LIST;\n","import EVENT_LIST from './event-list';\n\n/**\n * At first call it accepts one function\n * calling it second time accepts notification object.\n * notification object then called with first accepted function\n *\n * @param {Function} resolveFn a promise's resolve function\n * @return {Function} a function to accept notification object\n */\nconst resolver = resolveFn => notification => resolveFn(notification);\n\n/**\n * Checks if the property string is present in the source object\n *\n * @param {Object} source source object whom you want to check the property\n * @param {string} property key name that need to be checked\n * @return {boolean} returns true if the property found in the source object\n */\nconst hasOwn = (source, property) => Object.prototype.hasOwnProperty.call(source, property);\n\n/**\n * LifeCycleManager which goes as a dependendecy to a muze\n * it accepts notification from the entire library throughout\n * the exeecution life\n *\n * @export\n * @class LifeCycleManager\n */\nexport default class LifeCycleManager {\n\n /**\n * Creates an instance of LifeCycleManager.\n * @memberof LifeCycleManager\n */\n constructor () {\n this._eventList = EVENT_LIST;\n this._promises = new Map();\n this._notifiers = {};\n this._lifeCycles = {};\n this._unreleasedLifeCycles = {};\n this._boot();\n }\n\n /**\n * Fills all the notifiers with resolver callback\n *\n * @memberof LifeCycleManager\n */\n _boot () {\n this._notifiers = this._eventList.reduce((acc, name) => {\n acc[name] = resolver;\n return acc;\n }, {});\n this._preparePromises();\n }\n\n /**\n * Public method which gives the promise corresponding\n * to the event name\n *\n * @param {string} eventName name of the event like `canvas.drawn`\n * @return {promise} promise that is passed to the user\n * @memberof LifeCycleManager\n */\n retrieve (eventName) {\n return this._promises.get(eventName);\n }\n\n /**\n * Creates a promise that will be passed to user's callback\n *\n * @param {string} eventName name of the event like `canvas.drawn`\n * @return {promise} a pending promise waiting for resolve to be called\n * @memberof LifeCycleManager\n */\n _makeNotifierPromise (eventName) {\n return new Promise((resolve) => {\n this._notifiers[eventName] = this._notifiers[eventName](resolve);\n });\n }\n\n /**\n * Prepares the promise map with pending promises\n * all the promises are in a pending state where their's\n * resolve function waiting to be called with notification object\n * @memberof LifeCycleManager\n */\n _preparePromises () {\n this._eventList.forEach((eventName) => {\n this._promises.set(eventName, this._makeNotifierPromise(eventName));\n });\n }\n\n /**\n * Resolves the promise with notification object\n *\n * @param {string} eventName name of the event in the system\n * @param {Object} notification notification object\n * @param {string} notification.formalName name of the sender creating the notification\n * @param {Object} notification.client instance or array of instances sending the notification\n * @param {string} notification.action the stage name when the event happened like `beforedraw`\n *\n * @memberof LifeCycleManager\n */\n _resolvePromise (eventName, notification) {\n this._notifiers[eventName](notification);\n }\n\n /**\n * Public method which is being called by different\n * subcompoents of the system at different execution atages\n * @param {Object} notification notification object\n * @param {string} notification.formalName name of the sender creating the notification\n * @param {Object} notification.client instance or array of instances sending the notification\n * @param {string} notification.action the stage name when the event happened like `beforedraw`\n * @memberof LifeCycleManager\n */\n notify (notification) {\n // get the composition name from notification\n // or from static formalName() method\n const composition = notification.formalName || notification.client.constructor.formalName();\n notification.formalName = composition;\n this._releasePromisesFromCache();\n this._notify(composition, notification);\n }\n\n /**\n * Notify user the with promsie in a callback\n * if callback not found then cache it\n *\n * @param {string} composition\n * @param {Object} notification notification object\n * @param {string} notification.formalName name of the sender creating the notification\n * @param {Object} notification.client instance or array of instances sending the notification\n * @param {string} notification.action the stage name when the event happened like `beforedraw`\n * @memberof LifeCycleManager\n */\n _notify (composition, notification) {\n const stage = notification.action;\n const eventName = `${composition}.${stage}`;\n\n // resolves promise with the notification object\n this._resolvePromise(eventName, notification);\n\n // get the promise from the promise map\n const promise = this.retrieve(eventName);\n\n if (this._lifeCycles[composition]) {\n if (this._lifeCycles[composition][stage]) {\n // if user given call back exists, then call with promise\n this._callLifeCycleCallback(composition, stage, promise);\n } else {\n // otherwise cache the promise\n this._cachePromise(composition, stage, promise);\n }\n } else {\n this._cachePromise(composition, stage, promise);\n }\n }\n\n /**\n * Calls the user's callback with callback\n *\n * @param {string} composition name of the compositon like `canvas`\n * @param {string} stage the stage name when the event happened like `beforedraw`\n * @param {promise} promise promise that is passed to the user\n * @memberof LifeCycleManager\n */\n _callLifeCycleCallback (composition, stage, promise) {\n const eventName = `${composition}.${stage}`;\n this._lifeCycles[composition][stage](promise);\n this._resetTargetPromise(eventName);\n }\n\n /**\n * Try to clear the cached promsies once we have\n * macthed callbacks from the user\n *\n * @memberof LifeCycleManager\n */\n _releasePromisesFromCache () {\n const compositions = Object.keys(this._unreleasedLifeCycles);\n compositions.forEach((composition) => {\n const stages = Object.keys(this._unreleasedLifeCycles[composition]);\n stages.forEach((stage) => {\n if (this._lifeCycles[composition]) {\n if (this._lifeCycles[composition][stage]) {\n // take the promise from unreleased lifeCycles\n const promise = this._unreleasedLifeCycles[composition][stage];\n // call the user given callback with that promise\n this._callLifeCycleCallback(composition, stage, promise);\n // delete promise from unreleased lifeCycles\n delete this._unreleasedLifeCycles[composition][stage];\n }\n }\n });\n });\n }\n\n /**\n * Cache the promise in the map. This cache\n * then get consumed if we get user callbacks\n * @param {string} composition name of the compositon like `canvas`\n * @param {string} stage the stage name when the event happened like `beforedraw`\n * @param {promise} promise promise that is passed to the user\n * @memberof LifeCycleManager\n */\n _cachePromise (composition, stage, promise) {\n if (!hasOwn(this._unreleasedLifeCycles, composition)) {\n this._unreleasedLifeCycles[composition] = {};\n }\n\n if (!hasOwn(this._unreleasedLifeCycles[composition], stage)) {\n this._unreleasedLifeCycles[composition][stage] = {};\n }\n this._unreleasedLifeCycles[composition][stage] = promise;\n }\n\n /**\n * It register's the callbacks gievn the user\n *\n * @param {Object} [lifeCycles={}] a object with list of callbacks\n * @memberof LifeCycleManager\n */\n register (lifeCycles = {}) {\n this._lifeCycles = lifeCycles;\n // as we get all the callbacks, try to call them\n // from unreleased promise map\n this._releasePromisesFromCache();\n }\n\n /**\n * Reset the promise into pending state\n *\n * @param {string} eventName name of the event happening\n * @memberof LifeCycleManager\n */\n _resetTargetPromise (eventName) {\n setTimeout(() => {\n this._notifiers[eventName] = resolver;\n this._promises.set(eventName, this._makeNotifierPromise(eventName));\n }, 0);\n }\n}\n","import LifeCycleManager from './lifecycle-manager';\n\nexport default LifeCycleManager;\n","export const DRAG = 'drag';\nexport const HOVER = 'hover';\nexport const SELECTIONDRAG = 'selectiondrag';\nexport const CLICK = 'click';\nexport const LONGTOUCH = 'longtouch';\nexport const TOUCHDRAG = 'touchdrag';\nexport const ALL_ACTIONS = '*';\n","const SELECTION_NEW_ENTRY = 1;\nconst SELECTION_NEW_EXIT = -1;\nconst SELECTION_NULL = 0;\nconst SELECTION_OLD_ENTRY = 2;\nconst SELECTION_OLD_EXIT = -2;\n\nexport {\n SELECTION_NEW_ENTRY,\n SELECTION_NEW_EXIT,\n SELECTION_NULL,\n SELECTION_OLD_ENTRY,\n SELECTION_OLD_EXIT\n};\n","import {\n SELECTION_NEW_ENTRY, SELECTION_NEW_EXIT, SELECTION_NULL, SELECTION_OLD_ENTRY, SELECTION_OLD_EXIT\n} from '../enums/selection';\n/* eslint-disable guard-for-in */\n\n/**\n * This component is used to keep track of the row tuples of the data which gets added and removed.\n * @class SelectionSet\n */\nclass SelectionSet {\n /**\n * Creates an instance of selection set\n * @param {Array.} completeSet Set of unique ids.\n */\n constructor (completeSet, _volatile) {\n this.completeSet = completeSet;\n this._set = completeSet.reduce((obj, key) => {\n obj[key] = SELECTION_NULL;\n return obj;\n }, {});\n this._volatile = _volatile;\n this._completeSetCount = completeSet.length;\n this._lockedSelection = {};\n this._resetted = true;\n }\n\n /**\n * Adds a set of ids to the selection set.\n * @param {Array.} ids Array of unique ids\n * @return {SelectionSet} Instance of selection set.\n */\n add (ids) {\n this._resetted = false;\n\n const set = this._set;\n // from exitset to entryset\n ids.forEach((i) => {\n set[i] = SELECTION_NEW_ENTRY;\n });\n\n for (const key in set) {\n if (set[key] !== SELECTION_NEW_ENTRY && set[key] !== SELECTION_OLD_ENTRY) {\n set[key] = set[key] < 0 ? SELECTION_OLD_EXIT : SELECTION_NEW_EXIT;\n }\n }\n return this;\n }\n\n /**\n * Adds a set of ids to the selection set.\n * @param {Array.} ids Array of unique ids\n * @return {SelectionSet} Instance of selection set.\n */\n update (ids) {\n const set = this._set;\n // from exitset to entryset\n ids.forEach((i) => {\n set[i] = SELECTION_OLD_ENTRY;\n });\n\n return this;\n }\n\n /**\n * Adds a set of ids to the selection set.\n * @param {Array.} ids Array of unique ids\n * @return {SelectionSet} Instance of selection set.\n */\n updateEntry () {\n const set = this._set;\n\n // from exitset to entryset\n for (const key in set) {\n set[key] = set[key] === SELECTION_NEW_ENTRY ? SELECTION_OLD_ENTRY : set[key];\n }\n return this;\n }\n\n /**\n * Adds a set of ids to the selection set.\n * @param {Array.} ids Array of unique ids\n * @return {SelectionSet} Instance of selection set.\n */\n updateExit () {\n const set = this._set;\n // from exitset to entryset\n for (const key in set) {\n set[key] = set[key] === SELECTION_NEW_EXIT ? SELECTION_OLD_EXIT : set[key];\n }\n return this;\n }\n\n /**\n * Removes the ids from the selection set.\n * @param {Array.} ids Array of unique ids\n * @return {SelectionSet} Instance of selection set\n */\n remove (ids) {\n this._resetted = false;\n\n const set = this._set;\n ids.forEach((i) => {\n set[i] = SELECTION_NEW_EXIT;\n });\n\n for (const key in set) {\n if (set[key] !== SELECTION_NEW_EXIT && set[key] !== SELECTION_OLD_EXIT) {\n set[key] = set[key] === 0 ? SELECTION_NEW_ENTRY : SELECTION_OLD_ENTRY;\n }\n }\n\n return this;\n }\n\n getSets () {\n const set = this._set;\n const retObj = {\n entrySet: [[], []],\n exitSet: [[], []],\n completeSet: []\n };\n\n for (const key in set) {\n if (set[key] > 0) {\n set[key] === SELECTION_OLD_ENTRY && retObj.entrySet[0].push(key);\n set[key] === SELECTION_NEW_ENTRY && retObj.entrySet[1].push(key);\n } else if (set[key] < 0) {\n set[key] === SELECTION_OLD_EXIT && retObj.exitSet[0].push(key);\n set[key] === SELECTION_NEW_EXIT && retObj.exitSet[1].push(key);\n }\n retObj.completeSet.push(key);\n }\n\n ['entrySet', 'exitSet'].forEach((type) => {\n retObj[type] = retObj[type].map(e => e.map(Number));\n });\n retObj.completeSet = retObj.completeSet.map(Number);\n\n return retObj;\n }\n\n /**\n * Resets the selection set to initial state. It sets the value of every unique id value to\n * null in the selection set.\n * @return {SelectionSet} Instance of selection set.\n */\n reset (ids) {\n const set = this._set;\n if (ids) {\n ids.forEach((i) => {\n set[i] = SELECTION_NULL;\n });\n } else {\n const lockedSel = this._lockedSelection;\n for (const key in set) {\n if (!(key in lockedSel)) {\n set[key] = SELECTION_NULL;\n }\n }\n }\n this._resetted = true;\n return this;\n }\n\n /**\n * Gets the set of ids which are added in the selection set.\n * @return {Array.} Array of unique ids\n */\n getEntrySet () {\n const set = this._set;\n const addSet = [];\n\n for (const key in set) {\n set[key] === SELECTION_NEW_ENTRY && addSet.push(key);\n }\n\n return addSet;\n }\n\n /**\n * Returns a set of unique ids which are already present in entry set\n * @param {Array} addSet Array of unique ids which are added\n *\n * @return {Array} Array of unique ids which are already in old entry set or new entry set\n */\n getExistingEntrySet (addSet) {\n const set = this._set;\n return addSet.filter(d => set[d] === SELECTION_NEW_ENTRY || set[d] === SELECTION_OLD_ENTRY);\n }\n\n getExistingExitSet (removeSet) {\n const set = this._set;\n return removeSet.filter(d => set[d] === SELECTION_NEW_EXIT || set[d] === SELECTION_OLD_EXIT);\n }\n\n /**\n * Gets the set of ids which are added in the selection set.\n * @return {Array.} Array of unique ids\n */\n getOldEntry () {\n const set = this._set;\n const updateSet = [];\n\n for (const key in set) {\n set[key] === SELECTION_OLD_ENTRY && updateSet.push(key);\n }\n return updateSet;\n }\n\n /**\n * Gets the set of ids which are added in the selection set.\n * @return {Array.} Array of unique ids\n */\n getOldExit () {\n const set = this._set;\n const updateSet = [];\n\n for (const key in set) {\n set[key] === SELECTION_OLD_EXIT && updateSet.push(key);\n }\n\n return updateSet;\n }\n\n /**\n * Gets the set of ids which are in the remove set.\n * @return {Array.} Array of unique ids\n */\n getExitSet () {\n const set = this._set;\n const removeSet = [];\n\n for (const key in set) {\n set[key] === SELECTION_NEW_EXIT && removeSet.push(key);\n }\n return removeSet;\n }\n\n getCompleteSet () {\n const set = this._set;\n const completeSet = [];\n\n for (const key in set) {\n completeSet.push(key);\n }\n\n return completeSet;\n }\n\n getCompleteSetCount () {\n return this._completeSetCount;\n }\n\n resetted () {\n return this._resetted;\n }\n\n /**\n * Swaps the add set and remove set in the selection set.\n * @return {SelectionSet} Instance of selection set.\n */\n toggle () {\n const set = this._set;\n\n for (const key in set) {\n if (set[key] === SELECTION_NEW_ENTRY) {\n set[key] = SELECTION_NEW_EXIT;\n } else if (set[key] === SELECTION_NEW_EXIT) {\n set[key] = SELECTION_NEW_ENTRY;\n } else if (set[key] === SELECTION_OLD_ENTRY) {\n set[key] = SELECTION_OLD_EXIT;\n } else {\n set[key] = SELECTION_OLD_ENTRY;\n }\n }\n\n return this;\n }\n}\n\nexport default SelectionSet;\n","import { clone } from 'muze-utils';\nimport * as SELECTION from '../enums/selection';\n\nexport const initializeSideEffects = (context, sideEffects) => {\n const sideEffectsMap = context._sideEffects;\n\n sideEffects = sideEffects instanceof Array ? sideEffects : Object.values(sideEffects);\n sideEffects.forEach((SideEffect) => {\n const sideEffectInstance = sideEffectsMap[SideEffect.formalName()];\n sideEffectsMap[SideEffect.formalName()] = sideEffectInstance || new SideEffect(context);\n });\n return sideEffectsMap;\n};\n\nexport const initializeBehaviouralActions = (context, actions) => {\n const dispatchableBehaviours = {};\n\n actions = actions instanceof Array ? actions : Object.values(actions);\n actions.forEach((Action) => {\n dispatchableBehaviours[Action.formalName()] = new Action(context);\n });\n return dispatchableBehaviours;\n};\n\nexport const initializePhysicalActions = (context, actions) => {\n const physicalActions = {};\n\n for (const name in actions) {\n if (!({}).hasOwnProperty.call(name, actions)) {\n physicalActions[name] = actions[name](context);\n }\n }\n return physicalActions;\n};\n\nexport const changeSideEffectAvailability = (context, fn, toEnable) => {\n const sideEffects = context.sideEffects();\n for (const key in sideEffects) {\n if ({}.hasOwnProperty.call(sideEffects, key)) {\n let change = true;\n if (fn && fn(key) === false) {\n change = false;\n }\n if (change) {\n toEnable ? sideEffects[key].enable() : sideEffects[key].disable();\n }\n }\n }\n};\n\nexport const getMergedSet = set => [...new Set([...set[0], ...set[1]])];\n\nexport const getSourceFields = (propagationInf, criteria = {}) => {\n const sourceIdentifiers = propagationInf.sourceIdentifiers;\n let sourceFields;\n if (sourceIdentifiers) {\n sourceFields = sourceIdentifiers.getSchema().map(d => d.name);\n } else if (criteria instanceof Array) {\n sourceFields = criteria[0];\n } else {\n sourceFields = Object.keys(criteria || {});\n }\n return sourceFields;\n};\n\nconst conditionsMap = {\n newEntry: [SELECTION.SELECTION_NEW_ENTRY],\n oldEntry: [SELECTION.SELECTION_OLD_ENTRY],\n mergedEnter: [SELECTION.SELECTION_NEW_ENTRY, SELECTION.SELECTION_OLD_ENTRY],\n newExit: [SELECTION.SELECTION_NEW_EXIT],\n oldExit: [SELECTION.SELECTION_OLD_EXIT],\n mergedExit: [SELECTION.SELECTION_NEW_EXIT, SELECTION.SELECTION_OLD_EXIT],\n complete: []\n};\n\nexport const getModelFromSet = (type, model, set) => {\n if (model) {\n return model.select((fields, i) =>\n (conditionsMap[type].some(condition => set[i] === condition)), {\n saveChild: false\n });\n }\n return null;\n};\n\nexport const getSetInfo = (type, set, config) => {\n let model = null;\n const filteredDataModel = config.filteredDataModel;\n const selectionSet = config.selectionSet;\n if (!config.propagationData) {\n if (selectionSet.resetted()) {\n model = null;\n } else {\n model = getModelFromSet(type, config.dataModel, config.selectionSet._set);\n }\n } else if (filteredDataModel) {\n model = type === 'mergedEnter' ? filteredDataModel[0] : filteredDataModel[1];\n }\n return {\n uids: set,\n length: set.length,\n model\n };\n};\n\nexport const getSideEffects = (behaviour, behaviourEffectMap) => {\n const sideEffects = [];\n for (const key in behaviourEffectMap) {\n const behaviours = key.split(',');\n const found = behaviours.some(d => d === behaviour);\n if (found) {\n sideEffects.push({\n effects: behaviourEffectMap[key],\n behaviours\n });\n }\n }\n return sideEffects;\n};\n\nexport const unionSets = (context, behaviours) => {\n let combinedSet = {};\n const models = {\n mergedEnter: null,\n mergedExit: null\n };\n behaviours.forEach((behaviour) => {\n const entryExitSet = context._entryExitSet[behaviour];\n if (entryExitSet) {\n combinedSet = Object.assign(combinedSet, clone(entryExitSet));\n ['mergedEnter', 'mergedExit'].forEach((type) => {\n const model = entryExitSet[type].model;\n let existingModel = models[type];\n if (!existingModel) {\n existingModel = models[type] = model;\n } else {\n existingModel = models[type] = model.union(existingModel);\n }\n combinedSet[type].model = existingModel;\n });\n }\n });\n return combinedSet;\n};\n","import {\n mergeRecursive,\n hasTouch,\n filterPropagationModel,\n FieldType,\n selectElement,\n isSimpleObject\n} from 'muze-utils';\nimport { ALL_ACTIONS } from './enums/actions';\nimport SelectionSet from './selection-set';\nimport {\n initializeBehaviouralActions,\n initializeSideEffects,\n changeSideEffectAvailability,\n initializePhysicalActions,\n unionSets,\n getSideEffects\n} from './helper';\n\n/**\n * Relient firebolt is responsible for dispatching behaviours. It has only behaviours which can be\n * dispatched without any physical action being triggered.\n */\nexport default class Firebolt {\n constructor (context, actions, sideEffects, behaviourEffectMap) {\n this.context = context;\n this._sideEffectDefinitions = {};\n this._sideEffects = {};\n this._propagationInf = {};\n this._actions = {\n behavioural: {},\n physical: {}\n };\n this._selectionSet = {};\n this._volatileSelectionSet = {};\n this._propagationFields = {};\n this._sourceSideEffects = {\n selectionBox: () => false\n };\n this._propagationBehaviourMap = {};\n this._sourceBehaviours = {};\n this._actionBehaviourMap = {};\n this._config = {};\n this._behaviourEffectMap = {};\n this._entryExitSet = {};\n this._actionHistory = {};\n this._queuedSideEffects = {};\n this._mappedActions = {};\n\n this.mapSideEffects(behaviourEffectMap);\n this.registerBehaviouralActions(actions.behavioural);\n this.registerSideEffects(sideEffects);\n this.registerPhysicalBehaviouralMap(actions.physicalBehaviouralMap);\n this.registerPhysicalActions(actions.physical);\n }\n\n config (...config) {\n if (config.length) {\n const conf = this._config = mergeRecursive(this._config, config[0]);\n const sideEffects = this.sideEffects();\n for (const key in sideEffects) {\n if ({}.hasOwnProperty.call(sideEffects, key)) {\n const sideEffectConf = conf[key];\n sideEffectConf && sideEffects[key].config(sideEffectConf);\n }\n }\n return this;\n }\n return this._config;\n }\n\n mapSideEffects (behEffectMap) {\n const behaviourEffectMap = this._behaviourEffectMap;\n for (const key in behEffectMap) {\n if ({}.hasOwnProperty.call(behEffectMap, key)) {\n const sideEffects = behEffectMap[key] || [];\n let preventDefaultActions = false;\n let effectNames;\n if (isSimpleObject(sideEffects)) {\n effectNames = sideEffects.effects;\n preventDefaultActions = sideEffects.preventDefaultActions;\n } else {\n effectNames = sideEffects;\n }\n !behaviourEffectMap[key] && (behaviourEffectMap[key] = []);\n this._behaviourEffectMap[key] = [...new Set(preventDefaultActions ? effectNames :\n [...behaviourEffectMap[key], ...effectNames])];\n }\n }\n return this;\n }\n\n registerBehaviouralActions (actions) {\n const behaviours = initializeBehaviouralActions(this, actions);\n this.prepareSelectionSets(behaviours);\n Object.assign(this._actions.behavioural, behaviours);\n return this;\n }\n\n prepareSelectionSets () {\n return this;\n }\n\n registerSideEffects (sideEffects) {\n for (const key in sideEffects) {\n this._sideEffectDefinitions[sideEffects[key].formalName()] = sideEffects[key];\n }\n return this;\n }\n\n applySideEffects (sideEffects, selectionSet, payload) {\n const sideEffectStore = this.sideEffects();\n const actionHistory = this._actionHistory;\n const queuedSideEffects = this._queuedSideEffects;\n sideEffects.forEach((sideEffect) => {\n let options;\n let name;\n const effects = sideEffect.effects;\n const behaviours = sideEffect.behaviours;\n const combinedSet = unionSets(this, behaviours, selectionSet);\n effects.forEach((effect) => {\n if (typeof effect === 'object') {\n name = effect.name;\n options = effect.options;\n } else {\n name = effect;\n }\n\n const sideEffectInstance = sideEffectStore[name];\n if (sideEffectInstance.isEnabled()) {\n if (!sideEffectInstance.constructor.mutates() &&\n Object.values(actionHistory).some(d => d.isMutableAction)) {\n queuedSideEffects[`${name}-${behaviours.join()}`] = {\n name,\n params: [combinedSet, payload, options]\n };\n } else {\n this.dispatchSideEffect(name, combinedSet, payload, options);\n }\n }\n });\n });\n return this;\n }\n\n dispatchSideEffect (name, selectionSet, payload, options = {}) {\n const sideEffectStore = this.sideEffects();\n const sideEffect = sideEffectStore[name];\n let disable = false;\n if (options.filter && options.filter(sideEffect)) {\n disable = true;\n }\n !disable && sideEffectStore[name].apply(selectionSet, payload, options);\n }\n\n registerPropagationBehaviourMap (map) {\n this._propagationBehaviourMap = Object.assign(this._propagationBehaviourMap, map || {});\n return this;\n }\n\n dispatchBehaviour (behaviour, payload, propagationInfo = {}) {\n const propagate = propagationInfo.propagate !== undefined ? propagationInfo.propagate : true;\n const behaviouralActions = this._actions.behavioural;\n const action = behaviouralActions[behaviour];\n const behaviourEffectMap = this._behaviourEffectMap;\n const sideEffects = getSideEffects(behaviour, behaviourEffectMap);\n this._propagationInf = propagationInfo;\n\n if (action) {\n const selectionSet = action.dispatch(payload);\n const propagationSelectionSet = this.getPropagationSelectionSet(selectionSet);\n this._entryExitSet[behaviour] = propagationSelectionSet;\n const shouldApplySideEffects = this.shouldApplySideEffects(propagate);\n\n if (propagate) {\n this.propagate(behaviour, payload, selectionSet.find(d => d.sourceSelectionSet), sideEffects);\n }\n if (shouldApplySideEffects) {\n const applicableSideEffects = this.getApplicableSideEffects(sideEffects, payload, propagationInfo);\n this.applySideEffects(applicableSideEffects, propagationSelectionSet, payload);\n }\n }\n\n return this;\n }\n\n getPropagationSelectionSet (selectionSet) {\n return selectionSet.find(d => !d.sourceSelectionSet);\n }\n\n shouldApplySideEffects () {\n return true;\n }\n\n changeBehaviourStateOnPropagation (behaviour, value) {\n if (value instanceof Function) {\n this._sourceBehaviours[behaviour] = value;\n } else {\n this._sourceBehaviours[behaviour] = () => value;\n }\n return this;\n }\n\n changeSideEffectStateOnPropagation (sideEffect, value) {\n if (value instanceof Function) {\n this._sourceSideEffects[sideEffect] = value;\n } else {\n this._sourceSideEffects[sideEffect] = () => value;\n }\n }\n\n propagate () {\n return this;\n }\n\n sideEffects (...sideEffects) {\n if (sideEffects.length) {\n this._sideEffects = sideEffects[0];\n return this;\n }\n return this._sideEffects;\n }\n\n enableSideEffects (fn) {\n changeSideEffectAvailability(this, fn, true);\n return this;\n }\n\n disableSideEffects (fn) {\n changeSideEffectAvailability(this, fn, false);\n return this;\n }\n\n dissociateBehaviour (behaviour, physicalAction) {\n const actionBehaviourMap = this._actionBehaviourMap;\n for (const key in actionBehaviourMap) {\n if (key === physicalAction) {\n const behaviourMap = actionBehaviourMap[key];\n behaviourMap.behaviours = behaviourMap.behaviours.filter(d => d !== behaviour);\n }\n }\n\n return this;\n }\n\n dissociateSideEffect (sideEffect, behaviour) {\n const behaviourEffectMap = this._behaviourEffectMap;\n behaviourEffectMap[behaviour] = behaviourEffectMap[behaviour].filter(d => (d.name || d) !== sideEffect);\n return this;\n }\n\n getApplicableSideEffects (sideEffects) {\n return sideEffects;\n }\n\n attachPropagationListener (dataModel) {\n dataModel.unsubscribe('propagation');\n dataModel.on('propagation', this.onDataModelPropagation());\n return this;\n }\n\n onDataModelPropagation () {\n return (propValue) => {\n const payload = propValue.payload;\n const action = payload.action;\n\n this.dispatchBehaviour(action, payload, {\n propagate: false\n });\n };\n }\n\n createSelectionSet (uniqueIds, behaviouralActions) {\n const behaviours = behaviouralActions || this._actions.behavioural;\n const selectionSet = this._selectionSet;\n const volatileSelectionSet = this._volatileSelectionSet;\n\n for (const key in behaviours) {\n if ({}.hasOwnProperty.call(behaviours, key)) {\n selectionSet[key] = new SelectionSet(uniqueIds);\n volatileSelectionSet[key] = new SelectionSet(uniqueIds, true);\n }\n }\n this._volatileSelectionSet = volatileSelectionSet;\n this.selectionSet(selectionSet);\n return this;\n }\n\n selectionSet (...selectionSet) {\n if (selectionSet.length) {\n this._selectionSet = selectionSet[0];\n return this;\n }\n return this._selectionSet;\n }\n\n initializeSideEffects () {\n const sideEffectDefinitions = this._sideEffectDefinitions;\n this.sideEffects(initializeSideEffects(this, sideEffectDefinitions));\n return this;\n }\n\n registerPhysicalActions (actions) {\n const initedActions = initializePhysicalActions(this, actions);\n Object.assign(this._actions.physical, initedActions);\n return this;\n }\n\n propagateWith (action, fields, append = false) {\n const behaviouralActions = this._actions.behavioural;\n if (fields.length) {\n if (action === ALL_ACTIONS) {\n for (const key in behaviouralActions) {\n this._propagationFields[key] = {\n fields,\n append\n };\n }\n } else {\n this._propagationFields[action] = {\n fields,\n append\n };\n }\n return this;\n }\n return this._propagationFields;\n }\n\n /**\n * Map actions and behaviours\n * @return {Firebolt} Firebolt instance\n */\n mapActionsAndBehaviour () {\n const initedPhysicalActions = this._actions.physical;\n const map = this._actionBehaviourMap;\n const mappedActions = this._mappedActions;\n\n for (const action in map) {\n if (!({}).hasOwnProperty.call(action, map)) {\n let target;\n const mapObj = map[action];\n target = mapObj.target;\n const touch = mapObj.touch;\n if (!target) {\n target = this.context.getDefaultTargetContainer();\n }\n const bind = hasTouch() ? touch === true || touch === undefined : !touch;\n const keyName = `${action}-${mapObj.behaviours.join()}`;\n bind && !mappedActions[keyName] && this.bindActionWithBehaviour(initedPhysicalActions[action],\n target, mapObj.behaviours);\n mappedActions[keyName] = true;\n }\n }\n return this;\n }\n\n registerPhysicalBehaviouralMap (map) {\n Object.assign(this._actionBehaviourMap, map);\n return this;\n }\n\n /**\n * Binds a target element with an action.\n *\n * @param {Function} action Action method\n * @param {string} target Class name of element\n * @param {Array} behaviourList Array of behaviours\n * @return {FireBolt} Instance of firebolt\n */\n bindActionWithBehaviour (action, targets, behaviourList) {\n if (typeof (targets) === 'string') {\n targets = [targets];\n }\n targets.forEach((target) => {\n const mount = this.context.mount();\n const nodes = target.node instanceof Function ? target : selectElement(mount).selectAll(target);\n if (behaviourList.length && !nodes.empty()) {\n if (nodes instanceof Array) {\n nodes.forEach((node) => {\n action(selectElement(node), behaviourList);\n });\n } else {\n action(nodes, behaviourList);\n }\n }\n });\n return this;\n }\n\n getPropagationInf () {\n return this._propagationInf;\n }\n\n getAddSetFromCriteria (criteria, propagationInf = {}) {\n const context = this.context;\n const filteredDataModel = propagationInf.data ? propagationInf.data :\n context.getDataModelFromIdentifiers(criteria, 'all');\n const xFields = context.fields().x || [];\n const yFields = context.fields().y || [];\n const xMeasures = xFields.every(field => field.type() === FieldType.MEASURE);\n const yMeasures = yFields.every(field => field.type() === FieldType.MEASURE);\n return {\n model: filteredDataModel,\n uids: criteria === null ? null : (propagationInf.data ? filterPropagationModel(this.getFullData(),\n propagationInf.data[0], xMeasures && yMeasures).getData().uids : filteredDataModel[0].getData().uids)\n };\n }\n\n getSelectionSets (action) {\n const sourceId = this.context.id();\n const propagationInf = this._propagationInf || {};\n const propagationSource = propagationInf.sourceId;\n let applicableSelectionSets = [];\n if (propagationSource !== sourceId) {\n applicableSelectionSets = [this._volatileSelectionSet[action]];\n }\n\n if (propagationSource) {\n applicableSelectionSets.push(this.selectionSet()[action]);\n }\n return applicableSelectionSets;\n }\n\n getFullData () {\n return this.context.data();\n }\n\n resetted () {\n return this._resetted;\n }\n\n getEntryExitSet (behaviour) {\n return this._entryExitSet[behaviour];\n }\n}\n","import { getSetInfo, getMergedSet, getSourceFields } from '../../helper';\n\nexport default class GenericBehaviour {\n constructor (firebolt) {\n this.firebolt = firebolt;\n this._enabled = true;\n }\n\n dispatch (payload) {\n const criteria = payload.criteria;\n const firebolt = this.firebolt;\n const formalName = this.constructor.formalName();\n const selectionSets = firebolt.getSelectionSets(formalName);\n const {\n model: filteredDataModel,\n uids\n } = this.firebolt.getAddSetFromCriteria(criteria, this.firebolt.getPropagationInf());\n const entryExitSets = selectionSets.map((selectionSet) => {\n this.setSelectionSet(uids, selectionSet);\n return this.getEntryExitSet(selectionSet, filteredDataModel, payload);\n });\n\n return entryExitSets;\n }\n\n setSelectionSet () {\n return this;\n }\n\n getEntryExitSet (selectionSet, filteredDataModel, payload) {\n const {\n entrySet,\n exitSet,\n completeSet\n } = selectionSet.getSets();\n const propagationInf = this.firebolt.getPropagationInf();\n const dataModel = this.firebolt.getFullData();\n const setConfig = {\n isSourceFieldPresent: propagationInf.isSourceFieldPresent,\n dataModel,\n filteredDataModel,\n propagationData: propagationInf.data,\n selectionSet\n };\n\n return {\n entrySet: [getSetInfo('oldEntry', entrySet[0], setConfig),\n getSetInfo('newEntry', entrySet[1], setConfig)],\n exitSet: [getSetInfo('oldEntry', exitSet[0], setConfig),\n getSetInfo('newExit', exitSet[1], setConfig)],\n mergedEnter: getSetInfo('mergedEnter', getMergedSet(entrySet), setConfig),\n mergedExit: getSetInfo('mergedExit', getMergedSet(exitSet), setConfig),\n completeSet: getSetInfo('complete', completeSet, setConfig),\n isSourceFieldPresent: propagationInf.isSourceFieldPresent,\n fields: getSourceFields(propagationInf, payload.criteria),\n sourceSelectionSet: selectionSet._volatile === true\n };\n }\n\n static mutates () {\n return false;\n }\n\n enable () {\n this._enabled = true;\n }\n\n disable () {\n this._enabled = false;\n }\n\n isEnabled () {\n return this._enabled;\n }\n}\n\n","import GenericBehaviour from './generic';\nimport { getMergedSet } from '../../helper';\nimport * as SELECTION from '../../enums/selection';\n\nexport default class VolatileBehaviour extends GenericBehaviour {\n setSelectionSet (addSet, selectionSet) {\n if (addSet === null) {\n selectionSet.reset();\n } else if (addSet.length) {\n // new add set\n const existingAddSet = addSet.filter(d => selectionSet._set[d] === SELECTION.SELECTION_NEW_ENTRY\n || selectionSet._set[d] === SELECTION.SELECTION_OLD_ENTRY);\n selectionSet.updateExit();\n const { entrySet } = selectionSet.getSets();\n selectionSet.reset(getMergedSet(entrySet));\n selectionSet.add(addSet);\n selectionSet.update(existingAddSet);\n } else {\n selectionSet.remove(selectionSet.getCompleteSet());\n }\n }\n}\n","export const BRUSH = 'brush';\nexport const HIGHLIGHT = 'highlight';\nexport const TOOLTIP = 'tooltip';\nexport const FILTER = 'filter';\nexport const SELECT = 'select';\n","import VolatileBehaviour from './volatile';\nimport { HIGHLIGHT } from '../../enums/behaviours';\n\nexport default class HighlightBehaviour extends VolatileBehaviour {\n static formalName () {\n return HIGHLIGHT;\n }\n}\n","import VolatileBehaviour from './volatile';\nimport * as BEHAVIOURNAMES from '../../enums/behaviours';\n\n/**\n * This is the behaviour for brushing a region on the chart. It accepts a payload\n * which contains the x and y range of the data and other configuration. It will then\n * create a selection box from the range and select the points which fall within the range.\n */\nexport default class BrushBehaviour extends VolatileBehaviour {\n static formalName () {\n return BEHAVIOURNAMES.BRUSH;\n }\n}\n","import VolatileBehaviour from './volatile';\nimport { FILTER } from '../../enums/behaviours';\n\nexport default class FilterBehaviour extends VolatileBehaviour {\n static formalName () {\n return FILTER;\n }\n\n static mutates () {\n return true;\n }\n}\n","import GenericBehaviour from './generic';\nimport { getMergedSet } from '../../helper';\nimport * as SELECTION from '../../enums/selection';\n\nexport default class PersistentBehaviour extends GenericBehaviour {\n setSelectionSet (addSet, selectionSet) {\n if (addSet === null) {\n selectionSet.reset();\n } else if (addSet.length) {\n const propagationInf = this.firebolt.getPropagationInf();\n // new add set\n const existingAddSet = addSet.filter(d => selectionSet._set[d] === SELECTION.SELECTION_NEW_ENTRY\n || selectionSet._set[d] === SELECTION.SELECTION_OLD_ENTRY);\n if (propagationInf.propagate === false) {\n selectionSet.updateExit();\n const { entrySet } = selectionSet.getSets();\n selectionSet.reset(getMergedSet(entrySet));\n selectionSet.add(addSet);\n selectionSet.update(existingAddSet);\n } else {\n // existing add set\n if (existingAddSet.length) {\n selectionSet.updateExit();\n selectionSet.remove(existingAddSet);\n } else {\n selectionSet.updateEntry();\n selectionSet.add(addSet);\n }\n const { exitSet } = selectionSet.getSets();\n const mergedExitSet = getMergedSet(exitSet);\n const completeSetCount = selectionSet.getCompleteSet().length;\n if (mergedExitSet.length === completeSetCount) {\n selectionSet.reset();\n }\n }\n } else {\n selectionSet.remove(selectionSet.getCompleteSet());\n }\n\n return this;\n }\n}\n","import PersistentBehaviour from './persistent';\nimport { SELECT } from '../../enums/behaviours';\n\nexport default class SelectBehaviour extends PersistentBehaviour {\n static formalName () {\n return SELECT;\n }\n}\n\n","import { DimensionSubtype, FieldType } from 'muze-utils';\n/**\n * Gets the drag action configuration\n * @param {VisualUnit} instance instance of visual unit\n * @param {Object} config x y positions\n * @return {Object} Payload of behaviour\n*/\n/* istanbul ignore next */ const getDragActionConfig = (sourceInfo, config, fieldsConfig) => {\n if (!(sourceInfo.axes.x || sourceInfo.axes.y)) {\n return {\n criteria: null\n };\n }\n\n const axes = sourceInfo.axes;\n const xAxis = axes.x[0];\n const yAxis = axes.y[0];\n const axisFields = sourceInfo.fields;\n const xField = axisFields.x[0].getMembers()[0];\n const yField = axisFields.y[0].getMembers()[0];\n const xFieldType = fieldsConfig[xField].def.subtype ? fieldsConfig[xField].def.subtype :\n fieldsConfig[xField].def.type;\n const yFieldType = fieldsConfig[yField].def.subtype ? fieldsConfig[yField].def.subtype :\n fieldsConfig[yField].def.type;\n const dimensions = {};\n const stPos = config.startPos;\n const endPos = config.endPos;\n\n if (stPos.x === endPos.x && stPos.y === endPos.y) {\n return {\n criteria: null\n };\n }\n\n const dragDim = xFieldType === FieldType.MEASURE ? (yFieldType === FieldType.MEASURE ? ['x', 'y'] : ['y']) : ['x'];\n const criteria = {};\n const isXDimension = xFieldType === DimensionSubtype.CATEGORICAL;\n const isYDimension = yFieldType === DimensionSubtype.CATEGORICAL;\n const xRange = xAxis.constructor.type() === 'band' ? xAxis.scale().invertExtent(stPos.x, endPos.x) :\n xAxis.invert(stPos.x, endPos.x);\n const yRange = yAxis.constructor.type() === 'band' ? yAxis.scale().invertExtent(stPos.y, endPos.y) :\n yAxis.invert(stPos.y, endPos.y);\n const selectedDomains = {\n x: stPos.x === endPos.x ? [] : (isXDimension ? xRange : xRange.sort((a, b) => a - b)),\n y: stPos.y === endPos.y ? [] : (isYDimension ? yRange : yRange.sort((a, b) => a - b))\n };\n const rangeObj = {};\n\n if (dragDim.length === 2) {\n rangeObj[xField] = selectedDomains.x;\n rangeObj[yField] = selectedDomains.y;\n if (xField === yField) {\n const xdom = selectedDomains.x;\n const ydom = selectedDomains.y;\n const min = xdom[0] > ydom[0] ? ydom : xdom;\n const max = min === ydom ? xdom : ydom;\n if (min[1] < max[0]) {\n rangeObj[xField] = [];\n } else {\n rangeObj[xField] = [max[0], min[1] < max[1] ? min[1] : max[1]];\n }\n dimensions.x = [stPos.x, endPos.x];\n dimensions.y = [stPos.y, endPos.y];\n }\n } else {\n criteria[dragDim[0]] = selectedDomains[dragDim[0]] || [];\n\n if (dragDim[0] === 'x') {\n rangeObj[xField] = criteria.x;\n if (xFieldType === DimensionSubtype.CATEGORICAL) {\n dimensions.x = (config.snap && stPos.x !== endPos.x) ? xAxis.getNearestRange(stPos.x, endPos.x) :\n [stPos.x, endPos.x];\n }\n } else {\n rangeObj[yField] = criteria.y;\n if (yFieldType === DimensionSubtype.CATEGORICAL) {\n dimensions.y = (config.snap && stPos.y !== endPos.y) ? yAxis.getNearestRange(stPos.y, endPos.y) :\n [stPos.y, endPos.y];\n }\n }\n }\n\n return {\n criteria: rangeObj,\n dimensions\n };\n};\n\nexport default getDragActionConfig;\n","import {\n getEvent,\n getD3Drag\n } from 'muze-utils';\n\nimport getDragActionConfig from './drag-action-config';\n\n/**\n * Adds dragging action to the target element.\n * @param {VisualUnit} instance Instance of visual unit.\n * @param {SVGElement} targetEl Element on which brushing action is needed.\n * @param {Array} behaviours Array of behaviours\n */\nexport const attachDragEvent = (targetEl, behaviours, firebolt, touch) => {\n let startPos = {};\n let endPos = {};\n let drawingInf;\n\n const d3Drag = getD3Drag();\n let touchStart;\n targetEl.call(d3Drag().on('start', () => {\n const event = getEvent();\n startPos = {\n x: event.x,\n y: event.y\n };\n drawingInf = firebolt.context.getDrawingContext();\n touchStart = new Date().getTime();\n }).on('drag', () => {\n const event = getEvent();\n endPos = {\n x: event.x,\n y: event.y\n };\n if (touch && Math.abs(startPos.x - endPos.x) <= 5) {\n return;\n }\n endPos.x = Math.max(0, Math.min(endPos.x, drawingInf.width));\n endPos.y = Math.max(0, Math.min(endPos.y, drawingInf.height));\n\n const payload = getDragActionConfig(firebolt.context.getSourceInfo(), {\n startPos,\n endPos\n }, firebolt.context.data().getFieldsConfig());\n behaviours.forEach(beh => firebolt.dispatchBehaviour(beh, payload));\n }).on('end', () => {\n const event = getEvent();\n endPos = {\n x: event.x,\n y: event.y\n };\n const duration = new Date().getTime() - touchStart;\n\n if (touch && duration > 100 && Math.abs(startPos.x - endPos.x) <= 5) {\n return;\n }\n endPos.x = Math.max(0, Math.min(endPos.x, drawingInf.width));\n endPos.y = Math.max(0, Math.min(endPos.y, drawingInf.height));\n\n const payload = getDragActionConfig(firebolt.context.getSourceInfo(), {\n startPos,\n endPos,\n snap: true\n }, firebolt.context.data().getFieldsConfig());\n payload.dragEnd = true;\n behaviours.forEach(beh => firebolt.dispatchBehaviour(beh, payload));\n }));\n};\n\n","import { getClientPoint, getEvent } from 'muze-utils';\nimport { CONSOLIDATED, FRAGMENTED } from '../../enums/constants';\n\n/**\n * Adds mouse interactions to target element.\n * @param {Firebolt} instance instance of firebolt.\n * @param {SVGElement} targetEl Element on which the event listeners will be attached.\n * @param {Array} behaviours Array of behaviours\n */\n/* istanbul ignore next */ const hover = firebolt => (targetEl, behaviours) => {\n const dispatchBehaviour = function (args) {\n const event = getEvent();\n const context = firebolt.context;\n const tooltipConf = context.config().interaction.tooltip;\n const mode = tooltipConf.mode;\n const pos = getClientPoint(context.getDrawingContext().svgContainer, event);\n const nearestPoint = context.getNearestPoint(pos.x, pos.y, {\n getAllPoints: mode === CONSOLIDATED || mode === FRAGMENTED,\n data: args,\n event\n });\n const payload = {\n criteria: nearestPoint ? nearestPoint.id : null,\n showInPosition: nearestPoint.showInPosition,\n target: nearestPoint.target,\n position: pos,\n mode\n };\n\n behaviours.forEach(beh => firebolt.dispatchBehaviour(beh, payload));\n event.stopPropagation();\n };\n\n targetEl.on('mouseover', dispatchBehaviour)\n .on('mousemove', dispatchBehaviour)\n .on('mouseout', () => {\n behaviours.forEach(beh => firebolt.dispatchBehaviour(beh, {\n criteria: null\n }));\n });\n};\n\nexport default hover;\n","export const CLASSPREFIX = 'muze';\nexport const CONSOLIDATED = 'consolidated';\nexport const FRAGMENTED = 'fragmented';\n\n","import { getClientPoint } from 'muze-utils';\n\nexport const generatePayloadFromEvent = function (args, event, firebolt) {\n const context = firebolt.context;\n const pos = getClientPoint(context.getDrawingContext().svgContainer, event.touches ? event.touches[0] : event);\n const nearestPoint = context.getNearestPoint(pos.x, pos.y, {\n data: args,\n event\n });\n return {\n criteria: nearestPoint ? nearestPoint.id : null,\n showInPosition: nearestPoint.showInPosition,\n target: nearestPoint.target,\n position: pos\n };\n};\n","import { getEvent } from 'muze-utils';\nimport { generatePayloadFromEvent } from './helpers';\n\n/**\n * Adds mouse interactions to target element.\n * @param {VisualUnit} instance instance of visual unit.\n * @param {SVGElement} targetEl Element on which the event listeners will be attached.\n * @param {Array} behaviours Array of behaviours\n */\n/* istanbul ignore next */ const click = firebolt => (targetEl, behaviours) => {\n const dispatchBehaviour = function (args) {\n const event = getEvent();\n const payload = generatePayloadFromEvent(args, event, firebolt);\n behaviours.forEach(beh => firebolt.dispatchBehaviour(beh, payload));\n event.stopPropagation();\n };\n\n targetEl.on('click', dispatchBehaviour);\n};\nexport default click;\n","import drag from './drag';\nimport hover from './hover';\nimport { longtouch } from './longtouch';\nimport { touchdrag } from './touch-drag';\nimport * as ACTIONNAMES from '../../enums/actions';\nimport click from './click';\n\nexport const physicalActions = {\n [ACTIONNAMES.DRAG]: drag,\n [ACTIONNAMES.HOVER]: hover,\n [ACTIONNAMES.CLICK]: click,\n [ACTIONNAMES.LONGTOUCH]: longtouch,\n [ACTIONNAMES.TOUCHDRAG]: touchdrag\n};\n\n","import { attachDragEvent } from './helpers/drag-event';\n\n/**\n * Adds dragging action to the target element.\n * @param {VisualUnit} instance Instance of visual unit.\n * @param {SVGElement} targetEl Element on which brushing action is needed.\n * @param {Array} behaviours Array of behaviours\n */\n/* istanbul ignore next */ const drag = firebolt => (targetEl, behaviours) => {\n attachDragEvent(targetEl, behaviours, firebolt);\n};\n\nexport default drag;\n","/* global setTimeout */\nimport { getEvent } from 'muze-utils';\nimport { generatePayloadFromEvent } from './helpers';\n\n/**\n * Adds mouse interactions to target element.\n * @param {VisualUnit} instance instance of visual unit.\n * @param {SVGElement} targetEl Element on which the event listeners will be attached.\n * @param {Array} behaviours Array of behaviours\n */\nexport const longtouch = firebolt => (targetEl, behaviours) => {\n let event;\n let touchEnd;\n const dispatchBehaviour = function (args) {\n const payload = generatePayloadFromEvent(args, event, firebolt);\n behaviours.forEach(beh => firebolt.dispatchBehaviour(beh, payload));\n event.stopPropagation();\n };\n\n touchEnd = false;\n event = getEvent();\n targetEl.on('touchstart', (args) => {\n event = getEvent();\n touchEnd = false;\n setTimeout(() => {\n if (!touchEnd) {\n dispatchBehaviour(args);\n } else {\n behaviours.forEach(beh => firebolt.dispatchBehaviour(beh, {\n criteria: null\n }));\n }\n }, 100);\n }).on('touchend', () => {\n touchEnd = true;\n });\n};\n","import { attachDragEvent } from './helpers/drag-event';\n\n/**\n * Adds dragging action to the target element.\n * @param {VisualUnit} instance Instance of visual unit.\n * @param {SVGElement} targetEl Element on which brushing action is needed.\n * @param {Array} behaviours Array of behaviours\n */\nexport const touchdrag = firebolt => (targetEl, behaviours) => {\n attachDragEvent(targetEl, behaviours, firebolt, true);\n};\n\n","import { mergeRecursive, getUniqueId } from 'muze-utils';\n\nexport default class GenericSideEffect {\n constructor (firebolt) {\n this.firebolt = firebolt;\n this._enabled = true;\n this._strategy = 'default';\n this._config = {};\n this._id = getUniqueId();\n this._strategies = {};\n this.config(this.constructor.defaultConfig());\n }\n\n static defaultConfig () {\n return {};\n }\n\n static target () {\n return 'all';\n }\n\n static mutates () {\n return false;\n }\n\n config (...params) {\n if (params.length) {\n this._config = mergeRecursive(this._config, params[0]);\n return this;\n }\n return this._config;\n }\n\n disable () {\n this._enabled = false;\n return this;\n }\n\n enable () {\n this._enabled = true;\n return this;\n }\n\n isEnabled () {\n return this._enabled;\n }\n\n apply () {\n return this;\n }\n\n addStrategy (name, fn) {\n this._strategies[name] = fn;\n return this;\n }\n}\n","import GenericSideEffect from './generic';\n\nexport default class SurrogateSideEffect extends GenericSideEffect {\n applyInteractionStyle (set, config = {}, interactionType, apply) {\n const layers = this.firebolt.context.layers();\n layers.forEach(layer => layer.config().interactive !== false &&\n layer.applyInteractionStyle(interactionType, set.uids, apply));\n }\n}\n","import { makeElement } from 'muze-utils';\n\nimport GenericSideEffect from './generic';\n\nexport default class SpawnableSideEffect extends GenericSideEffect {\n createElement (container, elemType, data, className, callbacks) {\n return makeElement(container, elemType, data, className, callbacks);\n }\n\n drawingContext (...drawingContext) {\n if (drawingContext.length) {\n this._drawingContext = drawingContext[0];\n return this;\n }\n return this._drawingContext();\n }\n\n show () {\n return this;\n }\n\n hide () {\n return this;\n }\n}\n","import { selectElement } from 'muze-utils';\n\nexport const getBoxDimensionsFromPayload = (payload, axes, axisFields) => {\n let x1;\n let x2;\n let y1;\n let y2;\n let xRange;\n let yRange;\n let direction;\n const criteria = payload.criteria;\n const dimensions = payload.dimensions || {};\n const xDim = dimensions.x;\n const yDim = dimensions.y;\n\n if (criteria === null) {\n return null;\n }\n\n const xAxis = axes.x[0];\n const yAxis = axes.y[0];\n const xLinear = xAxis.constructor.type() === 'linear';\n const yLinear = yAxis.constructor.type() === 'linear';\n const xField = `${axisFields.x[0]}`;\n const yField = `${axisFields.y[0]}`;\n const xCriteria = criteria[xField];\n const yCriteria = criteria[yField];\n\n if (xCriteria && xCriteria[0] instanceof Array) {\n xRange = xCriteria[0];\n yRange = xCriteria[1];\n } else {\n xRange = xCriteria || [];\n yRange = yCriteria || [];\n }\n direction = xCriteria && yCriteria ? 'both' : (xCriteria ? 'vertical' : 'horizontal');\n if (xRange && xRange.length) {\n if ((yAxis.constructor.type() === 'band' && xLinear)) {\n x1 = x2 = undefined;\n direction = 'horizontal';\n } else {\n const domain = xAxis.domain();\n const bandScale = xAxis.constructor.type() === 'band';\n let x1Val;\n let x2Val;\n if (bandScale) {\n let x1DomainIndex = domain.indexOf(xRange[0]);\n let x2DomainIndex = domain.indexOf(xRange[xRange.length - 1]);\n [x1DomainIndex, x2DomainIndex] = [x1DomainIndex, x2DomainIndex].sort((a, b) => a - b);\n x1Val = domain[x1DomainIndex];\n x2Val = domain[x2DomainIndex];\n } else {\n x1Val = xRange[0];\n x2Val = xRange[xRange.length - 1];\n }\n x1 = xAxis.getScaleValue(x1Val);\n x2 = xAxis.getScaleValue(x2Val);\n x2 += bandScale ? xAxis.getUnitWidth() : 0;\n }\n } else {\n x1 = x2 = undefined;\n }\n if (yRange && yRange.length) {\n if ((xAxis.constructor.type() === 'band' && yLinear)) {\n y1 = y2 = undefined;\n direction = 'vertical';\n } else {\n const domain = yAxis.domain();\n const bandScale = yAxis.constructor.type() === 'band';\n let y1Val;\n let y2Val;\n if (bandScale) {\n let y1DomainIndex = domain.indexOf(yRange[0]);\n let y2DomainIndex = domain.indexOf(yRange[yRange.length - 1]);\n [y1DomainIndex, y2DomainIndex] = [y1DomainIndex, y2DomainIndex].sort(((a, b) => b - a));\n y1Val = domain[y1DomainIndex];\n y2Val = domain[y2DomainIndex];\n } else {\n y1Val = yRange[0];\n y2Val = yRange[yRange.length - 1];\n }\n y1 = yAxis.getScaleValue(y1Val);\n y2 = yAxis.getScaleValue(y2Val);\n y2 += yAxis.constructor.type() === 'band' ? yAxis.getUnitWidth() : 0;\n }\n } else {\n y1 = y2 = undefined;\n }\n\n if ((yLinear && xLinear) || !payload.dragEnd) {\n if (xDim) {\n [x1, x2] = xDim;\n }\n if (yDim) {\n [y1, y2] = yDim;\n }\n }\n\n return {\n dimension: {\n x1,\n x2,\n y1,\n y2\n },\n direction\n };\n};\n\nexport const changeVisibility = (context, sideEffectGroup, visible) => {\n const config = context.config();\n const className = config.defClassName;\n const classPrefix = config.classPrefix;\n selectElement(sideEffectGroup).selectAll(`.${classPrefix}-${className}`)\n .style('display', visible ? 'block' : 'none');\n};\n","import {\n getQualifiedClassName,\n selectElement,\n makeElement,\n isValidValue\n} from 'muze-utils';\nimport { CLASSPREFIX } from '../../enums/constants';\nimport './styles.scss';\nimport SpawnableSideEffect from '../spawnable';\nimport { selectionBoxDrag } from '../../actions/physical/selection-box-drag';\nimport { getBoxDimensionsFromPayload, changeVisibility } from './helper';\n\n/**\n * This class is used to create a selection box which is used by visual unit for brushing and\n * selection in the canvas.\n * @class SelectionBox\n */\nclass SelectionBox extends SpawnableSideEffect {\n /**\n * It returns the default configuration needed by selectionbox.\n * @return {Object} Default configuration of the selection box.\n */\n static defaultConfig () {\n return {\n defClassName: 'selection-box-group',\n className: '',\n classPrefix: CLASSPREFIX,\n box: {\n defClassName: 'selection-box',\n className: ''\n },\n transition: {\n duration: 200\n }\n };\n }\n\n static formalName () {\n return 'selectionBox';\n }\n\n /**\n * Draws the selectionbox with the specified dimensions.\n * @param {Object} dimension Dimensions of the selection box.\n * @param {number} dimension.x1 Starting x position\n * @param {number} dimension.x2 Ending x position\n * @param {number} dimension.y1 Starting y position\n * @param {number} dimension.y2 Ending y position\n * @param {Object} conf Configuration needed to draw the selection box\n * @param {number} unitWidth Width of the visual unit.\n * @param {number} unitHeight Height of the visual unit.\n */\n apply (selectionSet, payload) {\n let x;\n let y;\n let width;\n let height;\n const config = this._config;\n const boxConf = config.box;\n const firebolt = this.firebolt;\n const drawingInf = this.drawingContext();\n const mountPoint = drawingInf.sideEffectGroup;\n const unitWidth = drawingInf.width;\n const unitHeight = drawingInf.height;\n const classPrefix = config.classPrefix;\n const selectionGroupClassName = config.defClassName;\n\n if (payload.criteria === null) {\n this.hide(drawingInf);\n return this;\n }\n\n const sourceInf = firebolt.context.getSourceInfo();\n const { dimension, direction } = getBoxDimensionsFromPayload(payload, sourceInf.axes,\n sourceInf.fields);\n const transition = payload.dragEnd && config.transition;\n\n if (direction === 'both' || direction === 'vertical') {\n x = Math.min(dimension.x1, dimension.x2);\n width = Math.abs(dimension.x2 - dimension.x1);\n } else {\n x = 0;\n width = unitWidth;\n }\n if (direction === 'both' || direction === 'horizontal') {\n y = Math.min(dimension.y1, dimension.y2);\n height = Math.abs(dimension.y2 - dimension.y1);\n } else {\n height = unitHeight;\n y = 0;\n }\n this.show(drawingInf);\n // Create the data array for drawing the rectangle\n const points = [\n {\n x,\n y,\n width,\n height\n }\n ];\n // Create the container group for selection box.\n const selectionGroup = makeElement(selectElement(mountPoint), 'g', [1],\n `.${classPrefix}-${selectionGroupClassName}`);\n const sideEffect = this;\n const selection = selectionGroup.selectAll('rect').data(points);\n const selectionBox = selection.enter().append('rect')\n .each(function () {\n selectionBoxDrag(firebolt)(selectElement(this), ['brush'], sideEffect);\n })\n .merge(selection)\n .each(function (attrs) {\n let element = selectElement(this);\n transition && (element = element.transition().duration(transition.duration));\n for (const key in attrs) {\n if ({}.hasOwnProperty.call(attrs, key)) {\n isValidValue(attrs[key]) && element.attr(key, attrs[key]);\n }\n }\n });\n // Get the qualified class name for selection box rectangle\n const boxClassName = getQualifiedClassName(boxConf.defClassName, this._id, classPrefix);\n selectionBox.classed(boxClassName.join(' '), true);\n selectionBox.classed(boxConf.className, true);\n\n return this;\n }\n\n hide (drawingInf) {\n changeVisibility(this, drawingInf.sideEffectGroup, false);\n }\n\n show (drawingInf) {\n changeVisibility(this, drawingInf.sideEffectGroup, true);\n }\n}\n\nexport default SelectionBox;\n\n","import {\n getEvent,\n getD3Drag\n } from 'muze-utils';\n\nimport getDragActionConfig from './helpers/drag-action-config';\n\nexport const selectionBoxDrag = firebolt => (targetEl, behaviours) => {\n let subject;\n let drawingInf;\n const context = firebolt.context;\n const onDrag = (payload) => {\n behaviours.forEach(action => firebolt.dispatchBehaviour(action, payload));\n };\n const d3Drag = getD3Drag();\n\n targetEl.call(d3Drag().on('start', () => {\n const event = getEvent();\n drawingInf = context.getDrawingContext();\n subject = event.subject;\n }).on('drag', () => {\n const event = getEvent();\n subject.x += event.dx;\n subject.y += event.dy;\n const width = drawingInf.width;\n const height = drawingInf.height;\n const x = Math.min(width - subject.width, Math.max(subject.x, 0));\n const y = Math.min(height - subject.height, Math.max(subject.y, 0));\n const y2 = y + subject.height;\n const x2 = x + subject.width;\n\n if (x >= 0 && x2 <= width && y >= 0 && y2 <= height) {\n const payload = getDragActionConfig(context.getSourceInfo(), {\n startPos: {\n x,\n y\n },\n endPos: {\n x: x2,\n y: y2\n }\n }, context.data().getFieldsConfig());\n onDrag(payload);\n }\n }).on('end', () => {\n const width = drawingInf.width;\n const height = drawingInf.height;\n const x = Math.min(width - subject.width, Math.max(subject.x, 0));\n const y = Math.min(height - subject.height, Math.max(subject.y, 0));\n const y2 = y + subject.height;\n const x2 = x + subject.width;\n\n if (x >= 0 && x2 <= width && y >= 0 && y2 <= height) {\n const payload = getDragActionConfig(context.getSourceInfo(), {\n startPos: {\n x,\n y\n },\n endPos: {\n x: x2,\n y: y2\n },\n snap: true\n }, context.data().getFieldsConfig());\n payload.dragEnd = true;\n onDrag(payload);\n }\n }));\n};\n","export const CLASSPREFIX = 'muze';\nexport const ARROW_RIGHT = 'right';\nexport const ARROW_TOP = 'top';\nexport const ARROW_BOTTOM = 'bottom';\nexport const ARROW_LEFT = 'left';\nexport const TOOLTIP_LEFT = 'left';\nexport const TOOLTIP_RIGHT = 'right';\nexport const TOOLTIP_BOTTOM = 'bottom';\nexport const TOOLTIP_TOP = 'top';\nexport const INITIAL_STYLE = {\n position: 'absolute',\n width: 0,\n height: 0\n};\n","import { CLASSPREFIX } from './constants';\n\nexport const defaultConfig = {\n classPrefix: CLASSPREFIX,\n defClassName: 'tooltip-box',\n connectorClassName: 'tooltip-connectors',\n className: '',\n row: {\n margin: 0\n },\n content: {\n spacing: 5,\n iconContainerSize: 10,\n iconScale: 1,\n iconShape: 'circle',\n iconColor: '#ff0000',\n rowMargin: '0px',\n margin: 10,\n separator: ':',\n className: 'tooltip-content-container',\n parentClassName: 'tooltip-content-parent-container'\n },\n arrow: {\n size: 10,\n disabled: false,\n defClassName: 'tooltip-arrow',\n className: '',\n color: 'rgba(195,195,195,0.85)'\n }\n};\n","import { getQualifiedClassName } from 'muze-utils';\nimport { TOOLTIP_LEFT, TOOLTIP_RIGHT, ARROW_RIGHT, ARROW_LEFT, TOOLTIP_BOTTOM } from './constants';\n\nexport const getArrowPos = (orient, dim, measurement, config) => {\n let arrowPos;\n const { x, y, boxHeight, boxWidth } = measurement;\n const arrowDisabled = config.arrow.disabled;\n const arrowWidth = arrowDisabled ? 0 : config.arrow.size;\n\n if (orient === ARROW_LEFT || orient === ARROW_RIGHT) {\n let start = 0;\n let diff = boxHeight / 2;\n const plotBottom = dim.y + dim.height;\n const boxBottom = y + boxHeight;\n\n if (dim.y > y) {\n start = dim.y - y;\n diff = (plotBottom >= boxBottom ? (boxBottom - dim.y) : dim.height) / 2;\n } else if (boxBottom > plotBottom) {\n diff = Math.abs(y - (dim.y + dim.height)) / 2;\n }\n arrowPos = start + diff - arrowWidth / 2;\n } else {\n let start = 0;\n let diff = boxWidth / 2;\n const plotRight = dim.x + dim.width;\n const boxRight = x + boxWidth;\n\n if (dim.x > x) {\n start = dim.x - x;\n diff = (plotRight >= boxRight ? (boxRight - dim.x) : dim.width) / 2;\n } else if (boxRight > plotRight) {\n diff = Math.abs(x - (dim.x + dim.width)) / 2;\n }\n arrowPos = start + diff - arrowWidth / 2;\n }\n return arrowPos;\n};\n\n/**\n * Places the arrow in the specified arrow position. It also applies appropriate arrow\n * class name to the arrow element.\n * @param {string} position Left, bottom or right position of the arrow;\n * @param {number} arrowPos position of arrow in pixels\n * @return {Tooltip} Instance of tooltip.\n */\nexport const placeArrow = (context, position, arrowPos) => {\n const tooltipArrow = context._tooltipArrow;\n const tooltipBackground = context._tooltipBackground;\n const config = context._config;\n const classPrefix = config.classPrefix;\n const arrowConf = config.arrow;\n const className = getQualifiedClassName(arrowConf.defClassName, context._id, config.classPrefix);\n\n tooltipArrow.style('display', 'block');\n tooltipArrow.attr('class', `${className.join(' ')}`);\n if (position === TOOLTIP_LEFT || position === TOOLTIP_RIGHT) {\n tooltipArrow.style('top', `${arrowPos}px`);\n tooltipArrow.style('left', '');\n tooltipBackground.style('top', `${arrowPos}px`);\n tooltipBackground.style('left', '');\n } else {\n position === TOOLTIP_BOTTOM ? tooltipArrow.style('top', '100%') : tooltipArrow.style('top',\n `-${arrowConf.size}px`);\n tooltipArrow.style('left', `${arrowPos}px`);\n position === TOOLTIP_BOTTOM ? tooltipBackground.style('top', '100%') : tooltipBackground.style('top',\n `-${arrowConf.size + 3}px`);\n tooltipBackground.style('left', `${arrowPos}px`);\n }\n tooltipArrow.classed(`${classPrefix}-tooltip-arrow`, true);\n tooltipArrow.classed(`${classPrefix}-tooltip-arrow-${context._arrowOrientation}`, false);\n tooltipArrow.classed(`${classPrefix}-tooltip-arrow-${position}`, true);\n tooltipBackground.classed(`${classPrefix}-tooltip-background-arrow`, true);\n tooltipBackground.classed(`${classPrefix}-tooltip-background-arrow-${context._arrowOrientation}`, false);\n tooltipBackground.classed(`${classPrefix}-tooltip-background-arrow-${position}`, true);\n return this;\n};\n\nexport const reorderContainers = (parentContainer, className) => {\n parentContainer.selectAll(className).sort((a, b) => a - b);\n};\n","import {\n getClosestIndexOf,\n DateTimeFormatter,\n DimensionSubtype,\n FieldType\n} from 'muze-utils';\n\nconst timeFormats = {\n millisecond: '%A, %b %e, %H:%M:%S.%L',\n second: '%A, %b %e, %H:%M:%S',\n minute: '%A, %b %e, %H:%M',\n hour: '%A, %b %e, %H:%M',\n day: '%A, %b %e, %Y',\n month: '%B %Y',\n year: '%Y'\n};\nconst timeDurations = [\n ['millisecond', 'second', 'minute', 'hour', 'day', 'month', 'year'],\n [1, 1000, 60000, 3600000, 86400000, 2592000000, 31536000000]\n];\nconst getNearestInterval = (interval) => {\n const index = getClosestIndexOf(timeDurations[1], interval);\n return timeDurations[0][index];\n};\nconst defaultTooltipFormatters = (type, formatter) => {\n const formatters = {\n [DimensionSubtype.TEMPORAL]: (value, interval) => {\n const nearestInterval = getNearestInterval(interval);\n return DateTimeFormatter.formatAs(value, timeFormats[nearestInterval]);\n },\n [FieldType.MEASURE]: value => formatter(value ? value.toFixed(2) : value),\n [FieldType.DIMENSION]: value => value\n };\n return formatters[type];\n};\n\nconst getTabularData = (data, schema, fieldspace, timeDiffs) => {\n const rows = [];\n rows.push(schema.map(d => d.name));\n data.forEach((d) => {\n const row = [];\n schema.forEach((fieldObj, i) => {\n const interval = fieldObj.subtype === DimensionSubtype.TEMPORAL ? timeDiffs[fieldObj.name] : 0;\n const numberFormat = fieldObj.type === FieldType.MEASURE && fieldspace.fields[i]._ref.numberFormat();\n const formatterFn = defaultTooltipFormatters(fieldObj.subtype || fieldObj.type, numberFormat);\n const value = formatterFn(d[i], interval);\n row.push(value);\n });\n rows.push(row);\n });\n return rows;\n};\n\nexport const buildTooltipData = (dataModel, config = {}, context) => {\n let fieldValues = [];\n const dataObj = dataModel.getData();\n const data = dataObj.data;\n const schema = dataObj.schema;\n const formatters = config.formatters;\n const separator = config.separator;\n const fieldsConfig = dataModel.getFieldsConfig();\n const fieldspace = dataModel.getFieldspace();\n const fieldsObj = fieldspace.fieldsObj();\n const dimensionMeasureMap = context.dimensionMeasureMap;\n const axes = context.axes;\n const detailFields = context.detailFields || [];\n const dimensions = schema.filter(d => d.type === FieldType.DIMENSION);\n const measures = schema.filter(d => d.type === FieldType.MEASURE);\n // const containsRetinalField = schema.find(d => d.name in dimensionMeasureMap);\n const containsDetailField = schema.find(d => detailFields.indexOf(d.name) !== -1);\n const dataLen = data.length;\n const getRowContent = (field, type) => {\n let value;\n let formattedValue;\n let measureIndex;\n const values = [];\n const index = fieldsConfig[field].index;\n const interval = fieldsConfig[field].def.subtype === DimensionSubtype.TEMPORAL ?\n fieldsObj[field].getMinDiff() : 0;\n const formatterFn = (formatters && formatters[field]) || defaultTooltipFormatters(type, val => val);\n\n if (value !== null) {\n let uniqueVals = type === FieldType.MEASURE ? data.map(d => d[index]) :\n [...new Set(data.map(d => d[index]))];\n uniqueVals = uniqueVals.filter(d => d !== '');\n const colorAxis = axes.color[0];\n const shapeAxis = axes.shape[0];\n const sizeAxis = axes.size[0];\n const isRetinalField = (colorAxis || shapeAxis || sizeAxis) && dataLen > 1 &&\n type !== FieldType.MEASURE;\n\n uniqueVals.forEach((val, i) => {\n let key;\n const associatedMeasures = dimensionMeasureMap[field];\n\n if (associatedMeasures && associatedMeasures.length && dataLen > 1) {\n key = val;\n let icon = {\n value: ''\n };\n\n if (isRetinalField) {\n icon = {\n type: 'icon',\n color: colorAxis.getColor(val),\n shape: shapeAxis.getShape(val),\n size: sizeAxis.getSize(val) * config.iconScale\n };\n }\n if (associatedMeasures.length > 1) {\n values.push([icon, `${key}`]);\n associatedMeasures.forEach((measure) => {\n measureIndex = fieldsConfig[measure].index;\n value = data[i][measureIndex];\n formattedValue = defaultTooltipFormatters('measure',\n fieldspace.fields[measureIndex]._ref.numberFormat())(value, interval);\n values.push([{\n value: `${measure}${separator}`,\n style: {\n 'margin-left': `${config.margin}px}`\n },\n className: `${config.classPrefix}-tooltip-key`\n }, {\n value: `${formattedValue}`,\n className: `${config.classPrefix}-tooltip-value`\n }]);\n });\n } else {\n measureIndex = fieldsConfig[associatedMeasures[0]].index;\n value = data[i][measureIndex];\n formattedValue = defaultTooltipFormatters('measure',\n fieldspace.fields[measureIndex]._ref.numberFormat())(value, interval);\n values.push([icon, {\n value: `${key}${separator}`,\n className: `${config.classPrefix}-tooltip-key`\n }, {\n value: `${formattedValue}`,\n className: `${config.classPrefix}-tooltip-value`\n }]);\n }\n } else {\n key = field;\n value = val;\n formattedValue = formatterFn(value, interval);\n values.push([{\n value: `${key}${separator}`,\n className: `${config.classPrefix}-tooltip-key`\n }, {\n value: `${formattedValue}`,\n className: `${config.classPrefix}-tooltip-value`\n }]);\n }\n });\n }\n return values;\n };\n let displayFormat = 'keyValue';\n\n if (dataLen > 1 && containsDetailField) {\n fieldValues = getTabularData(data, schema, fieldspace, context.timeDiffs);\n displayFormat = 'table';\n } else {\n dimensions.forEach((item) => {\n const type = item.subtype ? item.subtype : item.type;\n fieldValues = [...fieldValues, ...getRowContent(item.name, type)];\n });\n\n const allMeasures = [...new Set(...Object.values(dimensionMeasureMap))];\n const filteredMeasures = dataLen > 1 ? measures.filter(d => allMeasures.indexOf(d.name) === -1)\n : measures;\n\n filteredMeasures.forEach((item) => {\n const type = item.subtype ? item.subtype : item.type;\n fieldValues = [...fieldValues, ...getRowContent(item.name, type)];\n });\n }\n\n return {\n content: fieldValues,\n displayFormat\n };\n};\n\n/**\n * This contains the strategy methods for showing tooltip in the chart.\n * @param {VisualUnit} context Attached instance.\n */\nexport const strategy = {\n keyValue: (data, config, context) => {\n const values = buildTooltipData(data, config, context);\n return values;\n }\n};\n\nexport const DEFAULT_STRATEGY = 'keyValue';\n","import {\n selectElement,\n mergeRecursive,\n makeElement,\n setAttrs,\n setStyles,\n getSymbol,\n isSimpleObject\n} from 'muze-utils';\nimport { DEFAULT_STRATEGY, strategy } from './strategy';\nimport { defaultConfig } from './default-config';\n\n/**\n * This class is used to manage the content of tooltip.\n */\nexport default class Content {\n /**\n * Creates an instance of content.\n */\n constructor () {\n this._model = null;\n this._strategy = DEFAULT_STRATEGY;\n this._formatter = null;\n this._config = this.constructor.defaultConfig();\n }\n /**\n * Returns the default configuration of tooltip\n * @return {Object} Configuration of tooltip.\n */\n static defaultConfig () {\n const config = defaultConfig.content;\n config.classPrefix = defaultConfig.classPrefix;\n return config;\n }\n\n config (...c) {\n if (c.length > 0) {\n this._config = mergeRecursive(this._config, c[0]);\n return this;\n }\n return this._config;\n }\n\n /**\n * Update model. The format contains presentation strategy which determines how to show the content.\n * If no strategy is mentioned then default is to show key value pair\n */\n update (item) {\n this._model = item.model;\n this._strategy = item.strategy !== undefined ? item.strategy : DEFAULT_STRATEGY;\n this._formatter = item.formatter;\n return this;\n }\n\n context (ctx) {\n this._context = ctx;\n return this;\n }\n\n render (mount) {\n let data;\n const config = this._config;\n const iconContainerSize = config.iconContainerSize;\n const formatter = this._formatter;\n const rowMargin = config.rowMargin;\n const model = this._model;\n\n this._mount = mount;\n if (model instanceof Array) {\n data = model;\n } else {\n data = formatter instanceof Function ? formatter(this._model, this._context) :\n strategy[this._strategy](this._model, this.config(), this._context);\n }\n\n if (data instanceof Function) {\n mount.html(data());\n } else {\n let content = data;\n let displayFormat = 'default';\n\n if (isSimpleObject(data)) {\n content = data.content;\n displayFormat = data.displayFormat;\n }\n\n const body = makeElement(mount, 'div', [displayFormat], `${config.classPrefix}-tooltip-content`, {},\n d => d);\n\n if (displayFormat === 'table') {\n const table = makeElement(body, 'table', [1], `${config.classPrefix}-tooltip-table`);\n const tbody = makeElement(table, 'tbody', [1], `${config.classPrefix}-tooltip-table-tbody`);\n const rows = makeElement(tbody, 'tr', content, `${config.classPrefix}-tooltip-table-row`);\n rows.each(function (d, i) {\n selectElement(this).classed(`${config.classPrefix}-tooltip-table-row-${i}`, true);\n });\n const cells = makeElement(rows, 'td', d => d, `${config.classPrefix}-tooltip-table-cell`);\n cells.each(function (d) {\n selectElement(this).html(d);\n });\n } else {\n const rows = makeElement(body, 'div', content, `${config.classPrefix}-tooltip-row`);\n const cells = makeElement(rows, 'span', d => d, `${config.classPrefix}-tooltip-content`);\n cells.attr('class', `${config.classPrefix}-tooltip-content`);\n setStyles(rows, {\n margin: rowMargin\n });\n setStyles(cells, {\n display: 'inline-block',\n 'margin-right': `${config.spacing}px`\n });\n\n cells.each(function (d) {\n const el = selectElement(this);\n el.html('');\n if (d instanceof Object) {\n if (d.type === 'icon') {\n const svg = makeElement(el, 'svg', [1]);\n const path = makeElement(svg, 'path', [1]);\n const shape = d.shape instanceof Function ? d.shape : getSymbol(d.shape);\n\n setAttrs(svg, {\n x: 0,\n y: 0,\n width: iconContainerSize,\n height: iconContainerSize\n });\n setAttrs(path, {\n d: shape.size(d.size)(),\n transform: `translate(${iconContainerSize / 2}, ${iconContainerSize / 2})`\n });\n setStyles(path, {\n fill: d.color\n });\n setStyles(svg, {\n width: `${iconContainerSize}px`,\n height: `${iconContainerSize}px`\n });\n } else {\n el.html(d.value);\n d.className && el.classed(d.className, true);\n setStyles(el, d.style);\n }\n } else {\n el.html(d);\n }\n });\n }\n }\n return this;\n }\n\n clear () {\n this._model = null;\n return this;\n }\n}\n","import {\n mergeRecursive,\n getQualifiedClassName,\n getUniqueId,\n selectElement,\n setStyles,\n makeElement\n} from 'muze-utils';\nimport { ARROW_BOTTOM, ARROW_LEFT, ARROW_RIGHT, TOOLTIP_LEFT, TOOLTIP_RIGHT, TOOLTIP_BOTTOM, TOOLTIP_TOP,\n INITIAL_STYLE } from './constants';\nimport { defaultConfig } from './default-config';\nimport { getArrowPos, placeArrow, reorderContainers } from './helper';\nimport './styles.scss';\nimport Content from './content';\n\n/**\n * This component is responsible for creating a tooltip element. It appends the tooltip\n * in the body element.\n * @class Tooltip\n */\nexport default class Tooltip {\n /**\n * Initializes the tooltip with the container element and configuration\n * @param {HTMLElement} container container where the tooltip will be mounted.\n * @param {string} className Class name of the tooltip.\n */\n constructor (htmlContainer, svgContainer) {\n let connectorContainer = svgContainer;\n this._id = getUniqueId();\n this._config = {};\n this.config({});\n const tooltipConf = this._config;\n const classPrefix = tooltipConf.classPrefix;\n const contentClass = tooltipConf.content.parentClassName;\n const container = makeElement(htmlContainer, 'div', [1], `${classPrefix}-tooltip-container`);\n this._container = container;\n this._tooltipContainer = container.append('div').style('position', 'absolute');\n this._contentContainer = this._tooltipContainer.append('div').attr('class', `${classPrefix}-${contentClass}`);\n this._tooltipBackground = this._tooltipContainer.append('div').style('position', 'relative');\n this._tooltipArrow = this._tooltipContainer.append('div');\n\n if (!svgContainer) {\n connectorContainer = htmlContainer.append('svg').style('pointer-events', 'none');\n }\n this._contents = {};\n this._tooltipConnectorContainer = selectElement(connectorContainer)\n .append('g')\n .attr('class', `${tooltipConf.classPrefix}-${tooltipConf.connectorClassName}`);\n const id = this._id;\n const defClassName = tooltipConf.defClassName;\n const qualifiedClassName = getQualifiedClassName(defClassName, id, tooltipConf.classPrefix);\n\n setStyles(this._tooltipArrow, INITIAL_STYLE);\n setStyles(this._tooltipBackground, INITIAL_STYLE);\n this.addClass(qualifiedClassName.join(' '));\n this.addClass(tooltipConf.className);\n this.hide();\n }\n\n /**\n * Sets the configuration of tooltip.\n * @param {Object} config Configuration of tooltip\n * @return {Tooltip} Instance of tooltip\n */\n config (...config) {\n if (config.length > 0) {\n const defConf = mergeRecursive({}, this.constructor.defaultConfig());\n this._config = mergeRecursive(defConf, config[0]);\n return this;\n }\n return this._config;\n }\n\n /**\n * Returns the default configuration of tooltip\n * @return {Object} Configuration of tooltip.\n */\n static defaultConfig () {\n return defaultConfig;\n }\n /**\n * Sets the class name of tooltip\n * @param {string} className tooltip class name\n * @return {Tooltip} Instance of tooltip.\n */\n addClass (className) {\n this._tooltipContainer.classed(className, true);\n return this;\n }\n\n context (...ctx) {\n if (ctx.length) {\n this._context = ctx[0];\n return this;\n }\n return this._context;\n }\n\n content (name, data, contentConfig = {}) {\n const config = this.config();\n const { classPrefix } = config;\n const contentClass = config.content.className;\n const formatter = config.formatter;\n const className = contentConfig.className || `${classPrefix}-${contentClass}-${name}`;\n const content = this._contents[name] = this._contents[name] || new Content();\n const container = makeElement(this._contentContainer, 'div', [contentConfig.order], className);\n container.attr('class', `${classPrefix}-${contentClass} ${className}`);\n reorderContainers(this._contentContainer, `.${classPrefix}-${contentClass}`);\n const contentConf = config.content;\n contentConfig.classPrefix = this._config.classPrefix;\n content.config(contentConf);\n\n if (data === null) {\n content.clear();\n container.remove();\n delete this._contents[name];\n } else {\n content.update({\n model: data,\n formatter: contentConfig.formatter || formatter\n });\n content.context(this._context);\n content.render(container);\n }\n\n if (!Object.keys(this._contents).length) {\n this.hide();\n }\n return this;\n }\n\n getContents () {\n return Object.values(this._contents);\n }\n\n /**\n * Positions the tooltip at the given x and y position.\n * @param {number} x x position\n * @param {number} y y position\n * @return {Tooltip} Instance of tooltip.\n */\n position (x, y, conf = {}) {\n if (!Object.keys(this._contents).length) {\n this.hide();\n return this;\n }\n this.show();\n const target = this._target;\n const repositionArrow = conf.repositionArrow;\n\n if (target && repositionArrow) {\n const node = this._tooltipContainer.node();\n const config = this._config;\n const arrowDisabled = config.arrow.disabled;\n const arrowWidth = arrowDisabled ? 0 : config.arrow.size;\n const arrowOrient = this._arrowOrientation;\n const outsidePlot = arrowOrient === ARROW_LEFT || arrowOrient === ARROW_RIGHT ?\n (y + node.offsetHeight - arrowWidth) < target.y || y > (target.y + target.height) :\n (x + node.offsetWidth - arrowWidth) < target.x || x > (target.x + target.width);\n\n if (!arrowDisabled) {\n if (outsidePlot) {\n let path;\n this._tooltipArrow.style('display', 'none');\n this._tooltipBackground.style('display', 'none');\n this._tooltipConnectorContainer.style('display', 'block');\n const connector = this._tooltipConnectorContainer.selectAll('path').data([1]);\n const enter = connector.enter().append('path');\n if (arrowOrient === ARROW_LEFT) {\n path = `M ${x} ${y + node.offsetHeight / 2} L ${target.x + target.width}`\n + ` ${target.y + target.height / 2}`;\n } else if (arrowOrient === ARROW_RIGHT) {\n path = `M ${x + node.offsetWidth} ${y + node.offsetHeight / 2}`\n + ` L ${target.x} ${target.y + target.height / 2}`;\n } else if (arrowOrient === ARROW_BOTTOM) {\n path = `M ${x + node.offsetWidth / 2} ${y + node.offsetHeight}`\n + ` L ${target.x + target.width / 2} ${target.y}`;\n }\n enter.merge(connector).attr('d', path).style('display', 'block');\n } else {\n const arrowPos = getArrowPos(arrowOrient, target, {\n x,\n y,\n boxHeight: node.offsetHeight,\n boxWidth: node.offsetWidth\n }, this._config);\n\n placeArrow(this, this._arrowOrientation, arrowPos);\n this._tooltipConnectorContainer.style('display', 'none');\n }\n }\n }\n\n const offset = this._offset || {\n x: 0,\n y: 0\n };\n this._tooltipContainer.style('left', `${offset.x + x}px`).style('top',\n `${offset.y + y}px`);\n\n return this;\n }\n\n /**\n * Positions the tooltip relative to a rectangular box. It takes care of tooltip overflowing the\n * boundaries.\n * @param {Object} dim Dimensions of the plot.\n */\n positionRelativeTo (dim, tooltipConf = {}) {\n let obj;\n let orientation = tooltipConf.orientation;\n this.show();\n if (!dim) {\n this.hide();\n return this;\n }\n\n const extent = this._extent;\n const node = this._tooltipContainer.node();\n\n this._tooltipContainer.style('top', '0px')\n .style('left', '0px');\n const offsetWidth = node.offsetWidth + 2;\n const offsetHeight = node.offsetHeight + 2;\n const config = this._config;\n const offset = this._offset;\n const arrowDisabled = config.arrow.disabled;\n const arrowSize = arrowDisabled ? 0 : config.arrow.size;\n const draw = tooltipConf.draw !== undefined ? tooltipConf.draw : true;\n const topSpace = dim.y;\n // When there is no space in right\n const dimX = dim.x + dim.width + offset.x;\n const rightSpace = extent.width - dimX;\n const leftSpace = dim.x + offset.x - extent.x;\n const positionTop = topSpace > (offsetHeight + arrowSize);\n const positionRight = rightSpace >= offsetWidth + arrowSize;\n const positionLeft = leftSpace >= offsetWidth + arrowSize;\n\n const positionHorizontal = () => {\n let position;\n let x = dim.x + dim.width;\n let y = dim.y;\n\n if (positionRight) {\n position = TOOLTIP_LEFT;\n x += arrowSize;\n } else if (positionLeft) {\n x = dim.x - offsetWidth;\n position = TOOLTIP_RIGHT;\n x -= arrowSize;\n } else {\n position = 'left';\n x += arrowSize;\n }\n if (dim.height < offsetHeight) {\n y = Math.max(0, dim.y + dim.height / 2 - offsetHeight / 2);\n }\n\n const arrowPos = getArrowPos(position, dim, {\n x,\n y,\n boxHeight: offsetHeight,\n boxWidth: offsetWidth\n }, this._config);\n\n return {\n position,\n arrowPos,\n x,\n y\n };\n };\n\n const positionVertical = () => {\n let position;\n let y;\n // Position tooltip at the center of plot\n let x = dim.x - offsetWidth / 2 + dim.width / 2;\n\n // Overflows to the right\n if ((extent.width - (dim.x + offset.x)) < offsetWidth) {\n x = extent.width - offsetWidth - offset.x;\n } else if ((x + offset.x) < extent.x) { // Overflows to the left\n x = extent.x;\n }\n\n if (positionTop) {\n y = dim.y - offsetHeight - arrowSize;\n position = TOOLTIP_BOTTOM;\n } else {\n y = dim.y + dim.height + arrowSize;\n position = TOOLTIP_TOP;\n }\n\n const arrowPos = getArrowPos(position, dim, {\n x,\n y,\n boxHeight: offsetHeight,\n boxWidth: offsetWidth\n }, this._config);\n\n return {\n position,\n arrowPos,\n x,\n y\n };\n };\n\n this._target = dim;\n if (!orientation) {\n if (positionTop) {\n orientation = 'vertical';\n } else if (positionRight || positionLeft) {\n orientation = 'horizontal';\n } else {\n orientation = 'vertical';\n }\n }\n\n if (orientation === 'horizontal') {\n obj = positionHorizontal();\n } else if (orientation === 'vertical') {\n obj = positionVertical();\n }\n\n this._position = {\n x: obj.x,\n y: obj.y\n };\n\n this._arrowPos = obj.arrowPos;\n if (!arrowDisabled) {\n placeArrow(this, obj.position, obj.arrowPos);\n } else {\n this._tooltipArrow.style('display', 'none');\n this._tooltipBackground.style('display', 'none');\n }\n this._arrowOrientation = obj.position;\n draw && this.position(obj.x, obj.y);\n return this;\n }\n\n /**\n * Hides the tooltip element.\n * @return {Tooltip} Instance of tooltip.\n */\n hide () {\n this._tooltipContainer.style('display', 'none');\n this._tooltipConnectorContainer.style('display', 'none');\n return this;\n }\n\n /**\n * Shows the tooltip element.\n * @return {Tooltip} Instance of tooltip.\n */\n show () {\n this._tooltipContainer.style('display', 'block');\n return this;\n }\n\n extent (extent) {\n this._extent = extent;\n return this;\n }\n\n offset (offset) {\n this._offset = offset;\n return this;\n }\n\n remove () {\n this._tooltipContainer.remove();\n this._tooltipBackground.remove();\n this._tooltipConnectorContainer.remove();\n return this;\n }\n}\n","import { FieldType } from 'muze-utils';\n\nexport const strategies = {\n showSelectedItems: (dm) => {\n const dataObj = dm.getData();\n const measures = dataObj.schema.filter(d => d.type === FieldType.MEASURE);\n const aggregatedModel = dm.groupBy([''], measures.reduce((acc, v) => {\n acc[v.name] = v.defAggFn === 'count' ? 'sum' : v.defAggFn;\n return acc;\n }, {}));\n const fieldsObj = dm.getFieldspace().fieldsObj();\n const fieldsConf = aggregatedModel.getFieldsConfig();\n let values = [{\n value: `${dataObj.data.length}`,\n style: {\n 'font-weight': 'bold'\n }\n }, 'Items Selected'];\n const measureNames = measures.map(d => d.name);\n if (measureNames.length) {\n values = [...values, ...[`(${fieldsObj[measureNames[0]].defAggFn().toUpperCase()}) ${measureNames[0]}`,\n {\n value: `${aggregatedModel.getData().data[0][fieldsConf[measureNames[0]].index].toFixed(2)}`,\n style: {\n 'font-weight': 'bold'\n }\n }]];\n }\n return [values];\n }\n};\n","import { Tooltip as TooltipRenderer } from '@chartshq/muze-tooltip';\nimport { FieldType } from 'muze-utils';\nimport { spaceOutBoxes } from '../helper';\nimport { strategies } from './strategies';\nimport { FRAGMENTED } from '../../enums/constants';\nimport SpawnableSideEffect from '../spawnable';\n\nimport './styles.scss';\n\nexport default class Tooltip extends SpawnableSideEffect {\n constructor (...params) {\n super(...params);\n this._tooltips = {};\n this._strategies = strategies;\n this._strategy = 'default';\n }\n\n static defaultConfig () {\n return {\n padding: 5,\n offset: {\n x: 0,\n y: 0\n }\n };\n }\n\n static formalName () {\n return 'tooltip';\n }\n\n apply (selectionSet, payload, options = {}) {\n let totalHeight = 0;\n let totalWidth = 0;\n const dataModel = selectionSet.mergedEnter.model;\n const context = this.firebolt.context;\n const drawingInf = this.drawingContext();\n if ((dataModel.isEmpty() || payload.criteria === null) || selectionSet.isSourceFieldPresent === false) {\n this.hide(options, null);\n return this;\n }\n\n const tooltips = this._tooltips;\n const config = this.config();\n const boundBox = {\n width: drawingInf.width,\n height: drawingInf.height\n };\n const showInPosition = payload.showInPosition;\n const pad = config.padding;\n const dataModels = [];\n const fragmented = config.mode === FRAGMENTED;\n const sourceInf = context.getSourceInfo();\n const fields = sourceInf.fields;\n const xFieldDim = fields.x[0] ? fields.x[0].type() === FieldType.DIMENSION : false;\n const showVertically = !!xFieldDim;\n const tooltipPos = payload.position;\n const boxes = [];\n const enter = {};\n const uids = dataModel.getData().uids;\n if (fragmented) {\n dataModels.push(...uids.map(d => dataModel.select((fieldsArr, i) => i === d, {\n saveChild: false\n })));\n } else {\n dataModels.push(dataModel);\n }\n\n let target = payload.target;\n let targetFields = [];\n if (target) {\n targetFields = target[0] || [];\n const sourceFields = payload.sourceFields;\n const indices = [];\n for (let i = 0, len = targetFields.length; i < len; i++) {\n if (sourceFields.indexOf(targetFields[i]) !== -1) {\n indices.push(i);\n }\n }\n target = target.map(d => d.filter((v, i) => indices.indexOf(i) !== -1));\n }\n\n const plotDimensions = context.getPlotPointsFromIdentifiers(target || payload.criteria, {\n getBBox: true\n });\n\n // Show tooltip for each datamodel\n for (let i = 0; i < dataModels.length; i++) {\n let plotDim = plotDimensions[i];\n if (fragmented) {\n const dimensions = dataModels[i].getData().schema.filter(d => d.type === FieldType.DIMENSION)\n .map(d => d.name);\n plotDim = context.getPlotPointsFromIdentifiers(dataModels[i].project(dimensions), { getBBox: true });\n plotDim = plotDim && plotDim[0];\n }\n\n let dt = dataModels[i];\n if (config.fields) {\n dt = dt.project(config.fields, {\n saveChild: false\n });\n }\n if (config.dataTransform) {\n dt = config.dataTransform(dt, i);\n }\n\n enter[i] = true;\n const layoutContainer = drawingInf.parentContainer;\n const layoutBoundBox = layoutContainer.getBoundingClientRect();\n const unitBoundBox = drawingInf.htmlContainer.getBoundingClientRect();\n\n const offsetLeft = unitBoundBox.left - layoutBoundBox.left;\n const offsetTop = unitBoundBox.top - layoutBoundBox.top;\n const tooltipInst = tooltips[i] = tooltips[i] || new TooltipRenderer(layoutContainer,\n drawingInf.svgContainer);\n\n sourceInf.payload = payload;\n sourceInf.firebolt = this.firebolt;\n sourceInf.detailFields = context.detailFields();\n sourceInf.timeDiffs = context.timeDiffsByField();\n tooltipInst.context(sourceInf);\n const strategy = strategies[options.strategy];\n tooltipInst.content(options.strategy || this._strategy, dt, {\n formatter: strategy,\n order: options.order\n })\n .config(this.config())\n .extent({\n x: 0,\n y: 0,\n width: layoutBoundBox.width,\n height: layoutBoundBox.height\n })\n .offset({\n x: offsetLeft + (config.offset.x || 0),\n y: offsetTop + (config.offset.y || 0)\n });\n\n if (showInPosition) {\n tooltipInst.position(tooltipPos.x + pad, tooltipPos.y + pad);\n } else if (plotDim) {\n tooltipInst.positionRelativeTo({\n x: plotDim.x,\n y: plotDim.y,\n width: plotDim.width || 0,\n height: plotDim.height || 0\n }, {\n orientation: fragmented ?\n (showVertically ? 'horizontal' : 'vertical') : undefined\n });\n } else {\n tooltipInst.hide();\n break;\n }\n\n if (fragmented) {\n const position = tooltipInst._position;\n const tooltipBoundBox = tooltipInst._tooltipContainer.node().getBoundingClientRect();\n\n totalHeight += tooltipBoundBox.height + pad;\n totalWidth += tooltipBoundBox.width + pad;\n if (showVertically ? totalHeight > drawingInf.height : totalWidth > drawingInf.width) {\n break;\n }\n boxes.push({\n x: position.x,\n y: position.y,\n width: tooltipBoundBox.width,\n height: tooltipBoundBox.height,\n tooltip: tooltipInst\n });\n }\n }\n\n for (const key in tooltips) {\n if (!enter[key]) {\n const tooltip = tooltips[key];\n tooltip.content(payload.action, null);\n if (!tooltip.getContents().length) {\n tooltip.remove();\n delete tooltips[key];\n }\n }\n }\n if (fragmented) {\n spaceOutBoxes(boxes, boundBox, showVertically);\n boxes.forEach(box => box.tooltip.position(box.x, box.y, {\n repositionArrow: true\n }));\n }\n return this;\n }\n\n hide (options) {\n const tooltips = this._tooltips;\n for (const key in tooltips) {\n if ({}.hasOwnProperty.call(tooltips, key)) {\n const strategy = options.strategy || this._strategy;\n tooltips[key].content(strategy, null);\n tooltips[key].hide();\n }\n }\n }\n}\n","export const spaceOutBoxes = (boxes, extent, showVertically) => {\n let y;\n let height;\n let x;\n let width;\n let i;\n const pad = 5;\n const len = boxes.length;\n const spaceOutIfOverlap = (firstBox, secondBox, opposite) => {\n x = firstBox.x;\n width = firstBox.width;\n y = firstBox.y;\n height = firstBox.height;\n const bottom = y + height;\n const right = x + width;\n\n if (showVertically) {\n if (opposite ? y < (secondBox.y + secondBox.height) : bottom > secondBox.y) {\n secondBox.y = opposite ? firstBox.y - secondBox.height - pad :\n bottom + pad;\n }\n } else if (opposite ? x < (secondBox.x + secondBox.width) : right > secondBox.x) {\n secondBox.x = opposite ? firstBox.x - secondBox.width - pad :\n right + pad;\n }\n };\n\n boxes.sort((a, b) => (showVertically ? a.y - b.y : a.x - b.x));\n i = 0;\n\n for (i = 0; i < len - 1; i++) {\n spaceOutIfOverlap(boxes[i], boxes[i + 1]);\n }\n\n if ((boxes[i].y + boxes[i].height) > extent.height ||\n (boxes[i].x + boxes[i].width) > extent.width) {\n if (showVertically) {\n boxes[i].y -= (boxes[i].height + boxes[i].y) - extent.height;\n } else {\n boxes[i].x -= (boxes[i].width + boxes[i].x) - extent.width;\n }\n for (i = len - 1; i > 0; i--) {\n spaceOutIfOverlap(boxes[i], boxes[i - 1], true);\n }\n }\n return boxes;\n}\n;\n","import { selectElement, FieldType } from 'muze-utils';\n\nimport './styles.scss';\nimport { CLASSPREFIX } from '../../enums/constants';\nimport SpawnableSideEffect from '../spawnable';\n\nexport default class Crossline extends SpawnableSideEffect {\n static defaultConfig () {\n return {\n className: `${CLASSPREFIX}-crossline-group`,\n bandClass: `${CLASSPREFIX}-crossband`,\n lineClass: `${CLASSPREFIX}-crossline`\n };\n }\n\n static formalName () {\n return 'crossline';\n }\n\n apply (selectionSet, payload) {\n let height;\n let bandWidth;\n let px;\n let width;\n const {\n className,\n bandClass,\n lineClass\n } = this.config();\n const dataModel = selectionSet.mergedEnter.model;\n const drawingInf = this.drawingContext();\n if (payload.criteria && dataModel && dataModel.isEmpty()) {\n return this;\n }\n if (payload.criteria === null || !dataModel) {\n this.hide();\n return this;\n }\n\n const dataObj = dataModel.getData();\n const sourceInf = this.firebolt.context.getSourceInfo();\n const axes = sourceInf.axes;\n const axisFields = sourceInf.fields;\n const fields = selectionSet.fields;\n const data = dataObj.data;\n const fieldsConfig = dataModel.getFieldsConfig();\n const svgContainer = drawingInf.sideEffectGroup;\n\n const elemData = [];\n fields.forEach((field) => {\n const fieldIndex = fieldsConfig[field] && fieldsConfig[field].index;\n const dataArr = data.map(d => d[fieldIndex]);\n const axisIndex = [['x', 0], ['x', 1], ['y', 0], ['y', 1]].find((arr) => {\n const fieldInst = axisFields[arr[0]][arr[1]];\n return fieldInst && fieldInst.type() === FieldType.DIMENSION &&\n fieldInst.getMembers().indexOf(field) !== -1;\n });\n if (axisIndex !== undefined && data.length) {\n const type = axisIndex[0];\n const axis = axes[type][axisIndex[1]];\n const value = dataArr[0];\n bandWidth = axis.getUnitWidth() || 0;\n px = axis.getScaleValue(value) + bandWidth / 2 + drawingInf.xOffset;\n const plotWidth = Math.max(...this.firebolt.context.layers().map(layer => layer.getPlotSpan()[type]));\n const pad = Math.max(...this.firebolt.context.layers().map(layer => layer.getPlotPadding()[type]));\n height = drawingInf.height;\n width = drawingInf.width;\n const startPx = px - plotWidth / 2 - pad / 2;\n const endPx = px + plotWidth / 2 + pad / 2;\n const dataPoint = {};\n if (type === 'y') {\n dataPoint.d = `M 0 ${startPx} L 0 ${endPx} L ${width} ${endPx} L ${width} ${startPx} Z`;\n } else {\n dataPoint.d = `M ${startPx} 0 L ${endPx} 0 L ${endPx} ${height} L ${startPx} ${height} Z`;\n }\n dataPoint.className = plotWidth ? bandClass : lineClass;\n elemData.push(dataPoint);\n }\n });\n if (elemData.length) {\n const parentGroup = this.createElement(svgContainer, 'g', [1], className);\n const elem = this.createElement(parentGroup, 'path', elemData);\n elem.attr('d', d => d.d).style('pointer-events', 'none')\n .attr('class', d => d.className);\n }\n return this;\n }\n\n hide () {\n const className = this.config().className;\n const drawingInf = this.drawingContext();\n selectElement(drawingInf.sideEffectGroup).selectAll(`.${className}`).remove();\n }\n}\n","const fadeFn = (set, context, strategy) => {\n const {\n mergedEnter,\n mergedExit,\n exitSet,\n completeSet\n } = set;\n\n if (!mergedEnter.length && !mergedExit.length) {\n context.applyInteractionStyle(completeSet, {}, strategy, false);\n } else {\n context.applyInteractionStyle(exitSet[1], {}, strategy, true);\n context.applyInteractionStyle(mergedEnter, {}, strategy, false);\n }\n};\n\nexport const strategies = {\n fade: fadeFn,\n focus: (set, context) => {\n const {\n mergedEnter,\n mergedExit,\n completeSet\n } = set;\n if (!mergedEnter.length && !mergedExit.length) {\n context.applyInteractionStyle(completeSet, {}, 'focus', false);\n } else {\n context.applyInteractionStyle(mergedExit, {}, 'focus', true);\n context.applyInteractionStyle(mergedEnter, {}, 'focus', false);\n }\n },\n highlight: (set, context) => {\n const {\n mergedEnter,\n mergedExit,\n entrySet,\n exitSet,\n completeSet\n } = set;\n if (!mergedEnter.length && !mergedExit.length) {\n context.applyInteractionStyle(completeSet, {}, 'highlight', false);\n } else {\n context.applyInteractionStyle(entrySet[1], {}, 'highlight', true);\n context.applyInteractionStyle(exitSet[1], {}, 'highlight', false);\n }\n }\n};\n","import SurrogateSideEffect from '../surrogate';\nimport { strategies } from './strategy';\n\nexport default class PlotHighlighter extends SurrogateSideEffect {\n constructor (...params) {\n super(...params);\n this._strategy = 'highlight';\n this._strategies = strategies;\n }\n\n static formalName () {\n return 'highlighter';\n }\n\n static target () {\n return 'visual-unit';\n }\n\n apply (selectionSet, payload, options = {}) {\n const strategy = this._strategies[options.strategy || this._strategy];\n\n if (selectionSet.isSourceFieldPresent !== false) {\n strategy(selectionSet, this, options.strategy || this._strategy);\n }\n\n return this;\n }\n}\n","import SurrogateSideEffect from '../surrogate';\n\nexport default class FilterEffect extends SurrogateSideEffect {\n static formalName () {\n return 'filter';\n }\n\n static target () {\n return 'visual-unit';\n }\n\n static mutates () {\n return true;\n }\n\n apply (selectionSet, payload) {\n const context = this.firebolt.context;\n const entryModel = selectionSet.mergedEnter.model;\n if (payload.criteria === null) {\n context.clearCaching().resetData();\n } else {\n context.enableCaching().data(entryModel);\n }\n return this;\n }\n}\n","import { DataModel } from 'muze-utils';\n\nimport { CLASSPREFIX } from '../../enums/constants';\nimport SpawnableSideEffect from '../spawnable';\n\nimport './styles.scss';\n\nexport default class AnchorEffect extends SpawnableSideEffect {\n constructor (...params) {\n super(...params);\n const context = this.firebolt.context;\n this._layers = this.addAnchorLayers(context);\n }\n\n static target () {\n return 'visual-unit';\n }\n\n static defaultConfig () {\n return {\n className: `${CLASSPREFIX}-anchors-group`\n };\n }\n\n static formalName () {\n return 'anchors';\n }\n\n addAnchorLayers (context) {\n const layers = [];\n this.firebolt.context.layers().forEach((layer, idx) => {\n const shouldDrawAnchors = layer.shouldDrawAnchors();\n if (shouldDrawAnchors) {\n const encodingFieldsInf = layer.encodingFieldsInf();\n const layerObj = {\n instances: context.addLayer({\n name: `${layer.alias()}-${this.constructor.formalName()}-${idx}`,\n mark: 'point',\n encoding: {\n x: encodingFieldsInf.xField,\n y: encodingFieldsInf.yField,\n color: {\n field: encodingFieldsInf.colorField\n },\n size: {\n field: encodingFieldsInf.sizeField,\n value: this.defaultSizeValue()\n }\n },\n transform: {\n type: 'identity'\n },\n transition: this.getTransitionConfig(),\n calculateDomain: false,\n source: dt => dt.select(() => false, {\n saveChild: false\n }),\n interactive: false,\n render: false\n }),\n linkedLayer: layer\n };\n\n layers.push(layerObj);\n }\n });\n return layers;\n }\n\n getTransitionConfig () {\n return {\n disabled: true\n };\n }\n\n /**\n * Returns the default area value of the anchor point.\n * @return { number } Default area value of anchor.\n */\n defaultSizeValue () {\n return 100;\n }\n\n apply (selectionSet) {\n const self = this;\n const dataModel = selectionSet.mergedEnter.model;\n if (selectionSet.isSourceFieldPresent !== false) {\n const drawingInf = this.drawingContext();\n const sideEffectGroup = drawingInf.sideEffectGroup;\n const className = `${this.config().className}`;\n const layers = this._layers;\n const parentGroup = this.createElement(sideEffectGroup, 'g', [1], `${className}-container`);\n const anchorGroups = this.createElement(parentGroup, 'g', layers);\n anchorGroups.each(function (layer) {\n const instances = layer.instances;\n const elems = self.createElement(this, 'g', instances, className);\n const linkedLayer = layer.linkedLayer;\n const [transformedData, schema] = linkedLayer.getTransformedDataFromIdentifiers(dataModel);\n const transformedDataModel = new DataModel(transformedData, schema);\n elems.each(function (d, i) {\n instances[i].data(transformedDataModel).mount(this);\n });\n });\n }\n return this;\n }\n}\n","import AnchorEffect from './anchors';\nimport { CLASSPREFIX } from '../enums/constants';\n\nexport default class PersistentAnchors extends AnchorEffect {\n static formalName () {\n return 'persistent-anchors';\n }\n\n static defaultConfig () {\n return {\n className: `${CLASSPREFIX}-persistent-anchors`\n };\n }\n\n getTransitionConfig () {\n return {\n disabled: true\n };\n }\n}\n","import AnchorEffect from './anchors';\nimport { CLASSPREFIX } from '../enums/constants';\n\nexport default class BrushAnchors extends AnchorEffect {\n static formalName () {\n return 'brush-anchors';\n }\n\n static defaultConfig () {\n return {\n className: `${CLASSPREFIX}-brush-anchors`\n };\n }\n\n getTransitionConfig () {\n return {\n disabled: true\n };\n }\n}\n","import * as BEHAVIOURS from './enums/behaviours';\n\nexport const behaviourEffectMap = {\n [BEHAVIOURS.BRUSH]: ['selectionBox', {\n name: 'highlighter',\n options: {\n strategy: 'fade'\n }\n }, 'brush-anchors'],\n [`${BEHAVIOURS.BRUSH},${BEHAVIOURS.SELECT}`]: [{\n name: 'tooltip',\n options: {\n strategy: 'showSelectedItems',\n order: 0,\n filter: context => context.config().mode === 'fragmented'\n }\n }],\n [BEHAVIOURS.HIGHLIGHT]: [{\n name: 'highlighter',\n options: {\n strategy: 'highlight'\n }\n }, 'crossline', {\n name: 'tooltip',\n options: {\n order: 9999\n }\n }, 'anchors'],\n [BEHAVIOURS.FILTER]: ['filter'],\n [BEHAVIOURS.SELECT]: [{\n name: 'highlighter',\n options: {\n strategy: 'focus'\n }\n }, 'persistent-anchors']\n};\n","export const CLASSPREFIX = 'muze';\nexport const STACK = 'stack';\nexport const GROUP = 'group';\nexport const IDENTITY = 'identity';\nexport const ANGLE = 'angle';\nexport const RADIUS = 'radius';\nexport const SIZE = 'size';\nexport const COLOR = 'color';\nexport const SHAPE = 'shape';\nexport const OUTER_RADIUS_VALUE = 'outerRadiusValue';\nexport const TEXT_ANCHOR_MIDDLE = 'middle';\nexport const ENCODING = {\n X: 'x',\n Y: 'y',\n X0: 'x0',\n Y0: 'y0'\n};\n\nexport const ASCENDING = 'asc';\n\nexport const AREA_LAYER = 'area';\nexport const ARC_LAYER = 'arc';\nexport const LINE_LAYER = 'line';\nexport const TEXT_LAYER = 'text';\nexport const POINT_LAYER = 'point';\nexport const BAR_LAYER = 'bar';\nexport const TICK_LAYER = 'tick';\nexport const SIMPLE_LAYER = 'simple';\nexport const BASE_LAYER = 'base';\n","import { CLASSPREFIX, STACK } from '../../enums/constants';\n\nexport const defaultConfig = {\n classPrefix: CLASSPREFIX,\n defClassName: 'layer-area',\n className: '',\n interpolate: 'linear',\n transform: {\n type: STACK\n },\n interaction: {\n\n },\n nearestPointThreshold: 10,\n encoding: {\n color: {},\n x: {},\n y: {},\n y0: {},\n strokeOpacity: {\n value: 1\n }\n },\n transition: {\n effect: 'cubic',\n duration: 1000\n },\n connectNullData: false\n};\n","import { ERROR_MSG } from 'muze-utils';\n\n/**\n * This is an interface class which any new layer class has to extend.\n *\n * @example\n * class BarLayer extends BaseLayer {\n * update (params) {\n * // super.update(params);\n * // Update the bar layer\n * }\n * }\n * @class\n */\nexport default class SimpleLayer {\n\n formalName () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Sets or gets the dependencies.\n * @param {Object} dependencies Dependencies needed by layer\n * @return {BaseLayer} Instance of base layer.\n */\n dependencies () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Returns the config of the layer\n *\n * @param {Object} config Configuration of layer\n * @return {Object} configuration of layer\n */\n config () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Acts as a getter or setter function\n * When setter\n * Returns the datamodel of the layer\n * @param { DataModel } dataModel instance of DataModel\n * @return { DataModel } DataModel instance of the layer\n */\n data () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Returns a serialized schema of the layer\n * @return {Object} Serialized schema\n */\n serialize () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Returns the unique identifier of this layer\n * @return {string} id of the layer\n */\n id () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n /*\n * This method resolves the x, y, x0 and y0 values from the transformed data.\n * It also checks the type of transformed data for example, if it is a stacked data\n * then it fetches the y and y0 values from the stacked data.\n * @param {Array.} transformedData transformed data\n * @param {Object} fieldMap field definitions\n * @param {string} transformType type of transformed data - stack, group or identity.\n * @return {Array.} Normalized data\n * @private\n */\n normalizeTransformedData () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Gets the transform method from transform factory based on type of transform. It then calls the\n * transform method with the data and passes the configuration parameters of transform such as\n * groupBy, value field, etc.\n *\n * @param {DataModel} dataModel Instance of dataModel\n * @param {Object} config configuration for transforming data\n * @return {Array.} Transformed data.\n * @private\n */\n getTransformedData () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Calculates the domain from the data.\n * It checks the type of field and calculates the domain based on that. For example, if it\n * is a quantitative or temporal field, then it calculates the min and max from the data or\n * if it is a nominal field then it gets all the values from the data of that field.\n * @param {Array} data DataArray\n * @return {Array} Domain values array.\n */\n _calculateDomainFromData () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Returns the domain for the axis.\n *\n * @param {string} encodingType type of encoding x, y, color, etc.\n * @return {Object} Axis domains\n */\n getDomain () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Abstract method for getting nearest point\n * @return {BaseLayer} Instance of base layer\n */\n getNearestPoint () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Abstract method for highlighting points\n * @return {BaseLayer} Instance of base layer\n */\n highlightPoint () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Abstract method for deselecting points\n * @return {BaseLayer} Instance of base layer\n */\n dehighlightPoint () {\n return this;\n }\n\n linkLayerStore () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Sets the container element for the layer to be renderered.\n * @param {SVGElement} mountPoint SVG element or group element.\n */\n mount () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n render () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n}\n","export const DATA = 'data';\nexport const CONFIG = 'config';\nexport const MEASUREMENT = 'measurement';\nexport const AXES = 'axes';\nexport const NORMALIZED_DATA = 'normalizedData';\nexport const TRANSFORMED_DATA = 'transformedData';\nexport const DOMAIN = 'domain';\nexport const MOUNT = 'mount';\nexport const FIELDMAP = 'fieldMap';\nexport const DATA_UPDATED = 'dataUpdated';\n","/**\n * @module Axis\n * This file declares a class that is used to render an axis to add meaning to\n * plots.\n */\nimport { Symbols } from 'muze-utils';\nimport * as AxisOrientation from '../enums/axis-orientation';\n\n/**\n * @module Axis\n * This file exports constants that are used to reference axis orientations\n * in a consistent manner.\n */\nexport const BOTTOM = 'bottom';\nexport const TOP = 'top';\nexport const LEFT = 'left';\nexport const RIGHT = 'right';\n\n/**\n * This object is used to associate the axis orientation with the d3 class\n * used to represent that axis.\n */\nexport const axisOrientationMap = {\n [AxisOrientation.LEFT]: Symbols.axisLeft,\n [AxisOrientation.BOTTOM]: Symbols.axisBottom,\n [AxisOrientation.RIGHT]: Symbols.axisRight,\n [AxisOrientation.TOP]: Symbols.axisTop\n};\n","/**\n * @module axis\n * This file exports constants used to reference scale type\n * consistently throughout the project.\n */\nexport const LINEAR = 'linear';\nexport const BAND = 'band';\nexport const TIME = 'temporal';\nexport const COLOR = 'color';\nexport const ORDINAL = 'ordinal';\nexport const QUANTIZE = 'quantize';\nexport const QUANTILE = 'quantile';\nexport const LOG = 'log';\nexport const POW = 'pow';\nexport const IDENTITY = 'identity';\nexport const SEQUENTIAL = 'sequential';\nexport const THRESHOLD = 'threshold';\n","export const CLASSPREFIX = 'muze';\n\nexport const CONTINOUS = 'continous';\nexport const DISCRETE = 'discrete';\nexport const SEQUENTIAL = 'sequential';\nexport const ORDINAL = 'ordinal';\nexport const LINEAR = 'linear';\nexport const THRESHOLD = 'threshold';\nexport const QUANTIZE = 'quantize';\nexport const QUANTILE = 'quantile';\n\nexport const COLOR = 'color';\nexport const SHAPE = 'shape';\nexport const SIZE = 'size';\n\nexport const DOMAIN = 'domain';\nexport const BAND = 'band';\nexport const HIDDEN = 'hidden';\nexport const NUMBER = 'number';\nexport const BOTTOM = 'bottom';\nexport const TOP = 'top';\n\nexport const RGB = 'rgb';\nexport const HEX = 'hex';\nexport const HSLA = 'hsla';\nexport const HSL = 'hsl';\n\n","import { scales, colorSchemes } from 'muze-utils';\n\nimport {\n SEQUENTIAL,\n ORDINAL,\n LINEAR,\n CONTINOUS,\n THRESHOLD,\n QUANTIZE\n} from './enums/constants';\n\nimport * as ScaleType from './enums/scale-type';\n\nconst {\n scaleLinear,\n scaleThreshold,\n scaleLog,\n scalePow,\n scaleIdentity,\n scaleOrdinal,\n scaleSequential,\n scaleQuantize,\n scaleQuantile,\n schemeCategory10,\n schemeCategory20,\n schemeCategory20b,\n scaleBand,\n scaleTime\n} = scales;\nexport const scaleMap = {\n [ScaleType.LINEAR]: scaleLinear,\n [ScaleType.BAND]: scaleBand,\n [ScaleType.QUANTIZE]: scaleQuantize,\n [ScaleType.QUANTILE]: scaleQuantile,\n [ScaleType.THRESHOLD]: scaleThreshold,\n [ScaleType.SEQUENTIAL]: scaleSequential,\n [ScaleType.LOG]: scaleLog,\n [ScaleType.POW]: scalePow,\n [ScaleType.IDENTITY]: scaleIdentity,\n [ScaleType.TIME]: scaleTime,\n [ScaleType.COLOR]: scaleLinear,\n [ScaleType.ORDINAL]: scaleOrdinal\n};\nexport const SCHEMES = {\n SCHEME1: schemeCategory10,\n SCHEME2: schemeCategory20,\n SCHEME3: schemeCategory20b\n};\n\n/**\n * Accepts a scheme in a string format and returns the scale from d3-scale-chromatic\n *\n * @export\n * @param {string} scheme a string representing the kind of scheme for the color axis\n * @return {Object} The corresponding scale from a scheme type from d3 chromatic scale\n */\nexport function getScheme (scheme) {\n if (scheme[0] === 'i') {\n return scaleSequential(colorSchemes[scheme]);\n }\n return scaleOrdinal(colorSchemes[scheme]);\n}\n\n/**\n *\n *\n * @export\n * @param {*} scheme\n * @returns\n */\nexport function getSchemeType (scheme) {\n let schemeType = '';\n if (scheme && typeof (scheme) === 'string') {\n schemeType = scheme[0] === 'i' ? SEQUENTIAL : ORDINAL;\n } else {\n schemeType = ORDINAL;\n }\n return schemeType;\n}\n\n/**\n * This function is used to create a scale that is assigned to\n * an instance of axis.\n *\n * @export\n * @param {Object} params the input parameters to create a Scale object\n * @param {string} params.type the type of scale\n * @param {Array} params.range the range of scale\n * @return {Object} instance of scale\n */\nexport function createScale (params) {\n if (!params.type || !scaleMap[params.type]) {\n throw new Error(`${params.type} is not a valid scale type`);\n }\n if (!Array.isArray(params.range)) {\n throw new Error('range parameter must be an array');\n }\n let scaleFactory = null;\n const range = params.range;\n // @todo: do it using scale decorator\n if (params.type === LINEAR && params.interpolator) {\n scaleFactory = scaleMap[params.interpolator];\n if (params.interpolator === ScaleType.POW) {\n return scaleFactory().range(range).exponent(params.exponent);\n } else if (params.interpolator === ScaleType.LOG) {\n return scaleFactory().range(range).base([params.base]);\n }\n } else {\n scaleFactory = scaleMap[params.type];\n }\n\n if (params.type === QUANTIZE) {\n scaleFactory().nice();\n }\n return scaleFactory().range(range);\n}\n\n/**\n * This method is used to update the range of a scale\n * so that the core module can remain agnostic of the d3\n * scale api.\n *\n * @export\n * @param {Scale} scale Instance of d3 Scale.\n * @param {Array} range new range of the scale.\n * @return {Scale} Updated scale.\n */\nexport function updateScaleRange (scale, range) {\n return scale.range(range);\n}\n\n/**\n *\n *\n * @export\n * @param {*} domainType\n * @param {*} rangeType\n * @param {*} steps\n * @returns\n */\nexport function getScaleType (domainType, rangeType, steps) {\n if (rangeType === CONTINOUS) {\n return LINEAR;\n }\n if (domainType === CONTINOUS) {\n if (steps instanceof Array) {\n return THRESHOLD;\n }\n return QUANTIZE;\n }\n return ORDINAL;\n}\n","import { getUniqueId } from 'muze-utils';\nimport { CLASSPREFIX } from '../enums/constants';\n\n/**\n *\n *\n */\nexport const defaultConfig = {\n id: getUniqueId(),\n axisName: {\n defClassName: 'axis-name'\n },\n axisNamePadding: 12,\n base: 10,\n classPrefix: CLASSPREFIX,\n className: `${CLASSPREFIX}-axis`,\n exponent: 1,\n interpolator: 'linear',\n fixedBaseline: true,\n labels: {\n rotation: 0,\n smartTicks: false\n },\n orientation: 'left',\n maxHeight: 50, // @todo: height and width wont be hardcoded\n maxWidth: 40,\n numberFormat: val => val,\n padding: 0.3,\n nice: true,\n numberOfTicks: 10,\n rotate: false,\n show: true,\n showAxisName: true,\n showInnerTicks: null,\n showOuterTicks: null,\n style: {},\n type: 'linear',\n tickFormat: null,\n tickValues: null,\n xOffset: undefined,\n yOffset: undefined\n};\n\n","/**\n * This file exports functionality that is used to render axis.\n */\nimport { selectElement, makeElement, angleToRadian } from 'muze-utils';\nimport * as AxisOrientation from './enums/axis-orientation';\nimport { LINEAR, HIDDEN, BOTTOM, TOP } from './enums/constants';\n\n/**\n *\n *\n * @param {*} instance\n * @param {*} container\n * @param {*} labelManager\n * @param {*} config\n */\nconst rotateAxis = (instance, tickText, labelManager, config) => {\n const axis = instance.axis();\n const scale = instance.scale();\n const {\n orientation,\n labels,\n fixedBaseline,\n type\n } = config;\n let { rotation } = labels;\n\n const tickSize = instance.getTickSize();\n\n tickText.each(function (datum, index) {\n let yShift;\n let xShift;\n const tickFormatter = axis.tickFormat() ? axis.tickFormat : scale.tickFormat;\n const temp = tickFormatter ? tickFormatter()(datum) : datum;\n\n datum = temp.toString();\n\n const tickLabelDim = labelManager.getOriSize(datum);\n const width = tickLabelDim.width * 0.5;\n const height = tickLabelDim.height * 0.5;\n\n if (rotation < 0) {\n rotation = 360 + rotation;\n }\n\n const quadrant = 4 - Math.floor(rotation / 90);\n const rotationNormalizer = ((quadrant % 2 === 0) ? rotation : 180 * Math.ceil(rotation / 180) - rotation) % 180;\n\n yShift = Math.sqrt(height ** 2 + width ** 2) * Math.sin(angleToRadian(rotationNormalizer));\n\n if ((quadrant === 3 || quadrant === 2) && !(rotationNormalizer > 67.5 && rotationNormalizer <= 90)) {\n yShift += height * 2;\n }\n xShift = width;\n\n if (rotation === 90) {\n xShift = height;\n } else if (rotation === 270) {\n xShift = -height;\n } else {\n xShift = 0;\n }\n\n if (orientation === AxisOrientation.TOP) {\n xShift = (index === 0 && fixedBaseline && type === LINEAR) ? xShift + xShift / 2 : xShift;\n selectElement(this)\n .attr('transform', `translate(${-xShift + tickSize} \n ${-yShift - tickSize}) rotate(${rotation})`);\n } else {\n xShift = (index === 0 && fixedBaseline && type === LINEAR) ? xShift - xShift / 2 : xShift;\n selectElement(this)\n .attr('transform', `translate(${xShift - tickSize} \n ${yShift + tickSize}) rotate(${rotation})`);\n }\n });\n return tickText;\n};\n\n/**\n *\n *\n * @param {*} tickText\n * @param {*} axisInstance\n */\nconst changeTickOrientation = (selectContainer, axisInstance, tickSize) => {\n const {\n _smartTicks\n } = axisInstance;\n const config = axisInstance.config();\n const labelManager = axisInstance.dependencies().labelManager;\n const {\n labels,\n orientation\n } = config;\n const {\n rotation,\n smartTicks: isSmartTicks\n } = labels;\n\n const tickText = selectContainer.selectAll('.tick text');\n tickText.selectAll('tspan').remove();\n\n // rotate labels if not enough space is available\n if (rotation !== 0 && isSmartTicks === false && (orientation === TOP || orientation === BOTTOM)) {\n rotateAxis(axisInstance, tickText, labelManager, config);\n } else if (rotation === 0 && isSmartTicks === false) {\n tickText.attr('transform', '');\n } else {\n tickText.attr('y', 0)\n .attr('x', 0)\n .text('');\n const tspan = makeElement(tickText, 'tspan', (d, i) => _smartTicks[i].lines, 'smart-text');\n tspan.attr('dy', '0')\n .style('opacity', '0')\n .transition()\n .duration(1000)\n .attr('dy', (d, i) => {\n if (orientation === BOTTOM || i !== 0) {\n return _smartTicks[i].oriTextHeight;\n }\n return -_smartTicks[i].oriTextHeight * (_smartTicks[i].lines.length - 1) - tickSize;\n })\n .style('opacity', 1)\n .attr('x', 0)\n .text(e => e);\n }\n\n return tickText;\n};\n\nconst setFixedBaseline = (axisInstance) => {\n const {\n fixedBaseline\n } = axisInstance.config();\n if (fixedBaseline) {\n axisInstance.setFixedBaseline();\n }\n};\n\n/**\n *\n *\n * @param {*} textNode\n * @param {*} orientation\n * @param {*} measures\n */\nconst setAxisNamePos = (textNode, orientation, measures) => {\n const {\n axisNameHeight,\n yOffset,\n labelOffset,\n availableSpace\n } = measures;\n switch (orientation) {\n case AxisOrientation.LEFT:\n textNode.attr('transform',\n `translate(${-(availableSpace.width - axisNameHeight)},${yOffset + labelOffset})rotate(-90)`);\n break;\n case AxisOrientation.RIGHT:\n textNode.attr('transform',\n `translate(${(availableSpace.width - axisNameHeight)},${yOffset + labelOffset})rotate(90)`);\n break;\n case AxisOrientation.TOP:\n textNode.attr('transform',\n `translate(${availableSpace.width / 2},${-availableSpace.height + axisNameHeight})`);\n break;\n case AxisOrientation.BOTTOM:\n textNode.attr('transform',\n `translate(${availableSpace.width / 2},${availableSpace.height - axisNameHeight / 2})`);\n break;\n default:\n }\n return textNode;\n};\n\n/**\n * This method is used to render the axis inside an\n * svg container.\n *\n * @export\n * @param {Object} axisInstance the nput object required to render axis\n * @param {string} axisInstance.orientation the orientation of axis\n * @param {Object} axisInstance.scale instance of d3 scale\n * @param {SVGElement} axisInstance.container the container in which to render\n */\nexport function renderAxis (axisInstance) {\n const config = axisInstance.config();\n const labelManager = axisInstance.dependencies().labelManager;\n const mount = axisInstance.mount();\n const range = axisInstance.range();\n const axis = axisInstance.axis();\n const scale = axisInstance.scale();\n const {\n _axisNameStyle,\n _tickLabelStyle,\n formatter,\n tickValues\n } = axisInstance;\n const {\n orientation,\n name,\n labels,\n xOffset,\n yOffset,\n axisNamePadding,\n className,\n showAxisName,\n show,\n id,\n interpolator,\n classPrefix\n } = config;\n\n if (!show) {\n return;\n }\n\n const tickSize = axisInstance.getTickSize();\n\n const selectContainer = makeElement(selectElement(mount), 'g', [axisInstance], `${className}`, {},\n key => key.config().id);\n\n // Set style for tick labels\n labelManager.setStyle(_tickLabelStyle);\n\n // @to-do: Need to write a configuration override using decorator pattern\n if (interpolator === 'linear') {\n // Set ticks for the axis\n axisInstance.setTickValues();\n }\n\n const labelFunc = scale.ticks || scale.quantile || scale.domain;\n\n formatter && axis.tickFormat(formatter(tickValues || axis.tickValues() || labelFunc()));\n\n // Get range(length of range)\n const availableSpace = Math.abs(range[0] - range[1]);\n\n // Get width and height taken by axis labels\n const labelProps = axisInstance.axisDimensions().tickLabelDim;\n\n // Draw axis ticks\n selectContainer.attr('transform', `translate(${xOffset},${yOffset})`);\n setFixedBaseline(axisInstance);\n if (labels.smartTicks === false) {\n selectContainer.transition()\n .duration(1000).call(axis);\n } else {\n selectContainer.call(axis);\n }\n selectContainer.selectAll('.tick').classed(`${classPrefix}-ticks`, true);\n selectContainer.selectAll('.tick line').classed(`${classPrefix}-tick-lines`, true);\n\n // Set classes for ticks\n const tickText = selectContainer.selectAll('.tick text');\n tickText.classed(`${classPrefix}-ticks`, true)\n .classed(`${classPrefix}-ticks-${id}`, true);\n changeTickOrientation(selectContainer, axisInstance, tickSize);\n\n // Create axis name\n const textNode = makeElement(selectContainer, 'text', [name], `${classPrefix}-axis-name`)\n .attr('text-anchor', 'middle')\n .classed(`${classPrefix}-axis-name-${id}`, true)\n .text(d => d);\n\n // Hide axis name if show is off\n textNode.classed(HIDDEN, !showAxisName);\n\n // render labels based on orientation of axis\n const labelOffset = availableSpace / 2;\n\n // Set style for axis name\n labelManager.setStyle(_axisNameStyle);\n const axisNameSpace = labelManager.getOriSize(name);\n const measures = {\n labelProps,\n tickSize,\n axisNamePadding,\n axisNameHeight: axisNameSpace.height,\n axisNameWidth: axisNameSpace.width,\n yOffset,\n xOffset,\n labelOffset,\n availableSpace: axisInstance.availableSpace()\n };\n // Set position for axis name\n setAxisNamePos(textNode, orientation, measures);\n}\n","import { TOP, LEFT, BOTTOM } from '../enums/axis-orientation';\nimport { LOG } from '../enums/scale-type';\n\nexport const getNumberOfTicks = (availableSpace, labelDim, axis, axisInstance) => {\n const ticks = axis.scale().ticks();\n const { numberOfTicks } = axisInstance.config();\n const tickLength = ticks.length;\n let numberOfValues = tickLength;\n\n if (tickLength * (labelDim * 1.5) > availableSpace) {\n numberOfValues = Math.floor(availableSpace / (labelDim * 1.5));\n }\n\n numberOfValues = Math.min(numberOfTicks, Math.max(1, numberOfValues));\n return axis.scale().ticks(numberOfValues);\n};\n\nexport const sanitizeDomain = (domain, context) => {\n const interpolator = context.config().interpolator;\n // @todo: Get from scale decorator\n if (interpolator === LOG && domain[0] >= 0) {\n return [Math.max(1, domain[0]), Math.max(1, domain[1])];\n }\n return domain;\n};\n\nexport const getTickFormatter = (tickFormat, numberFormat) => {\n if (tickFormat) {\n return ticks => (val, i) => tickFormat(numberFormat(val), i, ticks);\n }\n return () => val => numberFormat(val);\n};\n\n/**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\nexport const getTickLabelInfo = (context) => {\n let largestLabel = '';\n let labelProps;\n let smartTick = {};\n let axisTickLabels;\n const scale = context.scale();\n const allLabelLengths = [];\n const { tickFormat, tickValues, numberFormat } = context.config();\n const labelFunc = scale.ticks || scale.quantile || scale.domain;\n // set the style on the shared label manager instance\n const { labelManager } = context.dependencies();\n\n labelManager.setStyle(context._tickLabelStyle);\n // get the values along the domain\n\n axisTickLabels = tickValues || labelFunc();\n // Get the tick labels\n axisTickLabels = axisTickLabels.map((originalLabel, i) => {\n const formattedLabel = numberFormat(originalLabel);\n\n // get formats of tick if any\n const label = tickFormat ? tickFormat(formattedLabel, i, axisTickLabels) : (scale.tickFormat ?\n numberFormat(scale.tickFormat()(originalLabel)) : formattedLabel);\n\n // convert to string for quant values\n const temp = label.toString();\n // Get spaces for all labels\n allLabelLengths.push(labelManager.getOriSize(temp));\n // Getting largest label\n if (temp.length > largestLabel.length) {\n largestLabel = temp;\n smartTick = context.smartTicks() ? context.smartTicks()[i] : {};\n labelProps = allLabelLengths[i];\n }\n return label;\n });\n\n labelProps = labelManager.getOriSize(largestLabel);\n\n return { largestLabel, largestLabelDim: labelProps, axisTickLabels, allLabelLengths, smartTick };\n};\n\n/**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\nexport const computeAxisDimensions = (context) => {\n let tickLabelDim = {};\n const {\n name,\n labels,\n tickValues\n } = context.config();\n const angle = ((labels.smartTicks) ? 0 : labels.rotation) * Math.PI / 180;\n const { labelManager } = context.dependencies();\n const {\n largestLabelDim,\n axisTickLabels,\n smartTick\n } = getTickLabelInfo(context);\n const { height: labelHeight, width: labelWidth } = largestLabelDim;\n // get the domain of axis\n const domain = context.domain();\n\n if (domain.length === 0) {\n return null;\n }\n if (context._rotationLock === false) {\n context.setRotationConfig(tickValues || axisTickLabels, largestLabelDim.width);\n context._rotationLock = false;\n }\n if (labels.smartTicks) {\n tickLabelDim = smartTick;\n } else {\n tickLabelDim = {\n width: Math.abs(labelHeight * Math.sin(angle)) + Math.abs(labelWidth * Math.cos(angle)),\n height: Math.abs(labelWidth * Math.sin(angle)) + Math.abs(labelHeight * Math.cos(angle))\n };\n }\n\n labelManager.setStyle(context._axisNameStyle);\n return {\n tickSize: context.getTickSize(),\n tickLabelDim,\n axisLabelDim: labelManager.getOriSize(name),\n largestLabelDim,\n axisTickLabels\n };\n};\n\n/**\n*\n*\n* @memberof SimpleAxis\n*/\nexport const setOffset = (context) => {\n let x = 0;\n let y = 0;\n const logicalSpace = context.logicalSpace();\n const config = context.config();\n const {\n orientation,\n xOffset,\n yOffset\n } = config;\n if (orientation === LEFT) {\n x = xOffset === undefined ? logicalSpace.width : xOffset;\n }\n if (orientation === TOP) {\n y = yOffset === undefined ? logicalSpace.height : yOffset;\n }\n context.config({ xOffset: x, yOffset: y });\n};\n\n/**\n *\n *\n * @param {*} timeDiff\n * @param {*} range\n * @param {*} domain\n * @returns\n */\nconst getAxisOffset = (timeDiff, range, domain) => {\n const pvr = Math.abs(range[1] - range[0]) / (domain[1] - domain[0]);\n const width = (pvr * timeDiff);\n const avWidth = (range[1] - range[0]);\n const bars = avWidth / width;\n const barWidth = avWidth / (bars + 1);\n const diff = avWidth - barWidth * bars;\n\n return diff / 2;\n};\n\nexport const adjustRange = (minDiff, range, domain, orientation) => {\n const diff = getAxisOffset(minDiff, range, domain);\n\n if (orientation === TOP || orientation === BOTTOM) {\n range[0] += diff;\n range[1] -= diff;\n } else {\n range[0] -= diff;\n range[1] += diff;\n }\n return range;\n};\n\n /**\n * Listener attached to the axis on change of parameters.\n *\n * @param {Function} callback to be excuted on change of domain range etc\n * @memberof SimpleAxis\n */\nexport const registerChangeListeners = (context) => {\n const store = context.store();\n\n store.model.next(['domain', 'range', 'mount', 'config'], (...params) => {\n context.render();\n context._domainLock = false;\n context._eventList.forEach((e) => {\n e.action instanceof Function && e.action(...params);\n });\n }, true);\n return context;\n};\n\n/**\n *\n *\n * @param {*} axisDimensions\n * @param {*} config\n * @param {*} range\n * @returns\n */\nexport const getHorizontalAxisSpace = (context, axisDimensions, config, range) => {\n let width;\n let height;\n const {\n tickSize,\n tickLabelDim,\n axisLabelDim\n } = axisDimensions;\n const {\n axisNamePadding,\n showAxisName,\n tickValues\n } = config;\n const domain = context.domain();\n const { height: axisDimHeight } = axisLabelDim;\n const { height: tickDimHeight, width: tickDimWidth } = tickLabelDim;\n\n width = range && range.length ? range[1] - range[0] : 0;\n\n height = 0;\n if (tickValues) {\n const minTickDiff = context.getMinTickDifference();\n const [min, max] = [Math.min(...tickValues, ...domain), Math.max(...tickValues, ...domain)];\n\n width = ((max - min) / Math.abs(minTickDiff)) * (tickDimWidth + context._minTickDistance.width);\n }\n if (!width || width === 0) {\n height = Math.max(tickDimWidth, tickDimHeight);\n } else {\n height = tickDimHeight;\n }\n height += (showAxisName ? (axisDimHeight + axisNamePadding) : 0) + tickSize;\n return {\n width,\n height\n };\n};\n\n/**\n *\n *\n * @param {*} axisDimensions\n * @param {*} config\n * @param {*} range\n * @returns\n */\nexport const getVerticalAxisSpace = (context, axisDimensions, config) => {\n let height;\n let width;\n const {\n tickSize,\n tickLabelDim,\n axisLabelDim\n } = axisDimensions;\n const {\n axisNamePadding,\n showAxisName,\n tickValues\n } = config;\n const domain = context.domain();\n const { height: axisDimHeight } = axisLabelDim;\n const { height: tickDimHeight, width: tickDimWidth } = tickLabelDim;\n\n height = 0;\n width = tickDimWidth;\n if (tickValues) {\n const minTickDiff = context.getMinTickDifference();\n const [min, max] = [Math.min(...tickValues, ...domain), Math.max(...tickValues, ...domain)];\n\n height = ((max - min) / Math.abs(minTickDiff)) * (tickDimHeight);\n }\n width += (showAxisName ? axisDimHeight : 0) + tickSize + axisNamePadding;\n\n return {\n height,\n width\n };\n};\n\n /**\n * Calculates the logical space of the axis\n * @return {Object} Width and height occupied by the axis.\n */\nexport const calculateBandSpace = (context) => {\n const range = context.range();\n const config = context.config();\n const {\n orientation,\n show\n } = config;\n const axisDimensions = context.getAxisDimensions();\n const {\n largestLabelDim,\n axisTickLabels\n } = axisDimensions;\n const { height: largestDimHeight, width: largestDimWidth } = largestLabelDim;\n\n if (orientation === TOP || orientation === BOTTOM) {\n let { width, height } = getHorizontalAxisSpace(context, axisDimensions, config, range);\n if (!width || width === 0) {\n width = axisTickLabels.length * (Math.min(largestDimWidth + context._minTickDistance.width,\n largestDimHeight + context._minTickDistance.width));\n }\n if (show === false) {\n height = 0;\n }\n return {\n width,\n height\n };\n }\n\n let { width, height } = getVerticalAxisSpace(context, axisDimensions, config, range);\n\n if (!height || height === 0) {\n height = axisTickLabels.length * (largestDimHeight + largestDimHeight / 2) + largestDimHeight;\n }\n if (show === false) {\n width = 0;\n }\n return {\n width,\n height\n };\n};\n\n/**\n * Calculates the logical space of the axis\n * @return {Object} Width and height occupied by the axis.\n */\nexport const calculateContinousSpace = (context) => {\n const range = context.range();\n const config = context.config();\n const axisDimensions = context.getAxisDimensions();\n\n const {\n orientation,\n show,\n showAxisName\n } = config;\n const {\n axisLabelDim\n } = axisDimensions;\n\n if (show === false) {\n return {\n width: 0,\n height: 0\n };\n }\n\n const { width: axisDimWidth } = axisLabelDim;\n\n if (orientation === TOP || orientation === BOTTOM) {\n const { width, height } = getHorizontalAxisSpace(context, axisDimensions, config);\n const axisWidth = Math.max(width, axisDimWidth);\n\n return {\n width: axisWidth,\n height\n };\n }\n\n const { width, height } = getVerticalAxisSpace(context, axisDimensions, config, range);\n\n const effHeight = Math.max(height, showAxisName ? axisDimWidth : 0);\n\n return {\n width,\n height: effHeight\n };\n};\n\n","import { mergeRecursive } from 'muze-utils';\n\nexport const PROPS = {\n availableSpace: {},\n axisDimensions: {},\n config: {\n sanitization: (context, value) => {\n if (value.labels && value.labels.rotation) {\n context._rotationLock = true;\n }\n value = mergeRecursive(context._config || {}, value);\n value.axisNamePadding = Math.max(value.axisNamePadding, 0);\n context.axis(context.createAxis(value));\n context.store().commit('config', value);\n return value;\n }\n },\n logicalSpace: {},\n mount: {\n sanitization: (context, value) => {\n context.store().commit('mount', value);\n return value;\n }\n },\n range: {\n sanitization: (context, value) => {\n context.scale().range(value);\n context.logicalSpace(null);\n context.store().commit('range', value);\n return value;\n }\n },\n\n smartTicks: {},\n store: {},\n tickSize: {}\n};\n","import {\n Store,\n mergeRecursive,\n getSmartComputedStyle,\n selectElement,\n generateGetterSetters,\n getUniqueId\n} from 'muze-utils';\nimport { createScale } from '../scale-creator';\nimport { axisOrientationMap, BOTTOM, TOP } from '../enums/axis-orientation';\nimport { defaultConfig } from './default-config';\nimport { renderAxis } from '../axis-renderer';\nimport { DOMAIN, BAND } from '../enums/constants';\nimport {\n computeAxisDimensions,\n setOffset,\n registerChangeListeners,\n calculateContinousSpace\n} from './helper';\nimport { PROPS } from './props';\n\nexport default class SimpleAxis {\n\n /**\n * Creates an instance of SimpleAxis.\n * @memberof SimpleAxis\n */\n constructor (config, dependencies) {\n this._id = getUniqueId();\n\n this._dependencies = dependencies;\n this._mount = null;\n this._range = [];\n this._domain = [];\n this._domainLock = false;\n this._rotationLock = false;\n this._axisDimensions = {};\n this._eventList = [];\n\n const defCon = mergeRecursive({}, this.constructor.defaultConfig());\n const simpleConfig = mergeRecursive(defCon, config);\n\n const bodyElem = selectElement('body');\n const classPrefix = simpleConfig.classPrefix;\n this._tickLabelStyle = getSmartComputedStyle(bodyElem, `${classPrefix}-ticks`);\n this._axisNameStyle = getSmartComputedStyle(bodyElem, `${classPrefix}-axis-name`);\n dependencies.labelManager.setStyle(this._tickLabelStyle);\n this._minTickDistance = dependencies.labelManager.getOriSize('ww');\n\n generateGetterSetters(this, PROPS);\n this.store(new Store({\n domain: this.domain(),\n range: this.range(),\n config: simpleConfig,\n mount: this.mount()\n }));\n this.config(simpleConfig);\n\n this._scale = this.createScale(this._config);\n this._axis = this.createAxis(this._config);\n\n registerChangeListeners(this);\n }\n\n /**\n * Returns the default configuration of simple axis\n * @return {Object} default configurations\n */\n static defaultConfig () {\n return defaultConfig;\n }\n\n /**\n * Sets a fixed baseline for the first ticks so that they can render effectively within\n * the given area\n *\n * @param {*} tickText\n * @param {*} config\n * @param {*} labelManager\n */\n setFixedBaseline () {\n return this;\n }\n\n /**\n *\n *\n * @readonly\n * @memberof SimpleAxis\n */\n scale (...params) {\n if (params.length) {\n this._scale = params[0];\n return this;\n }\n return this._scale;\n }\n\n /**\n *\n *\n * @readonly\n * @memberof SimpleAxis\n */\n axis (...params) {\n if (params.length) {\n this._axis = params[0];\n return this;\n }\n return this._axis;\n }\n\n /**\n *\n *\n * @param {*} d\n * @returns\n * @memberof SimpleAxis\n */\n domain (...domain) {\n if (domain.length) {\n this.scale().domain(domain[0]);\n this._domain = this.scale().domain();\n this.smartTicks(this.setTickConfig());\n this.store().commit(DOMAIN, this._domain);\n this.logicalSpace(null);\n return this;\n }\n return this._domain;\n }\n\n /**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\n dependencies () {\n return this._dependencies;\n }\n\n /**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\n createScale (config) {\n const {\n base,\n padding,\n interpolator,\n exponent\n } = config;\n const range = this.range();\n const scale = createScale({\n padding,\n interpolator,\n exponent,\n base,\n range,\n type: this.constructor.type()\n });\n\n return scale;\n }\n\n getTickFormatter (tickFormat, numberFormat) {\n if (tickFormat) {\n return ticks => (val, i) => tickFormat(numberFormat(val), i, ticks);\n }\n return () => val => numberFormat(val);\n }\n\n /**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\n createAxis (config) {\n const {\n tickFormat,\n numberFormat,\n orientation\n } = config;\n const axisClass = axisOrientationMap[orientation];\n\n if (axisClass) {\n const axis = axisClass(this.scale());\n this.formatter = this.getTickFormatter(tickFormat, numberFormat);\n\n return axis;\n }\n return null;\n }\n\n /**\n *\n *\n * @memberof SimpleAxis\n */\n setTickConfig () {\n return this;\n }\n\n /**\n *\n *\n * @param {*} axisTickLabels\n * @param {*} labelWidth\n * @returns\n * @memberof SimpleAxis\n */\n setRotationConfig (axisTickLabels, labelWidth) {\n const { orientation } = this.config();\n\n if (orientation === TOP || orientation === BOTTOM) {\n const range = this.range();\n const length = Math.abs(range[0] - range[1]);\n this.config({ labels: { rotation: 0 } });\n if (length > 0 && axisTickLabels.length * (labelWidth + this._minTickDistance.width) > length) {\n this.config({ labels: { rotation: -90 } });\n }\n }\n return this;\n }\n\n /**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\n adjustRange () {\n return this;\n }\n\n getScaleValue (domainVal) {\n if (domainVal === null || domainVal === undefined) {\n return undefined;\n }\n return this.scale()(domainVal);\n }\n\n /**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\n getTickSize () {\n return this.axis().tickSize();\n }\n\n /**\n * Gets the space occupied by the parts of an axis\n *\n * @return {Object} object with details about sizes of the axis.\n * @memberof SimpleAxis\n */\n getAxisDimensions () {\n this.axisDimensions(computeAxisDimensions(this));\n return this.axisDimensions();\n }\n\n /**\n * Gets the space occupied by the axis\n *\n * @return {Object} object with details about size of the axis.\n * @memberof SimpleAxis\n */\n getLogicalSpace () {\n if (!this.logicalSpace()) {\n this.logicalSpace(calculateContinousSpace(this));\n setOffset(this);\n this.logicalSpace();\n }\n return this.logicalSpace();\n }\n\n /**\n * Returns the value from the domain when given a value from the range.\n * @param {number} value Value from the range.\n * @return {number} Value\n */\n invert (...value) {\n const values = value.map(d => this.scale().invert(d)) || [];\n return value.length === 1 ? values[0] : values;\n }\n\n /**\n * Gets the nearest range value from the given range values.\n * @param {number} v1 Start range value\n * @param {number} v2 End range value\n * @return {Array} range values\n */\n getNearestRange (v1, v2) {\n let p1;\n let p2;\n let extent;\n const {\n type\n } = this.config();\n const scale = this.scale();\n const range = scale.range();\n const reverse = range[0] > range[1];\n\n if (type === BAND) {\n extent = scale.invertExtent(v1, v2);\n p1 = scale(reverse ? extent[extent.length - 1] : extent[0]);\n p2 = scale(reverse ? extent[0] : extent[extent.length - 1]) + scale.bandwidth();\n return [p1, p2];\n }\n return [v1, v2];\n }\n\n /**\n * This method is used to assign a domain to the axis.\n *\n * @param {Array} domain the domain of the scale\n * @memberof SimpleAxis\n */\n updateDomainBounds (domain) {\n let currentDomain = this.domain();\n if (this.config().domain) {\n currentDomain = this.config().domain;\n } else {\n if (currentDomain.length === 0) {\n currentDomain = domain;\n }\n if (domain.length) {\n currentDomain = [Math.min(currentDomain[0], domain[0]), Math.max(currentDomain[1], domain[1])];\n }\n }\n\n return this.domain(currentDomain);\n }\n\n /**\n *\n *\n * @param {*} domain\n * @returns\n * @memberof SimpleAxis\n */\n updateDomainCache (domain) {\n if (this._domainLock === false) {\n this.domain([]);\n this._domainLock = true;\n }\n const cachedDomain = [];\n domain && domain.forEach((d) => {\n d !== undefined && d !== null && cachedDomain.push(d);\n });\n return this.updateDomainBounds(cachedDomain);\n }\n\n getMinTickDifference () {\n return this.domain();\n }\n\n getFormattedTickValues (tickValues) {\n return tickValues;\n }\n\n /**\n *\n *\n * @param {*} tickValues\n * @returns\n * @memberof SimpleAxis\n */\n setTickValues () {\n const {\n tickValues\n } = this.config();\n\n if (tickValues) {\n tickValues instanceof Array && this.axis().tickValues(tickValues);\n return this;\n }\n return this;\n }\n\n /**\n * This method returns the width in pixels for one\n * unit along the axis. It is only applicable to band scale\n * and returns undefined for other scale type.\n *\n * @return {number} the width of one band along band scale axis\n * @memberof SimpleAxis\n */\n getUnitWidth () {\n return 0;\n }\n\n /**\n * This method returns an object that can be used to\n * reconstruct this instance.\n *\n * @return {Object} the serializable props of axis\n * @memberof SimpleAxis\n */\n serialize () {\n return {\n name: this.name,\n type: this.type,\n range: this.range(),\n config: this.config()\n };\n }\n\n /**\n * Returns the id of the axis.\n * @return {string} Unique identifier of the axis.\n */\n get id () {\n return this._id;\n }\n\n registerEvent (event, fn) {\n this._eventList.push({ name: event, action: fn });\n }\n\n /**\n *\n *\n * @param {*} fn\n * @memberof SimpleAxis\n */\n on (event, fn) {\n event = event || 'update';\n this.registerEvent(event, fn);\n }\n\n /**\n * This method is used to render the axis inside\n * the supplied svg container.\n *\n * @param {SVGElement} svg the svg element in which to render the path\n * @memberof SimpleAxis\n */\n /* istanbul ignore next */render () {\n if (this.mount()) {\n renderAxis(this);\n }\n return this;\n }\n\n /**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\n remove () {\n this.store().unsubscribeAll();\n selectElement(this.mount()).remove();\n return this;\n }\n\n /**\n *\n *\n * @memberof SimpleAxis\n */\n unsubscribe () {\n this.store().unsubscribeAll();\n return this;\n }\n\n /**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\n isReverse () {\n const range = this.range();\n return range[0] > range[1];\n }\n\n /**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\n getPixelToValueRatio () {\n const scale = this.scale();\n const range = scale.range();\n const domain = scale.domain();\n\n return Math.abs(range[1] - range[0]) / (domain[1] - domain[0]);\n }\n}\n\n","import { scaleMap } from '../../scale-creator';\n\nexport default class LinearInterpolator {\n\n createScale (config) {\n const {\n range\n } = config;\n const scaleFactory = scaleMap.linear;\n this._scale = scaleFactory().range(range);\n return this._scale;\n }\n\n getScaleValue (domainVal) {\n return this._scale(domainVal) + 0.5;\n }\n\n sanitizeDomain (domain) {\n return domain;\n }\n}\n","import { scaleMap } from '../../scale-creator';\n\nexport default class LogInterpolator {\n\n createScale (config) {\n const {\n range,\n base\n } = config;\n const scaleFactory = scaleMap.log;\n this._scale = scaleFactory().range(range).base(base);\n return this._scale;\n }\n\n getScaleValue (domainVal) {\n if (domainVal <= 0) {\n return 1;\n }\n\n return this._scale(domainVal) + 0.5;\n }\n\n sanitizeDomain (domain) {\n if (domain[0] <= 0) {\n return [Math.max(1, domain[0]), Math.max(1, domain[1])];\n } return domain;\n }\n}\n","import { scaleMap } from '../../scale-creator';\n\nexport default class PowInterpolator {\n\n createScale (config) {\n const {\n range,\n exponent\n } = config;\n const scaleFactory = scaleMap.pow;\n this._scale = scaleFactory().range(range).exponent(exponent);\n return this._scale;\n }\n\n getScaleValue (domainVal) {\n return this._scale(domainVal) + 0.5;\n }\n\n sanitizeDomain (domain) {\n return domain;\n }\n}\n","import { getSmallestDiff } from 'muze-utils';\nimport SimpleAxis from './simple-axis';\nimport { BOTTOM, TOP, LEFT, RIGHT } from '../enums/axis-orientation';\nimport { LINEAR, LOG, POW } from '../enums/scale-type';\nimport { LogInterpolator, PowInterpolator, LinearInterpolator } from './interpolators';\nimport { DOMAIN } from '../enums/constants';\nimport {\n getTickLabelInfo,\n getNumberOfTicks\n} from './helper';\n\nexport const interpolatorMap = {\n [LOG]: LogInterpolator,\n [POW]: PowInterpolator,\n [LINEAR]: LinearInterpolator\n};\n\nexport default class ContinousAxis extends SimpleAxis {\n constructor (config, dependencies) {\n config.tickFormat = config.tickFormat || (val => val);\n super(config, dependencies);\n }\n /**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\n createScale (config) {\n const {\n base,\n padding,\n interpolator,\n exponent\n } = config;\n const range = this.range();\n const InterpolatorCls = interpolatorMap[interpolator];\n\n this._interpolator = new InterpolatorCls();\n let scale = this._interpolator.createScale({\n padding,\n exponent,\n base,\n range\n });\n\n scale = scale.nice();\n return scale;\n }\n\n /**\n * This method is used to assign a domain to the axis.\n *\n * @param {Array} domain the domain of the scale\n * @memberof SimpleAxis\n */\n updateDomainBounds (domain) {\n let currentDomain = this.domain();\n if (this.config().domain) {\n currentDomain = this.config().domain;\n } else {\n if (currentDomain.length === 0) {\n currentDomain = domain;\n }\n if (domain.length) {\n currentDomain = [Math.min(currentDomain[0], domain[0]), Math.max(currentDomain[1], domain[1])];\n }\n }\n\n return this.domain(currentDomain);\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof ContinousAxis\n */\n static type () {\n return LINEAR;\n }\n\n getScaleValue (domainVal) {\n if (domainVal === null || domainVal === undefined) {\n return undefined;\n }\n return this._interpolator.getScaleValue(domainVal);\n }\n /**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\n getTickSize () {\n const {\n showInnerTicks,\n showOuterTicks\n } = this.config();\n const axis = this.axis();\n axis.tickSizeInner(showInnerTicks === false ? 0 : 6);\n axis.tickSizeOuter(showOuterTicks === false ? 0 : 6);\n return axis.tickSize();\n }\n\n /**\n *\n *\n * @param {*} d\n * @returns\n * @memberof SimpleAxis\n */\n domain (domain) {\n if (domain && domain.length) {\n const { nice } = this.config();\n if (domain.length && domain[0] === domain[1]) {\n domain = [0, +domain[0] * 2];\n }\n this.scale().domain(domain);\n nice && this.scale().nice();\n this._domain = this.scale().domain();\n this.store().commit(DOMAIN, this._domain);\n this.logicalSpace(null);\n return this;\n } return this._domain;\n }\n\n /**\n * This method is used to set the space availiable to render\n * the SimpleCell.\n *\n * @param {number} width The width of SimpleCell.\n * @param {number} height The height of SimpleCell.\n * @memberof AxisCell\n */\n setAvailableSpace (width = 0, height, padding, isOffset) {\n const {\n left,\n right,\n top,\n bottom\n } = padding;\n const {\n orientation,\n fixedBaseline\n } = this.config();\n const { tickLabelDim } = this.getAxisDimensions();\n this.availableSpace({ width, height });\n\n if (orientation === TOP || orientation === BOTTOM) {\n const labelSpace = tickLabelDim.width;\n this.range([(fixedBaseline ? 0 : (labelSpace / 2)) + left, width - right - labelSpace / 2]);\n const axisHeight = this.getLogicalSpace().height;\n isOffset && this.config({ yOffset: Math.max(axisHeight, height) });\n } else {\n const labelSpace = tickLabelDim.height;\n this.range([height - bottom - (fixedBaseline ? 1 : (labelSpace / 2)), labelSpace / 2 + top]);\n const axisWidth = this.getLogicalSpace().width;\n isOffset && this.config({ xOffset: Math.max(axisWidth, width) });\n }\n return this;\n }\n\n /**\n *\n *\n * @param {*} tickValues\n * @returns\n * @memberof SimpleAxis\n */\n setTickValues () {\n const {\n tickValues\n } = this.config();\n const axis = this.axis();\n\n if (tickValues) {\n tickValues instanceof Array && this.axis().tickValues(tickValues);\n return this;\n }\n axis.tickValues(this.getTickValues());\n return this;\n }\n\n /**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\n getTickValues () {\n let labelDim = 0;\n const {\n orientation,\n tickValues\n } = this.config();\n const range = this.range();\n const axis = this.axis();\n\n const availableSpace = Math.abs(range[0] - range[1]);\n\n const labelProps = getTickLabelInfo(this).largestLabelDim;\n\n if (tickValues) {\n return axis.scale().ticks(tickValues);\n }\n labelDim = labelProps[orientation === BOTTOM || orientation === TOP ? 'width' : 'height'];\n\n return getNumberOfTicks(availableSpace, labelDim, axis, this);\n }\n\n getMinTickDifference () {\n return getSmallestDiff(this.config().tickValues);\n }\n\n /**\n * Sets a fixed baseline for the first ticks so that they can render effectively within\n * the given area\n *\n * @param {*} tickText\n * @param {*} config\n * @param {*} labelManager\n */\n setFixedBaseline (tickText) {\n const {\n orientation,\n labels\n } = this.config();\n const {\n rotation\n } = labels;\n const axis = this.axis();\n const { width, height } = this._axisDimensions.largestLabelDim;\n axis.tickTransform((d, i) => {\n if (i === 0 && (orientation === LEFT || orientation === RIGHT)) {\n return `translate(0, -${(height) / 3}px)`;\n }\n if (i === 0 && (orientation === TOP || orientation === BOTTOM) && rotation === 0) {\n return `translate(${width / 2}px, ${0}px) rotate(${rotation}deg)`;\n } return '';\n });\n return tickText;\n }\n\n}\n","import SimpleAxis from './simple-axis';\nimport { BAND } from '../enums/scale-type';\nimport { TOP, BOTTOM } from '../enums/axis-orientation';\nimport { calculateBandSpace, setOffset } from './helper';\n\nexport default class BandAxis extends SimpleAxis {\n\n /**\n *\n *\n * @param {*} range\n * @returns\n * @memberof BandAxis\n */\n createScale (range) {\n const scale = super.createScale(range);\n const { padding } = this.config();\n if (typeof padding === 'number') {\n scale.padding(padding);\n }\n return scale;\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof BandAxis\n */\n static type () {\n return BAND;\n }\n\n /**\n *\n *\n * @param {*} width\n * @param {*} height\n * @param {*} padding\n * @param {*} isOffset\n * @memberof BandAxis\n */\n setAvailableSpace (width, height, padding, isOffset) {\n const {\n left,\n right,\n top,\n bottom\n } = padding;\n const {\n orientation,\n showAxisName,\n axisNamePadding\n } = this.config();\n const { axisLabelDim } = this.getAxisDimensions();\n const { height: axisDimHeight } = axisLabelDim;\n\n this.availableSpace({ width, height });\n if (orientation === TOP || orientation === BOTTOM) {\n // Set x axis range\n this.range([0, width - left - right]);\n const axisHeight = this.getLogicalSpace().height - (showAxisName === false ?\n (axisDimHeight + axisNamePadding) : 0);\n isOffset && this.config({ yOffset: Math.max(axisHeight, height) });\n } else {\n // Set y axis range\n this.range([height - bottom, top]);\n const axisWidth = this.getLogicalSpace().width - (showAxisName === false ? axisDimHeight : 0);\n isOffset && this.config({ xOffset: Math.max(axisWidth, width) });\n }\n return this;\n }\n\n /**\n *\n *\n * @returns\n * @memberof BandAxis\n */\n getUnitWidth () {\n return this.scale().bandwidth();\n }\n\n /**\n *\n *\n * @returns\n * @memberof BandAxis\n */\n setTickConfig () {\n let smartTicks = '';\n let smartlabel;\n const { maxWidth, maxHeight, tickFormat } = this.config();\n const { labelManager } = this._dependencies;\n const domain = this.axis().scale().domain();\n\n smartTicks = domain;\n const tickFormatter = tickFormat || (val => val);\n\n if (domain && domain.length) {\n smartTicks = domain.map((d, i) => {\n labelManager.useEllipsesOnOverflow(true);\n smartlabel = labelManager.getSmartText(tickFormatter(d, i, domain), maxWidth, maxHeight);\n return labelManager.constructor.textToLines(smartlabel);\n });\n }\n return smartTicks;\n }\n\n/**\n * Gets the space occupied by the axis\n *\n * @return {Object} object with details about size of the axis.\n * @memberof SimpleAxis\n */\n getLogicalSpace () {\n if (!this.logicalSpace()) {\n this.logicalSpace(calculateBandSpace(this));\n setOffset(this);\n this.logicalSpace();\n }\n return this.logicalSpace();\n }\n /**\n *\n *\n * @param {*} axisTickLabels\n * @param {*} labelWidth\n * @returns\n * @memberof BandAxis\n */\n setRotationConfig (axisTickLabels, labelWidth) {\n const { orientation } = this.config();\n const range = this.range();\n const availSpace = Math.abs(range[0] - range[1]);\n\n this.config({ labels: { rotation: 0, smartTicks: false } });\n if (orientation === TOP || orientation === BOTTOM) {\n const smartWidth = this.smartTicks().reduce((acc, n) => acc + n.width + this._minTickDistance.width, 0);\n // set multiline config\n if (availSpace > 0 && axisTickLabels.length * (labelWidth + this._minTickDistance.width) > availSpace) {\n if (availSpace && smartWidth < availSpace) {\n this.config({ labels: { smartTicks: true } });\n } else {\n this.config({ labels: { rotation: -90 } });\n }\n }\n }\n return this;\n }\n\n /**\n *\n *\n * @returns\n * @memberof BandAxis\n */\n getTickValues () {\n return this.axis().scale().domain();\n }\n\n /**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\n getTickSize () {\n const {\n showInnerTicks,\n showOuterTicks\n } = this.config();\n const axis = this.axis();\n\n axis.tickSizeInner(showInnerTicks ? 6 : 0);\n axis.tickSizeOuter(showOuterTicks ? 6 : 0);\n return axis.tickSize();\n }\n\n /**\n * This method is used to assign a domain to the axis.\n *\n * @param {Array} domain the domain of the scale\n * @memberof SimpleAxis\n */\n updateDomainBounds (domain) {\n let currentDomain = this.domain();\n if (this.config().domain) {\n currentDomain = this.config().domain;\n } else {\n if (currentDomain.length === 0) {\n currentDomain = domain;\n }\n currentDomain = currentDomain.concat(domain);\n }\n this.domain(currentDomain);\n return this;\n }\n\n /**\n * Returns the value from the domain when given a value from the range.\n * @param {number} value Value from the range.\n * @return {number} Value\n */\n invert (...value) {\n const values = value.map(d => this.scale().invert(d)) || [];\n return value.length === 1 ? values[0] && values[0].toString() : values.map(d => d.toString());\n }\n}\n","import { getSmallestDiff } from 'muze-utils';\nimport SimpleAxis from './simple-axis';\nimport { adjustRange } from './helper';\nimport { TIME } from '../enums/scale-type';\nimport { axisOrientationMap, BOTTOM, TOP } from '../enums/axis-orientation';\nimport { DOMAIN } from '../enums/constants';\n\n/**\n *\n *\n * @export\n * @class TimeAxis\n * @extends {SimpleAxis}\n */\nexport default class TimeAxis extends SimpleAxis {\n\n constructor (...params) {\n super(...params);\n this._minDiff = Infinity;\n }\n\n /**\n *\n *\n * @param {*} range\n * @returns\n * @memberof TimeAxis\n */\n createScale (range) {\n let scale = super.createScale(range);\n\n scale = scale.nice();\n return scale;\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof TimeAxis\n */\n static type () {\n return TIME;\n }\n\n /**\n *\n *\n * @returns\n * @memberof BandAxis\n */\n setTickConfig () {\n let smartTicks;\n let smartlabel;\n const { maxWidth, maxHeight, tickFormat } = this.config();\n const { labelManager } = this._dependencies;\n const domain = this.getTickValues();\n const scale = this.scale();\n\n smartTicks = domain;\n const tickFormatter = tickFormat || scale.tickFormat();\n\n if (domain && domain.length) {\n smartTicks = domain.map((d, i) => {\n smartlabel = labelManager.getSmartText(tickFormatter(d, i, domain), maxWidth, maxHeight);\n return labelManager.constructor.textToLines(smartlabel);\n });\n }\n return smartTicks;\n }\n\n /**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\n createAxis (config) {\n const {\n tickFormat,\n orientation\n } = config;\n const axisClass = axisOrientationMap[orientation];\n\n if (axisClass) {\n const axis = axisClass(this.scale());\n this.formatter = this.getTickFormatter(tickFormat);\n return axis;\n }\n return null;\n }\n\n getTickFormatter (tickFormat) {\n if (tickFormat) {\n return ticks => (val, i) => tickFormat(val, i, ticks);\n }\n return null;\n }\n\n /**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\n getTickSize () {\n const {\n showInnerTicks,\n showOuterTicks\n } = this.config();\n const axis = this.axis();\n axis.tickSizeInner(showInnerTicks === false ? 0 : 6);\n axis.tickSizeOuter(showOuterTicks === false ? 0 : 6);\n return super.getTickSize();\n }\n\n /**\n *\n *\n * @returns\n * @memberof TimeAxis\n */\n getTickValues () {\n return this.scale().ticks();\n }\n\n /**\n *\n *\n * @param {*} diff\n * @returns\n * @memberof TimeAxis\n */\n minDiff (diff) {\n this._minDiff = Math.min(this._minDiff, diff);\n return this;\n }\n\n /**\n *\n *\n * @param {*} axisTickLabels\n * @param {*} labelWidth\n * @returns\n * @memberof BandAxis\n */\n setRotationConfig (axisTickLabels, labelWidth) {\n const { orientation } = this.config();\n const range = this.range();\n const availSpace = Math.abs(range[0] - range[1]);\n\n this.config({ labels: { rotation: 0, smartTicks: false } });\n if (orientation === TOP || orientation === BOTTOM) {\n const smartWidth = this.smartTicks().reduce((acc, n) => acc + n.width, 0);\n // set multiline config\n if (availSpace > 0 && axisTickLabels.length * labelWidth > availSpace) {\n if (availSpace && smartWidth * 1.25 < availSpace) {\n this.config({ labels: { smartTicks: true } });\n }\n this.config({ labels: { rotation: -90 } });\n }\n }\n return this;\n }\n\n /**\n *\n *\n * @param {*} d\n * @returns\n * @memberof SimpleAxis\n */\n domain (domain) {\n if (domain) {\n const { nice } = this.config();\n\n if (domain.length && domain[0] === domain[1]) {\n domain = [0, +domain[0] * 2];\n }\n this.scale().domain(domain);\n nice && this.scale().nice();\n this._domain = this.scale().domain();\n this.smartTicks(this.setTickConfig());\n this.store().commit(DOMAIN, this._domain);\n this.logicalSpace(null);\n return this;\n } return this._domain;\n }\n\n getMinTickDifference () {\n return getSmallestDiff(this.config().tickValues);\n }\n\n /**\n *\n *\n * @param {*} width\n * @param {*} height\n * @param {*} padding\n * @param {*} isOffset\n * @memberof TimeAxis\n */\n setAvailableSpace (width, height, padding, isOffset) {\n const {\n left,\n right,\n top,\n bottom\n } = padding;\n const {\n orientation,\n showAxisName,\n axisNamePadding\n } = this.config();\n const domain = this.domain();\n const { axisLabelDim, tickLabelDim } = this.getAxisDimensions();\n const { height: axisDimHeight } = axisLabelDim;\n const { height: tickDimHeight, width: tickDimWidth } = tickLabelDim;\n\n this.availableSpace({ width, height });\n if (orientation === TOP || orientation === BOTTOM) {\n const labelSpace = tickDimWidth;\n this.range(adjustRange(this._minDiff, [labelSpace / 2, width - left - right - labelSpace / 2],\n domain, orientation));\n const axisHeight = this.getLogicalSpace().height - (showAxisName === false ?\n (axisDimHeight + axisNamePadding) : 0);\n isOffset && this.config({ yOffset: Math.max(axisHeight, height) });\n } else {\n const labelSpace = tickDimHeight;\n this.range(adjustRange(this._minDiff, [height - top - bottom - labelSpace / 2, labelSpace / 2],\n domain, orientation));\n const axisWidth = this.getLogicalSpace().width - (showAxisName === false ? axisDimHeight : 0);\n this.isOffset && this.config({ xOffset: Math.max(axisWidth, width) });\n }\n return this;\n }\n\n}\n","export const x11Colors = {\n Pink: { hex: 'ffc0cb', rgb: '255,192,203' },\n LightPink: { hex: 'ffb6c1', rgb: '255,182,193' },\n HotPink: { hex: 'ff69b4', rgb: '255,105,180' },\n DeepPink: { hex: 'ff1493', rgb: '255,20,147' },\n PaleVioletRed: { hex: 'db7093', rgb: '219,112,147' },\n MediumVioletRed: { hex: 'c71585', rgb: '199,21,133' },\n LightSalmon: { hex: 'ffa07a', rgb: '255,160,122' },\n Salmon: { hex: 'fa8072', rgb: '250,128,114' },\n DarkSalmon: { hex: 'e9967a', rgb: '233,150,122' },\n LightCoral: { hex: 'f08080', rgb: '240,128,128' },\n IndianRed: { hex: 'cd5c5c', rgb: '205,92,92' },\n Crimson: { hex: 'dc143c', rgb: '220,20,60' },\n FireBrick: { hex: 'b22222', rgb: '178,34,34' },\n DarkRed: { hex: '8b0000', rgb: '139,0,0' },\n Red: { hex: 'ff0000', rgb: '255,0,0' },\n OrangeRed: { hex: 'ff4500', rgb: '255,69,0' },\n Tomato: { hex: 'ff6347', rgb: '255,99,71' },\n Coral: { hex: 'ff7f50', rgb: '255,127,80' },\n DarkOrange: { hex: 'ff8c00', rgb: '255,140,0' },\n Orange: { hex: 'ffa500', rgb: '255,165,0' },\n Gold: { hex: 'ffd700', rgb: '255,215,0' },\n Yellow: { hex: 'ffff00', rgb: '255,255,0' },\n LightYellow: { hex: 'ffffe0', rgb: '255,255,224' },\n LemonChiffon: { hex: 'fffacd', rgb: '255,250,205' },\n LightGoldenrodYellow: { hex: 'fafad2', rgb: '250,250,210' },\n PapayaWhip: { hex: 'ffefd5', rgb: '255,239,213' },\n Moccasin: { hex: 'ffe4b5', rgb: '255,228,181' },\n PeachPuff: { hex: 'ffdab9', rgb: '255,218,185' },\n PaleGoldenrod: { hex: 'eee8aa', rgb: '238,232,170' },\n Khaki: { hex: 'f0e68c', rgb: '240,230,140' },\n DarkKhaki: { hex: 'bdb76b', rgb: '189,183,107' },\n Cornsilk: { hex: 'fff8dc', rgb: '255,248,220' },\n BlanchedAlmond: { hex: 'ffebcd', rgb: '255,235,205' },\n Bisque: { hex: 'ffe4c4', rgb: '255,228,196' },\n NavajoWhite: { hex: 'ffdead', rgb: '255,222,173' },\n Wheat: { hex: 'f5deb3', rgb: '245,222,179' },\n BurlyWood: { hex: 'deb887', rgb: '222,184,135' },\n Tan: { hex: 'd2b48c', rgb: '210,180,140' },\n RosyBrown: { hex: 'bc8f8f', rgb: '188,143,143' },\n SandyBrown: { hex: 'f4a460', rgb: '244,164,96' },\n Goldenrod: { hex: 'daa520', rgb: '218,165,32' },\n DarkGoldenrod: { hex: 'b8860b', rgb: '184,134,11' },\n Peru: { hex: 'cd853f', rgb: '205,133,63' },\n Chocolate: { hex: 'd2691e', rgb: '210,105,30' },\n SaddleBrown: { hex: '8b4513', rgb: '139,69,19' },\n Sienna: { hex: 'a0522d', rgb: '160,82,45' },\n Brown: { hex: 'a52a2a', rgb: '165,42,42' },\n Maroon: { hex: '800000', rgb: '128,0,0' },\n DarkOliveGreen: { hex: '556b2f', rgb: '85,107,47' },\n Olive: { hex: '808000', rgb: '128,128,0' },\n OliveDrab: { hex: '6b8e23', rgb: '107,142,35' },\n YellowGreen: { hex: '9acd32', rgb: '154,205,50' },\n LimeGreen: { hex: '32cd32', rgb: '50,205,50' },\n Lime: { hex: '00ff00', rgb: '0,255,0' },\n LawnGreen: { hex: '7cfc00', rgb: '124,252,0' },\n Chartreuse: { hex: '7fff00', rgb: '127,255,0' },\n GreenYellow: { hex: 'adff2f', rgb: '173,255,47' },\n SpringGreen: { hex: '00ff7f', rgb: '0,255,127' },\n MediumSpringGreen: { hex: '00fa9a', rgb: '0,250,154' },\n LightGreen: { hex: '90ee90', rgb: '144,238,144' },\n PaleGreen: { hex: '98fb98', rgb: '152,251,152' },\n DarkSeaGreen: { hex: '8fbc8f', rgb: '143,188,143' },\n MediumSeaGreen: { hex: '3cb371', rgb: '60,179,113' },\n SeaGreen: { hex: '2e8b57', rgb: '46,139,87' },\n ForestGreen: { hex: '228b22', rgb: '34,139,34' },\n Green: { hex: '008000', rgb: '0,128,0' },\n DarkGreen: { hex: '006400', rgb: '0,100,0' },\n MediumAquamarine: { hex: '66cdaa', rgb: '102,205,170' },\n Aqua: { hex: '00ffff', rgb: '0,255,255' },\n Cyan: { hex: '00ffff', rgb: '0,255,255' },\n LightCyan: { hex: 'e0ffff', rgb: '224,255,255' },\n PaleTurquoise: { hex: 'afeeee', rgb: '175,238,238' },\n Aquamarine: { hex: '7fffd4', rgb: '127,255,212' },\n Turquoise: { hex: '40e0d0', rgb: '64,224,208' },\n MediumTurquoise: { hex: '48d1cc', rgb: '72,209,204' },\n DarkTurquoise: { hex: '00ced1', rgb: '0,206,209' },\n LightSeaGreen: { hex: '20b2aa', rgb: '32,178,170' },\n CadetBlue: { hex: '5f9ea0', rgb: '95,158,160' },\n DarkCyan: { hex: '008b8b', rgb: '0,139,139' },\n Teal: { hex: '008080', rgb: '0,128,128' },\n LightSteelBlue: { hex: 'b0c4de', rgb: '176,196,222' },\n PowderBlue: { hex: 'b0e0e6', rgb: '176,224,230' },\n LightBlue: { hex: 'add8e6', rgb: '173,216,230' },\n SkyBlue: { hex: '87ceeb', rgb: '135,206,235' },\n LightSkyBlue: { hex: '87cefa', rgb: '135,206,250' },\n DeepSkyBlue: { hex: '00bfff', rgb: '0,191,255' },\n DodgerBlue: { hex: '1e90ff', rgb: '30,144,255' },\n CornflowerBlue: { hex: '6495ed', rgb: '100,149,237' },\n SteelBlue: { hex: '4682b4', rgb: '70,130,180' },\n RoyalBlue: { hex: '4169e1', rgb: '65,105,225' },\n Blue: { hex: '0000ff', rgb: '0,0,255' },\n MediumBlue: { hex: '0000cd', rgb: '0,0,205' },\n DarkBlue: { hex: '00008b', rgb: '0,0,139' },\n Navy: { hex: '000080', rgb: '0,0,128' },\n MidnightBlue: { hex: '191970', rgb: '25,25,112' },\n Lavender: { hex: 'e6e6fa', rgb: '230,230,250' },\n Thistle: { hex: 'd8bfd8', rgb: '216,191,216' },\n Plum: { hex: 'dda0dd', rgb: '221,160,221' },\n Violet: { hex: 'ee82ee', rgb: '238,130,238' },\n Orchid: { hex: 'da70d6', rgb: '218,112,214' },\n Fuchsia: { hex: 'ff00ff', rgb: '255,0,255' },\n Magenta: { hex: 'ff00ff', rgb: '255,0,255' },\n MediumOrchid: { hex: 'ba55d3', rgb: '186,85,211' },\n MediumPurple: { hex: '9370db', rgb: '147,112,219' },\n BlueViolet: { hex: '8a2be2', rgb: '138,43,226' },\n DarkViolet: { hex: '9400d3', rgb: '148,0,211' },\n DarkOrchid: { hex: '9932cc', rgb: '153,50,204' },\n DarkMagenta: { hex: '8b008b', rgb: '139,0,139' },\n Purple: { hex: '800080', rgb: '128,0,128' },\n Indigo: { hex: '4b0082', rgb: '75,0,130' },\n DarkSlateBlue: { hex: '483d8b', rgb: '72,61,139' },\n SlateBlue: { hex: '6a5acd', rgb: '106,90,205' },\n MediumSlateBlue: { hex: '7b68ee', rgb: '123,104,238' },\n White: { hex: 'ffffff', rgb: '255,255,255' },\n Snow: { hex: 'fffafa', rgb: '255,250,250' },\n Honeydew: { hex: 'f0fff0', rgb: '240,255,240' },\n MintCream: { hex: 'f5fffa', rgb: '245,255,250' },\n Azure: { hex: 'f0ffff', rgb: '240,255,255' },\n AliceBlue: { hex: 'f0f8ff', rgb: '240,248,255' },\n GhostWhite: { hex: 'f8f8ff', rgb: '248,248,255' },\n WhiteSmoke: { hex: 'f5f5f5', rgb: '245,245,245' },\n Seashell: { hex: 'fff5ee', rgb: '255,245,238' },\n Beige: { hex: 'f5f5dc', rgb: '245,245,220' },\n OldLace: { hex: 'fdf5e6', rgb: '253,245,230' },\n FloralWhite: { hex: 'fffaf0', rgb: '255,250,240' },\n Ivory: { hex: 'fffff0', rgb: '255,255,240' },\n AntiqueWhite: { hex: 'faebd7', rgb: '250,235,215' },\n Linen: { hex: 'faf0e6', rgb: '250,240,230' },\n LavenderBlush: { hex: 'fff0f5', rgb: '255,240,245' },\n MistyRose: { hex: 'ffe4e1', rgb: '255,228,225' },\n Gainsboro: { hex: 'dcdcdc', rgb: '220,220,220' },\n LightGray: { hex: 'd3d3d3', rgb: '211,211,211' },\n Silver: { hex: 'c0c0c0', rgb: '192,192,192' },\n DarkGrey: { hex: 'a9a9a9', rgb: '169,169,169' },\n Grey: { hex: '808080', rgb: '128,128,128' },\n DimGrey: { hex: '696969', rgb: '105,105,105' },\n LightSlateGrey: { hex: '778899', rgb: '119,136,153' },\n SlateGrey: { hex: '708090', rgb: '112,128,144' },\n DarkSlateGrey: { hex: '2f4f4f', rgb: '47,79,79' },\n Black: { hex: '000000', rgb: '0,0,0' }\n};\n","import {\n LINEAR\n} from '../enums/constants';\n/**\n * Set of default colors\n */\nexport const palette = [\n '#086bb6',\n '#f37d45',\n '#f5ce02',\n '#67bda0',\n '#c54e4e',\n '#ae70af'\n];\n\nexport const DEFAULT_GRADIENT_COLOR = '#eaeaea';\n\nexport const DEFAULT_CONFIG = {\n range: palette,\n value: palette[0],\n step: false,\n stops: 5,\n type: LINEAR\n};\n","import { mergeRecursive, detectColor, hexToHsv, rgbToHsv } from 'muze-utils';\nimport { x11Colors } from './color-maps';\nimport { palette, DEFAULT_GRADIENT_COLOR } from './defaults';\nimport { LINEAR, RGB, HEX, HSL, HSLA } from '../enums/constants';\n\nexport const getHslString = hslArr => `hsla(${hslArr[0] * 360},${hslArr[1] * 100}%,${hslArr[2] * 100}%,\\\n${hslArr[3] || 1})`;\n\nexport const convertToXllString = baseString => (baseString.split(' ') || [])\n .reduce((x, e) => `${x}${e.charAt(0).toUpperCase()}${e.slice(1)}`, '');\n\nexport const getActualHslColor = (e, paletteColor) => {\n let color = '';\n if (typeof e === 'string') {\n e = e.replace(/ /g, '');\n e = e.toLowerCase();\n if (detectColor(e) === HSL || detectColor(e) === HSLA) {\n color = e.match(/(\\d+(\\.\\d+)?)/g);\n color = [color[0] / 360, color[1] / 100, color[2] / 100, color[3] || 1];\n } else if (detectColor(e) === HEX) {\n color = hexToHsv(e);\n } else if (detectColor(e) === RGB) {\n const col = e.substring(e.indexOf('(') + 1, e.lastIndexOf(')')).split(/,\\s*/);\n color = rgbToHsv(...col);\n } else if (x11Colors[convertToXllString(e)]) {\n color = rgbToHsv(...x11Colors[convertToXllString(e)].rgb.split(','));\n }\n } else if (!(e instanceof Array)) {\n color = rgbToHsv(paletteColor);\n } else {\n color = e;\n }\n return color;\n};\n\nexport const PROPS = {\n config: {\n sanitization: (context, config) => {\n const defCon = mergeRecursive({}, context.constructor.defaultConfig());\n if (config.type === LINEAR) {\n config.range = config.range || [defCon.range[0]];\n config.range = config.range.length > 1 ? config.range : [DEFAULT_GRADIENT_COLOR, ...config.range];\n }\n const oldConfig = mergeRecursive(defCon, context.config());\n const newConfig = mergeRecursive(oldConfig, config);\n\n if (newConfig.range instanceof Array) {\n newConfig.range = newConfig.range.map((e, i) => getActualHslColor(e, palette[i]));\n newConfig.stops = config.stops || newConfig.range.length;\n }\n newConfig.value = getActualHslColor(newConfig.value, newConfig.value);\n return newConfig;\n }\n },\n domain: {},\n scale: {},\n uniqueValues: {}\n};\n","import { numberInterpolator, piecewiseInterpolator, hslInterpolator } from 'muze-utils';\nimport { CONTINOUS, DISCRETE } from '../enums/constants';\nimport { LINEAR, SEQUENTIAL, ORDINAL, QUANTILE } from '../enums/scale-type';\nimport { getHslString } from './props';\n\nconst getStops = (domain, stops) => {\n let newStops = [];\n\n if (stops instanceof Array) {\n newStops = stops.slice().sort();\n newStops = [...new Set([domain[0], ...stops, domain[1]])].sort();\n } else {\n const interpolator = numberInterpolator()(...domain);\n for (let i = 0; i <= stops; i++) {\n newStops[i] = interpolator(i / stops);\n }\n }\n\n if (newStops[0] < domain[0]) {\n newStops.shift();\n }\n return { domain, newStops };\n};\n\nconst rangeStops = (newStopsLength, range) => {\n let newRange = [];\n const maxRangeLength = Math.min(range.length, 18);\n\n if (newStopsLength > maxRangeLength) {\n const interpolator = piecewiseInterpolator()(hslInterpolator(), range.map(e => getHslString(e)));\n for (let i = 0; i < newStopsLength; i++) {\n newRange[i] = interpolator(i / (newStopsLength - 1));\n }\n } else {\n newRange = range.slice(0, newStopsLength);\n }\n return { newRange };\n};\n\n/**\n*\n*\n* @param {*} domain\n* @returns\n*/\nconst indexedDomain = (domain) => {\n const uniqueVals = domain;\n const retDomain = domain.map((d, i) => (i) / (domain.length - 1));\n return { domain: retDomain, uniqueVals, scaleDomain: [0, 1] };\n};\n\n/**\n *\n *\n * @param {*} domain\n * @returns\n */\nconst indexedDomainMeasure = (domain, stops, range) => {\n const uniqueVals = domain;\n return { domain, uniqueVals, scaleDomain: [0, 1], range };\n};\n\n/**\n *\n *\n * @param {*} domain\n * @returns\n */\nconst normalDomain = (domain, stops, range) => {\n const uniqueVals = domain;\n return { uniqueVals, domain, nice: true, range };\n};\n\n/**\n *\n *\n * @param {*} domain\n * @param {*} stops\n * @returns\n */\nconst steppedDomain = (domain, stops, range) => {\n const { domain: uniqueVals, newStops } = getStops(domain, stops);\n const { newRange } = rangeStops(newStops.length - 1, range);\n\n return { uniqueVals, domain: newStops, nice: true, range: newRange };\n};\n\nconst continousSteppedDomain = (domain, stops, range) => {\n const { domain: uniqueVals, newStops } = getStops(domain, range.length - 1);\n const hslRange = range.map(e => getHslString(e));\n return { uniqueVals, domain: newStops, nice: true, range: hslRange };\n};\n\n/**\n *\n *\n * @param {*} domainValue\n * @param {*} scale\n * @param {*} domain\n * @param {*} uniqueVals\n * @returns\n */\nconst uniqueRange = (domainValue, scale, domain, uniqueVals) => {\n const index = uniqueVals.indexOf(domainValue);\n const numVal = domain[index];\n return scale(numVal);\n};\n\n/**\n *\n *\n * @param {*} domainValue\n * @param {*} scale\n * @param {*} domain\n * @returns\n */\nconst indexedRange = (domainValue, scale, domain) => {\n const numVal = (domainValue - domain[0]) / (domain[domain.length - 1] - domain[0]);\n\n return scale(numVal);\n};\n\n/**\n *\n *\n * @param {*} domainValue\n * @param {*} scale\n */\nconst normalRange = (domainValue, scale) => scale(domainValue);\n\n/**\n *\n *\n * @param {*} stops\n */\nconst strategies = () => ({\n [`${CONTINOUS}-${CONTINOUS}-${SEQUENTIAL}`]: {\n scale: SEQUENTIAL,\n domainRange: () => indexedDomainMeasure,\n value: () => indexedRange\n },\n [`${CONTINOUS}-${DISCRETE}-${SEQUENTIAL}`]: {\n scale: SEQUENTIAL,\n domainRange: () => indexedDomainMeasure,\n value: () => indexedRange\n },\n [`${DISCRETE}-${DISCRETE}-${SEQUENTIAL}`]: {\n scale: SEQUENTIAL,\n domainRange: () => indexedDomain,\n value: () => uniqueRange\n },\n [`${DISCRETE}-${DISCRETE}-${ORDINAL}`]: {\n scale: ORDINAL,\n domainRange: () => normalDomain,\n value: () => normalRange\n },\n [`${CONTINOUS}-${CONTINOUS}-${ORDINAL}`]: {\n scale: LINEAR,\n domainRange: () => continousSteppedDomain,\n value: () => normalRange\n },\n [`${CONTINOUS}-${DISCRETE}-${ORDINAL}`]: {\n scale: QUANTILE,\n domainRange: () => steppedDomain,\n value: () => normalRange\n\n }\n});\n\n/**\n *\n *\n * @param {*} domainType\n * @param {*} rangeType\n * @param {*} schemeType\n * @param {*} stops\n */\nexport const strategyGetter = (domainType, rangeType, schemeType, stops) =>\n strategies(stops)[`${domainType}-${rangeType}-${schemeType || ''}`];\n","/**\n * @module Axis\n * This file declares a class that is used to render an axis to add meaning to\n * plots.\n */\nimport { getUniqueId, generateGetterSetters, rgbToHsv } from 'muze-utils';\nimport { createScale, getScheme, getSchemeType } from '../scale-creator';\nimport { CONTINOUS, DISCRETE, COLOR } from '../enums/constants';\nimport { strategyGetter } from './color-strategy';\nimport { DEFAULT_CONFIG } from './defaults';\nimport { PROPS, getHslString } from './props';\n\n/**\n* This class is used to instantiate a SimpleAxis.\n* @class SimpleAxis\n*/\nexport default class ColorAxis {\n\n /**\n * Creates an instance of SimpleAxis.\n * @param {Object} config input parameters.\n * @param {Object | undefined} params.range Type of color range.\n * @param {string} params.name the label to show on axis.\n * @param {string} params.type The type of scale to handle.\n * @memberof ColorAxis\n */\n constructor (config) {\n generateGetterSetters(this, PROPS);\n this.config(config);\n\n this._domainType = this._config.type === 'linear' ? CONTINOUS : DISCRETE;\n this._rangeType = (this._config.type === 'linear' && !this._config.step) ? CONTINOUS : DISCRETE;\n\n this._schemeType = getSchemeType(this._config.range);\n\n this._colorStrategy = this.setColorStrategy(this._domainType, this._rangeType, this._schemeType);\n this._scale = this.createScale(this._colorStrategy);\n\n this._id = getUniqueId();\n\n this.updateDomain(config.domain);\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof ColorAxis\n */\n static defaultConfig () {\n return DEFAULT_CONFIG;\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof ColorAxis\n */\n static type () {\n return COLOR;\n }\n\n /**\n *\n *\n * @param {*} colorStrategy\n * @returns\n * @memberof ColorAxis\n */\n createScale (colorStrategy) {\n const { range } = this.config();\n if (range && typeof (range) === 'string') {\n return getScheme(range);\n }\n return createScale({\n type: colorStrategy.scale,\n range\n });\n }\n\n /**\n *\n *\n * @param {*} domainType\n * @param {*} rangeType\n * @param {*} schemeType\n * @returns\n * @memberof ColorAxis\n */\n setColorStrategy (domainType, rangeType, schemeType) {\n const { stops } = this.config();\n\n return strategyGetter(domainType, rangeType, schemeType, stops);\n }\n\n /**\n *\n *\n * @param {*} domainVal\n * @returns\n * @memberof ColorAxis\n */\n getHslString (hslColorArray) {\n return getHslString(hslColorArray);\n }\n /**\n *\n *\n * @param {*} domainVal\n * @returns\n * @memberof ColorAxis\n */\n getColor (domainVal) {\n return this.getHslString(this.getRawColor(domainVal));\n }\n /**\n *\n *\n * @param {*} domainVal\n * @returns\n * @memberof ColorAxis\n */\n getRawColor (domainVal) {\n if (this.domain() && domainVal !== undefined) {\n const scale = this.scale();\n const range = scale.range ? scale.range() : null;\n const color = this._colorStrategy.value(range)(domainVal, scale, this.domain(), this.uniqueValues());\n\n if (typeof color === 'string') {\n const col = color.substring(color.indexOf('(') + 1, color.lastIndexOf(')')).split(/,\\s*/);\n return rgbToHsv(...col);\n }\n return [...color];\n }\n return [...this.config().value];\n }\n\n /**\n *\n *\n * @param {*} [domain=[]]\n * @returns\n * @memberof ColorAxis\n */\n updateDomain (domain = []) {\n if (domain.length) {\n const scale = this.scale();\n const range = scale.range ? scale.range() : null;\n const domainRangeFn = this._colorStrategy.domainRange();\n const scaleInfo = domainRangeFn(domain, this.config().stops, range);\n\n this.domain(scaleInfo.domain);\n scaleInfo.range && this.scale().range(scaleInfo.range);\n this.uniqueValues(scaleInfo.uniqueVals);\n this.scale().domain(scaleInfo.scaleDomain || this.domain());\n }\n return this;\n }\n\n /**\n * This method returns an object that can be used to\n * reconstruct this instance.\n *\n * @return {Object} the serializable props of axis\n * @memberof ShapeAxis\n */\n serialize () {\n return {\n type: this.constructor.type(),\n scale: this.scale(),\n domain: this.domain(),\n config: this.config()\n };\n }\n\n transformColor (color, transformationArr) {\n const h = color[0] * 360;\n const s = color[1] * 100;\n const l = color[2] * 100;\n const a = color[3] || 1;\n const newH = h + transformationArr[0];\n const newS = s + transformationArr[1];\n const newL = l + transformationArr[2];\n const newA = a + transformationArr[3] || 0;\n\n return { color: `hsla(${newH},${newS}%,${newL}%,${newA})`, hsla: [newH / 360, newS / 100, newL / 100, newA] };\n }\n\n /**\n * Returns the id of the axis.\n * @return {string} Unique identifier of the axis.\n */\n id () {\n return this._id;\n }\n\n}\n","export const DEFAULT_CONFIG = {\n value: 36,\n range: [36, 1000]\n};\n","import { numberInterpolator, piecewiseInterpolator } from 'muze-utils';\nimport { CONTINOUS, DISCRETE } from '../enums/constants';\nimport { LINEAR, THRESHOLD } from '../enums/scale-type';\n\n/**\n *\n *\n * @param {*} domain\n * @returns\n */\nconst indexedDomain = (domain) => {\n const uniqueVals = domain;\n const retDomain = domain.map((d, i) => (i) / (domain.length - 1));\n return { domain: retDomain, uniqueVals, scaleDomain: [0, 1] };\n};\n\n/**\n *\n *\n * @param {*} domain\n * @returns\n */\nconst normalDomain = (domain) => {\n const uniqueVals = domain;\n return { uniqueVals, domain };\n};\n\n/**\n *\n *\n * @param {*} domain\n * @param {*} intervals\n * @returns\n */\nconst steppedDomain = (domain, intervals) => {\n let newIntervals = [];\n if (intervals instanceof Array) {\n newIntervals = intervals.slice().sort();\n } else {\n const interpolator = numberInterpolator()(...domain);\n for (let i = 0; i < intervals; i++) {\n newIntervals[i] = interpolator(i / (intervals - 1));\n }\n }\n if (newIntervals[0] < domain[0]) {\n newIntervals.shift();\n }\n const retDomain = newIntervals;\n return { uniqueVals: newIntervals, domain: retDomain, nice: true };\n};\n\n/**\n *\n *\n * @param {*} domainValue\n * @param {*} scale\n * @param {*} domain\n * @param {*} uniqueVals\n * @returns\n */\nconst discreteRange = (domainValue, scale, domain) => {\n const numVal = (domainValue - domain[0]) / (domain[domain.length - 1] - domain[0]);\n const interpolator = numberInterpolator()(...scale.range());\n return interpolator(numVal);\n};\n\n/**\n *\n *\n * @param {*} domainValue\n * @param {*} scale\n * @param {*} domain\n * @returns\n */\nconst pieceWiseRange = (domainValue, scale, domain, uniqueVals) => {\n const index = uniqueVals.indexOf(domainValue);\n const numVal = domain[index];\n const fn = piecewiseInterpolator()(numberInterpolator(), [...scale.range()]);\n return fn(numVal);\n};\n\n/**\n *\n *\n * @param {*} domainValue\n * @param {*} scale\n */\nconst normalRange = (domainValue, scale) => scale(domainValue);\n\n/**\n *\n *\n * @param {*} intervals\n */\nconst strategies = {\n [`${DISCRETE}-${CONTINOUS}`]: {\n scale: LINEAR,\n domain: indexedDomain,\n range: pieceWiseRange\n },\n [`${CONTINOUS}-${CONTINOUS}`]: {\n scale: LINEAR,\n domain: normalDomain,\n range: normalRange\n },\n [`${CONTINOUS}-${DISCRETE}`]: {\n scale: THRESHOLD,\n domain: steppedDomain,\n range: discreteRange\n }\n};\n\n/**\n *\n *\n * @param {*} domainType\n * @param {*} rangeType\n * @param {*} schemeType\n * @param {*} intervals\n */\nexport const strategyGetter = (domainType, rangeType) =>\n strategies[`${domainType}-${rangeType}`];\n","export const PROPS = {\n config: {},\n domain: {\n sanitization: (context, value) => {\n context.scale().domain(value);\n return value;\n }\n },\n range: {},\n scale: {},\n uniqueValues: {}\n};\n","/**\n * @module Axis\n * This file declares a class that is used to render an axis to add meaning to\n * plots.\n */\nimport { getUniqueId, generateGetterSetters } from 'muze-utils';\nimport { createScale } from '../scale-creator';\nimport { DEFAULT_CONFIG } from './defaults';\nimport { SIZE, CONTINOUS, DISCRETE } from '../enums/constants';\nimport { strategyGetter } from './size-strategy';\nimport { PROPS } from './props';\n\n/**\n* This class is used to instantiate a SimpleAxis.\n* @class SimpleAxis\n*/\nexport default class SizeAxis {\n\n /**\n * Creates an instance of SimpleAxis.\n * @param {Object} config input parameters.\n * @memberof SizeAxis\n */\n constructor (config) {\n generateGetterSetters(this, PROPS);\n\n this._id = getUniqueId();\n this._config = Object.assign({}, this.constructor.defaultConfig(), config);\n // @todo: Will use configuration override using scale decorator\n this._domainType = this._config.type === 'linear' ? CONTINOUS : DISCRETE;\n this._rangeType = CONTINOUS;\n\n this._sizeStrategy = this.setStrategy(this._domainType, this._rangeType);\n this._scale = this.createScale(this._sizeStrategy);\n this._range = this._config.range;\n\n this.updateDomain(config.domain);\n }\n\n /**\n *\n *\n * @param {*} domainType\n * @param {*} rangeType\n * @param {*} schemeType\n * @returns\n * @memberof ColorAxis\n */\n setStrategy (domainType, rangeType) {\n return strategyGetter(domainType, rangeType);\n }\n\n /**\n *\n *\n * @returns\n * @memberof SizeAxis\n */\n createScale (strategy) {\n const {\n range\n } = this.config();\n return createScale({\n type: strategy.scale,\n range\n });\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof ColorAxis\n */\n static defaultConfig () {\n return DEFAULT_CONFIG;\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof ColorAxis\n */\n static type () {\n return SIZE;\n }\n\n /**\n *\n *\n * @param {*} domainVal\n * @returns\n * @memberof SizeAxis\n */\n getSize (domainVal = 0) {\n let sizeVal = 1;\n const {\n value\n } = this.config();\n const scale = this.scale();\n const domain = this.domain() || [1, 1];\n\n if (!scale || domain[0] === domain[1]) {\n sizeVal = value;\n } else {\n return this._sizeStrategy.range(domainVal, scale, this.domain(), this.uniqueValues());\n }\n return sizeVal;\n }\n\n /**\n * This method is used to assign a domain to the axis.\n *\n * @param {Array} domain the domain of the scale\n * @memberof SizeAxis\n */\n updateDomain (domain) {\n if (domain) {\n const domainFn = this._sizeStrategy.domain;\n\n const domainInfo = domainFn(domain, this.config().intervals);\n\n this.domain(domainInfo.domain);\n this.uniqueValues(domainInfo.uniqueVals);\n\n this.scale().domain(domainInfo.scaleDomain || this.domain());\n }\n return this;\n }\n\n /**\n * This method returns an object that can be used to\n * reconstruct this instance.\n *\n * @return {Object} the serializable props of axis\n * @memberof ShapeAxis\n */\n serialize () {\n return {\n type: this.constructor.type(),\n scale: this.scale(),\n domain: this.domain(),\n range: this.range(),\n config: this.config()\n };\n }\n\n /**\n * Returns the id of the axis.\n * @return {string} Unique identifier of the axis.\n */\n id () {\n return this._id;\n }\n}\n","export const DEFAULT_CONFIG = {\n generator: null,\n value: 'circle',\n range: ['circle', 'diamond', 'star', 'cross', 'square', 'wye', 'triangle']\n};\n","export const PROPS = {\n config: {},\n domain: {},\n scale: {},\n uniqueValues: {},\n generator: {}\n};\n\n","/**\n * @module Axis\n * This file declares a class that is used to render an axis to add meaning to\n * plots.\n */\nimport { getUniqueId, getSymbol, generateGetterSetters, mergeRecursive } from 'muze-utils';\nimport { createScale } from '../scale-creator';\nimport { DEFAULT_CONFIG } from './defaults';\nimport { SHAPE } from '../enums/constants';\nimport { shapeGenerator } from './helper';\nimport { PROPS } from './props';\n\n/**\n* This class is used to instantiate a SimpleAxis.\n* @class SimpleAxis\n*/\nexport default class ShapeAxis {\n /**\n * Creates an instance of SimpleAxis.\n * @param {Object} params input parameters.\n * @param {Object | undefined} params.range Type of color scheme.\n * @memberof ShapeAxis\n */\n constructor (config) {\n generateGetterSetters(this, PROPS);\n\n this._id = getUniqueId();\n this._config = Object.assign({}, this.constructor.defaultConfig());\n this._config = mergeRecursive(this._config, config);\n\n this._scale = createScale({\n type: 'ordinal',\n range: this._config.range\n });\n this.updateDomain(config.domain);\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof ColorAxis\n */\n static defaultConfig () {\n return DEFAULT_CONFIG;\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof ColorAxis\n */\n static type () {\n return SHAPE;\n }\n\n /**\n *\n *\n * @param {*} value\n * @returns\n * @memberof ShapeAxis\n */\n getShape (value) {\n if (!this.scale() || !this.domain() || !value) {\n return this.config().value;\n }\n\n if (this._generatedShapes) {\n return this._generatedShapes[value];\n }\n\n const shapeType = this.scale()(value);\n if (shapeType === 'string') {\n return getSymbol(shapeType);\n }\n\n return shapeType;\n }\n\n /**\n * This method is used to assign a domain to the axis.\n *\n * @param {Array} domain the domain of the scale\n * @memberof ShapeAxis\n */\n updateDomain (domain = []) {\n if (domain.length) {\n this.uniqueValues(domain);\n this.domain(domain);\n this.scale().domain(domain);\n\n if (this.config().generator) {\n this._generatedShapes = shapeGenerator(domain, this.config().generator);\n }\n }\n return this;\n }\n\n /**\n * This method returns an object that can be used to\n * reconstruct this instance.\n *\n * @return {Object} the serializable props of axis\n * @memberof ShapeAxis\n */\n serialize () {\n return {\n type: this.constructor.type(),\n scale: this.scale(),\n domain: this.domain(),\n range: this.config().range,\n config: this.config()\n };\n }\n\n /**\n * Returns the id of the axis.\n * @return {string} Unique identifier of the axis.\n */\n id () {\n return this._id;\n }\n}\n","/**\n *\n *\n * @param {*} domain\n * @param {*} generatorFn\n * @returns\n */\nexport const shapeGenerator = (domain, generatorFn) => {\n const generatedShapes = {};\n domain.forEach((value) => {\n generatedShapes[value] = generatorFn(value);\n });\n return generatedShapes;\n};\n","import * as ScaleType from './enums/scale-type';\n\nconst DATA_TYPES = {\n DIMENSION: 'dimension',\n CATEGORICAL: 'categorical',\n MEASURE: 'measure',\n DATETIME: 'temporal'\n};\n\n/**\n * Map of DataModel types to associated field types.\n */\nexport const dataTypeScaleMap = {\n [DATA_TYPES.DIMENSION]: ScaleType.BAND,\n [DATA_TYPES.MEASURE]: ScaleType.LINEAR,\n [DATA_TYPES.DATETIME]: ScaleType.TIME\n};\n\n","import { nestCollection } from 'muze-utils';\n\n/**\n * Create multiple datasets from a single dataset by grouping the data using\n * a dimensional field.\n * @param {Array} schema Name and type of fields are stored in schema\n * @param {Array} data Data array\n * @param {Object} config Configuration object\n * @return {Array} Grouped data array\n */\nexport default (schema, data, config) => {\n const groupBy = config.groupBy instanceof Array ? config.groupBy : [config.groupBy];\n const groupByIndices = groupBy.map(fieldName => schema.findIndex(d => d.name === fieldName));\n\n if (groupByIndices.find(d => d === -1) !== undefined) {\n throw new Error(`Groupby field ${groupBy} not found in schema`);\n }\n\n return nestCollection({\n keys: groupByIndices,\n data\n });\n};\n","/**\n * @module Transform\n * This file exports a function that is used to implement\n * the identity transform\n */\n /* eslint no-unused-vars: 0 */\n /**\n * This function accepts data and returns the data unchanged.\n * @param {Object} schema The schema.\n * @param {Array} data The data array.\n * @param {Object} config The config object.\n * @return {Array} The unchanged data.\n */\n function identityTransform (schema, data, config) {\n return data;\n }\n\n export default identityTransform;\n","/**\n * @module Transform\n * This file exports the transform factory.\n */\nimport * as TransformType from '../enums/transform-type';\nimport identity from '../identity-transform';\nimport group from '../group-transform';\nimport stack from '../stack-transform';\n\n/* istanbul ignore next */\nconst transformMap = {\n [TransformType.IDENTITY]: identity,\n [TransformType.GROUP]: group,\n [TransformType.STACK]: stack\n};\n\n/**\n * This function is used to retirn a transform associated\n * with the given type.\n *\n * @param {string} type The type of the transform.\n * @return {Function} The transform function.\n */\nfunction transformFactory (type) {\n const transform = transformMap[type];\n if (typeof transform !== 'function') {\n throw new Error('Invalid transform type supplied.');\n }\n return transform;\n}\n\nexport default transformFactory;\n","/**\n * @module Transform\n * This module exports constants that are used to reference transforms in\n * a consistent manner throughout the project.\n */\n/* eslint one-var: 0 */\n export const IDENTITY = 'identity';\n export const GROUP = 'group';\n export const STACK = 'stack';\n export const FRACTURE = 'fracture';\n","import { stack } from 'muze-utils';\n\nimport group from '../group-transform';\n/*\n Normalize the data to a form which can be given to d3 stack for stacking the data\n ['Product', 'Sales', 'Region'],\n 0 ['A', 2000, 'North'],\n 1 ['A', 3000, 'South'],\n 2 ['B', 3000, 'South'],\n 3 ['B', 2000, 'North'],\n 4 ['C', 3000, 'South'],\n 5 ['C', 2000, 'North']\n |\n |\n ['Product', 'North', 'South'],\n ['A', 2000, 3000],\n ['B', 2000, 3000],\n ['C', 2000, 3000]\n*/\n// eslint-disable-next-line require-jsdoc\nconst normalizeData = (data, schema, valueField, uniqueField, groupBy) => {\n const groupedData = group(schema, data, {\n groupBy: uniqueField\n });\n const uniqueFieldIndex = schema.findIndex(d => d.name === uniqueField);\n const valueFieldIndex = schema.findIndex(d => d.name === valueField);\n const seriesKeyIndex = schema.findIndex(d => d.name === groupBy);\n const seriesKeys = data.map(d => d[seriesKeyIndex]).filter((item, pos, arr) => arr.indexOf(item) === pos).sort();\n const fieldNames = schema.reduce((acc, obj, i) => {\n acc[i] = obj.name;\n return acc;\n }, {});\n const dataArr = groupedData.map((arr) => {\n const tuples = {};\n const rowObj = arr.values.reduce((acc, row) => {\n acc = row.reduce((obj, value, i) => {\n if (i === seriesKeyIndex) {\n obj[value] = row[valueFieldIndex];\n tuples[value] = row;\n } else if (i !== valueFieldIndex) {\n obj[fieldNames[i]] = value;\n }\n return obj;\n }, acc);\n return acc;\n }, {});\n rowObj._tuple = tuples;\n // Set missing values field to zero value\n seriesKeys.forEach((seriesKey) => {\n if (rowObj[seriesKey] === undefined) {\n rowObj[seriesKey] = 0;\n const newArr = new Array(arr.values[0].length);\n newArr[uniqueFieldIndex] = arr.key;\n newArr[seriesKeyIndex] = seriesKey;\n rowObj._tuple[seriesKey] = newArr;\n }\n });\n return rowObj;\n });\n\n return {\n data: dataArr,\n keys: seriesKeys\n };\n};\n/**\n * Generate a stacked representation of data\n * @param {Array} schema schema Array\n * @param {Array} data data array\n * @param {Object} config Configuration object\n * @return {Array} stacked data\n */\nexport default (schema, data, config) => {\n const uniqueField = config.uniqueField;\n const valueField = config.value;\n const groupBy = config.groupBy;\n const sort = config.sort || 'descending';\n const normalizedData = normalizeData(data, schema, valueField, uniqueField, groupBy);\n const keys = normalizedData.keys;\n const map = {};\n const orderBy = config.orderBy;\n const orderIndex = schema.findIndex(d => d.name === orderBy);\n const groupByIndex = schema.findIndex(d => d.name === groupBy);\n if (orderIndex !== -1) {\n keys.forEach((key) => {\n const name = data.find(d => d[groupByIndex] === key);\n map[key] = name[orderIndex];\n });\n normalizedData.keys.sort((a, b) => map[a].localeCompare(map[b]));\n }\n\n const stackData = stack({\n keys: normalizedData.keys,\n offset: config.offset || 'diverging',\n order: sort,\n data: normalizedData.data\n });\n stackData.forEach((seriesData) => {\n seriesData.forEach((dataObj) => {\n dataObj.data = dataObj.data._tuple[seriesData.key];\n });\n });\n return stackData;\n};\n\n","import {\n FieldType,\n getDomainFromData,\n setStyles,\n easeFns,\n selectElement,\n DimensionSubtype\n} from 'muze-utils';\nimport { ScaleType } from '@chartshq/muze-axis';\nimport { transformFactory } from '@chartshq/transform';\nimport { IDENTITY, STACK, GROUP, COLOR, SHAPE, SIZE, ENCODING } from '../enums/constants';\n\nconst BAND = ScaleType.BAND;\n\nexport const getLayerColor = ({ datum, index }, { colorEncoding, colorAxis, colorFieldIndex }) => {\n let rawColor = '';\n let color = '';\n if (colorEncoding && colorEncoding.value instanceof Function) {\n color = colorEncoding.value(datum, index);\n rawColor = colorEncoding.value(datum, index);\n } else {\n rawColor = colorAxis.getRawColor(datum._data[colorFieldIndex]);\n color = colorAxis.getHslString(rawColor);\n }\n return { color, rawColor };\n};\n\nconst transfromColor = (colorAxis, datum, styleType, intensity) => {\n datum.meta.stateColor[styleType] = datum.meta.stateColor[styleType] || datum.meta.originalColor;\n const fillColorInfo = colorAxis.transformColor(datum.meta.stateColor[styleType], intensity);\n datum.meta.stateColor[styleType] = fillColorInfo.hsla;\n\n return fillColorInfo;\n};\n\nexport const applyInteractionStyle = (context, selectionSet, interactionStyles, config) => {\n const elements = context.getPlotElementsFromSet(selectionSet);\n const axes = context.axes();\n const colorAxis = axes.color;\n const apply = config.apply;\n const interactionType = config.interactionType;\n interactionStyles.forEach((style) => {\n const styleType = style.type;\n elements.style(styleType, ((d) => {\n const { colorTransform, stateColor, originalColor } = d.meta;\n colorTransform[interactionType] = colorTransform[interactionType] || {};\n if (apply && !colorTransform[interactionType][styleType]) {\n // fade selections\n colorTransform[interactionType][styleType] = style.intensity;\n const color = transfromColor(colorAxis, d, styleType, style.intensity).color;\n return color;\n }\n if (!apply && colorTransform[interactionType][styleType]) {\n // unfade selections\n colorTransform[interactionType][styleType] = null;\n return transfromColor(colorAxis, d, styleType, style.intensity.map(e => -e)).color;\n }\n const [h, s, l, a] = stateColor[styleType] ? stateColor[styleType] : originalColor;\n return `hsla(${h * 360},${s * 100}%,${l * 100}%, ${a || 1})`;\n }));\n });\n};\n\n/**\n *\n *\n * @param {*} selectionSet\n * @param {*} className\n * @param {*} hasFaded\n */\nexport const fadeUnfadeSelection = (context, selectionSet, hasFaded, interaction) => {\n const interactionConfig = { interaction, apply: hasFaded };\n applyInteractionStyle(context, selectionSet, 'fade', interactionConfig);\n};\n\n/**\n *\n *\n * @param {*} selectionSet\n * @param {*} className\n * @param {*} hasFaded\n */\nexport const focusUnfocusSelection = (context, selectionSet, isFocussed, interaction) => {\n const interactionConfig = { interaction, apply: isFocussed };\n applyInteractionStyle(context, selectionSet, 'focus', interactionConfig);\n};\n\n/**\n *\n *\n * @param {*} axes\n * @returns\n */\nexport const getAxesScales = (axes) => {\n const [xAxis, yAxis] = [ENCODING.X, ENCODING.Y].map(e => axes[e]);\n const [xScale, yScale] = [xAxis, yAxis].map(e => e && e.scale());\n return {\n xAxis,\n yAxis,\n xScale,\n yScale\n };\n};\n\n/**\n *\n *\n * @param {*} encoding\n * @param {*} fieldsConfig\n * @returns\n */\nexport const getEncodingFieldInf = (encoding, fieldsConfig) => {\n const [xField, yField, x0Field, y0Field, colorField, shapeField, sizeField] =\n [ENCODING.X, ENCODING.Y, ENCODING.X0, ENCODING.Y0, COLOR, SHAPE, SIZE].map(e => encoding[e] &&\n encoding[e].field);\n\n const [xFieldType, yFieldType] = [xField, yField, x0Field, y0Field].map(e => fieldsConfig[e] &&\n fieldsConfig[e].def.type);\n\n const [xFieldSubType, yFieldSubType] = [xField, yField].map(e => fieldsConfig[e] && (fieldsConfig[e].def.subtype ||\n fieldsConfig[e].def.type));\n\n const [xFieldIndex, yFieldIndex, x0FieldIndex, y0FieldIndex] = [xField, yField, x0Field, y0Field]\n .map(e => fieldsConfig[e] && fieldsConfig[e].index);\n\n return {\n xField,\n yField,\n colorField,\n shapeField,\n sizeField,\n x0Field,\n y0Field,\n xFieldType,\n yFieldType,\n xFieldSubType,\n yFieldSubType,\n xFieldIndex,\n yFieldIndex,\n x0FieldIndex,\n y0FieldIndex\n };\n};\n\n/**\n *\n *\n * @param {*} layerConfig\n * @param {*} fieldsConfig\n * @returns\n */\nexport const getValidTransform = (layerConfig, fieldsConfig, encodingFieldInf) => {\n let transformType;\n const {\n transform\n } = layerConfig;\n const {\n xField,\n yField,\n xFieldType,\n yFieldType\n } = encodingFieldInf;\n const groupByField = transform.groupBy;\n const groupByFieldMeasure = fieldsConfig[groupByField] && fieldsConfig[groupByField].def.type === FieldType.MEASURE;\n transformType = transform.type;\n if (!xField || !yField || groupByFieldMeasure || !groupByField || xFieldType === FieldType.DIMENSION &&\n yFieldType === FieldType.DIMENSION) {\n transformType = IDENTITY;\n }\n return transformType;\n};\n\n/**\n *\n *\n * @param {*} dataModel\n * @param {*} config\n * @param {*} transformType\n * @returns\n */\nexport const transformData = (dataModel, config, transformType, encodingFieldInf) => {\n const data = dataModel.getData({ withUid: true });\n const schema = data.schema;\n const transform = config.transform;\n const {\n xField,\n yField,\n xFieldType,\n yFieldType\n } = encodingFieldInf;\n const uniqueField = xFieldType === FieldType.MEASURE ? yField : xField;\n\n return transformFactory(transformType)(schema, data.data, {\n groupBy: transform.groupBy,\n uniqueField,\n sort: transform.sort || 'none',\n offset: transform.offset,\n orderBy: transform.orderBy,\n value: yFieldType === FieldType.MEASURE ? yField : xField\n }, data.uids);\n};\n\nexport const getIndividualClassName = (d, i, data, context) => {\n const className = context.config().individualClassName;\n let classNameStr = '';\n if (className instanceof Function) {\n classNameStr = className(d, i, data, context);\n }\n return classNameStr;\n};\n\n/*\n * This method resolves the x, y, x0 and y0 values from the transformed data.\n * It also checks the type of transformed data for example, if it is a stacked data\n * then it fetches the y and y0 values from the stacked data.\n * @param {Array.} transformedData transformed data\n * @param {Object} fieldsConfig field definitions\n * @param {string} transformType type of transformed data - stack, group or identity.\n * @return {Array.} Normalized data\n*/\nexport const getNormalizedData = (transformedData, fieldsConfig, encodingFieldInf, transformType) => {\n const transformedDataArr = transformType === IDENTITY ? [transformedData] : transformedData;\n const {\n xFieldType,\n xFieldIndex,\n yFieldIndex,\n x0FieldIndex,\n y0FieldIndex\n } = encodingFieldInf;\n const fieldsLen = Object.keys(fieldsConfig).length;\n /**\n * Returns normalized data from transformed data. It recursively traverses through\n * the transformed data if there it is nested.\n */\n return transformedDataArr.map((data) => {\n const values = transformType === GROUP ? data.values : data;\n return values.map((d) => {\n let pointObj = {};\n let tuple;\n if (transformType === STACK) {\n tuple = d.data || [];\n let y;\n let y0;\n let x;\n let x0;\n if (d[1] >= d[0]) {\n y = x0 = d[1];\n x = y0 = d[0];\n } else {\n y = x0 = d[0];\n x = y0 = d[1];\n }\n\n pointObj = xFieldType === FieldType.MEASURE ? {\n x,\n x0,\n y: tuple[yFieldIndex],\n y0: tuple[yFieldIndex]\n } : {\n x: tuple[xFieldIndex],\n x0: tuple[xFieldIndex],\n y,\n y0\n };\n pointObj._data = tuple;\n pointObj._id = tuple[fieldsLen];\n } else {\n pointObj = {\n x: d[xFieldIndex],\n y: d[yFieldIndex],\n x0: d[x0FieldIndex],\n y0: d[y0FieldIndex]\n };\n pointObj._data = d;\n pointObj._id = d[fieldsLen];\n }\n return pointObj;\n });\n }).filter(d => d.length);\n};\n\nexport const calculateDomainFromData = (data, encodingFieldInf, transformType) => {\n const {\n xFieldSubType,\n yFieldSubType,\n xField,\n yField,\n x0Field,\n y0Field\n } = encodingFieldInf;\n const domains = {};\n const yEnc = ENCODING.Y;\n const xEnc = ENCODING.X;\n if (xField) {\n domains.x = getDomainFromData(data, x0Field || transformType === STACK ? [xEnc, ENCODING.X0] : [xEnc, xEnc],\n xFieldSubType);\n }\n if (yField) {\n domains.y = getDomainFromData(data, y0Field || transformType === STACK ? [ENCODING.Y0, ENCODING.Y] :\n [yEnc, yEnc], yFieldSubType);\n }\n\n return domains;\n};\n\nexport const attachDataToVoronoi = (voronoi, points) => {\n voronoi.data([].concat(...points).filter(d => d._id !== undefined).map((d) => {\n const point = d.update;\n return {\n x: point.x,\n y: point.y,\n data: d\n };\n }));\n};\n\n/**\n *\n *\n * @param {*} target\n * @param {*} styles\n * @param {*} remove\n */\nexport const updateStyle = (target, styles, remove) => {\n for (const key in styles) {\n if ({}.hasOwnProperty.call(styles, key)) {\n target.style(key, remove ? null : styles[key]);\n }\n }\n};\n\n/**\n *\n *\n * @param {*} mount\n * @param {*} context\n */\nexport const animateGroup = (mount, context) => {\n let groupTransition;\n let update;\n const { transition, groupAnimateStyle } = context;\n const { duration, effect, disabled } = transition;\n if (groupAnimateStyle) {\n setStyles(mount.node(), groupAnimateStyle.enter);\n update = groupAnimateStyle.update;\n if (!disabled) {\n groupTransition = mount.transition()\n .ease(easeFns[effect])\n .duration(duration)\n .on('end', function () {\n updateStyle(selectElement(this), update, true);\n });\n } else {\n groupTransition = mount;\n }\n updateStyle(groupTransition, update);\n }\n};\n\nexport const positionPoints = (context, points) => {\n const positioner = context.encodingTransform();\n if (positioner) {\n return positioner(points, context, { smartLabel: context._dependencies.smartLabel });\n }\n return points;\n};\n\n/**\n * Gets the width of each group. It gets the width from axis if it is available for\n * example when the scale is nominal else it calculates the width from the\n * range of the axis and number of data points.\n *\n * @param {SimpleAxis} axis instance of axis\n * @param {number} minDiff Minimum difference between data points\n * @return {number} width of each bar\n * @private\n*/\nexport const getGroupSpan = (axis, minDiff) => {\n let groupSpan;\n const width = axis.getUnitWidth();\n const scale = axis.scale();\n const range = scale.range();\n const domain = scale.domain();\n !width ? groupSpan = (Math.abs(range[1] - range[0]) / Math.abs(domain[1] - domain[0])) * minDiff :\n (groupSpan = width);\n\n return groupSpan;\n};\n\nexport const getPlotMeasurement = (context, dimensionalValues) => {\n const fieldInfo = context.encodingFieldsInf();\n const axes = context.axes();\n const transformType = context.transformType();\n const config = context.config();\n const bandScale = context._bandScale;\n\n return ['x', 'y'].map((type) => {\n let span = 0;\n let groupSpan = 0;\n let padding = 0;\n let offsetValues = [];\n if (fieldInfo[`${type}FieldType`] === FieldType.DIMENSION) {\n let actualGroupWidth;\n const isTemporal = fieldInfo[`${type}FieldSubType`] === DimensionSubtype.TEMPORAL;\n const timeDiff = isTemporal ? context.dataProps().timeDiffs[type] : 0;\n const axis = axes[type];\n const pad = config[`pad${type.toUpperCase()}`];\n const innerPadding = config.innerPadding;\n const keys = dimensionalValues;\n const scale = axis.scale();\n groupSpan = getGroupSpan(axis, timeDiff);\n const isAxisBandScale = axis.constructor.type() === BAND;\n const axisPadding = axis.config().padding;\n // If it is a grouped bar then the width of each bar in a grouping is retrieved from\n // a band scale. The band scale will have range equal to width of one group of bars and\n // the domain is set to series keys.\n if (transformType === 'group') {\n const groupPadding = isAxisBandScale ? 0 : axisPadding * groupSpan / 2;\n bandScale.range([groupPadding, groupSpan - groupPadding]).domain(keys).paddingInner(innerPadding);\n span = bandScale.bandwidth();\n actualGroupWidth = groupSpan - (isAxisBandScale ? 0 : axisPadding * groupSpan);\n offsetValues = keys.map(key => bandScale(key) - (isAxisBandScale ? 0 : (groupSpan / 2)));\n } else if (pad !== undefined) {\n let offset;\n if (isAxisBandScale) {\n const step = scale.step();\n offset = scale.padding() * step;\n span = scale.bandwidth() + offset;\n } else {\n span = groupSpan;\n }\n offsetValues = keys.map(() => (isAxisBandScale ? -(offset / 2) : -(span / 2)));\n } else {\n padding = isAxisBandScale ? 0 : axisPadding * groupSpan;\n span = groupSpan - padding;\n actualGroupWidth = span;\n offsetValues = keys.map(() => (isAxisBandScale ? 0 : -(span / 2)));\n }\n\n groupSpan = actualGroupWidth;\n padding = isAxisBandScale ? axisPadding * axis.scale().step() : axisPadding * groupSpan;\n }\n\n return {\n span,\n offsetValues,\n groupSpan,\n padding\n };\n });\n};\n","import { nextFrame } from 'muze-utils';\nimport { getValidTransform, getEncodingFieldInf } from '../helpers';\nimport * as PROPS from '../enums/props';\n\nexport const listenerMap = context => [\n {\n props: [PROPS.TRANSFORMED_DATA],\n listener: fetch => fetch(PROPS.DATA, PROPS.CONFIG, (dataModel, config) => {\n const dataModelValue = dataModel.value;\n const configValue = config.value;\n const encodingValue = configValue && configValue.encoding;\n if (dataModelValue && encodingValue) {\n const fieldsConfig = dataModelValue.getFieldsConfig();\n const encodingFieldsInf = getEncodingFieldInf(encodingValue, fieldsConfig);\n context.encodingFieldsInf(encodingFieldsInf);\n context.transformType(getValidTransform(configValue, fieldsConfig, encodingFieldsInf));\n return context.getTransformedData(dataModelValue, configValue, context.transformType(),\n encodingFieldsInf);\n }\n return null;\n }),\n type: 'computed'\n },\n {\n props: [PROPS.NORMALIZED_DATA],\n listener: fetch => fetch(PROPS.TRANSFORMED_DATA, (transformedData) => {\n const transformedDataValue = transformedData.value;\n if (transformedDataValue) {\n const fieldsConfig = context.data().getFieldsConfig();\n return context.getNormalizedData(transformedDataValue, fieldsConfig);\n }\n return null;\n }),\n type: 'computed'\n },\n {\n props: [PROPS.DOMAIN],\n listener: fetch => fetch(PROPS.NORMALIZED_DATA, (normalizedData) => {\n const normalizedDataValue = normalizedData.value;\n if (normalizedDataValue) {\n return context.calculateDomainFromData(normalizedDataValue, context.encodingFieldsInf(),\n context.data().getFieldsConfig());\n }\n return null;\n }),\n type: 'computed'\n },\n {\n props: [PROPS.DATA],\n listener: (data) => {\n if (data[1]) {\n nextFrame(() => {\n context.store().commit(PROPS.DATA_UPDATED, true);\n });\n }\n },\n type: 'registerImmediateListener'\n },\n {\n props: [PROPS.MOUNT, PROPS.DATA_UPDATED],\n listener: (mount, dataUpdated) => {\n if (mount[1] && dataUpdated[1]) {\n context.render(mount[1]);\n context.dependencies().throwback.commit('onlayerdraw', true);\n }\n },\n type: 'registerChangeListener'\n }\n];\n\n","import { mergeRecursive } from 'muze-utils';\nimport * as PROPS from '../enums/props';\n\nexport const defaultOptions = {\n [PROPS.CONFIG]: {\n value: null,\n meta: {\n sanitization: (config, oldConfig, context) => {\n const constructor = context.constructor;\n const newConf = mergeRecursive({}, constructor.defaultConfig());\n return constructor.defaultPolicy(newConf, config);\n }\n }\n },\n [PROPS.DATA]: {\n value: null,\n meta: {\n preset: (data, context) => {\n if (context._cacheEnabled) {\n context._cachedData.push(data);\n } else {\n context._cachedData = [data];\n }\n }\n }\n },\n [PROPS.MOUNT]: {\n value: null\n },\n [PROPS.AXES]: {\n value: null\n },\n [PROPS.MEASUREMENT]: {\n value: null\n }\n};\n","import {\n getUniqueId,\n mergeRecursive,\n Store,\n FieldType,\n selectElement,\n ReservedFields,\n registerListeners,\n transactor,\n DataModel,\n clone\n} from 'muze-utils';\nimport { SimpleLayer } from '../simple-layer';\nimport * as PROPS from '../enums/props';\nimport {\n transformData,\n calculateDomainFromData,\n getNormalizedData,\n applyInteractionStyle\n} from '../helpers';\nimport { listenerMap } from './listener-map';\nimport { defaultOptions } from './default-options';\n\n/**\n * An abstract class which gives defination of common layer functionality like\n * - transfromation data for various {@link mode}\n * - calculating data domain\n * - linking dependent layers\n * - merging policy of configuration\n * - interaction sideffect helpers\n * - retrieving dom elements from data using id\n * - retrieving the physical dimensions of marks\n * - disposing layer\n *\n * Every layer has to extend base layer and give concrete definition.\n * This layer does not have any default visual. A new layer has to define the logic of `render` for rendering the\n * visuals\n *\n * @public\n * @class\n * @namespace Muze\n */\nexport default class BaseLayer extends SimpleLayer {\n\n /**\n * Creates a layer using a configuration and data.\n *\n * @public\n *\n * @param {DataModel} data Instance of DataModel to be used. This DataModel instance serves as the data for a layer.\n * @param {Object} axes Axes instances to be used for rendering the layer. Axes are used for mapping data from\n * value to px.\n * @param {SimpleAxis} axes.x X axis of the layer. Based on the type of variable it gets instance of BandAxis,\n * TimeAxis, ContinuousAxis\n * @param {SimpleAxis} axes.y X axis of the layer. Based on the type of variable it gets instance of BandAxis,\n * TimeAxis, ContinuousAxis\n * @param {ColorAxis} axes.color Axis for coloring a layer using color interpolators\n * @param {ShapeAxis} axes.shape Axis for providing a shape\n * @param {SizeAxis} axes.shape Axis for determining size of a mark using size interpolator\n * @param {LayerConfig} config Configuration of the layer\n * @param {Object} dependencies Dependencies of the layer\n * @param {SmartLabel} smartLabel Smartlabel singleton instance\n */\n constructor (data, axes, config, dependencies) {\n super();\n this.store(new Store({\n DATA: null,\n [PROPS.DATA_UPDATED]: null\n }));\n transactor(this, defaultOptions, this.store().model);\n this.data(data);\n this.axes(axes);\n this.config(config);\n this.alias(this.constructor.formalName() + getUniqueId());\n this.dependencies(dependencies);\n this._points = [];\n this._cachedData = [];\n this._id = getUniqueId();\n this._measurement = {};\n registerListeners(this, listenerMap);\n }\n\n /**\n * Creates a layer instance\n * @return {BaseLayer} Instance of a layer\n */\n static create (...params) {\n return new this(...params);\n }\n\n /**\n * Default configuration of the layer. This configuration gets merged to the user passed configuration using a\n * plolicy. Base layer only returns part of configuraion, any layer overridding base layer should return its own\n * configuration.\n *\n * @public\n * @static\n *\n * @return {Object} Default configuration\n */\n static defaultConfig () {\n return {\n transform: {\n type: 'identity'\n }\n };\n }\n\n /**\n * Policy defines how user config gets merged to default config. The default policy here does a deep copy\n * operation.\n * Any policy which does more than deep copying should define the policy as a static member.\n *\n * @static\n * @public\n *\n * @param {LayerConfig} conf Configuration with which the user config will be merged\n * @param {LayerConfig} userConf Configuration given by the user\n *\n * @return {LayerConfig} Merged layer configuration\n */\n static defaultPolicy (conf, userConf) {\n return mergeRecursive(conf, userConf);\n }\n\n /**\n * Determines a name for a layer. This name of the layer is used in the input data to refer to this layer.\n * ```\n * .layer([\n * mark: 'bar',\n * encoding: { ... }\n * ])\n * ```\n *\n * @static\n * @public\n *\n * @returns {string} name of layer\n */\n static formalName () {\n return 'base';\n }\n\n store (...store) {\n if (store.length) {\n this._store = store[0];\n return this;\n }\n return this._store;\n }\n\n encodingFieldsInf (...fieldsInf) {\n if (fieldsInf.length) {\n this._encodingFieldsInf = fieldsInf[0];\n return this;\n }\n return this._encodingFieldsInf;\n }\n\n encodingTransform (...encodingTransform) {\n if (encodingTransform.length) {\n this._encodingTransform = encodingTransform[0];\n return this;\n }\n return this._encodingTransform;\n }\n\n /**\n * Provides a alias for a layer. Like it's possible to have same layer (like bar) multiple times, but among multiple\n * layers of same type if one layer has to be referred, alias is used. If no alias is given then `formalName` is set\n * as the alias name.\n *\n * @public\n *\n * If used as setter\n * @param {string} alias Name of the alias\n * @return {BaseLayer} Instance of current base layer\n *\n * If used as getter\n * @return {string} Alias of the current layer\n */\n alias (...params) {\n if (params.length) {\n this._alias = params[0];\n return this;\n }\n return this._alias || this.constructor.formalName();\n }\n\n dependencies (...params) {\n if (params.length) {\n this._dependencies = params[0];\n return this;\n }\n return this._dependencies;\n }\n\n enableCaching () {\n this._cacheEnabled = true;\n return this;\n }\n\n clearCaching () {\n this._cacheEnabled = false;\n return this.data(this._cachedData[0]);\n }\n\n /**\n * Serialize the schema. Merge config is used for serialization.\n *\n * @public\n *\n * @return {LayerConfig} Serialized schema\n */\n serialize () {\n return this.config();\n }\n\n /**\n * Returns the unique identifier of this layer. Id is auto generated during the creation proceess of a schema.\n *\n * @return {string} id of the layer\n */\n id () {\n return this._id;\n }\n\n /**\n * Gets the transform method from transform factory based on type of transform. It then calls the\n * transform method with the data and passes the configuration parameters of transform such as\n * groupBy, value field, etc.\n *\n * @public\n *\n * @param {DataModel} dataModel Instance of DataModel\n * @param {Object} config Configuration for transforming data\n * @return {Array.} Transformed data.\n */\n getTransformedData (dataModel, config, transformType, encodingFieldsInf) {\n return transformData(dataModel, config, transformType, encodingFieldsInf);\n }\n\n /**\n * Calculates the domain from the data.\n * It checks the type of field and calculates the domain based on that. For example, if it\n * is a quantitative or temporal field, then it calculates the min and max from the data or\n * if it is a nominal field then it gets all the values from the data of that field.\n * @param {Array} data DataArray\n * @param {Object} fieldsConfig Configuration of fields\n * @return {Array} Domain values array.\n */\n calculateDomainFromData (data) {\n let domains = {};\n const isEmpty = this.data().isEmpty();\n\n if (!isEmpty) {\n domains = calculateDomainFromData(data, this.encodingFieldsInf(), this.transformType());\n }\n return domains;\n }\n\n shouldDrawAnchors () {\n return false;\n }\n\n /**\n * Returns the domain for the axis.\n *\n * @param {string} encodingType type of encoding x, y, etc.\n * @return {Object} Axis domains\n */\n getDataDomain (encodingType) {\n const domains = this.store().get(PROPS.DOMAIN);\n return encodingType !== undefined ? domains[encodingType] || [] : domains;\n }\n\n /**\n * Returns the domain for the axis.\n *\n * @param {string} encodingType type of encoding x, y, etc.\n * @return {Object} Axis domains\n */\n getNormalizedData (transformedData, fieldsConfig) {\n return getNormalizedData(transformedData, fieldsConfig, this.encodingFieldsInf(), this.transformType());\n }\n\n /**\n * Abstract method for getting nearest point\n * @return {BaseLayer} Instance of base layer\n */\n getNearestPoint () {\n return null;\n }\n\n applyInteractionStyle (interactionType, selectionSet, apply) {\n const interactionConfig = this.config().interaction || {};\n\n const interactionStyles = interactionConfig[interactionType];\n if (interactionStyles) {\n applyInteractionStyle(this, selectionSet, interactionStyles, {\n apply,\n interactionType\n });\n }\n }\n\n /**\n *\n *\n * @returns\n * @memberof BaseLayer\n */\n transformType (...transformType) {\n if (transformType.length) {\n this._transformType = transformType[0];\n return this;\n }\n return this._transformType;\n }\n\n /**\n * Renders the layer\n * @return {BaseLayer} Instance of the layer.\n */\n render () {\n return this;\n }\n\n /**\n *\n *\n * @returns\n * @memberof BaseLayer\n */\n elemType () {\n return 'g';\n }\n\n /**\n * Disposes the entire layer\n * @return {BaseLayer} Instance of layer.\n */\n remove () {\n this.store().unsubscribeAll();\n selectElement(this.mount()).remove();\n return this;\n }\n\n /**\n * Stores point in an object with key as the categorical value or temporal value\n *\n * @param {string} key categorical value or temporal value\n * @param {Object} data Information of the data point\n * @return {BarLayer} Instance of bar layer\n */\n cachePoint (key, data) {\n if (key === null) {\n return this;\n }\n const pointMap = this._pointMap;\n !pointMap[key] && (pointMap[key] = []);\n pointMap[key].push(data);\n return this;\n }\n\n /**\n *\n *\n * @param {*} dataProps\n * @returns\n * @memberof BaseLayer\n */\n dataProps (...dataProps) {\n if (dataProps.length) {\n this._dataProps = dataProps[0];\n return this;\n }\n return this._dataProps;\n }\n\n /**\n *\n *\n * @param {*} data\n * @param {*} id\n * @returns\n * @memberof BaseLayer\n */\n getIdentifiersFromData (data) {\n const schema = this.data().getData().schema;\n const fieldsConfig = this.data().getFieldsConfig();\n const identifiers = [[], []];\n const {\n xFieldType,\n yFieldType,\n xField,\n yField\n } = this.encodingFieldsInf();\n\n const [xMeasure, yMeasure] = [xFieldType, yFieldType].map(type => type === FieldType.MEASURE);\n schema.forEach((d, i) => {\n const name = d.name;\n if (fieldsConfig[name].def.type === FieldType.DIMENSION) {\n identifiers[0].push(name);\n identifiers[1].push(data[i]);\n }\n });\n\n if (xMeasure && yMeasure) {\n const xMeasureIndex = fieldsConfig[xField].index;\n const yMeasureIndex = fieldsConfig[yField].index;\n identifiers[0].push(...[xField, yField]);\n identifiers[1].push(...[data[xMeasureIndex], data[yMeasureIndex]]);\n }\n return identifiers;\n }\n\n getPlotSpan () {\n return {\n x: 0,\n y: 0\n };\n }\n\n getPlotPadding () {\n return {\n x: 0,\n y: 0\n };\n }\n\n /**\n *\n *\n * @param {*} identifiers\n * @returns\n * @memberof BaseLayer\n */\n getPointsFromIdentifiers (identifiers, config = {}) {\n const getAllAttrs = config.getAllAttrs;\n const getBBox = config.getBBox;\n if (!this.data()) {\n return [];\n }\n let fieldNames;\n let values;\n if (identifiers instanceof DataModel) {\n const dataObj = identifiers.getData();\n fieldNames = dataObj.schema.map(d => d.name);\n values = dataObj.data;\n } else {\n fieldNames = identifiers[0];\n values = identifiers.slice(1, identifiers.length);\n }\n\n const points = this._points;\n const fieldsConfig = this.data().getFieldsConfig();\n\n const filteredPoints = [].concat(...points).filter((point) => {\n const { _data, _id } = point;\n\n return fieldNames.every((field, idx) => {\n if (field in fieldsConfig && fieldsConfig[field].def.type === FieldType.DIMENSION) {\n return values.findIndex(d => d[idx] === _data[fieldsConfig[field].index]) !== -1;\n } else if (field === ReservedFields.ROW_ID) {\n return values.findIndex(d => d[idx] === _id) !== -1;\n } return true;\n });\n });\n return getAllAttrs ? filteredPoints : filteredPoints.map((d) => {\n const obj = clone(d);\n if (getBBox) {\n const update = obj.update || obj;\n if (obj.size !== undefined) {\n const sizeVal = Math.sqrt(obj.size / Math.PI) * 2;\n update.width = sizeVal;\n update.height = sizeVal;\n update.x -= sizeVal / 2;\n update.y -= sizeVal / 2;\n } else {\n if (update.width === undefined) {\n update.width = 2;\n }\n if (update.height === undefined) {\n update.height = 2;\n }\n }\n }\n\n return obj.update || obj;\n }).sort((a, b) => a.y - b.y);\n }\n\n getTransformedDataFromIdentifiers (identifiers) {\n const { data: identifierData, schema: identifierSchema } = identifiers.getData();\n const normalizedData = this.store().get(PROPS.NORMALIZED_DATA);\n const fieldsConfig = this.data().getFieldsConfig();\n const {\n yField,\n xField,\n yFieldType,\n xFieldType\n } = this.encodingFieldsInf();\n let measureIndex;\n let enc;\n if (xFieldType === FieldType.MEASURE) {\n measureIndex = fieldsConfig[xField].index;\n enc = 'x';\n } else if (yFieldType === FieldType.MEASURE) {\n measureIndex = fieldsConfig[yField].index;\n enc = 'y';\n }\n\n const transformedData = [];\n normalizedData.forEach((dataArr) => {\n dataArr.forEach((dataObj) => {\n const tupleArr = dataObj._data;\n const exist = identifierSchema.every((obj, i) =>\n identifierData.findIndex(d => tupleArr[fieldsConfig[obj.name].index] === d[i]) !== -1);\n if (exist) {\n const transformedVal = dataObj[enc];\n const row = dataObj._data;\n const tuple = {};\n for (const key in fieldsConfig) {\n const index = fieldsConfig[key].index;\n tuple[key] = row[index];\n if (index === measureIndex) {\n tuple[key] = transformedVal;\n }\n }\n transformedData.push(tuple);\n }\n });\n });\n\n return [transformedData, this.data().getData().schema];\n }\n\n /**\n *\n *\n * @param {*} set\n * @returns\n * @memberof BaseLayer\n */\n getPlotElementsFromSet (set) {\n return selectElement(this.mount()).selectAll(this.elemType()).filter(data =>\n (data ? set.indexOf(data._id) !== -1 : false));\n }\n}\n","import {\n selectElement,\n makeElement,\n pathInterpolators,\n Symbols\n} from 'muze-utils';\nimport { updateStyle } from '../../helpers';\n\nconst line = Symbols.line;\n\n/**\n * Draws a line from the points\n * Generates a svg path string\n * @param {Object} params Contains container, points and interpolate attribute.\n */\nexport const drawLine = (context) => {\n let filteredPoints;\n const { container, points, interpolate, connectNullData, className, style, transition } = context;\n const mount = selectElement(container).attr('class', className);\n const curveInterpolatorFn = pathInterpolators[interpolate];\n const linepath = line()\n .curve(curveInterpolatorFn)\n .x(d => d.update.x)\n .y(d => d.update.y)\n .defined(d => d.update.y !== null);\n\n filteredPoints = points;\n if (connectNullData) {\n filteredPoints = points.filter(d => d.update.y !== null);\n }\n\n updateStyle(mount, style);\n let element = makeElement(mount, 'path', [1]);\n element.classed(points[0].className, true);\n if (!transition.disabled) {\n element = element.transition().duration(transition.duration);\n }\n element.attr('d', linepath(filteredPoints))\n .style('fill-opacity', 0);\n return element;\n};\n","import { CLASSPREFIX } from '../../enums/constants';\n\nexport const defaultConfig = {\n classPrefix: CLASSPREFIX,\n defClassName: 'layer-line',\n className: '',\n interpolate: 'linear',\n transform: {\n type: 'group'\n },\n interaction: {\n highlight: [{\n type: 'stroke',\n intensity: [0, 0, -15, 0]\n }],\n fade: [{\n type: 'stroke',\n intensity: [0, 0, +15, 0]\n }],\n focus: [{\n type: 'stroke',\n intensity: [0, 0, +15, 0]\n }]\n },\n nearestPointThreshold: 20,\n encoding: {\n color: {},\n x: {},\n y: {},\n strokeOpacity: {\n value: 1\n }\n },\n transition: {\n effect: 'cubic',\n duration: 1000\n },\n connectNullData: false\n};\n\n","import {\n Voronoi,\n getQualifiedClassName,\n selectElement,\n makeElement,\n FieldType,\n getObjProp\n} from 'muze-utils';\nimport { BaseLayer } from '../../base-layer';\nimport { drawLine } from './renderer';\nimport { defaultConfig } from './default-config';\nimport { ENCODING } from '../../enums/constants';\nimport * as PROPS from '../../enums/props';\nimport {\n attachDataToVoronoi,\n animateGroup,\n getLayerColor,\n positionPoints,\n getIndividualClassName\n} from '../../helpers';\n\nimport './styles.scss';\n\n/**\n * Line Layer creates a line plot.\n * Example :-\n * const config = {\n * encoding = {\n * x: {\n * field: 'date'\n * },\n * y: {\n * field: 'sales'\n * }\n * }\n * };\n * const linelayer = layerFactory.getLayer('line', [dataModel, axes, config]);\n * linelayer.render(container);\n * @class\n */\nexport default class LineLayer extends BaseLayer {\n\n /**\n *Creates an instance of LineLayer.\n * @param {*} args\n * @memberof LineLayer\n */\n constructor (...args) {\n super(...args);\n this._voronoi = new Voronoi();\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof LineLayer\n */\n static formalName () {\n return 'line';\n }\n\n /**\n *\n *\n * @returns\n * @memberof LineLayer\n */\n elemType () {\n return 'path';\n }\n\n /**\n * Default configuration of line layer\n * @return {Object} Default configuration of layer\n */\n static defaultConfig () {\n return defaultConfig;\n }\n\n /**\n *\n *\n * @static\n * @param {*} conf\n * @param {*} userConf\n * @returns\n * @memberof LineLayer\n */\n static defaultPolicy (conf, userConf) {\n const config = BaseLayer.defaultPolicy(conf, userConf);\n const encoding = config.encoding;\n const transform = config.transform;\n const colorField = encoding.color && encoding.color.field;\n\n if (colorField && !transform.groupBy) {\n transform.groupBy = colorField;\n }\n return config;\n }\n\n /**\n * Returns the draw method for line\n * @return {Function} Draw method of line layer\n */\n getDrawFn () {\n return drawLine;\n }\n\n /**\n * Applies selection styles to the elements that fall within the selection set.\n * @param {Array} selectionSet Array of tuple ids.\n * @param {Object} config Configuration for selection.\n * @return {BarLayer} Instance of bar layer.\n */\n highlightPoint () {\n return this;\n }\n\n /**\n * Removes selection styles to the elements that fall within the selection set.\n * @param {Array} selectionSet Array of tuple ids.\n * @param {Object} config Configuration for selection.\n * @return {BarLayer} Instance of bar layer.\n */\n dehighlightPoint () {\n return this;\n }\n\n focusSelection () {\n return this;\n }\n\n focusOutSelection () {\n return this;\n }\n\n fadeOutSelection () {\n return this;\n }\n\n unfadeSelection () {\n return this;\n }\n\n shouldDrawAnchors () {\n return true;\n }\n\n /**\n * Generates the x and y positions for each point\n * @param {Array} data Data Array\n * @param {Object} encoding Visual Encodings of the layer\n * @param {Object} axes Contains the axis\n * @param {number} seriesIndex index of series\n * @return {Array} Array of points\n */\n translatePoints (data, encodingFieldsInf, axes) {\n let points = [];\n const xAxis = axes.x;\n const yAxis = axes.y;\n const colorAxis = axes.color;\n const encoding = this.config().encoding;\n const { xFieldType, yFieldType } = encodingFieldsInf;\n const isXDim = xFieldType === FieldType.DIMENSION;\n const isYDim = yFieldType === FieldType.DIMENSION;\n const key = isXDim ? ENCODING.X : (isYDim ? ENCODING.Y : null);\n const colorEncoding = encoding.color;\n const colorField = colorEncoding.field;\n const fieldsConfig = this.data().getFieldsConfig();\n const colorFieldIndex = colorField && fieldsConfig[colorField].index;\n const style = {};\n const meta = {};\n\n points = data.map((d, i) => {\n const xPx = xAxis.getScaleValue(d.x) + xAxis.getUnitWidth() / 2;\n const yPx = yAxis.getScaleValue(d.y);\n const { color, rawColor } = getLayerColor({ datum: d, index: i }, {\n colorEncoding, colorAxis, colorFieldIndex });\n\n style.stroke = color;\n style['fill-opacity'] = 0;\n meta.stateColor = {};\n meta.originalColor = rawColor;\n meta.colorTransform = {};\n\n const point = {\n enter: {},\n update: {\n x: xPx,\n y: d.y === null ? null : yPx\n },\n style,\n _data: d._data,\n _id: d._id,\n rowId: d._id,\n source: d._data,\n meta\n };\n point.className = getIndividualClassName(d, i, data, this);\n this.cachePoint(d[key], point);\n return point;\n });\n points = positionPoints(this, points);\n return points;\n }\n\n /**\n * Renders the line plot\n * @param {SVGElement} container svg element\n * @return {LineLayer} instance of line layer\n */\n render (container) {\n let points;\n let seriesClassName;\n let style;\n\n const config = this.config();\n const {\n encoding,\n interpolate,\n className,\n defClassName,\n transition\n } = config;\n const store = this._store;\n const normalizedData = store.get(PROPS.NORMALIZED_DATA);\n const transformedData = store.get(PROPS.TRANSFORMED_DATA);\n const fieldsConfig = this.data().getFieldsConfig();\n const axes = this.axes();\n const keys = transformedData.map(d => d.key);\n const qualifiedClassName = getQualifiedClassName(defClassName, this.id(), config.classPrefix);\n const containerSelection = selectElement(container);\n const colorField = encoding.color.field;\n const colorFieldIndex = fieldsConfig[colorField] && fieldsConfig[colorField].index;\n\n this._points = [];\n this._pointMap = {};\n containerSelection.classed(qualifiedClassName.join(' '), true);\n containerSelection.classed(className, true);\n makeElement(container, 'g', normalizedData, null, {\n enter: (group) => {\n animateGroup(group, {\n transition,\n groupAnimateStyle: {\n enter: {\n 'stroke-opacity': 0,\n 'fill-opacity': this.getPathStyle()['fill-opacity']\n },\n update: {\n 'stroke-opacity': encoding.strokeOpacity.value\n }\n }\n });\n },\n update: (group, dataArr, i) => {\n points = this.translatePoints(dataArr, this.encodingFieldsInf(), axes, i);\n this._points.push(points);\n seriesClassName = `${qualifiedClassName[0]}-${keys[i] || i}`.toLowerCase();\n\n let color;\n const colorValFn = encoding.color.value;\n const colorVal = points.find(d => d._data[colorFieldIndex] !== null &&\n d._data[colorFieldIndex] !== undefined);\n\n if (colorValFn) {\n color = colorValFn(dataArr, i, normalizedData);\n } else {\n color = axes.color.getColor(colorVal && colorVal._data[colorFieldIndex]);\n }\n\n style = this.getPathStyle(color);\n this.getDrawFn()({\n container: group.node(),\n interpolate,\n points,\n className: seriesClassName,\n transition,\n style: style || {},\n connectNullData: config.connectNullData\n });\n }\n }, d => d[0]._data[colorFieldIndex] || d[0]._id);\n\n attachDataToVoronoi(this._voronoi, this._points);\n return this;\n }\n\n /**\n * Get the css styles need to be applied on the line path\n * @param {string} color Color value\n * @return {Object} Path styles\n */\n getPathStyle (color) {\n return {\n stroke: color,\n 'fill-opacity': '0'\n };\n }\n\n /**\n * Gets the nearest point closest to the given position\n * @param {number} x x position\n * @param {number} y y position\n * @return {Object} Nearest point information\n */\n getNearestPoint (x, y, config) {\n let searchRadius = config.searchRadius;\n const data = this.data();\n\n if (!data || (data && data.isEmpty())) {\n return null;\n }\n\n searchRadius = searchRadius !== undefined ? searchRadius : this.config().nearestPointThreshold;\n const point = this._voronoi.find(x, y, searchRadius);\n const dimensions = getObjProp(point, 'data', 'data', 'update');\n\n if (point) {\n const { _data, _id } = point.data.data;\n const identifiers = this.getIdentifiersFromData(_data, _id);\n return {\n id: identifiers,\n dimensions: [{\n x: dimensions.x,\n y: dimensions.y,\n width: 2,\n height: 2\n }],\n layerId: this.id()\n };\n }\n return null;\n }\n}\n","import {\n easeFns,\n selectElement,\n pathInterpolators,\n Symbols\n} from 'muze-utils';\n\nconst area = Symbols.area;\n/**\n * Draws a line from the points\n * Generates a svg path string\n * @param {Object} params Contains container, points and interpolate attribute.\n */\nconst /* istanbul ignore next */ drawArea = (params) => {\n let filteredPoints;\n const { container, points, style, transition, className, connectNullData, interpolate } = params;\n\n const { effect: easeEffect, duration } = transition;\n const mount = selectElement(container);\n const curveInterpolatorFn = pathInterpolators[interpolate];\n const selection = mount.selectAll('path').data([params.points]);\n const [enterAreaPath, updateAreaPath] = ['enter', 'update'].map(e => area().curve(curveInterpolatorFn)\n .x(d => d[e].x)\n .y1(d => d[e].y)\n .y0(d => d[e].y0)\n .defined(d => d[e].y !== null\n ));\n\n filteredPoints = points;\n mount.attr('class', className);\n if (connectNullData) {\n filteredPoints = points.filter(d => d.update.y !== null);\n }\n const selectionEnter = selection.enter().append('path').attr('d', enterAreaPath(filteredPoints));\n selection.merge(selectionEnter).transition().ease(easeFns[easeEffect])\n .duration(duration)\n .attr('d', updateAreaPath(filteredPoints))\n .each(function (d) {\n const element = selectElement(this);\n\n element.classed(d[0].className, true);\n Object.keys(style).forEach(key => element.style(key, style[key]));\n });\n};\n\nexport default drawArea;\n","import { FieldType } from 'muze-utils';\nimport { defaultConfig } from './default-config';\nimport { LineLayer } from '../line';\nimport drawArea from './renderer';\nimport './styles.scss';\nimport { STACK, ENCODING } from '../../enums/constants';\nimport { getAxesScales, positionPoints, getLayerColor, getIndividualClassName } from '../../helpers';\n\n/**\n * Area Layer creates a area plot.\n * @example\n * const config = {\n * encoding = {\n * x: {\n * field: 'date'\n * },\n * // Top y value\n * y: {\n * field: 'maxTemp'\n * },\n * // Base y value\n * y0: {\n * field: 'minTemp\n * }\n * }\n * };\n * const areaLayer = layerFactory.getLayer('area', [dataModel, axes, config]);\n * areaLayer.render(container);\n * @class\n */\nexport default class AreaLayer extends LineLayer {\n /** oation of line layer\n * @return {Object} Default configuration of layer\n */\n static defaultConfig () {\n return defaultConfig;\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof AreaLayer\n */\n static formalName () {\n return 'area';\n }\n\n /**\n * Calculates the domain from data. It calls its parent class's method which is line layer\n * to get the domain and overwrites the domain according to its need.\n * @return {Array} Domain values\n */\n calculateDomainFromData (data, encodingFieldsInf, fieldsConfig) {\n const domains = super.calculateDomainFromData(data, fieldsConfig);\n [ENCODING.X, ENCODING.Y].forEach((type) => {\n const { [`${type}FieldType`]: fieldType } = encodingFieldsInf;\n if (fieldType === FieldType.MEASURE) {\n domains[type][0] = Math.min(domains[type][0], 0);\n }\n });\n return domains;\n }\n\n /**\n * Returns the drawing method of this layer\n * @return {Function} Draw method\n */\n getDrawFn () {\n return drawArea;\n }\n\n /**\n * Generates the x and y positions for each point\n * @param {Array} data Data Array\n * @param {Object} encoding Visual Encodings of the layer\n * @param {Object} axes Contains the axis\n * @return {Array} Array of points\n */\n translatePoints (data, encodingFieldsInf, axes) {\n let points = [];\n const transformType = this.transformType();\n const colorAxis = axes.color;\n const config = this.config();\n const encoding = config.encoding;\n const colorEncoding = encoding.color;\n const colorField = colorEncoding.field;\n const fieldsConfig = this.data().getFieldsConfig();\n const colorFieldIndex = colorField && fieldsConfig[colorField].index;\n const { xField, yField, y0Field } = encodingFieldsInf;\n const {\n xAxis,\n yAxis\n } = getAxesScales(axes);\n const classNameFn = config.individualClassName;\n const isXDim = fieldsConfig[xField] && fieldsConfig[xField].def.type === FieldType.DIMENSION;\n const isYDim = fieldsConfig[yField] && fieldsConfig[yField].def.type === FieldType.DIMENSION;\n const key = isXDim ? 'x' : (isYDim ? 'y' : null);\n points = data.map((d, i) => {\n const xPx = xAxis.getScaleValue(d.x) + xAxis.getUnitWidth() / 2;\n const yPx = yAxis.getScaleValue(d.y);\n const y0Px = (y0Field || transformType === STACK) ? yAxis.getScaleValue(d.y0) : yAxis.getScaleValue(0);\n const { color, rawColor } = getLayerColor({ datum: d, index: i }, {\n colorEncoding, colorAxis, colorFieldIndex });\n const style = {};\n const meta = {};\n style.fill = color;\n // style['fill-opacity'] = 0;\n meta.stateColor = {};\n meta.originalColor = rawColor;\n meta.colorTransform = {};\n const point = {\n enter: {\n x: xPx,\n y: d.y === null ? d.y : yAxis.getScaleValue(0),\n y0: d.y0 === null ? d.y0 : yAxis.getScaleValue(0)\n },\n update: {\n x: xPx,\n y: d.y === null ? d.y : yPx,\n y0: d.y0 === null ? d.y0 : y0Px\n },\n _id: d._id,\n _data: d._data,\n source: d._data,\n rowId: d._id,\n className: classNameFn ? classNameFn(d, i, data, this) : '',\n style,\n meta\n };\n point.className = getIndividualClassName(d, i, data, this);\n this.cachePoint(d[key], point);\n return point;\n });\n points = positionPoints(this, points);\n return points;\n }\n\n /**\n * Get the css styles need to be applied on the line path\n * @param {string} color Color value\n * @return {Object} Path styles\n */\n getPathStyle (color) {\n return {\n fill: color\n };\n }\n}\n\n","import { CLASSPREFIX } from '../../enums/constants';\n\nexport const defaultConfig = {\n classPrefix: CLASSPREFIX,\n defClassName: 'layer-arc',\n padding: { top: 1, bottom: 1, left: 1, right: 1 },\n className: '',\n minOuterRadius: 10,\n interaction: {\n highlight: [{\n type: 'fill',\n intensity: [0, 0, -15, 0]\n }],\n fade: [{\n type: 'fill',\n intensity: [0, 0, +15, 0]\n }],\n focus: [{\n type: 'fill',\n intensity: [0, 0, +15, 0]\n }]\n },\n height: 100,\n width: 100,\n sort: '',\n cornerRadius: 0,\n padAngle: 0,\n padRadius: 0,\n startAngle: 0,\n endAngle: 360,\n colors: ['#F44336', 'blue', 'green', 'yellow', 'orange', 'purple'],\n transform: {\n type: 'identity'\n },\n encoding: {\n 'stroke-width': {\n value: '2px'\n },\n 'stroke-linejoin': {\n value: 'round'\n },\n angle: {\n value: '1'\n },\n radius: {\n value: '1'\n },\n opacity: {\n value: '1'\n },\n color: {\n value: '1'\n },\n shape: {\n value: '1'\n },\n size: {\n value: '1'\n }\n },\n innerRadiusFixer: 10,\n transition: {\n effect: 'cubic',\n duration: 500\n },\n states: {\n highlight: {\n className: `${CLASSPREFIX}-layer-arc-highlight`\n },\n fadeout: {\n className: `${CLASSPREFIX}-layer-arc-fadeout`\n },\n selected: {\n className: `${CLASSPREFIX}-layer-arc-selected`\n }\n }\n};\n\n","import {\n makeElement,\n selectElement,\n getQualifiedClassName,\n isSimpleObject,\n getDomainFromData,\n Symbols,\n FieldType,\n ReservedFields\n} from 'muze-utils';\nimport { defaultConfig } from './default-config';\nimport { BaseLayer } from '../../base-layer';\nimport * as PROPS from '../../enums/props';\nimport { ASCENDING, OUTER_RADIUS_VALUE } from '../../enums/constants';\nimport { getIndividualClassName } from '../../helpers';\nimport { getRangeValue, getRadiusRange, tweenPie, tweenExitPie, getFieldIndices, getPreviousPoint } from './arc-helper';\nimport './styles.scss';\n\nconst pie = Symbols.pie;\nconst arc = Symbols.arc;\n\n/**\n * Arc Layer creates a plot with polar coordinates\n * Example :-\n * const config = {\n * height: 100,\n * width: 100,\n * startAngle: 0,\n * endAngle: Math.PI,\n * cornerRadius: 10,\n * minOuterRadius: 10,\n * outerRadius: 10,\n * innerRadius: 5,\n * padAngle: 2,\n * padRadius: 2,\n * colors: []\n * padding: {top: 10, bottom: 10, left: 10, right: 10},\n * encoding = {\n * angle: {\n * field: 'date' //Maps to angle of arc\n * },\n * radius: {\n * field: 'sales' // Maps to radius of arc\n * }\n * }\n * };\n * @class\n */\nexport default class ArcLayer extends BaseLayer {\n\n constructor (data, axes, config, dependencies) {\n super(data, axes, config, dependencies);\n this._prevPieData = {};\n }\n\n /**\n * returns the default configuration of the layer\n *\n * @static\n * @return {Object} Default configuration for arc layer\n * @memberof ArcLayer\n */\n static defaultConfig () {\n return defaultConfig;\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof ArcLayer\n */\n static formalName () {\n return 'arc';\n }\n\n /**\n *\n *\n * @returns\n * @memberof ArcLayer\n */\n elemType () {\n return 'path';\n }\n\n /**\n * Transforms data in the appropriate data structure to be consumed by the layer for rendering\n *\n * @param {Object} data data model associated with the layer\n * @param {Object} config configuration of the layer that contains encoding and other parameters\n * @return {Object} Transformed pie data\n * @memberof ArcLayer\n */\n getTransformedData (dataModel, config) {\n let pieData = [];\n const pieIndex = {};\n const {\n startAngle,\n endAngle,\n encoding,\n sort,\n minOuterRadius\n } = config;\n const prevData = this._store.get(PROPS.TRANSFORMED_DATA) || [];\n const fieldsConfig = this.data().getFieldsConfig();\n const {\n angleIndex,\n sizeIndex,\n radiusIndex,\n colorIndex\n } = getFieldIndices(encoding, fieldsConfig);\n const dataVal = dataModel.getData();\n const data = dataVal.data;\n const uids = dataVal.uids;\n\n this._prevPieData = {};\n\n prevData.forEach((e, index) => {\n this._prevPieData[e.uid] = [e, index];\n pieIndex[e.index] = e;\n });\n // Creating pie data using angle field provided. If the angle field is a dimension,\n // all the angles will be equal(360/number of dimensions)\n\n pieData = pie()\n .startAngle((startAngle / 180) * Math.PI)\n .endAngle(Math.PI * endAngle / 180)\n .value(d => d[angleIndex] || 1)\n .sortValues(null);\n\n sort.length && radiusIndex && pieData.sort((a, b) => {\n if (sort === ASCENDING) {\n return a[radiusIndex] - b[radiusIndex];\n } return b[radiusIndex] - a[radiusIndex];\n });\n const sizeVal = data.reduce((acc, d) => acc + (d[sizeIndex] || 0), 1);\n\n // Adding the radius field values to each data point in pie data\n pieData = pieData(data).map((d, i) => {\n d.outerRadiusValue = data[i][radiusIndex] || minOuterRadius;\n d.innerRadius = config.innerRadius;\n d.colorVal = data[i][colorIndex];\n d.angleVal = data[i][angleIndex];\n d.sizeVal = sizeVal;\n d.uid = uids[i];\n d.rowId = d.uid;\n d.source = data[i];\n d._previousInfo = this._prevPieData[d.uid] ? this._prevPieData[d.uid][0] :\n getPreviousPoint(pieIndex, d.index, config);\n return d;\n });\n return pieData;\n }\n\n /**\n * Returns normalized data after transformation (it is the same in the case of pie layer)\n *\n * @param {Object} data transformed data\n * @return {Object} normalized data\n * @memberof ArcLayer\n */\n getNormalizedData (data) {\n return data;\n }\n\n /**\n *\n *\n * @param {Object} data\n * @return {}\n * @memberof ArcLayer\n */\n calculateDomainFromData (data) {\n const domainKey = OUTER_RADIUS_VALUE;\n return {\n radius: getDomainFromData([data], [domainKey, domainKey])\n };\n }\n\n /**\n *\n *\n * @param {Object} x\n * @param {Object} y\n * @return {}\n * @memberof ArcLayer\n */\n getNearestPoint (x, y, config = {}) {\n const dataPoint = selectElement(config.event.target).data()[0];\n if (isSimpleObject(dataPoint)) {\n const { data, uid } = dataPoint.datum;\n return {\n id: this.getIdentifiersFromData(data, uid),\n layerId: this.id()\n };\n }\n return null;\n }\n\n /**\n *\n *\n * @param {*} set\n * @returns\n * @memberof ArcLayer\n */\n getPlotElementsFromSet (set) {\n return selectElement(this.mount()).selectAll(this.elemType()).filter(d => set.indexOf(d.datum.uid) !== -1);\n }\n\n /**\n *\n *\n * @param {Object} container\n * @return {}\n * @memberof ArcLayer\n */\n render (container) {\n const {\n height,\n width\n } = this.measurement();\n const {\n classPrefix,\n defClassName,\n minOuterRadius,\n innerRadius,\n outerRadius,\n cornerRadius,\n padAngle,\n padRadius,\n padding,\n transition,\n innerRadiusFixer\n } = this.config();\n const sizeAxis = this.axes().size;\n const store = this._store;\n const transformedData = store.get(PROPS.TRANSFORMED_DATA);\n const chartHeight = height - padding.top - padding.bottom;\n const chartWidth = width - padding.left - padding.right;\n const qualClassName = getQualifiedClassName(defClassName, this.id(), classPrefix);\n // Sets range for radius\n const range = getRadiusRange(chartWidth, chartHeight, {\n minOuterRadius,\n innerRadius,\n outerRadius,\n innerRadiusFixer\n });\n const colorAxis = this.axes().color;\n const defaultRadius = outerRadius || Math.min(chartHeight, chartWidth) / 2;\n const radiusDomain = store.get(PROPS.DOMAIN).radius;\n const rangeValueGetter = d => getRangeValue(d, range, radiusDomain, defaultRadius, sizeAxis);\n // This returns a function that generates the arc path based on the datum provided\n const path = arc()\n // .outerRadius(d => rangeValueGetter(d))\n .innerRadius(innerRadius ? Math.min(chartHeight / 2, chartWidth / 2, innerRadius) : 0)\n .cornerRadius(cornerRadius)\n .padAngle(padAngle)\n .padRadius(padRadius);\n this._chartWidth = chartWidth;\n this._chartHeight = chartHeight;\n // Creating the group that holds all the arcs\n const g = makeElement(selectElement(container), 'g', [1], `${qualClassName[0]}-group`)\n .classed(`${qualClassName[1]}-group`, true)\n .attr('transform', `translate(${chartWidth / 2},${chartHeight / 2})`);\n const tween = (elem) => {\n makeElement(elem, 'path', (d, i) => [{\n datum: d,\n index: i,\n arcFn: path,\n meta: {\n originalColor: colorAxis.getRawColor(d.colorVal),\n stateColor: {},\n colorTransform: {}\n }\n }], `${qualClassName[0]}-path`)\n .style('fill', d => colorAxis.getColor(d.datum.colorVal))\n .transition()\n .duration(transition.duration)\n .attrTween('d', (...params) => tweenPie(path, rangeValueGetter, params))\n .attr('class', (d, i) => {\n const individualClass = getIndividualClassName(d, i, transformedData, this);\n return `${qualClassName[0]}-path ${qualClassName[1]}-path-${d.index}\n ${individualClass}`;\n });\n };\n const consecutiveExits = [];\n let exitCounter = 0;\n const tweenExit = (elem, d) => {\n let exitArr = consecutiveExits[exitCounter];\n const oldExitCounter = exitCounter;\n if (!exitArr) {\n exitArr = [{ elem, datum: d }];\n } else if (exitArr[exitArr.length - 1].datum.index === d.index - 1) {\n exitArr.push({ elem, datum: d });\n } else {\n exitCounter++;\n }\n consecutiveExits[oldExitCounter] = exitArr;\n };\n // Creating groups for all the arcs present individually\n makeElement(g, 'g', transformedData, `${qualClassName[0]}`,\n {\n update: tween,\n exit: tweenExit\n })\n .attr('class', (d, i) => `${qualClassName[0]} ${qualClassName[1]}-${i}`);\n tweenExitPie(consecutiveExits, transition, rangeValueGetter, path);\n return this;\n }\n\n /**\n *\n *\n * @param {*} identifiers\n * @returns\n * @memberof BaseLayer\n */\n getPointsFromIdentifiers (identifiers) {\n if (!this.data()) {\n return [];\n }\n const fieldNames = identifiers[0];\n const values = identifiers.slice(1, identifiers.length);\n const pieSlices = selectElement(this.mount()).selectAll('path').data();\n const fieldsConfig = this.data().getFieldsConfig();\n\n const filteredPies = pieSlices.filter((tData) => {\n const data = tData.datum.data;\n const uid = tData.datum.uid;\n return fieldNames.every((field, idx) => {\n if (field in fieldsConfig && fieldsConfig[field].def.type === FieldType.DIMENSION) {\n return values.findIndex(d => d[idx] === data[fieldsConfig[field].index]) !== -1;\n } else if (field === ReservedFields.ROW_ID) {\n return values.findIndex(d => d[idx] === uid) !== -1;\n } return true;\n });\n });\n\n const pieSliceInf = filteredPies[0];\n if (pieSliceInf) {\n const centroid = pieSliceInf.arcFn.centroid(pieSliceInf.datum);\n return [{\n x: centroid[0] + this._chartWidth / 2,\n y: centroid[1] + this._chartHeight / 2,\n width: 2,\n height: 2\n }];\n }\n return [];\n }\n}\n\n","import { getObjProp, interpolator, FieldType, selectElement } from 'muze-utils';\nimport { ANGLE, RADIUS, SIZE, COLOR } from '../../enums/constants';\n\n/**\n * Returns the range value from a value inside the domain\n *\n * @param {Object} domainValue Value whose range has to be returned\n * @return {number} range value\n * @memberof ArcLayer\n */\nexport const getRangeValue = (datum, range, domain, defaultRadius, sizeAxis) => {\n let domainMultiplier = 1;\n const {\n outerRadiusValue,\n sizeVal\n } = datum;\n const sizeAxisDomain = sizeAxis.domain();\n const sizeMultiplier = sizeAxis.getSize(sizeVal) / (sizeAxisDomain ? sizeAxis.range()[1] : sizeAxis.config().value);\n\n domainMultiplier *= (range[1] - range[0]) / (domain[1] - domain[0]);\n const rangeVal = (range[0] + (outerRadiusValue - domain[0]) * domainMultiplier);\n return (rangeVal || defaultRadius) * sizeMultiplier;\n};\n\n/**\n *\n *\n * @memberof ArcLayer\n */\nexport const getRadiusRange = (width, height, config) => {\n const {\n minOuterRadius,\n innerRadius,\n outerRadius,\n innerRadiusFixer\n } = config;\n\n return [Math.max((innerRadius + innerRadiusFixer || 0), minOuterRadius), outerRadius || Math.min(height,\n width) / 2];\n};\nexport const getPreviousPoint = (prevData, currIndex, config) => {\n const prevArc = prevData[currIndex - 1];\n const nextArc = prevData[currIndex];\n\n if (prevArc && nextArc) {\n return {\n startAngle: prevArc.endAngle,\n endAngle: nextArc.startAngle\n };\n } else if (!nextArc) {\n return {\n startAngle: config.endAngle * Math.PI * 2 / 360,\n endAngle: config.endAngle * Math.PI * 2 / 360\n };\n }\n return {\n startAngle: config.startAngle * Math.PI * 2 / 360,\n endAngle: config.startAngle * Math.PI * 2 / 360\n };\n};\n\n/**\n *\n *\n * @param {*} path\n * @param {*} b\n * @returns\n * @memberof ArcLayer\n */\nexport const tweenPie = (path, rangeValueGetter, b) => {\n const { datum } = b[0];\n const outerRadius = rangeValueGetter(datum);\n datum.outerRadius = outerRadius;\n datum._previousInfo.outerRadius = datum._previousInfo.outerRadius || outerRadius;\n return function (t) {\n return path(interpolator()(datum._previousInfo, datum)(t));\n };\n};\n\n/**\n *\n *\n * @param {*} path\n * @param {*} b\n * @returns\n * @memberof ArcLayer\n */\nexport const tweenExitPie = (consecutiveExits, transition, rangeValueGetter, path) => {\n if (consecutiveExits.length > 0) {\n consecutiveExits.forEach((consecutiveExitArr) => {\n const startAngle = consecutiveExitArr[0].datum.startAngle;\n const endAngle = consecutiveExitArr[consecutiveExitArr.length - 1].datum.endAngle;\n const mid = (Math.PI * 2 * startAngle) / ((Math.PI * 2) + startAngle - endAngle);\n\n consecutiveExitArr.forEach((e) => {\n const { elem, datum } = e;\n\n elem.each(function () {\n const gElem = selectElement(this);\n gElem.selectAll('path')\n .transition()\n .duration(transition.duration)\n .attrTween('d', () => function (t) {\n const outerRadius = rangeValueGetter(datum);\n datum.outerRadius = outerRadius;\n return path(interpolator()(datum, {\n startAngle: mid,\n endAngle: mid,\n outerRadius\n })(t));\n })\n .remove();\n gElem.remove();\n });\n });\n });\n }\n};\n\nexport const getFieldIndices = (encoding, fieldsConfig) => {\n const [angleField, radiusField, colorField, sizeField] = [ANGLE, RADIUS, COLOR, SIZE]\n .map(e => encoding[e].field);\n const [angleIndex, sizeIndex, radiusIndex] = [angleField, sizeField, radiusField]\n .map((e) => {\n const conf = fieldsConfig[e];\n if (conf && conf.def.type === FieldType.MEASURE) {\n return conf.index;\n }\n return null;\n });\n const colorIndex = getObjProp(fieldsConfig, colorField, 'index');\n return {\n angleIndex,\n sizeIndex,\n radiusIndex,\n colorIndex\n };\n};\n","import {\n setAttrs,\n setStyles,\n selectElement,\n makeElement,\n getSmartComputedStyle\n} from 'muze-utils';\n\n/**\n * Draws svg text in the specified container.\n * @param {SVGElement} container Container where labels will be appended.\n * @param {Array.} data Data of the elements.\n * @return {Selection} d3 selection of the elements.\n */\nconst drawText = (container, data, config, smartLabel) => {\n const selection = selectElement(container).selectAll('g').data(data);\n\n const selectionMerge = selection.enter().append('g')\n .each(function (dataObj) {\n setAttrs(this, dataObj.enter);\n })\n .merge(selection);\n const style = getSmartComputedStyle(selectElement(container), config.className);\n const fontSize = parseInt(style.fontSize, 10);\n\n smartLabel.setStyle(style);\n selectionMerge.each(function (dataObj) {\n const element = selectElement(this);\n const { update, text, color, textanchor, style: textStyle } = dataObj;\n const background = dataObj.background;\n let backgroundVal;\n if (backgroundVal = background.value) {\n const backgroundPadding = background.padding;\n let diff;\n const { width, height } = smartLabel.getOriSize(dataObj.text);\n const backgroundEl = makeElement(element, 'rect', [1]);\n\n if (textanchor === 'end') {\n diff = width;\n } else if (textanchor === 'start') {\n diff = 0;\n } else {\n diff = width / 2;\n }\n\n setAttrs(backgroundEl.node(), {\n x: update.x - diff - backgroundPadding / 2,\n y: update.y - fontSize - backgroundPadding / 2,\n width: width + backgroundPadding,\n height: height + backgroundPadding\n });\n background && setStyles(backgroundEl, {\n background: backgroundVal\n });\n }\n const textEl = makeElement(element, 'text', d => [d]).text(text);\n const textNode = textEl.node();\n textStyle && setStyles(textNode, textStyle);\n color && setStyles(textNode, {\n fill: color\n });\n dataObj.className && textEl.classed(dataObj.className, true);\n setAttrs(textNode, update);\n textEl.attr('text-anchor', textanchor);\n });\n selection.exit().remove();\n return selection;\n};\n\nexport default drawText;\n","import { CLASSPREFIX } from '../../enums/constants';\n\nexport const defaultConfig = {\n defClassName: 'layer-text',\n classPrefix: CLASSPREFIX,\n className: '',\n transform: {\n type: 'identity'\n },\n interaction: {\n highlight: [{\n type: 'fill',\n intensity: [0, 0, -15, 0]\n }],\n fade: [{\n type: 'fill',\n intensity: [0, 0, +15, 0]\n }],\n focus: [{\n type: 'fill',\n intensity: [0, 0, +15, 0]\n }]\n },\n transition: {\n effect: 'cubic',\n duration: 1000\n },\n encoding: {\n color: {},\n text: {\n value: '',\n background: {\n padding: 10\n }\n }\n },\n states: {\n highlight: {\n className: `${CLASSPREFIX}-layer-text-highlight`\n },\n fadeout: {\n className: `${CLASSPREFIX}-layer-text-fadeout`\n },\n selected: {\n className: `${CLASSPREFIX}-layer-text-selected`\n }\n }\n};\n","import {\n getQualifiedClassName,\n selectElement,\n setStyles,\n createElements\n} from 'muze-utils';\nimport { BaseLayer } from '../../base-layer';\nimport drawText from './renderer';\nimport { defaultConfig } from './default-config';\nimport { getLayerColor, positionPoints, getIndividualClassName } from '../../helpers';\nimport { TEXT_ANCHOR_MIDDLE, ENCODING } from '../../enums/constants';\nimport * as PROPS from '../../enums/props';\n\nimport './styles.scss';\n\n/**\n * Text Layer creates labels. It needs to be passed a data table, axes and configuration\n * of the layer.\n * Example :-\n * const textLayer = layerFactory.getLayer('text', [dataModel, axes, config]);\n * textLayer.render(container);\n * @class\n */\nexport default class TextLayer extends BaseLayer {\n /**\n * Returns the default configuration of the text layer\n * @return {Object} Default configuration of the text layer\n */\n static defaultConfig () {\n return defaultConfig;\n }\n\n static formalName () {\n return 'text';\n }\n\n elemType () {\n return 'text';\n }\n\n /**\n * Generates an array of objects containing x, y, width and height of the points from the data\n * @param {Array.} data Data Array\n * @param {Object} encoding Config\n * @param {Object} axes Axes object\n * @return {Array.} Array of points\n */\n translatePoints (data, encoding, axes) {\n let points = [];\n const colorAxis = axes.color;\n const textEncoding = encoding.text;\n const { field: textField, value, formatter: textFormatter } = textEncoding;\n const colorEncoding = encoding.color;\n const colorField = colorEncoding && colorEncoding.field;\n const fieldsConfig = this.data().getFieldsConfig();\n\n const backgroundEncoding = encoding.text.background;\n const backgroundPadding = backgroundEncoding.padding;\n const backgroundValue = backgroundEncoding.value;\n const colorFieldIndex = fieldsConfig[colorField] ? fieldsConfig[colorField].index : -1;\n const textFieldIndex = textField ? fieldsConfig[textField] && fieldsConfig[textField].index : -1;\n const xEnc = ENCODING.X;\n const yEnc = ENCODING.Y;\n for (let i = 0, len = data.length; i < len; i++) {\n const d = data[i];\n const row = d._data;\n const textValue = textField ? row[textFieldIndex] : value;\n\n const [xPx, yPx] = [xEnc, yEnc].map(type => (axes[type] ? axes[type].getScaleValue(d[type]) +\n axes[type].getUnitWidth() / 2 : 0));\n\n const { color, rawColor } = getLayerColor({ datum: d, index: i },\n { colorEncoding, colorAxis, colorFieldIndex });\n\n const point = {\n enter: {},\n update: {\n x: xPx,\n y: yPx\n },\n text: textFormatter ? textFormatter(textValue) : textValue,\n color,\n background: {\n value: backgroundValue instanceof Function ? backgroundValue(d, i, data, this) : null,\n padding: backgroundPadding\n },\n meta: {\n stateColor: {},\n originalColor: rawColor,\n colorTransform: {}\n },\n style: {},\n _data: row,\n _id: d._id,\n source: d._data,\n rowId: d._id\n };\n\n if (d.x !== null && d.y !== null) {\n points.push(point);\n }\n\n point.className = getIndividualClassName(d, i, data, this);\n }\n\n points = positionPoints(this, points);\n\n return points;\n }\n\n /**\n * Renders the plot in the given container\n * @param {SVGElement} container SVGElement which will hold the plot\n * @return {textLayer} Instance of text layer\n */\n render (container) {\n let points;\n const config = this.config();\n const encoding = config.encoding;\n const normalizedData = this._store.get(PROPS.NORMALIZED_DATA);\n const className = config.className;\n const qualifiedClassName = getQualifiedClassName(config.defClassName, this.id(), config.classPrefix);\n const axes = this.axes();\n const containerSelection = selectElement(container);\n\n containerSelection.classed(`${qualifiedClassName.join(' ')} ${className}`, true);\n createElements({\n data: normalizedData,\n append: 'g',\n selector: 'g',\n container,\n each: (dataArr, group, i) => {\n const node = group.node();\n points = this.translatePoints(dataArr, encoding, axes, i);\n setStyles(node, {\n 'text-anchor': TEXT_ANCHOR_MIDDLE\n });\n drawText(node, points, {\n className: qualifiedClassName[0]\n }, this._dependencies.smartLabel);\n }\n });\n return this;\n }\n}\n","/* global Element, document */\nimport {\n makeElement,\n selectElement,\n easeFns,\n objectIterator,\n getSymbol\n} from 'muze-utils';\n\n/**\n *\n *\n * @param {*} str\n * @returns\n */\nconst checkPath = (str) => {\n if (/^[mzlhvcsqta]\\s*[-+.0-9][^mlhvzcsqta]+/i.test(str) && /[\\dz]$/i.test(str) && str.length > 4) {\n return true;\n }\n return false;\n};\n\n/**\n *\n *\n * @param {*} d\n * @param {*} elem\n */\nconst createShape = function (d, elem) {\n const groupElement = selectElement(elem);\n const { shape, size, update } = d;\n\n if (shape instanceof Promise) {\n shape.then((res) => {\n d.shape = res;\n createShape(d, elem);\n });\n } else if (shape instanceof Element) {\n let newShape = shape.cloneNode(true);\n\n if (newShape.nodeName.toLowerCase() === 'img') {\n const src = newShape.src || newShape.href;\n newShape = document.createElementNS('http://www.w3.org/2000/svg', 'image');\n newShape.setAttribute('href', src);\n }\n const shapeElement = selectElement(newShape);\n if (newShape.nodeName === 'path' || newShape.nodeName === 'image') {\n shapeElement.attr('transform', `scale(${size / 100})`);\n } else {\n shapeElement.attr('height', size);\n shapeElement.attr('width', size);\n }\n shapeElement.attr('x', -size / 2);\n shapeElement.attr('y', -size / 2);\n selectElement(groupElement.node().appendChild(newShape));\n } else if (typeof shape === 'string') {\n let pathStr;\n if (checkPath(shape)) {\n pathStr = shape;\n } else {\n pathStr = getSymbol(shape).size(size)(update);\n }\n makeElement(groupElement, 'path', data => [data]).attr('d', pathStr);\n } else {\n d.shape = 'circle';\n createShape(d, elem);\n }\n};\n\n/**\n * Draws symbols using d3 symbol api\n * @param {Object} params Contains the svg container, points and other symbol related attributes.\n */\n/* istanbul ignore next */ const drawSymbols = (params) => {\n let mergedGroups;\n const { container, points, transition, className } = params;\n const { duration, effect, disabled } = transition;\n const mount = selectElement(container);\n\n mount.attr('class', className);\n const symbolGroups = mount.selectAll('g').data(points, params.keyFn);\n const symbolEnter = symbolGroups.enter().append('g').attr('transform', d => `translate(${d.enter.x},${d.enter.y})`);\n mergedGroups = symbolGroups.merge(symbolEnter)\n .each(function (d) {\n createShape(d, this);\n });\n mergedGroups = disabled ? mergedGroups : mergedGroups.transition().duration(disabled ? 0 : transition.duration);\n mergedGroups.attr('transform', d => `translate(${d.update.x},${d.update.y})`)\n .each(function (d) {\n const style = d.style;\n const element = selectElement(this);\n objectIterator(style, key => element.style(key, style[key]));\n element.attr('class', `${className}`);\n element.classed(d.className, true);\n });\n\n const exitGroups = symbolGroups.exit();\n if (!disabled) {\n exitGroups.transition().ease(easeFns[effect])\n .duration(duration)\n .on('end', function () {\n selectElement(this).remove();\n })\n .style('fill-opacity', 0)\n .style('stroke-opacity', 0);\n } else {\n exitGroups.remove();\n }\n};\n\nexport default drawSymbols;\n","import { CLASSPREFIX } from '../../enums/constants';\n\nexport const defaultConfig = {\n defClassName: 'layer-point',\n className: '',\n classPrefix: CLASSPREFIX,\n defColorStyle: 'stroke',\n interaction: {\n highlight: [{\n type: 'fill',\n intensity: [0, 0, -20, 0]\n }],\n fade: [{\n type: 'fill',\n intensity: [0, 0, +20, 0]\n }],\n focus: [{\n type: 'fill',\n intensity: [0, 0, +20, 0]\n }\n ]\n },\n innerPadding: 0.1,\n nearestPointThreshold: 10,\n transform: {\n type: 'identity'\n },\n transition: {\n effect: 'cubic',\n duration: 1000\n },\n encoding: {\n size: {\n value: 30\n },\n color: { },\n shape: {\n value: 'circle'\n },\n x: {},\n y: {},\n strokeOpacity: {\n value: 0.5\n },\n fillOpacity: {\n value: 0.5\n }\n },\n shapes: ['circle', 'cross', 'diamond', 'square', 'star', 'wye', 'triangle'],\n sizes: [20, 30, 40, 50, 60, 70]\n};\n","import {\n Voronoi,\n selectElement,\n getQualifiedClassName,\n makeElement,\n FieldType,\n Scales\n} from 'muze-utils';\nimport { BaseLayer } from '../../base-layer';\nimport drawSymbols from './renderer';\nimport { defaultConfig } from './default-config';\nimport { ENCODING } from '../../enums/constants';\nimport * as PROPS from '../../enums/props';\nimport {\n attachDataToVoronoi,\n getLayerColor,\n positionPoints,\n getPlotMeasurement,\n getIndividualClassName\n} from '../../helpers';\n\nimport './styles.scss';\n\n/**\n * Point Layer creates point. Itt needs to be passed a data table, axes and configuration\n * of the layer.\n * Example :-\n * const pointLayer = layerFactory.getLayer('point', [data, axes, config]);\n * pointLayer.render(container);\n * @class\n */\nexport default class PointLayer extends BaseLayer {\n\n /**\n * Creates an instance of PointLayer.\n * @param {*} args\n * @memberof PointLayer\n */\n constructor (...args) {\n super(...args);\n this._voronoi = new Voronoi();\n this._bandScale = Scales.band();\n }\n\n /**\n *\n *\n * @returns\n * @memberof PointLayer\n */\n elemType () {\n return 'g';\n }\n\n /**\n * Returns the default configuration of the point layer\n * @return {Object} Default configuration of the point layer\n */\n static defaultConfig () {\n return defaultConfig;\n }\n\n static defaultPolicy (conf, userConf) {\n const config = BaseLayer.defaultPolicy(conf, userConf);\n const encoding = config.encoding;\n const transform = config.transform;\n const colorField = encoding.color && encoding.color.field;\n\n if (colorField) {\n transform.groupBy = colorField;\n }\n return config;\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof PointLayer\n */\n static formalName () {\n return 'point';\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof PointLayer\n */\n static drawFn () {\n return drawSymbols;\n }\n\n /**\n * Generates an array of objects containing x, y, width and height of the points from the data\n * @param {Array.} data Data Array\n * @param {Object} encoding Config\n * @param {Object} axes Axes object\n * @return {Array.} Array of points\n */\n translatePoints (data, encoding, axes, config = {}) {\n let points = [];\n const {\n size: sizeEncoding,\n shape: shapeEncoding,\n color: colorEncoding,\n x,\n y\n } = encoding;\n const sizeField = sizeEncoding.field;\n const sizeValue = sizeEncoding.value;\n const shapeField = shapeEncoding.field;\n const xField = x.field;\n const yField = y.field;\n const { size: sizeAxis, shape: shapeAxis } = axes;\n const fieldsConfig = this.data().getFieldsConfig();\n const isXDim = fieldsConfig[xField] && fieldsConfig[xField].def.type === FieldType.DIMENSION;\n const isYDim = fieldsConfig[yField] && fieldsConfig[yField].def.type === FieldType.DIMENSION;\n const key = isXDim ? ENCODING.X : (isYDim ? ENCODING.Y : null);\n const colorField = colorEncoding && colorEncoding.field;\n const colorFieldIndex = fieldsConfig[colorField] && fieldsConfig[colorField].index;\n const measurement = this._store.get(PROPS.MEASUREMENT);\n const shapeFieldIndex = fieldsConfig[shapeField] && fieldsConfig[shapeField].index;\n const sizeFieldIndex = fieldsConfig[sizeField] && fieldsConfig[sizeField].index;\n const colorAxis = axes.color;\n const { x: offsetX, y: offsetY } = config.offset;\n\n for (let i = 0, len = data.length; i < len; i++) {\n const d = data[i];\n const row = d._data;\n const size = sizeValue instanceof Function ? sizeValue(d, i) : sizeAxis.getSize(row[sizeFieldIndex]);\n const shape = shapeAxis.getShape(row[shapeFieldIndex]);\n\n let [xPx, yPx] = [ENCODING.X, ENCODING.Y].map((type) => {\n const value = d[type] === null ? undefined : d[type];\n const measure = type === ENCODING.X ? measurement.width : measurement.height;\n return !encoding[type].field ? measure / 2 : axes[type].getScaleValue(value);\n });\n\n xPx += offsetX;\n yPx += offsetY;\n\n const { color, rawColor } = getLayerColor({ datum: d, index: i },\n { colorEncoding, colorAxis, colorFieldIndex });\n\n const style = {\n fill: color,\n stroke: color\n };\n\n if (!isNaN(xPx) && !isNaN(yPx)) {\n const point = {\n enter: {\n x: xPx,\n y: yPx\n },\n update: {\n x: xPx,\n y: yPx\n },\n shape,\n size: Math.abs(size),\n meta: {\n stateColor: {},\n originalColor: rawColor,\n colorTransform: {}\n },\n style,\n _data: row,\n _id: d._id,\n source: d._data,\n rowId: d._id\n };\n point.className = getIndividualClassName(d, i, data, this);\n points.push(point);\n this.cachePoint(d[key], point);\n }\n }\n points = positionPoints(this, points);\n return points;\n }\n\n /**\n * Renders the plot in the given container.\n *\n * @param {SVGElement} container SVGElement which will hold the plot\n * @return {BarLayer} Instance of bar layer\n */\n render (container) {\n let maxSize = 0;\n let seriesClassName;\n const config = this.config();\n const keys = this._store.get(PROPS.TRANSFORMED_DATA).map(d => d.key);\n const { transition, className, defClassName, classPrefix } = config;\n const normalizedData = this._store.get(PROPS.NORMALIZED_DATA);\n const containerSelection = selectElement(container);\n const qualifiedClassName = getQualifiedClassName(defClassName, this.id(), classPrefix);\n this._points = [];\n this._pointMap = {};\n\n containerSelection.classed(qualifiedClassName.join(' '), true).classed(className, true);\n\n this._points = this.generateDataPoints(normalizedData, keys);\n\n makeElement(container, 'g', this._points, null, {\n update: (group, points) => {\n maxSize = Math.max(maxSize, ...points.map(d => d.size));\n seriesClassName = `${qualifiedClassName[0]}`;\n this.constructor.drawFn()({\n container: group.node(),\n points,\n className: seriesClassName,\n transition,\n keyFn: d => d._id\n });\n }\n }, data => data[0]._id);\n this._maxSize = Math.sqrt(maxSize / Math.PI) * 2;\n attachDataToVoronoi(this._voronoi, this._points);\n return this;\n }\n\n generateDataPoints (normalizedData, keys) {\n const encoding = this.config().encoding;\n const axes = this.axes();\n const [widthMetrics, heightMetrics] = getPlotMeasurement(this, keys);\n const offsetXValues = widthMetrics.offsetValues || [];\n const offsetYValues = heightMetrics.offsetValues || [];\n return normalizedData.map((dataArr, i) => {\n const measurementConf = this.getMeasurementConfig(offsetXValues[i], offsetYValues[i], widthMetrics.span,\n heightMetrics.span);\n return this.translatePoints(dataArr, encoding, axes, measurementConf);\n }).filter(d => d.length);\n }\n\n getMeasurementConfig (offsetX, offsetY, widthSpan, heightSpan) {\n return {\n offset: {\n x: (offsetX || 0) + widthSpan / 2,\n y: (offsetY || 0) + heightSpan / 2\n },\n span: {\n x: widthSpan,\n y: heightSpan\n }\n };\n }\n\n /**\n * Gets the nearest point from a position.\n * @param {number} x x position\n * @param {number} y y position\n * @return {Object} Point details\n */\n getNearestPoint (x, y) {\n const distanceLimit = Math.max(this._maxSize, this.config().nearestPointThreshold);\n\n if (!this.data()) {\n return null;\n }\n\n const point = this._voronoi.find(x, y, distanceLimit);\n const dimensions = point && point.data.data.update;\n const radius = point ? Math.sqrt(point.data.data.size / Math.PI) : 0;\n\n if (point) {\n const { _data, _id } = point.data.data;\n const identifiers = this.getIdentifiersFromData(_data, _id);\n return {\n id: identifiers,\n dimensions: [{\n x: dimensions.x,\n y: dimensions.y,\n width: radius,\n height: radius\n }],\n layerId: this.id()\n };\n }\n return null;\n }\n}\n","import { makeElement, easeFns } from 'muze-utils';\n\n/**\n *\n *\n * @param {*} elem\n * @param {*} datum\n * @param {*} index\n * @param {*} context\n */\nconst transitionBars = (elem, datum, index, context) => {\n const { transition } = context;\n const { duration, disabled, effect } = transition;\n const selection = elem;\n const selTransition = disabled ? selection : selection.transition().duration(duration).ease(easeFns[effect]);\n const update = datum.update || datum;\n const updateStyle = datum.style || {};\n datum.className && selection.classed(datum.className, true);\n Object.entries(update).forEach(attr => (!isNaN(attr[1]) && selTransition.attr(attr[0], attr[1])));\n Object.entries(updateStyle).forEach(styleObj => selection.style(styleObj[0], styleObj[1]));\n};\n\n/**\n *\n *\n * @param {*} elem\n * @param {*} d\n */\nconst barEnterFn = (elem, d) => {\n const selection = elem;\n const enter = d.enter || {};\n Object.entries(enter).forEach(attr => (!isNaN(attr[1]) && selection.attr(attr[0], attr[1])));\n};\n\n/**\n * Draws rectangles by using d3 selection\n * @param {Object} params Contains container element and points\n * @return {Selection} Bar Selection\n */\n/* istanbul ignore next */ export const drawRects = (params) => {\n const { points, container, keyFn } = params;\n const updateFns = {\n enter (elem, d) { barEnterFn(elem, d); },\n update (elem, d, i) { transitionBars(elem, d, i, params); }\n };\n return makeElement(container, 'rect', points, null, updateFns, keyFn);\n};\n","import { CLASSPREFIX } from '../../enums/constants';\n\nexport const defaultConfig = {\n classPrefix: CLASSPREFIX,\n defClassName: 'layer-bar',\n className: '',\n interaction: {\n highlight: [{\n type: 'fill',\n intensity: [0, 0, -15, 0]\n }],\n fade: [{\n type: 'fill',\n intensity: [0, 0, +15, 0]\n }],\n focus: [{\n type: 'fill',\n intensity: [0, 0, +15, 0]\n }]\n },\n transform: {\n type: 'stack'\n },\n transition: {\n effect: 'cubic',\n duration: 1000\n },\n innerPadding: 0.1,\n encoding: {\n color: {},\n x: {},\n y: {},\n x0: {},\n y0: {}\n },\n states: {\n highlight: {\n className: `${CLASSPREFIX}-layer-bar-highlight`\n },\n fadeout: {\n className: `${CLASSPREFIX}-layer-bar-fadeout`\n },\n selected: {\n className: `${CLASSPREFIX}-layer-bar-selected`\n }\n }\n};\n\n","import { FieldType, DimensionSubtype } from 'muze-utils';\nimport * as PROPS from '../../enums/props';\nimport { STACK } from '../../enums/constants';\nimport { getLayerColor, positionPoints, getIndividualClassName } from '../../helpers';\n\n/**\n *\n *\n * @param {*} type\n * @param {*} fieldInfo\n * @param {*} config\n * @param {*} data\n * @returns\n */\nconst resolveDimByField = (type, axesInfo, config, data) => {\n const spaceType = type === 'x' ? 'width' : 'height';\n const [fieldType, axis] = [config[`${type}FieldType`], axesInfo[`${type}Axis`]];\n const {\n transformType,\n sizeEncoding,\n sizeConfig,\n measurement\n } = config;\n\n const sizeValue = sizeEncoding.value;\n let enter = 0;\n let pos;\n let space = 0;\n let enterSpace = 0;\n if (fieldType !== undefined) {\n if (config[`${type}0Field`]) {\n const minVal = data[type];\n const maxVal = data[`${type}0`];\n let min;\n let max;\n if (minVal === null || maxVal === null) {\n return {\n enterSpace: undefined,\n enter: undefined,\n pos: undefined,\n space: undefined\n };\n } else if (fieldType === FieldType.MEASURE || fieldType === DimensionSubtype.TEMPORAL) {\n min = Math.min(minVal, maxVal);\n max = Math.max(minVal, maxVal);\n } else {\n min = minVal;\n max = maxVal;\n }\n const scales = type === 'x' ? [min, max] : [max, min];\n pos = axis.getScaleValue(scales[0]) + axis.getUnitWidth() / 2;\n space = Math.abs(axis.getScaleValue(scales[1]) - pos) + axis.getUnitWidth() / 2;\n\n enter = pos;\n enterSpace = 0;\n } else if (fieldType === DimensionSubtype.CATEGORICAL || fieldType === DimensionSubtype.TEMPORAL) {\n pos = axis.getScaleValue(data[type]) +\n (sizeConfig[type === 'x' ? 'barWidthOffset' : 'barHeightOffset'] || 0);\n\n space = sizeConfig[type === 'x' ? 'barWidth' : 'barHeight'];\n if (sizeValue !== undefined) {\n const diffPx = sizeValue * space;\n space -= diffPx;\n pos += diffPx / 2;\n }\n enter = pos;\n enterSpace = space;\n } else {\n const zeroPos = axis.getScaleValue(0);\n const axisType = axis.getScaleValue(data[type]);\n const axisType0 = axis.getScaleValue(data[`${type}0`]);\n\n enterSpace = 0;\n if (type === 'x') {\n pos = data[type] < 0 || transformType === STACK ? axisType : zeroPos;\n space = Math.abs(pos - (transformType === STACK ? axisType0 : (data[type] >= 0 ? axisType : zeroPos)));\n } else {\n pos = transformType === STACK || data[type] >= 0 ? axisType : zeroPos;\n space = Math.abs(pos - (transformType === STACK ? axisType0 : (data[type] >= 0 ? zeroPos : axisType)));\n }\n enter = zeroPos;\n }\n } else {\n pos = 0;\n space = measurement[spaceType];\n }\n\n return {\n enterSpace,\n enter,\n pos,\n space\n };\n};\n\n/**\n *\n *\n * @param {*} data\n * @param {*} config\n * @param {*} axes\n * @returns\n */\nconst resolveDimensions = (data, config, axes) => {\n const axesInfo = {\n xAxis: axes.x,\n yAxis: axes.y\n };\n const {\n enterSpace: enterWidth,\n enter: enterX,\n pos: xPos,\n space: width\n } = resolveDimByField('x', axesInfo, config, data);\n\n const {\n enterSpace: enterHeight,\n enter: enterY,\n pos: yPos,\n space: height\n } = resolveDimByField('y', axesInfo, config, data);\n return {\n enter: {\n x: enterX,\n y: enterY,\n width: enterWidth,\n height: enterHeight\n },\n update: {\n x: xPos,\n y: yPos,\n width,\n height\n }\n };\n};\n\n/**\n * Generates an array of objects containing x, y, width and height of the bars from the data\n * @param {Array.} data Data Array\n * @param {Object} encoding Config\n * @param {Object} axes Axes object\n * @param {Object} conf config object for point generation\n * @return {Array.} Array of points\n */\nexport const getTranslatedPoints = (context, data, sizeConfig) => {\n let points = [];\n const encoding = context.config().encoding;\n const axes = context.axes();\n const colorAxis = axes.color;\n const fieldsConfig = context.data().getFieldsConfig();\n const colorEncoding = encoding.color;\n const colorField = colorEncoding.field;\n const sizeEncoding = encoding.size || {};\n const {\n x0Field,\n y0Field,\n xFieldSubType,\n yFieldSubType\n } = context.encodingFieldsInf();\n const measurement = context._store.get(PROPS.MEASUREMENT);\n const isXDim = xFieldSubType === DimensionSubtype.CATEGORICAL || xFieldSubType === DimensionSubtype.TEMPORAL;\n const isYDim = yFieldSubType === DimensionSubtype.CATEGORICAL || yFieldSubType === DimensionSubtype.TEMPORAL;\n const key = isXDim ? 'x' : (isYDim ? 'y' : null);\n const transformType = context.transformType();\n const colorFieldIndex = colorField && fieldsConfig[colorField] && fieldsConfig[colorField].index;\n\n for (let i = 0, len = data.length; i < len; i++) {\n const d = data[i];\n const style = {};\n const meta = {};\n const dimensions = resolveDimensions(d, {\n xFieldType: xFieldSubType,\n yFieldType: yFieldSubType,\n x0Field,\n y0Field,\n transformType,\n measurement,\n sizeConfig,\n sizeEncoding\n }, axes);\n\n const { color, rawColor } = getLayerColor({ datum: d, index: i },\n { colorEncoding, colorAxis, colorFieldIndex });\n\n style.fill = color;\n meta.stateColor = {};\n meta.originalColor = rawColor;\n meta.colorTransform = {};\n\n const update = dimensions.update;\n\n if (!isNaN(update.x) && !isNaN(update.y) && d._id !== undefined) {\n let point = null;\n point = {\n enter: dimensions.enter,\n update,\n style,\n _data: d._data,\n _id: d._id,\n source: d._data,\n rowId: d._id,\n meta\n };\n point.className = getIndividualClassName(d, i, data, context);\n points.push(point);\n // Store each point in a hashmap with key as the dimensional or temporal field value\n context.cachePoint(d[key], point);\n }\n }\n\n points = positionPoints(context, points);\n return points;\n};\n","import {\n getClosestIndexOf,\n getQualifiedClassName,\n selectElement,\n createElements,\n clipElement,\n DimensionSubtype,\n FieldType,\n Scales\n} from 'muze-utils';\nimport { BaseLayer } from '../../base-layer';\nimport { drawRects } from './renderer';\nimport { defaultConfig } from './default-config';\nimport * as PROPS from '../../enums/props';\nimport { getPlotMeasurement } from '../../helpers';\nimport './styles.scss';\nimport { getTranslatedPoints } from './bar-helper';\n\nconst MEASURE = FieldType.MEASURE;\nconst scaleBand = Scales.band;\n\n/**\n * Bar Layer creates a bar plot. It needs to be passed a data table, axes and configuration of the layer.\n *\n * @example\n * const BarLayer = layerFactory.getLayer('bar');\n * BarLayer.create()\n * .config(config)\n * .data(dt)\n * .mountPoint(container);\n * @class\n */\nexport default class BarLayer extends BaseLayer {\n /**\n * Creates an instance of bar layer\n */\n constructor (...params) {\n super(...params);\n this._bandScale = scaleBand();\n this._plotPadding = {\n x: 0,\n y: 0\n };\n this._plotSpan = {\n x: 0,\n y: 0\n };\n this._pointMap = {};\n }\n\n /**\n *\n *\n * @returns\n * @memberof BarLayer\n */\n elemType () {\n return 'rect';\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof BarLayer\n */\n static formalName () {\n return 'bar';\n }\n\n /**\n * Returns the default configuration of the bar layer\n * @return {Object} Default configuration of the bar layer\n */\n static defaultConfig () {\n return defaultConfig;\n }\n\n /**\n *\n *\n * @static\n * @param {*} conf\n * @param {*} userConf\n * @returns\n * @memberof BarLayer\n */\n static defaultPolicy (conf, userConf) {\n const config = BaseLayer.defaultPolicy(conf, userConf);\n const encoding = config.encoding;\n const colorField = encoding.color.field;\n const transform = config.transform;\n\n if (colorField) {\n transform.groupBy = colorField;\n }\n return config;\n }\n\n /**\n *\n *\n * @param {*} data\n * @param {*} fieldsConfig\n * @returns\n * @memberof BarLayer\n */\n calculateDomainFromData (data, encodingFieldInf, fieldsConfig) {\n const domain = super.calculateDomainFromData(data, encodingFieldInf, fieldsConfig);\n ['x', 'y'].forEach((d) => {\n if (encodingFieldInf[`${d}FieldType`] === MEASURE && domain[d]) {\n encodingFieldInf[`${d}0Field}`] ? domain[d] = domain[d].sort((a, b) => a - b) :\n (domain[d][0] = Math.min(domain[d][0], 0));\n }\n });\n return domain;\n }\n\n /**\n * Generates an array of objects containing x, y, width and height of the bars from the data\n * @param {Array.} data Data Array\n * @param {Object} encoding Config\n * @param {Object} axes Axes object\n * @param {Object} conf config object for point generation\n * @return {Array.} Array of points\n */\n translatePoints (data, sizeConfig) {\n return getTranslatedPoints(this, data, sizeConfig);\n }\n\n /**\n * Renders the plot in the given container\n * @param {SVGGroup} container SVGGroup where plot will be rendered.\n * @return {BarLayer} Instance of bar layer.\n */\n render (container) {\n const config = this.config();\n const transition = config.transition;\n const store = this._store;\n const normalizedDataArr = store.get(PROPS.NORMALIZED_DATA);\n const transformedData = store.get(PROPS.TRANSFORMED_DATA);\n const keys = transformedData.map(d => d.key);\n const fieldsConfig = this.data().getFieldsConfig();\n const axes = this.axes();\n const height = axes.y && axes.y.scale().range()[0];\n const width = axes.x && axes.x.scale().range()[1];\n const defClassName = config.defClassName;\n const qualifiedClassName = getQualifiedClassName(defClassName, this.id(), config.classPrefix);\n const className = config.className;\n const containerSelection = selectElement(container);\n const dimensions = Object.values(fieldsConfig).filter(e => e.def.type === FieldType.DIMENSION)\n .map(e => e.index);\n containerSelection.classed(qualifiedClassName.join(' '), true);\n containerSelection.classed(className, true);\n clipElement(container, {\n x: 0,\n y: 0,\n width,\n height\n }, `id-${this.id()}`);\n\n this._points = this.generateDataPoints(normalizedDataArr, keys);\n\n createElements({\n data: this._points,\n container,\n selector: 'g',\n append: 'g',\n each: (points, group, i) => {\n const seriesClassName = `${qualifiedClassName[0]}-${keys[i] || i}`.toLowerCase();\n group.style('display', 'block');\n drawRects({\n container: group.node(),\n points,\n className: seriesClassName,\n transition,\n style: {},\n keyFn: d => dimensions.map(key => d._data[key]).join('-')\n });\n }\n });\n return this;\n }\n\n /**\n *\n *\n * @param {*} normalizedData\n * @param {*} keys\n * @returns\n * @memberof BarLayer\n */\n generateDataPoints (normalizedData, keys) {\n const [barWidthMetrics, barHeightMetrics] = getPlotMeasurement(this, keys);\n const barWidthOffsets = barWidthMetrics.offsetValues || [];\n const barHeightOffsets = barHeightMetrics.offsetValues || [];\n this._plotSpan = {\n x: barWidthMetrics.groupSpan || 0,\n y: barHeightMetrics.groupSpan || 0\n };\n this._plotPadding = {\n x: barWidthMetrics.padding || 0,\n y: barHeightMetrics.padding || 0\n };\n\n this._pointMap = {};\n return normalizedData.map((data, i) => this.translatePoints(data,\n {\n barWidth: barWidthMetrics.span,\n barWidthOffset: barWidthOffsets[i] || 0,\n barHeight: barHeightMetrics.span,\n barHeightOffset: barHeightOffsets[i] || 0\n }));\n }\n\n getPlotPadding () {\n return this._plotPadding;\n }\n\n /**\n * Gets the nearest point of the position passed.\n * @param {number} x x position\n * @param {number} y y position\n * @return {Object} Nearest point.\n */\n getNearestPoint (x, y) {\n if (!this.data()) {\n return null;\n }\n let axis;\n let value;\n let index;\n let points;\n let uniqueFieldType;\n let uniqueFieldIndex;\n let filterData;\n let identifiers;\n let pointFound = null;\n const dataModel = this.data();\n const dataObj = dataModel.getData();\n const fieldsConfig = dataModel.getFieldsConfig();\n const axes = this.axes();\n const data = dataObj.data;\n const pointMap = this._pointMap;\n const {\n xField,\n yField,\n xFieldSubType,\n yFieldSubType\n } = this.encodingFieldsInf();\n\n if (xFieldSubType === FieldType.MEASURE) {\n axis = axes.y;\n value = axis.invert(y);\n uniqueFieldIndex = fieldsConfig[yField].index;\n uniqueFieldType = yFieldSubType;\n } else {\n axis = axes.x;\n value = axis.invert(x);\n uniqueFieldIndex = fieldsConfig[xField].index;\n uniqueFieldType = xFieldSubType;\n }\n\n if (uniqueFieldType === DimensionSubtype.CATEGORICAL) {\n points = pointMap[value];\n }\n\n if (uniqueFieldType === DimensionSubtype.TEMPORAL) {\n filterData = [...new Set(data.map(d => d[uniqueFieldIndex]))];\n index = getClosestIndexOf(filterData, value);\n value = filterData[index];\n points = pointMap[value];\n }\n const len = points && points.length;\n points && points.sort((p1, p2) => p1.update.y - p2.update.y);\n for (let i = 0; i < len; i++) {\n const point = points[i];\n const update = point.update;\n if (x >= update.x && x <= (update.width + update.x) && y >= update.y && y <= (update.height + update.y)) {\n pointFound = point;\n break;\n }\n pointFound = null;\n }\n\n const values = pointFound && pointFound._data;\n if (values) {\n identifiers = this.getIdentifiersFromData(values, pointFound._id);\n }\n return pointFound ? {\n dimensions: [pointFound.update],\n id: identifiers,\n layerId: this.id()\n } : pointFound;\n }\n\n getPlotSpan () {\n return this._plotSpan;\n }\n}\n","import { CLASSPREFIX } from '../../enums/constants';\n\nexport const defaultConfig = {\n defClassName: 'layer-tick',\n className: '',\n classPrefix: CLASSPREFIX,\n interaction: {\n highlight: [{\n type: 'stroke',\n intensity: [0, 0, -15, 0]\n }],\n fade: [{\n type: 'stroke',\n intensity: [0, 0, 15, 0]\n }],\n focus: [{\n type: 'stroke',\n intensity: [0, 0, 15, 0]\n }]\n },\n innerPadding: 0.1,\n transform: {\n type: 'identity'\n },\n transition: {\n effect: 'cubic',\n duration: 1000\n },\n encoding: {\n color: { },\n x: {},\n y: {},\n x0: {},\n y0: {},\n strokeOpacity: {\n value: 0.5\n },\n fillOpacity: {\n value: 0.5\n }\n },\n states: {\n highlight: {\n className: `${CLASSPREFIX}-layer-tick-highlight`\n },\n fadeout: {\n className: `${CLASSPREFIX}-layer-tick-fadeout`\n },\n selected: {\n className: `${CLASSPREFIX}-layer-tick-selected`\n }\n }\n};\n","import { selectElement } from 'muze-utils';\n\n/**\n * Draws ticks by using d3 selection\n * @param {Object} params Contains container element and points\n * @return {Selection} Ticks Selection\n */\nexport default /* istanbul ignore next */ (params) => {\n const { points, container, keyFn, className } = params;\n const mount = selectElement(container);\n const ticks = mount.selectAll('path').data(points, keyFn);\n const ticksEnter = ticks.enter().append('path');\n\n mount.attr('class', className || '');\n ticksEnter.each(function (d) {\n const selection = selectElement(this);\n const enter = d.enter || {};\n Object.entries(enter).forEach(attr => (!isNaN(attr[1]) && selection.attr(attr[0], attr[1])));\n });\n\n ticks.exit().remove();\n return ticks.merge(ticksEnter)\n .each(function (d) {\n const selection = selectElement(this);\n const update = d.update;\n const updateStyle = d.style || {};\n const x0 = update.x0 !== undefined ? update.x0 : update.x;\n const y0 = update.y0 !== undefined ? update.y0 : update.y;\n const path = `M ${update.x} ${update.y} L ${x0} ${y0}`;\n d.className && selection.classed(d.className, true);\n selection.attr('d', path);\n Object.entries(updateStyle).forEach(styleObj => selection.style(styleObj[0], styleObj[1]));\n });\n};\n\n","import { FieldType } from 'muze-utils';\nimport { PointLayer } from '../point';\nimport { defaultConfig } from './default-config';\nimport * as PROPS from '../../enums/props';\nimport { ENCODING } from '../../enums/constants';\nimport drawTicks from './renderer';\nimport './styles.scss';\nimport { getAxesScales, getLayerColor, positionPoints, getIndividualClassName } from '../../helpers';\n\nexport default class TickLayer extends PointLayer {\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof TickLayer\n */\n static defaultConfig () {\n return defaultConfig;\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof TickLayer\n */\n static formalName () {\n return 'tick';\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof TickLayer\n */\n static drawFn () {\n return drawTicks;\n }\n\n /**\n *\n *\n * @returns\n * @memberof TickLayer\n */\n elemType () {\n return 'path';\n }\n\n /**\n * Generates an array of objects containing x, y, width and height of the points from the data\n * @param {Array.} data Data Array\n * @param {Object} encoding Config\n * @param {Object} axes Axes object\n * @return {Array.} Array of points\n */\n translatePoints (data, encoding, axes, config = {}) {\n let points = [];\n const {\n xAxis,\n yAxis\n } = getAxesScales(axes);\n const fieldsConfig = this.data().getFieldsConfig();\n const {\n xField,\n yField,\n x0Field,\n y0Field,\n xFieldType,\n yFieldType\n } = this.encodingFieldsInf();\n const isXDim = xFieldType === FieldType.DIMENSION;\n const isYDim = yFieldType === FieldType.DIMENSION;\n const key = isXDim ? ENCODING.X : (isYDim ? ENCODING.Y : null);\n const colorEncoding = encoding.color;\n const colorField = colorEncoding && colorEncoding.field;\n const colorFieldIndex = fieldsConfig[colorField] && fieldsConfig[colorField].index;\n const measurement = this._store.get(PROPS.MEASUREMENT);\n const colorAxis = axes.color;\n const { x: offsetX, y: offsetY } = config.offset;\n const { x: xSpan, y: ySpan } = config.span;\n for (let i = 0, len = data.length; i < len; i++) {\n let xPx;\n let x0Px;\n let y0Px;\n let yPx;\n const d = data[i];\n const row = d._data;\n if (xField) {\n xPx = xAxis.getScaleValue(d.x) + offsetX;\n x0Px = xPx + xSpan;\n }\n\n if (yField) {\n yPx = yAxis.getScaleValue(d.y) + offsetY;\n y0Px = yPx !== null ? yPx + ySpan : null;\n }\n\n if (!xField) {\n xPx = 0;\n x0Px = measurement.width;\n if (!isNaN(yPx)) {\n yPx += ySpan / 2;\n y0Px = yPx;\n }\n }\n\n if (!yField) {\n yPx = 0;\n y0Px = measurement.height;\n x0Px = xPx += xSpan / 2;\n }\n\n if (x0Field) {\n x0Px = xAxis.getScaleValue(d.x0) + xSpan;\n yPx += ySpan / 2;\n y0Px -= ySpan / 2;\n }\n\n if (y0Field) {\n y0Px = yAxis.getScaleValue(d.y0) + ySpan;\n xPx += xSpan / 2;\n x0Px -= xSpan / 2;\n }\n const style = {};\n const meta = {};\n const { color, rawColor } = getLayerColor({ datum: d, index: i },\n { colorEncoding, colorAxis, colorFieldIndex });\n\n style.stroke = color;\n meta.stateColor = {};\n meta.originalColor = rawColor;\n meta.colorTransform = {};\n if (!isNaN(xPx) && !isNaN(yPx)) {\n const point = {\n enter: {},\n update: {\n x: xPx,\n y: yPx,\n x0: x0Px,\n y0: y0Px\n },\n style,\n _data: row,\n _id: d._id,\n source: row,\n rowId: d._id,\n meta\n };\n point.className = getIndividualClassName(d, i, data, this);\n points.push(point);\n this.cachePoint(d[key], point);\n }\n }\n points = positionPoints(this, points);\n return points;\n }\n\n getMeasurementConfig (offsetX, offsetY, widthSpan, heightSpan) {\n return {\n offset: {\n x: (offsetX || 0),\n y: (offsetY || 0)\n },\n span: {\n x: widthSpan,\n y: heightSpan\n }\n };\n }\n}\n","import { isSimpleObject, mergeRecursive, getObjProp } from 'muze-utils';\n\nconst parseLayerDefinition = (sink, definition, layerDef, layerType) => {\n for (const key in definition) {\n if (Object.hasOwnProperty.call(definition, key)) {\n let strs;\n let propValue;\n const def = definition[key];\n if (isSimpleObject(def)) {\n sink[key] = {};\n parseLayerDefinition(sink[key], def, layerDef, layerType);\n } else if (typeof def === 'string' && (strs = def.split('.')) && strs[0] === layerType) {\n propValue = getObjProp(layerDef, ...strs.slice(1, strs.length));\n if (propValue !== undefined) {\n sink[key] = propValue;\n }\n } else {\n sink[key] = def;\n }\n }\n }\n};\n\nconst sanitizeEncoding = (encoding) => {\n // Create object for each encoding value if encoding value is a string\n for (const key in encoding) {\n if (typeof encoding[key] === 'string') {\n encoding[key] = {\n field: encoding[key]\n };\n }\n }\n};\n\n/**\n * Layer Factory creates layers based on the layer type. All types of layers needs to register in\n * the layer factory. For getting a layer instance, getLayer method needs to invoked with the\n * layerType and other arguments.\n */\nconst layerFactory = (() => {\n const compositeLayers = {};\n const factoryObj = {\n setLayerRegistry: (reg) => {\n factoryObj._layerRegistry = reg;\n },\n getSerializedConf: (mark, layerDef) => {\n let serializedDefs;\n const defs = compositeLayers[mark];\n const newConf = mergeRecursive({}, layerDef);\n\n // If it is a composite layer then resolve all the definitions of each unit layer\n if (defs) {\n serializedDefs = defs.map((unitLayerDef) => {\n const sDef = {};\n parseLayerDefinition(sDef, unitLayerDef, newConf, mark);\n sanitizeEncoding(sDef.encoding);\n return sDef;\n });\n } else {\n const encoding = newConf.encoding;\n // Create object for each encoding value if encoding value is a string\n sanitizeEncoding(encoding);\n serializedDefs = newConf;\n }\n\n return serializedDefs;\n },\n getLayerInstance: (layerDef) => {\n const layerRegistry = factoryObj._layerRegistry;\n layerDef = !(layerDef instanceof Array) ? [layerDef] : layerDef;\n const instances = layerDef.map((layerObj) => {\n const layerConstructor = layerRegistry[layerObj.mark];\n return layerConstructor.create();\n });\n return instances.length === 1 ? instances[0] : instances;\n },\n composeLayers: (layerType, layerDefs) => {\n compositeLayers[layerType] = layerDefs;\n },\n sanitizeLayerConfig: (layerDef) => {\n const newConf = mergeRecursive({}, layerDef);\n sanitizeEncoding(newConf.encoding);\n return newConf;\n }\n };\n return factoryObj;\n})();\n\nexport default layerFactory;\n","import { AreaLayer } from './layers/area';\nimport { ArcLayer } from './layers/arc';\nimport { LineLayer } from './layers/line';\nimport { TextLayer } from './layers/text';\nimport { PointLayer } from './layers/point';\nimport { BarLayer } from './layers/bar';\nimport { BaseLayer } from './base-layer';\nimport * as CONSTANTS from './enums/constants';\nimport { TickLayer } from './layers/tick';\n\nexport const DEFAULT_LAYERS = {\n [CONSTANTS.AREA_LAYER]: AreaLayer,\n [CONSTANTS.ARC_LAYER]: ArcLayer,\n [CONSTANTS.LINE_LAYER]: LineLayer,\n [CONSTANTS.TEXT_LAYER]: TextLayer,\n [CONSTANTS.POINT_LAYER]: PointLayer,\n [CONSTANTS.TICK_LAYER]: TickLayer,\n [CONSTANTS.BAR_LAYER]: BarLayer,\n [CONSTANTS.BASE_LAYER]: BaseLayer\n};\n","/**\n * This file exports constants that are used as enums in the\n * crosstab group implementation.\n */\n/**\n * Width of the crosstab.\n */\nexport const X = 'x';\n/**\n * Width of the crosstab.\n */\nexport const Y = 'y';\n/**\n * Width of the crosstab.\n */\nexport const WIDTH = 'width';\n\n/**\n * Height of the crosstab.\n */\nexport const HEIGHT = 'height';\n\n/**\n * Field referring to object storing measurement configuration.\n */\nexport const MEASUREMENT = 'measurement';\n\n/**\n * Field referring to object storing configuration properties.\n */\nexport const CONFIG = 'config';\n\n/**\n * Width of visual unit in crosstab.\n */\nexport const MIN_UNIT_WIDTH = 'minUnitWidth';\n\n/**\n * Height of visual unit.\n */\nexport const MIN_UNIT_HEIGHT = 'minUnitHeight';\n\n/**\n * Field to store the array of dimensions to facet by.\n */\nexport const DIMENSIONS = 'dimensions';\n\n/**\n * Field to store array of measures to use as x axis.\n */\nexport const MEASURES = 'measures';\n\n/**\n * Field to store the array of dimensions to facet by.\n */\nexport const DIMENSION = 'dimension';\n\n/**\n * Field to store array of measures to use as x axis.\n */\nexport const MEASURE = 'measure';\n\n/**\n * Flag to specify if model should be pivoted.\n */\nexport const PIVOT = 'pivot';\n\n/**\n * Flag to specify format\n */\nexport const FORMAT = 'format';\n\n/**\n * Mount point where the variable will be hosted\n */\nexport const MOUNT = 'mount';\n\n/**\n * Data update flag\n */\nexport const HAS_DATA_UPDATED = 'hasDataUpdated';\n\n/**\n * Field referring to object storing set of rows\n */\nexport const ROWS = 'rows';\n\n/**\n * Field referring to object storing set of columns\n */\nexport const COLUMNS = 'columns';\n\n/**\n * Field referring to object storing set of columns\n */\nexport const COL = 'col';\n\n/**\n * Field referring to object storing set of rows\n */\nexport const ROW = 'row';\n\n/**\n * Field referring to object storing set of columns\n */\nexport const COLUMN = 'column';\n\n/**\n * Field referring to object storing color field\n */\nexport const COLOR = 'color';\n\n/**\n * Field referring to object storing shape field\n */\nexport const SHAPE = 'shape';\n\n/**\n * Field referring to object storing size field\n */\nexport const SIZE = 'size';\n\n/**\n * Field referring to object storing detail field\n */\nexport const DETAIL = 'detail';\n\n/**\n * Field referring to object storing set of layers\n */\nexport const LAYERS = 'layers';\n\n/**\n * Field referring to object storing the transforms\n */\nexport const TRANSFORM = 'transform';\n\n/**\n * Field referring to object storing the transforms\n */\nexport const ORDINAL = 'ordinal';\n\n/**\n * Field referring to object storing the transforms\n */\nexport const LINEAR = 'linear';\n/**\n * Field referring to object storing the transforms\n */\nexport const LEFT = 'left';\n/**\n * Field referring to object storing the transforms\n */\nexport const RIGHT = 'right';\n/**\n * Field referring to object storing the transforms\n */\nexport const TOP = 'top';\n/**\n * Field referring to object storing the transforms\n */\nexport const BOTTOM = 'bottom';\n\n/**\n * Field referring to object storing the transforms\n */\nexport const RETINAL = 'retinal';\n/**\n * Field referring to object storing the transforms\n */\nexport const CELL = 'cell';\n/**\n * Field referring to object storing the transforms\n */\nexport const X_AXES = 'xAxes';\n/**\n * Field referring to object storing the transforms\n */\nexport const Y_AXES = 'yAxes';\n/**\n * Field referring to object storing the transforms\n */\nexport const ENTRY_CELLS = 'entryCell';\n/**\n * Field referring to object storing the transforms\n */\nexport const INITIALIZED = 'initialized';\n/**\n * Field referring to object storing the transforms\n */\nexport const EXIT_CELLS = 'exitCell';\n/**\n * Field referring to object storing the transforms\n */\nexport const AXIS = 'axis';\n/**\n * Field referring to object storing the transforms\n */\nexport const UNIT = 'unit';\n/**\n * Field referring to object storing the transforms\n */\nexport const UPDATED = 'updated';\n/**\n * Field referring to object storing the transforms\n */\nexport const BEFORE_UPDATE = 'beforeupdate';\n/**\n * Field referring to object storing the transforms\n */\nexport const VALUE_MATRIX = 'valueMatrix';\n/**\n * Field referring to object storing the transforms\n */\nexport const FACET_HEADERS = 'facet-headers';\n/**\n * Field referring to object storing the transforms\n */\nexport const RADIUS = 'radius';\n/**\n * Field referring to object storing the transforms\n */\nexport const ANGLE = 'angle';\n/**\n * Field referring to object storing the transforms\n */\nexport const ARC = 'arc';\n/**\n * Field referring to object storing the transforms\n */\nexport const CARTESIAN = 'cartesian';\n/**\n * Field referring to object storing the transforms\n */\nexport const POLAR = 'polar';\n/**\n * Field referring to object storing the transforms\n */\nexport const CATEGORICAL = 'categorical';\n/**\n * Field referring to object storing the transforms\n */\nexport const TEMPORAL = 'temporal';\n/**\n * Field referring to object storing the transforms\n */\nexport const BAR = 'bar';\n/**\n * Field referring to object storing the transforms\n */\nexport const LINE = 'line';\n/**\n * Field referring to object storing the transforms\n */\nexport const POINT = 'point';\n/**\n * Field referring to object storing the transforms\n */\nexport const PRIMARY = 'Primary';\n/**\n * Field referring to object storing the transforms\n */\nexport const SECONDARY = 'Secondary';\n/**\n * Field referring to object storing the transforms\n */\nexport const BOTH = 'both';\n/**\n * Field referring to object storing the transforms\n */\nexport const INTERACTION = 'interaction';\n/**\n * Field referring to object storing the transforms\n */\nexport const GRID_LINES = 'gridLines';\n/**\n * Field referring to object storing the transforms\n */\nexport const GRID_BANDS = 'gridBands';\n/**\n * Field referring to object storing the transforms\n */\nexport const HEADER = 'header';\n/**\n * Field referring to object storing the transforms\n */\nexport const FACET = 'facet';\n\n","import { ROWS, COLUMNS, COLOR, SHAPE, SIZE, DETAIL, LAYERS, TRANSFORM, CONFIG } from '../enums/constants';\n\n/**\n * @module\n * This is the local options semantics based on which setters getters are created and reactivity is initiated.\n * This local object is only valid for Artboard.\n * Artboard merges global and local object both to the model\n *\n * Format\n * PROPERTRY_NAME: {\n * value: // default value of the property,\n * meta: {\n * typeCheck: // The setter value will be checked using this. If the value is function then the setter value\n * // is passed as args.\n * typeExpected: // The output of typecheck action will be tested against this. Truthy value will set the\n * // value to the setter\n * sanitizaiton: // Need for sanitization before type is checked\n * }\n * }\n */\n\nexport default {\n [CONFIG]: {},\n [ROWS]: [],\n [COLUMNS]: [],\n [COLOR]: '',\n [SHAPE]: '',\n [SIZE]: '',\n [DETAIL]: '',\n [LAYERS]: '',\n [TRANSFORM]: []\n};\n","import { ERROR_MSG } from 'muze-utils';\n\n/**\n * Interfaces for VisualGroup. Any new VisualGroup has to implement this class.\n * @class SimpleGroup\n */\nclass SimpleGroup {\n\n /**\n * This method is used to set or get the DataModel instance.\n *\n * @param {DataModel | undefined} dataModel Instance of datamodel.\n\n * @memberof SimpleGroup\n */\n data () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * This method is used to set or get the group specific configuration\n * properties\n *\n * @param {Object | undefined} configObj The input configuration.\n * or instance of visual group.\n * @memberof SimpleGroup\n */\n config () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * This method is used to return a serialized representation of the\n * instance's properties.\n *\n * @memberof SimpleGroup\n */\n serialize () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * This method is used to get or set the measurement object which houses\n * layout properties like width and height.\n *\n * @param {Object | undefined} mObj The measurement properties.\n * @memberof SimpleGroup\n */\n measurement () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n}\n\nexport default SimpleGroup;\n","import { ERROR_MSG } from 'muze-utils';\n\n/**\n *\n *\n * @export\n * @class Variable\n */\nexport default class Variable {\n\n /**\n *\n *\n * @memberof Variable\n */\n type () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n *\n *\n * @memberof Variable\n */\n toString () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n}\n","import Variable from './variable';\n\n/**\n *\n *\n * @class ComposeVars\n * @extends {Variable}\n */\nclass ComposedVars extends Variable {\n\n /**\n *Creates an instance of ComposeVars.\n * @param {*} texts\n * @memberof ComposeVars\n */\n constructor (...texts) {\n super(...texts);\n this.vars(texts);\n }\n\n /**\n *\n *\n * @param {*} params\n * @returns\n * @memberof ComposeVars\n */\n vars (...params) {\n if (params.length) {\n this._vars = params[0];\n return this;\n }\n return this._vars;\n }\n\n /**\n *\n *\n * @param {*} dm\n * @returns\n * @memberof ComposeVars\n */\n data (...dm) {\n if (dm.length) {\n this.vars().forEach(d => d.data(dm[0]));\n return this;\n }\n return this._data;\n }\n\n /**\n *\n *\n * @returns\n * @memberof ComposeVars\n */\n getMembers () {\n const vars = this.vars();\n return vars.map(member => member.getMembers()[0]);\n }\n\n /**\n *\n *\n * @returns\n * @memberof ComposeVars\n */\n type () {\n return this.vars()[0].type();\n }\n\n /**\n *\n *\n * @returns\n * @memberof ComposeVars\n */\n toString () {\n return this.vars().map(d => d.toString()).join(',');\n }\n\n /**\n *\n *\n * @returns\n * @memberof ComposeVars\n */\n numberFormat () {\n return this.vars()[0].numberFormat();\n }\n\n /**\n *\n *\n * @returns\n * @memberof ComposeVars\n */\n format (values) {\n return this.vars()[0].format(values);\n }\n\n /**\n *\n *\n * @returns\n * @memberof ComposedVars\n */\n subtype () {\n return this.vars()[0].subtype();\n }\n\n /**\n *\n *\n * @returns\n * @memberof ComposedVars\n */\n getMinDiff () {\n return this.vars()[0].getMinDiff();\n }\n}\n\nexport default ComposedVars;\n","import { DateTimeFormatter } from 'muze-utils';\nimport Variable from './variable';\n\n/**\n *\n *\n * @export\n * @class Vars\n * @extends {Variable}\n */\nexport default class SimpleVariable extends Variable {\n\n /**\n *Creates an instance of Vars.\n * @param {*} text\n * @memberof Vars\n */\n constructor (text) {\n super();\n this.oneVar(text);\n }\n\n /**\n *\n *\n * @param {*} params\n * @returns\n * @memberof Vars\n */\n oneVar (...oneV) {\n if (oneV.length) {\n this._oneVar = oneV[0];\n return this;\n }\n return this._oneVar;\n }\n\n /**\n *\n *\n * @param {*} dm\n * @returns\n * @memberof Vars\n */\n data (...dm) {\n if (dm.length) {\n this._data = dm[0];\n return this;\n }\n return this._data;\n }\n\n /**\n *\n *\n * @returns\n * @memberof Vars\n */\n toString () {\n return this.oneVar();\n }\n\n /**\n *\n *\n * @memberof SimpleVariable\n */\n numberFormat () {\n if (this.type() === 'measure') {\n const formatter = this.data().getFieldspace().getMeasure()[this.oneVar()]._ref;\n return formatter.numberFormat();\n } return val => val;\n }\n\n /**\n *\n *\n * @memberof SimpleVariable\n */\n format (values) {\n if (values && this.subtype() === 'temporal') {\n const formatter = this.data().getFieldspace().getDimension()[this.oneVar()]._ref.schema.format;\n const dtFormat = new DateTimeFormatter(formatter);\n values = values.map(e => dtFormat.getNativeDate(e));\n }\n return values;\n }\n\n /**\n *\n *\n * @returns\n * @memberof Vars\n */\n getMembers () {\n return [this.oneVar()];\n }\n\n /**\n *\n *\n * @returns\n * @memberof Vars\n */\n type () {\n const fieldDef = this.data().getFieldsConfig()[this.oneVar()].def;\n return fieldDef.type;\n }\n\n /**\n *\n *\n * @returns\n * @memberof Vars\n */\n subtype () {\n const fieldDef = this.data().getFieldsConfig()[this.oneVar()].def;\n return fieldDef.subtype || fieldDef.type;\n }\n\n /**\n *\n *\n * @returns\n * @memberof SimpleVariable\n */\n getMinDiff () {\n const fieldSpace = this.data().getFieldspace();\n return fieldSpace.fieldsObj()[this.oneVar()].getMinDiff();\n }\n\n equals (varInst) {\n return this.oneVar() === varInst.oneVar();\n }\n}\n","import { ComposedVars, SimpleVariable } from '../variable';\nimport { DIMENSION, COLUMNS, ROWS, TEMPORAL } from '../enums/constants';\n\n/**\n * Gets the list of fields in a sorted order by measurement and dimension\n *\n * @param {Array} fieldList List of fields in the view\n * @param {Object} fieldMap Mapping of fields in the datamodel\n * @return {Array} fields sorted by measurement and dimensions\n */\nconst orderFields = (fieldArray, type) => {\n const dimensionArr = [[], []];\n const measureArr = [[], []];\n const temporalArr = [[], []];\n const categoricalArr = [[], []];\n\n fieldArray.forEach((fieldList, index) => {\n fieldList.forEach((field) => {\n if (field.type() === DIMENSION) {\n dimensionArr[index].push(field);\n field.subtype() === TEMPORAL ? temporalArr[index].push(field) : categoricalArr[index].push(field);\n } else {\n measureArr[index].push(field);\n }\n });\n });\n\n const numOfMeasures = measureArr[0].length + (measureArr[1] ? measureArr[1].length : 0);\n\n // Single array of fields\n if (!fieldArray[1]) {\n // Push measures to bottom\n measureArr[1] = type === COLUMNS ? measureArr[0] : [];\n // Push measures to left\n measureArr[0] = type !== COLUMNS ? measureArr[0] : [];\n // Bottom and right dimensions empty\n dimensionArr[1] = [];\n // Left and top filled with dimensions\n dimensionArr[0] = dimensionArr[0];\n if (numOfMeasures === 0) {\n const allDimensions = [...dimensionArr[0], ...dimensionArr[1]];\n if (type === COLUMNS) {\n dimensionArr[1] = allDimensions[allDimensions.length - 1] ? [allDimensions[allDimensions.length - 1]]\n : [];\n allDimensions.splice(-1, 1);\n } else {\n dimensionArr[1] = [];\n }\n dimensionArr[0] = [...allDimensions];\n }\n }\n\n if (dimensionArr[0].length && dimensionArr[1].length && numOfMeasures > 0) {\n dimensionArr[0] = [...dimensionArr[0], ...dimensionArr[1]];\n dimensionArr[1] = [];\n }\n return {\n fields: dimensionArr.map((list, i) => (i === 1 ?\n measureArr[i].concat(dimensionArr[i]) : dimensionArr[i].concat(measureArr[i]))),\n dimensions: [...dimensionArr[0], ...dimensionArr[1]],\n measures: [...measureArr[0], ...measureArr[1]],\n temporal: [...temporalArr[0], ...temporalArr[1]],\n categorical: [...categoricalArr[0], ...categoricalArr[1]]\n };\n};\n\n/**\n * Gets the list of normalized fields\n *\n * @param {Array} fields List of fields in the view\n * @param {Object} fieldMap Mapping of fields in the datamodel\n * @return {Array} fields normalized by measurement and dimensions\n */\nconst normalizeFields = (config, type) => {\n const fieldsArr = [];\n const fields = config[type];\n\n if (!(fields[0] instanceof Array)) {\n fieldsArr[0] = fields;\n } else {\n fieldsArr[0] = fields[0] || [];\n fieldsArr[1] = fields[1] || [];\n }\n return fieldsArr;\n};\n\n/**\n *\n *\n * @param {*} fields\n * @param {*} datamodel\n * @return\n */\nconst convertToVar = (datamodel, fields) => {\n const vars = [];\n\n fields && fields.forEach((field) => {\n if (field instanceof ComposedVars) {\n vars.push(field);\n field.data(datamodel);\n } else {\n vars.push(new SimpleVariable(field).data(datamodel));\n }\n });\n return vars;\n};\n\n/**\n *\n *\n * @param {*} rows\n * @param {*} columns\n * @param {*} datamodel\n * @return\n */\nexport const transformFields = (datamodel, config) => {\n const [rowsInfo, columnsInfo] = [ROWS, COLUMNS].map((fields) => {\n const normalizedFields = normalizeFields(config, fields);\n const norFields = [convertToVar(datamodel, normalizedFields[0])];\n\n if (normalizedFields[1]) {\n norFields[1] = convertToVar(datamodel, normalizedFields[1]);\n }\n return orderFields(norFields, fields);\n });\n const {\n fields: rows,\n dimensions: rowDimensions,\n measures: rowMeasures,\n temporal: rowTemporalFields,\n categorical: rowCategoricalFields\n } = rowsInfo;\n const {\n fields: columns,\n dimensions: columnDimensions,\n measures: columnMeasures,\n temporal: columnTemporalFields,\n categorical: columnCategoricalFields\n } = columnsInfo;\n return {\n rows,\n rowDimensions,\n rowMeasures,\n rowTemporalFields,\n rowCategoricalFields,\n columns,\n columnTemporalFields,\n columnCategoricalFields,\n columnDimensions,\n columnMeasures\n };\n};\n","import { ERROR_MSG, mergeRecursive } from 'muze-utils';\nimport { transformFields } from './field-sanitizer';\nimport { getHeaderAxisFrom } from '../group-helper/group-utils';\nimport { ROW, COLUMN } from '../enums/constants';\n\n/**\n *\n *\n * @export\n * @class VisualEncoder\n */\nexport default class VisualEncoder {\n\n /**\n *\n *\n * @memberof VisualEncoder\n */\n createAxis () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n *\n *\n * @memberof VisualEncoder\n */\n setCommonDomain () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n *\n *\n * @memberof VisualEncoder\n */\n getLayerConfig () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n fieldInfo (...info) {\n if (info.length) {\n this._fieldInfo = mergeRecursive(this._fieldInfo || {}, info[0]);\n return this;\n }\n return this._fieldInfo;\n }\n\n /**\n *\n *\n * @param {*} datamodel\n * @param {*} config\n * @return\n * @memberof VisualEncoder\n */\n fieldSanitizer (datamodel, config) {\n this.fieldInfo(transformFields(datamodel, config));\n return this.fieldInfo();\n }\n\n /**\n *\n *\n * @param {*} params\n * @return\n * @memberof VisualEncoder\n */\n axisFrom (...params) {\n if (params.length) {\n this._axisFrom = params[0];\n return this;\n }\n return this._axisFrom;\n }\n\n /**\n *\n *\n * @param {*} params\n * @return\n * @memberof VisualEncoder\n */\n headerFrom (...params) {\n if (params.length) {\n this._headerFrom = params[0];\n return this;\n }\n return this.__headerFrom;\n }\n\n /**\n *\n *\n * @param {*} axisFrom\n * @return\n * @memberof CartesianEncoder\n */\n setAxisAndHeaders (axisFrom = {}, fields) {\n const [rowHeader, rowAxis] = getHeaderAxisFrom(ROW, fields.rows, axisFrom);\n const [colHeader, colAxis] = getHeaderAxisFrom(COLUMN, fields.columns, axisFrom);\n\n this.axisFrom({\n row: rowAxis,\n column: colAxis\n });\n this.headerFrom({\n row: rowHeader,\n column: colHeader\n });\n return this;\n }\n}\n","import { ContinousAxis, BandAxis, TimeAxis, ColorAxis, SizeAxis, ShapeAxis } from '@chartshq/muze-axis';\n\nexport const scaleMaps = {\n linear: ContinousAxis,\n band: BandAxis,\n temporal: TimeAxis,\n size: SizeAxis,\n color: ColorAxis,\n shape: ShapeAxis\n};\n","import { ScaleType } from '@chartshq/muze-axis';\n\n/**\n * Map of DataModel types to associated field types.\n */\nexport const dataTypeScaleMap = {\n dimension: ScaleType.BAND,\n categorical: ScaleType.BAND,\n measure: ScaleType.LINEAR,\n temporal: ScaleType.TIME\n};\n\n","import { mergeRecursive } from 'muze-utils';\nimport { AxisOrientation } from '@chartshq/muze-axis';\nimport { scaleMaps } from '../enums/scale-maps';\nimport { getAxisType, getAxisKey } from '../group-helper';\nimport { dataTypeScaleMap } from '../data-type-scale-map';\nimport { CATEGORICAL, TEMPORAL, BAR, LINE, POINT, BOTH, Y } from '../enums/constants';\n\n/**\n *\n *\n * @param {*} axisInfo\n * @param {*} field\n * @param {*} axesCreators\n * @return\n */\nconst getAxisConfig = (axisInfo, field, axesCreators) => {\n let axisOrientation;\n const { index, axisIndex, axisType } = axisInfo;\n const { config, position } = axesCreators;\n const userAxisConfig = config.axes ? (config.axes[axisType] || {}) : {};\n const {\n LEFT,\n RIGHT,\n TOP,\n BOTTOM\n } = AxisOrientation;\n const allOrientations = axisType === Y ? [LEFT, RIGHT] : [TOP, BOTTOM];\n\n if (position === BOTH) {\n axisOrientation = allOrientations[axisIndex];\n } else {\n axisOrientation = position;\n }\n const axisConfig = {\n id: `${axisType}-${index}-${axisIndex}`,\n name: field.toString(),\n field: field.toString(),\n labels: { rotation: 0 },\n numberFormat: field.numberFormat(),\n orientation: axisOrientation,\n type: dataTypeScaleMap[field.subtype()]\n };\n userAxisConfig.tickValues = field.format(userAxisConfig.tickValues);\n userAxisConfig.domain = field.format(userAxisConfig.domain);\n\n return mergeRecursive(axisConfig, userAxisConfig);\n};\n\n/**\n *\n *\n * @param {*} axisInfo\n * @param {*} field\n * @param {*} axesCreators\n * @return\n */\nconst createSimpleAxis = (axisConfig, field, axesCreators) => {\n const { labelManager } = axesCreators;\n const Cls = scaleMaps[dataTypeScaleMap[field.subtype()]];\n const simpleAxis = new Cls(axisConfig, { labelManager });\n return simpleAxis;\n};\n\n/**\n *\n *\n * @param {*} axisType\n * @param {*} fieldInfo\n * @param {*} axesCreators\n * @param {*} groupAxes\n * @return\n */\nexport const generateAxisFromMap = (axisType, fieldInfo, axesCreators, groupAxes) => {\n let axisKey;\n const currentAxes = [];\n const { fields, index } = fieldInfo;\n const { cacheMaps } = axesCreators;\n const map = cacheMaps[`${axisType}AxesMap`];\n\n fields.forEach((field, axisIndex) => {\n axisKey = getAxisKey(axisType, index, dataTypeScaleMap[field.subtype()]);\n const axisConfig = getAxisConfig({ index, axisIndex, axisType }, field, axesCreators);\n\n if (!map.has(axisKey)) {\n const xAxis = createSimpleAxis(axisConfig, field, axesCreators);\n currentAxes.push(xAxis);\n } else {\n const axes = map.get(axisKey);\n axes[axisIndex] = axes[axisIndex] ? axes[axisIndex] : createSimpleAxis(axisConfig, field, axesCreators);\n axes[axisIndex]._rotationLock = false;\n axes[axisIndex] && axes[axisIndex].config(axisConfig).domain(axisConfig.domain || []);\n }\n });\n\n if (currentAxes.length) {\n map.set(axisKey, currentAxes);\n }\n\n for (const [key] of map.entries()) {\n if (key === axisKey) {\n groupAxes.add(axisKey);\n }\n }\n return map.get(axisKey);\n};\n\n/**\n *\n *\n * @memberof MatrixResolver\n */\nexport const mutateAxesFromMap = (cacheMaps, axes) => {\n const {\n xAxesMap,\n yAxesMap\n } = cacheMaps;\n const {\n x: xAxisSet,\n y: yAxisSet\n } = axes;\n const xAxes = [];\n const yAxes = [];\n\n xAxisSet.forEach((axisId) => {\n const xAxis = xAxesMap.get(axisId);\n xAxes.push(xAxis);\n });\n yAxisSet.forEach((axisId) => {\n const yAxis = yAxesMap.get(axisId);\n yAxes.push(yAxis);\n });\n return {\n xAxes, yAxes\n };\n};\n\n/**\n * return a default mark based on predefined set of rules of type and subtype of the fields\n *\n * @param {string} colFieldType dimension/measure - temporal/ordinal/nominal\n * @param {string} rowFieldType dimension/measure - temporal/ordinal/nominal\n * @return {Object} return mark type\n */\nexport const getDefaultMark = (colFieldType, rowFieldType) => {\n let mark;\n\n if (colFieldType === CATEGORICAL || rowFieldType === CATEGORICAL) {\n mark = BAR;\n } else if (colFieldType === TEMPORAL || rowFieldType === TEMPORAL) {\n mark = LINE;\n } else {\n mark = POINT;\n }\n\n return mark;\n};\n\n/**\n *\n *\n * @param {*} axesCreators\n * @param {*} [fieldInfo=[]]\n * @return\n */\nexport const createRetinalAxis = (axesCreators, fieldProps = {}) => {\n const { axisType, fieldsConfig } = axesCreators;\n const field = fieldProps.field;\n const axis = [];\n const Cls = scaleMaps[axisType];\n\n fieldProps.type = fieldProps.type ? fieldProps.type : getAxisType(fieldsConfig, field || null);\n axis.push(new Cls(fieldProps));\n return axis;\n};\n\n/**\n *\n *\n * @param {*} arr\n * @param {*} val\n * @return\n */\nexport const getIndex = (arr, val) => {\n let i = 0;\n let arrIndex = -1;\n\n while (arrIndex === -1 && i < arr.length) {\n if (arr[i].toString() === val.toString()) {\n arrIndex = i;\n }\n i++;\n }\n return arrIndex;\n};\n\n/**\n *\n *\n * @param {*} colFields\n * @param {*} rowFields\n * @param {*} userLayerConfig\n * @return\n * @memberof CartesianEncoder\n */\nexport const getLayerConfFromFields = (colFields, rowFields, userLayerConfig) => userLayerConfig.filter((conf) => {\n const userConf = conf instanceof Array ? conf : [conf];\n const encodingArr = [].concat(...userConf.map(d => d.encoding).filter(d => d !== undefined));\n\n if (!encodingArr.length) {\n return true;\n }\n\n const xFields = [].concat(...encodingArr.map(d => [d.x && d.x.field, d.x0 && d.x0.field]))\n .filter(d => d !== undefined && d !== null);\n const yFields = [].concat(...encodingArr.map(d => [d.y && d.y.field, d.y0 && d.y0.field]))\n .filter(d => d !== undefined && d !== null);\n\n if (!xFields.length && !yFields.length) {\n return true;\n }\n\n const colFieldExist = xFields.length ? xFields.every(d => colFields.indexOf(d) !== -1) : false;\n const rowFieldExist = yFields.length ? yFields.every(d => rowFields.indexOf(d) !== -1) : false;\n if (xFields.length && yFields.length) {\n return colFieldExist && rowFieldExist;\n }\n return colFieldExist || rowFieldExist;\n});\n","import { layerFactory } from '@chartshq/visual-layer';\nimport { mergeRecursive } from 'muze-utils';\nimport { generateAxisFromMap, getDefaultMark, getIndex, getLayerConfFromFields } from './encoder-helper';\nimport { retriveDomainFromData } from '../group-helper';\n\nimport { ROW, COLUMN, COL, LEFT, TOP, CARTESIAN, MEASURE, BOTH, X, Y } from '../enums/constants';\nimport VisualEncoder from './visual-encoder';\n\n/**\n *\n *\n * @export\n * @class CartesianEncoder\n * @extends {VisualEncoder}\n */\nexport default class CartesianEncoder extends VisualEncoder {\n\n /**\n *\n *\n * @return\n * @memberof CartesianEncoder\n */\n static type () {\n return CARTESIAN;\n }\n\n /**\n *\n *\n * @param {*} axesCreators\n * @param {*} fieldInfo\n * @return\n * @memberof CartesianEncoder\n */\n createAxis (axesCreators, fieldInfo) {\n const geomCellAxes = {};\n const {\n axes\n } = axesCreators;\n const {\n projections,\n indices\n } = fieldInfo;\n const {\n rowFields,\n columnFields\n } = projections;\n const {\n rowIndex,\n columnIndex\n } = indices;\n const axisFields = [{\n fields: rowFields,\n index: rowIndex\n }, {\n fields: columnFields,\n index: columnIndex\n }];\n const xAxes = axes.x || [];\n const yAxes = axes.y || [];\n\n [rowFields, columnFields].forEach((fields, i) => {\n const type = i === 0 ? ROW : COLUMN;\n const axis = i === 0 ? Y : X;\n\n if (fields.length > 1) {\n axesCreators.position = BOTH;\n } else {\n axesCreators.position = this.axisFrom()[type];\n }\n geomCellAxes[axis] = generateAxisFromMap(axis, axisFields[i], axesCreators, axis === X ? xAxes : yAxes);\n });\n return geomCellAxes;\n }\n\n /**\n *\n *\n * @param {*} fields\n * @return\n * @memberof CartesianEncoder\n */\n getFacetsAndProjections (fields, type) {\n let facets = [];\n let projections = [];\n let counter = 0;\n const primaryFacets = [];\n const secondaryFacets = [];\n const primaryFields = fields[0];\n const secondaryFields = fields[1];\n const primaryLen = primaryFields.length;\n const secondaryLen = secondaryFields.length;\n const axisFrom = this.axisFrom();\n\n for (let i = 0; i < primaryLen; i++) {\n let projArr = [primaryFields[i]];\n const primaryField = primaryFields[i];\n\n if (primaryField.type() === MEASURE) {\n const secondaryField = secondaryFields[counter];\n if (secondaryField && secondaryField.type() === MEASURE) {\n counter++;\n projArr = [primaryField, secondaryField];\n }\n projections.push(projArr);\n } else {\n facets.push(primaryField);\n primaryFacets.push(primaryField);\n }\n }\n if (secondaryLen > counter) {\n for (let i = counter; i < secondaryLen; i++) {\n const secondaryField = secondaryFields[i];\n const projArr = [secondaryField];\n if (secondaryField.type() === MEASURE) {\n projections.push(projArr);\n } else {\n facets.push(secondaryField);\n secondaryFacets.push(secondaryField);\n }\n }\n }\n if ((primaryFacets.length || secondaryFacets.length) && !projections.length) {\n type = type === COL ? COLUMN : type;\n if ((axisFrom[type] === LEFT || axisFrom[type] === TOP) && primaryFacets.length) {\n const axisFromIndex = primaryFacets.length - 1;\n const facet = primaryFacets[axisFromIndex];\n projections = [[facet]];\n const existIndex = getIndex(secondaryFacets, facet);\n if (existIndex > -1) {\n projections = [[facet, facet]];\n secondaryFacets.splice(existIndex, 1);\n }\n primaryFacets.splice(axisFromIndex, 1);\n } else {\n const axisFromIndex = 0;\n const facet = secondaryFacets[axisFromIndex];\n projections = [[facet]];\n const existIndex = getIndex(primaryFacets, facet);\n if (existIndex > -1) {\n projections = [[facet, facet]];\n primaryFacets.splice(existIndex, 1);\n }\n secondaryFacets.splice(axisFromIndex, 1);\n }\n }\n\n facets = [...primaryFacets, ...secondaryFacets];\n facets = facets.filter((el, index, self) => index === self.findIndex(t => (t.toString() === el.toString())));\n return {\n facets,\n projections\n };\n }\n\n /**\n *\n *\n * @param {*} datamodel\n * @param {*} config\n * @return\n * @memberof CartesianEncoder\n */\n fieldSanitizer (datamodel, config) {\n return super.fieldSanitizer(datamodel, config);\n }\n\n /**\n *\n *\n * @param {*} datamodel\n * @return\n * @memberof CartesianEncoder\n */\n getRetinalFieldsDomain (dataModels, encoding) {\n const groupedModel = dataModels.groupedModel;\n const domains = {};\n for (const key in encoding) {\n if ({}.hasOwnProperty.call(encoding, key)) {\n const encodingObj = encoding[key];\n const field = encodingObj.field;\n if (!encodingObj.domain && field) {\n const domain = retriveDomainFromData(groupedModel, field);\n domains[field] = domain;\n }\n }\n }\n return domains;\n }\n\n /**\n *\n *\n * @param {*} layerArray\n * @memberof CartesianEncoder\n */\n serializeLayerConfig (layerArray) {\n const serializedLayers = [];\n // let currentLayerIndex = 0;\n layerArray.length && layerArray.forEach((layer, i) => {\n const def = layerFactory.sanitizeLayerConfig(layer);\n def.order = i;\n serializedLayers.push(def);\n });\n return serializedLayers;\n }\n\n /**\n *\n *\n * @param {*} fields\n * @param {*} userLayerConfig\n * @return\n * @memberof CartesianEncoder\n */\n getLayerConfig (fields, userLayerConfig) {\n const layerConfig = [];\n const {\n columnFields,\n rowFields\n } = fields;\n\n // let currentLayerIndex = 0;\n columnFields.forEach((colField) => {\n const colFieldName = colField.toString();\n rowFields.forEach((rowField) => {\n let configs = [];\n const rowFieldName = rowField.toString();\n const encoding = {\n x: {\n field: colFieldName\n },\n y: {\n field: rowFieldName\n }\n };\n const rowFieldType = rowField.subtype();\n const colFieldType = colField.subtype();\n const mark = getDefaultMark(colFieldType, rowFieldType);\n\n const defConfigs = [{\n mark,\n def: {\n mark,\n encoding\n }\n }];\n\n const layerConfigs = getLayerConfFromFields(colField.getMembers(),\n rowField.getMembers(), userLayerConfig || []);\n if (layerConfigs.length) {\n configs = layerConfigs.map((layerConf) => {\n const mergedLayerConf = mergeRecursive(mergeRecursive({}, defConfigs[0].def), layerConf);\n const serializedLayerConfig = layerFactory.getSerializedConf(mergedLayerConf.mark,\n mergedLayerConf);\n return {\n mark: mergedLayerConf.mark,\n order: mergedLayerConf.order,\n def: serializedLayerConfig\n };\n });\n } else {\n configs = defConfigs;\n }\n\n layerConfig.push(...configs);\n });\n });\n return layerConfig;\n }\n}\n\n","import { layerFactory } from '@chartshq/visual-layer';\nimport { mergeRecursive } from 'muze-utils';\nimport VisualEncoder from './visual-encoder';\nimport { RADIUS, ANGLE, SIZE, MEASURE, ARC, POLAR, COLOR } from '../enums/constants';\n/**\n *\n *\n * @export\n * @class PolarEncoder\n * @extends {VisualEncoder}\n */\nexport default class PolarEncoder extends VisualEncoder {\n\n /**\n *\n *\n * @param {*} axesCreators\n * @param {*} fieldInfo\n * @return\n * @memberof PolarEncoder\n */\n createAxis (axesCreators, fieldInfo) {\n const {\n axes\n } = axesCreators;\n const geomCellAxes = axes;\n const {\n indices\n } = fieldInfo;\n const {\n rowIndex,\n columnIndex\n } = indices;\n // Dummy axes for polar, to create blank cells\n const pieAxes = geomCellAxes.pie || [];\n\n pieAxes[rowIndex] = pieAxes[rowIndex] || [];\n pieAxes[rowIndex][columnIndex] = [];\n\n geomCellAxes.pie = pieAxes;\n geomCellAxes.x = null;\n geomCellAxes.y = null;\n\n return geomCellAxes;\n }\n\n /**\n *\n *\n * @param {*} fields\n * @return\n * @memberof CartesianEncoder\n */\n getFacetsAndProjections (fields) {\n let counter = 0;\n const facets = [];\n const projections = [];\n const primaryFields = fields[0];\n const secondaryFields = fields[1];\n const primaryLen = primaryFields.length;\n const secondaryLen = secondaryFields.length;\n\n for (let i = 0; i < primaryLen; i++) {\n const primaryField = primaryFields[i];\n if (primaryField.type() === MEASURE) {\n const secondaryField = secondaryFields[counter++];\n const projArr = secondaryField ? [primaryField, secondaryField] : [primaryField];\n projections.push(projArr);\n } else {\n facets.push(primaryField);\n }\n }\n if (secondaryLen > counter) {\n for (let i = counter; i < secondaryLen; i++) {\n const secondaryField = secondaryFields[i];\n const projArr = [secondaryField];\n if (secondaryField.type() === MEASURE) {\n projections.push(projArr);\n } else {\n facets.push(secondaryField);\n }\n }\n }\n return {\n facets,\n projections\n };\n }\n\n /**\n *\n *\n * @return\n * @memberof PolarEncoder\n */\n setCommonDomain () {\n // No domain to be set\n return this;\n }\n\n /**\n *\n *\n * @return\n * @memberof PolarEncoder\n */\n static type () {\n return POLAR;\n }\n\n layers (...layers) {\n if (layers.length) {\n this._layers = layers[0];\n return this;\n }\n return this._layers;\n }\n\n /**\n *\n *\n * @param {*} datamodel\n * @param {*} config\n * @memberof PolarEncoder\n */\n fieldSanitizer (datamodel, config) {\n let sanitizedRows = [[], []];\n let sanitizedColumns = [[], []];\n const fields = super.fieldSanitizer(datamodel, config);\n const {\n layers\n } = config;\n const {\n rows,\n columns\n } = fields;\n const layer = layers[0];\n const encoding = layer.encoding;\n const radius = encoding && encoding.radius ? encoding.radius.field : null;\n const angle = encoding && encoding.angle ? encoding.angle.field : null;\n const sanitizedFields = [sanitizedRows, sanitizedColumns];\n\n [rows, columns].forEach((fieldType, typeIndex) => {\n fieldType.forEach((fieldSet, i) => fieldSet.forEach((field) => {\n if (field.toString() !== radius && field.toString() !== angle && field.type() !== MEASURE) {\n sanitizedFields[typeIndex][i].push(field);\n }\n }));\n });\n sanitizedColumns = [...new Set(sanitizedColumns)];\n sanitizedRows = [...new Set(sanitizedRows)];\n this.fieldInfo({ rows: sanitizedRows, columns: sanitizedColumns });\n return this.fieldInfo();\n }\n\n getRetinalFieldsDomain (dataModels, encoding, facetFields, groupBy) {\n let sizeField;\n let colorField;\n const fields = [];\n const layers = this.layers();\n const dataModel = dataModels.parentModel;\n const fieldsConfig = dataModel.getFieldsConfig();\n const domains = {};\n if (layers && layers[0]) {\n const layer = layers[0];\n const layerEncoding = layer.def.encoding || {};\n\n [RADIUS, ANGLE, SIZE, COLOR].forEach((encType) => {\n const field = layerEncoding[encType] ? layerEncoding[encType].field : '';\n const measureField = fieldsConfig[field] && fieldsConfig[field].def.type === MEASURE;\n if (encType === SIZE && measureField) {\n sizeField = field;\n }\n if (encType === COLOR) {\n colorField = field;\n }\n fieldsConfig[field] && !measureField && fields.push(field);\n });\n }\n\n if (sizeField) {\n domains[sizeField] = dataModel.groupBy(facetFields, {\n [sizeField]: 'sum'\n }).getFieldspace().fieldsObj()[sizeField].domain();\n }\n\n if (colorField) {\n const dm = dataModel.groupBy([...facetFields, ...fields], groupBy.measures);\n domains[colorField] = dm.getFieldspace().fieldsObj()[colorField].domain();\n }\n return domains;\n }\n /**\n *\n *\n * @param {*} fields\n * @param {*} userLayerConfig\n * @return\n * @memberof PolarEncoder\n */\n getLayerConfig (fields, userLayerConfig) {\n let layerConfig = [];\n const {\n columnFields,\n rowFields\n } = fields;\n const allFields = [...columnFields, ...rowFields];\n\n allFields.forEach(() => {\n const encoding = {};\n let config = {\n mark: ARC,\n def: {\n encoding\n }\n };\n if (userLayerConfig && userLayerConfig.length > 0) {\n config = mergeRecursive(config, userLayerConfig[0]);\n }\n layerConfig.push(config);\n });\n if (layerConfig.length === 0) {\n layerConfig = userLayerConfig;\n }\n\n this.layers(layerConfig);\n return layerConfig;\n }\n\n /**\n *\n *\n * @param {*} layerArray\n * @returns\n * @memberof PolarEncoder\n */\n serializeLayerConfig (layerArray) {\n const serializedLayers = [];\n\n layerArray.length && layerArray.forEach((layer) => {\n const def = layerFactory.getSerializedConf(layer.mark, layer);\n serializedLayers.push({\n mark: layer.mark,\n def\n });\n });\n return serializedLayers;\n }\n}\n","import { createRetinalAxis } from './encoder-helper';\nimport { COLOR, SHAPE, SIZE } from '../enums/constants';\nimport VisualEncoder from './visual-encoder';\n\n/**\n *\n *\n * @export\n * @class RetinalEncoder\n * @extends {VisualEncoder}\n */\nexport default class RetinalEncoder extends VisualEncoder {\n\n /**\n *\n *\n * @param {*} axesCreators\n * @return\n * @memberof RetinalEncoder\n */\n createAxis (axesCreators) {\n const { fieldsConfig, config } = axesCreators;\n const newAxes = {};\n\n [COLOR, SHAPE, SIZE].forEach((axisType) => {\n newAxes[`${axisType}`] = createRetinalAxis({ axisType, fieldsConfig }, config[axisType]);\n });\n return newAxes;\n }\n\n /**\n *\n *\n * @static\n * @return\n * @memberof RetinalEncoder\n */\n static type () {\n return 'retinal';\n }\n\n /**\n *\n *\n * @param {*} fields\n * @param {*} userLayerConfig\n * @return\n * @memberof RetinalEncoder\n */\n getLayerConfig (encodingConfigs, userLayerConfig) {\n const layerConfig = [];\n userLayerConfig.forEach((e) => {\n const config = e;\n [COLOR, SHAPE, SIZE].forEach((axis) => {\n if (encodingConfigs[axis] && encodingConfigs[axis].field) {\n const def = config.def;\n if (config.def instanceof Array) {\n def.forEach((conf) => {\n conf.encoding = conf.encoding || {};\n !conf.encoding[axis] && (conf.encoding[axis] = {});\n conf.encoding[axis].field = encodingConfigs[axis].field;\n });\n } else {\n def.encoding = def.encoding || {};\n !def.encoding[axis] && (def.encoding[axis] = {});\n def.encoding[axis].field = encodingConfigs[axis].field;\n }\n }\n });\n layerConfig.push(config);\n });\n return layerConfig;\n }\n\n /**\n *\n *\n * @param {*} context\n * @return\n * @memberof RetinalEncoder\n */\n setCommonDomain (context) {\n const { domains, axes, encoding } = context;\n\n Object.entries(encoding).forEach((enc) => {\n if (enc[1] && enc[1].field) {\n const encType = enc[0];\n const field = enc[1].field;\n\n if (field) {\n axes[encType].forEach((axis) => {\n const domain = domains[field];\n !enc[1].domain && axis.updateDomain(domain);\n });\n }\n }\n });\n return axes;\n }\n}\n","import { Store, dataSelect, FieldType } from 'muze-utils';\nimport { DATA_UPDATE_COUNTER } from '../enums/defaults';\nimport { Variable } from '../variable';\nimport { PolarEncoder, CartesianEncoder } from '../encoder';\nimport {\n DIMENSION,\n MEASURE,\n ORDINAL,\n LINEAR,\n ROW,\n COLUMN,\n COL,\n LEFT,\n RIGHT,\n TOP,\n BOTTOM,\n COLOR,\n SIZE,\n TEMPORAL,\n SHAPE,\n INTERACTION,\n GRID_LINES,\n GRID_BANDS,\n HEADER,\n FACET,\n X,\n Y,\n POLAR\n} from '../enums/constants';\n\n/**\n * Creates an instance of a store which contains the arguments to make the class reactive\n *\n * @return {Object} instance of store\n * @memberof VisualGroup\n */\nexport const initStore = () => new Store({\n [DATA_UPDATE_COUNTER]: DATA_UPDATE_COUNTER\n});\n\n/**\n *\n *\n * @param {*} arr\n */\nexport const isDistributionEqual = arr => [...arr[0], ...arr[1]].reduce((isEqual, row) => {\n const rowType = row.type();\n\n if (rowType === MEASURE || rowType === TEMPORAL) {\n isEqual = true;\n }\n return isEqual;\n}, false);\n\n/**\n *\n *\n */\nexport const initializeCacheMaps = () => ({\n cellMap: new Map(),\n xAxesMap: new Map(),\n yAxesMap: new Map(),\n entryCellMap: new Map(),\n exitCellMap: new Map()\n});\n\n/**\n *\n *\n * @param {*} axisName\n * @param {*} id\n */\nexport const getAxisKey = (axisName, id, scaleType) => `${axisName}-axis-${id}-${scaleType}`;\n\n/**\n *\n *\n * @param {*} rowId\n * @param {*} columnId\n */\nexport const getCellKey = (rowId, columnId) => `cell-${rowId}-${columnId}`;\n\n/**\n *\n *\n * @param {*} config\n * @return\n */\nexport const extractUnitConfig = (config) => {\n const unitConfig = {};\n const attrNames = [INTERACTION, GRID_LINES, GRID_BANDS];\n\n attrNames.forEach((attr) => {\n if (config[attr] !== undefined) {\n unitConfig[attr] = config[attr];\n }\n });\n return unitConfig;\n};\n\n/**\n *\n *\n * @param {*} headers\n * @param {*} index\n * @param {*} rowLength\n * @return\n * @memberof MatrixResolver\n */\nexport const getHeaderText = (headers, index, rowLength) => {\n let header = '';\n\n if (index === rowLength - 1 && headers.length > rowLength) {\n for (let i = index; i < headers.length - 1; i++) {\n header += `${headers[i].toString()} / `;\n }\n header += headers[headers.length - 1].toString();\n return header;\n } else if (headers[index]) {\n return headers[index].toString();\n }\n return '';\n};\n\n/**\n *\n *\n * @param {*} fields\n * @param {*} fieldHeaders\n * @param {*} TextCell\n * @param {*} labelManager\n * @return\n */\nexport const headerCreator = (fields, fieldHeaders, TextCell, labelManager) => {\n const headers = fields.length > 0 ? fields[0].map((cell, i) => new TextCell({ type: HEADER }, { labelManager })\n .source(getHeaderText(fieldHeaders, i, fields[0].length))\n .config({ show: cell.config().show })) : [];\n return headers;\n};\n\n/**\n *\n *\n * @param {*} variable\n * @param {*} allFields\n * @return\n */\nexport const findInGroup = (variable, allFields) => {\n let channel = null;\n\n [COLOR, SIZE, SHAPE].forEach((e) => {\n if (this.store.get(e) && variable === this.store.get(e)[0]) {\n channel = e;\n }\n });\n\n if (channel) {\n return { channel };\n }\n [ROW, COL].forEach((facetType) => {\n allFields[`${facetType}Facets`].forEach((e) => {\n if (e.toString() === variable) {\n channel = { channel: FACET, type: facetType === COL ? COLUMN : ROW };\n }\n });\n });\n\n if (channel) {\n return channel;\n }\n\n [ROW, COL].forEach((projType) => {\n allFields[`${projType}Projections`].forEach((e) => {\n e.forEach((m) => {\n if (m.toString() === variable) {\n channel = projType === COL ? X : Y;\n }\n });\n });\n });\n\n if (channel) {\n return { channel };\n }\n return null;\n};\n\n/**\n *\n *\n * @param {*} datamodel\n * @param {*} field\n */\nexport const getAxisType = (fieldsConfig, field) => {\n let fieldType = ORDINAL;\n\n if (field && fieldsConfig[field].def.type !== DIMENSION) {\n fieldType = LINEAR;\n }\n return fieldType;\n};\n\n/**\n *\n *\n * @param {*} datamodel\n * @param {*} fieldName\n * @return\n */\nexport const retriveDomainFromData = (datamodel, fieldName) => {\n const field = datamodel.getFieldspace().fields.find(d => d._ref.name === fieldName.toString());\n return field.domain();\n};\n\n/**\n *\n *\n * @memberof MatrixResolver\n */\nexport const mutateAxesFromMap = (cacheMaps, axes) => {\n let xAxes = null;\n let yAxes = null;\n const {\n xAxesMap,\n yAxesMap\n } = cacheMaps;\n const {\n x: xAxisSet,\n y: yAxisSet\n } = axes;\n\n xAxisSet && xAxisSet.forEach((axisId) => {\n const xAxis = xAxesMap.get(axisId);\n xAxes = xAxes || [];\n xAxes.push(xAxis);\n });\n\n yAxisSet && yAxisSet.forEach((axisId) => {\n const yAxis = yAxesMap.get(axisId);\n yAxes = yAxes || [];\n yAxes.push(yAxis);\n });\n\n return {\n xAxes, yAxes\n };\n};\n\n/**\n *\n *\n * @param {*} layers\n * @return\n */\nexport const getEncoder = (layers) => {\n let encoder = new CartesianEncoder();\n\n if (layers) {\n // Figuring out the kind of layers the group will have\n encoder = layers.every(e => e.mark === 'arc') ? new PolarEncoder() : encoder;\n }\n return encoder;\n};\n\n/**\n *\n *\n * @param {*} type\n * @param {*} fields\n * @param {*} userAxisFromConfig\n * @return\n */\nexport const getHeaderAxisFrom = (type, fields, userAxisFromConfig) => {\n let axisFrom = userAxisFromConfig[type];\n let headerFrom = '';\n const options = type === ROW ? [LEFT, RIGHT] : [BOTTOM, TOP];\n const [firstField, secondField] = fields;\n const firstFieldType = i => (firstField.length ? firstField[i].type() : null);\n const secondFieldType = i => (secondField.length ? secondField[i].type() : null);\n\n if (firstFieldType(firstField.length - 1) === DIMENSION && secondFieldType(0) === DIMENSION) {\n headerFrom = axisFrom ? options[1 - options.indexOf(axisFrom)] : options[1];\n\n if (type === COLUMN && (firstField[firstField.length - 1].toString() === secondField[0].toString())) {\n axisFrom = TOP;\n } else {\n axisFrom = axisFrom || options[0];\n }\n } else if (secondFieldType(secondField.length - 1) === DIMENSION) {\n headerFrom = type === ROW ? RIGHT : BOTTOM;\n axisFrom = type === ROW ? RIGHT : BOTTOM;\n } else {\n headerFrom = type === ROW ? LEFT : TOP;\n axisFrom = type === ROW ? LEFT : TOP;\n }\n if (firstFieldType(firstField.length - 1) === MEASURE && secondFieldType(0) === MEASURE) {\n axisFrom = type === ROW ? LEFT : TOP;\n } else if (secondFieldType(0) === MEASURE) {\n axisFrom = type === ROW ? RIGHT : BOTTOM;\n } else if (firstFieldType(firstField.length - 1) === MEASURE) {\n axisFrom = type === ROW ? LEFT : TOP;\n }\n return [headerFrom, axisFrom];\n};\n\n/**\n *\n *\n * @param {*} type\n * @param {*} fields\n * @param {*} layers\n * @return\n * @memberof MatrixResolver\n */\nexport const setFacetsAndProjections = (context, fieldInfo, encoder) => {\n const {\n fields,\n type\n } = fieldInfo;\n const { facets, projections } = encoder.simpleEncoder.getFacetsAndProjections(fields, type);\n\n context.facets({ [`${type}Facets`]: facets });\n context.projections({ [`${type}Projections`]: projections });\n\n return { facets, projections, fields };\n};\n\n/**\n * Creates a selection set from a data set with corresponding attributes\n *\n * @export\n * @param {Selection} sel contains previous selection\n * @param {Object} appendObj Object to be appended\n * @param {Array} data Data based on which the selection is entered/updated/removed\n * @param {Object} [attrs={}] Attributes to be set on the data\n * @return {Selection} Merged selection\n */\nexport const createSelection = (sel, appendObj, data, idFn) => {\n let selection = sel || dataSelect([]);\n\n selection = selection.data(data, idFn);\n\n const enter = selection.enter().append(appendObj);\n const mergedSelection = enter.merge(selection);\n\n selection.exit() && selection.exit().remove();\n return mergedSelection;\n};\n\nconst getRowBorders = (left, right) => {\n const borders = {};\n borders.top = false;\n borders.bottom = false;\n if (left.length > 1 || right.length > 1) {\n borders.top = true;\n borders.bottom = true;\n }\n return borders;\n};\n\nconst getColumnsBorders = (top, bottom) => {\n const borders = {};\n borders.left = false;\n borders.right = false;\n if (top.length || bottom.length) {\n if ((top[0] && top[0].length > 1) || (bottom[0] && bottom[0].length > 1)) {\n borders.left = true;\n borders.right = true;\n }\n }\n return borders;\n};\n\nconst getValueBorders = (rows, columns) => {\n const borders = { top: true, left: true, bottom: true, right: true };\n const borderTypeRow = [LEFT, RIGHT];\n const borderTypeCol = [TOP, BOTTOM];\n rows.forEach((e, i) => {\n if (e[0] && e[0].length) {\n borders[borderTypeRow[i]] = true;\n } else {\n borders[borderTypeRow[i]] = false;\n }\n });\n columns.forEach((e, i) => {\n if (e.length) {\n borders[borderTypeCol[i]] = true;\n } else {\n borders[borderTypeCol[i]] = false;\n }\n });\n\n return borders;\n};\n\nexport const getBorders = (matrices, encoder) => {\n let showRowBorders = { top: false, bottom: false };\n let showColBorders = { left: false, right: false };\n let showValueBorders = { top: false, bottom: false, left: false, right: false };\n const {\n rows,\n columns,\n values: valueMatrix\n } = matrices;\n const [leftRows, rightRows] = rows;\n const [topColumns, bottomColumns] = columns;\n const {\n rowDimensions,\n columnDimensions,\n rowTemporalFields,\n columnTemporalFields,\n columnMeasures,\n rowMeasures\n } = encoder.fieldInfo();\n const allDimensionLength = rowDimensions.length + columnDimensions.length;\n const allMeasuresLength = rowMeasures.length + columnMeasures.length;\n const allTemporalFieldsLength = rowTemporalFields.length + columnTemporalFields.length;\n\n if (encoder.constructor.type() === POLAR) {\n if (!allDimensionLength) {\n return { showRowBorders, showColBorders, showValueBorders };\n }\n } else if (!allMeasuresLength && !allTemporalFieldsLength && allDimensionLength <= 2) {\n return { showRowBorders, showColBorders, showValueBorders };\n }\n\n showRowBorders = getRowBorders(leftRows, rightRows);\n showColBorders = getColumnsBorders(topColumns, bottomColumns);\n showValueBorders = getValueBorders([leftRows, rightRows], [topColumns, bottomColumns]);\n\n if (valueMatrix.length > 1) {\n showValueBorders.top = true;\n showValueBorders.bottom = true;\n }\n if (valueMatrix.length && valueMatrix[0].length > 1) {\n showValueBorders.left = true;\n showValueBorders.right = true;\n }\n return { showRowBorders, showColBorders, showValueBorders };\n};\n\nexport const getFieldsFromSuppliedLayers = (suppliedLayerConfig, fieldsConfig) => {\n let fields = [];\n const encodingArr = suppliedLayerConfig.map(conf => (conf.encoding || {}));\n fields = [...fields, [].concat(...encodingArr.map(enc => Object.values(enc).map(d => d.field)))];\n fields = fields.filter(field => fieldsConfig[field] && fieldsConfig[field].def.type === FieldType.DIMENSION);\n return fields;\n};\n\nexport const extractFields = (facetsAndProjections, layerFields) => {\n const fields = Object.values(facetsAndProjections).map((arr) => {\n const flattenArray = [].concat(...arr);\n return [].concat(...flattenArray.map((field) => {\n if (field instanceof Variable) {\n return field.getMembers();\n }\n return field;\n }));\n });\n return [].concat(...fields, ...layerFields);\n};\n","/**\n * This file exports variables that are used as defaults for the crosstab group.\n */\nexport const DATA_UPDATE_COUNTER = 0;\n\nexport const DEFAULT_LAYER_TYPE = 'cartesian';\n\n","import Selection from './selection';\n/**\n * This function applies a selection operation on a data array.\n *\n * @export\n * @param {Array} [data=[]] The data array to be observed.\n * @return {Selection} Instance of a selection.\n */\nexport default function dataSelect (data = []) {\n return new Selection(data);\n}\n\n","import { BEHAVIOURS, ACTIONS } from '@chartshq/muze-firebolt';\n\nexport const actionBehaviourMap = {\n [ACTIONS.DRAG]: {\n behaviours: [BEHAVIOURS.BRUSH],\n touch: false\n },\n [ACTIONS.HOVER]: {\n behaviours: [BEHAVIOURS.HIGHLIGHT]\n },\n [ACTIONS.LONGTOUCH]: {\n behaviours: [BEHAVIOURS.SELECT],\n touch: true\n },\n [ACTIONS.TOUCHDRAG]: {\n behaviours: [BEHAVIOURS.BRUSH],\n touch: true\n },\n [ACTIONS.CLICK]: {\n behaviours: [BEHAVIOURS.SELECT],\n touch: false\n }\n};\n\n","export const CONFIG = 'config';\nexport const DATA = 'data';\nexport const AXES = 'axes';\nexport const LAYERDEFS = 'layerDef';\nexport const WIDTH = 'width';\nexport const HEIGHT = 'height';\nexport const MOUNT = 'mount';\nexport const primaryXAxisUpdated = 'primaryXAxisUpdated';\nexport const primaryYAxisUpdated = 'primaryYAxisUpdated';\nexport const secondaryXAxisUpdated = 'secondaryXAxisUpdated';\nexport const secondaryYAxisUpdated = 'secondaryYAxisUpdated';\nexport const TRANSFORM = 'transform';\nexport const DATADOMAIN = 'dataDomain';\nexport const LAYERSCREATED = 'layersCreated';\nexport const FIELDS = 'fields';\nexport const TIMEDIFFS = 'timeDiffs';\nexport const LAYERAXISINDEX = 'layerAxisIndex';\n\n","import { FieldType, getDependencyOrder, getObjProp,\n defaultValue, objectIterator, unionDomain, makeElement,\n DimensionSubtype, getClosestIndexOf, toArray } from 'muze-utils';\nimport { layerFactory } from '@chartshq/visual-layer';\nimport { TIMEDIFFS } from '../enums/reactive-props';\n\nexport const getDimensionMeasureMap = (layers, fieldsConfig) => {\n const retinalEncodingsAndMeasures = {};\n\n layers.forEach((layer) => {\n const {\n colorField,\n sizeField,\n shapeField,\n xField,\n yField\n } = layer.encodingFieldsInf();\n const measures = [xField, yField].filter(field => fieldsConfig[field] && fieldsConfig[field].def.type ===\n FieldType.MEASURE);\n [colorField, sizeField, shapeField].forEach((field) => {\n if (fieldsConfig[field] && fieldsConfig[field].def.type === FieldType.DIMENSION) {\n !retinalEncodingsAndMeasures[field] && (retinalEncodingsAndMeasures[field] = []);\n retinalEncodingsAndMeasures[field].push(...measures);\n }\n });\n });\n\n for (const key in retinalEncodingsAndMeasures) {\n if ({}.hasOwnProperty.call(retinalEncodingsAndMeasures, key)) {\n retinalEncodingsAndMeasures[key] = [...new Set(retinalEncodingsAndMeasures[key])];\n }\n }\n return retinalEncodingsAndMeasures;\n};\n\nexport const transformDataModels = (transform, dataModel) => {\n const dataModels = {};\n for (const key in transform) {\n if ({}.hasOwnProperty.call(transform, key)) {\n const transformVal = transform[key];\n dataModels[key] = transformVal(dataModel);\n }\n }\n\n return dataModels;\n};\n\nexport const getLayerFromDef = (context, definition, existingLayer) => {\n let instances = existingLayer;\n const dependencies = context._layerDeps;\n if (!existingLayer) {\n instances = layerFactory.getLayerInstance(definition);\n }\n const layers = {};\n const instanceArr = toArray(instances);\n definition = toArray(definition);\n definition.reduce((acc, def, idx) => {\n const instance = instanceArr[idx];\n instance.config(def);\n instance.dependencies(dependencies);\n if (def.name) {\n instance.alias(def.name);\n }\n layers[instance.alias()] = instance;\n return acc;\n }, {});\n return layers;\n};\n\nexport const resolveEncodingTransform = (layerInst, store) => {\n const encodingTransform = layerInst.config().encodingTransform || {};\n const resolvable = encodingTransform.resolvable;\n let depArr = [];\n if (resolvable) {\n const resolved = resolvable(store);\n depArr = resolved.depArr;\n layerInst.encodingTransform(resolved.fn);\n } else if (encodingTransform instanceof Function) {\n layerInst.encodingTransform(encodingTransform);\n }\n return depArr;\n};\n\nexport const createLayers = (context, layerDefinitions) => {\n const layersMap = context._layersMap;\n const markSet = {};\n const store = {\n layers: {},\n components: {\n unit: context\n }\n };\n let layerIndex = 0;\n let layers = layerDefinitions.sort((a, b) => a.order - b.order).reduce((layersArr, layerDef, i) => {\n const mark = layerDef.mark;\n const definition = layerDef.def;\n const markId = `${mark}-${i}`;\n const defArr = toArray(definition);\n defArr.forEach((def) => {\n def.order = layerDef.order + layerIndex;\n });\n layerIndex += defArr.length;\n const instances = getLayerFromDef(context, definition, layersMap[markId]);\n store.layers = Object.assign(store.layers, instances);\n const instanceValues = Object.values(instances);\n layersArr = layersArr.concat(...instanceValues);\n layersMap[markId] = instanceValues;\n markSet[markId] = markId;\n return layersArr;\n }, []);\n store.unit = context;\n const layerdeps = {};\n layers.forEach((layer) => {\n const depArr = resolveEncodingTransform(layer, store);\n layerdeps[layer.alias()] = depArr;\n });\n\n const order = getDependencyOrder(layerdeps);\n layers = order.map(name => store.layers[name]);\n for (const key in layersMap) {\n if (!(key in markSet)) {\n layersMap[key].forEach(layer => layer.remove());\n delete layersMap[key];\n }\n }\n return layers;\n};\n\nexport const attachDataToLayers = (layers, dm, transformedDataModels) => {\n layers.forEach((layer) => {\n const dataSource = layer.config().source;\n const dataModel = dataSource instanceof Function ? dataSource(dm) : (transformedDataModels[dataSource] || dm);\n layer.data(dataModel);\n });\n};\n\nexport const attachAxisToLayers = (axes, layers, layerAxisIndex) => {\n layers.forEach((layer) => {\n const layerId = layer.id();\n const axesObj = {};\n\n objectIterator(axes, (key) => {\n const axisInf = layerAxisIndex[layerId];\n if (axisInf) {\n axes[key] && (axesObj[key] = axes[key][axisInf[key] || 0]);\n }\n });\n Object.keys(axesObj).length && layer.axes(axesObj);\n });\n};\n\nexport const getLayerAxisIndex = (layers, fields) => {\n const layerAxisIndex = {};\n layers.forEach((layer) => {\n const { axis, encoding } = layer.config();\n const id = layer.id();\n ['x', 'y'].forEach((type) => {\n let index;\n const field = defaultValue(getObjProp(axis, type), encoding[type] && encoding[type].field);\n if (fields[type]) {\n index = fields[type].findIndex(fieldInst => fieldInst.getMembers().indexOf(field) !== -1);\n } else {\n index = 0;\n }\n !layerAxisIndex[id] && (layerAxisIndex[id] = {});\n layerAxisIndex[id][type] = index;\n });\n });\n return layerAxisIndex;\n};\n\nexport const unionDomainFromLayers = (layers, axisFields, layerAxisIndex, fieldsConfig) => {\n let domains = {};\n layers = layers.filter(layer => layer.getDataDomain() !== null);\n layers.forEach((layer) => {\n let domainValues = {};\n const config = layer.config();\n const encoding = config.encoding;\n const layerDomain = layer.getDataDomain();\n const layerId = layer.id();\n\n if (layerDomain !== null && config.calculateDomain !== false) {\n domainValues = Object.entries(layerDomain);\n if (layerDomain.x || layerDomain.y) {\n domains = domainValues.reduce((fieldDomain, domain) => {\n const encodingType = domain[0];\n const field = encoding[encodingType].field;\n const axisIndex = layerAxisIndex[layerId][encodingType];\n const fieldStr = `${axisFields[encodingType][axisIndex]}`;\n fieldDomain[fieldStr] = fieldDomain[fieldStr] || [];\n fieldDomain[fieldStr] = unionDomain(([fieldDomain[fieldStr], domain[1]]),\n fieldsConfig[field].def.subtype ? fieldsConfig[field].def.subtype :\n fieldsConfig[field].def.type);\n\n return fieldDomain;\n }, domains);\n } else { domains = domainValues; }\n }\n });\n return domains;\n};\n\nexport const renderLayers = (context, container, layers, measurement) => {\n context._lifeCycleManager.notify({ client: layers, action: 'beforedraw', formalName: 'layer' });\n const config = context.config();\n const classPrefix = config.classPrefix;\n const orderedLayers = context.layers().sort((a, b) => a.config().order - b.config().order);\n const layerParentGroup = makeElement(container, 'g', [1], `${classPrefix}-layer-group`);\n makeElement(layerParentGroup, 'g', orderedLayers, null, {\n update: (group, layer) => {\n layer.measurement(measurement);\n layer.dataProps({\n timeDiffs: context.store().get(TIMEDIFFS)\n });\n layer.config().render !== false && layer.mount(group.node());\n }\n });\n return this;\n};\n\nexport const getNearestDimensionalValue = (context, position) => {\n const fields = context.fields();\n if (!fields.x.length || !fields.y.length) {\n return null;\n }\n const data = context.data();\n const axes = context.axes();\n const fieldsConfig = data.getFieldsConfig();\n const xField = getObjProp(fields, 'x', 0).getMembers()[0];\n const yField = getObjProp(fields, 'y', 0).getMembers()[0];\n const xFieldType = fieldsConfig[xField] && (fieldsConfig[xField].def.subtype ? fieldsConfig[xField].def.subtype :\n fieldsConfig[xField].def.type);\n const yFieldType = fieldsConfig[yField] && (fieldsConfig[yField].def.subtype ? fieldsConfig[yField].def.subtype :\n fieldsConfig[yField].def.type);\n\n const entryVal = [['x', xFieldType, xField], ['y', yFieldType, yField]].find(entry =>\n entry[1] === DimensionSubtype.CATEGORICAL || entry[1] === DimensionSubtype.TEMPORAL);\n\n if (!entryVal || (xFieldType !== FieldType.MEASURE && yFieldType !== FieldType.MEASURE)) {\n return null;\n }\n const field = entryVal[2];\n const index = fieldsConfig[field].index;\n let key = axes[entryVal[0]][0].invert(position[entryVal[0]]);\n if (entryVal[1] === DimensionSubtype.TEMPORAL) {\n const filterData = [...new Set(data.getData().data.map(d => d[index]))];\n key = filterData[getClosestIndexOf(filterData, key)];\n }\n\n return key !== undefined ? [[field], [key]] : null;\n};\n\nexport const getLayersBy = (layers, searchBy, value) => layers.filter((layer) => {\n const name = searchBy === 'type' ? layer.constructor.formalName() : layer.alias();\n return name === value;\n});\n\nexport const removeLayersBy = (layers, searchBy, value) => {\n layers.filter((inst) => {\n const name = searchBy === 'type' ? inst.config().mark : inst.alias();\n if (name === value) {\n inst.remove();\n return false;\n }\n return true;\n });\n};\n\nexport const createSideEffectGroup = (container, className) => makeElement(container, 'g', [1], className).node();\n\nexport const getAdjustedDomain = (max, min) => {\n const y1ratio = max[0] / (max[0] - min[0]);\n const y2ratio = max[1] / (max[1] - min[1]);\n\n // adjust min/max values for positive negative values zero line etc\n let allSameSign = false;\n\n // if all numbers are positive set floor to zero\n if (min[0] > 0 && min[1] > 0 && min[1] > 0 && max[1] > 0) {\n allSameSign = true;\n min[0] = 0;\n min[1] = 0;\n }\n\n // if all numbers are negative set ceiling to zero\n if (min[0] < 0 && min[1] < 0 && min[1] < 0 && max[1] < 0) {\n allSameSign = true;\n max[0] = 0;\n max[1] = 0;\n }\n\n // align zero line if necessary\n if (!allSameSign && y1ratio !== y2ratio) {\n if (y1ratio < y2ratio) {\n // adjust min[1]\n min[1] = min[0] / max[0] * max[1];\n } else {\n // adjust min[0]\n min[0] = min[1] / max[1] * max[0];\n }\n }\n return {\n max,\n min\n };\n};\n","import { getObjProp, defaultValue, makeElement, DimensionSubtype, DataModel } from 'muze-utils';\nimport { ScaleType } from '@chartshq/muze-axis';\nimport { layerFactory } from '@chartshq/visual-layer';\nimport { GRIDLINEPARENTGROUPCLASS, GRIDBANDPARENTGROUPCLASS } from '../enums/constants';\nimport { TIMEDIFFS } from '../enums/reactive-props';\n\nconst LINEAR = ScaleType.LINEAR;\n\nconst getLayerDefinition = (context, axes, type, orientation) => {\n let encoding;\n const config = context.config();\n const { classPrefix, gridLines, gridBands } = config;\n const gridLineColor = gridLines.color;\n const zeroLineColor = gridLines.zeroLineColor;\n const defClassName = type === 'band' ? gridBands.defClassName : gridLines.defClassName;\n const gridBandColor = gridBands[orientation].color;\n const axis = axes[orientation][0];\n const isLinearScale = axis.constructor.type() === LINEAR;\n\n if (type === 'band' && isLinearScale) {\n encoding = {\n [orientation]: `${orientation}value`,\n [`${orientation}0`]: `${orientation}value0`\n };\n } else {\n encoding = {\n [orientation]: isLinearScale ? `${orientation}value` : `${orientation}dim`\n };\n }\n encoding.color = {\n value: (data, i) => {\n const isNegativeDomain = isLinearScale && axis.domain()[0] < 0;\n if (type === 'band') {\n return gridBandColor[i % 2];\n }\n return isNegativeDomain && data[orientation] === 0 ? zeroLineColor : gridLineColor;\n }\n };\n\n return {\n definition: {\n defClassName: `${defClassName}-${orientation}`,\n className: config.className,\n individualClassName: (data, i) => {\n let className;\n const isNegativeDomain = isLinearScale && axis.domain()[0] < 0;\n if (isNegativeDomain && data.y === 0 && type !== 'band') {\n className = `${classPrefix}-axis-zero-line`;\n } else {\n className = `${classPrefix}-grid-${type}-${orientation}-${i % 2}`;\n }\n return className;\n },\n [`pad${orientation.toUpperCase()}`]: type === 'band' ? 0 : undefined,\n encoding\n },\n axes: {\n [orientation]: axis\n },\n interactive: false\n };\n};\n\nconst getDefaultVisibilty = (show, axis) => {\n if (axis.constructor.type() === LINEAR) {\n return show;\n }\n return false;\n};\n\nexport const getGridLayerDefinitions = (context, config, type) => ['x', 'y'].map((axisType) => {\n const show = defaultValue(config[axisType] && config[axisType].show,\n getDefaultVisibilty(config.show, context.axes()[axisType][0]));\n\n return show ? getLayerDefinition(context, context.axes(), type, axisType) : undefined;\n}).filter(d => d !== undefined);\n\nexport const getGridLayerData = (axes, fields, fieldsConfig) => {\n const gridData = {};\n ['x', 'y'].forEach((type) => {\n let ticks = axes[type][0].getTickValues();\n const subtype = getObjProp(fieldsConfig, getObjProp(fields, type, 0).getMembers()[0], 'def', 'subtype');\n const jsonData = [];\n const schema = [\n {\n name: 'yvalue',\n type: 'measure'\n }, {\n name: 'xvalue',\n type: 'measure'\n },\n {\n name: 'yvalue0',\n type: 'measure'\n }, {\n name: 'xvalue0',\n type: 'measure'\n }, {\n name: 'xdim',\n type: 'dimension',\n subtype\n }, {\n name: 'ydim',\n type: 'dimension',\n subtype\n }\n ];\n const len = Math.max(ticks.length);\n ticks = subtype === DimensionSubtype.TEMPORAL ? ticks.map(d => d.getTime()) : ticks;\n for (let i = 0; i < len; i += 1) {\n jsonData.push({\n [`${type}value`]: ticks[i],\n [`${type}value0`]: ticks[i + 1],\n [`${type}dim`]: ticks[i],\n [`${type}dim`]: ticks[i]\n });\n }\n gridData[type] = new DataModel(jsonData, schema);\n });\n return gridData;\n};\n\nexport const createGridLineLayer = (context, data) => {\n const vuConf = context.config();\n const dependencies = context._layerDeps;\n const measurement = {\n width: context.width(),\n height: context.height()\n };\n\n ['band', 'line'].forEach((type) => {\n let mark;\n let config;\n let instances;\n if (type === 'band') {\n mark = 'bar';\n config = vuConf.gridBands;\n instances = context._gridbands;\n } else {\n mark = 'tick';\n config = vuConf.gridLines;\n instances = context._gridlines;\n }\n const definitions = getGridLayerDefinitions(context, config, type);\n\n definitions.forEach((atomicDef, i) => {\n let layer;\n const definition = atomicDef.definition;\n const axesObj = atomicDef.axes;\n const sConf = layerFactory.getSerializedConf(mark, definition);\n sConf.mark = mark;\n if (!instances[i]) {\n layer = layerFactory.getLayerInstance(sConf);\n layer.dependencies(dependencies);\n } else {\n layer = instances[i];\n }\n\n layer.config(sConf)\n .measurement(measurement)\n .data(axesObj.y ? data.y : data.x)\n .dataProps({\n timeDiffs: context.store().get(TIMEDIFFS)\n })\n .axes(axesObj);\n instances[i] = layer;\n });\n });\n};\n\nexport const renderGridLineLayers = (context, container) => {\n const axes = context.axes();\n const config = context.config();\n const classPrefix = config.classPrefix;\n\n if (axes && ((axes.x && axes.x.length) || (axes.y && axes.y.length))) {\n const gridBandData = getGridLayerData(axes, context.fields(), context.data().getFieldsConfig());\n createGridLineLayer(context, gridBandData);\n [[context._gridlines, `${classPrefix}-${GRIDLINEPARENTGROUPCLASS}`],\n [context._gridbands, `${classPrefix}-${GRIDBANDPARENTGROUPCLASS}`]].forEach((entry) => {\n const [instances, parentGroupClass] = entry;\n const mountPoint = makeElement(container, 'g', [1], `.${parentGroupClass}`);\n const className = `${parentGroupClass}-group`;\n makeElement(mountPoint, 'g', instances, `.${className}`, {\n update: (group, instance) => {\n instance.mount(group.node());\n }\n });\n });\n }\n};\n","import { CLASSPREFIX, CONSOLIDATED } from './enums/constants';\n\n/**\n * Returns the default configuration of the visual unit\n * @return {Object} Default configuration of visual unit\n */\nexport const defaultConfig = {\n classPrefix: CLASSPREFIX,\n defClassName: 'visual-unit',\n className: '',\n trackerClassName: 'visual-unit-tracker',\n gridLines: {\n defClassName: 'axis-grid-lines',\n className: '',\n show: true,\n color: '#efefef',\n zeroLineColor: '#b6b6b6'\n },\n gridBands: {\n defClassName: 'axis-grid-bands',\n className: '',\n show: false,\n y: {\n color: ['#fff', '#fbfbfb']\n },\n x: {\n color: ['#fff', '#f9f9f9']\n }\n },\n arcLayerClassName: 'layer-arc',\n interaction: {\n tooltip: {\n mode: CONSOLIDATED\n }\n },\n sideEffectClassName: 'side-effect-container'\n};\n","export const CLASSPREFIX = 'muze';\nexport const IDFIELD = '__id__';\nexport const GRIDLINEPARENTGROUPCLASS = 'grid-lines';\nexport const GRIDBANDPARENTGROUPCLASS = 'grid-bands';\nexport const CONSOLIDATED = 'consolidated';\nexport const FRAGMENTED = 'fragmented';\nexport const FACET_BY_FIELDS = 'facetByFields';\nexport const RETINAL_FIELDS = 'retinalFields';\nexport const PARENT_ALIAS = 'parentAlias';\nexport const LAYERS = 'layers';\nexport const CACHED_DATA = 'cachedData';\nexport const STORE = 'store';\n\n","import { mergeRecursive } from 'muze-utils';\nimport { defaultConfig } from './default-config';\nimport { CONFIG, LAYERDEFS, AXES, WIDTH, HEIGHT, MOUNT, TRANSFORM, FIELDS, DATA } from './enums/reactive-props';\n\nexport default {\n [CONFIG]: {\n value: null,\n meta: {\n sanitization: (config, oldConfig) => (\n mergeRecursive(oldConfig || mergeRecursive({}, defaultConfig), config)\n )\n }\n },\n [LAYERDEFS]: {\n value: null\n },\n [AXES]: {\n value: null,\n meta: {\n sanitization: (axes, prevAxes) => Object.assign(prevAxes || {}, axes)\n }\n },\n [WIDTH]: {\n value: null\n },\n [HEIGHT]: {\n value: null\n },\n [MOUNT]: {\n value: null\n },\n [TRANSFORM]: {\n value: null\n },\n [FIELDS]: {\n value: null\n },\n [DATA]: {\n value: null,\n meta: {\n preset: (data, context) => {\n if (context._cache) {\n const cachedData = context.cachedData();\n context.cachedData([...cachedData, data]);\n } else {\n const oldData = context.data();\n oldData && oldData.unsubscribe('propagation');\n context.cachedData([data]);\n }\n }\n }\n }\n};\n","import { DimensionSubtype } from 'muze-utils';\nimport * as PROPS from './enums/reactive-props';\nimport {\n transformDataModels,\n getDimensionMeasureMap,\n createLayers,\n attachDataToLayers,\n attachAxisToLayers,\n unionDomainFromLayers,\n getLayerAxisIndex\n} from './helper';\n\nconst axisMap = {\n 0: 'primary',\n 1: 'secondary'\n};\nconst axisProps = [PROPS.primaryXAxisUpdated, PROPS.secondaryXAxisUpdated, PROPS.primaryYAxisUpdated,\n PROPS.secondaryYAxisUpdated];\n\nexport const listenerMap = context => ([\n {\n type: 'registerImmediateListener',\n props: [PROPS.AXES],\n listener: ([, axes]) => {\n ['x', 'y'].forEach((type) => {\n const axesArr = axes[type] || [];\n axesArr.forEach((axis, i) => {\n axis.on('update', () => {\n context.store().commit(PROPS[`${axisMap[i]}${axis.isReverse() ? 'Y' : 'X'}AxisUpdated`], true);\n });\n });\n });\n }\n },\n {\n type: 'registerImmediateListener',\n props: [PROPS.CONFIG],\n listener: ([, config]) => {\n config && context.firebolt().config(config.interaction);\n }\n },\n {\n type: 'computed',\n props: [PROPS.LAYERSCREATED],\n listener: fetch => fetch(PROPS.LAYERDEFS, PROPS.FIELDS, (layerDefs, fields) => {\n const layerDefsValue = layerDefs.value;\n const fieldsVal = fields.value;\n if (layerDefsValue && fieldsVal) {\n const layers = createLayers(context, layerDefs.value);\n context.layers(layers);\n context._layerAxisIndex = getLayerAxisIndex(context.layers(), fieldsVal);\n context._lifeCycleManager.notify({ client: layers, action: 'initialized', formalName: 'layer' });\n return true;\n }\n return null;\n })\n },\n {\n type: 'computed',\n props: [PROPS.TIMEDIFFS],\n listener: fetch => fetch(PROPS.DATA, PROPS.FIELDS, PROPS.AXES, (data, fields, axes) => {\n const dataModel = data.value;\n const axisFields = fields.value;\n const axesObj = axes.value;\n if (dataModel && axisFields && axesObj) {\n const timeDiffs = {};\n const timeDiffsByField = {};\n ['x', 'y'].forEach((type) => {\n const field = axisFields[type][0];\n if (field && field.subtype() === DimensionSubtype.TEMPORAL) {\n timeDiffs[type] = field.getMinDiff();\n timeDiffsByField[field] = timeDiffs[type];\n axesObj[type].forEach(axis => axis.minDiff(timeDiffs[type]));\n }\n });\n context._timeDiffsByField = timeDiffsByField;\n return timeDiffs;\n }\n return null;\n })\n },\n {\n type: 'computed',\n props: [PROPS.DATADOMAIN],\n listener: fetch => fetch(PROPS.DATA, PROPS.LAYERSCREATED, PROPS.AXES, PROPS.TRANSFORM,\n (dataModel, layersCreated, axes, transform) => {\n const dataModelVal = dataModel.value;\n const layerAxisIndexVal = context._layerAxisIndex;\n const axesVal = axes.value;\n if (dataModelVal && layersCreated.value && axesVal && layerAxisIndexVal) {\n const layers = context.layers();\n const dataModels = transformDataModels(transform.value, dataModelVal);\n context._transformedDataModels = dataModels;\n context._lifeCycleManager.notify({ client: layers, action: 'beforeupdate', formalName: 'layer' });\n attachDataToLayers(layers, dataModelVal, context._transformedDataModels);\n context._dimensionMeasureMap = getDimensionMeasureMap(layers,\n dataModelVal.getFieldsConfig(), context.retinalFields());\n attachAxisToLayers(axesVal, layers, layerAxisIndexVal);\n context._lifeCycleManager.notify({ client: layers, action: 'updated', formalName: 'layer' });\n return unionDomainFromLayers(layers, context.fields(),\n layerAxisIndexVal, dataModelVal.getFieldsConfig());\n }\n return null;\n })\n },\n {\n type: 'registerImmediateListener',\n props: [PROPS.DATADOMAIN],\n listener: ([, dataDomain]) => {\n dataDomain !== null && context.updateAxisDomain(dataDomain);\n }\n },\n {\n type: 'registerChangeListener',\n props: [PROPS.MOUNT, PROPS.DATA, ...axisProps],\n listener: (mount, data) => {\n const container = mount[1];\n if (container && data[1]) {\n context.render(container);\n }\n }\n }\n]);\n","import { FACET_BY_FIELDS, RETINAL_FIELDS, PARENT_ALIAS, LAYERS, STORE, CACHED_DATA } from './enums/constants';\n\nexport const PROPS = {\n [FACET_BY_FIELDS]: {},\n [RETINAL_FIELDS]: {},\n [PARENT_ALIAS]: {},\n [LAYERS]: {},\n [STORE]: {},\n [CACHED_DATA]: {},\n detailFields: {}\n};\n","import { CommonProps } from 'muze-utils';\nimport { DATA, MOUNT } from '../enums/reactive-props';\n\nexport const clearActionHistory = (context) => {\n const actionHistory = context._actionHistory;\n for (const key in actionHistory) {\n if (actionHistory[key].isMutableAction) {\n delete context._actionHistory[key];\n }\n }\n};\n\nexport const dispatchQueuedSideEffects = (context) => {\n const queuedSideEffects = context._queuedSideEffects;\n Object.entries(queuedSideEffects).forEach((entry) => {\n const sideEffect = entry[1];\n context.dispatchSideEffect(sideEffect.name, ...sideEffect.params);\n });\n context._queuedSideEffects = {};\n};\n\nexport const registerListeners = (firebolt) => {\n const context = firebolt.context;\n const store = context.store();\n\n store.registerImmediateListener([DATA, MOUNT], (dataModel, mount) => {\n const dm = dataModel[1];\n\n if (dm && mount[1]) {\n const originalData = firebolt.context.cachedData()[0];\n firebolt.createSelectionSet(firebolt.context.data().getData().uids);\n firebolt.attachPropagationListener(originalData);\n }\n }, true);\n\n context._layerDeps.throwback.registerChangeListener([CommonProps.ON_LAYER_DRAW],\n ([, onlayerdraw]) => {\n if (onlayerdraw) {\n firebolt.initializeSideEffects();\n firebolt.config(context.config().interaction);\n firebolt.mapActionsAndBehaviour();\n dispatchQueuedSideEffects(firebolt);\n clearActionHistory(firebolt);\n }\n });\n};\n\n","import { DimensionSubtype } from 'muze-utils';\n\nconst getRangeFromData = (instance, selectionDataModel, propConfig) => {\n let criteria;\n const dataObj = selectionDataModel[0].getData();\n const propCriteria = propConfig.payload.criteria;\n const sourceIdentifiers = propConfig.sourceIdentifiers;\n const schema = dataObj.schema;\n const fieldMap = instance.data().getFieldsConfig();\n const data = dataObj.data;\n const isActionSourceSame = instance.id() === propConfig.sourceId;\n\n if (isActionSourceSame) {\n criteria = propCriteria;\n } else {\n criteria = (sourceIdentifiers !== null) ? schema.reduce((acc, obj, index) => {\n let range;\n const field = obj.name;\n const fieldObj = fieldMap[field];\n const type = fieldObj && (fieldObj.def.subtype ? fieldObj.def.subtype : fieldObj.def.type);\n const isDimension = type === DimensionSubtype.CATEGORICAL;\n\n if (!fieldObj) {\n return acc;\n }\n\n if (!isDimension) {\n range = [Math.min(...data.map(d => d[index])), Math.max(...data.map(d => d[index]))];\n } else {\n range = data.map(d => d[index]);\n }\n acc[field] = range;\n return acc;\n }, {}) : null;\n }\n return criteria;\n};\n\nexport const payloadGenerator = {\n brush: (instance, selectionDataModel, propConfig) => {\n const propPayload = propConfig.payload;\n const criteria = getRangeFromData(instance, selectionDataModel, propConfig);\n const payload = Object.assign({}, propPayload);\n payload.criteria = criteria;\n return payload;\n },\n\n __default: (instance, selectionDataModel, propConfig) => {\n const propPayload = propConfig.payload;\n const sourceIdentifiers = propConfig.sourceIdentifiers;\n const dataObj = selectionDataModel[0].getData();\n let schema = dataObj.schema;\n const payload = Object.assign({}, propPayload);\n schema = dataObj.schema;\n const data = dataObj.data;\n const sourceFields = schema.map(d => d.name);\n payload.criteria = !sourceIdentifiers && selectionDataModel[0].isEmpty() ? null :\n [sourceFields, ...data];\n payload.sourceFields = sourceIdentifiers ? sourceIdentifiers.getSchema().map(d => d.name) : [];\n return payload;\n }\n};\n\n","import { isSimpleObject, FieldType, DataModel } from 'muze-utils';\n\nconst getModelWithFacetData = (dm, data) => {\n const dataObj = dm.getData();\n const schema1 = dataObj.schema;\n const data1 = dataObj.data;\n const jsonData = [];\n const schema2 = data[0].map(d => ({\n name: `${d}`,\n type: FieldType.DIMENSION\n }));\n const data2 = data[1];\n\n data1.forEach((d) => {\n const tuple = {};\n schema1.forEach((obj, i) => {\n tuple[obj.name] = d[i];\n });\n schema2.forEach((obj, i) => {\n tuple[obj.name] = data2[i];\n });\n jsonData.push(tuple);\n });\n\n return new DataModel(jsonData, [...schema1, ...schema2]);\n};\n\nexport const propagateValues = (instance, action, config = {}) => {\n let propagationData;\n const payload = config.payload;\n const selectionSet = config.selectionSet;\n const propagationFieldInf = config.propagationFields[action] || {};\n const propagationFields = propagationFieldInf.fields || [];\n const append = propagationFieldInf.append;\n const criteria = payload.criteria;\n const context = instance.context;\n const dataModel = context.cachedData()[0];\n const sourceId = context.id();\n const sideEfffects = instance.sideEffects();\n const behaviourEffectMap = instance._behaviourEffectMap;\n const mergedModel = selectionSet.mergedEnter.model;\n const fieldsConfig = dataModel.getFieldsConfig();\n payload.sourceUnit = sourceId;\n payload.action = action;\n payload.sourceCanvas = context.parentAlias();\n const propagationBehaviourMap = instance._propagationBehaviourMap;\n const propagationBehaviour = propagationBehaviourMap[action] || action;\n\n let propFields = [];\n if (criteria === null) {\n propagationData = null;\n } else if (isSimpleObject(criteria)) {\n propFields = Object.keys(criteria || {});\n propagationData = mergedModel ? mergedModel.project(propFields) : null;\n } else {\n propFields = criteria[0];\n propagationData = mergedModel ? mergedModel.project(propFields) : null;\n }\n\n const facetByFields = context.facetByFields();\n if (propagationData !== null && propagationFields.length) {\n const fields = propagationData.getData().schema.map(d => d.name);\n propagationData = getModelWithFacetData(propagationData, facetByFields);\n propFields = append ? [...fields, ...propagationFields] : propagationFields;\n propagationData = propagationData.project(propFields);\n }\n\n let propagateInterpolatedValues = false;\n if (propFields.length && propFields.every(field => fieldsConfig[field] &&\n fieldsConfig[field].def.type === FieldType.MEASURE)) {\n propagateInterpolatedValues = true;\n }\n\n const groupId = context.parentAlias();\n payload.action = action;\n const behaviourInstance = instance._actions.behavioural[propagationBehaviour];\n const isMutableAction = behaviourInstance ? behaviourInstance.constructor.mutates() : false;\n\n const filterFn = (entry, propagationConf) => {\n const effects = behaviourEffectMap[entry.config.action];\n const mutates = entry.config.groupId ?\n effects.some(d => sideEfffects[d.name || d].constructor.mutates()) : true;\n return entry.config.groupId !== propagationConf.groupId && mutates;\n };\n\n const sourceBehaviour = instance._actions.behavioural[action];\n const mutates = sourceBehaviour ? sourceBehaviour.constructor.mutates() : false;\n let propConfig = {\n payload,\n action,\n criteria: propagationData,\n isMutableAction: mutates,\n propagateInterpolatedValues,\n groupId,\n sourceId: mutates ? groupId : sourceId,\n filterFn,\n enabled: (propConf, firebolt) => (action !== propagationBehaviour ?\n propConf.payload.sourceCanvas === firebolt.context.parentAlias() : true)\n };\n\n dataModel.propagate(propagationData, propConfig, true);\n\n if (action !== propagationBehaviour) {\n propConfig = {\n payload,\n sourceId: isMutableAction ? groupId : sourceId,\n criteria: propagationData,\n isMutableAction,\n propagateInterpolatedValues,\n action: propagationBehaviour,\n groupId,\n applyOnSource: action === propagationBehaviour,\n enabled: (propConf, firebolt) => propConf.payload.sourceCanvas !== firebolt.context.parentAlias(),\n filterFn\n };\n\n dataModel.propagate(propagationData, propConfig, true, {\n filterImmutableAction: (actionInf, propInf) => actionInf.groupId !== propInf.groupId\n });\n }\n};\n","import { FieldType } from 'muze-utils';\nimport { Firebolt, SpawnableSideEffect } from '@chartshq/muze-firebolt';\nimport { registerListeners } from './helper';\nimport { payloadGenerator } from './payload-generator';\nimport { propagateValues } from './data-propagator';\n\n/**\n * This class manages the interactions of visual unit. It associates physical actions with\n * behavioural actions. It also propagates the behavioural actions to other datamodels.\n */\nexport default class UnitFireBolt extends Firebolt {\n constructor (...params) {\n super(...params);\n registerListeners(this);\n }\n\n propagate (behaviour, payload, selectionSet, sideEffects) {\n propagateValues(this, behaviour, {\n payload,\n selectionSet,\n sideEffects,\n propagationFields: this._propagationFields\n });\n }\n\n getApplicableSideEffects (sideEffects, payload, propagationInf) {\n const context = this.context;\n const unitId = context.id();\n const aliasName = context.parentAlias();\n const propagationSourceCanvas = propagationInf.propPayload && propagationInf.propPayload.sourceCanvas;\n const sourceUnitId = propagationInf.propPayload && propagationInf.propPayload.sourceUnit;\n const sourceSideEffects = this._sourceSideEffects;\n const sideEffectInstances = this.sideEffects();\n const actionOnSource = sourceUnitId ? sourceUnitId === unitId : true;\n\n const applicableSideEffects = payload.sideEffects ? [{\n effects: payload.sideEffects,\n behaviours: [payload.action]\n }] : sideEffects;\n applicableSideEffects.forEach((d) => {\n let mappedEffects = d.effects;\n mappedEffects = mappedEffects.filter((se) => {\n const mutates = sideEffectInstances[se.name || se].constructor.mutates();\n if (mutates && propagationInf.isMutableAction === false) {\n return false;\n }\n if (!actionOnSource && payload.criteria !== null) {\n const sideEffectChecker = sourceSideEffects[se.name || se];\n return sideEffectChecker ? sideEffectChecker(propagationInf.propPayload, context) : true;\n }\n if (propagationSourceCanvas === aliasName || actionOnSource) {\n return se.applyOnSource !== false;\n }\n\n return true;\n });\n d.effects = mappedEffects;\n });\n return applicableSideEffects;\n }\n\n shouldApplySideEffects (propagate) {\n return propagate === false;\n }\n\n onDataModelPropagation () {\n return (data, config) => {\n let isSourceFieldPresent = true;\n let isMutableAction = false;\n const propPayload = config.payload;\n const sourceIdentifiers = config.sourceIdentifiers;\n const enabledFn = config.enabled;\n const action = config.action;\n const payloadFn = payloadGenerator[action] || payloadGenerator.__default;\n\n if (sourceIdentifiers) {\n const fieldsConfig = sourceIdentifiers.getFieldsConfig();\n const sourceIdentifierFields = Object.keys(fieldsConfig);\n const propFields = Object.keys(data[0].getFieldsConfig());\n if (!Object.values(fieldsConfig).some(d => d.def.type === FieldType.MEASURE)) {\n isSourceFieldPresent = sourceIdentifierFields.some(d => propFields.indexOf(d) !== -1);\n }\n }\n\n const payload = payloadFn(this.context, data, config);\n const sourceBehaviours = this._sourceBehaviours;\n const filterFn = sourceBehaviours[action] || sourceBehaviours['*'];\n let enabled = true;\n\n if (filterFn) {\n enabled = filterFn(propPayload || {}, this.context);\n }\n\n if (enabledFn) {\n enabled = enabledFn(config, this) && enabled !== false;\n }\n\n if (enabled) {\n const effects = this._behaviourEffectMap[action];\n const sideEffectInstances = this.sideEffects();\n isMutableAction = config.groupId ?\n effects.some(d => sideEffectInstances[d.name || d].constructor.mutates()) : config.isMutableAction;\n\n const propagationInf = {\n propagate: false,\n data,\n propPayload,\n sourceIdentifiers,\n persistent: false,\n isSourceFieldPresent,\n sourceId: config.propagationSourceId,\n isMutableAction: config.isMutableAction\n };\n\n this._actionHistory[action] = {\n payload,\n propagationInf,\n isMutableAction\n };\n this.dispatchBehaviour(action, payload, propagationInf);\n }\n };\n }\n\n initializeSideEffects () {\n super.initializeSideEffects();\n const sideEffects = this.sideEffects();\n for (const key in sideEffects) {\n if ({}.hasOwnProperty.call(sideEffects, key)) {\n sideEffects[key] instanceof SpawnableSideEffect && sideEffects[key].drawingContext(() => {\n const context = this.context;\n return context.getDrawingContext();\n });\n }\n }\n }\n\n prepareSelectionSets (behaviours) {\n const data = this.context.data();\n if (data) {\n this.createSelectionSet(data.getData().uids, behaviours);\n }\n return this;\n }\n\n remove () {\n this.context.cachedData()[0].unsubscribe('propagation');\n return this;\n }\n}\n","import { layerFactory } from '@chartshq/visual-layer';\nimport {\n setAttrs,\n CommonProps,\n getUniqueId,\n getQualifiedClassName,\n selectElement,\n transactor,\n Store,\n makeElement,\n registerListeners,\n generateGetterSetters,\n getDataModelFromIdentifiers,\n isSimpleObject,\n transposeArray,\n FieldType\n} from 'muze-utils';\nimport { physicalActions, sideEffects, behaviouralActions, behaviourEffectMap } from '@chartshq/muze-firebolt';\nimport { actionBehaviourMap } from './firebolt/action-behaviour-map';\nimport {\n renderLayers,\n getNearestDimensionalValue,\n removeLayersBy,\n getLayersBy,\n getLayerFromDef,\n attachAxisToLayers,\n getLayerAxisIndex,\n createSideEffectGroup,\n getAdjustedDomain,\n resolveEncodingTransform\n} from './helper';\nimport { renderGridLineLayers } from './helper/grid-lines';\nimport localOptions from './local-options';\nimport { listenerMap } from './listener-map';\nimport {\n primaryYAxisUpdated,\n primaryXAxisUpdated,\n secondaryXAxisUpdated,\n secondaryYAxisUpdated,\n DATADOMAIN,\n TIMEDIFFS\n} from './enums/reactive-props';\nimport { PROPS } from './props';\nimport UnitFireBolt from './firebolt';\nimport './styles.scss';\n\nconst FORMAL_NAME = 'unit';\n\n/**\n * @module VisualUnit\n * A hierarchical component of renderer which manages multiple layers. This logical\n * module is responsible for layouting layers, attach axis with them, resolving conflicts of layers.\n */\n\n/**\n * Basic unit implementaiton\n * @class VisualUnit\n */\nexport default class VisualUnit {\n\n /**\n * Creates instance of visualization unit\n * @param registry {Object} Component registry\n * @param dependencies {Object} Dependencies required by visual unit.\n */\n constructor (registry, dependencies) {\n this._id = getUniqueId();\n this._dependencies = dependencies;\n this._layerDeps = {\n throwback: new Store({\n onlayerdraw: false\n }),\n smartLabel: dependencies.smartLabel\n };\n this._renderedResolve = null;\n this._renderedPromise = new Promise((resolve) => {\n this._renderedResolve = resolve;\n });\n this._layerDeps.throwback.registerChangeListener([CommonProps.ON_LAYER_DRAW], () => {\n this._renderedResolve();\n this._lifeCycleManager.notify({ client: this.layers(), action: 'drawn', formalName: 'layer' });\n });\n\n this._lifeCycleManager = dependencies.lifeCycleManager;\n this._layersMap = {};\n this._gridlines = [];\n this._gridbands = [];\n this._layerAxisIndex = {};\n this._transformedDataModels = {};\n\n layerFactory.setLayerRegistry(registry.layerRegistry);\n generateGetterSetters(this, PROPS);\n this.cachedData([]);\n this.store(new Store({\n [primaryXAxisUpdated]: null,\n [primaryYAxisUpdated]: null,\n [secondaryXAxisUpdated]: null,\n [secondaryYAxisUpdated]: null\n }));\n transactor(this, localOptions, this.store().model);\n this.firebolt(new UnitFireBolt(this, {\n physical: physicalActions,\n behavioural: behaviouralActions,\n physicalBehaviouralMap: actionBehaviourMap\n }, sideEffects, behaviourEffectMap));\n registerListeners(this, listenerMap);\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof VisualUnit\n */\n static formalName () {\n return FORMAL_NAME;\n }\n\n /**\n * Static helper for creates a unit instance\n *\n * @param {Object} [id] optional unique identifier for a unit; , id is calculated internally\n * @param {DataModel} data instance of datamodel\n * @param {Array.} layers layer configuration\n * @param {Object} config configurtion for the visual unit\n * @return {VisualUnit} Instance of a unit\n */\n static create (...params) {\n return new this(...params);\n }\n\n /**\n *\n *\n * @readonly\n * @memberof VisualUnit\n */\n firebolt (...firebolt) {\n if (firebolt.length) {\n this._firebolt = firebolt[0];\n return this;\n }\n return this._firebolt;\n }\n\n /**\n * Gets the domain for all axes of this visual unit.\n * @return {Object} Domains of each data field.\n */\n getDataDomain () {\n return this.store().get(DATADOMAIN);\n }\n\n /**\n * Retrieves the id created for this instance of visual unit\n * @return {string} id associated with the instance\n */\n id () {\n return this._id;\n }\n\n /**\n *\n *\n * @returns\n * @memberof VisualUnit\n */\n lockModel () {\n this._store.model.lock();\n return this;\n }\n\n /**\n *\n *\n * @returns\n * @memberof VisualUnit\n */\n unlockModel () {\n this._store.model.unlock();\n return this;\n }\n\n timeDiffsByField (...params) {\n if (params.length) {\n return this;\n }\n return this._timeDiffsByField;\n }\n\n /**\n * Renders the visual unit. It creates the layout and renders the axes and layers.\n * @return {VisualUnit} Instance of visual unit.\n */\n render (container) {\n const config = this.config();\n const { className, defClassName, sideEffectClassName, classPrefix } = config;\n const qualifiedClassName = getQualifiedClassName(defClassName, this.id(), config.classPrefix);\n const width = this.width();\n const height = this.height();\n const containerSelection = selectElement(container).style('position', 'relative');\n\n this._rootSvg = makeElement(containerSelection, 'svg', [null], className)\n .style('width', `${width}px`).style('height', `${height}px`);\n\n const node = this._rootSvg.node();\n setAttrs(node, {\n width,\n height,\n class: qualifiedClassName.join(' ')\n });\n renderGridLineLayers(this, node);\n renderLayers(this, node, this.layers(), {\n width,\n height\n });\n this._sideEffectGroup = createSideEffectGroup(node, `${classPrefix}-${sideEffectClassName}`);\n return this;\n }\n\n done () {\n return this._renderedPromise;\n }\n /**\n *\n *\n * @returns\n * @memberof VisualUnit\n */\n enableCaching () {\n this._cache = true;\n return this;\n }\n\n /**\n *\n *\n * @returns\n * @memberof VisualUnit\n */\n clearCaching () {\n this._cache = false;\n this.cachedData([this.cachedData()[0]]);\n return this;\n }\n\n /**\n *\n *\n * @returns\n * @memberof VisualUnit\n */\n getDrawingContext () {\n const rootSvg = this._rootSvg && this._rootSvg.node();\n const width = this.width();\n const height = this.height();\n return {\n htmlContainer: this.mount(),\n svgContainer: rootSvg,\n width,\n height,\n sideEffectGroup: this._sideEffectGroup,\n parentContainer: this.parentContainer(),\n xOffset: 0,\n yOffset: 0\n };\n }\n\n /**\n * Returns the serialized configuration of visual unit.\n * @return {Object} serialized configuration\n */\n serialize () {\n return {\n layers: this.layers().map(layer => layer.serialize()),\n config: this.config(),\n axes: this.store().get('axes').map(axis => axis.serialize())\n };\n }\n\n /**\n *\n *\n * @param {*} layerDef\n * @returns\n * @memberof VisualUnit\n */\n addLayer (layerDef) {\n const layerName = layerDef.name;\n const layer = this.getLayerByName(layerName);\n const measurement = {\n width: this.width(),\n height: this.height()\n };\n\n if (layer) {\n return [layer];\n }\n const serializedDef = layerFactory.getSerializedConf(layerDef.mark, layerDef);\n const instances = Object.values(getLayerFromDef(this, serializedDef));\n this.layers().push(...instances);\n const layerAxisIndex = getLayerAxisIndex(instances, this.fields());\n this._layerAxisIndex = Object.assign(this._layerAxisIndex, layerAxisIndex);\n attachAxisToLayers(this.axes(), instances, layerAxisIndex);\n const store = { unit: this, layers: {} };\n this.layers().forEach((inst) => {\n store.layers[inst.alias()] = inst;\n });\n instances.forEach((lyr) => {\n resolveEncodingTransform(lyr, store);\n lyr.measurement(measurement);\n lyr.dataProps({\n timeDiffs: this.store().get(TIMEDIFFS)\n });\n });\n return instances;\n }\n\n /**\n *\n *\n * @returns\n * @memberof VisualUnit\n */\n remove () {\n const lifeCycleManager = this._dependencies.lifeCycleManager;\n lifeCycleManager.notify({ client: this, action: 'beforeremove', formalName: 'unit' });\n this.store().unsubscribeAll();\n selectElement(this.mount()).remove();\n this.firebolt().remove();\n // Remove layers\n lifeCycleManager.notify({ client: this.layers(), action: 'beforeremove', formalName: 'layer' });\n this.layers().forEach(layer => layer.remove());\n lifeCycleManager.notify({ client: this.layers(), action: 'removed', formalName: 'layer' });\n lifeCycleManager.notify({ client: this, action: 'removed', formalName: 'unit' });\n return this;\n }\n\n /**\n *\n *\n * @param {*} identifiers\n * @returns\n * @memberof VisualUnit\n */\n getDataModelFromIdentifiers (identifiers, mode, parentModel) {\n if (identifiers === null) {\n return null;\n }\n const dataModel = parentModel || this.data();\n return getDataModelFromIdentifiers(dataModel, identifiers, mode);\n }\n\n /**\n *\n *\n * @returns\n * @memberof VisualUnit\n */\n resetData () {\n this.data(this.cachedData()[0]);\n return this;\n }\n\n /**\n *\n *\n * @returns\n * @memberof VisualUnit\n */\n getSourceInfo () {\n return {\n dimensionMeasureMap: this._dimensionMeasureMap,\n fields: this.fields(),\n data: this.data(),\n axes: this.axes()\n };\n }\n\n /**\n *\n *\n * @returns\n * @memberof VisualUnit\n */\n getDefaultTargetContainer () {\n const { classPrefix, defClassName } = this.config();\n return [`.${classPrefix}-${defClassName}`];\n }\n\n /**\n *\n *\n * @param {*} type\n * @returns\n * @memberof VisualUnit\n */\n getLayersByType (type) {\n const layers = getLayersBy(this.layers(), 'type', type);\n return layers;\n }\n\n /**\n *\n *\n * @param {*} name\n * @returns\n * @memberof VisualUnit\n */\n getLayerByName (name) {\n const layers = getLayersBy(this.layers(), 'name', name);\n return layers[0];\n }\n\n /**\n *\n *\n * @param {*} domain\n * @returns\n * @memberof VisualUnit\n */\n updateAxisDomain (domain) {\n ['x', 'y'].forEach((type) => {\n const axes = this.axes()[type];\n let min = [];\n let max = [];\n let dom;\n axes && axes.forEach((axis, i) => {\n const field = this.fields()[type][i];\n dom = domain[`${this.fields()[type][i]}`];\n\n if (field.type() !== FieldType.DIMENSION && dom) {\n min[i] = dom[0];\n max[i] = dom[1];\n }\n });\n if (axes) {\n if (axes.length > 1) {\n const axisConf = axes[0].config();\n if (axes[0].constructor.type() === 'linear') {\n if (axisConf.alignZeroLine) {\n axes.forEach(axis => axis.config({\n nice: false\n }));\n const adjustedDomain = getAdjustedDomain(max, min);\n min = adjustedDomain.min;\n max = adjustedDomain.max;\n }\n\n axes[0].updateDomainCache([min[0], max[0]]);\n axes[1].updateDomainCache([min[1], max[1]]);\n } else {\n axes[0].updateDomainCache(dom);\n axes[1].updateDomainCache(dom);\n }\n } else {\n axes[0].updateDomainCache(dom);\n }\n }\n });\n return this;\n }\n\n /**\n * Finds the nearest point closest to the x and y position.\n * @param {number} x x position.\n * @param {number} y y position.\n * @return {Object} Nearest point.\n */\n getNearestPoint (x, y, args) {\n let pointObj = {\n id: null\n };\n const dimValue = getNearestDimensionalValue(this, {\n x,\n y\n });\n\n if (dimValue !== null && args.getAllPoints) {\n pointObj.id = dimValue;\n const pointInf = this.getMarkInfFromLayers(x, y, args);\n pointObj.target = pointInf && pointInf.id ? pointInf.id : pointObj.id;\n return pointObj;\n }\n\n const markInf = this.getMarkInfFromLayers(x, y, args) || { id: null };\n pointObj = Object.assign({}, markInf);\n\n pointObj.target = markInf.id;\n return pointObj;\n }\n\n getMarkInfFromLayers (x, y, args) {\n const layers = this.layers();\n const len = layers.length;\n let point = null;\n // Iterate through the layers array and fetch the nearest point from each layer. If a valid\n // nearest point is found from any layer, then return that point.\n for (let i = 0; i < len; i++) {\n const layer = layers[i];\n const config = layer.config();\n if (config.interactive !== false) {\n point = layer.getNearestPoint(x, y, args);\n }\n if (point) {\n return point;\n }\n }\n return point;\n }\n\n /**\n *\n *\n * @param {*} identifiers\n * @returns\n * @memberof VisualUnit\n */\n getPlotPointsFromIdentifiers (identifiers, config = {}) {\n let points = [];\n let parsedIdentifiers = identifiers;\n if (identifiers === null) {\n return [];\n }\n const layers = this.layers();\n const len = layers.length;\n if (isSimpleObject(identifiers)) {\n parsedIdentifiers = [Object.keys(identifiers)];\n parsedIdentifiers = [...parsedIdentifiers, ...transposeArray(Object.values(identifiers))];\n }\n for (let i = 0; i < len; i++) {\n const layer = layers[i];\n if (layer.config().interactive !== false) {\n points = [...points, ...layer.getPointsFromIdentifiers(parsedIdentifiers, config)];\n }\n }\n return points;\n }\n\n /**\n *\n *\n * @param {*} name\n * @returns\n * @memberof VisualUnit\n */\n removeLayerByName (name) {\n removeLayersBy('name', name);\n return this;\n }\n\n /**\n *\n *\n * @param {*} type\n * @returns\n * @memberof VisualUnit\n */\n removeLayersByType (type) {\n removeLayersBy('type', type);\n return this;\n }\n\n parentContainer (...container) {\n if (container.length) {\n this._parentContainer = container[0];\n\n return this;\n }\n return this._parentContainer;\n }\n}\n","import { DataModel } from 'muze-utils';\n\nimport { retriveDomainFromData } from './group-utils';\n\n/**\n * Gets name of fields form the variables\n *\n * @param {*} fields1\n * @param {*} [fields2=[]]\n * @return\n */\nconst getFieldNames = (fields1, fields2 = []) => [fields1, fields2].map(fields => fields.reduce((acc, d) => {\n acc = [...acc, ...d.getMembers()];\n return acc;\n}, []));\n\n/**\n * Creates a selected datamodel from a parent datamodel and a set of field names\n *\n * @param {Object} datamodel provided as input\n * @param {Array} fieldNames schema names\n * @param {Array} fieldValues values of those schema names to be selected\n * @return {Object} creates a new selected datamodel\n */\nconst createSelectedDataModel = (datamodel, fieldNames, fieldValues) =>\n datamodel.select(fields => fieldNames.every((field, k) => fields[field].value === fieldValues[k]));\n\n/**\n *\n *\n * @param {*} facets\n * @param {*} keyArray\n * @return\n */\nconst uniqueKeyGenerator = (keyArray, context, depth = 0, val = []) => {\n const {\n facets,\n dataModel,\n uniqueValues\n } = context;\n\n // Get unique keys for the next depth recursively if required\n if (facets[depth + 1]) {\n const field = facets[depth];\n uniqueValues.forEach((value) => {\n const newDm = dataModel.select(fields => fields[field].value === value);\n const nextDepthUniqueValues = retriveDomainFromData(newDm, facets[depth + 1]);\n const newContext = {\n facets,\n dataModel: newDm,\n uniqueValues: nextDepthUniqueValues\n };\n\n uniqueKeyGenerator(keyArray, newContext, depth + 1, [...val, value]);\n });\n } else {\n uniqueValues.forEach((value) => {\n keyArray.push([...val, value]);\n });\n }\n};\n\n/**\n * projects row model based on the set of row and/or column and other projection fields\n *\n * @param {Object} datamodel provided as input\n * @return {Object} Projected datamodel\n */\nconst projectRows = (datamodel, projections) => {\n const {\n allColumnProjections,\n rowProjections,\n optionalProjections\n } = projections;\n\n if (rowProjections.length > 0) {\n return rowProjections.map((projectFields) => {\n const [projFieldNames, colProjFieldNames] = getFieldNames(projectFields, allColumnProjections);\n return datamodel.project([...projFieldNames, ...colProjFieldNames, ...optionalProjections]);\n });\n }\n return [datamodel];\n};\n\n/**\n * Adds the datamodels to current row index based on column fields\n *\n * @param {Array} context current context\n * @param {Array} callback List of facets applied to the current datamodel\n */\nconst pushToMatrix = (context, callback) => {\n let cells = [];\n const {\n matrix,\n datamodel,\n facetInfo,\n fieldInfo\n } = context;\n // Get projected fields for current row\n const {\n rowProjections,\n colProjections,\n optionalProjections\n } = fieldInfo;\n const {\n rowIndex,\n columnIndex\n } = facetInfo;\n const rowProj = rowProjections[(rowIndex) % rowProjections.length] || [];\n\n // Get the cells for the matrix from the return function of the callback on the datamodel.\n // callback function -> (datamodel, {projections, indices}, facets)\n if (colProjections.length > 0) {\n cells = colProjections.map((projectFields, projIdx) => {\n const [colProjFieldNames, rowProjFieldNames] = getFieldNames(projectFields, rowProj);\n const projectedDm = datamodel.project([...colProjFieldNames, ...rowProjFieldNames, ...optionalProjections]);\n const projections = { rowFields: rowProj, columnFields: projectFields };\n const indices = { rowIndex, columnIndex: columnIndex * colProjections.length + projIdx };\n\n return callback(projectedDm, { projections, indices }, facetInfo);\n });\n } else {\n const projections = { rowFields: rowProj, columnFields: [] };\n const indices = { rowIndex, columnIndex };\n\n cells = [callback(datamodel, { projections, indices }, facetInfo)];\n }\n\n matrix[rowIndex] = matrix[rowIndex] || [];\n matrix[rowIndex].push(...cells);\n};\n\n/**\n * Gets Matrixes for corresponding datamodel, facets and projections\n *\n * @param {Object} dataModel input datamodel\n * @param {Object} fieldMap corresponding fieldmap\n * @param {Array} facetsAndProjections contains the set of facets and projections for the matrices\n * @param {Function} callback Callback executed after datamodels are prepared after sel/proj\n * @return {Object} set of matrices with the corresponding row and column keys\n */\nexport const getMatrixModel = (dataModel, fieldInfo, callback) => {\n let rowDataModels = [];\n const rowKeys = [];\n const columnKeys = [];\n const allColumnProjections = [];\n const matrix = [];\n const facetInfo = [];\n const {\n rowFacets,\n colFacets,\n colProjections\n } = fieldInfo;\n\n colProjections.forEach((colProj) => {\n allColumnProjections.push(...colProj);\n });\n fieldInfo.allColumnProjections = allColumnProjections;\n\n // Performing row selection and projection\n if (rowFacets.length > 0) {\n // Get unique values for the root level of facet\n const field = rowFacets[0].toString();\n const firstLevelRowKeys = retriveDomainFromData(dataModel, field);\n\n // Get unique keys in the form of an array of arrays for each row\n uniqueKeyGenerator(rowKeys, { facets: rowFacets, dataModel, uniqueValues: firstLevelRowKeys });\n\n // Apply selection -> projection -> row datamodels\n rowKeys.forEach((val) => {\n // Create faceted datamodel\n const [rowFacetFieldNames] = getFieldNames(rowFacets);\n const selectedDataModel = createSelectedDataModel(dataModel, rowFacetFieldNames, val);\n\n // Project the datamodel based on the number of projections (based on last levels)\n facetInfo.push([rowFacets, val]);\n rowDataModels.push(...projectRows(selectedDataModel, fieldInfo));\n });\n } else {\n // No row facets, hence only row projection\n rowDataModels.push(...projectRows(dataModel, fieldInfo));\n }\n\n // Maintaining set of row datamodels for column resolution\n rowDataModels = rowDataModels.length > 0 ? rowDataModels : [[]];\n\n // Performing column selection and projection\n if (colFacets.length > 0) {\n const colFacetNames = colFacets.map(d => `${d}`);\n // Get unique values for the root level of facet\n const field = colFacetNames[0];\n const firstLevelColumnKeys = retriveDomainFromData(dataModel, field);\n\n // Get unique keys to create faceted datamodels: this time for columns\n uniqueKeyGenerator(columnKeys, {\n facets: colFacetNames,\n dataModel,\n uniqueValues: firstLevelColumnKeys\n });\n\n // For each row in the datamodel, apply selection -> projection -> push the projection to matri\n rowDataModels.forEach((dme, rIndex) => {\n facetInfo[rIndex] = facetInfo[rIndex] || [[], []];\n columnKeys.forEach((val, cIndex) => {\n matrix[rIndex] = matrix[rIndex] || [];\n\n // If datamodel is not present in current row, choose parent datamodel\n const datamodel = dme instanceof DataModel ? dme : dataModel;\n\n // Selection is made on the datamodel for the current row\n const selectedDataModel = createSelectedDataModel(datamodel, colFacetNames, val);\n const context = {\n matrix,\n datamodel: selectedDataModel,\n facetInfo: {\n rowFacets: facetInfo[rIndex],\n colFacets: [colFacets, val],\n rowIndex: rIndex,\n columnIndex: cIndex\n },\n fieldInfo\n };\n pushToMatrix(context, callback);\n });\n });\n } else {\n // No column facets, hence only row projection\n rowDataModels.forEach((dme, rIndex) => {\n facetInfo[rIndex] = facetInfo[rIndex] || [[], []];\n const context = {\n matrix,\n datamodel: dme || dataModel,\n facetInfo: {\n rowFacets: facetInfo[rIndex],\n colFacets: [[], []],\n rowIndex: rIndex,\n columnIndex: 0\n },\n fieldInfo\n };\n\n pushToMatrix(context, callback);\n });\n }\n\n // Getting column keys\n const transposedColKeys = columnKeys.length > 0 ? columnKeys[0].map((col, i) =>\n columnKeys.map(row => row[i])) : columnKeys;\n\n return { matrix, rowKeys, columnKeys: transposedColKeys };\n};\n","import { AxisOrientation } from '@chartshq/muze-axis';\nimport { getObjProp, FieldType } from 'muze-utils';\nimport { getMatrixModel } from './matrix-model';\nimport {\n getCellKey,\n isDistributionEqual,\n mutateAxesFromMap,\n createSelection,\n getFieldsFromSuppliedLayers,\n extractFields\n} from './group-utils';\nimport { ROW, ROWS, COLUMNS, COL, LEFT, RIGHT, TOP, BOTTOM, PRIMARY, SECONDARY, X, Y } from '../enums/constants';\n\n/**\n * Updates row and column cells with the geom cell corresponding to the facet keys\n *\n * @param {*} resolver\n * @param {*} facets\n */\nconst updateCells = (resolver, facets, geomCell) => {\n [ROW, COL].forEach((field) => {\n const cells = resolver[`${field}Cells`]();\n const facetKey = facets[`${field}Facets`][1].join();\n\n !cells[facetKey] && (cells[facetKey] = []);\n cells[facetKey].push(geomCell);\n resolver[`${field}Cells`](cells);\n });\n};\n\n/**\n *\n *\n * @param {*} context\n * @param {*} datamodel\n * @param {*} fieldInfo\n * @param {*} facets\n * @return\n */\nexport const createValueCells = (context, datamodel, fieldInfo, facets) => {\n const {\n projections,\n indices\n } = fieldInfo;\n const {\n rowFields,\n columnFields\n } = projections;\n const {\n rowIndex,\n columnIndex\n } = indices;\n const {\n suppliedLayers,\n cell: GeomCell,\n resolver,\n config,\n encoder,\n detailFields\n } = context;\n const axes = resolver.axes();\n const cacheMaps = resolver.cacheMaps();\n const matrixLayers = resolver.matrixLayers();\n const labelManager = resolver.dependencies().smartlabel;\n const horizontalAxis = resolver.horizontalAxis();\n const verticalAxis = resolver.verticalAxis();\n const datamodelTransform = resolver.datamodelTransform();\n const {\n entryCellMap,\n exitCellMap\n } = cacheMaps;\n const layerConfigArr = encoder.getLayerConfig({ columnFields, rowFields }, suppliedLayers || []);\n const axesCreators = { config, labelManager, axes, cacheMaps };\n\n fieldInfo.normalizedColumns = verticalAxis.fields;\n fieldInfo.normalizedRows = horizontalAxis.fields;\n\n const groupAxes = encoder.createAxis(axesCreators, fieldInfo);\n\n matrixLayers[rowIndex] = matrixLayers[rowIndex] ? matrixLayers[rowIndex] : [];\n matrixLayers[rowIndex][columnIndex] = layerConfigArr;\n\n // return from map if already there otherwise create and put in map\n const geomCellKey = getCellKey(rowIndex, columnIndex);\n const fields = {\n y: rowFields,\n x: columnFields\n };\n const allFacets = [\n [...facets.rowFacets[0], ...facets.colFacets[0]],\n [...facets.rowFacets[1], ...facets.colFacets[1]]\n ];\n const geomCell = !exitCellMap.has(geomCellKey) ? new GeomCell() : exitCellMap.get(geomCellKey);\n\n geomCell.data(datamodel)\n .axes(groupAxes)\n .fields(fields)\n .transform(datamodelTransform)\n .detailFields(detailFields)\n .facetByFields(allFacets);\n entryCellMap.set(geomCellKey, geomCell);\n exitCellMap.delete(geomCellKey);\n\n updateCells(resolver, facets, geomCell);\n\n return entryCellMap.get(geomCellKey);\n};\n\n/**\n * Creates axis cells based on the set of axes\n *\n * @param {Selection} selection Contains a selection of the axis units\n * @param {Array} axes Actual axis units\n * @param {number} axisIndex 0-> primary axis, 1-> secondary axis(when dual axis is made)\n * @param {Object} cells Contains a collection of the cells\n * @return {Object} return either set of axis/blank cells depending on the config\n */\n\nconst createAxisCells = (selection, axes, axisIndex, cells) =>\n createSelection(selection, axis => axis, axes, (item, i) => i + item.reduce((e, n) => {\n const id = n.id + axisIndex;\n return e + id;\n }, '')).map((axis) => {\n if (axis && axis[axisIndex]) {\n const axisInst = axis[axisIndex];\n const { orientation, show } = axisInst.config();\n\n return new cells.AxisCell().source(axisInst).config({\n isOffset: orientation === AxisOrientation.LEFT || orientation === AxisOrientation.TOP,\n show\n });\n }\n return new cells.BlankCell().config({ show: false });\n });\n\n/**\n *\n *\n * @param {*} context\n * @param {*} selectionObj\n * @param {*} cells\n * @retur\n */\nconst axisPlaceholderGn = (context, selObj, cells) => {\n const {\n matrices\n } = context;\n const {\n axesMatrix\n } = matrices;\n\n return (type, axisFrom) => {\n const axes = axesMatrix[`${type}`];\n\n if (axes && axes.length) {\n if (type === X || type === Y) {\n const fieldNames = type === Y ? ROWS : COLUMNS;\n\n [PRIMARY, SECONDARY].forEach((fieldType, index) => {\n const selObjProp = `${fieldNames}${fieldType}`;\n let axisIndex = index;\n let axesForDraw = axes;\n if (axisFrom === RIGHT || axisFrom === BOTTOM) {\n axisIndex = 1 - axisIndex;\n }\n if (!getObjProp(axes, 0, axisIndex)) {\n axesForDraw = [];\n }\n selObj[selObjProp] = createAxisCells(selObj[selObjProp], axesForDraw, axisIndex, cells);\n });\n } else {\n selObj.rowsPrimary = createAxisCells(selObj.rowPrime, axes.map(() => []), 0, cells);\n selObj.columnsPrimary = createAxisCells(selObj.colPrime, axes[0], 0, cells);\n }\n }\n return selObj;\n };\n};\n\n/**\n * Creates header cells based on the set of headers\n *\n * @param {Object} selection Contains a selection of the header units\n * @param {string} headers Contains a list of the headers\n * @param {Object} cells Contains a collection of the cells\n * @param {Object} labelManager smart label instance\n * @return {Object} return either set of header cells depending on the config\n */\nconst createTextCells = (selection, headers, cells, labelManager) => createSelection(selection,\n label => new cells.TextCell({}, { labelManager }).source(label), headers, (key, i) => key + i);\n\n/**\n *\n *\n * @param {*} context\n * @param {*} selectionObj\n * @param {*} cells\n * @param {*} labelManager\n * @return\n */\nconst headerPlaceholderGn = (context, selectionObj, cells, labelManager) => {\n const {\n axis,\n keys,\n type,\n facetConfig\n } = context;\n const counter = axis.length / keys.length;\n const selectionKeys = keys.length ? axis.map((d, i) => keys[Math.floor(i / counter)]) : [];\n return createSelection(selectionObj[`${type}Headers`], keySet => keySet, selectionKeys, (keySet, i) =>\n `${keySet.join(',')}-${i}`).map(keySet => createTextCells(null, keySet, cells, labelManager)\n .map((cell, k, i) => cell.source(keySet[i]).config(facetConfig || {})));\n};\n\n/**\n * Creates a set of placeholders as a part of selection object\n *\n * @param {Array} normalizedOptions contains normalized rows and columns\n * @param {Array} matrices contains axis and value matrices\n * @param {aArrayny} projections contains set of row and column projections\n * @param {Object} cells Contains a collection of the cells\n * @param {Object} labelManager smart label instance\n * @return {Object} Creates a set of placeholders as a part of selections\n */\nconst generatePlaceholders = (context, cells, labelManager) => {\n let selectionObj;\n const {\n matrices,\n fields,\n facetsAndProjections,\n selection,\n facetConfig,\n encoders\n } = context;\n const {\n rows,\n columns\n } = fields;\n const {\n valuesMatrix\n } = matrices;\n const {\n rowProjections,\n colProjections\n } = facetsAndProjections;\n const {\n rowKeys,\n columnKeys\n } = valuesMatrix;\n const takeAxisFrom = encoders.simpleEncoder._axisFrom;\n const takeHeaderFrom = encoders.simpleEncoder._headerFrom;\n\n selectionObj = selection || {};\n\n ['pie', X, Y].forEach((axis) => {\n const axisFrom = axis === X ? takeAxisFrom.column : takeAxisFrom.row;\n selectionObj = axisPlaceholderGn(context, selectionObj, cells)(axis, axisFrom);\n });\n\n const {\n rowsPrimary,\n rowsSecondary,\n columnsPrimary,\n columnsSecondary\n } = selectionObj;\n\n const rowAxis = rowsPrimary && rowsPrimary.getObjects().length ? rowsPrimary.getObjects() :\n (rowsSecondary && rowsSecondary.getObjects().length ? rowsSecondary.getObjects() : []);\n const colAxis = columnsPrimary && columnsPrimary.getObjects().length ? columnsPrimary.getObjects() :\n (columnsSecondary && columnsSecondary.getObjects().length ? columnsSecondary.getObjects() : []);\n\n const headerConfig = [\n { type: LEFT, section: rows[0], axis: rowAxis, headerFrom: takeHeaderFrom.row },\n { type: RIGHT, section: rows[1], axis: rowAxis, headerFrom: takeHeaderFrom.row },\n { type: TOP, section: columns[0], axis: colAxis, headerFrom: takeHeaderFrom.column },\n { type: BOTTOM, section: columns[1], axis: colAxis, headerFrom: takeHeaderFrom.column }\n ];\n\n headerConfig.forEach((config, index) => {\n let keys;\n let length;\n const {\n type,\n section,\n axis,\n headerFrom\n } = config;\n\n if (index < 2) {\n keys = rowKeys;\n length = rowProjections.length > 0 ? rowProjections.length : 1;\n } else {\n keys = columnKeys;\n length = colProjections.length > 0 ? colProjections.length : 1;\n }\n\n if (section.length && headerFrom === type && axis && keys.length) {\n const hContext = { axis, length, type };\n let headers = [];\n if (index < 2) {\n hContext.keys = keys;\n hContext.facetConfig = facetConfig.rows;\n headers = headerPlaceholderGn(hContext, selectionObj, cells, labelManager);\n } else {\n hContext.facetConfig = facetConfig.columns;\n hContext.keys = keys[0].map((key, i) => keys.map(e => e[i]));\n headers = headerPlaceholderGn(hContext, selectionObj, cells, labelManager);\n }\n selectionObj[`${type}Headers`] = headers;\n } else {\n selectionObj[`${type}Headers`] = null;\n }\n });\n return selectionObj;\n};\n\n/**\n * Generates matrices\n *\n * @param {Object} config Configuration to generate matrices\n * @param {Array} matrices Matrices containing the set of visual units and axes units\n * @param {Object} cells Contains a collection of the cells\n * @param {Object} labelManager smart label instance\n * @return {Object} contains a collection of matrices\n */\nexport const generateMatrices = (context, matrices, cells, labelManager) => {\n const {\n unitHeight,\n unitWidth,\n facetsAndProjections,\n normalizedRows,\n normalizedColumns,\n selection,\n axisFrom,\n facetConfig,\n encoders\n } = context;\n const placeholderContext = {\n fields: {\n rows: normalizedRows,\n columns: normalizedColumns\n },\n matrices,\n facetsAndProjections,\n selection,\n axisFrom,\n facetConfig,\n encoders\n };\n // Generate placeholders for all matrices\n const selectionObj = generatePlaceholders(placeholderContext, cells, labelManager);\n const {\n columnsPrimary,\n columnsSecondary,\n rowsPrimary,\n rowsSecondary,\n leftHeaders,\n topHeaders,\n bottomHeaders,\n rightHeaders\n } = selectionObj;\n const [rowPrime, rowSec, colPrime, colSec] = [rowsPrimary, rowsSecondary, columnsPrimary, columnsSecondary]\n .map(d => (d ? d.getObjects() : []));\n const [leftFacets, rightFacets] = [leftHeaders, rightHeaders].map(e => (e ? e.getObjects()\n .map(f => f.getObjects()) : []));\n\n // Compute left matrix using left headers and the axes on the rows\n let leftMatrix = leftFacets.length ? leftFacets.map((d, i) => {\n rowPrime[i] = rowPrime[i] ? [rowPrime[i]] : [];\n return [...d, ...rowPrime[i]];\n }) : (rowPrime ? rowPrime.map(d => [d]) : []);\n\n // Compute right matrix using right headers and the axes on the rows\n const rightMatrix = rowSec.length ? rowSec.map((d, i) => [d, ...(rightFacets[i] || [])]) : (rightFacets.length ?\n rightFacets.map(d => [...d]) : []);\n\n const topMatrix = [];\n if (topHeaders) {\n const headers = topHeaders.getObjects();\n headers.forEach((e) => {\n const innerHeaders = e.getObjects();\n innerHeaders.forEach((x, i) => {\n topMatrix[i] = topMatrix[i] || [];\n topMatrix[i].push(x);\n });\n });\n }\n // Compute top matrix using the top headers and axes on the columns\n if (colPrime.length) {\n topMatrix.push(colPrime);\n }\n\n // Bottom and right matrices are prepared using the user config.\n let bottomMatrix = [];\n if (colSec.length) {\n bottomMatrix.push(colSec);\n }\n const currentBottomLength = bottomMatrix.length;\n if (bottomHeaders) {\n const headers = bottomHeaders.getObjects();\n headers.forEach((e) => {\n const innerHeaders = e.getObjects();\n innerHeaders.forEach((x, i) => {\n bottomMatrix[i + currentBottomLength] = bottomMatrix[i + currentBottomLength] || [];\n bottomMatrix[i + currentBottomLength].push(x);\n });\n });\n }\n\n if (!leftMatrix.length && !rightMatrix.length) {\n const cell = new cells.BlankCell();\n cell.setAvailableSpace(unitWidth, unitHeight);\n leftMatrix = [[cell]];\n }\n\n if (!topMatrix.length && (!bottomMatrix.length || !bottomMatrix[0].length)) {\n const cell = new cells.BlankCell();\n cell.setAvailableSpace(unitWidth, unitHeight);\n bottomMatrix = [[cell]];\n }\n\n return {\n rows: [leftMatrix, rightMatrix],\n columns: [topMatrix, bottomMatrix],\n selectionObj\n };\n};\n\n/**\n * Computes matrices for a group\n *\n * @param {Object} datamodel on which the matrices are to be computed\n * @param {Object} config configuration of the matrices\n * @param {Object} layerRegistry contains the registered layers\n * @return {Object} conputed matrices\n * @memberof MatrixResolver\n */\nexport const computeMatrices = (context, config) => {\n const {\n resolver,\n datamodel,\n componentRegistry,\n encoders\n } = context;\n const {\n globalConfig,\n selection,\n transform\n } = config;\n const groupBy = globalConfig.autoGroupBy;\n const { smartlabel: labelManager } = resolver.dependencies();\n const fieldMap = datamodel.getFieldsConfig();\n const layerConfig = resolver.layerConfig();\n const registry = resolver.registry();\n const { fields: normalizedRows } = resolver.horizontalAxis();\n const { fields: normalizedColumns } = resolver.verticalAxis();\n const otherEncodings = resolver.optionalProjections(config, layerConfig);\n const facetsAndProjections = resolver.getAllFields();\n const matrixGnContext = {\n // Configuration to be passed to generate the different matrices.\n // A common config is used for both value matrices and other matrices\n normalizedColumns,\n normalizedRows,\n facetsAndProjections,\n layers: layerConfig,\n fieldMap,\n otherEncodings,\n encoders,\n facetConfig: globalConfig.facetConfig || {},\n axisFrom: globalConfig.axisFrom || {},\n selection\n };\n const cells = {\n GeomCell: resolver.getCellDef(registry.GeomCell),\n AxisCell: resolver.getCellDef(registry.AxisCell),\n BlankCell: resolver.getCellDef(registry.BlankCell),\n TextCell: resolver.getCellDef(registry.TextCell)\n };\n const isRowSizeEqual = isDistributionEqual(normalizedRows);\n const isColumnSizeEqual = isDistributionEqual(normalizedColumns);\n\n resolver.colCells({});\n resolver.rowCells({});\n resolver.datamodelTransform(transform || {});\n\n // Cell creation begins here\n resolver.resetSimpleAxes();\n\n const {\n entryCellMap\n } = resolver.cacheMaps();\n const newCacheMap = {\n exitCellMap: entryCellMap,\n entryCellMap: new Map()\n };\n\n resolver.cacheMaps(newCacheMap);\n\n const valueCellContext = {\n config: globalConfig,\n suppliedLayers: encoders.simpleEncoder.serializeLayerConfig(resolver.layerConfig()),\n resolver,\n cell: cells.GeomCell,\n encoder: encoders.simpleEncoder,\n newCacheMap,\n detailFields: config.detail\n };\n const fieldsConfig = datamodel.getFieldsConfig();\n let groupedModel = datamodel;\n if (!groupBy.disabled) {\n const fields = getFieldsFromSuppliedLayers(valueCellContext.suppliedLayers, datamodel.getFieldsConfig());\n const allFields = extractFields(facetsAndProjections, fields);\n\n const dimensions = allFields.filter(field =>\n fieldsConfig[field] && fieldsConfig[field].def.type === FieldType.DIMENSION);\n const aggregationFns = groupBy.measures;\n\n groupedModel = datamodel.groupBy(dimensions.length ? dimensions : [''], aggregationFns).project(allFields);\n }\n\n // return a callback function to create the cells from the matrix\n const cellCreator = resolver.valueCellsCreator(valueCellContext);\n // Creates value matrices from the datamodel and configs\n const valueMatrixInfo = getMatrixModel(groupedModel, facetsAndProjections, cellCreator);\n\n resolver.cacheMaps().exitCellMap.forEach((placeholder) => {\n placeholder.remove();\n });\n resolver.cacheMaps().exitCellMap.clear();\n resolver.valueMatrix(valueMatrixInfo.matrix);\n resolver.createUnits(componentRegistry, config);\n\n const { xAxes, yAxes } = mutateAxesFromMap(resolver.cacheMaps(), resolver.axes());\n\n resolver.axes({\n x: xAxes,\n y: yAxes\n });\n\n const matrices = {\n valuesMatrix: valueMatrixInfo,\n axesMatrix: resolver.axes()\n };\n // Create all matrices\n const { rows, columns, selectionObj } = generateMatrices(matrixGnContext, matrices, cells, labelManager);\n\n resolver.rowMatrix(rows);\n resolver.columnMatrix(columns);\n\n return {\n rows: resolver.rowMatrix(),\n columns: resolver.columnMatrix(),\n values: resolver.valueMatrix(),\n isColumnSizeEqual,\n isRowSizeEqual,\n selection: selectionObj,\n dataModels: {\n groupedModel,\n parentModel: datamodel\n }\n };\n};\n","import { VisualUnit } from '@chartshq/visual-unit';\nimport {\n initializeCacheMaps,\n headerCreator,\n extractUnitConfig,\n setFacetsAndProjections\n} from './group-utils';\nimport {\n ROW, COL, LEFT, RIGHT, COLOR, SIZE, SHAPE, DETAIL, CELL, X_AXES, Y_AXES, ENTRY_CELLS, EXIT_CELLS, INITIALIZED,\n AXIS, UNIT, BEFORE_UPDATE, UPDATED, VALUE_MATRIX, FACET_HEADERS\n} from '../enums/constants';\nimport { createValueCells, computeMatrices } from './cell-creator';\n/**\n * Resolves the matrices from configuration provided\n *\n * @export\n * @class MatrixResolver\n */\nexport default class MatrixResolver {\n\n /**\n * Creates an instance of MatrixResolver.\n * @param {Object} dependencies needed to run the resolver\n * @memberof MatrixResolver\n */\n constructor (dependencies) {\n this._registry = {};\n this._layerConfig = [];\n this._matrixLayers = [];\n this._dependencies = dependencies;\n this._rowMatrix = [];\n this._columnMatrix = [];\n this._valueMatrix = [];\n this._facets = {};\n this._projections = {};\n this._datamodelTransform = {};\n this._units = [];\n this._cacheMaps = {};\n this._axes = {\n x: {},\n y: {},\n color: [],\n size: [],\n shape: []\n };\n\n this.cacheMaps(initializeCacheMaps());\n }\n\n /**\n * Set: Registers placeholders, Get: return {Object} those placeholders\n *\n * @param {Object} placeholders cells that will construct the group\n * @return {Object} Either current instance or the set of placeholders\n * @memberof MatrixResolver\n */\n registry (...placeholders) {\n if (placeholders.length) {\n Object.entries(placeholders[0]).forEach((val) => {\n this._registry[val[0]] = val[1];\n });\n return this;\n }\n return this._registry;\n }\n\n /**\n * Used to set the layer config from outside or get current layer info\n *\n * @param {Object} type configuration of layer provided externally\n * @return {Object} either the layer or current instance\n * @memberof MatrixResolver\n */\n dependencies (...dep) {\n if (dep.length) {\n this._dependencies = dep[0];\n return this;\n }\n return this._dependencies;\n }\n\n /**\n * Used to set the layer config from outside or get current layer info\n *\n * @param {Object} type configuration of layer provided externally\n * @return {Object} either the layer or current instance\n * @memberof MatrixResolver\n */\n units (...unitArr) {\n if (unitArr.length) {\n this._units = unitArr[0];\n return this;\n }\n return this._units;\n }\n\n /**\n * Used to set the layer config from outside or get current layer info\n *\n * @param {Object} layer configuration of layer provided externally\n * @return {Object} either the layer or current instance\n * @memberof MatrixResolver\n */\n layerConfig (...config) {\n if (config.length) {\n this._layerConfig = config[0];\n return this;\n }\n return this._layerConfig;\n }\n\n /**\n * Used to set the layer config from outside or get current layer info\n *\n * @param {Object} type configuration of layer provided externally\n * @return {Object} either the layer or current instance\n * @memberof MatrixResolver\n */\n matrixLayers (...layers) {\n if (layers.length) {\n this._matrixLayers = layers[0];\n return this;\n }\n return this._matrixLayers;\n }\n\n /**\n * Used to set the layer config from outside or get current layer info\n *\n * @param {Object} type configuration of layer provided externally\n * @return {Object} either the layer or current instance\n * @memberof MatrixResolver\n */\n datamodelTransform (...transform) {\n if (transform.length) {\n this._datamodelTransform = transform[0];\n return this;\n }\n return this._datamodelTransform;\n }\n\n /**\n * Used to set the layer config from outside or get current layer info\n *\n * @param {Object} type configuration of layer provided externally\n * @return {Object} either the layer or current instance\n * @memberof MatrixResolver\n */\n cacheMaps (...maps) {\n if (maps.length) {\n [CELL, X_AXES, Y_AXES, ENTRY_CELLS, EXIT_CELLS].forEach((e) => {\n this._cacheMaps[`${e}Map`] = maps[0][`${e}Map`] || this._cacheMaps[`${e}Map`];\n });\n return this;\n }\n return this._cacheMaps;\n }\n\n /**\n * Used to set the layer config from outside or get current layer info\n *\n * @param {Object} type configuration of layer provided externally\n * @return {Object} either the layer or current instance\n * @memberof MatrixResolver\n */\n rowCells (...cells) {\n if (cells.length) {\n this._rowCells = cells[0];\n return this;\n }\n return this._rowCells;\n }\n\n /**\n * Used to set the layer config from outside or get current layer info\n *\n * @param {Object} type configuration of layer provided externally\n * @return {Object} either the layer or current instance\n * @memberof MatrixResolver\n */\n colCells (...cells) {\n if (cells.length) {\n this._colCells = cells[0];\n return this;\n }\n return this._colCells;\n }\n\n /**\n * Used to set the layer config from outside or get current layer info\n *\n * @param {Object} type configuration of layer provided externally\n * @return {Object} either the layer or current instance\n * @memberof MatrixResolver\n */\n axes (...axes) {\n if (axes.length) {\n this._axes = Object.assign({}, this._axes, axes[0]);\n return this;\n }\n return this._axes;\n }\n\n /**\n * Used to set the layer config from outside or get current layer info\n *\n * @param {Object} type configuration of layer provided externally\n * @return {Object} either the layer or current instance\n * @memberof MatrixResolver\n */\n rowMatrix (...rowMat) {\n if (rowMat.length) {\n this._rowMatrix = rowMat[0];\n return this;\n }\n return this._rowMatrix;\n }\n\n /**\n * Used to set the layer config from outside or get current layer info\n *\n * @param {Object} type configuration of layer provided externally\n * @return {Object} either the layer or current instance\n * @memberof MatrixResolver\n */\n columnMatrix (...colMat) {\n if (colMat.length) {\n this._columnMatrix = colMat[0];\n return this;\n }\n return this._columnMatrix;\n }\n\n /**\n * Used to set the layer config from outside or get current layer info\n *\n * @param {Object} type configuration of layer provided externally\n * @return {Object} either the layer or current instance\n * @memberof MatrixResolver\n */\n valueMatrix (...valMat) {\n if (valMat.length) {\n this._valueMatrix = valMat[0];\n return this;\n }\n return this._valueMatrix;\n }\n\n /**\n *\n *\n * @param {*} facets\n * @return\n * @memberof MatrixResolver\n */\n facets (...facets) {\n if (facets.length) {\n Object.entries(facets[0]).forEach((e) => {\n this._facets[e[0]] = e[1];\n });\n return this;\n }\n return this._facets;\n }\n\n /**\n *\n *\n * @param {*} projections\n * @return\n * @memberof MatrixResolver\n */\n projections (...projections) {\n if (projections.length) {\n Object.entries(projections[0]).forEach((e) => {\n this._projections[e[0]] = e[1];\n });\n return this;\n }\n return this._projections;\n }\n\n /**\n *\n *\n * @param {*} config\n * @param {*} layerConfig\n * @return\n * @memberof MatrixResolver\n */\n optionalProjections (config, layerConfig) {\n const otherEncodings = {};\n const optionalProjections = [];\n const otherEncodingTypes = [SIZE, COLOR, SHAPE];\n\n otherEncodingTypes.forEach((type) => {\n if (config[type] && config[type].field) {\n const enc = config[type];\n otherEncodings[type] = enc.field;\n optionalProjections.push(enc.field);\n }\n });\n\n if (config[DETAIL]) {\n optionalProjections.push(...config.detail);\n }\n\n if (layerConfig.length) {\n layerConfig.forEach((layer) => {\n if (layer.encoding) {\n Object.values(layer.encoding).forEach((enc) => {\n if (enc && optionalProjections.indexOf(enc.field) === -1) {\n optionalProjections.push(enc.field ? enc.field : enc);\n }\n });\n }\n });\n }\n this.projections({ optionalProjections });\n return otherEncodings;\n }\n\n /**\n * return the normalized set of rows and facets and projections\n *\n * @param {Object} rows parameters needed to set horizontal axis consisiting of rows\n * @return {Object} facets, projections and normalized rows\n * @memberof MatrixResolver\n */\n horizontalAxis (rows, encoder) {\n if (rows) {\n this._horizontalAxis = setFacetsAndProjections(this, { type: ROW, fields: rows }, encoder);\n return this;\n }\n return this._horizontalAxis;\n }\n\n /**\n * return the normalized set of columns and facets and projections\n *\n * @param {Object} columns parameters needed to set vertical axis consisiting of columns\n * @return {Object} facets, projections and normalized columns\n * @memberof MatrixResolver\n */\n verticalAxis (columns, encoder) {\n if (columns) {\n this._verticalAxis = setFacetsAndProjections(this, { type: COL, fields: columns }, encoder);\n return this;\n }\n return this._verticalAxis;\n }\n\n /**\n * Gets the class definition of a particular cell type(if the particular type has been extended, that particular\n * definition is returned)\n *\n * @param {Object} cell cell whose class definition is to be retrieved\n * @return {Object} cell definition\n * @memberof MatrixResolver\n */\n getCellDef (cell) {\n const registry = this.registry();\n\n Object.values(registry).forEach((e) => {\n if (e.prototype instanceof cell) {\n cell = e;\n }\n });\n return cell;\n }\n\n /**\n * return a visual cell creator along with its axis information to be injected to the datamodel creation\n * function\n *\n * @param {Object} GeomCell Type of cell to be created\n * @return {Object} Created cell\n * @memberof MatrixResolver\n */\n valueCellsCreator (context) {\n // reset matrix layers\n this.matrixLayers([]);\n\n return (datamodel, fieldInfo, facets) => createValueCells(context, datamodel, fieldInfo, facets);\n }\n\n /**\n * Callback to be applied on each cell of a matrix of a particular type\n *\n * @param {string} matrixType type of matrix on which callback is to be applied\n * @param {Function} callback function to be applied to each cell\n * @memberof MatrixResolver\n */\n forEach (matrixType, callback) {\n this[matrixType]().forEach((row, rIndex) => {\n row.forEach((col, cIndex) => {\n callback(rIndex, cIndex, col);\n });\n });\n }\n\n /**\n *\n *\n * @return\n * @memberof MatrixResolver\n */\n getAllFields () {\n const retObj = this.projections();\n\n Object.entries(this.facets()).forEach((e) => {\n retObj[e[0]] = e[1];\n });\n return retObj;\n }\n\n /**\n *\n *\n * @memberof MatrixResolver\n */\n resetSimpleAxes () {\n return this.axes({\n x: new Set(),\n y: new Set()\n });\n }\n\n /**\n *\n *\n * @param {*} componentRegistry\n * @param {*} config\n * @memberof MatrixResolver\n */\n createUnits (componentRegistry, config) {\n const {\n globalConfig,\n alias\n } = config;\n const {\n layerRegistry,\n sideEffectRegistry\n } = componentRegistry;\n const {\n smartlabel: smartLabel,\n lifeCycleManager\n } = this.dependencies();\n // Provide the source for the matrix\n const units = [];\n // Setting unit configuration\n const unitConfig = extractUnitConfig(globalConfig || {});\n\n this.forEach(VALUE_MATRIX, (i, j, el) => {\n let unit = el.source();\n if (!unit) {\n unit = VisualUnit.create({\n layerRegistry,\n sideEffectRegistry\n }, {\n smartLabel,\n lifeCycleManager\n });\n el.source(unit);\n units.push(unit);\n }\n unit.parentAlias(alias);\n el.config(unitConfig);\n });\n\n lifeCycleManager.notify({ client: units, action: INITIALIZED, formalName: UNIT });\n return this.units(units);\n }\n\n /**\n *\n *\n * @param {*} config\n * @memberof MatrixResolver\n */\n setDomains (config, datamodel, encoders) {\n const {\n color,\n shape,\n size,\n globalConfig\n } = config;\n const groupBy = globalConfig.autoGroupBy;\n const {\n rowFacets,\n colFacets\n } = this.getAllFields();\n const encoding = {\n color,\n shape,\n size\n };\n const facetFields = [...rowFacets.map(e => e.toString()), ...colFacets.map(e => e.toString())];\n const retContext = {\n domains: encoders.simpleEncoder.getRetinalFieldsDomain(datamodel, encoding, facetFields, groupBy),\n axes: this.axes(),\n encoding\n };\n encoders.retinalEncoder.setCommonDomain(retContext);\n return this;\n }\n\n /**\n *\n *\n * @return\n * @memberof MatrixResolver\n */\n getRetinalAxes () {\n const {\n color,\n shape,\n size\n } = this.axes();\n\n return {\n color: [...color],\n shape: [...shape],\n size: [...size]\n };\n }\n\n /**\n *\n *\n * @param {*} type\n * @return\n * @memberof MatrixResolver\n */\n getSimpleAxes (type) {\n return this.axes()[`${type}`];\n }\n\n /**\n *\n *\n * @param {*} datamodel\n * @param {*} config\n * @memberof MatrixResolver\n */\n createRetinalAxes (fieldsConfig, config, encoders) {\n const layerConfig = this.layerConfig();\n this.optionalProjections(config, layerConfig);\n const retinalAxes = encoders.retinalEncoder.createAxis({\n fieldsConfig,\n config,\n axes: this.axes()\n });\n const {\n lifeCycleManager\n } = this.dependencies();\n\n [COLOR, SHAPE, SIZE].forEach((e) => {\n this.axes()[e] = retinalAxes[e];\n });\n\n lifeCycleManager.notify({ client: this.axes(), action: INITIALIZED, formalName: AXIS });\n lifeCycleManager.notify({ client: this.units(), action: BEFORE_UPDATE, formalName: UNIT });\n\n const units = [];\n const matrixLayers = this.matrixLayers();\n\n this.forEach(VALUE_MATRIX, (i, j, el) => {\n el.axes(retinalAxes);\n el.source() && el.source().retinalFields(config);\n el.layerDef(encoders.retinalEncoder.getLayerConfig(config, matrixLayers[i][j]));\n el.updateModel();\n\n units.push(el.source());\n });\n\n lifeCycleManager.notify({ client: units, action: UPDATED, formalName: UNIT });\n return this;\n }\n\n /**\n *\n *\n * @param {*} placeholders\n * @param {*} fieldNames\n * @return\n * @memberof MatrixResolver\n */\n createHeaders (placeholders, fieldNames, config) {\n let bottomLeft = [];\n let bottomRight = [];\n const {\n rows,\n columns\n } = placeholders;\n const {\n smartlabel: labelManager,\n lifeCycleManager\n } = this.dependencies();\n const TextCell = this.getCellDef(this.registry().TextCell);\n const BlankCell = this.getCellDef(this.registry().BlankCell);\n const [leftRows, rightRows] = rows;\n const [topCols, bottomCols] = columns;\n const rowHeaders = fieldNames.rows;\n const blankCellCreator = cell => new BlankCell().config({ show: cell.config().show });\n\n // Headers and footers are created based on the rows. Thereafter, using the column information\n // they are tabularized into the current structure\n const headers = {\n left: headerCreator(leftRows, rowHeaders[0], config.showHeaders ? TextCell : BlankCell, labelManager),\n right: headerCreator(rightRows, rowHeaders[1], config.showHeaders ? TextCell : BlankCell, labelManager)\n };\n const footers = {\n left: leftRows.length > 0 ? leftRows[0].map(blankCellCreator) : [],\n right: rightRows.length > 0 ? rightRows[0].map(blankCellCreator) : []\n };\n const [topLeft, topRight] = [LEFT, RIGHT].map(type => topCols.map((col, i) => {\n if (i === topCols.length - 1) {\n return headers[type];\n }\n return footers[type];\n }));\n\n // Creating only bottom matrices if there is no information on the top\n if (topCols.length === 0) {\n [bottomLeft, bottomRight] = [LEFT, RIGHT].map(type => bottomCols.map((col, i) => {\n if (i === 0) {\n return headers[type];\n }\n return footers[type];\n }));\n } else {\n bottomLeft = bottomCols.map(() => (leftRows.length > 0 ? leftRows[0].map(blankCellCreator) : []));\n bottomRight = bottomCols.map(() => (rightRows.length > 0 ? rightRows[0].map(blankCellCreator) : []));\n }\n\n lifeCycleManager.notify({\n client: [topLeft, topRight, bottomLeft, bottomRight],\n action: INITIALIZED,\n formalName: FACET_HEADERS\n });\n\n return { topLeft, topRight, bottomLeft, bottomRight };\n }\n\n /**\n *\n *\n * @param {*} datamodel\n * @param {*} config\n * @param {*} componentRegistry\n * @param {*} encoders\n * @return\n * @memberof MatrixResolver\n */\n getMatrices (datamodel, config, componentRegistry, encoders) {\n const context = {\n datamodel,\n componentRegistry,\n encoders,\n resolver: this\n };\n\n return computeMatrices(context, config);\n }\n}\n","/**\n *\n *\n * @export\n * @class ValueMatrix\n */\nclass ValueMatrix {\n\n /**\n *Creates an instance of ValueMatrix.\n * @param {*} matrixArr\n * @memberof ValueMatrix\n */\n constructor (matrixArr) {\n const instancesById = {};\n\n this.matrix(matrixArr);\n this.filter(() => true);\n\n this.each((el, rIdx, cIdx) => {\n const cellValue = el.valueOf();\n if (cellValue && cellValue.id) {\n const id = cellValue.id();\n instancesById[id] = {\n instance: cellValue,\n rowIndex: rIdx,\n colIndex: cIdx\n };\n }\n });\n\n this.instancesById(instancesById);\n }\n\n /**\n *\n *\n * @param {*} id\n * @return\n * @memberof ValueMatrix\n */\n instancesById (...id) {\n if (id.length) {\n this._instancesById = id[0];\n return this;\n }\n return this._instancesById;\n }\n\n /**\n *\n *\n * @param {*} m\n * @return\n * @memberof ValueMatrix\n */\n matrix (...matrix) {\n if (matrix.length) {\n this._matrix = matrix[0];\n return this;\n }\n return this._matrix;\n }\n\n /**\n *\n *\n * @param {*} fn\n * @return\n * @memberof ValueMatrix\n */\n filter (...fn) {\n if (fn.length) {\n this._filterFn = fn[0];\n return this;\n }\n return this._filterFn;\n }\n\n /**\n *\n *\n * @return\n * @memberof ValueMatrix\n */\n width () {\n let rowWidth = 0;\n\n this.matrix().forEach((row) => {\n let currentRowWidth = 0;\n row.forEach((cell) => {\n currentRowWidth += cell.getLogicalSpace().width;\n });\n rowWidth = Math.max(rowWidth, currentRowWidth);\n });\n return rowWidth;\n }\n\n /**\n *\n *\n * @return\n * @memberof ValueMatrix\n */\n height () {\n let rowHeight = 0;\n\n this.matrix().forEach((row) => {\n let currentRowHeight = 0;\n row.forEach((cell) => {\n currentRowHeight = Math.max(currentRowHeight, cell.getLogicalSpace().height);\n });\n rowHeight += currentRowHeight;\n });\n return rowHeight;\n }\n\n /**\n *\n *\n * @param {*} fn\n * @return\n * @memberof ValueMatrix\n */\n each (fn) {\n const matrix = this.matrix();\n const filterFn = this.filter();\n\n matrix.forEach((row, rIndex) => {\n row.forEach((col, cIndex) => {\n if (filterFn(col)) {\n fn(col, rIndex, cIndex, matrix);\n }\n });\n });\n return this;\n }\n\n /**\n *\n *\n * @param {*} id\n * @return\n * @memberof ValueMatrix\n */\n findPlaceHolderById (id) {\n return this.instancesById()[id];\n }\n\n /**\n *\n *\n * @return\n * @memberof ValueMatrix\n */\n getMatrixArray () {\n return this.matrix();\n }\n}\n\nexport default ValueMatrix;\n","import { RetinalEncoder } from '../encoder';\nimport { DATA_UPDATE_COUNTER } from '../enums/defaults';\nimport { getEncoder, getBorders } from '../group-helper';\nimport ValueMatrix from './value-matrix';\nimport localOptions from './local-options';\n\nconst sanitizeRetinalConfig = (retinalConf) => {\n const conf = {};\n for (const key in retinalConf) {\n const confValue = retinalConf[key];\n if (typeof confValue === 'string' || !confValue) {\n conf[key] = {\n field: retinalConf[key]\n };\n } else {\n conf[key] = confValue;\n }\n }\n return conf;\n};\n\n/**\n *\n *\n * @param {*} placeholder\n * @memberof VisualGroup\n */\nconst setMatrixInstances = (context, placeholder) => {\n context._composition.matrices = {\n value: new ValueMatrix(placeholder.values),\n left: new ValueMatrix(placeholder.rows[0]),\n right: new ValueMatrix(placeholder.rows[1]),\n top: new ValueMatrix(placeholder.columns[0]),\n bottom: new ValueMatrix(placeholder.columns[1])\n };\n return context;\n};\n\n/**\n *\n *\n * @param {*} context\n * @returns\n */\nexport const setupChangeListeners = (context) => {\n context.store().registerImmediateListener([...Object.keys(localOptions), DATA_UPDATE_COUNTER], (...params) => {\n const datamodel = context.data();\n const [config, rows, columns, color, shape, size, detail, layers, transform] = params;\n\n if (datamodel && rows[1] && columns[1]) {\n // Get the resolver for the matrices\n const resolver = context.resolver();\n // Prepare configuration for matrix preparation\n let matrixConfig = {\n selection: context.selection(),\n alias: context.alias(),\n globalConfig: config[1] || {},\n rows: rows[1],\n columns: columns[1],\n detail: detail[1],\n layers: layers[1],\n transform: transform[1]\n };\n\n const retinalConfig = sanitizeRetinalConfig({\n color: color[1],\n shape: shape[1],\n size: size[1]\n });\n\n matrixConfig = Object.assign(matrixConfig, retinalConfig);\n // Create the encoders for the group\n const encoders = {};\n encoders.retinalEncoder = new RetinalEncoder();\n encoders.simpleEncoder = getEncoder(layers[1]);\n\n // Set the group type\n context.groupType(encoders.simpleEncoder.constructor.type());\n\n // Get sanitized fields as instances of the Vars Class\n const fields = encoders.simpleEncoder.fieldSanitizer(datamodel, matrixConfig);\n encoders.simpleEncoder.setAxisAndHeaders(config[1] ? config[1].axisFrom : {}, fields);\n // Setting layers for the code\n layers[1] && resolver.layerConfig(layers[1]);\n // Set the row and column axes\n resolver.horizontalAxis(fields.rows, encoders).verticalAxis(fields.columns, encoders);\n // Getting the placeholders\n const placeholderInfo = resolver.getMatrices(datamodel, matrixConfig, context.registry(), encoders);\n context._groupedDataModel = placeholderInfo.dataModels.groupedModel;\n // Set the selection object\n context.selection(placeholderInfo.selection);\n\n // Create retinal axes\n resolver.createRetinalAxes(placeholderInfo.dataModels.parentModel.getFieldsConfig(), retinalConfig,\n encoders);\n\n // Domains are evaluated for each of the axes for commonality\n resolver.setDomains(matrixConfig, placeholderInfo.dataModels, encoders);\n\n // Create matrix instances\n setMatrixInstances(context, placeholderInfo);\n\n // Prepare corner matrices\n context.cornerMatrices(resolver.createHeaders(placeholderInfo, fields, config[1]));\n\n // Set placeholder information\n context.placeholderInfo(placeholderInfo);\n\n context._composition.axes = resolver.axes();\n context.metaData({\n border: getBorders(placeholderInfo, encoders.simpleEncoder)\n });\n }\n return context;\n });\n return context;\n};\n","import { DATA_UPDATE_COUNTER } from '../enums/defaults';\n\nexport const PROPS = {\n alias: {},\n data: {\n sanitization: (context, value) => {\n if (context._data !== value) {\n const store = context.store();\n let hasDataUpdated = store.get(DATA_UPDATE_COUNTER);\n store.commit(DATA_UPDATE_COUNTER, ++hasDataUpdated);\n }\n return value;\n }\n },\n cornerMatrices: {},\n groupType: {},\n matrixInstance: {},\n metaData: {},\n placeholderInfo: {},\n resolver: {},\n registry: {\n sanitization: (context, value) => {\n if (context.resolver) {\n context.resolver().registry(value.cellRegistry);\n }\n return value;\n }\n },\n selection: {},\n store: {}\n};\n","import { transactor, generateGetterSetters } from 'muze-utils';\nimport localOptions from './local-options';\nimport { SimpleGroup } from '../simple-group';\nimport {\n MatrixResolver,\n initStore,\n findInGroup\n} from '../group-helper';\nimport { setupChangeListeners } from './change-listener';\nimport { PROPS } from './props';\nimport {\n CONFIG,\n MOUNT,\n RETINAL,\n Y\n} from '../enums/constants';\n\n/**\n * This class is used to create an instance of a visual group.\n * It extends the SimpleGroup (which is an interface). The visual group takes in a datamodel,\n * and a set of rows and columns, alongwith optional paramters (like color, size, shape).\n *\n * @class VisualGroup\n */\nclass VisualGroup extends SimpleGroup {\n\n /**\n * Creates an instance of VisualGroup. Requires dependencies and other registry options for placeholders\n * and layers that create individual units\n * @param {Object} registry Key value pair of compostions for the group\n * @param {Object} dependencies Dependencies needed to run the group\n * @memberof VisualGroup\n */\n constructor (registry, dependencies) {\n super();\n\n const {\n componentSubRegistry\n } = registry;\n\n this._dependencies = dependencies;\n // Generate getter/setter methods for all properties of the class\n // One can get each property by calling the method and can set it\n // by passing paramaters for the same. Thus, one can chain setter\n // getter methods.\n generateGetterSetters(this, PROPS);\n // Populate the store with default values\n this.store(initStore());\n\n // initialize group compositions\n this._composition = {};\n // store reference to data\n this._data = [];\n // matrix instance store each of the matrices\n this._matrixInstance = {};\n // store reference to mountpoint\n this._mount = null;\n // selection object that takes care of updating of components\n this._selection = {};\n // stores info about the placeholders generated after creation of matrices\n this._placeholderInfo = {};\n // corner matrices are the headers/footers for the application\n this._cornerMatrices = {};\n // Create instance of matrix resolver\n this.resolver(new MatrixResolver(this._dependencies));\n\n // Getting indiviual registered items\n this.registry({\n layerRegistry: componentSubRegistry.layerRegistry.get(),\n cellRegistry: componentSubRegistry.cellRegistry.get()\n });\n // Add local options to the store\n transactor(this, localOptions, this.store().model);\n // Register listeners\n setupChangeListeners(this);\n }\n\n matrixInstance (...matrices) {\n if (matrices.length) {\n return this;\n }\n return this.composition().matrices;\n }\n\n /**\n * Returns the composition of the Group\n *\n * @readonly\n * @memberof VisualGroup\n */\n composition (...params) {\n if (params.length) {\n return this;\n }\n return this._composition;\n }\n\n /**\n * Locks the model to prevent change listeners to be triggered until unlocked\n *\n * @return {Object} Instance of class VisualGroup\n * @memberof VisualGroup\n */\n lockModel () {\n this.store().model.lock();\n return this;\n }\n\n /**\n * Unlocks the model so that all change listeners can be triggered\n *\n * @return {Object} Instance of class VisualGroup\n * @memberof VisualGroup\n */\n unlockModel () {\n this.store().model.unlock();\n return this;\n }\n\n /**\n *\n *\n * @param {*} variable\n * @return\n * @memberof VisualGroup\n */\n where (variable) {\n return findInGroup(variable, this.resolver().getAllFields());\n }\n\n /**\n *\n *\n * @param {*} type\n * @return\n * @memberof VisualGroup\n */\n getAxes (type) {\n if (type === RETINAL) {\n return this.resolver().getRetinalAxes();\n }\n return this.resolver().getSimpleAxes(type);\n }\n\n /**\n *\n *\n * @return\n * @memberof VisualGroup\n */\n getCells (type) {\n return this.resolver()[`${type}Cells`]();\n }\n\n /**\n *\n *\n * @param {*} channel\n * @return\n * @memberof VisualGroup\n */\n getFieldsFromChannel (channel) {\n const {\n rowProjections,\n colProjections\n } = this.resolver().getAllFields();\n\n return channel === Y ? rowProjections : colProjections;\n }\n\n /**\n *\n *\n * @param {*} facetKey\n * @return\n * @memberof VisualGroup\n */\n getCellsByFacetKey (facetKey) {\n const resolver = this.resolver();\n const cells = resolver.rowCells()[facetKey] || resolver.colCells()[facetKey] || [];\n return cells;\n }\n\n /**\n *\n *\n * @param {*} facetKey\n * @return\n * @memberof VisualGroup\n */\n getAxesByFacetKey (axisType, facetKey) {\n const resolver = this.resolver();\n const cells = resolver.rowCells()[facetKey] || resolver.colCells()[facetKey];\n const axes = cells[0].valueOf().axes()[axisType] || [];\n\n return axes;\n }\n\n /**\n * This method is used to return a serialized representation of the instance's properties.\n *\n * @return {Object} Object with config proprties.\n * @memberof VisualGroup\n */\n serialize () {\n const store = this.store();\n\n return {\n [CONFIG]: store.get(CONFIG),\n [MOUNT]: store.get(MOUNT)\n };\n }\n\n getGroupByData () {\n return this._groupedDataModel;\n }\n}\n\nexport default VisualGroup;\n","import { PersistentBehaviour, SELECTION } from '@chartshq/muze-firebolt';\n\nexport default class SelectBehaviour extends PersistentBehaviour {\n static formalName () {\n return 'select';\n }\n\n setSelectionSet (addSet, selectionSet) {\n if (addSet === null) {\n selectionSet.reset();\n } else if (addSet.length) {\n // new add set\n const existingRemoveSet = addSet.filter(d => selectionSet._set[d] === SELECTION.SELECTION_OLD_EXIT\n || selectionSet._set[d] === SELECTION.SELECTION_NEW_EXIT);\n // existing add set\n if (existingRemoveSet.length) {\n selectionSet.updateEntry();\n selectionSet.add(existingRemoveSet);\n } else {\n selectionSet.updateExit();\n selectionSet.remove(addSet);\n }\n const { exitSet } = selectionSet.getSets();\n const mergedExitSet = [...new Set(exitSet[1]), ...new Set(exitSet[0])];\n const completeSetCount = selectionSet.getCompleteSet().length;\n if (exitSet[1].length !== completeSetCount && mergedExitSet.length === completeSetCount) {\n selectionSet.reset();\n }\n } else {\n selectionSet.remove(selectionSet.getCompleteSet());\n }\n return this;\n }\n}\n","import { BEHAVIOURS, ACTIONS } from '@chartshq/muze-firebolt';\n\nconst CLASSPREFIX = 'muze';\n\nexport const actionBehaviourMap = {\n [ACTIONS.DRAG]: {\n target: `.${CLASSPREFIX}-gradient-rect`,\n behaviours: [BEHAVIOURS.BRUSH]\n },\n [ACTIONS.HOVER]: {\n target: [`.${CLASSPREFIX}-legend-columns`],\n behaviours: [BEHAVIOURS.HIGHLIGHT]\n },\n [ACTIONS.CLICK]: {\n target: [`.${CLASSPREFIX}-legend-columns`],\n behaviours: [BEHAVIOURS.SELECT]\n }\n};\n\nexport const propagationBehaviourMap = {\n [BEHAVIOURS.SELECT]: BEHAVIOURS.FILTER,\n [BEHAVIOURS.BRUSH]: BEHAVIOURS.HIGHLIGHT\n};\n","import * as BEHAVIOURS from '../enums/behaviours';\nimport * as sideEffects from '../enums/side-effects';\n\nexport const behaviourEffectMap = {\n [BEHAVIOURS.BRUSH]: [sideEffects.SELECTIONBOX, {\n name: sideEffects.Highlighter,\n options: {\n strategy: 'fade'\n }\n }],\n [BEHAVIOURS.HIGHLIGHT]: [sideEffects.Highlighter],\n select: [{\n name: sideEffects.Highlighter,\n options: {\n strategy: 'fade'\n }\n }]\n};\n\nexport const propagationSideEffects = {\n [BEHAVIOURS.BRUSH]: [{\n name: sideEffects.Highlighter,\n options: {\n strategy: 'fade'\n }\n }],\n [BEHAVIOURS.HIGHLIGHT]: [{\n name: sideEffects.Highlighter,\n options: {\n strategy: 'fade'\n }\n }],\n [BEHAVIOURS.SELECT]: ['filter']\n};\n\n","export const BRUSH = 'brush';\nexport const HIGHLIGHT = 'highlight';\nexport const TOOLTIP = 'tooltip';\nexport const FILTER = 'filter';\nexport const SELECT = 'select';\n\n","export const SELECTIONBOX = 'selectionBox';\nexport const Highlighter = 'highlighter';\n\n","export const CLASSPREFIX = 'muze';\nexport const IDFIELD = '__id__';\nexport const CONFIG = 'config';\nexport const DATAMODEL = 'dataModel';\nexport const AXES = 'axes';\nexport const LAYERDEFS = 'layerDef';\nexport const WIDTH = 'width';\nexport const HEIGHT = 'height';\nexport const MOUNTPOINT = 'mountPoint';\nexport const GRIDLINEPARENTGROUPCLASS = 'grid-lines';\nexport const TRANSFORM = 'transform';\nexport const CONSOLIDATED = 'consolidated';\nexport const FRAGMENTED = 'fragmented';\nexport const DEFAULTCOLOR = '#F44336';\nexport const DEFAULTSIZE = 50;\nexport const DEFAULTSHAPE = 'circle';\nexport const STEP = 'step';\nexport const GRADIENT = 'gradient';\nexport const ORDINAL = 'ordinal';\nexport const SCALE_FUNCTIONS = {\n size: 'getSize',\n shape: 'getShape',\n color: 'getColor'\n};\nexport const TOP = 'top';\nexport const LEFT = 'left';\nexport const RIGHT = 'right';\nexport const BOTTOM = 'bottom';\nexport const HORIZONTAL = 'horizontal';\nexport const VERTICAL = 'vertical';\nexport const CENTER = 'center';\nexport const VALUE = 'value';\nexport const PATH = 'path';\nexport const SHAPE = 'shape';\nexport const ICON = 'icon';\nexport const RECT = 'rect';\nexport const START = 'start';\nexport const UPPER = 'upper';\nexport const LOWER = 'lower';\nexport const END = 'end';\nexport const SIZE = 'size';\nexport const DISCRETE = 'discrete';\nexport const MEASURE = 'measure';\n\n","import { assembleModelFromIdentifiers, getDataModelFromRange } from 'muze-utils';\nimport { propagationBehaviourMap } from './action-behaviour-map';\nimport { propagationSideEffects } from './behaviour-effect-map';\nimport { STEP, GRADIENT, DISCRETE, MEASURE } from '../enums/constants';\n\nexport const propagate = (firebolt, action, selectionSet, config = {}) => {\n let propagationData;\n const type = firebolt.context.constructor.type();\n const payload = config.payload;\n const data = firebolt.context.data();\n const metaData = firebolt.context.metaData();\n const fieldType = metaData.getData().schema[0].type;\n\n const propPayload = {};\n const sourceId = firebolt.context._id;\n propPayload.action = propagationBehaviourMap[action] || action;\n propPayload.sideEffects = propagationSideEffects[action];\n propPayload.sourceCanvas = firebolt.context.canvasAlias();\n const isMutableAction = firebolt._actions.behavioural[propPayload.action].constructor.mutates();\n if (payload.criteria === null) {\n propagationData = null;\n } else {\n const entrySet = selectionSet.mergedEnter;\n let values = data.filter(d => entrySet.uids.indexOf(d.id) !== -1).map(d => d.value);\n if (type === STEP || (type === DISCRETE && fieldType === MEASURE)) {\n const field = Object.keys(payload.criteria || {})[0];\n values = data.filter(d => entrySet.uids.indexOf(d.id) !== -1).map(d => d.range);\n propagationData = values.length ? metaData.select((fields) => {\n let check = false;\n for (let i = 0; i < values.length; i++) {\n check = fields[field].value >= values[i][0] && fields[field].value <= values[i][1];\n if (check === true) {\n break;\n }\n }\n return check;\n }, {\n saveChild: false\n }) : null;\n } else if (type === GRADIENT) {\n propagationData = getDataModelFromRange(metaData, payload.criteria);\n } else if (values.length) {\n propagationData = assembleModelFromIdentifiers(metaData, [payload.criteria[0], ...values.map(d => [d])]);\n } else {\n propPayload.criteria = null;\n propagationData = metaData.select(() => true, {\n saveChild: false\n });\n }\n }\n\n let propagateInterpolatedValues = false;\n\n if (propagationData) {\n const schema = propagationData.getSchema();\n propagateInterpolatedValues = schema.every(d => d.type === fieldType.MEASURE);\n }\n\n const propConfig = {\n sourceId: `legend-${sourceId}`,\n payload: propPayload,\n criteria: propPayload.criteria === null ? null : propagationData,\n isMutableAction,\n propagateInterpolatedValues,\n action: propPayload.action\n };\n\n metaData.propagate(propagationData, propConfig, true);\n};\n","import { Firebolt } from '@chartshq/muze-firebolt';\nimport { propagate } from './helper';\nimport { STEP, GRADIENT } from '../enums/constants';\n\n/**\n * This class manages the interactions of legend.\n * @export\n * @class LegendFireBolt\n * @extends {Firebolt}\n */\nexport class LegendFireBolt extends Firebolt {\n constructor (...params) {\n super(...params);\n this.initializeSideEffects();\n }\n\n getPropagationSelectionSet (selectionSet) {\n return selectionSet[0];\n }\n\n propagate (behaviourName, payload, selectionSet) {\n propagate(this, behaviourName, selectionSet, {\n payload\n });\n }\n\n getAddSetFromCriteria (criteria) {\n let values;\n let uniqueIds;\n const type = this.context.constructor.type();\n\n if (criteria === null) {\n uniqueIds = null;\n } else if (type === STEP) {\n values = Object.values(criteria);\n uniqueIds = this.context.data().filter(d => values.indexOf(d.range) !== -1).map(d => d.id);\n } else if (type === GRADIENT) {\n uniqueIds = [];\n } else {\n values = criteria[1];\n if (values) {\n uniqueIds = this.context.data().filter(d => values.indexOf(d.value) !== -1).map(d => d.id);\n } else {\n values = Object.values(criteria);\n uniqueIds = this.context.data().filter(d => values.indexOf(d.range) !== -1).map(d => d.id);\n }\n }\n return {\n uids: uniqueIds,\n model: null\n };\n }\n\n getFullData () {\n return null;\n }\n}\n","import {\n getEvent,\n getD3Drag\n } from 'muze-utils';\n\n/**\n * Adds dragging action to the target element.\n * @param {firebolt} firebolt firebolt\n * @param {SVGElement} targetEl Element on which brushing action is needed.\n * @param {Array} behaviours Array of behaviours\n */\n/* istanbul ignore next */ const drag = firebolt => (targetEl, behaviours) => {\n let startPos = {};\n let endPos = {};\n let payload;\n const d3Drag = getD3Drag();\n const context = firebolt.context;\n const boundingBox = context.measurement().gradientDimensions;\n const axisType = context.config().align === 'horizontal' ? 'x' : 'y';\n const axisScale = context.axis().source().scale();\n const rangeShifter = axisScale.range()[axisType === 'x' ? 0 : 1];\n\n targetEl.call(d3Drag().on('start', () => {\n const event = getEvent();\n startPos = {\n x: event.x,\n y: event.y\n };\n }).on('drag', () => {\n const event = getEvent();\n\n endPos = {\n x: event.x,\n y: event.y\n };\n endPos.x = Math.max(0, Math.min(endPos.x, boundingBox.width));\n endPos.y = Math.max(0, Math.min(endPos.y, boundingBox.height));\n\n payload = {\n criteria: {\n [context.fieldName()]: [axisScale.invert(startPos[axisType] + rangeShifter * 2),\n axisScale.invert(endPos[axisType] + rangeShifter * 2)].sort((a, b) => a - b)\n }\n };\n behaviours.forEach(behaviour => firebolt.dispatchBehaviour(behaviour, payload));\n }).on('end', () => {\n const event = getEvent();\n\n endPos = {\n x: event.x,\n y: event.y\n };\n endPos.x = Math.max(0, Math.min(endPos.x, boundingBox.width));\n endPos.y = Math.max(0, Math.min(endPos.y, boundingBox.height));\n if (startPos[axisType] === endPos[axisType]) {\n payload = {\n criteria: {}\n };\n } else {\n payload = {\n criteria: {\n [context.fieldName()]: [axisScale.invert(startPos[axisType] + rangeShifter * 2),\n axisScale.invert(endPos[axisType] + rangeShifter * 2)].sort((a, b) => a - b)\n }\n };\n }\n behaviours.forEach(behaviour => firebolt.dispatchBehaviour(behaviour, payload));\n }));\n};\n\nexport default drag;\n","/**\n * Adds mouse interactions to target element.\n * @param {Firebolt} Firebolt instance of firebolt.\n * @param {SVGElement} targetEl Element on which the event listeners will be attached.\n * @param {Array} behaviours Array of behaviours\n */\n/* istanbul ignore next */ const hover = firebolt => (targetEl, behaviours) => {\n const dispatchBehaviour = function (args) {\n const payload = {\n criteria: firebolt.context.getCriteriaFromData(args)\n };\n behaviours.forEach(behaviour => firebolt.dispatchBehaviour(behaviour, payload));\n event.stopPropagation();\n };\n\n targetEl.on('mouseover', dispatchBehaviour)\n .on('mousemove', dispatchBehaviour)\n .on('mouseout', () => {\n behaviours.forEach(behaviour => firebolt.dispatchBehaviour(behaviour, {\n criteria: null\n }));\n event.stopPropagation();\n });\n};\n\nexport default hover;\n","/**\n * Adds mouse interactions to target element.\n * @param {VisualUnit} instance instance of visual unit.\n * @param {SVGElement} targetEl Element on which the event listeners will be attached.\n * @param {Array} behaviours Array of behaviours\n */\nconst click = firebolt => (targetEl, behaviours) => {\n const dispatchBehaviour = function (args) {\n const payload = {\n criteria: firebolt.context.getCriteriaFromData(args)\n };\n behaviours.forEach(behaviour => firebolt.dispatchBehaviour(behaviour, payload));\n };\n\n targetEl.on('click', dispatchBehaviour);\n};\n\nexport default click;\n","import drag from './drag';\nimport hover from './hover';\nimport click from './click';\nimport * as ACTIONNAMES from '../../enums/actions';\n\nexport const physicalActions = {\n [ACTIONNAMES.DRAG]: drag,\n [ACTIONNAMES.HOVER]: hover,\n [ACTIONNAMES.CLICK]: click\n};\n\n","export const DRAG = 'drag';\nexport const HOVER = 'hover';\nexport const SELECTIONDRAG = 'selectiondrag';\nexport const CLICK = 'click';\n","import {\n getMousePos,\n getEvent,\n getD3Drag\n } from 'muze-utils';\nimport { HEIGHT, WIDTH, HORIZONTAL } from '../../enums/constants';\n\nconst getSelectionCriteria = (subject, axis, measures) => {\n let criteria = [];\n const {\n axisScale,\n axisType\n } = axis;\n const {\n startPos,\n endPos,\n selectionBoxMeasure,\n drawingInfMeasure,\n offset\n } = measures;\n const subjectStartPoint = subject[axisType];\n\n if (startPos[axisType] === endPos[axisType]) {\n criteria = [];\n } else if (subjectStartPoint + selectionBoxMeasure >= drawingInfMeasure + offset) {\n criteria = [axisScale.invert(drawingInfMeasure + offset - selectionBoxMeasure),\n axisScale.invert(drawingInfMeasure + offset)];\n } else if (subjectStartPoint - offset < offset) {\n criteria = [axisScale.invert(offset * 2), axisScale.invert(selectionBoxMeasure + offset * 2)];\n } else {\n criteria = [axisScale.invert(subjectStartPoint), axisScale.invert(subjectStartPoint + selectionBoxMeasure)];\n }\n axisType === 'x' ? criteria : criteria.reverse();\n return criteria;\n};\n\nexport const selectionBoxDrag = firebolt => (targetEl, behaviours) => {\n let startPos = {};\n let payload;\n const endPos = {};\n const d3Drag = getD3Drag();\n const context = firebolt.context;\n const axisScale = context.axis().source().scale();\n const axisType = context.config().align === HORIZONTAL ? 'x' : 'y';\n const drawingInfMeasure = context.measurement().gradientDimensions[axisType === 'x' ?\n WIDTH : HEIGHT];\n const offset = axisScale.range()[axisType === 'x' ? 0 : 1];\n const measures = {\n drawingInfMeasure,\n offset\n };\n let subject = {};\n\n targetEl.call(d3Drag().on('start', function () {\n const event = getEvent();\n startPos = getMousePos(this, event.sourceEvent);\n subject = event.subject;\n }).on('drag', () => {\n const event = getEvent();\n const selectionBoxMeasure = subject[axisType === 'x' ? WIDTH : HEIGHT];\n\n subject.x += event.dx;\n subject.y += event.dy;\n\n measures.selectionBoxMeasure = selectionBoxMeasure;\n measures.startPos = startPos;\n measures.endPos = endPos;\n const criteria = getSelectionCriteria(subject, { axisScale, axisType }, measures);\n\n payload = {\n criteria: {\n [context.fieldName()]: criteria\n },\n fadeOut: true\n };\n firebolt.dispatchBehaviour(behaviours[0], payload);\n }).on('end', () => {\n const event = getEvent();\n const selectionBoxMeasure = subject[axisType === 'x' ? WIDTH : HEIGHT];\n measures.selectionBoxMeasure = selectionBoxMeasure;\n measures.startPos = startPos;\n measures.endPos = endPos;\n const criteria = getSelectionCriteria(event, { axisScale, axisType }, measures);\n payload = {\n criteria: {\n [context.fieldName()]: criteria\n },\n fadeOut: true,\n config: {\n transition: {\n duration: 200\n }\n }\n };\n firebolt.dispatchBehaviour(behaviours[0], payload);\n }));\n};\n\n","import { makeElement } from 'muze-utils';\nimport { SpawnableSideEffect } from '@chartshq/muze-firebolt';\nimport { CLASSPREFIX, HEIGHT, WIDTH, HORIZONTAL, RECT } from '../../../enums/constants';\nimport { SELECTIONBOX } from '../../../enums/side-effects';\nimport { selectionBoxDrag } from '../../physical/selection-box-drag';\nimport './styles.scss';\n\n/**\n * This class is used to create a selection box which is used by visual unit for brushing and\n * selection in the canvas.\n * @class SelectionBox\n */\n/* istanbul ignore next */ class SelectionBox extends SpawnableSideEffect {\n static formalName () {\n return SELECTIONBOX;\n }\n\n /**\n * It returns the default configuration needed by selectionbox.\n * @return {Object} Default configuration of the selection box.\n */\n static defaultConfig () {\n return {\n className: 'legend-selection-box',\n classPrefix: CLASSPREFIX\n };\n }\n\n /**\n * Draws the selectionbox with the specified dimensions.\n */\n /* istanbul ignore next */ apply (selectionSet, payload) {\n let x;\n let y;\n let width;\n let height;\n const firebolt = this.firebolt;\n const context = firebolt.context;\n const config = this.config();\n const axis = context.axis().source();\n const className = `${config.classPrefix}-${config.className}`;\n\n const domain = payload.criteria[firebolt.context.fieldName()];\n const axisScale = axis.scale();\n const range = domain ? [axis.getScaleValue(domain[0]), axis.getScaleValue(domain[1])] : [];\n\n const axisType = context.config().align === HORIZONTAL ? 'x' : 'y';\n\n const gradientDimension = firebolt.context.measurement().gradientDimensions[axisType === 'x' ?\n HEIGHT : WIDTH];\n\n const rangeShifter = axisScale.range()[axisType === 'x' ? 0 : 1];\n const legendGradContainer = context.getDrawingContext().svgContainer;\n const legendSelGroup = makeElement(legendGradContainer, 'g', [1], `${config.classPrefix}-selection-box-group`);\n\n if (firebolt.context.config().align === HORIZONTAL) {\n x = range[0] - rangeShifter || 0;\n y = 0;\n width = range[1] - range[0] || 0;\n height = gradientDimension;\n } else {\n x = 0;\n y = range[1] - rangeShifter || 0;\n height = range[0] - range[1] || 0;\n width = gradientDimension;\n }\n const enterFn = function (el) {\n selectionBoxDrag(firebolt)(el, ['brush']);\n };\n const selBox = makeElement(legendSelGroup, RECT, [{ domain, x, y, width, height }], className,\n { enter: enterFn });\n selBox.attr('y', y)\n .attr('x', x)\n .attr(WIDTH, width)\n .attr(HEIGHT, height);\n }\n}\n\nexport default SelectionBox;\n\n","import { selectElement } from 'muze-utils';\n\nexport const strategies = (firebolt) => {\n const context = firebolt.context;\n const classed = (set, className, change) => {\n const classPrefix = context.config().classPrefix;\n selectElement(context.mount())\n .selectAll(`.${classPrefix}-legend-columns`)\n .filter(d => set.uids.indexOf(d.id) !== -1)\n .selectAll('div')\n .classed(className, change);\n };\n\n return {\n fade: (set, config = {}) => {\n const classPrefix = context.config().classPrefix;\n if (!set.mergedEnter.length && !set.mergedExit.length) {\n classed(set.completeSet, config.className || `${classPrefix}-legend-fadeout`, false);\n } else {\n classed(set.mergedExit, config.className || `${classPrefix}-legend-brighten`, false);\n classed(set.mergedExit, config.className || `${classPrefix}-legend-fadeout`, true);\n classed(set.mergedEnter, config.className || `${classPrefix}-legend-fadeout`, false);\n }\n },\n brighten: (set, config = {}) => {\n const classPrefix = context.config().classPrefix;\n if (!set.mergedEnter.length && !set.mergedExit.length) {\n classed(set.completeSet, config.className || `${classPrefix}-legend-brighten`, false);\n } else {\n classed(set.mergedEnter, config.className || `${classPrefix}-legend-brighten`, true);\n classed(set.mergedExit, config.className || `${classPrefix}-legend-brighten`, false);\n }\n }\n };\n};\n","import { GenericSideEffect } from '@chartshq/muze-firebolt';\nimport { strategies } from './strategies';\nimport { Highlighter } from '../../../enums/side-effects';\n\nexport default class LegendHighlighter extends GenericSideEffect {\n constructor (...params) {\n super(...params);\n this._strategies = strategies(this.firebolt);\n this._strategy = 'brighten';\n }\n\n static formalName () {\n return Highlighter;\n }\n\n apply (selectionSet, payload, options = {}) {\n const strategy = this._strategies[options.strategy || this._strategy];\n\n strategy(selectionSet, this);\n }\n}\n","import { mergeRecursive } from 'muze-utils';\n\nexport const PROPS = {\n config: {\n sanitization: (context, value) => mergeRecursive(context._config || {}, value)\n },\n data: {},\n fieldName: {},\n legendContainer: {},\n measurement: {\n sanitization: (context, value) => {\n const measurement = mergeRecursive(context._measurement, value);\n ['padding', 'border', 'margin'].forEach((space) => {\n measurement[space] = Math.min(measurement[space] > 0 ? measurement[space] : 0,\n measurement.maxWidth * 0.1, measurement.maxHeight * 0.1);\n });\n return measurement;\n }\n },\n logicalSpace: {},\n metaData: {},\n range: {\n sanitization: (context, value) => {\n context.scale().range(value);\n context.resetLogicalSpace();\n context.store().commit('range', value);\n return value;\n }\n },\n scale: {},\n smartTicks: {},\n store: {},\n title: {\n sanitization: (context, value) => mergeRecursive(context._title || {}, value)\n }\n};\n","import { getSymbol } from 'muze-utils';\nimport {\n CENTER,\n LEFT,\n RIGHT\n} from '../enums/constants';\n\nexport const ALIGN = {\n HORIZONTAL: 'horizontal',\n VERTICAL: 'vertical'\n};\n\nexport const DEFAULT_MEASUREMENT = {\n height: 30,\n width: 30,\n maxWidth: Infinity,\n maxHeight: Infinity,\n padding: 2,\n margin: 2,\n border: 1\n};\n\nexport const LEGEND_TITLE = {\n text: '',\n orientation: (pos) => {\n if (pos === LEFT || pos === RIGHT) {\n return LEFT;\n } return CENTER;\n }\n};\n\nexport const DEFAULT_CONFIG = {\n classPrefix: 'muze',\n borderStyle: 'solid',\n borderColor: 'rgba(0,0,0,0)',\n formatter: {\n bounds: {\n lower: 'less than',\n upper: 'more than'\n }\n },\n item: {\n text: {\n orientation: 'right',\n width: 10,\n formatter: val => val\n },\n icon: {\n className: 'legend-icon',\n height: 20,\n width: 20,\n color: 'rgba(0,0,0,.5)',\n type: 'square'\n }\n }\n};\n\n/**\n * Creates a map of pre defined icons\n *\n * @param {string} icon Accepts a icon name like 'square', 'cross', 'diamond' etc\n * @return {Object} icon object which can be used to draw the icons\n */\nexport const ICON_MAP = (icon) => {\n if (icon && typeof (icon) === 'string') {\n return getSymbol(icon);\n } return icon;\n};\n","import { makeElement, numberInterpolator } from 'muze-utils';\n\nimport {\n SCALE_FUNCTIONS,\n WIDTH,\n HEIGHT,\n LEFT,\n RIGHT,\n TOP,\n BOTTOM\n} from '../enums/constants';\n\n/**\n *\n *\n * @param {*} scale\n * @returns\n */\nexport const getScaleInfo = (scale) => {\n const scaleType = scale.constructor.type();\n const domain = scale.uniqueValues();\n const steps = scale.config().stops || 1;\n const scaleFn = SCALE_FUNCTIONS[scaleType];\n\n return { scaleType, domain, steps, scaleFn };\n};\n\n/**\n *\n *\n * @param {*} domain\n * @param {*} steps\n * @returns\n */\nexport const getInterpolatedData = (domain, steps) => {\n const domainForLegend = [];\n const interpolatedFn = numberInterpolator()(domain[0], domain[1]);\n\n for (let i = 0; i <= steps; i++) {\n domainForLegend[i] = interpolatedFn(i / steps);\n }\n return domainForLegend;\n};\n\n/**\n *\n *\n * @param {*} container\n * @param {*} text\n * @param {*} measurement\n * @param {*} classPrefix\n */\nexport const titleCreator = (container, title, measurement, config) => {\n const titleContainer = makeElement(container, 'table', [1], `${config.classPrefix}-legend-title`)\n .style(WIDTH, `${measurement.width}px`)\n .style(HEIGHT, `${measurement.height}px`)\n .style('border-bottom', `${measurement.border}px ${config.borderStyle} ${config.borderColor}`)\n .style('text-align', title.orientation instanceof Function ?\n title.orientation(config.position) : title.orientation);\n return makeElement(titleContainer, 'td', [1], `${config.classPrefix}-legend-title-text`)\n .style(WIDTH, `${measurement.width}px`)\n .style(HEIGHT, '100%')\n .style('padding', `${measurement.padding}px`)\n .text(title.text)\n .node();\n};\n\n /**\n *\n *\n * @param {*} data\n * @param {*} prop\n * @param {*} labelManager\n * @return\n */\nexport const getMaxMeasures = (data, prop, labelManager) => {\n let maxHeight = -Infinity;\n let maxWidth = -Infinity;\n\n data.forEach((item) => {\n const value = prop ? item[prop] : item;\n const space = labelManager.getOriSize(value);\n maxHeight = Math.max(space.height + 2, maxHeight);\n maxWidth = Math.max(space.width + 2, maxWidth);\n });\n\n return { height: maxHeight, width: maxWidth };\n};\n\n/**\n *\n *\n * @param {*} data\n * @param {*} prop\n * @param {*} labelManager\n * @return\n */\nexport const getItemMeasures = (data, prop, labelManager, formatter) => {\n const space = [];\n\n data.forEach((item, index) => {\n const value = prop ? item[prop] : item;\n const { height, width } = labelManager.getOriSize(formatter(value));\n space[index] = { height: height + 1, width: width + 1 };\n });\n return space;\n};\n\n/**\n *\n *\n * @param {*} textOrientation\n * @param {*} effPadding\n * @param {*} titleSpace\n * @return\n * @memberof Legend\n */\nexport const computeItemSpaces = (config, measures, data) => {\n let totalHeight = 0;\n let totalWidth = 0;\n let maxItemSpaces = {\n width: 0, height: 0\n };\n const {\n effPadding,\n titleWidth,\n labelSpaces,\n titleHeight,\n maxWidth\n } = measures;\n const {\n item,\n align\n } = config;\n const {\n icon,\n text\n } = item;\n const textOrientation = text.orientation;\n const itemSpaces = [];\n const iconSpaces = [];\n let maxIconWidth = 0;\n labelSpaces.forEach((labelSpace, i) => {\n const itemSpace = { width: 0, height: 0 };\n const iconSpace = { width: 0, height: 0 };\n const datum = data[i] || {};\n // Compute each legend item height/width\n if (textOrientation === LEFT || textOrientation === RIGHT) {\n // Get label, icon and item widths\n labelSpace.width += effPadding;\n iconSpace.width = (datum.size ? 2 * Math.sqrt(datum.size / Math.PI) : icon.width) + effPadding;\n maxIconWidth = Math.max(iconSpace.width, maxIconWidth);\n itemSpace.width = labelSpace.width + maxIconWidth;\n\n // Get label, icon and item heights\n labelSpace.height = Math.max(labelSpace.height, icon.height) + effPadding;\n iconSpace.height = labelSpace.height;\n itemSpace.height = labelSpace.height;\n } else {\n // Get label, icon and item widths\n labelSpace.width = Math.max(labelSpace.width, datum.size ? 2 * Math.sqrt(datum.size / Math.PI)\n : icon.width) + effPadding;\n iconSpace.width = labelSpace.width;\n itemSpace.width = labelSpace.width;\n maxIconWidth = Math.max(iconSpace.width, maxIconWidth);\n\n // Get label, icon and item heights\n labelSpace.height += effPadding;\n iconSpace.height = icon.height + effPadding;\n itemSpace.height = labelSpace.height + iconSpace.height;\n }\n // Compute height and width of legend for each alignment\n if (align === 'horizontal') {\n totalHeight = Math.max(totalHeight, itemSpace.height);\n } else {\n totalHeight += itemSpace.height;\n totalWidth = Math.max(totalWidth, itemSpace.width, titleWidth) + effPadding;\n }\n maxItemSpaces = {\n width: Math.max(itemSpace.width, maxItemSpaces.width),\n height: Math.max(itemSpace.height, maxItemSpaces.height)\n };\n itemSpaces.push(itemSpace);\n iconSpaces.push(iconSpace);\n });\n itemSpaces.forEach((itemSpace, i) => {\n if (align === 'horizontal') {\n itemSpace.height = totalHeight;\n iconSpaces[i].width = maxIconWidth;\n if (textOrientation === LEFT || textOrientation === RIGHT) {\n labelSpaces[i].height = totalHeight;\n iconSpaces[i].height = totalHeight;\n itemSpaces[i].width = labelSpaces[i].width + maxIconWidth;\n } else {\n labelSpaces[i].width = maxIconWidth;\n itemSpaces[i].width = maxIconWidth;\n labelSpaces[i].width = maxIconWidth;\n }\n totalWidth = Math.max(totalWidth + itemSpaces[i].width);\n } else {\n itemSpace.width = Math.max(totalWidth, maxWidth);\n if (textOrientation === TOP || textOrientation === BOTTOM) {\n labelSpaces[i].width = totalWidth;\n iconSpaces[i].width = totalWidth;\n maxIconWidth = totalWidth;\n } else {\n iconSpaces[i].width = maxIconWidth;\n itemSpaces[i].width = labelSpaces[i].width + maxIconWidth;\n labelSpaces[i].width = maxItemSpaces.width - maxIconWidth;\n totalWidth = Math.max(totalWidth, itemSpace.width) + effPadding;\n }\n }\n });\n totalWidth = Math.max(totalWidth, titleWidth);\n totalHeight += titleHeight + effPadding;\n\n return { totalHeight, totalWidth, itemSpaces, iconSpaces, maxItemSpaces, maxIconWidth };\n};\n\n/**\n *\n *\n * @param {*} type\n * @param {*} scaleInfo\n * @param {*} domainInfo\n * @returns\n */\nexport const getDomainBounds = (type, scaleInfo, domainInfo) => {\n const {\n scaleFn,\n scaleType,\n scale\n } = scaleInfo;\n const {\n domain,\n domainBounds,\n domainLeg,\n steps\n } = domainInfo;\n const ele = domain[type === 'lower' ? 0 : domain.length - 1];\n const step = steps[type === 'lower' ? 0 : steps.length - 1];\n\n return {\n [scaleType]: scaleType === 'size' ? scale[scaleFn](ele) * scale.getScaleFactor() : scale[scaleFn](ele),\n value: domainBounds[type],\n id: type === 'lower' ? 0 : domainLeg.length + 2,\n range: [ele, step]\n };\n};\n","import {\n makeElement,\n selectElement,\n getUniqueId,\n getSmartComputedStyle,\n generateGetterSetters,\n mergeRecursive\n} from 'muze-utils';\nimport { behaviouralActions } from '@chartshq/muze-firebolt';\nimport * as legendBehaviours from '../firebolt/behavioural';\n\nimport { LegendFireBolt } from '../firebolt/legend-firebolt';\nimport { actionBehaviourMap } from '../firebolt/action-behaviour-map';\nimport { physicalActions } from '../firebolt/physical';\nimport * as sideEffects from '../firebolt/side-effects';\nimport { behaviourEffectMap } from '../firebolt/behaviour-effect-map';\nimport { VALUE, PATH } from '../enums/constants';\nimport { PROPS } from './props';\nimport { DEFAULT_MEASUREMENT, DEFAULT_CONFIG, LEGEND_TITLE } from './defaults';\nimport { getItemMeasures, titleCreator, computeItemSpaces } from './legend-helper';\n\n/**\n * Creates a Legend from the axes of a canvas\n *\n * @param {Object} dependencies : legend data\n * @class SimpleLegend\n */\nexport default class SimpleLegend {\n\n /**\n * Creates an instance of Legend.\n * @param {Object} dependencies Set of dependencies required by the legend\n * @memberof Legend\n */\n constructor (dependencies) {\n this._data = [];\n this._metaData = [];\n this._mount = null;\n this._fieldName = null;\n this._title = Object.assign({}, LEGEND_TITLE);\n this._metaData = null;\n this._labelManager = dependencies.labelManager;\n this._cells = dependencies.cells;\n this._id = getUniqueId();\n this._measurement = Object.assign({}, this.constructor.defaultMeasurement());\n this._config = mergeRecursive({}, this.constructor.defaultConfig());\n\n generateGetterSetters(this, PROPS);\n this._computedStyle = getSmartComputedStyle(selectElement('body'),\n `${this.config().classPrefix}-legend-item-info`);\n\n this._firebolt = new LegendFireBolt(this, {\n behavioural: Object.assign({}, behaviouralActions, legendBehaviours),\n physical: physicalActions,\n physicalBehaviouralMap: actionBehaviourMap\n }, sideEffects, behaviourEffectMap);\n }\n\n id () {\n return this._id;\n }\n /**\n * Initializes an instance of the class\n *\n * @static\n * @param {Object} dependencies Set of dependencies required by the legend\n * @return {Instance} returns a new instance of Legend\n * @memberof Legend\n */\n static create (dependencies) {\n return new SimpleLegend(dependencies);\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof SimpleLegend\n */\n static defaultConfig () {\n return DEFAULT_CONFIG;\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof SimpleLegend\n */\n static defaultMeasurement () {\n return DEFAULT_MEASUREMENT;\n }\n\n /**\n *\n *\n * @readonly\n * @memberof SimpleLegend\n */\n firebolt (...params) {\n if (params.length) {\n return this;\n }\n return this._firebolt;\n }\n\n /**\n *\n *\n * @return\n * @memberof Legend\n */\n elemType () {\n return PATH;\n }\n\n canvasAlias (...alias) {\n if (alias.length) {\n this._canvasAlias = alias[0];\n return this;\n }\n return this._canvasAlias;\n }\n\n /**\n *\n *\n * @return\n * @memberof Legend\n */\n mount (...params) {\n if (params.length) {\n this._mount = params[0];\n this.render();\n return this;\n }\n return this._mount;\n }\n\n /**\n *\n *\n * @param {*} effPadding\n * @param {*} align\n * @return\n * @memberof Legend\n */\n getLabelSpaces () {\n const {\n item,\n classPrefix\n } = this.config();\n this._labelManager.setStyle(getSmartComputedStyle(selectElement('body'),\n `${classPrefix}-legend-item-info`));\n return getItemMeasures(this.data(), VALUE, this._labelManager, item.text.formatter);\n }\n\n /**\n * Sets the height and width of a legend based on provided max\n * height and width and based on its contents\n *\n * @return {Instance} Current instance\n * @memberof Legend\n */\n setLegendMeasures () {\n const {\n width,\n height,\n maxWidth,\n maxHeight,\n padding,\n margin,\n border\n } = this.measurement();\n const {\n align\n } = this.config();\n\n // Effective padding, margin and padding\n const effPadding = padding * 2;\n const effBorder = border * 2;\n const effMargin = margin * 2;\n\n this.data(this.dataFromScale(this.scale()));\n // Get space occupied by title\n const titleSpace = this.getTitleSpace();\n const titleHeight = titleSpace.height > 0 ? titleSpace.height + effPadding : 0;\n const titleWidth = titleSpace.width + effPadding;\n\n // Get space occupied by labels\n const labelSpaces = this.getLabelSpaces(effPadding, align);\n\n const {\n totalHeight, totalWidth, itemSpaces, iconSpaces, maxItemSpaces, maxIconWidth\n } = computeItemSpaces(this.config(),\n { effPadding, titleWidth, labelSpaces, titleHeight, maxWidth, maxHeight }, this.data());\n\n this.measurement({\n width: Math.max(totalWidth, width) + effMargin + effBorder,\n height: Math.max(totalHeight, height) + effMargin + effBorder,\n labelSpaces,\n iconSpaces,\n itemSpaces,\n maxItemSpaces,\n maxIconWidth,\n titleSpaces: {\n width: Math.min(maxWidth, this.measurement().width) - effMargin - effBorder,\n height: titleHeight\n }\n });\n return this;\n }\n\n /**\n * Returns the space occupied by the legend title\n *\n * @return {Object} Space occupied by title\n * @memberof Legend\n */\n getTitleSpace () {\n this._labelManager.setStyle(getSmartComputedStyle(selectElement('body'),\n `${this.config().classPrefix}-legend-title`));\n return this._labelManager.getOriSize(this.title().text ? this.title().text : '');\n }\n\n /**\n * Creates the title for the legend\n *\n * @param {DOM} container Container made for the title\n * @return {Selection} Title and it's node\n * @memberof Legend\n */\n renderTitle (container) {\n const { titleSpaces, border, padding, width } = this.measurement();\n const { borderStyle, borderColor } = this.config();\n return titleCreator(container, this.title(), {\n height: titleSpaces.height,\n width,\n border,\n padding,\n borderStyle,\n borderColor\n }, this.config());\n }\n\n /**\n * Render the legend with its title\n *\n * @param {DOM} mountPoint Point where the legend and title are to be appended\n * @return {Instance} Current instance of legend\n * @memberof Legend\n */\n render () {\n const firebolt = this.firebolt();\n const {\n classPrefix,\n borderStyle,\n borderColor\n } = this.config();\n const {\n maxWidth,\n maxHeight,\n width,\n height,\n margin,\n border\n } = this.measurement();\n const legendContainer = makeElement(selectElement(this.mount()), 'div', [1], `${classPrefix}-legend-box`);\n\n legendContainer.classed(`${classPrefix}-legend-box-${this._id}`, true);\n legendContainer.style('float', 'left');\n // set height and width\n legendContainer.style('width', `${Math.min(maxWidth, width) - margin * 2}px`)\n .style('height', `${Math.min(maxHeight, height) - margin * 2}px`)\n .style('margin', `${margin}px`)\n .style('border', `${border}px ${borderStyle} ${borderColor}`);\n this.legendContainer(legendContainer.node());\n\n // create title\n this.renderTitle(legendContainer);\n firebolt.createSelectionSet(this.data().map(d => d.id));\n return legendContainer;\n }\n /**\n *\n *\n * @param {*} data\n * @returns\n * @memberof StepLegend\n */\n getCriteriaFromData (data) {\n const fieldName = this.fieldName();\n const type = this.metaData().getData().schema[0].type;\n if (type === 'measure') {\n return {\n [fieldName]: data.range\n };\n }\n return [[fieldName], [data.value]];\n }\n}\n","import {\n LEFT,\n RIGHT,\n START,\n END,\n TOP,\n BOTTOM,\n HORIZONTAL,\n VERTICAL,\n CENTER,\n SHAPE,\n VALUE\n} from '../enums/constants';\n\nconst legendOrientation = {\n [HORIZONTAL]: {\n datasets: data => ({\n row: [1],\n column: data\n }),\n itemContainerMeasures: (measurement) => {\n const {\n itemSpaces,\n width\n } = measurement;\n return {\n row: {\n width: `${width}px`,\n padding: `${0}px`\n },\n column: {\n width: (d, i) => `${itemSpaces[i].width}px`,\n padding: `${0}px`\n }\n };\n },\n getStepSpacesInfo: (measurement) => {\n const { maxItemSpaces, height } = measurement;\n return {\n iconHeight: height,\n iconWidth: maxItemSpaces.width,\n stepPadding: {\n horizontal: true,\n vertical: false\n }\n };\n }\n },\n [VERTICAL]: {\n datasets: data => ({\n row: data,\n column: d => [d]\n }),\n itemContainerMeasures: (measurement, config) => {\n const {\n width\n } = measurement;\n const { padding } = config;\n return {\n row: {\n width: `${width}px`,\n padding: `${padding}px`\n },\n column: {\n width: `${width}px`,\n padding: `${0}px`\n }\n };\n },\n getStepSpacesInfo: (measurement) => {\n const { maxItemSpaces, width } = measurement;\n return {\n iconHeight: maxItemSpaces.height,\n iconWidth: width,\n stepPadding: {\n horizontal: false,\n vertical: true\n }\n };\n }\n }\n};\n\nexport const positionConfig = {\n [LEFT]: legendOrientation[VERTICAL],\n [RIGHT]: legendOrientation[VERTICAL],\n [TOP]: legendOrientation[HORIZONTAL],\n [BOTTOM]: legendOrientation[HORIZONTAL]\n};\n\nexport const alignmentMap = {\n [LEFT]: END,\n [RIGHT]: START,\n [TOP]: CENTER,\n [BOTTOM]: CENTER\n};\n\n// Reverses data for step legend\nexport const stepData = data => ({\n [LEFT]: data.reverse(),\n [RIGHT]: data.reverse(),\n [TOP]: data,\n [BOTTOM]: data\n});\n\n// Changes the item layout based on the position of the text\nexport const itemStack = {\n [LEFT]: [VALUE, SHAPE],\n [RIGHT]: [SHAPE, VALUE],\n [TOP]: [VALUE, SHAPE],\n [BOTTOM]: [SHAPE, VALUE]\n};\n","import { makeElement, selectElement, applyStyle } from 'muze-utils';\nimport { ICON_MAP } from './defaults';\nimport { positionConfig, alignmentMap, itemStack } from './position-config';\nimport {\n WIDTH,\n HEIGHT,\n CENTER,\n VALUE,\n RECT,\n LEFT,\n RIGHT\n} from '../enums/constants';\n\n/**\n *\n *\n * @param {*} container\n * @param {*} data\n * @param {*} legendInstance\n * @param {*} align\n * @return\n */\nexport const getItemContainers = (container, data, legendInstance) => {\n const measurement = legendInstance.measurement();\n const config = legendInstance.config();\n const {\n itemSpaces\n } = measurement;\n const {\n classPrefix,\n position\n } = config;\n const positionObj = positionConfig[position];\n const datasets = positionObj.datasets(data);\n const measures = positionObj.itemContainerMeasures(measurement, config);\n\n const rows = makeElement(container, 'div', datasets.row, `${classPrefix}-legend-row`);\n rows.style(HEIGHT, (d, i) => `${itemSpaces[i].height}px`);\n rows.style(WIDTH, measures.row.width);\n rows.style('padding', measures.row.padding);\n\n const columns = makeElement(rows, 'div', datasets.column, `${classPrefix}-legend-columns`);\n columns.style(WIDTH, measures.column.width);\n columns.style('padding', measures.column.padding);\n\n return columns;\n};\n\n/**\n *\n *\n * @param {*} container\n * @param {*} classPrefix\n * @param {*} data\n * @returns\n * @memberof DiscreteLegend\n */\nexport const createLegendSkeleton = (context, container, classPrefix, data) => {\n let gradWidth = 0;\n let gradHeight = 0;\n let maxGradHeight = 0;\n let maxGradWidth = 0;\n const measurement = context.measurement();\n const {\n margin,\n border,\n titleSpaces,\n width,\n height,\n maxWidth,\n maxHeight\n } = measurement;\n\n gradHeight = height - (titleSpaces.height + 2 * margin + 2 * border);\n gradWidth = width - (margin * 2 + border * 2);\n\n maxGradHeight = maxHeight - (titleSpaces.height + margin * 2 + border * 2);\n maxGradWidth = maxWidth - (margin * 2 + border * 2);\n\n let legendBody = makeElement(container, 'div', [1], `${classPrefix}-legend-body`);\n legendBody.select(`.${classPrefix}-legend-overflow`).remove();\n // Create a div with scroll when overflow\n if (maxGradWidth && maxGradWidth < gradWidth) {\n legendBody = legendBody.style(WIDTH, `${maxGradWidth}px`).style('overflow-x', 'scroll');\n }\n // Create a div with scroll when overflow\n if (maxGradHeight && maxGradHeight < gradHeight) {\n legendBody.style(HEIGHT, `${maxGradHeight}px`).style('overflow-y', 'scroll');\n }\n\n legendBody = makeElement(legendBody, 'div', [1], `${classPrefix}-legend-overflow`);\n\n legendBody.style(WIDTH, `${gradWidth}px`);\n legendBody.style(HEIGHT, `${gradHeight}px`);\n\n const legendItem = getItemContainers(legendBody, data, context);\n return { legendItem };\n};\n\n/**\n * Creates legend item based on alignment and text orientation\n *\n * @param {Selection} container Point where items are to be mounted\n * @return {Instance} Current instance\n * @memberof Legend\n */\nexport const createItemSkeleton = (context, container) => {\n const {\n classPrefix,\n item\n } = context.config();\n const textOrientation = item.text.orientation;\n\n const stack = itemStack[textOrientation];\n const itemSkeleton = makeElement(container, 'div', (d, i) => stack.map(e => [e, d[e], d.color, d.size,\n d.value, context.fieldName(), i]), `${classPrefix}-legend-item-info`);\n\n const alignClass = alignmentMap[textOrientation];\n\n itemSkeleton.classed(alignClass, true);\n return { itemSkeleton };\n};\n\n/**\n *\n *\n * @param {*} measureType\n * @param {*} stepColorCheck\n */\nexport const applyItemStyle = (item, measureType, stepColorCheck, context) => {\n const {\n padding,\n labelSpaces,\n iconSpaces,\n maxIconWidth\n } = context.measurement();\n const diff = stepColorCheck ? -padding * 2 : 0;\n\n if (item[0] === VALUE) {\n return `${labelSpaces[item[6]][measureType]}px`;\n }\n return `${measureType === 'width' && !stepColorCheck ? maxIconWidth : iconSpaces[item[6]][measureType] - diff}px`;\n};\n\n/**\n *\n *\n * @param {*} str\n * @returns\n */\nconst checkPath = (str) => {\n if (/^[mzlhvcsqta]\\s*[-+.0-9][^mlhvzcsqta]+/i.test(str) && /[\\dz]$/i.test(str) && str.length > 4) {\n return true;\n }\n return false;\n};\n\n/**\n *\n *\n * @param {*} d\n * @param {*} elem\n */\nconst createShape = function (d, elem, defaultIcon, width, height) {\n const groupElement = elem;\n // const { shape, size, update } = d;\n const size = d[3] || Math.min(width, height) * Math.PI;\n const shape = d[1] || defaultIcon;\n\n if (shape instanceof Promise) {\n shape.then((res) => {\n d.shape = res;\n return createShape(d, elem);\n });\n } else if (shape instanceof Element) {\n let newShape = shape.cloneNode(true);\n\n if (newShape.nodeName.toLowerCase() === 'img') {\n const src = newShape.src || newShape.href;\n newShape = document.createElementNS('http://www.w3.org/2000/svg', 'image');\n newShape.setAttribute('href', src);\n }\n const shapeElement = selectElement(newShape);\n shapeElement.attr('transform', `scale(${size / 100})`);\n return selectElement(groupElement.node().appendChild(newShape));\n } else if (typeof shape === 'string') {\n let pathStr;\n if (checkPath(shape)) {\n pathStr = shape;\n } else {\n pathStr = ICON_MAP(shape).size(size)();\n }\n return makeElement(groupElement, 'path', data => [data]).attr('d', pathStr);\n }\n d[1] = 'circle';\n return createShape(d, elem, 'circle');\n};\n\n/**\n * Returns the icon of the legend item\n *\n * @param {Object} datum Data property attached to the item\n * @param {number} width width of the item\n * @param {number} height height of the item\n * @return {Object|string} returns the path string or the string name of the icon\n * @memberof Legend\n */\nexport const getLegendIcon = (datum, width, height, defaultIcon) => {\n const icon = ICON_MAP(datum[1]);\n\n if (icon) {\n return icon.size(datum[3] || Math.min(width, height) * Math.PI);\n }\n return ICON_MAP(datum[3] ? 'circle' : defaultIcon).size(datum[3] || Math.min(width, height) * Math.PI);\n};\n\n/**\n *\n *\n */\nexport const renderIcon = (icon, container, datum, context) => {\n const {\n classPrefix,\n iconHeight,\n iconWidth,\n maxIconWidth,\n padding,\n color\n } = context;\n const svg = makeElement(container, 'svg', f => [f], `${classPrefix}-legend-icon-svg`)\n .attr(WIDTH, maxIconWidth)\n .attr(HEIGHT, iconHeight)\n .style(WIDTH, `${maxIconWidth}px`)\n .style(HEIGHT, `${iconHeight}px`);\n\n if (icon !== RECT) {\n const group = makeElement(svg, 'g', [datum[1]], `${classPrefix}-legend-icon`);\n createShape(datum, group, datum[3] ? 'circle' : 'square', iconWidth, iconHeight)\n .attr('transform', `translate(${maxIconWidth / 2 - padding} ${iconHeight / 2})`)\n .attr('fill', datum[2] || color);\n } else {\n makeElement(svg, RECT, [datum[1]], `${classPrefix}-legend-icon`)\n .attr('x', 0)\n .attr('y', 0)\n .attr(WIDTH, maxIconWidth)\n .attr(HEIGHT, iconHeight)\n .attr('fill', datum[2] || color);\n }\n};\n\n/**\n * Renders the items in the legend i.e, icon and text\n *\n * @param {DOM} container Point where item is to be mounted\n * @memberof Legend\n */\nexport const renderDiscreteItem = (context, container) => {\n const labelManager = context._labelManager;\n const {\n item,\n classPrefix\n } = context.config();\n const {\n maxIconWidth,\n padding\n } = context.measurement();\n const {\n width: iconWidth,\n height: iconHeight,\n color,\n className\n } = item.icon;\n\n const textOrientation = item.text.orientation;\n const formatter = item.text.formatter;\n\n labelManager.useEllipsesOnOverflow(true);\n applyStyle(container, {\n width: d => applyItemStyle(d, WIDTH, false, context),\n height: d => applyItemStyle(d, HEIGHT, false, context),\n 'text-align': CENTER,\n padding: `${padding}px`\n });\n\n labelManager.setStyle(context._computedStyle);\n container.each(function (d, i) {\n if (d[0] === VALUE) {\n selectElement(this).text(formatter(d[1]))\n .style(`padding-${textOrientation === RIGHT ? LEFT : RIGHT}`, '0px');\n } else {\n // const icon = getLegendIcon(d, iconWidth, iconHeight, type);\n selectElement(this).classed(`${classPrefix}-${className}`, true);\n selectElement(this).classed(`${classPrefix}-${className}-${i}`, true);\n renderIcon('circle', selectElement(this), d, {\n classPrefix,\n iconWidth,\n // iconWidth: 2 * Math.sqrt(d[3] / Math.PI) || iconWidth,\n iconHeight,\n maxIconWidth,\n padding,\n color\n });\n }\n });\n};\n\n/**\n* Renders the items in the legend i.e, icon and text\n*\n* @param {DOM} container Point where item is to be mounted\n* @memberof Legend\n*/\nexport const renderStepItem = (context, container) => {\n const labelManager = context._labelManager;\n const {\n item,\n position,\n classPrefix\n } = context.config();\n const {\n maxItemSpaces,\n maxIconWidth,\n padding\n } = context.measurement();\n const {\n width,\n height,\n color\n } = item.icon;\n const {\n formatter\n } = item.text;\n\n labelManager.useEllipsesOnOverflow(true);\n const { iconHeight, iconWidth, stepPadding } = positionConfig[position].getStepSpacesInfo({\n maxItemSpaces, height, width\n });\n\n applyStyle(container, {\n width: d => applyItemStyle(d, WIDTH, stepPadding.horizontal, context),\n height: d => applyItemStyle(d, HEIGHT, stepPadding.vertical, context),\n 'text-align': 'center',\n padding: `${padding}px`\n });\n\n labelManager.setStyle(context._computedStyle);\n container.each(function (d) {\n if (d[0] === VALUE) {\n selectElement(this).text(formatter(d[1]));\n } else {\n renderIcon(RECT, selectElement(this), d, {\n classPrefix,\n iconWidth,\n iconHeight,\n maxIconWidth,\n color\n });\n }\n });\n};\n","import SimpleLegend from './simple-legend';\nimport { DISCRETE, LEFT, SIZE } from '../enums/constants';\nimport { getScaleInfo } from './legend-helper';\nimport { createLegendSkeleton, createItemSkeleton, renderDiscreteItem } from './renderer';\nimport '../styles.scss';\n\n/**\n * Creates a Legend from the axes of a canvas\n *\n * @param {Object} dependencies : legend data\n * @class Legend\n */\nexport default class DiscreteLegend extends SimpleLegend {\n\n /**\n * Initializes an instance of the class\n *\n * @static\n * @param {Object} dependencies Set of dependencies required by the legend\n * @return {Instance} returns a new instance of Legend\n * @memberof Legend\n */\n static create (dependencies) {\n return new DiscreteLegend(dependencies);\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof DiscreteLegend\n */\n static type () {\n return DISCRETE;\n }\n\n /**\n *\n *\n * @param {*} scale\n * @returns\n * @memberof DiscreteLegend\n */\n dataFromScale (scale) {\n const { scaleType, domain, scaleFn } = getScaleInfo(scale);\n let domainForLegend = [...new Set(domain)];\n const type = this.metaData().getData().schema[0].type;\n\n domainForLegend = domainForLegend.map((ele, i) => {\n let value = 0;\n let range = 0;\n if (type === 'measure') {\n value = (+domainForLegend[i]).toFixed(0);\n const nextVal = domainForLegend[i + 1] ? +domainForLegend[i + 1] : +value;\n range = [value, nextVal.toFixed(0)];\n } else {\n value = domainForLegend[i];\n range = [domainForLegend[i]];\n }\n return {\n [scaleType]: scale[scaleFn](ele),\n value,\n id: i,\n range\n };\n }).filter(d => d.value !== null);\n\n domainForLegend = scaleType === SIZE ? domainForLegend.sort((a, b) => a[scaleType] - b[scaleType])\n : domainForLegend;\n return domainForLegend;\n }\n\n /**\n * Render the legend with its title\n *\n * @param {DOM} mountPoint Point where the legend and title are to be appended\n * @return {Instance} Current instance of legend\n * @memberof Legend\n */\n render () {\n const firebolt = this.firebolt();\n const data = this.data();\n const { classPrefix } = this.config();\n const legendContainer = super.render(this.mount());\n // create Legend\n const { legendItem } = createLegendSkeleton(this, legendContainer, classPrefix, data);\n const { itemSkeleton } = createItemSkeleton(this, legendItem);\n renderDiscreteItem(this, itemSkeleton);\n legendContainer.selectAll('div').style('float', LEFT);\n firebolt.mapActionsAndBehaviour();\n firebolt.createSelectionSet(this.data().map(d => d.id));\n return legendContainer;\n }\n}\n","import { makeElement, applyStyle } from 'muze-utils';\nimport { ContinousAxis } from '@chartshq/muze-axis';\nimport { BOTTOM, RIGHT } from '../enums/constants';\nimport { ALIGN } from './defaults';\nimport '../styles.scss';\n\n/**\n *\n *\n * @param {*} data\n * @returns\n */\nexport const getGradientDomain = (data) => {\n if (typeof data[0].value === 'number') {\n return data.reduce((accumulator, currentValue) =>\n [Math.min(currentValue.value, accumulator[0]), Math.max(currentValue.value, accumulator[1])],\n [Number.MAX_VALUE, Number.MIN_VALUE]);\n }\n return data.map(e => e.value);\n};\n\n/**\n *\n *\n * @param {*} container\n * @param {*} data\n * @param {*} domain\n * @returns\n */\nexport const makeLinearGradient = (container, data, domain) => {\n const defs = makeElement(container, 'defs', [1]);\n const linearGradient = makeElement(defs, 'linearGradient', [1])\n .attr('id', 'linear-gradient')\n .attr('x1', '0%')\n .attr('y2', '0%');\n makeElement(linearGradient, 'stop', data, 'stop-gradient')\n .attr('offset', d => `${(d.value - domain[0]) * 100 / (domain[1] - domain[0])}%`)\n .attr('stop-color', d => d.color);\n return linearGradient;\n};\n\n/**\n * Creates an axis cell with a linear axis for computing space and\n * creating gradient legend\n *\n * @return {AxisCell} Instance of Axis Cell for the gradient axis\n * @memberof Legend\n */\nexport const createAxis = (context) => {\n const data = context.data();\n const { align } = context.config();\n const AxisCell = context._cells.AxisCell;\n const newAxis = new ContinousAxis({\n id: `legend-${context._id}`,\n orientation: align === ALIGN.VERTICAL ? RIGHT : BOTTOM,\n style: context._computedStyle,\n nice: false,\n showAxisName: false,\n tickValues: data.map(d => d.value),\n fixedBaseline: false\n }, { labelManager: context._labelManager });\n\n newAxis.domain(getGradientDomain(data));\n newAxis.range([1, 1]);\n return new AxisCell().source(newAxis).config({\n margin: { left: 0, bottom: 0, top: 0, right: 0 }\n });\n};\n\n/**\n *\n *\n * @param {*} container\n * @param {*} data\n * @param {*} classPrefix\n * @returns\n * @memberof GradientLegend\n */\nconst createLegendSkeleton = (container, classPrefix, data) => {\n const domain = getGradientDomain(data);\n const legendContainer = makeElement(container, 'div', [1], `${classPrefix}-legend-body`);\n const legendGradSvg = makeElement(legendContainer, 'svg', [1], `${classPrefix}-gradient`);\n const legendGradCont = makeElement(legendGradSvg, 'g', [1], `${classPrefix}-gradient-group`);\n const linearGradient = makeLinearGradient(legendGradSvg, data, domain);\n const legendRect = makeElement(legendGradCont, 'rect', [1], `${classPrefix}-gradient-rect`);\n\n return {\n legendContainer,\n legendGradCont,\n legendGradSvg,\n linearGradient,\n legendRect\n };\n};\n\n/**\n * Renders the axis for the gradient\n *\n * @param {Selection} container Point where axis is to be mounted\n * @param {number} height Height for axis\n * @param {number} width Width for axis\n * @memberof Legend\n */\nexport const renderAxis = (context, container, height, width) => {\n const axis = context.axis();\n\n axis.setAvailableSpace(width, height);\n axis.render(container.node());\n};\n\n/**\n * Renders gradient legends\n *\n * @param {Selection} container Point where the legend is to be appended\n * @memberof GradientLegend\n */\nexport const renderGradient = (context, container) => {\n let gradHeight = 0;\n let gradWidth = 0;\n const {\n align,\n classPrefix,\n item\n } = context.config();\n const data = context.data();\n // Create the skeleton for the legend\n const {\n legendContainer,\n legendGradSvg,\n legendGradCont,\n linearGradient,\n legendRect\n } = createLegendSkeleton(container, classPrefix, data);\n const labelDim = context.axis().source().getAxisDimensions().tickLabelDim;\n const {\n padding,\n margin,\n border,\n titleSpaces,\n maxHeight,\n maxWidth,\n height,\n width\n } = context.measurement();\n const gradientDimensions = {};\n\n gradHeight = Math.floor(height - (titleSpaces.height + 2 * margin + 2 * border));\n gradWidth = Math.floor(width - (margin * 2 + border * 2));\n\n if (align === ALIGN.HORIZONTAL) {\n gradientDimensions.height = item.icon.height;\n gradientDimensions.width = gradWidth - 2 * padding - labelDim.width / 2;\n linearGradient.attr('x2', '100%').attr('y1', '0%');\n legendGradCont.attr('transform', `translate( ${labelDim.width / 2} 0)`);\n renderAxis(context, legendContainer, gradHeight - item.icon.height - padding, gradWidth - 2 * padding - 1);\n legendContainer.classed(`${classPrefix}-overflow-x`, width > maxWidth);\n\n applyStyle(legendContainer, {\n height: `${height}px`,\n width: `${Math.min(width, maxWidth)}px`,\n padding: `${padding}px`\n });\n\n legendRect.attr('height', gradientDimensions.height);\n legendRect.attr('width', gradientDimensions.width - labelDim.width / 2);\n } else {\n gradientDimensions.height = gradHeight - 2 * padding - labelDim.height / 2;\n gradientDimensions.width = item.icon.width;\n linearGradient.attr('x2', '0%').attr('y1', '100%');\n legendGradCont.attr('transform', `translate(0 ${labelDim.height / 2})`);\n renderAxis(context, legendContainer, gradHeight - 2 * padding - 1, gradWidth - item.icon.width - padding * 2);\n legendContainer.classed(`${classPrefix}-overflow-y`, height > maxHeight);\n applyStyle(legendContainer, {\n height: `${Math.min(height, maxHeight)}px`,\n width: `${width}px`,\n padding: `${padding}px`\n });\n legendRect.attr('height', gradientDimensions.height - labelDim.height / 2);\n legendRect.attr('width', gradientDimensions.width);\n }\n\n // Apply Styles to the legend plot area\n applyStyle(legendGradSvg, {\n height: `${gradientDimensions.height}px`,\n width: `${gradientDimensions.width}px`\n });\n\n // Apply styles to the legend rect\n applyStyle(legendRect, {\n fill: 'url(#linear-gradient)'\n });\n legendGradSvg.attr('height', gradientDimensions.height);\n legendGradSvg.attr('width', gradientDimensions.width);\n\n context.measurement({\n gradientDimensions\n });\n context._legendGradientSvg = legendGradSvg;\n return context;\n};\n","import SimpleLegend from './simple-legend';\nimport { getScaleInfo, getInterpolatedData } from './legend-helper';\nimport { GRADIENT, LEFT, SIZE } from '../enums/constants';\nimport { renderGradient, createAxis } from './gradient-helper';\nimport '../styles.scss';\n\n/**\n * Creates a Legend from the axes of a canvas\n *\n * @param {Object} dependencies : legend data\n * @class Legend\n */\nexport default class GradientLegend extends SimpleLegend {\n\n /**\n * Initializes an instance of the class\n *\n * @static\n * @param {Object} dependencies Set of dependencies required by the legend\n * @return {Instance} returns a new instance of Legend\n * @memberof Legend\n */\n static create (dependencies) {\n return new GradientLegend(dependencies);\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof GradientLegend\n */\n static type () {\n return GRADIENT;\n }\n\n /**\n *\n *\n * @param {*} axis\n * @returns\n * @memberof GradientLegend\n */\n axis (...axis) {\n if (axis.length) {\n this._axis = axis[0];\n return this;\n }\n return this._axis;\n }\n\n /**\n *\n *\n * @param {*} scale\n * @returns\n * @memberof GradientLegend\n */\n dataFromScale (scale) {\n let domainForLegend = [];\n const { scaleType, domain, steps, scaleFn } = getScaleInfo(scale);\n\n if (steps instanceof Array) {\n if (domain[0] < steps[0]) {\n domainForLegend[0] = domain[0];\n }\n domainForLegend = [...domainForLegend, ...steps];\n if (domain[domain.length - 1] > steps[steps.length - 1]) {\n domainForLegend.push(domain[1]);\n }\n } else {\n domainForLegend = getInterpolatedData(domain, steps - 1);\n }\n domainForLegend = [...new Set(domainForLegend)].sort((a, b) => a - b);\n\n return domainForLegend.map((ele, i) => {\n const value = domainForLegend[i];\n return {\n [scaleType]: scaleType === SIZE ? scale[scaleFn](ele) * scale.getScaleFactor()\n : scale[scaleFn](Math.floor(ele)),\n value: +value.toFixed(2),\n id: i\n };\n }).filter(d => d.value !== null);\n }\n\n /**\n *\n *\n * @param {*} effPadding\n * @param {*} align\n * @return\n * @memberof Legend\n */\n getLabelSpaces (effPadding) {\n this.config({\n item: {\n text: {\n orientation: this.config().position\n }\n }\n });\n const axis = createAxis(this);\n const axisSpace = axis.getLogicalSpace();\n const space = { width: axisSpace.width - effPadding, height: axisSpace.height - effPadding };\n const axisDomainLength = axis.source().domain().length;\n const labelSpaces = new Array(axisDomainLength).fill(space);\n\n this.axis(axis);\n return labelSpaces;\n }\n\n /**\n *\n *\n * @returns\n * @memberof GradientLegend\n */\n getDrawingContext () {\n return {\n svgContainer: this._legendGradientSvg\n };\n }\n\n /**\n * Render the legend with its title\n *\n * @param {DOM} mountPoint Point where the legend and title are to be appended\n * @return {Instance} Current instance of legend\n * @memberof Legend\n */\n render () {\n const firebolt = this.firebolt();\n const legendContainer = super.render(this.mount());\n // create Legend\n renderGradient(this, legendContainer);\n legendContainer.selectAll('div').style('float', LEFT);\n firebolt.mapActionsAndBehaviour();\n firebolt.createSelectionSet(this.data().map(d => d.id));\n return legendContainer;\n }\n /**\n *\n *\n * @param {*} data\n * @returns\n * @memberof SimpleLegend\n */\n getCriteriaFromData (data) {\n return [[this.fieldName()], [data.value]];\n }\n}\n","import SimpleLegend from './simple-legend';\nimport {\n getScaleInfo,\n getInterpolatedData,\n getDomainBounds\n} from './legend-helper';\nimport {\n createLegendSkeleton,\n createItemSkeleton,\n renderStepItem\n} from './renderer';\nimport { STEP, RECT, LEFT, SIZE, UPPER, LOWER } from '../enums/constants';\nimport { stepData } from './position-config';\nimport '../styles.scss';\n\n/**\n * Creates a Legend from the axes of a canvas\n *\n * @param {Object} dependencies : legend data\n * @class Legend\n */\nexport default class StepLegend extends SimpleLegend {\n\n /**\n * Initializes an instance of the class\n *\n * @static\n * @param {Object} dependencies Set of dependencies required by the legend\n * @return {Instance} returns a new instance of Legend\n * @memberof Legend\n */\n static create (dependencies) {\n return new StepLegend(dependencies);\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof StepLegend\n */\n static type () {\n return STEP;\n }\n\n /**\n *\n *\n * @param {*} scale\n * @returns\n * @memberof StepLegend\n */\n dataFromScale (scale) {\n let domainLeg = [];\n const { scaleType, domain, steps, scaleFn } = getScaleInfo(scale);\n\n const { formatter } = this.config();\n const domainBounds = {\n lower: null, upper: null\n };\n\n if (steps instanceof Array) {\n if (domain[0] < steps[0]) {\n domainBounds.lower = [`${formatter.bounds.lower} ${steps[0]}`];\n }\n domainLeg = [...domainLeg, ...steps];\n if (domain[domain.length - 1] > steps[steps.length - 1]) {\n domainBounds.upper = [`${formatter.bounds.upper} ${steps[steps.length - 1]}`];\n }\n } else {\n domainLeg = getInterpolatedData(domain, steps);\n }\n\n domainLeg = [...new Set(domainLeg)].sort((a, b) => a - b);\n domainLeg = domainLeg.map((ele, i) => {\n let value = null;\n if (i < domainLeg.length - 1) {\n value = `${(ele.toFixed(1))} - ${(+domainLeg[i + 1].toFixed(1))}`;\n }\n return {\n [scaleType]: scaleType === SIZE ? scale[scaleFn](ele) * scale.getScaleFactor() : scale[scaleFn](ele),\n value,\n id: i + 1,\n range: [ele, domainLeg[i + 1]]\n };\n }).filter(d => d.value !== null);\n\n if (domainBounds.lower) {\n const lowerBounds = getDomainBounds(LOWER, { scale, scaleFn, scaleType },\n { domain, steps, domainBounds });\n domainLeg = [lowerBounds, ...domainLeg];\n }\n if (domainBounds.upper) {\n const upperBounds = getDomainBounds(UPPER, { scale, scaleFn, scaleType },\n { domain, steps, domainBounds, domainLeg });\n domainLeg = [...domainLeg, upperBounds];\n }\n return domainLeg;\n }\n\n /**\n *\n *\n * @param {*} effPadding\n * @param {*} align\n * @return\n * @memberof Legend\n */\n getLabelSpaces (effPadding, align) {\n this.config({\n item: {\n text: {\n orientation: this.config().position\n }\n }\n });\n return super.getLabelSpaces(effPadding, align);\n }\n\n /**\n *\n *\n * @return\n * @memberof Legend\n */\n elemType () {\n return RECT;\n }\n\n /**\n * Render the legend with its title\n *\n * @param {DOM} mountPoint Point where the legend and title are to be appended\n * @return {Instance} Current instance of legend\n * @memberof Legend\n */\n render () {\n const firebolt = this.firebolt();\n const { classPrefix, position } = this.config();\n const data = stepData(this.data())[position];\n\n const legendContainer = super.render(this.mount());\n\n // create Legend\n const { legendItem } = createLegendSkeleton(this, legendContainer, classPrefix, data);\n const { itemSkeleton } = createItemSkeleton(this, legendItem);\n\n renderStepItem(this, itemSkeleton);\n legendContainer.selectAll('div').style('float', LEFT);\n firebolt.mapActionsAndBehaviour();\n firebolt.createSelectionSet(this.data().map(d => d.id));\n return legendContainer;\n }\n\n /**\n *\n *\n * @param {*} data\n * @returns\n * @memberof StepLegend\n */\n getCriteriaFromData (data) {\n const fieldName = this.fieldName();\n return {\n [fieldName]: data.range\n };\n }\n}\n","import { GradientLegend, DiscreteLegend, StepLegend } from '@chartshq/muze-legend';\n\n/**\n * Contants to be used as attr\n */\nexport const ROWS = 'rows';\nexport const COLUMNS = 'columns';\nexport const DATA = 'data';\nexport const COLOR = 'color';\nexport const SHAPE = 'shape';\nexport const SIZE = 'size';\nexport const DETAIL = 'detail';\nexport const LAYERS = 'layers';\nexport const TRANSFORM = 'transform';\nexport const INITIALIZED = 'isInitialized';\nexport const SOURCE = 'source';\nexport const WIDTH = 'width';\nexport const HEIGHT = 'height';\nexport const PADDING = 'padding';\nexport const BORDER = 'border';\nexport const MARGIN = 'margin';\nexport const CONFIG = 'config';\nexport const MOUNT = 'mount';\nexport const CANVAS_UPDATED = 'canvasUpdated';\nexport const CLASSPREFIX = 'classPrefix';\nexport const POLICIES = '_policies';\nexport const LEGEND = 'legend';\nexport const TITLE = 'title';\nexport const SUB_TITLE = 'subtitle';\nexport const RESOLVE = 'resolve';\nexport const DISCRETE = 'discrete';\nexport const STEP_COLOR = 'step-color';\nexport const GRADIENT = 'gradient';\nexport const LINEAR = 'linear';\nexport const ORDINAL = 'ordinal';\n\nexport const TITLE_TEMPLATE_NOT_ALLOWED_TAGS = [\n 'script',\n 'style'\n];\n\nexport const LEGEND_TYPE_MAP = {\n [`${ORDINAL}-${true}-${COLOR}`]: DiscreteLegend,\n [`${ORDINAL}-${true}-${SIZE}`]: DiscreteLegend,\n [`${ORDINAL}-${true}-${SHAPE}`]: DiscreteLegend,\n [`${ORDINAL}-${false}-${COLOR}`]: DiscreteLegend,\n [`${ORDINAL}-${false}-${SHAPE}`]: DiscreteLegend,\n [`${ORDINAL}-${false}-${SIZE}`]: DiscreteLegend,\n [`${LINEAR}-${false}-${SIZE}`]: DiscreteLegend,\n [`${LINEAR}-${true}-${SIZE}`]: DiscreteLegend,\n [`${LINEAR}-${false}-${SHAPE}`]: DiscreteLegend,\n [`${LINEAR}-${true}-${COLOR}`]: StepLegend,\n [`${LINEAR}-${false}-${COLOR}`]: GradientLegend\n};\n\nexport const LEFT = 'left';\nexport const RIGHT = 'right';\nexport const BOTTOM = 'bottom';\nexport const TOP = 'top';\nexport const GROUP = 'group';\nexport const LAYOUT = 'layout';\nexport const RETINAL = 'retinal';\nexport const DIMENSION = 'dimension';\nexport const MEASURE = 'measure';\nexport const VERTICAL = 'vertical';\nexport const HORIZONTAL = 'horizontal';\n\n","import { ComposedVars, SimpleVariable } from '@chartshq/visual-group';\nimport { TITLE_TEMPLATE_NOT_ALLOWED_TAGS } from './constants';\n\n/**\n * This method creates a new composed variable instance from multiple variables.\n * @param {Array} vars Variable names\n * @return {ComposedVars} Instance of composed variable\n */\nexport const share = (...vars) => new ComposedVars(...vars.map(variable => new SimpleVariable(variable)));\n\n/**\n *\n *\n * @param {*} node\n * @returns\n */\nfunction treeShakeNode (node) {\n if (node.nodeType !== Node.ELEMENT_NODE) { return; }\n\n if (TITLE_TEMPLATE_NOT_ALLOWED_TAGS.indexOf(node.tagName.toLowerCase()) !== -1) {\n node.parentNode.removeChild(node);\n } else {\n for (const childNode of node.childNodes) {\n treeShakeNode(childNode);\n }\n }\n}\n\n/**\n * A string template tagged function which sanitizes input html formatted\n * string according to the allowed html tags.\n *\n * @param {Array.} strings - The string parts of the template.\n * @param {Array} exps - The list of evaluated expression values.\n * @return {Function} Returns a function which returns the sanitized html string.\n */\nexport function html (strings, ...exps) {\n let htmlCode = '';\n const expLn = exps.length;\n let i = 0;\n\n for (; i < expLn; ++i) {\n htmlCode += strings[i] + exps[i];\n }\n htmlCode += strings[i];\n\n const frag = document.createDocumentFragment();\n const wrapper = document.createElement('div');\n\n frag.appendChild(wrapper);\n wrapper.innerHTML = htmlCode;\n\n treeShakeNode(wrapper);\n const { innerHTML } = wrapper;\n\n return () => innerHTML;\n}\n","import { mergeRecursive } from 'muze-utils';\n\nconst defaultPolicy = (registrableComponents) => {\n const aliases = registrableComponents.map(comp => comp.alias());\n return {\n behaviours: {\n '*': (propagationPayload) => {\n const propagationCanvas = propagationPayload.sourceCanvas;\n return propagationCanvas ? aliases.indexOf(propagationCanvas) !== -1 : true;\n }\n }\n };\n};\n\nclass ActionModel {\n constructor () {\n this._registrableComponents = [];\n }\n\n registerPhysicalActions (action) {\n const canvases = this._registrableComponents;\n\n canvases.forEach((canvas) => {\n canvas.once('canvas.updated').then((args) => {\n const matrix = args.client.composition().visualGroup.matrixInstance().value;\n matrix.each(cell => cell.valueOf().firebolt().registerPhysicalActions(action));\n });\n });\n return this;\n }\n\n registerBehaviouralActions (...actions) {\n const canvases = this._registrableComponents;\n\n canvases.forEach((canvas) => {\n canvas.once('canvas.updated').then(() => {\n const matrix = canvas.composition().visualGroup.matrixInstance().value;\n matrix.each(cell => cell.valueOf().firebolt().registerBehaviouralActions(...actions));\n });\n });\n return this;\n }\n\n /**\n *\n *\n * @param {*} map\n * @returns\n * @memberof ActionModel\n */\n registerPhysicalBehaviouralMap (map) {\n const canvases = this._registrableComponents;\n\n canvases.forEach((canvas) => {\n canvas.once('canvas.updated').then((args) => {\n const matrix = args.client.composition().visualGroup.matrixInstance().value;\n matrix.each(cell => cell.valueOf().firebolt().registerPhysicalBehaviouralMap(map));\n });\n });\n return this;\n }\n\n registerPropagationBehaviourMap (map) {\n const canvases = this._registrableComponents;\n\n canvases.forEach((canvas) => {\n canvas.once('canvas.updated').then((args) => {\n const matrix = args.client.composition().visualGroup.matrixInstance().value;\n matrix.each(cell => cell.valueOf().firebolt().registerPropagationBehaviourMap(map));\n });\n });\n return this;\n }\n\n mapSideEffects (map) {\n const canvases = this._registrableComponents;\n\n canvases.forEach((canvas) => {\n canvas.once('canvas.updated').then(() => {\n const matrix = canvas.composition().visualGroup.matrixInstance().value;\n matrix.each(cell => cell.valueOf().firebolt().mapSideEffects(map));\n });\n });\n return this;\n }\n\n for (...components) {\n this._registrableComponents = components;\n return this;\n }\n\n registerSideEffects (...sideEffects) {\n const registrableComponents = this._registrableComponents;\n\n registrableComponents.forEach((canvas) => {\n canvas.once('canvas.updated').then((args) => {\n const matrix = args.client.composition().visualGroup.matrixInstance().value;\n matrix.each(cell => cell.valueOf().firebolt().registerSideEffects(sideEffects));\n });\n });\n\n return this;\n }\n\n dissociateBehaviour (...maps) {\n const registrableComponents = this._registrableComponents;\n\n registrableComponents.forEach((canvas) => {\n canvas.once('canvas.updated').then((args) => {\n const matrix = args.client.composition().visualGroup.matrixInstance().value;\n matrix.each((cell) => {\n maps.forEach(val => cell.valueOf().firebolt().dissociateBehaviour(val[0], val[1]));\n });\n });\n });\n\n return this;\n }\n\n dissociateSideEffect (...maps) {\n const registrableComponents = this._registrableComponents;\n\n registrableComponents.forEach((canvas) => {\n canvas.once('canvas.updated').then((args) => {\n const matrix = args.client.composition().visualGroup.matrixInstance().value;\n matrix.each((cell) => {\n maps.forEach(val => cell.valueOf().firebolt().dissociateSideEffect(val[0], val[1]));\n });\n });\n });\n\n return this;\n }\n\n enableCrossInteractivity (policy = {}) {\n const registrableComponents = this._registrableComponents;\n const mergedPolicy = mergeRecursive(mergeRecursive({}, defaultPolicy(registrableComponents)), policy);\n\n registrableComponents.forEach((canvas) => {\n canvas.firebolt().crossInteractionPolicy(mergedPolicy);\n });\n\n return this;\n }\n}\n\nexport const actionModel = (() => new ActionModel())();\n","export const DEFAULT_CONFIG = {\n classPrefix: 'muze',\n interaction: {\n sideEffect: 'individual'\n },\n legend: {\n position: 'right',\n color: {\n show: true,\n padding: 1,\n margin: 3,\n border: 1,\n height: 20,\n width: 20\n },\n shape: {\n show: true,\n padding: 1,\n margin: 3,\n border: 1,\n height: 20,\n width: 20\n },\n size: {\n show: true,\n padding: 1,\n margin: 3,\n border: 1,\n height: 20,\n width: 20\n }\n },\n showHeaders: false,\n minWidth: 100,\n minHeight: 100,\n border: {\n style: 'solid',\n color: '#d6d6d6',\n width: 2,\n collapse: true,\n spacing: 0\n },\n autoGroupBy: {\n disabled: false\n }\n};\n","/**\n * @module\n * This is the global options semantics based on which setters getters are created and reactivity is initiated.\n * Format\n * PROPERTRY_NAME: {\n * value: // default value of the property,\n * meta: {\n * typeCheck: // The setter value will be checked using this. If the value is function then the setter value\n * // is passed as args.\n * typeExpected: // The output of typecheck action will be tested against this. Truthy value will set the\n * // value to the setter\n * sanitizaiton: // Need for sanitization before type is checked\n * }\n * }\n */\n\nimport { intSanitizer, mergeRecursive, DataModel } from 'muze-utils';\nimport { DEFAULT_CONFIG } from './defaults';\n\nexport default {\n data: {\n value: null,\n meta: {\n typeCheck: d => d instanceof DataModel\n }\n },\n width: {\n value: 0,\n meta: {\n sanitization: intSanitizer,\n typeCheck: Number.isInteger\n }\n },\n height: {\n value: 0,\n meta: {\n sanitization: intSanitizer,\n typeCheck: Number.isInteger\n }\n },\n minUnitWidth: {\n value: 50,\n meta: {\n sanitization: intSanitizer,\n typeCheck: Number.isInteger\n }\n },\n minUnitHeight: {\n value: 50,\n meta: {\n sanitization: intSanitizer,\n typeCheck: Number.isInteger\n }\n },\n config: {\n value: null,\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Object',\n sanitization: (config, oldConfig) => {\n const oldConf = mergeRecursive({}, oldConfig);\n const defConfig = mergeRecursive(oldConf, DEFAULT_CONFIG);\n const newConf = mergeRecursive(defConfig, config);\n return newConf;\n }\n\n }\n }\n};\n","/**\n * This file exports constants that will be used to\n * create the state store of the table layout.\n */\n/**\n * The index of top, bottom and center in the matrix\n */\nexport const VIEW_INDEX = {\n top: 0,\n center: 1,\n bottom: 2\n};\n\n/**\n * The width of the grid suppied by the user.\n */\nexport const GRID_WIDTH = 'width';\n\n/**\n * The height of the grid supplied by the user.\n */\nexport const GRID_HEIGHT = 'height';\n\n/**\n * The border for the grid\n */\nexport const BORDER = 'border';\n\n /**\n * The index of the first visible row in view matrix.\n */\nexport const ROW_POINTER = 'rowPointer';\n\n/**\n * The index of the first visible column in the view matrix.\n */\nexport const COLUMN_POINTER = 'columnPointer';\n\n/**\n * Flag to specify whether row sizes should be equal.\n */\nexport const ROW_SIZE_IS_EQUAL = 'isRowSizeEqual';\n\n/**\n * Flag to specify whether column sizes are equal.\n */\nexport const COLUMN_SIZE_IS_EQUAL = 'isColumnSizeEqual';\n\n/**\n * Field to store an array an of the widths of visible columns.\n * @computed\n */\nexport const COLUMN_WIDTHS = 'visibleColumnWidths';\n\n/**\n * Field to store an array of heights of visible rows.\n * @computed\n */\nexport const ROW_HEIGHTS = 'visibleRowHeights';\n\n/**\n * Field to store the width of the left matrix.\n * @computed\n */\nexport const LEFT_MATRIX_WIDTH = 'leftMatrixWidth';\n\n/**\n * Field to store the width of the right matrix.\n * @computed\n */\nexport const RIGHT_MATRIX_WIDTH = 'rightMatrixWidth';\n\n/**\n * Field to store the height of the top matrix.\n * @computed\n */\nexport const TOP_MATRIX_HEIGHT = 'topMatrixHeight';\n\n/**\n * Field to store the height of the bottom matrix.\n * @computed\n */\nexport const BOTTOM_MATRIX_HEIGHT = 'bottomMatrixHeight';\n\n/**\n * The dom element to render the layout inside.\n */\nexport const MOUNT_POINT = 'mount';\n\n/**\n * The id attribute of the left table element.\n */\nexport const LEFT_TABLE_ID = 'grid-left';\n\n/**\n * The id attribute of the right table element.\n */\nexport const RIGHT_TABLE_ID = 'grid-right';\n\n/**\n * The id attribute of the top table.\n */\nexport const TOP_TABLE_ID = 'grid-top';\n\n/**\n * The id attribute of the bottom table.\n */\nexport const BOTTOM_TABLE_ID = 'grid-bottom';\n\n/**\n * The id attribute of the center table.\n */\nexport const CENTER_TABLE_ID = 'grid-center';\n\n/**\n * The id attribute of the top div.\n */\nexport const TOP_DIV_ID = 'muze-div-top';\n\n/**\n * The id attribute of the bottom div.\n */\nexport const BOTTOM_DIV_ID = 'muze-div-bottom';\n\n/**\n * The id attribute of the center div.\n */\nexport const CENTER_DIV_ID = 'muze-div-center';\n\n/**\n * Field that indicates if the row configuration has changed\n */\nexport const HAVE_ROWS_CHANGED = 'haveRowsChanged';\n\n/**\n * Field that indicates if the column configuration has changed\n */\nexport const HAVE_COLUMNS_CHANGED = 'haveColumnsChanged';\n\n/**\n * Field that indicates if the values configuration for the center matrix has changed\n */\nexport const HAVE_VALUES_CHANGED = 'haveValuesChanged';\n\n/**\n * Field that indicates the width of row matrix\n */\nexport const ROW_MATRIX_WIDTH = 'rowMatrixWidth';\n\n/**\n * Field that indicates the height of row matrix\n */\nexport const COLUMN_MATRIX_HEIGHT = 'columnMatrixHeight';\n\n/**\n * Field that indicates the unit width of layout\n */\nexport const UNIT_WIDTH = 'unitWidth';\n\n/**\n * Field that indicates the unit height of layout\n */\nexport const UNIT_HEIGHT = 'unitHeight';\n\n/**\n * Field that indicates the style object\n */\nexport const STYLE = 'style';\n\n/**\n * Field that indicates the color configuration\n */\nexport const COLOR = 'color';\n\n/**\n * Field that indicates width\n */\nexport const WIDTH = 'width';\n\n/**\n * Field that indicates collpase property for border\n */\nexport const COLLAPSE = 'collapse';\n\n/**\n * Field that indicates spacing property for border\n */\nexport const SPACING = 'spacing';\n\n/**\n * Field that indicates spacing property for border\n */\nexport const DISTRIBUTION = 'distribution';\n\n/**\n * Field that indicates spacing property for border\n */\nexport const GUTTERSPACE = 'gutterSpace';\n\n/**\n * Field that indicates spacing property for border\n */\nexport const BREAK_PAGE = 'breakPage';\n\n/**\n * Field that indicates spacing property for border\n */\nexport const SHOW_ROW_BORDERS = 'showRowBorders';\n\n/**\n * Field that indicates spacing property for border\n */\nexport const SHOW_COL_BORDERS = 'showColBorders';\n\n/**\n * Field that indicates spacing property for border\n */\nexport const SHOW_VALUE_BORDERS = 'showValueBorders';\n\nexport const HEIGHT = 'height';\nexport const COLUMN = 'column';\nexport const ROW = 'row';\nexport const TOP = 'top';\nexport const LEFT = 'left';\nexport const RIGHT = 'right';\nexport const BOTTOM = 'bottom';\nexport const CENTER = 'center';\nexport const CLICK = 'click';\nexport const ROW_LEFT = 'rowLeft';\nexport const ROW_RIGHT = 'rowRight';\nexport const COLUMN_BOTTOM = 'colBottom';\nexport const COLUMN_TOP = 'colTop';\nexport const AUTO = 'auto';\nexport const ROW_SPAN = 'rowSpan';\nexport const COL_SPAN = 'colSpan';\nexport const ROW_ROOT = 'rowRoot';\nexport const COLUMN_ROOT = 'columnRoot';\nexport const PRIMARY = 'primary';\nexport const SECONDARY = 'secondary';\n","import { sanitizeIP, mergeRecursive } from 'muze-utils';\nimport { TOP, CENTER, BOTTOM } from '../enums/constants';\n\n/*\n * This is the abstract implementation of the root layout. This takes care of common work which all the layouts\n * has to handle. The common work includes sanitizaion of inputs, update, rerender, dispose etc. This class can't be\n * used directly (as ofcourse this is an abstract implementaiton), the class which is implementing it has to implement\n * the necessary methods and gives its on visual.\n */\n\n/**\n * This class is used to create a generic layout. It can be extended to create layouts\n * of different types\n * @class GenericLayout\n */\nexport default class GenericLayout {\n\n /**\n * Creates an instance of TableLayout.\n * @param {HTMLElement} mountPoint DOM element/d3 selection where the layout is to be mounted\n * @param {Object} measurement The dimensions of the layout\n * @param {Object} config configuration to be given for the layout\n * @param {Object} dependencies external dependencies.\n * @memberof GenericLayout\n *\n * measurement : {\n * width : number => width of the container\n * height : number => height of the container\n * unitHeight : number => height of unit of the cells\n * unitWidth : number => width of unit of the cells\n * }\n *\n */\n constructor (mountPoint, measurement, config, dependencies) {\n this._config = {};\n this._measurement = {};\n this._matrices = [];\n // External dependencies to be included for the layout. This includes the ext global dependencies like\n // smartlabel which has one single implementation of throughout the page or per isntance\n this._dependencies = dependencies;\n\n this.measurement(measurement);\n this.mountPoint(mountPoint);\n this.config(config);\n }\n\n /**\n * Returns an object which is used to recreate the layout.\n * @return {Object} the serialized components\n */\n serialize () {\n return {\n measurement: this.measurement(),\n config: this.config(),\n matrices: this.matrices()\n };\n }\n\n /**\n * Sets/Gets the config for the layout\n * @param {Object} config configuration for the layout\n * @return {Layout|Object} Gets the Config/ Returns this instance when set\n */\n config (config) {\n if (config) {\n this._config = mergeRecursive(this._config || {}, config);\n return this;\n }\n return this._config;\n }\n\n /**\n * Sets/Gets the measurement for the layout\n * @param {Object} measurement measurement for the layout\n * @return {Layout|Object} Gets the measurement/ Returns this instance when set\n */\n measurement (measurement) {\n if (measurement) {\n this._measurement = mergeRecursive(this._measurement || {}, measurement);\n\n return this;\n }\n return this._measurement;\n }\n\n /**\n * Sets/Gets the matrices for the layout\n * @param {Object} matrices matrices for the layout\n * @return {Layout|Object} Gets the matrices/ Returns this instance when set\n */\n matrices (matrices) {\n if (matrices) {\n this._matrices = sanitizeIP.typeObj([TOP, CENTER, BOTTOM], matrices);\n\n return this;\n }\n return this._matrices;\n }\n\n /**\n * Sets/Gets the matrix for row\n * @param {Object} matrix matrices for the layout\n * @return {Layout|Object} Gets the matrix/ Returns this instance when set\n */\n rowMatrix (matrix) {\n if (matrix) {\n this._rowMatrix = matrix;\n return this;\n }\n return this._rowMatrix;\n }\n\n /**\n * Sets/Gets the matrix for columns\n * @param {Object} matrix matrices for the layout\n * @return {Layout|Object} Gets the matrix/ Returns this instance when set\n */\n columnMatrix (matrix) {\n if (matrix) {\n this._columnMatrix = matrix;\n return this;\n }\n return this._columnMatrix;\n }\n\n /**\n * Sets/Gets the matrix for value\n * @param {Object} matrix matrices for the layout\n * @return {Layout|Object} Gets the matrix/ Returns this instance when set\n */\n centerMatrix (matrix) {\n if (matrix) {\n this._centerMatrix = matrix;\n return this;\n }\n return this._centerMatrix;\n }\n\n /**\n * Sets/Gets the mountPoint for the layout\n * @param {Object} mountPoint mountPoint for the layout\n * @return {Layout|Object} Gets the mountPoint/ Returns this instance when set\n */\n mountPoint (mountPoint) {\n if (mountPoint) {\n this._mountPoint = mountPoint;\n\n return this;\n }\n return this._mountPoint;\n }\n}\n","import * as FieldNames from '../enums/constants';\n\n/**\n * Default configuration of the layout\n * @return {Object} returns the default configuration\n */\nexport const DEFAULT_CONFIGURATION = {\n [FieldNames.BORDER]: {\n [FieldNames.STYLE]: 'solid',\n [FieldNames.COLOR]: '#d6d6d6',\n [FieldNames.WIDTH]: 2,\n [FieldNames.COLLAPSE]: true,\n [FieldNames.SPACING]: 0\n },\n [FieldNames.GUTTERSPACE]: { rows: [], columns: [] },\n [FieldNames.DISTRIBUTION]: { rows: [], columns: [] },\n [FieldNames.BREAK_PAGE]: { rows: [], columns: [] },\n [FieldNames.ROW_SIZE_IS_EQUAL]: false,\n [FieldNames.COLUMN_SIZE_IS_EQUAL]: false,\n [FieldNames.COLUMN_POINTER]: 0,\n [FieldNames.ROW_POINTER]: 0\n};\n\n/**\n * Default measurements for the layout\n * @return {Object} returns the default measurements\n */\nexport const DEFAULT_MEASUREMENTS = {\n [FieldNames.GRID_WIDTH]: 100,\n [FieldNames.GRID_HEIGHT]: 100,\n [FieldNames.UNIT_WIDTH]: 100,\n [FieldNames.UNIT_HEIGHT]: 100\n};\n\nexport const BLANK_BORDERS = 'rgba(0,0,0,0)';\n","import { ROW_LEFT, ROW_RIGHT, COLUMN_BOTTOM, COLUMN_TOP, TOP, BOTTOM } from '../enums/constants';\n/**\n * This callback is used to filter the array of\n * placeholder cells and filter out cells which have\n * appeared in a previous row.\n *\n * @param {Placeholder} colData Instance of placeholder.\n * @param {number} colIdx The index of the placeholder in array.\n * @param {Array} matrix The 2d array for which filtering is to be done\n * @param {number} rIdx The index of the row of the placeholder in array.\n * @param {string} type The type of matrix it is (rowLeft, rowRight, colTop, colBottom)\n * @return {boolean} flag to keep/remove element.\n */\nconst columnFilter = (colData, colIdx, matrix, rIdx, type) => {\n const previousRow = matrix[rIdx - 1];\n const currentRow = matrix[rIdx];\n\n // Row Span for left\n if (type === ROW_LEFT) {\n if (!previousRow) {\n return colData;\n }\n let i = 0;\n for (;i <= colIdx; i += 1) {\n if (currentRow[i].valueOf() !== previousRow[i].valueOf()) {\n break;\n }\n }\n return (i - 1 === colIdx) ? null : colData;\n } else if (type === ROW_RIGHT) {\n if (!previousRow || colIdx === 0) {\n return colData;\n }\n let j = colIdx;\n for (; j < currentRow.length; j += 1) {\n if (previousRow[j].valueOf() !== currentRow[j].valueOf()) {\n break;\n }\n }\n return (j === currentRow.length) ? null : colData;\n } else if (type === COLUMN_BOTTOM) {\n if (rIdx === 0) {\n return colData;\n }\n const prevCell = currentRow[colIdx - 1];\n if (prevCell) {\n if (prevCell.valueOf() === colData.valueOf()) {\n const nextRow = matrix[rIdx + 1];\n if (!nextRow) {\n return null;\n }\n if (nextRow[colIdx].valueOf() === nextRow[colIdx - 1].valueOf()) {\n return null;\n }\n return colData;\n }\n return colData;\n }\n return colData;\n } else if (type === COLUMN_TOP) {\n if (rIdx === matrix.length - 1 && matrix.length > 1) {\n return colData;\n }\n const prevCell = currentRow[colIdx - 1];\n if (prevCell && (prevCell.valueOf() === colData.valueOf())) {\n const prevRow = matrix[rIdx - 1];\n if (prevRow) {\n if (prevRow[colIdx].valueOf() === prevRow[colIdx - 1].valueOf()) {\n return null;\n }\n return colData;\n }\n return null;\n }\n return colData;\n }\n return colData;\n};\n\n/**\n * This callback is used to calculate the rowspan\n * by checking for repeating entries in subsequent rows\n * at the specified column.\n *\n * @param {Placeholder} colData Instance of placeholder.\n * @param {number} colIdx The index of the placeholder in the array.\n * @param {Array} matrix The 2d array for which filtering is to be done\n * @param {number} rIdx The index of the row of the placeholder in array.\n * @return {number} The row span.\n */\nconst calcRowSpan = (colData, colIdx, matrix, rIdx) => {\n let count = 1;\n // if data is not header cell then rowspan\n // has to be 1\n if (!colData || typeof colData.valueOf() !== 'string') {\n return 1;\n }\n let isNull = false;\n while (!isNull) {\n if (matrix[rIdx + count] && matrix[rIdx + count][colIdx] === null) {\n count += 1;\n } else {\n isNull = true;\n }\n }\n return count;\n};\n/**\n * This callback is used to calculate the rowspan\n * by checking for repeating entries in subsequent rows\n * at the specified column.\n *\n * @param {Placeholder} colData Instance of placeholder.\n * @param {number} colIdx The index of the placeholder in the array.\n * @param {Array} matrix The 2d array for which filtering is to be done\n * @param {number} rIdx The index of the row of the placeholder in array.\n * @return {number} The row span.\n */\nconst calcColSpan = (colData, colIdx, matrix, rIdx) => {\n let count = 1;\n // if data is not header cell then rowspan\n // has to be 1\n if (!colData || typeof colData.valueOf() !== 'string') {\n return 1;\n }\n let isNull = false;\n while (!isNull) {\n if (matrix[rIdx][colIdx + count] === null) {\n count += 1;\n } else {\n isNull = true;\n }\n }\n return count;\n};\n\n// create a masking matrix to strip out repeating columns\n// and calculate rowspan.\nconst mask = function (matrix, type) {\n return matrix.map((row, rIdx) => {\n if (type === ROW_LEFT || type === ROW_RIGHT) {\n const filteredRow = row.map((col, colIndex) => columnFilter(col, colIndex, matrix, rIdx, type));\n const temp = [];\n const diff = row.length - filteredRow.length;\n for (let i = 0; i < diff; i += 1) {\n temp.push(null);\n }\n if (type === ROW_RIGHT) {\n temp.unshift(...filteredRow);\n return temp;\n }\n temp.push(...filteredRow);\n return temp;\n }\n\n const filteredRow = row.map((col, colIndex) => columnFilter(col, colIndex, matrix, rIdx, type));\n const temp = [];\n temp.push(...filteredRow);\n return temp;\n });\n};\n\n/**\n * This function is used to set the col and row spans\n * for the matrices based on repeated/hierarchichal data\n *\n * @export\n * @param {Array} matrix The 2d array for which filtering is to be done\n * @param {string} type Type of array (center, top, bottom)\n * @param {number} index Index of array in the row\n * @return {Object} containing the view matrix and their spans\n */\nexport function cellSpanMaker (matrix, type, index) {\n let span = '';\n if (type === TOP || type === BOTTOM) {\n span = type === TOP ? COLUMN_TOP : COLUMN_BOTTOM;\n const viewMatrix = mask(matrix, span);\n const spans = viewMatrix.map((row, ridx) => row.map((col, i) => calcColSpan(col, i, viewMatrix, ridx))\n .filter(col => col !== 1));\n return { viewMatrix, spans };\n } else if (index === 0 || index === 2) {\n span = index === 0 ? ROW_LEFT : ROW_RIGHT;\n const viewMatrix = mask(matrix, span);\n const spans = [];\n viewMatrix.forEach((row, ridx) => {\n spans[ridx] = spans[ridx] || [];\n row.forEach((col, i) => {\n if (viewMatrix[ridx][i]) {\n const currSpan = calcRowSpan(col, i, viewMatrix, ridx);\n currSpan && spans[ridx].push(currSpan);\n }\n });\n });\n return { viewMatrix, spans };\n }\n return { viewMatrix: matrix };\n}\n","import { makeElement, selectElement } from 'muze-utils';\nimport { cellSpanMaker } from './span-maker';\nimport {\n TOP, LEFT, RIGHT, BOTTOM, CENTER, WIDTH, ROW_SPAN, COL_SPAN\n} from '../enums/constants';\nimport { BLANK_BORDERS } from './defaults';\n\n/**\n * Creates a table element of the layout\n *\n * @param {Object} mount Mount point for table elements\n * @param {string} className defines class name\n * @param {Array} rowData set of rows for the table\n * @return {Selection} set of selections for the table\n */\nfunction renderTable (mount, className, rowData) {\n const table = makeElement(mount, 'table', ['layout'], `${className}-table`);\n const body = makeElement(table, 'tbody', ['layout'], `${className}-body`);\n const rows = makeElement(body, 'tr', rowData, `${className}-tr`);\n const cells = makeElement(rows, 'td', (d, i) => d.filter(e => e !== null && e.config().show).map(e =>\n ({ placeholder: e, rowIndex: i })), `${className}-td`, {}, key => key.placeholder.id);\n\n return { table, body, rows, cells };\n}\n\nfunction applyRowBorders (cells, borderStyle, showBorders, color) {\n [TOP, BOTTOM].forEach((borderType) => {\n const style = `${borderStyle} ${showBorders[borderType] ? color : BLANK_BORDERS}`;\n cells.style(`border-${borderType}`, style);\n });\n}\n\nfunction applyColBorders (cells, borderStyle, showBorders, color) {\n [LEFT, RIGHT].forEach((borderType) => {\n const style = `${borderStyle} ${showBorders[borderType] ? color : BLANK_BORDERS}`;\n cells.style(`border-${borderType}`, style);\n });\n}\n\n/**\n * Applies borders to the cells in a matrix\n *\n * @param {Selection} cells Set of cells made from the matrix\n * @param {Object} border Border info for layout\n * @param {string} type Type of matrix(top/center/bottom)\n * @param {number} index Column index of matrix in the row\n */\nfunction applyBorders (cells, border, type, index) {\n const {\n width,\n style,\n color,\n showRowBorders,\n showColBorders,\n showValueBorders\n } = border;\n const borderStyle = `${width}px ${style}`;\n\n if (type === CENTER && index === 1) {\n [TOP, BOTTOM, LEFT, RIGHT].forEach((borderType) => {\n cells.style(`border-${borderType}`, `${borderStyle} ${showValueBorders[borderType] ?\n color : BLANK_BORDERS}`);\n });\n } else if (type === CENTER) {\n applyRowBorders(cells, borderStyle, showRowBorders, color);\n } else if (index === 1) {\n applyColBorders(cells, borderStyle, showColBorders, color);\n }\n}\n\n/**\n * Renders a set of matrices in a row\n *\n * @param {Array} matrices Set of matrices in a row\n * @param {Selection} mountPoint Mount point for the row\n * @param {string} type top/center/bottom\n * @param {Object} dimensions dimensions of the matrix\n */\nfunction renderMatrix (matrices, mountPoint, type, dimensions, classPrefix) {\n matrices.forEach((matrix, index) => {\n // Creating containers for each matrix individually\n const containerForMatrix = makeElement(mountPoint, 'div', [1], `${classPrefix}-grid-${type}-${index + 1}`)\n .classed(`${classPrefix}-grid-${type}`, true)\n .classed(`${classPrefix}-grid`, true);\n\n const {\n viewMatrix,\n spans\n } = cellSpanMaker(matrix, type, index);\n\n // Rendering the table components\n const { cells } = renderTable(containerForMatrix, `${classPrefix}-grid`, viewMatrix);\n\n if (type === CENTER && spans) {\n cells.attr(ROW_SPAN, function (cell, colIndex) {\n const placeholder = cell.placeholder;\n selectElement(this).style('height', `${placeholder.availHeight() + dimensions.border.width}px`);\n return spans[cell.rowIndex][colIndex];\n });\n } else if ((type === TOP || type === BOTTOM) && index === 1) {\n cells.attr(COL_SPAN, function (cell, colIndex) {\n const span = spans[cell.rowIndex][colIndex];\n const placeholder = cell.placeholder;\n if (span > 1) {\n placeholder.setAvailableSpace(0, placeholder.availHeight());\n }\n selectElement(this).style('height', `${placeholder.availHeight()}px`);\n return span;\n });\n }\n // Rendering content within placeholders\n cells.each(function (cell) {\n cell.placeholder && cell.placeholder.render(this);\n }).exit().each((cell) => {\n cell.placeholder && cell.placeholder.remove();\n });\n\n applyBorders(cells, dimensions.border, type, index);\n });\n}\n\n/**\n * Renders all the matrices of the layout\n *\n * @export\n * @param {Array} matrices Set of matrices in the layout\n * @param {Array} mountPoints Mount points for each row of matrix\n * @param {Array} layoutDimensions Dimensions(height/width) of all the matrices\n */\nexport function renderMatrices (context, matrices, layoutDimensions) {\n const {\n top,\n center,\n bottom\n } = matrices;\n const {\n classPrefix\n } = context.config();\n const {\n width\n } = context.measurement();\n const mount = context.mountPoint();\n\n const data = [\n { type: TOP, matrix: top },\n { type: CENTER, matrix: center },\n { type: BOTTOM, matrix: bottom }\n ];\n makeElement(mount, 'div', data, `${classPrefix}-grid-layout-row`)\n .each(function (d, i) {\n const row = selectElement(this);\n row.classed(`${classPrefix}-grid-layout-row-${i}`, true);\n renderMatrix(d.matrix, row, d.type, layoutDimensions, classPrefix);\n })\n .style(WIDTH, `${Math.ceil(width)}px`);\n}\n","/**\n * This file exports utility functions that are used across the layout module\n */\nimport { Symbols } from 'muze-utils';\nimport { PRIMARY, SECONDARY, HEIGHT, WIDTH } from '../enums/constants';\n\nconst nest = Symbols.nest;\n/**\n *\n *\n * @param {*} isTransposed\n * @returns\n */\nconst getMeasureInfo = (isTransposed) => {\n if (isTransposed) {\n return {\n firstMeasure: HEIGHT,\n secondMeasure: WIDTH\n };\n }\n return {\n firstMeasure: WIDTH,\n secondMeasure: HEIGHT\n };\n};\n\n/**\n *\n *\n * @param {*} i\n * @param {*} page\n * @returns\n */\nconst findInPage = (i, page) => {\n let count = 0;\n for (const x in page) {\n if (i < page[x]) {\n count = x;\n break;\n }\n }\n return count;\n};\n\n/**\n * Creates a single matrix from two matrices\n *\n * @param {Array} matrix Input matrix\n * @return {Array} Joined matrix\n * @memberof VisualMatrix\n */\nexport const combineMatrices = (matrix, config) => {\n const { isTransposed } = config;\n let joinedMatrix = matrix[0].length > 0 ? matrix[0] : matrix[1];\n if (isTransposed) {\n joinedMatrix = matrix[0].length > 0 ? [...matrix[0]] : [];\n joinedMatrix = matrix[1].length > 0 ? [...joinedMatrix, ...matrix[1]] : joinedMatrix;\n } else {\n joinedMatrix = joinedMatrix.map((row, rowIndex) => {\n let rowData = [];\n if (matrix[0].length > 0) {\n rowData = [...matrix[0][rowIndex]];\n }\n if (matrix[1].length > 0) {\n rowData = [...rowData, ...matrix[1][rowIndex]];\n }\n return rowData;\n });\n }\n return joinedMatrix;\n};\n\n/**\n * Creates a hirachical tree from the context\n *\n * @param {Object} context context for creating tree\n * @return {Object} nested tree\n */\nexport const createTree = (context) => {\n let matrixTree = {};\n let lastLevelKey = 0;\n let facet = PRIMARY;\n const nestFn = nest();\n const keys = [];\n const layoutMatrix = context._layoutMatrix;\n const primaryMatrix = context.primaryMatrix();\n const secondaryMatrix = context.secondaryMatrix();\n const { isTransposed, breakPage } = context.config();\n\n if (!isTransposed) {\n if (primaryMatrix.length === 0) {\n facet = PRIMARY;\n } else if (secondaryMatrix.length === 0) {\n facet = SECONDARY;\n } else {\n facet = primaryMatrix.length >= secondaryMatrix.length ? PRIMARY : SECONDARY;\n }\n if (primaryMatrix.length > 0) {\n for (let i = 0; i < primaryMatrix[0].length - 1; i++) {\n keys.push(i);\n }\n keys.push(primaryMatrix[0].length - 1);\n if (facet === SECONDARY || secondaryMatrix.length === 0) {\n lastLevelKey = primaryMatrix[0].length - 1;\n }\n }\n if (secondaryMatrix.length > 0) {\n const keyLength = primaryMatrix.length > 0 ? primaryMatrix[0].length : 0;\n for (let i = secondaryMatrix[0].length - 1; i > 0; i--) {\n keys.push(i + keyLength);\n }\n keys.push(keyLength);\n\n if (facet === PRIMARY) {\n lastLevelKey = keyLength;\n }\n } else {\n lastLevelKey = primaryMatrix.length > 0 ? primaryMatrix[0].length - 1 : 0;\n }\n keys.forEach((key) => {\n let counter = -1;\n return nestFn.key((d) => {\n counter++;\n return `${d[key].valueOf()}-${findInPage(counter, breakPage)}`;\n });\n });\n matrixTree = nestFn.entries(layoutMatrix);\n } else {\n if (primaryMatrix.length === 0) {\n facet = PRIMARY;\n } else if (secondaryMatrix.length === 0) {\n facet = SECONDARY;\n } else {\n facet = primaryMatrix.length >= secondaryMatrix.length ? PRIMARY : SECONDARY;\n }\n if (primaryMatrix.length > 0) {\n for (let i = 0; i < primaryMatrix.length - 1; i++) {\n keys.push(i);\n }\n // if (facet === PRIMARY) {\n keys.push(primaryMatrix.length - 1);\n // } else {\n if (facet === SECONDARY) {\n lastLevelKey = primaryMatrix.length - 1;\n }\n }\n if (secondaryMatrix.length > 0) {\n const primaryMatrixLength = primaryMatrix.length;\n for (let i = secondaryMatrix.length - 1; i > 0; i--) {\n keys.push(i + primaryMatrixLength);\n }\n // if (facet === SECONDARY) {\n keys.push(primaryMatrixLength);\n // }\n if (facet === PRIMARY) {\n lastLevelKey = primaryMatrixLength;\n }\n }\n keys.forEach((key) => {\n let counter = -1;\n return nestFn.key((d) => {\n counter++;\n return `${d[key].valueOf()}-${findInPage(counter, breakPage)}`;\n });\n });\n let newMatrix = [];\n newMatrix = layoutMatrix[0].map((col, colIndex) => layoutMatrix.map(row => row[colIndex]));\n matrixTree = nestFn.entries(newMatrix);\n }\n return { tree: matrixTree, lastLevelKey };\n};\n\n/**\n * Gives the min measues\n *\n * @param {boolean} isTransposed is column matrix\n * @param {Object} unitMeasures min measures to be given to cells\n * @return {Object} dimension min cell\n */\nexport const getMinMeasures = (isTransposed, unitMeasures) => {\n if (!isTransposed) {\n return {\n height: unitMeasures.height,\n width: 0\n };\n }\n return {\n height: 0,\n width: unitMeasures.width\n };\n};\n\n/**\n * Get the logical space from the tree\n *\n * @param {Node} item tree to be calculated\n * @param {number} measures width and height\n * @param {Array} minMeasures min measures for a cell\n * @param {Array} maxMeasure max measures for a col/row\n * @return {Object} dimension\n */\nexport const getLogicalSpace = (item, measures, minMeasures, maxMeasure = []) => {\n const { firstMeasure, secondMeasure } = measures;\n let firstMeasureValue = 0;\n let secondMeasureValue = 0;\n item.values.forEach((valueArray) => {\n let fMeasure = 0;\n let sMeasure = 0;\n valueArray.forEach((placeholder, colIndex) => {\n placeholder.logicalSpace(null);\n const space = placeholder.getLogicalSpace();\n sMeasure = Math.max(sMeasure, +space[secondMeasure], minMeasures[secondMeasure]);\n maxMeasure[colIndex] = Math.max(maxMeasure[colIndex] || 0, space[firstMeasure]);\n fMeasure += +maxMeasure[colIndex];\n });\n secondMeasureValue += sMeasure;\n firstMeasureValue = Math.max(firstMeasureValue, fMeasure);\n item.space = {\n [secondMeasure]: Math.ceil(secondMeasureValue),\n [firstMeasure]: Math.ceil(firstMeasureValue)\n };\n });\n return {\n [secondMeasure]: secondMeasureValue,\n [firstMeasure]: firstMeasureValue\n };\n};\n\n/**\n * Computes the logical spcae taken by the matrix tree\n *\n * @param {*} [item={}] tree to be viewed\n * @param {boolean} [isTransposed=false] is column matrix\n * @param {*} unitMeasures min measues for a cell\n * @param {Array} maxMeasure max measures for a col/row\n * @return {Object} logical space taken\n */\nexport const computeLogicalSpace = (item = {}, config, maxMeasures) => {\n const { isTransposed = false, unitMeasures } = config;\n const { firstMeasure, secondMeasure } = getMeasureInfo(isTransposed);\n const { values } = item;\n const minMeasures = getMinMeasures(isTransposed, unitMeasures);\n if (values[0].key) {\n const logicalSpace = { [firstMeasure]: 0, [secondMeasure]: 0 };\n\n values.forEach((valueItem) => {\n // Compute logical space for lowest level\n const space = computeLogicalSpace(valueItem, config, maxMeasures);\n // Set logical space for first measure\n logicalSpace[firstMeasure] = Math.max(logicalSpace[firstMeasure], space[firstMeasure],\n minMeasures[firstMeasure]);\n // Set logical space for second measure\n logicalSpace[secondMeasure] += +space[secondMeasure];\n });\n item.space = logicalSpace;\n return logicalSpace;\n }\n return getLogicalSpace(item, { firstMeasure, secondMeasure }, minMeasures, maxMeasures);\n};\n\n/**\n * Gives the space taken by a row\n *\n * @param {Array} row matrix array of rows\n * @return {Object} dimension of the row\n */\nexport const spaceTakenByRow = (row) => {\n let height = 0;\n let width = 0;\n row.forEach((col) => {\n const spaces = col.getLogicalSpace();\n height = Math.max(height, spaces.height);\n width += spaces.width;\n });\n return {\n width,\n height\n };\n};\n\n/**\n * Gives the space taken by a column\n *\n * @param {Array} matrix column matrix\n * @param {number} colIndex column index\n * @return {Object} dimension of the column\n */\nexport const spaceTakenByColumn = (matrix, colIndex) => {\n let height = 0;\n let width = 0;\n matrix.forEach((row) => {\n const col = row[colIndex];\n const spaces = col.getLogicalSpace();\n width = Math.max(width, spaces.width);\n height += spaces.height;\n });\n return {\n width,\n height\n };\n};\n\n/**\n * Creates different level matrices\n *\n * @param {Object} item matrix tree\n * @param {boolean} isTransposed is column matrix\n * @return {Object} matrix of each level\n */\nexport const createMatrixEachLevel = (item, isTransposed) => {\n if (item.values[0].key) {\n const arr = [];\n item.values.forEach((child) => {\n if (!isTransposed) {\n arr.push(...createMatrixEachLevel(child, isTransposed));\n } else {\n const eachLevel = createMatrixEachLevel(child, isTransposed);\n eachLevel.forEach((e, i) => {\n arr[i] = arr[i] || [];\n arr[i].push(...e);\n });\n }\n });\n item.matrix = arr;\n return arr;\n }\n if (!isTransposed) {\n item.matrix = item.values;\n } else {\n item.matrix = item.values[0].map((col, colIndex) => item.values.map(row => row[colIndex]));\n }\n return item.matrix;\n};\n\n/**\n * Breaks the matrix into two part\n *\n * @param {Array} matrix input matrix\n * @param {boolean} isTransposed is column matrix\n * @param {number} breakPointer point in matrix where it is to be broken\n * @return {Array} two broken matrix\n */\nexport const breakMatrix = (matrix, isTransposed, breakPointer) => {\n const primaryMatrix = [];\n const secondaryMatrix = [];\n if (isTransposed) {\n matrix.forEach((row, rowIndex) => {\n if (rowIndex >= breakPointer) {\n secondaryMatrix.push(row);\n } else {\n primaryMatrix.push(row);\n }\n });\n } else {\n matrix.forEach((row, rowIndex) => {\n row.forEach((column, columnIndex) => {\n if (columnIndex >= breakPointer) {\n secondaryMatrix[rowIndex] = secondaryMatrix[rowIndex] || [];\n secondaryMatrix[rowIndex].push(column);\n } else {\n primaryMatrix[rowIndex] = primaryMatrix[rowIndex] || [];\n primaryMatrix[rowIndex].push(column);\n }\n });\n });\n }\n return [primaryMatrix, secondaryMatrix];\n};\n\n/**\n * Distributed width returned\n *\n * @param {Object} context context for the width distibution\n * @return {number} distributed widths\n */\nexport const getDistributedWidth = (context, layoutConfig) => {\n const {\n availableWidth,\n width,\n row\n } = context;\n const {\n isDistributionEqual,\n isTransposed,\n distribution\n } = layoutConfig;\n let distSum = 0;\n if (distribution && distribution[0]) {\n distSum = distribution.reduce((t, n) => {\n t += n;\n return t;\n });\n }\n return row.map((col, colIndex) => {\n const space = col.getLogicalSpace().width;\n let distWidth = (space + (availableWidth - width) * (space / width));\n if (isTransposed) {\n if (distribution.length > 0) {\n distWidth = (availableWidth * distribution[colIndex] / distSum);\n } else if (isDistributionEqual || width === 0) {\n const rowLen = row.length;\n distWidth = (availableWidth / rowLen);\n }\n }\n return Math.floor(distWidth);\n });\n};\n\n/**\n * Distributeed heights returned\n *\n * @param {Object} context input for the height distribution\n * @return {Object} distribured heights\n */\nexport const getDistributedHeight = (context) => {\n let distSum = 0;\n let gutterSum = 0;\n let heightWithoutGutter = 0;\n const {\n isTransposed,\n distribution,\n availableHeight,\n height,\n isDistributionEqual,\n gutter,\n matrix,\n cIdx\n } = context;\n\n if (distribution && distribution[0] !== undefined) {\n distSum = distribution.reduce((t, n) => {\n t += n;\n return t;\n });\n }\n if (gutter && gutter[0] !== undefined) {\n gutterSum = gutter.reduce((t, n) => {\n t += n;\n return t;\n });\n }\n heightWithoutGutter = availableHeight - Math.floor(availableHeight * gutterSum);\n\n const colLen = matrix.length;\n return matrix.map((row, rIdx) => {\n const col = row[cIdx];\n const space = col.getLogicalSpace().height;\n let distHeight = (space + (heightWithoutGutter - height) * (space / height));\n\n if (!isTransposed) {\n if (distribution.length > 0 && colLen === distribution.length) {\n distHeight = (heightWithoutGutter * distribution[rIdx] / distSum);\n } else if (isDistributionEqual || context.height === 0) {\n distHeight = (heightWithoutGutter / colLen);\n }\n }\n return Math.floor(distHeight);\n });\n};\n\n/**\n *\n *\n * @param {*} arr\n * @param {*} beg\n * @param {*} end\n */\nexport const extraCellsRemover = (arr, beg, end) => arr.slice(beg, -end);\n\n/**\n * Creates matrix instancess\n *\n * @param {Array} [arr=[]] mutated arry\n * @param {number} depth depth of the tree\n * @param {Array} matrixInfo Details about the matrix(tree, etc) to be inserted\n * @param {boolean} layout Instance of layout\n */\nexport const createMatrixInstances = (arr = [], depth, matrixInfo, layout) => {\n const breakPointer = layout._breakPointer;\n const config = layout.config();\n const {\n isTransposed\n } = config;\n const {\n tree,\n layoutMatrix\n } = matrixInfo;\n\n if (depth === 0) {\n const brokenMatrix = breakMatrix(tree.matrix, isTransposed, breakPointer);\n arr.push({\n matrix: tree.matrix,\n primaryMatrix: brokenMatrix[0],\n secondaryMatrix: brokenMatrix[1],\n space: tree.space\n });\n return arr;\n }\n const nextLevel = depth - 1;\n tree.values.forEach((e) => {\n createMatrixInstances(arr, nextLevel, {\n tree: e,\n layoutMatrix\n }, layout);\n });\n return arr;\n};\n","import { mergeRecursive } from 'muze-utils';\n\nexport const PROPS = {\n config: {\n sanitization: (context, value) => mergeRecursive(context._config || {}, value)\n },\n maxMeasures: {},\n availableSpace: {},\n logicalSpace: {}\n};\n","import { PRIMARY } from '../enums/constants';\n/**\n *\n *\n */\nexport const defaultConfig = {\n distribution: [],\n classPrefix: 'muze',\n isDistributionEqual: true,\n unitMeasures: {\n height: 100,\n width: 100,\n border: 1\n },\n isTransposed: false,\n facet: PRIMARY,\n extraCellLengths: []\n};\n","import { mergeRecursive, generateGetterSetters } from 'muze-utils';\nimport {\n createTree,\n extraCellsRemover,\n combineMatrices,\n spaceTakenByColumn,\n getDistributedHeight,\n getDistributedWidth,\n spaceTakenByRow,\n computeLogicalSpace,\n createMatrixEachLevel,\n createMatrixInstances\n } from '../utils';\nimport { PROPS } from './props';\nimport { COLUMN_ROOT, ROW_ROOT, HEIGHT, WIDTH } from '../enums/constants';\nimport { defaultConfig } from './default-config';\n\n/**\n * This class used to create column / row matrix for GridLayout\n *\n * @class VisualMatrix\n */\nexport default class VisualMatrix {\n\n /**\n *Creates an instance of VisualMatrix.\n * @param {any} matrix Two set of matrices\n * @param {any} [config={}] Configuration for VisualMatrix\n * @memberof VisualMatrix\n */\n constructor (matrix, config = {}) {\n // Prepare matrices\n this._lastLevelKey = 0;\n this._primaryMatrix = matrix[0] || [];\n this._secondaryMatrix = matrix[1] || [];\n this._maxMeasures = [];\n this._availableSpace = {};\n\n // Store the config\n generateGetterSetters(this, PROPS);\n const defCon = Object.assign({}, this.constructor.defaultConfig());\n this.config(mergeRecursive(defCon, config));\n\n this._breakPointer = this.config().isTransposed ? matrix[0].length :\n (matrix[0].length > 0 ? matrix[0][0].length : 0);\n this._layoutMatrix = combineMatrices([matrix[0] || [], matrix[1] || []], this.config());\n\n // Create Tree\n this._tree = {\n key: this.config().isTransposed ? COLUMN_ROOT : ROW_ROOT,\n values: this.createTree()\n };\n this._logicalSpace = this.setLogicalSpace();\n }\n\n /**\n *\n *\n * @param {*} params\n * @returns\n * @memberof VisualMatrix\n */\n primaryMatrix (...params) {\n if (params.length) {\n return this;\n }\n return this._primaryMatrix;\n }\n\n /**\n *\n *\n * @param {*} params\n * @returns\n * @memberof VisualMatrix\n */\n secondaryMatrix (...params) {\n if (params.length) {\n return this;\n }\n return this._secondaryMatrix;\n }\n\n /**\n *\n *\n * @param {*} params\n * @returns\n * @memberof VisualMatrix\n */\n tree (...params) {\n if (params.length) {\n return this;\n }\n return this._tree;\n }\n\n /**\n *\n *\n * @static\n * @return\n * @memberof VisualMatrix\n */\n static defaultConfig () {\n return defaultConfig;\n }\n\n /**\n *\n *\n * @return\n * @memberof VisualMatrix\n */\n createTree () {\n const { tree, lastLevelKey } = createTree(this);\n this._lastLevelKey = lastLevelKey;\n return tree;\n }\n\n /**\n * Computes the logical space taken by the entire matrixTree\n *\n * @return {Object} Logical space taken\n * @memberof VisualMatrix\n */\n setLogicalSpace () {\n const {\n isTransposed\n } = this.config();\n const matrixTree = this.tree();\n createMatrixEachLevel(matrixTree, isTransposed);\n return computeLogicalSpace(matrixTree, this.config(), this.maxMeasures());\n }\n\n /**\n * Returns the space taken by visual matrix\n *\n * @return {Object} space taken by the matrix\n * @memberof VisualMatrix\n */\n getLogicalSpace () {\n return this.logicalSpace();\n }\n\n /**\n * Sets the provied space to the visual matrix\n *\n * @param {number} width width provided\n * @param {number} height height provided\n * @memberof VisualMatrix\n */\n setAvailableSpace (width, height) {\n this.availableSpace({ width, height });\n const tree = this.tree();\n const heightMeasures = this.populateMaxMeasures(HEIGHT, tree);\n const widthMeasures = this.populateMaxMeasures(WIDTH, tree);\n const depth = this.calculateDepth(widthMeasures, heightMeasures);\n\n this.viewableMatrix = this.createViewPortMatrix(depth);\n this.viewableMeasures = this.redistribute(this.viewableMatrix, width, height);\n return this;\n }\n\n /**\n * Populate the max measures in the array\n *\n * @param {Array} measures array to be filled with max measures\n * @param {Object} matrixTree matrix tree of visual matrix\n * @param {number} measure width or height\n * @param {number} [depth=0] depth of the tree that to be calculated\n * @memberof VisualMatrix\n */\n populateMaxMeasures (type, matrixTree, depth = 0, measures = []) {\n measures[depth] = Math.max(measures[depth] || 0, matrixTree.space[type]);\n if (matrixTree.values) {\n const childDepth = depth + 1;\n matrixTree.values.forEach((child) => {\n if (child.space) {\n measures = this.populateMaxMeasures(type, child, childDepth, measures);\n }\n });\n }\n return measures;\n }\n\n /**\n * Calculates the depth of the tree that can be viewed\n *\n * @param {Array} widthMeasures array of widths\n * @param {Array} heightMeasures array of heights\n * @return {number} depth of the tree\n * @memberof VisualMatrix\n */\n calculateDepth (widthMeasures, heightMeasures) {\n let i;\n let j;\n const { height, width } = this.availableSpace();\n\n for (i = 0; i < heightMeasures.length; i++) {\n if (heightMeasures[i] <= height) break;\n }\n for (j = 0; j < widthMeasures.length; j++) {\n if (widthMeasures[j] <= width) break;\n }\n return Math.min(widthMeasures.length - 1, Math.max(i, j));\n }\n\n /**\n * Redistributes the provied space to all cells\n *\n * @param {*} viewableMatrix current viewport matrix\n * @param {*} width provied width\n * @param {*} height provied height\n * @return {Object} current viewports matrixes with measures\n * @memberof VisualMatrix\n */\n redistribute (viewableMatrix, width, height) {\n let maxHeights = [];\n let maxWidths = [];\n const {\n isTransposed\n } = this.config();\n\n viewableMatrix.forEach((matrixInst) => {\n const matrix = matrixInst.matrix;\n const mWidth = 0;\n const mHeight = 0;\n const options = { mWidth, mHeight, matrix, width, height, maxHeights, maxWidths };\n const maxMeasures = isTransposed ? this.redistributeColumnWise(options) : this.redistributeRowWise(options);\n maxWidths = maxMeasures.maxWidths;\n maxHeights = maxMeasures.maxHeights;\n });\n\n const measurements = viewableMatrix.map((matrixInst, i) => {\n let heightMeasures;\n let columnMeasures;\n const cellDimOptions = { matrixInst, maxWidths, maxHeights, matrixIndex: i };\n const { heights, widths, rowHeights, columnWidths } = this.getCellDimensions(cellDimOptions);\n\n if (!isTransposed) {\n heightMeasures = [height, height];\n columnMeasures = widths;\n } else {\n heightMeasures = heights;\n columnMeasures = [width, width];\n }\n return {\n rowHeights: {\n primary: rowHeights[0],\n secondary: rowHeights[1]\n },\n columnWidths: {\n primary: columnWidths[0],\n secondary: columnWidths[1]\n },\n height: {\n primary: heightMeasures[0],\n secondary: heightMeasures[1]\n },\n width: {\n primary: columnMeasures[0],\n secondary: columnMeasures[1]\n }\n };\n });\n\n return measurements;\n }\n\n /**\n * Gets the viewable measures for the current viewable matrix\n *\n * @return {Object} Set of viewable measures\n * @memberof VisualMatrix\n */\n getViewableSpaces () {\n return this.viewableMeasures;\n }\n\n /**\n * Returns the matrix that can be viewed in the current viewport\n *\n * @return {Array} Set of matrices that can be viewed\n * @memberof VisualMatrix\n */\n getViewableData () {\n return this.viewableMatrix;\n }\n\n /**\n *\n *\n * @return\n * @memberof VisualMatrix\n */\n removeExtraCells () {\n const {\n isTransposed,\n extraCellLengths\n } = this.config();\n const matrix = this._layoutMatrix;\n const tree = mergeRecursive({}, this.tree());\n const begCellLen = extraCellLengths[0];\n const endCellLen = extraCellLengths[1] || Number.NEGATIVE_INFINITY;\n const layoutMatrix = !isTransposed ? extraCellsRemover(matrix, begCellLen, endCellLen) :\n matrix.slice(0).map(e => extraCellsRemover(e, begCellLen, endCellLen));\n\n tree.values = extraCellsRemover(tree.values, begCellLen, endCellLen);\n if (!isTransposed) {\n tree.matrix = extraCellsRemover(tree.matrix, begCellLen, endCellLen);\n } else {\n tree.matrix = tree.matrix.map(e => extraCellsRemover(e, begCellLen, endCellLen));\n }\n return {\n tree,\n layoutMatrix\n };\n }\n\n /**\n * Creates the viewport that can be viewed together\n *\n * @param {number} depth maxDepth that can be viewed in the viewport\n * @return {Array} Set of matrices that can be viewed\n * @memberof VisualMatrix\n */\n createViewPortMatrix (depth) {\n const arr = [];\n createMatrixInstances(arr, depth, this.removeExtraCells(), this);\n return arr;\n }\n\n /**\n * Distibutes the given space row wisely\n *\n * @param {Object} options Redistribution information\n * @memberof VisualMatrix\n */\n redistributeRowWise (options) {\n let cWidths = [];\n let rHeights = [];\n let mHeight = 0;\n const maxMeasures = this.maxMeasures();\n const {\n isDistributionEqual,\n distribution,\n isTransposed,\n gutter\n } = this.config();\n const { matrix, width, height, maxHeights, maxWidths } = options;\n\n mHeight = spaceTakenByColumn(matrix, this._lastLevelKey).height;\n\n const maxWidth = maxMeasures.reduce((t, n) => {\n t += n;\n return t;\n });\n if (maxWidth > 0) {\n cWidths = maxMeasures.map(space => space + (width - maxWidth) * (space / maxWidth));\n } else {\n cWidths = maxMeasures.map(() => 0);\n }\n rHeights = getDistributedHeight({\n matrix,\n cIdx: this._lastLevelKey,\n height: mHeight,\n availableHeight: height,\n isDistributionEqual,\n distribution,\n isTransposed,\n gutter\n });\n maxWidths.push(cWidths);\n maxHeights.push(rHeights);\n return { maxWidths, maxHeights };\n }\n\n /**\n * Distibutes the given space column wisely\n *\n * @param {Object} options Redistribution information\n * @memberof VisualMatrix\n */\n redistributeColumnWise (options) {\n let rHeights = [];\n const { matrix, width, maxHeights, maxWidths } = options;\n const borderWidth = this.config().unitMeasures.border;\n const mWidth = spaceTakenByRow(matrix[this._lastLevelKey]).width;\n const cWidths = getDistributedWidth({\n row: matrix[this._lastLevelKey],\n width: mWidth,\n availableWidth: width\n }, this.config());\n\n matrix.forEach((row, rIdx) => row.forEach((col, cIdx) => {\n const oldLogicalSpace = col.getLogicalSpace().height;\n col.setAvailableSpace(cWidths[cIdx] - borderWidth, oldLogicalSpace);\n rHeights[rIdx] = Math.max(rHeights[rIdx] || 0, col.getLogicalSpace().height);\n }));\n\n if (maxHeights.length > 0) {\n rHeights = rHeights.map((e, i) => Math.max(e, maxHeights[0][i]));\n }\n\n maxHeights.push(rHeights);\n\n for (let x = 0; x < maxHeights.length; x++) {\n maxHeights[x] = rHeights;\n }\n maxWidths.push(cWidths);\n return { maxHeights, maxWidths };\n }\n\n /**\n * Dispatch the calculated cell dimensions to all the cells\n *\n * @param {Object} options cell dimension information\n * @return {Object} row and column heights / widths\n * @memberof VisualMatrix\n */\n getCellDimensions (options) {\n let indices = [];\n let unitMeasures = [];\n let mainMeasures = [];\n let computedMeasures = [];\n const {\n isTransposed,\n unitMeasures: measures\n } = this.config();\n const borderWidth = measures.border;\n const { matrixInst, maxWidths, maxHeights, matrixIndex } = options;\n const matrix = matrixInst.matrix;\n const rowHeights = [[0], [0]];\n const columnWidths = [[0], [0]];\n const heights = [0, 0];\n const widths = [0, 0];\n const breakPointer = this._breakPointer;\n\n matrix.forEach((row, rIdx) => {\n row.forEach((cell, cIdx) => {\n const colHeight = maxHeights[matrixIndex][rIdx] || 0;\n const colWidth = maxWidths[matrixIndex][cIdx];\n\n if (!isTransposed) {\n cell.setAvailableSpace(colWidth, colHeight - borderWidth);\n indices = [rIdx, cIdx];\n unitMeasures = [columnWidths, rowHeights];\n mainMeasures = [widths, heights];\n computedMeasures = [colWidth, colHeight];\n } else {\n cell.setAvailableSpace(colWidth - borderWidth, colHeight);\n indices = [cIdx, rIdx];\n unitMeasures = [rowHeights, columnWidths];\n mainMeasures = [heights, widths];\n computedMeasures = [colHeight, colWidth];\n }\n\n if (indices[0] === 0 && indices[1] < breakPointer) {\n unitMeasures[0][0][indices[1]] = computedMeasures[0];\n mainMeasures[0][0] = (mainMeasures[0][0] || 0) + computedMeasures[0];\n } else if (indices[0] === 0 && indices[1] >= breakPointer) {\n unitMeasures[0][1][indices[1] - breakPointer] = computedMeasures[0];\n mainMeasures[0][1] = (mainMeasures[0][1] || 0) + computedMeasures[0];\n }\n if (indices[1] === this._lastLevelKey) {\n unitMeasures[1][0][indices[0]] = computedMeasures[1];\n unitMeasures[1][1][indices[0]] = computedMeasures[1];\n }\n });\n });\n return {\n heights,\n widths,\n rowHeights,\n columnWidths\n };\n }\n}\n\n","import { HEIGHT, WIDTH, COLUMN, ROW } from '../enums/constants';\n\n/**\n * Gets measurement for an instance of visual matrix\n *\n * @param {Array} matrix instance of visual matrix\n * @param {string} type height/width\n * @return {Object} Logical height/width of the matrix\n */\nexport function getMatrixMeasurement (matrix, type) {\n if (matrix) {\n return matrix.getLogicalSpace()[type];\n }\n return 0;\n}\n\n/**\n * Sets available space for an instance of visual matrix\n *\n * @param {Array} matrix instance of visual matrix\n * @param {string} type height/width\n * @param {number} value Value of measurement\n */\nexport function setMatrixMeasurement (matrix, type, value) {\n if (matrix) {\n const spaces = matrix.getLogicalSpace();\n if (value && spaces[type] !== value) {\n type === HEIGHT ? matrix.setAvailableSpace(spaces.width, value) :\n matrix.setAvailableSpace(value, spaces.height);\n }\n }\n}\n\n/**\n *\n *\n * @param {*} matrix\n * @param {*} widths\n * @param {*} heights\n */\nconst setAvailableSpace = (matrix, widths, heights) => {\n matrix.forEach((row, rIdx) => {\n row.forEach((placeholder, cIdx) => {\n placeholder.setAvailableSpace(widths[cIdx], heights[rIdx]);\n });\n });\n};\n\n/**\n *\n *\n * @param {*} layout\n * @param {*} matrix\n * @param {*} pointer\n * @returns\n */\nconst setViewSpaces = (layout, pointerType, viewSpaces) => {\n let pointer = layout.config()[`${pointerType}Pointer`];\n if (viewSpaces.length - 1 < pointer) {\n pointer = 0;\n layout.config({ [`${pointerType}Pointer`]: pointer });\n }\n return pointer;\n};\n\n/**\n * Computes the measurements of space for all matrices in the\n * layout\n *\n * @param {Object} layout Instance of grid layout\n * @return {Object} set of measurements for the layout\n */\nexport const computeLayoutMeasurements = (layout) => {\n const rowMatrix = layout.rowMatrix();\n const columnMatrix = layout.columnMatrix();\n const centerMatrix = layout.centerMatrix();\n const {\n width,\n height\n } = layout.measurement();\n const {\n border\n } = layout.config();\n const matrices = layout.matrices();\n const {\n top,\n bottom\n } = matrices;\n\n // Get width of row matrix\n const rowMatrixWidth = getMatrixMeasurement(rowMatrix, WIDTH);\n\n // Set width for column matrix\n\n // Border adjustment for each cell in the central matrix\n const borderWidth = border.width;\n\n const columnMatrixWidth = width - rowMatrixWidth - borderWidth;\n setMatrixMeasurement(columnMatrix, WIDTH, columnMatrixWidth);\n const columnViewPages = columnMatrix.getViewableSpaces();\n setViewSpaces(layout, COLUMN, columnViewPages);\n\n // Figuring out total space needed by current view space\n const columnViewSpace = columnViewPages[layout.config().columnPointer];\n\n // Getting height of column matrix\n const columnMatrixHeight = columnViewSpace.height.primary + columnViewSpace.height.secondary;\n\n // Set height for row matrix\n const rowMatrixHeight = height - columnMatrixHeight;\n\n setMatrixMeasurement(rowMatrix, HEIGHT, rowMatrixHeight);\n\n // Get heights of each cell of row matrix\n const rowViewableSpaces = rowMatrix.getViewableSpaces();\n setViewSpaces(layout, ROW, rowViewableSpaces);\n const rowHeights = [].concat(...rowViewableSpaces.map(e => e.rowHeights.primary));\n const rowWidthsPrimary = [].concat(...rowViewableSpaces.map(e => e.columnWidths.primary));\n const rowWidthsSecondary = [].concat(...rowViewableSpaces.map(e => e.columnWidths.secondary));\n const columnViewableSpaces = columnMatrix.getViewableSpaces();\n // Get widths of each cell of column matrix\n const columnWidths = [].concat(...columnViewableSpaces.map(e => e.columnWidths.primary));\n const columnHeightsPrimary = columnViewableSpaces[0].rowHeights.primary;\n\n const columnHeightsSecondary = [].concat(...columnViewableSpaces.map(e => e.rowHeights.secondary));\n\n // Setting the available space for each cell in the centre matrix\n centerMatrix.forEach((matrix, rIdx) => {\n matrix.forEach((placeholder, cIdx) => {\n placeholder.setAvailableSpace(columnWidths[cIdx] - borderWidth, rowHeights[rIdx] - borderWidth);\n });\n });\n setAvailableSpace(top[0], rowWidthsPrimary, columnHeightsPrimary);\n setAvailableSpace(top[2], rowWidthsSecondary, columnHeightsPrimary);\n setAvailableSpace(bottom[0], rowWidthsPrimary, columnHeightsSecondary);\n setAvailableSpace(bottom[2], rowWidthsSecondary, columnHeightsSecondary);\n\n return {\n rowMatrixHeight,\n rowMatrixWidth,\n columnMatrixHeight,\n columnMatrixWidth\n };\n};\n\n/**\n * Gets view matrices based on current pointers for row and column\n *\n * @param {Object} layout instance of layout\n * @param {number} rowPointer current row pointer\n * @param {number} columnPointer current column pointer\n * @return {Object} returns the view matrix and its relevant information\n */\nexport const getViewMatrices = (layout, rowPointer, columnPointer) => {\n const rowMatrix = layout.rowMatrix();\n const columnMatrix = layout.columnMatrix();\n const centerMatrix = layout.centerMatrix();\n const matrices = layout.matrices();\n const rowMatrices = rowMatrix.getViewableData();\n const columnMatrices = columnMatrix.getViewableData();\n const centralMatrixPointer = {\n row: 0,\n column: 0\n };\n\n for (let i = rowPointer - 1; i >= 0; i--) {\n const length = Math.max(rowMatrices[i].primaryMatrix.length,\n rowMatrices[i].secondaryMatrix.length);\n centralMatrixPointer.row += length;\n }\n /* istanbul ignore next */\n for (let i = columnPointer - 1; i >= 0; i--) {\n const matrix = columnMatrices[i];\n const { primaryMatrix, secondaryMatrix } = matrix;\n const length = Math.max(primaryMatrix[0] ? primaryMatrix[0].length : 0,\n secondaryMatrix[0] ? secondaryMatrix[0].length : 0);\n centralMatrixPointer.column += length;\n }\n\n matrices.top[1] = columnMatrices[columnPointer].primaryMatrix;\n matrices.bottom[1] = columnMatrices[columnPointer].secondaryMatrix;\n\n matrices.center[0] = rowMatrices[rowPointer].primaryMatrix;\n matrices.center[2] = rowMatrices[rowPointer].secondaryMatrix;\n\n const rowMatrixLen = Math.max(matrices.center[0].length, matrices.center[2].length);\n /* istanbul ignore next */\n const columnMatrixLen = Math.max(matrices.top[1][0] ? matrices.top[1][0].length : 0, matrices.bottom[1][0] ?\n matrices.bottom[1][0].length : 0);\n matrices.center[1] = centerMatrix.slice(centralMatrixPointer.row, centralMatrixPointer.row + rowMatrixLen)\n .map(matrix => matrix.slice(centralMatrixPointer.column, centralMatrixPointer.column + columnMatrixLen));\n\n return {\n matrices,\n rowPages: rowMatrices.length,\n columnPages: columnMatrices.length\n };\n};\n/**\n * Returns measurements of the cells of the current matrix\n *\n * @param {Object} layout instance of layout\n * @return {Object} returns the measurements for current view matrix\n */\nexport const getViewMeasurements = (layout) => {\n const rowMatrix = layout.rowMatrix();\n const columnMatrix = layout.columnMatrix();\n const {\n width,\n height\n } = layout.measurement();\n const {\n columnPointer,\n rowPointer\n } = layout.config();\n\n const rowMatrixWidth = rowMatrix.getViewableSpaces()[rowPointer].width;\n const { primary: leftWidth, secondary: rightWidth } = rowMatrixWidth;\n\n const columnMatrixHeight = columnMatrix.getViewableSpaces()[columnPointer].height;\n const { primary: topHeight, secondary: bottomHeight } = columnMatrixHeight;\n\n const centerHeight = height - (topHeight + bottomHeight);\n const centerWidth = width - (leftWidth + rightWidth);\n\n return {\n viewWidth: [leftWidth, centerWidth, rightWidth],\n viewHeight: [topHeight, centerHeight, bottomHeight]\n };\n};\n","/**\n * This file declares a table that can be extended to create a Datagrid, crosstab\n * and man other visualzations that require a tabular structure.\n */\n\nimport { getUniqueId } from 'muze-utils';\nimport GenericLayout from '../generic-layout';\nimport { DEFAULT_CONFIGURATION, DEFAULT_MEASUREMENTS } from './defaults';\nimport {\n renderMatrices\n} from './renderer';\nimport { generateVisualMatrices } from './layout-helper';\nimport { computeLayoutMeasurements, getViewMeasurements, getViewMatrices } from './computations';\n/**\n * This class is used to create a tabular structure that\n * can house charts and values.\n *\n * @class GridLayout\n */\nexport default class GridLayout extends GenericLayout {\n\n /**\n * Creates an instance of TableLayout.\n * @param {HTMLElement} matrices Set of upto 9 matrices containing the cells to be rendered\n * @param {HTMLElement} mountPoint DOM element/d3 selection where the layout is to be mounted\n * @param {Object} measurement The dimensions of the layout\n * @param {Object} config external configurations.\n * @memberof GenericLayout\n *\n * measurement : {\n * width : number => width of the container\n * height : number => height of the container\n * unitHeight : number => height of unit of the cells\n * unitWidth : number => width of unit of the cells\n * }\n *\n */\n constructor (matrices, mountPoint, measurement, config) {\n super(mountPoint, measurement, config);\n this.matrices(matrices);\n this.config(this.constructor.defaultConfig());\n this._layoutId = getUniqueId();\n }\n\n /**\n * Returns initial set of measurements for the grid layout\n *\n * @static\n * @return {Object} Returns initial set of measurements\n * @memberof GridLayout\n */\n static defaultMeasurement () {\n return DEFAULT_MEASUREMENTS;\n }\n\n /**\n * Returns initialconfiguration for grid layout\n *\n * @static\n * @return {Object} Returns initial configuration for grid layout\n * @memberof GridLayout\n */\n static defaultConfig () {\n return DEFAULT_CONFIGURATION;\n }\n\n /**\n * This function is used to return an instance of GridLayout\n *\n * @return {GridLayout} Instance of grid layout.\n * @static\n * @memberof GridLayout\n */\n static create () {\n return new GridLayout(null, null, this.defaultMeasurement(), this.defaultConfig());\n }\n\n /**\n * Sets/Gets the matrices for the layout\n *\n * @param {Array} matrices Set of matrices\n * @return {Object} Getter/Setter\n * @memberof GridLayout\n */\n matrices (matrices) {\n if (matrices) {\n this._matrices = generateVisualMatrices(this, matrices);\n return this;\n }\n return super.matrices(matrices);\n }\n\n /**\n * Triggers the computations for the layout based on the matrices available\n * This causes a reflow in the entire layout system.\n *\n * @return {Object} Layout instance\n * @memberof GridLayout\n */\n triggerReflow () {\n computeLayoutMeasurements(this);\n this.setViewInformation();\n return this;\n }\n\n /**\n *\n *\n * @param {*} type\n * @param {*} pageNumber\n * @returns\n * @memberof GridLayout\n */\n gotoPage (type, pageNumber) {\n const pageType = type.toLowerCase();\n const { viewMatricesInfo } = this.getViewInformation();\n const totalPages = viewMatricesInfo[`${pageType}Pages`];\n const pointer = Math.min(Math.max(1, pageNumber), totalPages);\n this.config({\n [`${pageType}Pointer`]: pointer - 1\n });\n this.setViewInformation();\n this.renderGrid();\n return this;\n }\n\n /**\n *\n *\n * @param {*} type\n * @returns\n * @memberof GridLayout\n */\n pages (type) {\n const { viewMatricesInfo } = this.getViewInformation();\n const pageType = type.toLowerCase();\n return {\n totalPages: viewMatricesInfo[`${pageType}Pages`],\n currentPage: this.config()[`${pageType}Pointer`] + 1\n };\n }\n\n /**\n *\n *\n * @returns\n * @memberof GridLayout\n */\n setViewInformation () {\n const {\n rowPointer,\n columnPointer,\n border\n } = this.config();\n const viewMatricesInfo = getViewMatrices(this, rowPointer, columnPointer);\n const layoutDimensions = getViewMeasurements(this);\n layoutDimensions.border = border;\n this.viewInfo = {\n viewMatricesInfo,\n layoutDimensions\n };\n return this;\n }\n\n /**\n *\n *\n * @returns\n * @memberof GridLayout\n */\n getViewInformation () {\n return this.viewInfo;\n }\n\n /**\n * Renders the layout\n *\n * @return {Object} current instance\n * @memberof GridLayout\n */\n renderGrid (mountPoint) {\n this.mountPoint(mountPoint);\n if (!this.mountPoint()) {\n return this;\n }\n const {\n viewMatricesInfo,\n layoutDimensions\n } = this.getViewInformation();\n // Render matrices\n renderMatrices(this, viewMatricesInfo.matrices, layoutDimensions);\n return this;\n }\n}\n","import VisualMatrix from '../visual-matrix/visual-matrix';\n\n/**\n * Generates the set of visual matrices for pagination and layouting algorithms\n *\n * @param {*} context\n * @param {*} matrices\n * @returns\n */\nexport const generateVisualMatrices = (context, matrices) => {\n // Set of matrices for layout is generated starting with the left matrix\n let leftMatrix = [];\n let rightMatrix = [];\n let topMatrix = [];\n let bottomMatrix = [];\n let begColCells;\n let endColCells;\n const {\n isRowSizeEqual,\n isColumnSizeEqual,\n gutterSpace,\n distribution,\n border,\n breakPage\n } = context.config();\n const {\n minUnitHeight,\n minUnitWidth\n } = context.measurement();\n const { top, center, bottom } = matrices;\n const [topLeft, topColumns, topRight] = top;\n const [leftRows, valueMatrix, rightRows] = center;\n const [bottomLeft, bottomColumns, bottomRight] = bottom;\n\n if (leftRows.length > 0) {\n // If no left matrix is present, context will be empty\n leftMatrix = [...topLeft, ...leftRows, ...bottomLeft];\n }\n if (rightRows.length > 0) {\n // If no right matrix is present, context will be empty\n rightMatrix = [...topRight, ...rightRows, ...bottomRight];\n }\n if (topColumns.length > 0 && topColumns[0].length > 0) {\n // If no top matrix is present, context will be empty\n topMatrix = topColumns.map((d, i) => [...topLeft[i], ...d, ...topRight[i]]);\n }\n if (bottomColumns.length > 0 && bottomColumns[0].length > 0) {\n // If no bottom matrix is present, context will be empty\n bottomMatrix = bottomColumns.map((d, i) => [...bottomLeft[i], ...d, ...bottomRight[i]]);\n }\n context.rowMatrix(new VisualMatrix([leftMatrix, rightMatrix], {\n isDistributionEqual: isRowSizeEqual,\n distribution: distribution.rows,\n gutter: gutterSpace.rows,\n unitMeasures: {\n width: minUnitWidth,\n height: minUnitHeight,\n border: border.width\n },\n breakPage: breakPage.rows.map(e => e + Math.max(topLeft.length, topRight.length)),\n extraCellLengths: [topLeft.length, bottomLeft.length]\n }));\n\n if (topLeft.length > 0) {\n begColCells = topLeft[0].length;\n } else {\n begColCells = bottomLeft.length > 0 ? bottomLeft[0].length : 0;\n }\n\n if (topRight.length > 0) {\n endColCells = topRight[0].length;\n } else {\n endColCells = bottomRight.length > 0 ? bottomRight[0].length : 0;\n }\n\n context.columnMatrix(new VisualMatrix([topMatrix, bottomMatrix], {\n isDistributionEqual: isColumnSizeEqual,\n distribution: distribution.columns,\n gutter: gutterSpace.columns,\n isTransposed: true,\n unitMeasures: {\n width: minUnitWidth,\n height: minUnitHeight,\n border: border.width\n },\n breakPage: breakPage.columns,\n extraCellLengths: [begColCells, endColCells]\n }));\n context.centerMatrix(valueMatrix);\n\n return matrices;\n};\n","import { ERROR_MSG } from 'muze-utils';\n/**\n * An Interface to be implemented if the transaction support is necessary. This class ensures reactivity to\n * global properties.\n */\nexport default class TransactionSupport {\n /**\n * Property accessor for data member of the class. Data is passed to the system by calling this method.\n */\n data () {\n throw new Error(ERROR_MSG.INTERFACE_IMPl);\n }\n\n /**\n * Property accessor for width of the class. Width is passed as an integer.\n */\n width () {\n throw new Error(ERROR_MSG.INTERFACE_IMPl);\n }\n\n /**\n * Property accessor for height of the class. Height is passed as an integer.\n */\n height () {\n throw new Error(ERROR_MSG.INTERFACE_IMPl);\n }\n\n /**\n * Property accessor for config of the class. Config is passed as an object.\n */\n config () {\n throw new Error(ERROR_MSG.INTERFACE_IMPl);\n }\n}\n","import { TOP, BOTTOM, LEFT, TITLE, SUB_TITLE, GROUP, LAYOUT, LEGEND } from '../constants';\n\n/**\n *\n *\n * @param {*} context\n * @returns\n */\nexport const arrangeComponents = (context) => {\n const legendConfig = context.config().legend;\n const titleConfig = context.title()[1];\n const subtitleConfig = context.subtitle()[1];\n const titleLayouts = {\n [`${TOP}-${TOP}`]: [TITLE, SUB_TITLE, GROUP],\n [`${BOTTOM}-${BOTTOM}`]: [GROUP, SUB_TITLE, TITLE],\n [`${TOP}-${BOTTOM}`]: [TITLE, GROUP, SUB_TITLE],\n [`${BOTTOM}-${TOP}`]: [SUB_TITLE, GROUP, TITLE]\n };\n const legendLayouts = [\n [LEGEND, LAYOUT],\n [LAYOUT, LEGEND]\n ];\n const titlePosition = titleConfig.position || TOP;\n const subtitlePosition = subtitleConfig.position || TOP;\n\n return {\n headers: titleLayouts[`${titlePosition}-${subtitlePosition}`],\n legends: legendConfig.position === LEFT || legendConfig.position === TOP ?\n legendLayouts[0] : legendLayouts[1]\n };\n};\n","/**\n * Flag to specify whether direction is vertical.\n */\nexport const MARGIN = 'margin';\nexport const LEFT = 'left';\nexport const RIGHT = 'right';\nexport const BOTTOM = 'bottom';\nexport const TOP = 'top';\nexport const SPACE_FIXER = 'spaceFixer';\nexport const CLASSPREFIX = 'muze';\nexport const VERTICAL_ALIGN = 'verticalAlign';\nexport const TEXT_ALIGN = 'textAlign';\nexport const IS_OFFSET = 'isOffset';\nexport const MIDDLE = 'middle';\nexport const BASELINE = 'baseline';\nexport const SHOW = 'show';\nexport const CENTER = 'center';\nexport const TEXT = 'text';\nexport const HEADER = 'header';\nexport const HEIGHT = 'height';\nexport const WIDTH = 'width';\nexport const DATA = 'data';\nexport const AXES = 'axes';\nexport const FACET_BY_FIELDS = 'facetByFields';\nexport const FIELDS = 'fields';\nexport const TRANSFORM = 'transform';\nexport const LAYER_DEF = 'layerDef';\nexport const CONFIG = 'config';\nexport const DETAIL_FIELDS = 'detailFields';\n\nexport const TEXT_CELL = 'text-cell';\nexport const AXIS_CELL = 'axis-cell';\nexport const GEOM_CELL = 'geom-cell';\nexport const BLANK_CELL = 'blank-cell';\n","// eneum to refer to simple cell\nexport const SIMPLE = 'simple';\n// eneum to refer to header cell\nexport const TEXT = 'text';\n// enum to refer to axis cell\nexport const AXIS = 'axis';\n// enum to refer to visual cell\nexport const GEOM = 'geom';\n// enum to refer blank cell\nexport const BLANK = 'blank';\n","import {\n ERROR_MSG,\n getUniqueId,\n mergeRecursive\n} from 'muze-utils';\nimport { SIMPLE } from './enums/cell-type';\n\n/**\n * This file declares a class that is used as an interface to create new\n * SimpleCell elements.\n * @module SimpleCell\n */\n/**\n * Base class for all table cells.\n *\n * @interface\n * @class SimpleCell\n */\nclass SimpleCell {\n\n /**\n * Creates an instance of SimpleCell.\n *\n * @param {*} config The input configuration.\n * @memberof SimpleCell\n */\n constructor (config) {\n this._id = getUniqueId();\n\n const defConfig = mergeRecursive({}, this.constructor.defaultConfig());\n this._config = mergeRecursive(defConfig, config || {});\n\n this._mount = null;\n }\n\n /**\n * Returns the type of the placehlder.\n *\n * @readonly\n * @memberof SimpleCell\n */\n get type () {\n return SIMPLE;\n }\n\n /**\n * Returns the type of the placehlder.\n *\n * @readonly\n * @memberof SimpleCell\n * @return {Object} Default config for the placeholder\n */\n static defaultConfig () {\n return {};\n }\n\n /**\n * Returns the value contained by the SimpleCell.\n *\n * @memberof SimpleCell\n */\n valueOf () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Returns a unique identifier for the instance used\n * to control selective rendering.\n *\n * @memberof SimpleCell\n */\n id () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Returns a serialized representation of the instance.\n *\n * @memberof SimpleCell\n */\n serialize () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Returns an object with width and height fields\n * specifying the space taken up by this metod.\n *\n * @memberof SimpleCell\n */\n getLogicalSpace () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Method used to set the space available to render the SimpleCell\n *\n * @param {number} width The available width.\n * @param {number} height The available height.\n * @memberof SimpleCell\n */\n setAvailableSpace () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Render the SimpleCell inthe supplied mount point.\n *\n * @param {HTMLElement} mount The mount point to render in.\n * @memberof SimpleCell\n */\n render () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Render the SimpleCell inthe supplied mount point.\n *\n * @param {HTMLElement} mount The mount point to render in.\n * @memberof SimpleCell\n */\n remove () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n}\n\nexport default SimpleCell;\n","/**\n * This file exports variables that are used as defaults for\n * the placeholders\n */\nimport * as CONSTANTS from './constants';\n\n /**\n * Default Configuration for the cells\n * @return {Object} Default configuration\n */\nexport const DEFAULT_CONFIG = {\n [CONSTANTS.MARGIN]: {\n [CONSTANTS.LEFT]: 0,\n [CONSTANTS.RIGHT]: 0,\n [CONSTANTS.TOP]: 0,\n [CONSTANTS.BOTTOM]: 0\n },\n [CONSTANTS.SPACE_FIXER]: 2,\n [CONSTANTS.IS_OFFSET]: false,\n [CONSTANTS.VERTICAL_ALIGN]: CONSTANTS.TOP,\n [CONSTANTS.TEXT_ALIGN]: CONSTANTS.CENTER,\n [CONSTANTS.SHOW]: true\n};\n","import { mergeRecursive } from 'muze-utils';\nimport { GEOM, TEXT, AXIS, BLANK } from './enums/cell-type';\n\nconst DEFAULT_PROPS = {\n mount: {},\n availHeight: {},\n availWidth: {},\n config: {\n sanitization: (context, value) => mergeRecursive(context._config, value)\n },\n logicalSpace: {},\n source: {}\n};\n\nconst geomProps = {\n data: {},\n caption: {},\n config: {},\n axes: {\n sanitization: (context, value) => Object.assign(context._axes, value)\n },\n facetByFields: {},\n fields: {},\n transform: {},\n layerDef: {},\n detailFields: {}\n};\n\nexport const PROPS = {\n [TEXT]: DEFAULT_PROPS,\n [GEOM]: mergeRecursive(geomProps, DEFAULT_PROPS),\n [AXIS]: DEFAULT_PROPS,\n [BLANK]: DEFAULT_PROPS\n};\n","/**\n * This file declares a class that represents a table cell\n * used to house an axis.\n * @module VisualCell\n */\nimport { selectElement, makeElement, generateGetterSetters } from 'muze-utils';\nimport { CLASSPREFIX, HEIGHT, WIDTH, AXIS_CELL } from './enums/constants';\nimport SimpleCell from './simple-cell';\nimport { DEFAULT_CONFIG } from './enums/defaults';\nimport { AXIS } from './enums/cell-type';\nimport { PROPS } from './props';\n\n/**\n * Computes the logical space of the an axis instance within an axis cell\n *\n * @param {Object} context Required to get the needed parameters to compute axis space\n * @return {Object} Returns the logical space for axis\n */\nconst computeAxisSpace = (context) => {\n let logicalWidth;\n let logicalHeight;\n const axis = context.source();\n const {\n spaceFixer,\n margin\n } = context.config();\n const {\n width,\n height\n } = axis.getLogicalSpace();\n const {\n show\n } = axis.config();\n if (show === true) {\n logicalHeight = Math.floor(height + margin.top + margin.bottom + spaceFixer);\n logicalWidth = Math.floor(width + margin.left + margin.right + spaceFixer);\n } else {\n [logicalWidth, logicalHeight] = [width, height];\n }\n return {\n width: logicalWidth,\n height: logicalHeight\n };\n};\n\n/**\n * Represents an axis cell.\n *\n * @class Axis\n */\nclass AxisCell extends SimpleCell {\n\n /**\n * Creates an instance of AxisCell.\n *\n * @param {Object} config The input config.\n * @memberof AxisCell\n */\n constructor (config) {\n super(config);\n\n this._axis = null;\n this._availHeight = null;\n this._availWidth = null;\n this._logicalSpace = null;\n\n generateGetterSetters(this, PROPS[AXIS]);\n }\n\n /**\n * return the type pf SimpleCell cell.\n *\n * @readonly\n * @memberof AxisCell\n */\n get type () {\n return AXIS;\n }\n\n /**\n * This method return the value conatined by this SimpleCell.\n *\n * @return {SimpleAxis | ColorAxis} Instance of SimpleAxis or ColorAxis.\n * @memberof AxisCell\n */\n valueOf () {\n return this.source().id;\n }\n\n /**\n * This method return the unique identififer of the axis\n *\n * @return {string} Id of the axis.\n * @memberof AxisCell\n */\n get id () {\n return this._id;\n }\n\n /**\n * Retrns the serialized representation of this cell.\n *\n * @return {Object}Object with serializable props.\n * @memberof AxisCell\n */\n serialize () {\n return {\n type: AXIS,\n axis: this.source().serialize()\n };\n }\n\n /**\n * return the default configuration for the text cell\n *\n * @static\n * @return {Object} Default configuration of the cell\n * @memberof AxisCell\n */\n static defaultConfig () {\n return DEFAULT_CONFIG;\n }\n\n /**\n * return the space taken up by an axis element in the dom.\n *\n * @return {Object} Object with width and height fields.\n * @memberof AxisCell\n */\n getLogicalSpace () {\n if (!this.logicalSpace()) {\n this.logicalSpace(computeAxisSpace(this));\n }\n return this.logicalSpace();\n }\n\n /**\n * This method is used to set the space availiable to render\n * the SimpleCell.\n *\n * @param {number} width The width of SimpleCell.\n * @param {number} height The height of SimpleCell.\n * @return {Instance} Returns current Instance\n * @memberof AxisCell\n */\n setAvailableSpace (width, height) {\n this.availWidth(width);\n this.availHeight(height);\n const {\n margin,\n isOffset\n } = this.config();\n this.source().setAvailableSpace(width, height, margin, isOffset);\n this.logicalSpace(null);\n this.source().logicalSpace(null);\n return this;\n }\n\n /**\n * This method is used to render the axis inside the axis cell.\n *\n * @param {HTMLElement} mount The mount point.\n * @return {Selection} node where axis mounted\n * @memberof AxisCell\n */\n /* istanbul ignore next */render (mount) {\n if (!mount) {\n return this;\n }\n const axis = this.source();\n const availHeight = this.availHeight();\n const availWidth = this.availWidth();\n const {\n margin\n } = this.config();\n const {\n top,\n bottom,\n left,\n right\n } = margin;\n const {\n show\n } = axis.config();\n const wrapperDiv = makeElement(selectElement(mount), 'div', [this], `${CLASSPREFIX}-${AXIS_CELL}`);\n const selection = makeElement(wrapperDiv, 'svg', [1], `${CLASSPREFIX}-axis-container`);\n\n this.mount(mount);\n if (availWidth === 0 || !availWidth) {\n selection.attr(WIDTH, `${0}px`);\n }\n if (availHeight === 0 || !availHeight) {\n selection.attr(HEIGHT, `${0}px`);\n }\n wrapperDiv.style(WIDTH, `${show ? availWidth : 0}px`)\n .style(HEIGHT, `${show ? availHeight : 0}px`)\n .style('margin-top', top)\n .style('margin-bottom', bottom)\n .style('margin-left', left)\n .style('margin-right', right);\n\n axis.mount(selection.node());\n return selection;\n }\n\n /**\n * Disposes the cell\n *\n * @return {Instance} Current instance of AxisCell\n * @memberof AxisCell\n */\n remove () {\n this.source() && this.source().remove();\n this.mount() && this.mount().remove();\n return this;\n }\n}\n\nexport default AxisCell;\n\n","/**\n * This file declares a class that represents a BLANK element in a table.\n * @module VisualCell\n */\nimport {\n selectElement,\n makeElement,\n applyStyle,\n generateGetterSetters\n } from 'muze-utils';\nimport SimpleCell from './simple-cell';\nimport { CLASSPREFIX, BLANK_CELL } from './enums/constants';\nimport { BLANK } from './enums/cell-type';\nimport { DEFAULT_CONFIG } from './enums/defaults';\nimport { PROPS } from './props';\n\n/**\n * Represents a table haeder.\n *\n * @class BLANK\n */\nclass BlankCell extends SimpleCell {\n\n /**\n * Creates an instance of BLANK.\n * @param {Object} config The input configuration.\n * @memberof BLANK\n */\n constructor (config) {\n super(config);\n\n generateGetterSetters(this, PROPS[BLANK]);\n }\n\n /**\n * return the type pf SimpleCell cell.\n *\n * @readonly\n * @memberof BlankCell\n */\n get type () {\n return BLANK;\n }\n\n /**\n * This method return the value contained by this SimpleCell.\n *\n * @return {string} The text value contained by this cell.\n * @memberof BlankCell\n */\n valueOf () {\n return this.id;\n }\n\n /**\n * return the default configuration for the text cell\n *\n * @static\n * @return {Object} Default configuration of the cell\n * @memberof BlankCell\n */\n static defaultConfig () {\n return DEFAULT_CONFIG;\n }\n\n /**\n * This method is used to return a unique identifier for\n * the BLANK cell.\n *\n * @return {string} The unique identifier for the BLANK.\n * @memberof BlankCell\n */\n get id () {\n return this._id;\n }\n\n /**\n * This method is used to obtain a serialized representation of this instance.\n *\n * @return {Object} Object with serilizable props.\n * @memberof BLANK\n */\n serialize () {\n return {\n type: BLANK\n };\n }\n\n /**\n * This method return the space taken up\n * by the text with the style applied.\n *\n * @return {Object} width and height taken up by the text.\n * @memberof BLANK\n */\n getLogicalSpace () {\n if (!this.logicalSpace()) {\n return {\n width: this.width || 0,\n height: this.height || 0\n };\n }\n return this.logicalSpace();\n }\n\n /**\n * This method is used to set the available space.\n *\n * @param {number} width The available width.\n * @param {number} height The available height.\n * @return {Instance} Returns current Instance\n * @memberof BlankCell\n */\n setAvailableSpace (width, height) {\n this.availWidth(width);\n this.availHeight(height);\n this.logicalSpace(null);\n return this;\n }\n\n /**\n * This method is used to render the BLANK cell inside\n * the provided mount point.\n *\n * @param {HTMLElement} mount The mount point for this cell.\n * @return {Instance} Returns current Instance\n * @memberof BLANK\n */\n /* istanbul ignore next */render (mount) {\n if (mount) {\n const { style } = this.config();\n // append span element to mount point\n this.mount(mount);\n const container = selectElement(mount);\n const elem = makeElement(container, 'div', [this.id]);\n elem.classed(`${CLASSPREFIX}-${BLANK_CELL}`, true);\n elem.style('width', `${this.availWidth()}px`);\n elem.style('height', `${this.availHeight()}px`);\n elem.html('');\n // apply style on the returned element\n if (style) {\n applyStyle(elem, style);\n }\n } return this;\n }\n\n /**\n * Removes the cell(Disposal)\n *\n * @return {Instance} Returns current Instance\n * @memberof BlankCell\n */\n remove () {\n this.mount() && this.mount().remove();\n return this;\n }\n }\nexport default BlankCell;\n","/**\n * This file declares a class that represents a Text element in a table.\n * @module VisualCell\n */\n\nimport {\n selectElement,\n makeElement,\n getSmartComputedStyle,\n generateGetterSetters\n} from 'muze-utils';\nimport SimpleCell from './simple-cell';\nimport { TEXT } from './enums/cell-type';\nimport { PROPS } from './props';\nimport { DEFAULT_CONFIG } from './enums/defaults';\nimport { CLASSPREFIX, TOP, BOTTOM, LEFT, RIGHT, HEADER, WIDTH, TEXT_CELL } from './enums/constants';\nimport './text-cell.scss';\n\n/**\n* Computes the Logical Space for the text\n*\n* @param {Object} context Required to get the needed parameters to compute text space\n* @return {Object} Logical space taken up by text\n* @memberof TextCell\n*/\nconst computeTextSpace = (context) => {\n const { labelManager } = context.dependencies();\n const space = labelManager.getOriSize(context.source());\n const {\n margin,\n show\n } = context.config();\n\n labelManager.setStyle(context._computedStyle);\n if (show) {\n return {\n width: space.width + margin.left + margin.right + context._minTickDiff.width,\n height: space.height + margin.top + margin.bottom + context._minTickDiff.height\n };\n } return {\n width: 0,\n height: 0\n };\n};\n\n/**\n * Represents a table haeder.\n *\n * @class Text\n */\nclass TextCell extends SimpleCell {\n\n /**\n * Creates an instance of Text.\n * @param {Object} config The input configuration.\n * @param {string} dependencies Dependencies for the class(labelManager)\n * @memberof Text\n */\n constructor (config, dependencies) {\n super(config);\n\n this._dependencies = dependencies;\n this._className = this._config.className ||\n (this._config.type === HEADER ? `${CLASSPREFIX}-${HEADER}-cell` : `${CLASSPREFIX}-${TEXT}-cell`);\n this._computedStyle = getSmartComputedStyle(selectElement('body'), this._className);\n this._dependencies.labelManager.setStyle(this._computedStyle);\n this._minTickDiff = this._dependencies.labelManager.getOriSize('WW');\n\n generateGetterSetters(this, PROPS[TEXT]);\n }\n\n /**\n * return the type pf SimpleCell cell.\n *\n * @readonly\n * @memberof TextCell\n */\n get type () {\n return TEXT;\n }\n\n /**\n * This method return the value contained by this SimpleCell.\n *\n * @return {string} The text value contained by this cell.\n * @memberof TextCell\n */\n valueOf () {\n return this.source();\n }\n\n /**\n * This method is used to return a unique identifier for\n * the Text cell.\n *\n * @return {string} The unique identifier for the Text.\n * @memberof TextCell\n */\n get id () {\n return this._id;\n }\n\n /**\n * Returns the dependencies of the instance\n *\n * @return {Object} Dependencies needed by the class\n * @memberof TextCell\n */\n dependencies () {\n return this._dependencies;\n }\n\n /**\n * This method is used to obtain a serialized representation of this instance.\n *\n * @return {Object} Object with serilizable props.\n * @memberof TextCell\n */\n serialize () {\n return {\n text: this.source(),\n type: TEXT\n };\n }\n\n /**\n * return the default configuration for the text cell\n *\n * @static\n * @return {Object} Default configuration of the cell\n * @memberof TextCell\n */\n static defaultConfig () {\n return DEFAULT_CONFIG;\n }\n\n /**\n * This method return the space taken up\n * by the text with the style applied.\n *\n * @return {Object} width and height taken up by the text.\n * @memberof Text\n */\n getLogicalSpace () {\n if (!this.logicalSpace()) {\n this.logicalSpace(computeTextSpace(this));\n }\n return this.logicalSpace();\n }\n\n /**\n * This method is used to set the available space.\n *\n * @param {number} width The available width.\n * @param {number} height The available height.\n * @return {Instance} Returns current Instance\n * @memberof TextCell\n */\n setAvailableSpace (width, height) {\n this.availWidth(width);\n this.availHeight(height);\n this.logicalSpace(null);\n return this;\n }\n\n /**\n * This method is used to render the Text cell inside\n * the provided mount point.\n *\n * @param {HTMLElement} mount The mount point for this cell.\n * @return {Instance} Returns current Instance\n * @memberof Text\n */\n render (mount) {\n const availWidth = this.availWidth();\n const {\n margin,\n show,\n verticalAlign,\n textAlign\n } = this.config();\n\n this.mount(mount);\n if (show) {\n const container = selectElement(mount);\n const elem = makeElement(container, 'div', [this.id], `${CLASSPREFIX}-${TEXT_CELL}`);\n\n container.style('vertical-align', verticalAlign);\n elem.classed(this._className, true);\n // apply style on the returned element\n elem.style(WIDTH, availWidth ? `${availWidth}px` : '100%');\n [TOP, BOTTOM, LEFT, RIGHT].forEach((type) => {\n elem.style(`padding-${type}`, `${margin[type]}px`);\n });\n elem.style('text-align', textAlign);\n elem.style('display', 'inline');\n // set the text as the innerHTML\n elem.html(this.source());\n }\n return this;\n }\n\n /**\n * Disposes the cell\n *\n * @return {Instance} Returns current Instance\n * @memberof TextCell\n */\n remove () {\n this.mount() && this.mount().remove();\n return this;\n }\n }\n\nexport default TextCell;\n","/**\n * This file declares a class that is used to represent a table cell\n * that houses a visual unit.\n * @module VisualCell\n */\n\nimport { selectElement, makeElement, generateGetterSetters } from 'muze-utils';\nimport SimpleCell from './simple-cell';\nimport { GEOM } from './enums/cell-type';\nimport { PROPS } from './props';\nimport {\n CLASSPREFIX, HEIGHT, WIDTH, DATA, AXES, FACET_BY_FIELDS, FIELDS, TRANSFORM, LAYER_DEF, CONFIG, GEOM_CELL,\n DETAIL_FIELDS\n} from './enums/constants';\nimport { DEFAULT_CONFIG } from './enums/defaults';\n\n/**\n * Calculates the logical space of the cell\n *\n * @param {Object} context Required to get the needed parameters to compute unit space\n * @return {Object} Logical space taken up by the unit\n * @memberof GeomCell\n */\nconst computeGeomSpace = (context) => {\n const config = context.source().config();\n const { width, height } = config;\n return {\n width: Math.ceil(width),\n height: Math.ceil(height + context.getCaptionSpace().height)\n };\n};\n\n /**\n * This class represents a SimpleCell for visual unit.\n *\n * @class GeomCell\n */\nclass GeomCell extends SimpleCell {\n\n /**\n * Creates an instance of GeomCell.\n * @param {Object} config The input configuration.\n * @memberof GeomCell\n */\n constructor (config) {\n super(config);\n\n this._unit = null;\n this._layers = null;\n this._axes = {};\n this._datamodel = {};\n this._facetByFields = {};\n this._fields = null;\n this._transform = null;\n this._caption = null;\n\n generateGetterSetters(this, PROPS[GEOM]);\n }\n\n /**\n * return the type pf SimpleCell cell.\n *\n * @readonly\n * @memberof GeomCell\n */\n get type () {\n return GEOM;\n }\n\n /**\n * This method return the value contained by this cell.\n *\n * @return {VisualUnit} Instance of visual unit contained by visual unit.\n * @memberof GeomCell\n */\n valueOf () {\n return this.source();\n }\n\n /**\n * This method is used to return the id of the\n * visual unit housed by this cell.\n *\n * @return {string} The unique id of the visual unit.\n * @memberof GeomCell\n */\n get id () {\n return this.source().id();\n }\n\n /**\n * This method return a serialized representation of\n * this instance.\n *\n * @return {Object} Object with serializable props.\n * @memberof GeomCell\n */\n serialize () {\n return {\n type: GEOM,\n unit: this.source().serialize(),\n caption: this.caption()\n };\n }\n\n /**\n * return the default configuration for the geom cell\n *\n * @static\n * @return {Object} Default configuration of the cell\n * @memberof GeomCell\n */\n static defaultConfig () {\n return DEFAULT_CONFIG;\n }\n\n /**\n * Updates the model based on the changed parameters\n *\n * @return {Instance} return instance\n * @memberof GeomCell\n */\n updateModel () {\n const unit = this.source();\n unit.lockModel();\n [DATA, AXES, FACET_BY_FIELDS, FIELDS, TRANSFORM, LAYER_DEF, CONFIG, DETAIL_FIELDS].forEach((prop) => {\n this[prop]() && unit[prop](this[prop]());\n });\n unit.unlockModel();\n return this;\n }\n\n /**\n * It gives the space taken by the caption of the unit\n *\n * @return {Object} return the space taken by caption\n * @memberof GeomCell\n */\n getCaptionSpace () {\n const caption = this.caption();\n\n let captionSpace = { width: 0, height: 0 };\n if (caption) {\n captionSpace = caption.getLogicalSpace();\n }\n return captionSpace;\n }\n\n /**\n * return the space taken up by the element in the dom.\n *\n * @return {Object} Object with width and height fields.\n * @memberof GeomCell\n */\n getLogicalSpace () {\n if (!this.logicalSpace()) {\n this.logicalSpace(computeGeomSpace(this));\n }\n return this.logicalSpace();\n }\n\n /**\n * This method is used to set the space available to\n * render the SimpleCell.\n *\n * @param {number} width The available width.\n * @param {number} height The available height.\n * @return {Instance} Returns current Instance\n * @memberof GeomCell\n */\n setAvailableSpace (width, height) {\n const unit = this.source();\n\n this.availWidth(width);\n this.availHeight(height);\n unit.lockModel();\n unit.width(width).height(height - this.getCaptionSpace().height);\n unit.unlockModel();\n this.logicalSpace(null);\n return this;\n }\n\n /**\n * his method is used to render the visual unit inside the provided cell.\n *\n * @param {HTMLElement} mount The mountpoint in the table.\n * @return {Instance} Returns current Instance\n * @memberof GeomCell\n */\n render (mount) {\n if (mount) {\n this.mount(mount);\n const availHeight = this.availHeight();\n const availWidth = this.availWidth();\n const caption = this.caption();\n const wrapperDiv = makeElement(selectElement(mount), 'div', [1], `${CLASSPREFIX}-${GEOM_CELL}`);\n\n if (caption) {\n const captionDom = makeElement(wrapperDiv, 'div', [caption], `${CLASSPREFIX}-unit-caption`).node();\n caption.render(captionDom);\n }\n const selection = makeElement(wrapperDiv, 'div', [1], `${CLASSPREFIX}-unit`);\n wrapperDiv.style(WIDTH, `${availWidth}px`).style(HEIGHT, `${availHeight}px`);\n selection.style(WIDTH, `${availWidth}px`)\n .style(HEIGHT, `${availHeight - this.getCaptionSpace().height}px`);\n this.source().mount(selection.node());\n }\n return this;\n }\n\n /**\n * Disposes the cell\n *\n * @return {Object} Current instance\n * @memberof GeomCell\n */\n remove () {\n this.mount() && this.mount().remove();\n this.source().remove();\n return this;\n }\n}\n\nexport default GeomCell;\n","import AxisCell from './axis-cell';\nimport BlankCell from './blank-cell';\nimport TextCell from './text-cell';\nimport GeomCell from './geom-cell';\nimport SimpleCell from './simple-cell';\n\nimport * as CONSTANTS from './constants';\n\nexport const DEFAULT_PLACEHOLDERS = {\n [CONSTANTS.SIMPLE_CELL]: SimpleCell,\n [CONSTANTS.TEXT_CELL]: TextCell,\n [CONSTANTS.AXIS_CELL]: AxisCell,\n [CONSTANTS.GEOM_CELL]: GeomCell,\n [CONSTANTS.BLANK_CELL]: BlankCell\n};\n\n","export const SIMPLE_CELL = 'SimpleCell';\nexport const TEXT_CELL = 'TextCell';\nexport const AXIS_CELL = 'AxisCell';\nexport const BLANK_CELL = 'BlankCell';\nexport const GEOM_CELL = 'GeomCell';\n\n","import { DEFAULT_PLACEHOLDERS } from './defaults';\n\n/**\n * Creates a registry for the cells, which can be used for\n * setting a new cell or getting the registered cells\n *\n * @return {Object} Setters and getters for registered cells\n */\nconst cellRegistry = () => {\n const reg = DEFAULT_PLACEHOLDERS;\n return {\n set: (key, def) => {\n if (key in reg) {\n reg[key] = def;\n }\n return cellRegistry;\n },\n get: () => reg\n };\n};\nexport default cellRegistry;\n","import { TextCell } from '@chartshq/visual-cell';\nimport { escapeHTML } from 'muze-utils';\n\n/**\n *\n *\n * @param {*} rawContent\n * @returns\n */\nconst resolveTitleSubTitleContent = (rawContent) => {\n if (typeof rawContent === 'function' && !rawContent._sanitize) {\n return rawContent();\n }\n return escapeHTML(rawContent());\n};\n\n/**\n *\n *\n * @param {*} config\n * @param {*} cellType\n * @param {*} labelManager\n * @param {*} prevCell\n * @returns\n */\nconst headerCreator = (config, cellType, labelManager, prevCell) => {\n const {\n content\n } = config;\n const cell = prevCell || new TextCell({ type: cellType }, { labelManager });\n\n cell.source(content);\n\n return {\n height: cell.getLogicalSpace().height,\n cell\n };\n};\n\n/**\n *\n *\n * @param {*} config\n * @param {*} type\n * @param {*} labelManager\n * @param {*} cell\n * @returns\n */\nconst createHeading = (config, type, labelManager, prevCell) => {\n if (!config) { return ''; }\n\n return headerCreator(\n config,\n type === 'title' ? 'header' : 'text',\n labelManager,\n prevCell\n );\n};\n\n/**\n *\n *\n * @param {*} context\n */\nexport const createHeaders = (context, canvasHeight, canvasWidth) => {\n let headerHeight = 0;\n const headers = {};\n\n canvasHeight >= 200 && canvasWidth >= 200 && ['title', 'subtitle'].forEach((type) => {\n const headerOptions = context[type]();\n const content = resolveTitleSubTitleContent(headerOptions[0]);\n if (content.length) {\n const config = headerOptions[1];\n\n config.width = context.width();\n config.content = content;\n\n const { height, cell } = createHeading(config, type, context.dependencies().smartlabel,\n context[`${type}Cell`]);\n\n headers[`${type}Cell`] = cell;\n context._composition[type] = cell;\n headerHeight += height + config.padding;\n }\n });\n return { headerHeight, headers };\n};\n\n","import { TextCell, AxisCell } from '@chartshq/visual-cell';\nimport {\n VERTICAL, HORIZONTAL, LEFT, RIGHT, LEGEND_TYPE_MAP, PADDING, BORDER, MARGIN\n} from '../constants';\n\n/**\n *\n *\n * @param {*} legendConfig\n * @param {*} canvases\n * @returns\n */\nexport const legendCreator = (canvas) => {\n let LegendCls;\n const dataset = [];\n const axes = canvas.getRetinalAxes();\n\n Object.entries(axes).forEach((axisInfo) => {\n const scale = axisInfo[1][0];\n const scaleType = axisInfo[0];\n const scaleProps = canvas[scaleType]();\n\n if (scaleProps.field) {\n const {\n type,\n step\n } = scale.config();\n\n const stepMapper = typeof step === 'boolean' ? step : false;\n LegendCls = LEGEND_TYPE_MAP[`${type}-${stepMapper}-${scaleType}`];\n dataset.push({ scale, canvas, fieldName: scaleProps.field, LegendCls, scaleType });\n }\n });\n\n return dataset;\n};\n\n/**\n *\n *\n * @param {*} legendConfig\n * @param {*} canvases\n * @param {*} measurement\n * @param {*} prevLegends\n * @returns\n */\nexport const legendInitializer = (legendConfig, canvas, measurement, prevLegends) => {\n const legends = [];\n const {\n height,\n width,\n headerHeight\n } = measurement;\n const {\n position,\n align\n } = legendConfig;\n\n const legendInfo = legendCreator(canvas);\n\n legendInfo.forEach((dataInfo, index) => {\n let legend = {};\n\n const legendMeasures = {};\n const {\n LegendCls,\n scale,\n fieldName,\n scaleType\n } = dataInfo;\n const config = legendConfig[scaleType] || {};\n const title = config.title || {};\n title.text = title.text || fieldName;\n if (config.show) {\n config.position = position;\n config.align = align;\n\n if (prevLegends[index]) {\n legend = prevLegends[index].legend;\n } else {\n legend = LegendCls.create({\n labelManager: canvas._dependencies.smartlabel,\n cells: {\n AxisCell, TextCell\n }\n });\n }\n legendMeasures.maxHeight = align === VERTICAL ? (height - headerHeight) : height * 0.2;\n legendMeasures.maxWidth = align === HORIZONTAL ? width : width * 0.2;\n legendMeasures.width = Math.min(legendMeasures.maxWidth, config.width);\n legendMeasures.height = Math.min(legendMeasures.maxHeight, config.height);\n\n [PADDING, BORDER, MARGIN].forEach((e) => {\n legendMeasures[e] = config[e];\n });\n legend.scale(scale)\n .title(title)\n .fieldName(fieldName)\n .config(config)\n .metaData(canvas.composition().visualGroup.getGroupByData().project([fieldName]))\n .measurement(legendMeasures)\n .canvasAlias(canvas.alias())\n .setLegendMeasures();\n\n legends.push({ canvas, legend, scaleType });\n }\n });\n return legends;\n};\n\n/**\n *\n *\n * @param {*} legends\n * @param {*} legendConfig\n * @param {*} availableHeight\n * @param {*} availableWidth\n * @returns\n */\nexport const getLegendSpace = (legends, legendConfig, availableHeight, availableWidth) => {\n const legendMeasures = legends.map(legendInfo => legendInfo.legend.measurement());\n const legendSpace = { width: 0, height: 0 };\n\n legendMeasures.forEach((space) => {\n let height = 0;\n let width = 0;\n width = Math.min(space.width, space.maxWidth);\n height = Math.min(space.height, space.maxHeight);\n\n if (legendConfig.align === HORIZONTAL) {\n if (legendSpace.width + width > availableWidth) {\n legendSpace.width = availableWidth;\n legendSpace.height += height;\n } else {\n legendSpace.width += width;\n legendSpace.height = Math.max(legendSpace.height, height);\n }\n } else if (legendSpace.height + height > availableHeight) {\n legendSpace.height = height;\n legendSpace.width += width;\n } else {\n legendSpace.height += height;\n legendSpace.width = Math.max(legendSpace.width, width);\n }\n });\n if (legendConfig.align === HORIZONTAL) {\n legendSpace.width = availableWidth;\n }\n return legendSpace;\n};\n\n/**\n *\n *\n * @param {*} context\n * @param {*} headerHeight\n * @returns\n */\nexport const createLegend = (context, headerHeight, height, width) => {\n const measurement = {\n height,\n width,\n headerHeight\n };\n const { legend } = context.config();\n const { show, position } = legend;\n\n legend.classPrefix = context.config().classPrefix;\n const align = (position === LEFT || position === RIGHT) ? VERTICAL : HORIZONTAL;\n\n legend.show = show ? ((align === VERTICAL && width > 200) || (align === HORIZONTAL && height > 200)) : show;\n legend.align = align;\n return legendInitializer(legend, context, measurement, context.legends || []);\n};\n","import { mergeRecursive } from 'muze-utils';\nimport { arrangeComponents } from './component-resolver';\nimport { createHeaders } from './title-maker';\nimport { createLegend, getLegendSpace } from './legend-maker';\nimport { TOP, BOTTOM, LEFT, RIGHT } from '../constants';\n\n/**\n *\n *\n * @param {*} context\n * @returns\n */\nexport const prepareLayout = (layout, components, config, measurement) => {\n const {\n rows,\n columns,\n values,\n cornerMatrices\n } = components;\n\n const {\n topLeft,\n topRight,\n bottomLeft,\n bottomRight\n } = cornerMatrices;\n\n layout.measurement(measurement)\n .config(config)\n .matrices({\n top: [topLeft, columns[0], topRight],\n center: [rows[0], values, rows[1]],\n bottom: [bottomLeft, columns[1], bottomRight]\n })\n .triggerReflow();\n};\n\n/**\n *\n *\n * @param {*} context\n * @param {*} mount\n * @returns\n */\nexport const getRenderDetails = (context, mount) => {\n let layoutConfig = mergeRecursive({}, context.config());\n // Get height width of the mount point\n let { height, width } = mount.getBoundingClientRect();\n const heightAttr = context.height();\n const widthAttr = context.width();\n const visGroup = context.composition().visualGroup;\n const {\n isColumnSizeEqual,\n isRowSizeEqual,\n rows,\n columns,\n values\n } = visGroup.placeholderInfo();\n const {\n minWidth,\n minHeight,\n classPrefix,\n showHeaders,\n legend\n } = context.config();\n // Get title configuration\n const titleConfig = context.title()[1];\n // Get subtitle configuration\n const subtitleConfig = context.subtitle()[1];\n // Get legend position\n const legendPosition = legend.position;\n // Arrange components according to config\n const layoutArrangement = arrangeComponents(context);\n\n height = Math.floor(height);\n width = Math.floor(width);\n\n const availableHeightForCanvas = Math.max(heightAttr > 0 ? heightAttr : height, minHeight);\n const availableWidthForCanvas = Math.max(widthAttr > 0 ? widthAttr : width, minWidth);\n\n // Create headers and determine header height\n const { headers, headerHeight } = createHeaders(context, availableHeightForCanvas, availableWidthForCanvas);\n\n // Create legends and determine legend space\n const legends = createLegend(context, headerHeight, availableHeightForCanvas, availableWidthForCanvas);\n context._composition.legend = {};\n legends.forEach((e) => {\n context._composition.legend[e.scaleType] = e.legend;\n });\n\n const legendSpace = getLegendSpace(legends, legend, availableHeightForCanvas, availableWidthForCanvas);\n const legendWidth = (legendPosition === LEFT || legendPosition === RIGHT) ? legendSpace.width : 0;\n const legendHeight = (legendPosition === TOP || legendPosition === BOTTOM) ? legendSpace.height : 0;\n\n // Set components for layouting\n const components = {\n headers,\n legends,\n canvases: [context],\n rows,\n columns,\n values,\n cornerMatrices: visGroup.cornerMatrices()\n };\n const measurement = {\n mountSpace: {\n height,\n width\n },\n headerHeight,\n legendSpace,\n canvasWidth: availableWidthForCanvas,\n canvasHeight: availableHeightForCanvas,\n width: availableWidthForCanvas - legendWidth,\n height: availableHeightForCanvas - headerHeight - legendHeight,\n minUnitHeight: context.minUnitHeight(),\n minUnitWidth: context.minUnitWidth()\n };\n layoutConfig = mergeRecursive(layoutConfig, {\n classPrefix,\n showHeaders,\n border: mergeRecursive(visGroup.metaData().border, context.config().border),\n layoutArrangement,\n legend,\n title: titleConfig,\n subtitle: subtitleConfig,\n isColumnSizeEqual,\n isRowSizeEqual\n });\n return {\n layoutConfig,\n components,\n measurement\n };\n};\n","export const TITLE_CONFIG = {\n position: 'top',\n align: 'left',\n padding: 8\n};\n\nexport const SUB_TITLE_CONFIG = {\n position: 'top',\n align: 'left',\n padding: 16\n};\n","import { mergeRecursive, selectElement } from 'muze-utils';\nimport {\n ROWS,\n COLUMNS,\n COLOR,\n SHAPE,\n SIZE,\n DETAIL,\n LAYERS,\n TRANSFORM,\n MOUNT,\n TITLE,\n SUB_TITLE\n} from '../constants';\nimport { TITLE_CONFIG, SUB_TITLE_CONFIG } from './defaults';\n/**\n * @module\n * This is the local options semantics based on which setters getters are created and reactivity is initiated.\n * This local object is only valid for Canvas.\n * Canvas merges global and local object both to the model\n *\n * Format\n * PROPERTRY_NAME: {\n * value: // default value of the property,\n * meta: {\n * typeCheck: // The setter value will be checked using this. If the value is function then the setter value\n * // is passed as args.\n * typeExpected: // The output of typecheck action will be tested against this. Truthy value will set the\n * // value to the setter\n * sanitizaiton: // Need for sanitization before type is checked\n * }\n * }\n */\n\nexport const localOptions = {\n [ROWS]: {\n value: null,\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Array'\n }\n },\n [COLUMNS]: {\n value: null,\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Array'\n }\n },\n [COLOR]: {\n value: null,\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Object',\n sanitization: (config) => {\n if (typeof config === 'string') {\n return {\n field: config\n };\n }\n return config;\n }\n }\n },\n [SHAPE]: {\n value: null,\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Object',\n sanitization: (config) => {\n if (typeof config === 'string') {\n return {\n field: config\n };\n }\n return config;\n }\n }\n },\n [SIZE]: {\n value: null,\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Object',\n sanitization: (config) => {\n if (typeof config === 'string') {\n return {\n field: config\n };\n }\n return config;\n }\n }\n },\n [DETAIL]: {\n value: [],\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Array'\n }\n },\n\n [LAYERS]: {\n value: null,\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Array'\n }\n },\n [TRANSFORM]: {\n value: null,\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Object'\n }\n },\n [MOUNT]: {\n value: null,\n meta: {\n sanitization: (value) => {\n if (typeof value === 'string') {\n return selectElement(value).node();\n }\n return value;\n }\n }\n }\n};\n\nexport const canvasOptions = {\n [TITLE]: {\n value: [null, null],\n meta: {\n typeCheck: ['constructor', 'constructor'],\n typeExpected: ['Function', 'Object'],\n spreadParams: true,\n sanitization: [(title) => {\n if (typeof title === 'string') {\n const t = () => title;\n t._sanitized = true;\n return t;\n }\n return title;\n }, (titleConfig) => {\n const defConfig = mergeRecursive({}, TITLE_CONFIG);\n return mergeRecursive(defConfig, titleConfig);\n }]\n }\n },\n [SUB_TITLE]: {\n value: [null, null],\n meta: {\n typeCheck: ['constructor', 'constructor'],\n typeExpected: ['Function', 'Object'],\n spreadParams: true,\n sanitization: [(subtitle) => {\n if (typeof subtitle === 'string') {\n const sub = () => subtitle;\n sub._sanitized = true;\n return sub;\n }\n return subtitle;\n }, (subtitleConfig) => {\n const defConfig = mergeRecursive({}, SUB_TITLE_CONFIG);\n return mergeRecursive(defConfig, subtitleConfig);\n }]\n }\n }\n};\n","import { makeElement, selectElement } from 'muze-utils';\nimport { VERTICAL, HORIZONTAL, TOP, LEFT, RIGHT, BOTTOM } from '../constants';\n\n/**\n * Sets the rotation for all x axes if any axis has the rotation config set in the\n * entire view\n *\n * @param {Array} columns Column cells that contain the axes cells\n */\nconst setLabelRotationForAxes = (context) => {\n let rotation = 0;\n\n const xAxes = context.xAxes() || [];\n\n (() => {\n for (let i = 0; i < xAxes.length; i++) {\n for (let j = 0; j < xAxes[i].length; j++) {\n if (xAxes[i][j].config().labels.rotation !== 0) {\n rotation = xAxes[i][j].config().labels.rotation;\n return;\n }\n }\n }\n })();\n\n if (rotation) {\n xAxes.forEach((axes) => {\n axes.forEach((axis) => {\n axis.config({ labels: { rotation, smartTicks: false } });\n });\n });\n }\n};\n\n/**\n *\n *\n * @param {*} context\n * @param {*} mount\n * @returns\n */\nconst getSkeletons = (mount, layoutConfig, measurement) => {\n const {\n layoutArrangement,\n classPrefix\n } = layoutConfig;\n const {\n headers,\n legends\n } = layoutArrangement;\n const {\n canvasWidth,\n canvasHeight\n } = measurement;\n const container = selectElement(mount);\n const components = {};\n const mountPoint = makeElement(container, 'div', [1], `${classPrefix}-viz`)\n .style('width', `${canvasWidth}px`)\n .style('height', `${canvasHeight}px`);\n const containers = mountPoint\n .selectAll(`.${classPrefix}-container`)\n .data(headers);\n containers.exit().remove();\n const containersEnter = containers.enter().append('div');\n\n const mergedContainer = containersEnter.merge(containers)\n .attr('class', `${classPrefix}-container`)\n .style('width', `${canvasWidth}px`)\n .style('padding', `${null}px`)\n .style('margin', null)\n .each(function (type) {\n components[type] = selectElement(this).classed(`${classPrefix}-${type}-container`, true);\n });\n const innerContainer = mergedContainer\n .selectAll(`.${classPrefix}-inner-container`)\n .data((d) => {\n if (d === 'group') {\n return legends;\n } return [];\n });\n innerContainer.exit().remove();\n const innerContainerEnter = innerContainer.enter().append('div');\n\n innerContainerEnter\n .merge(innerContainer)\n .attr('class', `${classPrefix}-inner-container`)\n .style('width', 'auto')\n .style('height', 'auto')\n .each(function (layoutType) {\n components[layoutType] = selectElement(this)\n .classed(`${classPrefix}-${layoutType}-container`, true);\n });\n return components;\n};\n\n/**\n *\n *\n * @param {*} context\n * @param {*} container\n * @param {*} legendComponents\n */\nconst renderLegend = (legendConfig, container, legendComponents, measurement) => {\n const sectionComponents = [];\n const { legendSpace, headerHeight, height, width } = measurement;\n const { legend, classPrefix } = legendConfig;\n const { position } = legend;\n const legendMount = makeElement(container, 'div', [legendComponents], `${classPrefix}-inner-content`, {}, d => d);\n legendMount.classed(`${classPrefix}-legend`, true);\n const align = (position === LEFT || position === RIGHT) ? VERTICAL : HORIZONTAL;\n const legWidth = align === VERTICAL ? legendSpace.width : width;\n const legHeight = align === VERTICAL ? height - headerHeight : legendSpace.height;\n\n [container, legendMount].forEach((elem) => {\n elem.style('width', `${Math.floor(legWidth)}px`)\n .style('height', `${legHeight}px`)\n .style('float', LEFT);\n });\n\n if (align === VERTICAL) {\n let sections = -1;\n let currHeight = legHeight;\n let currWidth = 0;\n\n legendComponents.forEach((legendInfo) => {\n const leg = legendInfo.legend;\n if (leg.measurement().height > currHeight) {\n sections++;\n currWidth = 0;\n currHeight = legHeight;\n } else {\n sections < 0 && sections++;\n }\n sectionComponents[sections] = sectionComponents[sections] || [];\n currHeight -= Math.min(leg.measurement().height, currHeight);\n currWidth = Math.max(Math.min(leg.measurement().width, leg.measurement().maxWidth), currWidth);\n sectionComponents[sections].push({\n legend: leg,\n legendHeight: legHeight,\n legendWidth: currWidth\n });\n });\n\n const mount = makeElement(legendMount, ['div'], sectionComponents, `${classPrefix}-legend-section`)\n .each((d, i) => selectElement(this).classed(`${classPrefix}-legend-section-${i}`, true))\n .classed(`${classPrefix}-legend-vertical-section`, true)\n .style('width', d => `${d[0].legendWidth}px`);\n makeElement(mount, ['div'], d => d, `${classPrefix}-legend-components`, {}, d => d.legend.id())\n .each(function (d) {\n d.legend.mount(this);\n })\n .style('width', d => `${d.legendWidth}px`);\n } else {\n const mount = makeElement(legendMount, 'div', [1], `${classPrefix}-legend-section`)\n .classed(`${classPrefix}-legend-horizontal-section`, true)\n .classed(`${classPrefix}-legend-section-${0}`, true)\n .style('width', `${legWidth}px`);\n\n makeElement(mount, 'div', legendComponents, `${classPrefix}-legend-components`, {}, d => d.legend.id())\n .each(function (d) { d.legend.mount(this); })\n .style('width', d => `${d.legend.measurement().width}px`);\n }\n};\n\n/**\n *\n *\n * @param {*} context\n * @param {*} container\n * @param {*} type\n * @param {*} headers\n */\nconst renderHeader = (layoutConfig, container, type, headers) => {\n const headerCell = headers[`${type}Cell`];\n const config = layoutConfig[`${type}`];\n const { position, align, padding } = config;\n const sel = container\n .selectAll(`.${layoutConfig.classPrefix}-inner-container`)\n .data([type]);\n sel.exit().remove();\n const selEnter = sel.enter().append('div');\n\n const cont = selEnter.merge(sel);\n cont.classed(`${layoutConfig.classPrefix}-inner-container`, true);\n\n headerCell && headerCell.render(cont.node());\n\n cont.selectAll('div').classed(`${layoutConfig.classPrefix}-inner-content`, true);\n cont.style('width', `${100}%`);\n\n if (config && headerCell) {\n cont.style('float', LEFT)\n .style('text-align', align)\n .style(`padding-${position === TOP ? BOTTOM : TOP}`, `${padding}px`);\n }\n};\n\n/**\n *\n *\n * @param {*} context\n * @param {*} shifter\n */\nconst shiftHeaders = (config, shifter, measurement, mount) => {\n const { classPrefix, title, subtitle, legend } = config;\n const { legendSpace } = measurement;\n const { position } = legend;\n\n shifter += position === LEFT ? legendSpace.width : 0;\n title && selectElement(mount).select(`.${classPrefix}-title-container`)\n .style('width', title.align === LEFT ? `calc(100% - ${shifter}px` : '100%')\n .style('margin-left', title.align === LEFT ? `${shifter}px` : 0);\n subtitle && selectElement(mount).select(`.${classPrefix}-subtitle-container`)\n .style('width', subtitle.align === LEFT ? `calc(100% - ${shifter}px` : '100%')\n .style('margin-left', subtitle.align === LEFT ? `${shifter}px` : 0);\n\n selectElement(mount).select(`.${classPrefix}-legend-horizontal-section`)\n .style('margin-left', `${shifter}px`)\n .style('width', `${legendSpace.width - shifter}px`)\n .selectAll(`.${classPrefix}-legend-body, .${classPrefix}-legend-title`)\n .style('max-width', `${legendSpace.width - shifter}px`);\n selectElement(mount).select(`.${classPrefix}-legend-vertical-section`)\n .style('margin-left', null)\n .selectAll(`.${classPrefix}-legend-body, .${classPrefix}-legend-title`)\n .style('max-width', null);\n};\n\n/**\n *\n *\n * @param {*} mountPoint\n * @param {*} measurement\n * @param {*} classPrefix\n * @returns\n */\nconst prepareGridContainer = (mountPoint, measurement, classPrefix, alias) => {\n if (!mountPoint) {\n return this;\n }\n\n const {\n height,\n width\n } = measurement;\n // Create container for the layout\n\n const sel = selectElement(mountPoint)\n .selectAll(`.${classPrefix}-inner-content`)\n .data(['layout'], d => d);\n sel.exit().remove();\n const selEnter = sel.enter().append('div');\n\n const container = selEnter.merge(sel)\n .attr('class', `${classPrefix}-inner-content`)\n .classed(`${classPrefix}-grid-layout`, true)\n .attr('id', `${classPrefix}-grid-layout-${alias}`)\n .style('height', `${height}px`)\n .style('padding', null)\n .style('width', `${Math.ceil(width)}px`);\n // Mount for matrices\n const innerSel = container.selectAll(`.${classPrefix}-layout-grid-container`)\n .data(['layout2']);\n innerSel.exit().remove();\n const innerSelEnter = innerSel.enter().append('div');\n\n const mount = innerSelEnter.merge(innerSel);\n mount.classed(`${classPrefix}-layout-grid-container`, true)\n .attr('id', `${classPrefix}-layout-grid-container-${alias}`)\n .style('height', `${height}px`)\n .style('width', `${Math.ceil(width)}px`);\n\n return {\n mount,\n container\n };\n};\n\n/**\n *\n *\n * @param {*} context\n * @param {*} components\n * @param {*} layoutConfig\n * @param {*} measurement\n */\nexport const renderComponents = (context, components, layoutConfig, measurement) => {\n const mountPoint = context.mount();\n const {\n headers,\n legends\n } = components;\n const {\n classPrefix\n } = layoutConfig;\n const {\n title,\n legend,\n subtitle,\n layout\n } = getSkeletons(mountPoint, layoutConfig, measurement);\n const {\n mount\n } = prepareGridContainer(layout.node(), measurement, classPrefix, context.alias());\n const padding = context.layout().getViewInformation().layoutDimensions.viewWidth[0];\n measurement.padding = padding;\n setLabelRotationForAxes(context);\n\n // Render layout\n context.layout().renderGrid(mount);\n context.once('layer.drawn').then(() => {\n renderHeader(layoutConfig, title, 'title', headers);\n renderHeader(layoutConfig, subtitle, 'subtitle', headers);\n renderLegend(layoutConfig, legend, legends, measurement);\n shiftHeaders(layoutConfig, padding, measurement, mountPoint);\n });\n context.composition().visualGroup.matrixInstance().value.each((el) => {\n el.valueOf().parentContainer(layout.node());\n });\n};\n","import { isEqual } from 'muze-utils';\nimport { ROWS, COLUMNS, COLOR, SHAPE, SIZE, MOUNT, DETAIL, DATA, CONFIG } from '../constants';\nimport { canvasOptions } from './local-options';\n\n/**\n * Instantiate high level components. Canvas knows what all high level component it has.\n * @nice-to-have dynamic high level components.\n * - Is it even required ?\n * - Reactive to source (canvas) streaming ?\n * @param {*} context Canvas instance\n * @return {Object.fArray>} Arrays of Title, visualGroup, Legend\n */\nexport const initCanvas = (context) => {\n const reg = context._registry.components;\n\n return [new reg.VisualGroup(context._registry, context.dependencies())];\n};\n\n/**\n *\n *\n * @memberof Canvas\n */\nexport const dispatchProps = (context) => {\n const lifeCycleManager = context.dependencies().lifeCycleManager;\n lifeCycleManager.notify({ client: context, action: 'beforeupdate' });\n const visualGroup = context.composition().visualGroup;\n\n visualGroup.lockModel();\n const allOptions = context._allOptions;\n for (const key in allOptions) {\n const value = context[key]();\n if (value !== null) {\n visualGroup[key] && visualGroup[key](value);\n }\n }\n visualGroup.unlockModel();\n\n context._cachedProps = {};\n lifeCycleManager.notify({ client: context, action: 'initialized' });\n lifeCycleManager.notify({ client: context, action: 'updated' });\n};\n\n/**\n *\n *\n */\nexport const setupChangeListener = (context) => {\n const store = context._store;\n\n store.registerImmediateListener(MOUNT, () => {\n const allOptions = Object.keys(context._allOptions);\n const props = [...allOptions, ...Object.keys(canvasOptions)];\n let equalityChecker = () => false;\n store.registerChangeListener(props, (...params) => {\n const updateProps = props.every((option, i) => {\n switch (option) {\n case ROWS:\n case COLUMNS:\n case DETAIL:\n equalityChecker = isEqual('Array');\n break;\n\n case SHAPE:\n case SIZE:\n case COLOR:\n case DATA:\n case CONFIG:\n equalityChecker = isEqual('Object');\n break;\n default:\n equalityChecker = () => true;\n break;\n }\n const oldVal = params[i][0];\n const newVal = params[i][1];\n\n return equalityChecker(oldVal, newVal);\n });\n // inform attached board to rerender\n !updateProps && dispatchProps(context);\n context.render();\n }, true);\n });\n};\n\nexport const applyInteractionPolicy = (policies, firebolt) => {\n const canvas = firebolt.context;\n const visualGroup = canvas.composition().visualGroup;\n const valueMatrix = visualGroup.composition().matrices.value;\n policies.forEach(policy => policy(valueMatrix, firebolt));\n};\n","import {\n getDataModelFromIdentifiers,\n FieldType,\n mergeRecursive\n} from 'muze-utils';\n\nimport { applyInteractionPolicy } from './helper';\n\nconst defaultInteractionPolicy = (valueMatrix, firebolt) => {\n const isMeasure = field => field.type() === FieldType.MEASURE;\n const canvas = firebolt.context;\n const visualGroup = canvas.composition().visualGroup;\n const xFields = [].concat(...visualGroup.getFieldsFromChannel('x'));\n const yFields = [].concat(...visualGroup.getFieldsFromChannel('y'));\n const colDim = xFields.every(field => field.type() === FieldType.DIMENSION);\n const fieldInf = visualGroup.resolver().getAllFields();\n const rowFacets = fieldInf.rowFacets;\n const colFacets = fieldInf.colFacets;\n valueMatrix.each((cell) => {\n const unitFireBolt = cell.valueOf().firebolt();\n\n if (!(xFields.every(isMeasure) && yFields.every(isMeasure))) {\n const facetFields = cell.valueOf().facetByFields()[0];\n const unitColFacets = facetFields.filter(d => colFacets.findIndex(v => v.equals(d)) !== -1);\n const unitRowFacets = facetFields.filter(d => rowFacets.findIndex(v => v.equals(d)) !== -1);\n let propFields;\n if (colDim) {\n propFields = unitColFacets.map(d => `${d}`);\n } else {\n propFields = unitRowFacets.map(d => `${d}`);\n }\n\n unitFireBolt.propagateWith('*', propFields, true);\n }\n });\n};\n\nconst defaultCrossInteractionPolicy = {\n behaviours: {\n '*': (propagationPayload, context) => {\n const propagationCanvasAlias = propagationPayload.sourceCanvas;\n const canvasAlias = context.parentAlias();\n return propagationCanvasAlias ? canvasAlias === propagationCanvasAlias : true;\n }\n },\n sideEffects: {\n tooltip: (propagationPayload, context) => {\n const propagationUnit = propagationPayload.sourceUnit;\n const propagationCanvas = propagationPayload.sourceCanvas;\n const unitId = context.id();\n const canvasAlias = context.parentAlias();\n if (propagationCanvas) {\n return propagationCanvas !== canvasAlias ? true : unitId === propagationUnit;\n }\n return true;\n }\n }\n};\n\nexport default class GroupFireBolt {\n constructor (context) {\n this.context = context;\n this._interactionPolicy = this.constructor.defaultInteractionPolicy();\n this._crossInteractionPolicy = this.constructor.defaultCrossInteractionPolicy();\n this.context.once('canvas.updated').then(() => {\n applyInteractionPolicy([this._interactionPolicy], this);\n const crossInteractionPolicy = this._crossInteractionPolicy;\n const behaviours = crossInteractionPolicy.behaviours;\n const sideEffects = crossInteractionPolicy.sideEffects;\n const visualGroup = context.composition().visualGroup;\n const valueMatrix = visualGroup.composition().matrices.value;\n valueMatrix.each((cell) => {\n const unitFireBolt = cell.valueOf().firebolt();\n for (const key in behaviours) {\n unitFireBolt.changeBehaviourStateOnPropagation(key, behaviours[key]);\n }\n for (const key in sideEffects) {\n unitFireBolt.changeSideEffectStateOnPropagation(key, sideEffects[key]);\n }\n });\n });\n }\n\n static defaultInteractionPolicy () {\n return defaultInteractionPolicy;\n }\n\n static defaultCrossInteractionPolicy () {\n return defaultCrossInteractionPolicy;\n }\n\n interactionPolicy (...policy) {\n if (policy.length) {\n this._interactionPolicy = policy[0] || this.constructor.defaultInteractionPolicy();\n return this;\n }\n return this._interactionPolicy;\n }\n\n crossInteractionPolicy (...policy) {\n if (policy.length) {\n this._crossInteractionPolicy = mergeRecursive(mergeRecursive({},\n this.constructor.defaultCrossInteractionPolicy()), policy[0] || {});\n return this;\n }\n return this._crossInteractionPolicy;\n }\n\n dispatchBehaviour (behaviour, payload) {\n const propPayload = Object.assign(payload);\n const criteria = propPayload.criteria;\n const data = this.context.data();\n\n propPayload.action = behaviour;\n const model = getDataModelFromIdentifiers(data, criteria);\n data.propagate(model, propPayload, {\n sourceId: this.context.alias()\n });\n return this;\n }\n\n}\n","import { GridLayout } from '@chartshq/layout';\nimport { transactor, Store, getUniqueId } from 'muze-utils';\nimport { RETINAL } from '../constants';\nimport TransactionSupport from '../transaction-support';\nimport { getRenderDetails, prepareLayout } from './layout-maker';\nimport { localOptions, canvasOptions } from './local-options';\nimport { renderComponents } from './renderer';\nimport GroupFireBolt from './firebolt';\nimport options from '../options';\nimport { initCanvas, setupChangeListener } from './helper';\n\n/**\n * This is the primary class which manages highlevel components like visualGroup, Titles, Legend, Extensions\n * (in future). Global level Muze functionality is subset this. Every time user works with an instance of\n * canvas in dom which provides instance level settings.\n *\n */\nexport default class Canvas extends TransactionSupport {\n\n /**\n * Creates reactive property accessors.\n * - data\n * - height\n * - width\n * - config\n * This configs are retrieved from options.\n */\n constructor (globalDependencies) {\n super();\n\n this._allOptions = Object.assign({}, options, localOptions);\n this._registry = {};\n this._composition = {};\n this._cachedProps = {};\n this._alias = null;\n this._renderedResolve = null;\n this._renderedPromise = new Promise((resolve) => {\n this._renderedResolve = resolve;\n });\n this._composition.layout = new GridLayout();\n this._store = new Store({});\n\n // Setters and getters will be mounted on this. The object will be mutated.\n const [, store] = transactor(this, options, this._store.model);\n transactor(this, localOptions, store);\n transactor(this, canvasOptions, store);\n this.dependencies(Object.assign({}, globalDependencies, this._dependencies));\n this.firebolt(new GroupFireBolt(this));\n this.alias(`canvas-${getUniqueId()}`);\n this.title('', {});\n this.subtitle('', {});\n this.legend({});\n this.color({});\n this.shape({});\n this.size({});\n setupChangeListener(this);\n }\n\n /**\n *\n *\n * @readonly\n * @memberof Canvas\n */\n layout (...params) {\n if (params.length) {\n return this;\n }\n return this.composition().layout;\n }\n\n /**\n *\n *\n * @readonly\n * @memberof Canvas\n */\n composition (...params) {\n if (params.length) {\n return this;\n }\n return this._composition;\n }\n\n done () {\n return this._renderedPromise;\n }\n\n /**\n *\n *\n * @param {*} params\n * @returns\n * @memberof Canvas\n */\n alias (...params) {\n if (params.length) {\n const visualGroup = this.composition().visualGroup;\n this._alias = params[0];\n visualGroup && visualGroup.alias(this.alias());\n return this;\n }\n return this._alias;\n }\n\n /**\n * Creates an instance initiated with given settings.\n *\n * @param {Object} initialSettings Initial settings to be populated in the model\n * @param {Object} regEntry newly created instance with the initial settings\n * @param {Object} globalDependencies dependencies which will be created only once in the page\n *\n * @return {Object} newly created instance with the initial settings\n */\n static withSettings (initialSettings, regEntry, globalDependencies) {\n const instance = new Canvas(globalDependencies);\n\n for (const key in initialSettings) {\n instance[key](initialSettings[key]);\n }\n // set registry for instance\n instance.registry(regEntry);\n return instance;\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof Canvas\n */\n static formalName () {\n return 'canvas';\n }\n\n /**\n *\n *\n * @readonly\n * @memberof Canvas\n */\n firebolt (...firebolt) {\n if (firebolt.length) {\n this._firebolt = firebolt[0];\n return this;\n }\n return this._firebolt;\n }\n\n /**\n * Registry peoperty accessor\n *\n * @param {Object} reg plain old javascript object keyvalue pairs. Key containing module name and value contains\n * module definition class. The reg object has to be flat object of level 1.\n */\n registry (...params) {\n if (params.length) {\n const components = Object.assign({}, params[0].components);\n const componentSubRegistry = Object.assign({}, params[0].componentSubRegistry);\n\n this._registry = { components, componentSubRegistry };\n const initedComponents = initCanvas(this);\n // @todo is it okay to continue this tight behaviour? If not use a resolver to resolve diff component type.\n this._composition.visualGroup = initedComponents[0];\n\n this.composition().visualGroup.alias(this.alias());\n return this;\n }\n return this._registry;\n }\n\n /*\n * Prepare dependencies for top level elements\n */\n dependencies (...param) {\n if (param.length) {\n this._dependencies = param[0];\n return this;\n }\n // @todo prepare dependencies here.\n return this._dependencies;\n }\n\n /**\n *\n *\n * @param {*} lifeCycles\n * @returns\n * @memberof Canvas\n */\n lifeCycle (lifeCycles) {\n const lifeCycleManager = this.dependencies().lifeCycleManager;\n if (lifeCycles) {\n lifeCycleManager.register(lifeCycles);\n return this;\n }\n return lifeCycleManager;\n }\n\n /**\n *\n *\n * @readonly\n * @memberof Canvas\n */\n legend (...params) {\n if (params.length) {\n return this;\n }\n return this.composition().legend;\n }\n\n /**\n *\n *\n * @param {*} eventName\n * @returns\n * @memberof Canvas\n */\n once (eventName) {\n const lifeCycleManager = this.dependencies().lifeCycleManager;\n return lifeCycleManager.retrieve(eventName);\n }\n\n /**\n * Internal function to trigger render, this method is cognizant of all the properties of the core modules and\n * establish a passive reactivity. Passive reactivity is not always a bad thing :)\n * @internal\n */\n render () {\n const mount = this.mount();\n const visGroup = this.composition().visualGroup;\n const lifeCycleManager = this.dependencies().lifeCycleManager;\n // Get render details including arrangement and measurement\n const { components, layoutConfig, measurement } = getRenderDetails(this, mount);\n\n lifeCycleManager.notify({ client: this, action: 'beforedraw' });\n // Prepare the layout by triggering the matrix calculation\n prepareLayout(this.layout(), components, layoutConfig, measurement);\n // Render each component\n renderComponents(this, components, layoutConfig, measurement);\n // Update life cycle\n lifeCycleManager.notify({ client: this, action: 'drawn' });\n const promises = [];\n visGroup.matrixInstance().value.each((el) => {\n promises.push(el.valueOf().done());\n });\n Promise.all(promises).then(() => {\n this._renderedResolve();\n });\n }\n\n /**\n *\n *\n * @returns\n * @memberof Canvas\n */\n xAxes () {\n return this.composition().visualGroup.getAxes('x');\n }\n\n /**\n *\n *\n * @returns\n * @memberof Canvas\n */\n yAxes () {\n return this.composition().visualGroup.getAxes('y');\n }\n\n /**\n *\n *\n * @returns\n * @memberof Canvas\n */\n getRetinalAxes () {\n const visualGroup = this.composition().visualGroup;\n return visualGroup.getAxes(RETINAL);\n }\n}\n","import { cellRegistry, SimpleCell } from '@chartshq/visual-cell';\nimport { VisualUnit } from '@chartshq/visual-unit';\nimport { layerRegistry } from '@chartshq/visual-layer';\nimport { SimpleGroup, VisualGroup } from '@chartshq/visual-group';\n\nexport const COMPONENTS = {\n VisualGroup,\n VisualUnit\n};\nexport const SUBREGISTRIES = {\n cellRegistry,\n layerRegistry\n};\nexport const INTERFACES = {\n SimpleGroup,\n SimpleCell\n};\n\n","import { DEFAULT_LAYERS } from './defaults';\n\nexport default () => {\n const reg = DEFAULT_LAYERS;\n const regObj = {\n set: (key, def) => {\n reg[key] = def;\n return regObj;\n },\n get: () => reg\n };\n return regObj;\n};\n","import {\n transactor,\n Smartlabel,\n enableChainedTransaction,\n LifeCycleManager,\n DataModel,\n makeElement,\n getClientPoint,\n selectElement,\n getEvent,\n require,\n DateTimeFormatter\n} from 'muze-utils';\n\nimport {\n SurrogateSideEffect,\n SpawnableSideEffect,\n sideEffects,\n PersistentBehaviour,\n GenericBehaviour,\n VolatileBehaviour,\n behaviouralActions,\n GenericSideEffect\n} from '@chartshq/muze-firebolt';\nimport { layerFactory } from '@chartshq/visual-layer';\nimport pkg from '../package.json';\nimport * as operators from './operators';\nimport { actionModel as ActionModel } from './action-model';\nimport options from './options';\nimport { Canvas } from './canvas';\nimport { COMPONENTS, SUBREGISTRIES } from './default-registry';\nimport './muze.scss';\n\n// Cache singleton instances which should be included only once in a page\nconst globalCache = {};\nconst defaultRegistry = COMPONENTS;\n\nconst overrideRegistryDefinitions = (overrideRegistry, registry) => {\n for (const prop in overrideRegistry) {\n registry.set(prop, overrideRegistry[prop]);\n }\n};\n\n/**\n * Entry point to renderer. Initializes an environment with settings and registries for canvas. This is a simple wrapper\n * over {@link Canvas} which enables common configuration passing to multiple such canvases.\n *\n * Everytime `muze()` is called it creates an environment. These environment supports subset of APIs of Canvas. If\n * common configuration is used to render multiple canvases then it can be set directly in the env. Like if data is\n * common across all the visulization then its better to set the data in env. When a canvas is created it receives all\n * those configuration from env.\n *\n * ```\n * // Creates an environment\n * const env = muze()\n * // Set data property in environment, so that all the canvas created from the same environment gets this data\n * // automatically\n * env.data(dm);\n * // Creates canvas, by default env pushes data to canvas instance\n * const canvas = env.canvas();\n * ```\n *\n * If a property is set on both environment and canvas instance, property set on canvas instance gets more priority.\n *\n * @public\n * @module muze\n * @namespace Muze\n *\n * @return {Env} Instance of an environment\n */\nconst muze = () => {\n // Setters and getters will be mounted on this. Object will be mutated.\n const [env, globalStore] = transactor({}, options);\n const components = Object.assign({}, COMPONENTS);\n const componentSubRegistryDef = Object.assign(SUBREGISTRIES);\n const componentSubRegistry = {};\n\n for (const prop in componentSubRegistryDef) {\n componentSubRegistry[prop] = componentSubRegistryDef[prop]();\n }\n\n // Apart form the setter getter, an instance method is injected to create real renderer instances\n env.canvas = () => {\n // Create a canvas instance with this settings\n const settings = globalStore.serialize();\n const canvas = Canvas.withSettings(settings, { /* registry */\n components,\n componentSubRegistry\n }, env.globalDependencies());\n\n // Whenever settings is changed canvas is updated\n enableChainedTransaction(globalStore, canvas, Object.keys(settings));\n\n return canvas;\n };\n\n // Global dependencies for for compositions. Only one copy of the same should be in the page\n env.globalDependencies = () => {\n if (!globalCache.smartlabel) {\n globalCache.smartlabel = new Smartlabel(1, 'body');\n }\n return {\n smartlabel: globalCache.smartlabel,\n lifeCycleManager: new LifeCycleManager()\n };\n };\n\n // Retrieves global settings. This getter is readonly so that user can't change this as change should happen\n // only from setter to avoid unwanted sync issues.\n env.settings = () => globalStore.serialize();\n\n env.registry = (...overrideRegistry) => {\n // Selectively copy the properties from COMPONENTS\n if (overrideRegistry.length) {\n for (const prop in overrideRegistry) {\n if (prop in defaultRegistry) {\n components[prop] = overrideRegistry[prop];\n }\n }\n return env;\n }\n return components;\n };\n\n env.cellRegistry = (...overrideRegistry) => {\n const cellRegistry = componentSubRegistry.cellRegistry;\n if (overrideRegistry.length) {\n overrideRegistryDefinitions(overrideRegistry[0], cellRegistry);\n return env;\n }\n return cellRegistry.get();\n };\n\n env.layerRegistry = (...overrideRegistry) => {\n const layerRegistry = componentSubRegistry.layerRegistry;\n if (overrideRegistry.length) {\n overrideRegistryDefinitions(overrideRegistry[0], layerRegistry);\n return env;\n }\n return layerRegistry.get();\n };\n\n return env;\n};\n\nconst SideEffects = {\n sideEffects,\n standards: {\n SurrogateSideEffect,\n SpawnableSideEffect,\n GenericSideEffect\n }\n};\n\nconst Behaviours = {\n behaviouralActions,\n standards: {\n GenericBehaviour,\n PersistentBehaviour,\n VolatileBehaviour\n }\n};\n\nmuze.DataModel = DataModel;\nmuze.version = pkg.version;\nmuze.SideEffects = SideEffects;\nmuze.ActionModel = ActionModel;\nmuze.layerFactory = layerFactory;\nmuze.Operators = operators;\nmuze.Behaviours = Behaviours;\nmuze.utils = {\n getClientPoint,\n getEvent,\n makeElement,\n selectElement,\n DateTimeFormatter,\n require\n};\n\nexport default muze;\n"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack://muze/webpack/universalModuleDefinition","webpack://muze/webpack/bootstrap","webpack://muze/./packages/muze-utils/node_modules/datamodel/dist/datamodel.js","webpack://muze/./packages/muze-utils/node_modules/hyperdis/dist/hyperdis.js","webpack://muze/(webpack)/buildin/module.js","webpack://muze/./packages/muze-utils/node_modules/fusioncharts-smartlabel/lib/SmartlabelManager.js","webpack://muze/./packages/muze-utils/node_modules/fusioncharts-smartlabel/lib/lib.js","webpack://muze/./packages/muze/src/index.js","webpack://muze/./packages/muze-utils/node_modules/fusioncharts-smartlabel/lib/container-manager.js","webpack://muze/./packages/muze-utils/node_modules/d3-array/src/ascending.js","webpack://muze/./packages/muze-utils/node_modules/d3-array/src/bisector.js","webpack://muze/./packages/muze-utils/node_modules/d3-array/src/bisect.js","webpack://muze/./packages/muze-utils/node_modules/d3-array/src/cross.js","webpack://muze/./packages/muze-utils/node_modules/d3-array/src/number.js","webpack://muze/./packages/muze-utils/node_modules/d3-array/src/array.js","webpack://muze/./packages/muze-utils/node_modules/d3-array/src/range.js","webpack://muze/./packages/muze-utils/node_modules/d3-array/src/ticks.js","webpack://muze/./packages/muze-utils/node_modules/d3-array/src/threshold/sturges.js","webpack://muze/./packages/muze-utils/node_modules/d3-array/src/quantile.js","webpack://muze/./packages/muze-utils/node_modules/d3-collection/src/map.js","webpack://muze/./packages/muze-utils/node_modules/d3-collection/src/nest.js","webpack://muze/./packages/muze-utils/node_modules/d3-collection/src/set.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/array.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/ordinal.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/band.js","webpack://muze/./packages/muze-utils/node_modules/d3-color/src/define.js","webpack://muze/./packages/muze-utils/node_modules/d3-color/src/color.js","webpack://muze/./packages/muze-utils/node_modules/d3-color/src/math.js","webpack://muze/./packages/muze-utils/node_modules/d3-color/src/lab.js","webpack://muze/./packages/muze-utils/node_modules/d3-color/src/cubehelix.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/basis.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/constant.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/color.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/rgb.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/number.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/basisClosed.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/string.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/transform/parse.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/value.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/date.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/array.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/object.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/round.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/transform/decompose.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/transform/index.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/zoom.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/hsl.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/hcl.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/cubehelix.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/piecewise.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/quantize.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/constant.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/number.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/continuous.js","webpack://muze/./packages/muze-utils/node_modules/d3-format/src/formatDecimal.js","webpack://muze/./packages/muze-utils/node_modules/d3-format/src/exponent.js","webpack://muze/./packages/muze-utils/node_modules/d3-format/src/formatSpecifier.js","webpack://muze/./packages/muze-utils/node_modules/d3-format/src/formatTrim.js","webpack://muze/./packages/muze-utils/node_modules/d3-format/src/formatPrefixAuto.js","webpack://muze/./packages/muze-utils/node_modules/d3-format/src/defaultLocale.js","webpack://muze/./packages/muze-utils/node_modules/d3-format/src/formatRounded.js","webpack://muze/./packages/muze-utils/node_modules/d3-format/src/formatTypes.js","webpack://muze/./packages/muze-utils/node_modules/d3-format/src/identity.js","webpack://muze/./packages/muze-utils/node_modules/d3-format/src/locale.js","webpack://muze/./packages/muze-utils/node_modules/d3-format/src/formatGroup.js","webpack://muze/./packages/muze-utils/node_modules/d3-format/src/formatNumerals.js","webpack://muze/./packages/muze-utils/node_modules/d3-format/src/precisionFixed.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/tickFormat.js","webpack://muze/./packages/muze-utils/node_modules/d3-format/src/precisionPrefix.js","webpack://muze/./packages/muze-utils/node_modules/d3-format/src/precisionRound.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/linear.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/identity.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/nice.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/log.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/pow.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/quantile.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/quantize.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/threshold.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/interval.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/millisecond.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/duration.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/second.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/minute.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/hour.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/day.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/week.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/month.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/year.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/utcMinute.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/utcHour.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/utcDay.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/utcWeek.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/utcMonth.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/utcYear.js","webpack://muze/./packages/muze-utils/node_modules/d3-time-format/src/locale.js","webpack://muze/./packages/muze-utils/node_modules/d3-time-format/src/defaultLocale.js","webpack://muze/./packages/muze-utils/node_modules/d3-time-format/src/isoFormat.js","webpack://muze/./packages/muze-utils/node_modules/d3-time-format/src/isoParse.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/time.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/colors.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/category10.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/category20b.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/category20.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/category20c.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/cubehelix.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/rainbow.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/viridis.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/sequential.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/colors.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/categorical/Accent.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/categorical/category10.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/categorical/Dark2.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/categorical/Paired.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/categorical/Pastel1.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/categorical/Pastel2.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/categorical/Set1.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/categorical/Set2.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/categorical/Set3.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/ramp.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/diverging/BrBG.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/diverging/PRGn.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/diverging/PiYG.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/diverging/PuOr.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/diverging/RdBu.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/diverging/RdGy.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/diverging/RdYlBu.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/diverging/RdYlGn.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/diverging/Spectral.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/BuGn.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/BuPu.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/GnBu.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/OrRd.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/PuBuGn.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/PuBu.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/PuRd.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/RdPu.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/YlGnBu.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/YlGn.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/YlOrBr.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/YlOrRd.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-single/Blues.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-single/Greens.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-single/Greys.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-single/Purples.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-single/Reds.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-single/Oranges.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/cubehelix.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/rainbow.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/sinebow.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/viridis.js","webpack://muze/./packages/muze-utils/src/enums/reserved-fields.js","webpack://muze/./packages/muze-utils/src/enums/common-props.js","webpack://muze/./packages/muze-utils/node_modules/d3-axis/src/array.js","webpack://muze/./packages/muze-utils/node_modules/d3-axis/src/identity.js","webpack://muze/./packages/muze-utils/node_modules/d3-axis/src/axis.js","webpack://muze/./packages/muze-utils/node_modules/d3-path/src/path.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/constant.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/math.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/arc.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/curve/linear.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/point.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/line.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/area.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/descending.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/identity.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/curve/radial.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/lineRadial.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/array.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/symbol/circle.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/symbol/cross.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/symbol/diamond.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/symbol/star.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/symbol/square.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/symbol/triangle.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/symbol/wye.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/noop.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/curve/basis.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/curve/basisClosed.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/curve/basisOpen.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/curve/bundle.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/curve/cardinal.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/curve/cardinalClosed.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/curve/cardinalOpen.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/curve/catmullRom.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/curve/catmullRomClosed.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/curve/catmullRomOpen.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/curve/linearClosed.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/curve/monotone.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/curve/natural.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/curve/step.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/offset/none.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/order/none.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/stack.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/order/ascending.js","webpack://muze/./packages/muze-utils/node_modules/d3-ease/src/cubic.js","webpack://muze/./packages/muze-utils/node_modules/d3-ease/src/poly.js","webpack://muze/./packages/muze-utils/node_modules/d3-ease/src/sin.js","webpack://muze/./packages/muze-utils/node_modules/d3-ease/src/bounce.js","webpack://muze/./packages/muze-utils/node_modules/d3-ease/src/back.js","webpack://muze/./packages/muze-utils/node_modules/d3-ease/src/elastic.js","webpack://muze/./packages/muze-utils/node_modules/d3-voronoi/src/constant.js","webpack://muze/./packages/muze-utils/node_modules/d3-voronoi/src/point.js","webpack://muze/./packages/muze-utils/node_modules/d3-voronoi/src/RedBlackTree.js","webpack://muze/./packages/muze-utils/node_modules/d3-voronoi/src/Edge.js","webpack://muze/./packages/muze-utils/node_modules/d3-voronoi/src/Cell.js","webpack://muze/./packages/muze-utils/node_modules/d3-voronoi/src/Circle.js","webpack://muze/./packages/muze-utils/node_modules/d3-voronoi/src/Beach.js","webpack://muze/./packages/muze-utils/node_modules/d3-voronoi/src/Diagram.js","webpack://muze/./packages/muze-utils/node_modules/d3-voronoi/src/voronoi.js","webpack://muze/./packages/muze-utils/src/common-utils.js","webpack://muze/./packages/muze-utils/node_modules/d3-ease/src/linear.js","webpack://muze/./packages/muze-utils/node_modules/d3-ease/src/circle.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/symbol.js","webpack://muze/./packages/muze-utils/src/enums/stack-config.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/order/descending.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/offset/diverging.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/offset/expand.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/offset/wiggle.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/pie.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/namespaces.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/namespace.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/creator.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selector.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selectorAll.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/matcher.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/sparse.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/enter.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/constant.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/data.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/sort.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/attr.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/window.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/style.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/classed.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/text.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/html.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/raise.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/lower.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/insert.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/remove.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/clone.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/on.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/dispatch.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/index.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/select.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/selectAll.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/filter.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/exit.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/merge.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/order.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/call.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/nodes.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/node.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/size.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/empty.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/each.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/property.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/append.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/datum.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/select.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/local.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/sourceEvent.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/point.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/mouse.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/touch.js","webpack://muze/./packages/muze-utils/node_modules/d3-dispatch/src/dispatch.js","webpack://muze/./packages/muze-utils/node_modules/d3-drag/src/noevent.js","webpack://muze/./packages/muze-utils/node_modules/d3-drag/src/nodrag.js","webpack://muze/./packages/muze-utils/node_modules/d3-drag/src/constant.js","webpack://muze/./packages/muze-utils/node_modules/d3-drag/src/event.js","webpack://muze/./packages/muze-utils/node_modules/d3-drag/src/drag.js","webpack://muze/./packages/muze-utils/node_modules/d3-timer/src/timer.js","webpack://muze/./packages/muze-utils/node_modules/d3-timer/src/timeout.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/schedule.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/tween.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/interpolate.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/remove.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/selection.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/text.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/index.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/select.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/selectAll.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/filter.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/merge.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/transition.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/on.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/attr.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/attrTween.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/style.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/styleTween.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/delay.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/duration.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/ease.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/selection/transition.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/selection/index.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/selection/interrupt.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/interrupt.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/active.js","webpack://muze/./packages/muze-utils/src/renderer-utils.js","webpack://muze/./packages/muze-utils/src/DataSystem/selection.js","webpack://muze/./packages/muze-utils/src/DataSystem/data-object.js","webpack://muze/./packages/muze-utils/src/lifecycle-manager/event-list.js","webpack://muze/./packages/muze-utils/src/lifecycle-manager/lifecycle-manager.js","webpack://muze/./packages/muze-utils/src/lifecycle-manager/index.js","webpack://muze/./packages/muze-firebolt/src/enums/actions.js","webpack://muze/./packages/muze-firebolt/src/enums/selection.js","webpack://muze/./packages/muze-firebolt/src/selection-set/index.js","webpack://muze/./packages/muze-firebolt/src/helper/index.js","webpack://muze/./packages/muze-firebolt/src/firebolt.js","webpack://muze/./packages/muze-firebolt/src/actions/behavioural/generic.js","webpack://muze/./packages/muze-firebolt/src/actions/behavioural/volatile.js","webpack://muze/./packages/muze-firebolt/src/enums/behaviours.js","webpack://muze/./packages/muze-firebolt/src/actions/behavioural/highlight.js","webpack://muze/./packages/muze-firebolt/src/actions/behavioural/brush.js","webpack://muze/./packages/muze-firebolt/src/actions/behavioural/filter.js","webpack://muze/./packages/muze-firebolt/src/actions/behavioural/persistent.js","webpack://muze/./packages/muze-firebolt/src/actions/behavioural/select.js","webpack://muze/./packages/muze-firebolt/src/actions/physical/helpers/drag-action-config.js","webpack://muze/./packages/muze-firebolt/src/actions/physical/helpers/drag-event.js","webpack://muze/./packages/muze-firebolt/src/actions/physical/hover.js","webpack://muze/./packages/muze-firebolt/src/enums/constants.js","webpack://muze/./packages/muze-firebolt/src/actions/physical/helpers/index.js","webpack://muze/./packages/muze-firebolt/src/actions/physical/click.js","webpack://muze/./packages/muze-firebolt/src/actions/physical/index.js","webpack://muze/./packages/muze-firebolt/src/actions/physical/drag.js","webpack://muze/./packages/muze-firebolt/src/actions/physical/longtouch.js","webpack://muze/./packages/muze-firebolt/src/actions/physical/touch-drag.js","webpack://muze/./packages/muze-firebolt/src/side-effects/generic.js","webpack://muze/./packages/muze-firebolt/src/side-effects/surrogate.js","webpack://muze/./packages/muze-firebolt/src/side-effects/spawnable.js","webpack://muze/./packages/muze-firebolt/src/side-effects/selection-box/helper.js","webpack://muze/./packages/muze-firebolt/src/side-effects/selection-box/index.js","webpack://muze/./packages/muze-firebolt/src/actions/physical/selection-box-drag.js","webpack://muze/./packages/muze-tooltip/src/constants.js","webpack://muze/./packages/muze-tooltip/src/default-config.js","webpack://muze/./packages/muze-tooltip/src/helper.js","webpack://muze/./packages/muze-tooltip/src/strategy.js","webpack://muze/./packages/muze-tooltip/src/content.js","webpack://muze/./packages/muze-tooltip/src/tooltip.js","webpack://muze/./packages/muze-firebolt/src/side-effects/tooltip/strategies.js","webpack://muze/./packages/muze-firebolt/src/side-effects/tooltip/index.js","webpack://muze/./packages/muze-firebolt/src/side-effects/helper/index.js","webpack://muze/./packages/muze-firebolt/src/side-effects/crossline/index.js","webpack://muze/./packages/muze-firebolt/src/side-effects/plot-highlighter/strategy.js","webpack://muze/./packages/muze-firebolt/src/side-effects/plot-highlighter/index.js","webpack://muze/./packages/muze-firebolt/src/side-effects/filter/index.js","webpack://muze/./packages/muze-firebolt/src/side-effects/anchors/index.js","webpack://muze/./packages/muze-firebolt/src/side-effects/persistent-anchors.js","webpack://muze/./packages/muze-firebolt/src/side-effects/brush-anchors.js","webpack://muze/./packages/muze-firebolt/src/behaviour-effect-map.js","webpack://muze/./packages/visual-layer/src/enums/constants.js","webpack://muze/./packages/visual-layer/src/layers/area/default-config.js","webpack://muze/./packages/visual-layer/src/simple-layer/simple-layer.js","webpack://muze/./packages/visual-layer/src/enums/props.js","webpack://muze/./packages/muze-axis/src/enums/axis-orientation.js","webpack://muze/./packages/muze-axis/src/enums/scale-type.js","webpack://muze/./packages/muze-axis/src/enums/constants.js","webpack://muze/./packages/muze-axis/src/scale-creator.js","webpack://muze/./packages/muze-axis/src/cartesian-axis/default-config.js","webpack://muze/./packages/muze-axis/src/axis-renderer.js","webpack://muze/./packages/muze-axis/src/cartesian-axis/helper.js","webpack://muze/./packages/muze-axis/src/cartesian-axis/props.js","webpack://muze/./packages/muze-axis/src/cartesian-axis/simple-axis.js","webpack://muze/./packages/muze-axis/src/cartesian-axis/interpolators/linear.js","webpack://muze/./packages/muze-axis/src/cartesian-axis/interpolators/log.js","webpack://muze/./packages/muze-axis/src/cartesian-axis/interpolators/pow.js","webpack://muze/./packages/muze-axis/src/cartesian-axis/continous-axis.js","webpack://muze/./packages/muze-axis/src/cartesian-axis/band-axis.js","webpack://muze/./packages/muze-axis/src/cartesian-axis/time-axis.js","webpack://muze/./packages/muze-axis/src/color-axis/color-maps.js","webpack://muze/./packages/muze-axis/src/color-axis/defaults.js","webpack://muze/./packages/muze-axis/src/color-axis/props.js","webpack://muze/./packages/muze-axis/src/color-axis/color-strategy.js","webpack://muze/./packages/muze-axis/src/color-axis/color-axis.js","webpack://muze/./packages/muze-axis/src/size-axis/defaults.js","webpack://muze/./packages/muze-axis/src/size-axis/size-strategy.js","webpack://muze/./packages/muze-axis/src/size-axis/props.js","webpack://muze/./packages/muze-axis/src/size-axis/size-axis.js","webpack://muze/./packages/muze-axis/src/shape-axis/defaults.js","webpack://muze/./packages/muze-axis/src/shape-axis/props.js","webpack://muze/./packages/muze-axis/src/shape-axis/shape-axis.js","webpack://muze/./packages/muze-axis/src/shape-axis/helper.js","webpack://muze/./packages/muze-axis/src/data-type-scale-map.js","webpack://muze/./packages/transform/src/group-transform/index.js","webpack://muze/./packages/transform/src/identity-transform/index.js","webpack://muze/./packages/transform/src/transform-factory/index.js","webpack://muze/./packages/transform/src/enums/transform-type.js","webpack://muze/./packages/transform/src/stack-transform/index.js","webpack://muze/./packages/visual-layer/src/helpers/index.js","webpack://muze/./packages/visual-layer/src/base-layer/listener-map.js","webpack://muze/./packages/visual-layer/src/base-layer/default-options.js","webpack://muze/./packages/visual-layer/src/base-layer/base-layer.js","webpack://muze/./packages/visual-layer/src/layers/line/renderer.js","webpack://muze/./packages/visual-layer/src/layers/line/default-config.js","webpack://muze/./packages/visual-layer/src/layers/line/line.js","webpack://muze/./packages/visual-layer/src/layers/area/renderer.js","webpack://muze/./packages/visual-layer/src/layers/area/area.js","webpack://muze/./packages/visual-layer/src/layers/arc/default-config.js","webpack://muze/./packages/visual-layer/src/layers/arc/arc.js","webpack://muze/./packages/visual-layer/src/layers/arc/arc-helper.js","webpack://muze/./packages/visual-layer/src/layers/text/renderer.js","webpack://muze/./packages/visual-layer/src/layers/text/default-config.js","webpack://muze/./packages/visual-layer/src/layers/text/text.js","webpack://muze/./packages/visual-layer/src/layers/point/renderer.js","webpack://muze/./packages/visual-layer/src/layers/point/default-config.js","webpack://muze/./packages/visual-layer/src/layers/point/point.js","webpack://muze/./packages/visual-layer/src/layers/bar/renderer.js","webpack://muze/./packages/visual-layer/src/layers/bar/default-config.js","webpack://muze/./packages/visual-layer/src/layers/bar/bar-helper.js","webpack://muze/./packages/visual-layer/src/layers/bar/bar.js","webpack://muze/./packages/visual-layer/src/layers/tick/default-config.js","webpack://muze/./packages/visual-layer/src/layers/tick/renderer.js","webpack://muze/./packages/visual-layer/src/layers/tick/tick.js","webpack://muze/./packages/visual-layer/src/layer-factory/index.js","webpack://muze/./packages/visual-layer/src/defaults.js","webpack://muze/./packages/visual-group/src/enums/constants.js","webpack://muze/./packages/visual-group/src/visual-group/local-options.js","webpack://muze/./packages/visual-group/src/simple-group/simple-group.js","webpack://muze/./packages/visual-group/src/variable/variable.js","webpack://muze/./packages/visual-group/src/variable/composed-vars.js","webpack://muze/./packages/visual-group/src/variable/simple-var.js","webpack://muze/./packages/visual-group/src/encoder/field-sanitizer.js","webpack://muze/./packages/visual-group/src/encoder/visual-encoder.js","webpack://muze/./packages/visual-group/src/enums/scale-maps.js","webpack://muze/./packages/visual-group/src/data-type-scale-map.js","webpack://muze/./packages/visual-group/src/encoder/encoder-helper.js","webpack://muze/./packages/visual-group/src/encoder/cartesian-encoder.js","webpack://muze/./packages/visual-group/src/encoder/polar-encoder.js","webpack://muze/./packages/visual-group/src/encoder/retinal-encoder.js","webpack://muze/./packages/visual-group/src/group-helper/group-utils.js","webpack://muze/./packages/visual-group/src/enums/defaults.js","webpack://muze/./packages/muze-utils/src/DataSystem/dataSelect.js","webpack://muze/./packages/visual-unit/src/firebolt/action-behaviour-map.js","webpack://muze/./packages/visual-unit/src/enums/reactive-props.js","webpack://muze/./packages/visual-unit/src/helper/index.js","webpack://muze/./packages/visual-unit/src/helper/grid-lines.js","webpack://muze/./packages/visual-unit/src/default-config.js","webpack://muze/./packages/visual-unit/src/enums/constants.js","webpack://muze/./packages/visual-unit/src/local-options.js","webpack://muze/./packages/visual-unit/src/listener-map.js","webpack://muze/./packages/visual-unit/src/props.js","webpack://muze/./packages/visual-unit/src/firebolt/helper.js","webpack://muze/./packages/visual-unit/src/firebolt/payload-generator.js","webpack://muze/./packages/visual-unit/src/firebolt/data-propagator.js","webpack://muze/./packages/visual-unit/src/firebolt/index.js","webpack://muze/./packages/visual-unit/src/visual-unit.js","webpack://muze/./packages/visual-group/src/group-helper/matrix-model.js","webpack://muze/./packages/visual-group/src/group-helper/cell-creator.js","webpack://muze/./packages/visual-group/src/group-helper/matrix-resolver.js","webpack://muze/./packages/visual-group/src/visual-group/value-matrix.js","webpack://muze/./packages/visual-group/src/visual-group/change-listener.js","webpack://muze/./packages/visual-group/src/visual-group/props.js","webpack://muze/./packages/visual-group/src/visual-group/visual-group.js","webpack://muze/./packages/muze-legend/src/firebolt/behavioural/select.js","webpack://muze/./packages/muze-legend/src/firebolt/action-behaviour-map.js","webpack://muze/./packages/muze-legend/src/firebolt/behaviour-effect-map.js","webpack://muze/./packages/muze-legend/src/enums/behaviours.js","webpack://muze/./packages/muze-legend/src/enums/side-effects.js","webpack://muze/./packages/muze-legend/src/enums/constants.js","webpack://muze/./packages/muze-legend/src/firebolt/helper.js","webpack://muze/./packages/muze-legend/src/firebolt/legend-firebolt.js","webpack://muze/./packages/muze-legend/src/firebolt/physical/drag.js","webpack://muze/./packages/muze-legend/src/firebolt/physical/hover.js","webpack://muze/./packages/muze-legend/src/firebolt/physical/click.js","webpack://muze/./packages/muze-legend/src/firebolt/physical/index.js","webpack://muze/./packages/muze-legend/src/enums/actions.js","webpack://muze/./packages/muze-legend/src/firebolt/physical/selection-box-drag.js","webpack://muze/./packages/muze-legend/src/firebolt/side-effects/selection-box/index.js","webpack://muze/./packages/muze-legend/src/firebolt/side-effects/legend-highlighter/strategies.js","webpack://muze/./packages/muze-legend/src/firebolt/side-effects/legend-highlighter/index.js","webpack://muze/./packages/muze-legend/src/legend/props.js","webpack://muze/./packages/muze-legend/src/legend/defaults.js","webpack://muze/./packages/muze-legend/src/legend/legend-helper.js","webpack://muze/./packages/muze-legend/src/legend/simple-legend.js","webpack://muze/./packages/muze-legend/src/legend/position-config.js","webpack://muze/./packages/muze-legend/src/legend/renderer.js","webpack://muze/./packages/muze-legend/src/legend/discrete-legend.js","webpack://muze/./packages/muze-legend/src/legend/gradient-helper.js","webpack://muze/./packages/muze-legend/src/legend/gradient-legend.js","webpack://muze/./packages/muze-legend/src/legend/step-legend.js","webpack://muze/./packages/muze/src/constants.js","webpack://muze/./packages/muze/src/operators.js","webpack://muze/./packages/muze/src/action-model.js","webpack://muze/./packages/muze/src/defaults.js","webpack://muze/./packages/muze/src/options.js","webpack://muze/./packages/layout/src/enums/constants.js","webpack://muze/./packages/layout/src/generic-layout/index.js","webpack://muze/./packages/layout/src/grid-layout/defaults.js","webpack://muze/./packages/layout/src/grid-layout/span-maker.js","webpack://muze/./packages/layout/src/grid-layout/renderer.js","webpack://muze/./packages/layout/src/utils/index.js","webpack://muze/./packages/layout/src/visual-matrix/props.js","webpack://muze/./packages/layout/src/visual-matrix/default-config.js","webpack://muze/./packages/layout/src/visual-matrix/visual-matrix.js","webpack://muze/./packages/layout/src/grid-layout/computations.js","webpack://muze/./packages/layout/src/grid-layout/layout.js","webpack://muze/./packages/layout/src/grid-layout/layout-helper.js","webpack://muze/./packages/muze/src/transaction-support.js","webpack://muze/./packages/muze/src/canvas/component-resolver.js","webpack://muze/./packages/visual-cell/src/enums/constants.js","webpack://muze/./packages/visual-cell/src/enums/cell-type.js","webpack://muze/./packages/visual-cell/src/simple-cell.js","webpack://muze/./packages/visual-cell/src/enums/defaults.js","webpack://muze/./packages/visual-cell/src/props.js","webpack://muze/./packages/visual-cell/src/axis-cell.js","webpack://muze/./packages/visual-cell/src/blank-cell.js","webpack://muze/./packages/visual-cell/src/text-cell.js","webpack://muze/./packages/visual-cell/src/geom-cell.js","webpack://muze/./packages/visual-cell/src/defaults.js","webpack://muze/./packages/visual-cell/src/constants.js","webpack://muze/./packages/visual-cell/src/cell-registry.js","webpack://muze/./packages/muze/src/canvas/title-maker.js","webpack://muze/./packages/muze/src/canvas/legend-maker.js","webpack://muze/./packages/muze/src/canvas/layout-maker.js","webpack://muze/./packages/muze/src/canvas/defaults.js","webpack://muze/./packages/muze/src/canvas/local-options.js","webpack://muze/./packages/muze/src/canvas/renderer.js","webpack://muze/./packages/muze/src/canvas/helper.js","webpack://muze/./packages/muze/src/canvas/firebolt.js","webpack://muze/./packages/muze/src/canvas/canvas.js","webpack://muze/./packages/muze/src/default-registry.js","webpack://muze/./packages/visual-layer/src/layer-registry.js","webpack://muze/./packages/muze/src/muze.js"],"names":["webpackUniversalModuleDefinition","root","factory","exports","module","define","amd","window","installedModules","__webpack_require__","moduleId","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","getDefault","getModuleExports","object","property","prototype","hasOwnProperty","p","s","e","_typeof","undefined","__WEBPACK_AMD_DEFINE_RESULT__","__WEBPACK_AMD_DEFINE_FACTORY__","apply","__WEBPACK_AMD_DEFINE_ARRAY__","default","description","homepage","version","license","main","author","keywords","repository","type","url","contributors","email","dependencies","d3-dsv","devDependencies","babel-cli","babel-core","babel-eslint","babel-loader","babel-plugin-transform-runtime","babel-preset-env","babel-preset-es2015","babel-preset-flow","chai","cross-env","eslint","eslint-config-airbnb","eslint-plugin-import","eslint-plugin-jsx-a11y","eslint-plugin-react","istanbul-instrumenter-loader","jsdoc","json2yaml","karma","karma-chai","karma-chrome-launcher","karma-coverage-istanbul-reporter","karma-mocha","karma-spec-reporter","karma-webpack","marked","mocha","mocha-webpack","transform-runtime","webpack","webpack-cli","webpack-dev-server","scripts","test","ut","utd","build","start","lint","lint-errors","docs","u","f","Me","Ve","Ye","Be","a","ct","ft","st","lt","dt","pt","ht","vt","FLAT_JSON","DSV_STR","DSV_ARR","AUTO","CATEGORICAL","TEMPORAL","GEO","DISCRETE","MEASURE","DIMENSION","NORMAL","INVERSE","ALL","length","split","forEach","configurable","writable","TypeError","this","_ref","_rowDiff","sanitize","parsed","getData","fieldType","subType","concat","Array","isArray","from","Set","Math","min","max","parse","clone","fieldName","getMinDiff","unit","scale","defAggFn","push","data","bins","schema","h","Date","v","format","dtParams","nativeDate","RegExp","escape","replace","TOKEN_PREFIX","DATETIME_PARAM_SEQUENCE","YEAR","MONTH","DAY","HOUR","MINUTE","SECOND","MILLISECOND","defaultNumberParser","isFinite","parseInt","defaultRangeParser","toLowerCase","getTokenDefinitions","short","long","H","index","extract","parser","formatter","getHours","toString","P","M","getMinutes","S","getSeconds","K","getMilliseconds","join","getDay","A","getDate","b","getMonth","B","y","substring","getFullYear","Y","getTokenFormalNames","HOUR_12","AMPM_UPPERCASE","AMPM_LOWERCASE","SHORT_DAY","LONG_DAY","DAY_OF_MONTH","DAY_OF_MONTH_CONSTANT_WIDTH","SHORT_MONTH","LONG_MONTH","MONTH_OF_YEAR","SHORT_YEAR","LONG_YEAR","tokenResolver","arguments","findTokens","keys","indexOf","token","formatAs","String","extractTokenValue","noBreak","splice","map","match","shift","getNativeDate","unshift","Function","g","iterator","constructor","_","O","w","E","k","j","T","getTime","round","random","x","F","abs","N","R","createNamespace","fields","fieldsObj","getMeasure","getDimension","D","field","_value","C","next","done","return","L","U","V","G","CROSS","LEFTOUTER","RIGHTOUTER","NATURAL","FULLOUTER","W","getFieldspace","Error","_rowDiffset","Ke","z","X","floor","Q","$","Z","Map","has","set","ee","label","reduce","ne","_colIdentifier","sort","re","ie","ae","oe","sum","avg","every","first","last","count","std","sqrt","pow","ue","ce","fe","store","entries","__unregister","delete","se","le","pe","he","yt","ve","me","ye","ge","fieldDescription","be","_e","ReferenceError","__proto__","getPrototypeOf","fieldUnit","fieldScale","fieldDefAggFn","fieldNumberformat","numberFormat","setPrototypeOf","Number","POSITIVE_INFINITY","NEGATIVE_INFINITY","parseFloat","isNaN","Oe","Ae","trim","_unique","we","Ee","subtype","ke","je","minDiff","_dtf","Se","Te","bin","Fe","xe","dataFormat","assign","firstRowHeader","Ne","Re","De","Pe","Ce","Ie","JSON","stringify","Le","charCodeAt","slice","columns","parseRows","formatRows","Ue","He","fieldSeparator","Je","Ge","qe","We","op","meta","criteria","_derivation","ze","operation","filterByMeasure","getFieldsConfig","values","def","domain","some","valueOf","select","saveChild","Xe","getPartialFieldspace","__calculateFieldspace","calculateFieldsConfig","config","Qe","filter","projField","actualProjField","$e","_partialFieldspace","Ze","et","groupByString","params","tt","nonTraversingModel","excludeModels","handlePropagation","_children","nt","propagationNameSpace","propagateToSource","sourceId","propagateInterpolatedValues","persistent","mutableActions","filterFn","applyOnSource","action","model","models","path","_parent","sourceIdentifiers","propagationSourceId","groupByModel","reverse","rt","it","_fieldStoreName","_propagationNameSpace","immutableActions","_fieldspace","getAllFields","search","_fieldConfig","removeChild","findIndex","at","ot","_onPropagation","_sortingDetails","order","withUid","te","uids","addUid","columnWise","pop","de","defaultReducer","resolve","fieldsArr","replaceVar","addField","isMutableAction","payload","find","propConfig","filterImmutableAction","I","buckets","binCount","binSize","stops","add","mid","range","measureName","binFieldName","mt","Operators","compose","addParent","dispose","project","groupBy","calculateVariable","crossProduct","difference","naturalJoin","leftOuterJoin","rightOuterJoin","fullOuterJoin","union","Stats","DateTimeFormatter","DataFormat","FilteringMode","_set","requestAnimationFrame","webkitRequestAnimationFrame","mozRequestAnimationFrame","oRequestAnimationFrame","msRequestAnimationFrame","setTimeout","__lastTime","__id","unique","qualifiedName","seed","fn","outgoingEdges","accumulate","identity","dep","edges","_seed","requireResolve","retriever","history","resolver","electricEdges","retrieveDetails","q","listeners","nextFrame","currentFrame","qualifiedNodeMap","_wholeSet","_propagate","propagationOverride","currentFrameListeners","nextFrameListeners","_schedule","flush","perv","addDependencies","getDependencies","getResolvedList","addEdges","addElectricNode","append","__execUniqueElectricEdges","toArray","repeatHead","resetPropagationOverride","update","isRoot","_graph","_lockFlag","_reqQ","_addPropInModel","createNodesFrom","createElectricNodeOf","stopPropagation","setPropagationOverride","resetNodeValue","setProp","getNodeValue","getNodeFromQualifiedName","webpackPolyfill","deprecate","paths","children","_interopRequireDefault","obj","_lib2","require","_containerManager2","slLib","init","doc","win","document","htmlSplCharSpace"," ","documentSupport","getDocumentSupport","SVG_BBOX_CORRECTION","isWebKit","SmartLabelManager","id","container","useEllipses","options","wrapper","prop","prevInstance","isBrowserLess","maxCacheLimit","maxDefaultCacheLimit","getElementById","createContainer","innerHTML","testStrAvg","isHeadLess","isIE","offsetHeight","offsetWidth","parentContainerStyle","style","parentContainer","_containerManager","_showNoEllipses","_init","setStyle","textToLines","smartlabel","text","lines","_calCharDimWithCache","calculateDifference","size","csArr","tw","twi","cachedStyle","asymmetricDifference","maxAdvancedCacheLimit","_container","cache","_advancedCache","advancedCacheKey","_advancedCacheKey","cacheName","fontSize","fontFamily","fontWeight","fontStyle","cacheInitName","repeat","width","height","_getWidthFn","contObj","_containerObj","svgText","str","bbox","textContent","getBBox","_styleNotSet","setLineHeight","sCont","node","_context","context","_cache","charCache","_lineHeight","lineHeight","useEllipsesOnOverflow","getSmartText","maxWidth","maxHeight","noWrap","len","trimStr","tempArr","tmpText","maxWidthWithEll","toolText","oriWidth","oriHeight","newCharIndex","nearestChar","tempChar","getWidth","initialLeft","initialTop","getOriSizeImproveObj","spanArr","minWidth","elem","chr","elemRightMostPoint","elemLowestPoint","lastBR","removeFromIndex","removeFromIndexForEllipses","hasHTMLTag","maxStrWidth","lastDash","lastSpace","lastIndexBroken","strWidth","strHeight","oriTextArr","ellipsesStr","ellipsesWidth","dotWidth","characterArr","dashIndex","spaceIndex","lastLineBreak","fastTrim","ws","charAt","smartLabel","oriTextWidth","oriTextHeight","oriText","isTruncated","xmlTagRegEx","ltgtRegex","getOriSize","substr","getNearestBreakIndex","detailObj","tooltext","lastIndexOf","spanAdditionRegx","spanAdditionReplacer","classNameWithTag","classNameWithTagBR","childRetriverFn","childRetriverString","noClassTesting","classNameReg","className","spaceIdx","dashIdx","offsetLeft","offsetTop","parentNode","insertBefore","createElement","classNameBrReg","spanRemovalRegx","error","detailedCalculationFlag","textArr","letter","lSize","cumulativeSize","indiSizeStore","lib","userAgent","navigator","ceil","clsNameSpace","containerClass","brReplaceRegex","position","top","whiteSpace","padding","overflow","supportedStyle","font","font-family","font-weight","font-size","line-height","font-style","getElementsByClassName","opera","hasSVG","Boolean","SVGAngle","implementation","hasFeature","containerParent","body","appendChild","setAttribute","getElementsByTagName","sl","charLen","increment","avgWidth","styleObj","fSize","Muze","ContainerManager","maxContainers","svg","containers","rootNode","createElementNS","setAttributeNS","svgRoot","diff","containerObj","keyStr","prev","removeContainer","addContainer","avgCharWidth","display","cObj","ascending","NaN","bisector","compare","ascendingComparator","left","lo","hi","right","ascendingBisect","bisectRight","number","array","src_range","stop","step","e10","e5","e2","src_ticks","ticks","tickIncrement","power","log","LN10","tickStep","step0","step1","quantile","valueof","i0","value0","each","remove","clear","empty","src_nest","sortValues","rollup","nest","sortKeys","depth","createResult","setResult","keyValue","valuesByKey","result","createObject","setObject","createMap","setMap","sortKey","proto","implicit","ordinal","unknown","copy","band","bandwidth","ordinalRange","paddingInner","paddingOuter","align","rescale","sequence","rangeRound","invertExtent","r0","r1","hiIndex","getClosestIndexOf","invert","arr","side","highVal","d1","low","high","extend","parent","definition","Color","reI","reN","reP","reHex3","reHex6","reRgbInteger","reRgbPercent","reRgbaInteger","reRgbaPercent","reHslPercent","reHslaPercent","named","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","color","exec","Rgb","rgbn","rgba","hsla","rgbConvert","rgb","opacity","hex","Hsl","hsl","hslConvert","hsl2rgb","m1","m2","displayable","brighter","darker","deg2rad","PI","rad2deg","Xn","Yn","Zn","t0","t1","t2","t3","labConvert","Lab","Hcl","cos","sin","rgb2lrgb","xyz2lab","lab","lab2xyz","lrgb2rgb","hclConvert","atan2","hcl","ED","EB","BC_DA","cubehelix","cubehelixConvert","Cubehelix","bl","basis","v0","v1","v2","v3","cosh","sinh","src_constant","linear","hue","constant","gamma","nogamma","exponential","src_rgb","rgbGamma","end","colorRgb","rgbSpline","spline","colors","rgbBasis","src_number","reA","reB","source","cssNode","cssRoot","cssView","svgNode","src_string","am","bm","bs","bi","lastIndex","one","zero","src_value","value_typeof","string","setTime","nb","na","src_round","degrees","translateX","translateY","rotate","skewX","scaleX","scaleY","decompose","atan","interpolateTransform","pxComma","pxParen","degParen","translate","xa","ya","xb","yb","interpolateTransformCss","parseCss","documentElement","defaultView","transform","getComputedStyle","getPropertyValue","interpolateTransformSvg","parseSvg","baseVal","consolidate","matrix","SQRT2","colorHsl","hslLong","colorHcl","cubehelixGamma","colorCubehelix","cubehelixLong","piecewise","interpolate","d3_scale_src_constant","d3_scale_src_number","deinterpolateLinear","bimap","deinterpolate","reinterpolate","d0","polymap","bisect","target","clamp","continuous","output","input","interpolateValue","deinterpolateClamp","reinterpolateClamp","interpolateRound","formatDecimal","toExponential","coefficient","src_exponent","formatSpecifier","specifier","FormatSpecifier","fill","sign","symbol","comma","precision","prefixExponent","locale","formatPrefix","formatTrim","out","i1","formatRounded","exponent","formatTypes","%","toFixed","toPrecision","toUpperCase","src_identity","prefixes","src_locale","group","grouping","thousands","formatGroup","currency","decimal","numerals","formatNumerals","percent","newFormat","prefix","suffix","formatType","maybeSuffix","valuePrefix","valueSuffix","valueNegative","Infinity","defaultLocale","formatLocale","src_tickFormat","precisionPrefix","precisionRound","precisionFixed","linearish","tickFormat","nice","src_nice","interval","x0","x1","pow10","powp","base","exp","logp","log10","log2","reflect","logs","pows","raise","thresholds","threshold","quantiles","quantize","newInterval","floori","offseti","date","offset","previous","millisecond","durationMinute","durationWeek","second","getUTCSeconds","src_second","minute","src_minute","hour","getTimezoneOffset","day","setHours","setDate","weekday","sunday","monday","tuesday","wednesday","thursday","friday","saturday","month","setMonth","year","setFullYear","utcMinute","setUTCSeconds","getUTCMinutes","utcHour","setUTCMinutes","getUTCHours","utcDay","setUTCHours","setUTCDate","getUTCDate","src_utcDay","utcWeekday","getUTCDay","utcSunday","utcMonday","utcTuesday","utcWednesday","utcThursday","utcFriday","utcSaturday","utcMonth","setUTCMonth","getUTCMonth","getUTCFullYear","utcYear","setUTCFullYear","localDate","utcDate","UTC","newYear","timeFormat","utcFormat","utcParse","pads","-","0","numberRe","percentRe","requoteRe","pad","requote","formatRe","names","formatLookup","parseWeekdayNumberSunday","parseWeekdayNumberMonday","parseWeekNumberSunday","parseWeekNumberISO","parseWeekNumberMonday","parseFullYear","parseYear","parseZone","parseMonthNumber","parseDayOfMonth","parseDayOfYear","parseHour24","parseMinutes","parseSeconds","parseMilliseconds","parseMicroseconds","parseLiteralPercent","parseUnixTimestamp","parseUnixTimestampSeconds","formatDayOfMonth","formatHour24","formatHour12","formatDayOfYear","timeDay","timeYear","formatMilliseconds","formatMicroseconds","formatMonthNumber","formatMinutes","formatSeconds","formatWeekdayNumberMonday","formatWeekNumberSunday","timeSunday","formatWeekNumberISO","timeThursday","formatWeekdayNumberSunday","formatWeekNumberMonday","timeMonday","formatYear","formatFullYear","formatZone","formatUTCDayOfMonth","formatUTCHour24","formatUTCHour12","formatUTCDayOfYear","formatUTCMilliseconds","getUTCMilliseconds","formatUTCMicroseconds","formatUTCMonthNumber","formatUTCMinutes","formatUTCSeconds","formatUTCWeekdayNumberMonday","dow","formatUTCWeekNumberSunday","formatUTCWeekNumberISO","formatUTCWeekdayNumberSunday","formatUTCWeekNumberMonday","formatUTCYear","formatUTCFullYear","formatUTCZone","formatLiteralPercent","formatUnixTimestamp","formatUnixTimestampSeconds","locale_dateTime","dateTime","locale_date","locale_time","time","locale_periods","periods","locale_weekdays","days","locale_shortWeekdays","shortDays","locale_months","months","locale_shortMonths","shortMonths","periodRe","periodLookup","weekdayRe","weekdayLookup","shortWeekdayRe","shortWeekdayLookup","monthRe","monthLookup","shortMonthRe","shortMonthLookup","formats","formatShortWeekday","formatWeekday","formatShortMonth","formatMonth","formatPeriod","utcFormats","formatUTCShortWeekday","formatUTCWeekday","formatUTCShortMonth","formatUTCMonth","formatUTCPeriod","parses","parseShortWeekday","parseWeekday","parseShortMonth","parseMonth","parseLocaleDateTime","parseSpecifier","parsePeriod","parseLocaleDate","parseLocaleTime","newParse","newDate","week","toISOString","durationSecond","durationHour","durationDay","durationMonth","durationYear","calendar","formatMillisecond","formatSecond","formatMinute","formatHour","formatDay","formatWeek","tickIntervals","tickInterval","src_time","timeMonth","timeWeek","timeHour","timeMinute","timeSecond","timeMillisecond","src_colors","interpolateCubehelixLong","ramp","sequential","interpolator","d3_scale_chromatic_src_colors","src_ramp","scheme","interpolateRgbBasis","warm","cool","sequential_multi_rainbow","ts","sequential_multi_viridis","magma","inferno","plasma","ReservedFields","ROW_ID","CommonProps","ACTION_INF","ON_LAYER_DRAW","d3_axis_src_identity","bottom","epsilon","entering","__axis","axis","orient","tickArguments","tickValues","tickTransform","tickSizeInner","tickSizeOuter","tickPadding","spacing","range0","range1","center","selection","selectAll","tick","tickExit","exit","tickEnter","enter","attr","line","merge","insert","transition","getAttribute","tickSize","pi","tau","tauEpsilon","Path","_x0","_y0","_x1","_y1","moveTo","closePath","lineTo","quadraticCurveTo","y1","bezierCurveTo","x2","y2","arcTo","y0","x21","y21","x01","y01","l01_2","x20","y20","l21_2","l20_2","l21","l01","acos","t01","t21","arc","a0","a1","ccw","dx","dy","cw","da","rect","d3_shape_src_constant","halfPi","asin","arcInnerRadius","innerRadius","arcOuterRadius","outerRadius","arcStartAngle","startAngle","arcEndAngle","endAngle","arcPadAngle","padAngle","cornerTangents","rc","ox","oy","x11","y11","x10","y10","x00","y00","d2","cx0","cy0","cx1","cy1","dx0","dy0","dx1","dy1","cx","cy","Linear","areaStart","_line","areaEnd","lineStart","_point","lineEnd","point","curve_linear","src_line","pointX","pointY","defined","curve","curveLinear","buffer","defined0","src_area","area","x0z","y0z","arealine","lineX0","lineY0","lineY1","lineX1","src_descending","d3_shape_src_identity","curveRadial","Radial","_curve","radial","symbol_circle","draw","symbol_cross","tan30","tan30_2","diamond","kr","kx","ky","star","square","sqrt3","triangle","wye","noop","that","Basis","BasisClosed","_x2","_x3","_x4","_y2","_y3","_y4","BasisOpen","Bundle","beta","_basis","_beta","_x","_y","custom","bundle","_k","Cardinal","tension","cardinal","CardinalClosed","_x5","_y5","CardinalOpen","_l01_a","_l01_2a","_l12_a","_l12_2a","_l23_a","_l23_2a","CatmullRom","alpha","_alpha","x23","y23","curve_catmullRom","catmullRom","CatmullRomClosed","CatmullRomOpen","LinearClosed","slope3","h0","h1","s0","s1","slope2","MonotoneX","MonotoneY","ReflectContext","Natural","controlPoints","_t0","px","py","Step","_t","curve_step","stepBefore","stepAfter","none","series","order_none","stackValue","order_ascending","sums","cubicInOut","polyIn","polyOut","polyInOut","b1","b2","b3","b4","b5","b6","b7","b8","b9","b0","bounceOut","backIn","overshoot","backOut","backInOut","elasticOut","elasticIn","amplitude","period","d3_voronoi_src_constant","elasticInOut","RedBlackTree","RedBlackNode","RedBlackRotateLeft","tree","RedBlackRotateRight","RedBlackFirst","after","grandpa","uncle","sibling","createEdge","edge","setEdgeEnd","cells","halfedges","createBorderEdge","vertex","clipEdge","ax","ay","connectEdge","fm","fb","lx","ly","rx","ry","fx","fy","cellHalfedgeAngle","cell","site","va","vb","cellHalfedgeStart","cellHalfedgeEnd","firstCircle","circlePool","attachCircle","lArc","rArc","lSite","cSite","rSite","bx","by","epsilon2","ha","hc","circle","Circle","before","circles","detachCircle","beachPool","createBeach","beach","Beach","detachBeach","beaches","removeBeach","disappearing","iArc","nArcs","addBeach","dxl","dxr","directrix","leftBreakPoint","rightBreakPoint","createCell","newArc","hb","rfocx","rfocy","pby2","lfocx","lfocy","plby2","hl","aby2","triangleArea","lexicographic","Diagram","sites","extent","sortCellHalfedges","clipEdges","clipCells","iCell","iHalfedge","nHalfedges","startX","startY","endX","endY","nCells","cover","dc","v00","v01","v11","v10","polygons","polygon","triangles","e1","links","radius","_found","vx","vy","src_voronoi","voronoi","HTMLElement","isSimpleObject","common_utils_typeof","getUniqueId","sanitizeIP","typeObj","nonExistentKeys","checkExistence","getMax","_toConsumableArray","getMin","getDomainFromData","domArr","DimensionSubtype","firstMin","secondMin","firstMax","secondMax","symbolFns","symbolCircle","cross","symbolCross","symbolDiamond","symbolSquare","symbolStar","symbolWye","symbolTriangle","easeFns","cubic","easeCubic","bounce","easeBounce","elastic","easeElastic","back","easeBack","poly","easePoly","circleInOut","getQualifiedClassName","cancelAnimationFrame","cls","defaultValue","param","objectIterator","Voronoi","_classCallCheck","_voronoi","_voronoiFn","Store","Model","_listeners","serialize","propName","propNames","callBack","instantCall","props","on","calculatedProp","intSanitizer","val","transactor","holder","conf","_loop","_defineProperty","_len","_key","compareTo","paramsLen","prevVal","spreadParams","sanitization","typeCheck","typeExpected","preset","oldValues","generateGetterSetters","propInfo","typeChecker","isEqual","oldVal","newVal","arraysEqual","arr1","arr2","is","ERROR_MSG","INTERFACE_IMPL","mergeRecursive","sink","numberInterpolator","interpolateNumber","piecewiseInterpolator","rgbToHsv","detectColor","col","getDataModelFromRange","dataModel","selFields","selFn","getDataModelFromIdentifiers","identifiers","filteredDataModel","fieldsConfig","dataArr","filteredSchema","include","propField","idx","registerListeners","listenerMap","propListenerMap","mapObj","propType","listenerFn","listener","isValidValue","getObjProp","_len2","_key2","retObj","getSymbol","stackOrders","stackOrderNone","_stackOrders","stackOrderAscending","stackOffsets","yp","yn","_stackOffsets","stackOffsetNone","s2","si","sij0","s3","sk","stack","orderNone","offsetNone","oz","kz","sz","sij","ki","d3Stack","pathInterpolators","curveStepAfter","curveStepBefore","curveStep","curveCatmullRom","Symbols","axisLeft","axisRight","axisTop","axisBottom","pie","descending","arcs","pa","cornerRadius","padRadius","a01","a11","a00","a10","da0","da1","ap","rp","rc0","rc1","p0","p1","oc","intersect","x3","y3","x32","y32","kc","lc","centroid","Scales","scaleBand","getSmallestDiff","points","xhtml","namespaces","xlink","xml","xmlns","namespace","space","local","creator","fullname","creatorFixed","ownerDocument","creatorInherit","uri","namespaceURI","src_selector","selector","querySelector","selectorAll","querySelectorAll","matcher","matches","element","vendorMatches","webkitMatchesSelector","msMatchesSelector","mozMatchesSelector","oMatchesSelector","sparse","EnterNode","datum","_next","__data__","child","keyPrefix","bindIndex","groupLength","dataLength","bindKey","nodeByKeyValue","keyValues","src_window","styleValue","classArray","classList","ClassList","_node","_names","classedAdd","list","classedRemove","contains","textRemove","htmlRemove","nextSibling","lower","previousSibling","firstChild","constantNull","selection_cloneShallow","cloneNode","selection_cloneDeep","filterEvents","event","mouseenter","mouseleave","filterContextListener","contextListener","related","relatedTarget","compareDocumentPosition","event1","event0","onRemove","typename","__on","removeEventListener","capture","onAdd","wrap","addEventListener","customEvent","args","sourceEvent","dispatchEvent","CustomEvent","createEvent","initEvent","bubbles","cancelable","detail","Selection","groups","parents","_groups","_parents","subgroups","subnode","subgroup","enterGroup","updateGroup","_enter","_exit","groups0","groups1","m0","merges","group0","group1","compareNode","sortgroups","sortgroup","callback","nodes","getAttributeNS","attrRemoveNS","removeAttributeNS","attrRemove","removeAttribute","attrFunctionNS","attrFunction","attrConstantNS","attrConstant","priority","styleRemove","removeProperty","styleFunction","setProperty","styleConstant","propertyRemove","propertyFunction","propertyConstant","classed","classedFunction","classedTrue","classedFalse","textFunction","textConstant","html","htmlFunction","htmlConstant","deep","typenames","parseTypenames","dispatch","dispatchFunction","dispatchConstant","src_select","nextId","Local","current","src_point","ownerSVGElement","createSVGPoint","clientX","clientY","matrixTransform","getScreenCTM","inverse","getBoundingClientRect","clientLeft","clientTop","mouse","changedTouches","src_touch","touches","identifier","touch","Dispatch","types","nopropagation","stopImmediatePropagation","noevent","preventDefault","nodrag","view","__noselect","MozUserSelect","d3_drag_src_constant","DragEvent","subject","active","defaultFilter","button","defaultContainer","defaultSubject","defaultTouchable","taskHead","taskTail","src_drag","mousedownx","mousedowny","mousemoving","touchending","touchable","gestures","clickDistance2","drag","mousedowned","touchstarted","touchmoved","touchended","gesture","beforestart","mousemoved","mouseupped","yesdrag","noclick","clearTimeout","sublisteners","clickDistance","frame","timeout","pokeDelay","clockLast","clockNow","clockSkew","clock","performance","timer_typeof","now","setFrame","clearNow","Timer","_call","_time","timer","delay","restart","wake","timerFlush","nap","sleep","poke","clearInterval","setInterval","src_timeout","elapsed","emptyOn","emptyTween","CREATED","SCHEDULED","STARTING","STARTED","RUNNING","ENDING","ENDED","transition_schedule","timing","schedules","__transition","self","tween","state","duration","ease","schedule","tweenValue","_id","transition_interpolate","interpolateRgb","interpolateString","Transition","_name","newId","selection_prototype","inherit","id0","id1","onFunction","on0","on1","sit","attrTween","value00","value10","interpolate0","value1","attrTweenNS","styleTween","styleRemoveEnd","removeFunction","tweenRemove","tween0","tween1","tweenFunction","delayFunction","delayConstant","durationFunction","durationConstant","easeConstant","defaultTiming","easeCubicInOut","interrupt","selectElement","makeElement","elemType","callbacks","keyFn","SVGElement","selectorVal","selectorType","actualSelector","enterSel","mergeSel","exitSel","_len3","_key3","applyStyle","setElementAttrs","attrs","setAttrs","setStyles","styles","createElements","sel","getClientPoint","pos","clientPoint","getEvent","d3event","getD3Drag","d3drag","getSmartComputedStyle","css","textEl","mandatoryStyle","fill-opacity","renderer_utils_typeof","computedStyle","styleForSmartLabel","hasTouch","selection_classCallCheck","_data","_idMap","_mode","_enterdata","_exitdata","_this","newData","idGetter","_this2","_idGetter","tempMap","purgedIds","purged","temp","_this3","item","_this4","_this5","_this6","DataObject","data_object_classCallCheck","events","EVENT_LIST","composition","resolveFn","notification","hasOwn","LifeCycleManager","lifecycle_manager_classCallCheck","_eventList","_promises","_notifiers","_lifeCycles","_unreleasedLifeCycles","_boot","acc","_preparePromises","eventName","Promise","_makeNotifierPromise","formalName","client","_releasePromisesFromCache","_notify","stage","_resolvePromise","promise","retrieve","_callLifeCycleCallback","_cachePromise","_resetTargetPromise","lifeCycles","DRAG","HOVER","SELECTIONDRAG","CLICK","LONGTOUCH","TOUCHDRAG","ALL_ACTIONS","SELECTION_NEW_ENTRY","SELECTION_NEW_EXIT","SELECTION_NULL","SELECTION_OLD_ENTRY","SELECTION_OLD_EXIT","SelectionSet","completeSet","_volatile","selection_set_classCallCheck","_completeSetCount","_lockedSelection","_resetted","ids","entrySet","exitSet","lockedSel","addSet","removeSet","updateSet","changeSideEffectAvailability","toEnable","sideEffects","change","enable","disable","getMergedSet","helper_toConsumableArray","conditionsMap","newEntry","SELECTION","oldEntry","mergedEnter","newExit","oldExit","mergedExit","complete","getSetInfo","selectionSet","propagationData","resetted","getModelFromSet","condition","Firebolt","actions","behaviourEffectMap","firebolt_classCallCheck","_sideEffectDefinitions","_sideEffects","_propagationInf","_actions","behavioural","physical","_selectionSet","_volatileSelectionSet","_propagationFields","_sourceSideEffects","selectionBox","_propagationBehaviourMap","_sourceBehaviours","_actionBehaviourMap","_config","_behaviourEffectMap","_entryExitSet","_actionHistory","_queuedSideEffects","_mappedActions","mapSideEffects","registerBehaviouralActions","registerSideEffects","registerPhysicalBehaviouralMap","physicalBehaviouralMap","registerPhysicalActions","sideEffectConf","behEffectMap","preventDefaultActions","effectNames","effects","firebolt_toConsumableArray","behaviours","initializeBehaviouralActions","dispatchableBehaviours","Action","prepareSelectionSets","sideEffectStore","actionHistory","queuedSideEffects","sideEffect","combinedSet","unionSets","behaviour","entryExitSet","existingModel","effect","firebolt_typeof","sideEffectInstance","isEnabled","mutates","dispatchSideEffect","propagationInfo","propagate","getSideEffects","propagationSelectionSet","getPropagationSelectionSet","shouldApplySideEffects","sourceSelectionSet","applicableSideEffects","getApplicableSideEffects","applySideEffects","physicalAction","actionBehaviourMap","behaviourMap","unsubscribe","onDataModelPropagation","propValue","dispatchBehaviour","uniqueIds","behaviouralActions","volatileSelectionSet","sideEffectDefinitions","initializeSideEffects","sideEffectsMap","SideEffect","initedActions","initializePhysicalActions","physicalActions","initedPhysicalActions","mappedActions","getDefaultTargetContainer","keyName","bindActionWithBehaviour","targets","behaviourList","mount","propagationInf","xFields","yFields","xMeasures","FieldType","yMeasures","filterPropagationModel","propModel","measures","_propModel$getData","filteredModel","fieldMap","row","getFullData","propagationSource","applicableSelectionSets","GenericBehaviour","firebolt","generic_classCallCheck","_enabled","selectionSets","getSelectionSets","_firebolt$getAddSetFr","getAddSetFromCriteria","getPropagationInf","setSelectionSet","getEntryExitSet","_selectionSet$getSets","getSets","setConfig","isSourceFieldPresent","getSourceFields","getSchema","VolatileBehaviour","reset","existingAddSet","updateExit","getCompleteSet","BRUSH","HIGHLIGHT","TOOLTIP","FILTER","SELECT","HighlightBehaviour","BrushBehaviour","BEHAVIOURNAMES","FilterBehaviour","PersistentBehaviour","updateEntry","mergedExitSet","completeSetCount","SelectBehaviour","getDragActionConfig","sourceInfo","axes","xAxis","yAxis","axisFields","xField","getMembers","yField","xFieldType","yFieldType","dimensions","stPos","startPos","endPos","dragDim","isXDimension","isYDimension","xRange","yRange","selectedDomains","rangeObj","xdom","ydom","snap","getNearestRange","attachDragEvent","targetEl","drawingInf","d3Drag","touchStart","getDrawingContext","getSourceInfo","beh","dragEnd","hover","interaction","tooltip","svgContainer","nearestPoint","getNearestPoint","getAllPoints","showInPosition","generatePayloadFromEvent","click","ACTIONNAMES","physical_defineProperty","_physicalActions","longtouch","touchEnd","touchdrag","GenericSideEffect","side_effects_generic_classCallCheck","_strategy","_strategies","defaultConfig","SurrogateSideEffect","interactionType","layers","layer","interactive","applyInteractionStyle","SpawnableSideEffect","_drawingContext","changeVisibility","sideEffectGroup","visible","defClassName","classPrefix","SelectionBox","boxConf","box","drawingContext","mountPoint","unitWidth","unitHeight","selectionGroupClassName","hide","sourceInf","_getBoxDimensionsFrom","getBoxDimensionsFromPayload","direction","xDim","yDim","xLinear","yLinear","xCriteria","yCriteria","bandScale","x1Val","x2Val","x1DomainIndex","x2DomainIndex","_sort","_sort2","helper_slicedToArray","getScaleValue","getUnitWidth","y1Val","y2Val","y1DomainIndex","y2DomainIndex","_sort3","_sort4","_xDim","_yDim","dimension","show","selectionBoxDrag","onDrag","boxClassName","INITIAL_STYLE","connectorClassName","margin","content","iconContainerSize","iconScale","iconShape","iconColor","rowMargin","separator","parentClassName","arrow","disabled","getArrowPos","dim","measurement","arrowPos","boxHeight","boxWidth","arrowWidth","plotBottom","boxBottom","plotRight","boxRight","placeArrow","tooltipArrow","_tooltipArrow","tooltipBackground","_tooltipBackground","arrowConf","_arrowOrientation","timeFormats","timeDurations","defaultTooltipFormatters","_formatters","formatters","nearestInterval","getNearestInterval","strategy_defineProperty","buildTooltipData","fieldValues","dataObj","fieldspace","dimensionMeasureMap","detailFields","containsDetailField","dataLen","getRowContent","formattedValue","measureIndex","formatterFn","uniqueVals","strategy_toConsumableArray","colorAxis","shapeAxis","shape","sizeAxis","isRetinalField","associatedMeasures","icon","getColor","getShape","getSize","measure","margin-left","displayFormat","getTabularData","timeDiffs","rows","fieldObj","allMeasures","strategy","DEFAULT_STRATEGY","Content","content_classCallCheck","_model","_formatter","ctx","_mount","table","tbody","margin-right","el","Tooltip","htmlContainer","tooltip_classCallCheck","connectorContainer","tooltipConf","contentClass","_tooltipContainer","_contentContainer","_contents","_tooltipConnectorContainer","qualifiedClassName","addClass","defConf","contentConfig","reorderContainers","contentConf","render","_target","repositionArrow","arrowDisabled","arrowOrient","outsidePlot","connector","_offset","orientation","_extent","arrowSize","topSpace","dimX","rightSpace","leftSpace","positionTop","positionRight","positionLeft","positionHorizontal","positionVertical","_position","_arrowPos","strategies","showSelectedItems","dm","aggregatedModel","fieldsConf","measureNames","side_effects_tooltip_classCallCheck","tooltip_possibleConstructorReturn","_tooltips","totalHeight","totalWidth","isEmpty","tooltips","boundBox","dataModels","fragmented","showVertically","tooltipPos","boxes","tooltip_toConsumableArray","targetFields","sourceFields","indices","plotDimensions","getPlotPointsFromIdentifiers","plotDim","dataTransform","layoutContainer","layoutBoundBox","unitBoundBox","tooltipInst","TooltipRenderer","timeDiffsByField","positionRelativeTo","tooltipBoundBox","getContents","spaceOutBoxes","spaceOutIfOverlap","firstBox","secondBox","opposite","Crossline","bandWidth","bandClass","lineClass","elemData","fieldIndex","axisIndex","fieldInst","xOffset","plotWidth","crossline_toConsumableArray","getPlotSpan","getPlotPadding","startPx","endPx","dataPoint","parentGroup","CLASSPREFIX","fade","fadeFn","focus","highlight","PlotHighlighter","plot_highlighter_classCallCheck","plot_highlighter_possibleConstructorReturn","FilterEffect","entryModel","clearCaching","resetData","enableCaching","AnchorEffect","anchors_classCallCheck","anchors_possibleConstructorReturn","_layers","addAnchorLayers","shouldDrawAnchors","encodingFieldsInf","layerObj","instances","addLayer","alias","mark","encoding","colorField","sizeField","defaultSizeValue","getTransitionConfig","calculateDomain","linkedLayer","elems","_linkedLayer$getTrans","getTransformedDataFromIdentifiers","_linkedLayer$getTrans2","anchors_slicedToArray","transformedData","transformedDataModel","DataModel","PersistentAnchors","BrushAnchors","BEHAVIOURS","behaviour_effect_map_defineProperty","STACK","ANGLE","RADIUS","SIZE","COLOR","SHAPE","ENCODING","X0","Y0","nearestPointThreshold","strokeOpacity","connectNullData","SimpleLayer","DATA_UPDATED","BOTTOM","TOP","LEFT","RIGHT","axisOrientationMap","AxisOrientation","axis_orientation_defineProperty","_axisOrientationMap","LINEAR","BAND","TIME","ORDINAL","QUANTIZE","QUANTILE","LOG","POW","IDENTITY","SEQUENTIAL","THRESHOLD","CONTINOUS","HIDDEN","scaleLinear","scales","scaleThreshold","scaleLog","scalePow","scaleIdentity","scaleOrdinal","scaleSequential","scaleQuantize","scaleQuantile","scaleTime","scaleMap","ScaleType","scale_creator_defineProperty","_scaleMap","createScale","scaleFactory","axisName","axisNamePadding","fixedBaseline","labels","rotation","smartTicks","numberOfTicks","showAxisName","showInnerTicks","showOuterTicks","yOffset","rotateAxis","instance","tickText","labelManager","getTickSize","yShift","xShift","tickFormatter","tickLabelDim","quadrant","rotationNormalizer","angleToRadian","angle","changeTickOrientation","selectContainer","axisInstance","_smartTicks","isSmartTicks","setFixedBaseline","setAxisNamePos","textNode","axisNameHeight","labelOffset","availableSpace","getTickLabelInfo","largestLabel","labelProps","smartTick","axisTickLabels","allLabelLengths","_context$config","labelFunc","_tickLabelStyle","originalLabel","formattedLabel","largestLabelDim","setOffset","logicalSpace","adjustRange","getAxisOffset","timeDiff","avWidth","bars","registerChangeListeners","_domainLock","getHorizontalAxisSpace","axisDimensions","axisLabelDim","axisDimHeight","tickDimHeight","tickDimWidth","minTickDiff","getMinTickDifference","cartesian_axis_helper_toConsumableArray","_minTickDistance","getVerticalAxisSpace","_ref2","PROPS","_rotationLock","createAxis","commit","SimpleAxis","simple_axis_classCallCheck","_dependencies","_range","_domain","_axisDimensions","defCon","simpleConfig","bodyElem","_axisNameStyle","_scale","_axis","setTickConfig","axisClass","getTickFormatter","labelWidth","domainVal","computeAxisDimensions","_context$config2","_getTickLabelInfo","labelHeight","setRotationConfig","calculateContinousSpace","getAxisDimensions","axisDimWidth","_getHorizontalAxisSpa2","_getVerticalAxisSpace2","currentDomain","cachedDomain","updateDomainBounds","registerEvent","renderAxis","setTickValues","axisNameSpace","axisNameWidth","unsubscribeAll","LinearInterpolator","LogInterpolator","PowInterpolator","interpolatorMap","continous_axis_defineProperty","_interpolatorMap","ContinousAxis","continous_axis_classCallCheck","continous_axis_possibleConstructorReturn","InterpolatorCls","_interpolator","isOffset","_config3","labelSpace","axisHeight","getLogicalSpace","axisWidth","getTickValues","_config5","getNumberOfTicks","labelDim","tickLength","numberOfValues","_config6","_axisDimensions$large","BandAxis","_config2","calculateBandSpace","largestDimHeight","largestDimWidth","_getHorizontalAxisSpa","_getVerticalAxisSpace","availSpace","smartWidth","TimeAxis","time_axis_classCallCheck","time_axis_possibleConstructorReturn","_minDiff","time_axis_get","_getAxisDimensions","x11Colors","Pink","LightPink","HotPink","DeepPink","PaleVioletRed","MediumVioletRed","LightSalmon","Salmon","DarkSalmon","LightCoral","IndianRed","Crimson","FireBrick","DarkRed","Red","OrangeRed","Tomato","Coral","DarkOrange","Orange","Gold","Yellow","LightYellow","LemonChiffon","LightGoldenrodYellow","PapayaWhip","Moccasin","PeachPuff","PaleGoldenrod","Khaki","DarkKhaki","Cornsilk","BlanchedAlmond","Bisque","NavajoWhite","Wheat","BurlyWood","Tan","RosyBrown","SandyBrown","Goldenrod","DarkGoldenrod","Peru","Chocolate","SaddleBrown","Sienna","Brown","Maroon","DarkOliveGreen","Olive","OliveDrab","YellowGreen","LimeGreen","Lime","LawnGreen","Chartreuse","GreenYellow","SpringGreen","MediumSpringGreen","LightGreen","PaleGreen","DarkSeaGreen","MediumSeaGreen","SeaGreen","ForestGreen","Green","DarkGreen","MediumAquamarine","Aqua","Cyan","LightCyan","PaleTurquoise","Aquamarine","Turquoise","MediumTurquoise","DarkTurquoise","LightSeaGreen","CadetBlue","DarkCyan","Teal","LightSteelBlue","PowderBlue","LightBlue","SkyBlue","LightSkyBlue","DeepSkyBlue","DodgerBlue","CornflowerBlue","SteelBlue","RoyalBlue","Blue","MediumBlue","DarkBlue","Navy","MidnightBlue","Lavender","Thistle","Plum","Violet","Orchid","Fuchsia","Magenta","MediumOrchid","MediumPurple","BlueViolet","DarkViolet","DarkOrchid","DarkMagenta","Purple","Indigo","DarkSlateBlue","SlateBlue","MediumSlateBlue","White","Snow","Honeydew","MintCream","Azure","AliceBlue","GhostWhite","WhiteSmoke","Seashell","Beige","OldLace","FloralWhite","Ivory","AntiqueWhite","Linen","LavenderBlush","MistyRose","Gainsboro","LightGray","Silver","DarkGrey","Grey","DimGrey","LightSlateGrey","SlateGrey","DarkSlateGrey","Black","palette","DEFAULT_GRADIENT_COLOR","DEFAULT_CONFIG","getHslString","hslArr","convertToXllString","baseString","getActualHslColor","paletteColor","hexToHsv","props_toConsumableArray","oldConfig","newConfig","uniqueValues","getStops","newStops","color_strategy_toConsumableArray","rangeStops","newStopsLength","newRange","hslInterpolator","interpolateHslLong","indexedDomain","scaleDomain","indexedDomainMeasure","normalDomain","steppedDomain","_getStops","continousSteppedDomain","_getStops2","uniqueRange","domainValue","indexedRange","normalRange","strategyGetter","domainType","rangeType","schemeType","color_strategy_defineProperty","domainRange","ColorAxis","color_axis_classCallCheck","_domainType","_rangeType","_schemeType","getSchemeType","_colorStrategy","setColorStrategy","updateDomain","colorStrategy","getScheme","colorSchemes","hslColorArray","getRawColor","color_axis_toConsumableArray","scaleInfo","domainRangeFn","transformationArr","newH","newS","newL","newA","pieceWiseRange","numVal","size_strategy_toConsumableArray","size_strategy_defineProperty","intervals","newIntervals","discreteRange","SizeAxis","size_axis_classCallCheck","_sizeStrategy","setStrategy","domainInfo","domainFn","generator","ShapeAxis","shape_axis_classCallCheck","_generatedShapes","shapeType","shapeGenerator","generatorFn","generatedShapes","DATA_TYPES","group_transform","dataTypeScaleMap","data_type_scale_map_defineProperty","_dataTypeScaleMap","groupByIndices","nestCollection","nestFn","identityTransform","transformMap","transform_factory_defineProperty","_transformMap","uniqueField","valueField","normalizedData","normalizeData","groupedData","uniqueFieldIndex","valueFieldIndex","seriesKeyIndex","seriesKeys","fieldNames","tuples","rowObj","_tuple","seriesKey","newArr","orderBy","orderIndex","groupByIndex","localeCompare","stackData","seriesData","transformFactory","getLayerColor","colorEncoding","colorFieldIndex","rawColor","transfromColor","styleType","intensity","stateColor","originalColor","fillColorInfo","transformColor","interactionStyles","elements","getPlotElementsFromSet","_d$meta","colorTransform","_ref3","_ref4","helpers_slicedToArray","getAxesScales","_map","_map2","_map3","_map4","xScale","yScale","getIndividualClassName","individualClassName","classNameStr","attachDataToVoronoi","_ref5","helpers_toConsumableArray","updateStyle","positionPoints","positioner","encodingTransform","getPlotMeasurement","dimensionalValues","fieldInfo","transformType","_bandScale","span","groupSpan","offsetValues","actualGroupWidth","dataProps","innerPadding","getGroupSpan","isAxisBandScale","axisPadding","groupPadding","fetch","dataModelValue","configValue","encodingValue","getEncodingFieldInf","_map5","_map6","x0Field","y0Field","shapeField","_map7","_map8","_map9","_map10","xFieldSubType","yFieldSubType","_map11","_map12","xFieldIndex","yFieldIndex","x0FieldIndex","y0FieldIndex","getValidTransform","layerConfig","encodingFieldInf","groupByField","groupByFieldMeasure","getTransformedData","transformedDataValue","getNormalizedData","normalizedDataValue","calculateDomainFromData","dataUpdated","throwback","defaultOptions","newConf","defaultPolicy","default_options_defineProperty","_defaultOptions","_cacheEnabled","_cachedData","BaseLayer","base_layer_classCallCheck","base_layer_possibleConstructorReturn","base_layer_defineProperty","DATA","_points","_measurement","_store","_encodingFieldsInf","_encodingTransform","_alias","transformData","domains","yEnc","xEnc","encodingType","transformedDataArr","fieldsLen","pointObj","tuple","_transformType","pointMap","_pointMap","_dataProps","base_layer_slicedToArray","xMeasure","yMeasure","_identifiers$","_identifiers$2","xMeasureIndex","yMeasureIndex","getAllAttrs","filteredPoints","base_layer_toConsumableArray","sizeVal","_identifiers$getData","identifierData","identifierSchema","_encodingFieldsInf2","enc","tupleArr","transformedVal","userConf","drawLine","curveInterpolatorFn","linepath","LineLayer","line_classCallCheck","line_possibleConstructorReturn","isXDim","isYDim","xPx","yPx","_getLayerColor","stroke","rowId","cachePoint","seriesClassName","containerSelection","animateGroup","groupTransition","groupAnimateStyle","stroke-opacity","getPathStyle","translatePoints","colorValFn","colorVal","getDrawFn","searchRadius","_point$data$data","getIdentifiersFromData","layerId","drawArea","easeEffect","renderer_slicedToArray","enterAreaPath","updateAreaPath","selectionEnter","AreaLayer","_getAxesScales","classNameFn","y0Px","minOuterRadius","stroke-width","stroke-linejoin","innerRadiusFixer","states","fadeout","selected","ArcLayer","arc_classCallCheck","arc_possibleConstructorReturn","_prevPieData","pieData","pieIndex","prevData","_getFieldIndices","getFieldIndices","arc_helper_slicedToArray","angleField","radiusField","angleIndex","sizeIndex","radiusIndex","colorIndex","dataVal","uid","outerRadiusValue","angleVal","_previousInfo","getPreviousPoint","currIndex","prevArc","nextArc","_dataPoint$datum","chartHeight","chartWidth","qualClassName","getRadiusRange","defaultRadius","radiusDomain","rangeValueGetter","getRangeValue","domainMultiplier","sizeAxisDomain","sizeMultiplier","_chartWidth","_chartHeight","consecutiveExits","exitCounter","arcFn","tweenPie","individualClass","tweenExit","exitArr","oldExitCounter","tweenExitPie","consecutiveExitArr","gElem","pieSlices","pieSliceInf","tData","drawText","selectionMerge","backgroundVal","textanchor","textStyle","background","backgroundPadding","_smartLabel$getOriSiz","backgroundEl","TextLayer","textEncoding","textField","textFormatter","backgroundEncoding","backgroundValue","textFieldIndex","textValue","text_slicedToArray","text-anchor","drawSymbols","mergedGroups","symbolGroups","symbolEnter","createShape","groupElement","then","res","Element","newShape","nodeName","src","href","shapeElement","pathStr","checkPath","exitGroups","defColorStyle","fillOpacity","shapes","sizes","PointLayer","point_classCallCheck","point_possibleConstructorReturn","sizeEncoding","shapeEncoding","sizeValue","shapeFieldIndex","sizeFieldIndex","_config$offset","offsetX","offsetY","point_slicedToArray","maxSize","generateDataPoints","point_toConsumableArray","drawFn","_maxSize","_getPlotMeasurement","_getPlotMeasurement2","widthMetrics","heightMetrics","offsetXValues","offsetYValues","measurementConf","getMeasurementConfig","widthSpan","heightSpan","distanceLimit","drawRects","barEnterFn","transitionBars","selTransition","resolveDimByField","axesInfo","spaceType","sizeConfig","enterSpace","minVal","maxVal","diffPx","zeroPos","axisType","axisType0","resolveDimensions","_resolveDimByField","enterWidth","enterX","xPos","_resolveDimByField2","enterHeight","BarLayer","bar_classCallCheck","bar_possibleConstructorReturn","_plotPadding","_plotSpan","getTranslatedPoints","_context$encodingFiel","normalizedDataArr","clipElement","clipPathElement","bar_slicedToArray","barWidthMetrics","barHeightMetrics","barWidthOffsets","barHeightOffsets","barWidth","barWidthOffset","barHeight","barHeightOffset","uniqueFieldType","filterData","pointFound","p2","tick_renderer","ticksEnter","TickLayer","_config$span","xSpan","ySpan","x0Px","drawTicks","sanitizeEncoding","layerFactory","compositeLayers","factoryObj","setLayerRegistry","reg","_layerRegistry","getSerializedConf","layerDef","serializedDefs","defs","unitLayerDef","sDef","parseLayerDefinition","layerType","strs","layer_factory_toConsumableArray","getLayerInstance","layerRegistry","composeLayers","layerDefs","sanitizeLayerConfig","DEFAULT_LAYERS","defaults_defineProperty","_DEFAULT_LAYERS","ROWS","COLUMNS","COL","ROW","CELL","X_AXES","Y_AXES","ENTRY_CELLS","EXIT_CELLS","PRIMARY","SECONDARY","local_options","local_options_defineProperty","_CONFIG$ROWS$COLUMNS$","SimpleGroup","Variable","ComposedVars","composed_vars_classCallCheck","texts","composed_vars_possibleConstructorReturn","vars","_vars","member","SimpleVariable","simple_var_classCallCheck","simple_var_possibleConstructorReturn","oneVar","_oneVar","dtFormat","fieldDef","varInst","convertToVar","datamodel","transformFields","normalizedFields","normalizeFields","norFields","orderFields","fieldArray","dimensionArr","measureArr","temporalArr","categoricalArr","fieldList","numOfMeasures","allDimensions","field_sanitizer_toConsumableArray","temporal","categorical","field_sanitizer_slicedToArray","rowsInfo","columnsInfo","rowDimensions","rowMeasures","rowTemporalFields","rowCategoricalFields","columnDimensions","columnMeasures","columnTemporalFields","columnCategoricalFields","VisualEncoder","_fieldInfo","_axisFrom","_headerFrom","__headerFrom","axisFrom","_getHeaderAxisFrom","getHeaderAxisFrom","_getHeaderAxisFrom2","visual_encoder_slicedToArray","rowHeader","rowAxis","_getHeaderAxisFrom3","_getHeaderAxisFrom4","colHeader","colAxis","column","headerFrom","scaleMaps","createSimpleAxis","axisConfig","axesCreators","Cls","generateAxisFromMap","groupAxes","axisKey","currentAxes","cacheMaps","getAxisKey","getAxisConfig","axisInfo","axisOrientation","userAxisConfig","_iteratorNormalCompletion","_didIteratorError","_iteratorError","_step","_iterator","encoder_helper_slicedToArray","err","getIndex","arrIndex","CartesianEncoder","geomCellAxes","projections","rowFields","columnFields","rowIndex","columnIndex","xAxes","yAxes","facets","counter","primaryFacets","secondaryFacets","primaryFields","secondaryFields","primaryLen","secondaryLen","projArr","primaryField","secondaryField","facet","existIndex","axisFromIndex","cartesian_encoder_get","groupedModel","encodingObj","retriveDomainFromData","layerArray","serializedLayers","userLayerConfig","colField","colFieldName","rowField","configs","rowFieldName","rowFieldType","getDefaultMark","colFieldType","defConfigs","layerConfigs","getLayerConfFromFields","colFields","encodingArr","encoder_helper_toConsumableArray","colFieldExist","rowFieldExist","layerConf","mergedLayerConf","serializedLayerConfig","cartesian_encoder_toConsumableArray","PolarEncoder","pieAxes","sanitizedRows","sanitizedColumns","sanitizedFields","typeIndex","fieldSet","facetFields","parentModel","layerEncoding","encType","measureField","polar_encoder_defineProperty","polar_encoder_toConsumableArray","allFields","RetinalEncoder","newAxes","createRetinalAxis","fieldProps","getAxisType","encodingConfigs","initStore","group_utils_defineProperty","isDistributionEqual","group_utils_toConsumableArray","rowType","initializeCacheMaps","cellMap","xAxesMap","yAxesMap","entryCellMap","exitCellMap","scaleType","headerCreator","fieldHeaders","TextCell","getHeaderText","headers","rowLength","header","userAxisFromConfig","_fields","group_utils_slicedToArray","firstField","secondField","firstFieldType","secondFieldType","setFacetsAndProjections","encoder","_encoder$simpleEncode","simpleEncoder","getFacetsAndProjections","createSelection","appendObj","idFn","dataSelect","mergedSelection","getBorders","matrices","showRowBorders","showColBorders","showValueBorders","valueMatrix","_rows","leftRows","rightRows","_columns","topColumns","bottomColumns","_encoder$fieldInfo","allDimensionLength","allMeasuresLength","allTemporalFieldsLength","getRowBorders","borders","getColumnsBorders","getValueBorders","borderTypeRow","borderTypeCol","ACTIONS","action_behaviour_map_defineProperty","CONFIG","AXES","LAYERDEFS","WIDTH","HEIGHT","MOUNT","primaryXAxisUpdated","primaryYAxisUpdated","secondaryXAxisUpdated","secondaryYAxisUpdated","TRANSFORM","DATADOMAIN","LAYERSCREATED","FIELDS","TIMEDIFFS","LAYERAXISINDEX","getLayerFromDef","existingLayer","_layerDeps","instanceArr","resolveEncodingTransform","layerInst","resolvable","depArr","resolved","createLayers","layerDefinitions","layersMap","_layersMap","markSet","components","layerIndex","layersArr","_layersArr","markId","defArr","instanceValues","src_helper_toConsumableArray","layerdeps","getDependencyOrder","graph","dependencyOrder","visited","visit","attachAxisToLayers","layerAxisIndex","axesObj","axisInf","getLayerAxisIndex","_layer$config","unionDomainFromLayers","getDataDomain","domainValues","layerDomain","fieldDomain","fieldStr","unionDomain","dom","getLayersBy","searchBy","removeLayersBy","inst","getGridLayerDefinitions","getDefaultVisibilty","getLayerDefinition","_definition","_encoding","gridLines","gridBands","gridLineColor","zeroLineColor","gridBandColor","isLinearScale","grid_lines_defineProperty","isNegativeDomain","renderGridLineLayers","createGridLineLayer","vuConf","_gridbands","_gridlines","atomicDef","sConf","getGridLayerData","gridData","jsonData","_jsonData$push","entry","_entry","grid_lines_slicedToArray","parentGroupClass","trackerClassName","arcLayerClassName","sideEffectClassName","src_local_options","src_local_options_defineProperty","_CONFIG$LAYERDEFS$AXE","prevAxes","cachedData","local_options_toConsumableArray","oldData","axisMap","1","axisProps","listener_map_slicedToArray","isReverse","layerDefsValue","fieldsVal","_layerAxisIndex","_lifeCycleManager","notify","_timeDiffsByField","layersCreated","dataModelVal","layerAxisIndexVal","axesVal","transformDataModels","transformVal","_transformedDataModels","attachDataToLayers","transformedDataModels","dataSource","_dimensionMeasureMap","getDimensionMeasureMap","retinalEncodingsAndMeasures","_layer$encodingFields","_retinalEncodingsAndM","retinalFields","dataDomain","updateAxisDomain","props_defineProperty","_PROPS","dispatchQueuedSideEffects","firebolt_helper_toConsumableArray","registerImmediateListener","originalData","createSelectionSet","attachPropagationListener","registerChangeListener","firebolt_helper_slicedToArray","mapActionsAndBehaviour","clearActionHistory","payloadGenerator","brush","selectionDataModel","propPayload","getRangeFromData","propCriteria","isDimension","payload_generator_toConsumableArray","__default","propagateValues","propagationFieldInf","propagationFields","sideEfffects","mergedModel","sourceUnit","sourceCanvas","parentAlias","propagationBehaviour","propFields","facetByFields","getModelWithFacetData","schema1","data1","schema2","data2","data_propagator_toConsumableArray","groupId","behaviourInstance","propagationConf","sourceBehaviour","enabled","propConf","actionInf","propInf","UnitFireBolt","src_firebolt_classCallCheck","firebolt_possibleConstructorReturn","unitId","aliasName","propagationSourceCanvas","sourceUnitId","sourceSideEffects","sideEffectInstances","actionOnSource","mappedEffects","sideEffectChecker","enabledFn","payloadFn","sourceIdentifierFields","sourceBehaviours","firebolt_get","VisualUnit","registry","visual_unit_classCallCheck","onlayerdraw","_renderedResolve","_renderedPromise","lifeCycleManager","visual_unit_defineProperty","localOptions","_firebolt","lock","unlock","_rootSvg","class","renderLayers","orderedLayers","layerParentGroup","_sideEffectGroup","createSideEffectGroup","rootSvg","layerName","getLayerByName","serializedDef","visual_unit_toConsumableArray","lyr","axisConf","alignZeroLine","adjustedDomain","getAdjustedDomain","y1ratio","y2ratio","allSameSign","updateDomainCache","dimValue","getNearestDimensionalValue","entryVal","pointInf","getMarkInfFromLayers","markInf","parsedIdentifiers","transposeArray","getPointsFromIdentifiers","_parentContainer","getFieldNames","fields1","matrix_model_toConsumableArray","createSelectedDataModel","uniqueKeyGenerator","keyArray","newDm","nextDepthUniqueValues","projectRows","allColumnProjections","rowProjections","optionalProjections","projectFields","_getFieldNames","_getFieldNames2","matrix_model_slicedToArray","projFieldNames","colProjFieldNames","pushToMatrix","_matrix$rowIndex","facetInfo","colProjections","rowProj","projIdx","_getFieldNames3","_getFieldNames4","rowProjFieldNames","projectedDm","createValueCells","suppliedLayers","GeomCell","matrixLayers","horizontalAxis","verticalAxis","datamodelTransform","layerConfigArr","getLayerConfig","normalizedColumns","normalizedRows","geomCellKey","getCellKey","columnId","allFacets","cell_creator_toConsumableArray","rowFacets","colFacets","geomCell","updateCells","facetKey","createAxisCells","axisInst","_axisInst$config","AxisCell","BlankCell","headerPlaceholderGn","selectionObj","facetConfig","selectionKeys","keySet","createTextCells","generatePlaceholders","facetsAndProjections","encoders","valuesMatrix","rowKeys","columnKeys","takeAxisFrom","takeHeaderFrom","axisPlaceholderGn","selObj","axesMatrix","selObjProp","axesForDraw","rowsPrimary","rowPrime","columnsPrimary","colPrime","_selectionObj","rowsSecondary","columnsSecondary","getObjects","section","hContext","computeMatrices","componentRegistry","globalConfig","autoGroupBy","otherEncodings","matrixGnContext","getCellDef","isRowSizeEqual","isColumnSizeEqual","colCells","rowCells","resetSimpleAxes","newCacheMap","valueCellContext","serializeLayerConfig","extractFields","layerFields","flattenArray","getFieldsFromSuppliedLayers","suppliedLayerConfig","aggregationFns","valueMatrixInfo","getMatrixModel","rowDataModels","colProj","firstLevelRowKeys","_rowDataModels","_getFieldNames5","rowFacetFieldNames","selectedDataModel","_rowDataModels2","colFacetNames","firstLevelColumnKeys","dme","rIndex","cIndex","transposedColKeys","valueCellsCreator","placeholder","createUnits","_mutateAxesFromMap","mutateAxesFromMap","xAxisSet","yAxisSet","axisId","_generateMatrices","generateMatrices","leftHeaders","topHeaders","bottomHeaders","rightHeaders","cell_creator_slicedToArray","rowSec","colSec","leftFacets","rightFacets","leftMatrix","rightMatrix","topMatrix","bottomMatrix","currentBottomLength","setAvailableSpace","rowMatrix","columnMatrix","MatrixResolver","matrix_resolver_classCallCheck","_registry","_layerConfig","_matrixLayers","_rowMatrix","_columnMatrix","_valueMatrix","_facets","_projections","_datamodelTransform","_units","_cacheMaps","_axes","maps","_rowCells","_colCells","matrix_resolver_toConsumableArray","_horizontalAxis","_verticalAxis","matrixType","sideEffectRegistry","units","unitConfig","extractUnitConfig","_getAllFields","retContext","getRetinalFieldsDomain","retinalEncoder","setCommonDomain","_axes2","retinalAxes","updateModel","placeholders","bottomLeft","bottomRight","_dependencies3","matrix_resolver_slicedToArray","topCols","bottomCols","rowHeaders","blankCellCreator","showHeaders","footers","topLeft","topRight","ValueMatrix","matrixArr","value_matrix_classCallCheck","instancesById","rIdx","cIdx","cellValue","colIndex","_instancesById","_matrix","_filterFn","rowWidth","currentRowWidth","rowHeight","currentRowHeight","setupChangeListeners","change_listener_toConsumableArray","matrixConfig","retinalConfig","sanitizeRetinalConfig","retinalConf","confValue","getEncoder","groupType","fieldSanitizer","setAxisAndHeaders","placeholderInfo","getMatrices","_groupedDataModel","createRetinalAxes","setDomains","setMatrixInstances","_composition","cornerMatrices","createHeaders","metaData","border","hasDataUpdated","matrixInstance","cellRegistry","VisualGroup","visual_group_classCallCheck","visual_group_possibleConstructorReturn","componentSubRegistry","_matrixInstance","_selection","_placeholderInfo","_cornerMatrices","variable","findInGroup","channel","group_utils_this","facetType","projType","getRetinalAxes","getSimpleAxes","_resolver$getAllField","visual_group_defineProperty","existingRemoveSet","select_toConsumableArray","firebolt_action_behaviour_map_defineProperty","action_behaviour_map_actionBehaviourMap","propagationBehaviourMap","_propagationBehaviour","firebolt_behaviour_effect_map_defineProperty","firebolt_behaviour_effect_map_behaviourEffectMap","propagationSideEffects","_propagationSideEffec","SCALE_FUNCTIONS","VALUE","canvasAlias","check","assembleModelFromIdentifiers","_loop2","fieldVal","src_firebolt_helper_toConsumableArray","LegendFireBolt","_Firebolt","legend_firebolt_classCallCheck","legend_firebolt_possibleConstructorReturn","legend_firebolt_inherits","legend_firebolt_createClass","behaviourName","getCriteriaFromData","boundingBox","gradientDimensions","axisScale","rangeShifter","firebolt_physical_defineProperty","physical_physicalActions","getSelectionCriteria","selectionBoxMeasure","drawingInfMeasure","subjectStartPoint","gradientDimension","legendGradContainer","legendSelGroup","enterFn","getMousePos","boundingClientRect","fadeOut","brighten","LegendHighlighter","legend_highlighter_classCallCheck","legend_highlighter_possibleConstructorReturn","legendContainer","resetLogicalSpace","title","_title","ALIGN","DEFAULT_MEASUREMENT","LEGEND_TITLE","borderStyle","borderColor","bounds","upper","ICON_MAP","getScaleInfo","steps","scaleFn","getInterpolatedData","domainForLegend","interpolatedFn","getDomainBounds","domainBounds","domainLeg","ele","legend_helper_defineProperty","getScaleFactor","SimpleLegend","simple_legend_classCallCheck","_metaData","_fieldName","_labelManager","_cells","defaultMeasurement","_computedStyle","legendBehaviours","_canvasAlias","getItemMeasures","_labelManager$getOriS","effPadding","effBorder","effMargin","dataFromScale","titleSpace","getTitleSpace","titleHeight","titleWidth","labelSpaces","getLabelSpaces","_computeItemSpaces","computeItemSpaces","maxItemSpaces","textOrientation","itemSpaces","iconSpaces","maxIconWidth","itemSpace","iconSpace","titleSpaces","_measurement2","titleCreator","titleContainer","_config4","_measurement3","renderTitle","simple_legend_defineProperty","legendOrientation","datasets","itemContainerMeasures","getStepSpacesInfo","iconHeight","iconWidth","stepPadding","horizontal","vertical","position_config_defineProperty","_legendOrientation","positionConfig","_positionConfig","alignmentMap","_alignmentMap","itemStack","_itemStack","createLegendSkeleton","gradWidth","gradHeight","maxGradHeight","maxGradWidth","legendBody","legendItem","getItemContainers","legendInstance","positionObj","createItemSkeleton","itemSkeleton","alignClass","applyItemStyle","measureType","stepColorCheck","_context$measurement","renderIcon","defaultIcon","DiscreteLegend","_getScaleInfo","discrete_legend_defineProperty","renderDiscreteItem","_context$measurement2","_item$icon","text-align","getGradientDomain","accumulator","currentValue","MAX_VALUE","MIN_VALUE","legendGradSvg","legendGradCont","linearGradient","makeLinearGradient","legendRect","GradientLegend","gradient_legend_toConsumableArray","gradient_legend_defineProperty","newAxis","axisSpace","axisDomainLength","_legendGradientSvg","renderGradient","_createLegendSkeleton","StepLegend","step_legend_toConsumableArray","step_legend_defineProperty","lowerBounds","upperBounds","step_legend_get","stepData","renderStepItem","_context$config3","_context$measurement3","_item$icon2","_positionConfig$posit","PADDING","BORDER","MARGIN","TITLE_TEMPLATE_NOT_ALLOWED_TAGS","LEGEND_TYPE_MAP","constants_defineProperty","_LEGEND_TYPE_MAP","share","operators_toConsumableArray","strings","htmlCode","expLn","frag","createDocumentFragment","treeShakeNode","nodeType","Node","ELEMENT_NODE","tagName","childNodes","actionModel","ActionModel","action_model_classCallCheck","_registrableComponents","canvas","once","visualGroup","_cell$valueOf$firebol","registerPropagationBehaviourMap","_len4","_key4","dissociateBehaviour","_len5","_key5","dissociateSideEffect","policy","registrableComponents","mergedPolicy","aliases","comp","*","propagationPayload","propagationCanvas","crossInteractionPolicy","legend","minHeight","collapse","src_options","isInteger","minUnitWidth","minUnitHeight","oldConf","defConfig","CENTER","ROW_LEFT","ROW_RIGHT","COLUMN_BOTTOM","COLUMN_TOP","ROW_SPAN","COL_SPAN","ROW_ROOT","COLUMN_ROOT","GenericLayout","generic_layout_classCallCheck","_matrices","_centerMatrix","_mountPoint","DEFAULT_CONFIGURATION","grid_layout_defaults_defineProperty","_FieldNames$BORDER","FieldNames","_DEFAULT_CONFIGURATIO","DEFAULT_MEASUREMENTS","_DEFAULT_MEASUREMENTS","BLANK_BORDERS","columnFilter","colData","colIdx","previousRow","currentRow","prevCell","nextRow","prevRow","calcRowSpan","isNull","calcColSpan","mask","filteredRow","_temp","span_maker_toConsumableArray","applyBorders","borderType","applyRowBorders","showBorders","applyColBorders","renderMatrix","containerForMatrix","_cellSpanMaker","cellSpanMaker","viewMatrix","spans","ridx","currSpan","renderTable","rowData","availHeight","findInPage","page","combineMatrices","isTransposed","joinedMatrix","utils_toConsumableArray","computeLogicalSpace","maxMeasures","_config$isTransposed","unitMeasures","_getMeasureInfo","getMeasureInfo","firstMeasure","secondMeasure","minMeasures","getMinMeasures","_logicalSpace","utils_defineProperty","valueItem","maxMeasure","firstMeasureValue","secondMeasureValue","valueArray","_item$space","fMeasure","sMeasure","extraCellsRemover","beg","distribution","extraCellLengths","VisualMatrix","visual_matrix_classCallCheck","_lastLevelKey","_primaryMatrix","_secondaryMatrix","_maxMeasures","_availableSpace","_breakPointer","_layoutMatrix","_tree","createTree","setLogicalSpace","_createTree2","matrixTree","lastLevelKey","layoutMatrix","primaryMatrix","secondaryMatrix","breakPage","primaryMatrixLength","newMatrix","keyLength","createMatrixEachLevel","_arr$i","heightMeasures","populateMaxMeasures","widthMeasures","calculateDepth","viewableMatrix","createViewPortMatrix","viewableMeasures","redistribute","childDepth","maxHeights","maxWidths","matrixInst","mWidth","mHeight","redistributeColumnWise","redistributeRowWise","cellDimOptions","matrixIndex","_getCellDimensions","getCellDimensions","heights","widths","rowHeights","columnWidths","primary","secondary","begCellLen","endCellLen","createMatrixInstances","matrixInfo","layout","breakPointer","brokenMatrix","breakMatrix","nextLevel","removeExtraCells","rHeights","cWidths","gutter","spaceTakenByColumn","spaces","getDistributedHeight","heightWithoutGutter","distSum","gutterSum","availableHeight","colLen","distHeight","borderWidth","spaceTakenByRow","getDistributedWidth","layoutConfig","availableWidth","distWidth","rowLen","oldLogicalSpace","mainMeasures","computedMeasures","colHeight","colWidth","setMatrixMeasurement","setViewSpaces","pointerType","viewSpaces","pointer","computations_defineProperty","GridLayout","layout_classCallCheck","layout_possibleConstructorReturn","_layoutId","generateVisualMatrices","begColCells","endColCells","gutterSpace","_top","layout_helper_slicedToArray","_center","_bottom","layout_helper_toConsumableArray","centerMatrix","layout_get","computeLayoutMeasurements","_layout$measurement","rowMatrixWidth","getMatrixMeasurement","columnMatrixWidth","columnViewPages","getViewableSpaces","columnViewSpace","columnPointer","columnMatrixHeight","rowMatrixHeight","rowViewableSpaces","computations_toConsumableArray","rowWidthsPrimary","rowWidthsSecondary","columnViewableSpaces","columnHeightsPrimary","columnHeightsSecondary","setViewInformation","pageNumber","pageType","totalPages","getViewInformation","viewMatricesInfo","layout_defineProperty","renderGrid","currentPage","rowPointer","getViewMatrices","rowMatrices","getViewableData","columnMatrices","centralMatrixPointer","rowMatrixLen","columnMatrixLen","rowPages","columnPages","layoutDimensions","getViewMeasurements","_layout$measurement2","_layout$config3","leftWidth","rightWidth","topHeight","bottomHeight","viewWidth","viewHeight","viewInfo","_getViewInformation3","renderMatrices","TransactionSupport","INTERFACE_IMPl","HEADER","FACET_BY_FIELDS","LAYER_DEF","DETAIL_FIELDS","TEXT","AXIS","GEOM","BLANK","SimpleCell","simple_cell_classCallCheck","enums_defaults_defineProperty","_CONSTANTS$MARGIN","CONSTANTS","_DEFAULT_CONFIG","DEFAULT_PROPS","availWidth","geomProps","caption","src_props_defineProperty","visual_cell_src_props_PROPS","axis_cell_classCallCheck","axis_cell_possibleConstructorReturn","_availHeight","_availWidth","computeAxisSpace","logicalWidth","logicalHeight","spaceFixer","_axis$getLogicalSpace","wrapperDiv","blank_cell_classCallCheck","blank_cell_possibleConstructorReturn","text_cell_classCallCheck","text_cell_possibleConstructorReturn","_className","_minTickDiff","computeTextSpace","verticalAlign","textAlign","geom_cell_classCallCheck","geom_cell_possibleConstructorReturn","_unit","_datamodel","_facetByFields","_transform","_caption","lockModel","unlockModel","captionSpace","computeGeomSpace","getCaptionSpace","captionDom","DEFAULT_PLACEHOLDERS","src_defaults_defineProperty","_DEFAULT_PLACEHOLDERS","createHeading","cellType","legendInitializer","legendConfig","prevLegends","legends","headerHeight","legendCreator","LegendCls","dataset","scaleProps","_scale$config","dataInfo","legendMeasures","getGroupByData","setLegendMeasures","getRenderDetails","_mount$getBoundingCli","heightAttr","widthAttr","visGroup","_visGroup$placeholder","titleConfig","subtitleConfig","subtitle","legendPosition","layoutArrangement","arrangeComponents","_titleLayouts","legendLayouts","titleLayouts","component_resolver_defineProperty","availableHeightForCanvas","availableWidthForCanvas","_createHeaders","canvasHeight","canvasWidth","headerOptions","resolveTitleSubTitleContent","rawContent","_sanitize","escapeHTML","htmlEscapes","&","<",">","\"","'","/","_createHeading","createLegend","legendSpace","getLegendSpace","legendInfo","legendWidth","legendHeight","canvases","mountSpace","TITLE_CONFIG","SUB_TITLE_CONFIG","canvas_local_options_defineProperty","_localOptions","canvasOptions","_sanitized","_canvasOptions","sub","renderHeader","headerCell","cont","renderComponents","_getSkeletons","getSkeletons","innerContainer","layoutType","prepareGridContainer","innerSel","setLabelRotationForAxes","renderLegend","legendComponents","sectionComponents","legendMount","legWidth","legHeight","sections","currHeight","currWidth","leg","shiftHeaders","shifter","setupChangeListener","allOptions","_allOptions","canvas_helper_toConsumableArray","equalityChecker","option","dispatchProps","_cachedProps","applyInteractionPolicy","policies","defaultInteractionPolicy","isMeasure","canvas_firebolt_toConsumableArray","getFieldsFromChannel","colDim","fieldInf","unitFireBolt","unitColFacets","equals","unitRowFacets","propagateWith","defaultCrossInteractionPolicy","propagationCanvasAlias","propagationUnit","GroupFireBolt","canvas_firebolt_classCallCheck","_interactionPolicy","_crossInteractionPolicy","changeBehaviourStateOnPropagation","changeSideEffectStateOnPropagation","Canvas","globalDependencies","canvas_classCallCheck","canvas_possibleConstructorReturn","_transactor","canvas_slicedToArray","initedComponents","initCanvas","register","_getRenderDetails","prepareLayout","triggerReflow","promises","all","getAxes","initialSettings","regEntry","COMPONENTS","SUBREGISTRIES","regObj","globalCache","defaultRegistry","overrideRegistryDefinitions","overrideRegistry","muze","_transactor2","muze_slicedToArray","env","globalStore","componentSubRegistryDef","settings","withSettings","enableChainedTransaction","transactionModel","transactionEndpoint","transactionItems","_slicedToArray","Smartlabel","SideEffects","standards","Behaviours","pkg","operators","utils","lookupWhat","lookupDetails","lookupTarget","deps"],"mappings":"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,mDACA,yDACA,+DACA,sEACA8F,IAAIs2B,IAESgX,MAAKK,ICALL,MAZK,IAAInzC,MAAM,GAAGD,OAC/B,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,yDACA,+DACA,sEACA8F,IAAIs2B,KCESgX,MAZK,IAAInzC,MAAM,GAAGD,OAC/B,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,yDACA,+DACA,sEACA8F,IAAIs2B,KCESgX,MAZK,IAAInzC,MAAM,GAAGD,OAC/B,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,yDACA,+DACA,sEACA8F,IAAIs2B,KCESgX,MAZK,IAAInzC,MAAM,GAAGD,OAC/B,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,yDACA,+DACA,sEACA8F,IAAIs2B,KCESgX,MAZK,IAAInzC,MAAM,GAAGD,OAC/B,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,yDACA,+DACA,sEACA8F,IAAIs2B,KCESgX,MAZK,IAAInzC,MAAM,GAAGD,OAC/B,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,yDACA,+DACA,sEACA8F,IAAIs2B,KCASgX,MAVK,IAAInzC,MAAM,GAAGD,OAC/B,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,0DACA8F,IAAIs2B,KCESgX,MAVK,IAAInzC,MAAM,GAAGD,OAC/B,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,0DACA8F,IAAIs2B,KCESgX,MAVK,IAAInzC,MAAM,GAAGD,OAC/B,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,0DACA8F,IAAIs2B,KCESgX,MAVK,IAAInzC,MAAM,GAAGD,OAC/B,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,0DACA8F,IAAIs2B,KCESgX,MAVK,IAAInzC,MAAM,GAAGD,OAC/B,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,0DACA8F,IAAIs2B,KCESgX,MAVK,IAAInzC,MAAM,GAAGD,OAC/B,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,0DACA8F,IAAIs2B,KCESgX,MAVK,I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","file":"muze.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"muze\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"muze\"] = factory();\n\telse\n\t\troot[\"muze\"] = factory();\n})(window, function() {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 7);\n","!function(e,t){\"object\"==typeof exports&&\"object\"==typeof module?module.exports=t():\"function\"==typeof define&&define.amd?define(\"DataModel\",[],t):\"object\"==typeof exports?exports.DataModel=t():e.DataModel=t()}(window,function(){return function(e){var t={};function n(r){if(t[r])return t[r].exports;var i=t[r]={i:r,l:!1,exports:{}};return e[r].call(i.exports,i,i.exports,n),i.l=!0,i.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(e,\"__esModule\",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&\"object\"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,\"default\",{enumerable:!0,value:e}),2&t&&\"string\"!=typeof e)for(var i in e)n.d(r,i,function(t){return e[t]}.bind(null,i));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,\"a\",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p=\"\",n(n.s=1)}([function(e){e.exports={name:\"datamodel\",description:\"Relational algebra compliant in-memory tabular data store\",homepage:\"https://github.com/chartshq/datamodel\",version:\"2.0.2\",license:\"MIT\",main:\"dist/datamodel.js\",author:\"Charts.com \",keywords:[\"datamodel\",\"data\",\"relational\",\"algebra\",\"model\",\"muze\",\"fusioncharts\",\"table\",\"tabular\",\"operation\"],repository:{type:\"git\",url:\"https://github.com/chartshq/datamodel.git\"},contributors:[{name:\"Akash Goswami\",email:\"akash@charts.com\"},{name:\"Subhash Haldar\",email:\"subhash@charts.com\"},{name:\"Rousan Ali\",email:\"rousan@charts.com\",url:\"https://rousan.io\"},{name:\"Ujjal Kumar Dutta\",email:\"ujjal@charts.com\"}],dependencies:{\"d3-dsv\":\"^1.0.8\"},devDependencies:{\"babel-cli\":\"6.26.0\",\"babel-core\":\"^6.26.3\",\"babel-eslint\":\"6.1.2\",\"babel-loader\":\"^7.1.4\",\"babel-plugin-transform-runtime\":\"^6.23.0\",\"babel-preset-env\":\"^1.7.0\",\"babel-preset-es2015\":\"^6.24.1\",\"babel-preset-flow\":\"^6.23.0\",chai:\"3.5.0\",\"cross-env\":\"^5.0.5\",eslint:\"3.19.0\",\"eslint-config-airbnb\":\"15.1.0\",\"eslint-plugin-import\":\"2.7.0\",\"eslint-plugin-jsx-a11y\":\"5.1.1\",\"eslint-plugin-react\":\"7.3.0\",\"istanbul-instrumenter-loader\":\"^3.0.0\",jsdoc:\"3.5.5\",json2yaml:\"^1.1.0\",karma:\"1.7.1\",\"karma-chai\":\"0.1.0\",\"karma-chrome-launcher\":\"2.1.1\",\"karma-coverage-istanbul-reporter\":\"^1.3.0\",\"karma-mocha\":\"1.3.0\",\"karma-spec-reporter\":\"0.0.31\",\"karma-webpack\":\"2.0.3\",marked:\"^0.5.0\",mocha:\"3.4.2\",\"mocha-webpack\":\"0.7.0\",\"transform-runtime\":\"0.0.0\",webpack:\"^4.12.0\",\"webpack-cli\":\"^3.0.7\",\"webpack-dev-server\":\"^3.1.4\"},scripts:{test:\"npm run lint && npm run ut\",ut:\"karma start karma.conf.js\",utd:\"karma start --single-run false --browsers Chrome karma.conf.js \",build:\"webpack --mode production\",start:\"webpack-dev-server --config webpack.config.dev.js --mode development --open\",lint:\"eslint ./src\",\"lint-errors\":\"eslint --quiet ./src\",docs:\"rm -rf yaml && mkdir yaml && jsdoc -c jsdoc.conf.json\"}}},function(e,t,n){var r=n(2);e.exports=r.default?r.default:r},function(e,t,n){\"use strict\";n.r(t);var r={};n.r(r),n.d(r,\"DataFormat\",function(){return o}),n.d(r,\"DimensionSubtype\",function(){return u}),n.d(r,\"MeasureSubtype\",function(){return c}),n.d(r,\"FieldType\",function(){return f}),n.d(r,\"FilteringMode\",function(){return s});var i={};n.r(i),n.d(i,\"DSVArr\",function(){return Me}),n.d(i,\"DSVStr\",function(){return Ve}),n.d(i,\"FlatJSON\",function(){return Ye}),n.d(i,\"Auto\",function(){return Be});var a={};n.r(a),n.d(a,\"sum\",function(){return ct}),n.d(a,\"avg\",function(){return ft}),n.d(a,\"min\",function(){return st}),n.d(a,\"max\",function(){return lt}),n.d(a,\"first\",function(){return dt}),n.d(a,\"last\",function(){return pt}),n.d(a,\"count\",function(){return ht}),n.d(a,\"sd\",function(){return vt});var o={FLAT_JSON:\"FlatJSON\",DSV_STR:\"DSVStr\",DSV_ARR:\"DSVArr\",AUTO:\"Auto\"},u={CATEGORICAL:\"categorical\",TEMPORAL:\"temporal\",GEO:\"geo\"},c={DISCRETE:\"discrete\"},f={MEASURE:\"measure\",DIMENSION:\"dimension\"},s={NORMAL:\"normal\",INVERSE:\"inverse\",ALL:\"all\"};function l(e,t){e.length>0&&e.split(\",\").forEach(function(e){var n=e.split(\"-\"),r=+n[0],i=+(n[1]||n[0]);if(i>=r)for(var a=r;a<=i;a+=1)t(a)})}var d=function(){function e(e,t){for(var n=0;n=0;)o=e[a+1],-1!==r.indexOf(o)&&i.push({index:a,token:o});return i},m.formatAs=function(e,t){var n,r=h(e),i=m.findTokens(t),a=m.getTokenDefinitions(),o=String(t),u=m.TOKEN_PREFIX,c=void 0,f=void 0,s=void 0;for(s=0,n=i.length;s=0;d--)(f=a[d].index)+1!==l.length-1?(void 0===u&&(u=l.length),s=l.substring(f+2,u),l=l.substring(0,f+2)+RegExp.escape(s)+l.substring(u,l.length),u=f):u=f;for(d=0;d1){n=Math.abs(r[1]-r[0]);for(var i=2,a=r.length;i=y&&t.data=r.stops[r.stops.length-1]}).forEach(function(e){c[e.index]=r.stops[r.stops.length-1]+\"-\"+h}),r.stops.unshift(r.start),b=new Set(r.stops),dr.stops[r.stops.length-1]&&b.add(h),b=[].concat(function(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t3&&void 0!==arguments[3]&&arguments[3],i=arguments.length>4&&void 0!==arguments[4]?arguments[4]:G.CROSS,a=[],o=[],u=n||K,c=e.getFieldspace(),f=t.getFieldspace(),s=c.name,d=f.name,p=c.name+\".\"+f.name,h=L(c,f);if(s===d)throw new Error(\"DataModels must have different alias names\");return c.fields.forEach(function(e){var t=E({},e.schema);-1===h.indexOf(t.name)||r||(t.name=c.name+\".\"+t.name),a.push(t)}),f.fields.forEach(function(e){var t=E({},e.schema);-1!==h.indexOf(t.name)?r||(t.name=f.name+\".\"+t.name,a.push(t)):a.push(t)}),l(e._rowDiffset,function(e){var n=!1,p=void 0;l(t._rowDiffset,function(t){var l=[],v={};v[s]={},v[d]={},c.fields.forEach(function(t){l.push(t.data[e]),v[s][t.name]=t.data[e]}),f.fields.forEach(function(e){-1!==h.indexOf(e.schema.name)&&r||l.push(e.data[t]),v[d][e.name]=e.data[t]});var m=Ke(v[s]),y=Ke(v[d]);if(u(m,y)){var g={};l.forEach(function(e,t){g[a[t].name]=e}),n&&G.CROSS!==i?o[p]=g:(o.push(g),n=!0,p=e)}else if((i===G.LEFTOUTER||i===G.RIGHTOUTER)&&!n){var b={},_=c.fields.length-1;l.forEach(function(e,t){b[a[t].name]=t<=_?e:null}),n=!0,p=e,o.push(b)}})}),new ut(o,a,{name:p})}function z(e,t){var n=\"\"+e,r=\"\"+t;return nr?1:0}function X(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:z;return e.length>1&&function e(t,n,r,i){if(r===n)return t;var a=n+Math.floor((r-n)/2);return e(t,n,a,i),e(t,a+1,r,i),function(e,t,n,r,i){for(var a=e,o=[],u=t;u<=r;u+=1)o[u]=a[u];for(var c=t,f=n+1,s=t;s<=r;s+=1)c>n?(a[s]=o[f],f+=1):f>r?(a[s]=o[c],c+=1):i(o[c],o[f])<=0?(a[s]=o[c],c+=1):(a[s]=o[f],f+=1)}(t,n,a,r,i),t}(e,0,e.length-1,t),e}function Q(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);ta?\"desc\"===t?-1:1:0}}return r}function Z(e,t){var n=new Map,r=[];return e.forEach(function(e){var i=e[t];n.has(i)?r[n.get(i)][1].push(e):(r.push([i,[e]]),n.set(i,r.length-1))}),r}function ee(e,t,n){var r={label:e[0]};return t.reduce(function(t,r,i){return t[r]=e[1].map(function(e){return e[n[i].index]}),t},r),r}function te(e,t,n,r,i){var a={schema:[],data:[],uids:[]},o=(i=Object.assign({},{addUid:!1,columnWise:!1},i)).addUid,u=r&&r.length>0,c=[];if(n.split(\",\").forEach(function(t){for(var n=0;n=0;u--)i=t[u][0],a=t[u][1],(o=Ze(r,i))&&(S(a)?X(n,function(e,t){return a(e[o.index],t[o.index])}):j(a)?function(){var e=Z(n,o.index),t=a[a.length-1],i=a.slice(0,a.length-1),u=i.map(function(e){return Ze(r,e)});e.forEach(function(e){e.push(ee(e,i,u))}),X(e,function(e,n){var r=e[2],i=n[2];return t(r,i)}),n.length=0,e.forEach(function(e){n.push.apply(n,Q(e[1]))})}():(a=\"desc\"===String(a).toLowerCase()?\"desc\":\"asc\",X(n,$(o.type,a,o.index))));e.uids=[],n.forEach(function(t){e.uids.push(t.pop())})}(a,r),i.columnWise){var f=Array.apply(void 0,Q(Array(a.schema.length))).map(function(){return[]});a.data.forEach(function(e){e.forEach(function(e,t){f[t].push(e)})}),a.data=f}return a}function ne(e,t){var n={},r=[],i=[],a=[],o=e.getFieldspace(),u=t.getFieldspace(),c=o.fieldsObj(),f=u.fieldsObj(),s=o.name+\" union \"+u.name;if(!M(e._colIdentifier.split(\",\").sort(),t._colIdentifier.split(\",\").sort()))return null;function d(e,t,r){l(e._rowDiffset,function(e){var o={},u=\"\";i.forEach(function(n){var r=t[n].data[e];u+=\"-\"+r,o[n]=r}),n[u]||(r&&a.push(o),n[u]=!0)})}return e._colIdentifier.split(\",\").forEach(function(e){var t=c[e];r.push(E({},t.schema)),i.push(t.schema.name)}),d(t,f,!1),d(e,c,!0),new ut(a,r,{name:s})}function re(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t1&&void 0!==arguments[1]?arguments[1]:{},n={},r=t,i=e.getPartialFieldspace().getMeasure(),a=se.defaultReducer();return\"function\"==typeof t&&(a=t),Object.entries(i).forEach(function(e){var o=le(e,1)[0];\"string\"==typeof t[o]&&(r[o]=se.resolve(r[o])?se.resolve(r[o]):a),\"function\"!=typeof t[o]&&(r[o]=void 0),n[o]=r[o]||se.resolve(i[o].defAggFn())||a}),n}(e,n),o=e.getPartialFieldspace(),u=o.fieldsObj(),c=o.name,f=[],s=[],d=[],p={},h=[],v=void 0;Object.entries(u).forEach(function(e){var t=le(e,2),n=t[0],r=t[1];(-1!==i.indexOf(n)||a[n])&&(d.push(E({},r.schema)),\"measure\"===r.schema.type&&\"discrete\"!==r.schema.subtype?s.push(n):\"dimension\"!==r.schema.type&&\"discrete\"!==r.schema.subtype||f.push(n))});var m=0;return l(e._rowDiffset,function(e){var t=\"\";f.forEach(function(n){t=t+\"-\"+u[n].data[e]}),void 0===p[t]?(p[t]=m,h.push({}),f.forEach(function(t){h[m][t]=u[t].data[e]}),s.forEach(function(t){h[m][t]=[u[t].data[e]]}),m+=1):s.forEach(function(n){h[p[t]][n].push(u[n].data[e])})}),h.forEach(function(e){var t=e;s.forEach(function(n){t[n]=a[n](e[n])})}),r?(r.__calculateFieldspace(),v=r):v=new yt(h,d,{name:c}),v}function pe(e,t){var n=L(e.getFieldspace(),t.getFieldspace());return function(e,t){var r=!0;return n.forEach(function(n){r=!(e[n].value!==t[n].value||!r)}),r}}function he(e,t){var n={},r=[],i=[],a=[],o=e.getFieldspace(),u=t.getFieldspace(),c=o.fieldsObj(),f=u.fieldsObj(),s=o.name+\" union \"+u.name;if(!M(e._colIdentifier.split(\",\").sort(),t._colIdentifier.split(\",\").sort()))return null;function d(e,t){l(e._rowDiffset,function(e){var r={},o=\"\";i.forEach(function(n){var i=t[n].data[e];o+=\"-\"+i,r[n]=i}),n[o]||(a.push(r),n[o]=!0)})}return e._colIdentifier.split(\",\").forEach(function(e){var t=c[e];r.push(E({},t.schema)),i.push(t.schema.name)}),d(e,c),d(t,f),new yt(a,r,{name:s})}function ve(e,t,n){return W(e,t,n,!1,G.LEFTOUTER)}function me(e,t,n){return W(t,e,n,!1,G.RIGHTOUTER)}var ye=function(){function e(e,t){for(var n=0;nn&&(n=e)}),[t,n]}(this.data)}},{key:\"parse\",value:function(e){return e=parseFloat(e,10),Number.isNaN(e)?null:e}},{key:\"unit\",value:function(){return this.fieldUnit}},{key:\"scale\",value:function(){return this.fieldScale}},{key:\"numberFormat\",value:function(){var e=this.fieldNumberformat;return function(t){return e(t)}}},{key:\"defAggFn\",value:function(){return this.fieldDefAggFn}}]),t}(),Oe=function(){function e(e,t){for(var n=0;n=a?c=!0:(r=e.charCodeAt(o++))===Pe?f=!0:r===Ce&&(f=!0,e.charCodeAt(o)===Pe&&++o),e.slice(i+1,t-1).replace(/\"\"/g,'\"')}for(;o2&&void 0!==arguments[2]?arguments[2]:{},i=arguments[3],a=void 0;t!==Y?(a={op:t,meta:r,criteria:i},e._derivation.push(a)):(a=[].concat(Ge(i)),e._derivation.length=0,(n=e._derivation).push.apply(n,Ge(a)))},ze=function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=n.operation||q,i=n.filterByMeasure||!1,a=[];a=t.length?t.map(function(e){return function(e){var t=e.getData(),n=t.schema,r=e.getFieldsConfig(),a=e.getFieldspace().fieldsObj(),o=t.data,u=Object.values(r).reduce(function(e,t){return e[t.def.name]=a[t.def.name].domain(),e},{});return function(e){return!!o.length&&o.some(function(t){return n.every(function(n){if(!(n.name in e))return!0;var a=e[n.name].valueOf();if(i&&n.type===f.MEASURE)return a>=u[n.name][0]&&a<=u[n.name][1];if(n.type!==f.DIMENSION)return!0;var o=r[n.name].index;return t[o]===e[n.name].valueOf()})})}}(e)}):[function(){return!1}];var o=void 0;r===q?o=e.clone(!1,!1).select(function(e){return a.every(function(t){return t(e)})},{saveChild:!1,mode:s.ALL}):o=e.clone(!1,!1).select(function(e){return a.some(function(t){return t(e)})},{mode:s.ALL,saveChild:!1});return o},Xe=function(e,t,n,r){var i=e.clone(r.saveChild),a=function(e,t,n,r){var i=[],a=-1,o=void 0,u=function(e){return n(qe(t,e),e)};return r.mode===s.INVERSE&&(u=function(e){return!n(qe(t,e))}),l(e,function(e){u(e)&&(-1!==a&&e===a+1?(o=i.length-1,i[o]=i[o].split(\"-\")[0]+\"-\"+e):i.push(\"\"+e),a=e)}),i.join(\",\")}(i._rowDiffset,i.getPartialFieldspace().fields,t,n);return i._rowDiffset=a,i.__calculateFieldspace().calculateFieldsConfig(),r.saveChild&&We(i,U,{config:n},t),i},Qe=function(e,t,n,r){var i=e.clone(n.saveChild),a=t;return n.mode===s.INVERSE&&(a=r.filter(function(e){return-1===t.indexOf(e)})),i._colIdentifier=a.join(\",\"),i.__calculateFieldspace().calculateFieldsConfig(),n.saveChild&&We(i,H,{projField:t,config:n,actualProjField:a},null),i},$e=function(e,t,n,r){r=Object.assign(Object.assign({},xe),r);var a=i[r.dataFormat];if(!a||\"function\"!=typeof a)throw new Error(\"No converter function found for \"+r.dataFormat+\" format\");var o=a(t,r),u=Je(o,2),c=u[0],f=u[1],s=Fe(f,n,c),l=R.createNamespace(s,r.name);return e._partialFieldspace=l,e._rowDiffset=f.length&&f[0].length?\"0-\"+(f[0].length-1):\"\",e._colIdentifier=n.map(function(e){return e.name}).join(),e},Ze=function(e,t){for(var n=0;n2&&void 0!==arguments[2]?arguments[2]:{},i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},a=i.nonTraversingModel,o=i.excludeModels||[];t!==a&&((!o.length||-1===o.indexOf(t))&&t.handlePropagation(n,r),t._children.forEach(function(t){var a=et(n,t),o=Je(a,2),u=o[0],c=o[1];e(t,[u,c],r,i)}))},nt=function(e,t,n,r){var i=void 0,a=void 0,o=n.propagationNameSpace,u=n.propagateToSource,c=n.sourceId,f=r.propagateInterpolatedValues,s=[];if(null===e&&!0!==r.persistent)s=[{criteria:[]}];else{var l,d=Object.values(o.mutableActions);!1!==u&&(d=d.filter(function(e){return e.config.sourceId!==c}));var p=d.filter(function(e){return(r.filterFn||function(){return!0})(e,r)}).map(function(e){return e.config.criteria}),h=[];if(!1!==u){var v=Object.values(o.mutableActions);v.forEach(function(e){var t=e.config;!1===t.applyOnSource&&t.action===r.action&&t.sourceId!==c&&(h.push(e.model),(i=v.filter(function(t){return t!==e}).map(function(e){return e.config.criteria})).length&&s.push({criteria:i,models:e.model,path:function e(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];return null!==t._parent&&(n.push(t),e(t._parent,n)),n}(e.model)}))})}i=(l=[]).concat.apply(l,[].concat(Ge(p),[e])).filter(function(e){return null!==e}),s.push({criteria:i,excludeModels:[].concat(h,Ge(r.excludeModels||[]))})}var m=t.model,y=Object.assign({sourceIdentifiers:e,propagationSourceId:c},r),g=t.groupByModel;f&&g&&(a=ze(g,i,{filterByMeasure:f}),tt(g,a,y)),s.forEach(function(e){var t=ze(m,e.criteria),n=e.path;if(n){var r=function(e,t){for(var n=0,r=t.length;n0&&void 0!==arguments[0])||arguments[0],t=void 0;if(!1===(!(arguments.length>1&&void 0!==arguments[1])||arguments[1])){var n=this.getData({getAllFields:!0}),r=n.data,i=n.schema,a=r.map(function(e){var t={};return i.forEach(function(n,r){t[n.name]=e[r]}),t});t=new this.constructor(a,i)}else t=new this.constructor(this);return e&&this._children.push(t),t}},{key:\"project\",value:function(e,t){var n={mode:s.NORMAL,saveChild:!0};t=Object.assign({},n,t);var r=this.getFieldsConfig(),i=Object.keys(r),a=t.mode,o=e.reduce(function(e,t){return\"RegExp\"===t.constructor.name?e.push.apply(e,function(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t1&&void 0!==arguments[1]?arguments[1]:[];We(this,Y,null,t),this._parent=e,e._children.push(this)}}]),e}(),at=function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function(e,t){var n=[],r=!0,i=!1,a=void 0;try{for(var o,u=e[Symbol.iterator]();!(r=(o=u.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){i=!0,a=e}finally{try{!r&&u.return&&u.return()}finally{if(i)throw a}}return n}(e,t);throw new TypeError(\"Invalid attempt to destructure non-iterable instance\")}}(),ot=function(){function e(e,t){for(var n=0;n1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{saveChild:!0},r=\"\"+e.join(),i=[this,e,t],a=de.apply(void 0,i);return n.saveChild&&(this._children.push(a),We(a,V,{fieldsArr:e,groupByString:r,defaultReducer:se.defaultReducer()},t)),a._parent=this,a}},{key:\"sort\",value:function(e){var t=this.getData({order:\"row\",sort:e}),n=[t.schema.map(function(e){return e.name})].concat(t.data),r=new this.constructor(n,t.schema,{dataFormat:\"DSVArr\"});return r._sortingDetails=e,r}},{key:\"addField\",value:function(e){var t=e.fieldName();this._colIdentifier+=\",\"+t;var n=this._partialFieldspace;if(n.fieldsObj()[e.fieldName()]){var r=n.fields.findIndex(function(e){return e.name===t});r>=0&&(n.fields[r]=e)}else n.fields.push(e);return this.__calculateFieldspace().calculateFieldsConfig(),this}},{key:\"calculateVariable\",value:function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{saveChild:!0,replaceVar:!1},r=this.getFieldsConfig(),i=t.slice(0,t.length-1),a=t[t.length-1];if(r[e.name]&&!n.replaceVar)throw new Error(e.name+\" field already exists in model.\");var o=i.map(function(e){var t=r[e];if(!t)throw new Error(e+\" is not a valid column name.\");return t.index}),u=this.clone(),c=u.getFieldspace().fields,f=o.map(function(e){return c[e]}),s=[];l(u._rowDiffset,function(e){var t=f.map(function(t){return t.data[e]});s[e]=a.apply(void 0,function(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t1&&void 0!==arguments[1]?arguments[1]:{},n=arguments[2],r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},i=t.isMutableAction,a=t.sourceId,o=t.payload,u=function e(t){return t._parent?e(t._parent):t}(this),c=u._propagationNameSpace,f={groupByModel:function e(t){return t._parent&&t._derivation.find(function(e){return\"group\"!==e.op})?e(t._parent):t}(this),model:u};return n&&function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments[2],r=void 0,i=t.isMutableAction,a=t.criteria,o=t.action+\"-\"+t.sourceId;r=i?e.mutableActions:e.immutableActions,null===a?delete r[o]:r[o]={model:n,config:t}}(c,t,this),nt(e,f,{propagationNameSpace:c,sourceId:a},Object.assign({payload:o},t)),i&&function(e,t,n){var r=e.immutableActions;for(var i in r){var a=r[i].config,o=n.config.sourceId,u=!n.propConfig.filterImmutableAction||n.propConfig.filterImmutableAction(a,n.config);if(a.sourceId!==o&&u){var c=a.criteria;nt(c,t,{propagationNameSpace:e,propagateToSource:!1,sourceId:o},a)}}}(c,f,{config:t,propConfig:r}),this}},{key:\"on\",value:function(e,t){switch(e){case\"propagation\":this._onPropagation.push(t)}return this}},{key:\"unsubscribe\",value:function(e){switch(e){case\"propagation\":this._onPropagation=[]}return this}},{key:\"handlePropagation\",value:function(e,t){var n=this;this._onPropagation.forEach(function(r){return r.call(n,e,t)})}},{key:\"bin\",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=this.clone(),r=t.name||e+\"_binned\";if(this.getFieldsConfig()[r]||!this.getFieldsConfig()[e])throw new Error(\"Field \"+e+\" already exists.\");var i=I(this._partialFieldspace.fields.find(function(t){return t.name===e}),this._rowDiffset,t),a=Fe([i.data],[{name:r,type:f.MEASURE,subtype:\"discrete\",bins:{range:i.range,mid:i.mid}}],[r])[0];return n.addField(a),We(n,J,{measureName:e,config:t,binFieldName:r},null),n}}],[{key:\"Reducers\",get:function(){return se}}]),t}(),ct=oe.sum,ft=oe.avg,st=oe.min,lt=oe.max,dt=oe.first,pt=oe.last,ht=oe.count,vt=oe.std,mt=n(0);ut.Operators={compose:function(){for(var e=arguments.length,t=Array(e),n=0;n1&&void 0!==arguments[1]?arguments[1]:{saveChild:!0}).saveChild;return t.forEach(function(e){n=e(n),i.push.apply(i,function(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t1&&r.dispose(),n}},bin:function(){for(var e=arguments.length,t=Array(e),n=0;n2?(i=arguments.length<=0?void 0:arguments[0],n=arguments.length<=1?void 0:arguments[1],o=arguments.length<=2?void 0:arguments[2]):(i=null,n=arguments.length<=0?void 0:arguments[0],o=arguments.length<=1?void 0:arguments[1]),t=o(y),(e=r=new _(t.fn)).addDependencies.apply(e,P(t.dependencies)),this._addPropInModel(i,function(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}({},n,r)),this}},{key:\"_addPropInModel\",value:function(e,t){return this._graph.createNodesFrom(t,e),this}},{key:\"on\",value:function(e,t,r){var n,i=e instanceof Array?e:[e],o=this._graph.createElectricNodeOf(i,{type:\"CurrFrame\",fn:t});r&&(n=this._graph.stopPropagation().setPropagationOverride(\"nextFrame\")).resetNodeValue.apply(n,P(e));return o}},{key:\"next\",value:function(e,t,r){var n,i=e instanceof Array?e:[e],o=this._graph.createElectricNodeOf(i,{type:\"NextFrame\",fn:t});r&&(n=this._graph.stopPropagation().setPropagationOverride(\"currentFrame\")).resetNodeValue.apply(n,P(e));return o}},{key:\"lock\",value:function(){return this._lockFlag=!0,this._reqQ.length=0,this}},{key:\"unlock\",value:function(){return this._lockFlag=!1,this.setProp.apply(this,P(this._reqQ)),this._reqQ.length=0,this}},{key:\"prop\",value:function(){var e,t=void 0,r=void 0;switch(e=arguments.length){case 1:t=arguments.length<=0?void 0:arguments[0];break;case 2:t=arguments.length<=0?void 0:arguments[0],r=arguments.length<=1?void 0:arguments[1];break;default:return this}return 2===e?(this._lockFlag?this._reqQ.push([t,r]):this.setProp([t,r]),this):this._graph.getNodeValue(t)}},{key:\"setProp\",value:function(){for(var e,t=this,r=arguments.length,n=Array(r),i=0;i whenever a break is necessary. This is to recgonize one\n * generalized format independent of the implementation (canvas based solution, svg based solution). This method\n * converts the output of getSmartText().text to array of lines if the text is wrapped. It sets a named property\n * `lines` on the object passed as parameter.\n *\n * @param {Object} smartlabel - the object returned by getSmartText based on which line arr which to be formed.\n *\n * @return {Object} - The same object which was passed in the arguments. Also a named property `lines` is set.\n */\nSmartLabelManager.textToLines = function (smartlabel) {\n smartlabel = smartlabel || {};\n\n if (!smartlabel.text) {\n smartlabel.text = '';\n } else if (typeof smartlabel.text !== 'string') {\n smartlabel.text = smartlabel.text.toString();\n }\n\n smartlabel.lines = smartlabel.text.split(/\\n|/ig);\n return smartlabel;\n};\n\n// Saves all the instance created so far\nSmartLabelManager.store = {};\n\n// Calculates space taken by a character with an approximation value which is calculated by repeating the\n// character by string length times.\nSmartLabelManager.prototype._calCharDimWithCache = function (text, calculateDifference, length) {\n if (!this._init) {\n return false;\n }\n\n var size,\n csArr,\n tw,\n twi,\n cachedStyle,\n asymmetricDifference,\n maxAdvancedCacheLimit = this.options.maxCacheLimit,\n container = this._container,\n style = this.style || {},\n cache = this._advancedCache || (this._advancedCache = {}),\n advancedCacheKey = this._advancedCacheKey || (this._advancedCacheKey = []),\n cacheName = text + (style.fontSize || BLANK) + (style.fontFamily || BLANK) + (style.fontWeight || BLANK) + (style.fontStyle || BLANK),\n cacheInitName = text + 'init' + (style.fontSize || BLANK) + (style.fontFamily || BLANK) + (style.fontWeight || BLANK) + (style.fontStyle || BLANK);\n\n htmlSplCharSpace[text] && (text = htmlSplCharSpace[text]);\n\n if (!calculateDifference) {\n asymmetricDifference = 0;\n } else {\n if ((asymmetricDifference = cache[cacheInitName]) === undefined) {\n container.innerHTML = text.repeat ? text.repeat(length) : Array(length + 1).join(text); // jshint ignore:line\n tw = container.offsetWidth;\n\n container.innerHTML = text;\n twi = container.offsetWidth;\n\n asymmetricDifference = cache[cacheInitName] = (tw - length * twi) / (length + 1);\n advancedCacheKey.push(cacheInitName);\n if (advancedCacheKey.length > maxAdvancedCacheLimit) {\n delete cache[advancedCacheKey.shift()];\n }\n }\n }\n\n if (cachedStyle = cache[cacheName]) {\n csArr = cachedStyle.split(',');\n return {\n width: parseFloat(csArr[0], 10),\n height: parseFloat(csArr[1], 10)\n };\n }\n\n container.innerHTML = text;\n\n size = {\n height: container.offsetHeight,\n width: container.offsetWidth + asymmetricDifference\n };\n\n cache[cacheName] = size.width + ',' + size.height;\n advancedCacheKey.push(cacheName);\n if (advancedCacheKey.length > maxAdvancedCacheLimit) {\n delete cache[advancedCacheKey.shift()];\n }\n\n return size;\n};\n\n// Provide function to calculate the height and width based on the environment and available support from dom.\nSmartLabelManager.prototype._getWidthFn = function () {\n var contObj = this._containerObj,\n container = this._container,\n svgText = contObj.svgText;\n\n if (svgText) {\n return function (str) {\n var bbox, width;\n\n svgText.textContent = str;\n bbox = svgText.getBBox();\n width = bbox.width - SVG_BBOX_CORRECTION;\n if (width < 1) {\n width = bbox.width;\n }\n\n return width;\n };\n } else {\n return function (str) {\n container.innerHTML = str;\n return container.offsetWidth;\n };\n }\n};\n\n/*\n * Sets the style based on which the text's metrics to be calculated.\n *\n * @param {Object} style - The style object which affects the text size\n * {\n * fontSize / 'font-size' : MUST BE FOLLOWED BY PX (10px, 11px)\n * fontFamily / 'font-family'\n * fontWeight / 'font-weight'\n * fontStyle / 'font-style'\n * }\n *\n * @return {SmartLabelManager} - Current instance of SmartLabelManager\n */\nSmartLabelManager.prototype.setStyle = function (style) {\n if (!this._init) {\n return this;\n }\n\n var sCont;\n\n if (style === this.style && !this._styleNotSet) {\n return;\n }\n\n if (!style) {\n style = this.style;\n }\n\n slLib.setLineHeight(style);\n this.style = style;\n\n this._containerObj = sCont = this._containerManager.get(style);\n\n if (this._containerObj) {\n this._container = sCont.node;\n this._context = sCont.context;\n this._cache = sCont.charCache;\n this._lineHeight = sCont.lineHeight;\n this._styleNotSet = false;\n } else {\n this._styleNotSet = true;\n }\n\n return this;\n};\n\n/*\n * Decides whether ellipses to be shown if the node is truncated\n *\n * @param {Boolean} useEllipses - decides if a ellipses to be appended if the text is truncated. Default: false\n *\n * @return {SmartLabelManager} - Current instance of SmartLabelManager\n */\nSmartLabelManager.prototype.useEllipsesOnOverflow = function (useEllipses) {\n if (!this._init) {\n return this;\n }\n this._showNoEllipses = !useEllipses;\n return this;\n};\n\n/*\n * Get wrapped or truncated text if a bound box is defined around it. The result text would be separated by
\n * if wrapped\n *\n * @param {String} text - the subject text\n * @param {Number} maxWidth - width in px of the the bound box\n * @param {Number} maxHeight - height in px of the the bound box\n * @param {Boolean} noWrap - whether the text to be wrapped. Default false.\n *\n * @return {Object} - The metrics of the text bounded by the box\n * {\n * height : height of the wrapped text\n * width : width of the wrapped text\n * isTruncated : whether the text is truncated\n * maxHeight : Maximum height given\n * maxWidth : Maximum width given\n * oriText : Original text sent\n * oriTextHeight : Original text height\n * oriTextWidth : Original text width\n * text : SMART TEXT\n * }\n */\nSmartLabelManager.prototype.getSmartText = function (text, maxWidth, maxHeight, noWrap) {\n if (!this._init) {\n return false;\n }\n\n if (text === undefined || text === null) {\n text = '';\n } else if (typeof text !== 'string') {\n text = text.toString();\n }\n\n var len,\n trimStr,\n tempArr,\n tmpText,\n maxWidthWithEll,\n toolText,\n oriWidth,\n oriHeight,\n newCharIndex,\n nearestChar,\n tempChar,\n getWidth,\n initialLeft,\n initialTop,\n getOriSizeImproveObj,\n spanArr,\n x,\n y,\n minWidth,\n elem,\n chr,\n elemRightMostPoint,\n elemLowestPoint,\n lastBR,\n removeFromIndex,\n removeFromIndexForEllipses,\n hasHTMLTag = false,\n maxStrWidth = 0,\n lastDash = -1,\n lastSpace = -1,\n lastIndexBroken = -1,\n strWidth = 0,\n strHeight = 0,\n oriTextArr = [],\n i = 0,\n ellipsesStr = this._showNoEllipses ? '' : '...',\n lineHeight = this._lineHeight,\n context = this._context,\n container = this._container,\n sCont = this._containerObj,\n ellipsesWidth = sCont.ellipsesWidth,\n dotWidth = sCont.dotWidth,\n characterArr = [],\n dashIndex = -1,\n spaceIndex = -1,\n lastLineBreak = -1,\n fastTrim = function fastTrim(str) {\n str = str.replace(/^\\s\\s*/, '');\n var ws = /\\s/,\n i = str.length;\n while (ws.test(str.charAt(i -= 1))) {/* jshint noempty:false */}\n return str.slice(0, i + 1);\n },\n smartLabel = {\n text: text,\n maxWidth: maxWidth,\n maxHeight: maxHeight,\n width: null,\n height: null,\n oriTextWidth: null,\n oriTextHeight: null,\n oriText: text,\n isTruncated: false\n };\n\n getWidth = this._getWidthFn();\n\n // In some browsers, offsetheight of a single-line text is getting little (1 px) heigher value of the\n // lineheight. As a result, smartLabel is unable to return single-line text.\n // To fix this, increase the maxHeight a little amount. Hence maxHeight = lineHeight * 1.2\n if (maxHeight === lineHeight) {\n maxHeight *= 1.2;\n }\n\n if (container) {\n if (!documentSupport.isBrowserLess) {\n hasHTMLTag = slLib.xmlTagRegEx.test(text);\n if (!hasHTMLTag) {\n // Due to support of <,> for xml we convert <, > to <,> respectively so to get the correct\n // width it is required to convert the same before calculation for the new improve version of the\n // get text width.\n tmpText = text.replace(slLib.ltgtRegex, function (match) {\n return match === '<' ? '<' : '>';\n });\n getOriSizeImproveObj = this.getOriSize(tmpText, true);\n\n smartLabel.oriTextWidth = oriWidth = getOriSizeImproveObj.width;\n smartLabel.oriTextHeight = oriHeight = getOriSizeImproveObj.height;\n } else {\n container.innerHTML = text;\n smartLabel.oriTextWidth = oriWidth = container.offsetWidth;\n smartLabel.oriTextHeight = oriHeight = container.offsetHeight;\n }\n\n if (oriHeight <= maxHeight && oriWidth <= maxWidth) {\n smartLabel.width = smartLabel.oriTextWidth = oriWidth;\n smartLabel.height = smartLabel.oriTextHeight = oriHeight;\n return smartLabel;\n }\n\n if (lineHeight > maxHeight) {\n smartLabel.text = '';\n smartLabel.width = smartLabel.oriTextWidth = 0;\n smartLabel.height = smartLabel.oriTextHeight = 0;\n return smartLabel;\n }\n }\n\n // Calculate width with ellipses\n text = fastTrim(text).replace(/(\\s+)/g, ' ');\n maxWidthWithEll = this._showNoEllipses ? maxWidth : maxWidth - ellipsesWidth;\n\n if (!hasHTMLTag) {\n oriTextArr = text.split('');\n len = oriTextArr.length;\n trimStr = '', tempArr = [];\n tempChar = oriTextArr[0];\n\n if (this._cache[tempChar]) {\n minWidth = this._cache[tempChar].width;\n } else {\n minWidth = getWidth(tempChar);\n this._cache[tempChar] = { width: minWidth };\n }\n\n if (maxWidthWithEll > minWidth) {\n tempArr = text.substr(0, slLib.getNearestBreakIndex(text, maxWidthWithEll, this)).split('');\n i = tempArr.length;\n } else if (minWidth > maxWidth) {\n smartLabel.text = '';\n smartLabel.width = smartLabel.oriTextWidth = smartLabel.height = smartLabel.oriTextHeight = 0;\n return smartLabel;\n } else if (ellipsesStr) {\n maxWidthWithEll = maxWidth - 2 * dotWidth;\n if (maxWidthWithEll > minWidth) {\n ellipsesStr = '..';\n } else {\n maxWidthWithEll = maxWidth - dotWidth;\n if (maxWidthWithEll > minWidth) {\n ellipsesStr = '.';\n } else {\n maxWidthWithEll = 0;\n ellipsesStr = '';\n }\n }\n }\n\n strWidth = getWidth(tempArr.join(''));\n strHeight = this._lineHeight;\n\n if (noWrap) {\n for (; i < len; i += 1) {\n tempChar = tempArr[i] = oriTextArr[i];\n if (this._cache[tempChar]) {\n minWidth = this._cache[tempChar].width;\n } else {\n if (!getOriSizeImproveObj || !(minWidth = getOriSizeImproveObj.detailObj[tempChar])) {\n minWidth = getWidth(tempChar);\n }\n this._cache[tempChar] = {\n width: minWidth\n };\n }\n strWidth += minWidth;\n if (strWidth > maxWidthWithEll) {\n if (!trimStr) {\n trimStr = tempArr.slice(0, -1).join('');\n }\n if (strWidth > maxWidth) {\n smartLabel.text = fastTrim(trimStr) + ellipsesStr;\n smartLabel.tooltext = smartLabel.oriText;\n smartLabel.width = getWidth(smartLabel.text);\n smartLabel.height = this._lineHeight;\n return smartLabel;\n }\n }\n }\n\n smartLabel.text = tempArr.join('');\n smartLabel.width = strWidth;\n smartLabel.height = this._lineHeight;\n return smartLabel;\n } else {\n for (; i < len; i += 1) {\n tempChar = tempArr[i] = oriTextArr[i];\n if (tempChar === ' ' && !context) {\n tempChar = ' ';\n }\n\n if (this._cache[tempChar]) {\n minWidth = this._cache[tempChar].width;\n } else {\n if (!getOriSizeImproveObj || !(minWidth = getOriSizeImproveObj.detailObj[tempChar])) {\n minWidth = getWidth(tempChar);\n }\n this._cache[tempChar] = {\n width: minWidth\n };\n }\n strWidth += minWidth;\n\n if (strWidth > maxWidthWithEll) {\n if (!trimStr) {\n trimStr = tempArr.slice(0, -1).join('');\n }\n if (strWidth > maxWidth) {\n /** @todo use regular expressions for better performance. */\n lastSpace = text.substr(0, tempArr.length).lastIndexOf(' ');\n lastDash = text.substr(0, tempArr.length).lastIndexOf('-');\n if (lastSpace > lastIndexBroken) {\n strWidth = getWidth(tempArr.slice(lastIndexBroken + 1, lastSpace).join(''));\n tempArr.splice(lastSpace, 1, '
');\n lastIndexBroken = lastSpace;\n newCharIndex = lastSpace + 1;\n } else if (lastDash > lastIndexBroken) {\n if (lastDash === tempArr.length - 1) {\n strWidth = getWidth(tempArr.slice(lastIndexBroken + 1, lastSpace).join(''));\n tempArr.splice(lastDash, 1, '
-');\n } else {\n strWidth = getWidth(tempArr.slice(lastIndexBroken + 1, lastSpace).join(''));\n tempArr.splice(lastDash, 1, '-
');\n }\n lastIndexBroken = lastDash;\n newCharIndex = lastDash + 1;\n } else {\n tempArr.splice(tempArr.length - 1, 1, '
' + oriTextArr[i]);\n lastLineBreak = tempArr.length - 2;\n strWidth = getWidth(tempArr.slice(lastIndexBroken + 1, lastLineBreak + 1).join(''));\n lastIndexBroken = lastLineBreak;\n newCharIndex = i;\n }\n strHeight += this._lineHeight;\n if (strHeight > maxHeight) {\n smartLabel.text = fastTrim(trimStr) + ellipsesStr;\n smartLabel.tooltext = smartLabel.oriText;\n // The max width among all the lines will be the width of the string.\n smartLabel.width = maxWidth;\n smartLabel.height = strHeight - this._lineHeight;\n return smartLabel;\n } else {\n maxStrWidth = max(maxStrWidth, strWidth);\n trimStr = null;\n nearestChar = slLib.getNearestBreakIndex(text.substr(newCharIndex), maxWidthWithEll, this);\n strWidth = getWidth(text.substr(newCharIndex, nearestChar || 1));\n if (tempArr.length < newCharIndex + nearestChar) {\n tempArr = tempArr.concat(text.substr(tempArr.length, newCharIndex + nearestChar - tempArr.length).split(''));\n i = tempArr.length - 1;\n }\n }\n }\n }\n }\n\n maxStrWidth = max(maxStrWidth, strWidth);\n\n smartLabel.text = tempArr.join('');\n smartLabel.width = maxStrWidth;\n smartLabel.height = strHeight;\n return smartLabel;\n }\n } else {\n toolText = text.replace(slLib.spanAdditionRegx, '$2');\n text = text.replace(slLib.spanAdditionRegx, slLib.spanAdditionReplacer);\n text = text.replace(/()/g, '$1');\n\n container.innerHTML = text;\n\n spanArr = container[documentSupport.childRetriverFn](documentSupport.childRetriverString);\n\n for (x = 0, y = spanArr.length; x < y; x += 1) {\n elem = spanArr[x];\n //chech whether this span is temporary inserted span from it's class\n if (documentSupport.noClassTesting || slLib.classNameReg.test(elem.className)) {\n chr = elem.innerHTML;\n if (chr !== '') {\n if (chr === ' ') {\n spaceIndex = characterArr.length;\n } else if (chr === '-') {\n dashIndex = characterArr.length;\n }\n\n characterArr.push({\n spaceIdx: spaceIndex,\n dashIdx: dashIndex,\n elem: elem\n });\n oriTextArr.push(chr);\n }\n }\n }\n\n i = 0;\n len = characterArr.length;\n minWidth = characterArr[0].elem.offsetWidth;\n\n if (minWidth > maxWidth) {\n smartLabel.text = '';\n smartLabel.width = smartLabel.oriTextWidth = smartLabel.height = smartLabel.oriTextHeight = 0;\n\n return smartLabel;\n } else if (minWidth > maxWidthWithEll && !this._showNoEllipses) {\n\n maxWidthWithEll = maxWidth - 2 * dotWidth;\n if (maxWidthWithEll > minWidth) {\n ellipsesStr = '..';\n } else {\n maxWidthWithEll = maxWidth - dotWidth;\n if (maxWidthWithEll > minWidth) {\n ellipsesStr = '.';\n } else {\n maxWidthWithEll = 0;\n ellipsesStr = '';\n }\n }\n }\n\n initialLeft = characterArr[0].elem.offsetLeft;\n initialTop = characterArr[0].elem.offsetTop;\n\n if (noWrap) {\n for (; i < len; i += 1) {\n elem = characterArr[i].elem;\n elemRightMostPoint = elem.offsetLeft - initialLeft + elem.offsetWidth;\n\n if (elemRightMostPoint > maxWidthWithEll) {\n if (!removeFromIndexForEllipses) {\n removeFromIndexForEllipses = i;\n }\n if (container.offsetWidth > maxWidth) {\n removeFromIndex = i;\n i = len;\n }\n }\n }\n } else {\n for (; i < len; i += 1) {\n elem = characterArr[i].elem;\n elemLowestPoint = elem.offsetHeight + (elem.offsetTop - initialTop);\n elemRightMostPoint = elem.offsetLeft - initialLeft + elem.offsetWidth;\n\n lastBR = null;\n\n if (elemRightMostPoint > maxWidthWithEll) {\n if (!removeFromIndexForEllipses) {\n removeFromIndexForEllipses = i;\n }\n\n if (elemRightMostPoint > maxWidth) {\n lastSpace = characterArr[i].spaceIdx;\n lastDash = characterArr[i].dashIdx;\n if (lastSpace > lastIndexBroken) {\n characterArr[lastSpace].elem.innerHTML = '
';\n lastIndexBroken = lastSpace;\n } else if (lastDash > lastIndexBroken) {\n if (lastDash === i) {\n // in case the overflowing character itself is the '-'\n characterArr[lastDash].elem.innerHTML = '
-';\n } else {\n characterArr[lastDash].elem.innerHTML = '-
';\n }\n lastIndexBroken = lastDash;\n } else {\n elem.parentNode.insertBefore(lastBR = doc.createElement('br'), elem);\n }\n\n //check whether this break made current element outside the area height\n if (elem.offsetHeight + elem.offsetTop > maxHeight) {\n //remove the lastly inserted line break\n if (lastBR) {\n lastBR.parentNode.removeChild(lastBR);\n } else if (lastIndexBroken === lastDash) {\n characterArr[lastDash].elem.innerHTML = '-';\n } else {\n characterArr[lastSpace].elem.innerHTML = ' ';\n }\n removeFromIndex = i;\n //break the looping condition\n i = len;\n } else {\n removeFromIndexForEllipses = null;\n }\n }\n } else {\n //check whether this break made current element outside the area height\n if (elemLowestPoint > maxHeight) {\n removeFromIndex = i;\n i = len;\n }\n }\n }\n }\n\n if (removeFromIndex < len) {\n //set the trancated property of the smartlabel\n smartLabel.isTruncated = true;\n\n /** @todo is this really needed? */\n removeFromIndexForEllipses = removeFromIndexForEllipses ? removeFromIndexForEllipses : removeFromIndex;\n\n for (i = len - 1; i >= removeFromIndexForEllipses; i -= 1) {\n elem = characterArr[i].elem;\n //chech whether this span is temporary inserted span from it's class\n elem.parentNode.removeChild(elem);\n }\n\n for (; i >= 0; i -= 1) {\n elem = characterArr[i].elem;\n if (slLib.classNameBrReg.test(elem.className)) {\n //chech whether this span is temporary inserted span from it's class\n elem.parentNode.removeChild(elem);\n } else {\n i = 0;\n }\n }\n }\n\n //get the smart text\n smartLabel.text = container.innerHTML.replace(slLib.spanRemovalRegx, '$1').replace(/\\&\\;/g, '&');\n if (smartLabel.isTruncated) {\n smartLabel.text += ellipsesStr;\n smartLabel.tooltext = toolText;\n }\n }\n\n smartLabel.height = container.offsetHeight;\n smartLabel.width = container.offsetWidth;\n\n return smartLabel;\n } else {\n smartLabel.error = new Error('Body Tag Missing!');\n return smartLabel;\n }\n};\n\n/*\n * Get the height and width of a text.\n *\n * @param {String} text - Text whose metrics to be measured\n * @param {Boolean} Optional detailedCalculationFlag - this flag if set it calculates per letter position\n * information and returns it. Ideally you dont need it unless you want to post process the\n * string. And its an EXPENSIVE OPERATION.\n *\n * @return {Object} - If detailedCalculationFlag is set to true the returned object would be\n * {\n * height: height of the text\n * width: width of the text\n * detailObj: detail calculation of letters in the format {lettername: width}\n * }\n * If detailedCalculationFlag is set to false the returned object wont have the detailObj prop.\n */\nSmartLabelManager.prototype.getOriSize = function (text, detailedCalculationFlag) {\n if (!this._init) {\n return false;\n }\n\n var textArr,\n letter,\n lSize,\n i,\n l,\n cumulativeSize = 0,\n height = 0,\n indiSizeStore = {};\n\n if (!detailedCalculationFlag) {\n return this._calCharDimWithCache(text);\n }\n\n // Calculate the width of every letter with an approximation\n textArr = text.split('');\n for (i = 0, l = textArr.length; i < l; i++) {\n letter = textArr[i];\n lSize = this._calCharDimWithCache(letter, true, textArr.length);\n height = max(height, lSize.height);\n cumulativeSize += lSize.width;\n indiSizeStore[letter] = lSize.width;\n }\n\n return {\n width: round(cumulativeSize),\n height: height,\n detailObj: indiSizeStore\n };\n};\n\n/*\n * Dispose the container and object allocated by the smartlabel\n */\nSmartLabelManager.prototype.dispose = function () {\n if (!this._init) {\n return this;\n }\n\n this._containerManager && this._containerManager.dispose && this._containerManager.dispose();\n\n delete this._container;\n delete this._context;\n delete this._cache;\n delete this._containerManager;\n delete this._containerObj;\n delete this.id;\n delete this.style;\n delete this.parentContainer;\n delete this._showNoEllipses;\n\n return this;\n};\n\nexports['default'] = SmartLabelManager;\nmodule.exports = exports['default'];","'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n\tvalue: true\n});\nvar lib = {\n\tinit: function init(win) {\n\t\tvar doc = win.document,\n\t\t nav = win.navigator,\n\t\t userAgent = nav.userAgent,\n\t\t DIV = 'DIV',\n\t\t ceil = Math.ceil,\n\t\t floor = Math.floor,\n\t\t containerInstanceCount = 0,\n\t\t clsNameSpace = 'fusioncharts-smartlabel-',\n\t\t containerClass = clsNameSpace + 'container',\n\t\t classNameWithTag = clsNameSpace + 'tag',\n\t\t classNameWithTagBR = clsNameSpace + 'br';\n\n\t\tlib = {\n\t\t\twin: win,\n\n\t\t\tcontainerClass: containerClass,\n\n\t\t\tclassNameWithTag: classNameWithTag,\n\n\t\t\tclassNameWithTagBR: classNameWithTagBR,\n\n\t\t\tmaxDefaultCacheLimit: 500,\n\n\t\t\tclassNameReg: new RegExp('\\b' + classNameWithTag + '\\b'),\n\n\t\t\tclassNameBrReg: new RegExp('\\b' + classNameWithTagBR + '\\b'),\n\n\t\t\tspanAdditionRegx: /(<[^<\\>]+?\\>)|(&(?:[a-z]+|#[0-9]+);|.)/ig,\n\n\t\t\tspanAdditionReplacer: '$1$2',\n\n\t\t\tspanRemovalRegx: new RegExp('\\\\]+?' + classNameWithTag + '[^\\\\>]{0,}\\\\>(.*?)\\\\<\\\\/span\\\\>', 'ig'),\n\n\t\t\txmlTagRegEx: new RegExp('<[^>][^<]*[^>]+>', 'i'),\n\n\t\t\tltgtRegex: /<|>/g,\n\n\t\t\tbrReplaceRegex: //ig,\n\n\t\t\ttestStrAvg: 'WgI',\n\n\t\t\t// This style is applied over the parent smartlabel container. The container is kept hidden from the viewport\n\t\t\tparentContainerStyle: {\n\t\t\t\tposition: 'absolute',\n\t\t\t\ttop: '-9999em',\n\t\t\t\twhiteSpace: 'nowrap',\n\t\t\t\tpadding: '0px',\n\t\t\t\twidth: '1px',\n\t\t\t\theight: '1px',\n\t\t\t\toverflow: 'hidden'\n\t\t\t},\n\n\t\t\t// All the style which might affect the text metrics\n\t\t\tsupportedStyle: {\n\t\t\t\tfont: 'font',\n\t\t\t\tfontFamily: 'font-family',\n\t\t\t\t'font-family': 'font-family',\n\t\t\t\tfontWeight: 'font-weight',\n\t\t\t\t'font-weight': 'font-weight',\n\t\t\t\tfontSize: 'font-size',\n\t\t\t\t'font-size': 'font-size',\n\t\t\t\tlineHeight: 'line-height',\n\t\t\t\t'line-height': 'line-height',\n\t\t\t\tfontStyle: 'font-style',\n\t\t\t\t'font-style': 'font-style'\n\t\t\t},\n\n\t\t\t// Get the support list for html the document where the text calcution is to be done.\n\t\t\tgetDocumentSupport: function getDocumentSupport() {\n\t\t\t\tvar childRetriverFn, childRetriverString, noClassTesting;\n\n\t\t\t\tif (doc.getElementsByClassName) {\n\t\t\t\t\tchildRetriverFn = 'getElementsByClassName';\n\t\t\t\t\tchildRetriverString = classNameWithTag;\n\t\t\t\t\tnoClassTesting = true;\n\t\t\t\t} else {\n\t\t\t\t\tchildRetriverFn = 'getElementsByTagName';\n\t\t\t\t\tchildRetriverString = 'span';\n\t\t\t\t\tnoClassTesting = false;\n\t\t\t\t}\n\n\t\t\t\treturn {\n\t\t\t\t\tisIE: /msie/i.test(userAgent) && !win.opera,\n\t\t\t\t\thasSVG: Boolean(win.SVGAngle || doc.implementation.hasFeature('http://www.w3.org/TR/SVG11/feature#BasicStructure', '1.1')),\n\t\t\t\t\tisHeadLess: new RegExp(' HtmlUnit').test(userAgent),\n\t\t\t\t\tisWebKit: new RegExp(' AppleWebKit/').test(userAgent),\n\t\t\t\t\tchildRetriverFn: childRetriverFn,\n\t\t\t\t\tchildRetriverString: childRetriverString,\n\t\t\t\t\tnoClassTesting: noClassTesting\n\t\t\t\t};\n\t\t\t},\n\n\t\t\t/*\n * Create a html div element and attach it with a parent. All the subsequent operations are performed\n * by upding this dom tree only.\n *\n * @param {HTMLElement} - The html element where the newly created div is to be attached. If not passed,\n * the new div is appended on the body.\n */\n\t\t\tcreateContainer: function createContainer(containerParent) {\n\t\t\t\tvar body, container;\n\n\t\t\t\tif (containerParent && (containerParent.offsetWidth || containerParent.offsetHeight)) {\n\t\t\t\t\tif (containerParent.appendChild) {\n\t\t\t\t\t\tcontainerParent.appendChild(container = doc.createElement(DIV));\n\t\t\t\t\t\tcontainer.className = containerClass;\n\t\t\t\t\t\tcontainer.setAttribute('aria-hidden', 'true');\n\t\t\t\t\t\tcontainer.setAttribute('role', 'presentation');\n\t\t\t\t\t\treturn container;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tbody = doc.getElementsByTagName('body')[0];\n\n\t\t\t\t\tif (body && body.appendChild) {\n\t\t\t\t\t\tcontainer = doc.createElement(DIV);\n\t\t\t\t\t\tcontainer.className = containerClass;\n\t\t\t\t\t\tcontainer.setAttribute('aria-hidden', 'true');\n\t\t\t\t\t\tcontainer.setAttribute('role', 'presentation');\n\t\t\t\t\t\tcontainerInstanceCount += 1;\n\t\t\t\t\t\tbody.appendChild(container);\n\t\t\t\t\t\treturn container;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// Finds a approximate position where the text is to be broken\n\t\t\tgetNearestBreakIndex: function getNearestBreakIndex(text, maxWidth, sl) {\n\t\t\t\tif (!text || !text.length) {\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\n\t\t\t\tvar difference,\n\t\t\t\t getWidth = sl._getWidthFn(),\n\t\t\t\t charLen = 0,\n\t\t\t\t increment = 0,\n\t\t\t\t oriWidth = getWidth(text),\n\t\t\t\t avgWidth = oriWidth / text.length;\n\n\t\t\t\tdifference = maxWidth;\n\t\t\t\tcharLen = ceil(maxWidth / avgWidth);\n\n\t\t\t\tif (oriWidth < maxWidth) {\n\t\t\t\t\treturn text.length - 1;\n\t\t\t\t}\n\n\t\t\t\tif (charLen > text.length) {\n\t\t\t\t\tdifference = maxWidth - oriWidth;\n\t\t\t\t\tcharLen = text.length;\n\t\t\t\t}\n\n\t\t\t\twhile (difference > 0) {\n\t\t\t\t\tdifference = maxWidth - getWidth(text.substr(0, charLen));\n\t\t\t\t\tincrement = floor(difference / avgWidth);\n\t\t\t\t\tif (increment) {\n\t\t\t\t\t\tcharLen += increment;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn charLen;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\twhile (difference < 0) {\n\t\t\t\t\tdifference = maxWidth - getWidth(text.substr(0, charLen));\n\t\t\t\t\tincrement = floor(difference / avgWidth);\n\t\t\t\t\tif (increment) {\n\t\t\t\t\t\tcharLen += increment;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn charLen;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn charLen;\n\t\t\t},\n\n\t\t\t/*\n * Determine lineheight of a text for a given style. It adds propery lineHeight to the style passed\n *\n * @param {Object} - The style based on which the text's metric needs to be calculated. The calculation happens\n * based on fontSize property, if its not present a default font size is assumed.\n *\n * @return {Object} - The style that was passed with lineHeight as a named propery set on the object.\n */\n\t\t\tsetLineHeight: function setLineHeight(styleObj) {\n\t\t\t\tvar fSize = styleObj.fontSize = styleObj.fontSize || '12px';\n\t\t\t\tstyleObj.lineHeight = styleObj.lineHeight || styleObj['line-height'] || parseInt(fSize, 10) * 1.2 + 'px';\n\t\t\t\treturn styleObj;\n\t\t\t}\n\t\t};\n\n\t\treturn lib;\n\t}\n};\n\nexports['default'] = lib;\nmodule.exports = exports['default'];","const Muze = require('./muze');\n\nmodule.exports = Muze.default ? Muze.default : Muze;\n","'use strict';\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _lib = require('./lib');\n\nvar _lib2 = _interopRequireDefault(_lib);\n\nvar slLib = _lib2['default'].init(typeof window !== \"undefined\" ? window : undefined),\n doc = slLib.win.document,\n documentSupport = slLib.getDocumentSupport(),\n SVG_BBOX_CORRECTION = documentSupport.isWebKit ? 0 : 4.5;\n\nfunction ContainerManager(parentContainer, isBrowserLess, maxContainers) {\n var svg;\n\n maxContainers = maxContainers > 5 ? maxContainers : 5;\n maxContainers = maxContainers < 20 ? maxContainers : 20;\n\n this.maxContainers = maxContainers;\n this.first = null;\n this.last = null;\n this.containers = {};\n this.length = 0;\n this.rootNode = parentContainer;\n\n if (isBrowserLess) {\n svg = doc.createElementNS('http://www.w3.org/2000/svg', 'svg');\n svg.setAttributeNS('http://www.w3.org/2000/svg', 'xlink', 'http://www.w3.org/1999/xlink');\n svg.setAttributeNS('http://www.w3.org/2000/svg', 'height', '0');\n svg.setAttributeNS('http://www.w3.org/2000/svg', 'width', '0');\n this.svgRoot = svg;\n this.rootNode.appendChild(svg);\n }\n}\n\nContainerManager.prototype.get = function (style) {\n var diff,\n key,\n containerObj,\n containers = this.containers,\n len = this.length,\n max = this.maxContainers,\n keyStr = '';\n\n for (key in slLib.supportedStyle) {\n if (style[key] !== undefined) {\n keyStr += slLib.supportedStyle[key] + ':' + style[key] + ';';\n }\n }\n\n if (!keyStr) {\n return false;\n }\n\n if (containerObj = containers[keyStr]) {\n if (this.first !== containerObj) {\n containerObj.prev && (containerObj.prev.next = containerObj.next);\n containerObj.next && (containerObj.next.prev = containerObj.prev);\n containerObj.next = this.first;\n containerObj.next.prev = containerObj;\n this.last === containerObj && (this.last = containerObj.prev);\n containerObj.prev = null;\n this.first = containerObj;\n }\n } else {\n if (len >= max) {\n diff = len - max + 1;\n // +1 is to remove an extra entry to make space for the new container to be added.\n while (diff--) {\n this.removeContainer(this.last);\n }\n }\n containerObj = this.addContainer(keyStr);\n }\n\n return containerObj;\n};\n\nContainerManager.prototype.addContainer = function (keyStr) {\n var node, container;\n\n this.containers[keyStr] = container = {\n next: null,\n prev: null,\n node: null,\n ellipsesWidth: 0,\n lineHeight: 0,\n dotWidth: 0,\n avgCharWidth: 4,\n keyStr: keyStr,\n charCache: {}\n };\n\n // Since the container objects are arranged from most recent to least recent order, we need to add the new\n // object at the beginning of the list.\n container.next = this.first;\n container.next && (container.next.prev = container);\n this.first = container;\n if (!this.last) {\n this.last = container;\n }\n this.length += 1;\n\n node = container.node = doc.createElement('div');\n this.rootNode.appendChild(node);\n\n if (documentSupport.isIE && !documentSupport.hasSVG) {\n node.style.setAttribute('cssText', keyStr);\n } else {\n node.setAttribute('style', keyStr);\n }\n\n node.setAttribute('aria-hidden', 'true');\n node.setAttribute('role', 'presentation');\n node.style.display = 'inline-block';\n\n node.innerHTML = slLib.testStrAvg; // A test string.\n container.lineHeight = node.offsetHeight;\n container.avgCharWidth = node.offsetWidth / 3;\n\n if (documentSupport.isBrowserLess) {\n node = container.svgText = doc.createElementNS('http://www.w3.org/2000/svg', 'text');\n node.setAttribute('style', keyStr);\n this.svgRoot.appendChild(node);\n\n node.textContent = slLib.testStrAvg; // A test string.\n container.lineHeight = node.getBBox().height;\n container.avgCharWidth = (node.getBBox().width - SVG_BBOX_CORRECTION) / 3;\n\n node.textContent = '...';\n container.ellipsesWidth = node.getBBox().width - SVG_BBOX_CORRECTION;\n node.textContent = '.';\n container.dotWidth = node.getBBox().width - SVG_BBOX_CORRECTION;\n } else {\n node.innerHTML = '...';\n container.ellipsesWidth = node.offsetWidth;\n node.innerHTML = '.';\n container.dotWidth = node.offsetWidth;\n node.innerHTML = '';\n }\n\n return container;\n};\n\nContainerManager.prototype.removeContainer = function (cObj) {\n var keyStr = cObj.keyStr;\n\n if (!keyStr || !this.length || !cObj) {\n return;\n }\n this.length -= 1;\n\n cObj.prev && (cObj.prev.next = cObj.next);\n cObj.next && (cObj.next.prev = cObj.prev);\n this.first === cObj && (this.first = cObj.next);\n this.last === cObj && (this.last = cObj.prev);\n\n cObj.node.parentNode.removeChild(cObj.node);\n\n delete this.containers[keyStr];\n};\n\nContainerManager.prototype.dispose = function () {\n var key,\n containers = this.containers;\n\n this.maxContainers = null;\n for (key in containers) {\n this.removeContainer(containers[key]);\n }\n\n this.rootNode.parentNode.removeChild(this.rootNode);\n\n this.rootNode = null;\n this.first = null;\n this.last = null;\n};\n\nmodule.exports = ContainerManager;","export default function(a, b) {\n return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","import ascending from \"./ascending\";\n\nexport default function(compare) {\n if (compare.length === 1) compare = ascendingComparator(compare);\n return {\n left: function(a, x, lo, hi) {\n if (lo == null) lo = 0;\n if (hi == null) hi = a.length;\n while (lo < hi) {\n var mid = lo + hi >>> 1;\n if (compare(a[mid], x) < 0) lo = mid + 1;\n else hi = mid;\n }\n return lo;\n },\n right: function(a, x, lo, hi) {\n if (lo == null) lo = 0;\n if (hi == null) hi = a.length;\n while (lo < hi) {\n var mid = lo + hi >>> 1;\n if (compare(a[mid], x) > 0) hi = mid;\n else lo = mid + 1;\n }\n return lo;\n }\n };\n}\n\nfunction ascendingComparator(f) {\n return function(d, x) {\n return ascending(f(d), x);\n };\n}\n","import ascending from \"./ascending\";\nimport bisector from \"./bisector\";\n\nvar ascendingBisect = bisector(ascending);\nexport var bisectRight = ascendingBisect.right;\nexport var bisectLeft = ascendingBisect.left;\nexport default bisectRight;\n","import {pair} from \"./pairs\";\n\nexport default function(values0, values1, reduce) {\n var n0 = values0.length,\n n1 = values1.length,\n values = new Array(n0 * n1),\n i0,\n i1,\n i,\n value0;\n\n if (reduce == null) reduce = pair;\n\n for (i0 = i = 0; i0 < n0; ++i0) {\n for (value0 = values0[i0], i1 = 0; i1 < n1; ++i1, ++i) {\n values[i] = reduce(value0, values1[i1]);\n }\n }\n\n return values;\n}\n","export default function(x) {\n return x === null ? NaN : +x;\n}\n","var array = Array.prototype;\n\nexport var slice = array.slice;\nexport var map = array.map;\n","export default function(start, stop, step) {\n start = +start, stop = +stop, step = (n = arguments.length) < 2 ? (stop = start, start = 0, 1) : n < 3 ? 1 : +step;\n\n var i = -1,\n n = Math.max(0, Math.ceil((stop - start) / step)) | 0,\n range = new Array(n);\n\n while (++i < n) {\n range[i] = start + i * step;\n }\n\n return range;\n}\n","var e10 = Math.sqrt(50),\n e5 = Math.sqrt(10),\n e2 = Math.sqrt(2);\n\nexport default function(start, stop, count) {\n var reverse,\n i = -1,\n n,\n ticks,\n step;\n\n stop = +stop, start = +start, count = +count;\n if (start === stop && count > 0) return [start];\n if (reverse = stop < start) n = start, start = stop, stop = n;\n if ((step = tickIncrement(start, stop, count)) === 0 || !isFinite(step)) return [];\n\n if (step > 0) {\n start = Math.ceil(start / step);\n stop = Math.floor(stop / step);\n ticks = new Array(n = Math.ceil(stop - start + 1));\n while (++i < n) ticks[i] = (start + i) * step;\n } else {\n start = Math.floor(start * step);\n stop = Math.ceil(stop * step);\n ticks = new Array(n = Math.ceil(start - stop + 1));\n while (++i < n) ticks[i] = (start - i) / step;\n }\n\n if (reverse) ticks.reverse();\n\n return ticks;\n}\n\nexport function tickIncrement(start, stop, count) {\n var step = (stop - start) / Math.max(0, count),\n power = Math.floor(Math.log(step) / Math.LN10),\n error = step / Math.pow(10, power);\n return power >= 0\n ? (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1) * Math.pow(10, power)\n : -Math.pow(10, -power) / (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1);\n}\n\nexport function tickStep(start, stop, count) {\n var step0 = Math.abs(stop - start) / Math.max(0, count),\n step1 = Math.pow(10, Math.floor(Math.log(step0) / Math.LN10)),\n error = step0 / step1;\n if (error >= e10) step1 *= 10;\n else if (error >= e5) step1 *= 5;\n else if (error >= e2) step1 *= 2;\n return stop < start ? -step1 : step1;\n}\n","export default function(values) {\n return Math.ceil(Math.log(values.length) / Math.LN2) + 1;\n}\n","import number from \"./number\";\n\nexport default function(values, p, valueof) {\n if (valueof == null) valueof = number;\n if (!(n = values.length)) return;\n if ((p = +p) <= 0 || n < 2) return +valueof(values[0], 0, values);\n if (p >= 1) return +valueof(values[n - 1], n - 1, values);\n var n,\n i = (n - 1) * p,\n i0 = Math.floor(i),\n value0 = +valueof(values[i0], i0, values),\n value1 = +valueof(values[i0 + 1], i0 + 1, values);\n return value0 + (value1 - value0) * (i - i0);\n}\n","export var prefix = \"$\";\n\nfunction Map() {}\n\nMap.prototype = map.prototype = {\n constructor: Map,\n has: function(key) {\n return (prefix + key) in this;\n },\n get: function(key) {\n return this[prefix + key];\n },\n set: function(key, value) {\n this[prefix + key] = value;\n return this;\n },\n remove: function(key) {\n var property = prefix + key;\n return property in this && delete this[property];\n },\n clear: function() {\n for (var property in this) if (property[0] === prefix) delete this[property];\n },\n keys: function() {\n var keys = [];\n for (var property in this) if (property[0] === prefix) keys.push(property.slice(1));\n return keys;\n },\n values: function() {\n var values = [];\n for (var property in this) if (property[0] === prefix) values.push(this[property]);\n return values;\n },\n entries: function() {\n var entries = [];\n for (var property in this) if (property[0] === prefix) entries.push({key: property.slice(1), value: this[property]});\n return entries;\n },\n size: function() {\n var size = 0;\n for (var property in this) if (property[0] === prefix) ++size;\n return size;\n },\n empty: function() {\n for (var property in this) if (property[0] === prefix) return false;\n return true;\n },\n each: function(f) {\n for (var property in this) if (property[0] === prefix) f(this[property], property.slice(1), this);\n }\n};\n\nfunction map(object, f) {\n var map = new Map;\n\n // Copy constructor.\n if (object instanceof Map) object.each(function(value, key) { map.set(key, value); });\n\n // Index array by numeric index or specified key function.\n else if (Array.isArray(object)) {\n var i = -1,\n n = object.length,\n o;\n\n if (f == null) while (++i < n) map.set(i, object[i]);\n else while (++i < n) map.set(f(o = object[i], i, object), o);\n }\n\n // Convert object to map.\n else if (object) for (var key in object) map.set(key, object[key]);\n\n return map;\n}\n\nexport default map;\n","import map from \"./map\";\n\nexport default function() {\n var keys = [],\n sortKeys = [],\n sortValues,\n rollup,\n nest;\n\n function apply(array, depth, createResult, setResult) {\n if (depth >= keys.length) {\n if (sortValues != null) array.sort(sortValues);\n return rollup != null ? rollup(array) : array;\n }\n\n var i = -1,\n n = array.length,\n key = keys[depth++],\n keyValue,\n value,\n valuesByKey = map(),\n values,\n result = createResult();\n\n while (++i < n) {\n if (values = valuesByKey.get(keyValue = key(value = array[i]) + \"\")) {\n values.push(value);\n } else {\n valuesByKey.set(keyValue, [value]);\n }\n }\n\n valuesByKey.each(function(values, key) {\n setResult(result, key, apply(values, depth, createResult, setResult));\n });\n\n return result;\n }\n\n function entries(map, depth) {\n if (++depth > keys.length) return map;\n var array, sortKey = sortKeys[depth - 1];\n if (rollup != null && depth >= keys.length) array = map.entries();\n else array = [], map.each(function(v, k) { array.push({key: k, values: entries(v, depth)}); });\n return sortKey != null ? array.sort(function(a, b) { return sortKey(a.key, b.key); }) : array;\n }\n\n return nest = {\n object: function(array) { return apply(array, 0, createObject, setObject); },\n map: function(array) { return apply(array, 0, createMap, setMap); },\n entries: function(array) { return entries(apply(array, 0, createMap, setMap), 0); },\n key: function(d) { keys.push(d); return nest; },\n sortKeys: function(order) { sortKeys[keys.length - 1] = order; return nest; },\n sortValues: function(order) { sortValues = order; return nest; },\n rollup: function(f) { rollup = f; return nest; }\n };\n}\n\nfunction createObject() {\n return {};\n}\n\nfunction setObject(object, key, value) {\n object[key] = value;\n}\n\nfunction createMap() {\n return map();\n}\n\nfunction setMap(map, key, value) {\n map.set(key, value);\n}\n","import {default as map, prefix} from \"./map\";\n\nfunction Set() {}\n\nvar proto = map.prototype;\n\nSet.prototype = set.prototype = {\n constructor: Set,\n has: proto.has,\n add: function(value) {\n value += \"\";\n this[prefix + value] = value;\n return this;\n },\n remove: proto.remove,\n clear: proto.clear,\n values: proto.keys,\n size: proto.size,\n empty: proto.empty,\n each: proto.each\n};\n\nfunction set(object, f) {\n var set = new Set;\n\n // Copy constructor.\n if (object instanceof Set) object.each(function(value) { set.add(value); });\n\n // Otherwise, assume it’s an array.\n else if (object) {\n var i = -1, n = object.length;\n if (f == null) while (++i < n) set.add(object[i]);\n else while (++i < n) set.add(f(object[i], i, object));\n }\n\n return set;\n}\n\nexport default set;\n","var array = Array.prototype;\n\nexport var map = array.map;\nexport var slice = array.slice;\n","import {map} from \"d3-collection\";\nimport {slice} from \"./array\";\n\nexport var implicit = {name: \"implicit\"};\n\nexport default function ordinal(range) {\n var index = map(),\n domain = [],\n unknown = implicit;\n\n range = range == null ? [] : slice.call(range);\n\n function scale(d) {\n var key = d + \"\", i = index.get(key);\n if (!i) {\n if (unknown !== implicit) return unknown;\n index.set(key, i = domain.push(d));\n }\n return range[(i - 1) % range.length];\n }\n\n scale.domain = function(_) {\n if (!arguments.length) return domain.slice();\n domain = [], index = map();\n var i = -1, n = _.length, d, key;\n while (++i < n) if (!index.has(key = (d = _[i]) + \"\")) index.set(key, domain.push(d));\n return scale;\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = slice.call(_), scale) : range.slice();\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n scale.copy = function() {\n return ordinal()\n .domain(domain)\n .range(range)\n .unknown(unknown);\n };\n\n return scale;\n}\n","import {range as sequence} from \"d3-array\";\nimport ordinal from \"./ordinal\";\n\nexport default function band() {\n var scale = ordinal().unknown(undefined),\n domain = scale.domain,\n ordinalRange = scale.range,\n range = [0, 1],\n step,\n bandwidth,\n round = false,\n paddingInner = 0,\n paddingOuter = 0,\n align = 0.5;\n\n delete scale.unknown;\n function rescale() {\n var n = domain().length,\n reverse = range[1] < range[0],\n start = range[reverse - 0],\n stop = range[1 - reverse];\n step = (stop - start) / Math.max(1, n - paddingInner + paddingOuter * 2);\n if (round) step = Math.floor(step);\n start += (stop - start - step * (n - paddingInner)) * align;\n bandwidth = step * (1 - paddingInner);\n if (round) start = Math.round(start), bandwidth = Math.round(bandwidth);\n var values = sequence(n).map(function(i) { return start + step * i; });\n return ordinalRange(reverse ? values.reverse() : values);\n }\n\n scale.domain = function(_) {\n return arguments.length ? (domain(_), rescale()) : domain();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = [+_[0], +_[1]], rescale()) : range.slice();\n };\n\n scale.rangeRound = function(_) {\n return range = [+_[0], +_[1]], round = true, rescale();\n };\n\n scale.bandwidth = function() {\n return bandwidth;\n };\n\n scale.step = function() {\n return step;\n };\n\n scale.round = function(_) {\n return arguments.length ? (round = !!_, rescale()) : round;\n };\n\n scale.padding = function(_) {\n return arguments.length ? (paddingInner = paddingOuter = Math.max(0, Math.min(1, _)), rescale()) : paddingInner;\n };\n\n scale.paddingInner = function(_) {\n return arguments.length ? (paddingInner = Math.max(0, Math.min(1, _)), rescale()) : paddingInner;\n };\n\n scale.paddingOuter = function(_) {\n return arguments.length ? (paddingOuter = Math.max(0, Math.min(1, _)), rescale()) : paddingOuter;\n };\n\n scale.align = function(_) {\n return arguments.length ? (align = Math.max(0, Math.min(1, _)), rescale()) : align;\n };\n\n scale.copy = function() {\n return band()\n .domain(domain())\n .range(range)\n .round(round)\n .paddingInner(paddingInner)\n .paddingOuter(paddingOuter)\n .align(align);\n };\n\n scale.invertExtent = function(r0, r1) {\n var lo = +r0,\n hi = arguments.length > 1 ? +r1 : lo,\n reverse = range[1] < range[0],\n values = reverse ? ordinalRange().reverse() : ordinalRange(),\n n = values.length - 1, a, b, t,\n hiIndex;\n values.push(values[n] + this.step());\n // order range inputs, bail if outside of scale range\n if (hi < lo) t = lo, lo = hi, hi = t;\n if (hi < values[0] || lo > range[1-reverse]) return undefined;\n\n // binary search to index into scale range\n a = Math.max(0, getClosestIndexOf(values, lo));\n hiIndex = getClosestIndexOf(values, hi);\n b = lo===hi ? a : Math.max(a, hiIndex - 1);\n\n // increment index a if lo is within padding gap\n // if (lo - values[a] > bandwidth + 1e-10) ++a;\n\n if (reverse) t = a, a = n - b, b = n - t; // map + swap\n return (a > b) ? undefined : domain().slice(a, b+1);\n };\n\n scale.invert = function (r0, r1) {\n var lo = +r0,\n hi = arguments.length > 1 ? +r1 : lo,\n reverse = range[1] < range[0],\n values = reverse ? ordinalRange().reverse() : ordinalRange(),\n n = values.length - 1,\n a,\n t;\n\n // order range inputs, bail if outside of scale range\n if (hi < lo) t = lo, lo = hi, hi = t;\n if (hi < values[0] || lo > range[1-reverse]) return undefined;\n\n // binary search to index into scale range\n a = Math.max(0, getClosestIndexOf(values, lo, 'left'));\n\n // increment index a if lo is within padding gap\n // if (lo - values[a] > bandwidth + 1e-10) ++a;\n\n return domain()[reverse ? n - a : a];\n }\n return rescale();\n}\n\nfunction pointish(scale) {\n var copy = scale.copy;\n\n scale.padding = scale.paddingOuter;\n delete scale.paddingInner;\n delete scale.paddingOuter;\n\n scale.copy = function() {\n return pointish(copy());\n };\n\n return scale;\n}\n\nexport function point() {\n return pointish(band().paddingInner(1));\n}\n\nfunction getClosestIndexOf (arr, value, side) {\n var low = 0,\n arrLen = arr.length,\n high = arrLen - 1,\n highVal,\n mid,\n d1,\n d2;\n\n while (low < high) {\n mid = Math.floor((low + high) / 2);\n d1 = Math.abs(arr[mid] - value);\n d2 = Math.abs(arr[mid + 1] - value);\n\n if (d2 <= d1) {\n low = mid + 1;\n }\n else {\n high = mid;\n }\n }\n\n if (!side) {\n return high;\n }\n\n highVal = arr[high];\n if (highVal === value) {\n return high;\n } else if (highVal > value) {\n if (high === 0) { return high; }\n return side === 'left'? high - 1 : high;\n } else {\n if (high === arr.length - 1) { return high; }\n return side === 'left'? high : high + 1;\n }\n}","export default function(constructor, factory, prototype) {\n constructor.prototype = factory.prototype = prototype;\n prototype.constructor = constructor;\n}\n\nexport function extend(parent, definition) {\n var prototype = Object.create(parent.prototype);\n for (var key in definition) prototype[key] = definition[key];\n return prototype;\n}\n","import define, {extend} from \"./define\";\n\nexport function Color() {}\n\nexport var darker = 0.7;\nexport var brighter = 1 / darker;\n\nvar reI = \"\\\\s*([+-]?\\\\d+)\\\\s*\",\n reN = \"\\\\s*([+-]?\\\\d*\\\\.?\\\\d+(?:[eE][+-]?\\\\d+)?)\\\\s*\",\n reP = \"\\\\s*([+-]?\\\\d*\\\\.?\\\\d+(?:[eE][+-]?\\\\d+)?)%\\\\s*\",\n reHex3 = /^#([0-9a-f]{3})$/,\n reHex6 = /^#([0-9a-f]{6})$/,\n reRgbInteger = new RegExp(\"^rgb\\\\(\" + [reI, reI, reI] + \"\\\\)$\"),\n reRgbPercent = new RegExp(\"^rgb\\\\(\" + [reP, reP, reP] + \"\\\\)$\"),\n reRgbaInteger = new RegExp(\"^rgba\\\\(\" + [reI, reI, reI, reN] + \"\\\\)$\"),\n reRgbaPercent = new RegExp(\"^rgba\\\\(\" + [reP, reP, reP, reN] + \"\\\\)$\"),\n reHslPercent = new RegExp(\"^hsl\\\\(\" + [reN, reP, reP] + \"\\\\)$\"),\n reHslaPercent = new RegExp(\"^hsla\\\\(\" + [reN, reP, reP, reN] + \"\\\\)$\");\n\nvar 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\ndefine(Color, color, {\n displayable: function() {\n return this.rgb().displayable();\n },\n hex: function() {\n return this.rgb().hex();\n },\n toString: function() {\n return this.rgb() + \"\";\n }\n});\n\nexport default function color(format) {\n var m;\n format = (format + \"\").trim().toLowerCase();\n return (m = reHex3.exec(format)) ? (m = parseInt(m[1], 16), new Rgb((m >> 8 & 0xf) | (m >> 4 & 0x0f0), (m >> 4 & 0xf) | (m & 0xf0), ((m & 0xf) << 4) | (m & 0xf), 1)) // #f00\n : (m = reHex6.exec(format)) ? rgbn(parseInt(m[1], 16)) // #ff0000\n : (m = reRgbInteger.exec(format)) ? new Rgb(m[1], m[2], m[3], 1) // rgb(255, 0, 0)\n : (m = reRgbPercent.exec(format)) ? new Rgb(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, 1) // rgb(100%, 0%, 0%)\n : (m = reRgbaInteger.exec(format)) ? rgba(m[1], m[2], m[3], m[4]) // rgba(255, 0, 0, 1)\n : (m = reRgbaPercent.exec(format)) ? rgba(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, m[4]) // rgb(100%, 0%, 0%, 1)\n : (m = reHslPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, 1) // hsl(120, 50%, 50%)\n : (m = reHslaPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, m[4]) // hsla(120, 50%, 50%, 1)\n : named.hasOwnProperty(format) ? rgbn(named[format])\n : format === \"transparent\" ? new Rgb(NaN, NaN, NaN, 0)\n : null;\n}\n\nfunction rgbn(n) {\n return new Rgb(n >> 16 & 0xff, n >> 8 & 0xff, n & 0xff, 1);\n}\n\nfunction rgba(r, g, b, a) {\n if (a <= 0) r = g = b = NaN;\n return new Rgb(r, g, b, a);\n}\n\nexport function rgbConvert(o) {\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Rgb;\n o = o.rgb();\n return new Rgb(o.r, o.g, o.b, o.opacity);\n}\n\nexport function rgb(r, g, b, opacity) {\n return arguments.length === 1 ? rgbConvert(r) : new Rgb(r, g, b, opacity == null ? 1 : opacity);\n}\n\nexport function Rgb(r, g, b, opacity) {\n this.r = +r;\n this.g = +g;\n this.b = +b;\n this.opacity = +opacity;\n}\n\ndefine(Rgb, rgb, extend(Color, {\n 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, this.opacity);\n },\n 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, this.opacity);\n },\n rgb: function() {\n return this;\n },\n 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 && (0 <= this.opacity && this.opacity <= 1);\n },\n hex: function() {\n return \"#\" + hex(this.r) + hex(this.g) + hex(this.b);\n },\n toString: function() {\n var a = this.opacity; a = isNaN(a) ? 1 : Math.max(0, Math.min(1, a));\n return (a === 1 ? \"rgb(\" : \"rgba(\")\n + Math.max(0, Math.min(255, Math.round(this.r) || 0)) + \", \"\n + Math.max(0, Math.min(255, Math.round(this.g) || 0)) + \", \"\n + Math.max(0, Math.min(255, Math.round(this.b) || 0))\n + (a === 1 ? \")\" : \", \" + a + \")\");\n }\n}));\n\nfunction hex(value) {\n value = Math.max(0, Math.min(255, Math.round(value) || 0));\n return (value < 16 ? \"0\" : \"\") + value.toString(16);\n}\n\nfunction hsla(h, s, l, a) {\n if (a <= 0) h = s = l = NaN;\n else if (l <= 0 || l >= 1) h = s = NaN;\n else if (s <= 0) h = NaN;\n return new Hsl(h, s, l, a);\n}\n\nexport function hslConvert(o) {\n if (o instanceof Hsl) return new Hsl(o.h, o.s, o.l, o.opacity);\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Hsl;\n if (o instanceof Hsl) return o;\n o = o.rgb();\n var r = o.r / 255,\n g = o.g / 255,\n b = o.b / 255,\n min = Math.min(r, g, b),\n max = Math.max(r, g, b),\n h = NaN,\n s = max - min,\n l = (max + min) / 2;\n if (s) {\n if (r === max) h = (g - b) / s + (g < b) * 6;\n else if (g === max) h = (b - r) / s + 2;\n else h = (r - g) / s + 4;\n s /= l < 0.5 ? max + min : 2 - max - min;\n h *= 60;\n } else {\n s = l > 0 && l < 1 ? 0 : h;\n }\n return new Hsl(h, s, l, o.opacity);\n}\n\nexport function hsl(h, s, l, opacity) {\n return arguments.length === 1 ? hslConvert(h) : new Hsl(h, s, l, opacity == null ? 1 : opacity);\n}\n\nfunction Hsl(h, s, l, opacity) {\n this.h = +h;\n this.s = +s;\n this.l = +l;\n this.opacity = +opacity;\n}\n\ndefine(Hsl, hsl, extend(Color, {\n brighter: function(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n darker: function(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n 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 < 0.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 this.opacity\n );\n },\n displayable: function() {\n return (0 <= this.s && this.s <= 1 || isNaN(this.s))\n && (0 <= this.l && this.l <= 1)\n && (0 <= this.opacity && this.opacity <= 1);\n }\n}));\n\n/* From FvD 13.37, CSS Color Module Level 3 */\nfunction 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","export var deg2rad = Math.PI / 180;\nexport var rad2deg = 180 / Math.PI;\n","import define, {extend} from \"./define\";\nimport {Color, rgbConvert, Rgb} from \"./color\";\nimport {deg2rad, rad2deg} from \"./math\";\n\n// https://beta.observablehq.com/@mbostock/lab-and-rgb\nvar K = 18,\n Xn = 0.96422,\n Yn = 1,\n Zn = 0.82521,\n t0 = 4 / 29,\n t1 = 6 / 29,\n t2 = 3 * t1 * t1,\n t3 = t1 * t1 * t1;\n\nfunction labConvert(o) {\n if (o instanceof Lab) return new Lab(o.l, o.a, o.b, o.opacity);\n if (o instanceof Hcl) {\n if (isNaN(o.h)) return new Lab(o.l, 0, 0, o.opacity);\n var h = o.h * deg2rad;\n return new Lab(o.l, Math.cos(h) * o.c, Math.sin(h) * o.c, o.opacity);\n }\n if (!(o instanceof Rgb)) o = rgbConvert(o);\n var r = rgb2lrgb(o.r),\n g = rgb2lrgb(o.g),\n b = rgb2lrgb(o.b),\n y = xyz2lab((0.2225045 * r + 0.7168786 * g + 0.0606169 * b) / Yn), x, z;\n if (r === g && g === b) x = z = y; else {\n x = xyz2lab((0.4360747 * r + 0.3850649 * g + 0.1430804 * b) / Xn);\n z = xyz2lab((0.0139322 * r + 0.0971045 * g + 0.7141733 * b) / Zn);\n }\n return new Lab(116 * y - 16, 500 * (x - y), 200 * (y - z), o.opacity);\n}\n\nexport function gray(l, opacity) {\n return new Lab(l, 0, 0, opacity == null ? 1 : opacity);\n}\n\nexport default function lab(l, a, b, opacity) {\n return arguments.length === 1 ? labConvert(l) : new Lab(l, a, b, opacity == null ? 1 : opacity);\n}\n\nexport function Lab(l, a, b, opacity) {\n this.l = +l;\n this.a = +a;\n this.b = +b;\n this.opacity = +opacity;\n}\n\ndefine(Lab, lab, extend(Color, {\n brighter: function(k) {\n return new Lab(this.l + K * (k == null ? 1 : k), this.a, this.b, this.opacity);\n },\n darker: function(k) {\n return new Lab(this.l - K * (k == null ? 1 : k), this.a, this.b, this.opacity);\n },\n 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 x = Xn * lab2xyz(x);\n y = Yn * lab2xyz(y);\n z = Zn * lab2xyz(z);\n return new Rgb(\n lrgb2rgb( 3.1338561 * x - 1.6168667 * y - 0.4906146 * z),\n lrgb2rgb(-0.9787684 * x + 1.9161415 * y + 0.0334540 * z),\n lrgb2rgb( 0.0719453 * x - 0.2289914 * y + 1.4052427 * z),\n this.opacity\n );\n }\n}));\n\nfunction xyz2lab(t) {\n return t > t3 ? Math.pow(t, 1 / 3) : t / t2 + t0;\n}\n\nfunction lab2xyz(t) {\n return t > t1 ? t * t * t : t2 * (t - t0);\n}\n\nfunction lrgb2rgb(x) {\n return 255 * (x <= 0.0031308 ? 12.92 * x : 1.055 * Math.pow(x, 1 / 2.4) - 0.055);\n}\n\nfunction rgb2lrgb(x) {\n return (x /= 255) <= 0.04045 ? x / 12.92 : Math.pow((x + 0.055) / 1.055, 2.4);\n}\n\nfunction hclConvert(o) {\n if (o instanceof Hcl) return new Hcl(o.h, o.c, o.l, o.opacity);\n if (!(o instanceof Lab)) o = labConvert(o);\n if (o.a === 0 && o.b === 0) return new Hcl(NaN, 0, o.l, o.opacity);\n var h = Math.atan2(o.b, o.a) * rad2deg;\n return new Hcl(h < 0 ? h + 360 : h, Math.sqrt(o.a * o.a + o.b * o.b), o.l, o.opacity);\n}\n\nexport function lch(l, c, h, opacity) {\n return arguments.length === 1 ? hclConvert(l) : new Hcl(h, c, l, opacity == null ? 1 : opacity);\n}\n\nexport function hcl(h, c, l, opacity) {\n return arguments.length === 1 ? hclConvert(h) : new Hcl(h, c, l, opacity == null ? 1 : opacity);\n}\n\nexport function Hcl(h, c, l, opacity) {\n this.h = +h;\n this.c = +c;\n this.l = +l;\n this.opacity = +opacity;\n}\n\ndefine(Hcl, hcl, extend(Color, {\n brighter: function(k) {\n return new Hcl(this.h, this.c, this.l + K * (k == null ? 1 : k), this.opacity);\n },\n darker: function(k) {\n return new Hcl(this.h, this.c, this.l - K * (k == null ? 1 : k), this.opacity);\n },\n rgb: function() {\n return labConvert(this).rgb();\n }\n}));\n","import define, {extend} from \"./define\";\nimport {Color, rgbConvert, Rgb, darker, brighter} from \"./color\";\nimport {deg2rad, rad2deg} from \"./math\";\n\nvar A = -0.14861,\n B = +1.78277,\n C = -0.29227,\n D = -0.90649,\n E = +1.97294,\n ED = E * D,\n EB = E * B,\n BC_DA = B * C - D * A;\n\nfunction cubehelixConvert(o) {\n if (o instanceof Cubehelix) return new Cubehelix(o.h, o.s, o.l, o.opacity);\n if (!(o instanceof Rgb)) o = rgbConvert(o);\n var r = o.r / 255,\n g = o.g / 255,\n b = o.b / 255,\n l = (BC_DA * b + ED * r - EB * g) / (BC_DA + ED - EB),\n bl = b - l,\n 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 return new Cubehelix(h < 0 ? h + 360 : h, s, l, o.opacity);\n}\n\nexport default function cubehelix(h, s, l, opacity) {\n return arguments.length === 1 ? cubehelixConvert(h) : new Cubehelix(h, s, l, opacity == null ? 1 : opacity);\n}\n\nexport function Cubehelix(h, s, l, opacity) {\n this.h = +h;\n this.s = +s;\n this.l = +l;\n this.opacity = +opacity;\n}\n\ndefine(Cubehelix, cubehelix, extend(Color, {\n brighter: function(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Cubehelix(this.h, this.s, this.l * k, this.opacity);\n },\n darker: function(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Cubehelix(this.h, this.s, this.l * k, this.opacity);\n },\n 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 this.opacity\n );\n }\n}));\n","export function basis(t1, v0, v1, v2, v3) {\n var t2 = t1 * t1, t3 = t2 * t1;\n return ((1 - 3 * t1 + 3 * t2 - t3) * v0\n + (4 - 6 * t2 + 3 * t3) * v1\n + (1 + 3 * t1 + 3 * t2 - 3 * t3) * v2\n + t3 * v3) / 6;\n}\n\nexport default function(values) {\n var n = values.length - 1;\n return function(t) {\n var i = t <= 0 ? (t = 0) : t >= 1 ? (t = 1, n - 1) : Math.floor(t * n),\n v1 = values[i],\n v2 = values[i + 1],\n v0 = i > 0 ? values[i - 1] : 2 * v1 - v2,\n v3 = i < n - 1 ? values[i + 2] : 2 * v2 - v1;\n return basis((t - i / n) * n, v0, v1, v2, v3);\n };\n}\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","import constant from \"./constant\";\n\nfunction linear(a, d) {\n return function(t) {\n return a + t * d;\n };\n}\n\nfunction exponential(a, b, y) {\n return a = Math.pow(a, y), b = Math.pow(b, y) - a, y = 1 / y, function(t) {\n return Math.pow(a + t * b, y);\n };\n}\n\nexport function hue(a, b) {\n var d = b - a;\n return d ? linear(a, d > 180 || d < -180 ? d - 360 * Math.round(d / 360) : d) : constant(isNaN(a) ? b : a);\n}\n\nexport function gamma(y) {\n return (y = +y) === 1 ? nogamma : function(a, b) {\n return b - a ? exponential(a, b, y) : constant(isNaN(a) ? b : a);\n };\n}\n\nexport default function nogamma(a, b) {\n var d = b - a;\n return d ? linear(a, d) : constant(isNaN(a) ? b : a);\n}\n","import {rgb as colorRgb} from \"d3-color\";\nimport basis from \"./basis\";\nimport basisClosed from \"./basisClosed\";\nimport nogamma, {gamma} from \"./color\";\n\nexport default (function rgbGamma(y) {\n var color = gamma(y);\n\n function rgb(start, end) {\n var r = color((start = colorRgb(start)).r, (end = colorRgb(end)).r),\n g = color(start.g, end.g),\n b = color(start.b, end.b),\n opacity = nogamma(start.opacity, end.opacity);\n return function(t) {\n start.r = r(t);\n start.g = g(t);\n start.b = b(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n\n rgb.gamma = rgbGamma;\n\n return rgb;\n})(1);\n\nfunction rgbSpline(spline) {\n return function(colors) {\n var n = colors.length,\n r = new Array(n),\n g = new Array(n),\n b = new Array(n),\n i, color;\n for (i = 0; i < n; ++i) {\n color = colorRgb(colors[i]);\n r[i] = color.r || 0;\n g[i] = color.g || 0;\n b[i] = color.b || 0;\n }\n r = spline(r);\n g = spline(g);\n b = spline(b);\n color.opacity = 1;\n return function(t) {\n color.r = r(t);\n color.g = g(t);\n color.b = b(t);\n return color + \"\";\n };\n };\n}\n\nexport var rgbBasis = rgbSpline(basis);\nexport var rgbBasisClosed = rgbSpline(basisClosed);\n","export default function(a, b) {\n return a = +a, b -= a, function(t) {\n return a + b * t;\n };\n}\n","import {basis} from \"./basis\";\n\nexport default function(values) {\n var n = values.length;\n return function(t) {\n var i = Math.floor(((t %= 1) < 0 ? ++t : t) * n),\n v0 = values[(i + n - 1) % n],\n v1 = values[i % n],\n v2 = values[(i + 1) % n],\n v3 = values[(i + 2) % n];\n return basis((t - i / n) * n, v0, v1, v2, v3);\n };\n}\n","import number from \"./number\";\n\nvar reA = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n reB = new RegExp(reA.source, \"g\");\n\nfunction zero(b) {\n return function() {\n return b;\n };\n}\n\nfunction one(b) {\n return function(t) {\n return b(t) + \"\";\n };\n}\n\nexport default function(a, b) {\n var bi = reA.lastIndex = reB.lastIndex = 0, // scan index for next number in b\n am, // current match in a\n bm, // current match in b\n bs, // string preceding current number in b, if any\n i = -1, // index in s\n s = [], // string constants and placeholders\n q = []; // number interpolators\n\n // Coerce inputs to strings.\n a = a + \"\", b = b + \"\";\n\n // Interpolate pairs of numbers in a & b.\n while ((am = reA.exec(a))\n && (bm = reB.exec(b))) {\n if ((bs = bm.index) > bi) { // a string precedes the next number in b\n bs = b.slice(bi, bs);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n if ((am = am[0]) === (bm = bm[0])) { // numbers in a & b match\n if (s[i]) s[i] += bm; // coalesce with previous string\n else s[++i] = bm;\n } else { // interpolate non-matching numbers\n s[++i] = null;\n q.push({i: i, x: number(am, bm)});\n }\n bi = reB.lastIndex;\n }\n\n // Add remains of b.\n if (bi < b.length) {\n bs = b.slice(bi);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n\n // Special optimization for only a single match.\n // Otherwise, interpolate each of the numbers and rejoin the string.\n return s.length < 2 ? (q[0]\n ? one(q[0].x)\n : zero(b))\n : (b = q.length, function(t) {\n for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t);\n return s.join(\"\");\n });\n}\n","import decompose, {identity} from \"./decompose\";\n\nvar cssNode,\n cssRoot,\n cssView,\n svgNode;\n\nexport function parseCss(value) {\n if (value === \"none\") return identity;\n if (!cssNode) cssNode = document.createElement(\"DIV\"), cssRoot = document.documentElement, cssView = document.defaultView;\n cssNode.style.transform = value;\n value = cssView.getComputedStyle(cssRoot.appendChild(cssNode), null).getPropertyValue(\"transform\");\n cssRoot.removeChild(cssNode);\n value = value.slice(7, -1).split(\",\");\n return decompose(+value[0], +value[1], +value[2], +value[3], +value[4], +value[5]);\n}\n\nexport function parseSvg(value) {\n if (value == null) return identity;\n if (!svgNode) svgNode = document.createElementNS(\"http://www.w3.org/2000/svg\", \"g\");\n svgNode.setAttribute(\"transform\", value);\n if (!(value = svgNode.transform.baseVal.consolidate())) return identity;\n value = value.matrix;\n return decompose(value.a, value.b, value.c, value.d, value.e, value.f);\n}\n","import {color} from \"d3-color\";\nimport rgb from \"./rgb\";\nimport array from \"./array\";\nimport date from \"./date\";\nimport number from \"./number\";\nimport object from \"./object\";\nimport string from \"./string\";\nimport constant from \"./constant\";\n\nexport default function(a, b) {\n var t = typeof b, c;\n return b == null || t === \"boolean\" ? constant(b)\n : (t === \"number\" ? number\n : t === \"string\" ? ((c = color(b)) ? (b = c, rgb) : string)\n : b instanceof color ? rgb\n : b instanceof Date ? date\n : Array.isArray(b) ? array\n : typeof b.valueOf !== \"function\" && typeof b.toString !== \"function\" || isNaN(b) ? object\n : number)(a, b);\n}\n","export default function(a, b) {\n var d = new Date;\n return a = +a, b -= a, function(t) {\n return d.setTime(a + b * t), d;\n };\n}\n","import value from \"./value\";\n\nexport default function(a, b) {\n var nb = b ? b.length : 0,\n na = a ? Math.min(nb, a.length) : 0,\n x = new Array(na),\n c = new Array(nb),\n i;\n\n for (i = 0; i < na; ++i) x[i] = value(a[i], b[i]);\n for (; i < nb; ++i) c[i] = b[i];\n\n return function(t) {\n for (i = 0; i < na; ++i) c[i] = x[i](t);\n return c;\n };\n}\n","import value from \"./value\";\n\nexport default function(a, b) {\n var i = {},\n c = {},\n k;\n\n if (a === null || typeof a !== \"object\") a = {};\n if (b === null || typeof b !== \"object\") b = {};\n\n for (k in b) {\n if (k in a) {\n i[k] = value(a[k], b[k]);\n } else {\n c[k] = b[k];\n }\n }\n\n return function(t) {\n for (k in i) c[k] = i[k](t);\n return c;\n };\n}\n","export default function(a, b) {\n return a = +a, b -= a, function(t) {\n return Math.round(a + b * t);\n };\n}\n","var degrees = 180 / Math.PI;\n\nexport var identity = {\n translateX: 0,\n translateY: 0,\n rotate: 0,\n skewX: 0,\n scaleX: 1,\n scaleY: 1\n};\n\nexport default function(a, b, c, d, e, f) {\n var scaleX, scaleY, skewX;\n if (scaleX = Math.sqrt(a * a + b * b)) a /= scaleX, b /= scaleX;\n if (skewX = a * c + b * d) c -= a * skewX, d -= b * skewX;\n if (scaleY = Math.sqrt(c * c + d * d)) c /= scaleY, d /= scaleY, skewX /= scaleY;\n if (a * d < b * c) a = -a, b = -b, skewX = -skewX, scaleX = -scaleX;\n return {\n translateX: e,\n translateY: f,\n rotate: Math.atan2(b, a) * degrees,\n skewX: Math.atan(skewX) * degrees,\n scaleX: scaleX,\n scaleY: scaleY\n };\n}\n","import number from \"../number\";\nimport {parseCss, parseSvg} from \"./parse\";\n\nfunction interpolateTransform(parse, pxComma, pxParen, degParen) {\n\n function pop(s) {\n return s.length ? s.pop() + \" \" : \"\";\n }\n\n function translate(xa, ya, xb, yb, s, q) {\n if (xa !== xb || ya !== yb) {\n var i = s.push(\"translate(\", null, pxComma, null, pxParen);\n q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\n } else if (xb || yb) {\n s.push(\"translate(\" + xb + pxComma + yb + pxParen);\n }\n }\n\n function rotate(a, b, s, q) {\n if (a !== b) {\n if (a - b > 180) b += 360; else if (b - a > 180) a += 360; // shortest path\n q.push({i: s.push(pop(s) + \"rotate(\", null, degParen) - 2, x: number(a, b)});\n } else if (b) {\n s.push(pop(s) + \"rotate(\" + b + degParen);\n }\n }\n\n function skewX(a, b, s, q) {\n if (a !== b) {\n q.push({i: s.push(pop(s) + \"skewX(\", null, degParen) - 2, x: number(a, b)});\n } else if (b) {\n s.push(pop(s) + \"skewX(\" + b + degParen);\n }\n }\n\n function scale(xa, ya, xb, yb, s, q) {\n if (xa !== xb || ya !== yb) {\n var i = s.push(pop(s) + \"scale(\", null, \",\", null, \")\");\n q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\n } else if (xb !== 1 || yb !== 1) {\n s.push(pop(s) + \"scale(\" + xb + \",\" + yb + \")\");\n }\n }\n\n return function(a, b) {\n var s = [], // string constants and placeholders\n q = []; // number interpolators\n a = parse(a), b = parse(b);\n translate(a.translateX, a.translateY, b.translateX, b.translateY, s, q);\n rotate(a.rotate, b.rotate, s, q);\n skewX(a.skewX, b.skewX, s, q);\n scale(a.scaleX, a.scaleY, b.scaleX, b.scaleY, s, q);\n a = b = null; // gc\n return function(t) {\n var i = -1, n = q.length, o;\n while (++i < n) s[(o = q[i]).i] = o.x(t);\n return s.join(\"\");\n };\n };\n}\n\nexport var interpolateTransformCss = interpolateTransform(parseCss, \"px, \", \"px)\", \"deg)\");\nexport var interpolateTransformSvg = interpolateTransform(parseSvg, \", \", \")\", \")\");\n","var rho = Math.SQRT2,\n rho2 = 2,\n rho4 = 4,\n epsilon2 = 1e-12;\n\nfunction cosh(x) {\n return ((x = Math.exp(x)) + 1 / x) / 2;\n}\n\nfunction sinh(x) {\n return ((x = Math.exp(x)) - 1 / x) / 2;\n}\n\nfunction tanh(x) {\n return ((x = Math.exp(2 * x)) - 1) / (x + 1);\n}\n\n// p0 = [ux0, uy0, w0]\n// p1 = [ux1, uy1, w1]\nexport default function(p0, p1) {\n var ux0 = p0[0], uy0 = p0[1], w0 = p0[2],\n ux1 = p1[0], uy1 = p1[1], w1 = p1[2],\n dx = ux1 - ux0,\n dy = uy1 - uy0,\n d2 = dx * dx + dy * dy,\n i,\n S;\n\n // Special case for u0 ≅ u1.\n if (d2 < epsilon2) {\n S = Math.log(w1 / w0) / rho;\n i = function(t) {\n return [\n ux0 + t * dx,\n uy0 + t * dy,\n w0 * Math.exp(rho * t * S)\n ];\n }\n }\n\n // General case.\n else {\n var d1 = Math.sqrt(d2),\n b0 = (w1 * w1 - w0 * w0 + rho4 * d2) / (2 * w0 * rho2 * d1),\n b1 = (w1 * w1 - w0 * w0 - rho4 * d2) / (2 * w1 * rho2 * d1),\n r0 = Math.log(Math.sqrt(b0 * b0 + 1) - b0),\n r1 = Math.log(Math.sqrt(b1 * b1 + 1) - b1);\n S = (r1 - r0) / rho;\n i = function(t) {\n var s = t * S,\n coshr0 = cosh(r0),\n u = w0 / (rho2 * d1) * (coshr0 * tanh(rho * s + r0) - sinh(r0));\n return [\n ux0 + u * dx,\n uy0 + u * dy,\n w0 * coshr0 / cosh(rho * s + r0)\n ];\n }\n }\n\n i.duration = S * 1000;\n\n return i;\n}\n","import {hsl as colorHsl} from \"d3-color\";\nimport color, {hue} from \"./color\";\n\nfunction hsl(hue) {\n return function(start, end) {\n var h = hue((start = colorHsl(start)).h, (end = colorHsl(end)).h),\n s = color(start.s, end.s),\n l = color(start.l, end.l),\n opacity = color(start.opacity, end.opacity);\n return function(t) {\n start.h = h(t);\n start.s = s(t);\n start.l = l(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n}\n\nexport default hsl(hue);\nexport var hslLong = hsl(color);\n","import {hcl as colorHcl} from \"d3-color\";\nimport color, {hue} from \"./color\";\n\nfunction hcl(hue) {\n return function(start, end) {\n var h = hue((start = colorHcl(start)).h, (end = colorHcl(end)).h),\n c = color(start.c, end.c),\n l = color(start.l, end.l),\n opacity = color(start.opacity, end.opacity);\n return function(t) {\n start.h = h(t);\n start.c = c(t);\n start.l = l(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n}\n\nexport default hcl(hue);\nexport var hclLong = hcl(color);\n","import {cubehelix as colorCubehelix} from \"d3-color\";\nimport color, {hue} from \"./color\";\n\nfunction cubehelix(hue) {\n return (function cubehelixGamma(y) {\n y = +y;\n\n function cubehelix(start, end) {\n var h = hue((start = colorCubehelix(start)).h, (end = colorCubehelix(end)).h),\n s = color(start.s, end.s),\n l = color(start.l, end.l),\n opacity = color(start.opacity, end.opacity);\n return function(t) {\n start.h = h(t);\n start.s = s(t);\n start.l = l(Math.pow(t, y));\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n\n cubehelix.gamma = cubehelixGamma;\n\n return cubehelix;\n })(1);\n}\n\nexport default cubehelix(hue);\nexport var cubehelixLong = cubehelix(color);\n","export default function piecewise(interpolate, values) {\n var i = 0, n = values.length - 1, v = values[0], I = new Array(n < 0 ? 0 : n);\n while (i < n) I[i] = interpolate(v, v = values[++i]);\n return function(t) {\n var i = Math.max(0, Math.min(n - 1, Math.floor(t *= n)));\n return I[i](t - i);\n };\n}\n","export default function(interpolator, n) {\n var samples = new Array(n);\n for (var i = 0; i < n; ++i) samples[i] = interpolator(i / (n - 1));\n return samples;\n}\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","export default function(x) {\n return +x;\n}\n","import {bisect} from \"d3-array\";\nimport {interpolate as interpolateValue, interpolateRound} from \"d3-interpolate\";\nimport {map, slice} from \"./array\";\nimport constant from \"./constant\";\nimport number from \"./number\";\n\nvar unit = [0, 1];\n\nexport function deinterpolateLinear(a, b) {\n return (b -= (a = +a))\n ? function(x) { return (x - a) / b; }\n : constant(b);\n}\n\nfunction deinterpolateClamp(deinterpolate) {\n return function(a, b) {\n var d = deinterpolate(a = +a, b = +b);\n return function(x) { return x <= a ? 0 : x >= b ? 1 : d(x); };\n };\n}\n\nfunction reinterpolateClamp(reinterpolate) {\n return function(a, b) {\n var r = reinterpolate(a = +a, b = +b);\n return function(t) { return t <= 0 ? a : t >= 1 ? b : r(t); };\n };\n}\n\nfunction bimap(domain, range, deinterpolate, reinterpolate) {\n var d0 = domain[0], d1 = domain[1], r0 = range[0], r1 = range[1];\n if (d1 < d0) d0 = deinterpolate(d1, d0), r0 = reinterpolate(r1, r0);\n else d0 = deinterpolate(d0, d1), r0 = reinterpolate(r0, r1);\n return function(x) { return r0(d0(x)); };\n}\n\nfunction polymap(domain, range, deinterpolate, reinterpolate) {\n var j = Math.min(domain.length, range.length) - 1,\n d = new Array(j),\n r = new Array(j),\n i = -1;\n\n // Reverse descending domains.\n if (domain[j] < domain[0]) {\n domain = domain.slice().reverse();\n range = range.slice().reverse();\n }\n\n while (++i < j) {\n d[i] = deinterpolate(domain[i], domain[i + 1]);\n r[i] = reinterpolate(range[i], range[i + 1]);\n }\n\n return function(x) {\n var i = bisect(domain, x, 1, j) - 1;\n return r[i](d[i](x));\n };\n}\n\nexport function copy(source, target) {\n return target\n .domain(source.domain())\n .range(source.range())\n .interpolate(source.interpolate())\n .clamp(source.clamp());\n}\n\n// deinterpolate(a, b)(x) takes a domain value x in [a,b] and returns the corresponding parameter t in [0,1].\n// reinterpolate(a, b)(t) takes a parameter t in [0,1] and returns the corresponding domain value x in [a,b].\nexport default function continuous(deinterpolate, reinterpolate) {\n var domain = unit,\n range = unit,\n interpolate = interpolateValue,\n clamp = false,\n piecewise,\n output,\n input;\n\n function rescale() {\n piecewise = Math.min(domain.length, range.length) > 2 ? polymap : bimap;\n output = input = null;\n return scale;\n }\n\n function scale(x) {\n return (output || (output = piecewise(domain, range, clamp ? deinterpolateClamp(deinterpolate) : deinterpolate, interpolate)))(+x);\n }\n\n scale.invert = function(y) {\n return (input || (input = piecewise(range, domain, deinterpolateLinear, clamp ? reinterpolateClamp(reinterpolate) : reinterpolate)))(+y);\n };\n\n scale.domain = function(_) {\n return arguments.length ? (domain = map.call(_, number), rescale()) : domain.slice();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = slice.call(_), rescale()) : range.slice();\n };\n\n scale.rangeRound = function(_) {\n return range = slice.call(_), interpolate = interpolateRound, rescale();\n };\n\n scale.clamp = function(_) {\n return arguments.length ? (clamp = !!_, rescale()) : clamp;\n };\n\n scale.interpolate = function(_) {\n return arguments.length ? (interpolate = _, rescale()) : interpolate;\n };\n\n return rescale();\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].\nexport default function(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","import formatDecimal from \"./formatDecimal\";\n\nexport default function(x) {\n return x = formatDecimal(Math.abs(x)), x ? x[1] : NaN;\n}\n","// [[fill]align][sign][symbol][0][width][,][.precision][~][type]\nvar re = /^(?:(.)?([<>=^]))?([+\\-( ])?([$#])?(0)?(\\d+)?(,)?(\\.\\d+)?(~)?([a-z%])?$/i;\n\nexport default function formatSpecifier(specifier) {\n return new FormatSpecifier(specifier);\n}\n\nformatSpecifier.prototype = FormatSpecifier.prototype; // instanceof\n\nfunction FormatSpecifier(specifier) {\n if (!(match = re.exec(specifier))) throw new Error(\"invalid format: \" + specifier);\n var match;\n this.fill = match[1] || \" \";\n this.align = match[2] || \">\";\n this.sign = match[3] || \"-\";\n this.symbol = match[4] || \"\";\n this.zero = !!match[5];\n this.width = match[6] && +match[6];\n this.comma = !!match[7];\n this.precision = match[8] && +match[8].slice(1);\n this.trim = !!match[9];\n this.type = match[10] || \"\";\n}\n\nFormatSpecifier.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.trim ? \"~\" : \"\")\n + this.type;\n};\n","// Trims insignificant zeros, e.g., replaces 1.2000k with 1.2k.\nexport default function(s) {\n out: for (var n = s.length, i = 1, i0 = -1, i1; i < n; ++i) {\n switch (s[i]) {\n case \".\": i0 = i1 = i; break;\n case \"0\": if (i0 === 0) i0 = i; i1 = i; break;\n default: if (i0 > 0) { if (!+s[i]) break out; i0 = 0; } break;\n }\n }\n return i0 > 0 ? s.slice(0, i0) + s.slice(i1 + 1) : s;\n}\n","import formatDecimal from \"./formatDecimal\";\n\nexport var prefixExponent;\n\nexport default function(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, Math.max(0, p + i - 1))[0]; // less than 1y!\n}\n","import formatLocale from \"./locale\";\n\nvar locale;\nexport var format;\nexport var formatPrefix;\n\ndefaultLocale({\n decimal: \".\",\n thousands: \",\",\n grouping: [3],\n currency: [\"$\", \"\"]\n});\n\nexport default function defaultLocale(definition) {\n locale = formatLocale(definition);\n format = locale.format;\n formatPrefix = locale.formatPrefix;\n return locale;\n}\n","import formatDecimal from \"./formatDecimal\";\n\nexport default function(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","import formatPrefixAuto from \"./formatPrefixAuto\";\nimport formatRounded from \"./formatRounded\";\n\nexport default {\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","export default function(x) {\n return x;\n}\n","import exponent from \"./exponent\";\nimport formatGroup from \"./formatGroup\";\nimport formatNumerals from \"./formatNumerals\";\nimport formatSpecifier from \"./formatSpecifier\";\nimport formatTrim from \"./formatTrim\";\nimport formatTypes from \"./formatTypes\";\nimport {prefixExponent} from \"./formatPrefixAuto\";\nimport identity from \"./identity\";\n\nvar prefixes = [\"y\",\"z\",\"a\",\"f\",\"p\",\"n\",\"µ\",\"m\",\"\",\"k\",\"M\",\"G\",\"T\",\"P\",\"E\",\"Z\",\"Y\"];\n\nexport default function(locale) {\n var group = locale.grouping && locale.thousands ? formatGroup(locale.grouping, locale.thousands) : identity,\n currency = locale.currency,\n decimal = locale.decimal,\n numerals = locale.numerals ? formatNumerals(locale.numerals) : identity,\n percent = locale.percent || \"%\";\n\n function newFormat(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 trim = specifier.trim,\n type = specifier.type;\n\n // The \"n\" type is an alias for \",g\".\n if (type === \"n\") comma = true, type = \"g\";\n\n // The \"\" type, and any invalid type, is an alias for \".12~g\".\n else if (!formatTypes[type]) precision == null && (precision = 12), trim = true, type = \"g\";\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 // 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) ? percent : \"\";\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 = /[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 ? 6\n : /[gprs]/.test(type) ? Math.max(1, Math.min(21, precision))\n : Math.max(0, Math.min(20, precision));\n\n function format(value) {\n var valuePrefix = prefix,\n valueSuffix = suffix,\n i, n, c;\n\n if (type === \"c\") {\n valueSuffix = formatType(value) + valueSuffix;\n value = \"\";\n } else {\n value = +value;\n\n // Perform the initial formatting.\n var valueNegative = value < 0;\n value = formatType(Math.abs(value), precision);\n\n // Trim insignificant zeros.\n if (trim) value = formatTrim(value);\n\n // If a negative value rounds to zero during formatting, treat as positive.\n if (valueNegative && +value === 0) valueNegative = false;\n\n // Compute the prefix and suffix.\n valuePrefix = (valueNegative ? (sign === \"(\" ? sign : \"-\") : sign === \"-\" || sign === \"(\" ? \"\" : sign) + valuePrefix;\n valueSuffix = (type === \"s\" ? prefixes[8 + prefixExponent / 3] : \"\") + valueSuffix + (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 i = -1, n = value.length;\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 \"<\": value = valuePrefix + value + valueSuffix + padding; break;\n case \"=\": value = valuePrefix + padding + value + valueSuffix; break;\n case \"^\": value = padding.slice(0, length = padding.length >> 1) + valuePrefix + value + valueSuffix + padding.slice(length); break;\n default: value = padding + valuePrefix + value + valueSuffix; break;\n }\n\n return numerals(value);\n }\n\n format.toString = function() {\n return specifier + \"\";\n };\n\n return format;\n }\n\n function formatPrefix(specifier, value) {\n var f = newFormat((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: newFormat,\n formatPrefix: formatPrefix\n };\n}\n","export default function(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","export default function(numerals) {\n return function(value) {\n return value.replace(/[0-9]/g, function(i) {\n return numerals[+i];\n });\n };\n}\n","import exponent from \"./exponent\";\n\nexport default function(step) {\n return Math.max(0, -exponent(Math.abs(step)));\n}\n","import {tickStep} from \"d3-array\";\nimport {format, formatPrefix, formatSpecifier, precisionFixed, precisionPrefix, precisionRound} from \"d3-format\";\n\nexport default function(domain, count, specifier) {\n var start = domain[0],\n stop = domain[domain.length - 1],\n step = tickStep(start, stop, count == null ? 10 : count),\n precision;\n specifier = formatSpecifier(specifier == null ? \",f\" : specifier);\n switch (specifier.type) {\n case \"s\": {\n var value = Math.max(Math.abs(start), Math.abs(stop));\n if (specifier.precision == null && !isNaN(precision = precisionPrefix(step, value))) specifier.precision = precision;\n return formatPrefix(specifier, value);\n }\n case \"\":\n case \"e\":\n case \"g\":\n case \"p\":\n case \"r\": {\n if (specifier.precision == null && !isNaN(precision = precisionRound(step, Math.max(Math.abs(start), Math.abs(stop))))) specifier.precision = precision - (specifier.type === \"e\");\n break;\n }\n case \"f\":\n case \"%\": {\n if (specifier.precision == null && !isNaN(precision = precisionFixed(step))) specifier.precision = precision - (specifier.type === \"%\") * 2;\n break;\n }\n }\n return format(specifier);\n}\n","import exponent from \"./exponent\";\n\nexport default function(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","import exponent from \"./exponent\";\n\nexport default function(step, max) {\n step = Math.abs(step), max = Math.abs(max) - step;\n return Math.max(0, exponent(max) - exponent(step)) + 1;\n}\n","import {ticks, tickIncrement} from \"d3-array\";\nimport {interpolateNumber as reinterpolate} from \"d3-interpolate\";\nimport {default as continuous, copy, deinterpolateLinear as deinterpolate} from \"./continuous\";\nimport tickFormat from \"./tickFormat\";\n\nexport function linearish(scale) {\n var domain = scale.domain;\n\n scale.ticks = function(count) {\n var d = domain();\n return ticks(d[0], d[d.length - 1], count == null ? 10 : count);\n };\n\n scale.tickFormat = function(count, specifier) {\n return tickFormat(domain(), count, specifier);\n };\n\n scale.nice = function(count) {\n if (count == null) count = 10;\n\n var d = domain(),\n i0 = 0,\n i1 = d.length - 1,\n start = d[i0],\n stop = d[i1],\n step;\n\n if (stop < start) {\n step = start, start = stop, stop = step;\n step = i0, i0 = i1, i1 = step;\n }\n\n step = tickIncrement(start, stop, count);\n\n if (step > 0) {\n start = Math.floor(start / step) * step;\n stop = Math.ceil(stop / step) * step;\n step = tickIncrement(start, stop, count);\n } else if (step < 0) {\n start = Math.ceil(start * step) / step;\n stop = Math.floor(stop * step) / step;\n step = tickIncrement(start, stop, count);\n }\n\n if (step > 0) {\n d[i0] = Math.floor(start / step) * step;\n d[i1] = Math.ceil(stop / step) * step;\n domain(d);\n } else if (step < 0) {\n d[i0] = Math.ceil(start * step) / step;\n d[i1] = Math.floor(stop * step) / step;\n domain(d);\n }\n\n return scale;\n };\n\n return scale;\n}\n\nexport default function linear() {\n var scale = continuous(deinterpolate, reinterpolate);\n\n scale.copy = function() {\n return copy(scale, linear());\n };\n\n return linearish(scale);\n}\n","import {map} from \"./array\";\nimport {linearish} from \"./linear\";\nimport number from \"./number\";\n\nexport default function identity() {\n var domain = [0, 1];\n\n function scale(x) {\n return +x;\n }\n\n scale.invert = scale;\n\n scale.domain = scale.range = function(_) {\n return arguments.length ? (domain = map.call(_, number), scale) : domain.slice();\n };\n\n scale.copy = function() {\n return identity().domain(domain);\n };\n\n return linearish(scale);\n}\n","export default function(domain, interval) {\n domain = domain.slice();\n\n var i0 = 0,\n i1 = domain.length - 1,\n x0 = domain[i0],\n x1 = domain[i1],\n t;\n\n if (x1 < x0) {\n t = i0, i0 = i1, i1 = t;\n t = x0, x0 = x1, x1 = t;\n }\n\n domain[i0] = interval.floor(x0);\n domain[i1] = interval.ceil(x1);\n return domain;\n}\n","import {ticks} from \"d3-array\";\nimport {format} from \"d3-format\";\nimport constant from \"./constant\";\nimport nice from \"./nice\";\nimport {default as continuous, copy} from \"./continuous\";\n\nfunction deinterpolate(a, b) {\n return (b = Math.log(b / a))\n ? function(x) { return Math.log(x / a) / b; }\n : constant(b);\n}\n\nfunction reinterpolate(a, b) {\n return a < 0\n ? function(t) { return -Math.pow(-b, t) * Math.pow(-a, 1 - t); }\n : function(t) { return Math.pow(b, t) * Math.pow(a, 1 - t); };\n}\n\nfunction pow10(x) {\n return isFinite(x) ? +(\"1e\" + x) : x < 0 ? 0 : x;\n}\n\nfunction powp(base) {\n return base === 10 ? pow10\n : base === Math.E ? Math.exp\n : function(x) { return Math.pow(base, x); };\n}\n\nfunction logp(base) {\n return base === Math.E ? Math.log\n : base === 10 && Math.log10\n || base === 2 && Math.log2\n || (base = Math.log(base), function(x) { return Math.log(x) / base; });\n}\n\nfunction reflect(f) {\n return function(x) {\n return -f(-x);\n };\n}\n\nexport default function log() {\n var scale = continuous(deinterpolate, reinterpolate).domain([1, 10]),\n domain = scale.domain,\n base = 10,\n logs = logp(10),\n pows = powp(10);\n\n function rescale() {\n logs = logp(base), pows = powp(base);\n if (domain()[0] < 0) logs = reflect(logs), pows = reflect(pows);\n return scale;\n }\n\n scale.base = function(_) {\n return arguments.length ? (base = +_, rescale()) : base;\n };\n\n scale.domain = function(_) {\n return arguments.length ? (domain(_), rescale()) : domain();\n };\n\n scale.ticks = function(count) {\n var d = domain(),\n u = d[0],\n v = d[d.length - 1],\n r;\n\n if (r = v < u) i = u, u = v, v = i;\n\n var i = logs(u),\n j = logs(v),\n p,\n k,\n t,\n n = count == null ? 10 : +count,\n z = [];\n\n if (!(base % 1) && j - i < n) {\n i = Math.round(i) - 1, j = Math.round(j) + 1;\n if (u > 0) for (; i < j; ++i) {\n for (k = 1, p = pows(i); k < base; ++k) {\n t = p * k;\n if (t < u) continue;\n if (t > v) break;\n z.push(t);\n }\n } else for (; i < j; ++i) {\n for (k = base - 1, p = pows(i); k >= 1; --k) {\n t = p * k;\n if (t < u) continue;\n if (t > v) break;\n z.push(t);\n }\n }\n } else {\n z = ticks(i, j, Math.min(j - i, n)).map(pows);\n }\n\n return r ? z.reverse() : z;\n };\n\n scale.tickFormat = function(count, specifier) {\n if (specifier == null) specifier = base === 10 ? \".0e\" : \",\";\n if (typeof specifier !== \"function\") specifier = format(specifier);\n if (count === Infinity) return specifier;\n if (count == null) count = 10;\n var k = Math.max(1, base * count / scale.ticks().length); // TODO fast estimate?\n return function(d) {\n var i = d / pows(Math.round(logs(d)));\n if (i * base < base - 0.5) i *= base;\n return i <= k ? specifier(d) : \"\";\n };\n };\n\n scale.nice = function() {\n return domain(nice(domain(), {\n floor: function(x) { return pows(Math.floor(logs(x))); },\n ceil: function(x) { return pows(Math.ceil(logs(x))); }\n }));\n };\n\n scale.copy = function() {\n return copy(scale, log().base(base));\n };\n\n return scale;\n}\n","import constant from \"./constant\";\nimport {linearish} from \"./linear\";\nimport {default as continuous, copy} from \"./continuous\";\n\nfunction raise(x, exponent) {\n return x < 0 ? -Math.pow(-x, exponent) : Math.pow(x, exponent);\n}\n\nexport default function pow() {\n var exponent = 1,\n scale = continuous(deinterpolate, reinterpolate),\n domain = scale.domain;\n\n function deinterpolate(a, b) {\n return (b = raise(b, exponent) - (a = raise(a, exponent)))\n ? function(x) { return (raise(x, exponent) - a) / b; }\n : constant(b);\n }\n\n function reinterpolate(a, b) {\n b = raise(b, exponent) - (a = raise(a, exponent));\n return function(t) { return raise(a + b * t, 1 / exponent); };\n }\n\n scale.exponent = function(_) {\n return arguments.length ? (exponent = +_, domain(domain())) : exponent;\n };\n\n scale.copy = function() {\n return copy(scale, pow().exponent(exponent));\n };\n\n return linearish(scale);\n}\n\nexport function sqrt() {\n return pow().exponent(0.5);\n}\n","import {ascending, bisect, quantile as threshold} from \"d3-array\";\nimport {slice} from \"./array\";\n\nexport default function quantile() {\n var domain = [],\n range = [],\n thresholds = [];\n\n function rescale() {\n var i = 0, n = Math.max(1, range.length);\n thresholds = new Array(n - 1);\n while (++i < n) thresholds[i - 1] = threshold(domain, i / n);\n return scale;\n }\n\n function scale(x) {\n if (!isNaN(x = +x)) return range[bisect(thresholds, x)];\n }\n\n scale.invertExtent = function(y) {\n var i = range.indexOf(y);\n return i < 0 ? [NaN, NaN] : [\n i > 0 ? thresholds[i - 1] : domain[0],\n i < thresholds.length ? thresholds[i] : domain[domain.length - 1]\n ];\n };\n\n scale.domain = function(_) {\n if (!arguments.length) return domain.slice();\n domain = [];\n for (var i = 0, n = _.length, d; i < n; ++i) if (d = _[i], d != null && !isNaN(d = +d)) domain.push(d);\n domain.sort(ascending);\n return rescale();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = slice.call(_), rescale()) : range.slice();\n };\n\n scale.quantiles = function() {\n return thresholds.slice();\n };\n\n scale.copy = function() {\n return quantile()\n .domain(domain)\n .range(range);\n };\n\n return scale;\n}\n","import {bisect} from \"d3-array\";\nimport {slice} from \"./array\";\nimport {linearish} from \"./linear\";\n\nexport default function quantize() {\n var x0 = 0,\n x1 = 1,\n n = 1,\n domain = [0.5],\n range = [0, 1];\n\n function scale(x) {\n if (x <= x) return range[bisect(domain, x, 0, n)];\n }\n\n function rescale() {\n var i = -1;\n domain = new Array(n);\n while (++i < n) domain[i] = ((i + 1) * x1 - (i - n) * x0) / (n + 1);\n return scale;\n }\n\n scale.domain = function(_) {\n return arguments.length ? (x0 = +_[0], x1 = +_[1], rescale()) : [x0, x1];\n };\n\n scale.range = function(_) {\n return arguments.length ? (n = (range = slice.call(_)).length - 1, rescale()) : range.slice();\n };\n\n scale.invertExtent = function(y) {\n var i = range.indexOf(y);\n return i < 0 ? [NaN, NaN]\n : i < 1 ? [x0, domain[0]]\n : i >= n ? [domain[n - 1], x1]\n : [domain[i - 1], domain[i]];\n };\n\n scale.copy = function() {\n return quantize()\n .domain([x0, x1])\n .range(range);\n };\n\n return linearish(scale);\n}\n","import {bisect} from \"d3-array\";\nimport {slice} from \"./array\";\n\nexport default function threshold() {\n var domain = [0.5],\n range = [0, 1],\n n = 1;\n\n function scale(x) {\n if (x <= x) return range[bisect(domain, x, 0, n)];\n }\n\n scale.domain = function(_) {\n return arguments.length ? (domain = slice.call(_), n = Math.min(domain.length, range.length - 1), scale) : domain.slice();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = slice.call(_), n = Math.min(domain.length, range.length - 1), scale) : range.slice();\n };\n\n scale.invertExtent = function(y) {\n var i = range.indexOf(y);\n return [domain[i - 1], domain[i]];\n };\n\n scale.copy = function() {\n return threshold()\n .domain(domain)\n .range(range);\n };\n\n return scale;\n}\n","var t0 = new Date,\n t1 = new Date;\n\nexport default function newInterval(floori, offseti, count, field) {\n\n function interval(date) {\n return floori(date = new Date(+date)), date;\n }\n\n interval.floor = interval;\n\n interval.ceil = function(date) {\n return floori(date = new Date(date - 1)), offseti(date, 1), floori(date), date;\n };\n\n interval.round = function(date) {\n var d0 = interval(date),\n d1 = interval.ceil(date);\n return date - d0 < d1 - date ? d0 : d1;\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 = [], previous;\n start = interval.ceil(start);\n step = step == null ? 1 : Math.floor(step);\n if (!(start < stop) || !(step > 0)) return range; // also handles Invalid Date\n do range.push(previous = new Date(+start)), offseti(start, step), floori(start);\n while (previous < start && start < stop);\n return range;\n };\n\n interval.filter = function(test) {\n return newInterval(function(date) {\n if (date >= date) while (floori(date), !test(date)) date.setTime(date - 1);\n }, function(date, step) {\n if (date >= date) {\n if (step < 0) while (++step <= 0) {\n while (offseti(date, -1), !test(date)) {} // eslint-disable-line no-empty\n } else while (--step >= 0) {\n while (offseti(date, +1), !test(date)) {} // eslint-disable-line no-empty\n }\n }\n });\n };\n\n if (count) {\n 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 interval.every = function(step) {\n step = Math.floor(step);\n return !isFinite(step) || !(step > 0) ? null\n : !(step > 1) ? interval\n : interval.filter(field\n ? function(d) { return field(d) % step === 0; }\n : function(d) { return interval.count(0, d) % step === 0; });\n };\n }\n\n return interval;\n}\n","import interval from \"./interval\";\n\nvar millisecond = interval(function() {\n // noop\n}, function(date, step) {\n date.setTime(+date + step);\n}, function(start, end) {\n return end - start;\n});\n\n// An optimized implementation for this simple case.\nmillisecond.every = function(k) {\n k = Math.floor(k);\n if (!isFinite(k) || !(k > 0)) return null;\n if (!(k > 1)) return millisecond;\n return interval(function(date) {\n date.setTime(Math.floor(date / k) * k);\n }, function(date, step) {\n date.setTime(+date + step * k);\n }, function(start, end) {\n return (end - start) / k;\n });\n};\n\nexport default millisecond;\nexport var milliseconds = millisecond.range;\n","export var durationSecond = 1e3;\nexport var durationMinute = 6e4;\nexport var durationHour = 36e5;\nexport var durationDay = 864e5;\nexport var durationWeek = 6048e5;\n","import interval from \"./interval\";\nimport {durationSecond} from \"./duration\";\n\nvar second = interval(function(date) {\n date.setTime(Math.floor(date / durationSecond) * durationSecond);\n}, function(date, step) {\n date.setTime(+date + step * durationSecond);\n}, function(start, end) {\n return (end - start) / durationSecond;\n}, function(date) {\n return date.getUTCSeconds();\n});\n\nexport default second;\nexport var seconds = second.range;\n","import interval from \"./interval\";\nimport {durationMinute} from \"./duration\";\n\nvar minute = interval(function(date) {\n date.setTime(Math.floor(date / durationMinute) * durationMinute);\n}, function(date, step) {\n date.setTime(+date + step * durationMinute);\n}, function(start, end) {\n return (end - start) / durationMinute;\n}, function(date) {\n return date.getMinutes();\n});\n\nexport default minute;\nexport var minutes = minute.range;\n","import interval from \"./interval\";\nimport {durationHour, durationMinute} from \"./duration\";\n\nvar hour = interval(function(date) {\n var offset = date.getTimezoneOffset() * durationMinute % durationHour;\n if (offset < 0) offset += durationHour;\n date.setTime(Math.floor((+date - offset) / durationHour) * durationHour + offset);\n}, function(date, step) {\n date.setTime(+date + step * durationHour);\n}, function(start, end) {\n return (end - start) / durationHour;\n}, function(date) {\n return date.getHours();\n});\n\nexport default hour;\nexport var hours = hour.range;\n","import interval from \"./interval\";\nimport {durationDay, durationMinute} from \"./duration\";\n\nvar day = interval(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()) * durationMinute) / durationDay;\n}, function(date) {\n return date.getDate() - 1;\n});\n\nexport default day;\nexport var days = day.range;\n","import interval from \"./interval\";\nimport {durationMinute, durationWeek} from \"./duration\";\n\nfunction weekday(i) {\n return interval(function(date) {\n date.setDate(date.getDate() - (date.getDay() + 7 - i) % 7);\n date.setHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setDate(date.getDate() + step * 7);\n }, function(start, end) {\n return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationWeek;\n });\n}\n\nexport var sunday = weekday(0);\nexport var monday = weekday(1);\nexport var tuesday = weekday(2);\nexport var wednesday = weekday(3);\nexport var thursday = weekday(4);\nexport var friday = weekday(5);\nexport var saturday = weekday(6);\n\nexport var sundays = sunday.range;\nexport var mondays = monday.range;\nexport var tuesdays = tuesday.range;\nexport var wednesdays = wednesday.range;\nexport var thursdays = thursday.range;\nexport var fridays = friday.range;\nexport var saturdays = saturday.range;\n","import interval from \"./interval\";\n\nvar month = interval(function(date) {\n date.setDate(1);\n date.setHours(0, 0, 0, 0);\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}, function(date) {\n return date.getMonth();\n});\n\nexport default month;\nexport var months = month.range;\n","import interval from \"./interval\";\n\nvar year = interval(function(date) {\n date.setMonth(0, 1);\n date.setHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setFullYear(date.getFullYear() + step);\n}, function(start, end) {\n return end.getFullYear() - start.getFullYear();\n}, function(date) {\n return date.getFullYear();\n});\n\n// An optimized implementation for this simple case.\nyear.every = function(k) {\n return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : interval(function(date) {\n date.setFullYear(Math.floor(date.getFullYear() / k) * k);\n date.setMonth(0, 1);\n date.setHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setFullYear(date.getFullYear() + step * k);\n });\n};\n\nexport default year;\nexport var years = year.range;\n","import interval from \"./interval\";\nimport {durationMinute} from \"./duration\";\n\nvar utcMinute = interval(function(date) {\n date.setUTCSeconds(0, 0);\n}, function(date, step) {\n date.setTime(+date + step * durationMinute);\n}, function(start, end) {\n return (end - start) / durationMinute;\n}, function(date) {\n return date.getUTCMinutes();\n});\n\nexport default utcMinute;\nexport var utcMinutes = utcMinute.range;\n","import interval from \"./interval\";\nimport {durationHour} from \"./duration\";\n\nvar utcHour = interval(function(date) {\n date.setUTCMinutes(0, 0, 0);\n}, function(date, step) {\n date.setTime(+date + step * durationHour);\n}, function(start, end) {\n return (end - start) / durationHour;\n}, function(date) {\n return date.getUTCHours();\n});\n\nexport default utcHour;\nexport var utcHours = utcHour.range;\n","import interval from \"./interval\";\nimport {durationDay} from \"./duration\";\n\nvar utcDay = interval(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) / durationDay;\n}, function(date) {\n return date.getUTCDate() - 1;\n});\n\nexport default utcDay;\nexport var utcDays = utcDay.range;\n","import interval from \"./interval\";\nimport {durationWeek} from \"./duration\";\n\nfunction utcWeekday(i) {\n return interval(function(date) {\n date.setUTCDate(date.getUTCDate() - (date.getUTCDay() + 7 - i) % 7);\n date.setUTCHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setUTCDate(date.getUTCDate() + step * 7);\n }, function(start, end) {\n return (end - start) / durationWeek;\n });\n}\n\nexport var utcSunday = utcWeekday(0);\nexport var utcMonday = utcWeekday(1);\nexport var utcTuesday = utcWeekday(2);\nexport var utcWednesday = utcWeekday(3);\nexport var utcThursday = utcWeekday(4);\nexport var utcFriday = utcWeekday(5);\nexport var utcSaturday = utcWeekday(6);\n\nexport var utcSundays = utcSunday.range;\nexport var utcMondays = utcMonday.range;\nexport var utcTuesdays = utcTuesday.range;\nexport var utcWednesdays = utcWednesday.range;\nexport var utcThursdays = utcThursday.range;\nexport var utcFridays = utcFriday.range;\nexport var utcSaturdays = utcSaturday.range;\n","import interval from \"./interval\";\n\nvar utcMonth = interval(function(date) {\n date.setUTCDate(1);\n date.setUTCHours(0, 0, 0, 0);\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}, function(date) {\n return date.getUTCMonth();\n});\n\nexport default utcMonth;\nexport var utcMonths = utcMonth.range;\n","import interval from \"./interval\";\n\nvar utcYear = interval(function(date) {\n date.setUTCMonth(0, 1);\n date.setUTCHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setUTCFullYear(date.getUTCFullYear() + step);\n}, function(start, end) {\n return end.getUTCFullYear() - start.getUTCFullYear();\n}, function(date) {\n return date.getUTCFullYear();\n});\n\n// An optimized implementation for this simple case.\nutcYear.every = function(k) {\n return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : interval(function(date) {\n date.setUTCFullYear(Math.floor(date.getUTCFullYear() / k) * k);\n date.setUTCMonth(0, 1);\n date.setUTCHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setUTCFullYear(date.getUTCFullYear() + step * k);\n });\n};\n\nexport default utcYear;\nexport var utcYears = utcYear.range;\n","import {\n timeDay,\n timeSunday,\n timeMonday,\n timeThursday,\n timeYear,\n utcDay,\n utcSunday,\n utcMonday,\n utcThursday,\n utcYear\n} from \"d3-time\";\n\nfunction 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\nfunction 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\nfunction newYear(y) {\n return {y: y, m: 0, d: 1, H: 0, M: 0, S: 0, L: 0};\n}\n\nexport default function formatLocale(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 periodRe = formatRe(locale_periods),\n 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 \"f\": formatMicroseconds,\n \"H\": formatHour24,\n \"I\": formatHour12,\n \"j\": formatDayOfYear,\n \"L\": formatMilliseconds,\n \"m\": formatMonthNumber,\n \"M\": formatMinutes,\n \"p\": formatPeriod,\n \"Q\": formatUnixTimestamp,\n \"s\": formatUnixTimestampSeconds,\n \"S\": formatSeconds,\n \"u\": formatWeekdayNumberMonday,\n \"U\": formatWeekNumberSunday,\n \"V\": formatWeekNumberISO,\n \"w\": formatWeekdayNumberSunday,\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 \"f\": formatUTCMicroseconds,\n \"H\": formatUTCHour24,\n \"I\": formatUTCHour12,\n \"j\": formatUTCDayOfYear,\n \"L\": formatUTCMilliseconds,\n \"m\": formatUTCMonthNumber,\n \"M\": formatUTCMinutes,\n \"p\": formatUTCPeriod,\n \"Q\": formatUnixTimestamp,\n \"s\": formatUnixTimestampSeconds,\n \"S\": formatUTCSeconds,\n \"u\": formatUTCWeekdayNumberMonday,\n \"U\": formatUTCWeekNumberSunday,\n \"V\": formatUTCWeekNumberISO,\n \"w\": formatUTCWeekdayNumberSunday,\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 \"f\": parseMicroseconds,\n \"H\": parseHour24,\n \"I\": parseHour24,\n \"j\": parseDayOfYear,\n \"L\": parseMilliseconds,\n \"m\": parseMonthNumber,\n \"M\": parseMinutes,\n \"p\": parsePeriod,\n \"Q\": parseUnixTimestamp,\n \"s\": parseUnixTimestampSeconds,\n \"S\": parseSeconds,\n \"u\": parseWeekdayNumberMonday,\n \"U\": parseWeekNumberSunday,\n \"V\": parseWeekNumberISO,\n \"w\": parseWeekdayNumberSunday,\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 if (!(date instanceof Date)) date = new Date(+date);\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 else pad = c === \"e\" ? \" \" : \"0\";\n if (format = formats[c]) c = format(date, 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 week, day;\n if (i != string.length) return null;\n\n // If a UNIX timestamp is specified, return it.\n if (\"Q\" in d) return new Date(d.Q);\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 // Convert day-of-week and week-of-year to day-of-year.\n if (\"V\" in d) {\n if (d.V < 1 || d.V > 53) return null;\n if (!(\"w\" in d)) d.w = 1;\n if (\"Z\" in d) {\n week = utcDate(newYear(d.y)), day = week.getUTCDay();\n week = day > 4 || day === 0 ? utcMonday.ceil(week) : utcMonday(week);\n week = utcDay.offset(week, (d.V - 1) * 7);\n d.y = week.getUTCFullYear();\n d.m = week.getUTCMonth();\n d.d = week.getUTCDate() + (d.w + 6) % 7;\n } else {\n week = newDate(newYear(d.y)), day = week.getDay();\n week = day > 4 || day === 0 ? timeMonday.ceil(week) : timeMonday(week);\n week = timeDay.offset(week, (d.V - 1) * 7);\n d.y = week.getFullYear();\n d.m = week.getMonth();\n d.d = week.getDate() + (d.w + 6) % 7;\n }\n } else if (\"W\" in d || \"U\" in d) {\n if (!(\"w\" in d)) d.w = \"u\" in d ? d.u % 7 : \"W\" in d ? 1 : 0;\n day = \"Z\" in d ? utcDate(newYear(d.y)).getUTCDay() : newDate(newYear(d.y)).getDay();\n d.m = 0;\n d.d = \"W\" in d ? (d.w + 6) % 7 + d.W * 7 - (day + 5) % 7 : d.w + d.U * 7 - (day + 6) % 7;\n }\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 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 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 parsePeriod(d, string, i) {\n var n = periodRe.exec(string.slice(i));\n return n ? (d.p = periodLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n }\n\n function parseShortWeekday(d, string, i) {\n var n = shortWeekdayRe.exec(string.slice(i));\n return n ? (d.w = shortWeekdayLookup[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[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[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[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 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.toString = function() { return specifier; };\n return f;\n },\n parse: function(specifier) {\n var p = newParse(specifier += \"\", localDate);\n p.toString = function() { return specifier; };\n return p;\n },\n utcFormat: function(specifier) {\n var f = newFormat(specifier += \"\", utcFormats);\n f.toString = function() { return specifier; };\n return f;\n },\n utcParse: function(specifier) {\n var p = newParse(specifier, utcDate);\n p.toString = function() { return specifier; };\n return p;\n }\n };\n}\n\nvar pads = {\"-\": \"\", \"_\": \" \", \"0\": \"0\"},\n numberRe = /^\\s*\\d+/, // note: ignores next directive\n percentRe = /^%/,\n requoteRe = /[\\\\^$*+?|[\\]().{}]/g;\n\nfunction 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\nfunction requote(s) {\n return s.replace(requoteRe, \"\\\\$&\");\n}\n\nfunction formatRe(names) {\n return new RegExp(\"^(?:\" + names.map(requote).join(\"|\") + \")\", \"i\");\n}\n\nfunction formatLookup(names) {\n var map = {}, i = -1, n = names.length;\n while (++i < n) map[names[i].toLowerCase()] = i;\n return map;\n}\n\nfunction parseWeekdayNumberSunday(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\nfunction parseWeekdayNumberMonday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 1));\n return n ? (d.u = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberSunday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.U = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberISO(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.V = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberMonday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.W = +n[0], i + n[0].length) : -1;\n}\n\nfunction 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\nfunction 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\nfunction parseZone(d, string, i) {\n var n = /^(Z)|([+-]\\d\\d)(?::?(\\d\\d))?/.exec(string.slice(i, i + 6));\n return n ? (d.Z = n[1] ? 0 : -(n[2] + (n[3] || \"00\")), i + n[0].length) : -1;\n}\n\nfunction 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\nfunction 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\nfunction 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\nfunction 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\nfunction 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\nfunction 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\nfunction 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\nfunction parseMicroseconds(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 6));\n return n ? (d.L = Math.floor(n[0] / 1000), i + n[0].length) : -1;\n}\n\nfunction parseLiteralPercent(d, string, i) {\n var n = percentRe.exec(string.slice(i, i + 1));\n return n ? i + n[0].length : -1;\n}\n\nfunction parseUnixTimestamp(d, string, i) {\n var n = numberRe.exec(string.slice(i));\n return n ? (d.Q = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseUnixTimestampSeconds(d, string, i) {\n var n = numberRe.exec(string.slice(i));\n return n ? (d.Q = (+n[0]) * 1000, i + n[0].length) : -1;\n}\n\nfunction formatDayOfMonth(d, p) {\n return pad(d.getDate(), p, 2);\n}\n\nfunction formatHour24(d, p) {\n return pad(d.getHours(), p, 2);\n}\n\nfunction formatHour12(d, p) {\n return pad(d.getHours() % 12 || 12, p, 2);\n}\n\nfunction formatDayOfYear(d, p) {\n return pad(1 + timeDay.count(timeYear(d), d), p, 3);\n}\n\nfunction formatMilliseconds(d, p) {\n return pad(d.getMilliseconds(), p, 3);\n}\n\nfunction formatMicroseconds(d, p) {\n return formatMilliseconds(d, p) + \"000\";\n}\n\nfunction formatMonthNumber(d, p) {\n return pad(d.getMonth() + 1, p, 2);\n}\n\nfunction formatMinutes(d, p) {\n return pad(d.getMinutes(), p, 2);\n}\n\nfunction formatSeconds(d, p) {\n return pad(d.getSeconds(), p, 2);\n}\n\nfunction formatWeekdayNumberMonday(d) {\n var day = d.getDay();\n return day === 0 ? 7 : day;\n}\n\nfunction formatWeekNumberSunday(d, p) {\n return pad(timeSunday.count(timeYear(d), d), p, 2);\n}\n\nfunction formatWeekNumberISO(d, p) {\n var day = d.getDay();\n d = (day >= 4 || day === 0) ? timeThursday(d) : timeThursday.ceil(d);\n return pad(timeThursday.count(timeYear(d), d) + (timeYear(d).getDay() === 4), p, 2);\n}\n\nfunction formatWeekdayNumberSunday(d) {\n return d.getDay();\n}\n\nfunction formatWeekNumberMonday(d, p) {\n return pad(timeMonday.count(timeYear(d), d), p, 2);\n}\n\nfunction formatYear(d, p) {\n return pad(d.getFullYear() % 100, p, 2);\n}\n\nfunction formatFullYear(d, p) {\n return pad(d.getFullYear() % 10000, p, 4);\n}\n\nfunction 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\nfunction formatUTCDayOfMonth(d, p) {\n return pad(d.getUTCDate(), p, 2);\n}\n\nfunction formatUTCHour24(d, p) {\n return pad(d.getUTCHours(), p, 2);\n}\n\nfunction formatUTCHour12(d, p) {\n return pad(d.getUTCHours() % 12 || 12, p, 2);\n}\n\nfunction formatUTCDayOfYear(d, p) {\n return pad(1 + utcDay.count(utcYear(d), d), p, 3);\n}\n\nfunction formatUTCMilliseconds(d, p) {\n return pad(d.getUTCMilliseconds(), p, 3);\n}\n\nfunction formatUTCMicroseconds(d, p) {\n return formatUTCMilliseconds(d, p) + \"000\";\n}\n\nfunction formatUTCMonthNumber(d, p) {\n return pad(d.getUTCMonth() + 1, p, 2);\n}\n\nfunction formatUTCMinutes(d, p) {\n return pad(d.getUTCMinutes(), p, 2);\n}\n\nfunction formatUTCSeconds(d, p) {\n return pad(d.getUTCSeconds(), p, 2);\n}\n\nfunction formatUTCWeekdayNumberMonday(d) {\n var dow = d.getUTCDay();\n return dow === 0 ? 7 : dow;\n}\n\nfunction formatUTCWeekNumberSunday(d, p) {\n return pad(utcSunday.count(utcYear(d), d), p, 2);\n}\n\nfunction formatUTCWeekNumberISO(d, p) {\n var day = d.getUTCDay();\n d = (day >= 4 || day === 0) ? utcThursday(d) : utcThursday.ceil(d);\n return pad(utcThursday.count(utcYear(d), d) + (utcYear(d).getUTCDay() === 4), p, 2);\n}\n\nfunction formatUTCWeekdayNumberSunday(d) {\n return d.getUTCDay();\n}\n\nfunction formatUTCWeekNumberMonday(d, p) {\n return pad(utcMonday.count(utcYear(d), d), p, 2);\n}\n\nfunction formatUTCYear(d, p) {\n return pad(d.getUTCFullYear() % 100, p, 2);\n}\n\nfunction formatUTCFullYear(d, p) {\n return pad(d.getUTCFullYear() % 10000, p, 4);\n}\n\nfunction formatUTCZone() {\n return \"+0000\";\n}\n\nfunction formatLiteralPercent() {\n return \"%\";\n}\n\nfunction formatUnixTimestamp(d) {\n return +d;\n}\n\nfunction formatUnixTimestampSeconds(d) {\n return Math.floor(+d / 1000);\n}\n","import formatLocale from \"./locale\";\n\nvar locale;\nexport var timeFormat;\nexport var timeParse;\nexport var utcFormat;\nexport var utcParse;\n\ndefaultLocale({\n dateTime: \"%x, %X\",\n date: \"%-m/%-d/%Y\",\n time: \"%-I:%M:%S %p\",\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\nexport default function defaultLocale(definition) {\n locale = formatLocale(definition);\n timeFormat = locale.format;\n timeParse = locale.parse;\n utcFormat = locale.utcFormat;\n utcParse = locale.utcParse;\n return locale;\n}\n","import {utcFormat} from \"./defaultLocale\";\n\nexport var isoSpecifier = \"%Y-%m-%dT%H:%M:%S.%LZ\";\n\nfunction formatIsoNative(date) {\n return date.toISOString();\n}\n\nvar formatIso = Date.prototype.toISOString\n ? formatIsoNative\n : utcFormat(isoSpecifier);\n\nexport default formatIso;\n","import {isoSpecifier} from \"./isoFormat\";\nimport {utcParse} from \"./defaultLocale\";\n\nfunction parseIsoNative(string) {\n var date = new Date(string);\n return isNaN(date) ? null : date;\n}\n\nvar parseIso = +new Date(\"2000-01-01T00:00:00.000Z\")\n ? parseIsoNative\n : utcParse(isoSpecifier);\n\nexport default parseIso;\n","import {bisector, tickStep} from \"d3-array\";\nimport {interpolateNumber as reinterpolate} from \"d3-interpolate\";\nimport {timeYear, timeMonth, timeWeek, timeDay, timeHour, timeMinute, timeSecond, timeMillisecond} from \"d3-time\";\nimport {timeFormat} from \"d3-time-format\";\nimport {map} from \"./array\";\nimport {default as continuous, copy, deinterpolateLinear as deinterpolate} from \"./continuous\";\nimport nice from \"./nice\";\n\nvar durationSecond = 1000,\n durationMinute = durationSecond * 60,\n durationHour = durationMinute * 60,\n durationDay = durationHour * 24,\n durationWeek = durationDay * 7,\n durationMonth = durationDay * 30,\n durationYear = durationDay * 365;\n\nfunction date(t) {\n return new Date(t);\n}\n\nfunction number(t) {\n return t instanceof Date ? +t : +new Date(+t);\n}\n\nexport function calendar(year, month, week, day, hour, minute, second, millisecond, format) {\n var scale = continuous(deinterpolate, reinterpolate),\n invert = scale.invert,\n domain = scale.domain;\n\n var formatMillisecond = format(\".%L\"),\n formatSecond = format(\":%S\"),\n formatMinute = format(\"%I:%M\"),\n formatHour = format(\"%I %p\"),\n formatDay = format(\"%a %d\"),\n formatWeek = format(\"%b %d\"),\n formatMonth = format(\"%B\"),\n formatYear = format(\"%Y\");\n\n var tickIntervals = [\n [second, 1, durationSecond],\n [second, 5, 5 * durationSecond],\n [second, 15, 15 * durationSecond],\n [second, 30, 30 * durationSecond],\n [minute, 1, durationMinute],\n [minute, 5, 5 * durationMinute],\n [minute, 15, 15 * durationMinute],\n [minute, 30, 30 * durationMinute],\n [ hour, 1, durationHour ],\n [ hour, 3, 3 * durationHour ],\n [ hour, 6, 6 * durationHour ],\n [ hour, 12, 12 * durationHour ],\n [ day, 1, durationDay ],\n [ day, 2, 2 * durationDay ],\n [ week, 1, durationWeek ],\n [ month, 1, durationMonth ],\n [ month, 3, 3 * durationMonth ],\n [ year, 1, durationYear ]\n ];\n\n function tickFormat(date) {\n return (second(date) < date ? formatMillisecond\n : minute(date) < date ? formatSecond\n : hour(date) < date ? formatMinute\n : day(date) < date ? formatHour\n : month(date) < date ? (week(date) < date ? formatDay : formatWeek)\n : year(date) < date ? formatMonth\n : formatYear)(date);\n }\n\n function tickInterval(interval, start, stop, step) {\n if (interval == null) interval = 10;\n\n // If a desired tick count is specified, pick a reasonable tick interval\n // based on the extent of the domain and a rough estimate of tick size.\n // Otherwise, assume interval is already a time interval and use it.\n if (typeof interval === \"number\") {\n var target = Math.abs(stop - start) / interval,\n i = bisector(function(i) { return i[2]; }).right(tickIntervals, target);\n if (i === tickIntervals.length) {\n step = tickStep(start / durationYear, stop / durationYear, interval);\n interval = year;\n } else if (i) {\n i = tickIntervals[target / tickIntervals[i - 1][2] < tickIntervals[i][2] / target ? i - 1 : i];\n step = i[1];\n interval = i[0];\n } else {\n step = Math.max(tickStep(start, stop, interval), 1);\n interval = millisecond;\n }\n }\n\n return step == null ? interval : interval.every(step);\n }\n\n scale.invert = function(y) {\n return new Date(invert(y));\n };\n\n scale.domain = function(_) {\n return arguments.length ? domain(map.call(_, number)) : domain().map(date);\n };\n\n scale.ticks = function(interval, step) {\n var d = domain(),\n t0 = d[0],\n t1 = d[d.length - 1],\n r = t1 < t0,\n t;\n if (r) t = t0, t0 = t1, t1 = t;\n t = tickInterval(interval, t0, t1, step);\n t = t ? t.range(t0, t1 + 1) : []; // inclusive stop\n return r ? t.reverse() : t;\n };\n\n scale.tickFormat = function(count, specifier) {\n return specifier == null ? tickFormat : format(specifier);\n };\n\n scale.nice = function(interval, step) {\n var d = domain();\n return (interval = tickInterval(interval, d[0], d[d.length - 1], step))\n ? domain(nice(d, interval))\n : scale;\n };\n\n scale.copy = function() {\n return copy(scale, calendar(year, month, week, day, hour, minute, second, millisecond, format));\n };\n\n return scale;\n}\n\nexport default function() {\n return calendar(timeYear, timeMonth, timeWeek, timeDay, timeHour, timeMinute, timeSecond, timeMillisecond, timeFormat).domain([new Date(2000, 0, 1), new Date(2000, 0, 2)]);\n}\n","export default function(s) {\n return s.match(/.{6}/g).map(function(x) {\n return \"#\" + x;\n });\n}\n","import colors from \"./colors\";\n\nexport default colors(\"1f77b4ff7f0e2ca02cd627289467bd8c564be377c27f7f7fbcbd2217becf\");\n","import colors from \"./colors\";\n\nexport default colors(\"393b795254a36b6ecf9c9ede6379398ca252b5cf6bcedb9c8c6d31bd9e39e7ba52e7cb94843c39ad494ad6616be7969c7b4173a55194ce6dbdde9ed6\");\n","import colors from \"./colors\";\n\nexport default colors(\"1f77b4aec7e8ff7f0effbb782ca02c98df8ad62728ff98969467bdc5b0d58c564bc49c94e377c2f7b6d27f7f7fc7c7c7bcbd22dbdb8d17becf9edae5\");\n","import colors from \"./colors\";\n\nexport default colors(\"3182bd6baed69ecae1c6dbefe6550dfd8d3cfdae6bfdd0a231a35474c476a1d99bc7e9c0756bb19e9ac8bcbddcdadaeb636363969696bdbdbdd9d9d9\");\n","import {cubehelix} from \"d3-color\";\nimport {interpolateCubehelixLong} from \"d3-interpolate\";\n\nexport default interpolateCubehelixLong(cubehelix(300, 0.5, 0.0), cubehelix(-240, 0.5, 1.0));\n","import {cubehelix} from \"d3-color\";\nimport {interpolateCubehelixLong} from \"d3-interpolate\";\n\nexport var warm = interpolateCubehelixLong(cubehelix(-100, 0.75, 0.35), cubehelix(80, 1.50, 0.8));\n\nexport var cool = interpolateCubehelixLong(cubehelix(260, 0.75, 0.35), cubehelix(80, 1.50, 0.8));\n\nvar rainbow = cubehelix();\n\nexport default function(t) {\n if (t < 0 || t > 1) t -= Math.floor(t);\n var ts = Math.abs(t - 0.5);\n rainbow.h = 360 * t - 100;\n rainbow.s = 1.5 - 1.5 * ts;\n rainbow.l = 0.8 - 0.9 * ts;\n return rainbow + \"\";\n}\n","import colors from \"./colors\";\n\nfunction ramp(range) {\n var n = range.length;\n return function(t) {\n return range[Math.max(0, Math.min(n - 1, Math.floor(t * n)))];\n };\n}\n\nexport default ramp(colors(\"44015444025645045745055946075a46085c460a5d460b5e470d60470e6147106347116447136548146748166848176948186a481a6c481b6d481c6e481d6f481f70482071482173482374482475482576482677482878482979472a7a472c7a472d7b472e7c472f7d46307e46327e46337f463480453581453781453882443983443a83443b84433d84433e85423f854240864241864142874144874045884046883f47883f48893e49893e4a893e4c8a3d4d8a3d4e8a3c4f8a3c508b3b518b3b528b3a538b3a548c39558c39568c38588c38598c375a8c375b8d365c8d365d8d355e8d355f8d34608d34618d33628d33638d32648e32658e31668e31678e31688e30698e306a8e2f6b8e2f6c8e2e6d8e2e6e8e2e6f8e2d708e2d718e2c718e2c728e2c738e2b748e2b758e2a768e2a778e2a788e29798e297a8e297b8e287c8e287d8e277e8e277f8e27808e26818e26828e26828e25838e25848e25858e24868e24878e23888e23898e238a8d228b8d228c8d228d8d218e8d218f8d21908d21918c20928c20928c20938c1f948c1f958b1f968b1f978b1f988b1f998a1f9a8a1e9b8a1e9c891e9d891f9e891f9f881fa0881fa1881fa1871fa28720a38620a48621a58521a68522a78522a88423a98324aa8325ab8225ac8226ad8127ad8128ae8029af7f2ab07f2cb17e2db27d2eb37c2fb47c31b57b32b67a34b67935b77937b87838b9773aba763bbb753dbc743fbc7340bd7242be7144bf7046c06f48c16e4ac16d4cc26c4ec36b50c46a52c56954c56856c66758c7655ac8645cc8635ec96260ca6063cb5f65cb5e67cc5c69cd5b6ccd5a6ece5870cf5773d05675d05477d1537ad1517cd2507fd34e81d34d84d44b86d54989d5488bd6468ed64590d74393d74195d84098d83e9bd93c9dd93ba0da39a2da37a5db36a8db34aadc32addc30b0dd2fb2dd2db5de2bb8de29bade28bddf26c0df25c2df23c5e021c8e020cae11fcde11dd0e11cd2e21bd5e21ad8e219dae319dde318dfe318e2e418e5e419e7e419eae51aece51befe51cf1e51df4e61ef6e620f8e621fbe723fde725\"));\n\nexport var magma = ramp(colors(\"00000401000501010601010802010902020b02020d03030f03031204041405041606051806051a07061c08071e0907200a08220b09240c09260d0a290e0b2b100b2d110c2f120d31130d34140e36150e38160f3b180f3d19103f1a10421c10441d11471e114920114b21114e22115024125325125527125829115a2a115c2c115f2d11612f116331116533106734106936106b38106c390f6e3b0f703d0f713f0f72400f74420f75440f764510774710784910784a10794c117a4e117b4f127b51127c52137c54137d56147d57157e59157e5a167e5c167f5d177f5f187f601880621980641a80651a80671b80681c816a1c816b1d816d1d816e1e81701f81721f817320817521817621817822817922827b23827c23827e24828025828125818326818426818627818827818928818b29818c29818e2a81902a81912b81932b80942c80962c80982d80992d809b2e7f9c2e7f9e2f7fa02f7fa1307ea3307ea5317ea6317da8327daa337dab337cad347cae347bb0357bb2357bb3367ab5367ab73779b83779ba3878bc3978bd3977bf3a77c03a76c23b75c43c75c53c74c73d73c83e73ca3e72cc3f71cd4071cf4070d0416fd2426fd3436ed5446dd6456cd8456cd9466bdb476adc4869de4968df4a68e04c67e24d66e34e65e44f64e55064e75263e85362e95462ea5661eb5760ec5860ed5a5fee5b5eef5d5ef05f5ef1605df2625df2645cf3655cf4675cf4695cf56b5cf66c5cf66e5cf7705cf7725cf8745cf8765cf9785df9795df97b5dfa7d5efa7f5efa815ffb835ffb8560fb8761fc8961fc8a62fc8c63fc8e64fc9065fd9266fd9467fd9668fd9869fd9a6afd9b6bfe9d6cfe9f6dfea16efea36ffea571fea772fea973feaa74feac76feae77feb078feb27afeb47bfeb67cfeb77efeb97ffebb81febd82febf84fec185fec287fec488fec68afec88cfeca8dfecc8ffecd90fecf92fed194fed395fed597fed799fed89afdda9cfddc9efddea0fde0a1fde2a3fde3a5fde5a7fde7a9fde9aafdebacfcecaefceeb0fcf0b2fcf2b4fcf4b6fcf6b8fcf7b9fcf9bbfcfbbdfcfdbf\"));\n\nexport var inferno = ramp(colors(\"00000401000501010601010802010a02020c02020e03021004031204031405041706041907051b08051d09061f0a07220b07240c08260d08290e092b10092d110a30120a32140b34150b37160b39180c3c190c3e1b0c411c0c431e0c451f0c48210c4a230c4c240c4f260c51280b53290b552b0b572d0b592f0a5b310a5c320a5e340a5f3609613809623909633b09643d09653e0966400a67420a68440a68450a69470b6a490b6a4a0c6b4c0c6b4d0d6c4f0d6c510e6c520e6d540f6d550f6d57106e59106e5a116e5c126e5d126e5f136e61136e62146e64156e65156e67166e69166e6a176e6c186e6d186e6f196e71196e721a6e741a6e751b6e771c6d781c6d7a1d6d7c1d6d7d1e6d7f1e6c801f6c82206c84206b85216b87216b88226a8a226a8c23698d23698f24699025689225689326679526679727669827669a28659b29649d29649f2a63a02a63a22b62a32c61a52c60a62d60a82e5fa92e5eab2f5ead305dae305cb0315bb1325ab3325ab43359b63458b73557b93556ba3655bc3754bd3853bf3952c03a51c13a50c33b4fc43c4ec63d4dc73e4cc83f4bca404acb4149cc4248ce4347cf4446d04545d24644d34743d44842d54a41d74b3fd84c3ed94d3dda4e3cdb503bdd513ade5238df5337e05536e15635e25734e35933e45a31e55c30e65d2fe75e2ee8602de9612bea632aeb6429eb6628ec6726ed6925ee6a24ef6c23ef6e21f06f20f1711ff1731df2741cf3761bf37819f47918f57b17f57d15f67e14f68013f78212f78410f8850ff8870ef8890cf98b0bf98c0af98e09fa9008fa9207fa9407fb9606fb9706fb9906fb9b06fb9d07fc9f07fca108fca309fca50afca60cfca80dfcaa0ffcac11fcae12fcb014fcb216fcb418fbb61afbb81dfbba1ffbbc21fbbe23fac026fac228fac42afac62df9c72ff9c932f9cb35f8cd37f8cf3af7d13df7d340f6d543f6d746f5d949f5db4cf4dd4ff4df53f4e156f3e35af3e55df2e661f2e865f2ea69f1ec6df1ed71f1ef75f1f179f2f27df2f482f3f586f3f68af4f88ef5f992f6fa96f8fb9af9fc9dfafda1fcffa4\"));\n\nexport var plasma = ramp(colors(\"0d088710078813078916078a19068c1b068d1d068e20068f2206902406912605912805922a05932c05942e05952f059631059733059735049837049938049a3a049a3c049b3e049c3f049c41049d43039e44039e46039f48039f4903a04b03a14c02a14e02a25002a25102a35302a35502a45601a45801a45901a55b01a55c01a65e01a66001a66100a76300a76400a76600a76700a86900a86a00a86c00a86e00a86f00a87100a87201a87401a87501a87701a87801a87a02a87b02a87d03a87e03a88004a88104a78305a78405a78606a68707a68808a68a09a58b0aa58d0ba58e0ca48f0da4910ea3920fa39410a29511a19613a19814a099159f9a169f9c179e9d189d9e199da01a9ca11b9ba21d9aa31e9aa51f99a62098a72197a82296aa2395ab2494ac2694ad2793ae2892b02991b12a90b22b8fb32c8eb42e8db52f8cb6308bb7318ab83289ba3388bb3488bc3587bd3786be3885bf3984c03a83c13b82c23c81c33d80c43e7fc5407ec6417dc7427cc8437bc9447aca457acb4679cc4778cc4977cd4a76ce4b75cf4c74d04d73d14e72d24f71d35171d45270d5536fd5546ed6556dd7566cd8576bd9586ada5a6ada5b69db5c68dc5d67dd5e66de5f65de6164df6263e06363e16462e26561e26660e3685fe4695ee56a5de56b5de66c5ce76e5be76f5ae87059e97158e97257ea7457eb7556eb7655ec7754ed7953ed7a52ee7b51ef7c51ef7e50f07f4ff0804ef1814df1834cf2844bf3854bf3874af48849f48948f58b47f58c46f68d45f68f44f79044f79143f79342f89441f89540f9973ff9983ef99a3efa9b3dfa9c3cfa9e3bfb9f3afba139fba238fca338fca537fca636fca835fca934fdab33fdac33fdae32fdaf31fdb130fdb22ffdb42ffdb52efeb72dfeb82cfeba2cfebb2bfebd2afebe2afec029fdc229fdc328fdc527fdc627fdc827fdca26fdcb26fccd25fcce25fcd025fcd225fbd324fbd524fbd724fad824fada24f9dc24f9dd25f8df25f8e125f7e225f7e425f6e626f6e826f5e926f5eb27f4ed27f3ee27f3f027f2f227f1f426f1f525f0f724f0f921\"));\n","import {linearish} from \"./linear\";\n\nexport default function sequential(interpolator) {\n var x0 = 0,\n x1 = 1,\n clamp = false;\n\n function scale(x) {\n var t = (x - x0) / (x1 - x0);\n return interpolator(clamp ? Math.max(0, Math.min(1, t)) : t);\n }\n\n scale.domain = function(_) {\n return arguments.length ? (x0 = +_[0], x1 = +_[1], scale) : [x0, x1];\n };\n\n scale.clamp = function(_) {\n return arguments.length ? (clamp = !!_, scale) : clamp;\n };\n\n scale.interpolator = function(_) {\n return arguments.length ? (interpolator = _, scale) : interpolator;\n };\n\n scale.copy = function() {\n return sequential(interpolator).domain([x0, x1]).clamp(clamp);\n };\n\n return linearish(scale);\n}\n","export default function(specifier) {\n var n = specifier.length / 6 | 0, colors = new Array(n), i = 0;\n while (i < n) colors[i] = \"#\" + specifier.slice(i * 6, ++i * 6);\n return colors;\n}\n","import colors from \"../colors\";\n\nexport default colors(\"7fc97fbeaed4fdc086ffff99386cb0f0027fbf5b17666666\");\n","import colors from \"../colors\";\n\nexport default colors(\"1f77b4ff7f0e2ca02cd627289467bd8c564be377c27f7f7fbcbd2217becf\");\n","import colors from \"../colors\";\n\nexport default colors(\"1b9e77d95f027570b3e7298a66a61ee6ab02a6761d666666\");\n","import colors from \"../colors\";\n\nexport default colors(\"a6cee31f78b4b2df8a33a02cfb9a99e31a1cfdbf6fff7f00cab2d66a3d9affff99b15928\");\n","import colors from \"../colors\";\n\nexport default colors(\"fbb4aeb3cde3ccebc5decbe4fed9a6ffffcce5d8bdfddaecf2f2f2\");\n","import colors from \"../colors\";\n\nexport default colors(\"b3e2cdfdcdaccbd5e8f4cae4e6f5c9fff2aef1e2cccccccc\");\n","import colors from \"../colors\";\n\nexport default colors(\"e41a1c377eb84daf4a984ea3ff7f00ffff33a65628f781bf999999\");\n","import colors from \"../colors\";\n\nexport default colors(\"66c2a5fc8d628da0cbe78ac3a6d854ffd92fe5c494b3b3b3\");\n","import colors from \"../colors\";\n\nexport default colors(\"8dd3c7ffffb3bebadafb807280b1d3fdb462b3de69fccde5d9d9d9bc80bdccebc5ffed6f\");\n","import {interpolateRgbBasis} from \"d3-interpolate\";\n\nexport default function(scheme) {\n return interpolateRgbBasis(scheme[scheme.length - 1]);\n}\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"d8b365f5f5f55ab4ac\",\n \"a6611adfc27d80cdc1018571\",\n \"a6611adfc27df5f5f580cdc1018571\",\n \"8c510ad8b365f6e8c3c7eae55ab4ac01665e\",\n \"8c510ad8b365f6e8c3f5f5f5c7eae55ab4ac01665e\",\n \"8c510abf812ddfc27df6e8c3c7eae580cdc135978f01665e\",\n \"8c510abf812ddfc27df6e8c3f5f5f5c7eae580cdc135978f01665e\",\n \"5430058c510abf812ddfc27df6e8c3c7eae580cdc135978f01665e003c30\",\n \"5430058c510abf812ddfc27df6e8c3f5f5f5c7eae580cdc135978f01665e003c30\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"af8dc3f7f7f77fbf7b\",\n \"7b3294c2a5cfa6dba0008837\",\n \"7b3294c2a5cff7f7f7a6dba0008837\",\n \"762a83af8dc3e7d4e8d9f0d37fbf7b1b7837\",\n \"762a83af8dc3e7d4e8f7f7f7d9f0d37fbf7b1b7837\",\n \"762a839970abc2a5cfe7d4e8d9f0d3a6dba05aae611b7837\",\n \"762a839970abc2a5cfe7d4e8f7f7f7d9f0d3a6dba05aae611b7837\",\n \"40004b762a839970abc2a5cfe7d4e8d9f0d3a6dba05aae611b783700441b\",\n \"40004b762a839970abc2a5cfe7d4e8f7f7f7d9f0d3a6dba05aae611b783700441b\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"e9a3c9f7f7f7a1d76a\",\n \"d01c8bf1b6dab8e1864dac26\",\n \"d01c8bf1b6daf7f7f7b8e1864dac26\",\n \"c51b7de9a3c9fde0efe6f5d0a1d76a4d9221\",\n \"c51b7de9a3c9fde0eff7f7f7e6f5d0a1d76a4d9221\",\n \"c51b7dde77aef1b6dafde0efe6f5d0b8e1867fbc414d9221\",\n \"c51b7dde77aef1b6dafde0eff7f7f7e6f5d0b8e1867fbc414d9221\",\n \"8e0152c51b7dde77aef1b6dafde0efe6f5d0b8e1867fbc414d9221276419\",\n \"8e0152c51b7dde77aef1b6dafde0eff7f7f7e6f5d0b8e1867fbc414d9221276419\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"998ec3f7f7f7f1a340\",\n \"5e3c99b2abd2fdb863e66101\",\n \"5e3c99b2abd2f7f7f7fdb863e66101\",\n \"542788998ec3d8daebfee0b6f1a340b35806\",\n \"542788998ec3d8daebf7f7f7fee0b6f1a340b35806\",\n \"5427888073acb2abd2d8daebfee0b6fdb863e08214b35806\",\n \"5427888073acb2abd2d8daebf7f7f7fee0b6fdb863e08214b35806\",\n \"2d004b5427888073acb2abd2d8daebfee0b6fdb863e08214b358067f3b08\",\n \"2d004b5427888073acb2abd2d8daebf7f7f7fee0b6fdb863e08214b358067f3b08\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"ef8a62f7f7f767a9cf\",\n \"ca0020f4a58292c5de0571b0\",\n \"ca0020f4a582f7f7f792c5de0571b0\",\n \"b2182bef8a62fddbc7d1e5f067a9cf2166ac\",\n \"b2182bef8a62fddbc7f7f7f7d1e5f067a9cf2166ac\",\n \"b2182bd6604df4a582fddbc7d1e5f092c5de4393c32166ac\",\n \"b2182bd6604df4a582fddbc7f7f7f7d1e5f092c5de4393c32166ac\",\n \"67001fb2182bd6604df4a582fddbc7d1e5f092c5de4393c32166ac053061\",\n \"67001fb2182bd6604df4a582fddbc7f7f7f7d1e5f092c5de4393c32166ac053061\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"ef8a62ffffff999999\",\n \"ca0020f4a582bababa404040\",\n \"ca0020f4a582ffffffbababa404040\",\n \"b2182bef8a62fddbc7e0e0e09999994d4d4d\",\n \"b2182bef8a62fddbc7ffffffe0e0e09999994d4d4d\",\n \"b2182bd6604df4a582fddbc7e0e0e0bababa8787874d4d4d\",\n \"b2182bd6604df4a582fddbc7ffffffe0e0e0bababa8787874d4d4d\",\n \"67001fb2182bd6604df4a582fddbc7e0e0e0bababa8787874d4d4d1a1a1a\",\n \"67001fb2182bd6604df4a582fddbc7ffffffe0e0e0bababa8787874d4d4d1a1a1a\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"fc8d59ffffbf91bfdb\",\n \"d7191cfdae61abd9e92c7bb6\",\n \"d7191cfdae61ffffbfabd9e92c7bb6\",\n \"d73027fc8d59fee090e0f3f891bfdb4575b4\",\n \"d73027fc8d59fee090ffffbfe0f3f891bfdb4575b4\",\n \"d73027f46d43fdae61fee090e0f3f8abd9e974add14575b4\",\n \"d73027f46d43fdae61fee090ffffbfe0f3f8abd9e974add14575b4\",\n \"a50026d73027f46d43fdae61fee090e0f3f8abd9e974add14575b4313695\",\n \"a50026d73027f46d43fdae61fee090ffffbfe0f3f8abd9e974add14575b4313695\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"fc8d59ffffbf91cf60\",\n \"d7191cfdae61a6d96a1a9641\",\n \"d7191cfdae61ffffbfa6d96a1a9641\",\n \"d73027fc8d59fee08bd9ef8b91cf601a9850\",\n \"d73027fc8d59fee08bffffbfd9ef8b91cf601a9850\",\n \"d73027f46d43fdae61fee08bd9ef8ba6d96a66bd631a9850\",\n \"d73027f46d43fdae61fee08bffffbfd9ef8ba6d96a66bd631a9850\",\n \"a50026d73027f46d43fdae61fee08bd9ef8ba6d96a66bd631a9850006837\",\n \"a50026d73027f46d43fdae61fee08bffffbfd9ef8ba6d96a66bd631a9850006837\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"fc8d59ffffbf99d594\",\n \"d7191cfdae61abdda42b83ba\",\n \"d7191cfdae61ffffbfabdda42b83ba\",\n \"d53e4ffc8d59fee08be6f59899d5943288bd\",\n \"d53e4ffc8d59fee08bffffbfe6f59899d5943288bd\",\n \"d53e4ff46d43fdae61fee08be6f598abdda466c2a53288bd\",\n \"d53e4ff46d43fdae61fee08bffffbfe6f598abdda466c2a53288bd\",\n \"9e0142d53e4ff46d43fdae61fee08be6f598abdda466c2a53288bd5e4fa2\",\n \"9e0142d53e4ff46d43fdae61fee08bffffbfe6f598abdda466c2a53288bd5e4fa2\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"e5f5f999d8c92ca25f\",\n \"edf8fbb2e2e266c2a4238b45\",\n \"edf8fbb2e2e266c2a42ca25f006d2c\",\n \"edf8fbccece699d8c966c2a42ca25f006d2c\",\n \"edf8fbccece699d8c966c2a441ae76238b45005824\",\n \"f7fcfde5f5f9ccece699d8c966c2a441ae76238b45005824\",\n \"f7fcfde5f5f9ccece699d8c966c2a441ae76238b45006d2c00441b\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"e0ecf49ebcda8856a7\",\n \"edf8fbb3cde38c96c688419d\",\n \"edf8fbb3cde38c96c68856a7810f7c\",\n \"edf8fbbfd3e69ebcda8c96c68856a7810f7c\",\n \"edf8fbbfd3e69ebcda8c96c68c6bb188419d6e016b\",\n \"f7fcfde0ecf4bfd3e69ebcda8c96c68c6bb188419d6e016b\",\n \"f7fcfde0ecf4bfd3e69ebcda8c96c68c6bb188419d810f7c4d004b\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"e0f3dba8ddb543a2ca\",\n \"f0f9e8bae4bc7bccc42b8cbe\",\n \"f0f9e8bae4bc7bccc443a2ca0868ac\",\n \"f0f9e8ccebc5a8ddb57bccc443a2ca0868ac\",\n \"f0f9e8ccebc5a8ddb57bccc44eb3d32b8cbe08589e\",\n \"f7fcf0e0f3dbccebc5a8ddb57bccc44eb3d32b8cbe08589e\",\n \"f7fcf0e0f3dbccebc5a8ddb57bccc44eb3d32b8cbe0868ac084081\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"fee8c8fdbb84e34a33\",\n \"fef0d9fdcc8afc8d59d7301f\",\n \"fef0d9fdcc8afc8d59e34a33b30000\",\n \"fef0d9fdd49efdbb84fc8d59e34a33b30000\",\n \"fef0d9fdd49efdbb84fc8d59ef6548d7301f990000\",\n \"fff7ecfee8c8fdd49efdbb84fc8d59ef6548d7301f990000\",\n \"fff7ecfee8c8fdd49efdbb84fc8d59ef6548d7301fb300007f0000\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"ece2f0a6bddb1c9099\",\n \"f6eff7bdc9e167a9cf02818a\",\n \"f6eff7bdc9e167a9cf1c9099016c59\",\n \"f6eff7d0d1e6a6bddb67a9cf1c9099016c59\",\n \"f6eff7d0d1e6a6bddb67a9cf3690c002818a016450\",\n \"fff7fbece2f0d0d1e6a6bddb67a9cf3690c002818a016450\",\n \"fff7fbece2f0d0d1e6a6bddb67a9cf3690c002818a016c59014636\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"ece7f2a6bddb2b8cbe\",\n \"f1eef6bdc9e174a9cf0570b0\",\n \"f1eef6bdc9e174a9cf2b8cbe045a8d\",\n \"f1eef6d0d1e6a6bddb74a9cf2b8cbe045a8d\",\n \"f1eef6d0d1e6a6bddb74a9cf3690c00570b0034e7b\",\n \"fff7fbece7f2d0d1e6a6bddb74a9cf3690c00570b0034e7b\",\n \"fff7fbece7f2d0d1e6a6bddb74a9cf3690c00570b0045a8d023858\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"e7e1efc994c7dd1c77\",\n \"f1eef6d7b5d8df65b0ce1256\",\n \"f1eef6d7b5d8df65b0dd1c77980043\",\n \"f1eef6d4b9dac994c7df65b0dd1c77980043\",\n \"f1eef6d4b9dac994c7df65b0e7298ace125691003f\",\n \"f7f4f9e7e1efd4b9dac994c7df65b0e7298ace125691003f\",\n \"f7f4f9e7e1efd4b9dac994c7df65b0e7298ace125698004367001f\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"fde0ddfa9fb5c51b8a\",\n \"feebe2fbb4b9f768a1ae017e\",\n \"feebe2fbb4b9f768a1c51b8a7a0177\",\n \"feebe2fcc5c0fa9fb5f768a1c51b8a7a0177\",\n \"feebe2fcc5c0fa9fb5f768a1dd3497ae017e7a0177\",\n \"fff7f3fde0ddfcc5c0fa9fb5f768a1dd3497ae017e7a0177\",\n \"fff7f3fde0ddfcc5c0fa9fb5f768a1dd3497ae017e7a017749006a\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"edf8b17fcdbb2c7fb8\",\n \"ffffcca1dab441b6c4225ea8\",\n \"ffffcca1dab441b6c42c7fb8253494\",\n \"ffffccc7e9b47fcdbb41b6c42c7fb8253494\",\n \"ffffccc7e9b47fcdbb41b6c41d91c0225ea80c2c84\",\n \"ffffd9edf8b1c7e9b47fcdbb41b6c41d91c0225ea80c2c84\",\n \"ffffd9edf8b1c7e9b47fcdbb41b6c41d91c0225ea8253494081d58\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"f7fcb9addd8e31a354\",\n \"ffffccc2e69978c679238443\",\n \"ffffccc2e69978c67931a354006837\",\n \"ffffccd9f0a3addd8e78c67931a354006837\",\n \"ffffccd9f0a3addd8e78c67941ab5d238443005a32\",\n \"ffffe5f7fcb9d9f0a3addd8e78c67941ab5d238443005a32\",\n \"ffffe5f7fcb9d9f0a3addd8e78c67941ab5d238443006837004529\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"fff7bcfec44fd95f0e\",\n \"ffffd4fed98efe9929cc4c02\",\n \"ffffd4fed98efe9929d95f0e993404\",\n \"ffffd4fee391fec44ffe9929d95f0e993404\",\n \"ffffd4fee391fec44ffe9929ec7014cc4c028c2d04\",\n \"ffffe5fff7bcfee391fec44ffe9929ec7014cc4c028c2d04\",\n \"ffffe5fff7bcfee391fec44ffe9929ec7014cc4c02993404662506\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"ffeda0feb24cf03b20\",\n \"ffffb2fecc5cfd8d3ce31a1c\",\n \"ffffb2fecc5cfd8d3cf03b20bd0026\",\n \"ffffb2fed976feb24cfd8d3cf03b20bd0026\",\n \"ffffb2fed976feb24cfd8d3cfc4e2ae31a1cb10026\",\n \"ffffccffeda0fed976feb24cfd8d3cfc4e2ae31a1cb10026\",\n \"ffffccffeda0fed976feb24cfd8d3cfc4e2ae31a1cbd0026800026\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"deebf79ecae13182bd\",\n \"eff3ffbdd7e76baed62171b5\",\n \"eff3ffbdd7e76baed63182bd08519c\",\n \"eff3ffc6dbef9ecae16baed63182bd08519c\",\n \"eff3ffc6dbef9ecae16baed64292c62171b5084594\",\n \"f7fbffdeebf7c6dbef9ecae16baed64292c62171b5084594\",\n \"f7fbffdeebf7c6dbef9ecae16baed64292c62171b508519c08306b\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"e5f5e0a1d99b31a354\",\n \"edf8e9bae4b374c476238b45\",\n \"edf8e9bae4b374c47631a354006d2c\",\n \"edf8e9c7e9c0a1d99b74c47631a354006d2c\",\n \"edf8e9c7e9c0a1d99b74c47641ab5d238b45005a32\",\n \"f7fcf5e5f5e0c7e9c0a1d99b74c47641ab5d238b45005a32\",\n \"f7fcf5e5f5e0c7e9c0a1d99b74c47641ab5d238b45006d2c00441b\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"f0f0f0bdbdbd636363\",\n \"f7f7f7cccccc969696525252\",\n \"f7f7f7cccccc969696636363252525\",\n \"f7f7f7d9d9d9bdbdbd969696636363252525\",\n \"f7f7f7d9d9d9bdbdbd969696737373525252252525\",\n \"fffffff0f0f0d9d9d9bdbdbd969696737373525252252525\",\n \"fffffff0f0f0d9d9d9bdbdbd969696737373525252252525000000\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"efedf5bcbddc756bb1\",\n \"f2f0f7cbc9e29e9ac86a51a3\",\n \"f2f0f7cbc9e29e9ac8756bb154278f\",\n \"f2f0f7dadaebbcbddc9e9ac8756bb154278f\",\n \"f2f0f7dadaebbcbddc9e9ac8807dba6a51a34a1486\",\n \"fcfbfdefedf5dadaebbcbddc9e9ac8807dba6a51a34a1486\",\n \"fcfbfdefedf5dadaebbcbddc9e9ac8807dba6a51a354278f3f007d\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"fee0d2fc9272de2d26\",\n \"fee5d9fcae91fb6a4acb181d\",\n \"fee5d9fcae91fb6a4ade2d26a50f15\",\n \"fee5d9fcbba1fc9272fb6a4ade2d26a50f15\",\n \"fee5d9fcbba1fc9272fb6a4aef3b2ccb181d99000d\",\n \"fff5f0fee0d2fcbba1fc9272fb6a4aef3b2ccb181d99000d\",\n \"fff5f0fee0d2fcbba1fc9272fb6a4aef3b2ccb181da50f1567000d\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"fee6cefdae6be6550d\",\n \"feeddefdbe85fd8d3cd94701\",\n \"feeddefdbe85fd8d3ce6550da63603\",\n \"feeddefdd0a2fdae6bfd8d3ce6550da63603\",\n \"feeddefdd0a2fdae6bfd8d3cf16913d948018c2d04\",\n \"fff5ebfee6cefdd0a2fdae6bfd8d3cf16913d948018c2d04\",\n \"fff5ebfee6cefdd0a2fdae6bfd8d3cf16913d94801a636037f2704\"\n).map(colors);\n\nexport default ramp(scheme);\n","import {cubehelix} from \"d3-color\";\nimport {interpolateCubehelixLong} from \"d3-interpolate\";\n\nexport default interpolateCubehelixLong(cubehelix(300, 0.5, 0.0), cubehelix(-240, 0.5, 1.0));\n","import {cubehelix} from \"d3-color\";\nimport {interpolateCubehelixLong} from \"d3-interpolate\";\n\nexport var warm = interpolateCubehelixLong(cubehelix(-100, 0.75, 0.35), cubehelix(80, 1.50, 0.8));\n\nexport var cool = interpolateCubehelixLong(cubehelix(260, 0.75, 0.35), cubehelix(80, 1.50, 0.8));\n\nvar c = cubehelix();\n\nexport default function(t) {\n if (t < 0 || t > 1) t -= Math.floor(t);\n var ts = Math.abs(t - 0.5);\n c.h = 360 * t - 100;\n c.s = 1.5 - 1.5 * ts;\n c.l = 0.8 - 0.9 * ts;\n return c + \"\";\n}\n","import {rgb} from \"d3-color\";\n\nvar c = rgb(),\n pi_1_3 = Math.PI / 3,\n pi_2_3 = Math.PI * 2 / 3;\n\nexport default function(t) {\n var x;\n t = (0.5 - t) * Math.PI;\n c.r = 255 * (x = Math.sin(t)) * x;\n c.g = 255 * (x = Math.sin(t + pi_1_3)) * x;\n c.b = 255 * (x = Math.sin(t + pi_2_3)) * x;\n return c + \"\";\n}\n","import colors from \"../colors\";\n\nfunction ramp(range) {\n var n = range.length;\n return function(t) {\n return range[Math.max(0, Math.min(n - 1, Math.floor(t * n)))];\n };\n}\n\nexport default ramp(colors(\"44015444025645045745055946075a46085c460a5d460b5e470d60470e6147106347116447136548146748166848176948186a481a6c481b6d481c6e481d6f481f70482071482173482374482475482576482677482878482979472a7a472c7a472d7b472e7c472f7d46307e46327e46337f463480453581453781453882443983443a83443b84433d84433e85423f854240864241864142874144874045884046883f47883f48893e49893e4a893e4c8a3d4d8a3d4e8a3c4f8a3c508b3b518b3b528b3a538b3a548c39558c39568c38588c38598c375a8c375b8d365c8d365d8d355e8d355f8d34608d34618d33628d33638d32648e32658e31668e31678e31688e30698e306a8e2f6b8e2f6c8e2e6d8e2e6e8e2e6f8e2d708e2d718e2c718e2c728e2c738e2b748e2b758e2a768e2a778e2a788e29798e297a8e297b8e287c8e287d8e277e8e277f8e27808e26818e26828e26828e25838e25848e25858e24868e24878e23888e23898e238a8d228b8d228c8d228d8d218e8d218f8d21908d21918c20928c20928c20938c1f948c1f958b1f968b1f978b1f988b1f998a1f9a8a1e9b8a1e9c891e9d891f9e891f9f881fa0881fa1881fa1871fa28720a38620a48621a58521a68522a78522a88423a98324aa8325ab8225ac8226ad8127ad8128ae8029af7f2ab07f2cb17e2db27d2eb37c2fb47c31b57b32b67a34b67935b77937b87838b9773aba763bbb753dbc743fbc7340bd7242be7144bf7046c06f48c16e4ac16d4cc26c4ec36b50c46a52c56954c56856c66758c7655ac8645cc8635ec96260ca6063cb5f65cb5e67cc5c69cd5b6ccd5a6ece5870cf5773d05675d05477d1537ad1517cd2507fd34e81d34d84d44b86d54989d5488bd6468ed64590d74393d74195d84098d83e9bd93c9dd93ba0da39a2da37a5db36a8db34aadc32addc30b0dd2fb2dd2db5de2bb8de29bade28bddf26c0df25c2df23c5e021c8e020cae11fcde11dd0e11cd2e21bd5e21ad8e219dae319dde318dfe318e2e418e5e419e7e419eae51aece51befe51cf1e51df4e61ef6e620f8e621fbe723fde725\"));\n\nexport var magma = ramp(colors(\"00000401000501010601010802010902020b02020d03030f03031204041405041606051806051a07061c08071e0907200a08220b09240c09260d0a290e0b2b100b2d110c2f120d31130d34140e36150e38160f3b180f3d19103f1a10421c10441d11471e114920114b21114e22115024125325125527125829115a2a115c2c115f2d11612f116331116533106734106936106b38106c390f6e3b0f703d0f713f0f72400f74420f75440f764510774710784910784a10794c117a4e117b4f127b51127c52137c54137d56147d57157e59157e5a167e5c167f5d177f5f187f601880621980641a80651a80671b80681c816a1c816b1d816d1d816e1e81701f81721f817320817521817621817822817922827b23827c23827e24828025828125818326818426818627818827818928818b29818c29818e2a81902a81912b81932b80942c80962c80982d80992d809b2e7f9c2e7f9e2f7fa02f7fa1307ea3307ea5317ea6317da8327daa337dab337cad347cae347bb0357bb2357bb3367ab5367ab73779b83779ba3878bc3978bd3977bf3a77c03a76c23b75c43c75c53c74c73d73c83e73ca3e72cc3f71cd4071cf4070d0416fd2426fd3436ed5446dd6456cd8456cd9466bdb476adc4869de4968df4a68e04c67e24d66e34e65e44f64e55064e75263e85362e95462ea5661eb5760ec5860ed5a5fee5b5eef5d5ef05f5ef1605df2625df2645cf3655cf4675cf4695cf56b5cf66c5cf66e5cf7705cf7725cf8745cf8765cf9785df9795df97b5dfa7d5efa7f5efa815ffb835ffb8560fb8761fc8961fc8a62fc8c63fc8e64fc9065fd9266fd9467fd9668fd9869fd9a6afd9b6bfe9d6cfe9f6dfea16efea36ffea571fea772fea973feaa74feac76feae77feb078feb27afeb47bfeb67cfeb77efeb97ffebb81febd82febf84fec185fec287fec488fec68afec88cfeca8dfecc8ffecd90fecf92fed194fed395fed597fed799fed89afdda9cfddc9efddea0fde0a1fde2a3fde3a5fde5a7fde7a9fde9aafdebacfcecaefceeb0fcf0b2fcf2b4fcf4b6fcf6b8fcf7b9fcf9bbfcfbbdfcfdbf\"));\n\nexport var inferno = ramp(colors(\"00000401000501010601010802010a02020c02020e03021004031204031405041706041907051b08051d09061f0a07220b07240c08260d08290e092b10092d110a30120a32140b34150b37160b39180c3c190c3e1b0c411c0c431e0c451f0c48210c4a230c4c240c4f260c51280b53290b552b0b572d0b592f0a5b310a5c320a5e340a5f3609613809623909633b09643d09653e0966400a67420a68440a68450a69470b6a490b6a4a0c6b4c0c6b4d0d6c4f0d6c510e6c520e6d540f6d550f6d57106e59106e5a116e5c126e5d126e5f136e61136e62146e64156e65156e67166e69166e6a176e6c186e6d186e6f196e71196e721a6e741a6e751b6e771c6d781c6d7a1d6d7c1d6d7d1e6d7f1e6c801f6c82206c84206b85216b87216b88226a8a226a8c23698d23698f24699025689225689326679526679727669827669a28659b29649d29649f2a63a02a63a22b62a32c61a52c60a62d60a82e5fa92e5eab2f5ead305dae305cb0315bb1325ab3325ab43359b63458b73557b93556ba3655bc3754bd3853bf3952c03a51c13a50c33b4fc43c4ec63d4dc73e4cc83f4bca404acb4149cc4248ce4347cf4446d04545d24644d34743d44842d54a41d74b3fd84c3ed94d3dda4e3cdb503bdd513ade5238df5337e05536e15635e25734e35933e45a31e55c30e65d2fe75e2ee8602de9612bea632aeb6429eb6628ec6726ed6925ee6a24ef6c23ef6e21f06f20f1711ff1731df2741cf3761bf37819f47918f57b17f57d15f67e14f68013f78212f78410f8850ff8870ef8890cf98b0bf98c0af98e09fa9008fa9207fa9407fb9606fb9706fb9906fb9b06fb9d07fc9f07fca108fca309fca50afca60cfca80dfcaa0ffcac11fcae12fcb014fcb216fcb418fbb61afbb81dfbba1ffbbc21fbbe23fac026fac228fac42afac62df9c72ff9c932f9cb35f8cd37f8cf3af7d13df7d340f6d543f6d746f5d949f5db4cf4dd4ff4df53f4e156f3e35af3e55df2e661f2e865f2ea69f1ec6df1ed71f1ef75f1f179f2f27df2f482f3f586f3f68af4f88ef5f992f6fa96f8fb9af9fc9dfafda1fcffa4\"));\n\nexport var plasma = ramp(colors(\"0d088710078813078916078a19068c1b068d1d068e20068f2206902406912605912805922a05932c05942e05952f059631059733059735049837049938049a3a049a3c049b3e049c3f049c41049d43039e44039e46039f48039f4903a04b03a14c02a14e02a25002a25102a35302a35502a45601a45801a45901a55b01a55c01a65e01a66001a66100a76300a76400a76600a76700a86900a86a00a86c00a86e00a86f00a87100a87201a87401a87501a87701a87801a87a02a87b02a87d03a87e03a88004a88104a78305a78405a78606a68707a68808a68a09a58b0aa58d0ba58e0ca48f0da4910ea3920fa39410a29511a19613a19814a099159f9a169f9c179e9d189d9e199da01a9ca11b9ba21d9aa31e9aa51f99a62098a72197a82296aa2395ab2494ac2694ad2793ae2892b02991b12a90b22b8fb32c8eb42e8db52f8cb6308bb7318ab83289ba3388bb3488bc3587bd3786be3885bf3984c03a83c13b82c23c81c33d80c43e7fc5407ec6417dc7427cc8437bc9447aca457acb4679cc4778cc4977cd4a76ce4b75cf4c74d04d73d14e72d24f71d35171d45270d5536fd5546ed6556dd7566cd8576bd9586ada5a6ada5b69db5c68dc5d67dd5e66de5f65de6164df6263e06363e16462e26561e26660e3685fe4695ee56a5de56b5de66c5ce76e5be76f5ae87059e97158e97257ea7457eb7556eb7655ec7754ed7953ed7a52ee7b51ef7c51ef7e50f07f4ff0804ef1814df1834cf2844bf3854bf3874af48849f48948f58b47f58c46f68d45f68f44f79044f79143f79342f89441f89540f9973ff9983ef99a3efa9b3dfa9c3cfa9e3bfb9f3afba139fba238fca338fca537fca636fca835fca934fdab33fdac33fdae32fdaf31fdb130fdb22ffdb42ffdb52efeb72dfeb82cfeba2cfebb2bfebd2afebe2afec029fdc229fdc328fdc527fdc627fdc827fdca26fdcb26fccd25fcce25fcd025fcd225fbd324fbd524fbd724fad824fada24f9dc24f9dd25f8df25f8e125f7e225f7e425f6e626f6e826f5e926f5eb27f4ed27f3ee27f3f027f2f227f1f426f1f525f0f724f0f921\"));\n","const ReservedFields = {\n ROW_ID: '__id__'\n};\n\nexport default ReservedFields;\n","const CommonProps = {\n ACTION_INF: 'actionInf',\n ON_LAYER_DRAW: 'onlayerdraw'\n};\n\nexport default CommonProps;\n","export var slice = Array.prototype.slice;\n","export default function(x) {\n return x;\n}\n","import {slice} from \"./array\";\nimport identity from \"./identity\";\n\nvar top = 1,\n right = 2,\n bottom = 3,\n left = 4,\n epsilon = 1e-6;\n\nfunction translateX(x) {\n return \"translate(\" + (x + 0.5) + \",0)\";\n}\n\nfunction translateY(y) {\n return \"translate(0,\" + (y + 0.5) + \")\";\n}\n\nfunction number(scale) {\n return function(d) {\n return +scale(d);\n };\n}\n\nfunction center(scale) {\n var offset = Math.max(0, scale.bandwidth() - 1) / 2; // Adjust for 0.5px offset.\n if (scale.round()) offset = Math.round(offset);\n return function(d) {\n return +scale(d) + offset;\n };\n}\n\nfunction entering() {\n return !this.__axis;\n}\n\nfunction axis(orient, scale) {\n var tickArguments = [],\n tickValues = null,\n tickFormat = null,\n tickTransform = null,\n tickSizeInner = 6,\n tickSizeOuter = 6,\n tickPadding = 3,\n k = orient === top || orient === left ? -1 : 1,\n x = orient === left || orient === right ? \"x\" : \"y\",\n transform = orient === top || orient === bottom ? translateX : translateY;\n\n function axis(context) {\n var values = tickValues == null ? (scale.ticks ? scale.ticks.apply(scale, tickArguments) : scale.domain()) : tickValues,\n format = tickFormat == null ? (scale.tickFormat ? scale.tickFormat.apply(scale, tickArguments) : identity) : tickFormat,\n spacing = Math.max(tickSizeInner, 0) + tickPadding,\n range = scale.range(),\n range0 = +range[0] + 0.5,\n range1 = +range[range.length - 1] + 0.5,\n position = (scale.bandwidth ? center : number)(scale.copy()),\n selection = context.selection ? context.selection() : context,\n path = selection.selectAll(\".domain\").data([null]),\n tick = selection.selectAll(\".tick\").data(values, scale).order(),\n tickExit = tick.exit(),\n tickEnter = tick.enter().append(\"g\").attr(\"class\", \"tick\"),\n line = tick.select(\"line\"),\n text = tick.select(\"text\");\n\n path = path.merge(path.enter().insert(\"path\", \".tick\")\n .attr(\"class\", \"domain\")\n .attr(\"stroke\", \"#000\"));\n\n tick = tick.merge(tickEnter);\n\n line = line.merge(tickEnter.append(\"line\")\n .attr(\"stroke\", \"#000\")\n .attr(x + \"2\", k * tickSizeInner));\n\n text = text.merge(tickEnter.append(\"text\")\n .attr(\"fill\", \"#000\")\n .attr(x, k * spacing)\n .attr(\"dy\", orient === top ? \"0em\" : orient === bottom ? \"0.71em\" : \"0.32em\"))\n .style('transform', tickTransform);\n\n if (context !== selection) {\n path = path.transition(context);\n tick = tick.transition(context);\n line = line.transition(context);\n text = text.transition(context);\n\n tickExit = tickExit.transition(context)\n .attr(\"opacity\", epsilon)\n .attr(\"transform\", function(d) { return isFinite(d = position(d)) ? transform(d) : this.getAttribute(\"transform\"); });\n\n tickEnter\n .attr(\"opacity\", epsilon)\n .attr(\"transform\", function(d) { var p = this.parentNode.__axis; return transform(p && isFinite(p = p(d)) ? p : position(d)); });\n }\n\n tickExit.remove();\n\n path\n .attr(\"d\", orient === left || orient == right\n ? \"M\" + k * tickSizeOuter + \",\" + range0 + \"H0.5V\" + range1 + \"H\" + k * tickSizeOuter\n : \"M\" + range0 + \",\" + k * tickSizeOuter + \"V0.5H\" + range1 + \"V\" + k * tickSizeOuter);\n\n tick\n .attr(\"opacity\", 1)\n .attr(\"transform\", function(d) { return transform(position(d)); });\n\n line\n .attr(x + \"2\", k * tickSizeInner);\n\n text\n .attr(x, k * spacing)\n .text(format);\n\n selection.filter(entering)\n .attr(\"fill\", \"none\")\n .attr(\"font-size\", 10)\n .attr(\"font-family\", \"sans-serif\")\n .attr(\"text-anchor\", orient === right ? \"start\" : orient === left ? \"end\" : \"middle\");\n\n selection\n .each(function() { this.__axis = position; });\n }\n\n axis.scale = function(_) {\n return arguments.length ? (scale = _, axis) : scale;\n };\n\n axis.tickTransform = function(_) {\n return arguments.length ? (tickTransform = _, axis) : tickTransform;\n };\n\n axis.ticks = function() {\n return tickArguments = slice.call(arguments), axis;\n };\n\n axis.tickArguments = function(_) {\n return arguments.length ? (tickArguments = _ == null ? [] : slice.call(_), axis) : tickArguments.slice();\n };\n\n axis.tickValues = function(_) {\n return arguments.length ? (tickValues = _ == null ? null : slice.call(_), axis) : tickValues && tickValues.slice();\n };\n\n axis.tickFormat = function(_) {\n return arguments.length ? (tickFormat = _, axis) : tickFormat;\n };\n\n axis.tickSize = function(_) {\n return arguments.length ? (tickSizeInner = tickSizeOuter = +_, axis) : tickSizeInner;\n };\n\n axis.tickSizeInner = function(_) {\n return arguments.length ? (tickSizeInner = +_, axis) : tickSizeInner;\n };\n\n axis.tickSizeOuter = function(_) {\n return arguments.length ? (tickSizeOuter = +_, axis) : tickSizeOuter;\n };\n\n axis.tickPadding = function(_) {\n return arguments.length ? (tickPadding = +_, axis) : tickPadding;\n };\n\n return axis;\n}\n\nexport function axisTop(scale) {\n return axis(top, scale);\n}\n\nexport function axisRight(scale) {\n return axis(right, scale);\n}\n\nexport function axisBottom(scale) {\n return axis(bottom, scale);\n}\n\nexport function axisLeft(scale) {\n return axis(left, scale);\n}\n","var pi = Math.PI,\n tau = 2 * pi,\n epsilon = 1e-6,\n tauEpsilon = tau - epsilon;\n\nfunction Path() {\n this._x0 = this._y0 = // start of current subpath\n this._x1 = this._y1 = null; // end of current subpath\n this._ = \"\";\n}\n\nfunction path() {\n return new Path;\n}\n\nPath.prototype = path.prototype = {\n constructor: Path,\n moveTo: function(x, y) {\n this._ += \"M\" + (this._x0 = this._x1 = +x) + \",\" + (this._y0 = this._y1 = +y);\n },\n closePath: function() {\n if (this._x1 !== null) {\n this._x1 = this._x0, this._y1 = this._y0;\n this._ += \"Z\";\n }\n },\n lineTo: function(x, y) {\n this._ += \"L\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n },\n quadraticCurveTo: function(x1, y1, x, y) {\n this._ += \"Q\" + (+x1) + \",\" + (+y1) + \",\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n },\n bezierCurveTo: function(x1, y1, x2, y2, x, y) {\n this._ += \"C\" + (+x1) + \",\" + (+y1) + \",\" + (+x2) + \",\" + (+y2) + \",\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n },\n arcTo: function(x1, y1, x2, y2, r) {\n x1 = +x1, y1 = +y1, x2 = +x2, y2 = +y2, r = +r;\n var x0 = this._x1,\n y0 = this._y1,\n x21 = x2 - x1,\n y21 = y2 - y1,\n x01 = x0 - x1,\n y01 = y0 - y1,\n l01_2 = x01 * x01 + y01 * y01;\n\n // Is the radius negative? Error.\n if (r < 0) throw new Error(\"negative radius: \" + r);\n\n // Is this path empty? Move to (x1,y1).\n if (this._x1 === null) {\n this._ += \"M\" + (this._x1 = x1) + \",\" + (this._y1 = y1);\n }\n\n // Or, is (x1,y1) coincident with (x0,y0)? Do nothing.\n else if (!(l01_2 > epsilon));\n\n // Or, are (x0,y0), (x1,y1) and (x2,y2) collinear?\n // Equivalently, is (x1,y1) coincident with (x2,y2)?\n // Or, is the radius zero? Line to (x1,y1).\n else if (!(Math.abs(y01 * x21 - y21 * x01) > epsilon) || !r) {\n this._ += \"L\" + (this._x1 = x1) + \",\" + (this._y1 = y1);\n }\n\n // Otherwise, draw an arc!\n else {\n var x20 = x2 - x0,\n y20 = y2 - y0,\n l21_2 = x21 * x21 + y21 * y21,\n l20_2 = x20 * x20 + y20 * y20,\n l21 = Math.sqrt(l21_2),\n l01 = Math.sqrt(l01_2),\n l = r * Math.tan((pi - Math.acos((l21_2 + l01_2 - l20_2) / (2 * l21 * l01))) / 2),\n t01 = l / l01,\n t21 = l / l21;\n\n // If the start tangent is not coincident with (x0,y0), line to.\n if (Math.abs(t01 - 1) > epsilon) {\n this._ += \"L\" + (x1 + t01 * x01) + \",\" + (y1 + t01 * y01);\n }\n\n this._ += \"A\" + r + \",\" + r + \",0,0,\" + (+(y01 * x20 > x01 * y20)) + \",\" + (this._x1 = x1 + t21 * x21) + \",\" + (this._y1 = y1 + t21 * y21);\n }\n },\n arc: function(x, y, r, a0, a1, ccw) {\n x = +x, y = +y, r = +r;\n var dx = r * Math.cos(a0),\n dy = r * Math.sin(a0),\n x0 = x + dx,\n y0 = y + dy,\n cw = 1 ^ ccw,\n da = ccw ? a0 - a1 : a1 - a0;\n\n // Is the radius negative? Error.\n if (r < 0) throw new Error(\"negative radius: \" + r);\n\n // Is this path empty? Move to (x0,y0).\n if (this._x1 === null) {\n this._ += \"M\" + x0 + \",\" + y0;\n }\n\n // Or, is (x0,y0) not coincident with the previous point? Line to (x0,y0).\n else if (Math.abs(this._x1 - x0) > epsilon || Math.abs(this._y1 - y0) > epsilon) {\n this._ += \"L\" + x0 + \",\" + y0;\n }\n\n // Is this arc empty? We’re done.\n if (!r) return;\n\n // Does the angle go the wrong way? Flip the direction.\n if (da < 0) da = da % tau + tau;\n\n // Is this a complete circle? Draw two arcs to complete the circle.\n if (da > tauEpsilon) {\n this._ += \"A\" + r + \",\" + r + \",0,1,\" + cw + \",\" + (x - dx) + \",\" + (y - dy) + \"A\" + r + \",\" + r + \",0,1,\" + cw + \",\" + (this._x1 = x0) + \",\" + (this._y1 = y0);\n }\n\n // Is this arc non-empty? Draw an arc!\n else if (da > epsilon) {\n this._ += \"A\" + r + \",\" + r + \",0,\" + (+(da >= pi)) + \",\" + cw + \",\" + (this._x1 = x + r * Math.cos(a1)) + \",\" + (this._y1 = y + r * Math.sin(a1));\n }\n },\n rect: function(x, y, w, h) {\n this._ += \"M\" + (this._x0 = this._x1 = +x) + \",\" + (this._y0 = this._y1 = +y) + \"h\" + (+w) + \"v\" + (+h) + \"h\" + (-w) + \"Z\";\n },\n toString: function() {\n return this._;\n }\n};\n\nexport default path;\n","export default function(x) {\n return function constant() {\n return x;\n };\n}\n","export var abs = Math.abs;\nexport var atan2 = Math.atan2;\nexport var cos = Math.cos;\nexport var max = Math.max;\nexport var min = Math.min;\nexport var sin = Math.sin;\nexport var sqrt = Math.sqrt;\n\nexport var epsilon = 1e-12;\nexport var pi = Math.PI;\nexport var halfPi = pi / 2;\nexport var tau = 2 * pi;\n\nexport function acos(x) {\n return x > 1 ? 0 : x < -1 ? pi : Math.acos(x);\n}\n\nexport function asin(x) {\n return x >= 1 ? halfPi : x <= -1 ? -halfPi : Math.asin(x);\n}\n","import {path} from \"d3-path\";\nimport constant from \"./constant\";\nimport {abs, acos, asin, atan2, cos, epsilon, halfPi, max, min, pi, sin, sqrt, tau} from \"./math\";\n\nfunction arcInnerRadius(d) {\n return d.innerRadius;\n}\n\nfunction arcOuterRadius(d) {\n return d.outerRadius;\n}\n\nfunction arcStartAngle(d) {\n return d.startAngle;\n}\n\nfunction arcEndAngle(d) {\n return d.endAngle;\n}\n\nfunction arcPadAngle(d) {\n return d && d.padAngle; // Note: optional!\n}\n\nfunction intersect(x0, y0, x1, y1, x2, y2, x3, y3) {\n var x10 = x1 - x0, y10 = y1 - y0,\n x32 = x3 - x2, y32 = y3 - y2,\n t = (x32 * (y0 - y2) - y32 * (x0 - x2)) / (y32 * x10 - x32 * y10);\n return [x0 + t * x10, y0 + t * y10];\n}\n\n// Compute perpendicular offset line of length rc.\n// http://mathworld.wolfram.com/Circle-LineIntersection.html\nfunction cornerTangents(x0, y0, x1, y1, r1, rc, cw) {\n var x01 = x0 - x1,\n y01 = y0 - y1,\n lo = (cw ? rc : -rc) / sqrt(x01 * x01 + y01 * y01),\n ox = lo * y01,\n oy = -lo * x01,\n x11 = x0 + ox,\n y11 = y0 + oy,\n x10 = x1 + ox,\n y10 = y1 + oy,\n x00 = (x11 + x10) / 2,\n y00 = (y11 + y10) / 2,\n dx = x10 - x11,\n dy = y10 - y11,\n d2 = dx * dx + dy * dy,\n r = r1 - rc,\n D = x11 * y10 - x10 * y11,\n d = (dy < 0 ? -1 : 1) * sqrt(max(0, r * r * d2 - D * D)),\n cx0 = (D * dy - dx * d) / d2,\n cy0 = (-D * dx - dy * d) / d2,\n cx1 = (D * dy + dx * d) / d2,\n cy1 = (-D * dx + dy * d) / d2,\n dx0 = cx0 - x00,\n dy0 = cy0 - y00,\n dx1 = cx1 - x00,\n dy1 = cy1 - y00;\n\n // Pick the closer of the two intersection points.\n // TODO Is there a faster way to determine which intersection to use?\n if (dx0 * dx0 + dy0 * dy0 > dx1 * dx1 + dy1 * dy1) cx0 = cx1, cy0 = cy1;\n\n return {\n cx: cx0,\n cy: cy0,\n x01: -ox,\n y01: -oy,\n x11: cx0 * (r1 / r - 1),\n y11: cy0 * (r1 / r - 1)\n };\n}\n\nexport default function() {\n var innerRadius = arcInnerRadius,\n outerRadius = arcOuterRadius,\n cornerRadius = constant(0),\n padRadius = null,\n startAngle = arcStartAngle,\n endAngle = arcEndAngle,\n padAngle = arcPadAngle,\n context = null;\n\n function arc() {\n var buffer,\n r,\n r0 = +innerRadius.apply(this, arguments),\n r1 = +outerRadius.apply(this, arguments),\n a0 = startAngle.apply(this, arguments) - halfPi,\n a1 = endAngle.apply(this, arguments) - halfPi,\n da = abs(a1 - a0),\n cw = a1 > a0;\n\n if (!context) context = buffer = path();\n\n // Ensure that the outer radius is always larger than the inner radius.\n if (r1 < r0) r = r1, r1 = r0, r0 = r;\n\n // Is it a point?\n if (!(r1 > epsilon)) context.moveTo(0, 0);\n\n // Or is it a circle or annulus?\n else if (da > tau - epsilon) {\n context.moveTo(r1 * cos(a0), r1 * sin(a0));\n context.arc(0, 0, r1, a0, a1, !cw);\n if (r0 > epsilon) {\n context.moveTo(r0 * cos(a1), r0 * sin(a1));\n context.arc(0, 0, r0, a1, a0, cw);\n }\n }\n\n // Or is it a circular or annular sector?\n else {\n var a01 = a0,\n a11 = a1,\n a00 = a0,\n a10 = a1,\n da0 = da,\n da1 = da,\n ap = padAngle.apply(this, arguments) / 2,\n rp = (ap > epsilon) && (padRadius ? +padRadius.apply(this, arguments) : sqrt(r0 * r0 + r1 * r1)),\n rc = min(abs(r1 - r0) / 2, +cornerRadius.apply(this, arguments)),\n rc0 = rc,\n rc1 = rc,\n t0,\n t1;\n\n // Apply padding? Note that since r1 ≥ r0, da1 ≥ da0.\n if (rp > epsilon) {\n var p0 = asin(rp / r0 * sin(ap)),\n p1 = asin(rp / r1 * sin(ap));\n if ((da0 -= p0 * 2) > epsilon) p0 *= (cw ? 1 : -1), a00 += p0, a10 -= p0;\n else da0 = 0, a00 = a10 = (a0 + a1) / 2;\n if ((da1 -= p1 * 2) > epsilon) p1 *= (cw ? 1 : -1), a01 += p1, a11 -= p1;\n else da1 = 0, a01 = a11 = (a0 + a1) / 2;\n }\n\n var x01 = r1 * cos(a01),\n y01 = r1 * sin(a01),\n x10 = r0 * cos(a10),\n y10 = r0 * sin(a10);\n\n // Apply rounded corners?\n if (rc > epsilon) {\n var x11 = r1 * cos(a11),\n y11 = r1 * sin(a11),\n x00 = r0 * cos(a00),\n y00 = r0 * sin(a00);\n\n // Restrict the corner radius according to the sector angle.\n if (da < pi) {\n var oc = da0 > epsilon ? intersect(x01, y01, x00, y00, x11, y11, x10, y10) : [x10, y10],\n ax = x01 - oc[0],\n ay = y01 - oc[1],\n bx = x11 - oc[0],\n by = y11 - oc[1],\n kc = 1 / sin(acos((ax * bx + ay * by) / (sqrt(ax * ax + ay * ay) * sqrt(bx * bx + by * by))) / 2),\n lc = sqrt(oc[0] * oc[0] + oc[1] * oc[1]);\n rc0 = min(rc, (r0 - lc) / (kc - 1));\n rc1 = min(rc, (r1 - lc) / (kc + 1));\n }\n }\n\n // Is the sector collapsed to a line?\n if (!(da1 > epsilon)) context.moveTo(x01, y01);\n\n // Does the sector’s outer ring have rounded corners?\n else if (rc1 > epsilon) {\n t0 = cornerTangents(x00, y00, x01, y01, r1, rc1, cw);\n t1 = cornerTangents(x11, y11, x10, y10, r1, rc1, cw);\n\n context.moveTo(t0.cx + t0.x01, t0.cy + t0.y01);\n\n // Have the corners merged?\n if (rc1 < rc) context.arc(t0.cx, t0.cy, rc1, atan2(t0.y01, t0.x01), atan2(t1.y01, t1.x01), !cw);\n\n // Otherwise, draw the two corners and the ring.\n else {\n context.arc(t0.cx, t0.cy, rc1, atan2(t0.y01, t0.x01), atan2(t0.y11, t0.x11), !cw);\n context.arc(0, 0, r1, atan2(t0.cy + t0.y11, t0.cx + t0.x11), atan2(t1.cy + t1.y11, t1.cx + t1.x11), !cw);\n context.arc(t1.cx, t1.cy, rc1, atan2(t1.y11, t1.x11), atan2(t1.y01, t1.x01), !cw);\n }\n }\n\n // Or is the outer ring just a circular arc?\n else context.moveTo(x01, y01), context.arc(0, 0, r1, a01, a11, !cw);\n\n // Is there no inner ring, and it’s a circular sector?\n // Or perhaps it’s an annular sector collapsed due to padding?\n if (!(r0 > epsilon) || !(da0 > epsilon)) context.lineTo(x10, y10);\n\n // Does the sector’s inner ring (or point) have rounded corners?\n else if (rc0 > epsilon) {\n t0 = cornerTangents(x10, y10, x11, y11, r0, -rc0, cw);\n t1 = cornerTangents(x01, y01, x00, y00, r0, -rc0, cw);\n\n context.lineTo(t0.cx + t0.x01, t0.cy + t0.y01);\n\n // Have the corners merged?\n if (rc0 < rc) context.arc(t0.cx, t0.cy, rc0, atan2(t0.y01, t0.x01), atan2(t1.y01, t1.x01), !cw);\n\n // Otherwise, draw the two corners and the ring.\n else {\n context.arc(t0.cx, t0.cy, rc0, atan2(t0.y01, t0.x01), atan2(t0.y11, t0.x11), !cw);\n context.arc(0, 0, r0, atan2(t0.cy + t0.y11, t0.cx + t0.x11), atan2(t1.cy + t1.y11, t1.cx + t1.x11), cw);\n context.arc(t1.cx, t1.cy, rc0, atan2(t1.y11, t1.x11), atan2(t1.y01, t1.x01), !cw);\n }\n }\n\n // Or is the inner ring just a circular arc?\n else context.arc(0, 0, r0, a10, a00, cw);\n }\n\n context.closePath();\n\n if (buffer) return context = null, buffer + \"\" || null;\n }\n\n arc.centroid = function() {\n var r = (+innerRadius.apply(this, arguments) + +outerRadius.apply(this, arguments)) / 2,\n a = (+startAngle.apply(this, arguments) + +endAngle.apply(this, arguments)) / 2 - pi / 2;\n return [cos(a) * r, sin(a) * r];\n };\n\n arc.innerRadius = function(_) {\n return arguments.length ? (innerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : innerRadius;\n };\n\n arc.outerRadius = function(_) {\n return arguments.length ? (outerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : outerRadius;\n };\n\n arc.cornerRadius = function(_) {\n return arguments.length ? (cornerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : cornerRadius;\n };\n\n arc.padRadius = function(_) {\n return arguments.length ? (padRadius = _ == null ? null : typeof _ === \"function\" ? _ : constant(+_), arc) : padRadius;\n };\n\n arc.startAngle = function(_) {\n return arguments.length ? (startAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : startAngle;\n };\n\n arc.endAngle = function(_) {\n return arguments.length ? (endAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : endAngle;\n };\n\n arc.padAngle = function(_) {\n return arguments.length ? (padAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : padAngle;\n };\n\n arc.context = function(_) {\n return arguments.length ? ((context = _ == null ? null : _), arc) : context;\n };\n\n return arc;\n}\n","function Linear(context) {\n this._context = context;\n}\n\nLinear.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; // proceed\n default: this._context.lineTo(x, y); break;\n }\n }\n};\n\nexport default function(context) {\n return new Linear(context);\n}\n","export function x(p) {\n return p[0];\n}\n\nexport function y(p) {\n return p[1];\n}\n","import {path} from \"d3-path\";\nimport constant from \"./constant\";\nimport curveLinear from \"./curve/linear\";\nimport {x as pointX, y as pointY} from \"./point\";\n\nexport default function() {\n var x = pointX,\n y = pointY,\n defined = constant(true),\n context = null,\n curve = curveLinear,\n output = null;\n\n function line(data) {\n var i,\n n = data.length,\n d,\n defined0 = false,\n buffer;\n\n if (context == null) output = curve(buffer = path());\n\n for (i = 0; i <= n; ++i) {\n if (!(i < n && defined(d = data[i], i, data)) === defined0) {\n if (defined0 = !defined0) output.lineStart();\n else output.lineEnd();\n }\n if (defined0) output.point(+x(d, i, data), +y(d, i, data));\n }\n\n if (buffer) return output = null, buffer + \"\" || null;\n }\n\n line.x = function(_) {\n return arguments.length ? (x = typeof _ === \"function\" ? _ : constant(+_), line) : x;\n };\n\n line.y = function(_) {\n return arguments.length ? (y = typeof _ === \"function\" ? _ : constant(+_), line) : y;\n };\n\n line.defined = function(_) {\n return arguments.length ? (defined = typeof _ === \"function\" ? _ : constant(!!_), line) : defined;\n };\n\n line.curve = function(_) {\n return arguments.length ? (curve = _, context != null && (output = curve(context)), line) : curve;\n };\n\n line.context = function(_) {\n return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), line) : context;\n };\n\n return line;\n}\n","import {path} from \"d3-path\";\nimport constant from \"./constant\";\nimport curveLinear from \"./curve/linear\";\nimport line from \"./line\";\nimport {x as pointX, y as pointY} from \"./point\";\n\nexport default function() {\n var x0 = pointX,\n x1 = null,\n y0 = constant(0),\n y1 = pointY,\n defined = constant(true),\n context = null,\n curve = curveLinear,\n output = null;\n\n function area(data) {\n var i,\n j,\n k,\n n = data.length,\n d,\n defined0 = false,\n buffer,\n x0z = new Array(n),\n y0z = new Array(n);\n\n if (context == null) output = curve(buffer = path());\n\n for (i = 0; i <= n; ++i) {\n if (!(i < n && defined(d = data[i], i, data)) === defined0) {\n if (defined0 = !defined0) {\n j = i;\n output.areaStart();\n output.lineStart();\n } else {\n output.lineEnd();\n output.lineStart();\n for (k = i - 1; k >= j; --k) {\n output.point(x0z[k], y0z[k]);\n }\n output.lineEnd();\n output.areaEnd();\n }\n }\n if (defined0) {\n x0z[i] = +x0(d, i, data), y0z[i] = +y0(d, i, data);\n output.point(x1 ? +x1(d, i, data) : x0z[i], y1 ? +y1(d, i, data) : y0z[i]);\n }\n }\n\n if (buffer) return output = null, buffer + \"\" || null;\n }\n\n function arealine() {\n return line().defined(defined).curve(curve).context(context);\n }\n\n area.x = function(_) {\n return arguments.length ? (x0 = typeof _ === \"function\" ? _ : constant(+_), x1 = null, area) : x0;\n };\n\n area.x0 = function(_) {\n return arguments.length ? (x0 = typeof _ === \"function\" ? _ : constant(+_), area) : x0;\n };\n\n area.x1 = function(_) {\n return arguments.length ? (x1 = _ == null ? null : typeof _ === \"function\" ? _ : constant(+_), area) : x1;\n };\n\n area.y = function(_) {\n return arguments.length ? (y0 = typeof _ === \"function\" ? _ : constant(+_), y1 = null, area) : y0;\n };\n\n area.y0 = function(_) {\n return arguments.length ? (y0 = typeof _ === \"function\" ? _ : constant(+_), area) : y0;\n };\n\n area.y1 = function(_) {\n return arguments.length ? (y1 = _ == null ? null : typeof _ === \"function\" ? _ : constant(+_), area) : y1;\n };\n\n area.lineX0 =\n area.lineY0 = function() {\n return arealine().x(x0).y(y0);\n };\n\n area.lineY1 = function() {\n return arealine().x(x0).y(y1);\n };\n\n area.lineX1 = function() {\n return arealine().x(x1).y(y0);\n };\n\n area.defined = function(_) {\n return arguments.length ? (defined = typeof _ === \"function\" ? _ : constant(!!_), area) : defined;\n };\n\n area.curve = function(_) {\n return arguments.length ? (curve = _, context != null && (output = curve(context)), area) : curve;\n };\n\n area.context = function(_) {\n return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), area) : context;\n };\n\n return area;\n}\n","export default function(a, b) {\n return b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN;\n}\n","export default function(d) {\n return d;\n}\n","import curveLinear from \"./linear\";\n\nexport var curveRadialLinear = curveRadial(curveLinear);\n\nfunction Radial(curve) {\n this._curve = curve;\n}\n\nRadial.prototype = {\n areaStart: function() {\n this._curve.areaStart();\n },\n areaEnd: function() {\n this._curve.areaEnd();\n },\n lineStart: function() {\n this._curve.lineStart();\n },\n lineEnd: function() {\n this._curve.lineEnd();\n },\n point: function(a, r) {\n this._curve.point(r * Math.sin(a), r * -Math.cos(a));\n }\n};\n\nexport default function curveRadial(curve) {\n\n function radial(context) {\n return new Radial(curve(context));\n }\n\n radial._curve = curve;\n\n return radial;\n}\n","import curveRadial, {curveRadialLinear} from \"./curve/radial\";\nimport line from \"./line\";\n\nexport function lineRadial(l) {\n var c = l.curve;\n\n l.angle = l.x, delete l.x;\n l.radius = l.y, delete l.y;\n\n l.curve = function(_) {\n return arguments.length ? c(curveRadial(_)) : c()._curve;\n };\n\n return l;\n}\n\nexport default function() {\n return lineRadial(line().curve(curveRadialLinear));\n}\n","export var slice = Array.prototype.slice;\n","import {pi, tau} from \"../math\";\n\nexport default {\n draw: function(context, size) {\n var r = Math.sqrt(size / pi);\n context.moveTo(r, 0);\n context.arc(0, 0, r, 0, tau);\n }\n};\n","export default {\n draw: function(context, size) {\n var r = Math.sqrt(size / 5) / 2;\n context.moveTo(-3 * r, -r);\n context.lineTo(-r, -r);\n context.lineTo(-r, -3 * r);\n context.lineTo(r, -3 * r);\n context.lineTo(r, -r);\n context.lineTo(3 * r, -r);\n context.lineTo(3 * r, r);\n context.lineTo(r, r);\n context.lineTo(r, 3 * r);\n context.lineTo(-r, 3 * r);\n context.lineTo(-r, r);\n context.lineTo(-3 * r, r);\n context.closePath();\n }\n};\n","var tan30 = Math.sqrt(1 / 3),\n tan30_2 = tan30 * 2;\n\nexport default {\n draw: function(context, size) {\n var y = Math.sqrt(size / tan30_2),\n x = y * tan30;\n context.moveTo(0, -y);\n context.lineTo(x, 0);\n context.lineTo(0, y);\n context.lineTo(-x, 0);\n context.closePath();\n }\n};\n","import {pi, tau} from \"../math\";\n\nvar ka = 0.89081309152928522810,\n kr = Math.sin(pi / 10) / Math.sin(7 * pi / 10),\n kx = Math.sin(tau / 10) * kr,\n ky = -Math.cos(tau / 10) * kr;\n\nexport default {\n draw: function(context, size) {\n var r = Math.sqrt(size * ka),\n x = kx * r,\n y = ky * r;\n context.moveTo(0, -r);\n context.lineTo(x, y);\n for (var i = 1; i < 5; ++i) {\n var a = tau * i / 5,\n c = Math.cos(a),\n s = Math.sin(a);\n context.lineTo(s * r, -c * r);\n context.lineTo(c * x - s * y, s * x + c * y);\n }\n context.closePath();\n }\n};\n","export default {\n draw: function(context, size) {\n var w = Math.sqrt(size),\n x = -w / 2;\n context.rect(x, x, w, w);\n }\n};\n","var sqrt3 = Math.sqrt(3);\n\nexport default {\n draw: function(context, size) {\n var y = -Math.sqrt(size / (sqrt3 * 3));\n context.moveTo(0, y * 2);\n context.lineTo(-sqrt3 * y, -y);\n context.lineTo(sqrt3 * y, -y);\n context.closePath();\n }\n};\n","var c = -0.5,\n s = Math.sqrt(3) / 2,\n k = 1 / Math.sqrt(12),\n a = (k / 2 + 1) * 3;\n\nexport default {\n draw: function(context, size) {\n var r = Math.sqrt(size / a),\n x0 = r / 2,\n y0 = r * k,\n x1 = x0,\n y1 = r * k + r,\n x2 = -x1,\n y2 = y1;\n context.moveTo(x0, y0);\n context.lineTo(x1, y1);\n context.lineTo(x2, y2);\n context.lineTo(c * x0 - s * y0, s * x0 + c * y0);\n context.lineTo(c * x1 - s * y1, s * x1 + c * y1);\n context.lineTo(c * x2 - s * y2, s * x2 + c * y2);\n context.lineTo(c * x0 + s * y0, c * y0 - s * x0);\n context.lineTo(c * x1 + s * y1, c * y1 - s * x1);\n context.lineTo(c * x2 + s * y2, c * y2 - s * x2);\n context.closePath();\n }\n};\n","export default function() {}\n","export function point(that, x, y) {\n that._context.bezierCurveTo(\n (2 * that._x0 + that._x1) / 3,\n (2 * that._y0 + that._y1) / 3,\n (that._x0 + 2 * that._x1) / 3,\n (that._y0 + 2 * that._y1) / 3,\n (that._x0 + 4 * that._x1 + x) / 6,\n (that._y0 + 4 * that._y1 + y) / 6\n );\n}\n\nexport function Basis(context) {\n this._context = context;\n}\n\nBasis.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 =\n this._y0 = this._y1 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 3: point(this, this._x1, this._y1); // proceed\n case 2: this._context.lineTo(this._x1, this._y1); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; this._context.lineTo((5 * this._x0 + this._x1) / 6, (5 * this._y0 + this._y1) / 6); // proceed\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n }\n};\n\nexport default function(context) {\n return new Basis(context);\n}\n","import noop from \"../noop\";\nimport {point} from \"./basis\";\n\nfunction BasisClosed(context) {\n this._context = context;\n}\n\nBasisClosed.prototype = {\n areaStart: noop,\n areaEnd: noop,\n lineStart: function() {\n this._x0 = this._x1 = this._x2 = this._x3 = this._x4 =\n this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 1: {\n this._context.moveTo(this._x2, this._y2);\n this._context.closePath();\n break;\n }\n case 2: {\n this._context.moveTo((this._x2 + 2 * this._x3) / 3, (this._y2 + 2 * this._y3) / 3);\n this._context.lineTo((this._x3 + 2 * this._x2) / 3, (this._y3 + 2 * this._y2) / 3);\n this._context.closePath();\n break;\n }\n case 3: {\n this.point(this._x2, this._y2);\n this.point(this._x3, this._y3);\n this.point(this._x4, this._y4);\n break;\n }\n }\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._x2 = x, this._y2 = y; break;\n case 1: this._point = 2; this._x3 = x, this._y3 = y; break;\n case 2: this._point = 3; this._x4 = x, this._y4 = y; this._context.moveTo((this._x0 + 4 * this._x1 + x) / 6, (this._y0 + 4 * this._y1 + y) / 6); break;\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n }\n};\n\nexport default function(context) {\n return new BasisClosed(context);\n}\n","import {point} from \"./basis\";\n\nfunction BasisOpen(context) {\n this._context = context;\n}\n\nBasisOpen.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 =\n this._y0 = this._y1 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; var x0 = (this._x0 + 4 * this._x1 + x) / 6, y0 = (this._y0 + 4 * this._y1 + y) / 6; this._line ? this._context.lineTo(x0, y0) : this._context.moveTo(x0, y0); break;\n case 3: this._point = 4; // proceed\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n }\n};\n\nexport default function(context) {\n return new BasisOpen(context);\n}\n","import {Basis} from \"./basis\";\n\nfunction Bundle(context, beta) {\n this._basis = new Basis(context);\n this._beta = beta;\n}\n\nBundle.prototype = {\n lineStart: function() {\n this._x = [];\n this._y = [];\n this._basis.lineStart();\n },\n lineEnd: function() {\n var x = this._x,\n y = this._y,\n j = x.length - 1;\n\n if (j > 0) {\n var x0 = x[0],\n y0 = y[0],\n dx = x[j] - x0,\n dy = y[j] - y0,\n i = -1,\n t;\n\n while (++i <= j) {\n t = i / j;\n this._basis.point(\n this._beta * x[i] + (1 - this._beta) * (x0 + t * dx),\n this._beta * y[i] + (1 - this._beta) * (y0 + t * dy)\n );\n }\n }\n\n this._x = this._y = null;\n this._basis.lineEnd();\n },\n point: function(x, y) {\n this._x.push(+x);\n this._y.push(+y);\n }\n};\n\nexport default (function custom(beta) {\n\n function bundle(context) {\n return beta === 1 ? new Basis(context) : new Bundle(context, beta);\n }\n\n bundle.beta = function(beta) {\n return custom(+beta);\n };\n\n return bundle;\n})(0.85);\n","export function point(that, x, y) {\n that._context.bezierCurveTo(\n that._x1 + that._k * (that._x2 - that._x0),\n that._y1 + that._k * (that._y2 - that._y0),\n that._x2 + that._k * (that._x1 - x),\n that._y2 + that._k * (that._y1 - y),\n that._x2,\n that._y2\n );\n}\n\nexport function Cardinal(context, tension) {\n this._context = context;\n this._k = (1 - tension) / 6;\n}\n\nCardinal.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 2: this._context.lineTo(this._x2, this._y2); break;\n case 3: point(this, this._x1, this._y1); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; this._x1 = x, this._y1 = y; break;\n case 2: this._point = 3; // proceed\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(tension) {\n\n function cardinal(context) {\n return new Cardinal(context, tension);\n }\n\n cardinal.tension = function(tension) {\n return custom(+tension);\n };\n\n return cardinal;\n})(0);\n","import noop from \"../noop\";\nimport {point} from \"./cardinal\";\n\nexport function CardinalClosed(context, tension) {\n this._context = context;\n this._k = (1 - tension) / 6;\n}\n\nCardinalClosed.prototype = {\n areaStart: noop,\n areaEnd: noop,\n lineStart: function() {\n this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = this._x5 =\n this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = this._y5 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 1: {\n this._context.moveTo(this._x3, this._y3);\n this._context.closePath();\n break;\n }\n case 2: {\n this._context.lineTo(this._x3, this._y3);\n this._context.closePath();\n break;\n }\n case 3: {\n this.point(this._x3, this._y3);\n this.point(this._x4, this._y4);\n this.point(this._x5, this._y5);\n break;\n }\n }\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._x3 = x, this._y3 = y; break;\n case 1: this._point = 2; this._context.moveTo(this._x4 = x, this._y4 = y); break;\n case 2: this._point = 3; this._x5 = x, this._y5 = y; break;\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(tension) {\n\n function cardinal(context) {\n return new CardinalClosed(context, tension);\n }\n\n cardinal.tension = function(tension) {\n return custom(+tension);\n };\n\n return cardinal;\n})(0);\n","import {point} from \"./cardinal\";\n\nexport function CardinalOpen(context, tension) {\n this._context = context;\n this._k = (1 - tension) / 6;\n}\n\nCardinalOpen.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; this._line ? this._context.lineTo(this._x2, this._y2) : this._context.moveTo(this._x2, this._y2); break;\n case 3: this._point = 4; // proceed\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(tension) {\n\n function cardinal(context) {\n return new CardinalOpen(context, tension);\n }\n\n cardinal.tension = function(tension) {\n return custom(+tension);\n };\n\n return cardinal;\n})(0);\n","import {epsilon} from \"../math\";\nimport {Cardinal} from \"./cardinal\";\n\nexport function point(that, x, y) {\n var x1 = that._x1,\n y1 = that._y1,\n x2 = that._x2,\n y2 = that._y2;\n\n if (that._l01_a > epsilon) {\n var a = 2 * that._l01_2a + 3 * that._l01_a * that._l12_a + that._l12_2a,\n n = 3 * that._l01_a * (that._l01_a + that._l12_a);\n x1 = (x1 * a - that._x0 * that._l12_2a + that._x2 * that._l01_2a) / n;\n y1 = (y1 * a - that._y0 * that._l12_2a + that._y2 * that._l01_2a) / n;\n }\n\n if (that._l23_a > epsilon) {\n var b = 2 * that._l23_2a + 3 * that._l23_a * that._l12_a + that._l12_2a,\n m = 3 * that._l23_a * (that._l23_a + that._l12_a);\n x2 = (x2 * b + that._x1 * that._l23_2a - x * that._l12_2a) / m;\n y2 = (y2 * b + that._y1 * that._l23_2a - y * that._l12_2a) / m;\n }\n\n that._context.bezierCurveTo(x1, y1, x2, y2, that._x2, that._y2);\n}\n\nfunction CatmullRom(context, alpha) {\n this._context = context;\n this._alpha = alpha;\n}\n\nCatmullRom.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._l01_a = this._l12_a = this._l23_a =\n this._l01_2a = this._l12_2a = this._l23_2a =\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 2: this._context.lineTo(this._x2, this._y2); break;\n case 3: this.point(this._x2, this._y2); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n\n if (this._point) {\n var x23 = this._x2 - x,\n y23 = this._y2 - y;\n this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));\n }\n\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; // proceed\n default: point(this, x, y); break;\n }\n\n this._l01_a = this._l12_a, this._l12_a = this._l23_a;\n this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(alpha) {\n\n function catmullRom(context) {\n return alpha ? new CatmullRom(context, alpha) : new Cardinal(context, 0);\n }\n\n catmullRom.alpha = function(alpha) {\n return custom(+alpha);\n };\n\n return catmullRom;\n})(0.5);\n","import {CardinalClosed} from \"./cardinalClosed\";\nimport noop from \"../noop\";\nimport {point} from \"./catmullRom\";\n\nfunction CatmullRomClosed(context, alpha) {\n this._context = context;\n this._alpha = alpha;\n}\n\nCatmullRomClosed.prototype = {\n areaStart: noop,\n areaEnd: noop,\n lineStart: function() {\n this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = this._x5 =\n this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = this._y5 = NaN;\n this._l01_a = this._l12_a = this._l23_a =\n this._l01_2a = this._l12_2a = this._l23_2a =\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 1: {\n this._context.moveTo(this._x3, this._y3);\n this._context.closePath();\n break;\n }\n case 2: {\n this._context.lineTo(this._x3, this._y3);\n this._context.closePath();\n break;\n }\n case 3: {\n this.point(this._x3, this._y3);\n this.point(this._x4, this._y4);\n this.point(this._x5, this._y5);\n break;\n }\n }\n },\n point: function(x, y) {\n x = +x, y = +y;\n\n if (this._point) {\n var x23 = this._x2 - x,\n y23 = this._y2 - y;\n this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));\n }\n\n switch (this._point) {\n case 0: this._point = 1; this._x3 = x, this._y3 = y; break;\n case 1: this._point = 2; this._context.moveTo(this._x4 = x, this._y4 = y); break;\n case 2: this._point = 3; this._x5 = x, this._y5 = y; break;\n default: point(this, x, y); break;\n }\n\n this._l01_a = this._l12_a, this._l12_a = this._l23_a;\n this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(alpha) {\n\n function catmullRom(context) {\n return alpha ? new CatmullRomClosed(context, alpha) : new CardinalClosed(context, 0);\n }\n\n catmullRom.alpha = function(alpha) {\n return custom(+alpha);\n };\n\n return catmullRom;\n})(0.5);\n","import {CardinalOpen} from \"./cardinalOpen\";\nimport {point} from \"./catmullRom\";\n\nfunction CatmullRomOpen(context, alpha) {\n this._context = context;\n this._alpha = alpha;\n}\n\nCatmullRomOpen.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._l01_a = this._l12_a = this._l23_a =\n this._l01_2a = this._l12_2a = this._l23_2a =\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n\n if (this._point) {\n var x23 = this._x2 - x,\n y23 = this._y2 - y;\n this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));\n }\n\n switch (this._point) {\n case 0: this._point = 1; break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; this._line ? this._context.lineTo(this._x2, this._y2) : this._context.moveTo(this._x2, this._y2); break;\n case 3: this._point = 4; // proceed\n default: point(this, x, y); break;\n }\n\n this._l01_a = this._l12_a, this._l12_a = this._l23_a;\n this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(alpha) {\n\n function catmullRom(context) {\n return alpha ? new CatmullRomOpen(context, alpha) : new CardinalOpen(context, 0);\n }\n\n catmullRom.alpha = function(alpha) {\n return custom(+alpha);\n };\n\n return catmullRom;\n})(0.5);\n","import noop from \"../noop\";\n\nfunction LinearClosed(context) {\n this._context = context;\n}\n\nLinearClosed.prototype = {\n areaStart: noop,\n areaEnd: noop,\n lineStart: function() {\n this._point = 0;\n },\n lineEnd: function() {\n if (this._point) this._context.closePath();\n },\n point: function(x, y) {\n x = +x, y = +y;\n if (this._point) this._context.lineTo(x, y);\n else this._point = 1, this._context.moveTo(x, y);\n }\n};\n\nexport default function(context) {\n return new LinearClosed(context);\n}\n","function sign(x) {\n return x < 0 ? -1 : 1;\n}\n\n// Calculate the slopes of the tangents (Hermite-type interpolation) based on\n// the following paper: Steffen, M. 1990. A Simple Method for Monotonic\n// Interpolation in One Dimension. Astronomy and Astrophysics, Vol. 239, NO.\n// NOV(II), P. 443, 1990.\nfunction slope3(that, x2, y2) {\n var h0 = that._x1 - that._x0,\n h1 = x2 - that._x1,\n s0 = (that._y1 - that._y0) / (h0 || h1 < 0 && -0),\n s1 = (y2 - that._y1) / (h1 || h0 < 0 && -0),\n p = (s0 * h1 + s1 * h0) / (h0 + h1);\n return (sign(s0) + sign(s1)) * Math.min(Math.abs(s0), Math.abs(s1), 0.5 * Math.abs(p)) || 0;\n}\n\n// Calculate a one-sided slope.\nfunction slope2(that, t) {\n var h = that._x1 - that._x0;\n return h ? (3 * (that._y1 - that._y0) / h - t) / 2 : t;\n}\n\n// According to https://en.wikipedia.org/wiki/Cubic_Hermite_spline#Representations\n// \"you can express cubic Hermite interpolation in terms of cubic Bézier curves\n// with respect to the four values p0, p0 + m0 / 3, p1 - m1 / 3, p1\".\nfunction point(that, t0, t1) {\n var x0 = that._x0,\n y0 = that._y0,\n x1 = that._x1,\n y1 = that._y1,\n dx = (x1 - x0) / 3;\n that._context.bezierCurveTo(x0 + dx, y0 + dx * t0, x1 - dx, y1 - dx * t1, x1, y1);\n}\n\nfunction MonotoneX(context) {\n this._context = context;\n}\n\nMonotoneX.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 =\n this._y0 = this._y1 =\n this._t0 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 2: this._context.lineTo(this._x1, this._y1); break;\n case 3: point(this, this._t0, slope2(this, this._t0)); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n var t1 = NaN;\n\n x = +x, y = +y;\n if (x === this._x1 && y === this._y1) return; // Ignore coincident points.\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; point(this, slope2(this, t1 = slope3(this, x, y)), t1); break;\n default: point(this, this._t0, t1 = slope3(this, x, y)); break;\n }\n\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n this._t0 = t1;\n }\n}\n\nfunction MonotoneY(context) {\n this._context = new ReflectContext(context);\n}\n\n(MonotoneY.prototype = Object.create(MonotoneX.prototype)).point = function(x, y) {\n MonotoneX.prototype.point.call(this, y, x);\n};\n\nfunction ReflectContext(context) {\n this._context = context;\n}\n\nReflectContext.prototype = {\n moveTo: function(x, y) { this._context.moveTo(y, x); },\n closePath: function() { this._context.closePath(); },\n lineTo: function(x, y) { this._context.lineTo(y, x); },\n bezierCurveTo: function(x1, y1, x2, y2, x, y) { this._context.bezierCurveTo(y1, x1, y2, x2, y, x); }\n};\n\nexport function monotoneX(context) {\n return new MonotoneX(context);\n}\n\nexport function monotoneY(context) {\n return new MonotoneY(context);\n}\n","function Natural(context) {\n this._context = context;\n}\n\nNatural.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x = [];\n this._y = [];\n },\n lineEnd: function() {\n var x = this._x,\n y = this._y,\n n = x.length;\n\n if (n) {\n this._line ? this._context.lineTo(x[0], y[0]) : this._context.moveTo(x[0], y[0]);\n if (n === 2) {\n this._context.lineTo(x[1], y[1]);\n } else {\n var px = controlPoints(x),\n py = controlPoints(y);\n for (var i0 = 0, i1 = 1; i1 < n; ++i0, ++i1) {\n this._context.bezierCurveTo(px[0][i0], py[0][i0], px[1][i0], py[1][i0], x[i1], y[i1]);\n }\n }\n }\n\n if (this._line || (this._line !== 0 && n === 1)) this._context.closePath();\n this._line = 1 - this._line;\n this._x = this._y = null;\n },\n point: function(x, y) {\n this._x.push(+x);\n this._y.push(+y);\n }\n};\n\n// See https://www.particleincell.com/2012/bezier-splines/ for derivation.\nfunction controlPoints(x) {\n var i,\n n = x.length - 1,\n m,\n a = new Array(n),\n b = new Array(n),\n r = new Array(n);\n a[0] = 0, b[0] = 2, r[0] = x[0] + 2 * x[1];\n for (i = 1; i < n - 1; ++i) a[i] = 1, b[i] = 4, r[i] = 4 * x[i] + 2 * x[i + 1];\n a[n - 1] = 2, b[n - 1] = 7, r[n - 1] = 8 * x[n - 1] + x[n];\n for (i = 1; i < n; ++i) m = a[i] / b[i - 1], b[i] -= m, r[i] -= m * r[i - 1];\n a[n - 1] = r[n - 1] / b[n - 1];\n for (i = n - 2; i >= 0; --i) a[i] = (r[i] - a[i + 1]) / b[i];\n b[n - 1] = (x[n] + a[n - 1]) / 2;\n for (i = 0; i < n - 1; ++i) b[i] = 2 * x[i + 1] - a[i + 1];\n return [a, b];\n}\n\nexport default function(context) {\n return new Natural(context);\n}\n","function Step(context, t) {\n this._context = context;\n this._t = t;\n}\n\nStep.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x = this._y = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n if (0 < this._t && this._t < 1 && this._point === 2) this._context.lineTo(this._x, this._y);\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n if (this._line >= 0) this._t = 1 - this._t, this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; // proceed\n default: {\n if (this._t <= 0) {\n this._context.lineTo(this._x, y);\n this._context.lineTo(x, y);\n } else {\n var x1 = this._x * (1 - this._t) + x * this._t;\n this._context.lineTo(x1, this._y);\n this._context.lineTo(x1, y);\n }\n break;\n }\n }\n this._x = x, this._y = y;\n }\n};\n\nexport default function(context) {\n return new Step(context, 0.5);\n}\n\nexport function stepBefore(context) {\n return new Step(context, 0);\n}\n\nexport function stepAfter(context) {\n return new Step(context, 1);\n}\n","export default function(series, order) {\n if (!((n = series.length) > 1)) return;\n for (var i = 1, j, s0, s1 = series[order[0]], n, m = s1.length; i < n; ++i) {\n s0 = s1, s1 = series[order[i]];\n for (j = 0; j < m; ++j) {\n s1[j][1] += s1[j][0] = isNaN(s0[j][1]) ? s0[j][0] : s0[j][1];\n }\n }\n}\n","export default function(series) {\n var n = series.length, o = new Array(n);\n while (--n >= 0) o[n] = n;\n return o;\n}\n","import {slice} from \"./array\";\nimport constant from \"./constant\";\nimport offsetNone from \"./offset/none\";\nimport orderNone from \"./order/none\";\n\nfunction stackValue(d, key) {\n return d[key];\n}\n\nexport default function() {\n var keys = constant([]),\n order = orderNone,\n offset = offsetNone,\n value = stackValue;\n\n function stack(data) {\n var kz = keys.apply(this, arguments),\n i,\n m = data.length,\n n = kz.length,\n sz = new Array(n),\n oz;\n\n for (i = 0; i < n; ++i) {\n for (var ki = kz[i], si = sz[i] = new Array(m), j = 0, sij; j < m; ++j) {\n si[j] = sij = [0, +value(data[j], ki, j, data)];\n sij.data = data[j];\n }\n si.key = ki;\n }\n\n for (i = 0, oz = order(sz); i < n; ++i) {\n sz[oz[i]].index = i;\n }\n\n offset(sz, oz);\n return sz;\n }\n\n stack.keys = function(_) {\n return arguments.length ? (keys = typeof _ === \"function\" ? _ : constant(slice.call(_)), stack) : keys;\n };\n\n stack.value = function(_) {\n return arguments.length ? (value = typeof _ === \"function\" ? _ : constant(+_), stack) : value;\n };\n\n stack.order = function(_) {\n return arguments.length ? (order = _ == null ? orderNone : typeof _ === \"function\" ? _ : constant(slice.call(_)), stack) : order;\n };\n\n stack.offset = function(_) {\n return arguments.length ? (offset = _ == null ? offsetNone : _, stack) : offset;\n };\n\n return stack;\n}\n","import none from \"./none\";\n\nexport default function(series) {\n var sums = series.map(sum);\n return none(series).sort(function(a, b) { return sums[a] - sums[b]; });\n}\n\nexport function sum(series) {\n var s = 0, i = -1, n = series.length, v;\n while (++i < n) if (v = +series[i][1]) s += v;\n return s;\n}\n","export function cubicIn(t) {\n return t * t * t;\n}\n\nexport function cubicOut(t) {\n return --t * t * t + 1;\n}\n\nexport function cubicInOut(t) {\n return ((t *= 2) <= 1 ? t * t * t : (t -= 2) * t * t + 2) / 2;\n}\n","var exponent = 3;\n\nexport var polyIn = (function custom(e) {\n e = +e;\n\n function polyIn(t) {\n return Math.pow(t, e);\n }\n\n polyIn.exponent = custom;\n\n return polyIn;\n})(exponent);\n\nexport var polyOut = (function custom(e) {\n e = +e;\n\n function polyOut(t) {\n return 1 - Math.pow(1 - t, e);\n }\n\n polyOut.exponent = custom;\n\n return polyOut;\n})(exponent);\n\nexport var polyInOut = (function custom(e) {\n e = +e;\n\n function polyInOut(t) {\n return ((t *= 2) <= 1 ? Math.pow(t, e) : 2 - Math.pow(2 - t, e)) / 2;\n }\n\n polyInOut.exponent = custom;\n\n return polyInOut;\n})(exponent);\n","var pi = Math.PI,\n halfPi = pi / 2;\n\nexport function sinIn(t) {\n return 1 - Math.cos(t * halfPi);\n}\n\nexport function sinOut(t) {\n return Math.sin(t * halfPi);\n}\n\nexport function sinInOut(t) {\n return (1 - Math.cos(pi * t)) / 2;\n}\n","var b1 = 4 / 11,\n b2 = 6 / 11,\n b3 = 8 / 11,\n b4 = 3 / 4,\n b5 = 9 / 11,\n b6 = 10 / 11,\n b7 = 15 / 16,\n b8 = 21 / 22,\n b9 = 63 / 64,\n b0 = 1 / b1 / b1;\n\nexport function bounceIn(t) {\n return 1 - bounceOut(1 - t);\n}\n\nexport function bounceOut(t) {\n return (t = +t) < b1 ? b0 * t * t : t < b3 ? b0 * (t -= b2) * t + b4 : t < b6 ? b0 * (t -= b5) * t + b7 : b0 * (t -= b8) * t + b9;\n}\n\nexport function bounceInOut(t) {\n return ((t *= 2) <= 1 ? 1 - bounceOut(1 - t) : bounceOut(t - 1) + 1) / 2;\n}\n","var overshoot = 1.70158;\n\nexport var backIn = (function custom(s) {\n s = +s;\n\n function backIn(t) {\n return t * t * ((s + 1) * t - s);\n }\n\n backIn.overshoot = custom;\n\n return backIn;\n})(overshoot);\n\nexport var backOut = (function custom(s) {\n s = +s;\n\n function backOut(t) {\n return --t * t * ((s + 1) * t + s) + 1;\n }\n\n backOut.overshoot = custom;\n\n return backOut;\n})(overshoot);\n\nexport var backInOut = (function custom(s) {\n s = +s;\n\n function backInOut(t) {\n return ((t *= 2) < 1 ? t * t * ((s + 1) * t - s) : (t -= 2) * t * ((s + 1) * t + s) + 2) / 2;\n }\n\n backInOut.overshoot = custom;\n\n return backInOut;\n})(overshoot);\n","var tau = 2 * Math.PI,\n amplitude = 1,\n period = 0.3;\n\nexport var elasticIn = (function custom(a, p) {\n var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau);\n\n function elasticIn(t) {\n return a * Math.pow(2, 10 * --t) * Math.sin((s - t) / p);\n }\n\n elasticIn.amplitude = function(a) { return custom(a, p * tau); };\n elasticIn.period = function(p) { return custom(a, p); };\n\n return elasticIn;\n})(amplitude, period);\n\nexport var elasticOut = (function custom(a, p) {\n var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau);\n\n function elasticOut(t) {\n return 1 - a * Math.pow(2, -10 * (t = +t)) * Math.sin((t + s) / p);\n }\n\n elasticOut.amplitude = function(a) { return custom(a, p * tau); };\n elasticOut.period = function(p) { return custom(a, p); };\n\n return elasticOut;\n})(amplitude, period);\n\nexport var elasticInOut = (function custom(a, p) {\n var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau);\n\n function elasticInOut(t) {\n return ((t = t * 2 - 1) < 0\n ? a * Math.pow(2, 10 * t) * Math.sin((s - t) / p)\n : 2 - a * Math.pow(2, -10 * t) * Math.sin((s + t) / p)) / 2;\n }\n\n elasticInOut.amplitude = function(a) { return custom(a, p * tau); };\n elasticInOut.period = function(p) { return custom(a, p); };\n\n return elasticInOut;\n})(amplitude, period);\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","export function x(d) {\n return d[0];\n}\n\nexport function y(d) {\n return d[1];\n}\n","function RedBlackTree() {\n this._ = null; // root node\n}\n\nexport function RedBlackNode(node) {\n node.U = // parent node\n node.C = // color - true for red, false for black\n node.L = // left node\n node.R = // right node\n node.P = // previous node\n node.N = null; // next node\n}\n\nRedBlackTree.prototype = {\n constructor: RedBlackTree,\n\n insert: function(after, node) {\n var parent, grandpa, uncle;\n\n if (after) {\n node.P = after;\n node.N = after.N;\n if (after.N) after.N.P = node;\n after.N = node;\n if (after.R) {\n after = after.R;\n while (after.L) after = after.L;\n after.L = node;\n } else {\n after.R = node;\n }\n parent = after;\n } else if (this._) {\n after = RedBlackFirst(this._);\n node.P = null;\n node.N = after;\n after.P = after.L = node;\n parent = after;\n } else {\n node.P = node.N = null;\n this._ = node;\n parent = null;\n }\n node.L = node.R = null;\n node.U = parent;\n node.C = true;\n\n after = node;\n while (parent && parent.C) {\n grandpa = parent.U;\n if (parent === grandpa.L) {\n uncle = grandpa.R;\n if (uncle && uncle.C) {\n parent.C = uncle.C = false;\n grandpa.C = true;\n after = grandpa;\n } else {\n if (after === parent.R) {\n RedBlackRotateLeft(this, parent);\n after = parent;\n parent = after.U;\n }\n parent.C = false;\n grandpa.C = true;\n RedBlackRotateRight(this, grandpa);\n }\n } else {\n uncle = grandpa.L;\n if (uncle && uncle.C) {\n parent.C = uncle.C = false;\n grandpa.C = true;\n after = grandpa;\n } else {\n if (after === parent.L) {\n RedBlackRotateRight(this, parent);\n after = parent;\n parent = after.U;\n }\n parent.C = false;\n grandpa.C = true;\n RedBlackRotateLeft(this, grandpa);\n }\n }\n parent = after.U;\n }\n this._.C = false;\n },\n\n remove: function(node) {\n if (node.N) node.N.P = node.P;\n if (node.P) node.P.N = node.N;\n node.N = node.P = null;\n\n var parent = node.U,\n sibling,\n left = node.L,\n right = node.R,\n next,\n red;\n\n if (!left) next = right;\n else if (!right) next = left;\n else next = RedBlackFirst(right);\n\n if (parent) {\n if (parent.L === node) parent.L = next;\n else parent.R = next;\n } else {\n this._ = next;\n }\n\n if (left && right) {\n red = next.C;\n next.C = node.C;\n next.L = left;\n left.U = next;\n if (next !== right) {\n parent = next.U;\n next.U = node.U;\n node = next.R;\n parent.L = node;\n next.R = right;\n right.U = next;\n } else {\n next.U = parent;\n parent = next;\n node = next.R;\n }\n } else {\n red = node.C;\n node = next;\n }\n\n if (node) node.U = parent;\n if (red) return;\n if (node && node.C) { node.C = false; return; }\n\n do {\n if (node === this._) break;\n if (node === parent.L) {\n sibling = parent.R;\n if (sibling.C) {\n sibling.C = false;\n parent.C = true;\n RedBlackRotateLeft(this, parent);\n sibling = parent.R;\n }\n if ((sibling.L && sibling.L.C)\n || (sibling.R && sibling.R.C)) {\n if (!sibling.R || !sibling.R.C) {\n sibling.L.C = false;\n sibling.C = true;\n RedBlackRotateRight(this, sibling);\n sibling = parent.R;\n }\n sibling.C = parent.C;\n parent.C = sibling.R.C = false;\n RedBlackRotateLeft(this, parent);\n node = this._;\n break;\n }\n } else {\n sibling = parent.L;\n if (sibling.C) {\n sibling.C = false;\n parent.C = true;\n RedBlackRotateRight(this, parent);\n sibling = parent.L;\n }\n if ((sibling.L && sibling.L.C)\n || (sibling.R && sibling.R.C)) {\n if (!sibling.L || !sibling.L.C) {\n sibling.R.C = false;\n sibling.C = true;\n RedBlackRotateLeft(this, sibling);\n sibling = parent.L;\n }\n sibling.C = parent.C;\n parent.C = sibling.L.C = false;\n RedBlackRotateRight(this, parent);\n node = this._;\n break;\n }\n }\n sibling.C = true;\n node = parent;\n parent = parent.U;\n } while (!node.C);\n\n if (node) node.C = false;\n }\n};\n\nfunction RedBlackRotateLeft(tree, node) {\n var p = node,\n q = node.R,\n parent = p.U;\n\n if (parent) {\n if (parent.L === p) parent.L = q;\n else parent.R = q;\n } else {\n tree._ = q;\n }\n\n q.U = parent;\n p.U = q;\n p.R = q.L;\n if (p.R) p.R.U = p;\n q.L = p;\n}\n\nfunction RedBlackRotateRight(tree, node) {\n var p = node,\n q = node.L,\n parent = p.U;\n\n if (parent) {\n if (parent.L === p) parent.L = q;\n else parent.R = q;\n } else {\n tree._ = q;\n }\n\n q.U = parent;\n p.U = q;\n p.L = q.R;\n if (p.L) p.L.U = p;\n q.R = p;\n}\n\nfunction RedBlackFirst(node) {\n while (node.L) node = node.L;\n return node;\n}\n\nexport default RedBlackTree;\n","import {cells, edges, epsilon} from \"./Diagram\";\n\nexport function createEdge(left, right, v0, v1) {\n var edge = [null, null],\n index = edges.push(edge) - 1;\n edge.left = left;\n edge.right = right;\n if (v0) setEdgeEnd(edge, left, right, v0);\n if (v1) setEdgeEnd(edge, right, left, v1);\n cells[left.index].halfedges.push(index);\n cells[right.index].halfedges.push(index);\n return edge;\n}\n\nexport function createBorderEdge(left, v0, v1) {\n var edge = [v0, v1];\n edge.left = left;\n return edge;\n}\n\nexport function setEdgeEnd(edge, left, right, vertex) {\n if (!edge[0] && !edge[1]) {\n edge[0] = vertex;\n edge.left = left;\n edge.right = right;\n } else if (edge.left === right) {\n edge[1] = vertex;\n } else {\n edge[0] = vertex;\n }\n}\n\n// Liang–Barsky line clipping.\nfunction clipEdge(edge, x0, y0, x1, y1) {\n var a = edge[0],\n b = edge[1],\n ax = a[0],\n ay = a[1],\n bx = b[0],\n by = b[1],\n t0 = 0,\n t1 = 1,\n dx = bx - ax,\n dy = by - ay,\n r;\n\n r = x0 - ax;\n if (!dx && r > 0) return;\n r /= dx;\n if (dx < 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n } else if (dx > 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n }\n\n r = x1 - ax;\n if (!dx && r < 0) return;\n r /= dx;\n if (dx < 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n } else if (dx > 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n }\n\n r = y0 - ay;\n if (!dy && r > 0) return;\n r /= dy;\n if (dy < 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n } else if (dy > 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n }\n\n r = y1 - ay;\n if (!dy && r < 0) return;\n r /= dy;\n if (dy < 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n } else if (dy > 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n }\n\n if (!(t0 > 0) && !(t1 < 1)) return true; // TODO Better check?\n\n if (t0 > 0) edge[0] = [ax + t0 * dx, ay + t0 * dy];\n if (t1 < 1) edge[1] = [ax + t1 * dx, ay + t1 * dy];\n return true;\n}\n\nfunction connectEdge(edge, x0, y0, x1, y1) {\n var v1 = edge[1];\n if (v1) return true;\n\n var v0 = edge[0],\n left = edge.left,\n right = edge.right,\n lx = left[0],\n ly = left[1],\n rx = right[0],\n ry = right[1],\n fx = (lx + rx) / 2,\n fy = (ly + ry) / 2,\n fm,\n fb;\n\n if (ry === ly) {\n if (fx < x0 || fx >= x1) return;\n if (lx > rx) {\n if (!v0) v0 = [fx, y0];\n else if (v0[1] >= y1) return;\n v1 = [fx, y1];\n } else {\n if (!v0) v0 = [fx, y1];\n else if (v0[1] < y0) return;\n v1 = [fx, y0];\n }\n } else {\n fm = (lx - rx) / (ry - ly);\n fb = fy - fm * fx;\n if (fm < -1 || fm > 1) {\n if (lx > rx) {\n if (!v0) v0 = [(y0 - fb) / fm, y0];\n else if (v0[1] >= y1) return;\n v1 = [(y1 - fb) / fm, y1];\n } else {\n if (!v0) v0 = [(y1 - fb) / fm, y1];\n else if (v0[1] < y0) return;\n v1 = [(y0 - fb) / fm, y0];\n }\n } else {\n if (ly < ry) {\n if (!v0) v0 = [x0, fm * x0 + fb];\n else if (v0[0] >= x1) return;\n v1 = [x1, fm * x1 + fb];\n } else {\n if (!v0) v0 = [x1, fm * x1 + fb];\n else if (v0[0] < x0) return;\n v1 = [x0, fm * x0 + fb];\n }\n }\n }\n\n edge[0] = v0;\n edge[1] = v1;\n return true;\n}\n\nexport function clipEdges(x0, y0, x1, y1) {\n var i = edges.length,\n edge;\n\n while (i--) {\n if (!connectEdge(edge = edges[i], x0, y0, x1, y1)\n || !clipEdge(edge, x0, y0, x1, y1)\n || !(Math.abs(edge[0][0] - edge[1][0]) > epsilon\n || Math.abs(edge[0][1] - edge[1][1]) > epsilon)) {\n delete edges[i];\n }\n }\n}\n","import {createBorderEdge} from \"./Edge\";\nimport {cells, edges, epsilon} from \"./Diagram\";\n\nexport function createCell(site) {\n return cells[site.index] = {\n site: site,\n halfedges: []\n };\n}\n\nfunction cellHalfedgeAngle(cell, edge) {\n var site = cell.site,\n va = edge.left,\n vb = edge.right;\n if (site === vb) vb = va, va = site;\n if (vb) return Math.atan2(vb[1] - va[1], vb[0] - va[0]);\n if (site === va) va = edge[1], vb = edge[0];\n else va = edge[0], vb = edge[1];\n return Math.atan2(va[0] - vb[0], vb[1] - va[1]);\n}\n\nexport function cellHalfedgeStart(cell, edge) {\n return edge[+(edge.left !== cell.site)];\n}\n\nexport function cellHalfedgeEnd(cell, edge) {\n return edge[+(edge.left === cell.site)];\n}\n\nexport function sortCellHalfedges() {\n for (var i = 0, n = cells.length, cell, halfedges, j, m; i < n; ++i) {\n if ((cell = cells[i]) && (m = (halfedges = cell.halfedges).length)) {\n var index = new Array(m),\n array = new Array(m);\n for (j = 0; j < m; ++j) index[j] = j, array[j] = cellHalfedgeAngle(cell, edges[halfedges[j]]);\n index.sort(function(i, j) { return array[j] - array[i]; });\n for (j = 0; j < m; ++j) array[j] = halfedges[index[j]];\n for (j = 0; j < m; ++j) halfedges[j] = array[j];\n }\n }\n}\n\nexport function clipCells(x0, y0, x1, y1) {\n var nCells = cells.length,\n iCell,\n cell,\n site,\n iHalfedge,\n halfedges,\n nHalfedges,\n start,\n startX,\n startY,\n end,\n endX,\n endY,\n cover = true;\n\n for (iCell = 0; iCell < nCells; ++iCell) {\n if (cell = cells[iCell]) {\n site = cell.site;\n halfedges = cell.halfedges;\n iHalfedge = halfedges.length;\n\n // Remove any dangling clipped edges.\n while (iHalfedge--) {\n if (!edges[halfedges[iHalfedge]]) {\n halfedges.splice(iHalfedge, 1);\n }\n }\n\n // Insert any border edges as necessary.\n iHalfedge = 0, nHalfedges = halfedges.length;\n while (iHalfedge < nHalfedges) {\n end = cellHalfedgeEnd(cell, edges[halfedges[iHalfedge]]), endX = end[0], endY = end[1];\n start = cellHalfedgeStart(cell, edges[halfedges[++iHalfedge % nHalfedges]]), startX = start[0], startY = start[1];\n if (Math.abs(endX - startX) > epsilon || Math.abs(endY - startY) > epsilon) {\n halfedges.splice(iHalfedge, 0, edges.push(createBorderEdge(site, end,\n Math.abs(endX - x0) < epsilon && y1 - endY > epsilon ? [x0, Math.abs(startX - x0) < epsilon ? startY : y1]\n : Math.abs(endY - y1) < epsilon && x1 - endX > epsilon ? [Math.abs(startY - y1) < epsilon ? startX : x1, y1]\n : Math.abs(endX - x1) < epsilon && endY - y0 > epsilon ? [x1, Math.abs(startX - x1) < epsilon ? startY : y0]\n : Math.abs(endY - y0) < epsilon && endX - x0 > epsilon ? [Math.abs(startY - y0) < epsilon ? startX : x0, y0]\n : null)) - 1);\n ++nHalfedges;\n }\n }\n\n if (nHalfedges) cover = false;\n }\n }\n\n // If there weren’t any edges, have the closest site cover the extent.\n // It doesn’t matter which corner of the extent we measure!\n if (cover) {\n var dx, dy, d2, dc = Infinity;\n\n for (iCell = 0, cover = null; iCell < nCells; ++iCell) {\n if (cell = cells[iCell]) {\n site = cell.site;\n dx = site[0] - x0;\n dy = site[1] - y0;\n d2 = dx * dx + dy * dy;\n if (d2 < dc) dc = d2, cover = cell;\n }\n }\n\n if (cover) {\n var v00 = [x0, y0], v01 = [x0, y1], v11 = [x1, y1], v10 = [x1, y0];\n cover.halfedges.push(\n edges.push(createBorderEdge(site = cover.site, v00, v01)) - 1,\n edges.push(createBorderEdge(site, v01, v11)) - 1,\n edges.push(createBorderEdge(site, v11, v10)) - 1,\n edges.push(createBorderEdge(site, v10, v00)) - 1\n );\n }\n }\n\n // Lastly delete any cells with no edges; these were entirely clipped.\n for (iCell = 0; iCell < nCells; ++iCell) {\n if (cell = cells[iCell]) {\n if (!cell.halfedges.length) {\n delete cells[iCell];\n }\n }\n }\n}\n","import {RedBlackNode} from \"./RedBlackTree\";\nimport {circles, epsilon2} from \"./Diagram\";\n\nvar circlePool = [];\n\nexport var firstCircle;\n\nfunction Circle() {\n RedBlackNode(this);\n this.x =\n this.y =\n this.arc =\n this.site =\n this.cy = null;\n}\n\nexport function attachCircle(arc) {\n var lArc = arc.P,\n rArc = arc.N;\n\n if (!lArc || !rArc) return;\n\n var lSite = lArc.site,\n cSite = arc.site,\n rSite = rArc.site;\n\n if (lSite === rSite) return;\n\n var bx = cSite[0],\n by = cSite[1],\n ax = lSite[0] - bx,\n ay = lSite[1] - by,\n cx = rSite[0] - bx,\n cy = rSite[1] - by;\n\n var d = 2 * (ax * cy - ay * cx);\n if (d >= -epsilon2) return;\n\n var ha = ax * ax + ay * ay,\n hc = cx * cx + cy * cy,\n x = (cy * ha - ay * hc) / d,\n y = (ax * hc - cx * ha) / d;\n\n var circle = circlePool.pop() || new Circle;\n circle.arc = arc;\n circle.site = cSite;\n circle.x = x + bx;\n circle.y = (circle.cy = y + by) + Math.sqrt(x * x + y * y); // y bottom\n\n arc.circle = circle;\n\n var before = null,\n node = circles._;\n\n while (node) {\n if (circle.y < node.y || (circle.y === node.y && circle.x <= node.x)) {\n if (node.L) node = node.L;\n else { before = node.P; break; }\n } else {\n if (node.R) node = node.R;\n else { before = node; break; }\n }\n }\n\n circles.insert(before, circle);\n if (!before) firstCircle = circle;\n}\n\nexport function detachCircle(arc) {\n var circle = arc.circle;\n if (circle) {\n if (!circle.P) firstCircle = circle.N;\n circles.remove(circle);\n circlePool.push(circle);\n RedBlackNode(circle);\n arc.circle = null;\n }\n}\n","import {RedBlackNode} from \"./RedBlackTree\";\nimport {createCell} from \"./Cell\";\nimport {attachCircle, detachCircle} from \"./Circle\";\nimport {createEdge, setEdgeEnd} from \"./Edge\";\nimport {beaches, epsilon} from \"./Diagram\";\n\nvar beachPool = [];\n\nfunction Beach() {\n RedBlackNode(this);\n this.edge =\n this.site =\n this.circle = null;\n}\n\nfunction createBeach(site) {\n var beach = beachPool.pop() || new Beach;\n beach.site = site;\n return beach;\n}\n\nfunction detachBeach(beach) {\n detachCircle(beach);\n beaches.remove(beach);\n beachPool.push(beach);\n RedBlackNode(beach);\n}\n\nexport function removeBeach(beach) {\n var circle = beach.circle,\n x = circle.x,\n y = circle.cy,\n vertex = [x, y],\n previous = beach.P,\n next = beach.N,\n disappearing = [beach];\n\n detachBeach(beach);\n\n var lArc = previous;\n while (lArc.circle\n && Math.abs(x - lArc.circle.x) < epsilon\n && Math.abs(y - lArc.circle.cy) < epsilon) {\n previous = lArc.P;\n disappearing.unshift(lArc);\n detachBeach(lArc);\n lArc = previous;\n }\n\n disappearing.unshift(lArc);\n detachCircle(lArc);\n\n var rArc = next;\n while (rArc.circle\n && Math.abs(x - rArc.circle.x) < epsilon\n && Math.abs(y - rArc.circle.cy) < epsilon) {\n next = rArc.N;\n disappearing.push(rArc);\n detachBeach(rArc);\n rArc = next;\n }\n\n disappearing.push(rArc);\n detachCircle(rArc);\n\n var nArcs = disappearing.length,\n iArc;\n for (iArc = 1; iArc < nArcs; ++iArc) {\n rArc = disappearing[iArc];\n lArc = disappearing[iArc - 1];\n setEdgeEnd(rArc.edge, lArc.site, rArc.site, vertex);\n }\n\n lArc = disappearing[0];\n rArc = disappearing[nArcs - 1];\n rArc.edge = createEdge(lArc.site, rArc.site, null, vertex);\n\n attachCircle(lArc);\n attachCircle(rArc);\n}\n\nexport function addBeach(site) {\n var x = site[0],\n directrix = site[1],\n lArc,\n rArc,\n dxl,\n dxr,\n node = beaches._;\n\n while (node) {\n dxl = leftBreakPoint(node, directrix) - x;\n if (dxl > epsilon) node = node.L; else {\n dxr = x - rightBreakPoint(node, directrix);\n if (dxr > epsilon) {\n if (!node.R) {\n lArc = node;\n break;\n }\n node = node.R;\n } else {\n if (dxl > -epsilon) {\n lArc = node.P;\n rArc = node;\n } else if (dxr > -epsilon) {\n lArc = node;\n rArc = node.N;\n } else {\n lArc = rArc = node;\n }\n break;\n }\n }\n }\n\n createCell(site);\n var newArc = createBeach(site);\n beaches.insert(lArc, newArc);\n\n if (!lArc && !rArc) return;\n\n if (lArc === rArc) {\n detachCircle(lArc);\n rArc = createBeach(lArc.site);\n beaches.insert(newArc, rArc);\n newArc.edge = rArc.edge = createEdge(lArc.site, newArc.site);\n attachCircle(lArc);\n attachCircle(rArc);\n return;\n }\n\n if (!rArc) { // && lArc\n newArc.edge = createEdge(lArc.site, newArc.site);\n return;\n }\n\n // else lArc !== rArc\n detachCircle(lArc);\n detachCircle(rArc);\n\n var lSite = lArc.site,\n ax = lSite[0],\n ay = lSite[1],\n bx = site[0] - ax,\n by = site[1] - ay,\n rSite = rArc.site,\n cx = rSite[0] - ax,\n cy = rSite[1] - ay,\n d = 2 * (bx * cy - by * cx),\n hb = bx * bx + by * by,\n hc = cx * cx + cy * cy,\n vertex = [(cy * hb - by * hc) / d + ax, (bx * hc - cx * hb) / d + ay];\n\n setEdgeEnd(rArc.edge, lSite, rSite, vertex);\n newArc.edge = createEdge(lSite, site, null, vertex);\n rArc.edge = createEdge(site, rSite, null, vertex);\n attachCircle(lArc);\n attachCircle(rArc);\n}\n\nfunction leftBreakPoint(arc, directrix) {\n var site = arc.site,\n rfocx = site[0],\n rfocy = site[1],\n pby2 = rfocy - directrix;\n\n if (!pby2) return rfocx;\n\n var lArc = arc.P;\n if (!lArc) return -Infinity;\n\n site = lArc.site;\n var lfocx = site[0],\n lfocy = site[1],\n plby2 = lfocy - directrix;\n\n if (!plby2) return lfocx;\n\n var hl = lfocx - rfocx,\n aby2 = 1 / pby2 - 1 / plby2,\n b = hl / plby2;\n\n if (aby2) return (-b + Math.sqrt(b * b - 2 * aby2 * (hl * hl / (-2 * plby2) - lfocy + plby2 / 2 + rfocy - pby2 / 2))) / aby2 + rfocx;\n\n return (rfocx + lfocx) / 2;\n}\n\nfunction rightBreakPoint(arc, directrix) {\n var rArc = arc.N;\n if (rArc) return leftBreakPoint(rArc, directrix);\n var site = arc.site;\n return site[1] === directrix ? site[0] : Infinity;\n}\n","import {addBeach, removeBeach} from \"./Beach\";\nimport {sortCellHalfedges, cellHalfedgeStart, clipCells} from \"./Cell\";\nimport {firstCircle} from \"./Circle\";\nimport {clipEdges} from \"./Edge\";\nimport RedBlackTree from \"./RedBlackTree\";\n\nexport var epsilon = 1e-6;\nexport var epsilon2 = 1e-12;\nexport var beaches;\nexport var cells;\nexport var circles;\nexport var edges;\n\nfunction triangleArea(a, b, c) {\n return (a[0] - c[0]) * (b[1] - a[1]) - (a[0] - b[0]) * (c[1] - a[1]);\n}\n\nfunction lexicographic(a, b) {\n return b[1] - a[1]\n || b[0] - a[0];\n}\n\nexport default function Diagram(sites, extent) {\n var site = sites.sort(lexicographic).pop(),\n x,\n y,\n circle;\n\n edges = [];\n cells = new Array(sites.length);\n beaches = new RedBlackTree;\n circles = new RedBlackTree;\n\n while (true) {\n circle = firstCircle;\n if (site && (!circle || site[1] < circle.y || (site[1] === circle.y && site[0] < circle.x))) {\n if (site[0] !== x || site[1] !== y) {\n addBeach(site);\n x = site[0], y = site[1];\n }\n site = sites.pop();\n } else if (circle) {\n removeBeach(circle.arc);\n } else {\n break;\n }\n }\n\n sortCellHalfedges();\n\n if (extent) {\n var x0 = +extent[0][0],\n y0 = +extent[0][1],\n x1 = +extent[1][0],\n y1 = +extent[1][1];\n clipEdges(x0, y0, x1, y1);\n clipCells(x0, y0, x1, y1);\n }\n\n this.edges = edges;\n this.cells = cells;\n\n beaches =\n circles =\n edges =\n cells = null;\n}\n\nDiagram.prototype = {\n constructor: Diagram,\n\n polygons: function() {\n var edges = this.edges;\n\n return this.cells.map(function(cell) {\n var polygon = cell.halfedges.map(function(i) { return cellHalfedgeStart(cell, edges[i]); });\n polygon.data = cell.site.data;\n return polygon;\n });\n },\n\n triangles: function() {\n var triangles = [],\n edges = this.edges;\n\n this.cells.forEach(function(cell, i) {\n if (!(m = (halfedges = cell.halfedges).length)) return;\n var site = cell.site,\n halfedges,\n j = -1,\n m,\n s0,\n e1 = edges[halfedges[m - 1]],\n s1 = e1.left === site ? e1.right : e1.left;\n\n while (++j < m) {\n s0 = s1;\n e1 = edges[halfedges[j]];\n s1 = e1.left === site ? e1.right : e1.left;\n if (s0 && s1 && i < s0.index && i < s1.index && triangleArea(site, s0, s1) < 0) {\n triangles.push([site.data, s0.data, s1.data]);\n }\n }\n });\n\n return triangles;\n },\n\n links: function() {\n return this.edges.filter(function(edge) {\n return edge.right;\n }).map(function(edge) {\n return {\n source: edge.left.data,\n target: edge.right.data\n };\n });\n },\n\n find: function(x, y, radius) {\n var that = this, i0, i1 = that._found || 0, n = that.cells.length, cell;\n\n // Use the previously-found cell, or start with an arbitrary one.\n while (!(cell = that.cells[i1])) if (++i1 >= n) return null;\n var dx = x - cell.site[0], dy = y - cell.site[1], d2 = dx * dx + dy * dy;\n\n // Traverse the half-edges to find a closer cell, if any.\n do {\n cell = that.cells[i0 = i1], i1 = null;\n cell.halfedges.forEach(function(e) {\n var edge = that.edges[e], v = edge.left;\n if ((v === cell.site || !v) && !(v = edge.right)) return;\n var vx = x - v[0], vy = y - v[1], v2 = vx * vx + vy * vy;\n if (v2 < d2) d2 = v2, i1 = v.index;\n });\n } while (i1 !== null);\n\n that._found = i0;\n\n return radius == null || d2 <= radius * radius ? cell.site : null;\n }\n}\n","import constant from \"./constant\";\nimport {x as pointX, y as pointY} from \"./point\";\nimport Diagram, {epsilon} from \"./Diagram\";\n\nexport default function() {\n var x = pointX,\n y = pointY,\n extent = null;\n\n function voronoi(data) {\n return new Diagram(data.map(function(d, i) {\n var s = [Math.round(x(d, i, data) / epsilon) * epsilon, Math.round(y(d, i, data) / epsilon) * epsilon];\n s.index = i;\n s.data = d;\n return s;\n }), extent);\n }\n\n voronoi.polygons = function(data) {\n return voronoi(data).polygons();\n };\n\n voronoi.links = function(data) {\n return voronoi(data).links();\n };\n\n voronoi.triangles = function(data) {\n return voronoi(data).triangles();\n };\n\n voronoi.x = function(_) {\n return arguments.length ? (x = typeof _ === \"function\" ? _ : constant(+_), voronoi) : x;\n };\n\n voronoi.y = function(_) {\n return arguments.length ? (y = typeof _ === \"function\" ? _ : constant(+_), voronoi) : y;\n };\n\n voronoi.extent = function(_) {\n return arguments.length ? (extent = _ == null ? null : [[+_[0][0], +_[0][1]], [+_[1][0], +_[1][1]]], voronoi) : extent && [[extent[0][0], extent[0][1]], [extent[1][0], extent[1][1]]];\n };\n\n voronoi.size = function(_) {\n return arguments.length ? (extent = _ == null ? null : [[0, 0], [+_[0], +_[1]]], voronoi) : extent && [extent[1][0] - extent[0][0], extent[1][1] - extent[0][1]];\n };\n\n return voronoi;\n}\n","/* global window, requestAnimationFrame, cancelAnimationFrame */\nimport { FieldType, DimensionSubtype } from 'datamodel';\nimport {\n axisLeft,\n axisRight,\n axisTop,\n axisBottom\n} from 'd3-axis';\nimport {\n symbolCircle,\n symbolCross,\n symbolDiamond,\n symbolSquare,\n symbolStar,\n symbolWye,\n symbolTriangle,\n symbol,\n stack as d3Stack,\n stackOffsetDiverging,\n stackOrderNone,\n stackOrderAscending,\n stackOrderDescending,\n stackOffsetNone,\n stackOffsetExpand,\n stackOffsetWiggle,\n pie,\n arc,\n line,\n curveLinear,\n curveStepAfter,\n curveStepBefore,\n curveStep,\n curveCatmullRom,\n area\n} from 'd3-shape';\nimport { scaleBand } from 'd3-scale';\nimport { nest } from 'd3-collection';\nimport {\n interpolate,\n interpolateRgb,\n piecewise,\n interpolateNumber,\n interpolateHslLong\n} from 'd3-interpolate';\nimport {\n easeCubic,\n easeBounce,\n easePoly,\n easeBack,\n easeCircle,\n easeLinear,\n easeElastic\n} from 'd3-ease';\nimport {\n color,\n rgb,\n hsl\n} from 'd3-color';\nimport { voronoi } from 'd3-voronoi';\nimport Model from 'hyperdis';\nimport * as STACK_CONFIG from './enums/stack-config';\n\nconst HTMLElement = window.HTMLElement;\n\nconst isSimpleObject = (obj) => {\n let token;\n if (typeof obj === 'object') {\n if (obj === null) { return false; }\n token = Object.prototype.toString.call(obj);\n if (token === '[object Object]') {\n return (obj.constructor.toString().match(/^function (.*)\\(\\)/m) || [])[1] === 'Object';\n }\n }\n return false;\n};\n\n/**\n * Returns unique id\n * @return {string} Unique id string\n */\nconst\n getUniqueId = () => `id-${new Date().getTime()}${Math.round(Math.random() * 10000)}`;\n\n/**\n * Deep copies an object and returns a new object.\n * @param {Object} o Object to clone\n * @return {Object} New Object.\n */\nconst clone = (o) => {\n const output = {};\n let v;\n for (const key in o) {\n if ({}.hasOwnProperty.call(o, key)) {\n v = o[key];\n output[key] = isSimpleObject(v) ? clone(v) : v;\n }\n }\n return output;\n};\n\n/**\n* Checks the existence of keys in an object\n* @param {Array} keys Set of keys which are to be checked\n* @param {Object} obj whose keys are checked from the set of keys provided\n* @return {Object} Error if the keys are absent, or the object itself\n*/\nconst checkExistence = (keys, obj) => {\n const nonExistentKeys = [];\n keys.forEach((key) => {\n if (key in obj) {\n return;\n }\n nonExistentKeys.push(key);\n });\n return nonExistentKeys;\n};\n\nconst sanitizeIP = {\n typeObj: (keys, obj) => {\n if (typeof obj !== 'object') {\n return Error('Argument type object expected');\n }\n\n const nonExistentKeys = checkExistence(keys, obj);\n if (nonExistentKeys.length) {\n return Error(`Missing keys from parameter ${nonExistentKeys.join(', ')}`);\n }\n return obj;\n },\n\n /* istanbul ignore next */ htmlElem: (elem) => {\n if (!(elem instanceof HTMLElement)) {\n return Error('HTMLElement required');\n }\n return elem;\n }\n};\n\n/**\n * Gets the maximum value from an array of objects for a given property name\n * @param {Array.} data Array of objects\n * @param {string} field Field name\n * @return {number} Maximum value\n */\nconst getMax = (data, field) => Math.max(...data.filter(d => !isNaN(d[field])).map(d => d[field]));\n\n/**\n * Gets the minimum value from an array of objects for a given property name\n * @param {Array.} data Array of objects\n * @param {string} field Field name\n * @return {number} Minimum value\n */\nconst getMin = (data, field) => Math.min(...data.filter(d => !isNaN(d[field])).map(d => d[field]));\n\n/**\n * Gets the domain from the data based on the field name and type of field\n * @param {Array. | Array.} data Data Array\n * @param {Array.} fields Array of fields from where the domain will be calculated\n * @param {string} fieldType Type of field - nominal, quantitiative, temporal.\n * @return {Array} Usually contains a min and max value if field is quantitative or\n * an array of values if field type is nominal or ordinal\n */\nconst getDomainFromData = (data, fields, fieldType) => {\n let domain;\n let domArr;\n data = data[0] instanceof Array ? data : [data];\n switch (fieldType) {\n case DimensionSubtype.CATEGORICAL:\n domain = [].concat(...data.map(arr => arr.map(d => d[fields[0]]).filter(d => d !== undefined)));\n break;\n default:\n domArr = data.map((arr) => {\n const firstMin = getMin(arr, fields[0]);\n const secondMin = getMin(arr, fields[1]);\n const firstMax = getMax(arr, fields[0]);\n const secondMax = getMax(arr, fields[1]);\n return [Math.min(firstMin, secondMin), Math.max(firstMax, secondMax)];\n });\n domain = [Math.min(...domArr.map(d => d[0])), Math.max(...domArr.map(d => d[1]))];\n break;\n }\n return domain;\n};\n\n/**\n * Union Domain values\n * @param {Array.} domains Array of domain values\n * @param {string} fieldType type of field - dimension,measure or datetime.\n * @return {Array} Unioned domain of all domain values.\n */\nconst unionDomain = (domains, fieldType) => {\n let domain;\n domains = domains.filter(dom => dom.length);\n if (fieldType === DimensionSubtype.CATEGORICAL) {\n domain = domain = [].concat(...domains);\n } else {\n domain = [Math.min(...domains.map(d => d[0])), Math.max(...domains.map(d => d[1]))];\n }\n\n return domain;\n};\n\nconst symbolFns = {\n circle: symbolCircle,\n cross: symbolCross,\n diamond: symbolDiamond,\n square: symbolSquare,\n star: symbolStar,\n wye: symbolWye,\n triangle: symbolTriangle\n};\n\nconst easeFns = {\n cubic: easeCubic,\n bounce: easeBounce,\n linear: easeLinear,\n elastic: easeElastic,\n back: easeBack,\n poly: easePoly,\n circle: easeCircle\n};\n\n/**\n * Returns the maximum or minimum points of a compare value from an array of objects.\n * @param {Array} points Array of objects\n * @param {string} compareValue Key in the object on which the comparing will be done.\n * @param {string} minOrMax minimum or maximum.\n * @return {Object} Minimum or maximum point.\n */\nconst getExtremePoint = (points, compareValue, minOrMax) => {\n let extremePoint;\n let point;\n const len = points.length;\n let minOrMaxVal = minOrMax === 'max' ? -Infinity : Infinity;\n let val;\n\n for (let i = 0; i < len; i++) {\n point = points[i];\n val = point[compareValue];\n if (minOrMax === 'min' ? val < minOrMaxVal : val > minOrMaxVal) {\n minOrMaxVal = val;\n extremePoint = point;\n }\n }\n\n return extremePoint;\n};\n\n/**\n * Returns the minimum point of a compare value from an array of objects.\n * @param {Array} points Array of objects\n * @param {string} compareValue Key in the object on which the comparing will be done.\n * @return {Object} Minimum point.\n */\nconst getMinPoint = (points, compareValue) => getExtremePoint(points, compareValue, 'min');\n\n/**\n * Returns the maximum point of a compare value from an array of objects.\n * @param {Array} points Array of objects\n * @param {string} compareValue Key in the object on which the comparing will be done.\n * @return {Object} Maximum point.\n */\nconst getMaxPoint = (points, compareValue) => getExtremePoint(points, compareValue, 'max');\n\n/**\n * Gets the index of the closest value of the given value from the array.\n * @param {Array} arr Array of values\n * @param {number} value Value from which the nearest value will be calculated.\n * @param {string} side side property.\n * @return {number} index of the closest value\n */\n/* istanbul ignore next */const getClosestIndexOf = (arr, value, side) => {\n let low = 0;\n const arrLen = arr.length;\n let high = arrLen - 1;\n\n let mid;\n let d1;\n let d2;\n\n while (low < high) {\n mid = Math.floor((low + high) / 2);\n d1 = Math.abs(arr[mid] - value);\n d2 = Math.abs(arr[mid + 1] - value);\n\n if (d2 <= d1) {\n low = mid + 1;\n } else {\n high = mid;\n }\n }\n\n if (!side) {\n return high;\n }\n\n const highVal = arr[high];\n if (highVal === value) {\n return high;\n } else if (highVal > value) {\n if (high === 0) { return high; }\n return side === 'left' ? high - 1 : high;\n }\n if (high === arr.length - 1) { return high; }\n return side === 'left' ? high : high + 1;\n};\n\n/**\n * Returns the browser window object\n * @return {Window} Window object\n*/\nconst getWindow = () => window;\n\n/**\n * Returns the browser window object\n * @return {Window} Window object\n*/\nconst reqAnimFrame = (() => requestAnimationFrame)();\n\nconst cancelAnimFrame = (() => cancelAnimationFrame)();\n\n/**\n * Capitalizes the first letter of the word\n * @param {string} text word\n * @return {string} Capitalized word\n */\nconst capitalizeFirst = (text) => {\n text = text.toLowerCase();\n\n return text.replace(/\\w\\S*/g, txt => txt.charAt(0).toUpperCase() + txt.substr(1));\n};\n\n/**\n *\n *\n * @param {*} arr\n */\nconst unique = arr => ([...new Set(arr)]);\n\n/**\n * Gets the minimum difference between two consecutive numbers in an array.\n * @param {Array} arr Array of numbers\n * @param {number} index index of the value\n * @return {number} minimum difference between values\n */\n/* istanbul ignore next */ const getMinDiff = (arr, index) => {\n let diff;\n let uniqueVals;\n if (index !== undefined) {\n uniqueVals = unique(arr.map(d => d[index]));\n } else {\n uniqueVals = unique(arr);\n }\n if (uniqueVals.length > 1) {\n diff = Math.abs(uniqueVals[1] - uniqueVals[0]);\n for (let i = 2, len = uniqueVals.length; i < len; i++) {\n diff = Math.min(diff, Math.abs(uniqueVals[i] - uniqueVals[i - 1]));\n }\n } else {\n diff = uniqueVals[0];\n }\n\n return diff;\n};\n\n/**\n * Returns the class name appended with a given id.\n * @param {string} cls class name\n * @param {string} id unique identifier\n * @param {string} prefix string needed to add before the classname\n * @return {string} qualified class name\n */\n/* istanbul ignore next */const getQualifiedClassName = (cls, id, prefix) => {\n cls = cls.replace(/^\\.*/, '');\n return [`${prefix}-${cls}`, `${prefix}-${cls}-${id}`];\n};\n\n/**\n * This method is used to set the default value for variables\n * without sullying the code with conditional statements.\n *\n * @export\n * @param {any} param The parameter to test.\n * @param {any} value The default value to assign.\n * @return {any} The value.\n */\n/* istanbul ignore next */ const defaultValue = (param, value) => {\n if (typeof param === 'undefined' || (typeof param === 'object' && !param)) {\n return value;\n }\n return param;\n};\n\n/**\n * DESCRIPTION TODO\n * @todo\n *\n * @export\n * @param {Object} graph graph whose dependency order has to be generated\n * @return {Object} @todo\n */\nconst getDependencyOrder = (graph) => {\n const dependencyOrder = [];\n const visited = {};\n const keys = Object.keys(graph);\n /**\n * DESCRIPTION TODO\n * @todo\n *\n * @export\n * @param {Object} name @todo\n * @return {Object} @todo\n */\n const visit = (name) => {\n if (dependencyOrder.length === keys.length) {\n return true;\n }\n visited[name] = true;\n const edges = graph[name];\n for (let e = 0; e < edges.length; e++) {\n const dep = edges[e];\n if (!visited[dep]) {\n visit(dep);\n }\n }\n\n dependencyOrder.push(name);\n return false;\n };\n\n for (let i = 0; i < keys.length; i++) {\n if (visit(keys[i], i)) break;\n }\n\n return dependencyOrder;\n};\n\n/**\n * Iterates over the properties of an object and applies the function\n *\n * @param {any} obj object to be iterated upon\n * @param {any} fn function to be applied on it\n */\nconst objectIterator = (obj, fn) => {\n for (const key in obj) {\n if (Object.hasOwnProperty.call(obj, key)) {\n fn(key, obj);\n }\n }\n};\n\n/**\n * This class creates a d3 voronoi for retrieving the nearest neighbour of any point from a set of two\n * dimensional points\n * @class Voronoi\n */\n/* istanbul ignore next */ class Voronoi {\n /**\n * Initialize the voronoi with the data given.\n * @param {Array.} data Array of points.\n */\n constructor (data) {\n this._voronoi = voronoi().x(d => d.x).y(d => d.y);\n this.data(data);\n }\n\n /**\n * Sets the data to voronoi\n * @param {Array.} data Array of objects.\n * @return {Voronoi} Instance of voronoi.\n */\n data (data) {\n if (data) {\n this._voronoiFn = this._voronoi(data);\n }\n return this;\n }\n\n /**\n * Finds the closest point to the x and y position given.\n * @param {number} x x value\n * @param {number} y y value\n * @param {number} radius search radius.\n * @return {Object} Details of the nearest point.\n */\n find (x, y, radius) {\n return this._voronoiFn.find(x, y, radius);\n }\n}\n\n/**\n * Methods to handle changes to table configuration and reactivity are handled by this\n * class.\n */\n/**\n * Common store class\n *\n * @class Store\n */\nclass Store {\n /**\n * Creates an instance of Store.\n * @param {Object} config The object to create the state store with.\n * @memberof Store\n */\n constructor (config) {\n // create reactive model\n this.model = Model.create(config);\n this._listeners = [];\n }\n\n /**\n * This method returns a plain JSON object\n * with all the fields in the state store.\n *\n * @return {Object} Serialized representation of state store.\n * @memberof Store\n */\n serialize () {\n return this.model.serialize();\n }\n\n /**\n * This method is used to update the value of a property in the state store.\n *\n * @param {string} propName The name of the property.\n * @param {number} value The new value of the property.\n * @memberof Store\n */\n commit (propName, value) {\n // check if appropriate enum has been used\n this.model.prop(propName, value);\n }\n\n /**\n * This method is used to register a callbacl that will execute\n * when one or more properties change.\n *\n * @param {string | Array} propNames name of property or array of props.\n * @param {Function} callBack The callback to execute.\n * @memberof Store\n */\n /* istanbul ignore next */registerChangeListener (propNames, callBack, instantCall) {\n let props = propNames;\n if (!Array.isArray(propNames)) {\n props = [propNames];\n }\n const fn = this.model.next(props, callBack, instantCall);\n this._listeners.push(fn);\n return this;\n }\n /**\n * This method is used to register a callbacl that will execute\n * when one or more properties change.\n *\n * @param {string | Array} propNames name of property or array of props.\n * @param {Function} callBack The callback to execute.\n * @memberof Store\n */\n /* istanbul ignore next */ registerImmediateListener (propNames, callBack, instantCall) {\n let props = propNames;\n if (!Array.isArray(propNames)) {\n props = [propNames];\n }\n const fn = this.model.on(props, callBack, instantCall);\n this._listeners.push(fn);\n return this;\n }\n /**\n * This method is used to get the name of the property\n * from the state store.\n *\n * @param {string} propName The name of the field in state store.\n * @return {any} The value of the field.\n * @memberof Store\n */\n get (propName) {\n return this.model.prop(propName);\n }\n\n /**\n * This method is used to register a computed property that is computed every time\n * the store value changes.\n *\n * @param {string} propName The name of the property to create.\n * @param {Function} callBack The function to execute when depemdent props change.\n * @memberof Store\n */\n computed (propName, callBack) {\n return this.model.calculatedProp(propName, callBack);\n }\n\n unsubscribeAll () {\n this._listeners.forEach(fn => fn());\n }\n}\n\n/**\n * Sanitize an input number / string mixed number. Currently dot in the no is not supported.\n *\n * @param {number | string} val pure number or string mixed number\n * @return {number | null} Number if it can be extracted. Otherwise null\n */\nconst intSanitizer = (val) => {\n const arr = val.toString().match(/(\\d+)(px)*/g);\n if (!arr) {\n // If only characters are passed\n return null;\n }\n\n return parseInt(arr[0], 10);\n};\n\n/**\n * Setter getter creator from config\n * Format\n * PROPERTRY_NAME: {\n * value: // default value of the property,\n * meta: {\n * typeCheck: // The setter value will be checked using this. If the value is function then the setter value\n * // is passed as args. (Optional)\n * typeExpected: // The output of typecheck action will be tested against this. Truthy value will set the\n * // value to the setter\n * sanitizaiton: // Need for sanitization before type is checked\n * }\n * }\n *\n * @param {Object} holder an empty object on which the getters and setters will be mounted\n * @param {Object} options options config based on which the getters and setters are determined.\n * @param {Hyperdis} model optional model to attach the property. If not sent new moel is created.\n * @return {Array} @todo\n */\nconst transactor = (holder, options, model) => {\n let conf;\n const store = model && model instanceof Model ? model : Model.create({});\n\n for (const prop in options) {\n if ({}.hasOwnProperty.call(options, prop)) {\n conf = options[prop];\n if (!store.prop(prop)) {\n store.append({ [prop]: conf.value });\n }\n holder[prop] = ((context, key, meta) => (...params) => {\n let val;\n let compareTo;\n const paramsLen = params.length;\n const prevVal = store.prop(prop);\n if (paramsLen) {\n // If parameters are passed then it's a setter\n const spreadParams = meta && meta.spreadParams;\n val = params;\n const values = [];\n if (meta) {\n for (let i = 0; i < paramsLen; i++) {\n val = params[i];\n const sanitization = meta.sanitization && (spreadParams ? meta.sanitization[i] :\n meta.sanitization);\n const typeCheck = meta.typeCheck && (spreadParams ? meta.typeCheck[i] : meta.typeCheck);\n if (sanitization && typeof sanitization === 'function') {\n // Sanitize if required\n val = sanitization(val, prevVal, holder);\n }\n\n if (typeCheck) {\n // Checking if a setter is valid\n if (typeof typeCheck === 'function') {\n let typeExpected = meta.typeExpected;\n if (typeExpected && spreadParams) {\n typeExpected = typeExpected[i];\n }\n if (typeExpected) {\n compareTo = typeExpected;\n } else {\n compareTo = true;\n }\n\n if (typeCheck(val) === compareTo) {\n values.push(val);\n }\n } else if (typeof typeCheck === 'string') {\n if (typeCheck === 'constructor') {\n const typeExpected = spreadParams ? meta.typeExpected[i] : meta.typeExpected;\n if (val && (val.constructor.name === typeExpected)) {\n values.push(val);\n }\n }\n } else {\n // context.prop(key, val);\n values.push(val);\n }\n } else {\n values.push(val);\n }\n }\n const preset = meta.preset;\n const oldValues = context.prop(key);\n preset && preset(values[0], holder);\n if (spreadParams) {\n oldValues.forEach((value, i) => {\n if (values[i] === undefined) {\n values[i] = value;\n }\n });\n }\n values.length && context.prop(key, spreadParams ? values : values[0]);\n } else {\n context.prop(key, spreadParams ? val : val[0]);\n }\n return holder;\n }\n // No parameters are passed hence its a getter\n return context.prop(key);\n })(store, prop, conf.meta);\n }\n }\n\n return [holder, store];\n};\n\n/**\n *\n *\n * @param {*} context\n * @param {*} props\n */\nconst generateGetterSetters = (context, props) => {\n Object.entries(props).forEach((propInfo) => {\n const prop = propInfo[0];\n const typeChecker = propInfo[1].typeChecker;\n const sanitization = propInfo[1].sanitization;\n const prototype = context.constructor.prototype;\n if (!(Object.hasOwnProperty.call(prototype, prop))) {\n context[prop] = (...params) => {\n if (params.length) {\n let value = params[0];\n if (sanitization) {\n value = sanitization(context, params[0]);\n }\n if (typeChecker && !typeChecker(value)) {\n return context[`_${prop}`];\n }\n context[`_${prop}`] = value;\n return context;\n } return context[`_${prop}`];\n };\n }\n });\n};\n\n/**\n *\n *\n * @param {*} arr\n * @param {*} prop\n */\nconst getArraySum = (arr, prop) => arr.reduce((total, elem) => {\n total += prop ? elem[prop] : elem;\n return total;\n}, 0);\n\n/**\n *\n *\n * @param {*} arr1\n * @param {*} arr2\n * @returns\n */\nconst arraysEqual = (arr1, arr2) => {\n if (arr1.length !== arr2.length) { return false; }\n for (let i = arr1.length; i >= 0; i--) {\n if (arr1[i] !== arr2[i]) { return false; }\n }\n\n return true;\n};\n\n/* eslint valid-typeof:0 */\n/**\n * Returns a validation function which can be used to validate variables against a type and value\n *\n * @param {any} type type of value that the object should have\n * @return {Object} validation function\n */\nconst isEqual = type => (oldVal, newVal) => {\n if (type === 'Array') {\n if (!oldVal) {\n return false;\n }\n return arraysEqual(oldVal, newVal);\n } else if (type === 'Object') {\n return Object.is(oldVal, newVal);\n } return oldVal === newVal;\n};\n\n/**\n * Description @todo\n *\n * @param {any} transactionModel @todo\n * @param {any} transactionEndpoint @todo\n * @param {any} transactionItems @todo\n * @return {any} @todo\n */\nconst enableChainedTransaction = (transactionModel, transactionEndpoint, transactionItems) =>\n transactionItems.forEach(item => transactionModel.on(item, ([, newVal]) => transactionEndpoint[item](newVal)));\n\n/**\n * Chceks if the element is istanceof HTMLElement\n *\n * @param {Object} elem any JS Object\n */\nconst isHTMLElem = elem => elem instanceof HTMLElement;\n\nconst ERROR_MSG = {\n INTERFACE_IMPL: 'Method not implemented'\n};\n\n/**\n * Merges the sink object in the source by recursively iterating through the object properties\n * @param {Object} source Source Object\n * @param {Object} sink Sink Object\n * @return {Object} Merged object\n */\nconst mergeRecursive = (source, sink) => {\n for (const prop in sink) {\n if (isSimpleObject(source[prop]) && isSimpleObject(sink[prop])) {\n mergeRecursive(source[prop], sink[prop]);\n } else if (sink[prop] instanceof Object && sink[prop].constructor === Object) {\n source[prop] = {};\n mergeRecursive(source[prop], sink[prop]);\n } else {\n source[prop] = sink[prop];\n }\n }\n return source;\n};\n\nconst interpolateArray = (data, fitCount) => {\n const linearInterpolate = function (before, after, atPoint) {\n return before + (after - before) * atPoint;\n };\n const newData = [];\n const springFactor = ((data.length - 1) / (fitCount - 1));\n newData[0] = data[0]; // for new allocation\n for (let i = 1; i < fitCount - 1; i++) {\n const tmp = i * springFactor;\n const before = (Math.floor(tmp)).toFixed();\n const after = (Math.ceil(tmp)).toFixed();\n const atPoint = tmp - before;\n newData[i] = linearInterpolate(data[before], data[after], atPoint);\n }\n newData[fitCount - 1] = data[data.length - 1]; // for new allocation\n return newData;\n};\n\n/**\n *\n *\n * @param {*} fn\n */\nconst nextFrame = (fn) => {\n setTimeout(() => {\n fn();\n }, 0);\n};\n\n/**\n *\n *\n * @param {*} angle\n */\nconst angleToRadian = angle => angle * Math.PI / 180;\n\n/**\n *\n *\n * @param {*} newName\n * @param {*} oldName\n */\nconst replaceCSSPrefix = () => {\n // @todo\n};\n\n/**\n * Gets the interpolator function from d3 color\n *\n */\nconst interpolator = () => interpolate;\n\n/**\n * Gets the number interpolator from d3 color\n *\n */\nconst numberInterpolator = () => interpolateNumber;\n\n/**\n * Gets the rgb interpolator from d3 color\n *\n */\nconst colorInterpolator = () => interpolateRgb;\n\n/**\n * Gets the hsl interpolator from d3 color\n *\n */\nconst hslInterpolator = () => interpolateHslLong;\n\nconst transformColors = () => ({\n color,\n rgb,\n hsl\n});\n\n/**\n * Gets the piecewise interpolator from d3 color\n *\n */\nconst piecewiseInterpolator = () => piecewise;\n\nfunction hue2rgb (p, q, t) {\n if (t < 0) t += 1;\n if (t > 1) t -= 1;\n if (t < 1 / 6) return p + (q - p) * 6 * t;\n if (t < 1 / 2) return q;\n if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n return p;\n}\n\n /**\n * Converts an HSL color value to RGB. Conversion formula\n * adapted from http://en.wikipedia.org/wiki/HSL_color_space.\n * Assumes h, s, and l are contained in the set [0, 1] and\n * returns r, g, and b in the set [0, 255].\n *\n * @param Number h The hue\n * @param Number s The saturation\n * @param Number l The lightness\n * @return Array The RGB representation\n */\nconst hslToRgb = (h, s, l, a = 1) => {\n let r;\n let g;\n let b;\n\n if (s === 0) {\n r = g = b = l; // achromatic\n } else {\n const q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n const p = 2 * l - q;\n\n r = hue2rgb(p, q, h + 1 / 3);\n g = hue2rgb(p, q, h);\n b = hue2rgb(p, q, h - 1 / 3);\n }\n\n return [r * 255, g * 255, b * 255, a];\n};\n\n /**\n * Converts an RGB color value to HSV. Conversion formula\n * adapted from http://en.wikipedia.org/wiki/HSV_color_space.\n * Assumes r, g, and b are contained in the set [0, 255] and\n * returns h, s, and v in the set [0, 1].\n *\n * @param Number r The red color value\n * @param Number g The green color value\n * @param Number b The blue color value\n * @return Array The HSV representation\n */\nconst rgbToHsv = (r, g, b, a = 1) => {\n r = +r; g = +g; b = +b; a = +a;\n r /= 255; g /= 255; b /= 255;\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n let h;\n let s;\n const l = (max + min) / 2;\n\n if (max === min) {\n h = s = 0; // achromatic\n } else {\n const d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n switch (max) {\n case r: h = (g - b) / d + (g < b ? 6 : 0); break;\n case g: h = (b - r) / d + 2; break;\n case b: h = (r - g) / d + 4; break;\n default: break;\n }\n h /= 6;\n }\n return [h, s, l, a];\n};\n\n /**\n * Converts an HSV color value to RGB. Conversion formula\n * adapted from http://en.wikipedia.org/wiki/HSV_color_space.\n * Assumes h, s, and v are contained in the set [0, 1] and\n * returns r, g, and b in the set [0, 255].\n *\n * @param Number h The hue\n * @param Number s The saturation\n * @param Number v The value\n * @return Array The RGB representation\n */\nconst hsvToRgb = (h, s, v, a = 1) => {\n let r;\n let g;\n let b;\n\n const i = Math.floor(h * 6);\n const f = h * 6 - i;\n const p = v * (1 - s);\n const q = v * (1 - f * s);\n const t = v * (1 - (1 - f) * s);\n\n switch (i % 6) {\n case 0: r = v; g = t; b = p; break;\n case 1: r = q; g = v; b = p; break;\n case 2: r = p; g = v; b = t; break;\n case 3: r = p; g = q; b = v; break;\n case 4: r = t; g = p; b = v; break;\n case 5: r = v; g = p; b = q; break;\n default: break;\n }\n\n return [r * 255, g * 255, b * 255, a];\n};\n\nconst hexToHsv = (hex) => {\n const result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\n\n const r = parseInt(result[1], 16);\n const g = parseInt(result[2], 16);\n const b = parseInt(result[3], 16);\n const a = result[4] ? parseInt(result[4], 16) : 1;\n return rgbToHsv(r, g, b, a);\n};\n\nconst detectColor = (col) => {\n const matchRgb = /rgb\\((\\d{1,3}), (\\d{1,3}), (\\d{1,3})\\)/;\n const matchHsl = /hsl\\((\\d+),\\s*([\\d.]+)%,\\s*([\\d.]+)%\\)/g;\n\n // Source : https://gist.github.com/sethlopezme/d072b945969a3cc2cc11\n // eslint-disable-next-line\n const matchRgba = /rgba?\\(((25[0-5]|2[0-4]\\d|1\\d{1,2}|\\d\\d?)\\s*,\\s*?){2}(25[0-5]|2[0-4]\\d|1\\d{1,2}|\\d\\d?)\\s*,?\\s*([01]\\.?\\d*?)?\\)/;\n // eslint-disable-next-line\n const matchHsla = /^hsla\\((0|360|35\\d|3[0-4]\\d|[12]\\d\\d|0?\\d?\\d),(0|100|\\d{1,2})%,(0|100|\\d{1,2})%,(0?\\.\\d|1(\\.0)?)\\)$/;\n const matchHex = /^#([0-9a-f]{3}){1,2}$/i;\n\n if (matchRgb.test(col) || matchRgba.test(col)) {\n return 'rgb';\n } else if (matchHsl.test(col) || matchHsla.test(col)) {\n return 'hsl';\n } else if (matchHex.test(col)) {\n return 'hex';\n } return col;\n};\n\n/**\n *\n *\n * @param {*} model\n * @param {*} propModel\n * @returns\n */\nconst filterPropagationModel = (model, propModel, measures) => {\n const { data, schema } = propModel.getData();\n let filteredModel;\n if (schema.length) {\n const fieldMap = model.getFieldsConfig();\n filteredModel = model.select((fields) => {\n const include = data.some(row => schema.every((propField, idx) => {\n if (!measures && (!(propField.name in fieldMap) ||\n fieldMap[propField.name].def.type === FieldType.MEASURE)) {\n return true;\n }\n return row[idx] === fields[propField.name].valueOf();\n }));\n return include;\n }, {\n saveChild: false\n });\n } else {\n filteredModel = propModel;\n }\n\n return filteredModel;\n};\n\nconst assembleModelFromIdentifiers = (model, identifiers) => {\n let schema = [];\n let data;\n const fieldMap = model.getFieldsConfig();\n if (identifiers.length) {\n const fields = identifiers[0];\n const len = fields.length;\n for (let i = 0; i < len; i++) {\n const field = fields[i];\n const fieldObj = fieldMap[field] && Object.assign({}, fieldMap[field].def);\n if (fieldObj) {\n schema.push(Object.assign(fieldObj));\n }\n }\n\n data = [];\n const header = identifiers[0];\n for (let i = 1; i < identifiers.length; i += 1) {\n const vals = identifiers[i];\n const temp = {};\n vals.forEach((fieldVal, cIdx) => {\n temp[header[cIdx]] = fieldVal;\n });\n data.push(temp);\n }\n } else {\n data = [];\n schema = [];\n }\n\n return new model.constructor(data, schema);\n};\n\n/**\n *\n *\n * @param {*} dataModel\n * @param {*} criteria\n * @returns\n */\nconst getDataModelFromRange = (dataModel, criteria, mode) => {\n if (criteria === null) {\n return null;\n }\n const selFields = Object.keys(criteria);\n const selFn = fields => selFields.every((field) => {\n const val = fields[field].value;\n const range = criteria[field][0] instanceof Array ? criteria[field][0] : criteria[field];\n if (typeof range[0] === 'string') {\n return range.find(d => d === val) !== undefined;\n }\n return range ? val >= range[0] && val <= range[1] : true;\n });\n\n return dataModel.select(selFn, {\n saveChild: false,\n mode\n });\n};\n\n/**\n *\n *\n * @param {*} dataModel\n * @param {*} identifiers\n * @returns\n */\nconst getDataModelFromIdentifiers = (dataModel, identifiers, mode) => {\n let filteredDataModel;\n if (identifiers instanceof Array) {\n const fieldsConfig = dataModel.getFieldsConfig();\n\n const dataArr = identifiers.slice(1, identifiers.length);\n if (identifiers instanceof Function) {\n filteredDataModel = identifiers(dataModel, {}, false);\n } else if (identifiers instanceof Array && identifiers[0].length) {\n const filteredSchema = identifiers[0].filter(d => d in fieldsConfig);\n filteredDataModel = dataModel.select((fields) => {\n let include = true;\n filteredSchema.forEach((propField, idx) => {\n const value = fields[propField].valueOf();\n const index = dataArr.findIndex(d => d[idx] === value);\n include = include && index !== -1;\n });\n return include;\n }, {\n saveChild: false,\n mode\n });\n }\n } else {\n filteredDataModel = getDataModelFromRange(dataModel, identifiers, mode);\n }\n return filteredDataModel;\n};\n\n/**\n *\n *\n * @param {*} context\n * @param {*} listenerMap\n */\nconst registerListeners = (context, listenerMap) => {\n const propListenerMap = listenerMap(context);\n for (const key in propListenerMap) {\n if ({}.hasOwnProperty.call(propListenerMap, key)) {\n const mapObj = propListenerMap[key];\n const propType = mapObj.type;\n const props = mapObj.props;\n const listenerFn = mapObj.listener;\n context.store()[propType](props, listenerFn);\n }\n }\n};\n\nconst isValidValue = value => !isNaN(value) && value !== -Infinity && value !== Infinity;\n/**\n *\n *\n * @param {*} obj\n * @param {*} fields\n * @returns\n */\nconst getObjProp = (obj, ...fields) => {\n if (obj === undefined || obj === null) {\n return obj;\n }\n let retObj = obj;\n for (let i = 0, len = fields.length; i < len; i++) {\n retObj = retObj[fields[i]];\n if (retObj === undefined || retObj === null) {\n break;\n }\n }\n return retObj;\n};\n\n/**\n *\n *\n * @param {*} str\n * @returns\n */\nconst escapeHTML = (str) => {\n const htmlEscapes = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": ''',\n '/': '/'\n };\n const htmlEscaper = /[&<>\"'/]/g;\n return (`${str}`).replace(htmlEscaper, match => htmlEscapes[match]);\n};\n\n/**\n *\n *\n * @param {*} arr\n */\nconst transposeArray = arr => arr[0].map((col, i) => arr.map(row => row[i]));\nconst toArray = arr => (arr instanceof Array ? arr : [arr]);\nconst extendsClass = (cls, extendsFrom, found) => {\n if (!cls) {\n return false;\n }\n const prototype = cls.prototype;\n if (prototype instanceof extendsFrom) {\n found = true;\n } else {\n found = extendsClass(prototype, extendsFrom, found);\n }\n return found;\n};\n\n/**\n *\n * @param {*} dm1\n * @param {*} dm2\n */\nconst concatModels = (dm1, dm2) => {\n const dataObj1 = dm1.getData();\n const dataObj2 = dm2.getData();\n const data1 = dataObj1.data;\n const data2 = dataObj2.data;\n const schema1 = dataObj1.schema;\n const schema2 = dataObj2.schema;\n const tuples1 = {};\n const tuples2 = {};\n const commonTuples = {};\n for (let i = 0; i < data1.length; i++) {\n for (let ii = 0; ii < data2.length; ii++) {\n const row1 = data1[i];\n const row2 = data2[ii];\n const dim1Values = row1.filter((d, idx) => schema1[idx].type === FieldType.DIMENSION);\n const dim2Values = row2.filter((d, idx) => schema2[idx].type === FieldType.DIMENSION);\n const allDimSame = dim1Values.every(value => dim2Values.indexOf(value) !== -1);\n if (allDimSame) {\n const key = dim1Values.join();\n !commonTuples[key] && (commonTuples[key] = {});\n row1.forEach((value, idx) => {\n commonTuples[key][schema1[idx].name] = value;\n });\n row2.forEach((value, idx) => {\n commonTuples[key][schema2[idx].name] = value;\n });\n } else {\n const dm1Key = dim1Values.join();\n const dm2Key = dim2Values.join();\n if (!commonTuples[dm1Key] && !commonTuples[dm2Key]) {\n !tuples1[dm1Key] && (tuples1[dm1Key] = {});\n !tuples2[dm2Key] && (tuples2[dm2Key] = {});\n row1.forEach((value, idx) => {\n tuples1[dm1Key][schema1[idx].name] = value;\n });\n row2.forEach((value, idx) => {\n tuples2[dm2Key][schema2[idx].name] = value;\n });\n }\n }\n }\n }\n\n const commonSchema = [...schema1, ...schema2.filter(s2 => schema1.findIndex(s1 => s1.name === s2.name) === -1)];\n const data = [...Object.values(tuples1), ...Object.values(tuples2), ...Object.values(commonTuples)];\n return [data, commonSchema];\n};\n\nconst getSymbol = type => symbol().type(symbolFns[type]);\n\nconst stackOrders = {\n [STACK_CONFIG.ORDER_NONE]: stackOrderNone,\n [STACK_CONFIG.ORDER_ASCENDING]: stackOrderAscending,\n [STACK_CONFIG.ORDER_DESCENDING]: stackOrderDescending\n};\nconst stackOffsets = {\n [STACK_CONFIG.OFFSET_DIVERGING]: stackOffsetDiverging,\n [STACK_CONFIG.OFFSET_NONE]: stackOffsetNone,\n [STACK_CONFIG.OFFSET_EXPAND]: stackOffsetExpand,\n [STACK_CONFIG.OFFSET_WIGGLE]: stackOffsetWiggle\n};\n\n// eslint-disable-next-line require-jsdoc\nconst stack = params => d3Stack().keys(params.keys).offset(stackOffsets[params.offset])\n .order(stackOrders[params.order])(params.data);\n\n/**\n * Groups the data into a hierarchical tree structure based on one or more fields.\n * @param { Object } params Configuration properties for nesting data\n * @param { Array. } params.data Data which needs to be grouped\n * @param { Array. } params.keys Field indices by which the data will be grouped\n * @return { Array. } Grouped data array\n */\nconst nestCollection = (params) => {\n const nestFn = nest();\n params.keys.forEach(key => nestFn.key(d => d[key]));\n return nestFn.entries(params.data);\n};\n\nconst pathInterpolators = {\n curveLinear,\n curveStepAfter,\n curveStepBefore,\n curveStep,\n curveCatmullRom,\n stepAfter: curveStepAfter,\n catmullRom: curveCatmullRom,\n step: curveStep,\n stepBefore: curveStepBefore,\n linear: curveLinear\n};\n\nconst Symbols = {\n axisLeft,\n axisRight,\n axisTop,\n axisBottom,\n line,\n area,\n pie,\n arc,\n nest\n};\n\nconst Scales = {\n band: scaleBand\n};\n\nconst getSmallestDiff = (points) => {\n points = points.sort((a, b) => a - b);\n let minDiff = points[1] - points[0];\n for (let i = 2; i < points.length; i++) {\n minDiff = Math.min(minDiff, points[i] - points[i - 1]);\n }\n\n return minDiff;\n};\n\nconst require = (lookupWhat, lookupDetails) => ({\n resolvable: (store) => {\n const lookupTarget = store[lookupWhat];\n const depArr = lookupDetails.slice(0, lookupDetails.length - 1);\n const fn = lookupDetails[lookupDetails.length - 1]; // fn\n\n const deps = depArr.map(str => lookupTarget[str]);\n return {\n fn: fn(...deps),\n depArr\n };\n }\n});\n\nconst nextAnimFrame = window.requestAnimationFrame || window.webkitRequestAnimationFrame ||\n window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame ||\n function (callback) {\n setTimeout(callback, 16);\n };\n\nexport {\n require,\n Scales,\n Symbols,\n pathInterpolators,\n stack,\n nestCollection,\n getSymbol,\n transformColors,\n detectColor,\n hexToHsv,\n hslToRgb,\n rgbToHsv,\n hsvToRgb,\n concatModels,\n toArray,\n angleToRadian,\n escapeHTML,\n generateGetterSetters,\n getArraySum,\n interpolator,\n piecewiseInterpolator,\n getDataModelFromIdentifiers,\n getDataModelFromRange,\n colorInterpolator,\n numberInterpolator,\n ERROR_MSG,\n reqAnimFrame,\n nextAnimFrame,\n filterPropagationModel,\n transposeArray,\n cancelAnimFrame,\n getMax,\n getMin,\n getDomainFromData,\n getUniqueId,\n mergeRecursive,\n unionDomain,\n symbolFns,\n easeFns,\n clone,\n isEqual,\n interpolateArray,\n getMinPoint,\n defaultValue,\n getMaxPoint,\n getClosestIndexOf,\n Voronoi,\n checkExistence,\n sanitizeIP,\n getMinDiff,\n capitalizeFirst,\n getWindow,\n getQualifiedClassName,\n Store,\n getDependencyOrder,\n objectIterator,\n intSanitizer,\n transactor,\n enableChainedTransaction,\n isHTMLElem,\n isSimpleObject,\n nextFrame,\n registerListeners,\n replaceCSSPrefix,\n getObjProp,\n extendsClass,\n assembleModelFromIdentifiers,\n isValidValue,\n hslInterpolator,\n getSmallestDiff\n};\n","export function linear(t) {\n return +t;\n}\n","export function circleIn(t) {\n return 1 - Math.sqrt(1 - t * t);\n}\n\nexport function circleOut(t) {\n return Math.sqrt(1 - --t * t);\n}\n\nexport function circleInOut(t) {\n return ((t *= 2) <= 1 ? 1 - Math.sqrt(1 - t * t) : Math.sqrt(1 - (t -= 2) * t) + 1) / 2;\n}\n","import {path} from \"d3-path\";\nimport circle from \"./symbol/circle\";\nimport cross from \"./symbol/cross\";\nimport diamond from \"./symbol/diamond\";\nimport star from \"./symbol/star\";\nimport square from \"./symbol/square\";\nimport triangle from \"./symbol/triangle\";\nimport wye from \"./symbol/wye\";\nimport constant from \"./constant\";\n\nexport var symbols = [\n circle,\n cross,\n diamond,\n square,\n star,\n triangle,\n wye\n];\n\nexport default function() {\n var type = constant(circle),\n size = constant(64),\n context = null;\n\n function symbol() {\n var buffer;\n if (!context) context = buffer = path();\n type.apply(this, arguments).draw(context, +size.apply(this, arguments));\n if (buffer) return context = null, buffer + \"\" || null;\n }\n\n symbol.type = function(_) {\n return arguments.length ? (type = typeof _ === \"function\" ? _ : constant(_), symbol) : type;\n };\n\n symbol.size = function(_) {\n return arguments.length ? (size = typeof _ === \"function\" ? _ : constant(+_), symbol) : size;\n };\n\n symbol.context = function(_) {\n return arguments.length ? (context = _ == null ? null : _, symbol) : context;\n };\n\n return symbol;\n}\n","export const ORDER_ASCENDING = 'ascending';\nexport const ORDER_DESCENDING = 'descending';\nexport const ORDER_NONE = 'none';\nexport const OFFSET_DIVERGING = 'diverging';\nexport const OFFSET_NONE = 'none';\nexport const OFFSET_EXPAND = 'expand';\nexport const OFFSET_WIGGLE = 'wiggle';\n","import ascending from \"./ascending\";\n\nexport default function(series) {\n return ascending(series).reverse();\n}\n","export default function(series, order) {\n if (!((n = series.length) > 1)) return;\n for (var i, j = 0, d, dy, yp, yn, n, m = series[order[0]].length; j < m; ++j) {\n for (yp = yn = 0, i = 0; i < n; ++i) {\n if ((dy = (d = series[order[i]][j])[1] - d[0]) >= 0) {\n d[0] = yp, d[1] = yp += dy;\n } else if (dy < 0) {\n d[1] = yn, d[0] = yn += dy;\n } else {\n d[0] = yp;\n }\n }\n }\n}\n","import none from \"./none\";\n\nexport default function(series, order) {\n if (!((n = series.length) > 0)) return;\n for (var i, n, j = 0, m = series[0].length, y; j < m; ++j) {\n for (y = i = 0; i < n; ++i) y += series[i][j][1] || 0;\n if (y) for (i = 0; i < n; ++i) series[i][j][1] /= y;\n }\n none(series, order);\n}\n","import none from \"./none\";\n\nexport default function(series, order) {\n if (!((n = series.length) > 0) || !((m = (s0 = series[order[0]]).length) > 0)) return;\n for (var y = 0, j = 1, s0, m, n; j < m; ++j) {\n for (var i = 0, s1 = 0, s2 = 0; i < n; ++i) {\n var si = series[order[i]],\n sij0 = si[j][1] || 0,\n sij1 = si[j - 1][1] || 0,\n s3 = (sij0 - sij1) / 2;\n for (var k = 0; k < i; ++k) {\n var sk = series[order[k]],\n skj0 = sk[j][1] || 0,\n skj1 = sk[j - 1][1] || 0;\n s3 += skj0 - skj1;\n }\n s1 += sij0, s2 += s3 * sij0;\n }\n s0[j - 1][1] += s0[j - 1][0] = y;\n if (s1) y -= s2 / s1;\n }\n s0[j - 1][1] += s0[j - 1][0] = y;\n none(series, order);\n}\n","import constant from \"./constant\";\nimport descending from \"./descending\";\nimport identity from \"./identity\";\nimport {tau} from \"./math\";\n\nexport default function() {\n var value = identity,\n sortValues = descending,\n sort = null,\n startAngle = constant(0),\n endAngle = constant(tau),\n padAngle = constant(0);\n\n function pie(data) {\n var i,\n n = data.length,\n j,\n k,\n sum = 0,\n index = new Array(n),\n arcs = new Array(n),\n a0 = +startAngle.apply(this, arguments),\n da = Math.min(tau, Math.max(-tau, endAngle.apply(this, arguments) - a0)),\n a1,\n p = Math.min(Math.abs(da) / n, padAngle.apply(this, arguments)),\n pa = p * (da < 0 ? -1 : 1),\n v;\n\n for (i = 0; i < n; ++i) {\n if ((v = arcs[index[i] = i] = +value(data[i], i, data)) > 0) {\n sum += v;\n }\n }\n\n // Optionally sort the arcs by previously-computed values or by data.\n if (sortValues != null) index.sort(function(i, j) { return sortValues(arcs[i], arcs[j]); });\n else if (sort != null) index.sort(function(i, j) { return sort(data[i], data[j]); });\n\n // Compute the arcs! They are stored in the original data's order.\n for (i = 0, k = sum ? (da - n * pa) / sum : 0; i < n; ++i, a0 = a1) {\n j = index[i], v = arcs[j], a1 = a0 + (v > 0 ? v * k : 0) + pa, arcs[j] = {\n data: data[j],\n index: i,\n value: v,\n startAngle: a0,\n endAngle: a1,\n padAngle: p\n };\n }\n\n return arcs;\n }\n\n pie.value = function(_) {\n return arguments.length ? (value = typeof _ === \"function\" ? _ : constant(+_), pie) : value;\n };\n\n pie.sortValues = function(_) {\n return arguments.length ? (sortValues = _, sort = null, pie) : sortValues;\n };\n\n pie.sort = function(_) {\n return arguments.length ? (sort = _, sortValues = null, pie) : sort;\n };\n\n pie.startAngle = function(_) {\n return arguments.length ? (startAngle = typeof _ === \"function\" ? _ : constant(+_), pie) : startAngle;\n };\n\n pie.endAngle = function(_) {\n return arguments.length ? (endAngle = typeof _ === \"function\" ? _ : constant(+_), pie) : endAngle;\n };\n\n pie.padAngle = function(_) {\n return arguments.length ? (padAngle = typeof _ === \"function\" ? _ : constant(+_), pie) : padAngle;\n };\n\n return pie;\n}\n","export var xhtml = \"http://www.w3.org/1999/xhtml\";\n\nexport default {\n svg: \"http://www.w3.org/2000/svg\",\n xhtml: xhtml,\n xlink: \"http://www.w3.org/1999/xlink\",\n xml: \"http://www.w3.org/XML/1998/namespace\",\n xmlns: \"http://www.w3.org/2000/xmlns/\"\n};\n","import namespaces from \"./namespaces\";\n\nexport default function(name) {\n var prefix = name += \"\", i = prefix.indexOf(\":\");\n if (i >= 0 && (prefix = name.slice(0, i)) !== \"xmlns\") name = name.slice(i + 1);\n return namespaces.hasOwnProperty(prefix) ? {space: namespaces[prefix], local: name} : name;\n}\n","import namespace from \"./namespace\";\nimport {xhtml} from \"./namespaces\";\n\nfunction creatorInherit(name) {\n return function() {\n var document = this.ownerDocument,\n uri = this.namespaceURI;\n return uri === xhtml && document.documentElement.namespaceURI === xhtml\n ? document.createElement(name)\n : document.createElementNS(uri, name);\n };\n}\n\nfunction creatorFixed(fullname) {\n return function() {\n return this.ownerDocument.createElementNS(fullname.space, fullname.local);\n };\n}\n\nexport default function(name) {\n var fullname = namespace(name);\n return (fullname.local\n ? creatorFixed\n : creatorInherit)(fullname);\n}\n","function none() {}\n\nexport default function(selector) {\n return selector == null ? none : function() {\n return this.querySelector(selector);\n };\n}\n","function empty() {\n return [];\n}\n\nexport default function(selector) {\n return selector == null ? empty : function() {\n return this.querySelectorAll(selector);\n };\n}\n","var matcher = function(selector) {\n return function() {\n return this.matches(selector);\n };\n};\n\nif (typeof document !== \"undefined\") {\n var element = document.documentElement;\n if (!element.matches) {\n var vendorMatches = element.webkitMatchesSelector\n || element.msMatchesSelector\n || element.mozMatchesSelector\n || element.oMatchesSelector;\n matcher = function(selector) {\n return function() {\n return vendorMatches.call(this, selector);\n };\n };\n }\n}\n\nexport default matcher;\n","export default function(update) {\n return new Array(update.length);\n}\n","import sparse from \"./sparse\";\nimport {Selection} from \"./index\";\n\nexport default function() {\n return new Selection(this._enter || this._groups.map(sparse), this._parents);\n}\n\nexport function EnterNode(parent, datum) {\n this.ownerDocument = parent.ownerDocument;\n this.namespaceURI = parent.namespaceURI;\n this._next = null;\n this._parent = parent;\n this.__data__ = datum;\n}\n\nEnterNode.prototype = {\n constructor: EnterNode,\n appendChild: function(child) { return this._parent.insertBefore(child, this._next); },\n insertBefore: function(child, next) { return this._parent.insertBefore(child, next); },\n querySelector: function(selector) { return this._parent.querySelector(selector); },\n querySelectorAll: function(selector) { return this._parent.querySelectorAll(selector); }\n};\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","import {Selection} from \"./index\";\nimport {EnterNode} from \"./enter\";\nimport constant from \"../constant\";\n\nvar keyPrefix = \"$\"; // Protect against keys like “__proto__”.\n\nfunction bindIndex(parent, group, enter, update, exit, data) {\n var i = 0,\n node,\n groupLength = group.length,\n dataLength = data.length;\n\n // Put any non-null nodes that fit into update.\n // Put any null nodes into enter.\n // Put any remaining data into enter.\n for (; i < dataLength; ++i) {\n if (node = group[i]) {\n node.__data__ = data[i];\n update[i] = node;\n } else {\n enter[i] = new EnterNode(parent, data[i]);\n }\n }\n\n // Put any non-null nodes that don’t fit into exit.\n for (; i < groupLength; ++i) {\n if (node = group[i]) {\n exit[i] = node;\n }\n }\n}\n\nfunction bindKey(parent, group, enter, update, exit, data, key) {\n var i,\n node,\n nodeByKeyValue = {},\n groupLength = group.length,\n dataLength = data.length,\n keyValues = new Array(groupLength),\n keyValue;\n\n // Compute the key for each node.\n // If multiple nodes have the same key, the duplicates are added to exit.\n for (i = 0; i < groupLength; ++i) {\n if (node = group[i]) {\n keyValues[i] = keyValue = keyPrefix + key.call(node, node.__data__, i, group);\n if (keyValue in nodeByKeyValue) {\n exit[i] = node;\n } else {\n nodeByKeyValue[keyValue] = node;\n }\n }\n }\n\n // Compute the key for each datum.\n // If there a node associated with this key, join and add it to update.\n // If there is not (or the key is a duplicate), add it to enter.\n for (i = 0; i < dataLength; ++i) {\n keyValue = keyPrefix + key.call(parent, data[i], i, data);\n if (node = nodeByKeyValue[keyValue]) {\n update[i] = node;\n node.__data__ = data[i];\n nodeByKeyValue[keyValue] = null;\n } else {\n enter[i] = new EnterNode(parent, data[i]);\n }\n }\n\n // Add any remaining nodes that were not bound to data to exit.\n for (i = 0; i < groupLength; ++i) {\n if ((node = group[i]) && (nodeByKeyValue[keyValues[i]] === node)) {\n exit[i] = node;\n }\n }\n}\n\nexport default function(value, key) {\n if (!value) {\n data = new Array(this.size()), j = -1;\n this.each(function(d) { data[++j] = d; });\n return data;\n }\n\n var bind = key ? bindKey : bindIndex,\n parents = this._parents,\n groups = this._groups;\n\n if (typeof value !== \"function\") value = constant(value);\n\n for (var m = groups.length, update = new Array(m), enter = new Array(m), exit = new Array(m), j = 0; j < m; ++j) {\n var parent = parents[j],\n group = groups[j],\n groupLength = group.length,\n data = value.call(parent, parent && parent.__data__, j, parents),\n dataLength = data.length,\n enterGroup = enter[j] = new Array(dataLength),\n updateGroup = update[j] = new Array(dataLength),\n exitGroup = exit[j] = new Array(groupLength);\n\n bind(parent, group, enterGroup, updateGroup, exitGroup, data, key);\n\n // Now connect the enter nodes to their following update node, such that\n // appendChild can insert the materialized enter node before this node,\n // rather than at the end of the parent node.\n for (var i0 = 0, i1 = 0, previous, next; i0 < dataLength; ++i0) {\n if (previous = enterGroup[i0]) {\n if (i0 >= i1) i1 = i0 + 1;\n while (!(next = updateGroup[i1]) && ++i1 < dataLength);\n previous._next = next || null;\n }\n }\n }\n\n update = new Selection(update, parents);\n update._enter = enter;\n update._exit = exit;\n return update;\n}\n","import {Selection} from \"./index\";\n\nexport default function(compare) {\n if (!compare) compare = ascending;\n\n function compareNode(a, b) {\n return a && b ? compare(a.__data__, b.__data__) : !a - !b;\n }\n\n for (var groups = this._groups, m = groups.length, sortgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, sortgroup = sortgroups[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n sortgroup[i] = node;\n }\n }\n sortgroup.sort(compareNode);\n }\n\n return new Selection(sortgroups, this._parents).order();\n}\n\nfunction ascending(a, b) {\n return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","import namespace from \"../namespace\";\n\nfunction attrRemove(name) {\n return function() {\n this.removeAttribute(name);\n };\n}\n\nfunction attrRemoveNS(fullname) {\n return function() {\n this.removeAttributeNS(fullname.space, fullname.local);\n };\n}\n\nfunction attrConstant(name, value) {\n return function() {\n this.setAttribute(name, value);\n };\n}\n\nfunction attrConstantNS(fullname, value) {\n return function() {\n this.setAttributeNS(fullname.space, fullname.local, value);\n };\n}\n\nfunction attrFunction(name, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.removeAttribute(name);\n else this.setAttribute(name, v);\n };\n}\n\nfunction attrFunctionNS(fullname, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.removeAttributeNS(fullname.space, fullname.local);\n else this.setAttributeNS(fullname.space, fullname.local, v);\n };\n}\n\nexport default function(name, value) {\n var fullname = namespace(name);\n\n if (arguments.length < 2) {\n var node = this.node();\n return fullname.local\n ? node.getAttributeNS(fullname.space, fullname.local)\n : node.getAttribute(fullname);\n }\n\n return this.each((value == null\n ? (fullname.local ? attrRemoveNS : attrRemove) : (typeof value === \"function\"\n ? (fullname.local ? attrFunctionNS : attrFunction)\n : (fullname.local ? attrConstantNS : attrConstant)))(fullname, value));\n}\n","export default function(node) {\n return (node.ownerDocument && node.ownerDocument.defaultView) // node is a Node\n || (node.document && node) // node is a Window\n || node.defaultView; // node is a Document\n}\n","import defaultView from \"../window\";\n\nfunction styleRemove(name) {\n return function() {\n this.style.removeProperty(name);\n };\n}\n\nfunction styleConstant(name, value, priority) {\n return function() {\n this.style.setProperty(name, value, priority);\n };\n}\n\nfunction styleFunction(name, value, priority) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.style.removeProperty(name);\n else this.style.setProperty(name, v, priority);\n };\n}\n\nexport default function(name, value, priority) {\n return arguments.length > 1\n ? this.each((value == null\n ? styleRemove : typeof value === \"function\"\n ? styleFunction\n : styleConstant)(name, value, priority == null ? \"\" : priority))\n : styleValue(this.node(), name);\n}\n\nexport function styleValue(node, name) {\n return node.style.getPropertyValue(name)\n || defaultView(node).getComputedStyle(node, null).getPropertyValue(name);\n}\n","function classArray(string) {\n return string.trim().split(/^|\\s+/);\n}\n\nfunction classList(node) {\n return node.classList || new ClassList(node);\n}\n\nfunction ClassList(node) {\n this._node = node;\n this._names = classArray(node.getAttribute(\"class\") || \"\");\n}\n\nClassList.prototype = {\n add: function(name) {\n var i = this._names.indexOf(name);\n if (i < 0) {\n this._names.push(name);\n this._node.setAttribute(\"class\", this._names.join(\" \"));\n }\n },\n remove: function(name) {\n var i = this._names.indexOf(name);\n if (i >= 0) {\n this._names.splice(i, 1);\n this._node.setAttribute(\"class\", this._names.join(\" \"));\n }\n },\n contains: function(name) {\n return this._names.indexOf(name) >= 0;\n }\n};\n\nfunction classedAdd(node, names) {\n var list = classList(node), i = -1, n = names.length;\n while (++i < n) list.add(names[i]);\n}\n\nfunction classedRemove(node, names) {\n var list = classList(node), i = -1, n = names.length;\n while (++i < n) list.remove(names[i]);\n}\n\nfunction classedTrue(names) {\n return function() {\n classedAdd(this, names);\n };\n}\n\nfunction classedFalse(names) {\n return function() {\n classedRemove(this, names);\n };\n}\n\nfunction classedFunction(names, value) {\n return function() {\n (value.apply(this, arguments) ? classedAdd : classedRemove)(this, names);\n };\n}\n\nexport default function(name, value) {\n var names = classArray(name + \"\");\n\n if (arguments.length < 2) {\n var list = classList(this.node()), i = -1, n = names.length;\n while (++i < n) if (!list.contains(names[i])) return false;\n return true;\n }\n\n return this.each((typeof value === \"function\"\n ? classedFunction : value\n ? classedTrue\n : classedFalse)(names, value));\n}\n","function textRemove() {\n this.textContent = \"\";\n}\n\nfunction textConstant(value) {\n return function() {\n this.textContent = value;\n };\n}\n\nfunction textFunction(value) {\n return function() {\n var v = value.apply(this, arguments);\n this.textContent = v == null ? \"\" : v;\n };\n}\n\nexport default function(value) {\n return arguments.length\n ? this.each(value == null\n ? textRemove : (typeof value === \"function\"\n ? textFunction\n : textConstant)(value))\n : this.node().textContent;\n}\n","function htmlRemove() {\n this.innerHTML = \"\";\n}\n\nfunction htmlConstant(value) {\n return function() {\n this.innerHTML = value;\n };\n}\n\nfunction htmlFunction(value) {\n return function() {\n var v = value.apply(this, arguments);\n this.innerHTML = v == null ? \"\" : v;\n };\n}\n\nexport default function(value) {\n return arguments.length\n ? this.each(value == null\n ? htmlRemove : (typeof value === \"function\"\n ? htmlFunction\n : htmlConstant)(value))\n : this.node().innerHTML;\n}\n","function raise() {\n if (this.nextSibling) this.parentNode.appendChild(this);\n}\n\nexport default function() {\n return this.each(raise);\n}\n","function lower() {\n if (this.previousSibling) this.parentNode.insertBefore(this, this.parentNode.firstChild);\n}\n\nexport default function() {\n return this.each(lower);\n}\n","import creator from \"../creator\";\nimport selector from \"../selector\";\n\nfunction constantNull() {\n return null;\n}\n\nexport default function(name, before) {\n var create = typeof name === \"function\" ? name : creator(name),\n select = before == null ? constantNull : typeof before === \"function\" ? before : selector(before);\n return this.select(function() {\n return this.insertBefore(create.apply(this, arguments), select.apply(this, arguments) || null);\n });\n}\n","function remove() {\n var parent = this.parentNode;\n if (parent) parent.removeChild(this);\n}\n\nexport default function() {\n return this.each(remove);\n}\n","function selection_cloneShallow() {\n return this.parentNode.insertBefore(this.cloneNode(false), this.nextSibling);\n}\n\nfunction selection_cloneDeep() {\n return this.parentNode.insertBefore(this.cloneNode(true), this.nextSibling);\n}\n\nexport default function(deep) {\n return this.select(deep ? selection_cloneDeep : selection_cloneShallow);\n}\n","var filterEvents = {};\n\nexport var event = null;\n\nif (typeof document !== \"undefined\") {\n var element = document.documentElement;\n if (!(\"onmouseenter\" in element)) {\n filterEvents = {mouseenter: \"mouseover\", mouseleave: \"mouseout\"};\n }\n}\n\nfunction filterContextListener(listener, index, group) {\n listener = contextListener(listener, index, group);\n return function(event) {\n var related = event.relatedTarget;\n if (!related || (related !== this && !(related.compareDocumentPosition(this) & 8))) {\n listener.call(this, event);\n }\n };\n}\n\nfunction contextListener(listener, index, group) {\n return function(event1) {\n var event0 = event; // Events can be reentrant (e.g., focus).\n event = event1;\n try {\n listener.call(this, this.__data__, index, group);\n } finally {\n event = event0;\n }\n };\n}\n\nfunction parseTypenames(typenames) {\n return typenames.trim().split(/^|\\s+/).map(function(t) {\n var name = \"\", i = t.indexOf(\".\");\n if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n return {type: t, name: name};\n });\n}\n\nfunction onRemove(typename) {\n return function() {\n var on = this.__on;\n if (!on) return;\n for (var j = 0, i = -1, m = on.length, o; j < m; ++j) {\n if (o = on[j], (!typename.type || o.type === typename.type) && o.name === typename.name) {\n this.removeEventListener(o.type, o.listener, o.capture);\n } else {\n on[++i] = o;\n }\n }\n if (++i) on.length = i;\n else delete this.__on;\n };\n}\n\nfunction onAdd(typename, value, capture) {\n var wrap = filterEvents.hasOwnProperty(typename.type) ? filterContextListener : contextListener;\n return function(d, i, group) {\n var on = this.__on, o, listener = wrap(value, i, group);\n if (on) for (var j = 0, m = on.length; j < m; ++j) {\n if ((o = on[j]).type === typename.type && o.name === typename.name) {\n this.removeEventListener(o.type, o.listener, o.capture);\n this.addEventListener(o.type, o.listener = listener, o.capture = capture);\n o.value = value;\n return;\n }\n }\n this.addEventListener(typename.type, listener, capture);\n o = {type: typename.type, name: typename.name, value: value, listener: listener, capture: capture};\n if (!on) this.__on = [o];\n else on.push(o);\n };\n}\n\nexport default function(typename, value, capture) {\n var typenames = parseTypenames(typename + \"\"), i, n = typenames.length, t;\n\n if (arguments.length < 2) {\n var on = this.node().__on;\n if (on) for (var j = 0, m = on.length, o; j < m; ++j) {\n for (i = 0, o = on[j]; i < n; ++i) {\n if ((t = typenames[i]).type === o.type && t.name === o.name) {\n return o.value;\n }\n }\n }\n return;\n }\n\n on = value ? onAdd : onRemove;\n if (capture == null) capture = false;\n for (i = 0; i < n; ++i) this.each(on(typenames[i], value, capture));\n return this;\n}\n\nexport function customEvent(event1, listener, that, args) {\n var event0 = event;\n event1.sourceEvent = event;\n event = event1;\n try {\n return listener.apply(that, args);\n } finally {\n event = event0;\n }\n}\n","import defaultView from \"../window\";\n\nfunction dispatchEvent(node, type, params) {\n var window = defaultView(node),\n event = window.CustomEvent;\n\n if (typeof event === \"function\") {\n event = new event(type, params);\n } else {\n event = window.document.createEvent(\"Event\");\n if (params) event.initEvent(type, params.bubbles, params.cancelable), event.detail = params.detail;\n else event.initEvent(type, false, false);\n }\n\n node.dispatchEvent(event);\n}\n\nfunction dispatchConstant(type, params) {\n return function() {\n return dispatchEvent(this, type, params);\n };\n}\n\nfunction dispatchFunction(type, params) {\n return function() {\n return dispatchEvent(this, type, params.apply(this, arguments));\n };\n}\n\nexport default function(type, params) {\n return this.each((typeof params === \"function\"\n ? dispatchFunction\n : dispatchConstant)(type, params));\n}\n","import selection_select from \"./select\";\nimport selection_selectAll from \"./selectAll\";\nimport selection_filter from \"./filter\";\nimport selection_data from \"./data\";\nimport selection_enter from \"./enter\";\nimport selection_exit from \"./exit\";\nimport selection_merge from \"./merge\";\nimport selection_order from \"./order\";\nimport selection_sort from \"./sort\";\nimport selection_call from \"./call\";\nimport selection_nodes from \"./nodes\";\nimport selection_node from \"./node\";\nimport selection_size from \"./size\";\nimport selection_empty from \"./empty\";\nimport selection_each from \"./each\";\nimport selection_attr from \"./attr\";\nimport selection_style from \"./style\";\nimport selection_property from \"./property\";\nimport selection_classed from \"./classed\";\nimport selection_text from \"./text\";\nimport selection_html from \"./html\";\nimport selection_raise from \"./raise\";\nimport selection_lower from \"./lower\";\nimport selection_append from \"./append\";\nimport selection_insert from \"./insert\";\nimport selection_remove from \"./remove\";\nimport selection_clone from \"./clone\";\nimport selection_datum from \"./datum\";\nimport selection_on from \"./on\";\nimport selection_dispatch from \"./dispatch\";\n\nexport var root = [null];\n\nexport function Selection(groups, parents) {\n this._groups = groups;\n this._parents = parents;\n}\n\nfunction selection() {\n return new Selection([[document.documentElement]], root);\n}\n\nSelection.prototype = selection.prototype = {\n constructor: Selection,\n select: selection_select,\n selectAll: selection_selectAll,\n filter: selection_filter,\n data: selection_data,\n enter: selection_enter,\n exit: selection_exit,\n merge: selection_merge,\n order: selection_order,\n sort: selection_sort,\n call: selection_call,\n nodes: selection_nodes,\n node: selection_node,\n size: selection_size,\n empty: selection_empty,\n each: selection_each,\n attr: selection_attr,\n style: selection_style,\n property: selection_property,\n classed: selection_classed,\n text: selection_text,\n html: selection_html,\n raise: selection_raise,\n lower: selection_lower,\n append: selection_append,\n insert: selection_insert,\n remove: selection_remove,\n clone: selection_clone,\n datum: selection_datum,\n on: selection_on,\n dispatch: selection_dispatch\n};\n\nexport default selection;\n","import {Selection} from \"./index\";\nimport selector from \"../selector\";\n\nexport default function(select) {\n if (typeof select !== \"function\") select = selector(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {\n if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {\n if (\"__data__\" in node) subnode.__data__ = node.__data__;\n subgroup[i] = subnode;\n }\n }\n }\n\n return new Selection(subgroups, this._parents);\n}\n","import {Selection} from \"./index\";\nimport selectorAll from \"../selectorAll\";\n\nexport default function(select) {\n if (typeof select !== \"function\") select = selectorAll(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n subgroups.push(select.call(node, node.__data__, i, group));\n parents.push(node);\n }\n }\n }\n\n return new Selection(subgroups, parents);\n}\n","import {Selection} from \"./index\";\nimport matcher from \"../matcher\";\n\nexport default function(match) {\n if (typeof match !== \"function\") match = matcher(match);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {\n if ((node = group[i]) && match.call(node, node.__data__, i, group)) {\n subgroup.push(node);\n }\n }\n }\n\n return new Selection(subgroups, this._parents);\n}\n","import sparse from \"./sparse\";\nimport {Selection} from \"./index\";\n\nexport default function() {\n return new Selection(this._exit || this._groups.map(sparse), this._parents);\n}\n","import {Selection} from \"./index\";\n\nexport default function(selection) {\n\n for (var groups0 = this._groups, groups1 = selection._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {\n for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group0[i] || group1[i]) {\n merge[i] = node;\n }\n }\n }\n\n for (; j < m0; ++j) {\n merges[j] = groups0[j];\n }\n\n return new Selection(merges, this._parents);\n}\n","export default function() {\n\n for (var groups = this._groups, j = -1, m = groups.length; ++j < m;) {\n for (var group = groups[j], i = group.length - 1, next = group[i], node; --i >= 0;) {\n if (node = group[i]) {\n if (next && next !== node.nextSibling) next.parentNode.insertBefore(node, next);\n next = node;\n }\n }\n }\n\n return this;\n}\n","export default function() {\n var callback = arguments[0];\n arguments[0] = this;\n callback.apply(null, arguments);\n return this;\n}\n","export default function() {\n var nodes = new Array(this.size()), i = -1;\n this.each(function() { nodes[++i] = this; });\n return nodes;\n}\n","export default function() {\n\n for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n for (var group = groups[j], i = 0, n = group.length; i < n; ++i) {\n var node = group[i];\n if (node) return node;\n }\n }\n\n return null;\n}\n","export default function() {\n var size = 0;\n this.each(function() { ++size; });\n return size;\n}\n","export default function() {\n return !this.node();\n}\n","export default function(callback) {\n\n for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n for (var group = groups[j], i = 0, n = group.length, node; i < n; ++i) {\n if (node = group[i]) callback.call(node, node.__data__, i, group);\n }\n }\n\n return this;\n}\n","function propertyRemove(name) {\n return function() {\n delete this[name];\n };\n}\n\nfunction propertyConstant(name, value) {\n return function() {\n this[name] = value;\n };\n}\n\nfunction propertyFunction(name, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) delete this[name];\n else this[name] = v;\n };\n}\n\nexport default function(name, value) {\n return arguments.length > 1\n ? this.each((value == null\n ? propertyRemove : typeof value === \"function\"\n ? propertyFunction\n : propertyConstant)(name, value))\n : this.node()[name];\n}\n","import creator from \"../creator\";\n\nexport default function(name) {\n var create = typeof name === \"function\" ? name : creator(name);\n return this.select(function() {\n return this.appendChild(create.apply(this, arguments));\n });\n}\n","export default function(value) {\n return arguments.length\n ? this.property(\"__data__\", value)\n : this.node().__data__;\n}\n","import {Selection, root} from \"./selection/index\";\n\nexport default function(selector) {\n return typeof selector === \"string\"\n ? new Selection([[document.querySelector(selector)]], [document.documentElement])\n : new Selection([[selector]], root);\n}\n","var nextId = 0;\n\nexport default function local() {\n return new Local;\n}\n\nfunction Local() {\n this._ = \"@\" + (++nextId).toString(36);\n}\n\nLocal.prototype = local.prototype = {\n constructor: Local,\n get: function(node) {\n var id = this._;\n while (!(id in node)) if (!(node = node.parentNode)) return;\n return node[id];\n },\n set: function(node, value) {\n return node[this._] = value;\n },\n remove: function(node) {\n return this._ in node && delete node[this._];\n },\n toString: function() {\n return this._;\n }\n};\n","import {event} from \"./selection/on\";\n\nexport default function() {\n var current = event, source;\n while (source = current.sourceEvent) current = source;\n return current;\n}\n","export default function(node, event) {\n var svg = node.ownerSVGElement || node;\n\n if (svg.createSVGPoint) {\n var point = svg.createSVGPoint();\n point.x = event.clientX, point.y = event.clientY;\n point = point.matrixTransform(node.getScreenCTM().inverse());\n return [point.x, point.y];\n }\n\n var rect = node.getBoundingClientRect();\n return [event.clientX - rect.left - node.clientLeft, event.clientY - rect.top - node.clientTop];\n}\n","import sourceEvent from \"./sourceEvent\";\nimport point from \"./point\";\n\nexport default function(node) {\n var event = sourceEvent();\n if (event.changedTouches) event = event.changedTouches[0];\n return point(node, event);\n}\n","import sourceEvent from \"./sourceEvent\";\nimport point from \"./point\";\n\nexport default function(node, touches, identifier) {\n if (arguments.length < 3) identifier = touches, touches = sourceEvent().changedTouches;\n\n for (var i = 0, n = touches ? touches.length : 0, touch; i < n; ++i) {\n if ((touch = touches[i]).identifier === identifier) {\n return point(node, touch);\n }\n }\n\n return null;\n}\n","var noop = {value: function() {}};\n\nfunction dispatch() {\n for (var i = 0, n = arguments.length, _ = {}, t; i < n; ++i) {\n if (!(t = arguments[i] + \"\") || (t in _)) throw new Error(\"illegal type: \" + t);\n _[t] = [];\n }\n return new Dispatch(_);\n}\n\nfunction Dispatch(_) {\n this._ = _;\n}\n\nfunction parseTypenames(typenames, types) {\n return typenames.trim().split(/^|\\s+/).map(function(t) {\n var name = \"\", i = t.indexOf(\".\");\n if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n if (t && !types.hasOwnProperty(t)) throw new Error(\"unknown type: \" + t);\n return {type: t, name: name};\n });\n}\n\nDispatch.prototype = dispatch.prototype = {\n constructor: Dispatch,\n on: function(typename, callback) {\n var _ = this._,\n T = parseTypenames(typename + \"\", _),\n t,\n i = -1,\n n = T.length;\n\n // If no callback was specified, return the callback of the given type and name.\n if (arguments.length < 2) {\n while (++i < n) if ((t = (typename = T[i]).type) && (t = get(_[t], typename.name))) return t;\n return;\n }\n\n // If a type was specified, set the callback for the given type and name.\n // Otherwise, if a null callback was specified, remove callbacks of the given name.\n if (callback != null && typeof callback !== \"function\") throw new Error(\"invalid callback: \" + callback);\n while (++i < n) {\n if (t = (typename = T[i]).type) _[t] = set(_[t], typename.name, callback);\n else if (callback == null) for (t in _) _[t] = set(_[t], typename.name, null);\n }\n\n return this;\n },\n copy: function() {\n var copy = {}, _ = this._;\n for (var t in _) copy[t] = _[t].slice();\n return new Dispatch(copy);\n },\n call: function(type, that) {\n if ((n = arguments.length - 2) > 0) for (var args = new Array(n), i = 0, n, t; i < n; ++i) args[i] = arguments[i + 2];\n if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n for (t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n },\n apply: function(type, that, args) {\n if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n for (var t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n }\n};\n\nfunction get(type, name) {\n for (var i = 0, n = type.length, c; i < n; ++i) {\n if ((c = type[i]).name === name) {\n return c.value;\n }\n }\n}\n\nfunction set(type, name, callback) {\n for (var i = 0, n = type.length; i < n; ++i) {\n if (type[i].name === name) {\n type[i] = noop, type = type.slice(0, i).concat(type.slice(i + 1));\n break;\n }\n }\n if (callback != null) type.push({name: name, value: callback});\n return type;\n}\n\nexport default dispatch;\n","import {event} from \"d3-selection\";\n\nexport function nopropagation() {\n event.stopImmediatePropagation();\n}\n\nexport default function() {\n event.preventDefault();\n event.stopImmediatePropagation();\n}\n","import {select} from \"d3-selection\";\nimport noevent from \"./noevent\";\n\nexport default function(view) {\n var root = view.document.documentElement,\n selection = select(view).on(\"dragstart.drag\", noevent, true);\n if (\"onselectstart\" in root) {\n selection.on(\"selectstart.drag\", noevent, true);\n } else {\n root.__noselect = root.style.MozUserSelect;\n root.style.MozUserSelect = \"none\";\n }\n}\n\nexport function yesdrag(view, noclick) {\n var root = view.document.documentElement,\n selection = select(view).on(\"dragstart.drag\", null);\n if (noclick) {\n selection.on(\"click.drag\", noevent, true);\n setTimeout(function() { selection.on(\"click.drag\", null); }, 0);\n }\n if (\"onselectstart\" in root) {\n selection.on(\"selectstart.drag\", null);\n } else {\n root.style.MozUserSelect = root.__noselect;\n delete root.__noselect;\n }\n}\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","export default function DragEvent(target, type, subject, id, active, x, y, dx, dy, dispatch) {\n this.target = target;\n this.type = type;\n this.subject = subject;\n this.identifier = id;\n this.active = active;\n this.x = x;\n this.y = y;\n this.dx = dx;\n this.dy = dy;\n this._ = dispatch;\n}\n\nDragEvent.prototype.on = function() {\n var value = this._.on.apply(this._, arguments);\n return value === this._ ? this : value;\n};\n","import {dispatch} from \"d3-dispatch\";\nimport {event, customEvent, select, mouse, touch} from \"d3-selection\";\nimport nodrag, {yesdrag} from \"./nodrag\";\nimport noevent, {nopropagation} from \"./noevent\";\nimport constant from \"./constant\";\nimport DragEvent from \"./event\";\n\n// Ignore right-click, since that should open the context menu.\nfunction defaultFilter() {\n return !event.button;\n}\n\nfunction defaultContainer() {\n return this.parentNode;\n}\n\nfunction defaultSubject(d) {\n return d == null ? {x: event.x, y: event.y} : d;\n}\n\nfunction defaultTouchable() {\n return \"ontouchstart\" in this;\n}\n\nexport default function() {\n var filter = defaultFilter,\n container = defaultContainer,\n subject = defaultSubject,\n touchable = defaultTouchable,\n gestures = {},\n listeners = dispatch(\"start\", \"drag\", \"end\"),\n active = 0,\n mousedownx,\n mousedowny,\n mousemoving,\n touchending,\n clickDistance2 = 0;\n\n function drag(selection) {\n selection\n .on(\"mousedown.drag\", mousedowned)\n .filter(touchable)\n .on(\"touchstart.drag\", touchstarted)\n .on(\"touchmove.drag\", touchmoved)\n .on(\"touchend.drag touchcancel.drag\", touchended)\n .style(\"touch-action\", \"none\")\n .style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\");\n }\n\n function mousedowned() {\n if (touchending || !filter.apply(this, arguments)) return;\n var gesture = beforestart(\"mouse\", container.apply(this, arguments), mouse, this, arguments);\n if (!gesture) return;\n select(event.view).on(\"mousemove.drag\", mousemoved, true).on(\"mouseup.drag\", mouseupped, true);\n nodrag(event.view);\n nopropagation();\n mousemoving = false;\n mousedownx = event.clientX;\n mousedowny = event.clientY;\n gesture(\"start\");\n }\n\n function mousemoved() {\n noevent();\n if (!mousemoving) {\n var dx = event.clientX - mousedownx, dy = event.clientY - mousedowny;\n mousemoving = dx * dx + dy * dy > clickDistance2;\n }\n gestures.mouse(\"drag\");\n }\n\n function mouseupped() {\n select(event.view).on(\"mousemove.drag mouseup.drag\", null);\n yesdrag(event.view, mousemoving);\n noevent();\n gestures.mouse(\"end\");\n }\n\n function touchstarted() {\n if (!filter.apply(this, arguments)) return;\n var touches = event.changedTouches,\n c = container.apply(this, arguments),\n n = touches.length, i, gesture;\n\n for (i = 0; i < n; ++i) {\n if (gesture = beforestart(touches[i].identifier, c, touch, this, arguments)) {\n nopropagation();\n gesture(\"start\");\n }\n }\n }\n\n function touchmoved() {\n var touches = event.changedTouches,\n n = touches.length, i, gesture;\n\n for (i = 0; i < n; ++i) {\n if (gesture = gestures[touches[i].identifier]) {\n noevent();\n gesture(\"drag\");\n }\n }\n }\n\n function touchended() {\n var touches = event.changedTouches,\n n = touches.length, i, gesture;\n\n if (touchending) clearTimeout(touchending);\n touchending = setTimeout(function() { touchending = null; }, 500); // Ghost clicks are delayed!\n for (i = 0; i < n; ++i) {\n if (gesture = gestures[touches[i].identifier]) {\n nopropagation();\n gesture(\"end\");\n }\n }\n }\n\n function beforestart(id, container, point, that, args) {\n var p = point(container, id), s, dx, dy,\n sublisteners = listeners.copy();\n\n if (!customEvent(new DragEvent(drag, \"beforestart\", s, id, active, p[0], p[1], 0, 0, sublisteners), function() {\n if ((event.subject = s = subject.apply(that, args)) == null) return false;\n dx = s.x - p[0] || 0;\n dy = s.y - p[1] || 0;\n return true;\n })) return;\n\n return function gesture(type) {\n var p0 = p, n;\n switch (type) {\n case \"start\": gestures[id] = gesture, n = active++; break;\n case \"end\": delete gestures[id], --active; // nobreak\n case \"drag\": p = point(container, id), n = active; break;\n }\n customEvent(new DragEvent(drag, type, s, id, n, p[0] + dx, p[1] + dy, p[0] - p0[0], p[1] - p0[1], sublisteners), sublisteners.apply, sublisteners, [type, that, args]);\n };\n }\n\n drag.filter = function(_) {\n return arguments.length ? (filter = typeof _ === \"function\" ? _ : constant(!!_), drag) : filter;\n };\n\n drag.container = function(_) {\n return arguments.length ? (container = typeof _ === \"function\" ? _ : constant(_), drag) : container;\n };\n\n drag.subject = function(_) {\n return arguments.length ? (subject = typeof _ === \"function\" ? _ : constant(_), drag) : subject;\n };\n\n drag.touchable = function(_) {\n return arguments.length ? (touchable = typeof _ === \"function\" ? _ : constant(!!_), drag) : touchable;\n };\n\n drag.on = function() {\n var value = listeners.on.apply(listeners, arguments);\n return value === listeners ? drag : value;\n };\n\n drag.clickDistance = function(_) {\n return arguments.length ? (clickDistance2 = (_ = +_) * _, drag) : Math.sqrt(clickDistance2);\n };\n\n return drag;\n}\n","var frame = 0, // is an animation frame pending?\n timeout = 0, // is a timeout pending?\n interval = 0, // are any timers active?\n pokeDelay = 1000, // how frequently we check for clock skew\n taskHead,\n taskTail,\n clockLast = 0,\n clockNow = 0,\n clockSkew = 0,\n clock = typeof performance === \"object\" && performance.now ? performance : Date,\n setFrame = typeof window === \"object\" && window.requestAnimationFrame ? window.requestAnimationFrame.bind(window) : function(f) { setTimeout(f, 17); };\n\nexport function now() {\n return clockNow || (setFrame(clearNow), clockNow = clock.now() + clockSkew);\n}\n\nfunction clearNow() {\n clockNow = 0;\n}\n\nexport function Timer() {\n this._call =\n this._time =\n this._next = null;\n}\n\nTimer.prototype = timer.prototype = {\n constructor: Timer,\n restart: function(callback, delay, time) {\n if (typeof callback !== \"function\") throw new TypeError(\"callback is not a function\");\n time = (time == null ? now() : +time) + (delay == null ? 0 : +delay);\n if (!this._next && taskTail !== this) {\n if (taskTail) taskTail._next = this;\n else taskHead = this;\n taskTail = this;\n }\n this._call = callback;\n this._time = time;\n sleep();\n },\n stop: function() {\n if (this._call) {\n this._call = null;\n this._time = Infinity;\n sleep();\n }\n }\n};\n\nexport function timer(callback, delay, time) {\n var t = new Timer;\n t.restart(callback, delay, time);\n return t;\n}\n\nexport function timerFlush() {\n now(); // Get the current time, if not already set.\n ++frame; // Pretend we’ve set an alarm, if we haven’t already.\n var t = taskHead, e;\n while (t) {\n if ((e = clockNow - t._time) >= 0) t._call.call(null, e);\n t = t._next;\n }\n --frame;\n}\n\nfunction wake() {\n clockNow = (clockLast = clock.now()) + clockSkew;\n frame = timeout = 0;\n try {\n timerFlush();\n } finally {\n frame = 0;\n nap();\n clockNow = 0;\n }\n}\n\nfunction poke() {\n var now = clock.now(), delay = now - clockLast;\n if (delay > pokeDelay) clockSkew -= delay, clockLast = now;\n}\n\nfunction nap() {\n var t0, t1 = taskHead, t2, time = Infinity;\n while (t1) {\n if (t1._call) {\n if (time > t1._time) time = t1._time;\n t0 = t1, t1 = t1._next;\n } else {\n t2 = t1._next, t1._next = null;\n t1 = t0 ? t0._next = t2 : taskHead = t2;\n }\n }\n taskTail = t0;\n sleep(time);\n}\n\nfunction sleep(time) {\n if (frame) return; // Soonest alarm already set, or will be.\n if (timeout) timeout = clearTimeout(timeout);\n var delay = time - clockNow; // Strictly less than if we recomputed clockNow.\n if (delay > 24) {\n if (time < Infinity) timeout = setTimeout(wake, time - clock.now() - clockSkew);\n if (interval) interval = clearInterval(interval);\n } else {\n if (!interval) clockLast = clock.now(), interval = setInterval(poke, pokeDelay);\n frame = 1, setFrame(wake);\n }\n}\n","import {Timer} from \"./timer\";\n\nexport default function(callback, delay, time) {\n var t = new Timer;\n delay = delay == null ? 0 : +delay;\n t.restart(function(elapsed) {\n t.stop();\n callback(elapsed + delay);\n }, delay, time);\n return t;\n}\n","import {dispatch} from \"d3-dispatch\";\nimport {timer, timeout} from \"d3-timer\";\n\nvar emptyOn = dispatch(\"start\", \"end\", \"interrupt\");\nvar emptyTween = [];\n\nexport var CREATED = 0;\nexport var SCHEDULED = 1;\nexport var STARTING = 2;\nexport var STARTED = 3;\nexport var RUNNING = 4;\nexport var ENDING = 5;\nexport var ENDED = 6;\n\nexport default function(node, name, id, index, group, timing) {\n var schedules = node.__transition;\n if (!schedules) node.__transition = {};\n else if (id in schedules) return;\n create(node, id, {\n name: name,\n index: index, // For context during callback.\n group: group, // For context during callback.\n on: emptyOn,\n tween: emptyTween,\n time: timing.time,\n delay: timing.delay,\n duration: timing.duration,\n ease: timing.ease,\n timer: null,\n state: CREATED\n });\n}\n\nexport function init(node, id) {\n var schedule = get(node, id);\n if (schedule.state > CREATED) throw new Error(\"too late; already scheduled\");\n return schedule;\n}\n\nexport function set(node, id) {\n var schedule = get(node, id);\n if (schedule.state > STARTING) throw new Error(\"too late; already started\");\n return schedule;\n}\n\nexport function get(node, id) {\n var schedule = node.__transition;\n if (!schedule || !(schedule = schedule[id])) throw new Error(\"transition not found\");\n return schedule;\n}\n\nfunction create(node, id, self) {\n var schedules = node.__transition,\n tween;\n\n // Initialize the self timer when the transition is created.\n // Note the actual delay is not known until the first callback!\n schedules[id] = self;\n self.timer = timer(schedule, 0, self.time);\n\n function schedule(elapsed) {\n self.state = SCHEDULED;\n self.timer.restart(start, self.delay, self.time);\n\n // If the elapsed delay is less than our first sleep, start immediately.\n if (self.delay <= elapsed) start(elapsed - self.delay);\n }\n\n function start(elapsed) {\n var i, j, n, o;\n\n // If the state is not SCHEDULED, then we previously errored on start.\n if (self.state !== SCHEDULED) return stop();\n\n for (i in schedules) {\n o = schedules[i];\n if (o.name !== self.name) continue;\n\n // While this element already has a starting transition during this frame,\n // defer starting an interrupting transition until that transition has a\n // chance to tick (and possibly end); see d3/d3-transition#54!\n if (o.state === STARTED) return timeout(start);\n\n // Interrupt the active transition, if any.\n // Dispatch the interrupt event.\n if (o.state === RUNNING) {\n o.state = ENDED;\n o.timer.stop();\n o.on.call(\"interrupt\", node, node.__data__, o.index, o.group);\n delete schedules[i];\n }\n\n // Cancel any pre-empted transitions. No interrupt event is dispatched\n // because the cancelled transitions never started. Note that this also\n // removes this transition from the pending list!\n else if (+i < id) {\n o.state = ENDED;\n o.timer.stop();\n delete schedules[i];\n }\n }\n\n // Defer the first tick to end of the current frame; see d3/d3#1576.\n // Note the transition may be canceled after start and before the first tick!\n // Note this must be scheduled before the start event; see d3/d3-transition#16!\n // Assuming this is successful, subsequent callbacks go straight to tick.\n timeout(function() {\n if (self.state === STARTED) {\n self.state = RUNNING;\n self.timer.restart(tick, self.delay, self.time);\n tick(elapsed);\n }\n });\n\n // Dispatch the start event.\n // Note this must be done before the tween are initialized.\n self.state = STARTING;\n self.on.call(\"start\", node, node.__data__, self.index, self.group);\n if (self.state !== STARTING) return; // interrupted\n self.state = STARTED;\n\n // Initialize the tween, deleting null tween.\n tween = new Array(n = self.tween.length);\n for (i = 0, j = -1; i < n; ++i) {\n if (o = self.tween[i].value.call(node, node.__data__, self.index, self.group)) {\n tween[++j] = o;\n }\n }\n tween.length = j + 1;\n }\n\n function tick(elapsed) {\n var t = elapsed < self.duration ? self.ease.call(null, elapsed / self.duration) : (self.timer.restart(stop), self.state = ENDING, 1),\n i = -1,\n n = tween.length;\n\n while (++i < n) {\n tween[i].call(null, t);\n }\n\n // Dispatch the end event.\n if (self.state === ENDING) {\n self.on.call(\"end\", node, node.__data__, self.index, self.group);\n stop();\n }\n }\n\n function stop() {\n self.state = ENDED;\n self.timer.stop();\n delete schedules[id];\n for (var i in schedules) return; // eslint-disable-line no-unused-vars\n delete node.__transition;\n }\n}\n","import {get, set} from \"./schedule\";\n\nfunction tweenRemove(id, name) {\n var tween0, tween1;\n return function() {\n var schedule = set(this, id),\n tween = schedule.tween;\n\n // If this node shared tween with the previous node,\n // just assign the updated shared tween and we’re done!\n // Otherwise, copy-on-write.\n if (tween !== tween0) {\n tween1 = tween0 = tween;\n for (var i = 0, n = tween1.length; i < n; ++i) {\n if (tween1[i].name === name) {\n tween1 = tween1.slice();\n tween1.splice(i, 1);\n break;\n }\n }\n }\n\n schedule.tween = tween1;\n };\n}\n\nfunction tweenFunction(id, name, value) {\n var tween0, tween1;\n if (typeof value !== \"function\") throw new Error;\n return function() {\n var schedule = set(this, id),\n tween = schedule.tween;\n\n // If this node shared tween with the previous node,\n // just assign the updated shared tween and we’re done!\n // Otherwise, copy-on-write.\n if (tween !== tween0) {\n tween1 = (tween0 = tween).slice();\n for (var t = {name: name, value: value}, i = 0, n = tween1.length; i < n; ++i) {\n if (tween1[i].name === name) {\n tween1[i] = t;\n break;\n }\n }\n if (i === n) tween1.push(t);\n }\n\n schedule.tween = tween1;\n };\n}\n\nexport default function(name, value) {\n var id = this._id;\n\n name += \"\";\n\n if (arguments.length < 2) {\n var tween = get(this.node(), id).tween;\n for (var i = 0, n = tween.length, t; i < n; ++i) {\n if ((t = tween[i]).name === name) {\n return t.value;\n }\n }\n return null;\n }\n\n return this.each((value == null ? tweenRemove : tweenFunction)(id, name, value));\n}\n\nexport function tweenValue(transition, name, value) {\n var id = transition._id;\n\n transition.each(function() {\n var schedule = set(this, id);\n (schedule.value || (schedule.value = {}))[name] = value.apply(this, arguments);\n });\n\n return function(node) {\n return get(node, id).value[name];\n };\n}\n","import {color} from \"d3-color\";\nimport {interpolateNumber, interpolateRgb, interpolateString} from \"d3-interpolate\";\n\nexport default function(a, b) {\n var c;\n return (typeof b === \"number\" ? interpolateNumber\n : b instanceof color ? interpolateRgb\n : (c = color(b)) ? (b = c, interpolateRgb)\n : interpolateString)(a, b);\n}\n","function removeFunction(id) {\n return function() {\n var parent = this.parentNode;\n for (var i in this.__transition) if (+i !== id) return;\n if (parent) parent.removeChild(this);\n };\n}\n\nexport default function() {\n return this.on(\"end.remove\", removeFunction(this._id));\n}\n","import {selection} from \"d3-selection\";\n\nvar Selection = selection.prototype.constructor;\n\nexport default function() {\n return new Selection(this._groups, this._parents);\n}\n","import {tweenValue} from \"./tween\";\n\nfunction textConstant(value) {\n return function() {\n this.textContent = value;\n };\n}\n\nfunction textFunction(value) {\n return function() {\n var value1 = value(this);\n this.textContent = value1 == null ? \"\" : value1;\n };\n}\n\nexport default function(value) {\n return this.tween(\"text\", typeof value === \"function\"\n ? textFunction(tweenValue(this, \"text\", value))\n : textConstant(value == null ? \"\" : value + \"\"));\n}\n","import {selection} from \"d3-selection\";\nimport transition_attr from \"./attr\";\nimport transition_attrTween from \"./attrTween\";\nimport transition_delay from \"./delay\";\nimport transition_duration from \"./duration\";\nimport transition_ease from \"./ease\";\nimport transition_filter from \"./filter\";\nimport transition_merge from \"./merge\";\nimport transition_on from \"./on\";\nimport transition_remove from \"./remove\";\nimport transition_select from \"./select\";\nimport transition_selectAll from \"./selectAll\";\nimport transition_selection from \"./selection\";\nimport transition_style from \"./style\";\nimport transition_styleTween from \"./styleTween\";\nimport transition_text from \"./text\";\nimport transition_transition from \"./transition\";\nimport transition_tween from \"./tween\";\n\nvar id = 0;\n\nexport function Transition(groups, parents, name, id) {\n this._groups = groups;\n this._parents = parents;\n this._name = name;\n this._id = id;\n}\n\nexport default function transition(name) {\n return selection().transition(name);\n}\n\nexport function newId() {\n return ++id;\n}\n\nvar selection_prototype = selection.prototype;\n\nTransition.prototype = transition.prototype = {\n constructor: Transition,\n select: transition_select,\n selectAll: transition_selectAll,\n filter: transition_filter,\n merge: transition_merge,\n selection: transition_selection,\n transition: transition_transition,\n call: selection_prototype.call,\n nodes: selection_prototype.nodes,\n node: selection_prototype.node,\n size: selection_prototype.size,\n empty: selection_prototype.empty,\n each: selection_prototype.each,\n on: transition_on,\n attr: transition_attr,\n attrTween: transition_attrTween,\n style: transition_style,\n styleTween: transition_styleTween,\n text: transition_text,\n remove: transition_remove,\n tween: transition_tween,\n delay: transition_delay,\n duration: transition_duration,\n ease: transition_ease\n};\n","import {selector} from \"d3-selection\";\nimport {Transition} from \"./index\";\nimport schedule, {get} from \"./schedule\";\n\nexport default function(select) {\n var name = this._name,\n id = this._id;\n\n if (typeof select !== \"function\") select = selector(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {\n if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {\n if (\"__data__\" in node) subnode.__data__ = node.__data__;\n subgroup[i] = subnode;\n schedule(subgroup[i], name, id, i, subgroup, get(node, id));\n }\n }\n }\n\n return new Transition(subgroups, this._parents, name, id);\n}\n","import {selectorAll} from \"d3-selection\";\nimport {Transition} from \"./index\";\nimport schedule, {get} from \"./schedule\";\n\nexport default function(select) {\n var name = this._name,\n id = this._id;\n\n if (typeof select !== \"function\") select = selectorAll(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n for (var children = select.call(node, node.__data__, i, group), child, inherit = get(node, id), k = 0, l = children.length; k < l; ++k) {\n if (child = children[k]) {\n schedule(child, name, id, k, children, inherit);\n }\n }\n subgroups.push(children);\n parents.push(node);\n }\n }\n }\n\n return new Transition(subgroups, parents, name, id);\n}\n","import {matcher} from \"d3-selection\";\nimport {Transition} from \"./index\";\n\nexport default function(match) {\n if (typeof match !== \"function\") match = matcher(match);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {\n if ((node = group[i]) && match.call(node, node.__data__, i, group)) {\n subgroup.push(node);\n }\n }\n }\n\n return new Transition(subgroups, this._parents, this._name, this._id);\n}\n","import {Transition} from \"./index\";\n\nexport default function(transition) {\n if (transition._id !== this._id) throw new Error;\n\n for (var groups0 = this._groups, groups1 = transition._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {\n for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group0[i] || group1[i]) {\n merge[i] = node;\n }\n }\n }\n\n for (; j < m0; ++j) {\n merges[j] = groups0[j];\n }\n\n return new Transition(merges, this._parents, this._name, this._id);\n}\n","import {Transition, newId} from \"./index\";\nimport schedule, {get} from \"./schedule\";\n\nexport default function() {\n var name = this._name,\n id0 = this._id,\n id1 = newId();\n\n for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n var inherit = get(node, id0);\n schedule(node, name, id1, i, group, {\n time: inherit.time + inherit.delay + inherit.duration,\n delay: 0,\n duration: inherit.duration,\n ease: inherit.ease\n });\n }\n }\n }\n\n return new Transition(groups, this._parents, name, id1);\n}\n","import {get, set, init} from \"./schedule\";\n\nfunction start(name) {\n return (name + \"\").trim().split(/^|\\s+/).every(function(t) {\n var i = t.indexOf(\".\");\n if (i >= 0) t = t.slice(0, i);\n return !t || t === \"start\";\n });\n}\n\nfunction onFunction(id, name, listener) {\n var on0, on1, sit = start(name) ? init : set;\n return function() {\n var schedule = sit(this, id),\n on = schedule.on;\n\n // If this node shared a dispatch with the previous node,\n // just assign the updated shared dispatch and we’re done!\n // Otherwise, copy-on-write.\n if (on !== on0) (on1 = (on0 = on).copy()).on(name, listener);\n\n schedule.on = on1;\n };\n}\n\nexport default function(name, listener) {\n var id = this._id;\n\n return arguments.length < 2\n ? get(this.node(), id).on.on(name)\n : this.each(onFunction(id, name, listener));\n}\n","import {interpolateTransformSvg as interpolateTransform} from \"d3-interpolate\";\nimport {namespace} from \"d3-selection\";\nimport {tweenValue} from \"./tween\";\nimport interpolate from \"./interpolate\";\n\nfunction attrRemove(name) {\n return function() {\n this.removeAttribute(name);\n };\n}\n\nfunction attrRemoveNS(fullname) {\n return function() {\n this.removeAttributeNS(fullname.space, fullname.local);\n };\n}\n\nfunction attrConstant(name, interpolate, value1) {\n var value00,\n interpolate0;\n return function() {\n var value0 = this.getAttribute(name);\n return value0 === value1 ? null\n : value0 === value00 ? interpolate0\n : interpolate0 = interpolate(value00 = value0, value1);\n };\n}\n\nfunction attrConstantNS(fullname, interpolate, value1) {\n var value00,\n interpolate0;\n return function() {\n var value0 = this.getAttributeNS(fullname.space, fullname.local);\n return value0 === value1 ? null\n : value0 === value00 ? interpolate0\n : interpolate0 = interpolate(value00 = value0, value1);\n };\n}\n\nfunction attrFunction(name, interpolate, value) {\n var value00,\n value10,\n interpolate0;\n return function() {\n var value0, value1 = value(this);\n if (value1 == null) return void this.removeAttribute(name);\n value0 = this.getAttribute(name);\n return value0 === value1 ? null\n : value0 === value00 && value1 === value10 ? interpolate0\n : interpolate0 = interpolate(value00 = value0, value10 = value1);\n };\n}\n\nfunction attrFunctionNS(fullname, interpolate, value) {\n var value00,\n value10,\n interpolate0;\n return function() {\n var value0, value1 = value(this);\n if (value1 == null) return void this.removeAttributeNS(fullname.space, fullname.local);\n value0 = this.getAttributeNS(fullname.space, fullname.local);\n return value0 === value1 ? null\n : value0 === value00 && value1 === value10 ? interpolate0\n : interpolate0 = interpolate(value00 = value0, value10 = value1);\n };\n}\n\nexport default function(name, value) {\n var fullname = namespace(name), i = fullname === \"transform\" ? interpolateTransform : interpolate;\n return this.attrTween(name, typeof value === \"function\"\n ? (fullname.local ? attrFunctionNS : attrFunction)(fullname, i, tweenValue(this, \"attr.\" + name, value))\n : value == null ? (fullname.local ? attrRemoveNS : attrRemove)(fullname)\n : (fullname.local ? attrConstantNS : attrConstant)(fullname, i, value + \"\"));\n}\n","import {namespace} from \"d3-selection\";\n\nfunction attrTweenNS(fullname, value) {\n function tween() {\n var node = this, i = value.apply(node, arguments);\n return i && function(t) {\n node.setAttributeNS(fullname.space, fullname.local, i(t));\n };\n }\n tween._value = value;\n return tween;\n}\n\nfunction attrTween(name, value) {\n function tween() {\n var node = this, i = value.apply(node, arguments);\n return i && function(t) {\n node.setAttribute(name, i(t));\n };\n }\n tween._value = value;\n return tween;\n}\n\nexport default function(name, value) {\n var key = \"attr.\" + name;\n if (arguments.length < 2) return (key = this.tween(key)) && key._value;\n if (value == null) return this.tween(key, null);\n if (typeof value !== \"function\") throw new Error;\n var fullname = namespace(name);\n return this.tween(key, (fullname.local ? attrTweenNS : attrTween)(fullname, value));\n}\n","import {interpolateTransformCss as interpolateTransform} from \"d3-interpolate\";\nimport {style} from \"d3-selection\";\nimport {tweenValue} from \"./tween\";\nimport interpolate from \"./interpolate\";\n\nfunction styleRemove(name, interpolate) {\n var value00,\n value10,\n interpolate0;\n return function() {\n var value0 = style(this, name),\n value1 = (this.style.removeProperty(name), style(this, name));\n return value0 === value1 ? null\n : value0 === value00 && value1 === value10 ? interpolate0\n : interpolate0 = interpolate(value00 = value0, value10 = value1);\n };\n}\n\nfunction styleRemoveEnd(name) {\n return function() {\n this.style.removeProperty(name);\n };\n}\n\nfunction styleConstant(name, interpolate, value1) {\n var value00,\n interpolate0;\n return function() {\n var value0 = style(this, name);\n return value0 === value1 ? null\n : value0 === value00 ? interpolate0\n : interpolate0 = interpolate(value00 = value0, value1);\n };\n}\n\nfunction styleFunction(name, interpolate, value) {\n var value00,\n value10,\n interpolate0;\n return function() {\n var value0 = style(this, name),\n value1 = value(this);\n if (value1 == null) value1 = (this.style.removeProperty(name), style(this, name));\n return value0 === value1 ? null\n : value0 === value00 && value1 === value10 ? interpolate0\n : interpolate0 = interpolate(value00 = value0, value10 = value1);\n };\n}\n\nexport default function(name, value, priority) {\n var i = (name += \"\") === \"transform\" ? interpolateTransform : interpolate;\n return value == null ? this\n .styleTween(name, styleRemove(name, i))\n .on(\"end.style.\" + name, styleRemoveEnd(name))\n : this.styleTween(name, typeof value === \"function\"\n ? styleFunction(name, i, tweenValue(this, \"style.\" + name, value))\n : styleConstant(name, i, value + \"\"), priority);\n}\n","function styleTween(name, value, priority) {\n function tween() {\n var node = this, i = value.apply(node, arguments);\n return i && function(t) {\n node.style.setProperty(name, i(t), priority);\n };\n }\n tween._value = value;\n return tween;\n}\n\nexport default function(name, value, priority) {\n var key = \"style.\" + (name += \"\");\n if (arguments.length < 2) return (key = this.tween(key)) && key._value;\n if (value == null) return this.tween(key, null);\n if (typeof value !== \"function\") throw new Error;\n return this.tween(key, styleTween(name, value, priority == null ? \"\" : priority));\n}\n","import {get, init} from \"./schedule\";\n\nfunction delayFunction(id, value) {\n return function() {\n init(this, id).delay = +value.apply(this, arguments);\n };\n}\n\nfunction delayConstant(id, value) {\n return value = +value, function() {\n init(this, id).delay = value;\n };\n}\n\nexport default function(value) {\n var id = this._id;\n\n return arguments.length\n ? this.each((typeof value === \"function\"\n ? delayFunction\n : delayConstant)(id, value))\n : get(this.node(), id).delay;\n}\n","import {get, set} from \"./schedule\";\n\nfunction durationFunction(id, value) {\n return function() {\n set(this, id).duration = +value.apply(this, arguments);\n };\n}\n\nfunction durationConstant(id, value) {\n return value = +value, function() {\n set(this, id).duration = value;\n };\n}\n\nexport default function(value) {\n var id = this._id;\n\n return arguments.length\n ? this.each((typeof value === \"function\"\n ? durationFunction\n : durationConstant)(id, value))\n : get(this.node(), id).duration;\n}\n","import {get, set} from \"./schedule\";\n\nfunction easeConstant(id, value) {\n if (typeof value !== \"function\") throw new Error;\n return function() {\n set(this, id).ease = value;\n };\n}\n\nexport default function(value) {\n var id = this._id;\n\n return arguments.length\n ? this.each(easeConstant(id, value))\n : get(this.node(), id).ease;\n}\n","import {Transition, newId} from \"../transition/index\";\nimport schedule from \"../transition/schedule\";\nimport {easeCubicInOut} from \"d3-ease\";\nimport {now} from \"d3-timer\";\n\nvar defaultTiming = {\n time: null, // Set on use.\n delay: 0,\n duration: 250,\n ease: easeCubicInOut\n};\n\nfunction inherit(node, id) {\n var timing;\n while (!(timing = node.__transition) || !(timing = timing[id])) {\n if (!(node = node.parentNode)) {\n return defaultTiming.time = now(), defaultTiming;\n }\n }\n return timing;\n}\n\nexport default function(name) {\n var id,\n timing;\n\n if (name instanceof Transition) {\n id = name._id, name = name._name;\n } else {\n id = newId(), (timing = defaultTiming).time = now(), name = name == null ? null : name + \"\";\n }\n\n for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n schedule(node, name, id, i, group, timing || inherit(node, id));\n }\n }\n }\n\n return new Transition(groups, this._parents, name, id);\n}\n","import {selection} from \"d3-selection\";\nimport selection_interrupt from \"./interrupt\";\nimport selection_transition from \"./transition\";\n\nselection.prototype.interrupt = selection_interrupt;\nselection.prototype.transition = selection_transition;\n","import interrupt from \"../interrupt\";\n\nexport default function(name) {\n return this.each(function() {\n interrupt(this, name);\n });\n}\n","import {STARTING, ENDING, ENDED} from \"./transition/schedule\";\n\nexport default function(node, name) {\n var schedules = node.__transition,\n schedule,\n active,\n empty = true,\n i;\n\n if (!schedules) return;\n\n name = name == null ? null : name + \"\";\n\n for (i in schedules) {\n if ((schedule = schedules[i]).name !== name) { empty = false; continue; }\n active = schedule.state > STARTING && schedule.state < ENDING;\n schedule.state = ENDED;\n schedule.timer.stop();\n if (active) schedule.on.call(\"interrupt\", node, node.__data__, schedule.index, schedule.group);\n delete schedules[i];\n }\n\n if (empty) delete node.__transition;\n}\n","import {Transition} from \"./transition/index\";\nimport {SCHEDULED} from \"./transition/schedule\";\n\nvar root = [null];\n\nexport default function(node, name) {\n var schedules = node.__transition,\n schedule,\n i;\n\n if (schedules) {\n name = name == null ? null : name + \"\";\n for (i in schedules) {\n if ((schedule = schedules[i]).state > SCHEDULED && schedule.name === name) {\n return new Transition([[node]], root, name, +i);\n }\n }\n }\n\n return null;\n}\n","import { select, event as d3event, selection, clientPoint } from 'd3-selection';\nimport { drag as d3drag } from 'd3-drag';\nimport 'd3-transition';\nimport { mergeRecursive } from './common-utils';\n/**\n * This function takes a raw DOM element or\n * a string and returns a d3 selection of that element.\n *\n * @param {HTMLElement | string} element The element to wrap in d3 selection.\n * @return {Selection} Instance of d3 selection.\n */\nconst selectElement = element => select(element);\n\n/**\n * It creates a new d3 element on the parent element\n * @param {Selection} parent Element to which the element is to be appended\n * @param {Object} elemType Type of the new element\n * @param {Array} data Data for the new element\n * @param {Object} selector classname/id/tagname for the element\n * @return {HTMLElement} Newly Created Element\n */\nconst makeElement = (parent, elemType, data, selector, callbacks = {}, keyFn) => {\n if ((parent instanceof HTMLElement || parent instanceof SVGElement)) {\n parent = selectElement(parent);\n }\n\n const selectorVal = selector ? selector[0] : null;\n let selectorType = null;\n let actualSelector = null;\n let element = null;\n let enterSel = null;\n let mergeSel = null;\n let filter;\n if (selectorVal) {\n if (selectorVal === '#') {\n selectorType = 'id';\n actualSelector = selector;\n } else {\n selectorType = 'class';\n actualSelector = selector[0] === '.' ? selector : `.${selector}`;\n }\n } else {\n actualSelector = elemType;\n filter = true;\n }\n element = parent.selectAll(actualSelector);\n\n filter && (element = element.filter(function () {\n return this.parentNode === parent.node();\n }));\n element = element.data(data, keyFn);\n\n enterSel = element.enter()\n .append(elemType || 'div');\n callbacks.enter && enterSel.each(function (...params) {\n callbacks.enter(selectElement(this), ...params);\n });\n\n mergeSel = enterSel.merge(element);\n callbacks.update && mergeSel.each(function (...params) {\n callbacks.update(selectElement(this), ...params);\n });\n if (selectorType === 'class') {\n mergeSel.classed(selectorVal === '.' ? selector.substring(1, selector.length) : selector, true);\n } else if (selectorType === 'id') {\n mergeSel.attr('id', selector.substring(1, selector.length));\n }\n const exitSel = element.exit();\n\n if (callbacks.exit) {\n exitSel.each(function (...params) {\n callbacks.exit(selectElement(this), ...params);\n });\n } else {\n exitSel.remove();\n }\n return mergeSel;\n};\n\n/**\n * This function applies styles to an element\n * @param {Object} elem Element Selection\n * @param {Object} styleObj Style Object to be applied\n * @return {Element} Newly Created Element\n*/\nconst applyStyle = (elem, styleObj) => {\n Object.entries(styleObj).forEach((d) => {\n elem.style(d[0], d[1]);\n }, this);\n return elem;\n};\n\n/**\n * This function appends a dom element in another element.\n * @param {HTMLElement | SVGElement} element1 The element in which to append the second element\n * @param {HTMLElement | SVGElement} element2 The element which will be appended.\n */\nconst appendElement = (element1, element2) => {\n element1.appendChild(element2);\n};\n\n/**\n * Sets the attributes to the element.\n * @param {HTMLElement | SVGElement} element Element on which attributes will be applied\n * @param {Object} attrs Attributes which need to be applied\n */\nconst setElementAttrs = (element, attrs) => {\n for (const key in attrs) {\n if ({}.hasOwnProperty.call(attrs, key)) {\n element.attr(key, attrs[key]);\n }\n }\n};\n\n/**\n * Sets attributes in the svg or html element\n * @param {SVGElement | HTMLElement} element The element on which attrs will be applied\n * @param {Array.} attrs Array of attributes\n * @param {string} className className of elements to select.\n * @return {SVGElement | HTMLElement} SVGElement or html element.\n */\nconst setAttrs = (element, attrs, className) => {\n if (!(element instanceof selection)) {\n element = selectElement(element);\n }\n className !== undefined ? element.selectAll(`.${className}`).each(function () {\n setElementAttrs(select(this), attrs);\n }) : setElementAttrs(element, attrs);\n return element;\n};\n\n/**\n * Adds a css class to elements which passes the filter function.If filter function is not given,\n * then all elements will be applied the class.\n * @param {HTMLElement | SVGElement} element element\n * @param {string} className css class\n * @param {string} selector css selector\n * @param {Function} filterFn filter method.\n */\nconst addClass = (element, className, selector, filterFn) => {\n select(element).selectAll(selector).each(function (data) {\n const elem = select(this);\n filterFn ? filterFn(data) && elem.classed(className, true) :\n elem.classed(className, true);\n });\n};\n\n/**\n * Removes the css class from elements which passes the filter function.If filter function is not given,\n * then all elements will be applied the class.\n * @param {HTMLElement | SVGElement} element element\n * @param {string} className css class\n * @param {string} selector css selector\n * @param {Function} filterFn filter method.\n */\nconst removeClass = (element, className, selector, filterFn) => {\n select(element).selectAll(selector).each(function (data) {\n const elem = select(this);\n filterFn ? filterFn(data) && elem.classed(className, false) :\n elem.classed(className, false);\n });\n};\n\n/**\n * Sets styles in the svg or html element\n * @param {SVGElement | HTMLElement} element The element on which styles will be applied\n * @param {Array.} styles Array of style attributes\n * @return {SVGElement | HTMLElement} SVGElement or html element.\n */\nconst setStyles = (element, styles) => {\n if (!(element instanceof selection)) {\n element = selectElement(element);\n }\n for (const key in styles) {\n if ({}.hasOwnProperty.call(styles, key)) {\n element.style(key, styles[key]);\n }\n }\n return element;\n};\n\n/**\n * Creates svg or html elements by binding data to the selection.Removes extra elements\n * on exit.\n * @param {Object} params Parameter object\n * @param {SVGElement | HTMLElement} params.container Container element where all elements will be appended\n * @param {string} params.selector Selector by which elements will be selected from dom\n * @param {string} params.append Append tag\n * @param {Function} params.each Function which will be executed for each data point and element.\n */\nconst createElements = (params) => {\n const container = select(params.container);\n let data;\n let sel;\n\n data = params.data;\n if (typeof data === 'number') {\n data = Array(data).fill().map((d, i) => i);\n }\n sel = container.selectAll(params.selector).data(data);\n\n sel = container.selectAll(params.selector).filter(function () {\n return this.parentNode === container.node();\n }).data(params.data);\n\n const selectionMerge = sel.enter().append(params.append).merge(sel).each(function (d, i) {\n params.each(d, select(this), i);\n });\n\n selectionMerge.attr('class', params.className || '');\n sel.exit().remove();\n};\n\n/**\n * Clips an element with given measurement. Basically it is used to hide overflowing portions\n * of any element.\n * @param {SVGElement} container svg element which needs to be clipped.\n * @param {Object} measurement Dimensions of the clipped rectangle.\n * @param {string} id Unique id of the clip element\n */\nconst clipElement = (container, measurement, id) => {\n const clipPathElement = makeElement(select(container), 'clipPath', [1], `#${id}`);\n const clipPathRect = makeElement(clipPathElement, 'rect', [1]);\n clipPathRect.attr('x', measurement.x)\n .attr('y', measurement.x)\n .attr('width', measurement.width)\n .attr('height', measurement.height);\n clipPathElement.attr('clip-path', `url(#${id})`);\n};\n\n/**\n * Returns the element of the corresponding classname.\n * @param {HTMLElement | SVGElement} node html or svg node element.\n * @param {string} className css class to be applied.\n * @return {HTMLElement | SVGElement} html or svg element.\n */\nconst getElementsByClassName = (node, className) => select(node).selectAll(className).nodes();\n\n/**\n * Gets the mouse position relative to an svg type of element\n * @param {SVGElement} element Any svg element like rect, circle, etc.\n * @param {Event} event Event object.\n * @return {Object} x and y position relative to the container element passed.\n */\nconst getMousePos = (element, event) => {\n const boundingClientRect = element.getBoundingClientRect();\n return {\n x: event.x - boundingClientRect.x,\n y: event.y - boundingClientRect.y\n };\n};\n\nconst getClientPoint = (...params) => {\n const pos = clientPoint(...params);\n return {\n x: pos[0],\n y: pos[1]\n };\n};\n\n/** This function appends a dom element in another element.\n * @param {Object} tag The tag name of the element to append\n * @param {Object} mount Mount point fo the element\n * @return {Object} selection of the appended element\n */\nconst createElement = (tag, mount) => select(mount).append(tag).node();\n\n/**\n * Gets the d3 event function\n * @return {Object} d3 event\n */\nconst getEvent = () => d3event;\n\n/**\n * Gets the d3 drag function\n * @return {Object} d3 drag\n */\nconst getD3Drag = () => d3drag;\n\nconst getSmartComputedStyle = (group, css) => {\n let textEl;\n const testText = 'W';\n const mandatoryStyle = {\n 'fill-opacity': 0\n };\n const className = typeof css === 'string' ? css : (css instanceof Array ? css.join(' ') : undefined);\n\n if (group.node() instanceof HTMLElement) {\n textEl = group.append('div').html(testText);\n } else {\n textEl = group.append('text').text(testText);\n }\n\n if (className) {\n textEl.attr('class', className);\n } else if (typeof css === 'object') {\n delete css['fill-opacity'];\n mergeRecursive(mandatoryStyle, css);\n }\n\n textEl.style(mandatoryStyle);\n\n const computedStyle = window.getComputedStyle(textEl.node());\n const styleForSmartLabel = {\n fontSize: computedStyle.fontSize,\n fontFamily: computedStyle.fontFamily,\n fontWeight: computedStyle.fontWeight,\n fontStyle: computedStyle.fontStyle\n };\n\n textEl.remove();\n\n return styleForSmartLabel;\n};\n\nconst hasTouch = () => 'ontouchstart' in document.documentElement;\n\nexport {\n hasTouch,\n selectElement,\n makeElement,\n applyStyle,\n addClass,\n removeClass,\n appendElement,\n setAttrs,\n setStyles,\n createElement,\n createElements,\n clipElement,\n getElementsByClassName,\n getMousePos,\n getEvent,\n getD3Drag,\n getSmartComputedStyle,\n getClientPoint\n};\n","/**\n * This class represents a selection applied on a data array.\n *\n * @class Selection\n */\nclass Selection {\n /**\n * Creates an instance of Selection.\n * @param {Array} data Array of DataObjects.\n * @memberof Selection\n */\n constructor () {\n this._data = [];\n // // map of id to data\n this._idMap = {};\n\n this._mode = '';\n // data.forEach((item, idx) => {\n // const index = item.id || idx;\n // this._idMap[index] = item;\n // });\n // // array to store data in enter phase\n this._enterdata = [];\n // // array to store data in exit phase\n this._exitdata = [];\n }\n /**\n * Gets the object bound to a class\n *\n * @return {Object} current data set bound to the class\n * @memberof Selection\n */\n getObjects () {\n return Object.keys(this._idMap).map(e => this._idMap[e]);\n }\n\n /**\n * This method is used to supply seed data to a selection.\n *\n * @param {Array} newData Seed data to create the enter selection.\n * @param {Functon | undefined } idGetter This function is used to uniqely identify a data entry.\n * @return {Selection} Modified selection.\n * @memberof Selection\n */\n data (newData, idGetter) {\n if (idGetter) {\n this._data = [];\n this._idGetter = idGetter;\n const tempMap = {};\n\n newData.forEach((...params) => {\n const index = idGetter(...params);\n tempMap[index] = params[0];\n });\n // check if any data items have been removed\n const purgedIds = [];\n\n Object.keys(this._idMap).forEach((id) => {\n if (!tempMap[id]) {\n purgedIds.push(id);\n }\n });\n\n Object.keys(tempMap).forEach((id) => {\n if (!this._idMap[id]) {\n this._enterdata.push(tempMap[id]);\n } else {\n this._idMap[id] = tempMap[id];\n this._data.push(tempMap[id]);\n }\n });\n // move the purged items to exit selection\n purgedIds.forEach((id) => {\n const purged = this._idMap[id];\n this._exitdata.push(purged);\n // this._data = this._data.slice(id, 1);\n delete this._idMap[id];\n });\n // this._data = this._data.slice(temp, this._data.length);\n\n return this;\n }\n // no id getter supplied so use indices\n if (newData.length > this._data.length) {\n const startIdx = this._data.length;\n for (let i = startIdx; i < newData.length; i += 1) {\n this._enterdata.push(newData[i]);\n }\n } else {\n // push to exit selection\n const temp = newData.length;\n for (let i = temp; i < this._data.length; i += 1) {\n const purged = this._data[i];\n delete this._idMap[purged.id];\n this._exitdata.push(purged);\n }\n this._data = this._data.slice(temp, this._data.length);\n }\n return this;\n }\n\n /**\n * Applies the supplied callback to each data element\n * and returns a new selection.\n *\n * @param {Function} callback Callback to execute on each item.\n * @return {Selection} New selection with data created using callback.\n * @memberof EnterSelection\n */\n append (callback) {\n this[`_${this._mode}data`].forEach((...params) => {\n const data = params[0];\n const id = this._idGetter ? this._idGetter(...params) : (data.id || params[1]);\n this._idMap[id] = callback(...params);\n });\n this._mode = '';\n return this;\n }\n\n /**\n * This method returns an enter selection that\n * allows or update operations.\n *\n * @return {EnterSelection} Instance of enter selection.\n * @memberof Selection\n */\n enter () {\n this._mode = 'enter';\n return this;\n // return new EnterSelection(this._enterdata, this._idMap, this._idGetter);\n }\n\n /**\n * This method is used to set key value pairs\n * on data objects.\n *\n * @param {string} key Name of property.\n * @param {any} value Value of property.\n * @return {Selection} Modified selection.\n * @memberof Selection\n */\n attr (key, value) {\n this._data.forEach(item => item.attr(key, value));\n return this;\n }\n\n /**\n * This method merges the data of one selection with another.\n *\n * @param {Selection} selection Instance of selection.\n * @return {Selection} Modified selection.\n * @memberof Selection\n */\n merge (selection) {\n selection._data.forEach((...params) => {\n const id = this._idGetter ? this._idGetter(...params) : (params[0].id || params[1]);\n this._idMap[id] = params[0];\n this._data.push(params[0]);\n });\n // reset enter selection\n this._enterdata = [];\n return this;\n }\n\n /**\n * Returns a selection with exit data.\n *\n * @return {Selection} Instance of selection.\n * @memberof Selection\n */\n exit () {\n this._mode = 'exit';\n // const exitdata = this._exitdata;\n // const exitSelection = new Selection(exitdata);\n // this._exitdata = [];\n return this;\n }\n\n each (fn) {\n Object.keys(this._idMap).forEach((e) => {\n fn(this._idMap[e]);\n });\n return this;\n }\n\n map (fn) {\n Object.keys(this._idMap).forEach((...params) => {\n this._idMap[params[0]] = fn(this._idMap[params[0]], ...params);\n });\n return this;\n }\n\n /**\n * Executes the cleanup operation associated with data objets.\n *\n * @memberof Selection\n */\n remove () {\n // do cleanup on DDO's\n const data = this[`_${this._mode}data`];\n\n data.forEach(item => item.remove());\n if (this._mode === '') {\n this.each(e => e.remove());\n }\n this[`_${this._mode}data`] = [];\n this._mode = '';\n }\n}\n\nexport default Selection;\n","import { getUniqueId } from '../index';\n/**\n * Represents the base class that all objects that form\n * the data for a selection must inherit from.\n *\n * @class DataObject\n */\nclass DataObject {\n/**\n * Creates an instance of DataObject.\n * @memberof DataObject\n */\n constructor () {\n this._id = getUniqueId();\n }\n /**\n * Returns the id.\n *\n * @readonly\n * @memberof DataObject\n */\n get id () {\n return this._id;\n }\n\n /**\n * Sets the value corresponding to supplied key.\n *\n * @param {string} key The property name.\n * @param {any} value Value associated with prop.\n * @memberof DataObject\n */\n attr (key, value) {\n this[key] = value;\n }\n\n /**\n * Clean up code to be executed by each object.\n *\n * @override\n * @memberof DataObject\n */\n remove () {\n // cleanup\n }\n}\n\nexport default DataObject;\n","const events = [\n 'initialized',\n 'beforeupdate',\n 'updated',\n 'beforedraw',\n 'drawn',\n 'beforeremove',\n 'removed'\n];\n\nconst compositions = [\n 'canvas',\n 'unit',\n 'layer',\n 'axis',\n 'facet-headers',\n 'legend',\n 'caption'\n];\n\nconst EVENT_LIST = [];\n\ncompositions.forEach((composition) => {\n events.forEach((event) => {\n EVENT_LIST.push(`${composition}.${event}`);\n });\n});\n\nexport default EVENT_LIST;\n","import EVENT_LIST from './event-list';\n\n/**\n * At first call it accepts one function\n * calling it second time accepts notification object.\n * notification object then called with first accepted function\n *\n * @param {Function} resolveFn a promise's resolve function\n * @return {Function} a function to accept notification object\n */\nconst resolver = resolveFn => notification => resolveFn(notification);\n\n/**\n * Checks if the property string is present in the source object\n *\n * @param {Object} source source object whom you want to check the property\n * @param {string} property key name that need to be checked\n * @return {boolean} returns true if the property found in the source object\n */\nconst hasOwn = (source, property) => Object.prototype.hasOwnProperty.call(source, property);\n\n/**\n * LifeCycleManager which goes as a dependendecy to a muze\n * it accepts notification from the entire library throughout\n * the exeecution life\n *\n * @export\n * @class LifeCycleManager\n */\nexport default class LifeCycleManager {\n\n /**\n * Creates an instance of LifeCycleManager.\n * @memberof LifeCycleManager\n */\n constructor () {\n this._eventList = EVENT_LIST;\n this._promises = new Map();\n this._notifiers = {};\n this._lifeCycles = {};\n this._unreleasedLifeCycles = {};\n this._boot();\n }\n\n /**\n * Fills all the notifiers with resolver callback\n *\n * @memberof LifeCycleManager\n */\n _boot () {\n this._notifiers = this._eventList.reduce((acc, name) => {\n acc[name] = resolver;\n return acc;\n }, {});\n this._preparePromises();\n }\n\n /**\n * Public method which gives the promise corresponding\n * to the event name\n *\n * @param {string} eventName name of the event like `canvas.drawn`\n * @return {promise} promise that is passed to the user\n * @memberof LifeCycleManager\n */\n retrieve (eventName) {\n return this._promises.get(eventName);\n }\n\n /**\n * Creates a promise that will be passed to user's callback\n *\n * @param {string} eventName name of the event like `canvas.drawn`\n * @return {promise} a pending promise waiting for resolve to be called\n * @memberof LifeCycleManager\n */\n _makeNotifierPromise (eventName) {\n return new Promise((resolve) => {\n this._notifiers[eventName] = this._notifiers[eventName](resolve);\n });\n }\n\n /**\n * Prepares the promise map with pending promises\n * all the promises are in a pending state where their's\n * resolve function waiting to be called with notification object\n * @memberof LifeCycleManager\n */\n _preparePromises () {\n this._eventList.forEach((eventName) => {\n this._promises.set(eventName, this._makeNotifierPromise(eventName));\n });\n }\n\n /**\n * Resolves the promise with notification object\n *\n * @param {string} eventName name of the event in the system\n * @param {Object} notification notification object\n * @param {string} notification.formalName name of the sender creating the notification\n * @param {Object} notification.client instance or array of instances sending the notification\n * @param {string} notification.action the stage name when the event happened like `beforedraw`\n *\n * @memberof LifeCycleManager\n */\n _resolvePromise (eventName, notification) {\n this._notifiers[eventName](notification);\n }\n\n /**\n * Public method which is being called by different\n * subcompoents of the system at different execution atages\n * @param {Object} notification notification object\n * @param {string} notification.formalName name of the sender creating the notification\n * @param {Object} notification.client instance or array of instances sending the notification\n * @param {string} notification.action the stage name when the event happened like `beforedraw`\n * @memberof LifeCycleManager\n */\n notify (notification) {\n // get the composition name from notification\n // or from static formalName() method\n const composition = notification.formalName || notification.client.constructor.formalName();\n notification.formalName = composition;\n this._releasePromisesFromCache();\n this._notify(composition, notification);\n }\n\n /**\n * Notify user the with promsie in a callback\n * if callback not found then cache it\n *\n * @param {string} composition\n * @param {Object} notification notification object\n * @param {string} notification.formalName name of the sender creating the notification\n * @param {Object} notification.client instance or array of instances sending the notification\n * @param {string} notification.action the stage name when the event happened like `beforedraw`\n * @memberof LifeCycleManager\n */\n _notify (composition, notification) {\n const stage = notification.action;\n const eventName = `${composition}.${stage}`;\n\n // resolves promise with the notification object\n this._resolvePromise(eventName, notification);\n\n // get the promise from the promise map\n const promise = this.retrieve(eventName);\n\n if (this._lifeCycles[composition]) {\n if (this._lifeCycles[composition][stage]) {\n // if user given call back exists, then call with promise\n this._callLifeCycleCallback(composition, stage, promise);\n } else {\n // otherwise cache the promise\n this._cachePromise(composition, stage, promise);\n }\n } else {\n this._cachePromise(composition, stage, promise);\n }\n }\n\n /**\n * Calls the user's callback with callback\n *\n * @param {string} composition name of the compositon like `canvas`\n * @param {string} stage the stage name when the event happened like `beforedraw`\n * @param {promise} promise promise that is passed to the user\n * @memberof LifeCycleManager\n */\n _callLifeCycleCallback (composition, stage, promise) {\n const eventName = `${composition}.${stage}`;\n this._lifeCycles[composition][stage](promise);\n this._resetTargetPromise(eventName);\n }\n\n /**\n * Try to clear the cached promsies once we have\n * macthed callbacks from the user\n *\n * @memberof LifeCycleManager\n */\n _releasePromisesFromCache () {\n const compositions = Object.keys(this._unreleasedLifeCycles);\n compositions.forEach((composition) => {\n const stages = Object.keys(this._unreleasedLifeCycles[composition]);\n stages.forEach((stage) => {\n if (this._lifeCycles[composition]) {\n if (this._lifeCycles[composition][stage]) {\n // take the promise from unreleased lifeCycles\n const promise = this._unreleasedLifeCycles[composition][stage];\n // call the user given callback with that promise\n this._callLifeCycleCallback(composition, stage, promise);\n // delete promise from unreleased lifeCycles\n delete this._unreleasedLifeCycles[composition][stage];\n }\n }\n });\n });\n }\n\n /**\n * Cache the promise in the map. This cache\n * then get consumed if we get user callbacks\n * @param {string} composition name of the compositon like `canvas`\n * @param {string} stage the stage name when the event happened like `beforedraw`\n * @param {promise} promise promise that is passed to the user\n * @memberof LifeCycleManager\n */\n _cachePromise (composition, stage, promise) {\n if (!hasOwn(this._unreleasedLifeCycles, composition)) {\n this._unreleasedLifeCycles[composition] = {};\n }\n\n if (!hasOwn(this._unreleasedLifeCycles[composition], stage)) {\n this._unreleasedLifeCycles[composition][stage] = {};\n }\n this._unreleasedLifeCycles[composition][stage] = promise;\n }\n\n /**\n * It register's the callbacks gievn the user\n *\n * @param {Object} [lifeCycles={}] a object with list of callbacks\n * @memberof LifeCycleManager\n */\n register (lifeCycles = {}) {\n this._lifeCycles = lifeCycles;\n // as we get all the callbacks, try to call them\n // from unreleased promise map\n this._releasePromisesFromCache();\n }\n\n /**\n * Reset the promise into pending state\n *\n * @param {string} eventName name of the event happening\n * @memberof LifeCycleManager\n */\n _resetTargetPromise (eventName) {\n setTimeout(() => {\n this._notifiers[eventName] = resolver;\n this._promises.set(eventName, this._makeNotifierPromise(eventName));\n }, 0);\n }\n}\n","import LifeCycleManager from './lifecycle-manager';\n\nexport default LifeCycleManager;\n","export const DRAG = 'drag';\nexport const HOVER = 'hover';\nexport const SELECTIONDRAG = 'selectiondrag';\nexport const CLICK = 'click';\nexport const LONGTOUCH = 'longtouch';\nexport const TOUCHDRAG = 'touchdrag';\nexport const ALL_ACTIONS = '*';\n","const SELECTION_NEW_ENTRY = 1;\nconst SELECTION_NEW_EXIT = -1;\nconst SELECTION_NULL = 0;\nconst SELECTION_OLD_ENTRY = 2;\nconst SELECTION_OLD_EXIT = -2;\n\nexport {\n SELECTION_NEW_ENTRY,\n SELECTION_NEW_EXIT,\n SELECTION_NULL,\n SELECTION_OLD_ENTRY,\n SELECTION_OLD_EXIT\n};\n","import {\n SELECTION_NEW_ENTRY, SELECTION_NEW_EXIT, SELECTION_NULL, SELECTION_OLD_ENTRY, SELECTION_OLD_EXIT\n} from '../enums/selection';\n/* eslint-disable guard-for-in */\n\n/**\n * This component is used to keep track of the row tuples of the data which gets added and removed.\n * @class SelectionSet\n */\nclass SelectionSet {\n /**\n * Creates an instance of selection set\n * @param {Array.} completeSet Set of unique ids.\n */\n constructor (completeSet, _volatile) {\n this.completeSet = completeSet;\n this._set = completeSet.reduce((obj, key) => {\n obj[key] = SELECTION_NULL;\n return obj;\n }, {});\n this._volatile = _volatile;\n this._completeSetCount = completeSet.length;\n this._lockedSelection = {};\n this._resetted = true;\n }\n\n /**\n * Adds a set of ids to the selection set.\n * @param {Array.} ids Array of unique ids\n * @return {SelectionSet} Instance of selection set.\n */\n add (ids) {\n this._resetted = false;\n\n const set = this._set;\n // from exitset to entryset\n ids.forEach((i) => {\n set[i] = SELECTION_NEW_ENTRY;\n });\n\n for (const key in set) {\n if (set[key] !== SELECTION_NEW_ENTRY && set[key] !== SELECTION_OLD_ENTRY) {\n set[key] = set[key] < 0 ? SELECTION_OLD_EXIT : SELECTION_NEW_EXIT;\n }\n }\n return this;\n }\n\n /**\n * Adds a set of ids to the selection set.\n * @param {Array.} ids Array of unique ids\n * @return {SelectionSet} Instance of selection set.\n */\n update (ids) {\n const set = this._set;\n // from exitset to entryset\n ids.forEach((i) => {\n set[i] = SELECTION_OLD_ENTRY;\n });\n\n return this;\n }\n\n /**\n * Adds a set of ids to the selection set.\n * @param {Array.} ids Array of unique ids\n * @return {SelectionSet} Instance of selection set.\n */\n updateEntry () {\n const set = this._set;\n\n // from exitset to entryset\n for (const key in set) {\n set[key] = set[key] === SELECTION_NEW_ENTRY ? SELECTION_OLD_ENTRY : set[key];\n }\n return this;\n }\n\n /**\n * Adds a set of ids to the selection set.\n * @param {Array.} ids Array of unique ids\n * @return {SelectionSet} Instance of selection set.\n */\n updateExit () {\n const set = this._set;\n // from exitset to entryset\n for (const key in set) {\n set[key] = set[key] === SELECTION_NEW_EXIT ? SELECTION_OLD_EXIT : set[key];\n }\n return this;\n }\n\n /**\n * Removes the ids from the selection set.\n * @param {Array.} ids Array of unique ids\n * @return {SelectionSet} Instance of selection set\n */\n remove (ids) {\n this._resetted = false;\n\n const set = this._set;\n ids.forEach((i) => {\n set[i] = SELECTION_NEW_EXIT;\n });\n\n for (const key in set) {\n if (set[key] !== SELECTION_NEW_EXIT && set[key] !== SELECTION_OLD_EXIT) {\n set[key] = set[key] === 0 ? SELECTION_NEW_ENTRY : SELECTION_OLD_ENTRY;\n }\n }\n\n return this;\n }\n\n getSets () {\n const set = this._set;\n const retObj = {\n entrySet: [[], []],\n exitSet: [[], []],\n completeSet: []\n };\n\n for (const key in set) {\n if (set[key] > 0) {\n set[key] === SELECTION_OLD_ENTRY && retObj.entrySet[0].push(key);\n set[key] === SELECTION_NEW_ENTRY && retObj.entrySet[1].push(key);\n } else if (set[key] < 0) {\n set[key] === SELECTION_OLD_EXIT && retObj.exitSet[0].push(key);\n set[key] === SELECTION_NEW_EXIT && retObj.exitSet[1].push(key);\n }\n retObj.completeSet.push(key);\n }\n\n ['entrySet', 'exitSet'].forEach((type) => {\n retObj[type] = retObj[type].map(e => e.map(Number));\n });\n retObj.completeSet = retObj.completeSet.map(Number);\n\n return retObj;\n }\n\n /**\n * Resets the selection set to initial state. It sets the value of every unique id value to\n * null in the selection set.\n * @return {SelectionSet} Instance of selection set.\n */\n reset (ids) {\n const set = this._set;\n if (ids) {\n ids.forEach((i) => {\n set[i] = SELECTION_NULL;\n });\n } else {\n const lockedSel = this._lockedSelection;\n for (const key in set) {\n if (!(key in lockedSel)) {\n set[key] = SELECTION_NULL;\n }\n }\n }\n this._resetted = true;\n return this;\n }\n\n /**\n * Gets the set of ids which are added in the selection set.\n * @return {Array.} Array of unique ids\n */\n getEntrySet () {\n const set = this._set;\n const addSet = [];\n\n for (const key in set) {\n set[key] === SELECTION_NEW_ENTRY && addSet.push(key);\n }\n\n return addSet;\n }\n\n /**\n * Returns a set of unique ids which are already present in entry set\n * @param {Array} addSet Array of unique ids which are added\n *\n * @return {Array} Array of unique ids which are already in old entry set or new entry set\n */\n getExistingEntrySet (addSet) {\n const set = this._set;\n return addSet.filter(d => set[d] === SELECTION_NEW_ENTRY || set[d] === SELECTION_OLD_ENTRY);\n }\n\n getExistingExitSet (removeSet) {\n const set = this._set;\n return removeSet.filter(d => set[d] === SELECTION_NEW_EXIT || set[d] === SELECTION_OLD_EXIT);\n }\n\n /**\n * Gets the set of ids which are added in the selection set.\n * @return {Array.} Array of unique ids\n */\n getOldEntry () {\n const set = this._set;\n const updateSet = [];\n\n for (const key in set) {\n set[key] === SELECTION_OLD_ENTRY && updateSet.push(key);\n }\n return updateSet;\n }\n\n /**\n * Gets the set of ids which are added in the selection set.\n * @return {Array.} Array of unique ids\n */\n getOldExit () {\n const set = this._set;\n const updateSet = [];\n\n for (const key in set) {\n set[key] === SELECTION_OLD_EXIT && updateSet.push(key);\n }\n\n return updateSet;\n }\n\n /**\n * Gets the set of ids which are in the remove set.\n * @return {Array.} Array of unique ids\n */\n getExitSet () {\n const set = this._set;\n const removeSet = [];\n\n for (const key in set) {\n set[key] === SELECTION_NEW_EXIT && removeSet.push(key);\n }\n return removeSet;\n }\n\n getCompleteSet () {\n const set = this._set;\n const completeSet = [];\n\n for (const key in set) {\n completeSet.push(key);\n }\n\n return completeSet;\n }\n\n getCompleteSetCount () {\n return this._completeSetCount;\n }\n\n resetted () {\n return this._resetted;\n }\n\n /**\n * Swaps the add set and remove set in the selection set.\n * @return {SelectionSet} Instance of selection set.\n */\n toggle () {\n const set = this._set;\n\n for (const key in set) {\n if (set[key] === SELECTION_NEW_ENTRY) {\n set[key] = SELECTION_NEW_EXIT;\n } else if (set[key] === SELECTION_NEW_EXIT) {\n set[key] = SELECTION_NEW_ENTRY;\n } else if (set[key] === SELECTION_OLD_ENTRY) {\n set[key] = SELECTION_OLD_EXIT;\n } else {\n set[key] = SELECTION_OLD_ENTRY;\n }\n }\n\n return this;\n }\n}\n\nexport default SelectionSet;\n","import { clone } from 'muze-utils';\nimport * as SELECTION from '../enums/selection';\n\nexport const initializeSideEffects = (context, sideEffects) => {\n const sideEffectsMap = context._sideEffects;\n\n sideEffects = sideEffects instanceof Array ? sideEffects : Object.values(sideEffects);\n sideEffects.forEach((SideEffect) => {\n const sideEffectInstance = sideEffectsMap[SideEffect.formalName()];\n sideEffectsMap[SideEffect.formalName()] = sideEffectInstance || new SideEffect(context);\n });\n return sideEffectsMap;\n};\n\nexport const initializeBehaviouralActions = (context, actions) => {\n const dispatchableBehaviours = {};\n\n actions = actions instanceof Array ? actions : Object.values(actions);\n actions.forEach((Action) => {\n dispatchableBehaviours[Action.formalName()] = new Action(context);\n });\n return dispatchableBehaviours;\n};\n\nexport const initializePhysicalActions = (context, actions) => {\n const physicalActions = {};\n\n for (const name in actions) {\n if (!({}).hasOwnProperty.call(name, actions)) {\n physicalActions[name] = actions[name](context);\n }\n }\n return physicalActions;\n};\n\nexport const changeSideEffectAvailability = (context, fn, toEnable) => {\n const sideEffects = context.sideEffects();\n for (const key in sideEffects) {\n if ({}.hasOwnProperty.call(sideEffects, key)) {\n let change = true;\n if (fn && fn(key) === false) {\n change = false;\n }\n if (change) {\n toEnable ? sideEffects[key].enable() : sideEffects[key].disable();\n }\n }\n }\n};\n\nexport const getMergedSet = set => [...new Set([...set[0], ...set[1]])];\n\nexport const getSourceFields = (propagationInf, criteria = {}) => {\n const sourceIdentifiers = propagationInf.sourceIdentifiers;\n let sourceFields;\n if (sourceIdentifiers) {\n sourceFields = sourceIdentifiers.getSchema().map(d => d.name);\n } else if (criteria instanceof Array) {\n sourceFields = criteria[0];\n } else {\n sourceFields = Object.keys(criteria || {});\n }\n return sourceFields;\n};\n\nconst conditionsMap = {\n newEntry: [SELECTION.SELECTION_NEW_ENTRY],\n oldEntry: [SELECTION.SELECTION_OLD_ENTRY],\n mergedEnter: [SELECTION.SELECTION_NEW_ENTRY, SELECTION.SELECTION_OLD_ENTRY],\n newExit: [SELECTION.SELECTION_NEW_EXIT],\n oldExit: [SELECTION.SELECTION_OLD_EXIT],\n mergedExit: [SELECTION.SELECTION_NEW_EXIT, SELECTION.SELECTION_OLD_EXIT],\n complete: []\n};\n\nexport const getModelFromSet = (type, model, set) => {\n if (model) {\n return model.select((fields, i) =>\n (conditionsMap[type].some(condition => set[i] === condition)), {\n saveChild: false\n });\n }\n return null;\n};\n\nexport const getSetInfo = (type, set, config) => {\n let model = null;\n const filteredDataModel = config.filteredDataModel;\n const selectionSet = config.selectionSet;\n if (!config.propagationData) {\n if (selectionSet.resetted()) {\n model = null;\n } else {\n model = getModelFromSet(type, config.dataModel, config.selectionSet._set);\n }\n } else if (filteredDataModel) {\n model = type === 'mergedEnter' ? filteredDataModel[0] : filteredDataModel[1];\n }\n return {\n uids: set,\n length: set.length,\n model\n };\n};\n\nexport const getSideEffects = (behaviour, behaviourEffectMap) => {\n const sideEffects = [];\n for (const key in behaviourEffectMap) {\n const behaviours = key.split(',');\n const found = behaviours.some(d => d === behaviour);\n if (found) {\n sideEffects.push({\n effects: behaviourEffectMap[key],\n behaviours\n });\n }\n }\n return sideEffects;\n};\n\nexport const unionSets = (context, behaviours) => {\n let combinedSet = {};\n const models = {\n mergedEnter: null,\n mergedExit: null\n };\n behaviours.forEach((behaviour) => {\n const entryExitSet = context._entryExitSet[behaviour];\n if (entryExitSet) {\n combinedSet = Object.assign(combinedSet, clone(entryExitSet));\n ['mergedEnter', 'mergedExit'].forEach((type) => {\n const model = entryExitSet[type].model;\n let existingModel = models[type];\n if (!existingModel) {\n existingModel = models[type] = model;\n } else {\n existingModel = models[type] = model.union(existingModel);\n }\n combinedSet[type].model = existingModel;\n });\n }\n });\n return combinedSet;\n};\n","import {\n mergeRecursive,\n hasTouch,\n filterPropagationModel,\n FieldType,\n selectElement,\n isSimpleObject\n} from 'muze-utils';\nimport { ALL_ACTIONS } from './enums/actions';\nimport SelectionSet from './selection-set';\nimport {\n initializeBehaviouralActions,\n initializeSideEffects,\n changeSideEffectAvailability,\n initializePhysicalActions,\n unionSets,\n getSideEffects\n} from './helper';\n\n/**\n * Relient firebolt is responsible for dispatching behaviours. It has only behaviours which can be\n * dispatched without any physical action being triggered.\n */\nexport default class Firebolt {\n constructor (context, actions, sideEffects, behaviourEffectMap) {\n this.context = context;\n this._sideEffectDefinitions = {};\n this._sideEffects = {};\n this._propagationInf = {};\n this._actions = {\n behavioural: {},\n physical: {}\n };\n this._selectionSet = {};\n this._volatileSelectionSet = {};\n this._propagationFields = {};\n this._sourceSideEffects = {\n selectionBox: () => false\n };\n this._propagationBehaviourMap = {};\n this._sourceBehaviours = {};\n this._actionBehaviourMap = {};\n this._config = {};\n this._behaviourEffectMap = {};\n this._entryExitSet = {};\n this._actionHistory = {};\n this._queuedSideEffects = {};\n this._mappedActions = {};\n\n this.mapSideEffects(behaviourEffectMap);\n this.registerBehaviouralActions(actions.behavioural);\n this.registerSideEffects(sideEffects);\n this.registerPhysicalBehaviouralMap(actions.physicalBehaviouralMap);\n this.registerPhysicalActions(actions.physical);\n }\n\n config (...config) {\n if (config.length) {\n const conf = this._config = mergeRecursive(this._config, config[0]);\n const sideEffects = this.sideEffects();\n for (const key in sideEffects) {\n if ({}.hasOwnProperty.call(sideEffects, key)) {\n const sideEffectConf = conf[key];\n sideEffectConf && sideEffects[key].config(sideEffectConf);\n }\n }\n return this;\n }\n return this._config;\n }\n\n mapSideEffects (behEffectMap) {\n const behaviourEffectMap = this._behaviourEffectMap;\n for (const key in behEffectMap) {\n if ({}.hasOwnProperty.call(behEffectMap, key)) {\n const sideEffects = behEffectMap[key] || [];\n let preventDefaultActions = false;\n let effectNames;\n if (isSimpleObject(sideEffects)) {\n effectNames = sideEffects.effects;\n preventDefaultActions = sideEffects.preventDefaultActions;\n } else {\n effectNames = sideEffects;\n }\n !behaviourEffectMap[key] && (behaviourEffectMap[key] = []);\n this._behaviourEffectMap[key] = [...new Set(preventDefaultActions ? effectNames :\n [...behaviourEffectMap[key], ...effectNames])];\n }\n }\n return this;\n }\n\n registerBehaviouralActions (actions) {\n const behaviours = initializeBehaviouralActions(this, actions);\n this.prepareSelectionSets(behaviours);\n Object.assign(this._actions.behavioural, behaviours);\n return this;\n }\n\n prepareSelectionSets () {\n return this;\n }\n\n registerSideEffects (sideEffects) {\n for (const key in sideEffects) {\n this._sideEffectDefinitions[sideEffects[key].formalName()] = sideEffects[key];\n }\n return this;\n }\n\n applySideEffects (sideEffects, selectionSet, payload) {\n const sideEffectStore = this.sideEffects();\n const actionHistory = this._actionHistory;\n const queuedSideEffects = this._queuedSideEffects;\n sideEffects.forEach((sideEffect) => {\n let options;\n let name;\n const effects = sideEffect.effects;\n const behaviours = sideEffect.behaviours;\n const combinedSet = unionSets(this, behaviours, selectionSet);\n effects.forEach((effect) => {\n if (typeof effect === 'object') {\n name = effect.name;\n options = effect.options;\n } else {\n name = effect;\n }\n\n const sideEffectInstance = sideEffectStore[name];\n if (sideEffectInstance.isEnabled()) {\n if (!sideEffectInstance.constructor.mutates() &&\n Object.values(actionHistory).some(d => d.isMutableAction)) {\n queuedSideEffects[`${name}-${behaviours.join()}`] = {\n name,\n params: [combinedSet, payload, options]\n };\n } else {\n this.dispatchSideEffect(name, combinedSet, payload, options);\n }\n }\n });\n });\n return this;\n }\n\n dispatchSideEffect (name, selectionSet, payload, options = {}) {\n const sideEffectStore = this.sideEffects();\n const sideEffect = sideEffectStore[name];\n let disable = false;\n if (options.filter && options.filter(sideEffect)) {\n disable = true;\n }\n !disable && sideEffectStore[name].apply(selectionSet, payload, options);\n }\n\n registerPropagationBehaviourMap (map) {\n this._propagationBehaviourMap = Object.assign(this._propagationBehaviourMap, map || {});\n return this;\n }\n\n dispatchBehaviour (behaviour, payload, propagationInfo = {}) {\n const propagate = propagationInfo.propagate !== undefined ? propagationInfo.propagate : true;\n const behaviouralActions = this._actions.behavioural;\n const action = behaviouralActions[behaviour];\n const behaviourEffectMap = this._behaviourEffectMap;\n const sideEffects = getSideEffects(behaviour, behaviourEffectMap);\n this._propagationInf = propagationInfo;\n\n if (action) {\n const selectionSet = action.dispatch(payload);\n const propagationSelectionSet = this.getPropagationSelectionSet(selectionSet);\n this._entryExitSet[behaviour] = propagationSelectionSet;\n const shouldApplySideEffects = this.shouldApplySideEffects(propagate);\n\n if (propagate) {\n this.propagate(behaviour, payload, selectionSet.find(d => d.sourceSelectionSet), sideEffects);\n }\n if (shouldApplySideEffects) {\n const applicableSideEffects = this.getApplicableSideEffects(sideEffects, payload, propagationInfo);\n this.applySideEffects(applicableSideEffects, propagationSelectionSet, payload);\n }\n }\n\n return this;\n }\n\n getPropagationSelectionSet (selectionSet) {\n return selectionSet.find(d => !d.sourceSelectionSet);\n }\n\n shouldApplySideEffects () {\n return true;\n }\n\n changeBehaviourStateOnPropagation (behaviour, value) {\n if (value instanceof Function) {\n this._sourceBehaviours[behaviour] = value;\n } else {\n this._sourceBehaviours[behaviour] = () => value;\n }\n return this;\n }\n\n changeSideEffectStateOnPropagation (sideEffect, value) {\n if (value instanceof Function) {\n this._sourceSideEffects[sideEffect] = value;\n } else {\n this._sourceSideEffects[sideEffect] = () => value;\n }\n }\n\n propagate () {\n return this;\n }\n\n sideEffects (...sideEffects) {\n if (sideEffects.length) {\n this._sideEffects = sideEffects[0];\n return this;\n }\n return this._sideEffects;\n }\n\n enableSideEffects (fn) {\n changeSideEffectAvailability(this, fn, true);\n return this;\n }\n\n disableSideEffects (fn) {\n changeSideEffectAvailability(this, fn, false);\n return this;\n }\n\n dissociateBehaviour (behaviour, physicalAction) {\n const actionBehaviourMap = this._actionBehaviourMap;\n for (const key in actionBehaviourMap) {\n if (key === physicalAction) {\n const behaviourMap = actionBehaviourMap[key];\n behaviourMap.behaviours = behaviourMap.behaviours.filter(d => d !== behaviour);\n }\n }\n\n return this;\n }\n\n dissociateSideEffect (sideEffect, behaviour) {\n const behaviourEffectMap = this._behaviourEffectMap;\n behaviourEffectMap[behaviour] = behaviourEffectMap[behaviour].filter(d => (d.name || d) !== sideEffect);\n return this;\n }\n\n getApplicableSideEffects (sideEffects) {\n return sideEffects;\n }\n\n attachPropagationListener (dataModel) {\n dataModel.unsubscribe('propagation');\n dataModel.on('propagation', this.onDataModelPropagation());\n return this;\n }\n\n onDataModelPropagation () {\n return (propValue) => {\n const payload = propValue.payload;\n const action = payload.action;\n\n this.dispatchBehaviour(action, payload, {\n propagate: false\n });\n };\n }\n\n createSelectionSet (uniqueIds, behaviouralActions) {\n const behaviours = behaviouralActions || this._actions.behavioural;\n const selectionSet = this._selectionSet;\n const volatileSelectionSet = this._volatileSelectionSet;\n\n for (const key in behaviours) {\n if ({}.hasOwnProperty.call(behaviours, key)) {\n selectionSet[key] = new SelectionSet(uniqueIds);\n volatileSelectionSet[key] = new SelectionSet(uniqueIds, true);\n }\n }\n this._volatileSelectionSet = volatileSelectionSet;\n this.selectionSet(selectionSet);\n return this;\n }\n\n selectionSet (...selectionSet) {\n if (selectionSet.length) {\n this._selectionSet = selectionSet[0];\n return this;\n }\n return this._selectionSet;\n }\n\n initializeSideEffects () {\n const sideEffectDefinitions = this._sideEffectDefinitions;\n this.sideEffects(initializeSideEffects(this, sideEffectDefinitions));\n return this;\n }\n\n registerPhysicalActions (actions) {\n const initedActions = initializePhysicalActions(this, actions);\n Object.assign(this._actions.physical, initedActions);\n return this;\n }\n\n propagateWith (action, fields, append = false) {\n const behaviouralActions = this._actions.behavioural;\n if (fields.length) {\n if (action === ALL_ACTIONS) {\n for (const key in behaviouralActions) {\n this._propagationFields[key] = {\n fields,\n append\n };\n }\n } else {\n this._propagationFields[action] = {\n fields,\n append\n };\n }\n return this;\n }\n return this._propagationFields;\n }\n\n /**\n * Map actions and behaviours\n * @return {Firebolt} Firebolt instance\n */\n mapActionsAndBehaviour () {\n const initedPhysicalActions = this._actions.physical;\n const map = this._actionBehaviourMap;\n const mappedActions = this._mappedActions;\n\n for (const action in map) {\n if (!({}).hasOwnProperty.call(action, map)) {\n let target;\n const mapObj = map[action];\n target = mapObj.target;\n const touch = mapObj.touch;\n if (!target) {\n target = this.context.getDefaultTargetContainer();\n }\n const bind = hasTouch() ? touch === true || touch === undefined : !touch;\n const keyName = `${action}-${mapObj.behaviours.join()}`;\n bind && !mappedActions[keyName] && this.bindActionWithBehaviour(initedPhysicalActions[action],\n target, mapObj.behaviours);\n mappedActions[keyName] = true;\n }\n }\n return this;\n }\n\n registerPhysicalBehaviouralMap (map) {\n Object.assign(this._actionBehaviourMap, map);\n return this;\n }\n\n /**\n * Binds a target element with an action.\n *\n * @param {Function} action Action method\n * @param {string} target Class name of element\n * @param {Array} behaviourList Array of behaviours\n * @return {FireBolt} Instance of firebolt\n */\n bindActionWithBehaviour (action, targets, behaviourList) {\n if (typeof (targets) === 'string') {\n targets = [targets];\n }\n targets.forEach((target) => {\n const mount = this.context.mount();\n const nodes = target.node instanceof Function ? target : selectElement(mount).selectAll(target);\n if (behaviourList.length && !nodes.empty()) {\n if (nodes instanceof Array) {\n nodes.forEach((node) => {\n action(selectElement(node), behaviourList);\n });\n } else {\n action(nodes, behaviourList);\n }\n }\n });\n return this;\n }\n\n getPropagationInf () {\n return this._propagationInf;\n }\n\n getAddSetFromCriteria (criteria, propagationInf = {}) {\n const context = this.context;\n const filteredDataModel = propagationInf.data ? propagationInf.data :\n context.getDataModelFromIdentifiers(criteria, 'all');\n const xFields = context.fields().x || [];\n const yFields = context.fields().y || [];\n const xMeasures = xFields.every(field => field.type() === FieldType.MEASURE);\n const yMeasures = yFields.every(field => field.type() === FieldType.MEASURE);\n return {\n model: filteredDataModel,\n uids: criteria === null ? null : (propagationInf.data ? filterPropagationModel(this.getFullData(),\n propagationInf.data[0], xMeasures && yMeasures).getData().uids : filteredDataModel[0].getData().uids)\n };\n }\n\n getSelectionSets (action) {\n const sourceId = this.context.id();\n const propagationInf = this._propagationInf || {};\n const propagationSource = propagationInf.sourceId;\n let applicableSelectionSets = [];\n if (propagationSource !== sourceId) {\n applicableSelectionSets = [this._volatileSelectionSet[action]];\n }\n\n if (propagationSource) {\n applicableSelectionSets.push(this.selectionSet()[action]);\n }\n return applicableSelectionSets;\n }\n\n getFullData () {\n return this.context.data();\n }\n\n resetted () {\n return this._resetted;\n }\n\n getEntryExitSet (behaviour) {\n return this._entryExitSet[behaviour];\n }\n}\n","import { getSetInfo, getMergedSet, getSourceFields } from '../../helper';\n\nexport default class GenericBehaviour {\n constructor (firebolt) {\n this.firebolt = firebolt;\n this._enabled = true;\n }\n\n dispatch (payload) {\n const criteria = payload.criteria;\n const firebolt = this.firebolt;\n const formalName = this.constructor.formalName();\n const selectionSets = firebolt.getSelectionSets(formalName);\n const {\n model: filteredDataModel,\n uids\n } = this.firebolt.getAddSetFromCriteria(criteria, this.firebolt.getPropagationInf());\n const entryExitSets = selectionSets.map((selectionSet) => {\n this.setSelectionSet(uids, selectionSet);\n return this.getEntryExitSet(selectionSet, filteredDataModel, payload);\n });\n\n return entryExitSets;\n }\n\n setSelectionSet () {\n return this;\n }\n\n getEntryExitSet (selectionSet, filteredDataModel, payload) {\n const {\n entrySet,\n exitSet,\n completeSet\n } = selectionSet.getSets();\n const propagationInf = this.firebolt.getPropagationInf();\n const dataModel = this.firebolt.getFullData();\n const setConfig = {\n isSourceFieldPresent: propagationInf.isSourceFieldPresent,\n dataModel,\n filteredDataModel,\n propagationData: propagationInf.data,\n selectionSet\n };\n\n return {\n entrySet: [getSetInfo('oldEntry', entrySet[0], setConfig),\n getSetInfo('newEntry', entrySet[1], setConfig)],\n exitSet: [getSetInfo('oldEntry', exitSet[0], setConfig),\n getSetInfo('newExit', exitSet[1], setConfig)],\n mergedEnter: getSetInfo('mergedEnter', getMergedSet(entrySet), setConfig),\n mergedExit: getSetInfo('mergedExit', getMergedSet(exitSet), setConfig),\n completeSet: getSetInfo('complete', completeSet, setConfig),\n isSourceFieldPresent: propagationInf.isSourceFieldPresent,\n fields: getSourceFields(propagationInf, payload.criteria),\n sourceSelectionSet: selectionSet._volatile === true\n };\n }\n\n static mutates () {\n return false;\n }\n\n enable () {\n this._enabled = true;\n }\n\n disable () {\n this._enabled = false;\n }\n\n isEnabled () {\n return this._enabled;\n }\n}\n\n","import GenericBehaviour from './generic';\nimport { getMergedSet } from '../../helper';\nimport * as SELECTION from '../../enums/selection';\n\nexport default class VolatileBehaviour extends GenericBehaviour {\n setSelectionSet (addSet, selectionSet) {\n if (addSet === null) {\n selectionSet.reset();\n } else if (addSet.length) {\n // new add set\n const existingAddSet = addSet.filter(d => selectionSet._set[d] === SELECTION.SELECTION_NEW_ENTRY\n || selectionSet._set[d] === SELECTION.SELECTION_OLD_ENTRY);\n selectionSet.updateExit();\n const { entrySet } = selectionSet.getSets();\n selectionSet.reset(getMergedSet(entrySet));\n selectionSet.add(addSet);\n selectionSet.update(existingAddSet);\n } else {\n selectionSet.remove(selectionSet.getCompleteSet());\n }\n }\n}\n","export const BRUSH = 'brush';\nexport const HIGHLIGHT = 'highlight';\nexport const TOOLTIP = 'tooltip';\nexport const FILTER = 'filter';\nexport const SELECT = 'select';\n","import VolatileBehaviour from './volatile';\nimport { HIGHLIGHT } from '../../enums/behaviours';\n\nexport default class HighlightBehaviour extends VolatileBehaviour {\n static formalName () {\n return HIGHLIGHT;\n }\n}\n","import VolatileBehaviour from './volatile';\nimport * as BEHAVIOURNAMES from '../../enums/behaviours';\n\n/**\n * This is the behaviour for brushing a region on the chart. It accepts a payload\n * which contains the x and y range of the data and other configuration. It will then\n * create a selection box from the range and select the points which fall within the range.\n */\nexport default class BrushBehaviour extends VolatileBehaviour {\n static formalName () {\n return BEHAVIOURNAMES.BRUSH;\n }\n}\n","import VolatileBehaviour from './volatile';\nimport { FILTER } from '../../enums/behaviours';\n\nexport default class FilterBehaviour extends VolatileBehaviour {\n static formalName () {\n return FILTER;\n }\n\n static mutates () {\n return true;\n }\n}\n","import GenericBehaviour from './generic';\nimport { getMergedSet } from '../../helper';\nimport * as SELECTION from '../../enums/selection';\n\nexport default class PersistentBehaviour extends GenericBehaviour {\n setSelectionSet (addSet, selectionSet) {\n if (addSet === null) {\n selectionSet.reset();\n } else if (addSet.length) {\n const propagationInf = this.firebolt.getPropagationInf();\n // new add set\n const existingAddSet = addSet.filter(d => selectionSet._set[d] === SELECTION.SELECTION_NEW_ENTRY\n || selectionSet._set[d] === SELECTION.SELECTION_OLD_ENTRY);\n if (propagationInf.propagate === false) {\n selectionSet.updateExit();\n const { entrySet } = selectionSet.getSets();\n selectionSet.reset(getMergedSet(entrySet));\n selectionSet.add(addSet);\n selectionSet.update(existingAddSet);\n } else {\n // existing add set\n if (existingAddSet.length) {\n selectionSet.updateExit();\n selectionSet.remove(existingAddSet);\n } else {\n selectionSet.updateEntry();\n selectionSet.add(addSet);\n }\n const { exitSet } = selectionSet.getSets();\n const mergedExitSet = getMergedSet(exitSet);\n const completeSetCount = selectionSet.getCompleteSet().length;\n if (mergedExitSet.length === completeSetCount) {\n selectionSet.reset();\n }\n }\n } else {\n selectionSet.remove(selectionSet.getCompleteSet());\n }\n\n return this;\n }\n}\n","import PersistentBehaviour from './persistent';\nimport { SELECT } from '../../enums/behaviours';\n\nexport default class SelectBehaviour extends PersistentBehaviour {\n static formalName () {\n return SELECT;\n }\n}\n\n","import { DimensionSubtype, FieldType } from 'muze-utils';\n/**\n * Gets the drag action configuration\n * @param {VisualUnit} instance instance of visual unit\n * @param {Object} config x y positions\n * @return {Object} Payload of behaviour\n*/\n/* istanbul ignore next */ const getDragActionConfig = (sourceInfo, config, fieldsConfig) => {\n if (!(sourceInfo.axes.x || sourceInfo.axes.y)) {\n return {\n criteria: null\n };\n }\n\n const axes = sourceInfo.axes;\n const xAxis = axes.x[0];\n const yAxis = axes.y[0];\n const axisFields = sourceInfo.fields;\n const xField = axisFields.x[0].getMembers()[0];\n const yField = axisFields.y[0].getMembers()[0];\n const xFieldType = fieldsConfig[xField].def.subtype ? fieldsConfig[xField].def.subtype :\n fieldsConfig[xField].def.type;\n const yFieldType = fieldsConfig[yField].def.subtype ? fieldsConfig[yField].def.subtype :\n fieldsConfig[yField].def.type;\n const dimensions = {};\n const stPos = config.startPos;\n const endPos = config.endPos;\n\n if (stPos.x === endPos.x && stPos.y === endPos.y) {\n return {\n criteria: null\n };\n }\n\n const dragDim = xFieldType === FieldType.MEASURE ? (yFieldType === FieldType.MEASURE ? ['x', 'y'] : ['y']) : ['x'];\n const criteria = {};\n const isXDimension = xFieldType === DimensionSubtype.CATEGORICAL;\n const isYDimension = yFieldType === DimensionSubtype.CATEGORICAL;\n const xRange = xAxis.constructor.type() === 'band' ? xAxis.scale().invertExtent(stPos.x, endPos.x) :\n xAxis.invert(stPos.x, endPos.x);\n const yRange = yAxis.constructor.type() === 'band' ? yAxis.scale().invertExtent(stPos.y, endPos.y) :\n yAxis.invert(stPos.y, endPos.y);\n const selectedDomains = {\n x: stPos.x === endPos.x ? [] : (isXDimension ? xRange : xRange.sort((a, b) => a - b)),\n y: stPos.y === endPos.y ? [] : (isYDimension ? yRange : yRange.sort((a, b) => a - b))\n };\n const rangeObj = {};\n\n if (dragDim.length === 2) {\n rangeObj[xField] = selectedDomains.x;\n rangeObj[yField] = selectedDomains.y;\n if (xField === yField) {\n const xdom = selectedDomains.x;\n const ydom = selectedDomains.y;\n const min = xdom[0] > ydom[0] ? ydom : xdom;\n const max = min === ydom ? xdom : ydom;\n if (min[1] < max[0]) {\n rangeObj[xField] = [];\n } else {\n rangeObj[xField] = [max[0], min[1] < max[1] ? min[1] : max[1]];\n }\n dimensions.x = [stPos.x, endPos.x];\n dimensions.y = [stPos.y, endPos.y];\n }\n } else {\n criteria[dragDim[0]] = selectedDomains[dragDim[0]] || [];\n\n if (dragDim[0] === 'x') {\n rangeObj[xField] = criteria.x;\n if (xFieldType === DimensionSubtype.CATEGORICAL) {\n dimensions.x = (config.snap && stPos.x !== endPos.x) ? xAxis.getNearestRange(stPos.x, endPos.x) :\n [stPos.x, endPos.x];\n }\n } else {\n rangeObj[yField] = criteria.y;\n if (yFieldType === DimensionSubtype.CATEGORICAL) {\n dimensions.y = (config.snap && stPos.y !== endPos.y) ? yAxis.getNearestRange(stPos.y, endPos.y) :\n [stPos.y, endPos.y];\n }\n }\n }\n\n return {\n criteria: rangeObj,\n dimensions\n };\n};\n\nexport default getDragActionConfig;\n","import {\n getEvent,\n getD3Drag\n } from 'muze-utils';\n\nimport getDragActionConfig from './drag-action-config';\n\n/**\n * Adds dragging action to the target element.\n * @param {VisualUnit} instance Instance of visual unit.\n * @param {SVGElement} targetEl Element on which brushing action is needed.\n * @param {Array} behaviours Array of behaviours\n */\nexport const attachDragEvent = (targetEl, behaviours, firebolt, touch) => {\n let startPos = {};\n let endPos = {};\n let drawingInf;\n\n const d3Drag = getD3Drag();\n let touchStart;\n targetEl.call(d3Drag().on('start', () => {\n const event = getEvent();\n startPos = {\n x: event.x,\n y: event.y\n };\n drawingInf = firebolt.context.getDrawingContext();\n touchStart = new Date().getTime();\n }).on('drag', () => {\n const event = getEvent();\n endPos = {\n x: event.x,\n y: event.y\n };\n if (touch && Math.abs(startPos.x - endPos.x) <= 5) {\n return;\n }\n endPos.x = Math.max(0, Math.min(endPos.x, drawingInf.width));\n endPos.y = Math.max(0, Math.min(endPos.y, drawingInf.height));\n\n const payload = getDragActionConfig(firebolt.context.getSourceInfo(), {\n startPos,\n endPos\n }, firebolt.context.data().getFieldsConfig());\n behaviours.forEach(beh => firebolt.dispatchBehaviour(beh, payload));\n }).on('end', () => {\n const event = getEvent();\n endPos = {\n x: event.x,\n y: event.y\n };\n const duration = new Date().getTime() - touchStart;\n\n if (touch && duration > 100 && Math.abs(startPos.x - endPos.x) <= 5) {\n return;\n }\n endPos.x = Math.max(0, Math.min(endPos.x, drawingInf.width));\n endPos.y = Math.max(0, Math.min(endPos.y, drawingInf.height));\n\n const payload = getDragActionConfig(firebolt.context.getSourceInfo(), {\n startPos,\n endPos,\n snap: true\n }, firebolt.context.data().getFieldsConfig());\n payload.dragEnd = true;\n behaviours.forEach(beh => firebolt.dispatchBehaviour(beh, payload));\n }));\n};\n\n","import { getClientPoint, getEvent } from 'muze-utils';\nimport { CONSOLIDATED, FRAGMENTED } from '../../enums/constants';\n\n/**\n * Adds mouse interactions to target element.\n * @param {Firebolt} instance instance of firebolt.\n * @param {SVGElement} targetEl Element on which the event listeners will be attached.\n * @param {Array} behaviours Array of behaviours\n */\n/* istanbul ignore next */ const hover = firebolt => (targetEl, behaviours) => {\n const dispatchBehaviour = function (args) {\n const event = getEvent();\n const context = firebolt.context;\n const tooltipConf = context.config().interaction.tooltip;\n const mode = tooltipConf.mode;\n const pos = getClientPoint(context.getDrawingContext().svgContainer, event);\n const nearestPoint = context.getNearestPoint(pos.x, pos.y, {\n getAllPoints: mode === CONSOLIDATED || mode === FRAGMENTED,\n data: args,\n event\n });\n const payload = {\n criteria: nearestPoint ? nearestPoint.id : null,\n showInPosition: nearestPoint.showInPosition,\n target: nearestPoint.target,\n position: pos,\n mode\n };\n\n behaviours.forEach(beh => firebolt.dispatchBehaviour(beh, payload));\n event.stopPropagation();\n };\n\n targetEl.on('mouseover', dispatchBehaviour)\n .on('mousemove', dispatchBehaviour)\n .on('mouseout', () => {\n behaviours.forEach(beh => firebolt.dispatchBehaviour(beh, {\n criteria: null\n }));\n });\n};\n\nexport default hover;\n","export const CLASSPREFIX = 'muze';\nexport const CONSOLIDATED = 'consolidated';\nexport const FRAGMENTED = 'fragmented';\n\n","import { getClientPoint } from 'muze-utils';\n\nexport const generatePayloadFromEvent = function (args, event, firebolt) {\n const context = firebolt.context;\n const pos = getClientPoint(context.getDrawingContext().svgContainer, event.touches ? event.touches[0] : event);\n const nearestPoint = context.getNearestPoint(pos.x, pos.y, {\n data: args,\n event\n });\n return {\n criteria: nearestPoint ? nearestPoint.id : null,\n showInPosition: nearestPoint.showInPosition,\n target: nearestPoint.target,\n position: pos\n };\n};\n","import { getEvent } from 'muze-utils';\nimport { generatePayloadFromEvent } from './helpers';\n\n/**\n * Adds mouse interactions to target element.\n * @param {VisualUnit} instance instance of visual unit.\n * @param {SVGElement} targetEl Element on which the event listeners will be attached.\n * @param {Array} behaviours Array of behaviours\n */\n/* istanbul ignore next */ const click = firebolt => (targetEl, behaviours) => {\n const dispatchBehaviour = function (args) {\n const event = getEvent();\n const payload = generatePayloadFromEvent(args, event, firebolt);\n behaviours.forEach(beh => firebolt.dispatchBehaviour(beh, payload));\n event.stopPropagation();\n };\n\n targetEl.on('click', dispatchBehaviour);\n};\nexport default click;\n","import drag from './drag';\nimport hover from './hover';\nimport { longtouch } from './longtouch';\nimport { touchdrag } from './touch-drag';\nimport * as ACTIONNAMES from '../../enums/actions';\nimport click from './click';\n\nexport const physicalActions = {\n [ACTIONNAMES.DRAG]: drag,\n [ACTIONNAMES.HOVER]: hover,\n [ACTIONNAMES.CLICK]: click,\n [ACTIONNAMES.LONGTOUCH]: longtouch,\n [ACTIONNAMES.TOUCHDRAG]: touchdrag\n};\n\n","import { attachDragEvent } from './helpers/drag-event';\n\n/**\n * Adds dragging action to the target element.\n * @param {VisualUnit} instance Instance of visual unit.\n * @param {SVGElement} targetEl Element on which brushing action is needed.\n * @param {Array} behaviours Array of behaviours\n */\n/* istanbul ignore next */ const drag = firebolt => (targetEl, behaviours) => {\n attachDragEvent(targetEl, behaviours, firebolt);\n};\n\nexport default drag;\n","/* global setTimeout */\nimport { getEvent } from 'muze-utils';\nimport { generatePayloadFromEvent } from './helpers';\n\n/**\n * Adds mouse interactions to target element.\n * @param {VisualUnit} instance instance of visual unit.\n * @param {SVGElement} targetEl Element on which the event listeners will be attached.\n * @param {Array} behaviours Array of behaviours\n */\nexport const longtouch = firebolt => (targetEl, behaviours) => {\n let event;\n let touchEnd;\n const dispatchBehaviour = function (args) {\n const payload = generatePayloadFromEvent(args, event, firebolt);\n behaviours.forEach(beh => firebolt.dispatchBehaviour(beh, payload));\n event.stopPropagation();\n };\n\n touchEnd = false;\n event = getEvent();\n targetEl.on('touchstart', (args) => {\n event = getEvent();\n touchEnd = false;\n setTimeout(() => {\n if (!touchEnd) {\n dispatchBehaviour(args);\n } else {\n behaviours.forEach(beh => firebolt.dispatchBehaviour(beh, {\n criteria: null\n }));\n }\n }, 100);\n }).on('touchend', () => {\n touchEnd = true;\n });\n};\n","import { attachDragEvent } from './helpers/drag-event';\n\n/**\n * Adds dragging action to the target element.\n * @param {VisualUnit} instance Instance of visual unit.\n * @param {SVGElement} targetEl Element on which brushing action is needed.\n * @param {Array} behaviours Array of behaviours\n */\nexport const touchdrag = firebolt => (targetEl, behaviours) => {\n attachDragEvent(targetEl, behaviours, firebolt, true);\n};\n\n","import { mergeRecursive, getUniqueId } from 'muze-utils';\n\nexport default class GenericSideEffect {\n constructor (firebolt) {\n this.firebolt = firebolt;\n this._enabled = true;\n this._strategy = 'default';\n this._config = {};\n this._id = getUniqueId();\n this._strategies = {};\n this.config(this.constructor.defaultConfig());\n }\n\n static defaultConfig () {\n return {};\n }\n\n static target () {\n return 'all';\n }\n\n static mutates () {\n return false;\n }\n\n config (...params) {\n if (params.length) {\n this._config = mergeRecursive(this._config, params[0]);\n return this;\n }\n return this._config;\n }\n\n disable () {\n this._enabled = false;\n return this;\n }\n\n enable () {\n this._enabled = true;\n return this;\n }\n\n isEnabled () {\n return this._enabled;\n }\n\n apply () {\n return this;\n }\n\n addStrategy (name, fn) {\n this._strategies[name] = fn;\n return this;\n }\n}\n","import GenericSideEffect from './generic';\n\nexport default class SurrogateSideEffect extends GenericSideEffect {\n applyInteractionStyle (set, config = {}, interactionType, apply) {\n const layers = this.firebolt.context.layers();\n layers.forEach(layer => layer.config().interactive !== false &&\n layer.applyInteractionStyle(interactionType, set.uids, apply));\n }\n}\n","import { makeElement } from 'muze-utils';\n\nimport GenericSideEffect from './generic';\n\nexport default class SpawnableSideEffect extends GenericSideEffect {\n createElement (container, elemType, data, className, callbacks) {\n return makeElement(container, elemType, data, className, callbacks);\n }\n\n drawingContext (...drawingContext) {\n if (drawingContext.length) {\n this._drawingContext = drawingContext[0];\n return this;\n }\n return this._drawingContext();\n }\n\n show () {\n return this;\n }\n\n hide () {\n return this;\n }\n}\n","import { selectElement } from 'muze-utils';\n\nexport const getBoxDimensionsFromPayload = (payload, axes, axisFields) => {\n let x1;\n let x2;\n let y1;\n let y2;\n let xRange;\n let yRange;\n let direction;\n const criteria = payload.criteria;\n const dimensions = payload.dimensions || {};\n const xDim = dimensions.x;\n const yDim = dimensions.y;\n\n if (criteria === null) {\n return null;\n }\n\n const xAxis = axes.x[0];\n const yAxis = axes.y[0];\n const xLinear = xAxis.constructor.type() === 'linear';\n const yLinear = yAxis.constructor.type() === 'linear';\n const xField = `${axisFields.x[0]}`;\n const yField = `${axisFields.y[0]}`;\n const xCriteria = criteria[xField];\n const yCriteria = criteria[yField];\n\n if (xCriteria && xCriteria[0] instanceof Array) {\n xRange = xCriteria[0];\n yRange = xCriteria[1];\n } else {\n xRange = xCriteria || [];\n yRange = yCriteria || [];\n }\n direction = xCriteria && yCriteria ? 'both' : (xCriteria ? 'vertical' : 'horizontal');\n if (xRange && xRange.length) {\n if ((yAxis.constructor.type() === 'band' && xLinear)) {\n x1 = x2 = undefined;\n direction = 'horizontal';\n } else {\n const domain = xAxis.domain();\n const bandScale = xAxis.constructor.type() === 'band';\n let x1Val;\n let x2Val;\n if (bandScale) {\n let x1DomainIndex = domain.indexOf(xRange[0]);\n let x2DomainIndex = domain.indexOf(xRange[xRange.length - 1]);\n [x1DomainIndex, x2DomainIndex] = [x1DomainIndex, x2DomainIndex].sort((a, b) => a - b);\n x1Val = domain[x1DomainIndex];\n x2Val = domain[x2DomainIndex];\n } else {\n x1Val = xRange[0];\n x2Val = xRange[xRange.length - 1];\n }\n x1 = xAxis.getScaleValue(x1Val);\n x2 = xAxis.getScaleValue(x2Val);\n x2 += bandScale ? xAxis.getUnitWidth() : 0;\n }\n } else {\n x1 = x2 = undefined;\n }\n if (yRange && yRange.length) {\n if ((xAxis.constructor.type() === 'band' && yLinear)) {\n y1 = y2 = undefined;\n direction = 'vertical';\n } else {\n const domain = yAxis.domain();\n const bandScale = yAxis.constructor.type() === 'band';\n let y1Val;\n let y2Val;\n if (bandScale) {\n let y1DomainIndex = domain.indexOf(yRange[0]);\n let y2DomainIndex = domain.indexOf(yRange[yRange.length - 1]);\n [y1DomainIndex, y2DomainIndex] = [y1DomainIndex, y2DomainIndex].sort(((a, b) => b - a));\n y1Val = domain[y1DomainIndex];\n y2Val = domain[y2DomainIndex];\n } else {\n y1Val = yRange[0];\n y2Val = yRange[yRange.length - 1];\n }\n y1 = yAxis.getScaleValue(y1Val);\n y2 = yAxis.getScaleValue(y2Val);\n y2 += yAxis.constructor.type() === 'band' ? yAxis.getUnitWidth() : 0;\n }\n } else {\n y1 = y2 = undefined;\n }\n\n if ((yLinear && xLinear) || !payload.dragEnd) {\n if (xDim) {\n [x1, x2] = xDim;\n }\n if (yDim) {\n [y1, y2] = yDim;\n }\n }\n\n return {\n dimension: {\n x1,\n x2,\n y1,\n y2\n },\n direction\n };\n};\n\nexport const changeVisibility = (context, sideEffectGroup, visible) => {\n const config = context.config();\n const className = config.defClassName;\n const classPrefix = config.classPrefix;\n selectElement(sideEffectGroup).selectAll(`.${classPrefix}-${className}`)\n .style('display', visible ? 'block' : 'none');\n};\n","import {\n getQualifiedClassName,\n selectElement,\n makeElement,\n isValidValue\n} from 'muze-utils';\nimport { CLASSPREFIX } from '../../enums/constants';\nimport './styles.scss';\nimport SpawnableSideEffect from '../spawnable';\nimport { selectionBoxDrag } from '../../actions/physical/selection-box-drag';\nimport { getBoxDimensionsFromPayload, changeVisibility } from './helper';\n\n/**\n * This class is used to create a selection box which is used by visual unit for brushing and\n * selection in the canvas.\n * @class SelectionBox\n */\nclass SelectionBox extends SpawnableSideEffect {\n /**\n * It returns the default configuration needed by selectionbox.\n * @return {Object} Default configuration of the selection box.\n */\n static defaultConfig () {\n return {\n defClassName: 'selection-box-group',\n className: '',\n classPrefix: CLASSPREFIX,\n box: {\n defClassName: 'selection-box',\n className: ''\n },\n transition: {\n duration: 200\n }\n };\n }\n\n static formalName () {\n return 'selectionBox';\n }\n\n /**\n * Draws the selectionbox with the specified dimensions.\n * @param {Object} dimension Dimensions of the selection box.\n * @param {number} dimension.x1 Starting x position\n * @param {number} dimension.x2 Ending x position\n * @param {number} dimension.y1 Starting y position\n * @param {number} dimension.y2 Ending y position\n * @param {Object} conf Configuration needed to draw the selection box\n * @param {number} unitWidth Width of the visual unit.\n * @param {number} unitHeight Height of the visual unit.\n */\n apply (selectionSet, payload) {\n let x;\n let y;\n let width;\n let height;\n const config = this._config;\n const boxConf = config.box;\n const firebolt = this.firebolt;\n const drawingInf = this.drawingContext();\n const mountPoint = drawingInf.sideEffectGroup;\n const unitWidth = drawingInf.width;\n const unitHeight = drawingInf.height;\n const classPrefix = config.classPrefix;\n const selectionGroupClassName = config.defClassName;\n\n if (payload.criteria === null) {\n this.hide(drawingInf);\n return this;\n }\n\n const sourceInf = firebolt.context.getSourceInfo();\n const { dimension, direction } = getBoxDimensionsFromPayload(payload, sourceInf.axes,\n sourceInf.fields);\n const transition = payload.dragEnd && config.transition;\n\n if (direction === 'both' || direction === 'vertical') {\n x = Math.min(dimension.x1, dimension.x2);\n width = Math.abs(dimension.x2 - dimension.x1);\n } else {\n x = 0;\n width = unitWidth;\n }\n if (direction === 'both' || direction === 'horizontal') {\n y = Math.min(dimension.y1, dimension.y2);\n height = Math.abs(dimension.y2 - dimension.y1);\n } else {\n height = unitHeight;\n y = 0;\n }\n this.show(drawingInf);\n // Create the data array for drawing the rectangle\n const points = [\n {\n x,\n y,\n width,\n height\n }\n ];\n // Create the container group for selection box.\n const selectionGroup = makeElement(selectElement(mountPoint), 'g', [1],\n `.${classPrefix}-${selectionGroupClassName}`);\n const sideEffect = this;\n const selection = selectionGroup.selectAll('rect').data(points);\n const selectionBox = selection.enter().append('rect')\n .each(function () {\n selectionBoxDrag(firebolt)(selectElement(this), ['brush'], sideEffect);\n })\n .merge(selection)\n .each(function (attrs) {\n let element = selectElement(this);\n transition && (element = element.transition().duration(transition.duration));\n for (const key in attrs) {\n if ({}.hasOwnProperty.call(attrs, key)) {\n isValidValue(attrs[key]) && element.attr(key, attrs[key]);\n }\n }\n });\n // Get the qualified class name for selection box rectangle\n const boxClassName = getQualifiedClassName(boxConf.defClassName, this._id, classPrefix);\n selectionBox.classed(boxClassName.join(' '), true);\n selectionBox.classed(boxConf.className, true);\n\n return this;\n }\n\n hide (drawingInf) {\n changeVisibility(this, drawingInf.sideEffectGroup, false);\n }\n\n show (drawingInf) {\n changeVisibility(this, drawingInf.sideEffectGroup, true);\n }\n}\n\nexport default SelectionBox;\n\n","import {\n getEvent,\n getD3Drag\n } from 'muze-utils';\n\nimport getDragActionConfig from './helpers/drag-action-config';\n\nexport const selectionBoxDrag = firebolt => (targetEl, behaviours) => {\n let subject;\n let drawingInf;\n const context = firebolt.context;\n const onDrag = (payload) => {\n behaviours.forEach(action => firebolt.dispatchBehaviour(action, payload));\n };\n const d3Drag = getD3Drag();\n\n targetEl.call(d3Drag().on('start', () => {\n const event = getEvent();\n drawingInf = context.getDrawingContext();\n subject = event.subject;\n }).on('drag', () => {\n const event = getEvent();\n subject.x += event.dx;\n subject.y += event.dy;\n const width = drawingInf.width;\n const height = drawingInf.height;\n const x = Math.min(width - subject.width, Math.max(subject.x, 0));\n const y = Math.min(height - subject.height, Math.max(subject.y, 0));\n const y2 = y + subject.height;\n const x2 = x + subject.width;\n\n if (x >= 0 && x2 <= width && y >= 0 && y2 <= height) {\n const payload = getDragActionConfig(context.getSourceInfo(), {\n startPos: {\n x,\n y\n },\n endPos: {\n x: x2,\n y: y2\n }\n }, context.data().getFieldsConfig());\n onDrag(payload);\n }\n }).on('end', () => {\n const width = drawingInf.width;\n const height = drawingInf.height;\n const x = Math.min(width - subject.width, Math.max(subject.x, 0));\n const y = Math.min(height - subject.height, Math.max(subject.y, 0));\n const y2 = y + subject.height;\n const x2 = x + subject.width;\n\n if (x >= 0 && x2 <= width && y >= 0 && y2 <= height) {\n const payload = getDragActionConfig(context.getSourceInfo(), {\n startPos: {\n x,\n y\n },\n endPos: {\n x: x2,\n y: y2\n },\n snap: true\n }, context.data().getFieldsConfig());\n payload.dragEnd = true;\n onDrag(payload);\n }\n }));\n};\n","export const CLASSPREFIX = 'muze';\nexport const ARROW_RIGHT = 'right';\nexport const ARROW_TOP = 'top';\nexport const ARROW_BOTTOM = 'bottom';\nexport const ARROW_LEFT = 'left';\nexport const TOOLTIP_LEFT = 'left';\nexport const TOOLTIP_RIGHT = 'right';\nexport const TOOLTIP_BOTTOM = 'bottom';\nexport const TOOLTIP_TOP = 'top';\nexport const INITIAL_STYLE = {\n position: 'absolute',\n width: 0,\n height: 0\n};\n","import { CLASSPREFIX } from './constants';\n\nexport const defaultConfig = {\n classPrefix: CLASSPREFIX,\n defClassName: 'tooltip-box',\n connectorClassName: 'tooltip-connectors',\n className: '',\n row: {\n margin: 0\n },\n content: {\n spacing: 5,\n iconContainerSize: 10,\n iconScale: 1,\n iconShape: 'circle',\n iconColor: '#ff0000',\n rowMargin: '0px',\n margin: 10,\n separator: ':',\n className: 'tooltip-content-container',\n parentClassName: 'tooltip-content-parent-container'\n },\n arrow: {\n size: 10,\n disabled: false,\n defClassName: 'tooltip-arrow',\n className: '',\n color: 'rgba(195,195,195,0.85)'\n }\n};\n","import { getQualifiedClassName } from 'muze-utils';\nimport { TOOLTIP_LEFT, TOOLTIP_RIGHT, ARROW_RIGHT, ARROW_LEFT, TOOLTIP_BOTTOM } from './constants';\n\nexport const getArrowPos = (orient, dim, measurement, config) => {\n let arrowPos;\n const { x, y, boxHeight, boxWidth } = measurement;\n const arrowDisabled = config.arrow.disabled;\n const arrowWidth = arrowDisabled ? 0 : config.arrow.size;\n\n if (orient === ARROW_LEFT || orient === ARROW_RIGHT) {\n let start = 0;\n let diff = boxHeight / 2;\n const plotBottom = dim.y + dim.height;\n const boxBottom = y + boxHeight;\n\n if (dim.y > y) {\n start = dim.y - y;\n diff = (plotBottom >= boxBottom ? (boxBottom - dim.y) : dim.height) / 2;\n } else if (boxBottom > plotBottom) {\n diff = Math.abs(y - (dim.y + dim.height)) / 2;\n }\n arrowPos = start + diff - arrowWidth / 2;\n } else {\n let start = 0;\n let diff = boxWidth / 2;\n const plotRight = dim.x + dim.width;\n const boxRight = x + boxWidth;\n\n if (dim.x > x) {\n start = dim.x - x;\n diff = (plotRight >= boxRight ? (boxRight - dim.x) : dim.width) / 2;\n } else if (boxRight > plotRight) {\n diff = Math.abs(x - (dim.x + dim.width)) / 2;\n }\n arrowPos = start + diff - arrowWidth / 2;\n }\n return arrowPos;\n};\n\n/**\n * Places the arrow in the specified arrow position. It also applies appropriate arrow\n * class name to the arrow element.\n * @param {string} position Left, bottom or right position of the arrow;\n * @param {number} arrowPos position of arrow in pixels\n * @return {Tooltip} Instance of tooltip.\n */\nexport const placeArrow = (context, position, arrowPos) => {\n const tooltipArrow = context._tooltipArrow;\n const tooltipBackground = context._tooltipBackground;\n const config = context._config;\n const classPrefix = config.classPrefix;\n const arrowConf = config.arrow;\n const className = getQualifiedClassName(arrowConf.defClassName, context._id, config.classPrefix);\n\n tooltipArrow.style('display', 'block');\n tooltipArrow.attr('class', `${className.join(' ')}`);\n if (position === TOOLTIP_LEFT || position === TOOLTIP_RIGHT) {\n tooltipArrow.style('top', `${arrowPos}px`);\n tooltipArrow.style('left', '');\n tooltipBackground.style('top', `${arrowPos}px`);\n tooltipBackground.style('left', '');\n } else {\n position === TOOLTIP_BOTTOM ? tooltipArrow.style('top', '100%') : tooltipArrow.style('top',\n `-${arrowConf.size}px`);\n tooltipArrow.style('left', `${arrowPos}px`);\n position === TOOLTIP_BOTTOM ? tooltipBackground.style('top', '100%') : tooltipBackground.style('top',\n `-${arrowConf.size + 3}px`);\n tooltipBackground.style('left', `${arrowPos}px`);\n }\n tooltipArrow.classed(`${classPrefix}-tooltip-arrow`, true);\n tooltipArrow.classed(`${classPrefix}-tooltip-arrow-${context._arrowOrientation}`, false);\n tooltipArrow.classed(`${classPrefix}-tooltip-arrow-${position}`, true);\n tooltipBackground.classed(`${classPrefix}-tooltip-background-arrow`, true);\n tooltipBackground.classed(`${classPrefix}-tooltip-background-arrow-${context._arrowOrientation}`, false);\n tooltipBackground.classed(`${classPrefix}-tooltip-background-arrow-${position}`, true);\n return this;\n};\n\nexport const reorderContainers = (parentContainer, className) => {\n parentContainer.selectAll(className).sort((a, b) => a - b);\n};\n","import {\n getClosestIndexOf,\n DateTimeFormatter,\n DimensionSubtype,\n FieldType\n} from 'muze-utils';\n\nconst timeFormats = {\n millisecond: '%A, %b %e, %H:%M:%S.%L',\n second: '%A, %b %e, %H:%M:%S',\n minute: '%A, %b %e, %H:%M',\n hour: '%A, %b %e, %H:%M',\n day: '%A, %b %e, %Y',\n month: '%B %Y',\n year: '%Y'\n};\nconst timeDurations = [\n ['millisecond', 'second', 'minute', 'hour', 'day', 'month', 'year'],\n [1, 1000, 60000, 3600000, 86400000, 2592000000, 31536000000]\n];\nconst getNearestInterval = (interval) => {\n const index = getClosestIndexOf(timeDurations[1], interval);\n return timeDurations[0][index];\n};\nconst defaultTooltipFormatters = (type, formatter) => {\n const formatters = {\n [DimensionSubtype.TEMPORAL]: (value, interval) => {\n const nearestInterval = getNearestInterval(interval);\n return DateTimeFormatter.formatAs(value, timeFormats[nearestInterval]);\n },\n [FieldType.MEASURE]: value => formatter(value ? value.toFixed(2) : value),\n [FieldType.DIMENSION]: value => value\n };\n return formatters[type];\n};\n\nconst getTabularData = (data, schema, fieldspace, timeDiffs) => {\n const rows = [];\n rows.push(schema.map(d => d.name));\n data.forEach((d) => {\n const row = [];\n schema.forEach((fieldObj, i) => {\n const interval = fieldObj.subtype === DimensionSubtype.TEMPORAL ? timeDiffs[fieldObj.name] : 0;\n const numberFormat = fieldObj.type === FieldType.MEASURE && fieldspace.fields[i]._ref.numberFormat();\n const formatterFn = defaultTooltipFormatters(fieldObj.subtype || fieldObj.type, numberFormat);\n const value = formatterFn(d[i], interval);\n row.push(value);\n });\n rows.push(row);\n });\n return rows;\n};\n\nexport const buildTooltipData = (dataModel, config = {}, context) => {\n let fieldValues = [];\n const dataObj = dataModel.getData();\n const data = dataObj.data;\n const schema = dataObj.schema;\n const formatters = config.formatters;\n const separator = config.separator;\n const fieldsConfig = dataModel.getFieldsConfig();\n const fieldspace = dataModel.getFieldspace();\n const fieldsObj = fieldspace.fieldsObj();\n const dimensionMeasureMap = context.dimensionMeasureMap;\n const axes = context.axes;\n const detailFields = context.detailFields || [];\n const dimensions = schema.filter(d => d.type === FieldType.DIMENSION);\n const measures = schema.filter(d => d.type === FieldType.MEASURE);\n // const containsRetinalField = schema.find(d => d.name in dimensionMeasureMap);\n const containsDetailField = schema.find(d => detailFields.indexOf(d.name) !== -1);\n const dataLen = data.length;\n const getRowContent = (field, type) => {\n let value;\n let formattedValue;\n let measureIndex;\n const values = [];\n const index = fieldsConfig[field].index;\n const interval = fieldsConfig[field].def.subtype === DimensionSubtype.TEMPORAL ?\n fieldsObj[field].getMinDiff() : 0;\n const formatterFn = (formatters && formatters[field]) || defaultTooltipFormatters(type, val => val);\n\n if (value !== null) {\n let uniqueVals = type === FieldType.MEASURE ? data.map(d => d[index]) :\n [...new Set(data.map(d => d[index]))];\n uniqueVals = uniqueVals.filter(d => d !== '');\n const colorAxis = axes.color[0];\n const shapeAxis = axes.shape[0];\n const sizeAxis = axes.size[0];\n const isRetinalField = (colorAxis || shapeAxis || sizeAxis) && dataLen > 1 &&\n type !== FieldType.MEASURE;\n\n uniqueVals.forEach((val, i) => {\n let key;\n const associatedMeasures = dimensionMeasureMap[field];\n\n if (associatedMeasures && associatedMeasures.length && dataLen > 1) {\n key = val;\n let icon = {\n value: ''\n };\n\n if (isRetinalField) {\n icon = {\n type: 'icon',\n color: colorAxis.getColor(val),\n shape: shapeAxis.getShape(val),\n size: sizeAxis.getSize(val) * config.iconScale\n };\n }\n if (associatedMeasures.length > 1) {\n values.push([icon, `${key}`]);\n associatedMeasures.forEach((measure) => {\n measureIndex = fieldsConfig[measure].index;\n value = data[i][measureIndex];\n formattedValue = defaultTooltipFormatters('measure',\n fieldspace.fields[measureIndex]._ref.numberFormat())(value, interval);\n values.push([{\n value: `${measure}${separator}`,\n style: {\n 'margin-left': `${config.margin}px}`\n },\n className: `${config.classPrefix}-tooltip-key`\n }, {\n value: `${formattedValue}`,\n className: `${config.classPrefix}-tooltip-value`\n }]);\n });\n } else {\n measureIndex = fieldsConfig[associatedMeasures[0]].index;\n value = data[i][measureIndex];\n formattedValue = defaultTooltipFormatters('measure',\n fieldspace.fields[measureIndex]._ref.numberFormat())(value, interval);\n values.push([icon, {\n value: `${key}${separator}`,\n className: `${config.classPrefix}-tooltip-key`\n }, {\n value: `${formattedValue}`,\n className: `${config.classPrefix}-tooltip-value`\n }]);\n }\n } else {\n key = field;\n value = val;\n formattedValue = formatterFn(value, interval);\n values.push([{\n value: `${key}${separator}`,\n className: `${config.classPrefix}-tooltip-key`\n }, {\n value: `${formattedValue}`,\n className: `${config.classPrefix}-tooltip-value`\n }]);\n }\n });\n }\n return values;\n };\n let displayFormat = 'keyValue';\n\n if (dataLen > 1 && containsDetailField) {\n fieldValues = getTabularData(data, schema, fieldspace, context.timeDiffs);\n displayFormat = 'table';\n } else {\n dimensions.forEach((item) => {\n const type = item.subtype ? item.subtype : item.type;\n fieldValues = [...fieldValues, ...getRowContent(item.name, type)];\n });\n\n const allMeasures = [...new Set(...Object.values(dimensionMeasureMap))];\n const filteredMeasures = dataLen > 1 ? measures.filter(d => allMeasures.indexOf(d.name) === -1)\n : measures;\n\n filteredMeasures.forEach((item) => {\n const type = item.subtype ? item.subtype : item.type;\n fieldValues = [...fieldValues, ...getRowContent(item.name, type)];\n });\n }\n\n return {\n content: fieldValues,\n displayFormat\n };\n};\n\n/**\n * This contains the strategy methods for showing tooltip in the chart.\n * @param {VisualUnit} context Attached instance.\n */\nexport const strategy = {\n keyValue: (data, config, context) => {\n const values = buildTooltipData(data, config, context);\n return values;\n }\n};\n\nexport const DEFAULT_STRATEGY = 'keyValue';\n","import {\n selectElement,\n mergeRecursive,\n makeElement,\n setAttrs,\n setStyles,\n getSymbol,\n isSimpleObject\n} from 'muze-utils';\nimport { DEFAULT_STRATEGY, strategy } from './strategy';\nimport { defaultConfig } from './default-config';\n\n/**\n * This class is used to manage the content of tooltip.\n */\nexport default class Content {\n /**\n * Creates an instance of content.\n */\n constructor () {\n this._model = null;\n this._strategy = DEFAULT_STRATEGY;\n this._formatter = null;\n this._config = this.constructor.defaultConfig();\n }\n /**\n * Returns the default configuration of tooltip\n * @return {Object} Configuration of tooltip.\n */\n static defaultConfig () {\n const config = defaultConfig.content;\n config.classPrefix = defaultConfig.classPrefix;\n return config;\n }\n\n config (...c) {\n if (c.length > 0) {\n this._config = mergeRecursive(this._config, c[0]);\n return this;\n }\n return this._config;\n }\n\n /**\n * Update model. The format contains presentation strategy which determines how to show the content.\n * If no strategy is mentioned then default is to show key value pair\n */\n update (item) {\n this._model = item.model;\n this._strategy = item.strategy !== undefined ? item.strategy : DEFAULT_STRATEGY;\n this._formatter = item.formatter;\n return this;\n }\n\n context (ctx) {\n this._context = ctx;\n return this;\n }\n\n render (mount) {\n let data;\n const config = this._config;\n const iconContainerSize = config.iconContainerSize;\n const formatter = this._formatter;\n const rowMargin = config.rowMargin;\n const model = this._model;\n\n this._mount = mount;\n if (model instanceof Array) {\n data = model;\n } else {\n data = formatter instanceof Function ? formatter(this._model, this._context) :\n strategy[this._strategy](this._model, this.config(), this._context);\n }\n\n if (data instanceof Function) {\n mount.html(data());\n } else {\n let content = data;\n let displayFormat = 'default';\n\n if (isSimpleObject(data)) {\n content = data.content;\n displayFormat = data.displayFormat;\n }\n\n const body = makeElement(mount, 'div', [displayFormat], `${config.classPrefix}-tooltip-content`, {},\n d => d);\n\n if (displayFormat === 'table') {\n const table = makeElement(body, 'table', [1], `${config.classPrefix}-tooltip-table`);\n const tbody = makeElement(table, 'tbody', [1], `${config.classPrefix}-tooltip-table-tbody`);\n const rows = makeElement(tbody, 'tr', content, `${config.classPrefix}-tooltip-table-row`);\n rows.each(function (d, i) {\n selectElement(this).classed(`${config.classPrefix}-tooltip-table-row-${i}`, true);\n });\n const cells = makeElement(rows, 'td', d => d, `${config.classPrefix}-tooltip-table-cell`);\n cells.each(function (d) {\n selectElement(this).html(d);\n });\n } else {\n const rows = makeElement(body, 'div', content, `${config.classPrefix}-tooltip-row`);\n const cells = makeElement(rows, 'span', d => d, `${config.classPrefix}-tooltip-content`);\n cells.attr('class', `${config.classPrefix}-tooltip-content`);\n setStyles(rows, {\n margin: rowMargin\n });\n setStyles(cells, {\n display: 'inline-block',\n 'margin-right': `${config.spacing}px`\n });\n\n cells.each(function (d) {\n const el = selectElement(this);\n el.html('');\n if (d instanceof Object) {\n if (d.type === 'icon') {\n const svg = makeElement(el, 'svg', [1]);\n const path = makeElement(svg, 'path', [1]);\n const shape = d.shape instanceof Function ? d.shape : getSymbol(d.shape);\n\n setAttrs(svg, {\n x: 0,\n y: 0,\n width: iconContainerSize,\n height: iconContainerSize\n });\n setAttrs(path, {\n d: shape.size(d.size)(),\n transform: `translate(${iconContainerSize / 2}, ${iconContainerSize / 2})`\n });\n setStyles(path, {\n fill: d.color\n });\n setStyles(svg, {\n width: `${iconContainerSize}px`,\n height: `${iconContainerSize}px`\n });\n } else {\n el.html(d.value);\n d.className && el.classed(d.className, true);\n setStyles(el, d.style);\n }\n } else {\n el.html(d);\n }\n });\n }\n }\n return this;\n }\n\n clear () {\n this._model = null;\n return this;\n }\n}\n","import {\n mergeRecursive,\n getQualifiedClassName,\n getUniqueId,\n selectElement,\n setStyles,\n makeElement\n} from 'muze-utils';\nimport { ARROW_BOTTOM, ARROW_LEFT, ARROW_RIGHT, TOOLTIP_LEFT, TOOLTIP_RIGHT, TOOLTIP_BOTTOM, TOOLTIP_TOP,\n INITIAL_STYLE } from './constants';\nimport { defaultConfig } from './default-config';\nimport { getArrowPos, placeArrow, reorderContainers } from './helper';\nimport './styles.scss';\nimport Content from './content';\n\n/**\n * This component is responsible for creating a tooltip element. It appends the tooltip\n * in the body element.\n * @class Tooltip\n */\nexport default class Tooltip {\n /**\n * Initializes the tooltip with the container element and configuration\n * @param {HTMLElement} container container where the tooltip will be mounted.\n * @param {string} className Class name of the tooltip.\n */\n constructor (htmlContainer, svgContainer) {\n let connectorContainer = svgContainer;\n this._id = getUniqueId();\n this._config = {};\n this.config({});\n const tooltipConf = this._config;\n const classPrefix = tooltipConf.classPrefix;\n const contentClass = tooltipConf.content.parentClassName;\n const container = makeElement(htmlContainer, 'div', [1], `${classPrefix}-tooltip-container`);\n this._container = container;\n this._tooltipContainer = container.append('div').style('position', 'absolute');\n this._contentContainer = this._tooltipContainer.append('div').attr('class', `${classPrefix}-${contentClass}`);\n this._tooltipBackground = this._tooltipContainer.append('div').style('position', 'relative');\n this._tooltipArrow = this._tooltipContainer.append('div');\n\n if (!svgContainer) {\n connectorContainer = htmlContainer.append('svg').style('pointer-events', 'none');\n }\n this._contents = {};\n this._tooltipConnectorContainer = selectElement(connectorContainer)\n .append('g')\n .attr('class', `${tooltipConf.classPrefix}-${tooltipConf.connectorClassName}`);\n const id = this._id;\n const defClassName = tooltipConf.defClassName;\n const qualifiedClassName = getQualifiedClassName(defClassName, id, tooltipConf.classPrefix);\n\n setStyles(this._tooltipArrow, INITIAL_STYLE);\n setStyles(this._tooltipBackground, INITIAL_STYLE);\n this.addClass(qualifiedClassName.join(' '));\n this.addClass(tooltipConf.className);\n this.hide();\n }\n\n /**\n * Sets the configuration of tooltip.\n * @param {Object} config Configuration of tooltip\n * @return {Tooltip} Instance of tooltip\n */\n config (...config) {\n if (config.length > 0) {\n const defConf = mergeRecursive({}, this.constructor.defaultConfig());\n this._config = mergeRecursive(defConf, config[0]);\n return this;\n }\n return this._config;\n }\n\n /**\n * Returns the default configuration of tooltip\n * @return {Object} Configuration of tooltip.\n */\n static defaultConfig () {\n return defaultConfig;\n }\n /**\n * Sets the class name of tooltip\n * @param {string} className tooltip class name\n * @return {Tooltip} Instance of tooltip.\n */\n addClass (className) {\n this._tooltipContainer.classed(className, true);\n return this;\n }\n\n context (...ctx) {\n if (ctx.length) {\n this._context = ctx[0];\n return this;\n }\n return this._context;\n }\n\n content (name, data, contentConfig = {}) {\n const config = this.config();\n const { classPrefix } = config;\n const contentClass = config.content.className;\n const formatter = config.formatter;\n const className = contentConfig.className || `${classPrefix}-${contentClass}-${name}`;\n const content = this._contents[name] = this._contents[name] || new Content();\n const container = makeElement(this._contentContainer, 'div', [contentConfig.order], className);\n container.attr('class', `${classPrefix}-${contentClass} ${className}`);\n reorderContainers(this._contentContainer, `.${classPrefix}-${contentClass}`);\n const contentConf = config.content;\n contentConfig.classPrefix = this._config.classPrefix;\n content.config(contentConf);\n\n if (data === null) {\n content.clear();\n container.remove();\n delete this._contents[name];\n } else {\n content.update({\n model: data,\n formatter: contentConfig.formatter || formatter\n });\n content.context(this._context);\n content.render(container);\n }\n\n if (!Object.keys(this._contents).length) {\n this.hide();\n }\n return this;\n }\n\n getContents () {\n return Object.values(this._contents);\n }\n\n /**\n * Positions the tooltip at the given x and y position.\n * @param {number} x x position\n * @param {number} y y position\n * @return {Tooltip} Instance of tooltip.\n */\n position (x, y, conf = {}) {\n if (!Object.keys(this._contents).length) {\n this.hide();\n return this;\n }\n this.show();\n const target = this._target;\n const repositionArrow = conf.repositionArrow;\n\n if (target && repositionArrow) {\n const node = this._tooltipContainer.node();\n const config = this._config;\n const arrowDisabled = config.arrow.disabled;\n const arrowWidth = arrowDisabled ? 0 : config.arrow.size;\n const arrowOrient = this._arrowOrientation;\n const outsidePlot = arrowOrient === ARROW_LEFT || arrowOrient === ARROW_RIGHT ?\n (y + node.offsetHeight - arrowWidth) < target.y || y > (target.y + target.height) :\n (x + node.offsetWidth - arrowWidth) < target.x || x > (target.x + target.width);\n\n if (!arrowDisabled) {\n if (outsidePlot) {\n let path;\n this._tooltipArrow.style('display', 'none');\n this._tooltipBackground.style('display', 'none');\n this._tooltipConnectorContainer.style('display', 'block');\n const connector = this._tooltipConnectorContainer.selectAll('path').data([1]);\n const enter = connector.enter().append('path');\n if (arrowOrient === ARROW_LEFT) {\n path = `M ${x} ${y + node.offsetHeight / 2} L ${target.x + target.width}`\n + ` ${target.y + target.height / 2}`;\n } else if (arrowOrient === ARROW_RIGHT) {\n path = `M ${x + node.offsetWidth} ${y + node.offsetHeight / 2}`\n + ` L ${target.x} ${target.y + target.height / 2}`;\n } else if (arrowOrient === ARROW_BOTTOM) {\n path = `M ${x + node.offsetWidth / 2} ${y + node.offsetHeight}`\n + ` L ${target.x + target.width / 2} ${target.y}`;\n }\n enter.merge(connector).attr('d', path).style('display', 'block');\n } else {\n const arrowPos = getArrowPos(arrowOrient, target, {\n x,\n y,\n boxHeight: node.offsetHeight,\n boxWidth: node.offsetWidth\n }, this._config);\n\n placeArrow(this, this._arrowOrientation, arrowPos);\n this._tooltipConnectorContainer.style('display', 'none');\n }\n }\n }\n\n const offset = this._offset || {\n x: 0,\n y: 0\n };\n this._tooltipContainer.style('left', `${offset.x + x}px`).style('top',\n `${offset.y + y}px`);\n\n return this;\n }\n\n /**\n * Positions the tooltip relative to a rectangular box. It takes care of tooltip overflowing the\n * boundaries.\n * @param {Object} dim Dimensions of the plot.\n */\n positionRelativeTo (dim, tooltipConf = {}) {\n let obj;\n let orientation = tooltipConf.orientation;\n this.show();\n if (!dim) {\n this.hide();\n return this;\n }\n\n const extent = this._extent;\n const node = this._tooltipContainer.node();\n\n this._tooltipContainer.style('top', '0px')\n .style('left', '0px');\n const offsetWidth = node.offsetWidth + 2;\n const offsetHeight = node.offsetHeight + 2;\n const config = this._config;\n const offset = this._offset;\n const arrowDisabled = config.arrow.disabled;\n const arrowSize = arrowDisabled ? 0 : config.arrow.size;\n const draw = tooltipConf.draw !== undefined ? tooltipConf.draw : true;\n const topSpace = dim.y;\n // When there is no space in right\n const dimX = dim.x + dim.width + offset.x;\n const rightSpace = extent.width - dimX;\n const leftSpace = dim.x + offset.x - extent.x;\n const positionTop = topSpace > (offsetHeight + arrowSize);\n const positionRight = rightSpace >= offsetWidth + arrowSize;\n const positionLeft = leftSpace >= offsetWidth + arrowSize;\n\n const positionHorizontal = () => {\n let position;\n let x = dim.x + dim.width;\n let y = dim.y;\n\n if (positionRight) {\n position = TOOLTIP_LEFT;\n x += arrowSize;\n } else if (positionLeft) {\n x = dim.x - offsetWidth;\n position = TOOLTIP_RIGHT;\n x -= arrowSize;\n } else {\n position = 'left';\n x += arrowSize;\n }\n if (dim.height < offsetHeight) {\n y = Math.max(0, dim.y + dim.height / 2 - offsetHeight / 2);\n }\n\n const arrowPos = getArrowPos(position, dim, {\n x,\n y,\n boxHeight: offsetHeight,\n boxWidth: offsetWidth\n }, this._config);\n\n return {\n position,\n arrowPos,\n x,\n y\n };\n };\n\n const positionVertical = () => {\n let position;\n let y;\n // Position tooltip at the center of plot\n let x = dim.x - offsetWidth / 2 + dim.width / 2;\n\n // Overflows to the right\n if ((extent.width - (dim.x + offset.x)) < offsetWidth) {\n x = extent.width - offsetWidth - offset.x;\n } else if ((x + offset.x) < extent.x) { // Overflows to the left\n x = extent.x;\n }\n\n if (positionTop) {\n y = dim.y - offsetHeight - arrowSize;\n position = TOOLTIP_BOTTOM;\n } else {\n y = dim.y + dim.height + arrowSize;\n position = TOOLTIP_TOP;\n }\n\n const arrowPos = getArrowPos(position, dim, {\n x,\n y,\n boxHeight: offsetHeight,\n boxWidth: offsetWidth\n }, this._config);\n\n return {\n position,\n arrowPos,\n x,\n y\n };\n };\n\n this._target = dim;\n if (!orientation) {\n if (positionTop) {\n orientation = 'vertical';\n } else if (positionRight || positionLeft) {\n orientation = 'horizontal';\n } else {\n orientation = 'vertical';\n }\n }\n\n if (orientation === 'horizontal') {\n obj = positionHorizontal();\n } else if (orientation === 'vertical') {\n obj = positionVertical();\n }\n\n this._position = {\n x: obj.x,\n y: obj.y\n };\n\n this._arrowPos = obj.arrowPos;\n if (!arrowDisabled) {\n placeArrow(this, obj.position, obj.arrowPos);\n } else {\n this._tooltipArrow.style('display', 'none');\n this._tooltipBackground.style('display', 'none');\n }\n this._arrowOrientation = obj.position;\n draw && this.position(obj.x, obj.y);\n return this;\n }\n\n /**\n * Hides the tooltip element.\n * @return {Tooltip} Instance of tooltip.\n */\n hide () {\n this._tooltipContainer.style('display', 'none');\n this._tooltipConnectorContainer.style('display', 'none');\n return this;\n }\n\n /**\n * Shows the tooltip element.\n * @return {Tooltip} Instance of tooltip.\n */\n show () {\n this._tooltipContainer.style('display', 'block');\n return this;\n }\n\n extent (extent) {\n this._extent = extent;\n return this;\n }\n\n offset (offset) {\n this._offset = offset;\n return this;\n }\n\n remove () {\n this._tooltipContainer.remove();\n this._tooltipBackground.remove();\n this._tooltipConnectorContainer.remove();\n return this;\n }\n}\n","import { FieldType } from 'muze-utils';\n\nexport const strategies = {\n showSelectedItems: (dm) => {\n const dataObj = dm.getData();\n const measures = dataObj.schema.filter(d => d.type === FieldType.MEASURE);\n const aggregatedModel = dm.groupBy([''], measures.reduce((acc, v) => {\n acc[v.name] = v.defAggFn === 'count' ? 'sum' : v.defAggFn;\n return acc;\n }, {}));\n const fieldsObj = dm.getFieldspace().fieldsObj();\n const fieldsConf = aggregatedModel.getFieldsConfig();\n let values = [{\n value: `${dataObj.data.length}`,\n style: {\n 'font-weight': 'bold'\n }\n }, 'Items Selected'];\n const measureNames = measures.map(d => d.name);\n if (measureNames.length) {\n values = [...values, ...[`(${fieldsObj[measureNames[0]].defAggFn().toUpperCase()}) ${measureNames[0]}`,\n {\n value: `${aggregatedModel.getData().data[0][fieldsConf[measureNames[0]].index].toFixed(2)}`,\n style: {\n 'font-weight': 'bold'\n }\n }]];\n }\n return [values];\n }\n};\n","import { Tooltip as TooltipRenderer } from '@chartshq/muze-tooltip';\nimport { FieldType } from 'muze-utils';\nimport { spaceOutBoxes } from '../helper';\nimport { strategies } from './strategies';\nimport { FRAGMENTED } from '../../enums/constants';\nimport SpawnableSideEffect from '../spawnable';\n\nimport './styles.scss';\n\nexport default class Tooltip extends SpawnableSideEffect {\n constructor (...params) {\n super(...params);\n this._tooltips = {};\n this._strategies = strategies;\n this._strategy = 'default';\n }\n\n static defaultConfig () {\n return {\n padding: 5,\n offset: {\n x: 0,\n y: 0\n }\n };\n }\n\n static formalName () {\n return 'tooltip';\n }\n\n apply (selectionSet, payload, options = {}) {\n let totalHeight = 0;\n let totalWidth = 0;\n const dataModel = selectionSet.mergedEnter.model;\n const context = this.firebolt.context;\n const drawingInf = this.drawingContext();\n if ((dataModel.isEmpty() || payload.criteria === null) || selectionSet.isSourceFieldPresent === false) {\n this.hide(options, null);\n return this;\n }\n\n const tooltips = this._tooltips;\n const config = this.config();\n const boundBox = {\n width: drawingInf.width,\n height: drawingInf.height\n };\n const showInPosition = payload.showInPosition;\n const pad = config.padding;\n const dataModels = [];\n const fragmented = config.mode === FRAGMENTED;\n const sourceInf = context.getSourceInfo();\n const fields = sourceInf.fields;\n const xFieldDim = fields.x[0] ? fields.x[0].type() === FieldType.DIMENSION : false;\n const showVertically = !!xFieldDim;\n const tooltipPos = payload.position;\n const boxes = [];\n const enter = {};\n const uids = dataModel.getData().uids;\n if (fragmented) {\n dataModels.push(...uids.map(d => dataModel.select((fieldsArr, i) => i === d, {\n saveChild: false\n })));\n } else {\n dataModels.push(dataModel);\n }\n\n let target = payload.target;\n let targetFields = [];\n if (target) {\n targetFields = target[0] || [];\n const sourceFields = payload.sourceFields;\n const indices = [];\n for (let i = 0, len = targetFields.length; i < len; i++) {\n if (sourceFields.indexOf(targetFields[i]) !== -1) {\n indices.push(i);\n }\n }\n target = target.map(d => d.filter((v, i) => indices.indexOf(i) !== -1));\n }\n\n const plotDimensions = context.getPlotPointsFromIdentifiers(target || payload.criteria, {\n getBBox: true\n });\n\n // Show tooltip for each datamodel\n for (let i = 0; i < dataModels.length; i++) {\n let plotDim = plotDimensions[i];\n if (fragmented) {\n const dimensions = dataModels[i].getData().schema.filter(d => d.type === FieldType.DIMENSION)\n .map(d => d.name);\n plotDim = context.getPlotPointsFromIdentifiers(dataModels[i].project(dimensions), { getBBox: true });\n plotDim = plotDim && plotDim[0];\n }\n\n let dt = dataModels[i];\n if (config.fields) {\n dt = dt.project(config.fields, {\n saveChild: false\n });\n }\n if (config.dataTransform) {\n dt = config.dataTransform(dt, i);\n }\n\n enter[i] = true;\n const layoutContainer = drawingInf.parentContainer;\n const layoutBoundBox = layoutContainer.getBoundingClientRect();\n const unitBoundBox = drawingInf.htmlContainer.getBoundingClientRect();\n\n const offsetLeft = unitBoundBox.left - layoutBoundBox.left;\n const offsetTop = unitBoundBox.top - layoutBoundBox.top;\n const tooltipInst = tooltips[i] = tooltips[i] || new TooltipRenderer(layoutContainer,\n drawingInf.svgContainer);\n\n sourceInf.payload = payload;\n sourceInf.firebolt = this.firebolt;\n sourceInf.detailFields = context.detailFields();\n sourceInf.timeDiffs = context.timeDiffsByField();\n tooltipInst.context(sourceInf);\n const strategy = strategies[options.strategy];\n tooltipInst.content(options.strategy || this._strategy, dt, {\n formatter: strategy,\n order: options.order\n })\n .config(this.config())\n .extent({\n x: 0,\n y: 0,\n width: layoutBoundBox.width,\n height: layoutBoundBox.height\n })\n .offset({\n x: offsetLeft + (config.offset.x || 0),\n y: offsetTop + (config.offset.y || 0)\n });\n\n if (showInPosition) {\n tooltipInst.position(tooltipPos.x + pad, tooltipPos.y + pad);\n } else if (plotDim) {\n tooltipInst.positionRelativeTo({\n x: plotDim.x,\n y: plotDim.y,\n width: plotDim.width || 0,\n height: plotDim.height || 0\n }, {\n orientation: fragmented ?\n (showVertically ? 'horizontal' : 'vertical') : undefined\n });\n } else {\n tooltipInst.hide();\n break;\n }\n\n if (fragmented) {\n const position = tooltipInst._position;\n const tooltipBoundBox = tooltipInst._tooltipContainer.node().getBoundingClientRect();\n\n totalHeight += tooltipBoundBox.height + pad;\n totalWidth += tooltipBoundBox.width + pad;\n if (showVertically ? totalHeight > drawingInf.height : totalWidth > drawingInf.width) {\n break;\n }\n boxes.push({\n x: position.x,\n y: position.y,\n width: tooltipBoundBox.width,\n height: tooltipBoundBox.height,\n tooltip: tooltipInst\n });\n }\n }\n\n for (const key in tooltips) {\n if (!enter[key]) {\n const tooltip = tooltips[key];\n tooltip.content(payload.action, null);\n if (!tooltip.getContents().length) {\n tooltip.remove();\n delete tooltips[key];\n }\n }\n }\n if (fragmented) {\n spaceOutBoxes(boxes, boundBox, showVertically);\n boxes.forEach(box => box.tooltip.position(box.x, box.y, {\n repositionArrow: true\n }));\n }\n return this;\n }\n\n hide (options) {\n const tooltips = this._tooltips;\n for (const key in tooltips) {\n if ({}.hasOwnProperty.call(tooltips, key)) {\n const strategy = options.strategy || this._strategy;\n tooltips[key].content(strategy, null);\n tooltips[key].hide();\n }\n }\n }\n}\n","export const spaceOutBoxes = (boxes, extent, showVertically) => {\n let y;\n let height;\n let x;\n let width;\n let i;\n const pad = 5;\n const len = boxes.length;\n const spaceOutIfOverlap = (firstBox, secondBox, opposite) => {\n x = firstBox.x;\n width = firstBox.width;\n y = firstBox.y;\n height = firstBox.height;\n const bottom = y + height;\n const right = x + width;\n\n if (showVertically) {\n if (opposite ? y < (secondBox.y + secondBox.height) : bottom > secondBox.y) {\n secondBox.y = opposite ? firstBox.y - secondBox.height - pad :\n bottom + pad;\n }\n } else if (opposite ? x < (secondBox.x + secondBox.width) : right > secondBox.x) {\n secondBox.x = opposite ? firstBox.x - secondBox.width - pad :\n right + pad;\n }\n };\n\n boxes.sort((a, b) => (showVertically ? a.y - b.y : a.x - b.x));\n i = 0;\n\n for (i = 0; i < len - 1; i++) {\n spaceOutIfOverlap(boxes[i], boxes[i + 1]);\n }\n\n if ((boxes[i].y + boxes[i].height) > extent.height ||\n (boxes[i].x + boxes[i].width) > extent.width) {\n if (showVertically) {\n boxes[i].y -= (boxes[i].height + boxes[i].y) - extent.height;\n } else {\n boxes[i].x -= (boxes[i].width + boxes[i].x) - extent.width;\n }\n for (i = len - 1; i > 0; i--) {\n spaceOutIfOverlap(boxes[i], boxes[i - 1], true);\n }\n }\n return boxes;\n}\n;\n","import { selectElement, FieldType } from 'muze-utils';\n\nimport './styles.scss';\nimport { CLASSPREFIX } from '../../enums/constants';\nimport SpawnableSideEffect from '../spawnable';\n\nexport default class Crossline extends SpawnableSideEffect {\n static defaultConfig () {\n return {\n className: `${CLASSPREFIX}-crossline-group`,\n bandClass: `${CLASSPREFIX}-crossband`,\n lineClass: `${CLASSPREFIX}-crossline`\n };\n }\n\n static formalName () {\n return 'crossline';\n }\n\n apply (selectionSet, payload) {\n let height;\n let bandWidth;\n let px;\n let width;\n const {\n className,\n bandClass,\n lineClass\n } = this.config();\n const dataModel = selectionSet.mergedEnter.model;\n const drawingInf = this.drawingContext();\n if (payload.criteria && dataModel && dataModel.isEmpty()) {\n return this;\n }\n if (payload.criteria === null || !dataModel) {\n this.hide();\n return this;\n }\n\n const dataObj = dataModel.getData();\n const sourceInf = this.firebolt.context.getSourceInfo();\n const axes = sourceInf.axes;\n const axisFields = sourceInf.fields;\n const fields = selectionSet.fields;\n const data = dataObj.data;\n const fieldsConfig = dataModel.getFieldsConfig();\n const svgContainer = drawingInf.sideEffectGroup;\n\n const elemData = [];\n fields.forEach((field) => {\n const fieldIndex = fieldsConfig[field] && fieldsConfig[field].index;\n const dataArr = data.map(d => d[fieldIndex]);\n const axisIndex = [['x', 0], ['x', 1], ['y', 0], ['y', 1]].find((arr) => {\n const fieldInst = axisFields[arr[0]][arr[1]];\n return fieldInst && fieldInst.type() === FieldType.DIMENSION &&\n fieldInst.getMembers().indexOf(field) !== -1;\n });\n if (axisIndex !== undefined && data.length) {\n const type = axisIndex[0];\n const axis = axes[type][axisIndex[1]];\n const value = dataArr[0];\n bandWidth = axis.getUnitWidth() || 0;\n px = axis.getScaleValue(value) + bandWidth / 2 + drawingInf.xOffset;\n const plotWidth = Math.max(...this.firebolt.context.layers().map(layer => layer.getPlotSpan()[type]));\n const pad = Math.max(...this.firebolt.context.layers().map(layer => layer.getPlotPadding()[type]));\n height = drawingInf.height;\n width = drawingInf.width;\n const startPx = px - plotWidth / 2 - pad / 2;\n const endPx = px + plotWidth / 2 + pad / 2;\n const dataPoint = {};\n if (type === 'y') {\n dataPoint.d = `M 0 ${startPx} L 0 ${endPx} L ${width} ${endPx} L ${width} ${startPx} Z`;\n } else {\n dataPoint.d = `M ${startPx} 0 L ${endPx} 0 L ${endPx} ${height} L ${startPx} ${height} Z`;\n }\n dataPoint.className = plotWidth ? bandClass : lineClass;\n elemData.push(dataPoint);\n }\n });\n if (elemData.length) {\n const parentGroup = this.createElement(svgContainer, 'g', [1], className);\n const elem = this.createElement(parentGroup, 'path', elemData);\n elem.attr('d', d => d.d).style('pointer-events', 'none')\n .attr('class', d => d.className);\n }\n return this;\n }\n\n hide () {\n const className = this.config().className;\n const drawingInf = this.drawingContext();\n selectElement(drawingInf.sideEffectGroup).selectAll(`.${className}`).remove();\n }\n}\n","const fadeFn = (set, context, strategy) => {\n const {\n mergedEnter,\n mergedExit,\n exitSet,\n completeSet\n } = set;\n\n if (!mergedEnter.length && !mergedExit.length) {\n context.applyInteractionStyle(completeSet, {}, strategy, false);\n } else {\n context.applyInteractionStyle(exitSet[1], {}, strategy, true);\n context.applyInteractionStyle(mergedEnter, {}, strategy, false);\n }\n};\n\nexport const strategies = {\n fade: fadeFn,\n focus: (set, context) => {\n const {\n mergedEnter,\n mergedExit,\n completeSet\n } = set;\n if (!mergedEnter.length && !mergedExit.length) {\n context.applyInteractionStyle(completeSet, {}, 'focus', false);\n } else {\n context.applyInteractionStyle(mergedExit, {}, 'focus', true);\n context.applyInteractionStyle(mergedEnter, {}, 'focus', false);\n }\n },\n highlight: (set, context) => {\n const {\n mergedEnter,\n mergedExit,\n entrySet,\n exitSet,\n completeSet\n } = set;\n if (!mergedEnter.length && !mergedExit.length) {\n context.applyInteractionStyle(completeSet, {}, 'highlight', false);\n } else {\n context.applyInteractionStyle(entrySet[1], {}, 'highlight', true);\n context.applyInteractionStyle(exitSet[1], {}, 'highlight', false);\n }\n }\n};\n","import SurrogateSideEffect from '../surrogate';\nimport { strategies } from './strategy';\n\nexport default class PlotHighlighter extends SurrogateSideEffect {\n constructor (...params) {\n super(...params);\n this._strategy = 'highlight';\n this._strategies = strategies;\n }\n\n static formalName () {\n return 'highlighter';\n }\n\n static target () {\n return 'visual-unit';\n }\n\n apply (selectionSet, payload, options = {}) {\n const strategy = this._strategies[options.strategy || this._strategy];\n\n if (selectionSet.isSourceFieldPresent !== false) {\n strategy(selectionSet, this, options.strategy || this._strategy);\n }\n\n return this;\n }\n}\n","import SurrogateSideEffect from '../surrogate';\n\nexport default class FilterEffect extends SurrogateSideEffect {\n static formalName () {\n return 'filter';\n }\n\n static target () {\n return 'visual-unit';\n }\n\n static mutates () {\n return true;\n }\n\n apply (selectionSet, payload) {\n const context = this.firebolt.context;\n const entryModel = selectionSet.mergedEnter.model;\n if (payload.criteria === null) {\n context.clearCaching().resetData();\n } else {\n context.enableCaching().data(entryModel);\n }\n return this;\n }\n}\n","import { DataModel } from 'muze-utils';\n\nimport { CLASSPREFIX } from '../../enums/constants';\nimport SpawnableSideEffect from '../spawnable';\n\nimport './styles.scss';\n\nexport default class AnchorEffect extends SpawnableSideEffect {\n constructor (...params) {\n super(...params);\n const context = this.firebolt.context;\n this._layers = this.addAnchorLayers(context);\n }\n\n static target () {\n return 'visual-unit';\n }\n\n static defaultConfig () {\n return {\n className: `${CLASSPREFIX}-anchors-group`\n };\n }\n\n static formalName () {\n return 'anchors';\n }\n\n addAnchorLayers (context) {\n const layers = [];\n this.firebolt.context.layers().forEach((layer, idx) => {\n const shouldDrawAnchors = layer.shouldDrawAnchors();\n if (shouldDrawAnchors) {\n const encodingFieldsInf = layer.encodingFieldsInf();\n const layerObj = {\n instances: context.addLayer({\n name: `${layer.alias()}-${this.constructor.formalName()}-${idx}`,\n mark: 'point',\n encoding: {\n x: encodingFieldsInf.xField,\n y: encodingFieldsInf.yField,\n color: {\n field: encodingFieldsInf.colorField\n },\n size: {\n field: encodingFieldsInf.sizeField,\n value: this.defaultSizeValue()\n }\n },\n transform: {\n type: 'identity'\n },\n transition: this.getTransitionConfig(),\n calculateDomain: false,\n source: dt => dt.select(() => false, {\n saveChild: false\n }),\n interactive: false,\n render: false\n }),\n linkedLayer: layer\n };\n\n layers.push(layerObj);\n }\n });\n return layers;\n }\n\n getTransitionConfig () {\n return {\n disabled: true\n };\n }\n\n /**\n * Returns the default area value of the anchor point.\n * @return { number } Default area value of anchor.\n */\n defaultSizeValue () {\n return 100;\n }\n\n apply (selectionSet) {\n const self = this;\n const dataModel = selectionSet.mergedEnter.model;\n if (selectionSet.isSourceFieldPresent !== false) {\n const drawingInf = this.drawingContext();\n const sideEffectGroup = drawingInf.sideEffectGroup;\n const className = `${this.config().className}`;\n const layers = this._layers;\n const parentGroup = this.createElement(sideEffectGroup, 'g', [1], `${className}-container`);\n const anchorGroups = this.createElement(parentGroup, 'g', layers);\n anchorGroups.each(function (layer) {\n const instances = layer.instances;\n const elems = self.createElement(this, 'g', instances, className);\n const linkedLayer = layer.linkedLayer;\n const [transformedData, schema] = linkedLayer.getTransformedDataFromIdentifiers(dataModel);\n const transformedDataModel = new DataModel(transformedData, schema);\n elems.each(function (d, i) {\n instances[i].data(transformedDataModel).mount(this);\n });\n });\n }\n return this;\n }\n}\n","import AnchorEffect from './anchors';\nimport { CLASSPREFIX } from '../enums/constants';\n\nexport default class PersistentAnchors extends AnchorEffect {\n static formalName () {\n return 'persistent-anchors';\n }\n\n static defaultConfig () {\n return {\n className: `${CLASSPREFIX}-persistent-anchors`\n };\n }\n\n getTransitionConfig () {\n return {\n disabled: true\n };\n }\n}\n","import AnchorEffect from './anchors';\nimport { CLASSPREFIX } from '../enums/constants';\n\nexport default class BrushAnchors extends AnchorEffect {\n static formalName () {\n return 'brush-anchors';\n }\n\n static defaultConfig () {\n return {\n className: `${CLASSPREFIX}-brush-anchors`\n };\n }\n\n getTransitionConfig () {\n return {\n disabled: true\n };\n }\n}\n","import * as BEHAVIOURS from './enums/behaviours';\n\nexport const behaviourEffectMap = {\n [BEHAVIOURS.BRUSH]: ['selectionBox', {\n name: 'highlighter',\n options: {\n strategy: 'fade'\n }\n }, 'brush-anchors'],\n [`${BEHAVIOURS.BRUSH},${BEHAVIOURS.SELECT}`]: [{\n name: 'tooltip',\n options: {\n strategy: 'showSelectedItems',\n order: 0,\n filter: context => context.config().mode === 'fragmented'\n }\n }],\n [BEHAVIOURS.HIGHLIGHT]: [{\n name: 'highlighter',\n options: {\n strategy: 'highlight'\n }\n }, 'crossline', {\n name: 'tooltip',\n options: {\n order: 9999\n }\n }, 'anchors'],\n [BEHAVIOURS.FILTER]: ['filter'],\n [BEHAVIOURS.SELECT]: [{\n name: 'highlighter',\n options: {\n strategy: 'focus'\n }\n }, 'persistent-anchors']\n};\n","export const CLASSPREFIX = 'muze';\nexport const STACK = 'stack';\nexport const GROUP = 'group';\nexport const IDENTITY = 'identity';\nexport const ANGLE = 'angle';\nexport const RADIUS = 'radius';\nexport const SIZE = 'size';\nexport const COLOR = 'color';\nexport const SHAPE = 'shape';\nexport const OUTER_RADIUS_VALUE = 'outerRadiusValue';\nexport const TEXT_ANCHOR_MIDDLE = 'middle';\nexport const ENCODING = {\n X: 'x',\n Y: 'y',\n X0: 'x0',\n Y0: 'y0'\n};\n\nexport const ASCENDING = 'asc';\n\nexport const AREA_LAYER = 'area';\nexport const ARC_LAYER = 'arc';\nexport const LINE_LAYER = 'line';\nexport const TEXT_LAYER = 'text';\nexport const POINT_LAYER = 'point';\nexport const BAR_LAYER = 'bar';\nexport const TICK_LAYER = 'tick';\nexport const SIMPLE_LAYER = 'simple';\nexport const BASE_LAYER = 'base';\n","import { CLASSPREFIX, STACK } from '../../enums/constants';\n\nexport const defaultConfig = {\n classPrefix: CLASSPREFIX,\n defClassName: 'layer-area',\n className: '',\n interpolate: 'linear',\n transform: {\n type: STACK\n },\n interaction: {\n\n },\n nearestPointThreshold: 10,\n encoding: {\n color: {},\n x: {},\n y: {},\n y0: {},\n strokeOpacity: {\n value: 1\n }\n },\n transition: {\n effect: 'cubic',\n duration: 1000\n },\n connectNullData: false\n};\n","import { ERROR_MSG } from 'muze-utils';\n\n/**\n * This is an interface class which any new layer class has to extend.\n *\n * @example\n * class BarLayer extends BaseLayer {\n * update (params) {\n * // super.update(params);\n * // Update the bar layer\n * }\n * }\n * @class\n */\nexport default class SimpleLayer {\n\n formalName () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Sets or gets the dependencies.\n * @param {Object} dependencies Dependencies needed by layer\n * @return {BaseLayer} Instance of base layer.\n */\n dependencies () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Returns the config of the layer\n *\n * @param {Object} config Configuration of layer\n * @return {Object} configuration of layer\n */\n config () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Acts as a getter or setter function\n * When setter\n * Returns the datamodel of the layer\n * @param { DataModel } dataModel instance of DataModel\n * @return { DataModel } DataModel instance of the layer\n */\n data () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Returns a serialized schema of the layer\n * @return {Object} Serialized schema\n */\n serialize () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Returns the unique identifier of this layer\n * @return {string} id of the layer\n */\n id () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n /*\n * This method resolves the x, y, x0 and y0 values from the transformed data.\n * It also checks the type of transformed data for example, if it is a stacked data\n * then it fetches the y and y0 values from the stacked data.\n * @param {Array.} transformedData transformed data\n * @param {Object} fieldMap field definitions\n * @param {string} transformType type of transformed data - stack, group or identity.\n * @return {Array.} Normalized data\n * @private\n */\n normalizeTransformedData () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Gets the transform method from transform factory based on type of transform. It then calls the\n * transform method with the data and passes the configuration parameters of transform such as\n * groupBy, value field, etc.\n *\n * @param {DataModel} dataModel Instance of dataModel\n * @param {Object} config configuration for transforming data\n * @return {Array.} Transformed data.\n * @private\n */\n getTransformedData () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Calculates the domain from the data.\n * It checks the type of field and calculates the domain based on that. For example, if it\n * is a quantitative or temporal field, then it calculates the min and max from the data or\n * if it is a nominal field then it gets all the values from the data of that field.\n * @param {Array} data DataArray\n * @return {Array} Domain values array.\n */\n _calculateDomainFromData () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Returns the domain for the axis.\n *\n * @param {string} encodingType type of encoding x, y, color, etc.\n * @return {Object} Axis domains\n */\n getDomain () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Abstract method for getting nearest point\n * @return {BaseLayer} Instance of base layer\n */\n getNearestPoint () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Abstract method for highlighting points\n * @return {BaseLayer} Instance of base layer\n */\n highlightPoint () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Abstract method for deselecting points\n * @return {BaseLayer} Instance of base layer\n */\n dehighlightPoint () {\n return this;\n }\n\n linkLayerStore () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Sets the container element for the layer to be renderered.\n * @param {SVGElement} mountPoint SVG element or group element.\n */\n mount () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n render () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n}\n","export const DATA = 'data';\nexport const CONFIG = 'config';\nexport const MEASUREMENT = 'measurement';\nexport const AXES = 'axes';\nexport const NORMALIZED_DATA = 'normalizedData';\nexport const TRANSFORMED_DATA = 'transformedData';\nexport const DOMAIN = 'domain';\nexport const MOUNT = 'mount';\nexport const FIELDMAP = 'fieldMap';\nexport const DATA_UPDATED = 'dataUpdated';\n","/**\n * @module Axis\n * This file declares a class that is used to render an axis to add meaning to\n * plots.\n */\nimport { Symbols } from 'muze-utils';\nimport * as AxisOrientation from '../enums/axis-orientation';\n\n/**\n * @module Axis\n * This file exports constants that are used to reference axis orientations\n * in a consistent manner.\n */\nexport const BOTTOM = 'bottom';\nexport const TOP = 'top';\nexport const LEFT = 'left';\nexport const RIGHT = 'right';\n\n/**\n * This object is used to associate the axis orientation with the d3 class\n * used to represent that axis.\n */\nexport const axisOrientationMap = {\n [AxisOrientation.LEFT]: Symbols.axisLeft,\n [AxisOrientation.BOTTOM]: Symbols.axisBottom,\n [AxisOrientation.RIGHT]: Symbols.axisRight,\n [AxisOrientation.TOP]: Symbols.axisTop\n};\n","/**\n * @module axis\n * This file exports constants used to reference scale type\n * consistently throughout the project.\n */\nexport const LINEAR = 'linear';\nexport const BAND = 'band';\nexport const TIME = 'temporal';\nexport const COLOR = 'color';\nexport const ORDINAL = 'ordinal';\nexport const QUANTIZE = 'quantize';\nexport const QUANTILE = 'quantile';\nexport const LOG = 'log';\nexport const POW = 'pow';\nexport const IDENTITY = 'identity';\nexport const SEQUENTIAL = 'sequential';\nexport const THRESHOLD = 'threshold';\n","export const CLASSPREFIX = 'muze';\n\nexport const CONTINOUS = 'continous';\nexport const DISCRETE = 'discrete';\nexport const SEQUENTIAL = 'sequential';\nexport const ORDINAL = 'ordinal';\nexport const LINEAR = 'linear';\nexport const THRESHOLD = 'threshold';\nexport const QUANTIZE = 'quantize';\nexport const QUANTILE = 'quantile';\n\nexport const COLOR = 'color';\nexport const SHAPE = 'shape';\nexport const SIZE = 'size';\n\nexport const DOMAIN = 'domain';\nexport const BAND = 'band';\nexport const HIDDEN = 'hidden';\nexport const NUMBER = 'number';\nexport const BOTTOM = 'bottom';\nexport const TOP = 'top';\n\nexport const RGB = 'rgb';\nexport const HEX = 'hex';\nexport const HSLA = 'hsla';\nexport const HSL = 'hsl';\n\n","import { scales, colorSchemes } from 'muze-utils';\n\nimport {\n SEQUENTIAL,\n ORDINAL,\n LINEAR,\n CONTINOUS,\n THRESHOLD,\n QUANTIZE\n} from './enums/constants';\n\nimport * as ScaleType from './enums/scale-type';\n\nconst {\n scaleLinear,\n scaleThreshold,\n scaleLog,\n scalePow,\n scaleIdentity,\n scaleOrdinal,\n scaleSequential,\n scaleQuantize,\n scaleQuantile,\n schemeCategory10,\n schemeCategory20,\n schemeCategory20b,\n scaleBand,\n scaleTime\n} = scales;\nexport const scaleMap = {\n [ScaleType.LINEAR]: scaleLinear,\n [ScaleType.BAND]: scaleBand,\n [ScaleType.QUANTIZE]: scaleQuantize,\n [ScaleType.QUANTILE]: scaleQuantile,\n [ScaleType.THRESHOLD]: scaleThreshold,\n [ScaleType.SEQUENTIAL]: scaleSequential,\n [ScaleType.LOG]: scaleLog,\n [ScaleType.POW]: scalePow,\n [ScaleType.IDENTITY]: scaleIdentity,\n [ScaleType.TIME]: scaleTime,\n [ScaleType.COLOR]: scaleLinear,\n [ScaleType.ORDINAL]: scaleOrdinal\n};\nexport const SCHEMES = {\n SCHEME1: schemeCategory10,\n SCHEME2: schemeCategory20,\n SCHEME3: schemeCategory20b\n};\n\n/**\n * Accepts a scheme in a string format and returns the scale from d3-scale-chromatic\n *\n * @export\n * @param {string} scheme a string representing the kind of scheme for the color axis\n * @return {Object} The corresponding scale from a scheme type from d3 chromatic scale\n */\nexport function getScheme (scheme) {\n if (scheme[0] === 'i') {\n return scaleSequential(colorSchemes[scheme]);\n }\n return scaleOrdinal(colorSchemes[scheme]);\n}\n\n/**\n *\n *\n * @export\n * @param {*} scheme\n * @returns\n */\nexport function getSchemeType (scheme) {\n let schemeType = '';\n if (scheme && typeof (scheme) === 'string') {\n schemeType = scheme[0] === 'i' ? SEQUENTIAL : ORDINAL;\n } else {\n schemeType = ORDINAL;\n }\n return schemeType;\n}\n\n/**\n * This function is used to create a scale that is assigned to\n * an instance of axis.\n *\n * @export\n * @param {Object} params the input parameters to create a Scale object\n * @param {string} params.type the type of scale\n * @param {Array} params.range the range of scale\n * @return {Object} instance of scale\n */\nexport function createScale (params) {\n if (!params.type || !scaleMap[params.type]) {\n throw new Error(`${params.type} is not a valid scale type`);\n }\n if (!Array.isArray(params.range)) {\n throw new Error('range parameter must be an array');\n }\n let scaleFactory = null;\n const range = params.range;\n // @todo: do it using scale decorator\n if (params.type === LINEAR && params.interpolator) {\n scaleFactory = scaleMap[params.interpolator];\n if (params.interpolator === ScaleType.POW) {\n return scaleFactory().range(range).exponent(params.exponent);\n } else if (params.interpolator === ScaleType.LOG) {\n return scaleFactory().range(range).base([params.base]);\n }\n } else {\n scaleFactory = scaleMap[params.type];\n }\n\n if (params.type === QUANTIZE) {\n scaleFactory().nice();\n }\n return scaleFactory().range(range);\n}\n\n/**\n * This method is used to update the range of a scale\n * so that the core module can remain agnostic of the d3\n * scale api.\n *\n * @export\n * @param {Scale} scale Instance of d3 Scale.\n * @param {Array} range new range of the scale.\n * @return {Scale} Updated scale.\n */\nexport function updateScaleRange (scale, range) {\n return scale.range(range);\n}\n\n/**\n *\n *\n * @export\n * @param {*} domainType\n * @param {*} rangeType\n * @param {*} steps\n * @returns\n */\nexport function getScaleType (domainType, rangeType, steps) {\n if (rangeType === CONTINOUS) {\n return LINEAR;\n }\n if (domainType === CONTINOUS) {\n if (steps instanceof Array) {\n return THRESHOLD;\n }\n return QUANTIZE;\n }\n return ORDINAL;\n}\n","import { getUniqueId } from 'muze-utils';\nimport { CLASSPREFIX } from '../enums/constants';\n\n/**\n *\n *\n */\nexport const defaultConfig = {\n id: getUniqueId(),\n axisName: {\n defClassName: 'axis-name'\n },\n axisNamePadding: 12,\n base: 10,\n classPrefix: CLASSPREFIX,\n className: `${CLASSPREFIX}-axis`,\n exponent: 1,\n interpolator: 'linear',\n fixedBaseline: true,\n labels: {\n rotation: 0,\n smartTicks: false\n },\n orientation: 'left',\n maxHeight: 50, // @todo: height and width wont be hardcoded\n maxWidth: 40,\n numberFormat: val => val,\n padding: 0.3,\n nice: true,\n numberOfTicks: 10,\n rotate: false,\n show: true,\n showAxisName: true,\n showInnerTicks: null,\n showOuterTicks: null,\n style: {},\n type: 'linear',\n tickFormat: null,\n tickValues: null,\n xOffset: undefined,\n yOffset: undefined\n};\n\n","/**\n * This file exports functionality that is used to render axis.\n */\nimport { selectElement, makeElement, angleToRadian } from 'muze-utils';\nimport * as AxisOrientation from './enums/axis-orientation';\nimport { LINEAR, HIDDEN, BOTTOM, TOP } from './enums/constants';\n\n/**\n *\n *\n * @param {*} instance\n * @param {*} container\n * @param {*} labelManager\n * @param {*} config\n */\nconst rotateAxis = (instance, tickText, labelManager, config) => {\n const axis = instance.axis();\n const scale = instance.scale();\n const {\n orientation,\n labels,\n fixedBaseline,\n type\n } = config;\n let { rotation } = labels;\n\n const tickSize = instance.getTickSize();\n\n tickText.each(function (datum, index) {\n let yShift;\n let xShift;\n const tickFormatter = axis.tickFormat() ? axis.tickFormat : scale.tickFormat;\n const temp = tickFormatter ? tickFormatter()(datum) : datum;\n\n datum = temp.toString();\n\n const tickLabelDim = labelManager.getOriSize(datum);\n const width = tickLabelDim.width * 0.5;\n const height = tickLabelDim.height * 0.5;\n\n if (rotation < 0) {\n rotation = 360 + rotation;\n }\n\n const quadrant = 4 - Math.floor(rotation / 90);\n const rotationNormalizer = ((quadrant % 2 === 0) ? rotation : 180 * Math.ceil(rotation / 180) - rotation) % 180;\n\n yShift = Math.sqrt(height ** 2 + width ** 2) * Math.sin(angleToRadian(rotationNormalizer));\n\n if ((quadrant === 3 || quadrant === 2) && !(rotationNormalizer > 67.5 && rotationNormalizer <= 90)) {\n yShift += height * 2;\n }\n xShift = width;\n\n if (rotation === 90) {\n xShift = height;\n } else if (rotation === 270) {\n xShift = -height;\n } else {\n xShift = 0;\n }\n\n if (orientation === AxisOrientation.TOP) {\n xShift = (index === 0 && fixedBaseline && type === LINEAR) ? xShift + xShift / 2 : xShift;\n selectElement(this)\n .attr('transform', `translate(${-xShift + tickSize} \n ${-yShift - tickSize}) rotate(${rotation})`);\n } else {\n xShift = (index === 0 && fixedBaseline && type === LINEAR) ? xShift - xShift / 2 : xShift;\n selectElement(this)\n .attr('transform', `translate(${xShift - tickSize} \n ${yShift + tickSize}) rotate(${rotation})`);\n }\n });\n return tickText;\n};\n\n/**\n *\n *\n * @param {*} tickText\n * @param {*} axisInstance\n */\nconst changeTickOrientation = (selectContainer, axisInstance, tickSize) => {\n const {\n _smartTicks\n } = axisInstance;\n const config = axisInstance.config();\n const labelManager = axisInstance.dependencies().labelManager;\n const {\n labels,\n orientation\n } = config;\n const {\n rotation,\n smartTicks: isSmartTicks\n } = labels;\n\n const tickText = selectContainer.selectAll('.tick text');\n tickText.selectAll('tspan').remove();\n\n // rotate labels if not enough space is available\n if (rotation !== 0 && isSmartTicks === false && (orientation === TOP || orientation === BOTTOM)) {\n rotateAxis(axisInstance, tickText, labelManager, config);\n } else if (rotation === 0 && isSmartTicks === false) {\n tickText.attr('transform', '');\n } else {\n tickText.attr('y', 0)\n .attr('x', 0)\n .text('');\n const tspan = makeElement(tickText, 'tspan', (d, i) => _smartTicks[i].lines, 'smart-text');\n tspan.attr('dy', '0')\n .style('opacity', '0')\n .transition()\n .duration(1000)\n .attr('dy', (d, i) => {\n if (orientation === BOTTOM || i !== 0) {\n return _smartTicks[i].oriTextHeight;\n }\n return -_smartTicks[i].oriTextHeight * (_smartTicks[i].lines.length - 1) - tickSize;\n })\n .style('opacity', 1)\n .attr('x', 0)\n .text(e => e);\n }\n\n return tickText;\n};\n\nconst setFixedBaseline = (axisInstance) => {\n const {\n fixedBaseline\n } = axisInstance.config();\n if (fixedBaseline) {\n axisInstance.setFixedBaseline();\n }\n};\n\n/**\n *\n *\n * @param {*} textNode\n * @param {*} orientation\n * @param {*} measures\n */\nconst setAxisNamePos = (textNode, orientation, measures) => {\n const {\n axisNameHeight,\n yOffset,\n labelOffset,\n availableSpace\n } = measures;\n switch (orientation) {\n case AxisOrientation.LEFT:\n textNode.attr('transform',\n `translate(${-(availableSpace.width - axisNameHeight)},${yOffset + labelOffset})rotate(-90)`);\n break;\n case AxisOrientation.RIGHT:\n textNode.attr('transform',\n `translate(${(availableSpace.width - axisNameHeight)},${yOffset + labelOffset})rotate(90)`);\n break;\n case AxisOrientation.TOP:\n textNode.attr('transform',\n `translate(${availableSpace.width / 2},${-availableSpace.height + axisNameHeight})`);\n break;\n case AxisOrientation.BOTTOM:\n textNode.attr('transform',\n `translate(${availableSpace.width / 2},${availableSpace.height - axisNameHeight / 2})`);\n break;\n default:\n }\n return textNode;\n};\n\n/**\n * This method is used to render the axis inside an\n * svg container.\n *\n * @export\n * @param {Object} axisInstance the nput object required to render axis\n * @param {string} axisInstance.orientation the orientation of axis\n * @param {Object} axisInstance.scale instance of d3 scale\n * @param {SVGElement} axisInstance.container the container in which to render\n */\nexport function renderAxis (axisInstance) {\n const config = axisInstance.config();\n const labelManager = axisInstance.dependencies().labelManager;\n const mount = axisInstance.mount();\n const range = axisInstance.range();\n const axis = axisInstance.axis();\n const scale = axisInstance.scale();\n const {\n _axisNameStyle,\n _tickLabelStyle,\n formatter,\n tickValues\n } = axisInstance;\n const {\n orientation,\n name,\n labels,\n xOffset,\n yOffset,\n axisNamePadding,\n className,\n showAxisName,\n show,\n id,\n interpolator,\n classPrefix\n } = config;\n\n if (!show) {\n return;\n }\n\n const tickSize = axisInstance.getTickSize();\n\n const selectContainer = makeElement(selectElement(mount), 'g', [axisInstance], `${className}`, {},\n key => key.config().id);\n\n // Set style for tick labels\n labelManager.setStyle(_tickLabelStyle);\n\n // @to-do: Need to write a configuration override using decorator pattern\n if (interpolator === 'linear') {\n // Set ticks for the axis\n axisInstance.setTickValues();\n }\n\n const labelFunc = scale.ticks || scale.quantile || scale.domain;\n\n formatter && axis.tickFormat(formatter(tickValues || axis.tickValues() || labelFunc()));\n\n // Get range(length of range)\n const availableSpace = Math.abs(range[0] - range[1]);\n\n // Get width and height taken by axis labels\n const labelProps = axisInstance.axisDimensions().tickLabelDim;\n\n // Draw axis ticks\n selectContainer.attr('transform', `translate(${xOffset},${yOffset})`);\n setFixedBaseline(axisInstance);\n if (labels.smartTicks === false) {\n selectContainer.transition()\n .duration(1000).call(axis);\n } else {\n selectContainer.call(axis);\n }\n selectContainer.selectAll('.tick').classed(`${classPrefix}-ticks`, true);\n selectContainer.selectAll('.tick line').classed(`${classPrefix}-tick-lines`, true);\n\n // Set classes for ticks\n const tickText = selectContainer.selectAll('.tick text');\n tickText.classed(`${classPrefix}-ticks`, true)\n .classed(`${classPrefix}-ticks-${id}`, true);\n changeTickOrientation(selectContainer, axisInstance, tickSize);\n\n // Create axis name\n const textNode = makeElement(selectContainer, 'text', [name], `${classPrefix}-axis-name`)\n .attr('text-anchor', 'middle')\n .classed(`${classPrefix}-axis-name-${id}`, true)\n .text(d => d);\n\n // Hide axis name if show is off\n textNode.classed(HIDDEN, !showAxisName);\n\n // render labels based on orientation of axis\n const labelOffset = availableSpace / 2;\n\n // Set style for axis name\n labelManager.setStyle(_axisNameStyle);\n const axisNameSpace = labelManager.getOriSize(name);\n const measures = {\n labelProps,\n tickSize,\n axisNamePadding,\n axisNameHeight: axisNameSpace.height,\n axisNameWidth: axisNameSpace.width,\n yOffset,\n xOffset,\n labelOffset,\n availableSpace: axisInstance.availableSpace()\n };\n // Set position for axis name\n setAxisNamePos(textNode, orientation, measures);\n}\n","import { TOP, LEFT, BOTTOM } from '../enums/axis-orientation';\nimport { LOG } from '../enums/scale-type';\n\nexport const getNumberOfTicks = (availableSpace, labelDim, axis, axisInstance) => {\n const ticks = axis.scale().ticks();\n const { numberOfTicks } = axisInstance.config();\n const tickLength = ticks.length;\n let numberOfValues = tickLength;\n\n if (tickLength * (labelDim * 1.5) > availableSpace) {\n numberOfValues = Math.floor(availableSpace / (labelDim * 1.5));\n }\n\n numberOfValues = Math.min(numberOfTicks, Math.max(1, numberOfValues));\n return axis.scale().ticks(numberOfValues);\n};\n\nexport const sanitizeDomain = (domain, context) => {\n const interpolator = context.config().interpolator;\n // @todo: Get from scale decorator\n if (interpolator === LOG && domain[0] >= 0) {\n return [Math.max(1, domain[0]), Math.max(1, domain[1])];\n }\n return domain;\n};\n\nexport const getTickFormatter = (tickFormat, numberFormat) => {\n if (tickFormat) {\n return ticks => (val, i) => tickFormat(numberFormat(val), i, ticks);\n }\n return () => val => numberFormat(val);\n};\n\n/**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\nexport const getTickLabelInfo = (context) => {\n let largestLabel = '';\n let labelProps;\n let smartTick = {};\n let axisTickLabels;\n const scale = context.scale();\n const allLabelLengths = [];\n const { tickFormat, tickValues, numberFormat } = context.config();\n const labelFunc = scale.ticks || scale.quantile || scale.domain;\n // set the style on the shared label manager instance\n const { labelManager } = context.dependencies();\n\n labelManager.setStyle(context._tickLabelStyle);\n // get the values along the domain\n\n axisTickLabels = tickValues || labelFunc();\n // Get the tick labels\n axisTickLabels = axisTickLabels.map((originalLabel, i) => {\n const formattedLabel = numberFormat(originalLabel);\n\n // get formats of tick if any\n const label = tickFormat ? tickFormat(formattedLabel, i, axisTickLabels) : (scale.tickFormat ?\n numberFormat(scale.tickFormat()(originalLabel)) : formattedLabel);\n\n // convert to string for quant values\n const temp = label.toString();\n // Get spaces for all labels\n allLabelLengths.push(labelManager.getOriSize(temp));\n // Getting largest label\n if (temp.length > largestLabel.length) {\n largestLabel = temp;\n smartTick = context.smartTicks() ? context.smartTicks()[i] : {};\n labelProps = allLabelLengths[i];\n }\n return label;\n });\n\n labelProps = labelManager.getOriSize(largestLabel);\n\n return { largestLabel, largestLabelDim: labelProps, axisTickLabels, allLabelLengths, smartTick };\n};\n\n/**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\nexport const computeAxisDimensions = (context) => {\n let tickLabelDim = {};\n const {\n name,\n labels,\n tickValues\n } = context.config();\n const angle = ((labels.smartTicks) ? 0 : labels.rotation) * Math.PI / 180;\n const { labelManager } = context.dependencies();\n const {\n largestLabelDim,\n axisTickLabels,\n smartTick\n } = getTickLabelInfo(context);\n const { height: labelHeight, width: labelWidth } = largestLabelDim;\n // get the domain of axis\n const domain = context.domain();\n\n if (domain.length === 0) {\n return null;\n }\n if (context._rotationLock === false) {\n context.setRotationConfig(tickValues || axisTickLabels, largestLabelDim.width);\n context._rotationLock = false;\n }\n if (labels.smartTicks) {\n tickLabelDim = smartTick;\n } else {\n tickLabelDim = {\n width: Math.abs(labelHeight * Math.sin(angle)) + Math.abs(labelWidth * Math.cos(angle)),\n height: Math.abs(labelWidth * Math.sin(angle)) + Math.abs(labelHeight * Math.cos(angle))\n };\n }\n\n labelManager.setStyle(context._axisNameStyle);\n return {\n tickSize: context.getTickSize(),\n tickLabelDim,\n axisLabelDim: labelManager.getOriSize(name),\n largestLabelDim,\n axisTickLabels\n };\n};\n\n/**\n*\n*\n* @memberof SimpleAxis\n*/\nexport const setOffset = (context) => {\n let x = 0;\n let y = 0;\n const logicalSpace = context.logicalSpace();\n const config = context.config();\n const {\n orientation,\n xOffset,\n yOffset\n } = config;\n if (orientation === LEFT) {\n x = xOffset === undefined ? logicalSpace.width : xOffset;\n }\n if (orientation === TOP) {\n y = yOffset === undefined ? logicalSpace.height : yOffset;\n }\n context.config({ xOffset: x, yOffset: y });\n};\n\n/**\n *\n *\n * @param {*} timeDiff\n * @param {*} range\n * @param {*} domain\n * @returns\n */\nconst getAxisOffset = (timeDiff, range, domain) => {\n const pvr = Math.abs(range[1] - range[0]) / (domain[1] - domain[0]);\n const width = (pvr * timeDiff);\n const avWidth = (range[1] - range[0]);\n const bars = avWidth / width;\n const barWidth = avWidth / (bars + 1);\n const diff = avWidth - barWidth * bars;\n\n return diff / 2;\n};\n\nexport const adjustRange = (minDiff, range, domain, orientation) => {\n const diff = getAxisOffset(minDiff, range, domain);\n\n if (orientation === TOP || orientation === BOTTOM) {\n range[0] += diff;\n range[1] -= diff;\n } else {\n range[0] -= diff;\n range[1] += diff;\n }\n return range;\n};\n\n /**\n * Listener attached to the axis on change of parameters.\n *\n * @param {Function} callback to be excuted on change of domain range etc\n * @memberof SimpleAxis\n */\nexport const registerChangeListeners = (context) => {\n const store = context.store();\n\n store.model.next(['domain', 'range', 'mount', 'config'], (...params) => {\n context.render();\n context._domainLock = false;\n context._eventList.forEach((e) => {\n e.action instanceof Function && e.action(...params);\n });\n }, true);\n return context;\n};\n\n/**\n *\n *\n * @param {*} axisDimensions\n * @param {*} config\n * @param {*} range\n * @returns\n */\nexport const getHorizontalAxisSpace = (context, axisDimensions, config, range) => {\n let width;\n let height;\n const {\n tickSize,\n tickLabelDim,\n axisLabelDim\n } = axisDimensions;\n const {\n axisNamePadding,\n showAxisName,\n tickValues\n } = config;\n const domain = context.domain();\n const { height: axisDimHeight } = axisLabelDim;\n const { height: tickDimHeight, width: tickDimWidth } = tickLabelDim;\n\n width = range && range.length ? range[1] - range[0] : 0;\n\n height = 0;\n if (tickValues) {\n const minTickDiff = context.getMinTickDifference();\n const [min, max] = [Math.min(...tickValues, ...domain), Math.max(...tickValues, ...domain)];\n\n width = ((max - min) / Math.abs(minTickDiff)) * (tickDimWidth + context._minTickDistance.width);\n }\n if (!width || width === 0) {\n height = Math.max(tickDimWidth, tickDimHeight);\n } else {\n height = tickDimHeight;\n }\n height += (showAxisName ? (axisDimHeight + axisNamePadding) : 0) + tickSize;\n return {\n width,\n height\n };\n};\n\n/**\n *\n *\n * @param {*} axisDimensions\n * @param {*} config\n * @param {*} range\n * @returns\n */\nexport const getVerticalAxisSpace = (context, axisDimensions, config) => {\n let height;\n let width;\n const {\n tickSize,\n tickLabelDim,\n axisLabelDim\n } = axisDimensions;\n const {\n axisNamePadding,\n showAxisName,\n tickValues\n } = config;\n const domain = context.domain();\n const { height: axisDimHeight } = axisLabelDim;\n const { height: tickDimHeight, width: tickDimWidth } = tickLabelDim;\n\n height = 0;\n width = tickDimWidth;\n if (tickValues) {\n const minTickDiff = context.getMinTickDifference();\n const [min, max] = [Math.min(...tickValues, ...domain), Math.max(...tickValues, ...domain)];\n\n height = ((max - min) / Math.abs(minTickDiff)) * (tickDimHeight);\n }\n width += (showAxisName ? axisDimHeight : 0) + tickSize + axisNamePadding;\n\n return {\n height,\n width\n };\n};\n\n /**\n * Calculates the logical space of the axis\n * @return {Object} Width and height occupied by the axis.\n */\nexport const calculateBandSpace = (context) => {\n const range = context.range();\n const config = context.config();\n const {\n orientation,\n show\n } = config;\n const axisDimensions = context.getAxisDimensions();\n const {\n largestLabelDim,\n axisTickLabels\n } = axisDimensions;\n const { height: largestDimHeight, width: largestDimWidth } = largestLabelDim;\n\n if (orientation === TOP || orientation === BOTTOM) {\n let { width, height } = getHorizontalAxisSpace(context, axisDimensions, config, range);\n if (!width || width === 0) {\n width = axisTickLabels.length * (Math.min(largestDimWidth + context._minTickDistance.width,\n largestDimHeight + context._minTickDistance.width));\n }\n if (show === false) {\n height = 0;\n }\n return {\n width,\n height\n };\n }\n\n let { width, height } = getVerticalAxisSpace(context, axisDimensions, config, range);\n\n if (!height || height === 0) {\n height = axisTickLabels.length * (largestDimHeight + largestDimHeight / 2) + largestDimHeight;\n }\n if (show === false) {\n width = 0;\n }\n return {\n width,\n height\n };\n};\n\n/**\n * Calculates the logical space of the axis\n * @return {Object} Width and height occupied by the axis.\n */\nexport const calculateContinousSpace = (context) => {\n const range = context.range();\n const config = context.config();\n const axisDimensions = context.getAxisDimensions();\n\n const {\n orientation,\n show,\n showAxisName\n } = config;\n const {\n axisLabelDim\n } = axisDimensions;\n\n if (show === false) {\n return {\n width: 0,\n height: 0\n };\n }\n\n const { width: axisDimWidth } = axisLabelDim;\n\n if (orientation === TOP || orientation === BOTTOM) {\n const { width, height } = getHorizontalAxisSpace(context, axisDimensions, config);\n const axisWidth = Math.max(width, axisDimWidth);\n\n return {\n width: axisWidth,\n height\n };\n }\n\n const { width, height } = getVerticalAxisSpace(context, axisDimensions, config, range);\n\n const effHeight = Math.max(height, showAxisName ? axisDimWidth : 0);\n\n return {\n width,\n height: effHeight\n };\n};\n\n","import { mergeRecursive } from 'muze-utils';\n\nexport const PROPS = {\n availableSpace: {},\n axisDimensions: {},\n config: {\n sanitization: (context, value) => {\n if (value.labels && value.labels.rotation) {\n context._rotationLock = true;\n }\n value = mergeRecursive(context._config || {}, value);\n value.axisNamePadding = Math.max(value.axisNamePadding, 0);\n context.axis(context.createAxis(value));\n context.store().commit('config', value);\n return value;\n }\n },\n logicalSpace: {},\n mount: {\n sanitization: (context, value) => {\n context.store().commit('mount', value);\n return value;\n }\n },\n range: {\n sanitization: (context, value) => {\n context.scale().range(value);\n context.logicalSpace(null);\n context.store().commit('range', value);\n return value;\n }\n },\n\n smartTicks: {},\n store: {},\n tickSize: {}\n};\n","import {\n Store,\n mergeRecursive,\n getSmartComputedStyle,\n selectElement,\n generateGetterSetters,\n getUniqueId\n} from 'muze-utils';\nimport { createScale } from '../scale-creator';\nimport { axisOrientationMap, BOTTOM, TOP } from '../enums/axis-orientation';\nimport { defaultConfig } from './default-config';\nimport { renderAxis } from '../axis-renderer';\nimport { DOMAIN, BAND } from '../enums/constants';\nimport {\n computeAxisDimensions,\n setOffset,\n registerChangeListeners,\n calculateContinousSpace\n} from './helper';\nimport { PROPS } from './props';\n\nexport default class SimpleAxis {\n\n /**\n * Creates an instance of SimpleAxis.\n * @memberof SimpleAxis\n */\n constructor (config, dependencies) {\n this._id = getUniqueId();\n\n this._dependencies = dependencies;\n this._mount = null;\n this._range = [];\n this._domain = [];\n this._domainLock = false;\n this._rotationLock = false;\n this._axisDimensions = {};\n this._eventList = [];\n\n const defCon = mergeRecursive({}, this.constructor.defaultConfig());\n const simpleConfig = mergeRecursive(defCon, config);\n\n const bodyElem = selectElement('body');\n const classPrefix = simpleConfig.classPrefix;\n this._tickLabelStyle = getSmartComputedStyle(bodyElem, `${classPrefix}-ticks`);\n this._axisNameStyle = getSmartComputedStyle(bodyElem, `${classPrefix}-axis-name`);\n dependencies.labelManager.setStyle(this._tickLabelStyle);\n this._minTickDistance = dependencies.labelManager.getOriSize('ww');\n\n generateGetterSetters(this, PROPS);\n this.store(new Store({\n domain: this.domain(),\n range: this.range(),\n config: simpleConfig,\n mount: this.mount()\n }));\n this.config(simpleConfig);\n\n this._scale = this.createScale(this._config);\n this._axis = this.createAxis(this._config);\n\n registerChangeListeners(this);\n }\n\n /**\n * Returns the default configuration of simple axis\n * @return {Object} default configurations\n */\n static defaultConfig () {\n return defaultConfig;\n }\n\n /**\n * Sets a fixed baseline for the first ticks so that they can render effectively within\n * the given area\n *\n * @param {*} tickText\n * @param {*} config\n * @param {*} labelManager\n */\n setFixedBaseline () {\n return this;\n }\n\n /**\n *\n *\n * @readonly\n * @memberof SimpleAxis\n */\n scale (...params) {\n if (params.length) {\n this._scale = params[0];\n return this;\n }\n return this._scale;\n }\n\n /**\n *\n *\n * @readonly\n * @memberof SimpleAxis\n */\n axis (...params) {\n if (params.length) {\n this._axis = params[0];\n return this;\n }\n return this._axis;\n }\n\n /**\n *\n *\n * @param {*} d\n * @returns\n * @memberof SimpleAxis\n */\n domain (...domain) {\n if (domain.length) {\n this.scale().domain(domain[0]);\n this._domain = this.scale().domain();\n this.smartTicks(this.setTickConfig());\n this.store().commit(DOMAIN, this._domain);\n this.logicalSpace(null);\n return this;\n }\n return this._domain;\n }\n\n /**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\n dependencies () {\n return this._dependencies;\n }\n\n /**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\n createScale (config) {\n const {\n base,\n padding,\n interpolator,\n exponent\n } = config;\n const range = this.range();\n const scale = createScale({\n padding,\n interpolator,\n exponent,\n base,\n range,\n type: this.constructor.type()\n });\n\n return scale;\n }\n\n getTickFormatter (tickFormat, numberFormat) {\n if (tickFormat) {\n return ticks => (val, i) => tickFormat(numberFormat(val), i, ticks);\n }\n return () => val => numberFormat(val);\n }\n\n /**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\n createAxis (config) {\n const {\n tickFormat,\n numberFormat,\n orientation\n } = config;\n const axisClass = axisOrientationMap[orientation];\n\n if (axisClass) {\n const axis = axisClass(this.scale());\n this.formatter = this.getTickFormatter(tickFormat, numberFormat);\n\n return axis;\n }\n return null;\n }\n\n /**\n *\n *\n * @memberof SimpleAxis\n */\n setTickConfig () {\n return this;\n }\n\n /**\n *\n *\n * @param {*} axisTickLabels\n * @param {*} labelWidth\n * @returns\n * @memberof SimpleAxis\n */\n setRotationConfig (axisTickLabels, labelWidth) {\n const { orientation } = this.config();\n\n if (orientation === TOP || orientation === BOTTOM) {\n const range = this.range();\n const length = Math.abs(range[0] - range[1]);\n this.config({ labels: { rotation: 0 } });\n if (length > 0 && axisTickLabels.length * (labelWidth + this._minTickDistance.width) > length) {\n this.config({ labels: { rotation: -90 } });\n }\n }\n return this;\n }\n\n /**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\n adjustRange () {\n return this;\n }\n\n getScaleValue (domainVal) {\n if (domainVal === null || domainVal === undefined) {\n return undefined;\n }\n return this.scale()(domainVal);\n }\n\n /**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\n getTickSize () {\n return this.axis().tickSize();\n }\n\n /**\n * Gets the space occupied by the parts of an axis\n *\n * @return {Object} object with details about sizes of the axis.\n * @memberof SimpleAxis\n */\n getAxisDimensions () {\n this.axisDimensions(computeAxisDimensions(this));\n return this.axisDimensions();\n }\n\n /**\n * Gets the space occupied by the axis\n *\n * @return {Object} object with details about size of the axis.\n * @memberof SimpleAxis\n */\n getLogicalSpace () {\n if (!this.logicalSpace()) {\n this.logicalSpace(calculateContinousSpace(this));\n setOffset(this);\n this.logicalSpace();\n }\n return this.logicalSpace();\n }\n\n /**\n * Returns the value from the domain when given a value from the range.\n * @param {number} value Value from the range.\n * @return {number} Value\n */\n invert (...value) {\n const values = value.map(d => this.scale().invert(d)) || [];\n return value.length === 1 ? values[0] : values;\n }\n\n /**\n * Gets the nearest range value from the given range values.\n * @param {number} v1 Start range value\n * @param {number} v2 End range value\n * @return {Array} range values\n */\n getNearestRange (v1, v2) {\n let p1;\n let p2;\n let extent;\n const {\n type\n } = this.config();\n const scale = this.scale();\n const range = scale.range();\n const reverse = range[0] > range[1];\n\n if (type === BAND) {\n extent = scale.invertExtent(v1, v2);\n p1 = scale(reverse ? extent[extent.length - 1] : extent[0]);\n p2 = scale(reverse ? extent[0] : extent[extent.length - 1]) + scale.bandwidth();\n return [p1, p2];\n }\n return [v1, v2];\n }\n\n /**\n * This method is used to assign a domain to the axis.\n *\n * @param {Array} domain the domain of the scale\n * @memberof SimpleAxis\n */\n updateDomainBounds (domain) {\n let currentDomain = this.domain();\n if (this.config().domain) {\n currentDomain = this.config().domain;\n } else {\n if (currentDomain.length === 0) {\n currentDomain = domain;\n }\n if (domain.length) {\n currentDomain = [Math.min(currentDomain[0], domain[0]), Math.max(currentDomain[1], domain[1])];\n }\n }\n\n return this.domain(currentDomain);\n }\n\n /**\n *\n *\n * @param {*} domain\n * @returns\n * @memberof SimpleAxis\n */\n updateDomainCache (domain) {\n if (this._domainLock === false) {\n this.domain([]);\n this._domainLock = true;\n }\n const cachedDomain = [];\n domain && domain.forEach((d) => {\n d !== undefined && d !== null && cachedDomain.push(d);\n });\n return this.updateDomainBounds(cachedDomain);\n }\n\n getMinTickDifference () {\n return this.domain();\n }\n\n getFormattedTickValues (tickValues) {\n return tickValues;\n }\n\n /**\n *\n *\n * @param {*} tickValues\n * @returns\n * @memberof SimpleAxis\n */\n setTickValues () {\n const {\n tickValues\n } = this.config();\n\n if (tickValues) {\n tickValues instanceof Array && this.axis().tickValues(tickValues);\n return this;\n }\n return this;\n }\n\n /**\n * This method returns the width in pixels for one\n * unit along the axis. It is only applicable to band scale\n * and returns undefined for other scale type.\n *\n * @return {number} the width of one band along band scale axis\n * @memberof SimpleAxis\n */\n getUnitWidth () {\n return 0;\n }\n\n /**\n * This method returns an object that can be used to\n * reconstruct this instance.\n *\n * @return {Object} the serializable props of axis\n * @memberof SimpleAxis\n */\n serialize () {\n return {\n name: this.name,\n type: this.type,\n range: this.range(),\n config: this.config()\n };\n }\n\n /**\n * Returns the id of the axis.\n * @return {string} Unique identifier of the axis.\n */\n get id () {\n return this._id;\n }\n\n registerEvent (event, fn) {\n this._eventList.push({ name: event, action: fn });\n }\n\n /**\n *\n *\n * @param {*} fn\n * @memberof SimpleAxis\n */\n on (event, fn) {\n event = event || 'update';\n this.registerEvent(event, fn);\n }\n\n /**\n * This method is used to render the axis inside\n * the supplied svg container.\n *\n * @param {SVGElement} svg the svg element in which to render the path\n * @memberof SimpleAxis\n */\n /* istanbul ignore next */render () {\n if (this.mount()) {\n renderAxis(this);\n }\n return this;\n }\n\n /**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\n remove () {\n this.store().unsubscribeAll();\n selectElement(this.mount()).remove();\n return this;\n }\n\n /**\n *\n *\n * @memberof SimpleAxis\n */\n unsubscribe () {\n this.store().unsubscribeAll();\n return this;\n }\n\n /**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\n isReverse () {\n const range = this.range();\n return range[0] > range[1];\n }\n\n /**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\n getPixelToValueRatio () {\n const scale = this.scale();\n const range = scale.range();\n const domain = scale.domain();\n\n return Math.abs(range[1] - range[0]) / (domain[1] - domain[0]);\n }\n}\n\n","import { scaleMap } from '../../scale-creator';\n\nexport default class LinearInterpolator {\n\n createScale (config) {\n const {\n range\n } = config;\n const scaleFactory = scaleMap.linear;\n this._scale = scaleFactory().range(range);\n return this._scale;\n }\n\n getScaleValue (domainVal) {\n return this._scale(domainVal) + 0.5;\n }\n\n sanitizeDomain (domain) {\n return domain;\n }\n}\n","import { scaleMap } from '../../scale-creator';\n\nexport default class LogInterpolator {\n\n createScale (config) {\n const {\n range,\n base\n } = config;\n const scaleFactory = scaleMap.log;\n this._scale = scaleFactory().range(range).base(base);\n return this._scale;\n }\n\n getScaleValue (domainVal) {\n if (domainVal <= 0) {\n return 1;\n }\n\n return this._scale(domainVal) + 0.5;\n }\n\n sanitizeDomain (domain) {\n if (domain[0] <= 0) {\n return [Math.max(1, domain[0]), Math.max(1, domain[1])];\n } return domain;\n }\n}\n","import { scaleMap } from '../../scale-creator';\n\nexport default class PowInterpolator {\n\n createScale (config) {\n const {\n range,\n exponent\n } = config;\n const scaleFactory = scaleMap.pow;\n this._scale = scaleFactory().range(range).exponent(exponent);\n return this._scale;\n }\n\n getScaleValue (domainVal) {\n return this._scale(domainVal) + 0.5;\n }\n\n sanitizeDomain (domain) {\n return domain;\n }\n}\n","import { getSmallestDiff } from 'muze-utils';\nimport SimpleAxis from './simple-axis';\nimport { BOTTOM, TOP, LEFT, RIGHT } from '../enums/axis-orientation';\nimport { LINEAR, LOG, POW } from '../enums/scale-type';\nimport { LogInterpolator, PowInterpolator, LinearInterpolator } from './interpolators';\nimport { DOMAIN } from '../enums/constants';\nimport {\n getTickLabelInfo,\n getNumberOfTicks\n} from './helper';\n\nexport const interpolatorMap = {\n [LOG]: LogInterpolator,\n [POW]: PowInterpolator,\n [LINEAR]: LinearInterpolator\n};\n\nexport default class ContinousAxis extends SimpleAxis {\n constructor (config, dependencies) {\n config.tickFormat = config.tickFormat || (val => val);\n super(config, dependencies);\n }\n /**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\n createScale (config) {\n const {\n base,\n padding,\n interpolator,\n exponent\n } = config;\n const range = this.range();\n const InterpolatorCls = interpolatorMap[interpolator];\n\n this._interpolator = new InterpolatorCls();\n let scale = this._interpolator.createScale({\n padding,\n exponent,\n base,\n range\n });\n\n scale = scale.nice();\n return scale;\n }\n\n /**\n * This method is used to assign a domain to the axis.\n *\n * @param {Array} domain the domain of the scale\n * @memberof SimpleAxis\n */\n updateDomainBounds (domain) {\n let currentDomain = this.domain();\n if (this.config().domain) {\n currentDomain = this.config().domain;\n } else {\n if (currentDomain.length === 0) {\n currentDomain = domain;\n }\n if (domain.length) {\n currentDomain = [Math.min(currentDomain[0], domain[0]), Math.max(currentDomain[1], domain[1])];\n }\n }\n\n return this.domain(currentDomain);\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof ContinousAxis\n */\n static type () {\n return LINEAR;\n }\n\n getScaleValue (domainVal) {\n if (domainVal === null || domainVal === undefined) {\n return undefined;\n }\n return this._interpolator.getScaleValue(domainVal);\n }\n /**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\n getTickSize () {\n const {\n showInnerTicks,\n showOuterTicks\n } = this.config();\n const axis = this.axis();\n axis.tickSizeInner(showInnerTicks === false ? 0 : 6);\n axis.tickSizeOuter(showOuterTicks === false ? 0 : 6);\n return axis.tickSize();\n }\n\n /**\n *\n *\n * @param {*} d\n * @returns\n * @memberof SimpleAxis\n */\n domain (domain) {\n if (domain && domain.length) {\n const { nice } = this.config();\n if (domain.length && domain[0] === domain[1]) {\n domain = [0, +domain[0] * 2];\n }\n this.scale().domain(domain);\n nice && this.scale().nice();\n this._domain = this.scale().domain();\n this.store().commit(DOMAIN, this._domain);\n this.logicalSpace(null);\n return this;\n } return this._domain;\n }\n\n /**\n * This method is used to set the space availiable to render\n * the SimpleCell.\n *\n * @param {number} width The width of SimpleCell.\n * @param {number} height The height of SimpleCell.\n * @memberof AxisCell\n */\n setAvailableSpace (width = 0, height, padding, isOffset) {\n const {\n left,\n right,\n top,\n bottom\n } = padding;\n const {\n orientation,\n fixedBaseline\n } = this.config();\n const { tickLabelDim } = this.getAxisDimensions();\n this.availableSpace({ width, height });\n\n if (orientation === TOP || orientation === BOTTOM) {\n const labelSpace = tickLabelDim.width;\n this.range([(fixedBaseline ? 0 : (labelSpace / 2)) + left, width - right - labelSpace / 2]);\n const axisHeight = this.getLogicalSpace().height;\n isOffset && this.config({ yOffset: Math.max(axisHeight, height) });\n } else {\n const labelSpace = tickLabelDim.height;\n this.range([height - bottom - (fixedBaseline ? 1 : (labelSpace / 2)), labelSpace / 2 + top]);\n const axisWidth = this.getLogicalSpace().width;\n isOffset && this.config({ xOffset: Math.max(axisWidth, width) });\n }\n return this;\n }\n\n /**\n *\n *\n * @param {*} tickValues\n * @returns\n * @memberof SimpleAxis\n */\n setTickValues () {\n const {\n tickValues\n } = this.config();\n const axis = this.axis();\n\n if (tickValues) {\n tickValues instanceof Array && this.axis().tickValues(tickValues);\n return this;\n }\n axis.tickValues(this.getTickValues());\n return this;\n }\n\n /**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\n getTickValues () {\n let labelDim = 0;\n const {\n orientation,\n tickValues\n } = this.config();\n const range = this.range();\n const axis = this.axis();\n\n const availableSpace = Math.abs(range[0] - range[1]);\n\n const labelProps = getTickLabelInfo(this).largestLabelDim;\n\n if (tickValues) {\n return axis.scale().ticks(tickValues);\n }\n labelDim = labelProps[orientation === BOTTOM || orientation === TOP ? 'width' : 'height'];\n\n return getNumberOfTicks(availableSpace, labelDim, axis, this);\n }\n\n getMinTickDifference () {\n return getSmallestDiff(this.config().tickValues);\n }\n\n /**\n * Sets a fixed baseline for the first ticks so that they can render effectively within\n * the given area\n *\n * @param {*} tickText\n * @param {*} config\n * @param {*} labelManager\n */\n setFixedBaseline (tickText) {\n const {\n orientation,\n labels\n } = this.config();\n const {\n rotation\n } = labels;\n const axis = this.axis();\n const { width, height } = this._axisDimensions.largestLabelDim;\n axis.tickTransform((d, i) => {\n if (i === 0 && (orientation === LEFT || orientation === RIGHT)) {\n return `translate(0, -${(height) / 3}px)`;\n }\n if (i === 0 && (orientation === TOP || orientation === BOTTOM) && rotation === 0) {\n return `translate(${width / 2}px, ${0}px) rotate(${rotation}deg)`;\n } return '';\n });\n return tickText;\n }\n\n}\n","import SimpleAxis from './simple-axis';\nimport { BAND } from '../enums/scale-type';\nimport { TOP, BOTTOM } from '../enums/axis-orientation';\nimport { calculateBandSpace, setOffset } from './helper';\n\nexport default class BandAxis extends SimpleAxis {\n\n /**\n *\n *\n * @param {*} range\n * @returns\n * @memberof BandAxis\n */\n createScale (range) {\n const scale = super.createScale(range);\n const { padding } = this.config();\n if (typeof padding === 'number') {\n scale.padding(padding);\n }\n return scale;\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof BandAxis\n */\n static type () {\n return BAND;\n }\n\n /**\n *\n *\n * @param {*} width\n * @param {*} height\n * @param {*} padding\n * @param {*} isOffset\n * @memberof BandAxis\n */\n setAvailableSpace (width, height, padding, isOffset) {\n const {\n left,\n right,\n top,\n bottom\n } = padding;\n const {\n orientation,\n showAxisName,\n axisNamePadding\n } = this.config();\n const { axisLabelDim } = this.getAxisDimensions();\n const { height: axisDimHeight } = axisLabelDim;\n\n this.availableSpace({ width, height });\n if (orientation === TOP || orientation === BOTTOM) {\n // Set x axis range\n this.range([0, width - left - right]);\n const axisHeight = this.getLogicalSpace().height - (showAxisName === false ?\n (axisDimHeight + axisNamePadding) : 0);\n isOffset && this.config({ yOffset: Math.max(axisHeight, height) });\n } else {\n // Set y axis range\n this.range([height - bottom, top]);\n const axisWidth = this.getLogicalSpace().width - (showAxisName === false ? axisDimHeight : 0);\n isOffset && this.config({ xOffset: Math.max(axisWidth, width) });\n }\n return this;\n }\n\n /**\n *\n *\n * @returns\n * @memberof BandAxis\n */\n getUnitWidth () {\n return this.scale().bandwidth();\n }\n\n /**\n *\n *\n * @returns\n * @memberof BandAxis\n */\n setTickConfig () {\n let smartTicks = '';\n let smartlabel;\n const { maxWidth, maxHeight, tickFormat } = this.config();\n const { labelManager } = this._dependencies;\n const domain = this.axis().scale().domain();\n\n smartTicks = domain;\n const tickFormatter = tickFormat || (val => val);\n\n if (domain && domain.length) {\n smartTicks = domain.map((d, i) => {\n labelManager.useEllipsesOnOverflow(true);\n smartlabel = labelManager.getSmartText(tickFormatter(d, i, domain), maxWidth, maxHeight);\n return labelManager.constructor.textToLines(smartlabel);\n });\n }\n return smartTicks;\n }\n\n/**\n * Gets the space occupied by the axis\n *\n * @return {Object} object with details about size of the axis.\n * @memberof SimpleAxis\n */\n getLogicalSpace () {\n if (!this.logicalSpace()) {\n this.logicalSpace(calculateBandSpace(this));\n setOffset(this);\n this.logicalSpace();\n }\n return this.logicalSpace();\n }\n /**\n *\n *\n * @param {*} axisTickLabels\n * @param {*} labelWidth\n * @returns\n * @memberof BandAxis\n */\n setRotationConfig (axisTickLabels, labelWidth) {\n const { orientation } = this.config();\n const range = this.range();\n const availSpace = Math.abs(range[0] - range[1]);\n\n this.config({ labels: { rotation: 0, smartTicks: false } });\n if (orientation === TOP || orientation === BOTTOM) {\n const smartWidth = this.smartTicks().reduce((acc, n) => acc + n.width + this._minTickDistance.width, 0);\n // set multiline config\n if (availSpace > 0 && axisTickLabels.length * (labelWidth + this._minTickDistance.width) > availSpace) {\n if (availSpace && smartWidth < availSpace) {\n this.config({ labels: { smartTicks: true } });\n } else {\n this.config({ labels: { rotation: -90 } });\n }\n }\n }\n return this;\n }\n\n /**\n *\n *\n * @returns\n * @memberof BandAxis\n */\n getTickValues () {\n return this.axis().scale().domain();\n }\n\n /**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\n getTickSize () {\n const {\n showInnerTicks,\n showOuterTicks\n } = this.config();\n const axis = this.axis();\n\n axis.tickSizeInner(showInnerTicks ? 6 : 0);\n axis.tickSizeOuter(showOuterTicks ? 6 : 0);\n return axis.tickSize();\n }\n\n /**\n * This method is used to assign a domain to the axis.\n *\n * @param {Array} domain the domain of the scale\n * @memberof SimpleAxis\n */\n updateDomainBounds (domain) {\n let currentDomain = this.domain();\n if (this.config().domain) {\n currentDomain = this.config().domain;\n } else {\n if (currentDomain.length === 0) {\n currentDomain = domain;\n }\n currentDomain = currentDomain.concat(domain);\n }\n this.domain(currentDomain);\n return this;\n }\n\n /**\n * Returns the value from the domain when given a value from the range.\n * @param {number} value Value from the range.\n * @return {number} Value\n */\n invert (...value) {\n const values = value.map(d => this.scale().invert(d)) || [];\n return value.length === 1 ? values[0] && values[0].toString() : values.map(d => d.toString());\n }\n}\n","import { getSmallestDiff } from 'muze-utils';\nimport SimpleAxis from './simple-axis';\nimport { adjustRange } from './helper';\nimport { TIME } from '../enums/scale-type';\nimport { axisOrientationMap, BOTTOM, TOP } from '../enums/axis-orientation';\nimport { DOMAIN } from '../enums/constants';\n\n/**\n *\n *\n * @export\n * @class TimeAxis\n * @extends {SimpleAxis}\n */\nexport default class TimeAxis extends SimpleAxis {\n\n constructor (...params) {\n super(...params);\n this._minDiff = Infinity;\n }\n\n /**\n *\n *\n * @param {*} range\n * @returns\n * @memberof TimeAxis\n */\n createScale (range) {\n let scale = super.createScale(range);\n\n scale = scale.nice();\n return scale;\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof TimeAxis\n */\n static type () {\n return TIME;\n }\n\n /**\n *\n *\n * @returns\n * @memberof BandAxis\n */\n setTickConfig () {\n let smartTicks;\n let smartlabel;\n const { maxWidth, maxHeight, tickFormat } = this.config();\n const { labelManager } = this._dependencies;\n const domain = this.getTickValues();\n const scale = this.scale();\n\n smartTicks = domain;\n const tickFormatter = tickFormat || scale.tickFormat();\n\n if (domain && domain.length) {\n smartTicks = domain.map((d, i) => {\n smartlabel = labelManager.getSmartText(tickFormatter(d, i, domain), maxWidth, maxHeight);\n return labelManager.constructor.textToLines(smartlabel);\n });\n }\n return smartTicks;\n }\n\n /**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\n createAxis (config) {\n const {\n tickFormat,\n orientation\n } = config;\n const axisClass = axisOrientationMap[orientation];\n\n if (axisClass) {\n const axis = axisClass(this.scale());\n this.formatter = this.getTickFormatter(tickFormat);\n return axis;\n }\n return null;\n }\n\n getTickFormatter (tickFormat) {\n if (tickFormat) {\n return ticks => (val, i) => tickFormat(val, i, ticks);\n }\n return null;\n }\n\n /**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\n getTickSize () {\n const {\n showInnerTicks,\n showOuterTicks\n } = this.config();\n const axis = this.axis();\n axis.tickSizeInner(showInnerTicks === false ? 0 : 6);\n axis.tickSizeOuter(showOuterTicks === false ? 0 : 6);\n return super.getTickSize();\n }\n\n /**\n *\n *\n * @returns\n * @memberof TimeAxis\n */\n getTickValues () {\n return this.scale().ticks();\n }\n\n /**\n *\n *\n * @param {*} diff\n * @returns\n * @memberof TimeAxis\n */\n minDiff (diff) {\n this._minDiff = Math.min(this._minDiff, diff);\n return this;\n }\n\n /**\n *\n *\n * @param {*} axisTickLabels\n * @param {*} labelWidth\n * @returns\n * @memberof BandAxis\n */\n setRotationConfig (axisTickLabels, labelWidth) {\n const { orientation } = this.config();\n const range = this.range();\n const availSpace = Math.abs(range[0] - range[1]);\n\n this.config({ labels: { rotation: 0, smartTicks: false } });\n if (orientation === TOP || orientation === BOTTOM) {\n const smartWidth = this.smartTicks().reduce((acc, n) => acc + n.width, 0);\n // set multiline config\n if (availSpace > 0 && axisTickLabels.length * labelWidth > availSpace) {\n if (availSpace && smartWidth * 1.25 < availSpace) {\n this.config({ labels: { smartTicks: true } });\n }\n this.config({ labels: { rotation: -90 } });\n }\n }\n return this;\n }\n\n /**\n *\n *\n * @param {*} d\n * @returns\n * @memberof SimpleAxis\n */\n domain (domain) {\n if (domain) {\n const { nice } = this.config();\n\n if (domain.length && domain[0] === domain[1]) {\n domain = [0, +domain[0] * 2];\n }\n this.scale().domain(domain);\n nice && this.scale().nice();\n this._domain = this.scale().domain();\n this.smartTicks(this.setTickConfig());\n this.store().commit(DOMAIN, this._domain);\n this.logicalSpace(null);\n return this;\n } return this._domain;\n }\n\n getMinTickDifference () {\n return getSmallestDiff(this.config().tickValues);\n }\n\n /**\n *\n *\n * @param {*} width\n * @param {*} height\n * @param {*} padding\n * @param {*} isOffset\n * @memberof TimeAxis\n */\n setAvailableSpace (width, height, padding, isOffset) {\n const {\n left,\n right,\n top,\n bottom\n } = padding;\n const {\n orientation,\n showAxisName,\n axisNamePadding\n } = this.config();\n const domain = this.domain();\n const { axisLabelDim, tickLabelDim } = this.getAxisDimensions();\n const { height: axisDimHeight } = axisLabelDim;\n const { height: tickDimHeight, width: tickDimWidth } = tickLabelDim;\n\n this.availableSpace({ width, height });\n if (orientation === TOP || orientation === BOTTOM) {\n const labelSpace = tickDimWidth;\n this.range(adjustRange(this._minDiff, [labelSpace / 2, width - left - right - labelSpace / 2],\n domain, orientation));\n const axisHeight = this.getLogicalSpace().height - (showAxisName === false ?\n (axisDimHeight + axisNamePadding) : 0);\n isOffset && this.config({ yOffset: Math.max(axisHeight, height) });\n } else {\n const labelSpace = tickDimHeight;\n this.range(adjustRange(this._minDiff, [height - top - bottom - labelSpace / 2, labelSpace / 2],\n domain, orientation));\n const axisWidth = this.getLogicalSpace().width - (showAxisName === false ? axisDimHeight : 0);\n this.isOffset && this.config({ xOffset: Math.max(axisWidth, width) });\n }\n return this;\n }\n\n}\n","export const x11Colors = {\n Pink: { hex: 'ffc0cb', rgb: '255,192,203' },\n LightPink: { hex: 'ffb6c1', rgb: '255,182,193' },\n HotPink: { hex: 'ff69b4', rgb: '255,105,180' },\n DeepPink: { hex: 'ff1493', rgb: '255,20,147' },\n PaleVioletRed: { hex: 'db7093', rgb: '219,112,147' },\n MediumVioletRed: { hex: 'c71585', rgb: '199,21,133' },\n LightSalmon: { hex: 'ffa07a', rgb: '255,160,122' },\n Salmon: { hex: 'fa8072', rgb: '250,128,114' },\n DarkSalmon: { hex: 'e9967a', rgb: '233,150,122' },\n LightCoral: { hex: 'f08080', rgb: '240,128,128' },\n IndianRed: { hex: 'cd5c5c', rgb: '205,92,92' },\n Crimson: { hex: 'dc143c', rgb: '220,20,60' },\n FireBrick: { hex: 'b22222', rgb: '178,34,34' },\n DarkRed: { hex: '8b0000', rgb: '139,0,0' },\n Red: { hex: 'ff0000', rgb: '255,0,0' },\n OrangeRed: { hex: 'ff4500', rgb: '255,69,0' },\n Tomato: { hex: 'ff6347', rgb: '255,99,71' },\n Coral: { hex: 'ff7f50', rgb: '255,127,80' },\n DarkOrange: { hex: 'ff8c00', rgb: '255,140,0' },\n Orange: { hex: 'ffa500', rgb: '255,165,0' },\n Gold: { hex: 'ffd700', rgb: '255,215,0' },\n Yellow: { hex: 'ffff00', rgb: '255,255,0' },\n LightYellow: { hex: 'ffffe0', rgb: '255,255,224' },\n LemonChiffon: { hex: 'fffacd', rgb: '255,250,205' },\n LightGoldenrodYellow: { hex: 'fafad2', rgb: '250,250,210' },\n PapayaWhip: { hex: 'ffefd5', rgb: '255,239,213' },\n Moccasin: { hex: 'ffe4b5', rgb: '255,228,181' },\n PeachPuff: { hex: 'ffdab9', rgb: '255,218,185' },\n PaleGoldenrod: { hex: 'eee8aa', rgb: '238,232,170' },\n Khaki: { hex: 'f0e68c', rgb: '240,230,140' },\n DarkKhaki: { hex: 'bdb76b', rgb: '189,183,107' },\n Cornsilk: { hex: 'fff8dc', rgb: '255,248,220' },\n BlanchedAlmond: { hex: 'ffebcd', rgb: '255,235,205' },\n Bisque: { hex: 'ffe4c4', rgb: '255,228,196' },\n NavajoWhite: { hex: 'ffdead', rgb: '255,222,173' },\n Wheat: { hex: 'f5deb3', rgb: '245,222,179' },\n BurlyWood: { hex: 'deb887', rgb: '222,184,135' },\n Tan: { hex: 'd2b48c', rgb: '210,180,140' },\n RosyBrown: { hex: 'bc8f8f', rgb: '188,143,143' },\n SandyBrown: { hex: 'f4a460', rgb: '244,164,96' },\n Goldenrod: { hex: 'daa520', rgb: '218,165,32' },\n DarkGoldenrod: { hex: 'b8860b', rgb: '184,134,11' },\n Peru: { hex: 'cd853f', rgb: '205,133,63' },\n Chocolate: { hex: 'd2691e', rgb: '210,105,30' },\n SaddleBrown: { hex: '8b4513', rgb: '139,69,19' },\n Sienna: { hex: 'a0522d', rgb: '160,82,45' },\n Brown: { hex: 'a52a2a', rgb: '165,42,42' },\n Maroon: { hex: '800000', rgb: '128,0,0' },\n DarkOliveGreen: { hex: '556b2f', rgb: '85,107,47' },\n Olive: { hex: '808000', rgb: '128,128,0' },\n OliveDrab: { hex: '6b8e23', rgb: '107,142,35' },\n YellowGreen: { hex: '9acd32', rgb: '154,205,50' },\n LimeGreen: { hex: '32cd32', rgb: '50,205,50' },\n Lime: { hex: '00ff00', rgb: '0,255,0' },\n LawnGreen: { hex: '7cfc00', rgb: '124,252,0' },\n Chartreuse: { hex: '7fff00', rgb: '127,255,0' },\n GreenYellow: { hex: 'adff2f', rgb: '173,255,47' },\n SpringGreen: { hex: '00ff7f', rgb: '0,255,127' },\n MediumSpringGreen: { hex: '00fa9a', rgb: '0,250,154' },\n LightGreen: { hex: '90ee90', rgb: '144,238,144' },\n PaleGreen: { hex: '98fb98', rgb: '152,251,152' },\n DarkSeaGreen: { hex: '8fbc8f', rgb: '143,188,143' },\n MediumSeaGreen: { hex: '3cb371', rgb: '60,179,113' },\n SeaGreen: { hex: '2e8b57', rgb: '46,139,87' },\n ForestGreen: { hex: '228b22', rgb: '34,139,34' },\n Green: { hex: '008000', rgb: '0,128,0' },\n DarkGreen: { hex: '006400', rgb: '0,100,0' },\n MediumAquamarine: { hex: '66cdaa', rgb: '102,205,170' },\n Aqua: { hex: '00ffff', rgb: '0,255,255' },\n Cyan: { hex: '00ffff', rgb: '0,255,255' },\n LightCyan: { hex: 'e0ffff', rgb: '224,255,255' },\n PaleTurquoise: { hex: 'afeeee', rgb: '175,238,238' },\n Aquamarine: { hex: '7fffd4', rgb: '127,255,212' },\n Turquoise: { hex: '40e0d0', rgb: '64,224,208' },\n MediumTurquoise: { hex: '48d1cc', rgb: '72,209,204' },\n DarkTurquoise: { hex: '00ced1', rgb: '0,206,209' },\n LightSeaGreen: { hex: '20b2aa', rgb: '32,178,170' },\n CadetBlue: { hex: '5f9ea0', rgb: '95,158,160' },\n DarkCyan: { hex: '008b8b', rgb: '0,139,139' },\n Teal: { hex: '008080', rgb: '0,128,128' },\n LightSteelBlue: { hex: 'b0c4de', rgb: '176,196,222' },\n PowderBlue: { hex: 'b0e0e6', rgb: '176,224,230' },\n LightBlue: { hex: 'add8e6', rgb: '173,216,230' },\n SkyBlue: { hex: '87ceeb', rgb: '135,206,235' },\n LightSkyBlue: { hex: '87cefa', rgb: '135,206,250' },\n DeepSkyBlue: { hex: '00bfff', rgb: '0,191,255' },\n DodgerBlue: { hex: '1e90ff', rgb: '30,144,255' },\n CornflowerBlue: { hex: '6495ed', rgb: '100,149,237' },\n SteelBlue: { hex: '4682b4', rgb: '70,130,180' },\n RoyalBlue: { hex: '4169e1', rgb: '65,105,225' },\n Blue: { hex: '0000ff', rgb: '0,0,255' },\n MediumBlue: { hex: '0000cd', rgb: '0,0,205' },\n DarkBlue: { hex: '00008b', rgb: '0,0,139' },\n Navy: { hex: '000080', rgb: '0,0,128' },\n MidnightBlue: { hex: '191970', rgb: '25,25,112' },\n Lavender: { hex: 'e6e6fa', rgb: '230,230,250' },\n Thistle: { hex: 'd8bfd8', rgb: '216,191,216' },\n Plum: { hex: 'dda0dd', rgb: '221,160,221' },\n Violet: { hex: 'ee82ee', rgb: '238,130,238' },\n Orchid: { hex: 'da70d6', rgb: '218,112,214' },\n Fuchsia: { hex: 'ff00ff', rgb: '255,0,255' },\n Magenta: { hex: 'ff00ff', rgb: '255,0,255' },\n MediumOrchid: { hex: 'ba55d3', rgb: '186,85,211' },\n MediumPurple: { hex: '9370db', rgb: '147,112,219' },\n BlueViolet: { hex: '8a2be2', rgb: '138,43,226' },\n DarkViolet: { hex: '9400d3', rgb: '148,0,211' },\n DarkOrchid: { hex: '9932cc', rgb: '153,50,204' },\n DarkMagenta: { hex: '8b008b', rgb: '139,0,139' },\n Purple: { hex: '800080', rgb: '128,0,128' },\n Indigo: { hex: '4b0082', rgb: '75,0,130' },\n DarkSlateBlue: { hex: '483d8b', rgb: '72,61,139' },\n SlateBlue: { hex: '6a5acd', rgb: '106,90,205' },\n MediumSlateBlue: { hex: '7b68ee', rgb: '123,104,238' },\n White: { hex: 'ffffff', rgb: '255,255,255' },\n Snow: { hex: 'fffafa', rgb: '255,250,250' },\n Honeydew: { hex: 'f0fff0', rgb: '240,255,240' },\n MintCream: { hex: 'f5fffa', rgb: '245,255,250' },\n Azure: { hex: 'f0ffff', rgb: '240,255,255' },\n AliceBlue: { hex: 'f0f8ff', rgb: '240,248,255' },\n GhostWhite: { hex: 'f8f8ff', rgb: '248,248,255' },\n WhiteSmoke: { hex: 'f5f5f5', rgb: '245,245,245' },\n Seashell: { hex: 'fff5ee', rgb: '255,245,238' },\n Beige: { hex: 'f5f5dc', rgb: '245,245,220' },\n OldLace: { hex: 'fdf5e6', rgb: '253,245,230' },\n FloralWhite: { hex: 'fffaf0', rgb: '255,250,240' },\n Ivory: { hex: 'fffff0', rgb: '255,255,240' },\n AntiqueWhite: { hex: 'faebd7', rgb: '250,235,215' },\n Linen: { hex: 'faf0e6', rgb: '250,240,230' },\n LavenderBlush: { hex: 'fff0f5', rgb: '255,240,245' },\n MistyRose: { hex: 'ffe4e1', rgb: '255,228,225' },\n Gainsboro: { hex: 'dcdcdc', rgb: '220,220,220' },\n LightGray: { hex: 'd3d3d3', rgb: '211,211,211' },\n Silver: { hex: 'c0c0c0', rgb: '192,192,192' },\n DarkGrey: { hex: 'a9a9a9', rgb: '169,169,169' },\n Grey: { hex: '808080', rgb: '128,128,128' },\n DimGrey: { hex: '696969', rgb: '105,105,105' },\n LightSlateGrey: { hex: '778899', rgb: '119,136,153' },\n SlateGrey: { hex: '708090', rgb: '112,128,144' },\n DarkSlateGrey: { hex: '2f4f4f', rgb: '47,79,79' },\n Black: { hex: '000000', rgb: '0,0,0' }\n};\n","import {\n LINEAR\n} from '../enums/constants';\n/**\n * Set of default colors\n */\nexport const palette = [\n '#086bb6',\n '#f37d45',\n '#f5ce02',\n '#67bda0',\n '#c54e4e',\n '#ae70af'\n];\n\nexport const DEFAULT_GRADIENT_COLOR = '#eaeaea';\n\nexport const DEFAULT_CONFIG = {\n range: palette,\n value: palette[0],\n step: false,\n stops: 5,\n type: LINEAR\n};\n","import { mergeRecursive, detectColor, hexToHsv, rgbToHsv } from 'muze-utils';\nimport { x11Colors } from './color-maps';\nimport { palette, DEFAULT_GRADIENT_COLOR } from './defaults';\nimport { LINEAR, RGB, HEX, HSL, HSLA } from '../enums/constants';\n\nexport const getHslString = hslArr => `hsla(${hslArr[0] * 360},${hslArr[1] * 100}%,${hslArr[2] * 100}%,\\\n${hslArr[3] || 1})`;\n\nexport const convertToXllString = baseString => (baseString.split(' ') || [])\n .reduce((x, e) => `${x}${e.charAt(0).toUpperCase()}${e.slice(1)}`, '');\n\nexport const getActualHslColor = (e, paletteColor) => {\n let color = '';\n if (typeof e === 'string') {\n e = e.replace(/ /g, '');\n e = e.toLowerCase();\n if (detectColor(e) === HSL || detectColor(e) === HSLA) {\n color = e.match(/(\\d+(\\.\\d+)?)/g);\n color = [color[0] / 360, color[1] / 100, color[2] / 100, color[3] || 1];\n } else if (detectColor(e) === HEX) {\n color = hexToHsv(e);\n } else if (detectColor(e) === RGB) {\n const col = e.substring(e.indexOf('(') + 1, e.lastIndexOf(')')).split(/,\\s*/);\n color = rgbToHsv(...col);\n } else if (x11Colors[convertToXllString(e)]) {\n color = rgbToHsv(...x11Colors[convertToXllString(e)].rgb.split(','));\n }\n } else if (!(e instanceof Array)) {\n color = rgbToHsv(paletteColor);\n } else {\n color = e;\n }\n return color;\n};\n\nexport const PROPS = {\n config: {\n sanitization: (context, config) => {\n const defCon = mergeRecursive({}, context.constructor.defaultConfig());\n if (config.type === LINEAR) {\n config.range = config.range || [defCon.range[0]];\n config.range = config.range.length > 1 ? config.range : [DEFAULT_GRADIENT_COLOR, ...config.range];\n }\n const oldConfig = mergeRecursive(defCon, context.config());\n const newConfig = mergeRecursive(oldConfig, config);\n\n if (newConfig.range instanceof Array) {\n newConfig.range = newConfig.range.map((e, i) => getActualHslColor(e, palette[i]));\n newConfig.stops = config.stops || newConfig.range.length;\n }\n newConfig.value = getActualHslColor(newConfig.value, newConfig.value);\n return newConfig;\n }\n },\n domain: {},\n scale: {},\n uniqueValues: {}\n};\n","import { numberInterpolator, piecewiseInterpolator, hslInterpolator } from 'muze-utils';\nimport { CONTINOUS, DISCRETE } from '../enums/constants';\nimport { LINEAR, SEQUENTIAL, ORDINAL, QUANTILE } from '../enums/scale-type';\nimport { getHslString } from './props';\n\nconst getStops = (domain, stops) => {\n let newStops = [];\n\n if (stops instanceof Array) {\n newStops = stops.slice().sort();\n newStops = [...new Set([domain[0], ...stops, domain[1]])].sort();\n } else {\n const interpolator = numberInterpolator()(...domain);\n for (let i = 0; i <= stops; i++) {\n newStops[i] = interpolator(i / stops);\n }\n }\n\n if (newStops[0] < domain[0]) {\n newStops.shift();\n }\n return { domain, newStops };\n};\n\nconst rangeStops = (newStopsLength, range) => {\n let newRange = [];\n const maxRangeLength = Math.min(range.length, 18);\n\n if (newStopsLength > maxRangeLength) {\n const interpolator = piecewiseInterpolator()(hslInterpolator(), range.map(e => getHslString(e)));\n for (let i = 0; i < newStopsLength; i++) {\n newRange[i] = interpolator(i / (newStopsLength - 1));\n }\n } else {\n newRange = range.slice(0, newStopsLength);\n }\n return { newRange };\n};\n\n/**\n*\n*\n* @param {*} domain\n* @returns\n*/\nconst indexedDomain = (domain) => {\n const uniqueVals = domain;\n const retDomain = domain.map((d, i) => (i) / (domain.length - 1));\n return { domain: retDomain, uniqueVals, scaleDomain: [0, 1] };\n};\n\n/**\n *\n *\n * @param {*} domain\n * @returns\n */\nconst indexedDomainMeasure = (domain, stops, range) => {\n const uniqueVals = domain;\n return { domain, uniqueVals, scaleDomain: [0, 1], range };\n};\n\n/**\n *\n *\n * @param {*} domain\n * @returns\n */\nconst normalDomain = (domain, stops, range) => {\n const uniqueVals = domain;\n return { uniqueVals, domain, nice: true, range };\n};\n\n/**\n *\n *\n * @param {*} domain\n * @param {*} stops\n * @returns\n */\nconst steppedDomain = (domain, stops, range) => {\n const { domain: uniqueVals, newStops } = getStops(domain, stops);\n const { newRange } = rangeStops(newStops.length - 1, range);\n\n return { uniqueVals, domain: newStops, nice: true, range: newRange };\n};\n\nconst continousSteppedDomain = (domain, stops, range) => {\n const { domain: uniqueVals, newStops } = getStops(domain, range.length - 1);\n const hslRange = range.map(e => getHslString(e));\n return { uniqueVals, domain: newStops, nice: true, range: hslRange };\n};\n\n/**\n *\n *\n * @param {*} domainValue\n * @param {*} scale\n * @param {*} domain\n * @param {*} uniqueVals\n * @returns\n */\nconst uniqueRange = (domainValue, scale, domain, uniqueVals) => {\n const index = uniqueVals.indexOf(domainValue);\n const numVal = domain[index];\n return scale(numVal);\n};\n\n/**\n *\n *\n * @param {*} domainValue\n * @param {*} scale\n * @param {*} domain\n * @returns\n */\nconst indexedRange = (domainValue, scale, domain) => {\n const numVal = (domainValue - domain[0]) / (domain[domain.length - 1] - domain[0]);\n\n return scale(numVal);\n};\n\n/**\n *\n *\n * @param {*} domainValue\n * @param {*} scale\n */\nconst normalRange = (domainValue, scale) => scale(domainValue);\n\n/**\n *\n *\n * @param {*} stops\n */\nconst strategies = () => ({\n [`${CONTINOUS}-${CONTINOUS}-${SEQUENTIAL}`]: {\n scale: SEQUENTIAL,\n domainRange: () => indexedDomainMeasure,\n value: () => indexedRange\n },\n [`${CONTINOUS}-${DISCRETE}-${SEQUENTIAL}`]: {\n scale: SEQUENTIAL,\n domainRange: () => indexedDomainMeasure,\n value: () => indexedRange\n },\n [`${DISCRETE}-${DISCRETE}-${SEQUENTIAL}`]: {\n scale: SEQUENTIAL,\n domainRange: () => indexedDomain,\n value: () => uniqueRange\n },\n [`${DISCRETE}-${DISCRETE}-${ORDINAL}`]: {\n scale: ORDINAL,\n domainRange: () => normalDomain,\n value: () => normalRange\n },\n [`${CONTINOUS}-${CONTINOUS}-${ORDINAL}`]: {\n scale: LINEAR,\n domainRange: () => continousSteppedDomain,\n value: () => normalRange\n },\n [`${CONTINOUS}-${DISCRETE}-${ORDINAL}`]: {\n scale: QUANTILE,\n domainRange: () => steppedDomain,\n value: () => normalRange\n\n }\n});\n\n/**\n *\n *\n * @param {*} domainType\n * @param {*} rangeType\n * @param {*} schemeType\n * @param {*} stops\n */\nexport const strategyGetter = (domainType, rangeType, schemeType, stops) =>\n strategies(stops)[`${domainType}-${rangeType}-${schemeType || ''}`];\n","/**\n * @module Axis\n * This file declares a class that is used to render an axis to add meaning to\n * plots.\n */\nimport { getUniqueId, generateGetterSetters, rgbToHsv } from 'muze-utils';\nimport { createScale, getScheme, getSchemeType } from '../scale-creator';\nimport { CONTINOUS, DISCRETE, COLOR } from '../enums/constants';\nimport { strategyGetter } from './color-strategy';\nimport { DEFAULT_CONFIG } from './defaults';\nimport { PROPS, getHslString } from './props';\n\n/**\n* This class is used to instantiate a SimpleAxis.\n* @class SimpleAxis\n*/\nexport default class ColorAxis {\n\n /**\n * Creates an instance of SimpleAxis.\n * @param {Object} config input parameters.\n * @param {Object | undefined} params.range Type of color range.\n * @param {string} params.name the label to show on axis.\n * @param {string} params.type The type of scale to handle.\n * @memberof ColorAxis\n */\n constructor (config) {\n generateGetterSetters(this, PROPS);\n this.config(config);\n\n this._domainType = this._config.type === 'linear' ? CONTINOUS : DISCRETE;\n this._rangeType = (this._config.type === 'linear' && !this._config.step) ? CONTINOUS : DISCRETE;\n\n this._schemeType = getSchemeType(this._config.range);\n\n this._colorStrategy = this.setColorStrategy(this._domainType, this._rangeType, this._schemeType);\n this._scale = this.createScale(this._colorStrategy);\n\n this._id = getUniqueId();\n\n this.updateDomain(config.domain);\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof ColorAxis\n */\n static defaultConfig () {\n return DEFAULT_CONFIG;\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof ColorAxis\n */\n static type () {\n return COLOR;\n }\n\n /**\n *\n *\n * @param {*} colorStrategy\n * @returns\n * @memberof ColorAxis\n */\n createScale (colorStrategy) {\n const { range } = this.config();\n if (range && typeof (range) === 'string') {\n return getScheme(range);\n }\n return createScale({\n type: colorStrategy.scale,\n range\n });\n }\n\n /**\n *\n *\n * @param {*} domainType\n * @param {*} rangeType\n * @param {*} schemeType\n * @returns\n * @memberof ColorAxis\n */\n setColorStrategy (domainType, rangeType, schemeType) {\n const { stops } = this.config();\n\n return strategyGetter(domainType, rangeType, schemeType, stops);\n }\n\n /**\n *\n *\n * @param {*} domainVal\n * @returns\n * @memberof ColorAxis\n */\n getHslString (hslColorArray) {\n return getHslString(hslColorArray);\n }\n /**\n *\n *\n * @param {*} domainVal\n * @returns\n * @memberof ColorAxis\n */\n getColor (domainVal) {\n return this.getHslString(this.getRawColor(domainVal));\n }\n /**\n *\n *\n * @param {*} domainVal\n * @returns\n * @memberof ColorAxis\n */\n getRawColor (domainVal) {\n if (this.domain() && domainVal !== undefined) {\n const scale = this.scale();\n const range = scale.range ? scale.range() : null;\n const color = this._colorStrategy.value(range)(domainVal, scale, this.domain(), this.uniqueValues());\n\n if (typeof color === 'string') {\n const col = color.substring(color.indexOf('(') + 1, color.lastIndexOf(')')).split(/,\\s*/);\n return rgbToHsv(...col);\n }\n return [...color];\n }\n return [...this.config().value];\n }\n\n /**\n *\n *\n * @param {*} [domain=[]]\n * @returns\n * @memberof ColorAxis\n */\n updateDomain (domain = []) {\n if (domain.length) {\n const scale = this.scale();\n const range = scale.range ? scale.range() : null;\n const domainRangeFn = this._colorStrategy.domainRange();\n const scaleInfo = domainRangeFn(domain, this.config().stops, range);\n\n this.domain(scaleInfo.domain);\n scaleInfo.range && this.scale().range(scaleInfo.range);\n this.uniqueValues(scaleInfo.uniqueVals);\n this.scale().domain(scaleInfo.scaleDomain || this.domain());\n }\n return this;\n }\n\n /**\n * This method returns an object that can be used to\n * reconstruct this instance.\n *\n * @return {Object} the serializable props of axis\n * @memberof ShapeAxis\n */\n serialize () {\n return {\n type: this.constructor.type(),\n scale: this.scale(),\n domain: this.domain(),\n config: this.config()\n };\n }\n\n transformColor (color, transformationArr) {\n const h = color[0] * 360;\n const s = color[1] * 100;\n const l = color[2] * 100;\n const a = color[3] || 1;\n const newH = h + transformationArr[0];\n const newS = s + transformationArr[1];\n const newL = l + transformationArr[2];\n const newA = a + transformationArr[3] || 0;\n\n return { color: `hsla(${newH},${newS}%,${newL}%,${newA})`, hsla: [newH / 360, newS / 100, newL / 100, newA] };\n }\n\n /**\n * Returns the id of the axis.\n * @return {string} Unique identifier of the axis.\n */\n id () {\n return this._id;\n }\n\n}\n","export const DEFAULT_CONFIG = {\n value: 36,\n range: [36, 1000]\n};\n","import { numberInterpolator, piecewiseInterpolator } from 'muze-utils';\nimport { CONTINOUS, DISCRETE } from '../enums/constants';\nimport { LINEAR, THRESHOLD } from '../enums/scale-type';\n\n/**\n *\n *\n * @param {*} domain\n * @returns\n */\nconst indexedDomain = (domain) => {\n const uniqueVals = domain;\n const retDomain = domain.map((d, i) => (i) / (domain.length - 1));\n return { domain: retDomain, uniqueVals, scaleDomain: [0, 1] };\n};\n\n/**\n *\n *\n * @param {*} domain\n * @returns\n */\nconst normalDomain = (domain) => {\n const uniqueVals = domain;\n return { uniqueVals, domain };\n};\n\n/**\n *\n *\n * @param {*} domain\n * @param {*} intervals\n * @returns\n */\nconst steppedDomain = (domain, intervals) => {\n let newIntervals = [];\n if (intervals instanceof Array) {\n newIntervals = intervals.slice().sort();\n } else {\n const interpolator = numberInterpolator()(...domain);\n for (let i = 0; i < intervals; i++) {\n newIntervals[i] = interpolator(i / (intervals - 1));\n }\n }\n if (newIntervals[0] < domain[0]) {\n newIntervals.shift();\n }\n const retDomain = newIntervals;\n return { uniqueVals: newIntervals, domain: retDomain, nice: true };\n};\n\n/**\n *\n *\n * @param {*} domainValue\n * @param {*} scale\n * @param {*} domain\n * @param {*} uniqueVals\n * @returns\n */\nconst discreteRange = (domainValue, scale, domain) => {\n const numVal = (domainValue - domain[0]) / (domain[domain.length - 1] - domain[0]);\n const interpolator = numberInterpolator()(...scale.range());\n return interpolator(numVal);\n};\n\n/**\n *\n *\n * @param {*} domainValue\n * @param {*} scale\n * @param {*} domain\n * @returns\n */\nconst pieceWiseRange = (domainValue, scale, domain, uniqueVals) => {\n const index = uniqueVals.indexOf(domainValue);\n const numVal = domain[index];\n const fn = piecewiseInterpolator()(numberInterpolator(), [...scale.range()]);\n return fn(numVal);\n};\n\n/**\n *\n *\n * @param {*} domainValue\n * @param {*} scale\n */\nconst normalRange = (domainValue, scale) => scale(domainValue);\n\n/**\n *\n *\n * @param {*} intervals\n */\nconst strategies = {\n [`${DISCRETE}-${CONTINOUS}`]: {\n scale: LINEAR,\n domain: indexedDomain,\n range: pieceWiseRange\n },\n [`${CONTINOUS}-${CONTINOUS}`]: {\n scale: LINEAR,\n domain: normalDomain,\n range: normalRange\n },\n [`${CONTINOUS}-${DISCRETE}`]: {\n scale: THRESHOLD,\n domain: steppedDomain,\n range: discreteRange\n }\n};\n\n/**\n *\n *\n * @param {*} domainType\n * @param {*} rangeType\n * @param {*} schemeType\n * @param {*} intervals\n */\nexport const strategyGetter = (domainType, rangeType) =>\n strategies[`${domainType}-${rangeType}`];\n","export const PROPS = {\n config: {},\n domain: {\n sanitization: (context, value) => {\n context.scale().domain(value);\n return value;\n }\n },\n range: {},\n scale: {},\n uniqueValues: {}\n};\n","/**\n * @module Axis\n * This file declares a class that is used to render an axis to add meaning to\n * plots.\n */\nimport { getUniqueId, generateGetterSetters } from 'muze-utils';\nimport { createScale } from '../scale-creator';\nimport { DEFAULT_CONFIG } from './defaults';\nimport { SIZE, CONTINOUS, DISCRETE } from '../enums/constants';\nimport { strategyGetter } from './size-strategy';\nimport { PROPS } from './props';\n\n/**\n* This class is used to instantiate a SimpleAxis.\n* @class SimpleAxis\n*/\nexport default class SizeAxis {\n\n /**\n * Creates an instance of SimpleAxis.\n * @param {Object} config input parameters.\n * @memberof SizeAxis\n */\n constructor (config) {\n generateGetterSetters(this, PROPS);\n\n this._id = getUniqueId();\n this._config = Object.assign({}, this.constructor.defaultConfig(), config);\n // @todo: Will use configuration override using scale decorator\n this._domainType = this._config.type === 'linear' ? CONTINOUS : DISCRETE;\n this._rangeType = CONTINOUS;\n\n this._sizeStrategy = this.setStrategy(this._domainType, this._rangeType);\n this._scale = this.createScale(this._sizeStrategy);\n this._range = this._config.range;\n\n this.updateDomain(config.domain);\n }\n\n /**\n *\n *\n * @param {*} domainType\n * @param {*} rangeType\n * @param {*} schemeType\n * @returns\n * @memberof ColorAxis\n */\n setStrategy (domainType, rangeType) {\n return strategyGetter(domainType, rangeType);\n }\n\n /**\n *\n *\n * @returns\n * @memberof SizeAxis\n */\n createScale (strategy) {\n const {\n range\n } = this.config();\n return createScale({\n type: strategy.scale,\n range\n });\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof ColorAxis\n */\n static defaultConfig () {\n return DEFAULT_CONFIG;\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof ColorAxis\n */\n static type () {\n return SIZE;\n }\n\n /**\n *\n *\n * @param {*} domainVal\n * @returns\n * @memberof SizeAxis\n */\n getSize (domainVal = 0) {\n let sizeVal = 1;\n const {\n value\n } = this.config();\n const scale = this.scale();\n const domain = this.domain() || [1, 1];\n\n if (!scale || domain[0] === domain[1]) {\n sizeVal = value;\n } else {\n return this._sizeStrategy.range(domainVal, scale, this.domain(), this.uniqueValues());\n }\n return sizeVal;\n }\n\n /**\n * This method is used to assign a domain to the axis.\n *\n * @param {Array} domain the domain of the scale\n * @memberof SizeAxis\n */\n updateDomain (domain) {\n if (domain) {\n const domainFn = this._sizeStrategy.domain;\n\n const domainInfo = domainFn(domain, this.config().intervals);\n\n this.domain(domainInfo.domain);\n this.uniqueValues(domainInfo.uniqueVals);\n\n this.scale().domain(domainInfo.scaleDomain || this.domain());\n }\n return this;\n }\n\n /**\n * This method returns an object that can be used to\n * reconstruct this instance.\n *\n * @return {Object} the serializable props of axis\n * @memberof ShapeAxis\n */\n serialize () {\n return {\n type: this.constructor.type(),\n scale: this.scale(),\n domain: this.domain(),\n range: this.range(),\n config: this.config()\n };\n }\n\n /**\n * Returns the id of the axis.\n * @return {string} Unique identifier of the axis.\n */\n id () {\n return this._id;\n }\n}\n","export const DEFAULT_CONFIG = {\n generator: null,\n value: 'circle',\n range: ['circle', 'diamond', 'star', 'cross', 'square', 'wye', 'triangle']\n};\n","export const PROPS = {\n config: {},\n domain: {},\n scale: {},\n uniqueValues: {},\n generator: {}\n};\n\n","/**\n * @module Axis\n * This file declares a class that is used to render an axis to add meaning to\n * plots.\n */\nimport { getUniqueId, getSymbol, generateGetterSetters, mergeRecursive } from 'muze-utils';\nimport { createScale } from '../scale-creator';\nimport { DEFAULT_CONFIG } from './defaults';\nimport { SHAPE } from '../enums/constants';\nimport { shapeGenerator } from './helper';\nimport { PROPS } from './props';\n\n/**\n* This class is used to instantiate a SimpleAxis.\n* @class SimpleAxis\n*/\nexport default class ShapeAxis {\n /**\n * Creates an instance of SimpleAxis.\n * @param {Object} params input parameters.\n * @param {Object | undefined} params.range Type of color scheme.\n * @memberof ShapeAxis\n */\n constructor (config) {\n generateGetterSetters(this, PROPS);\n\n this._id = getUniqueId();\n this._config = Object.assign({}, this.constructor.defaultConfig());\n this._config = mergeRecursive(this._config, config);\n\n this._scale = createScale({\n type: 'ordinal',\n range: this._config.range\n });\n this.updateDomain(config.domain);\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof ColorAxis\n */\n static defaultConfig () {\n return DEFAULT_CONFIG;\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof ColorAxis\n */\n static type () {\n return SHAPE;\n }\n\n /**\n *\n *\n * @param {*} value\n * @returns\n * @memberof ShapeAxis\n */\n getShape (value) {\n if (!this.scale() || !this.domain() || !value) {\n return this.config().value;\n }\n\n if (this._generatedShapes) {\n return this._generatedShapes[value];\n }\n\n const shapeType = this.scale()(value);\n if (shapeType === 'string') {\n return getSymbol(shapeType);\n }\n\n return shapeType;\n }\n\n /**\n * This method is used to assign a domain to the axis.\n *\n * @param {Array} domain the domain of the scale\n * @memberof ShapeAxis\n */\n updateDomain (domain = []) {\n if (domain.length) {\n this.uniqueValues(domain);\n this.domain(domain);\n this.scale().domain(domain);\n\n if (this.config().generator) {\n this._generatedShapes = shapeGenerator(domain, this.config().generator);\n }\n }\n return this;\n }\n\n /**\n * This method returns an object that can be used to\n * reconstruct this instance.\n *\n * @return {Object} the serializable props of axis\n * @memberof ShapeAxis\n */\n serialize () {\n return {\n type: this.constructor.type(),\n scale: this.scale(),\n domain: this.domain(),\n range: this.config().range,\n config: this.config()\n };\n }\n\n /**\n * Returns the id of the axis.\n * @return {string} Unique identifier of the axis.\n */\n id () {\n return this._id;\n }\n}\n","/**\n *\n *\n * @param {*} domain\n * @param {*} generatorFn\n * @returns\n */\nexport const shapeGenerator = (domain, generatorFn) => {\n const generatedShapes = {};\n domain.forEach((value) => {\n generatedShapes[value] = generatorFn(value);\n });\n return generatedShapes;\n};\n","import * as ScaleType from './enums/scale-type';\n\nconst DATA_TYPES = {\n DIMENSION: 'dimension',\n CATEGORICAL: 'categorical',\n MEASURE: 'measure',\n DATETIME: 'temporal'\n};\n\n/**\n * Map of DataModel types to associated field types.\n */\nexport const dataTypeScaleMap = {\n [DATA_TYPES.DIMENSION]: ScaleType.BAND,\n [DATA_TYPES.MEASURE]: ScaleType.LINEAR,\n [DATA_TYPES.DATETIME]: ScaleType.TIME\n};\n\n","import { nestCollection } from 'muze-utils';\n\n/**\n * Create multiple datasets from a single dataset by grouping the data using\n * a dimensional field.\n * @param {Array} schema Name and type of fields are stored in schema\n * @param {Array} data Data array\n * @param {Object} config Configuration object\n * @return {Array} Grouped data array\n */\nexport default (schema, data, config) => {\n const groupBy = config.groupBy instanceof Array ? config.groupBy : [config.groupBy];\n const groupByIndices = groupBy.map(fieldName => schema.findIndex(d => d.name === fieldName));\n\n if (groupByIndices.find(d => d === -1) !== undefined) {\n throw new Error(`Groupby field ${groupBy} not found in schema`);\n }\n\n return nestCollection({\n keys: groupByIndices,\n data\n });\n};\n","/**\n * @module Transform\n * This file exports a function that is used to implement\n * the identity transform\n */\n /* eslint no-unused-vars: 0 */\n /**\n * This function accepts data and returns the data unchanged.\n * @param {Object} schema The schema.\n * @param {Array} data The data array.\n * @param {Object} config The config object.\n * @return {Array} The unchanged data.\n */\n function identityTransform (schema, data, config) {\n return data;\n }\n\n export default identityTransform;\n","/**\n * @module Transform\n * This file exports the transform factory.\n */\nimport * as TransformType from '../enums/transform-type';\nimport identity from '../identity-transform';\nimport group from '../group-transform';\nimport stack from '../stack-transform';\n\n/* istanbul ignore next */\nconst transformMap = {\n [TransformType.IDENTITY]: identity,\n [TransformType.GROUP]: group,\n [TransformType.STACK]: stack\n};\n\n/**\n * This function is used to retirn a transform associated\n * with the given type.\n *\n * @param {string} type The type of the transform.\n * @return {Function} The transform function.\n */\nfunction transformFactory (type) {\n const transform = transformMap[type];\n if (typeof transform !== 'function') {\n throw new Error('Invalid transform type supplied.');\n }\n return transform;\n}\n\nexport default transformFactory;\n","/**\n * @module Transform\n * This module exports constants that are used to reference transforms in\n * a consistent manner throughout the project.\n */\n/* eslint one-var: 0 */\n export const IDENTITY = 'identity';\n export const GROUP = 'group';\n export const STACK = 'stack';\n export const FRACTURE = 'fracture';\n","import { stack } from 'muze-utils';\n\nimport group from '../group-transform';\n/*\n Normalize the data to a form which can be given to d3 stack for stacking the data\n ['Product', 'Sales', 'Region'],\n 0 ['A', 2000, 'North'],\n 1 ['A', 3000, 'South'],\n 2 ['B', 3000, 'South'],\n 3 ['B', 2000, 'North'],\n 4 ['C', 3000, 'South'],\n 5 ['C', 2000, 'North']\n |\n |\n ['Product', 'North', 'South'],\n ['A', 2000, 3000],\n ['B', 2000, 3000],\n ['C', 2000, 3000]\n*/\n// eslint-disable-next-line require-jsdoc\nconst normalizeData = (data, schema, valueField, uniqueField, groupBy) => {\n const groupedData = group(schema, data, {\n groupBy: uniqueField\n });\n const uniqueFieldIndex = schema.findIndex(d => d.name === uniqueField);\n const valueFieldIndex = schema.findIndex(d => d.name === valueField);\n const seriesKeyIndex = schema.findIndex(d => d.name === groupBy);\n const seriesKeys = data.map(d => d[seriesKeyIndex]).filter((item, pos, arr) => arr.indexOf(item) === pos).sort();\n const fieldNames = schema.reduce((acc, obj, i) => {\n acc[i] = obj.name;\n return acc;\n }, {});\n const dataArr = groupedData.map((arr) => {\n const tuples = {};\n const rowObj = arr.values.reduce((acc, row) => {\n acc = row.reduce((obj, value, i) => {\n if (i === seriesKeyIndex) {\n obj[value] = row[valueFieldIndex];\n tuples[value] = row;\n } else if (i !== valueFieldIndex) {\n obj[fieldNames[i]] = value;\n }\n return obj;\n }, acc);\n return acc;\n }, {});\n rowObj._tuple = tuples;\n // Set missing values field to zero value\n seriesKeys.forEach((seriesKey) => {\n if (rowObj[seriesKey] === undefined) {\n rowObj[seriesKey] = 0;\n const newArr = new Array(arr.values[0].length);\n newArr[uniqueFieldIndex] = arr.key;\n newArr[seriesKeyIndex] = seriesKey;\n rowObj._tuple[seriesKey] = newArr;\n }\n });\n return rowObj;\n });\n\n return {\n data: dataArr,\n keys: seriesKeys\n };\n};\n/**\n * Generate a stacked representation of data\n * @param {Array} schema schema Array\n * @param {Array} data data array\n * @param {Object} config Configuration object\n * @return {Array} stacked data\n */\nexport default (schema, data, config) => {\n const uniqueField = config.uniqueField;\n const valueField = config.value;\n const groupBy = config.groupBy;\n const sort = config.sort || 'descending';\n const normalizedData = normalizeData(data, schema, valueField, uniqueField, groupBy);\n const keys = normalizedData.keys;\n const map = {};\n const orderBy = config.orderBy;\n const orderIndex = schema.findIndex(d => d.name === orderBy);\n const groupByIndex = schema.findIndex(d => d.name === groupBy);\n if (orderIndex !== -1) {\n keys.forEach((key) => {\n const name = data.find(d => d[groupByIndex] === key);\n map[key] = name[orderIndex];\n });\n normalizedData.keys.sort((a, b) => map[a].localeCompare(map[b]));\n }\n\n const stackData = stack({\n keys: normalizedData.keys,\n offset: config.offset || 'diverging',\n order: sort,\n data: normalizedData.data\n });\n stackData.forEach((seriesData) => {\n seriesData.forEach((dataObj) => {\n dataObj.data = dataObj.data._tuple[seriesData.key];\n });\n });\n return stackData;\n};\n\n","import {\n FieldType,\n getDomainFromData,\n setStyles,\n easeFns,\n selectElement,\n DimensionSubtype\n} from 'muze-utils';\nimport { ScaleType } from '@chartshq/muze-axis';\nimport { transformFactory } from '@chartshq/transform';\nimport { IDENTITY, STACK, GROUP, COLOR, SHAPE, SIZE, ENCODING } from '../enums/constants';\n\nconst BAND = ScaleType.BAND;\n\nexport const getLayerColor = ({ datum, index }, { colorEncoding, colorAxis, colorFieldIndex }) => {\n let rawColor = '';\n let color = '';\n if (colorEncoding && colorEncoding.value instanceof Function) {\n color = colorEncoding.value(datum, index);\n rawColor = colorEncoding.value(datum, index);\n } else {\n rawColor = colorAxis.getRawColor(datum._data[colorFieldIndex]);\n color = colorAxis.getHslString(rawColor);\n }\n return { color, rawColor };\n};\n\nconst transfromColor = (colorAxis, datum, styleType, intensity) => {\n datum.meta.stateColor[styleType] = datum.meta.stateColor[styleType] || datum.meta.originalColor;\n const fillColorInfo = colorAxis.transformColor(datum.meta.stateColor[styleType], intensity);\n datum.meta.stateColor[styleType] = fillColorInfo.hsla;\n\n return fillColorInfo;\n};\n\nexport const applyInteractionStyle = (context, selectionSet, interactionStyles, config) => {\n const elements = context.getPlotElementsFromSet(selectionSet);\n const axes = context.axes();\n const colorAxis = axes.color;\n const apply = config.apply;\n const interactionType = config.interactionType;\n interactionStyles.forEach((style) => {\n const styleType = style.type;\n elements.style(styleType, ((d) => {\n const { colorTransform, stateColor, originalColor } = d.meta;\n colorTransform[interactionType] = colorTransform[interactionType] || {};\n if (apply && !colorTransform[interactionType][styleType]) {\n // fade selections\n colorTransform[interactionType][styleType] = style.intensity;\n const color = transfromColor(colorAxis, d, styleType, style.intensity).color;\n return color;\n }\n if (!apply && colorTransform[interactionType][styleType]) {\n // unfade selections\n colorTransform[interactionType][styleType] = null;\n return transfromColor(colorAxis, d, styleType, style.intensity.map(e => -e)).color;\n }\n const [h, s, l, a] = stateColor[styleType] ? stateColor[styleType] : originalColor;\n return `hsla(${h * 360},${s * 100}%,${l * 100}%, ${a || 1})`;\n }));\n });\n};\n\n/**\n *\n *\n * @param {*} selectionSet\n * @param {*} className\n * @param {*} hasFaded\n */\nexport const fadeUnfadeSelection = (context, selectionSet, hasFaded, interaction) => {\n const interactionConfig = { interaction, apply: hasFaded };\n applyInteractionStyle(context, selectionSet, 'fade', interactionConfig);\n};\n\n/**\n *\n *\n * @param {*} selectionSet\n * @param {*} className\n * @param {*} hasFaded\n */\nexport const focusUnfocusSelection = (context, selectionSet, isFocussed, interaction) => {\n const interactionConfig = { interaction, apply: isFocussed };\n applyInteractionStyle(context, selectionSet, 'focus', interactionConfig);\n};\n\n/**\n *\n *\n * @param {*} axes\n * @returns\n */\nexport const getAxesScales = (axes) => {\n const [xAxis, yAxis] = [ENCODING.X, ENCODING.Y].map(e => axes[e]);\n const [xScale, yScale] = [xAxis, yAxis].map(e => e && e.scale());\n return {\n xAxis,\n yAxis,\n xScale,\n yScale\n };\n};\n\n/**\n *\n *\n * @param {*} encoding\n * @param {*} fieldsConfig\n * @returns\n */\nexport const getEncodingFieldInf = (encoding, fieldsConfig) => {\n const [xField, yField, x0Field, y0Field, colorField, shapeField, sizeField] =\n [ENCODING.X, ENCODING.Y, ENCODING.X0, ENCODING.Y0, COLOR, SHAPE, SIZE].map(e => encoding[e] &&\n encoding[e].field);\n\n const [xFieldType, yFieldType] = [xField, yField, x0Field, y0Field].map(e => fieldsConfig[e] &&\n fieldsConfig[e].def.type);\n\n const [xFieldSubType, yFieldSubType] = [xField, yField].map(e => fieldsConfig[e] && (fieldsConfig[e].def.subtype ||\n fieldsConfig[e].def.type));\n\n const [xFieldIndex, yFieldIndex, x0FieldIndex, y0FieldIndex] = [xField, yField, x0Field, y0Field]\n .map(e => fieldsConfig[e] && fieldsConfig[e].index);\n\n return {\n xField,\n yField,\n colorField,\n shapeField,\n sizeField,\n x0Field,\n y0Field,\n xFieldType,\n yFieldType,\n xFieldSubType,\n yFieldSubType,\n xFieldIndex,\n yFieldIndex,\n x0FieldIndex,\n y0FieldIndex\n };\n};\n\n/**\n *\n *\n * @param {*} layerConfig\n * @param {*} fieldsConfig\n * @returns\n */\nexport const getValidTransform = (layerConfig, fieldsConfig, encodingFieldInf) => {\n let transformType;\n const {\n transform\n } = layerConfig;\n const {\n xField,\n yField,\n xFieldType,\n yFieldType\n } = encodingFieldInf;\n const groupByField = transform.groupBy;\n const groupByFieldMeasure = fieldsConfig[groupByField] && fieldsConfig[groupByField].def.type === FieldType.MEASURE;\n transformType = transform.type;\n if (!xField || !yField || groupByFieldMeasure || !groupByField || xFieldType === FieldType.DIMENSION &&\n yFieldType === FieldType.DIMENSION) {\n transformType = IDENTITY;\n }\n return transformType;\n};\n\n/**\n *\n *\n * @param {*} dataModel\n * @param {*} config\n * @param {*} transformType\n * @returns\n */\nexport const transformData = (dataModel, config, transformType, encodingFieldInf) => {\n const data = dataModel.getData({ withUid: true });\n const schema = data.schema;\n const transform = config.transform;\n const {\n xField,\n yField,\n xFieldType,\n yFieldType\n } = encodingFieldInf;\n const uniqueField = xFieldType === FieldType.MEASURE ? yField : xField;\n\n return transformFactory(transformType)(schema, data.data, {\n groupBy: transform.groupBy,\n uniqueField,\n sort: transform.sort || 'none',\n offset: transform.offset,\n orderBy: transform.orderBy,\n value: yFieldType === FieldType.MEASURE ? yField : xField\n }, data.uids);\n};\n\nexport const getIndividualClassName = (d, i, data, context) => {\n const className = context.config().individualClassName;\n let classNameStr = '';\n if (className instanceof Function) {\n classNameStr = className(d, i, data, context);\n }\n return classNameStr;\n};\n\n/*\n * This method resolves the x, y, x0 and y0 values from the transformed data.\n * It also checks the type of transformed data for example, if it is a stacked data\n * then it fetches the y and y0 values from the stacked data.\n * @param {Array.} transformedData transformed data\n * @param {Object} fieldsConfig field definitions\n * @param {string} transformType type of transformed data - stack, group or identity.\n * @return {Array.} Normalized data\n*/\nexport const getNormalizedData = (transformedData, fieldsConfig, encodingFieldInf, transformType) => {\n const transformedDataArr = transformType === IDENTITY ? [transformedData] : transformedData;\n const {\n xFieldType,\n xFieldIndex,\n yFieldIndex,\n x0FieldIndex,\n y0FieldIndex\n } = encodingFieldInf;\n const fieldsLen = Object.keys(fieldsConfig).length;\n /**\n * Returns normalized data from transformed data. It recursively traverses through\n * the transformed data if there it is nested.\n */\n return transformedDataArr.map((data) => {\n const values = transformType === GROUP ? data.values : data;\n return values.map((d) => {\n let pointObj = {};\n let tuple;\n if (transformType === STACK) {\n tuple = d.data || [];\n let y;\n let y0;\n let x;\n let x0;\n if (d[1] >= d[0]) {\n y = x0 = d[1];\n x = y0 = d[0];\n } else {\n y = x0 = d[0];\n x = y0 = d[1];\n }\n\n pointObj = xFieldType === FieldType.MEASURE ? {\n x,\n x0,\n y: tuple[yFieldIndex],\n y0: tuple[yFieldIndex]\n } : {\n x: tuple[xFieldIndex],\n x0: tuple[xFieldIndex],\n y,\n y0\n };\n pointObj._data = tuple;\n pointObj._id = tuple[fieldsLen];\n } else {\n pointObj = {\n x: d[xFieldIndex],\n y: d[yFieldIndex],\n x0: d[x0FieldIndex],\n y0: d[y0FieldIndex]\n };\n pointObj._data = d;\n pointObj._id = d[fieldsLen];\n }\n return pointObj;\n });\n }).filter(d => d.length);\n};\n\nexport const calculateDomainFromData = (data, encodingFieldInf, transformType) => {\n const {\n xFieldSubType,\n yFieldSubType,\n xField,\n yField,\n x0Field,\n y0Field\n } = encodingFieldInf;\n const domains = {};\n const yEnc = ENCODING.Y;\n const xEnc = ENCODING.X;\n if (xField) {\n domains.x = getDomainFromData(data, x0Field || transformType === STACK ? [xEnc, ENCODING.X0] : [xEnc, xEnc],\n xFieldSubType);\n }\n if (yField) {\n domains.y = getDomainFromData(data, y0Field || transformType === STACK ? [ENCODING.Y0, ENCODING.Y] :\n [yEnc, yEnc], yFieldSubType);\n }\n\n return domains;\n};\n\nexport const attachDataToVoronoi = (voronoi, points) => {\n voronoi.data([].concat(...points).filter(d => d._id !== undefined).map((d) => {\n const point = d.update;\n return {\n x: point.x,\n y: point.y,\n data: d\n };\n }));\n};\n\n/**\n *\n *\n * @param {*} target\n * @param {*} styles\n * @param {*} remove\n */\nexport const updateStyle = (target, styles, remove) => {\n for (const key in styles) {\n if ({}.hasOwnProperty.call(styles, key)) {\n target.style(key, remove ? null : styles[key]);\n }\n }\n};\n\n/**\n *\n *\n * @param {*} mount\n * @param {*} context\n */\nexport const animateGroup = (mount, context) => {\n let groupTransition;\n let update;\n const { transition, groupAnimateStyle } = context;\n const { duration, effect, disabled } = transition;\n if (groupAnimateStyle) {\n setStyles(mount.node(), groupAnimateStyle.enter);\n update = groupAnimateStyle.update;\n if (!disabled) {\n groupTransition = mount.transition()\n .ease(easeFns[effect])\n .duration(duration)\n .on('end', function () {\n updateStyle(selectElement(this), update, true);\n });\n } else {\n groupTransition = mount;\n }\n updateStyle(groupTransition, update);\n }\n};\n\nexport const positionPoints = (context, points) => {\n const positioner = context.encodingTransform();\n if (positioner) {\n return positioner(points, context, { smartLabel: context._dependencies.smartLabel });\n }\n return points;\n};\n\n/**\n * Gets the width of each group. It gets the width from axis if it is available for\n * example when the scale is nominal else it calculates the width from the\n * range of the axis and number of data points.\n *\n * @param {SimpleAxis} axis instance of axis\n * @param {number} minDiff Minimum difference between data points\n * @return {number} width of each bar\n * @private\n*/\nexport const getGroupSpan = (axis, minDiff) => {\n let groupSpan;\n const width = axis.getUnitWidth();\n const scale = axis.scale();\n const range = scale.range();\n const domain = scale.domain();\n !width ? groupSpan = (Math.abs(range[1] - range[0]) / Math.abs(domain[1] - domain[0])) * minDiff :\n (groupSpan = width);\n\n return groupSpan;\n};\n\nexport const getPlotMeasurement = (context, dimensionalValues) => {\n const fieldInfo = context.encodingFieldsInf();\n const axes = context.axes();\n const transformType = context.transformType();\n const config = context.config();\n const bandScale = context._bandScale;\n\n return ['x', 'y'].map((type) => {\n let span = 0;\n let groupSpan = 0;\n let padding = 0;\n let offsetValues = [];\n if (fieldInfo[`${type}FieldType`] === FieldType.DIMENSION) {\n let actualGroupWidth;\n const isTemporal = fieldInfo[`${type}FieldSubType`] === DimensionSubtype.TEMPORAL;\n const timeDiff = isTemporal ? context.dataProps().timeDiffs[type] : 0;\n const axis = axes[type];\n const pad = config[`pad${type.toUpperCase()}`];\n const innerPadding = config.innerPadding;\n const keys = dimensionalValues;\n const scale = axis.scale();\n groupSpan = getGroupSpan(axis, timeDiff);\n const isAxisBandScale = axis.constructor.type() === BAND;\n const axisPadding = axis.config().padding;\n // If it is a grouped bar then the width of each bar in a grouping is retrieved from\n // a band scale. The band scale will have range equal to width of one group of bars and\n // the domain is set to series keys.\n if (transformType === 'group') {\n const groupPadding = isAxisBandScale ? 0 : axisPadding * groupSpan / 2;\n bandScale.range([groupPadding, groupSpan - groupPadding]).domain(keys).paddingInner(innerPadding);\n span = bandScale.bandwidth();\n actualGroupWidth = groupSpan - (isAxisBandScale ? 0 : axisPadding * groupSpan);\n offsetValues = keys.map(key => bandScale(key) - (isAxisBandScale ? 0 : (groupSpan / 2)));\n } else if (pad !== undefined) {\n let offset;\n if (isAxisBandScale) {\n const step = scale.step();\n offset = scale.padding() * step;\n span = scale.bandwidth() + offset;\n } else {\n span = groupSpan;\n }\n offsetValues = keys.map(() => (isAxisBandScale ? -(offset / 2) : -(span / 2)));\n } else {\n padding = isAxisBandScale ? 0 : axisPadding * groupSpan;\n span = groupSpan - padding;\n actualGroupWidth = span;\n offsetValues = keys.map(() => (isAxisBandScale ? 0 : -(span / 2)));\n }\n\n groupSpan = actualGroupWidth;\n padding = isAxisBandScale ? axisPadding * axis.scale().step() : axisPadding * groupSpan;\n }\n\n return {\n span,\n offsetValues,\n groupSpan,\n padding\n };\n });\n};\n","import { nextFrame } from 'muze-utils';\nimport { getValidTransform, getEncodingFieldInf } from '../helpers';\nimport * as PROPS from '../enums/props';\n\nexport const listenerMap = context => [\n {\n props: [PROPS.TRANSFORMED_DATA],\n listener: fetch => fetch(PROPS.DATA, PROPS.CONFIG, (dataModel, config) => {\n const dataModelValue = dataModel.value;\n const configValue = config.value;\n const encodingValue = configValue && configValue.encoding;\n if (dataModelValue && encodingValue) {\n const fieldsConfig = dataModelValue.getFieldsConfig();\n const encodingFieldsInf = getEncodingFieldInf(encodingValue, fieldsConfig);\n context.encodingFieldsInf(encodingFieldsInf);\n context.transformType(getValidTransform(configValue, fieldsConfig, encodingFieldsInf));\n return context.getTransformedData(dataModelValue, configValue, context.transformType(),\n encodingFieldsInf);\n }\n return null;\n }),\n type: 'computed'\n },\n {\n props: [PROPS.NORMALIZED_DATA],\n listener: fetch => fetch(PROPS.TRANSFORMED_DATA, (transformedData) => {\n const transformedDataValue = transformedData.value;\n if (transformedDataValue) {\n const fieldsConfig = context.data().getFieldsConfig();\n return context.getNormalizedData(transformedDataValue, fieldsConfig);\n }\n return null;\n }),\n type: 'computed'\n },\n {\n props: [PROPS.DOMAIN],\n listener: fetch => fetch(PROPS.NORMALIZED_DATA, (normalizedData) => {\n const normalizedDataValue = normalizedData.value;\n if (normalizedDataValue) {\n return context.calculateDomainFromData(normalizedDataValue, context.encodingFieldsInf(),\n context.data().getFieldsConfig());\n }\n return null;\n }),\n type: 'computed'\n },\n {\n props: [PROPS.DATA],\n listener: (data) => {\n if (data[1]) {\n nextFrame(() => {\n context.store().commit(PROPS.DATA_UPDATED, true);\n });\n }\n },\n type: 'registerImmediateListener'\n },\n {\n props: [PROPS.MOUNT, PROPS.DATA_UPDATED],\n listener: (mount, dataUpdated) => {\n if (mount[1] && dataUpdated[1]) {\n context.render(mount[1]);\n context.dependencies().throwback.commit('onlayerdraw', true);\n }\n },\n type: 'registerChangeListener'\n }\n];\n\n","import { mergeRecursive } from 'muze-utils';\nimport * as PROPS from '../enums/props';\n\nexport const defaultOptions = {\n [PROPS.CONFIG]: {\n value: null,\n meta: {\n sanitization: (config, oldConfig, context) => {\n const constructor = context.constructor;\n const newConf = mergeRecursive({}, constructor.defaultConfig());\n return constructor.defaultPolicy(newConf, config);\n }\n }\n },\n [PROPS.DATA]: {\n value: null,\n meta: {\n preset: (data, context) => {\n if (context._cacheEnabled) {\n context._cachedData.push(data);\n } else {\n context._cachedData = [data];\n }\n }\n }\n },\n [PROPS.MOUNT]: {\n value: null\n },\n [PROPS.AXES]: {\n value: null\n },\n [PROPS.MEASUREMENT]: {\n value: null\n }\n};\n","import {\n getUniqueId,\n mergeRecursive,\n Store,\n FieldType,\n selectElement,\n ReservedFields,\n registerListeners,\n transactor,\n DataModel,\n clone\n} from 'muze-utils';\nimport { SimpleLayer } from '../simple-layer';\nimport * as PROPS from '../enums/props';\nimport {\n transformData,\n calculateDomainFromData,\n getNormalizedData,\n applyInteractionStyle\n} from '../helpers';\nimport { listenerMap } from './listener-map';\nimport { defaultOptions } from './default-options';\n\n/**\n * An abstract class which gives defination of common layer functionality like\n * - transfromation data for various {@link mode}\n * - calculating data domain\n * - linking dependent layers\n * - merging policy of configuration\n * - interaction sideffect helpers\n * - retrieving dom elements from data using id\n * - retrieving the physical dimensions of marks\n * - disposing layer\n *\n * Every layer has to extend base layer and give concrete definition.\n * This layer does not have any default visual. A new layer has to define the logic of `render` for rendering the\n * visuals\n *\n * @public\n * @class\n * @namespace Muze\n */\nexport default class BaseLayer extends SimpleLayer {\n\n /**\n * Creates a layer using a configuration and data.\n *\n * @public\n *\n * @param {DataModel} data Instance of DataModel to be used. This DataModel instance serves as the data for a layer.\n * @param {Object} axes Axes instances to be used for rendering the layer. Axes are used for mapping data from\n * value to px.\n * @param {SimpleAxis} axes.x X axis of the layer. Based on the type of variable it gets instance of BandAxis,\n * TimeAxis, ContinuousAxis\n * @param {SimpleAxis} axes.y X axis of the layer. Based on the type of variable it gets instance of BandAxis,\n * TimeAxis, ContinuousAxis\n * @param {ColorAxis} axes.color Axis for coloring a layer using color interpolators\n * @param {ShapeAxis} axes.shape Axis for providing a shape\n * @param {SizeAxis} axes.shape Axis for determining size of a mark using size interpolator\n * @param {LayerConfig} config Configuration of the layer\n * @param {Object} dependencies Dependencies of the layer\n * @param {SmartLabel} smartLabel Smartlabel singleton instance\n */\n constructor (data, axes, config, dependencies) {\n super();\n this.store(new Store({\n DATA: null,\n [PROPS.DATA_UPDATED]: null\n }));\n transactor(this, defaultOptions, this.store().model);\n this.data(data);\n this.axes(axes);\n this.config(config);\n this.alias(this.constructor.formalName() + getUniqueId());\n this.dependencies(dependencies);\n this._points = [];\n this._cachedData = [];\n this._id = getUniqueId();\n this._measurement = {};\n registerListeners(this, listenerMap);\n }\n\n /**\n * Creates a layer instance\n * @return {BaseLayer} Instance of a layer\n */\n static create (...params) {\n return new this(...params);\n }\n\n /**\n * Default configuration of the layer. This configuration gets merged to the user passed configuration using a\n * plolicy. Base layer only returns part of configuraion, any layer overridding base layer should return its own\n * configuration.\n *\n * @public\n * @static\n *\n * @return {Object} Default configuration\n */\n static defaultConfig () {\n return {\n transform: {\n type: 'identity'\n }\n };\n }\n\n /**\n * Policy defines how user config gets merged to default config. The default policy here does a deep copy\n * operation.\n * Any policy which does more than deep copying should define the policy as a static member.\n *\n * @static\n * @public\n *\n * @param {LayerConfig} conf Configuration with which the user config will be merged\n * @param {LayerConfig} userConf Configuration given by the user\n *\n * @return {LayerConfig} Merged layer configuration\n */\n static defaultPolicy (conf, userConf) {\n return mergeRecursive(conf, userConf);\n }\n\n /**\n * Determines a name for a layer. This name of the layer is used in the input data to refer to this layer.\n * ```\n * .layer([\n * mark: 'bar',\n * encoding: { ... }\n * ])\n * ```\n *\n * @static\n * @public\n *\n * @returns {string} name of layer\n */\n static formalName () {\n return 'base';\n }\n\n store (...store) {\n if (store.length) {\n this._store = store[0];\n return this;\n }\n return this._store;\n }\n\n encodingFieldsInf (...fieldsInf) {\n if (fieldsInf.length) {\n this._encodingFieldsInf = fieldsInf[0];\n return this;\n }\n return this._encodingFieldsInf;\n }\n\n encodingTransform (...encodingTransform) {\n if (encodingTransform.length) {\n this._encodingTransform = encodingTransform[0];\n return this;\n }\n return this._encodingTransform;\n }\n\n /**\n * Provides a alias for a layer. Like it's possible to have same layer (like bar) multiple times, but among multiple\n * layers of same type if one layer has to be referred, alias is used. If no alias is given then `formalName` is set\n * as the alias name.\n *\n * @public\n *\n * If used as setter\n * @param {string} alias Name of the alias\n * @return {BaseLayer} Instance of current base layer\n *\n * If used as getter\n * @return {string} Alias of the current layer\n */\n alias (...params) {\n if (params.length) {\n this._alias = params[0];\n return this;\n }\n return this._alias || this.constructor.formalName();\n }\n\n dependencies (...params) {\n if (params.length) {\n this._dependencies = params[0];\n return this;\n }\n return this._dependencies;\n }\n\n enableCaching () {\n this._cacheEnabled = true;\n return this;\n }\n\n clearCaching () {\n this._cacheEnabled = false;\n return this.data(this._cachedData[0]);\n }\n\n /**\n * Serialize the schema. Merge config is used for serialization.\n *\n * @public\n *\n * @return {LayerConfig} Serialized schema\n */\n serialize () {\n return this.config();\n }\n\n /**\n * Returns the unique identifier of this layer. Id is auto generated during the creation proceess of a schema.\n *\n * @return {string} id of the layer\n */\n id () {\n return this._id;\n }\n\n /**\n * Gets the transform method from transform factory based on type of transform. It then calls the\n * transform method with the data and passes the configuration parameters of transform such as\n * groupBy, value field, etc.\n *\n * @public\n *\n * @param {DataModel} dataModel Instance of DataModel\n * @param {Object} config Configuration for transforming data\n * @return {Array.} Transformed data.\n */\n getTransformedData (dataModel, config, transformType, encodingFieldsInf) {\n return transformData(dataModel, config, transformType, encodingFieldsInf);\n }\n\n /**\n * Calculates the domain from the data.\n * It checks the type of field and calculates the domain based on that. For example, if it\n * is a quantitative or temporal field, then it calculates the min and max from the data or\n * if it is a nominal field then it gets all the values from the data of that field.\n * @param {Array} data DataArray\n * @param {Object} fieldsConfig Configuration of fields\n * @return {Array} Domain values array.\n */\n calculateDomainFromData (data) {\n let domains = {};\n const isEmpty = this.data().isEmpty();\n\n if (!isEmpty) {\n domains = calculateDomainFromData(data, this.encodingFieldsInf(), this.transformType());\n }\n return domains;\n }\n\n shouldDrawAnchors () {\n return false;\n }\n\n /**\n * Returns the domain for the axis.\n *\n * @param {string} encodingType type of encoding x, y, etc.\n * @return {Object} Axis domains\n */\n getDataDomain (encodingType) {\n const domains = this.store().get(PROPS.DOMAIN);\n return encodingType !== undefined ? domains[encodingType] || [] : domains;\n }\n\n /**\n * Returns the domain for the axis.\n *\n * @param {string} encodingType type of encoding x, y, etc.\n * @return {Object} Axis domains\n */\n getNormalizedData (transformedData, fieldsConfig) {\n return getNormalizedData(transformedData, fieldsConfig, this.encodingFieldsInf(), this.transformType());\n }\n\n /**\n * Abstract method for getting nearest point\n * @return {BaseLayer} Instance of base layer\n */\n getNearestPoint () {\n return null;\n }\n\n applyInteractionStyle (interactionType, selectionSet, apply) {\n const interactionConfig = this.config().interaction || {};\n\n const interactionStyles = interactionConfig[interactionType];\n if (interactionStyles) {\n applyInteractionStyle(this, selectionSet, interactionStyles, {\n apply,\n interactionType\n });\n }\n }\n\n /**\n *\n *\n * @returns\n * @memberof BaseLayer\n */\n transformType (...transformType) {\n if (transformType.length) {\n this._transformType = transformType[0];\n return this;\n }\n return this._transformType;\n }\n\n /**\n * Renders the layer\n * @return {BaseLayer} Instance of the layer.\n */\n render () {\n return this;\n }\n\n /**\n *\n *\n * @returns\n * @memberof BaseLayer\n */\n elemType () {\n return 'g';\n }\n\n /**\n * Disposes the entire layer\n * @return {BaseLayer} Instance of layer.\n */\n remove () {\n this.store().unsubscribeAll();\n selectElement(this.mount()).remove();\n return this;\n }\n\n /**\n * Stores point in an object with key as the categorical value or temporal value\n *\n * @param {string} key categorical value or temporal value\n * @param {Object} data Information of the data point\n * @return {BarLayer} Instance of bar layer\n */\n cachePoint (key, data) {\n if (key === null) {\n return this;\n }\n const pointMap = this._pointMap;\n !pointMap[key] && (pointMap[key] = []);\n pointMap[key].push(data);\n return this;\n }\n\n /**\n *\n *\n * @param {*} dataProps\n * @returns\n * @memberof BaseLayer\n */\n dataProps (...dataProps) {\n if (dataProps.length) {\n this._dataProps = dataProps[0];\n return this;\n }\n return this._dataProps;\n }\n\n /**\n *\n *\n * @param {*} data\n * @param {*} id\n * @returns\n * @memberof BaseLayer\n */\n getIdentifiersFromData (data) {\n const schema = this.data().getData().schema;\n const fieldsConfig = this.data().getFieldsConfig();\n const identifiers = [[], []];\n const {\n xFieldType,\n yFieldType,\n xField,\n yField\n } = this.encodingFieldsInf();\n\n const [xMeasure, yMeasure] = [xFieldType, yFieldType].map(type => type === FieldType.MEASURE);\n schema.forEach((d, i) => {\n const name = d.name;\n if (fieldsConfig[name].def.type === FieldType.DIMENSION) {\n identifiers[0].push(name);\n identifiers[1].push(data[i]);\n }\n });\n\n if (xMeasure && yMeasure) {\n const xMeasureIndex = fieldsConfig[xField].index;\n const yMeasureIndex = fieldsConfig[yField].index;\n identifiers[0].push(...[xField, yField]);\n identifiers[1].push(...[data[xMeasureIndex], data[yMeasureIndex]]);\n }\n return identifiers;\n }\n\n getPlotSpan () {\n return {\n x: 0,\n y: 0\n };\n }\n\n getPlotPadding () {\n return {\n x: 0,\n y: 0\n };\n }\n\n /**\n *\n *\n * @param {*} identifiers\n * @returns\n * @memberof BaseLayer\n */\n getPointsFromIdentifiers (identifiers, config = {}) {\n const getAllAttrs = config.getAllAttrs;\n const getBBox = config.getBBox;\n if (!this.data()) {\n return [];\n }\n let fieldNames;\n let values;\n if (identifiers instanceof DataModel) {\n const dataObj = identifiers.getData();\n fieldNames = dataObj.schema.map(d => d.name);\n values = dataObj.data;\n } else {\n fieldNames = identifiers[0];\n values = identifiers.slice(1, identifiers.length);\n }\n\n const points = this._points;\n const fieldsConfig = this.data().getFieldsConfig();\n\n const filteredPoints = [].concat(...points).filter((point) => {\n const { _data, _id } = point;\n\n return fieldNames.every((field, idx) => {\n if (field in fieldsConfig && fieldsConfig[field].def.type === FieldType.DIMENSION) {\n return values.findIndex(d => d[idx] === _data[fieldsConfig[field].index]) !== -1;\n } else if (field === ReservedFields.ROW_ID) {\n return values.findIndex(d => d[idx] === _id) !== -1;\n } return true;\n });\n });\n return getAllAttrs ? filteredPoints : filteredPoints.map((d) => {\n const obj = clone(d);\n if (getBBox) {\n const update = obj.update || obj;\n if (obj.size !== undefined) {\n const sizeVal = Math.sqrt(obj.size / Math.PI) * 2;\n update.width = sizeVal;\n update.height = sizeVal;\n update.x -= sizeVal / 2;\n update.y -= sizeVal / 2;\n } else {\n if (update.width === undefined) {\n update.width = 2;\n }\n if (update.height === undefined) {\n update.height = 2;\n }\n }\n }\n\n return obj.update || obj;\n }).sort((a, b) => a.y - b.y);\n }\n\n getTransformedDataFromIdentifiers (identifiers) {\n const { data: identifierData, schema: identifierSchema } = identifiers.getData();\n const normalizedData = this.store().get(PROPS.NORMALIZED_DATA);\n const fieldsConfig = this.data().getFieldsConfig();\n const {\n yField,\n xField,\n yFieldType,\n xFieldType\n } = this.encodingFieldsInf();\n let measureIndex;\n let enc;\n if (xFieldType === FieldType.MEASURE) {\n measureIndex = fieldsConfig[xField].index;\n enc = 'x';\n } else if (yFieldType === FieldType.MEASURE) {\n measureIndex = fieldsConfig[yField].index;\n enc = 'y';\n }\n\n const transformedData = [];\n normalizedData.forEach((dataArr) => {\n dataArr.forEach((dataObj) => {\n const tupleArr = dataObj._data;\n const exist = identifierSchema.every((obj, i) =>\n identifierData.findIndex(d => tupleArr[fieldsConfig[obj.name].index] === d[i]) !== -1);\n if (exist) {\n const transformedVal = dataObj[enc];\n const row = dataObj._data;\n const tuple = {};\n for (const key in fieldsConfig) {\n const index = fieldsConfig[key].index;\n tuple[key] = row[index];\n if (index === measureIndex) {\n tuple[key] = transformedVal;\n }\n }\n transformedData.push(tuple);\n }\n });\n });\n\n return [transformedData, this.data().getData().schema];\n }\n\n /**\n *\n *\n * @param {*} set\n * @returns\n * @memberof BaseLayer\n */\n getPlotElementsFromSet (set) {\n return selectElement(this.mount()).selectAll(this.elemType()).filter(data =>\n (data ? set.indexOf(data._id) !== -1 : false));\n }\n}\n","import {\n selectElement,\n makeElement,\n pathInterpolators,\n Symbols\n} from 'muze-utils';\nimport { updateStyle } from '../../helpers';\n\nconst line = Symbols.line;\n\n/**\n * Draws a line from the points\n * Generates a svg path string\n * @param {Object} params Contains container, points and interpolate attribute.\n */\nexport const drawLine = (context) => {\n let filteredPoints;\n const { container, points, interpolate, connectNullData, className, style, transition } = context;\n const mount = selectElement(container).attr('class', className);\n const curveInterpolatorFn = pathInterpolators[interpolate];\n const linepath = line()\n .curve(curveInterpolatorFn)\n .x(d => d.update.x)\n .y(d => d.update.y)\n .defined(d => d.update.y !== null);\n\n filteredPoints = points;\n if (connectNullData) {\n filteredPoints = points.filter(d => d.update.y !== null);\n }\n\n updateStyle(mount, style);\n let element = makeElement(mount, 'path', [1]);\n element.classed(points[0].className, true);\n if (!transition.disabled) {\n element = element.transition().duration(transition.duration);\n }\n element.attr('d', linepath(filteredPoints))\n .style('fill-opacity', 0);\n return element;\n};\n","import { CLASSPREFIX } from '../../enums/constants';\n\nexport const defaultConfig = {\n classPrefix: CLASSPREFIX,\n defClassName: 'layer-line',\n className: '',\n interpolate: 'linear',\n transform: {\n type: 'group'\n },\n interaction: {\n highlight: [{\n type: 'stroke',\n intensity: [0, 0, -15, 0]\n }],\n fade: [{\n type: 'stroke',\n intensity: [0, 0, +15, 0]\n }],\n focus: [{\n type: 'stroke',\n intensity: [0, 0, +15, 0]\n }]\n },\n nearestPointThreshold: 20,\n encoding: {\n color: {},\n x: {},\n y: {},\n strokeOpacity: {\n value: 1\n }\n },\n transition: {\n effect: 'cubic',\n duration: 1000\n },\n connectNullData: false\n};\n\n","import {\n Voronoi,\n getQualifiedClassName,\n selectElement,\n makeElement,\n FieldType,\n getObjProp\n} from 'muze-utils';\nimport { BaseLayer } from '../../base-layer';\nimport { drawLine } from './renderer';\nimport { defaultConfig } from './default-config';\nimport { ENCODING } from '../../enums/constants';\nimport * as PROPS from '../../enums/props';\nimport {\n attachDataToVoronoi,\n animateGroup,\n getLayerColor,\n positionPoints,\n getIndividualClassName\n} from '../../helpers';\n\nimport './styles.scss';\n\n/**\n * Line Layer creates a line plot.\n * Example :-\n * const config = {\n * encoding = {\n * x: {\n * field: 'date'\n * },\n * y: {\n * field: 'sales'\n * }\n * }\n * };\n * const linelayer = layerFactory.getLayer('line', [dataModel, axes, config]);\n * linelayer.render(container);\n * @class\n */\nexport default class LineLayer extends BaseLayer {\n\n /**\n *Creates an instance of LineLayer.\n * @param {*} args\n * @memberof LineLayer\n */\n constructor (...args) {\n super(...args);\n this._voronoi = new Voronoi();\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof LineLayer\n */\n static formalName () {\n return 'line';\n }\n\n /**\n *\n *\n * @returns\n * @memberof LineLayer\n */\n elemType () {\n return 'path';\n }\n\n /**\n * Default configuration of line layer\n * @return {Object} Default configuration of layer\n */\n static defaultConfig () {\n return defaultConfig;\n }\n\n /**\n *\n *\n * @static\n * @param {*} conf\n * @param {*} userConf\n * @returns\n * @memberof LineLayer\n */\n static defaultPolicy (conf, userConf) {\n const config = BaseLayer.defaultPolicy(conf, userConf);\n const encoding = config.encoding;\n const transform = config.transform;\n const colorField = encoding.color && encoding.color.field;\n\n if (colorField && !transform.groupBy) {\n transform.groupBy = colorField;\n }\n return config;\n }\n\n /**\n * Returns the draw method for line\n * @return {Function} Draw method of line layer\n */\n getDrawFn () {\n return drawLine;\n }\n\n /**\n * Applies selection styles to the elements that fall within the selection set.\n * @param {Array} selectionSet Array of tuple ids.\n * @param {Object} config Configuration for selection.\n * @return {BarLayer} Instance of bar layer.\n */\n highlightPoint () {\n return this;\n }\n\n /**\n * Removes selection styles to the elements that fall within the selection set.\n * @param {Array} selectionSet Array of tuple ids.\n * @param {Object} config Configuration for selection.\n * @return {BarLayer} Instance of bar layer.\n */\n dehighlightPoint () {\n return this;\n }\n\n focusSelection () {\n return this;\n }\n\n focusOutSelection () {\n return this;\n }\n\n fadeOutSelection () {\n return this;\n }\n\n unfadeSelection () {\n return this;\n }\n\n shouldDrawAnchors () {\n return true;\n }\n\n /**\n * Generates the x and y positions for each point\n * @param {Array} data Data Array\n * @param {Object} encoding Visual Encodings of the layer\n * @param {Object} axes Contains the axis\n * @param {number} seriesIndex index of series\n * @return {Array} Array of points\n */\n translatePoints (data, encodingFieldsInf, axes) {\n let points = [];\n const xAxis = axes.x;\n const yAxis = axes.y;\n const colorAxis = axes.color;\n const encoding = this.config().encoding;\n const { xFieldType, yFieldType } = encodingFieldsInf;\n const isXDim = xFieldType === FieldType.DIMENSION;\n const isYDim = yFieldType === FieldType.DIMENSION;\n const key = isXDim ? ENCODING.X : (isYDim ? ENCODING.Y : null);\n const colorEncoding = encoding.color;\n const colorField = colorEncoding.field;\n const fieldsConfig = this.data().getFieldsConfig();\n const colorFieldIndex = colorField && fieldsConfig[colorField].index;\n const style = {};\n const meta = {};\n\n points = data.map((d, i) => {\n const xPx = xAxis.getScaleValue(d.x) + xAxis.getUnitWidth() / 2;\n const yPx = yAxis.getScaleValue(d.y);\n const { color, rawColor } = getLayerColor({ datum: d, index: i }, {\n colorEncoding, colorAxis, colorFieldIndex });\n\n style.stroke = color;\n style['fill-opacity'] = 0;\n meta.stateColor = {};\n meta.originalColor = rawColor;\n meta.colorTransform = {};\n\n const point = {\n enter: {},\n update: {\n x: xPx,\n y: d.y === null ? null : yPx\n },\n style,\n _data: d._data,\n _id: d._id,\n rowId: d._id,\n source: d._data,\n meta\n };\n point.className = getIndividualClassName(d, i, data, this);\n this.cachePoint(d[key], point);\n return point;\n });\n points = positionPoints(this, points);\n return points;\n }\n\n /**\n * Renders the line plot\n * @param {SVGElement} container svg element\n * @return {LineLayer} instance of line layer\n */\n render (container) {\n let points;\n let seriesClassName;\n let style;\n\n const config = this.config();\n const {\n encoding,\n interpolate,\n className,\n defClassName,\n transition\n } = config;\n const store = this._store;\n const normalizedData = store.get(PROPS.NORMALIZED_DATA);\n const transformedData = store.get(PROPS.TRANSFORMED_DATA);\n const fieldsConfig = this.data().getFieldsConfig();\n const axes = this.axes();\n const keys = transformedData.map(d => d.key);\n const qualifiedClassName = getQualifiedClassName(defClassName, this.id(), config.classPrefix);\n const containerSelection = selectElement(container);\n const colorField = encoding.color.field;\n const colorFieldIndex = fieldsConfig[colorField] && fieldsConfig[colorField].index;\n\n this._points = [];\n this._pointMap = {};\n containerSelection.classed(qualifiedClassName.join(' '), true);\n containerSelection.classed(className, true);\n makeElement(container, 'g', normalizedData, null, {\n enter: (group) => {\n animateGroup(group, {\n transition,\n groupAnimateStyle: {\n enter: {\n 'stroke-opacity': 0,\n 'fill-opacity': this.getPathStyle()['fill-opacity']\n },\n update: {\n 'stroke-opacity': encoding.strokeOpacity.value\n }\n }\n });\n },\n update: (group, dataArr, i) => {\n points = this.translatePoints(dataArr, this.encodingFieldsInf(), axes, i);\n this._points.push(points);\n seriesClassName = `${qualifiedClassName[0]}-${keys[i] || i}`.toLowerCase();\n\n let color;\n const colorValFn = encoding.color.value;\n const colorVal = points.find(d => d._data[colorFieldIndex] !== null &&\n d._data[colorFieldIndex] !== undefined);\n\n if (colorValFn) {\n color = colorValFn(dataArr, i, normalizedData);\n } else {\n color = axes.color.getColor(colorVal && colorVal._data[colorFieldIndex]);\n }\n\n style = this.getPathStyle(color);\n this.getDrawFn()({\n container: group.node(),\n interpolate,\n points,\n className: seriesClassName,\n transition,\n style: style || {},\n connectNullData: config.connectNullData\n });\n }\n }, d => d[0]._data[colorFieldIndex] || d[0]._id);\n\n attachDataToVoronoi(this._voronoi, this._points);\n return this;\n }\n\n /**\n * Get the css styles need to be applied on the line path\n * @param {string} color Color value\n * @return {Object} Path styles\n */\n getPathStyle (color) {\n return {\n stroke: color,\n 'fill-opacity': '0'\n };\n }\n\n /**\n * Gets the nearest point closest to the given position\n * @param {number} x x position\n * @param {number} y y position\n * @return {Object} Nearest point information\n */\n getNearestPoint (x, y, config) {\n let searchRadius = config.searchRadius;\n const data = this.data();\n\n if (!data || (data && data.isEmpty())) {\n return null;\n }\n\n searchRadius = searchRadius !== undefined ? searchRadius : this.config().nearestPointThreshold;\n const point = this._voronoi.find(x, y, searchRadius);\n const dimensions = getObjProp(point, 'data', 'data', 'update');\n\n if (point) {\n const { _data, _id } = point.data.data;\n const identifiers = this.getIdentifiersFromData(_data, _id);\n return {\n id: identifiers,\n dimensions: [{\n x: dimensions.x,\n y: dimensions.y,\n width: 2,\n height: 2\n }],\n layerId: this.id()\n };\n }\n return null;\n }\n}\n","import {\n easeFns,\n selectElement,\n pathInterpolators,\n Symbols\n} from 'muze-utils';\n\nconst area = Symbols.area;\n/**\n * Draws a line from the points\n * Generates a svg path string\n * @param {Object} params Contains container, points and interpolate attribute.\n */\nconst /* istanbul ignore next */ drawArea = (params) => {\n let filteredPoints;\n const { container, points, style, transition, className, connectNullData, interpolate } = params;\n\n const { effect: easeEffect, duration } = transition;\n const mount = selectElement(container);\n const curveInterpolatorFn = pathInterpolators[interpolate];\n const selection = mount.selectAll('path').data([params.points]);\n const [enterAreaPath, updateAreaPath] = ['enter', 'update'].map(e => area().curve(curveInterpolatorFn)\n .x(d => d[e].x)\n .y1(d => d[e].y)\n .y0(d => d[e].y0)\n .defined(d => d[e].y !== null\n ));\n\n filteredPoints = points;\n mount.attr('class', className);\n if (connectNullData) {\n filteredPoints = points.filter(d => d.update.y !== null);\n }\n const selectionEnter = selection.enter().append('path').attr('d', enterAreaPath(filteredPoints));\n selection.merge(selectionEnter).transition().ease(easeFns[easeEffect])\n .duration(duration)\n .attr('d', updateAreaPath(filteredPoints))\n .each(function (d) {\n const element = selectElement(this);\n\n element.classed(d[0].className, true);\n Object.keys(style).forEach(key => element.style(key, style[key]));\n });\n};\n\nexport default drawArea;\n","import { FieldType } from 'muze-utils';\nimport { defaultConfig } from './default-config';\nimport { LineLayer } from '../line';\nimport drawArea from './renderer';\nimport './styles.scss';\nimport { STACK, ENCODING } from '../../enums/constants';\nimport { getAxesScales, positionPoints, getLayerColor, getIndividualClassName } from '../../helpers';\n\n/**\n * Area Layer creates a area plot.\n * @example\n * const config = {\n * encoding = {\n * x: {\n * field: 'date'\n * },\n * // Top y value\n * y: {\n * field: 'maxTemp'\n * },\n * // Base y value\n * y0: {\n * field: 'minTemp\n * }\n * }\n * };\n * const areaLayer = layerFactory.getLayer('area', [dataModel, axes, config]);\n * areaLayer.render(container);\n * @class\n */\nexport default class AreaLayer extends LineLayer {\n /** oation of line layer\n * @return {Object} Default configuration of layer\n */\n static defaultConfig () {\n return defaultConfig;\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof AreaLayer\n */\n static formalName () {\n return 'area';\n }\n\n /**\n * Calculates the domain from data. It calls its parent class's method which is line layer\n * to get the domain and overwrites the domain according to its need.\n * @return {Array} Domain values\n */\n calculateDomainFromData (data, encodingFieldsInf, fieldsConfig) {\n const domains = super.calculateDomainFromData(data, fieldsConfig);\n [ENCODING.X, ENCODING.Y].forEach((type) => {\n const { [`${type}FieldType`]: fieldType } = encodingFieldsInf;\n if (fieldType === FieldType.MEASURE) {\n domains[type][0] = Math.min(domains[type][0], 0);\n }\n });\n return domains;\n }\n\n /**\n * Returns the drawing method of this layer\n * @return {Function} Draw method\n */\n getDrawFn () {\n return drawArea;\n }\n\n /**\n * Generates the x and y positions for each point\n * @param {Array} data Data Array\n * @param {Object} encoding Visual Encodings of the layer\n * @param {Object} axes Contains the axis\n * @return {Array} Array of points\n */\n translatePoints (data, encodingFieldsInf, axes) {\n let points = [];\n const transformType = this.transformType();\n const colorAxis = axes.color;\n const config = this.config();\n const encoding = config.encoding;\n const colorEncoding = encoding.color;\n const colorField = colorEncoding.field;\n const fieldsConfig = this.data().getFieldsConfig();\n const colorFieldIndex = colorField && fieldsConfig[colorField].index;\n const { xField, yField, y0Field } = encodingFieldsInf;\n const {\n xAxis,\n yAxis\n } = getAxesScales(axes);\n const classNameFn = config.individualClassName;\n const isXDim = fieldsConfig[xField] && fieldsConfig[xField].def.type === FieldType.DIMENSION;\n const isYDim = fieldsConfig[yField] && fieldsConfig[yField].def.type === FieldType.DIMENSION;\n const key = isXDim ? 'x' : (isYDim ? 'y' : null);\n points = data.map((d, i) => {\n const xPx = xAxis.getScaleValue(d.x) + xAxis.getUnitWidth() / 2;\n const yPx = yAxis.getScaleValue(d.y);\n const y0Px = (y0Field || transformType === STACK) ? yAxis.getScaleValue(d.y0) : yAxis.getScaleValue(0);\n const { color, rawColor } = getLayerColor({ datum: d, index: i }, {\n colorEncoding, colorAxis, colorFieldIndex });\n const style = {};\n const meta = {};\n style.fill = color;\n // style['fill-opacity'] = 0;\n meta.stateColor = {};\n meta.originalColor = rawColor;\n meta.colorTransform = {};\n const point = {\n enter: {\n x: xPx,\n y: d.y === null ? d.y : yAxis.getScaleValue(0),\n y0: d.y0 === null ? d.y0 : yAxis.getScaleValue(0)\n },\n update: {\n x: xPx,\n y: d.y === null ? d.y : yPx,\n y0: d.y0 === null ? d.y0 : y0Px\n },\n _id: d._id,\n _data: d._data,\n source: d._data,\n rowId: d._id,\n className: classNameFn ? classNameFn(d, i, data, this) : '',\n style,\n meta\n };\n point.className = getIndividualClassName(d, i, data, this);\n this.cachePoint(d[key], point);\n return point;\n });\n points = positionPoints(this, points);\n return points;\n }\n\n /**\n * Get the css styles need to be applied on the line path\n * @param {string} color Color value\n * @return {Object} Path styles\n */\n getPathStyle (color) {\n return {\n fill: color\n };\n }\n}\n\n","import { CLASSPREFIX } from '../../enums/constants';\n\nexport const defaultConfig = {\n classPrefix: CLASSPREFIX,\n defClassName: 'layer-arc',\n padding: { top: 1, bottom: 1, left: 1, right: 1 },\n className: '',\n minOuterRadius: 10,\n interaction: {\n highlight: [{\n type: 'fill',\n intensity: [0, 0, -15, 0]\n }],\n fade: [{\n type: 'fill',\n intensity: [0, 0, +15, 0]\n }],\n focus: [{\n type: 'fill',\n intensity: [0, 0, +15, 0]\n }]\n },\n height: 100,\n width: 100,\n sort: '',\n cornerRadius: 0,\n padAngle: 0,\n padRadius: 0,\n startAngle: 0,\n endAngle: 360,\n colors: ['#F44336', 'blue', 'green', 'yellow', 'orange', 'purple'],\n transform: {\n type: 'identity'\n },\n encoding: {\n 'stroke-width': {\n value: '2px'\n },\n 'stroke-linejoin': {\n value: 'round'\n },\n angle: {\n value: '1'\n },\n radius: {\n value: '1'\n },\n opacity: {\n value: '1'\n },\n color: {\n value: '1'\n },\n shape: {\n value: '1'\n },\n size: {\n value: '1'\n }\n },\n innerRadiusFixer: 10,\n transition: {\n effect: 'cubic',\n duration: 500\n },\n states: {\n highlight: {\n className: `${CLASSPREFIX}-layer-arc-highlight`\n },\n fadeout: {\n className: `${CLASSPREFIX}-layer-arc-fadeout`\n },\n selected: {\n className: `${CLASSPREFIX}-layer-arc-selected`\n }\n }\n};\n\n","import {\n makeElement,\n selectElement,\n getQualifiedClassName,\n isSimpleObject,\n getDomainFromData,\n Symbols,\n FieldType,\n ReservedFields\n} from 'muze-utils';\nimport { defaultConfig } from './default-config';\nimport { BaseLayer } from '../../base-layer';\nimport * as PROPS from '../../enums/props';\nimport { ASCENDING, OUTER_RADIUS_VALUE } from '../../enums/constants';\nimport { getIndividualClassName } from '../../helpers';\nimport { getRangeValue, getRadiusRange, tweenPie, tweenExitPie, getFieldIndices, getPreviousPoint } from './arc-helper';\nimport './styles.scss';\n\nconst pie = Symbols.pie;\nconst arc = Symbols.arc;\n\n/**\n * Arc Layer creates a plot with polar coordinates\n * Example :-\n * const config = {\n * height: 100,\n * width: 100,\n * startAngle: 0,\n * endAngle: Math.PI,\n * cornerRadius: 10,\n * minOuterRadius: 10,\n * outerRadius: 10,\n * innerRadius: 5,\n * padAngle: 2,\n * padRadius: 2,\n * colors: []\n * padding: {top: 10, bottom: 10, left: 10, right: 10},\n * encoding = {\n * angle: {\n * field: 'date' //Maps to angle of arc\n * },\n * radius: {\n * field: 'sales' // Maps to radius of arc\n * }\n * }\n * };\n * @class\n */\nexport default class ArcLayer extends BaseLayer {\n\n constructor (data, axes, config, dependencies) {\n super(data, axes, config, dependencies);\n this._prevPieData = {};\n }\n\n /**\n * returns the default configuration of the layer\n *\n * @static\n * @return {Object} Default configuration for arc layer\n * @memberof ArcLayer\n */\n static defaultConfig () {\n return defaultConfig;\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof ArcLayer\n */\n static formalName () {\n return 'arc';\n }\n\n /**\n *\n *\n * @returns\n * @memberof ArcLayer\n */\n elemType () {\n return 'path';\n }\n\n /**\n * Transforms data in the appropriate data structure to be consumed by the layer for rendering\n *\n * @param {Object} data data model associated with the layer\n * @param {Object} config configuration of the layer that contains encoding and other parameters\n * @return {Object} Transformed pie data\n * @memberof ArcLayer\n */\n getTransformedData (dataModel, config) {\n let pieData = [];\n const pieIndex = {};\n const {\n startAngle,\n endAngle,\n encoding,\n sort,\n minOuterRadius\n } = config;\n const prevData = this._store.get(PROPS.TRANSFORMED_DATA) || [];\n const fieldsConfig = this.data().getFieldsConfig();\n const {\n angleIndex,\n sizeIndex,\n radiusIndex,\n colorIndex\n } = getFieldIndices(encoding, fieldsConfig);\n const dataVal = dataModel.getData();\n const data = dataVal.data;\n const uids = dataVal.uids;\n\n this._prevPieData = {};\n\n prevData.forEach((e, index) => {\n this._prevPieData[e.uid] = [e, index];\n pieIndex[e.index] = e;\n });\n // Creating pie data using angle field provided. If the angle field is a dimension,\n // all the angles will be equal(360/number of dimensions)\n\n pieData = pie()\n .startAngle((startAngle / 180) * Math.PI)\n .endAngle(Math.PI * endAngle / 180)\n .value(d => d[angleIndex] || 1)\n .sortValues(null);\n\n sort.length && radiusIndex && pieData.sort((a, b) => {\n if (sort === ASCENDING) {\n return a[radiusIndex] - b[radiusIndex];\n } return b[radiusIndex] - a[radiusIndex];\n });\n const sizeVal = data.reduce((acc, d) => acc + (d[sizeIndex] || 0), 1);\n\n // Adding the radius field values to each data point in pie data\n pieData = pieData(data).map((d, i) => {\n d.outerRadiusValue = data[i][radiusIndex] || minOuterRadius;\n d.innerRadius = config.innerRadius;\n d.colorVal = data[i][colorIndex];\n d.angleVal = data[i][angleIndex];\n d.sizeVal = sizeVal;\n d.uid = uids[i];\n d.rowId = d.uid;\n d.source = data[i];\n d._previousInfo = this._prevPieData[d.uid] ? this._prevPieData[d.uid][0] :\n getPreviousPoint(pieIndex, d.index, config);\n return d;\n });\n return pieData;\n }\n\n /**\n * Returns normalized data after transformation (it is the same in the case of pie layer)\n *\n * @param {Object} data transformed data\n * @return {Object} normalized data\n * @memberof ArcLayer\n */\n getNormalizedData (data) {\n return data;\n }\n\n /**\n *\n *\n * @param {Object} data\n * @return {}\n * @memberof ArcLayer\n */\n calculateDomainFromData (data) {\n const domainKey = OUTER_RADIUS_VALUE;\n return {\n radius: getDomainFromData([data], [domainKey, domainKey])\n };\n }\n\n /**\n *\n *\n * @param {Object} x\n * @param {Object} y\n * @return {}\n * @memberof ArcLayer\n */\n getNearestPoint (x, y, config = {}) {\n const dataPoint = selectElement(config.event.target).data()[0];\n if (isSimpleObject(dataPoint)) {\n const { data, uid } = dataPoint.datum;\n return {\n id: this.getIdentifiersFromData(data, uid),\n layerId: this.id()\n };\n }\n return null;\n }\n\n /**\n *\n *\n * @param {*} set\n * @returns\n * @memberof ArcLayer\n */\n getPlotElementsFromSet (set) {\n return selectElement(this.mount()).selectAll(this.elemType()).filter(d => set.indexOf(d.datum.uid) !== -1);\n }\n\n /**\n *\n *\n * @param {Object} container\n * @return {}\n * @memberof ArcLayer\n */\n render (container) {\n const {\n height,\n width\n } = this.measurement();\n const {\n classPrefix,\n defClassName,\n minOuterRadius,\n innerRadius,\n outerRadius,\n cornerRadius,\n padAngle,\n padRadius,\n padding,\n transition,\n innerRadiusFixer\n } = this.config();\n const sizeAxis = this.axes().size;\n const store = this._store;\n const transformedData = store.get(PROPS.TRANSFORMED_DATA);\n const chartHeight = height - padding.top - padding.bottom;\n const chartWidth = width - padding.left - padding.right;\n const qualClassName = getQualifiedClassName(defClassName, this.id(), classPrefix);\n // Sets range for radius\n const range = getRadiusRange(chartWidth, chartHeight, {\n minOuterRadius,\n innerRadius,\n outerRadius,\n innerRadiusFixer\n });\n const colorAxis = this.axes().color;\n const defaultRadius = outerRadius || Math.min(chartHeight, chartWidth) / 2;\n const radiusDomain = store.get(PROPS.DOMAIN).radius;\n const rangeValueGetter = d => getRangeValue(d, range, radiusDomain, defaultRadius, sizeAxis);\n // This returns a function that generates the arc path based on the datum provided\n const path = arc()\n // .outerRadius(d => rangeValueGetter(d))\n .innerRadius(innerRadius ? Math.min(chartHeight / 2, chartWidth / 2, innerRadius) : 0)\n .cornerRadius(cornerRadius)\n .padAngle(padAngle)\n .padRadius(padRadius);\n this._chartWidth = chartWidth;\n this._chartHeight = chartHeight;\n // Creating the group that holds all the arcs\n const g = makeElement(selectElement(container), 'g', [1], `${qualClassName[0]}-group`)\n .classed(`${qualClassName[1]}-group`, true)\n .attr('transform', `translate(${chartWidth / 2},${chartHeight / 2})`);\n const tween = (elem) => {\n makeElement(elem, 'path', (d, i) => [{\n datum: d,\n index: i,\n arcFn: path,\n meta: {\n originalColor: colorAxis.getRawColor(d.colorVal),\n stateColor: {},\n colorTransform: {}\n }\n }], `${qualClassName[0]}-path`)\n .style('fill', d => colorAxis.getColor(d.datum.colorVal))\n .transition()\n .duration(transition.duration)\n .attrTween('d', (...params) => tweenPie(path, rangeValueGetter, params))\n .attr('class', (d, i) => {\n const individualClass = getIndividualClassName(d, i, transformedData, this);\n return `${qualClassName[0]}-path ${qualClassName[1]}-path-${d.index}\n ${individualClass}`;\n });\n };\n const consecutiveExits = [];\n let exitCounter = 0;\n const tweenExit = (elem, d) => {\n let exitArr = consecutiveExits[exitCounter];\n const oldExitCounter = exitCounter;\n if (!exitArr) {\n exitArr = [{ elem, datum: d }];\n } else if (exitArr[exitArr.length - 1].datum.index === d.index - 1) {\n exitArr.push({ elem, datum: d });\n } else {\n exitCounter++;\n }\n consecutiveExits[oldExitCounter] = exitArr;\n };\n // Creating groups for all the arcs present individually\n makeElement(g, 'g', transformedData, `${qualClassName[0]}`,\n {\n update: tween,\n exit: tweenExit\n })\n .attr('class', (d, i) => `${qualClassName[0]} ${qualClassName[1]}-${i}`);\n tweenExitPie(consecutiveExits, transition, rangeValueGetter, path);\n return this;\n }\n\n /**\n *\n *\n * @param {*} identifiers\n * @returns\n * @memberof BaseLayer\n */\n getPointsFromIdentifiers (identifiers) {\n if (!this.data()) {\n return [];\n }\n const fieldNames = identifiers[0];\n const values = identifiers.slice(1, identifiers.length);\n const pieSlices = selectElement(this.mount()).selectAll('path').data();\n const fieldsConfig = this.data().getFieldsConfig();\n\n const filteredPies = pieSlices.filter((tData) => {\n const data = tData.datum.data;\n const uid = tData.datum.uid;\n return fieldNames.every((field, idx) => {\n if (field in fieldsConfig && fieldsConfig[field].def.type === FieldType.DIMENSION) {\n return values.findIndex(d => d[idx] === data[fieldsConfig[field].index]) !== -1;\n } else if (field === ReservedFields.ROW_ID) {\n return values.findIndex(d => d[idx] === uid) !== -1;\n } return true;\n });\n });\n\n const pieSliceInf = filteredPies[0];\n if (pieSliceInf) {\n const centroid = pieSliceInf.arcFn.centroid(pieSliceInf.datum);\n return [{\n x: centroid[0] + this._chartWidth / 2,\n y: centroid[1] + this._chartHeight / 2,\n width: 2,\n height: 2\n }];\n }\n return [];\n }\n}\n\n","import { getObjProp, interpolator, FieldType, selectElement } from 'muze-utils';\nimport { ANGLE, RADIUS, SIZE, COLOR } from '../../enums/constants';\n\n/**\n * Returns the range value from a value inside the domain\n *\n * @param {Object} domainValue Value whose range has to be returned\n * @return {number} range value\n * @memberof ArcLayer\n */\nexport const getRangeValue = (datum, range, domain, defaultRadius, sizeAxis) => {\n let domainMultiplier = 1;\n const {\n outerRadiusValue,\n sizeVal\n } = datum;\n const sizeAxisDomain = sizeAxis.domain();\n const sizeMultiplier = sizeAxis.getSize(sizeVal) / (sizeAxisDomain ? sizeAxis.range()[1] : sizeAxis.config().value);\n\n domainMultiplier *= (range[1] - range[0]) / (domain[1] - domain[0]);\n const rangeVal = (range[0] + (outerRadiusValue - domain[0]) * domainMultiplier);\n return (rangeVal || defaultRadius) * sizeMultiplier;\n};\n\n/**\n *\n *\n * @memberof ArcLayer\n */\nexport const getRadiusRange = (width, height, config) => {\n const {\n minOuterRadius,\n innerRadius,\n outerRadius,\n innerRadiusFixer\n } = config;\n\n return [Math.max((innerRadius + innerRadiusFixer || 0), minOuterRadius), outerRadius || Math.min(height,\n width) / 2];\n};\nexport const getPreviousPoint = (prevData, currIndex, config) => {\n const prevArc = prevData[currIndex - 1];\n const nextArc = prevData[currIndex];\n\n if (prevArc && nextArc) {\n return {\n startAngle: prevArc.endAngle,\n endAngle: nextArc.startAngle\n };\n } else if (!nextArc) {\n return {\n startAngle: config.endAngle * Math.PI * 2 / 360,\n endAngle: config.endAngle * Math.PI * 2 / 360\n };\n }\n return {\n startAngle: config.startAngle * Math.PI * 2 / 360,\n endAngle: config.startAngle * Math.PI * 2 / 360\n };\n};\n\n/**\n *\n *\n * @param {*} path\n * @param {*} b\n * @returns\n * @memberof ArcLayer\n */\nexport const tweenPie = (path, rangeValueGetter, b) => {\n const { datum } = b[0];\n const outerRadius = rangeValueGetter(datum);\n datum.outerRadius = outerRadius;\n datum._previousInfo.outerRadius = datum._previousInfo.outerRadius || outerRadius;\n return function (t) {\n return path(interpolator()(datum._previousInfo, datum)(t));\n };\n};\n\n/**\n *\n *\n * @param {*} path\n * @param {*} b\n * @returns\n * @memberof ArcLayer\n */\nexport const tweenExitPie = (consecutiveExits, transition, rangeValueGetter, path) => {\n if (consecutiveExits.length > 0) {\n consecutiveExits.forEach((consecutiveExitArr) => {\n const startAngle = consecutiveExitArr[0].datum.startAngle;\n const endAngle = consecutiveExitArr[consecutiveExitArr.length - 1].datum.endAngle;\n const mid = (Math.PI * 2 * startAngle) / ((Math.PI * 2) + startAngle - endAngle);\n\n consecutiveExitArr.forEach((e) => {\n const { elem, datum } = e;\n\n elem.each(function () {\n const gElem = selectElement(this);\n gElem.selectAll('path')\n .transition()\n .duration(transition.duration)\n .attrTween('d', () => function (t) {\n const outerRadius = rangeValueGetter(datum);\n datum.outerRadius = outerRadius;\n return path(interpolator()(datum, {\n startAngle: mid,\n endAngle: mid,\n outerRadius\n })(t));\n })\n .remove();\n gElem.remove();\n });\n });\n });\n }\n};\n\nexport const getFieldIndices = (encoding, fieldsConfig) => {\n const [angleField, radiusField, colorField, sizeField] = [ANGLE, RADIUS, COLOR, SIZE]\n .map(e => encoding[e].field);\n const [angleIndex, sizeIndex, radiusIndex] = [angleField, sizeField, radiusField]\n .map((e) => {\n const conf = fieldsConfig[e];\n if (conf && conf.def.type === FieldType.MEASURE) {\n return conf.index;\n }\n return null;\n });\n const colorIndex = getObjProp(fieldsConfig, colorField, 'index');\n return {\n angleIndex,\n sizeIndex,\n radiusIndex,\n colorIndex\n };\n};\n","import {\n setAttrs,\n setStyles,\n selectElement,\n makeElement,\n getSmartComputedStyle\n} from 'muze-utils';\n\n/**\n * Draws svg text in the specified container.\n * @param {SVGElement} container Container where labels will be appended.\n * @param {Array.} data Data of the elements.\n * @return {Selection} d3 selection of the elements.\n */\nconst drawText = (container, data, config, smartLabel) => {\n const selection = selectElement(container).selectAll('g').data(data);\n\n const selectionMerge = selection.enter().append('g')\n .each(function (dataObj) {\n setAttrs(this, dataObj.enter);\n })\n .merge(selection);\n const style = getSmartComputedStyle(selectElement(container), config.className);\n const fontSize = parseInt(style.fontSize, 10);\n\n smartLabel.setStyle(style);\n selectionMerge.each(function (dataObj) {\n const element = selectElement(this);\n const { update, text, color, textanchor, style: textStyle } = dataObj;\n const background = dataObj.background;\n let backgroundVal;\n if (backgroundVal = background.value) {\n const backgroundPadding = background.padding;\n let diff;\n const { width, height } = smartLabel.getOriSize(dataObj.text);\n const backgroundEl = makeElement(element, 'rect', [1]);\n\n if (textanchor === 'end') {\n diff = width;\n } else if (textanchor === 'start') {\n diff = 0;\n } else {\n diff = width / 2;\n }\n\n setAttrs(backgroundEl.node(), {\n x: update.x - diff - backgroundPadding / 2,\n y: update.y - fontSize - backgroundPadding / 2,\n width: width + backgroundPadding,\n height: height + backgroundPadding\n });\n background && setStyles(backgroundEl, {\n background: backgroundVal\n });\n }\n const textEl = makeElement(element, 'text', d => [d]).text(text);\n const textNode = textEl.node();\n textStyle && setStyles(textNode, textStyle);\n color && setStyles(textNode, {\n fill: color\n });\n dataObj.className && textEl.classed(dataObj.className, true);\n setAttrs(textNode, update);\n textEl.attr('text-anchor', textanchor);\n });\n selection.exit().remove();\n return selection;\n};\n\nexport default drawText;\n","import { CLASSPREFIX } from '../../enums/constants';\n\nexport const defaultConfig = {\n defClassName: 'layer-text',\n classPrefix: CLASSPREFIX,\n className: '',\n transform: {\n type: 'identity'\n },\n interaction: {\n highlight: [{\n type: 'fill',\n intensity: [0, 0, -15, 0]\n }],\n fade: [{\n type: 'fill',\n intensity: [0, 0, +15, 0]\n }],\n focus: [{\n type: 'fill',\n intensity: [0, 0, +15, 0]\n }]\n },\n transition: {\n effect: 'cubic',\n duration: 1000\n },\n encoding: {\n color: {},\n text: {\n value: '',\n background: {\n padding: 10\n }\n }\n },\n states: {\n highlight: {\n className: `${CLASSPREFIX}-layer-text-highlight`\n },\n fadeout: {\n className: `${CLASSPREFIX}-layer-text-fadeout`\n },\n selected: {\n className: `${CLASSPREFIX}-layer-text-selected`\n }\n }\n};\n","import {\n getQualifiedClassName,\n selectElement,\n setStyles,\n createElements\n} from 'muze-utils';\nimport { BaseLayer } from '../../base-layer';\nimport drawText from './renderer';\nimport { defaultConfig } from './default-config';\nimport { getLayerColor, positionPoints, getIndividualClassName } from '../../helpers';\nimport { TEXT_ANCHOR_MIDDLE, ENCODING } from '../../enums/constants';\nimport * as PROPS from '../../enums/props';\n\nimport './styles.scss';\n\n/**\n * Text Layer creates labels. It needs to be passed a data table, axes and configuration\n * of the layer.\n * Example :-\n * const textLayer = layerFactory.getLayer('text', [dataModel, axes, config]);\n * textLayer.render(container);\n * @class\n */\nexport default class TextLayer extends BaseLayer {\n /**\n * Returns the default configuration of the text layer\n * @return {Object} Default configuration of the text layer\n */\n static defaultConfig () {\n return defaultConfig;\n }\n\n static formalName () {\n return 'text';\n }\n\n elemType () {\n return 'text';\n }\n\n /**\n * Generates an array of objects containing x, y, width and height of the points from the data\n * @param {Array.} data Data Array\n * @param {Object} encoding Config\n * @param {Object} axes Axes object\n * @return {Array.} Array of points\n */\n translatePoints (data, encoding, axes) {\n let points = [];\n const colorAxis = axes.color;\n const textEncoding = encoding.text;\n const { field: textField, value, formatter: textFormatter } = textEncoding;\n const colorEncoding = encoding.color;\n const colorField = colorEncoding && colorEncoding.field;\n const fieldsConfig = this.data().getFieldsConfig();\n\n const backgroundEncoding = encoding.text.background;\n const backgroundPadding = backgroundEncoding.padding;\n const backgroundValue = backgroundEncoding.value;\n const colorFieldIndex = fieldsConfig[colorField] ? fieldsConfig[colorField].index : -1;\n const textFieldIndex = textField ? fieldsConfig[textField] && fieldsConfig[textField].index : -1;\n const xEnc = ENCODING.X;\n const yEnc = ENCODING.Y;\n for (let i = 0, len = data.length; i < len; i++) {\n const d = data[i];\n const row = d._data;\n const textValue = textField ? row[textFieldIndex] : value;\n\n const [xPx, yPx] = [xEnc, yEnc].map(type => (axes[type] ? axes[type].getScaleValue(d[type]) +\n axes[type].getUnitWidth() / 2 : 0));\n\n const { color, rawColor } = getLayerColor({ datum: d, index: i },\n { colorEncoding, colorAxis, colorFieldIndex });\n\n const point = {\n enter: {},\n update: {\n x: xPx,\n y: yPx\n },\n text: textFormatter ? textFormatter(textValue) : textValue,\n color,\n background: {\n value: backgroundValue instanceof Function ? backgroundValue(d, i, data, this) : null,\n padding: backgroundPadding\n },\n meta: {\n stateColor: {},\n originalColor: rawColor,\n colorTransform: {}\n },\n style: {},\n _data: row,\n _id: d._id,\n source: d._data,\n rowId: d._id\n };\n\n if (d.x !== null && d.y !== null) {\n points.push(point);\n }\n\n point.className = getIndividualClassName(d, i, data, this);\n }\n\n points = positionPoints(this, points);\n\n return points;\n }\n\n /**\n * Renders the plot in the given container\n * @param {SVGElement} container SVGElement which will hold the plot\n * @return {textLayer} Instance of text layer\n */\n render (container) {\n let points;\n const config = this.config();\n const encoding = config.encoding;\n const normalizedData = this._store.get(PROPS.NORMALIZED_DATA);\n const className = config.className;\n const qualifiedClassName = getQualifiedClassName(config.defClassName, this.id(), config.classPrefix);\n const axes = this.axes();\n const containerSelection = selectElement(container);\n\n containerSelection.classed(`${qualifiedClassName.join(' ')} ${className}`, true);\n createElements({\n data: normalizedData,\n append: 'g',\n selector: 'g',\n container,\n each: (dataArr, group, i) => {\n const node = group.node();\n points = this.translatePoints(dataArr, encoding, axes, i);\n setStyles(node, {\n 'text-anchor': TEXT_ANCHOR_MIDDLE\n });\n drawText(node, points, {\n className: qualifiedClassName[0]\n }, this._dependencies.smartLabel);\n }\n });\n return this;\n }\n}\n","/* global Element, document */\nimport {\n makeElement,\n selectElement,\n easeFns,\n objectIterator,\n getSymbol\n} from 'muze-utils';\n\n/**\n *\n *\n * @param {*} str\n * @returns\n */\nconst checkPath = (str) => {\n if (/^[mzlhvcsqta]\\s*[-+.0-9][^mlhvzcsqta]+/i.test(str) && /[\\dz]$/i.test(str) && str.length > 4) {\n return true;\n }\n return false;\n};\n\n/**\n *\n *\n * @param {*} d\n * @param {*} elem\n */\nconst createShape = function (d, elem) {\n const groupElement = selectElement(elem);\n const { shape, size, update } = d;\n\n if (shape instanceof Promise) {\n shape.then((res) => {\n d.shape = res;\n createShape(d, elem);\n });\n } else if (shape instanceof Element) {\n let newShape = shape.cloneNode(true);\n\n if (newShape.nodeName.toLowerCase() === 'img') {\n const src = newShape.src || newShape.href;\n newShape = document.createElementNS('http://www.w3.org/2000/svg', 'image');\n newShape.setAttribute('href', src);\n }\n const shapeElement = selectElement(newShape);\n if (newShape.nodeName === 'path' || newShape.nodeName === 'image') {\n shapeElement.attr('transform', `scale(${size / 100})`);\n } else {\n shapeElement.attr('height', size);\n shapeElement.attr('width', size);\n }\n shapeElement.attr('x', -size / 2);\n shapeElement.attr('y', -size / 2);\n selectElement(groupElement.node().appendChild(newShape));\n } else if (typeof shape === 'string') {\n let pathStr;\n if (checkPath(shape)) {\n pathStr = shape;\n } else {\n pathStr = getSymbol(shape).size(size)(update);\n }\n makeElement(groupElement, 'path', data => [data]).attr('d', pathStr);\n } else {\n d.shape = 'circle';\n createShape(d, elem);\n }\n};\n\n/**\n * Draws symbols using d3 symbol api\n * @param {Object} params Contains the svg container, points and other symbol related attributes.\n */\n/* istanbul ignore next */ const drawSymbols = (params) => {\n let mergedGroups;\n const { container, points, transition, className } = params;\n const { duration, effect, disabled } = transition;\n const mount = selectElement(container);\n\n mount.attr('class', className);\n const symbolGroups = mount.selectAll('g').data(points, params.keyFn);\n const symbolEnter = symbolGroups.enter().append('g').attr('transform', d => `translate(${d.enter.x},${d.enter.y})`);\n mergedGroups = symbolGroups.merge(symbolEnter)\n .each(function (d) {\n createShape(d, this);\n });\n mergedGroups = disabled ? mergedGroups : mergedGroups.transition().duration(disabled ? 0 : transition.duration);\n mergedGroups.attr('transform', d => `translate(${d.update.x},${d.update.y})`)\n .each(function (d) {\n const style = d.style;\n const element = selectElement(this);\n objectIterator(style, key => element.style(key, style[key]));\n element.attr('class', `${className}`);\n element.classed(d.className, true);\n });\n\n const exitGroups = symbolGroups.exit();\n if (!disabled) {\n exitGroups.transition().ease(easeFns[effect])\n .duration(duration)\n .on('end', function () {\n selectElement(this).remove();\n })\n .style('fill-opacity', 0)\n .style('stroke-opacity', 0);\n } else {\n exitGroups.remove();\n }\n};\n\nexport default drawSymbols;\n","import { CLASSPREFIX } from '../../enums/constants';\n\nexport const defaultConfig = {\n defClassName: 'layer-point',\n className: '',\n classPrefix: CLASSPREFIX,\n defColorStyle: 'stroke',\n interaction: {\n highlight: [{\n type: 'fill',\n intensity: [0, 0, -20, 0]\n }],\n fade: [{\n type: 'fill',\n intensity: [0, 0, +20, 0]\n }],\n focus: [{\n type: 'fill',\n intensity: [0, 0, +20, 0]\n }\n ]\n },\n innerPadding: 0.1,\n nearestPointThreshold: 10,\n transform: {\n type: 'identity'\n },\n transition: {\n effect: 'cubic',\n duration: 1000\n },\n encoding: {\n size: {\n value: 30\n },\n color: { },\n shape: {\n value: 'circle'\n },\n x: {},\n y: {},\n strokeOpacity: {\n value: 0.5\n },\n fillOpacity: {\n value: 0.5\n }\n },\n shapes: ['circle', 'cross', 'diamond', 'square', 'star', 'wye', 'triangle'],\n sizes: [20, 30, 40, 50, 60, 70]\n};\n","import {\n Voronoi,\n selectElement,\n getQualifiedClassName,\n makeElement,\n FieldType,\n Scales\n} from 'muze-utils';\nimport { BaseLayer } from '../../base-layer';\nimport drawSymbols from './renderer';\nimport { defaultConfig } from './default-config';\nimport { ENCODING } from '../../enums/constants';\nimport * as PROPS from '../../enums/props';\nimport {\n attachDataToVoronoi,\n getLayerColor,\n positionPoints,\n getPlotMeasurement,\n getIndividualClassName\n} from '../../helpers';\n\nimport './styles.scss';\n\n/**\n * Point Layer creates point. Itt needs to be passed a data table, axes and configuration\n * of the layer.\n * Example :-\n * const pointLayer = layerFactory.getLayer('point', [data, axes, config]);\n * pointLayer.render(container);\n * @class\n */\nexport default class PointLayer extends BaseLayer {\n\n /**\n * Creates an instance of PointLayer.\n * @param {*} args\n * @memberof PointLayer\n */\n constructor (...args) {\n super(...args);\n this._voronoi = new Voronoi();\n this._bandScale = Scales.band();\n }\n\n /**\n *\n *\n * @returns\n * @memberof PointLayer\n */\n elemType () {\n return 'g';\n }\n\n /**\n * Returns the default configuration of the point layer\n * @return {Object} Default configuration of the point layer\n */\n static defaultConfig () {\n return defaultConfig;\n }\n\n static defaultPolicy (conf, userConf) {\n const config = BaseLayer.defaultPolicy(conf, userConf);\n const encoding = config.encoding;\n const transform = config.transform;\n const colorField = encoding.color && encoding.color.field;\n\n if (colorField) {\n transform.groupBy = colorField;\n }\n return config;\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof PointLayer\n */\n static formalName () {\n return 'point';\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof PointLayer\n */\n static drawFn () {\n return drawSymbols;\n }\n\n /**\n * Generates an array of objects containing x, y, width and height of the points from the data\n * @param {Array.} data Data Array\n * @param {Object} encoding Config\n * @param {Object} axes Axes object\n * @return {Array.} Array of points\n */\n translatePoints (data, encoding, axes, config = {}) {\n let points = [];\n const {\n size: sizeEncoding,\n shape: shapeEncoding,\n color: colorEncoding,\n x,\n y\n } = encoding;\n const sizeField = sizeEncoding.field;\n const sizeValue = sizeEncoding.value;\n const shapeField = shapeEncoding.field;\n const xField = x.field;\n const yField = y.field;\n const { size: sizeAxis, shape: shapeAxis } = axes;\n const fieldsConfig = this.data().getFieldsConfig();\n const isXDim = fieldsConfig[xField] && fieldsConfig[xField].def.type === FieldType.DIMENSION;\n const isYDim = fieldsConfig[yField] && fieldsConfig[yField].def.type === FieldType.DIMENSION;\n const key = isXDim ? ENCODING.X : (isYDim ? ENCODING.Y : null);\n const colorField = colorEncoding && colorEncoding.field;\n const colorFieldIndex = fieldsConfig[colorField] && fieldsConfig[colorField].index;\n const measurement = this._store.get(PROPS.MEASUREMENT);\n const shapeFieldIndex = fieldsConfig[shapeField] && fieldsConfig[shapeField].index;\n const sizeFieldIndex = fieldsConfig[sizeField] && fieldsConfig[sizeField].index;\n const colorAxis = axes.color;\n const { x: offsetX, y: offsetY } = config.offset;\n\n for (let i = 0, len = data.length; i < len; i++) {\n const d = data[i];\n const row = d._data;\n const size = sizeValue instanceof Function ? sizeValue(d, i) : sizeAxis.getSize(row[sizeFieldIndex]);\n const shape = shapeAxis.getShape(row[shapeFieldIndex]);\n\n let [xPx, yPx] = [ENCODING.X, ENCODING.Y].map((type) => {\n const value = d[type] === null ? undefined : d[type];\n const measure = type === ENCODING.X ? measurement.width : measurement.height;\n return !encoding[type].field ? measure / 2 : axes[type].getScaleValue(value);\n });\n\n xPx += offsetX;\n yPx += offsetY;\n\n const { color, rawColor } = getLayerColor({ datum: d, index: i },\n { colorEncoding, colorAxis, colorFieldIndex });\n\n const style = {\n fill: color,\n stroke: color\n };\n\n if (!isNaN(xPx) && !isNaN(yPx)) {\n const point = {\n enter: {\n x: xPx,\n y: yPx\n },\n update: {\n x: xPx,\n y: yPx\n },\n shape,\n size: Math.abs(size),\n meta: {\n stateColor: {},\n originalColor: rawColor,\n colorTransform: {}\n },\n style,\n _data: row,\n _id: d._id,\n source: d._data,\n rowId: d._id\n };\n point.className = getIndividualClassName(d, i, data, this);\n points.push(point);\n this.cachePoint(d[key], point);\n }\n }\n points = positionPoints(this, points);\n return points;\n }\n\n /**\n * Renders the plot in the given container.\n *\n * @param {SVGElement} container SVGElement which will hold the plot\n * @return {BarLayer} Instance of bar layer\n */\n render (container) {\n let maxSize = 0;\n let seriesClassName;\n const config = this.config();\n const keys = this._store.get(PROPS.TRANSFORMED_DATA).map(d => d.key);\n const { transition, className, defClassName, classPrefix } = config;\n const normalizedData = this._store.get(PROPS.NORMALIZED_DATA);\n const containerSelection = selectElement(container);\n const qualifiedClassName = getQualifiedClassName(defClassName, this.id(), classPrefix);\n this._points = [];\n this._pointMap = {};\n\n containerSelection.classed(qualifiedClassName.join(' '), true).classed(className, true);\n\n this._points = this.generateDataPoints(normalizedData, keys);\n\n makeElement(container, 'g', this._points, null, {\n update: (group, points) => {\n maxSize = Math.max(maxSize, ...points.map(d => d.size));\n seriesClassName = `${qualifiedClassName[0]}`;\n this.constructor.drawFn()({\n container: group.node(),\n points,\n className: seriesClassName,\n transition,\n keyFn: d => d._id\n });\n }\n }, data => data[0]._id);\n this._maxSize = Math.sqrt(maxSize / Math.PI) * 2;\n attachDataToVoronoi(this._voronoi, this._points);\n return this;\n }\n\n generateDataPoints (normalizedData, keys) {\n const encoding = this.config().encoding;\n const axes = this.axes();\n const [widthMetrics, heightMetrics] = getPlotMeasurement(this, keys);\n const offsetXValues = widthMetrics.offsetValues || [];\n const offsetYValues = heightMetrics.offsetValues || [];\n return normalizedData.map((dataArr, i) => {\n const measurementConf = this.getMeasurementConfig(offsetXValues[i], offsetYValues[i], widthMetrics.span,\n heightMetrics.span);\n return this.translatePoints(dataArr, encoding, axes, measurementConf);\n }).filter(d => d.length);\n }\n\n getMeasurementConfig (offsetX, offsetY, widthSpan, heightSpan) {\n return {\n offset: {\n x: (offsetX || 0) + widthSpan / 2,\n y: (offsetY || 0) + heightSpan / 2\n },\n span: {\n x: widthSpan,\n y: heightSpan\n }\n };\n }\n\n /**\n * Gets the nearest point from a position.\n * @param {number} x x position\n * @param {number} y y position\n * @return {Object} Point details\n */\n getNearestPoint (x, y) {\n const distanceLimit = Math.max(this._maxSize, this.config().nearestPointThreshold);\n\n if (!this.data()) {\n return null;\n }\n\n const point = this._voronoi.find(x, y, distanceLimit);\n const dimensions = point && point.data.data.update;\n const radius = point ? Math.sqrt(point.data.data.size / Math.PI) : 0;\n\n if (point) {\n const { _data, _id } = point.data.data;\n const identifiers = this.getIdentifiersFromData(_data, _id);\n return {\n id: identifiers,\n dimensions: [{\n x: dimensions.x,\n y: dimensions.y,\n width: radius,\n height: radius\n }],\n layerId: this.id()\n };\n }\n return null;\n }\n}\n","import { makeElement, easeFns } from 'muze-utils';\n\n/**\n *\n *\n * @param {*} elem\n * @param {*} datum\n * @param {*} index\n * @param {*} context\n */\nconst transitionBars = (elem, datum, index, context) => {\n const { transition } = context;\n const { duration, disabled, effect } = transition;\n const selection = elem;\n const selTransition = disabled ? selection : selection.transition().duration(duration).ease(easeFns[effect]);\n const update = datum.update || datum;\n const updateStyle = datum.style || {};\n datum.className && selection.classed(datum.className, true);\n Object.entries(update).forEach(attr => (!isNaN(attr[1]) && selTransition.attr(attr[0], attr[1])));\n Object.entries(updateStyle).forEach(styleObj => selection.style(styleObj[0], styleObj[1]));\n};\n\n/**\n *\n *\n * @param {*} elem\n * @param {*} d\n */\nconst barEnterFn = (elem, d) => {\n const selection = elem;\n const enter = d.enter || {};\n Object.entries(enter).forEach(attr => (!isNaN(attr[1]) && selection.attr(attr[0], attr[1])));\n};\n\n/**\n * Draws rectangles by using d3 selection\n * @param {Object} params Contains container element and points\n * @return {Selection} Bar Selection\n */\n/* istanbul ignore next */ export const drawRects = (params) => {\n const { points, container, keyFn } = params;\n const updateFns = {\n enter (elem, d) { barEnterFn(elem, d); },\n update (elem, d, i) { transitionBars(elem, d, i, params); }\n };\n return makeElement(container, 'rect', points, null, updateFns, keyFn);\n};\n","import { CLASSPREFIX } from '../../enums/constants';\n\nexport const defaultConfig = {\n classPrefix: CLASSPREFIX,\n defClassName: 'layer-bar',\n className: '',\n interaction: {\n highlight: [{\n type: 'fill',\n intensity: [0, 0, -15, 0]\n }],\n fade: [{\n type: 'fill',\n intensity: [0, 0, +15, 0]\n }],\n focus: [{\n type: 'fill',\n intensity: [0, 0, +15, 0]\n }]\n },\n transform: {\n type: 'stack'\n },\n transition: {\n effect: 'cubic',\n duration: 1000\n },\n innerPadding: 0.1,\n encoding: {\n color: {},\n x: {},\n y: {},\n x0: {},\n y0: {}\n },\n states: {\n highlight: {\n className: `${CLASSPREFIX}-layer-bar-highlight`\n },\n fadeout: {\n className: `${CLASSPREFIX}-layer-bar-fadeout`\n },\n selected: {\n className: `${CLASSPREFIX}-layer-bar-selected`\n }\n }\n};\n\n","import { FieldType, DimensionSubtype } from 'muze-utils';\nimport * as PROPS from '../../enums/props';\nimport { STACK } from '../../enums/constants';\nimport { getLayerColor, positionPoints, getIndividualClassName } from '../../helpers';\n\n/**\n *\n *\n * @param {*} type\n * @param {*} fieldInfo\n * @param {*} config\n * @param {*} data\n * @returns\n */\nconst resolveDimByField = (type, axesInfo, config, data) => {\n const spaceType = type === 'x' ? 'width' : 'height';\n const [fieldType, axis] = [config[`${type}FieldType`], axesInfo[`${type}Axis`]];\n const {\n transformType,\n sizeEncoding,\n sizeConfig,\n measurement\n } = config;\n\n const sizeValue = sizeEncoding.value;\n let enter = 0;\n let pos;\n let space = 0;\n let enterSpace = 0;\n if (fieldType !== undefined) {\n if (config[`${type}0Field`]) {\n const minVal = data[type];\n const maxVal = data[`${type}0`];\n let min;\n let max;\n if (minVal === null || maxVal === null) {\n return {\n enterSpace: undefined,\n enter: undefined,\n pos: undefined,\n space: undefined\n };\n } else if (fieldType === FieldType.MEASURE || fieldType === DimensionSubtype.TEMPORAL) {\n min = Math.min(minVal, maxVal);\n max = Math.max(minVal, maxVal);\n } else {\n min = minVal;\n max = maxVal;\n }\n const scales = type === 'x' ? [min, max] : [max, min];\n pos = axis.getScaleValue(scales[0]) + axis.getUnitWidth() / 2;\n space = Math.abs(axis.getScaleValue(scales[1]) - pos) + axis.getUnitWidth() / 2;\n\n enter = pos;\n enterSpace = 0;\n } else if (fieldType === DimensionSubtype.CATEGORICAL || fieldType === DimensionSubtype.TEMPORAL) {\n pos = axis.getScaleValue(data[type]) +\n (sizeConfig[type === 'x' ? 'barWidthOffset' : 'barHeightOffset'] || 0);\n\n space = sizeConfig[type === 'x' ? 'barWidth' : 'barHeight'];\n if (sizeValue !== undefined) {\n const diffPx = sizeValue * space;\n space -= diffPx;\n pos += diffPx / 2;\n }\n enter = pos;\n enterSpace = space;\n } else {\n const zeroPos = axis.getScaleValue(0);\n const axisType = axis.getScaleValue(data[type]);\n const axisType0 = axis.getScaleValue(data[`${type}0`]);\n\n enterSpace = 0;\n if (type === 'x') {\n pos = data[type] < 0 || transformType === STACK ? axisType : zeroPos;\n space = Math.abs(pos - (transformType === STACK ? axisType0 : (data[type] >= 0 ? axisType : zeroPos)));\n } else {\n pos = transformType === STACK || data[type] >= 0 ? axisType : zeroPos;\n space = Math.abs(pos - (transformType === STACK ? axisType0 : (data[type] >= 0 ? zeroPos : axisType)));\n }\n enter = zeroPos;\n }\n } else {\n pos = 0;\n space = measurement[spaceType];\n }\n\n return {\n enterSpace,\n enter,\n pos,\n space\n };\n};\n\n/**\n *\n *\n * @param {*} data\n * @param {*} config\n * @param {*} axes\n * @returns\n */\nconst resolveDimensions = (data, config, axes) => {\n const axesInfo = {\n xAxis: axes.x,\n yAxis: axes.y\n };\n const {\n enterSpace: enterWidth,\n enter: enterX,\n pos: xPos,\n space: width\n } = resolveDimByField('x', axesInfo, config, data);\n\n const {\n enterSpace: enterHeight,\n enter: enterY,\n pos: yPos,\n space: height\n } = resolveDimByField('y', axesInfo, config, data);\n return {\n enter: {\n x: enterX,\n y: enterY,\n width: enterWidth,\n height: enterHeight\n },\n update: {\n x: xPos,\n y: yPos,\n width,\n height\n }\n };\n};\n\n/**\n * Generates an array of objects containing x, y, width and height of the bars from the data\n * @param {Array.} data Data Array\n * @param {Object} encoding Config\n * @param {Object} axes Axes object\n * @param {Object} conf config object for point generation\n * @return {Array.} Array of points\n */\nexport const getTranslatedPoints = (context, data, sizeConfig) => {\n let points = [];\n const encoding = context.config().encoding;\n const axes = context.axes();\n const colorAxis = axes.color;\n const fieldsConfig = context.data().getFieldsConfig();\n const colorEncoding = encoding.color;\n const colorField = colorEncoding.field;\n const sizeEncoding = encoding.size || {};\n const {\n x0Field,\n y0Field,\n xFieldSubType,\n yFieldSubType\n } = context.encodingFieldsInf();\n const measurement = context._store.get(PROPS.MEASUREMENT);\n const isXDim = xFieldSubType === DimensionSubtype.CATEGORICAL || xFieldSubType === DimensionSubtype.TEMPORAL;\n const isYDim = yFieldSubType === DimensionSubtype.CATEGORICAL || yFieldSubType === DimensionSubtype.TEMPORAL;\n const key = isXDim ? 'x' : (isYDim ? 'y' : null);\n const transformType = context.transformType();\n const colorFieldIndex = colorField && fieldsConfig[colorField] && fieldsConfig[colorField].index;\n\n for (let i = 0, len = data.length; i < len; i++) {\n const d = data[i];\n const style = {};\n const meta = {};\n const dimensions = resolveDimensions(d, {\n xFieldType: xFieldSubType,\n yFieldType: yFieldSubType,\n x0Field,\n y0Field,\n transformType,\n measurement,\n sizeConfig,\n sizeEncoding\n }, axes);\n\n const { color, rawColor } = getLayerColor({ datum: d, index: i },\n { colorEncoding, colorAxis, colorFieldIndex });\n\n style.fill = color;\n meta.stateColor = {};\n meta.originalColor = rawColor;\n meta.colorTransform = {};\n\n const update = dimensions.update;\n\n if (!isNaN(update.x) && !isNaN(update.y) && d._id !== undefined) {\n let point = null;\n point = {\n enter: dimensions.enter,\n update,\n style,\n _data: d._data,\n _id: d._id,\n source: d._data,\n rowId: d._id,\n meta\n };\n point.className = getIndividualClassName(d, i, data, context);\n points.push(point);\n // Store each point in a hashmap with key as the dimensional or temporal field value\n context.cachePoint(d[key], point);\n }\n }\n\n points = positionPoints(context, points);\n return points;\n};\n","import {\n getClosestIndexOf,\n getQualifiedClassName,\n selectElement,\n createElements,\n clipElement,\n DimensionSubtype,\n FieldType,\n Scales\n} from 'muze-utils';\nimport { BaseLayer } from '../../base-layer';\nimport { drawRects } from './renderer';\nimport { defaultConfig } from './default-config';\nimport * as PROPS from '../../enums/props';\nimport { getPlotMeasurement } from '../../helpers';\nimport './styles.scss';\nimport { getTranslatedPoints } from './bar-helper';\n\nconst MEASURE = FieldType.MEASURE;\nconst scaleBand = Scales.band;\n\n/**\n * Bar Layer creates a bar plot. It needs to be passed a data table, axes and configuration of the layer.\n *\n * @example\n * const BarLayer = layerFactory.getLayer('bar');\n * BarLayer.create()\n * .config(config)\n * .data(dt)\n * .mountPoint(container);\n * @class\n */\nexport default class BarLayer extends BaseLayer {\n /**\n * Creates an instance of bar layer\n */\n constructor (...params) {\n super(...params);\n this._bandScale = scaleBand();\n this._plotPadding = {\n x: 0,\n y: 0\n };\n this._plotSpan = {\n x: 0,\n y: 0\n };\n this._pointMap = {};\n }\n\n /**\n *\n *\n * @returns\n * @memberof BarLayer\n */\n elemType () {\n return 'rect';\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof BarLayer\n */\n static formalName () {\n return 'bar';\n }\n\n /**\n * Returns the default configuration of the bar layer\n * @return {Object} Default configuration of the bar layer\n */\n static defaultConfig () {\n return defaultConfig;\n }\n\n /**\n *\n *\n * @static\n * @param {*} conf\n * @param {*} userConf\n * @returns\n * @memberof BarLayer\n */\n static defaultPolicy (conf, userConf) {\n const config = BaseLayer.defaultPolicy(conf, userConf);\n const encoding = config.encoding;\n const colorField = encoding.color.field;\n const transform = config.transform;\n\n if (colorField) {\n transform.groupBy = colorField;\n }\n return config;\n }\n\n /**\n *\n *\n * @param {*} data\n * @param {*} fieldsConfig\n * @returns\n * @memberof BarLayer\n */\n calculateDomainFromData (data, encodingFieldInf, fieldsConfig) {\n const domain = super.calculateDomainFromData(data, encodingFieldInf, fieldsConfig);\n ['x', 'y'].forEach((d) => {\n if (encodingFieldInf[`${d}FieldType`] === MEASURE && domain[d]) {\n encodingFieldInf[`${d}0Field}`] ? domain[d] = domain[d].sort((a, b) => a - b) :\n (domain[d][0] = Math.min(domain[d][0], 0));\n }\n });\n return domain;\n }\n\n /**\n * Generates an array of objects containing x, y, width and height of the bars from the data\n * @param {Array.} data Data Array\n * @param {Object} encoding Config\n * @param {Object} axes Axes object\n * @param {Object} conf config object for point generation\n * @return {Array.} Array of points\n */\n translatePoints (data, sizeConfig) {\n return getTranslatedPoints(this, data, sizeConfig);\n }\n\n /**\n * Renders the plot in the given container\n * @param {SVGGroup} container SVGGroup where plot will be rendered.\n * @return {BarLayer} Instance of bar layer.\n */\n render (container) {\n const config = this.config();\n const transition = config.transition;\n const store = this._store;\n const normalizedDataArr = store.get(PROPS.NORMALIZED_DATA);\n const transformedData = store.get(PROPS.TRANSFORMED_DATA);\n const keys = transformedData.map(d => d.key);\n const fieldsConfig = this.data().getFieldsConfig();\n const axes = this.axes();\n const height = axes.y && axes.y.scale().range()[0];\n const width = axes.x && axes.x.scale().range()[1];\n const defClassName = config.defClassName;\n const qualifiedClassName = getQualifiedClassName(defClassName, this.id(), config.classPrefix);\n const className = config.className;\n const containerSelection = selectElement(container);\n const dimensions = Object.values(fieldsConfig).filter(e => e.def.type === FieldType.DIMENSION)\n .map(e => e.index);\n containerSelection.classed(qualifiedClassName.join(' '), true);\n containerSelection.classed(className, true);\n clipElement(container, {\n x: 0,\n y: 0,\n width,\n height\n }, `id-${this.id()}`);\n\n this._points = this.generateDataPoints(normalizedDataArr, keys);\n\n createElements({\n data: this._points,\n container,\n selector: 'g',\n append: 'g',\n each: (points, group, i) => {\n const seriesClassName = `${qualifiedClassName[0]}-${keys[i] || i}`.toLowerCase();\n group.style('display', 'block');\n drawRects({\n container: group.node(),\n points,\n className: seriesClassName,\n transition,\n style: {},\n keyFn: d => dimensions.map(key => d._data[key]).join('-')\n });\n }\n });\n return this;\n }\n\n /**\n *\n *\n * @param {*} normalizedData\n * @param {*} keys\n * @returns\n * @memberof BarLayer\n */\n generateDataPoints (normalizedData, keys) {\n const [barWidthMetrics, barHeightMetrics] = getPlotMeasurement(this, keys);\n const barWidthOffsets = barWidthMetrics.offsetValues || [];\n const barHeightOffsets = barHeightMetrics.offsetValues || [];\n this._plotSpan = {\n x: barWidthMetrics.groupSpan || 0,\n y: barHeightMetrics.groupSpan || 0\n };\n this._plotPadding = {\n x: barWidthMetrics.padding || 0,\n y: barHeightMetrics.padding || 0\n };\n\n this._pointMap = {};\n return normalizedData.map((data, i) => this.translatePoints(data,\n {\n barWidth: barWidthMetrics.span,\n barWidthOffset: barWidthOffsets[i] || 0,\n barHeight: barHeightMetrics.span,\n barHeightOffset: barHeightOffsets[i] || 0\n }));\n }\n\n getPlotPadding () {\n return this._plotPadding;\n }\n\n /**\n * Gets the nearest point of the position passed.\n * @param {number} x x position\n * @param {number} y y position\n * @return {Object} Nearest point.\n */\n getNearestPoint (x, y) {\n if (!this.data()) {\n return null;\n }\n let axis;\n let value;\n let index;\n let points;\n let uniqueFieldType;\n let uniqueFieldIndex;\n let filterData;\n let identifiers;\n let pointFound = null;\n const dataModel = this.data();\n const dataObj = dataModel.getData();\n const fieldsConfig = dataModel.getFieldsConfig();\n const axes = this.axes();\n const data = dataObj.data;\n const pointMap = this._pointMap;\n const {\n xField,\n yField,\n xFieldSubType,\n yFieldSubType\n } = this.encodingFieldsInf();\n\n if (xFieldSubType === FieldType.MEASURE) {\n axis = axes.y;\n value = axis.invert(y);\n uniqueFieldIndex = fieldsConfig[yField].index;\n uniqueFieldType = yFieldSubType;\n } else {\n axis = axes.x;\n value = axis.invert(x);\n uniqueFieldIndex = fieldsConfig[xField].index;\n uniqueFieldType = xFieldSubType;\n }\n\n if (uniqueFieldType === DimensionSubtype.CATEGORICAL) {\n points = pointMap[value];\n }\n\n if (uniqueFieldType === DimensionSubtype.TEMPORAL) {\n filterData = [...new Set(data.map(d => d[uniqueFieldIndex]))];\n index = getClosestIndexOf(filterData, value);\n value = filterData[index];\n points = pointMap[value];\n }\n const len = points && points.length;\n points && points.sort((p1, p2) => p1.update.y - p2.update.y);\n for (let i = 0; i < len; i++) {\n const point = points[i];\n const update = point.update;\n if (x >= update.x && x <= (update.width + update.x) && y >= update.y && y <= (update.height + update.y)) {\n pointFound = point;\n break;\n }\n pointFound = null;\n }\n\n const values = pointFound && pointFound._data;\n if (values) {\n identifiers = this.getIdentifiersFromData(values, pointFound._id);\n }\n return pointFound ? {\n dimensions: [pointFound.update],\n id: identifiers,\n layerId: this.id()\n } : pointFound;\n }\n\n getPlotSpan () {\n return this._plotSpan;\n }\n}\n","import { CLASSPREFIX } from '../../enums/constants';\n\nexport const defaultConfig = {\n defClassName: 'layer-tick',\n className: '',\n classPrefix: CLASSPREFIX,\n interaction: {\n highlight: [{\n type: 'stroke',\n intensity: [0, 0, -15, 0]\n }],\n fade: [{\n type: 'stroke',\n intensity: [0, 0, 15, 0]\n }],\n focus: [{\n type: 'stroke',\n intensity: [0, 0, 15, 0]\n }]\n },\n innerPadding: 0.1,\n transform: {\n type: 'identity'\n },\n transition: {\n effect: 'cubic',\n duration: 1000\n },\n encoding: {\n color: { },\n x: {},\n y: {},\n x0: {},\n y0: {},\n strokeOpacity: {\n value: 0.5\n },\n fillOpacity: {\n value: 0.5\n }\n },\n states: {\n highlight: {\n className: `${CLASSPREFIX}-layer-tick-highlight`\n },\n fadeout: {\n className: `${CLASSPREFIX}-layer-tick-fadeout`\n },\n selected: {\n className: `${CLASSPREFIX}-layer-tick-selected`\n }\n }\n};\n","import { selectElement } from 'muze-utils';\n\n/**\n * Draws ticks by using d3 selection\n * @param {Object} params Contains container element and points\n * @return {Selection} Ticks Selection\n */\nexport default /* istanbul ignore next */ (params) => {\n const { points, container, keyFn, className } = params;\n const mount = selectElement(container);\n const ticks = mount.selectAll('path').data(points, keyFn);\n const ticksEnter = ticks.enter().append('path');\n\n mount.attr('class', className || '');\n ticksEnter.each(function (d) {\n const selection = selectElement(this);\n const enter = d.enter || {};\n Object.entries(enter).forEach(attr => (!isNaN(attr[1]) && selection.attr(attr[0], attr[1])));\n });\n\n ticks.exit().remove();\n return ticks.merge(ticksEnter)\n .each(function (d) {\n const selection = selectElement(this);\n const update = d.update;\n const updateStyle = d.style || {};\n const x0 = update.x0 !== undefined ? update.x0 : update.x;\n const y0 = update.y0 !== undefined ? update.y0 : update.y;\n const path = `M ${update.x} ${update.y} L ${x0} ${y0}`;\n d.className && selection.classed(d.className, true);\n selection.attr('d', path);\n Object.entries(updateStyle).forEach(styleObj => selection.style(styleObj[0], styleObj[1]));\n });\n};\n\n","import { FieldType } from 'muze-utils';\nimport { PointLayer } from '../point';\nimport { defaultConfig } from './default-config';\nimport * as PROPS from '../../enums/props';\nimport { ENCODING } from '../../enums/constants';\nimport drawTicks from './renderer';\nimport './styles.scss';\nimport { getAxesScales, getLayerColor, positionPoints, getIndividualClassName } from '../../helpers';\n\nexport default class TickLayer extends PointLayer {\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof TickLayer\n */\n static defaultConfig () {\n return defaultConfig;\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof TickLayer\n */\n static formalName () {\n return 'tick';\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof TickLayer\n */\n static drawFn () {\n return drawTicks;\n }\n\n /**\n *\n *\n * @returns\n * @memberof TickLayer\n */\n elemType () {\n return 'path';\n }\n\n /**\n * Generates an array of objects containing x, y, width and height of the points from the data\n * @param {Array.} data Data Array\n * @param {Object} encoding Config\n * @param {Object} axes Axes object\n * @return {Array.} Array of points\n */\n translatePoints (data, encoding, axes, config = {}) {\n let points = [];\n const {\n xAxis,\n yAxis\n } = getAxesScales(axes);\n const fieldsConfig = this.data().getFieldsConfig();\n const {\n xField,\n yField,\n x0Field,\n y0Field,\n xFieldType,\n yFieldType\n } = this.encodingFieldsInf();\n const isXDim = xFieldType === FieldType.DIMENSION;\n const isYDim = yFieldType === FieldType.DIMENSION;\n const key = isXDim ? ENCODING.X : (isYDim ? ENCODING.Y : null);\n const colorEncoding = encoding.color;\n const colorField = colorEncoding && colorEncoding.field;\n const colorFieldIndex = fieldsConfig[colorField] && fieldsConfig[colorField].index;\n const measurement = this._store.get(PROPS.MEASUREMENT);\n const colorAxis = axes.color;\n const { x: offsetX, y: offsetY } = config.offset;\n const { x: xSpan, y: ySpan } = config.span;\n for (let i = 0, len = data.length; i < len; i++) {\n let xPx;\n let x0Px;\n let y0Px;\n let yPx;\n const d = data[i];\n const row = d._data;\n if (xField) {\n xPx = xAxis.getScaleValue(d.x) + offsetX;\n x0Px = xPx + xSpan;\n }\n\n if (yField) {\n yPx = yAxis.getScaleValue(d.y) + offsetY;\n y0Px = yPx !== null ? yPx + ySpan : null;\n }\n\n if (!xField) {\n xPx = 0;\n x0Px = measurement.width;\n if (!isNaN(yPx)) {\n yPx += ySpan / 2;\n y0Px = yPx;\n }\n }\n\n if (!yField) {\n yPx = 0;\n y0Px = measurement.height;\n x0Px = xPx += xSpan / 2;\n }\n\n if (x0Field) {\n x0Px = xAxis.getScaleValue(d.x0) + xSpan;\n yPx += ySpan / 2;\n y0Px -= ySpan / 2;\n }\n\n if (y0Field) {\n y0Px = yAxis.getScaleValue(d.y0) + ySpan;\n xPx += xSpan / 2;\n x0Px -= xSpan / 2;\n }\n const style = {};\n const meta = {};\n const { color, rawColor } = getLayerColor({ datum: d, index: i },\n { colorEncoding, colorAxis, colorFieldIndex });\n\n style.stroke = color;\n meta.stateColor = {};\n meta.originalColor = rawColor;\n meta.colorTransform = {};\n if (!isNaN(xPx) && !isNaN(yPx)) {\n const point = {\n enter: {},\n update: {\n x: xPx,\n y: yPx,\n x0: x0Px,\n y0: y0Px\n },\n style,\n _data: row,\n _id: d._id,\n source: row,\n rowId: d._id,\n meta\n };\n point.className = getIndividualClassName(d, i, data, this);\n points.push(point);\n this.cachePoint(d[key], point);\n }\n }\n points = positionPoints(this, points);\n return points;\n }\n\n getMeasurementConfig (offsetX, offsetY, widthSpan, heightSpan) {\n return {\n offset: {\n x: (offsetX || 0),\n y: (offsetY || 0)\n },\n span: {\n x: widthSpan,\n y: heightSpan\n }\n };\n }\n}\n","import { isSimpleObject, mergeRecursive, getObjProp } from 'muze-utils';\n\nconst parseLayerDefinition = (sink, definition, layerDef, layerType) => {\n for (const key in definition) {\n if (Object.hasOwnProperty.call(definition, key)) {\n let strs;\n let propValue;\n const def = definition[key];\n if (isSimpleObject(def)) {\n sink[key] = {};\n parseLayerDefinition(sink[key], def, layerDef, layerType);\n } else if (typeof def === 'string' && (strs = def.split('.')) && strs[0] === layerType) {\n propValue = getObjProp(layerDef, ...strs.slice(1, strs.length));\n if (propValue !== undefined) {\n sink[key] = propValue;\n }\n } else {\n sink[key] = def;\n }\n }\n }\n};\n\nconst sanitizeEncoding = (encoding) => {\n // Create object for each encoding value if encoding value is a string\n for (const key in encoding) {\n if (typeof encoding[key] === 'string') {\n encoding[key] = {\n field: encoding[key]\n };\n }\n }\n};\n\n/**\n * Layer Factory creates layers based on the layer type. All types of layers needs to register in\n * the layer factory. For getting a layer instance, getLayer method needs to invoked with the\n * layerType and other arguments.\n */\nconst layerFactory = (() => {\n const compositeLayers = {};\n const factoryObj = {\n setLayerRegistry: (reg) => {\n factoryObj._layerRegistry = reg;\n },\n getSerializedConf: (mark, layerDef) => {\n let serializedDefs;\n const defs = compositeLayers[mark];\n const newConf = mergeRecursive({}, layerDef);\n\n // If it is a composite layer then resolve all the definitions of each unit layer\n if (defs) {\n serializedDefs = defs.map((unitLayerDef) => {\n const sDef = {};\n parseLayerDefinition(sDef, unitLayerDef, newConf, mark);\n sanitizeEncoding(sDef.encoding);\n return sDef;\n });\n } else {\n const encoding = newConf.encoding;\n // Create object for each encoding value if encoding value is a string\n sanitizeEncoding(encoding);\n serializedDefs = newConf;\n }\n\n return serializedDefs;\n },\n getLayerInstance: (layerDef) => {\n const layerRegistry = factoryObj._layerRegistry;\n layerDef = !(layerDef instanceof Array) ? [layerDef] : layerDef;\n const instances = layerDef.map((layerObj) => {\n const layerConstructor = layerRegistry[layerObj.mark];\n return layerConstructor.create();\n });\n return instances.length === 1 ? instances[0] : instances;\n },\n composeLayers: (layerType, layerDefs) => {\n compositeLayers[layerType] = layerDefs;\n },\n sanitizeLayerConfig: (layerDef) => {\n const newConf = mergeRecursive({}, layerDef);\n sanitizeEncoding(newConf.encoding);\n return newConf;\n }\n };\n return factoryObj;\n})();\n\nexport default layerFactory;\n","import { AreaLayer } from './layers/area';\nimport { ArcLayer } from './layers/arc';\nimport { LineLayer } from './layers/line';\nimport { TextLayer } from './layers/text';\nimport { PointLayer } from './layers/point';\nimport { BarLayer } from './layers/bar';\nimport { BaseLayer } from './base-layer';\nimport * as CONSTANTS from './enums/constants';\nimport { TickLayer } from './layers/tick';\n\nexport const DEFAULT_LAYERS = {\n [CONSTANTS.AREA_LAYER]: AreaLayer,\n [CONSTANTS.ARC_LAYER]: ArcLayer,\n [CONSTANTS.LINE_LAYER]: LineLayer,\n [CONSTANTS.TEXT_LAYER]: TextLayer,\n [CONSTANTS.POINT_LAYER]: PointLayer,\n [CONSTANTS.TICK_LAYER]: TickLayer,\n [CONSTANTS.BAR_LAYER]: BarLayer,\n [CONSTANTS.BASE_LAYER]: BaseLayer\n};\n","/**\n * This file exports constants that are used as enums in the\n * crosstab group implementation.\n */\n/**\n * Width of the crosstab.\n */\nexport const X = 'x';\n/**\n * Width of the crosstab.\n */\nexport const Y = 'y';\n/**\n * Width of the crosstab.\n */\nexport const WIDTH = 'width';\n\n/**\n * Height of the crosstab.\n */\nexport const HEIGHT = 'height';\n\n/**\n * Field referring to object storing measurement configuration.\n */\nexport const MEASUREMENT = 'measurement';\n\n/**\n * Field referring to object storing configuration properties.\n */\nexport const CONFIG = 'config';\n\n/**\n * Width of visual unit in crosstab.\n */\nexport const MIN_UNIT_WIDTH = 'minUnitWidth';\n\n/**\n * Height of visual unit.\n */\nexport const MIN_UNIT_HEIGHT = 'minUnitHeight';\n\n/**\n * Field to store the array of dimensions to facet by.\n */\nexport const DIMENSIONS = 'dimensions';\n\n/**\n * Field to store array of measures to use as x axis.\n */\nexport const MEASURES = 'measures';\n\n/**\n * Field to store the array of dimensions to facet by.\n */\nexport const DIMENSION = 'dimension';\n\n/**\n * Field to store array of measures to use as x axis.\n */\nexport const MEASURE = 'measure';\n\n/**\n * Flag to specify if model should be pivoted.\n */\nexport const PIVOT = 'pivot';\n\n/**\n * Flag to specify format\n */\nexport const FORMAT = 'format';\n\n/**\n * Mount point where the variable will be hosted\n */\nexport const MOUNT = 'mount';\n\n/**\n * Data update flag\n */\nexport const HAS_DATA_UPDATED = 'hasDataUpdated';\n\n/**\n * Field referring to object storing set of rows\n */\nexport const ROWS = 'rows';\n\n/**\n * Field referring to object storing set of columns\n */\nexport const COLUMNS = 'columns';\n\n/**\n * Field referring to object storing set of columns\n */\nexport const COL = 'col';\n\n/**\n * Field referring to object storing set of rows\n */\nexport const ROW = 'row';\n\n/**\n * Field referring to object storing set of columns\n */\nexport const COLUMN = 'column';\n\n/**\n * Field referring to object storing color field\n */\nexport const COLOR = 'color';\n\n/**\n * Field referring to object storing shape field\n */\nexport const SHAPE = 'shape';\n\n/**\n * Field referring to object storing size field\n */\nexport const SIZE = 'size';\n\n/**\n * Field referring to object storing detail field\n */\nexport const DETAIL = 'detail';\n\n/**\n * Field referring to object storing set of layers\n */\nexport const LAYERS = 'layers';\n\n/**\n * Field referring to object storing the transforms\n */\nexport const TRANSFORM = 'transform';\n\n/**\n * Field referring to object storing the transforms\n */\nexport const ORDINAL = 'ordinal';\n\n/**\n * Field referring to object storing the transforms\n */\nexport const LINEAR = 'linear';\n/**\n * Field referring to object storing the transforms\n */\nexport const LEFT = 'left';\n/**\n * Field referring to object storing the transforms\n */\nexport const RIGHT = 'right';\n/**\n * Field referring to object storing the transforms\n */\nexport const TOP = 'top';\n/**\n * Field referring to object storing the transforms\n */\nexport const BOTTOM = 'bottom';\n\n/**\n * Field referring to object storing the transforms\n */\nexport const RETINAL = 'retinal';\n/**\n * Field referring to object storing the transforms\n */\nexport const CELL = 'cell';\n/**\n * Field referring to object storing the transforms\n */\nexport const X_AXES = 'xAxes';\n/**\n * Field referring to object storing the transforms\n */\nexport const Y_AXES = 'yAxes';\n/**\n * Field referring to object storing the transforms\n */\nexport const ENTRY_CELLS = 'entryCell';\n/**\n * Field referring to object storing the transforms\n */\nexport const INITIALIZED = 'initialized';\n/**\n * Field referring to object storing the transforms\n */\nexport const EXIT_CELLS = 'exitCell';\n/**\n * Field referring to object storing the transforms\n */\nexport const AXIS = 'axis';\n/**\n * Field referring to object storing the transforms\n */\nexport const UNIT = 'unit';\n/**\n * Field referring to object storing the transforms\n */\nexport const UPDATED = 'updated';\n/**\n * Field referring to object storing the transforms\n */\nexport const BEFORE_UPDATE = 'beforeupdate';\n/**\n * Field referring to object storing the transforms\n */\nexport const VALUE_MATRIX = 'valueMatrix';\n/**\n * Field referring to object storing the transforms\n */\nexport const FACET_HEADERS = 'facet-headers';\n/**\n * Field referring to object storing the transforms\n */\nexport const RADIUS = 'radius';\n/**\n * Field referring to object storing the transforms\n */\nexport const ANGLE = 'angle';\n/**\n * Field referring to object storing the transforms\n */\nexport const ARC = 'arc';\n/**\n * Field referring to object storing the transforms\n */\nexport const CARTESIAN = 'cartesian';\n/**\n * Field referring to object storing the transforms\n */\nexport const POLAR = 'polar';\n/**\n * Field referring to object storing the transforms\n */\nexport const CATEGORICAL = 'categorical';\n/**\n * Field referring to object storing the transforms\n */\nexport const TEMPORAL = 'temporal';\n/**\n * Field referring to object storing the transforms\n */\nexport const BAR = 'bar';\n/**\n * Field referring to object storing the transforms\n */\nexport const LINE = 'line';\n/**\n * Field referring to object storing the transforms\n */\nexport const POINT = 'point';\n/**\n * Field referring to object storing the transforms\n */\nexport const PRIMARY = 'Primary';\n/**\n * Field referring to object storing the transforms\n */\nexport const SECONDARY = 'Secondary';\n/**\n * Field referring to object storing the transforms\n */\nexport const BOTH = 'both';\n/**\n * Field referring to object storing the transforms\n */\nexport const INTERACTION = 'interaction';\n/**\n * Field referring to object storing the transforms\n */\nexport const GRID_LINES = 'gridLines';\n/**\n * Field referring to object storing the transforms\n */\nexport const GRID_BANDS = 'gridBands';\n/**\n * Field referring to object storing the transforms\n */\nexport const HEADER = 'header';\n/**\n * Field referring to object storing the transforms\n */\nexport const FACET = 'facet';\n\n","import { ROWS, COLUMNS, COLOR, SHAPE, SIZE, DETAIL, LAYERS, TRANSFORM, CONFIG } from '../enums/constants';\n\n/**\n * @module\n * This is the local options semantics based on which setters getters are created and reactivity is initiated.\n * This local object is only valid for Artboard.\n * Artboard merges global and local object both to the model\n *\n * Format\n * PROPERTRY_NAME: {\n * value: // default value of the property,\n * meta: {\n * typeCheck: // The setter value will be checked using this. If the value is function then the setter value\n * // is passed as args.\n * typeExpected: // The output of typecheck action will be tested against this. Truthy value will set the\n * // value to the setter\n * sanitizaiton: // Need for sanitization before type is checked\n * }\n * }\n */\n\nexport default {\n [CONFIG]: {},\n [ROWS]: [],\n [COLUMNS]: [],\n [COLOR]: '',\n [SHAPE]: '',\n [SIZE]: '',\n [DETAIL]: '',\n [LAYERS]: '',\n [TRANSFORM]: []\n};\n","import { ERROR_MSG } from 'muze-utils';\n\n/**\n * Interfaces for VisualGroup. Any new VisualGroup has to implement this class.\n * @class SimpleGroup\n */\nclass SimpleGroup {\n\n /**\n * This method is used to set or get the DataModel instance.\n *\n * @param {DataModel | undefined} dataModel Instance of datamodel.\n\n * @memberof SimpleGroup\n */\n data () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * This method is used to set or get the group specific configuration\n * properties\n *\n * @param {Object | undefined} configObj The input configuration.\n * or instance of visual group.\n * @memberof SimpleGroup\n */\n config () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * This method is used to return a serialized representation of the\n * instance's properties.\n *\n * @memberof SimpleGroup\n */\n serialize () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * This method is used to get or set the measurement object which houses\n * layout properties like width and height.\n *\n * @param {Object | undefined} mObj The measurement properties.\n * @memberof SimpleGroup\n */\n measurement () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n}\n\nexport default SimpleGroup;\n","import { ERROR_MSG } from 'muze-utils';\n\n/**\n *\n *\n * @export\n * @class Variable\n */\nexport default class Variable {\n\n /**\n *\n *\n * @memberof Variable\n */\n type () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n *\n *\n * @memberof Variable\n */\n toString () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n}\n","import Variable from './variable';\n\n/**\n *\n *\n * @class ComposeVars\n * @extends {Variable}\n */\nclass ComposedVars extends Variable {\n\n /**\n *Creates an instance of ComposeVars.\n * @param {*} texts\n * @memberof ComposeVars\n */\n constructor (...texts) {\n super(...texts);\n this.vars(texts);\n }\n\n /**\n *\n *\n * @param {*} params\n * @returns\n * @memberof ComposeVars\n */\n vars (...params) {\n if (params.length) {\n this._vars = params[0];\n return this;\n }\n return this._vars;\n }\n\n /**\n *\n *\n * @param {*} dm\n * @returns\n * @memberof ComposeVars\n */\n data (...dm) {\n if (dm.length) {\n this.vars().forEach(d => d.data(dm[0]));\n return this;\n }\n return this._data;\n }\n\n /**\n *\n *\n * @returns\n * @memberof ComposeVars\n */\n getMembers () {\n const vars = this.vars();\n return vars.map(member => member.getMembers()[0]);\n }\n\n /**\n *\n *\n * @returns\n * @memberof ComposeVars\n */\n type () {\n return this.vars()[0].type();\n }\n\n /**\n *\n *\n * @returns\n * @memberof ComposeVars\n */\n toString () {\n return this.vars().map(d => d.toString()).join(',');\n }\n\n /**\n *\n *\n * @returns\n * @memberof ComposeVars\n */\n numberFormat () {\n return this.vars()[0].numberFormat();\n }\n\n /**\n *\n *\n * @returns\n * @memberof ComposeVars\n */\n format (values) {\n return this.vars()[0].format(values);\n }\n\n /**\n *\n *\n * @returns\n * @memberof ComposedVars\n */\n subtype () {\n return this.vars()[0].subtype();\n }\n\n /**\n *\n *\n * @returns\n * @memberof ComposedVars\n */\n getMinDiff () {\n return this.vars()[0].getMinDiff();\n }\n}\n\nexport default ComposedVars;\n","import { DateTimeFormatter } from 'muze-utils';\nimport Variable from './variable';\n\n/**\n *\n *\n * @export\n * @class Vars\n * @extends {Variable}\n */\nexport default class SimpleVariable extends Variable {\n\n /**\n *Creates an instance of Vars.\n * @param {*} text\n * @memberof Vars\n */\n constructor (text) {\n super();\n this.oneVar(text);\n }\n\n /**\n *\n *\n * @param {*} params\n * @returns\n * @memberof Vars\n */\n oneVar (...oneV) {\n if (oneV.length) {\n this._oneVar = oneV[0];\n return this;\n }\n return this._oneVar;\n }\n\n /**\n *\n *\n * @param {*} dm\n * @returns\n * @memberof Vars\n */\n data (...dm) {\n if (dm.length) {\n this._data = dm[0];\n return this;\n }\n return this._data;\n }\n\n /**\n *\n *\n * @returns\n * @memberof Vars\n */\n toString () {\n return this.oneVar();\n }\n\n /**\n *\n *\n * @memberof SimpleVariable\n */\n numberFormat () {\n if (this.type() === 'measure') {\n const formatter = this.data().getFieldspace().getMeasure()[this.oneVar()]._ref;\n return formatter.numberFormat();\n } return val => val;\n }\n\n /**\n *\n *\n * @memberof SimpleVariable\n */\n format (values) {\n if (values && this.subtype() === 'temporal') {\n const formatter = this.data().getFieldspace().getDimension()[this.oneVar()]._ref.schema.format;\n const dtFormat = new DateTimeFormatter(formatter);\n values = values.map(e => dtFormat.getNativeDate(e));\n }\n return values;\n }\n\n /**\n *\n *\n * @returns\n * @memberof Vars\n */\n getMembers () {\n return [this.oneVar()];\n }\n\n /**\n *\n *\n * @returns\n * @memberof Vars\n */\n type () {\n const fieldDef = this.data().getFieldsConfig()[this.oneVar()].def;\n return fieldDef.type;\n }\n\n /**\n *\n *\n * @returns\n * @memberof Vars\n */\n subtype () {\n const fieldDef = this.data().getFieldsConfig()[this.oneVar()].def;\n return fieldDef.subtype || fieldDef.type;\n }\n\n /**\n *\n *\n * @returns\n * @memberof SimpleVariable\n */\n getMinDiff () {\n const fieldSpace = this.data().getFieldspace();\n return fieldSpace.fieldsObj()[this.oneVar()].getMinDiff();\n }\n\n equals (varInst) {\n return this.oneVar() === varInst.oneVar();\n }\n}\n","import { ComposedVars, SimpleVariable } from '../variable';\nimport { DIMENSION, COLUMNS, ROWS, TEMPORAL } from '../enums/constants';\n\n/**\n * Gets the list of fields in a sorted order by measurement and dimension\n *\n * @param {Array} fieldList List of fields in the view\n * @param {Object} fieldMap Mapping of fields in the datamodel\n * @return {Array} fields sorted by measurement and dimensions\n */\nconst orderFields = (fieldArray, type) => {\n const dimensionArr = [[], []];\n const measureArr = [[], []];\n const temporalArr = [[], []];\n const categoricalArr = [[], []];\n\n fieldArray.forEach((fieldList, index) => {\n fieldList.forEach((field) => {\n if (field.type() === DIMENSION) {\n dimensionArr[index].push(field);\n field.subtype() === TEMPORAL ? temporalArr[index].push(field) : categoricalArr[index].push(field);\n } else {\n measureArr[index].push(field);\n }\n });\n });\n\n const numOfMeasures = measureArr[0].length + (measureArr[1] ? measureArr[1].length : 0);\n\n // Single array of fields\n if (!fieldArray[1]) {\n // Push measures to bottom\n measureArr[1] = type === COLUMNS ? measureArr[0] : [];\n // Push measures to left\n measureArr[0] = type !== COLUMNS ? measureArr[0] : [];\n // Bottom and right dimensions empty\n dimensionArr[1] = [];\n // Left and top filled with dimensions\n dimensionArr[0] = dimensionArr[0];\n if (numOfMeasures === 0) {\n const allDimensions = [...dimensionArr[0], ...dimensionArr[1]];\n if (type === COLUMNS) {\n dimensionArr[1] = allDimensions[allDimensions.length - 1] ? [allDimensions[allDimensions.length - 1]]\n : [];\n allDimensions.splice(-1, 1);\n } else {\n dimensionArr[1] = [];\n }\n dimensionArr[0] = [...allDimensions];\n }\n }\n\n if (dimensionArr[0].length && dimensionArr[1].length && numOfMeasures > 0) {\n dimensionArr[0] = [...dimensionArr[0], ...dimensionArr[1]];\n dimensionArr[1] = [];\n }\n return {\n fields: dimensionArr.map((list, i) => (i === 1 ?\n measureArr[i].concat(dimensionArr[i]) : dimensionArr[i].concat(measureArr[i]))),\n dimensions: [...dimensionArr[0], ...dimensionArr[1]],\n measures: [...measureArr[0], ...measureArr[1]],\n temporal: [...temporalArr[0], ...temporalArr[1]],\n categorical: [...categoricalArr[0], ...categoricalArr[1]]\n };\n};\n\n/**\n * Gets the list of normalized fields\n *\n * @param {Array} fields List of fields in the view\n * @param {Object} fieldMap Mapping of fields in the datamodel\n * @return {Array} fields normalized by measurement and dimensions\n */\nconst normalizeFields = (config, type) => {\n const fieldsArr = [];\n const fields = config[type];\n\n if (!(fields[0] instanceof Array)) {\n fieldsArr[0] = fields;\n } else {\n fieldsArr[0] = fields[0] || [];\n fieldsArr[1] = fields[1] || [];\n }\n return fieldsArr;\n};\n\n/**\n *\n *\n * @param {*} fields\n * @param {*} datamodel\n * @return\n */\nconst convertToVar = (datamodel, fields) => {\n const vars = [];\n\n fields && fields.forEach((field) => {\n if (field instanceof ComposedVars) {\n vars.push(field);\n field.data(datamodel);\n } else {\n vars.push(new SimpleVariable(field).data(datamodel));\n }\n });\n return vars;\n};\n\n/**\n *\n *\n * @param {*} rows\n * @param {*} columns\n * @param {*} datamodel\n * @return\n */\nexport const transformFields = (datamodel, config) => {\n const [rowsInfo, columnsInfo] = [ROWS, COLUMNS].map((fields) => {\n const normalizedFields = normalizeFields(config, fields);\n const norFields = [convertToVar(datamodel, normalizedFields[0])];\n\n if (normalizedFields[1]) {\n norFields[1] = convertToVar(datamodel, normalizedFields[1]);\n }\n return orderFields(norFields, fields);\n });\n const {\n fields: rows,\n dimensions: rowDimensions,\n measures: rowMeasures,\n temporal: rowTemporalFields,\n categorical: rowCategoricalFields\n } = rowsInfo;\n const {\n fields: columns,\n dimensions: columnDimensions,\n measures: columnMeasures,\n temporal: columnTemporalFields,\n categorical: columnCategoricalFields\n } = columnsInfo;\n return {\n rows,\n rowDimensions,\n rowMeasures,\n rowTemporalFields,\n rowCategoricalFields,\n columns,\n columnTemporalFields,\n columnCategoricalFields,\n columnDimensions,\n columnMeasures\n };\n};\n","import { ERROR_MSG, mergeRecursive } from 'muze-utils';\nimport { transformFields } from './field-sanitizer';\nimport { getHeaderAxisFrom } from '../group-helper/group-utils';\nimport { ROW, COLUMN } from '../enums/constants';\n\n/**\n *\n *\n * @export\n * @class VisualEncoder\n */\nexport default class VisualEncoder {\n\n /**\n *\n *\n * @memberof VisualEncoder\n */\n createAxis () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n *\n *\n * @memberof VisualEncoder\n */\n setCommonDomain () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n *\n *\n * @memberof VisualEncoder\n */\n getLayerConfig () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n fieldInfo (...info) {\n if (info.length) {\n this._fieldInfo = mergeRecursive(this._fieldInfo || {}, info[0]);\n return this;\n }\n return this._fieldInfo;\n }\n\n /**\n *\n *\n * @param {*} datamodel\n * @param {*} config\n * @return\n * @memberof VisualEncoder\n */\n fieldSanitizer (datamodel, config) {\n this.fieldInfo(transformFields(datamodel, config));\n return this.fieldInfo();\n }\n\n /**\n *\n *\n * @param {*} params\n * @return\n * @memberof VisualEncoder\n */\n axisFrom (...params) {\n if (params.length) {\n this._axisFrom = params[0];\n return this;\n }\n return this._axisFrom;\n }\n\n /**\n *\n *\n * @param {*} params\n * @return\n * @memberof VisualEncoder\n */\n headerFrom (...params) {\n if (params.length) {\n this._headerFrom = params[0];\n return this;\n }\n return this.__headerFrom;\n }\n\n /**\n *\n *\n * @param {*} axisFrom\n * @return\n * @memberof CartesianEncoder\n */\n setAxisAndHeaders (axisFrom = {}, fields) {\n const [rowHeader, rowAxis] = getHeaderAxisFrom(ROW, fields.rows, axisFrom);\n const [colHeader, colAxis] = getHeaderAxisFrom(COLUMN, fields.columns, axisFrom);\n\n this.axisFrom({\n row: rowAxis,\n column: colAxis\n });\n this.headerFrom({\n row: rowHeader,\n column: colHeader\n });\n return this;\n }\n}\n","import { ContinousAxis, BandAxis, TimeAxis, ColorAxis, SizeAxis, ShapeAxis } from '@chartshq/muze-axis';\n\nexport const scaleMaps = {\n linear: ContinousAxis,\n band: BandAxis,\n temporal: TimeAxis,\n size: SizeAxis,\n color: ColorAxis,\n shape: ShapeAxis\n};\n","import { ScaleType } from '@chartshq/muze-axis';\n\n/**\n * Map of DataModel types to associated field types.\n */\nexport const dataTypeScaleMap = {\n dimension: ScaleType.BAND,\n categorical: ScaleType.BAND,\n measure: ScaleType.LINEAR,\n temporal: ScaleType.TIME\n};\n\n","import { mergeRecursive } from 'muze-utils';\nimport { AxisOrientation } from '@chartshq/muze-axis';\nimport { scaleMaps } from '../enums/scale-maps';\nimport { getAxisType, getAxisKey } from '../group-helper';\nimport { dataTypeScaleMap } from '../data-type-scale-map';\nimport { CATEGORICAL, TEMPORAL, BAR, LINE, POINT, BOTH, Y } from '../enums/constants';\n\n/**\n *\n *\n * @param {*} axisInfo\n * @param {*} field\n * @param {*} axesCreators\n * @return\n */\nconst getAxisConfig = (axisInfo, field, axesCreators) => {\n let axisOrientation;\n const { index, axisIndex, axisType } = axisInfo;\n const { config, position } = axesCreators;\n const userAxisConfig = config.axes ? (config.axes[axisType] || {}) : {};\n const {\n LEFT,\n RIGHT,\n TOP,\n BOTTOM\n } = AxisOrientation;\n const allOrientations = axisType === Y ? [LEFT, RIGHT] : [TOP, BOTTOM];\n\n if (position === BOTH) {\n axisOrientation = allOrientations[axisIndex];\n } else {\n axisOrientation = position;\n }\n const axisConfig = {\n id: `${axisType}-${index}-${axisIndex}`,\n name: field.toString(),\n field: field.toString(),\n labels: { rotation: 0 },\n numberFormat: field.numberFormat(),\n orientation: axisOrientation,\n type: dataTypeScaleMap[field.subtype()]\n };\n userAxisConfig.tickValues = field.format(userAxisConfig.tickValues);\n userAxisConfig.domain = field.format(userAxisConfig.domain);\n\n return mergeRecursive(axisConfig, userAxisConfig);\n};\n\n/**\n *\n *\n * @param {*} axisInfo\n * @param {*} field\n * @param {*} axesCreators\n * @return\n */\nconst createSimpleAxis = (axisConfig, field, axesCreators) => {\n const { labelManager } = axesCreators;\n const Cls = scaleMaps[dataTypeScaleMap[field.subtype()]];\n const simpleAxis = new Cls(axisConfig, { labelManager });\n return simpleAxis;\n};\n\n/**\n *\n *\n * @param {*} axisType\n * @param {*} fieldInfo\n * @param {*} axesCreators\n * @param {*} groupAxes\n * @return\n */\nexport const generateAxisFromMap = (axisType, fieldInfo, axesCreators, groupAxes) => {\n let axisKey;\n const currentAxes = [];\n const { fields, index } = fieldInfo;\n const { cacheMaps } = axesCreators;\n const map = cacheMaps[`${axisType}AxesMap`];\n\n fields.forEach((field, axisIndex) => {\n axisKey = getAxisKey(axisType, index, dataTypeScaleMap[field.subtype()]);\n const axisConfig = getAxisConfig({ index, axisIndex, axisType }, field, axesCreators);\n\n if (!map.has(axisKey)) {\n const xAxis = createSimpleAxis(axisConfig, field, axesCreators);\n currentAxes.push(xAxis);\n } else {\n const axes = map.get(axisKey);\n axes[axisIndex] = axes[axisIndex] ? axes[axisIndex] : createSimpleAxis(axisConfig, field, axesCreators);\n axes[axisIndex]._rotationLock = false;\n axes[axisIndex] && axes[axisIndex].config(axisConfig).domain(axisConfig.domain || []);\n }\n });\n\n if (currentAxes.length) {\n map.set(axisKey, currentAxes);\n }\n\n for (const [key] of map.entries()) {\n if (key === axisKey) {\n groupAxes.add(axisKey);\n }\n }\n return map.get(axisKey);\n};\n\n/**\n *\n *\n * @memberof MatrixResolver\n */\nexport const mutateAxesFromMap = (cacheMaps, axes) => {\n const {\n xAxesMap,\n yAxesMap\n } = cacheMaps;\n const {\n x: xAxisSet,\n y: yAxisSet\n } = axes;\n const xAxes = [];\n const yAxes = [];\n\n xAxisSet.forEach((axisId) => {\n const xAxis = xAxesMap.get(axisId);\n xAxes.push(xAxis);\n });\n yAxisSet.forEach((axisId) => {\n const yAxis = yAxesMap.get(axisId);\n yAxes.push(yAxis);\n });\n return {\n xAxes, yAxes\n };\n};\n\n/**\n * return a default mark based on predefined set of rules of type and subtype of the fields\n *\n * @param {string} colFieldType dimension/measure - temporal/ordinal/nominal\n * @param {string} rowFieldType dimension/measure - temporal/ordinal/nominal\n * @return {Object} return mark type\n */\nexport const getDefaultMark = (colFieldType, rowFieldType) => {\n let mark;\n\n if (colFieldType === CATEGORICAL || rowFieldType === CATEGORICAL) {\n mark = BAR;\n } else if (colFieldType === TEMPORAL || rowFieldType === TEMPORAL) {\n mark = LINE;\n } else {\n mark = POINT;\n }\n\n return mark;\n};\n\n/**\n *\n *\n * @param {*} axesCreators\n * @param {*} [fieldInfo=[]]\n * @return\n */\nexport const createRetinalAxis = (axesCreators, fieldProps = {}) => {\n const { axisType, fieldsConfig } = axesCreators;\n const field = fieldProps.field;\n const axis = [];\n const Cls = scaleMaps[axisType];\n\n fieldProps.type = fieldProps.type ? fieldProps.type : getAxisType(fieldsConfig, field || null);\n axis.push(new Cls(fieldProps));\n return axis;\n};\n\n/**\n *\n *\n * @param {*} arr\n * @param {*} val\n * @return\n */\nexport const getIndex = (arr, val) => {\n let i = 0;\n let arrIndex = -1;\n\n while (arrIndex === -1 && i < arr.length) {\n if (arr[i].toString() === val.toString()) {\n arrIndex = i;\n }\n i++;\n }\n return arrIndex;\n};\n\n/**\n *\n *\n * @param {*} colFields\n * @param {*} rowFields\n * @param {*} userLayerConfig\n * @return\n * @memberof CartesianEncoder\n */\nexport const getLayerConfFromFields = (colFields, rowFields, userLayerConfig) => userLayerConfig.filter((conf) => {\n const userConf = conf instanceof Array ? conf : [conf];\n const encodingArr = [].concat(...userConf.map(d => d.encoding).filter(d => d !== undefined));\n\n if (!encodingArr.length) {\n return true;\n }\n\n const xFields = [].concat(...encodingArr.map(d => [d.x && d.x.field, d.x0 && d.x0.field]))\n .filter(d => d !== undefined && d !== null);\n const yFields = [].concat(...encodingArr.map(d => [d.y && d.y.field, d.y0 && d.y0.field]))\n .filter(d => d !== undefined && d !== null);\n\n if (!xFields.length && !yFields.length) {\n return true;\n }\n\n const colFieldExist = xFields.length ? xFields.every(d => colFields.indexOf(d) !== -1) : false;\n const rowFieldExist = yFields.length ? yFields.every(d => rowFields.indexOf(d) !== -1) : false;\n if (xFields.length && yFields.length) {\n return colFieldExist && rowFieldExist;\n }\n return colFieldExist || rowFieldExist;\n});\n","import { layerFactory } from '@chartshq/visual-layer';\nimport { mergeRecursive } from 'muze-utils';\nimport { generateAxisFromMap, getDefaultMark, getIndex, getLayerConfFromFields } from './encoder-helper';\nimport { retriveDomainFromData } from '../group-helper';\n\nimport { ROW, COLUMN, COL, LEFT, TOP, CARTESIAN, MEASURE, BOTH, X, Y } from '../enums/constants';\nimport VisualEncoder from './visual-encoder';\n\n/**\n *\n *\n * @export\n * @class CartesianEncoder\n * @extends {VisualEncoder}\n */\nexport default class CartesianEncoder extends VisualEncoder {\n\n /**\n *\n *\n * @return\n * @memberof CartesianEncoder\n */\n static type () {\n return CARTESIAN;\n }\n\n /**\n *\n *\n * @param {*} axesCreators\n * @param {*} fieldInfo\n * @return\n * @memberof CartesianEncoder\n */\n createAxis (axesCreators, fieldInfo) {\n const geomCellAxes = {};\n const {\n axes\n } = axesCreators;\n const {\n projections,\n indices\n } = fieldInfo;\n const {\n rowFields,\n columnFields\n } = projections;\n const {\n rowIndex,\n columnIndex\n } = indices;\n const axisFields = [{\n fields: rowFields,\n index: rowIndex\n }, {\n fields: columnFields,\n index: columnIndex\n }];\n const xAxes = axes.x || [];\n const yAxes = axes.y || [];\n\n [rowFields, columnFields].forEach((fields, i) => {\n const type = i === 0 ? ROW : COLUMN;\n const axis = i === 0 ? Y : X;\n\n if (fields.length > 1) {\n axesCreators.position = BOTH;\n } else {\n axesCreators.position = this.axisFrom()[type];\n }\n geomCellAxes[axis] = generateAxisFromMap(axis, axisFields[i], axesCreators, axis === X ? xAxes : yAxes);\n });\n return geomCellAxes;\n }\n\n /**\n *\n *\n * @param {*} fields\n * @return\n * @memberof CartesianEncoder\n */\n getFacetsAndProjections (fields, type) {\n let facets = [];\n let projections = [];\n let counter = 0;\n const primaryFacets = [];\n const secondaryFacets = [];\n const primaryFields = fields[0];\n const secondaryFields = fields[1];\n const primaryLen = primaryFields.length;\n const secondaryLen = secondaryFields.length;\n const axisFrom = this.axisFrom();\n\n for (let i = 0; i < primaryLen; i++) {\n let projArr = [primaryFields[i]];\n const primaryField = primaryFields[i];\n\n if (primaryField.type() === MEASURE) {\n const secondaryField = secondaryFields[counter];\n if (secondaryField && secondaryField.type() === MEASURE) {\n counter++;\n projArr = [primaryField, secondaryField];\n }\n projections.push(projArr);\n } else {\n facets.push(primaryField);\n primaryFacets.push(primaryField);\n }\n }\n if (secondaryLen > counter) {\n for (let i = counter; i < secondaryLen; i++) {\n const secondaryField = secondaryFields[i];\n const projArr = [secondaryField];\n if (secondaryField.type() === MEASURE) {\n projections.push(projArr);\n } else {\n facets.push(secondaryField);\n secondaryFacets.push(secondaryField);\n }\n }\n }\n if ((primaryFacets.length || secondaryFacets.length) && !projections.length) {\n type = type === COL ? COLUMN : type;\n if ((axisFrom[type] === LEFT || axisFrom[type] === TOP) && primaryFacets.length) {\n const axisFromIndex = primaryFacets.length - 1;\n const facet = primaryFacets[axisFromIndex];\n projections = [[facet]];\n const existIndex = getIndex(secondaryFacets, facet);\n if (existIndex > -1) {\n projections = [[facet, facet]];\n secondaryFacets.splice(existIndex, 1);\n }\n primaryFacets.splice(axisFromIndex, 1);\n } else {\n const axisFromIndex = 0;\n const facet = secondaryFacets[axisFromIndex];\n projections = [[facet]];\n const existIndex = getIndex(primaryFacets, facet);\n if (existIndex > -1) {\n projections = [[facet, facet]];\n primaryFacets.splice(existIndex, 1);\n }\n secondaryFacets.splice(axisFromIndex, 1);\n }\n }\n\n facets = [...primaryFacets, ...secondaryFacets];\n facets = facets.filter((el, index, self) => index === self.findIndex(t => (t.toString() === el.toString())));\n return {\n facets,\n projections\n };\n }\n\n /**\n *\n *\n * @param {*} datamodel\n * @param {*} config\n * @return\n * @memberof CartesianEncoder\n */\n fieldSanitizer (datamodel, config) {\n return super.fieldSanitizer(datamodel, config);\n }\n\n /**\n *\n *\n * @param {*} datamodel\n * @return\n * @memberof CartesianEncoder\n */\n getRetinalFieldsDomain (dataModels, encoding) {\n const groupedModel = dataModels.groupedModel;\n const domains = {};\n for (const key in encoding) {\n if ({}.hasOwnProperty.call(encoding, key)) {\n const encodingObj = encoding[key];\n const field = encodingObj.field;\n if (!encodingObj.domain && field) {\n const domain = retriveDomainFromData(groupedModel, field);\n domains[field] = domain;\n }\n }\n }\n return domains;\n }\n\n /**\n *\n *\n * @param {*} layerArray\n * @memberof CartesianEncoder\n */\n serializeLayerConfig (layerArray) {\n const serializedLayers = [];\n // let currentLayerIndex = 0;\n layerArray.length && layerArray.forEach((layer, i) => {\n const def = layerFactory.sanitizeLayerConfig(layer);\n def.order = i;\n serializedLayers.push(def);\n });\n return serializedLayers;\n }\n\n /**\n *\n *\n * @param {*} fields\n * @param {*} userLayerConfig\n * @return\n * @memberof CartesianEncoder\n */\n getLayerConfig (fields, userLayerConfig) {\n const layerConfig = [];\n const {\n columnFields,\n rowFields\n } = fields;\n\n // let currentLayerIndex = 0;\n columnFields.forEach((colField) => {\n const colFieldName = colField.toString();\n rowFields.forEach((rowField) => {\n let configs = [];\n const rowFieldName = rowField.toString();\n const encoding = {\n x: {\n field: colFieldName\n },\n y: {\n field: rowFieldName\n }\n };\n const rowFieldType = rowField.subtype();\n const colFieldType = colField.subtype();\n const mark = getDefaultMark(colFieldType, rowFieldType);\n\n const defConfigs = [{\n mark,\n def: {\n mark,\n encoding\n }\n }];\n\n const layerConfigs = getLayerConfFromFields(colField.getMembers(),\n rowField.getMembers(), userLayerConfig || []);\n if (layerConfigs.length) {\n configs = layerConfigs.map((layerConf) => {\n const mergedLayerConf = mergeRecursive(mergeRecursive({}, defConfigs[0].def), layerConf);\n const serializedLayerConfig = layerFactory.getSerializedConf(mergedLayerConf.mark,\n mergedLayerConf);\n return {\n mark: mergedLayerConf.mark,\n order: mergedLayerConf.order,\n def: serializedLayerConfig\n };\n });\n } else {\n configs = defConfigs;\n }\n\n layerConfig.push(...configs);\n });\n });\n return layerConfig;\n }\n}\n\n","import { layerFactory } from '@chartshq/visual-layer';\nimport { mergeRecursive } from 'muze-utils';\nimport VisualEncoder from './visual-encoder';\nimport { RADIUS, ANGLE, SIZE, MEASURE, ARC, POLAR, COLOR } from '../enums/constants';\n/**\n *\n *\n * @export\n * @class PolarEncoder\n * @extends {VisualEncoder}\n */\nexport default class PolarEncoder extends VisualEncoder {\n\n /**\n *\n *\n * @param {*} axesCreators\n * @param {*} fieldInfo\n * @return\n * @memberof PolarEncoder\n */\n createAxis (axesCreators, fieldInfo) {\n const {\n axes\n } = axesCreators;\n const geomCellAxes = axes;\n const {\n indices\n } = fieldInfo;\n const {\n rowIndex,\n columnIndex\n } = indices;\n // Dummy axes for polar, to create blank cells\n const pieAxes = geomCellAxes.pie || [];\n\n pieAxes[rowIndex] = pieAxes[rowIndex] || [];\n pieAxes[rowIndex][columnIndex] = [];\n\n geomCellAxes.pie = pieAxes;\n geomCellAxes.x = null;\n geomCellAxes.y = null;\n\n return geomCellAxes;\n }\n\n /**\n *\n *\n * @param {*} fields\n * @return\n * @memberof CartesianEncoder\n */\n getFacetsAndProjections (fields) {\n let counter = 0;\n const facets = [];\n const projections = [];\n const primaryFields = fields[0];\n const secondaryFields = fields[1];\n const primaryLen = primaryFields.length;\n const secondaryLen = secondaryFields.length;\n\n for (let i = 0; i < primaryLen; i++) {\n const primaryField = primaryFields[i];\n if (primaryField.type() === MEASURE) {\n const secondaryField = secondaryFields[counter++];\n const projArr = secondaryField ? [primaryField, secondaryField] : [primaryField];\n projections.push(projArr);\n } else {\n facets.push(primaryField);\n }\n }\n if (secondaryLen > counter) {\n for (let i = counter; i < secondaryLen; i++) {\n const secondaryField = secondaryFields[i];\n const projArr = [secondaryField];\n if (secondaryField.type() === MEASURE) {\n projections.push(projArr);\n } else {\n facets.push(secondaryField);\n }\n }\n }\n return {\n facets,\n projections\n };\n }\n\n /**\n *\n *\n * @return\n * @memberof PolarEncoder\n */\n setCommonDomain () {\n // No domain to be set\n return this;\n }\n\n /**\n *\n *\n * @return\n * @memberof PolarEncoder\n */\n static type () {\n return POLAR;\n }\n\n layers (...layers) {\n if (layers.length) {\n this._layers = layers[0];\n return this;\n }\n return this._layers;\n }\n\n /**\n *\n *\n * @param {*} datamodel\n * @param {*} config\n * @memberof PolarEncoder\n */\n fieldSanitizer (datamodel, config) {\n let sanitizedRows = [[], []];\n let sanitizedColumns = [[], []];\n const fields = super.fieldSanitizer(datamodel, config);\n const {\n layers\n } = config;\n const {\n rows,\n columns\n } = fields;\n const layer = layers[0];\n const encoding = layer.encoding;\n const radius = encoding && encoding.radius ? encoding.radius.field : null;\n const angle = encoding && encoding.angle ? encoding.angle.field : null;\n const sanitizedFields = [sanitizedRows, sanitizedColumns];\n\n [rows, columns].forEach((fieldType, typeIndex) => {\n fieldType.forEach((fieldSet, i) => fieldSet.forEach((field) => {\n if (field.toString() !== radius && field.toString() !== angle && field.type() !== MEASURE) {\n sanitizedFields[typeIndex][i].push(field);\n }\n }));\n });\n sanitizedColumns = [...new Set(sanitizedColumns)];\n sanitizedRows = [...new Set(sanitizedRows)];\n this.fieldInfo({ rows: sanitizedRows, columns: sanitizedColumns });\n return this.fieldInfo();\n }\n\n getRetinalFieldsDomain (dataModels, encoding, facetFields, groupBy) {\n let sizeField;\n let colorField;\n const fields = [];\n const layers = this.layers();\n const dataModel = dataModels.parentModel;\n const fieldsConfig = dataModel.getFieldsConfig();\n const domains = {};\n if (layers && layers[0]) {\n const layer = layers[0];\n const layerEncoding = layer.def.encoding || {};\n\n [RADIUS, ANGLE, SIZE, COLOR].forEach((encType) => {\n const field = layerEncoding[encType] ? layerEncoding[encType].field : '';\n const measureField = fieldsConfig[field] && fieldsConfig[field].def.type === MEASURE;\n if (encType === SIZE && measureField) {\n sizeField = field;\n }\n if (encType === COLOR) {\n colorField = field;\n }\n fieldsConfig[field] && !measureField && fields.push(field);\n });\n }\n\n if (sizeField) {\n domains[sizeField] = dataModel.groupBy(facetFields, {\n [sizeField]: 'sum'\n }).getFieldspace().fieldsObj()[sizeField].domain();\n }\n\n if (colorField) {\n const dm = dataModel.groupBy([...facetFields, ...fields], groupBy.measures);\n domains[colorField] = dm.getFieldspace().fieldsObj()[colorField].domain();\n }\n return domains;\n }\n /**\n *\n *\n * @param {*} fields\n * @param {*} userLayerConfig\n * @return\n * @memberof PolarEncoder\n */\n getLayerConfig (fields, userLayerConfig) {\n let layerConfig = [];\n const {\n columnFields,\n rowFields\n } = fields;\n const allFields = [...columnFields, ...rowFields];\n\n allFields.forEach(() => {\n const encoding = {};\n let config = {\n mark: ARC,\n def: {\n encoding\n }\n };\n if (userLayerConfig && userLayerConfig.length > 0) {\n config = mergeRecursive(config, userLayerConfig[0]);\n }\n layerConfig.push(config);\n });\n if (layerConfig.length === 0) {\n layerConfig = userLayerConfig;\n }\n\n this.layers(layerConfig);\n return layerConfig;\n }\n\n /**\n *\n *\n * @param {*} layerArray\n * @returns\n * @memberof PolarEncoder\n */\n serializeLayerConfig (layerArray) {\n const serializedLayers = [];\n\n layerArray.length && layerArray.forEach((layer) => {\n const def = layerFactory.getSerializedConf(layer.mark, layer);\n serializedLayers.push({\n mark: layer.mark,\n def\n });\n });\n return serializedLayers;\n }\n}\n","import { createRetinalAxis } from './encoder-helper';\nimport { COLOR, SHAPE, SIZE } from '../enums/constants';\nimport VisualEncoder from './visual-encoder';\n\n/**\n *\n *\n * @export\n * @class RetinalEncoder\n * @extends {VisualEncoder}\n */\nexport default class RetinalEncoder extends VisualEncoder {\n\n /**\n *\n *\n * @param {*} axesCreators\n * @return\n * @memberof RetinalEncoder\n */\n createAxis (axesCreators) {\n const { fieldsConfig, config } = axesCreators;\n const newAxes = {};\n\n [COLOR, SHAPE, SIZE].forEach((axisType) => {\n newAxes[`${axisType}`] = createRetinalAxis({ axisType, fieldsConfig }, config[axisType]);\n });\n return newAxes;\n }\n\n /**\n *\n *\n * @static\n * @return\n * @memberof RetinalEncoder\n */\n static type () {\n return 'retinal';\n }\n\n /**\n *\n *\n * @param {*} fields\n * @param {*} userLayerConfig\n * @return\n * @memberof RetinalEncoder\n */\n getLayerConfig (encodingConfigs, userLayerConfig) {\n const layerConfig = [];\n userLayerConfig.forEach((e) => {\n const config = e;\n [COLOR, SHAPE, SIZE].forEach((axis) => {\n if (encodingConfigs[axis] && encodingConfigs[axis].field) {\n const def = config.def;\n if (config.def instanceof Array) {\n def.forEach((conf) => {\n conf.encoding = conf.encoding || {};\n !conf.encoding[axis] && (conf.encoding[axis] = {});\n conf.encoding[axis].field = encodingConfigs[axis].field;\n });\n } else {\n def.encoding = def.encoding || {};\n !def.encoding[axis] && (def.encoding[axis] = {});\n def.encoding[axis].field = encodingConfigs[axis].field;\n }\n }\n });\n layerConfig.push(config);\n });\n return layerConfig;\n }\n\n /**\n *\n *\n * @param {*} context\n * @return\n * @memberof RetinalEncoder\n */\n setCommonDomain (context) {\n const { domains, axes, encoding } = context;\n\n Object.entries(encoding).forEach((enc) => {\n if (enc[1] && enc[1].field) {\n const encType = enc[0];\n const field = enc[1].field;\n\n if (field) {\n axes[encType].forEach((axis) => {\n const domain = domains[field];\n !enc[1].domain && axis.updateDomain(domain);\n });\n }\n }\n });\n return axes;\n }\n}\n","import { Store, dataSelect, FieldType } from 'muze-utils';\nimport { DATA_UPDATE_COUNTER } from '../enums/defaults';\nimport { Variable } from '../variable';\nimport { PolarEncoder, CartesianEncoder } from '../encoder';\nimport {\n DIMENSION,\n MEASURE,\n ORDINAL,\n LINEAR,\n ROW,\n COLUMN,\n COL,\n LEFT,\n RIGHT,\n TOP,\n BOTTOM,\n COLOR,\n SIZE,\n TEMPORAL,\n SHAPE,\n INTERACTION,\n GRID_LINES,\n GRID_BANDS,\n HEADER,\n FACET,\n X,\n Y,\n POLAR\n} from '../enums/constants';\n\n/**\n * Creates an instance of a store which contains the arguments to make the class reactive\n *\n * @return {Object} instance of store\n * @memberof VisualGroup\n */\nexport const initStore = () => new Store({\n [DATA_UPDATE_COUNTER]: DATA_UPDATE_COUNTER\n});\n\n/**\n *\n *\n * @param {*} arr\n */\nexport const isDistributionEqual = arr => [...arr[0], ...arr[1]].reduce((isEqual, row) => {\n const rowType = row.type();\n\n if (rowType === MEASURE || rowType === TEMPORAL) {\n isEqual = true;\n }\n return isEqual;\n}, false);\n\n/**\n *\n *\n */\nexport const initializeCacheMaps = () => ({\n cellMap: new Map(),\n xAxesMap: new Map(),\n yAxesMap: new Map(),\n entryCellMap: new Map(),\n exitCellMap: new Map()\n});\n\n/**\n *\n *\n * @param {*} axisName\n * @param {*} id\n */\nexport const getAxisKey = (axisName, id, scaleType) => `${axisName}-axis-${id}-${scaleType}`;\n\n/**\n *\n *\n * @param {*} rowId\n * @param {*} columnId\n */\nexport const getCellKey = (rowId, columnId) => `cell-${rowId}-${columnId}`;\n\n/**\n *\n *\n * @param {*} config\n * @return\n */\nexport const extractUnitConfig = (config) => {\n const unitConfig = {};\n const attrNames = [INTERACTION, GRID_LINES, GRID_BANDS];\n\n attrNames.forEach((attr) => {\n if (config[attr] !== undefined) {\n unitConfig[attr] = config[attr];\n }\n });\n return unitConfig;\n};\n\n/**\n *\n *\n * @param {*} headers\n * @param {*} index\n * @param {*} rowLength\n * @return\n * @memberof MatrixResolver\n */\nexport const getHeaderText = (headers, index, rowLength) => {\n let header = '';\n\n if (index === rowLength - 1 && headers.length > rowLength) {\n for (let i = index; i < headers.length - 1; i++) {\n header += `${headers[i].toString()} / `;\n }\n header += headers[headers.length - 1].toString();\n return header;\n } else if (headers[index]) {\n return headers[index].toString();\n }\n return '';\n};\n\n/**\n *\n *\n * @param {*} fields\n * @param {*} fieldHeaders\n * @param {*} TextCell\n * @param {*} labelManager\n * @return\n */\nexport const headerCreator = (fields, fieldHeaders, TextCell, labelManager) => {\n const headers = fields.length > 0 ? fields[0].map((cell, i) => new TextCell({ type: HEADER }, { labelManager })\n .source(getHeaderText(fieldHeaders, i, fields[0].length))\n .config({ show: cell.config().show })) : [];\n return headers;\n};\n\n/**\n *\n *\n * @param {*} variable\n * @param {*} allFields\n * @return\n */\nexport const findInGroup = (variable, allFields) => {\n let channel = null;\n\n [COLOR, SIZE, SHAPE].forEach((e) => {\n if (this.store.get(e) && variable === this.store.get(e)[0]) {\n channel = e;\n }\n });\n\n if (channel) {\n return { channel };\n }\n [ROW, COL].forEach((facetType) => {\n allFields[`${facetType}Facets`].forEach((e) => {\n if (e.toString() === variable) {\n channel = { channel: FACET, type: facetType === COL ? COLUMN : ROW };\n }\n });\n });\n\n if (channel) {\n return channel;\n }\n\n [ROW, COL].forEach((projType) => {\n allFields[`${projType}Projections`].forEach((e) => {\n e.forEach((m) => {\n if (m.toString() === variable) {\n channel = projType === COL ? X : Y;\n }\n });\n });\n });\n\n if (channel) {\n return { channel };\n }\n return null;\n};\n\n/**\n *\n *\n * @param {*} datamodel\n * @param {*} field\n */\nexport const getAxisType = (fieldsConfig, field) => {\n let fieldType = ORDINAL;\n\n if (field && fieldsConfig[field].def.type !== DIMENSION) {\n fieldType = LINEAR;\n }\n return fieldType;\n};\n\n/**\n *\n *\n * @param {*} datamodel\n * @param {*} fieldName\n * @return\n */\nexport const retriveDomainFromData = (datamodel, fieldName) => {\n const field = datamodel.getFieldspace().fields.find(d => d._ref.name === fieldName.toString());\n return field.domain();\n};\n\n/**\n *\n *\n * @memberof MatrixResolver\n */\nexport const mutateAxesFromMap = (cacheMaps, axes) => {\n let xAxes = null;\n let yAxes = null;\n const {\n xAxesMap,\n yAxesMap\n } = cacheMaps;\n const {\n x: xAxisSet,\n y: yAxisSet\n } = axes;\n\n xAxisSet && xAxisSet.forEach((axisId) => {\n const xAxis = xAxesMap.get(axisId);\n xAxes = xAxes || [];\n xAxes.push(xAxis);\n });\n\n yAxisSet && yAxisSet.forEach((axisId) => {\n const yAxis = yAxesMap.get(axisId);\n yAxes = yAxes || [];\n yAxes.push(yAxis);\n });\n\n return {\n xAxes, yAxes\n };\n};\n\n/**\n *\n *\n * @param {*} layers\n * @return\n */\nexport const getEncoder = (layers) => {\n let encoder = new CartesianEncoder();\n\n if (layers) {\n // Figuring out the kind of layers the group will have\n encoder = layers.every(e => e.mark === 'arc') ? new PolarEncoder() : encoder;\n }\n return encoder;\n};\n\n/**\n *\n *\n * @param {*} type\n * @param {*} fields\n * @param {*} userAxisFromConfig\n * @return\n */\nexport const getHeaderAxisFrom = (type, fields, userAxisFromConfig) => {\n let axisFrom = userAxisFromConfig[type];\n let headerFrom = '';\n const options = type === ROW ? [LEFT, RIGHT] : [BOTTOM, TOP];\n const [firstField, secondField] = fields;\n const firstFieldType = i => (firstField.length ? firstField[i].type() : null);\n const secondFieldType = i => (secondField.length ? secondField[i].type() : null);\n\n if (firstFieldType(firstField.length - 1) === DIMENSION && secondFieldType(0) === DIMENSION) {\n headerFrom = axisFrom ? options[1 - options.indexOf(axisFrom)] : options[1];\n\n if (type === COLUMN && (firstField[firstField.length - 1].toString() === secondField[0].toString())) {\n axisFrom = TOP;\n } else {\n axisFrom = axisFrom || options[0];\n }\n } else if (secondFieldType(secondField.length - 1) === DIMENSION) {\n headerFrom = type === ROW ? RIGHT : BOTTOM;\n axisFrom = type === ROW ? RIGHT : BOTTOM;\n } else {\n headerFrom = type === ROW ? LEFT : TOP;\n axisFrom = type === ROW ? LEFT : TOP;\n }\n if (firstFieldType(firstField.length - 1) === MEASURE && secondFieldType(0) === MEASURE) {\n axisFrom = type === ROW ? LEFT : TOP;\n } else if (secondFieldType(0) === MEASURE) {\n axisFrom = type === ROW ? RIGHT : BOTTOM;\n } else if (firstFieldType(firstField.length - 1) === MEASURE) {\n axisFrom = type === ROW ? LEFT : TOP;\n }\n return [headerFrom, axisFrom];\n};\n\n/**\n *\n *\n * @param {*} type\n * @param {*} fields\n * @param {*} layers\n * @return\n * @memberof MatrixResolver\n */\nexport const setFacetsAndProjections = (context, fieldInfo, encoder) => {\n const {\n fields,\n type\n } = fieldInfo;\n const { facets, projections } = encoder.simpleEncoder.getFacetsAndProjections(fields, type);\n\n context.facets({ [`${type}Facets`]: facets });\n context.projections({ [`${type}Projections`]: projections });\n\n return { facets, projections, fields };\n};\n\n/**\n * Creates a selection set from a data set with corresponding attributes\n *\n * @export\n * @param {Selection} sel contains previous selection\n * @param {Object} appendObj Object to be appended\n * @param {Array} data Data based on which the selection is entered/updated/removed\n * @param {Object} [attrs={}] Attributes to be set on the data\n * @return {Selection} Merged selection\n */\nexport const createSelection = (sel, appendObj, data, idFn) => {\n let selection = sel || dataSelect([]);\n\n selection = selection.data(data, idFn);\n\n const enter = selection.enter().append(appendObj);\n const mergedSelection = enter.merge(selection);\n\n selection.exit() && selection.exit().remove();\n return mergedSelection;\n};\n\nconst getRowBorders = (left, right) => {\n const borders = {};\n borders.top = false;\n borders.bottom = false;\n if (left.length > 1 || right.length > 1) {\n borders.top = true;\n borders.bottom = true;\n }\n return borders;\n};\n\nconst getColumnsBorders = (top, bottom) => {\n const borders = {};\n borders.left = false;\n borders.right = false;\n if (top.length || bottom.length) {\n if ((top[0] && top[0].length > 1) || (bottom[0] && bottom[0].length > 1)) {\n borders.left = true;\n borders.right = true;\n }\n }\n return borders;\n};\n\nconst getValueBorders = (rows, columns) => {\n const borders = { top: true, left: true, bottom: true, right: true };\n const borderTypeRow = [LEFT, RIGHT];\n const borderTypeCol = [TOP, BOTTOM];\n rows.forEach((e, i) => {\n if (e[0] && e[0].length) {\n borders[borderTypeRow[i]] = true;\n } else {\n borders[borderTypeRow[i]] = false;\n }\n });\n columns.forEach((e, i) => {\n if (e.length) {\n borders[borderTypeCol[i]] = true;\n } else {\n borders[borderTypeCol[i]] = false;\n }\n });\n\n return borders;\n};\n\nexport const getBorders = (matrices, encoder) => {\n let showRowBorders = { top: false, bottom: false };\n let showColBorders = { left: false, right: false };\n let showValueBorders = { top: false, bottom: false, left: false, right: false };\n const {\n rows,\n columns,\n values: valueMatrix\n } = matrices;\n const [leftRows, rightRows] = rows;\n const [topColumns, bottomColumns] = columns;\n const {\n rowDimensions,\n columnDimensions,\n rowTemporalFields,\n columnTemporalFields,\n columnMeasures,\n rowMeasures\n } = encoder.fieldInfo();\n const allDimensionLength = rowDimensions.length + columnDimensions.length;\n const allMeasuresLength = rowMeasures.length + columnMeasures.length;\n const allTemporalFieldsLength = rowTemporalFields.length + columnTemporalFields.length;\n\n if (encoder.constructor.type() === POLAR) {\n if (!allDimensionLength) {\n return { showRowBorders, showColBorders, showValueBorders };\n }\n } else if (!allMeasuresLength && !allTemporalFieldsLength && allDimensionLength <= 2) {\n return { showRowBorders, showColBorders, showValueBorders };\n }\n\n showRowBorders = getRowBorders(leftRows, rightRows);\n showColBorders = getColumnsBorders(topColumns, bottomColumns);\n showValueBorders = getValueBorders([leftRows, rightRows], [topColumns, bottomColumns]);\n\n if (valueMatrix.length > 1) {\n showValueBorders.top = true;\n showValueBorders.bottom = true;\n }\n if (valueMatrix.length && valueMatrix[0].length > 1) {\n showValueBorders.left = true;\n showValueBorders.right = true;\n }\n return { showRowBorders, showColBorders, showValueBorders };\n};\n\nexport const getFieldsFromSuppliedLayers = (suppliedLayerConfig, fieldsConfig) => {\n let fields = [];\n const encodingArr = suppliedLayerConfig.map(conf => (conf.encoding || {}));\n fields = [...fields, [].concat(...encodingArr.map(enc => Object.values(enc).map(d => d.field)))];\n fields = fields.filter(field => fieldsConfig[field] && fieldsConfig[field].def.type === FieldType.DIMENSION);\n return fields;\n};\n\nexport const extractFields = (facetsAndProjections, layerFields) => {\n const fields = Object.values(facetsAndProjections).map((arr) => {\n const flattenArray = [].concat(...arr);\n return [].concat(...flattenArray.map((field) => {\n if (field instanceof Variable) {\n return field.getMembers();\n }\n return field;\n }));\n });\n return [].concat(...fields, ...layerFields);\n};\n","/**\n * This file exports variables that are used as defaults for the crosstab group.\n */\nexport const DATA_UPDATE_COUNTER = 0;\n\nexport const DEFAULT_LAYER_TYPE = 'cartesian';\n\n","import Selection from './selection';\n/**\n * This function applies a selection operation on a data array.\n *\n * @export\n * @param {Array} [data=[]] The data array to be observed.\n * @return {Selection} Instance of a selection.\n */\nexport default function dataSelect (data = []) {\n return new Selection(data);\n}\n\n","import { BEHAVIOURS, ACTIONS } from '@chartshq/muze-firebolt';\n\nexport const actionBehaviourMap = {\n [ACTIONS.DRAG]: {\n behaviours: [BEHAVIOURS.BRUSH],\n touch: false\n },\n [ACTIONS.HOVER]: {\n behaviours: [BEHAVIOURS.HIGHLIGHT]\n },\n [ACTIONS.LONGTOUCH]: {\n behaviours: [BEHAVIOURS.SELECT],\n touch: true\n },\n [ACTIONS.TOUCHDRAG]: {\n behaviours: [BEHAVIOURS.BRUSH],\n touch: true\n },\n [ACTIONS.CLICK]: {\n behaviours: [BEHAVIOURS.SELECT],\n touch: false\n }\n};\n\n","export const CONFIG = 'config';\nexport const DATA = 'data';\nexport const AXES = 'axes';\nexport const LAYERDEFS = 'layerDef';\nexport const WIDTH = 'width';\nexport const HEIGHT = 'height';\nexport const MOUNT = 'mount';\nexport const primaryXAxisUpdated = 'primaryXAxisUpdated';\nexport const primaryYAxisUpdated = 'primaryYAxisUpdated';\nexport const secondaryXAxisUpdated = 'secondaryXAxisUpdated';\nexport const secondaryYAxisUpdated = 'secondaryYAxisUpdated';\nexport const TRANSFORM = 'transform';\nexport const DATADOMAIN = 'dataDomain';\nexport const LAYERSCREATED = 'layersCreated';\nexport const FIELDS = 'fields';\nexport const TIMEDIFFS = 'timeDiffs';\nexport const LAYERAXISINDEX = 'layerAxisIndex';\n\n","import { FieldType, getDependencyOrder, getObjProp,\n defaultValue, objectIterator, unionDomain, makeElement,\n DimensionSubtype, getClosestIndexOf, toArray } from 'muze-utils';\nimport { layerFactory } from '@chartshq/visual-layer';\nimport { TIMEDIFFS } from '../enums/reactive-props';\n\nexport const getDimensionMeasureMap = (layers, fieldsConfig) => {\n const retinalEncodingsAndMeasures = {};\n\n layers.forEach((layer) => {\n const {\n colorField,\n sizeField,\n shapeField,\n xField,\n yField\n } = layer.encodingFieldsInf();\n const measures = [xField, yField].filter(field => fieldsConfig[field] && fieldsConfig[field].def.type ===\n FieldType.MEASURE);\n [colorField, sizeField, shapeField].forEach((field) => {\n if (fieldsConfig[field] && fieldsConfig[field].def.type === FieldType.DIMENSION) {\n !retinalEncodingsAndMeasures[field] && (retinalEncodingsAndMeasures[field] = []);\n retinalEncodingsAndMeasures[field].push(...measures);\n }\n });\n });\n\n for (const key in retinalEncodingsAndMeasures) {\n if ({}.hasOwnProperty.call(retinalEncodingsAndMeasures, key)) {\n retinalEncodingsAndMeasures[key] = [...new Set(retinalEncodingsAndMeasures[key])];\n }\n }\n return retinalEncodingsAndMeasures;\n};\n\nexport const transformDataModels = (transform, dataModel) => {\n const dataModels = {};\n for (const key in transform) {\n if ({}.hasOwnProperty.call(transform, key)) {\n const transformVal = transform[key];\n dataModels[key] = transformVal(dataModel);\n }\n }\n\n return dataModels;\n};\n\nexport const getLayerFromDef = (context, definition, existingLayer) => {\n let instances = existingLayer;\n const dependencies = context._layerDeps;\n if (!existingLayer) {\n instances = layerFactory.getLayerInstance(definition);\n }\n const layers = {};\n const instanceArr = toArray(instances);\n definition = toArray(definition);\n definition.reduce((acc, def, idx) => {\n const instance = instanceArr[idx];\n instance.config(def);\n instance.dependencies(dependencies);\n if (def.name) {\n instance.alias(def.name);\n }\n layers[instance.alias()] = instance;\n return acc;\n }, {});\n return layers;\n};\n\nexport const resolveEncodingTransform = (layerInst, store) => {\n const encodingTransform = layerInst.config().encodingTransform || {};\n const resolvable = encodingTransform.resolvable;\n let depArr = [];\n if (resolvable) {\n const resolved = resolvable(store);\n depArr = resolved.depArr;\n layerInst.encodingTransform(resolved.fn);\n } else if (encodingTransform instanceof Function) {\n layerInst.encodingTransform(encodingTransform);\n }\n return depArr;\n};\n\nexport const createLayers = (context, layerDefinitions) => {\n const layersMap = context._layersMap;\n const markSet = {};\n const store = {\n layers: {},\n components: {\n unit: context\n }\n };\n let layerIndex = 0;\n let layers = layerDefinitions.sort((a, b) => a.order - b.order).reduce((layersArr, layerDef, i) => {\n const mark = layerDef.mark;\n const definition = layerDef.def;\n const markId = `${mark}-${i}`;\n const defArr = toArray(definition);\n defArr.forEach((def) => {\n def.order = layerDef.order + layerIndex;\n });\n layerIndex += defArr.length;\n const instances = getLayerFromDef(context, definition, layersMap[markId]);\n store.layers = Object.assign(store.layers, instances);\n const instanceValues = Object.values(instances);\n layersArr = layersArr.concat(...instanceValues);\n layersMap[markId] = instanceValues;\n markSet[markId] = markId;\n return layersArr;\n }, []);\n store.unit = context;\n const layerdeps = {};\n layers.forEach((layer) => {\n const depArr = resolveEncodingTransform(layer, store);\n layerdeps[layer.alias()] = depArr;\n });\n\n const order = getDependencyOrder(layerdeps);\n layers = order.map(name => store.layers[name]);\n for (const key in layersMap) {\n if (!(key in markSet)) {\n layersMap[key].forEach(layer => layer.remove());\n delete layersMap[key];\n }\n }\n return layers;\n};\n\nexport const attachDataToLayers = (layers, dm, transformedDataModels) => {\n layers.forEach((layer) => {\n const dataSource = layer.config().source;\n const dataModel = dataSource instanceof Function ? dataSource(dm) : (transformedDataModels[dataSource] || dm);\n layer.data(dataModel);\n });\n};\n\nexport const attachAxisToLayers = (axes, layers, layerAxisIndex) => {\n layers.forEach((layer) => {\n const layerId = layer.id();\n const axesObj = {};\n\n objectIterator(axes, (key) => {\n const axisInf = layerAxisIndex[layerId];\n if (axisInf) {\n axes[key] && (axesObj[key] = axes[key][axisInf[key] || 0]);\n }\n });\n Object.keys(axesObj).length && layer.axes(axesObj);\n });\n};\n\nexport const getLayerAxisIndex = (layers, fields) => {\n const layerAxisIndex = {};\n layers.forEach((layer) => {\n const { axis, encoding } = layer.config();\n const id = layer.id();\n ['x', 'y'].forEach((type) => {\n let index;\n const field = defaultValue(getObjProp(axis, type), encoding[type] && encoding[type].field);\n if (fields[type]) {\n index = fields[type].findIndex(fieldInst => fieldInst.getMembers().indexOf(field) !== -1);\n } else {\n index = 0;\n }\n !layerAxisIndex[id] && (layerAxisIndex[id] = {});\n layerAxisIndex[id][type] = index;\n });\n });\n return layerAxisIndex;\n};\n\nexport const unionDomainFromLayers = (layers, axisFields, layerAxisIndex, fieldsConfig) => {\n let domains = {};\n layers = layers.filter(layer => layer.getDataDomain() !== null);\n layers.forEach((layer) => {\n let domainValues = {};\n const config = layer.config();\n const encoding = config.encoding;\n const layerDomain = layer.getDataDomain();\n const layerId = layer.id();\n\n if (layerDomain !== null && config.calculateDomain !== false) {\n domainValues = Object.entries(layerDomain);\n if (layerDomain.x || layerDomain.y) {\n domains = domainValues.reduce((fieldDomain, domain) => {\n const encodingType = domain[0];\n const field = encoding[encodingType].field;\n const axisIndex = layerAxisIndex[layerId][encodingType];\n const fieldStr = `${axisFields[encodingType][axisIndex]}`;\n fieldDomain[fieldStr] = fieldDomain[fieldStr] || [];\n fieldDomain[fieldStr] = unionDomain(([fieldDomain[fieldStr], domain[1]]),\n fieldsConfig[field].def.subtype ? fieldsConfig[field].def.subtype :\n fieldsConfig[field].def.type);\n\n return fieldDomain;\n }, domains);\n } else { domains = domainValues; }\n }\n });\n return domains;\n};\n\nexport const renderLayers = (context, container, layers, measurement) => {\n context._lifeCycleManager.notify({ client: layers, action: 'beforedraw', formalName: 'layer' });\n const config = context.config();\n const classPrefix = config.classPrefix;\n const orderedLayers = context.layers().sort((a, b) => a.config().order - b.config().order);\n const layerParentGroup = makeElement(container, 'g', [1], `${classPrefix}-layer-group`);\n makeElement(layerParentGroup, 'g', orderedLayers, null, {\n update: (group, layer) => {\n layer.measurement(measurement);\n layer.dataProps({\n timeDiffs: context.store().get(TIMEDIFFS)\n });\n layer.config().render !== false && layer.mount(group.node());\n }\n });\n return this;\n};\n\nexport const getNearestDimensionalValue = (context, position) => {\n const fields = context.fields();\n if (!fields.x.length || !fields.y.length) {\n return null;\n }\n const data = context.data();\n const axes = context.axes();\n const fieldsConfig = data.getFieldsConfig();\n const xField = getObjProp(fields, 'x', 0).getMembers()[0];\n const yField = getObjProp(fields, 'y', 0).getMembers()[0];\n const xFieldType = fieldsConfig[xField] && (fieldsConfig[xField].def.subtype ? fieldsConfig[xField].def.subtype :\n fieldsConfig[xField].def.type);\n const yFieldType = fieldsConfig[yField] && (fieldsConfig[yField].def.subtype ? fieldsConfig[yField].def.subtype :\n fieldsConfig[yField].def.type);\n\n const entryVal = [['x', xFieldType, xField], ['y', yFieldType, yField]].find(entry =>\n entry[1] === DimensionSubtype.CATEGORICAL || entry[1] === DimensionSubtype.TEMPORAL);\n\n if (!entryVal || (xFieldType !== FieldType.MEASURE && yFieldType !== FieldType.MEASURE)) {\n return null;\n }\n const field = entryVal[2];\n const index = fieldsConfig[field].index;\n let key = axes[entryVal[0]][0].invert(position[entryVal[0]]);\n if (entryVal[1] === DimensionSubtype.TEMPORAL) {\n const filterData = [...new Set(data.getData().data.map(d => d[index]))];\n key = filterData[getClosestIndexOf(filterData, key)];\n }\n\n return key !== undefined ? [[field], [key]] : null;\n};\n\nexport const getLayersBy = (layers, searchBy, value) => layers.filter((layer) => {\n const name = searchBy === 'type' ? layer.constructor.formalName() : layer.alias();\n return name === value;\n});\n\nexport const removeLayersBy = (layers, searchBy, value) => {\n layers.filter((inst) => {\n const name = searchBy === 'type' ? inst.config().mark : inst.alias();\n if (name === value) {\n inst.remove();\n return false;\n }\n return true;\n });\n};\n\nexport const createSideEffectGroup = (container, className) => makeElement(container, 'g', [1], className).node();\n\nexport const getAdjustedDomain = (max, min) => {\n const y1ratio = max[0] / (max[0] - min[0]);\n const y2ratio = max[1] / (max[1] - min[1]);\n\n // adjust min/max values for positive negative values zero line etc\n let allSameSign = false;\n\n // if all numbers are positive set floor to zero\n if (min[0] > 0 && min[1] > 0 && min[1] > 0 && max[1] > 0) {\n allSameSign = true;\n min[0] = 0;\n min[1] = 0;\n }\n\n // if all numbers are negative set ceiling to zero\n if (min[0] < 0 && min[1] < 0 && min[1] < 0 && max[1] < 0) {\n allSameSign = true;\n max[0] = 0;\n max[1] = 0;\n }\n\n // align zero line if necessary\n if (!allSameSign && y1ratio !== y2ratio) {\n if (y1ratio < y2ratio) {\n // adjust min[1]\n min[1] = min[0] / max[0] * max[1];\n } else {\n // adjust min[0]\n min[0] = min[1] / max[1] * max[0];\n }\n }\n return {\n max,\n min\n };\n};\n","import { getObjProp, defaultValue, makeElement, DimensionSubtype, DataModel } from 'muze-utils';\nimport { ScaleType } from '@chartshq/muze-axis';\nimport { layerFactory } from '@chartshq/visual-layer';\nimport { GRIDLINEPARENTGROUPCLASS, GRIDBANDPARENTGROUPCLASS } from '../enums/constants';\nimport { TIMEDIFFS } from '../enums/reactive-props';\n\nconst LINEAR = ScaleType.LINEAR;\n\nconst getLayerDefinition = (context, axes, type, orientation) => {\n let encoding;\n const config = context.config();\n const { classPrefix, gridLines, gridBands } = config;\n const gridLineColor = gridLines.color;\n const zeroLineColor = gridLines.zeroLineColor;\n const defClassName = type === 'band' ? gridBands.defClassName : gridLines.defClassName;\n const gridBandColor = gridBands[orientation].color;\n const axis = axes[orientation][0];\n const isLinearScale = axis.constructor.type() === LINEAR;\n\n if (type === 'band' && isLinearScale) {\n encoding = {\n [orientation]: `${orientation}value`,\n [`${orientation}0`]: `${orientation}value0`\n };\n } else {\n encoding = {\n [orientation]: isLinearScale ? `${orientation}value` : `${orientation}dim`\n };\n }\n encoding.color = {\n value: (data, i) => {\n const isNegativeDomain = isLinearScale && axis.domain()[0] < 0;\n if (type === 'band') {\n return gridBandColor[i % 2];\n }\n return isNegativeDomain && data[orientation] === 0 ? zeroLineColor : gridLineColor;\n }\n };\n\n return {\n definition: {\n defClassName: `${defClassName}-${orientation}`,\n className: config.className,\n individualClassName: (data, i) => {\n let className;\n const isNegativeDomain = isLinearScale && axis.domain()[0] < 0;\n if (isNegativeDomain && data.y === 0 && type !== 'band') {\n className = `${classPrefix}-axis-zero-line`;\n } else {\n className = `${classPrefix}-grid-${type}-${orientation}-${i % 2}`;\n }\n return className;\n },\n [`pad${orientation.toUpperCase()}`]: type === 'band' ? 0 : undefined,\n encoding\n },\n axes: {\n [orientation]: axis\n },\n interactive: false\n };\n};\n\nconst getDefaultVisibilty = (show, axis) => {\n if (axis.constructor.type() === LINEAR) {\n return show;\n }\n return false;\n};\n\nexport const getGridLayerDefinitions = (context, config, type) => ['x', 'y'].map((axisType) => {\n const show = defaultValue(config[axisType] && config[axisType].show,\n getDefaultVisibilty(config.show, context.axes()[axisType][0]));\n\n return show ? getLayerDefinition(context, context.axes(), type, axisType) : undefined;\n}).filter(d => d !== undefined);\n\nexport const getGridLayerData = (axes, fields, fieldsConfig) => {\n const gridData = {};\n ['x', 'y'].forEach((type) => {\n let ticks = axes[type][0].getTickValues();\n const subtype = getObjProp(fieldsConfig, getObjProp(fields, type, 0).getMembers()[0], 'def', 'subtype');\n const jsonData = [];\n const schema = [\n {\n name: 'yvalue',\n type: 'measure'\n }, {\n name: 'xvalue',\n type: 'measure'\n },\n {\n name: 'yvalue0',\n type: 'measure'\n }, {\n name: 'xvalue0',\n type: 'measure'\n }, {\n name: 'xdim',\n type: 'dimension',\n subtype\n }, {\n name: 'ydim',\n type: 'dimension',\n subtype\n }\n ];\n const len = Math.max(ticks.length);\n ticks = subtype === DimensionSubtype.TEMPORAL ? ticks.map(d => d.getTime()) : ticks;\n for (let i = 0; i < len; i += 1) {\n jsonData.push({\n [`${type}value`]: ticks[i],\n [`${type}value0`]: ticks[i + 1],\n [`${type}dim`]: ticks[i],\n [`${type}dim`]: ticks[i]\n });\n }\n gridData[type] = new DataModel(jsonData, schema);\n });\n return gridData;\n};\n\nexport const createGridLineLayer = (context, data) => {\n const vuConf = context.config();\n const dependencies = context._layerDeps;\n const measurement = {\n width: context.width(),\n height: context.height()\n };\n\n ['band', 'line'].forEach((type) => {\n let mark;\n let config;\n let instances;\n if (type === 'band') {\n mark = 'bar';\n config = vuConf.gridBands;\n instances = context._gridbands;\n } else {\n mark = 'tick';\n config = vuConf.gridLines;\n instances = context._gridlines;\n }\n const definitions = getGridLayerDefinitions(context, config, type);\n\n definitions.forEach((atomicDef, i) => {\n let layer;\n const definition = atomicDef.definition;\n const axesObj = atomicDef.axes;\n const sConf = layerFactory.getSerializedConf(mark, definition);\n sConf.mark = mark;\n if (!instances[i]) {\n layer = layerFactory.getLayerInstance(sConf);\n layer.dependencies(dependencies);\n } else {\n layer = instances[i];\n }\n\n layer.config(sConf)\n .measurement(measurement)\n .data(axesObj.y ? data.y : data.x)\n .dataProps({\n timeDiffs: context.store().get(TIMEDIFFS)\n })\n .axes(axesObj);\n instances[i] = layer;\n });\n });\n};\n\nexport const renderGridLineLayers = (context, container) => {\n const axes = context.axes();\n const config = context.config();\n const classPrefix = config.classPrefix;\n\n if (axes && ((axes.x && axes.x.length) || (axes.y && axes.y.length))) {\n const gridBandData = getGridLayerData(axes, context.fields(), context.data().getFieldsConfig());\n createGridLineLayer(context, gridBandData);\n [[context._gridlines, `${classPrefix}-${GRIDLINEPARENTGROUPCLASS}`],\n [context._gridbands, `${classPrefix}-${GRIDBANDPARENTGROUPCLASS}`]].forEach((entry) => {\n const [instances, parentGroupClass] = entry;\n const mountPoint = makeElement(container, 'g', [1], `.${parentGroupClass}`);\n const className = `${parentGroupClass}-group`;\n makeElement(mountPoint, 'g', instances, `.${className}`, {\n update: (group, instance) => {\n instance.mount(group.node());\n }\n });\n });\n }\n};\n","import { CLASSPREFIX, CONSOLIDATED } from './enums/constants';\n\n/**\n * Returns the default configuration of the visual unit\n * @return {Object} Default configuration of visual unit\n */\nexport const defaultConfig = {\n classPrefix: CLASSPREFIX,\n defClassName: 'visual-unit',\n className: '',\n trackerClassName: 'visual-unit-tracker',\n gridLines: {\n defClassName: 'axis-grid-lines',\n className: '',\n show: true,\n color: '#efefef',\n zeroLineColor: '#b6b6b6'\n },\n gridBands: {\n defClassName: 'axis-grid-bands',\n className: '',\n show: false,\n y: {\n color: ['#fff', '#fbfbfb']\n },\n x: {\n color: ['#fff', '#f9f9f9']\n }\n },\n arcLayerClassName: 'layer-arc',\n interaction: {\n tooltip: {\n mode: CONSOLIDATED\n }\n },\n sideEffectClassName: 'side-effect-container'\n};\n","export const CLASSPREFIX = 'muze';\nexport const IDFIELD = '__id__';\nexport const GRIDLINEPARENTGROUPCLASS = 'grid-lines';\nexport const GRIDBANDPARENTGROUPCLASS = 'grid-bands';\nexport const CONSOLIDATED = 'consolidated';\nexport const FRAGMENTED = 'fragmented';\nexport const FACET_BY_FIELDS = 'facetByFields';\nexport const RETINAL_FIELDS = 'retinalFields';\nexport const PARENT_ALIAS = 'parentAlias';\nexport const LAYERS = 'layers';\nexport const CACHED_DATA = 'cachedData';\nexport const STORE = 'store';\n\n","import { mergeRecursive } from 'muze-utils';\nimport { defaultConfig } from './default-config';\nimport { CONFIG, LAYERDEFS, AXES, WIDTH, HEIGHT, MOUNT, TRANSFORM, FIELDS, DATA } from './enums/reactive-props';\n\nexport default {\n [CONFIG]: {\n value: null,\n meta: {\n sanitization: (config, oldConfig) => (\n mergeRecursive(oldConfig || mergeRecursive({}, defaultConfig), config)\n )\n }\n },\n [LAYERDEFS]: {\n value: null\n },\n [AXES]: {\n value: null,\n meta: {\n sanitization: (axes, prevAxes) => Object.assign(prevAxes || {}, axes)\n }\n },\n [WIDTH]: {\n value: null\n },\n [HEIGHT]: {\n value: null\n },\n [MOUNT]: {\n value: null\n },\n [TRANSFORM]: {\n value: null\n },\n [FIELDS]: {\n value: null\n },\n [DATA]: {\n value: null,\n meta: {\n preset: (data, context) => {\n if (context._cache) {\n const cachedData = context.cachedData();\n context.cachedData([...cachedData, data]);\n } else {\n const oldData = context.data();\n oldData && oldData.unsubscribe('propagation');\n context.cachedData([data]);\n }\n }\n }\n }\n};\n","import { DimensionSubtype } from 'muze-utils';\nimport * as PROPS from './enums/reactive-props';\nimport {\n transformDataModels,\n getDimensionMeasureMap,\n createLayers,\n attachDataToLayers,\n attachAxisToLayers,\n unionDomainFromLayers,\n getLayerAxisIndex\n} from './helper';\n\nconst axisMap = {\n 0: 'primary',\n 1: 'secondary'\n};\nconst axisProps = [PROPS.primaryXAxisUpdated, PROPS.secondaryXAxisUpdated, PROPS.primaryYAxisUpdated,\n PROPS.secondaryYAxisUpdated];\n\nexport const listenerMap = context => ([\n {\n type: 'registerImmediateListener',\n props: [PROPS.AXES],\n listener: ([, axes]) => {\n ['x', 'y'].forEach((type) => {\n const axesArr = axes[type] || [];\n axesArr.forEach((axis, i) => {\n axis.on('update', () => {\n context.store().commit(PROPS[`${axisMap[i]}${axis.isReverse() ? 'Y' : 'X'}AxisUpdated`], true);\n });\n });\n });\n }\n },\n {\n type: 'registerImmediateListener',\n props: [PROPS.CONFIG],\n listener: ([, config]) => {\n config && context.firebolt().config(config.interaction);\n }\n },\n {\n type: 'computed',\n props: [PROPS.LAYERSCREATED],\n listener: fetch => fetch(PROPS.LAYERDEFS, PROPS.FIELDS, (layerDefs, fields) => {\n const layerDefsValue = layerDefs.value;\n const fieldsVal = fields.value;\n if (layerDefsValue && fieldsVal) {\n const layers = createLayers(context, layerDefs.value);\n context.layers(layers);\n context._layerAxisIndex = getLayerAxisIndex(context.layers(), fieldsVal);\n context._lifeCycleManager.notify({ client: layers, action: 'initialized', formalName: 'layer' });\n return true;\n }\n return null;\n })\n },\n {\n type: 'computed',\n props: [PROPS.TIMEDIFFS],\n listener: fetch => fetch(PROPS.DATA, PROPS.FIELDS, PROPS.AXES, (data, fields, axes) => {\n const dataModel = data.value;\n const axisFields = fields.value;\n const axesObj = axes.value;\n if (dataModel && axisFields && axesObj) {\n const timeDiffs = {};\n const timeDiffsByField = {};\n ['x', 'y'].forEach((type) => {\n const field = axisFields[type][0];\n if (field && field.subtype() === DimensionSubtype.TEMPORAL) {\n timeDiffs[type] = field.getMinDiff();\n timeDiffsByField[field] = timeDiffs[type];\n axesObj[type].forEach(axis => axis.minDiff(timeDiffs[type]));\n }\n });\n context._timeDiffsByField = timeDiffsByField;\n return timeDiffs;\n }\n return null;\n })\n },\n {\n type: 'computed',\n props: [PROPS.DATADOMAIN],\n listener: fetch => fetch(PROPS.DATA, PROPS.LAYERSCREATED, PROPS.AXES, PROPS.TRANSFORM,\n (dataModel, layersCreated, axes, transform) => {\n const dataModelVal = dataModel.value;\n const layerAxisIndexVal = context._layerAxisIndex;\n const axesVal = axes.value;\n if (dataModelVal && layersCreated.value && axesVal && layerAxisIndexVal) {\n const layers = context.layers();\n const dataModels = transformDataModels(transform.value, dataModelVal);\n context._transformedDataModels = dataModels;\n context._lifeCycleManager.notify({ client: layers, action: 'beforeupdate', formalName: 'layer' });\n attachDataToLayers(layers, dataModelVal, context._transformedDataModels);\n context._dimensionMeasureMap = getDimensionMeasureMap(layers,\n dataModelVal.getFieldsConfig(), context.retinalFields());\n attachAxisToLayers(axesVal, layers, layerAxisIndexVal);\n context._lifeCycleManager.notify({ client: layers, action: 'updated', formalName: 'layer' });\n return unionDomainFromLayers(layers, context.fields(),\n layerAxisIndexVal, dataModelVal.getFieldsConfig());\n }\n return null;\n })\n },\n {\n type: 'registerImmediateListener',\n props: [PROPS.DATADOMAIN],\n listener: ([, dataDomain]) => {\n dataDomain !== null && context.updateAxisDomain(dataDomain);\n }\n },\n {\n type: 'registerChangeListener',\n props: [PROPS.MOUNT, PROPS.DATA, ...axisProps],\n listener: (mount, data) => {\n const container = mount[1];\n if (container && data[1]) {\n context.render(container);\n }\n }\n }\n]);\n","import { FACET_BY_FIELDS, RETINAL_FIELDS, PARENT_ALIAS, LAYERS, STORE, CACHED_DATA } from './enums/constants';\n\nexport const PROPS = {\n [FACET_BY_FIELDS]: {},\n [RETINAL_FIELDS]: {},\n [PARENT_ALIAS]: {},\n [LAYERS]: {},\n [STORE]: {},\n [CACHED_DATA]: {},\n detailFields: {}\n};\n","import { CommonProps } from 'muze-utils';\nimport { DATA, MOUNT } from '../enums/reactive-props';\n\nexport const clearActionHistory = (context) => {\n const actionHistory = context._actionHistory;\n for (const key in actionHistory) {\n if (actionHistory[key].isMutableAction) {\n delete context._actionHistory[key];\n }\n }\n};\n\nexport const dispatchQueuedSideEffects = (context) => {\n const queuedSideEffects = context._queuedSideEffects;\n Object.entries(queuedSideEffects).forEach((entry) => {\n const sideEffect = entry[1];\n context.dispatchSideEffect(sideEffect.name, ...sideEffect.params);\n });\n context._queuedSideEffects = {};\n};\n\nexport const registerListeners = (firebolt) => {\n const context = firebolt.context;\n const store = context.store();\n\n store.registerImmediateListener([DATA, MOUNT], (dataModel, mount) => {\n const dm = dataModel[1];\n\n if (dm && mount[1]) {\n const originalData = firebolt.context.cachedData()[0];\n firebolt.createSelectionSet(firebolt.context.data().getData().uids);\n firebolt.attachPropagationListener(originalData);\n }\n }, true);\n\n context._layerDeps.throwback.registerChangeListener([CommonProps.ON_LAYER_DRAW],\n ([, onlayerdraw]) => {\n if (onlayerdraw) {\n firebolt.initializeSideEffects();\n firebolt.config(context.config().interaction);\n firebolt.mapActionsAndBehaviour();\n dispatchQueuedSideEffects(firebolt);\n clearActionHistory(firebolt);\n }\n });\n};\n\n","import { DimensionSubtype } from 'muze-utils';\n\nconst getRangeFromData = (instance, selectionDataModel, propConfig) => {\n let criteria;\n const dataObj = selectionDataModel[0].getData();\n const propCriteria = propConfig.payload.criteria;\n const sourceIdentifiers = propConfig.sourceIdentifiers;\n const schema = dataObj.schema;\n const fieldMap = instance.data().getFieldsConfig();\n const data = dataObj.data;\n const isActionSourceSame = instance.id() === propConfig.sourceId;\n\n if (isActionSourceSame) {\n criteria = propCriteria;\n } else {\n criteria = (sourceIdentifiers !== null) ? schema.reduce((acc, obj, index) => {\n let range;\n const field = obj.name;\n const fieldObj = fieldMap[field];\n const type = fieldObj && (fieldObj.def.subtype ? fieldObj.def.subtype : fieldObj.def.type);\n const isDimension = type === DimensionSubtype.CATEGORICAL;\n\n if (!fieldObj) {\n return acc;\n }\n\n if (!isDimension) {\n range = [Math.min(...data.map(d => d[index])), Math.max(...data.map(d => d[index]))];\n } else {\n range = data.map(d => d[index]);\n }\n acc[field] = range;\n return acc;\n }, {}) : null;\n }\n return criteria;\n};\n\nexport const payloadGenerator = {\n brush: (instance, selectionDataModel, propConfig) => {\n const propPayload = propConfig.payload;\n const criteria = getRangeFromData(instance, selectionDataModel, propConfig);\n const payload = Object.assign({}, propPayload);\n payload.criteria = criteria;\n return payload;\n },\n\n __default: (instance, selectionDataModel, propConfig) => {\n const propPayload = propConfig.payload;\n const sourceIdentifiers = propConfig.sourceIdentifiers;\n const dataObj = selectionDataModel[0].getData();\n let schema = dataObj.schema;\n const payload = Object.assign({}, propPayload);\n schema = dataObj.schema;\n const data = dataObj.data;\n const sourceFields = schema.map(d => d.name);\n payload.criteria = !sourceIdentifiers && selectionDataModel[0].isEmpty() ? null :\n [sourceFields, ...data];\n payload.sourceFields = sourceIdentifiers ? sourceIdentifiers.getSchema().map(d => d.name) : [];\n return payload;\n }\n};\n\n","import { isSimpleObject, FieldType, DataModel } from 'muze-utils';\n\nconst getModelWithFacetData = (dm, data) => {\n const dataObj = dm.getData();\n const schema1 = dataObj.schema;\n const data1 = dataObj.data;\n const jsonData = [];\n const schema2 = data[0].map(d => ({\n name: `${d}`,\n type: FieldType.DIMENSION\n }));\n const data2 = data[1];\n\n data1.forEach((d) => {\n const tuple = {};\n schema1.forEach((obj, i) => {\n tuple[obj.name] = d[i];\n });\n schema2.forEach((obj, i) => {\n tuple[obj.name] = data2[i];\n });\n jsonData.push(tuple);\n });\n\n return new DataModel(jsonData, [...schema1, ...schema2]);\n};\n\nexport const propagateValues = (instance, action, config = {}) => {\n let propagationData;\n const payload = config.payload;\n const selectionSet = config.selectionSet;\n const propagationFieldInf = config.propagationFields[action] || {};\n const propagationFields = propagationFieldInf.fields || [];\n const append = propagationFieldInf.append;\n const criteria = payload.criteria;\n const context = instance.context;\n const dataModel = context.cachedData()[0];\n const sourceId = context.id();\n const sideEfffects = instance.sideEffects();\n const behaviourEffectMap = instance._behaviourEffectMap;\n const mergedModel = selectionSet.mergedEnter.model;\n const fieldsConfig = dataModel.getFieldsConfig();\n payload.sourceUnit = sourceId;\n payload.action = action;\n payload.sourceCanvas = context.parentAlias();\n const propagationBehaviourMap = instance._propagationBehaviourMap;\n const propagationBehaviour = propagationBehaviourMap[action] || action;\n\n let propFields = [];\n if (criteria === null) {\n propagationData = null;\n } else if (isSimpleObject(criteria)) {\n propFields = Object.keys(criteria || {});\n propagationData = mergedModel ? mergedModel.project(propFields) : null;\n } else {\n propFields = criteria[0];\n propagationData = mergedModel ? mergedModel.project(propFields) : null;\n }\n\n const facetByFields = context.facetByFields();\n if (propagationData !== null && propagationFields.length) {\n const fields = propagationData.getData().schema.map(d => d.name);\n propagationData = getModelWithFacetData(propagationData, facetByFields);\n propFields = append ? [...fields, ...propagationFields] : propagationFields;\n propagationData = propagationData.project(propFields);\n }\n\n let propagateInterpolatedValues = false;\n if (propFields.length && propFields.every(field => fieldsConfig[field] &&\n fieldsConfig[field].def.type === FieldType.MEASURE)) {\n propagateInterpolatedValues = true;\n }\n\n const groupId = context.parentAlias();\n payload.action = action;\n const behaviourInstance = instance._actions.behavioural[propagationBehaviour];\n const isMutableAction = behaviourInstance ? behaviourInstance.constructor.mutates() : false;\n\n const filterFn = (entry, propagationConf) => {\n const effects = behaviourEffectMap[entry.config.action];\n const mutates = entry.config.groupId ?\n effects.some(d => sideEfffects[d.name || d].constructor.mutates()) : true;\n return entry.config.groupId !== propagationConf.groupId && mutates;\n };\n\n const sourceBehaviour = instance._actions.behavioural[action];\n const mutates = sourceBehaviour ? sourceBehaviour.constructor.mutates() : false;\n let propConfig = {\n payload,\n action,\n criteria: propagationData,\n isMutableAction: mutates,\n propagateInterpolatedValues,\n groupId,\n sourceId: mutates ? groupId : sourceId,\n filterFn,\n enabled: (propConf, firebolt) => (action !== propagationBehaviour ?\n propConf.payload.sourceCanvas === firebolt.context.parentAlias() : true)\n };\n\n dataModel.propagate(propagationData, propConfig, true);\n\n if (action !== propagationBehaviour) {\n propConfig = {\n payload,\n sourceId: isMutableAction ? groupId : sourceId,\n criteria: propagationData,\n isMutableAction,\n propagateInterpolatedValues,\n action: propagationBehaviour,\n groupId,\n applyOnSource: action === propagationBehaviour,\n enabled: (propConf, firebolt) => propConf.payload.sourceCanvas !== firebolt.context.parentAlias(),\n filterFn\n };\n\n dataModel.propagate(propagationData, propConfig, true, {\n filterImmutableAction: (actionInf, propInf) => actionInf.groupId !== propInf.groupId\n });\n }\n};\n","import { FieldType } from 'muze-utils';\nimport { Firebolt, SpawnableSideEffect } from '@chartshq/muze-firebolt';\nimport { registerListeners } from './helper';\nimport { payloadGenerator } from './payload-generator';\nimport { propagateValues } from './data-propagator';\n\n/**\n * This class manages the interactions of visual unit. It associates physical actions with\n * behavioural actions. It also propagates the behavioural actions to other datamodels.\n */\nexport default class UnitFireBolt extends Firebolt {\n constructor (...params) {\n super(...params);\n registerListeners(this);\n }\n\n propagate (behaviour, payload, selectionSet, sideEffects) {\n propagateValues(this, behaviour, {\n payload,\n selectionSet,\n sideEffects,\n propagationFields: this._propagationFields\n });\n }\n\n getApplicableSideEffects (sideEffects, payload, propagationInf) {\n const context = this.context;\n const unitId = context.id();\n const aliasName = context.parentAlias();\n const propagationSourceCanvas = propagationInf.propPayload && propagationInf.propPayload.sourceCanvas;\n const sourceUnitId = propagationInf.propPayload && propagationInf.propPayload.sourceUnit;\n const sourceSideEffects = this._sourceSideEffects;\n const sideEffectInstances = this.sideEffects();\n const actionOnSource = sourceUnitId ? sourceUnitId === unitId : true;\n\n const applicableSideEffects = payload.sideEffects ? [{\n effects: payload.sideEffects,\n behaviours: [payload.action]\n }] : sideEffects;\n applicableSideEffects.forEach((d) => {\n let mappedEffects = d.effects;\n mappedEffects = mappedEffects.filter((se) => {\n const mutates = sideEffectInstances[se.name || se].constructor.mutates();\n if (mutates && propagationInf.isMutableAction === false) {\n return false;\n }\n if (!actionOnSource && payload.criteria !== null) {\n const sideEffectChecker = sourceSideEffects[se.name || se];\n return sideEffectChecker ? sideEffectChecker(propagationInf.propPayload, context) : true;\n }\n if (propagationSourceCanvas === aliasName || actionOnSource) {\n return se.applyOnSource !== false;\n }\n\n return true;\n });\n d.effects = mappedEffects;\n });\n return applicableSideEffects;\n }\n\n shouldApplySideEffects (propagate) {\n return propagate === false;\n }\n\n onDataModelPropagation () {\n return (data, config) => {\n let isSourceFieldPresent = true;\n let isMutableAction = false;\n const propPayload = config.payload;\n const sourceIdentifiers = config.sourceIdentifiers;\n const enabledFn = config.enabled;\n const action = config.action;\n const payloadFn = payloadGenerator[action] || payloadGenerator.__default;\n\n if (sourceIdentifiers) {\n const fieldsConfig = sourceIdentifiers.getFieldsConfig();\n const sourceIdentifierFields = Object.keys(fieldsConfig);\n const propFields = Object.keys(data[0].getFieldsConfig());\n if (!Object.values(fieldsConfig).some(d => d.def.type === FieldType.MEASURE)) {\n isSourceFieldPresent = sourceIdentifierFields.some(d => propFields.indexOf(d) !== -1);\n }\n }\n\n const payload = payloadFn(this.context, data, config);\n const sourceBehaviours = this._sourceBehaviours;\n const filterFn = sourceBehaviours[action] || sourceBehaviours['*'];\n let enabled = true;\n\n if (filterFn) {\n enabled = filterFn(propPayload || {}, this.context);\n }\n\n if (enabledFn) {\n enabled = enabledFn(config, this) && enabled !== false;\n }\n\n if (enabled) {\n const effects = this._behaviourEffectMap[action];\n const sideEffectInstances = this.sideEffects();\n isMutableAction = config.groupId ?\n effects.some(d => sideEffectInstances[d.name || d].constructor.mutates()) : config.isMutableAction;\n\n const propagationInf = {\n propagate: false,\n data,\n propPayload,\n sourceIdentifiers,\n persistent: false,\n isSourceFieldPresent,\n sourceId: config.propagationSourceId,\n isMutableAction: config.isMutableAction\n };\n\n this._actionHistory[action] = {\n payload,\n propagationInf,\n isMutableAction\n };\n this.dispatchBehaviour(action, payload, propagationInf);\n }\n };\n }\n\n initializeSideEffects () {\n super.initializeSideEffects();\n const sideEffects = this.sideEffects();\n for (const key in sideEffects) {\n if ({}.hasOwnProperty.call(sideEffects, key)) {\n sideEffects[key] instanceof SpawnableSideEffect && sideEffects[key].drawingContext(() => {\n const context = this.context;\n return context.getDrawingContext();\n });\n }\n }\n }\n\n prepareSelectionSets (behaviours) {\n const data = this.context.data();\n if (data) {\n this.createSelectionSet(data.getData().uids, behaviours);\n }\n return this;\n }\n\n remove () {\n this.context.cachedData()[0].unsubscribe('propagation');\n return this;\n }\n}\n","import { layerFactory } from '@chartshq/visual-layer';\nimport {\n setAttrs,\n CommonProps,\n getUniqueId,\n getQualifiedClassName,\n selectElement,\n transactor,\n Store,\n makeElement,\n registerListeners,\n generateGetterSetters,\n getDataModelFromIdentifiers,\n isSimpleObject,\n transposeArray,\n FieldType\n} from 'muze-utils';\nimport { physicalActions, sideEffects, behaviouralActions, behaviourEffectMap } from '@chartshq/muze-firebolt';\nimport { actionBehaviourMap } from './firebolt/action-behaviour-map';\nimport {\n renderLayers,\n getNearestDimensionalValue,\n removeLayersBy,\n getLayersBy,\n getLayerFromDef,\n attachAxisToLayers,\n getLayerAxisIndex,\n createSideEffectGroup,\n getAdjustedDomain,\n resolveEncodingTransform\n} from './helper';\nimport { renderGridLineLayers } from './helper/grid-lines';\nimport localOptions from './local-options';\nimport { listenerMap } from './listener-map';\nimport {\n primaryYAxisUpdated,\n primaryXAxisUpdated,\n secondaryXAxisUpdated,\n secondaryYAxisUpdated,\n DATADOMAIN,\n TIMEDIFFS\n} from './enums/reactive-props';\nimport { PROPS } from './props';\nimport UnitFireBolt from './firebolt';\nimport './styles.scss';\n\nconst FORMAL_NAME = 'unit';\n\n/**\n * @module VisualUnit\n * A hierarchical component of renderer which manages multiple layers. This logical\n * module is responsible for layouting layers, attach axis with them, resolving conflicts of layers.\n */\n\n/**\n * Basic unit implementaiton\n * @class VisualUnit\n */\nexport default class VisualUnit {\n\n /**\n * Creates instance of visualization unit\n * @param registry {Object} Component registry\n * @param dependencies {Object} Dependencies required by visual unit.\n */\n constructor (registry, dependencies) {\n this._id = getUniqueId();\n this._dependencies = dependencies;\n this._layerDeps = {\n throwback: new Store({\n onlayerdraw: false\n }),\n smartLabel: dependencies.smartLabel\n };\n this._renderedResolve = null;\n this._renderedPromise = new Promise((resolve) => {\n this._renderedResolve = resolve;\n });\n this._layerDeps.throwback.registerChangeListener([CommonProps.ON_LAYER_DRAW], () => {\n this._renderedResolve();\n this._lifeCycleManager.notify({ client: this.layers(), action: 'drawn', formalName: 'layer' });\n });\n\n this._lifeCycleManager = dependencies.lifeCycleManager;\n this._layersMap = {};\n this._gridlines = [];\n this._gridbands = [];\n this._layerAxisIndex = {};\n this._transformedDataModels = {};\n\n layerFactory.setLayerRegistry(registry.layerRegistry);\n generateGetterSetters(this, PROPS);\n this.cachedData([]);\n this.store(new Store({\n [primaryXAxisUpdated]: null,\n [primaryYAxisUpdated]: null,\n [secondaryXAxisUpdated]: null,\n [secondaryYAxisUpdated]: null\n }));\n transactor(this, localOptions, this.store().model);\n this.firebolt(new UnitFireBolt(this, {\n physical: physicalActions,\n behavioural: behaviouralActions,\n physicalBehaviouralMap: actionBehaviourMap\n }, sideEffects, behaviourEffectMap));\n registerListeners(this, listenerMap);\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof VisualUnit\n */\n static formalName () {\n return FORMAL_NAME;\n }\n\n /**\n * Static helper for creates a unit instance\n *\n * @param {Object} [id] optional unique identifier for a unit; , id is calculated internally\n * @param {DataModel} data instance of datamodel\n * @param {Array.} layers layer configuration\n * @param {Object} config configurtion for the visual unit\n * @return {VisualUnit} Instance of a unit\n */\n static create (...params) {\n return new this(...params);\n }\n\n /**\n *\n *\n * @readonly\n * @memberof VisualUnit\n */\n firebolt (...firebolt) {\n if (firebolt.length) {\n this._firebolt = firebolt[0];\n return this;\n }\n return this._firebolt;\n }\n\n /**\n * Gets the domain for all axes of this visual unit.\n * @return {Object} Domains of each data field.\n */\n getDataDomain () {\n return this.store().get(DATADOMAIN);\n }\n\n /**\n * Retrieves the id created for this instance of visual unit\n * @return {string} id associated with the instance\n */\n id () {\n return this._id;\n }\n\n /**\n *\n *\n * @returns\n * @memberof VisualUnit\n */\n lockModel () {\n this._store.model.lock();\n return this;\n }\n\n /**\n *\n *\n * @returns\n * @memberof VisualUnit\n */\n unlockModel () {\n this._store.model.unlock();\n return this;\n }\n\n timeDiffsByField (...params) {\n if (params.length) {\n return this;\n }\n return this._timeDiffsByField;\n }\n\n /**\n * Renders the visual unit. It creates the layout and renders the axes and layers.\n * @return {VisualUnit} Instance of visual unit.\n */\n render (container) {\n const config = this.config();\n const { className, defClassName, sideEffectClassName, classPrefix } = config;\n const qualifiedClassName = getQualifiedClassName(defClassName, this.id(), config.classPrefix);\n const width = this.width();\n const height = this.height();\n const containerSelection = selectElement(container).style('position', 'relative');\n\n this._rootSvg = makeElement(containerSelection, 'svg', [null], className)\n .style('width', `${width}px`).style('height', `${height}px`);\n\n const node = this._rootSvg.node();\n setAttrs(node, {\n width,\n height,\n class: qualifiedClassName.join(' ')\n });\n renderGridLineLayers(this, node);\n renderLayers(this, node, this.layers(), {\n width,\n height\n });\n this._sideEffectGroup = createSideEffectGroup(node, `${classPrefix}-${sideEffectClassName}`);\n return this;\n }\n\n done () {\n return this._renderedPromise;\n }\n /**\n *\n *\n * @returns\n * @memberof VisualUnit\n */\n enableCaching () {\n this._cache = true;\n return this;\n }\n\n /**\n *\n *\n * @returns\n * @memberof VisualUnit\n */\n clearCaching () {\n this._cache = false;\n this.cachedData([this.cachedData()[0]]);\n return this;\n }\n\n /**\n *\n *\n * @returns\n * @memberof VisualUnit\n */\n getDrawingContext () {\n const rootSvg = this._rootSvg && this._rootSvg.node();\n const width = this.width();\n const height = this.height();\n return {\n htmlContainer: this.mount(),\n svgContainer: rootSvg,\n width,\n height,\n sideEffectGroup: this._sideEffectGroup,\n parentContainer: this.parentContainer(),\n xOffset: 0,\n yOffset: 0\n };\n }\n\n /**\n * Returns the serialized configuration of visual unit.\n * @return {Object} serialized configuration\n */\n serialize () {\n return {\n layers: this.layers().map(layer => layer.serialize()),\n config: this.config(),\n axes: this.store().get('axes').map(axis => axis.serialize())\n };\n }\n\n /**\n *\n *\n * @param {*} layerDef\n * @returns\n * @memberof VisualUnit\n */\n addLayer (layerDef) {\n const layerName = layerDef.name;\n const layer = this.getLayerByName(layerName);\n const measurement = {\n width: this.width(),\n height: this.height()\n };\n\n if (layer) {\n return [layer];\n }\n const serializedDef = layerFactory.getSerializedConf(layerDef.mark, layerDef);\n const instances = Object.values(getLayerFromDef(this, serializedDef));\n this.layers().push(...instances);\n const layerAxisIndex = getLayerAxisIndex(instances, this.fields());\n this._layerAxisIndex = Object.assign(this._layerAxisIndex, layerAxisIndex);\n attachAxisToLayers(this.axes(), instances, layerAxisIndex);\n const store = { unit: this, layers: {} };\n this.layers().forEach((inst) => {\n store.layers[inst.alias()] = inst;\n });\n instances.forEach((lyr) => {\n resolveEncodingTransform(lyr, store);\n lyr.measurement(measurement);\n lyr.dataProps({\n timeDiffs: this.store().get(TIMEDIFFS)\n });\n });\n return instances;\n }\n\n /**\n *\n *\n * @returns\n * @memberof VisualUnit\n */\n remove () {\n const lifeCycleManager = this._dependencies.lifeCycleManager;\n lifeCycleManager.notify({ client: this, action: 'beforeremove', formalName: 'unit' });\n this.store().unsubscribeAll();\n selectElement(this.mount()).remove();\n this.firebolt().remove();\n // Remove layers\n lifeCycleManager.notify({ client: this.layers(), action: 'beforeremove', formalName: 'layer' });\n this.layers().forEach(layer => layer.remove());\n lifeCycleManager.notify({ client: this.layers(), action: 'removed', formalName: 'layer' });\n lifeCycleManager.notify({ client: this, action: 'removed', formalName: 'unit' });\n return this;\n }\n\n /**\n *\n *\n * @param {*} identifiers\n * @returns\n * @memberof VisualUnit\n */\n getDataModelFromIdentifiers (identifiers, mode, parentModel) {\n if (identifiers === null) {\n return null;\n }\n const dataModel = parentModel || this.data();\n return getDataModelFromIdentifiers(dataModel, identifiers, mode);\n }\n\n /**\n *\n *\n * @returns\n * @memberof VisualUnit\n */\n resetData () {\n this.data(this.cachedData()[0]);\n return this;\n }\n\n /**\n *\n *\n * @returns\n * @memberof VisualUnit\n */\n getSourceInfo () {\n return {\n dimensionMeasureMap: this._dimensionMeasureMap,\n fields: this.fields(),\n data: this.data(),\n axes: this.axes()\n };\n }\n\n /**\n *\n *\n * @returns\n * @memberof VisualUnit\n */\n getDefaultTargetContainer () {\n const { classPrefix, defClassName } = this.config();\n return [`.${classPrefix}-${defClassName}`];\n }\n\n /**\n *\n *\n * @param {*} type\n * @returns\n * @memberof VisualUnit\n */\n getLayersByType (type) {\n const layers = getLayersBy(this.layers(), 'type', type);\n return layers;\n }\n\n /**\n *\n *\n * @param {*} name\n * @returns\n * @memberof VisualUnit\n */\n getLayerByName (name) {\n const layers = getLayersBy(this.layers(), 'name', name);\n return layers[0];\n }\n\n /**\n *\n *\n * @param {*} domain\n * @returns\n * @memberof VisualUnit\n */\n updateAxisDomain (domain) {\n ['x', 'y'].forEach((type) => {\n const axes = this.axes()[type];\n let min = [];\n let max = [];\n let dom;\n axes && axes.forEach((axis, i) => {\n const field = this.fields()[type][i];\n dom = domain[`${this.fields()[type][i]}`];\n\n if (field.type() !== FieldType.DIMENSION && dom) {\n min[i] = dom[0];\n max[i] = dom[1];\n }\n });\n if (axes) {\n if (axes.length > 1) {\n const axisConf = axes[0].config();\n if (axes[0].constructor.type() === 'linear') {\n if (axisConf.alignZeroLine) {\n axes.forEach(axis => axis.config({\n nice: false\n }));\n const adjustedDomain = getAdjustedDomain(max, min);\n min = adjustedDomain.min;\n max = adjustedDomain.max;\n }\n\n axes[0].updateDomainCache([min[0], max[0]]);\n axes[1].updateDomainCache([min[1], max[1]]);\n } else {\n axes[0].updateDomainCache(dom);\n axes[1].updateDomainCache(dom);\n }\n } else {\n axes[0].updateDomainCache(dom);\n }\n }\n });\n return this;\n }\n\n /**\n * Finds the nearest point closest to the x and y position.\n * @param {number} x x position.\n * @param {number} y y position.\n * @return {Object} Nearest point.\n */\n getNearestPoint (x, y, args) {\n let pointObj = {\n id: null\n };\n const dimValue = getNearestDimensionalValue(this, {\n x,\n y\n });\n\n if (dimValue !== null && args.getAllPoints) {\n pointObj.id = dimValue;\n const pointInf = this.getMarkInfFromLayers(x, y, args);\n pointObj.target = pointInf && pointInf.id ? pointInf.id : pointObj.id;\n return pointObj;\n }\n\n const markInf = this.getMarkInfFromLayers(x, y, args) || { id: null };\n pointObj = Object.assign({}, markInf);\n\n pointObj.target = markInf.id;\n return pointObj;\n }\n\n getMarkInfFromLayers (x, y, args) {\n const layers = this.layers();\n const len = layers.length;\n let point = null;\n // Iterate through the layers array and fetch the nearest point from each layer. If a valid\n // nearest point is found from any layer, then return that point.\n for (let i = 0; i < len; i++) {\n const layer = layers[i];\n const config = layer.config();\n if (config.interactive !== false) {\n point = layer.getNearestPoint(x, y, args);\n }\n if (point) {\n return point;\n }\n }\n return point;\n }\n\n /**\n *\n *\n * @param {*} identifiers\n * @returns\n * @memberof VisualUnit\n */\n getPlotPointsFromIdentifiers (identifiers, config = {}) {\n let points = [];\n let parsedIdentifiers = identifiers;\n if (identifiers === null) {\n return [];\n }\n const layers = this.layers();\n const len = layers.length;\n if (isSimpleObject(identifiers)) {\n parsedIdentifiers = [Object.keys(identifiers)];\n parsedIdentifiers = [...parsedIdentifiers, ...transposeArray(Object.values(identifiers))];\n }\n for (let i = 0; i < len; i++) {\n const layer = layers[i];\n if (layer.config().interactive !== false) {\n points = [...points, ...layer.getPointsFromIdentifiers(parsedIdentifiers, config)];\n }\n }\n return points;\n }\n\n /**\n *\n *\n * @param {*} name\n * @returns\n * @memberof VisualUnit\n */\n removeLayerByName (name) {\n removeLayersBy('name', name);\n return this;\n }\n\n /**\n *\n *\n * @param {*} type\n * @returns\n * @memberof VisualUnit\n */\n removeLayersByType (type) {\n removeLayersBy('type', type);\n return this;\n }\n\n parentContainer (...container) {\n if (container.length) {\n this._parentContainer = container[0];\n\n return this;\n }\n return this._parentContainer;\n }\n}\n","import { DataModel } from 'muze-utils';\n\nimport { retriveDomainFromData } from './group-utils';\n\n/**\n * Gets name of fields form the variables\n *\n * @param {*} fields1\n * @param {*} [fields2=[]]\n * @return\n */\nconst getFieldNames = (fields1, fields2 = []) => [fields1, fields2].map(fields => fields.reduce((acc, d) => {\n acc = [...acc, ...d.getMembers()];\n return acc;\n}, []));\n\n/**\n * Creates a selected datamodel from a parent datamodel and a set of field names\n *\n * @param {Object} datamodel provided as input\n * @param {Array} fieldNames schema names\n * @param {Array} fieldValues values of those schema names to be selected\n * @return {Object} creates a new selected datamodel\n */\nconst createSelectedDataModel = (datamodel, fieldNames, fieldValues) =>\n datamodel.select(fields => fieldNames.every((field, k) => fields[field].value === fieldValues[k]));\n\n/**\n *\n *\n * @param {*} facets\n * @param {*} keyArray\n * @return\n */\nconst uniqueKeyGenerator = (keyArray, context, depth = 0, val = []) => {\n const {\n facets,\n dataModel,\n uniqueValues\n } = context;\n\n // Get unique keys for the next depth recursively if required\n if (facets[depth + 1]) {\n const field = facets[depth];\n uniqueValues.forEach((value) => {\n const newDm = dataModel.select(fields => fields[field].value === value);\n const nextDepthUniqueValues = retriveDomainFromData(newDm, facets[depth + 1]);\n const newContext = {\n facets,\n dataModel: newDm,\n uniqueValues: nextDepthUniqueValues\n };\n\n uniqueKeyGenerator(keyArray, newContext, depth + 1, [...val, value]);\n });\n } else {\n uniqueValues.forEach((value) => {\n keyArray.push([...val, value]);\n });\n }\n};\n\n/**\n * projects row model based on the set of row and/or column and other projection fields\n *\n * @param {Object} datamodel provided as input\n * @return {Object} Projected datamodel\n */\nconst projectRows = (datamodel, projections) => {\n const {\n allColumnProjections,\n rowProjections,\n optionalProjections\n } = projections;\n\n if (rowProjections.length > 0) {\n return rowProjections.map((projectFields) => {\n const [projFieldNames, colProjFieldNames] = getFieldNames(projectFields, allColumnProjections);\n return datamodel.project([...projFieldNames, ...colProjFieldNames, ...optionalProjections]);\n });\n }\n return [datamodel];\n};\n\n/**\n * Adds the datamodels to current row index based on column fields\n *\n * @param {Array} context current context\n * @param {Array} callback List of facets applied to the current datamodel\n */\nconst pushToMatrix = (context, callback) => {\n let cells = [];\n const {\n matrix,\n datamodel,\n facetInfo,\n fieldInfo\n } = context;\n // Get projected fields for current row\n const {\n rowProjections,\n colProjections,\n optionalProjections\n } = fieldInfo;\n const {\n rowIndex,\n columnIndex\n } = facetInfo;\n const rowProj = rowProjections[(rowIndex) % rowProjections.length] || [];\n\n // Get the cells for the matrix from the return function of the callback on the datamodel.\n // callback function -> (datamodel, {projections, indices}, facets)\n if (colProjections.length > 0) {\n cells = colProjections.map((projectFields, projIdx) => {\n const [colProjFieldNames, rowProjFieldNames] = getFieldNames(projectFields, rowProj);\n const projectedDm = datamodel.project([...colProjFieldNames, ...rowProjFieldNames, ...optionalProjections]);\n const projections = { rowFields: rowProj, columnFields: projectFields };\n const indices = { rowIndex, columnIndex: columnIndex * colProjections.length + projIdx };\n\n return callback(projectedDm, { projections, indices }, facetInfo);\n });\n } else {\n const projections = { rowFields: rowProj, columnFields: [] };\n const indices = { rowIndex, columnIndex };\n\n cells = [callback(datamodel, { projections, indices }, facetInfo)];\n }\n\n matrix[rowIndex] = matrix[rowIndex] || [];\n matrix[rowIndex].push(...cells);\n};\n\n/**\n * Gets Matrixes for corresponding datamodel, facets and projections\n *\n * @param {Object} dataModel input datamodel\n * @param {Object} fieldMap corresponding fieldmap\n * @param {Array} facetsAndProjections contains the set of facets and projections for the matrices\n * @param {Function} callback Callback executed after datamodels are prepared after sel/proj\n * @return {Object} set of matrices with the corresponding row and column keys\n */\nexport const getMatrixModel = (dataModel, fieldInfo, callback) => {\n let rowDataModels = [];\n const rowKeys = [];\n const columnKeys = [];\n const allColumnProjections = [];\n const matrix = [];\n const facetInfo = [];\n const {\n rowFacets,\n colFacets,\n colProjections\n } = fieldInfo;\n\n colProjections.forEach((colProj) => {\n allColumnProjections.push(...colProj);\n });\n fieldInfo.allColumnProjections = allColumnProjections;\n\n // Performing row selection and projection\n if (rowFacets.length > 0) {\n // Get unique values for the root level of facet\n const field = rowFacets[0].toString();\n const firstLevelRowKeys = retriveDomainFromData(dataModel, field);\n\n // Get unique keys in the form of an array of arrays for each row\n uniqueKeyGenerator(rowKeys, { facets: rowFacets, dataModel, uniqueValues: firstLevelRowKeys });\n\n // Apply selection -> projection -> row datamodels\n rowKeys.forEach((val) => {\n // Create faceted datamodel\n const [rowFacetFieldNames] = getFieldNames(rowFacets);\n const selectedDataModel = createSelectedDataModel(dataModel, rowFacetFieldNames, val);\n\n // Project the datamodel based on the number of projections (based on last levels)\n facetInfo.push([rowFacets, val]);\n rowDataModels.push(...projectRows(selectedDataModel, fieldInfo));\n });\n } else {\n // No row facets, hence only row projection\n rowDataModels.push(...projectRows(dataModel, fieldInfo));\n }\n\n // Maintaining set of row datamodels for column resolution\n rowDataModels = rowDataModels.length > 0 ? rowDataModels : [[]];\n\n // Performing column selection and projection\n if (colFacets.length > 0) {\n const colFacetNames = colFacets.map(d => `${d}`);\n // Get unique values for the root level of facet\n const field = colFacetNames[0];\n const firstLevelColumnKeys = retriveDomainFromData(dataModel, field);\n\n // Get unique keys to create faceted datamodels: this time for columns\n uniqueKeyGenerator(columnKeys, {\n facets: colFacetNames,\n dataModel,\n uniqueValues: firstLevelColumnKeys\n });\n\n // For each row in the datamodel, apply selection -> projection -> push the projection to matri\n rowDataModels.forEach((dme, rIndex) => {\n facetInfo[rIndex] = facetInfo[rIndex] || [[], []];\n columnKeys.forEach((val, cIndex) => {\n matrix[rIndex] = matrix[rIndex] || [];\n\n // If datamodel is not present in current row, choose parent datamodel\n const datamodel = dme instanceof DataModel ? dme : dataModel;\n\n // Selection is made on the datamodel for the current row\n const selectedDataModel = createSelectedDataModel(datamodel, colFacetNames, val);\n const context = {\n matrix,\n datamodel: selectedDataModel,\n facetInfo: {\n rowFacets: facetInfo[rIndex],\n colFacets: [colFacets, val],\n rowIndex: rIndex,\n columnIndex: cIndex\n },\n fieldInfo\n };\n pushToMatrix(context, callback);\n });\n });\n } else {\n // No column facets, hence only row projection\n rowDataModels.forEach((dme, rIndex) => {\n facetInfo[rIndex] = facetInfo[rIndex] || [[], []];\n const context = {\n matrix,\n datamodel: dme || dataModel,\n facetInfo: {\n rowFacets: facetInfo[rIndex],\n colFacets: [[], []],\n rowIndex: rIndex,\n columnIndex: 0\n },\n fieldInfo\n };\n\n pushToMatrix(context, callback);\n });\n }\n\n // Getting column keys\n const transposedColKeys = columnKeys.length > 0 ? columnKeys[0].map((col, i) =>\n columnKeys.map(row => row[i])) : columnKeys;\n\n return { matrix, rowKeys, columnKeys: transposedColKeys };\n};\n","import { AxisOrientation } from '@chartshq/muze-axis';\nimport { getObjProp, FieldType } from 'muze-utils';\nimport { getMatrixModel } from './matrix-model';\nimport {\n getCellKey,\n isDistributionEqual,\n mutateAxesFromMap,\n createSelection,\n getFieldsFromSuppliedLayers,\n extractFields\n} from './group-utils';\nimport { ROW, ROWS, COLUMNS, COL, LEFT, RIGHT, TOP, BOTTOM, PRIMARY, SECONDARY, X, Y } from '../enums/constants';\n\n/**\n * Updates row and column cells with the geom cell corresponding to the facet keys\n *\n * @param {*} resolver\n * @param {*} facets\n */\nconst updateCells = (resolver, facets, geomCell) => {\n [ROW, COL].forEach((field) => {\n const cells = resolver[`${field}Cells`]();\n const facetKey = facets[`${field}Facets`][1].join();\n\n !cells[facetKey] && (cells[facetKey] = []);\n cells[facetKey].push(geomCell);\n resolver[`${field}Cells`](cells);\n });\n};\n\n/**\n *\n *\n * @param {*} context\n * @param {*} datamodel\n * @param {*} fieldInfo\n * @param {*} facets\n * @return\n */\nexport const createValueCells = (context, datamodel, fieldInfo, facets) => {\n const {\n projections,\n indices\n } = fieldInfo;\n const {\n rowFields,\n columnFields\n } = projections;\n const {\n rowIndex,\n columnIndex\n } = indices;\n const {\n suppliedLayers,\n cell: GeomCell,\n resolver,\n config,\n encoder,\n detailFields\n } = context;\n const axes = resolver.axes();\n const cacheMaps = resolver.cacheMaps();\n const matrixLayers = resolver.matrixLayers();\n const labelManager = resolver.dependencies().smartlabel;\n const horizontalAxis = resolver.horizontalAxis();\n const verticalAxis = resolver.verticalAxis();\n const datamodelTransform = resolver.datamodelTransform();\n const {\n entryCellMap,\n exitCellMap\n } = cacheMaps;\n const layerConfigArr = encoder.getLayerConfig({ columnFields, rowFields }, suppliedLayers || []);\n const axesCreators = { config, labelManager, axes, cacheMaps };\n\n fieldInfo.normalizedColumns = verticalAxis.fields;\n fieldInfo.normalizedRows = horizontalAxis.fields;\n\n const groupAxes = encoder.createAxis(axesCreators, fieldInfo);\n\n matrixLayers[rowIndex] = matrixLayers[rowIndex] ? matrixLayers[rowIndex] : [];\n matrixLayers[rowIndex][columnIndex] = layerConfigArr;\n\n // return from map if already there otherwise create and put in map\n const geomCellKey = getCellKey(rowIndex, columnIndex);\n const fields = {\n y: rowFields,\n x: columnFields\n };\n const allFacets = [\n [...facets.rowFacets[0], ...facets.colFacets[0]],\n [...facets.rowFacets[1], ...facets.colFacets[1]]\n ];\n const geomCell = !exitCellMap.has(geomCellKey) ? new GeomCell() : exitCellMap.get(geomCellKey);\n\n geomCell.data(datamodel)\n .axes(groupAxes)\n .fields(fields)\n .transform(datamodelTransform)\n .detailFields(detailFields)\n .facetByFields(allFacets);\n entryCellMap.set(geomCellKey, geomCell);\n exitCellMap.delete(geomCellKey);\n\n updateCells(resolver, facets, geomCell);\n\n return entryCellMap.get(geomCellKey);\n};\n\n/**\n * Creates axis cells based on the set of axes\n *\n * @param {Selection} selection Contains a selection of the axis units\n * @param {Array} axes Actual axis units\n * @param {number} axisIndex 0-> primary axis, 1-> secondary axis(when dual axis is made)\n * @param {Object} cells Contains a collection of the cells\n * @return {Object} return either set of axis/blank cells depending on the config\n */\n\nconst createAxisCells = (selection, axes, axisIndex, cells) =>\n createSelection(selection, axis => axis, axes, (item, i) => i + item.reduce((e, n) => {\n const id = n.id + axisIndex;\n return e + id;\n }, '')).map((axis) => {\n if (axis && axis[axisIndex]) {\n const axisInst = axis[axisIndex];\n const { orientation, show } = axisInst.config();\n\n return new cells.AxisCell().source(axisInst).config({\n isOffset: orientation === AxisOrientation.LEFT || orientation === AxisOrientation.TOP,\n show\n });\n }\n return new cells.BlankCell().config({ show: false });\n });\n\n/**\n *\n *\n * @param {*} context\n * @param {*} selectionObj\n * @param {*} cells\n * @retur\n */\nconst axisPlaceholderGn = (context, selObj, cells) => {\n const {\n matrices\n } = context;\n const {\n axesMatrix\n } = matrices;\n\n return (type, axisFrom) => {\n const axes = axesMatrix[`${type}`];\n\n if (axes && axes.length) {\n if (type === X || type === Y) {\n const fieldNames = type === Y ? ROWS : COLUMNS;\n\n [PRIMARY, SECONDARY].forEach((fieldType, index) => {\n const selObjProp = `${fieldNames}${fieldType}`;\n let axisIndex = index;\n let axesForDraw = axes;\n if (axisFrom === RIGHT || axisFrom === BOTTOM) {\n axisIndex = 1 - axisIndex;\n }\n if (!getObjProp(axes, 0, axisIndex)) {\n axesForDraw = [];\n }\n selObj[selObjProp] = createAxisCells(selObj[selObjProp], axesForDraw, axisIndex, cells);\n });\n } else {\n selObj.rowsPrimary = createAxisCells(selObj.rowPrime, axes.map(() => []), 0, cells);\n selObj.columnsPrimary = createAxisCells(selObj.colPrime, axes[0], 0, cells);\n }\n }\n return selObj;\n };\n};\n\n/**\n * Creates header cells based on the set of headers\n *\n * @param {Object} selection Contains a selection of the header units\n * @param {string} headers Contains a list of the headers\n * @param {Object} cells Contains a collection of the cells\n * @param {Object} labelManager smart label instance\n * @return {Object} return either set of header cells depending on the config\n */\nconst createTextCells = (selection, headers, cells, labelManager) => createSelection(selection,\n label => new cells.TextCell({}, { labelManager }).source(label), headers, (key, i) => key + i);\n\n/**\n *\n *\n * @param {*} context\n * @param {*} selectionObj\n * @param {*} cells\n * @param {*} labelManager\n * @return\n */\nconst headerPlaceholderGn = (context, selectionObj, cells, labelManager) => {\n const {\n axis,\n keys,\n type,\n facetConfig\n } = context;\n const counter = axis.length / keys.length;\n const selectionKeys = keys.length ? axis.map((d, i) => keys[Math.floor(i / counter)]) : [];\n return createSelection(selectionObj[`${type}Headers`], keySet => keySet, selectionKeys, (keySet, i) =>\n `${keySet.join(',')}-${i}`).map(keySet => createTextCells(null, keySet, cells, labelManager)\n .map((cell, k, i) => cell.source(keySet[i]).config(facetConfig || {})));\n};\n\n/**\n * Creates a set of placeholders as a part of selection object\n *\n * @param {Array} normalizedOptions contains normalized rows and columns\n * @param {Array} matrices contains axis and value matrices\n * @param {aArrayny} projections contains set of row and column projections\n * @param {Object} cells Contains a collection of the cells\n * @param {Object} labelManager smart label instance\n * @return {Object} Creates a set of placeholders as a part of selections\n */\nconst generatePlaceholders = (context, cells, labelManager) => {\n let selectionObj;\n const {\n matrices,\n fields,\n facetsAndProjections,\n selection,\n facetConfig,\n encoders\n } = context;\n const {\n rows,\n columns\n } = fields;\n const {\n valuesMatrix\n } = matrices;\n const {\n rowProjections,\n colProjections\n } = facetsAndProjections;\n const {\n rowKeys,\n columnKeys\n } = valuesMatrix;\n const takeAxisFrom = encoders.simpleEncoder._axisFrom;\n const takeHeaderFrom = encoders.simpleEncoder._headerFrom;\n\n selectionObj = selection || {};\n\n ['pie', X, Y].forEach((axis) => {\n const axisFrom = axis === X ? takeAxisFrom.column : takeAxisFrom.row;\n selectionObj = axisPlaceholderGn(context, selectionObj, cells)(axis, axisFrom);\n });\n\n const {\n rowsPrimary,\n rowsSecondary,\n columnsPrimary,\n columnsSecondary\n } = selectionObj;\n\n const rowAxis = rowsPrimary && rowsPrimary.getObjects().length ? rowsPrimary.getObjects() :\n (rowsSecondary && rowsSecondary.getObjects().length ? rowsSecondary.getObjects() : []);\n const colAxis = columnsPrimary && columnsPrimary.getObjects().length ? columnsPrimary.getObjects() :\n (columnsSecondary && columnsSecondary.getObjects().length ? columnsSecondary.getObjects() : []);\n\n const headerConfig = [\n { type: LEFT, section: rows[0], axis: rowAxis, headerFrom: takeHeaderFrom.row },\n { type: RIGHT, section: rows[1], axis: rowAxis, headerFrom: takeHeaderFrom.row },\n { type: TOP, section: columns[0], axis: colAxis, headerFrom: takeHeaderFrom.column },\n { type: BOTTOM, section: columns[1], axis: colAxis, headerFrom: takeHeaderFrom.column }\n ];\n\n headerConfig.forEach((config, index) => {\n let keys;\n let length;\n const {\n type,\n section,\n axis,\n headerFrom\n } = config;\n\n if (index < 2) {\n keys = rowKeys;\n length = rowProjections.length > 0 ? rowProjections.length : 1;\n } else {\n keys = columnKeys;\n length = colProjections.length > 0 ? colProjections.length : 1;\n }\n\n if (section.length && headerFrom === type && axis && keys.length) {\n const hContext = { axis, length, type };\n let headers = [];\n if (index < 2) {\n hContext.keys = keys;\n hContext.facetConfig = facetConfig.rows;\n headers = headerPlaceholderGn(hContext, selectionObj, cells, labelManager);\n } else {\n hContext.facetConfig = facetConfig.columns;\n hContext.keys = keys[0].map((key, i) => keys.map(e => e[i]));\n headers = headerPlaceholderGn(hContext, selectionObj, cells, labelManager);\n }\n selectionObj[`${type}Headers`] = headers;\n } else {\n selectionObj[`${type}Headers`] = null;\n }\n });\n return selectionObj;\n};\n\n/**\n * Generates matrices\n *\n * @param {Object} config Configuration to generate matrices\n * @param {Array} matrices Matrices containing the set of visual units and axes units\n * @param {Object} cells Contains a collection of the cells\n * @param {Object} labelManager smart label instance\n * @return {Object} contains a collection of matrices\n */\nexport const generateMatrices = (context, matrices, cells, labelManager) => {\n const {\n unitHeight,\n unitWidth,\n facetsAndProjections,\n normalizedRows,\n normalizedColumns,\n selection,\n axisFrom,\n facetConfig,\n encoders\n } = context;\n const placeholderContext = {\n fields: {\n rows: normalizedRows,\n columns: normalizedColumns\n },\n matrices,\n facetsAndProjections,\n selection,\n axisFrom,\n facetConfig,\n encoders\n };\n // Generate placeholders for all matrices\n const selectionObj = generatePlaceholders(placeholderContext, cells, labelManager);\n const {\n columnsPrimary,\n columnsSecondary,\n rowsPrimary,\n rowsSecondary,\n leftHeaders,\n topHeaders,\n bottomHeaders,\n rightHeaders\n } = selectionObj;\n const [rowPrime, rowSec, colPrime, colSec] = [rowsPrimary, rowsSecondary, columnsPrimary, columnsSecondary]\n .map(d => (d ? d.getObjects() : []));\n const [leftFacets, rightFacets] = [leftHeaders, rightHeaders].map(e => (e ? e.getObjects()\n .map(f => f.getObjects()) : []));\n\n // Compute left matrix using left headers and the axes on the rows\n let leftMatrix = leftFacets.length ? leftFacets.map((d, i) => {\n rowPrime[i] = rowPrime[i] ? [rowPrime[i]] : [];\n return [...d, ...rowPrime[i]];\n }) : (rowPrime ? rowPrime.map(d => [d]) : []);\n\n // Compute right matrix using right headers and the axes on the rows\n const rightMatrix = rowSec.length ? rowSec.map((d, i) => [d, ...(rightFacets[i] || [])]) : (rightFacets.length ?\n rightFacets.map(d => [...d]) : []);\n\n const topMatrix = [];\n if (topHeaders) {\n const headers = topHeaders.getObjects();\n headers.forEach((e) => {\n const innerHeaders = e.getObjects();\n innerHeaders.forEach((x, i) => {\n topMatrix[i] = topMatrix[i] || [];\n topMatrix[i].push(x);\n });\n });\n }\n // Compute top matrix using the top headers and axes on the columns\n if (colPrime.length) {\n topMatrix.push(colPrime);\n }\n\n // Bottom and right matrices are prepared using the user config.\n let bottomMatrix = [];\n if (colSec.length) {\n bottomMatrix.push(colSec);\n }\n const currentBottomLength = bottomMatrix.length;\n if (bottomHeaders) {\n const headers = bottomHeaders.getObjects();\n headers.forEach((e) => {\n const innerHeaders = e.getObjects();\n innerHeaders.forEach((x, i) => {\n bottomMatrix[i + currentBottomLength] = bottomMatrix[i + currentBottomLength] || [];\n bottomMatrix[i + currentBottomLength].push(x);\n });\n });\n }\n\n if (!leftMatrix.length && !rightMatrix.length) {\n const cell = new cells.BlankCell();\n cell.setAvailableSpace(unitWidth, unitHeight);\n leftMatrix = [[cell]];\n }\n\n if (!topMatrix.length && (!bottomMatrix.length || !bottomMatrix[0].length)) {\n const cell = new cells.BlankCell();\n cell.setAvailableSpace(unitWidth, unitHeight);\n bottomMatrix = [[cell]];\n }\n\n return {\n rows: [leftMatrix, rightMatrix],\n columns: [topMatrix, bottomMatrix],\n selectionObj\n };\n};\n\n/**\n * Computes matrices for a group\n *\n * @param {Object} datamodel on which the matrices are to be computed\n * @param {Object} config configuration of the matrices\n * @param {Object} layerRegistry contains the registered layers\n * @return {Object} conputed matrices\n * @memberof MatrixResolver\n */\nexport const computeMatrices = (context, config) => {\n const {\n resolver,\n datamodel,\n componentRegistry,\n encoders\n } = context;\n const {\n globalConfig,\n selection,\n transform\n } = config;\n const groupBy = globalConfig.autoGroupBy;\n const { smartlabel: labelManager } = resolver.dependencies();\n const fieldMap = datamodel.getFieldsConfig();\n const layerConfig = resolver.layerConfig();\n const registry = resolver.registry();\n const { fields: normalizedRows } = resolver.horizontalAxis();\n const { fields: normalizedColumns } = resolver.verticalAxis();\n const otherEncodings = resolver.optionalProjections(config, layerConfig);\n const facetsAndProjections = resolver.getAllFields();\n const matrixGnContext = {\n // Configuration to be passed to generate the different matrices.\n // A common config is used for both value matrices and other matrices\n normalizedColumns,\n normalizedRows,\n facetsAndProjections,\n layers: layerConfig,\n fieldMap,\n otherEncodings,\n encoders,\n facetConfig: globalConfig.facetConfig || {},\n axisFrom: globalConfig.axisFrom || {},\n selection\n };\n const cells = {\n GeomCell: resolver.getCellDef(registry.GeomCell),\n AxisCell: resolver.getCellDef(registry.AxisCell),\n BlankCell: resolver.getCellDef(registry.BlankCell),\n TextCell: resolver.getCellDef(registry.TextCell)\n };\n const isRowSizeEqual = isDistributionEqual(normalizedRows);\n const isColumnSizeEqual = isDistributionEqual(normalizedColumns);\n\n resolver.colCells({});\n resolver.rowCells({});\n resolver.datamodelTransform(transform || {});\n\n // Cell creation begins here\n resolver.resetSimpleAxes();\n\n const {\n entryCellMap\n } = resolver.cacheMaps();\n const newCacheMap = {\n exitCellMap: entryCellMap,\n entryCellMap: new Map()\n };\n\n resolver.cacheMaps(newCacheMap);\n\n const valueCellContext = {\n config: globalConfig,\n suppliedLayers: encoders.simpleEncoder.serializeLayerConfig(resolver.layerConfig()),\n resolver,\n cell: cells.GeomCell,\n encoder: encoders.simpleEncoder,\n newCacheMap,\n detailFields: config.detail\n };\n const fieldsConfig = datamodel.getFieldsConfig();\n let groupedModel = datamodel;\n if (!groupBy.disabled) {\n const fields = getFieldsFromSuppliedLayers(valueCellContext.suppliedLayers, datamodel.getFieldsConfig());\n const allFields = extractFields(facetsAndProjections, fields);\n\n const dimensions = allFields.filter(field =>\n fieldsConfig[field] && fieldsConfig[field].def.type === FieldType.DIMENSION);\n const aggregationFns = groupBy.measures;\n\n groupedModel = datamodel.groupBy(dimensions.length ? dimensions : [''], aggregationFns).project(allFields);\n }\n\n // return a callback function to create the cells from the matrix\n const cellCreator = resolver.valueCellsCreator(valueCellContext);\n // Creates value matrices from the datamodel and configs\n const valueMatrixInfo = getMatrixModel(groupedModel, facetsAndProjections, cellCreator);\n\n resolver.cacheMaps().exitCellMap.forEach((placeholder) => {\n placeholder.remove();\n });\n resolver.cacheMaps().exitCellMap.clear();\n resolver.valueMatrix(valueMatrixInfo.matrix);\n resolver.createUnits(componentRegistry, config);\n\n const { xAxes, yAxes } = mutateAxesFromMap(resolver.cacheMaps(), resolver.axes());\n\n resolver.axes({\n x: xAxes,\n y: yAxes\n });\n\n const matrices = {\n valuesMatrix: valueMatrixInfo,\n axesMatrix: resolver.axes()\n };\n // Create all matrices\n const { rows, columns, selectionObj } = generateMatrices(matrixGnContext, matrices, cells, labelManager);\n\n resolver.rowMatrix(rows);\n resolver.columnMatrix(columns);\n\n return {\n rows: resolver.rowMatrix(),\n columns: resolver.columnMatrix(),\n values: resolver.valueMatrix(),\n isColumnSizeEqual,\n isRowSizeEqual,\n selection: selectionObj,\n dataModels: {\n groupedModel,\n parentModel: datamodel\n }\n };\n};\n","import { VisualUnit } from '@chartshq/visual-unit';\nimport {\n initializeCacheMaps,\n headerCreator,\n extractUnitConfig,\n setFacetsAndProjections\n} from './group-utils';\nimport {\n ROW, COL, LEFT, RIGHT, COLOR, SIZE, SHAPE, DETAIL, CELL, X_AXES, Y_AXES, ENTRY_CELLS, EXIT_CELLS, INITIALIZED,\n AXIS, UNIT, BEFORE_UPDATE, UPDATED, VALUE_MATRIX, FACET_HEADERS\n} from '../enums/constants';\nimport { createValueCells, computeMatrices } from './cell-creator';\n/**\n * Resolves the matrices from configuration provided\n *\n * @export\n * @class MatrixResolver\n */\nexport default class MatrixResolver {\n\n /**\n * Creates an instance of MatrixResolver.\n * @param {Object} dependencies needed to run the resolver\n * @memberof MatrixResolver\n */\n constructor (dependencies) {\n this._registry = {};\n this._layerConfig = [];\n this._matrixLayers = [];\n this._dependencies = dependencies;\n this._rowMatrix = [];\n this._columnMatrix = [];\n this._valueMatrix = [];\n this._facets = {};\n this._projections = {};\n this._datamodelTransform = {};\n this._units = [];\n this._cacheMaps = {};\n this._axes = {\n x: {},\n y: {},\n color: [],\n size: [],\n shape: []\n };\n\n this.cacheMaps(initializeCacheMaps());\n }\n\n /**\n * Set: Registers placeholders, Get: return {Object} those placeholders\n *\n * @param {Object} placeholders cells that will construct the group\n * @return {Object} Either current instance or the set of placeholders\n * @memberof MatrixResolver\n */\n registry (...placeholders) {\n if (placeholders.length) {\n Object.entries(placeholders[0]).forEach((val) => {\n this._registry[val[0]] = val[1];\n });\n return this;\n }\n return this._registry;\n }\n\n /**\n * Used to set the layer config from outside or get current layer info\n *\n * @param {Object} type configuration of layer provided externally\n * @return {Object} either the layer or current instance\n * @memberof MatrixResolver\n */\n dependencies (...dep) {\n if (dep.length) {\n this._dependencies = dep[0];\n return this;\n }\n return this._dependencies;\n }\n\n /**\n * Used to set the layer config from outside or get current layer info\n *\n * @param {Object} type configuration of layer provided externally\n * @return {Object} either the layer or current instance\n * @memberof MatrixResolver\n */\n units (...unitArr) {\n if (unitArr.length) {\n this._units = unitArr[0];\n return this;\n }\n return this._units;\n }\n\n /**\n * Used to set the layer config from outside or get current layer info\n *\n * @param {Object} layer configuration of layer provided externally\n * @return {Object} either the layer or current instance\n * @memberof MatrixResolver\n */\n layerConfig (...config) {\n if (config.length) {\n this._layerConfig = config[0];\n return this;\n }\n return this._layerConfig;\n }\n\n /**\n * Used to set the layer config from outside or get current layer info\n *\n * @param {Object} type configuration of layer provided externally\n * @return {Object} either the layer or current instance\n * @memberof MatrixResolver\n */\n matrixLayers (...layers) {\n if (layers.length) {\n this._matrixLayers = layers[0];\n return this;\n }\n return this._matrixLayers;\n }\n\n /**\n * Used to set the layer config from outside or get current layer info\n *\n * @param {Object} type configuration of layer provided externally\n * @return {Object} either the layer or current instance\n * @memberof MatrixResolver\n */\n datamodelTransform (...transform) {\n if (transform.length) {\n this._datamodelTransform = transform[0];\n return this;\n }\n return this._datamodelTransform;\n }\n\n /**\n * Used to set the layer config from outside or get current layer info\n *\n * @param {Object} type configuration of layer provided externally\n * @return {Object} either the layer or current instance\n * @memberof MatrixResolver\n */\n cacheMaps (...maps) {\n if (maps.length) {\n [CELL, X_AXES, Y_AXES, ENTRY_CELLS, EXIT_CELLS].forEach((e) => {\n this._cacheMaps[`${e}Map`] = maps[0][`${e}Map`] || this._cacheMaps[`${e}Map`];\n });\n return this;\n }\n return this._cacheMaps;\n }\n\n /**\n * Used to set the layer config from outside or get current layer info\n *\n * @param {Object} type configuration of layer provided externally\n * @return {Object} either the layer or current instance\n * @memberof MatrixResolver\n */\n rowCells (...cells) {\n if (cells.length) {\n this._rowCells = cells[0];\n return this;\n }\n return this._rowCells;\n }\n\n /**\n * Used to set the layer config from outside or get current layer info\n *\n * @param {Object} type configuration of layer provided externally\n * @return {Object} either the layer or current instance\n * @memberof MatrixResolver\n */\n colCells (...cells) {\n if (cells.length) {\n this._colCells = cells[0];\n return this;\n }\n return this._colCells;\n }\n\n /**\n * Used to set the layer config from outside or get current layer info\n *\n * @param {Object} type configuration of layer provided externally\n * @return {Object} either the layer or current instance\n * @memberof MatrixResolver\n */\n axes (...axes) {\n if (axes.length) {\n this._axes = Object.assign({}, this._axes, axes[0]);\n return this;\n }\n return this._axes;\n }\n\n /**\n * Used to set the layer config from outside or get current layer info\n *\n * @param {Object} type configuration of layer provided externally\n * @return {Object} either the layer or current instance\n * @memberof MatrixResolver\n */\n rowMatrix (...rowMat) {\n if (rowMat.length) {\n this._rowMatrix = rowMat[0];\n return this;\n }\n return this._rowMatrix;\n }\n\n /**\n * Used to set the layer config from outside or get current layer info\n *\n * @param {Object} type configuration of layer provided externally\n * @return {Object} either the layer or current instance\n * @memberof MatrixResolver\n */\n columnMatrix (...colMat) {\n if (colMat.length) {\n this._columnMatrix = colMat[0];\n return this;\n }\n return this._columnMatrix;\n }\n\n /**\n * Used to set the layer config from outside or get current layer info\n *\n * @param {Object} type configuration of layer provided externally\n * @return {Object} either the layer or current instance\n * @memberof MatrixResolver\n */\n valueMatrix (...valMat) {\n if (valMat.length) {\n this._valueMatrix = valMat[0];\n return this;\n }\n return this._valueMatrix;\n }\n\n /**\n *\n *\n * @param {*} facets\n * @return\n * @memberof MatrixResolver\n */\n facets (...facets) {\n if (facets.length) {\n Object.entries(facets[0]).forEach((e) => {\n this._facets[e[0]] = e[1];\n });\n return this;\n }\n return this._facets;\n }\n\n /**\n *\n *\n * @param {*} projections\n * @return\n * @memberof MatrixResolver\n */\n projections (...projections) {\n if (projections.length) {\n Object.entries(projections[0]).forEach((e) => {\n this._projections[e[0]] = e[1];\n });\n return this;\n }\n return this._projections;\n }\n\n /**\n *\n *\n * @param {*} config\n * @param {*} layerConfig\n * @return\n * @memberof MatrixResolver\n */\n optionalProjections (config, layerConfig) {\n const otherEncodings = {};\n const optionalProjections = [];\n const otherEncodingTypes = [SIZE, COLOR, SHAPE];\n\n otherEncodingTypes.forEach((type) => {\n if (config[type] && config[type].field) {\n const enc = config[type];\n otherEncodings[type] = enc.field;\n optionalProjections.push(enc.field);\n }\n });\n\n if (config[DETAIL]) {\n optionalProjections.push(...config.detail);\n }\n\n if (layerConfig.length) {\n layerConfig.forEach((layer) => {\n if (layer.encoding) {\n Object.values(layer.encoding).forEach((enc) => {\n if (enc && optionalProjections.indexOf(enc.field) === -1) {\n optionalProjections.push(enc.field ? enc.field : enc);\n }\n });\n }\n });\n }\n this.projections({ optionalProjections });\n return otherEncodings;\n }\n\n /**\n * return the normalized set of rows and facets and projections\n *\n * @param {Object} rows parameters needed to set horizontal axis consisiting of rows\n * @return {Object} facets, projections and normalized rows\n * @memberof MatrixResolver\n */\n horizontalAxis (rows, encoder) {\n if (rows) {\n this._horizontalAxis = setFacetsAndProjections(this, { type: ROW, fields: rows }, encoder);\n return this;\n }\n return this._horizontalAxis;\n }\n\n /**\n * return the normalized set of columns and facets and projections\n *\n * @param {Object} columns parameters needed to set vertical axis consisiting of columns\n * @return {Object} facets, projections and normalized columns\n * @memberof MatrixResolver\n */\n verticalAxis (columns, encoder) {\n if (columns) {\n this._verticalAxis = setFacetsAndProjections(this, { type: COL, fields: columns }, encoder);\n return this;\n }\n return this._verticalAxis;\n }\n\n /**\n * Gets the class definition of a particular cell type(if the particular type has been extended, that particular\n * definition is returned)\n *\n * @param {Object} cell cell whose class definition is to be retrieved\n * @return {Object} cell definition\n * @memberof MatrixResolver\n */\n getCellDef (cell) {\n const registry = this.registry();\n\n Object.values(registry).forEach((e) => {\n if (e.prototype instanceof cell) {\n cell = e;\n }\n });\n return cell;\n }\n\n /**\n * return a visual cell creator along with its axis information to be injected to the datamodel creation\n * function\n *\n * @param {Object} GeomCell Type of cell to be created\n * @return {Object} Created cell\n * @memberof MatrixResolver\n */\n valueCellsCreator (context) {\n // reset matrix layers\n this.matrixLayers([]);\n\n return (datamodel, fieldInfo, facets) => createValueCells(context, datamodel, fieldInfo, facets);\n }\n\n /**\n * Callback to be applied on each cell of a matrix of a particular type\n *\n * @param {string} matrixType type of matrix on which callback is to be applied\n * @param {Function} callback function to be applied to each cell\n * @memberof MatrixResolver\n */\n forEach (matrixType, callback) {\n this[matrixType]().forEach((row, rIndex) => {\n row.forEach((col, cIndex) => {\n callback(rIndex, cIndex, col);\n });\n });\n }\n\n /**\n *\n *\n * @return\n * @memberof MatrixResolver\n */\n getAllFields () {\n const retObj = this.projections();\n\n Object.entries(this.facets()).forEach((e) => {\n retObj[e[0]] = e[1];\n });\n return retObj;\n }\n\n /**\n *\n *\n * @memberof MatrixResolver\n */\n resetSimpleAxes () {\n return this.axes({\n x: new Set(),\n y: new Set()\n });\n }\n\n /**\n *\n *\n * @param {*} componentRegistry\n * @param {*} config\n * @memberof MatrixResolver\n */\n createUnits (componentRegistry, config) {\n const {\n globalConfig,\n alias\n } = config;\n const {\n layerRegistry,\n sideEffectRegistry\n } = componentRegistry;\n const {\n smartlabel: smartLabel,\n lifeCycleManager\n } = this.dependencies();\n // Provide the source for the matrix\n const units = [];\n // Setting unit configuration\n const unitConfig = extractUnitConfig(globalConfig || {});\n\n this.forEach(VALUE_MATRIX, (i, j, el) => {\n let unit = el.source();\n if (!unit) {\n unit = VisualUnit.create({\n layerRegistry,\n sideEffectRegistry\n }, {\n smartLabel,\n lifeCycleManager\n });\n el.source(unit);\n units.push(unit);\n }\n unit.parentAlias(alias);\n el.config(unitConfig);\n });\n\n lifeCycleManager.notify({ client: units, action: INITIALIZED, formalName: UNIT });\n return this.units(units);\n }\n\n /**\n *\n *\n * @param {*} config\n * @memberof MatrixResolver\n */\n setDomains (config, datamodel, encoders) {\n const {\n color,\n shape,\n size,\n globalConfig\n } = config;\n const groupBy = globalConfig.autoGroupBy;\n const {\n rowFacets,\n colFacets\n } = this.getAllFields();\n const encoding = {\n color,\n shape,\n size\n };\n const facetFields = [...rowFacets.map(e => e.toString()), ...colFacets.map(e => e.toString())];\n const retContext = {\n domains: encoders.simpleEncoder.getRetinalFieldsDomain(datamodel, encoding, facetFields, groupBy),\n axes: this.axes(),\n encoding\n };\n encoders.retinalEncoder.setCommonDomain(retContext);\n return this;\n }\n\n /**\n *\n *\n * @return\n * @memberof MatrixResolver\n */\n getRetinalAxes () {\n const {\n color,\n shape,\n size\n } = this.axes();\n\n return {\n color: [...color],\n shape: [...shape],\n size: [...size]\n };\n }\n\n /**\n *\n *\n * @param {*} type\n * @return\n * @memberof MatrixResolver\n */\n getSimpleAxes (type) {\n return this.axes()[`${type}`];\n }\n\n /**\n *\n *\n * @param {*} datamodel\n * @param {*} config\n * @memberof MatrixResolver\n */\n createRetinalAxes (fieldsConfig, config, encoders) {\n const layerConfig = this.layerConfig();\n this.optionalProjections(config, layerConfig);\n const retinalAxes = encoders.retinalEncoder.createAxis({\n fieldsConfig,\n config,\n axes: this.axes()\n });\n const {\n lifeCycleManager\n } = this.dependencies();\n\n [COLOR, SHAPE, SIZE].forEach((e) => {\n this.axes()[e] = retinalAxes[e];\n });\n\n lifeCycleManager.notify({ client: this.axes(), action: INITIALIZED, formalName: AXIS });\n lifeCycleManager.notify({ client: this.units(), action: BEFORE_UPDATE, formalName: UNIT });\n\n const units = [];\n const matrixLayers = this.matrixLayers();\n\n this.forEach(VALUE_MATRIX, (i, j, el) => {\n el.axes(retinalAxes);\n el.source() && el.source().retinalFields(config);\n el.layerDef(encoders.retinalEncoder.getLayerConfig(config, matrixLayers[i][j]));\n el.updateModel();\n\n units.push(el.source());\n });\n\n lifeCycleManager.notify({ client: units, action: UPDATED, formalName: UNIT });\n return this;\n }\n\n /**\n *\n *\n * @param {*} placeholders\n * @param {*} fieldNames\n * @return\n * @memberof MatrixResolver\n */\n createHeaders (placeholders, fieldNames, config) {\n let bottomLeft = [];\n let bottomRight = [];\n const {\n rows,\n columns\n } = placeholders;\n const {\n smartlabel: labelManager,\n lifeCycleManager\n } = this.dependencies();\n const TextCell = this.getCellDef(this.registry().TextCell);\n const BlankCell = this.getCellDef(this.registry().BlankCell);\n const [leftRows, rightRows] = rows;\n const [topCols, bottomCols] = columns;\n const rowHeaders = fieldNames.rows;\n const blankCellCreator = cell => new BlankCell().config({ show: cell.config().show });\n\n // Headers and footers are created based on the rows. Thereafter, using the column information\n // they are tabularized into the current structure\n const headers = {\n left: headerCreator(leftRows, rowHeaders[0], config.showHeaders ? TextCell : BlankCell, labelManager),\n right: headerCreator(rightRows, rowHeaders[1], config.showHeaders ? TextCell : BlankCell, labelManager)\n };\n const footers = {\n left: leftRows.length > 0 ? leftRows[0].map(blankCellCreator) : [],\n right: rightRows.length > 0 ? rightRows[0].map(blankCellCreator) : []\n };\n const [topLeft, topRight] = [LEFT, RIGHT].map(type => topCols.map((col, i) => {\n if (i === topCols.length - 1) {\n return headers[type];\n }\n return footers[type];\n }));\n\n // Creating only bottom matrices if there is no information on the top\n if (topCols.length === 0) {\n [bottomLeft, bottomRight] = [LEFT, RIGHT].map(type => bottomCols.map((col, i) => {\n if (i === 0) {\n return headers[type];\n }\n return footers[type];\n }));\n } else {\n bottomLeft = bottomCols.map(() => (leftRows.length > 0 ? leftRows[0].map(blankCellCreator) : []));\n bottomRight = bottomCols.map(() => (rightRows.length > 0 ? rightRows[0].map(blankCellCreator) : []));\n }\n\n lifeCycleManager.notify({\n client: [topLeft, topRight, bottomLeft, bottomRight],\n action: INITIALIZED,\n formalName: FACET_HEADERS\n });\n\n return { topLeft, topRight, bottomLeft, bottomRight };\n }\n\n /**\n *\n *\n * @param {*} datamodel\n * @param {*} config\n * @param {*} componentRegistry\n * @param {*} encoders\n * @return\n * @memberof MatrixResolver\n */\n getMatrices (datamodel, config, componentRegistry, encoders) {\n const context = {\n datamodel,\n componentRegistry,\n encoders,\n resolver: this\n };\n\n return computeMatrices(context, config);\n }\n}\n","/**\n *\n *\n * @export\n * @class ValueMatrix\n */\nclass ValueMatrix {\n\n /**\n *Creates an instance of ValueMatrix.\n * @param {*} matrixArr\n * @memberof ValueMatrix\n */\n constructor (matrixArr) {\n const instancesById = {};\n\n this.matrix(matrixArr);\n this.filter(() => true);\n\n this.each((el, rIdx, cIdx) => {\n const cellValue = el.valueOf();\n if (cellValue && cellValue.id) {\n const id = cellValue.id();\n instancesById[id] = {\n instance: cellValue,\n rowIndex: rIdx,\n colIndex: cIdx\n };\n }\n });\n\n this.instancesById(instancesById);\n }\n\n /**\n *\n *\n * @param {*} id\n * @return\n * @memberof ValueMatrix\n */\n instancesById (...id) {\n if (id.length) {\n this._instancesById = id[0];\n return this;\n }\n return this._instancesById;\n }\n\n /**\n *\n *\n * @param {*} m\n * @return\n * @memberof ValueMatrix\n */\n matrix (...matrix) {\n if (matrix.length) {\n this._matrix = matrix[0];\n return this;\n }\n return this._matrix;\n }\n\n /**\n *\n *\n * @param {*} fn\n * @return\n * @memberof ValueMatrix\n */\n filter (...fn) {\n if (fn.length) {\n this._filterFn = fn[0];\n return this;\n }\n return this._filterFn;\n }\n\n /**\n *\n *\n * @return\n * @memberof ValueMatrix\n */\n width () {\n let rowWidth = 0;\n\n this.matrix().forEach((row) => {\n let currentRowWidth = 0;\n row.forEach((cell) => {\n currentRowWidth += cell.getLogicalSpace().width;\n });\n rowWidth = Math.max(rowWidth, currentRowWidth);\n });\n return rowWidth;\n }\n\n /**\n *\n *\n * @return\n * @memberof ValueMatrix\n */\n height () {\n let rowHeight = 0;\n\n this.matrix().forEach((row) => {\n let currentRowHeight = 0;\n row.forEach((cell) => {\n currentRowHeight = Math.max(currentRowHeight, cell.getLogicalSpace().height);\n });\n rowHeight += currentRowHeight;\n });\n return rowHeight;\n }\n\n /**\n *\n *\n * @param {*} fn\n * @return\n * @memberof ValueMatrix\n */\n each (fn) {\n const matrix = this.matrix();\n const filterFn = this.filter();\n\n matrix.forEach((row, rIndex) => {\n row.forEach((col, cIndex) => {\n if (filterFn(col)) {\n fn(col, rIndex, cIndex, matrix);\n }\n });\n });\n return this;\n }\n\n /**\n *\n *\n * @param {*} id\n * @return\n * @memberof ValueMatrix\n */\n findPlaceHolderById (id) {\n return this.instancesById()[id];\n }\n\n /**\n *\n *\n * @return\n * @memberof ValueMatrix\n */\n getMatrixArray () {\n return this.matrix();\n }\n}\n\nexport default ValueMatrix;\n","import { RetinalEncoder } from '../encoder';\nimport { DATA_UPDATE_COUNTER } from '../enums/defaults';\nimport { getEncoder, getBorders } from '../group-helper';\nimport ValueMatrix from './value-matrix';\nimport localOptions from './local-options';\n\nconst sanitizeRetinalConfig = (retinalConf) => {\n const conf = {};\n for (const key in retinalConf) {\n const confValue = retinalConf[key];\n if (typeof confValue === 'string' || !confValue) {\n conf[key] = {\n field: retinalConf[key]\n };\n } else {\n conf[key] = confValue;\n }\n }\n return conf;\n};\n\n/**\n *\n *\n * @param {*} placeholder\n * @memberof VisualGroup\n */\nconst setMatrixInstances = (context, placeholder) => {\n context._composition.matrices = {\n value: new ValueMatrix(placeholder.values),\n left: new ValueMatrix(placeholder.rows[0]),\n right: new ValueMatrix(placeholder.rows[1]),\n top: new ValueMatrix(placeholder.columns[0]),\n bottom: new ValueMatrix(placeholder.columns[1])\n };\n return context;\n};\n\n/**\n *\n *\n * @param {*} context\n * @returns\n */\nexport const setupChangeListeners = (context) => {\n context.store().registerImmediateListener([...Object.keys(localOptions), DATA_UPDATE_COUNTER], (...params) => {\n const datamodel = context.data();\n const [config, rows, columns, color, shape, size, detail, layers, transform] = params;\n\n if (datamodel && rows[1] && columns[1]) {\n // Get the resolver for the matrices\n const resolver = context.resolver();\n // Prepare configuration for matrix preparation\n let matrixConfig = {\n selection: context.selection(),\n alias: context.alias(),\n globalConfig: config[1] || {},\n rows: rows[1],\n columns: columns[1],\n detail: detail[1],\n layers: layers[1],\n transform: transform[1]\n };\n\n const retinalConfig = sanitizeRetinalConfig({\n color: color[1],\n shape: shape[1],\n size: size[1]\n });\n\n matrixConfig = Object.assign(matrixConfig, retinalConfig);\n // Create the encoders for the group\n const encoders = {};\n encoders.retinalEncoder = new RetinalEncoder();\n encoders.simpleEncoder = getEncoder(layers[1]);\n\n // Set the group type\n context.groupType(encoders.simpleEncoder.constructor.type());\n\n // Get sanitized fields as instances of the Vars Class\n const fields = encoders.simpleEncoder.fieldSanitizer(datamodel, matrixConfig);\n encoders.simpleEncoder.setAxisAndHeaders(config[1] ? config[1].axisFrom : {}, fields);\n // Setting layers for the code\n layers[1] && resolver.layerConfig(layers[1]);\n // Set the row and column axes\n resolver.horizontalAxis(fields.rows, encoders).verticalAxis(fields.columns, encoders);\n // Getting the placeholders\n const placeholderInfo = resolver.getMatrices(datamodel, matrixConfig, context.registry(), encoders);\n context._groupedDataModel = placeholderInfo.dataModels.groupedModel;\n // Set the selection object\n context.selection(placeholderInfo.selection);\n\n // Create retinal axes\n resolver.createRetinalAxes(placeholderInfo.dataModels.parentModel.getFieldsConfig(), retinalConfig,\n encoders);\n\n // Domains are evaluated for each of the axes for commonality\n resolver.setDomains(matrixConfig, placeholderInfo.dataModels, encoders);\n\n // Create matrix instances\n setMatrixInstances(context, placeholderInfo);\n\n // Prepare corner matrices\n context.cornerMatrices(resolver.createHeaders(placeholderInfo, fields, config[1]));\n\n // Set placeholder information\n context.placeholderInfo(placeholderInfo);\n\n context._composition.axes = resolver.axes();\n context.metaData({\n border: getBorders(placeholderInfo, encoders.simpleEncoder)\n });\n }\n return context;\n });\n return context;\n};\n","import { DATA_UPDATE_COUNTER } from '../enums/defaults';\n\nexport const PROPS = {\n alias: {},\n data: {\n sanitization: (context, value) => {\n if (context._data !== value) {\n const store = context.store();\n let hasDataUpdated = store.get(DATA_UPDATE_COUNTER);\n store.commit(DATA_UPDATE_COUNTER, ++hasDataUpdated);\n }\n return value;\n }\n },\n cornerMatrices: {},\n groupType: {},\n matrixInstance: {},\n metaData: {},\n placeholderInfo: {},\n resolver: {},\n registry: {\n sanitization: (context, value) => {\n if (context.resolver) {\n context.resolver().registry(value.cellRegistry);\n }\n return value;\n }\n },\n selection: {},\n store: {}\n};\n","import { transactor, generateGetterSetters } from 'muze-utils';\nimport localOptions from './local-options';\nimport { SimpleGroup } from '../simple-group';\nimport {\n MatrixResolver,\n initStore,\n findInGroup\n} from '../group-helper';\nimport { setupChangeListeners } from './change-listener';\nimport { PROPS } from './props';\nimport {\n CONFIG,\n MOUNT,\n RETINAL,\n Y\n} from '../enums/constants';\n\n/**\n * This class is used to create an instance of a visual group.\n * It extends the SimpleGroup (which is an interface). The visual group takes in a datamodel,\n * and a set of rows and columns, alongwith optional paramters (like color, size, shape).\n *\n * @class VisualGroup\n */\nclass VisualGroup extends SimpleGroup {\n\n /**\n * Creates an instance of VisualGroup. Requires dependencies and other registry options for placeholders\n * and layers that create individual units\n * @param {Object} registry Key value pair of compostions for the group\n * @param {Object} dependencies Dependencies needed to run the group\n * @memberof VisualGroup\n */\n constructor (registry, dependencies) {\n super();\n\n const {\n componentSubRegistry\n } = registry;\n\n this._dependencies = dependencies;\n // Generate getter/setter methods for all properties of the class\n // One can get each property by calling the method and can set it\n // by passing paramaters for the same. Thus, one can chain setter\n // getter methods.\n generateGetterSetters(this, PROPS);\n // Populate the store with default values\n this.store(initStore());\n\n // initialize group compositions\n this._composition = {};\n // store reference to data\n this._data = [];\n // matrix instance store each of the matrices\n this._matrixInstance = {};\n // store reference to mountpoint\n this._mount = null;\n // selection object that takes care of updating of components\n this._selection = {};\n // stores info about the placeholders generated after creation of matrices\n this._placeholderInfo = {};\n // corner matrices are the headers/footers for the application\n this._cornerMatrices = {};\n // Create instance of matrix resolver\n this.resolver(new MatrixResolver(this._dependencies));\n\n // Getting indiviual registered items\n this.registry({\n layerRegistry: componentSubRegistry.layerRegistry.get(),\n cellRegistry: componentSubRegistry.cellRegistry.get()\n });\n // Add local options to the store\n transactor(this, localOptions, this.store().model);\n // Register listeners\n setupChangeListeners(this);\n }\n\n matrixInstance (...matrices) {\n if (matrices.length) {\n return this;\n }\n return this.composition().matrices;\n }\n\n /**\n * Returns the composition of the Group\n *\n * @readonly\n * @memberof VisualGroup\n */\n composition (...params) {\n if (params.length) {\n return this;\n }\n return this._composition;\n }\n\n /**\n * Locks the model to prevent change listeners to be triggered until unlocked\n *\n * @return {Object} Instance of class VisualGroup\n * @memberof VisualGroup\n */\n lockModel () {\n this.store().model.lock();\n return this;\n }\n\n /**\n * Unlocks the model so that all change listeners can be triggered\n *\n * @return {Object} Instance of class VisualGroup\n * @memberof VisualGroup\n */\n unlockModel () {\n this.store().model.unlock();\n return this;\n }\n\n /**\n *\n *\n * @param {*} variable\n * @return\n * @memberof VisualGroup\n */\n where (variable) {\n return findInGroup(variable, this.resolver().getAllFields());\n }\n\n /**\n *\n *\n * @param {*} type\n * @return\n * @memberof VisualGroup\n */\n getAxes (type) {\n if (type === RETINAL) {\n return this.resolver().getRetinalAxes();\n }\n return this.resolver().getSimpleAxes(type);\n }\n\n /**\n *\n *\n * @return\n * @memberof VisualGroup\n */\n getCells (type) {\n return this.resolver()[`${type}Cells`]();\n }\n\n /**\n *\n *\n * @param {*} channel\n * @return\n * @memberof VisualGroup\n */\n getFieldsFromChannel (channel) {\n const {\n rowProjections,\n colProjections\n } = this.resolver().getAllFields();\n\n return channel === Y ? rowProjections : colProjections;\n }\n\n /**\n *\n *\n * @param {*} facetKey\n * @return\n * @memberof VisualGroup\n */\n getCellsByFacetKey (facetKey) {\n const resolver = this.resolver();\n const cells = resolver.rowCells()[facetKey] || resolver.colCells()[facetKey] || [];\n return cells;\n }\n\n /**\n *\n *\n * @param {*} facetKey\n * @return\n * @memberof VisualGroup\n */\n getAxesByFacetKey (axisType, facetKey) {\n const resolver = this.resolver();\n const cells = resolver.rowCells()[facetKey] || resolver.colCells()[facetKey];\n const axes = cells[0].valueOf().axes()[axisType] || [];\n\n return axes;\n }\n\n /**\n * This method is used to return a serialized representation of the instance's properties.\n *\n * @return {Object} Object with config proprties.\n * @memberof VisualGroup\n */\n serialize () {\n const store = this.store();\n\n return {\n [CONFIG]: store.get(CONFIG),\n [MOUNT]: store.get(MOUNT)\n };\n }\n\n getGroupByData () {\n return this._groupedDataModel;\n }\n}\n\nexport default VisualGroup;\n","import { PersistentBehaviour, SELECTION } from '@chartshq/muze-firebolt';\n\nexport default class SelectBehaviour extends PersistentBehaviour {\n static formalName () {\n return 'select';\n }\n\n setSelectionSet (addSet, selectionSet) {\n if (addSet === null) {\n selectionSet.reset();\n } else if (addSet.length) {\n // new add set\n const existingRemoveSet = addSet.filter(d => selectionSet._set[d] === SELECTION.SELECTION_OLD_EXIT\n || selectionSet._set[d] === SELECTION.SELECTION_NEW_EXIT);\n // existing add set\n if (existingRemoveSet.length) {\n selectionSet.updateEntry();\n selectionSet.add(existingRemoveSet);\n } else {\n selectionSet.updateExit();\n selectionSet.remove(addSet);\n }\n const { exitSet } = selectionSet.getSets();\n const mergedExitSet = [...new Set(exitSet[1]), ...new Set(exitSet[0])];\n const completeSetCount = selectionSet.getCompleteSet().length;\n if (exitSet[1].length !== completeSetCount && mergedExitSet.length === completeSetCount) {\n selectionSet.reset();\n }\n } else {\n selectionSet.remove(selectionSet.getCompleteSet());\n }\n return this;\n }\n}\n","import { BEHAVIOURS, ACTIONS } from '@chartshq/muze-firebolt';\n\nconst CLASSPREFIX = 'muze';\n\nexport const actionBehaviourMap = {\n [ACTIONS.DRAG]: {\n target: `.${CLASSPREFIX}-gradient-rect`,\n behaviours: [BEHAVIOURS.BRUSH]\n },\n [ACTIONS.HOVER]: {\n target: [`.${CLASSPREFIX}-legend-columns`],\n behaviours: [BEHAVIOURS.HIGHLIGHT]\n },\n [ACTIONS.CLICK]: {\n target: [`.${CLASSPREFIX}-legend-columns`],\n behaviours: [BEHAVIOURS.SELECT]\n }\n};\n\nexport const propagationBehaviourMap = {\n [BEHAVIOURS.SELECT]: BEHAVIOURS.FILTER,\n [BEHAVIOURS.BRUSH]: BEHAVIOURS.HIGHLIGHT\n};\n","import * as BEHAVIOURS from '../enums/behaviours';\nimport * as sideEffects from '../enums/side-effects';\n\nexport const behaviourEffectMap = {\n [BEHAVIOURS.BRUSH]: [sideEffects.SELECTIONBOX, {\n name: sideEffects.Highlighter,\n options: {\n strategy: 'fade'\n }\n }],\n [BEHAVIOURS.HIGHLIGHT]: [sideEffects.Highlighter],\n select: [{\n name: sideEffects.Highlighter,\n options: {\n strategy: 'fade'\n }\n }]\n};\n\nexport const propagationSideEffects = {\n [BEHAVIOURS.BRUSH]: [{\n name: sideEffects.Highlighter,\n options: {\n strategy: 'fade'\n }\n }],\n [BEHAVIOURS.HIGHLIGHT]: [{\n name: sideEffects.Highlighter,\n options: {\n strategy: 'fade'\n }\n }],\n [BEHAVIOURS.SELECT]: ['filter']\n};\n\n","export const BRUSH = 'brush';\nexport const HIGHLIGHT = 'highlight';\nexport const TOOLTIP = 'tooltip';\nexport const FILTER = 'filter';\nexport const SELECT = 'select';\n\n","export const SELECTIONBOX = 'selectionBox';\nexport const Highlighter = 'highlighter';\n\n","export const CLASSPREFIX = 'muze';\nexport const IDFIELD = '__id__';\nexport const CONFIG = 'config';\nexport const DATAMODEL = 'dataModel';\nexport const AXES = 'axes';\nexport const LAYERDEFS = 'layerDef';\nexport const WIDTH = 'width';\nexport const HEIGHT = 'height';\nexport const MOUNTPOINT = 'mountPoint';\nexport const GRIDLINEPARENTGROUPCLASS = 'grid-lines';\nexport const TRANSFORM = 'transform';\nexport const CONSOLIDATED = 'consolidated';\nexport const FRAGMENTED = 'fragmented';\nexport const DEFAULTCOLOR = '#F44336';\nexport const DEFAULTSIZE = 50;\nexport const DEFAULTSHAPE = 'circle';\nexport const STEP = 'step';\nexport const GRADIENT = 'gradient';\nexport const ORDINAL = 'ordinal';\nexport const SCALE_FUNCTIONS = {\n size: 'getSize',\n shape: 'getShape',\n color: 'getColor'\n};\nexport const TOP = 'top';\nexport const LEFT = 'left';\nexport const RIGHT = 'right';\nexport const BOTTOM = 'bottom';\nexport const HORIZONTAL = 'horizontal';\nexport const VERTICAL = 'vertical';\nexport const CENTER = 'center';\nexport const VALUE = 'value';\nexport const PATH = 'path';\nexport const SHAPE = 'shape';\nexport const ICON = 'icon';\nexport const RECT = 'rect';\nexport const START = 'start';\nexport const UPPER = 'upper';\nexport const LOWER = 'lower';\nexport const END = 'end';\nexport const SIZE = 'size';\nexport const DISCRETE = 'discrete';\nexport const MEASURE = 'measure';\n\n","import { assembleModelFromIdentifiers, getDataModelFromRange } from 'muze-utils';\nimport { propagationBehaviourMap } from './action-behaviour-map';\nimport { propagationSideEffects } from './behaviour-effect-map';\nimport { STEP, GRADIENT, DISCRETE, MEASURE } from '../enums/constants';\n\nexport const propagate = (firebolt, action, selectionSet, config = {}) => {\n let propagationData;\n const type = firebolt.context.constructor.type();\n const payload = config.payload;\n const data = firebolt.context.data();\n const metaData = firebolt.context.metaData();\n const fieldType = metaData.getData().schema[0].type;\n\n const propPayload = {};\n const sourceId = firebolt.context._id;\n propPayload.action = propagationBehaviourMap[action] || action;\n propPayload.sideEffects = propagationSideEffects[action];\n propPayload.sourceCanvas = firebolt.context.canvasAlias();\n const isMutableAction = firebolt._actions.behavioural[propPayload.action].constructor.mutates();\n if (payload.criteria === null) {\n propagationData = null;\n } else {\n const entrySet = selectionSet.mergedEnter;\n let values = data.filter(d => entrySet.uids.indexOf(d.id) !== -1).map(d => d.value);\n if (type === STEP || (type === DISCRETE && fieldType === MEASURE)) {\n const field = Object.keys(payload.criteria || {})[0];\n values = data.filter(d => entrySet.uids.indexOf(d.id) !== -1).map(d => d.range);\n propagationData = values.length ? metaData.select((fields) => {\n let check = false;\n for (let i = 0; i < values.length; i++) {\n check = fields[field].value >= values[i][0] && fields[field].value <= values[i][1];\n if (check === true) {\n break;\n }\n }\n return check;\n }, {\n saveChild: false\n }) : null;\n } else if (type === GRADIENT) {\n propagationData = getDataModelFromRange(metaData, payload.criteria);\n } else if (values.length) {\n propagationData = assembleModelFromIdentifiers(metaData, [payload.criteria[0], ...values.map(d => [d])]);\n } else {\n propPayload.criteria = null;\n propagationData = metaData.select(() => true, {\n saveChild: false\n });\n }\n }\n\n let propagateInterpolatedValues = false;\n\n if (propagationData) {\n const schema = propagationData.getSchema();\n propagateInterpolatedValues = schema.every(d => d.type === fieldType.MEASURE);\n }\n\n const propConfig = {\n sourceId: `legend-${sourceId}`,\n payload: propPayload,\n criteria: propPayload.criteria === null ? null : propagationData,\n isMutableAction,\n propagateInterpolatedValues,\n action: propPayload.action\n };\n\n metaData.propagate(propagationData, propConfig, true);\n};\n","import { Firebolt } from '@chartshq/muze-firebolt';\nimport { propagate } from './helper';\nimport { STEP, GRADIENT } from '../enums/constants';\n\n/**\n * This class manages the interactions of legend.\n * @export\n * @class LegendFireBolt\n * @extends {Firebolt}\n */\nexport class LegendFireBolt extends Firebolt {\n constructor (...params) {\n super(...params);\n this.initializeSideEffects();\n }\n\n getPropagationSelectionSet (selectionSet) {\n return selectionSet[0];\n }\n\n propagate (behaviourName, payload, selectionSet) {\n propagate(this, behaviourName, selectionSet, {\n payload\n });\n }\n\n getAddSetFromCriteria (criteria) {\n let values;\n let uniqueIds;\n const type = this.context.constructor.type();\n\n if (criteria === null) {\n uniqueIds = null;\n } else if (type === STEP) {\n values = Object.values(criteria);\n uniqueIds = this.context.data().filter(d => values.indexOf(d.range) !== -1).map(d => d.id);\n } else if (type === GRADIENT) {\n uniqueIds = [];\n } else {\n values = criteria[1];\n if (values) {\n uniqueIds = this.context.data().filter(d => values.indexOf(d.value) !== -1).map(d => d.id);\n } else {\n values = Object.values(criteria);\n uniqueIds = this.context.data().filter(d => values.indexOf(d.range) !== -1).map(d => d.id);\n }\n }\n return {\n uids: uniqueIds,\n model: null\n };\n }\n\n getFullData () {\n return null;\n }\n}\n","import {\n getEvent,\n getD3Drag\n } from 'muze-utils';\n\n/**\n * Adds dragging action to the target element.\n * @param {firebolt} firebolt firebolt\n * @param {SVGElement} targetEl Element on which brushing action is needed.\n * @param {Array} behaviours Array of behaviours\n */\n/* istanbul ignore next */ const drag = firebolt => (targetEl, behaviours) => {\n let startPos = {};\n let endPos = {};\n let payload;\n const d3Drag = getD3Drag();\n const context = firebolt.context;\n const boundingBox = context.measurement().gradientDimensions;\n const axisType = context.config().align === 'horizontal' ? 'x' : 'y';\n const axisScale = context.axis().source().scale();\n const rangeShifter = axisScale.range()[axisType === 'x' ? 0 : 1];\n\n targetEl.call(d3Drag().on('start', () => {\n const event = getEvent();\n startPos = {\n x: event.x,\n y: event.y\n };\n }).on('drag', () => {\n const event = getEvent();\n\n endPos = {\n x: event.x,\n y: event.y\n };\n endPos.x = Math.max(0, Math.min(endPos.x, boundingBox.width));\n endPos.y = Math.max(0, Math.min(endPos.y, boundingBox.height));\n\n payload = {\n criteria: {\n [context.fieldName()]: [axisScale.invert(startPos[axisType] + rangeShifter * 2),\n axisScale.invert(endPos[axisType] + rangeShifter * 2)].sort((a, b) => a - b)\n }\n };\n behaviours.forEach(behaviour => firebolt.dispatchBehaviour(behaviour, payload));\n }).on('end', () => {\n const event = getEvent();\n\n endPos = {\n x: event.x,\n y: event.y\n };\n endPos.x = Math.max(0, Math.min(endPos.x, boundingBox.width));\n endPos.y = Math.max(0, Math.min(endPos.y, boundingBox.height));\n if (startPos[axisType] === endPos[axisType]) {\n payload = {\n criteria: {}\n };\n } else {\n payload = {\n criteria: {\n [context.fieldName()]: [axisScale.invert(startPos[axisType] + rangeShifter * 2),\n axisScale.invert(endPos[axisType] + rangeShifter * 2)].sort((a, b) => a - b)\n }\n };\n }\n behaviours.forEach(behaviour => firebolt.dispatchBehaviour(behaviour, payload));\n }));\n};\n\nexport default drag;\n","/**\n * Adds mouse interactions to target element.\n * @param {Firebolt} Firebolt instance of firebolt.\n * @param {SVGElement} targetEl Element on which the event listeners will be attached.\n * @param {Array} behaviours Array of behaviours\n */\n/* istanbul ignore next */ const hover = firebolt => (targetEl, behaviours) => {\n const dispatchBehaviour = function (args) {\n const payload = {\n criteria: firebolt.context.getCriteriaFromData(args)\n };\n behaviours.forEach(behaviour => firebolt.dispatchBehaviour(behaviour, payload));\n event.stopPropagation();\n };\n\n targetEl.on('mouseover', dispatchBehaviour)\n .on('mousemove', dispatchBehaviour)\n .on('mouseout', () => {\n behaviours.forEach(behaviour => firebolt.dispatchBehaviour(behaviour, {\n criteria: null\n }));\n event.stopPropagation();\n });\n};\n\nexport default hover;\n","/**\n * Adds mouse interactions to target element.\n * @param {VisualUnit} instance instance of visual unit.\n * @param {SVGElement} targetEl Element on which the event listeners will be attached.\n * @param {Array} behaviours Array of behaviours\n */\nconst click = firebolt => (targetEl, behaviours) => {\n const dispatchBehaviour = function (args) {\n const payload = {\n criteria: firebolt.context.getCriteriaFromData(args)\n };\n behaviours.forEach(behaviour => firebolt.dispatchBehaviour(behaviour, payload));\n };\n\n targetEl.on('click', dispatchBehaviour);\n};\n\nexport default click;\n","import drag from './drag';\nimport hover from './hover';\nimport click from './click';\nimport * as ACTIONNAMES from '../../enums/actions';\n\nexport const physicalActions = {\n [ACTIONNAMES.DRAG]: drag,\n [ACTIONNAMES.HOVER]: hover,\n [ACTIONNAMES.CLICK]: click\n};\n\n","export const DRAG = 'drag';\nexport const HOVER = 'hover';\nexport const SELECTIONDRAG = 'selectiondrag';\nexport const CLICK = 'click';\n","import {\n getMousePos,\n getEvent,\n getD3Drag\n } from 'muze-utils';\nimport { HEIGHT, WIDTH, HORIZONTAL } from '../../enums/constants';\n\nconst getSelectionCriteria = (subject, axis, measures) => {\n let criteria = [];\n const {\n axisScale,\n axisType\n } = axis;\n const {\n startPos,\n endPos,\n selectionBoxMeasure,\n drawingInfMeasure,\n offset\n } = measures;\n const subjectStartPoint = subject[axisType];\n\n if (startPos[axisType] === endPos[axisType]) {\n criteria = [];\n } else if (subjectStartPoint + selectionBoxMeasure >= drawingInfMeasure + offset) {\n criteria = [axisScale.invert(drawingInfMeasure + offset - selectionBoxMeasure),\n axisScale.invert(drawingInfMeasure + offset)];\n } else if (subjectStartPoint - offset < offset) {\n criteria = [axisScale.invert(offset * 2), axisScale.invert(selectionBoxMeasure + offset * 2)];\n } else {\n criteria = [axisScale.invert(subjectStartPoint), axisScale.invert(subjectStartPoint + selectionBoxMeasure)];\n }\n axisType === 'x' ? criteria : criteria.reverse();\n return criteria;\n};\n\nexport const selectionBoxDrag = firebolt => (targetEl, behaviours) => {\n let startPos = {};\n let payload;\n const endPos = {};\n const d3Drag = getD3Drag();\n const context = firebolt.context;\n const axisScale = context.axis().source().scale();\n const axisType = context.config().align === HORIZONTAL ? 'x' : 'y';\n const drawingInfMeasure = context.measurement().gradientDimensions[axisType === 'x' ?\n WIDTH : HEIGHT];\n const offset = axisScale.range()[axisType === 'x' ? 0 : 1];\n const measures = {\n drawingInfMeasure,\n offset\n };\n let subject = {};\n\n targetEl.call(d3Drag().on('start', function () {\n const event = getEvent();\n startPos = getMousePos(this, event.sourceEvent);\n subject = event.subject;\n }).on('drag', () => {\n const event = getEvent();\n const selectionBoxMeasure = subject[axisType === 'x' ? WIDTH : HEIGHT];\n\n subject.x += event.dx;\n subject.y += event.dy;\n\n measures.selectionBoxMeasure = selectionBoxMeasure;\n measures.startPos = startPos;\n measures.endPos = endPos;\n const criteria = getSelectionCriteria(subject, { axisScale, axisType }, measures);\n\n payload = {\n criteria: {\n [context.fieldName()]: criteria\n },\n fadeOut: true\n };\n firebolt.dispatchBehaviour(behaviours[0], payload);\n }).on('end', () => {\n const event = getEvent();\n const selectionBoxMeasure = subject[axisType === 'x' ? WIDTH : HEIGHT];\n measures.selectionBoxMeasure = selectionBoxMeasure;\n measures.startPos = startPos;\n measures.endPos = endPos;\n const criteria = getSelectionCriteria(event, { axisScale, axisType }, measures);\n payload = {\n criteria: {\n [context.fieldName()]: criteria\n },\n fadeOut: true,\n config: {\n transition: {\n duration: 200\n }\n }\n };\n firebolt.dispatchBehaviour(behaviours[0], payload);\n }));\n};\n\n","import { makeElement } from 'muze-utils';\nimport { SpawnableSideEffect } from '@chartshq/muze-firebolt';\nimport { CLASSPREFIX, HEIGHT, WIDTH, HORIZONTAL, RECT } from '../../../enums/constants';\nimport { SELECTIONBOX } from '../../../enums/side-effects';\nimport { selectionBoxDrag } from '../../physical/selection-box-drag';\nimport './styles.scss';\n\n/**\n * This class is used to create a selection box which is used by visual unit for brushing and\n * selection in the canvas.\n * @class SelectionBox\n */\n/* istanbul ignore next */ class SelectionBox extends SpawnableSideEffect {\n static formalName () {\n return SELECTIONBOX;\n }\n\n /**\n * It returns the default configuration needed by selectionbox.\n * @return {Object} Default configuration of the selection box.\n */\n static defaultConfig () {\n return {\n className: 'legend-selection-box',\n classPrefix: CLASSPREFIX\n };\n }\n\n /**\n * Draws the selectionbox with the specified dimensions.\n */\n /* istanbul ignore next */ apply (selectionSet, payload) {\n let x;\n let y;\n let width;\n let height;\n const firebolt = this.firebolt;\n const context = firebolt.context;\n const config = this.config();\n const axis = context.axis().source();\n const className = `${config.classPrefix}-${config.className}`;\n\n const domain = payload.criteria[firebolt.context.fieldName()];\n const axisScale = axis.scale();\n const range = domain ? [axis.getScaleValue(domain[0]), axis.getScaleValue(domain[1])] : [];\n\n const axisType = context.config().align === HORIZONTAL ? 'x' : 'y';\n\n const gradientDimension = firebolt.context.measurement().gradientDimensions[axisType === 'x' ?\n HEIGHT : WIDTH];\n\n const rangeShifter = axisScale.range()[axisType === 'x' ? 0 : 1];\n const legendGradContainer = context.getDrawingContext().svgContainer;\n const legendSelGroup = makeElement(legendGradContainer, 'g', [1], `${config.classPrefix}-selection-box-group`);\n\n if (firebolt.context.config().align === HORIZONTAL) {\n x = range[0] - rangeShifter || 0;\n y = 0;\n width = range[1] - range[0] || 0;\n height = gradientDimension;\n } else {\n x = 0;\n y = range[1] - rangeShifter || 0;\n height = range[0] - range[1] || 0;\n width = gradientDimension;\n }\n const enterFn = function (el) {\n selectionBoxDrag(firebolt)(el, ['brush']);\n };\n const selBox = makeElement(legendSelGroup, RECT, [{ domain, x, y, width, height }], className,\n { enter: enterFn });\n selBox.attr('y', y)\n .attr('x', x)\n .attr(WIDTH, width)\n .attr(HEIGHT, height);\n }\n}\n\nexport default SelectionBox;\n\n","import { selectElement } from 'muze-utils';\n\nexport const strategies = (firebolt) => {\n const context = firebolt.context;\n const classed = (set, className, change) => {\n const classPrefix = context.config().classPrefix;\n selectElement(context.mount())\n .selectAll(`.${classPrefix}-legend-columns`)\n .filter(d => set.uids.indexOf(d.id) !== -1)\n .selectAll('div')\n .classed(className, change);\n };\n\n return {\n fade: (set, config = {}) => {\n const classPrefix = context.config().classPrefix;\n if (!set.mergedEnter.length && !set.mergedExit.length) {\n classed(set.completeSet, config.className || `${classPrefix}-legend-fadeout`, false);\n } else {\n classed(set.mergedExit, config.className || `${classPrefix}-legend-brighten`, false);\n classed(set.mergedExit, config.className || `${classPrefix}-legend-fadeout`, true);\n classed(set.mergedEnter, config.className || `${classPrefix}-legend-fadeout`, false);\n }\n },\n brighten: (set, config = {}) => {\n const classPrefix = context.config().classPrefix;\n if (!set.mergedEnter.length && !set.mergedExit.length) {\n classed(set.completeSet, config.className || `${classPrefix}-legend-brighten`, false);\n } else {\n classed(set.mergedEnter, config.className || `${classPrefix}-legend-brighten`, true);\n classed(set.mergedExit, config.className || `${classPrefix}-legend-brighten`, false);\n }\n }\n };\n};\n","import { GenericSideEffect } from '@chartshq/muze-firebolt';\nimport { strategies } from './strategies';\nimport { Highlighter } from '../../../enums/side-effects';\n\nexport default class LegendHighlighter extends GenericSideEffect {\n constructor (...params) {\n super(...params);\n this._strategies = strategies(this.firebolt);\n this._strategy = 'brighten';\n }\n\n static formalName () {\n return Highlighter;\n }\n\n apply (selectionSet, payload, options = {}) {\n const strategy = this._strategies[options.strategy || this._strategy];\n\n strategy(selectionSet, this);\n }\n}\n","import { mergeRecursive } from 'muze-utils';\n\nexport const PROPS = {\n config: {\n sanitization: (context, value) => mergeRecursive(context._config || {}, value)\n },\n data: {},\n fieldName: {},\n legendContainer: {},\n measurement: {\n sanitization: (context, value) => {\n const measurement = mergeRecursive(context._measurement, value);\n ['padding', 'border', 'margin'].forEach((space) => {\n measurement[space] = Math.min(measurement[space] > 0 ? measurement[space] : 0,\n measurement.maxWidth * 0.1, measurement.maxHeight * 0.1);\n });\n return measurement;\n }\n },\n logicalSpace: {},\n metaData: {},\n range: {\n sanitization: (context, value) => {\n context.scale().range(value);\n context.resetLogicalSpace();\n context.store().commit('range', value);\n return value;\n }\n },\n scale: {},\n smartTicks: {},\n store: {},\n title: {\n sanitization: (context, value) => mergeRecursive(context._title || {}, value)\n }\n};\n","import { getSymbol } from 'muze-utils';\nimport {\n CENTER,\n LEFT,\n RIGHT\n} from '../enums/constants';\n\nexport const ALIGN = {\n HORIZONTAL: 'horizontal',\n VERTICAL: 'vertical'\n};\n\nexport const DEFAULT_MEASUREMENT = {\n height: 30,\n width: 30,\n maxWidth: Infinity,\n maxHeight: Infinity,\n padding: 2,\n margin: 2,\n border: 1\n};\n\nexport const LEGEND_TITLE = {\n text: '',\n orientation: (pos) => {\n if (pos === LEFT || pos === RIGHT) {\n return LEFT;\n } return CENTER;\n }\n};\n\nexport const DEFAULT_CONFIG = {\n classPrefix: 'muze',\n borderStyle: 'solid',\n borderColor: 'rgba(0,0,0,0)',\n formatter: {\n bounds: {\n lower: 'less than',\n upper: 'more than'\n }\n },\n item: {\n text: {\n orientation: 'right',\n width: 10,\n formatter: val => val\n },\n icon: {\n className: 'legend-icon',\n height: 20,\n width: 20,\n color: 'rgba(0,0,0,.5)',\n type: 'square'\n }\n }\n};\n\n/**\n * Creates a map of pre defined icons\n *\n * @param {string} icon Accepts a icon name like 'square', 'cross', 'diamond' etc\n * @return {Object} icon object which can be used to draw the icons\n */\nexport const ICON_MAP = (icon) => {\n if (icon && typeof (icon) === 'string') {\n return getSymbol(icon);\n } return icon;\n};\n","import { makeElement, numberInterpolator } from 'muze-utils';\n\nimport {\n SCALE_FUNCTIONS,\n WIDTH,\n HEIGHT,\n LEFT,\n RIGHT,\n TOP,\n BOTTOM\n} from '../enums/constants';\n\n/**\n *\n *\n * @param {*} scale\n * @returns\n */\nexport const getScaleInfo = (scale) => {\n const scaleType = scale.constructor.type();\n const domain = scale.uniqueValues();\n const steps = scale.config().stops || 1;\n const scaleFn = SCALE_FUNCTIONS[scaleType];\n\n return { scaleType, domain, steps, scaleFn };\n};\n\n/**\n *\n *\n * @param {*} domain\n * @param {*} steps\n * @returns\n */\nexport const getInterpolatedData = (domain, steps) => {\n const domainForLegend = [];\n const interpolatedFn = numberInterpolator()(domain[0], domain[1]);\n\n for (let i = 0; i <= steps; i++) {\n domainForLegend[i] = interpolatedFn(i / steps);\n }\n return domainForLegend;\n};\n\n/**\n *\n *\n * @param {*} container\n * @param {*} text\n * @param {*} measurement\n * @param {*} classPrefix\n */\nexport const titleCreator = (container, title, measurement, config) => {\n const titleContainer = makeElement(container, 'table', [1], `${config.classPrefix}-legend-title`)\n .style(WIDTH, `${measurement.width}px`)\n .style(HEIGHT, `${measurement.height}px`)\n .style('border-bottom', `${measurement.border}px ${config.borderStyle} ${config.borderColor}`)\n .style('text-align', title.orientation instanceof Function ?\n title.orientation(config.position) : title.orientation);\n return makeElement(titleContainer, 'td', [1], `${config.classPrefix}-legend-title-text`)\n .style(WIDTH, `${measurement.width}px`)\n .style(HEIGHT, '100%')\n .style('padding', `${measurement.padding}px`)\n .text(title.text)\n .node();\n};\n\n /**\n *\n *\n * @param {*} data\n * @param {*} prop\n * @param {*} labelManager\n * @return\n */\nexport const getMaxMeasures = (data, prop, labelManager) => {\n let maxHeight = -Infinity;\n let maxWidth = -Infinity;\n\n data.forEach((item) => {\n const value = prop ? item[prop] : item;\n const space = labelManager.getOriSize(value);\n maxHeight = Math.max(space.height + 2, maxHeight);\n maxWidth = Math.max(space.width + 2, maxWidth);\n });\n\n return { height: maxHeight, width: maxWidth };\n};\n\n/**\n *\n *\n * @param {*} data\n * @param {*} prop\n * @param {*} labelManager\n * @return\n */\nexport const getItemMeasures = (data, prop, labelManager, formatter) => {\n const space = [];\n\n data.forEach((item, index) => {\n const value = prop ? item[prop] : item;\n const { height, width } = labelManager.getOriSize(formatter(value));\n space[index] = { height: height + 1, width: width + 1 };\n });\n return space;\n};\n\n/**\n *\n *\n * @param {*} textOrientation\n * @param {*} effPadding\n * @param {*} titleSpace\n * @return\n * @memberof Legend\n */\nexport const computeItemSpaces = (config, measures, data) => {\n let totalHeight = 0;\n let totalWidth = 0;\n let maxItemSpaces = {\n width: 0, height: 0\n };\n const {\n effPadding,\n titleWidth,\n labelSpaces,\n titleHeight,\n maxWidth\n } = measures;\n const {\n item,\n align\n } = config;\n const {\n icon,\n text\n } = item;\n const textOrientation = text.orientation;\n const itemSpaces = [];\n const iconSpaces = [];\n let maxIconWidth = 0;\n labelSpaces.forEach((labelSpace, i) => {\n const itemSpace = { width: 0, height: 0 };\n const iconSpace = { width: 0, height: 0 };\n const datum = data[i] || {};\n // Compute each legend item height/width\n if (textOrientation === LEFT || textOrientation === RIGHT) {\n // Get label, icon and item widths\n labelSpace.width += effPadding;\n iconSpace.width = (datum.size ? 2 * Math.sqrt(datum.size / Math.PI) : icon.width) + effPadding;\n maxIconWidth = Math.max(iconSpace.width, maxIconWidth);\n itemSpace.width = labelSpace.width + maxIconWidth;\n\n // Get label, icon and item heights\n labelSpace.height = Math.max(labelSpace.height, icon.height) + effPadding;\n iconSpace.height = labelSpace.height;\n itemSpace.height = labelSpace.height;\n } else {\n // Get label, icon and item widths\n labelSpace.width = Math.max(labelSpace.width, datum.size ? 2 * Math.sqrt(datum.size / Math.PI)\n : icon.width) + effPadding;\n iconSpace.width = labelSpace.width;\n itemSpace.width = labelSpace.width;\n maxIconWidth = Math.max(iconSpace.width, maxIconWidth);\n\n // Get label, icon and item heights\n labelSpace.height += effPadding;\n iconSpace.height = icon.height + effPadding;\n itemSpace.height = labelSpace.height + iconSpace.height;\n }\n // Compute height and width of legend for each alignment\n if (align === 'horizontal') {\n totalHeight = Math.max(totalHeight, itemSpace.height);\n } else {\n totalHeight += itemSpace.height;\n totalWidth = Math.max(totalWidth, itemSpace.width, titleWidth) + effPadding;\n }\n maxItemSpaces = {\n width: Math.max(itemSpace.width, maxItemSpaces.width),\n height: Math.max(itemSpace.height, maxItemSpaces.height)\n };\n itemSpaces.push(itemSpace);\n iconSpaces.push(iconSpace);\n });\n itemSpaces.forEach((itemSpace, i) => {\n if (align === 'horizontal') {\n itemSpace.height = totalHeight;\n iconSpaces[i].width = maxIconWidth;\n if (textOrientation === LEFT || textOrientation === RIGHT) {\n labelSpaces[i].height = totalHeight;\n iconSpaces[i].height = totalHeight;\n itemSpaces[i].width = labelSpaces[i].width + maxIconWidth;\n } else {\n labelSpaces[i].width = maxIconWidth;\n itemSpaces[i].width = maxIconWidth;\n labelSpaces[i].width = maxIconWidth;\n }\n totalWidth = Math.max(totalWidth + itemSpaces[i].width);\n } else {\n itemSpace.width = Math.max(totalWidth, maxWidth);\n if (textOrientation === TOP || textOrientation === BOTTOM) {\n labelSpaces[i].width = totalWidth;\n iconSpaces[i].width = totalWidth;\n maxIconWidth = totalWidth;\n } else {\n iconSpaces[i].width = maxIconWidth;\n itemSpaces[i].width = labelSpaces[i].width + maxIconWidth;\n labelSpaces[i].width = maxItemSpaces.width - maxIconWidth;\n totalWidth = Math.max(totalWidth, itemSpace.width) + effPadding;\n }\n }\n });\n totalWidth = Math.max(totalWidth, titleWidth);\n totalHeight += titleHeight + effPadding;\n\n return { totalHeight, totalWidth, itemSpaces, iconSpaces, maxItemSpaces, maxIconWidth };\n};\n\n/**\n *\n *\n * @param {*} type\n * @param {*} scaleInfo\n * @param {*} domainInfo\n * @returns\n */\nexport const getDomainBounds = (type, scaleInfo, domainInfo) => {\n const {\n scaleFn,\n scaleType,\n scale\n } = scaleInfo;\n const {\n domain,\n domainBounds,\n domainLeg,\n steps\n } = domainInfo;\n const ele = domain[type === 'lower' ? 0 : domain.length - 1];\n const step = steps[type === 'lower' ? 0 : steps.length - 1];\n\n return {\n [scaleType]: scaleType === 'size' ? scale[scaleFn](ele) * scale.getScaleFactor() : scale[scaleFn](ele),\n value: domainBounds[type],\n id: type === 'lower' ? 0 : domainLeg.length + 2,\n range: [ele, step]\n };\n};\n","import {\n makeElement,\n selectElement,\n getUniqueId,\n getSmartComputedStyle,\n generateGetterSetters,\n mergeRecursive\n} from 'muze-utils';\nimport { behaviouralActions } from '@chartshq/muze-firebolt';\nimport * as legendBehaviours from '../firebolt/behavioural';\n\nimport { LegendFireBolt } from '../firebolt/legend-firebolt';\nimport { actionBehaviourMap } from '../firebolt/action-behaviour-map';\nimport { physicalActions } from '../firebolt/physical';\nimport * as sideEffects from '../firebolt/side-effects';\nimport { behaviourEffectMap } from '../firebolt/behaviour-effect-map';\nimport { VALUE, PATH } from '../enums/constants';\nimport { PROPS } from './props';\nimport { DEFAULT_MEASUREMENT, DEFAULT_CONFIG, LEGEND_TITLE } from './defaults';\nimport { getItemMeasures, titleCreator, computeItemSpaces } from './legend-helper';\n\n/**\n * Creates a Legend from the axes of a canvas\n *\n * @param {Object} dependencies : legend data\n * @class SimpleLegend\n */\nexport default class SimpleLegend {\n\n /**\n * Creates an instance of Legend.\n * @param {Object} dependencies Set of dependencies required by the legend\n * @memberof Legend\n */\n constructor (dependencies) {\n this._data = [];\n this._metaData = [];\n this._mount = null;\n this._fieldName = null;\n this._title = Object.assign({}, LEGEND_TITLE);\n this._metaData = null;\n this._labelManager = dependencies.labelManager;\n this._cells = dependencies.cells;\n this._id = getUniqueId();\n this._measurement = Object.assign({}, this.constructor.defaultMeasurement());\n this._config = mergeRecursive({}, this.constructor.defaultConfig());\n\n generateGetterSetters(this, PROPS);\n this._computedStyle = getSmartComputedStyle(selectElement('body'),\n `${this.config().classPrefix}-legend-item-info`);\n\n this._firebolt = new LegendFireBolt(this, {\n behavioural: Object.assign({}, behaviouralActions, legendBehaviours),\n physical: physicalActions,\n physicalBehaviouralMap: actionBehaviourMap\n }, sideEffects, behaviourEffectMap);\n }\n\n id () {\n return this._id;\n }\n /**\n * Initializes an instance of the class\n *\n * @static\n * @param {Object} dependencies Set of dependencies required by the legend\n * @return {Instance} returns a new instance of Legend\n * @memberof Legend\n */\n static create (dependencies) {\n return new SimpleLegend(dependencies);\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof SimpleLegend\n */\n static defaultConfig () {\n return DEFAULT_CONFIG;\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof SimpleLegend\n */\n static defaultMeasurement () {\n return DEFAULT_MEASUREMENT;\n }\n\n /**\n *\n *\n * @readonly\n * @memberof SimpleLegend\n */\n firebolt (...params) {\n if (params.length) {\n return this;\n }\n return this._firebolt;\n }\n\n /**\n *\n *\n * @return\n * @memberof Legend\n */\n elemType () {\n return PATH;\n }\n\n canvasAlias (...alias) {\n if (alias.length) {\n this._canvasAlias = alias[0];\n return this;\n }\n return this._canvasAlias;\n }\n\n /**\n *\n *\n * @return\n * @memberof Legend\n */\n mount (...params) {\n if (params.length) {\n this._mount = params[0];\n this.render();\n return this;\n }\n return this._mount;\n }\n\n /**\n *\n *\n * @param {*} effPadding\n * @param {*} align\n * @return\n * @memberof Legend\n */\n getLabelSpaces () {\n const {\n item,\n classPrefix\n } = this.config();\n this._labelManager.setStyle(getSmartComputedStyle(selectElement('body'),\n `${classPrefix}-legend-item-info`));\n return getItemMeasures(this.data(), VALUE, this._labelManager, item.text.formatter);\n }\n\n /**\n * Sets the height and width of a legend based on provided max\n * height and width and based on its contents\n *\n * @return {Instance} Current instance\n * @memberof Legend\n */\n setLegendMeasures () {\n const {\n width,\n height,\n maxWidth,\n maxHeight,\n padding,\n margin,\n border\n } = this.measurement();\n const {\n align\n } = this.config();\n\n // Effective padding, margin and padding\n const effPadding = padding * 2;\n const effBorder = border * 2;\n const effMargin = margin * 2;\n\n this.data(this.dataFromScale(this.scale()));\n // Get space occupied by title\n const titleSpace = this.getTitleSpace();\n const titleHeight = titleSpace.height > 0 ? titleSpace.height + effPadding : 0;\n const titleWidth = titleSpace.width + effPadding;\n\n // Get space occupied by labels\n const labelSpaces = this.getLabelSpaces(effPadding, align);\n\n const {\n totalHeight, totalWidth, itemSpaces, iconSpaces, maxItemSpaces, maxIconWidth\n } = computeItemSpaces(this.config(),\n { effPadding, titleWidth, labelSpaces, titleHeight, maxWidth, maxHeight }, this.data());\n\n this.measurement({\n width: Math.max(totalWidth, width) + effMargin + effBorder,\n height: Math.max(totalHeight, height) + effMargin + effBorder,\n labelSpaces,\n iconSpaces,\n itemSpaces,\n maxItemSpaces,\n maxIconWidth,\n titleSpaces: {\n width: Math.min(maxWidth, this.measurement().width) - effMargin - effBorder,\n height: titleHeight\n }\n });\n return this;\n }\n\n /**\n * Returns the space occupied by the legend title\n *\n * @return {Object} Space occupied by title\n * @memberof Legend\n */\n getTitleSpace () {\n this._labelManager.setStyle(getSmartComputedStyle(selectElement('body'),\n `${this.config().classPrefix}-legend-title`));\n return this._labelManager.getOriSize(this.title().text ? this.title().text : '');\n }\n\n /**\n * Creates the title for the legend\n *\n * @param {DOM} container Container made for the title\n * @return {Selection} Title and it's node\n * @memberof Legend\n */\n renderTitle (container) {\n const { titleSpaces, border, padding, width } = this.measurement();\n const { borderStyle, borderColor } = this.config();\n return titleCreator(container, this.title(), {\n height: titleSpaces.height,\n width,\n border,\n padding,\n borderStyle,\n borderColor\n }, this.config());\n }\n\n /**\n * Render the legend with its title\n *\n * @param {DOM} mountPoint Point where the legend and title are to be appended\n * @return {Instance} Current instance of legend\n * @memberof Legend\n */\n render () {\n const firebolt = this.firebolt();\n const {\n classPrefix,\n borderStyle,\n borderColor\n } = this.config();\n const {\n maxWidth,\n maxHeight,\n width,\n height,\n margin,\n border\n } = this.measurement();\n const legendContainer = makeElement(selectElement(this.mount()), 'div', [1], `${classPrefix}-legend-box`);\n\n legendContainer.classed(`${classPrefix}-legend-box-${this._id}`, true);\n legendContainer.style('float', 'left');\n // set height and width\n legendContainer.style('width', `${Math.min(maxWidth, width) - margin * 2}px`)\n .style('height', `${Math.min(maxHeight, height) - margin * 2}px`)\n .style('margin', `${margin}px`)\n .style('border', `${border}px ${borderStyle} ${borderColor}`);\n this.legendContainer(legendContainer.node());\n\n // create title\n this.renderTitle(legendContainer);\n firebolt.createSelectionSet(this.data().map(d => d.id));\n return legendContainer;\n }\n /**\n *\n *\n * @param {*} data\n * @returns\n * @memberof StepLegend\n */\n getCriteriaFromData (data) {\n const fieldName = this.fieldName();\n const type = this.metaData().getData().schema[0].type;\n if (type === 'measure') {\n return {\n [fieldName]: data.range\n };\n }\n return [[fieldName], [data.value]];\n }\n}\n","import {\n LEFT,\n RIGHT,\n START,\n END,\n TOP,\n BOTTOM,\n HORIZONTAL,\n VERTICAL,\n CENTER,\n SHAPE,\n VALUE\n} from '../enums/constants';\n\nconst legendOrientation = {\n [HORIZONTAL]: {\n datasets: data => ({\n row: [1],\n column: data\n }),\n itemContainerMeasures: (measurement) => {\n const {\n itemSpaces,\n width\n } = measurement;\n return {\n row: {\n width: `${width}px`,\n padding: `${0}px`\n },\n column: {\n width: (d, i) => `${itemSpaces[i].width}px`,\n padding: `${0}px`\n }\n };\n },\n getStepSpacesInfo: (measurement) => {\n const { maxItemSpaces, height } = measurement;\n return {\n iconHeight: height,\n iconWidth: maxItemSpaces.width,\n stepPadding: {\n horizontal: true,\n vertical: false\n }\n };\n }\n },\n [VERTICAL]: {\n datasets: data => ({\n row: data,\n column: d => [d]\n }),\n itemContainerMeasures: (measurement, config) => {\n const {\n width\n } = measurement;\n const { padding } = config;\n return {\n row: {\n width: `${width}px`,\n padding: `${padding}px`\n },\n column: {\n width: `${width}px`,\n padding: `${0}px`\n }\n };\n },\n getStepSpacesInfo: (measurement) => {\n const { maxItemSpaces, width } = measurement;\n return {\n iconHeight: maxItemSpaces.height,\n iconWidth: width,\n stepPadding: {\n horizontal: false,\n vertical: true\n }\n };\n }\n }\n};\n\nexport const positionConfig = {\n [LEFT]: legendOrientation[VERTICAL],\n [RIGHT]: legendOrientation[VERTICAL],\n [TOP]: legendOrientation[HORIZONTAL],\n [BOTTOM]: legendOrientation[HORIZONTAL]\n};\n\nexport const alignmentMap = {\n [LEFT]: END,\n [RIGHT]: START,\n [TOP]: CENTER,\n [BOTTOM]: CENTER\n};\n\n// Reverses data for step legend\nexport const stepData = data => ({\n [LEFT]: data.reverse(),\n [RIGHT]: data.reverse(),\n [TOP]: data,\n [BOTTOM]: data\n});\n\n// Changes the item layout based on the position of the text\nexport const itemStack = {\n [LEFT]: [VALUE, SHAPE],\n [RIGHT]: [SHAPE, VALUE],\n [TOP]: [VALUE, SHAPE],\n [BOTTOM]: [SHAPE, VALUE]\n};\n","import { makeElement, selectElement, applyStyle } from 'muze-utils';\nimport { ICON_MAP } from './defaults';\nimport { positionConfig, alignmentMap, itemStack } from './position-config';\nimport {\n WIDTH,\n HEIGHT,\n CENTER,\n VALUE,\n RECT,\n LEFT,\n RIGHT\n} from '../enums/constants';\n\n/**\n *\n *\n * @param {*} container\n * @param {*} data\n * @param {*} legendInstance\n * @param {*} align\n * @return\n */\nexport const getItemContainers = (container, data, legendInstance) => {\n const measurement = legendInstance.measurement();\n const config = legendInstance.config();\n const {\n itemSpaces\n } = measurement;\n const {\n classPrefix,\n position\n } = config;\n const positionObj = positionConfig[position];\n const datasets = positionObj.datasets(data);\n const measures = positionObj.itemContainerMeasures(measurement, config);\n\n const rows = makeElement(container, 'div', datasets.row, `${classPrefix}-legend-row`);\n rows.style(HEIGHT, (d, i) => `${itemSpaces[i].height}px`);\n rows.style(WIDTH, measures.row.width);\n rows.style('padding', measures.row.padding);\n\n const columns = makeElement(rows, 'div', datasets.column, `${classPrefix}-legend-columns`);\n columns.style(WIDTH, measures.column.width);\n columns.style('padding', measures.column.padding);\n\n return columns;\n};\n\n/**\n *\n *\n * @param {*} container\n * @param {*} classPrefix\n * @param {*} data\n * @returns\n * @memberof DiscreteLegend\n */\nexport const createLegendSkeleton = (context, container, classPrefix, data) => {\n let gradWidth = 0;\n let gradHeight = 0;\n let maxGradHeight = 0;\n let maxGradWidth = 0;\n const measurement = context.measurement();\n const {\n margin,\n border,\n titleSpaces,\n width,\n height,\n maxWidth,\n maxHeight\n } = measurement;\n\n gradHeight = height - (titleSpaces.height + 2 * margin + 2 * border);\n gradWidth = width - (margin * 2 + border * 2);\n\n maxGradHeight = maxHeight - (titleSpaces.height + margin * 2 + border * 2);\n maxGradWidth = maxWidth - (margin * 2 + border * 2);\n\n let legendBody = makeElement(container, 'div', [1], `${classPrefix}-legend-body`);\n legendBody.select(`.${classPrefix}-legend-overflow`).remove();\n // Create a div with scroll when overflow\n if (maxGradWidth && maxGradWidth < gradWidth) {\n legendBody = legendBody.style(WIDTH, `${maxGradWidth}px`).style('overflow-x', 'scroll');\n }\n // Create a div with scroll when overflow\n if (maxGradHeight && maxGradHeight < gradHeight) {\n legendBody.style(HEIGHT, `${maxGradHeight}px`).style('overflow-y', 'scroll');\n }\n\n legendBody = makeElement(legendBody, 'div', [1], `${classPrefix}-legend-overflow`);\n\n legendBody.style(WIDTH, `${gradWidth}px`);\n legendBody.style(HEIGHT, `${gradHeight}px`);\n\n const legendItem = getItemContainers(legendBody, data, context);\n return { legendItem };\n};\n\n/**\n * Creates legend item based on alignment and text orientation\n *\n * @param {Selection} container Point where items are to be mounted\n * @return {Instance} Current instance\n * @memberof Legend\n */\nexport const createItemSkeleton = (context, container) => {\n const {\n classPrefix,\n item\n } = context.config();\n const textOrientation = item.text.orientation;\n\n const stack = itemStack[textOrientation];\n const itemSkeleton = makeElement(container, 'div', (d, i) => stack.map(e => [e, d[e], d.color, d.size,\n d.value, context.fieldName(), i]), `${classPrefix}-legend-item-info`);\n\n const alignClass = alignmentMap[textOrientation];\n\n itemSkeleton.classed(alignClass, true);\n return { itemSkeleton };\n};\n\n/**\n *\n *\n * @param {*} measureType\n * @param {*} stepColorCheck\n */\nexport const applyItemStyle = (item, measureType, stepColorCheck, context) => {\n const {\n padding,\n labelSpaces,\n iconSpaces,\n maxIconWidth\n } = context.measurement();\n const diff = stepColorCheck ? -padding * 2 : 0;\n\n if (item[0] === VALUE) {\n return `${labelSpaces[item[6]][measureType]}px`;\n }\n return `${measureType === 'width' && !stepColorCheck ? maxIconWidth : iconSpaces[item[6]][measureType] - diff}px`;\n};\n\n/**\n *\n *\n * @param {*} str\n * @returns\n */\nconst checkPath = (str) => {\n if (/^[mzlhvcsqta]\\s*[-+.0-9][^mlhvzcsqta]+/i.test(str) && /[\\dz]$/i.test(str) && str.length > 4) {\n return true;\n }\n return false;\n};\n\n/**\n *\n *\n * @param {*} d\n * @param {*} elem\n */\nconst createShape = function (d, elem, defaultIcon, width, height) {\n const groupElement = elem;\n // const { shape, size, update } = d;\n const size = d[3] || Math.min(width, height) * Math.PI;\n const shape = d[1] || defaultIcon;\n\n if (shape instanceof Promise) {\n shape.then((res) => {\n d.shape = res;\n return createShape(d, elem);\n });\n } else if (shape instanceof Element) {\n let newShape = shape.cloneNode(true);\n\n if (newShape.nodeName.toLowerCase() === 'img') {\n const src = newShape.src || newShape.href;\n newShape = document.createElementNS('http://www.w3.org/2000/svg', 'image');\n newShape.setAttribute('href', src);\n }\n const shapeElement = selectElement(newShape);\n shapeElement.attr('transform', `scale(${size / 100})`);\n return selectElement(groupElement.node().appendChild(newShape));\n } else if (typeof shape === 'string') {\n let pathStr;\n if (checkPath(shape)) {\n pathStr = shape;\n } else {\n pathStr = ICON_MAP(shape).size(size)();\n }\n return makeElement(groupElement, 'path', data => [data]).attr('d', pathStr);\n }\n d[1] = 'circle';\n return createShape(d, elem, 'circle');\n};\n\n/**\n * Returns the icon of the legend item\n *\n * @param {Object} datum Data property attached to the item\n * @param {number} width width of the item\n * @param {number} height height of the item\n * @return {Object|string} returns the path string or the string name of the icon\n * @memberof Legend\n */\nexport const getLegendIcon = (datum, width, height, defaultIcon) => {\n const icon = ICON_MAP(datum[1]);\n\n if (icon) {\n return icon.size(datum[3] || Math.min(width, height) * Math.PI);\n }\n return ICON_MAP(datum[3] ? 'circle' : defaultIcon).size(datum[3] || Math.min(width, height) * Math.PI);\n};\n\n/**\n *\n *\n */\nexport const renderIcon = (icon, container, datum, context) => {\n const {\n classPrefix,\n iconHeight,\n iconWidth,\n maxIconWidth,\n padding,\n color\n } = context;\n const svg = makeElement(container, 'svg', f => [f], `${classPrefix}-legend-icon-svg`)\n .attr(WIDTH, maxIconWidth)\n .attr(HEIGHT, iconHeight)\n .style(WIDTH, `${maxIconWidth}px`)\n .style(HEIGHT, `${iconHeight}px`);\n\n if (icon !== RECT) {\n const group = makeElement(svg, 'g', [datum[1]], `${classPrefix}-legend-icon`);\n createShape(datum, group, datum[3] ? 'circle' : 'square', iconWidth, iconHeight)\n .attr('transform', `translate(${maxIconWidth / 2 - padding} ${iconHeight / 2})`)\n .attr('fill', datum[2] || color);\n } else {\n makeElement(svg, RECT, [datum[1]], `${classPrefix}-legend-icon`)\n .attr('x', 0)\n .attr('y', 0)\n .attr(WIDTH, maxIconWidth)\n .attr(HEIGHT, iconHeight)\n .attr('fill', datum[2] || color);\n }\n};\n\n/**\n * Renders the items in the legend i.e, icon and text\n *\n * @param {DOM} container Point where item is to be mounted\n * @memberof Legend\n */\nexport const renderDiscreteItem = (context, container) => {\n const labelManager = context._labelManager;\n const {\n item,\n classPrefix\n } = context.config();\n const {\n maxIconWidth,\n padding\n } = context.measurement();\n const {\n width: iconWidth,\n height: iconHeight,\n color,\n className\n } = item.icon;\n\n const textOrientation = item.text.orientation;\n const formatter = item.text.formatter;\n\n labelManager.useEllipsesOnOverflow(true);\n applyStyle(container, {\n width: d => applyItemStyle(d, WIDTH, false, context),\n height: d => applyItemStyle(d, HEIGHT, false, context),\n 'text-align': CENTER,\n padding: `${padding}px`\n });\n\n labelManager.setStyle(context._computedStyle);\n container.each(function (d, i) {\n if (d[0] === VALUE) {\n selectElement(this).text(formatter(d[1]))\n .style(`padding-${textOrientation === RIGHT ? LEFT : RIGHT}`, '0px');\n } else {\n // const icon = getLegendIcon(d, iconWidth, iconHeight, type);\n selectElement(this).classed(`${classPrefix}-${className}`, true);\n selectElement(this).classed(`${classPrefix}-${className}-${i}`, true);\n renderIcon('circle', selectElement(this), d, {\n classPrefix,\n iconWidth,\n // iconWidth: 2 * Math.sqrt(d[3] / Math.PI) || iconWidth,\n iconHeight,\n maxIconWidth,\n padding,\n color\n });\n }\n });\n};\n\n/**\n* Renders the items in the legend i.e, icon and text\n*\n* @param {DOM} container Point where item is to be mounted\n* @memberof Legend\n*/\nexport const renderStepItem = (context, container) => {\n const labelManager = context._labelManager;\n const {\n item,\n position,\n classPrefix\n } = context.config();\n const {\n maxItemSpaces,\n maxIconWidth,\n padding\n } = context.measurement();\n const {\n width,\n height,\n color\n } = item.icon;\n const {\n formatter\n } = item.text;\n\n labelManager.useEllipsesOnOverflow(true);\n const { iconHeight, iconWidth, stepPadding } = positionConfig[position].getStepSpacesInfo({\n maxItemSpaces, height, width\n });\n\n applyStyle(container, {\n width: d => applyItemStyle(d, WIDTH, stepPadding.horizontal, context),\n height: d => applyItemStyle(d, HEIGHT, stepPadding.vertical, context),\n 'text-align': 'center',\n padding: `${padding}px`\n });\n\n labelManager.setStyle(context._computedStyle);\n container.each(function (d) {\n if (d[0] === VALUE) {\n selectElement(this).text(formatter(d[1]));\n } else {\n renderIcon(RECT, selectElement(this), d, {\n classPrefix,\n iconWidth,\n iconHeight,\n maxIconWidth,\n color\n });\n }\n });\n};\n","import SimpleLegend from './simple-legend';\nimport { DISCRETE, LEFT, SIZE } from '../enums/constants';\nimport { getScaleInfo } from './legend-helper';\nimport { createLegendSkeleton, createItemSkeleton, renderDiscreteItem } from './renderer';\nimport '../styles.scss';\n\n/**\n * Creates a Legend from the axes of a canvas\n *\n * @param {Object} dependencies : legend data\n * @class Legend\n */\nexport default class DiscreteLegend extends SimpleLegend {\n\n /**\n * Initializes an instance of the class\n *\n * @static\n * @param {Object} dependencies Set of dependencies required by the legend\n * @return {Instance} returns a new instance of Legend\n * @memberof Legend\n */\n static create (dependencies) {\n return new DiscreteLegend(dependencies);\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof DiscreteLegend\n */\n static type () {\n return DISCRETE;\n }\n\n /**\n *\n *\n * @param {*} scale\n * @returns\n * @memberof DiscreteLegend\n */\n dataFromScale (scale) {\n const { scaleType, domain, scaleFn } = getScaleInfo(scale);\n let domainForLegend = [...new Set(domain)];\n const type = this.metaData().getData().schema[0].type;\n\n domainForLegend = domainForLegend.map((ele, i) => {\n let value = 0;\n let range = 0;\n if (type === 'measure') {\n value = (+domainForLegend[i]).toFixed(0);\n const nextVal = domainForLegend[i + 1] ? +domainForLegend[i + 1] : +value;\n range = [value, nextVal.toFixed(0)];\n } else {\n value = domainForLegend[i];\n range = [domainForLegend[i]];\n }\n return {\n [scaleType]: scale[scaleFn](ele),\n value,\n id: i,\n range\n };\n }).filter(d => d.value !== null);\n\n domainForLegend = scaleType === SIZE ? domainForLegend.sort((a, b) => a[scaleType] - b[scaleType])\n : domainForLegend;\n return domainForLegend;\n }\n\n /**\n * Render the legend with its title\n *\n * @param {DOM} mountPoint Point where the legend and title are to be appended\n * @return {Instance} Current instance of legend\n * @memberof Legend\n */\n render () {\n const firebolt = this.firebolt();\n const data = this.data();\n const { classPrefix } = this.config();\n const legendContainer = super.render(this.mount());\n // create Legend\n const { legendItem } = createLegendSkeleton(this, legendContainer, classPrefix, data);\n const { itemSkeleton } = createItemSkeleton(this, legendItem);\n renderDiscreteItem(this, itemSkeleton);\n legendContainer.selectAll('div').style('float', LEFT);\n firebolt.mapActionsAndBehaviour();\n firebolt.createSelectionSet(this.data().map(d => d.id));\n return legendContainer;\n }\n}\n","import { makeElement, applyStyle } from 'muze-utils';\nimport { ContinousAxis } from '@chartshq/muze-axis';\nimport { BOTTOM, RIGHT } from '../enums/constants';\nimport { ALIGN } from './defaults';\nimport '../styles.scss';\n\n/**\n *\n *\n * @param {*} data\n * @returns\n */\nexport const getGradientDomain = (data) => {\n if (typeof data[0].value === 'number') {\n return data.reduce((accumulator, currentValue) =>\n [Math.min(currentValue.value, accumulator[0]), Math.max(currentValue.value, accumulator[1])],\n [Number.MAX_VALUE, Number.MIN_VALUE]);\n }\n return data.map(e => e.value);\n};\n\n/**\n *\n *\n * @param {*} container\n * @param {*} data\n * @param {*} domain\n * @returns\n */\nexport const makeLinearGradient = (container, data, domain) => {\n const defs = makeElement(container, 'defs', [1]);\n const linearGradient = makeElement(defs, 'linearGradient', [1])\n .attr('id', 'linear-gradient')\n .attr('x1', '0%')\n .attr('y2', '0%');\n makeElement(linearGradient, 'stop', data, 'stop-gradient')\n .attr('offset', d => `${(d.value - domain[0]) * 100 / (domain[1] - domain[0])}%`)\n .attr('stop-color', d => d.color);\n return linearGradient;\n};\n\n/**\n * Creates an axis cell with a linear axis for computing space and\n * creating gradient legend\n *\n * @return {AxisCell} Instance of Axis Cell for the gradient axis\n * @memberof Legend\n */\nexport const createAxis = (context) => {\n const data = context.data();\n const { align } = context.config();\n const AxisCell = context._cells.AxisCell;\n const newAxis = new ContinousAxis({\n id: `legend-${context._id}`,\n orientation: align === ALIGN.VERTICAL ? RIGHT : BOTTOM,\n style: context._computedStyle,\n nice: false,\n showAxisName: false,\n tickValues: data.map(d => d.value),\n fixedBaseline: false\n }, { labelManager: context._labelManager });\n\n newAxis.domain(getGradientDomain(data));\n newAxis.range([1, 1]);\n return new AxisCell().source(newAxis).config({\n margin: { left: 0, bottom: 0, top: 0, right: 0 }\n });\n};\n\n/**\n *\n *\n * @param {*} container\n * @param {*} data\n * @param {*} classPrefix\n * @returns\n * @memberof GradientLegend\n */\nconst createLegendSkeleton = (container, classPrefix, data) => {\n const domain = getGradientDomain(data);\n const legendContainer = makeElement(container, 'div', [1], `${classPrefix}-legend-body`);\n const legendGradSvg = makeElement(legendContainer, 'svg', [1], `${classPrefix}-gradient`);\n const legendGradCont = makeElement(legendGradSvg, 'g', [1], `${classPrefix}-gradient-group`);\n const linearGradient = makeLinearGradient(legendGradSvg, data, domain);\n const legendRect = makeElement(legendGradCont, 'rect', [1], `${classPrefix}-gradient-rect`);\n\n return {\n legendContainer,\n legendGradCont,\n legendGradSvg,\n linearGradient,\n legendRect\n };\n};\n\n/**\n * Renders the axis for the gradient\n *\n * @param {Selection} container Point where axis is to be mounted\n * @param {number} height Height for axis\n * @param {number} width Width for axis\n * @memberof Legend\n */\nexport const renderAxis = (context, container, height, width) => {\n const axis = context.axis();\n\n axis.setAvailableSpace(width, height);\n axis.render(container.node());\n};\n\n/**\n * Renders gradient legends\n *\n * @param {Selection} container Point where the legend is to be appended\n * @memberof GradientLegend\n */\nexport const renderGradient = (context, container) => {\n let gradHeight = 0;\n let gradWidth = 0;\n const {\n align,\n classPrefix,\n item\n } = context.config();\n const data = context.data();\n // Create the skeleton for the legend\n const {\n legendContainer,\n legendGradSvg,\n legendGradCont,\n linearGradient,\n legendRect\n } = createLegendSkeleton(container, classPrefix, data);\n const labelDim = context.axis().source().getAxisDimensions().tickLabelDim;\n const {\n padding,\n margin,\n border,\n titleSpaces,\n maxHeight,\n maxWidth,\n height,\n width\n } = context.measurement();\n const gradientDimensions = {};\n\n gradHeight = Math.floor(height - (titleSpaces.height + 2 * margin + 2 * border));\n gradWidth = Math.floor(width - (margin * 2 + border * 2));\n\n if (align === ALIGN.HORIZONTAL) {\n gradientDimensions.height = item.icon.height;\n gradientDimensions.width = gradWidth - 2 * padding - labelDim.width / 2;\n linearGradient.attr('x2', '100%').attr('y1', '0%');\n legendGradCont.attr('transform', `translate( ${labelDim.width / 2} 0)`);\n renderAxis(context, legendContainer, gradHeight - item.icon.height - padding, gradWidth - 2 * padding - 1);\n legendContainer.classed(`${classPrefix}-overflow-x`, width > maxWidth);\n\n applyStyle(legendContainer, {\n height: `${height}px`,\n width: `${Math.min(width, maxWidth)}px`,\n padding: `${padding}px`\n });\n\n legendRect.attr('height', gradientDimensions.height);\n legendRect.attr('width', gradientDimensions.width - labelDim.width / 2);\n } else {\n gradientDimensions.height = gradHeight - 2 * padding - labelDim.height / 2;\n gradientDimensions.width = item.icon.width;\n linearGradient.attr('x2', '0%').attr('y1', '100%');\n legendGradCont.attr('transform', `translate(0 ${labelDim.height / 2})`);\n renderAxis(context, legendContainer, gradHeight - 2 * padding - 1, gradWidth - item.icon.width - padding * 2);\n legendContainer.classed(`${classPrefix}-overflow-y`, height > maxHeight);\n applyStyle(legendContainer, {\n height: `${Math.min(height, maxHeight)}px`,\n width: `${width}px`,\n padding: `${padding}px`\n });\n legendRect.attr('height', gradientDimensions.height - labelDim.height / 2);\n legendRect.attr('width', gradientDimensions.width);\n }\n\n // Apply Styles to the legend plot area\n applyStyle(legendGradSvg, {\n height: `${gradientDimensions.height}px`,\n width: `${gradientDimensions.width}px`\n });\n\n // Apply styles to the legend rect\n applyStyle(legendRect, {\n fill: 'url(#linear-gradient)'\n });\n legendGradSvg.attr('height', gradientDimensions.height);\n legendGradSvg.attr('width', gradientDimensions.width);\n\n context.measurement({\n gradientDimensions\n });\n context._legendGradientSvg = legendGradSvg;\n return context;\n};\n","import SimpleLegend from './simple-legend';\nimport { getScaleInfo, getInterpolatedData } from './legend-helper';\nimport { GRADIENT, LEFT, SIZE } from '../enums/constants';\nimport { renderGradient, createAxis } from './gradient-helper';\nimport '../styles.scss';\n\n/**\n * Creates a Legend from the axes of a canvas\n *\n * @param {Object} dependencies : legend data\n * @class Legend\n */\nexport default class GradientLegend extends SimpleLegend {\n\n /**\n * Initializes an instance of the class\n *\n * @static\n * @param {Object} dependencies Set of dependencies required by the legend\n * @return {Instance} returns a new instance of Legend\n * @memberof Legend\n */\n static create (dependencies) {\n return new GradientLegend(dependencies);\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof GradientLegend\n */\n static type () {\n return GRADIENT;\n }\n\n /**\n *\n *\n * @param {*} axis\n * @returns\n * @memberof GradientLegend\n */\n axis (...axis) {\n if (axis.length) {\n this._axis = axis[0];\n return this;\n }\n return this._axis;\n }\n\n /**\n *\n *\n * @param {*} scale\n * @returns\n * @memberof GradientLegend\n */\n dataFromScale (scale) {\n let domainForLegend = [];\n const { scaleType, domain, steps, scaleFn } = getScaleInfo(scale);\n\n if (steps instanceof Array) {\n if (domain[0] < steps[0]) {\n domainForLegend[0] = domain[0];\n }\n domainForLegend = [...domainForLegend, ...steps];\n if (domain[domain.length - 1] > steps[steps.length - 1]) {\n domainForLegend.push(domain[1]);\n }\n } else {\n domainForLegend = getInterpolatedData(domain, steps - 1);\n }\n domainForLegend = [...new Set(domainForLegend)].sort((a, b) => a - b);\n\n return domainForLegend.map((ele, i) => {\n const value = domainForLegend[i];\n return {\n [scaleType]: scaleType === SIZE ? scale[scaleFn](ele) * scale.getScaleFactor()\n : scale[scaleFn](Math.floor(ele)),\n value: +value.toFixed(2),\n id: i\n };\n }).filter(d => d.value !== null);\n }\n\n /**\n *\n *\n * @param {*} effPadding\n * @param {*} align\n * @return\n * @memberof Legend\n */\n getLabelSpaces (effPadding) {\n this.config({\n item: {\n text: {\n orientation: this.config().position\n }\n }\n });\n const axis = createAxis(this);\n const axisSpace = axis.getLogicalSpace();\n const space = { width: axisSpace.width - effPadding, height: axisSpace.height - effPadding };\n const axisDomainLength = axis.source().domain().length;\n const labelSpaces = new Array(axisDomainLength).fill(space);\n\n this.axis(axis);\n return labelSpaces;\n }\n\n /**\n *\n *\n * @returns\n * @memberof GradientLegend\n */\n getDrawingContext () {\n return {\n svgContainer: this._legendGradientSvg\n };\n }\n\n /**\n * Render the legend with its title\n *\n * @param {DOM} mountPoint Point where the legend and title are to be appended\n * @return {Instance} Current instance of legend\n * @memberof Legend\n */\n render () {\n const firebolt = this.firebolt();\n const legendContainer = super.render(this.mount());\n // create Legend\n renderGradient(this, legendContainer);\n legendContainer.selectAll('div').style('float', LEFT);\n firebolt.mapActionsAndBehaviour();\n firebolt.createSelectionSet(this.data().map(d => d.id));\n return legendContainer;\n }\n /**\n *\n *\n * @param {*} data\n * @returns\n * @memberof SimpleLegend\n */\n getCriteriaFromData (data) {\n return [[this.fieldName()], [data.value]];\n }\n}\n","import SimpleLegend from './simple-legend';\nimport {\n getScaleInfo,\n getInterpolatedData,\n getDomainBounds\n} from './legend-helper';\nimport {\n createLegendSkeleton,\n createItemSkeleton,\n renderStepItem\n} from './renderer';\nimport { STEP, RECT, LEFT, SIZE, UPPER, LOWER } from '../enums/constants';\nimport { stepData } from './position-config';\nimport '../styles.scss';\n\n/**\n * Creates a Legend from the axes of a canvas\n *\n * @param {Object} dependencies : legend data\n * @class Legend\n */\nexport default class StepLegend extends SimpleLegend {\n\n /**\n * Initializes an instance of the class\n *\n * @static\n * @param {Object} dependencies Set of dependencies required by the legend\n * @return {Instance} returns a new instance of Legend\n * @memberof Legend\n */\n static create (dependencies) {\n return new StepLegend(dependencies);\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof StepLegend\n */\n static type () {\n return STEP;\n }\n\n /**\n *\n *\n * @param {*} scale\n * @returns\n * @memberof StepLegend\n */\n dataFromScale (scale) {\n let domainLeg = [];\n const { scaleType, domain, steps, scaleFn } = getScaleInfo(scale);\n\n const { formatter } = this.config();\n const domainBounds = {\n lower: null, upper: null\n };\n\n if (steps instanceof Array) {\n if (domain[0] < steps[0]) {\n domainBounds.lower = [`${formatter.bounds.lower} ${steps[0]}`];\n }\n domainLeg = [...domainLeg, ...steps];\n if (domain[domain.length - 1] > steps[steps.length - 1]) {\n domainBounds.upper = [`${formatter.bounds.upper} ${steps[steps.length - 1]}`];\n }\n } else {\n domainLeg = getInterpolatedData(domain, steps);\n }\n\n domainLeg = [...new Set(domainLeg)].sort((a, b) => a - b);\n domainLeg = domainLeg.map((ele, i) => {\n let value = null;\n if (i < domainLeg.length - 1) {\n value = `${(ele.toFixed(1))} - ${(+domainLeg[i + 1].toFixed(1))}`;\n }\n return {\n [scaleType]: scaleType === SIZE ? scale[scaleFn](ele) * scale.getScaleFactor() : scale[scaleFn](ele),\n value,\n id: i + 1,\n range: [ele, domainLeg[i + 1]]\n };\n }).filter(d => d.value !== null);\n\n if (domainBounds.lower) {\n const lowerBounds = getDomainBounds(LOWER, { scale, scaleFn, scaleType },\n { domain, steps, domainBounds });\n domainLeg = [lowerBounds, ...domainLeg];\n }\n if (domainBounds.upper) {\n const upperBounds = getDomainBounds(UPPER, { scale, scaleFn, scaleType },\n { domain, steps, domainBounds, domainLeg });\n domainLeg = [...domainLeg, upperBounds];\n }\n return domainLeg;\n }\n\n /**\n *\n *\n * @param {*} effPadding\n * @param {*} align\n * @return\n * @memberof Legend\n */\n getLabelSpaces (effPadding, align) {\n this.config({\n item: {\n text: {\n orientation: this.config().position\n }\n }\n });\n return super.getLabelSpaces(effPadding, align);\n }\n\n /**\n *\n *\n * @return\n * @memberof Legend\n */\n elemType () {\n return RECT;\n }\n\n /**\n * Render the legend with its title\n *\n * @param {DOM} mountPoint Point where the legend and title are to be appended\n * @return {Instance} Current instance of legend\n * @memberof Legend\n */\n render () {\n const firebolt = this.firebolt();\n const { classPrefix, position } = this.config();\n const data = stepData(this.data())[position];\n\n const legendContainer = super.render(this.mount());\n\n // create Legend\n const { legendItem } = createLegendSkeleton(this, legendContainer, classPrefix, data);\n const { itemSkeleton } = createItemSkeleton(this, legendItem);\n\n renderStepItem(this, itemSkeleton);\n legendContainer.selectAll('div').style('float', LEFT);\n firebolt.mapActionsAndBehaviour();\n firebolt.createSelectionSet(this.data().map(d => d.id));\n return legendContainer;\n }\n\n /**\n *\n *\n * @param {*} data\n * @returns\n * @memberof StepLegend\n */\n getCriteriaFromData (data) {\n const fieldName = this.fieldName();\n return {\n [fieldName]: data.range\n };\n }\n}\n","import { GradientLegend, DiscreteLegend, StepLegend } from '@chartshq/muze-legend';\n\n/**\n * Contants to be used as attr\n */\nexport const ROWS = 'rows';\nexport const COLUMNS = 'columns';\nexport const DATA = 'data';\nexport const COLOR = 'color';\nexport const SHAPE = 'shape';\nexport const SIZE = 'size';\nexport const DETAIL = 'detail';\nexport const LAYERS = 'layers';\nexport const TRANSFORM = 'transform';\nexport const INITIALIZED = 'isInitialized';\nexport const SOURCE = 'source';\nexport const WIDTH = 'width';\nexport const HEIGHT = 'height';\nexport const PADDING = 'padding';\nexport const BORDER = 'border';\nexport const MARGIN = 'margin';\nexport const CONFIG = 'config';\nexport const MOUNT = 'mount';\nexport const CANVAS_UPDATED = 'canvasUpdated';\nexport const CLASSPREFIX = 'classPrefix';\nexport const POLICIES = '_policies';\nexport const LEGEND = 'legend';\nexport const TITLE = 'title';\nexport const SUB_TITLE = 'subtitle';\nexport const RESOLVE = 'resolve';\nexport const DISCRETE = 'discrete';\nexport const STEP_COLOR = 'step-color';\nexport const GRADIENT = 'gradient';\nexport const LINEAR = 'linear';\nexport const ORDINAL = 'ordinal';\n\nexport const TITLE_TEMPLATE_NOT_ALLOWED_TAGS = [\n 'script',\n 'style'\n];\n\nexport const LEGEND_TYPE_MAP = {\n [`${ORDINAL}-${true}-${COLOR}`]: DiscreteLegend,\n [`${ORDINAL}-${true}-${SIZE}`]: DiscreteLegend,\n [`${ORDINAL}-${true}-${SHAPE}`]: DiscreteLegend,\n [`${ORDINAL}-${false}-${COLOR}`]: DiscreteLegend,\n [`${ORDINAL}-${false}-${SHAPE}`]: DiscreteLegend,\n [`${ORDINAL}-${false}-${SIZE}`]: DiscreteLegend,\n [`${LINEAR}-${false}-${SIZE}`]: DiscreteLegend,\n [`${LINEAR}-${true}-${SIZE}`]: DiscreteLegend,\n [`${LINEAR}-${false}-${SHAPE}`]: DiscreteLegend,\n [`${LINEAR}-${true}-${COLOR}`]: StepLegend,\n [`${LINEAR}-${false}-${COLOR}`]: GradientLegend\n};\n\nexport const LEFT = 'left';\nexport const RIGHT = 'right';\nexport const BOTTOM = 'bottom';\nexport const TOP = 'top';\nexport const GROUP = 'group';\nexport const LAYOUT = 'layout';\nexport const RETINAL = 'retinal';\nexport const DIMENSION = 'dimension';\nexport const MEASURE = 'measure';\nexport const VERTICAL = 'vertical';\nexport const HORIZONTAL = 'horizontal';\n\n","import { ComposedVars, SimpleVariable } from '@chartshq/visual-group';\nimport { TITLE_TEMPLATE_NOT_ALLOWED_TAGS } from './constants';\n\n/**\n * This method creates a new composed variable instance from multiple variables.\n * @param {Array} vars Variable names\n * @return {ComposedVars} Instance of composed variable\n */\nexport const share = (...vars) => new ComposedVars(...vars.map(variable => new SimpleVariable(variable)));\n\n/**\n *\n *\n * @param {*} node\n * @returns\n */\nfunction treeShakeNode (node) {\n if (node.nodeType !== Node.ELEMENT_NODE) { return; }\n\n if (TITLE_TEMPLATE_NOT_ALLOWED_TAGS.indexOf(node.tagName.toLowerCase()) !== -1) {\n node.parentNode.removeChild(node);\n } else {\n for (const childNode of node.childNodes) {\n treeShakeNode(childNode);\n }\n }\n}\n\n/**\n * A string template tagged function which sanitizes input html formatted\n * string according to the allowed html tags.\n *\n * @param {Array.} strings - The string parts of the template.\n * @param {Array} exps - The list of evaluated expression values.\n * @return {Function} Returns a function which returns the sanitized html string.\n */\nexport function html (strings, ...exps) {\n let htmlCode = '';\n const expLn = exps.length;\n let i = 0;\n\n for (; i < expLn; ++i) {\n htmlCode += strings[i] + exps[i];\n }\n htmlCode += strings[i];\n\n const frag = document.createDocumentFragment();\n const wrapper = document.createElement('div');\n\n frag.appendChild(wrapper);\n wrapper.innerHTML = htmlCode;\n\n treeShakeNode(wrapper);\n const { innerHTML } = wrapper;\n\n return () => innerHTML;\n}\n","import { mergeRecursive } from 'muze-utils';\n\nconst defaultPolicy = (registrableComponents) => {\n const aliases = registrableComponents.map(comp => comp.alias());\n return {\n behaviours: {\n '*': (propagationPayload) => {\n const propagationCanvas = propagationPayload.sourceCanvas;\n return propagationCanvas ? aliases.indexOf(propagationCanvas) !== -1 : true;\n }\n }\n };\n};\n\nclass ActionModel {\n constructor () {\n this._registrableComponents = [];\n }\n\n registerPhysicalActions (action) {\n const canvases = this._registrableComponents;\n\n canvases.forEach((canvas) => {\n canvas.once('canvas.updated').then((args) => {\n const matrix = args.client.composition().visualGroup.matrixInstance().value;\n matrix.each(cell => cell.valueOf().firebolt().registerPhysicalActions(action));\n });\n });\n return this;\n }\n\n registerBehaviouralActions (...actions) {\n const canvases = this._registrableComponents;\n\n canvases.forEach((canvas) => {\n canvas.once('canvas.updated').then(() => {\n const matrix = canvas.composition().visualGroup.matrixInstance().value;\n matrix.each(cell => cell.valueOf().firebolt().registerBehaviouralActions(...actions));\n });\n });\n return this;\n }\n\n /**\n *\n *\n * @param {*} map\n * @returns\n * @memberof ActionModel\n */\n registerPhysicalBehaviouralMap (map) {\n const canvases = this._registrableComponents;\n\n canvases.forEach((canvas) => {\n canvas.once('canvas.updated').then((args) => {\n const matrix = args.client.composition().visualGroup.matrixInstance().value;\n matrix.each(cell => cell.valueOf().firebolt().registerPhysicalBehaviouralMap(map));\n });\n });\n return this;\n }\n\n registerPropagationBehaviourMap (map) {\n const canvases = this._registrableComponents;\n\n canvases.forEach((canvas) => {\n canvas.once('canvas.updated').then((args) => {\n const matrix = args.client.composition().visualGroup.matrixInstance().value;\n matrix.each(cell => cell.valueOf().firebolt().registerPropagationBehaviourMap(map));\n });\n });\n return this;\n }\n\n mapSideEffects (map) {\n const canvases = this._registrableComponents;\n\n canvases.forEach((canvas) => {\n canvas.once('canvas.updated').then(() => {\n const matrix = canvas.composition().visualGroup.matrixInstance().value;\n matrix.each(cell => cell.valueOf().firebolt().mapSideEffects(map));\n });\n });\n return this;\n }\n\n for (...components) {\n this._registrableComponents = components;\n return this;\n }\n\n registerSideEffects (...sideEffects) {\n const registrableComponents = this._registrableComponents;\n\n registrableComponents.forEach((canvas) => {\n canvas.once('canvas.updated').then((args) => {\n const matrix = args.client.composition().visualGroup.matrixInstance().value;\n matrix.each(cell => cell.valueOf().firebolt().registerSideEffects(sideEffects));\n });\n });\n\n return this;\n }\n\n dissociateBehaviour (...maps) {\n const registrableComponents = this._registrableComponents;\n\n registrableComponents.forEach((canvas) => {\n canvas.once('canvas.updated').then((args) => {\n const matrix = args.client.composition().visualGroup.matrixInstance().value;\n matrix.each((cell) => {\n maps.forEach(val => cell.valueOf().firebolt().dissociateBehaviour(val[0], val[1]));\n });\n });\n });\n\n return this;\n }\n\n dissociateSideEffect (...maps) {\n const registrableComponents = this._registrableComponents;\n\n registrableComponents.forEach((canvas) => {\n canvas.once('canvas.updated').then((args) => {\n const matrix = args.client.composition().visualGroup.matrixInstance().value;\n matrix.each((cell) => {\n maps.forEach(val => cell.valueOf().firebolt().dissociateSideEffect(val[0], val[1]));\n });\n });\n });\n\n return this;\n }\n\n enableCrossInteractivity (policy = {}) {\n const registrableComponents = this._registrableComponents;\n const mergedPolicy = mergeRecursive(mergeRecursive({}, defaultPolicy(registrableComponents)), policy);\n\n registrableComponents.forEach((canvas) => {\n canvas.firebolt().crossInteractionPolicy(mergedPolicy);\n });\n\n return this;\n }\n}\n\nexport const actionModel = (() => new ActionModel())();\n","export const DEFAULT_CONFIG = {\n classPrefix: 'muze',\n interaction: {\n sideEffect: 'individual'\n },\n legend: {\n position: 'right',\n color: {\n show: true,\n padding: 1,\n margin: 3,\n border: 1,\n height: 20,\n width: 20\n },\n shape: {\n show: true,\n padding: 1,\n margin: 3,\n border: 1,\n height: 20,\n width: 20\n },\n size: {\n show: true,\n padding: 1,\n margin: 3,\n border: 1,\n height: 20,\n width: 20\n }\n },\n showHeaders: false,\n minWidth: 100,\n minHeight: 100,\n border: {\n style: 'solid',\n color: '#d6d6d6',\n width: 2,\n collapse: true,\n spacing: 0\n },\n autoGroupBy: {\n disabled: false\n }\n};\n","/**\n * @module\n * This is the global options semantics based on which setters getters are created and reactivity is initiated.\n * Format\n * PROPERTRY_NAME: {\n * value: // default value of the property,\n * meta: {\n * typeCheck: // The setter value will be checked using this. If the value is function then the setter value\n * // is passed as args.\n * typeExpected: // The output of typecheck action will be tested against this. Truthy value will set the\n * // value to the setter\n * sanitizaiton: // Need for sanitization before type is checked\n * }\n * }\n */\n\nimport { intSanitizer, mergeRecursive, DataModel } from 'muze-utils';\nimport { DEFAULT_CONFIG } from './defaults';\n\nexport default {\n data: {\n value: null,\n meta: {\n typeCheck: d => d instanceof DataModel\n }\n },\n width: {\n value: 0,\n meta: {\n sanitization: intSanitizer,\n typeCheck: Number.isInteger\n }\n },\n height: {\n value: 0,\n meta: {\n sanitization: intSanitizer,\n typeCheck: Number.isInteger\n }\n },\n minUnitWidth: {\n value: 50,\n meta: {\n sanitization: intSanitizer,\n typeCheck: Number.isInteger\n }\n },\n minUnitHeight: {\n value: 50,\n meta: {\n sanitization: intSanitizer,\n typeCheck: Number.isInteger\n }\n },\n config: {\n value: null,\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Object',\n sanitization: (config, oldConfig) => {\n const oldConf = mergeRecursive({}, oldConfig);\n const defConfig = mergeRecursive(oldConf, DEFAULT_CONFIG);\n const newConf = mergeRecursive(defConfig, config);\n return newConf;\n }\n\n }\n }\n};\n","/**\n * This file exports constants that will be used to\n * create the state store of the table layout.\n */\n/**\n * The index of top, bottom and center in the matrix\n */\nexport const VIEW_INDEX = {\n top: 0,\n center: 1,\n bottom: 2\n};\n\n/**\n * The width of the grid suppied by the user.\n */\nexport const GRID_WIDTH = 'width';\n\n/**\n * The height of the grid supplied by the user.\n */\nexport const GRID_HEIGHT = 'height';\n\n/**\n * The border for the grid\n */\nexport const BORDER = 'border';\n\n /**\n * The index of the first visible row in view matrix.\n */\nexport const ROW_POINTER = 'rowPointer';\n\n/**\n * The index of the first visible column in the view matrix.\n */\nexport const COLUMN_POINTER = 'columnPointer';\n\n/**\n * Flag to specify whether row sizes should be equal.\n */\nexport const ROW_SIZE_IS_EQUAL = 'isRowSizeEqual';\n\n/**\n * Flag to specify whether column sizes are equal.\n */\nexport const COLUMN_SIZE_IS_EQUAL = 'isColumnSizeEqual';\n\n/**\n * Field to store an array an of the widths of visible columns.\n * @computed\n */\nexport const COLUMN_WIDTHS = 'visibleColumnWidths';\n\n/**\n * Field to store an array of heights of visible rows.\n * @computed\n */\nexport const ROW_HEIGHTS = 'visibleRowHeights';\n\n/**\n * Field to store the width of the left matrix.\n * @computed\n */\nexport const LEFT_MATRIX_WIDTH = 'leftMatrixWidth';\n\n/**\n * Field to store the width of the right matrix.\n * @computed\n */\nexport const RIGHT_MATRIX_WIDTH = 'rightMatrixWidth';\n\n/**\n * Field to store the height of the top matrix.\n * @computed\n */\nexport const TOP_MATRIX_HEIGHT = 'topMatrixHeight';\n\n/**\n * Field to store the height of the bottom matrix.\n * @computed\n */\nexport const BOTTOM_MATRIX_HEIGHT = 'bottomMatrixHeight';\n\n/**\n * The dom element to render the layout inside.\n */\nexport const MOUNT_POINT = 'mount';\n\n/**\n * The id attribute of the left table element.\n */\nexport const LEFT_TABLE_ID = 'grid-left';\n\n/**\n * The id attribute of the right table element.\n */\nexport const RIGHT_TABLE_ID = 'grid-right';\n\n/**\n * The id attribute of the top table.\n */\nexport const TOP_TABLE_ID = 'grid-top';\n\n/**\n * The id attribute of the bottom table.\n */\nexport const BOTTOM_TABLE_ID = 'grid-bottom';\n\n/**\n * The id attribute of the center table.\n */\nexport const CENTER_TABLE_ID = 'grid-center';\n\n/**\n * The id attribute of the top div.\n */\nexport const TOP_DIV_ID = 'muze-div-top';\n\n/**\n * The id attribute of the bottom div.\n */\nexport const BOTTOM_DIV_ID = 'muze-div-bottom';\n\n/**\n * The id attribute of the center div.\n */\nexport const CENTER_DIV_ID = 'muze-div-center';\n\n/**\n * Field that indicates if the row configuration has changed\n */\nexport const HAVE_ROWS_CHANGED = 'haveRowsChanged';\n\n/**\n * Field that indicates if the column configuration has changed\n */\nexport const HAVE_COLUMNS_CHANGED = 'haveColumnsChanged';\n\n/**\n * Field that indicates if the values configuration for the center matrix has changed\n */\nexport const HAVE_VALUES_CHANGED = 'haveValuesChanged';\n\n/**\n * Field that indicates the width of row matrix\n */\nexport const ROW_MATRIX_WIDTH = 'rowMatrixWidth';\n\n/**\n * Field that indicates the height of row matrix\n */\nexport const COLUMN_MATRIX_HEIGHT = 'columnMatrixHeight';\n\n/**\n * Field that indicates the unit width of layout\n */\nexport const UNIT_WIDTH = 'unitWidth';\n\n/**\n * Field that indicates the unit height of layout\n */\nexport const UNIT_HEIGHT = 'unitHeight';\n\n/**\n * Field that indicates the style object\n */\nexport const STYLE = 'style';\n\n/**\n * Field that indicates the color configuration\n */\nexport const COLOR = 'color';\n\n/**\n * Field that indicates width\n */\nexport const WIDTH = 'width';\n\n/**\n * Field that indicates collpase property for border\n */\nexport const COLLAPSE = 'collapse';\n\n/**\n * Field that indicates spacing property for border\n */\nexport const SPACING = 'spacing';\n\n/**\n * Field that indicates spacing property for border\n */\nexport const DISTRIBUTION = 'distribution';\n\n/**\n * Field that indicates spacing property for border\n */\nexport const GUTTERSPACE = 'gutterSpace';\n\n/**\n * Field that indicates spacing property for border\n */\nexport const BREAK_PAGE = 'breakPage';\n\n/**\n * Field that indicates spacing property for border\n */\nexport const SHOW_ROW_BORDERS = 'showRowBorders';\n\n/**\n * Field that indicates spacing property for border\n */\nexport const SHOW_COL_BORDERS = 'showColBorders';\n\n/**\n * Field that indicates spacing property for border\n */\nexport const SHOW_VALUE_BORDERS = 'showValueBorders';\n\nexport const HEIGHT = 'height';\nexport const COLUMN = 'column';\nexport const ROW = 'row';\nexport const TOP = 'top';\nexport const LEFT = 'left';\nexport const RIGHT = 'right';\nexport const BOTTOM = 'bottom';\nexport const CENTER = 'center';\nexport const CLICK = 'click';\nexport const ROW_LEFT = 'rowLeft';\nexport const ROW_RIGHT = 'rowRight';\nexport const COLUMN_BOTTOM = 'colBottom';\nexport const COLUMN_TOP = 'colTop';\nexport const AUTO = 'auto';\nexport const ROW_SPAN = 'rowSpan';\nexport const COL_SPAN = 'colSpan';\nexport const ROW_ROOT = 'rowRoot';\nexport const COLUMN_ROOT = 'columnRoot';\nexport const PRIMARY = 'primary';\nexport const SECONDARY = 'secondary';\n","import { sanitizeIP, mergeRecursive } from 'muze-utils';\nimport { TOP, CENTER, BOTTOM } from '../enums/constants';\n\n/*\n * This is the abstract implementation of the root layout. This takes care of common work which all the layouts\n * has to handle. The common work includes sanitizaion of inputs, update, rerender, dispose etc. This class can't be\n * used directly (as ofcourse this is an abstract implementaiton), the class which is implementing it has to implement\n * the necessary methods and gives its on visual.\n */\n\n/**\n * This class is used to create a generic layout. It can be extended to create layouts\n * of different types\n * @class GenericLayout\n */\nexport default class GenericLayout {\n\n /**\n * Creates an instance of TableLayout.\n * @param {HTMLElement} mountPoint DOM element/d3 selection where the layout is to be mounted\n * @param {Object} measurement The dimensions of the layout\n * @param {Object} config configuration to be given for the layout\n * @param {Object} dependencies external dependencies.\n * @memberof GenericLayout\n *\n * measurement : {\n * width : number => width of the container\n * height : number => height of the container\n * unitHeight : number => height of unit of the cells\n * unitWidth : number => width of unit of the cells\n * }\n *\n */\n constructor (mountPoint, measurement, config, dependencies) {\n this._config = {};\n this._measurement = {};\n this._matrices = [];\n // External dependencies to be included for the layout. This includes the ext global dependencies like\n // smartlabel which has one single implementation of throughout the page or per isntance\n this._dependencies = dependencies;\n\n this.measurement(measurement);\n this.mountPoint(mountPoint);\n this.config(config);\n }\n\n /**\n * Returns an object which is used to recreate the layout.\n * @return {Object} the serialized components\n */\n serialize () {\n return {\n measurement: this.measurement(),\n config: this.config(),\n matrices: this.matrices()\n };\n }\n\n /**\n * Sets/Gets the config for the layout\n * @param {Object} config configuration for the layout\n * @return {Layout|Object} Gets the Config/ Returns this instance when set\n */\n config (config) {\n if (config) {\n this._config = mergeRecursive(this._config || {}, config);\n return this;\n }\n return this._config;\n }\n\n /**\n * Sets/Gets the measurement for the layout\n * @param {Object} measurement measurement for the layout\n * @return {Layout|Object} Gets the measurement/ Returns this instance when set\n */\n measurement (measurement) {\n if (measurement) {\n this._measurement = mergeRecursive(this._measurement || {}, measurement);\n\n return this;\n }\n return this._measurement;\n }\n\n /**\n * Sets/Gets the matrices for the layout\n * @param {Object} matrices matrices for the layout\n * @return {Layout|Object} Gets the matrices/ Returns this instance when set\n */\n matrices (matrices) {\n if (matrices) {\n this._matrices = sanitizeIP.typeObj([TOP, CENTER, BOTTOM], matrices);\n\n return this;\n }\n return this._matrices;\n }\n\n /**\n * Sets/Gets the matrix for row\n * @param {Object} matrix matrices for the layout\n * @return {Layout|Object} Gets the matrix/ Returns this instance when set\n */\n rowMatrix (matrix) {\n if (matrix) {\n this._rowMatrix = matrix;\n return this;\n }\n return this._rowMatrix;\n }\n\n /**\n * Sets/Gets the matrix for columns\n * @param {Object} matrix matrices for the layout\n * @return {Layout|Object} Gets the matrix/ Returns this instance when set\n */\n columnMatrix (matrix) {\n if (matrix) {\n this._columnMatrix = matrix;\n return this;\n }\n return this._columnMatrix;\n }\n\n /**\n * Sets/Gets the matrix for value\n * @param {Object} matrix matrices for the layout\n * @return {Layout|Object} Gets the matrix/ Returns this instance when set\n */\n centerMatrix (matrix) {\n if (matrix) {\n this._centerMatrix = matrix;\n return this;\n }\n return this._centerMatrix;\n }\n\n /**\n * Sets/Gets the mountPoint for the layout\n * @param {Object} mountPoint mountPoint for the layout\n * @return {Layout|Object} Gets the mountPoint/ Returns this instance when set\n */\n mountPoint (mountPoint) {\n if (mountPoint) {\n this._mountPoint = mountPoint;\n\n return this;\n }\n return this._mountPoint;\n }\n}\n","import * as FieldNames from '../enums/constants';\n\n/**\n * Default configuration of the layout\n * @return {Object} returns the default configuration\n */\nexport const DEFAULT_CONFIGURATION = {\n [FieldNames.BORDER]: {\n [FieldNames.STYLE]: 'solid',\n [FieldNames.COLOR]: '#d6d6d6',\n [FieldNames.WIDTH]: 2,\n [FieldNames.COLLAPSE]: true,\n [FieldNames.SPACING]: 0\n },\n [FieldNames.GUTTERSPACE]: { rows: [], columns: [] },\n [FieldNames.DISTRIBUTION]: { rows: [], columns: [] },\n [FieldNames.BREAK_PAGE]: { rows: [], columns: [] },\n [FieldNames.ROW_SIZE_IS_EQUAL]: false,\n [FieldNames.COLUMN_SIZE_IS_EQUAL]: false,\n [FieldNames.COLUMN_POINTER]: 0,\n [FieldNames.ROW_POINTER]: 0\n};\n\n/**\n * Default measurements for the layout\n * @return {Object} returns the default measurements\n */\nexport const DEFAULT_MEASUREMENTS = {\n [FieldNames.GRID_WIDTH]: 100,\n [FieldNames.GRID_HEIGHT]: 100,\n [FieldNames.UNIT_WIDTH]: 100,\n [FieldNames.UNIT_HEIGHT]: 100\n};\n\nexport const BLANK_BORDERS = 'rgba(0,0,0,0)';\n","import { ROW_LEFT, ROW_RIGHT, COLUMN_BOTTOM, COLUMN_TOP, TOP, BOTTOM } from '../enums/constants';\n/**\n * This callback is used to filter the array of\n * placeholder cells and filter out cells which have\n * appeared in a previous row.\n *\n * @param {Placeholder} colData Instance of placeholder.\n * @param {number} colIdx The index of the placeholder in array.\n * @param {Array} matrix The 2d array for which filtering is to be done\n * @param {number} rIdx The index of the row of the placeholder in array.\n * @param {string} type The type of matrix it is (rowLeft, rowRight, colTop, colBottom)\n * @return {boolean} flag to keep/remove element.\n */\nconst columnFilter = (colData, colIdx, matrix, rIdx, type) => {\n const previousRow = matrix[rIdx - 1];\n const currentRow = matrix[rIdx];\n\n // Row Span for left\n if (type === ROW_LEFT) {\n if (!previousRow) {\n return colData;\n }\n let i = 0;\n for (;i <= colIdx; i += 1) {\n if (currentRow[i].valueOf() !== previousRow[i].valueOf()) {\n break;\n }\n }\n return (i - 1 === colIdx) ? null : colData;\n } else if (type === ROW_RIGHT) {\n if (!previousRow || colIdx === 0) {\n return colData;\n }\n let j = colIdx;\n for (; j < currentRow.length; j += 1) {\n if (previousRow[j].valueOf() !== currentRow[j].valueOf()) {\n break;\n }\n }\n return (j === currentRow.length) ? null : colData;\n } else if (type === COLUMN_BOTTOM) {\n if (rIdx === 0) {\n return colData;\n }\n const prevCell = currentRow[colIdx - 1];\n if (prevCell) {\n if (prevCell.valueOf() === colData.valueOf()) {\n const nextRow = matrix[rIdx + 1];\n if (!nextRow) {\n return null;\n }\n if (nextRow[colIdx].valueOf() === nextRow[colIdx - 1].valueOf()) {\n return null;\n }\n return colData;\n }\n return colData;\n }\n return colData;\n } else if (type === COLUMN_TOP) {\n if (rIdx === matrix.length - 1 && matrix.length > 1) {\n return colData;\n }\n const prevCell = currentRow[colIdx - 1];\n if (prevCell && (prevCell.valueOf() === colData.valueOf())) {\n const prevRow = matrix[rIdx - 1];\n if (prevRow) {\n if (prevRow[colIdx].valueOf() === prevRow[colIdx - 1].valueOf()) {\n return null;\n }\n return colData;\n }\n return null;\n }\n return colData;\n }\n return colData;\n};\n\n/**\n * This callback is used to calculate the rowspan\n * by checking for repeating entries in subsequent rows\n * at the specified column.\n *\n * @param {Placeholder} colData Instance of placeholder.\n * @param {number} colIdx The index of the placeholder in the array.\n * @param {Array} matrix The 2d array for which filtering is to be done\n * @param {number} rIdx The index of the row of the placeholder in array.\n * @return {number} The row span.\n */\nconst calcRowSpan = (colData, colIdx, matrix, rIdx) => {\n let count = 1;\n // if data is not header cell then rowspan\n // has to be 1\n if (!colData || typeof colData.valueOf() !== 'string') {\n return 1;\n }\n let isNull = false;\n while (!isNull) {\n if (matrix[rIdx + count] && matrix[rIdx + count][colIdx] === null) {\n count += 1;\n } else {\n isNull = true;\n }\n }\n return count;\n};\n/**\n * This callback is used to calculate the rowspan\n * by checking for repeating entries in subsequent rows\n * at the specified column.\n *\n * @param {Placeholder} colData Instance of placeholder.\n * @param {number} colIdx The index of the placeholder in the array.\n * @param {Array} matrix The 2d array for which filtering is to be done\n * @param {number} rIdx The index of the row of the placeholder in array.\n * @return {number} The row span.\n */\nconst calcColSpan = (colData, colIdx, matrix, rIdx) => {\n let count = 1;\n // if data is not header cell then rowspan\n // has to be 1\n if (!colData || typeof colData.valueOf() !== 'string') {\n return 1;\n }\n let isNull = false;\n while (!isNull) {\n if (matrix[rIdx][colIdx + count] === null) {\n count += 1;\n } else {\n isNull = true;\n }\n }\n return count;\n};\n\n// create a masking matrix to strip out repeating columns\n// and calculate rowspan.\nconst mask = function (matrix, type) {\n return matrix.map((row, rIdx) => {\n if (type === ROW_LEFT || type === ROW_RIGHT) {\n const filteredRow = row.map((col, colIndex) => columnFilter(col, colIndex, matrix, rIdx, type));\n const temp = [];\n const diff = row.length - filteredRow.length;\n for (let i = 0; i < diff; i += 1) {\n temp.push(null);\n }\n if (type === ROW_RIGHT) {\n temp.unshift(...filteredRow);\n return temp;\n }\n temp.push(...filteredRow);\n return temp;\n }\n\n const filteredRow = row.map((col, colIndex) => columnFilter(col, colIndex, matrix, rIdx, type));\n const temp = [];\n temp.push(...filteredRow);\n return temp;\n });\n};\n\n/**\n * This function is used to set the col and row spans\n * for the matrices based on repeated/hierarchichal data\n *\n * @export\n * @param {Array} matrix The 2d array for which filtering is to be done\n * @param {string} type Type of array (center, top, bottom)\n * @param {number} index Index of array in the row\n * @return {Object} containing the view matrix and their spans\n */\nexport function cellSpanMaker (matrix, type, index) {\n let span = '';\n if (type === TOP || type === BOTTOM) {\n span = type === TOP ? COLUMN_TOP : COLUMN_BOTTOM;\n const viewMatrix = mask(matrix, span);\n const spans = viewMatrix.map((row, ridx) => row.map((col, i) => calcColSpan(col, i, viewMatrix, ridx))\n .filter(col => col !== 1));\n return { viewMatrix, spans };\n } else if (index === 0 || index === 2) {\n span = index === 0 ? ROW_LEFT : ROW_RIGHT;\n const viewMatrix = mask(matrix, span);\n const spans = [];\n viewMatrix.forEach((row, ridx) => {\n spans[ridx] = spans[ridx] || [];\n row.forEach((col, i) => {\n if (viewMatrix[ridx][i]) {\n const currSpan = calcRowSpan(col, i, viewMatrix, ridx);\n currSpan && spans[ridx].push(currSpan);\n }\n });\n });\n return { viewMatrix, spans };\n }\n return { viewMatrix: matrix };\n}\n","import { makeElement, selectElement } from 'muze-utils';\nimport { cellSpanMaker } from './span-maker';\nimport {\n TOP, LEFT, RIGHT, BOTTOM, CENTER, WIDTH, ROW_SPAN, COL_SPAN\n} from '../enums/constants';\nimport { BLANK_BORDERS } from './defaults';\n\n/**\n * Creates a table element of the layout\n *\n * @param {Object} mount Mount point for table elements\n * @param {string} className defines class name\n * @param {Array} rowData set of rows for the table\n * @return {Selection} set of selections for the table\n */\nfunction renderTable (mount, className, rowData) {\n const table = makeElement(mount, 'table', ['layout'], `${className}-table`);\n const body = makeElement(table, 'tbody', ['layout'], `${className}-body`);\n const rows = makeElement(body, 'tr', rowData, `${className}-tr`);\n const cells = makeElement(rows, 'td', (d, i) => d.filter(e => e !== null && e.config().show).map(e =>\n ({ placeholder: e, rowIndex: i })), `${className}-td`, {}, key => key.placeholder.id);\n\n return { table, body, rows, cells };\n}\n\nfunction applyRowBorders (cells, borderStyle, showBorders, color) {\n [TOP, BOTTOM].forEach((borderType) => {\n const style = `${borderStyle} ${showBorders[borderType] ? color : BLANK_BORDERS}`;\n cells.style(`border-${borderType}`, style);\n });\n}\n\nfunction applyColBorders (cells, borderStyle, showBorders, color) {\n [LEFT, RIGHT].forEach((borderType) => {\n const style = `${borderStyle} ${showBorders[borderType] ? color : BLANK_BORDERS}`;\n cells.style(`border-${borderType}`, style);\n });\n}\n\n/**\n * Applies borders to the cells in a matrix\n *\n * @param {Selection} cells Set of cells made from the matrix\n * @param {Object} border Border info for layout\n * @param {string} type Type of matrix(top/center/bottom)\n * @param {number} index Column index of matrix in the row\n */\nfunction applyBorders (cells, border, type, index) {\n const {\n width,\n style,\n color,\n showRowBorders,\n showColBorders,\n showValueBorders\n } = border;\n const borderStyle = `${width}px ${style}`;\n\n if (type === CENTER && index === 1) {\n [TOP, BOTTOM, LEFT, RIGHT].forEach((borderType) => {\n cells.style(`border-${borderType}`, `${borderStyle} ${showValueBorders[borderType] ?\n color : BLANK_BORDERS}`);\n });\n } else if (type === CENTER) {\n applyRowBorders(cells, borderStyle, showRowBorders, color);\n } else if (index === 1) {\n applyColBorders(cells, borderStyle, showColBorders, color);\n }\n}\n\n/**\n * Renders a set of matrices in a row\n *\n * @param {Array} matrices Set of matrices in a row\n * @param {Selection} mountPoint Mount point for the row\n * @param {string} type top/center/bottom\n * @param {Object} dimensions dimensions of the matrix\n */\nfunction renderMatrix (matrices, mountPoint, type, dimensions, classPrefix) {\n matrices.forEach((matrix, index) => {\n // Creating containers for each matrix individually\n const containerForMatrix = makeElement(mountPoint, 'div', [1], `${classPrefix}-grid-${type}-${index + 1}`)\n .classed(`${classPrefix}-grid-${type}`, true)\n .classed(`${classPrefix}-grid`, true);\n\n const {\n viewMatrix,\n spans\n } = cellSpanMaker(matrix, type, index);\n\n // Rendering the table components\n const { cells } = renderTable(containerForMatrix, `${classPrefix}-grid`, viewMatrix);\n\n if (type === CENTER && spans) {\n cells.attr(ROW_SPAN, function (cell, colIndex) {\n const placeholder = cell.placeholder;\n selectElement(this).style('height', `${placeholder.availHeight() + dimensions.border.width}px`);\n return spans[cell.rowIndex][colIndex];\n });\n } else if ((type === TOP || type === BOTTOM) && index === 1) {\n cells.attr(COL_SPAN, function (cell, colIndex) {\n const span = spans[cell.rowIndex][colIndex];\n const placeholder = cell.placeholder;\n if (span > 1) {\n placeholder.setAvailableSpace(0, placeholder.availHeight());\n }\n selectElement(this).style('height', `${placeholder.availHeight()}px`);\n return span;\n });\n }\n // Rendering content within placeholders\n cells.each(function (cell) {\n cell.placeholder && cell.placeholder.render(this);\n }).exit().each((cell) => {\n cell.placeholder && cell.placeholder.remove();\n });\n\n applyBorders(cells, dimensions.border, type, index);\n });\n}\n\n/**\n * Renders all the matrices of the layout\n *\n * @export\n * @param {Array} matrices Set of matrices in the layout\n * @param {Array} mountPoints Mount points for each row of matrix\n * @param {Array} layoutDimensions Dimensions(height/width) of all the matrices\n */\nexport function renderMatrices (context, matrices, layoutDimensions) {\n const {\n top,\n center,\n bottom\n } = matrices;\n const {\n classPrefix\n } = context.config();\n const {\n width\n } = context.measurement();\n const mount = context.mountPoint();\n\n const data = [\n { type: TOP, matrix: top },\n { type: CENTER, matrix: center },\n { type: BOTTOM, matrix: bottom }\n ];\n makeElement(mount, 'div', data, `${classPrefix}-grid-layout-row`)\n .each(function (d, i) {\n const row = selectElement(this);\n row.classed(`${classPrefix}-grid-layout-row-${i}`, true);\n renderMatrix(d.matrix, row, d.type, layoutDimensions, classPrefix);\n })\n .style(WIDTH, `${Math.ceil(width)}px`);\n}\n","/**\n * This file exports utility functions that are used across the layout module\n */\nimport { Symbols } from 'muze-utils';\nimport { PRIMARY, SECONDARY, HEIGHT, WIDTH } from '../enums/constants';\n\nconst nest = Symbols.nest;\n/**\n *\n *\n * @param {*} isTransposed\n * @returns\n */\nconst getMeasureInfo = (isTransposed) => {\n if (isTransposed) {\n return {\n firstMeasure: HEIGHT,\n secondMeasure: WIDTH\n };\n }\n return {\n firstMeasure: WIDTH,\n secondMeasure: HEIGHT\n };\n};\n\n/**\n *\n *\n * @param {*} i\n * @param {*} page\n * @returns\n */\nconst findInPage = (i, page) => {\n let count = 0;\n for (const x in page) {\n if (i < page[x]) {\n count = x;\n break;\n }\n }\n return count;\n};\n\n/**\n * Creates a single matrix from two matrices\n *\n * @param {Array} matrix Input matrix\n * @return {Array} Joined matrix\n * @memberof VisualMatrix\n */\nexport const combineMatrices = (matrix, config) => {\n const { isTransposed } = config;\n let joinedMatrix = matrix[0].length > 0 ? matrix[0] : matrix[1];\n if (isTransposed) {\n joinedMatrix = matrix[0].length > 0 ? [...matrix[0]] : [];\n joinedMatrix = matrix[1].length > 0 ? [...joinedMatrix, ...matrix[1]] : joinedMatrix;\n } else {\n joinedMatrix = joinedMatrix.map((row, rowIndex) => {\n let rowData = [];\n if (matrix[0].length > 0) {\n rowData = [...matrix[0][rowIndex]];\n }\n if (matrix[1].length > 0) {\n rowData = [...rowData, ...matrix[1][rowIndex]];\n }\n return rowData;\n });\n }\n return joinedMatrix;\n};\n\n/**\n * Creates a hirachical tree from the context\n *\n * @param {Object} context context for creating tree\n * @return {Object} nested tree\n */\nexport const createTree = (context) => {\n let matrixTree = {};\n let lastLevelKey = 0;\n let facet = PRIMARY;\n const nestFn = nest();\n const keys = [];\n const layoutMatrix = context._layoutMatrix;\n const primaryMatrix = context.primaryMatrix();\n const secondaryMatrix = context.secondaryMatrix();\n const { isTransposed, breakPage } = context.config();\n\n if (!isTransposed) {\n if (primaryMatrix.length === 0) {\n facet = PRIMARY;\n } else if (secondaryMatrix.length === 0) {\n facet = SECONDARY;\n } else {\n facet = primaryMatrix.length >= secondaryMatrix.length ? PRIMARY : SECONDARY;\n }\n if (primaryMatrix.length > 0) {\n for (let i = 0; i < primaryMatrix[0].length - 1; i++) {\n keys.push(i);\n }\n keys.push(primaryMatrix[0].length - 1);\n if (facet === SECONDARY || secondaryMatrix.length === 0) {\n lastLevelKey = primaryMatrix[0].length - 1;\n }\n }\n if (secondaryMatrix.length > 0) {\n const keyLength = primaryMatrix.length > 0 ? primaryMatrix[0].length : 0;\n for (let i = secondaryMatrix[0].length - 1; i > 0; i--) {\n keys.push(i + keyLength);\n }\n keys.push(keyLength);\n\n if (facet === PRIMARY) {\n lastLevelKey = keyLength;\n }\n } else {\n lastLevelKey = primaryMatrix.length > 0 ? primaryMatrix[0].length - 1 : 0;\n }\n keys.forEach((key) => {\n let counter = -1;\n return nestFn.key((d) => {\n counter++;\n return `${d[key].valueOf()}-${findInPage(counter, breakPage)}`;\n });\n });\n matrixTree = nestFn.entries(layoutMatrix);\n } else {\n if (primaryMatrix.length === 0) {\n facet = PRIMARY;\n } else if (secondaryMatrix.length === 0) {\n facet = SECONDARY;\n } else {\n facet = primaryMatrix.length >= secondaryMatrix.length ? PRIMARY : SECONDARY;\n }\n if (primaryMatrix.length > 0) {\n for (let i = 0; i < primaryMatrix.length - 1; i++) {\n keys.push(i);\n }\n // if (facet === PRIMARY) {\n keys.push(primaryMatrix.length - 1);\n // } else {\n if (facet === SECONDARY) {\n lastLevelKey = primaryMatrix.length - 1;\n }\n }\n if (secondaryMatrix.length > 0) {\n const primaryMatrixLength = primaryMatrix.length;\n for (let i = secondaryMatrix.length - 1; i > 0; i--) {\n keys.push(i + primaryMatrixLength);\n }\n // if (facet === SECONDARY) {\n keys.push(primaryMatrixLength);\n // }\n if (facet === PRIMARY) {\n lastLevelKey = primaryMatrixLength;\n }\n }\n keys.forEach((key) => {\n let counter = -1;\n return nestFn.key((d) => {\n counter++;\n return `${d[key].valueOf()}-${findInPage(counter, breakPage)}`;\n });\n });\n let newMatrix = [];\n newMatrix = layoutMatrix[0].map((col, colIndex) => layoutMatrix.map(row => row[colIndex]));\n matrixTree = nestFn.entries(newMatrix);\n }\n return { tree: matrixTree, lastLevelKey };\n};\n\n/**\n * Gives the min measues\n *\n * @param {boolean} isTransposed is column matrix\n * @param {Object} unitMeasures min measures to be given to cells\n * @return {Object} dimension min cell\n */\nexport const getMinMeasures = (isTransposed, unitMeasures) => {\n if (!isTransposed) {\n return {\n height: unitMeasures.height,\n width: 0\n };\n }\n return {\n height: 0,\n width: unitMeasures.width\n };\n};\n\n/**\n * Get the logical space from the tree\n *\n * @param {Node} item tree to be calculated\n * @param {number} measures width and height\n * @param {Array} minMeasures min measures for a cell\n * @param {Array} maxMeasure max measures for a col/row\n * @return {Object} dimension\n */\nexport const getLogicalSpace = (item, measures, minMeasures, maxMeasure = []) => {\n const { firstMeasure, secondMeasure } = measures;\n let firstMeasureValue = 0;\n let secondMeasureValue = 0;\n item.values.forEach((valueArray) => {\n let fMeasure = 0;\n let sMeasure = 0;\n valueArray.forEach((placeholder, colIndex) => {\n placeholder.logicalSpace(null);\n const space = placeholder.getLogicalSpace();\n sMeasure = Math.max(sMeasure, +space[secondMeasure], minMeasures[secondMeasure]);\n maxMeasure[colIndex] = Math.max(maxMeasure[colIndex] || 0, space[firstMeasure]);\n fMeasure += +maxMeasure[colIndex];\n });\n secondMeasureValue += sMeasure;\n firstMeasureValue = Math.max(firstMeasureValue, fMeasure);\n item.space = {\n [secondMeasure]: Math.ceil(secondMeasureValue),\n [firstMeasure]: Math.ceil(firstMeasureValue)\n };\n });\n return {\n [secondMeasure]: secondMeasureValue,\n [firstMeasure]: firstMeasureValue\n };\n};\n\n/**\n * Computes the logical spcae taken by the matrix tree\n *\n * @param {*} [item={}] tree to be viewed\n * @param {boolean} [isTransposed=false] is column matrix\n * @param {*} unitMeasures min measues for a cell\n * @param {Array} maxMeasure max measures for a col/row\n * @return {Object} logical space taken\n */\nexport const computeLogicalSpace = (item = {}, config, maxMeasures) => {\n const { isTransposed = false, unitMeasures } = config;\n const { firstMeasure, secondMeasure } = getMeasureInfo(isTransposed);\n const { values } = item;\n const minMeasures = getMinMeasures(isTransposed, unitMeasures);\n if (values[0].key) {\n const logicalSpace = { [firstMeasure]: 0, [secondMeasure]: 0 };\n\n values.forEach((valueItem) => {\n // Compute logical space for lowest level\n const space = computeLogicalSpace(valueItem, config, maxMeasures);\n // Set logical space for first measure\n logicalSpace[firstMeasure] = Math.max(logicalSpace[firstMeasure], space[firstMeasure],\n minMeasures[firstMeasure]);\n // Set logical space for second measure\n logicalSpace[secondMeasure] += +space[secondMeasure];\n });\n item.space = logicalSpace;\n return logicalSpace;\n }\n return getLogicalSpace(item, { firstMeasure, secondMeasure }, minMeasures, maxMeasures);\n};\n\n/**\n * Gives the space taken by a row\n *\n * @param {Array} row matrix array of rows\n * @return {Object} dimension of the row\n */\nexport const spaceTakenByRow = (row) => {\n let height = 0;\n let width = 0;\n row.forEach((col) => {\n const spaces = col.getLogicalSpace();\n height = Math.max(height, spaces.height);\n width += spaces.width;\n });\n return {\n width,\n height\n };\n};\n\n/**\n * Gives the space taken by a column\n *\n * @param {Array} matrix column matrix\n * @param {number} colIndex column index\n * @return {Object} dimension of the column\n */\nexport const spaceTakenByColumn = (matrix, colIndex) => {\n let height = 0;\n let width = 0;\n matrix.forEach((row) => {\n const col = row[colIndex];\n const spaces = col.getLogicalSpace();\n width = Math.max(width, spaces.width);\n height += spaces.height;\n });\n return {\n width,\n height\n };\n};\n\n/**\n * Creates different level matrices\n *\n * @param {Object} item matrix tree\n * @param {boolean} isTransposed is column matrix\n * @return {Object} matrix of each level\n */\nexport const createMatrixEachLevel = (item, isTransposed) => {\n if (item.values[0].key) {\n const arr = [];\n item.values.forEach((child) => {\n if (!isTransposed) {\n arr.push(...createMatrixEachLevel(child, isTransposed));\n } else {\n const eachLevel = createMatrixEachLevel(child, isTransposed);\n eachLevel.forEach((e, i) => {\n arr[i] = arr[i] || [];\n arr[i].push(...e);\n });\n }\n });\n item.matrix = arr;\n return arr;\n }\n if (!isTransposed) {\n item.matrix = item.values;\n } else {\n item.matrix = item.values[0].map((col, colIndex) => item.values.map(row => row[colIndex]));\n }\n return item.matrix;\n};\n\n/**\n * Breaks the matrix into two part\n *\n * @param {Array} matrix input matrix\n * @param {boolean} isTransposed is column matrix\n * @param {number} breakPointer point in matrix where it is to be broken\n * @return {Array} two broken matrix\n */\nexport const breakMatrix = (matrix, isTransposed, breakPointer) => {\n const primaryMatrix = [];\n const secondaryMatrix = [];\n if (isTransposed) {\n matrix.forEach((row, rowIndex) => {\n if (rowIndex >= breakPointer) {\n secondaryMatrix.push(row);\n } else {\n primaryMatrix.push(row);\n }\n });\n } else {\n matrix.forEach((row, rowIndex) => {\n row.forEach((column, columnIndex) => {\n if (columnIndex >= breakPointer) {\n secondaryMatrix[rowIndex] = secondaryMatrix[rowIndex] || [];\n secondaryMatrix[rowIndex].push(column);\n } else {\n primaryMatrix[rowIndex] = primaryMatrix[rowIndex] || [];\n primaryMatrix[rowIndex].push(column);\n }\n });\n });\n }\n return [primaryMatrix, secondaryMatrix];\n};\n\n/**\n * Distributed width returned\n *\n * @param {Object} context context for the width distibution\n * @return {number} distributed widths\n */\nexport const getDistributedWidth = (context, layoutConfig) => {\n const {\n availableWidth,\n width,\n row\n } = context;\n const {\n isDistributionEqual,\n isTransposed,\n distribution\n } = layoutConfig;\n let distSum = 0;\n if (distribution && distribution[0]) {\n distSum = distribution.reduce((t, n) => {\n t += n;\n return t;\n });\n }\n return row.map((col, colIndex) => {\n const space = col.getLogicalSpace().width;\n let distWidth = (space + (availableWidth - width) * (space / width));\n if (isTransposed) {\n if (distribution.length > 0) {\n distWidth = (availableWidth * distribution[colIndex] / distSum);\n } else if (isDistributionEqual || width === 0) {\n const rowLen = row.length;\n distWidth = (availableWidth / rowLen);\n }\n }\n return Math.floor(distWidth);\n });\n};\n\n/**\n * Distributeed heights returned\n *\n * @param {Object} context input for the height distribution\n * @return {Object} distribured heights\n */\nexport const getDistributedHeight = (context) => {\n let distSum = 0;\n let gutterSum = 0;\n let heightWithoutGutter = 0;\n const {\n isTransposed,\n distribution,\n availableHeight,\n height,\n isDistributionEqual,\n gutter,\n matrix,\n cIdx\n } = context;\n\n if (distribution && distribution[0] !== undefined) {\n distSum = distribution.reduce((t, n) => {\n t += n;\n return t;\n });\n }\n if (gutter && gutter[0] !== undefined) {\n gutterSum = gutter.reduce((t, n) => {\n t += n;\n return t;\n });\n }\n heightWithoutGutter = availableHeight - Math.floor(availableHeight * gutterSum);\n\n const colLen = matrix.length;\n return matrix.map((row, rIdx) => {\n const col = row[cIdx];\n const space = col.getLogicalSpace().height;\n let distHeight = (space + (heightWithoutGutter - height) * (space / height));\n\n if (!isTransposed) {\n if (distribution.length > 0 && colLen === distribution.length) {\n distHeight = (heightWithoutGutter * distribution[rIdx] / distSum);\n } else if (isDistributionEqual || context.height === 0) {\n distHeight = (heightWithoutGutter / colLen);\n }\n }\n return Math.floor(distHeight);\n });\n};\n\n/**\n *\n *\n * @param {*} arr\n * @param {*} beg\n * @param {*} end\n */\nexport const extraCellsRemover = (arr, beg, end) => arr.slice(beg, -end);\n\n/**\n * Creates matrix instancess\n *\n * @param {Array} [arr=[]] mutated arry\n * @param {number} depth depth of the tree\n * @param {Array} matrixInfo Details about the matrix(tree, etc) to be inserted\n * @param {boolean} layout Instance of layout\n */\nexport const createMatrixInstances = (arr = [], depth, matrixInfo, layout) => {\n const breakPointer = layout._breakPointer;\n const config = layout.config();\n const {\n isTransposed\n } = config;\n const {\n tree,\n layoutMatrix\n } = matrixInfo;\n\n if (depth === 0) {\n const brokenMatrix = breakMatrix(tree.matrix, isTransposed, breakPointer);\n arr.push({\n matrix: tree.matrix,\n primaryMatrix: brokenMatrix[0],\n secondaryMatrix: brokenMatrix[1],\n space: tree.space\n });\n return arr;\n }\n const nextLevel = depth - 1;\n tree.values.forEach((e) => {\n createMatrixInstances(arr, nextLevel, {\n tree: e,\n layoutMatrix\n }, layout);\n });\n return arr;\n};\n","import { mergeRecursive } from 'muze-utils';\n\nexport const PROPS = {\n config: {\n sanitization: (context, value) => mergeRecursive(context._config || {}, value)\n },\n maxMeasures: {},\n availableSpace: {},\n logicalSpace: {}\n};\n","import { PRIMARY } from '../enums/constants';\n/**\n *\n *\n */\nexport const defaultConfig = {\n distribution: [],\n classPrefix: 'muze',\n isDistributionEqual: true,\n unitMeasures: {\n height: 100,\n width: 100,\n border: 1\n },\n isTransposed: false,\n facet: PRIMARY,\n extraCellLengths: []\n};\n","import { mergeRecursive, generateGetterSetters } from 'muze-utils';\nimport {\n createTree,\n extraCellsRemover,\n combineMatrices,\n spaceTakenByColumn,\n getDistributedHeight,\n getDistributedWidth,\n spaceTakenByRow,\n computeLogicalSpace,\n createMatrixEachLevel,\n createMatrixInstances\n } from '../utils';\nimport { PROPS } from './props';\nimport { COLUMN_ROOT, ROW_ROOT, HEIGHT, WIDTH } from '../enums/constants';\nimport { defaultConfig } from './default-config';\n\n/**\n * This class used to create column / row matrix for GridLayout\n *\n * @class VisualMatrix\n */\nexport default class VisualMatrix {\n\n /**\n *Creates an instance of VisualMatrix.\n * @param {any} matrix Two set of matrices\n * @param {any} [config={}] Configuration for VisualMatrix\n * @memberof VisualMatrix\n */\n constructor (matrix, config = {}) {\n // Prepare matrices\n this._lastLevelKey = 0;\n this._primaryMatrix = matrix[0] || [];\n this._secondaryMatrix = matrix[1] || [];\n this._maxMeasures = [];\n this._availableSpace = {};\n\n // Store the config\n generateGetterSetters(this, PROPS);\n const defCon = Object.assign({}, this.constructor.defaultConfig());\n this.config(mergeRecursive(defCon, config));\n\n this._breakPointer = this.config().isTransposed ? matrix[0].length :\n (matrix[0].length > 0 ? matrix[0][0].length : 0);\n this._layoutMatrix = combineMatrices([matrix[0] || [], matrix[1] || []], this.config());\n\n // Create Tree\n this._tree = {\n key: this.config().isTransposed ? COLUMN_ROOT : ROW_ROOT,\n values: this.createTree()\n };\n this._logicalSpace = this.setLogicalSpace();\n }\n\n /**\n *\n *\n * @param {*} params\n * @returns\n * @memberof VisualMatrix\n */\n primaryMatrix (...params) {\n if (params.length) {\n return this;\n }\n return this._primaryMatrix;\n }\n\n /**\n *\n *\n * @param {*} params\n * @returns\n * @memberof VisualMatrix\n */\n secondaryMatrix (...params) {\n if (params.length) {\n return this;\n }\n return this._secondaryMatrix;\n }\n\n /**\n *\n *\n * @param {*} params\n * @returns\n * @memberof VisualMatrix\n */\n tree (...params) {\n if (params.length) {\n return this;\n }\n return this._tree;\n }\n\n /**\n *\n *\n * @static\n * @return\n * @memberof VisualMatrix\n */\n static defaultConfig () {\n return defaultConfig;\n }\n\n /**\n *\n *\n * @return\n * @memberof VisualMatrix\n */\n createTree () {\n const { tree, lastLevelKey } = createTree(this);\n this._lastLevelKey = lastLevelKey;\n return tree;\n }\n\n /**\n * Computes the logical space taken by the entire matrixTree\n *\n * @return {Object} Logical space taken\n * @memberof VisualMatrix\n */\n setLogicalSpace () {\n const {\n isTransposed\n } = this.config();\n const matrixTree = this.tree();\n createMatrixEachLevel(matrixTree, isTransposed);\n return computeLogicalSpace(matrixTree, this.config(), this.maxMeasures());\n }\n\n /**\n * Returns the space taken by visual matrix\n *\n * @return {Object} space taken by the matrix\n * @memberof VisualMatrix\n */\n getLogicalSpace () {\n return this.logicalSpace();\n }\n\n /**\n * Sets the provied space to the visual matrix\n *\n * @param {number} width width provided\n * @param {number} height height provided\n * @memberof VisualMatrix\n */\n setAvailableSpace (width, height) {\n this.availableSpace({ width, height });\n const tree = this.tree();\n const heightMeasures = this.populateMaxMeasures(HEIGHT, tree);\n const widthMeasures = this.populateMaxMeasures(WIDTH, tree);\n const depth = this.calculateDepth(widthMeasures, heightMeasures);\n\n this.viewableMatrix = this.createViewPortMatrix(depth);\n this.viewableMeasures = this.redistribute(this.viewableMatrix, width, height);\n return this;\n }\n\n /**\n * Populate the max measures in the array\n *\n * @param {Array} measures array to be filled with max measures\n * @param {Object} matrixTree matrix tree of visual matrix\n * @param {number} measure width or height\n * @param {number} [depth=0] depth of the tree that to be calculated\n * @memberof VisualMatrix\n */\n populateMaxMeasures (type, matrixTree, depth = 0, measures = []) {\n measures[depth] = Math.max(measures[depth] || 0, matrixTree.space[type]);\n if (matrixTree.values) {\n const childDepth = depth + 1;\n matrixTree.values.forEach((child) => {\n if (child.space) {\n measures = this.populateMaxMeasures(type, child, childDepth, measures);\n }\n });\n }\n return measures;\n }\n\n /**\n * Calculates the depth of the tree that can be viewed\n *\n * @param {Array} widthMeasures array of widths\n * @param {Array} heightMeasures array of heights\n * @return {number} depth of the tree\n * @memberof VisualMatrix\n */\n calculateDepth (widthMeasures, heightMeasures) {\n let i;\n let j;\n const { height, width } = this.availableSpace();\n\n for (i = 0; i < heightMeasures.length; i++) {\n if (heightMeasures[i] <= height) break;\n }\n for (j = 0; j < widthMeasures.length; j++) {\n if (widthMeasures[j] <= width) break;\n }\n return Math.min(widthMeasures.length - 1, Math.max(i, j));\n }\n\n /**\n * Redistributes the provied space to all cells\n *\n * @param {*} viewableMatrix current viewport matrix\n * @param {*} width provied width\n * @param {*} height provied height\n * @return {Object} current viewports matrixes with measures\n * @memberof VisualMatrix\n */\n redistribute (viewableMatrix, width, height) {\n let maxHeights = [];\n let maxWidths = [];\n const {\n isTransposed\n } = this.config();\n\n viewableMatrix.forEach((matrixInst) => {\n const matrix = matrixInst.matrix;\n const mWidth = 0;\n const mHeight = 0;\n const options = { mWidth, mHeight, matrix, width, height, maxHeights, maxWidths };\n const maxMeasures = isTransposed ? this.redistributeColumnWise(options) : this.redistributeRowWise(options);\n maxWidths = maxMeasures.maxWidths;\n maxHeights = maxMeasures.maxHeights;\n });\n\n const measurements = viewableMatrix.map((matrixInst, i) => {\n let heightMeasures;\n let columnMeasures;\n const cellDimOptions = { matrixInst, maxWidths, maxHeights, matrixIndex: i };\n const { heights, widths, rowHeights, columnWidths } = this.getCellDimensions(cellDimOptions);\n\n if (!isTransposed) {\n heightMeasures = [height, height];\n columnMeasures = widths;\n } else {\n heightMeasures = heights;\n columnMeasures = [width, width];\n }\n return {\n rowHeights: {\n primary: rowHeights[0],\n secondary: rowHeights[1]\n },\n columnWidths: {\n primary: columnWidths[0],\n secondary: columnWidths[1]\n },\n height: {\n primary: heightMeasures[0],\n secondary: heightMeasures[1]\n },\n width: {\n primary: columnMeasures[0],\n secondary: columnMeasures[1]\n }\n };\n });\n\n return measurements;\n }\n\n /**\n * Gets the viewable measures for the current viewable matrix\n *\n * @return {Object} Set of viewable measures\n * @memberof VisualMatrix\n */\n getViewableSpaces () {\n return this.viewableMeasures;\n }\n\n /**\n * Returns the matrix that can be viewed in the current viewport\n *\n * @return {Array} Set of matrices that can be viewed\n * @memberof VisualMatrix\n */\n getViewableData () {\n return this.viewableMatrix;\n }\n\n /**\n *\n *\n * @return\n * @memberof VisualMatrix\n */\n removeExtraCells () {\n const {\n isTransposed,\n extraCellLengths\n } = this.config();\n const matrix = this._layoutMatrix;\n const tree = mergeRecursive({}, this.tree());\n const begCellLen = extraCellLengths[0];\n const endCellLen = extraCellLengths[1] || Number.NEGATIVE_INFINITY;\n const layoutMatrix = !isTransposed ? extraCellsRemover(matrix, begCellLen, endCellLen) :\n matrix.slice(0).map(e => extraCellsRemover(e, begCellLen, endCellLen));\n\n tree.values = extraCellsRemover(tree.values, begCellLen, endCellLen);\n if (!isTransposed) {\n tree.matrix = extraCellsRemover(tree.matrix, begCellLen, endCellLen);\n } else {\n tree.matrix = tree.matrix.map(e => extraCellsRemover(e, begCellLen, endCellLen));\n }\n return {\n tree,\n layoutMatrix\n };\n }\n\n /**\n * Creates the viewport that can be viewed together\n *\n * @param {number} depth maxDepth that can be viewed in the viewport\n * @return {Array} Set of matrices that can be viewed\n * @memberof VisualMatrix\n */\n createViewPortMatrix (depth) {\n const arr = [];\n createMatrixInstances(arr, depth, this.removeExtraCells(), this);\n return arr;\n }\n\n /**\n * Distibutes the given space row wisely\n *\n * @param {Object} options Redistribution information\n * @memberof VisualMatrix\n */\n redistributeRowWise (options) {\n let cWidths = [];\n let rHeights = [];\n let mHeight = 0;\n const maxMeasures = this.maxMeasures();\n const {\n isDistributionEqual,\n distribution,\n isTransposed,\n gutter\n } = this.config();\n const { matrix, width, height, maxHeights, maxWidths } = options;\n\n mHeight = spaceTakenByColumn(matrix, this._lastLevelKey).height;\n\n const maxWidth = maxMeasures.reduce((t, n) => {\n t += n;\n return t;\n });\n if (maxWidth > 0) {\n cWidths = maxMeasures.map(space => space + (width - maxWidth) * (space / maxWidth));\n } else {\n cWidths = maxMeasures.map(() => 0);\n }\n rHeights = getDistributedHeight({\n matrix,\n cIdx: this._lastLevelKey,\n height: mHeight,\n availableHeight: height,\n isDistributionEqual,\n distribution,\n isTransposed,\n gutter\n });\n maxWidths.push(cWidths);\n maxHeights.push(rHeights);\n return { maxWidths, maxHeights };\n }\n\n /**\n * Distibutes the given space column wisely\n *\n * @param {Object} options Redistribution information\n * @memberof VisualMatrix\n */\n redistributeColumnWise (options) {\n let rHeights = [];\n const { matrix, width, maxHeights, maxWidths } = options;\n const borderWidth = this.config().unitMeasures.border;\n const mWidth = spaceTakenByRow(matrix[this._lastLevelKey]).width;\n const cWidths = getDistributedWidth({\n row: matrix[this._lastLevelKey],\n width: mWidth,\n availableWidth: width\n }, this.config());\n\n matrix.forEach((row, rIdx) => row.forEach((col, cIdx) => {\n const oldLogicalSpace = col.getLogicalSpace().height;\n col.setAvailableSpace(cWidths[cIdx] - borderWidth, oldLogicalSpace);\n rHeights[rIdx] = Math.max(rHeights[rIdx] || 0, col.getLogicalSpace().height);\n }));\n\n if (maxHeights.length > 0) {\n rHeights = rHeights.map((e, i) => Math.max(e, maxHeights[0][i]));\n }\n\n maxHeights.push(rHeights);\n\n for (let x = 0; x < maxHeights.length; x++) {\n maxHeights[x] = rHeights;\n }\n maxWidths.push(cWidths);\n return { maxHeights, maxWidths };\n }\n\n /**\n * Dispatch the calculated cell dimensions to all the cells\n *\n * @param {Object} options cell dimension information\n * @return {Object} row and column heights / widths\n * @memberof VisualMatrix\n */\n getCellDimensions (options) {\n let indices = [];\n let unitMeasures = [];\n let mainMeasures = [];\n let computedMeasures = [];\n const {\n isTransposed,\n unitMeasures: measures\n } = this.config();\n const borderWidth = measures.border;\n const { matrixInst, maxWidths, maxHeights, matrixIndex } = options;\n const matrix = matrixInst.matrix;\n const rowHeights = [[0], [0]];\n const columnWidths = [[0], [0]];\n const heights = [0, 0];\n const widths = [0, 0];\n const breakPointer = this._breakPointer;\n\n matrix.forEach((row, rIdx) => {\n row.forEach((cell, cIdx) => {\n const colHeight = maxHeights[matrixIndex][rIdx] || 0;\n const colWidth = maxWidths[matrixIndex][cIdx];\n\n if (!isTransposed) {\n cell.setAvailableSpace(colWidth, colHeight - borderWidth);\n indices = [rIdx, cIdx];\n unitMeasures = [columnWidths, rowHeights];\n mainMeasures = [widths, heights];\n computedMeasures = [colWidth, colHeight];\n } else {\n cell.setAvailableSpace(colWidth - borderWidth, colHeight);\n indices = [cIdx, rIdx];\n unitMeasures = [rowHeights, columnWidths];\n mainMeasures = [heights, widths];\n computedMeasures = [colHeight, colWidth];\n }\n\n if (indices[0] === 0 && indices[1] < breakPointer) {\n unitMeasures[0][0][indices[1]] = computedMeasures[0];\n mainMeasures[0][0] = (mainMeasures[0][0] || 0) + computedMeasures[0];\n } else if (indices[0] === 0 && indices[1] >= breakPointer) {\n unitMeasures[0][1][indices[1] - breakPointer] = computedMeasures[0];\n mainMeasures[0][1] = (mainMeasures[0][1] || 0) + computedMeasures[0];\n }\n if (indices[1] === this._lastLevelKey) {\n unitMeasures[1][0][indices[0]] = computedMeasures[1];\n unitMeasures[1][1][indices[0]] = computedMeasures[1];\n }\n });\n });\n return {\n heights,\n widths,\n rowHeights,\n columnWidths\n };\n }\n}\n\n","import { HEIGHT, WIDTH, COLUMN, ROW } from '../enums/constants';\n\n/**\n * Gets measurement for an instance of visual matrix\n *\n * @param {Array} matrix instance of visual matrix\n * @param {string} type height/width\n * @return {Object} Logical height/width of the matrix\n */\nexport function getMatrixMeasurement (matrix, type) {\n if (matrix) {\n return matrix.getLogicalSpace()[type];\n }\n return 0;\n}\n\n/**\n * Sets available space for an instance of visual matrix\n *\n * @param {Array} matrix instance of visual matrix\n * @param {string} type height/width\n * @param {number} value Value of measurement\n */\nexport function setMatrixMeasurement (matrix, type, value) {\n if (matrix) {\n const spaces = matrix.getLogicalSpace();\n if (value && spaces[type] !== value) {\n type === HEIGHT ? matrix.setAvailableSpace(spaces.width, value) :\n matrix.setAvailableSpace(value, spaces.height);\n }\n }\n}\n\n/**\n *\n *\n * @param {*} matrix\n * @param {*} widths\n * @param {*} heights\n */\nconst setAvailableSpace = (matrix, widths, heights) => {\n matrix.forEach((row, rIdx) => {\n row.forEach((placeholder, cIdx) => {\n placeholder.setAvailableSpace(widths[cIdx], heights[rIdx]);\n });\n });\n};\n\n/**\n *\n *\n * @param {*} layout\n * @param {*} matrix\n * @param {*} pointer\n * @returns\n */\nconst setViewSpaces = (layout, pointerType, viewSpaces) => {\n let pointer = layout.config()[`${pointerType}Pointer`];\n if (viewSpaces.length - 1 < pointer) {\n pointer = 0;\n layout.config({ [`${pointerType}Pointer`]: pointer });\n }\n return pointer;\n};\n\n/**\n * Computes the measurements of space for all matrices in the\n * layout\n *\n * @param {Object} layout Instance of grid layout\n * @return {Object} set of measurements for the layout\n */\nexport const computeLayoutMeasurements = (layout) => {\n const rowMatrix = layout.rowMatrix();\n const columnMatrix = layout.columnMatrix();\n const centerMatrix = layout.centerMatrix();\n const {\n width,\n height\n } = layout.measurement();\n const {\n border\n } = layout.config();\n const matrices = layout.matrices();\n const {\n top,\n bottom\n } = matrices;\n\n // Get width of row matrix\n const rowMatrixWidth = getMatrixMeasurement(rowMatrix, WIDTH);\n\n // Set width for column matrix\n\n // Border adjustment for each cell in the central matrix\n const borderWidth = border.width;\n\n const columnMatrixWidth = width - rowMatrixWidth - borderWidth;\n setMatrixMeasurement(columnMatrix, WIDTH, columnMatrixWidth);\n const columnViewPages = columnMatrix.getViewableSpaces();\n setViewSpaces(layout, COLUMN, columnViewPages);\n\n // Figuring out total space needed by current view space\n const columnViewSpace = columnViewPages[layout.config().columnPointer];\n\n // Getting height of column matrix\n const columnMatrixHeight = columnViewSpace.height.primary + columnViewSpace.height.secondary;\n\n // Set height for row matrix\n const rowMatrixHeight = height - columnMatrixHeight;\n\n setMatrixMeasurement(rowMatrix, HEIGHT, rowMatrixHeight);\n\n // Get heights of each cell of row matrix\n const rowViewableSpaces = rowMatrix.getViewableSpaces();\n setViewSpaces(layout, ROW, rowViewableSpaces);\n const rowHeights = [].concat(...rowViewableSpaces.map(e => e.rowHeights.primary));\n const rowWidthsPrimary = [].concat(...rowViewableSpaces.map(e => e.columnWidths.primary));\n const rowWidthsSecondary = [].concat(...rowViewableSpaces.map(e => e.columnWidths.secondary));\n const columnViewableSpaces = columnMatrix.getViewableSpaces();\n // Get widths of each cell of column matrix\n const columnWidths = [].concat(...columnViewableSpaces.map(e => e.columnWidths.primary));\n const columnHeightsPrimary = columnViewableSpaces[0].rowHeights.primary;\n\n const columnHeightsSecondary = [].concat(...columnViewableSpaces.map(e => e.rowHeights.secondary));\n\n // Setting the available space for each cell in the centre matrix\n centerMatrix.forEach((matrix, rIdx) => {\n matrix.forEach((placeholder, cIdx) => {\n placeholder.setAvailableSpace(columnWidths[cIdx] - borderWidth, rowHeights[rIdx] - borderWidth);\n });\n });\n setAvailableSpace(top[0], rowWidthsPrimary, columnHeightsPrimary);\n setAvailableSpace(top[2], rowWidthsSecondary, columnHeightsPrimary);\n setAvailableSpace(bottom[0], rowWidthsPrimary, columnHeightsSecondary);\n setAvailableSpace(bottom[2], rowWidthsSecondary, columnHeightsSecondary);\n\n return {\n rowMatrixHeight,\n rowMatrixWidth,\n columnMatrixHeight,\n columnMatrixWidth\n };\n};\n\n/**\n * Gets view matrices based on current pointers for row and column\n *\n * @param {Object} layout instance of layout\n * @param {number} rowPointer current row pointer\n * @param {number} columnPointer current column pointer\n * @return {Object} returns the view matrix and its relevant information\n */\nexport const getViewMatrices = (layout, rowPointer, columnPointer) => {\n const rowMatrix = layout.rowMatrix();\n const columnMatrix = layout.columnMatrix();\n const centerMatrix = layout.centerMatrix();\n const matrices = layout.matrices();\n const rowMatrices = rowMatrix.getViewableData();\n const columnMatrices = columnMatrix.getViewableData();\n const centralMatrixPointer = {\n row: 0,\n column: 0\n };\n\n for (let i = rowPointer - 1; i >= 0; i--) {\n const length = Math.max(rowMatrices[i].primaryMatrix.length,\n rowMatrices[i].secondaryMatrix.length);\n centralMatrixPointer.row += length;\n }\n /* istanbul ignore next */\n for (let i = columnPointer - 1; i >= 0; i--) {\n const matrix = columnMatrices[i];\n const { primaryMatrix, secondaryMatrix } = matrix;\n const length = Math.max(primaryMatrix[0] ? primaryMatrix[0].length : 0,\n secondaryMatrix[0] ? secondaryMatrix[0].length : 0);\n centralMatrixPointer.column += length;\n }\n\n matrices.top[1] = columnMatrices[columnPointer].primaryMatrix;\n matrices.bottom[1] = columnMatrices[columnPointer].secondaryMatrix;\n\n matrices.center[0] = rowMatrices[rowPointer].primaryMatrix;\n matrices.center[2] = rowMatrices[rowPointer].secondaryMatrix;\n\n const rowMatrixLen = Math.max(matrices.center[0].length, matrices.center[2].length);\n /* istanbul ignore next */\n const columnMatrixLen = Math.max(matrices.top[1][0] ? matrices.top[1][0].length : 0, matrices.bottom[1][0] ?\n matrices.bottom[1][0].length : 0);\n matrices.center[1] = centerMatrix.slice(centralMatrixPointer.row, centralMatrixPointer.row + rowMatrixLen)\n .map(matrix => matrix.slice(centralMatrixPointer.column, centralMatrixPointer.column + columnMatrixLen));\n\n return {\n matrices,\n rowPages: rowMatrices.length,\n columnPages: columnMatrices.length\n };\n};\n/**\n * Returns measurements of the cells of the current matrix\n *\n * @param {Object} layout instance of layout\n * @return {Object} returns the measurements for current view matrix\n */\nexport const getViewMeasurements = (layout) => {\n const rowMatrix = layout.rowMatrix();\n const columnMatrix = layout.columnMatrix();\n const {\n width,\n height\n } = layout.measurement();\n const {\n columnPointer,\n rowPointer\n } = layout.config();\n\n const rowMatrixWidth = rowMatrix.getViewableSpaces()[rowPointer].width;\n const { primary: leftWidth, secondary: rightWidth } = rowMatrixWidth;\n\n const columnMatrixHeight = columnMatrix.getViewableSpaces()[columnPointer].height;\n const { primary: topHeight, secondary: bottomHeight } = columnMatrixHeight;\n\n const centerHeight = height - (topHeight + bottomHeight);\n const centerWidth = width - (leftWidth + rightWidth);\n\n return {\n viewWidth: [leftWidth, centerWidth, rightWidth],\n viewHeight: [topHeight, centerHeight, bottomHeight]\n };\n};\n","/**\n * This file declares a table that can be extended to create a Datagrid, crosstab\n * and man other visualzations that require a tabular structure.\n */\n\nimport { getUniqueId } from 'muze-utils';\nimport GenericLayout from '../generic-layout';\nimport { DEFAULT_CONFIGURATION, DEFAULT_MEASUREMENTS } from './defaults';\nimport {\n renderMatrices\n} from './renderer';\nimport { generateVisualMatrices } from './layout-helper';\nimport { computeLayoutMeasurements, getViewMeasurements, getViewMatrices } from './computations';\n/**\n * This class is used to create a tabular structure that\n * can house charts and values.\n *\n * @class GridLayout\n */\nexport default class GridLayout extends GenericLayout {\n\n /**\n * Creates an instance of TableLayout.\n * @param {HTMLElement} matrices Set of upto 9 matrices containing the cells to be rendered\n * @param {HTMLElement} mountPoint DOM element/d3 selection where the layout is to be mounted\n * @param {Object} measurement The dimensions of the layout\n * @param {Object} config external configurations.\n * @memberof GenericLayout\n *\n * measurement : {\n * width : number => width of the container\n * height : number => height of the container\n * unitHeight : number => height of unit of the cells\n * unitWidth : number => width of unit of the cells\n * }\n *\n */\n constructor (matrices, mountPoint, measurement, config) {\n super(mountPoint, measurement, config);\n this.matrices(matrices);\n this.config(this.constructor.defaultConfig());\n this._layoutId = getUniqueId();\n }\n\n /**\n * Returns initial set of measurements for the grid layout\n *\n * @static\n * @return {Object} Returns initial set of measurements\n * @memberof GridLayout\n */\n static defaultMeasurement () {\n return DEFAULT_MEASUREMENTS;\n }\n\n /**\n * Returns initialconfiguration for grid layout\n *\n * @static\n * @return {Object} Returns initial configuration for grid layout\n * @memberof GridLayout\n */\n static defaultConfig () {\n return DEFAULT_CONFIGURATION;\n }\n\n /**\n * This function is used to return an instance of GridLayout\n *\n * @return {GridLayout} Instance of grid layout.\n * @static\n * @memberof GridLayout\n */\n static create () {\n return new GridLayout(null, null, this.defaultMeasurement(), this.defaultConfig());\n }\n\n /**\n * Sets/Gets the matrices for the layout\n *\n * @param {Array} matrices Set of matrices\n * @return {Object} Getter/Setter\n * @memberof GridLayout\n */\n matrices (matrices) {\n if (matrices) {\n this._matrices = generateVisualMatrices(this, matrices);\n return this;\n }\n return super.matrices(matrices);\n }\n\n /**\n * Triggers the computations for the layout based on the matrices available\n * This causes a reflow in the entire layout system.\n *\n * @return {Object} Layout instance\n * @memberof GridLayout\n */\n triggerReflow () {\n computeLayoutMeasurements(this);\n this.setViewInformation();\n return this;\n }\n\n /**\n *\n *\n * @param {*} type\n * @param {*} pageNumber\n * @returns\n * @memberof GridLayout\n */\n gotoPage (type, pageNumber) {\n const pageType = type.toLowerCase();\n const { viewMatricesInfo } = this.getViewInformation();\n const totalPages = viewMatricesInfo[`${pageType}Pages`];\n const pointer = Math.min(Math.max(1, pageNumber), totalPages);\n this.config({\n [`${pageType}Pointer`]: pointer - 1\n });\n this.setViewInformation();\n this.renderGrid();\n return this;\n }\n\n /**\n *\n *\n * @param {*} type\n * @returns\n * @memberof GridLayout\n */\n pages (type) {\n const { viewMatricesInfo } = this.getViewInformation();\n const pageType = type.toLowerCase();\n return {\n totalPages: viewMatricesInfo[`${pageType}Pages`],\n currentPage: this.config()[`${pageType}Pointer`] + 1\n };\n }\n\n /**\n *\n *\n * @returns\n * @memberof GridLayout\n */\n setViewInformation () {\n const {\n rowPointer,\n columnPointer,\n border\n } = this.config();\n const viewMatricesInfo = getViewMatrices(this, rowPointer, columnPointer);\n const layoutDimensions = getViewMeasurements(this);\n layoutDimensions.border = border;\n this.viewInfo = {\n viewMatricesInfo,\n layoutDimensions\n };\n return this;\n }\n\n /**\n *\n *\n * @returns\n * @memberof GridLayout\n */\n getViewInformation () {\n return this.viewInfo;\n }\n\n /**\n * Renders the layout\n *\n * @return {Object} current instance\n * @memberof GridLayout\n */\n renderGrid (mountPoint) {\n this.mountPoint(mountPoint);\n if (!this.mountPoint()) {\n return this;\n }\n const {\n viewMatricesInfo,\n layoutDimensions\n } = this.getViewInformation();\n // Render matrices\n renderMatrices(this, viewMatricesInfo.matrices, layoutDimensions);\n return this;\n }\n}\n","import VisualMatrix from '../visual-matrix/visual-matrix';\n\n/**\n * Generates the set of visual matrices for pagination and layouting algorithms\n *\n * @param {*} context\n * @param {*} matrices\n * @returns\n */\nexport const generateVisualMatrices = (context, matrices) => {\n // Set of matrices for layout is generated starting with the left matrix\n let leftMatrix = [];\n let rightMatrix = [];\n let topMatrix = [];\n let bottomMatrix = [];\n let begColCells;\n let endColCells;\n const {\n isRowSizeEqual,\n isColumnSizeEqual,\n gutterSpace,\n distribution,\n border,\n breakPage\n } = context.config();\n const {\n minUnitHeight,\n minUnitWidth\n } = context.measurement();\n const { top, center, bottom } = matrices;\n const [topLeft, topColumns, topRight] = top;\n const [leftRows, valueMatrix, rightRows] = center;\n const [bottomLeft, bottomColumns, bottomRight] = bottom;\n\n if (leftRows.length > 0) {\n // If no left matrix is present, context will be empty\n leftMatrix = [...topLeft, ...leftRows, ...bottomLeft];\n }\n if (rightRows.length > 0) {\n // If no right matrix is present, context will be empty\n rightMatrix = [...topRight, ...rightRows, ...bottomRight];\n }\n if (topColumns.length > 0 && topColumns[0].length > 0) {\n // If no top matrix is present, context will be empty\n topMatrix = topColumns.map((d, i) => [...topLeft[i], ...d, ...topRight[i]]);\n }\n if (bottomColumns.length > 0 && bottomColumns[0].length > 0) {\n // If no bottom matrix is present, context will be empty\n bottomMatrix = bottomColumns.map((d, i) => [...bottomLeft[i], ...d, ...bottomRight[i]]);\n }\n context.rowMatrix(new VisualMatrix([leftMatrix, rightMatrix], {\n isDistributionEqual: isRowSizeEqual,\n distribution: distribution.rows,\n gutter: gutterSpace.rows,\n unitMeasures: {\n width: minUnitWidth,\n height: minUnitHeight,\n border: border.width\n },\n breakPage: breakPage.rows.map(e => e + Math.max(topLeft.length, topRight.length)),\n extraCellLengths: [topLeft.length, bottomLeft.length]\n }));\n\n if (topLeft.length > 0) {\n begColCells = topLeft[0].length;\n } else {\n begColCells = bottomLeft.length > 0 ? bottomLeft[0].length : 0;\n }\n\n if (topRight.length > 0) {\n endColCells = topRight[0].length;\n } else {\n endColCells = bottomRight.length > 0 ? bottomRight[0].length : 0;\n }\n\n context.columnMatrix(new VisualMatrix([topMatrix, bottomMatrix], {\n isDistributionEqual: isColumnSizeEqual,\n distribution: distribution.columns,\n gutter: gutterSpace.columns,\n isTransposed: true,\n unitMeasures: {\n width: minUnitWidth,\n height: minUnitHeight,\n border: border.width\n },\n breakPage: breakPage.columns,\n extraCellLengths: [begColCells, endColCells]\n }));\n context.centerMatrix(valueMatrix);\n\n return matrices;\n};\n","import { ERROR_MSG } from 'muze-utils';\n/**\n * An Interface to be implemented if the transaction support is necessary. This class ensures reactivity to\n * global properties.\n */\nexport default class TransactionSupport {\n /**\n * Property accessor for data member of the class. Data is passed to the system by calling this method.\n */\n data () {\n throw new Error(ERROR_MSG.INTERFACE_IMPl);\n }\n\n /**\n * Property accessor for width of the class. Width is passed as an integer.\n */\n width () {\n throw new Error(ERROR_MSG.INTERFACE_IMPl);\n }\n\n /**\n * Property accessor for height of the class. Height is passed as an integer.\n */\n height () {\n throw new Error(ERROR_MSG.INTERFACE_IMPl);\n }\n\n /**\n * Property accessor for config of the class. Config is passed as an object.\n */\n config () {\n throw new Error(ERROR_MSG.INTERFACE_IMPl);\n }\n}\n","import { TOP, BOTTOM, LEFT, TITLE, SUB_TITLE, GROUP, LAYOUT, LEGEND } from '../constants';\n\n/**\n *\n *\n * @param {*} context\n * @returns\n */\nexport const arrangeComponents = (context) => {\n const legendConfig = context.config().legend;\n const titleConfig = context.title()[1];\n const subtitleConfig = context.subtitle()[1];\n const titleLayouts = {\n [`${TOP}-${TOP}`]: [TITLE, SUB_TITLE, GROUP],\n [`${BOTTOM}-${BOTTOM}`]: [GROUP, SUB_TITLE, TITLE],\n [`${TOP}-${BOTTOM}`]: [TITLE, GROUP, SUB_TITLE],\n [`${BOTTOM}-${TOP}`]: [SUB_TITLE, GROUP, TITLE]\n };\n const legendLayouts = [\n [LEGEND, LAYOUT],\n [LAYOUT, LEGEND]\n ];\n const titlePosition = titleConfig.position || TOP;\n const subtitlePosition = subtitleConfig.position || TOP;\n\n return {\n headers: titleLayouts[`${titlePosition}-${subtitlePosition}`],\n legends: legendConfig.position === LEFT || legendConfig.position === TOP ?\n legendLayouts[0] : legendLayouts[1]\n };\n};\n","/**\n * Flag to specify whether direction is vertical.\n */\nexport const MARGIN = 'margin';\nexport const LEFT = 'left';\nexport const RIGHT = 'right';\nexport const BOTTOM = 'bottom';\nexport const TOP = 'top';\nexport const SPACE_FIXER = 'spaceFixer';\nexport const CLASSPREFIX = 'muze';\nexport const VERTICAL_ALIGN = 'verticalAlign';\nexport const TEXT_ALIGN = 'textAlign';\nexport const IS_OFFSET = 'isOffset';\nexport const MIDDLE = 'middle';\nexport const BASELINE = 'baseline';\nexport const SHOW = 'show';\nexport const CENTER = 'center';\nexport const TEXT = 'text';\nexport const HEADER = 'header';\nexport const HEIGHT = 'height';\nexport const WIDTH = 'width';\nexport const DATA = 'data';\nexport const AXES = 'axes';\nexport const FACET_BY_FIELDS = 'facetByFields';\nexport const FIELDS = 'fields';\nexport const TRANSFORM = 'transform';\nexport const LAYER_DEF = 'layerDef';\nexport const CONFIG = 'config';\nexport const DETAIL_FIELDS = 'detailFields';\n\nexport const TEXT_CELL = 'text-cell';\nexport const AXIS_CELL = 'axis-cell';\nexport const GEOM_CELL = 'geom-cell';\nexport const BLANK_CELL = 'blank-cell';\n","// eneum to refer to simple cell\nexport const SIMPLE = 'simple';\n// eneum to refer to header cell\nexport const TEXT = 'text';\n// enum to refer to axis cell\nexport const AXIS = 'axis';\n// enum to refer to visual cell\nexport const GEOM = 'geom';\n// enum to refer blank cell\nexport const BLANK = 'blank';\n","import {\n ERROR_MSG,\n getUniqueId,\n mergeRecursive\n} from 'muze-utils';\nimport { SIMPLE } from './enums/cell-type';\n\n/**\n * This file declares a class that is used as an interface to create new\n * SimpleCell elements.\n * @module SimpleCell\n */\n/**\n * Base class for all table cells.\n *\n * @interface\n * @class SimpleCell\n */\nclass SimpleCell {\n\n /**\n * Creates an instance of SimpleCell.\n *\n * @param {*} config The input configuration.\n * @memberof SimpleCell\n */\n constructor (config) {\n this._id = getUniqueId();\n\n const defConfig = mergeRecursive({}, this.constructor.defaultConfig());\n this._config = mergeRecursive(defConfig, config || {});\n\n this._mount = null;\n }\n\n /**\n * Returns the type of the placehlder.\n *\n * @readonly\n * @memberof SimpleCell\n */\n get type () {\n return SIMPLE;\n }\n\n /**\n * Returns the type of the placehlder.\n *\n * @readonly\n * @memberof SimpleCell\n * @return {Object} Default config for the placeholder\n */\n static defaultConfig () {\n return {};\n }\n\n /**\n * Returns the value contained by the SimpleCell.\n *\n * @memberof SimpleCell\n */\n valueOf () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Returns a unique identifier for the instance used\n * to control selective rendering.\n *\n * @memberof SimpleCell\n */\n id () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Returns a serialized representation of the instance.\n *\n * @memberof SimpleCell\n */\n serialize () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Returns an object with width and height fields\n * specifying the space taken up by this metod.\n *\n * @memberof SimpleCell\n */\n getLogicalSpace () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Method used to set the space available to render the SimpleCell\n *\n * @param {number} width The available width.\n * @param {number} height The available height.\n * @memberof SimpleCell\n */\n setAvailableSpace () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Render the SimpleCell inthe supplied mount point.\n *\n * @param {HTMLElement} mount The mount point to render in.\n * @memberof SimpleCell\n */\n render () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Render the SimpleCell inthe supplied mount point.\n *\n * @param {HTMLElement} mount The mount point to render in.\n * @memberof SimpleCell\n */\n remove () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n}\n\nexport default SimpleCell;\n","/**\n * This file exports variables that are used as defaults for\n * the placeholders\n */\nimport * as CONSTANTS from './constants';\n\n /**\n * Default Configuration for the cells\n * @return {Object} Default configuration\n */\nexport const DEFAULT_CONFIG = {\n [CONSTANTS.MARGIN]: {\n [CONSTANTS.LEFT]: 0,\n [CONSTANTS.RIGHT]: 0,\n [CONSTANTS.TOP]: 0,\n [CONSTANTS.BOTTOM]: 0\n },\n [CONSTANTS.SPACE_FIXER]: 2,\n [CONSTANTS.IS_OFFSET]: false,\n [CONSTANTS.VERTICAL_ALIGN]: CONSTANTS.TOP,\n [CONSTANTS.TEXT_ALIGN]: CONSTANTS.CENTER,\n [CONSTANTS.SHOW]: true\n};\n","import { mergeRecursive } from 'muze-utils';\nimport { GEOM, TEXT, AXIS, BLANK } from './enums/cell-type';\n\nconst DEFAULT_PROPS = {\n mount: {},\n availHeight: {},\n availWidth: {},\n config: {\n sanitization: (context, value) => mergeRecursive(context._config, value)\n },\n logicalSpace: {},\n source: {}\n};\n\nconst geomProps = {\n data: {},\n caption: {},\n config: {},\n axes: {\n sanitization: (context, value) => Object.assign(context._axes, value)\n },\n facetByFields: {},\n fields: {},\n transform: {},\n layerDef: {},\n detailFields: {}\n};\n\nexport const PROPS = {\n [TEXT]: DEFAULT_PROPS,\n [GEOM]: mergeRecursive(geomProps, DEFAULT_PROPS),\n [AXIS]: DEFAULT_PROPS,\n [BLANK]: DEFAULT_PROPS\n};\n","/**\n * This file declares a class that represents a table cell\n * used to house an axis.\n * @module VisualCell\n */\nimport { selectElement, makeElement, generateGetterSetters } from 'muze-utils';\nimport { CLASSPREFIX, HEIGHT, WIDTH, AXIS_CELL } from './enums/constants';\nimport SimpleCell from './simple-cell';\nimport { DEFAULT_CONFIG } from './enums/defaults';\nimport { AXIS } from './enums/cell-type';\nimport { PROPS } from './props';\n\n/**\n * Computes the logical space of the an axis instance within an axis cell\n *\n * @param {Object} context Required to get the needed parameters to compute axis space\n * @return {Object} Returns the logical space for axis\n */\nconst computeAxisSpace = (context) => {\n let logicalWidth;\n let logicalHeight;\n const axis = context.source();\n const {\n spaceFixer,\n margin\n } = context.config();\n const {\n width,\n height\n } = axis.getLogicalSpace();\n const {\n show\n } = axis.config();\n if (show === true) {\n logicalHeight = Math.floor(height + margin.top + margin.bottom + spaceFixer);\n logicalWidth = Math.floor(width + margin.left + margin.right + spaceFixer);\n } else {\n [logicalWidth, logicalHeight] = [width, height];\n }\n return {\n width: logicalWidth,\n height: logicalHeight\n };\n};\n\n/**\n * Represents an axis cell.\n *\n * @class Axis\n */\nclass AxisCell extends SimpleCell {\n\n /**\n * Creates an instance of AxisCell.\n *\n * @param {Object} config The input config.\n * @memberof AxisCell\n */\n constructor (config) {\n super(config);\n\n this._axis = null;\n this._availHeight = null;\n this._availWidth = null;\n this._logicalSpace = null;\n\n generateGetterSetters(this, PROPS[AXIS]);\n }\n\n /**\n * return the type pf SimpleCell cell.\n *\n * @readonly\n * @memberof AxisCell\n */\n get type () {\n return AXIS;\n }\n\n /**\n * This method return the value conatined by this SimpleCell.\n *\n * @return {SimpleAxis | ColorAxis} Instance of SimpleAxis or ColorAxis.\n * @memberof AxisCell\n */\n valueOf () {\n return this.source().id;\n }\n\n /**\n * This method return the unique identififer of the axis\n *\n * @return {string} Id of the axis.\n * @memberof AxisCell\n */\n get id () {\n return this._id;\n }\n\n /**\n * Retrns the serialized representation of this cell.\n *\n * @return {Object}Object with serializable props.\n * @memberof AxisCell\n */\n serialize () {\n return {\n type: AXIS,\n axis: this.source().serialize()\n };\n }\n\n /**\n * return the default configuration for the text cell\n *\n * @static\n * @return {Object} Default configuration of the cell\n * @memberof AxisCell\n */\n static defaultConfig () {\n return DEFAULT_CONFIG;\n }\n\n /**\n * return the space taken up by an axis element in the dom.\n *\n * @return {Object} Object with width and height fields.\n * @memberof AxisCell\n */\n getLogicalSpace () {\n if (!this.logicalSpace()) {\n this.logicalSpace(computeAxisSpace(this));\n }\n return this.logicalSpace();\n }\n\n /**\n * This method is used to set the space availiable to render\n * the SimpleCell.\n *\n * @param {number} width The width of SimpleCell.\n * @param {number} height The height of SimpleCell.\n * @return {Instance} Returns current Instance\n * @memberof AxisCell\n */\n setAvailableSpace (width, height) {\n this.availWidth(width);\n this.availHeight(height);\n const {\n margin,\n isOffset\n } = this.config();\n this.source().setAvailableSpace(width, height, margin, isOffset);\n this.logicalSpace(null);\n this.source().logicalSpace(null);\n return this;\n }\n\n /**\n * This method is used to render the axis inside the axis cell.\n *\n * @param {HTMLElement} mount The mount point.\n * @return {Selection} node where axis mounted\n * @memberof AxisCell\n */\n /* istanbul ignore next */render (mount) {\n if (!mount) {\n return this;\n }\n const axis = this.source();\n const availHeight = this.availHeight();\n const availWidth = this.availWidth();\n const {\n margin\n } = this.config();\n const {\n top,\n bottom,\n left,\n right\n } = margin;\n const {\n show\n } = axis.config();\n const wrapperDiv = makeElement(selectElement(mount), 'div', [this], `${CLASSPREFIX}-${AXIS_CELL}`);\n const selection = makeElement(wrapperDiv, 'svg', [1], `${CLASSPREFIX}-axis-container`);\n\n this.mount(mount);\n if (availWidth === 0 || !availWidth) {\n selection.attr(WIDTH, `${0}px`);\n }\n if (availHeight === 0 || !availHeight) {\n selection.attr(HEIGHT, `${0}px`);\n }\n wrapperDiv.style(WIDTH, `${show ? availWidth : 0}px`)\n .style(HEIGHT, `${show ? availHeight : 0}px`)\n .style('margin-top', top)\n .style('margin-bottom', bottom)\n .style('margin-left', left)\n .style('margin-right', right);\n\n axis.mount(selection.node());\n return selection;\n }\n\n /**\n * Disposes the cell\n *\n * @return {Instance} Current instance of AxisCell\n * @memberof AxisCell\n */\n remove () {\n this.source() && this.source().remove();\n this.mount() && this.mount().remove();\n return this;\n }\n}\n\nexport default AxisCell;\n\n","/**\n * This file declares a class that represents a BLANK element in a table.\n * @module VisualCell\n */\nimport {\n selectElement,\n makeElement,\n applyStyle,\n generateGetterSetters\n } from 'muze-utils';\nimport SimpleCell from './simple-cell';\nimport { CLASSPREFIX, BLANK_CELL } from './enums/constants';\nimport { BLANK } from './enums/cell-type';\nimport { DEFAULT_CONFIG } from './enums/defaults';\nimport { PROPS } from './props';\n\n/**\n * Represents a table haeder.\n *\n * @class BLANK\n */\nclass BlankCell extends SimpleCell {\n\n /**\n * Creates an instance of BLANK.\n * @param {Object} config The input configuration.\n * @memberof BLANK\n */\n constructor (config) {\n super(config);\n\n generateGetterSetters(this, PROPS[BLANK]);\n }\n\n /**\n * return the type pf SimpleCell cell.\n *\n * @readonly\n * @memberof BlankCell\n */\n get type () {\n return BLANK;\n }\n\n /**\n * This method return the value contained by this SimpleCell.\n *\n * @return {string} The text value contained by this cell.\n * @memberof BlankCell\n */\n valueOf () {\n return this.id;\n }\n\n /**\n * return the default configuration for the text cell\n *\n * @static\n * @return {Object} Default configuration of the cell\n * @memberof BlankCell\n */\n static defaultConfig () {\n return DEFAULT_CONFIG;\n }\n\n /**\n * This method is used to return a unique identifier for\n * the BLANK cell.\n *\n * @return {string} The unique identifier for the BLANK.\n * @memberof BlankCell\n */\n get id () {\n return this._id;\n }\n\n /**\n * This method is used to obtain a serialized representation of this instance.\n *\n * @return {Object} Object with serilizable props.\n * @memberof BLANK\n */\n serialize () {\n return {\n type: BLANK\n };\n }\n\n /**\n * This method return the space taken up\n * by the text with the style applied.\n *\n * @return {Object} width and height taken up by the text.\n * @memberof BLANK\n */\n getLogicalSpace () {\n if (!this.logicalSpace()) {\n return {\n width: this.width || 0,\n height: this.height || 0\n };\n }\n return this.logicalSpace();\n }\n\n /**\n * This method is used to set the available space.\n *\n * @param {number} width The available width.\n * @param {number} height The available height.\n * @return {Instance} Returns current Instance\n * @memberof BlankCell\n */\n setAvailableSpace (width, height) {\n this.availWidth(width);\n this.availHeight(height);\n this.logicalSpace(null);\n return this;\n }\n\n /**\n * This method is used to render the BLANK cell inside\n * the provided mount point.\n *\n * @param {HTMLElement} mount The mount point for this cell.\n * @return {Instance} Returns current Instance\n * @memberof BLANK\n */\n /* istanbul ignore next */render (mount) {\n if (mount) {\n const { style } = this.config();\n // append span element to mount point\n this.mount(mount);\n const container = selectElement(mount);\n const elem = makeElement(container, 'div', [this.id]);\n elem.classed(`${CLASSPREFIX}-${BLANK_CELL}`, true);\n elem.style('width', `${this.availWidth()}px`);\n elem.style('height', `${this.availHeight()}px`);\n elem.html('');\n // apply style on the returned element\n if (style) {\n applyStyle(elem, style);\n }\n } return this;\n }\n\n /**\n * Removes the cell(Disposal)\n *\n * @return {Instance} Returns current Instance\n * @memberof BlankCell\n */\n remove () {\n this.mount() && this.mount().remove();\n return this;\n }\n }\nexport default BlankCell;\n","/**\n * This file declares a class that represents a Text element in a table.\n * @module VisualCell\n */\n\nimport {\n selectElement,\n makeElement,\n getSmartComputedStyle,\n generateGetterSetters\n} from 'muze-utils';\nimport SimpleCell from './simple-cell';\nimport { TEXT } from './enums/cell-type';\nimport { PROPS } from './props';\nimport { DEFAULT_CONFIG } from './enums/defaults';\nimport { CLASSPREFIX, TOP, BOTTOM, LEFT, RIGHT, HEADER, WIDTH, TEXT_CELL } from './enums/constants';\nimport './text-cell.scss';\n\n/**\n* Computes the Logical Space for the text\n*\n* @param {Object} context Required to get the needed parameters to compute text space\n* @return {Object} Logical space taken up by text\n* @memberof TextCell\n*/\nconst computeTextSpace = (context) => {\n const { labelManager } = context.dependencies();\n const space = labelManager.getOriSize(context.source());\n const {\n margin,\n show\n } = context.config();\n\n labelManager.setStyle(context._computedStyle);\n if (show) {\n return {\n width: space.width + margin.left + margin.right + context._minTickDiff.width,\n height: space.height + margin.top + margin.bottom + context._minTickDiff.height\n };\n } return {\n width: 0,\n height: 0\n };\n};\n\n/**\n * Represents a table haeder.\n *\n * @class Text\n */\nclass TextCell extends SimpleCell {\n\n /**\n * Creates an instance of Text.\n * @param {Object} config The input configuration.\n * @param {string} dependencies Dependencies for the class(labelManager)\n * @memberof Text\n */\n constructor (config, dependencies) {\n super(config);\n\n this._dependencies = dependencies;\n this._className = this._config.className ||\n (this._config.type === HEADER ? `${CLASSPREFIX}-${HEADER}-cell` : `${CLASSPREFIX}-${TEXT}-cell`);\n this._computedStyle = getSmartComputedStyle(selectElement('body'), this._className);\n this._dependencies.labelManager.setStyle(this._computedStyle);\n this._minTickDiff = this._dependencies.labelManager.getOriSize('WW');\n\n generateGetterSetters(this, PROPS[TEXT]);\n }\n\n /**\n * return the type pf SimpleCell cell.\n *\n * @readonly\n * @memberof TextCell\n */\n get type () {\n return TEXT;\n }\n\n /**\n * This method return the value contained by this SimpleCell.\n *\n * @return {string} The text value contained by this cell.\n * @memberof TextCell\n */\n valueOf () {\n return this.source();\n }\n\n /**\n * This method is used to return a unique identifier for\n * the Text cell.\n *\n * @return {string} The unique identifier for the Text.\n * @memberof TextCell\n */\n get id () {\n return this._id;\n }\n\n /**\n * Returns the dependencies of the instance\n *\n * @return {Object} Dependencies needed by the class\n * @memberof TextCell\n */\n dependencies () {\n return this._dependencies;\n }\n\n /**\n * This method is used to obtain a serialized representation of this instance.\n *\n * @return {Object} Object with serilizable props.\n * @memberof TextCell\n */\n serialize () {\n return {\n text: this.source(),\n type: TEXT\n };\n }\n\n /**\n * return the default configuration for the text cell\n *\n * @static\n * @return {Object} Default configuration of the cell\n * @memberof TextCell\n */\n static defaultConfig () {\n return DEFAULT_CONFIG;\n }\n\n /**\n * This method return the space taken up\n * by the text with the style applied.\n *\n * @return {Object} width and height taken up by the text.\n * @memberof Text\n */\n getLogicalSpace () {\n if (!this.logicalSpace()) {\n this.logicalSpace(computeTextSpace(this));\n }\n return this.logicalSpace();\n }\n\n /**\n * This method is used to set the available space.\n *\n * @param {number} width The available width.\n * @param {number} height The available height.\n * @return {Instance} Returns current Instance\n * @memberof TextCell\n */\n setAvailableSpace (width, height) {\n this.availWidth(width);\n this.availHeight(height);\n this.logicalSpace(null);\n return this;\n }\n\n /**\n * This method is used to render the Text cell inside\n * the provided mount point.\n *\n * @param {HTMLElement} mount The mount point for this cell.\n * @return {Instance} Returns current Instance\n * @memberof Text\n */\n render (mount) {\n const availWidth = this.availWidth();\n const {\n margin,\n show,\n verticalAlign,\n textAlign\n } = this.config();\n\n this.mount(mount);\n if (show) {\n const container = selectElement(mount);\n const elem = makeElement(container, 'div', [this.id], `${CLASSPREFIX}-${TEXT_CELL}`);\n\n container.style('vertical-align', verticalAlign);\n elem.classed(this._className, true);\n // apply style on the returned element\n elem.style(WIDTH, availWidth ? `${availWidth}px` : '100%');\n [TOP, BOTTOM, LEFT, RIGHT].forEach((type) => {\n elem.style(`padding-${type}`, `${margin[type]}px`);\n });\n elem.style('text-align', textAlign);\n elem.style('display', 'inline');\n // set the text as the innerHTML\n elem.html(this.source());\n }\n return this;\n }\n\n /**\n * Disposes the cell\n *\n * @return {Instance} Returns current Instance\n * @memberof TextCell\n */\n remove () {\n this.mount() && this.mount().remove();\n return this;\n }\n }\n\nexport default TextCell;\n","/**\n * This file declares a class that is used to represent a table cell\n * that houses a visual unit.\n * @module VisualCell\n */\n\nimport { selectElement, makeElement, generateGetterSetters } from 'muze-utils';\nimport SimpleCell from './simple-cell';\nimport { GEOM } from './enums/cell-type';\nimport { PROPS } from './props';\nimport {\n CLASSPREFIX, HEIGHT, WIDTH, DATA, AXES, FACET_BY_FIELDS, FIELDS, TRANSFORM, LAYER_DEF, CONFIG, GEOM_CELL,\n DETAIL_FIELDS\n} from './enums/constants';\nimport { DEFAULT_CONFIG } from './enums/defaults';\n\n/**\n * Calculates the logical space of the cell\n *\n * @param {Object} context Required to get the needed parameters to compute unit space\n * @return {Object} Logical space taken up by the unit\n * @memberof GeomCell\n */\nconst computeGeomSpace = (context) => {\n const config = context.source().config();\n const { width, height } = config;\n return {\n width: Math.ceil(width),\n height: Math.ceil(height + context.getCaptionSpace().height)\n };\n};\n\n /**\n * This class represents a SimpleCell for visual unit.\n *\n * @class GeomCell\n */\nclass GeomCell extends SimpleCell {\n\n /**\n * Creates an instance of GeomCell.\n * @param {Object} config The input configuration.\n * @memberof GeomCell\n */\n constructor (config) {\n super(config);\n\n this._unit = null;\n this._layers = null;\n this._axes = {};\n this._datamodel = {};\n this._facetByFields = {};\n this._fields = null;\n this._transform = null;\n this._caption = null;\n\n generateGetterSetters(this, PROPS[GEOM]);\n }\n\n /**\n * return the type pf SimpleCell cell.\n *\n * @readonly\n * @memberof GeomCell\n */\n get type () {\n return GEOM;\n }\n\n /**\n * This method return the value contained by this cell.\n *\n * @return {VisualUnit} Instance of visual unit contained by visual unit.\n * @memberof GeomCell\n */\n valueOf () {\n return this.source();\n }\n\n /**\n * This method is used to return the id of the\n * visual unit housed by this cell.\n *\n * @return {string} The unique id of the visual unit.\n * @memberof GeomCell\n */\n get id () {\n return this.source().id();\n }\n\n /**\n * This method return a serialized representation of\n * this instance.\n *\n * @return {Object} Object with serializable props.\n * @memberof GeomCell\n */\n serialize () {\n return {\n type: GEOM,\n unit: this.source().serialize(),\n caption: this.caption()\n };\n }\n\n /**\n * return the default configuration for the geom cell\n *\n * @static\n * @return {Object} Default configuration of the cell\n * @memberof GeomCell\n */\n static defaultConfig () {\n return DEFAULT_CONFIG;\n }\n\n /**\n * Updates the model based on the changed parameters\n *\n * @return {Instance} return instance\n * @memberof GeomCell\n */\n updateModel () {\n const unit = this.source();\n unit.lockModel();\n [DATA, AXES, FACET_BY_FIELDS, FIELDS, TRANSFORM, LAYER_DEF, CONFIG, DETAIL_FIELDS].forEach((prop) => {\n this[prop]() && unit[prop](this[prop]());\n });\n unit.unlockModel();\n return this;\n }\n\n /**\n * It gives the space taken by the caption of the unit\n *\n * @return {Object} return the space taken by caption\n * @memberof GeomCell\n */\n getCaptionSpace () {\n const caption = this.caption();\n\n let captionSpace = { width: 0, height: 0 };\n if (caption) {\n captionSpace = caption.getLogicalSpace();\n }\n return captionSpace;\n }\n\n /**\n * return the space taken up by the element in the dom.\n *\n * @return {Object} Object with width and height fields.\n * @memberof GeomCell\n */\n getLogicalSpace () {\n if (!this.logicalSpace()) {\n this.logicalSpace(computeGeomSpace(this));\n }\n return this.logicalSpace();\n }\n\n /**\n * This method is used to set the space available to\n * render the SimpleCell.\n *\n * @param {number} width The available width.\n * @param {number} height The available height.\n * @return {Instance} Returns current Instance\n * @memberof GeomCell\n */\n setAvailableSpace (width, height) {\n const unit = this.source();\n\n this.availWidth(width);\n this.availHeight(height);\n unit.lockModel();\n unit.width(width).height(height - this.getCaptionSpace().height);\n unit.unlockModel();\n this.logicalSpace(null);\n return this;\n }\n\n /**\n * his method is used to render the visual unit inside the provided cell.\n *\n * @param {HTMLElement} mount The mountpoint in the table.\n * @return {Instance} Returns current Instance\n * @memberof GeomCell\n */\n render (mount) {\n if (mount) {\n this.mount(mount);\n const availHeight = this.availHeight();\n const availWidth = this.availWidth();\n const caption = this.caption();\n const wrapperDiv = makeElement(selectElement(mount), 'div', [1], `${CLASSPREFIX}-${GEOM_CELL}`);\n\n if (caption) {\n const captionDom = makeElement(wrapperDiv, 'div', [caption], `${CLASSPREFIX}-unit-caption`).node();\n caption.render(captionDom);\n }\n const selection = makeElement(wrapperDiv, 'div', [1], `${CLASSPREFIX}-unit`);\n wrapperDiv.style(WIDTH, `${availWidth}px`).style(HEIGHT, `${availHeight}px`);\n selection.style(WIDTH, `${availWidth}px`)\n .style(HEIGHT, `${availHeight - this.getCaptionSpace().height}px`);\n this.source().mount(selection.node());\n }\n return this;\n }\n\n /**\n * Disposes the cell\n *\n * @return {Object} Current instance\n * @memberof GeomCell\n */\n remove () {\n this.mount() && this.mount().remove();\n this.source().remove();\n return this;\n }\n}\n\nexport default GeomCell;\n","import AxisCell from './axis-cell';\nimport BlankCell from './blank-cell';\nimport TextCell from './text-cell';\nimport GeomCell from './geom-cell';\nimport SimpleCell from './simple-cell';\n\nimport * as CONSTANTS from './constants';\n\nexport const DEFAULT_PLACEHOLDERS = {\n [CONSTANTS.SIMPLE_CELL]: SimpleCell,\n [CONSTANTS.TEXT_CELL]: TextCell,\n [CONSTANTS.AXIS_CELL]: AxisCell,\n [CONSTANTS.GEOM_CELL]: GeomCell,\n [CONSTANTS.BLANK_CELL]: BlankCell\n};\n\n","export const SIMPLE_CELL = 'SimpleCell';\nexport const TEXT_CELL = 'TextCell';\nexport const AXIS_CELL = 'AxisCell';\nexport const BLANK_CELL = 'BlankCell';\nexport const GEOM_CELL = 'GeomCell';\n\n","import { DEFAULT_PLACEHOLDERS } from './defaults';\n\n/**\n * Creates a registry for the cells, which can be used for\n * setting a new cell or getting the registered cells\n *\n * @return {Object} Setters and getters for registered cells\n */\nconst cellRegistry = () => {\n const reg = DEFAULT_PLACEHOLDERS;\n return {\n set: (key, def) => {\n if (key in reg) {\n reg[key] = def;\n }\n return cellRegistry;\n },\n get: () => reg\n };\n};\nexport default cellRegistry;\n","import { TextCell } from '@chartshq/visual-cell';\nimport { escapeHTML } from 'muze-utils';\n\n/**\n *\n *\n * @param {*} rawContent\n * @returns\n */\nconst resolveTitleSubTitleContent = (rawContent) => {\n if (typeof rawContent === 'function' && !rawContent._sanitize) {\n return rawContent();\n }\n return escapeHTML(rawContent());\n};\n\n/**\n *\n *\n * @param {*} config\n * @param {*} cellType\n * @param {*} labelManager\n * @param {*} prevCell\n * @returns\n */\nconst headerCreator = (config, cellType, labelManager, prevCell) => {\n const {\n content\n } = config;\n const cell = prevCell || new TextCell({ type: cellType }, { labelManager });\n\n cell.source(content);\n\n return {\n height: cell.getLogicalSpace().height,\n cell\n };\n};\n\n/**\n *\n *\n * @param {*} config\n * @param {*} type\n * @param {*} labelManager\n * @param {*} cell\n * @returns\n */\nconst createHeading = (config, type, labelManager, prevCell) => {\n if (!config) { return ''; }\n\n return headerCreator(\n config,\n type === 'title' ? 'header' : 'text',\n labelManager,\n prevCell\n );\n};\n\n/**\n *\n *\n * @param {*} context\n */\nexport const createHeaders = (context, canvasHeight, canvasWidth) => {\n let headerHeight = 0;\n const headers = {};\n\n canvasHeight >= 200 && canvasWidth >= 200 && ['title', 'subtitle'].forEach((type) => {\n const headerOptions = context[type]();\n const content = resolveTitleSubTitleContent(headerOptions[0]);\n if (content.length) {\n const config = headerOptions[1];\n\n config.width = context.width();\n config.content = content;\n\n const { height, cell } = createHeading(config, type, context.dependencies().smartlabel,\n context[`${type}Cell`]);\n\n headers[`${type}Cell`] = cell;\n context._composition[type] = cell;\n headerHeight += height + config.padding;\n }\n });\n return { headerHeight, headers };\n};\n\n","import { TextCell, AxisCell } from '@chartshq/visual-cell';\nimport {\n VERTICAL, HORIZONTAL, LEFT, RIGHT, LEGEND_TYPE_MAP, PADDING, BORDER, MARGIN\n} from '../constants';\n\n/**\n *\n *\n * @param {*} legendConfig\n * @param {*} canvases\n * @returns\n */\nexport const legendCreator = (canvas) => {\n let LegendCls;\n const dataset = [];\n const axes = canvas.getRetinalAxes();\n\n Object.entries(axes).forEach((axisInfo) => {\n const scale = axisInfo[1][0];\n const scaleType = axisInfo[0];\n const scaleProps = canvas[scaleType]();\n\n if (scaleProps.field) {\n const {\n type,\n step\n } = scale.config();\n\n const stepMapper = typeof step === 'boolean' ? step : false;\n LegendCls = LEGEND_TYPE_MAP[`${type}-${stepMapper}-${scaleType}`];\n dataset.push({ scale, canvas, fieldName: scaleProps.field, LegendCls, scaleType });\n }\n });\n\n return dataset;\n};\n\n/**\n *\n *\n * @param {*} legendConfig\n * @param {*} canvases\n * @param {*} measurement\n * @param {*} prevLegends\n * @returns\n */\nexport const legendInitializer = (legendConfig, canvas, measurement, prevLegends) => {\n const legends = [];\n const {\n height,\n width,\n headerHeight\n } = measurement;\n const {\n position,\n align\n } = legendConfig;\n\n const legendInfo = legendCreator(canvas);\n\n legendInfo.forEach((dataInfo, index) => {\n let legend = {};\n\n const legendMeasures = {};\n const {\n LegendCls,\n scale,\n fieldName,\n scaleType\n } = dataInfo;\n const config = legendConfig[scaleType] || {};\n const title = config.title || {};\n title.text = title.text || fieldName;\n if (config.show) {\n config.position = position;\n config.align = align;\n\n if (prevLegends[index]) {\n legend = prevLegends[index].legend;\n } else {\n legend = LegendCls.create({\n labelManager: canvas._dependencies.smartlabel,\n cells: {\n AxisCell, TextCell\n }\n });\n }\n legendMeasures.maxHeight = align === VERTICAL ? (height - headerHeight) : height * 0.2;\n legendMeasures.maxWidth = align === HORIZONTAL ? width : width * 0.2;\n legendMeasures.width = Math.min(legendMeasures.maxWidth, config.width);\n legendMeasures.height = Math.min(legendMeasures.maxHeight, config.height);\n\n [PADDING, BORDER, MARGIN].forEach((e) => {\n legendMeasures[e] = config[e];\n });\n legend.scale(scale)\n .title(title)\n .fieldName(fieldName)\n .config(config)\n .metaData(canvas.composition().visualGroup.getGroupByData().project([fieldName]))\n .measurement(legendMeasures)\n .canvasAlias(canvas.alias())\n .setLegendMeasures();\n\n legends.push({ canvas, legend, scaleType });\n }\n });\n return legends;\n};\n\n/**\n *\n *\n * @param {*} legends\n * @param {*} legendConfig\n * @param {*} availableHeight\n * @param {*} availableWidth\n * @returns\n */\nexport const getLegendSpace = (legends, legendConfig, availableHeight, availableWidth) => {\n const legendMeasures = legends.map(legendInfo => legendInfo.legend.measurement());\n const legendSpace = { width: 0, height: 0 };\n\n legendMeasures.forEach((space) => {\n let height = 0;\n let width = 0;\n width = Math.min(space.width, space.maxWidth);\n height = Math.min(space.height, space.maxHeight);\n\n if (legendConfig.align === HORIZONTAL) {\n if (legendSpace.width + width > availableWidth) {\n legendSpace.width = availableWidth;\n legendSpace.height += height;\n } else {\n legendSpace.width += width;\n legendSpace.height = Math.max(legendSpace.height, height);\n }\n } else if (legendSpace.height + height > availableHeight) {\n legendSpace.height = height;\n legendSpace.width += width;\n } else {\n legendSpace.height += height;\n legendSpace.width = Math.max(legendSpace.width, width);\n }\n });\n if (legendConfig.align === HORIZONTAL) {\n legendSpace.width = availableWidth;\n }\n return legendSpace;\n};\n\n/**\n *\n *\n * @param {*} context\n * @param {*} headerHeight\n * @returns\n */\nexport const createLegend = (context, headerHeight, height, width) => {\n const measurement = {\n height,\n width,\n headerHeight\n };\n const { legend } = context.config();\n const { show, position } = legend;\n\n legend.classPrefix = context.config().classPrefix;\n const align = (position === LEFT || position === RIGHT) ? VERTICAL : HORIZONTAL;\n\n legend.show = show ? ((align === VERTICAL && width > 200) || (align === HORIZONTAL && height > 200)) : show;\n legend.align = align;\n return legendInitializer(legend, context, measurement, context.legends || []);\n};\n","import { mergeRecursive } from 'muze-utils';\nimport { arrangeComponents } from './component-resolver';\nimport { createHeaders } from './title-maker';\nimport { createLegend, getLegendSpace } from './legend-maker';\nimport { TOP, BOTTOM, LEFT, RIGHT } from '../constants';\n\n/**\n *\n *\n * @param {*} context\n * @returns\n */\nexport const prepareLayout = (layout, components, config, measurement) => {\n const {\n rows,\n columns,\n values,\n cornerMatrices\n } = components;\n\n const {\n topLeft,\n topRight,\n bottomLeft,\n bottomRight\n } = cornerMatrices;\n\n layout.measurement(measurement)\n .config(config)\n .matrices({\n top: [topLeft, columns[0], topRight],\n center: [rows[0], values, rows[1]],\n bottom: [bottomLeft, columns[1], bottomRight]\n })\n .triggerReflow();\n};\n\n/**\n *\n *\n * @param {*} context\n * @param {*} mount\n * @returns\n */\nexport const getRenderDetails = (context, mount) => {\n let layoutConfig = mergeRecursive({}, context.config());\n // Get height width of the mount point\n let { height, width } = mount.getBoundingClientRect();\n const heightAttr = context.height();\n const widthAttr = context.width();\n const visGroup = context.composition().visualGroup;\n const {\n isColumnSizeEqual,\n isRowSizeEqual,\n rows,\n columns,\n values\n } = visGroup.placeholderInfo();\n const {\n minWidth,\n minHeight,\n classPrefix,\n showHeaders,\n legend\n } = context.config();\n // Get title configuration\n const titleConfig = context.title()[1];\n // Get subtitle configuration\n const subtitleConfig = context.subtitle()[1];\n // Get legend position\n const legendPosition = legend.position;\n // Arrange components according to config\n const layoutArrangement = arrangeComponents(context);\n\n height = Math.floor(height);\n width = Math.floor(width);\n\n const availableHeightForCanvas = Math.max(heightAttr > 0 ? heightAttr : height, minHeight);\n const availableWidthForCanvas = Math.max(widthAttr > 0 ? widthAttr : width, minWidth);\n\n // Create headers and determine header height\n const { headers, headerHeight } = createHeaders(context, availableHeightForCanvas, availableWidthForCanvas);\n\n // Create legends and determine legend space\n const legends = createLegend(context, headerHeight, availableHeightForCanvas, availableWidthForCanvas);\n context._composition.legend = {};\n legends.forEach((e) => {\n context._composition.legend[e.scaleType] = e.legend;\n });\n\n const legendSpace = getLegendSpace(legends, legend, availableHeightForCanvas, availableWidthForCanvas);\n const legendWidth = (legendPosition === LEFT || legendPosition === RIGHT) ? legendSpace.width : 0;\n const legendHeight = (legendPosition === TOP || legendPosition === BOTTOM) ? legendSpace.height : 0;\n\n // Set components for layouting\n const components = {\n headers,\n legends,\n canvases: [context],\n rows,\n columns,\n values,\n cornerMatrices: visGroup.cornerMatrices()\n };\n const measurement = {\n mountSpace: {\n height,\n width\n },\n headerHeight,\n legendSpace,\n canvasWidth: availableWidthForCanvas,\n canvasHeight: availableHeightForCanvas,\n width: availableWidthForCanvas - legendWidth,\n height: availableHeightForCanvas - headerHeight - legendHeight,\n minUnitHeight: context.minUnitHeight(),\n minUnitWidth: context.minUnitWidth()\n };\n layoutConfig = mergeRecursive(layoutConfig, {\n classPrefix,\n showHeaders,\n border: mergeRecursive(visGroup.metaData().border, context.config().border),\n layoutArrangement,\n legend,\n title: titleConfig,\n subtitle: subtitleConfig,\n isColumnSizeEqual,\n isRowSizeEqual\n });\n return {\n layoutConfig,\n components,\n measurement\n };\n};\n","export const TITLE_CONFIG = {\n position: 'top',\n align: 'left',\n padding: 8\n};\n\nexport const SUB_TITLE_CONFIG = {\n position: 'top',\n align: 'left',\n padding: 16\n};\n","import { mergeRecursive, selectElement } from 'muze-utils';\nimport {\n ROWS,\n COLUMNS,\n COLOR,\n SHAPE,\n SIZE,\n DETAIL,\n LAYERS,\n TRANSFORM,\n MOUNT,\n TITLE,\n SUB_TITLE\n} from '../constants';\nimport { TITLE_CONFIG, SUB_TITLE_CONFIG } from './defaults';\n/**\n * @module\n * This is the local options semantics based on which setters getters are created and reactivity is initiated.\n * This local object is only valid for Canvas.\n * Canvas merges global and local object both to the model\n *\n * Format\n * PROPERTRY_NAME: {\n * value: // default value of the property,\n * meta: {\n * typeCheck: // The setter value will be checked using this. If the value is function then the setter value\n * // is passed as args.\n * typeExpected: // The output of typecheck action will be tested against this. Truthy value will set the\n * // value to the setter\n * sanitizaiton: // Need for sanitization before type is checked\n * }\n * }\n */\n\nexport const localOptions = {\n [ROWS]: {\n value: null,\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Array'\n }\n },\n [COLUMNS]: {\n value: null,\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Array'\n }\n },\n [COLOR]: {\n value: null,\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Object',\n sanitization: (config) => {\n if (typeof config === 'string') {\n return {\n field: config\n };\n }\n return config;\n }\n }\n },\n [SHAPE]: {\n value: null,\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Object',\n sanitization: (config) => {\n if (typeof config === 'string') {\n return {\n field: config\n };\n }\n return config;\n }\n }\n },\n [SIZE]: {\n value: null,\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Object',\n sanitization: (config) => {\n if (typeof config === 'string') {\n return {\n field: config\n };\n }\n return config;\n }\n }\n },\n [DETAIL]: {\n value: [],\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Array'\n }\n },\n\n [LAYERS]: {\n value: null,\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Array'\n }\n },\n [TRANSFORM]: {\n value: null,\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Object'\n }\n },\n [MOUNT]: {\n value: null,\n meta: {\n sanitization: (value) => {\n if (typeof value === 'string') {\n return selectElement(value).node();\n }\n return value;\n }\n }\n }\n};\n\nexport const canvasOptions = {\n [TITLE]: {\n value: [null, null],\n meta: {\n typeCheck: ['constructor', 'constructor'],\n typeExpected: ['Function', 'Object'],\n spreadParams: true,\n sanitization: [(title) => {\n if (typeof title === 'string') {\n const t = () => title;\n t._sanitized = true;\n return t;\n }\n return title;\n }, (titleConfig) => {\n const defConfig = mergeRecursive({}, TITLE_CONFIG);\n return mergeRecursive(defConfig, titleConfig);\n }]\n }\n },\n [SUB_TITLE]: {\n value: [null, null],\n meta: {\n typeCheck: ['constructor', 'constructor'],\n typeExpected: ['Function', 'Object'],\n spreadParams: true,\n sanitization: [(subtitle) => {\n if (typeof subtitle === 'string') {\n const sub = () => subtitle;\n sub._sanitized = true;\n return sub;\n }\n return subtitle;\n }, (subtitleConfig) => {\n const defConfig = mergeRecursive({}, SUB_TITLE_CONFIG);\n return mergeRecursive(defConfig, subtitleConfig);\n }]\n }\n }\n};\n","import { makeElement, selectElement } from 'muze-utils';\nimport { VERTICAL, HORIZONTAL, TOP, LEFT, RIGHT, BOTTOM } from '../constants';\n\n/**\n * Sets the rotation for all x axes if any axis has the rotation config set in the\n * entire view\n *\n * @param {Array} columns Column cells that contain the axes cells\n */\nconst setLabelRotationForAxes = (context) => {\n let rotation = 0;\n\n const xAxes = context.xAxes() || [];\n\n (() => {\n for (let i = 0; i < xAxes.length; i++) {\n for (let j = 0; j < xAxes[i].length; j++) {\n if (xAxes[i][j].config().labels.rotation !== 0) {\n rotation = xAxes[i][j].config().labels.rotation;\n return;\n }\n }\n }\n })();\n\n if (rotation) {\n xAxes.forEach((axes) => {\n axes.forEach((axis) => {\n axis.config({ labels: { rotation, smartTicks: false } });\n });\n });\n }\n};\n\n/**\n *\n *\n * @param {*} context\n * @param {*} mount\n * @returns\n */\nconst getSkeletons = (mount, layoutConfig, measurement) => {\n const {\n layoutArrangement,\n classPrefix\n } = layoutConfig;\n const {\n headers,\n legends\n } = layoutArrangement;\n const {\n canvasWidth,\n canvasHeight\n } = measurement;\n const container = selectElement(mount);\n const components = {};\n const mountPoint = makeElement(container, 'div', [1], `${classPrefix}-viz`)\n .style('width', `${canvasWidth}px`)\n .style('height', `${canvasHeight}px`);\n const containers = mountPoint\n .selectAll(`.${classPrefix}-container`)\n .data(headers);\n containers.exit().remove();\n const containersEnter = containers.enter().append('div');\n\n const mergedContainer = containersEnter.merge(containers)\n .attr('class', `${classPrefix}-container`)\n .style('width', `${canvasWidth}px`)\n .style('padding', `${null}px`)\n .style('margin', null)\n .each(function (type) {\n components[type] = selectElement(this).classed(`${classPrefix}-${type}-container`, true);\n });\n const innerContainer = mergedContainer\n .selectAll(`.${classPrefix}-inner-container`)\n .data((d) => {\n if (d === 'group') {\n return legends;\n } return [];\n });\n innerContainer.exit().remove();\n const innerContainerEnter = innerContainer.enter().append('div');\n\n innerContainerEnter\n .merge(innerContainer)\n .attr('class', `${classPrefix}-inner-container`)\n .style('width', 'auto')\n .style('height', 'auto')\n .each(function (layoutType) {\n components[layoutType] = selectElement(this)\n .classed(`${classPrefix}-${layoutType}-container`, true);\n });\n return components;\n};\n\n/**\n *\n *\n * @param {*} context\n * @param {*} container\n * @param {*} legendComponents\n */\nconst renderLegend = (legendConfig, container, legendComponents, measurement) => {\n const sectionComponents = [];\n const { legendSpace, headerHeight, height, width } = measurement;\n const { legend, classPrefix } = legendConfig;\n const { position } = legend;\n const legendMount = makeElement(container, 'div', [legendComponents], `${classPrefix}-inner-content`, {}, d => d);\n legendMount.classed(`${classPrefix}-legend`, true);\n const align = (position === LEFT || position === RIGHT) ? VERTICAL : HORIZONTAL;\n const legWidth = align === VERTICAL ? legendSpace.width : width;\n const legHeight = align === VERTICAL ? height - headerHeight : legendSpace.height;\n\n [container, legendMount].forEach((elem) => {\n elem.style('width', `${Math.floor(legWidth)}px`)\n .style('height', `${legHeight}px`)\n .style('float', LEFT);\n });\n\n if (align === VERTICAL) {\n let sections = -1;\n let currHeight = legHeight;\n let currWidth = 0;\n\n legendComponents.forEach((legendInfo) => {\n const leg = legendInfo.legend;\n if (leg.measurement().height > currHeight) {\n sections++;\n currWidth = 0;\n currHeight = legHeight;\n } else {\n sections < 0 && sections++;\n }\n sectionComponents[sections] = sectionComponents[sections] || [];\n currHeight -= Math.min(leg.measurement().height, currHeight);\n currWidth = Math.max(Math.min(leg.measurement().width, leg.measurement().maxWidth), currWidth);\n sectionComponents[sections].push({\n legend: leg,\n legendHeight: legHeight,\n legendWidth: currWidth\n });\n });\n\n const mount = makeElement(legendMount, ['div'], sectionComponents, `${classPrefix}-legend-section`)\n .each((d, i) => selectElement(this).classed(`${classPrefix}-legend-section-${i}`, true))\n .classed(`${classPrefix}-legend-vertical-section`, true)\n .style('width', d => `${d[0].legendWidth}px`);\n makeElement(mount, ['div'], d => d, `${classPrefix}-legend-components`, {}, d => d.legend.id())\n .each(function (d) {\n d.legend.mount(this);\n })\n .style('width', d => `${d.legendWidth}px`);\n } else {\n const mount = makeElement(legendMount, 'div', [1], `${classPrefix}-legend-section`)\n .classed(`${classPrefix}-legend-horizontal-section`, true)\n .classed(`${classPrefix}-legend-section-${0}`, true)\n .style('width', `${legWidth}px`);\n\n makeElement(mount, 'div', legendComponents, `${classPrefix}-legend-components`, {}, d => d.legend.id())\n .each(function (d) { d.legend.mount(this); })\n .style('width', d => `${d.legend.measurement().width}px`);\n }\n};\n\n/**\n *\n *\n * @param {*} context\n * @param {*} container\n * @param {*} type\n * @param {*} headers\n */\nconst renderHeader = (layoutConfig, container, type, headers) => {\n const headerCell = headers[`${type}Cell`];\n const config = layoutConfig[`${type}`];\n const { position, align, padding } = config;\n const sel = container\n .selectAll(`.${layoutConfig.classPrefix}-inner-container`)\n .data([type]);\n sel.exit().remove();\n const selEnter = sel.enter().append('div');\n\n const cont = selEnter.merge(sel);\n cont.classed(`${layoutConfig.classPrefix}-inner-container`, true);\n\n headerCell && headerCell.render(cont.node());\n\n cont.selectAll('div').classed(`${layoutConfig.classPrefix}-inner-content`, true);\n cont.style('width', `${100}%`);\n\n if (config && headerCell) {\n cont.style('float', LEFT)\n .style('text-align', align)\n .style(`padding-${position === TOP ? BOTTOM : TOP}`, `${padding}px`);\n }\n};\n\n/**\n *\n *\n * @param {*} context\n * @param {*} shifter\n */\nconst shiftHeaders = (config, shifter, measurement, mount) => {\n const { classPrefix, title, subtitle, legend } = config;\n const { legendSpace } = measurement;\n const { position } = legend;\n\n shifter += position === LEFT ? legendSpace.width : 0;\n title && selectElement(mount).select(`.${classPrefix}-title-container`)\n .style('width', title.align === LEFT ? `calc(100% - ${shifter}px` : '100%')\n .style('margin-left', title.align === LEFT ? `${shifter}px` : 0);\n subtitle && selectElement(mount).select(`.${classPrefix}-subtitle-container`)\n .style('width', subtitle.align === LEFT ? `calc(100% - ${shifter}px` : '100%')\n .style('margin-left', subtitle.align === LEFT ? `${shifter}px` : 0);\n\n selectElement(mount).select(`.${classPrefix}-legend-horizontal-section`)\n .style('margin-left', `${shifter}px`)\n .style('width', `${legendSpace.width - shifter}px`)\n .selectAll(`.${classPrefix}-legend-body, .${classPrefix}-legend-title`)\n .style('max-width', `${legendSpace.width - shifter}px`);\n selectElement(mount).select(`.${classPrefix}-legend-vertical-section`)\n .style('margin-left', null)\n .selectAll(`.${classPrefix}-legend-body, .${classPrefix}-legend-title`)\n .style('max-width', null);\n};\n\n/**\n *\n *\n * @param {*} mountPoint\n * @param {*} measurement\n * @param {*} classPrefix\n * @returns\n */\nconst prepareGridContainer = (mountPoint, measurement, classPrefix, alias) => {\n if (!mountPoint) {\n return this;\n }\n\n const {\n height,\n width\n } = measurement;\n // Create container for the layout\n\n const sel = selectElement(mountPoint)\n .selectAll(`.${classPrefix}-inner-content`)\n .data(['layout'], d => d);\n sel.exit().remove();\n const selEnter = sel.enter().append('div');\n\n const container = selEnter.merge(sel)\n .attr('class', `${classPrefix}-inner-content`)\n .classed(`${classPrefix}-grid-layout`, true)\n .attr('id', `${classPrefix}-grid-layout-${alias}`)\n .style('height', `${height}px`)\n .style('padding', null)\n .style('width', `${Math.ceil(width)}px`);\n // Mount for matrices\n const innerSel = container.selectAll(`.${classPrefix}-layout-grid-container`)\n .data(['layout2']);\n innerSel.exit().remove();\n const innerSelEnter = innerSel.enter().append('div');\n\n const mount = innerSelEnter.merge(innerSel);\n mount.classed(`${classPrefix}-layout-grid-container`, true)\n .attr('id', `${classPrefix}-layout-grid-container-${alias}`)\n .style('height', `${height}px`)\n .style('width', `${Math.ceil(width)}px`);\n\n return {\n mount,\n container\n };\n};\n\n/**\n *\n *\n * @param {*} context\n * @param {*} components\n * @param {*} layoutConfig\n * @param {*} measurement\n */\nexport const renderComponents = (context, components, layoutConfig, measurement) => {\n const mountPoint = context.mount();\n const {\n headers,\n legends\n } = components;\n const {\n classPrefix\n } = layoutConfig;\n const {\n title,\n legend,\n subtitle,\n layout\n } = getSkeletons(mountPoint, layoutConfig, measurement);\n const {\n mount\n } = prepareGridContainer(layout.node(), measurement, classPrefix, context.alias());\n const padding = context.layout().getViewInformation().layoutDimensions.viewWidth[0];\n measurement.padding = padding;\n setLabelRotationForAxes(context);\n\n // Render layout\n context.layout().renderGrid(mount);\n context.once('layer.drawn').then(() => {\n renderHeader(layoutConfig, title, 'title', headers);\n renderHeader(layoutConfig, subtitle, 'subtitle', headers);\n renderLegend(layoutConfig, legend, legends, measurement);\n shiftHeaders(layoutConfig, padding, measurement, mountPoint);\n });\n context.composition().visualGroup.matrixInstance().value.each((el) => {\n el.valueOf().parentContainer(layout.node());\n });\n};\n","import { isEqual } from 'muze-utils';\nimport { ROWS, COLUMNS, COLOR, SHAPE, SIZE, MOUNT, DETAIL, DATA, CONFIG } from '../constants';\nimport { canvasOptions } from './local-options';\n\n/**\n * Instantiate high level components. Canvas knows what all high level component it has.\n * @nice-to-have dynamic high level components.\n * - Is it even required ?\n * - Reactive to source (canvas) streaming ?\n * @param {*} context Canvas instance\n * @return {Object.fArray>} Arrays of Title, visualGroup, Legend\n */\nexport const initCanvas = (context) => {\n const reg = context._registry.components;\n\n return [new reg.VisualGroup(context._registry, context.dependencies())];\n};\n\n/**\n *\n *\n * @memberof Canvas\n */\nexport const dispatchProps = (context) => {\n const lifeCycleManager = context.dependencies().lifeCycleManager;\n lifeCycleManager.notify({ client: context, action: 'beforeupdate' });\n const visualGroup = context.composition().visualGroup;\n\n visualGroup.lockModel();\n const allOptions = context._allOptions;\n for (const key in allOptions) {\n const value = context[key]();\n if (value !== null) {\n visualGroup[key] && visualGroup[key](value);\n }\n }\n visualGroup.unlockModel();\n\n context._cachedProps = {};\n lifeCycleManager.notify({ client: context, action: 'initialized' });\n lifeCycleManager.notify({ client: context, action: 'updated' });\n};\n\n/**\n *\n *\n */\nexport const setupChangeListener = (context) => {\n const store = context._store;\n\n store.registerImmediateListener(MOUNT, () => {\n const allOptions = Object.keys(context._allOptions);\n const props = [...allOptions, ...Object.keys(canvasOptions)];\n let equalityChecker = () => false;\n store.registerChangeListener(props, (...params) => {\n const updateProps = props.every((option, i) => {\n switch (option) {\n case ROWS:\n case COLUMNS:\n case DETAIL:\n equalityChecker = isEqual('Array');\n break;\n\n case SHAPE:\n case SIZE:\n case COLOR:\n case DATA:\n case CONFIG:\n equalityChecker = isEqual('Object');\n break;\n default:\n equalityChecker = () => true;\n break;\n }\n const oldVal = params[i][0];\n const newVal = params[i][1];\n\n return equalityChecker(oldVal, newVal);\n });\n // inform attached board to rerender\n !updateProps && dispatchProps(context);\n context.render();\n }, true);\n });\n};\n\nexport const applyInteractionPolicy = (policies, firebolt) => {\n const canvas = firebolt.context;\n const visualGroup = canvas.composition().visualGroup;\n const valueMatrix = visualGroup.composition().matrices.value;\n policies.forEach(policy => policy(valueMatrix, firebolt));\n};\n","import {\n getDataModelFromIdentifiers,\n FieldType,\n mergeRecursive\n} from 'muze-utils';\n\nimport { applyInteractionPolicy } from './helper';\n\nconst defaultInteractionPolicy = (valueMatrix, firebolt) => {\n const isMeasure = field => field.type() === FieldType.MEASURE;\n const canvas = firebolt.context;\n const visualGroup = canvas.composition().visualGroup;\n const xFields = [].concat(...visualGroup.getFieldsFromChannel('x'));\n const yFields = [].concat(...visualGroup.getFieldsFromChannel('y'));\n const colDim = xFields.every(field => field.type() === FieldType.DIMENSION);\n const fieldInf = visualGroup.resolver().getAllFields();\n const rowFacets = fieldInf.rowFacets;\n const colFacets = fieldInf.colFacets;\n valueMatrix.each((cell) => {\n const unitFireBolt = cell.valueOf().firebolt();\n\n if (!(xFields.every(isMeasure) && yFields.every(isMeasure))) {\n const facetFields = cell.valueOf().facetByFields()[0];\n const unitColFacets = facetFields.filter(d => colFacets.findIndex(v => v.equals(d)) !== -1);\n const unitRowFacets = facetFields.filter(d => rowFacets.findIndex(v => v.equals(d)) !== -1);\n let propFields;\n if (colDim) {\n propFields = unitColFacets.map(d => `${d}`);\n } else {\n propFields = unitRowFacets.map(d => `${d}`);\n }\n\n unitFireBolt.propagateWith('*', propFields, true);\n }\n });\n};\n\nconst defaultCrossInteractionPolicy = {\n behaviours: {\n '*': (propagationPayload, context) => {\n const propagationCanvasAlias = propagationPayload.sourceCanvas;\n const canvasAlias = context.parentAlias();\n return propagationCanvasAlias ? canvasAlias === propagationCanvasAlias : true;\n }\n },\n sideEffects: {\n tooltip: (propagationPayload, context) => {\n const propagationUnit = propagationPayload.sourceUnit;\n const propagationCanvas = propagationPayload.sourceCanvas;\n const unitId = context.id();\n const canvasAlias = context.parentAlias();\n if (propagationCanvas) {\n return propagationCanvas !== canvasAlias ? true : unitId === propagationUnit;\n }\n return true;\n }\n }\n};\n\nexport default class GroupFireBolt {\n constructor (context) {\n this.context = context;\n this._interactionPolicy = this.constructor.defaultInteractionPolicy();\n this._crossInteractionPolicy = this.constructor.defaultCrossInteractionPolicy();\n this.context.once('canvas.updated').then(() => {\n applyInteractionPolicy([this._interactionPolicy], this);\n const crossInteractionPolicy = this._crossInteractionPolicy;\n const behaviours = crossInteractionPolicy.behaviours;\n const sideEffects = crossInteractionPolicy.sideEffects;\n const visualGroup = context.composition().visualGroup;\n const valueMatrix = visualGroup.composition().matrices.value;\n valueMatrix.each((cell) => {\n const unitFireBolt = cell.valueOf().firebolt();\n for (const key in behaviours) {\n unitFireBolt.changeBehaviourStateOnPropagation(key, behaviours[key]);\n }\n for (const key in sideEffects) {\n unitFireBolt.changeSideEffectStateOnPropagation(key, sideEffects[key]);\n }\n });\n });\n }\n\n static defaultInteractionPolicy () {\n return defaultInteractionPolicy;\n }\n\n static defaultCrossInteractionPolicy () {\n return defaultCrossInteractionPolicy;\n }\n\n interactionPolicy (...policy) {\n if (policy.length) {\n this._interactionPolicy = policy[0] || this.constructor.defaultInteractionPolicy();\n return this;\n }\n return this._interactionPolicy;\n }\n\n crossInteractionPolicy (...policy) {\n if (policy.length) {\n this._crossInteractionPolicy = mergeRecursive(mergeRecursive({},\n this.constructor.defaultCrossInteractionPolicy()), policy[0] || {});\n return this;\n }\n return this._crossInteractionPolicy;\n }\n\n dispatchBehaviour (behaviour, payload) {\n const propPayload = Object.assign(payload);\n const criteria = propPayload.criteria;\n const data = this.context.data();\n\n propPayload.action = behaviour;\n const model = getDataModelFromIdentifiers(data, criteria);\n data.propagate(model, propPayload, {\n sourceId: this.context.alias()\n });\n return this;\n }\n\n}\n","import { GridLayout } from '@chartshq/layout';\nimport { transactor, Store, getUniqueId } from 'muze-utils';\nimport { RETINAL } from '../constants';\nimport TransactionSupport from '../transaction-support';\nimport { getRenderDetails, prepareLayout } from './layout-maker';\nimport { localOptions, canvasOptions } from './local-options';\nimport { renderComponents } from './renderer';\nimport GroupFireBolt from './firebolt';\nimport options from '../options';\nimport { initCanvas, setupChangeListener } from './helper';\n\n/**\n * This is the primary class which manages highlevel components like visualGroup, Titles, Legend, Extensions\n * (in future). Global level Muze functionality is subset this. Every time user works with an instance of\n * canvas in dom which provides instance level settings.\n *\n */\nexport default class Canvas extends TransactionSupport {\n\n /**\n * Creates reactive property accessors.\n * - data\n * - height\n * - width\n * - config\n * This configs are retrieved from options.\n */\n constructor (globalDependencies) {\n super();\n\n this._allOptions = Object.assign({}, options, localOptions);\n this._registry = {};\n this._composition = {};\n this._cachedProps = {};\n this._alias = null;\n this._renderedResolve = null;\n this._renderedPromise = new Promise((resolve) => {\n this._renderedResolve = resolve;\n });\n this._composition.layout = new GridLayout();\n this._store = new Store({});\n\n // Setters and getters will be mounted on this. The object will be mutated.\n const [, store] = transactor(this, options, this._store.model);\n transactor(this, localOptions, store);\n transactor(this, canvasOptions, store);\n this.dependencies(Object.assign({}, globalDependencies, this._dependencies));\n this.firebolt(new GroupFireBolt(this));\n this.alias(`canvas-${getUniqueId()}`);\n this.title('', {});\n this.subtitle('', {});\n this.legend({});\n this.color({});\n this.shape({});\n this.size({});\n setupChangeListener(this);\n }\n\n /**\n *\n *\n * @readonly\n * @memberof Canvas\n */\n layout (...params) {\n if (params.length) {\n return this;\n }\n return this.composition().layout;\n }\n\n /**\n *\n *\n * @readonly\n * @memberof Canvas\n */\n composition (...params) {\n if (params.length) {\n return this;\n }\n return this._composition;\n }\n\n done () {\n return this._renderedPromise;\n }\n\n /**\n *\n *\n * @param {*} params\n * @returns\n * @memberof Canvas\n */\n alias (...params) {\n if (params.length) {\n const visualGroup = this.composition().visualGroup;\n this._alias = params[0];\n visualGroup && visualGroup.alias(this.alias());\n return this;\n }\n return this._alias;\n }\n\n /**\n * Creates an instance initiated with given settings.\n *\n * @param {Object} initialSettings Initial settings to be populated in the model\n * @param {Object} regEntry newly created instance with the initial settings\n * @param {Object} globalDependencies dependencies which will be created only once in the page\n *\n * @return {Object} newly created instance with the initial settings\n */\n static withSettings (initialSettings, regEntry, globalDependencies) {\n const instance = new Canvas(globalDependencies);\n\n for (const key in initialSettings) {\n instance[key](initialSettings[key]);\n }\n // set registry for instance\n instance.registry(regEntry);\n return instance;\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof Canvas\n */\n static formalName () {\n return 'canvas';\n }\n\n /**\n *\n *\n * @readonly\n * @memberof Canvas\n */\n firebolt (...firebolt) {\n if (firebolt.length) {\n this._firebolt = firebolt[0];\n return this;\n }\n return this._firebolt;\n }\n\n /**\n * Registry peoperty accessor\n *\n * @param {Object} reg plain old javascript object keyvalue pairs. Key containing module name and value contains\n * module definition class. The reg object has to be flat object of level 1.\n */\n registry (...params) {\n if (params.length) {\n const components = Object.assign({}, params[0].components);\n const componentSubRegistry = Object.assign({}, params[0].componentSubRegistry);\n\n this._registry = { components, componentSubRegistry };\n const initedComponents = initCanvas(this);\n // @todo is it okay to continue this tight behaviour? If not use a resolver to resolve diff component type.\n this._composition.visualGroup = initedComponents[0];\n\n this.composition().visualGroup.alias(this.alias());\n return this;\n }\n return this._registry;\n }\n\n /*\n * Prepare dependencies for top level elements\n */\n dependencies (...param) {\n if (param.length) {\n this._dependencies = param[0];\n return this;\n }\n // @todo prepare dependencies here.\n return this._dependencies;\n }\n\n /**\n *\n *\n * @param {*} lifeCycles\n * @returns\n * @memberof Canvas\n */\n lifeCycle (lifeCycles) {\n const lifeCycleManager = this.dependencies().lifeCycleManager;\n if (lifeCycles) {\n lifeCycleManager.register(lifeCycles);\n return this;\n }\n return lifeCycleManager;\n }\n\n /**\n *\n *\n * @readonly\n * @memberof Canvas\n */\n legend (...params) {\n if (params.length) {\n return this;\n }\n return this.composition().legend;\n }\n\n /**\n *\n *\n * @param {*} eventName\n * @returns\n * @memberof Canvas\n */\n once (eventName) {\n const lifeCycleManager = this.dependencies().lifeCycleManager;\n return lifeCycleManager.retrieve(eventName);\n }\n\n /**\n * Internal function to trigger render, this method is cognizant of all the properties of the core modules and\n * establish a passive reactivity. Passive reactivity is not always a bad thing :)\n * @internal\n */\n render () {\n const mount = this.mount();\n const visGroup = this.composition().visualGroup;\n const lifeCycleManager = this.dependencies().lifeCycleManager;\n // Get render details including arrangement and measurement\n const { components, layoutConfig, measurement } = getRenderDetails(this, mount);\n\n lifeCycleManager.notify({ client: this, action: 'beforedraw' });\n // Prepare the layout by triggering the matrix calculation\n prepareLayout(this.layout(), components, layoutConfig, measurement);\n // Render each component\n renderComponents(this, components, layoutConfig, measurement);\n // Update life cycle\n lifeCycleManager.notify({ client: this, action: 'drawn' });\n const promises = [];\n visGroup.matrixInstance().value.each((el) => {\n promises.push(el.valueOf().done());\n });\n Promise.all(promises).then(() => {\n this._renderedResolve();\n });\n }\n\n /**\n *\n *\n * @returns\n * @memberof Canvas\n */\n xAxes () {\n return this.composition().visualGroup.getAxes('x');\n }\n\n /**\n *\n *\n * @returns\n * @memberof Canvas\n */\n yAxes () {\n return this.composition().visualGroup.getAxes('y');\n }\n\n /**\n *\n *\n * @returns\n * @memberof Canvas\n */\n getRetinalAxes () {\n const visualGroup = this.composition().visualGroup;\n return visualGroup.getAxes(RETINAL);\n }\n}\n","import { cellRegistry, SimpleCell } from '@chartshq/visual-cell';\nimport { VisualUnit } from '@chartshq/visual-unit';\nimport { layerRegistry } from '@chartshq/visual-layer';\nimport { SimpleGroup, VisualGroup } from '@chartshq/visual-group';\n\nexport const COMPONENTS = {\n VisualGroup,\n VisualUnit\n};\nexport const SUBREGISTRIES = {\n cellRegistry,\n layerRegistry\n};\nexport const INTERFACES = {\n SimpleGroup,\n SimpleCell\n};\n\n","import { DEFAULT_LAYERS } from './defaults';\n\nexport default () => {\n const reg = DEFAULT_LAYERS;\n const regObj = {\n set: (key, def) => {\n reg[key] = def;\n return regObj;\n },\n get: () => reg\n };\n return regObj;\n};\n","import {\n transactor,\n Smartlabel,\n enableChainedTransaction,\n LifeCycleManager,\n DataModel,\n makeElement,\n getClientPoint,\n selectElement,\n getEvent,\n require,\n DateTimeFormatter\n} from 'muze-utils';\n\nimport {\n SurrogateSideEffect,\n SpawnableSideEffect,\n sideEffects,\n PersistentBehaviour,\n GenericBehaviour,\n VolatileBehaviour,\n behaviouralActions,\n GenericSideEffect\n} from '@chartshq/muze-firebolt';\nimport { layerFactory } from '@chartshq/visual-layer';\nimport pkg from '../package.json';\nimport * as operators from './operators';\nimport { actionModel as ActionModel } from './action-model';\nimport options from './options';\nimport { Canvas } from './canvas';\nimport { COMPONENTS, SUBREGISTRIES } from './default-registry';\nimport './muze.scss';\n\n// Cache singleton instances which should be included only once in a page\nconst globalCache = {};\nconst defaultRegistry = COMPONENTS;\n\nconst overrideRegistryDefinitions = (overrideRegistry, registry) => {\n for (const prop in overrideRegistry) {\n registry.set(prop, overrideRegistry[prop]);\n }\n};\n\n/**\n * Entry point to renderer. Initializes an environment with settings and registries for canvas. This is a simple wrapper\n * over {@link Canvas} which enables common configuration passing to multiple such canvases.\n *\n * Everytime `muze()` is called it creates an environment. These environment supports subset of APIs of Canvas. If\n * common configuration is used to render multiple canvases then it can be set directly in the env. Like if data is\n * common across all the visulization then its better to set the data in env. When a canvas is created it receives all\n * those configuration from env.\n *\n * ```\n * // Creates an environment\n * const env = muze()\n * // Set data property in environment, so that all the canvas created from the same environment gets this data\n * // automatically\n * env.data(dm);\n * // Creates canvas, by default env pushes data to canvas instance\n * const canvas = env.canvas();\n * ```\n *\n * If a property is set on both environment and canvas instance, property set on canvas instance gets more priority.\n *\n * @public\n * @module muze\n * @namespace Muze\n *\n * @return {Env} Instance of an environment\n */\nconst muze = () => {\n // Setters and getters will be mounted on this. Object will be mutated.\n const [env, globalStore] = transactor({}, options);\n const components = Object.assign({}, COMPONENTS);\n const componentSubRegistryDef = Object.assign(SUBREGISTRIES);\n const componentSubRegistry = {};\n\n for (const prop in componentSubRegistryDef) {\n componentSubRegistry[prop] = componentSubRegistryDef[prop]();\n }\n\n // Apart form the setter getter, an instance method is injected to create real renderer instances\n env.canvas = () => {\n // Create a canvas instance with this settings\n const settings = globalStore.serialize();\n const canvas = Canvas.withSettings(settings, { /* registry */\n components,\n componentSubRegistry\n }, env.globalDependencies());\n\n // Whenever settings is changed canvas is updated\n enableChainedTransaction(globalStore, canvas, Object.keys(settings));\n\n return canvas;\n };\n\n // Global dependencies for for compositions. Only one copy of the same should be in the page\n env.globalDependencies = () => {\n if (!globalCache.smartlabel) {\n globalCache.smartlabel = new Smartlabel(1, 'body');\n }\n return {\n smartlabel: globalCache.smartlabel,\n lifeCycleManager: new LifeCycleManager()\n };\n };\n\n // Retrieves global settings. This getter is readonly so that user can't change this as change should happen\n // only from setter to avoid unwanted sync issues.\n env.settings = () => globalStore.serialize();\n\n env.registry = (...overrideRegistry) => {\n // Selectively copy the properties from COMPONENTS\n if (overrideRegistry.length) {\n for (const prop in overrideRegistry) {\n if (prop in defaultRegistry) {\n components[prop] = overrideRegistry[prop];\n }\n }\n return env;\n }\n return components;\n };\n\n env.cellRegistry = (...overrideRegistry) => {\n const cellRegistry = componentSubRegistry.cellRegistry;\n if (overrideRegistry.length) {\n overrideRegistryDefinitions(overrideRegistry[0], cellRegistry);\n return env;\n }\n return cellRegistry.get();\n };\n\n env.layerRegistry = (...overrideRegistry) => {\n const layerRegistry = componentSubRegistry.layerRegistry;\n if (overrideRegistry.length) {\n overrideRegistryDefinitions(overrideRegistry[0], layerRegistry);\n return env;\n }\n return layerRegistry.get();\n };\n\n return env;\n};\n\nconst SideEffects = {\n sideEffects,\n standards: {\n SurrogateSideEffect,\n SpawnableSideEffect,\n GenericSideEffect\n }\n};\n\nconst Behaviours = {\n behaviouralActions,\n standards: {\n GenericBehaviour,\n PersistentBehaviour,\n VolatileBehaviour\n }\n};\n\nmuze.DataModel = DataModel;\nmuze.version = pkg.version;\nmuze.SideEffects = SideEffects;\nmuze.ActionModel = ActionModel;\nmuze.layerFactory = layerFactory;\nmuze.Operators = operators;\nmuze.Behaviours = Behaviours;\nmuze.utils = {\n getClientPoint,\n getEvent,\n makeElement,\n selectElement,\n DateTimeFormatter,\n require\n};\n\nexport default muze;\n"],"sourceRoot":""} \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 983adbb6..9c2ac418 100644 --- a/package-lock.json +++ b/package-lock.json @@ -918,179 +918,174 @@ "dev": true }, "@webassemblyjs/ast": { - "version": "1.7.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.7.6.tgz", - "integrity": "sha512-8nkZS48EVsMUU0v6F1LCIOw4RYWLm2plMtbhFTjNgeXmsTNLuU3xTRtnljt9BFQB+iPbLRobkNrCWftWnNC7wQ==", + "version": "1.7.8", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.7.8.tgz", + "integrity": "sha512-dOrtdtEyB8sInpl75yLPNksY4sRl0j/+t6aHyB/YA+ab9hV3Fo7FmG12FHzP+2MvWVAJtDb+6eXR5EZbZJ+uVg==", "dev": true, "requires": { - "@webassemblyjs/helper-module-context": "1.7.6", - "@webassemblyjs/helper-wasm-bytecode": "1.7.6", - "@webassemblyjs/wast-parser": "1.7.6", - "mamacro": "^0.0.3" + "@webassemblyjs/helper-module-context": "1.7.8", + "@webassemblyjs/helper-wasm-bytecode": "1.7.8", + "@webassemblyjs/wast-parser": "1.7.8" } }, "@webassemblyjs/floating-point-hex-parser": { - "version": "1.7.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.7.6.tgz", - "integrity": "sha512-VBOZvaOyBSkPZdIt5VBMg3vPWxouuM13dPXGWI1cBh3oFLNcFJ8s9YA7S9l4mPI7+Q950QqOmqj06oa83hNWBA==", + "version": "1.7.8", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.7.8.tgz", + "integrity": "sha512-kn2zNKGsbql5i56VAgRYkpG+VazqHhQQZQycT2uXAazrAEDs23gy+Odkh5VblybjnwX2/BITkDtNmSO76hdIvQ==", "dev": true }, "@webassemblyjs/helper-api-error": { - "version": "1.7.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.7.6.tgz", - "integrity": "sha512-SCzhcQWHXfrfMSKcj8zHg1/kL9kb3aa5TN4plc/EREOs5Xop0ci5bdVBApbk2yfVi8aL+Ly4Qpp3/TRAUInjrg==", + "version": "1.7.8", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.7.8.tgz", + "integrity": "sha512-xUwxDXsd1dUKArJEP5wWM5zxgCSwZApSOJyP1XO7M8rNUChUDblcLQ4FpzTpWG2YeylMwMl1MlP5Ztryiz1x4g==", "dev": true }, "@webassemblyjs/helper-buffer": { - "version": "1.7.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.7.6.tgz", - "integrity": "sha512-1/gW5NaGsEOZ02fjnFiU8/OEEXU1uVbv2um0pQ9YVL3IHSkyk6xOwokzyqqO1qDZQUAllb+V8irtClPWntbVqw==", + "version": "1.7.8", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.7.8.tgz", + "integrity": "sha512-WXiIMnuvuwlhWvVOm8xEXU9DnHaa3AgAU0ZPfvY8vO1cSsmYb2WbGbHnMLgs43vXnA7XAob9b56zuZaMkxpCBg==", "dev": true }, "@webassemblyjs/helper-code-frame": { - "version": "1.7.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.7.6.tgz", - "integrity": "sha512-+suMJOkSn9+vEvDvgyWyrJo5vJsWSDXZmJAjtoUq4zS4eqHyXImpktvHOZwXp1XQjO5H+YQwsBgqTQEc0J/5zg==", + "version": "1.7.8", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.7.8.tgz", + "integrity": "sha512-TLQxyD9qGOIdX5LPQOPo0Ernd88U5rHkFb8WAjeMIeA0sPjCHeVPaGqUGGIXjUcblUkjuDAc07bruCcNHUrHDA==", "dev": true, "requires": { - "@webassemblyjs/wast-printer": "1.7.6" + "@webassemblyjs/wast-printer": "1.7.8" } }, "@webassemblyjs/helper-fsm": { - "version": "1.7.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.7.6.tgz", - "integrity": "sha512-HCS6KN3wgxUihGBW7WFzEC/o8Eyvk0d56uazusnxXthDPnkWiMv+kGi9xXswL2cvfYfeK5yiM17z2K5BVlwypw==", + "version": "1.7.8", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.7.8.tgz", + "integrity": "sha512-TjK0CnD8hAPkV5mbSp5aWl6SO1+H3WFcjWtixWoy8EMA99YnNzYhpc/WSYWhf7yrhpzkq5tZB0tvLK3Svr3IXA==", "dev": true }, "@webassemblyjs/helper-module-context": { - "version": "1.7.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.7.6.tgz", - "integrity": "sha512-e8/6GbY7OjLM+6OsN7f2krC2qYVNaSr0B0oe4lWdmq5sL++8dYDD1TFbD1TdAdWMRTYNr/Qq7ovXWzia2EbSjw==", - "dev": true, - "requires": { - "mamacro": "^0.0.3" - } + "version": "1.7.8", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.7.8.tgz", + "integrity": "sha512-uCutAKR7Nm0VsFixcvnB4HhAyHouNbj0Dx1p7eRjFjXGGZ+N7ftTaG1ZbWCasAEbtwGj54LP8+lkBZdTCPmLGg==", + "dev": true }, "@webassemblyjs/helper-wasm-bytecode": { - "version": "1.7.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.7.6.tgz", - "integrity": "sha512-PzYFCb7RjjSdAOljyvLWVqd6adAOabJW+8yRT+NWhXuf1nNZWH+igFZCUK9k7Cx7CsBbzIfXjJc7u56zZgFj9Q==", + "version": "1.7.8", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.7.8.tgz", + "integrity": "sha512-AdCCE3BMW6V34WYaKUmPgVHa88t2Z14P4/0LjLwuGkI0X6pf7nzp0CehzVVk51cKm2ymVXjl9dCG+gR1yhITIQ==", "dev": true }, "@webassemblyjs/helper-wasm-section": { - "version": "1.7.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.7.6.tgz", - "integrity": "sha512-3GS628ppDPSuwcYlQ7cDCGr4W2n9c4hLzvnRKeuz+lGsJSmc/ADVoYpm1ts2vlB1tGHkjtQMni+yu8mHoMlKlA==", + "version": "1.7.8", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.7.8.tgz", + "integrity": "sha512-BkBhYQuzyl4hgTGOKo87Vdw6f9nj8HhI7WYpI0MCC5qFa5ahrAPOGgyETVdnRbv+Rjukl9MxxfDmVcVC435lDg==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.7.6", - "@webassemblyjs/helper-buffer": "1.7.6", - "@webassemblyjs/helper-wasm-bytecode": "1.7.6", - "@webassemblyjs/wasm-gen": "1.7.6" + "@webassemblyjs/ast": "1.7.8", + "@webassemblyjs/helper-buffer": "1.7.8", + "@webassemblyjs/helper-wasm-bytecode": "1.7.8", + "@webassemblyjs/wasm-gen": "1.7.8" } }, "@webassemblyjs/ieee754": { - "version": "1.7.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.7.6.tgz", - "integrity": "sha512-V4cIp0ruyw+hawUHwQLn6o2mFEw4t50tk530oKsYXQhEzKR+xNGDxs/SFFuyTO7X3NzEu4usA3w5jzhl2RYyzQ==", + "version": "1.7.8", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.7.8.tgz", + "integrity": "sha512-tOarWChdG1a3y1yqCX0JMDKzrat5tQe4pV6K/TX19BcXsBLYxFQOL1DEDa5KG9syeyvCrvZ+i1+Mv1ExngvktQ==", "dev": true, "requires": { "@xtuc/ieee754": "^1.2.0" } }, "@webassemblyjs/leb128": { - "version": "1.7.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.7.6.tgz", - "integrity": "sha512-ojdlG8WpM394lBow4ncTGJoIVZ4aAtNOWHhfAM7m7zprmkVcKK+2kK5YJ9Bmj6/ketTtOn7wGSHCtMt+LzqgYQ==", + "version": "1.7.8", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.7.8.tgz", + "integrity": "sha512-GCYeGPgUFWJiZuP4NICbcyUQNxNLJIf476Ei+K+jVuuebtLpfvwkvYT6iTUE7oZYehhkor4Zz2g7SJ/iZaPudQ==", "dev": true, "requires": { "@xtuc/long": "4.2.1" } }, "@webassemblyjs/utf8": { - "version": "1.7.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.7.6.tgz", - "integrity": "sha512-oId+tLxQ+AeDC34ELRYNSqJRaScB0TClUU6KQfpB8rNT6oelYlz8axsPhf6yPTg7PBJ/Z5WcXmUYiHEWgbbHJw==", + "version": "1.7.8", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.7.8.tgz", + "integrity": "sha512-9X+f0VV+xNXW2ujfIRSXBJENGE6Qh7bNVKqu3yDjTFB3ar3nsThsGBBKdTG58aXOm2iUH6v28VIf88ymPXODHA==", "dev": true }, "@webassemblyjs/wasm-edit": { - "version": "1.7.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.7.6.tgz", - "integrity": "sha512-pTNjLO3o41v/Vz9VFLl+I3YLImpCSpodFW77pNoH4agn5I6GgSxXHXtvWDTvYJFty0jSeXZWLEmbaSIRUDlekg==", + "version": "1.7.8", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.7.8.tgz", + "integrity": "sha512-6D3Hm2gFixrfyx9XjSON4ml1FZTugqpkIz5Awvrou8fnpyprVzcm4X8pyGRtA2Piixjl3DqmX/HB1xdWyE097A==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.7.6", - "@webassemblyjs/helper-buffer": "1.7.6", - "@webassemblyjs/helper-wasm-bytecode": "1.7.6", - "@webassemblyjs/helper-wasm-section": "1.7.6", - "@webassemblyjs/wasm-gen": "1.7.6", - "@webassemblyjs/wasm-opt": "1.7.6", - "@webassemblyjs/wasm-parser": "1.7.6", - "@webassemblyjs/wast-printer": "1.7.6" + "@webassemblyjs/ast": "1.7.8", + "@webassemblyjs/helper-buffer": "1.7.8", + "@webassemblyjs/helper-wasm-bytecode": "1.7.8", + "@webassemblyjs/helper-wasm-section": "1.7.8", + "@webassemblyjs/wasm-gen": "1.7.8", + "@webassemblyjs/wasm-opt": "1.7.8", + "@webassemblyjs/wasm-parser": "1.7.8", + "@webassemblyjs/wast-printer": "1.7.8" } }, "@webassemblyjs/wasm-gen": { - "version": "1.7.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.7.6.tgz", - "integrity": "sha512-mQvFJVumtmRKEUXMohwn8nSrtjJJl6oXwF3FotC5t6e2hlKMh8sIaW03Sck2MDzw9xPogZD7tdP5kjPlbH9EcQ==", + "version": "1.7.8", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.7.8.tgz", + "integrity": "sha512-a7O/wE6eBeVKKUYgpMK7NOHmMADD85rSXLe3CqrWRDwWff5y3cSVbzpN6Qv3z6C4hdkpq9qyij1Ga1kemOZGvQ==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.7.6", - "@webassemblyjs/helper-wasm-bytecode": "1.7.6", - "@webassemblyjs/ieee754": "1.7.6", - "@webassemblyjs/leb128": "1.7.6", - "@webassemblyjs/utf8": "1.7.6" + "@webassemblyjs/ast": "1.7.8", + "@webassemblyjs/helper-wasm-bytecode": "1.7.8", + "@webassemblyjs/ieee754": "1.7.8", + "@webassemblyjs/leb128": "1.7.8", + "@webassemblyjs/utf8": "1.7.8" } }, "@webassemblyjs/wasm-opt": { - "version": "1.7.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.7.6.tgz", - "integrity": "sha512-go44K90fSIsDwRgtHhX14VtbdDPdK2sZQtZqUcMRvTojdozj5tLI0VVJAzLCfz51NOkFXezPeVTAYFqrZ6rI8Q==", + "version": "1.7.8", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.7.8.tgz", + "integrity": "sha512-3lbQ0PT81NHCdi1sR/7+SNpZadM4qYcTSr62nFFAA7e5lFwJr14M1Gi+A/Y3PgcDWOHYjsaNGPpPU0H03N6Blg==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.7.6", - "@webassemblyjs/helper-buffer": "1.7.6", - "@webassemblyjs/wasm-gen": "1.7.6", - "@webassemblyjs/wasm-parser": "1.7.6" + "@webassemblyjs/ast": "1.7.8", + "@webassemblyjs/helper-buffer": "1.7.8", + "@webassemblyjs/wasm-gen": "1.7.8", + "@webassemblyjs/wasm-parser": "1.7.8" } }, "@webassemblyjs/wasm-parser": { - "version": "1.7.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.7.6.tgz", - "integrity": "sha512-t1T6TfwNY85pDA/HWPA8kB9xA4sp9ajlRg5W7EKikqrynTyFo+/qDzIpvdkOkOGjlS6d4n4SX59SPuIayR22Yg==", + "version": "1.7.8", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.7.8.tgz", + "integrity": "sha512-rZ/zlhp9DHR/05zh1MbAjT2t624sjrPP/OkJCjXqzm7ynH+nIdNcn9Ixc+qzPMFXhIrk0rBoQ3to6sEIvHh9jQ==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.7.6", - "@webassemblyjs/helper-api-error": "1.7.6", - "@webassemblyjs/helper-wasm-bytecode": "1.7.6", - "@webassemblyjs/ieee754": "1.7.6", - "@webassemblyjs/leb128": "1.7.6", - "@webassemblyjs/utf8": "1.7.6" + "@webassemblyjs/ast": "1.7.8", + "@webassemblyjs/helper-api-error": "1.7.8", + "@webassemblyjs/helper-wasm-bytecode": "1.7.8", + "@webassemblyjs/ieee754": "1.7.8", + "@webassemblyjs/leb128": "1.7.8", + "@webassemblyjs/utf8": "1.7.8" } }, "@webassemblyjs/wast-parser": { - "version": "1.7.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.7.6.tgz", - "integrity": "sha512-1MaWTErN0ziOsNUlLdvwS+NS1QWuI/kgJaAGAMHX8+fMJFgOJDmN/xsG4h/A1Gtf/tz5VyXQciaqHZqp2q0vfg==", + "version": "1.7.8", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.7.8.tgz", + "integrity": "sha512-Q/zrvtUvzWuSiJMcSp90fi6gp2nraiHXjTV2VgAluVdVapM4gy1MQn7akja2p6eSBDQpKJPJ6P4TxRkghRS5dg==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.7.6", - "@webassemblyjs/floating-point-hex-parser": "1.7.6", - "@webassemblyjs/helper-api-error": "1.7.6", - "@webassemblyjs/helper-code-frame": "1.7.6", - "@webassemblyjs/helper-fsm": "1.7.6", - "@xtuc/long": "4.2.1", - "mamacro": "^0.0.3" + "@webassemblyjs/ast": "1.7.8", + "@webassemblyjs/floating-point-hex-parser": "1.7.8", + "@webassemblyjs/helper-api-error": "1.7.8", + "@webassemblyjs/helper-code-frame": "1.7.8", + "@webassemblyjs/helper-fsm": "1.7.8", + "@xtuc/long": "4.2.1" } }, "@webassemblyjs/wast-printer": { - "version": "1.7.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.7.6.tgz", - "integrity": "sha512-vHdHSK1tOetvDcl1IV1OdDeGNe/NDDQ+KzuZHMtqTVP1xO/tZ/IKNpj5BaGk1OYFdsDWQqb31PIwdEyPntOWRQ==", + "version": "1.7.8", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.7.8.tgz", + "integrity": "sha512-GllIthRtwTxRDAURRNXscu7Napzmdf1jt1gpiZiK/QN4fH0lSGs3OTmvdfsMNP7tqI4B3ZtfaaWRlNIQug6Xyg==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.7.6", - "@webassemblyjs/wast-parser": "1.7.6", + "@webassemblyjs/ast": "1.7.8", + "@webassemblyjs/wast-parser": "1.7.8", "@xtuc/long": "4.2.1" } }, @@ -1149,7 +1144,7 @@ }, "acorn-jsx": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz", + "resolved": "http://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz", "integrity": "sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=", "dev": true, "requires": { @@ -1223,9 +1218,9 @@ "dev": true }, "ansi-colors": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.0.5.tgz", - "integrity": "sha512-VVjWpkfaphxUBFarydrQ3n26zX5nIK7hcbT3/ielrvwDDyBBjuh2vuSw1P9zkPq0cfqvdw7lkYHnu+OLSfIBsg==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.1.0.tgz", + "integrity": "sha512-hTv1qPdi+sVEk3jYsdjox5nQI0C9HTbjKShbCdYLKb1LOfNbb7wsF4d7OEKIZoxIHx02tSp3m94jcPW2EfMjmA==", "dev": true }, "ansi-escapes": { @@ -1659,7 +1654,7 @@ }, "babel-eslint": { "version": "6.1.2", - "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-6.1.2.tgz", + "resolved": "http://registry.npmjs.org/babel-eslint/-/babel-eslint-6.1.2.tgz", "integrity": "sha1-UpNBn+NnLWZZjTJ9qWlFZ7pqXy8=", "dev": true, "requires": { @@ -2500,9 +2495,9 @@ "dev": true }, "binary-extensions": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.11.0.tgz", - "integrity": "sha1-RqoXUftqL5PuXmibsQh9SxTGwgU=", + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.12.0.tgz", + "integrity": "sha512-DYWGk01lDcxeS/K9IHPGWfT8PsJmbXRtRd2Sx72Tnb8pcYZQFF1oSDb8hJtS1vhp212q1Rzi5dUf9+nq0o9UIg==", "dev": true }, "blob": { @@ -2683,14 +2678,14 @@ } }, "browserslist": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.1.1.tgz", - "integrity": "sha512-VBorw+tgpOtZ1BYhrVSVTzTt/3+vSE3eFUh0N2GCFK1HffceOaf32YS/bs6WiFhjDAblAFrx85jMy3BG9fBK2Q==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.1.2.tgz", + "integrity": "sha512-docXmVcYth9AiW5183dEe2IxnbmpXF4jiM6efGBVRAli/iDSS894Svvjenrv5NPqAJ4dEJULmT4MSvmLG9qoYg==", "dev": true, "requires": { - "caniuse-lite": "^1.0.30000884", - "electron-to-chromium": "^1.3.62", - "node-releases": "^1.0.0-alpha.11" + "caniuse-lite": "^1.0.30000888", + "electron-to-chromium": "^1.3.73", + "node-releases": "^1.0.0-alpha.12" } }, "buffer": { @@ -2904,15 +2899,15 @@ } }, "caniuse-db": { - "version": "1.0.30000885", - "resolved": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30000885.tgz", - "integrity": "sha512-Hy1a+UIXooG+tRlt3WnT9avMf+l999bR9J1MqlQdYKgbsYjKxV4a4rgcmiyMmdCLPBFsiRoDxdl9tnNyaq2RXw==", + "version": "1.0.30000888", + "resolved": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30000888.tgz", + "integrity": "sha512-bp7cHptv4AQZFtkyzYk2bJN5E8CSYklm6K3bJ/fGUa52oxydzBKK4uYlZ+A0lNIiThRFJMoXU2TacG9ve2KpXw==", "dev": true }, "caniuse-lite": { - "version": "1.0.30000885", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000885.tgz", - "integrity": "sha512-cXKbYwpxBLd7qHyej16JazPoUacqoVuDhvR61U7Fr5vSxMUiodzcYa1rQYRYfZ5GexV03vGZHd722vNPLjPJGQ==", + "version": "1.0.30000888", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000888.tgz", + "integrity": "sha512-vftg+5p/lPsQGpnhSo/yBuYL36ai/cyjLvU3dOPJY1kkKrekLWIy8SLm+wzjX0hpCUdFTasC4/ZT7uqw4rKOnQ==", "dev": true }, "caseless": { @@ -2932,7 +2927,7 @@ }, "chai": { "version": "3.5.0", - "resolved": "https://registry.npmjs.org/chai/-/chai-3.5.0.tgz", + "resolved": "http://registry.npmjs.org/chai/-/chai-3.5.0.tgz", "integrity": "sha1-TQJjewZ/6Vi9v906QOxW/vc3Mkc=", "dev": true, "requires": { @@ -2997,9 +2992,9 @@ } }, "ci-info": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.5.1.tgz", - "integrity": "sha512-fKFIKXaYiL1exImwJ0AhR/6jxFPSKQBk2ayV5NiNoruUs2+rxC2kNw0EG+1Z9dugZRdCrppskQ8DN2cyaUM1Hw==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.6.0.tgz", + "integrity": "sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A==", "dev": true }, "cipher-base": { @@ -3290,9 +3285,9 @@ } }, "combined-stream": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz", - "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.7.tgz", + "integrity": "sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w==", "dev": true, "requires": { "delayed-stream": "~1.0.0" @@ -3513,7 +3508,7 @@ }, "load-json-file": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "resolved": "http://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", "dev": true, "requires": { @@ -3825,26 +3820,13 @@ "dev": true }, "css-declaration-sorter": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-3.0.1.tgz", - "integrity": "sha512-jH4024SHZ3e0M7ann9VxpFpH3moplRXNz9ZBqvFMZqi09Yo5ARbs2wdPH8GqN9iRTlQynrbGbraNbBxBLei85Q==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-4.0.1.tgz", + "integrity": "sha512-BcxQSKTSEEQUftYpBVnsH4SF05NTuBokb19/sBt6asXGKZ/6VP7PLG1CBCkFDYOnhXhPh0jMhO6xZ71oYHXHBA==", "dev": true, "requires": { - "postcss": "^6.0.0", + "postcss": "^7.0.1", "timsort": "^0.3.0" - }, - "dependencies": { - "postcss": { - "version": "6.0.23", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", - "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", - "dev": true, - "requires": { - "chalk": "^2.4.1", - "source-map": "^0.6.1", - "supports-color": "^5.4.0" - } - } } }, "css-loader": { @@ -4017,7 +3999,7 @@ }, "cssnano": { "version": "3.10.0", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-3.10.0.tgz", + "resolved": "http://registry.npmjs.org/cssnano/-/cssnano-3.10.0.tgz", "integrity": "sha1-Tzj2zqK5sX+gFJDyPx3GjqZcHDg=", "dev": true, "requires": { @@ -4142,41 +4124,41 @@ } }, "cssnano-preset-default": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-4.0.0.tgz", - "integrity": "sha1-wzQoe099SfstFwqS+SFGVXiOO2s=", - "dev": true, - "requires": { - "css-declaration-sorter": "^3.0.0", - "cssnano-util-raw-cache": "^4.0.0", - "postcss": "^6.0.0", - "postcss-calc": "^6.0.0", - "postcss-colormin": "^4.0.0", - "postcss-convert-values": "^4.0.0", - "postcss-discard-comments": "^4.0.0", - "postcss-discard-duplicates": "^4.0.0", - "postcss-discard-empty": "^4.0.0", - "postcss-discard-overridden": "^4.0.0", - "postcss-merge-longhand": "^4.0.0", - "postcss-merge-rules": "^4.0.0", - "postcss-minify-font-values": "^4.0.0", - "postcss-minify-gradients": "^4.0.0", - "postcss-minify-params": "^4.0.0", - "postcss-minify-selectors": "^4.0.0", - "postcss-normalize-charset": "^4.0.0", - "postcss-normalize-display-values": "^4.0.0", - "postcss-normalize-positions": "^4.0.0", - "postcss-normalize-repeat-style": "^4.0.0", - "postcss-normalize-string": "^4.0.0", - "postcss-normalize-timing-functions": "^4.0.0", - "postcss-normalize-unicode": "^4.0.0", - "postcss-normalize-url": "^4.0.0", - "postcss-normalize-whitespace": "^4.0.0", - "postcss-ordered-values": "^4.0.0", - "postcss-reduce-initial": "^4.0.0", - "postcss-reduce-transforms": "^4.0.0", - "postcss-svgo": "^4.0.0", - "postcss-unique-selectors": "^4.0.0" + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-4.0.2.tgz", + "integrity": "sha512-zO9PeP84l1E4kbrdyF7NSLtA/JrJY1paX5FHy5+w/ziIXO2kDqDMfJ/mosXkaHHSa3RPiIY3eB6aEgwx3IiGqA==", + "dev": true, + "requires": { + "css-declaration-sorter": "^4.0.1", + "cssnano-util-raw-cache": "^4.0.1", + "postcss": "^7.0.0", + "postcss-calc": "^6.0.2", + "postcss-colormin": "^4.0.2", + "postcss-convert-values": "^4.0.1", + "postcss-discard-comments": "^4.0.1", + "postcss-discard-duplicates": "^4.0.2", + "postcss-discard-empty": "^4.0.1", + "postcss-discard-overridden": "^4.0.1", + "postcss-merge-longhand": "^4.0.6", + "postcss-merge-rules": "^4.0.2", + "postcss-minify-font-values": "^4.0.2", + "postcss-minify-gradients": "^4.0.1", + "postcss-minify-params": "^4.0.1", + "postcss-minify-selectors": "^4.0.1", + "postcss-normalize-charset": "^4.0.1", + "postcss-normalize-display-values": "^4.0.1", + "postcss-normalize-positions": "^4.0.1", + "postcss-normalize-repeat-style": "^4.0.1", + "postcss-normalize-string": "^4.0.1", + "postcss-normalize-timing-functions": "^4.0.1", + "postcss-normalize-unicode": "^4.0.1", + "postcss-normalize-url": "^4.0.1", + "postcss-normalize-whitespace": "^4.0.1", + "postcss-ordered-values": "^4.1.1", + "postcss-reduce-initial": "^4.0.2", + "postcss-reduce-transforms": "^4.0.1", + "postcss-svgo": "^4.0.1", + "postcss-unique-selectors": "^4.0.1" }, "dependencies": { "caniuse-api": { @@ -4238,12 +4220,6 @@ "mdn-data": "~1.1.0", "source-map": "^0.5.3" } - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true } } }, @@ -4278,110 +4254,99 @@ "integrity": "sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg==", "dev": true }, - "postcss": { - "version": "6.0.23", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", - "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", - "dev": true, - "requires": { - "chalk": "^2.4.1", - "source-map": "^0.6.1", - "supports-color": "^5.4.0" - } - }, "postcss-calc": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-6.0.1.tgz", - "integrity": "sha1-PSQXG79udinUIqQ26/5t2VEfQzA=", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-6.0.2.tgz", + "integrity": "sha512-fiznXjEN5T42Qm7qqMCVJXS3roaj9r4xsSi+meaBVe7CJBl8t/QLOXu02Z2E6oWAMWIvCuF6JrvzFekmVEbOKA==", "dev": true, "requires": { "css-unit-converter": "^1.1.1", - "postcss": "^6.0.0", + "postcss": "^7.0.2", "postcss-selector-parser": "^2.2.2", "reduce-css-calc": "^2.0.0" } }, "postcss-colormin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-4.0.1.tgz", - "integrity": "sha1-bxwYoBVbxpYT8v8ThD4uSuj/C74=", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-4.0.2.tgz", + "integrity": "sha512-1QJc2coIehnVFsz0otges8kQLsryi4lo19WD+U5xCWvXd0uw/Z+KKYnbiNDCnO9GP+PvErPHCG0jNvWTngk9Rw==", "dev": true, "requires": { "browserslist": "^4.0.0", "color": "^3.0.0", "has": "^1.0.0", - "postcss": "^6.0.0", + "postcss": "^7.0.0", "postcss-value-parser": "^3.0.0" } }, "postcss-convert-values": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-4.0.0.tgz", - "integrity": "sha1-d9d9mu0dxOaVbmUcw0nVMwWHb2I=", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz", + "integrity": "sha512-Kisdo1y77KUC0Jmn0OXU/COOJbzM8cImvw1ZFsBgBgMgb1iL23Zs/LXRe3r+EZqM3vGYKdQ2YJVQ5VkJI+zEJQ==", "dev": true, "requires": { - "postcss": "^6.0.0", + "postcss": "^7.0.0", "postcss-value-parser": "^3.0.0" } }, "postcss-discard-comments": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-4.0.0.tgz", - "integrity": "sha1-loSimedrPpMmPvj9KtvxocCP2I0=", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-4.0.1.tgz", + "integrity": "sha512-Ay+rZu1Sz6g8IdzRjUgG2NafSNpp2MSMOQUb+9kkzzzP+kh07fP0yNbhtFejURnyVXSX3FYy2nVNW1QTnNjgBQ==", "dev": true, "requires": { - "postcss": "^6.0.0" + "postcss": "^7.0.0" } }, "postcss-discard-duplicates": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.0.tgz", - "integrity": "sha1-QvPCZ/hfqQngQsNXZ+z9Zcsr1yw=", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz", + "integrity": "sha512-ZNQfR1gPNAiXZhgENFfEglF93pciw0WxMkJeVmw8eF+JZBbMD7jp6C67GqJAXVZP2BWbOztKfbsdmMp/k8c6oQ==", "dev": true, "requires": { - "postcss": "^6.0.0" + "postcss": "^7.0.0" } }, "postcss-discard-empty": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-4.0.0.tgz", - "integrity": "sha1-VeGKWcdBKOOMfSgEvPpAVmEfuX8=", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz", + "integrity": "sha512-B9miTzbznhDjTfjvipfHoqbWKwd0Mj+/fL5s1QOz06wufguil+Xheo4XpOnc4NqKYBCNqqEzgPv2aPBIJLox0w==", "dev": true, "requires": { - "postcss": "^6.0.0" + "postcss": "^7.0.0" } }, "postcss-discard-overridden": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-4.0.0.tgz", - "integrity": "sha1-Sgv4WXh4TPH4HtLBwf2dlkodofo=", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-4.0.1.tgz", + "integrity": "sha512-IYY2bEDD7g1XM1IDEsUT4//iEYCxAmP5oDSFMVU/JVvT7gh+l4fmjciLqGgwjdWpQIdb0Che2VX00QObS5+cTg==", "dev": true, "requires": { - "postcss": "^6.0.0" + "postcss": "^7.0.0" } }, "postcss-merge-longhand": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-4.0.5.tgz", - "integrity": "sha512-tw2obF6I2VhXhPMObQc1QpQO850m3arhqP3PcBAU7Tx70v73QF6brs9uK0XKMNuC7BPo6DW+fh07cGhrLL57HA==", + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-4.0.6.tgz", + "integrity": "sha512-JavnI+V4IHWsaUAfOoKeMEiJQGXTraEy1nHM0ILlE6NIQPEZrJDAnPh3lNGZ5HAk2mSSrwp66JoGhvjp6SqShA==", "dev": true, "requires": { "css-color-names": "0.0.4", - "postcss": "^6.0.0", + "postcss": "^7.0.0", "postcss-value-parser": "^3.0.0", "stylehacks": "^4.0.0" } }, "postcss-merge-rules": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-4.0.1.tgz", - "integrity": "sha1-Qw/Vmz8u0uivzQsxJ47aOYVKuxA=", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-4.0.2.tgz", + "integrity": "sha512-UiuXwCCJtQy9tAIxsnurfF0mrNHKc4NnNx6NxqmzNNjXpQwLSukUxELHTRF0Rg1pAmcoKLih8PwvZbiordchag==", "dev": true, "requires": { "browserslist": "^4.0.0", "caniuse-api": "^3.0.0", "cssnano-util-same-parent": "^4.0.0", - "postcss": "^6.0.0", + "postcss": "^7.0.0", "postcss-selector-parser": "^3.0.0", "vendors": "^1.0.0" }, @@ -4400,49 +4365,50 @@ } }, "postcss-minify-font-values": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-4.0.0.tgz", - "integrity": "sha1-TMM9KD1qgXWQNudX75gdksvYW+0=", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-4.0.2.tgz", + "integrity": "sha512-j85oO6OnRU9zPf04+PZv1LYIYOprWm6IA6zkXkrJXyRveDEuQggG6tvoy8ir8ZwjLxLuGfNkCZEQG7zan+Hbtg==", "dev": true, "requires": { - "postcss": "^6.0.0", + "postcss": "^7.0.0", "postcss-value-parser": "^3.0.0" } }, "postcss-minify-gradients": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-4.0.0.tgz", - "integrity": "sha1-P8ORZDnSepu4Bm23za2AFlDrCQ4=", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-4.0.1.tgz", + "integrity": "sha512-pySEW3E6Ly5mHm18rekbWiAjVi/Wj8KKt2vwSfVFAWdW6wOIekgqxKxLU7vJfb107o3FDNPkaYFCxGAJBFyogA==", "dev": true, "requires": { "cssnano-util-get-arguments": "^4.0.0", "is-color-stop": "^1.0.0", - "postcss": "^6.0.0", + "postcss": "^7.0.0", "postcss-value-parser": "^3.0.0" } }, "postcss-minify-params": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-4.0.0.tgz", - "integrity": "sha1-BekWbuSMBa9lGYnOhNOcG015BnQ=", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-4.0.1.tgz", + "integrity": "sha512-h4W0FEMEzBLxpxIVelRtMheskOKKp52ND6rJv+nBS33G1twu2tCyurYj/YtgU76+UDCvWeNs0hs8HFAWE2OUFg==", "dev": true, "requires": { "alphanum-sort": "^1.0.0", + "browserslist": "^4.0.0", "cssnano-util-get-arguments": "^4.0.0", - "postcss": "^6.0.0", + "postcss": "^7.0.0", "postcss-value-parser": "^3.0.0", "uniqs": "^2.0.0" } }, "postcss-minify-selectors": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-4.0.0.tgz", - "integrity": "sha1-sen2xGNBbT/Nyybnt4XZX2FXiq0=", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-4.0.1.tgz", + "integrity": "sha512-8+plQkomve3G+CodLCgbhAKrb5lekAnLYuL1d7Nz+/7RANpBEVdgBkPNwljfSKvZ9xkkZTZITd04KP+zeJTJqg==", "dev": true, "requires": { "alphanum-sort": "^1.0.0", "has": "^1.0.0", - "postcss": "^6.0.0", + "postcss": "^7.0.0", "postcss-selector-parser": "^3.0.0" }, "dependencies": { @@ -4460,94 +4426,100 @@ } }, "postcss-normalize-charset": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-4.0.0.tgz", - "integrity": "sha1-JFJyknAtXoEp6vo9HeSe1RpqtzA=", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-4.0.1.tgz", + "integrity": "sha512-gMXCrrlWh6G27U0hF3vNvR3w8I1s2wOBILvA87iNXaPvSNo5uZAMYsZG7XjCUf1eVxuPfyL4TJ7++SGZLc9A3g==", "dev": true, "requires": { - "postcss": "^6.0.0" + "postcss": "^7.0.0" } }, "postcss-normalize-url": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-4.0.0.tgz", - "integrity": "sha1-t6nIrSbPJmlMFG6y1ovQz0mVbw0=", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-4.0.1.tgz", + "integrity": "sha512-p5oVaF4+IHwu7VpMan/SSpmpYxcJMtkGppYf0VbdH5B6hN8YNmVyJLuY9FmLQTzY3fag5ESUUHDqM+heid0UVA==", "dev": true, "requires": { "is-absolute-url": "^2.0.0", "normalize-url": "^3.0.0", - "postcss": "^6.0.0", + "postcss": "^7.0.0", "postcss-value-parser": "^3.0.0" } }, "postcss-ordered-values": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-4.1.0.tgz", - "integrity": "sha512-gbqbEiONKKJgoOKhtzBjFqmHSzviPL4rv0ACVcFS7wxWXBY07agFXRQ7Y3eMGV0ZORzQXp2NGnj0c+imJG0NcA==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-4.1.1.tgz", + "integrity": "sha512-PeJiLgJWPzkVF8JuKSBcylaU+hDJ/TX3zqAMIjlghgn1JBi6QwQaDZoDIlqWRcCAI8SxKrt3FCPSRmOgKRB97Q==", "dev": true, "requires": { "cssnano-util-get-arguments": "^4.0.0", - "postcss": "^6.0.0", + "postcss": "^7.0.0", "postcss-value-parser": "^3.0.0" } }, "postcss-reduce-initial": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-4.0.1.tgz", - "integrity": "sha1-8tWPUM6isMXcEnjW6l7Q/1gpwpM=", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-4.0.2.tgz", + "integrity": "sha512-epUiC39NonKUKG+P3eAOKKZtm5OtAtQJL7Ye0CBN1f+UQTHzqotudp+hki7zxXm7tT0ZAKDMBj1uihpPjP25ug==", "dev": true, "requires": { "browserslist": "^4.0.0", "caniuse-api": "^3.0.0", "has": "^1.0.0", - "postcss": "^6.0.0" + "postcss": "^7.0.0" } }, "postcss-reduce-transforms": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.0.tgz", - "integrity": "sha1-9kX8dEDDUnT0DegQThStcWPt8Yg=", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.1.tgz", + "integrity": "sha512-sZVr3QlGs0pjh6JAIe6DzWvBaqYw05V1t3d9Tp+VnFRT5j+rsqoWsysh/iSD7YNsULjq9IAylCznIwVd5oU/zA==", "dev": true, "requires": { "cssnano-util-get-match": "^4.0.0", "has": "^1.0.0", - "postcss": "^6.0.0", + "postcss": "^7.0.0", "postcss-value-parser": "^3.0.0" } }, "postcss-svgo": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-4.0.0.tgz", - "integrity": "sha1-wLutAlIPxjbJ14sOhAPi5RXDIoU=", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-4.0.1.tgz", + "integrity": "sha512-YD5uIk5NDRySy0hcI+ZJHwqemv2WiqqzDgtvgMzO8EGSkK5aONyX8HMVFRFJSdO8wUWTuisUFn/d7yRRbBr5Qw==", "dev": true, "requires": { "is-svg": "^3.0.0", - "postcss": "^6.0.0", + "postcss": "^7.0.0", "postcss-value-parser": "^3.0.0", "svgo": "^1.0.0" } }, "postcss-unique-selectors": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-4.0.0.tgz", - "integrity": "sha1-BMHpdkx1h0JhMDQCxB8Ol2n8VQE=", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz", + "integrity": "sha512-+JanVaryLo9QwZjKrmJgkI4Fn8SBgRO6WXQBJi7KiAVPlmxikB5Jzc4EvXMT2H0/m0RjrVVm9rGNhZddm/8Spg==", "dev": true, "requires": { "alphanum-sort": "^1.0.0", - "postcss": "^6.0.0", + "postcss": "^7.0.0", "uniqs": "^2.0.0" } }, "reduce-css-calc": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/reduce-css-calc/-/reduce-css-calc-2.1.4.tgz", - "integrity": "sha512-i/vWQbyd3aJRmip9OVSN9V6nIjLf/gg/ctxb0CpvHWtcRysFl/ngDBQD+rqavxdw/doScA3GMBXhzkHQ4GCzFQ==", + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/reduce-css-calc/-/reduce-css-calc-2.1.5.tgz", + "integrity": "sha512-AybiBU03FKbjYzyvJvwkJZY6NLN+80Ufc2EqEs+41yQH+8wqBEslD6eGiS0oIeq5TNLA5PrhBeYHXWdn8gtW7A==", "dev": true, "requires": { "css-unit-converter": "^1.1.1", "postcss-value-parser": "^3.3.0" } }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + }, "svgo": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.1.1.tgz", @@ -4585,31 +4557,18 @@ "dev": true }, "cssnano-util-raw-cache": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cssnano-util-raw-cache/-/cssnano-util-raw-cache-4.0.0.tgz", - "integrity": "sha1-vgooVuJfGF9feivMBiTii38Xmp8=", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/cssnano-util-raw-cache/-/cssnano-util-raw-cache-4.0.1.tgz", + "integrity": "sha512-qLuYtWK2b2Dy55I8ZX3ky1Z16WYsx544Q0UWViebptpwn/xDBmog2TLg4f+DBMg1rJ6JDWtn96WHbOKDWt1WQA==", "dev": true, "requires": { - "postcss": "^6.0.0" - }, - "dependencies": { - "postcss": { - "version": "6.0.23", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", - "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", - "dev": true, - "requires": { - "chalk": "^2.4.1", - "source-map": "^0.6.1", - "supports-color": "^5.4.0" - } - } + "postcss": "^7.0.0" } }, "cssnano-util-same-parent": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.0.tgz", - "integrity": "sha1-0qPeEDmqmLxOwlAB+gUDMMKhbaw=", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz", + "integrity": "sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q==", "dev": true }, "csso": { @@ -4803,7 +4762,7 @@ }, "get-stream": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "resolved": "http://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", "dev": true } @@ -5169,9 +5128,9 @@ "dev": true }, "electron-to-chromium": { - "version": "1.3.67", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.67.tgz", - "integrity": "sha512-h3zEBLdHvsKfaXv1SHAtykJyNtwYFEKkrWGSFyW1BzGgPQ4ykAzD5Hd8C5MZGTAEhkCKmtyIwYUrapsI0xfKww==", + "version": "1.3.73", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.73.tgz", + "integrity": "sha512-6PIg7v9zRoVGh6EheRF8h6Plti+3Yo/qtHobS4/Htyt53DNHmKKGFqSae1AIk0k1S4gCQvt7I2WgpbuZNcDY+g==", "dev": true }, "elliptic": { @@ -5368,14 +5327,14 @@ } }, "es-to-primitive": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.1.1.tgz", - "integrity": "sha1-RTVSSKiJeQNLZ5Lhm7gfK3l13Q0=", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.0.tgz", + "integrity": "sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==", "dev": true, "requires": { - "is-callable": "^1.1.1", + "is-callable": "^1.1.4", "is-date-object": "^1.0.1", - "is-symbol": "^1.0.1" + "is-symbol": "^1.0.2" } }, "es5-ext": { @@ -5789,7 +5748,7 @@ }, "events": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", + "resolved": "http://registry.npmjs.org/events/-/events-1.1.1.tgz", "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=", "dev": true }, @@ -5963,7 +5922,7 @@ }, "finalhandler": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.1.tgz", + "resolved": "http://registry.npmjs.org/finalhandler/-/finalhandler-1.1.1.tgz", "integrity": "sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==", "dev": true, "requires": { @@ -6132,9 +6091,9 @@ "dev": true }, "fast-glob": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.2.tgz", - "integrity": "sha512-TR6zxCKftDQnUAPvkrCWdBgDq/gbqx8A3ApnBrR5rMvpp6+KMJI0Igw7fkWPgeVK0uhRXTXdvO3O+YP0CaUX2g==", + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.3.tgz", + "integrity": "sha512-NiX+JXjnx43RzvVFwRWfPKo4U+1BrK5pJPsHQdKMlLoFHrrGktXglQhHliSihWAq+m1z6fHk3uwGHrtRbS9vLA==", "dev": true, "requires": { "@mrmlnc/readdir-enhanced": "^2.2.1", @@ -6666,6 +6625,17 @@ "asynckit": "^0.4.0", "combined-stream": "1.0.6", "mime-types": "^2.1.12" + }, + "dependencies": { + "combined-stream": { + "version": "1.0.6", + "resolved": "http://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz", + "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=", + "dev": true, + "requires": { + "delayed-stream": "~1.0.0" + } + } } }, "forwarded": { @@ -7404,7 +7374,7 @@ }, "load-json-file": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "resolved": "http://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", "dev": true, "requires": { @@ -7541,9 +7511,9 @@ "dev": true }, "get-stream": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.0.0.tgz", - "integrity": "sha512-FneLKMENeOR7wOK0/ZXCh+lwqtnPwkeunJjRN28LPqzGvNAhYvrTAhXv6xDm4vsJ0M7lcRbIYHQudKsSy2RtSQ==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", "dev": true, "requires": { "pump": "^3.0.0" @@ -8715,7 +8685,7 @@ }, "is-builtin-module": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", + "resolved": "http://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", "dev": true, "requires": { @@ -8987,10 +8957,13 @@ } }, "is-symbol": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.1.tgz", - "integrity": "sha1-PMWfAAJRlLarLjjbrmaJJWtmBXI=", - "dev": true + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz", + "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==", + "dev": true, + "requires": { + "has-symbols": "^1.0.0" + } }, "is-text-path": { "version": "1.0.1", @@ -9351,7 +9324,7 @@ }, "json5": { "version": "0.5.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", + "resolved": "http://registry.npmjs.org/json5/-/json5-0.5.1.tgz", "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", "dev": true }, @@ -9632,7 +9605,7 @@ }, "load-json-file": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", + "resolved": "http://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", "dev": true, "requires": { @@ -9651,9 +9624,9 @@ } }, "loader-runner": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.3.0.tgz", - "integrity": "sha1-9IKuqC1UPgeSFwDVpG7yb9rGuKI=", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.3.1.tgz", + "integrity": "sha512-By6ZFY7ETWOc9RFaAIb23IjJVcM4dvJC/N57nmdz9RSkMXvAXGI7SyVlAw3v8vjtDRlqThgVDVmTnr9fqMlxkw==", "dev": true }, "loader-utils": { @@ -9966,12 +9939,6 @@ "ssri": "^6.0.0" } }, - "mamacro": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/mamacro/-/mamacro-0.0.3.tgz", - "integrity": "sha512-qMEwh+UujcQ+kbz3T6V+wAmO2U8veoq2w+3wY8MquqwVA3jChfwY+Tk52GZKDfACEPjuZ7r2oJLejwpt8jtwTA==", - "dev": true - }, "map-age-cleaner": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.2.tgz", @@ -10004,7 +9971,7 @@ }, "marked": { "version": "0.3.19", - "resolved": "https://registry.npmjs.org/marked/-/marked-0.3.19.tgz", + "resolved": "http://registry.npmjs.org/marked/-/marked-0.3.19.tgz", "integrity": "sha512-ea2eGWOqNxPcXv8dyERdSr/6FmzvWwzjMxpfGB/sbMccXoct+xY+YukPD+QTUZwyvK7BZwcr4m21WBOW41pAkg==", "dev": true }, @@ -10217,9 +10184,9 @@ "dev": true }, "mini-css-extract-plugin": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-0.4.2.tgz", - "integrity": "sha512-ots7URQH4wccfJq9Ssrzu2+qupbncAce4TmTzunI9CIwlQMp2XI+WNUw6xWF6MMAGAm1cbUVINrSjATaVMyKXg==", + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-0.4.3.tgz", + "integrity": "sha512-Mxs0nxzF1kxPv4TRi2NimewgXlJqh0rGE30vviCU2WHrpbta6wklnUV9dr9FUtoAHmB3p3LeXEC+ZjgHvB0Dzg==", "dev": true, "requires": { "loader-utils": "^1.1.0", @@ -10228,9 +10195,9 @@ }, "dependencies": { "ajv": { - "version": "6.5.3", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.5.3.tgz", - "integrity": "sha512-LqZ9wY+fx3UMiiPd741yB2pj3hhil+hQc8taf4o2QGRFpWgZ2V5C8HA165DY9sS3fJwsk7uT7ZlFEyC3Ig3lLg==", + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.5.4.tgz", + "integrity": "sha512-4Wyjt8+t6YszqaXnLDfMmG/8AlO5Zbcsy3ATHncCzjW/NoPzAId8AK6749Ybjmdt+kUY1gP60fCu46oDxPv/mg==", "dev": true, "requires": { "fast-deep-equal": "^2.0.1", @@ -10549,7 +10516,7 @@ }, "load-json-file": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "resolved": "http://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", "dev": true, "requires": { @@ -10766,9 +10733,9 @@ "dev": true }, "nan": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.11.0.tgz", - "integrity": "sha512-F4miItu2rGnV2ySkXOQoA8FKz/SR2Q2sWP0sbTxNxz/tuokeC8WxOhPMcwi0qIyGtVn/rrSeLbvVkznqCdwYnw==", + "version": "2.11.1", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.11.1.tgz", + "integrity": "sha512-iji6k87OSXa0CcrLl9z+ZiYSuR2o+c0bGuNmXdrhTQTakxytAFsC56SArGYoiHlJlFoHSnvmhpceZJaXkVuOtA==", "dev": true }, "nanomatch": { @@ -10925,9 +10892,9 @@ } }, "node-releases": { - "version": "1.0.0-alpha.11", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.0.0-alpha.11.tgz", - "integrity": "sha512-CaViu+2FqTNYOYNihXa5uPS/zry92I3vPU4nCB6JB3OeZ2UGtOpF5gRwuN4+m3hbEcL47bOXyun1jX2iC+3uEQ==", + "version": "1.0.0-alpha.12", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.0.0-alpha.12.tgz", + "integrity": "sha512-VPB4rTPqpVyWKBHbSa4YPFme3+8WHsOSpvbp0Mfj0bWsC8TEjt4HQrLl1hsBDELlp1nB4lflSgSuGTYiuyaP7Q==", "dev": true, "requires": { "semver": "^5.3.0" @@ -11060,7 +11027,7 @@ }, "load-json-file": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "resolved": "http://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", "dev": true, "requires": { @@ -11592,9 +11559,9 @@ "dev": true }, "opn": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/opn/-/opn-5.3.0.tgz", - "integrity": "sha512-bYJHo/LOmoTd+pfiYhfZDnf9zekVJrY+cnS2a5F2x+w5ppvTqObojTP7WiFG+kVZs9Inw+qQ/lw7TroWwhdd2g==", + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/opn/-/opn-5.4.0.tgz", + "integrity": "sha512-YF9MNdVy/0qvJvDtunAOzFw9iasOQHpVthTCvGzxt61Il64AYSGdK+rYwld7NAfk9qJ7dt+hymBNSc9LNYS+Sw==", "dev": true, "requires": { "is-wsl": "^1.1.0" @@ -11629,26 +11596,15 @@ }, "dependencies": { "cssnano": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-4.1.0.tgz", - "integrity": "sha512-7x24b/ghbrQv2QRgqMR12H3ZZ38xYCKJSXfg21YCtnIE177/NyvMkeiuQdWauIgMjySaTZ+cd5PN2qvfbsGeSw==", + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-4.1.4.tgz", + "integrity": "sha512-wP0wbOM9oqsek14CiNRYrK9N3w3jgadtGZKHXysgC/OMVpy0KZgWVPdNqODSZbz7txO9Gekr9taOfcCgL0pOOw==", "dev": true, "requires": { "cosmiconfig": "^5.0.0", - "cssnano-preset-default": "^4.0.0", + "cssnano-preset-default": "^4.0.2", "is-resolvable": "^1.0.0", - "postcss": "^6.0.0" - } - }, - "postcss": { - "version": "6.0.23", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", - "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", - "dev": true, - "requires": { - "chalk": "^2.4.1", - "source-map": "^0.6.1", - "supports-color": "^5.4.0" + "postcss": "^7.0.0" } } } @@ -11722,7 +11678,7 @@ }, "get-stream": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "resolved": "http://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", "dev": true } @@ -11769,7 +11725,7 @@ }, "p-is-promise": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-1.1.0.tgz", + "resolved": "http://registry.npmjs.org/p-is-promise/-/p-is-promise-1.1.0.tgz", "integrity": "sha1-nJRWmJ6fZYgBewQ01WCXZ1w9oF4=", "dev": true }, @@ -11876,7 +11832,7 @@ }, "get-stream": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "resolved": "http://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", "dev": true }, @@ -12065,9 +12021,9 @@ } }, "pbkdf2": { - "version": "3.0.16", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.16.tgz", - "integrity": "sha512-y4CXP3thSxqf7c0qmOF+9UeOTrifiVTIM+u7NWlq+PRsHbr7r7dpCmvzrZxa96JJUNi0Y5w9VqG5ZNeCVMoDcA==", + "version": "3.0.17", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.17.tgz", + "integrity": "sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA==", "dev": true, "requires": { "create-hash": "^1.1.2", @@ -12132,7 +12088,7 @@ "dependencies": { "async": { "version": "1.5.2", - "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "resolved": "http://registry.npmjs.org/async/-/async-1.5.2.tgz", "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", "dev": true } @@ -12145,19 +12101,19 @@ "dev": true }, "postcss": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.2.tgz", - "integrity": "sha512-fmaUY5370keLUTx+CnwRxtGiuFTcNBLQBqr1oE3WZ/euIYmGAo0OAgOhVJ3ByDnVmOR3PK+0V9VebzfjRIUcqw==", + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.4.tgz", + "integrity": "sha512-Bg1BrMZGKNOI0mkn8NtjJrOrZKgoHrl+geKJ45mTOkeY4WCsYq/mjd1BUWRgRvydHP/lA07Ys2n9m6Va5FsEsw==", "dev": true, "requires": { "chalk": "^2.4.1", "source-map": "^0.6.1", - "supports-color": "^5.4.0" + "supports-color": "^5.5.0" } }, "postcss-calc": { "version": "5.3.1", - "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-5.3.1.tgz", + "resolved": "http://registry.npmjs.org/postcss-calc/-/postcss-calc-5.3.1.tgz", "integrity": "sha1-d7rnypKK2FcW4v2kLyYb98HWW14=", "dev": true, "requires": { @@ -12375,7 +12331,7 @@ }, "postcss-discard-comments": { "version": "2.0.4", - "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-2.0.4.tgz", + "resolved": "http://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-2.0.4.tgz", "integrity": "sha1-vv6J+v1bPazlzM5Rt2uBUUvgDj0=", "dev": true, "requires": { @@ -12517,7 +12473,7 @@ }, "postcss-discard-empty": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-2.1.0.tgz", + "resolved": "http://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-2.1.0.tgz", "integrity": "sha1-0rS9nVztXr2Nyt52QMfXzX9PkrU=", "dev": true, "requires": { @@ -12588,7 +12544,7 @@ }, "postcss-discard-overridden": { "version": "0.1.1", - "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-0.1.1.tgz", + "resolved": "http://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-0.1.1.tgz", "integrity": "sha1-ix6vVU9ob7KIzYdMVWZ7CqNmjVg=", "dev": true, "requires": { @@ -12659,7 +12615,7 @@ }, "postcss-discard-unused": { "version": "2.2.3", - "resolved": "https://registry.npmjs.org/postcss-discard-unused/-/postcss-discard-unused-2.2.3.tgz", + "resolved": "http://registry.npmjs.org/postcss-discard-unused/-/postcss-discard-unused-2.2.3.tgz", "integrity": "sha1-vOMLLMWR/8Y0Mitfs0ZLbZNPRDM=", "dev": true, "requires": { @@ -12863,9 +12819,9 @@ }, "dependencies": { "ajv": { - "version": "6.5.3", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.5.3.tgz", - "integrity": "sha512-LqZ9wY+fx3UMiiPd741yB2pj3hhil+hQc8taf4o2QGRFpWgZ2V5C8HA165DY9sS3fJwsk7uT7ZlFEyC3Ig3lLg==", + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.5.4.tgz", + "integrity": "sha512-4Wyjt8+t6YszqaXnLDfMmG/8AlO5Zbcsy3ATHncCzjW/NoPzAId8AK6749Ybjmdt+kUY1gP60fCu46oDxPv/mg==", "dev": true, "requires": { "fast-deep-equal": "^2.0.1", @@ -12895,7 +12851,7 @@ }, "postcss-merge-idents": { "version": "2.1.7", - "resolved": "https://registry.npmjs.org/postcss-merge-idents/-/postcss-merge-idents-2.1.7.tgz", + "resolved": "http://registry.npmjs.org/postcss-merge-idents/-/postcss-merge-idents-2.1.7.tgz", "integrity": "sha1-TFUwMTwI4dWzu/PSu8dH4njuonA=", "dev": true, "requires": { @@ -13130,7 +13086,7 @@ }, "postcss-minify-font-values": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-1.0.5.tgz", + "resolved": "http://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-1.0.5.tgz", "integrity": "sha1-S1jttWZB66fIR0qzUmyv17vey2k=", "dev": true, "requires": { @@ -13203,7 +13159,7 @@ }, "postcss-minify-gradients": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-1.0.5.tgz", + "resolved": "http://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-1.0.5.tgz", "integrity": "sha1-Xb2hE3NwP4PPtKPqOIHY11/15uE=", "dev": true, "requires": { @@ -13275,7 +13231,7 @@ }, "postcss-minify-params": { "version": "1.2.2", - "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-1.2.2.tgz", + "resolved": "http://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-1.2.2.tgz", "integrity": "sha1-rSzgcTc7lDs9kwo/pZo1jCjW8fM=", "dev": true, "requires": { @@ -13349,7 +13305,7 @@ }, "postcss-minify-selectors": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-2.1.1.tgz", + "resolved": "http://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-2.1.1.tgz", "integrity": "sha1-ssapjAByz5G5MtGkllCBFDEXNb8=", "dev": true, "requires": { @@ -13514,7 +13470,7 @@ }, "postcss-normalize-charset": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-1.1.1.tgz", + "resolved": "http://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-1.1.1.tgz", "integrity": "sha1-757nEhLX/nWceO0WL2HtYrXLk/E=", "dev": true, "requires": { @@ -13584,153 +13540,76 @@ } }, "postcss-normalize-display-values": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.0.tgz", - "integrity": "sha1-lQ4Me+NEV3ChYP/9a2ZEw8DNj4k=", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.1.tgz", + "integrity": "sha512-R5mC4vaDdvsrku96yXP7zak+O3Mm9Y8IslUobk7IMP+u/g+lXvcN4jngmHY5zeJnrQvE13dfAg5ViU05ZFDwdg==", "dev": true, "requires": { "cssnano-util-get-match": "^4.0.0", - "postcss": "^6.0.0", + "postcss": "^7.0.0", "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss": { - "version": "6.0.23", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", - "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", - "dev": true, - "requires": { - "chalk": "^2.4.1", - "source-map": "^0.6.1", - "supports-color": "^5.4.0" - } - } } }, "postcss-normalize-positions": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-4.0.0.tgz", - "integrity": "sha1-7pNDq5gbgixjq3JhXszNCFZERaM=", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-4.0.1.tgz", + "integrity": "sha512-GNoOaLRBM0gvH+ZRb2vKCIujzz4aclli64MBwDuYGU2EY53LwiP7MxOZGE46UGtotrSnmarPPZ69l2S/uxdaWA==", "dev": true, "requires": { "cssnano-util-get-arguments": "^4.0.0", "has": "^1.0.0", - "postcss": "^6.0.0", + "postcss": "^7.0.0", "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss": { - "version": "6.0.23", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", - "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", - "dev": true, - "requires": { - "chalk": "^2.4.1", - "source-map": "^0.6.1", - "supports-color": "^5.4.0" - } - } } }, "postcss-normalize-repeat-style": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.0.tgz", - "integrity": "sha1-txHFks8W+vn/V15C+hALZ5kIPv8=", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.1.tgz", + "integrity": "sha512-fFHPGIjBUyUiswY2rd9rsFcC0t3oRta4wxE1h3lpwfQZwFeFjXFSiDtdJ7APCmHQOnUZnqYBADNRPKPwFAONgA==", "dev": true, "requires": { "cssnano-util-get-arguments": "^4.0.0", "cssnano-util-get-match": "^4.0.0", - "postcss": "^6.0.0", + "postcss": "^7.0.0", "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss": { - "version": "6.0.23", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", - "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", - "dev": true, - "requires": { - "chalk": "^2.4.1", - "source-map": "^0.6.1", - "supports-color": "^5.4.0" - } - } } }, "postcss-normalize-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-4.0.0.tgz", - "integrity": "sha1-cYy20wpvrGrGqDDjLAbAfbxm/l0=", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-4.0.1.tgz", + "integrity": "sha512-IJoexFTkAvAq5UZVxWXAGE0yLoNN/012v7TQh5nDo6imZJl2Fwgbhy3J2qnIoaDBrtUP0H7JrXlX1jjn2YcvCQ==", "dev": true, "requires": { "has": "^1.0.0", - "postcss": "^6.0.0", + "postcss": "^7.0.0", "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss": { - "version": "6.0.23", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", - "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", - "dev": true, - "requires": { - "chalk": "^2.4.1", - "source-map": "^0.6.1", - "supports-color": "^5.4.0" - } - } } }, "postcss-normalize-timing-functions": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.0.tgz", - "integrity": "sha1-A1HymIaqmB1D2RssK9GuptCvbSM=", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.1.tgz", + "integrity": "sha512-1nOtk7ze36+63ONWD8RCaRDYsnzorrj+Q6fxkQV+mlY5+471Qx9kspqv0O/qQNMeApg8KNrRf496zHwJ3tBZ7w==", "dev": true, "requires": { "cssnano-util-get-match": "^4.0.0", - "postcss": "^6.0.0", + "postcss": "^7.0.0", "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss": { - "version": "6.0.23", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", - "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", - "dev": true, - "requires": { - "chalk": "^2.4.1", - "source-map": "^0.6.1", - "supports-color": "^5.4.0" - } - } } }, "postcss-normalize-unicode": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-4.0.0.tgz", - "integrity": "sha1-Ws1dR7rqXRdnSyzMSuUWb6iM35c=", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-4.0.1.tgz", + "integrity": "sha512-od18Uq2wCYn+vZ/qCOeutvHjB5jm57ToxRaMeNuf0nWVHaP9Hua56QyMF6fs/4FSUnVIw0CBPsU0K4LnBPwYwg==", "dev": true, "requires": { - "postcss": "^6.0.0", + "browserslist": "^4.0.0", + "postcss": "^7.0.0", "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss": { - "version": "6.0.23", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", - "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", - "dev": true, - "requires": { - "chalk": "^2.4.1", - "source-map": "^0.6.1", - "supports-color": "^5.4.0" - } - } } }, "postcss-normalize-url": { "version": "3.0.8", - "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-3.0.8.tgz", + "resolved": "http://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-3.0.8.tgz", "integrity": "sha1-EI90s/L82viRov+j6kWSJ5/HgiI=", "dev": true, "requires": { @@ -13803,26 +13682,13 @@ } }, "postcss-normalize-whitespace": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.0.tgz", - "integrity": "sha1-HafnaxCuY8EYJ/oE/Du0oe/pnMA=", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.1.tgz", + "integrity": "sha512-U8MBODMB2L+nStzOk6VvWWjZgi5kQNShCyjRhMT3s+W9Jw93yIjOnrEkKYD3Ul7ChWbEcjDWmXq0qOL9MIAnAw==", "dev": true, "requires": { - "postcss": "^6.0.0", + "postcss": "^7.0.0", "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss": { - "version": "6.0.23", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", - "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", - "dev": true, - "requires": { - "chalk": "^2.4.1", - "source-map": "^0.6.1", - "supports-color": "^5.4.0" - } - } } }, "postcss-ordered-values": { @@ -13899,7 +13765,7 @@ }, "postcss-reduce-idents": { "version": "2.4.0", - "resolved": "https://registry.npmjs.org/postcss-reduce-idents/-/postcss-reduce-idents-2.4.0.tgz", + "resolved": "http://registry.npmjs.org/postcss-reduce-idents/-/postcss-reduce-idents-2.4.0.tgz", "integrity": "sha1-wsbSDMlYKE9qv75j92Cb9AkFmtM=", "dev": true, "requires": { @@ -13971,7 +13837,7 @@ }, "postcss-reduce-initial": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-1.0.1.tgz", + "resolved": "http://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-1.0.1.tgz", "integrity": "sha1-aPgGlfBF0IJjqHmtJA343WT2ROo=", "dev": true, "requires": { @@ -14042,7 +13908,7 @@ }, "postcss-reduce-transforms": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-1.0.4.tgz", + "resolved": "http://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-1.0.4.tgz", "integrity": "sha1-/3b02CEkN7McKYpC0uFEQCV3GuE=", "dev": true, "requires": { @@ -14126,7 +13992,7 @@ }, "postcss-svgo": { "version": "2.1.6", - "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-2.1.6.tgz", + "resolved": "http://registry.npmjs.org/postcss-svgo/-/postcss-svgo-2.1.6.tgz", "integrity": "sha1-tt8YqmE7Zm4TPwittSGcJoSsEI0=", "dev": true, "requires": { @@ -14200,7 +14066,7 @@ }, "postcss-unique-selectors": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-2.0.2.tgz", + "resolved": "http://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-2.0.2.tgz", "integrity": "sha1-mB1X0p3csz57Hf4f1DuGSfkzyh0=", "dev": true, "requires": { @@ -14279,7 +14145,7 @@ }, "postcss-zindex": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/postcss-zindex/-/postcss-zindex-2.2.0.tgz", + "resolved": "http://registry.npmjs.org/postcss-zindex/-/postcss-zindex-2.2.0.tgz", "integrity": "sha1-0hCd3AVbka9n/EyzsCWUZjnSryI=", "dev": true, "requires": { @@ -14471,16 +14337,17 @@ "dev": true }, "public-encrypt": { - "version": "4.0.2", - "resolved": "http://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.2.tgz", - "integrity": "sha512-4kJ5Esocg8X3h8YgJsKAuoesBgB7mqH3eowiDzMUPKiRDDE7E/BqqZD1hnTByIaAFiwAw246YEltSq7tdrOH0Q==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", + "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", "dev": true, "requires": { "bn.js": "^4.1.0", "browserify-rsa": "^4.0.0", "create-hash": "^1.1.0", "parse-asn1": "^5.0.0", - "randombytes": "^2.0.1" + "randombytes": "^2.0.1", + "safe-buffer": "^5.1.2" } }, "pump": { @@ -15047,7 +14914,7 @@ }, "reduce-css-calc": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/reduce-css-calc/-/reduce-css-calc-1.3.0.tgz", + "resolved": "http://registry.npmjs.org/reduce-css-calc/-/reduce-css-calc-1.3.0.tgz", "integrity": "sha1-dHyRTgSWFKTJz7umKYca0dKSdxY=", "dev": true, "requires": { @@ -15379,9 +15246,9 @@ "dev": true }, "rxjs": { - "version": "6.3.2", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.3.2.tgz", - "integrity": "sha512-hV7criqbR0pe7EeL3O66UYVg92IR0XsA97+9y+BWTePK9SKmEI5Qd3Zj6uPnGkNzXsBywBQWTvujPl+1Kn9Zjw==", + "version": "6.3.3", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.3.3.tgz", + "integrity": "sha512-JTWmoY9tWCs7zvIk/CvRjhjGaOd+OVBM987mxFo+OW66cGpdKjZcpmc74ES1sB//7Kl/PAe8+wEakuhG4pcgOw==", "dev": true, "requires": { "tslib": "^1.9.0" @@ -15464,7 +15331,7 @@ }, "load-json-file": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "resolved": "http://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", "dev": true, "requires": { @@ -15615,9 +15482,9 @@ }, "dependencies": { "ajv": { - "version": "6.5.3", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.5.3.tgz", - "integrity": "sha512-LqZ9wY+fx3UMiiPd741yB2pj3hhil+hQc8taf4o2QGRFpWgZ2V5C8HA165DY9sS3fJwsk7uT7ZlFEyC3Ig3lLg==", + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.5.4.tgz", + "integrity": "sha512-4Wyjt8+t6YszqaXnLDfMmG/8AlO5Zbcsy3ATHncCzjW/NoPzAId8AK6749Ybjmdt+kUY1gP60fCu46oDxPv/mg==", "dev": true, "requires": { "fast-deep-equal": "^2.0.1", @@ -16268,9 +16135,9 @@ "dev": true }, "spdx-correct": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.0.0.tgz", - "integrity": "sha512-N19o9z5cEyc8yQQPukRCZ9EUmb4HUpnrmaL/fxS2pBo2jbfcFRVuFZ/oFC+vZz0MNNk0h80iMn5/S6qGZOL5+g==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.0.1.tgz", + "integrity": "sha512-hxSPZbRZvSDuOvADntOElzJpenIR7wXJkuoUcUtS0erbgt2fgeaoPIYretfKpslMhfFDY4k0MZ2F5CUzhBsSvQ==", "dev": true, "requires": { "spdx-expression-parse": "^3.0.0", @@ -16278,9 +16145,9 @@ } }, "spdx-exceptions": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.1.0.tgz", - "integrity": "sha512-4K1NsmrlCU1JJgUrtgEeTVyfx8VaYea9J9LvARxhbHtVtohPs/gFGG5yy49beySjlIMhhXZ4QqujIZEfS4l6Cg==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz", + "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==", "dev": true }, "spdx-expression-parse": { @@ -16496,7 +16363,7 @@ }, "strip-ansi": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "resolved": "http://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, "requires": { @@ -16558,27 +16425,16 @@ } }, "stylehacks": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-4.0.0.tgz", - "integrity": "sha1-ZLMjlRxKJOX8ey7AbBN78y0VXoo=", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-4.0.1.tgz", + "integrity": "sha512-TK5zEPeD9NyC1uPIdjikzsgWxdQQN/ry1X3d1iOz1UkYDCmcr928gWD1KHgyC27F50UnE0xCTrBOO1l6KR8M4w==", "dev": true, "requires": { "browserslist": "^4.0.0", - "postcss": "^6.0.0", + "postcss": "^7.0.0", "postcss-selector-parser": "^3.0.0" }, "dependencies": { - "postcss": { - "version": "6.0.23", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", - "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", - "dev": true, - "requires": { - "chalk": "^2.4.1", - "source-map": "^0.6.1", - "supports-color": "^5.4.0" - } - }, "postcss-selector-parser": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.1.tgz", @@ -17183,18 +17039,18 @@ "dev": true }, "unique-filename": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.0.tgz", - "integrity": "sha1-0F8v5AMlYIcfMOk8vnNe6iAVFPM=", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", + "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", "dev": true, "requires": { "unique-slug": "^2.0.0" } }, "unique-slug": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.0.tgz", - "integrity": "sha1-22Z258fMBimHj/GWCXx4hVrp9Ks=", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.1.tgz", + "integrity": "sha512-n9cU6+gITaVu7VGj1Z8feKMmfAjEAQGhwD9fE3zvpRRa0wEIx8ODYkVGfSc94M2OX00tUFV8wH3zYbm1I8mxFg==", "dev": true, "requires": { "imurmurhash": "^0.1.4" @@ -17829,15 +17685,15 @@ "dev": true }, "webpack": { - "version": "4.19.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.19.0.tgz", - "integrity": "sha512-Ak3mMGtA8F1ar4ZP6VCLiICNIPoillROGYstnEd+LzI5Tkvz0qTITeTMcAFjxyYsaxu98F97yrCWdcxRUMPAYw==", + "version": "4.20.2", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.20.2.tgz", + "integrity": "sha512-75WFUMblcWYcocjSLlXCb71QuGyH7egdBZu50FtBGl2Nso8CK3Ej+J7bTZz2FPFq5l6fzCisD9modB7t30ikuA==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.7.6", - "@webassemblyjs/helper-module-context": "1.7.6", - "@webassemblyjs/wasm-edit": "1.7.6", - "@webassemblyjs/wasm-parser": "1.7.6", + "@webassemblyjs/ast": "1.7.8", + "@webassemblyjs/helper-module-context": "1.7.8", + "@webassemblyjs/wasm-edit": "1.7.8", + "@webassemblyjs/wasm-parser": "1.7.8", "acorn": "^5.6.2", "acorn-dynamic-import": "^3.0.0", "ajv": "^6.1.0", @@ -17857,13 +17713,13 @@ "tapable": "^1.1.0", "uglifyjs-webpack-plugin": "^1.2.4", "watchpack": "^1.5.0", - "webpack-sources": "^1.2.0" + "webpack-sources": "^1.3.0" }, "dependencies": { "ajv": { - "version": "6.5.3", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.5.3.tgz", - "integrity": "sha512-LqZ9wY+fx3UMiiPd741yB2pj3hhil+hQc8taf4o2QGRFpWgZ2V5C8HA165DY9sS3fJwsk7uT7ZlFEyC3Ig3lLg==", + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.5.4.tgz", + "integrity": "sha512-4Wyjt8+t6YszqaXnLDfMmG/8AlO5Zbcsy3ATHncCzjW/NoPzAId8AK6749Ybjmdt+kUY1gP60fCu46oDxPv/mg==", "dev": true, "requires": { "fast-deep-equal": "^2.0.1", @@ -18187,132 +18043,83 @@ } }, "webpack-cli": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-3.1.0.tgz", - "integrity": "sha512-p5NeKDtYwjZozUWq6kGNs9w+Gtw/CPvyuXjXn2HMdz8Tie+krjEg8oAtonvIyITZdvpF7XG9xDHwscLr2c+ugQ==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-3.1.2.tgz", + "integrity": "sha512-Cnqo7CeqeSvC6PTdts+dywNi5CRlIPbLx1AoUPK2T6vC1YAugMG3IOoO9DmEscd+Dghw7uRlnzV1KwOe5IrtgQ==", "dev": true, "requires": { "chalk": "^2.4.1", "cross-spawn": "^6.0.5", - "enhanced-resolve": "^4.0.0", - "global-modules-path": "^2.1.0", - "import-local": "^1.0.0", - "inquirer": "^6.0.0", + "enhanced-resolve": "^4.1.0", + "global-modules-path": "^2.3.0", + "import-local": "^2.0.0", "interpret": "^1.1.0", "loader-utils": "^1.1.0", - "supports-color": "^5.4.0", - "v8-compile-cache": "^2.0.0", - "yargs": "^12.0.1" + "supports-color": "^5.5.0", + "v8-compile-cache": "^2.0.2", + "yargs": "^12.0.2" }, "dependencies": { - "ansi-escapes": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.1.0.tgz", - "integrity": "sha512-UgAb8H9D41AQnu/PbWlCofQVcnV4Gs2bBJi9eZPxfU/hgglFh3SMDMENRIqdr7H6XFnXdoknctFByVsCOotTVw==", - "dev": true - }, - "ansi-regex": { + "find-up": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "cli-cursor": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", - "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", "dev": true, "requires": { - "restore-cursor": "^2.0.0" + "locate-path": "^3.0.0" } }, - "figures": { + "import-local": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", - "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", - "dev": true, - "requires": { - "escape-string-regexp": "^1.0.5" - } - }, - "inquirer": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.2.0.tgz", - "integrity": "sha512-QIEQG4YyQ2UYZGDC4srMZ7BjHOmNk1lR2JQj5UknBapklm6WHA+VVH7N+sUdX3A7NeCfGF8o4X1S3Ao7nAcIeg==", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz", + "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==", "dev": true, "requires": { - "ansi-escapes": "^3.0.0", - "chalk": "^2.0.0", - "cli-cursor": "^2.1.0", - "cli-width": "^2.0.0", - "external-editor": "^3.0.0", - "figures": "^2.0.0", - "lodash": "^4.17.10", - "mute-stream": "0.0.7", - "run-async": "^2.2.0", - "rxjs": "^6.1.0", - "string-width": "^2.1.0", - "strip-ansi": "^4.0.0", - "through": "^2.3.6" + "pkg-dir": "^3.0.0", + "resolve-cwd": "^2.0.0" } }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "mute-stream": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", - "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", - "dev": true - }, - "onetime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", - "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", "dev": true, "requires": { - "mimic-fn": "^1.0.0" + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" } }, - "restore-cursor": { + "p-limit": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", - "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.0.0.tgz", + "integrity": "sha512-fl5s52lI5ahKCernzzIyAP0QAZbGIovtVHGwpcu1Jr/EpzLVDI2myISHwGqK7m8uQFugVWSrbxH7XnhGtvEc+A==", "dev": true, "requires": { - "onetime": "^2.0.0", - "signal-exit": "^3.0.2" + "p-try": "^2.0.0" } }, - "run-async": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", - "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=", + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", "dev": true, "requires": { - "is-promise": "^2.1.0" + "p-limit": "^2.0.0" } }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - } + "p-try": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.0.0.tgz", + "integrity": "sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ==", + "dev": true }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "pkg-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", + "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", "dev": true, "requires": { - "ansi-regex": "^3.0.0" + "find-up": "^3.0.0" } } } @@ -18341,9 +18148,9 @@ } }, "webpack-dev-server": { - "version": "3.1.8", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.1.8.tgz", - "integrity": "sha512-c+tcJtDqnPdxCAzEEZKdIPmg3i5i7cAHe+B+0xFNK0BlCc2HF/unYccbU7xTgfGc5xxhCztCQzFmsqim+KhI+A==", + "version": "3.1.9", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.1.9.tgz", + "integrity": "sha512-fqPkuNalLuc/hRC2QMkVYJkgNmRvxZQo7ykA2e1XRg/tMJm3qY7ZaD6d89/Fqjxtj9bOrn5wZzLD2n84lJdvWg==", "dev": true, "requires": { "ansi-html": "0.0.7", @@ -18371,15 +18178,15 @@ "spdy": "^3.4.1", "strip-ansi": "^3.0.0", "supports-color": "^5.1.0", - "webpack-dev-middleware": "3.2.0", + "webpack-dev-middleware": "3.4.0", "webpack-log": "^2.0.0", "yargs": "12.0.2" }, "dependencies": { "ajv": { - "version": "6.5.3", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.5.3.tgz", - "integrity": "sha512-LqZ9wY+fx3UMiiPd741yB2pj3hhil+hQc8taf4o2QGRFpWgZ2V5C8HA165DY9sS3fJwsk7uT7ZlFEyC3Ig3lLg==", + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.5.4.tgz", + "integrity": "sha512-4Wyjt8+t6YszqaXnLDfMmG/8AlO5Zbcsy3ATHncCzjW/NoPzAId8AK6749Ybjmdt+kUY1gP60fCu46oDxPv/mg==", "dev": true, "requires": { "fast-deep-equal": "^2.0.1", @@ -18875,24 +18682,15 @@ "ajv-keywords": "^3.1.0" } }, - "url-join": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/url-join/-/url-join-4.0.0.tgz", - "integrity": "sha1-TTNA6AfTdzvamZH4MFrNzCpmXSo=", - "dev": true - }, "webpack-dev-middleware": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.2.0.tgz", - "integrity": "sha512-YJLMF/96TpKXaEQwaLEo+Z4NDK8aV133ROF6xp9pe3gQoS7sxfpXh4Rv9eC+8vCvWfmDjRQaMSlRPbO+9G6jgA==", + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.4.0.tgz", + "integrity": "sha512-Q9Iyc0X9dP9bAsYskAVJ/hmIZZQwf/3Sy4xCAZgL5cUkjZmUZLt4l5HpbST/Pdgjn3u6pE7u5OdGd1apgzRujA==", "dev": true, "requires": { - "loud-rejection": "^1.6.0", "memory-fs": "~0.4.1", "mime": "^2.3.1", - "path-is-absolute": "^1.0.0", "range-parser": "^1.0.3", - "url-join": "^4.0.0", "webpack-log": "^2.0.0" } }, @@ -18957,9 +18755,9 @@ } }, "webpack-sources": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.2.0.tgz", - "integrity": "sha512-9BZwxR85dNsjWz3blyxdOhTgtnQvv3OEs5xofI0wPYTwu5kaWxS08UuD1oI7WLBLpRO+ylf0ofnXLXWmGb2WMw==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.3.0.tgz", + "integrity": "sha512-OiVgSrbGu7NEnEvQJJgdSFPl2qWKkWq5lHMhgiToIiN9w34EBnjYzSYs+VbL5KoYiLNtFFa7BZIKxRED3I32pA==", "dev": true, "requires": { "source-list-map": "^2.0.0", diff --git a/packages/muze/npm/dist/muze.css b/packages/muze/npm/dist/muze.css index 2ca2bff8..37fbb3db 100644 --- a/packages/muze/npm/dist/muze.css +++ b/packages/muze/npm/dist/muze.css @@ -1 +1 @@ -.muze-selection-box-group{cursor:all-scroll;fill:#777;fill-opacity:.3;pointer-events:all;stroke:#fff}.muze-tooltip-box{-webkit-border-radius:1px;-webkit-box-shadow:2px 2px 3px 0 hsla(0,0%,82.7%,.5);background:#fbfbfb;border:1px solid hsla(0,0%,59.2%,.19);border-radius:1px;box-shadow:2px 2px 3px 0 hsla(0,0%,82.7%,.5);color:#5f5f5f;display:inline-block;font-size:12px;opacity:.9;padding-left:8px;padding-right:8px;padding-top:4px;pointer-events:none;text-align:left;z-index:9999999999}.muze-tooltip-row{overflow:auto;padding-bottom:8px}.muze-tooltip-row:last-child{padding-bottom:4px}.muze-tooltip-value{float:right;font-weight:600;margin-left:10px}.muze-tooltip-connectors path{stroke:#c7c7be;stroke-linecap:round;stroke-linejoin:round;stroke-width:2px}.muze-tooltip-arrow-bottom{border-left:5px solid transparent;border-right:5px solid transparent;border-top:10px solid #fbfbfb;right:0}.muze-tooltip-arrow-right{border-left:10px solid #fbfbfb;right:-10px}.muze-tooltip-arrow-left,.muze-tooltip-arrow-right{border-bottom:5px solid transparent;border-top:5px solid transparent}.muze-tooltip-arrow-left{border-right:10px solid #fbfbfb;left:-10px;right:0}.muze-tooltip-arrow-top{border-bottom:10px solid #fbfbfb;border-left:5px solid transparent;border-right:5px solid transparent;right:0}.muze-tooltip-background-arrow-top{border-bottom:12px solid hsla(0,0%,59.2%,.19);top:0}.muze-tooltip-background-arrow-bottom,.muze-tooltip-background-arrow-top{border-left:6px solid transparent;border-right:6px solid transparent;right:0}.muze-tooltip-background-arrow-bottom{border-top:12px solid hsla(0,0%,59.2%,.19);top:102%}.muze-tooltip-background-arrow-right{border-bottom:6px solid transparent;border-left:12px solid hsla(0,0%,59.2%,.19);border-top:6px solid transparent;right:-12px}.muze-tooltip-background-arrow-left{border-bottom:6px solid transparent;border-right:12px solid hsla(0,0%,59.2%,.19);border-top:6px solid transparent;left:-12px;right:0}.muze-tooltip-content-container{float:none!important;padding-left:8px;padding-right:8px;padding-top:4px}.muze--tooltip-value{font-weight:700}.muze-tooltip-table-tbody td{padding:3px}.muze-tooltip-table-row-0{font-weight:700}.muze-tooltip-content-container{border-bottom:1px solid #000}.muze-tooltip-content-parent-container :last-child{border-bottom:none}.muze-crossband{fill:grey;fill-opacity:.2;stroke-opacity:0}.muze-crossline{fill:grey;fill-opacity:.2;stroke:grey;stroke-dasharray:2,4}.muze-anchors-group{pointer-events:none}.muze-simple-axis text{font-family:Source Sans Pro,Helvetica Neue,Helvetica,Arial,sans-serif;text-align:center}.muze-ticks{fill:#858585}.muze-tick-lines,.muze-ticks{font-family:Source Sans Pro,Helvetica Neue,Helvetica,Arial,sans-serif;font-size:12px;font-weight:400;text-align:center}.muze-tick-lines{stroke:#efefef}.muze-axis-name{fill:#5f5f5f;font-family:Source Sans Pro,Helvetica Neue,Helvetica,Arial,sans-serif;font-size:14px;font-weight:400;text-align:center}.muze-axis-name.hidden{display:none}.muze-fadeout-interaction{stroke-opacity:.3}.muze-layer-line{stroke:#086bb6;stroke-linejoin:round;stroke-width:2px}.muze-layer-area{fill:#086bb6;fill-opacity:.7;stroke-linejoin:round}.muze-layer-arc-highlight{fill:#7f7f7f!important}.muze-layer-arc-fadeout{fill-opacity:.3!important}.muze-layer-arc-selected{fill:#e6e6e6!important}.muze-layer-arc{fill:#086bb6}.muze-layer-text text{fill:#000;font-size:12px}.muze-layer-text rect{fill:#7f7f7f;fill-opacity:.3}.muze-layer-text-highlight{fill-opacity:1}.muze-layer-text-fadeout{fill-opacity:.3!important}.muze-layer-text-selected{fill:#000!important}.muze-layer-point{fill:#086bb6;fill-opacity:.5;stroke:#086bb6;stroke-opacity:.5}.muze-layer-point-highlight{fill-opacity:0;stroke-opacity:1;stroke-width:2px!important}.muze-layer-point-fadeout{fill:#7f7f7f!important;fill-opacity:.3!important;stroke:#7f7f7f!important;stroke-opacity:.3!important}.muze-layer-point-selected{fill:#000!important}.muze-layer-bar,.muze-layer-bar-highlight{fill-opacity:1}.muze-layer-bar-fadeout{fill-opacity:.2!important}.muze-layer-bar-selected{fill:#4682b4!important}.muze-layer-tick{stroke:#f44336;stroke-opacity:.7}.muze-layer-tick-highlight{stroke-opacity:1}.muze-layer-tick-fadeout{stroke:#7f7f7f!important;stroke-opacity:.3!important}.muze-layer-tick-selected{stroke:#000!important}.muze-visual-unit{background:transparent}.muze-axis-zero-line{stroke-width:1px}.muze-grid-band-x-0,.muze-grid-band-y-0{fill-opacity:0}.muze-unit{-webkit-touch-callout:none;-webkit-user-select:none}.muze-legend-box{display:inline-block;float:none!important;font-family:Source Sans Pro,Helvetica Neue,Helvetica,Arial,sans-serif;height:100px;line-height:10px!important}.muze-legend-title{-webkit-align-items:center;-webkit-box-align:center;align-items:center;display:table;fill:#5f5f5f;float:left;font-size:14px;font-weight:600;height:30px;text-align:left}.muze-legend-title-text{display:table-cell;vertical-align:middle}.muze-legend-overflow{text-align:center}.muze-legend-icon,.muze-legend-icon-svg{cursor:pointer}.muze-overflow-y{overflow-y:scroll}.muze-overflow-x{overflow-x:scroll}.muze-legend-fadeout{fill-opacity:.3;opacity:.3}.muze-legend-brighten{fill-opacity:1}.muze-legend-item-info{-webkit-align-items:center;-webkit-box-align:center;align-items:center;cursor:pointer;display:-webkit-box;display:-webkit-flex;display:flex;float:left;font-size:12px}.muze-legend-item-info.center{-webkit-box-pack:center;-webkit-justify-content:center;justify-content:center}.muze-legend-item-info.start{-webkit-box-pack:start;-webkit-justify-content:flex-start;justify-content:flex-start}.muze-legend-item-info.end{-webkit-box-pack:end;-webkit-justify-content:flex-end;justify-content:flex-end}.muze-legend-selection-box{cursor:all-scroll;fill:#777;fill-opacity:.3;pointer-events:all;stroke:#fff}.muze-text-cell{color:#5f5f5f;font-family:inherit;font-size:14px;font-weight:400;text-align:center}.muze-header-cell{font-size:16px}.muze-header-cell,.muze-subheader-cell{color:#858585;font-family:inherit;font-weight:800;text-align:center}.muze-subheader-cell{font-size:15px}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:200;src:local("Source Sans Pro ExtraLight Italic"),local("SourceSansPro-ExtraLightItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZYokSdh18S0xR41YDw.woff2) format("woff2");unicode-range:U+0460-052f,U+1c80-1c88,U+20b4,U+2de0-2dff,U+a640-a69f,U+fe2e-fe2f}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:200;src:local("Source Sans Pro ExtraLight Italic"),local("SourceSansPro-ExtraLightItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZYokSdo18S0xR41YDw.woff2) format("woff2");unicode-range:U+0400-045f,U+0490-0491,U+04b0-04b1,U+2116}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:200;src:local("Source Sans Pro ExtraLight Italic"),local("SourceSansPro-ExtraLightItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZYokSdg18S0xR41YDw.woff2) format("woff2");unicode-range:U+1f??}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:200;src:local("Source Sans Pro ExtraLight Italic"),local("SourceSansPro-ExtraLightItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZYokSdv18S0xR41YDw.woff2) format("woff2");unicode-range:U+0370-03ff}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:200;src:local("Source Sans Pro ExtraLight Italic"),local("SourceSansPro-ExtraLightItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZYokSdj18S0xR41YDw.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+1ea0-1ef9,U+20ab}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:200;src:local("Source Sans Pro ExtraLight Italic"),local("SourceSansPro-ExtraLightItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZYokSdi18S0xR41YDw.woff2) format("woff2");unicode-range:U+0100-024f,U+0259,U+1e??,U+2020,U+20a0-20ab,U+20ad-20cf,U+2113,U+2c60-2c7f,U+a720-a7ff}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:200;src:local("Source Sans Pro ExtraLight Italic"),local("SourceSansPro-ExtraLightItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZYokSds18S0xR41.woff2) format("woff2");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:300;src:local("Source Sans Pro Light Italic"),local("SourceSansPro-LightItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZMkidh18S0xR41YDw.woff2) format("woff2");unicode-range:U+0460-052f,U+1c80-1c88,U+20b4,U+2de0-2dff,U+a640-a69f,U+fe2e-fe2f}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:300;src:local("Source Sans Pro Light Italic"),local("SourceSansPro-LightItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZMkido18S0xR41YDw.woff2) format("woff2");unicode-range:U+0400-045f,U+0490-0491,U+04b0-04b1,U+2116}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:300;src:local("Source Sans Pro Light Italic"),local("SourceSansPro-LightItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZMkidg18S0xR41YDw.woff2) format("woff2");unicode-range:U+1f??}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:300;src:local("Source Sans Pro Light Italic"),local("SourceSansPro-LightItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZMkidv18S0xR41YDw.woff2) format("woff2");unicode-range:U+0370-03ff}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:300;src:local("Source Sans Pro Light Italic"),local("SourceSansPro-LightItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZMkidj18S0xR41YDw.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+1ea0-1ef9,U+20ab}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:300;src:local("Source Sans Pro Light Italic"),local("SourceSansPro-LightItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZMkidi18S0xR41YDw.woff2) format("woff2");unicode-range:U+0100-024f,U+0259,U+1e??,U+2020,U+20a0-20ab,U+20ad-20cf,U+2113,U+2c60-2c7f,U+a720-a7ff}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:300;src:local("Source Sans Pro Light Italic"),local("SourceSansPro-LightItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZMkids18S0xR41.woff2) format("woff2");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:400;src:local("Source Sans Pro Italic"),local("SourceSansPro-Italic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK1dSBYKcSV-LCoeQqfX1RYOo3qPZ7qsDJB9cme_xc.woff2) format("woff2");unicode-range:U+0460-052f,U+1c80-1c88,U+20b4,U+2de0-2dff,U+a640-a69f,U+fe2e-fe2f}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:400;src:local("Source Sans Pro Italic"),local("SourceSansPro-Italic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK1dSBYKcSV-LCoeQqfX1RYOo3qPZ7jsDJB9cme_xc.woff2) format("woff2");unicode-range:U+0400-045f,U+0490-0491,U+04b0-04b1,U+2116}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:400;src:local("Source Sans Pro Italic"),local("SourceSansPro-Italic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK1dSBYKcSV-LCoeQqfX1RYOo3qPZ7rsDJB9cme_xc.woff2) format("woff2");unicode-range:U+1f??}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:400;src:local("Source Sans Pro Italic"),local("SourceSansPro-Italic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK1dSBYKcSV-LCoeQqfX1RYOo3qPZ7ksDJB9cme_xc.woff2) format("woff2");unicode-range:U+0370-03ff}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:400;src:local("Source Sans Pro Italic"),local("SourceSansPro-Italic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK1dSBYKcSV-LCoeQqfX1RYOo3qPZ7osDJB9cme_xc.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+1ea0-1ef9,U+20ab}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:400;src:local("Source Sans Pro Italic"),local("SourceSansPro-Italic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK1dSBYKcSV-LCoeQqfX1RYOo3qPZ7psDJB9cme_xc.woff2) format("woff2");unicode-range:U+0100-024f,U+0259,U+1e??,U+2020,U+20a0-20ab,U+20ad-20cf,U+2113,U+2c60-2c7f,U+a720-a7ff}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:400;src:local("Source Sans Pro Italic"),local("SourceSansPro-Italic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK1dSBYKcSV-LCoeQqfX1RYOo3qPZ7nsDJB9cme.woff2) format("woff2");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:600;src:local("Source Sans Pro SemiBold Italic"),local("SourceSansPro-SemiBoldItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZY4lCdh18S0xR41YDw.woff2) format("woff2");unicode-range:U+0460-052f,U+1c80-1c88,U+20b4,U+2de0-2dff,U+a640-a69f,U+fe2e-fe2f}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:600;src:local("Source Sans Pro SemiBold Italic"),local("SourceSansPro-SemiBoldItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZY4lCdo18S0xR41YDw.woff2) format("woff2");unicode-range:U+0400-045f,U+0490-0491,U+04b0-04b1,U+2116}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:600;src:local("Source Sans Pro SemiBold Italic"),local("SourceSansPro-SemiBoldItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZY4lCdg18S0xR41YDw.woff2) format("woff2");unicode-range:U+1f??}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:600;src:local("Source Sans Pro SemiBold Italic"),local("SourceSansPro-SemiBoldItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZY4lCdv18S0xR41YDw.woff2) format("woff2");unicode-range:U+0370-03ff}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:600;src:local("Source Sans Pro SemiBold Italic"),local("SourceSansPro-SemiBoldItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZY4lCdj18S0xR41YDw.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+1ea0-1ef9,U+20ab}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:600;src:local("Source Sans Pro SemiBold Italic"),local("SourceSansPro-SemiBoldItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZY4lCdi18S0xR41YDw.woff2) format("woff2");unicode-range:U+0100-024f,U+0259,U+1e??,U+2020,U+20a0-20ab,U+20ad-20cf,U+2113,U+2c60-2c7f,U+a720-a7ff}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:600;src:local("Source Sans Pro SemiBold Italic"),local("SourceSansPro-SemiBoldItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZY4lCds18S0xR41.woff2) format("woff2");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:700;src:local("Source Sans Pro Bold Italic"),local("SourceSansPro-BoldItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZclSdh18S0xR41YDw.woff2) format("woff2");unicode-range:U+0460-052f,U+1c80-1c88,U+20b4,U+2de0-2dff,U+a640-a69f,U+fe2e-fe2f}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:700;src:local("Source Sans Pro Bold Italic"),local("SourceSansPro-BoldItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZclSdo18S0xR41YDw.woff2) format("woff2");unicode-range:U+0400-045f,U+0490-0491,U+04b0-04b1,U+2116}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:700;src:local("Source Sans Pro Bold Italic"),local("SourceSansPro-BoldItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZclSdg18S0xR41YDw.woff2) format("woff2");unicode-range:U+1f??}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:700;src:local("Source Sans Pro Bold Italic"),local("SourceSansPro-BoldItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZclSdv18S0xR41YDw.woff2) format("woff2");unicode-range:U+0370-03ff}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:700;src:local("Source Sans Pro Bold Italic"),local("SourceSansPro-BoldItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZclSdj18S0xR41YDw.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+1ea0-1ef9,U+20ab}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:700;src:local("Source Sans Pro Bold Italic"),local("SourceSansPro-BoldItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZclSdi18S0xR41YDw.woff2) format("woff2");unicode-range:U+0100-024f,U+0259,U+1e??,U+2020,U+20a0-20ab,U+20ad-20cf,U+2113,U+2c60-2c7f,U+a720-a7ff}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:700;src:local("Source Sans Pro Bold Italic"),local("SourceSansPro-BoldItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZclSds18S0xR41.woff2) format("woff2");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:900;src:local("Source Sans Pro Black Italic"),local("SourceSansPro-BlackItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZklydh18S0xR41YDw.woff2) format("woff2");unicode-range:U+0460-052f,U+1c80-1c88,U+20b4,U+2de0-2dff,U+a640-a69f,U+fe2e-fe2f}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:900;src:local("Source Sans Pro Black Italic"),local("SourceSansPro-BlackItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZklydo18S0xR41YDw.woff2) format("woff2");unicode-range:U+0400-045f,U+0490-0491,U+04b0-04b1,U+2116}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:900;src:local("Source Sans Pro Black Italic"),local("SourceSansPro-BlackItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZklydg18S0xR41YDw.woff2) format("woff2");unicode-range:U+1f??}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:900;src:local("Source Sans Pro Black Italic"),local("SourceSansPro-BlackItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZklydv18S0xR41YDw.woff2) format("woff2");unicode-range:U+0370-03ff}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:900;src:local("Source Sans Pro Black Italic"),local("SourceSansPro-BlackItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZklydj18S0xR41YDw.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+1ea0-1ef9,U+20ab}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:900;src:local("Source Sans Pro Black Italic"),local("SourceSansPro-BlackItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZklydi18S0xR41YDw.woff2) format("woff2");unicode-range:U+0100-024f,U+0259,U+1e??,U+2020,U+20a0-20ab,U+20ad-20cf,U+2113,U+2c60-2c7f,U+a720-a7ff}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:900;src:local("Source Sans Pro Black Italic"),local("SourceSansPro-BlackItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZklyds18S0xR41.woff2) format("woff2");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:200;src:local("Source Sans Pro ExtraLight"),local("SourceSansPro-ExtraLight"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i94_wmhdu3cOWxy40.woff2) format("woff2");unicode-range:U+0460-052f,U+1c80-1c88,U+20b4,U+2de0-2dff,U+a640-a69f,U+fe2e-fe2f}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:200;src:local("Source Sans Pro ExtraLight"),local("SourceSansPro-ExtraLight"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i94_wkxdu3cOWxy40.woff2) format("woff2");unicode-range:U+0400-045f,U+0490-0491,U+04b0-04b1,U+2116}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:200;src:local("Source Sans Pro ExtraLight"),local("SourceSansPro-ExtraLight"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i94_wmxdu3cOWxy40.woff2) format("woff2");unicode-range:U+1f??}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:200;src:local("Source Sans Pro ExtraLight"),local("SourceSansPro-ExtraLight"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i94_wlBdu3cOWxy40.woff2) format("woff2");unicode-range:U+0370-03ff}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:200;src:local("Source Sans Pro ExtraLight"),local("SourceSansPro-ExtraLight"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i94_wmBdu3cOWxy40.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+1ea0-1ef9,U+20ab}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:200;src:local("Source Sans Pro ExtraLight"),local("SourceSansPro-ExtraLight"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i94_wmRdu3cOWxy40.woff2) format("woff2");unicode-range:U+0100-024f,U+0259,U+1e??,U+2020,U+20a0-20ab,U+20ad-20cf,U+2113,U+2c60-2c7f,U+a720-a7ff}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:200;src:local("Source Sans Pro ExtraLight"),local("SourceSansPro-ExtraLight"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i94_wlxdu3cOWxw.woff2) format("woff2");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:300;src:local("Source Sans Pro Light"),local("SourceSansPro-Light"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ik4zwmhdu3cOWxy40.woff2) format("woff2");unicode-range:U+0460-052f,U+1c80-1c88,U+20b4,U+2de0-2dff,U+a640-a69f,U+fe2e-fe2f}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:300;src:local("Source Sans Pro Light"),local("SourceSansPro-Light"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ik4zwkxdu3cOWxy40.woff2) format("woff2");unicode-range:U+0400-045f,U+0490-0491,U+04b0-04b1,U+2116}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:300;src:local("Source Sans Pro Light"),local("SourceSansPro-Light"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ik4zwmxdu3cOWxy40.woff2) format("woff2");unicode-range:U+1f??}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:300;src:local("Source Sans Pro Light"),local("SourceSansPro-Light"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ik4zwlBdu3cOWxy40.woff2) format("woff2");unicode-range:U+0370-03ff}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:300;src:local("Source Sans Pro Light"),local("SourceSansPro-Light"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ik4zwmBdu3cOWxy40.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+1ea0-1ef9,U+20ab}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:300;src:local("Source Sans Pro Light"),local("SourceSansPro-Light"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ik4zwmRdu3cOWxy40.woff2) format("woff2");unicode-range:U+0100-024f,U+0259,U+1e??,U+2020,U+20a0-20ab,U+20ad-20cf,U+2113,U+2c60-2c7f,U+a720-a7ff}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:300;src:local("Source Sans Pro Light"),local("SourceSansPro-Light"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ik4zwlxdu3cOWxw.woff2) format("woff2");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:400;src:local("Source Sans Pro Regular"),local("SourceSansPro-Regular"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK3dSBYKcSV-LCoeQqfX1RYOo3qNa7lujVj9_mf.woff2) format("woff2");unicode-range:U+0460-052f,U+1c80-1c88,U+20b4,U+2de0-2dff,U+a640-a69f,U+fe2e-fe2f}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:400;src:local("Source Sans Pro Regular"),local("SourceSansPro-Regular"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK3dSBYKcSV-LCoeQqfX1RYOo3qPK7lujVj9_mf.woff2) format("woff2");unicode-range:U+0400-045f,U+0490-0491,U+04b0-04b1,U+2116}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:400;src:local("Source Sans Pro Regular"),local("SourceSansPro-Regular"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK3dSBYKcSV-LCoeQqfX1RYOo3qNK7lujVj9_mf.woff2) format("woff2");unicode-range:U+1f??}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:400;src:local("Source Sans Pro Regular"),local("SourceSansPro-Regular"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK3dSBYKcSV-LCoeQqfX1RYOo3qO67lujVj9_mf.woff2) format("woff2");unicode-range:U+0370-03ff}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:400;src:local("Source Sans Pro Regular"),local("SourceSansPro-Regular"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK3dSBYKcSV-LCoeQqfX1RYOo3qN67lujVj9_mf.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+1ea0-1ef9,U+20ab}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:400;src:local("Source Sans Pro Regular"),local("SourceSansPro-Regular"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK3dSBYKcSV-LCoeQqfX1RYOo3qNq7lujVj9_mf.woff2) format("woff2");unicode-range:U+0100-024f,U+0259,U+1e??,U+2020,U+20a0-20ab,U+20ad-20cf,U+2113,U+2c60-2c7f,U+a720-a7ff}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:400;src:local("Source Sans Pro Regular"),local("SourceSansPro-Regular"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK3dSBYKcSV-LCoeQqfX1RYOo3qOK7lujVj9w.woff2) format("woff2");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:600;src:local("Source Sans Pro SemiBold"),local("SourceSansPro-SemiBold"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i54rwmhdu3cOWxy40.woff2) format("woff2");unicode-range:U+0460-052f,U+1c80-1c88,U+20b4,U+2de0-2dff,U+a640-a69f,U+fe2e-fe2f}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:600;src:local("Source Sans Pro SemiBold"),local("SourceSansPro-SemiBold"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i54rwkxdu3cOWxy40.woff2) format("woff2");unicode-range:U+0400-045f,U+0490-0491,U+04b0-04b1,U+2116}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:600;src:local("Source Sans Pro SemiBold"),local("SourceSansPro-SemiBold"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i54rwmxdu3cOWxy40.woff2) format("woff2");unicode-range:U+1f??}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:600;src:local("Source Sans Pro SemiBold"),local("SourceSansPro-SemiBold"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i54rwlBdu3cOWxy40.woff2) format("woff2");unicode-range:U+0370-03ff}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:600;src:local("Source Sans Pro SemiBold"),local("SourceSansPro-SemiBold"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i54rwmBdu3cOWxy40.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+1ea0-1ef9,U+20ab}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:600;src:local("Source Sans Pro SemiBold"),local("SourceSansPro-SemiBold"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i54rwmRdu3cOWxy40.woff2) format("woff2");unicode-range:U+0100-024f,U+0259,U+1e??,U+2020,U+20a0-20ab,U+20ad-20cf,U+2113,U+2c60-2c7f,U+a720-a7ff}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:600;src:local("Source Sans Pro SemiBold"),local("SourceSansPro-SemiBold"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i54rwlxdu3cOWxw.woff2) format("woff2");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:700;src:local("Source Sans Pro Bold"),local("SourceSansPro-Bold"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ig4vwmhdu3cOWxy40.woff2) format("woff2");unicode-range:U+0460-052f,U+1c80-1c88,U+20b4,U+2de0-2dff,U+a640-a69f,U+fe2e-fe2f}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:700;src:local("Source Sans Pro Bold"),local("SourceSansPro-Bold"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ig4vwkxdu3cOWxy40.woff2) format("woff2");unicode-range:U+0400-045f,U+0490-0491,U+04b0-04b1,U+2116}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:700;src:local("Source Sans Pro Bold"),local("SourceSansPro-Bold"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ig4vwmxdu3cOWxy40.woff2) format("woff2");unicode-range:U+1f??}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:700;src:local("Source Sans Pro Bold"),local("SourceSansPro-Bold"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ig4vwlBdu3cOWxy40.woff2) format("woff2");unicode-range:U+0370-03ff}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:700;src:local("Source Sans Pro Bold"),local("SourceSansPro-Bold"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ig4vwmBdu3cOWxy40.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+1ea0-1ef9,U+20ab}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:700;src:local("Source Sans Pro Bold"),local("SourceSansPro-Bold"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ig4vwmRdu3cOWxy40.woff2) format("woff2");unicode-range:U+0100-024f,U+0259,U+1e??,U+2020,U+20a0-20ab,U+20ad-20cf,U+2113,U+2c60-2c7f,U+a720-a7ff}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:700;src:local("Source Sans Pro Bold"),local("SourceSansPro-Bold"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ig4vwlxdu3cOWxw.woff2) format("woff2");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:900;src:local("Source Sans Pro Black"),local("SourceSansPro-Black"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3iu4nwmhdu3cOWxy40.woff2) format("woff2");unicode-range:U+0460-052f,U+1c80-1c88,U+20b4,U+2de0-2dff,U+a640-a69f,U+fe2e-fe2f}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:900;src:local("Source Sans Pro Black"),local("SourceSansPro-Black"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3iu4nwkxdu3cOWxy40.woff2) format("woff2");unicode-range:U+0400-045f,U+0490-0491,U+04b0-04b1,U+2116}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:900;src:local("Source Sans Pro Black"),local("SourceSansPro-Black"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3iu4nwmxdu3cOWxy40.woff2) format("woff2");unicode-range:U+1f??}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:900;src:local("Source Sans Pro Black"),local("SourceSansPro-Black"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3iu4nwlBdu3cOWxy40.woff2) format("woff2");unicode-range:U+0370-03ff}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:900;src:local("Source Sans Pro Black"),local("SourceSansPro-Black"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3iu4nwmBdu3cOWxy40.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+1ea0-1ef9,U+20ab}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:900;src:local("Source Sans Pro Black"),local("SourceSansPro-Black"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3iu4nwmRdu3cOWxy40.woff2) format("woff2");unicode-range:U+0100-024f,U+0259,U+1e??,U+2020,U+20a0-20ab,U+20ad-20cf,U+2113,U+2c60-2c7f,U+a720-a7ff}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:900;src:local("Source Sans Pro Black"),local("SourceSansPro-Black"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3iu4nwlxdu3cOWxw.woff2) format("woff2");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}.muze-group-container{-webkit-tap-highlight-color:rgba(0,0,0,0);background-color:transparent;color:#333;font-family:Source Sans Pro,Helvetica Neue,Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143;margin:0}.muze-group-container *,.muze-group-container :after,.muze-group-container :before{-webkit-box-sizing:border-box;box-sizing:border-box}.muze-group-container .muze-table-arrow{cursor:pointer;height:0;margin:5px;opacity:.5;position:absolute;width:0;z-index:10}.muze-group-container .muze-table-arrow:hover{opacity:1}.muze-group-container .muze-table-arrow-right{border-left:15px solid #4682b4;left:100%}.muze-group-container .muze-table-arrow-left,.muze-group-container .muze-table-arrow-right{border-bottom:20px solid transparent;border-top:20px solid transparent;top:-webkit-calc(50% - 25px);top:calc(50% - 25px)}.muze-group-container .muze-table-arrow-left{border-right:15px solid #4682b4;right:100%}.muze-group-container .muze-table-arrow-bottom{border-top:15px solid #4682b4;top:100%}.muze-group-container .muze-table-arrow-bottom,.muze-group-container .muze-table-arrow-top{border-left:20px solid transparent;border-right:20px solid transparent;left:-webkit-calc(50% - 25px);left:calc(50% - 25px)}.muze-group-container .muze-table-arrow-top{border-bottom:15px solid #4682b4;bottom:100%}.muze-group-container .table-row-nested{border-top:none;visibility:hidden}.muze-group-container svg{display:block;float:left;height:inherit;vertical-align:top;width:inherit}.muze-group-container .axisName.hidden{opacity:0}.muze-group-container .axisName{opacity:1}.muze-group-container .grid-td svg{max-height:100%;max-width:100%}.muze-group-container .domain{opacity:0}.muze-board{float:left}.muze-layout-container{float:left;position:relative}.muze-board-legend,.muze-legend-section{float:left;text-align:center}.muze-legend-horizontal-section{-webkit-align-items:center;-webkit-box-align:center;-webkit-box-pack:center;-webkit-flex-wrap:wrap;-webkit-justify-content:center;align-items:center;display:-webkit-box;display:-webkit-flex;display:flex;flex-wrap:wrap;justify-content:center}.muze-legend-components{float:left;text-align:center}.muze-grid-layout,.muze-grid-layout-container,.muze-grid-layout-row{float:left;position:relative}.muze-grid-table{background-color:transparent;border-spacing:0;table-layout:fixed}.muze-grid-td,.muze-grid-th{padding:0}.muze-table-header{height:inherit;width:inherit}.muze-grid-layout,.muze-layout-grid-container{float:left;position:relative}.muze-layout-grid-container div,.muze-layout-grid-container table{border-collapse:collapse;float:left}.muze-title-container .muze-header-cell{color:#5f5f5f;font-size:24px;font-weight:700}.muze-subtitle-container .muze-text-cell{color:#b1b1b1;font-size:16px;font-weight:400}.domain{opacity:0}.muze-group-container,.muze-layout-container,.muze-legend-container{float:left}.hidden{display:none} \ No newline at end of file +.muze-selection-box-group{fill:#777;fill-opacity:.3;stroke:#fff;cursor:all-scroll;pointer-events:all}.muze-tooltip-box{opacity:.9;border:1px solid hsla(0,0%,59.2%,.19);background:#fbfbfb;-webkit-box-shadow:2px 2px 3px 0 hsla(0,0%,82.7%,.5);box-shadow:2px 2px 3px 0 hsla(0,0%,82.7%,.5);font-size:12px;color:#5f5f5f;-webkit-border-radius:1px;border-radius:1px;padding-left:8px;padding-right:8px;padding-top:4px;display:inline-block;pointer-events:none;z-index:9999999999;text-align:left}.muze-tooltip-row{padding-bottom:8px;overflow:auto}.muze-tooltip-row:last-child{padding-bottom:4px}.muze-tooltip-value{font-weight:600;float:right;margin-left:10px}.muze-tooltip-connectors path{stroke-width:2px;stroke:#c7c7be;stroke-linejoin:round;stroke-linecap:round}.muze-tooltip-arrow-bottom{border-top:10px solid #fbfbfb;border-left:5px solid transparent;border-right:5px solid transparent;right:0}.muze-tooltip-arrow-right{border-left:10px solid #fbfbfb;right:-10px}.muze-tooltip-arrow-left,.muze-tooltip-arrow-right{border-top:5px solid transparent;border-bottom:5px solid transparent}.muze-tooltip-arrow-left{border-right:10px solid #fbfbfb;right:0;left:-10px}.muze-tooltip-arrow-top{border-bottom:10px solid #fbfbfb;border-left:5px solid transparent;border-right:5px solid transparent;right:0}.muze-tooltip-background-arrow-top{border-bottom:12px solid hsla(0,0%,59.2%,.19);top:0}.muze-tooltip-background-arrow-bottom,.muze-tooltip-background-arrow-top{border-left:6px solid transparent;border-right:6px solid transparent;right:0}.muze-tooltip-background-arrow-bottom{border-top:12px solid hsla(0,0%,59.2%,.19);top:102%}.muze-tooltip-background-arrow-right{border-left:12px solid hsla(0,0%,59.2%,.19);border-top:6px solid transparent;border-bottom:6px solid transparent;right:-12px}.muze-tooltip-background-arrow-left{border-right:12px solid hsla(0,0%,59.2%,.19);border-top:6px solid transparent;border-bottom:6px solid transparent;right:0;left:-12px}.muze-tooltip-content-container{float:none!important;padding-left:8px;padding-right:8px;padding-top:4px}.muze--tooltip-value{font-weight:700}.muze-tooltip-table-tbody td{padding:3px}.muze-tooltip-table-row-0{font-weight:700}.muze-tooltip-content-container{border-bottom:1px solid #000}.muze-tooltip-content-parent-container :last-child{border-bottom:none}.muze-crossband{stroke-opacity:0;fill:grey;fill-opacity:.2}.muze-crossline{stroke:grey;stroke-dasharray:2,4;fill:grey;fill-opacity:.2}.muze-anchors-group{pointer-events:none}.muze-simple-axis text{text-align:center;font-family:Source Sans Pro,Helvetica Neue,Helvetica,Arial,sans-serif}.muze-ticks{fill:#858585}.muze-tick-lines,.muze-ticks{font-size:12px;text-align:center;font-weight:400;font-family:Source Sans Pro,Helvetica Neue,Helvetica,Arial,sans-serif}.muze-tick-lines{stroke:#efefef}.muze-axis-name{font-size:14px;text-align:center;font-weight:400;font-family:Source Sans Pro,Helvetica Neue,Helvetica,Arial,sans-serif;fill:#5f5f5f}.muze-axis-name.hidden{display:none}.muze-fadeout-interaction{stroke-opacity:.3}.muze-layer-line{stroke-linejoin:round;stroke-width:2px;stroke:#086bb6}.muze-layer-area{stroke-linejoin:round;fill:#086bb6;fill-opacity:.7}.muze-layer-arc-highlight{fill:#7f7f7f!important}.muze-layer-arc-fadeout{fill-opacity:.3!important}.muze-layer-arc-selected{fill:#e6e6e6!important}.muze-layer-arc{fill:#086bb6}.muze-layer-text text{font-size:12px;fill:#000}.muze-layer-text rect{fill:#7f7f7f;fill-opacity:.3}.muze-layer-text-highlight{fill-opacity:1}.muze-layer-text-fadeout{fill-opacity:.3!important}.muze-layer-text-selected{fill:#000!important}.muze-layer-point{fill-opacity:.5;stroke-opacity:.5;fill:#086bb6;stroke:#086bb6}.muze-layer-point-highlight{stroke-width:2px!important;fill-opacity:0;stroke-opacity:1}.muze-layer-point-fadeout{fill-opacity:.3!important;fill:#7f7f7f!important;stroke-opacity:.3!important;stroke:#7f7f7f!important}.muze-layer-point-selected{fill:#000!important}.muze-layer-bar,.muze-layer-bar-highlight{fill-opacity:1}.muze-layer-bar-fadeout{fill-opacity:.2!important}.muze-layer-bar-selected{fill:#4682b4!important}.muze-layer-tick{stroke-opacity:.7;stroke:#f44336}.muze-layer-tick-highlight{stroke-opacity:1}.muze-layer-tick-fadeout{stroke-opacity:.3!important;stroke:#7f7f7f!important}.muze-layer-tick-selected{stroke:#000!important}.muze-visual-unit{background:transparent}.muze-axis-zero-line{stroke-width:1px}.muze-grid-band-x-0,.muze-grid-band-y-0{fill-opacity:0}.muze-unit{-webkit-touch-callout:none;-webkit-user-select:none}.muze-legend-box{font-family:Source Sans Pro,Helvetica Neue,Helvetica,Arial,sans-serif;line-height:10px!important;height:100px;float:none!important;display:inline-block}.muze-legend-title{display:table;-webkit-box-align:center;-webkit-align-items:center;align-items:center;float:left;text-align:left;font-size:14px;height:30px;fill:#5f5f5f;font-weight:600}.muze-legend-title-text{display:table-cell;vertical-align:middle}.muze-legend-overflow{text-align:center}.muze-legend-icon,.muze-legend-icon-svg{cursor:pointer}.muze-overflow-y{overflow-y:scroll}.muze-overflow-x{overflow-x:scroll}.muze-legend-fadeout{fill-opacity:.3;opacity:.3}.muze-legend-brighten{fill-opacity:1}.muze-legend-item-info{float:left;display:-webkit-box;display:-webkit-flex;display:flex;-webkit-box-align:center;-webkit-align-items:center;align-items:center;cursor:pointer;font-size:12px}.muze-legend-item-info.center{-webkit-box-pack:center;-webkit-justify-content:center;justify-content:center}.muze-legend-item-info.start{-webkit-box-pack:start;-webkit-justify-content:flex-start;justify-content:flex-start}.muze-legend-item-info.end{-webkit-box-pack:end;-webkit-justify-content:flex-end;justify-content:flex-end}.muze-legend-selection-box{fill:#777;fill-opacity:.3;stroke:#fff;cursor:all-scroll;pointer-events:all}.muze-text-cell{font-size:14px;text-align:center;color:#5f5f5f;font-weight:400;font-family:inherit}.muze-header-cell{font-size:16px}.muze-header-cell,.muze-subheader-cell{text-align:center;color:#858585;font-weight:800;font-family:inherit}.muze-subheader-cell{font-size:15px}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:200;src:local("Source Sans Pro ExtraLight Italic"),local("SourceSansPro-ExtraLightItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZYokSdh18S0xR41YDw.woff2) format("woff2");unicode-range:U+0460-052f,U+1c80-1c88,U+20b4,U+2de0-2dff,U+a640-a69f,U+fe2e-fe2f}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:200;src:local("Source Sans Pro ExtraLight Italic"),local("SourceSansPro-ExtraLightItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZYokSdo18S0xR41YDw.woff2) format("woff2");unicode-range:U+0400-045f,U+0490-0491,U+04b0-04b1,U+2116}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:200;src:local("Source Sans Pro ExtraLight Italic"),local("SourceSansPro-ExtraLightItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZYokSdg18S0xR41YDw.woff2) format("woff2");unicode-range:U+1f??}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:200;src:local("Source Sans Pro ExtraLight Italic"),local("SourceSansPro-ExtraLightItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZYokSdv18S0xR41YDw.woff2) format("woff2");unicode-range:U+0370-03ff}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:200;src:local("Source Sans Pro ExtraLight Italic"),local("SourceSansPro-ExtraLightItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZYokSdj18S0xR41YDw.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+1ea0-1ef9,U+20ab}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:200;src:local("Source Sans Pro ExtraLight Italic"),local("SourceSansPro-ExtraLightItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZYokSdi18S0xR41YDw.woff2) format("woff2");unicode-range:U+0100-024f,U+0259,U+1e??,U+2020,U+20a0-20ab,U+20ad-20cf,U+2113,U+2c60-2c7f,U+a720-a7ff}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:200;src:local("Source Sans Pro ExtraLight Italic"),local("SourceSansPro-ExtraLightItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZYokSds18S0xR41.woff2) format("woff2");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:300;src:local("Source Sans Pro Light Italic"),local("SourceSansPro-LightItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZMkidh18S0xR41YDw.woff2) format("woff2");unicode-range:U+0460-052f,U+1c80-1c88,U+20b4,U+2de0-2dff,U+a640-a69f,U+fe2e-fe2f}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:300;src:local("Source Sans Pro Light Italic"),local("SourceSansPro-LightItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZMkido18S0xR41YDw.woff2) format("woff2");unicode-range:U+0400-045f,U+0490-0491,U+04b0-04b1,U+2116}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:300;src:local("Source Sans Pro Light Italic"),local("SourceSansPro-LightItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZMkidg18S0xR41YDw.woff2) format("woff2");unicode-range:U+1f??}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:300;src:local("Source Sans Pro Light Italic"),local("SourceSansPro-LightItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZMkidv18S0xR41YDw.woff2) format("woff2");unicode-range:U+0370-03ff}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:300;src:local("Source Sans Pro Light Italic"),local("SourceSansPro-LightItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZMkidj18S0xR41YDw.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+1ea0-1ef9,U+20ab}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:300;src:local("Source Sans Pro Light Italic"),local("SourceSansPro-LightItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZMkidi18S0xR41YDw.woff2) format("woff2");unicode-range:U+0100-024f,U+0259,U+1e??,U+2020,U+20a0-20ab,U+20ad-20cf,U+2113,U+2c60-2c7f,U+a720-a7ff}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:300;src:local("Source Sans Pro Light Italic"),local("SourceSansPro-LightItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZMkids18S0xR41.woff2) format("woff2");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:400;src:local("Source Sans Pro Italic"),local("SourceSansPro-Italic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK1dSBYKcSV-LCoeQqfX1RYOo3qPZ7qsDJB9cme_xc.woff2) format("woff2");unicode-range:U+0460-052f,U+1c80-1c88,U+20b4,U+2de0-2dff,U+a640-a69f,U+fe2e-fe2f}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:400;src:local("Source Sans Pro Italic"),local("SourceSansPro-Italic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK1dSBYKcSV-LCoeQqfX1RYOo3qPZ7jsDJB9cme_xc.woff2) format("woff2");unicode-range:U+0400-045f,U+0490-0491,U+04b0-04b1,U+2116}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:400;src:local("Source Sans Pro Italic"),local("SourceSansPro-Italic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK1dSBYKcSV-LCoeQqfX1RYOo3qPZ7rsDJB9cme_xc.woff2) format("woff2");unicode-range:U+1f??}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:400;src:local("Source Sans Pro Italic"),local("SourceSansPro-Italic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK1dSBYKcSV-LCoeQqfX1RYOo3qPZ7ksDJB9cme_xc.woff2) format("woff2");unicode-range:U+0370-03ff}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:400;src:local("Source Sans Pro Italic"),local("SourceSansPro-Italic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK1dSBYKcSV-LCoeQqfX1RYOo3qPZ7osDJB9cme_xc.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+1ea0-1ef9,U+20ab}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:400;src:local("Source Sans Pro Italic"),local("SourceSansPro-Italic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK1dSBYKcSV-LCoeQqfX1RYOo3qPZ7psDJB9cme_xc.woff2) format("woff2");unicode-range:U+0100-024f,U+0259,U+1e??,U+2020,U+20a0-20ab,U+20ad-20cf,U+2113,U+2c60-2c7f,U+a720-a7ff}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:400;src:local("Source Sans Pro Italic"),local("SourceSansPro-Italic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK1dSBYKcSV-LCoeQqfX1RYOo3qPZ7nsDJB9cme.woff2) format("woff2");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:600;src:local("Source Sans Pro SemiBold Italic"),local("SourceSansPro-SemiBoldItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZY4lCdh18S0xR41YDw.woff2) format("woff2");unicode-range:U+0460-052f,U+1c80-1c88,U+20b4,U+2de0-2dff,U+a640-a69f,U+fe2e-fe2f}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:600;src:local("Source Sans Pro SemiBold Italic"),local("SourceSansPro-SemiBoldItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZY4lCdo18S0xR41YDw.woff2) format("woff2");unicode-range:U+0400-045f,U+0490-0491,U+04b0-04b1,U+2116}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:600;src:local("Source Sans Pro SemiBold Italic"),local("SourceSansPro-SemiBoldItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZY4lCdg18S0xR41YDw.woff2) format("woff2");unicode-range:U+1f??}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:600;src:local("Source Sans Pro SemiBold Italic"),local("SourceSansPro-SemiBoldItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZY4lCdv18S0xR41YDw.woff2) format("woff2");unicode-range:U+0370-03ff}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:600;src:local("Source Sans Pro SemiBold Italic"),local("SourceSansPro-SemiBoldItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZY4lCdj18S0xR41YDw.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+1ea0-1ef9,U+20ab}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:600;src:local("Source Sans Pro SemiBold Italic"),local("SourceSansPro-SemiBoldItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZY4lCdi18S0xR41YDw.woff2) format("woff2");unicode-range:U+0100-024f,U+0259,U+1e??,U+2020,U+20a0-20ab,U+20ad-20cf,U+2113,U+2c60-2c7f,U+a720-a7ff}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:600;src:local("Source Sans Pro SemiBold Italic"),local("SourceSansPro-SemiBoldItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZY4lCds18S0xR41.woff2) format("woff2");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:700;src:local("Source Sans Pro Bold Italic"),local("SourceSansPro-BoldItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZclSdh18S0xR41YDw.woff2) format("woff2");unicode-range:U+0460-052f,U+1c80-1c88,U+20b4,U+2de0-2dff,U+a640-a69f,U+fe2e-fe2f}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:700;src:local("Source Sans Pro Bold Italic"),local("SourceSansPro-BoldItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZclSdo18S0xR41YDw.woff2) format("woff2");unicode-range:U+0400-045f,U+0490-0491,U+04b0-04b1,U+2116}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:700;src:local("Source Sans Pro Bold Italic"),local("SourceSansPro-BoldItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZclSdg18S0xR41YDw.woff2) format("woff2");unicode-range:U+1f??}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:700;src:local("Source Sans Pro Bold Italic"),local("SourceSansPro-BoldItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZclSdv18S0xR41YDw.woff2) format("woff2");unicode-range:U+0370-03ff}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:700;src:local("Source Sans Pro Bold Italic"),local("SourceSansPro-BoldItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZclSdj18S0xR41YDw.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+1ea0-1ef9,U+20ab}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:700;src:local("Source Sans Pro Bold Italic"),local("SourceSansPro-BoldItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZclSdi18S0xR41YDw.woff2) format("woff2");unicode-range:U+0100-024f,U+0259,U+1e??,U+2020,U+20a0-20ab,U+20ad-20cf,U+2113,U+2c60-2c7f,U+a720-a7ff}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:700;src:local("Source Sans Pro Bold Italic"),local("SourceSansPro-BoldItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZclSds18S0xR41.woff2) format("woff2");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:900;src:local("Source Sans Pro Black Italic"),local("SourceSansPro-BlackItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZklydh18S0xR41YDw.woff2) format("woff2");unicode-range:U+0460-052f,U+1c80-1c88,U+20b4,U+2de0-2dff,U+a640-a69f,U+fe2e-fe2f}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:900;src:local("Source Sans Pro Black Italic"),local("SourceSansPro-BlackItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZklydo18S0xR41YDw.woff2) format("woff2");unicode-range:U+0400-045f,U+0490-0491,U+04b0-04b1,U+2116}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:900;src:local("Source Sans Pro Black Italic"),local("SourceSansPro-BlackItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZklydg18S0xR41YDw.woff2) format("woff2");unicode-range:U+1f??}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:900;src:local("Source Sans Pro Black Italic"),local("SourceSansPro-BlackItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZklydv18S0xR41YDw.woff2) format("woff2");unicode-range:U+0370-03ff}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:900;src:local("Source Sans Pro Black Italic"),local("SourceSansPro-BlackItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZklydj18S0xR41YDw.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+1ea0-1ef9,U+20ab}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:900;src:local("Source Sans Pro Black Italic"),local("SourceSansPro-BlackItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZklydi18S0xR41YDw.woff2) format("woff2");unicode-range:U+0100-024f,U+0259,U+1e??,U+2020,U+20a0-20ab,U+20ad-20cf,U+2113,U+2c60-2c7f,U+a720-a7ff}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:900;src:local("Source Sans Pro Black Italic"),local("SourceSansPro-BlackItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZklyds18S0xR41.woff2) format("woff2");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:200;src:local("Source Sans Pro ExtraLight"),local("SourceSansPro-ExtraLight"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i94_wmhdu3cOWxy40.woff2) format("woff2");unicode-range:U+0460-052f,U+1c80-1c88,U+20b4,U+2de0-2dff,U+a640-a69f,U+fe2e-fe2f}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:200;src:local("Source Sans Pro ExtraLight"),local("SourceSansPro-ExtraLight"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i94_wkxdu3cOWxy40.woff2) format("woff2");unicode-range:U+0400-045f,U+0490-0491,U+04b0-04b1,U+2116}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:200;src:local("Source Sans Pro ExtraLight"),local("SourceSansPro-ExtraLight"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i94_wmxdu3cOWxy40.woff2) format("woff2");unicode-range:U+1f??}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:200;src:local("Source Sans Pro ExtraLight"),local("SourceSansPro-ExtraLight"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i94_wlBdu3cOWxy40.woff2) format("woff2");unicode-range:U+0370-03ff}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:200;src:local("Source Sans Pro ExtraLight"),local("SourceSansPro-ExtraLight"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i94_wmBdu3cOWxy40.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+1ea0-1ef9,U+20ab}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:200;src:local("Source Sans Pro ExtraLight"),local("SourceSansPro-ExtraLight"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i94_wmRdu3cOWxy40.woff2) format("woff2");unicode-range:U+0100-024f,U+0259,U+1e??,U+2020,U+20a0-20ab,U+20ad-20cf,U+2113,U+2c60-2c7f,U+a720-a7ff}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:200;src:local("Source Sans Pro ExtraLight"),local("SourceSansPro-ExtraLight"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i94_wlxdu3cOWxw.woff2) format("woff2");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:300;src:local("Source Sans Pro Light"),local("SourceSansPro-Light"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ik4zwmhdu3cOWxy40.woff2) format("woff2");unicode-range:U+0460-052f,U+1c80-1c88,U+20b4,U+2de0-2dff,U+a640-a69f,U+fe2e-fe2f}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:300;src:local("Source Sans Pro Light"),local("SourceSansPro-Light"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ik4zwkxdu3cOWxy40.woff2) format("woff2");unicode-range:U+0400-045f,U+0490-0491,U+04b0-04b1,U+2116}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:300;src:local("Source Sans Pro Light"),local("SourceSansPro-Light"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ik4zwmxdu3cOWxy40.woff2) format("woff2");unicode-range:U+1f??}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:300;src:local("Source Sans Pro Light"),local("SourceSansPro-Light"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ik4zwlBdu3cOWxy40.woff2) format("woff2");unicode-range:U+0370-03ff}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:300;src:local("Source Sans Pro Light"),local("SourceSansPro-Light"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ik4zwmBdu3cOWxy40.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+1ea0-1ef9,U+20ab}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:300;src:local("Source Sans Pro Light"),local("SourceSansPro-Light"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ik4zwmRdu3cOWxy40.woff2) format("woff2");unicode-range:U+0100-024f,U+0259,U+1e??,U+2020,U+20a0-20ab,U+20ad-20cf,U+2113,U+2c60-2c7f,U+a720-a7ff}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:300;src:local("Source Sans Pro Light"),local("SourceSansPro-Light"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ik4zwlxdu3cOWxw.woff2) format("woff2");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:400;src:local("Source Sans Pro Regular"),local("SourceSansPro-Regular"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK3dSBYKcSV-LCoeQqfX1RYOo3qNa7lujVj9_mf.woff2) format("woff2");unicode-range:U+0460-052f,U+1c80-1c88,U+20b4,U+2de0-2dff,U+a640-a69f,U+fe2e-fe2f}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:400;src:local("Source Sans Pro Regular"),local("SourceSansPro-Regular"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK3dSBYKcSV-LCoeQqfX1RYOo3qPK7lujVj9_mf.woff2) format("woff2");unicode-range:U+0400-045f,U+0490-0491,U+04b0-04b1,U+2116}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:400;src:local("Source Sans Pro Regular"),local("SourceSansPro-Regular"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK3dSBYKcSV-LCoeQqfX1RYOo3qNK7lujVj9_mf.woff2) format("woff2");unicode-range:U+1f??}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:400;src:local("Source Sans Pro Regular"),local("SourceSansPro-Regular"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK3dSBYKcSV-LCoeQqfX1RYOo3qO67lujVj9_mf.woff2) format("woff2");unicode-range:U+0370-03ff}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:400;src:local("Source Sans Pro Regular"),local("SourceSansPro-Regular"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK3dSBYKcSV-LCoeQqfX1RYOo3qN67lujVj9_mf.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+1ea0-1ef9,U+20ab}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:400;src:local("Source Sans Pro Regular"),local("SourceSansPro-Regular"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK3dSBYKcSV-LCoeQqfX1RYOo3qNq7lujVj9_mf.woff2) format("woff2");unicode-range:U+0100-024f,U+0259,U+1e??,U+2020,U+20a0-20ab,U+20ad-20cf,U+2113,U+2c60-2c7f,U+a720-a7ff}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:400;src:local("Source Sans Pro Regular"),local("SourceSansPro-Regular"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK3dSBYKcSV-LCoeQqfX1RYOo3qOK7lujVj9w.woff2) format("woff2");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:600;src:local("Source Sans Pro SemiBold"),local("SourceSansPro-SemiBold"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i54rwmhdu3cOWxy40.woff2) format("woff2");unicode-range:U+0460-052f,U+1c80-1c88,U+20b4,U+2de0-2dff,U+a640-a69f,U+fe2e-fe2f}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:600;src:local("Source Sans Pro SemiBold"),local("SourceSansPro-SemiBold"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i54rwkxdu3cOWxy40.woff2) format("woff2");unicode-range:U+0400-045f,U+0490-0491,U+04b0-04b1,U+2116}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:600;src:local("Source Sans Pro SemiBold"),local("SourceSansPro-SemiBold"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i54rwmxdu3cOWxy40.woff2) format("woff2");unicode-range:U+1f??}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:600;src:local("Source Sans Pro SemiBold"),local("SourceSansPro-SemiBold"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i54rwlBdu3cOWxy40.woff2) format("woff2");unicode-range:U+0370-03ff}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:600;src:local("Source Sans Pro SemiBold"),local("SourceSansPro-SemiBold"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i54rwmBdu3cOWxy40.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+1ea0-1ef9,U+20ab}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:600;src:local("Source Sans Pro SemiBold"),local("SourceSansPro-SemiBold"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i54rwmRdu3cOWxy40.woff2) format("woff2");unicode-range:U+0100-024f,U+0259,U+1e??,U+2020,U+20a0-20ab,U+20ad-20cf,U+2113,U+2c60-2c7f,U+a720-a7ff}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:600;src:local("Source Sans Pro SemiBold"),local("SourceSansPro-SemiBold"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i54rwlxdu3cOWxw.woff2) format("woff2");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:700;src:local("Source Sans Pro Bold"),local("SourceSansPro-Bold"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ig4vwmhdu3cOWxy40.woff2) format("woff2");unicode-range:U+0460-052f,U+1c80-1c88,U+20b4,U+2de0-2dff,U+a640-a69f,U+fe2e-fe2f}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:700;src:local("Source Sans Pro Bold"),local("SourceSansPro-Bold"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ig4vwkxdu3cOWxy40.woff2) format("woff2");unicode-range:U+0400-045f,U+0490-0491,U+04b0-04b1,U+2116}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:700;src:local("Source Sans Pro Bold"),local("SourceSansPro-Bold"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ig4vwmxdu3cOWxy40.woff2) format("woff2");unicode-range:U+1f??}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:700;src:local("Source Sans Pro Bold"),local("SourceSansPro-Bold"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ig4vwlBdu3cOWxy40.woff2) format("woff2");unicode-range:U+0370-03ff}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:700;src:local("Source Sans Pro Bold"),local("SourceSansPro-Bold"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ig4vwmBdu3cOWxy40.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+1ea0-1ef9,U+20ab}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:700;src:local("Source Sans Pro Bold"),local("SourceSansPro-Bold"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ig4vwmRdu3cOWxy40.woff2) format("woff2");unicode-range:U+0100-024f,U+0259,U+1e??,U+2020,U+20a0-20ab,U+20ad-20cf,U+2113,U+2c60-2c7f,U+a720-a7ff}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:700;src:local("Source Sans Pro Bold"),local("SourceSansPro-Bold"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ig4vwlxdu3cOWxw.woff2) format("woff2");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:900;src:local("Source Sans Pro Black"),local("SourceSansPro-Black"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3iu4nwmhdu3cOWxy40.woff2) format("woff2");unicode-range:U+0460-052f,U+1c80-1c88,U+20b4,U+2de0-2dff,U+a640-a69f,U+fe2e-fe2f}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:900;src:local("Source Sans Pro Black"),local("SourceSansPro-Black"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3iu4nwkxdu3cOWxy40.woff2) format("woff2");unicode-range:U+0400-045f,U+0490-0491,U+04b0-04b1,U+2116}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:900;src:local("Source Sans Pro Black"),local("SourceSansPro-Black"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3iu4nwmxdu3cOWxy40.woff2) format("woff2");unicode-range:U+1f??}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:900;src:local("Source Sans Pro Black"),local("SourceSansPro-Black"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3iu4nwlBdu3cOWxy40.woff2) format("woff2");unicode-range:U+0370-03ff}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:900;src:local("Source Sans Pro Black"),local("SourceSansPro-Black"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3iu4nwmBdu3cOWxy40.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+1ea0-1ef9,U+20ab}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:900;src:local("Source Sans Pro Black"),local("SourceSansPro-Black"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3iu4nwmRdu3cOWxy40.woff2) format("woff2");unicode-range:U+0100-024f,U+0259,U+1e??,U+2020,U+20a0-20ab,U+20ad-20cf,U+2113,U+2c60-2c7f,U+a720-a7ff}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:900;src:local("Source Sans Pro Black"),local("SourceSansPro-Black"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3iu4nwlxdu3cOWxw.woff2) format("woff2");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}.muze-group-container{font-family:Source Sans Pro,Helvetica Neue,Helvetica,Arial,sans-serif;font-size:14px;-webkit-tap-highlight-color:rgba(0,0,0,0);line-height:1.42857143;color:#333;background-color:transparent;margin:0}.muze-group-container *,.muze-group-container :after,.muze-group-container :before{-webkit-box-sizing:border-box;box-sizing:border-box}.muze-group-container .muze-table-arrow{margin:5px;width:0;height:0;position:absolute;opacity:.5;z-index:10;cursor:pointer}.muze-group-container .muze-table-arrow:hover{opacity:1}.muze-group-container .muze-table-arrow-right{left:100%;border-left:15px solid #4682b4}.muze-group-container .muze-table-arrow-left,.muze-group-container .muze-table-arrow-right{top:-webkit-calc(50% - 25px);top:calc(50% - 25px);border-top:20px solid transparent;border-bottom:20px solid transparent}.muze-group-container .muze-table-arrow-left{right:100%;border-right:15px solid #4682b4}.muze-group-container .muze-table-arrow-bottom{top:100%;border-top:15px solid #4682b4}.muze-group-container .muze-table-arrow-bottom,.muze-group-container .muze-table-arrow-top{left:-webkit-calc(50% - 25px);left:calc(50% - 25px);border-left:20px solid transparent;border-right:20px solid transparent}.muze-group-container .muze-table-arrow-top{bottom:100%;border-bottom:15px solid #4682b4}.muze-group-container .table-row-nested{visibility:hidden;border-top:none}.muze-group-container svg{display:block;width:inherit;height:inherit;float:left;vertical-align:top}.muze-group-container .axisName.hidden{opacity:0}.muze-group-container .axisName{opacity:1}.muze-group-container .grid-td svg{max-width:100%;max-height:100%}.muze-group-container .domain{opacity:0}.muze-board{float:left}.muze-layout-container{float:left;position:relative}.muze-board-legend,.muze-legend-section{text-align:center;float:left}.muze-legend-horizontal-section{display:-webkit-box;display:-webkit-flex;display:flex;-webkit-box-align:center;-webkit-align-items:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;justify-content:center;-webkit-flex-wrap:wrap;flex-wrap:wrap}.muze-legend-components{text-align:center;float:left}.muze-grid-layout,.muze-grid-layout-container,.muze-grid-layout-row{float:left;position:relative}.muze-grid-table{background-color:transparent;border-spacing:0;table-layout:fixed}.muze-grid-td,.muze-grid-th{padding:0}.muze-table-header{width:inherit;height:inherit}.muze-grid-layout,.muze-layout-grid-container{float:left;position:relative}.muze-layout-grid-container div,.muze-layout-grid-container table{float:left;border-collapse:collapse}.muze-title-container .muze-header-cell{font-size:24px;font-weight:700;color:#5f5f5f}.muze-subtitle-container .muze-text-cell{font-size:16px;font-weight:400;color:#b1b1b1}.domain{opacity:0}.muze-group-container,.muze-layout-container,.muze-legend-container{float:left}.hidden{display:none} \ No newline at end of file diff --git a/packages/muze/npm/dist/muze.js b/packages/muze/npm/dist/muze.js index 37488f60..d57204ad 100644 --- a/packages/muze/npm/dist/muze.js +++ b/packages/muze/npm/dist/muze.js @@ -1,2 +1,2 @@ -!function webpackUniversalModuleDefinition(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define("muze",[],t):"object"==typeof exports?exports.muze=t():e.muze=t()}(window,function(){return function(e){var t={};function __webpack_require__(n){if(t[n])return t[n].exports;var r=t[n]={i:n,l:!1,exports:{}};return e[n].call(r.exports,r,r.exports,__webpack_require__),r.l=!0,r.exports}return __webpack_require__.m=e,__webpack_require__.c=t,__webpack_require__.d=function(e,t,n){__webpack_require__.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},__webpack_require__.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},__webpack_require__.t=function(e,t){if(1&t&&(e=__webpack_require__(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(__webpack_require__.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var r in e)__webpack_require__.d(n,r,function(t){return e[t]}.bind(null,r));return n},__webpack_require__.n=function(e){var t=e&&e.__esModule?function getDefault(){return e.default}:function getModuleExports(){return e};return __webpack_require__.d(t,"a",t),t},__webpack_require__.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},__webpack_require__.p="",__webpack_require__(__webpack_require__.s=7)}([function(e,t,n){(function(e){var r,i,a,o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};!function(n,u){"object"==o(t)&&"object"==o(e)?e.exports=u():(i=[],void 0===(a="function"==typeof(r=u)?r.apply(t,i):r)||(e.exports=a))}(window,function(){return function(e){var t={};function n(r){if(t[r])return t[r].exports;var i=t[r]={i:r,l:!1,exports:{}};return e[r].call(i.exports,i,i.exports,n),i.l=!0,i.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==(void 0===e?"undefined":o(e))&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var i in e)n.d(r,i,function(t){return e[t]}.bind(null,i));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=1)}([function(e){e.exports={name:"datamodel",description:"Relational algebra compliant in-memory tabular data store",homepage:"https://github.com/chartshq/datamodel",version:"2.0.2",license:"MIT",main:"dist/datamodel.js",author:"Charts.com ",keywords:["datamodel","data","relational","algebra","model","muze","fusioncharts","table","tabular","operation"],repository:{type:"git",url:"https://github.com/chartshq/datamodel.git"},contributors:[{name:"Akash Goswami",email:"akash@charts.com"},{name:"Subhash Haldar",email:"subhash@charts.com"},{name:"Rousan Ali",email:"rousan@charts.com",url:"https://rousan.io"},{name:"Ujjal Kumar Dutta",email:"ujjal@charts.com"}],dependencies:{"d3-dsv":"^1.0.8"},devDependencies:{"babel-cli":"6.26.0","babel-core":"^6.26.3","babel-eslint":"6.1.2","babel-loader":"^7.1.4","babel-plugin-transform-runtime":"^6.23.0","babel-preset-env":"^1.7.0","babel-preset-es2015":"^6.24.1","babel-preset-flow":"^6.23.0",chai:"3.5.0","cross-env":"^5.0.5",eslint:"3.19.0","eslint-config-airbnb":"15.1.0","eslint-plugin-import":"2.7.0","eslint-plugin-jsx-a11y":"5.1.1","eslint-plugin-react":"7.3.0","istanbul-instrumenter-loader":"^3.0.0",jsdoc:"3.5.5",json2yaml:"^1.1.0",karma:"1.7.1","karma-chai":"0.1.0","karma-chrome-launcher":"2.1.1","karma-coverage-istanbul-reporter":"^1.3.0","karma-mocha":"1.3.0","karma-spec-reporter":"0.0.31","karma-webpack":"2.0.3",marked:"^0.5.0",mocha:"3.4.2","mocha-webpack":"0.7.0","transform-runtime":"0.0.0",webpack:"^4.12.0","webpack-cli":"^3.0.7","webpack-dev-server":"^3.1.4"},scripts:{test:"npm run lint && npm run ut",ut:"karma start karma.conf.js",utd:"karma start --single-run false --browsers Chrome karma.conf.js ",build:"webpack --mode production","build:dev":"webpack --mode development",start:"webpack-dev-server --config webpack.config.dev.js --mode development --open",lint:"eslint ./src","lint-errors":"eslint --quiet ./src",docs:"rm -rf yaml && mkdir yaml && jsdoc -c jsdoc.conf.json"}}},function(e,t,n){var r=n(2);e.exports=r.default?r.default:r},function(n,c,f){"use strict";f.r(c);var p={};f.r(p),f.d(p,"DataFormat",function(){return b}),f.d(p,"DimensionSubtype",function(){return _}),f.d(p,"MeasureSubtype",function(){return C}),f.d(p,"FieldType",function(){return P}),f.d(p,"FilteringMode",function(){return A});var y={};f.r(y),f.d(y,"DSVArr",function(){return Je}),f.d(y,"DSVStr",function(){return lt}),f.d(y,"FlatJSON",function(){return ft}),f.d(y,"Auto",function(){return ht});var g={};f.r(g),f.d(g,"sum",function(){return Et}),f.d(g,"avg",function(){return Mt}),f.d(g,"min",function(){return Ot}),f.d(g,"max",function(){return Tt}),f.d(g,"first",function(){return Ft}),f.d(g,"last",function(){return Nt}),f.d(g,"count",function(){return jt}),f.d(g,"sd",function(){return It});var b={FLAT_JSON:"FlatJSON",DSV_STR:"DSVStr",DSV_ARR:"DSVArr",AUTO:"Auto"},_={CATEGORICAL:"categorical",TEMPORAL:"temporal",GEO:"geo"},C={DISCRETE:"discrete"},P={MEASURE:"measure",DIMENSION:"dimension"},A={NORMAL:"normal",INVERSE:"inverse",ALL:"all"};function l(e,t){e.length>0&&e.split(",").forEach(function(e){var n=e.split("-"),r=+n[0],i=+(n[1]||n[0]);if(i>=r)for(var a=r;a<=i;a+=1)t(a)})}var O=function(){function e(e,t){for(var n=0;n=0;)o=e[a+1],-1!==r.indexOf(o)&&i.push({index:a,token:o});return i},m.formatAs=function(e,t){var n,r=h(e),i=m.findTokens(t),a=m.getTokenDefinitions(),o=String(t),u=m.TOKEN_PREFIX,c=void 0,s=void 0,l=void 0;for(l=0,n=i.length;l=0;h--)(s=a[h].index)+1!==f.length-1?(void 0===u&&(u=f.length),l=f.substring(s+2,u),f=f.substring(0,s+2)+RegExp.escape(l)+f.substring(u,f.length),u=s):u=s;for(h=0;h1){r=Math.abs(n[1]-n[0]);for(var i=2,a=n.length;i3&&void 0!==arguments[3]&&arguments[3],i=arguments.length>4&&void 0!==arguments[4]?arguments[4]:ye.CROSS,a=[],o=[],u=n||K,c=e.getFieldspace(),s=t.getFieldspace(),f=c.name,h=s.name,d=c.name+"."+s.name,p=L(c,s);if(f===h)throw new Error("DataModels must have different alias names");return c.fields.forEach(function(e){var t=E({},e.schema);-1===p.indexOf(t.name)||r||(t.name=c.name+"."+t.name),a.push(t)}),s.fields.forEach(function(e){var t=E({},e.schema);-1!==p.indexOf(t.name)?r||(t.name=s.name+"."+t.name,a.push(t)):a.push(t)}),l(e._rowDiffset,function(e){var n=!1,d=void 0;l(t._rowDiffset,function(t){var l=[],y={};y[f]={},y[h]={},c.fields.forEach(function(t){l.push(t.data[e]),y[f][t.name]=t.data[e]}),s.fields.forEach(function(e){-1!==p.indexOf(e.schema.name)&&r||l.push(e.data[t]),y[h][e.name]=e.data[t]});var g=Ke(y[f]),v=Ke(y[h]);if(u(g,v)){var m={};l.forEach(function(e,t){m[a[t].name]=e}),n&&ye.CROSS!==i?o[d]=m:(o.push(m),n=!0,d=e)}else if((i===ye.LEFTOUTER||i===ye.RIGHTOUTER)&&!n){var b={},_=c.fields.length-1;l.forEach(function(e,t){b[a[t].name]=t<=_?e:null}),n=!0,d=e,o.push(b)}})}),new At(o,a,{name:d})}function z(e,t){var n=""+e,r=""+t;return nr?1:0}function X(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:z;return e.length>1&&function e(t,n,r,i){if(r===n)return t;var a=n+Math.floor((r-n)/2);return e(t,n,a,i),e(t,a+1,r,i),function(e,t,n,r,i){for(var a=e,o=[],u=t;u<=r;u+=1)o[u]=a[u];for(var c=t,s=n+1,l=t;l<=r;l+=1)c>n?(a[l]=o[s],s+=1):s>r?(a[l]=o[c],c+=1):i(o[c],o[s])<=0?(a[l]=o[c],c+=1):(a[l]=o[s],s+=1)}(t,n,a,r,i),t}(e,0,e.length-1,t),e}function Q(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);to?"desc"===t?-1:1:0}}return i}function Z(e,t){var n=new Map,r=[];return e.forEach(function(e){var i=e[t];n.has(i)?r[n.get(i)][1].push(e):(r.push([i,[e]]),n.set(i,r.length-1))}),r}function ee(e,t,n){var r={label:e[0]};return t.reduce(function(t,r,i){return t[r]=e[1].map(function(e){return e[n[i].index]}),t},r),r}function ne(e,t){var n={},r=[],i=[],a=[],o=e.getFieldspace(),u=t.getFieldspace(),c=o.fieldsObj(),s=u.fieldsObj(),f=o.name+" union "+u.name;if(!M(e._colIdentifier.split(",").sort(),t._colIdentifier.split(",").sort()))return null;function d(e,t,r){l(e._rowDiffset,function(e){var o={},u="";i.forEach(function(n){var r=t[n].data[e];u+="-"+r,o[n]=r}),n[u]||(r&&a.push(o),n[u]=!0)})}return e._colIdentifier.split(",").forEach(function(e){var t=c[e];r.push(E({},t.schema)),i.push(t.schema.name)}),d(t,s,!1),d(e,c,!0),new At(a,r,{name:f})}function re(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);tn&&(n=e)}),[t,n]}(this.data)}},{key:"parse",value:function value(e){return e=parseFloat(e,10),Number.isNaN(e)?null:e}},{key:"unit",value:function value(){return this.fieldUnit}},{key:"scale",value:function value(){return this.fieldScale}},{key:"numberFormat",value:function value(){var e=this.fieldNumberformat;return function(t){return e(t)}}},{key:"defAggFn",value:function value(){return this.fieldDefAggFn}}]),t}(),Ee=function(){function e(e,t){for(var n=0;n=a?c=!0:(r=e.charCodeAt(o++))===at?l=!0:r===ot&&(l=!0,e.charCodeAt(o)===at&&++o),e.slice(i+1,t-1).replace(/""/g,'"')}for(;o2&&void 0!==arguments[2]?arguments[2]:{},i=arguments[3],a=void 0;t!==fe?(a={op:t,meta:r,criteria:i},e._derivation.push(a)):(a=[].concat(Ge(i)),e._derivation.length=0,(n=e._derivation).push.apply(n,Ge(a)))},yt=function ze(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=n.operation||"and",i=n.filterByMeasure||!1,a=[];a=t.length?t.map(function(e){return function(e){var t=e.getData(),n=t.schema,r=e.getFieldsConfig(),a=e.getFieldspace().fieldsObj(),o=t.data,u=Object.values(r).reduce(function(e,t){return e[t.def.name]=a[t.def.name].domain(),e},{});return function(e){return!!o.length&&o.some(function(t){return n.every(function(n){if(!(n.name in e))return!0;var a=e[n.name].valueOf();if(i&&n.type===P.MEASURE)return a>=u[n.name][0]&&a<=u[n.name][1];if(n.type!==P.DIMENSION)return!0;var o=r[n.name].index;return t[o]===e[n.name].valueOf()})})}}(e)}):[function(){return!1}];return"and"===r?e.clone(!1,!1).select(function(e){return a.every(function(t){return t(e)})},{saveChild:!1,mode:A.ALL}):e.clone(!1,!1).select(function(e){return a.some(function(t){return t(e)})},{mode:A.ALL,saveChild:!1})},gt=function Xe(e,t,n,r){var i=e.clone(r.saveChild),a=function(e,t,n,r){var i=[],a=-1,o=void 0,c=function u(e){return n(qe(t,e),e)};return r.mode===A.INVERSE&&(c=function u(e){return!n(qe(t,e))}),l(e,function(e){c(e)&&(-1!==a&&e===a+1?(o=i.length-1,i[o]=i[o].split("-")[0]+"-"+e):i.push(""+e),a=e)}),i.join(",")}(i._rowDiffset,i.getPartialFieldspace().fields,t,n);return i._rowDiffset=a,i.__calculateFieldspace().calculateFieldsConfig(),r.saveChild&&pt(i,ce,{config:n},t),i},vt=function Qe(e,t,n,r){var i=e.clone(n.saveChild),a=t;return n.mode===A.INVERSE&&(a=r.filter(function(e){return-1===t.indexOf(e)})),i._colIdentifier=a.join(","),i.__calculateFieldspace().calculateFieldsConfig(),n.saveChild&&pt(i,se,{projField:t,config:n,actualProjField:a},null),i},mt=function $e(e,t,n,r){r=Object.assign(Object.assign({},Ze),r);var i=y[r.dataFormat];if(!i||"function"!=typeof i)throw new Error("No converter function found for "+r.dataFormat+" format");var a=i(t,r),o=dt(a,2),u=o[0],c=o[1],s=Ue(c,n,u),l=Y.createNamespace(s,r.name);return e._partialFieldspace=l,e._rowDiffset=c.length&&c[0].length?"0-"+(c[0].length-1):"",e._colIdentifier=n.map(function(e){return e.name}).join(),e},bt=function Ze(e,t){for(var n=0;n2&&void 0!==arguments[2]?arguments[2]:{},i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},a=i.nonTraversingModel,o=i.excludeModels||[];t!==a&&((!o.length||-1===o.indexOf(t))&&t.handlePropagation(n,r),t._children.forEach(function(t){var a=_t(n,t),o=dt(a,2),u=o[0],c=o[1];e(t,[u,c],r,i)}))},wt=function nt(e,t,n,r){var i=void 0,a=void 0,o=n.propagationNameSpace,u=n.propagateToSource,c=n.sourceId,s=r.propagateInterpolatedValues,l=[];if(null===e&&!0!==r.persistent)l=[{criteria:[]}];else{var f,h=Object.values(o.mutableActions);!1!==u&&(h=h.filter(function(e){return e.config.sourceId!==c}));var d=h.filter(function(e){return(r.filterFn||function(){return!0})(e,r)}).map(function(e){return e.config.criteria}),p=[];if(!1!==u){var y=Object.values(o.mutableActions);y.forEach(function(e){var t=e.config;!1===t.applyOnSource&&t.action===r.action&&t.sourceId!==c&&(p.push(e.model),(i=y.filter(function(t){return t!==e}).map(function(e){return e.config.criteria})).length&&l.push({criteria:i,models:e.model,path:function e(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];return null!==t._parent&&(n.push(t),e(t._parent,n)),n}(e.model)}))})}i=(f=[]).concat.apply(f,[].concat(Ge(d),[e])).filter(function(e){return null!==e}),l.push({criteria:i,excludeModels:[].concat(p,Ge(r.excludeModels||[]))})}var g=t.model,v=Object.assign({sourceIdentifiers:e,propagationSourceId:c},r),m=t.groupByModel;s&&m&&(a=yt(m,i,{filterByMeasure:s}),xt(m,a,v)),l.forEach(function(e){var t=yt(g,e.criteria),n=e.path;if(n){var r=function(e,t){for(var n=0,r=t.length;n0&&void 0!==arguments[0])||arguments[0],t=void 0;if(!1===(!(arguments.length>1&&void 0!==arguments[1])||arguments[1])){var n=this.getData({getAllFields:!0}),r=n.data,i=n.schema,a=r.map(function(e){var t={};return i.forEach(function(n,r){t[n.name]=e[r]}),t});t=new this.constructor(a,i)}else t=new this.constructor(this);return e&&this._children.push(t),t}},{key:"project",value:function value(e,t){var n={mode:A.NORMAL,saveChild:!0};t=Object.assign({},n,t);var r=this.getFieldsConfig(),i=Object.keys(r),a=t.mode,o=e.reduce(function(e,t){return"RegExp"===t.constructor.name?e.push.apply(e,function(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t1&&void 0!==arguments[1]?arguments[1]:[];pt(this,fe,null,t),this._parent=e,e._children.push(this)}}]),e}(),St=function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function(e,t){var n=[],r=!0,i=!1,a=void 0;try{for(var o,u=e[Symbol.iterator]();!(r=(o=u.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){i=!0,a=e}finally{try{!r&&u.return&&u.return()}finally{if(i)throw a}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")},Pt=function(){function e(e,t){for(var n=0;n0,c=[];if(n.split(",").forEach(function(t){for(var n=0;n=0;u--)i=t[u][0],a=t[u][1],(o=bt(r,i))&&(S(a)?X(n,function(e,t){return a(e[o.index],t[o.index])}):j(a)?function(){var e=Z(n,o.index),t=a[a.length-1],i=a.slice(0,a.length-1),u=i.map(function(e){return bt(r,e)});e.forEach(function(e){e.push(ee(e,i,u))}),X(e,function(e,n){var r=e[2],i=n[2];return t(r,i)}),n.length=0,e.forEach(function(e){n.push.apply(n,Q(e[1]))})}():(a="desc"===String(a).toLowerCase()?"desc":"asc",X(n,$(o.type,a,o.index))));e.uids=[],n.forEach(function(t){e.uids.push(t.pop())})}(a,r),i.columnWise){var s=Array.apply(void 0,Q(Array(a.schema.length))).map(function(){return[]});a.data.forEach(function(e){e.forEach(function(e,t){s[t].push(e)})}),a.data=s}return a}.call(this,this.getPartialFieldspace().fields,this._rowDiffset,e.getAllFields?t.map(function(e){return e.name}).join():this._colIdentifier,e.sort,{columnWise:"column"===e.order,addUid:!!e.withUid});if(!e.formatter)return n;var r=e.formatter,i=n.data,a=n.schema,o=n.uids,u=a.map(function(e){return e.name}),c=Object.keys(r).reduce(function(e,t){var n=u.indexOf(t);return-1!==n&&e.push([n,r[t]]),e},[]);return"column"===e.order?c.forEach(function(e){var t=e[0],n=e[1];i[t].forEach(function(e,r){i[t][r]=n.call(void 0,e,o[r],a[t])})}):i.forEach(function(e,t){c.forEach(function(n){var r=n[0],i=n[1];e[r]=i.call(void 0,e[r],o[t],a[r])})}),n}},{key:"groupBy",value:function value(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{saveChild:!0},r=""+e.join(),i=function de(e,t,n,r){var i=function(e,t){var n=[],r=e.getPartialFieldspace(),i=r.getDimension(),a=r.getMeasure();return Object.entries(i).forEach(function(e){var r=ke(e,1)[0];t&&t.length?-1!==t.indexOf(r)&&n.push(r):n.push(r)}),Object.entries(a).forEach(function(e){var r=ke(e,1)[0];"discrete"===a[r].subType()&&(t&&t.length?-1!==t.indexOf(r)&&n.push(r):n.push(r))}),n}(e,t),a=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n={},r=t,i=e.getPartialFieldspace().getMeasure(),a=we.defaultReducer();return"function"==typeof t&&(a=t),Object.entries(i).forEach(function(e){var o=ke(e,1)[0];"string"==typeof t[o]&&(r[o]=we.resolve(r[o])?we.resolve(r[o]):a),"function"!=typeof t[o]&&(r[o]=void 0),n[o]=r[o]||we.resolve(i[o].defAggFn())||a}),n}(e,n),o=e.getPartialFieldspace(),u=o.fieldsObj(),c=o.name,s=[],f=[],h=[],d={},p=[],y=void 0;Object.entries(u).forEach(function(e){var t=ke(e,2),n=t[0],r=t[1];(-1!==i.indexOf(n)||a[n])&&(h.push(E({},r.schema)),"measure"===r.schema.type&&"discrete"!==r.schema.subtype?f.push(n):"dimension"!==r.schema.type&&"discrete"!==r.schema.subtype||s.push(n))});var g=0;return l(e._rowDiffset,function(e){var t="";s.forEach(function(n){t=t+"-"+u[n].data[e]}),void 0===d[t]?(d[t]=g,p.push({}),s.forEach(function(t){p[g][t]=u[t].data[e]}),f.forEach(function(t){p[g][t]=[u[t].data[e]]}),g+=1):f.forEach(function(n){p[d[t]][n].push(u[n].data[e])})}),p.forEach(function(e){var t=e;f.forEach(function(n){t[n]=a[n](e[n])})}),r?(r.__calculateFieldspace(),y=r):y=new Lt(p,h,{name:c}),y}.apply(void 0,[this,e,t]);return n.saveChild&&(this._children.push(i),pt(i,le,{fieldsArr:e,groupByString:r,defaultReducer:we.defaultReducer()},t)),i._parent=this,i}},{key:"sort",value:function value(e){var t=this.getData({order:"row",sort:e}),n=[t.schema.map(function(e){return e.name})].concat(t.data),r=new this.constructor(n,t.schema,{dataFormat:"DSVArr"});return r._sortingDetails=e,r}},{key:"addField",value:function value(e){var t=e.fieldName();this._colIdentifier+=","+t;var n=this._partialFieldspace;if(n.fieldsObj()[e.fieldName()]){var r=n.fields.findIndex(function(e){return e.name===t});r>=0&&(n.fields[r]=e)}else n.fields.push(e);return this.__calculateFieldspace().calculateFieldsConfig(),this}},{key:"calculateVariable",value:function value(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{saveChild:!0,replaceVar:!1},r=this.getFieldsConfig(),i=t.slice(0,t.length-1),a=t[t.length-1];if(r[e.name]&&!n.replaceVar)throw new Error(e.name+" field already exists in model.");var o=i.map(function(e){var t=r[e];if(!t)throw new Error(e+" is not a valid column name.");return t.index}),u=this.clone(),c=u.getFieldspace().fields,s=o.map(function(e){return c[e]}),f=[];l(u._rowDiffset,function(e){var t=s.map(function(t){return t.data[e]});f[e]=a.apply(void 0,function(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t1&&void 0!==arguments[1]?arguments[1]:{},n=arguments[2],r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},i=t.isMutableAction,a=t.sourceId,o=t.payload,u=function e(t){return t._parent?e(t._parent):t}(this),c=u._propagationNameSpace,s={groupByModel:function e(t){return t._parent&&t._derivation.find(function(e){return"group"!==e.op})?e(t._parent):t}(this),model:u};return n&&function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments[2],r=void 0,i=t.isMutableAction,a=t.criteria,o=t.action+"-"+t.sourceId;r=i?e.mutableActions:e.immutableActions,null===a?delete r[o]:r[o]={model:n,config:t}}(c,t,this),wt(e,s,{propagationNameSpace:c,sourceId:a},Object.assign({payload:o},t)),i&&function(e,t,n){var r=e.immutableActions;for(var i in r){var a=r[i].config,o=n.config.sourceId,u=!n.propConfig.filterImmutableAction||n.propConfig.filterImmutableAction(a,n.config);if(a.sourceId!==o&&u){var c=a.criteria;wt(c,t,{propagationNameSpace:e,propagateToSource:!1,sourceId:o},a)}}}(c,s,{config:t,propConfig:r}),this}},{key:"on",value:function value(e,t){switch(e){case"propagation":this._onPropagation.push(t)}return this}},{key:"unsubscribe",value:function value(e){switch(e){case"propagation":this._onPropagation=[]}return this}},{key:"handlePropagation",value:function value(e,t){var n=this;this._onPropagation.forEach(function(r){return r.call(n,e,t)})}},{key:"bin",value:function value(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=this.clone(),r=t.name||e+"_binned";if(this.getFieldsConfig()[r]||!this.getFieldsConfig()[e])throw new Error("Field "+e+" already exists.");var i=function I(e,t,n){var r=n.buckets,i=n.binCount,a=n.binSize,o=n.start,u=[],c=[],s=e.domain(),f=ue(s,2),h=f[0],d=f[1],p=d,y=[],g=void 0,v=void 0,m=void 0,b=void 0;if(l(t,function(t){u.push({data:e.data[t],index:t})}),!r){var _=((d+=1)-h)%(a=a||(d-h)/i);for(i||0===_||(d=d+a-_),g=h+a;g<=d;)y.push(g),g+=a;r={start:o=o||h,stops:y}}v=0===r.start?0:r.start||h,r.stops.forEach(function(e){u.filter(function(t){return t.data>=v&&t.data=r.stops[r.stops.length-1]}).forEach(function(e){c[e.index]=r.stops[r.stops.length-1]+"-"+p}),r.stops.unshift(r.start),b=new Set(r.stops),hr.stops[r.stops.length-1]&&b.add(p),b=[].concat(function(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t1&&void 0!==arguments[1]?arguments[1]:{saveChild:!0}).saveChild;return t.forEach(function(e){n=e(n),i.push.apply(i,function(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t1&&r.dispose(),n}},bin:function bin(){for(var e=arguments.length,t=Array(e),n=0;n2?(i=arguments.length<=0?void 0:arguments[0],r=arguments.length<=1?void 0:arguments[1],a=arguments.length<=2?void 0:arguments[2]):(i=null,r=arguments.length<=0?void 0:arguments[0],a=arguments.length<=1?void 0:arguments[1]),t=a(w),(e=n=new A(t.fn)).addDependencies.apply(e,P(t.dependencies)),this._addPropInModel(i,function(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}({},r,n)),this}},{key:"_addPropInModel",value:function value(e,t){return this._graph.createNodesFrom(t,e),this}},{key:"on",value:function value(e,t,n){var r,i=e instanceof Array?e:[e],a=this._graph.createElectricNodeOf(i,{type:"CurrFrame",fn:t});return n&&(r=this._graph.stopPropagation().setPropagationOverride("nextFrame")).resetNodeValue.apply(r,P(e)),a}},{key:"next",value:function value(e,t,n){var r,i=e instanceof Array?e:[e],a=this._graph.createElectricNodeOf(i,{type:"NextFrame",fn:t});return n&&(r=this._graph.stopPropagation().setPropagationOverride("currentFrame")).resetNodeValue.apply(r,P(e)),a}},{key:"lock",value:function value(){return this._lockFlag=!0,this._reqQ.length=0,this}},{key:"unlock",value:function value(){return this._lockFlag=!1,this.setProp.apply(this,P(this._reqQ)),this._reqQ.length=0,this}},{key:"prop",value:function value(){var e,t=void 0,n=void 0;switch(e=arguments.length){case 1:t=arguments.length<=0?void 0:arguments[0];break;case 2:t=arguments.length<=0?void 0:arguments[0],n=arguments.length<=1?void 0:arguments[1];break;default:return this}return 2===e?(this._lockFlag?this._reqQ.push([t,n]):this.setProp([t,n]),this):this._graph.getNodeValue(t)}},{key:"setProp",value:function value(){for(var e,t=this,n=arguments.length,r=Array(n),i=0;i/gi),e},SmartLabelManager.store={},SmartLabelManager.prototype._calCharDimWithCache=function(e,t,n){if(!this._init)return!1;var r,i,a,o,u,c,s=this.options.maxCacheLimit,l=this._container,h=this.style||{},d=this._advancedCache||(this._advancedCache={}),p=this._advancedCacheKey||(this._advancedCacheKey=[]),y=e+(h.fontSize||"")+(h.fontFamily||"")+(h.fontWeight||"")+(h.fontStyle||""),g=e+"init"+(h.fontSize||"")+(h.fontFamily||"")+(h.fontWeight||"")+(h.fontStyle||"");return f[e]&&(e=f[e]),t?void 0===(c=d[g])&&(l.innerHTML=e.repeat?e.repeat(n):Array(n+1).join(e),a=l.offsetWidth,l.innerHTML=e,o=l.offsetWidth,c=d[g]=(a-n*o)/(n+1),p.push(g),p.length>s&&delete d[p.shift()]):c=0,(u=d[y])?(i=u.split(","),{width:parseFloat(i[0],10),height:parseFloat(i[1],10)}):(l.innerHTML=e,r={height:l.offsetHeight,width:l.offsetWidth+c},d[y]=r.width+","+r.height,p.push(y),p.length>s&&delete d[p.shift()],r)},SmartLabelManager.prototype._getWidthFn=function(){var e=this._containerObj,t=this._container,n=e.svgText;return n?function(e){var t,r;return n.textContent=e,(r=(t=n.getBBox()).width-d)<1&&(r=t.width),r}:function(e){return t.innerHTML=e,t.offsetWidth}},SmartLabelManager.prototype.setStyle=function(e){return this._init?e!==this.style||this._styleNotSet?(e||(e=this.style),o.setLineHeight(e),this.style=e,this._containerObj=t=this._containerManager.get(e),this._containerObj?(this._container=t.node,this._context=t.context,this._cache=t.charCache,this._lineHeight=t.lineHeight,this._styleNotSet=!1):this._styleNotSet=!0,this):void 0:this;var t},SmartLabelManager.prototype.useEllipsesOnOverflow=function(e){return this._init?(this._showNoEllipses=!e,this):this},SmartLabelManager.prototype.getSmartText=function(e,t,n,r){if(!this._init)return!1;void 0===e||null===e?e="":"string"!=typeof e&&(e=e.toString());var i,a,c,l,f,d,p,y,g,v,m,b,_,x,w,k,C,S,P,A,E,M,O,T,F,N,j=!1,I=0,D=-1,L=-1,R=-1,B=0,z=0,H=[],V=0,U=this._showNoEllipses?"":"...",W=this._lineHeight,q=this._context,G=this._container,Y=this._containerObj,X=Y.ellipsesWidth,K=Y.dotWidth,$=[],Q=-1,Z=-1,J=-1,ee=function fastTrim(e){for(var t=/\s/,n=(e=e.replace(/^\s\s*/,"")).length;t.test(e.charAt(n-=1)););return e.slice(0,n+1)},te={text:e,maxWidth:t,maxHeight:n,width:null,height:null,oriTextWidth:null,oriTextHeight:null,oriText:e,isTruncated:!1};if(b=this._getWidthFn(),n===W&&(n*=1.2),G){if(!h.isBrowserLess){if((j=o.xmlTagRegEx.test(e))?(G.innerHTML=e,te.oriTextWidth=p=G.offsetWidth,te.oriTextHeight=y=G.offsetHeight):(l=e.replace(o.ltgtRegex,function(e){return"<"===e?"<":">"}),w=this.getOriSize(l,!0),te.oriTextWidth=p=w.width,te.oriTextHeight=y=w.height),y<=n&&p<=t)return te.width=te.oriTextWidth=p,te.height=te.oriTextHeight=y,te;if(W>n)return te.text="",te.width=te.oriTextWidth=0,te.height=te.oriTextHeight=0,te}if(e=ee(e).replace(/(\s+)/g," "),f=this._showNoEllipses?t:t-X,!j){if(i=(H=e.split("")).length,a="",c=[],m=H[0],this._cache[m]?P=this._cache[m].width:(P=b(m),this._cache[m]={width:P}),f>P)V=(c=e.substr(0,o.getNearestBreakIndex(e,f,this)).split("")).length;else{if(P>t)return te.text="",te.width=te.oriTextWidth=te.height=te.oriTextHeight=0,te;U&&((f=t-2*K)>P?U="..":(f=t-K)>P?U=".":(f=0,U=""))}if(B=b(c.join("")),z=this._lineHeight,r){for(;Vf&&(a||(a=c.slice(0,-1).join("")),B>t))return te.text=ee(a)+U,te.tooltext=te.oriText,te.width=b(te.text),te.height=this._lineHeight,te;return te.text=c.join(""),te.width=B,te.height=this._lineHeight,te}for(;Vf&&(a||(a=c.slice(0,-1).join("")),B>t)){if(L=e.substr(0,c.length).lastIndexOf(" "),D=e.substr(0,c.length).lastIndexOf("-"),L>R?(B=b(c.slice(R+1,L).join("")),c.splice(L,1,"
"),R=L,g=L+1):D>R?(D===c.length-1?(B=b(c.slice(R+1,L).join("")),c.splice(D,1,"
-")):(B=b(c.slice(R+1,L).join("")),c.splice(D,1,"-
")),R=D,g=D+1):(c.splice(c.length-1,1,"
"+H[V]),J=c.length-2,B=b(c.slice(R+1,J+1).join("")),R=J,g=V),(z+=this._lineHeight)>n)return te.text=ee(a)+U,te.tooltext=te.oriText,te.width=t,te.height=z-this._lineHeight,te;I=s(I,B),a=null,v=o.getNearestBreakIndex(e.substr(g),f,this),B=b(e.substr(g,v||1)),c.length)/g,'$1'),G.innerHTML=e,C=0,S=(k=G[h.childRetriverFn](h.childRetriverString)).length;Ct)return te.text="",te.width=te.oriTextWidth=te.height=te.oriTextHeight=0,te;if(P>f&&!this._showNoEllipses&&((f=t-2*K)>P?U="..":(f=t-K)>P?U=".":(f=0,U="")),_=$[0].elem.offsetLeft,x=$[0].elem.offsetTop,r)for(;Vf&&(N||(N=V),G.offsetWidth>t&&(F=V,V=i));else for(;Vf?(N||(N=V),M>t&&(L=$[V].spaceIdx,D=$[V].dashIdx,L>R?($[L].elem.innerHTML="
",R=L):D>R?($[D].elem.innerHTML=D===V?"
-":"-
",R=D):A.parentNode.insertBefore(T=u.createElement("br"),A),A.offsetHeight+A.offsetTop>n?(T?T.parentNode.removeChild(T):R===D?$[D].elem.innerHTML="-":$[L].elem.innerHTML=" ",F=V,V=i):N=null)):O>n&&(F=V,V=i);if(F=N;V-=1)(A=$[V].elem).parentNode.removeChild(A);for(;V>=0;V-=1)A=$[V].elem,o.classNameBrReg.test(A.className)?A.parentNode.removeChild(A):V=0}return te.text=G.innerHTML.replace(o.spanRemovalRegx,"$1").replace(/\&\;/g,"&"),te.isTruncated&&(te.text+=U,te.tooltext=d),te.height=G.offsetHeight,te.width=G.offsetWidth,te}return te.error=new Error("Body Tag Missing!"),te},SmartLabelManager.prototype.getOriSize=function(e,t){if(!this._init)return!1;var n,r,i,a,o,u=0,c=0,f={};if(!t)return this._calCharDimWithCache(e);for(a=0,o=(n=e.split("")).length;a]+?\>)|(&(?:[a-z]+|#[0-9]+);|.)/gi,spanAdditionReplacer:'$1$2',spanRemovalRegx:new RegExp("\\]+?"+c+"[^\\>]{0,}\\>(.*?)\\<\\/span\\>","ig"),xmlTagRegEx:new RegExp("<[^>][^<]*[^>]+>","i"),ltgtRegex:/<|>/g,brReplaceRegex://gi,testStrAvg:"WgI",parentContainerStyle:{position:"absolute",top:"-9999em",whiteSpace:"nowrap",padding:"0px",width:"1px",height:"1px",overflow:"hidden"},supportedStyle:{font:"font",fontFamily:"font-family","font-family":"font-family",fontWeight:"font-weight","font-weight":"font-weight",fontSize:"font-size","font-size":"font-size",lineHeight:"line-height","line-height":"line-height",fontStyle:"font-style","font-style":"font-style"},getDocumentSupport:function getDocumentSupport(){var r,i,a;return t.getElementsByClassName?(r="getElementsByClassName",i=c,a=!0):(r="getElementsByTagName",i="span",a=!1),{isIE:/msie/i.test(n)&&!e.opera,hasSVG:Boolean(e.SVGAngle||t.implementation.hasFeature("http://www.w3.org/TR/SVG11/feature#BasicStructure","1.1")),isHeadLess:new RegExp(" HtmlUnit").test(n),isWebKit:new RegExp(" AppleWebKit/").test(n),childRetriverFn:r,childRetriverString:i,noClassTesting:a}},createContainer:function createContainer(e){var n,r;if(e&&(e.offsetWidth||e.offsetHeight)){if(e.appendChild)return e.appendChild(r=t.createElement("DIV")),r.className=u,r.setAttribute("aria-hidden","true"),r.setAttribute("role","presentation"),r}else if((n=t.getElementsByTagName("body")[0])&&n.appendChild)return(r=t.createElement("DIV")).className=u,r.setAttribute("aria-hidden","true"),r.setAttribute("role","presentation"),1,n.appendChild(r),r},getNearestBreakIndex:function getNearestBreakIndex(e,t,n){if(!e||!e.length)return 0;var r,o=n._getWidthFn(),u=0,c=0,s=o(e),l=s/e.length;if(r=t,u=i(t/l),se.length&&(r=t-s,u=e.length);r>0;){if(r=t-o(e.substr(0,u)),!(c=a(r/l)))return u;u+=c}for(;r<0;){if(r=t-o(e.substr(0,u)),!(c=a(r/l)))return u;u+=c}return u},setLineHeight:function setLineHeight(e){var t=e.fontSize=e.fontSize||"12px";return e.lineHeight=e.lineHeight||e["line-height"]||1.2*parseInt(t,10)+"px",e}}}};t.default=r,e.exports=t.default},function(e){e.exports={name:"muze",private:!0,version:"1.0.2",description:"Composable visualisation library for web with a data-first approach",homepage:"https://www.charts.com/muze",license:"MIT",author:"Charts.com ",contributors:[{name:"Akash Ghoswami",email:"akash@charts.com"},{name:"Ranajit Banerjee",email:"ranajit.banerjee@charts.com",url:"https://github.com/ranajitbanerjee"},{name:"Mridul Meharia",email:"mridul@charts.com",url:"https://github.com/mridulmeh"},{name:"Subhash Haldar",email:"subhash@charts.com"},{name:"Sandeep Acharya",email:"sandeep@charts.com"},{name:"Rousan Ali",email:"rousan@charts.com",url:"https://rousan.io"},{name:"Ujjal Kumar Dutta",email:"ujjal@charts.com"}],main:"src/index.js",keywords:["muze","svg","vector","graphics","data-visualization","visualization","renderer","fusioncharts","relational","algebra","relation"],repository:{type:"git",url:"https://github.com/chartshq/muze"},dependencies:{"@chartshq/layout":"^1.0.0","@chartshq/muze-firebolt":"^1.0.0","@chartshq/muze-legend":"^1.0.0","muze-utils":"^1.0.0","@chartshq/visual-cell":"^1.0.0","@chartshq/visual-group":"^1.0.0","@chartshq/visual-layer":"^1.0.0","@chartshq/visual-unit":"^1.0.0"}}},function(e,t,n){var r=n(44);e.exports=r.default?r.default:r},function(e,t,n){"use strict";var r=function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}(n(5)).default.init("undefined"!=typeof window?window:void 0),i=r.win.document,a=r.getDocumentSupport(),o=a.isWebKit?0:4.5;function ContainerManager(e,t,n){var r;n=(n=n>5?n:5)<20?n:20,this.maxContainers=n,this.first=null,this.last=null,this.containers={},this.length=0,this.rootNode=e,t&&((r=i.createElementNS("http://www.w3.org/2000/svg","svg")).setAttributeNS("http://www.w3.org/2000/svg","xlink","http://www.w3.org/1999/xlink"),r.setAttributeNS("http://www.w3.org/2000/svg","height","0"),r.setAttributeNS("http://www.w3.org/2000/svg","width","0"),this.svgRoot=r,this.rootNode.appendChild(r))}ContainerManager.prototype.get=function(e){var t,n,i,a=this.containers,o=this.length,u=this.maxContainers,c="";for(n in r.supportedStyle)void 0!==e[n]&&(c+=r.supportedStyle[n]+":"+e[n]+";");if(!c)return!1;if(i=a[c])this.first!==i&&(i.prev&&(i.prev.next=i.next),i.next&&(i.next.prev=i.prev),i.next=this.first,i.next.prev=i,this.last===i&&(this.last=i.prev),i.prev=null,this.first=i);else{if(o>=u)for(t=o-u+1;t--;)this.removeContainer(this.last);i=this.addContainer(c)}return i},ContainerManager.prototype.addContainer=function(e){var t,n;return this.containers[e]=n={next:null,prev:null,node:null,ellipsesWidth:0,lineHeight:0,dotWidth:0,avgCharWidth:4,keyStr:e,charCache:{}},n.next=this.first,n.next&&(n.next.prev=n),this.first=n,this.last||(this.last=n),this.length+=1,t=n.node=i.createElement("div"),this.rootNode.appendChild(t),a.isIE&&!a.hasSVG?t.style.setAttribute("cssText",e):t.setAttribute("style",e),t.setAttribute("aria-hidden","true"),t.setAttribute("role","presentation"),t.style.display="inline-block",t.innerHTML=r.testStrAvg,n.lineHeight=t.offsetHeight,n.avgCharWidth=t.offsetWidth/3,a.isBrowserLess?((t=n.svgText=i.createElementNS("http://www.w3.org/2000/svg","text")).setAttribute("style",e),this.svgRoot.appendChild(t),t.textContent=r.testStrAvg,n.lineHeight=t.getBBox().height,n.avgCharWidth=(t.getBBox().width-o)/3,t.textContent="...",n.ellipsesWidth=t.getBBox().width-o,t.textContent=".",n.dotWidth=t.getBBox().width-o):(t.innerHTML="...",n.ellipsesWidth=t.offsetWidth,t.innerHTML=".",n.dotWidth=t.offsetWidth,t.innerHTML=""),n},ContainerManager.prototype.removeContainer=function(e){var t=e.keyStr;t&&this.length&&e&&(this.length-=1,e.prev&&(e.prev.next=e.next),e.next&&(e.next.prev=e.prev),this.first===e&&(this.first=e.next),this.last===e&&(this.last=e.prev),e.node.parentNode.removeChild(e.node),delete this.containers[t])},ContainerManager.prototype.dispose=function(){var e,t=this.containers;for(e in this.maxContainers=null,t)this.removeContainer(t[e]);this.rootNode.parentNode.removeChild(this.rootNode),this.rootNode=null,this.first=null,this.last=null},e.exports=ContainerManager},function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,,function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,function(e,t,n){"use strict";n.r(t);var r={};n.r(r),n.d(r,"scaleLinear",function(){return linear_linear}),n.d(r,"scaleThreshold",function(){return threshold_threshold}),n.d(r,"scaleLog",function(){return log}),n.d(r,"scalePow",function(){return pow}),n.d(r,"scaleIdentity",function(){return identity_identity}),n.d(r,"scaleOrdinal",function(){return ordinal}),n.d(r,"scaleSequential",function(){return sequential}),n.d(r,"scaleQuantize",function(){return quantize_quantize}),n.d(r,"scaleQuantile",function(){return quantile_quantile}),n.d(r,"schemeCategory10",function(){return tn}),n.d(r,"schemeCategory20",function(){return rn}),n.d(r,"schemeCategory20b",function(){return nn}),n.d(r,"scaleBand",function(){return band}),n.d(r,"scaleTime",function(){return Jt});var i={};n.r(i),n.d(i,"schemeDark2",function(){return cn}),n.d(i,"schemePaired",function(){return sn}),n.d(i,"schemeAccent",function(){return un}),n.d(i,"schemePastel1",function(){return ln}),n.d(i,"schemePastel2",function(){return fn}),n.d(i,"schemeSet1",function(){return hn}),n.d(i,"schemeSet2",function(){return dn}),n.d(i,"schemeSet3",function(){return pn}),n.d(i,"schemeBlues",function(){return zn}),n.d(i,"schemeBrBG",function(){return gn}),n.d(i,"schemePRGn",function(){return mn}),n.d(i,"schemePiYG",function(){return _n}),n.d(i,"interpolateBrBG",function(){return vn}),n.d(i,"interpolatePRGn",function(){return bn}),n.d(i,"interpolatePiYG",function(){return xn}),n.d(i,"interpolatePuOr",function(){return wn}),n.d(i,"interpolateRdBu",function(){return kn}),n.d(i,"interpolateRdGy",function(){return Cn}),n.d(i,"interpolateRdYlBu",function(){return Sn}),n.d(i,"interpolateRdYlGn",function(){return Pn}),n.d(i,"interpolateSpectral",function(){return An}),n.d(i,"interpolateBlues",function(){return Hn}),n.d(i,"interpolateGreens",function(){return Vn}),n.d(i,"interpolateGreys",function(){return Un}),n.d(i,"interpolateOranges",function(){return Gn}),n.d(i,"interpolatePurples",function(){return Wn}),n.d(i,"interpolateReds",function(){return qn}),n.d(i,"interpolateViridis",function(){return Zn}),n.d(i,"interpolateInferno",function(){return er}),n.d(i,"interpolateMagma",function(){return Jn}),n.d(i,"interpolatePlasma",function(){return tr}),n.d(i,"interpolateWarm",function(){return Xn}),n.d(i,"interpolateCool",function(){return Kn}),n.d(i,"interpolateCubehelixDefault",function(){return Yn}),n.d(i,"interpolateBuGn",function(){return En}),n.d(i,"interpolateBuPu",function(){return Mn}),n.d(i,"interpolateGnBu",function(){return On}),n.d(i,"interpolateOrRd",function(){return Tn}),n.d(i,"interpolatePuBuGn",function(){return Fn}),n.d(i,"interpolatePuBu",function(){return Nn}),n.d(i,"interpolatePuRd",function(){return jn}),n.d(i,"interpolateRdPu",function(){return In}),n.d(i,"interpolateYlGnBu",function(){return Dn}),n.d(i,"interpolateYlGn",function(){return Ln}),n.d(i,"interpolateYlOrBr",function(){return Rn}),n.d(i,"interpolateYlOrRd",function(){return Bn}),n.d(i,"interpolateRainbow",function(){return Qn});var a={};n.r(a),n.d(a,"DRAG",function(){return Qo}),n.d(a,"HOVER",function(){return Zo}),n.d(a,"SELECTIONDRAG",function(){return Jo}),n.d(a,"CLICK",function(){return eu}),n.d(a,"LONGTOUCH",function(){return tu}),n.d(a,"TOUCHDRAG",function(){return nu}),n.d(a,"ALL_ACTIONS",function(){return ru});var o={};n.r(o),n.d(o,"SELECTION_NEW_ENTRY",function(){return iu}),n.d(o,"SELECTION_NEW_EXIT",function(){return au}),n.d(o,"SELECTION_NULL",function(){return ou}),n.d(o,"SELECTION_OLD_ENTRY",function(){return uu}),n.d(o,"SELECTION_OLD_EXIT",function(){return cu});var u={};n.r(u),n.d(u,"BRUSH",function(){return wu}),n.d(u,"HIGHLIGHT",function(){return ku}),n.d(u,"TOOLTIP",function(){return Cu}),n.d(u,"FILTER",function(){return Su}),n.d(u,"SELECT",function(){return Pu});var c={};n.r(c),n.d(c,"HighlightBeahviour",function(){return Eu}),n.d(c,"BrushBehaviour",function(){return Ou}),n.d(c,"FilterBehaviour",function(){return Fu}),n.d(c,"SelectBehaviour",function(){return Lu});var s={};n.r(s),n.d(s,"SelectionBox",function(){return Ju}),n.d(s,"Tooltip",function(){return gc}),n.d(s,"Crossline",function(){return mc}),n.d(s,"PlotHighlighter",function(){return xc}),n.d(s,"FilterEffect",function(){return kc}),n.d(s,"PersistentAnchors",function(){return Ec}),n.d(s,"BrushAnchors",function(){return Tc}),n.d(s,"AnchorEffect",function(){return Pc});var l={};n.r(l),n.d(l,"BOTTOM",function(){return Gc}),n.d(l,"TOP",function(){return Yc}),n.d(l,"LEFT",function(){return Xc}),n.d(l,"RIGHT",function(){return Kc}),n.d(l,"axisOrientationMap",function(){return $c});var f={};n.r(f),n.d(f,"LINEAR",function(){return Qc}),n.d(f,"BAND",function(){return Zc}),n.d(f,"TIME",function(){return Jc}),n.d(f,"COLOR",function(){return es}),n.d(f,"ORDINAL",function(){return ts}),n.d(f,"QUANTIZE",function(){return ns}),n.d(f,"QUANTILE",function(){return rs}),n.d(f,"LOG",function(){return is}),n.d(f,"POW",function(){return as}),n.d(f,"IDENTITY",function(){return os}),n.d(f,"SEQUENTIAL",function(){return us}),n.d(f,"THRESHOLD",function(){return cs});var h={};n.r(h),n.d(h,"CONFIG",function(){return ad}),n.d(h,"DATA",function(){return od}),n.d(h,"AXES",function(){return ud}),n.d(h,"LAYERDEFS",function(){return cd}),n.d(h,"WIDTH",function(){return sd}),n.d(h,"HEIGHT",function(){return ld}),n.d(h,"MOUNT",function(){return fd}),n.d(h,"primaryXAxisUpdated",function(){return hd}),n.d(h,"primaryYAxisUpdated",function(){return dd}),n.d(h,"secondaryXAxisUpdated",function(){return pd}),n.d(h,"secondaryYAxisUpdated",function(){return yd}),n.d(h,"TRANSFORM",function(){return gd}),n.d(h,"DATADOMAIN",function(){return vd}),n.d(h,"LAYERSCREATED",function(){return md}),n.d(h,"FIELDS",function(){return bd}),n.d(h,"TIMEDIFFS",function(){return _d}),n.d(h,"LAYERAXISINDEX",function(){return xd});var d={};n.r(d),n.d(d,"SelectBehaviour",function(){return wp});var y={};n.r(y),n.d(y,"SelectionBox",function(){return zp}),n.d(y,"LegendHighlighter",function(){return Up});var g={};n.r(g),n.d(g,"share",function(){return Oy}),n.d(g,"html",function(){return operators_html});var v=function(e,t){return et?1:e>=t?0:NaN},m=function(e){return 1===e.length&&(e=function ascendingComparator(e){return function(t,n){return v(e(t),n)}}(e)),{left:function left(t,n,r,i){for(null==r&&(r=0),null==i&&(i=t.length);r>>1;e(t[a],n)<0?r=a+1:i=a}return r},right:function right(t,n,r,i){for(null==r&&(r=0),null==i&&(i=t.length);r>>1;e(t[a],n)>0?i=a:r=a+1}return r}}};var b=m(v),_=b.right,x=(b.left,_);var w=function(e){return null===e?NaN:+e},k=Array.prototype,C=(k.slice,k.map,function(e,t,n){e=+e,t=+t,n=(i=arguments.length)<2?(t=e,e=0,1):i<3?1:+n;for(var r=-1,i=0|Math.max(0,Math.ceil((t-e)/n)),a=new Array(i);++r0)return[e];if((r=t0)for(e=Math.ceil(e/o),t=Math.floor(t/o),a=new Array(i=Math.ceil(t-e+1));++u=0?(a>=S?10:a>=P?5:a>=A?2:1)*Math.pow(10,i):-Math.pow(10,-i)/(a>=S?10:a>=P?5:a>=A?2:1)}function tickStep(e,t,n){var r=Math.abs(t-e)/Math.max(0,n),i=Math.pow(10,Math.floor(Math.log(r)/Math.LN10)),a=r/i;return a>=S?i*=10:a>=P?i*=5:a>=A&&(i*=2),t=1)return+n(e[r-1],r-1,e);var r,i=(r-1)*t,a=Math.floor(i),o=+n(e[a],a,e);return o+(+n(e[a+1],a+1,e)-o)*(i-a)}};function map_Map(){}function map_map(e,t){var n=new map_Map;if(e instanceof map_Map)e.each(function(e,t){n.set(t,e)});else if(Array.isArray(e)){var r,i=-1,a=e.length;if(null==t)for(;++i=r.length)return null!=e&&n.sort(e),null!=t?t(n):n;for(var u,c,s,l=-1,f=n.length,h=r[i++],d=O(),p=a();++lr.length)return e;var a,o=i[n-1];return null!=t&&n>=r.length?a=e.entries():(a=[],e.each(function(e,t){a.push({key:t,values:_entries(e,n)})})),null!=o?a.sort(function(e,t){return o(e.key,t.key)}):a}(apply(e,0,createMap,setMap),0)},key:function key(e){return r.push(e),n},sortKeys:function sortKeys(e){return i[r.length-1]=e,n},sortValues:function sortValues(t){return e=t,n},rollup:function rollup(e){return t=e,n}}};function createObject(){return{}}function setObject(e,t,n){e[t]=n}function createMap(){return O()}function setMap(e,t,n){e.set(t,n)}function set_Set(){}var F=O.prototype;function set_set(e,t){var n=new set_Set;if(e instanceof set_Set)e.each(function(e){n.add(e)});else if(e){var r=-1,i=e.length;if(null==t)for(;++r1?+t:s,f=a[1]a[1-f]))return n=Math.max(0,getClosestIndexOf(h,s)),c=getClosestIndexOf(h,l),o=s===l?n:Math.max(n,c-1),f&&(u=n,n=d-o,o=d-u),n>o?void 0:r().slice(n,o+1)},n.invert=function(e,t){var n,o,u=+e,c=arguments.length>1?+t:u,s=a[1]a[1-s]))return n=Math.max(0,getClosestIndexOf(l,u,"left")),r()[s?f-n:n]},rescale()}function getClosestIndexOf(e,t,n){for(var r,i,a,o=0,u=e.length-1;ot?0===u?u:"left"===n?u-1:u:u===e.length-1?u:"left"===n?u:u+1:u}var L=function(e,t,n){e.prototype=t.prototype=n,n.constructor=e};function extend(e,t){var n=Object.create(e.prototype);for(var r in t)n[r]=t[r];return n}function Color(){}var R="\\s*([+-]?\\d+)\\s*",B="\\s*([+-]?\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)\\s*",z="\\s*([+-]?\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)%\\s*",H=/^#([0-9a-f]{3})$/,V=/^#([0-9a-f]{6})$/,U=new RegExp("^rgb\\("+[R,R,R]+"\\)$"),W=new RegExp("^rgb\\("+[z,z,z]+"\\)$"),q=new RegExp("^rgba\\("+[R,R,R,B]+"\\)$"),G=new RegExp("^rgba\\("+[z,z,z,B]+"\\)$"),Y=new RegExp("^hsl\\("+[B,z,z]+"\\)$"),X=new RegExp("^hsla\\("+[B,z,z,B]+"\\)$"),K={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};function color_color(e){var t;return e=(e+"").trim().toLowerCase(),(t=H.exec(e))?new Rgb((t=parseInt(t[1],16))>>8&15|t>>4&240,t>>4&15|240&t,(15&t)<<4|15&t,1):(t=V.exec(e))?rgbn(parseInt(t[1],16)):(t=U.exec(e))?new Rgb(t[1],t[2],t[3],1):(t=W.exec(e))?new Rgb(255*t[1]/100,255*t[2]/100,255*t[3]/100,1):(t=q.exec(e))?rgba(t[1],t[2],t[3],t[4]):(t=G.exec(e))?rgba(255*t[1]/100,255*t[2]/100,255*t[3]/100,t[4]):(t=Y.exec(e))?hsla(t[1],t[2]/100,t[3]/100,1):(t=X.exec(e))?hsla(t[1],t[2]/100,t[3]/100,t[4]):K.hasOwnProperty(e)?rgbn(K[e]):"transparent"===e?new Rgb(NaN,NaN,NaN,0):null}function rgbn(e){return new Rgb(e>>16&255,e>>8&255,255&e,1)}function rgba(e,t,n,r){return r<=0&&(e=t=n=NaN),new Rgb(e,t,n,r)}function rgbConvert(e){return e instanceof Color||(e=color_color(e)),e?new Rgb((e=e.rgb()).r,e.g,e.b,e.opacity):new Rgb}function color_rgb(e,t,n,r){return 1===arguments.length?rgbConvert(e):new Rgb(e,t,n,null==r?1:r)}function Rgb(e,t,n,r){this.r=+e,this.g=+t,this.b=+n,this.opacity=+r}function _hex(e){return((e=Math.max(0,Math.min(255,Math.round(e)||0)))<16?"0":"")+e.toString(16)}function hsla(e,t,n,r){return r<=0?e=t=n=NaN:n<=0||n>=1?e=t=NaN:t<=0&&(e=NaN),new Hsl(e,t,n,r)}function hsl(e,t,n,r){return 1===arguments.length?function hslConvert(e){if(e instanceof Hsl)return new Hsl(e.h,e.s,e.l,e.opacity);if(e instanceof Color||(e=color_color(e)),!e)return new Hsl;if(e instanceof Hsl)return e;var t=(e=e.rgb()).r/255,n=e.g/255,r=e.b/255,i=Math.min(t,n,r),a=Math.max(t,n,r),o=NaN,u=a-i,c=(a+i)/2;return u?(o=t===a?(n-r)/u+6*(n0&&c<1?0:o,new Hsl(o,u,c,e.opacity)}(e):new Hsl(e,t,n,null==r?1:r)}function Hsl(e,t,n,r){this.h=+e,this.s=+t,this.l=+n,this.opacity=+r}function hsl2rgb(e,t,n){return 255*(e<60?t+(n-t)*e/60:e<180?n:e<240?t+(n-t)*(240-e)/60:t)}L(Color,color_color,{displayable:function displayable(){return this.rgb().displayable()},hex:function hex(){return this.rgb().hex()},toString:function toString(){return this.rgb()+""}}),L(Rgb,color_rgb,extend(Color,{brighter:function brighter(e){return e=null==e?1/.7:Math.pow(1/.7,e),new Rgb(this.r*e,this.g*e,this.b*e,this.opacity)},darker:function darker(e){return e=null==e?.7:Math.pow(.7,e),new Rgb(this.r*e,this.g*e,this.b*e,this.opacity)},rgb:function rgb(){return this},displayable:function displayable(){return 0<=this.r&&this.r<=255&&0<=this.g&&this.g<=255&&0<=this.b&&this.b<=255&&0<=this.opacity&&this.opacity<=1},hex:function hex(){return"#"+_hex(this.r)+_hex(this.g)+_hex(this.b)},toString:function toString(){var e=this.opacity;return(1===(e=isNaN(e)?1:Math.max(0,Math.min(1,e)))?"rgb(":"rgba(")+Math.max(0,Math.min(255,Math.round(this.r)||0))+", "+Math.max(0,Math.min(255,Math.round(this.g)||0))+", "+Math.max(0,Math.min(255,Math.round(this.b)||0))+(1===e?")":", "+e+")")}})),L(Hsl,hsl,extend(Color,{brighter:function brighter(e){return e=null==e?1/.7:Math.pow(1/.7,e),new Hsl(this.h,this.s,this.l*e,this.opacity)},darker:function darker(e){return e=null==e?.7:Math.pow(.7,e),new Hsl(this.h,this.s,this.l*e,this.opacity)},rgb:function rgb(){var e=this.h%360+360*(this.h<0),t=isNaN(e)||isNaN(this.s)?0:this.s,n=this.l,r=n+(n<.5?n:1-n)*t,i=2*n-r;return new Rgb(hsl2rgb(e>=240?e-240:e+120,i,r),hsl2rgb(e,i,r),hsl2rgb(e<120?e+240:e-120,i,r),this.opacity)},displayable:function displayable(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1}}));var $=Math.PI/180,Q=180/Math.PI,Z=.96422,J=1,ee=.82521,te=4/29,ne=6/29,re=3*ne*ne,ie=ne*ne*ne;function labConvert(e){if(e instanceof Lab)return new Lab(e.l,e.a,e.b,e.opacity);if(e instanceof Hcl){if(isNaN(e.h))return new Lab(e.l,0,0,e.opacity);var t=e.h*$;return new Lab(e.l,Math.cos(t)*e.c,Math.sin(t)*e.c,e.opacity)}e instanceof Rgb||(e=rgbConvert(e));var n,r,i=rgb2lrgb(e.r),a=rgb2lrgb(e.g),o=rgb2lrgb(e.b),u=xyz2lab((.2225045*i+.7168786*a+.0606169*o)/J);return i===a&&a===o?n=r=u:(n=xyz2lab((.4360747*i+.3850649*a+.1430804*o)/Z),r=xyz2lab((.0139322*i+.0971045*a+.7141733*o)/ee)),new Lab(116*u-16,500*(n-u),200*(u-r),e.opacity)}function lab(e,t,n,r){return 1===arguments.length?labConvert(e):new Lab(e,t,n,null==r?1:r)}function Lab(e,t,n,r){this.l=+e,this.a=+t,this.b=+n,this.opacity=+r}function xyz2lab(e){return e>ie?Math.pow(e,1/3):e/re+te}function lab2xyz(e){return e>ne?e*e*e:re*(e-te)}function lrgb2rgb(e){return 255*(e<=.0031308?12.92*e:1.055*Math.pow(e,1/2.4)-.055)}function rgb2lrgb(e){return(e/=255)<=.04045?e/12.92:Math.pow((e+.055)/1.055,2.4)}function hclConvert(e){if(e instanceof Hcl)return new Hcl(e.h,e.c,e.l,e.opacity);if(e instanceof Lab||(e=labConvert(e)),0===e.a&&0===e.b)return new Hcl(NaN,0,e.l,e.opacity);var t=Math.atan2(e.b,e.a)*Q;return new Hcl(t<0?t+360:t,Math.sqrt(e.a*e.a+e.b*e.b),e.l,e.opacity)}function hcl(e,t,n,r){return 1===arguments.length?hclConvert(e):new Hcl(e,t,n,null==r?1:r)}function Hcl(e,t,n,r){this.h=+e,this.c=+t,this.l=+n,this.opacity=+r}L(Lab,lab,extend(Color,{brighter:function brighter(e){return new Lab(this.l+18*(null==e?1:e),this.a,this.b,this.opacity)},darker:function darker(e){return new Lab(this.l-18*(null==e?1:e),this.a,this.b,this.opacity)},rgb:function rgb(){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 new Rgb(lrgb2rgb(3.1338561*(t=Z*lab2xyz(t))-1.6168667*(e=J*lab2xyz(e))-.4906146*(n=ee*lab2xyz(n))),lrgb2rgb(-.9787684*t+1.9161415*e+.033454*n),lrgb2rgb(.0719453*t-.2289914*e+1.4052427*n),this.opacity)}})),L(Hcl,hcl,extend(Color,{brighter:function brighter(e){return new Hcl(this.h,this.c,this.l+18*(null==e?1:e),this.opacity)},darker:function darker(e){return new Hcl(this.h,this.c,this.l-18*(null==e?1:e),this.opacity)},rgb:function rgb(){return labConvert(this).rgb()}}));var ae=-.14861,oe=1.78277,ue=-.29227,ce=-.90649,se=1.97294,le=se*ce,fe=se*oe,he=oe*ue-ce*ae;function cubehelix_cubehelix(e,t,n,r){return 1===arguments.length?function cubehelixConvert(e){if(e instanceof Cubehelix)return new Cubehelix(e.h,e.s,e.l,e.opacity);e instanceof Rgb||(e=rgbConvert(e));var t=e.r/255,n=e.g/255,r=e.b/255,i=(he*r+le*t-fe*n)/(he+le-fe),a=r-i,o=(se*(n-i)-ue*a)/ce,u=Math.sqrt(o*o+a*a)/(se*i*(1-i)),c=u?Math.atan2(o,a)*Q-120:NaN;return new Cubehelix(c<0?c+360:c,u,i,e.opacity)}(e):new Cubehelix(e,t,n,null==r?1:r)}function Cubehelix(e,t,n,r){this.h=+e,this.s=+t,this.l=+n,this.opacity=+r}function basis(e,t,n,r,i){var a=e*e,o=a*e;return((1-3*e+3*a-o)*t+(4-6*a+3*o)*n+(1+3*e+3*a-3*o)*r+o*i)/6}L(Cubehelix,cubehelix_cubehelix,extend(Color,{brighter:function brighter(e){return e=null==e?1/.7:Math.pow(1/.7,e),new Cubehelix(this.h,this.s,this.l*e,this.opacity)},darker:function darker(e){return e=null==e?.7:Math.pow(.7,e),new Cubehelix(this.h,this.s,this.l*e,this.opacity)},rgb:function rgb(){var e=isNaN(this.h)?0:(this.h+120)*$,t=+this.l,n=isNaN(this.s)?0:this.s*t*(1-t),r=Math.cos(e),i=Math.sin(e);return new Rgb(255*(t+n*(ae*r+oe*i)),255*(t+n*(ue*r+ce*i)),255*(t+n*(se*r)),this.opacity)}}));var de=function(e){return function(){return e}};function linear(e,t){return function(n){return e+n*t}}function color_hue(e,t){var n=t-e;return n?linear(e,n>180||n<-180?n-360*Math.round(n/360):n):de(isNaN(e)?t:e)}function gamma(e){return 1==(e=+e)?nogamma:function(t,n){return n-t?function exponential(e,t,n){return e=Math.pow(e,n),t=Math.pow(t,n)-e,n=1/n,function(r){return Math.pow(e+r*t,n)}}(t,n,e):de(isNaN(t)?n:t)}}function nogamma(e,t){var n=t-e;return n?linear(e,n):de(isNaN(e)?t:e)}var pe=function rgbGamma(e){var t=gamma(e);function rgb(e,n){var r=t((e=color_rgb(e)).r,(n=color_rgb(n)).r),i=t(e.g,n.g),a=t(e.b,n.b),o=nogamma(e.opacity,n.opacity);return function(t){return e.r=r(t),e.g=i(t),e.b=a(t),e.opacity=o(t),e+""}}return rgb.gamma=rgbGamma,rgb}(1);function rgbSpline(e){return function(t){var n,r,i=t.length,a=new Array(i),o=new Array(i),u=new Array(i);for(n=0;n=1?(n=1,t-1):Math.floor(n*t),i=e[r],a=e[r+1],o=r>0?e[r-1]:2*i-a,u=ra&&(i=t.slice(a,i),u[o]?u[o]+=i:u[++o]=i),(n=n[0])===(r=r[0])?u[o]?u[o]+=r:u[++o]=r:(u[++o]=null,c.push({i:o,x:ge(n,r)})),a=be.lastIndex;return a180?t+=360:t-e>180&&(e+=360),i.push({i:n.push(pop(n)+"rotate(",null,r)-2,x:ge(e,t)})):t&&n.push(pop(n)+"rotate("+t+r)}(i.rotate,a.rotate,o,u),function skewX(e,t,n,i){e!==t?i.push({i:n.push(pop(n)+"skewX(",null,r)-2,x:ge(e,t)}):t&&n.push(pop(n)+"skewX("+t+r)}(i.skewX,a.skewX,o,u),function scale(e,t,n,r,i,a){if(e!==n||t!==r){var o=i.push(pop(i)+"scale(",null,",",null,")");a.push({i:o-4,x:ge(e,n)},{i:o-2,x:ge(t,r)})}else 1===n&&1===r||i.push(pop(i)+"scale("+n+","+r+")")}(i.scaleX,i.scaleY,a.scaleX,a.scaleY,o,u),i=a=null,function(e){for(var t,n=-1,r=u.length;++n2?polymap:bimap,r=i=null,scale}function scale(t){return(r||(r=n(a,o,c?function deinterpolateClamp(e){return function(t,n){var r=e(t=+t,n=+n);return function(e){return e<=t?0:e>=n?1:r(e)}}}(e):e,u)))(+t)}return scale.invert=function(e){return(i||(i=n(o,a,deinterpolateLinear,c?function reinterpolateClamp(e){return function(t,n){var r=e(t=+t,n=+n);return function(e){return e<=0?t:e>=1?n:r(e)}}}(t):t)))(+e)},scale.domain=function(e){return arguments.length?(a=j.call(e,De),rescale()):a.slice()},scale.range=function(e){return arguments.length?(o=I.call(e),rescale()):o.slice()},scale.rangeRound=function(e){return o=I.call(e),u=Ae,rescale()},scale.clamp=function(e){return arguments.length?(c=!!e,rescale()):c},scale.interpolate=function(e){return arguments.length?(u=e,rescale()):u},rescale()}var Re=function(e,t){if((n=(e=t?e.toExponential(t-1):e.toExponential()).indexOf("e"))<0)return null;var n,r=e.slice(0,n);return[r.length>1?r[0]+r.slice(2):r,+e.slice(n+1)]},Be=function(e){return(e=Re(Math.abs(e)))?e[1]:NaN},ze=/^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;function formatSpecifier(e){return new FormatSpecifier(e)}function FormatSpecifier(e){if(!(t=ze.exec(e)))throw new Error("invalid format: "+e);var t;this.fill=t[1]||" ",this.align=t[2]||">",this.sign=t[3]||"-",this.symbol=t[4]||"",this.zero=!!t[5],this.width=t[6]&&+t[6],this.comma=!!t[7],this.precision=t[8]&&+t[8].slice(1),this.trim=!!t[9],this.type=t[10]||""}formatSpecifier.prototype=FormatSpecifier.prototype,FormatSpecifier.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.trim?"~":"")+this.type};var He,Ve,Ue,We,qe=function(e){e:for(var t,n=e.length,r=1,i=-1;r0){if(!+e[r])break e;i=0}}return i>0?e.slice(0,i)+e.slice(t+1):e},Ge=function(e,t){var n=Re(e,t);if(!n)return e+"";var r=n[0],i=n[1];return i<0?"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")},Ye={"%":function _(e,t){return(100*e).toFixed(t)},b:function b(e){return Math.round(e).toString(2)},c:function c(e){return e+""},d:function d(e){return Math.round(e).toString(10)},e:function e(t,n){return t.toExponential(n)},f:function f(e,t){return e.toFixed(t)},g:function g(e,t){return e.toPrecision(t)},o:function o(e){return Math.round(e).toString(8)},p:function p(e,t){return Ge(100*e,t)},r:Ge,s:function(e,t){var n=Re(e,t);if(!n)return e+"";var r=n[0],i=n[1],a=i-(He=3*Math.max(-8,Math.min(8,Math.floor(i/3))))+1,o=r.length;return a===o?r:a>o?r+new Array(a-o+1).join("0"):a>0?r.slice(0,a)+"."+r.slice(a):"0."+new Array(1-a).join("0")+Re(e,Math.max(0,t+a-1))[0]},X:function X(e){return Math.round(e).toString(16).toUpperCase()},x:function x(e){return Math.round(e).toString(16)}},Xe=function(e){return e},Ke=["y","z","a","f","p","n","µ","m","","k","M","G","T","P","E","Z","Y"],$e=function(e){var t=e.grouping&&e.thousands?function(e,t){return function(n,r){for(var i=n.length,a=[],o=0,u=e[0],c=0;i>0&&u>0&&(c+u+1>r&&(u=Math.max(1,r-c)),a.push(n.substring(i-=u,i+u)),!((c+=u+1)>r));)u=e[o=(o+1)%e.length];return a.reverse().join(t)}}(e.grouping,e.thousands):Xe,n=e.currency,r=e.decimal,i=e.numerals?function(e){return function(t){return t.replace(/[0-9]/g,function(t){return e[+t]})}}(e.numerals):Xe,a=e.percent||"%";function newFormat(e){var o=(e=formatSpecifier(e)).fill,u=e.align,c=e.sign,s=e.symbol,l=e.zero,f=e.width,h=e.comma,d=e.precision,p=e.trim,y=e.type;"n"===y?(h=!0,y="g"):Ye[y]||(null==d&&(d=12),p=!0,y="g"),(l||"0"===o&&"="===u)&&(l=!0,o="0",u="=");var g="$"===s?n[0]:"#"===s&&/[boxX]/.test(y)?"0"+y.toLowerCase():"",v="$"===s?n[1]:/[%p]/.test(y)?a:"",m=Ye[y],b=/[defgprs%]/.test(y);function format(e){var n,a,s,_=g,x=v;if("c"===y)x=m(e)+x,e="";else{var w=(e=+e)<0;if(e=m(Math.abs(e),d),p&&(e=qe(e)),w&&0==+e&&(w=!1),_=(w?"("===c?c:"-":"-"===c||"("===c?"":c)+_,x=("s"===y?Ke[8+He/3]:"")+x+(w&&"("===c?")":""),b)for(n=-1,a=e.length;++n(s=e.charCodeAt(n))||s>57){x=(46===s?r+e.slice(n+1):e.slice(n))+x,e=e.slice(0,n);break}}h&&!l&&(e=t(e,1/0));var k=_.length+e.length+x.length,C=k>1)+_+e+x+C.slice(k);break;default:e=C+_+e+x}return i(e)}return d=null==d?6:/[gprs]/.test(y)?Math.max(1,Math.min(21,d)):Math.max(0,Math.min(20,d)),format.toString=function(){return e+""},format}return{format:newFormat,formatPrefix:function formatPrefix(e,t){var n=newFormat(((e=formatSpecifier(e)).type="f",e)),r=3*Math.max(-8,Math.min(8,Math.floor(Be(t)/3))),i=Math.pow(10,-r),a=Ke[8+r/3];return function(e){return n(i*e)+a}}}};!function defaultLocale(e){return Ve=$e(e),Ue=Ve.format,We=Ve.formatPrefix,Ve}({decimal:".",thousands:",",grouping:[3],currency:["$",""]});var Qe=function(e,t,n){var r,i=e[0],a=e[e.length-1],o=tickStep(i,a,null==t?10:t);switch((n=formatSpecifier(null==n?",f":n)).type){case"s":var u=Math.max(Math.abs(i),Math.abs(a));return null!=n.precision||isNaN(r=function(e,t){return Math.max(0,3*Math.max(-8,Math.min(8,Math.floor(Be(t)/3)))-Be(Math.abs(e)))}(o,u))||(n.precision=r),We(n,u);case"":case"e":case"g":case"p":case"r":null!=n.precision||isNaN(r=function(e,t){return e=Math.abs(e),t=Math.abs(t)-e,Math.max(0,Be(t)-Be(e))+1}(o,Math.max(Math.abs(i),Math.abs(a))))||(n.precision=r-("e"===n.type));break;case"f":case"%":null!=n.precision||isNaN(r=function(e){return Math.max(0,-Be(Math.abs(e)))}(o))||(n.precision=r-2*("%"===n.type))}return Ue(n)};function linearish(e){var t=e.domain;return e.ticks=function(e){var n=t();return E(n[0],n[n.length-1],null==e?10:e)},e.tickFormat=function(e,n){return Qe(t(),e,n)},e.nice=function(n){null==n&&(n=10);var r,i=t(),a=0,o=i.length-1,u=i[a],c=i[o];return c0?r=tickIncrement(u=Math.floor(u/r)*r,c=Math.ceil(c/r)*r,n):r<0&&(r=tickIncrement(u=Math.ceil(u*r)/r,c=Math.floor(c*r)/r,n)),r>0?(i[a]=Math.floor(u/r)*r,i[o]=Math.ceil(c/r)*r,t(i)):r<0&&(i[a]=Math.ceil(u*r)/r,i[o]=Math.floor(c*r)/r,t(i)),e},e}function linear_linear(){var e=continuous(deinterpolateLinear,ge);return e.copy=function(){return copy(e,linear_linear())},linearish(e)}function identity_identity(){var e=[0,1];function scale(e){return+e}return scale.invert=scale,scale.domain=scale.range=function(t){return arguments.length?(e=j.call(t,De),scale):e.slice()},scale.copy=function(){return identity_identity().domain(e)},linearish(scale)}var Ze=function(e,t){var n,r=0,i=(e=e.slice()).length-1,a=e[r],o=e[i];return o0){for(;hc)break;y.push(f)}}else for(;h=1;--l)if(!((f=s*l)c)break;y.push(f)}}else y=E(h,d,Math.min(d-h,p)).map(i);return a?y.reverse():y},e.tickFormat=function(t,a){if(null==a&&(a=10===n?".0e":","),"function"!=typeof a&&(a=Ue(a)),t===1/0)return a;null==t&&(t=10);var o=Math.max(1,n*t/e.ticks().length);return function(e){var t=e/i(Math.round(r(e)));return t*n0?n[i-1]:e[0],i=n?[r[n-1],t]:[r[o-1],r[o]]},scale.copy=function(){return quantize_quantize().domain([e,t]).range(i)},linearish(scale)}function threshold_threshold(){var e=[.5],t=[0,1],n=1;function scale(r){if(r<=r)return t[x(e,r,0,n)]}return scale.domain=function(r){return arguments.length?(e=I.call(r),n=Math.min(e.length,t.length-1),scale):e.slice()},scale.range=function(r){return arguments.length?(t=I.call(r),n=Math.min(e.length,t.length-1),scale):t.slice()},scale.invertExtent=function(n){var r=t.indexOf(n);return[e[r-1],e[r]]},scale.copy=function(){return threshold_threshold().domain(e).range(t)},scale}var Je=new Date,et=new Date;function newInterval(e,t,n,r){function interval(t){return e(t=new Date(+t)),t}return interval.floor=interval,interval.ceil=function(n){return e(n=new Date(n-1)),t(n,1),e(n),n},interval.round=function(e){var t=interval(e),n=interval.ceil(e);return e-t0))return o;do{o.push(a=new Date(+n)),t(n,i),e(n)}while(a=t)for(;e(t),!n(t);)t.setTime(t-1)},function(e,r){if(e>=e)if(r<0)for(;++r<=0;)for(;t(e,-1),!n(e););else for(;--r>=0;)for(;t(e,1),!n(e););})},n&&(interval.count=function(t,r){return Je.setTime(+t),et.setTime(+r),e(Je),e(et),Math.floor(n(Je,et))},interval.every=function(e){return e=Math.floor(e),isFinite(e)&&e>0?e>1?interval.filter(r?function(t){return r(t)%e==0}:function(t){return interval.count(0,t)%e==0}):interval:null}),interval}var tt=newInterval(function(){},function(e,t){e.setTime(+e+t)},function(e,t){return t-e});tt.every=function(e){return e=Math.floor(e),isFinite(e)&&e>0?e>1?newInterval(function(t){t.setTime(Math.floor(t/e)*e)},function(t,n){t.setTime(+t+n*e)},function(t,n){return(n-t)/e}):tt:null};var nt=tt,rt=(tt.range,6e4),it=6048e5,at=newInterval(function(e){e.setTime(1e3*Math.floor(e/1e3))},function(e,t){e.setTime(+e+1e3*t)},function(e,t){return(t-e)/1e3},function(e){return e.getUTCSeconds()}),ot=at,ut=(at.range,newInterval(function(e){e.setTime(Math.floor(e/rt)*rt)},function(e,t){e.setTime(+e+t*rt)},function(e,t){return(t-e)/rt},function(e){return e.getMinutes()})),ct=ut,st=(ut.range,newInterval(function(e){var t=e.getTimezoneOffset()*rt%36e5;t<0&&(t+=36e5),e.setTime(36e5*Math.floor((+e-t)/36e5)+t)},function(e,t){e.setTime(+e+36e5*t)},function(e,t){return(t-e)/36e5},function(e){return e.getHours()})),lt=st,ft=(st.range,newInterval(function(e){e.setHours(0,0,0,0)},function(e,t){e.setDate(e.getDate()+t)},function(e,t){return(t-e-(t.getTimezoneOffset()-e.getTimezoneOffset())*rt)/864e5},function(e){return e.getDate()-1})),ht=ft;ft.range;function weekday(e){return newInterval(function(t){t.setDate(t.getDate()-(t.getDay()+7-e)%7),t.setHours(0,0,0,0)},function(e,t){e.setDate(e.getDate()+7*t)},function(e,t){return(t-e-(t.getTimezoneOffset()-e.getTimezoneOffset())*rt)/it})}var dt=weekday(0),pt=weekday(1),yt=weekday(2),gt=weekday(3),vt=weekday(4),mt=weekday(5),bt=weekday(6),_t=(dt.range,pt.range,yt.range,gt.range,vt.range,mt.range,bt.range,newInterval(function(e){e.setDate(1),e.setHours(0,0,0,0)},function(e,t){e.setMonth(e.getMonth()+t)},function(e,t){return t.getMonth()-e.getMonth()+12*(t.getFullYear()-e.getFullYear())},function(e){return e.getMonth()})),xt=_t,wt=(_t.range,newInterval(function(e){e.setMonth(0,1),e.setHours(0,0,0,0)},function(e,t){e.setFullYear(e.getFullYear()+t)},function(e,t){return t.getFullYear()-e.getFullYear()},function(e){return e.getFullYear()}));wt.every=function(e){return isFinite(e=Math.floor(e))&&e>0?newInterval(function(t){t.setFullYear(Math.floor(t.getFullYear()/e)*e),t.setMonth(0,1),t.setHours(0,0,0,0)},function(t,n){t.setFullYear(t.getFullYear()+n*e)}):null};var kt=wt,Ct=(wt.range,newInterval(function(e){e.setUTCSeconds(0,0)},function(e,t){e.setTime(+e+t*rt)},function(e,t){return(t-e)/rt},function(e){return e.getUTCMinutes()})),St=(Ct.range,newInterval(function(e){e.setUTCMinutes(0,0,0)},function(e,t){e.setTime(+e+36e5*t)},function(e,t){return(t-e)/36e5},function(e){return e.getUTCHours()})),Pt=(St.range,newInterval(function(e){e.setUTCHours(0,0,0,0)},function(e,t){e.setUTCDate(e.getUTCDate()+t)},function(e,t){return(t-e)/864e5},function(e){return e.getUTCDate()-1})),At=Pt;Pt.range;function utcWeekday(e){return newInterval(function(t){t.setUTCDate(t.getUTCDate()-(t.getUTCDay()+7-e)%7),t.setUTCHours(0,0,0,0)},function(e,t){e.setUTCDate(e.getUTCDate()+7*t)},function(e,t){return(t-e)/it})}var Et=utcWeekday(0),Mt=utcWeekday(1),Ot=utcWeekday(2),Tt=utcWeekday(3),Ft=utcWeekday(4),Nt=utcWeekday(5),jt=utcWeekday(6),It=(Et.range,Mt.range,Ot.range,Tt.range,Ft.range,Nt.range,jt.range,newInterval(function(e){e.setUTCDate(1),e.setUTCHours(0,0,0,0)},function(e,t){e.setUTCMonth(e.getUTCMonth()+t)},function(e,t){return t.getUTCMonth()-e.getUTCMonth()+12*(t.getUTCFullYear()-e.getUTCFullYear())},function(e){return e.getUTCMonth()})),Dt=(It.range,newInterval(function(e){e.setUTCMonth(0,1),e.setUTCHours(0,0,0,0)},function(e,t){e.setUTCFullYear(e.getUTCFullYear()+t)},function(e,t){return t.getUTCFullYear()-e.getUTCFullYear()},function(e){return e.getUTCFullYear()}));Dt.every=function(e){return isFinite(e=Math.floor(e))&&e>0?newInterval(function(t){t.setUTCFullYear(Math.floor(t.getUTCFullYear()/e)*e),t.setUTCMonth(0,1),t.setUTCHours(0,0,0,0)},function(t,n){t.setUTCFullYear(t.getUTCFullYear()+n*e)}):null};var Lt=Dt;Dt.range;function localDate(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 utcDate(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 newYear(e){return{y:e,m:0,d:1,H:0,M:0,S:0,L:0}}var Rt,Bt,zt,Ht,Vt={"-":"",_:" ",0:"0"},Ut=/^\s*\d+/,Wt=/^%/,qt=/[\\^$*+?|[\]().{}]/g;function locale_pad(e,t,n){var r=e<0?"-":"",i=(r?-e:e)+"",a=i.length;return r+(a68?1900:2e3),n+r[0].length):-1}function parseZone(e,t,n){var r=/^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(t.slice(n,n+6));return r?(e.Z=r[1]?0:-(r[2]+(r[3]||"00")),n+r[0].length):-1}function parseMonthNumber(e,t,n){var r=Ut.exec(t.slice(n,n+2));return r?(e.m=r[0]-1,n+r[0].length):-1}function parseDayOfMonth(e,t,n){var r=Ut.exec(t.slice(n,n+2));return r?(e.d=+r[0],n+r[0].length):-1}function parseDayOfYear(e,t,n){var r=Ut.exec(t.slice(n,n+3));return r?(e.m=0,e.d=+r[0],n+r[0].length):-1}function parseHour24(e,t,n){var r=Ut.exec(t.slice(n,n+2));return r?(e.H=+r[0],n+r[0].length):-1}function parseMinutes(e,t,n){var r=Ut.exec(t.slice(n,n+2));return r?(e.M=+r[0],n+r[0].length):-1}function parseSeconds(e,t,n){var r=Ut.exec(t.slice(n,n+2));return r?(e.S=+r[0],n+r[0].length):-1}function parseMilliseconds(e,t,n){var r=Ut.exec(t.slice(n,n+3));return r?(e.L=+r[0],n+r[0].length):-1}function parseMicroseconds(e,t,n){var r=Ut.exec(t.slice(n,n+6));return r?(e.L=Math.floor(r[0]/1e3),n+r[0].length):-1}function parseLiteralPercent(e,t,n){var r=Wt.exec(t.slice(n,n+1));return r?n+r[0].length:-1}function parseUnixTimestamp(e,t,n){var r=Ut.exec(t.slice(n));return r?(e.Q=+r[0],n+r[0].length):-1}function parseUnixTimestampSeconds(e,t,n){var r=Ut.exec(t.slice(n));return r?(e.Q=1e3*+r[0],n+r[0].length):-1}function formatDayOfMonth(e,t){return locale_pad(e.getDate(),t,2)}function formatHour24(e,t){return locale_pad(e.getHours(),t,2)}function formatHour12(e,t){return locale_pad(e.getHours()%12||12,t,2)}function formatDayOfYear(e,t){return locale_pad(1+ht.count(kt(e),e),t,3)}function formatMilliseconds(e,t){return locale_pad(e.getMilliseconds(),t,3)}function formatMicroseconds(e,t){return formatMilliseconds(e,t)+"000"}function formatMonthNumber(e,t){return locale_pad(e.getMonth()+1,t,2)}function formatMinutes(e,t){return locale_pad(e.getMinutes(),t,2)}function formatSeconds(e,t){return locale_pad(e.getSeconds(),t,2)}function formatWeekdayNumberMonday(e){var t=e.getDay();return 0===t?7:t}function formatWeekNumberSunday(e,t){return locale_pad(dt.count(kt(e),e),t,2)}function formatWeekNumberISO(e,t){var n=e.getDay();return e=n>=4||0===n?vt(e):vt.ceil(e),locale_pad(vt.count(kt(e),e)+(4===kt(e).getDay()),t,2)}function formatWeekdayNumberSunday(e){return e.getDay()}function formatWeekNumberMonday(e,t){return locale_pad(pt.count(kt(e),e),t,2)}function locale_formatYear(e,t){return locale_pad(e.getFullYear()%100,t,2)}function formatFullYear(e,t){return locale_pad(e.getFullYear()%1e4,t,4)}function formatZone(e){var t=e.getTimezoneOffset();return(t>0?"-":(t*=-1,"+"))+locale_pad(t/60|0,"0",2)+locale_pad(t%60,"0",2)}function formatUTCDayOfMonth(e,t){return locale_pad(e.getUTCDate(),t,2)}function formatUTCHour24(e,t){return locale_pad(e.getUTCHours(),t,2)}function formatUTCHour12(e,t){return locale_pad(e.getUTCHours()%12||12,t,2)}function formatUTCDayOfYear(e,t){return locale_pad(1+At.count(Lt(e),e),t,3)}function formatUTCMilliseconds(e,t){return locale_pad(e.getUTCMilliseconds(),t,3)}function formatUTCMicroseconds(e,t){return formatUTCMilliseconds(e,t)+"000"}function formatUTCMonthNumber(e,t){return locale_pad(e.getUTCMonth()+1,t,2)}function formatUTCMinutes(e,t){return locale_pad(e.getUTCMinutes(),t,2)}function formatUTCSeconds(e,t){return locale_pad(e.getUTCSeconds(),t,2)}function formatUTCWeekdayNumberMonday(e){var t=e.getUTCDay();return 0===t?7:t}function formatUTCWeekNumberSunday(e,t){return locale_pad(Et.count(Lt(e),e),t,2)}function formatUTCWeekNumberISO(e,t){var n=e.getUTCDay();return e=n>=4||0===n?Ft(e):Ft.ceil(e),locale_pad(Ft.count(Lt(e),e)+(4===Lt(e).getUTCDay()),t,2)}function formatUTCWeekdayNumberSunday(e){return e.getUTCDay()}function formatUTCWeekNumberMonday(e,t){return locale_pad(Mt.count(Lt(e),e),t,2)}function formatUTCYear(e,t){return locale_pad(e.getUTCFullYear()%100,t,2)}function formatUTCFullYear(e,t){return locale_pad(e.getUTCFullYear()%1e4,t,4)}function formatUTCZone(){return"+0000"}function formatLiteralPercent(){return"%"}function formatUnixTimestamp(e){return+e}function formatUnixTimestampSeconds(e){return Math.floor(+e/1e3)}!function defaultLocale_defaultLocale(e){return Rt=function formatLocale(e){var t=e.dateTime,n=e.date,r=e.time,i=e.periods,a=e.days,o=e.shortDays,u=e.months,c=e.shortMonths,s=formatRe(i),l=formatLookup(i),f=formatRe(a),h=formatLookup(a),d=formatRe(o),p=formatLookup(o),y=formatRe(u),g=formatLookup(u),v=formatRe(c),m=formatLookup(c),b={a:function formatShortWeekday(e){return o[e.getDay()]},A:function formatWeekday(e){return a[e.getDay()]},b:function formatShortMonth(e){return c[e.getMonth()]},B:function formatMonth(e){return u[e.getMonth()]},c:null,d:formatDayOfMonth,e:formatDayOfMonth,f:formatMicroseconds,H:formatHour24,I:formatHour12,j:formatDayOfYear,L:formatMilliseconds,m:formatMonthNumber,M:formatMinutes,p:function formatPeriod(e){return i[+(e.getHours()>=12)]},Q:formatUnixTimestamp,s:formatUnixTimestampSeconds,S:formatSeconds,u:formatWeekdayNumberMonday,U:formatWeekNumberSunday,V:formatWeekNumberISO,w:formatWeekdayNumberSunday,W:formatWeekNumberMonday,x:null,X:null,y:locale_formatYear,Y:formatFullYear,Z:formatZone,"%":formatLiteralPercent},_={a:function formatUTCShortWeekday(e){return o[e.getUTCDay()]},A:function formatUTCWeekday(e){return a[e.getUTCDay()]},b:function formatUTCShortMonth(e){return c[e.getUTCMonth()]},B:function formatUTCMonth(e){return u[e.getUTCMonth()]},c:null,d:formatUTCDayOfMonth,e:formatUTCDayOfMonth,f:formatUTCMicroseconds,H:formatUTCHour24,I:formatUTCHour12,j:formatUTCDayOfYear,L:formatUTCMilliseconds,m:formatUTCMonthNumber,M:formatUTCMinutes,p:function formatUTCPeriod(e){return i[+(e.getUTCHours()>=12)]},Q:formatUnixTimestamp,s:formatUnixTimestampSeconds,S:formatUTCSeconds,u:formatUTCWeekdayNumberMonday,U:formatUTCWeekNumberSunday,V:formatUTCWeekNumberISO,w:formatUTCWeekdayNumberSunday,W:formatUTCWeekNumberMonday,x:null,X:null,y:formatUTCYear,Y:formatUTCFullYear,Z:formatUTCZone,"%":formatLiteralPercent},x={a:function parseShortWeekday(e,t,n){var r=d.exec(t.slice(n));return r?(e.w=p[r[0].toLowerCase()],n+r[0].length):-1},A:function parseWeekday(e,t,n){var r=f.exec(t.slice(n));return r?(e.w=h[r[0].toLowerCase()],n+r[0].length):-1},b:function parseShortMonth(e,t,n){var r=v.exec(t.slice(n));return r?(e.m=m[r[0].toLowerCase()],n+r[0].length):-1},B:function parseMonth(e,t,n){var r=y.exec(t.slice(n));return r?(e.m=g[r[0].toLowerCase()],n+r[0].length):-1},c:function parseLocaleDateTime(e,n,r){return parseSpecifier(e,t,n,r)},d:parseDayOfMonth,e:parseDayOfMonth,f:parseMicroseconds,H:parseHour24,I:parseHour24,j:parseDayOfYear,L:parseMilliseconds,m:parseMonthNumber,M:parseMinutes,p:function parsePeriod(e,t,n){var r=s.exec(t.slice(n));return r?(e.p=l[r[0].toLowerCase()],n+r[0].length):-1},Q:parseUnixTimestamp,s:parseUnixTimestampSeconds,S:parseSeconds,u:parseWeekdayNumberMonday,U:parseWeekNumberSunday,V:parseWeekNumberISO,w:parseWeekdayNumberSunday,W:parseWeekNumberMonday,x:function parseLocaleDate(e,t,r){return parseSpecifier(e,n,t,r)},X:function parseLocaleTime(e,t,n){return parseSpecifier(e,r,t,n)},y:parseYear,Y:parseFullYear,Z:parseZone,"%":parseLiteralPercent};function newFormat(e,t){return function(n){var r,i,a,o=[],u=-1,c=0,s=e.length;for(n instanceof Date||(n=new Date(+n));++u53)return null;"w"in a||(a.w=1),"Z"in a?(r=(i=(r=utcDate(newYear(a.y))).getUTCDay())>4||0===i?Mt.ceil(r):Mt(r),r=At.offset(r,7*(a.V-1)),a.y=r.getUTCFullYear(),a.m=r.getUTCMonth(),a.d=r.getUTCDate()+(a.w+6)%7):(r=(i=(r=t(newYear(a.y))).getDay())>4||0===i?pt.ceil(r):pt(r),r=ht.offset(r,7*(a.V-1)),a.y=r.getFullYear(),a.m=r.getMonth(),a.d=r.getDate()+(a.w+6)%7)}else("W"in a||"U"in a)&&("w"in a||(a.w="u"in a?a.u%7:"W"in a?1:0),i="Z"in a?utcDate(newYear(a.y)).getUTCDay():t(newYear(a.y)).getDay(),a.m=0,a.d="W"in a?(a.w+6)%7+7*a.W-(i+5)%7:a.w+7*a.U-(i+6)%7);return"Z"in a?(a.H+=a.Z/100|0,a.M+=a.Z%100,utcDate(a)):t(a)}}function parseSpecifier(e,t,n,r){for(var i,a,o=0,u=t.length,c=n.length;o=c)return-1;if(37===(i=t.charCodeAt(o++))){if(i=t.charAt(o++),!(a=x[i in Vt?t.charAt(o++):i])||(r=a(e,n,r))<0)return-1}else if(i!=n.charCodeAt(r++))return-1}return r}return b.x=newFormat(n,b),b.X=newFormat(r,b),b.c=newFormat(t,b),_.x=newFormat(n,_),_.X=newFormat(r,_),_.c=newFormat(t,_),{format:function format(e){var t=newFormat(e+="",b);return t.toString=function(){return e},t},parse:function parse(e){var t=newParse(e+="",localDate);return t.toString=function(){return e},t},utcFormat:function utcFormat(e){var t=newFormat(e+="",_);return t.toString=function(){return e},t},utcParse:function utcParse(e){var t=newParse(e,utcDate);return t.toString=function(){return e},t}}}(e),Bt=Rt.format,Rt.parse,zt=Rt.utcFormat,Ht=Rt.utcParse,Rt}({dateTime:"%x, %X",date:"%-m/%-d/%Y",time:"%-I:%M:%S %p",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"]});Date.prototype.toISOString||zt("%Y-%m-%dT%H:%M:%S.%LZ");+new Date("2000-01-01T00:00:00.000Z")||Ht("%Y-%m-%dT%H:%M:%S.%LZ");var Gt=1e3,Yt=60*Gt,Xt=60*Yt,Kt=24*Xt,$t=7*Kt,Qt=30*Kt,Zt=365*Kt;function time_date(e){return new Date(e)}function time_number(e){return e instanceof Date?+e:+new Date(+e)}function calendar(e,t,n,r,i,a,o,u,c){var s=continuous(deinterpolateLinear,ge),l=s.invert,f=s.domain,h=c(".%L"),d=c(":%S"),p=c("%I:%M"),y=c("%I %p"),g=c("%a %d"),v=c("%b %d"),b=c("%B"),_=c("%Y"),x=[[o,1,Gt],[o,5,5*Gt],[o,15,15*Gt],[o,30,30*Gt],[a,1,Yt],[a,5,5*Yt],[a,15,15*Yt],[a,30,30*Yt],[i,1,Xt],[i,3,3*Xt],[i,6,6*Xt],[i,12,12*Xt],[r,1,Kt],[r,2,2*Kt],[n,1,$t],[t,1,Qt],[t,3,3*Qt],[e,1,Zt]];function tickFormat(u){return(o(u)1)&&(e-=Math.floor(e));var t=Math.abs(e-.5);return $n.h=360*e-100,$n.s=1.5-1.5*t,$n.l=.8-.9*t,$n+""};color_rgb(),Math.PI,Math.PI;function viridis_ramp(e){var t=e.length;return function(n){return e[Math.max(0,Math.min(t-1,Math.floor(n*t)))]}}var Zn=viridis_ramp(an("44015444025645045745055946075a46085c460a5d460b5e470d60470e6147106347116447136548146748166848176948186a481a6c481b6d481c6e481d6f481f70482071482173482374482475482576482677482878482979472a7a472c7a472d7b472e7c472f7d46307e46327e46337f463480453581453781453882443983443a83443b84433d84433e85423f854240864241864142874144874045884046883f47883f48893e49893e4a893e4c8a3d4d8a3d4e8a3c4f8a3c508b3b518b3b528b3a538b3a548c39558c39568c38588c38598c375a8c375b8d365c8d365d8d355e8d355f8d34608d34618d33628d33638d32648e32658e31668e31678e31688e30698e306a8e2f6b8e2f6c8e2e6d8e2e6e8e2e6f8e2d708e2d718e2c718e2c728e2c738e2b748e2b758e2a768e2a778e2a788e29798e297a8e297b8e287c8e287d8e277e8e277f8e27808e26818e26828e26828e25838e25848e25858e24868e24878e23888e23898e238a8d228b8d228c8d228d8d218e8d218f8d21908d21918c20928c20928c20938c1f948c1f958b1f968b1f978b1f988b1f998a1f9a8a1e9b8a1e9c891e9d891f9e891f9f881fa0881fa1881fa1871fa28720a38620a48621a58521a68522a78522a88423a98324aa8325ab8225ac8226ad8127ad8128ae8029af7f2ab07f2cb17e2db27d2eb37c2fb47c31b57b32b67a34b67935b77937b87838b9773aba763bbb753dbc743fbc7340bd7242be7144bf7046c06f48c16e4ac16d4cc26c4ec36b50c46a52c56954c56856c66758c7655ac8645cc8635ec96260ca6063cb5f65cb5e67cc5c69cd5b6ccd5a6ece5870cf5773d05675d05477d1537ad1517cd2507fd34e81d34d84d44b86d54989d5488bd6468ed64590d74393d74195d84098d83e9bd93c9dd93ba0da39a2da37a5db36a8db34aadc32addc30b0dd2fb2dd2db5de2bb8de29bade28bddf26c0df25c2df23c5e021c8e020cae11fcde11dd0e11cd2e21bd5e21ad8e219dae319dde318dfe318e2e418e5e419e7e419eae51aece51befe51cf1e51df4e61ef6e620f8e621fbe723fde725")),Jn=viridis_ramp(an("00000401000501010601010802010902020b02020d03030f03031204041405041606051806051a07061c08071e0907200a08220b09240c09260d0a290e0b2b100b2d110c2f120d31130d34140e36150e38160f3b180f3d19103f1a10421c10441d11471e114920114b21114e22115024125325125527125829115a2a115c2c115f2d11612f116331116533106734106936106b38106c390f6e3b0f703d0f713f0f72400f74420f75440f764510774710784910784a10794c117a4e117b4f127b51127c52137c54137d56147d57157e59157e5a167e5c167f5d177f5f187f601880621980641a80651a80671b80681c816a1c816b1d816d1d816e1e81701f81721f817320817521817621817822817922827b23827c23827e24828025828125818326818426818627818827818928818b29818c29818e2a81902a81912b81932b80942c80962c80982d80992d809b2e7f9c2e7f9e2f7fa02f7fa1307ea3307ea5317ea6317da8327daa337dab337cad347cae347bb0357bb2357bb3367ab5367ab73779b83779ba3878bc3978bd3977bf3a77c03a76c23b75c43c75c53c74c73d73c83e73ca3e72cc3f71cd4071cf4070d0416fd2426fd3436ed5446dd6456cd8456cd9466bdb476adc4869de4968df4a68e04c67e24d66e34e65e44f64e55064e75263e85362e95462ea5661eb5760ec5860ed5a5fee5b5eef5d5ef05f5ef1605df2625df2645cf3655cf4675cf4695cf56b5cf66c5cf66e5cf7705cf7725cf8745cf8765cf9785df9795df97b5dfa7d5efa7f5efa815ffb835ffb8560fb8761fc8961fc8a62fc8c63fc8e64fc9065fd9266fd9467fd9668fd9869fd9a6afd9b6bfe9d6cfe9f6dfea16efea36ffea571fea772fea973feaa74feac76feae77feb078feb27afeb47bfeb67cfeb77efeb97ffebb81febd82febf84fec185fec287fec488fec68afec88cfeca8dfecc8ffecd90fecf92fed194fed395fed597fed799fed89afdda9cfddc9efddea0fde0a1fde2a3fde3a5fde5a7fde7a9fde9aafdebacfcecaefceeb0fcf0b2fcf2b4fcf4b6fcf6b8fcf7b9fcf9bbfcfbbdfcfdbf")),er=viridis_ramp(an("00000401000501010601010802010a02020c02020e03021004031204031405041706041907051b08051d09061f0a07220b07240c08260d08290e092b10092d110a30120a32140b34150b37160b39180c3c190c3e1b0c411c0c431e0c451f0c48210c4a230c4c240c4f260c51280b53290b552b0b572d0b592f0a5b310a5c320a5e340a5f3609613809623909633b09643d09653e0966400a67420a68440a68450a69470b6a490b6a4a0c6b4c0c6b4d0d6c4f0d6c510e6c520e6d540f6d550f6d57106e59106e5a116e5c126e5d126e5f136e61136e62146e64156e65156e67166e69166e6a176e6c186e6d186e6f196e71196e721a6e741a6e751b6e771c6d781c6d7a1d6d7c1d6d7d1e6d7f1e6c801f6c82206c84206b85216b87216b88226a8a226a8c23698d23698f24699025689225689326679526679727669827669a28659b29649d29649f2a63a02a63a22b62a32c61a52c60a62d60a82e5fa92e5eab2f5ead305dae305cb0315bb1325ab3325ab43359b63458b73557b93556ba3655bc3754bd3853bf3952c03a51c13a50c33b4fc43c4ec63d4dc73e4cc83f4bca404acb4149cc4248ce4347cf4446d04545d24644d34743d44842d54a41d74b3fd84c3ed94d3dda4e3cdb503bdd513ade5238df5337e05536e15635e25734e35933e45a31e55c30e65d2fe75e2ee8602de9612bea632aeb6429eb6628ec6726ed6925ee6a24ef6c23ef6e21f06f20f1711ff1731df2741cf3761bf37819f47918f57b17f57d15f67e14f68013f78212f78410f8850ff8870ef8890cf98b0bf98c0af98e09fa9008fa9207fa9407fb9606fb9706fb9906fb9b06fb9d07fc9f07fca108fca309fca50afca60cfca80dfcaa0ffcac11fcae12fcb014fcb216fcb418fbb61afbb81dfbba1ffbbc21fbbe23fac026fac228fac42afac62df9c72ff9c932f9cb35f8cd37f8cf3af7d13df7d340f6d543f6d746f5d949f5db4cf4dd4ff4df53f4e156f3e35af3e55df2e661f2e865f2ea69f1ec6df1ed71f1ef75f1f179f2f27df2f482f3f586f3f68af4f88ef5f992f6fa96f8fb9af9fc9dfafda1fcffa4")),tr=viridis_ramp(an("0d088710078813078916078a19068c1b068d1d068e20068f2206902406912605912805922a05932c05942e05952f059631059733059735049837049938049a3a049a3c049b3e049c3f049c41049d43039e44039e46039f48039f4903a04b03a14c02a14e02a25002a25102a35302a35502a45601a45801a45901a55b01a55c01a65e01a66001a66100a76300a76400a76600a76700a86900a86a00a86c00a86e00a86f00a87100a87201a87401a87501a87701a87801a87a02a87b02a87d03a87e03a88004a88104a78305a78405a78606a68707a68808a68a09a58b0aa58d0ba58e0ca48f0da4910ea3920fa39410a29511a19613a19814a099159f9a169f9c179e9d189d9e199da01a9ca11b9ba21d9aa31e9aa51f99a62098a72197a82296aa2395ab2494ac2694ad2793ae2892b02991b12a90b22b8fb32c8eb42e8db52f8cb6308bb7318ab83289ba3388bb3488bc3587bd3786be3885bf3984c03a83c13b82c23c81c33d80c43e7fc5407ec6417dc7427cc8437bc9447aca457acb4679cc4778cc4977cd4a76ce4b75cf4c74d04d73d14e72d24f71d35171d45270d5536fd5546ed6556dd7566cd8576bd9586ada5a6ada5b69db5c68dc5d67dd5e66de5f65de6164df6263e06363e16462e26561e26660e3685fe4695ee56a5de56b5de66c5ce76e5be76f5ae87059e97158e97257ea7457eb7556eb7655ec7754ed7953ed7a52ee7b51ef7c51ef7e50f07f4ff0804ef1814df1834cf2844bf3854bf3874af48849f48948f58b47f58c46f68d45f68f44f79044f79143f79342f89441f89540f9973ff9983ef99a3efa9b3dfa9c3cfa9e3bfb9f3afba139fba238fca338fca537fca636fca835fca934fdab33fdac33fdae32fdaf31fdb130fdb22ffdb42ffdb52efeb72dfeb82cfeba2cfebb2bfebd2afebe2afec029fdc229fdc328fdc527fdc627fdc827fdca26fdcb26fccd25fcce25fcd025fcd225fbd324fbd524fbd724fad824fada24f9dc24f9dd25f8df25f8e125f7e225f7e425f6e626f6e826f5e926f5eb27f4ed27f3ee27f3f027f2f227f1f426f1f525f0f724f0f921")),nr={ROW_ID:"__id__"},rr={ACTION_INF:"actionInf",ON_LAYER_DRAW:"onlayerdraw"},ir=n(0),ar=n.n(ir),or=Array.prototype.slice,ur=function(e){return e},cr=1,sr=2,lr=3,fr=4,hr=1e-6;function translateX(e){return"translate("+(e+.5)+",0)"}function translateY(e){return"translate(0,"+(e+.5)+")"}function entering(){return!this.__axis}function axis_axis(e,t){var n=[],r=null,i=null,a=null,o=6,u=6,c=3,s=e===cr||e===fr?-1:1,l=e===fr||e===sr?"x":"y",f=e===cr||e===lr?translateX:translateY;function axis(h){var d=null==r?t.ticks?t.ticks.apply(t,n):t.domain():r,p=null==i?t.tickFormat?t.tickFormat.apply(t,n):ur:i,y=Math.max(o,0)+c,g=t.range(),v=+g[0]+.5,m=+g[g.length-1]+.5,b=(t.bandwidth?function axis_center(e){var t=Math.max(0,e.bandwidth()-1)/2;return e.round()&&(t=Math.round(t)),function(n){return+e(n)+t}}:function axis_number(e){return function(t){return+e(t)}})(t.copy()),_=h.selection?h.selection():h,x=_.selectAll(".domain").data([null]),w=_.selectAll(".tick").data(d,t).order(),k=w.exit(),C=w.enter().append("g").attr("class","tick"),S=w.select("line"),P=w.select("text");x=x.merge(x.enter().insert("path",".tick").attr("class","domain").attr("stroke","#000")),w=w.merge(C),S=S.merge(C.append("line").attr("stroke","#000").attr(l+"2",s*o)),P=P.merge(C.append("text").attr("fill","#000").attr(l,s*y).attr("dy",e===cr?"0em":e===lr?"0.71em":"0.32em")).style("transform",a),h!==_&&(x=x.transition(h),w=w.transition(h),S=S.transition(h),P=P.transition(h),k=k.transition(h).attr("opacity",hr).attr("transform",function(e){return isFinite(e=b(e))?f(e):this.getAttribute("transform")}),C.attr("opacity",hr).attr("transform",function(e){var t=this.parentNode.__axis;return f(t&&isFinite(t=t(e))?t:b(e))})),k.remove(),x.attr("d",e===fr||e==sr?"M"+s*u+","+v+"H0.5V"+m+"H"+s*u:"M"+v+","+s*u+"V0.5H"+m+"V"+s*u),w.attr("opacity",1).attr("transform",function(e){return f(b(e))}),S.attr(l+"2",s*o),P.attr(l,s*y).text(p),_.filter(entering).attr("fill","none").attr("font-size",10).attr("font-family","sans-serif").attr("text-anchor",e===sr?"start":e===fr?"end":"middle"),_.each(function(){this.__axis=b})}return axis.scale=function(e){return arguments.length?(t=e,axis):t},axis.tickTransform=function(e){return arguments.length?(a=e,axis):a},axis.ticks=function(){return n=or.call(arguments),axis},axis.tickArguments=function(e){return arguments.length?(n=null==e?[]:or.call(e),axis):n.slice()},axis.tickValues=function(e){return arguments.length?(r=null==e?null:or.call(e),axis):r&&r.slice()},axis.tickFormat=function(e){return arguments.length?(i=e,axis):i},axis.tickSize=function(e){return arguments.length?(o=u=+e,axis):o},axis.tickSizeInner=function(e){return arguments.length?(o=+e,axis):o},axis.tickSizeOuter=function(e){return arguments.length?(u=+e,axis):u},axis.tickPadding=function(e){return arguments.length?(c=+e,axis):c},axis}var dr=Math.PI,pr=2*dr,yr=pr-1e-6;function Path(){this._x0=this._y0=this._x1=this._y1=null,this._=""}function path_path(){return new Path}Path.prototype=path_path.prototype={constructor:Path,moveTo:function moveTo(e,t){this._+="M"+(this._x0=this._x1=+e)+","+(this._y0=this._y1=+t)},closePath:function closePath(){null!==this._x1&&(this._x1=this._x0,this._y1=this._y0,this._+="Z")},lineTo:function lineTo(e,t){this._+="L"+(this._x1=+e)+","+(this._y1=+t)},quadraticCurveTo:function quadraticCurveTo(e,t,n,r){this._+="Q"+ +e+","+ +t+","+(this._x1=+n)+","+(this._y1=+r)},bezierCurveTo:function bezierCurveTo(e,t,n,r,i,a){this._+="C"+ +e+","+ +t+","+ +n+","+ +r+","+(this._x1=+i)+","+(this._y1=+a)},arcTo:function arcTo(e,t,n,r,i){e=+e,t=+t,n=+n,r=+r,i=+i;var a=this._x1,o=this._y1,u=n-e,c=r-t,s=a-e,l=o-t,f=s*s+l*l;if(i<0)throw new Error("negative radius: "+i);if(null===this._x1)this._+="M"+(this._x1=e)+","+(this._y1=t);else if(f>1e-6)if(Math.abs(l*u-c*s)>1e-6&&i){var h=n-a,d=r-o,p=u*u+c*c,y=h*h+d*d,g=Math.sqrt(p),v=Math.sqrt(f),m=i*Math.tan((dr-Math.acos((p+f-y)/(2*g*v)))/2),b=m/v,_=m/g;Math.abs(b-1)>1e-6&&(this._+="L"+(e+b*s)+","+(t+b*l)),this._+="A"+i+","+i+",0,0,"+ +(l*h>s*d)+","+(this._x1=e+_*u)+","+(this._y1=t+_*c)}else this._+="L"+(this._x1=e)+","+(this._y1=t);else;},arc:function arc(e,t,n,r,i,a){e=+e,t=+t;var o=(n=+n)*Math.cos(r),u=n*Math.sin(r),c=e+o,s=t+u,l=1^a,f=a?r-i:i-r;if(n<0)throw new Error("negative radius: "+n);null===this._x1?this._+="M"+c+","+s:(Math.abs(this._x1-c)>1e-6||Math.abs(this._y1-s)>1e-6)&&(this._+="L"+c+","+s),n&&(f<0&&(f=f%pr+pr),f>yr?this._+="A"+n+","+n+",0,1,"+l+","+(e-o)+","+(t-u)+"A"+n+","+n+",0,1,"+l+","+(this._x1=c)+","+(this._y1=s):f>1e-6&&(this._+="A"+n+","+n+",0,"+ +(f>=dr)+","+l+","+(this._x1=e+n*Math.cos(i))+","+(this._y1=t+n*Math.sin(i))))},rect:function rect(e,t,n,r){this._+="M"+(this._x0=this._x1=+e)+","+(this._y0=this._y1=+t)+"h"+ +n+"v"+ +r+"h"+-n+"Z"},toString:function toString(){return this._}};var gr=path_path,vr=function(e){return function constant(){return e}},mr=Math.abs,br=Math.atan2,_r=Math.cos,xr=Math.max,wr=Math.min,kr=Math.sin,Cr=Math.sqrt,Sr=1e-12,Pr=Math.PI,Ar=Pr/2,Er=2*Pr;function asin(e){return e>=1?Ar:e<=-1?-Ar:Math.asin(e)}function arcInnerRadius(e){return e.innerRadius}function arcOuterRadius(e){return e.outerRadius}function arcStartAngle(e){return e.startAngle}function arcEndAngle(e){return e.endAngle}function arcPadAngle(e){return e&&e.padAngle}function cornerTangents(e,t,n,r,i,a,o){var u=e-n,c=t-r,s=(o?a:-a)/Cr(u*u+c*c),l=s*c,f=-s*u,h=e+l,d=t+f,p=n+l,y=r+f,g=(h+p)/2,v=(d+y)/2,m=p-h,b=y-d,_=m*m+b*b,x=i-a,w=h*y-p*d,k=(b<0?-1:1)*Cr(xr(0,x*x*_-w*w)),C=(w*b-m*k)/_,S=(-w*m-b*k)/_,P=(w*b+m*k)/_,A=(-w*m+b*k)/_,E=C-g,M=S-v,O=P-g,T=A-v;return E*E+M*M>O*O+T*T&&(C=P,S=A),{cx:C,cy:S,x01:-l,y01:-f,x11:C*(i/x-1),y11:S*(i/x-1)}}function Linear(e){this._context=e}Linear.prototype={areaStart:function areaStart(){this._line=0},areaEnd:function areaEnd(){this._line=NaN},lineStart:function lineStart(){this._point=0},lineEnd:function lineEnd(){(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function point(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;default:this._context.lineTo(e,t)}}};var Mr=function(e){return new Linear(e)};function point_x(e){return e[0]}function point_y(e){return e[1]}var Or=function(){var e=point_x,t=point_y,n=vr(!0),r=null,i=Mr,a=null;function line(o){var u,c,s,l=o.length,f=!1;for(null==r&&(a=i(s=gr())),u=0;u<=l;++u)!(u=l;--f)u.point(g[f],v[f]);u.lineEnd(),u.areaEnd()}y&&(g[s]=+e(h,s,c),v[s]=+n(h,s,c),u.point(t?+t(h,s,c):g[s],r?+r(h,s,c):v[s]))}if(d)return u=null,d+""||null}function arealine(){return Or().defined(i).curve(o).context(a)}return area.x=function(n){return arguments.length?(e="function"==typeof n?n:vr(+n),t=null,area):e},area.x0=function(t){return arguments.length?(e="function"==typeof t?t:vr(+t),area):e},area.x1=function(e){return arguments.length?(t=null==e?null:"function"==typeof e?e:vr(+e),area):t},area.y=function(e){return arguments.length?(n="function"==typeof e?e:vr(+e),r=null,area):n},area.y0=function(e){return arguments.length?(n="function"==typeof e?e:vr(+e),area):n},area.y1=function(e){return arguments.length?(r=null==e?null:"function"==typeof e?e:vr(+e),area):r},area.lineX0=area.lineY0=function(){return arealine().x(e).y(n)},area.lineY1=function(){return arealine().x(e).y(r)},area.lineX1=function(){return arealine().x(t).y(n)},area.defined=function(e){return arguments.length?(i="function"==typeof e?e:vr(!!e),area):i},area.curve=function(e){return arguments.length?(o=e,null!=a&&(u=o(a)),area):o},area.context=function(e){return arguments.length?(null==e?a=u=null:u=o(a=e),area):a},area},Fr=function(e,t){return te?1:t>=e?0:NaN},Nr=function(e){return e};curveRadial(Mr);function Radial(e){this._curve=e}function curveRadial(e){function radial(t){return new Radial(e(t))}return radial._curve=e,radial}Radial.prototype={areaStart:function areaStart(){this._curve.areaStart()},areaEnd:function areaEnd(){this._curve.areaEnd()},lineStart:function lineStart(){this._curve.lineStart()},lineEnd:function lineEnd(){this._curve.lineEnd()},point:function point(e,t){this._curve.point(t*Math.sin(e),t*-Math.cos(e))}};var jr=Array.prototype.slice;var Ir={draw:function draw(e,t){var n=Math.sqrt(t/Pr);e.moveTo(n,0),e.arc(0,0,n,0,Er)}},Dr={draw:function draw(e,t){var n=Math.sqrt(t/5)/2;e.moveTo(-3*n,-n),e.lineTo(-n,-n),e.lineTo(-n,-3*n),e.lineTo(n,-3*n),e.lineTo(n,-n),e.lineTo(3*n,-n),e.lineTo(3*n,n),e.lineTo(n,n),e.lineTo(n,3*n),e.lineTo(-n,3*n),e.lineTo(-n,n),e.lineTo(-3*n,n),e.closePath()}},Lr=Math.sqrt(1/3),Rr=2*Lr,Br={draw:function draw(e,t){var n=Math.sqrt(t/Rr),r=n*Lr;e.moveTo(0,-n),e.lineTo(r,0),e.lineTo(0,n),e.lineTo(-r,0),e.closePath()}},zr=Math.sin(Pr/10)/Math.sin(7*Pr/10),Hr=Math.sin(Er/10)*zr,Vr=-Math.cos(Er/10)*zr,Ur={draw:function draw(e,t){var n=Math.sqrt(.8908130915292852*t),r=Hr*n,i=Vr*n;e.moveTo(0,-n),e.lineTo(r,i);for(var a=1;a<5;++a){var o=Er*a/5,u=Math.cos(o),c=Math.sin(o);e.lineTo(c*n,-u*n),e.lineTo(u*r-c*i,c*r+u*i)}e.closePath()}},Wr={draw:function draw(e,t){var n=Math.sqrt(t),r=-n/2;e.rect(r,r,n,n)}},qr=Math.sqrt(3),Gr={draw:function draw(e,t){var n=-Math.sqrt(t/(3*qr));e.moveTo(0,2*n),e.lineTo(-qr*n,-n),e.lineTo(qr*n,-n),e.closePath()}},Yr=Math.sqrt(3)/2,Xr=1/Math.sqrt(12),Kr=3*(Xr/2+1),$r={draw:function draw(e,t){var n=Math.sqrt(t/Kr),r=n/2,i=n*Xr,a=r,o=n*Xr+n,u=-a,c=o;e.moveTo(r,i),e.lineTo(a,o),e.lineTo(u,c),e.lineTo(-.5*r-Yr*i,Yr*r+-.5*i),e.lineTo(-.5*a-Yr*o,Yr*a+-.5*o),e.lineTo(-.5*u-Yr*c,Yr*u+-.5*c),e.lineTo(-.5*r+Yr*i,-.5*i-Yr*r),e.lineTo(-.5*a+Yr*o,-.5*o-Yr*a),e.lineTo(-.5*u+Yr*c,-.5*c-Yr*u),e.closePath()}},Qr=function(){};function _point(e,t,n){e._context.bezierCurveTo((2*e._x0+e._x1)/3,(2*e._y0+e._y1)/3,(e._x0+2*e._x1)/3,(e._y0+2*e._y1)/3,(e._x0+4*e._x1+t)/6,(e._y0+4*e._y1+n)/6)}function Basis(e){this._context=e}Basis.prototype={areaStart:function areaStart(){this._line=0},areaEnd:function areaEnd(){this._line=NaN},lineStart:function lineStart(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function lineEnd(){switch(this._point){case 3:_point(this,this._x1,this._y1);case 2:this._context.lineTo(this._x1,this._y1)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function point(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;break;case 2:this._point=3,this._context.lineTo((5*this._x0+this._x1)/6,(5*this._y0+this._y1)/6);default:_point(this,e,t)}this._x0=this._x1,this._x1=e,this._y0=this._y1,this._y1=t}};function BasisClosed(e){this._context=e}BasisClosed.prototype={areaStart:Qr,areaEnd:Qr,lineStart:function lineStart(){this._x0=this._x1=this._x2=this._x3=this._x4=this._y0=this._y1=this._y2=this._y3=this._y4=NaN,this._point=0},lineEnd:function lineEnd(){switch(this._point){case 1:this._context.moveTo(this._x2,this._y2),this._context.closePath();break;case 2:this._context.moveTo((this._x2+2*this._x3)/3,(this._y2+2*this._y3)/3),this._context.lineTo((this._x3+2*this._x2)/3,(this._y3+2*this._y2)/3),this._context.closePath();break;case 3:this.point(this._x2,this._y2),this.point(this._x3,this._y3),this.point(this._x4,this._y4)}},point:function point(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._x2=e,this._y2=t;break;case 1:this._point=2,this._x3=e,this._y3=t;break;case 2:this._point=3,this._x4=e,this._y4=t,this._context.moveTo((this._x0+4*this._x1+e)/6,(this._y0+4*this._y1+t)/6);break;default:_point(this,e,t)}this._x0=this._x1,this._x1=e,this._y0=this._y1,this._y1=t}};function BasisOpen(e){this._context=e}BasisOpen.prototype={areaStart:function areaStart(){this._line=0},areaEnd:function areaEnd(){this._line=NaN},lineStart:function lineStart(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function lineEnd(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function point(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3;var n=(this._x0+4*this._x1+e)/6,r=(this._y0+4*this._y1+t)/6;this._line?this._context.lineTo(n,r):this._context.moveTo(n,r);break;case 3:this._point=4;default:_point(this,e,t)}this._x0=this._x1,this._x1=e,this._y0=this._y1,this._y1=t}};function Bundle(e,t){this._basis=new Basis(e),this._beta=t}Bundle.prototype={lineStart:function lineStart(){this._x=[],this._y=[],this._basis.lineStart()},lineEnd:function lineEnd(){var e=this._x,t=this._y,n=e.length-1;if(n>0)for(var r,i=e[0],a=t[0],o=e[n]-i,u=t[n]-a,c=-1;++c<=n;)r=c/n,this._basis.point(this._beta*e[c]+(1-this._beta)*(i+r*o),this._beta*t[c]+(1-this._beta)*(a+r*u));this._x=this._y=null,this._basis.lineEnd()},point:function point(e,t){this._x.push(+e),this._y.push(+t)}};(function custom(e){function bundle(t){return 1===e?new Basis(t):new Bundle(t,e)}return bundle.beta=function(e){return custom(+e)},bundle})(.85);function cardinal_point(e,t,n){e._context.bezierCurveTo(e._x1+e._k*(e._x2-e._x0),e._y1+e._k*(e._y2-e._y0),e._x2+e._k*(e._x1-t),e._y2+e._k*(e._y1-n),e._x2,e._y2)}function Cardinal(e,t){this._context=e,this._k=(1-t)/6}Cardinal.prototype={areaStart:function areaStart(){this._line=0},areaEnd:function areaEnd(){this._line=NaN},lineStart:function lineStart(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},lineEnd:function lineEnd(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:cardinal_point(this,this._x1,this._y1)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function point(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2,this._x1=e,this._y1=t;break;case 2:this._point=3;default:cardinal_point(this,e,t)}this._x0=this._x1,this._x1=this._x2,this._x2=e,this._y0=this._y1,this._y1=this._y2,this._y2=t}};(function custom(e){function cardinal(t){return new Cardinal(t,e)}return cardinal.tension=function(e){return custom(+e)},cardinal})(0);function CardinalClosed(e,t){this._context=e,this._k=(1-t)/6}CardinalClosed.prototype={areaStart:Qr,areaEnd:Qr,lineStart:function lineStart(){this._x0=this._x1=this._x2=this._x3=this._x4=this._x5=this._y0=this._y1=this._y2=this._y3=this._y4=this._y5=NaN,this._point=0},lineEnd:function lineEnd(){switch(this._point){case 1:this._context.moveTo(this._x3,this._y3),this._context.closePath();break;case 2:this._context.lineTo(this._x3,this._y3),this._context.closePath();break;case 3:this.point(this._x3,this._y3),this.point(this._x4,this._y4),this.point(this._x5,this._y5)}},point:function point(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._x3=e,this._y3=t;break;case 1:this._point=2,this._context.moveTo(this._x4=e,this._y4=t);break;case 2:this._point=3,this._x5=e,this._y5=t;break;default:cardinal_point(this,e,t)}this._x0=this._x1,this._x1=this._x2,this._x2=e,this._y0=this._y1,this._y1=this._y2,this._y2=t}};(function custom(e){function cardinal(t){return new CardinalClosed(t,e)}return cardinal.tension=function(e){return custom(+e)},cardinal})(0);function CardinalOpen(e,t){this._context=e,this._k=(1-t)/6}CardinalOpen.prototype={areaStart:function areaStart(){this._line=0},areaEnd:function areaEnd(){this._line=NaN},lineStart:function lineStart(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},lineEnd:function lineEnd(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function point(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3,this._line?this._context.lineTo(this._x2,this._y2):this._context.moveTo(this._x2,this._y2);break;case 3:this._point=4;default:cardinal_point(this,e,t)}this._x0=this._x1,this._x1=this._x2,this._x2=e,this._y0=this._y1,this._y1=this._y2,this._y2=t}};(function custom(e){function cardinal(t){return new CardinalOpen(t,e)}return cardinal.tension=function(e){return custom(+e)},cardinal})(0);function catmullRom_point(e,t,n){var r=e._x1,i=e._y1,a=e._x2,o=e._y2;if(e._l01_a>Sr){var u=2*e._l01_2a+3*e._l01_a*e._l12_a+e._l12_2a,c=3*e._l01_a*(e._l01_a+e._l12_a);r=(r*u-e._x0*e._l12_2a+e._x2*e._l01_2a)/c,i=(i*u-e._y0*e._l12_2a+e._y2*e._l01_2a)/c}if(e._l23_a>Sr){var s=2*e._l23_2a+3*e._l23_a*e._l12_a+e._l12_2a,l=3*e._l23_a*(e._l23_a+e._l12_a);a=(a*s+e._x1*e._l23_2a-t*e._l12_2a)/l,o=(o*s+e._y1*e._l23_2a-n*e._l12_2a)/l}e._context.bezierCurveTo(r,i,a,o,e._x2,e._y2)}function CatmullRom(e,t){this._context=e,this._alpha=t}CatmullRom.prototype={areaStart:function areaStart(){this._line=0},areaEnd:function areaEnd(){this._line=NaN},lineStart:function lineStart(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function lineEnd(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:this.point(this._x2,this._y2)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function point(e,t){if(e=+e,t=+t,this._point){var n=this._x2-e,r=this._y2-t;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(n*n+r*r,this._alpha))}switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;break;case 2:this._point=3;default:catmullRom_point(this,e,t)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=e,this._y0=this._y1,this._y1=this._y2,this._y2=t}};var Zr=function custom(e){function catmullRom(t){return e?new CatmullRom(t,e):new Cardinal(t,0)}return catmullRom.alpha=function(e){return custom(+e)},catmullRom}(.5);function CatmullRomClosed(e,t){this._context=e,this._alpha=t}CatmullRomClosed.prototype={areaStart:Qr,areaEnd:Qr,lineStart:function lineStart(){this._x0=this._x1=this._x2=this._x3=this._x4=this._x5=this._y0=this._y1=this._y2=this._y3=this._y4=this._y5=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function lineEnd(){switch(this._point){case 1:this._context.moveTo(this._x3,this._y3),this._context.closePath();break;case 2:this._context.lineTo(this._x3,this._y3),this._context.closePath();break;case 3:this.point(this._x3,this._y3),this.point(this._x4,this._y4),this.point(this._x5,this._y5)}},point:function point(e,t){if(e=+e,t=+t,this._point){var n=this._x2-e,r=this._y2-t;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(n*n+r*r,this._alpha))}switch(this._point){case 0:this._point=1,this._x3=e,this._y3=t;break;case 1:this._point=2,this._context.moveTo(this._x4=e,this._y4=t);break;case 2:this._point=3,this._x5=e,this._y5=t;break;default:catmullRom_point(this,e,t)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=e,this._y0=this._y1,this._y1=this._y2,this._y2=t}};(function custom(e){function catmullRom(t){return e?new CatmullRomClosed(t,e):new CardinalClosed(t,0)}return catmullRom.alpha=function(e){return custom(+e)},catmullRom})(.5);function CatmullRomOpen(e,t){this._context=e,this._alpha=t}CatmullRomOpen.prototype={areaStart:function areaStart(){this._line=0},areaEnd:function areaEnd(){this._line=NaN},lineStart:function lineStart(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function lineEnd(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function point(e,t){if(e=+e,t=+t,this._point){var n=this._x2-e,r=this._y2-t;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(n*n+r*r,this._alpha))}switch(this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3,this._line?this._context.lineTo(this._x2,this._y2):this._context.moveTo(this._x2,this._y2);break;case 3:this._point=4;default:catmullRom_point(this,e,t)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=e,this._y0=this._y1,this._y1=this._y2,this._y2=t}};(function custom(e){function catmullRom(t){return e?new CatmullRomOpen(t,e):new CardinalOpen(t,0)}return catmullRom.alpha=function(e){return custom(+e)},catmullRom})(.5);function LinearClosed(e){this._context=e}LinearClosed.prototype={areaStart:Qr,areaEnd:Qr,lineStart:function lineStart(){this._point=0},lineEnd:function lineEnd(){this._point&&this._context.closePath()},point:function point(e,t){e=+e,t=+t,this._point?this._context.lineTo(e,t):(this._point=1,this._context.moveTo(e,t))}};function monotone_sign(e){return e<0?-1:1}function slope3(e,t,n){var r=e._x1-e._x0,i=t-e._x1,a=(e._y1-e._y0)/(r||i<0&&-0),o=(n-e._y1)/(i||r<0&&-0),u=(a*i+o*r)/(r+i);return(monotone_sign(a)+monotone_sign(o))*Math.min(Math.abs(a),Math.abs(o),.5*Math.abs(u))||0}function slope2(e,t){var n=e._x1-e._x0;return n?(3*(e._y1-e._y0)/n-t)/2:t}function monotone_point(e,t,n){var r=e._x0,i=e._y0,a=e._x1,o=e._y1,u=(a-r)/3;e._context.bezierCurveTo(r+u,i+u*t,a-u,o-u*n,a,o)}function MonotoneX(e){this._context=e}function MonotoneY(e){this._context=new ReflectContext(e)}function ReflectContext(e){this._context=e}function Natural(e){this._context=e}function controlPoints(e){var t,n,r=e.length-1,i=new Array(r),a=new Array(r),o=new Array(r);for(i[0]=0,a[0]=2,o[0]=e[0]+2*e[1],t=1;t=0;--t)i[t]=(o[t]-i[t+1])/a[t];for(a[r-1]=(e[r]+i[r-1])/2,t=0;t=0&&(this._t=1-this._t,this._line=1-this._line)},point:function point(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;default:if(this._t<=0)this._context.lineTo(this._x,t),this._context.lineTo(e,t);else{var n=this._x*(1-this._t)+e*this._t;this._context.lineTo(n,this._y),this._context.lineTo(n,t)}}this._x=e,this._y=t}};var Jr=function(e){return new Step(e,.5)};function stepBefore(e){return new Step(e,0)}function stepAfter(e){return new Step(e,1)}var ei=function(e,t){if((i=e.length)>1)for(var n,r,i,a=1,o=e[t[0]],u=o.length;a=0;)n[t]=t;return n};function stackValue(e,t){return e[t]}var ni=function(e){var t=e.map(ascending_sum);return ti(e).sort(function(e,n){return t[e]-t[n]})};function ascending_sum(e){for(var t,n=0,r=-1,i=e.length;++r0)){if(a/=h,h<0){if(a0){if(a>f)return;a>l&&(l=a)}if(a=r-c,h||!(a<0)){if(a/=h,h<0){if(a>f)return;a>l&&(l=a)}else if(h>0){if(a0)){if(a/=d,d<0){if(a0){if(a>f)return;a>l&&(l=a)}if(a=i-s,d||!(a<0)){if(a/=d,d<0){if(a>f)return;a>l&&(l=a)}else if(d>0){if(a0||f<1)||(l>0&&(e[0]=[c+l*h,s+l*d]),f<1&&(e[1]=[c+f*h,s+f*d]),!0)}}}}}function connectEdge(e,t,n,r,i){var a=e[1];if(a)return!0;var o,u,c=e[0],s=e.left,l=e.right,f=s[0],h=s[1],d=l[0],p=l[1],y=(f+d)/2,g=(h+p)/2;if(p===h){if(y=r)return;if(f>d){if(c){if(c[1]>=i)return}else c=[y,n];a=[y,i]}else{if(c){if(c[1]1)if(f>d){if(c){if(c[1]>=i)return}else c=[(n-u)/o,n];a=[(i-u)/o,i]}else{if(c){if(c[1]=r)return}else c=[t,o*t+u];a=[r,o*r+u]}else{if(c){if(c[0]=-Ai)){var d=c*c+s*s,p=l*l+f*f,y=(f*d-s*p)/h,g=(c*p-l*d)/h,v=_i.pop()||new function Circle(){RedBlackNode(this),this.x=this.y=this.arc=this.site=this.cy=null};v.arc=e,v.site=i,v.x=y+o,v.y=(v.cy=g+u)+Math.sqrt(y*y+g*g),e.circle=v;for(var m=null,b=Ci._;b;)if(v.yPi)u=u.L;else{if(!((i=a-rightBreakPoint(u,o))>Pi)){r>-Pi?(t=u.P,n=u):i>-Pi?(t=u,n=u.N):t=n=u;break}if(!u.R){t=u;break}u=u.R}!function createCell(e){return ki[e.index]={site:e,halfedges:[]}}(e);var c=createBeach(e);if(wi.insert(t,c),t||n){if(t===n)return detachCircle(t),n=createBeach(t.site),wi.insert(c,n),c.edge=n.edge=createEdge(t.site,c.site),attachCircle(t),void attachCircle(n);if(n){detachCircle(t),detachCircle(n);var s=t.site,l=s[0],f=s[1],h=e[0]-l,d=e[1]-f,p=n.site,y=p[0]-l,g=p[1]-f,v=2*(h*g-d*y),m=h*h+d*d,b=y*y+g*g,_=[(g*m-d*b)/v+l,(h*b-y*m)/v+f];setEdgeEnd(n.edge,s,p,_),c.edge=createEdge(s,e,null,_),n.edge=createEdge(e,p,null,_),attachCircle(t),attachCircle(n)}else c.edge=createEdge(t.site,c.site)}}function leftBreakPoint(e,t){var n=e.site,r=n[0],i=n[1],a=i-t;if(!a)return r;var o=e.P;if(!o)return-1/0;var u=(n=o.site)[0],c=n[1],s=c-t;if(!s)return u;var l=u-r,f=1/a-1/s,h=l/s;return f?(-h+Math.sqrt(h*h-2*f*(l*l/(-2*s)-c+s/2+i-a/2)))/f+r:(r+u)/2}function rightBreakPoint(e,t){var n=e.N;if(n)return leftBreakPoint(n,t);var r=e.site;return r[1]===t?r[0]:1/0}var wi,ki,Ci,Si,Pi=1e-6,Ai=1e-12;function triangleArea(e,t,n){return(e[0]-n[0])*(t[1]-e[1])-(e[0]-t[0])*(n[1]-e[1])}function lexicographic(e,t){return t[1]-e[1]||t[0]-e[0]}function Diagram(e,t){var n,r,i,a=e.sort(lexicographic).pop();for(Si=[],ki=new Array(e.length),wi=new mi,Ci=new mi;;)if(i=bi,a&&(!i||a[1]Pi||Math.abs(i[0][1]-i[1][1])>Pi)||delete Si[a]}(o,u,c,s),function clipCells(e,t,n,r){var i,a,o,u,c,s,l,f,h,d,p,y,g=ki.length,v=!0;for(i=0;iPi||Math.abs(y-h)>Pi)&&(c.splice(u,0,Si.push(createBorderEdge(o,d,Math.abs(p-e)Pi?[e,Math.abs(f-e)Pi?[Math.abs(h-r)Pi?[n,Math.abs(f-n)Pi?[Math.abs(h-t)=u)return null;var c=e-i.site[0],s=t-i.site[1],l=c*c+s*s;do{i=a.cells[r=o],o=null,i.halfedges.forEach(function(n){var r=a.edges[n],u=r.left;if(u!==i.site&&u||(u=r.right)){var c=e-u[0],s=t-u[1],f=c*c+s*s;ft?0===i?i:"left"===n?i-1:i:i===e.length-1?i:"left"===n?i:i+1},Gi=(requestAnimationFrame,cancelAnimationFrame,function getQualifiedClassName(e,t,n){return[n+"-"+(e=e.replace(/^\.*/,"")),n+"-"+e+"-"+t]}),Yi=function defaultValue(e,t){return void 0===e||"object"===(void 0===e?"undefined":Ii(e))&&!e?t:e},Xi=function objectIterator(e,t){for(var n in e)Object.hasOwnProperty.call(e,n)&&t(n,e)},Ki=function(){function Voronoi(e){_classCallCheck(this,Voronoi),this._voronoi=Oi().x(function(e){return e.x}).y(function(e){return e.y}),this.data(e)}return ji(Voronoi,[{key:"data",value:function data(e){return e&&(this._voronoiFn=this._voronoi(e)),this}},{key:"find",value:function find(e,t,n){return this._voronoiFn.find(e,t,n)}}]),Voronoi}(),$i=function(){function Store(e){_classCallCheck(this,Store),this.model=Fi.a.create(e),this._listeners=[]}return ji(Store,[{key:"serialize",value:function serialize(){return this.model.serialize()}},{key:"commit",value:function commit(e,t){this.model.prop(e,t)}},{key:"registerChangeListener",value:function registerChangeListener(e,t,n){var r=e;Array.isArray(e)||(r=[e]);var i=this.model.next(r,t,n);return this._listeners.push(i),this}},{key:"registerImmediateListener",value:function registerImmediateListener(e,t,n){var r=e;Array.isArray(e)||(r=[e]);var i=this.model.on(r,t,n);return this._listeners.push(i),this}},{key:"get",value:function get(e){return this.model.prop(e)}},{key:"computed",value:function computed(e,t){return this.model.calculatedProp(e,t)}},{key:"unsubscribeAll",value:function unsubscribeAll(){this._listeners.forEach(function(e){return e()})}}]),Store}(),Qi=function intSanitizer(e){var t=e.toString().match(/(\d+)(px)*/g);return t?parseInt(t[0],10):null},Zi=function transactor(e,t,n){var r=void 0,i=n&&n instanceof Fi.a?n:Fi.a.create({}),a=function _loop(n){({}).hasOwnProperty.call(t,n)&&(r=t[n],i.prop(n)||i.append(_defineProperty({},n,r.value)),e[n]=function(t,r,a){return function(){for(var o=arguments.length,u=Array(o),c=0;c=0;n--)if(e[n]!==t[n])return!1;return!0}(t,n):"Object"===e?Object.is(t,n):t===n}},ta={INTERFACE_IMPL:"Method not implemented"},na=function mergeRecursive(e,t){for(var n in t)Di(e[n])&&Di(t[n])?mergeRecursive(e[n],t[n]):t[n]instanceof Object&&t[n].constructor===Object?(e[n]={},mergeRecursive(e[n],t[n])):e[n]=t[n];return e},ra=function interpolator(){return Pe},ia=function numberInterpolator(){return ge},aa=function piecewiseInterpolator(){return piecewise_piecewise};var oa=function rgbToHsv(e,t,n){var r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:1;e=+e,t=+t,n=+n,r=+r,e/=255,t/=255,n/=255;var i=Math.max(e,t,n),a=Math.min(e,t,n),o=void 0,u=void 0,c=(i+a)/2;if(i===a)o=u=0;else{var s=i-a;switch(u=c>.5?s/(2-i-a):s/(i+a),i){case e:o=(t-n)/s+(t=i[0]&&r<=i[1]})},{saveChild:!1,mode:n})},sa=function getDataModelFromIdentifiers(e,t,n){var r=void 0;if(t instanceof Array){var i=e.getFieldsConfig(),a=t.slice(1,t.length);if(t instanceof Function)r=t(e,{},!1);else if(t instanceof Array&&t[0].length){var o=t[0].filter(function(e){return e in i});r=e.select(function(e){var t=!0;return o.forEach(function(n,r){var i=e[n].valueOf(),o=a.findIndex(function(e){return e[r]===i});t=t&&-1!==o}),t},{saveChild:!1,mode:n})}}else r=ca(e,t,n);return r},la=function registerListeners(e,t){var n=t(e);for(var r in n)if({}.hasOwnProperty.call(n,r)){var i=n[r],a=i.type,o=i.props,u=i.listener;e.store()[a](o,u)}},fa=function isValidValue(e){return!isNaN(e)&&e!==-1/0&&e!==1/0},ha=function getObjProp(e){for(var t=arguments.length,n=Array(t>1?t-1:0),r=1;r1)for(var n,r,i,a,o,u,c=0,s=e[t[0]].length;c=0?(r[0]=a,r[1]=a+=i):i<0?(r[1]=o,r[0]=o+=i):r[0]=a}),_defineProperty(Mi,"none",ei),_defineProperty(Mi,"expand",function(e,t){if((r=e.length)>0){for(var n,r,i,a=0,o=e[0].length;a0&&(r=(n=e[t[0]]).length)>0){for(var n,r,i,a=0,o=1;o0&&(d+=f);for(null!=t?p.sort(function(e,n){return t(y[e],y[n])}):null!=n&&p.sort(function(e,t){return n(o[e],o[t])}),u=0,s=d?(v-h*b)/d:0;u0?f*s:0)+b,y[c]={data:o[c],index:u,value:f,startAngle:g,endAngle:l,padAngle:m};return y}return pie.value=function(t){return arguments.length?(e="function"==typeof t?t:vr(+t),pie):e},pie.sortValues=function(e){return arguments.length?(t=e,n=null,pie):t},pie.sort=function(e){return arguments.length?(n=e,t=null,pie):n},pie.startAngle=function(e){return arguments.length?(r="function"==typeof e?e:vr(+e),pie):r},pie.endAngle=function(e){return arguments.length?(i="function"==typeof e?e:vr(+e),pie):i},pie.padAngle=function(e){return arguments.length?(a="function"==typeof e?e:vr(+e),pie):a},pie},arc:function(){var e=arcInnerRadius,t=arcOuterRadius,n=vr(0),r=null,i=arcStartAngle,a=arcEndAngle,o=arcPadAngle,u=null;function arc(){var c,s,l=+e.apply(this,arguments),f=+t.apply(this,arguments),h=i.apply(this,arguments)-Ar,d=a.apply(this,arguments)-Ar,p=mr(d-h),y=d>h;if(u||(u=c=gr()),fSr)if(p>Er-Sr)u.moveTo(f*_r(h),f*kr(h)),u.arc(0,0,f,h,d,!y),l>Sr&&(u.moveTo(l*_r(d),l*kr(d)),u.arc(0,0,l,d,h,y));else{var g,v,m=h,b=d,_=h,x=d,w=p,k=p,C=o.apply(this,arguments)/2,S=C>Sr&&(r?+r.apply(this,arguments):Cr(l*l+f*f)),P=wr(mr(f-l)/2,+n.apply(this,arguments)),A=P,E=P;if(S>Sr){var M=asin(S/l*kr(C)),O=asin(S/f*kr(C));(w-=2*M)>Sr?(_+=M*=y?1:-1,x-=M):(w=0,_=x=(h+d)/2),(k-=2*O)>Sr?(m+=O*=y?1:-1,b-=O):(k=0,m=b=(h+d)/2)}var T=f*_r(m),F=f*kr(m),N=l*_r(x),j=l*kr(x);if(P>Sr){var I=f*_r(b),D=f*kr(b),L=l*_r(_),R=l*kr(_);if(pSr?function intersect(e,t,n,r,i,a,o,u){var c=n-e,s=r-t,l=o-i,f=u-a,h=(l*(t-a)-f*(e-i))/(f*c-l*s);return[e+h*c,t+h*s]}(T,F,L,R,I,D,N,j):[N,j],z=T-B[0],H=F-B[1],V=I-B[0],U=D-B[1],W=1/kr(function acos(e){return e>1?0:e<-1?Pr:Math.acos(e)}((z*V+H*U)/(Cr(z*z+H*H)*Cr(V*V+U*U)))/2),q=Cr(B[0]*B[0]+B[1]*B[1]);A=wr(P,(l-q)/(W-1)),E=wr(P,(f-q)/(W+1))}}k>Sr?E>Sr?(g=cornerTangents(L,R,T,F,f,E,y),v=cornerTangents(I,D,N,j,f,E,y),u.moveTo(g.cx+g.x01,g.cy+g.y01),ESr&&w>Sr?A>Sr?(g=cornerTangents(N,j,I,D,l,-A,y),v=cornerTangents(T,F,L,R,l,-A,y),u.lineTo(g.cx+g.x01,g.cy+g.y01),A=0&&"xmlns"!==(t=e.slice(0,n))&&(e=e.slice(n+1)),ka.hasOwnProperty(t)?{space:ka[t],local:e}:e};var Sa=function(e){var t=Ca(e);return(t.local?function creatorFixed(e){return function(){return this.ownerDocument.createElementNS(e.space,e.local)}}:function creatorInherit(e){return function(){var t=this.ownerDocument,n=this.namespaceURI;return n===wa&&t.documentElement.namespaceURI===wa?t.createElement(e):t.createElementNS(n,e)}})(t)};function selector_none(){}var Pa=function(e){return null==e?selector_none:function(){return this.querySelector(e)}};function selectorAll_empty(){return[]}var Aa=function(e){return null==e?selectorAll_empty:function(){return this.querySelectorAll(e)}},Ea=function matcher(e){return function(){return this.matches(e)}};if("undefined"!=typeof document){var Ma=document.documentElement;if(!Ma.matches){var Oa=Ma.webkitMatchesSelector||Ma.msMatchesSelector||Ma.mozMatchesSelector||Ma.oMatchesSelector;Ea=function matcher(e){return function(){return Oa.call(this,e)}}}}var Ta=Ea,Fa=function(e){return new Array(e.length)};function EnterNode(e,t){this.ownerDocument=e.ownerDocument,this.namespaceURI=e.namespaceURI,this._next=null,this._parent=e,this.__data__=t}EnterNode.prototype={constructor:EnterNode,appendChild:function appendChild(e){return this._parent.insertBefore(e,this._next)},insertBefore:function insertBefore(e,t){return this._parent.insertBefore(e,t)},querySelector:function querySelector(e){return this._parent.querySelector(e)},querySelectorAll:function querySelectorAll(e){return this._parent.querySelectorAll(e)}};var Na="$";function bindIndex(e,t,n,r,i,a){for(var o,u=0,c=t.length,s=a.length;ut?1:e>=t?0:NaN}var ja=function(e){return e.ownerDocument&&e.ownerDocument.defaultView||e.document&&e||e.defaultView};function styleValue(e,t){return e.style.getPropertyValue(t)||ja(e).getComputedStyle(e,null).getPropertyValue(t)}function classArray(e){return e.trim().split(/^|\s+/)}function classList(e){return e.classList||new ClassList(e)}function ClassList(e){this._node=e,this._names=classArray(e.getAttribute("class")||"")}function classedAdd(e,t){for(var n=classList(e),r=-1,i=t.length;++r=0&&(this._names.splice(t,1),this._node.setAttribute("class",this._names.join(" ")))},contains:function contains(e){return this._names.indexOf(e)>=0}};function textRemove(){this.textContent=""}function htmlRemove(){this.innerHTML=""}function raise_raise(){this.nextSibling&&this.parentNode.appendChild(this)}function lower(){this.previousSibling&&this.parentNode.insertBefore(this,this.parentNode.firstChild)}function constantNull(){return null}function remove_remove(){var e=this.parentNode;e&&e.removeChild(this)}function selection_cloneShallow(){return this.parentNode.insertBefore(this.cloneNode(!1),this.nextSibling)}function selection_cloneDeep(){return this.parentNode.insertBefore(this.cloneNode(!0),this.nextSibling)}var Ia={},Da=null;"undefined"!=typeof document&&("onmouseenter"in document.documentElement||(Ia={mouseenter:"mouseover",mouseleave:"mouseout"}));function filterContextListener(e,t,n){return e=contextListener(e,t,n),function(t){var n=t.relatedTarget;n&&(n===this||8&n.compareDocumentPosition(this))||e.call(this,t)}}function contextListener(e,t,n){return function(r){var i=Da;Da=r;try{e.call(this,this.__data__,t,n)}finally{Da=i}}}function onRemove(e){return function(){var t=this.__on;if(t){for(var n,r=0,i=-1,a=t.length;r=_&&(_=b+1);!(m=g[_])&&++_=0;)(r=i[a])&&(o&&o!==r.nextSibling&&o.parentNode.insertBefore(r,o),o=r);return this},sort:function(e){function compareNode(t,n){return t&&n?e(t.__data__,n.__data__):!t-!n}e||(e=sort_ascending);for(var t=this._groups,n=t.length,r=new Array(n),i=0;i1?this.each((null==t?function styleRemove(e){return function(){this.style.removeProperty(e)}}:"function"==typeof t?function styleFunction(e,t,n){return function(){var r=t.apply(this,arguments);null==r?this.style.removeProperty(e):this.style.setProperty(e,r,n)}}:function styleConstant(e,t,n){return function(){this.style.setProperty(e,t,n)}})(e,t,null==n?"":n)):styleValue(this.node(),e)},property:function(e,t){return arguments.length>1?this.each((null==t?function propertyRemove(e){return function(){delete this[e]}}:"function"==typeof t?function propertyFunction(e,t){return function(){var n=t.apply(this,arguments);null==n?delete this[e]:this[e]=n}}:function propertyConstant(e,t){return function(){this[e]=t}})(e,t)):this.node()[e]},classed:function(e,t){var n=classArray(e+"");if(arguments.length<2){for(var r=classList(this.node()),i=-1,a=n.length;++i=0&&(t=e.slice(n+1),e=e.slice(0,n)),{type:e,name:t}})}(e+""),o=a.length;if(!(arguments.length<2)){for(u=t?onAdd:onRemove,null==n&&(n=!1),r=0;r=0&&(n=e.slice(r+1),e=e.slice(0,r)),e&&!t.hasOwnProperty(e))throw new Error("unknown type: "+e);return{type:e,name:n}})}(e+"",r),a=-1,o=i.length;if(!(arguments.length<2)){if(null!=t&&"function"!=typeof t)throw new Error("invalid callback: "+t);for(;++a0)for(var n,r,i=new Array(n),a=0;af}c.mouse("drag")}function mouseupped(){Ba(Da.view).on("mousemove.drag mouseup.drag",null),function yesdrag(e,t){var n=e.document.documentElement,r=Ba(e).on("dragstart.drag",null);t&&(r.on("click.drag",Ya,!0),setTimeout(function(){r.on("click.drag",null)},0)),"onselectstart"in n?r.on("selectstart.drag",null):(n.style.MozUserSelect=n.__noselect,delete n.__noselect)}(Da.view,n),Ya(),c.mouse("end")}function touchstarted(){if(i.apply(this,arguments)){var e,t,n=Da.changedTouches,r=a.apply(this,arguments),o=n.length;for(e=0;e=0&&t._call.call(null,e),t=t._next;--eo}()}finally{eo=0,function nap(){var e,t,n=$a,r=1/0;for(;n;)n._call?(r>n._time&&(r=n._time),e=n,n=n._next):(t=n._next,n._next=null,n=e?e._next=t:$a=t);Qa=e,sleep(r)}(),ao=0}}function poke(){var e=uo.now(),t=e-io;t>ro&&(oo-=t,io=e)}function sleep(e){eo||(to&&(to=clearTimeout(to)),e-ao>24?(e<1/0&&(to=setTimeout(wake,e-uo.now()-oo)),no&&(no=clearInterval(no))):(no||(io=uo.now(),no=setInterval(poke,ro)),eo=1,co(wake)))}Timer.prototype=timer.prototype={constructor:Timer,restart:function restart(e,t,n){if("function"!=typeof e)throw new TypeError("callback is not a function");n=(null==n?now():+n)+(null==t?0:+t),this._next||Qa===this||(Qa?Qa._next=this:$a=this,Qa=this),this._call=e,this._time=n,sleep()},stop:function stop(){this._call&&(this._call=null,this._time=1/0,sleep())}};var so=function(e,t,n){var r=new Timer;return t=null==t?0:+t,r.restart(function(n){r.stop(),e(n+t)},t,n),r},lo=Ga("start","end","interrupt"),fo=[],ho=0,po=1,yo=2,go=3,vo=4,mo=5,bo=6,_o=function(e,t,n,r,i,a){var o=e.__transition;if(o){if(n in o)return}else e.__transition={};!function schedule_create(e,t,n){var r,i=e.__transition;function start(a){var o,u,c,s;if(n.state!==po)return stop();for(o in i)if((s=i[o]).name===n.name){if(s.state===go)return so(start);s.state===vo?(s.state=bo,s.timer.stop(),s.on.call("interrupt",e,e.__data__,s.index,s.group),delete i[o]):+oho)throw new Error("too late; already scheduled");return n}function schedule_set(e,t){var n=schedule_get(e,t);if(n.state>yo)throw new Error("too late; already started");return n}function schedule_get(e,t){var n=e.__transition;if(!n||!(n=n[t]))throw new Error("transition not found");return n}function tweenValue(e,t,n){var r=e._id;return e.each(function(){var e=schedule_set(this,r);(e.value||(e.value={}))[t]=n.apply(this,arguments)}),function(e){return schedule_get(e,r).value[t]}}var xo=function(e,t){var n;return("number"==typeof t?ge:t instanceof color_color?pe:(n=color_color(t))?(t=n,pe):Ce)(e,t)};var wo=Ra.prototype.constructor;var ko=0;function Transition(e,t,n,r){this._groups=e,this._parents=t,this._name=n,this._id=r}function newId(){return++ko}var Co=Ra.prototype;Transition.prototype=function src_transition_transition(e){return Ra().transition(e)}.prototype={constructor:Transition,select:function(e){var t=this._name,n=this._id;"function"!=typeof e&&(e=Pa(e));for(var r=this._groups,i=r.length,a=new Array(i),o=0;o=0&&(e=e.slice(0,t)),!e||"start"===e})}(t)?init:schedule_set;return function(){var o=a(this,e),u=o.on;u!==r&&(i=(r=u).copy()).on(t,n),o.on=i}}(n,e,t))},attr:function(e,t){var n=Ca(e),r="transform"===n?Fe:xo;return this.attrTween(e,"function"==typeof t?(n.local?function attr_attrFunctionNS(e,t,n){var r,i,a;return function(){var o,u=n(this);if(null!=u)return(o=this.getAttributeNS(e.space,e.local))===u?null:o===r&&u===i?a:a=t(r=o,i=u);this.removeAttributeNS(e.space,e.local)}}:function attr_attrFunction(e,t,n){var r,i,a;return function(){var o,u=n(this);if(null!=u)return(o=this.getAttribute(e))===u?null:o===r&&u===i?a:a=t(r=o,i=u);this.removeAttribute(e)}})(n,r,tweenValue(this,"attr."+e,t)):null==t?(n.local?function attr_attrRemoveNS(e){return function(){this.removeAttributeNS(e.space,e.local)}}:function attr_attrRemove(e){return function(){this.removeAttribute(e)}})(n):(n.local?function attr_attrConstantNS(e,t,n){var r,i;return function(){var a=this.getAttributeNS(e.space,e.local);return a===n?null:a===r?i:i=t(r=a,n)}}:function attr_attrConstant(e,t,n){var r,i;return function(){var a=this.getAttribute(e);return a===n?null:a===r?i:i=t(r=a,n)}})(n,r,t+""))},attrTween:function(e,t){var n="attr."+e;if(arguments.length<2)return(n=this.tween(n))&&n._value;if(null==t)return this.tween(n,null);if("function"!=typeof t)throw new Error;var r=Ca(e);return this.tween(n,(r.local?function attrTweenNS(e,t){function tween(){var n=this,r=t.apply(n,arguments);return r&&function(t){n.setAttributeNS(e.space,e.local,r(t))}}return tween._value=t,tween}:function attrTween(e,t){function tween(){var n=this,r=t.apply(n,arguments);return r&&function(t){n.setAttribute(e,r(t))}}return tween._value=t,tween})(r,t))},style:function(e,t,n){var r="transform"==(e+="")?Te:xo;return null==t?this.styleTween(e,function style_styleRemove(e,t){var n,r,i;return function(){var a=styleValue(this,e),o=(this.style.removeProperty(e),styleValue(this,e));return a===o?null:a===n&&o===r?i:i=t(n=a,r=o)}}(e,r)).on("end.style."+e,function styleRemoveEnd(e){return function(){this.style.removeProperty(e)}}(e)):this.styleTween(e,"function"==typeof t?function style_styleFunction(e,t,n){var r,i,a;return function(){var o=styleValue(this,e),u=n(this);return null==u&&(this.style.removeProperty(e),u=styleValue(this,e)),o===u?null:o===r&&u===i?a:a=t(r=o,i=u)}}(e,r,tweenValue(this,"style."+e,t)):function style_styleConstant(e,t,n){var r,i;return function(){var a=styleValue(this,e);return a===n?null:a===r?i:i=t(r=a,n)}}(e,r,t+""),n)},styleTween:function(e,t,n){var r="style."+(e+="");if(arguments.length<2)return(r=this.tween(r))&&r._value;if(null==t)return this.tween(r,null);if("function"!=typeof t)throw new Error;return this.tween(r,function styleTween(e,t,n){function tween(){var r=this,i=t.apply(r,arguments);return i&&function(t){r.style.setProperty(e,i(t),n)}}return tween._value=t,tween}(e,t,null==n?"":n))},text:function(e){return this.tween("text","function"==typeof e?function text_textFunction(e){return function(){var t=e(this);this.textContent=null==t?"":t}}(tweenValue(this,"text",e)):function text_textConstant(e){return function(){this.textContent=e}}(null==e?"":e+""))},remove:function(){return this.on("end.remove",function removeFunction(e){return function(){var t=this.parentNode;for(var n in this.__transition)if(+n!==e)return;t&&t.removeChild(this)}}(this._id))},tween:function(e,t){var n=this._id;if(e+="",arguments.length<2){for(var r,i=schedule_get(this.node(),n).tween,a=0,o=i.length;ayo&&n.state4&&void 0!==arguments[4]?arguments[4]:{},a=arguments[5];(e instanceof HTMLElement||e instanceof SVGElement)&&(e=Ao(e));var o=r?r[0]:null,u=null,c=null,s=null,l=null,f=null,h=void 0;o?"#"===o?(u="id",c=r):(u="class",c="."===r[0]?r:"."+r):(c=t,h=!0),s=e.selectAll(c),h&&(s=s.filter(function(){return this.parentNode===e.node()})),l=(s=s.data(n,a)).enter().append(t||"div"),i.enter&&l.each(function(){for(var e=arguments.length,t=Array(e),n=0;nthis._data.length)for(var a=this._data.length;a0&&void 0!==arguments[0]?arguments[0]:{};this._lifeCycles=e,this._releasePromisesFromCache()}},{key:"_resetTargetPromise",value:function _resetTargetPromise(e){var t=this;setTimeout(function(){t._notifiers[e]=Xo,t._promises.set(e,t._makeNotifierPromise(e))},0)}}]),LifeCycleManager}(),Qo="drag",Zo="hover",Jo="selectiondrag",eu="click",tu="longtouch",nu="touchdrag",ru="*",iu=1,au=-1,ou=0,uu=2,cu=-2,su=function(){function defineProperties(e,t){for(var n=0;n0?(e[n]===uu&&t.entrySet[0].push(n),e[n]===iu&&t.entrySet[1].push(n)):e[n]<0&&(e[n]===cu&&t.exitSet[0].push(n),e[n]===au&&t.exitSet[1].push(n)),t.completeSet.push(n);return["entrySet","exitSet"].forEach(function(e){t[e]=t[e].map(function(e){return e.map(Number)})}),t.completeSet=t.completeSet.map(Number),t}},{key:"reset",value:function reset(e){var t=this._set;if(e)e.forEach(function(e){t[e]=ou});else{var n=this._lockedSelection;for(var r in t)r in n||(t[r]=ou)}return this._resetted=!0,this}},{key:"getEntrySet",value:function getEntrySet(){var e=this._set,t=[];for(var n in e)e[n]===iu&&t.push(n);return t}},{key:"getExistingEntrySet",value:function getExistingEntrySet(e){var t=this._set;return e.filter(function(e){return t[e]===iu||t[e]===uu})}},{key:"getExistingExitSet",value:function getExistingExitSet(e){var t=this._set;return e.filter(function(e){return t[e]===au||t[e]===cu})}},{key:"getOldEntry",value:function getOldEntry(){var e=this._set,t=[];for(var n in e)e[n]===uu&&t.push(n);return t}},{key:"getOldExit",value:function getOldExit(){var e=this._set,t=[];for(var n in e)e[n]===cu&&t.push(n);return t}},{key:"getExitSet",value:function getExitSet(){var e=this._set,t=[];for(var n in e)e[n]===au&&t.push(n);return t}},{key:"getCompleteSet",value:function getCompleteSet(){var e=this._set,t=[];for(var n in e)t.push(n);return t}},{key:"getCompleteSetCount",value:function getCompleteSetCount(){return this._completeSetCount}},{key:"resetted",value:function resetted(){return this._resetted}},{key:"toggle",value:function toggle(){var e=this._set;for(var t in e)e[t]===iu?e[t]=au:e[t]===au?e[t]=iu:e[t]===uu?e[t]=cu:e[t]=uu;return this}}]),SelectionSet}();function helper_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t3&&void 0!==arguments[3]?arguments[3]:{},i=this.sideEffects(),a=i[e],o=!1;r.filter&&r.filter(a)&&(o=!0),!o&&i[e].apply(t,n,r)}},{key:"registerPropagationBehaviourMap",value:function registerPropagationBehaviourMap(e){return this._propagationBehaviourMap=Object.assign(this._propagationBehaviourMap,e||{}),this}},{key:"dispatchBehaviour",value:function dispatchBehaviour(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=void 0===n.propagate||n.propagate,i=this._actions.behavioural[e],a=function getSideEffects(e,t){var n=[];for(var r in t){var i=r.split(",");i.some(function(t){return t===e})&&n.push({effects:t[r],behaviours:i})}return n}(e,this._behaviourEffectMap);if(this._propagationInf=n,i){var o=i.dispatch(t),u=this.getPropagationSelectionSet(o);this._entryExitSet[e]=u;var c=this.shouldApplySideEffects(r);if(r&&this.propagate(e,t,o.find(function(e){return e.sourceSelectionSet}),a),c){var s=this.getApplicableSideEffects(a,t,n);this.applySideEffects(s,u,t)}}return this}},{key:"getPropagationSelectionSet",value:function getPropagationSelectionSet(e){return e.find(function(e){return!e.sourceSelectionSet})}},{key:"shouldApplySideEffects",value:function shouldApplySideEffects(){return!0}},{key:"changeBehaviourStateOnPropagation",value:function changeBehaviourStateOnPropagation(e,t){return t instanceof Function?this._sourceBehaviours[e]=t:this._sourceBehaviours[e]=function(){return t},this}},{key:"changeSideEffectStateOnPropagation",value:function changeSideEffectStateOnPropagation(e,t){t instanceof Function?this._sourceSideEffects[e]=t:this._sourceSideEffects[e]=function(){return t}}},{key:"propagate",value:function propagate(){return this}},{key:"sideEffects",value:function sideEffects(){return arguments.length?(this._sideEffects=arguments.length<=0?void 0:arguments[0],this):this._sideEffects}},{key:"enableSideEffects",value:function enableSideEffects(e){return fu(this,e,!0),this}},{key:"disableSideEffects",value:function disableSideEffects(e){return fu(this,e,!1),this}},{key:"dissociateBehaviour",value:function dissociateBehaviour(e,t){var n=this._actionBehaviourMap;for(var r in n)if(r===t){var i=n[r];i.behaviours=i.behaviours.filter(function(t){return t!==e})}return this}},{key:"dissociateSideEffect",value:function dissociateSideEffect(e,t){var n=this._behaviourEffectMap;return n[t]=n[t].filter(function(t){return(t.name||t)!==e}),this}},{key:"getApplicableSideEffects",value:function getApplicableSideEffects(e){return e}},{key:"attachPropagationListener",value:function attachPropagationListener(e){return e.unsubscribe("propagation"),e.on("propagation",this.onDataModelPropagation()),this}},{key:"onDataModelPropagation",value:function onDataModelPropagation(){var e=this;return function(t){var n=t.payload,r=n.action;e.dispatchBehaviour(r,n,{propagate:!1})}}},{key:"createSelectionSet",value:function createSelectionSet(e,t){var n=t||this._actions.behavioural,r=this._selectionSet,i=this._volatileSelectionSet;for(var a in n)({}).hasOwnProperty.call(n,a)&&(r[a]=new lu(e),i[a]=new lu(e,!0));return this._volatileSelectionSet=i,this.selectionSet(r),this}},{key:"selectionSet",value:function selectionSet(){return arguments.length?(this._selectionSet=arguments.length<=0?void 0:arguments[0],this):this._selectionSet}},{key:"initializeSideEffects",value:function initializeSideEffects(){var e=this._sideEffectDefinitions;return this.sideEffects(function initializeSideEffects(e,t){var n=e._sideEffects;return(t=t instanceof Array?t:Object.values(t)).forEach(function(t){var r=n[t.formalName()];n[t.formalName()]=r||new t(e)}),n}(this,e)),this}},{key:"registerPhysicalActions",value:function registerPhysicalActions(e){var t=function initializePhysicalActions(e,t){var n={};for(var r in t)({}).hasOwnProperty.call(r,t)||(n[r]=t[r](e));return n}(this,e);return Object.assign(this._actions.physical,t),this}},{key:"propagateWith",value:function propagateWith(e,t){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],r=this._actions.behavioural;if(t.length){if(e===ru)for(var i in r)this._propagationFields[i]={fields:t,append:n};else this._propagationFields[e]={fields:t,append:n};return this}return this._propagationFields}},{key:"mapActionsAndBehaviour",value:function mapActionsAndBehaviour(){var e=this._actions.physical,t=this._actionBehaviourMap,n=this._mappedActions;for(var r in t)if(!{}.hasOwnProperty.call(r,t)){var i=void 0,a=t[r];i=a.target;var o=a.touch;i||(i=this.context.getDefaultTargetContainer());var u=Ro()?!0===o||void 0===o:!o,c=r+"-"+a.behaviours.join();u&&!n[c]&&this.bindActionWithBehaviour(e[r],i,a.behaviours),n[c]=!0}return this}},{key:"registerPhysicalBehaviouralMap",value:function registerPhysicalBehaviouralMap(e){return Object.assign(this._actionBehaviourMap,e),this}},{key:"bindActionWithBehaviour",value:function bindActionWithBehaviour(e,t,n){var r=this;return"string"==typeof t&&(t=[t]),t.forEach(function(t){var i=r.context.mount(),a=t.node instanceof Function?t:Ao(i).selectAll(t);n.length&&!a.empty()&&(a instanceof Array?a.forEach(function(t){e(Ao(t),n)}):e(a,n))}),this}},{key:"getPropagationInf",value:function getPropagationInf(){return this._propagationInf}},{key:"getAddSetFromCriteria",value:function getAddSetFromCriteria(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=this.context,r=t.data?t.data:n.getDataModelFromIdentifiers(e,"all"),i=n.fields().x||[],a=n.fields().y||[],o=i.every(function(e){return e.type()===ir.FieldType.MEASURE}),u=a.every(function(e){return e.type()===ir.FieldType.MEASURE});return{model:r,uids:null===e?null:t.data?function filterPropagationModel(e,t,n){var r=t.getData(),i=r.data,a=r.schema,o=void 0;if(a.length){var u=e.getFieldsConfig();o=e.select(function(e){return i.some(function(t){return a.every(function(r,i){return!(n||r.name in u&&u[r.name].def.type!==ir.FieldType.MEASURE)||t[i]===e[r.name].valueOf()})})},{saveChild:!1})}else o=t;return o}(this.getFullData(),t.data[0],o&&u).getData().uids:r[0].getData().uids}}},{key:"getSelectionSets",value:function getSelectionSets(e){var t=this.context.id(),n=(this._propagationInf||{}).sourceId,r=[];return n!==t&&(r=[this._volatileSelectionSet[e]]),n&&r.push(this.selectionSet()[e]),r}},{key:"getFullData",value:function getFullData(){return this.context.data()}},{key:"resetted",value:function resetted(){return this._resetted}},{key:"getEntryExitSet",value:function getEntryExitSet(e){return this._entryExitSet[e]}}]),Firebolt}(),mu=function(){function defineProperties(e,t){for(var n=0;n1&&void 0!==arguments[1]?arguments[1]:{},n=e.sourceIdentifiers;return n?n.getSchema().map(function(e){return e.name}):t instanceof Array?t[0]:Object.keys(t||{})}(u,n.criteria),sourceSelectionSet:!0===e._volatile}}},{key:"enable",value:function enable(){this._enabled=!0}},{key:"disable",value:function disable(){this._enabled=!1}},{key:"isEnabled",value:function isEnabled(){return this._enabled}}],[{key:"mutates",value:function mutates(){return!1}}]),GenericBehaviour}(),_u=function(){function defineProperties(e,t){for(var n=0;nk[0]?k:w,S=C===k?w:k;C[1]100&&Math.abs(i.x-a.x)<=5)){a.x=Math.max(0,Math.min(a.x,o.width)),a.y=Math.max(0,Math.min(a.y,o.height));var s=Ru(n.context.getSourceInfo(),{startPos:i,endPos:a,snap:!0},n.context.data().getFieldsConfig());s.dragEnd=!0,t.forEach(function(e){return n.dispatchBehaviour(e,s)})}}))},zu=function hover(e){return function(t,n){var r=function dispatchBehaviour(t){var r=Io(),i=e.context,a=i.config().interaction.tooltip.mode,o=jo(i.getDrawingContext().svgContainer,r),u=i.getNearestPoint(o.x,o.y,{getAllPoints:"consolidated"===a||"fragmented"===a,data:t,event:r}),c={criteria:u?u.id:null,showInPosition:u.showInPosition,target:u.target,position:o,mode:a};n.forEach(function(t){return e.dispatchBehaviour(t,c)}),r.stopPropagation()};t.on("mouseover",r).on("mousemove",r).on("mouseout",function(){n.forEach(function(t){return e.dispatchBehaviour(t,{criteria:null})})})}},Hu=function generatePayloadFromEvent(e,t,n){var r=n.context,i=jo(r.getDrawingContext().svgContainer,t.touches?t.touches[0]:t),a=r.getNearestPoint(i.x,i.y,{data:e,event:t});return{criteria:a?a.id:null,showInPosition:a.showInPosition,target:a.target,position:i}},Vu=function click(e){return function(t,n){t.on("click",function dispatchBehaviour(t){var r=Io(),i=Hu(t,r,e);n.forEach(function(t){return e.dispatchBehaviour(t,i)}),r.stopPropagation()})}};function physical_defineProperty(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var Uu=(physical_defineProperty(Du={},Qo,function drag(e){return function(t,n){Bu(t,n,e)}}),physical_defineProperty(Du,Zo,zu),physical_defineProperty(Du,eu,Vu),physical_defineProperty(Du,tu,function longtouch(e){return function(t,n){var r=void 0,i=void 0;i=!1,r=Io(),t.on("touchstart",function(t){r=Io(),i=!1,setTimeout(function(){i?n.forEach(function(t){return e.dispatchBehaviour(t,{criteria:null})}):function dispatchBehaviour(t){var i=Hu(t,r,e);n.forEach(function(t){return e.dispatchBehaviour(t,i)}),r.stopPropagation()}(t)},100)}).on("touchend",function(){i=!0})}}),physical_defineProperty(Du,nu,function touchdrag(e){return function(t,n){Bu(t,n,e,!0)}}),Du),Wu=function(){function defineProperties(e,t){for(var n=0;n1&&void 0!==arguments[1]&&arguments[1];var t=arguments[2],n=arguments[3];this.firebolt.context.layers().forEach(function(r){return!1!==r.config().interactive&&r.applyInteractionStyle(t,e.uids,n)})}}]),SurrogateSideEffect}(),Xu=function(){function defineProperties(e,t){for(var n=0;n=0&&l<=t&&c>=0&&s<=n){var f=Ru(a.getSourceInfo(),{startPos:{x:u,y:c},endPos:{x:l,y:s}},a.data().getFieldsConfig());o(f)}}).on("end",function(){var e=i.width,t=i.height,n=Math.min(e-r.width,Math.max(r.x,0)),u=Math.min(t-r.height,Math.max(r.y,0)),c=u+r.height,s=n+r.width;if(n>=0&&s<=e&&u>=0&&c<=t){var l=Ru(a.getSourceInfo(),{startPos:{x:n,y:u},endPos:{x:s,y:c},snap:!0},a.data().getFieldsConfig());l.dragEnd=!0,o(l)}}))}}(c)(Ao(this),["brush"],x)}).merge(w).each(function(e){var t=Ao(this);for(var n in b&&(t=t.transition().duration(b.duration)),e)({}).hasOwnProperty.call(e,n)&&fa(e[n])&&t.attr(n,e[n])}),C=Gi(u.defClassName,this._id,d);return k.classed(C.join(" "),!0),k.classed(u.className,!0),this}},{key:"hide",value:function hide(e){Qu(this,e.sideEffectGroup,!1)}},{key:"show",value:function show(e){Qu(this,e.sideEffectGroup,!0)}}],[{key:"defaultConfig",value:function defaultConfig(){return{defClassName:"selection-box-group",className:"",classPrefix:"muze",box:{defClassName:"selection-box",className:""},transition:{duration:200}}}},{key:"formalName",value:function formalName(){return"selectionBox"}}]),SelectionBox}(),ec={position:"absolute",width:0,height:0},tc={classPrefix:"muze",defClassName:"tooltip-box",connectorClassName:"tooltip-connectors",className:"",row:{margin:0},content:{spacing:5,iconContainerSize:10,iconScale:1,iconShape:"circle",iconColor:"#ff0000",rowMargin:"0px",margin:10,separator:":",className:"tooltip-content-container",parentClassName:"tooltip-content-parent-container"},arrow:{size:10,disabled:!1,defClassName:"tooltip-arrow",className:"",color:"rgba(195,195,195,0.85)"}},nc=function getArrowPos(e,t,n,r){var i=void 0,a=n.x,o=n.y,u=n.boxHeight,c=n.boxWidth,s=r.arrow.disabled?0:r.arrow.size;if("left"===e||"right"===e){var l=0,f=u/2,h=t.y+t.height,d=o+u;t.y>o?(l=t.y-o,f=(h>=d?d-t.y:t.height)/2):d>h&&(f=Math.abs(o-(t.y+t.height))/2),i=l+f-s/2}else{var p=0,y=c/2,g=t.x+t.width,v=a+c;t.x>a?(p=t.x-a,y=(g>=v?v-t.x:t.width)/2):v>g&&(y=Math.abs(a-(t.x+t.width))/2),i=p+y-s/2}return i},rc=function placeArrow(e,t,n){var r=e._tooltipArrow,i=e._tooltipBackground,a=e._config,o=a.classPrefix,u=a.arrow,c=Gi(u.defClassName,e._id,a.classPrefix);r.style("display","block"),r.attr("class",""+c.join(" ")),"left"===t||"right"===t?(r.style("top",n+"px"),r.style("left",""),i.style("top",n+"px"),i.style("left","")):("bottom"===t?r.style("top","100%"):r.style("top","-"+u.size+"px"),r.style("left",n+"px"),"bottom"===t?i.style("top","100%"):i.style("top","-"+(u.size+3)+"px"),i.style("left",n+"px")),r.classed(o+"-tooltip-arrow",!0),r.classed(o+"-tooltip-arrow-"+e._arrowOrientation,!1),r.classed(o+"-tooltip-arrow-"+t,!0),i.classed(o+"-tooltip-background-arrow",!0),i.classed(o+"-tooltip-background-arrow-"+e._arrowOrientation,!1),i.classed(o+"-tooltip-background-arrow-"+t,!0)};n(11);function strategy_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t1&&void 0!==arguments[1]?arguments[1]:{},n=arguments[2],r=[],i=e.getData(),a=i.data,o=i.schema,u=t.formatters,c=t.separator,s=e.getFieldsConfig(),l=e.getFieldspace(),f=l.fieldsObj(),h=n.dimensionMeasureMap,d=n.axes,p=n.detailFields||[],y=o.filter(function(e){return e.type===ir.FieldType.DIMENSION}),g=o.filter(function(e){return e.type===ir.FieldType.MEASURE}),v=o.find(function(e){return-1!==p.indexOf(e.name)}),m=a.length,b=function getRowContent(e,n){var r=void 0,i=void 0,o=void 0,p=[],y=s[e].index,g=s[e].def.subtype===ir.DimensionSubtype.TEMPORAL?f[e].getMinDiff():0,v=u&&u[e]||oc(n,function(e){return e});if(null!==r){var b=n===ir.FieldType.MEASURE?a.map(function(e){return e[y]}):[].concat(strategy_toConsumableArray(new Set(a.map(function(e){return e[y]}))));b=b.filter(function(e){return""!==e});var _=d.color[0],x=d.shape[0],w=d.size[0],k=(_||x||w)&&m>1&&n!==ir.FieldType.MEASURE;b.forEach(function(n,u){var f=void 0,d=h[e];if(d&&d.length&&m>1){f=n;var y={value:""};k&&(y={type:"icon",color:_.getColor(n),shape:x.getShape(n),size:w.getSize(n)*t.iconScale}),d.length>1?(p.push([y,""+f]),d.forEach(function(e){o=s[e].index,r=a[u][o],i=oc("measure",l.fields[o]._ref.numberFormat())(r,g),p.push([{value:""+e+c,style:{"margin-left":t.margin+"px}"},className:t.classPrefix+"-tooltip-key"},{value:""+i,className:t.classPrefix+"-tooltip-value"}])})):(o=s[d[0]].index,r=a[u][o],i=oc("measure",l.fields[o]._ref.numberFormat())(r,g),p.push([y,{value:""+f+c,className:t.classPrefix+"-tooltip-key"},{value:""+i,className:t.classPrefix+"-tooltip-value"}]))}else f=e,i=v(r=n,g),p.push([{value:""+f+c,className:t.classPrefix+"-tooltip-key"},{value:""+i,className:t.classPrefix+"-tooltip-value"}])})}return p},_="keyValue";if(m>1&&v)r=function getTabularData(e,t,n,r){var i=[];return i.push(t.map(function(e){return e.name})),e.forEach(function(e){var a=[];t.forEach(function(t,i){var o=t.subtype===ir.DimensionSubtype.TEMPORAL?r[t.name]:0,u=t.type===ir.FieldType.MEASURE&&n.fields[i]._ref.numberFormat(),c=oc(t.subtype||t.type,u)(e[i],o);a.push(c)}),i.push(a)}),i}(a,o,l,n.timeDiffs),_="table";else{y.forEach(function(e){var t=e.subtype?e.subtype:e.type;r=[].concat(strategy_toConsumableArray(r),strategy_toConsumableArray(b(e.name,t)))});var x=[].concat(strategy_toConsumableArray(new(Function.prototype.bind.apply(Set,[null].concat(strategy_toConsumableArray(Object.values(h)))))));(m>1?g.filter(function(e){return-1===x.indexOf(e.name)}):g).forEach(function(e){var t=e.subtype?e.subtype:e.type;r=[].concat(strategy_toConsumableArray(r),strategy_toConsumableArray(b(e.name,t)))})}return{content:r,displayFormat:_}},cc={keyValue:function keyValue(e,t,n){return uc(e,t,n)}},sc="keyValue",lc=function(){function defineProperties(e,t){for(var n=0;n0?(this._config=na(this._config,arguments.length<=0?void 0:arguments[0]),this):this._config}},{key:"update",value:function update(e){return this._model=e.model,this._strategy=void 0!==e.strategy?e.strategy:sc,this._formatter=e.formatter,this}},{key:"context",value:function context(e){return this._context=e,this}},{key:"render",value:function render(e){var t=void 0,n=this._config,r=n.iconContainerSize,i=this._formatter,a=n.rowMargin,o=this._model;if(this._mount=e,(t=o instanceof Array?o:i instanceof Function?i(this._model,this._context):cc[this._strategy](this._model,this.config(),this._context))instanceof Function)e.html(t());else{var u=t,c="default";Di(t)&&(u=t.content,c=t.displayFormat);var s=Eo(e,"div",[c],n.classPrefix+"-tooltip-content",{},function(e){return e});if("table"===c){var l=Eo(s,"table",[1],n.classPrefix+"-tooltip-table"),f=Eo(l,"tbody",[1],n.classPrefix+"-tooltip-table-tbody"),h=Eo(f,"tr",u,n.classPrefix+"-tooltip-table-row");h.each(function(e,t){Ao(this).classed(n.classPrefix+"-tooltip-table-row-"+t,!0)}),Eo(h,"td",function(e){return e},n.classPrefix+"-tooltip-table-cell").each(function(e){Ao(this).html(e)})}else{var d=Eo(s,"div",u,n.classPrefix+"-tooltip-row"),p=Eo(d,"span",function(e){return e},n.classPrefix+"-tooltip-content");p.attr("class",n.classPrefix+"-tooltip-content"),Fo(d,{margin:a}),Fo(p,{display:"inline-block","margin-right":n.spacing+"px"}),p.each(function(e){var t=Ao(this);if(t.html(""),e instanceof Object)if("icon"===e.type){var n=Eo(t,"svg",[1]),i=Eo(n,"path",[1]),a=e.shape instanceof Function?e.shape:pa(e.shape);To(n,{x:0,y:0,width:r,height:r}),To(i,{d:a.size(e.size)(),transform:"translate("+r/2+", "+r/2+")"}),Fo(i,{fill:e.color}),Fo(n,{width:r+"px",height:r+"px"})}else t.html(e.value),e.className&&t.classed(e.className,!0),Fo(t,e.style);else t.html(e)})}}return this}},{key:"clear",value:function clear(){return this._model=null,this}}],[{key:"defaultConfig",value:function defaultConfig(){var e=tc.content;return e.classPrefix=tc.classPrefix,e}}]),Content}(),hc=function(){function defineProperties(e,t){for(var n=0;n0){var e=na({},this.constructor.defaultConfig());return this._config=na(e,arguments.length<=0?void 0:arguments[0]),this}return this._config}},{key:"addClass",value:function addClass(e){return this._tooltipContainer.classed(e,!0),this}},{key:"context",value:function context(){return arguments.length?(this._context=arguments.length<=0?void 0:arguments[0],this):this._context}},{key:"content",value:function content(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=this.config(),i=r.classPrefix,a=r.content.className,o=r.formatter,u=n.className||i+"-"+a+"-"+e,content=this._contents[e]=this._contents[e]||new fc,c=Eo(this._contentContainer,"div",[n.order],u);c.attr("class",i+"-"+a+" "+u),function reorderContainers(e,t){e.selectAll(t).sort(function(e,t){return e-t})}(this._contentContainer,"."+i+"-"+a);var s=r.content;return n.classPrefix=this._config.classPrefix,content.config(s),null===t?(content.clear(),c.remove(),delete this._contents[e]):(content.update({model:t,formatter:n.formatter||o}),content.context(this._context),content.render(c)),Object.keys(this._contents).length||this.hide(),this}},{key:"getContents",value:function getContents(){return Object.values(this._contents)}},{key:"position",value:function position(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(!Object.keys(this._contents).length)return this.hide(),this;this.show();var r=this._target,i=n.repositionArrow;if(r&&i){var a=this._tooltipContainer.node(),o=this._config,u=o.arrow.disabled,c=u?0:o.arrow.size,s=this._arrowOrientation,l="left"===s||"right"===s?t+a.offsetHeight-cr.y+r.height:e+a.offsetWidth-cr.x+r.width;if(!u)if(l){var f=void 0;this._tooltipArrow.style("display","none"),this._tooltipBackground.style("display","none"),this._tooltipConnectorContainer.style("display","block");var h=this._tooltipConnectorContainer.selectAll("path").data([1]),d=h.enter().append("path");"left"===s?f="M "+e+" "+(t+a.offsetHeight/2)+" L "+(r.x+r.width)+" "+(r.y+r.height/2):"right"===s?f="M "+(e+a.offsetWidth)+" "+(t+a.offsetHeight/2)+" L "+r.x+" "+(r.y+r.height/2):"bottom"===s&&(f="M "+(e+a.offsetWidth/2)+" "+(t+a.offsetHeight)+" L "+(r.x+r.width/2)+" "+r.y),d.merge(h).attr("d",f).style("display","block")}else{var p=nc(s,r,{x:e,y:t,boxHeight:a.offsetHeight,boxWidth:a.offsetWidth},this._config);rc(this,this._arrowOrientation,p),this._tooltipConnectorContainer.style("display","none")}}var y=this._offset||{x:0,y:0};return this._tooltipContainer.style("left",y.x+e+"px").style("top",y.y+t+"px"),this}},{key:"positionRelativeTo",value:function positionRelativeTo(e){var t=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=void 0,i=n.orientation;if(this.show(),!e)return this.hide(),this;var a=this._extent,o=this._tooltipContainer.node();this._tooltipContainer.style("top","0px").style("left","0px");var u=o.offsetWidth+2,c=o.offsetHeight+2,s=this._config,l=this._offset,f=s.arrow.disabled,h=f?0:s.arrow.size,d=void 0===n.draw||n.draw,p=e.y,y=e.x+e.width+l.x,g=a.width-y,v=e.x+l.x-a.x,m=p>c+h,b=g>=u+h,_=v>=u+h;return this._target=e,i||(i=m?"vertical":b||_?"horizontal":"vertical"),"horizontal"===i?r=function positionHorizontal(){var n=void 0,r=e.x+e.width,i=e.y;return b?(n="left",r+=h):_?(r=e.x-u,n="right",r-=h):(n="left",r+=h),e.height2&&void 0!==arguments[2]?arguments[2]:{},r=0,i=0,a=e.mergedEnter.model,o=this.firebolt.context,u=this.drawingContext();if(a.isEmpty()||null===t.criteria||!1===e.isSourceFieldPresent)return this.hide(n,null),this;var c=this._tooltips,s=this.config(),l={width:u.width,height:u.height},f=t.showInPosition,h=s.padding,d=[],p="fragmented"===s.mode,y=o.getSourceInfo(),g=y.fields,v=!!(!!g.x[0]&&g.x[0].type()===ir.FieldType.DIMENSION),m=t.position,b=[],_={},x=a.getData().uids;p?d.push.apply(d,function tooltip_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);tu.height:i>u.width)break;b.push({x:z.x,y:z.y,width:H.width,height:H.height,tooltip:R})}}for(var V in c)if(!_[V]){var U=c[V];U.content(t.action,null),U.getContents().length||(U.remove(),delete c[V])}return p&&(!function spaceOutBoxes(e,t,n){var r=void 0,i=void 0,a=void 0,o=void 0,u=void 0,c=e.length,s=function spaceOutIfOverlap(e,t,u){a=e.x,o=e.width,r=e.y,i=e.height;var c=r+i,s=a+o;n?(u?rt.y)&&(t.y=u?e.y-t.height-5:c+5):(u?at.x)&&(t.x=u?e.x-t.width-5:s+5)};for(e.sort(function(e,t){return n?e.y-t.y:e.x-t.x}),u=0,u=0;ut.height||e[u].x+e[u].width>t.width)for(n?e[u].y-=e[u].height+e[u].y-t.height:e[u].x-=e[u].width+e[u].x-t.width,u=c-1;u>0;u--)s(e[u],e[u-1],!0)}(b,l,v),b.forEach(function(e){return e.tooltip.position(e.x,e.y,{repositionArrow:!0})})),this}},{key:"hide",value:function hide(e){var t=this._tooltips;for(var n in t)if({}.hasOwnProperty.call(t,n)){var r=e.strategy||this._strategy;t[n].content(r,null),t[n].hide()}}}],[{key:"defaultConfig",value:function defaultConfig(){return{padding:5,offset:{x:0,y:0}}}},{key:"formalName",value:function formalName(){return"tooltip"}}]),Tooltip}(),vc=(n(15),function(){function defineProperties(e,t){for(var n=0;n2&&void 0!==arguments[2]?arguments[2]:{},r=this._strategies[n.strategy||this._strategy];return!1!==e.isSourceFieldPresent&&r(e,this,n.strategy||this._strategy),this}}],[{key:"formalName",value:function formalName(){return"highlighter"}},{key:"target",value:function target(){return"visual-unit"}}]),PlotHighlighter}(),wc=function(){function defineProperties(e,t){for(var n=0;n67.5&&v<=90||(r+=2*y),u=p,u=90===l?y:270===l?-y:0,o===Yc?(u=0===t&&c&&s===ds?u+u/2:u,Ao(this).attr("transform","translate("+(-u+f)+" \n "+(-r-f)+") rotate("+l+")")):(u=0===t&&c&&s===ds?u-u/2:u,Ao(this).attr("transform","translate("+(u-f)+" \n "+(r+f)+") rotate("+l+")"))}),t},Os=function changeTickOrientation(e,t,n){var r=t._smartTicks,i=t.config(),a=t.dependencies().labelManager,o=i.labels,u=i.orientation,c=o.rotation,s=o.smartTicks,l=e.selectAll(".tick text");if(l.selectAll("tspan").remove(),0===c||!1!==s||"top"!==u&&"bottom"!==u)if(0===c&&!1===s)l.attr("transform","");else{l.attr("y",0).attr("x",0).text(""),Eo(l,"tspan",function(e,t){return r[t].lines},"smart-text").attr("dy","0").style("opacity","0").transition().duration(1e3).attr("dy",function(e,t){return"bottom"===u||0!==t?r[t].oriTextHeight:-r[t].oriTextHeight*(r[t].lines.length-1)-n}).style("opacity",1).attr("x",0).text(function(e){return e})}else Ms(t,l,a,i);return l},Ts=function setFixedBaseline(e){e.config().fixedBaseline&&e.setFixedBaseline()},Fs=function setAxisNamePos(e,t,n){var r=n.axisNameHeight,i=n.yOffset,a=n.labelOffset,o=n.availableSpace;switch(t){case Xc:e.attr("transform","translate("+-(o.width-r)+","+(i+a)+")rotate(-90)");break;case Kc:e.attr("transform","translate("+(o.width-r)+","+(i+a)+")rotate(90)");break;case Yc:e.attr("transform","translate("+o.width/2+","+(-o.height+r)+")");break;case Gc:e.attr("transform","translate("+o.width/2+","+(o.height-r/2)+")")}return e};function cartesian_axis_helper_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);tt.length&&(t=p,r=e.smartTicks()?e.smartTicks()[s]:{},n=o[s]),d}),n=h.getOriSize(t),{largestLabel:t,largestLabelDim:n,axisTickLabels:i,allLabelLengths:o,smartTick:r}},js=function setOffset(e){var t=0,n=0,r=e.logicalSpace(),i=e.config(),a=i.orientation,o=i.xOffset,u=i.yOffset;a===Xc&&(t=void 0===o?r.width:o),a===Yc&&(n=void 0===u?r.height:u),e.config({xOffset:t,yOffset:n})},Is=function adjustRange(e,t,n,r){var i=function getAxisOffset(e,t,n){var r=Math.abs(t[1]-t[0])/(n[1]-n[0])*e,i=t[1]-t[0],a=i/r;return(i-i/(a+1)*a)/2}(e,t,n);return r===Yc||r===Gc?(t[0]+=i,t[1]-=i):(t[0]-=i,t[1]+=i),t},Ds=function registerChangeListeners(e){return e.store().model.next(["domain","range","mount","config"],function(){for(var t=arguments.length,n=Array(t),r=0;r0&&e.length*(t+this._minTickDistance.width)>i&&this.config({labels:{rotation:-90}})}return this}},{key:"adjustRange",value:function adjustRange(){return this}},{key:"getScaleValue",value:function getScaleValue(e){if(null!==e&&void 0!==e)return this.scale()(e)}},{key:"getTickSize",value:function getTickSize(){return this.axis().tickSize()}},{key:"getAxisDimensions",value:function getAxisDimensions(){return this.axisDimensions(function computeAxisDimensions(e){var t={},n=e.config(),r=n.name,i=n.labels,a=n.tickValues,o=(i.smartTicks?0:i.rotation)*Math.PI/180,u=e.dependencies().labelManager,c=Ns(e),s=c.largestLabelDim,l=c.axisTickLabels,f=c.smartTick,h=s.height,d=s.width;return 0===e.domain().length?null:(!1===e._rotationLock&&(e.setRotationConfig(a||l,s.width),e._rotationLock=!1),t=i.smartTicks?f:{width:Math.abs(h*Math.sin(o))+Math.abs(d*Math.cos(o)),height:Math.abs(d*Math.sin(o))+Math.abs(h*Math.cos(o))},u.setStyle(e._axisNameStyle),{tickSize:e.getTickSize(),tickLabelDim:t,axisLabelDim:u.getOriSize(r),largestLabelDim:s,axisTickLabels:l})}(this)),this.axisDimensions()}},{key:"getLogicalSpace",value:function getLogicalSpace(){return this.logicalSpace()||(this.logicalSpace(function calculateContinousSpace(e){e.range();var t=e.config(),n=e.getAxisDimensions(),r=t.orientation,i=t.show,a=t.showAxisName,o=n.axisLabelDim;if(!1===i)return{width:0,height:0};var u=o.width;if(r===Yc||r===Gc){var c=Ls(e,n,t),s=c.width,l=c.height;return{width:Math.max(s,u),height:l}}var f=Rs(e,n,t),h=f.width,d=f.height;return{width:h,height:Math.max(d,a?u:0)}}(this)),js(this),this.logicalSpace()),this.logicalSpace()}},{key:"invert",value:function invert(){for(var e=this,t=arguments.length,n=Array(t),r=0;ra[1];return"band"===r?(n=i.invertExtent(e,t),[i(o?n[n.length-1]:n[0]),i(o?n[0]:n[n.length-1])+i.bandwidth()]):[e,t]}},{key:"updateDomainBounds",value:function updateDomainBounds(e){var t=this.domain();return this.config().domain?t=this.config().domain:(0===t.length&&(t=e),e.length&&(t=[Math.min(t[0],e[0]),Math.max(t[1],e[1])])),this.domain(t)}},{key:"updateDomainCache",value:function updateDomainCache(e){!1===this._domainLock&&(this.domain([]),this._domainLock=!0);var t=[];return e&&e.forEach(function(e){void 0!==e&&null!==e&&t.push(e)}),this.updateDomainBounds(t)}},{key:"getMinTickDifference",value:function getMinTickDifference(){return this.domain()}},{key:"getFormattedTickValues",value:function getFormattedTickValues(e){return e}},{key:"setTickValues",value:function setTickValues(){var e=this.config().tickValues;return e?(e instanceof Array&&this.axis().tickValues(e),this):this}},{key:"getUnitWidth",value:function getUnitWidth(){return 0}},{key:"serialize",value:function serialize(){return{name:this.name,type:this.type,range:this.range(),config:this.config()}}},{key:"registerEvent",value:function registerEvent(e,t){this._eventList.push({name:e,action:t})}},{key:"on",value:function on(e,t){e=e||"update",this.registerEvent(e,t)}},{key:"render",value:function render(){return this.mount()&&function renderAxis(e){var t=e.config(),n=e.dependencies().labelManager,r=e.mount(),i=e.range(),a=e.axis(),o=e.scale(),u=e._axisNameStyle,c=e._tickLabelStyle,s=e.formatter,l=e.tickValues,f=t.orientation,h=t.name,d=t.labels,p=t.xOffset,y=t.yOffset,g=t.axisNamePadding,v=t.className,m=t.showAxisName,b=t.show,_=t.id,x=t.interpolator,w=t.classPrefix;if(b){var k=e.getTickSize(),C=Eo(Ao(r),"g",[e],""+v,{},function(e){return e.config().id});n.setStyle(c),"linear"===x&&e.setTickValues();var S=o.ticks||o.quantile||o.domain;s&&a.tickFormat(s(l||a.tickValues()||S()));var P=Math.abs(i[0]-i[1]),A=e.axisDimensions().tickLabelDim;C.attr("transform","translate("+p+","+y+")"),Ts(e),!1===d.smartTicks?C.transition().duration(1e3).call(a):C.call(a),C.selectAll(".tick").classed(w+"-ticks",!0),C.selectAll(".tick line").classed(w+"-tick-lines",!0),C.selectAll(".tick text").classed(w+"-ticks",!0).classed(w+"-ticks-"+_,!0),Os(C,e,k);var E=Eo(C,"text",[h],w+"-axis-name").attr("text-anchor","middle").classed(w+"-axis-name-"+_,!0).text(function(e){return e});E.classed(ys,!m);var M=P/2;n.setStyle(u);var O=n.getOriSize(h),T={labelProps:A,tickSize:k,axisNamePadding:g,axisNameHeight:O.height,axisNameWidth:O.width,yOffset:y,xOffset:p,labelOffset:M,availableSpace:e.availableSpace()};Fs(E,f,T)}}(this),this}},{key:"remove",value:function remove(){return this.store().unsubscribeAll(),Ao(this.mount()).remove(),this}},{key:"unsubscribe",value:function unsubscribe(){return this.store().unsubscribeAll(),this}},{key:"isReverse",value:function isReverse(){var e=this.range();return e[0]>e[1]}},{key:"getPixelToValueRatio",value:function getPixelToValueRatio(){var e=this.scale(),t=e.range(),n=e.domain();return Math.abs(t[1]-t[0])/(n[1]-n[0])}},{key:"id",get:function get(){return this._id}}],[{key:"defaultConfig",value:function defaultConfig(){return Es}}]),SimpleAxis}(),Vs=function(){function defineProperties(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:0,t=arguments[1],n=arguments[2],r=arguments[3],i=n.left,a=n.right,o=n.top,u=n.bottom,c=this.config(),s=c.orientation,l=c.fixedBaseline,f=this.getAxisDimensions().tickLabelDim;if(this.availableSpace({width:e,height:t}),s===Yc||s===Gc){var h=f.width;this.range([(l?0:h/2)+i,e-a-h/2]);var d=this.getLogicalSpace().height;r&&this.config({yOffset:Math.max(d,t)})}else{var p=f.height;this.range([t-u-(l?1:p/2),p/2+o]);var y=this.getLogicalSpace().width;r&&this.config({xOffset:Math.max(y,e)})}return this}},{key:"setTickValues",value:function setTickValues(){var e=this.config().tickValues,t=this.axis();return e?(e instanceof Array&&this.axis().tickValues(e),this):(t.tickValues(this.getTickValues()),this)}},{key:"getTickValues",value:function getTickValues(){var e=this.config(),t=e.orientation,n=e.tickValues,r=this.range(),i=this.axis(),a=Math.abs(r[0]-r[1]),o=Ns(this).largestLabelDim;return n?i.scale().ticks(n):function getNumberOfTicks(e,t,n,r){var i=n.scale().ticks(),a=r.config().numberOfTicks,o=i.length,u=o;return o*(1.5*t)>e&&(u=Math.floor(e/(1.5*t))),u=Math.min(a,Math.max(1,u)),n.scale().ticks(u)}(a,o[t===Gc||t===Yc?"width":"height"],i,this)}},{key:"getMinTickDifference",value:function getMinTickDifference(){return xa(this.config().tickValues)}},{key:"setFixedBaseline",value:function setFixedBaseline(e){var t=this.config(),n=t.orientation,r=t.labels.rotation,i=this.axis(),a=this._axisDimensions.largestLabelDim,o=a.width,u=a.height;return i.tickTransform(function(e,t){return 0!==t||n!==Xc&&n!==Kc?0!==t||n!==Yc&&n!==Gc||0!==r?"":"translate("+o/2+"px, 0px) rotate("+r+"deg)":"translate(0, -"+u/3+"px)"}),e}}],[{key:"type",value:function type(){return Qc}}]),ContinousAxis}(),Zs=function(){function defineProperties(e,t){for(var n=0;n0&&e.length*(t+this._minTickDistance.width)>a&&(a&&o0&&e.length*t>i&&(i&&1.25*a1?t.range:[al].concat(props_toConsumableArray(t.range)));var r=na(n,e.config()),i=na(r,t);return i.range instanceof Array&&(i.range=i.range.map(function(e,t){return sl(e,il[t])}),i.stops=t.stops||i.range.length),i.value=sl(i.value,i.value),i}},domain:{},scale:{},uniqueValues:{}};function color_strategy_defineProperty(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function color_strategy_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);tMath.min(t.length,18))for(var r=aa()(function hslInterpolator(){return Ne}(),t.map(function(e){return ul(e)})),i=0;i0&&void 0!==arguments[0]?arguments[0]:[];if(e.length){var t=this.scale(),n=t.range?t.range():null,r=this._colorStrategy.domainRange()(e,this.config().stops,n);this.domain(r.domain),r.range&&this.scale().range(r.range),this.uniqueValues(r.uniqueVals),this.scale().domain(r.scaleDomain||this.domain())}return this}},{key:"serialize",value:function serialize(){return{type:this.constructor.type(),scale:this.scale(),domain:this.domain(),config:this.config()}}},{key:"transformColor",value:function transformColor(e,t){var n=360*e[0],r=100*e[1],i=100*e[2],a=e[3]||1,o=n+t[0],u=r+t[1],c=i+t[2],s=a+t[3]||0;return{color:"hsla("+o+","+u+"%,"+c+"%,"+s+")",hsla:[o/360,u/100,c/100,s]}}},{key:"id",value:function id(){return this._id}}],[{key:"defaultConfig",value:function defaultConfig(){return ol}},{key:"type",value:function type(){return"color"}}]),ColorAxis}(),Sl={value:36,range:[36,1e3]};function size_strategy_defineProperty(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function size_strategy_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t0&&void 0!==arguments[0]?arguments[0]:0,t=this.config().value,n=this.scale(),r=this.domain()||[1,1];return n&&r[0]!==r[1]?this._sizeStrategy.range(e,n,this.domain(),this.uniqueValues()):t}},{key:"updateDomain",value:function updateDomain(e){if(e){var t=(0,this._sizeStrategy.domain)(e,this.config().intervals);this.domain(t.domain),this.uniqueValues(t.uniqueVals),this.scale().domain(t.scaleDomain||this.domain())}return this}},{key:"serialize",value:function serialize(){return{type:this.constructor.type(),scale:this.scale(),domain:this.domain(),range:this.range(),config:this.config()}}},{key:"id",value:function id(){return this._id}}],[{key:"defaultConfig",value:function defaultConfig(){return Sl}},{key:"type",value:function type(){return"size"}}]),SizeAxis}(),Ol={generator:null,value:"circle",range:["circle","diamond","star","cross","square","wye","triangle"]},Tl={config:{},domain:{},scale:{},uniqueValues:{},generator:{}},Fl=function(){function defineProperties(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:[];return e.length&&(this.uniqueValues(e),this.domain(e),this.scale().domain(e),this.config().generator&&(this._generatedShapes=function shapeGenerator(e,t){var n={};return e.forEach(function(e){n[e]=t(e)}),n}(e,this.config().generator))),this}},{key:"serialize",value:function serialize(){return{type:this.constructor.type(),scale:this.scale(),domain:this.domain(),range:this.config().range,config:this.config()}}},{key:"id",value:function id(){return this._id}}],[{key:"defaultConfig",value:function defaultConfig(){return Ol}},{key:"type",value:function type(){return"shape"}}]),ShapeAxis}();function data_type_scale_map_defineProperty(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var Il="measure",Dl="temporal",Ll=(data_type_scale_map_defineProperty(Nl={},"dimension",Zc),data_type_scale_map_defineProperty(Nl,Il,Qc),data_type_scale_map_defineProperty(Nl,Dl,Jc),function(e,t,n){var r=n.groupBy instanceof Array?n.groupBy:[n.groupBy],i=r.map(function(t){return e.findIndex(function(e){return e.name===t})});if(void 0!==i.find(function(e){return-1===e}))throw new Error("Groupby field "+r+" not found in schema");return function nestCollection(e){var t=T();return e.keys.forEach(function(e){return t.key(function(t){return t[e]})}),t.entries(e.data)}({keys:i,data:t})});var Rl;function transform_factory_defineProperty(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var Bl=(transform_factory_defineProperty(Rl={},"identity",function identityTransform(e,t,n){return t}),transform_factory_defineProperty(Rl,"group",Ll),transform_factory_defineProperty(Rl,"stack",function(e,t,n){var r=n.uniqueField,i=n.value,a=n.groupBy,o=n.sort||"descending",u=function normalizeData(e,t,n,r,i){var a=Ll(t,e,{groupBy:r}),o=t.findIndex(function(e){return e.name===r}),u=t.findIndex(function(e){return e.name===n}),c=t.findIndex(function(e){return e.name===i}),s=e.map(function(e){return e[c]}).filter(function(e,t,n){return n.indexOf(e)===t}).sort(),l=t.reduce(function(e,t,n){return e[n]=t.name,e},{});return{data:a.map(function(e){var t={},n=e.values.reduce(function(e,n){return e=n.reduce(function(e,r,i){return i===c?(e[r]=n[u],t[r]=n):i!==u&&(e[l[i]]=r),e},e)},{});return n._tuple=t,s.forEach(function(t){if(void 0===n[t]){n[t]=0;var r=new Array(e.values[0].length);r[o]=e.key,r[c]=t,n._tuple[t]=r}}),n}),keys:s}}(t,e,i,r,a),c=u.keys,s={},l=n.orderBy,f=e.findIndex(function(e){return e.name===l}),h=e.findIndex(function(e){return e.name===a});-1!==f&&(c.forEach(function(e){var n=t.find(function(t){return t[h]===e});s[e]=n[f]}),u.keys.sort(function(e,t){return s[e].localeCompare(s[t])}));var d=va({keys:u.keys,offset:n.offset||"diverging",order:o,data:u.data});return d.forEach(function(e){e.forEach(function(t){t.data=t.data._tuple[e.key]})}),d}),Rl);var zl=function transformFactory(e){var t=Bl[e];if("function"!=typeof t)throw new Error("Invalid transform type supplied.");return t},Hl=function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function sliceIterator(e,t){var n=[],r=!0,i=!1,a=void 0;try{for(var o,u=e[Symbol.iterator]();!(r=(o=u.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){i=!0,a=e}finally{try{!r&&u.return&&u.return()}finally{if(i)throw a}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}();var Vl,Ul=f.BAND,Wl=function getLayerColor(e,t){var n=e.datum,r=e.index,i=t.colorEncoding,a=t.colorAxis,o=t.colorFieldIndex,u="",c="";return i&&i.value instanceof Function?(c=i.value(n,r),u=i.value(n,r)):(u=a.getRawColor(n._data[o]),c=a.getHslString(u)),{color:c,rawColor:u}},ql=function transfromColor(e,t,n,r){t.meta.stateColor[n]=t.meta.stateColor[n]||t.meta.originalColor;var i=e.transformColor(t.meta.stateColor[n],r);return t.meta.stateColor[n]=i.hsla,i},Gl=function applyInteractionStyle(e,t,n,r){var i=e.getPlotElementsFromSet(t),a=e.axes().color,o=r.apply,u=r.interactionType;n.forEach(function(e){var t=e.type;i.style(t,function(n){var r=n.meta,i=r.colorTransform,c=r.stateColor,s=r.originalColor;if(i[u]=i[u]||{},o&&!i[u][t])return i[u][t]=e.intensity,ql(a,n,t,e.intensity).color;if(!o&&i[u][t])return i[u][t]=null,ql(a,n,t,e.intensity.map(function(e){return-e})).color;var l=c[t]?c[t]:s,f=Hl(l,4);return"hsla("+360*f[0]+","+100*f[1]+"%,"+100*f[2]+"%, "+(f[3]||1)+")"})})},Yl=function getAxesScales(e){var t=[Bc.X,Bc.Y].map(function(t){return e[t]}),n=Hl(t,2),r=n[0],i=n[1],a=[r,i].map(function(e){return e&&e.scale()}),o=Hl(a,2);return{xAxis:r,yAxis:i,xScale:o[0],yScale:o[1]}},Xl=function getIndividualClassName(e,t,n,r){var i=r.config().individualClassName,a="";return i instanceof Function&&(a=i(e,t,n,r)),a},Kl=function attachDataToVoronoi(e,t){var n;e.data((n=[]).concat.apply(n,function helpers_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t=e[0]?(i=d=e[1],h=f=e[0]):(i=d=e[0],h=f=e[1]),(t=a===ir.FieldType.MEASURE?{x:h,x0:d,y:n[u],y0:n[u]}:{x:n[o],x0:n[o],y:i,y0:f})._data=n,t._id=n[l]}else(t={x:e[o],y:e[u],x0:e[c],y0:e[s]})._data=e,t._id=e[l];return t})}).filter(function(e){return e.length})}(e,t,this.encodingFieldsInf(),this.transformType())}},{key:"getNearestPoint",value:function getNearestPoint(){return null}},{key:"applyInteractionStyle",value:function applyInteractionStyle(e,t,n){var r=(this.config().interaction||{})[e];r&&Gl(this,t,r,{apply:n,interactionType:e})}},{key:"transformType",value:function transformType(){return arguments.length?(this._transformType=arguments.length<=0?void 0:arguments[0],this):this._transformType}},{key:"render",value:function render(){return this}},{key:"elemType",value:function elemType(){return"g"}},{key:"remove",value:function remove(){return this.store().unsubscribeAll(),Ao(this.mount()).remove(),this}},{key:"cachePoint",value:function cachePoint(e,t){if(null===e)return this;var n=this._pointMap;return!n[e]&&(n[e]=[]),n[e].push(t),this}},{key:"dataProps",value:function dataProps(){return arguments.length?(this._dataProps=arguments.length<=0?void 0:arguments[0],this):this._dataProps}},{key:"getIdentifiersFromData",value:function getIdentifiersFromData(e){var t=this.data().getData().schema,n=this.data().getFieldsConfig(),r=[[],[]],i=this.encodingFieldsInf(),a=i.xFieldType,o=i.yFieldType,u=i.xField,c=i.yField,s=[a,o].map(function(e){return e===ir.FieldType.MEASURE}),l=tf(s,2),f=l[0],h=l[1];if(t.forEach(function(t,i){var a=t.name;n[a].def.type===ir.FieldType.DIMENSION&&(r[0].push(a),r[1].push(e[i]))}),f&&h){var d,p,y=n[u].index,g=n[c].index;(d=r[0]).push.apply(d,[u,c]),(p=r[1]).push.apply(p,[e[y],e[g]])}return r}},{key:"getPlotSpan",value:function getPlotSpan(){return{x:0,y:0}}},{key:"getPlotPadding",value:function getPlotPadding(){return{x:0,y:0}}},{key:"getPointsFromIdentifiers",value:function getPointsFromIdentifiers(e){var t,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=n.getAllAttrs,i=n.getBBox;if(!this.data())return[];var a=void 0,o=void 0;if(e instanceof ar.a){var u=e.getData();a=u.schema.map(function(e){return e.name}),o=u.data}else a=e[0],o=e.slice(1,e.length);var c=this._points,s=this.data().getFieldsConfig(),l=(t=[]).concat.apply(t,function base_layer_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t2&&void 0!==arguments[2]?arguments[2]:{},r=Ao(n.event.target).data()[0];if(Di(r)){var i=r.datum,a=i.data,o=i.uid;return{id:this.getIdentifiersFromData(a,o),layerId:this.id()}}return null}},{key:"getPlotElementsFromSet",value:function getPlotElementsFromSet(e){return Ao(this.mount()).selectAll(this.elemType()).filter(function(t){return-1!==e.indexOf(t.datum.uid)})}},{key:"render",value:function render(e){var t=this,n=this.measurement(),r=n.height,i=n.width,a=this.config(),o=a.classPrefix,u=a.defClassName,c=a.minOuterRadius,s=a.innerRadius,l=a.outerRadius,f=a.cornerRadius,h=a.padAngle,d=a.padRadius,p=a.padding,y=a.transition,g=a.innerRadiusFixer,v=this.axes().size,m=this._store,b=m.get("transformedData"),_=r-p.top-p.bottom,x=i-p.left-p.right,w=Gi(u,this.id(),o),k=function getRadiusRange(e,t,n){var r=n.minOuterRadius,i=n.innerRadius,a=n.outerRadius,o=n.innerRadiusFixer;return[Math.max(i+o||0,r),a||Math.min(t,e)/2]}(x,_,{minOuterRadius:c,innerRadius:s,outerRadius:l,innerRadiusFixer:g}),C=this.axes().color,S=l||Math.min(_,x)/2,P=m.get("domain").radius,A=function rangeValueGetter(e){return function getRangeValue(e,t,n,r,i){var a=1,o=e.outerRadiusValue,u=e.sizeVal,c=i.domain(),s=i.getSize(u)/(c?i.range()[1]:i.config().value);return a*=(t[1]-t[0])/(n[1]-n[0]),(t[0]+(o-n[0])*a||r)*s}(e,k,P,S,v)},E=bf().innerRadius(s?Math.min(_/2,x/2,s):0).cornerRadius(f).padAngle(h).padRadius(d);this._chartWidth=x,this._chartHeight=_;var M=Eo(Ao(e),"g",[1],w[0]+"-group").classed(w[1]+"-group",!0).attr("transform","translate("+x/2+","+_/2+")"),O=[],T=0;return Eo(M,"g",b,""+w[0],{update:function tween(e){Eo(e,"path",function(e,t){return[{datum:e,index:t,arcFn:E,meta:{originalColor:C.getRawColor(e.colorVal),stateColor:{},colorTransform:{}}}]},w[0]+"-path").style("fill",function(e){return C.getColor(e.datum.colorVal)}).transition().duration(y.duration).attrTween("d",function(){for(var e=arguments.length,t=Array(e),n=0;n0&&e.forEach(function(e){var i=e[0].datum.startAngle,a=e[e.length-1].datum.endAngle,o=2*Math.PI*i/(2*Math.PI+i-a);e.forEach(function(e){var i=e.elem,a=e.datum;i.each(function(){var e=Ao(this);e.selectAll("path").transition().duration(t.duration).attrTween("d",function(){return function(e){var t=n(a);return a.outerRadius=t,r(ra()(a,{startAngle:o,endAngle:o,outerRadius:t})(e))}}).remove(),e.remove()})})})}(O,y,A,E),this}},{key:"getPointsFromIdentifiers",value:function getPointsFromIdentifiers(e){if(!this.data())return[];var t=e[0],n=e.slice(1,e.length),r=Ao(this.mount()).selectAll("path").data(),i=this.data().getFieldsConfig(),a=r.filter(function(e){var r=e.datum.data,a=e.datum.uid;return t.every(function(e,t){return e in i&&i[e].def.type===ir.FieldType.DIMENSION?-1!==n.findIndex(function(n){return n[t]===r[i[e].index]}):e!==nr.ROW_ID||-1!==n.findIndex(function(e){return e[t]===a})})})[0];if(a){var o=a.arcFn.centroid(a.datum);return[{x:o[0]+this._chartWidth/2,y:o[1]+this._chartHeight/2,width:2,height:2}]}return[]}}],[{key:"defaultConfig",value:function defaultConfig(){return yf}},{key:"formalName",value:function formalName(){return"arc"}}]),ArcLayer}(),xf=function drawText(e,t,n,r){var i=Ao(e).selectAll("g").data(t),a=i.enter().append("g").each(function(e){To(this,e.enter)}).merge(i),o=Lo(Ao(e),n.className),u=parseInt(o.fontSize,10);return r.setStyle(o),a.each(function(e){var t,n=Ao(this),i=e.update,a=e.text,o=e.color,c=e.textanchor,s=e.style,l=e.background;if(t=l.value){var f=l.padding,h=void 0,d=r.getOriSize(e.text),p=d.width,y=d.height,g=Eo(n,"rect",[1]);h="end"===c?p:"start"===c?0:p/2,To(g.node(),{x:i.x-h-f/2,y:i.y-u-f/2,width:p+f,height:y+f}),l&&Fo(g,{background:t})}var v=Eo(n,"text",function(e){return[e]}).text(a),m=v.node();s&&Fo(m,s),o&&Fo(m,{fill:o}),e.className&&v.classed(e.className,!0),To(m,i),v.attr("text-anchor",c)}),i.exit().remove(),i},wf={defClassName:"layer-text",classPrefix:"muze",className:"",transform:{type:"identity"},interaction:{highlight:[{type:"fill",intensity:[0,0,-15,0]}],fade:[{type:"fill",intensity:[0,0,15,0]}],focus:[{type:"fill",intensity:[0,0,15,0]}]},transition:{effect:"cubic",duration:1e3},encoding:{color:{},text:{value:"",background:{padding:10}}},states:{highlight:{className:"muze-layer-text-highlight"},fadeout:{className:"muze-layer-text-fadeout"},selected:{className:"muze-layer-text-selected"}}},kf=(n(27),function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function sliceIterator(e,t){var n=[],r=!0,i=!1,a=void 0;try{for(var o,u=e[Symbol.iterator]();!(r=(o=u.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){i=!0,a=e}finally{try{!r&&u.return&&u.return()}finally{if(i)throw a}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}()),Cf=function(){function defineProperties(e,t){for(var n=0;n4)}(r)?r:pa(r).size(i)(a),Eo(n,"path",function(e){return[e]}).attr("d",s)}else e.shape="circle",createShape(e,t)}(e,this)}),(t=c?t:t.transition().duration(c?0:i.duration)).attr("transform",function(e){return"translate("+e.update.x+","+e.update.y+")"}).each(function(e){var t=e.style,n=Ao(this);Xi(t,function(e){return n.style(e,t[e])}),n.attr("class",""+a),n.classed(e.className,!0)});var h=l.exit();c?h.remove():h.transition().ease(Wi[u]).duration(o).on("end",function(){Ao(this).remove()}).style("fill-opacity",0).style("stroke-opacity",0)},Af={defClassName:"layer-point",className:"",classPrefix:"muze",defColorStyle:"stroke",interaction:{highlight:[{type:"fill",intensity:[0,0,-20,0]}],fade:[{type:"fill",intensity:[0,0,20,0]}],focus:[{type:"fill",intensity:[0,0,20,0]}]},innerPadding:.1,nearestPointThreshold:10,transform:{type:"identity"},transition:{effect:"cubic",duration:1e3},encoding:{size:{value:30},color:{},shape:{value:"circle"},x:{},y:{},strokeOpacity:{value:.5},fillOpacity:{value:.5}},shapes:["circle","cross","diamond","square","star","wye","triangle"],sizes:[20,30,40,50,60,70]},Ef=(n(29),function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function sliceIterator(e,t){var n=[],r=!0,i=!1,a=void 0;try{for(var o,u=e[Symbol.iterator]();!(r=(o=u.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){i=!0,a=e}finally{try{!r&&u.return&&u.return()}finally{if(i)throw a}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}()),Mf=function(){function defineProperties(e,t){for(var n=0;n3&&void 0!==arguments[3]?arguments[3]:{},a=[],o=t.size,u=t.shape,c=t.color,s=t.x,l=t.y,f=o.field,h=o.value,d=u.field,p=s.field,y=l.field,g=n.size,v=n.shape,m=this.data().getFieldsConfig(),b=m[p]&&m[p].def.type===ir.FieldType.DIMENSION,_=m[y]&&m[y].def.type===ir.FieldType.DIMENSION,x=b?Bc.X:_?Bc.Y:null,w=c&&c.field,k=m[w]&&m[w].index,C=this._store.get("measurement"),S=m[d]&&m[d].index,P=m[f]&&m[f].index,A=n.color,E=i.offset,M=E.x,O=E.y,T=function _loop(i,o){var u=e[i],s=u._data,l=h instanceof Function?h(u,i):g.getSize(s[P]),f=v.getShape(s[S]),d=[Bc.X,Bc.Y].map(function(e){var r=null===u[e]?void 0:u[e],i=e===Bc.X?C.width:C.height;return t[e].field?n[e].getScaleValue(r):i/2}),p=Ef(d,2),y=p[0],m=p[1];y+=M,m+=O;var b=Wl({datum:u,index:i},{colorEncoding:c,colorAxis:A,colorFieldIndex:k}),_=b.color,w=b.rawColor,E={fill:_,stroke:_};if(!isNaN(y)&&!isNaN(m)){var T={enter:{x:y,y:m},update:{x:y,y:m},shape:f,size:Math.abs(l),meta:{stateColor:{},originalColor:w,colorTransform:{}},style:E,_data:s,_id:u._id,source:u._data,rowId:u._id};T.className=Xl(u,i,e,r),a.push(T),r.cachePoint(u[x],T)}},F=0,N=e.length;F=0?C:k))):(p=c===Nc||r[e]>=0?C:k,y=Math.abs(p-(c===Nc?S:r[e]>=0?k:C))),d=k}else p=0,y=f[i];return{enterSpace:g,enter:d,pos:p,space:y}}),jf=function resolveDimensions(e,t,n){var r={xAxis:n.x,yAxis:n.y},i=Nf("x",r,t,e),a=i.enterSpace,o=i.enter,u=i.pos,c=i.space,s=Nf("y",r,t,e),l=s.enterSpace;return{enter:{x:o,y:s.enter,width:a,height:l},update:{x:u,y:s.pos,width:c,height:s.space}}},If=function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function sliceIterator(e,t){var n=[],r=!0,i=!1,a=void 0;try{for(var o,u=e[Symbol.iterator]();!(r=(o=u.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){i=!0,a=e}finally{try{!r&&u.return&&u.return()}finally{if(i)throw a}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),Df=function(){function defineProperties(e,t){for(var n=0;n=k.x&&e<=k.width+k.x&&t>=k.y&&t<=k.height+k.y){c=w;break}c=null}var C=c&&c._data;return C&&(u=this.getIdentifiersFromData(C,c._id)),c?{dimensions:[c.update],id:u,layerId:this.id()}:c}},{key:"getPlotSpan",value:function getPlotSpan(){return this._plotSpan}}],[{key:"formalName",value:function formalName(){return"bar"}},{key:"defaultConfig",value:function defaultConfig(){return Ff}},{key:"defaultPolicy",value:function defaultPolicy(e,t){var n=rf.defaultPolicy(e,t),r=n.encoding.color.field,i=n.transform;return r&&(i.groupBy=r),n}}]),BarLayer}(),zf={defClassName:"layer-tick",className:"",classPrefix:"muze",interaction:{highlight:[{type:"stroke",intensity:[0,0,-15,0]}],fade:[{type:"stroke",intensity:[0,0,15,0]}],focus:[{type:"stroke",intensity:[0,0,15,0]}]},innerPadding:.1,transform:{type:"identity"},transition:{effect:"cubic",duration:1e3},encoding:{color:{},x:{},y:{},x0:{},y0:{},strokeOpacity:{value:.5},fillOpacity:{value:.5}},states:{highlight:{className:"muze-layer-tick-highlight"},fadeout:{className:"muze-layer-tick-fadeout"},selected:{className:"muze-layer-tick-selected"}}},Hf=function(e){var t=e.points,n=e.container,r=e.keyFn,i=e.className,a=Ao(n),o=a.selectAll("path").data(t,r),u=o.enter().append("path");return a.attr("class",i||""),u.each(function(e){var t=Ao(this),n=e.enter||{};Object.entries(n).forEach(function(e){return!isNaN(e[1])&&t.attr(e[0],e[1])})}),o.exit().remove(),o.merge(u).each(function(e){var t=Ao(this),n=e.update,r=e.style||{},i=void 0!==n.x0?n.x0:n.x,a=void 0!==n.y0?n.y0:n.y,o="M "+n.x+" "+n.y+" L "+i+" "+a;e.className&&t.classed(e.className,!0),t.attr("d",o),Object.entries(r).forEach(function(e){return t.style(e[0],e[1])})})},Vf=(n(33),function(){function defineProperties(e,t){for(var n=0;n3&&void 0!==arguments[3]?arguments[3]:{},i=[],a=Yl(n),o=a.xAxis,u=a.yAxis,c=this.data().getFieldsConfig(),s=this.encodingFieldsInf(),l=s.xField,f=s.yField,h=s.x0Field,d=s.y0Field,p=s.xFieldType,y=s.yFieldType,g=p===ir.FieldType.DIMENSION,v=y===ir.FieldType.DIMENSION,m=g?Bc.X:v?Bc.Y:null,b=t.color,_=b&&b.field,x=c[_]&&c[_].index,w=this._store.get("measurement"),k=n.color,C=r.offset,S=C.x,P=C.y,A=r.span,E=A.x,M=A.y,O=0,T=e.length;O0&&(n[0]=[].concat(field_sanitizer_toConsumableArray(n[0]),field_sanitizer_toConsumableArray(n[1])),n[1]=[]),{fields:n.map(function(e,t){return 1===t?r[t].concat(n[t]):n[t].concat(r[t])}),dimensions:[].concat(field_sanitizer_toConsumableArray(n[0]),field_sanitizer_toConsumableArray(n[1])),measures:[].concat(field_sanitizer_toConsumableArray(r[0]),field_sanitizer_toConsumableArray(r[1])),temporal:[].concat(field_sanitizer_toConsumableArray(i[0]),field_sanitizer_toConsumableArray(i[1])),categorical:[].concat(field_sanitizer_toConsumableArray(a[0]),field_sanitizer_toConsumableArray(a[1]))}}(i,n)}),r=Sh(n,2),i=r[0],a=r[1],o=i.fields,u=i.dimensions,c=i.measures,s=i.temporal,l=i.categorical,f=a.fields,h=a.dimensions,d=a.measures;return{rows:o,rowDimensions:u,rowMeasures:c,rowTemporalFields:s,rowCategoricalFields:l,columns:f,columnTemporalFields:a.temporal,columnCategoricalFields:a.categorical,columnDimensions:h,columnMeasures:d}},Eh=function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function sliceIterator(e,t){var n=[],r=!0,i=!1,a=void 0;try{for(var o,u=e[Symbol.iterator]();!(r=(o=u.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){i=!0,a=e}finally{try{!r&&u.return&&u.return()}finally{if(i)throw a}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),Mh=function(){function defineProperties(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:{},t=arguments[1],n=Jh(th,t.rows,e),r=Eh(n,2),i=r[0],a=r[1],o=Jh("column",t.columns,e),u=Eh(o,2),c=u[0],s=u[1];return this.axisFrom({row:a,column:s}),this.headerFrom({row:i,column:c}),this}}]),VisualEncoder}(),Th={linear:Qs,band:Js,temporal:nl,size:Ml,color:Cl,shape:jl},Fh={dimension:f.BAND,categorical:f.BAND,measure:f.LINEAR,temporal:f.TIME},Nh=function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function sliceIterator(e,t){var n=[],r=!0,i=!1,a=void 0;try{for(var o,u=e[Symbol.iterator]();!(r=(o=u.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){i=!0,a=e}finally{try{!r&&u.return&&u.return()}finally{if(i)throw a}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}();function encoder_helper_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t1?e.position="both":e.position=n.axisFrom()[a],r[o]=Ih(o,s[i],e,o===$f?l:f)}),r}},{key:"getFacetsAndProjections",value:function getFacetsAndProjections(e,t){for(var n=[],r=[],i=0,a=[],o=[],u=e[0],c=e[1],s=u.length,l=c.length,f=this.axisFrom(),h=0;hi)for(var g=i;g-1&&(r=[[b,b]],a.splice(_,1)),o.splice(0,1)}else{var x=a.length-1,w=a[x];r=[[w]];var k=Dh(o,w);k>-1&&(r=[[w,w]],o.splice(k,1)),a.splice(x,1)}return{facets:n=(n=[].concat(a,o)).filter(function(e,t,n){return t===n.findIndex(function(t){return t.toString()===e.toString()})}),projections:r}}},{key:"fieldSanitizer",value:function fieldSanitizer(e,t){return function get(e,t,n){null===e&&(e=Function.prototype);var r=Object.getOwnPropertyDescriptor(e,t);if(void 0===r){var i=Object.getPrototypeOf(e);return null===i?void 0:get(i,t,n)}if("value"in r)return r.value;var a=r.get;return void 0!==a?a.call(n):void 0}(CartesianEncoder.prototype.__proto__||Object.getPrototypeOf(CartesianEncoder.prototype),"fieldSanitizer",this).call(this,e,t)}},{key:"getRetinalFieldsDomain",value:function getRetinalFieldsDomain(e,t){var n=e.groupedModel,r={};for(var i in t)if({}.hasOwnProperty.call(t,i)){var a=t[i],o=a.field;if(!a.domain&&o){var u=Zh(n,o);r[o]=u}}return r}},{key:"serializeLayerConfig",value:function serializeLayerConfig(e){var t=[];return e.length&&e.forEach(function(e,n){var r=Gf.sanitizeLayerConfig(e);r.order=n,t.push(r)}),t}},{key:"getLayerConfig",value:function getLayerConfig(e,t){var n=[],r=e.columnFields,i=e.rowFields;return r.forEach(function(e){var r=e.toString();i.forEach(function(i){var a=[],o=i.toString(),u={x:{field:r},y:{field:o}},c=i.subtype(),s=function getDefaultMark(e,t){return"categorical"===e||"categorical"===t?"bar":"temporal"===e||"temporal"===t?"line":"point"}(e.subtype(),c),l=[{mark:s,def:{mark:s,encoding:u}}],f=function getLayerConfFromFields(e,t,n){return n.filter(function(n){var r,i,a,o=n instanceof Array?n:[n],u=(r=[]).concat.apply(r,encoder_helper_toConsumableArray(o.map(function(e){return e.encoding}).filter(function(e){return void 0!==e})));if(!u.length)return!0;var c=(i=[]).concat.apply(i,encoder_helper_toConsumableArray(u.map(function(e){return[e.x&&e.x.field,e.x0&&e.x0.field]}))).filter(function(e){return void 0!==e&&null!==e}),s=(a=[]).concat.apply(a,encoder_helper_toConsumableArray(u.map(function(e){return[e.y&&e.y.field,e.y0&&e.y0.field]}))).filter(function(e){return void 0!==e&&null!==e});if(!c.length&&!s.length)return!0;var l=!!c.length&&c.every(function(t){return-1!==e.indexOf(t)}),f=!!s.length&&s.every(function(e){return-1!==t.indexOf(e)});return c.length&&s.length?l&&f:l||f})}(e.getMembers(),i.getMembers(),t||[]);a=f.length?f.map(function(e){var t=na(na({},l[0].def),e),n=Gf.getSerializedConf(t.mark,t);return{mark:t.mark,order:t.order,def:n}}):l,n.push.apply(n,function cartesian_encoder_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);tt)for(var h=t;h0&&(e=na(e,t[0])),n.push(e)}),0===n.length&&(n=t),this.layers(n),n}},{key:"serializeLayerConfig",value:function serializeLayerConfig(e){var t=[];return e.length&&e.forEach(function(e){var n=Gf.getSerializedConf(e.mark,e);t.push({mark:e.mark,def:n})}),t}}],[{key:"type",value:function type(){return"polar"}}]),PolarEncoder}(),Hh=function(){function defineProperties(e,t){for(var n=0;n1&&void 0!==arguments[1]?arguments[1]:{},n=e.axisType,r=e.fieldsConfig,i=t.field,a=[],o=Th[n];return t.type=t.type?t.type:Qh(r,i||null),a.push(new o(t)),a}({axisType:e,fieldsConfig:t},n[e])}),r}},{key:"getLayerConfig",value:function getLayerConfig(e,t){var n=[];return t.forEach(function(t){var r=t;[nh,rh,ih].forEach(function(t){if(e[t]&&e[t].field){var n=r.def;r.def instanceof Array?n.forEach(function(n){n.encoding=n.encoding||{},!n.encoding[t]&&(n.encoding[t]={}),n.encoding[t].field=e[t].field}):(n.encoding=n.encoding||{},!n.encoding[t]&&(n.encoding[t]={}),n.encoding[t].field=e[t].field)}}),n.push(r)}),n}},{key:"setCommonDomain",value:function setCommonDomain(e){var t=e.domains,n=e.axes,r=e.encoding;return Object.entries(r).forEach(function(e){if(e[1]&&e[1].field){var r=e[0],i=e[1].field;i&&n[r].forEach(function(n){var r=t[i];!e[1].domain&&n.updateDomain(r)})}}),n}}],[{key:"type",value:function type(){return"retinal"}}]),RetinalEncoder}(),Uh=function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function sliceIterator(e,t){var n=[],r=!0,i=!1,a=void 0;try{for(var o,u=e[Symbol.iterator]();!(r=(o=u.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){i=!0,a=e}finally{try{!r&&u.return&&u.return()}finally{if(i)throw a}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),Wh=void 0;function group_utils_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t0?e[0].map(function(i,a){return new n({type:"header"},{labelManager:r}).source(function getHeaderText(e,t,n){var r="";if(t===n-1&&e.length>n){for(var i=t;i0&&void 0!==arguments[0]?arguments[0]:[];return new Vo(e)}([]),a=(i=i.data(n,r)).enter().append(t).merge(i);return i.exit()&&i.exit().remove(),a},nd=function getBorders(e,t){var n={top:!1,bottom:!1},r={left:!1,right:!1},i={top:!1,bottom:!1,left:!1,right:!1},a=e.rows,o=e.columns,u=e.values,c=Uh(a,2),s=c[0],l=c[1],f=Uh(o,2),h=f[0],d=f[1],p=t.fieldInfo(),y=p.rowDimensions,g=p.columnDimensions,v=p.rowTemporalFields,m=p.columnTemporalFields,b=p.columnMeasures,_=p.rowMeasures,x=y.length+g.length,w=_.length+b.length,k=v.length+m.length;if("polar"===t.constructor.type()){if(!x)return{showRowBorders:n,showColBorders:r,showValueBorders:i}}else if(!w&&!k&&x<=2)return{showRowBorders:n,showColBorders:r,showValueBorders:i};return n=function getRowBorders(e,t){var n={top:!1,bottom:!1};return(e.length>1||t.length>1)&&(n.top=!0,n.bottom=!0),n}(s,l),r=function getColumnsBorders(e,t){var n={left:!1,right:!1};return(e.length||t.length)&&(e[0]&&e[0].length>1||t[0]&&t[0].length>1)&&(n.left=!0,n.right=!0),n}(h,d),i=function getValueBorders(e,t){var n={top:!0,left:!0,bottom:!0,right:!0},r=[ah,oh],i=["top","bottom"];return e.forEach(function(e,t){e[0]&&e[0].length?n[r[t]]=!0:n[r[t]]=!1}),t.forEach(function(e,t){e.length?n[i[t]]=!0:n[i[t]]=!1}),n}([s,l],[h,d]),u.length>1&&(i.top=!0,i.bottom=!0),u.length&&u[0].length>1&&(i.left=!0,i.right=!0),{showRowBorders:n,showColBorders:r,showValueBorders:i}};function action_behaviour_map_defineProperty(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var rd=(action_behaviour_map_defineProperty(qh={},a.DRAG,{behaviours:[u.BRUSH],touch:!1}),action_behaviour_map_defineProperty(qh,a.HOVER,{behaviours:[u.HIGHLIGHT]}),action_behaviour_map_defineProperty(qh,a.LONGTOUCH,{behaviours:[u.SELECT],touch:!0}),action_behaviour_map_defineProperty(qh,a.TOUCHDRAG,{behaviours:[u.BRUSH],touch:!0}),action_behaviour_map_defineProperty(qh,a.CLICK,{behaviours:[u.SELECT],touch:!1}),qh),ad="config",od="data",ud="axes",cd="layerDef",sd="width",ld="height",fd="mount",hd="primaryXAxisUpdated",dd="primaryYAxisUpdated",pd="secondaryXAxisUpdated",yd="secondaryYAxisUpdated",gd="transform",vd="dataDomain",md="layersCreated",bd="fields",_d="timeDiffs",xd="layerAxisIndex";function src_helper_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t2&&void 0!==arguments[2]?arguments[2]:{},r=void 0,i=n.payload,a=n.selectionSet,o=n.propagationFields[t]||{},u=o.fields||[],c=o.append,s=i.criteria,l=e.context,f=l.cachedData()[0],h=l.id(),d=e.sideEffects(),p=e._behaviourEffectMap,y=a.mergedEnter.model,g=f.getFieldsConfig();i.sourceUnit=h,i.action=t,i.sourceCanvas=l.parentAlias();var v=e._propagationBehaviourMap[t]||t,m=[];null===s?r=null:Di(s)?(m=Object.keys(s||{}),r=y?y.project(m):null):(m=s[0],r=y?y.project(m):null);var b=l.facetByFields();if(null!==r&&u.length){var _=r.getData().schema.map(function(e){return e.name});r=function getModelWithFacetData(e,t){var n=e.getData(),r=n.schema,i=n.data,a=[],o=t[0].map(function(e){return{name:""+e,type:ir.FieldType.DIMENSION}}),u=t[1];return i.forEach(function(e){var t={};r.forEach(function(n,r){t[n.name]=e[r]}),o.forEach(function(e,n){t[e.name]=u[n]}),a.push(t)}),new ar.a(a,[].concat(data_propagator_toConsumableArray(r),data_propagator_toConsumableArray(o)))}(r,b),m=c?[].concat(data_propagator_toConsumableArray(_),data_propagator_toConsumableArray(u)):u,r=r.project(m)}var x=!1;m.length&&m.every(function(e){return g[e]&&g[e].def.type===ir.FieldType.MEASURE})&&(x=!0);var w=l.parentAlias();i.action=t;var k=e._actions.behavioural[v],C=!!k&&k.constructor.mutates(),S=function filterFn(e,t){var n=p[e.config.action],r=!e.config.groupId||n.some(function(e){return d[e.name||e].constructor.mutates()});return e.config.groupId!==t.groupId&&r},P=e._actions.behavioural[t],A=!!P&&P.constructor.mutates(),E={payload:i,action:t,criteria:r,isMutableAction:A,propagateInterpolatedValues:x,groupId:w,sourceId:A?w:h,filterFn:S,enabled:function enabled(e,n){return t===v||e.payload.sourceCanvas===n.context.parentAlias()}};f.propagate(r,E,!0),t!==v&&(E={payload:i,sourceId:C?w:h,criteria:r,isMutableAction:C,propagateInterpolatedValues:x,action:v,groupId:w,applyOnSource:t===v,enabled:function enabled(e,t){return e.payload.sourceCanvas!==t.context.parentAlias()},filterFn:S},f.propagate(r,E,!0,{filterImmutableAction:function filterImmutableAction(e,t){return e.groupId!==t.groupId}}))},Xd=function(){function defineProperties(e,t){for(var n=0;n1){var u=r[0].config();if("linear"===r[0].constructor.type()){if(u.alignZeroLine){r.forEach(function(e){return e.config({nice:!1})});var c=function getAdjustedDomain(e,t){var n=e[0]/(e[0]-t[0]),r=e[1]/(e[1]-t[1]),i=!1;return t[0]>0&&t[1]>0&&t[1]>0&&e[1]>0&&(i=!0,t[0]=0,t[1]=0),t[0]<0&&t[1]<0&&t[1]<0&&e[1]<0&&(i=!0,e[0]=0,e[1]=0),i||n===r||(n1&&void 0!==arguments[1]?arguments[1]:{},n=[],r=e;if(null===e)return[];var i=this.layers(),a=i.length;Di(e)&&(r=[Object.keys(e)],r=[].concat(visual_unit_toConsumableArray(r),visual_unit_toConsumableArray(function transposeArray(e){return e[0].map(function(t,n){return e.map(function(e){return e[n]})})}(Object.values(e)))));for(var o=0;o1&&void 0!==arguments[1]?arguments[1]:[]].map(function(e){return e.reduce(function(e,t){return e=[].concat(matrix_model_toConsumableArray(e),matrix_model_toConsumableArray(t.getMembers()))},[])})},ep=function createSelectedDataModel(e,t,n){return e.select(function(e){return t.every(function(t,r){return e[t].value===n[r]})})},tp=function uniqueKeyGenerator(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:[],i=t.facets,a=t.dataModel,o=t.uniqueValues;if(i[n+1]){var u=i[n];o.forEach(function(t){var o=a.select(function(e){return e[u].value===t}),c=Zh(o,i[n+1]);uniqueKeyGenerator(e,{facets:i,dataModel:o,uniqueValues:c},n+1,[].concat(matrix_model_toConsumableArray(r),[t]))})}else o.forEach(function(t){e.push([].concat(matrix_model_toConsumableArray(r),[t]))})},np=function projectRows(e,t){var n=t.allColumnProjections,r=t.rowProjections,i=t.optionalProjections;return r.length>0?r.map(function(t){var r=Jd(t,n),a=Zd(r,2),o=a[0],u=a[1];return e.project([].concat(matrix_model_toConsumableArray(o),matrix_model_toConsumableArray(u),matrix_model_toConsumableArray(i)))}):[e]},rp=function pushToMatrix(e,t){var n,r=[],i=e.matrix,a=e.datamodel,o=e.facetInfo,u=e.fieldInfo,c=u.rowProjections,s=u.colProjections,l=u.optionalProjections,f=o.rowIndex,h=o.columnIndex,d=c[f%c.length]||[];s.length>0?r=s.map(function(e,n){var r=Jd(e,d),i=Zd(r,2),u=i[0],c=i[1],p=a.project([].concat(matrix_model_toConsumableArray(u),matrix_model_toConsumableArray(c),matrix_model_toConsumableArray(l))),y={rowFields:d,columnFields:e},g={rowIndex:f,columnIndex:h*s.length+n};return t(p,{projections:y,indices:g},o)}):r=[t(a,{projections:{rowFields:d,columnFields:[]},indices:{rowIndex:f,columnIndex:h}},o)];i[f]=i[f]||[],(n=i[f]).push.apply(n,matrix_model_toConsumableArray(r))},ip=function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function sliceIterator(e,t){var n=[],r=!0,i=!1,a=void 0;try{for(var o,u=e[Symbol.iterator]();!(r=(o=u.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){i=!0,a=e}finally{try{!r&&u.return&&u.return()}finally{if(i)throw a}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}();function cell_creator_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t0?d.length:1):(a=g,o=p.length>0?p.length:1),s.length&&f===u&&l&&a.length){var h={axis:l,length:o,type:u},v=[];i<2?(h.keys=a,h.facetConfig=c.rows,v=up(h,r,t,n)):(h.facetConfig=c.columns,h.keys=a[0].map(function(e,t){return a.map(function(e){return e[t]})}),v=up(h,r,t,n)),r[u+"Headers"]=v}else r[u+"Headers"]=null}),r},sp=function computeMatrices(e,t){var n=e.resolver,r=e.datamodel,i=e.componentRegistry,a=e.encoders,o=t.globalConfig,u=t.selection,c=t.transform,s=o.autoGroupBy,l=n.dependencies().smartlabel,f=r.getFieldsConfig(),h=n.layerConfig(),d=n.registry(),p=n.horizontalAxis().fields,y=n.verticalAxis().fields,g=n.optionalProjections(t,h),v=n.getAllFields(),m={normalizedColumns:y,normalizedRows:p,facetsAndProjections:v,layers:h,fieldMap:f,otherEncodings:g,encoders:a,facetConfig:o.facetConfig||{},axisFrom:o.axisFrom||{},selection:u},b={GeomCell:n.getCellDef(d.GeomCell),AxisCell:n.getCellDef(d.AxisCell),BlankCell:n.getCellDef(d.BlankCell),TextCell:n.getCellDef(d.TextCell)},_=Yh(p),x=Yh(y);n.colCells({}),n.rowCells({}),n.datamodelTransform(c||{}),n.resetSimpleAxes();var w={exitCellMap:n.cacheMaps().entryCellMap,entryCellMap:new Map};n.cacheMaps(w);var k={config:o,suppliedLayers:a.simpleEncoder.serializeLayerConfig(n.layerConfig()),resolver:n,cell:b.GeomCell,encoder:a.simpleEncoder,newCacheMap:w,detailFields:t.detail},C=r.getFieldsConfig(),S=r;if(!s.disabled){var P=function extractFields(e,t){var n,r=Object.values(e).map(function(e){var t,n,r=(t=[]).concat.apply(t,group_utils_toConsumableArray(e));return(n=[]).concat.apply(n,group_utils_toConsumableArray(r.map(function(e){return e instanceof _h?e.getMembers():e})))});return(n=[]).concat.apply(n,group_utils_toConsumableArray(r).concat(group_utils_toConsumableArray(t)))}(v,function getFieldsFromSuppliedLayers(e,t){var n,r=[],i=e.map(function(e){return e.encoding||{}});return r=(r=[].concat(group_utils_toConsumableArray(r),[(n=[]).concat.apply(n,group_utils_toConsumableArray(i.map(function(e){return Object.values(e).map(function(e){return e.field})})))])).filter(function(e){return t[e]&&t[e].def.type===ir.FieldType.DIMENSION})}(k.suppliedLayers,r.getFieldsConfig())),A=P.filter(function(e){return C[e]&&C[e].def.type===ir.FieldType.DIMENSION}),E=s.measures;S=r.groupBy(A.length?A:[""],E).project(P)}var M=function getMatrixModel(e,t,n){var r=[],i=[],a=[],o=[],u=[],c=[],s=t.rowFacets,l=t.colFacets;if(t.colProjections.forEach(function(e){o.push.apply(o,matrix_model_toConsumableArray(e))}),t.allColumnProjections=o,s.length>0){var f=s[0].toString(),h=Zh(e,f);tp(i,{facets:s,dataModel:e,uniqueValues:h}),i.forEach(function(n){var i,a=Jd(s),o=Zd(a,1)[0],u=ep(e,o,n);c.push([s,n]),(i=r).push.apply(i,matrix_model_toConsumableArray(np(u,t)))})}else{var d;(d=r).push.apply(d,matrix_model_toConsumableArray(np(e,t)))}if(r=r.length>0?r:[[]],l.length>0){var p=l.map(function(e){return""+e}),y=p[0],g=Zh(e,y);tp(a,{facets:p,dataModel:e,uniqueValues:g}),r.forEach(function(r,i){c[i]=c[i]||[[],[]],a.forEach(function(a,o){u[i]=u[i]||[];var s=r instanceof ar.a?r:e,f=ep(s,p,a),h={matrix:u,datamodel:f,facetInfo:{rowFacets:c[i],colFacets:[l,a],rowIndex:i,columnIndex:o},fieldInfo:t};rp(h,n)})})}else r.forEach(function(r,i){c[i]=c[i]||[[],[]];var a={matrix:u,datamodel:r||e,facetInfo:{rowFacets:c[i],colFacets:[[],[]],rowIndex:i,columnIndex:0},fieldInfo:t};rp(a,n)});var v=a.length>0?a[0].map(function(e,t){return a.map(function(e){return e[t]})}):a;return{matrix:u,rowKeys:i,columnKeys:v}}(S,v,n.valueCellsCreator(k));n.cacheMaps().exitCellMap.forEach(function(e){e.remove()}),n.cacheMaps().exitCellMap.clear(),n.valueMatrix(M.matrix),n.createUnits(i,t);var O=function mutateAxesFromMap(e,t){var n=null,r=null,i=e.xAxesMap,a=e.yAxesMap,o=t.x,u=t.y;return o&&o.forEach(function(e){var t=i.get(e);(n=n||[]).push(t)}),u&&u.forEach(function(e){var t=a.get(e);(r=r||[]).push(t)}),{xAxes:n,yAxes:r}}(n.cacheMaps(),n.axes()),T=O.xAxes,F=O.yAxes;n.axes({x:T,y:F});var N=function generateMatrices(e,t,n,r){var i=e.unitHeight,a=e.unitWidth,o=e.facetsAndProjections,u=e.normalizedRows,c=e.normalizedColumns,s=e.selection,l=e.axisFrom,f=e.facetConfig,h=e.encoders,d=cp({fields:{rows:u,columns:c},matrices:t,facetsAndProjections:o,selection:s,axisFrom:l,facetConfig:f,encoders:h},n,r),p=d.columnsPrimary,y=d.columnsSecondary,g=d.rowsPrimary,v=d.rowsSecondary,m=d.leftHeaders,b=d.topHeaders,_=d.bottomHeaders,x=d.rightHeaders,w=[g,v,p,y].map(function(e){return e?e.getObjects():[]}),k=ip(w,4),C=k[0],S=k[1],P=k[2],A=k[3],E=[m,x].map(function(e){return e?e.getObjects().map(function(e){return e.getObjects()}):[]}),M=ip(E,2),O=M[0],T=M[1],F=O.length?O.map(function(e,t){return C[t]=C[t]?[C[t]]:[],[].concat(cell_creator_toConsumableArray(e),cell_creator_toConsumableArray(C[t]))}):C?C.map(function(e){return[e]}):[],N=S.length?S.map(function(e,t){return[e].concat(cell_creator_toConsumableArray(T[t]||[]))}):T.length?T.map(function(e){return[].concat(cell_creator_toConsumableArray(e))}):[],j=[];b&&b.getObjects().forEach(function(e){e.getObjects().forEach(function(e,t){j[t]=j[t]||[],j[t].push(e)})});P.length&&j.push(P);var I=[];A.length&&I.push(A);var D=I.length;_&&_.getObjects().forEach(function(e){e.getObjects().forEach(function(e,t){I[t+D]=I[t+D]||[],I[t+D].push(e)})});if(!F.length&&!N.length){var L=new n.BlankCell;L.setAvailableSpace(a,i),F=[[L]]}if(!(j.length||I.length&&I[0].length)){var R=new n.BlankCell;R.setAvailableSpace(a,i),I=[[R]]}return{rows:[F,N],columns:[j,I],selectionObj:d}}(m,{valuesMatrix:M,axesMatrix:n.axes()},b,l),j=N.rows,I=N.columns,D=N.selectionObj;return n.rowMatrix(j),n.columnMatrix(I),{rows:n.rowMatrix(),columns:n.columnMatrix(),values:n.valueMatrix(),isColumnSizeEqual:x,isRowSizeEqual:_,selection:D,dataModels:{groupedModel:S,parentModel:r}}},lp=function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function sliceIterator(e,t){var n=[],r=!0,i=!1,a=void 0;try{for(var o,u=e[Symbol.iterator]();!(r=(o=u.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){i=!0,a=e}finally{try{!r&&u.return&&u.return()}finally{if(i)throw a}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),fp=function(){function defineProperties(e,t){for(var n=0;n0?d[0].map(b):[],right:p.length>0?p[0].map(b):[]},w=[ah,oh].map(function(e){return g.map(function(t,n){return n===g.length-1?_[e]:x[e]})}),k=lp(w,2),C=k[0],S=k[1];if(0===g.length){var P=[ah,oh].map(function(e){return v.map(function(t,n){return 0===n?_[e]:x[e]})}),A=lp(P,2);r=A[0],i=A[1]}else r=v.map(function(){return d.length>0?d[0].map(b):[]}),i=v.map(function(){return p.length>0?p[0].map(b):[]});return s.notify({client:[C,S,r,i],action:"initialized",formalName:"facet-headers"}),{topLeft:C,topRight:S,bottomLeft:r,bottomRight:i}}},{key:"getMatrices",value:function getMatrices(e,t,n,r){return sp({datamodel:e,componentRegistry:n,encoders:r,resolver:this},t)}}]),MatrixResolver}(),dp=function(){function defineProperties(e,t){for(var n=0;n3&&void 0!==arguments[3]?arguments[3]:{},i=void 0,a=e.context.constructor.type(),o=r.payload,u=e.context.data(),c=e.context.metaData(),s=c.getData().schema[0].type,l={},f=e.context._id;l.action=Pp[t]||t,l.sideEffects=Ep[t],l.sourceCanvas=e.context.canvasAlias();var h=e._actions.behavioural[l.action].constructor.mutates();if(null===o.criteria)i=null;else{var d=n.mergedEnter,p=u.filter(function(e){return-1!==d.uids.indexOf(e.id)}).map(function(e){return e.value});if("step"===a||"discrete"===a&&"measure"===s){var y=Object.keys(o.criteria||{})[0];i=(p=u.filter(function(e){return-1!==d.uids.indexOf(e.id)}).map(function(e){return e.range})).length?c.select(function(e){for(var t=!1,n=0;n=p[n][0]&&e[y].value<=p[n][1]);n++);return t},{saveChild:!1}):null}else"gradient"===a?i=ca(c,o.criteria):p.length?i=function assembleModelFromIdentifiers(e,t){var n=[],r=void 0,i=e.getFieldsConfig();return t.length?function(){for(var e=t[0],a=e.length,o=0;o=s+l?[i.invert(s+l-c),i.invert(s+l)]:f-l1&&void 0!==arguments[1]?arguments[1]:{},i=t.config().classPrefix;e.mergedEnter.length||e.mergedExit.length?(n(e.mergedExit,r.className||i+"-legend-brighten",!1),n(e.mergedExit,r.className||i+"-legend-fadeout",!0),n(e.mergedEnter,r.className||i+"-legend-fadeout",!1)):n(e.completeSet,r.className||i+"-legend-fadeout",!1)},brighten:function brighten(e){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},i=t.config().classPrefix;e.mergedEnter.length||e.mergedExit.length?(n(e.mergedEnter,r.className||i+"-legend-brighten",!0),n(e.mergedExit,r.className||i+"-legend-brighten",!1)):n(e.completeSet,r.className||i+"-legend-brighten",!1)}}},Vp=function(){function defineProperties(e,t){for(var n=0;n2&&void 0!==arguments[2]?arguments[2]:{};(0,this._strategies[n.strategy||this._strategy])(e,this)}}],[{key:"formalName",value:function formalName(){return"highlighter"}}]),LegendHighlighter}(),Wp={config:{sanitization:function sanitization(e,t){return na(e._config||{},t)}},data:{},fieldName:{},legendContainer:{},measurement:{sanitization:function sanitization(e,t){var n=na(e._measurement,t);return["padding","border","margin"].forEach(function(e){n[e]=Math.min(n[e]>0?n[e]:0,.1*n.maxWidth,.1*n.maxHeight)}),n}},logicalSpace:{},metaData:{},range:{sanitization:function sanitization(e,t){return e.scale().range(t),e.resetLogicalSpace(),e.store().commit("range",t),t}},scale:{},smartTicks:{},store:{},title:{sanitization:function sanitization(e,t){return na(e._title||{},t)}}},qp="horizontal",Gp="vertical",Yp={height:30,width:30,maxWidth:1/0,maxHeight:1/0,padding:2,margin:2,border:1},Xp={text:"",orientation:function orientation(e){return"left"===e||"right"===e?"left":"center"}},Kp={classPrefix:"muze",borderStyle:"solid",borderColor:"rgba(0,0,0,0)",formatter:{bounds:{lower:"less than",upper:"more than"}},item:{text:{orientation:"right",width:10,formatter:function formatter(e){return e}},icon:{className:"legend-icon",height:20,width:20,color:"rgba(0,0,0,.5)",type:"square"}}},$p=function ICON_MAP(e){return e&&"string"==typeof e?pa(e):e};function legend_helper_defineProperty(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var Qp=function getScaleInfo(e){var t=e.constructor.type();return{scaleType:t,domain:e.uniqueValues(),steps:e.config().stops||1,scaleFn:Mp[t]}},Zp=function getInterpolatedData(e,t){for(var n=[],r=ia()(e[0],e[1]),i=0;i<=t;i++)n[i]=r(i/t);return n},Jp=function getDomainBounds(e,t,n){var r,i=t.scaleFn,a=t.scaleType,o=t.scale,u=n.domain,c=n.domainBounds,s=n.domainLeg,l=n.steps,f=u["lower"===e?0:u.length-1],h=l["lower"===e?0:l.length-1];return legend_helper_defineProperty(r={},a,"size"===a?o[i](f)*o.getScaleFactor():o[i](f)),legend_helper_defineProperty(r,"value",c[e]),legend_helper_defineProperty(r,"id","lower"===e?0:s.length+2),legend_helper_defineProperty(r,"range",[f,h]),r},ey=function(){function defineProperties(e,t){for(var n=0;n0?h.height+s:0,p=h.width+s,y=this.getLabelSpaces(s,c),g=function computeItemSpaces(e,t,n){var r=0,i=0,a={width:0,height:0},o=t.effPadding,u=t.titleWidth,c=t.labelSpaces,s=t.titleHeight,l=t.maxWidth,f=e.item,h=e.align,d=f.icon,p=f.text.orientation,y=[],g=[],v=0;return c.forEach(function(e,t){var c={width:0,height:0},s={width:0,height:0},l=n[t]||{};"left"===p||"right"===p?(e.width+=o,s.width=(l.size?2*Math.sqrt(l.size/Math.PI):d.width)+o,v=Math.max(s.width,v),c.width=e.width+v,e.height=Math.max(e.height,d.height)+o,s.height=e.height,c.height=e.height):(e.width=Math.max(e.width,l.size?2*Math.sqrt(l.size/Math.PI):d.width)+o,s.width=e.width,c.width=e.width,v=Math.max(s.width,v),e.height+=o,s.height=d.height+o,c.height=e.height+s.height),"horizontal"===h?r=Math.max(r,c.height):(r+=c.height,i=Math.max(i,c.width,u)+o),a={width:Math.max(c.width,a.width),height:Math.max(c.height,a.height)},y.push(c),g.push(s)}),y.forEach(function(e,t){"horizontal"===h?(e.height=r,g[t].width=v,"left"===p||"right"===p?(c[t].height=r,g[t].height=r,y[t].width=c[t].width+v):(c[t].width=v,y[t].width=v,c[t].width=v),i=Math.max(i+y[t].width)):(e.width=Math.max(i,l),"top"===p||"bottom"===p?(c[t].width=i,g[t].width=i,v=i):(g[t].width=v,y[t].width=c[t].width+v,c[t].width=a.width-v,i=Math.max(i,e.width)+o))}),i=Math.max(i,u),{totalHeight:r+=s+o,totalWidth:i,itemSpaces:y,iconSpaces:g,maxItemSpaces:a,maxIconWidth:v}}(this.config(),{effPadding:s,titleWidth:p,labelSpaces:y,titleHeight:d,maxWidth:r,maxHeight:i},this.data()),v=g.totalHeight,m=g.totalWidth,b=g.itemSpaces,_=g.iconSpaces,x=g.maxItemSpaces,w=g.maxIconWidth;return this.measurement({width:Math.max(m,t)+f+l,height:Math.max(v,n)+f+l,labelSpaces:y,iconSpaces:_,itemSpaces:b,maxItemSpaces:x,maxIconWidth:w,titleSpaces:{width:Math.min(r,this.measurement().width)-f-l,height:d}}),this}},{key:"getTitleSpace",value:function getTitleSpace(){return this._labelManager.setStyle(Lo(Ao("body"),this.config().classPrefix+"-legend-title")),this._labelManager.getOriSize(this.title().text?this.title().text:"")}},{key:"renderTitle",value:function renderTitle(e){var t=this.measurement(),n=t.titleSpaces,r=t.border,i=t.padding,a=t.width,o=this.config(),u=o.borderStyle,c=o.borderColor;return function titleCreator(e,t,n,r){var i=Eo(e,"table",[1],r.classPrefix+"-legend-title").style("width",n.width+"px").style("height",n.height+"px").style("border-bottom",n.border+"px "+r.borderStyle+" "+r.borderColor).style("text-align",t.orientation instanceof Function?t.orientation(r.position):t.orientation);return Eo(i,"td",[1],r.classPrefix+"-legend-title-text").style("width",n.width+"px").style("height","100%").style("padding",n.padding+"px").text(t.text).node()}(e,this.title(),{height:n.height,width:a,border:r,padding:i,borderStyle:u,borderColor:c},this.config())}},{key:"render",value:function render(){var e=this.firebolt(),t=this.config(),n=t.classPrefix,r=t.borderStyle,i=t.borderColor,a=this.measurement(),o=a.maxWidth,u=a.maxHeight,c=a.width,s=a.height,l=a.margin,f=a.border,h=Eo(Ao(this.mount()),"div",[1],n+"-legend-box");return h.classed(n+"-legend-box-"+this._id,!0),h.style("float","left"),h.style("width",Math.min(o,c)-2*l+"px").style("height",Math.min(u,s)-2*l+"px").style("margin",l+"px").style("border",f+"px "+r+" "+i),this.legendContainer(h.node()),this.renderTitle(h),e.createSelectionSet(this.data().map(function(e){return e.id})),h}},{key:"getCriteriaFromData",value:function getCriteriaFromData(e){var t=this.fieldName();return"measure"===this.metaData().getData().schema[0].type?function simple_legend_defineProperty(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}({},t,e.range):[[t],[e.value]]}}],[{key:"create",value:function create(e){return new SimpleLegend(e)}},{key:"defaultConfig",value:function defaultConfig(){return Kp}},{key:"defaultMeasurement",value:function defaultMeasurement(){return Yp}}]),SimpleLegend}();function position_config_defineProperty(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var oy=(position_config_defineProperty(ty={},"horizontal",{datasets:function datasets(e){return{row:[1],column:e}},itemContainerMeasures:function itemContainerMeasures(e){var t=e.itemSpaces;return{row:{width:e.width+"px",padding:"0px"},column:{width:function width(e,n){return t[n].width+"px"},padding:"0px"}}},getStepSpacesInfo:function getStepSpacesInfo(e){var t=e.maxItemSpaces;return{iconHeight:e.height,iconWidth:t.width,stepPadding:{horizontal:!0,vertical:!1}}}}),position_config_defineProperty(ty,"vertical",{datasets:function datasets(e){return{row:e,column:function column(e){return[e]}}},itemContainerMeasures:function itemContainerMeasures(e,t){var n=e.width;return{row:{width:n+"px",padding:t.padding+"px"},column:{width:n+"px",padding:"0px"}}},getStepSpacesInfo:function getStepSpacesInfo(e){var t=e.maxItemSpaces,n=e.width;return{iconHeight:t.height,iconWidth:n,stepPadding:{horizontal:!1,vertical:!0}}}}),ty),uy=(position_config_defineProperty(ny={},"left",oy.vertical),position_config_defineProperty(ny,"right",oy.vertical),position_config_defineProperty(ny,"top",oy.horizontal),position_config_defineProperty(ny,"bottom",oy.horizontal),ny),cy=(position_config_defineProperty(ry={},"left","end"),position_config_defineProperty(ry,"right","start"),position_config_defineProperty(ry,"top","center"),position_config_defineProperty(ry,"bottom","center"),ry),sy=(position_config_defineProperty(iy={},"left",[Op,"shape"]),position_config_defineProperty(iy,"right",["shape",Op]),position_config_defineProperty(iy,"top",[Op,"shape"]),position_config_defineProperty(iy,"bottom",["shape",Op]),iy),ly=function createLegendSkeleton(e,t,n,r){var i,a,o,u,c=e.measurement(),s=c.margin,l=c.border,f=c.titleSpaces,h=c.width,d=c.height,p=c.maxWidth,y=c.maxHeight;a=d-(f.height+2*s+2*l),i=h-(2*s+2*l),o=y-(f.height+2*s+2*l),u=p-(2*s+2*l);var g=Eo(t,"div",[1],n+"-legend-body");return g.select("."+n+"-legend-overflow").remove(),u&&u4)}(u)?u:$p(u).size(o)(),Eo(a,"path",function(e){return[e]}).attr("d",l)}}return e[1]="circle",createShape(e,t,"circle")}(n,Eo(l,"g",[n[1]],i+"-legend-icon"),n[3]?"circle":"square",o,a).attr("transform","translate("+(u/2-c)+" "+a/2+")").attr("fill",n[2]||s):Eo(l,"rect",[n[1]],i+"-legend-icon").attr("x",0).attr("y",0).attr("width",u).attr("height",a).attr("fill",n[2]||s)},py=function(){function defineProperties(e,t){for(var n=0;na[a.length-1]&&t.push(i[1])):t=Zp(i,a-1),(t=[].concat(gradient_legend_toConsumableArray(new Set(t))).sort(function(e,t){return e-t})).map(function(n,i){var a,u=t[i];return gradient_legend_defineProperty(a={},r,"size"===r?e[o](n)*e.getScaleFactor():e[o](Math.floor(n))),gradient_legend_defineProperty(a,"value",+u.toFixed(2)),gradient_legend_defineProperty(a,"id",i),a}).filter(function(e){return null!==e.value})}},{key:"getLabelSpaces",value:function getLabelSpaces(e){this.config({item:{text:{orientation:this.config().position}}});var t=function createAxis(e){var t=e.data(),n=e.config().align,r=e._cells.AxisCell,i=new Qs({id:"legend-"+e._id,orientation:n===Gp?"right":"bottom",style:e._computedStyle,nice:!1,showAxisName:!1,tickValues:t.map(function(e){return e.value}),fixedBaseline:!1},{labelManager:e._labelManager});return i.domain(gy(t)),i.range([1,1]),(new r).source(i).config({margin:{left:0,bottom:0,top:0,right:0}})}(this),n=t.getLogicalSpace(),r={width:n.width-e,height:n.height-e},i=t.source().domain().length,a=new Array(i).fill(r);return this.axis(t),a}},{key:"getDrawingContext",value:function getDrawingContext(){return{svgContainer:this._legendGradientSvg}}},{key:"render",value:function render(){var e=this.firebolt(),t=function get(e,t,n){null===e&&(e=Function.prototype);var r=Object.getOwnPropertyDescriptor(e,t);if(void 0===r){var i=Object.getPrototypeOf(e);return null===i?void 0:get(i,t,n)}if("value"in r)return r.value;var a=r.get;return void 0!==a?a.call(n):void 0}(GradientLegend.prototype.__proto__||Object.getPrototypeOf(GradientLegend.prototype),"render",this).call(this,this.mount());return function renderGradient(e,t){var n,r,i=e.config(),a=i.align,o=i.classPrefix,u=i.item,c=e.data(),s=vy(t,o,c),l=s.legendContainer,f=s.legendGradSvg,h=s.legendGradCont,d=s.linearGradient,p=s.legendRect,y=e.axis().source().getAxisDimensions().tickLabelDim,g=e.measurement(),v=g.padding,m=g.margin,b=g.border,_=g.titleSpaces,x=g.maxHeight,w=g.maxWidth,k=g.height,C=g.width,S={};n=Math.floor(k-(_.height+2*m+2*b)),r=Math.floor(C-(2*m+2*b)),a===qp?(S.height=u.icon.height,S.width=r-2*v-y.width/2,d.attr("x2","100%").attr("y1","0%"),h.attr("transform","translate( "+y.width/2+" 0)"),my(e,l,n-u.icon.height-v,r-2*v-1),l.classed(o+"-overflow-x",C>w),Mo(l,{height:k+"px",width:Math.min(C,w)+"px",padding:v+"px"}),p.attr("height",S.height),p.attr("width",S.width-y.width/2)):(S.height=n-2*v-y.height/2,S.width=u.icon.width,d.attr("x2","0%").attr("y1","100%"),h.attr("transform","translate(0 "+y.height/2+")"),my(e,l,n-2*v-1,r-u.icon.width-2*v),l.classed(o+"-overflow-y",k>x),Mo(l,{height:Math.min(k,x)+"px",width:C+"px",padding:v+"px"}),p.attr("height",S.height-y.height/2),p.attr("width",S.width)),Mo(f,{height:S.height+"px",width:S.width+"px"}),Mo(p,{fill:"url(#linear-gradient)"}),f.attr("height",S.height),f.attr("width",S.width),e.measurement({gradientDimensions:S}),e._legendGradientSvg=f}(this,t),t.selectAll("div").style("float","left"),e.mapActionsAndBehaviour(),e.createSelectionSet(this.data().map(function(e){return e.id})),t}},{key:"getCriteriaFromData",value:function getCriteriaFromData(e){return[[this.fieldName()],[e.value]]}}],[{key:"create",value:function create(e){return new GradientLegend(e)}},{key:"type",value:function type(){return"gradient"}}]),GradientLegend}(),xy=function(){function defineProperties(e,t){for(var n=0;na[a.length-1]&&(c.upper=[u.bounds.upper+" "+a[a.length-1]])):t=Zp(i,a),t=(t=[].concat(step_legend_toConsumableArray(new Set(t))).sort(function(e,t){return e-t})).map(function(n,i){var a,u=null;return i0&&void 0!==arguments[0]?arguments[0]:{},t=this._registrableComponents,n=na(na({},function defaultPolicy(e){var t=e.map(function(e){return e.alias()});return{behaviours:{"*":function _(e){var n=e.sourceCanvas;return!n||-1!==t.indexOf(n)}}}}(t)),e);return t.forEach(function(e){e.firebolt().crossInteractionPolicy(n)}),this}}]),ActionModel}()),Ny={classPrefix:"muze",interaction:{sideEffect:"individual"},legend:{position:"right",color:{show:!0,padding:1,margin:3,border:1,height:20,width:20},shape:{show:!0,padding:1,margin:3,border:1,height:20,width:20},size:{show:!0,padding:1,margin:3,border:1,height:20,width:20}},showHeaders:!1,minWidth:100,minHeight:100,border:{style:"solid",color:"#d6d6d6",width:2,collapse:!0,spacing:0},autoGroupBy:{disabled:!1}},jy={data:{value:null,meta:{typeCheck:function typeCheck(e){return e instanceof ar.a}}},width:{value:0,meta:{sanitization:Qi,typeCheck:Number.isInteger}},height:{value:0,meta:{sanitization:Qi,typeCheck:Number.isInteger}},minUnitWidth:{value:50,meta:{sanitization:Qi,typeCheck:Number.isInteger}},minUnitHeight:{value:50,meta:{sanitization:Qi,typeCheck:Number.isInteger}},config:{value:null,meta:{typeCheck:"constructor",typeExpected:"Object",sanitization:function sanitization(e,t){var n=na({},t),r=na(n,Ny);return na(r,e)}}}},Iy="width",Dy="height",Ly="top",Ry="left",By="right",zy="bottom",Hy="center",Vy="rowLeft",Uy="rowRight",Wy="colBottom",qy="colTop",Gy="rowSpan",Yy="colSpan",Xy="rowRoot",Ky="columnRoot",$y=function(){function defineProperties(e,t){for(var n=0;n1)return e;var f=o[t-1];if(f&&f.valueOf()===e.valueOf()){var h=n[r-1];return h?h[t].valueOf()===h[t-1].valueOf()?null:e:null}return e}return e},ag=function calcRowSpan(e,t,n,r){var i=1;if(!e||"string"!=typeof e.valueOf())return 1;for(var a=!1;!a;)n[r+i]&&null===n[r+i][t]?i+=1:a=!0;return i},og=function calcColSpan(e,t,n,r){var i=1;if(!e||"string"!=typeof e.valueOf())return 1;for(var a=!1;!a;)null===n[r][t+i]?i+=1:a=!0;return i},ug=function mask(e,t){return e.map(function(n,r){if(t===Vy||t===Uy){for(var i=n.map(function(n,i){return ig(n,i,e,r,t)}),a=[],o=n.length-i.length,u=0;u1&&r.setAvailableSpace(0,r.availHeight()),Ao(this).style("height",r.availHeight()+"px"),n}),l.each(function(e){e.placeholder&&e.placeholder.render(this)}).exit().each(function(e){e.placeholder&&e.placeholder.remove()}),applyBorders(l,r.border,n,a)})}function utils_defineProperty(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function utils_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t0?e[0]:e[1];return n?(r=e[0].length>0?[].concat(utils_toConsumableArray(e[0])):[],r=e[1].length>0?[].concat(utils_toConsumableArray(r),utils_toConsumableArray(e[1])):r):r=r.map(function(t,n){var r=[];return e[0].length>0&&(r=[].concat(utils_toConsumableArray(e[0][n]))),e[1].length>0&&(r=[].concat(utils_toConsumableArray(r),utils_toConsumableArray(e[1][n]))),r}),r},fg=function computeLogicalSpace(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments[1],n=arguments[2],r=t.isTransposed,i=void 0!==r&&r,a=t.unitMeasures,o=function getMeasureInfo(e){return e?{firstMeasure:Dy,secondMeasure:Iy}:{firstMeasure:Iy,secondMeasure:Dy}}(i),u=o.firstMeasure,c=o.secondMeasure,s=e.values,l=function getMinMeasures(e,t){return e?{height:0,width:t.width}:{height:t.height,width:0}}(i,a);if(s[0].key){var f,h=(utils_defineProperty(f={},u,0),utils_defineProperty(f,c,0),f);return s.forEach(function(e){var r=computeLogicalSpace(e,t,n);h[u]=Math.max(h[u],r[u],l[u]),h[c]+=+r[c]}),e.space=h,h}return function getLogicalSpace(e,t,n){var r,i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:[],a=t.firstMeasure,o=t.secondMeasure,u=0,c=0;return e.values.forEach(function(t){var r,s=0,l=0;t.forEach(function(e,t){e.logicalSpace(null);var r=e.getLogicalSpace();l=Math.max(l,+r[o],n[o]),i[t]=Math.max(i[t]||0,r[a]),s+=+i[t]}),c+=l,u=Math.max(u,s),e.space=(utils_defineProperty(r={},o,Math.ceil(c)),utils_defineProperty(r,a,Math.ceil(u)),r)}),utils_defineProperty(r={},o,c),utils_defineProperty(r,a,u),r}(e,{firstMeasure:u,secondMeasure:c},l,n)},hg=function extraCellsRemover(e,t,n){return e.slice(t,-n)},dg={config:{sanitization:function sanitization(e,t){return na(e._config||{},t)}},maxMeasures:{},availableSpace:{},logicalSpace:{}},pg={distribution:[],classPrefix:"muze",isDistributionEqual:!0,unitMeasures:{height:100,width:100,border:1},isTransposed:!1,facet:"primary",extraCellLengths:[]},yg=function(){function defineProperties(e,t){for(var n=0;n1&&void 0!==arguments[1]?arguments[1]:{};!function visual_matrix_classCallCheck(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,VisualMatrix),this._lastLevelKey=0,this._primaryMatrix=e[0]||[],this._secondaryMatrix=e[1]||[],this._maxMeasures=[],this._availableSpace={},Ji(this,dg);var n=Object.assign({},this.constructor.defaultConfig());this.config(na(n,t)),this._breakPointer=this.config().isTransposed?e[0].length:e[0].length>0?e[0][0].length:0,this._layoutMatrix=lg([e[0]||[],e[1]||[]],this.config()),this._tree={key:this.config().isTransposed?Ky:Xy,values:this.createTree()},this._logicalSpace=this.setLogicalSpace()}return yg(VisualMatrix,[{key:"primaryMatrix",value:function primaryMatrix(){return arguments.length?this:this._primaryMatrix}},{key:"secondaryMatrix",value:function secondaryMatrix(){return arguments.length?this:this._secondaryMatrix}},{key:"tree",value:function tree(){return arguments.length?this:this._tree}},{key:"createTree",value:function createTree(){var e=function createTree(e){var t={},n=0,r="primary",i=cg(),a=[],o=e._layoutMatrix,u=e.primaryMatrix(),c=e.secondaryMatrix(),s=e.config(),l=s.isTransposed,f=s.breakPage;if(l){if(r=0===u.length?"primary":0===c.length?"secondary":u.length>=c.length?"primary":"secondary",u.length>0){for(var h=0;h0){for(var d=u.length,p=c.length-1;p>0;p--)a.push(p+d);a.push(d),"primary"===r&&(n=d)}var y;a.forEach(function(e){var t=-1;return i.key(function(n){return t++,n[e].valueOf()+"-"+sg(t,f)})}),y=o[0].map(function(e,t){return o.map(function(e){return e[t]})}),t=i.entries(y)}else{if(r=0===u.length?"primary":0===c.length?"secondary":u.length>=c.length?"primary":"secondary",u.length>0){for(var g=0;g0){for(var v=u.length>0?u[0].length:0,m=c[0].length-1;m>0;m--)a.push(m+v);a.push(v),"primary"===r&&(n=v)}else n=u.length>0?u[0].length-1:0;a.forEach(function(e){var t=-1;return i.key(function(n){return t++,n[e].valueOf()+"-"+sg(t,f)})}),t=i.entries(o)}return{tree:t,lastLevelKey:n}}(this),t=e.tree,n=e.lastLevelKey;return this._lastLevelKey=n,t}},{key:"setLogicalSpace",value:function setLogicalSpace(){var e=this.config().isTransposed,t=this.tree();return function createMatrixEachLevel(e,t){if(e.values[0].key){var n=[];return e.values.forEach(function(e){t?createMatrixEachLevel(e,t).forEach(function(e,t){var r;n[t]=n[t]||[],(r=n[t]).push.apply(r,utils_toConsumableArray(e))}):n.push.apply(n,utils_toConsumableArray(createMatrixEachLevel(e,t)))}),e.matrix=n,n}return e.matrix=t?e.values[0].map(function(t,n){return e.values.map(function(e){return e[n]})}):e.values,e.matrix}(t,e),fg(t,this.config(),this.maxMeasures())}},{key:"getLogicalSpace",value:function getLogicalSpace(){return this.logicalSpace()}},{key:"setAvailableSpace",value:function setAvailableSpace(e,t){this.availableSpace({width:e,height:t});var n=this.tree(),r=this.populateMaxMeasures(Dy,n),i=this.populateMaxMeasures(Iy,n),a=this.calculateDepth(i,r);return this.viewableMatrix=this.createViewPortMatrix(a),this.viewableMeasures=this.redistribute(this.viewableMatrix,e,t),this}},{key:"populateMaxMeasures",value:function populateMaxMeasures(e,t){var n=this,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:[];if(i[r]=Math.max(i[r]||0,t.space[e]),t.values){var a=r+1;t.values.forEach(function(t){t.space&&(i=n.populateMaxMeasures(e,t,a,i))})}return i}},{key:"calculateDepth",value:function calculateDepth(e,t){var n=void 0,r=void 0,i=this.availableSpace(),a=i.height,o=i.width;for(n=0;n0&&void 0!==arguments[0]?arguments[0]:[],t=arguments[1],n=arguments[2],r=arguments[3],i=r._breakPointer,a=r.config().isTransposed,o=n.tree,u=n.layoutMatrix;if(0===t){var c=function breakMatrix(e,t,n){var r=[],i=[];return t?e.forEach(function(e,t){t>=n?i.push(e):r.push(e)}):e.forEach(function(e,t){e.forEach(function(e,a){a>=n?(i[t]=i[t]||[],i[t].push(e)):(r[t]=r[t]||[],r[t].push(e))})}),[r,i]}(o.matrix,a,i);return e.push({matrix:o.matrix,primaryMatrix:c[0],secondaryMatrix:c[1],space:o.space}),e}var s=t-1;return o.values.forEach(function(t){createMatrixInstances(e,s,{tree:t,layoutMatrix:u},r)}),e}(t,e,this.removeExtraCells(),this),t}},{key:"redistributeRowWise",value:function redistributeRowWise(e){var t,n,r=[],i=this.maxMeasures(),a=this.config(),o=a.isDistributionEqual,u=a.distribution,c=a.isTransposed,s=a.gutter,l=e.matrix,f=e.width,h=e.height,d=e.maxHeights,p=e.maxWidths;n=function spaceTakenByColumn(e,t){var n=0,r=0;return e.forEach(function(e){var i=e[t].getLogicalSpace();r=Math.max(r,i.width),n+=i.height}),{width:r,height:n}}(l,this._lastLevelKey).height;var y=i.reduce(function(e,t){return e+=t});return r=y>0?i.map(function(e){return e+e/y*(f-y)}):i.map(function(){return 0}),t=function getDistributedHeight(e){var t,n=0,r=0,i=e.isTransposed,a=e.distribution,o=e.availableHeight,u=e.height,c=e.isDistributionEqual,s=e.gutter,l=e.matrix,f=e.cIdx;a&&void 0!==a[0]&&(n=a.reduce(function(e,t){return e+=t})),s&&void 0!==s[0]&&(r=s.reduce(function(e,t){return e+=t})),t=o-Math.floor(o*r);var h=l.length;return l.map(function(r,o){var s=r[f].getLogicalSpace().height,l=s+s/u*(t-u);return i||(a.length>0&&h===a.length?l=t*a[o]/n:(c||0===e.height)&&(l=t/h)),Math.floor(l)})}({matrix:l,cIdx:this._lastLevelKey,height:n,availableHeight:h,isDistributionEqual:o,distribution:u,isTransposed:c,gutter:s}),p.push(r),d.push(t),{maxWidths:p,maxHeights:d}}},{key:"redistributeColumnWise",value:function redistributeColumnWise(e){var t=[],n=e.matrix,r=e.width,i=e.maxHeights,a=e.maxWidths,o=this.config().unitMeasures.border,u=function spaceTakenByRow(e){var t=0,n=0;return e.forEach(function(e){var r=e.getLogicalSpace();t=Math.max(t,r.height),n+=r.width}),{width:n,height:t}}(n[this._lastLevelKey]).width,c=function getDistributedWidth(e,t){var n=e.availableWidth,r=e.width,i=e.row,a=t.isDistributionEqual,o=t.isTransposed,u=t.distribution,c=0;return u&&u[0]&&(c=u.reduce(function(e,t){return e+=t})),i.map(function(e,t){var s=e.getLogicalSpace().width,l=s+s/r*(n-r);if(o)if(u.length>0)l=n*u[t]/c;else if(a||0===r){var f=i.length;l=n/f}return Math.floor(l)})}({row:n[this._lastLevelKey],width:u,availableWidth:r},this.config());n.forEach(function(e,n){return e.forEach(function(e,r){var i=e.getLogicalSpace().height;e.setAvailableSpace(c[r]-o,i),t[n]=Math.max(t[n]||0,e.getLogicalSpace().height)})}),i.length>0&&(t=t.map(function(e,t){return Math.max(e,i[0][t])})),i.push(t);for(var s=0;s=m&&(r[0][1][n[1]-m]=a[0],i[0][1]=(i[0][1]||0)+a[0]),n[1]===t._lastLevelKey&&(r[1][0][n[0]]=a[1],r[1][1][n[0]]=a[1])})}),{heights:g,widths:v,rowHeights:p,columnWidths:y}}}],[{key:"defaultConfig",value:function defaultConfig(){return pg}}]),VisualMatrix}(),vg=function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function sliceIterator(e,t){var n=[],r=!0,i=!1,a=void 0;try{for(var o,u=e[Symbol.iterator]();!(r=(o=u.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){i=!0,a=e}finally{try{!r&&u.return&&u.return()}finally{if(i)throw a}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}();function layout_helper_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t0&&(n=[].concat(layout_helper_toConsumableArray(w),layout_helper_toConsumableArray(P),layout_helper_toConsumableArray(O))),E.length>0&&(r=[].concat(layout_helper_toConsumableArray(C),layout_helper_toConsumableArray(E),layout_helper_toConsumableArray(F))),k.length>0&&k[0].length>0&&(i=k.map(function(e,t){return[].concat(layout_helper_toConsumableArray(w[t]),layout_helper_toConsumableArray(e),layout_helper_toConsumableArray(C[t]))})),T.length>0&&T[0].length>0&&(a=T.map(function(e,t){return[].concat(layout_helper_toConsumableArray(O[t]),layout_helper_toConsumableArray(e),layout_helper_toConsumableArray(F[t]))})),e.rowMatrix(new gg([n,r],{isDistributionEqual:s,distribution:h.rows,gutter:f.rows,unitMeasures:{width:v,height:g,border:d.width},breakPage:p.rows.map(function(e){return e+Math.max(w.length,C.length)}),extraCellLengths:[w.length,O.length]})),o=w.length>0?w[0].length:O.length>0?O[0].length:0,u=C.length>0?C[0].length:F.length>0?F[0].length:0,e.columnMatrix(new gg([i,a],{isDistributionEqual:l,distribution:h.columns,gutter:f.columns,isTransposed:!0,unitMeasures:{width:v,height:g,border:d.width},breakPage:p.columns,extraCellLengths:[o,u]})),e.centerMatrix(A),t}(this,e),this):function get(e,t,n){null===e&&(e=Function.prototype);var r=Object.getOwnPropertyDescriptor(e,t);if(void 0===r){var i=Object.getPrototypeOf(e);return null===i?void 0:get(i,t,n)}if("value"in r)return r.value;var a=r.get;return void 0!==a?a.call(n):void 0}(GridLayout.prototype.__proto__||Object.getPrototypeOf(GridLayout.prototype),"matrices",this).call(this,e)}},{key:"triggerReflow",value:function triggerReflow(){return function computeLayoutMeasurements(e){var t,n,r,i,a,o=e.rowMatrix(),u=e.columnMatrix(),c=e.centerMatrix(),s=e.measurement(),l=s.width,f=s.height,h=e.config().border,d=e.matrices(),p=d.top,y=d.bottom,g=function getMatrixMeasurement(e,t){return e?e.getLogicalSpace()[t]:0}(o,Iy),v=h.width,m=l-g-v;setMatrixMeasurement(u,Iy,m);var b=u.getViewableSpaces();bg(e,"column",b);var _=b[e.config().columnPointer],x=_.height.primary+_.height.secondary,w=f-x;setMatrixMeasurement(o,Dy,w);var k=o.getViewableSpaces();bg(e,"row",k);var C=(t=[]).concat.apply(t,computations_toConsumableArray(k.map(function(e){return e.rowHeights.primary}))),S=(n=[]).concat.apply(n,computations_toConsumableArray(k.map(function(e){return e.columnWidths.primary}))),P=(r=[]).concat.apply(r,computations_toConsumableArray(k.map(function(e){return e.columnWidths.secondary}))),A=u.getViewableSpaces(),E=(i=[]).concat.apply(i,computations_toConsumableArray(A.map(function(e){return e.columnWidths.primary}))),M=A[0].rowHeights.primary,O=(a=[]).concat.apply(a,computations_toConsumableArray(A.map(function(e){return e.rowHeights.secondary})));c.forEach(function(e,t){e.forEach(function(e,n){e.setAvailableSpace(E[n]-v,C[t]-v)})}),mg(p[0],S,M),mg(p[2],P,M),mg(y[0],S,O),mg(y[2],P,O)}(this),this.setViewInformation(),this}},{key:"gotoPage",value:function gotoPage(e,t){var n=e.toLowerCase(),r=this.getViewInformation().viewMatricesInfo[n+"Pages"],i=Math.min(Math.max(1,t),r);return this.config(function layout_defineProperty(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}({},n+"Pointer",i-1)),this.setViewInformation(),this.renderGrid(),this}},{key:"pages",value:function pages(e){var t=this.getViewInformation().viewMatricesInfo,n=e.toLowerCase();return{totalPages:t[n+"Pages"],currentPage:this.config()[n+"Pointer"]+1}}},{key:"setViewInformation",value:function setViewInformation(){var e=this.config(),t=e.rowPointer,n=e.columnPointer,r=e.border,i=function getViewMatrices(e,t,n){for(var r=e.rowMatrix(),i=e.columnMatrix(),a=e.centerMatrix(),o=e.matrices(),u=r.getViewableData(),c=i.getViewableData(),s={row:0,column:0},l=t-1;l>=0;l--){var f=Math.max(u[l].primaryMatrix.length,u[l].secondaryMatrix.length);s.row+=f}for(var h=n-1;h>=0;h--){var d=c[h],p=d.primaryMatrix,y=d.secondaryMatrix,g=Math.max(p[0]?p[0].length:0,y[0]?y[0].length:0);s.column+=g}o.top[1]=c[n].primaryMatrix,o.bottom[1]=c[n].secondaryMatrix,o.center[0]=u[t].primaryMatrix,o.center[2]=u[t].secondaryMatrix;var v=Math.max(o.center[0].length,o.center[2].length),m=Math.max(o.top[1][0]?o.top[1][0].length:0,o.bottom[1][0]?o.bottom[1][0].length:0);return o.center[1]=a.slice(s.row,s.row+v).map(function(e){return e.slice(s.column,s.column+m)}),{matrices:o,rowPages:u.length,columnPages:c.length}}(this,t,n),a=function getViewMeasurements(e){var t=e.rowMatrix(),n=e.columnMatrix(),r=e.measurement(),i=r.width,a=r.height,o=e.config(),u=o.columnPointer,c=o.rowPointer,s=t.getViewableSpaces()[c].width,l=s.primary,f=s.secondary,h=n.getViewableSpaces()[u].height,d=h.primary,p=h.secondary;return{viewWidth:[l,i-(l+f),f],viewHeight:[d,a-(d+p),p]}}(this);return a.border=r,this.viewInfo={viewMatricesInfo:i,layoutDimensions:a},this}},{key:"getViewInformation",value:function getViewInformation(){return this.viewInfo}},{key:"renderGrid",value:function renderGrid(e){if(this.mountPoint(e),!this.mountPoint())return this;var t=this.getViewInformation(),n=t.viewMatricesInfo,r=t.layoutDimensions;return function renderMatrices(e,t,n){var r=t.top,i=t.center,a=t.bottom,o=e.config().classPrefix,u=e.measurement().width,c=e.mountPoint();Eo(c,"div",[{type:Ly,matrix:r},{type:Hy,matrix:i},{type:zy,matrix:a}],o+"-grid-layout-row").each(function(e,t){var r=Ao(this);r.classed(o+"-grid-layout-row-"+t,!0),renderMatrix(e.matrix,r,e.type,n,o)}).style(Iy,Math.ceil(u)+"px")}(this,n.matrices,r),this}}],[{key:"defaultMeasurement",value:function defaultMeasurement(){return ng}},{key:"defaultConfig",value:function defaultConfig(){return tg}},{key:"create",value:function create(){return new GridLayout(null,null,this.defaultMeasurement(),this.defaultConfig())}}]),GridLayout}(),wg=function(){function defineProperties(e,t){for(var n=0;n0?o:i,v),P=Math.max(u>0?u:a,g),A=function createHeaders(e,t,n){var r=0,i={};return t>=200&&n>=200&&["title","subtitle"].forEach(function(t){var n=e[t](),a=function resolveTitleSubTitleContent(e){return"function"!=typeof e||e._sanitize?function escapeHTML(e){var t={"&":"&","<":"<",">":">",'"':""","'":"'","/":"/"};return(""+e).replace(/[&<>"'/]/g,function(e){return t[e]})}(e()):e()}(n[0]);if(a.length){var o=n[1];o.width=e.width(),o.content=a;var u=lv(o,t,e.dependencies().smartlabel,e[t+"Cell"]),c=u.height,s=u.cell;i[t+"Cell"]=s,e._composition[t]=s,r+=c+o.padding}}),{headerHeight:r,headers:i}}(e,S,P),E=A.headers,M=A.headerHeight,O=function createLegend(e,t,n,r){var i={height:n,width:r,headerHeight:t},a=e.config().legend,o=a.show,u=a.position;a.classPrefix=e.config().classPrefix;var c="left"===u||"right"===u?"vertical":"horizontal";return a.show=o?"vertical"===c&&r>200||"horizontal"===c&&n>200:o,a.align=c,fv(a,e,i,e.legends||[])}(e,M,S,P);e._composition.legend={},O.forEach(function(t){e._composition.legend[t.scaleType]=t.legend});var T=function getLegendSpace(e,t,n,r){var i={width:0,height:0};return e.map(function(e){return e.legend.measurement()}).forEach(function(e){var a,o;o=Math.min(e.width,e.maxWidth),a=Math.min(e.height,e.maxHeight),"horizontal"===t.align?i.width+o>r?(i.width=r,i.height+=a):(i.width+=o,i.height=Math.max(i.height,a)):i.height+a>n?(i.height=a,i.width+=o):(i.height+=a,i.width=Math.max(i.width,o))}),"horizontal"===t.align&&(i.width=r),i}(O,_,S,P),F="left"===k||"right"===k?T.width:0,N="top"===k||"bottom"===k?T.height:0,j={headers:E,legends:O,canvases:[e],rows:h,columns:d,values:p,cornerMatrices:c.cornerMatrices()},I={mountSpace:{height:i,width:a},headerHeight:M,legendSpace:T,canvasWidth:P,canvasHeight:S,width:P-F,height:S-M-N,minUnitHeight:e.minUnitHeight(),minUnitWidth:e.minUnitWidth()};return{layoutConfig:n=na(n,{classPrefix:m,showHeaders:b,border:na(c.metaData().border,e.config().border),layoutArrangement:C,legend:_,title:x,subtitle:w,isColumnSizeEqual:l,isRowSizeEqual:f}),components:j,measurement:I}},dv={position:"top",align:"left",padding:8},pv={position:"top",align:"left",padding:16};function canvas_local_options_defineProperty(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var yv=(canvas_local_options_defineProperty(ov={},"rows",{value:null,meta:{typeCheck:"constructor",typeExpected:"Array"}}),canvas_local_options_defineProperty(ov,"columns",{value:null,meta:{typeCheck:"constructor",typeExpected:"Array"}}),canvas_local_options_defineProperty(ov,"color",{value:null,meta:{typeCheck:"constructor",typeExpected:"Object",sanitization:function sanitization(e){return"string"==typeof e?{field:e}:e}}}),canvas_local_options_defineProperty(ov,"shape",{value:null,meta:{typeCheck:"constructor",typeExpected:"Object",sanitization:function sanitization(e){return"string"==typeof e?{field:e}:e}}}),canvas_local_options_defineProperty(ov,"size",{value:null,meta:{typeCheck:"constructor",typeExpected:"Object",sanitization:function sanitization(e){return"string"==typeof e?{field:e}:e}}}),canvas_local_options_defineProperty(ov,"detail",{value:[],meta:{typeCheck:"constructor",typeExpected:"Array"}}),canvas_local_options_defineProperty(ov,"layers",{value:null,meta:{typeCheck:"constructor",typeExpected:"Array"}}),canvas_local_options_defineProperty(ov,"transform",{value:null,meta:{typeCheck:"constructor",typeExpected:"Object"}}),canvas_local_options_defineProperty(ov,"mount",{value:null,meta:{sanitization:function sanitization(e){return"string"==typeof e?Ao(e).node():e}}}),ov),gv=(canvas_local_options_defineProperty(uv={},"title",{value:[null,null],meta:{typeCheck:["constructor","constructor"],typeExpected:["Function","Object"],spreadParams:!0,sanitization:[function(e){if("string"==typeof e){var n=function t(){return e};return n._sanitized=!0,n}return e},function(e){var t=na({},dv);return na(t,e)}]}}),canvas_local_options_defineProperty(uv,"subtitle",{value:[null,null],meta:{typeCheck:["constructor","constructor"],typeExpected:["Function","Object"],spreadParams:!0,sanitization:[function(e){if("string"==typeof e){var t=function sub(){return e};return t._sanitized=!0,t}return e},function(e){var t=na({},pv);return na(t,e)}]}}),uv),vv=function renderHeader(e,t,n,r){var i=r[n+"Cell"],a=e[""+n],o=a.position,u=a.align,c=a.padding,s=t.selectAll("."+e.classPrefix+"-inner-container").data([n]);s.exit().remove();var l=s.enter().append("div").merge(s);l.classed(e.classPrefix+"-inner-container",!0),i&&i.render(l.node()),l.selectAll("div").classed(e.classPrefix+"-inner-content",!0),l.style("width","100%"),a&&i&&l.style("float","left").style("text-align",u).style("padding-"+("top"===o?"bottom":"top"),c+"px")},mv=function renderComponents(e,t,n,r){var i=e.mount(),a=t.headers,o=t.legends,u=n.classPrefix,c=function getSkeletons(e,t,n){var r=t.layoutArrangement,i=t.classPrefix,a=r.headers,o=r.legends,u=n.canvasWidth,c=n.canvasHeight,s=Ao(e),l={},f=Eo(s,"div",[1],i+"-viz").style("width",u+"px").style("height",c+"px").selectAll("."+i+"-container").data(a);f.exit().remove();var h=f.enter().append("div").merge(f).attr("class",i+"-container").style("width",u+"px").style("padding","nullpx").style("margin",null).each(function(e){l[e]=Ao(this).classed(i+"-"+e+"-container",!0)}).selectAll("."+i+"-inner-container").data(function(e){return"group"===e?o:[]});return h.exit().remove(),h.enter().append("div").merge(h).attr("class",i+"-inner-container").style("width","auto").style("height","auto").each(function(e){l[e]=Ao(this).classed(i+"-"+e+"-container",!0)}),l}(i,n,r),s=c.title,l=c.legend,f=c.subtitle,h=c.layout,d=function prepareGridContainer(e,t,n,r){if(e){var i=t.height,a=t.width,o=Ao(e).selectAll("."+n+"-inner-content").data(["layout"],function(e){return e});o.exit().remove();var u=o.enter().append("div").merge(o).attr("class",n+"-inner-content").classed(n+"-grid-layout",!0).attr("id",n+"-grid-layout-"+r).style("height",i+"px").style("padding",null).style("width",Math.ceil(a)+"px"),c=u.selectAll("."+n+"-layout-grid-container").data(["layout2"]);c.exit().remove();var s=c.enter().append("div").merge(c);return s.classed(n+"-layout-grid-container",!0).attr("id",n+"-layout-grid-container-"+r).style("height",i+"px").style("width",Math.ceil(a)+"px"),{mount:s,container:u}}}(h.node(),r,u,e.alias()).mount,p=e.layout().getViewInformation().layoutDimensions.viewWidth[0];r.padding=p,function setLabelRotationForAxes(e){var t=0,n=e.xAxes()||[];!function(){for(var e=0;ev?(g++,m=0,v=y):g<0&&g++,i[g]=i[g]||[],v-=Math.min(t.measurement().height,v),m=Math.max(Math.min(t.measurement().width,t.measurement().maxWidth),m),i[g].push({legend:t,legendHeight:y,legendWidth:m})});var b=Eo(h,["div"],i,l+"-legend-section").each(function(e,t){return Ao(void 0).classed(l+"-legend-section-"+t,!0)}).classed(l+"-legend-vertical-section",!0).style("width",function(e){return e[0].legendWidth+"px"});Eo(b,["div"],function(e){return e},l+"-legend-components",{},function(e){return e.legend.id()}).each(function(e){e.legend.mount(this)}).style("width",function(e){return e.legendWidth+"px"})}else{var _=Eo(h,"div",[1],l+"-legend-section").classed(l+"-legend-horizontal-section",!0).classed(l+"-legend-section-0",!0).style("width",p+"px");Eo(_,"div",n,l+"-legend-components",{},function(e){return e.legend.id()}).each(function(e){e.legend.mount(this)}).style("width",function(e){return e.legend.measurement().width+"px"})}}(n,l,o,r),function shiftHeaders(e,t,n,r){var i=e.classPrefix,a=e.title,o=e.subtitle,u=e.legend,c=n.legendSpace;t+="left"===u.position?c.width:0,a&&Ao(r).select("."+i+"-title-container").style("width","left"===a.align?"calc(100% - "+t+"px":"100%").style("margin-left","left"===a.align?t+"px":0),o&&Ao(r).select("."+i+"-subtitle-container").style("width","left"===o.align?"calc(100% - "+t+"px":"100%").style("margin-left","left"===o.align?t+"px":0),Ao(r).select("."+i+"-legend-horizontal-section").style("margin-left",t+"px").style("width",c.width-t+"px").selectAll("."+i+"-legend-body, ."+i+"-legend-title").style("max-width",c.width-t+"px"),Ao(r).select("."+i+"-legend-vertical-section").style("margin-left",null).selectAll("."+i+"-legend-body, ."+i+"-legend-title").style("max-width",null)}(n,p,r,i)}),e.composition().visualGroup.matrixInstance().value.each(function(e){e.valueOf().parentContainer(h.node())})};function canvas_helper_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t",keywords:["datamodel","data","relational","algebra","model","muze","fusioncharts","table","tabular","operation"],repository:{type:"git",url:"https://github.com/chartshq/datamodel.git"},contributors:[{name:"Akash Goswami",email:"akash@charts.com"},{name:"Subhash Haldar",email:"subhash@charts.com"},{name:"Rousan Ali",email:"rousan@charts.com",url:"https://rousan.io"},{name:"Ujjal Kumar Dutta",email:"ujjal@charts.com"}],dependencies:{"d3-dsv":"^1.0.8"},devDependencies:{"babel-cli":"6.26.0","babel-core":"^6.26.3","babel-eslint":"6.1.2","babel-loader":"^7.1.4","babel-plugin-transform-runtime":"^6.23.0","babel-preset-env":"^1.7.0","babel-preset-es2015":"^6.24.1","babel-preset-flow":"^6.23.0",chai:"3.5.0","cross-env":"^5.0.5",eslint:"3.19.0","eslint-config-airbnb":"15.1.0","eslint-plugin-import":"2.7.0","eslint-plugin-jsx-a11y":"5.1.1","eslint-plugin-react":"7.3.0","istanbul-instrumenter-loader":"^3.0.0",jsdoc:"3.5.5",json2yaml:"^1.1.0",karma:"1.7.1","karma-chai":"0.1.0","karma-chrome-launcher":"2.1.1","karma-coverage-istanbul-reporter":"^1.3.0","karma-mocha":"1.3.0","karma-spec-reporter":"0.0.31","karma-webpack":"2.0.3",marked:"^0.5.0",mocha:"3.4.2","mocha-webpack":"0.7.0","transform-runtime":"0.0.0",webpack:"^4.12.0","webpack-cli":"^3.0.7","webpack-dev-server":"^3.1.4"},scripts:{test:"npm run lint && npm run ut",ut:"karma start karma.conf.js",utd:"karma start --single-run false --browsers Chrome karma.conf.js ",build:"webpack --mode production",start:"webpack-dev-server --config webpack.config.dev.js --mode development --open",lint:"eslint ./src","lint-errors":"eslint --quiet ./src",docs:"rm -rf yaml && mkdir yaml && jsdoc -c jsdoc.conf.json"}}},function(e,t,n){var r=n(2);e.exports=r.default?r.default:r},function(n,c,f){"use strict";f.r(c);var p={};f.r(p),f.d(p,"DataFormat",function(){return b}),f.d(p,"DimensionSubtype",function(){return _}),f.d(p,"MeasureSubtype",function(){return C}),f.d(p,"FieldType",function(){return P}),f.d(p,"FilteringMode",function(){return A});var y={};f.r(y),f.d(y,"DSVArr",function(){return Je}),f.d(y,"DSVStr",function(){return lt}),f.d(y,"FlatJSON",function(){return ft}),f.d(y,"Auto",function(){return ht});var g={};f.r(g),f.d(g,"sum",function(){return Et}),f.d(g,"avg",function(){return Mt}),f.d(g,"min",function(){return Ot}),f.d(g,"max",function(){return Tt}),f.d(g,"first",function(){return Ft}),f.d(g,"last",function(){return Nt}),f.d(g,"count",function(){return jt}),f.d(g,"sd",function(){return It});var b={FLAT_JSON:"FlatJSON",DSV_STR:"DSVStr",DSV_ARR:"DSVArr",AUTO:"Auto"},_={CATEGORICAL:"categorical",TEMPORAL:"temporal",GEO:"geo"},C={DISCRETE:"discrete"},P={MEASURE:"measure",DIMENSION:"dimension"},A={NORMAL:"normal",INVERSE:"inverse",ALL:"all"};function l(e,t){e.length>0&&e.split(",").forEach(function(e){var n=e.split("-"),r=+n[0],i=+(n[1]||n[0]);if(i>=r)for(var a=r;a<=i;a+=1)t(a)})}var O=function(){function e(e,t){for(var n=0;n=0;)o=e[a+1],-1!==r.indexOf(o)&&i.push({index:a,token:o});return i},m.formatAs=function(e,t){var n,r=h(e),i=m.findTokens(t),a=m.getTokenDefinitions(),o=String(t),u=m.TOKEN_PREFIX,c=void 0,s=void 0,l=void 0;for(l=0,n=i.length;l=0;h--)(s=a[h].index)+1!==f.length-1?(void 0===u&&(u=f.length),l=f.substring(s+2,u),f=f.substring(0,s+2)+RegExp.escape(l)+f.substring(u,f.length),u=s):u=s;for(h=0;h1){r=Math.abs(n[1]-n[0]);for(var i=2,a=n.length;i3&&void 0!==arguments[3]&&arguments[3],i=arguments.length>4&&void 0!==arguments[4]?arguments[4]:ye.CROSS,a=[],o=[],u=n||K,c=e.getFieldspace(),s=t.getFieldspace(),f=c.name,h=s.name,d=c.name+"."+s.name,p=L(c,s);if(f===h)throw new Error("DataModels must have different alias names");return c.fields.forEach(function(e){var t=E({},e.schema);-1===p.indexOf(t.name)||r||(t.name=c.name+"."+t.name),a.push(t)}),s.fields.forEach(function(e){var t=E({},e.schema);-1!==p.indexOf(t.name)?r||(t.name=s.name+"."+t.name,a.push(t)):a.push(t)}),l(e._rowDiffset,function(e){var n=!1,d=void 0;l(t._rowDiffset,function(t){var l=[],y={};y[f]={},y[h]={},c.fields.forEach(function(t){l.push(t.data[e]),y[f][t.name]=t.data[e]}),s.fields.forEach(function(e){-1!==p.indexOf(e.schema.name)&&r||l.push(e.data[t]),y[h][e.name]=e.data[t]});var g=Ke(y[f]),v=Ke(y[h]);if(u(g,v)){var m={};l.forEach(function(e,t){m[a[t].name]=e}),n&&ye.CROSS!==i?o[d]=m:(o.push(m),n=!0,d=e)}else if((i===ye.LEFTOUTER||i===ye.RIGHTOUTER)&&!n){var b={},_=c.fields.length-1;l.forEach(function(e,t){b[a[t].name]=t<=_?e:null}),n=!0,d=e,o.push(b)}})}),new At(o,a,{name:d})}function z(e,t){var n=""+e,r=""+t;return nr?1:0}function X(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:z;return e.length>1&&function e(t,n,r,i){if(r===n)return t;var a=n+Math.floor((r-n)/2);return e(t,n,a,i),e(t,a+1,r,i),function(e,t,n,r,i){for(var a=e,o=[],u=t;u<=r;u+=1)o[u]=a[u];for(var c=t,s=n+1,l=t;l<=r;l+=1)c>n?(a[l]=o[s],s+=1):s>r?(a[l]=o[c],c+=1):i(o[c],o[s])<=0?(a[l]=o[c],c+=1):(a[l]=o[s],s+=1)}(t,n,a,r,i),t}(e,0,e.length-1,t),e}function Q(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);to?"desc"===t?-1:1:0}}return i}function Z(e,t){var n=new Map,r=[];return e.forEach(function(e){var i=e[t];n.has(i)?r[n.get(i)][1].push(e):(r.push([i,[e]]),n.set(i,r.length-1))}),r}function ee(e,t,n){var r={label:e[0]};return t.reduce(function(t,r,i){return t[r]=e[1].map(function(e){return e[n[i].index]}),t},r),r}function ne(e,t){var n={},r=[],i=[],a=[],o=e.getFieldspace(),u=t.getFieldspace(),c=o.fieldsObj(),s=u.fieldsObj(),f=o.name+" union "+u.name;if(!M(e._colIdentifier.split(",").sort(),t._colIdentifier.split(",").sort()))return null;function d(e,t,r){l(e._rowDiffset,function(e){var o={},u="";i.forEach(function(n){var r=t[n].data[e];u+="-"+r,o[n]=r}),n[u]||(r&&a.push(o),n[u]=!0)})}return e._colIdentifier.split(",").forEach(function(e){var t=c[e];r.push(E({},t.schema)),i.push(t.schema.name)}),d(t,s,!1),d(e,c,!0),new At(a,r,{name:f})}function re(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);tn&&(n=e)}),[t,n]}(this.data)}},{key:"parse",value:function value(e){return e=parseFloat(e,10),Number.isNaN(e)?null:e}},{key:"unit",value:function value(){return this.fieldUnit}},{key:"scale",value:function value(){return this.fieldScale}},{key:"numberFormat",value:function value(){var e=this.fieldNumberformat;return function(t){return e(t)}}},{key:"defAggFn",value:function value(){return this.fieldDefAggFn}}]),t}(),Ee=function(){function e(e,t){for(var n=0;n=a?c=!0:(r=e.charCodeAt(o++))===at?l=!0:r===ot&&(l=!0,e.charCodeAt(o)===at&&++o),e.slice(i+1,t-1).replace(/""/g,'"')}for(;o2&&void 0!==arguments[2]?arguments[2]:{},i=arguments[3],a=void 0;t!==fe?(a={op:t,meta:r,criteria:i},e._derivation.push(a)):(a=[].concat(Ge(i)),e._derivation.length=0,(n=e._derivation).push.apply(n,Ge(a)))},yt=function ze(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=n.operation||"and",i=n.filterByMeasure||!1,a=[];a=t.length?t.map(function(e){return function(e){var t=e.getData(),n=t.schema,r=e.getFieldsConfig(),a=e.getFieldspace().fieldsObj(),o=t.data,u=Object.values(r).reduce(function(e,t){return e[t.def.name]=a[t.def.name].domain(),e},{});return function(e){return!!o.length&&o.some(function(t){return n.every(function(n){if(!(n.name in e))return!0;var a=e[n.name].valueOf();if(i&&n.type===P.MEASURE)return a>=u[n.name][0]&&a<=u[n.name][1];if(n.type!==P.DIMENSION)return!0;var o=r[n.name].index;return t[o]===e[n.name].valueOf()})})}}(e)}):[function(){return!1}];return"and"===r?e.clone(!1,!1).select(function(e){return a.every(function(t){return t(e)})},{saveChild:!1,mode:A.ALL}):e.clone(!1,!1).select(function(e){return a.some(function(t){return t(e)})},{mode:A.ALL,saveChild:!1})},gt=function Xe(e,t,n,r){var i=e.clone(r.saveChild),a=function(e,t,n,r){var i=[],a=-1,o=void 0,c=function u(e){return n(qe(t,e),e)};return r.mode===A.INVERSE&&(c=function u(e){return!n(qe(t,e))}),l(e,function(e){c(e)&&(-1!==a&&e===a+1?(o=i.length-1,i[o]=i[o].split("-")[0]+"-"+e):i.push(""+e),a=e)}),i.join(",")}(i._rowDiffset,i.getPartialFieldspace().fields,t,n);return i._rowDiffset=a,i.__calculateFieldspace().calculateFieldsConfig(),r.saveChild&&pt(i,ce,{config:n},t),i},vt=function Qe(e,t,n,r){var i=e.clone(n.saveChild),a=t;return n.mode===A.INVERSE&&(a=r.filter(function(e){return-1===t.indexOf(e)})),i._colIdentifier=a.join(","),i.__calculateFieldspace().calculateFieldsConfig(),n.saveChild&&pt(i,se,{projField:t,config:n,actualProjField:a},null),i},mt=function $e(e,t,n,r){r=Object.assign(Object.assign({},Ze),r);var i=y[r.dataFormat];if(!i||"function"!=typeof i)throw new Error("No converter function found for "+r.dataFormat+" format");var a=i(t,r),o=dt(a,2),u=o[0],c=o[1],s=Ue(c,n,u),l=Y.createNamespace(s,r.name);return e._partialFieldspace=l,e._rowDiffset=c.length&&c[0].length?"0-"+(c[0].length-1):"",e._colIdentifier=n.map(function(e){return e.name}).join(),e},bt=function Ze(e,t){for(var n=0;n2&&void 0!==arguments[2]?arguments[2]:{},i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},a=i.nonTraversingModel,o=i.excludeModels||[];t!==a&&((!o.length||-1===o.indexOf(t))&&t.handlePropagation(n,r),t._children.forEach(function(t){var a=_t(n,t),o=dt(a,2),u=o[0],c=o[1];e(t,[u,c],r,i)}))},wt=function nt(e,t,n,r){var i=void 0,a=void 0,o=n.propagationNameSpace,u=n.propagateToSource,c=n.sourceId,s=r.propagateInterpolatedValues,l=[];if(null===e&&!0!==r.persistent)l=[{criteria:[]}];else{var f,h=Object.values(o.mutableActions);!1!==u&&(h=h.filter(function(e){return e.config.sourceId!==c}));var d=h.filter(function(e){return(r.filterFn||function(){return!0})(e,r)}).map(function(e){return e.config.criteria}),p=[];if(!1!==u){var y=Object.values(o.mutableActions);y.forEach(function(e){var t=e.config;!1===t.applyOnSource&&t.action===r.action&&t.sourceId!==c&&(p.push(e.model),(i=y.filter(function(t){return t!==e}).map(function(e){return e.config.criteria})).length&&l.push({criteria:i,models:e.model,path:function e(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];return null!==t._parent&&(n.push(t),e(t._parent,n)),n}(e.model)}))})}i=(f=[]).concat.apply(f,[].concat(Ge(d),[e])).filter(function(e){return null!==e}),l.push({criteria:i,excludeModels:[].concat(p,Ge(r.excludeModels||[]))})}var g=t.model,v=Object.assign({sourceIdentifiers:e,propagationSourceId:c},r),m=t.groupByModel;s&&m&&(a=yt(m,i,{filterByMeasure:s}),xt(m,a,v)),l.forEach(function(e){var t=yt(g,e.criteria),n=e.path;if(n){var r=function(e,t){for(var n=0,r=t.length;n0&&void 0!==arguments[0])||arguments[0],t=void 0;if(!1===(!(arguments.length>1&&void 0!==arguments[1])||arguments[1])){var n=this.getData({getAllFields:!0}),r=n.data,i=n.schema,a=r.map(function(e){var t={};return i.forEach(function(n,r){t[n.name]=e[r]}),t});t=new this.constructor(a,i)}else t=new this.constructor(this);return e&&this._children.push(t),t}},{key:"project",value:function value(e,t){var n={mode:A.NORMAL,saveChild:!0};t=Object.assign({},n,t);var r=this.getFieldsConfig(),i=Object.keys(r),a=t.mode,o=e.reduce(function(e,t){return"RegExp"===t.constructor.name?e.push.apply(e,function(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t1&&void 0!==arguments[1]?arguments[1]:[];pt(this,fe,null,t),this._parent=e,e._children.push(this)}}]),e}(),St=function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function(e,t){var n=[],r=!0,i=!1,a=void 0;try{for(var o,u=e[Symbol.iterator]();!(r=(o=u.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){i=!0,a=e}finally{try{!r&&u.return&&u.return()}finally{if(i)throw a}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")},Pt=function(){function e(e,t){for(var n=0;n0,c=[];if(n.split(",").forEach(function(t){for(var n=0;n=0;u--)i=t[u][0],a=t[u][1],(o=bt(r,i))&&(S(a)?X(n,function(e,t){return a(e[o.index],t[o.index])}):j(a)?function(){var e=Z(n,o.index),t=a[a.length-1],i=a.slice(0,a.length-1),u=i.map(function(e){return bt(r,e)});e.forEach(function(e){e.push(ee(e,i,u))}),X(e,function(e,n){var r=e[2],i=n[2];return t(r,i)}),n.length=0,e.forEach(function(e){n.push.apply(n,Q(e[1]))})}():(a="desc"===String(a).toLowerCase()?"desc":"asc",X(n,$(o.type,a,o.index))));e.uids=[],n.forEach(function(t){e.uids.push(t.pop())})}(a,r),i.columnWise){var s=Array.apply(void 0,Q(Array(a.schema.length))).map(function(){return[]});a.data.forEach(function(e){e.forEach(function(e,t){s[t].push(e)})}),a.data=s}return a}.call(this,this.getPartialFieldspace().fields,this._rowDiffset,e.getAllFields?t.map(function(e){return e.name}).join():this._colIdentifier,e.sort,{columnWise:"column"===e.order,addUid:!!e.withUid});if(!e.formatter)return n;var r=e.formatter,i=n.data,a=n.schema,o=n.uids,u=a.map(function(e){return e.name}),c=Object.keys(r).reduce(function(e,t){var n=u.indexOf(t);return-1!==n&&e.push([n,r[t]]),e},[]);return"column"===e.order?c.forEach(function(e){var t=e[0],n=e[1];i[t].forEach(function(e,r){i[t][r]=n.call(void 0,e,o[r],a[t])})}):i.forEach(function(e,t){c.forEach(function(n){var r=n[0],i=n[1];e[r]=i.call(void 0,e[r],o[t],a[r])})}),n}},{key:"groupBy",value:function value(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{saveChild:!0},r=""+e.join(),i=function de(e,t,n,r){var i=function(e,t){var n=[],r=e.getPartialFieldspace(),i=r.getDimension(),a=r.getMeasure();return Object.entries(i).forEach(function(e){var r=Ce(e,1)[0];t&&t.length?-1!==t.indexOf(r)&&n.push(r):n.push(r)}),Object.entries(a).forEach(function(e){var r=Ce(e,1)[0];"discrete"===a[r].subType()&&(t&&t.length?-1!==t.indexOf(r)&&n.push(r):n.push(r))}),n}(e,t),a=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n={},r=t,i=e.getPartialFieldspace().getMeasure(),a=we.defaultReducer();return"function"==typeof t&&(a=t),Object.entries(i).forEach(function(e){var o=Ce(e,1)[0];"string"==typeof t[o]&&(r[o]=we.resolve(r[o])?we.resolve(r[o]):a),"function"!=typeof t[o]&&(r[o]=void 0),n[o]=r[o]||we.resolve(i[o].defAggFn())||a}),n}(e,n),o=e.getPartialFieldspace(),u=o.fieldsObj(),c=o.name,s=[],f=[],h=[],d={},p=[],y=void 0;Object.entries(u).forEach(function(e){var t=Ce(e,2),n=t[0],r=t[1];(-1!==i.indexOf(n)||a[n])&&(h.push(E({},r.schema)),"measure"===r.schema.type&&"discrete"!==r.schema.subtype?f.push(n):"dimension"!==r.schema.type&&"discrete"!==r.schema.subtype||s.push(n))});var g=0;return l(e._rowDiffset,function(e){var t="";s.forEach(function(n){t=t+"-"+u[n].data[e]}),void 0===d[t]?(d[t]=g,p.push({}),s.forEach(function(t){p[g][t]=u[t].data[e]}),f.forEach(function(t){p[g][t]=[u[t].data[e]]}),g+=1):f.forEach(function(n){p[d[t]][n].push(u[n].data[e])})}),p.forEach(function(e){var t=e;f.forEach(function(n){t[n]=a[n](e[n])})}),r?(r.__calculateFieldspace(),y=r):y=new Lt(p,h,{name:c}),y}.apply(void 0,[this,e,t]);return n.saveChild&&(this._children.push(i),pt(i,le,{fieldsArr:e,groupByString:r,defaultReducer:we.defaultReducer()},t)),i._parent=this,i}},{key:"sort",value:function value(e){var t=this.getData({order:"row",sort:e}),n=[t.schema.map(function(e){return e.name})].concat(t.data),r=new this.constructor(n,t.schema,{dataFormat:"DSVArr"});return r._sortingDetails=e,r}},{key:"addField",value:function value(e){var t=e.fieldName();this._colIdentifier+=","+t;var n=this._partialFieldspace;if(n.fieldsObj()[e.fieldName()]){var r=n.fields.findIndex(function(e){return e.name===t});r>=0&&(n.fields[r]=e)}else n.fields.push(e);return this.__calculateFieldspace().calculateFieldsConfig(),this}},{key:"calculateVariable",value:function value(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{saveChild:!0,replaceVar:!1},r=this.getFieldsConfig(),i=t.slice(0,t.length-1),a=t[t.length-1];if(r[e.name]&&!n.replaceVar)throw new Error(e.name+" field already exists in model.");var o=i.map(function(e){var t=r[e];if(!t)throw new Error(e+" is not a valid column name.");return t.index}),u=this.clone(),c=u.getFieldspace().fields,s=o.map(function(e){return c[e]}),f=[];l(u._rowDiffset,function(e){var t=s.map(function(t){return t.data[e]});f[e]=a.apply(void 0,function(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t1&&void 0!==arguments[1]?arguments[1]:{},n=arguments[2],r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},i=t.isMutableAction,a=t.sourceId,o=t.payload,u=function e(t){return t._parent?e(t._parent):t}(this),c=u._propagationNameSpace,s={groupByModel:function e(t){return t._parent&&t._derivation.find(function(e){return"group"!==e.op})?e(t._parent):t}(this),model:u};return n&&function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments[2],r=void 0,i=t.isMutableAction,a=t.criteria,o=t.action+"-"+t.sourceId;r=i?e.mutableActions:e.immutableActions,null===a?delete r[o]:r[o]={model:n,config:t}}(c,t,this),wt(e,s,{propagationNameSpace:c,sourceId:a},Object.assign({payload:o},t)),i&&function(e,t,n){var r=e.immutableActions;for(var i in r){var a=r[i].config,o=n.config.sourceId,u=!n.propConfig.filterImmutableAction||n.propConfig.filterImmutableAction(a,n.config);if(a.sourceId!==o&&u){var c=a.criteria;wt(c,t,{propagationNameSpace:e,propagateToSource:!1,sourceId:o},a)}}}(c,s,{config:t,propConfig:r}),this}},{key:"on",value:function value(e,t){switch(e){case"propagation":this._onPropagation.push(t)}return this}},{key:"unsubscribe",value:function value(e){switch(e){case"propagation":this._onPropagation=[]}return this}},{key:"handlePropagation",value:function value(e,t){var n=this;this._onPropagation.forEach(function(r){return r.call(n,e,t)})}},{key:"bin",value:function value(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=this.clone(),r=t.name||e+"_binned";if(this.getFieldsConfig()[r]||!this.getFieldsConfig()[e])throw new Error("Field "+e+" already exists.");var i=function I(e,t,n){var r=n.buckets,i=n.binCount,a=n.binSize,o=n.start,u=[],c=[],s=e.domain(),f=ue(s,2),h=f[0],d=f[1],p=d,y=[],g=void 0,v=void 0,m=void 0,b=void 0;if(l(t,function(t){u.push({data:e.data[t],index:t})}),!r){var _=((d+=1)-h)%(a=a||(d-h)/i);for(i||0===_||(d=d+a-_),g=h+a;g<=d;)y.push(g),g+=a;r={start:o=o||h,stops:y}}v=0===r.start?0:r.start||h,r.stops.forEach(function(e){u.filter(function(t){return t.data>=v&&t.data=r.stops[r.stops.length-1]}).forEach(function(e){c[e.index]=r.stops[r.stops.length-1]+"-"+p}),r.stops.unshift(r.start),b=new Set(r.stops),hr.stops[r.stops.length-1]&&b.add(p),b=[].concat(function(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t1&&void 0!==arguments[1]?arguments[1]:{saveChild:!0}).saveChild;return t.forEach(function(e){n=e(n),i.push.apply(i,function(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t1&&r.dispose(),n}},bin:function bin(){for(var e=arguments.length,t=Array(e),n=0;n2?(i=arguments.length<=0?void 0:arguments[0],r=arguments.length<=1?void 0:arguments[1],a=arguments.length<=2?void 0:arguments[2]):(i=null,r=arguments.length<=0?void 0:arguments[0],a=arguments.length<=1?void 0:arguments[1]),t=a(w),(e=n=new A(t.fn)).addDependencies.apply(e,P(t.dependencies)),this._addPropInModel(i,function(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}({},r,n)),this}},{key:"_addPropInModel",value:function value(e,t){return this._graph.createNodesFrom(t,e),this}},{key:"on",value:function value(e,t,n){var r,i=e instanceof Array?e:[e],a=this._graph.createElectricNodeOf(i,{type:"CurrFrame",fn:t});return n&&(r=this._graph.stopPropagation().setPropagationOverride("nextFrame")).resetNodeValue.apply(r,P(e)),a}},{key:"next",value:function value(e,t,n){var r,i=e instanceof Array?e:[e],a=this._graph.createElectricNodeOf(i,{type:"NextFrame",fn:t});return n&&(r=this._graph.stopPropagation().setPropagationOverride("currentFrame")).resetNodeValue.apply(r,P(e)),a}},{key:"lock",value:function value(){return this._lockFlag=!0,this._reqQ.length=0,this}},{key:"unlock",value:function value(){return this._lockFlag=!1,this.setProp.apply(this,P(this._reqQ)),this._reqQ.length=0,this}},{key:"prop",value:function value(){var e,t=void 0,n=void 0;switch(e=arguments.length){case 1:t=arguments.length<=0?void 0:arguments[0];break;case 2:t=arguments.length<=0?void 0:arguments[0],n=arguments.length<=1?void 0:arguments[1];break;default:return this}return 2===e?(this._lockFlag?this._reqQ.push([t,n]):this.setProp([t,n]),this):this._graph.getNodeValue(t)}},{key:"setProp",value:function value(){for(var e,t=this,n=arguments.length,r=Array(n),i=0;i/gi),e},SmartLabelManager.store={},SmartLabelManager.prototype._calCharDimWithCache=function(e,t,n){if(!this._init)return!1;var r,i,a,o,u,c,s=this.options.maxCacheLimit,l=this._container,h=this.style||{},d=this._advancedCache||(this._advancedCache={}),p=this._advancedCacheKey||(this._advancedCacheKey=[]),y=e+(h.fontSize||"")+(h.fontFamily||"")+(h.fontWeight||"")+(h.fontStyle||""),g=e+"init"+(h.fontSize||"")+(h.fontFamily||"")+(h.fontWeight||"")+(h.fontStyle||"");return f[e]&&(e=f[e]),t?void 0===(c=d[g])&&(l.innerHTML=e.repeat?e.repeat(n):Array(n+1).join(e),a=l.offsetWidth,l.innerHTML=e,o=l.offsetWidth,c=d[g]=(a-n*o)/(n+1),p.push(g),p.length>s&&delete d[p.shift()]):c=0,(u=d[y])?(i=u.split(","),{width:parseFloat(i[0],10),height:parseFloat(i[1],10)}):(l.innerHTML=e,r={height:l.offsetHeight,width:l.offsetWidth+c},d[y]=r.width+","+r.height,p.push(y),p.length>s&&delete d[p.shift()],r)},SmartLabelManager.prototype._getWidthFn=function(){var e=this._containerObj,t=this._container,n=e.svgText;return n?function(e){var t,r;return n.textContent=e,(r=(t=n.getBBox()).width-d)<1&&(r=t.width),r}:function(e){return t.innerHTML=e,t.offsetWidth}},SmartLabelManager.prototype.setStyle=function(e){return this._init?e!==this.style||this._styleNotSet?(e||(e=this.style),o.setLineHeight(e),this.style=e,this._containerObj=t=this._containerManager.get(e),this._containerObj?(this._container=t.node,this._context=t.context,this._cache=t.charCache,this._lineHeight=t.lineHeight,this._styleNotSet=!1):this._styleNotSet=!0,this):void 0:this;var t},SmartLabelManager.prototype.useEllipsesOnOverflow=function(e){return this._init?(this._showNoEllipses=!e,this):this},SmartLabelManager.prototype.getSmartText=function(e,t,n,r){if(!this._init)return!1;void 0===e||null===e?e="":"string"!=typeof e&&(e=e.toString());var i,a,c,l,f,d,p,y,g,v,m,b,_,x,w,C,k,S,P,A,E,M,O,T,F,N,j=!1,I=0,D=-1,L=-1,R=-1,B=0,z=0,H=[],V=0,U=this._showNoEllipses?"":"...",W=this._lineHeight,q=this._context,G=this._container,Y=this._containerObj,X=Y.ellipsesWidth,K=Y.dotWidth,$=[],Q=-1,Z=-1,J=-1,ee=function fastTrim(e){for(var t=/\s/,n=(e=e.replace(/^\s\s*/,"")).length;t.test(e.charAt(n-=1)););return e.slice(0,n+1)},te={text:e,maxWidth:t,maxHeight:n,width:null,height:null,oriTextWidth:null,oriTextHeight:null,oriText:e,isTruncated:!1};if(b=this._getWidthFn(),n===W&&(n*=1.2),G){if(!h.isBrowserLess){if((j=o.xmlTagRegEx.test(e))?(G.innerHTML=e,te.oriTextWidth=p=G.offsetWidth,te.oriTextHeight=y=G.offsetHeight):(l=e.replace(o.ltgtRegex,function(e){return"<"===e?"<":">"}),w=this.getOriSize(l,!0),te.oriTextWidth=p=w.width,te.oriTextHeight=y=w.height),y<=n&&p<=t)return te.width=te.oriTextWidth=p,te.height=te.oriTextHeight=y,te;if(W>n)return te.text="",te.width=te.oriTextWidth=0,te.height=te.oriTextHeight=0,te}if(e=ee(e).replace(/(\s+)/g," "),f=this._showNoEllipses?t:t-X,!j){if(i=(H=e.split("")).length,a="",c=[],m=H[0],this._cache[m]?P=this._cache[m].width:(P=b(m),this._cache[m]={width:P}),f>P)V=(c=e.substr(0,o.getNearestBreakIndex(e,f,this)).split("")).length;else{if(P>t)return te.text="",te.width=te.oriTextWidth=te.height=te.oriTextHeight=0,te;U&&((f=t-2*K)>P?U="..":(f=t-K)>P?U=".":(f=0,U=""))}if(B=b(c.join("")),z=this._lineHeight,r){for(;Vf&&(a||(a=c.slice(0,-1).join("")),B>t))return te.text=ee(a)+U,te.tooltext=te.oriText,te.width=b(te.text),te.height=this._lineHeight,te;return te.text=c.join(""),te.width=B,te.height=this._lineHeight,te}for(;Vf&&(a||(a=c.slice(0,-1).join("")),B>t)){if(L=e.substr(0,c.length).lastIndexOf(" "),D=e.substr(0,c.length).lastIndexOf("-"),L>R?(B=b(c.slice(R+1,L).join("")),c.splice(L,1,"
"),R=L,g=L+1):D>R?(D===c.length-1?(B=b(c.slice(R+1,L).join("")),c.splice(D,1,"
-")):(B=b(c.slice(R+1,L).join("")),c.splice(D,1,"-
")),R=D,g=D+1):(c.splice(c.length-1,1,"
"+H[V]),J=c.length-2,B=b(c.slice(R+1,J+1).join("")),R=J,g=V),(z+=this._lineHeight)>n)return te.text=ee(a)+U,te.tooltext=te.oriText,te.width=t,te.height=z-this._lineHeight,te;I=s(I,B),a=null,v=o.getNearestBreakIndex(e.substr(g),f,this),B=b(e.substr(g,v||1)),c.length)/g,'$1'),G.innerHTML=e,k=0,S=(C=G[h.childRetriverFn](h.childRetriverString)).length;kt)return te.text="",te.width=te.oriTextWidth=te.height=te.oriTextHeight=0,te;if(P>f&&!this._showNoEllipses&&((f=t-2*K)>P?U="..":(f=t-K)>P?U=".":(f=0,U="")),_=$[0].elem.offsetLeft,x=$[0].elem.offsetTop,r)for(;Vf&&(N||(N=V),G.offsetWidth>t&&(F=V,V=i));else for(;Vf?(N||(N=V),M>t&&(L=$[V].spaceIdx,D=$[V].dashIdx,L>R?($[L].elem.innerHTML="
",R=L):D>R?($[D].elem.innerHTML=D===V?"
-":"-
",R=D):A.parentNode.insertBefore(T=u.createElement("br"),A),A.offsetHeight+A.offsetTop>n?(T?T.parentNode.removeChild(T):R===D?$[D].elem.innerHTML="-":$[L].elem.innerHTML=" ",F=V,V=i):N=null)):O>n&&(F=V,V=i);if(F=N;V-=1)(A=$[V].elem).parentNode.removeChild(A);for(;V>=0;V-=1)A=$[V].elem,o.classNameBrReg.test(A.className)?A.parentNode.removeChild(A):V=0}return te.text=G.innerHTML.replace(o.spanRemovalRegx,"$1").replace(/\&\;/g,"&"),te.isTruncated&&(te.text+=U,te.tooltext=d),te.height=G.offsetHeight,te.width=G.offsetWidth,te}return te.error=new Error("Body Tag Missing!"),te},SmartLabelManager.prototype.getOriSize=function(e,t){if(!this._init)return!1;var n,r,i,a,o,u=0,c=0,f={};if(!t)return this._calCharDimWithCache(e);for(a=0,o=(n=e.split("")).length;a]+?\>)|(&(?:[a-z]+|#[0-9]+);|.)/gi,spanAdditionReplacer:'$1$2',spanRemovalRegx:new RegExp("\\]+?"+c+"[^\\>]{0,}\\>(.*?)\\<\\/span\\>","ig"),xmlTagRegEx:new RegExp("<[^>][^<]*[^>]+>","i"),ltgtRegex:/<|>/g,brReplaceRegex://gi,testStrAvg:"WgI",parentContainerStyle:{position:"absolute",top:"-9999em",whiteSpace:"nowrap",padding:"0px",width:"1px",height:"1px",overflow:"hidden"},supportedStyle:{font:"font",fontFamily:"font-family","font-family":"font-family",fontWeight:"font-weight","font-weight":"font-weight",fontSize:"font-size","font-size":"font-size",lineHeight:"line-height","line-height":"line-height",fontStyle:"font-style","font-style":"font-style"},getDocumentSupport:function getDocumentSupport(){var r,i,a;return t.getElementsByClassName?(r="getElementsByClassName",i=c,a=!0):(r="getElementsByTagName",i="span",a=!1),{isIE:/msie/i.test(n)&&!e.opera,hasSVG:Boolean(e.SVGAngle||t.implementation.hasFeature("http://www.w3.org/TR/SVG11/feature#BasicStructure","1.1")),isHeadLess:new RegExp(" HtmlUnit").test(n),isWebKit:new RegExp(" AppleWebKit/").test(n),childRetriverFn:r,childRetriverString:i,noClassTesting:a}},createContainer:function createContainer(e){var n,r;if(e&&(e.offsetWidth||e.offsetHeight)){if(e.appendChild)return e.appendChild(r=t.createElement("DIV")),r.className=u,r.setAttribute("aria-hidden","true"),r.setAttribute("role","presentation"),r}else if((n=t.getElementsByTagName("body")[0])&&n.appendChild)return(r=t.createElement("DIV")).className=u,r.setAttribute("aria-hidden","true"),r.setAttribute("role","presentation"),1,n.appendChild(r),r},getNearestBreakIndex:function getNearestBreakIndex(e,t,n){if(!e||!e.length)return 0;var r,o=n._getWidthFn(),u=0,c=0,s=o(e),l=s/e.length;if(r=t,u=i(t/l),se.length&&(r=t-s,u=e.length);r>0;){if(r=t-o(e.substr(0,u)),!(c=a(r/l)))return u;u+=c}for(;r<0;){if(r=t-o(e.substr(0,u)),!(c=a(r/l)))return u;u+=c}return u},setLineHeight:function setLineHeight(e){var t=e.fontSize=e.fontSize||"12px";return e.lineHeight=e.lineHeight||e["line-height"]||1.2*parseInt(t,10)+"px",e}}}};t.default=r,e.exports=t.default},function(e){e.exports={name:"muze",private:!0,version:"1.0.3",description:"Composable visualisation library for web with a data-first approach",homepage:"https://www.charts.com/muze",license:"MIT",author:"Charts.com ",contributors:[{name:"Akash Ghoswami",email:"akash@charts.com"},{name:"Ranajit Banerjee",email:"ranajit.banerjee@charts.com",url:"https://github.com/ranajitbanerjee"},{name:"Mridul Meharia",email:"mridul@charts.com",url:"https://github.com/mridulmeh"},{name:"Subhash Haldar",email:"subhash@charts.com"},{name:"Sandeep Acharya",email:"sandeep@charts.com"},{name:"Rousan Ali",email:"rousan@charts.com",url:"https://rousan.io"},{name:"Ujjal Kumar Dutta",email:"ujjal@charts.com"}],main:"src/index.js",keywords:["muze","svg","vector","graphics","data-visualization","visualization","renderer","fusioncharts","relational","algebra","relation"],repository:{type:"git",url:"https://github.com/chartshq/muze"},dependencies:{"@chartshq/layout":"^1.0.0","@chartshq/muze-firebolt":"^1.0.0","@chartshq/muze-legend":"^1.0.0","muze-utils":"^1.0.0","@chartshq/visual-cell":"^1.0.0","@chartshq/visual-group":"^1.0.0","@chartshq/visual-layer":"^1.0.0","@chartshq/visual-unit":"^1.0.0"}}},function(e,t,n){var r=n(44);e.exports=r.default?r.default:r},function(e,t,n){"use strict";var r=function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}(n(5)).default.init("undefined"!=typeof window?window:void 0),i=r.win.document,a=r.getDocumentSupport(),o=a.isWebKit?0:4.5;function ContainerManager(e,t,n){var r;n=(n=n>5?n:5)<20?n:20,this.maxContainers=n,this.first=null,this.last=null,this.containers={},this.length=0,this.rootNode=e,t&&((r=i.createElementNS("http://www.w3.org/2000/svg","svg")).setAttributeNS("http://www.w3.org/2000/svg","xlink","http://www.w3.org/1999/xlink"),r.setAttributeNS("http://www.w3.org/2000/svg","height","0"),r.setAttributeNS("http://www.w3.org/2000/svg","width","0"),this.svgRoot=r,this.rootNode.appendChild(r))}ContainerManager.prototype.get=function(e){var t,n,i,a=this.containers,o=this.length,u=this.maxContainers,c="";for(n in r.supportedStyle)void 0!==e[n]&&(c+=r.supportedStyle[n]+":"+e[n]+";");if(!c)return!1;if(i=a[c])this.first!==i&&(i.prev&&(i.prev.next=i.next),i.next&&(i.next.prev=i.prev),i.next=this.first,i.next.prev=i,this.last===i&&(this.last=i.prev),i.prev=null,this.first=i);else{if(o>=u)for(t=o-u+1;t--;)this.removeContainer(this.last);i=this.addContainer(c)}return i},ContainerManager.prototype.addContainer=function(e){var t,n;return this.containers[e]=n={next:null,prev:null,node:null,ellipsesWidth:0,lineHeight:0,dotWidth:0,avgCharWidth:4,keyStr:e,charCache:{}},n.next=this.first,n.next&&(n.next.prev=n),this.first=n,this.last||(this.last=n),this.length+=1,t=n.node=i.createElement("div"),this.rootNode.appendChild(t),a.isIE&&!a.hasSVG?t.style.setAttribute("cssText",e):t.setAttribute("style",e),t.setAttribute("aria-hidden","true"),t.setAttribute("role","presentation"),t.style.display="inline-block",t.innerHTML=r.testStrAvg,n.lineHeight=t.offsetHeight,n.avgCharWidth=t.offsetWidth/3,a.isBrowserLess?((t=n.svgText=i.createElementNS("http://www.w3.org/2000/svg","text")).setAttribute("style",e),this.svgRoot.appendChild(t),t.textContent=r.testStrAvg,n.lineHeight=t.getBBox().height,n.avgCharWidth=(t.getBBox().width-o)/3,t.textContent="...",n.ellipsesWidth=t.getBBox().width-o,t.textContent=".",n.dotWidth=t.getBBox().width-o):(t.innerHTML="...",n.ellipsesWidth=t.offsetWidth,t.innerHTML=".",n.dotWidth=t.offsetWidth,t.innerHTML=""),n},ContainerManager.prototype.removeContainer=function(e){var t=e.keyStr;t&&this.length&&e&&(this.length-=1,e.prev&&(e.prev.next=e.next),e.next&&(e.next.prev=e.prev),this.first===e&&(this.first=e.next),this.last===e&&(this.last=e.prev),e.node.parentNode.removeChild(e.node),delete this.containers[t])},ContainerManager.prototype.dispose=function(){var e,t=this.containers;for(e in this.maxContainers=null,t)this.removeContainer(t[e]);this.rootNode.parentNode.removeChild(this.rootNode),this.rootNode=null,this.first=null,this.last=null},e.exports=ContainerManager},function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,,function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,function(e,t,n){"use strict";n.r(t);var r={};n.r(r),n.d(r,"scaleLinear",function(){return linear_linear}),n.d(r,"scaleThreshold",function(){return threshold_threshold}),n.d(r,"scaleLog",function(){return log}),n.d(r,"scalePow",function(){return pow}),n.d(r,"scaleIdentity",function(){return identity_identity}),n.d(r,"scaleOrdinal",function(){return ordinal}),n.d(r,"scaleSequential",function(){return sequential}),n.d(r,"scaleQuantize",function(){return quantize_quantize}),n.d(r,"scaleQuantile",function(){return quantile_quantile}),n.d(r,"schemeCategory10",function(){return tn}),n.d(r,"schemeCategory20",function(){return rn}),n.d(r,"schemeCategory20b",function(){return nn}),n.d(r,"scaleBand",function(){return band}),n.d(r,"scaleTime",function(){return Jt});var i={};n.r(i),n.d(i,"schemeDark2",function(){return cn}),n.d(i,"schemePaired",function(){return sn}),n.d(i,"schemeAccent",function(){return un}),n.d(i,"schemePastel1",function(){return ln}),n.d(i,"schemePastel2",function(){return fn}),n.d(i,"schemeSet1",function(){return hn}),n.d(i,"schemeSet2",function(){return dn}),n.d(i,"schemeSet3",function(){return pn}),n.d(i,"schemeBlues",function(){return zn}),n.d(i,"schemeBrBG",function(){return gn}),n.d(i,"schemePRGn",function(){return mn}),n.d(i,"schemePiYG",function(){return _n}),n.d(i,"interpolateBrBG",function(){return vn}),n.d(i,"interpolatePRGn",function(){return bn}),n.d(i,"interpolatePiYG",function(){return xn}),n.d(i,"interpolatePuOr",function(){return wn}),n.d(i,"interpolateRdBu",function(){return Cn}),n.d(i,"interpolateRdGy",function(){return kn}),n.d(i,"interpolateRdYlBu",function(){return Sn}),n.d(i,"interpolateRdYlGn",function(){return Pn}),n.d(i,"interpolateSpectral",function(){return An}),n.d(i,"interpolateBlues",function(){return Hn}),n.d(i,"interpolateGreens",function(){return Vn}),n.d(i,"interpolateGreys",function(){return Un}),n.d(i,"interpolateOranges",function(){return Gn}),n.d(i,"interpolatePurples",function(){return Wn}),n.d(i,"interpolateReds",function(){return qn}),n.d(i,"interpolateViridis",function(){return Zn}),n.d(i,"interpolateInferno",function(){return er}),n.d(i,"interpolateMagma",function(){return Jn}),n.d(i,"interpolatePlasma",function(){return tr}),n.d(i,"interpolateWarm",function(){return Xn}),n.d(i,"interpolateCool",function(){return Kn}),n.d(i,"interpolateCubehelixDefault",function(){return Yn}),n.d(i,"interpolateBuGn",function(){return En}),n.d(i,"interpolateBuPu",function(){return Mn}),n.d(i,"interpolateGnBu",function(){return On}),n.d(i,"interpolateOrRd",function(){return Tn}),n.d(i,"interpolatePuBuGn",function(){return Fn}),n.d(i,"interpolatePuBu",function(){return Nn}),n.d(i,"interpolatePuRd",function(){return jn}),n.d(i,"interpolateRdPu",function(){return In}),n.d(i,"interpolateYlGnBu",function(){return Dn}),n.d(i,"interpolateYlGn",function(){return Ln}),n.d(i,"interpolateYlOrBr",function(){return Rn}),n.d(i,"interpolateYlOrRd",function(){return Bn}),n.d(i,"interpolateRainbow",function(){return Qn});var a={};n.r(a),n.d(a,"DRAG",function(){return Qo}),n.d(a,"HOVER",function(){return Zo}),n.d(a,"SELECTIONDRAG",function(){return Jo}),n.d(a,"CLICK",function(){return eu}),n.d(a,"LONGTOUCH",function(){return tu}),n.d(a,"TOUCHDRAG",function(){return nu}),n.d(a,"ALL_ACTIONS",function(){return ru});var o={};n.r(o),n.d(o,"SELECTION_NEW_ENTRY",function(){return iu}),n.d(o,"SELECTION_NEW_EXIT",function(){return au}),n.d(o,"SELECTION_NULL",function(){return ou}),n.d(o,"SELECTION_OLD_ENTRY",function(){return uu}),n.d(o,"SELECTION_OLD_EXIT",function(){return cu});var u={};n.r(u),n.d(u,"BRUSH",function(){return wu}),n.d(u,"HIGHLIGHT",function(){return Cu}),n.d(u,"TOOLTIP",function(){return ku}),n.d(u,"FILTER",function(){return Su}),n.d(u,"SELECT",function(){return Pu});var c={};n.r(c),n.d(c,"HighlightBeahviour",function(){return Eu}),n.d(c,"BrushBehaviour",function(){return Ou}),n.d(c,"FilterBehaviour",function(){return Fu}),n.d(c,"SelectBehaviour",function(){return Lu});var s={};n.r(s),n.d(s,"SelectionBox",function(){return Ju}),n.d(s,"Tooltip",function(){return gc}),n.d(s,"Crossline",function(){return mc}),n.d(s,"PlotHighlighter",function(){return xc}),n.d(s,"FilterEffect",function(){return Cc}),n.d(s,"PersistentAnchors",function(){return Ec}),n.d(s,"BrushAnchors",function(){return Tc}),n.d(s,"AnchorEffect",function(){return Pc});var l={};n.r(l),n.d(l,"BOTTOM",function(){return Gc}),n.d(l,"TOP",function(){return Yc}),n.d(l,"LEFT",function(){return Xc}),n.d(l,"RIGHT",function(){return Kc}),n.d(l,"axisOrientationMap",function(){return $c});var f={};n.r(f),n.d(f,"LINEAR",function(){return Qc}),n.d(f,"BAND",function(){return Zc}),n.d(f,"TIME",function(){return Jc}),n.d(f,"COLOR",function(){return es}),n.d(f,"ORDINAL",function(){return ts}),n.d(f,"QUANTIZE",function(){return ns}),n.d(f,"QUANTILE",function(){return rs}),n.d(f,"LOG",function(){return is}),n.d(f,"POW",function(){return as}),n.d(f,"IDENTITY",function(){return os}),n.d(f,"SEQUENTIAL",function(){return us}),n.d(f,"THRESHOLD",function(){return cs});var h={};n.r(h),n.d(h,"CONFIG",function(){return ad}),n.d(h,"DATA",function(){return od}),n.d(h,"AXES",function(){return ud}),n.d(h,"LAYERDEFS",function(){return cd}),n.d(h,"WIDTH",function(){return sd}),n.d(h,"HEIGHT",function(){return ld}),n.d(h,"MOUNT",function(){return fd}),n.d(h,"primaryXAxisUpdated",function(){return hd}),n.d(h,"primaryYAxisUpdated",function(){return dd}),n.d(h,"secondaryXAxisUpdated",function(){return pd}),n.d(h,"secondaryYAxisUpdated",function(){return yd}),n.d(h,"TRANSFORM",function(){return gd}),n.d(h,"DATADOMAIN",function(){return vd}),n.d(h,"LAYERSCREATED",function(){return md}),n.d(h,"FIELDS",function(){return bd}),n.d(h,"TIMEDIFFS",function(){return _d}),n.d(h,"LAYERAXISINDEX",function(){return xd});var d={};n.r(d),n.d(d,"SelectBehaviour",function(){return wp});var y={};n.r(y),n.d(y,"SelectionBox",function(){return zp}),n.d(y,"LegendHighlighter",function(){return Up});var g={};n.r(g),n.d(g,"share",function(){return Oy}),n.d(g,"html",function(){return operators_html});var v=function(e,t){return et?1:e>=t?0:NaN},m=function(e){return 1===e.length&&(e=function ascendingComparator(e){return function(t,n){return v(e(t),n)}}(e)),{left:function left(t,n,r,i){for(null==r&&(r=0),null==i&&(i=t.length);r>>1;e(t[a],n)<0?r=a+1:i=a}return r},right:function right(t,n,r,i){for(null==r&&(r=0),null==i&&(i=t.length);r>>1;e(t[a],n)>0?i=a:r=a+1}return r}}};var b=m(v),_=b.right,x=(b.left,_);var w=function(e){return null===e?NaN:+e},C=Array.prototype,k=(C.slice,C.map,function(e,t,n){e=+e,t=+t,n=(i=arguments.length)<2?(t=e,e=0,1):i<3?1:+n;for(var r=-1,i=0|Math.max(0,Math.ceil((t-e)/n)),a=new Array(i);++r0)return[e];if((r=t0)for(e=Math.ceil(e/o),t=Math.floor(t/o),a=new Array(i=Math.ceil(t-e+1));++u=0?(a>=S?10:a>=P?5:a>=A?2:1)*Math.pow(10,i):-Math.pow(10,-i)/(a>=S?10:a>=P?5:a>=A?2:1)}function tickStep(e,t,n){var r=Math.abs(t-e)/Math.max(0,n),i=Math.pow(10,Math.floor(Math.log(r)/Math.LN10)),a=r/i;return a>=S?i*=10:a>=P?i*=5:a>=A&&(i*=2),t=1)return+n(e[r-1],r-1,e);var r,i=(r-1)*t,a=Math.floor(i),o=+n(e[a],a,e);return o+(+n(e[a+1],a+1,e)-o)*(i-a)}};function map_Map(){}function map_map(e,t){var n=new map_Map;if(e instanceof map_Map)e.each(function(e,t){n.set(t,e)});else if(Array.isArray(e)){var r,i=-1,a=e.length;if(null==t)for(;++i=r.length)return null!=e&&n.sort(e),null!=t?t(n):n;for(var u,c,s,l=-1,f=n.length,h=r[i++],d=O(),p=a();++lr.length)return e;var a,o=i[n-1];return null!=t&&n>=r.length?a=e.entries():(a=[],e.each(function(e,t){a.push({key:t,values:_entries(e,n)})})),null!=o?a.sort(function(e,t){return o(e.key,t.key)}):a}(apply(e,0,createMap,setMap),0)},key:function key(e){return r.push(e),n},sortKeys:function sortKeys(e){return i[r.length-1]=e,n},sortValues:function sortValues(t){return e=t,n},rollup:function rollup(e){return t=e,n}}};function createObject(){return{}}function setObject(e,t,n){e[t]=n}function createMap(){return O()}function setMap(e,t,n){e.set(t,n)}function set_Set(){}var F=O.prototype;function set_set(e,t){var n=new set_Set;if(e instanceof set_Set)e.each(function(e){n.add(e)});else if(e){var r=-1,i=e.length;if(null==t)for(;++r1?+t:s,f=a[1]a[1-f]))return n=Math.max(0,getClosestIndexOf(h,s)),c=getClosestIndexOf(h,l),o=s===l?n:Math.max(n,c-1),f&&(u=n,n=d-o,o=d-u),n>o?void 0:r().slice(n,o+1)},n.invert=function(e,t){var n,o,u=+e,c=arguments.length>1?+t:u,s=a[1]a[1-s]))return n=Math.max(0,getClosestIndexOf(l,u,"left")),r()[s?f-n:n]},rescale()}function getClosestIndexOf(e,t,n){for(var r,i,a,o=0,u=e.length-1;ot?0===u?u:"left"===n?u-1:u:u===e.length-1?u:"left"===n?u:u+1:u}var L=function(e,t,n){e.prototype=t.prototype=n,n.constructor=e};function extend(e,t){var n=Object.create(e.prototype);for(var r in t)n[r]=t[r];return n}function Color(){}var R="\\s*([+-]?\\d+)\\s*",B="\\s*([+-]?\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)\\s*",z="\\s*([+-]?\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)%\\s*",H=/^#([0-9a-f]{3})$/,V=/^#([0-9a-f]{6})$/,U=new RegExp("^rgb\\("+[R,R,R]+"\\)$"),W=new RegExp("^rgb\\("+[z,z,z]+"\\)$"),q=new RegExp("^rgba\\("+[R,R,R,B]+"\\)$"),G=new RegExp("^rgba\\("+[z,z,z,B]+"\\)$"),Y=new RegExp("^hsl\\("+[B,z,z]+"\\)$"),X=new RegExp("^hsla\\("+[B,z,z,B]+"\\)$"),K={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};function color_color(e){var t;return e=(e+"").trim().toLowerCase(),(t=H.exec(e))?new Rgb((t=parseInt(t[1],16))>>8&15|t>>4&240,t>>4&15|240&t,(15&t)<<4|15&t,1):(t=V.exec(e))?rgbn(parseInt(t[1],16)):(t=U.exec(e))?new Rgb(t[1],t[2],t[3],1):(t=W.exec(e))?new Rgb(255*t[1]/100,255*t[2]/100,255*t[3]/100,1):(t=q.exec(e))?rgba(t[1],t[2],t[3],t[4]):(t=G.exec(e))?rgba(255*t[1]/100,255*t[2]/100,255*t[3]/100,t[4]):(t=Y.exec(e))?hsla(t[1],t[2]/100,t[3]/100,1):(t=X.exec(e))?hsla(t[1],t[2]/100,t[3]/100,t[4]):K.hasOwnProperty(e)?rgbn(K[e]):"transparent"===e?new Rgb(NaN,NaN,NaN,0):null}function rgbn(e){return new Rgb(e>>16&255,e>>8&255,255&e,1)}function rgba(e,t,n,r){return r<=0&&(e=t=n=NaN),new Rgb(e,t,n,r)}function rgbConvert(e){return e instanceof Color||(e=color_color(e)),e?new Rgb((e=e.rgb()).r,e.g,e.b,e.opacity):new Rgb}function color_rgb(e,t,n,r){return 1===arguments.length?rgbConvert(e):new Rgb(e,t,n,null==r?1:r)}function Rgb(e,t,n,r){this.r=+e,this.g=+t,this.b=+n,this.opacity=+r}function _hex(e){return((e=Math.max(0,Math.min(255,Math.round(e)||0)))<16?"0":"")+e.toString(16)}function hsla(e,t,n,r){return r<=0?e=t=n=NaN:n<=0||n>=1?e=t=NaN:t<=0&&(e=NaN),new Hsl(e,t,n,r)}function hsl(e,t,n,r){return 1===arguments.length?function hslConvert(e){if(e instanceof Hsl)return new Hsl(e.h,e.s,e.l,e.opacity);if(e instanceof Color||(e=color_color(e)),!e)return new Hsl;if(e instanceof Hsl)return e;var t=(e=e.rgb()).r/255,n=e.g/255,r=e.b/255,i=Math.min(t,n,r),a=Math.max(t,n,r),o=NaN,u=a-i,c=(a+i)/2;return u?(o=t===a?(n-r)/u+6*(n0&&c<1?0:o,new Hsl(o,u,c,e.opacity)}(e):new Hsl(e,t,n,null==r?1:r)}function Hsl(e,t,n,r){this.h=+e,this.s=+t,this.l=+n,this.opacity=+r}function hsl2rgb(e,t,n){return 255*(e<60?t+(n-t)*e/60:e<180?n:e<240?t+(n-t)*(240-e)/60:t)}L(Color,color_color,{displayable:function displayable(){return this.rgb().displayable()},hex:function hex(){return this.rgb().hex()},toString:function toString(){return this.rgb()+""}}),L(Rgb,color_rgb,extend(Color,{brighter:function brighter(e){return e=null==e?1/.7:Math.pow(1/.7,e),new Rgb(this.r*e,this.g*e,this.b*e,this.opacity)},darker:function darker(e){return e=null==e?.7:Math.pow(.7,e),new Rgb(this.r*e,this.g*e,this.b*e,this.opacity)},rgb:function rgb(){return this},displayable:function displayable(){return 0<=this.r&&this.r<=255&&0<=this.g&&this.g<=255&&0<=this.b&&this.b<=255&&0<=this.opacity&&this.opacity<=1},hex:function hex(){return"#"+_hex(this.r)+_hex(this.g)+_hex(this.b)},toString:function toString(){var e=this.opacity;return(1===(e=isNaN(e)?1:Math.max(0,Math.min(1,e)))?"rgb(":"rgba(")+Math.max(0,Math.min(255,Math.round(this.r)||0))+", "+Math.max(0,Math.min(255,Math.round(this.g)||0))+", "+Math.max(0,Math.min(255,Math.round(this.b)||0))+(1===e?")":", "+e+")")}})),L(Hsl,hsl,extend(Color,{brighter:function brighter(e){return e=null==e?1/.7:Math.pow(1/.7,e),new Hsl(this.h,this.s,this.l*e,this.opacity)},darker:function darker(e){return e=null==e?.7:Math.pow(.7,e),new Hsl(this.h,this.s,this.l*e,this.opacity)},rgb:function rgb(){var e=this.h%360+360*(this.h<0),t=isNaN(e)||isNaN(this.s)?0:this.s,n=this.l,r=n+(n<.5?n:1-n)*t,i=2*n-r;return new Rgb(hsl2rgb(e>=240?e-240:e+120,i,r),hsl2rgb(e,i,r),hsl2rgb(e<120?e+240:e-120,i,r),this.opacity)},displayable:function displayable(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1}}));var $=Math.PI/180,Q=180/Math.PI,Z=.96422,J=1,ee=.82521,te=4/29,ne=6/29,re=3*ne*ne,ie=ne*ne*ne;function labConvert(e){if(e instanceof Lab)return new Lab(e.l,e.a,e.b,e.opacity);if(e instanceof Hcl){if(isNaN(e.h))return new Lab(e.l,0,0,e.opacity);var t=e.h*$;return new Lab(e.l,Math.cos(t)*e.c,Math.sin(t)*e.c,e.opacity)}e instanceof Rgb||(e=rgbConvert(e));var n,r,i=rgb2lrgb(e.r),a=rgb2lrgb(e.g),o=rgb2lrgb(e.b),u=xyz2lab((.2225045*i+.7168786*a+.0606169*o)/J);return i===a&&a===o?n=r=u:(n=xyz2lab((.4360747*i+.3850649*a+.1430804*o)/Z),r=xyz2lab((.0139322*i+.0971045*a+.7141733*o)/ee)),new Lab(116*u-16,500*(n-u),200*(u-r),e.opacity)}function lab(e,t,n,r){return 1===arguments.length?labConvert(e):new Lab(e,t,n,null==r?1:r)}function Lab(e,t,n,r){this.l=+e,this.a=+t,this.b=+n,this.opacity=+r}function xyz2lab(e){return e>ie?Math.pow(e,1/3):e/re+te}function lab2xyz(e){return e>ne?e*e*e:re*(e-te)}function lrgb2rgb(e){return 255*(e<=.0031308?12.92*e:1.055*Math.pow(e,1/2.4)-.055)}function rgb2lrgb(e){return(e/=255)<=.04045?e/12.92:Math.pow((e+.055)/1.055,2.4)}function hclConvert(e){if(e instanceof Hcl)return new Hcl(e.h,e.c,e.l,e.opacity);if(e instanceof Lab||(e=labConvert(e)),0===e.a&&0===e.b)return new Hcl(NaN,0,e.l,e.opacity);var t=Math.atan2(e.b,e.a)*Q;return new Hcl(t<0?t+360:t,Math.sqrt(e.a*e.a+e.b*e.b),e.l,e.opacity)}function hcl(e,t,n,r){return 1===arguments.length?hclConvert(e):new Hcl(e,t,n,null==r?1:r)}function Hcl(e,t,n,r){this.h=+e,this.c=+t,this.l=+n,this.opacity=+r}L(Lab,lab,extend(Color,{brighter:function brighter(e){return new Lab(this.l+18*(null==e?1:e),this.a,this.b,this.opacity)},darker:function darker(e){return new Lab(this.l-18*(null==e?1:e),this.a,this.b,this.opacity)},rgb:function rgb(){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 new Rgb(lrgb2rgb(3.1338561*(t=Z*lab2xyz(t))-1.6168667*(e=J*lab2xyz(e))-.4906146*(n=ee*lab2xyz(n))),lrgb2rgb(-.9787684*t+1.9161415*e+.033454*n),lrgb2rgb(.0719453*t-.2289914*e+1.4052427*n),this.opacity)}})),L(Hcl,hcl,extend(Color,{brighter:function brighter(e){return new Hcl(this.h,this.c,this.l+18*(null==e?1:e),this.opacity)},darker:function darker(e){return new Hcl(this.h,this.c,this.l-18*(null==e?1:e),this.opacity)},rgb:function rgb(){return labConvert(this).rgb()}}));var ae=-.14861,oe=1.78277,ue=-.29227,ce=-.90649,se=1.97294,le=se*ce,fe=se*oe,he=oe*ue-ce*ae;function cubehelix_cubehelix(e,t,n,r){return 1===arguments.length?function cubehelixConvert(e){if(e instanceof Cubehelix)return new Cubehelix(e.h,e.s,e.l,e.opacity);e instanceof Rgb||(e=rgbConvert(e));var t=e.r/255,n=e.g/255,r=e.b/255,i=(he*r+le*t-fe*n)/(he+le-fe),a=r-i,o=(se*(n-i)-ue*a)/ce,u=Math.sqrt(o*o+a*a)/(se*i*(1-i)),c=u?Math.atan2(o,a)*Q-120:NaN;return new Cubehelix(c<0?c+360:c,u,i,e.opacity)}(e):new Cubehelix(e,t,n,null==r?1:r)}function Cubehelix(e,t,n,r){this.h=+e,this.s=+t,this.l=+n,this.opacity=+r}function basis(e,t,n,r,i){var a=e*e,o=a*e;return((1-3*e+3*a-o)*t+(4-6*a+3*o)*n+(1+3*e+3*a-3*o)*r+o*i)/6}L(Cubehelix,cubehelix_cubehelix,extend(Color,{brighter:function brighter(e){return e=null==e?1/.7:Math.pow(1/.7,e),new Cubehelix(this.h,this.s,this.l*e,this.opacity)},darker:function darker(e){return e=null==e?.7:Math.pow(.7,e),new Cubehelix(this.h,this.s,this.l*e,this.opacity)},rgb:function rgb(){var e=isNaN(this.h)?0:(this.h+120)*$,t=+this.l,n=isNaN(this.s)?0:this.s*t*(1-t),r=Math.cos(e),i=Math.sin(e);return new Rgb(255*(t+n*(ae*r+oe*i)),255*(t+n*(ue*r+ce*i)),255*(t+n*(se*r)),this.opacity)}}));var de=function(e){return function(){return e}};function linear(e,t){return function(n){return e+n*t}}function color_hue(e,t){var n=t-e;return n?linear(e,n>180||n<-180?n-360*Math.round(n/360):n):de(isNaN(e)?t:e)}function gamma(e){return 1==(e=+e)?nogamma:function(t,n){return n-t?function exponential(e,t,n){return e=Math.pow(e,n),t=Math.pow(t,n)-e,n=1/n,function(r){return Math.pow(e+r*t,n)}}(t,n,e):de(isNaN(t)?n:t)}}function nogamma(e,t){var n=t-e;return n?linear(e,n):de(isNaN(e)?t:e)}var pe=function rgbGamma(e){var t=gamma(e);function rgb(e,n){var r=t((e=color_rgb(e)).r,(n=color_rgb(n)).r),i=t(e.g,n.g),a=t(e.b,n.b),o=nogamma(e.opacity,n.opacity);return function(t){return e.r=r(t),e.g=i(t),e.b=a(t),e.opacity=o(t),e+""}}return rgb.gamma=rgbGamma,rgb}(1);function rgbSpline(e){return function(t){var n,r,i=t.length,a=new Array(i),o=new Array(i),u=new Array(i);for(n=0;n=1?(n=1,t-1):Math.floor(n*t),i=e[r],a=e[r+1],o=r>0?e[r-1]:2*i-a,u=ra&&(i=t.slice(a,i),u[o]?u[o]+=i:u[++o]=i),(n=n[0])===(r=r[0])?u[o]?u[o]+=r:u[++o]=r:(u[++o]=null,c.push({i:o,x:ge(n,r)})),a=be.lastIndex;return a180?t+=360:t-e>180&&(e+=360),i.push({i:n.push(pop(n)+"rotate(",null,r)-2,x:ge(e,t)})):t&&n.push(pop(n)+"rotate("+t+r)}(i.rotate,a.rotate,o,u),function skewX(e,t,n,i){e!==t?i.push({i:n.push(pop(n)+"skewX(",null,r)-2,x:ge(e,t)}):t&&n.push(pop(n)+"skewX("+t+r)}(i.skewX,a.skewX,o,u),function scale(e,t,n,r,i,a){if(e!==n||t!==r){var o=i.push(pop(i)+"scale(",null,",",null,")");a.push({i:o-4,x:ge(e,n)},{i:o-2,x:ge(t,r)})}else 1===n&&1===r||i.push(pop(i)+"scale("+n+","+r+")")}(i.scaleX,i.scaleY,a.scaleX,a.scaleY,o,u),i=a=null,function(e){for(var t,n=-1,r=u.length;++n2?polymap:bimap,r=i=null,scale}function scale(t){return(r||(r=n(a,o,c?function deinterpolateClamp(e){return function(t,n){var r=e(t=+t,n=+n);return function(e){return e<=t?0:e>=n?1:r(e)}}}(e):e,u)))(+t)}return scale.invert=function(e){return(i||(i=n(o,a,deinterpolateLinear,c?function reinterpolateClamp(e){return function(t,n){var r=e(t=+t,n=+n);return function(e){return e<=0?t:e>=1?n:r(e)}}}(t):t)))(+e)},scale.domain=function(e){return arguments.length?(a=j.call(e,De),rescale()):a.slice()},scale.range=function(e){return arguments.length?(o=I.call(e),rescale()):o.slice()},scale.rangeRound=function(e){return o=I.call(e),u=Ae,rescale()},scale.clamp=function(e){return arguments.length?(c=!!e,rescale()):c},scale.interpolate=function(e){return arguments.length?(u=e,rescale()):u},rescale()}var Re=function(e,t){if((n=(e=t?e.toExponential(t-1):e.toExponential()).indexOf("e"))<0)return null;var n,r=e.slice(0,n);return[r.length>1?r[0]+r.slice(2):r,+e.slice(n+1)]},Be=function(e){return(e=Re(Math.abs(e)))?e[1]:NaN},ze=/^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;function formatSpecifier(e){return new FormatSpecifier(e)}function FormatSpecifier(e){if(!(t=ze.exec(e)))throw new Error("invalid format: "+e);var t;this.fill=t[1]||" ",this.align=t[2]||">",this.sign=t[3]||"-",this.symbol=t[4]||"",this.zero=!!t[5],this.width=t[6]&&+t[6],this.comma=!!t[7],this.precision=t[8]&&+t[8].slice(1),this.trim=!!t[9],this.type=t[10]||""}formatSpecifier.prototype=FormatSpecifier.prototype,FormatSpecifier.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.trim?"~":"")+this.type};var He,Ve,Ue,We,qe=function(e){e:for(var t,n=e.length,r=1,i=-1;r0){if(!+e[r])break e;i=0}}return i>0?e.slice(0,i)+e.slice(t+1):e},Ge=function(e,t){var n=Re(e,t);if(!n)return e+"";var r=n[0],i=n[1];return i<0?"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")},Ye={"%":function _(e,t){return(100*e).toFixed(t)},b:function b(e){return Math.round(e).toString(2)},c:function c(e){return e+""},d:function d(e){return Math.round(e).toString(10)},e:function e(t,n){return t.toExponential(n)},f:function f(e,t){return e.toFixed(t)},g:function g(e,t){return e.toPrecision(t)},o:function o(e){return Math.round(e).toString(8)},p:function p(e,t){return Ge(100*e,t)},r:Ge,s:function(e,t){var n=Re(e,t);if(!n)return e+"";var r=n[0],i=n[1],a=i-(He=3*Math.max(-8,Math.min(8,Math.floor(i/3))))+1,o=r.length;return a===o?r:a>o?r+new Array(a-o+1).join("0"):a>0?r.slice(0,a)+"."+r.slice(a):"0."+new Array(1-a).join("0")+Re(e,Math.max(0,t+a-1))[0]},X:function X(e){return Math.round(e).toString(16).toUpperCase()},x:function x(e){return Math.round(e).toString(16)}},Xe=function(e){return e},Ke=["y","z","a","f","p","n","µ","m","","k","M","G","T","P","E","Z","Y"],$e=function(e){var t=e.grouping&&e.thousands?function(e,t){return function(n,r){for(var i=n.length,a=[],o=0,u=e[0],c=0;i>0&&u>0&&(c+u+1>r&&(u=Math.max(1,r-c)),a.push(n.substring(i-=u,i+u)),!((c+=u+1)>r));)u=e[o=(o+1)%e.length];return a.reverse().join(t)}}(e.grouping,e.thousands):Xe,n=e.currency,r=e.decimal,i=e.numerals?function(e){return function(t){return t.replace(/[0-9]/g,function(t){return e[+t]})}}(e.numerals):Xe,a=e.percent||"%";function newFormat(e){var o=(e=formatSpecifier(e)).fill,u=e.align,c=e.sign,s=e.symbol,l=e.zero,f=e.width,h=e.comma,d=e.precision,p=e.trim,y=e.type;"n"===y?(h=!0,y="g"):Ye[y]||(null==d&&(d=12),p=!0,y="g"),(l||"0"===o&&"="===u)&&(l=!0,o="0",u="=");var g="$"===s?n[0]:"#"===s&&/[boxX]/.test(y)?"0"+y.toLowerCase():"",v="$"===s?n[1]:/[%p]/.test(y)?a:"",m=Ye[y],b=/[defgprs%]/.test(y);function format(e){var n,a,s,_=g,x=v;if("c"===y)x=m(e)+x,e="";else{var w=(e=+e)<0;if(e=m(Math.abs(e),d),p&&(e=qe(e)),w&&0==+e&&(w=!1),_=(w?"("===c?c:"-":"-"===c||"("===c?"":c)+_,x=("s"===y?Ke[8+He/3]:"")+x+(w&&"("===c?")":""),b)for(n=-1,a=e.length;++n(s=e.charCodeAt(n))||s>57){x=(46===s?r+e.slice(n+1):e.slice(n))+x,e=e.slice(0,n);break}}h&&!l&&(e=t(e,1/0));var C=_.length+e.length+x.length,k=C>1)+_+e+x+k.slice(C);break;default:e=k+_+e+x}return i(e)}return d=null==d?6:/[gprs]/.test(y)?Math.max(1,Math.min(21,d)):Math.max(0,Math.min(20,d)),format.toString=function(){return e+""},format}return{format:newFormat,formatPrefix:function formatPrefix(e,t){var n=newFormat(((e=formatSpecifier(e)).type="f",e)),r=3*Math.max(-8,Math.min(8,Math.floor(Be(t)/3))),i=Math.pow(10,-r),a=Ke[8+r/3];return function(e){return n(i*e)+a}}}};!function defaultLocale(e){return Ve=$e(e),Ue=Ve.format,We=Ve.formatPrefix,Ve}({decimal:".",thousands:",",grouping:[3],currency:["$",""]});var Qe=function(e,t,n){var r,i=e[0],a=e[e.length-1],o=tickStep(i,a,null==t?10:t);switch((n=formatSpecifier(null==n?",f":n)).type){case"s":var u=Math.max(Math.abs(i),Math.abs(a));return null!=n.precision||isNaN(r=function(e,t){return Math.max(0,3*Math.max(-8,Math.min(8,Math.floor(Be(t)/3)))-Be(Math.abs(e)))}(o,u))||(n.precision=r),We(n,u);case"":case"e":case"g":case"p":case"r":null!=n.precision||isNaN(r=function(e,t){return e=Math.abs(e),t=Math.abs(t)-e,Math.max(0,Be(t)-Be(e))+1}(o,Math.max(Math.abs(i),Math.abs(a))))||(n.precision=r-("e"===n.type));break;case"f":case"%":null!=n.precision||isNaN(r=function(e){return Math.max(0,-Be(Math.abs(e)))}(o))||(n.precision=r-2*("%"===n.type))}return Ue(n)};function linearish(e){var t=e.domain;return e.ticks=function(e){var n=t();return E(n[0],n[n.length-1],null==e?10:e)},e.tickFormat=function(e,n){return Qe(t(),e,n)},e.nice=function(n){null==n&&(n=10);var r,i=t(),a=0,o=i.length-1,u=i[a],c=i[o];return c0?r=tickIncrement(u=Math.floor(u/r)*r,c=Math.ceil(c/r)*r,n):r<0&&(r=tickIncrement(u=Math.ceil(u*r)/r,c=Math.floor(c*r)/r,n)),r>0?(i[a]=Math.floor(u/r)*r,i[o]=Math.ceil(c/r)*r,t(i)):r<0&&(i[a]=Math.ceil(u*r)/r,i[o]=Math.floor(c*r)/r,t(i)),e},e}function linear_linear(){var e=continuous(deinterpolateLinear,ge);return e.copy=function(){return copy(e,linear_linear())},linearish(e)}function identity_identity(){var e=[0,1];function scale(e){return+e}return scale.invert=scale,scale.domain=scale.range=function(t){return arguments.length?(e=j.call(t,De),scale):e.slice()},scale.copy=function(){return identity_identity().domain(e)},linearish(scale)}var Ze=function(e,t){var n,r=0,i=(e=e.slice()).length-1,a=e[r],o=e[i];return o0){for(;hc)break;y.push(f)}}else for(;h=1;--l)if(!((f=s*l)c)break;y.push(f)}}else y=E(h,d,Math.min(d-h,p)).map(i);return a?y.reverse():y},e.tickFormat=function(t,a){if(null==a&&(a=10===n?".0e":","),"function"!=typeof a&&(a=Ue(a)),t===1/0)return a;null==t&&(t=10);var o=Math.max(1,n*t/e.ticks().length);return function(e){var t=e/i(Math.round(r(e)));return t*n0?n[i-1]:e[0],i=n?[r[n-1],t]:[r[o-1],r[o]]},scale.copy=function(){return quantize_quantize().domain([e,t]).range(i)},linearish(scale)}function threshold_threshold(){var e=[.5],t=[0,1],n=1;function scale(r){if(r<=r)return t[x(e,r,0,n)]}return scale.domain=function(r){return arguments.length?(e=I.call(r),n=Math.min(e.length,t.length-1),scale):e.slice()},scale.range=function(r){return arguments.length?(t=I.call(r),n=Math.min(e.length,t.length-1),scale):t.slice()},scale.invertExtent=function(n){var r=t.indexOf(n);return[e[r-1],e[r]]},scale.copy=function(){return threshold_threshold().domain(e).range(t)},scale}var Je=new Date,et=new Date;function newInterval(e,t,n,r){function interval(t){return e(t=new Date(+t)),t}return interval.floor=interval,interval.ceil=function(n){return e(n=new Date(n-1)),t(n,1),e(n),n},interval.round=function(e){var t=interval(e),n=interval.ceil(e);return e-t0))return o;do{o.push(a=new Date(+n)),t(n,i),e(n)}while(a=t)for(;e(t),!n(t);)t.setTime(t-1)},function(e,r){if(e>=e)if(r<0)for(;++r<=0;)for(;t(e,-1),!n(e););else for(;--r>=0;)for(;t(e,1),!n(e););})},n&&(interval.count=function(t,r){return Je.setTime(+t),et.setTime(+r),e(Je),e(et),Math.floor(n(Je,et))},interval.every=function(e){return e=Math.floor(e),isFinite(e)&&e>0?e>1?interval.filter(r?function(t){return r(t)%e==0}:function(t){return interval.count(0,t)%e==0}):interval:null}),interval}var tt=newInterval(function(){},function(e,t){e.setTime(+e+t)},function(e,t){return t-e});tt.every=function(e){return e=Math.floor(e),isFinite(e)&&e>0?e>1?newInterval(function(t){t.setTime(Math.floor(t/e)*e)},function(t,n){t.setTime(+t+n*e)},function(t,n){return(n-t)/e}):tt:null};var nt=tt,rt=(tt.range,6e4),it=6048e5,at=newInterval(function(e){e.setTime(1e3*Math.floor(e/1e3))},function(e,t){e.setTime(+e+1e3*t)},function(e,t){return(t-e)/1e3},function(e){return e.getUTCSeconds()}),ot=at,ut=(at.range,newInterval(function(e){e.setTime(Math.floor(e/rt)*rt)},function(e,t){e.setTime(+e+t*rt)},function(e,t){return(t-e)/rt},function(e){return e.getMinutes()})),ct=ut,st=(ut.range,newInterval(function(e){var t=e.getTimezoneOffset()*rt%36e5;t<0&&(t+=36e5),e.setTime(36e5*Math.floor((+e-t)/36e5)+t)},function(e,t){e.setTime(+e+36e5*t)},function(e,t){return(t-e)/36e5},function(e){return e.getHours()})),lt=st,ft=(st.range,newInterval(function(e){e.setHours(0,0,0,0)},function(e,t){e.setDate(e.getDate()+t)},function(e,t){return(t-e-(t.getTimezoneOffset()-e.getTimezoneOffset())*rt)/864e5},function(e){return e.getDate()-1})),ht=ft;ft.range;function weekday(e){return newInterval(function(t){t.setDate(t.getDate()-(t.getDay()+7-e)%7),t.setHours(0,0,0,0)},function(e,t){e.setDate(e.getDate()+7*t)},function(e,t){return(t-e-(t.getTimezoneOffset()-e.getTimezoneOffset())*rt)/it})}var dt=weekday(0),pt=weekday(1),yt=weekday(2),gt=weekday(3),vt=weekday(4),mt=weekday(5),bt=weekday(6),_t=(dt.range,pt.range,yt.range,gt.range,vt.range,mt.range,bt.range,newInterval(function(e){e.setDate(1),e.setHours(0,0,0,0)},function(e,t){e.setMonth(e.getMonth()+t)},function(e,t){return t.getMonth()-e.getMonth()+12*(t.getFullYear()-e.getFullYear())},function(e){return e.getMonth()})),xt=_t,wt=(_t.range,newInterval(function(e){e.setMonth(0,1),e.setHours(0,0,0,0)},function(e,t){e.setFullYear(e.getFullYear()+t)},function(e,t){return t.getFullYear()-e.getFullYear()},function(e){return e.getFullYear()}));wt.every=function(e){return isFinite(e=Math.floor(e))&&e>0?newInterval(function(t){t.setFullYear(Math.floor(t.getFullYear()/e)*e),t.setMonth(0,1),t.setHours(0,0,0,0)},function(t,n){t.setFullYear(t.getFullYear()+n*e)}):null};var Ct=wt,kt=(wt.range,newInterval(function(e){e.setUTCSeconds(0,0)},function(e,t){e.setTime(+e+t*rt)},function(e,t){return(t-e)/rt},function(e){return e.getUTCMinutes()})),St=(kt.range,newInterval(function(e){e.setUTCMinutes(0,0,0)},function(e,t){e.setTime(+e+36e5*t)},function(e,t){return(t-e)/36e5},function(e){return e.getUTCHours()})),Pt=(St.range,newInterval(function(e){e.setUTCHours(0,0,0,0)},function(e,t){e.setUTCDate(e.getUTCDate()+t)},function(e,t){return(t-e)/864e5},function(e){return e.getUTCDate()-1})),At=Pt;Pt.range;function utcWeekday(e){return newInterval(function(t){t.setUTCDate(t.getUTCDate()-(t.getUTCDay()+7-e)%7),t.setUTCHours(0,0,0,0)},function(e,t){e.setUTCDate(e.getUTCDate()+7*t)},function(e,t){return(t-e)/it})}var Et=utcWeekday(0),Mt=utcWeekday(1),Ot=utcWeekday(2),Tt=utcWeekday(3),Ft=utcWeekday(4),Nt=utcWeekday(5),jt=utcWeekday(6),It=(Et.range,Mt.range,Ot.range,Tt.range,Ft.range,Nt.range,jt.range,newInterval(function(e){e.setUTCDate(1),e.setUTCHours(0,0,0,0)},function(e,t){e.setUTCMonth(e.getUTCMonth()+t)},function(e,t){return t.getUTCMonth()-e.getUTCMonth()+12*(t.getUTCFullYear()-e.getUTCFullYear())},function(e){return e.getUTCMonth()})),Dt=(It.range,newInterval(function(e){e.setUTCMonth(0,1),e.setUTCHours(0,0,0,0)},function(e,t){e.setUTCFullYear(e.getUTCFullYear()+t)},function(e,t){return t.getUTCFullYear()-e.getUTCFullYear()},function(e){return e.getUTCFullYear()}));Dt.every=function(e){return isFinite(e=Math.floor(e))&&e>0?newInterval(function(t){t.setUTCFullYear(Math.floor(t.getUTCFullYear()/e)*e),t.setUTCMonth(0,1),t.setUTCHours(0,0,0,0)},function(t,n){t.setUTCFullYear(t.getUTCFullYear()+n*e)}):null};var Lt=Dt;Dt.range;function localDate(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 utcDate(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 newYear(e){return{y:e,m:0,d:1,H:0,M:0,S:0,L:0}}var Rt,Bt,zt,Ht,Vt={"-":"",_:" ",0:"0"},Ut=/^\s*\d+/,Wt=/^%/,qt=/[\\^$*+?|[\]().{}]/g;function locale_pad(e,t,n){var r=e<0?"-":"",i=(r?-e:e)+"",a=i.length;return r+(a68?1900:2e3),n+r[0].length):-1}function parseZone(e,t,n){var r=/^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(t.slice(n,n+6));return r?(e.Z=r[1]?0:-(r[2]+(r[3]||"00")),n+r[0].length):-1}function parseMonthNumber(e,t,n){var r=Ut.exec(t.slice(n,n+2));return r?(e.m=r[0]-1,n+r[0].length):-1}function parseDayOfMonth(e,t,n){var r=Ut.exec(t.slice(n,n+2));return r?(e.d=+r[0],n+r[0].length):-1}function parseDayOfYear(e,t,n){var r=Ut.exec(t.slice(n,n+3));return r?(e.m=0,e.d=+r[0],n+r[0].length):-1}function parseHour24(e,t,n){var r=Ut.exec(t.slice(n,n+2));return r?(e.H=+r[0],n+r[0].length):-1}function parseMinutes(e,t,n){var r=Ut.exec(t.slice(n,n+2));return r?(e.M=+r[0],n+r[0].length):-1}function parseSeconds(e,t,n){var r=Ut.exec(t.slice(n,n+2));return r?(e.S=+r[0],n+r[0].length):-1}function parseMilliseconds(e,t,n){var r=Ut.exec(t.slice(n,n+3));return r?(e.L=+r[0],n+r[0].length):-1}function parseMicroseconds(e,t,n){var r=Ut.exec(t.slice(n,n+6));return r?(e.L=Math.floor(r[0]/1e3),n+r[0].length):-1}function parseLiteralPercent(e,t,n){var r=Wt.exec(t.slice(n,n+1));return r?n+r[0].length:-1}function parseUnixTimestamp(e,t,n){var r=Ut.exec(t.slice(n));return r?(e.Q=+r[0],n+r[0].length):-1}function parseUnixTimestampSeconds(e,t,n){var r=Ut.exec(t.slice(n));return r?(e.Q=1e3*+r[0],n+r[0].length):-1}function formatDayOfMonth(e,t){return locale_pad(e.getDate(),t,2)}function formatHour24(e,t){return locale_pad(e.getHours(),t,2)}function formatHour12(e,t){return locale_pad(e.getHours()%12||12,t,2)}function formatDayOfYear(e,t){return locale_pad(1+ht.count(Ct(e),e),t,3)}function formatMilliseconds(e,t){return locale_pad(e.getMilliseconds(),t,3)}function formatMicroseconds(e,t){return formatMilliseconds(e,t)+"000"}function formatMonthNumber(e,t){return locale_pad(e.getMonth()+1,t,2)}function formatMinutes(e,t){return locale_pad(e.getMinutes(),t,2)}function formatSeconds(e,t){return locale_pad(e.getSeconds(),t,2)}function formatWeekdayNumberMonday(e){var t=e.getDay();return 0===t?7:t}function formatWeekNumberSunday(e,t){return locale_pad(dt.count(Ct(e),e),t,2)}function formatWeekNumberISO(e,t){var n=e.getDay();return e=n>=4||0===n?vt(e):vt.ceil(e),locale_pad(vt.count(Ct(e),e)+(4===Ct(e).getDay()),t,2)}function formatWeekdayNumberSunday(e){return e.getDay()}function formatWeekNumberMonday(e,t){return locale_pad(pt.count(Ct(e),e),t,2)}function locale_formatYear(e,t){return locale_pad(e.getFullYear()%100,t,2)}function formatFullYear(e,t){return locale_pad(e.getFullYear()%1e4,t,4)}function formatZone(e){var t=e.getTimezoneOffset();return(t>0?"-":(t*=-1,"+"))+locale_pad(t/60|0,"0",2)+locale_pad(t%60,"0",2)}function formatUTCDayOfMonth(e,t){return locale_pad(e.getUTCDate(),t,2)}function formatUTCHour24(e,t){return locale_pad(e.getUTCHours(),t,2)}function formatUTCHour12(e,t){return locale_pad(e.getUTCHours()%12||12,t,2)}function formatUTCDayOfYear(e,t){return locale_pad(1+At.count(Lt(e),e),t,3)}function formatUTCMilliseconds(e,t){return locale_pad(e.getUTCMilliseconds(),t,3)}function formatUTCMicroseconds(e,t){return formatUTCMilliseconds(e,t)+"000"}function formatUTCMonthNumber(e,t){return locale_pad(e.getUTCMonth()+1,t,2)}function formatUTCMinutes(e,t){return locale_pad(e.getUTCMinutes(),t,2)}function formatUTCSeconds(e,t){return locale_pad(e.getUTCSeconds(),t,2)}function formatUTCWeekdayNumberMonday(e){var t=e.getUTCDay();return 0===t?7:t}function formatUTCWeekNumberSunday(e,t){return locale_pad(Et.count(Lt(e),e),t,2)}function formatUTCWeekNumberISO(e,t){var n=e.getUTCDay();return e=n>=4||0===n?Ft(e):Ft.ceil(e),locale_pad(Ft.count(Lt(e),e)+(4===Lt(e).getUTCDay()),t,2)}function formatUTCWeekdayNumberSunday(e){return e.getUTCDay()}function formatUTCWeekNumberMonday(e,t){return locale_pad(Mt.count(Lt(e),e),t,2)}function formatUTCYear(e,t){return locale_pad(e.getUTCFullYear()%100,t,2)}function formatUTCFullYear(e,t){return locale_pad(e.getUTCFullYear()%1e4,t,4)}function formatUTCZone(){return"+0000"}function formatLiteralPercent(){return"%"}function formatUnixTimestamp(e){return+e}function formatUnixTimestampSeconds(e){return Math.floor(+e/1e3)}!function defaultLocale_defaultLocale(e){return Rt=function formatLocale(e){var t=e.dateTime,n=e.date,r=e.time,i=e.periods,a=e.days,o=e.shortDays,u=e.months,c=e.shortMonths,s=formatRe(i),l=formatLookup(i),f=formatRe(a),h=formatLookup(a),d=formatRe(o),p=formatLookup(o),y=formatRe(u),g=formatLookup(u),v=formatRe(c),m=formatLookup(c),b={a:function formatShortWeekday(e){return o[e.getDay()]},A:function formatWeekday(e){return a[e.getDay()]},b:function formatShortMonth(e){return c[e.getMonth()]},B:function formatMonth(e){return u[e.getMonth()]},c:null,d:formatDayOfMonth,e:formatDayOfMonth,f:formatMicroseconds,H:formatHour24,I:formatHour12,j:formatDayOfYear,L:formatMilliseconds,m:formatMonthNumber,M:formatMinutes,p:function formatPeriod(e){return i[+(e.getHours()>=12)]},Q:formatUnixTimestamp,s:formatUnixTimestampSeconds,S:formatSeconds,u:formatWeekdayNumberMonday,U:formatWeekNumberSunday,V:formatWeekNumberISO,w:formatWeekdayNumberSunday,W:formatWeekNumberMonday,x:null,X:null,y:locale_formatYear,Y:formatFullYear,Z:formatZone,"%":formatLiteralPercent},_={a:function formatUTCShortWeekday(e){return o[e.getUTCDay()]},A:function formatUTCWeekday(e){return a[e.getUTCDay()]},b:function formatUTCShortMonth(e){return c[e.getUTCMonth()]},B:function formatUTCMonth(e){return u[e.getUTCMonth()]},c:null,d:formatUTCDayOfMonth,e:formatUTCDayOfMonth,f:formatUTCMicroseconds,H:formatUTCHour24,I:formatUTCHour12,j:formatUTCDayOfYear,L:formatUTCMilliseconds,m:formatUTCMonthNumber,M:formatUTCMinutes,p:function formatUTCPeriod(e){return i[+(e.getUTCHours()>=12)]},Q:formatUnixTimestamp,s:formatUnixTimestampSeconds,S:formatUTCSeconds,u:formatUTCWeekdayNumberMonday,U:formatUTCWeekNumberSunday,V:formatUTCWeekNumberISO,w:formatUTCWeekdayNumberSunday,W:formatUTCWeekNumberMonday,x:null,X:null,y:formatUTCYear,Y:formatUTCFullYear,Z:formatUTCZone,"%":formatLiteralPercent},x={a:function parseShortWeekday(e,t,n){var r=d.exec(t.slice(n));return r?(e.w=p[r[0].toLowerCase()],n+r[0].length):-1},A:function parseWeekday(e,t,n){var r=f.exec(t.slice(n));return r?(e.w=h[r[0].toLowerCase()],n+r[0].length):-1},b:function parseShortMonth(e,t,n){var r=v.exec(t.slice(n));return r?(e.m=m[r[0].toLowerCase()],n+r[0].length):-1},B:function parseMonth(e,t,n){var r=y.exec(t.slice(n));return r?(e.m=g[r[0].toLowerCase()],n+r[0].length):-1},c:function parseLocaleDateTime(e,n,r){return parseSpecifier(e,t,n,r)},d:parseDayOfMonth,e:parseDayOfMonth,f:parseMicroseconds,H:parseHour24,I:parseHour24,j:parseDayOfYear,L:parseMilliseconds,m:parseMonthNumber,M:parseMinutes,p:function parsePeriod(e,t,n){var r=s.exec(t.slice(n));return r?(e.p=l[r[0].toLowerCase()],n+r[0].length):-1},Q:parseUnixTimestamp,s:parseUnixTimestampSeconds,S:parseSeconds,u:parseWeekdayNumberMonday,U:parseWeekNumberSunday,V:parseWeekNumberISO,w:parseWeekdayNumberSunday,W:parseWeekNumberMonday,x:function parseLocaleDate(e,t,r){return parseSpecifier(e,n,t,r)},X:function parseLocaleTime(e,t,n){return parseSpecifier(e,r,t,n)},y:parseYear,Y:parseFullYear,Z:parseZone,"%":parseLiteralPercent};function newFormat(e,t){return function(n){var r,i,a,o=[],u=-1,c=0,s=e.length;for(n instanceof Date||(n=new Date(+n));++u53)return null;"w"in a||(a.w=1),"Z"in a?(r=(i=(r=utcDate(newYear(a.y))).getUTCDay())>4||0===i?Mt.ceil(r):Mt(r),r=At.offset(r,7*(a.V-1)),a.y=r.getUTCFullYear(),a.m=r.getUTCMonth(),a.d=r.getUTCDate()+(a.w+6)%7):(r=(i=(r=t(newYear(a.y))).getDay())>4||0===i?pt.ceil(r):pt(r),r=ht.offset(r,7*(a.V-1)),a.y=r.getFullYear(),a.m=r.getMonth(),a.d=r.getDate()+(a.w+6)%7)}else("W"in a||"U"in a)&&("w"in a||(a.w="u"in a?a.u%7:"W"in a?1:0),i="Z"in a?utcDate(newYear(a.y)).getUTCDay():t(newYear(a.y)).getDay(),a.m=0,a.d="W"in a?(a.w+6)%7+7*a.W-(i+5)%7:a.w+7*a.U-(i+6)%7);return"Z"in a?(a.H+=a.Z/100|0,a.M+=a.Z%100,utcDate(a)):t(a)}}function parseSpecifier(e,t,n,r){for(var i,a,o=0,u=t.length,c=n.length;o=c)return-1;if(37===(i=t.charCodeAt(o++))){if(i=t.charAt(o++),!(a=x[i in Vt?t.charAt(o++):i])||(r=a(e,n,r))<0)return-1}else if(i!=n.charCodeAt(r++))return-1}return r}return b.x=newFormat(n,b),b.X=newFormat(r,b),b.c=newFormat(t,b),_.x=newFormat(n,_),_.X=newFormat(r,_),_.c=newFormat(t,_),{format:function format(e){var t=newFormat(e+="",b);return t.toString=function(){return e},t},parse:function parse(e){var t=newParse(e+="",localDate);return t.toString=function(){return e},t},utcFormat:function utcFormat(e){var t=newFormat(e+="",_);return t.toString=function(){return e},t},utcParse:function utcParse(e){var t=newParse(e,utcDate);return t.toString=function(){return e},t}}}(e),Bt=Rt.format,Rt.parse,zt=Rt.utcFormat,Ht=Rt.utcParse,Rt}({dateTime:"%x, %X",date:"%-m/%-d/%Y",time:"%-I:%M:%S %p",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"]});Date.prototype.toISOString||zt("%Y-%m-%dT%H:%M:%S.%LZ");+new Date("2000-01-01T00:00:00.000Z")||Ht("%Y-%m-%dT%H:%M:%S.%LZ");var Gt=1e3,Yt=60*Gt,Xt=60*Yt,Kt=24*Xt,$t=7*Kt,Qt=30*Kt,Zt=365*Kt;function time_date(e){return new Date(e)}function time_number(e){return e instanceof Date?+e:+new Date(+e)}function calendar(e,t,n,r,i,a,o,u,c){var s=continuous(deinterpolateLinear,ge),l=s.invert,f=s.domain,h=c(".%L"),d=c(":%S"),p=c("%I:%M"),y=c("%I %p"),g=c("%a %d"),v=c("%b %d"),b=c("%B"),_=c("%Y"),x=[[o,1,Gt],[o,5,5*Gt],[o,15,15*Gt],[o,30,30*Gt],[a,1,Yt],[a,5,5*Yt],[a,15,15*Yt],[a,30,30*Yt],[i,1,Xt],[i,3,3*Xt],[i,6,6*Xt],[i,12,12*Xt],[r,1,Kt],[r,2,2*Kt],[n,1,$t],[t,1,Qt],[t,3,3*Qt],[e,1,Zt]];function tickFormat(u){return(o(u)1)&&(e-=Math.floor(e));var t=Math.abs(e-.5);return $n.h=360*e-100,$n.s=1.5-1.5*t,$n.l=.8-.9*t,$n+""};color_rgb(),Math.PI,Math.PI;function viridis_ramp(e){var t=e.length;return function(n){return e[Math.max(0,Math.min(t-1,Math.floor(n*t)))]}}var Zn=viridis_ramp(an("44015444025645045745055946075a46085c460a5d460b5e470d60470e6147106347116447136548146748166848176948186a481a6c481b6d481c6e481d6f481f70482071482173482374482475482576482677482878482979472a7a472c7a472d7b472e7c472f7d46307e46327e46337f463480453581453781453882443983443a83443b84433d84433e85423f854240864241864142874144874045884046883f47883f48893e49893e4a893e4c8a3d4d8a3d4e8a3c4f8a3c508b3b518b3b528b3a538b3a548c39558c39568c38588c38598c375a8c375b8d365c8d365d8d355e8d355f8d34608d34618d33628d33638d32648e32658e31668e31678e31688e30698e306a8e2f6b8e2f6c8e2e6d8e2e6e8e2e6f8e2d708e2d718e2c718e2c728e2c738e2b748e2b758e2a768e2a778e2a788e29798e297a8e297b8e287c8e287d8e277e8e277f8e27808e26818e26828e26828e25838e25848e25858e24868e24878e23888e23898e238a8d228b8d228c8d228d8d218e8d218f8d21908d21918c20928c20928c20938c1f948c1f958b1f968b1f978b1f988b1f998a1f9a8a1e9b8a1e9c891e9d891f9e891f9f881fa0881fa1881fa1871fa28720a38620a48621a58521a68522a78522a88423a98324aa8325ab8225ac8226ad8127ad8128ae8029af7f2ab07f2cb17e2db27d2eb37c2fb47c31b57b32b67a34b67935b77937b87838b9773aba763bbb753dbc743fbc7340bd7242be7144bf7046c06f48c16e4ac16d4cc26c4ec36b50c46a52c56954c56856c66758c7655ac8645cc8635ec96260ca6063cb5f65cb5e67cc5c69cd5b6ccd5a6ece5870cf5773d05675d05477d1537ad1517cd2507fd34e81d34d84d44b86d54989d5488bd6468ed64590d74393d74195d84098d83e9bd93c9dd93ba0da39a2da37a5db36a8db34aadc32addc30b0dd2fb2dd2db5de2bb8de29bade28bddf26c0df25c2df23c5e021c8e020cae11fcde11dd0e11cd2e21bd5e21ad8e219dae319dde318dfe318e2e418e5e419e7e419eae51aece51befe51cf1e51df4e61ef6e620f8e621fbe723fde725")),Jn=viridis_ramp(an("00000401000501010601010802010902020b02020d03030f03031204041405041606051806051a07061c08071e0907200a08220b09240c09260d0a290e0b2b100b2d110c2f120d31130d34140e36150e38160f3b180f3d19103f1a10421c10441d11471e114920114b21114e22115024125325125527125829115a2a115c2c115f2d11612f116331116533106734106936106b38106c390f6e3b0f703d0f713f0f72400f74420f75440f764510774710784910784a10794c117a4e117b4f127b51127c52137c54137d56147d57157e59157e5a167e5c167f5d177f5f187f601880621980641a80651a80671b80681c816a1c816b1d816d1d816e1e81701f81721f817320817521817621817822817922827b23827c23827e24828025828125818326818426818627818827818928818b29818c29818e2a81902a81912b81932b80942c80962c80982d80992d809b2e7f9c2e7f9e2f7fa02f7fa1307ea3307ea5317ea6317da8327daa337dab337cad347cae347bb0357bb2357bb3367ab5367ab73779b83779ba3878bc3978bd3977bf3a77c03a76c23b75c43c75c53c74c73d73c83e73ca3e72cc3f71cd4071cf4070d0416fd2426fd3436ed5446dd6456cd8456cd9466bdb476adc4869de4968df4a68e04c67e24d66e34e65e44f64e55064e75263e85362e95462ea5661eb5760ec5860ed5a5fee5b5eef5d5ef05f5ef1605df2625df2645cf3655cf4675cf4695cf56b5cf66c5cf66e5cf7705cf7725cf8745cf8765cf9785df9795df97b5dfa7d5efa7f5efa815ffb835ffb8560fb8761fc8961fc8a62fc8c63fc8e64fc9065fd9266fd9467fd9668fd9869fd9a6afd9b6bfe9d6cfe9f6dfea16efea36ffea571fea772fea973feaa74feac76feae77feb078feb27afeb47bfeb67cfeb77efeb97ffebb81febd82febf84fec185fec287fec488fec68afec88cfeca8dfecc8ffecd90fecf92fed194fed395fed597fed799fed89afdda9cfddc9efddea0fde0a1fde2a3fde3a5fde5a7fde7a9fde9aafdebacfcecaefceeb0fcf0b2fcf2b4fcf4b6fcf6b8fcf7b9fcf9bbfcfbbdfcfdbf")),er=viridis_ramp(an("00000401000501010601010802010a02020c02020e03021004031204031405041706041907051b08051d09061f0a07220b07240c08260d08290e092b10092d110a30120a32140b34150b37160b39180c3c190c3e1b0c411c0c431e0c451f0c48210c4a230c4c240c4f260c51280b53290b552b0b572d0b592f0a5b310a5c320a5e340a5f3609613809623909633b09643d09653e0966400a67420a68440a68450a69470b6a490b6a4a0c6b4c0c6b4d0d6c4f0d6c510e6c520e6d540f6d550f6d57106e59106e5a116e5c126e5d126e5f136e61136e62146e64156e65156e67166e69166e6a176e6c186e6d186e6f196e71196e721a6e741a6e751b6e771c6d781c6d7a1d6d7c1d6d7d1e6d7f1e6c801f6c82206c84206b85216b87216b88226a8a226a8c23698d23698f24699025689225689326679526679727669827669a28659b29649d29649f2a63a02a63a22b62a32c61a52c60a62d60a82e5fa92e5eab2f5ead305dae305cb0315bb1325ab3325ab43359b63458b73557b93556ba3655bc3754bd3853bf3952c03a51c13a50c33b4fc43c4ec63d4dc73e4cc83f4bca404acb4149cc4248ce4347cf4446d04545d24644d34743d44842d54a41d74b3fd84c3ed94d3dda4e3cdb503bdd513ade5238df5337e05536e15635e25734e35933e45a31e55c30e65d2fe75e2ee8602de9612bea632aeb6429eb6628ec6726ed6925ee6a24ef6c23ef6e21f06f20f1711ff1731df2741cf3761bf37819f47918f57b17f57d15f67e14f68013f78212f78410f8850ff8870ef8890cf98b0bf98c0af98e09fa9008fa9207fa9407fb9606fb9706fb9906fb9b06fb9d07fc9f07fca108fca309fca50afca60cfca80dfcaa0ffcac11fcae12fcb014fcb216fcb418fbb61afbb81dfbba1ffbbc21fbbe23fac026fac228fac42afac62df9c72ff9c932f9cb35f8cd37f8cf3af7d13df7d340f6d543f6d746f5d949f5db4cf4dd4ff4df53f4e156f3e35af3e55df2e661f2e865f2ea69f1ec6df1ed71f1ef75f1f179f2f27df2f482f3f586f3f68af4f88ef5f992f6fa96f8fb9af9fc9dfafda1fcffa4")),tr=viridis_ramp(an("0d088710078813078916078a19068c1b068d1d068e20068f2206902406912605912805922a05932c05942e05952f059631059733059735049837049938049a3a049a3c049b3e049c3f049c41049d43039e44039e46039f48039f4903a04b03a14c02a14e02a25002a25102a35302a35502a45601a45801a45901a55b01a55c01a65e01a66001a66100a76300a76400a76600a76700a86900a86a00a86c00a86e00a86f00a87100a87201a87401a87501a87701a87801a87a02a87b02a87d03a87e03a88004a88104a78305a78405a78606a68707a68808a68a09a58b0aa58d0ba58e0ca48f0da4910ea3920fa39410a29511a19613a19814a099159f9a169f9c179e9d189d9e199da01a9ca11b9ba21d9aa31e9aa51f99a62098a72197a82296aa2395ab2494ac2694ad2793ae2892b02991b12a90b22b8fb32c8eb42e8db52f8cb6308bb7318ab83289ba3388bb3488bc3587bd3786be3885bf3984c03a83c13b82c23c81c33d80c43e7fc5407ec6417dc7427cc8437bc9447aca457acb4679cc4778cc4977cd4a76ce4b75cf4c74d04d73d14e72d24f71d35171d45270d5536fd5546ed6556dd7566cd8576bd9586ada5a6ada5b69db5c68dc5d67dd5e66de5f65de6164df6263e06363e16462e26561e26660e3685fe4695ee56a5de56b5de66c5ce76e5be76f5ae87059e97158e97257ea7457eb7556eb7655ec7754ed7953ed7a52ee7b51ef7c51ef7e50f07f4ff0804ef1814df1834cf2844bf3854bf3874af48849f48948f58b47f58c46f68d45f68f44f79044f79143f79342f89441f89540f9973ff9983ef99a3efa9b3dfa9c3cfa9e3bfb9f3afba139fba238fca338fca537fca636fca835fca934fdab33fdac33fdae32fdaf31fdb130fdb22ffdb42ffdb52efeb72dfeb82cfeba2cfebb2bfebd2afebe2afec029fdc229fdc328fdc527fdc627fdc827fdca26fdcb26fccd25fcce25fcd025fcd225fbd324fbd524fbd724fad824fada24f9dc24f9dd25f8df25f8e125f7e225f7e425f6e626f6e826f5e926f5eb27f4ed27f3ee27f3f027f2f227f1f426f1f525f0f724f0f921")),nr={ROW_ID:"__id__"},rr={ACTION_INF:"actionInf",ON_LAYER_DRAW:"onlayerdraw"},ir=n(0),ar=n.n(ir),or=Array.prototype.slice,ur=function(e){return e},cr=1,sr=2,lr=3,fr=4,hr=1e-6;function translateX(e){return"translate("+(e+.5)+",0)"}function translateY(e){return"translate(0,"+(e+.5)+")"}function entering(){return!this.__axis}function axis_axis(e,t){var n=[],r=null,i=null,a=null,o=6,u=6,c=3,s=e===cr||e===fr?-1:1,l=e===fr||e===sr?"x":"y",f=e===cr||e===lr?translateX:translateY;function axis(h){var d=null==r?t.ticks?t.ticks.apply(t,n):t.domain():r,p=null==i?t.tickFormat?t.tickFormat.apply(t,n):ur:i,y=Math.max(o,0)+c,g=t.range(),v=+g[0]+.5,m=+g[g.length-1]+.5,b=(t.bandwidth?function axis_center(e){var t=Math.max(0,e.bandwidth()-1)/2;return e.round()&&(t=Math.round(t)),function(n){return+e(n)+t}}:function axis_number(e){return function(t){return+e(t)}})(t.copy()),_=h.selection?h.selection():h,x=_.selectAll(".domain").data([null]),w=_.selectAll(".tick").data(d,t).order(),C=w.exit(),k=w.enter().append("g").attr("class","tick"),S=w.select("line"),P=w.select("text");x=x.merge(x.enter().insert("path",".tick").attr("class","domain").attr("stroke","#000")),w=w.merge(k),S=S.merge(k.append("line").attr("stroke","#000").attr(l+"2",s*o)),P=P.merge(k.append("text").attr("fill","#000").attr(l,s*y).attr("dy",e===cr?"0em":e===lr?"0.71em":"0.32em")).style("transform",a),h!==_&&(x=x.transition(h),w=w.transition(h),S=S.transition(h),P=P.transition(h),C=C.transition(h).attr("opacity",hr).attr("transform",function(e){return isFinite(e=b(e))?f(e):this.getAttribute("transform")}),k.attr("opacity",hr).attr("transform",function(e){var t=this.parentNode.__axis;return f(t&&isFinite(t=t(e))?t:b(e))})),C.remove(),x.attr("d",e===fr||e==sr?"M"+s*u+","+v+"H0.5V"+m+"H"+s*u:"M"+v+","+s*u+"V0.5H"+m+"V"+s*u),w.attr("opacity",1).attr("transform",function(e){return f(b(e))}),S.attr(l+"2",s*o),P.attr(l,s*y).text(p),_.filter(entering).attr("fill","none").attr("font-size",10).attr("font-family","sans-serif").attr("text-anchor",e===sr?"start":e===fr?"end":"middle"),_.each(function(){this.__axis=b})}return axis.scale=function(e){return arguments.length?(t=e,axis):t},axis.tickTransform=function(e){return arguments.length?(a=e,axis):a},axis.ticks=function(){return n=or.call(arguments),axis},axis.tickArguments=function(e){return arguments.length?(n=null==e?[]:or.call(e),axis):n.slice()},axis.tickValues=function(e){return arguments.length?(r=null==e?null:or.call(e),axis):r&&r.slice()},axis.tickFormat=function(e){return arguments.length?(i=e,axis):i},axis.tickSize=function(e){return arguments.length?(o=u=+e,axis):o},axis.tickSizeInner=function(e){return arguments.length?(o=+e,axis):o},axis.tickSizeOuter=function(e){return arguments.length?(u=+e,axis):u},axis.tickPadding=function(e){return arguments.length?(c=+e,axis):c},axis}var dr=Math.PI,pr=2*dr,yr=pr-1e-6;function Path(){this._x0=this._y0=this._x1=this._y1=null,this._=""}function path_path(){return new Path}Path.prototype=path_path.prototype={constructor:Path,moveTo:function moveTo(e,t){this._+="M"+(this._x0=this._x1=+e)+","+(this._y0=this._y1=+t)},closePath:function closePath(){null!==this._x1&&(this._x1=this._x0,this._y1=this._y0,this._+="Z")},lineTo:function lineTo(e,t){this._+="L"+(this._x1=+e)+","+(this._y1=+t)},quadraticCurveTo:function quadraticCurveTo(e,t,n,r){this._+="Q"+ +e+","+ +t+","+(this._x1=+n)+","+(this._y1=+r)},bezierCurveTo:function bezierCurveTo(e,t,n,r,i,a){this._+="C"+ +e+","+ +t+","+ +n+","+ +r+","+(this._x1=+i)+","+(this._y1=+a)},arcTo:function arcTo(e,t,n,r,i){e=+e,t=+t,n=+n,r=+r,i=+i;var a=this._x1,o=this._y1,u=n-e,c=r-t,s=a-e,l=o-t,f=s*s+l*l;if(i<0)throw new Error("negative radius: "+i);if(null===this._x1)this._+="M"+(this._x1=e)+","+(this._y1=t);else if(f>1e-6)if(Math.abs(l*u-c*s)>1e-6&&i){var h=n-a,d=r-o,p=u*u+c*c,y=h*h+d*d,g=Math.sqrt(p),v=Math.sqrt(f),m=i*Math.tan((dr-Math.acos((p+f-y)/(2*g*v)))/2),b=m/v,_=m/g;Math.abs(b-1)>1e-6&&(this._+="L"+(e+b*s)+","+(t+b*l)),this._+="A"+i+","+i+",0,0,"+ +(l*h>s*d)+","+(this._x1=e+_*u)+","+(this._y1=t+_*c)}else this._+="L"+(this._x1=e)+","+(this._y1=t);else;},arc:function arc(e,t,n,r,i,a){e=+e,t=+t;var o=(n=+n)*Math.cos(r),u=n*Math.sin(r),c=e+o,s=t+u,l=1^a,f=a?r-i:i-r;if(n<0)throw new Error("negative radius: "+n);null===this._x1?this._+="M"+c+","+s:(Math.abs(this._x1-c)>1e-6||Math.abs(this._y1-s)>1e-6)&&(this._+="L"+c+","+s),n&&(f<0&&(f=f%pr+pr),f>yr?this._+="A"+n+","+n+",0,1,"+l+","+(e-o)+","+(t-u)+"A"+n+","+n+",0,1,"+l+","+(this._x1=c)+","+(this._y1=s):f>1e-6&&(this._+="A"+n+","+n+",0,"+ +(f>=dr)+","+l+","+(this._x1=e+n*Math.cos(i))+","+(this._y1=t+n*Math.sin(i))))},rect:function rect(e,t,n,r){this._+="M"+(this._x0=this._x1=+e)+","+(this._y0=this._y1=+t)+"h"+ +n+"v"+ +r+"h"+-n+"Z"},toString:function toString(){return this._}};var gr=path_path,vr=function(e){return function constant(){return e}},mr=Math.abs,br=Math.atan2,_r=Math.cos,xr=Math.max,wr=Math.min,Cr=Math.sin,kr=Math.sqrt,Sr=1e-12,Pr=Math.PI,Ar=Pr/2,Er=2*Pr;function asin(e){return e>=1?Ar:e<=-1?-Ar:Math.asin(e)}function arcInnerRadius(e){return e.innerRadius}function arcOuterRadius(e){return e.outerRadius}function arcStartAngle(e){return e.startAngle}function arcEndAngle(e){return e.endAngle}function arcPadAngle(e){return e&&e.padAngle}function cornerTangents(e,t,n,r,i,a,o){var u=e-n,c=t-r,s=(o?a:-a)/kr(u*u+c*c),l=s*c,f=-s*u,h=e+l,d=t+f,p=n+l,y=r+f,g=(h+p)/2,v=(d+y)/2,m=p-h,b=y-d,_=m*m+b*b,x=i-a,w=h*y-p*d,C=(b<0?-1:1)*kr(xr(0,x*x*_-w*w)),k=(w*b-m*C)/_,S=(-w*m-b*C)/_,P=(w*b+m*C)/_,A=(-w*m+b*C)/_,E=k-g,M=S-v,O=P-g,T=A-v;return E*E+M*M>O*O+T*T&&(k=P,S=A),{cx:k,cy:S,x01:-l,y01:-f,x11:k*(i/x-1),y11:S*(i/x-1)}}function Linear(e){this._context=e}Linear.prototype={areaStart:function areaStart(){this._line=0},areaEnd:function areaEnd(){this._line=NaN},lineStart:function lineStart(){this._point=0},lineEnd:function lineEnd(){(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function point(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;default:this._context.lineTo(e,t)}}};var Mr=function(e){return new Linear(e)};function point_x(e){return e[0]}function point_y(e){return e[1]}var Or=function(){var e=point_x,t=point_y,n=vr(!0),r=null,i=Mr,a=null;function line(o){var u,c,s,l=o.length,f=!1;for(null==r&&(a=i(s=gr())),u=0;u<=l;++u)!(u=l;--f)u.point(g[f],v[f]);u.lineEnd(),u.areaEnd()}y&&(g[s]=+e(h,s,c),v[s]=+n(h,s,c),u.point(t?+t(h,s,c):g[s],r?+r(h,s,c):v[s]))}if(d)return u=null,d+""||null}function arealine(){return Or().defined(i).curve(o).context(a)}return area.x=function(n){return arguments.length?(e="function"==typeof n?n:vr(+n),t=null,area):e},area.x0=function(t){return arguments.length?(e="function"==typeof t?t:vr(+t),area):e},area.x1=function(e){return arguments.length?(t=null==e?null:"function"==typeof e?e:vr(+e),area):t},area.y=function(e){return arguments.length?(n="function"==typeof e?e:vr(+e),r=null,area):n},area.y0=function(e){return arguments.length?(n="function"==typeof e?e:vr(+e),area):n},area.y1=function(e){return arguments.length?(r=null==e?null:"function"==typeof e?e:vr(+e),area):r},area.lineX0=area.lineY0=function(){return arealine().x(e).y(n)},area.lineY1=function(){return arealine().x(e).y(r)},area.lineX1=function(){return arealine().x(t).y(n)},area.defined=function(e){return arguments.length?(i="function"==typeof e?e:vr(!!e),area):i},area.curve=function(e){return arguments.length?(o=e,null!=a&&(u=o(a)),area):o},area.context=function(e){return arguments.length?(null==e?a=u=null:u=o(a=e),area):a},area},Fr=function(e,t){return te?1:t>=e?0:NaN},Nr=function(e){return e};curveRadial(Mr);function Radial(e){this._curve=e}function curveRadial(e){function radial(t){return new Radial(e(t))}return radial._curve=e,radial}Radial.prototype={areaStart:function areaStart(){this._curve.areaStart()},areaEnd:function areaEnd(){this._curve.areaEnd()},lineStart:function lineStart(){this._curve.lineStart()},lineEnd:function lineEnd(){this._curve.lineEnd()},point:function point(e,t){this._curve.point(t*Math.sin(e),t*-Math.cos(e))}};var jr=Array.prototype.slice;var Ir={draw:function draw(e,t){var n=Math.sqrt(t/Pr);e.moveTo(n,0),e.arc(0,0,n,0,Er)}},Dr={draw:function draw(e,t){var n=Math.sqrt(t/5)/2;e.moveTo(-3*n,-n),e.lineTo(-n,-n),e.lineTo(-n,-3*n),e.lineTo(n,-3*n),e.lineTo(n,-n),e.lineTo(3*n,-n),e.lineTo(3*n,n),e.lineTo(n,n),e.lineTo(n,3*n),e.lineTo(-n,3*n),e.lineTo(-n,n),e.lineTo(-3*n,n),e.closePath()}},Lr=Math.sqrt(1/3),Rr=2*Lr,Br={draw:function draw(e,t){var n=Math.sqrt(t/Rr),r=n*Lr;e.moveTo(0,-n),e.lineTo(r,0),e.lineTo(0,n),e.lineTo(-r,0),e.closePath()}},zr=Math.sin(Pr/10)/Math.sin(7*Pr/10),Hr=Math.sin(Er/10)*zr,Vr=-Math.cos(Er/10)*zr,Ur={draw:function draw(e,t){var n=Math.sqrt(.8908130915292852*t),r=Hr*n,i=Vr*n;e.moveTo(0,-n),e.lineTo(r,i);for(var a=1;a<5;++a){var o=Er*a/5,u=Math.cos(o),c=Math.sin(o);e.lineTo(c*n,-u*n),e.lineTo(u*r-c*i,c*r+u*i)}e.closePath()}},Wr={draw:function draw(e,t){var n=Math.sqrt(t),r=-n/2;e.rect(r,r,n,n)}},qr=Math.sqrt(3),Gr={draw:function draw(e,t){var n=-Math.sqrt(t/(3*qr));e.moveTo(0,2*n),e.lineTo(-qr*n,-n),e.lineTo(qr*n,-n),e.closePath()}},Yr=Math.sqrt(3)/2,Xr=1/Math.sqrt(12),Kr=3*(Xr/2+1),$r={draw:function draw(e,t){var n=Math.sqrt(t/Kr),r=n/2,i=n*Xr,a=r,o=n*Xr+n,u=-a,c=o;e.moveTo(r,i),e.lineTo(a,o),e.lineTo(u,c),e.lineTo(-.5*r-Yr*i,Yr*r+-.5*i),e.lineTo(-.5*a-Yr*o,Yr*a+-.5*o),e.lineTo(-.5*u-Yr*c,Yr*u+-.5*c),e.lineTo(-.5*r+Yr*i,-.5*i-Yr*r),e.lineTo(-.5*a+Yr*o,-.5*o-Yr*a),e.lineTo(-.5*u+Yr*c,-.5*c-Yr*u),e.closePath()}},Qr=function(){};function _point(e,t,n){e._context.bezierCurveTo((2*e._x0+e._x1)/3,(2*e._y0+e._y1)/3,(e._x0+2*e._x1)/3,(e._y0+2*e._y1)/3,(e._x0+4*e._x1+t)/6,(e._y0+4*e._y1+n)/6)}function Basis(e){this._context=e}Basis.prototype={areaStart:function areaStart(){this._line=0},areaEnd:function areaEnd(){this._line=NaN},lineStart:function lineStart(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function lineEnd(){switch(this._point){case 3:_point(this,this._x1,this._y1);case 2:this._context.lineTo(this._x1,this._y1)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function point(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;break;case 2:this._point=3,this._context.lineTo((5*this._x0+this._x1)/6,(5*this._y0+this._y1)/6);default:_point(this,e,t)}this._x0=this._x1,this._x1=e,this._y0=this._y1,this._y1=t}};function BasisClosed(e){this._context=e}BasisClosed.prototype={areaStart:Qr,areaEnd:Qr,lineStart:function lineStart(){this._x0=this._x1=this._x2=this._x3=this._x4=this._y0=this._y1=this._y2=this._y3=this._y4=NaN,this._point=0},lineEnd:function lineEnd(){switch(this._point){case 1:this._context.moveTo(this._x2,this._y2),this._context.closePath();break;case 2:this._context.moveTo((this._x2+2*this._x3)/3,(this._y2+2*this._y3)/3),this._context.lineTo((this._x3+2*this._x2)/3,(this._y3+2*this._y2)/3),this._context.closePath();break;case 3:this.point(this._x2,this._y2),this.point(this._x3,this._y3),this.point(this._x4,this._y4)}},point:function point(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._x2=e,this._y2=t;break;case 1:this._point=2,this._x3=e,this._y3=t;break;case 2:this._point=3,this._x4=e,this._y4=t,this._context.moveTo((this._x0+4*this._x1+e)/6,(this._y0+4*this._y1+t)/6);break;default:_point(this,e,t)}this._x0=this._x1,this._x1=e,this._y0=this._y1,this._y1=t}};function BasisOpen(e){this._context=e}BasisOpen.prototype={areaStart:function areaStart(){this._line=0},areaEnd:function areaEnd(){this._line=NaN},lineStart:function lineStart(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function lineEnd(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function point(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3;var n=(this._x0+4*this._x1+e)/6,r=(this._y0+4*this._y1+t)/6;this._line?this._context.lineTo(n,r):this._context.moveTo(n,r);break;case 3:this._point=4;default:_point(this,e,t)}this._x0=this._x1,this._x1=e,this._y0=this._y1,this._y1=t}};function Bundle(e,t){this._basis=new Basis(e),this._beta=t}Bundle.prototype={lineStart:function lineStart(){this._x=[],this._y=[],this._basis.lineStart()},lineEnd:function lineEnd(){var e=this._x,t=this._y,n=e.length-1;if(n>0)for(var r,i=e[0],a=t[0],o=e[n]-i,u=t[n]-a,c=-1;++c<=n;)r=c/n,this._basis.point(this._beta*e[c]+(1-this._beta)*(i+r*o),this._beta*t[c]+(1-this._beta)*(a+r*u));this._x=this._y=null,this._basis.lineEnd()},point:function point(e,t){this._x.push(+e),this._y.push(+t)}};(function custom(e){function bundle(t){return 1===e?new Basis(t):new Bundle(t,e)}return bundle.beta=function(e){return custom(+e)},bundle})(.85);function cardinal_point(e,t,n){e._context.bezierCurveTo(e._x1+e._k*(e._x2-e._x0),e._y1+e._k*(e._y2-e._y0),e._x2+e._k*(e._x1-t),e._y2+e._k*(e._y1-n),e._x2,e._y2)}function Cardinal(e,t){this._context=e,this._k=(1-t)/6}Cardinal.prototype={areaStart:function areaStart(){this._line=0},areaEnd:function areaEnd(){this._line=NaN},lineStart:function lineStart(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},lineEnd:function lineEnd(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:cardinal_point(this,this._x1,this._y1)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function point(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2,this._x1=e,this._y1=t;break;case 2:this._point=3;default:cardinal_point(this,e,t)}this._x0=this._x1,this._x1=this._x2,this._x2=e,this._y0=this._y1,this._y1=this._y2,this._y2=t}};(function custom(e){function cardinal(t){return new Cardinal(t,e)}return cardinal.tension=function(e){return custom(+e)},cardinal})(0);function CardinalClosed(e,t){this._context=e,this._k=(1-t)/6}CardinalClosed.prototype={areaStart:Qr,areaEnd:Qr,lineStart:function lineStart(){this._x0=this._x1=this._x2=this._x3=this._x4=this._x5=this._y0=this._y1=this._y2=this._y3=this._y4=this._y5=NaN,this._point=0},lineEnd:function lineEnd(){switch(this._point){case 1:this._context.moveTo(this._x3,this._y3),this._context.closePath();break;case 2:this._context.lineTo(this._x3,this._y3),this._context.closePath();break;case 3:this.point(this._x3,this._y3),this.point(this._x4,this._y4),this.point(this._x5,this._y5)}},point:function point(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._x3=e,this._y3=t;break;case 1:this._point=2,this._context.moveTo(this._x4=e,this._y4=t);break;case 2:this._point=3,this._x5=e,this._y5=t;break;default:cardinal_point(this,e,t)}this._x0=this._x1,this._x1=this._x2,this._x2=e,this._y0=this._y1,this._y1=this._y2,this._y2=t}};(function custom(e){function cardinal(t){return new CardinalClosed(t,e)}return cardinal.tension=function(e){return custom(+e)},cardinal})(0);function CardinalOpen(e,t){this._context=e,this._k=(1-t)/6}CardinalOpen.prototype={areaStart:function areaStart(){this._line=0},areaEnd:function areaEnd(){this._line=NaN},lineStart:function lineStart(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},lineEnd:function lineEnd(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function point(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3,this._line?this._context.lineTo(this._x2,this._y2):this._context.moveTo(this._x2,this._y2);break;case 3:this._point=4;default:cardinal_point(this,e,t)}this._x0=this._x1,this._x1=this._x2,this._x2=e,this._y0=this._y1,this._y1=this._y2,this._y2=t}};(function custom(e){function cardinal(t){return new CardinalOpen(t,e)}return cardinal.tension=function(e){return custom(+e)},cardinal})(0);function catmullRom_point(e,t,n){var r=e._x1,i=e._y1,a=e._x2,o=e._y2;if(e._l01_a>Sr){var u=2*e._l01_2a+3*e._l01_a*e._l12_a+e._l12_2a,c=3*e._l01_a*(e._l01_a+e._l12_a);r=(r*u-e._x0*e._l12_2a+e._x2*e._l01_2a)/c,i=(i*u-e._y0*e._l12_2a+e._y2*e._l01_2a)/c}if(e._l23_a>Sr){var s=2*e._l23_2a+3*e._l23_a*e._l12_a+e._l12_2a,l=3*e._l23_a*(e._l23_a+e._l12_a);a=(a*s+e._x1*e._l23_2a-t*e._l12_2a)/l,o=(o*s+e._y1*e._l23_2a-n*e._l12_2a)/l}e._context.bezierCurveTo(r,i,a,o,e._x2,e._y2)}function CatmullRom(e,t){this._context=e,this._alpha=t}CatmullRom.prototype={areaStart:function areaStart(){this._line=0},areaEnd:function areaEnd(){this._line=NaN},lineStart:function lineStart(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function lineEnd(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:this.point(this._x2,this._y2)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function point(e,t){if(e=+e,t=+t,this._point){var n=this._x2-e,r=this._y2-t;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(n*n+r*r,this._alpha))}switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;break;case 2:this._point=3;default:catmullRom_point(this,e,t)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=e,this._y0=this._y1,this._y1=this._y2,this._y2=t}};var Zr=function custom(e){function catmullRom(t){return e?new CatmullRom(t,e):new Cardinal(t,0)}return catmullRom.alpha=function(e){return custom(+e)},catmullRom}(.5);function CatmullRomClosed(e,t){this._context=e,this._alpha=t}CatmullRomClosed.prototype={areaStart:Qr,areaEnd:Qr,lineStart:function lineStart(){this._x0=this._x1=this._x2=this._x3=this._x4=this._x5=this._y0=this._y1=this._y2=this._y3=this._y4=this._y5=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function lineEnd(){switch(this._point){case 1:this._context.moveTo(this._x3,this._y3),this._context.closePath();break;case 2:this._context.lineTo(this._x3,this._y3),this._context.closePath();break;case 3:this.point(this._x3,this._y3),this.point(this._x4,this._y4),this.point(this._x5,this._y5)}},point:function point(e,t){if(e=+e,t=+t,this._point){var n=this._x2-e,r=this._y2-t;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(n*n+r*r,this._alpha))}switch(this._point){case 0:this._point=1,this._x3=e,this._y3=t;break;case 1:this._point=2,this._context.moveTo(this._x4=e,this._y4=t);break;case 2:this._point=3,this._x5=e,this._y5=t;break;default:catmullRom_point(this,e,t)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=e,this._y0=this._y1,this._y1=this._y2,this._y2=t}};(function custom(e){function catmullRom(t){return e?new CatmullRomClosed(t,e):new CardinalClosed(t,0)}return catmullRom.alpha=function(e){return custom(+e)},catmullRom})(.5);function CatmullRomOpen(e,t){this._context=e,this._alpha=t}CatmullRomOpen.prototype={areaStart:function areaStart(){this._line=0},areaEnd:function areaEnd(){this._line=NaN},lineStart:function lineStart(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function lineEnd(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function point(e,t){if(e=+e,t=+t,this._point){var n=this._x2-e,r=this._y2-t;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(n*n+r*r,this._alpha))}switch(this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3,this._line?this._context.lineTo(this._x2,this._y2):this._context.moveTo(this._x2,this._y2);break;case 3:this._point=4;default:catmullRom_point(this,e,t)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=e,this._y0=this._y1,this._y1=this._y2,this._y2=t}};(function custom(e){function catmullRom(t){return e?new CatmullRomOpen(t,e):new CardinalOpen(t,0)}return catmullRom.alpha=function(e){return custom(+e)},catmullRom})(.5);function LinearClosed(e){this._context=e}LinearClosed.prototype={areaStart:Qr,areaEnd:Qr,lineStart:function lineStart(){this._point=0},lineEnd:function lineEnd(){this._point&&this._context.closePath()},point:function point(e,t){e=+e,t=+t,this._point?this._context.lineTo(e,t):(this._point=1,this._context.moveTo(e,t))}};function monotone_sign(e){return e<0?-1:1}function slope3(e,t,n){var r=e._x1-e._x0,i=t-e._x1,a=(e._y1-e._y0)/(r||i<0&&-0),o=(n-e._y1)/(i||r<0&&-0),u=(a*i+o*r)/(r+i);return(monotone_sign(a)+monotone_sign(o))*Math.min(Math.abs(a),Math.abs(o),.5*Math.abs(u))||0}function slope2(e,t){var n=e._x1-e._x0;return n?(3*(e._y1-e._y0)/n-t)/2:t}function monotone_point(e,t,n){var r=e._x0,i=e._y0,a=e._x1,o=e._y1,u=(a-r)/3;e._context.bezierCurveTo(r+u,i+u*t,a-u,o-u*n,a,o)}function MonotoneX(e){this._context=e}function MonotoneY(e){this._context=new ReflectContext(e)}function ReflectContext(e){this._context=e}function Natural(e){this._context=e}function controlPoints(e){var t,n,r=e.length-1,i=new Array(r),a=new Array(r),o=new Array(r);for(i[0]=0,a[0]=2,o[0]=e[0]+2*e[1],t=1;t=0;--t)i[t]=(o[t]-i[t+1])/a[t];for(a[r-1]=(e[r]+i[r-1])/2,t=0;t=0&&(this._t=1-this._t,this._line=1-this._line)},point:function point(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;default:if(this._t<=0)this._context.lineTo(this._x,t),this._context.lineTo(e,t);else{var n=this._x*(1-this._t)+e*this._t;this._context.lineTo(n,this._y),this._context.lineTo(n,t)}}this._x=e,this._y=t}};var Jr=function(e){return new Step(e,.5)};function stepBefore(e){return new Step(e,0)}function stepAfter(e){return new Step(e,1)}var ei=function(e,t){if((i=e.length)>1)for(var n,r,i,a=1,o=e[t[0]],u=o.length;a=0;)n[t]=t;return n};function stackValue(e,t){return e[t]}var ni=function(e){var t=e.map(ascending_sum);return ti(e).sort(function(e,n){return t[e]-t[n]})};function ascending_sum(e){for(var t,n=0,r=-1,i=e.length;++r0)){if(a/=h,h<0){if(a0){if(a>f)return;a>l&&(l=a)}if(a=r-c,h||!(a<0)){if(a/=h,h<0){if(a>f)return;a>l&&(l=a)}else if(h>0){if(a0)){if(a/=d,d<0){if(a0){if(a>f)return;a>l&&(l=a)}if(a=i-s,d||!(a<0)){if(a/=d,d<0){if(a>f)return;a>l&&(l=a)}else if(d>0){if(a0||f<1)||(l>0&&(e[0]=[c+l*h,s+l*d]),f<1&&(e[1]=[c+f*h,s+f*d]),!0)}}}}}function connectEdge(e,t,n,r,i){var a=e[1];if(a)return!0;var o,u,c=e[0],s=e.left,l=e.right,f=s[0],h=s[1],d=l[0],p=l[1],y=(f+d)/2,g=(h+p)/2;if(p===h){if(y=r)return;if(f>d){if(c){if(c[1]>=i)return}else c=[y,n];a=[y,i]}else{if(c){if(c[1]1)if(f>d){if(c){if(c[1]>=i)return}else c=[(n-u)/o,n];a=[(i-u)/o,i]}else{if(c){if(c[1]=r)return}else c=[t,o*t+u];a=[r,o*r+u]}else{if(c){if(c[0]=-Ai)){var d=c*c+s*s,p=l*l+f*f,y=(f*d-s*p)/h,g=(c*p-l*d)/h,v=_i.pop()||new function Circle(){RedBlackNode(this),this.x=this.y=this.arc=this.site=this.cy=null};v.arc=e,v.site=i,v.x=y+o,v.y=(v.cy=g+u)+Math.sqrt(y*y+g*g),e.circle=v;for(var m=null,b=ki._;b;)if(v.yPi)u=u.L;else{if(!((i=a-rightBreakPoint(u,o))>Pi)){r>-Pi?(t=u.P,n=u):i>-Pi?(t=u,n=u.N):t=n=u;break}if(!u.R){t=u;break}u=u.R}!function createCell(e){return Ci[e.index]={site:e,halfedges:[]}}(e);var c=createBeach(e);if(wi.insert(t,c),t||n){if(t===n)return detachCircle(t),n=createBeach(t.site),wi.insert(c,n),c.edge=n.edge=createEdge(t.site,c.site),attachCircle(t),void attachCircle(n);if(n){detachCircle(t),detachCircle(n);var s=t.site,l=s[0],f=s[1],h=e[0]-l,d=e[1]-f,p=n.site,y=p[0]-l,g=p[1]-f,v=2*(h*g-d*y),m=h*h+d*d,b=y*y+g*g,_=[(g*m-d*b)/v+l,(h*b-y*m)/v+f];setEdgeEnd(n.edge,s,p,_),c.edge=createEdge(s,e,null,_),n.edge=createEdge(e,p,null,_),attachCircle(t),attachCircle(n)}else c.edge=createEdge(t.site,c.site)}}function leftBreakPoint(e,t){var n=e.site,r=n[0],i=n[1],a=i-t;if(!a)return r;var o=e.P;if(!o)return-1/0;var u=(n=o.site)[0],c=n[1],s=c-t;if(!s)return u;var l=u-r,f=1/a-1/s,h=l/s;return f?(-h+Math.sqrt(h*h-2*f*(l*l/(-2*s)-c+s/2+i-a/2)))/f+r:(r+u)/2}function rightBreakPoint(e,t){var n=e.N;if(n)return leftBreakPoint(n,t);var r=e.site;return r[1]===t?r[0]:1/0}var wi,Ci,ki,Si,Pi=1e-6,Ai=1e-12;function triangleArea(e,t,n){return(e[0]-n[0])*(t[1]-e[1])-(e[0]-t[0])*(n[1]-e[1])}function lexicographic(e,t){return t[1]-e[1]||t[0]-e[0]}function Diagram(e,t){var n,r,i,a=e.sort(lexicographic).pop();for(Si=[],Ci=new Array(e.length),wi=new mi,ki=new mi;;)if(i=bi,a&&(!i||a[1]Pi||Math.abs(i[0][1]-i[1][1])>Pi)||delete Si[a]}(o,u,c,s),function clipCells(e,t,n,r){var i,a,o,u,c,s,l,f,h,d,p,y,g=Ci.length,v=!0;for(i=0;iPi||Math.abs(y-h)>Pi)&&(c.splice(u,0,Si.push(createBorderEdge(o,d,Math.abs(p-e)Pi?[e,Math.abs(f-e)Pi?[Math.abs(h-r)Pi?[n,Math.abs(f-n)Pi?[Math.abs(h-t)=u)return null;var c=e-i.site[0],s=t-i.site[1],l=c*c+s*s;do{i=a.cells[r=o],o=null,i.halfedges.forEach(function(n){var r=a.edges[n],u=r.left;if(u!==i.site&&u||(u=r.right)){var c=e-u[0],s=t-u[1],f=c*c+s*s;ft?0===i?i:"left"===n?i-1:i:i===e.length-1?i:"left"===n?i:i+1},Gi=(requestAnimationFrame,cancelAnimationFrame,function getQualifiedClassName(e,t,n){return[n+"-"+(e=e.replace(/^\.*/,"")),n+"-"+e+"-"+t]}),Yi=function defaultValue(e,t){return void 0===e||"object"===(void 0===e?"undefined":Ii(e))&&!e?t:e},Xi=function objectIterator(e,t){for(var n in e)Object.hasOwnProperty.call(e,n)&&t(n,e)},Ki=function(){function Voronoi(e){_classCallCheck(this,Voronoi),this._voronoi=Oi().x(function(e){return e.x}).y(function(e){return e.y}),this.data(e)}return ji(Voronoi,[{key:"data",value:function data(e){return e&&(this._voronoiFn=this._voronoi(e)),this}},{key:"find",value:function find(e,t,n){return this._voronoiFn.find(e,t,n)}}]),Voronoi}(),$i=function(){function Store(e){_classCallCheck(this,Store),this.model=Fi.a.create(e),this._listeners=[]}return ji(Store,[{key:"serialize",value:function serialize(){return this.model.serialize()}},{key:"commit",value:function commit(e,t){this.model.prop(e,t)}},{key:"registerChangeListener",value:function registerChangeListener(e,t,n){var r=e;Array.isArray(e)||(r=[e]);var i=this.model.next(r,t,n);return this._listeners.push(i),this}},{key:"registerImmediateListener",value:function registerImmediateListener(e,t,n){var r=e;Array.isArray(e)||(r=[e]);var i=this.model.on(r,t,n);return this._listeners.push(i),this}},{key:"get",value:function get(e){return this.model.prop(e)}},{key:"computed",value:function computed(e,t){return this.model.calculatedProp(e,t)}},{key:"unsubscribeAll",value:function unsubscribeAll(){this._listeners.forEach(function(e){return e()})}}]),Store}(),Qi=function intSanitizer(e){var t=e.toString().match(/(\d+)(px)*/g);return t?parseInt(t[0],10):null},Zi=function transactor(e,t,n){var r=void 0,i=n&&n instanceof Fi.a?n:Fi.a.create({}),a=function _loop(n){({}).hasOwnProperty.call(t,n)&&(r=t[n],i.prop(n)||i.append(_defineProperty({},n,r.value)),e[n]=function(t,r,a){return function(){for(var o=arguments.length,u=Array(o),c=0;c=0;n--)if(e[n]!==t[n])return!1;return!0}(t,n):"Object"===e?Object.is(t,n):t===n}},ta={INTERFACE_IMPL:"Method not implemented"},na=function mergeRecursive(e,t){for(var n in t)Di(e[n])&&Di(t[n])?mergeRecursive(e[n],t[n]):t[n]instanceof Object&&t[n].constructor===Object?(e[n]={},mergeRecursive(e[n],t[n])):e[n]=t[n];return e},ra=function interpolator(){return Pe},ia=function numberInterpolator(){return ge},aa=function piecewiseInterpolator(){return piecewise_piecewise};var oa=function rgbToHsv(e,t,n){var r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:1;e=+e,t=+t,n=+n,r=+r,e/=255,t/=255,n/=255;var i=Math.max(e,t,n),a=Math.min(e,t,n),o=void 0,u=void 0,c=(i+a)/2;if(i===a)o=u=0;else{var s=i-a;switch(u=c>.5?s/(2-i-a):s/(i+a),i){case e:o=(t-n)/s+(t=i[0]&&r<=i[1]})},{saveChild:!1,mode:n})},sa=function getDataModelFromIdentifiers(e,t,n){var r=void 0;if(t instanceof Array){var i=e.getFieldsConfig(),a=t.slice(1,t.length);if(t instanceof Function)r=t(e,{},!1);else if(t instanceof Array&&t[0].length){var o=t[0].filter(function(e){return e in i});r=e.select(function(e){var t=!0;return o.forEach(function(n,r){var i=e[n].valueOf(),o=a.findIndex(function(e){return e[r]===i});t=t&&-1!==o}),t},{saveChild:!1,mode:n})}}else r=ca(e,t,n);return r},la=function registerListeners(e,t){var n=t(e);for(var r in n)if({}.hasOwnProperty.call(n,r)){var i=n[r],a=i.type,o=i.props,u=i.listener;e.store()[a](o,u)}},fa=function isValidValue(e){return!isNaN(e)&&e!==-1/0&&e!==1/0},ha=function getObjProp(e){for(var t=arguments.length,n=Array(t>1?t-1:0),r=1;r1)for(var n,r,i,a,o,u,c=0,s=e[t[0]].length;c=0?(r[0]=a,r[1]=a+=i):i<0?(r[1]=o,r[0]=o+=i):r[0]=a}),_defineProperty(Mi,"none",ei),_defineProperty(Mi,"expand",function(e,t){if((r=e.length)>0){for(var n,r,i,a=0,o=e[0].length;a0&&(r=(n=e[t[0]]).length)>0){for(var n,r,i,a=0,o=1;o0&&(d+=f);for(null!=t?p.sort(function(e,n){return t(y[e],y[n])}):null!=n&&p.sort(function(e,t){return n(o[e],o[t])}),u=0,s=d?(v-h*b)/d:0;u0?f*s:0)+b,y[c]={data:o[c],index:u,value:f,startAngle:g,endAngle:l,padAngle:m};return y}return pie.value=function(t){return arguments.length?(e="function"==typeof t?t:vr(+t),pie):e},pie.sortValues=function(e){return arguments.length?(t=e,n=null,pie):t},pie.sort=function(e){return arguments.length?(n=e,t=null,pie):n},pie.startAngle=function(e){return arguments.length?(r="function"==typeof e?e:vr(+e),pie):r},pie.endAngle=function(e){return arguments.length?(i="function"==typeof e?e:vr(+e),pie):i},pie.padAngle=function(e){return arguments.length?(a="function"==typeof e?e:vr(+e),pie):a},pie},arc:function(){var e=arcInnerRadius,t=arcOuterRadius,n=vr(0),r=null,i=arcStartAngle,a=arcEndAngle,o=arcPadAngle,u=null;function arc(){var c,s,l=+e.apply(this,arguments),f=+t.apply(this,arguments),h=i.apply(this,arguments)-Ar,d=a.apply(this,arguments)-Ar,p=mr(d-h),y=d>h;if(u||(u=c=gr()),fSr)if(p>Er-Sr)u.moveTo(f*_r(h),f*Cr(h)),u.arc(0,0,f,h,d,!y),l>Sr&&(u.moveTo(l*_r(d),l*Cr(d)),u.arc(0,0,l,d,h,y));else{var g,v,m=h,b=d,_=h,x=d,w=p,C=p,k=o.apply(this,arguments)/2,S=k>Sr&&(r?+r.apply(this,arguments):kr(l*l+f*f)),P=wr(mr(f-l)/2,+n.apply(this,arguments)),A=P,E=P;if(S>Sr){var M=asin(S/l*Cr(k)),O=asin(S/f*Cr(k));(w-=2*M)>Sr?(_+=M*=y?1:-1,x-=M):(w=0,_=x=(h+d)/2),(C-=2*O)>Sr?(m+=O*=y?1:-1,b-=O):(C=0,m=b=(h+d)/2)}var T=f*_r(m),F=f*Cr(m),N=l*_r(x),j=l*Cr(x);if(P>Sr){var I=f*_r(b),D=f*Cr(b),L=l*_r(_),R=l*Cr(_);if(pSr?function intersect(e,t,n,r,i,a,o,u){var c=n-e,s=r-t,l=o-i,f=u-a,h=(l*(t-a)-f*(e-i))/(f*c-l*s);return[e+h*c,t+h*s]}(T,F,L,R,I,D,N,j):[N,j],z=T-B[0],H=F-B[1],V=I-B[0],U=D-B[1],W=1/Cr(function acos(e){return e>1?0:e<-1?Pr:Math.acos(e)}((z*V+H*U)/(kr(z*z+H*H)*kr(V*V+U*U)))/2),q=kr(B[0]*B[0]+B[1]*B[1]);A=wr(P,(l-q)/(W-1)),E=wr(P,(f-q)/(W+1))}}C>Sr?E>Sr?(g=cornerTangents(L,R,T,F,f,E,y),v=cornerTangents(I,D,N,j,f,E,y),u.moveTo(g.cx+g.x01,g.cy+g.y01),ESr&&w>Sr?A>Sr?(g=cornerTangents(N,j,I,D,l,-A,y),v=cornerTangents(T,F,L,R,l,-A,y),u.lineTo(g.cx+g.x01,g.cy+g.y01),A=0&&"xmlns"!==(t=e.slice(0,n))&&(e=e.slice(n+1)),Ca.hasOwnProperty(t)?{space:Ca[t],local:e}:e};var Sa=function(e){var t=ka(e);return(t.local?function creatorFixed(e){return function(){return this.ownerDocument.createElementNS(e.space,e.local)}}:function creatorInherit(e){return function(){var t=this.ownerDocument,n=this.namespaceURI;return n===wa&&t.documentElement.namespaceURI===wa?t.createElement(e):t.createElementNS(n,e)}})(t)};function selector_none(){}var Pa=function(e){return null==e?selector_none:function(){return this.querySelector(e)}};function selectorAll_empty(){return[]}var Aa=function(e){return null==e?selectorAll_empty:function(){return this.querySelectorAll(e)}},Ea=function matcher(e){return function(){return this.matches(e)}};if("undefined"!=typeof document){var Ma=document.documentElement;if(!Ma.matches){var Oa=Ma.webkitMatchesSelector||Ma.msMatchesSelector||Ma.mozMatchesSelector||Ma.oMatchesSelector;Ea=function matcher(e){return function(){return Oa.call(this,e)}}}}var Ta=Ea,Fa=function(e){return new Array(e.length)};function EnterNode(e,t){this.ownerDocument=e.ownerDocument,this.namespaceURI=e.namespaceURI,this._next=null,this._parent=e,this.__data__=t}EnterNode.prototype={constructor:EnterNode,appendChild:function appendChild(e){return this._parent.insertBefore(e,this._next)},insertBefore:function insertBefore(e,t){return this._parent.insertBefore(e,t)},querySelector:function querySelector(e){return this._parent.querySelector(e)},querySelectorAll:function querySelectorAll(e){return this._parent.querySelectorAll(e)}};var Na="$";function bindIndex(e,t,n,r,i,a){for(var o,u=0,c=t.length,s=a.length;ut?1:e>=t?0:NaN}var ja=function(e){return e.ownerDocument&&e.ownerDocument.defaultView||e.document&&e||e.defaultView};function styleValue(e,t){return e.style.getPropertyValue(t)||ja(e).getComputedStyle(e,null).getPropertyValue(t)}function classArray(e){return e.trim().split(/^|\s+/)}function classList(e){return e.classList||new ClassList(e)}function ClassList(e){this._node=e,this._names=classArray(e.getAttribute("class")||"")}function classedAdd(e,t){for(var n=classList(e),r=-1,i=t.length;++r=0&&(this._names.splice(t,1),this._node.setAttribute("class",this._names.join(" ")))},contains:function contains(e){return this._names.indexOf(e)>=0}};function textRemove(){this.textContent=""}function htmlRemove(){this.innerHTML=""}function raise_raise(){this.nextSibling&&this.parentNode.appendChild(this)}function lower(){this.previousSibling&&this.parentNode.insertBefore(this,this.parentNode.firstChild)}function constantNull(){return null}function remove_remove(){var e=this.parentNode;e&&e.removeChild(this)}function selection_cloneShallow(){return this.parentNode.insertBefore(this.cloneNode(!1),this.nextSibling)}function selection_cloneDeep(){return this.parentNode.insertBefore(this.cloneNode(!0),this.nextSibling)}var Ia={},Da=null;"undefined"!=typeof document&&("onmouseenter"in document.documentElement||(Ia={mouseenter:"mouseover",mouseleave:"mouseout"}));function filterContextListener(e,t,n){return e=contextListener(e,t,n),function(t){var n=t.relatedTarget;n&&(n===this||8&n.compareDocumentPosition(this))||e.call(this,t)}}function contextListener(e,t,n){return function(r){var i=Da;Da=r;try{e.call(this,this.__data__,t,n)}finally{Da=i}}}function onRemove(e){return function(){var t=this.__on;if(t){for(var n,r=0,i=-1,a=t.length;r=_&&(_=b+1);!(m=g[_])&&++_=0;)(r=i[a])&&(o&&o!==r.nextSibling&&o.parentNode.insertBefore(r,o),o=r);return this},sort:function(e){function compareNode(t,n){return t&&n?e(t.__data__,n.__data__):!t-!n}e||(e=sort_ascending);for(var t=this._groups,n=t.length,r=new Array(n),i=0;i1?this.each((null==t?function styleRemove(e){return function(){this.style.removeProperty(e)}}:"function"==typeof t?function styleFunction(e,t,n){return function(){var r=t.apply(this,arguments);null==r?this.style.removeProperty(e):this.style.setProperty(e,r,n)}}:function styleConstant(e,t,n){return function(){this.style.setProperty(e,t,n)}})(e,t,null==n?"":n)):styleValue(this.node(),e)},property:function(e,t){return arguments.length>1?this.each((null==t?function propertyRemove(e){return function(){delete this[e]}}:"function"==typeof t?function propertyFunction(e,t){return function(){var n=t.apply(this,arguments);null==n?delete this[e]:this[e]=n}}:function propertyConstant(e,t){return function(){this[e]=t}})(e,t)):this.node()[e]},classed:function(e,t){var n=classArray(e+"");if(arguments.length<2){for(var r=classList(this.node()),i=-1,a=n.length;++i=0&&(t=e.slice(n+1),e=e.slice(0,n)),{type:e,name:t}})}(e+""),o=a.length;if(!(arguments.length<2)){for(u=t?onAdd:onRemove,null==n&&(n=!1),r=0;r=0&&(n=e.slice(r+1),e=e.slice(0,r)),e&&!t.hasOwnProperty(e))throw new Error("unknown type: "+e);return{type:e,name:n}})}(e+"",r),a=-1,o=i.length;if(!(arguments.length<2)){if(null!=t&&"function"!=typeof t)throw new Error("invalid callback: "+t);for(;++a0)for(var n,r,i=new Array(n),a=0;af}c.mouse("drag")}function mouseupped(){Ba(Da.view).on("mousemove.drag mouseup.drag",null),function yesdrag(e,t){var n=e.document.documentElement,r=Ba(e).on("dragstart.drag",null);t&&(r.on("click.drag",Ya,!0),setTimeout(function(){r.on("click.drag",null)},0)),"onselectstart"in n?r.on("selectstart.drag",null):(n.style.MozUserSelect=n.__noselect,delete n.__noselect)}(Da.view,n),Ya(),c.mouse("end")}function touchstarted(){if(i.apply(this,arguments)){var e,t,n=Da.changedTouches,r=a.apply(this,arguments),o=n.length;for(e=0;e=0&&t._call.call(null,e),t=t._next;--eo}()}finally{eo=0,function nap(){var e,t,n=$a,r=1/0;for(;n;)n._call?(r>n._time&&(r=n._time),e=n,n=n._next):(t=n._next,n._next=null,n=e?e._next=t:$a=t);Qa=e,sleep(r)}(),ao=0}}function poke(){var e=uo.now(),t=e-io;t>ro&&(oo-=t,io=e)}function sleep(e){eo||(to&&(to=clearTimeout(to)),e-ao>24?(e<1/0&&(to=setTimeout(wake,e-uo.now()-oo)),no&&(no=clearInterval(no))):(no||(io=uo.now(),no=setInterval(poke,ro)),eo=1,co(wake)))}Timer.prototype=timer.prototype={constructor:Timer,restart:function restart(e,t,n){if("function"!=typeof e)throw new TypeError("callback is not a function");n=(null==n?now():+n)+(null==t?0:+t),this._next||Qa===this||(Qa?Qa._next=this:$a=this,Qa=this),this._call=e,this._time=n,sleep()},stop:function stop(){this._call&&(this._call=null,this._time=1/0,sleep())}};var so=function(e,t,n){var r=new Timer;return t=null==t?0:+t,r.restart(function(n){r.stop(),e(n+t)},t,n),r},lo=Ga("start","end","interrupt"),fo=[],ho=0,po=1,yo=2,go=3,vo=4,mo=5,bo=6,_o=function(e,t,n,r,i,a){var o=e.__transition;if(o){if(n in o)return}else e.__transition={};!function schedule_create(e,t,n){var r,i=e.__transition;function start(a){var o,u,c,s;if(n.state!==po)return stop();for(o in i)if((s=i[o]).name===n.name){if(s.state===go)return so(start);s.state===vo?(s.state=bo,s.timer.stop(),s.on.call("interrupt",e,e.__data__,s.index,s.group),delete i[o]):+oho)throw new Error("too late; already scheduled");return n}function schedule_set(e,t){var n=schedule_get(e,t);if(n.state>yo)throw new Error("too late; already started");return n}function schedule_get(e,t){var n=e.__transition;if(!n||!(n=n[t]))throw new Error("transition not found");return n}function tweenValue(e,t,n){var r=e._id;return e.each(function(){var e=schedule_set(this,r);(e.value||(e.value={}))[t]=n.apply(this,arguments)}),function(e){return schedule_get(e,r).value[t]}}var xo=function(e,t){var n;return("number"==typeof t?ge:t instanceof color_color?pe:(n=color_color(t))?(t=n,pe):ke)(e,t)};var wo=Ra.prototype.constructor;var Co=0;function Transition(e,t,n,r){this._groups=e,this._parents=t,this._name=n,this._id=r}function newId(){return++Co}var ko=Ra.prototype;Transition.prototype=function src_transition_transition(e){return Ra().transition(e)}.prototype={constructor:Transition,select:function(e){var t=this._name,n=this._id;"function"!=typeof e&&(e=Pa(e));for(var r=this._groups,i=r.length,a=new Array(i),o=0;o=0&&(e=e.slice(0,t)),!e||"start"===e})}(t)?init:schedule_set;return function(){var o=a(this,e),u=o.on;u!==r&&(i=(r=u).copy()).on(t,n),o.on=i}}(n,e,t))},attr:function(e,t){var n=ka(e),r="transform"===n?Fe:xo;return this.attrTween(e,"function"==typeof t?(n.local?function attr_attrFunctionNS(e,t,n){var r,i,a;return function(){var o,u=n(this);if(null!=u)return(o=this.getAttributeNS(e.space,e.local))===u?null:o===r&&u===i?a:a=t(r=o,i=u);this.removeAttributeNS(e.space,e.local)}}:function attr_attrFunction(e,t,n){var r,i,a;return function(){var o,u=n(this);if(null!=u)return(o=this.getAttribute(e))===u?null:o===r&&u===i?a:a=t(r=o,i=u);this.removeAttribute(e)}})(n,r,tweenValue(this,"attr."+e,t)):null==t?(n.local?function attr_attrRemoveNS(e){return function(){this.removeAttributeNS(e.space,e.local)}}:function attr_attrRemove(e){return function(){this.removeAttribute(e)}})(n):(n.local?function attr_attrConstantNS(e,t,n){var r,i;return function(){var a=this.getAttributeNS(e.space,e.local);return a===n?null:a===r?i:i=t(r=a,n)}}:function attr_attrConstant(e,t,n){var r,i;return function(){var a=this.getAttribute(e);return a===n?null:a===r?i:i=t(r=a,n)}})(n,r,t+""))},attrTween:function(e,t){var n="attr."+e;if(arguments.length<2)return(n=this.tween(n))&&n._value;if(null==t)return this.tween(n,null);if("function"!=typeof t)throw new Error;var r=ka(e);return this.tween(n,(r.local?function attrTweenNS(e,t){function tween(){var n=this,r=t.apply(n,arguments);return r&&function(t){n.setAttributeNS(e.space,e.local,r(t))}}return tween._value=t,tween}:function attrTween(e,t){function tween(){var n=this,r=t.apply(n,arguments);return r&&function(t){n.setAttribute(e,r(t))}}return tween._value=t,tween})(r,t))},style:function(e,t,n){var r="transform"==(e+="")?Te:xo;return null==t?this.styleTween(e,function style_styleRemove(e,t){var n,r,i;return function(){var a=styleValue(this,e),o=(this.style.removeProperty(e),styleValue(this,e));return a===o?null:a===n&&o===r?i:i=t(n=a,r=o)}}(e,r)).on("end.style."+e,function styleRemoveEnd(e){return function(){this.style.removeProperty(e)}}(e)):this.styleTween(e,"function"==typeof t?function style_styleFunction(e,t,n){var r,i,a;return function(){var o=styleValue(this,e),u=n(this);return null==u&&(this.style.removeProperty(e),u=styleValue(this,e)),o===u?null:o===r&&u===i?a:a=t(r=o,i=u)}}(e,r,tweenValue(this,"style."+e,t)):function style_styleConstant(e,t,n){var r,i;return function(){var a=styleValue(this,e);return a===n?null:a===r?i:i=t(r=a,n)}}(e,r,t+""),n)},styleTween:function(e,t,n){var r="style."+(e+="");if(arguments.length<2)return(r=this.tween(r))&&r._value;if(null==t)return this.tween(r,null);if("function"!=typeof t)throw new Error;return this.tween(r,function styleTween(e,t,n){function tween(){var r=this,i=t.apply(r,arguments);return i&&function(t){r.style.setProperty(e,i(t),n)}}return tween._value=t,tween}(e,t,null==n?"":n))},text:function(e){return this.tween("text","function"==typeof e?function text_textFunction(e){return function(){var t=e(this);this.textContent=null==t?"":t}}(tweenValue(this,"text",e)):function text_textConstant(e){return function(){this.textContent=e}}(null==e?"":e+""))},remove:function(){return this.on("end.remove",function removeFunction(e){return function(){var t=this.parentNode;for(var n in this.__transition)if(+n!==e)return;t&&t.removeChild(this)}}(this._id))},tween:function(e,t){var n=this._id;if(e+="",arguments.length<2){for(var r,i=schedule_get(this.node(),n).tween,a=0,o=i.length;ayo&&n.state4&&void 0!==arguments[4]?arguments[4]:{},a=arguments[5];(e instanceof HTMLElement||e instanceof SVGElement)&&(e=Ao(e));var o=r?r[0]:null,u=null,c=null,s=null,l=null,f=null,h=void 0;o?"#"===o?(u="id",c=r):(u="class",c="."===r[0]?r:"."+r):(c=t,h=!0),s=e.selectAll(c),h&&(s=s.filter(function(){return this.parentNode===e.node()})),l=(s=s.data(n,a)).enter().append(t||"div"),i.enter&&l.each(function(){for(var e=arguments.length,t=Array(e),n=0;nthis._data.length)for(var a=this._data.length;a0&&void 0!==arguments[0]?arguments[0]:{};this._lifeCycles=e,this._releasePromisesFromCache()}},{key:"_resetTargetPromise",value:function _resetTargetPromise(e){var t=this;setTimeout(function(){t._notifiers[e]=Xo,t._promises.set(e,t._makeNotifierPromise(e))},0)}}]),LifeCycleManager}(),Qo="drag",Zo="hover",Jo="selectiondrag",eu="click",tu="longtouch",nu="touchdrag",ru="*",iu=1,au=-1,ou=0,uu=2,cu=-2,su=function(){function defineProperties(e,t){for(var n=0;n0?(e[n]===uu&&t.entrySet[0].push(n),e[n]===iu&&t.entrySet[1].push(n)):e[n]<0&&(e[n]===cu&&t.exitSet[0].push(n),e[n]===au&&t.exitSet[1].push(n)),t.completeSet.push(n);return["entrySet","exitSet"].forEach(function(e){t[e]=t[e].map(function(e){return e.map(Number)})}),t.completeSet=t.completeSet.map(Number),t}},{key:"reset",value:function reset(e){var t=this._set;if(e)e.forEach(function(e){t[e]=ou});else{var n=this._lockedSelection;for(var r in t)r in n||(t[r]=ou)}return this._resetted=!0,this}},{key:"getEntrySet",value:function getEntrySet(){var e=this._set,t=[];for(var n in e)e[n]===iu&&t.push(n);return t}},{key:"getExistingEntrySet",value:function getExistingEntrySet(e){var t=this._set;return e.filter(function(e){return t[e]===iu||t[e]===uu})}},{key:"getExistingExitSet",value:function getExistingExitSet(e){var t=this._set;return e.filter(function(e){return t[e]===au||t[e]===cu})}},{key:"getOldEntry",value:function getOldEntry(){var e=this._set,t=[];for(var n in e)e[n]===uu&&t.push(n);return t}},{key:"getOldExit",value:function getOldExit(){var e=this._set,t=[];for(var n in e)e[n]===cu&&t.push(n);return t}},{key:"getExitSet",value:function getExitSet(){var e=this._set,t=[];for(var n in e)e[n]===au&&t.push(n);return t}},{key:"getCompleteSet",value:function getCompleteSet(){var e=this._set,t=[];for(var n in e)t.push(n);return t}},{key:"getCompleteSetCount",value:function getCompleteSetCount(){return this._completeSetCount}},{key:"resetted",value:function resetted(){return this._resetted}},{key:"toggle",value:function toggle(){var e=this._set;for(var t in e)e[t]===iu?e[t]=au:e[t]===au?e[t]=iu:e[t]===uu?e[t]=cu:e[t]=uu;return this}}]),SelectionSet}();function helper_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t3&&void 0!==arguments[3]?arguments[3]:{},i=this.sideEffects(),a=i[e],o=!1;r.filter&&r.filter(a)&&(o=!0),!o&&i[e].apply(t,n,r)}},{key:"registerPropagationBehaviourMap",value:function registerPropagationBehaviourMap(e){return this._propagationBehaviourMap=Object.assign(this._propagationBehaviourMap,e||{}),this}},{key:"dispatchBehaviour",value:function dispatchBehaviour(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=void 0===n.propagate||n.propagate,i=this._actions.behavioural[e],a=function getSideEffects(e,t){var n=[];for(var r in t){var i=r.split(",");i.some(function(t){return t===e})&&n.push({effects:t[r],behaviours:i})}return n}(e,this._behaviourEffectMap);if(this._propagationInf=n,i){var o=i.dispatch(t),u=this.getPropagationSelectionSet(o);this._entryExitSet[e]=u;var c=this.shouldApplySideEffects(r);if(r&&this.propagate(e,t,o.find(function(e){return e.sourceSelectionSet}),a),c){var s=this.getApplicableSideEffects(a,t,n);this.applySideEffects(s,u,t)}}return this}},{key:"getPropagationSelectionSet",value:function getPropagationSelectionSet(e){return e.find(function(e){return!e.sourceSelectionSet})}},{key:"shouldApplySideEffects",value:function shouldApplySideEffects(){return!0}},{key:"changeBehaviourStateOnPropagation",value:function changeBehaviourStateOnPropagation(e,t){return t instanceof Function?this._sourceBehaviours[e]=t:this._sourceBehaviours[e]=function(){return t},this}},{key:"changeSideEffectStateOnPropagation",value:function changeSideEffectStateOnPropagation(e,t){t instanceof Function?this._sourceSideEffects[e]=t:this._sourceSideEffects[e]=function(){return t}}},{key:"propagate",value:function propagate(){return this}},{key:"sideEffects",value:function sideEffects(){return arguments.length?(this._sideEffects=arguments.length<=0?void 0:arguments[0],this):this._sideEffects}},{key:"enableSideEffects",value:function enableSideEffects(e){return fu(this,e,!0),this}},{key:"disableSideEffects",value:function disableSideEffects(e){return fu(this,e,!1),this}},{key:"dissociateBehaviour",value:function dissociateBehaviour(e,t){var n=this._actionBehaviourMap;for(var r in n)if(r===t){var i=n[r];i.behaviours=i.behaviours.filter(function(t){return t!==e})}return this}},{key:"dissociateSideEffect",value:function dissociateSideEffect(e,t){var n=this._behaviourEffectMap;return n[t]=n[t].filter(function(t){return(t.name||t)!==e}),this}},{key:"getApplicableSideEffects",value:function getApplicableSideEffects(e){return e}},{key:"attachPropagationListener",value:function attachPropagationListener(e){return e.unsubscribe("propagation"),e.on("propagation",this.onDataModelPropagation()),this}},{key:"onDataModelPropagation",value:function onDataModelPropagation(){var e=this;return function(t){var n=t.payload,r=n.action;e.dispatchBehaviour(r,n,{propagate:!1})}}},{key:"createSelectionSet",value:function createSelectionSet(e,t){var n=t||this._actions.behavioural,r=this._selectionSet,i=this._volatileSelectionSet;for(var a in n)({}).hasOwnProperty.call(n,a)&&(r[a]=new lu(e),i[a]=new lu(e,!0));return this._volatileSelectionSet=i,this.selectionSet(r),this}},{key:"selectionSet",value:function selectionSet(){return arguments.length?(this._selectionSet=arguments.length<=0?void 0:arguments[0],this):this._selectionSet}},{key:"initializeSideEffects",value:function initializeSideEffects(){var e=this._sideEffectDefinitions;return this.sideEffects(function initializeSideEffects(e,t){var n=e._sideEffects;return(t=t instanceof Array?t:Object.values(t)).forEach(function(t){var r=n[t.formalName()];n[t.formalName()]=r||new t(e)}),n}(this,e)),this}},{key:"registerPhysicalActions",value:function registerPhysicalActions(e){var t=function initializePhysicalActions(e,t){var n={};for(var r in t)({}).hasOwnProperty.call(r,t)||(n[r]=t[r](e));return n}(this,e);return Object.assign(this._actions.physical,t),this}},{key:"propagateWith",value:function propagateWith(e,t){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],r=this._actions.behavioural;if(t.length){if(e===ru)for(var i in r)this._propagationFields[i]={fields:t,append:n};else this._propagationFields[e]={fields:t,append:n};return this}return this._propagationFields}},{key:"mapActionsAndBehaviour",value:function mapActionsAndBehaviour(){var e=this._actions.physical,t=this._actionBehaviourMap,n=this._mappedActions;for(var r in t)if(!{}.hasOwnProperty.call(r,t)){var i=void 0,a=t[r];i=a.target;var o=a.touch;i||(i=this.context.getDefaultTargetContainer());var u=Ro()?!0===o||void 0===o:!o,c=r+"-"+a.behaviours.join();u&&!n[c]&&this.bindActionWithBehaviour(e[r],i,a.behaviours),n[c]=!0}return this}},{key:"registerPhysicalBehaviouralMap",value:function registerPhysicalBehaviouralMap(e){return Object.assign(this._actionBehaviourMap,e),this}},{key:"bindActionWithBehaviour",value:function bindActionWithBehaviour(e,t,n){var r=this;return"string"==typeof t&&(t=[t]),t.forEach(function(t){var i=r.context.mount(),a=t.node instanceof Function?t:Ao(i).selectAll(t);n.length&&!a.empty()&&(a instanceof Array?a.forEach(function(t){e(Ao(t),n)}):e(a,n))}),this}},{key:"getPropagationInf",value:function getPropagationInf(){return this._propagationInf}},{key:"getAddSetFromCriteria",value:function getAddSetFromCriteria(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=this.context,r=t.data?t.data:n.getDataModelFromIdentifiers(e,"all"),i=n.fields().x||[],a=n.fields().y||[],o=i.every(function(e){return e.type()===ir.FieldType.MEASURE}),u=a.every(function(e){return e.type()===ir.FieldType.MEASURE});return{model:r,uids:null===e?null:t.data?function filterPropagationModel(e,t,n){var r=t.getData(),i=r.data,a=r.schema,o=void 0;if(a.length){var u=e.getFieldsConfig();o=e.select(function(e){return i.some(function(t){return a.every(function(r,i){return!(n||r.name in u&&u[r.name].def.type!==ir.FieldType.MEASURE)||t[i]===e[r.name].valueOf()})})},{saveChild:!1})}else o=t;return o}(this.getFullData(),t.data[0],o&&u).getData().uids:r[0].getData().uids}}},{key:"getSelectionSets",value:function getSelectionSets(e){var t=this.context.id(),n=(this._propagationInf||{}).sourceId,r=[];return n!==t&&(r=[this._volatileSelectionSet[e]]),n&&r.push(this.selectionSet()[e]),r}},{key:"getFullData",value:function getFullData(){return this.context.data()}},{key:"resetted",value:function resetted(){return this._resetted}},{key:"getEntryExitSet",value:function getEntryExitSet(e){return this._entryExitSet[e]}}]),Firebolt}(),mu=function(){function defineProperties(e,t){for(var n=0;n1&&void 0!==arguments[1]?arguments[1]:{},n=e.sourceIdentifiers;return n?n.getSchema().map(function(e){return e.name}):t instanceof Array?t[0]:Object.keys(t||{})}(u,n.criteria),sourceSelectionSet:!0===e._volatile}}},{key:"enable",value:function enable(){this._enabled=!0}},{key:"disable",value:function disable(){this._enabled=!1}},{key:"isEnabled",value:function isEnabled(){return this._enabled}}],[{key:"mutates",value:function mutates(){return!1}}]),GenericBehaviour}(),_u=function(){function defineProperties(e,t){for(var n=0;nC[0]?C:w,S=k===C?w:C;k[1]100&&Math.abs(i.x-a.x)<=5)){a.x=Math.max(0,Math.min(a.x,o.width)),a.y=Math.max(0,Math.min(a.y,o.height));var s=Ru(n.context.getSourceInfo(),{startPos:i,endPos:a,snap:!0},n.context.data().getFieldsConfig());s.dragEnd=!0,t.forEach(function(e){return n.dispatchBehaviour(e,s)})}}))},zu=function hover(e){return function(t,n){var r=function dispatchBehaviour(t){var r=Io(),i=e.context,a=i.config().interaction.tooltip.mode,o=jo(i.getDrawingContext().svgContainer,r),u=i.getNearestPoint(o.x,o.y,{getAllPoints:"consolidated"===a||"fragmented"===a,data:t,event:r}),c={criteria:u?u.id:null,showInPosition:u.showInPosition,target:u.target,position:o,mode:a};n.forEach(function(t){return e.dispatchBehaviour(t,c)}),r.stopPropagation()};t.on("mouseover",r).on("mousemove",r).on("mouseout",function(){n.forEach(function(t){return e.dispatchBehaviour(t,{criteria:null})})})}},Hu=function generatePayloadFromEvent(e,t,n){var r=n.context,i=jo(r.getDrawingContext().svgContainer,t.touches?t.touches[0]:t),a=r.getNearestPoint(i.x,i.y,{data:e,event:t});return{criteria:a?a.id:null,showInPosition:a.showInPosition,target:a.target,position:i}},Vu=function click(e){return function(t,n){t.on("click",function dispatchBehaviour(t){var r=Io(),i=Hu(t,r,e);n.forEach(function(t){return e.dispatchBehaviour(t,i)}),r.stopPropagation()})}};function physical_defineProperty(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var Uu=(physical_defineProperty(Du={},Qo,function drag(e){return function(t,n){Bu(t,n,e)}}),physical_defineProperty(Du,Zo,zu),physical_defineProperty(Du,eu,Vu),physical_defineProperty(Du,tu,function longtouch(e){return function(t,n){var r=void 0,i=void 0;i=!1,r=Io(),t.on("touchstart",function(t){r=Io(),i=!1,setTimeout(function(){i?n.forEach(function(t){return e.dispatchBehaviour(t,{criteria:null})}):function dispatchBehaviour(t){var i=Hu(t,r,e);n.forEach(function(t){return e.dispatchBehaviour(t,i)}),r.stopPropagation()}(t)},100)}).on("touchend",function(){i=!0})}}),physical_defineProperty(Du,nu,function touchdrag(e){return function(t,n){Bu(t,n,e,!0)}}),Du),Wu=function(){function defineProperties(e,t){for(var n=0;n1&&void 0!==arguments[1]&&arguments[1];var t=arguments[2],n=arguments[3];this.firebolt.context.layers().forEach(function(r){return!1!==r.config().interactive&&r.applyInteractionStyle(t,e.uids,n)})}}]),SurrogateSideEffect}(),Xu=function(){function defineProperties(e,t){for(var n=0;n=0&&l<=t&&c>=0&&s<=n){var f=Ru(a.getSourceInfo(),{startPos:{x:u,y:c},endPos:{x:l,y:s}},a.data().getFieldsConfig());o(f)}}).on("end",function(){var e=i.width,t=i.height,n=Math.min(e-r.width,Math.max(r.x,0)),u=Math.min(t-r.height,Math.max(r.y,0)),c=u+r.height,s=n+r.width;if(n>=0&&s<=e&&u>=0&&c<=t){var l=Ru(a.getSourceInfo(),{startPos:{x:n,y:u},endPos:{x:s,y:c},snap:!0},a.data().getFieldsConfig());l.dragEnd=!0,o(l)}}))}}(c)(Ao(this),["brush"],x)}).merge(w).each(function(e){var t=Ao(this);for(var n in b&&(t=t.transition().duration(b.duration)),e)({}).hasOwnProperty.call(e,n)&&fa(e[n])&&t.attr(n,e[n])}),k=Gi(u.defClassName,this._id,d);return C.classed(k.join(" "),!0),C.classed(u.className,!0),this}},{key:"hide",value:function hide(e){Qu(this,e.sideEffectGroup,!1)}},{key:"show",value:function show(e){Qu(this,e.sideEffectGroup,!0)}}],[{key:"defaultConfig",value:function defaultConfig(){return{defClassName:"selection-box-group",className:"",classPrefix:"muze",box:{defClassName:"selection-box",className:""},transition:{duration:200}}}},{key:"formalName",value:function formalName(){return"selectionBox"}}]),SelectionBox}(),ec={position:"absolute",width:0,height:0},tc={classPrefix:"muze",defClassName:"tooltip-box",connectorClassName:"tooltip-connectors",className:"",row:{margin:0},content:{spacing:5,iconContainerSize:10,iconScale:1,iconShape:"circle",iconColor:"#ff0000",rowMargin:"0px",margin:10,separator:":",className:"tooltip-content-container",parentClassName:"tooltip-content-parent-container"},arrow:{size:10,disabled:!1,defClassName:"tooltip-arrow",className:"",color:"rgba(195,195,195,0.85)"}},nc=function getArrowPos(e,t,n,r){var i=void 0,a=n.x,o=n.y,u=n.boxHeight,c=n.boxWidth,s=r.arrow.disabled?0:r.arrow.size;if("left"===e||"right"===e){var l=0,f=u/2,h=t.y+t.height,d=o+u;t.y>o?(l=t.y-o,f=(h>=d?d-t.y:t.height)/2):d>h&&(f=Math.abs(o-(t.y+t.height))/2),i=l+f-s/2}else{var p=0,y=c/2,g=t.x+t.width,v=a+c;t.x>a?(p=t.x-a,y=(g>=v?v-t.x:t.width)/2):v>g&&(y=Math.abs(a-(t.x+t.width))/2),i=p+y-s/2}return i},rc=function placeArrow(e,t,n){var r=e._tooltipArrow,i=e._tooltipBackground,a=e._config,o=a.classPrefix,u=a.arrow,c=Gi(u.defClassName,e._id,a.classPrefix);r.style("display","block"),r.attr("class",""+c.join(" ")),"left"===t||"right"===t?(r.style("top",n+"px"),r.style("left",""),i.style("top",n+"px"),i.style("left","")):("bottom"===t?r.style("top","100%"):r.style("top","-"+u.size+"px"),r.style("left",n+"px"),"bottom"===t?i.style("top","100%"):i.style("top","-"+(u.size+3)+"px"),i.style("left",n+"px")),r.classed(o+"-tooltip-arrow",!0),r.classed(o+"-tooltip-arrow-"+e._arrowOrientation,!1),r.classed(o+"-tooltip-arrow-"+t,!0),i.classed(o+"-tooltip-background-arrow",!0),i.classed(o+"-tooltip-background-arrow-"+e._arrowOrientation,!1),i.classed(o+"-tooltip-background-arrow-"+t,!0)};n(11);function strategy_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t1&&void 0!==arguments[1]?arguments[1]:{},n=arguments[2],r=[],i=e.getData(),a=i.data,o=i.schema,u=t.formatters,c=t.separator,s=e.getFieldsConfig(),l=e.getFieldspace(),f=l.fieldsObj(),h=n.dimensionMeasureMap,d=n.axes,p=n.detailFields||[],y=o.filter(function(e){return e.type===ir.FieldType.DIMENSION}),g=o.filter(function(e){return e.type===ir.FieldType.MEASURE}),v=o.find(function(e){return-1!==p.indexOf(e.name)}),m=a.length,b=function getRowContent(e,n){var r=void 0,i=void 0,o=void 0,p=[],y=s[e].index,g=s[e].def.subtype===ir.DimensionSubtype.TEMPORAL?f[e].getMinDiff():0,v=u&&u[e]||oc(n,function(e){return e});if(null!==r){var b=n===ir.FieldType.MEASURE?a.map(function(e){return e[y]}):[].concat(strategy_toConsumableArray(new Set(a.map(function(e){return e[y]}))));b=b.filter(function(e){return""!==e});var _=d.color[0],x=d.shape[0],w=d.size[0],C=(_||x||w)&&m>1&&n!==ir.FieldType.MEASURE;b.forEach(function(n,u){var f=void 0,d=h[e];if(d&&d.length&&m>1){f=n;var y={value:""};C&&(y={type:"icon",color:_.getColor(n),shape:x.getShape(n),size:w.getSize(n)*t.iconScale}),d.length>1?(p.push([y,""+f]),d.forEach(function(e){o=s[e].index,r=a[u][o],i=oc("measure",l.fields[o]._ref.numberFormat())(r,g),p.push([{value:""+e+c,style:{"margin-left":t.margin+"px}"},className:t.classPrefix+"-tooltip-key"},{value:""+i,className:t.classPrefix+"-tooltip-value"}])})):(o=s[d[0]].index,r=a[u][o],i=oc("measure",l.fields[o]._ref.numberFormat())(r,g),p.push([y,{value:""+f+c,className:t.classPrefix+"-tooltip-key"},{value:""+i,className:t.classPrefix+"-tooltip-value"}]))}else f=e,i=v(r=n,g),p.push([{value:""+f+c,className:t.classPrefix+"-tooltip-key"},{value:""+i,className:t.classPrefix+"-tooltip-value"}])})}return p},_="keyValue";if(m>1&&v)r=function getTabularData(e,t,n,r){var i=[];return i.push(t.map(function(e){return e.name})),e.forEach(function(e){var a=[];t.forEach(function(t,i){var o=t.subtype===ir.DimensionSubtype.TEMPORAL?r[t.name]:0,u=t.type===ir.FieldType.MEASURE&&n.fields[i]._ref.numberFormat(),c=oc(t.subtype||t.type,u)(e[i],o);a.push(c)}),i.push(a)}),i}(a,o,l,n.timeDiffs),_="table";else{y.forEach(function(e){var t=e.subtype?e.subtype:e.type;r=[].concat(strategy_toConsumableArray(r),strategy_toConsumableArray(b(e.name,t)))});var x=[].concat(strategy_toConsumableArray(new(Function.prototype.bind.apply(Set,[null].concat(strategy_toConsumableArray(Object.values(h)))))));(m>1?g.filter(function(e){return-1===x.indexOf(e.name)}):g).forEach(function(e){var t=e.subtype?e.subtype:e.type;r=[].concat(strategy_toConsumableArray(r),strategy_toConsumableArray(b(e.name,t)))})}return{content:r,displayFormat:_}},cc={keyValue:function keyValue(e,t,n){return uc(e,t,n)}},sc="keyValue",lc=function(){function defineProperties(e,t){for(var n=0;n0?(this._config=na(this._config,arguments.length<=0?void 0:arguments[0]),this):this._config}},{key:"update",value:function update(e){return this._model=e.model,this._strategy=void 0!==e.strategy?e.strategy:sc,this._formatter=e.formatter,this}},{key:"context",value:function context(e){return this._context=e,this}},{key:"render",value:function render(e){var t=void 0,n=this._config,r=n.iconContainerSize,i=this._formatter,a=n.rowMargin,o=this._model;if(this._mount=e,(t=o instanceof Array?o:i instanceof Function?i(this._model,this._context):cc[this._strategy](this._model,this.config(),this._context))instanceof Function)e.html(t());else{var u=t,c="default";Di(t)&&(u=t.content,c=t.displayFormat);var s=Eo(e,"div",[c],n.classPrefix+"-tooltip-content",{},function(e){return e});if("table"===c){var l=Eo(s,"table",[1],n.classPrefix+"-tooltip-table"),f=Eo(l,"tbody",[1],n.classPrefix+"-tooltip-table-tbody"),h=Eo(f,"tr",u,n.classPrefix+"-tooltip-table-row");h.each(function(e,t){Ao(this).classed(n.classPrefix+"-tooltip-table-row-"+t,!0)}),Eo(h,"td",function(e){return e},n.classPrefix+"-tooltip-table-cell").each(function(e){Ao(this).html(e)})}else{var d=Eo(s,"div",u,n.classPrefix+"-tooltip-row"),p=Eo(d,"span",function(e){return e},n.classPrefix+"-tooltip-content");p.attr("class",n.classPrefix+"-tooltip-content"),Fo(d,{margin:a}),Fo(p,{display:"inline-block","margin-right":n.spacing+"px"}),p.each(function(e){var t=Ao(this);if(t.html(""),e instanceof Object)if("icon"===e.type){var n=Eo(t,"svg",[1]),i=Eo(n,"path",[1]),a=e.shape instanceof Function?e.shape:pa(e.shape);To(n,{x:0,y:0,width:r,height:r}),To(i,{d:a.size(e.size)(),transform:"translate("+r/2+", "+r/2+")"}),Fo(i,{fill:e.color}),Fo(n,{width:r+"px",height:r+"px"})}else t.html(e.value),e.className&&t.classed(e.className,!0),Fo(t,e.style);else t.html(e)})}}return this}},{key:"clear",value:function clear(){return this._model=null,this}}],[{key:"defaultConfig",value:function defaultConfig(){var e=tc.content;return e.classPrefix=tc.classPrefix,e}}]),Content}(),hc=function(){function defineProperties(e,t){for(var n=0;n0){var e=na({},this.constructor.defaultConfig());return this._config=na(e,arguments.length<=0?void 0:arguments[0]),this}return this._config}},{key:"addClass",value:function addClass(e){return this._tooltipContainer.classed(e,!0),this}},{key:"context",value:function context(){return arguments.length?(this._context=arguments.length<=0?void 0:arguments[0],this):this._context}},{key:"content",value:function content(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=this.config(),i=r.classPrefix,a=r.content.className,o=r.formatter,u=n.className||i+"-"+a+"-"+e,content=this._contents[e]=this._contents[e]||new fc,c=Eo(this._contentContainer,"div",[n.order],u);c.attr("class",i+"-"+a+" "+u),function reorderContainers(e,t){e.selectAll(t).sort(function(e,t){return e-t})}(this._contentContainer,"."+i+"-"+a);var s=r.content;return n.classPrefix=this._config.classPrefix,content.config(s),null===t?(content.clear(),c.remove(),delete this._contents[e]):(content.update({model:t,formatter:n.formatter||o}),content.context(this._context),content.render(c)),Object.keys(this._contents).length||this.hide(),this}},{key:"getContents",value:function getContents(){return Object.values(this._contents)}},{key:"position",value:function position(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(!Object.keys(this._contents).length)return this.hide(),this;this.show();var r=this._target,i=n.repositionArrow;if(r&&i){var a=this._tooltipContainer.node(),o=this._config,u=o.arrow.disabled,c=u?0:o.arrow.size,s=this._arrowOrientation,l="left"===s||"right"===s?t+a.offsetHeight-cr.y+r.height:e+a.offsetWidth-cr.x+r.width;if(!u)if(l){var f=void 0;this._tooltipArrow.style("display","none"),this._tooltipBackground.style("display","none"),this._tooltipConnectorContainer.style("display","block");var h=this._tooltipConnectorContainer.selectAll("path").data([1]),d=h.enter().append("path");"left"===s?f="M "+e+" "+(t+a.offsetHeight/2)+" L "+(r.x+r.width)+" "+(r.y+r.height/2):"right"===s?f="M "+(e+a.offsetWidth)+" "+(t+a.offsetHeight/2)+" L "+r.x+" "+(r.y+r.height/2):"bottom"===s&&(f="M "+(e+a.offsetWidth/2)+" "+(t+a.offsetHeight)+" L "+(r.x+r.width/2)+" "+r.y),d.merge(h).attr("d",f).style("display","block")}else{var p=nc(s,r,{x:e,y:t,boxHeight:a.offsetHeight,boxWidth:a.offsetWidth},this._config);rc(this,this._arrowOrientation,p),this._tooltipConnectorContainer.style("display","none")}}var y=this._offset||{x:0,y:0};return this._tooltipContainer.style("left",y.x+e+"px").style("top",y.y+t+"px"),this}},{key:"positionRelativeTo",value:function positionRelativeTo(e){var t=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=void 0,i=n.orientation;if(this.show(),!e)return this.hide(),this;var a=this._extent,o=this._tooltipContainer.node();this._tooltipContainer.style("top","0px").style("left","0px");var u=o.offsetWidth+2,c=o.offsetHeight+2,s=this._config,l=this._offset,f=s.arrow.disabled,h=f?0:s.arrow.size,d=void 0===n.draw||n.draw,p=e.y,y=e.x+e.width+l.x,g=a.width-y,v=e.x+l.x-a.x,m=p>c+h,b=g>=u+h,_=v>=u+h;return this._target=e,i||(i=m?"vertical":b||_?"horizontal":"vertical"),"horizontal"===i?r=function positionHorizontal(){var n=void 0,r=e.x+e.width,i=e.y;return b?(n="left",r+=h):_?(r=e.x-u,n="right",r-=h):(n="left",r+=h),e.height2&&void 0!==arguments[2]?arguments[2]:{},r=0,i=0,a=e.mergedEnter.model,o=this.firebolt.context,u=this.drawingContext();if(a.isEmpty()||null===t.criteria||!1===e.isSourceFieldPresent)return this.hide(n,null),this;var c=this._tooltips,s=this.config(),l={width:u.width,height:u.height},f=t.showInPosition,h=s.padding,d=[],p="fragmented"===s.mode,y=o.getSourceInfo(),g=y.fields,v=!!(!!g.x[0]&&g.x[0].type()===ir.FieldType.DIMENSION),m=t.position,b=[],_={},x=a.getData().uids;p?d.push.apply(d,function tooltip_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);tu.height:i>u.width)break;b.push({x:z.x,y:z.y,width:H.width,height:H.height,tooltip:R})}}for(var V in c)if(!_[V]){var U=c[V];U.content(t.action,null),U.getContents().length||(U.remove(),delete c[V])}return p&&(!function spaceOutBoxes(e,t,n){var r=void 0,i=void 0,a=void 0,o=void 0,u=void 0,c=e.length,s=function spaceOutIfOverlap(e,t,u){a=e.x,o=e.width,r=e.y,i=e.height;var c=r+i,s=a+o;n?(u?rt.y)&&(t.y=u?e.y-t.height-5:c+5):(u?at.x)&&(t.x=u?e.x-t.width-5:s+5)};for(e.sort(function(e,t){return n?e.y-t.y:e.x-t.x}),u=0,u=0;ut.height||e[u].x+e[u].width>t.width)for(n?e[u].y-=e[u].height+e[u].y-t.height:e[u].x-=e[u].width+e[u].x-t.width,u=c-1;u>0;u--)s(e[u],e[u-1],!0)}(b,l,v),b.forEach(function(e){return e.tooltip.position(e.x,e.y,{repositionArrow:!0})})),this}},{key:"hide",value:function hide(e){var t=this._tooltips;for(var n in t)if({}.hasOwnProperty.call(t,n)){var r=e.strategy||this._strategy;t[n].content(r,null),t[n].hide()}}}],[{key:"defaultConfig",value:function defaultConfig(){return{padding:5,offset:{x:0,y:0}}}},{key:"formalName",value:function formalName(){return"tooltip"}}]),Tooltip}(),vc=(n(15),function(){function defineProperties(e,t){for(var n=0;n2&&void 0!==arguments[2]?arguments[2]:{},r=this._strategies[n.strategy||this._strategy];return!1!==e.isSourceFieldPresent&&r(e,this,n.strategy||this._strategy),this}}],[{key:"formalName",value:function formalName(){return"highlighter"}},{key:"target",value:function target(){return"visual-unit"}}]),PlotHighlighter}(),wc=function(){function defineProperties(e,t){for(var n=0;n67.5&&v<=90||(r+=2*y),u=p,u=90===l?y:270===l?-y:0,o===Yc?(u=0===t&&c&&s===ds?u+u/2:u,Ao(this).attr("transform","translate("+(-u+f)+" \n "+(-r-f)+") rotate("+l+")")):(u=0===t&&c&&s===ds?u-u/2:u,Ao(this).attr("transform","translate("+(u-f)+" \n "+(r+f)+") rotate("+l+")"))}),t},Os=function changeTickOrientation(e,t,n){var r=t._smartTicks,i=t.config(),a=t.dependencies().labelManager,o=i.labels,u=i.orientation,c=o.rotation,s=o.smartTicks,l=e.selectAll(".tick text");if(l.selectAll("tspan").remove(),0===c||!1!==s||"top"!==u&&"bottom"!==u)if(0===c&&!1===s)l.attr("transform","");else{l.attr("y",0).attr("x",0).text(""),Eo(l,"tspan",function(e,t){return r[t].lines},"smart-text").attr("dy","0").style("opacity","0").transition().duration(1e3).attr("dy",function(e,t){return"bottom"===u||0!==t?r[t].oriTextHeight:-r[t].oriTextHeight*(r[t].lines.length-1)-n}).style("opacity",1).attr("x",0).text(function(e){return e})}else Ms(t,l,a,i);return l},Ts=function setFixedBaseline(e){e.config().fixedBaseline&&e.setFixedBaseline()},Fs=function setAxisNamePos(e,t,n){var r=n.axisNameHeight,i=n.yOffset,a=n.labelOffset,o=n.availableSpace;switch(t){case Xc:e.attr("transform","translate("+-(o.width-r)+","+(i+a)+")rotate(-90)");break;case Kc:e.attr("transform","translate("+(o.width-r)+","+(i+a)+")rotate(90)");break;case Yc:e.attr("transform","translate("+o.width/2+","+(-o.height+r)+")");break;case Gc:e.attr("transform","translate("+o.width/2+","+(o.height-r/2)+")")}return e};function cartesian_axis_helper_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);tt.length&&(t=p,r=e.smartTicks()?e.smartTicks()[s]:{},n=o[s]),d}),n=h.getOriSize(t),{largestLabel:t,largestLabelDim:n,axisTickLabels:i,allLabelLengths:o,smartTick:r}},js=function setOffset(e){var t=0,n=0,r=e.logicalSpace(),i=e.config(),a=i.orientation,o=i.xOffset,u=i.yOffset;a===Xc&&(t=void 0===o?r.width:o),a===Yc&&(n=void 0===u?r.height:u),e.config({xOffset:t,yOffset:n})},Is=function adjustRange(e,t,n,r){var i=function getAxisOffset(e,t,n){var r=Math.abs(t[1]-t[0])/(n[1]-n[0])*e,i=t[1]-t[0],a=i/r;return(i-i/(a+1)*a)/2}(e,t,n);return r===Yc||r===Gc?(t[0]+=i,t[1]-=i):(t[0]-=i,t[1]+=i),t},Ds=function registerChangeListeners(e){return e.store().model.next(["domain","range","mount","config"],function(){for(var t=arguments.length,n=Array(t),r=0;r0&&e.length*(t+this._minTickDistance.width)>i&&this.config({labels:{rotation:-90}})}return this}},{key:"adjustRange",value:function adjustRange(){return this}},{key:"getScaleValue",value:function getScaleValue(e){if(null!==e&&void 0!==e)return this.scale()(e)}},{key:"getTickSize",value:function getTickSize(){return this.axis().tickSize()}},{key:"getAxisDimensions",value:function getAxisDimensions(){return this.axisDimensions(function computeAxisDimensions(e){var t={},n=e.config(),r=n.name,i=n.labels,a=n.tickValues,o=(i.smartTicks?0:i.rotation)*Math.PI/180,u=e.dependencies().labelManager,c=Ns(e),s=c.largestLabelDim,l=c.axisTickLabels,f=c.smartTick,h=s.height,d=s.width;return 0===e.domain().length?null:(!1===e._rotationLock&&(e.setRotationConfig(a||l,s.width),e._rotationLock=!1),t=i.smartTicks?f:{width:Math.abs(h*Math.sin(o))+Math.abs(d*Math.cos(o)),height:Math.abs(d*Math.sin(o))+Math.abs(h*Math.cos(o))},u.setStyle(e._axisNameStyle),{tickSize:e.getTickSize(),tickLabelDim:t,axisLabelDim:u.getOriSize(r),largestLabelDim:s,axisTickLabels:l})}(this)),this.axisDimensions()}},{key:"getLogicalSpace",value:function getLogicalSpace(){return this.logicalSpace()||(this.logicalSpace(function calculateContinousSpace(e){e.range();var t=e.config(),n=e.getAxisDimensions(),r=t.orientation,i=t.show,a=t.showAxisName,o=n.axisLabelDim;if(!1===i)return{width:0,height:0};var u=o.width;if(r===Yc||r===Gc){var c=Ls(e,n,t),s=c.width,l=c.height;return{width:Math.max(s,u),height:l}}var f=Rs(e,n,t),h=f.width,d=f.height;return{width:h,height:Math.max(d,a?u:0)}}(this)),js(this),this.logicalSpace()),this.logicalSpace()}},{key:"invert",value:function invert(){for(var e=this,t=arguments.length,n=Array(t),r=0;ra[1];return"band"===r?(n=i.invertExtent(e,t),[i(o?n[n.length-1]:n[0]),i(o?n[0]:n[n.length-1])+i.bandwidth()]):[e,t]}},{key:"updateDomainBounds",value:function updateDomainBounds(e){var t=this.domain();return this.config().domain?t=this.config().domain:(0===t.length&&(t=e),e.length&&(t=[Math.min(t[0],e[0]),Math.max(t[1],e[1])])),this.domain(t)}},{key:"updateDomainCache",value:function updateDomainCache(e){!1===this._domainLock&&(this.domain([]),this._domainLock=!0);var t=[];return e&&e.forEach(function(e){void 0!==e&&null!==e&&t.push(e)}),this.updateDomainBounds(t)}},{key:"getMinTickDifference",value:function getMinTickDifference(){return this.domain()}},{key:"getFormattedTickValues",value:function getFormattedTickValues(e){return e}},{key:"setTickValues",value:function setTickValues(){var e=this.config().tickValues;return e?(e instanceof Array&&this.axis().tickValues(e),this):this}},{key:"getUnitWidth",value:function getUnitWidth(){return 0}},{key:"serialize",value:function serialize(){return{name:this.name,type:this.type,range:this.range(),config:this.config()}}},{key:"registerEvent",value:function registerEvent(e,t){this._eventList.push({name:e,action:t})}},{key:"on",value:function on(e,t){e=e||"update",this.registerEvent(e,t)}},{key:"render",value:function render(){return this.mount()&&function renderAxis(e){var t=e.config(),n=e.dependencies().labelManager,r=e.mount(),i=e.range(),a=e.axis(),o=e.scale(),u=e._axisNameStyle,c=e._tickLabelStyle,s=e.formatter,l=e.tickValues,f=t.orientation,h=t.name,d=t.labels,p=t.xOffset,y=t.yOffset,g=t.axisNamePadding,v=t.className,m=t.showAxisName,b=t.show,_=t.id,x=t.interpolator,w=t.classPrefix;if(b){var C=e.getTickSize(),k=Eo(Ao(r),"g",[e],""+v,{},function(e){return e.config().id});n.setStyle(c),"linear"===x&&e.setTickValues();var S=o.ticks||o.quantile||o.domain;s&&a.tickFormat(s(l||a.tickValues()||S()));var P=Math.abs(i[0]-i[1]),A=e.axisDimensions().tickLabelDim;k.attr("transform","translate("+p+","+y+")"),Ts(e),!1===d.smartTicks?k.transition().duration(1e3).call(a):k.call(a),k.selectAll(".tick").classed(w+"-ticks",!0),k.selectAll(".tick line").classed(w+"-tick-lines",!0),k.selectAll(".tick text").classed(w+"-ticks",!0).classed(w+"-ticks-"+_,!0),Os(k,e,C);var E=Eo(k,"text",[h],w+"-axis-name").attr("text-anchor","middle").classed(w+"-axis-name-"+_,!0).text(function(e){return e});E.classed(ys,!m);var M=P/2;n.setStyle(u);var O=n.getOriSize(h),T={labelProps:A,tickSize:C,axisNamePadding:g,axisNameHeight:O.height,axisNameWidth:O.width,yOffset:y,xOffset:p,labelOffset:M,availableSpace:e.availableSpace()};Fs(E,f,T)}}(this),this}},{key:"remove",value:function remove(){return this.store().unsubscribeAll(),Ao(this.mount()).remove(),this}},{key:"unsubscribe",value:function unsubscribe(){return this.store().unsubscribeAll(),this}},{key:"isReverse",value:function isReverse(){var e=this.range();return e[0]>e[1]}},{key:"getPixelToValueRatio",value:function getPixelToValueRatio(){var e=this.scale(),t=e.range(),n=e.domain();return Math.abs(t[1]-t[0])/(n[1]-n[0])}},{key:"id",get:function get(){return this._id}}],[{key:"defaultConfig",value:function defaultConfig(){return Es}}]),SimpleAxis}(),Vs=function(){function defineProperties(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:0,t=arguments[1],n=arguments[2],r=arguments[3],i=n.left,a=n.right,o=n.top,u=n.bottom,c=this.config(),s=c.orientation,l=c.fixedBaseline,f=this.getAxisDimensions().tickLabelDim;if(this.availableSpace({width:e,height:t}),s===Yc||s===Gc){var h=f.width;this.range([(l?0:h/2)+i,e-a-h/2]);var d=this.getLogicalSpace().height;r&&this.config({yOffset:Math.max(d,t)})}else{var p=f.height;this.range([t-u-(l?1:p/2),p/2+o]);var y=this.getLogicalSpace().width;r&&this.config({xOffset:Math.max(y,e)})}return this}},{key:"setTickValues",value:function setTickValues(){var e=this.config().tickValues,t=this.axis();return e?(e instanceof Array&&this.axis().tickValues(e),this):(t.tickValues(this.getTickValues()),this)}},{key:"getTickValues",value:function getTickValues(){var e=this.config(),t=e.orientation,n=e.tickValues,r=this.range(),i=this.axis(),a=Math.abs(r[0]-r[1]),o=Ns(this).largestLabelDim;return n?i.scale().ticks(n):function getNumberOfTicks(e,t,n,r){var i=n.scale().ticks(),a=r.config().numberOfTicks,o=i.length,u=o;return o*(1.5*t)>e&&(u=Math.floor(e/(1.5*t))),u=Math.min(a,Math.max(1,u)),n.scale().ticks(u)}(a,o[t===Gc||t===Yc?"width":"height"],i,this)}},{key:"getMinTickDifference",value:function getMinTickDifference(){return xa(this.config().tickValues)}},{key:"setFixedBaseline",value:function setFixedBaseline(e){var t=this.config(),n=t.orientation,r=t.labels.rotation,i=this.axis(),a=this._axisDimensions.largestLabelDim,o=a.width,u=a.height;return i.tickTransform(function(e,t){return 0!==t||n!==Xc&&n!==Kc?0!==t||n!==Yc&&n!==Gc||0!==r?"":"translate("+o/2+"px, 0px) rotate("+r+"deg)":"translate(0, -"+u/3+"px)"}),e}}],[{key:"type",value:function type(){return Qc}}]),ContinousAxis}(),Zs=function(){function defineProperties(e,t){for(var n=0;n0&&e.length*(t+this._minTickDistance.width)>a&&(a&&o0&&e.length*t>i&&(i&&1.25*a1?t.range:[al].concat(props_toConsumableArray(t.range)));var r=na(n,e.config()),i=na(r,t);return i.range instanceof Array&&(i.range=i.range.map(function(e,t){return sl(e,il[t])}),i.stops=t.stops||i.range.length),i.value=sl(i.value,i.value),i}},domain:{},scale:{},uniqueValues:{}};function color_strategy_defineProperty(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function color_strategy_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);tMath.min(t.length,18))for(var r=aa()(function hslInterpolator(){return Ne}(),t.map(function(e){return ul(e)})),i=0;i0&&void 0!==arguments[0]?arguments[0]:[];if(e.length){var t=this.scale(),n=t.range?t.range():null,r=this._colorStrategy.domainRange()(e,this.config().stops,n);this.domain(r.domain),r.range&&this.scale().range(r.range),this.uniqueValues(r.uniqueVals),this.scale().domain(r.scaleDomain||this.domain())}return this}},{key:"serialize",value:function serialize(){return{type:this.constructor.type(),scale:this.scale(),domain:this.domain(),config:this.config()}}},{key:"transformColor",value:function transformColor(e,t){var n=360*e[0],r=100*e[1],i=100*e[2],a=e[3]||1,o=n+t[0],u=r+t[1],c=i+t[2],s=a+t[3]||0;return{color:"hsla("+o+","+u+"%,"+c+"%,"+s+")",hsla:[o/360,u/100,c/100,s]}}},{key:"id",value:function id(){return this._id}}],[{key:"defaultConfig",value:function defaultConfig(){return ol}},{key:"type",value:function type(){return"color"}}]),ColorAxis}(),Sl={value:36,range:[36,1e3]};function size_strategy_defineProperty(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function size_strategy_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t0&&void 0!==arguments[0]?arguments[0]:0,t=this.config().value,n=this.scale(),r=this.domain()||[1,1];return n&&r[0]!==r[1]?this._sizeStrategy.range(e,n,this.domain(),this.uniqueValues()):t}},{key:"updateDomain",value:function updateDomain(e){if(e){var t=(0,this._sizeStrategy.domain)(e,this.config().intervals);this.domain(t.domain),this.uniqueValues(t.uniqueVals),this.scale().domain(t.scaleDomain||this.domain())}return this}},{key:"serialize",value:function serialize(){return{type:this.constructor.type(),scale:this.scale(),domain:this.domain(),range:this.range(),config:this.config()}}},{key:"id",value:function id(){return this._id}}],[{key:"defaultConfig",value:function defaultConfig(){return Sl}},{key:"type",value:function type(){return"size"}}]),SizeAxis}(),Ol={generator:null,value:"circle",range:["circle","diamond","star","cross","square","wye","triangle"]},Tl={config:{},domain:{},scale:{},uniqueValues:{},generator:{}},Fl=function(){function defineProperties(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:[];return e.length&&(this.uniqueValues(e),this.domain(e),this.scale().domain(e),this.config().generator&&(this._generatedShapes=function shapeGenerator(e,t){var n={};return e.forEach(function(e){n[e]=t(e)}),n}(e,this.config().generator))),this}},{key:"serialize",value:function serialize(){return{type:this.constructor.type(),scale:this.scale(),domain:this.domain(),range:this.config().range,config:this.config()}}},{key:"id",value:function id(){return this._id}}],[{key:"defaultConfig",value:function defaultConfig(){return Ol}},{key:"type",value:function type(){return"shape"}}]),ShapeAxis}();function data_type_scale_map_defineProperty(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var Il="measure",Dl="temporal",Ll=(data_type_scale_map_defineProperty(Nl={},"dimension",Zc),data_type_scale_map_defineProperty(Nl,Il,Qc),data_type_scale_map_defineProperty(Nl,Dl,Jc),function(e,t,n){var r=n.groupBy instanceof Array?n.groupBy:[n.groupBy],i=r.map(function(t){return e.findIndex(function(e){return e.name===t})});if(void 0!==i.find(function(e){return-1===e}))throw new Error("Groupby field "+r+" not found in schema");return function nestCollection(e){var t=T();return e.keys.forEach(function(e){return t.key(function(t){return t[e]})}),t.entries(e.data)}({keys:i,data:t})});var Rl;function transform_factory_defineProperty(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var Bl=(transform_factory_defineProperty(Rl={},"identity",function identityTransform(e,t,n){return t}),transform_factory_defineProperty(Rl,"group",Ll),transform_factory_defineProperty(Rl,"stack",function(e,t,n){var r=n.uniqueField,i=n.value,a=n.groupBy,o=n.sort||"descending",u=function normalizeData(e,t,n,r,i){var a=Ll(t,e,{groupBy:r}),o=t.findIndex(function(e){return e.name===r}),u=t.findIndex(function(e){return e.name===n}),c=t.findIndex(function(e){return e.name===i}),s=e.map(function(e){return e[c]}).filter(function(e,t,n){return n.indexOf(e)===t}).sort(),l=t.reduce(function(e,t,n){return e[n]=t.name,e},{});return{data:a.map(function(e){var t={},n=e.values.reduce(function(e,n){return e=n.reduce(function(e,r,i){return i===c?(e[r]=n[u],t[r]=n):i!==u&&(e[l[i]]=r),e},e)},{});return n._tuple=t,s.forEach(function(t){if(void 0===n[t]){n[t]=0;var r=new Array(e.values[0].length);r[o]=e.key,r[c]=t,n._tuple[t]=r}}),n}),keys:s}}(t,e,i,r,a),c=u.keys,s={},l=n.orderBy,f=e.findIndex(function(e){return e.name===l}),h=e.findIndex(function(e){return e.name===a});-1!==f&&(c.forEach(function(e){var n=t.find(function(t){return t[h]===e});s[e]=n[f]}),u.keys.sort(function(e,t){return s[e].localeCompare(s[t])}));var d=va({keys:u.keys,offset:n.offset||"diverging",order:o,data:u.data});return d.forEach(function(e){e.forEach(function(t){t.data=t.data._tuple[e.key]})}),d}),Rl);var zl=function transformFactory(e){var t=Bl[e];if("function"!=typeof t)throw new Error("Invalid transform type supplied.");return t},Hl=function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function sliceIterator(e,t){var n=[],r=!0,i=!1,a=void 0;try{for(var o,u=e[Symbol.iterator]();!(r=(o=u.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){i=!0,a=e}finally{try{!r&&u.return&&u.return()}finally{if(i)throw a}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}();var Vl,Ul=f.BAND,Wl=function getLayerColor(e,t){var n=e.datum,r=e.index,i=t.colorEncoding,a=t.colorAxis,o=t.colorFieldIndex,u="",c="";return i&&i.value instanceof Function?(c=i.value(n,r),u=i.value(n,r)):(u=a.getRawColor(n._data[o]),c=a.getHslString(u)),{color:c,rawColor:u}},ql=function transfromColor(e,t,n,r){t.meta.stateColor[n]=t.meta.stateColor[n]||t.meta.originalColor;var i=e.transformColor(t.meta.stateColor[n],r);return t.meta.stateColor[n]=i.hsla,i},Gl=function applyInteractionStyle(e,t,n,r){var i=e.getPlotElementsFromSet(t),a=e.axes().color,o=r.apply,u=r.interactionType;n.forEach(function(e){var t=e.type;i.style(t,function(n){var r=n.meta,i=r.colorTransform,c=r.stateColor,s=r.originalColor;if(i[u]=i[u]||{},o&&!i[u][t])return i[u][t]=e.intensity,ql(a,n,t,e.intensity).color;if(!o&&i[u][t])return i[u][t]=null,ql(a,n,t,e.intensity.map(function(e){return-e})).color;var l=c[t]?c[t]:s,f=Hl(l,4);return"hsla("+360*f[0]+","+100*f[1]+"%,"+100*f[2]+"%, "+(f[3]||1)+")"})})},Yl=function getAxesScales(e){var t=[Bc.X,Bc.Y].map(function(t){return e[t]}),n=Hl(t,2),r=n[0],i=n[1],a=[r,i].map(function(e){return e&&e.scale()}),o=Hl(a,2);return{xAxis:r,yAxis:i,xScale:o[0],yScale:o[1]}},Xl=function getIndividualClassName(e,t,n,r){var i=r.config().individualClassName,a="";return i instanceof Function&&(a=i(e,t,n,r)),a},Kl=function attachDataToVoronoi(e,t){var n;e.data((n=[]).concat.apply(n,function helpers_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t=e[0]?(i=d=e[1],h=f=e[0]):(i=d=e[0],h=f=e[1]),(t=a===ir.FieldType.MEASURE?{x:h,x0:d,y:n[u],y0:n[u]}:{x:n[o],x0:n[o],y:i,y0:f})._data=n,t._id=n[l]}else(t={x:e[o],y:e[u],x0:e[c],y0:e[s]})._data=e,t._id=e[l];return t})}).filter(function(e){return e.length})}(e,t,this.encodingFieldsInf(),this.transformType())}},{key:"getNearestPoint",value:function getNearestPoint(){return null}},{key:"applyInteractionStyle",value:function applyInteractionStyle(e,t,n){var r=(this.config().interaction||{})[e];r&&Gl(this,t,r,{apply:n,interactionType:e})}},{key:"transformType",value:function transformType(){return arguments.length?(this._transformType=arguments.length<=0?void 0:arguments[0],this):this._transformType}},{key:"render",value:function render(){return this}},{key:"elemType",value:function elemType(){return"g"}},{key:"remove",value:function remove(){return this.store().unsubscribeAll(),Ao(this.mount()).remove(),this}},{key:"cachePoint",value:function cachePoint(e,t){if(null===e)return this;var n=this._pointMap;return!n[e]&&(n[e]=[]),n[e].push(t),this}},{key:"dataProps",value:function dataProps(){return arguments.length?(this._dataProps=arguments.length<=0?void 0:arguments[0],this):this._dataProps}},{key:"getIdentifiersFromData",value:function getIdentifiersFromData(e){var t=this.data().getData().schema,n=this.data().getFieldsConfig(),r=[[],[]],i=this.encodingFieldsInf(),a=i.xFieldType,o=i.yFieldType,u=i.xField,c=i.yField,s=[a,o].map(function(e){return e===ir.FieldType.MEASURE}),l=tf(s,2),f=l[0],h=l[1];if(t.forEach(function(t,i){var a=t.name;n[a].def.type===ir.FieldType.DIMENSION&&(r[0].push(a),r[1].push(e[i]))}),f&&h){var d,p,y=n[u].index,g=n[c].index;(d=r[0]).push.apply(d,[u,c]),(p=r[1]).push.apply(p,[e[y],e[g]])}return r}},{key:"getPlotSpan",value:function getPlotSpan(){return{x:0,y:0}}},{key:"getPlotPadding",value:function getPlotPadding(){return{x:0,y:0}}},{key:"getPointsFromIdentifiers",value:function getPointsFromIdentifiers(e){var t,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=n.getAllAttrs,i=n.getBBox;if(!this.data())return[];var a=void 0,o=void 0;if(e instanceof ar.a){var u=e.getData();a=u.schema.map(function(e){return e.name}),o=u.data}else a=e[0],o=e.slice(1,e.length);var c=this._points,s=this.data().getFieldsConfig(),l=(t=[]).concat.apply(t,function base_layer_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t2&&void 0!==arguments[2]?arguments[2]:{},r=Ao(n.event.target).data()[0];if(Di(r)){var i=r.datum,a=i.data,o=i.uid;return{id:this.getIdentifiersFromData(a,o),layerId:this.id()}}return null}},{key:"getPlotElementsFromSet",value:function getPlotElementsFromSet(e){return Ao(this.mount()).selectAll(this.elemType()).filter(function(t){return-1!==e.indexOf(t.datum.uid)})}},{key:"render",value:function render(e){var t=this,n=this.measurement(),r=n.height,i=n.width,a=this.config(),o=a.classPrefix,u=a.defClassName,c=a.minOuterRadius,s=a.innerRadius,l=a.outerRadius,f=a.cornerRadius,h=a.padAngle,d=a.padRadius,p=a.padding,y=a.transition,g=a.innerRadiusFixer,v=this.axes().size,m=this._store,b=m.get("transformedData"),_=r-p.top-p.bottom,x=i-p.left-p.right,w=Gi(u,this.id(),o),C=function getRadiusRange(e,t,n){var r=n.minOuterRadius,i=n.innerRadius,a=n.outerRadius,o=n.innerRadiusFixer;return[Math.max(i+o||0,r),a||Math.min(t,e)/2]}(x,_,{minOuterRadius:c,innerRadius:s,outerRadius:l,innerRadiusFixer:g}),k=this.axes().color,S=l||Math.min(_,x)/2,P=m.get("domain").radius,A=function rangeValueGetter(e){return function getRangeValue(e,t,n,r,i){var a=1,o=e.outerRadiusValue,u=e.sizeVal,c=i.domain(),s=i.getSize(u)/(c?i.range()[1]:i.config().value);return a*=(t[1]-t[0])/(n[1]-n[0]),(t[0]+(o-n[0])*a||r)*s}(e,C,P,S,v)},E=bf().innerRadius(s?Math.min(_/2,x/2,s):0).cornerRadius(f).padAngle(h).padRadius(d);this._chartWidth=x,this._chartHeight=_;var M=Eo(Ao(e),"g",[1],w[0]+"-group").classed(w[1]+"-group",!0).attr("transform","translate("+x/2+","+_/2+")"),O=[],T=0;return Eo(M,"g",b,""+w[0],{update:function tween(e){Eo(e,"path",function(e,t){return[{datum:e,index:t,arcFn:E,meta:{originalColor:k.getRawColor(e.colorVal),stateColor:{},colorTransform:{}}}]},w[0]+"-path").style("fill",function(e){return k.getColor(e.datum.colorVal)}).transition().duration(y.duration).attrTween("d",function(){for(var e=arguments.length,t=Array(e),n=0;n0&&e.forEach(function(e){var i=e[0].datum.startAngle,a=e[e.length-1].datum.endAngle,o=2*Math.PI*i/(2*Math.PI+i-a);e.forEach(function(e){var i=e.elem,a=e.datum;i.each(function(){var e=Ao(this);e.selectAll("path").transition().duration(t.duration).attrTween("d",function(){return function(e){var t=n(a);return a.outerRadius=t,r(ra()(a,{startAngle:o,endAngle:o,outerRadius:t})(e))}}).remove(),e.remove()})})})}(O,y,A,E),this}},{key:"getPointsFromIdentifiers",value:function getPointsFromIdentifiers(e){if(!this.data())return[];var t=e[0],n=e.slice(1,e.length),r=Ao(this.mount()).selectAll("path").data(),i=this.data().getFieldsConfig(),a=r.filter(function(e){var r=e.datum.data,a=e.datum.uid;return t.every(function(e,t){return e in i&&i[e].def.type===ir.FieldType.DIMENSION?-1!==n.findIndex(function(n){return n[t]===r[i[e].index]}):e!==nr.ROW_ID||-1!==n.findIndex(function(e){return e[t]===a})})})[0];if(a){var o=a.arcFn.centroid(a.datum);return[{x:o[0]+this._chartWidth/2,y:o[1]+this._chartHeight/2,width:2,height:2}]}return[]}}],[{key:"defaultConfig",value:function defaultConfig(){return yf}},{key:"formalName",value:function formalName(){return"arc"}}]),ArcLayer}(),xf=function drawText(e,t,n,r){var i=Ao(e).selectAll("g").data(t),a=i.enter().append("g").each(function(e){To(this,e.enter)}).merge(i),o=Lo(Ao(e),n.className),u=parseInt(o.fontSize,10);return r.setStyle(o),a.each(function(e){var t,n=Ao(this),i=e.update,a=e.text,o=e.color,c=e.textanchor,s=e.style,l=e.background;if(t=l.value){var f=l.padding,h=void 0,d=r.getOriSize(e.text),p=d.width,y=d.height,g=Eo(n,"rect",[1]);h="end"===c?p:"start"===c?0:p/2,To(g.node(),{x:i.x-h-f/2,y:i.y-u-f/2,width:p+f,height:y+f}),l&&Fo(g,{background:t})}var v=Eo(n,"text",function(e){return[e]}).text(a),m=v.node();s&&Fo(m,s),o&&Fo(m,{fill:o}),e.className&&v.classed(e.className,!0),To(m,i),v.attr("text-anchor",c)}),i.exit().remove(),i},wf={defClassName:"layer-text",classPrefix:"muze",className:"",transform:{type:"identity"},interaction:{highlight:[{type:"fill",intensity:[0,0,-15,0]}],fade:[{type:"fill",intensity:[0,0,15,0]}],focus:[{type:"fill",intensity:[0,0,15,0]}]},transition:{effect:"cubic",duration:1e3},encoding:{color:{},text:{value:"",background:{padding:10}}},states:{highlight:{className:"muze-layer-text-highlight"},fadeout:{className:"muze-layer-text-fadeout"},selected:{className:"muze-layer-text-selected"}}},Cf=(n(27),function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function sliceIterator(e,t){var n=[],r=!0,i=!1,a=void 0;try{for(var o,u=e[Symbol.iterator]();!(r=(o=u.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){i=!0,a=e}finally{try{!r&&u.return&&u.return()}finally{if(i)throw a}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}()),kf=function(){function defineProperties(e,t){for(var n=0;n4)}(r)?r:pa(r).size(i)(a),Eo(n,"path",function(e){return[e]}).attr("d",s)}else e.shape="circle",createShape(e,t)}(e,this)}),(t=c?t:t.transition().duration(c?0:i.duration)).attr("transform",function(e){return"translate("+e.update.x+","+e.update.y+")"}).each(function(e){var t=e.style,n=Ao(this);Xi(t,function(e){return n.style(e,t[e])}),n.attr("class",""+a),n.classed(e.className,!0)});var h=l.exit();c?h.remove():h.transition().ease(Wi[u]).duration(o).on("end",function(){Ao(this).remove()}).style("fill-opacity",0).style("stroke-opacity",0)},Af={defClassName:"layer-point",className:"",classPrefix:"muze",defColorStyle:"stroke",interaction:{highlight:[{type:"fill",intensity:[0,0,-20,0]}],fade:[{type:"fill",intensity:[0,0,20,0]}],focus:[{type:"fill",intensity:[0,0,20,0]}]},innerPadding:.1,nearestPointThreshold:10,transform:{type:"identity"},transition:{effect:"cubic",duration:1e3},encoding:{size:{value:30},color:{},shape:{value:"circle"},x:{},y:{},strokeOpacity:{value:.5},fillOpacity:{value:.5}},shapes:["circle","cross","diamond","square","star","wye","triangle"],sizes:[20,30,40,50,60,70]},Ef=(n(29),function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function sliceIterator(e,t){var n=[],r=!0,i=!1,a=void 0;try{for(var o,u=e[Symbol.iterator]();!(r=(o=u.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){i=!0,a=e}finally{try{!r&&u.return&&u.return()}finally{if(i)throw a}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}()),Mf=function(){function defineProperties(e,t){for(var n=0;n3&&void 0!==arguments[3]?arguments[3]:{},a=[],o=t.size,u=t.shape,c=t.color,s=t.x,l=t.y,f=o.field,h=o.value,d=u.field,p=s.field,y=l.field,g=n.size,v=n.shape,m=this.data().getFieldsConfig(),b=m[p]&&m[p].def.type===ir.FieldType.DIMENSION,_=m[y]&&m[y].def.type===ir.FieldType.DIMENSION,x=b?Bc.X:_?Bc.Y:null,w=c&&c.field,C=m[w]&&m[w].index,k=this._store.get("measurement"),S=m[d]&&m[d].index,P=m[f]&&m[f].index,A=n.color,E=i.offset,M=E.x,O=E.y,T=function _loop(i,o){var u=e[i],s=u._data,l=h instanceof Function?h(u,i):g.getSize(s[P]),f=v.getShape(s[S]),d=[Bc.X,Bc.Y].map(function(e){var r=null===u[e]?void 0:u[e],i=e===Bc.X?k.width:k.height;return t[e].field?n[e].getScaleValue(r):i/2}),p=Ef(d,2),y=p[0],m=p[1];y+=M,m+=O;var b=Wl({datum:u,index:i},{colorEncoding:c,colorAxis:A,colorFieldIndex:C}),_=b.color,w=b.rawColor,E={fill:_,stroke:_};if(!isNaN(y)&&!isNaN(m)){var T={enter:{x:y,y:m},update:{x:y,y:m},shape:f,size:Math.abs(l),meta:{stateColor:{},originalColor:w,colorTransform:{}},style:E,_data:s,_id:u._id,source:u._data,rowId:u._id};T.className=Xl(u,i,e,r),a.push(T),r.cachePoint(u[x],T)}},F=0,N=e.length;F=0?k:C))):(p=c===Nc||r[e]>=0?k:C,y=Math.abs(p-(c===Nc?S:r[e]>=0?C:k))),d=C}else p=0,y=f[i];return{enterSpace:g,enter:d,pos:p,space:y}}),jf=function resolveDimensions(e,t,n){var r={xAxis:n.x,yAxis:n.y},i=Nf("x",r,t,e),a=i.enterSpace,o=i.enter,u=i.pos,c=i.space,s=Nf("y",r,t,e),l=s.enterSpace;return{enter:{x:o,y:s.enter,width:a,height:l},update:{x:u,y:s.pos,width:c,height:s.space}}},If=function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function sliceIterator(e,t){var n=[],r=!0,i=!1,a=void 0;try{for(var o,u=e[Symbol.iterator]();!(r=(o=u.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){i=!0,a=e}finally{try{!r&&u.return&&u.return()}finally{if(i)throw a}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),Df=function(){function defineProperties(e,t){for(var n=0;n=C.x&&e<=C.width+C.x&&t>=C.y&&t<=C.height+C.y){c=w;break}c=null}var k=c&&c._data;return k&&(u=this.getIdentifiersFromData(k,c._id)),c?{dimensions:[c.update],id:u,layerId:this.id()}:c}},{key:"getPlotSpan",value:function getPlotSpan(){return this._plotSpan}}],[{key:"formalName",value:function formalName(){return"bar"}},{key:"defaultConfig",value:function defaultConfig(){return Ff}},{key:"defaultPolicy",value:function defaultPolicy(e,t){var n=rf.defaultPolicy(e,t),r=n.encoding.color.field,i=n.transform;return r&&(i.groupBy=r),n}}]),BarLayer}(),zf={defClassName:"layer-tick",className:"",classPrefix:"muze",interaction:{highlight:[{type:"stroke",intensity:[0,0,-15,0]}],fade:[{type:"stroke",intensity:[0,0,15,0]}],focus:[{type:"stroke",intensity:[0,0,15,0]}]},innerPadding:.1,transform:{type:"identity"},transition:{effect:"cubic",duration:1e3},encoding:{color:{},x:{},y:{},x0:{},y0:{},strokeOpacity:{value:.5},fillOpacity:{value:.5}},states:{highlight:{className:"muze-layer-tick-highlight"},fadeout:{className:"muze-layer-tick-fadeout"},selected:{className:"muze-layer-tick-selected"}}},Hf=function(e){var t=e.points,n=e.container,r=e.keyFn,i=e.className,a=Ao(n),o=a.selectAll("path").data(t,r),u=o.enter().append("path");return a.attr("class",i||""),u.each(function(e){var t=Ao(this),n=e.enter||{};Object.entries(n).forEach(function(e){return!isNaN(e[1])&&t.attr(e[0],e[1])})}),o.exit().remove(),o.merge(u).each(function(e){var t=Ao(this),n=e.update,r=e.style||{},i=void 0!==n.x0?n.x0:n.x,a=void 0!==n.y0?n.y0:n.y,o="M "+n.x+" "+n.y+" L "+i+" "+a;e.className&&t.classed(e.className,!0),t.attr("d",o),Object.entries(r).forEach(function(e){return t.style(e[0],e[1])})})},Vf=(n(33),function(){function defineProperties(e,t){for(var n=0;n3&&void 0!==arguments[3]?arguments[3]:{},i=[],a=Yl(n),o=a.xAxis,u=a.yAxis,c=this.data().getFieldsConfig(),s=this.encodingFieldsInf(),l=s.xField,f=s.yField,h=s.x0Field,d=s.y0Field,p=s.xFieldType,y=s.yFieldType,g=p===ir.FieldType.DIMENSION,v=y===ir.FieldType.DIMENSION,m=g?Bc.X:v?Bc.Y:null,b=t.color,_=b&&b.field,x=c[_]&&c[_].index,w=this._store.get("measurement"),C=n.color,k=r.offset,S=k.x,P=k.y,A=r.span,E=A.x,M=A.y,O=0,T=e.length;O0&&(n[0]=[].concat(field_sanitizer_toConsumableArray(n[0]),field_sanitizer_toConsumableArray(n[1])),n[1]=[]),{fields:n.map(function(e,t){return 1===t?r[t].concat(n[t]):n[t].concat(r[t])}),dimensions:[].concat(field_sanitizer_toConsumableArray(n[0]),field_sanitizer_toConsumableArray(n[1])),measures:[].concat(field_sanitizer_toConsumableArray(r[0]),field_sanitizer_toConsumableArray(r[1])),temporal:[].concat(field_sanitizer_toConsumableArray(i[0]),field_sanitizer_toConsumableArray(i[1])),categorical:[].concat(field_sanitizer_toConsumableArray(a[0]),field_sanitizer_toConsumableArray(a[1]))}}(i,n)}),r=Sh(n,2),i=r[0],a=r[1],o=i.fields,u=i.dimensions,c=i.measures,s=i.temporal,l=i.categorical,f=a.fields,h=a.dimensions,d=a.measures;return{rows:o,rowDimensions:u,rowMeasures:c,rowTemporalFields:s,rowCategoricalFields:l,columns:f,columnTemporalFields:a.temporal,columnCategoricalFields:a.categorical,columnDimensions:h,columnMeasures:d}},Eh=function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function sliceIterator(e,t){var n=[],r=!0,i=!1,a=void 0;try{for(var o,u=e[Symbol.iterator]();!(r=(o=u.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){i=!0,a=e}finally{try{!r&&u.return&&u.return()}finally{if(i)throw a}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),Mh=function(){function defineProperties(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:{},t=arguments[1],n=Jh(th,t.rows,e),r=Eh(n,2),i=r[0],a=r[1],o=Jh("column",t.columns,e),u=Eh(o,2),c=u[0],s=u[1];return this.axisFrom({row:a,column:s}),this.headerFrom({row:i,column:c}),this}}]),VisualEncoder}(),Th={linear:Qs,band:Js,temporal:nl,size:Ml,color:kl,shape:jl},Fh={dimension:f.BAND,categorical:f.BAND,measure:f.LINEAR,temporal:f.TIME},Nh=function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function sliceIterator(e,t){var n=[],r=!0,i=!1,a=void 0;try{for(var o,u=e[Symbol.iterator]();!(r=(o=u.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){i=!0,a=e}finally{try{!r&&u.return&&u.return()}finally{if(i)throw a}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}();function encoder_helper_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t1?e.position="both":e.position=n.axisFrom()[a],r[o]=Ih(o,s[i],e,o===$f?l:f)}),r}},{key:"getFacetsAndProjections",value:function getFacetsAndProjections(e,t){for(var n=[],r=[],i=0,a=[],o=[],u=e[0],c=e[1],s=u.length,l=c.length,f=this.axisFrom(),h=0;hi)for(var g=i;g-1&&(r=[[b,b]],a.splice(_,1)),o.splice(0,1)}else{var x=a.length-1,w=a[x];r=[[w]];var C=Dh(o,w);C>-1&&(r=[[w,w]],o.splice(C,1)),a.splice(x,1)}return{facets:n=(n=[].concat(a,o)).filter(function(e,t,n){return t===n.findIndex(function(t){return t.toString()===e.toString()})}),projections:r}}},{key:"fieldSanitizer",value:function fieldSanitizer(e,t){return function get(e,t,n){null===e&&(e=Function.prototype);var r=Object.getOwnPropertyDescriptor(e,t);if(void 0===r){var i=Object.getPrototypeOf(e);return null===i?void 0:get(i,t,n)}if("value"in r)return r.value;var a=r.get;return void 0!==a?a.call(n):void 0}(CartesianEncoder.prototype.__proto__||Object.getPrototypeOf(CartesianEncoder.prototype),"fieldSanitizer",this).call(this,e,t)}},{key:"getRetinalFieldsDomain",value:function getRetinalFieldsDomain(e,t){var n=e.groupedModel,r={};for(var i in t)if({}.hasOwnProperty.call(t,i)){var a=t[i],o=a.field;if(!a.domain&&o){var u=Zh(n,o);r[o]=u}}return r}},{key:"serializeLayerConfig",value:function serializeLayerConfig(e){var t=[];return e.length&&e.forEach(function(e,n){var r=Gf.sanitizeLayerConfig(e);r.order=n,t.push(r)}),t}},{key:"getLayerConfig",value:function getLayerConfig(e,t){var n=[],r=e.columnFields,i=e.rowFields;return r.forEach(function(e){var r=e.toString();i.forEach(function(i){var a=[],o=i.toString(),u={x:{field:r},y:{field:o}},c=i.subtype(),s=function getDefaultMark(e,t){return"categorical"===e||"categorical"===t?"bar":"temporal"===e||"temporal"===t?"line":"point"}(e.subtype(),c),l=[{mark:s,def:{mark:s,encoding:u}}],f=function getLayerConfFromFields(e,t,n){return n.filter(function(n){var r,i,a,o=n instanceof Array?n:[n],u=(r=[]).concat.apply(r,encoder_helper_toConsumableArray(o.map(function(e){return e.encoding}).filter(function(e){return void 0!==e})));if(!u.length)return!0;var c=(i=[]).concat.apply(i,encoder_helper_toConsumableArray(u.map(function(e){return[e.x&&e.x.field,e.x0&&e.x0.field]}))).filter(function(e){return void 0!==e&&null!==e}),s=(a=[]).concat.apply(a,encoder_helper_toConsumableArray(u.map(function(e){return[e.y&&e.y.field,e.y0&&e.y0.field]}))).filter(function(e){return void 0!==e&&null!==e});if(!c.length&&!s.length)return!0;var l=!!c.length&&c.every(function(t){return-1!==e.indexOf(t)}),f=!!s.length&&s.every(function(e){return-1!==t.indexOf(e)});return c.length&&s.length?l&&f:l||f})}(e.getMembers(),i.getMembers(),t||[]);a=f.length?f.map(function(e){var t=na(na({},l[0].def),e),n=Gf.getSerializedConf(t.mark,t);return{mark:t.mark,order:t.order,def:n}}):l,n.push.apply(n,function cartesian_encoder_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);tt)for(var h=t;h0&&(e=na(e,t[0])),n.push(e)}),0===n.length&&(n=t),this.layers(n),n}},{key:"serializeLayerConfig",value:function serializeLayerConfig(e){var t=[];return e.length&&e.forEach(function(e){var n=Gf.getSerializedConf(e.mark,e);t.push({mark:e.mark,def:n})}),t}}],[{key:"type",value:function type(){return"polar"}}]),PolarEncoder}(),Hh=function(){function defineProperties(e,t){for(var n=0;n1&&void 0!==arguments[1]?arguments[1]:{},n=e.axisType,r=e.fieldsConfig,i=t.field,a=[],o=Th[n];return t.type=t.type?t.type:Qh(r,i||null),a.push(new o(t)),a}({axisType:e,fieldsConfig:t},n[e])}),r}},{key:"getLayerConfig",value:function getLayerConfig(e,t){var n=[];return t.forEach(function(t){var r=t;[nh,rh,ih].forEach(function(t){if(e[t]&&e[t].field){var n=r.def;r.def instanceof Array?n.forEach(function(n){n.encoding=n.encoding||{},!n.encoding[t]&&(n.encoding[t]={}),n.encoding[t].field=e[t].field}):(n.encoding=n.encoding||{},!n.encoding[t]&&(n.encoding[t]={}),n.encoding[t].field=e[t].field)}}),n.push(r)}),n}},{key:"setCommonDomain",value:function setCommonDomain(e){var t=e.domains,n=e.axes,r=e.encoding;return Object.entries(r).forEach(function(e){if(e[1]&&e[1].field){var r=e[0],i=e[1].field;i&&n[r].forEach(function(n){var r=t[i];!e[1].domain&&n.updateDomain(r)})}}),n}}],[{key:"type",value:function type(){return"retinal"}}]),RetinalEncoder}(),Uh=function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function sliceIterator(e,t){var n=[],r=!0,i=!1,a=void 0;try{for(var o,u=e[Symbol.iterator]();!(r=(o=u.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){i=!0,a=e}finally{try{!r&&u.return&&u.return()}finally{if(i)throw a}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),Wh=void 0;function group_utils_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t0?e[0].map(function(i,a){return new n({type:"header"},{labelManager:r}).source(function getHeaderText(e,t,n){var r="";if(t===n-1&&e.length>n){for(var i=t;i0&&void 0!==arguments[0]?arguments[0]:[];return new Vo(e)}([]),a=(i=i.data(n,r)).enter().append(t).merge(i);return i.exit()&&i.exit().remove(),a},nd=function getBorders(e,t){var n={top:!1,bottom:!1},r={left:!1,right:!1},i={top:!1,bottom:!1,left:!1,right:!1},a=e.rows,o=e.columns,u=e.values,c=Uh(a,2),s=c[0],l=c[1],f=Uh(o,2),h=f[0],d=f[1],p=t.fieldInfo(),y=p.rowDimensions,g=p.columnDimensions,v=p.rowTemporalFields,m=p.columnTemporalFields,b=p.columnMeasures,_=p.rowMeasures,x=y.length+g.length,w=_.length+b.length,C=v.length+m.length;if("polar"===t.constructor.type()){if(!x)return{showRowBorders:n,showColBorders:r,showValueBorders:i}}else if(!w&&!C&&x<=2)return{showRowBorders:n,showColBorders:r,showValueBorders:i};return n=function getRowBorders(e,t){var n={top:!1,bottom:!1};return(e.length>1||t.length>1)&&(n.top=!0,n.bottom=!0),n}(s,l),r=function getColumnsBorders(e,t){var n={left:!1,right:!1};return(e.length||t.length)&&(e[0]&&e[0].length>1||t[0]&&t[0].length>1)&&(n.left=!0,n.right=!0),n}(h,d),i=function getValueBorders(e,t){var n={top:!0,left:!0,bottom:!0,right:!0},r=[ah,oh],i=["top","bottom"];return e.forEach(function(e,t){e[0]&&e[0].length?n[r[t]]=!0:n[r[t]]=!1}),t.forEach(function(e,t){e.length?n[i[t]]=!0:n[i[t]]=!1}),n}([s,l],[h,d]),u.length>1&&(i.top=!0,i.bottom=!0),u.length&&u[0].length>1&&(i.left=!0,i.right=!0),{showRowBorders:n,showColBorders:r,showValueBorders:i}};function action_behaviour_map_defineProperty(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var rd=(action_behaviour_map_defineProperty(qh={},a.DRAG,{behaviours:[u.BRUSH],touch:!1}),action_behaviour_map_defineProperty(qh,a.HOVER,{behaviours:[u.HIGHLIGHT]}),action_behaviour_map_defineProperty(qh,a.LONGTOUCH,{behaviours:[u.SELECT],touch:!0}),action_behaviour_map_defineProperty(qh,a.TOUCHDRAG,{behaviours:[u.BRUSH],touch:!0}),action_behaviour_map_defineProperty(qh,a.CLICK,{behaviours:[u.SELECT],touch:!1}),qh),ad="config",od="data",ud="axes",cd="layerDef",sd="width",ld="height",fd="mount",hd="primaryXAxisUpdated",dd="primaryYAxisUpdated",pd="secondaryXAxisUpdated",yd="secondaryYAxisUpdated",gd="transform",vd="dataDomain",md="layersCreated",bd="fields",_d="timeDiffs",xd="layerAxisIndex";function src_helper_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t2&&void 0!==arguments[2]?arguments[2]:{},r=void 0,i=n.payload,a=n.selectionSet,o=n.propagationFields[t]||{},u=o.fields||[],c=o.append,s=i.criteria,l=e.context,f=l.cachedData()[0],h=l.id(),d=e.sideEffects(),p=e._behaviourEffectMap,y=a.mergedEnter.model,g=f.getFieldsConfig();i.sourceUnit=h,i.action=t,i.sourceCanvas=l.parentAlias();var v=e._propagationBehaviourMap[t]||t,m=[];null===s?r=null:Di(s)?(m=Object.keys(s||{}),r=y?y.project(m):null):(m=s[0],r=y?y.project(m):null);var b=l.facetByFields();if(null!==r&&u.length){var _=r.getData().schema.map(function(e){return e.name});r=function getModelWithFacetData(e,t){var n=e.getData(),r=n.schema,i=n.data,a=[],o=t[0].map(function(e){return{name:""+e,type:ir.FieldType.DIMENSION}}),u=t[1];return i.forEach(function(e){var t={};r.forEach(function(n,r){t[n.name]=e[r]}),o.forEach(function(e,n){t[e.name]=u[n]}),a.push(t)}),new ar.a(a,[].concat(data_propagator_toConsumableArray(r),data_propagator_toConsumableArray(o)))}(r,b),m=c?[].concat(data_propagator_toConsumableArray(_),data_propagator_toConsumableArray(u)):u,r=r.project(m)}var x=!1;m.length&&m.every(function(e){return g[e]&&g[e].def.type===ir.FieldType.MEASURE})&&(x=!0);var w=l.parentAlias();i.action=t;var C=e._actions.behavioural[v],k=!!C&&C.constructor.mutates(),S=function filterFn(e,t){var n=p[e.config.action],r=!e.config.groupId||n.some(function(e){return d[e.name||e].constructor.mutates()});return e.config.groupId!==t.groupId&&r},P=e._actions.behavioural[t],A=!!P&&P.constructor.mutates(),E={payload:i,action:t,criteria:r,isMutableAction:A,propagateInterpolatedValues:x,groupId:w,sourceId:A?w:h,filterFn:S,enabled:function enabled(e,n){return t===v||e.payload.sourceCanvas===n.context.parentAlias()}};f.propagate(r,E,!0),t!==v&&(E={payload:i,sourceId:k?w:h,criteria:r,isMutableAction:k,propagateInterpolatedValues:x,action:v,groupId:w,applyOnSource:t===v,enabled:function enabled(e,t){return e.payload.sourceCanvas!==t.context.parentAlias()},filterFn:S},f.propagate(r,E,!0,{filterImmutableAction:function filterImmutableAction(e,t){return e.groupId!==t.groupId}}))},Xd=function(){function defineProperties(e,t){for(var n=0;n1){var u=r[0].config();if("linear"===r[0].constructor.type()){if(u.alignZeroLine){r.forEach(function(e){return e.config({nice:!1})});var c=function getAdjustedDomain(e,t){var n=e[0]/(e[0]-t[0]),r=e[1]/(e[1]-t[1]),i=!1;return t[0]>0&&t[1]>0&&t[1]>0&&e[1]>0&&(i=!0,t[0]=0,t[1]=0),t[0]<0&&t[1]<0&&t[1]<0&&e[1]<0&&(i=!0,e[0]=0,e[1]=0),i||n===r||(n1&&void 0!==arguments[1]?arguments[1]:{},n=[],r=e;if(null===e)return[];var i=this.layers(),a=i.length;Di(e)&&(r=[Object.keys(e)],r=[].concat(visual_unit_toConsumableArray(r),visual_unit_toConsumableArray(function transposeArray(e){return e[0].map(function(t,n){return e.map(function(e){return e[n]})})}(Object.values(e)))));for(var o=0;o1&&void 0!==arguments[1]?arguments[1]:[]].map(function(e){return e.reduce(function(e,t){return e=[].concat(matrix_model_toConsumableArray(e),matrix_model_toConsumableArray(t.getMembers()))},[])})},ep=function createSelectedDataModel(e,t,n){return e.select(function(e){return t.every(function(t,r){return e[t].value===n[r]})})},tp=function uniqueKeyGenerator(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:[],i=t.facets,a=t.dataModel,o=t.uniqueValues;if(i[n+1]){var u=i[n];o.forEach(function(t){var o=a.select(function(e){return e[u].value===t}),c=Zh(o,i[n+1]);uniqueKeyGenerator(e,{facets:i,dataModel:o,uniqueValues:c},n+1,[].concat(matrix_model_toConsumableArray(r),[t]))})}else o.forEach(function(t){e.push([].concat(matrix_model_toConsumableArray(r),[t]))})},np=function projectRows(e,t){var n=t.allColumnProjections,r=t.rowProjections,i=t.optionalProjections;return r.length>0?r.map(function(t){var r=Jd(t,n),a=Zd(r,2),o=a[0],u=a[1];return e.project([].concat(matrix_model_toConsumableArray(o),matrix_model_toConsumableArray(u),matrix_model_toConsumableArray(i)))}):[e]},rp=function pushToMatrix(e,t){var n,r=[],i=e.matrix,a=e.datamodel,o=e.facetInfo,u=e.fieldInfo,c=u.rowProjections,s=u.colProjections,l=u.optionalProjections,f=o.rowIndex,h=o.columnIndex,d=c[f%c.length]||[];s.length>0?r=s.map(function(e,n){var r=Jd(e,d),i=Zd(r,2),u=i[0],c=i[1],p=a.project([].concat(matrix_model_toConsumableArray(u),matrix_model_toConsumableArray(c),matrix_model_toConsumableArray(l))),y={rowFields:d,columnFields:e},g={rowIndex:f,columnIndex:h*s.length+n};return t(p,{projections:y,indices:g},o)}):r=[t(a,{projections:{rowFields:d,columnFields:[]},indices:{rowIndex:f,columnIndex:h}},o)];i[f]=i[f]||[],(n=i[f]).push.apply(n,matrix_model_toConsumableArray(r))},ip=function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function sliceIterator(e,t){var n=[],r=!0,i=!1,a=void 0;try{for(var o,u=e[Symbol.iterator]();!(r=(o=u.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){i=!0,a=e}finally{try{!r&&u.return&&u.return()}finally{if(i)throw a}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}();function cell_creator_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t0?d.length:1):(a=g,o=p.length>0?p.length:1),s.length&&f===u&&l&&a.length){var h={axis:l,length:o,type:u},v=[];i<2?(h.keys=a,h.facetConfig=c.rows,v=up(h,r,t,n)):(h.facetConfig=c.columns,h.keys=a[0].map(function(e,t){return a.map(function(e){return e[t]})}),v=up(h,r,t,n)),r[u+"Headers"]=v}else r[u+"Headers"]=null}),r},sp=function computeMatrices(e,t){var n=e.resolver,r=e.datamodel,i=e.componentRegistry,a=e.encoders,o=t.globalConfig,u=t.selection,c=t.transform,s=o.autoGroupBy,l=n.dependencies().smartlabel,f=r.getFieldsConfig(),h=n.layerConfig(),d=n.registry(),p=n.horizontalAxis().fields,y=n.verticalAxis().fields,g=n.optionalProjections(t,h),v=n.getAllFields(),m={normalizedColumns:y,normalizedRows:p,facetsAndProjections:v,layers:h,fieldMap:f,otherEncodings:g,encoders:a,facetConfig:o.facetConfig||{},axisFrom:o.axisFrom||{},selection:u},b={GeomCell:n.getCellDef(d.GeomCell),AxisCell:n.getCellDef(d.AxisCell),BlankCell:n.getCellDef(d.BlankCell),TextCell:n.getCellDef(d.TextCell)},_=Yh(p),x=Yh(y);n.colCells({}),n.rowCells({}),n.datamodelTransform(c||{}),n.resetSimpleAxes();var w={exitCellMap:n.cacheMaps().entryCellMap,entryCellMap:new Map};n.cacheMaps(w);var C={config:o,suppliedLayers:a.simpleEncoder.serializeLayerConfig(n.layerConfig()),resolver:n,cell:b.GeomCell,encoder:a.simpleEncoder,newCacheMap:w,detailFields:t.detail},k=r.getFieldsConfig(),S=r;if(!s.disabled){var P=function extractFields(e,t){var n,r=Object.values(e).map(function(e){var t,n,r=(t=[]).concat.apply(t,group_utils_toConsumableArray(e));return(n=[]).concat.apply(n,group_utils_toConsumableArray(r.map(function(e){return e instanceof _h?e.getMembers():e})))});return(n=[]).concat.apply(n,group_utils_toConsumableArray(r).concat(group_utils_toConsumableArray(t)))}(v,function getFieldsFromSuppliedLayers(e,t){var n,r=[],i=e.map(function(e){return e.encoding||{}});return r=(r=[].concat(group_utils_toConsumableArray(r),[(n=[]).concat.apply(n,group_utils_toConsumableArray(i.map(function(e){return Object.values(e).map(function(e){return e.field})})))])).filter(function(e){return t[e]&&t[e].def.type===ir.FieldType.DIMENSION})}(C.suppliedLayers,r.getFieldsConfig())),A=P.filter(function(e){return k[e]&&k[e].def.type===ir.FieldType.DIMENSION}),E=s.measures;S=r.groupBy(A.length?A:[""],E).project(P)}var M=function getMatrixModel(e,t,n){var r=[],i=[],a=[],o=[],u=[],c=[],s=t.rowFacets,l=t.colFacets;if(t.colProjections.forEach(function(e){o.push.apply(o,matrix_model_toConsumableArray(e))}),t.allColumnProjections=o,s.length>0){var f=s[0].toString(),h=Zh(e,f);tp(i,{facets:s,dataModel:e,uniqueValues:h}),i.forEach(function(n){var i,a=Jd(s),o=Zd(a,1)[0],u=ep(e,o,n);c.push([s,n]),(i=r).push.apply(i,matrix_model_toConsumableArray(np(u,t)))})}else{var d;(d=r).push.apply(d,matrix_model_toConsumableArray(np(e,t)))}if(r=r.length>0?r:[[]],l.length>0){var p=l.map(function(e){return""+e}),y=p[0],g=Zh(e,y);tp(a,{facets:p,dataModel:e,uniqueValues:g}),r.forEach(function(r,i){c[i]=c[i]||[[],[]],a.forEach(function(a,o){u[i]=u[i]||[];var s=r instanceof ar.a?r:e,f=ep(s,p,a),h={matrix:u,datamodel:f,facetInfo:{rowFacets:c[i],colFacets:[l,a],rowIndex:i,columnIndex:o},fieldInfo:t};rp(h,n)})})}else r.forEach(function(r,i){c[i]=c[i]||[[],[]];var a={matrix:u,datamodel:r||e,facetInfo:{rowFacets:c[i],colFacets:[[],[]],rowIndex:i,columnIndex:0},fieldInfo:t};rp(a,n)});var v=a.length>0?a[0].map(function(e,t){return a.map(function(e){return e[t]})}):a;return{matrix:u,rowKeys:i,columnKeys:v}}(S,v,n.valueCellsCreator(C));n.cacheMaps().exitCellMap.forEach(function(e){e.remove()}),n.cacheMaps().exitCellMap.clear(),n.valueMatrix(M.matrix),n.createUnits(i,t);var O=function mutateAxesFromMap(e,t){var n=null,r=null,i=e.xAxesMap,a=e.yAxesMap,o=t.x,u=t.y;return o&&o.forEach(function(e){var t=i.get(e);(n=n||[]).push(t)}),u&&u.forEach(function(e){var t=a.get(e);(r=r||[]).push(t)}),{xAxes:n,yAxes:r}}(n.cacheMaps(),n.axes()),T=O.xAxes,F=O.yAxes;n.axes({x:T,y:F});var N=function generateMatrices(e,t,n,r){var i=e.unitHeight,a=e.unitWidth,o=e.facetsAndProjections,u=e.normalizedRows,c=e.normalizedColumns,s=e.selection,l=e.axisFrom,f=e.facetConfig,h=e.encoders,d=cp({fields:{rows:u,columns:c},matrices:t,facetsAndProjections:o,selection:s,axisFrom:l,facetConfig:f,encoders:h},n,r),p=d.columnsPrimary,y=d.columnsSecondary,g=d.rowsPrimary,v=d.rowsSecondary,m=d.leftHeaders,b=d.topHeaders,_=d.bottomHeaders,x=d.rightHeaders,w=[g,v,p,y].map(function(e){return e?e.getObjects():[]}),C=ip(w,4),k=C[0],S=C[1],P=C[2],A=C[3],E=[m,x].map(function(e){return e?e.getObjects().map(function(e){return e.getObjects()}):[]}),M=ip(E,2),O=M[0],T=M[1],F=O.length?O.map(function(e,t){return k[t]=k[t]?[k[t]]:[],[].concat(cell_creator_toConsumableArray(e),cell_creator_toConsumableArray(k[t]))}):k?k.map(function(e){return[e]}):[],N=S.length?S.map(function(e,t){return[e].concat(cell_creator_toConsumableArray(T[t]||[]))}):T.length?T.map(function(e){return[].concat(cell_creator_toConsumableArray(e))}):[],j=[];b&&b.getObjects().forEach(function(e){e.getObjects().forEach(function(e,t){j[t]=j[t]||[],j[t].push(e)})});P.length&&j.push(P);var I=[];A.length&&I.push(A);var D=I.length;_&&_.getObjects().forEach(function(e){e.getObjects().forEach(function(e,t){I[t+D]=I[t+D]||[],I[t+D].push(e)})});if(!F.length&&!N.length){var L=new n.BlankCell;L.setAvailableSpace(a,i),F=[[L]]}if(!(j.length||I.length&&I[0].length)){var R=new n.BlankCell;R.setAvailableSpace(a,i),I=[[R]]}return{rows:[F,N],columns:[j,I],selectionObj:d}}(m,{valuesMatrix:M,axesMatrix:n.axes()},b,l),j=N.rows,I=N.columns,D=N.selectionObj;return n.rowMatrix(j),n.columnMatrix(I),{rows:n.rowMatrix(),columns:n.columnMatrix(),values:n.valueMatrix(),isColumnSizeEqual:x,isRowSizeEqual:_,selection:D,dataModels:{groupedModel:S,parentModel:r}}},lp=function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function sliceIterator(e,t){var n=[],r=!0,i=!1,a=void 0;try{for(var o,u=e[Symbol.iterator]();!(r=(o=u.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){i=!0,a=e}finally{try{!r&&u.return&&u.return()}finally{if(i)throw a}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),fp=function(){function defineProperties(e,t){for(var n=0;n0?d[0].map(b):[],right:p.length>0?p[0].map(b):[]},w=[ah,oh].map(function(e){return g.map(function(t,n){return n===g.length-1?_[e]:x[e]})}),C=lp(w,2),k=C[0],S=C[1];if(0===g.length){var P=[ah,oh].map(function(e){return v.map(function(t,n){return 0===n?_[e]:x[e]})}),A=lp(P,2);r=A[0],i=A[1]}else r=v.map(function(){return d.length>0?d[0].map(b):[]}),i=v.map(function(){return p.length>0?p[0].map(b):[]});return s.notify({client:[k,S,r,i],action:"initialized",formalName:"facet-headers"}),{topLeft:k,topRight:S,bottomLeft:r,bottomRight:i}}},{key:"getMatrices",value:function getMatrices(e,t,n,r){return sp({datamodel:e,componentRegistry:n,encoders:r,resolver:this},t)}}]),MatrixResolver}(),dp=function(){function defineProperties(e,t){for(var n=0;n3&&void 0!==arguments[3]?arguments[3]:{},i=void 0,a=e.context.constructor.type(),o=r.payload,u=e.context.data(),c=e.context.metaData(),s=c.getData().schema[0].type,l={},f=e.context._id;l.action=Pp[t]||t,l.sideEffects=Ep[t],l.sourceCanvas=e.context.canvasAlias();var h=e._actions.behavioural[l.action].constructor.mutates();if(null===o.criteria)i=null;else{var d=n.mergedEnter,p=u.filter(function(e){return-1!==d.uids.indexOf(e.id)}).map(function(e){return e.value});if("step"===a||"discrete"===a&&"measure"===s){var y=Object.keys(o.criteria||{})[0];i=(p=u.filter(function(e){return-1!==d.uids.indexOf(e.id)}).map(function(e){return e.range})).length?c.select(function(e){for(var t=!1,n=0;n=p[n][0]&&e[y].value<=p[n][1]);n++);return t},{saveChild:!1}):null}else"gradient"===a?i=ca(c,o.criteria):p.length?i=function assembleModelFromIdentifiers(e,t){var n=[],r=void 0,i=e.getFieldsConfig();return t.length?function(){for(var e=t[0],a=e.length,o=0;o=s+l?[i.invert(s+l-c),i.invert(s+l)]:f-l1&&void 0!==arguments[1]?arguments[1]:{},i=t.config().classPrefix;e.mergedEnter.length||e.mergedExit.length?(n(e.mergedExit,r.className||i+"-legend-brighten",!1),n(e.mergedExit,r.className||i+"-legend-fadeout",!0),n(e.mergedEnter,r.className||i+"-legend-fadeout",!1)):n(e.completeSet,r.className||i+"-legend-fadeout",!1)},brighten:function brighten(e){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},i=t.config().classPrefix;e.mergedEnter.length||e.mergedExit.length?(n(e.mergedEnter,r.className||i+"-legend-brighten",!0),n(e.mergedExit,r.className||i+"-legend-brighten",!1)):n(e.completeSet,r.className||i+"-legend-brighten",!1)}}},Vp=function(){function defineProperties(e,t){for(var n=0;n2&&void 0!==arguments[2]?arguments[2]:{};(0,this._strategies[n.strategy||this._strategy])(e,this)}}],[{key:"formalName",value:function formalName(){return"highlighter"}}]),LegendHighlighter}(),Wp={config:{sanitization:function sanitization(e,t){return na(e._config||{},t)}},data:{},fieldName:{},legendContainer:{},measurement:{sanitization:function sanitization(e,t){var n=na(e._measurement,t);return["padding","border","margin"].forEach(function(e){n[e]=Math.min(n[e]>0?n[e]:0,.1*n.maxWidth,.1*n.maxHeight)}),n}},logicalSpace:{},metaData:{},range:{sanitization:function sanitization(e,t){return e.scale().range(t),e.resetLogicalSpace(),e.store().commit("range",t),t}},scale:{},smartTicks:{},store:{},title:{sanitization:function sanitization(e,t){return na(e._title||{},t)}}},qp="horizontal",Gp="vertical",Yp={height:30,width:30,maxWidth:1/0,maxHeight:1/0,padding:2,margin:2,border:1},Xp={text:"",orientation:function orientation(e){return"left"===e||"right"===e?"left":"center"}},Kp={classPrefix:"muze",borderStyle:"solid",borderColor:"rgba(0,0,0,0)",formatter:{bounds:{lower:"less than",upper:"more than"}},item:{text:{orientation:"right",width:10,formatter:function formatter(e){return e}},icon:{className:"legend-icon",height:20,width:20,color:"rgba(0,0,0,.5)",type:"square"}}},$p=function ICON_MAP(e){return e&&"string"==typeof e?pa(e):e};function legend_helper_defineProperty(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var Qp=function getScaleInfo(e){var t=e.constructor.type();return{scaleType:t,domain:e.uniqueValues(),steps:e.config().stops||1,scaleFn:Mp[t]}},Zp=function getInterpolatedData(e,t){for(var n=[],r=ia()(e[0],e[1]),i=0;i<=t;i++)n[i]=r(i/t);return n},Jp=function getDomainBounds(e,t,n){var r,i=t.scaleFn,a=t.scaleType,o=t.scale,u=n.domain,c=n.domainBounds,s=n.domainLeg,l=n.steps,f=u["lower"===e?0:u.length-1],h=l["lower"===e?0:l.length-1];return legend_helper_defineProperty(r={},a,"size"===a?o[i](f)*o.getScaleFactor():o[i](f)),legend_helper_defineProperty(r,"value",c[e]),legend_helper_defineProperty(r,"id","lower"===e?0:s.length+2),legend_helper_defineProperty(r,"range",[f,h]),r},ey=function(){function defineProperties(e,t){for(var n=0;n0?h.height+s:0,p=h.width+s,y=this.getLabelSpaces(s,c),g=function computeItemSpaces(e,t,n){var r=0,i=0,a={width:0,height:0},o=t.effPadding,u=t.titleWidth,c=t.labelSpaces,s=t.titleHeight,l=t.maxWidth,f=e.item,h=e.align,d=f.icon,p=f.text.orientation,y=[],g=[],v=0;return c.forEach(function(e,t){var c={width:0,height:0},s={width:0,height:0},l=n[t]||{};"left"===p||"right"===p?(e.width+=o,s.width=(l.size?2*Math.sqrt(l.size/Math.PI):d.width)+o,v=Math.max(s.width,v),c.width=e.width+v,e.height=Math.max(e.height,d.height)+o,s.height=e.height,c.height=e.height):(e.width=Math.max(e.width,l.size?2*Math.sqrt(l.size/Math.PI):d.width)+o,s.width=e.width,c.width=e.width,v=Math.max(s.width,v),e.height+=o,s.height=d.height+o,c.height=e.height+s.height),"horizontal"===h?r=Math.max(r,c.height):(r+=c.height,i=Math.max(i,c.width,u)+o),a={width:Math.max(c.width,a.width),height:Math.max(c.height,a.height)},y.push(c),g.push(s)}),y.forEach(function(e,t){"horizontal"===h?(e.height=r,g[t].width=v,"left"===p||"right"===p?(c[t].height=r,g[t].height=r,y[t].width=c[t].width+v):(c[t].width=v,y[t].width=v,c[t].width=v),i=Math.max(i+y[t].width)):(e.width=Math.max(i,l),"top"===p||"bottom"===p?(c[t].width=i,g[t].width=i,v=i):(g[t].width=v,y[t].width=c[t].width+v,c[t].width=a.width-v,i=Math.max(i,e.width)+o))}),i=Math.max(i,u),{totalHeight:r+=s+o,totalWidth:i,itemSpaces:y,iconSpaces:g,maxItemSpaces:a,maxIconWidth:v}}(this.config(),{effPadding:s,titleWidth:p,labelSpaces:y,titleHeight:d,maxWidth:r,maxHeight:i},this.data()),v=g.totalHeight,m=g.totalWidth,b=g.itemSpaces,_=g.iconSpaces,x=g.maxItemSpaces,w=g.maxIconWidth;return this.measurement({width:Math.max(m,t)+f+l,height:Math.max(v,n)+f+l,labelSpaces:y,iconSpaces:_,itemSpaces:b,maxItemSpaces:x,maxIconWidth:w,titleSpaces:{width:Math.min(r,this.measurement().width)-f-l,height:d}}),this}},{key:"getTitleSpace",value:function getTitleSpace(){return this._labelManager.setStyle(Lo(Ao("body"),this.config().classPrefix+"-legend-title")),this._labelManager.getOriSize(this.title().text?this.title().text:"")}},{key:"renderTitle",value:function renderTitle(e){var t=this.measurement(),n=t.titleSpaces,r=t.border,i=t.padding,a=t.width,o=this.config(),u=o.borderStyle,c=o.borderColor;return function titleCreator(e,t,n,r){var i=Eo(e,"table",[1],r.classPrefix+"-legend-title").style("width",n.width+"px").style("height",n.height+"px").style("border-bottom",n.border+"px "+r.borderStyle+" "+r.borderColor).style("text-align",t.orientation instanceof Function?t.orientation(r.position):t.orientation);return Eo(i,"td",[1],r.classPrefix+"-legend-title-text").style("width",n.width+"px").style("height","100%").style("padding",n.padding+"px").text(t.text).node()}(e,this.title(),{height:n.height,width:a,border:r,padding:i,borderStyle:u,borderColor:c},this.config())}},{key:"render",value:function render(){var e=this.firebolt(),t=this.config(),n=t.classPrefix,r=t.borderStyle,i=t.borderColor,a=this.measurement(),o=a.maxWidth,u=a.maxHeight,c=a.width,s=a.height,l=a.margin,f=a.border,h=Eo(Ao(this.mount()),"div",[1],n+"-legend-box");return h.classed(n+"-legend-box-"+this._id,!0),h.style("float","left"),h.style("width",Math.min(o,c)-2*l+"px").style("height",Math.min(u,s)-2*l+"px").style("margin",l+"px").style("border",f+"px "+r+" "+i),this.legendContainer(h.node()),this.renderTitle(h),e.createSelectionSet(this.data().map(function(e){return e.id})),h}},{key:"getCriteriaFromData",value:function getCriteriaFromData(e){var t=this.fieldName();return"measure"===this.metaData().getData().schema[0].type?function simple_legend_defineProperty(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}({},t,e.range):[[t],[e.value]]}}],[{key:"create",value:function create(e){return new SimpleLegend(e)}},{key:"defaultConfig",value:function defaultConfig(){return Kp}},{key:"defaultMeasurement",value:function defaultMeasurement(){return Yp}}]),SimpleLegend}();function position_config_defineProperty(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var oy=(position_config_defineProperty(ty={},"horizontal",{datasets:function datasets(e){return{row:[1],column:e}},itemContainerMeasures:function itemContainerMeasures(e){var t=e.itemSpaces;return{row:{width:e.width+"px",padding:"0px"},column:{width:function width(e,n){return t[n].width+"px"},padding:"0px"}}},getStepSpacesInfo:function getStepSpacesInfo(e){var t=e.maxItemSpaces;return{iconHeight:e.height,iconWidth:t.width,stepPadding:{horizontal:!0,vertical:!1}}}}),position_config_defineProperty(ty,"vertical",{datasets:function datasets(e){return{row:e,column:function column(e){return[e]}}},itemContainerMeasures:function itemContainerMeasures(e,t){var n=e.width;return{row:{width:n+"px",padding:t.padding+"px"},column:{width:n+"px",padding:"0px"}}},getStepSpacesInfo:function getStepSpacesInfo(e){var t=e.maxItemSpaces,n=e.width;return{iconHeight:t.height,iconWidth:n,stepPadding:{horizontal:!1,vertical:!0}}}}),ty),uy=(position_config_defineProperty(ny={},"left",oy.vertical),position_config_defineProperty(ny,"right",oy.vertical),position_config_defineProperty(ny,"top",oy.horizontal),position_config_defineProperty(ny,"bottom",oy.horizontal),ny),cy=(position_config_defineProperty(ry={},"left","end"),position_config_defineProperty(ry,"right","start"),position_config_defineProperty(ry,"top","center"),position_config_defineProperty(ry,"bottom","center"),ry),sy=(position_config_defineProperty(iy={},"left",[Op,"shape"]),position_config_defineProperty(iy,"right",["shape",Op]),position_config_defineProperty(iy,"top",[Op,"shape"]),position_config_defineProperty(iy,"bottom",["shape",Op]),iy),ly=function createLegendSkeleton(e,t,n,r){var i,a,o,u,c=e.measurement(),s=c.margin,l=c.border,f=c.titleSpaces,h=c.width,d=c.height,p=c.maxWidth,y=c.maxHeight;a=d-(f.height+2*s+2*l),i=h-(2*s+2*l),o=y-(f.height+2*s+2*l),u=p-(2*s+2*l);var g=Eo(t,"div",[1],n+"-legend-body");return g.select("."+n+"-legend-overflow").remove(),u&&u4)}(u)?u:$p(u).size(o)(),Eo(a,"path",function(e){return[e]}).attr("d",l)}}return e[1]="circle",createShape(e,t,"circle")}(n,Eo(l,"g",[n[1]],i+"-legend-icon"),n[3]?"circle":"square",o,a).attr("transform","translate("+(u/2-c)+" "+a/2+")").attr("fill",n[2]||s):Eo(l,"rect",[n[1]],i+"-legend-icon").attr("x",0).attr("y",0).attr("width",u).attr("height",a).attr("fill",n[2]||s)},py=function(){function defineProperties(e,t){for(var n=0;na[a.length-1]&&t.push(i[1])):t=Zp(i,a-1),(t=[].concat(gradient_legend_toConsumableArray(new Set(t))).sort(function(e,t){return e-t})).map(function(n,i){var a,u=t[i];return gradient_legend_defineProperty(a={},r,"size"===r?e[o](n)*e.getScaleFactor():e[o](Math.floor(n))),gradient_legend_defineProperty(a,"value",+u.toFixed(2)),gradient_legend_defineProperty(a,"id",i),a}).filter(function(e){return null!==e.value})}},{key:"getLabelSpaces",value:function getLabelSpaces(e){this.config({item:{text:{orientation:this.config().position}}});var t=function createAxis(e){var t=e.data(),n=e.config().align,r=e._cells.AxisCell,i=new Qs({id:"legend-"+e._id,orientation:n===Gp?"right":"bottom",style:e._computedStyle,nice:!1,showAxisName:!1,tickValues:t.map(function(e){return e.value}),fixedBaseline:!1},{labelManager:e._labelManager});return i.domain(gy(t)),i.range([1,1]),(new r).source(i).config({margin:{left:0,bottom:0,top:0,right:0}})}(this),n=t.getLogicalSpace(),r={width:n.width-e,height:n.height-e},i=t.source().domain().length,a=new Array(i).fill(r);return this.axis(t),a}},{key:"getDrawingContext",value:function getDrawingContext(){return{svgContainer:this._legendGradientSvg}}},{key:"render",value:function render(){var e=this.firebolt(),t=function get(e,t,n){null===e&&(e=Function.prototype);var r=Object.getOwnPropertyDescriptor(e,t);if(void 0===r){var i=Object.getPrototypeOf(e);return null===i?void 0:get(i,t,n)}if("value"in r)return r.value;var a=r.get;return void 0!==a?a.call(n):void 0}(GradientLegend.prototype.__proto__||Object.getPrototypeOf(GradientLegend.prototype),"render",this).call(this,this.mount());return function renderGradient(e,t){var n,r,i=e.config(),a=i.align,o=i.classPrefix,u=i.item,c=e.data(),s=vy(t,o,c),l=s.legendContainer,f=s.legendGradSvg,h=s.legendGradCont,d=s.linearGradient,p=s.legendRect,y=e.axis().source().getAxisDimensions().tickLabelDim,g=e.measurement(),v=g.padding,m=g.margin,b=g.border,_=g.titleSpaces,x=g.maxHeight,w=g.maxWidth,C=g.height,k=g.width,S={};n=Math.floor(C-(_.height+2*m+2*b)),r=Math.floor(k-(2*m+2*b)),a===qp?(S.height=u.icon.height,S.width=r-2*v-y.width/2,d.attr("x2","100%").attr("y1","0%"),h.attr("transform","translate( "+y.width/2+" 0)"),my(e,l,n-u.icon.height-v,r-2*v-1),l.classed(o+"-overflow-x",k>w),Mo(l,{height:C+"px",width:Math.min(k,w)+"px",padding:v+"px"}),p.attr("height",S.height),p.attr("width",S.width-y.width/2)):(S.height=n-2*v-y.height/2,S.width=u.icon.width,d.attr("x2","0%").attr("y1","100%"),h.attr("transform","translate(0 "+y.height/2+")"),my(e,l,n-2*v-1,r-u.icon.width-2*v),l.classed(o+"-overflow-y",C>x),Mo(l,{height:Math.min(C,x)+"px",width:k+"px",padding:v+"px"}),p.attr("height",S.height-y.height/2),p.attr("width",S.width)),Mo(f,{height:S.height+"px",width:S.width+"px"}),Mo(p,{fill:"url(#linear-gradient)"}),f.attr("height",S.height),f.attr("width",S.width),e.measurement({gradientDimensions:S}),e._legendGradientSvg=f}(this,t),t.selectAll("div").style("float","left"),e.mapActionsAndBehaviour(),e.createSelectionSet(this.data().map(function(e){return e.id})),t}},{key:"getCriteriaFromData",value:function getCriteriaFromData(e){return[[this.fieldName()],[e.value]]}}],[{key:"create",value:function create(e){return new GradientLegend(e)}},{key:"type",value:function type(){return"gradient"}}]),GradientLegend}(),xy=function(){function defineProperties(e,t){for(var n=0;na[a.length-1]&&(c.upper=[u.bounds.upper+" "+a[a.length-1]])):t=Zp(i,a),t=(t=[].concat(step_legend_toConsumableArray(new Set(t))).sort(function(e,t){return e-t})).map(function(n,i){var a,u=null;return i0&&void 0!==arguments[0]?arguments[0]:{},t=this._registrableComponents,n=na(na({},function defaultPolicy(e){var t=e.map(function(e){return e.alias()});return{behaviours:{"*":function _(e){var n=e.sourceCanvas;return!n||-1!==t.indexOf(n)}}}}(t)),e);return t.forEach(function(e){e.firebolt().crossInteractionPolicy(n)}),this}}]),ActionModel}()),Ny={classPrefix:"muze",interaction:{sideEffect:"individual"},legend:{position:"right",color:{show:!0,padding:1,margin:3,border:1,height:20,width:20},shape:{show:!0,padding:1,margin:3,border:1,height:20,width:20},size:{show:!0,padding:1,margin:3,border:1,height:20,width:20}},showHeaders:!1,minWidth:100,minHeight:100,border:{style:"solid",color:"#d6d6d6",width:2,collapse:!0,spacing:0},autoGroupBy:{disabled:!1}},jy={data:{value:null,meta:{typeCheck:function typeCheck(e){return e instanceof ar.a}}},width:{value:0,meta:{sanitization:Qi,typeCheck:Number.isInteger}},height:{value:0,meta:{sanitization:Qi,typeCheck:Number.isInteger}},minUnitWidth:{value:50,meta:{sanitization:Qi,typeCheck:Number.isInteger}},minUnitHeight:{value:50,meta:{sanitization:Qi,typeCheck:Number.isInteger}},config:{value:null,meta:{typeCheck:"constructor",typeExpected:"Object",sanitization:function sanitization(e,t){var n=na({},t),r=na(n,Ny);return na(r,e)}}}},Iy="width",Dy="height",Ly="top",Ry="left",By="right",zy="bottom",Hy="center",Vy="rowLeft",Uy="rowRight",Wy="colBottom",qy="colTop",Gy="rowSpan",Yy="colSpan",Xy="rowRoot",Ky="columnRoot",$y=function(){function defineProperties(e,t){for(var n=0;n1)return e;var f=o[t-1];if(f&&f.valueOf()===e.valueOf()){var h=n[r-1];return h?h[t].valueOf()===h[t-1].valueOf()?null:e:null}return e}return e},ag=function calcRowSpan(e,t,n,r){var i=1;if(!e||"string"!=typeof e.valueOf())return 1;for(var a=!1;!a;)n[r+i]&&null===n[r+i][t]?i+=1:a=!0;return i},og=function calcColSpan(e,t,n,r){var i=1;if(!e||"string"!=typeof e.valueOf())return 1;for(var a=!1;!a;)null===n[r][t+i]?i+=1:a=!0;return i},ug=function mask(e,t){return e.map(function(n,r){if(t===Vy||t===Uy){for(var i=n.map(function(n,i){return ig(n,i,e,r,t)}),a=[],o=n.length-i.length,u=0;u1&&r.setAvailableSpace(0,r.availHeight()),Ao(this).style("height",r.availHeight()+"px"),n}),l.each(function(e){e.placeholder&&e.placeholder.render(this)}).exit().each(function(e){e.placeholder&&e.placeholder.remove()}),applyBorders(l,r.border,n,a)})}function utils_defineProperty(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function utils_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t0?e[0]:e[1];return n?(r=e[0].length>0?[].concat(utils_toConsumableArray(e[0])):[],r=e[1].length>0?[].concat(utils_toConsumableArray(r),utils_toConsumableArray(e[1])):r):r=r.map(function(t,n){var r=[];return e[0].length>0&&(r=[].concat(utils_toConsumableArray(e[0][n]))),e[1].length>0&&(r=[].concat(utils_toConsumableArray(r),utils_toConsumableArray(e[1][n]))),r}),r},fg=function computeLogicalSpace(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments[1],n=arguments[2],r=t.isTransposed,i=void 0!==r&&r,a=t.unitMeasures,o=function getMeasureInfo(e){return e?{firstMeasure:Dy,secondMeasure:Iy}:{firstMeasure:Iy,secondMeasure:Dy}}(i),u=o.firstMeasure,c=o.secondMeasure,s=e.values,l=function getMinMeasures(e,t){return e?{height:0,width:t.width}:{height:t.height,width:0}}(i,a);if(s[0].key){var f,h=(utils_defineProperty(f={},u,0),utils_defineProperty(f,c,0),f);return s.forEach(function(e){var r=computeLogicalSpace(e,t,n);h[u]=Math.max(h[u],r[u],l[u]),h[c]+=+r[c]}),e.space=h,h}return function getLogicalSpace(e,t,n){var r,i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:[],a=t.firstMeasure,o=t.secondMeasure,u=0,c=0;return e.values.forEach(function(t){var r,s=0,l=0;t.forEach(function(e,t){e.logicalSpace(null);var r=e.getLogicalSpace();l=Math.max(l,+r[o],n[o]),i[t]=Math.max(i[t]||0,r[a]),s+=+i[t]}),c+=l,u=Math.max(u,s),e.space=(utils_defineProperty(r={},o,Math.ceil(c)),utils_defineProperty(r,a,Math.ceil(u)),r)}),utils_defineProperty(r={},o,c),utils_defineProperty(r,a,u),r}(e,{firstMeasure:u,secondMeasure:c},l,n)},hg=function extraCellsRemover(e,t,n){return e.slice(t,-n)},dg={config:{sanitization:function sanitization(e,t){return na(e._config||{},t)}},maxMeasures:{},availableSpace:{},logicalSpace:{}},pg={distribution:[],classPrefix:"muze",isDistributionEqual:!0,unitMeasures:{height:100,width:100,border:1},isTransposed:!1,facet:"primary",extraCellLengths:[]},yg=function(){function defineProperties(e,t){for(var n=0;n1&&void 0!==arguments[1]?arguments[1]:{};!function visual_matrix_classCallCheck(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,VisualMatrix),this._lastLevelKey=0,this._primaryMatrix=e[0]||[],this._secondaryMatrix=e[1]||[],this._maxMeasures=[],this._availableSpace={},Ji(this,dg);var n=Object.assign({},this.constructor.defaultConfig());this.config(na(n,t)),this._breakPointer=this.config().isTransposed?e[0].length:e[0].length>0?e[0][0].length:0,this._layoutMatrix=lg([e[0]||[],e[1]||[]],this.config()),this._tree={key:this.config().isTransposed?Ky:Xy,values:this.createTree()},this._logicalSpace=this.setLogicalSpace()}return yg(VisualMatrix,[{key:"primaryMatrix",value:function primaryMatrix(){return arguments.length?this:this._primaryMatrix}},{key:"secondaryMatrix",value:function secondaryMatrix(){return arguments.length?this:this._secondaryMatrix}},{key:"tree",value:function tree(){return arguments.length?this:this._tree}},{key:"createTree",value:function createTree(){var e=function createTree(e){var t={},n=0,r="primary",i=cg(),a=[],o=e._layoutMatrix,u=e.primaryMatrix(),c=e.secondaryMatrix(),s=e.config(),l=s.isTransposed,f=s.breakPage;if(l){if(r=0===u.length?"primary":0===c.length?"secondary":u.length>=c.length?"primary":"secondary",u.length>0){for(var h=0;h0){for(var d=u.length,p=c.length-1;p>0;p--)a.push(p+d);a.push(d),"primary"===r&&(n=d)}var y;a.forEach(function(e){var t=-1;return i.key(function(n){return t++,n[e].valueOf()+"-"+sg(t,f)})}),y=o[0].map(function(e,t){return o.map(function(e){return e[t]})}),t=i.entries(y)}else{if(r=0===u.length?"primary":0===c.length?"secondary":u.length>=c.length?"primary":"secondary",u.length>0){for(var g=0;g0){for(var v=u.length>0?u[0].length:0,m=c[0].length-1;m>0;m--)a.push(m+v);a.push(v),"primary"===r&&(n=v)}else n=u.length>0?u[0].length-1:0;a.forEach(function(e){var t=-1;return i.key(function(n){return t++,n[e].valueOf()+"-"+sg(t,f)})}),t=i.entries(o)}return{tree:t,lastLevelKey:n}}(this),t=e.tree,n=e.lastLevelKey;return this._lastLevelKey=n,t}},{key:"setLogicalSpace",value:function setLogicalSpace(){var e=this.config().isTransposed,t=this.tree();return function createMatrixEachLevel(e,t){if(e.values[0].key){var n=[];return e.values.forEach(function(e){t?createMatrixEachLevel(e,t).forEach(function(e,t){var r;n[t]=n[t]||[],(r=n[t]).push.apply(r,utils_toConsumableArray(e))}):n.push.apply(n,utils_toConsumableArray(createMatrixEachLevel(e,t)))}),e.matrix=n,n}return e.matrix=t?e.values[0].map(function(t,n){return e.values.map(function(e){return e[n]})}):e.values,e.matrix}(t,e),fg(t,this.config(),this.maxMeasures())}},{key:"getLogicalSpace",value:function getLogicalSpace(){return this.logicalSpace()}},{key:"setAvailableSpace",value:function setAvailableSpace(e,t){this.availableSpace({width:e,height:t});var n=this.tree(),r=this.populateMaxMeasures(Dy,n),i=this.populateMaxMeasures(Iy,n),a=this.calculateDepth(i,r);return this.viewableMatrix=this.createViewPortMatrix(a),this.viewableMeasures=this.redistribute(this.viewableMatrix,e,t),this}},{key:"populateMaxMeasures",value:function populateMaxMeasures(e,t){var n=this,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:[];if(i[r]=Math.max(i[r]||0,t.space[e]),t.values){var a=r+1;t.values.forEach(function(t){t.space&&(i=n.populateMaxMeasures(e,t,a,i))})}return i}},{key:"calculateDepth",value:function calculateDepth(e,t){var n=void 0,r=void 0,i=this.availableSpace(),a=i.height,o=i.width;for(n=0;n0&&void 0!==arguments[0]?arguments[0]:[],t=arguments[1],n=arguments[2],r=arguments[3],i=r._breakPointer,a=r.config().isTransposed,o=n.tree,u=n.layoutMatrix;if(0===t){var c=function breakMatrix(e,t,n){var r=[],i=[];return t?e.forEach(function(e,t){t>=n?i.push(e):r.push(e)}):e.forEach(function(e,t){e.forEach(function(e,a){a>=n?(i[t]=i[t]||[],i[t].push(e)):(r[t]=r[t]||[],r[t].push(e))})}),[r,i]}(o.matrix,a,i);return e.push({matrix:o.matrix,primaryMatrix:c[0],secondaryMatrix:c[1],space:o.space}),e}var s=t-1;return o.values.forEach(function(t){createMatrixInstances(e,s,{tree:t,layoutMatrix:u},r)}),e}(t,e,this.removeExtraCells(),this),t}},{key:"redistributeRowWise",value:function redistributeRowWise(e){var t,n,r=[],i=this.maxMeasures(),a=this.config(),o=a.isDistributionEqual,u=a.distribution,c=a.isTransposed,s=a.gutter,l=e.matrix,f=e.width,h=e.height,d=e.maxHeights,p=e.maxWidths;n=function spaceTakenByColumn(e,t){var n=0,r=0;return e.forEach(function(e){var i=e[t].getLogicalSpace();r=Math.max(r,i.width),n+=i.height}),{width:r,height:n}}(l,this._lastLevelKey).height;var y=i.reduce(function(e,t){return e+=t});return r=y>0?i.map(function(e){return e+e/y*(f-y)}):i.map(function(){return 0}),t=function getDistributedHeight(e){var t,n=0,r=0,i=e.isTransposed,a=e.distribution,o=e.availableHeight,u=e.height,c=e.isDistributionEqual,s=e.gutter,l=e.matrix,f=e.cIdx;a&&void 0!==a[0]&&(n=a.reduce(function(e,t){return e+=t})),s&&void 0!==s[0]&&(r=s.reduce(function(e,t){return e+=t})),t=o-Math.floor(o*r);var h=l.length;return l.map(function(r,o){var s=r[f].getLogicalSpace().height,l=s+s/u*(t-u);return i||(a.length>0&&h===a.length?l=t*a[o]/n:(c||0===e.height)&&(l=t/h)),Math.floor(l)})}({matrix:l,cIdx:this._lastLevelKey,height:n,availableHeight:h,isDistributionEqual:o,distribution:u,isTransposed:c,gutter:s}),p.push(r),d.push(t),{maxWidths:p,maxHeights:d}}},{key:"redistributeColumnWise",value:function redistributeColumnWise(e){var t=[],n=e.matrix,r=e.width,i=e.maxHeights,a=e.maxWidths,o=this.config().unitMeasures.border,u=function spaceTakenByRow(e){var t=0,n=0;return e.forEach(function(e){var r=e.getLogicalSpace();t=Math.max(t,r.height),n+=r.width}),{width:n,height:t}}(n[this._lastLevelKey]).width,c=function getDistributedWidth(e,t){var n=e.availableWidth,r=e.width,i=e.row,a=t.isDistributionEqual,o=t.isTransposed,u=t.distribution,c=0;return u&&u[0]&&(c=u.reduce(function(e,t){return e+=t})),i.map(function(e,t){var s=e.getLogicalSpace().width,l=s+s/r*(n-r);if(o)if(u.length>0)l=n*u[t]/c;else if(a||0===r){var f=i.length;l=n/f}return Math.floor(l)})}({row:n[this._lastLevelKey],width:u,availableWidth:r},this.config());n.forEach(function(e,n){return e.forEach(function(e,r){var i=e.getLogicalSpace().height;e.setAvailableSpace(c[r]-o,i),t[n]=Math.max(t[n]||0,e.getLogicalSpace().height)})}),i.length>0&&(t=t.map(function(e,t){return Math.max(e,i[0][t])})),i.push(t);for(var s=0;s=m&&(r[0][1][n[1]-m]=a[0],i[0][1]=(i[0][1]||0)+a[0]),n[1]===t._lastLevelKey&&(r[1][0][n[0]]=a[1],r[1][1][n[0]]=a[1])})}),{heights:g,widths:v,rowHeights:p,columnWidths:y}}}],[{key:"defaultConfig",value:function defaultConfig(){return pg}}]),VisualMatrix}(),vg=function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function sliceIterator(e,t){var n=[],r=!0,i=!1,a=void 0;try{for(var o,u=e[Symbol.iterator]();!(r=(o=u.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){i=!0,a=e}finally{try{!r&&u.return&&u.return()}finally{if(i)throw a}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}();function layout_helper_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t0&&(n=[].concat(layout_helper_toConsumableArray(w),layout_helper_toConsumableArray(P),layout_helper_toConsumableArray(O))),E.length>0&&(r=[].concat(layout_helper_toConsumableArray(k),layout_helper_toConsumableArray(E),layout_helper_toConsumableArray(F))),C.length>0&&C[0].length>0&&(i=C.map(function(e,t){return[].concat(layout_helper_toConsumableArray(w[t]),layout_helper_toConsumableArray(e),layout_helper_toConsumableArray(k[t]))})),T.length>0&&T[0].length>0&&(a=T.map(function(e,t){return[].concat(layout_helper_toConsumableArray(O[t]),layout_helper_toConsumableArray(e),layout_helper_toConsumableArray(F[t]))})),e.rowMatrix(new gg([n,r],{isDistributionEqual:s,distribution:h.rows,gutter:f.rows,unitMeasures:{width:v,height:g,border:d.width},breakPage:p.rows.map(function(e){return e+Math.max(w.length,k.length)}),extraCellLengths:[w.length,O.length]})),o=w.length>0?w[0].length:O.length>0?O[0].length:0,u=k.length>0?k[0].length:F.length>0?F[0].length:0,e.columnMatrix(new gg([i,a],{isDistributionEqual:l,distribution:h.columns,gutter:f.columns,isTransposed:!0,unitMeasures:{width:v,height:g,border:d.width},breakPage:p.columns,extraCellLengths:[o,u]})),e.centerMatrix(A),t}(this,e),this):function get(e,t,n){null===e&&(e=Function.prototype);var r=Object.getOwnPropertyDescriptor(e,t);if(void 0===r){var i=Object.getPrototypeOf(e);return null===i?void 0:get(i,t,n)}if("value"in r)return r.value;var a=r.get;return void 0!==a?a.call(n):void 0}(GridLayout.prototype.__proto__||Object.getPrototypeOf(GridLayout.prototype),"matrices",this).call(this,e)}},{key:"triggerReflow",value:function triggerReflow(){return function computeLayoutMeasurements(e){var t,n,r,i,a,o=e.rowMatrix(),u=e.columnMatrix(),c=e.centerMatrix(),s=e.measurement(),l=s.width,f=s.height,h=e.config().border,d=e.matrices(),p=d.top,y=d.bottom,g=function getMatrixMeasurement(e,t){return e?e.getLogicalSpace()[t]:0}(o,Iy),v=h.width,m=l-g-v;setMatrixMeasurement(u,Iy,m);var b=u.getViewableSpaces();bg(e,"column",b);var _=b[e.config().columnPointer],x=_.height.primary+_.height.secondary,w=f-x;setMatrixMeasurement(o,Dy,w);var C=o.getViewableSpaces();bg(e,"row",C);var k=(t=[]).concat.apply(t,computations_toConsumableArray(C.map(function(e){return e.rowHeights.primary}))),S=(n=[]).concat.apply(n,computations_toConsumableArray(C.map(function(e){return e.columnWidths.primary}))),P=(r=[]).concat.apply(r,computations_toConsumableArray(C.map(function(e){return e.columnWidths.secondary}))),A=u.getViewableSpaces(),E=(i=[]).concat.apply(i,computations_toConsumableArray(A.map(function(e){return e.columnWidths.primary}))),M=A[0].rowHeights.primary,O=(a=[]).concat.apply(a,computations_toConsumableArray(A.map(function(e){return e.rowHeights.secondary})));c.forEach(function(e,t){e.forEach(function(e,n){e.setAvailableSpace(E[n]-v,k[t]-v)})}),mg(p[0],S,M),mg(p[2],P,M),mg(y[0],S,O),mg(y[2],P,O)}(this),this.setViewInformation(),this}},{key:"gotoPage",value:function gotoPage(e,t){var n=e.toLowerCase(),r=this.getViewInformation().viewMatricesInfo[n+"Pages"],i=Math.min(Math.max(1,t),r);return this.config(function layout_defineProperty(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}({},n+"Pointer",i-1)),this.setViewInformation(),this.renderGrid(),this}},{key:"pages",value:function pages(e){var t=this.getViewInformation().viewMatricesInfo,n=e.toLowerCase();return{totalPages:t[n+"Pages"],currentPage:this.config()[n+"Pointer"]+1}}},{key:"setViewInformation",value:function setViewInformation(){var e=this.config(),t=e.rowPointer,n=e.columnPointer,r=e.border,i=function getViewMatrices(e,t,n){for(var r=e.rowMatrix(),i=e.columnMatrix(),a=e.centerMatrix(),o=e.matrices(),u=r.getViewableData(),c=i.getViewableData(),s={row:0,column:0},l=t-1;l>=0;l--){var f=Math.max(u[l].primaryMatrix.length,u[l].secondaryMatrix.length);s.row+=f}for(var h=n-1;h>=0;h--){var d=c[h],p=d.primaryMatrix,y=d.secondaryMatrix,g=Math.max(p[0]?p[0].length:0,y[0]?y[0].length:0);s.column+=g}o.top[1]=c[n].primaryMatrix,o.bottom[1]=c[n].secondaryMatrix,o.center[0]=u[t].primaryMatrix,o.center[2]=u[t].secondaryMatrix;var v=Math.max(o.center[0].length,o.center[2].length),m=Math.max(o.top[1][0]?o.top[1][0].length:0,o.bottom[1][0]?o.bottom[1][0].length:0);return o.center[1]=a.slice(s.row,s.row+v).map(function(e){return e.slice(s.column,s.column+m)}),{matrices:o,rowPages:u.length,columnPages:c.length}}(this,t,n),a=function getViewMeasurements(e){var t=e.rowMatrix(),n=e.columnMatrix(),r=e.measurement(),i=r.width,a=r.height,o=e.config(),u=o.columnPointer,c=o.rowPointer,s=t.getViewableSpaces()[c].width,l=s.primary,f=s.secondary,h=n.getViewableSpaces()[u].height,d=h.primary,p=h.secondary;return{viewWidth:[l,i-(l+f),f],viewHeight:[d,a-(d+p),p]}}(this);return a.border=r,this.viewInfo={viewMatricesInfo:i,layoutDimensions:a},this}},{key:"getViewInformation",value:function getViewInformation(){return this.viewInfo}},{key:"renderGrid",value:function renderGrid(e){if(this.mountPoint(e),!this.mountPoint())return this;var t=this.getViewInformation(),n=t.viewMatricesInfo,r=t.layoutDimensions;return function renderMatrices(e,t,n){var r=t.top,i=t.center,a=t.bottom,o=e.config().classPrefix,u=e.measurement().width,c=e.mountPoint();Eo(c,"div",[{type:Ly,matrix:r},{type:Hy,matrix:i},{type:zy,matrix:a}],o+"-grid-layout-row").each(function(e,t){var r=Ao(this);r.classed(o+"-grid-layout-row-"+t,!0),renderMatrix(e.matrix,r,e.type,n,o)}).style(Iy,Math.ceil(u)+"px")}(this,n.matrices,r),this}}],[{key:"defaultMeasurement",value:function defaultMeasurement(){return ng}},{key:"defaultConfig",value:function defaultConfig(){return tg}},{key:"create",value:function create(){return new GridLayout(null,null,this.defaultMeasurement(),this.defaultConfig())}}]),GridLayout}(),wg=function(){function defineProperties(e,t){for(var n=0;n0?o:i,v),P=Math.max(u>0?u:a,g),A=function createHeaders(e,t,n){var r=0,i={};return t>=200&&n>=200&&["title","subtitle"].forEach(function(t){var n=e[t](),a=function resolveTitleSubTitleContent(e){return"function"!=typeof e||e._sanitize?function escapeHTML(e){var t={"&":"&","<":"<",">":">",'"':""","'":"'","/":"/"};return(""+e).replace(/[&<>"'/]/g,function(e){return t[e]})}(e()):e()}(n[0]);if(a.length){var o=n[1];o.width=e.width(),o.content=a;var u=lv(o,t,e.dependencies().smartlabel,e[t+"Cell"]),c=u.height,s=u.cell;i[t+"Cell"]=s,e._composition[t]=s,r+=c+o.padding}}),{headerHeight:r,headers:i}}(e,S,P),E=A.headers,M=A.headerHeight,O=function createLegend(e,t,n,r){var i={height:n,width:r,headerHeight:t},a=e.config().legend,o=a.show,u=a.position;a.classPrefix=e.config().classPrefix;var c="left"===u||"right"===u?"vertical":"horizontal";return a.show=o?"vertical"===c&&r>200||"horizontal"===c&&n>200:o,a.align=c,fv(a,e,i,e.legends||[])}(e,M,S,P);e._composition.legend={},O.forEach(function(t){e._composition.legend[t.scaleType]=t.legend});var T=function getLegendSpace(e,t,n,r){var i={width:0,height:0};return e.map(function(e){return e.legend.measurement()}).forEach(function(e){var a,o;o=Math.min(e.width,e.maxWidth),a=Math.min(e.height,e.maxHeight),"horizontal"===t.align?i.width+o>r?(i.width=r,i.height+=a):(i.width+=o,i.height=Math.max(i.height,a)):i.height+a>n?(i.height=a,i.width+=o):(i.height+=a,i.width=Math.max(i.width,o))}),"horizontal"===t.align&&(i.width=r),i}(O,_,S,P),F="left"===C||"right"===C?T.width:0,N="top"===C||"bottom"===C?T.height:0,j={headers:E,legends:O,canvases:[e],rows:h,columns:d,values:p,cornerMatrices:c.cornerMatrices()},I={mountSpace:{height:i,width:a},headerHeight:M,legendSpace:T,canvasWidth:P,canvasHeight:S,width:P-F,height:S-M-N,minUnitHeight:e.minUnitHeight(),minUnitWidth:e.minUnitWidth()};return{layoutConfig:n=na(n,{classPrefix:m,showHeaders:b,border:na(c.metaData().border,e.config().border),layoutArrangement:k,legend:_,title:x,subtitle:w,isColumnSizeEqual:l,isRowSizeEqual:f}),components:j,measurement:I}},dv={position:"top",align:"left",padding:8},pv={position:"top",align:"left",padding:16};function canvas_local_options_defineProperty(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var yv=(canvas_local_options_defineProperty(ov={},"rows",{value:null,meta:{typeCheck:"constructor",typeExpected:"Array"}}),canvas_local_options_defineProperty(ov,"columns",{value:null,meta:{typeCheck:"constructor",typeExpected:"Array"}}),canvas_local_options_defineProperty(ov,"color",{value:null,meta:{typeCheck:"constructor",typeExpected:"Object",sanitization:function sanitization(e){return"string"==typeof e?{field:e}:e}}}),canvas_local_options_defineProperty(ov,"shape",{value:null,meta:{typeCheck:"constructor",typeExpected:"Object",sanitization:function sanitization(e){return"string"==typeof e?{field:e}:e}}}),canvas_local_options_defineProperty(ov,"size",{value:null,meta:{typeCheck:"constructor",typeExpected:"Object",sanitization:function sanitization(e){return"string"==typeof e?{field:e}:e}}}),canvas_local_options_defineProperty(ov,"detail",{value:[],meta:{typeCheck:"constructor",typeExpected:"Array"}}),canvas_local_options_defineProperty(ov,"layers",{value:null,meta:{typeCheck:"constructor",typeExpected:"Array"}}),canvas_local_options_defineProperty(ov,"transform",{value:null,meta:{typeCheck:"constructor",typeExpected:"Object"}}),canvas_local_options_defineProperty(ov,"mount",{value:null,meta:{sanitization:function sanitization(e){return"string"==typeof e?Ao(e).node():e}}}),ov),gv=(canvas_local_options_defineProperty(uv={},"title",{value:[null,null],meta:{typeCheck:["constructor","constructor"],typeExpected:["Function","Object"],spreadParams:!0,sanitization:[function(e){if("string"==typeof e){var n=function t(){return e};return n._sanitized=!0,n}return e},function(e){var t=na({},dv);return na(t,e)}]}}),canvas_local_options_defineProperty(uv,"subtitle",{value:[null,null],meta:{typeCheck:["constructor","constructor"],typeExpected:["Function","Object"],spreadParams:!0,sanitization:[function(e){if("string"==typeof e){var t=function sub(){return e};return t._sanitized=!0,t}return e},function(e){var t=na({},pv);return na(t,e)}]}}),uv),vv=function renderHeader(e,t,n,r){var i=r[n+"Cell"],a=e[""+n],o=a.position,u=a.align,c=a.padding,s=t.selectAll("."+e.classPrefix+"-inner-container").data([n]);s.exit().remove();var l=s.enter().append("div").merge(s);l.classed(e.classPrefix+"-inner-container",!0),i&&i.render(l.node()),l.selectAll("div").classed(e.classPrefix+"-inner-content",!0),l.style("width","100%"),a&&i&&l.style("float","left").style("text-align",u).style("padding-"+("top"===o?"bottom":"top"),c+"px")},mv=function renderComponents(e,t,n,r){var i=e.mount(),a=t.headers,o=t.legends,u=n.classPrefix,c=function getSkeletons(e,t,n){var r=t.layoutArrangement,i=t.classPrefix,a=r.headers,o=r.legends,u=n.canvasWidth,c=n.canvasHeight,s=Ao(e),l={},f=Eo(s,"div",[1],i+"-viz").style("width",u+"px").style("height",c+"px").selectAll("."+i+"-container").data(a);f.exit().remove();var h=f.enter().append("div").merge(f).attr("class",i+"-container").style("width",u+"px").style("padding","nullpx").style("margin",null).each(function(e){l[e]=Ao(this).classed(i+"-"+e+"-container",!0)}).selectAll("."+i+"-inner-container").data(function(e){return"group"===e?o:[]});return h.exit().remove(),h.enter().append("div").merge(h).attr("class",i+"-inner-container").style("width","auto").style("height","auto").each(function(e){l[e]=Ao(this).classed(i+"-"+e+"-container",!0)}),l}(i,n,r),s=c.title,l=c.legend,f=c.subtitle,h=c.layout,d=function prepareGridContainer(e,t,n,r){if(e){var i=t.height,a=t.width,o=Ao(e).selectAll("."+n+"-inner-content").data(["layout"],function(e){return e});o.exit().remove();var u=o.enter().append("div").merge(o).attr("class",n+"-inner-content").classed(n+"-grid-layout",!0).attr("id",n+"-grid-layout-"+r).style("height",i+"px").style("padding",null).style("width",Math.ceil(a)+"px"),c=u.selectAll("."+n+"-layout-grid-container").data(["layout2"]);c.exit().remove();var s=c.enter().append("div").merge(c);return s.classed(n+"-layout-grid-container",!0).attr("id",n+"-layout-grid-container-"+r).style("height",i+"px").style("width",Math.ceil(a)+"px"),{mount:s,container:u}}}(h.node(),r,u,e.alias()).mount,p=e.layout().getViewInformation().layoutDimensions.viewWidth[0];r.padding=p,function setLabelRotationForAxes(e){var t=0,n=e.xAxes()||[];!function(){for(var e=0;ev?(g++,m=0,v=y):g<0&&g++,i[g]=i[g]||[],v-=Math.min(t.measurement().height,v),m=Math.max(Math.min(t.measurement().width,t.measurement().maxWidth),m),i[g].push({legend:t,legendHeight:y,legendWidth:m})});var b=Eo(h,["div"],i,l+"-legend-section").each(function(e,t){return Ao(void 0).classed(l+"-legend-section-"+t,!0)}).classed(l+"-legend-vertical-section",!0).style("width",function(e){return e[0].legendWidth+"px"});Eo(b,["div"],function(e){return e},l+"-legend-components",{},function(e){return e.legend.id()}).each(function(e){e.legend.mount(this)}).style("width",function(e){return e.legendWidth+"px"})}else{var _=Eo(h,"div",[1],l+"-legend-section").classed(l+"-legend-horizontal-section",!0).classed(l+"-legend-section-0",!0).style("width",p+"px");Eo(_,"div",n,l+"-legend-components",{},function(e){return e.legend.id()}).each(function(e){e.legend.mount(this)}).style("width",function(e){return e.legend.measurement().width+"px"})}}(n,l,o,r),function shiftHeaders(e,t,n,r){var i=e.classPrefix,a=e.title,o=e.subtitle,u=e.legend,c=n.legendSpace;t+="left"===u.position?c.width:0,a&&Ao(r).select("."+i+"-title-container").style("width","left"===a.align?"calc(100% - "+t+"px":"100%").style("margin-left","left"===a.align?t+"px":0),o&&Ao(r).select("."+i+"-subtitle-container").style("width","left"===o.align?"calc(100% - "+t+"px":"100%").style("margin-left","left"===o.align?t+"px":0),Ao(r).select("."+i+"-legend-horizontal-section").style("margin-left",t+"px").style("width",c.width-t+"px").selectAll("."+i+"-legend-body, ."+i+"-legend-title").style("max-width",c.width-t+"px"),Ao(r).select("."+i+"-legend-vertical-section").style("margin-left",null).selectAll("."+i+"-legend-body, ."+i+"-legend-title").style("max-width",null)}(n,p,r,i)}),e.composition().visualGroup.matrixInstance().value.each(function(e){e.valueOf().parentContainer(h.node())})};function canvas_helper_toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t","\"","'","/","title_maker_resolveTitleSubTitleContent","_createHeading","title_maker_createHeaders","createLegend","legend_maker_createLegend","legendSpace","getLegendSpace","legendInfo","legend_maker_getLegendSpace","legendWidth","legendHeight","canvases","mountSpace","TITLE_CONFIG","SUB_TITLE_CONFIG","localOptions","canvas_local_options_defineProperty","_localOptions","canvasOptions","_sanitized","_canvasOptions","sub","renderer_renderHeader","renderHeader","headerCell","cont","renderComponents","_getSkeletons","getSkeletons","innerContainer","layoutType","renderer_getSkeletons","prepareGridContainer","innerSel","renderer_prepareGridContainer","setLabelRotationForAxes","renderLegend","legendComponents","sectionComponents","legendMount","legWidth","legHeight","sections","currHeight","currWidth","leg","renderer_renderLegend","shiftHeaders","shifter","renderer_shiftHeaders","helper_setupChangeListener","setupChangeListener","allOptions","_allOptions","canvas_helper_toConsumableArray","equalityChecker","option","dispatchProps","_cachedProps","applyInteractionPolicy","policies","firebolt_defaultInteractionPolicy","defaultInteractionPolicy","isMeasure","canvas_firebolt_toConsumableArray","getFieldsFromChannel","colDim","fieldInf","unitFireBolt","unitColFacets","equals","unitRowFacets","propagateWith","defaultCrossInteractionPolicy","propagationCanvasAlias","propagationUnit","canvas_firebolt","GroupFireBolt","canvas_firebolt_classCallCheck","_interactionPolicy","_crossInteractionPolicy","changeBehaviourStateOnPropagation","changeSideEffectStateOnPropagation","canvas_canvas","Canvas","globalDependencies","canvas_classCallCheck","canvas_possibleConstructorReturn","_transactor","canvas_slicedToArray","initedComponents","initCanvas","register","_getRenderDetails","prepareLayout","triggerReflow","promises","all","getAxes","initialSettings","regEntry","COMPONENTS","SUBREGISTRIES","regObj","globalCache","defaultRegistry","overrideRegistryDefinitions","overrideRegistry","muze_muze","muze","_transactor2","muze_slicedToArray","env","globalStore","componentSubRegistryDef","settings","withSettings","enableChainedTransaction","transactionModel","transactionEndpoint","transactionItems","_slicedToArray","SmartlabelManager_default","SideEffects","standards","SurrogateSideEffect","SpawnableSideEffect","Behaviours","PersistentBehaviour","VolatileBehaviour","DataModel","muze_package","layerFactory","operators_namespaceObject","utils","require","lookupWhat","lookupDetails","lookupTarget","deps","__webpack_exports__"],"mappings":"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","file":"muze.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"muze\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"muze\"] = factory();\n\telse\n\t\troot[\"muze\"] = factory();\n})(window, function() {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 7);\n","!function(e,t){\"object\"==typeof exports&&\"object\"==typeof module?module.exports=t():\"function\"==typeof define&&define.amd?define(\"DataModel\",[],t):\"object\"==typeof exports?exports.DataModel=t():e.DataModel=t()}(window,function(){return function(e){var t={};function n(r){if(t[r])return t[r].exports;var i=t[r]={i:r,l:!1,exports:{}};return e[r].call(i.exports,i,i.exports,n),i.l=!0,i.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(e,\"__esModule\",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&\"object\"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,\"default\",{enumerable:!0,value:e}),2&t&&\"string\"!=typeof e)for(var i in e)n.d(r,i,function(t){return e[t]}.bind(null,i));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,\"a\",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p=\"\",n(n.s=1)}([function(e){e.exports={name:\"datamodel\",description:\"Relational algebra compliant in-memory tabular data store\",homepage:\"https://github.com/chartshq/datamodel\",version:\"2.0.2\",license:\"MIT\",main:\"dist/datamodel.js\",author:\"Charts.com \",keywords:[\"datamodel\",\"data\",\"relational\",\"algebra\",\"model\",\"muze\",\"fusioncharts\",\"table\",\"tabular\",\"operation\"],repository:{type:\"git\",url:\"https://github.com/chartshq/datamodel.git\"},contributors:[{name:\"Akash Goswami\",email:\"akash@charts.com\"},{name:\"Subhash Haldar\",email:\"subhash@charts.com\"},{name:\"Rousan Ali\",email:\"rousan@charts.com\",url:\"https://rousan.io\"},{name:\"Ujjal Kumar Dutta\",email:\"ujjal@charts.com\"}],dependencies:{\"d3-dsv\":\"^1.0.8\"},devDependencies:{\"babel-cli\":\"6.26.0\",\"babel-core\":\"^6.26.3\",\"babel-eslint\":\"6.1.2\",\"babel-loader\":\"^7.1.4\",\"babel-plugin-transform-runtime\":\"^6.23.0\",\"babel-preset-env\":\"^1.7.0\",\"babel-preset-es2015\":\"^6.24.1\",\"babel-preset-flow\":\"^6.23.0\",chai:\"3.5.0\",\"cross-env\":\"^5.0.5\",eslint:\"3.19.0\",\"eslint-config-airbnb\":\"15.1.0\",\"eslint-plugin-import\":\"2.7.0\",\"eslint-plugin-jsx-a11y\":\"5.1.1\",\"eslint-plugin-react\":\"7.3.0\",\"istanbul-instrumenter-loader\":\"^3.0.0\",jsdoc:\"3.5.5\",json2yaml:\"^1.1.0\",karma:\"1.7.1\",\"karma-chai\":\"0.1.0\",\"karma-chrome-launcher\":\"2.1.1\",\"karma-coverage-istanbul-reporter\":\"^1.3.0\",\"karma-mocha\":\"1.3.0\",\"karma-spec-reporter\":\"0.0.31\",\"karma-webpack\":\"2.0.3\",marked:\"^0.5.0\",mocha:\"3.4.2\",\"mocha-webpack\":\"0.7.0\",\"transform-runtime\":\"0.0.0\",webpack:\"^4.12.0\",\"webpack-cli\":\"^3.0.7\",\"webpack-dev-server\":\"^3.1.4\"},scripts:{test:\"npm run lint && npm run ut\",ut:\"karma start karma.conf.js\",utd:\"karma start --single-run false --browsers Chrome karma.conf.js \",build:\"webpack --mode production\",\"build:dev\":\"webpack --mode development\",start:\"webpack-dev-server --config webpack.config.dev.js --mode development --open\",lint:\"eslint ./src\",\"lint-errors\":\"eslint --quiet ./src\",docs:\"rm -rf yaml && mkdir yaml && jsdoc -c jsdoc.conf.json\"}}},function(e,t,n){var r=n(2);e.exports=r.default?r.default:r},function(e,t,n){\"use strict\";n.r(t);var r={};n.r(r),n.d(r,\"DataFormat\",function(){return o}),n.d(r,\"DimensionSubtype\",function(){return u}),n.d(r,\"MeasureSubtype\",function(){return c}),n.d(r,\"FieldType\",function(){return f}),n.d(r,\"FilteringMode\",function(){return s});var i={};n.r(i),n.d(i,\"DSVArr\",function(){return Me}),n.d(i,\"DSVStr\",function(){return Ve}),n.d(i,\"FlatJSON\",function(){return Ye}),n.d(i,\"Auto\",function(){return Be});var a={};n.r(a),n.d(a,\"sum\",function(){return ct}),n.d(a,\"avg\",function(){return ft}),n.d(a,\"min\",function(){return st}),n.d(a,\"max\",function(){return lt}),n.d(a,\"first\",function(){return dt}),n.d(a,\"last\",function(){return pt}),n.d(a,\"count\",function(){return ht}),n.d(a,\"sd\",function(){return vt});var o={FLAT_JSON:\"FlatJSON\",DSV_STR:\"DSVStr\",DSV_ARR:\"DSVArr\",AUTO:\"Auto\"},u={CATEGORICAL:\"categorical\",TEMPORAL:\"temporal\",GEO:\"geo\"},c={DISCRETE:\"discrete\"},f={MEASURE:\"measure\",DIMENSION:\"dimension\"},s={NORMAL:\"normal\",INVERSE:\"inverse\",ALL:\"all\"};function l(e,t){e.length>0&&e.split(\",\").forEach(function(e){var n=e.split(\"-\"),r=+n[0],i=+(n[1]||n[0]);if(i>=r)for(var a=r;a<=i;a+=1)t(a)})}var d=function(){function e(e,t){for(var n=0;n=0;)o=e[a+1],-1!==r.indexOf(o)&&i.push({index:a,token:o});return i},m.formatAs=function(e,t){var n,r=h(e),i=m.findTokens(t),a=m.getTokenDefinitions(),o=String(t),u=m.TOKEN_PREFIX,c=void 0,f=void 0,s=void 0;for(s=0,n=i.length;s=0;d--)(f=a[d].index)+1!==l.length-1?(void 0===u&&(u=l.length),s=l.substring(f+2,u),l=l.substring(0,f+2)+RegExp.escape(s)+l.substring(u,l.length),u=f):u=f;for(d=0;d1){n=Math.abs(r[1]-r[0]);for(var i=2,a=r.length;i=y&&t.data=r.stops[r.stops.length-1]}).forEach(function(e){c[e.index]=r.stops[r.stops.length-1]+\"-\"+h}),r.stops.unshift(r.start),b=new Set(r.stops),dr.stops[r.stops.length-1]&&b.add(h),b=[].concat(function(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t3&&void 0!==arguments[3]&&arguments[3],i=arguments.length>4&&void 0!==arguments[4]?arguments[4]:G.CROSS,a=[],o=[],u=n||K,c=e.getFieldspace(),f=t.getFieldspace(),s=c.name,d=f.name,p=c.name+\".\"+f.name,h=L(c,f);if(s===d)throw new Error(\"DataModels must have different alias names\");return c.fields.forEach(function(e){var t=E({},e.schema);-1===h.indexOf(t.name)||r||(t.name=c.name+\".\"+t.name),a.push(t)}),f.fields.forEach(function(e){var t=E({},e.schema);-1!==h.indexOf(t.name)?r||(t.name=f.name+\".\"+t.name,a.push(t)):a.push(t)}),l(e._rowDiffset,function(e){var n=!1,p=void 0;l(t._rowDiffset,function(t){var l=[],v={};v[s]={},v[d]={},c.fields.forEach(function(t){l.push(t.data[e]),v[s][t.name]=t.data[e]}),f.fields.forEach(function(e){-1!==h.indexOf(e.schema.name)&&r||l.push(e.data[t]),v[d][e.name]=e.data[t]});var m=Ke(v[s]),y=Ke(v[d]);if(u(m,y)){var g={};l.forEach(function(e,t){g[a[t].name]=e}),n&&G.CROSS!==i?o[p]=g:(o.push(g),n=!0,p=e)}else if((i===G.LEFTOUTER||i===G.RIGHTOUTER)&&!n){var b={},_=c.fields.length-1;l.forEach(function(e,t){b[a[t].name]=t<=_?e:null}),n=!0,p=e,o.push(b)}})}),new ut(o,a,{name:p})}function z(e,t){var n=\"\"+e,r=\"\"+t;return nr?1:0}function X(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:z;return e.length>1&&function e(t,n,r,i){if(r===n)return t;var a=n+Math.floor((r-n)/2);return e(t,n,a,i),e(t,a+1,r,i),function(e,t,n,r,i){for(var a=e,o=[],u=t;u<=r;u+=1)o[u]=a[u];for(var c=t,f=n+1,s=t;s<=r;s+=1)c>n?(a[s]=o[f],f+=1):f>r?(a[s]=o[c],c+=1):i(o[c],o[f])<=0?(a[s]=o[c],c+=1):(a[s]=o[f],f+=1)}(t,n,a,r,i),t}(e,0,e.length-1,t),e}function Q(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);ta?\"desc\"===t?-1:1:0}}return r}function Z(e,t){var n=new Map,r=[];return e.forEach(function(e){var i=e[t];n.has(i)?r[n.get(i)][1].push(e):(r.push([i,[e]]),n.set(i,r.length-1))}),r}function ee(e,t,n){var r={label:e[0]};return t.reduce(function(t,r,i){return t[r]=e[1].map(function(e){return e[n[i].index]}),t},r),r}function te(e,t,n,r,i){var a={schema:[],data:[],uids:[]},o=(i=Object.assign({},{addUid:!1,columnWise:!1},i)).addUid,u=r&&r.length>0,c=[];if(n.split(\",\").forEach(function(t){for(var n=0;n=0;u--)i=t[u][0],a=t[u][1],(o=Ze(r,i))&&(S(a)?X(n,function(e,t){return a(e[o.index],t[o.index])}):j(a)?function(){var e=Z(n,o.index),t=a[a.length-1],i=a.slice(0,a.length-1),u=i.map(function(e){return Ze(r,e)});e.forEach(function(e){e.push(ee(e,i,u))}),X(e,function(e,n){var r=e[2],i=n[2];return t(r,i)}),n.length=0,e.forEach(function(e){n.push.apply(n,Q(e[1]))})}():(a=\"desc\"===String(a).toLowerCase()?\"desc\":\"asc\",X(n,$(o.type,a,o.index))));e.uids=[],n.forEach(function(t){e.uids.push(t.pop())})}(a,r),i.columnWise){var f=Array.apply(void 0,Q(Array(a.schema.length))).map(function(){return[]});a.data.forEach(function(e){e.forEach(function(e,t){f[t].push(e)})}),a.data=f}return a}function ne(e,t){var n={},r=[],i=[],a=[],o=e.getFieldspace(),u=t.getFieldspace(),c=o.fieldsObj(),f=u.fieldsObj(),s=o.name+\" union \"+u.name;if(!M(e._colIdentifier.split(\",\").sort(),t._colIdentifier.split(\",\").sort()))return null;function d(e,t,r){l(e._rowDiffset,function(e){var o={},u=\"\";i.forEach(function(n){var r=t[n].data[e];u+=\"-\"+r,o[n]=r}),n[u]||(r&&a.push(o),n[u]=!0)})}return e._colIdentifier.split(\",\").forEach(function(e){var t=c[e];r.push(E({},t.schema)),i.push(t.schema.name)}),d(t,f,!1),d(e,c,!0),new ut(a,r,{name:s})}function re(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t1&&void 0!==arguments[1]?arguments[1]:{},n={},r=t,i=e.getPartialFieldspace().getMeasure(),a=se.defaultReducer();return\"function\"==typeof t&&(a=t),Object.entries(i).forEach(function(e){var o=le(e,1)[0];\"string\"==typeof t[o]&&(r[o]=se.resolve(r[o])?se.resolve(r[o]):a),\"function\"!=typeof t[o]&&(r[o]=void 0),n[o]=r[o]||se.resolve(i[o].defAggFn())||a}),n}(e,n),o=e.getPartialFieldspace(),u=o.fieldsObj(),c=o.name,f=[],s=[],d=[],p={},h=[],v=void 0;Object.entries(u).forEach(function(e){var t=le(e,2),n=t[0],r=t[1];(-1!==i.indexOf(n)||a[n])&&(d.push(E({},r.schema)),\"measure\"===r.schema.type&&\"discrete\"!==r.schema.subtype?s.push(n):\"dimension\"!==r.schema.type&&\"discrete\"!==r.schema.subtype||f.push(n))});var m=0;return l(e._rowDiffset,function(e){var t=\"\";f.forEach(function(n){t=t+\"-\"+u[n].data[e]}),void 0===p[t]?(p[t]=m,h.push({}),f.forEach(function(t){h[m][t]=u[t].data[e]}),s.forEach(function(t){h[m][t]=[u[t].data[e]]}),m+=1):s.forEach(function(n){h[p[t]][n].push(u[n].data[e])})}),h.forEach(function(e){var t=e;s.forEach(function(n){t[n]=a[n](e[n])})}),r?(r.__calculateFieldspace(),v=r):v=new yt(h,d,{name:c}),v}function pe(e,t){var n=L(e.getFieldspace(),t.getFieldspace());return function(e,t){var r=!0;return n.forEach(function(n){r=!(e[n].value!==t[n].value||!r)}),r}}function he(e,t){var n={},r=[],i=[],a=[],o=e.getFieldspace(),u=t.getFieldspace(),c=o.fieldsObj(),f=u.fieldsObj(),s=o.name+\" union \"+u.name;if(!M(e._colIdentifier.split(\",\").sort(),t._colIdentifier.split(\",\").sort()))return null;function d(e,t){l(e._rowDiffset,function(e){var r={},o=\"\";i.forEach(function(n){var i=t[n].data[e];o+=\"-\"+i,r[n]=i}),n[o]||(a.push(r),n[o]=!0)})}return e._colIdentifier.split(\",\").forEach(function(e){var t=c[e];r.push(E({},t.schema)),i.push(t.schema.name)}),d(e,c),d(t,f),new yt(a,r,{name:s})}function ve(e,t,n){return W(e,t,n,!1,G.LEFTOUTER)}function me(e,t,n){return W(t,e,n,!1,G.RIGHTOUTER)}var ye=function(){function e(e,t){for(var n=0;nn&&(n=e)}),[t,n]}(this.data)}},{key:\"parse\",value:function(e){return e=parseFloat(e,10),Number.isNaN(e)?null:e}},{key:\"unit\",value:function(){return this.fieldUnit}},{key:\"scale\",value:function(){return this.fieldScale}},{key:\"numberFormat\",value:function(){var e=this.fieldNumberformat;return function(t){return e(t)}}},{key:\"defAggFn\",value:function(){return this.fieldDefAggFn}}]),t}(),Oe=function(){function e(e,t){for(var n=0;n=a?c=!0:(r=e.charCodeAt(o++))===Pe?f=!0:r===Ce&&(f=!0,e.charCodeAt(o)===Pe&&++o),e.slice(i+1,t-1).replace(/\"\"/g,'\"')}for(;o2&&void 0!==arguments[2]?arguments[2]:{},i=arguments[3],a=void 0;t!==Y?(a={op:t,meta:r,criteria:i},e._derivation.push(a)):(a=[].concat(Ge(i)),e._derivation.length=0,(n=e._derivation).push.apply(n,Ge(a)))},ze=function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=n.operation||q,i=n.filterByMeasure||!1,a=[];a=t.length?t.map(function(e){return function(e){var t=e.getData(),n=t.schema,r=e.getFieldsConfig(),a=e.getFieldspace().fieldsObj(),o=t.data,u=Object.values(r).reduce(function(e,t){return e[t.def.name]=a[t.def.name].domain(),e},{});return function(e){return!!o.length&&o.some(function(t){return n.every(function(n){if(!(n.name in e))return!0;var a=e[n.name].valueOf();if(i&&n.type===f.MEASURE)return a>=u[n.name][0]&&a<=u[n.name][1];if(n.type!==f.DIMENSION)return!0;var o=r[n.name].index;return t[o]===e[n.name].valueOf()})})}}(e)}):[function(){return!1}];var o=void 0;r===q?o=e.clone(!1,!1).select(function(e){return a.every(function(t){return t(e)})},{saveChild:!1,mode:s.ALL}):o=e.clone(!1,!1).select(function(e){return a.some(function(t){return t(e)})},{mode:s.ALL,saveChild:!1});return o},Xe=function(e,t,n,r){var i=e.clone(r.saveChild),a=function(e,t,n,r){var i=[],a=-1,o=void 0,u=function(e){return n(qe(t,e),e)};return r.mode===s.INVERSE&&(u=function(e){return!n(qe(t,e))}),l(e,function(e){u(e)&&(-1!==a&&e===a+1?(o=i.length-1,i[o]=i[o].split(\"-\")[0]+\"-\"+e):i.push(\"\"+e),a=e)}),i.join(\",\")}(i._rowDiffset,i.getPartialFieldspace().fields,t,n);return i._rowDiffset=a,i.__calculateFieldspace().calculateFieldsConfig(),r.saveChild&&We(i,U,{config:n},t),i},Qe=function(e,t,n,r){var i=e.clone(n.saveChild),a=t;return n.mode===s.INVERSE&&(a=r.filter(function(e){return-1===t.indexOf(e)})),i._colIdentifier=a.join(\",\"),i.__calculateFieldspace().calculateFieldsConfig(),n.saveChild&&We(i,H,{projField:t,config:n,actualProjField:a},null),i},$e=function(e,t,n,r){r=Object.assign(Object.assign({},xe),r);var a=i[r.dataFormat];if(!a||\"function\"!=typeof a)throw new Error(\"No converter function found for \"+r.dataFormat+\" format\");var o=a(t,r),u=Je(o,2),c=u[0],f=u[1],s=Fe(f,n,c),l=R.createNamespace(s,r.name);return e._partialFieldspace=l,e._rowDiffset=f.length&&f[0].length?\"0-\"+(f[0].length-1):\"\",e._colIdentifier=n.map(function(e){return e.name}).join(),e},Ze=function(e,t){for(var n=0;n2&&void 0!==arguments[2]?arguments[2]:{},i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},a=i.nonTraversingModel,o=i.excludeModels||[];t!==a&&((!o.length||-1===o.indexOf(t))&&t.handlePropagation(n,r),t._children.forEach(function(t){var a=et(n,t),o=Je(a,2),u=o[0],c=o[1];e(t,[u,c],r,i)}))},nt=function(e,t,n,r){var i=void 0,a=void 0,o=n.propagationNameSpace,u=n.propagateToSource,c=n.sourceId,f=r.propagateInterpolatedValues,s=[];if(null===e&&!0!==r.persistent)s=[{criteria:[]}];else{var l,d=Object.values(o.mutableActions);!1!==u&&(d=d.filter(function(e){return e.config.sourceId!==c}));var p=d.filter(function(e){return(r.filterFn||function(){return!0})(e,r)}).map(function(e){return e.config.criteria}),h=[];if(!1!==u){var v=Object.values(o.mutableActions);v.forEach(function(e){var t=e.config;!1===t.applyOnSource&&t.action===r.action&&t.sourceId!==c&&(h.push(e.model),(i=v.filter(function(t){return t!==e}).map(function(e){return e.config.criteria})).length&&s.push({criteria:i,models:e.model,path:function e(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];return null!==t._parent&&(n.push(t),e(t._parent,n)),n}(e.model)}))})}i=(l=[]).concat.apply(l,[].concat(Ge(p),[e])).filter(function(e){return null!==e}),s.push({criteria:i,excludeModels:[].concat(h,Ge(r.excludeModels||[]))})}var m=t.model,y=Object.assign({sourceIdentifiers:e,propagationSourceId:c},r),g=t.groupByModel;f&&g&&(a=ze(g,i,{filterByMeasure:f}),tt(g,a,y)),s.forEach(function(e){var t=ze(m,e.criteria),n=e.path;if(n){var r=function(e,t){for(var n=0,r=t.length;n0&&void 0!==arguments[0])||arguments[0],t=void 0;if(!1===(!(arguments.length>1&&void 0!==arguments[1])||arguments[1])){var n=this.getData({getAllFields:!0}),r=n.data,i=n.schema,a=r.map(function(e){var t={};return i.forEach(function(n,r){t[n.name]=e[r]}),t});t=new this.constructor(a,i)}else t=new this.constructor(this);return e&&this._children.push(t),t}},{key:\"project\",value:function(e,t){var n={mode:s.NORMAL,saveChild:!0};t=Object.assign({},n,t);var r=this.getFieldsConfig(),i=Object.keys(r),a=t.mode,o=e.reduce(function(e,t){return\"RegExp\"===t.constructor.name?e.push.apply(e,function(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t1&&void 0!==arguments[1]?arguments[1]:[];We(this,Y,null,t),this._parent=e,e._children.push(this)}}]),e}(),at=function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function(e,t){var n=[],r=!0,i=!1,a=void 0;try{for(var o,u=e[Symbol.iterator]();!(r=(o=u.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){i=!0,a=e}finally{try{!r&&u.return&&u.return()}finally{if(i)throw a}}return n}(e,t);throw new TypeError(\"Invalid attempt to destructure non-iterable instance\")}}(),ot=function(){function e(e,t){for(var n=0;n1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{saveChild:!0},r=\"\"+e.join(),i=[this,e,t],a=de.apply(void 0,i);return n.saveChild&&(this._children.push(a),We(a,V,{fieldsArr:e,groupByString:r,defaultReducer:se.defaultReducer()},t)),a._parent=this,a}},{key:\"sort\",value:function(e){var t=this.getData({order:\"row\",sort:e}),n=[t.schema.map(function(e){return e.name})].concat(t.data),r=new this.constructor(n,t.schema,{dataFormat:\"DSVArr\"});return r._sortingDetails=e,r}},{key:\"addField\",value:function(e){var t=e.fieldName();this._colIdentifier+=\",\"+t;var n=this._partialFieldspace;if(n.fieldsObj()[e.fieldName()]){var r=n.fields.findIndex(function(e){return e.name===t});r>=0&&(n.fields[r]=e)}else n.fields.push(e);return this.__calculateFieldspace().calculateFieldsConfig(),this}},{key:\"calculateVariable\",value:function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{saveChild:!0,replaceVar:!1},r=this.getFieldsConfig(),i=t.slice(0,t.length-1),a=t[t.length-1];if(r[e.name]&&!n.replaceVar)throw new Error(e.name+\" field already exists in model.\");var o=i.map(function(e){var t=r[e];if(!t)throw new Error(e+\" is not a valid column name.\");return t.index}),u=this.clone(),c=u.getFieldspace().fields,f=o.map(function(e){return c[e]}),s=[];l(u._rowDiffset,function(e){var t=f.map(function(t){return t.data[e]});s[e]=a.apply(void 0,function(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t1&&void 0!==arguments[1]?arguments[1]:{},n=arguments[2],r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},i=t.isMutableAction,a=t.sourceId,o=t.payload,u=function e(t){return t._parent?e(t._parent):t}(this),c=u._propagationNameSpace,f={groupByModel:function e(t){return t._parent&&t._derivation.find(function(e){return\"group\"!==e.op})?e(t._parent):t}(this),model:u};return n&&function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments[2],r=void 0,i=t.isMutableAction,a=t.criteria,o=t.action+\"-\"+t.sourceId;r=i?e.mutableActions:e.immutableActions,null===a?delete r[o]:r[o]={model:n,config:t}}(c,t,this),nt(e,f,{propagationNameSpace:c,sourceId:a},Object.assign({payload:o},t)),i&&function(e,t,n){var r=e.immutableActions;for(var i in r){var a=r[i].config,o=n.config.sourceId,u=!n.propConfig.filterImmutableAction||n.propConfig.filterImmutableAction(a,n.config);if(a.sourceId!==o&&u){var c=a.criteria;nt(c,t,{propagationNameSpace:e,propagateToSource:!1,sourceId:o},a)}}}(c,f,{config:t,propConfig:r}),this}},{key:\"on\",value:function(e,t){switch(e){case\"propagation\":this._onPropagation.push(t)}return this}},{key:\"unsubscribe\",value:function(e){switch(e){case\"propagation\":this._onPropagation=[]}return this}},{key:\"handlePropagation\",value:function(e,t){var n=this;this._onPropagation.forEach(function(r){return r.call(n,e,t)})}},{key:\"bin\",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=this.clone(),r=t.name||e+\"_binned\";if(this.getFieldsConfig()[r]||!this.getFieldsConfig()[e])throw new Error(\"Field \"+e+\" already exists.\");var i=I(this._partialFieldspace.fields.find(function(t){return t.name===e}),this._rowDiffset,t),a=Fe([i.data],[{name:r,type:f.MEASURE,subtype:\"discrete\",bins:{range:i.range,mid:i.mid}}],[r])[0];return n.addField(a),We(n,J,{measureName:e,config:t,binFieldName:r},null),n}}],[{key:\"Reducers\",get:function(){return se}}]),t}(),ct=oe.sum,ft=oe.avg,st=oe.min,lt=oe.max,dt=oe.first,pt=oe.last,ht=oe.count,vt=oe.std,mt=n(0);ut.Operators={compose:function(){for(var e=arguments.length,t=Array(e),n=0;n1&&void 0!==arguments[1]?arguments[1]:{saveChild:!0}).saveChild;return t.forEach(function(e){n=e(n),i.push.apply(i,function(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t1&&r.dispose(),n}},bin:function(){for(var e=arguments.length,t=Array(e),n=0;n2?(i=arguments.length<=0?void 0:arguments[0],n=arguments.length<=1?void 0:arguments[1],o=arguments.length<=2?void 0:arguments[2]):(i=null,n=arguments.length<=0?void 0:arguments[0],o=arguments.length<=1?void 0:arguments[1]),t=o(y),(e=r=new _(t.fn)).addDependencies.apply(e,P(t.dependencies)),this._addPropInModel(i,function(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}({},n,r)),this}},{key:\"_addPropInModel\",value:function(e,t){return this._graph.createNodesFrom(t,e),this}},{key:\"on\",value:function(e,t,r){var n,i=e instanceof Array?e:[e],o=this._graph.createElectricNodeOf(i,{type:\"CurrFrame\",fn:t});r&&(n=this._graph.stopPropagation().setPropagationOverride(\"nextFrame\")).resetNodeValue.apply(n,P(e));return o}},{key:\"next\",value:function(e,t,r){var n,i=e instanceof Array?e:[e],o=this._graph.createElectricNodeOf(i,{type:\"NextFrame\",fn:t});r&&(n=this._graph.stopPropagation().setPropagationOverride(\"currentFrame\")).resetNodeValue.apply(n,P(e));return o}},{key:\"lock\",value:function(){return this._lockFlag=!0,this._reqQ.length=0,this}},{key:\"unlock\",value:function(){return this._lockFlag=!1,this.setProp.apply(this,P(this._reqQ)),this._reqQ.length=0,this}},{key:\"prop\",value:function(){var e,t=void 0,r=void 0;switch(e=arguments.length){case 1:t=arguments.length<=0?void 0:arguments[0];break;case 2:t=arguments.length<=0?void 0:arguments[0],r=arguments.length<=1?void 0:arguments[1];break;default:return this}return 2===e?(this._lockFlag?this._reqQ.push([t,r]):this.setProp([t,r]),this):this._graph.getNodeValue(t)}},{key:\"setProp\",value:function(){for(var e,t=this,r=arguments.length,n=Array(r),i=0;i whenever a break is necessary. This is to recgonize one\n * generalized format independent of the implementation (canvas based solution, svg based solution). This method\n * converts the output of getSmartText().text to array of lines if the text is wrapped. It sets a named property\n * `lines` on the object passed as parameter.\n *\n * @param {Object} smartlabel - the object returned by getSmartText based on which line arr which to be formed.\n *\n * @return {Object} - The same object which was passed in the arguments. Also a named property `lines` is set.\n */\nSmartLabelManager.textToLines = function (smartlabel) {\n smartlabel = smartlabel || {};\n\n if (!smartlabel.text) {\n smartlabel.text = '';\n } else if (typeof smartlabel.text !== 'string') {\n smartlabel.text = smartlabel.text.toString();\n }\n\n smartlabel.lines = smartlabel.text.split(/\\n|/ig);\n return smartlabel;\n};\n\n// Saves all the instance created so far\nSmartLabelManager.store = {};\n\n// Calculates space taken by a character with an approximation value which is calculated by repeating the\n// character by string length times.\nSmartLabelManager.prototype._calCharDimWithCache = function (text, calculateDifference, length) {\n if (!this._init) {\n return false;\n }\n\n var size,\n csArr,\n tw,\n twi,\n cachedStyle,\n asymmetricDifference,\n maxAdvancedCacheLimit = this.options.maxCacheLimit,\n container = this._container,\n style = this.style || {},\n cache = this._advancedCache || (this._advancedCache = {}),\n advancedCacheKey = this._advancedCacheKey || (this._advancedCacheKey = []),\n cacheName = text + (style.fontSize || BLANK) + (style.fontFamily || BLANK) + (style.fontWeight || BLANK) + (style.fontStyle || BLANK),\n cacheInitName = text + 'init' + (style.fontSize || BLANK) + (style.fontFamily || BLANK) + (style.fontWeight || BLANK) + (style.fontStyle || BLANK);\n\n htmlSplCharSpace[text] && (text = htmlSplCharSpace[text]);\n\n if (!calculateDifference) {\n asymmetricDifference = 0;\n } else {\n if ((asymmetricDifference = cache[cacheInitName]) === undefined) {\n container.innerHTML = text.repeat ? text.repeat(length) : Array(length + 1).join(text); // jshint ignore:line\n tw = container.offsetWidth;\n\n container.innerHTML = text;\n twi = container.offsetWidth;\n\n asymmetricDifference = cache[cacheInitName] = (tw - length * twi) / (length + 1);\n advancedCacheKey.push(cacheInitName);\n if (advancedCacheKey.length > maxAdvancedCacheLimit) {\n delete cache[advancedCacheKey.shift()];\n }\n }\n }\n\n if (cachedStyle = cache[cacheName]) {\n csArr = cachedStyle.split(',');\n return {\n width: parseFloat(csArr[0], 10),\n height: parseFloat(csArr[1], 10)\n };\n }\n\n container.innerHTML = text;\n\n size = {\n height: container.offsetHeight,\n width: container.offsetWidth + asymmetricDifference\n };\n\n cache[cacheName] = size.width + ',' + size.height;\n advancedCacheKey.push(cacheName);\n if (advancedCacheKey.length > maxAdvancedCacheLimit) {\n delete cache[advancedCacheKey.shift()];\n }\n\n return size;\n};\n\n// Provide function to calculate the height and width based on the environment and available support from dom.\nSmartLabelManager.prototype._getWidthFn = function () {\n var contObj = this._containerObj,\n container = this._container,\n svgText = contObj.svgText;\n\n if (svgText) {\n return function (str) {\n var bbox, width;\n\n svgText.textContent = str;\n bbox = svgText.getBBox();\n width = bbox.width - SVG_BBOX_CORRECTION;\n if (width < 1) {\n width = bbox.width;\n }\n\n return width;\n };\n } else {\n return function (str) {\n container.innerHTML = str;\n return container.offsetWidth;\n };\n }\n};\n\n/*\n * Sets the style based on which the text's metrics to be calculated.\n *\n * @param {Object} style - The style object which affects the text size\n * {\n * fontSize / 'font-size' : MUST BE FOLLOWED BY PX (10px, 11px)\n * fontFamily / 'font-family'\n * fontWeight / 'font-weight'\n * fontStyle / 'font-style'\n * }\n *\n * @return {SmartLabelManager} - Current instance of SmartLabelManager\n */\nSmartLabelManager.prototype.setStyle = function (style) {\n if (!this._init) {\n return this;\n }\n\n var sCont;\n\n if (style === this.style && !this._styleNotSet) {\n return;\n }\n\n if (!style) {\n style = this.style;\n }\n\n slLib.setLineHeight(style);\n this.style = style;\n\n this._containerObj = sCont = this._containerManager.get(style);\n\n if (this._containerObj) {\n this._container = sCont.node;\n this._context = sCont.context;\n this._cache = sCont.charCache;\n this._lineHeight = sCont.lineHeight;\n this._styleNotSet = false;\n } else {\n this._styleNotSet = true;\n }\n\n return this;\n};\n\n/*\n * Decides whether ellipses to be shown if the node is truncated\n *\n * @param {Boolean} useEllipses - decides if a ellipses to be appended if the text is truncated. Default: false\n *\n * @return {SmartLabelManager} - Current instance of SmartLabelManager\n */\nSmartLabelManager.prototype.useEllipsesOnOverflow = function (useEllipses) {\n if (!this._init) {\n return this;\n }\n this._showNoEllipses = !useEllipses;\n return this;\n};\n\n/*\n * Get wrapped or truncated text if a bound box is defined around it. The result text would be separated by
\n * if wrapped\n *\n * @param {String} text - the subject text\n * @param {Number} maxWidth - width in px of the the bound box\n * @param {Number} maxHeight - height in px of the the bound box\n * @param {Boolean} noWrap - whether the text to be wrapped. Default false.\n *\n * @return {Object} - The metrics of the text bounded by the box\n * {\n * height : height of the wrapped text\n * width : width of the wrapped text\n * isTruncated : whether the text is truncated\n * maxHeight : Maximum height given\n * maxWidth : Maximum width given\n * oriText : Original text sent\n * oriTextHeight : Original text height\n * oriTextWidth : Original text width\n * text : SMART TEXT\n * }\n */\nSmartLabelManager.prototype.getSmartText = function (text, maxWidth, maxHeight, noWrap) {\n if (!this._init) {\n return false;\n }\n\n if (text === undefined || text === null) {\n text = '';\n } else if (typeof text !== 'string') {\n text = text.toString();\n }\n\n var len,\n trimStr,\n tempArr,\n tmpText,\n maxWidthWithEll,\n toolText,\n oriWidth,\n oriHeight,\n newCharIndex,\n nearestChar,\n tempChar,\n getWidth,\n initialLeft,\n initialTop,\n getOriSizeImproveObj,\n spanArr,\n x,\n y,\n minWidth,\n elem,\n chr,\n elemRightMostPoint,\n elemLowestPoint,\n lastBR,\n removeFromIndex,\n removeFromIndexForEllipses,\n hasHTMLTag = false,\n maxStrWidth = 0,\n lastDash = -1,\n lastSpace = -1,\n lastIndexBroken = -1,\n strWidth = 0,\n strHeight = 0,\n oriTextArr = [],\n i = 0,\n ellipsesStr = this._showNoEllipses ? '' : '...',\n lineHeight = this._lineHeight,\n context = this._context,\n container = this._container,\n sCont = this._containerObj,\n ellipsesWidth = sCont.ellipsesWidth,\n dotWidth = sCont.dotWidth,\n characterArr = [],\n dashIndex = -1,\n spaceIndex = -1,\n lastLineBreak = -1,\n fastTrim = function fastTrim(str) {\n str = str.replace(/^\\s\\s*/, '');\n var ws = /\\s/,\n i = str.length;\n while (ws.test(str.charAt(i -= 1))) {/* jshint noempty:false */}\n return str.slice(0, i + 1);\n },\n smartLabel = {\n text: text,\n maxWidth: maxWidth,\n maxHeight: maxHeight,\n width: null,\n height: null,\n oriTextWidth: null,\n oriTextHeight: null,\n oriText: text,\n isTruncated: false\n };\n\n getWidth = this._getWidthFn();\n\n // In some browsers, offsetheight of a single-line text is getting little (1 px) heigher value of the\n // lineheight. As a result, smartLabel is unable to return single-line text.\n // To fix this, increase the maxHeight a little amount. Hence maxHeight = lineHeight * 1.2\n if (maxHeight === lineHeight) {\n maxHeight *= 1.2;\n }\n\n if (container) {\n if (!documentSupport.isBrowserLess) {\n hasHTMLTag = slLib.xmlTagRegEx.test(text);\n if (!hasHTMLTag) {\n // Due to support of <,> for xml we convert <, > to <,> respectively so to get the correct\n // width it is required to convert the same before calculation for the new improve version of the\n // get text width.\n tmpText = text.replace(slLib.ltgtRegex, function (match) {\n return match === '<' ? '<' : '>';\n });\n getOriSizeImproveObj = this.getOriSize(tmpText, true);\n\n smartLabel.oriTextWidth = oriWidth = getOriSizeImproveObj.width;\n smartLabel.oriTextHeight = oriHeight = getOriSizeImproveObj.height;\n } else {\n container.innerHTML = text;\n smartLabel.oriTextWidth = oriWidth = container.offsetWidth;\n smartLabel.oriTextHeight = oriHeight = container.offsetHeight;\n }\n\n if (oriHeight <= maxHeight && oriWidth <= maxWidth) {\n smartLabel.width = smartLabel.oriTextWidth = oriWidth;\n smartLabel.height = smartLabel.oriTextHeight = oriHeight;\n return smartLabel;\n }\n\n if (lineHeight > maxHeight) {\n smartLabel.text = '';\n smartLabel.width = smartLabel.oriTextWidth = 0;\n smartLabel.height = smartLabel.oriTextHeight = 0;\n return smartLabel;\n }\n }\n\n // Calculate width with ellipses\n text = fastTrim(text).replace(/(\\s+)/g, ' ');\n maxWidthWithEll = this._showNoEllipses ? maxWidth : maxWidth - ellipsesWidth;\n\n if (!hasHTMLTag) {\n oriTextArr = text.split('');\n len = oriTextArr.length;\n trimStr = '', tempArr = [];\n tempChar = oriTextArr[0];\n\n if (this._cache[tempChar]) {\n minWidth = this._cache[tempChar].width;\n } else {\n minWidth = getWidth(tempChar);\n this._cache[tempChar] = { width: minWidth };\n }\n\n if (maxWidthWithEll > minWidth) {\n tempArr = text.substr(0, slLib.getNearestBreakIndex(text, maxWidthWithEll, this)).split('');\n i = tempArr.length;\n } else if (minWidth > maxWidth) {\n smartLabel.text = '';\n smartLabel.width = smartLabel.oriTextWidth = smartLabel.height = smartLabel.oriTextHeight = 0;\n return smartLabel;\n } else if (ellipsesStr) {\n maxWidthWithEll = maxWidth - 2 * dotWidth;\n if (maxWidthWithEll > minWidth) {\n ellipsesStr = '..';\n } else {\n maxWidthWithEll = maxWidth - dotWidth;\n if (maxWidthWithEll > minWidth) {\n ellipsesStr = '.';\n } else {\n maxWidthWithEll = 0;\n ellipsesStr = '';\n }\n }\n }\n\n strWidth = getWidth(tempArr.join(''));\n strHeight = this._lineHeight;\n\n if (noWrap) {\n for (; i < len; i += 1) {\n tempChar = tempArr[i] = oriTextArr[i];\n if (this._cache[tempChar]) {\n minWidth = this._cache[tempChar].width;\n } else {\n if (!getOriSizeImproveObj || !(minWidth = getOriSizeImproveObj.detailObj[tempChar])) {\n minWidth = getWidth(tempChar);\n }\n this._cache[tempChar] = {\n width: minWidth\n };\n }\n strWidth += minWidth;\n if (strWidth > maxWidthWithEll) {\n if (!trimStr) {\n trimStr = tempArr.slice(0, -1).join('');\n }\n if (strWidth > maxWidth) {\n smartLabel.text = fastTrim(trimStr) + ellipsesStr;\n smartLabel.tooltext = smartLabel.oriText;\n smartLabel.width = getWidth(smartLabel.text);\n smartLabel.height = this._lineHeight;\n return smartLabel;\n }\n }\n }\n\n smartLabel.text = tempArr.join('');\n smartLabel.width = strWidth;\n smartLabel.height = this._lineHeight;\n return smartLabel;\n } else {\n for (; i < len; i += 1) {\n tempChar = tempArr[i] = oriTextArr[i];\n if (tempChar === ' ' && !context) {\n tempChar = ' ';\n }\n\n if (this._cache[tempChar]) {\n minWidth = this._cache[tempChar].width;\n } else {\n if (!getOriSizeImproveObj || !(minWidth = getOriSizeImproveObj.detailObj[tempChar])) {\n minWidth = getWidth(tempChar);\n }\n this._cache[tempChar] = {\n width: minWidth\n };\n }\n strWidth += minWidth;\n\n if (strWidth > maxWidthWithEll) {\n if (!trimStr) {\n trimStr = tempArr.slice(0, -1).join('');\n }\n if (strWidth > maxWidth) {\n /** @todo use regular expressions for better performance. */\n lastSpace = text.substr(0, tempArr.length).lastIndexOf(' ');\n lastDash = text.substr(0, tempArr.length).lastIndexOf('-');\n if (lastSpace > lastIndexBroken) {\n strWidth = getWidth(tempArr.slice(lastIndexBroken + 1, lastSpace).join(''));\n tempArr.splice(lastSpace, 1, '
');\n lastIndexBroken = lastSpace;\n newCharIndex = lastSpace + 1;\n } else if (lastDash > lastIndexBroken) {\n if (lastDash === tempArr.length - 1) {\n strWidth = getWidth(tempArr.slice(lastIndexBroken + 1, lastSpace).join(''));\n tempArr.splice(lastDash, 1, '
-');\n } else {\n strWidth = getWidth(tempArr.slice(lastIndexBroken + 1, lastSpace).join(''));\n tempArr.splice(lastDash, 1, '-
');\n }\n lastIndexBroken = lastDash;\n newCharIndex = lastDash + 1;\n } else {\n tempArr.splice(tempArr.length - 1, 1, '
' + oriTextArr[i]);\n lastLineBreak = tempArr.length - 2;\n strWidth = getWidth(tempArr.slice(lastIndexBroken + 1, lastLineBreak + 1).join(''));\n lastIndexBroken = lastLineBreak;\n newCharIndex = i;\n }\n strHeight += this._lineHeight;\n if (strHeight > maxHeight) {\n smartLabel.text = fastTrim(trimStr) + ellipsesStr;\n smartLabel.tooltext = smartLabel.oriText;\n // The max width among all the lines will be the width of the string.\n smartLabel.width = maxWidth;\n smartLabel.height = strHeight - this._lineHeight;\n return smartLabel;\n } else {\n maxStrWidth = max(maxStrWidth, strWidth);\n trimStr = null;\n nearestChar = slLib.getNearestBreakIndex(text.substr(newCharIndex), maxWidthWithEll, this);\n strWidth = getWidth(text.substr(newCharIndex, nearestChar || 1));\n if (tempArr.length < newCharIndex + nearestChar) {\n tempArr = tempArr.concat(text.substr(tempArr.length, newCharIndex + nearestChar - tempArr.length).split(''));\n i = tempArr.length - 1;\n }\n }\n }\n }\n }\n\n maxStrWidth = max(maxStrWidth, strWidth);\n\n smartLabel.text = tempArr.join('');\n smartLabel.width = maxStrWidth;\n smartLabel.height = strHeight;\n return smartLabel;\n }\n } else {\n toolText = text.replace(slLib.spanAdditionRegx, '$2');\n text = text.replace(slLib.spanAdditionRegx, slLib.spanAdditionReplacer);\n text = text.replace(/()/g, '$1');\n\n container.innerHTML = text;\n\n spanArr = container[documentSupport.childRetriverFn](documentSupport.childRetriverString);\n\n for (x = 0, y = spanArr.length; x < y; x += 1) {\n elem = spanArr[x];\n //chech whether this span is temporary inserted span from it's class\n if (documentSupport.noClassTesting || slLib.classNameReg.test(elem.className)) {\n chr = elem.innerHTML;\n if (chr !== '') {\n if (chr === ' ') {\n spaceIndex = characterArr.length;\n } else if (chr === '-') {\n dashIndex = characterArr.length;\n }\n\n characterArr.push({\n spaceIdx: spaceIndex,\n dashIdx: dashIndex,\n elem: elem\n });\n oriTextArr.push(chr);\n }\n }\n }\n\n i = 0;\n len = characterArr.length;\n minWidth = characterArr[0].elem.offsetWidth;\n\n if (minWidth > maxWidth) {\n smartLabel.text = '';\n smartLabel.width = smartLabel.oriTextWidth = smartLabel.height = smartLabel.oriTextHeight = 0;\n\n return smartLabel;\n } else if (minWidth > maxWidthWithEll && !this._showNoEllipses) {\n\n maxWidthWithEll = maxWidth - 2 * dotWidth;\n if (maxWidthWithEll > minWidth) {\n ellipsesStr = '..';\n } else {\n maxWidthWithEll = maxWidth - dotWidth;\n if (maxWidthWithEll > minWidth) {\n ellipsesStr = '.';\n } else {\n maxWidthWithEll = 0;\n ellipsesStr = '';\n }\n }\n }\n\n initialLeft = characterArr[0].elem.offsetLeft;\n initialTop = characterArr[0].elem.offsetTop;\n\n if (noWrap) {\n for (; i < len; i += 1) {\n elem = characterArr[i].elem;\n elemRightMostPoint = elem.offsetLeft - initialLeft + elem.offsetWidth;\n\n if (elemRightMostPoint > maxWidthWithEll) {\n if (!removeFromIndexForEllipses) {\n removeFromIndexForEllipses = i;\n }\n if (container.offsetWidth > maxWidth) {\n removeFromIndex = i;\n i = len;\n }\n }\n }\n } else {\n for (; i < len; i += 1) {\n elem = characterArr[i].elem;\n elemLowestPoint = elem.offsetHeight + (elem.offsetTop - initialTop);\n elemRightMostPoint = elem.offsetLeft - initialLeft + elem.offsetWidth;\n\n lastBR = null;\n\n if (elemRightMostPoint > maxWidthWithEll) {\n if (!removeFromIndexForEllipses) {\n removeFromIndexForEllipses = i;\n }\n\n if (elemRightMostPoint > maxWidth) {\n lastSpace = characterArr[i].spaceIdx;\n lastDash = characterArr[i].dashIdx;\n if (lastSpace > lastIndexBroken) {\n characterArr[lastSpace].elem.innerHTML = '
';\n lastIndexBroken = lastSpace;\n } else if (lastDash > lastIndexBroken) {\n if (lastDash === i) {\n // in case the overflowing character itself is the '-'\n characterArr[lastDash].elem.innerHTML = '
-';\n } else {\n characterArr[lastDash].elem.innerHTML = '-
';\n }\n lastIndexBroken = lastDash;\n } else {\n elem.parentNode.insertBefore(lastBR = doc.createElement('br'), elem);\n }\n\n //check whether this break made current element outside the area height\n if (elem.offsetHeight + elem.offsetTop > maxHeight) {\n //remove the lastly inserted line break\n if (lastBR) {\n lastBR.parentNode.removeChild(lastBR);\n } else if (lastIndexBroken === lastDash) {\n characterArr[lastDash].elem.innerHTML = '-';\n } else {\n characterArr[lastSpace].elem.innerHTML = ' ';\n }\n removeFromIndex = i;\n //break the looping condition\n i = len;\n } else {\n removeFromIndexForEllipses = null;\n }\n }\n } else {\n //check whether this break made current element outside the area height\n if (elemLowestPoint > maxHeight) {\n removeFromIndex = i;\n i = len;\n }\n }\n }\n }\n\n if (removeFromIndex < len) {\n //set the trancated property of the smartlabel\n smartLabel.isTruncated = true;\n\n /** @todo is this really needed? */\n removeFromIndexForEllipses = removeFromIndexForEllipses ? removeFromIndexForEllipses : removeFromIndex;\n\n for (i = len - 1; i >= removeFromIndexForEllipses; i -= 1) {\n elem = characterArr[i].elem;\n //chech whether this span is temporary inserted span from it's class\n elem.parentNode.removeChild(elem);\n }\n\n for (; i >= 0; i -= 1) {\n elem = characterArr[i].elem;\n if (slLib.classNameBrReg.test(elem.className)) {\n //chech whether this span is temporary inserted span from it's class\n elem.parentNode.removeChild(elem);\n } else {\n i = 0;\n }\n }\n }\n\n //get the smart text\n smartLabel.text = container.innerHTML.replace(slLib.spanRemovalRegx, '$1').replace(/\\&\\;/g, '&');\n if (smartLabel.isTruncated) {\n smartLabel.text += ellipsesStr;\n smartLabel.tooltext = toolText;\n }\n }\n\n smartLabel.height = container.offsetHeight;\n smartLabel.width = container.offsetWidth;\n\n return smartLabel;\n } else {\n smartLabel.error = new Error('Body Tag Missing!');\n return smartLabel;\n }\n};\n\n/*\n * Get the height and width of a text.\n *\n * @param {String} text - Text whose metrics to be measured\n * @param {Boolean} Optional detailedCalculationFlag - this flag if set it calculates per letter position\n * information and returns it. Ideally you dont need it unless you want to post process the\n * string. And its an EXPENSIVE OPERATION.\n *\n * @return {Object} - If detailedCalculationFlag is set to true the returned object would be\n * {\n * height: height of the text\n * width: width of the text\n * detailObj: detail calculation of letters in the format {lettername: width}\n * }\n * If detailedCalculationFlag is set to false the returned object wont have the detailObj prop.\n */\nSmartLabelManager.prototype.getOriSize = function (text, detailedCalculationFlag) {\n if (!this._init) {\n return false;\n }\n\n var textArr,\n letter,\n lSize,\n i,\n l,\n cumulativeSize = 0,\n height = 0,\n indiSizeStore = {};\n\n if (!detailedCalculationFlag) {\n return this._calCharDimWithCache(text);\n }\n\n // Calculate the width of every letter with an approximation\n textArr = text.split('');\n for (i = 0, l = textArr.length; i < l; i++) {\n letter = textArr[i];\n lSize = this._calCharDimWithCache(letter, true, textArr.length);\n height = max(height, lSize.height);\n cumulativeSize += lSize.width;\n indiSizeStore[letter] = lSize.width;\n }\n\n return {\n width: round(cumulativeSize),\n height: height,\n detailObj: indiSizeStore\n };\n};\n\n/*\n * Dispose the container and object allocated by the smartlabel\n */\nSmartLabelManager.prototype.dispose = function () {\n if (!this._init) {\n return this;\n }\n\n this._containerManager && this._containerManager.dispose && this._containerManager.dispose();\n\n delete this._container;\n delete this._context;\n delete this._cache;\n delete this._containerManager;\n delete this._containerObj;\n delete this.id;\n delete this.style;\n delete this.parentContainer;\n delete this._showNoEllipses;\n\n return this;\n};\n\nexports['default'] = SmartLabelManager;\nmodule.exports = exports['default'];","'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n\tvalue: true\n});\nvar lib = {\n\tinit: function init(win) {\n\t\tvar doc = win.document,\n\t\t nav = win.navigator,\n\t\t userAgent = nav.userAgent,\n\t\t DIV = 'DIV',\n\t\t ceil = Math.ceil,\n\t\t floor = Math.floor,\n\t\t containerInstanceCount = 0,\n\t\t clsNameSpace = 'fusioncharts-smartlabel-',\n\t\t containerClass = clsNameSpace + 'container',\n\t\t classNameWithTag = clsNameSpace + 'tag',\n\t\t classNameWithTagBR = clsNameSpace + 'br';\n\n\t\tlib = {\n\t\t\twin: win,\n\n\t\t\tcontainerClass: containerClass,\n\n\t\t\tclassNameWithTag: classNameWithTag,\n\n\t\t\tclassNameWithTagBR: classNameWithTagBR,\n\n\t\t\tmaxDefaultCacheLimit: 500,\n\n\t\t\tclassNameReg: new RegExp('\\b' + classNameWithTag + '\\b'),\n\n\t\t\tclassNameBrReg: new RegExp('\\b' + classNameWithTagBR + '\\b'),\n\n\t\t\tspanAdditionRegx: /(<[^<\\>]+?\\>)|(&(?:[a-z]+|#[0-9]+);|.)/ig,\n\n\t\t\tspanAdditionReplacer: '$1$2',\n\n\t\t\tspanRemovalRegx: new RegExp('\\\\]+?' + classNameWithTag + '[^\\\\>]{0,}\\\\>(.*?)\\\\<\\\\/span\\\\>', 'ig'),\n\n\t\t\txmlTagRegEx: new RegExp('<[^>][^<]*[^>]+>', 'i'),\n\n\t\t\tltgtRegex: /<|>/g,\n\n\t\t\tbrReplaceRegex: //ig,\n\n\t\t\ttestStrAvg: 'WgI',\n\n\t\t\t// This style is applied over the parent smartlabel container. The container is kept hidden from the viewport\n\t\t\tparentContainerStyle: {\n\t\t\t\tposition: 'absolute',\n\t\t\t\ttop: '-9999em',\n\t\t\t\twhiteSpace: 'nowrap',\n\t\t\t\tpadding: '0px',\n\t\t\t\twidth: '1px',\n\t\t\t\theight: '1px',\n\t\t\t\toverflow: 'hidden'\n\t\t\t},\n\n\t\t\t// All the style which might affect the text metrics\n\t\t\tsupportedStyle: {\n\t\t\t\tfont: 'font',\n\t\t\t\tfontFamily: 'font-family',\n\t\t\t\t'font-family': 'font-family',\n\t\t\t\tfontWeight: 'font-weight',\n\t\t\t\t'font-weight': 'font-weight',\n\t\t\t\tfontSize: 'font-size',\n\t\t\t\t'font-size': 'font-size',\n\t\t\t\tlineHeight: 'line-height',\n\t\t\t\t'line-height': 'line-height',\n\t\t\t\tfontStyle: 'font-style',\n\t\t\t\t'font-style': 'font-style'\n\t\t\t},\n\n\t\t\t// Get the support list for html the document where the text calcution is to be done.\n\t\t\tgetDocumentSupport: function getDocumentSupport() {\n\t\t\t\tvar childRetriverFn, childRetriverString, noClassTesting;\n\n\t\t\t\tif (doc.getElementsByClassName) {\n\t\t\t\t\tchildRetriverFn = 'getElementsByClassName';\n\t\t\t\t\tchildRetriverString = classNameWithTag;\n\t\t\t\t\tnoClassTesting = true;\n\t\t\t\t} else {\n\t\t\t\t\tchildRetriverFn = 'getElementsByTagName';\n\t\t\t\t\tchildRetriverString = 'span';\n\t\t\t\t\tnoClassTesting = false;\n\t\t\t\t}\n\n\t\t\t\treturn {\n\t\t\t\t\tisIE: /msie/i.test(userAgent) && !win.opera,\n\t\t\t\t\thasSVG: Boolean(win.SVGAngle || doc.implementation.hasFeature('http://www.w3.org/TR/SVG11/feature#BasicStructure', '1.1')),\n\t\t\t\t\tisHeadLess: new RegExp(' HtmlUnit').test(userAgent),\n\t\t\t\t\tisWebKit: new RegExp(' AppleWebKit/').test(userAgent),\n\t\t\t\t\tchildRetriverFn: childRetriverFn,\n\t\t\t\t\tchildRetriverString: childRetriverString,\n\t\t\t\t\tnoClassTesting: noClassTesting\n\t\t\t\t};\n\t\t\t},\n\n\t\t\t/*\n * Create a html div element and attach it with a parent. All the subsequent operations are performed\n * by upding this dom tree only.\n *\n * @param {HTMLElement} - The html element where the newly created div is to be attached. If not passed,\n * the new div is appended on the body.\n */\n\t\t\tcreateContainer: function createContainer(containerParent) {\n\t\t\t\tvar body, container;\n\n\t\t\t\tif (containerParent && (containerParent.offsetWidth || containerParent.offsetHeight)) {\n\t\t\t\t\tif (containerParent.appendChild) {\n\t\t\t\t\t\tcontainerParent.appendChild(container = doc.createElement(DIV));\n\t\t\t\t\t\tcontainer.className = containerClass;\n\t\t\t\t\t\tcontainer.setAttribute('aria-hidden', 'true');\n\t\t\t\t\t\tcontainer.setAttribute('role', 'presentation');\n\t\t\t\t\t\treturn container;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tbody = doc.getElementsByTagName('body')[0];\n\n\t\t\t\t\tif (body && body.appendChild) {\n\t\t\t\t\t\tcontainer = doc.createElement(DIV);\n\t\t\t\t\t\tcontainer.className = containerClass;\n\t\t\t\t\t\tcontainer.setAttribute('aria-hidden', 'true');\n\t\t\t\t\t\tcontainer.setAttribute('role', 'presentation');\n\t\t\t\t\t\tcontainerInstanceCount += 1;\n\t\t\t\t\t\tbody.appendChild(container);\n\t\t\t\t\t\treturn container;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// Finds a approximate position where the text is to be broken\n\t\t\tgetNearestBreakIndex: function getNearestBreakIndex(text, maxWidth, sl) {\n\t\t\t\tif (!text || !text.length) {\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\n\t\t\t\tvar difference,\n\t\t\t\t getWidth = sl._getWidthFn(),\n\t\t\t\t charLen = 0,\n\t\t\t\t increment = 0,\n\t\t\t\t oriWidth = getWidth(text),\n\t\t\t\t avgWidth = oriWidth / text.length;\n\n\t\t\t\tdifference = maxWidth;\n\t\t\t\tcharLen = ceil(maxWidth / avgWidth);\n\n\t\t\t\tif (oriWidth < maxWidth) {\n\t\t\t\t\treturn text.length - 1;\n\t\t\t\t}\n\n\t\t\t\tif (charLen > text.length) {\n\t\t\t\t\tdifference = maxWidth - oriWidth;\n\t\t\t\t\tcharLen = text.length;\n\t\t\t\t}\n\n\t\t\t\twhile (difference > 0) {\n\t\t\t\t\tdifference = maxWidth - getWidth(text.substr(0, charLen));\n\t\t\t\t\tincrement = floor(difference / avgWidth);\n\t\t\t\t\tif (increment) {\n\t\t\t\t\t\tcharLen += increment;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn charLen;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\twhile (difference < 0) {\n\t\t\t\t\tdifference = maxWidth - getWidth(text.substr(0, charLen));\n\t\t\t\t\tincrement = floor(difference / avgWidth);\n\t\t\t\t\tif (increment) {\n\t\t\t\t\t\tcharLen += increment;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn charLen;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn charLen;\n\t\t\t},\n\n\t\t\t/*\n * Determine lineheight of a text for a given style. It adds propery lineHeight to the style passed\n *\n * @param {Object} - The style based on which the text's metric needs to be calculated. The calculation happens\n * based on fontSize property, if its not present a default font size is assumed.\n *\n * @return {Object} - The style that was passed with lineHeight as a named propery set on the object.\n */\n\t\t\tsetLineHeight: function setLineHeight(styleObj) {\n\t\t\t\tvar fSize = styleObj.fontSize = styleObj.fontSize || '12px';\n\t\t\t\tstyleObj.lineHeight = styleObj.lineHeight || styleObj['line-height'] || parseInt(fSize, 10) * 1.2 + 'px';\n\t\t\t\treturn styleObj;\n\t\t\t}\n\t\t};\n\n\t\treturn lib;\n\t}\n};\n\nexports['default'] = lib;\nmodule.exports = exports['default'];","const Muze = require('./muze');\n\nmodule.exports = Muze.default ? Muze.default : Muze;\n","'use strict';\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _lib = require('./lib');\n\nvar _lib2 = _interopRequireDefault(_lib);\n\nvar slLib = _lib2['default'].init(typeof window !== \"undefined\" ? window : undefined),\n doc = slLib.win.document,\n documentSupport = slLib.getDocumentSupport(),\n SVG_BBOX_CORRECTION = documentSupport.isWebKit ? 0 : 4.5;\n\nfunction ContainerManager(parentContainer, isBrowserLess, maxContainers) {\n var svg;\n\n maxContainers = maxContainers > 5 ? maxContainers : 5;\n maxContainers = maxContainers < 20 ? maxContainers : 20;\n\n this.maxContainers = maxContainers;\n this.first = null;\n this.last = null;\n this.containers = {};\n this.length = 0;\n this.rootNode = parentContainer;\n\n if (isBrowserLess) {\n svg = doc.createElementNS('http://www.w3.org/2000/svg', 'svg');\n svg.setAttributeNS('http://www.w3.org/2000/svg', 'xlink', 'http://www.w3.org/1999/xlink');\n svg.setAttributeNS('http://www.w3.org/2000/svg', 'height', '0');\n svg.setAttributeNS('http://www.w3.org/2000/svg', 'width', '0');\n this.svgRoot = svg;\n this.rootNode.appendChild(svg);\n }\n}\n\nContainerManager.prototype.get = function (style) {\n var diff,\n key,\n containerObj,\n containers = this.containers,\n len = this.length,\n max = this.maxContainers,\n keyStr = '';\n\n for (key in slLib.supportedStyle) {\n if (style[key] !== undefined) {\n keyStr += slLib.supportedStyle[key] + ':' + style[key] + ';';\n }\n }\n\n if (!keyStr) {\n return false;\n }\n\n if (containerObj = containers[keyStr]) {\n if (this.first !== containerObj) {\n containerObj.prev && (containerObj.prev.next = containerObj.next);\n containerObj.next && (containerObj.next.prev = containerObj.prev);\n containerObj.next = this.first;\n containerObj.next.prev = containerObj;\n this.last === containerObj && (this.last = containerObj.prev);\n containerObj.prev = null;\n this.first = containerObj;\n }\n } else {\n if (len >= max) {\n diff = len - max + 1;\n // +1 is to remove an extra entry to make space for the new container to be added.\n while (diff--) {\n this.removeContainer(this.last);\n }\n }\n containerObj = this.addContainer(keyStr);\n }\n\n return containerObj;\n};\n\nContainerManager.prototype.addContainer = function (keyStr) {\n var node, container;\n\n this.containers[keyStr] = container = {\n next: null,\n prev: null,\n node: null,\n ellipsesWidth: 0,\n lineHeight: 0,\n dotWidth: 0,\n avgCharWidth: 4,\n keyStr: keyStr,\n charCache: {}\n };\n\n // Since the container objects are arranged from most recent to least recent order, we need to add the new\n // object at the beginning of the list.\n container.next = this.first;\n container.next && (container.next.prev = container);\n this.first = container;\n if (!this.last) {\n this.last = container;\n }\n this.length += 1;\n\n node = container.node = doc.createElement('div');\n this.rootNode.appendChild(node);\n\n if (documentSupport.isIE && !documentSupport.hasSVG) {\n node.style.setAttribute('cssText', keyStr);\n } else {\n node.setAttribute('style', keyStr);\n }\n\n node.setAttribute('aria-hidden', 'true');\n node.setAttribute('role', 'presentation');\n node.style.display = 'inline-block';\n\n node.innerHTML = slLib.testStrAvg; // A test string.\n container.lineHeight = node.offsetHeight;\n container.avgCharWidth = node.offsetWidth / 3;\n\n if (documentSupport.isBrowserLess) {\n node = container.svgText = doc.createElementNS('http://www.w3.org/2000/svg', 'text');\n node.setAttribute('style', keyStr);\n this.svgRoot.appendChild(node);\n\n node.textContent = slLib.testStrAvg; // A test string.\n container.lineHeight = node.getBBox().height;\n container.avgCharWidth = (node.getBBox().width - SVG_BBOX_CORRECTION) / 3;\n\n node.textContent = '...';\n container.ellipsesWidth = node.getBBox().width - SVG_BBOX_CORRECTION;\n node.textContent = '.';\n container.dotWidth = node.getBBox().width - SVG_BBOX_CORRECTION;\n } else {\n node.innerHTML = '...';\n container.ellipsesWidth = node.offsetWidth;\n node.innerHTML = '.';\n container.dotWidth = node.offsetWidth;\n node.innerHTML = '';\n }\n\n return container;\n};\n\nContainerManager.prototype.removeContainer = function (cObj) {\n var keyStr = cObj.keyStr;\n\n if (!keyStr || !this.length || !cObj) {\n return;\n }\n this.length -= 1;\n\n cObj.prev && (cObj.prev.next = cObj.next);\n cObj.next && (cObj.next.prev = cObj.prev);\n this.first === cObj && (this.first = cObj.next);\n this.last === cObj && (this.last = cObj.prev);\n\n cObj.node.parentNode.removeChild(cObj.node);\n\n delete this.containers[keyStr];\n};\n\nContainerManager.prototype.dispose = function () {\n var key,\n containers = this.containers;\n\n this.maxContainers = null;\n for (key in containers) {\n this.removeContainer(containers[key]);\n }\n\n this.rootNode.parentNode.removeChild(this.rootNode);\n\n this.rootNode = null;\n this.first = null;\n this.last = null;\n};\n\nmodule.exports = ContainerManager;","export default function(a, b) {\n return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","import ascending from \"./ascending\";\n\nexport default function(compare) {\n if (compare.length === 1) compare = ascendingComparator(compare);\n return {\n left: function(a, x, lo, hi) {\n if (lo == null) lo = 0;\n if (hi == null) hi = a.length;\n while (lo < hi) {\n var mid = lo + hi >>> 1;\n if (compare(a[mid], x) < 0) lo = mid + 1;\n else hi = mid;\n }\n return lo;\n },\n right: function(a, x, lo, hi) {\n if (lo == null) lo = 0;\n if (hi == null) hi = a.length;\n while (lo < hi) {\n var mid = lo + hi >>> 1;\n if (compare(a[mid], x) > 0) hi = mid;\n else lo = mid + 1;\n }\n return lo;\n }\n };\n}\n\nfunction ascendingComparator(f) {\n return function(d, x) {\n return ascending(f(d), x);\n };\n}\n","import ascending from \"./ascending\";\nimport bisector from \"./bisector\";\n\nvar ascendingBisect = bisector(ascending);\nexport var bisectRight = ascendingBisect.right;\nexport var bisectLeft = ascendingBisect.left;\nexport default bisectRight;\n","import {pair} from \"./pairs\";\n\nexport default function(values0, values1, reduce) {\n var n0 = values0.length,\n n1 = values1.length,\n values = new Array(n0 * n1),\n i0,\n i1,\n i,\n value0;\n\n if (reduce == null) reduce = pair;\n\n for (i0 = i = 0; i0 < n0; ++i0) {\n for (value0 = values0[i0], i1 = 0; i1 < n1; ++i1, ++i) {\n values[i] = reduce(value0, values1[i1]);\n }\n }\n\n return values;\n}\n","export default function(x) {\n return x === null ? NaN : +x;\n}\n","var array = Array.prototype;\n\nexport var slice = array.slice;\nexport var map = array.map;\n","export default function(start, stop, step) {\n start = +start, stop = +stop, step = (n = arguments.length) < 2 ? (stop = start, start = 0, 1) : n < 3 ? 1 : +step;\n\n var i = -1,\n n = Math.max(0, Math.ceil((stop - start) / step)) | 0,\n range = new Array(n);\n\n while (++i < n) {\n range[i] = start + i * step;\n }\n\n return range;\n}\n","var e10 = Math.sqrt(50),\n e5 = Math.sqrt(10),\n e2 = Math.sqrt(2);\n\nexport default function(start, stop, count) {\n var reverse,\n i = -1,\n n,\n ticks,\n step;\n\n stop = +stop, start = +start, count = +count;\n if (start === stop && count > 0) return [start];\n if (reverse = stop < start) n = start, start = stop, stop = n;\n if ((step = tickIncrement(start, stop, count)) === 0 || !isFinite(step)) return [];\n\n if (step > 0) {\n start = Math.ceil(start / step);\n stop = Math.floor(stop / step);\n ticks = new Array(n = Math.ceil(stop - start + 1));\n while (++i < n) ticks[i] = (start + i) * step;\n } else {\n start = Math.floor(start * step);\n stop = Math.ceil(stop * step);\n ticks = new Array(n = Math.ceil(start - stop + 1));\n while (++i < n) ticks[i] = (start - i) / step;\n }\n\n if (reverse) ticks.reverse();\n\n return ticks;\n}\n\nexport function tickIncrement(start, stop, count) {\n var step = (stop - start) / Math.max(0, count),\n power = Math.floor(Math.log(step) / Math.LN10),\n error = step / Math.pow(10, power);\n return power >= 0\n ? (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1) * Math.pow(10, power)\n : -Math.pow(10, -power) / (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1);\n}\n\nexport function tickStep(start, stop, count) {\n var step0 = Math.abs(stop - start) / Math.max(0, count),\n step1 = Math.pow(10, Math.floor(Math.log(step0) / Math.LN10)),\n error = step0 / step1;\n if (error >= e10) step1 *= 10;\n else if (error >= e5) step1 *= 5;\n else if (error >= e2) step1 *= 2;\n return stop < start ? -step1 : step1;\n}\n","export default function(values) {\n return Math.ceil(Math.log(values.length) / Math.LN2) + 1;\n}\n","import number from \"./number\";\n\nexport default function(values, p, valueof) {\n if (valueof == null) valueof = number;\n if (!(n = values.length)) return;\n if ((p = +p) <= 0 || n < 2) return +valueof(values[0], 0, values);\n if (p >= 1) return +valueof(values[n - 1], n - 1, values);\n var n,\n i = (n - 1) * p,\n i0 = Math.floor(i),\n value0 = +valueof(values[i0], i0, values),\n value1 = +valueof(values[i0 + 1], i0 + 1, values);\n return value0 + (value1 - value0) * (i - i0);\n}\n","export var prefix = \"$\";\n\nfunction Map() {}\n\nMap.prototype = map.prototype = {\n constructor: Map,\n has: function(key) {\n return (prefix + key) in this;\n },\n get: function(key) {\n return this[prefix + key];\n },\n set: function(key, value) {\n this[prefix + key] = value;\n return this;\n },\n remove: function(key) {\n var property = prefix + key;\n return property in this && delete this[property];\n },\n clear: function() {\n for (var property in this) if (property[0] === prefix) delete this[property];\n },\n keys: function() {\n var keys = [];\n for (var property in this) if (property[0] === prefix) keys.push(property.slice(1));\n return keys;\n },\n values: function() {\n var values = [];\n for (var property in this) if (property[0] === prefix) values.push(this[property]);\n return values;\n },\n entries: function() {\n var entries = [];\n for (var property in this) if (property[0] === prefix) entries.push({key: property.slice(1), value: this[property]});\n return entries;\n },\n size: function() {\n var size = 0;\n for (var property in this) if (property[0] === prefix) ++size;\n return size;\n },\n empty: function() {\n for (var property in this) if (property[0] === prefix) return false;\n return true;\n },\n each: function(f) {\n for (var property in this) if (property[0] === prefix) f(this[property], property.slice(1), this);\n }\n};\n\nfunction map(object, f) {\n var map = new Map;\n\n // Copy constructor.\n if (object instanceof Map) object.each(function(value, key) { map.set(key, value); });\n\n // Index array by numeric index or specified key function.\n else if (Array.isArray(object)) {\n var i = -1,\n n = object.length,\n o;\n\n if (f == null) while (++i < n) map.set(i, object[i]);\n else while (++i < n) map.set(f(o = object[i], i, object), o);\n }\n\n // Convert object to map.\n else if (object) for (var key in object) map.set(key, object[key]);\n\n return map;\n}\n\nexport default map;\n","import map from \"./map\";\n\nexport default function() {\n var keys = [],\n sortKeys = [],\n sortValues,\n rollup,\n nest;\n\n function apply(array, depth, createResult, setResult) {\n if (depth >= keys.length) {\n if (sortValues != null) array.sort(sortValues);\n return rollup != null ? rollup(array) : array;\n }\n\n var i = -1,\n n = array.length,\n key = keys[depth++],\n keyValue,\n value,\n valuesByKey = map(),\n values,\n result = createResult();\n\n while (++i < n) {\n if (values = valuesByKey.get(keyValue = key(value = array[i]) + \"\")) {\n values.push(value);\n } else {\n valuesByKey.set(keyValue, [value]);\n }\n }\n\n valuesByKey.each(function(values, key) {\n setResult(result, key, apply(values, depth, createResult, setResult));\n });\n\n return result;\n }\n\n function entries(map, depth) {\n if (++depth > keys.length) return map;\n var array, sortKey = sortKeys[depth - 1];\n if (rollup != null && depth >= keys.length) array = map.entries();\n else array = [], map.each(function(v, k) { array.push({key: k, values: entries(v, depth)}); });\n return sortKey != null ? array.sort(function(a, b) { return sortKey(a.key, b.key); }) : array;\n }\n\n return nest = {\n object: function(array) { return apply(array, 0, createObject, setObject); },\n map: function(array) { return apply(array, 0, createMap, setMap); },\n entries: function(array) { return entries(apply(array, 0, createMap, setMap), 0); },\n key: function(d) { keys.push(d); return nest; },\n sortKeys: function(order) { sortKeys[keys.length - 1] = order; return nest; },\n sortValues: function(order) { sortValues = order; return nest; },\n rollup: function(f) { rollup = f; return nest; }\n };\n}\n\nfunction createObject() {\n return {};\n}\n\nfunction setObject(object, key, value) {\n object[key] = value;\n}\n\nfunction createMap() {\n return map();\n}\n\nfunction setMap(map, key, value) {\n map.set(key, value);\n}\n","import {default as map, prefix} from \"./map\";\n\nfunction Set() {}\n\nvar proto = map.prototype;\n\nSet.prototype = set.prototype = {\n constructor: Set,\n has: proto.has,\n add: function(value) {\n value += \"\";\n this[prefix + value] = value;\n return this;\n },\n remove: proto.remove,\n clear: proto.clear,\n values: proto.keys,\n size: proto.size,\n empty: proto.empty,\n each: proto.each\n};\n\nfunction set(object, f) {\n var set = new Set;\n\n // Copy constructor.\n if (object instanceof Set) object.each(function(value) { set.add(value); });\n\n // Otherwise, assume it’s an array.\n else if (object) {\n var i = -1, n = object.length;\n if (f == null) while (++i < n) set.add(object[i]);\n else while (++i < n) set.add(f(object[i], i, object));\n }\n\n return set;\n}\n\nexport default set;\n","var array = Array.prototype;\n\nexport var map = array.map;\nexport var slice = array.slice;\n","import {map} from \"d3-collection\";\nimport {slice} from \"./array\";\n\nexport var implicit = {name: \"implicit\"};\n\nexport default function ordinal(range) {\n var index = map(),\n domain = [],\n unknown = implicit;\n\n range = range == null ? [] : slice.call(range);\n\n function scale(d) {\n var key = d + \"\", i = index.get(key);\n if (!i) {\n if (unknown !== implicit) return unknown;\n index.set(key, i = domain.push(d));\n }\n return range[(i - 1) % range.length];\n }\n\n scale.domain = function(_) {\n if (!arguments.length) return domain.slice();\n domain = [], index = map();\n var i = -1, n = _.length, d, key;\n while (++i < n) if (!index.has(key = (d = _[i]) + \"\")) index.set(key, domain.push(d));\n return scale;\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = slice.call(_), scale) : range.slice();\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n scale.copy = function() {\n return ordinal()\n .domain(domain)\n .range(range)\n .unknown(unknown);\n };\n\n return scale;\n}\n","import {range as sequence} from \"d3-array\";\nimport ordinal from \"./ordinal\";\n\nexport default function band() {\n var scale = ordinal().unknown(undefined),\n domain = scale.domain,\n ordinalRange = scale.range,\n range = [0, 1],\n step,\n bandwidth,\n round = false,\n paddingInner = 0,\n paddingOuter = 0,\n align = 0.5;\n\n delete scale.unknown;\n function rescale() {\n var n = domain().length,\n reverse = range[1] < range[0],\n start = range[reverse - 0],\n stop = range[1 - reverse];\n step = (stop - start) / Math.max(1, n - paddingInner + paddingOuter * 2);\n if (round) step = Math.floor(step);\n start += (stop - start - step * (n - paddingInner)) * align;\n bandwidth = step * (1 - paddingInner);\n if (round) start = Math.round(start), bandwidth = Math.round(bandwidth);\n var values = sequence(n).map(function(i) { return start + step * i; });\n return ordinalRange(reverse ? values.reverse() : values);\n }\n\n scale.domain = function(_) {\n return arguments.length ? (domain(_), rescale()) : domain();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = [+_[0], +_[1]], rescale()) : range.slice();\n };\n\n scale.rangeRound = function(_) {\n return range = [+_[0], +_[1]], round = true, rescale();\n };\n\n scale.bandwidth = function() {\n return bandwidth;\n };\n\n scale.step = function() {\n return step;\n };\n\n scale.round = function(_) {\n return arguments.length ? (round = !!_, rescale()) : round;\n };\n\n scale.padding = function(_) {\n return arguments.length ? (paddingInner = paddingOuter = Math.max(0, Math.min(1, _)), rescale()) : paddingInner;\n };\n\n scale.paddingInner = function(_) {\n return arguments.length ? (paddingInner = Math.max(0, Math.min(1, _)), rescale()) : paddingInner;\n };\n\n scale.paddingOuter = function(_) {\n return arguments.length ? (paddingOuter = Math.max(0, Math.min(1, _)), rescale()) : paddingOuter;\n };\n\n scale.align = function(_) {\n return arguments.length ? (align = Math.max(0, Math.min(1, _)), rescale()) : align;\n };\n\n scale.copy = function() {\n return band()\n .domain(domain())\n .range(range)\n .round(round)\n .paddingInner(paddingInner)\n .paddingOuter(paddingOuter)\n .align(align);\n };\n\n scale.invertExtent = function(r0, r1) {\n var lo = +r0,\n hi = arguments.length > 1 ? +r1 : lo,\n reverse = range[1] < range[0],\n values = reverse ? ordinalRange().reverse() : ordinalRange(),\n n = values.length - 1, a, b, t,\n hiIndex;\n values.push(values[n] + this.step());\n // order range inputs, bail if outside of scale range\n if (hi < lo) t = lo, lo = hi, hi = t;\n if (hi < values[0] || lo > range[1-reverse]) return undefined;\n\n // binary search to index into scale range\n a = Math.max(0, getClosestIndexOf(values, lo));\n hiIndex = getClosestIndexOf(values, hi);\n b = lo===hi ? a : Math.max(a, hiIndex - 1);\n\n // increment index a if lo is within padding gap\n // if (lo - values[a] > bandwidth + 1e-10) ++a;\n\n if (reverse) t = a, a = n - b, b = n - t; // map + swap\n return (a > b) ? undefined : domain().slice(a, b+1);\n };\n\n scale.invert = function (r0, r1) {\n var lo = +r0,\n hi = arguments.length > 1 ? +r1 : lo,\n reverse = range[1] < range[0],\n values = reverse ? ordinalRange().reverse() : ordinalRange(),\n n = values.length - 1,\n a,\n t;\n\n // order range inputs, bail if outside of scale range\n if (hi < lo) t = lo, lo = hi, hi = t;\n if (hi < values[0] || lo > range[1-reverse]) return undefined;\n\n // binary search to index into scale range\n a = Math.max(0, getClosestIndexOf(values, lo, 'left'));\n\n // increment index a if lo is within padding gap\n // if (lo - values[a] > bandwidth + 1e-10) ++a;\n\n return domain()[reverse ? n - a : a];\n }\n return rescale();\n}\n\nfunction pointish(scale) {\n var copy = scale.copy;\n\n scale.padding = scale.paddingOuter;\n delete scale.paddingInner;\n delete scale.paddingOuter;\n\n scale.copy = function() {\n return pointish(copy());\n };\n\n return scale;\n}\n\nexport function point() {\n return pointish(band().paddingInner(1));\n}\n\nfunction getClosestIndexOf (arr, value, side) {\n var low = 0,\n arrLen = arr.length,\n high = arrLen - 1,\n highVal,\n mid,\n d1,\n d2;\n\n while (low < high) {\n mid = Math.floor((low + high) / 2);\n d1 = Math.abs(arr[mid] - value);\n d2 = Math.abs(arr[mid + 1] - value);\n\n if (d2 <= d1) {\n low = mid + 1;\n }\n else {\n high = mid;\n }\n }\n\n if (!side) {\n return high;\n }\n\n highVal = arr[high];\n if (highVal === value) {\n return high;\n } else if (highVal > value) {\n if (high === 0) { return high; }\n return side === 'left'? high - 1 : high;\n } else {\n if (high === arr.length - 1) { return high; }\n return side === 'left'? high : high + 1;\n }\n}","export default function(constructor, factory, prototype) {\n constructor.prototype = factory.prototype = prototype;\n prototype.constructor = constructor;\n}\n\nexport function extend(parent, definition) {\n var prototype = Object.create(parent.prototype);\n for (var key in definition) prototype[key] = definition[key];\n return prototype;\n}\n","import define, {extend} from \"./define\";\n\nexport function Color() {}\n\nexport var darker = 0.7;\nexport var brighter = 1 / darker;\n\nvar reI = \"\\\\s*([+-]?\\\\d+)\\\\s*\",\n reN = \"\\\\s*([+-]?\\\\d*\\\\.?\\\\d+(?:[eE][+-]?\\\\d+)?)\\\\s*\",\n reP = \"\\\\s*([+-]?\\\\d*\\\\.?\\\\d+(?:[eE][+-]?\\\\d+)?)%\\\\s*\",\n reHex3 = /^#([0-9a-f]{3})$/,\n reHex6 = /^#([0-9a-f]{6})$/,\n reRgbInteger = new RegExp(\"^rgb\\\\(\" + [reI, reI, reI] + \"\\\\)$\"),\n reRgbPercent = new RegExp(\"^rgb\\\\(\" + [reP, reP, reP] + \"\\\\)$\"),\n reRgbaInteger = new RegExp(\"^rgba\\\\(\" + [reI, reI, reI, reN] + \"\\\\)$\"),\n reRgbaPercent = new RegExp(\"^rgba\\\\(\" + [reP, reP, reP, reN] + \"\\\\)$\"),\n reHslPercent = new RegExp(\"^hsl\\\\(\" + [reN, reP, reP] + \"\\\\)$\"),\n reHslaPercent = new RegExp(\"^hsla\\\\(\" + [reN, reP, reP, reN] + \"\\\\)$\");\n\nvar 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\ndefine(Color, color, {\n displayable: function() {\n return this.rgb().displayable();\n },\n hex: function() {\n return this.rgb().hex();\n },\n toString: function() {\n return this.rgb() + \"\";\n }\n});\n\nexport default function color(format) {\n var m;\n format = (format + \"\").trim().toLowerCase();\n return (m = reHex3.exec(format)) ? (m = parseInt(m[1], 16), new Rgb((m >> 8 & 0xf) | (m >> 4 & 0x0f0), (m >> 4 & 0xf) | (m & 0xf0), ((m & 0xf) << 4) | (m & 0xf), 1)) // #f00\n : (m = reHex6.exec(format)) ? rgbn(parseInt(m[1], 16)) // #ff0000\n : (m = reRgbInteger.exec(format)) ? new Rgb(m[1], m[2], m[3], 1) // rgb(255, 0, 0)\n : (m = reRgbPercent.exec(format)) ? new Rgb(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, 1) // rgb(100%, 0%, 0%)\n : (m = reRgbaInteger.exec(format)) ? rgba(m[1], m[2], m[3], m[4]) // rgba(255, 0, 0, 1)\n : (m = reRgbaPercent.exec(format)) ? rgba(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, m[4]) // rgb(100%, 0%, 0%, 1)\n : (m = reHslPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, 1) // hsl(120, 50%, 50%)\n : (m = reHslaPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, m[4]) // hsla(120, 50%, 50%, 1)\n : named.hasOwnProperty(format) ? rgbn(named[format])\n : format === \"transparent\" ? new Rgb(NaN, NaN, NaN, 0)\n : null;\n}\n\nfunction rgbn(n) {\n return new Rgb(n >> 16 & 0xff, n >> 8 & 0xff, n & 0xff, 1);\n}\n\nfunction rgba(r, g, b, a) {\n if (a <= 0) r = g = b = NaN;\n return new Rgb(r, g, b, a);\n}\n\nexport function rgbConvert(o) {\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Rgb;\n o = o.rgb();\n return new Rgb(o.r, o.g, o.b, o.opacity);\n}\n\nexport function rgb(r, g, b, opacity) {\n return arguments.length === 1 ? rgbConvert(r) : new Rgb(r, g, b, opacity == null ? 1 : opacity);\n}\n\nexport function Rgb(r, g, b, opacity) {\n this.r = +r;\n this.g = +g;\n this.b = +b;\n this.opacity = +opacity;\n}\n\ndefine(Rgb, rgb, extend(Color, {\n 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, this.opacity);\n },\n 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, this.opacity);\n },\n rgb: function() {\n return this;\n },\n 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 && (0 <= this.opacity && this.opacity <= 1);\n },\n hex: function() {\n return \"#\" + hex(this.r) + hex(this.g) + hex(this.b);\n },\n toString: function() {\n var a = this.opacity; a = isNaN(a) ? 1 : Math.max(0, Math.min(1, a));\n return (a === 1 ? \"rgb(\" : \"rgba(\")\n + Math.max(0, Math.min(255, Math.round(this.r) || 0)) + \", \"\n + Math.max(0, Math.min(255, Math.round(this.g) || 0)) + \", \"\n + Math.max(0, Math.min(255, Math.round(this.b) || 0))\n + (a === 1 ? \")\" : \", \" + a + \")\");\n }\n}));\n\nfunction hex(value) {\n value = Math.max(0, Math.min(255, Math.round(value) || 0));\n return (value < 16 ? \"0\" : \"\") + value.toString(16);\n}\n\nfunction hsla(h, s, l, a) {\n if (a <= 0) h = s = l = NaN;\n else if (l <= 0 || l >= 1) h = s = NaN;\n else if (s <= 0) h = NaN;\n return new Hsl(h, s, l, a);\n}\n\nexport function hslConvert(o) {\n if (o instanceof Hsl) return new Hsl(o.h, o.s, o.l, o.opacity);\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Hsl;\n if (o instanceof Hsl) return o;\n o = o.rgb();\n var r = o.r / 255,\n g = o.g / 255,\n b = o.b / 255,\n min = Math.min(r, g, b),\n max = Math.max(r, g, b),\n h = NaN,\n s = max - min,\n l = (max + min) / 2;\n if (s) {\n if (r === max) h = (g - b) / s + (g < b) * 6;\n else if (g === max) h = (b - r) / s + 2;\n else h = (r - g) / s + 4;\n s /= l < 0.5 ? max + min : 2 - max - min;\n h *= 60;\n } else {\n s = l > 0 && l < 1 ? 0 : h;\n }\n return new Hsl(h, s, l, o.opacity);\n}\n\nexport function hsl(h, s, l, opacity) {\n return arguments.length === 1 ? hslConvert(h) : new Hsl(h, s, l, opacity == null ? 1 : opacity);\n}\n\nfunction Hsl(h, s, l, opacity) {\n this.h = +h;\n this.s = +s;\n this.l = +l;\n this.opacity = +opacity;\n}\n\ndefine(Hsl, hsl, extend(Color, {\n brighter: function(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n darker: function(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n 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 < 0.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 this.opacity\n );\n },\n displayable: function() {\n return (0 <= this.s && this.s <= 1 || isNaN(this.s))\n && (0 <= this.l && this.l <= 1)\n && (0 <= this.opacity && this.opacity <= 1);\n }\n}));\n\n/* From FvD 13.37, CSS Color Module Level 3 */\nfunction 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","export var deg2rad = Math.PI / 180;\nexport var rad2deg = 180 / Math.PI;\n","import define, {extend} from \"./define\";\nimport {Color, rgbConvert, Rgb} from \"./color\";\nimport {deg2rad, rad2deg} from \"./math\";\n\n// https://beta.observablehq.com/@mbostock/lab-and-rgb\nvar K = 18,\n Xn = 0.96422,\n Yn = 1,\n Zn = 0.82521,\n t0 = 4 / 29,\n t1 = 6 / 29,\n t2 = 3 * t1 * t1,\n t3 = t1 * t1 * t1;\n\nfunction labConvert(o) {\n if (o instanceof Lab) return new Lab(o.l, o.a, o.b, o.opacity);\n if (o instanceof Hcl) {\n if (isNaN(o.h)) return new Lab(o.l, 0, 0, o.opacity);\n var h = o.h * deg2rad;\n return new Lab(o.l, Math.cos(h) * o.c, Math.sin(h) * o.c, o.opacity);\n }\n if (!(o instanceof Rgb)) o = rgbConvert(o);\n var r = rgb2lrgb(o.r),\n g = rgb2lrgb(o.g),\n b = rgb2lrgb(o.b),\n y = xyz2lab((0.2225045 * r + 0.7168786 * g + 0.0606169 * b) / Yn), x, z;\n if (r === g && g === b) x = z = y; else {\n x = xyz2lab((0.4360747 * r + 0.3850649 * g + 0.1430804 * b) / Xn);\n z = xyz2lab((0.0139322 * r + 0.0971045 * g + 0.7141733 * b) / Zn);\n }\n return new Lab(116 * y - 16, 500 * (x - y), 200 * (y - z), o.opacity);\n}\n\nexport function gray(l, opacity) {\n return new Lab(l, 0, 0, opacity == null ? 1 : opacity);\n}\n\nexport default function lab(l, a, b, opacity) {\n return arguments.length === 1 ? labConvert(l) : new Lab(l, a, b, opacity == null ? 1 : opacity);\n}\n\nexport function Lab(l, a, b, opacity) {\n this.l = +l;\n this.a = +a;\n this.b = +b;\n this.opacity = +opacity;\n}\n\ndefine(Lab, lab, extend(Color, {\n brighter: function(k) {\n return new Lab(this.l + K * (k == null ? 1 : k), this.a, this.b, this.opacity);\n },\n darker: function(k) {\n return new Lab(this.l - K * (k == null ? 1 : k), this.a, this.b, this.opacity);\n },\n 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 x = Xn * lab2xyz(x);\n y = Yn * lab2xyz(y);\n z = Zn * lab2xyz(z);\n return new Rgb(\n lrgb2rgb( 3.1338561 * x - 1.6168667 * y - 0.4906146 * z),\n lrgb2rgb(-0.9787684 * x + 1.9161415 * y + 0.0334540 * z),\n lrgb2rgb( 0.0719453 * x - 0.2289914 * y + 1.4052427 * z),\n this.opacity\n );\n }\n}));\n\nfunction xyz2lab(t) {\n return t > t3 ? Math.pow(t, 1 / 3) : t / t2 + t0;\n}\n\nfunction lab2xyz(t) {\n return t > t1 ? t * t * t : t2 * (t - t0);\n}\n\nfunction lrgb2rgb(x) {\n return 255 * (x <= 0.0031308 ? 12.92 * x : 1.055 * Math.pow(x, 1 / 2.4) - 0.055);\n}\n\nfunction rgb2lrgb(x) {\n return (x /= 255) <= 0.04045 ? x / 12.92 : Math.pow((x + 0.055) / 1.055, 2.4);\n}\n\nfunction hclConvert(o) {\n if (o instanceof Hcl) return new Hcl(o.h, o.c, o.l, o.opacity);\n if (!(o instanceof Lab)) o = labConvert(o);\n if (o.a === 0 && o.b === 0) return new Hcl(NaN, 0, o.l, o.opacity);\n var h = Math.atan2(o.b, o.a) * rad2deg;\n return new Hcl(h < 0 ? h + 360 : h, Math.sqrt(o.a * o.a + o.b * o.b), o.l, o.opacity);\n}\n\nexport function lch(l, c, h, opacity) {\n return arguments.length === 1 ? hclConvert(l) : new Hcl(h, c, l, opacity == null ? 1 : opacity);\n}\n\nexport function hcl(h, c, l, opacity) {\n return arguments.length === 1 ? hclConvert(h) : new Hcl(h, c, l, opacity == null ? 1 : opacity);\n}\n\nexport function Hcl(h, c, l, opacity) {\n this.h = +h;\n this.c = +c;\n this.l = +l;\n this.opacity = +opacity;\n}\n\ndefine(Hcl, hcl, extend(Color, {\n brighter: function(k) {\n return new Hcl(this.h, this.c, this.l + K * (k == null ? 1 : k), this.opacity);\n },\n darker: function(k) {\n return new Hcl(this.h, this.c, this.l - K * (k == null ? 1 : k), this.opacity);\n },\n rgb: function() {\n return labConvert(this).rgb();\n }\n}));\n","import define, {extend} from \"./define\";\nimport {Color, rgbConvert, Rgb, darker, brighter} from \"./color\";\nimport {deg2rad, rad2deg} from \"./math\";\n\nvar A = -0.14861,\n B = +1.78277,\n C = -0.29227,\n D = -0.90649,\n E = +1.97294,\n ED = E * D,\n EB = E * B,\n BC_DA = B * C - D * A;\n\nfunction cubehelixConvert(o) {\n if (o instanceof Cubehelix) return new Cubehelix(o.h, o.s, o.l, o.opacity);\n if (!(o instanceof Rgb)) o = rgbConvert(o);\n var r = o.r / 255,\n g = o.g / 255,\n b = o.b / 255,\n l = (BC_DA * b + ED * r - EB * g) / (BC_DA + ED - EB),\n bl = b - l,\n 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 return new Cubehelix(h < 0 ? h + 360 : h, s, l, o.opacity);\n}\n\nexport default function cubehelix(h, s, l, opacity) {\n return arguments.length === 1 ? cubehelixConvert(h) : new Cubehelix(h, s, l, opacity == null ? 1 : opacity);\n}\n\nexport function Cubehelix(h, s, l, opacity) {\n this.h = +h;\n this.s = +s;\n this.l = +l;\n this.opacity = +opacity;\n}\n\ndefine(Cubehelix, cubehelix, extend(Color, {\n brighter: function(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Cubehelix(this.h, this.s, this.l * k, this.opacity);\n },\n darker: function(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Cubehelix(this.h, this.s, this.l * k, this.opacity);\n },\n 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 this.opacity\n );\n }\n}));\n","export function basis(t1, v0, v1, v2, v3) {\n var t2 = t1 * t1, t3 = t2 * t1;\n return ((1 - 3 * t1 + 3 * t2 - t3) * v0\n + (4 - 6 * t2 + 3 * t3) * v1\n + (1 + 3 * t1 + 3 * t2 - 3 * t3) * v2\n + t3 * v3) / 6;\n}\n\nexport default function(values) {\n var n = values.length - 1;\n return function(t) {\n var i = t <= 0 ? (t = 0) : t >= 1 ? (t = 1, n - 1) : Math.floor(t * n),\n v1 = values[i],\n v2 = values[i + 1],\n v0 = i > 0 ? values[i - 1] : 2 * v1 - v2,\n v3 = i < n - 1 ? values[i + 2] : 2 * v2 - v1;\n return basis((t - i / n) * n, v0, v1, v2, v3);\n };\n}\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","import constant from \"./constant\";\n\nfunction linear(a, d) {\n return function(t) {\n return a + t * d;\n };\n}\n\nfunction exponential(a, b, y) {\n return a = Math.pow(a, y), b = Math.pow(b, y) - a, y = 1 / y, function(t) {\n return Math.pow(a + t * b, y);\n };\n}\n\nexport function hue(a, b) {\n var d = b - a;\n return d ? linear(a, d > 180 || d < -180 ? d - 360 * Math.round(d / 360) : d) : constant(isNaN(a) ? b : a);\n}\n\nexport function gamma(y) {\n return (y = +y) === 1 ? nogamma : function(a, b) {\n return b - a ? exponential(a, b, y) : constant(isNaN(a) ? b : a);\n };\n}\n\nexport default function nogamma(a, b) {\n var d = b - a;\n return d ? linear(a, d) : constant(isNaN(a) ? b : a);\n}\n","import {rgb as colorRgb} from \"d3-color\";\nimport basis from \"./basis\";\nimport basisClosed from \"./basisClosed\";\nimport nogamma, {gamma} from \"./color\";\n\nexport default (function rgbGamma(y) {\n var color = gamma(y);\n\n function rgb(start, end) {\n var r = color((start = colorRgb(start)).r, (end = colorRgb(end)).r),\n g = color(start.g, end.g),\n b = color(start.b, end.b),\n opacity = nogamma(start.opacity, end.opacity);\n return function(t) {\n start.r = r(t);\n start.g = g(t);\n start.b = b(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n\n rgb.gamma = rgbGamma;\n\n return rgb;\n})(1);\n\nfunction rgbSpline(spline) {\n return function(colors) {\n var n = colors.length,\n r = new Array(n),\n g = new Array(n),\n b = new Array(n),\n i, color;\n for (i = 0; i < n; ++i) {\n color = colorRgb(colors[i]);\n r[i] = color.r || 0;\n g[i] = color.g || 0;\n b[i] = color.b || 0;\n }\n r = spline(r);\n g = spline(g);\n b = spline(b);\n color.opacity = 1;\n return function(t) {\n color.r = r(t);\n color.g = g(t);\n color.b = b(t);\n return color + \"\";\n };\n };\n}\n\nexport var rgbBasis = rgbSpline(basis);\nexport var rgbBasisClosed = rgbSpline(basisClosed);\n","export default function(a, b) {\n return a = +a, b -= a, function(t) {\n return a + b * t;\n };\n}\n","import {basis} from \"./basis\";\n\nexport default function(values) {\n var n = values.length;\n return function(t) {\n var i = Math.floor(((t %= 1) < 0 ? ++t : t) * n),\n v0 = values[(i + n - 1) % n],\n v1 = values[i % n],\n v2 = values[(i + 1) % n],\n v3 = values[(i + 2) % n];\n return basis((t - i / n) * n, v0, v1, v2, v3);\n };\n}\n","import number from \"./number\";\n\nvar reA = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n reB = new RegExp(reA.source, \"g\");\n\nfunction zero(b) {\n return function() {\n return b;\n };\n}\n\nfunction one(b) {\n return function(t) {\n return b(t) + \"\";\n };\n}\n\nexport default function(a, b) {\n var bi = reA.lastIndex = reB.lastIndex = 0, // scan index for next number in b\n am, // current match in a\n bm, // current match in b\n bs, // string preceding current number in b, if any\n i = -1, // index in s\n s = [], // string constants and placeholders\n q = []; // number interpolators\n\n // Coerce inputs to strings.\n a = a + \"\", b = b + \"\";\n\n // Interpolate pairs of numbers in a & b.\n while ((am = reA.exec(a))\n && (bm = reB.exec(b))) {\n if ((bs = bm.index) > bi) { // a string precedes the next number in b\n bs = b.slice(bi, bs);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n if ((am = am[0]) === (bm = bm[0])) { // numbers in a & b match\n if (s[i]) s[i] += bm; // coalesce with previous string\n else s[++i] = bm;\n } else { // interpolate non-matching numbers\n s[++i] = null;\n q.push({i: i, x: number(am, bm)});\n }\n bi = reB.lastIndex;\n }\n\n // Add remains of b.\n if (bi < b.length) {\n bs = b.slice(bi);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n\n // Special optimization for only a single match.\n // Otherwise, interpolate each of the numbers and rejoin the string.\n return s.length < 2 ? (q[0]\n ? one(q[0].x)\n : zero(b))\n : (b = q.length, function(t) {\n for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t);\n return s.join(\"\");\n });\n}\n","import decompose, {identity} from \"./decompose\";\n\nvar cssNode,\n cssRoot,\n cssView,\n svgNode;\n\nexport function parseCss(value) {\n if (value === \"none\") return identity;\n if (!cssNode) cssNode = document.createElement(\"DIV\"), cssRoot = document.documentElement, cssView = document.defaultView;\n cssNode.style.transform = value;\n value = cssView.getComputedStyle(cssRoot.appendChild(cssNode), null).getPropertyValue(\"transform\");\n cssRoot.removeChild(cssNode);\n value = value.slice(7, -1).split(\",\");\n return decompose(+value[0], +value[1], +value[2], +value[3], +value[4], +value[5]);\n}\n\nexport function parseSvg(value) {\n if (value == null) return identity;\n if (!svgNode) svgNode = document.createElementNS(\"http://www.w3.org/2000/svg\", \"g\");\n svgNode.setAttribute(\"transform\", value);\n if (!(value = svgNode.transform.baseVal.consolidate())) return identity;\n value = value.matrix;\n return decompose(value.a, value.b, value.c, value.d, value.e, value.f);\n}\n","import {color} from \"d3-color\";\nimport rgb from \"./rgb\";\nimport array from \"./array\";\nimport date from \"./date\";\nimport number from \"./number\";\nimport object from \"./object\";\nimport string from \"./string\";\nimport constant from \"./constant\";\n\nexport default function(a, b) {\n var t = typeof b, c;\n return b == null || t === \"boolean\" ? constant(b)\n : (t === \"number\" ? number\n : t === \"string\" ? ((c = color(b)) ? (b = c, rgb) : string)\n : b instanceof color ? rgb\n : b instanceof Date ? date\n : Array.isArray(b) ? array\n : typeof b.valueOf !== \"function\" && typeof b.toString !== \"function\" || isNaN(b) ? object\n : number)(a, b);\n}\n","export default function(a, b) {\n var d = new Date;\n return a = +a, b -= a, function(t) {\n return d.setTime(a + b * t), d;\n };\n}\n","import value from \"./value\";\n\nexport default function(a, b) {\n var nb = b ? b.length : 0,\n na = a ? Math.min(nb, a.length) : 0,\n x = new Array(na),\n c = new Array(nb),\n i;\n\n for (i = 0; i < na; ++i) x[i] = value(a[i], b[i]);\n for (; i < nb; ++i) c[i] = b[i];\n\n return function(t) {\n for (i = 0; i < na; ++i) c[i] = x[i](t);\n return c;\n };\n}\n","import value from \"./value\";\n\nexport default function(a, b) {\n var i = {},\n c = {},\n k;\n\n if (a === null || typeof a !== \"object\") a = {};\n if (b === null || typeof b !== \"object\") b = {};\n\n for (k in b) {\n if (k in a) {\n i[k] = value(a[k], b[k]);\n } else {\n c[k] = b[k];\n }\n }\n\n return function(t) {\n for (k in i) c[k] = i[k](t);\n return c;\n };\n}\n","export default function(a, b) {\n return a = +a, b -= a, function(t) {\n return Math.round(a + b * t);\n };\n}\n","var degrees = 180 / Math.PI;\n\nexport var identity = {\n translateX: 0,\n translateY: 0,\n rotate: 0,\n skewX: 0,\n scaleX: 1,\n scaleY: 1\n};\n\nexport default function(a, b, c, d, e, f) {\n var scaleX, scaleY, skewX;\n if (scaleX = Math.sqrt(a * a + b * b)) a /= scaleX, b /= scaleX;\n if (skewX = a * c + b * d) c -= a * skewX, d -= b * skewX;\n if (scaleY = Math.sqrt(c * c + d * d)) c /= scaleY, d /= scaleY, skewX /= scaleY;\n if (a * d < b * c) a = -a, b = -b, skewX = -skewX, scaleX = -scaleX;\n return {\n translateX: e,\n translateY: f,\n rotate: Math.atan2(b, a) * degrees,\n skewX: Math.atan(skewX) * degrees,\n scaleX: scaleX,\n scaleY: scaleY\n };\n}\n","import number from \"../number\";\nimport {parseCss, parseSvg} from \"./parse\";\n\nfunction interpolateTransform(parse, pxComma, pxParen, degParen) {\n\n function pop(s) {\n return s.length ? s.pop() + \" \" : \"\";\n }\n\n function translate(xa, ya, xb, yb, s, q) {\n if (xa !== xb || ya !== yb) {\n var i = s.push(\"translate(\", null, pxComma, null, pxParen);\n q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\n } else if (xb || yb) {\n s.push(\"translate(\" + xb + pxComma + yb + pxParen);\n }\n }\n\n function rotate(a, b, s, q) {\n if (a !== b) {\n if (a - b > 180) b += 360; else if (b - a > 180) a += 360; // shortest path\n q.push({i: s.push(pop(s) + \"rotate(\", null, degParen) - 2, x: number(a, b)});\n } else if (b) {\n s.push(pop(s) + \"rotate(\" + b + degParen);\n }\n }\n\n function skewX(a, b, s, q) {\n if (a !== b) {\n q.push({i: s.push(pop(s) + \"skewX(\", null, degParen) - 2, x: number(a, b)});\n } else if (b) {\n s.push(pop(s) + \"skewX(\" + b + degParen);\n }\n }\n\n function scale(xa, ya, xb, yb, s, q) {\n if (xa !== xb || ya !== yb) {\n var i = s.push(pop(s) + \"scale(\", null, \",\", null, \")\");\n q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\n } else if (xb !== 1 || yb !== 1) {\n s.push(pop(s) + \"scale(\" + xb + \",\" + yb + \")\");\n }\n }\n\n return function(a, b) {\n var s = [], // string constants and placeholders\n q = []; // number interpolators\n a = parse(a), b = parse(b);\n translate(a.translateX, a.translateY, b.translateX, b.translateY, s, q);\n rotate(a.rotate, b.rotate, s, q);\n skewX(a.skewX, b.skewX, s, q);\n scale(a.scaleX, a.scaleY, b.scaleX, b.scaleY, s, q);\n a = b = null; // gc\n return function(t) {\n var i = -1, n = q.length, o;\n while (++i < n) s[(o = q[i]).i] = o.x(t);\n return s.join(\"\");\n };\n };\n}\n\nexport var interpolateTransformCss = interpolateTransform(parseCss, \"px, \", \"px)\", \"deg)\");\nexport var interpolateTransformSvg = interpolateTransform(parseSvg, \", \", \")\", \")\");\n","var rho = Math.SQRT2,\n rho2 = 2,\n rho4 = 4,\n epsilon2 = 1e-12;\n\nfunction cosh(x) {\n return ((x = Math.exp(x)) + 1 / x) / 2;\n}\n\nfunction sinh(x) {\n return ((x = Math.exp(x)) - 1 / x) / 2;\n}\n\nfunction tanh(x) {\n return ((x = Math.exp(2 * x)) - 1) / (x + 1);\n}\n\n// p0 = [ux0, uy0, w0]\n// p1 = [ux1, uy1, w1]\nexport default function(p0, p1) {\n var ux0 = p0[0], uy0 = p0[1], w0 = p0[2],\n ux1 = p1[0], uy1 = p1[1], w1 = p1[2],\n dx = ux1 - ux0,\n dy = uy1 - uy0,\n d2 = dx * dx + dy * dy,\n i,\n S;\n\n // Special case for u0 ≅ u1.\n if (d2 < epsilon2) {\n S = Math.log(w1 / w0) / rho;\n i = function(t) {\n return [\n ux0 + t * dx,\n uy0 + t * dy,\n w0 * Math.exp(rho * t * S)\n ];\n }\n }\n\n // General case.\n else {\n var d1 = Math.sqrt(d2),\n b0 = (w1 * w1 - w0 * w0 + rho4 * d2) / (2 * w0 * rho2 * d1),\n b1 = (w1 * w1 - w0 * w0 - rho4 * d2) / (2 * w1 * rho2 * d1),\n r0 = Math.log(Math.sqrt(b0 * b0 + 1) - b0),\n r1 = Math.log(Math.sqrt(b1 * b1 + 1) - b1);\n S = (r1 - r0) / rho;\n i = function(t) {\n var s = t * S,\n coshr0 = cosh(r0),\n u = w0 / (rho2 * d1) * (coshr0 * tanh(rho * s + r0) - sinh(r0));\n return [\n ux0 + u * dx,\n uy0 + u * dy,\n w0 * coshr0 / cosh(rho * s + r0)\n ];\n }\n }\n\n i.duration = S * 1000;\n\n return i;\n}\n","import {hsl as colorHsl} from \"d3-color\";\nimport color, {hue} from \"./color\";\n\nfunction hsl(hue) {\n return function(start, end) {\n var h = hue((start = colorHsl(start)).h, (end = colorHsl(end)).h),\n s = color(start.s, end.s),\n l = color(start.l, end.l),\n opacity = color(start.opacity, end.opacity);\n return function(t) {\n start.h = h(t);\n start.s = s(t);\n start.l = l(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n}\n\nexport default hsl(hue);\nexport var hslLong = hsl(color);\n","import {hcl as colorHcl} from \"d3-color\";\nimport color, {hue} from \"./color\";\n\nfunction hcl(hue) {\n return function(start, end) {\n var h = hue((start = colorHcl(start)).h, (end = colorHcl(end)).h),\n c = color(start.c, end.c),\n l = color(start.l, end.l),\n opacity = color(start.opacity, end.opacity);\n return function(t) {\n start.h = h(t);\n start.c = c(t);\n start.l = l(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n}\n\nexport default hcl(hue);\nexport var hclLong = hcl(color);\n","import {cubehelix as colorCubehelix} from \"d3-color\";\nimport color, {hue} from \"./color\";\n\nfunction cubehelix(hue) {\n return (function cubehelixGamma(y) {\n y = +y;\n\n function cubehelix(start, end) {\n var h = hue((start = colorCubehelix(start)).h, (end = colorCubehelix(end)).h),\n s = color(start.s, end.s),\n l = color(start.l, end.l),\n opacity = color(start.opacity, end.opacity);\n return function(t) {\n start.h = h(t);\n start.s = s(t);\n start.l = l(Math.pow(t, y));\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n\n cubehelix.gamma = cubehelixGamma;\n\n return cubehelix;\n })(1);\n}\n\nexport default cubehelix(hue);\nexport var cubehelixLong = cubehelix(color);\n","export default function piecewise(interpolate, values) {\n var i = 0, n = values.length - 1, v = values[0], I = new Array(n < 0 ? 0 : n);\n while (i < n) I[i] = interpolate(v, v = values[++i]);\n return function(t) {\n var i = Math.max(0, Math.min(n - 1, Math.floor(t *= n)));\n return I[i](t - i);\n };\n}\n","export default function(interpolator, n) {\n var samples = new Array(n);\n for (var i = 0; i < n; ++i) samples[i] = interpolator(i / (n - 1));\n return samples;\n}\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","export default function(x) {\n return +x;\n}\n","import {bisect} from \"d3-array\";\nimport {interpolate as interpolateValue, interpolateRound} from \"d3-interpolate\";\nimport {map, slice} from \"./array\";\nimport constant from \"./constant\";\nimport number from \"./number\";\n\nvar unit = [0, 1];\n\nexport function deinterpolateLinear(a, b) {\n return (b -= (a = +a))\n ? function(x) { return (x - a) / b; }\n : constant(b);\n}\n\nfunction deinterpolateClamp(deinterpolate) {\n return function(a, b) {\n var d = deinterpolate(a = +a, b = +b);\n return function(x) { return x <= a ? 0 : x >= b ? 1 : d(x); };\n };\n}\n\nfunction reinterpolateClamp(reinterpolate) {\n return function(a, b) {\n var r = reinterpolate(a = +a, b = +b);\n return function(t) { return t <= 0 ? a : t >= 1 ? b : r(t); };\n };\n}\n\nfunction bimap(domain, range, deinterpolate, reinterpolate) {\n var d0 = domain[0], d1 = domain[1], r0 = range[0], r1 = range[1];\n if (d1 < d0) d0 = deinterpolate(d1, d0), r0 = reinterpolate(r1, r0);\n else d0 = deinterpolate(d0, d1), r0 = reinterpolate(r0, r1);\n return function(x) { return r0(d0(x)); };\n}\n\nfunction polymap(domain, range, deinterpolate, reinterpolate) {\n var j = Math.min(domain.length, range.length) - 1,\n d = new Array(j),\n r = new Array(j),\n i = -1;\n\n // Reverse descending domains.\n if (domain[j] < domain[0]) {\n domain = domain.slice().reverse();\n range = range.slice().reverse();\n }\n\n while (++i < j) {\n d[i] = deinterpolate(domain[i], domain[i + 1]);\n r[i] = reinterpolate(range[i], range[i + 1]);\n }\n\n return function(x) {\n var i = bisect(domain, x, 1, j) - 1;\n return r[i](d[i](x));\n };\n}\n\nexport function copy(source, target) {\n return target\n .domain(source.domain())\n .range(source.range())\n .interpolate(source.interpolate())\n .clamp(source.clamp());\n}\n\n// deinterpolate(a, b)(x) takes a domain value x in [a,b] and returns the corresponding parameter t in [0,1].\n// reinterpolate(a, b)(t) takes a parameter t in [0,1] and returns the corresponding domain value x in [a,b].\nexport default function continuous(deinterpolate, reinterpolate) {\n var domain = unit,\n range = unit,\n interpolate = interpolateValue,\n clamp = false,\n piecewise,\n output,\n input;\n\n function rescale() {\n piecewise = Math.min(domain.length, range.length) > 2 ? polymap : bimap;\n output = input = null;\n return scale;\n }\n\n function scale(x) {\n return (output || (output = piecewise(domain, range, clamp ? deinterpolateClamp(deinterpolate) : deinterpolate, interpolate)))(+x);\n }\n\n scale.invert = function(y) {\n return (input || (input = piecewise(range, domain, deinterpolateLinear, clamp ? reinterpolateClamp(reinterpolate) : reinterpolate)))(+y);\n };\n\n scale.domain = function(_) {\n return arguments.length ? (domain = map.call(_, number), rescale()) : domain.slice();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = slice.call(_), rescale()) : range.slice();\n };\n\n scale.rangeRound = function(_) {\n return range = slice.call(_), interpolate = interpolateRound, rescale();\n };\n\n scale.clamp = function(_) {\n return arguments.length ? (clamp = !!_, rescale()) : clamp;\n };\n\n scale.interpolate = function(_) {\n return arguments.length ? (interpolate = _, rescale()) : interpolate;\n };\n\n return rescale();\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].\nexport default function(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","import formatDecimal from \"./formatDecimal\";\n\nexport default function(x) {\n return x = formatDecimal(Math.abs(x)), x ? x[1] : NaN;\n}\n","// [[fill]align][sign][symbol][0][width][,][.precision][~][type]\nvar re = /^(?:(.)?([<>=^]))?([+\\-( ])?([$#])?(0)?(\\d+)?(,)?(\\.\\d+)?(~)?([a-z%])?$/i;\n\nexport default function formatSpecifier(specifier) {\n return new FormatSpecifier(specifier);\n}\n\nformatSpecifier.prototype = FormatSpecifier.prototype; // instanceof\n\nfunction FormatSpecifier(specifier) {\n if (!(match = re.exec(specifier))) throw new Error(\"invalid format: \" + specifier);\n var match;\n this.fill = match[1] || \" \";\n this.align = match[2] || \">\";\n this.sign = match[3] || \"-\";\n this.symbol = match[4] || \"\";\n this.zero = !!match[5];\n this.width = match[6] && +match[6];\n this.comma = !!match[7];\n this.precision = match[8] && +match[8].slice(1);\n this.trim = !!match[9];\n this.type = match[10] || \"\";\n}\n\nFormatSpecifier.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.trim ? \"~\" : \"\")\n + this.type;\n};\n","// Trims insignificant zeros, e.g., replaces 1.2000k with 1.2k.\nexport default function(s) {\n out: for (var n = s.length, i = 1, i0 = -1, i1; i < n; ++i) {\n switch (s[i]) {\n case \".\": i0 = i1 = i; break;\n case \"0\": if (i0 === 0) i0 = i; i1 = i; break;\n default: if (i0 > 0) { if (!+s[i]) break out; i0 = 0; } break;\n }\n }\n return i0 > 0 ? s.slice(0, i0) + s.slice(i1 + 1) : s;\n}\n","import formatDecimal from \"./formatDecimal\";\n\nexport var prefixExponent;\n\nexport default function(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, Math.max(0, p + i - 1))[0]; // less than 1y!\n}\n","import formatLocale from \"./locale\";\n\nvar locale;\nexport var format;\nexport var formatPrefix;\n\ndefaultLocale({\n decimal: \".\",\n thousands: \",\",\n grouping: [3],\n currency: [\"$\", \"\"]\n});\n\nexport default function defaultLocale(definition) {\n locale = formatLocale(definition);\n format = locale.format;\n formatPrefix = locale.formatPrefix;\n return locale;\n}\n","import formatDecimal from \"./formatDecimal\";\n\nexport default function(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","import formatPrefixAuto from \"./formatPrefixAuto\";\nimport formatRounded from \"./formatRounded\";\n\nexport default {\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","export default function(x) {\n return x;\n}\n","import exponent from \"./exponent\";\nimport formatGroup from \"./formatGroup\";\nimport formatNumerals from \"./formatNumerals\";\nimport formatSpecifier from \"./formatSpecifier\";\nimport formatTrim from \"./formatTrim\";\nimport formatTypes from \"./formatTypes\";\nimport {prefixExponent} from \"./formatPrefixAuto\";\nimport identity from \"./identity\";\n\nvar prefixes = [\"y\",\"z\",\"a\",\"f\",\"p\",\"n\",\"µ\",\"m\",\"\",\"k\",\"M\",\"G\",\"T\",\"P\",\"E\",\"Z\",\"Y\"];\n\nexport default function(locale) {\n var group = locale.grouping && locale.thousands ? formatGroup(locale.grouping, locale.thousands) : identity,\n currency = locale.currency,\n decimal = locale.decimal,\n numerals = locale.numerals ? formatNumerals(locale.numerals) : identity,\n percent = locale.percent || \"%\";\n\n function newFormat(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 trim = specifier.trim,\n type = specifier.type;\n\n // The \"n\" type is an alias for \",g\".\n if (type === \"n\") comma = true, type = \"g\";\n\n // The \"\" type, and any invalid type, is an alias for \".12~g\".\n else if (!formatTypes[type]) precision == null && (precision = 12), trim = true, type = \"g\";\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 // 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) ? percent : \"\";\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 = /[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 ? 6\n : /[gprs]/.test(type) ? Math.max(1, Math.min(21, precision))\n : Math.max(0, Math.min(20, precision));\n\n function format(value) {\n var valuePrefix = prefix,\n valueSuffix = suffix,\n i, n, c;\n\n if (type === \"c\") {\n valueSuffix = formatType(value) + valueSuffix;\n value = \"\";\n } else {\n value = +value;\n\n // Perform the initial formatting.\n var valueNegative = value < 0;\n value = formatType(Math.abs(value), precision);\n\n // Trim insignificant zeros.\n if (trim) value = formatTrim(value);\n\n // If a negative value rounds to zero during formatting, treat as positive.\n if (valueNegative && +value === 0) valueNegative = false;\n\n // Compute the prefix and suffix.\n valuePrefix = (valueNegative ? (sign === \"(\" ? sign : \"-\") : sign === \"-\" || sign === \"(\" ? \"\" : sign) + valuePrefix;\n valueSuffix = (type === \"s\" ? prefixes[8 + prefixExponent / 3] : \"\") + valueSuffix + (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 i = -1, n = value.length;\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 \"<\": value = valuePrefix + value + valueSuffix + padding; break;\n case \"=\": value = valuePrefix + padding + value + valueSuffix; break;\n case \"^\": value = padding.slice(0, length = padding.length >> 1) + valuePrefix + value + valueSuffix + padding.slice(length); break;\n default: value = padding + valuePrefix + value + valueSuffix; break;\n }\n\n return numerals(value);\n }\n\n format.toString = function() {\n return specifier + \"\";\n };\n\n return format;\n }\n\n function formatPrefix(specifier, value) {\n var f = newFormat((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: newFormat,\n formatPrefix: formatPrefix\n };\n}\n","export default function(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","export default function(numerals) {\n return function(value) {\n return value.replace(/[0-9]/g, function(i) {\n return numerals[+i];\n });\n };\n}\n","import exponent from \"./exponent\";\n\nexport default function(step) {\n return Math.max(0, -exponent(Math.abs(step)));\n}\n","import {tickStep} from \"d3-array\";\nimport {format, formatPrefix, formatSpecifier, precisionFixed, precisionPrefix, precisionRound} from \"d3-format\";\n\nexport default function(domain, count, specifier) {\n var start = domain[0],\n stop = domain[domain.length - 1],\n step = tickStep(start, stop, count == null ? 10 : count),\n precision;\n specifier = formatSpecifier(specifier == null ? \",f\" : specifier);\n switch (specifier.type) {\n case \"s\": {\n var value = Math.max(Math.abs(start), Math.abs(stop));\n if (specifier.precision == null && !isNaN(precision = precisionPrefix(step, value))) specifier.precision = precision;\n return formatPrefix(specifier, value);\n }\n case \"\":\n case \"e\":\n case \"g\":\n case \"p\":\n case \"r\": {\n if (specifier.precision == null && !isNaN(precision = precisionRound(step, Math.max(Math.abs(start), Math.abs(stop))))) specifier.precision = precision - (specifier.type === \"e\");\n break;\n }\n case \"f\":\n case \"%\": {\n if (specifier.precision == null && !isNaN(precision = precisionFixed(step))) specifier.precision = precision - (specifier.type === \"%\") * 2;\n break;\n }\n }\n return format(specifier);\n}\n","import exponent from \"./exponent\";\n\nexport default function(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","import exponent from \"./exponent\";\n\nexport default function(step, max) {\n step = Math.abs(step), max = Math.abs(max) - step;\n return Math.max(0, exponent(max) - exponent(step)) + 1;\n}\n","import {ticks, tickIncrement} from \"d3-array\";\nimport {interpolateNumber as reinterpolate} from \"d3-interpolate\";\nimport {default as continuous, copy, deinterpolateLinear as deinterpolate} from \"./continuous\";\nimport tickFormat from \"./tickFormat\";\n\nexport function linearish(scale) {\n var domain = scale.domain;\n\n scale.ticks = function(count) {\n var d = domain();\n return ticks(d[0], d[d.length - 1], count == null ? 10 : count);\n };\n\n scale.tickFormat = function(count, specifier) {\n return tickFormat(domain(), count, specifier);\n };\n\n scale.nice = function(count) {\n if (count == null) count = 10;\n\n var d = domain(),\n i0 = 0,\n i1 = d.length - 1,\n start = d[i0],\n stop = d[i1],\n step;\n\n if (stop < start) {\n step = start, start = stop, stop = step;\n step = i0, i0 = i1, i1 = step;\n }\n\n step = tickIncrement(start, stop, count);\n\n if (step > 0) {\n start = Math.floor(start / step) * step;\n stop = Math.ceil(stop / step) * step;\n step = tickIncrement(start, stop, count);\n } else if (step < 0) {\n start = Math.ceil(start * step) / step;\n stop = Math.floor(stop * step) / step;\n step = tickIncrement(start, stop, count);\n }\n\n if (step > 0) {\n d[i0] = Math.floor(start / step) * step;\n d[i1] = Math.ceil(stop / step) * step;\n domain(d);\n } else if (step < 0) {\n d[i0] = Math.ceil(start * step) / step;\n d[i1] = Math.floor(stop * step) / step;\n domain(d);\n }\n\n return scale;\n };\n\n return scale;\n}\n\nexport default function linear() {\n var scale = continuous(deinterpolate, reinterpolate);\n\n scale.copy = function() {\n return copy(scale, linear());\n };\n\n return linearish(scale);\n}\n","import {map} from \"./array\";\nimport {linearish} from \"./linear\";\nimport number from \"./number\";\n\nexport default function identity() {\n var domain = [0, 1];\n\n function scale(x) {\n return +x;\n }\n\n scale.invert = scale;\n\n scale.domain = scale.range = function(_) {\n return arguments.length ? (domain = map.call(_, number), scale) : domain.slice();\n };\n\n scale.copy = function() {\n return identity().domain(domain);\n };\n\n return linearish(scale);\n}\n","export default function(domain, interval) {\n domain = domain.slice();\n\n var i0 = 0,\n i1 = domain.length - 1,\n x0 = domain[i0],\n x1 = domain[i1],\n t;\n\n if (x1 < x0) {\n t = i0, i0 = i1, i1 = t;\n t = x0, x0 = x1, x1 = t;\n }\n\n domain[i0] = interval.floor(x0);\n domain[i1] = interval.ceil(x1);\n return domain;\n}\n","import {ticks} from \"d3-array\";\nimport {format} from \"d3-format\";\nimport constant from \"./constant\";\nimport nice from \"./nice\";\nimport {default as continuous, copy} from \"./continuous\";\n\nfunction deinterpolate(a, b) {\n return (b = Math.log(b / a))\n ? function(x) { return Math.log(x / a) / b; }\n : constant(b);\n}\n\nfunction reinterpolate(a, b) {\n return a < 0\n ? function(t) { return -Math.pow(-b, t) * Math.pow(-a, 1 - t); }\n : function(t) { return Math.pow(b, t) * Math.pow(a, 1 - t); };\n}\n\nfunction pow10(x) {\n return isFinite(x) ? +(\"1e\" + x) : x < 0 ? 0 : x;\n}\n\nfunction powp(base) {\n return base === 10 ? pow10\n : base === Math.E ? Math.exp\n : function(x) { return Math.pow(base, x); };\n}\n\nfunction logp(base) {\n return base === Math.E ? Math.log\n : base === 10 && Math.log10\n || base === 2 && Math.log2\n || (base = Math.log(base), function(x) { return Math.log(x) / base; });\n}\n\nfunction reflect(f) {\n return function(x) {\n return -f(-x);\n };\n}\n\nexport default function log() {\n var scale = continuous(deinterpolate, reinterpolate).domain([1, 10]),\n domain = scale.domain,\n base = 10,\n logs = logp(10),\n pows = powp(10);\n\n function rescale() {\n logs = logp(base), pows = powp(base);\n if (domain()[0] < 0) logs = reflect(logs), pows = reflect(pows);\n return scale;\n }\n\n scale.base = function(_) {\n return arguments.length ? (base = +_, rescale()) : base;\n };\n\n scale.domain = function(_) {\n return arguments.length ? (domain(_), rescale()) : domain();\n };\n\n scale.ticks = function(count) {\n var d = domain(),\n u = d[0],\n v = d[d.length - 1],\n r;\n\n if (r = v < u) i = u, u = v, v = i;\n\n var i = logs(u),\n j = logs(v),\n p,\n k,\n t,\n n = count == null ? 10 : +count,\n z = [];\n\n if (!(base % 1) && j - i < n) {\n i = Math.round(i) - 1, j = Math.round(j) + 1;\n if (u > 0) for (; i < j; ++i) {\n for (k = 1, p = pows(i); k < base; ++k) {\n t = p * k;\n if (t < u) continue;\n if (t > v) break;\n z.push(t);\n }\n } else for (; i < j; ++i) {\n for (k = base - 1, p = pows(i); k >= 1; --k) {\n t = p * k;\n if (t < u) continue;\n if (t > v) break;\n z.push(t);\n }\n }\n } else {\n z = ticks(i, j, Math.min(j - i, n)).map(pows);\n }\n\n return r ? z.reverse() : z;\n };\n\n scale.tickFormat = function(count, specifier) {\n if (specifier == null) specifier = base === 10 ? \".0e\" : \",\";\n if (typeof specifier !== \"function\") specifier = format(specifier);\n if (count === Infinity) return specifier;\n if (count == null) count = 10;\n var k = Math.max(1, base * count / scale.ticks().length); // TODO fast estimate?\n return function(d) {\n var i = d / pows(Math.round(logs(d)));\n if (i * base < base - 0.5) i *= base;\n return i <= k ? specifier(d) : \"\";\n };\n };\n\n scale.nice = function() {\n return domain(nice(domain(), {\n floor: function(x) { return pows(Math.floor(logs(x))); },\n ceil: function(x) { return pows(Math.ceil(logs(x))); }\n }));\n };\n\n scale.copy = function() {\n return copy(scale, log().base(base));\n };\n\n return scale;\n}\n","import constant from \"./constant\";\nimport {linearish} from \"./linear\";\nimport {default as continuous, copy} from \"./continuous\";\n\nfunction raise(x, exponent) {\n return x < 0 ? -Math.pow(-x, exponent) : Math.pow(x, exponent);\n}\n\nexport default function pow() {\n var exponent = 1,\n scale = continuous(deinterpolate, reinterpolate),\n domain = scale.domain;\n\n function deinterpolate(a, b) {\n return (b = raise(b, exponent) - (a = raise(a, exponent)))\n ? function(x) { return (raise(x, exponent) - a) / b; }\n : constant(b);\n }\n\n function reinterpolate(a, b) {\n b = raise(b, exponent) - (a = raise(a, exponent));\n return function(t) { return raise(a + b * t, 1 / exponent); };\n }\n\n scale.exponent = function(_) {\n return arguments.length ? (exponent = +_, domain(domain())) : exponent;\n };\n\n scale.copy = function() {\n return copy(scale, pow().exponent(exponent));\n };\n\n return linearish(scale);\n}\n\nexport function sqrt() {\n return pow().exponent(0.5);\n}\n","import {ascending, bisect, quantile as threshold} from \"d3-array\";\nimport {slice} from \"./array\";\n\nexport default function quantile() {\n var domain = [],\n range = [],\n thresholds = [];\n\n function rescale() {\n var i = 0, n = Math.max(1, range.length);\n thresholds = new Array(n - 1);\n while (++i < n) thresholds[i - 1] = threshold(domain, i / n);\n return scale;\n }\n\n function scale(x) {\n if (!isNaN(x = +x)) return range[bisect(thresholds, x)];\n }\n\n scale.invertExtent = function(y) {\n var i = range.indexOf(y);\n return i < 0 ? [NaN, NaN] : [\n i > 0 ? thresholds[i - 1] : domain[0],\n i < thresholds.length ? thresholds[i] : domain[domain.length - 1]\n ];\n };\n\n scale.domain = function(_) {\n if (!arguments.length) return domain.slice();\n domain = [];\n for (var i = 0, n = _.length, d; i < n; ++i) if (d = _[i], d != null && !isNaN(d = +d)) domain.push(d);\n domain.sort(ascending);\n return rescale();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = slice.call(_), rescale()) : range.slice();\n };\n\n scale.quantiles = function() {\n return thresholds.slice();\n };\n\n scale.copy = function() {\n return quantile()\n .domain(domain)\n .range(range);\n };\n\n return scale;\n}\n","import {bisect} from \"d3-array\";\nimport {slice} from \"./array\";\nimport {linearish} from \"./linear\";\n\nexport default function quantize() {\n var x0 = 0,\n x1 = 1,\n n = 1,\n domain = [0.5],\n range = [0, 1];\n\n function scale(x) {\n if (x <= x) return range[bisect(domain, x, 0, n)];\n }\n\n function rescale() {\n var i = -1;\n domain = new Array(n);\n while (++i < n) domain[i] = ((i + 1) * x1 - (i - n) * x0) / (n + 1);\n return scale;\n }\n\n scale.domain = function(_) {\n return arguments.length ? (x0 = +_[0], x1 = +_[1], rescale()) : [x0, x1];\n };\n\n scale.range = function(_) {\n return arguments.length ? (n = (range = slice.call(_)).length - 1, rescale()) : range.slice();\n };\n\n scale.invertExtent = function(y) {\n var i = range.indexOf(y);\n return i < 0 ? [NaN, NaN]\n : i < 1 ? [x0, domain[0]]\n : i >= n ? [domain[n - 1], x1]\n : [domain[i - 1], domain[i]];\n };\n\n scale.copy = function() {\n return quantize()\n .domain([x0, x1])\n .range(range);\n };\n\n return linearish(scale);\n}\n","import {bisect} from \"d3-array\";\nimport {slice} from \"./array\";\n\nexport default function threshold() {\n var domain = [0.5],\n range = [0, 1],\n n = 1;\n\n function scale(x) {\n if (x <= x) return range[bisect(domain, x, 0, n)];\n }\n\n scale.domain = function(_) {\n return arguments.length ? (domain = slice.call(_), n = Math.min(domain.length, range.length - 1), scale) : domain.slice();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = slice.call(_), n = Math.min(domain.length, range.length - 1), scale) : range.slice();\n };\n\n scale.invertExtent = function(y) {\n var i = range.indexOf(y);\n return [domain[i - 1], domain[i]];\n };\n\n scale.copy = function() {\n return threshold()\n .domain(domain)\n .range(range);\n };\n\n return scale;\n}\n","var t0 = new Date,\n t1 = new Date;\n\nexport default function newInterval(floori, offseti, count, field) {\n\n function interval(date) {\n return floori(date = new Date(+date)), date;\n }\n\n interval.floor = interval;\n\n interval.ceil = function(date) {\n return floori(date = new Date(date - 1)), offseti(date, 1), floori(date), date;\n };\n\n interval.round = function(date) {\n var d0 = interval(date),\n d1 = interval.ceil(date);\n return date - d0 < d1 - date ? d0 : d1;\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 = [], previous;\n start = interval.ceil(start);\n step = step == null ? 1 : Math.floor(step);\n if (!(start < stop) || !(step > 0)) return range; // also handles Invalid Date\n do range.push(previous = new Date(+start)), offseti(start, step), floori(start);\n while (previous < start && start < stop);\n return range;\n };\n\n interval.filter = function(test) {\n return newInterval(function(date) {\n if (date >= date) while (floori(date), !test(date)) date.setTime(date - 1);\n }, function(date, step) {\n if (date >= date) {\n if (step < 0) while (++step <= 0) {\n while (offseti(date, -1), !test(date)) {} // eslint-disable-line no-empty\n } else while (--step >= 0) {\n while (offseti(date, +1), !test(date)) {} // eslint-disable-line no-empty\n }\n }\n });\n };\n\n if (count) {\n 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 interval.every = function(step) {\n step = Math.floor(step);\n return !isFinite(step) || !(step > 0) ? null\n : !(step > 1) ? interval\n : interval.filter(field\n ? function(d) { return field(d) % step === 0; }\n : function(d) { return interval.count(0, d) % step === 0; });\n };\n }\n\n return interval;\n}\n","import interval from \"./interval\";\n\nvar millisecond = interval(function() {\n // noop\n}, function(date, step) {\n date.setTime(+date + step);\n}, function(start, end) {\n return end - start;\n});\n\n// An optimized implementation for this simple case.\nmillisecond.every = function(k) {\n k = Math.floor(k);\n if (!isFinite(k) || !(k > 0)) return null;\n if (!(k > 1)) return millisecond;\n return interval(function(date) {\n date.setTime(Math.floor(date / k) * k);\n }, function(date, step) {\n date.setTime(+date + step * k);\n }, function(start, end) {\n return (end - start) / k;\n });\n};\n\nexport default millisecond;\nexport var milliseconds = millisecond.range;\n","export var durationSecond = 1e3;\nexport var durationMinute = 6e4;\nexport var durationHour = 36e5;\nexport var durationDay = 864e5;\nexport var durationWeek = 6048e5;\n","import interval from \"./interval\";\nimport {durationSecond} from \"./duration\";\n\nvar second = interval(function(date) {\n date.setTime(Math.floor(date / durationSecond) * durationSecond);\n}, function(date, step) {\n date.setTime(+date + step * durationSecond);\n}, function(start, end) {\n return (end - start) / durationSecond;\n}, function(date) {\n return date.getUTCSeconds();\n});\n\nexport default second;\nexport var seconds = second.range;\n","import interval from \"./interval\";\nimport {durationMinute} from \"./duration\";\n\nvar minute = interval(function(date) {\n date.setTime(Math.floor(date / durationMinute) * durationMinute);\n}, function(date, step) {\n date.setTime(+date + step * durationMinute);\n}, function(start, end) {\n return (end - start) / durationMinute;\n}, function(date) {\n return date.getMinutes();\n});\n\nexport default minute;\nexport var minutes = minute.range;\n","import interval from \"./interval\";\nimport {durationHour, durationMinute} from \"./duration\";\n\nvar hour = interval(function(date) {\n var offset = date.getTimezoneOffset() * durationMinute % durationHour;\n if (offset < 0) offset += durationHour;\n date.setTime(Math.floor((+date - offset) / durationHour) * durationHour + offset);\n}, function(date, step) {\n date.setTime(+date + step * durationHour);\n}, function(start, end) {\n return (end - start) / durationHour;\n}, function(date) {\n return date.getHours();\n});\n\nexport default hour;\nexport var hours = hour.range;\n","import interval from \"./interval\";\nimport {durationDay, durationMinute} from \"./duration\";\n\nvar day = interval(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()) * durationMinute) / durationDay;\n}, function(date) {\n return date.getDate() - 1;\n});\n\nexport default day;\nexport var days = day.range;\n","import interval from \"./interval\";\nimport {durationMinute, durationWeek} from \"./duration\";\n\nfunction weekday(i) {\n return interval(function(date) {\n date.setDate(date.getDate() - (date.getDay() + 7 - i) % 7);\n date.setHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setDate(date.getDate() + step * 7);\n }, function(start, end) {\n return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationWeek;\n });\n}\n\nexport var sunday = weekday(0);\nexport var monday = weekday(1);\nexport var tuesday = weekday(2);\nexport var wednesday = weekday(3);\nexport var thursday = weekday(4);\nexport var friday = weekday(5);\nexport var saturday = weekday(6);\n\nexport var sundays = sunday.range;\nexport var mondays = monday.range;\nexport var tuesdays = tuesday.range;\nexport var wednesdays = wednesday.range;\nexport var thursdays = thursday.range;\nexport var fridays = friday.range;\nexport var saturdays = saturday.range;\n","import interval from \"./interval\";\n\nvar month = interval(function(date) {\n date.setDate(1);\n date.setHours(0, 0, 0, 0);\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}, function(date) {\n return date.getMonth();\n});\n\nexport default month;\nexport var months = month.range;\n","import interval from \"./interval\";\n\nvar year = interval(function(date) {\n date.setMonth(0, 1);\n date.setHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setFullYear(date.getFullYear() + step);\n}, function(start, end) {\n return end.getFullYear() - start.getFullYear();\n}, function(date) {\n return date.getFullYear();\n});\n\n// An optimized implementation for this simple case.\nyear.every = function(k) {\n return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : interval(function(date) {\n date.setFullYear(Math.floor(date.getFullYear() / k) * k);\n date.setMonth(0, 1);\n date.setHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setFullYear(date.getFullYear() + step * k);\n });\n};\n\nexport default year;\nexport var years = year.range;\n","import interval from \"./interval\";\nimport {durationMinute} from \"./duration\";\n\nvar utcMinute = interval(function(date) {\n date.setUTCSeconds(0, 0);\n}, function(date, step) {\n date.setTime(+date + step * durationMinute);\n}, function(start, end) {\n return (end - start) / durationMinute;\n}, function(date) {\n return date.getUTCMinutes();\n});\n\nexport default utcMinute;\nexport var utcMinutes = utcMinute.range;\n","import interval from \"./interval\";\nimport {durationHour} from \"./duration\";\n\nvar utcHour = interval(function(date) {\n date.setUTCMinutes(0, 0, 0);\n}, function(date, step) {\n date.setTime(+date + step * durationHour);\n}, function(start, end) {\n return (end - start) / durationHour;\n}, function(date) {\n return date.getUTCHours();\n});\n\nexport default utcHour;\nexport var utcHours = utcHour.range;\n","import interval from \"./interval\";\nimport {durationDay} from \"./duration\";\n\nvar utcDay = interval(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) / durationDay;\n}, function(date) {\n return date.getUTCDate() - 1;\n});\n\nexport default utcDay;\nexport var utcDays = utcDay.range;\n","import interval from \"./interval\";\nimport {durationWeek} from \"./duration\";\n\nfunction utcWeekday(i) {\n return interval(function(date) {\n date.setUTCDate(date.getUTCDate() - (date.getUTCDay() + 7 - i) % 7);\n date.setUTCHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setUTCDate(date.getUTCDate() + step * 7);\n }, function(start, end) {\n return (end - start) / durationWeek;\n });\n}\n\nexport var utcSunday = utcWeekday(0);\nexport var utcMonday = utcWeekday(1);\nexport var utcTuesday = utcWeekday(2);\nexport var utcWednesday = utcWeekday(3);\nexport var utcThursday = utcWeekday(4);\nexport var utcFriday = utcWeekday(5);\nexport var utcSaturday = utcWeekday(6);\n\nexport var utcSundays = utcSunday.range;\nexport var utcMondays = utcMonday.range;\nexport var utcTuesdays = utcTuesday.range;\nexport var utcWednesdays = utcWednesday.range;\nexport var utcThursdays = utcThursday.range;\nexport var utcFridays = utcFriday.range;\nexport var utcSaturdays = utcSaturday.range;\n","import interval from \"./interval\";\n\nvar utcMonth = interval(function(date) {\n date.setUTCDate(1);\n date.setUTCHours(0, 0, 0, 0);\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}, function(date) {\n return date.getUTCMonth();\n});\n\nexport default utcMonth;\nexport var utcMonths = utcMonth.range;\n","import interval from \"./interval\";\n\nvar utcYear = interval(function(date) {\n date.setUTCMonth(0, 1);\n date.setUTCHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setUTCFullYear(date.getUTCFullYear() + step);\n}, function(start, end) {\n return end.getUTCFullYear() - start.getUTCFullYear();\n}, function(date) {\n return date.getUTCFullYear();\n});\n\n// An optimized implementation for this simple case.\nutcYear.every = function(k) {\n return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : interval(function(date) {\n date.setUTCFullYear(Math.floor(date.getUTCFullYear() / k) * k);\n date.setUTCMonth(0, 1);\n date.setUTCHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setUTCFullYear(date.getUTCFullYear() + step * k);\n });\n};\n\nexport default utcYear;\nexport var utcYears = utcYear.range;\n","import {\n timeDay,\n timeSunday,\n timeMonday,\n timeThursday,\n timeYear,\n utcDay,\n utcSunday,\n utcMonday,\n utcThursday,\n utcYear\n} from \"d3-time\";\n\nfunction 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\nfunction 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\nfunction newYear(y) {\n return {y: y, m: 0, d: 1, H: 0, M: 0, S: 0, L: 0};\n}\n\nexport default function formatLocale(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 periodRe = formatRe(locale_periods),\n 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 \"f\": formatMicroseconds,\n \"H\": formatHour24,\n \"I\": formatHour12,\n \"j\": formatDayOfYear,\n \"L\": formatMilliseconds,\n \"m\": formatMonthNumber,\n \"M\": formatMinutes,\n \"p\": formatPeriod,\n \"Q\": formatUnixTimestamp,\n \"s\": formatUnixTimestampSeconds,\n \"S\": formatSeconds,\n \"u\": formatWeekdayNumberMonday,\n \"U\": formatWeekNumberSunday,\n \"V\": formatWeekNumberISO,\n \"w\": formatWeekdayNumberSunday,\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 \"f\": formatUTCMicroseconds,\n \"H\": formatUTCHour24,\n \"I\": formatUTCHour12,\n \"j\": formatUTCDayOfYear,\n \"L\": formatUTCMilliseconds,\n \"m\": formatUTCMonthNumber,\n \"M\": formatUTCMinutes,\n \"p\": formatUTCPeriod,\n \"Q\": formatUnixTimestamp,\n \"s\": formatUnixTimestampSeconds,\n \"S\": formatUTCSeconds,\n \"u\": formatUTCWeekdayNumberMonday,\n \"U\": formatUTCWeekNumberSunday,\n \"V\": formatUTCWeekNumberISO,\n \"w\": formatUTCWeekdayNumberSunday,\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 \"f\": parseMicroseconds,\n \"H\": parseHour24,\n \"I\": parseHour24,\n \"j\": parseDayOfYear,\n \"L\": parseMilliseconds,\n \"m\": parseMonthNumber,\n \"M\": parseMinutes,\n \"p\": parsePeriod,\n \"Q\": parseUnixTimestamp,\n \"s\": parseUnixTimestampSeconds,\n \"S\": parseSeconds,\n \"u\": parseWeekdayNumberMonday,\n \"U\": parseWeekNumberSunday,\n \"V\": parseWeekNumberISO,\n \"w\": parseWeekdayNumberSunday,\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 if (!(date instanceof Date)) date = new Date(+date);\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 else pad = c === \"e\" ? \" \" : \"0\";\n if (format = formats[c]) c = format(date, 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 week, day;\n if (i != string.length) return null;\n\n // If a UNIX timestamp is specified, return it.\n if (\"Q\" in d) return new Date(d.Q);\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 // Convert day-of-week and week-of-year to day-of-year.\n if (\"V\" in d) {\n if (d.V < 1 || d.V > 53) return null;\n if (!(\"w\" in d)) d.w = 1;\n if (\"Z\" in d) {\n week = utcDate(newYear(d.y)), day = week.getUTCDay();\n week = day > 4 || day === 0 ? utcMonday.ceil(week) : utcMonday(week);\n week = utcDay.offset(week, (d.V - 1) * 7);\n d.y = week.getUTCFullYear();\n d.m = week.getUTCMonth();\n d.d = week.getUTCDate() + (d.w + 6) % 7;\n } else {\n week = newDate(newYear(d.y)), day = week.getDay();\n week = day > 4 || day === 0 ? timeMonday.ceil(week) : timeMonday(week);\n week = timeDay.offset(week, (d.V - 1) * 7);\n d.y = week.getFullYear();\n d.m = week.getMonth();\n d.d = week.getDate() + (d.w + 6) % 7;\n }\n } else if (\"W\" in d || \"U\" in d) {\n if (!(\"w\" in d)) d.w = \"u\" in d ? d.u % 7 : \"W\" in d ? 1 : 0;\n day = \"Z\" in d ? utcDate(newYear(d.y)).getUTCDay() : newDate(newYear(d.y)).getDay();\n d.m = 0;\n d.d = \"W\" in d ? (d.w + 6) % 7 + d.W * 7 - (day + 5) % 7 : d.w + d.U * 7 - (day + 6) % 7;\n }\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 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 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 parsePeriod(d, string, i) {\n var n = periodRe.exec(string.slice(i));\n return n ? (d.p = periodLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n }\n\n function parseShortWeekday(d, string, i) {\n var n = shortWeekdayRe.exec(string.slice(i));\n return n ? (d.w = shortWeekdayLookup[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[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[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[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 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.toString = function() { return specifier; };\n return f;\n },\n parse: function(specifier) {\n var p = newParse(specifier += \"\", localDate);\n p.toString = function() { return specifier; };\n return p;\n },\n utcFormat: function(specifier) {\n var f = newFormat(specifier += \"\", utcFormats);\n f.toString = function() { return specifier; };\n return f;\n },\n utcParse: function(specifier) {\n var p = newParse(specifier, utcDate);\n p.toString = function() { return specifier; };\n return p;\n }\n };\n}\n\nvar pads = {\"-\": \"\", \"_\": \" \", \"0\": \"0\"},\n numberRe = /^\\s*\\d+/, // note: ignores next directive\n percentRe = /^%/,\n requoteRe = /[\\\\^$*+?|[\\]().{}]/g;\n\nfunction 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\nfunction requote(s) {\n return s.replace(requoteRe, \"\\\\$&\");\n}\n\nfunction formatRe(names) {\n return new RegExp(\"^(?:\" + names.map(requote).join(\"|\") + \")\", \"i\");\n}\n\nfunction formatLookup(names) {\n var map = {}, i = -1, n = names.length;\n while (++i < n) map[names[i].toLowerCase()] = i;\n return map;\n}\n\nfunction parseWeekdayNumberSunday(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\nfunction parseWeekdayNumberMonday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 1));\n return n ? (d.u = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberSunday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.U = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberISO(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.V = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberMonday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.W = +n[0], i + n[0].length) : -1;\n}\n\nfunction 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\nfunction 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\nfunction parseZone(d, string, i) {\n var n = /^(Z)|([+-]\\d\\d)(?::?(\\d\\d))?/.exec(string.slice(i, i + 6));\n return n ? (d.Z = n[1] ? 0 : -(n[2] + (n[3] || \"00\")), i + n[0].length) : -1;\n}\n\nfunction 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\nfunction 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\nfunction 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\nfunction 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\nfunction 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\nfunction 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\nfunction 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\nfunction parseMicroseconds(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 6));\n return n ? (d.L = Math.floor(n[0] / 1000), i + n[0].length) : -1;\n}\n\nfunction parseLiteralPercent(d, string, i) {\n var n = percentRe.exec(string.slice(i, i + 1));\n return n ? i + n[0].length : -1;\n}\n\nfunction parseUnixTimestamp(d, string, i) {\n var n = numberRe.exec(string.slice(i));\n return n ? (d.Q = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseUnixTimestampSeconds(d, string, i) {\n var n = numberRe.exec(string.slice(i));\n return n ? (d.Q = (+n[0]) * 1000, i + n[0].length) : -1;\n}\n\nfunction formatDayOfMonth(d, p) {\n return pad(d.getDate(), p, 2);\n}\n\nfunction formatHour24(d, p) {\n return pad(d.getHours(), p, 2);\n}\n\nfunction formatHour12(d, p) {\n return pad(d.getHours() % 12 || 12, p, 2);\n}\n\nfunction formatDayOfYear(d, p) {\n return pad(1 + timeDay.count(timeYear(d), d), p, 3);\n}\n\nfunction formatMilliseconds(d, p) {\n return pad(d.getMilliseconds(), p, 3);\n}\n\nfunction formatMicroseconds(d, p) {\n return formatMilliseconds(d, p) + \"000\";\n}\n\nfunction formatMonthNumber(d, p) {\n return pad(d.getMonth() + 1, p, 2);\n}\n\nfunction formatMinutes(d, p) {\n return pad(d.getMinutes(), p, 2);\n}\n\nfunction formatSeconds(d, p) {\n return pad(d.getSeconds(), p, 2);\n}\n\nfunction formatWeekdayNumberMonday(d) {\n var day = d.getDay();\n return day === 0 ? 7 : day;\n}\n\nfunction formatWeekNumberSunday(d, p) {\n return pad(timeSunday.count(timeYear(d), d), p, 2);\n}\n\nfunction formatWeekNumberISO(d, p) {\n var day = d.getDay();\n d = (day >= 4 || day === 0) ? timeThursday(d) : timeThursday.ceil(d);\n return pad(timeThursday.count(timeYear(d), d) + (timeYear(d).getDay() === 4), p, 2);\n}\n\nfunction formatWeekdayNumberSunday(d) {\n return d.getDay();\n}\n\nfunction formatWeekNumberMonday(d, p) {\n return pad(timeMonday.count(timeYear(d), d), p, 2);\n}\n\nfunction formatYear(d, p) {\n return pad(d.getFullYear() % 100, p, 2);\n}\n\nfunction formatFullYear(d, p) {\n return pad(d.getFullYear() % 10000, p, 4);\n}\n\nfunction 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\nfunction formatUTCDayOfMonth(d, p) {\n return pad(d.getUTCDate(), p, 2);\n}\n\nfunction formatUTCHour24(d, p) {\n return pad(d.getUTCHours(), p, 2);\n}\n\nfunction formatUTCHour12(d, p) {\n return pad(d.getUTCHours() % 12 || 12, p, 2);\n}\n\nfunction formatUTCDayOfYear(d, p) {\n return pad(1 + utcDay.count(utcYear(d), d), p, 3);\n}\n\nfunction formatUTCMilliseconds(d, p) {\n return pad(d.getUTCMilliseconds(), p, 3);\n}\n\nfunction formatUTCMicroseconds(d, p) {\n return formatUTCMilliseconds(d, p) + \"000\";\n}\n\nfunction formatUTCMonthNumber(d, p) {\n return pad(d.getUTCMonth() + 1, p, 2);\n}\n\nfunction formatUTCMinutes(d, p) {\n return pad(d.getUTCMinutes(), p, 2);\n}\n\nfunction formatUTCSeconds(d, p) {\n return pad(d.getUTCSeconds(), p, 2);\n}\n\nfunction formatUTCWeekdayNumberMonday(d) {\n var dow = d.getUTCDay();\n return dow === 0 ? 7 : dow;\n}\n\nfunction formatUTCWeekNumberSunday(d, p) {\n return pad(utcSunday.count(utcYear(d), d), p, 2);\n}\n\nfunction formatUTCWeekNumberISO(d, p) {\n var day = d.getUTCDay();\n d = (day >= 4 || day === 0) ? utcThursday(d) : utcThursday.ceil(d);\n return pad(utcThursday.count(utcYear(d), d) + (utcYear(d).getUTCDay() === 4), p, 2);\n}\n\nfunction formatUTCWeekdayNumberSunday(d) {\n return d.getUTCDay();\n}\n\nfunction formatUTCWeekNumberMonday(d, p) {\n return pad(utcMonday.count(utcYear(d), d), p, 2);\n}\n\nfunction formatUTCYear(d, p) {\n return pad(d.getUTCFullYear() % 100, p, 2);\n}\n\nfunction formatUTCFullYear(d, p) {\n return pad(d.getUTCFullYear() % 10000, p, 4);\n}\n\nfunction formatUTCZone() {\n return \"+0000\";\n}\n\nfunction formatLiteralPercent() {\n return \"%\";\n}\n\nfunction formatUnixTimestamp(d) {\n return +d;\n}\n\nfunction formatUnixTimestampSeconds(d) {\n return Math.floor(+d / 1000);\n}\n","import formatLocale from \"./locale\";\n\nvar locale;\nexport var timeFormat;\nexport var timeParse;\nexport var utcFormat;\nexport var utcParse;\n\ndefaultLocale({\n dateTime: \"%x, %X\",\n date: \"%-m/%-d/%Y\",\n time: \"%-I:%M:%S %p\",\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\nexport default function defaultLocale(definition) {\n locale = formatLocale(definition);\n timeFormat = locale.format;\n timeParse = locale.parse;\n utcFormat = locale.utcFormat;\n utcParse = locale.utcParse;\n return locale;\n}\n","import {utcFormat} from \"./defaultLocale\";\n\nexport var isoSpecifier = \"%Y-%m-%dT%H:%M:%S.%LZ\";\n\nfunction formatIsoNative(date) {\n return date.toISOString();\n}\n\nvar formatIso = Date.prototype.toISOString\n ? formatIsoNative\n : utcFormat(isoSpecifier);\n\nexport default formatIso;\n","import {isoSpecifier} from \"./isoFormat\";\nimport {utcParse} from \"./defaultLocale\";\n\nfunction parseIsoNative(string) {\n var date = new Date(string);\n return isNaN(date) ? null : date;\n}\n\nvar parseIso = +new Date(\"2000-01-01T00:00:00.000Z\")\n ? parseIsoNative\n : utcParse(isoSpecifier);\n\nexport default parseIso;\n","import {bisector, tickStep} from \"d3-array\";\nimport {interpolateNumber as reinterpolate} from \"d3-interpolate\";\nimport {timeYear, timeMonth, timeWeek, timeDay, timeHour, timeMinute, timeSecond, timeMillisecond} from \"d3-time\";\nimport {timeFormat} from \"d3-time-format\";\nimport {map} from \"./array\";\nimport {default as continuous, copy, deinterpolateLinear as deinterpolate} from \"./continuous\";\nimport nice from \"./nice\";\n\nvar durationSecond = 1000,\n durationMinute = durationSecond * 60,\n durationHour = durationMinute * 60,\n durationDay = durationHour * 24,\n durationWeek = durationDay * 7,\n durationMonth = durationDay * 30,\n durationYear = durationDay * 365;\n\nfunction date(t) {\n return new Date(t);\n}\n\nfunction number(t) {\n return t instanceof Date ? +t : +new Date(+t);\n}\n\nexport function calendar(year, month, week, day, hour, minute, second, millisecond, format) {\n var scale = continuous(deinterpolate, reinterpolate),\n invert = scale.invert,\n domain = scale.domain;\n\n var formatMillisecond = format(\".%L\"),\n formatSecond = format(\":%S\"),\n formatMinute = format(\"%I:%M\"),\n formatHour = format(\"%I %p\"),\n formatDay = format(\"%a %d\"),\n formatWeek = format(\"%b %d\"),\n formatMonth = format(\"%B\"),\n formatYear = format(\"%Y\");\n\n var tickIntervals = [\n [second, 1, durationSecond],\n [second, 5, 5 * durationSecond],\n [second, 15, 15 * durationSecond],\n [second, 30, 30 * durationSecond],\n [minute, 1, durationMinute],\n [minute, 5, 5 * durationMinute],\n [minute, 15, 15 * durationMinute],\n [minute, 30, 30 * durationMinute],\n [ hour, 1, durationHour ],\n [ hour, 3, 3 * durationHour ],\n [ hour, 6, 6 * durationHour ],\n [ hour, 12, 12 * durationHour ],\n [ day, 1, durationDay ],\n [ day, 2, 2 * durationDay ],\n [ week, 1, durationWeek ],\n [ month, 1, durationMonth ],\n [ month, 3, 3 * durationMonth ],\n [ year, 1, durationYear ]\n ];\n\n function tickFormat(date) {\n return (second(date) < date ? formatMillisecond\n : minute(date) < date ? formatSecond\n : hour(date) < date ? formatMinute\n : day(date) < date ? formatHour\n : month(date) < date ? (week(date) < date ? formatDay : formatWeek)\n : year(date) < date ? formatMonth\n : formatYear)(date);\n }\n\n function tickInterval(interval, start, stop, step) {\n if (interval == null) interval = 10;\n\n // If a desired tick count is specified, pick a reasonable tick interval\n // based on the extent of the domain and a rough estimate of tick size.\n // Otherwise, assume interval is already a time interval and use it.\n if (typeof interval === \"number\") {\n var target = Math.abs(stop - start) / interval,\n i = bisector(function(i) { return i[2]; }).right(tickIntervals, target);\n if (i === tickIntervals.length) {\n step = tickStep(start / durationYear, stop / durationYear, interval);\n interval = year;\n } else if (i) {\n i = tickIntervals[target / tickIntervals[i - 1][2] < tickIntervals[i][2] / target ? i - 1 : i];\n step = i[1];\n interval = i[0];\n } else {\n step = Math.max(tickStep(start, stop, interval), 1);\n interval = millisecond;\n }\n }\n\n return step == null ? interval : interval.every(step);\n }\n\n scale.invert = function(y) {\n return new Date(invert(y));\n };\n\n scale.domain = function(_) {\n return arguments.length ? domain(map.call(_, number)) : domain().map(date);\n };\n\n scale.ticks = function(interval, step) {\n var d = domain(),\n t0 = d[0],\n t1 = d[d.length - 1],\n r = t1 < t0,\n t;\n if (r) t = t0, t0 = t1, t1 = t;\n t = tickInterval(interval, t0, t1, step);\n t = t ? t.range(t0, t1 + 1) : []; // inclusive stop\n return r ? t.reverse() : t;\n };\n\n scale.tickFormat = function(count, specifier) {\n return specifier == null ? tickFormat : format(specifier);\n };\n\n scale.nice = function(interval, step) {\n var d = domain();\n return (interval = tickInterval(interval, d[0], d[d.length - 1], step))\n ? domain(nice(d, interval))\n : scale;\n };\n\n scale.copy = function() {\n return copy(scale, calendar(year, month, week, day, hour, minute, second, millisecond, format));\n };\n\n return scale;\n}\n\nexport default function() {\n return calendar(timeYear, timeMonth, timeWeek, timeDay, timeHour, timeMinute, timeSecond, timeMillisecond, timeFormat).domain([new Date(2000, 0, 1), new Date(2000, 0, 2)]);\n}\n","export default function(s) {\n return s.match(/.{6}/g).map(function(x) {\n return \"#\" + x;\n });\n}\n","import colors from \"./colors\";\n\nexport default colors(\"1f77b4ff7f0e2ca02cd627289467bd8c564be377c27f7f7fbcbd2217becf\");\n","import colors from \"./colors\";\n\nexport default colors(\"393b795254a36b6ecf9c9ede6379398ca252b5cf6bcedb9c8c6d31bd9e39e7ba52e7cb94843c39ad494ad6616be7969c7b4173a55194ce6dbdde9ed6\");\n","import colors from \"./colors\";\n\nexport default colors(\"1f77b4aec7e8ff7f0effbb782ca02c98df8ad62728ff98969467bdc5b0d58c564bc49c94e377c2f7b6d27f7f7fc7c7c7bcbd22dbdb8d17becf9edae5\");\n","import colors from \"./colors\";\n\nexport default colors(\"3182bd6baed69ecae1c6dbefe6550dfd8d3cfdae6bfdd0a231a35474c476a1d99bc7e9c0756bb19e9ac8bcbddcdadaeb636363969696bdbdbdd9d9d9\");\n","import {cubehelix} from \"d3-color\";\nimport {interpolateCubehelixLong} from \"d3-interpolate\";\n\nexport default interpolateCubehelixLong(cubehelix(300, 0.5, 0.0), cubehelix(-240, 0.5, 1.0));\n","import {cubehelix} from \"d3-color\";\nimport {interpolateCubehelixLong} from \"d3-interpolate\";\n\nexport var warm = interpolateCubehelixLong(cubehelix(-100, 0.75, 0.35), cubehelix(80, 1.50, 0.8));\n\nexport var cool = interpolateCubehelixLong(cubehelix(260, 0.75, 0.35), cubehelix(80, 1.50, 0.8));\n\nvar rainbow = cubehelix();\n\nexport default function(t) {\n if (t < 0 || t > 1) t -= Math.floor(t);\n var ts = Math.abs(t - 0.5);\n rainbow.h = 360 * t - 100;\n rainbow.s = 1.5 - 1.5 * ts;\n rainbow.l = 0.8 - 0.9 * ts;\n return rainbow + \"\";\n}\n","import colors from \"./colors\";\n\nfunction ramp(range) {\n var n = range.length;\n return function(t) {\n return range[Math.max(0, Math.min(n - 1, Math.floor(t * n)))];\n };\n}\n\nexport default ramp(colors(\"44015444025645045745055946075a46085c460a5d460b5e470d60470e6147106347116447136548146748166848176948186a481a6c481b6d481c6e481d6f481f70482071482173482374482475482576482677482878482979472a7a472c7a472d7b472e7c472f7d46307e46327e46337f463480453581453781453882443983443a83443b84433d84433e85423f854240864241864142874144874045884046883f47883f48893e49893e4a893e4c8a3d4d8a3d4e8a3c4f8a3c508b3b518b3b528b3a538b3a548c39558c39568c38588c38598c375a8c375b8d365c8d365d8d355e8d355f8d34608d34618d33628d33638d32648e32658e31668e31678e31688e30698e306a8e2f6b8e2f6c8e2e6d8e2e6e8e2e6f8e2d708e2d718e2c718e2c728e2c738e2b748e2b758e2a768e2a778e2a788e29798e297a8e297b8e287c8e287d8e277e8e277f8e27808e26818e26828e26828e25838e25848e25858e24868e24878e23888e23898e238a8d228b8d228c8d228d8d218e8d218f8d21908d21918c20928c20928c20938c1f948c1f958b1f968b1f978b1f988b1f998a1f9a8a1e9b8a1e9c891e9d891f9e891f9f881fa0881fa1881fa1871fa28720a38620a48621a58521a68522a78522a88423a98324aa8325ab8225ac8226ad8127ad8128ae8029af7f2ab07f2cb17e2db27d2eb37c2fb47c31b57b32b67a34b67935b77937b87838b9773aba763bbb753dbc743fbc7340bd7242be7144bf7046c06f48c16e4ac16d4cc26c4ec36b50c46a52c56954c56856c66758c7655ac8645cc8635ec96260ca6063cb5f65cb5e67cc5c69cd5b6ccd5a6ece5870cf5773d05675d05477d1537ad1517cd2507fd34e81d34d84d44b86d54989d5488bd6468ed64590d74393d74195d84098d83e9bd93c9dd93ba0da39a2da37a5db36a8db34aadc32addc30b0dd2fb2dd2db5de2bb8de29bade28bddf26c0df25c2df23c5e021c8e020cae11fcde11dd0e11cd2e21bd5e21ad8e219dae319dde318dfe318e2e418e5e419e7e419eae51aece51befe51cf1e51df4e61ef6e620f8e621fbe723fde725\"));\n\nexport var magma = ramp(colors(\"00000401000501010601010802010902020b02020d03030f03031204041405041606051806051a07061c08071e0907200a08220b09240c09260d0a290e0b2b100b2d110c2f120d31130d34140e36150e38160f3b180f3d19103f1a10421c10441d11471e114920114b21114e22115024125325125527125829115a2a115c2c115f2d11612f116331116533106734106936106b38106c390f6e3b0f703d0f713f0f72400f74420f75440f764510774710784910784a10794c117a4e117b4f127b51127c52137c54137d56147d57157e59157e5a167e5c167f5d177f5f187f601880621980641a80651a80671b80681c816a1c816b1d816d1d816e1e81701f81721f817320817521817621817822817922827b23827c23827e24828025828125818326818426818627818827818928818b29818c29818e2a81902a81912b81932b80942c80962c80982d80992d809b2e7f9c2e7f9e2f7fa02f7fa1307ea3307ea5317ea6317da8327daa337dab337cad347cae347bb0357bb2357bb3367ab5367ab73779b83779ba3878bc3978bd3977bf3a77c03a76c23b75c43c75c53c74c73d73c83e73ca3e72cc3f71cd4071cf4070d0416fd2426fd3436ed5446dd6456cd8456cd9466bdb476adc4869de4968df4a68e04c67e24d66e34e65e44f64e55064e75263e85362e95462ea5661eb5760ec5860ed5a5fee5b5eef5d5ef05f5ef1605df2625df2645cf3655cf4675cf4695cf56b5cf66c5cf66e5cf7705cf7725cf8745cf8765cf9785df9795df97b5dfa7d5efa7f5efa815ffb835ffb8560fb8761fc8961fc8a62fc8c63fc8e64fc9065fd9266fd9467fd9668fd9869fd9a6afd9b6bfe9d6cfe9f6dfea16efea36ffea571fea772fea973feaa74feac76feae77feb078feb27afeb47bfeb67cfeb77efeb97ffebb81febd82febf84fec185fec287fec488fec68afec88cfeca8dfecc8ffecd90fecf92fed194fed395fed597fed799fed89afdda9cfddc9efddea0fde0a1fde2a3fde3a5fde5a7fde7a9fde9aafdebacfcecaefceeb0fcf0b2fcf2b4fcf4b6fcf6b8fcf7b9fcf9bbfcfbbdfcfdbf\"));\n\nexport var inferno = ramp(colors(\"00000401000501010601010802010a02020c02020e03021004031204031405041706041907051b08051d09061f0a07220b07240c08260d08290e092b10092d110a30120a32140b34150b37160b39180c3c190c3e1b0c411c0c431e0c451f0c48210c4a230c4c240c4f260c51280b53290b552b0b572d0b592f0a5b310a5c320a5e340a5f3609613809623909633b09643d09653e0966400a67420a68440a68450a69470b6a490b6a4a0c6b4c0c6b4d0d6c4f0d6c510e6c520e6d540f6d550f6d57106e59106e5a116e5c126e5d126e5f136e61136e62146e64156e65156e67166e69166e6a176e6c186e6d186e6f196e71196e721a6e741a6e751b6e771c6d781c6d7a1d6d7c1d6d7d1e6d7f1e6c801f6c82206c84206b85216b87216b88226a8a226a8c23698d23698f24699025689225689326679526679727669827669a28659b29649d29649f2a63a02a63a22b62a32c61a52c60a62d60a82e5fa92e5eab2f5ead305dae305cb0315bb1325ab3325ab43359b63458b73557b93556ba3655bc3754bd3853bf3952c03a51c13a50c33b4fc43c4ec63d4dc73e4cc83f4bca404acb4149cc4248ce4347cf4446d04545d24644d34743d44842d54a41d74b3fd84c3ed94d3dda4e3cdb503bdd513ade5238df5337e05536e15635e25734e35933e45a31e55c30e65d2fe75e2ee8602de9612bea632aeb6429eb6628ec6726ed6925ee6a24ef6c23ef6e21f06f20f1711ff1731df2741cf3761bf37819f47918f57b17f57d15f67e14f68013f78212f78410f8850ff8870ef8890cf98b0bf98c0af98e09fa9008fa9207fa9407fb9606fb9706fb9906fb9b06fb9d07fc9f07fca108fca309fca50afca60cfca80dfcaa0ffcac11fcae12fcb014fcb216fcb418fbb61afbb81dfbba1ffbbc21fbbe23fac026fac228fac42afac62df9c72ff9c932f9cb35f8cd37f8cf3af7d13df7d340f6d543f6d746f5d949f5db4cf4dd4ff4df53f4e156f3e35af3e55df2e661f2e865f2ea69f1ec6df1ed71f1ef75f1f179f2f27df2f482f3f586f3f68af4f88ef5f992f6fa96f8fb9af9fc9dfafda1fcffa4\"));\n\nexport var plasma = ramp(colors(\"0d088710078813078916078a19068c1b068d1d068e20068f2206902406912605912805922a05932c05942e05952f059631059733059735049837049938049a3a049a3c049b3e049c3f049c41049d43039e44039e46039f48039f4903a04b03a14c02a14e02a25002a25102a35302a35502a45601a45801a45901a55b01a55c01a65e01a66001a66100a76300a76400a76600a76700a86900a86a00a86c00a86e00a86f00a87100a87201a87401a87501a87701a87801a87a02a87b02a87d03a87e03a88004a88104a78305a78405a78606a68707a68808a68a09a58b0aa58d0ba58e0ca48f0da4910ea3920fa39410a29511a19613a19814a099159f9a169f9c179e9d189d9e199da01a9ca11b9ba21d9aa31e9aa51f99a62098a72197a82296aa2395ab2494ac2694ad2793ae2892b02991b12a90b22b8fb32c8eb42e8db52f8cb6308bb7318ab83289ba3388bb3488bc3587bd3786be3885bf3984c03a83c13b82c23c81c33d80c43e7fc5407ec6417dc7427cc8437bc9447aca457acb4679cc4778cc4977cd4a76ce4b75cf4c74d04d73d14e72d24f71d35171d45270d5536fd5546ed6556dd7566cd8576bd9586ada5a6ada5b69db5c68dc5d67dd5e66de5f65de6164df6263e06363e16462e26561e26660e3685fe4695ee56a5de56b5de66c5ce76e5be76f5ae87059e97158e97257ea7457eb7556eb7655ec7754ed7953ed7a52ee7b51ef7c51ef7e50f07f4ff0804ef1814df1834cf2844bf3854bf3874af48849f48948f58b47f58c46f68d45f68f44f79044f79143f79342f89441f89540f9973ff9983ef99a3efa9b3dfa9c3cfa9e3bfb9f3afba139fba238fca338fca537fca636fca835fca934fdab33fdac33fdae32fdaf31fdb130fdb22ffdb42ffdb52efeb72dfeb82cfeba2cfebb2bfebd2afebe2afec029fdc229fdc328fdc527fdc627fdc827fdca26fdcb26fccd25fcce25fcd025fcd225fbd324fbd524fbd724fad824fada24f9dc24f9dd25f8df25f8e125f7e225f7e425f6e626f6e826f5e926f5eb27f4ed27f3ee27f3f027f2f227f1f426f1f525f0f724f0f921\"));\n","import {linearish} from \"./linear\";\n\nexport default function sequential(interpolator) {\n var x0 = 0,\n x1 = 1,\n clamp = false;\n\n function scale(x) {\n var t = (x - x0) / (x1 - x0);\n return interpolator(clamp ? Math.max(0, Math.min(1, t)) : t);\n }\n\n scale.domain = function(_) {\n return arguments.length ? (x0 = +_[0], x1 = +_[1], scale) : [x0, x1];\n };\n\n scale.clamp = function(_) {\n return arguments.length ? (clamp = !!_, scale) : clamp;\n };\n\n scale.interpolator = function(_) {\n return arguments.length ? (interpolator = _, scale) : interpolator;\n };\n\n scale.copy = function() {\n return sequential(interpolator).domain([x0, x1]).clamp(clamp);\n };\n\n return linearish(scale);\n}\n","export default function(specifier) {\n var n = specifier.length / 6 | 0, colors = new Array(n), i = 0;\n while (i < n) colors[i] = \"#\" + specifier.slice(i * 6, ++i * 6);\n return colors;\n}\n","import colors from \"../colors\";\n\nexport default colors(\"7fc97fbeaed4fdc086ffff99386cb0f0027fbf5b17666666\");\n","import colors from \"../colors\";\n\nexport default colors(\"1f77b4ff7f0e2ca02cd627289467bd8c564be377c27f7f7fbcbd2217becf\");\n","import colors from \"../colors\";\n\nexport default colors(\"1b9e77d95f027570b3e7298a66a61ee6ab02a6761d666666\");\n","import colors from \"../colors\";\n\nexport default colors(\"a6cee31f78b4b2df8a33a02cfb9a99e31a1cfdbf6fff7f00cab2d66a3d9affff99b15928\");\n","import colors from \"../colors\";\n\nexport default colors(\"fbb4aeb3cde3ccebc5decbe4fed9a6ffffcce5d8bdfddaecf2f2f2\");\n","import colors from \"../colors\";\n\nexport default colors(\"b3e2cdfdcdaccbd5e8f4cae4e6f5c9fff2aef1e2cccccccc\");\n","import colors from \"../colors\";\n\nexport default colors(\"e41a1c377eb84daf4a984ea3ff7f00ffff33a65628f781bf999999\");\n","import colors from \"../colors\";\n\nexport default colors(\"66c2a5fc8d628da0cbe78ac3a6d854ffd92fe5c494b3b3b3\");\n","import colors from \"../colors\";\n\nexport default colors(\"8dd3c7ffffb3bebadafb807280b1d3fdb462b3de69fccde5d9d9d9bc80bdccebc5ffed6f\");\n","import {interpolateRgbBasis} from \"d3-interpolate\";\n\nexport default function(scheme) {\n return interpolateRgbBasis(scheme[scheme.length - 1]);\n}\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"d8b365f5f5f55ab4ac\",\n \"a6611adfc27d80cdc1018571\",\n \"a6611adfc27df5f5f580cdc1018571\",\n \"8c510ad8b365f6e8c3c7eae55ab4ac01665e\",\n \"8c510ad8b365f6e8c3f5f5f5c7eae55ab4ac01665e\",\n \"8c510abf812ddfc27df6e8c3c7eae580cdc135978f01665e\",\n \"8c510abf812ddfc27df6e8c3f5f5f5c7eae580cdc135978f01665e\",\n \"5430058c510abf812ddfc27df6e8c3c7eae580cdc135978f01665e003c30\",\n \"5430058c510abf812ddfc27df6e8c3f5f5f5c7eae580cdc135978f01665e003c30\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"af8dc3f7f7f77fbf7b\",\n \"7b3294c2a5cfa6dba0008837\",\n \"7b3294c2a5cff7f7f7a6dba0008837\",\n \"762a83af8dc3e7d4e8d9f0d37fbf7b1b7837\",\n \"762a83af8dc3e7d4e8f7f7f7d9f0d37fbf7b1b7837\",\n \"762a839970abc2a5cfe7d4e8d9f0d3a6dba05aae611b7837\",\n \"762a839970abc2a5cfe7d4e8f7f7f7d9f0d3a6dba05aae611b7837\",\n \"40004b762a839970abc2a5cfe7d4e8d9f0d3a6dba05aae611b783700441b\",\n \"40004b762a839970abc2a5cfe7d4e8f7f7f7d9f0d3a6dba05aae611b783700441b\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"e9a3c9f7f7f7a1d76a\",\n \"d01c8bf1b6dab8e1864dac26\",\n \"d01c8bf1b6daf7f7f7b8e1864dac26\",\n \"c51b7de9a3c9fde0efe6f5d0a1d76a4d9221\",\n \"c51b7de9a3c9fde0eff7f7f7e6f5d0a1d76a4d9221\",\n \"c51b7dde77aef1b6dafde0efe6f5d0b8e1867fbc414d9221\",\n \"c51b7dde77aef1b6dafde0eff7f7f7e6f5d0b8e1867fbc414d9221\",\n \"8e0152c51b7dde77aef1b6dafde0efe6f5d0b8e1867fbc414d9221276419\",\n \"8e0152c51b7dde77aef1b6dafde0eff7f7f7e6f5d0b8e1867fbc414d9221276419\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"998ec3f7f7f7f1a340\",\n \"5e3c99b2abd2fdb863e66101\",\n \"5e3c99b2abd2f7f7f7fdb863e66101\",\n \"542788998ec3d8daebfee0b6f1a340b35806\",\n \"542788998ec3d8daebf7f7f7fee0b6f1a340b35806\",\n \"5427888073acb2abd2d8daebfee0b6fdb863e08214b35806\",\n \"5427888073acb2abd2d8daebf7f7f7fee0b6fdb863e08214b35806\",\n \"2d004b5427888073acb2abd2d8daebfee0b6fdb863e08214b358067f3b08\",\n \"2d004b5427888073acb2abd2d8daebf7f7f7fee0b6fdb863e08214b358067f3b08\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"ef8a62f7f7f767a9cf\",\n \"ca0020f4a58292c5de0571b0\",\n \"ca0020f4a582f7f7f792c5de0571b0\",\n \"b2182bef8a62fddbc7d1e5f067a9cf2166ac\",\n \"b2182bef8a62fddbc7f7f7f7d1e5f067a9cf2166ac\",\n \"b2182bd6604df4a582fddbc7d1e5f092c5de4393c32166ac\",\n \"b2182bd6604df4a582fddbc7f7f7f7d1e5f092c5de4393c32166ac\",\n \"67001fb2182bd6604df4a582fddbc7d1e5f092c5de4393c32166ac053061\",\n \"67001fb2182bd6604df4a582fddbc7f7f7f7d1e5f092c5de4393c32166ac053061\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"ef8a62ffffff999999\",\n \"ca0020f4a582bababa404040\",\n \"ca0020f4a582ffffffbababa404040\",\n \"b2182bef8a62fddbc7e0e0e09999994d4d4d\",\n \"b2182bef8a62fddbc7ffffffe0e0e09999994d4d4d\",\n \"b2182bd6604df4a582fddbc7e0e0e0bababa8787874d4d4d\",\n \"b2182bd6604df4a582fddbc7ffffffe0e0e0bababa8787874d4d4d\",\n \"67001fb2182bd6604df4a582fddbc7e0e0e0bababa8787874d4d4d1a1a1a\",\n \"67001fb2182bd6604df4a582fddbc7ffffffe0e0e0bababa8787874d4d4d1a1a1a\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"fc8d59ffffbf91bfdb\",\n \"d7191cfdae61abd9e92c7bb6\",\n \"d7191cfdae61ffffbfabd9e92c7bb6\",\n \"d73027fc8d59fee090e0f3f891bfdb4575b4\",\n \"d73027fc8d59fee090ffffbfe0f3f891bfdb4575b4\",\n \"d73027f46d43fdae61fee090e0f3f8abd9e974add14575b4\",\n \"d73027f46d43fdae61fee090ffffbfe0f3f8abd9e974add14575b4\",\n \"a50026d73027f46d43fdae61fee090e0f3f8abd9e974add14575b4313695\",\n \"a50026d73027f46d43fdae61fee090ffffbfe0f3f8abd9e974add14575b4313695\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"fc8d59ffffbf91cf60\",\n \"d7191cfdae61a6d96a1a9641\",\n \"d7191cfdae61ffffbfa6d96a1a9641\",\n \"d73027fc8d59fee08bd9ef8b91cf601a9850\",\n \"d73027fc8d59fee08bffffbfd9ef8b91cf601a9850\",\n \"d73027f46d43fdae61fee08bd9ef8ba6d96a66bd631a9850\",\n \"d73027f46d43fdae61fee08bffffbfd9ef8ba6d96a66bd631a9850\",\n \"a50026d73027f46d43fdae61fee08bd9ef8ba6d96a66bd631a9850006837\",\n \"a50026d73027f46d43fdae61fee08bffffbfd9ef8ba6d96a66bd631a9850006837\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"fc8d59ffffbf99d594\",\n \"d7191cfdae61abdda42b83ba\",\n \"d7191cfdae61ffffbfabdda42b83ba\",\n \"d53e4ffc8d59fee08be6f59899d5943288bd\",\n \"d53e4ffc8d59fee08bffffbfe6f59899d5943288bd\",\n \"d53e4ff46d43fdae61fee08be6f598abdda466c2a53288bd\",\n \"d53e4ff46d43fdae61fee08bffffbfe6f598abdda466c2a53288bd\",\n \"9e0142d53e4ff46d43fdae61fee08be6f598abdda466c2a53288bd5e4fa2\",\n \"9e0142d53e4ff46d43fdae61fee08bffffbfe6f598abdda466c2a53288bd5e4fa2\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"e5f5f999d8c92ca25f\",\n \"edf8fbb2e2e266c2a4238b45\",\n \"edf8fbb2e2e266c2a42ca25f006d2c\",\n \"edf8fbccece699d8c966c2a42ca25f006d2c\",\n \"edf8fbccece699d8c966c2a441ae76238b45005824\",\n \"f7fcfde5f5f9ccece699d8c966c2a441ae76238b45005824\",\n \"f7fcfde5f5f9ccece699d8c966c2a441ae76238b45006d2c00441b\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"e0ecf49ebcda8856a7\",\n \"edf8fbb3cde38c96c688419d\",\n \"edf8fbb3cde38c96c68856a7810f7c\",\n \"edf8fbbfd3e69ebcda8c96c68856a7810f7c\",\n \"edf8fbbfd3e69ebcda8c96c68c6bb188419d6e016b\",\n \"f7fcfde0ecf4bfd3e69ebcda8c96c68c6bb188419d6e016b\",\n \"f7fcfde0ecf4bfd3e69ebcda8c96c68c6bb188419d810f7c4d004b\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"e0f3dba8ddb543a2ca\",\n \"f0f9e8bae4bc7bccc42b8cbe\",\n \"f0f9e8bae4bc7bccc443a2ca0868ac\",\n \"f0f9e8ccebc5a8ddb57bccc443a2ca0868ac\",\n \"f0f9e8ccebc5a8ddb57bccc44eb3d32b8cbe08589e\",\n \"f7fcf0e0f3dbccebc5a8ddb57bccc44eb3d32b8cbe08589e\",\n \"f7fcf0e0f3dbccebc5a8ddb57bccc44eb3d32b8cbe0868ac084081\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"fee8c8fdbb84e34a33\",\n \"fef0d9fdcc8afc8d59d7301f\",\n \"fef0d9fdcc8afc8d59e34a33b30000\",\n \"fef0d9fdd49efdbb84fc8d59e34a33b30000\",\n \"fef0d9fdd49efdbb84fc8d59ef6548d7301f990000\",\n \"fff7ecfee8c8fdd49efdbb84fc8d59ef6548d7301f990000\",\n \"fff7ecfee8c8fdd49efdbb84fc8d59ef6548d7301fb300007f0000\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"ece2f0a6bddb1c9099\",\n \"f6eff7bdc9e167a9cf02818a\",\n \"f6eff7bdc9e167a9cf1c9099016c59\",\n \"f6eff7d0d1e6a6bddb67a9cf1c9099016c59\",\n \"f6eff7d0d1e6a6bddb67a9cf3690c002818a016450\",\n \"fff7fbece2f0d0d1e6a6bddb67a9cf3690c002818a016450\",\n \"fff7fbece2f0d0d1e6a6bddb67a9cf3690c002818a016c59014636\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"ece7f2a6bddb2b8cbe\",\n \"f1eef6bdc9e174a9cf0570b0\",\n \"f1eef6bdc9e174a9cf2b8cbe045a8d\",\n \"f1eef6d0d1e6a6bddb74a9cf2b8cbe045a8d\",\n \"f1eef6d0d1e6a6bddb74a9cf3690c00570b0034e7b\",\n \"fff7fbece7f2d0d1e6a6bddb74a9cf3690c00570b0034e7b\",\n \"fff7fbece7f2d0d1e6a6bddb74a9cf3690c00570b0045a8d023858\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"e7e1efc994c7dd1c77\",\n \"f1eef6d7b5d8df65b0ce1256\",\n \"f1eef6d7b5d8df65b0dd1c77980043\",\n \"f1eef6d4b9dac994c7df65b0dd1c77980043\",\n \"f1eef6d4b9dac994c7df65b0e7298ace125691003f\",\n \"f7f4f9e7e1efd4b9dac994c7df65b0e7298ace125691003f\",\n \"f7f4f9e7e1efd4b9dac994c7df65b0e7298ace125698004367001f\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"fde0ddfa9fb5c51b8a\",\n \"feebe2fbb4b9f768a1ae017e\",\n \"feebe2fbb4b9f768a1c51b8a7a0177\",\n \"feebe2fcc5c0fa9fb5f768a1c51b8a7a0177\",\n \"feebe2fcc5c0fa9fb5f768a1dd3497ae017e7a0177\",\n \"fff7f3fde0ddfcc5c0fa9fb5f768a1dd3497ae017e7a0177\",\n \"fff7f3fde0ddfcc5c0fa9fb5f768a1dd3497ae017e7a017749006a\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"edf8b17fcdbb2c7fb8\",\n \"ffffcca1dab441b6c4225ea8\",\n \"ffffcca1dab441b6c42c7fb8253494\",\n \"ffffccc7e9b47fcdbb41b6c42c7fb8253494\",\n \"ffffccc7e9b47fcdbb41b6c41d91c0225ea80c2c84\",\n \"ffffd9edf8b1c7e9b47fcdbb41b6c41d91c0225ea80c2c84\",\n \"ffffd9edf8b1c7e9b47fcdbb41b6c41d91c0225ea8253494081d58\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"f7fcb9addd8e31a354\",\n \"ffffccc2e69978c679238443\",\n \"ffffccc2e69978c67931a354006837\",\n \"ffffccd9f0a3addd8e78c67931a354006837\",\n \"ffffccd9f0a3addd8e78c67941ab5d238443005a32\",\n \"ffffe5f7fcb9d9f0a3addd8e78c67941ab5d238443005a32\",\n \"ffffe5f7fcb9d9f0a3addd8e78c67941ab5d238443006837004529\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"fff7bcfec44fd95f0e\",\n \"ffffd4fed98efe9929cc4c02\",\n \"ffffd4fed98efe9929d95f0e993404\",\n \"ffffd4fee391fec44ffe9929d95f0e993404\",\n \"ffffd4fee391fec44ffe9929ec7014cc4c028c2d04\",\n \"ffffe5fff7bcfee391fec44ffe9929ec7014cc4c028c2d04\",\n \"ffffe5fff7bcfee391fec44ffe9929ec7014cc4c02993404662506\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"ffeda0feb24cf03b20\",\n \"ffffb2fecc5cfd8d3ce31a1c\",\n \"ffffb2fecc5cfd8d3cf03b20bd0026\",\n \"ffffb2fed976feb24cfd8d3cf03b20bd0026\",\n \"ffffb2fed976feb24cfd8d3cfc4e2ae31a1cb10026\",\n \"ffffccffeda0fed976feb24cfd8d3cfc4e2ae31a1cb10026\",\n \"ffffccffeda0fed976feb24cfd8d3cfc4e2ae31a1cbd0026800026\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"deebf79ecae13182bd\",\n \"eff3ffbdd7e76baed62171b5\",\n \"eff3ffbdd7e76baed63182bd08519c\",\n \"eff3ffc6dbef9ecae16baed63182bd08519c\",\n \"eff3ffc6dbef9ecae16baed64292c62171b5084594\",\n \"f7fbffdeebf7c6dbef9ecae16baed64292c62171b5084594\",\n \"f7fbffdeebf7c6dbef9ecae16baed64292c62171b508519c08306b\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"e5f5e0a1d99b31a354\",\n \"edf8e9bae4b374c476238b45\",\n \"edf8e9bae4b374c47631a354006d2c\",\n \"edf8e9c7e9c0a1d99b74c47631a354006d2c\",\n \"edf8e9c7e9c0a1d99b74c47641ab5d238b45005a32\",\n \"f7fcf5e5f5e0c7e9c0a1d99b74c47641ab5d238b45005a32\",\n \"f7fcf5e5f5e0c7e9c0a1d99b74c47641ab5d238b45006d2c00441b\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"f0f0f0bdbdbd636363\",\n \"f7f7f7cccccc969696525252\",\n \"f7f7f7cccccc969696636363252525\",\n \"f7f7f7d9d9d9bdbdbd969696636363252525\",\n \"f7f7f7d9d9d9bdbdbd969696737373525252252525\",\n \"fffffff0f0f0d9d9d9bdbdbd969696737373525252252525\",\n \"fffffff0f0f0d9d9d9bdbdbd969696737373525252252525000000\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"efedf5bcbddc756bb1\",\n \"f2f0f7cbc9e29e9ac86a51a3\",\n \"f2f0f7cbc9e29e9ac8756bb154278f\",\n \"f2f0f7dadaebbcbddc9e9ac8756bb154278f\",\n \"f2f0f7dadaebbcbddc9e9ac8807dba6a51a34a1486\",\n \"fcfbfdefedf5dadaebbcbddc9e9ac8807dba6a51a34a1486\",\n \"fcfbfdefedf5dadaebbcbddc9e9ac8807dba6a51a354278f3f007d\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"fee0d2fc9272de2d26\",\n \"fee5d9fcae91fb6a4acb181d\",\n \"fee5d9fcae91fb6a4ade2d26a50f15\",\n \"fee5d9fcbba1fc9272fb6a4ade2d26a50f15\",\n \"fee5d9fcbba1fc9272fb6a4aef3b2ccb181d99000d\",\n \"fff5f0fee0d2fcbba1fc9272fb6a4aef3b2ccb181d99000d\",\n \"fff5f0fee0d2fcbba1fc9272fb6a4aef3b2ccb181da50f1567000d\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"fee6cefdae6be6550d\",\n \"feeddefdbe85fd8d3cd94701\",\n \"feeddefdbe85fd8d3ce6550da63603\",\n \"feeddefdd0a2fdae6bfd8d3ce6550da63603\",\n \"feeddefdd0a2fdae6bfd8d3cf16913d948018c2d04\",\n \"fff5ebfee6cefdd0a2fdae6bfd8d3cf16913d948018c2d04\",\n \"fff5ebfee6cefdd0a2fdae6bfd8d3cf16913d94801a636037f2704\"\n).map(colors);\n\nexport default ramp(scheme);\n","import {cubehelix} from \"d3-color\";\nimport {interpolateCubehelixLong} from \"d3-interpolate\";\n\nexport default interpolateCubehelixLong(cubehelix(300, 0.5, 0.0), cubehelix(-240, 0.5, 1.0));\n","import {cubehelix} from \"d3-color\";\nimport {interpolateCubehelixLong} from \"d3-interpolate\";\n\nexport var warm = interpolateCubehelixLong(cubehelix(-100, 0.75, 0.35), cubehelix(80, 1.50, 0.8));\n\nexport var cool = interpolateCubehelixLong(cubehelix(260, 0.75, 0.35), cubehelix(80, 1.50, 0.8));\n\nvar c = cubehelix();\n\nexport default function(t) {\n if (t < 0 || t > 1) t -= Math.floor(t);\n var ts = Math.abs(t - 0.5);\n c.h = 360 * t - 100;\n c.s = 1.5 - 1.5 * ts;\n c.l = 0.8 - 0.9 * ts;\n return c + \"\";\n}\n","import {rgb} from \"d3-color\";\n\nvar c = rgb(),\n pi_1_3 = Math.PI / 3,\n pi_2_3 = Math.PI * 2 / 3;\n\nexport default function(t) {\n var x;\n t = (0.5 - t) * Math.PI;\n c.r = 255 * (x = Math.sin(t)) * x;\n c.g = 255 * (x = Math.sin(t + pi_1_3)) * x;\n c.b = 255 * (x = Math.sin(t + pi_2_3)) * x;\n return c + \"\";\n}\n","import colors from \"../colors\";\n\nfunction ramp(range) {\n var n = range.length;\n return function(t) {\n return range[Math.max(0, Math.min(n - 1, Math.floor(t * n)))];\n };\n}\n\nexport default ramp(colors(\"44015444025645045745055946075a46085c460a5d460b5e470d60470e6147106347116447136548146748166848176948186a481a6c481b6d481c6e481d6f481f70482071482173482374482475482576482677482878482979472a7a472c7a472d7b472e7c472f7d46307e46327e46337f463480453581453781453882443983443a83443b84433d84433e85423f854240864241864142874144874045884046883f47883f48893e49893e4a893e4c8a3d4d8a3d4e8a3c4f8a3c508b3b518b3b528b3a538b3a548c39558c39568c38588c38598c375a8c375b8d365c8d365d8d355e8d355f8d34608d34618d33628d33638d32648e32658e31668e31678e31688e30698e306a8e2f6b8e2f6c8e2e6d8e2e6e8e2e6f8e2d708e2d718e2c718e2c728e2c738e2b748e2b758e2a768e2a778e2a788e29798e297a8e297b8e287c8e287d8e277e8e277f8e27808e26818e26828e26828e25838e25848e25858e24868e24878e23888e23898e238a8d228b8d228c8d228d8d218e8d218f8d21908d21918c20928c20928c20938c1f948c1f958b1f968b1f978b1f988b1f998a1f9a8a1e9b8a1e9c891e9d891f9e891f9f881fa0881fa1881fa1871fa28720a38620a48621a58521a68522a78522a88423a98324aa8325ab8225ac8226ad8127ad8128ae8029af7f2ab07f2cb17e2db27d2eb37c2fb47c31b57b32b67a34b67935b77937b87838b9773aba763bbb753dbc743fbc7340bd7242be7144bf7046c06f48c16e4ac16d4cc26c4ec36b50c46a52c56954c56856c66758c7655ac8645cc8635ec96260ca6063cb5f65cb5e67cc5c69cd5b6ccd5a6ece5870cf5773d05675d05477d1537ad1517cd2507fd34e81d34d84d44b86d54989d5488bd6468ed64590d74393d74195d84098d83e9bd93c9dd93ba0da39a2da37a5db36a8db34aadc32addc30b0dd2fb2dd2db5de2bb8de29bade28bddf26c0df25c2df23c5e021c8e020cae11fcde11dd0e11cd2e21bd5e21ad8e219dae319dde318dfe318e2e418e5e419e7e419eae51aece51befe51cf1e51df4e61ef6e620f8e621fbe723fde725\"));\n\nexport var magma = ramp(colors(\"00000401000501010601010802010902020b02020d03030f03031204041405041606051806051a07061c08071e0907200a08220b09240c09260d0a290e0b2b100b2d110c2f120d31130d34140e36150e38160f3b180f3d19103f1a10421c10441d11471e114920114b21114e22115024125325125527125829115a2a115c2c115f2d11612f116331116533106734106936106b38106c390f6e3b0f703d0f713f0f72400f74420f75440f764510774710784910784a10794c117a4e117b4f127b51127c52137c54137d56147d57157e59157e5a167e5c167f5d177f5f187f601880621980641a80651a80671b80681c816a1c816b1d816d1d816e1e81701f81721f817320817521817621817822817922827b23827c23827e24828025828125818326818426818627818827818928818b29818c29818e2a81902a81912b81932b80942c80962c80982d80992d809b2e7f9c2e7f9e2f7fa02f7fa1307ea3307ea5317ea6317da8327daa337dab337cad347cae347bb0357bb2357bb3367ab5367ab73779b83779ba3878bc3978bd3977bf3a77c03a76c23b75c43c75c53c74c73d73c83e73ca3e72cc3f71cd4071cf4070d0416fd2426fd3436ed5446dd6456cd8456cd9466bdb476adc4869de4968df4a68e04c67e24d66e34e65e44f64e55064e75263e85362e95462ea5661eb5760ec5860ed5a5fee5b5eef5d5ef05f5ef1605df2625df2645cf3655cf4675cf4695cf56b5cf66c5cf66e5cf7705cf7725cf8745cf8765cf9785df9795df97b5dfa7d5efa7f5efa815ffb835ffb8560fb8761fc8961fc8a62fc8c63fc8e64fc9065fd9266fd9467fd9668fd9869fd9a6afd9b6bfe9d6cfe9f6dfea16efea36ffea571fea772fea973feaa74feac76feae77feb078feb27afeb47bfeb67cfeb77efeb97ffebb81febd82febf84fec185fec287fec488fec68afec88cfeca8dfecc8ffecd90fecf92fed194fed395fed597fed799fed89afdda9cfddc9efddea0fde0a1fde2a3fde3a5fde5a7fde7a9fde9aafdebacfcecaefceeb0fcf0b2fcf2b4fcf4b6fcf6b8fcf7b9fcf9bbfcfbbdfcfdbf\"));\n\nexport var inferno = ramp(colors(\"00000401000501010601010802010a02020c02020e03021004031204031405041706041907051b08051d09061f0a07220b07240c08260d08290e092b10092d110a30120a32140b34150b37160b39180c3c190c3e1b0c411c0c431e0c451f0c48210c4a230c4c240c4f260c51280b53290b552b0b572d0b592f0a5b310a5c320a5e340a5f3609613809623909633b09643d09653e0966400a67420a68440a68450a69470b6a490b6a4a0c6b4c0c6b4d0d6c4f0d6c510e6c520e6d540f6d550f6d57106e59106e5a116e5c126e5d126e5f136e61136e62146e64156e65156e67166e69166e6a176e6c186e6d186e6f196e71196e721a6e741a6e751b6e771c6d781c6d7a1d6d7c1d6d7d1e6d7f1e6c801f6c82206c84206b85216b87216b88226a8a226a8c23698d23698f24699025689225689326679526679727669827669a28659b29649d29649f2a63a02a63a22b62a32c61a52c60a62d60a82e5fa92e5eab2f5ead305dae305cb0315bb1325ab3325ab43359b63458b73557b93556ba3655bc3754bd3853bf3952c03a51c13a50c33b4fc43c4ec63d4dc73e4cc83f4bca404acb4149cc4248ce4347cf4446d04545d24644d34743d44842d54a41d74b3fd84c3ed94d3dda4e3cdb503bdd513ade5238df5337e05536e15635e25734e35933e45a31e55c30e65d2fe75e2ee8602de9612bea632aeb6429eb6628ec6726ed6925ee6a24ef6c23ef6e21f06f20f1711ff1731df2741cf3761bf37819f47918f57b17f57d15f67e14f68013f78212f78410f8850ff8870ef8890cf98b0bf98c0af98e09fa9008fa9207fa9407fb9606fb9706fb9906fb9b06fb9d07fc9f07fca108fca309fca50afca60cfca80dfcaa0ffcac11fcae12fcb014fcb216fcb418fbb61afbb81dfbba1ffbbc21fbbe23fac026fac228fac42afac62df9c72ff9c932f9cb35f8cd37f8cf3af7d13df7d340f6d543f6d746f5d949f5db4cf4dd4ff4df53f4e156f3e35af3e55df2e661f2e865f2ea69f1ec6df1ed71f1ef75f1f179f2f27df2f482f3f586f3f68af4f88ef5f992f6fa96f8fb9af9fc9dfafda1fcffa4\"));\n\nexport var plasma = ramp(colors(\"0d088710078813078916078a19068c1b068d1d068e20068f2206902406912605912805922a05932c05942e05952f059631059733059735049837049938049a3a049a3c049b3e049c3f049c41049d43039e44039e46039f48039f4903a04b03a14c02a14e02a25002a25102a35302a35502a45601a45801a45901a55b01a55c01a65e01a66001a66100a76300a76400a76600a76700a86900a86a00a86c00a86e00a86f00a87100a87201a87401a87501a87701a87801a87a02a87b02a87d03a87e03a88004a88104a78305a78405a78606a68707a68808a68a09a58b0aa58d0ba58e0ca48f0da4910ea3920fa39410a29511a19613a19814a099159f9a169f9c179e9d189d9e199da01a9ca11b9ba21d9aa31e9aa51f99a62098a72197a82296aa2395ab2494ac2694ad2793ae2892b02991b12a90b22b8fb32c8eb42e8db52f8cb6308bb7318ab83289ba3388bb3488bc3587bd3786be3885bf3984c03a83c13b82c23c81c33d80c43e7fc5407ec6417dc7427cc8437bc9447aca457acb4679cc4778cc4977cd4a76ce4b75cf4c74d04d73d14e72d24f71d35171d45270d5536fd5546ed6556dd7566cd8576bd9586ada5a6ada5b69db5c68dc5d67dd5e66de5f65de6164df6263e06363e16462e26561e26660e3685fe4695ee56a5de56b5de66c5ce76e5be76f5ae87059e97158e97257ea7457eb7556eb7655ec7754ed7953ed7a52ee7b51ef7c51ef7e50f07f4ff0804ef1814df1834cf2844bf3854bf3874af48849f48948f58b47f58c46f68d45f68f44f79044f79143f79342f89441f89540f9973ff9983ef99a3efa9b3dfa9c3cfa9e3bfb9f3afba139fba238fca338fca537fca636fca835fca934fdab33fdac33fdae32fdaf31fdb130fdb22ffdb42ffdb52efeb72dfeb82cfeba2cfebb2bfebd2afebe2afec029fdc229fdc328fdc527fdc627fdc827fdca26fdcb26fccd25fcce25fcd025fcd225fbd324fbd524fbd724fad824fada24f9dc24f9dd25f8df25f8e125f7e225f7e425f6e626f6e826f5e926f5eb27f4ed27f3ee27f3f027f2f227f1f426f1f525f0f724f0f921\"));\n","const ReservedFields = {\n ROW_ID: '__id__'\n};\n\nexport default ReservedFields;\n","const CommonProps = {\n ACTION_INF: 'actionInf',\n ON_LAYER_DRAW: 'onlayerdraw'\n};\n\nexport default CommonProps;\n","export var slice = Array.prototype.slice;\n","export default function(x) {\n return x;\n}\n","import {slice} from \"./array\";\nimport identity from \"./identity\";\n\nvar top = 1,\n right = 2,\n bottom = 3,\n left = 4,\n epsilon = 1e-6;\n\nfunction translateX(x) {\n return \"translate(\" + (x + 0.5) + \",0)\";\n}\n\nfunction translateY(y) {\n return \"translate(0,\" + (y + 0.5) + \")\";\n}\n\nfunction number(scale) {\n return function(d) {\n return +scale(d);\n };\n}\n\nfunction center(scale) {\n var offset = Math.max(0, scale.bandwidth() - 1) / 2; // Adjust for 0.5px offset.\n if (scale.round()) offset = Math.round(offset);\n return function(d) {\n return +scale(d) + offset;\n };\n}\n\nfunction entering() {\n return !this.__axis;\n}\n\nfunction axis(orient, scale) {\n var tickArguments = [],\n tickValues = null,\n tickFormat = null,\n tickTransform = null,\n tickSizeInner = 6,\n tickSizeOuter = 6,\n tickPadding = 3,\n k = orient === top || orient === left ? -1 : 1,\n x = orient === left || orient === right ? \"x\" : \"y\",\n transform = orient === top || orient === bottom ? translateX : translateY;\n\n function axis(context) {\n var values = tickValues == null ? (scale.ticks ? scale.ticks.apply(scale, tickArguments) : scale.domain()) : tickValues,\n format = tickFormat == null ? (scale.tickFormat ? scale.tickFormat.apply(scale, tickArguments) : identity) : tickFormat,\n spacing = Math.max(tickSizeInner, 0) + tickPadding,\n range = scale.range(),\n range0 = +range[0] + 0.5,\n range1 = +range[range.length - 1] + 0.5,\n position = (scale.bandwidth ? center : number)(scale.copy()),\n selection = context.selection ? context.selection() : context,\n path = selection.selectAll(\".domain\").data([null]),\n tick = selection.selectAll(\".tick\").data(values, scale).order(),\n tickExit = tick.exit(),\n tickEnter = tick.enter().append(\"g\").attr(\"class\", \"tick\"),\n line = tick.select(\"line\"),\n text = tick.select(\"text\");\n\n path = path.merge(path.enter().insert(\"path\", \".tick\")\n .attr(\"class\", \"domain\")\n .attr(\"stroke\", \"#000\"));\n\n tick = tick.merge(tickEnter);\n\n line = line.merge(tickEnter.append(\"line\")\n .attr(\"stroke\", \"#000\")\n .attr(x + \"2\", k * tickSizeInner));\n\n text = text.merge(tickEnter.append(\"text\")\n .attr(\"fill\", \"#000\")\n .attr(x, k * spacing)\n .attr(\"dy\", orient === top ? \"0em\" : orient === bottom ? \"0.71em\" : \"0.32em\"))\n .style('transform', tickTransform);\n\n if (context !== selection) {\n path = path.transition(context);\n tick = tick.transition(context);\n line = line.transition(context);\n text = text.transition(context);\n\n tickExit = tickExit.transition(context)\n .attr(\"opacity\", epsilon)\n .attr(\"transform\", function(d) { return isFinite(d = position(d)) ? transform(d) : this.getAttribute(\"transform\"); });\n\n tickEnter\n .attr(\"opacity\", epsilon)\n .attr(\"transform\", function(d) { var p = this.parentNode.__axis; return transform(p && isFinite(p = p(d)) ? p : position(d)); });\n }\n\n tickExit.remove();\n\n path\n .attr(\"d\", orient === left || orient == right\n ? \"M\" + k * tickSizeOuter + \",\" + range0 + \"H0.5V\" + range1 + \"H\" + k * tickSizeOuter\n : \"M\" + range0 + \",\" + k * tickSizeOuter + \"V0.5H\" + range1 + \"V\" + k * tickSizeOuter);\n\n tick\n .attr(\"opacity\", 1)\n .attr(\"transform\", function(d) { return transform(position(d)); });\n\n line\n .attr(x + \"2\", k * tickSizeInner);\n\n text\n .attr(x, k * spacing)\n .text(format);\n\n selection.filter(entering)\n .attr(\"fill\", \"none\")\n .attr(\"font-size\", 10)\n .attr(\"font-family\", \"sans-serif\")\n .attr(\"text-anchor\", orient === right ? \"start\" : orient === left ? \"end\" : \"middle\");\n\n selection\n .each(function() { this.__axis = position; });\n }\n\n axis.scale = function(_) {\n return arguments.length ? (scale = _, axis) : scale;\n };\n\n axis.tickTransform = function(_) {\n return arguments.length ? (tickTransform = _, axis) : tickTransform;\n };\n\n axis.ticks = function() {\n return tickArguments = slice.call(arguments), axis;\n };\n\n axis.tickArguments = function(_) {\n return arguments.length ? (tickArguments = _ == null ? [] : slice.call(_), axis) : tickArguments.slice();\n };\n\n axis.tickValues = function(_) {\n return arguments.length ? (tickValues = _ == null ? null : slice.call(_), axis) : tickValues && tickValues.slice();\n };\n\n axis.tickFormat = function(_) {\n return arguments.length ? (tickFormat = _, axis) : tickFormat;\n };\n\n axis.tickSize = function(_) {\n return arguments.length ? (tickSizeInner = tickSizeOuter = +_, axis) : tickSizeInner;\n };\n\n axis.tickSizeInner = function(_) {\n return arguments.length ? (tickSizeInner = +_, axis) : tickSizeInner;\n };\n\n axis.tickSizeOuter = function(_) {\n return arguments.length ? (tickSizeOuter = +_, axis) : tickSizeOuter;\n };\n\n axis.tickPadding = function(_) {\n return arguments.length ? (tickPadding = +_, axis) : tickPadding;\n };\n\n return axis;\n}\n\nexport function axisTop(scale) {\n return axis(top, scale);\n}\n\nexport function axisRight(scale) {\n return axis(right, scale);\n}\n\nexport function axisBottom(scale) {\n return axis(bottom, scale);\n}\n\nexport function axisLeft(scale) {\n return axis(left, scale);\n}\n","var pi = Math.PI,\n tau = 2 * pi,\n epsilon = 1e-6,\n tauEpsilon = tau - epsilon;\n\nfunction Path() {\n this._x0 = this._y0 = // start of current subpath\n this._x1 = this._y1 = null; // end of current subpath\n this._ = \"\";\n}\n\nfunction path() {\n return new Path;\n}\n\nPath.prototype = path.prototype = {\n constructor: Path,\n moveTo: function(x, y) {\n this._ += \"M\" + (this._x0 = this._x1 = +x) + \",\" + (this._y0 = this._y1 = +y);\n },\n closePath: function() {\n if (this._x1 !== null) {\n this._x1 = this._x0, this._y1 = this._y0;\n this._ += \"Z\";\n }\n },\n lineTo: function(x, y) {\n this._ += \"L\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n },\n quadraticCurveTo: function(x1, y1, x, y) {\n this._ += \"Q\" + (+x1) + \",\" + (+y1) + \",\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n },\n bezierCurveTo: function(x1, y1, x2, y2, x, y) {\n this._ += \"C\" + (+x1) + \",\" + (+y1) + \",\" + (+x2) + \",\" + (+y2) + \",\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n },\n arcTo: function(x1, y1, x2, y2, r) {\n x1 = +x1, y1 = +y1, x2 = +x2, y2 = +y2, r = +r;\n var x0 = this._x1,\n y0 = this._y1,\n x21 = x2 - x1,\n y21 = y2 - y1,\n x01 = x0 - x1,\n y01 = y0 - y1,\n l01_2 = x01 * x01 + y01 * y01;\n\n // Is the radius negative? Error.\n if (r < 0) throw new Error(\"negative radius: \" + r);\n\n // Is this path empty? Move to (x1,y1).\n if (this._x1 === null) {\n this._ += \"M\" + (this._x1 = x1) + \",\" + (this._y1 = y1);\n }\n\n // Or, is (x1,y1) coincident with (x0,y0)? Do nothing.\n else if (!(l01_2 > epsilon));\n\n // Or, are (x0,y0), (x1,y1) and (x2,y2) collinear?\n // Equivalently, is (x1,y1) coincident with (x2,y2)?\n // Or, is the radius zero? Line to (x1,y1).\n else if (!(Math.abs(y01 * x21 - y21 * x01) > epsilon) || !r) {\n this._ += \"L\" + (this._x1 = x1) + \",\" + (this._y1 = y1);\n }\n\n // Otherwise, draw an arc!\n else {\n var x20 = x2 - x0,\n y20 = y2 - y0,\n l21_2 = x21 * x21 + y21 * y21,\n l20_2 = x20 * x20 + y20 * y20,\n l21 = Math.sqrt(l21_2),\n l01 = Math.sqrt(l01_2),\n l = r * Math.tan((pi - Math.acos((l21_2 + l01_2 - l20_2) / (2 * l21 * l01))) / 2),\n t01 = l / l01,\n t21 = l / l21;\n\n // If the start tangent is not coincident with (x0,y0), line to.\n if (Math.abs(t01 - 1) > epsilon) {\n this._ += \"L\" + (x1 + t01 * x01) + \",\" + (y1 + t01 * y01);\n }\n\n this._ += \"A\" + r + \",\" + r + \",0,0,\" + (+(y01 * x20 > x01 * y20)) + \",\" + (this._x1 = x1 + t21 * x21) + \",\" + (this._y1 = y1 + t21 * y21);\n }\n },\n arc: function(x, y, r, a0, a1, ccw) {\n x = +x, y = +y, r = +r;\n var dx = r * Math.cos(a0),\n dy = r * Math.sin(a0),\n x0 = x + dx,\n y0 = y + dy,\n cw = 1 ^ ccw,\n da = ccw ? a0 - a1 : a1 - a0;\n\n // Is the radius negative? Error.\n if (r < 0) throw new Error(\"negative radius: \" + r);\n\n // Is this path empty? Move to (x0,y0).\n if (this._x1 === null) {\n this._ += \"M\" + x0 + \",\" + y0;\n }\n\n // Or, is (x0,y0) not coincident with the previous point? Line to (x0,y0).\n else if (Math.abs(this._x1 - x0) > epsilon || Math.abs(this._y1 - y0) > epsilon) {\n this._ += \"L\" + x0 + \",\" + y0;\n }\n\n // Is this arc empty? We’re done.\n if (!r) return;\n\n // Does the angle go the wrong way? Flip the direction.\n if (da < 0) da = da % tau + tau;\n\n // Is this a complete circle? Draw two arcs to complete the circle.\n if (da > tauEpsilon) {\n this._ += \"A\" + r + \",\" + r + \",0,1,\" + cw + \",\" + (x - dx) + \",\" + (y - dy) + \"A\" + r + \",\" + r + \",0,1,\" + cw + \",\" + (this._x1 = x0) + \",\" + (this._y1 = y0);\n }\n\n // Is this arc non-empty? Draw an arc!\n else if (da > epsilon) {\n this._ += \"A\" + r + \",\" + r + \",0,\" + (+(da >= pi)) + \",\" + cw + \",\" + (this._x1 = x + r * Math.cos(a1)) + \",\" + (this._y1 = y + r * Math.sin(a1));\n }\n },\n rect: function(x, y, w, h) {\n this._ += \"M\" + (this._x0 = this._x1 = +x) + \",\" + (this._y0 = this._y1 = +y) + \"h\" + (+w) + \"v\" + (+h) + \"h\" + (-w) + \"Z\";\n },\n toString: function() {\n return this._;\n }\n};\n\nexport default path;\n","export default function(x) {\n return function constant() {\n return x;\n };\n}\n","export var abs = Math.abs;\nexport var atan2 = Math.atan2;\nexport var cos = Math.cos;\nexport var max = Math.max;\nexport var min = Math.min;\nexport var sin = Math.sin;\nexport var sqrt = Math.sqrt;\n\nexport var epsilon = 1e-12;\nexport var pi = Math.PI;\nexport var halfPi = pi / 2;\nexport var tau = 2 * pi;\n\nexport function acos(x) {\n return x > 1 ? 0 : x < -1 ? pi : Math.acos(x);\n}\n\nexport function asin(x) {\n return x >= 1 ? halfPi : x <= -1 ? -halfPi : Math.asin(x);\n}\n","import {path} from \"d3-path\";\nimport constant from \"./constant\";\nimport {abs, acos, asin, atan2, cos, epsilon, halfPi, max, min, pi, sin, sqrt, tau} from \"./math\";\n\nfunction arcInnerRadius(d) {\n return d.innerRadius;\n}\n\nfunction arcOuterRadius(d) {\n return d.outerRadius;\n}\n\nfunction arcStartAngle(d) {\n return d.startAngle;\n}\n\nfunction arcEndAngle(d) {\n return d.endAngle;\n}\n\nfunction arcPadAngle(d) {\n return d && d.padAngle; // Note: optional!\n}\n\nfunction intersect(x0, y0, x1, y1, x2, y2, x3, y3) {\n var x10 = x1 - x0, y10 = y1 - y0,\n x32 = x3 - x2, y32 = y3 - y2,\n t = (x32 * (y0 - y2) - y32 * (x0 - x2)) / (y32 * x10 - x32 * y10);\n return [x0 + t * x10, y0 + t * y10];\n}\n\n// Compute perpendicular offset line of length rc.\n// http://mathworld.wolfram.com/Circle-LineIntersection.html\nfunction cornerTangents(x0, y0, x1, y1, r1, rc, cw) {\n var x01 = x0 - x1,\n y01 = y0 - y1,\n lo = (cw ? rc : -rc) / sqrt(x01 * x01 + y01 * y01),\n ox = lo * y01,\n oy = -lo * x01,\n x11 = x0 + ox,\n y11 = y0 + oy,\n x10 = x1 + ox,\n y10 = y1 + oy,\n x00 = (x11 + x10) / 2,\n y00 = (y11 + y10) / 2,\n dx = x10 - x11,\n dy = y10 - y11,\n d2 = dx * dx + dy * dy,\n r = r1 - rc,\n D = x11 * y10 - x10 * y11,\n d = (dy < 0 ? -1 : 1) * sqrt(max(0, r * r * d2 - D * D)),\n cx0 = (D * dy - dx * d) / d2,\n cy0 = (-D * dx - dy * d) / d2,\n cx1 = (D * dy + dx * d) / d2,\n cy1 = (-D * dx + dy * d) / d2,\n dx0 = cx0 - x00,\n dy0 = cy0 - y00,\n dx1 = cx1 - x00,\n dy1 = cy1 - y00;\n\n // Pick the closer of the two intersection points.\n // TODO Is there a faster way to determine which intersection to use?\n if (dx0 * dx0 + dy0 * dy0 > dx1 * dx1 + dy1 * dy1) cx0 = cx1, cy0 = cy1;\n\n return {\n cx: cx0,\n cy: cy0,\n x01: -ox,\n y01: -oy,\n x11: cx0 * (r1 / r - 1),\n y11: cy0 * (r1 / r - 1)\n };\n}\n\nexport default function() {\n var innerRadius = arcInnerRadius,\n outerRadius = arcOuterRadius,\n cornerRadius = constant(0),\n padRadius = null,\n startAngle = arcStartAngle,\n endAngle = arcEndAngle,\n padAngle = arcPadAngle,\n context = null;\n\n function arc() {\n var buffer,\n r,\n r0 = +innerRadius.apply(this, arguments),\n r1 = +outerRadius.apply(this, arguments),\n a0 = startAngle.apply(this, arguments) - halfPi,\n a1 = endAngle.apply(this, arguments) - halfPi,\n da = abs(a1 - a0),\n cw = a1 > a0;\n\n if (!context) context = buffer = path();\n\n // Ensure that the outer radius is always larger than the inner radius.\n if (r1 < r0) r = r1, r1 = r0, r0 = r;\n\n // Is it a point?\n if (!(r1 > epsilon)) context.moveTo(0, 0);\n\n // Or is it a circle or annulus?\n else if (da > tau - epsilon) {\n context.moveTo(r1 * cos(a0), r1 * sin(a0));\n context.arc(0, 0, r1, a0, a1, !cw);\n if (r0 > epsilon) {\n context.moveTo(r0 * cos(a1), r0 * sin(a1));\n context.arc(0, 0, r0, a1, a0, cw);\n }\n }\n\n // Or is it a circular or annular sector?\n else {\n var a01 = a0,\n a11 = a1,\n a00 = a0,\n a10 = a1,\n da0 = da,\n da1 = da,\n ap = padAngle.apply(this, arguments) / 2,\n rp = (ap > epsilon) && (padRadius ? +padRadius.apply(this, arguments) : sqrt(r0 * r0 + r1 * r1)),\n rc = min(abs(r1 - r0) / 2, +cornerRadius.apply(this, arguments)),\n rc0 = rc,\n rc1 = rc,\n t0,\n t1;\n\n // Apply padding? Note that since r1 ≥ r0, da1 ≥ da0.\n if (rp > epsilon) {\n var p0 = asin(rp / r0 * sin(ap)),\n p1 = asin(rp / r1 * sin(ap));\n if ((da0 -= p0 * 2) > epsilon) p0 *= (cw ? 1 : -1), a00 += p0, a10 -= p0;\n else da0 = 0, a00 = a10 = (a0 + a1) / 2;\n if ((da1 -= p1 * 2) > epsilon) p1 *= (cw ? 1 : -1), a01 += p1, a11 -= p1;\n else da1 = 0, a01 = a11 = (a0 + a1) / 2;\n }\n\n var x01 = r1 * cos(a01),\n y01 = r1 * sin(a01),\n x10 = r0 * cos(a10),\n y10 = r0 * sin(a10);\n\n // Apply rounded corners?\n if (rc > epsilon) {\n var x11 = r1 * cos(a11),\n y11 = r1 * sin(a11),\n x00 = r0 * cos(a00),\n y00 = r0 * sin(a00);\n\n // Restrict the corner radius according to the sector angle.\n if (da < pi) {\n var oc = da0 > epsilon ? intersect(x01, y01, x00, y00, x11, y11, x10, y10) : [x10, y10],\n ax = x01 - oc[0],\n ay = y01 - oc[1],\n bx = x11 - oc[0],\n by = y11 - oc[1],\n kc = 1 / sin(acos((ax * bx + ay * by) / (sqrt(ax * ax + ay * ay) * sqrt(bx * bx + by * by))) / 2),\n lc = sqrt(oc[0] * oc[0] + oc[1] * oc[1]);\n rc0 = min(rc, (r0 - lc) / (kc - 1));\n rc1 = min(rc, (r1 - lc) / (kc + 1));\n }\n }\n\n // Is the sector collapsed to a line?\n if (!(da1 > epsilon)) context.moveTo(x01, y01);\n\n // Does the sector’s outer ring have rounded corners?\n else if (rc1 > epsilon) {\n t0 = cornerTangents(x00, y00, x01, y01, r1, rc1, cw);\n t1 = cornerTangents(x11, y11, x10, y10, r1, rc1, cw);\n\n context.moveTo(t0.cx + t0.x01, t0.cy + t0.y01);\n\n // Have the corners merged?\n if (rc1 < rc) context.arc(t0.cx, t0.cy, rc1, atan2(t0.y01, t0.x01), atan2(t1.y01, t1.x01), !cw);\n\n // Otherwise, draw the two corners and the ring.\n else {\n context.arc(t0.cx, t0.cy, rc1, atan2(t0.y01, t0.x01), atan2(t0.y11, t0.x11), !cw);\n context.arc(0, 0, r1, atan2(t0.cy + t0.y11, t0.cx + t0.x11), atan2(t1.cy + t1.y11, t1.cx + t1.x11), !cw);\n context.arc(t1.cx, t1.cy, rc1, atan2(t1.y11, t1.x11), atan2(t1.y01, t1.x01), !cw);\n }\n }\n\n // Or is the outer ring just a circular arc?\n else context.moveTo(x01, y01), context.arc(0, 0, r1, a01, a11, !cw);\n\n // Is there no inner ring, and it’s a circular sector?\n // Or perhaps it’s an annular sector collapsed due to padding?\n if (!(r0 > epsilon) || !(da0 > epsilon)) context.lineTo(x10, y10);\n\n // Does the sector’s inner ring (or point) have rounded corners?\n else if (rc0 > epsilon) {\n t0 = cornerTangents(x10, y10, x11, y11, r0, -rc0, cw);\n t1 = cornerTangents(x01, y01, x00, y00, r0, -rc0, cw);\n\n context.lineTo(t0.cx + t0.x01, t0.cy + t0.y01);\n\n // Have the corners merged?\n if (rc0 < rc) context.arc(t0.cx, t0.cy, rc0, atan2(t0.y01, t0.x01), atan2(t1.y01, t1.x01), !cw);\n\n // Otherwise, draw the two corners and the ring.\n else {\n context.arc(t0.cx, t0.cy, rc0, atan2(t0.y01, t0.x01), atan2(t0.y11, t0.x11), !cw);\n context.arc(0, 0, r0, atan2(t0.cy + t0.y11, t0.cx + t0.x11), atan2(t1.cy + t1.y11, t1.cx + t1.x11), cw);\n context.arc(t1.cx, t1.cy, rc0, atan2(t1.y11, t1.x11), atan2(t1.y01, t1.x01), !cw);\n }\n }\n\n // Or is the inner ring just a circular arc?\n else context.arc(0, 0, r0, a10, a00, cw);\n }\n\n context.closePath();\n\n if (buffer) return context = null, buffer + \"\" || null;\n }\n\n arc.centroid = function() {\n var r = (+innerRadius.apply(this, arguments) + +outerRadius.apply(this, arguments)) / 2,\n a = (+startAngle.apply(this, arguments) + +endAngle.apply(this, arguments)) / 2 - pi / 2;\n return [cos(a) * r, sin(a) * r];\n };\n\n arc.innerRadius = function(_) {\n return arguments.length ? (innerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : innerRadius;\n };\n\n arc.outerRadius = function(_) {\n return arguments.length ? (outerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : outerRadius;\n };\n\n arc.cornerRadius = function(_) {\n return arguments.length ? (cornerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : cornerRadius;\n };\n\n arc.padRadius = function(_) {\n return arguments.length ? (padRadius = _ == null ? null : typeof _ === \"function\" ? _ : constant(+_), arc) : padRadius;\n };\n\n arc.startAngle = function(_) {\n return arguments.length ? (startAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : startAngle;\n };\n\n arc.endAngle = function(_) {\n return arguments.length ? (endAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : endAngle;\n };\n\n arc.padAngle = function(_) {\n return arguments.length ? (padAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : padAngle;\n };\n\n arc.context = function(_) {\n return arguments.length ? ((context = _ == null ? null : _), arc) : context;\n };\n\n return arc;\n}\n","function Linear(context) {\n this._context = context;\n}\n\nLinear.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; // proceed\n default: this._context.lineTo(x, y); break;\n }\n }\n};\n\nexport default function(context) {\n return new Linear(context);\n}\n","export function x(p) {\n return p[0];\n}\n\nexport function y(p) {\n return p[1];\n}\n","import {path} from \"d3-path\";\nimport constant from \"./constant\";\nimport curveLinear from \"./curve/linear\";\nimport {x as pointX, y as pointY} from \"./point\";\n\nexport default function() {\n var x = pointX,\n y = pointY,\n defined = constant(true),\n context = null,\n curve = curveLinear,\n output = null;\n\n function line(data) {\n var i,\n n = data.length,\n d,\n defined0 = false,\n buffer;\n\n if (context == null) output = curve(buffer = path());\n\n for (i = 0; i <= n; ++i) {\n if (!(i < n && defined(d = data[i], i, data)) === defined0) {\n if (defined0 = !defined0) output.lineStart();\n else output.lineEnd();\n }\n if (defined0) output.point(+x(d, i, data), +y(d, i, data));\n }\n\n if (buffer) return output = null, buffer + \"\" || null;\n }\n\n line.x = function(_) {\n return arguments.length ? (x = typeof _ === \"function\" ? _ : constant(+_), line) : x;\n };\n\n line.y = function(_) {\n return arguments.length ? (y = typeof _ === \"function\" ? _ : constant(+_), line) : y;\n };\n\n line.defined = function(_) {\n return arguments.length ? (defined = typeof _ === \"function\" ? _ : constant(!!_), line) : defined;\n };\n\n line.curve = function(_) {\n return arguments.length ? (curve = _, context != null && (output = curve(context)), line) : curve;\n };\n\n line.context = function(_) {\n return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), line) : context;\n };\n\n return line;\n}\n","import {path} from \"d3-path\";\nimport constant from \"./constant\";\nimport curveLinear from \"./curve/linear\";\nimport line from \"./line\";\nimport {x as pointX, y as pointY} from \"./point\";\n\nexport default function() {\n var x0 = pointX,\n x1 = null,\n y0 = constant(0),\n y1 = pointY,\n defined = constant(true),\n context = null,\n curve = curveLinear,\n output = null;\n\n function area(data) {\n var i,\n j,\n k,\n n = data.length,\n d,\n defined0 = false,\n buffer,\n x0z = new Array(n),\n y0z = new Array(n);\n\n if (context == null) output = curve(buffer = path());\n\n for (i = 0; i <= n; ++i) {\n if (!(i < n && defined(d = data[i], i, data)) === defined0) {\n if (defined0 = !defined0) {\n j = i;\n output.areaStart();\n output.lineStart();\n } else {\n output.lineEnd();\n output.lineStart();\n for (k = i - 1; k >= j; --k) {\n output.point(x0z[k], y0z[k]);\n }\n output.lineEnd();\n output.areaEnd();\n }\n }\n if (defined0) {\n x0z[i] = +x0(d, i, data), y0z[i] = +y0(d, i, data);\n output.point(x1 ? +x1(d, i, data) : x0z[i], y1 ? +y1(d, i, data) : y0z[i]);\n }\n }\n\n if (buffer) return output = null, buffer + \"\" || null;\n }\n\n function arealine() {\n return line().defined(defined).curve(curve).context(context);\n }\n\n area.x = function(_) {\n return arguments.length ? (x0 = typeof _ === \"function\" ? _ : constant(+_), x1 = null, area) : x0;\n };\n\n area.x0 = function(_) {\n return arguments.length ? (x0 = typeof _ === \"function\" ? _ : constant(+_), area) : x0;\n };\n\n area.x1 = function(_) {\n return arguments.length ? (x1 = _ == null ? null : typeof _ === \"function\" ? _ : constant(+_), area) : x1;\n };\n\n area.y = function(_) {\n return arguments.length ? (y0 = typeof _ === \"function\" ? _ : constant(+_), y1 = null, area) : y0;\n };\n\n area.y0 = function(_) {\n return arguments.length ? (y0 = typeof _ === \"function\" ? _ : constant(+_), area) : y0;\n };\n\n area.y1 = function(_) {\n return arguments.length ? (y1 = _ == null ? null : typeof _ === \"function\" ? _ : constant(+_), area) : y1;\n };\n\n area.lineX0 =\n area.lineY0 = function() {\n return arealine().x(x0).y(y0);\n };\n\n area.lineY1 = function() {\n return arealine().x(x0).y(y1);\n };\n\n area.lineX1 = function() {\n return arealine().x(x1).y(y0);\n };\n\n area.defined = function(_) {\n return arguments.length ? (defined = typeof _ === \"function\" ? _ : constant(!!_), area) : defined;\n };\n\n area.curve = function(_) {\n return arguments.length ? (curve = _, context != null && (output = curve(context)), area) : curve;\n };\n\n area.context = function(_) {\n return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), area) : context;\n };\n\n return area;\n}\n","export default function(a, b) {\n return b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN;\n}\n","export default function(d) {\n return d;\n}\n","import curveLinear from \"./linear\";\n\nexport var curveRadialLinear = curveRadial(curveLinear);\n\nfunction Radial(curve) {\n this._curve = curve;\n}\n\nRadial.prototype = {\n areaStart: function() {\n this._curve.areaStart();\n },\n areaEnd: function() {\n this._curve.areaEnd();\n },\n lineStart: function() {\n this._curve.lineStart();\n },\n lineEnd: function() {\n this._curve.lineEnd();\n },\n point: function(a, r) {\n this._curve.point(r * Math.sin(a), r * -Math.cos(a));\n }\n};\n\nexport default function curveRadial(curve) {\n\n function radial(context) {\n return new Radial(curve(context));\n }\n\n radial._curve = curve;\n\n return radial;\n}\n","import curveRadial, {curveRadialLinear} from \"./curve/radial\";\nimport line from \"./line\";\n\nexport function lineRadial(l) {\n var c = l.curve;\n\n l.angle = l.x, delete l.x;\n l.radius = l.y, delete l.y;\n\n l.curve = function(_) {\n return arguments.length ? c(curveRadial(_)) : c()._curve;\n };\n\n return l;\n}\n\nexport default function() {\n return lineRadial(line().curve(curveRadialLinear));\n}\n","export var slice = Array.prototype.slice;\n","import {pi, tau} from \"../math\";\n\nexport default {\n draw: function(context, size) {\n var r = Math.sqrt(size / pi);\n context.moveTo(r, 0);\n context.arc(0, 0, r, 0, tau);\n }\n};\n","export default {\n draw: function(context, size) {\n var r = Math.sqrt(size / 5) / 2;\n context.moveTo(-3 * r, -r);\n context.lineTo(-r, -r);\n context.lineTo(-r, -3 * r);\n context.lineTo(r, -3 * r);\n context.lineTo(r, -r);\n context.lineTo(3 * r, -r);\n context.lineTo(3 * r, r);\n context.lineTo(r, r);\n context.lineTo(r, 3 * r);\n context.lineTo(-r, 3 * r);\n context.lineTo(-r, r);\n context.lineTo(-3 * r, r);\n context.closePath();\n }\n};\n","var tan30 = Math.sqrt(1 / 3),\n tan30_2 = tan30 * 2;\n\nexport default {\n draw: function(context, size) {\n var y = Math.sqrt(size / tan30_2),\n x = y * tan30;\n context.moveTo(0, -y);\n context.lineTo(x, 0);\n context.lineTo(0, y);\n context.lineTo(-x, 0);\n context.closePath();\n }\n};\n","import {pi, tau} from \"../math\";\n\nvar ka = 0.89081309152928522810,\n kr = Math.sin(pi / 10) / Math.sin(7 * pi / 10),\n kx = Math.sin(tau / 10) * kr,\n ky = -Math.cos(tau / 10) * kr;\n\nexport default {\n draw: function(context, size) {\n var r = Math.sqrt(size * ka),\n x = kx * r,\n y = ky * r;\n context.moveTo(0, -r);\n context.lineTo(x, y);\n for (var i = 1; i < 5; ++i) {\n var a = tau * i / 5,\n c = Math.cos(a),\n s = Math.sin(a);\n context.lineTo(s * r, -c * r);\n context.lineTo(c * x - s * y, s * x + c * y);\n }\n context.closePath();\n }\n};\n","export default {\n draw: function(context, size) {\n var w = Math.sqrt(size),\n x = -w / 2;\n context.rect(x, x, w, w);\n }\n};\n","var sqrt3 = Math.sqrt(3);\n\nexport default {\n draw: function(context, size) {\n var y = -Math.sqrt(size / (sqrt3 * 3));\n context.moveTo(0, y * 2);\n context.lineTo(-sqrt3 * y, -y);\n context.lineTo(sqrt3 * y, -y);\n context.closePath();\n }\n};\n","var c = -0.5,\n s = Math.sqrt(3) / 2,\n k = 1 / Math.sqrt(12),\n a = (k / 2 + 1) * 3;\n\nexport default {\n draw: function(context, size) {\n var r = Math.sqrt(size / a),\n x0 = r / 2,\n y0 = r * k,\n x1 = x0,\n y1 = r * k + r,\n x2 = -x1,\n y2 = y1;\n context.moveTo(x0, y0);\n context.lineTo(x1, y1);\n context.lineTo(x2, y2);\n context.lineTo(c * x0 - s * y0, s * x0 + c * y0);\n context.lineTo(c * x1 - s * y1, s * x1 + c * y1);\n context.lineTo(c * x2 - s * y2, s * x2 + c * y2);\n context.lineTo(c * x0 + s * y0, c * y0 - s * x0);\n context.lineTo(c * x1 + s * y1, c * y1 - s * x1);\n context.lineTo(c * x2 + s * y2, c * y2 - s * x2);\n context.closePath();\n }\n};\n","export default function() {}\n","export function point(that, x, y) {\n that._context.bezierCurveTo(\n (2 * that._x0 + that._x1) / 3,\n (2 * that._y0 + that._y1) / 3,\n (that._x0 + 2 * that._x1) / 3,\n (that._y0 + 2 * that._y1) / 3,\n (that._x0 + 4 * that._x1 + x) / 6,\n (that._y0 + 4 * that._y1 + y) / 6\n );\n}\n\nexport function Basis(context) {\n this._context = context;\n}\n\nBasis.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 =\n this._y0 = this._y1 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 3: point(this, this._x1, this._y1); // proceed\n case 2: this._context.lineTo(this._x1, this._y1); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; this._context.lineTo((5 * this._x0 + this._x1) / 6, (5 * this._y0 + this._y1) / 6); // proceed\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n }\n};\n\nexport default function(context) {\n return new Basis(context);\n}\n","import noop from \"../noop\";\nimport {point} from \"./basis\";\n\nfunction BasisClosed(context) {\n this._context = context;\n}\n\nBasisClosed.prototype = {\n areaStart: noop,\n areaEnd: noop,\n lineStart: function() {\n this._x0 = this._x1 = this._x2 = this._x3 = this._x4 =\n this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 1: {\n this._context.moveTo(this._x2, this._y2);\n this._context.closePath();\n break;\n }\n case 2: {\n this._context.moveTo((this._x2 + 2 * this._x3) / 3, (this._y2 + 2 * this._y3) / 3);\n this._context.lineTo((this._x3 + 2 * this._x2) / 3, (this._y3 + 2 * this._y2) / 3);\n this._context.closePath();\n break;\n }\n case 3: {\n this.point(this._x2, this._y2);\n this.point(this._x3, this._y3);\n this.point(this._x4, this._y4);\n break;\n }\n }\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._x2 = x, this._y2 = y; break;\n case 1: this._point = 2; this._x3 = x, this._y3 = y; break;\n case 2: this._point = 3; this._x4 = x, this._y4 = y; this._context.moveTo((this._x0 + 4 * this._x1 + x) / 6, (this._y0 + 4 * this._y1 + y) / 6); break;\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n }\n};\n\nexport default function(context) {\n return new BasisClosed(context);\n}\n","import {point} from \"./basis\";\n\nfunction BasisOpen(context) {\n this._context = context;\n}\n\nBasisOpen.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 =\n this._y0 = this._y1 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; var x0 = (this._x0 + 4 * this._x1 + x) / 6, y0 = (this._y0 + 4 * this._y1 + y) / 6; this._line ? this._context.lineTo(x0, y0) : this._context.moveTo(x0, y0); break;\n case 3: this._point = 4; // proceed\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n }\n};\n\nexport default function(context) {\n return new BasisOpen(context);\n}\n","import {Basis} from \"./basis\";\n\nfunction Bundle(context, beta) {\n this._basis = new Basis(context);\n this._beta = beta;\n}\n\nBundle.prototype = {\n lineStart: function() {\n this._x = [];\n this._y = [];\n this._basis.lineStart();\n },\n lineEnd: function() {\n var x = this._x,\n y = this._y,\n j = x.length - 1;\n\n if (j > 0) {\n var x0 = x[0],\n y0 = y[0],\n dx = x[j] - x0,\n dy = y[j] - y0,\n i = -1,\n t;\n\n while (++i <= j) {\n t = i / j;\n this._basis.point(\n this._beta * x[i] + (1 - this._beta) * (x0 + t * dx),\n this._beta * y[i] + (1 - this._beta) * (y0 + t * dy)\n );\n }\n }\n\n this._x = this._y = null;\n this._basis.lineEnd();\n },\n point: function(x, y) {\n this._x.push(+x);\n this._y.push(+y);\n }\n};\n\nexport default (function custom(beta) {\n\n function bundle(context) {\n return beta === 1 ? new Basis(context) : new Bundle(context, beta);\n }\n\n bundle.beta = function(beta) {\n return custom(+beta);\n };\n\n return bundle;\n})(0.85);\n","export function point(that, x, y) {\n that._context.bezierCurveTo(\n that._x1 + that._k * (that._x2 - that._x0),\n that._y1 + that._k * (that._y2 - that._y0),\n that._x2 + that._k * (that._x1 - x),\n that._y2 + that._k * (that._y1 - y),\n that._x2,\n that._y2\n );\n}\n\nexport function Cardinal(context, tension) {\n this._context = context;\n this._k = (1 - tension) / 6;\n}\n\nCardinal.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 2: this._context.lineTo(this._x2, this._y2); break;\n case 3: point(this, this._x1, this._y1); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; this._x1 = x, this._y1 = y; break;\n case 2: this._point = 3; // proceed\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(tension) {\n\n function cardinal(context) {\n return new Cardinal(context, tension);\n }\n\n cardinal.tension = function(tension) {\n return custom(+tension);\n };\n\n return cardinal;\n})(0);\n","import noop from \"../noop\";\nimport {point} from \"./cardinal\";\n\nexport function CardinalClosed(context, tension) {\n this._context = context;\n this._k = (1 - tension) / 6;\n}\n\nCardinalClosed.prototype = {\n areaStart: noop,\n areaEnd: noop,\n lineStart: function() {\n this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = this._x5 =\n this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = this._y5 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 1: {\n this._context.moveTo(this._x3, this._y3);\n this._context.closePath();\n break;\n }\n case 2: {\n this._context.lineTo(this._x3, this._y3);\n this._context.closePath();\n break;\n }\n case 3: {\n this.point(this._x3, this._y3);\n this.point(this._x4, this._y4);\n this.point(this._x5, this._y5);\n break;\n }\n }\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._x3 = x, this._y3 = y; break;\n case 1: this._point = 2; this._context.moveTo(this._x4 = x, this._y4 = y); break;\n case 2: this._point = 3; this._x5 = x, this._y5 = y; break;\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(tension) {\n\n function cardinal(context) {\n return new CardinalClosed(context, tension);\n }\n\n cardinal.tension = function(tension) {\n return custom(+tension);\n };\n\n return cardinal;\n})(0);\n","import {point} from \"./cardinal\";\n\nexport function CardinalOpen(context, tension) {\n this._context = context;\n this._k = (1 - tension) / 6;\n}\n\nCardinalOpen.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; this._line ? this._context.lineTo(this._x2, this._y2) : this._context.moveTo(this._x2, this._y2); break;\n case 3: this._point = 4; // proceed\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(tension) {\n\n function cardinal(context) {\n return new CardinalOpen(context, tension);\n }\n\n cardinal.tension = function(tension) {\n return custom(+tension);\n };\n\n return cardinal;\n})(0);\n","import {epsilon} from \"../math\";\nimport {Cardinal} from \"./cardinal\";\n\nexport function point(that, x, y) {\n var x1 = that._x1,\n y1 = that._y1,\n x2 = that._x2,\n y2 = that._y2;\n\n if (that._l01_a > epsilon) {\n var a = 2 * that._l01_2a + 3 * that._l01_a * that._l12_a + that._l12_2a,\n n = 3 * that._l01_a * (that._l01_a + that._l12_a);\n x1 = (x1 * a - that._x0 * that._l12_2a + that._x2 * that._l01_2a) / n;\n y1 = (y1 * a - that._y0 * that._l12_2a + that._y2 * that._l01_2a) / n;\n }\n\n if (that._l23_a > epsilon) {\n var b = 2 * that._l23_2a + 3 * that._l23_a * that._l12_a + that._l12_2a,\n m = 3 * that._l23_a * (that._l23_a + that._l12_a);\n x2 = (x2 * b + that._x1 * that._l23_2a - x * that._l12_2a) / m;\n y2 = (y2 * b + that._y1 * that._l23_2a - y * that._l12_2a) / m;\n }\n\n that._context.bezierCurveTo(x1, y1, x2, y2, that._x2, that._y2);\n}\n\nfunction CatmullRom(context, alpha) {\n this._context = context;\n this._alpha = alpha;\n}\n\nCatmullRom.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._l01_a = this._l12_a = this._l23_a =\n this._l01_2a = this._l12_2a = this._l23_2a =\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 2: this._context.lineTo(this._x2, this._y2); break;\n case 3: this.point(this._x2, this._y2); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n\n if (this._point) {\n var x23 = this._x2 - x,\n y23 = this._y2 - y;\n this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));\n }\n\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; // proceed\n default: point(this, x, y); break;\n }\n\n this._l01_a = this._l12_a, this._l12_a = this._l23_a;\n this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(alpha) {\n\n function catmullRom(context) {\n return alpha ? new CatmullRom(context, alpha) : new Cardinal(context, 0);\n }\n\n catmullRom.alpha = function(alpha) {\n return custom(+alpha);\n };\n\n return catmullRom;\n})(0.5);\n","import {CardinalClosed} from \"./cardinalClosed\";\nimport noop from \"../noop\";\nimport {point} from \"./catmullRom\";\n\nfunction CatmullRomClosed(context, alpha) {\n this._context = context;\n this._alpha = alpha;\n}\n\nCatmullRomClosed.prototype = {\n areaStart: noop,\n areaEnd: noop,\n lineStart: function() {\n this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = this._x5 =\n this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = this._y5 = NaN;\n this._l01_a = this._l12_a = this._l23_a =\n this._l01_2a = this._l12_2a = this._l23_2a =\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 1: {\n this._context.moveTo(this._x3, this._y3);\n this._context.closePath();\n break;\n }\n case 2: {\n this._context.lineTo(this._x3, this._y3);\n this._context.closePath();\n break;\n }\n case 3: {\n this.point(this._x3, this._y3);\n this.point(this._x4, this._y4);\n this.point(this._x5, this._y5);\n break;\n }\n }\n },\n point: function(x, y) {\n x = +x, y = +y;\n\n if (this._point) {\n var x23 = this._x2 - x,\n y23 = this._y2 - y;\n this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));\n }\n\n switch (this._point) {\n case 0: this._point = 1; this._x3 = x, this._y3 = y; break;\n case 1: this._point = 2; this._context.moveTo(this._x4 = x, this._y4 = y); break;\n case 2: this._point = 3; this._x5 = x, this._y5 = y; break;\n default: point(this, x, y); break;\n }\n\n this._l01_a = this._l12_a, this._l12_a = this._l23_a;\n this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(alpha) {\n\n function catmullRom(context) {\n return alpha ? new CatmullRomClosed(context, alpha) : new CardinalClosed(context, 0);\n }\n\n catmullRom.alpha = function(alpha) {\n return custom(+alpha);\n };\n\n return catmullRom;\n})(0.5);\n","import {CardinalOpen} from \"./cardinalOpen\";\nimport {point} from \"./catmullRom\";\n\nfunction CatmullRomOpen(context, alpha) {\n this._context = context;\n this._alpha = alpha;\n}\n\nCatmullRomOpen.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._l01_a = this._l12_a = this._l23_a =\n this._l01_2a = this._l12_2a = this._l23_2a =\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n\n if (this._point) {\n var x23 = this._x2 - x,\n y23 = this._y2 - y;\n this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));\n }\n\n switch (this._point) {\n case 0: this._point = 1; break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; this._line ? this._context.lineTo(this._x2, this._y2) : this._context.moveTo(this._x2, this._y2); break;\n case 3: this._point = 4; // proceed\n default: point(this, x, y); break;\n }\n\n this._l01_a = this._l12_a, this._l12_a = this._l23_a;\n this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(alpha) {\n\n function catmullRom(context) {\n return alpha ? new CatmullRomOpen(context, alpha) : new CardinalOpen(context, 0);\n }\n\n catmullRom.alpha = function(alpha) {\n return custom(+alpha);\n };\n\n return catmullRom;\n})(0.5);\n","import noop from \"../noop\";\n\nfunction LinearClosed(context) {\n this._context = context;\n}\n\nLinearClosed.prototype = {\n areaStart: noop,\n areaEnd: noop,\n lineStart: function() {\n this._point = 0;\n },\n lineEnd: function() {\n if (this._point) this._context.closePath();\n },\n point: function(x, y) {\n x = +x, y = +y;\n if (this._point) this._context.lineTo(x, y);\n else this._point = 1, this._context.moveTo(x, y);\n }\n};\n\nexport default function(context) {\n return new LinearClosed(context);\n}\n","function sign(x) {\n return x < 0 ? -1 : 1;\n}\n\n// Calculate the slopes of the tangents (Hermite-type interpolation) based on\n// the following paper: Steffen, M. 1990. A Simple Method for Monotonic\n// Interpolation in One Dimension. Astronomy and Astrophysics, Vol. 239, NO.\n// NOV(II), P. 443, 1990.\nfunction slope3(that, x2, y2) {\n var h0 = that._x1 - that._x0,\n h1 = x2 - that._x1,\n s0 = (that._y1 - that._y0) / (h0 || h1 < 0 && -0),\n s1 = (y2 - that._y1) / (h1 || h0 < 0 && -0),\n p = (s0 * h1 + s1 * h0) / (h0 + h1);\n return (sign(s0) + sign(s1)) * Math.min(Math.abs(s0), Math.abs(s1), 0.5 * Math.abs(p)) || 0;\n}\n\n// Calculate a one-sided slope.\nfunction slope2(that, t) {\n var h = that._x1 - that._x0;\n return h ? (3 * (that._y1 - that._y0) / h - t) / 2 : t;\n}\n\n// According to https://en.wikipedia.org/wiki/Cubic_Hermite_spline#Representations\n// \"you can express cubic Hermite interpolation in terms of cubic Bézier curves\n// with respect to the four values p0, p0 + m0 / 3, p1 - m1 / 3, p1\".\nfunction point(that, t0, t1) {\n var x0 = that._x0,\n y0 = that._y0,\n x1 = that._x1,\n y1 = that._y1,\n dx = (x1 - x0) / 3;\n that._context.bezierCurveTo(x0 + dx, y0 + dx * t0, x1 - dx, y1 - dx * t1, x1, y1);\n}\n\nfunction MonotoneX(context) {\n this._context = context;\n}\n\nMonotoneX.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 =\n this._y0 = this._y1 =\n this._t0 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 2: this._context.lineTo(this._x1, this._y1); break;\n case 3: point(this, this._t0, slope2(this, this._t0)); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n var t1 = NaN;\n\n x = +x, y = +y;\n if (x === this._x1 && y === this._y1) return; // Ignore coincident points.\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; point(this, slope2(this, t1 = slope3(this, x, y)), t1); break;\n default: point(this, this._t0, t1 = slope3(this, x, y)); break;\n }\n\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n this._t0 = t1;\n }\n}\n\nfunction MonotoneY(context) {\n this._context = new ReflectContext(context);\n}\n\n(MonotoneY.prototype = Object.create(MonotoneX.prototype)).point = function(x, y) {\n MonotoneX.prototype.point.call(this, y, x);\n};\n\nfunction ReflectContext(context) {\n this._context = context;\n}\n\nReflectContext.prototype = {\n moveTo: function(x, y) { this._context.moveTo(y, x); },\n closePath: function() { this._context.closePath(); },\n lineTo: function(x, y) { this._context.lineTo(y, x); },\n bezierCurveTo: function(x1, y1, x2, y2, x, y) { this._context.bezierCurveTo(y1, x1, y2, x2, y, x); }\n};\n\nexport function monotoneX(context) {\n return new MonotoneX(context);\n}\n\nexport function monotoneY(context) {\n return new MonotoneY(context);\n}\n","function Natural(context) {\n this._context = context;\n}\n\nNatural.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x = [];\n this._y = [];\n },\n lineEnd: function() {\n var x = this._x,\n y = this._y,\n n = x.length;\n\n if (n) {\n this._line ? this._context.lineTo(x[0], y[0]) : this._context.moveTo(x[0], y[0]);\n if (n === 2) {\n this._context.lineTo(x[1], y[1]);\n } else {\n var px = controlPoints(x),\n py = controlPoints(y);\n for (var i0 = 0, i1 = 1; i1 < n; ++i0, ++i1) {\n this._context.bezierCurveTo(px[0][i0], py[0][i0], px[1][i0], py[1][i0], x[i1], y[i1]);\n }\n }\n }\n\n if (this._line || (this._line !== 0 && n === 1)) this._context.closePath();\n this._line = 1 - this._line;\n this._x = this._y = null;\n },\n point: function(x, y) {\n this._x.push(+x);\n this._y.push(+y);\n }\n};\n\n// See https://www.particleincell.com/2012/bezier-splines/ for derivation.\nfunction controlPoints(x) {\n var i,\n n = x.length - 1,\n m,\n a = new Array(n),\n b = new Array(n),\n r = new Array(n);\n a[0] = 0, b[0] = 2, r[0] = x[0] + 2 * x[1];\n for (i = 1; i < n - 1; ++i) a[i] = 1, b[i] = 4, r[i] = 4 * x[i] + 2 * x[i + 1];\n a[n - 1] = 2, b[n - 1] = 7, r[n - 1] = 8 * x[n - 1] + x[n];\n for (i = 1; i < n; ++i) m = a[i] / b[i - 1], b[i] -= m, r[i] -= m * r[i - 1];\n a[n - 1] = r[n - 1] / b[n - 1];\n for (i = n - 2; i >= 0; --i) a[i] = (r[i] - a[i + 1]) / b[i];\n b[n - 1] = (x[n] + a[n - 1]) / 2;\n for (i = 0; i < n - 1; ++i) b[i] = 2 * x[i + 1] - a[i + 1];\n return [a, b];\n}\n\nexport default function(context) {\n return new Natural(context);\n}\n","function Step(context, t) {\n this._context = context;\n this._t = t;\n}\n\nStep.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x = this._y = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n if (0 < this._t && this._t < 1 && this._point === 2) this._context.lineTo(this._x, this._y);\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n if (this._line >= 0) this._t = 1 - this._t, this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; // proceed\n default: {\n if (this._t <= 0) {\n this._context.lineTo(this._x, y);\n this._context.lineTo(x, y);\n } else {\n var x1 = this._x * (1 - this._t) + x * this._t;\n this._context.lineTo(x1, this._y);\n this._context.lineTo(x1, y);\n }\n break;\n }\n }\n this._x = x, this._y = y;\n }\n};\n\nexport default function(context) {\n return new Step(context, 0.5);\n}\n\nexport function stepBefore(context) {\n return new Step(context, 0);\n}\n\nexport function stepAfter(context) {\n return new Step(context, 1);\n}\n","export default function(series, order) {\n if (!((n = series.length) > 1)) return;\n for (var i = 1, j, s0, s1 = series[order[0]], n, m = s1.length; i < n; ++i) {\n s0 = s1, s1 = series[order[i]];\n for (j = 0; j < m; ++j) {\n s1[j][1] += s1[j][0] = isNaN(s0[j][1]) ? s0[j][0] : s0[j][1];\n }\n }\n}\n","export default function(series) {\n var n = series.length, o = new Array(n);\n while (--n >= 0) o[n] = n;\n return o;\n}\n","import {slice} from \"./array\";\nimport constant from \"./constant\";\nimport offsetNone from \"./offset/none\";\nimport orderNone from \"./order/none\";\n\nfunction stackValue(d, key) {\n return d[key];\n}\n\nexport default function() {\n var keys = constant([]),\n order = orderNone,\n offset = offsetNone,\n value = stackValue;\n\n function stack(data) {\n var kz = keys.apply(this, arguments),\n i,\n m = data.length,\n n = kz.length,\n sz = new Array(n),\n oz;\n\n for (i = 0; i < n; ++i) {\n for (var ki = kz[i], si = sz[i] = new Array(m), j = 0, sij; j < m; ++j) {\n si[j] = sij = [0, +value(data[j], ki, j, data)];\n sij.data = data[j];\n }\n si.key = ki;\n }\n\n for (i = 0, oz = order(sz); i < n; ++i) {\n sz[oz[i]].index = i;\n }\n\n offset(sz, oz);\n return sz;\n }\n\n stack.keys = function(_) {\n return arguments.length ? (keys = typeof _ === \"function\" ? _ : constant(slice.call(_)), stack) : keys;\n };\n\n stack.value = function(_) {\n return arguments.length ? (value = typeof _ === \"function\" ? _ : constant(+_), stack) : value;\n };\n\n stack.order = function(_) {\n return arguments.length ? (order = _ == null ? orderNone : typeof _ === \"function\" ? _ : constant(slice.call(_)), stack) : order;\n };\n\n stack.offset = function(_) {\n return arguments.length ? (offset = _ == null ? offsetNone : _, stack) : offset;\n };\n\n return stack;\n}\n","import none from \"./none\";\n\nexport default function(series) {\n var sums = series.map(sum);\n return none(series).sort(function(a, b) { return sums[a] - sums[b]; });\n}\n\nexport function sum(series) {\n var s = 0, i = -1, n = series.length, v;\n while (++i < n) if (v = +series[i][1]) s += v;\n return s;\n}\n","export function cubicIn(t) {\n return t * t * t;\n}\n\nexport function cubicOut(t) {\n return --t * t * t + 1;\n}\n\nexport function cubicInOut(t) {\n return ((t *= 2) <= 1 ? t * t * t : (t -= 2) * t * t + 2) / 2;\n}\n","var exponent = 3;\n\nexport var polyIn = (function custom(e) {\n e = +e;\n\n function polyIn(t) {\n return Math.pow(t, e);\n }\n\n polyIn.exponent = custom;\n\n return polyIn;\n})(exponent);\n\nexport var polyOut = (function custom(e) {\n e = +e;\n\n function polyOut(t) {\n return 1 - Math.pow(1 - t, e);\n }\n\n polyOut.exponent = custom;\n\n return polyOut;\n})(exponent);\n\nexport var polyInOut = (function custom(e) {\n e = +e;\n\n function polyInOut(t) {\n return ((t *= 2) <= 1 ? Math.pow(t, e) : 2 - Math.pow(2 - t, e)) / 2;\n }\n\n polyInOut.exponent = custom;\n\n return polyInOut;\n})(exponent);\n","var pi = Math.PI,\n halfPi = pi / 2;\n\nexport function sinIn(t) {\n return 1 - Math.cos(t * halfPi);\n}\n\nexport function sinOut(t) {\n return Math.sin(t * halfPi);\n}\n\nexport function sinInOut(t) {\n return (1 - Math.cos(pi * t)) / 2;\n}\n","var b1 = 4 / 11,\n b2 = 6 / 11,\n b3 = 8 / 11,\n b4 = 3 / 4,\n b5 = 9 / 11,\n b6 = 10 / 11,\n b7 = 15 / 16,\n b8 = 21 / 22,\n b9 = 63 / 64,\n b0 = 1 / b1 / b1;\n\nexport function bounceIn(t) {\n return 1 - bounceOut(1 - t);\n}\n\nexport function bounceOut(t) {\n return (t = +t) < b1 ? b0 * t * t : t < b3 ? b0 * (t -= b2) * t + b4 : t < b6 ? b0 * (t -= b5) * t + b7 : b0 * (t -= b8) * t + b9;\n}\n\nexport function bounceInOut(t) {\n return ((t *= 2) <= 1 ? 1 - bounceOut(1 - t) : bounceOut(t - 1) + 1) / 2;\n}\n","var overshoot = 1.70158;\n\nexport var backIn = (function custom(s) {\n s = +s;\n\n function backIn(t) {\n return t * t * ((s + 1) * t - s);\n }\n\n backIn.overshoot = custom;\n\n return backIn;\n})(overshoot);\n\nexport var backOut = (function custom(s) {\n s = +s;\n\n function backOut(t) {\n return --t * t * ((s + 1) * t + s) + 1;\n }\n\n backOut.overshoot = custom;\n\n return backOut;\n})(overshoot);\n\nexport var backInOut = (function custom(s) {\n s = +s;\n\n function backInOut(t) {\n return ((t *= 2) < 1 ? t * t * ((s + 1) * t - s) : (t -= 2) * t * ((s + 1) * t + s) + 2) / 2;\n }\n\n backInOut.overshoot = custom;\n\n return backInOut;\n})(overshoot);\n","var tau = 2 * Math.PI,\n amplitude = 1,\n period = 0.3;\n\nexport var elasticIn = (function custom(a, p) {\n var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau);\n\n function elasticIn(t) {\n return a * Math.pow(2, 10 * --t) * Math.sin((s - t) / p);\n }\n\n elasticIn.amplitude = function(a) { return custom(a, p * tau); };\n elasticIn.period = function(p) { return custom(a, p); };\n\n return elasticIn;\n})(amplitude, period);\n\nexport var elasticOut = (function custom(a, p) {\n var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau);\n\n function elasticOut(t) {\n return 1 - a * Math.pow(2, -10 * (t = +t)) * Math.sin((t + s) / p);\n }\n\n elasticOut.amplitude = function(a) { return custom(a, p * tau); };\n elasticOut.period = function(p) { return custom(a, p); };\n\n return elasticOut;\n})(amplitude, period);\n\nexport var elasticInOut = (function custom(a, p) {\n var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau);\n\n function elasticInOut(t) {\n return ((t = t * 2 - 1) < 0\n ? a * Math.pow(2, 10 * t) * Math.sin((s - t) / p)\n : 2 - a * Math.pow(2, -10 * t) * Math.sin((s + t) / p)) / 2;\n }\n\n elasticInOut.amplitude = function(a) { return custom(a, p * tau); };\n elasticInOut.period = function(p) { return custom(a, p); };\n\n return elasticInOut;\n})(amplitude, period);\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","export function x(d) {\n return d[0];\n}\n\nexport function y(d) {\n return d[1];\n}\n","function RedBlackTree() {\n this._ = null; // root node\n}\n\nexport function RedBlackNode(node) {\n node.U = // parent node\n node.C = // color - true for red, false for black\n node.L = // left node\n node.R = // right node\n node.P = // previous node\n node.N = null; // next node\n}\n\nRedBlackTree.prototype = {\n constructor: RedBlackTree,\n\n insert: function(after, node) {\n var parent, grandpa, uncle;\n\n if (after) {\n node.P = after;\n node.N = after.N;\n if (after.N) after.N.P = node;\n after.N = node;\n if (after.R) {\n after = after.R;\n while (after.L) after = after.L;\n after.L = node;\n } else {\n after.R = node;\n }\n parent = after;\n } else if (this._) {\n after = RedBlackFirst(this._);\n node.P = null;\n node.N = after;\n after.P = after.L = node;\n parent = after;\n } else {\n node.P = node.N = null;\n this._ = node;\n parent = null;\n }\n node.L = node.R = null;\n node.U = parent;\n node.C = true;\n\n after = node;\n while (parent && parent.C) {\n grandpa = parent.U;\n if (parent === grandpa.L) {\n uncle = grandpa.R;\n if (uncle && uncle.C) {\n parent.C = uncle.C = false;\n grandpa.C = true;\n after = grandpa;\n } else {\n if (after === parent.R) {\n RedBlackRotateLeft(this, parent);\n after = parent;\n parent = after.U;\n }\n parent.C = false;\n grandpa.C = true;\n RedBlackRotateRight(this, grandpa);\n }\n } else {\n uncle = grandpa.L;\n if (uncle && uncle.C) {\n parent.C = uncle.C = false;\n grandpa.C = true;\n after = grandpa;\n } else {\n if (after === parent.L) {\n RedBlackRotateRight(this, parent);\n after = parent;\n parent = after.U;\n }\n parent.C = false;\n grandpa.C = true;\n RedBlackRotateLeft(this, grandpa);\n }\n }\n parent = after.U;\n }\n this._.C = false;\n },\n\n remove: function(node) {\n if (node.N) node.N.P = node.P;\n if (node.P) node.P.N = node.N;\n node.N = node.P = null;\n\n var parent = node.U,\n sibling,\n left = node.L,\n right = node.R,\n next,\n red;\n\n if (!left) next = right;\n else if (!right) next = left;\n else next = RedBlackFirst(right);\n\n if (parent) {\n if (parent.L === node) parent.L = next;\n else parent.R = next;\n } else {\n this._ = next;\n }\n\n if (left && right) {\n red = next.C;\n next.C = node.C;\n next.L = left;\n left.U = next;\n if (next !== right) {\n parent = next.U;\n next.U = node.U;\n node = next.R;\n parent.L = node;\n next.R = right;\n right.U = next;\n } else {\n next.U = parent;\n parent = next;\n node = next.R;\n }\n } else {\n red = node.C;\n node = next;\n }\n\n if (node) node.U = parent;\n if (red) return;\n if (node && node.C) { node.C = false; return; }\n\n do {\n if (node === this._) break;\n if (node === parent.L) {\n sibling = parent.R;\n if (sibling.C) {\n sibling.C = false;\n parent.C = true;\n RedBlackRotateLeft(this, parent);\n sibling = parent.R;\n }\n if ((sibling.L && sibling.L.C)\n || (sibling.R && sibling.R.C)) {\n if (!sibling.R || !sibling.R.C) {\n sibling.L.C = false;\n sibling.C = true;\n RedBlackRotateRight(this, sibling);\n sibling = parent.R;\n }\n sibling.C = parent.C;\n parent.C = sibling.R.C = false;\n RedBlackRotateLeft(this, parent);\n node = this._;\n break;\n }\n } else {\n sibling = parent.L;\n if (sibling.C) {\n sibling.C = false;\n parent.C = true;\n RedBlackRotateRight(this, parent);\n sibling = parent.L;\n }\n if ((sibling.L && sibling.L.C)\n || (sibling.R && sibling.R.C)) {\n if (!sibling.L || !sibling.L.C) {\n sibling.R.C = false;\n sibling.C = true;\n RedBlackRotateLeft(this, sibling);\n sibling = parent.L;\n }\n sibling.C = parent.C;\n parent.C = sibling.L.C = false;\n RedBlackRotateRight(this, parent);\n node = this._;\n break;\n }\n }\n sibling.C = true;\n node = parent;\n parent = parent.U;\n } while (!node.C);\n\n if (node) node.C = false;\n }\n};\n\nfunction RedBlackRotateLeft(tree, node) {\n var p = node,\n q = node.R,\n parent = p.U;\n\n if (parent) {\n if (parent.L === p) parent.L = q;\n else parent.R = q;\n } else {\n tree._ = q;\n }\n\n q.U = parent;\n p.U = q;\n p.R = q.L;\n if (p.R) p.R.U = p;\n q.L = p;\n}\n\nfunction RedBlackRotateRight(tree, node) {\n var p = node,\n q = node.L,\n parent = p.U;\n\n if (parent) {\n if (parent.L === p) parent.L = q;\n else parent.R = q;\n } else {\n tree._ = q;\n }\n\n q.U = parent;\n p.U = q;\n p.L = q.R;\n if (p.L) p.L.U = p;\n q.R = p;\n}\n\nfunction RedBlackFirst(node) {\n while (node.L) node = node.L;\n return node;\n}\n\nexport default RedBlackTree;\n","import {cells, edges, epsilon} from \"./Diagram\";\n\nexport function createEdge(left, right, v0, v1) {\n var edge = [null, null],\n index = edges.push(edge) - 1;\n edge.left = left;\n edge.right = right;\n if (v0) setEdgeEnd(edge, left, right, v0);\n if (v1) setEdgeEnd(edge, right, left, v1);\n cells[left.index].halfedges.push(index);\n cells[right.index].halfedges.push(index);\n return edge;\n}\n\nexport function createBorderEdge(left, v0, v1) {\n var edge = [v0, v1];\n edge.left = left;\n return edge;\n}\n\nexport function setEdgeEnd(edge, left, right, vertex) {\n if (!edge[0] && !edge[1]) {\n edge[0] = vertex;\n edge.left = left;\n edge.right = right;\n } else if (edge.left === right) {\n edge[1] = vertex;\n } else {\n edge[0] = vertex;\n }\n}\n\n// Liang–Barsky line clipping.\nfunction clipEdge(edge, x0, y0, x1, y1) {\n var a = edge[0],\n b = edge[1],\n ax = a[0],\n ay = a[1],\n bx = b[0],\n by = b[1],\n t0 = 0,\n t1 = 1,\n dx = bx - ax,\n dy = by - ay,\n r;\n\n r = x0 - ax;\n if (!dx && r > 0) return;\n r /= dx;\n if (dx < 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n } else if (dx > 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n }\n\n r = x1 - ax;\n if (!dx && r < 0) return;\n r /= dx;\n if (dx < 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n } else if (dx > 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n }\n\n r = y0 - ay;\n if (!dy && r > 0) return;\n r /= dy;\n if (dy < 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n } else if (dy > 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n }\n\n r = y1 - ay;\n if (!dy && r < 0) return;\n r /= dy;\n if (dy < 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n } else if (dy > 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n }\n\n if (!(t0 > 0) && !(t1 < 1)) return true; // TODO Better check?\n\n if (t0 > 0) edge[0] = [ax + t0 * dx, ay + t0 * dy];\n if (t1 < 1) edge[1] = [ax + t1 * dx, ay + t1 * dy];\n return true;\n}\n\nfunction connectEdge(edge, x0, y0, x1, y1) {\n var v1 = edge[1];\n if (v1) return true;\n\n var v0 = edge[0],\n left = edge.left,\n right = edge.right,\n lx = left[0],\n ly = left[1],\n rx = right[0],\n ry = right[1],\n fx = (lx + rx) / 2,\n fy = (ly + ry) / 2,\n fm,\n fb;\n\n if (ry === ly) {\n if (fx < x0 || fx >= x1) return;\n if (lx > rx) {\n if (!v0) v0 = [fx, y0];\n else if (v0[1] >= y1) return;\n v1 = [fx, y1];\n } else {\n if (!v0) v0 = [fx, y1];\n else if (v0[1] < y0) return;\n v1 = [fx, y0];\n }\n } else {\n fm = (lx - rx) / (ry - ly);\n fb = fy - fm * fx;\n if (fm < -1 || fm > 1) {\n if (lx > rx) {\n if (!v0) v0 = [(y0 - fb) / fm, y0];\n else if (v0[1] >= y1) return;\n v1 = [(y1 - fb) / fm, y1];\n } else {\n if (!v0) v0 = [(y1 - fb) / fm, y1];\n else if (v0[1] < y0) return;\n v1 = [(y0 - fb) / fm, y0];\n }\n } else {\n if (ly < ry) {\n if (!v0) v0 = [x0, fm * x0 + fb];\n else if (v0[0] >= x1) return;\n v1 = [x1, fm * x1 + fb];\n } else {\n if (!v0) v0 = [x1, fm * x1 + fb];\n else if (v0[0] < x0) return;\n v1 = [x0, fm * x0 + fb];\n }\n }\n }\n\n edge[0] = v0;\n edge[1] = v1;\n return true;\n}\n\nexport function clipEdges(x0, y0, x1, y1) {\n var i = edges.length,\n edge;\n\n while (i--) {\n if (!connectEdge(edge = edges[i], x0, y0, x1, y1)\n || !clipEdge(edge, x0, y0, x1, y1)\n || !(Math.abs(edge[0][0] - edge[1][0]) > epsilon\n || Math.abs(edge[0][1] - edge[1][1]) > epsilon)) {\n delete edges[i];\n }\n }\n}\n","import {createBorderEdge} from \"./Edge\";\nimport {cells, edges, epsilon} from \"./Diagram\";\n\nexport function createCell(site) {\n return cells[site.index] = {\n site: site,\n halfedges: []\n };\n}\n\nfunction cellHalfedgeAngle(cell, edge) {\n var site = cell.site,\n va = edge.left,\n vb = edge.right;\n if (site === vb) vb = va, va = site;\n if (vb) return Math.atan2(vb[1] - va[1], vb[0] - va[0]);\n if (site === va) va = edge[1], vb = edge[0];\n else va = edge[0], vb = edge[1];\n return Math.atan2(va[0] - vb[0], vb[1] - va[1]);\n}\n\nexport function cellHalfedgeStart(cell, edge) {\n return edge[+(edge.left !== cell.site)];\n}\n\nexport function cellHalfedgeEnd(cell, edge) {\n return edge[+(edge.left === cell.site)];\n}\n\nexport function sortCellHalfedges() {\n for (var i = 0, n = cells.length, cell, halfedges, j, m; i < n; ++i) {\n if ((cell = cells[i]) && (m = (halfedges = cell.halfedges).length)) {\n var index = new Array(m),\n array = new Array(m);\n for (j = 0; j < m; ++j) index[j] = j, array[j] = cellHalfedgeAngle(cell, edges[halfedges[j]]);\n index.sort(function(i, j) { return array[j] - array[i]; });\n for (j = 0; j < m; ++j) array[j] = halfedges[index[j]];\n for (j = 0; j < m; ++j) halfedges[j] = array[j];\n }\n }\n}\n\nexport function clipCells(x0, y0, x1, y1) {\n var nCells = cells.length,\n iCell,\n cell,\n site,\n iHalfedge,\n halfedges,\n nHalfedges,\n start,\n startX,\n startY,\n end,\n endX,\n endY,\n cover = true;\n\n for (iCell = 0; iCell < nCells; ++iCell) {\n if (cell = cells[iCell]) {\n site = cell.site;\n halfedges = cell.halfedges;\n iHalfedge = halfedges.length;\n\n // Remove any dangling clipped edges.\n while (iHalfedge--) {\n if (!edges[halfedges[iHalfedge]]) {\n halfedges.splice(iHalfedge, 1);\n }\n }\n\n // Insert any border edges as necessary.\n iHalfedge = 0, nHalfedges = halfedges.length;\n while (iHalfedge < nHalfedges) {\n end = cellHalfedgeEnd(cell, edges[halfedges[iHalfedge]]), endX = end[0], endY = end[1];\n start = cellHalfedgeStart(cell, edges[halfedges[++iHalfedge % nHalfedges]]), startX = start[0], startY = start[1];\n if (Math.abs(endX - startX) > epsilon || Math.abs(endY - startY) > epsilon) {\n halfedges.splice(iHalfedge, 0, edges.push(createBorderEdge(site, end,\n Math.abs(endX - x0) < epsilon && y1 - endY > epsilon ? [x0, Math.abs(startX - x0) < epsilon ? startY : y1]\n : Math.abs(endY - y1) < epsilon && x1 - endX > epsilon ? [Math.abs(startY - y1) < epsilon ? startX : x1, y1]\n : Math.abs(endX - x1) < epsilon && endY - y0 > epsilon ? [x1, Math.abs(startX - x1) < epsilon ? startY : y0]\n : Math.abs(endY - y0) < epsilon && endX - x0 > epsilon ? [Math.abs(startY - y0) < epsilon ? startX : x0, y0]\n : null)) - 1);\n ++nHalfedges;\n }\n }\n\n if (nHalfedges) cover = false;\n }\n }\n\n // If there weren’t any edges, have the closest site cover the extent.\n // It doesn’t matter which corner of the extent we measure!\n if (cover) {\n var dx, dy, d2, dc = Infinity;\n\n for (iCell = 0, cover = null; iCell < nCells; ++iCell) {\n if (cell = cells[iCell]) {\n site = cell.site;\n dx = site[0] - x0;\n dy = site[1] - y0;\n d2 = dx * dx + dy * dy;\n if (d2 < dc) dc = d2, cover = cell;\n }\n }\n\n if (cover) {\n var v00 = [x0, y0], v01 = [x0, y1], v11 = [x1, y1], v10 = [x1, y0];\n cover.halfedges.push(\n edges.push(createBorderEdge(site = cover.site, v00, v01)) - 1,\n edges.push(createBorderEdge(site, v01, v11)) - 1,\n edges.push(createBorderEdge(site, v11, v10)) - 1,\n edges.push(createBorderEdge(site, v10, v00)) - 1\n );\n }\n }\n\n // Lastly delete any cells with no edges; these were entirely clipped.\n for (iCell = 0; iCell < nCells; ++iCell) {\n if (cell = cells[iCell]) {\n if (!cell.halfedges.length) {\n delete cells[iCell];\n }\n }\n }\n}\n","import {RedBlackNode} from \"./RedBlackTree\";\nimport {circles, epsilon2} from \"./Diagram\";\n\nvar circlePool = [];\n\nexport var firstCircle;\n\nfunction Circle() {\n RedBlackNode(this);\n this.x =\n this.y =\n this.arc =\n this.site =\n this.cy = null;\n}\n\nexport function attachCircle(arc) {\n var lArc = arc.P,\n rArc = arc.N;\n\n if (!lArc || !rArc) return;\n\n var lSite = lArc.site,\n cSite = arc.site,\n rSite = rArc.site;\n\n if (lSite === rSite) return;\n\n var bx = cSite[0],\n by = cSite[1],\n ax = lSite[0] - bx,\n ay = lSite[1] - by,\n cx = rSite[0] - bx,\n cy = rSite[1] - by;\n\n var d = 2 * (ax * cy - ay * cx);\n if (d >= -epsilon2) return;\n\n var ha = ax * ax + ay * ay,\n hc = cx * cx + cy * cy,\n x = (cy * ha - ay * hc) / d,\n y = (ax * hc - cx * ha) / d;\n\n var circle = circlePool.pop() || new Circle;\n circle.arc = arc;\n circle.site = cSite;\n circle.x = x + bx;\n circle.y = (circle.cy = y + by) + Math.sqrt(x * x + y * y); // y bottom\n\n arc.circle = circle;\n\n var before = null,\n node = circles._;\n\n while (node) {\n if (circle.y < node.y || (circle.y === node.y && circle.x <= node.x)) {\n if (node.L) node = node.L;\n else { before = node.P; break; }\n } else {\n if (node.R) node = node.R;\n else { before = node; break; }\n }\n }\n\n circles.insert(before, circle);\n if (!before) firstCircle = circle;\n}\n\nexport function detachCircle(arc) {\n var circle = arc.circle;\n if (circle) {\n if (!circle.P) firstCircle = circle.N;\n circles.remove(circle);\n circlePool.push(circle);\n RedBlackNode(circle);\n arc.circle = null;\n }\n}\n","import {RedBlackNode} from \"./RedBlackTree\";\nimport {createCell} from \"./Cell\";\nimport {attachCircle, detachCircle} from \"./Circle\";\nimport {createEdge, setEdgeEnd} from \"./Edge\";\nimport {beaches, epsilon} from \"./Diagram\";\n\nvar beachPool = [];\n\nfunction Beach() {\n RedBlackNode(this);\n this.edge =\n this.site =\n this.circle = null;\n}\n\nfunction createBeach(site) {\n var beach = beachPool.pop() || new Beach;\n beach.site = site;\n return beach;\n}\n\nfunction detachBeach(beach) {\n detachCircle(beach);\n beaches.remove(beach);\n beachPool.push(beach);\n RedBlackNode(beach);\n}\n\nexport function removeBeach(beach) {\n var circle = beach.circle,\n x = circle.x,\n y = circle.cy,\n vertex = [x, y],\n previous = beach.P,\n next = beach.N,\n disappearing = [beach];\n\n detachBeach(beach);\n\n var lArc = previous;\n while (lArc.circle\n && Math.abs(x - lArc.circle.x) < epsilon\n && Math.abs(y - lArc.circle.cy) < epsilon) {\n previous = lArc.P;\n disappearing.unshift(lArc);\n detachBeach(lArc);\n lArc = previous;\n }\n\n disappearing.unshift(lArc);\n detachCircle(lArc);\n\n var rArc = next;\n while (rArc.circle\n && Math.abs(x - rArc.circle.x) < epsilon\n && Math.abs(y - rArc.circle.cy) < epsilon) {\n next = rArc.N;\n disappearing.push(rArc);\n detachBeach(rArc);\n rArc = next;\n }\n\n disappearing.push(rArc);\n detachCircle(rArc);\n\n var nArcs = disappearing.length,\n iArc;\n for (iArc = 1; iArc < nArcs; ++iArc) {\n rArc = disappearing[iArc];\n lArc = disappearing[iArc - 1];\n setEdgeEnd(rArc.edge, lArc.site, rArc.site, vertex);\n }\n\n lArc = disappearing[0];\n rArc = disappearing[nArcs - 1];\n rArc.edge = createEdge(lArc.site, rArc.site, null, vertex);\n\n attachCircle(lArc);\n attachCircle(rArc);\n}\n\nexport function addBeach(site) {\n var x = site[0],\n directrix = site[1],\n lArc,\n rArc,\n dxl,\n dxr,\n node = beaches._;\n\n while (node) {\n dxl = leftBreakPoint(node, directrix) - x;\n if (dxl > epsilon) node = node.L; else {\n dxr = x - rightBreakPoint(node, directrix);\n if (dxr > epsilon) {\n if (!node.R) {\n lArc = node;\n break;\n }\n node = node.R;\n } else {\n if (dxl > -epsilon) {\n lArc = node.P;\n rArc = node;\n } else if (dxr > -epsilon) {\n lArc = node;\n rArc = node.N;\n } else {\n lArc = rArc = node;\n }\n break;\n }\n }\n }\n\n createCell(site);\n var newArc = createBeach(site);\n beaches.insert(lArc, newArc);\n\n if (!lArc && !rArc) return;\n\n if (lArc === rArc) {\n detachCircle(lArc);\n rArc = createBeach(lArc.site);\n beaches.insert(newArc, rArc);\n newArc.edge = rArc.edge = createEdge(lArc.site, newArc.site);\n attachCircle(lArc);\n attachCircle(rArc);\n return;\n }\n\n if (!rArc) { // && lArc\n newArc.edge = createEdge(lArc.site, newArc.site);\n return;\n }\n\n // else lArc !== rArc\n detachCircle(lArc);\n detachCircle(rArc);\n\n var lSite = lArc.site,\n ax = lSite[0],\n ay = lSite[1],\n bx = site[0] - ax,\n by = site[1] - ay,\n rSite = rArc.site,\n cx = rSite[0] - ax,\n cy = rSite[1] - ay,\n d = 2 * (bx * cy - by * cx),\n hb = bx * bx + by * by,\n hc = cx * cx + cy * cy,\n vertex = [(cy * hb - by * hc) / d + ax, (bx * hc - cx * hb) / d + ay];\n\n setEdgeEnd(rArc.edge, lSite, rSite, vertex);\n newArc.edge = createEdge(lSite, site, null, vertex);\n rArc.edge = createEdge(site, rSite, null, vertex);\n attachCircle(lArc);\n attachCircle(rArc);\n}\n\nfunction leftBreakPoint(arc, directrix) {\n var site = arc.site,\n rfocx = site[0],\n rfocy = site[1],\n pby2 = rfocy - directrix;\n\n if (!pby2) return rfocx;\n\n var lArc = arc.P;\n if (!lArc) return -Infinity;\n\n site = lArc.site;\n var lfocx = site[0],\n lfocy = site[1],\n plby2 = lfocy - directrix;\n\n if (!plby2) return lfocx;\n\n var hl = lfocx - rfocx,\n aby2 = 1 / pby2 - 1 / plby2,\n b = hl / plby2;\n\n if (aby2) return (-b + Math.sqrt(b * b - 2 * aby2 * (hl * hl / (-2 * plby2) - lfocy + plby2 / 2 + rfocy - pby2 / 2))) / aby2 + rfocx;\n\n return (rfocx + lfocx) / 2;\n}\n\nfunction rightBreakPoint(arc, directrix) {\n var rArc = arc.N;\n if (rArc) return leftBreakPoint(rArc, directrix);\n var site = arc.site;\n return site[1] === directrix ? site[0] : Infinity;\n}\n","import {addBeach, removeBeach} from \"./Beach\";\nimport {sortCellHalfedges, cellHalfedgeStart, clipCells} from \"./Cell\";\nimport {firstCircle} from \"./Circle\";\nimport {clipEdges} from \"./Edge\";\nimport RedBlackTree from \"./RedBlackTree\";\n\nexport var epsilon = 1e-6;\nexport var epsilon2 = 1e-12;\nexport var beaches;\nexport var cells;\nexport var circles;\nexport var edges;\n\nfunction triangleArea(a, b, c) {\n return (a[0] - c[0]) * (b[1] - a[1]) - (a[0] - b[0]) * (c[1] - a[1]);\n}\n\nfunction lexicographic(a, b) {\n return b[1] - a[1]\n || b[0] - a[0];\n}\n\nexport default function Diagram(sites, extent) {\n var site = sites.sort(lexicographic).pop(),\n x,\n y,\n circle;\n\n edges = [];\n cells = new Array(sites.length);\n beaches = new RedBlackTree;\n circles = new RedBlackTree;\n\n while (true) {\n circle = firstCircle;\n if (site && (!circle || site[1] < circle.y || (site[1] === circle.y && site[0] < circle.x))) {\n if (site[0] !== x || site[1] !== y) {\n addBeach(site);\n x = site[0], y = site[1];\n }\n site = sites.pop();\n } else if (circle) {\n removeBeach(circle.arc);\n } else {\n break;\n }\n }\n\n sortCellHalfedges();\n\n if (extent) {\n var x0 = +extent[0][0],\n y0 = +extent[0][1],\n x1 = +extent[1][0],\n y1 = +extent[1][1];\n clipEdges(x0, y0, x1, y1);\n clipCells(x0, y0, x1, y1);\n }\n\n this.edges = edges;\n this.cells = cells;\n\n beaches =\n circles =\n edges =\n cells = null;\n}\n\nDiagram.prototype = {\n constructor: Diagram,\n\n polygons: function() {\n var edges = this.edges;\n\n return this.cells.map(function(cell) {\n var polygon = cell.halfedges.map(function(i) { return cellHalfedgeStart(cell, edges[i]); });\n polygon.data = cell.site.data;\n return polygon;\n });\n },\n\n triangles: function() {\n var triangles = [],\n edges = this.edges;\n\n this.cells.forEach(function(cell, i) {\n if (!(m = (halfedges = cell.halfedges).length)) return;\n var site = cell.site,\n halfedges,\n j = -1,\n m,\n s0,\n e1 = edges[halfedges[m - 1]],\n s1 = e1.left === site ? e1.right : e1.left;\n\n while (++j < m) {\n s0 = s1;\n e1 = edges[halfedges[j]];\n s1 = e1.left === site ? e1.right : e1.left;\n if (s0 && s1 && i < s0.index && i < s1.index && triangleArea(site, s0, s1) < 0) {\n triangles.push([site.data, s0.data, s1.data]);\n }\n }\n });\n\n return triangles;\n },\n\n links: function() {\n return this.edges.filter(function(edge) {\n return edge.right;\n }).map(function(edge) {\n return {\n source: edge.left.data,\n target: edge.right.data\n };\n });\n },\n\n find: function(x, y, radius) {\n var that = this, i0, i1 = that._found || 0, n = that.cells.length, cell;\n\n // Use the previously-found cell, or start with an arbitrary one.\n while (!(cell = that.cells[i1])) if (++i1 >= n) return null;\n var dx = x - cell.site[0], dy = y - cell.site[1], d2 = dx * dx + dy * dy;\n\n // Traverse the half-edges to find a closer cell, if any.\n do {\n cell = that.cells[i0 = i1], i1 = null;\n cell.halfedges.forEach(function(e) {\n var edge = that.edges[e], v = edge.left;\n if ((v === cell.site || !v) && !(v = edge.right)) return;\n var vx = x - v[0], vy = y - v[1], v2 = vx * vx + vy * vy;\n if (v2 < d2) d2 = v2, i1 = v.index;\n });\n } while (i1 !== null);\n\n that._found = i0;\n\n return radius == null || d2 <= radius * radius ? cell.site : null;\n }\n}\n","import constant from \"./constant\";\nimport {x as pointX, y as pointY} from \"./point\";\nimport Diagram, {epsilon} from \"./Diagram\";\n\nexport default function() {\n var x = pointX,\n y = pointY,\n extent = null;\n\n function voronoi(data) {\n return new Diagram(data.map(function(d, i) {\n var s = [Math.round(x(d, i, data) / epsilon) * epsilon, Math.round(y(d, i, data) / epsilon) * epsilon];\n s.index = i;\n s.data = d;\n return s;\n }), extent);\n }\n\n voronoi.polygons = function(data) {\n return voronoi(data).polygons();\n };\n\n voronoi.links = function(data) {\n return voronoi(data).links();\n };\n\n voronoi.triangles = function(data) {\n return voronoi(data).triangles();\n };\n\n voronoi.x = function(_) {\n return arguments.length ? (x = typeof _ === \"function\" ? _ : constant(+_), voronoi) : x;\n };\n\n voronoi.y = function(_) {\n return arguments.length ? (y = typeof _ === \"function\" ? _ : constant(+_), voronoi) : y;\n };\n\n voronoi.extent = function(_) {\n return arguments.length ? (extent = _ == null ? null : [[+_[0][0], +_[0][1]], [+_[1][0], +_[1][1]]], voronoi) : extent && [[extent[0][0], extent[0][1]], [extent[1][0], extent[1][1]]];\n };\n\n voronoi.size = function(_) {\n return arguments.length ? (extent = _ == null ? null : [[0, 0], [+_[0], +_[1]]], voronoi) : extent && [extent[1][0] - extent[0][0], extent[1][1] - extent[0][1]];\n };\n\n return voronoi;\n}\n","/* global window, requestAnimationFrame, cancelAnimationFrame */\nimport { FieldType, DimensionSubtype } from 'datamodel';\nimport {\n axisLeft,\n axisRight,\n axisTop,\n axisBottom\n} from 'd3-axis';\nimport {\n symbolCircle,\n symbolCross,\n symbolDiamond,\n symbolSquare,\n symbolStar,\n symbolWye,\n symbolTriangle,\n symbol,\n stack as d3Stack,\n stackOffsetDiverging,\n stackOrderNone,\n stackOrderAscending,\n stackOrderDescending,\n stackOffsetNone,\n stackOffsetExpand,\n stackOffsetWiggle,\n pie,\n arc,\n line,\n curveLinear,\n curveStepAfter,\n curveStepBefore,\n curveStep,\n curveCatmullRom,\n area\n} from 'd3-shape';\nimport { scaleBand } from 'd3-scale';\nimport { nest } from 'd3-collection';\nimport {\n interpolate,\n interpolateRgb,\n piecewise,\n interpolateNumber,\n interpolateHslLong\n} from 'd3-interpolate';\nimport {\n easeCubic,\n easeBounce,\n easePoly,\n easeBack,\n easeCircle,\n easeLinear,\n easeElastic\n} from 'd3-ease';\nimport {\n color,\n rgb,\n hsl\n} from 'd3-color';\nimport { voronoi } from 'd3-voronoi';\nimport Model from 'hyperdis';\nimport * as STACK_CONFIG from './enums/stack-config';\n\nconst HTMLElement = window.HTMLElement;\n\nconst isSimpleObject = (obj) => {\n let token;\n if (typeof obj === 'object') {\n if (obj === null) { return false; }\n token = Object.prototype.toString.call(obj);\n if (token === '[object Object]') {\n return (obj.constructor.toString().match(/^function (.*)\\(\\)/m) || [])[1] === 'Object';\n }\n }\n return false;\n};\n\n/**\n * Returns unique id\n * @return {string} Unique id string\n */\nconst\n getUniqueId = () => `id-${new Date().getTime()}${Math.round(Math.random() * 10000)}`;\n\n/**\n * Deep copies an object and returns a new object.\n * @param {Object} o Object to clone\n * @return {Object} New Object.\n */\nconst clone = (o) => {\n const output = {};\n let v;\n for (const key in o) {\n if ({}.hasOwnProperty.call(o, key)) {\n v = o[key];\n output[key] = isSimpleObject(v) ? clone(v) : v;\n }\n }\n return output;\n};\n\n/**\n* Checks the existence of keys in an object\n* @param {Array} keys Set of keys which are to be checked\n* @param {Object} obj whose keys are checked from the set of keys provided\n* @return {Object} Error if the keys are absent, or the object itself\n*/\nconst checkExistence = (keys, obj) => {\n const nonExistentKeys = [];\n keys.forEach((key) => {\n if (key in obj) {\n return;\n }\n nonExistentKeys.push(key);\n });\n return nonExistentKeys;\n};\n\nconst sanitizeIP = {\n typeObj: (keys, obj) => {\n if (typeof obj !== 'object') {\n return Error('Argument type object expected');\n }\n\n const nonExistentKeys = checkExistence(keys, obj);\n if (nonExistentKeys.length) {\n return Error(`Missing keys from parameter ${nonExistentKeys.join(', ')}`);\n }\n return obj;\n },\n\n /* istanbul ignore next */ htmlElem: (elem) => {\n if (!(elem instanceof HTMLElement)) {\n return Error('HTMLElement required');\n }\n return elem;\n }\n};\n\n/**\n * Gets the maximum value from an array of objects for a given property name\n * @param {Array.} data Array of objects\n * @param {string} field Field name\n * @return {number} Maximum value\n */\nconst getMax = (data, field) => Math.max(...data.filter(d => !isNaN(d[field])).map(d => d[field]));\n\n/**\n * Gets the minimum value from an array of objects for a given property name\n * @param {Array.} data Array of objects\n * @param {string} field Field name\n * @return {number} Minimum value\n */\nconst getMin = (data, field) => Math.min(...data.filter(d => !isNaN(d[field])).map(d => d[field]));\n\n/**\n * Gets the domain from the data based on the field name and type of field\n * @param {Array. | Array.} data Data Array\n * @param {Array.} fields Array of fields from where the domain will be calculated\n * @param {string} fieldType Type of field - nominal, quantitiative, temporal.\n * @return {Array} Usually contains a min and max value if field is quantitative or\n * an array of values if field type is nominal or ordinal\n */\nconst getDomainFromData = (data, fields, fieldType) => {\n let domain;\n let domArr;\n data = data[0] instanceof Array ? data : [data];\n switch (fieldType) {\n case DimensionSubtype.CATEGORICAL:\n domain = [].concat(...data.map(arr => arr.map(d => d[fields[0]]).filter(d => d !== undefined)));\n break;\n default:\n domArr = data.map((arr) => {\n const firstMin = getMin(arr, fields[0]);\n const secondMin = getMin(arr, fields[1]);\n const firstMax = getMax(arr, fields[0]);\n const secondMax = getMax(arr, fields[1]);\n return [Math.min(firstMin, secondMin), Math.max(firstMax, secondMax)];\n });\n domain = [Math.min(...domArr.map(d => d[0])), Math.max(...domArr.map(d => d[1]))];\n break;\n }\n return domain;\n};\n\n/**\n * Union Domain values\n * @param {Array.} domains Array of domain values\n * @param {string} fieldType type of field - dimension,measure or datetime.\n * @return {Array} Unioned domain of all domain values.\n */\nconst unionDomain = (domains, fieldType) => {\n let domain;\n domains = domains.filter(dom => dom.length);\n if (fieldType === DimensionSubtype.CATEGORICAL) {\n domain = domain = [].concat(...domains);\n } else {\n domain = [Math.min(...domains.map(d => d[0])), Math.max(...domains.map(d => d[1]))];\n }\n\n return domain;\n};\n\nconst symbolFns = {\n circle: symbolCircle,\n cross: symbolCross,\n diamond: symbolDiamond,\n square: symbolSquare,\n star: symbolStar,\n wye: symbolWye,\n triangle: symbolTriangle\n};\n\nconst easeFns = {\n cubic: easeCubic,\n bounce: easeBounce,\n linear: easeLinear,\n elastic: easeElastic,\n back: easeBack,\n poly: easePoly,\n circle: easeCircle\n};\n\n/**\n * Returns the maximum or minimum points of a compare value from an array of objects.\n * @param {Array} points Array of objects\n * @param {string} compareValue Key in the object on which the comparing will be done.\n * @param {string} minOrMax minimum or maximum.\n * @return {Object} Minimum or maximum point.\n */\nconst getExtremePoint = (points, compareValue, minOrMax) => {\n let extremePoint;\n let point;\n const len = points.length;\n let minOrMaxVal = minOrMax === 'max' ? -Infinity : Infinity;\n let val;\n\n for (let i = 0; i < len; i++) {\n point = points[i];\n val = point[compareValue];\n if (minOrMax === 'min' ? val < minOrMaxVal : val > minOrMaxVal) {\n minOrMaxVal = val;\n extremePoint = point;\n }\n }\n\n return extremePoint;\n};\n\n/**\n * Returns the minimum point of a compare value from an array of objects.\n * @param {Array} points Array of objects\n * @param {string} compareValue Key in the object on which the comparing will be done.\n * @return {Object} Minimum point.\n */\nconst getMinPoint = (points, compareValue) => getExtremePoint(points, compareValue, 'min');\n\n/**\n * Returns the maximum point of a compare value from an array of objects.\n * @param {Array} points Array of objects\n * @param {string} compareValue Key in the object on which the comparing will be done.\n * @return {Object} Maximum point.\n */\nconst getMaxPoint = (points, compareValue) => getExtremePoint(points, compareValue, 'max');\n\n/**\n * Gets the index of the closest value of the given value from the array.\n * @param {Array} arr Array of values\n * @param {number} value Value from which the nearest value will be calculated.\n * @param {string} side side property.\n * @return {number} index of the closest value\n */\n/* istanbul ignore next */const getClosestIndexOf = (arr, value, side) => {\n let low = 0;\n const arrLen = arr.length;\n let high = arrLen - 1;\n\n let mid;\n let d1;\n let d2;\n\n while (low < high) {\n mid = Math.floor((low + high) / 2);\n d1 = Math.abs(arr[mid] - value);\n d2 = Math.abs(arr[mid + 1] - value);\n\n if (d2 <= d1) {\n low = mid + 1;\n } else {\n high = mid;\n }\n }\n\n if (!side) {\n return high;\n }\n\n const highVal = arr[high];\n if (highVal === value) {\n return high;\n } else if (highVal > value) {\n if (high === 0) { return high; }\n return side === 'left' ? high - 1 : high;\n }\n if (high === arr.length - 1) { return high; }\n return side === 'left' ? high : high + 1;\n};\n\n/**\n * Returns the browser window object\n * @return {Window} Window object\n*/\nconst getWindow = () => window;\n\n/**\n * Returns the browser window object\n * @return {Window} Window object\n*/\nconst reqAnimFrame = (() => requestAnimationFrame)();\n\nconst cancelAnimFrame = (() => cancelAnimationFrame)();\n\n/**\n * Capitalizes the first letter of the word\n * @param {string} text word\n * @return {string} Capitalized word\n */\nconst capitalizeFirst = (text) => {\n text = text.toLowerCase();\n\n return text.replace(/\\w\\S*/g, txt => txt.charAt(0).toUpperCase() + txt.substr(1));\n};\n\n/**\n *\n *\n * @param {*} arr\n */\nconst unique = arr => ([...new Set(arr)]);\n\n/**\n * Gets the minimum difference between two consecutive numbers in an array.\n * @param {Array} arr Array of numbers\n * @param {number} index index of the value\n * @return {number} minimum difference between values\n */\n/* istanbul ignore next */ const getMinDiff = (arr, index) => {\n let diff;\n let uniqueVals;\n if (index !== undefined) {\n uniqueVals = unique(arr.map(d => d[index]));\n } else {\n uniqueVals = unique(arr);\n }\n if (uniqueVals.length > 1) {\n diff = Math.abs(uniqueVals[1] - uniqueVals[0]);\n for (let i = 2, len = uniqueVals.length; i < len; i++) {\n diff = Math.min(diff, Math.abs(uniqueVals[i] - uniqueVals[i - 1]));\n }\n } else {\n diff = uniqueVals[0];\n }\n\n return diff;\n};\n\n/**\n * Returns the class name appended with a given id.\n * @param {string} cls class name\n * @param {string} id unique identifier\n * @param {string} prefix string needed to add before the classname\n * @return {string} qualified class name\n */\n/* istanbul ignore next */const getQualifiedClassName = (cls, id, prefix) => {\n cls = cls.replace(/^\\.*/, '');\n return [`${prefix}-${cls}`, `${prefix}-${cls}-${id}`];\n};\n\n/**\n * This method is used to set the default value for variables\n * without sullying the code with conditional statements.\n *\n * @export\n * @param {any} param The parameter to test.\n * @param {any} value The default value to assign.\n * @return {any} The value.\n */\n/* istanbul ignore next */ const defaultValue = (param, value) => {\n if (typeof param === 'undefined' || (typeof param === 'object' && !param)) {\n return value;\n }\n return param;\n};\n\n/**\n * DESCRIPTION TODO\n * @todo\n *\n * @export\n * @param {Object} graph graph whose dependency order has to be generated\n * @return {Object} @todo\n */\nconst getDependencyOrder = (graph) => {\n const dependencyOrder = [];\n const visited = {};\n const keys = Object.keys(graph);\n /**\n * DESCRIPTION TODO\n * @todo\n *\n * @export\n * @param {Object} name @todo\n * @return {Object} @todo\n */\n const visit = (name) => {\n if (dependencyOrder.length === keys.length) {\n return true;\n }\n visited[name] = true;\n const edges = graph[name];\n for (let e = 0; e < edges.length; e++) {\n const dep = edges[e];\n if (!visited[dep]) {\n visit(dep);\n }\n }\n\n dependencyOrder.push(name);\n return false;\n };\n\n for (let i = 0; i < keys.length; i++) {\n if (visit(keys[i], i)) break;\n }\n\n return dependencyOrder;\n};\n\n/**\n * Iterates over the properties of an object and applies the function\n *\n * @param {any} obj object to be iterated upon\n * @param {any} fn function to be applied on it\n */\nconst objectIterator = (obj, fn) => {\n for (const key in obj) {\n if (Object.hasOwnProperty.call(obj, key)) {\n fn(key, obj);\n }\n }\n};\n\n/**\n * This class creates a d3 voronoi for retrieving the nearest neighbour of any point from a set of two\n * dimensional points\n * @class Voronoi\n */\n/* istanbul ignore next */ class Voronoi {\n /**\n * Initialize the voronoi with the data given.\n * @param {Array.} data Array of points.\n */\n constructor (data) {\n this._voronoi = voronoi().x(d => d.x).y(d => d.y);\n this.data(data);\n }\n\n /**\n * Sets the data to voronoi\n * @param {Array.} data Array of objects.\n * @return {Voronoi} Instance of voronoi.\n */\n data (data) {\n if (data) {\n this._voronoiFn = this._voronoi(data);\n }\n return this;\n }\n\n /**\n * Finds the closest point to the x and y position given.\n * @param {number} x x value\n * @param {number} y y value\n * @param {number} radius search radius.\n * @return {Object} Details of the nearest point.\n */\n find (x, y, radius) {\n return this._voronoiFn.find(x, y, radius);\n }\n}\n\n/**\n * Methods to handle changes to table configuration and reactivity are handled by this\n * class.\n */\n/**\n * Common store class\n *\n * @class Store\n */\nclass Store {\n /**\n * Creates an instance of Store.\n * @param {Object} config The object to create the state store with.\n * @memberof Store\n */\n constructor (config) {\n // create reactive model\n this.model = Model.create(config);\n this._listeners = [];\n }\n\n /**\n * This method returns a plain JSON object\n * with all the fields in the state store.\n *\n * @return {Object} Serialized representation of state store.\n * @memberof Store\n */\n serialize () {\n return this.model.serialize();\n }\n\n /**\n * This method is used to update the value of a property in the state store.\n *\n * @param {string} propName The name of the property.\n * @param {number} value The new value of the property.\n * @memberof Store\n */\n commit (propName, value) {\n // check if appropriate enum has been used\n this.model.prop(propName, value);\n }\n\n /**\n * This method is used to register a callbacl that will execute\n * when one or more properties change.\n *\n * @param {string | Array} propNames name of property or array of props.\n * @param {Function} callBack The callback to execute.\n * @memberof Store\n */\n /* istanbul ignore next */registerChangeListener (propNames, callBack, instantCall) {\n let props = propNames;\n if (!Array.isArray(propNames)) {\n props = [propNames];\n }\n const fn = this.model.next(props, callBack, instantCall);\n this._listeners.push(fn);\n return this;\n }\n /**\n * This method is used to register a callbacl that will execute\n * when one or more properties change.\n *\n * @param {string | Array} propNames name of property or array of props.\n * @param {Function} callBack The callback to execute.\n * @memberof Store\n */\n /* istanbul ignore next */ registerImmediateListener (propNames, callBack, instantCall) {\n let props = propNames;\n if (!Array.isArray(propNames)) {\n props = [propNames];\n }\n const fn = this.model.on(props, callBack, instantCall);\n this._listeners.push(fn);\n return this;\n }\n /**\n * This method is used to get the name of the property\n * from the state store.\n *\n * @param {string} propName The name of the field in state store.\n * @return {any} The value of the field.\n * @memberof Store\n */\n get (propName) {\n return this.model.prop(propName);\n }\n\n /**\n * This method is used to register a computed property that is computed every time\n * the store value changes.\n *\n * @param {string} propName The name of the property to create.\n * @param {Function} callBack The function to execute when depemdent props change.\n * @memberof Store\n */\n computed (propName, callBack) {\n return this.model.calculatedProp(propName, callBack);\n }\n\n unsubscribeAll () {\n this._listeners.forEach(fn => fn());\n }\n}\n\n/**\n * Sanitize an input number / string mixed number. Currently dot in the no is not supported.\n *\n * @param {number | string} val pure number or string mixed number\n * @return {number | null} Number if it can be extracted. Otherwise null\n */\nconst intSanitizer = (val) => {\n const arr = val.toString().match(/(\\d+)(px)*/g);\n if (!arr) {\n // If only characters are passed\n return null;\n }\n\n return parseInt(arr[0], 10);\n};\n\n/**\n * Setter getter creator from config\n * Format\n * PROPERTRY_NAME: {\n * value: // default value of the property,\n * meta: {\n * typeCheck: // The setter value will be checked using this. If the value is function then the setter value\n * // is passed as args. (Optional)\n * typeExpected: // The output of typecheck action will be tested against this. Truthy value will set the\n * // value to the setter\n * sanitizaiton: // Need for sanitization before type is checked\n * }\n * }\n *\n * @param {Object} holder an empty object on which the getters and setters will be mounted\n * @param {Object} options options config based on which the getters and setters are determined.\n * @param {Hyperdis} model optional model to attach the property. If not sent new moel is created.\n * @return {Array} @todo\n */\nconst transactor = (holder, options, model) => {\n let conf;\n const store = model && model instanceof Model ? model : Model.create({});\n\n for (const prop in options) {\n if ({}.hasOwnProperty.call(options, prop)) {\n conf = options[prop];\n if (!store.prop(prop)) {\n store.append({ [prop]: conf.value });\n }\n holder[prop] = ((context, key, meta) => (...params) => {\n let val;\n let compareTo;\n const paramsLen = params.length;\n const prevVal = store.prop(prop);\n if (paramsLen) {\n // If parameters are passed then it's a setter\n const spreadParams = meta && meta.spreadParams;\n val = params;\n const values = [];\n if (meta) {\n for (let i = 0; i < paramsLen; i++) {\n val = params[i];\n const sanitization = meta.sanitization && (spreadParams ? meta.sanitization[i] :\n meta.sanitization);\n const typeCheck = meta.typeCheck && (spreadParams ? meta.typeCheck[i] : meta.typeCheck);\n if (sanitization && typeof sanitization === 'function') {\n // Sanitize if required\n val = sanitization(val, prevVal, holder);\n }\n\n if (typeCheck) {\n // Checking if a setter is valid\n if (typeof typeCheck === 'function') {\n let typeExpected = meta.typeExpected;\n if (typeExpected && spreadParams) {\n typeExpected = typeExpected[i];\n }\n if (typeExpected) {\n compareTo = typeExpected;\n } else {\n compareTo = true;\n }\n\n if (typeCheck(val) === compareTo) {\n values.push(val);\n }\n } else if (typeof typeCheck === 'string') {\n if (typeCheck === 'constructor') {\n const typeExpected = spreadParams ? meta.typeExpected[i] : meta.typeExpected;\n if (val && (val.constructor.name === typeExpected)) {\n values.push(val);\n }\n }\n } else {\n // context.prop(key, val);\n values.push(val);\n }\n } else {\n values.push(val);\n }\n }\n const preset = meta.preset;\n const oldValues = context.prop(key);\n preset && preset(values[0], holder);\n if (spreadParams) {\n oldValues.forEach((value, i) => {\n if (values[i] === undefined) {\n values[i] = value;\n }\n });\n }\n values.length && context.prop(key, spreadParams ? values : values[0]);\n } else {\n context.prop(key, spreadParams ? val : val[0]);\n }\n return holder;\n }\n // No parameters are passed hence its a getter\n return context.prop(key);\n })(store, prop, conf.meta);\n }\n }\n\n return [holder, store];\n};\n\n/**\n *\n *\n * @param {*} context\n * @param {*} props\n */\nconst generateGetterSetters = (context, props) => {\n Object.entries(props).forEach((propInfo) => {\n const prop = propInfo[0];\n const typeChecker = propInfo[1].typeChecker;\n const sanitization = propInfo[1].sanitization;\n const prototype = context.constructor.prototype;\n if (!(Object.hasOwnProperty.call(prototype, prop))) {\n context[prop] = (...params) => {\n if (params.length) {\n let value = params[0];\n if (sanitization) {\n value = sanitization(context, params[0]);\n }\n if (typeChecker && !typeChecker(value)) {\n return context[`_${prop}`];\n }\n context[`_${prop}`] = value;\n return context;\n } return context[`_${prop}`];\n };\n }\n });\n};\n\n/**\n *\n *\n * @param {*} arr\n * @param {*} prop\n */\nconst getArraySum = (arr, prop) => arr.reduce((total, elem) => {\n total += prop ? elem[prop] : elem;\n return total;\n}, 0);\n\n/**\n *\n *\n * @param {*} arr1\n * @param {*} arr2\n * @returns\n */\nconst arraysEqual = (arr1, arr2) => {\n if (arr1.length !== arr2.length) { return false; }\n for (let i = arr1.length; i >= 0; i--) {\n if (arr1[i] !== arr2[i]) { return false; }\n }\n\n return true;\n};\n\n/* eslint valid-typeof:0 */\n/**\n * Returns a validation function which can be used to validate variables against a type and value\n *\n * @param {any} type type of value that the object should have\n * @return {Object} validation function\n */\nconst isEqual = type => (oldVal, newVal) => {\n if (type === 'Array') {\n if (!oldVal) {\n return false;\n }\n return arraysEqual(oldVal, newVal);\n } else if (type === 'Object') {\n return Object.is(oldVal, newVal);\n } return oldVal === newVal;\n};\n\n/**\n * Description @todo\n *\n * @param {any} transactionModel @todo\n * @param {any} transactionEndpoint @todo\n * @param {any} transactionItems @todo\n * @return {any} @todo\n */\nconst enableChainedTransaction = (transactionModel, transactionEndpoint, transactionItems) =>\n transactionItems.forEach(item => transactionModel.on(item, ([, newVal]) => transactionEndpoint[item](newVal)));\n\n/**\n * Chceks if the element is istanceof HTMLElement\n *\n * @param {Object} elem any JS Object\n */\nconst isHTMLElem = elem => elem instanceof HTMLElement;\n\nconst ERROR_MSG = {\n INTERFACE_IMPL: 'Method not implemented'\n};\n\n/**\n * Merges the sink object in the source by recursively iterating through the object properties\n * @param {Object} source Source Object\n * @param {Object} sink Sink Object\n * @return {Object} Merged object\n */\nconst mergeRecursive = (source, sink) => {\n for (const prop in sink) {\n if (isSimpleObject(source[prop]) && isSimpleObject(sink[prop])) {\n mergeRecursive(source[prop], sink[prop]);\n } else if (sink[prop] instanceof Object && sink[prop].constructor === Object) {\n source[prop] = {};\n mergeRecursive(source[prop], sink[prop]);\n } else {\n source[prop] = sink[prop];\n }\n }\n return source;\n};\n\nconst interpolateArray = (data, fitCount) => {\n const linearInterpolate = function (before, after, atPoint) {\n return before + (after - before) * atPoint;\n };\n const newData = [];\n const springFactor = ((data.length - 1) / (fitCount - 1));\n newData[0] = data[0]; // for new allocation\n for (let i = 1; i < fitCount - 1; i++) {\n const tmp = i * springFactor;\n const before = (Math.floor(tmp)).toFixed();\n const after = (Math.ceil(tmp)).toFixed();\n const atPoint = tmp - before;\n newData[i] = linearInterpolate(data[before], data[after], atPoint);\n }\n newData[fitCount - 1] = data[data.length - 1]; // for new allocation\n return newData;\n};\n\n/**\n *\n *\n * @param {*} fn\n */\nconst nextFrame = (fn) => {\n setTimeout(() => {\n fn();\n }, 0);\n};\n\n/**\n *\n *\n * @param {*} angle\n */\nconst angleToRadian = angle => angle * Math.PI / 180;\n\n/**\n *\n *\n * @param {*} newName\n * @param {*} oldName\n */\nconst replaceCSSPrefix = () => {\n // @todo\n};\n\n/**\n * Gets the interpolator function from d3 color\n *\n */\nconst interpolator = () => interpolate;\n\n/**\n * Gets the number interpolator from d3 color\n *\n */\nconst numberInterpolator = () => interpolateNumber;\n\n/**\n * Gets the rgb interpolator from d3 color\n *\n */\nconst colorInterpolator = () => interpolateRgb;\n\n/**\n * Gets the hsl interpolator from d3 color\n *\n */\nconst hslInterpolator = () => interpolateHslLong;\n\nconst transformColors = () => ({\n color,\n rgb,\n hsl\n});\n\n/**\n * Gets the piecewise interpolator from d3 color\n *\n */\nconst piecewiseInterpolator = () => piecewise;\n\nfunction hue2rgb (p, q, t) {\n if (t < 0) t += 1;\n if (t > 1) t -= 1;\n if (t < 1 / 6) return p + (q - p) * 6 * t;\n if (t < 1 / 2) return q;\n if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n return p;\n}\n\n /**\n * Converts an HSL color value to RGB. Conversion formula\n * adapted from http://en.wikipedia.org/wiki/HSL_color_space.\n * Assumes h, s, and l are contained in the set [0, 1] and\n * returns r, g, and b in the set [0, 255].\n *\n * @param Number h The hue\n * @param Number s The saturation\n * @param Number l The lightness\n * @return Array The RGB representation\n */\nconst hslToRgb = (h, s, l, a = 1) => {\n let r;\n let g;\n let b;\n\n if (s === 0) {\n r = g = b = l; // achromatic\n } else {\n const q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n const p = 2 * l - q;\n\n r = hue2rgb(p, q, h + 1 / 3);\n g = hue2rgb(p, q, h);\n b = hue2rgb(p, q, h - 1 / 3);\n }\n\n return [r * 255, g * 255, b * 255, a];\n};\n\n /**\n * Converts an RGB color value to HSV. Conversion formula\n * adapted from http://en.wikipedia.org/wiki/HSV_color_space.\n * Assumes r, g, and b are contained in the set [0, 255] and\n * returns h, s, and v in the set [0, 1].\n *\n * @param Number r The red color value\n * @param Number g The green color value\n * @param Number b The blue color value\n * @return Array The HSV representation\n */\nconst rgbToHsv = (r, g, b, a = 1) => {\n r = +r; g = +g; b = +b; a = +a;\n r /= 255; g /= 255; b /= 255;\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n let h;\n let s;\n const l = (max + min) / 2;\n\n if (max === min) {\n h = s = 0; // achromatic\n } else {\n const d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n switch (max) {\n case r: h = (g - b) / d + (g < b ? 6 : 0); break;\n case g: h = (b - r) / d + 2; break;\n case b: h = (r - g) / d + 4; break;\n default: break;\n }\n h /= 6;\n }\n return [h, s, l, a];\n};\n\n /**\n * Converts an HSV color value to RGB. Conversion formula\n * adapted from http://en.wikipedia.org/wiki/HSV_color_space.\n * Assumes h, s, and v are contained in the set [0, 1] and\n * returns r, g, and b in the set [0, 255].\n *\n * @param Number h The hue\n * @param Number s The saturation\n * @param Number v The value\n * @return Array The RGB representation\n */\nconst hsvToRgb = (h, s, v, a = 1) => {\n let r;\n let g;\n let b;\n\n const i = Math.floor(h * 6);\n const f = h * 6 - i;\n const p = v * (1 - s);\n const q = v * (1 - f * s);\n const t = v * (1 - (1 - f) * s);\n\n switch (i % 6) {\n case 0: r = v; g = t; b = p; break;\n case 1: r = q; g = v; b = p; break;\n case 2: r = p; g = v; b = t; break;\n case 3: r = p; g = q; b = v; break;\n case 4: r = t; g = p; b = v; break;\n case 5: r = v; g = p; b = q; break;\n default: break;\n }\n\n return [r * 255, g * 255, b * 255, a];\n};\n\nconst hexToHsv = (hex) => {\n const result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\n\n const r = parseInt(result[1], 16);\n const g = parseInt(result[2], 16);\n const b = parseInt(result[3], 16);\n const a = result[4] ? parseInt(result[4], 16) : 1;\n return rgbToHsv(r, g, b, a);\n};\n\nconst detectColor = (col) => {\n const matchRgb = /rgb\\((\\d{1,3}), (\\d{1,3}), (\\d{1,3})\\)/;\n const matchHsl = /hsl\\((\\d+),\\s*([\\d.]+)%,\\s*([\\d.]+)%\\)/g;\n\n // Source : https://gist.github.com/sethlopezme/d072b945969a3cc2cc11\n // eslint-disable-next-line\n const matchRgba = /rgba?\\(((25[0-5]|2[0-4]\\d|1\\d{1,2}|\\d\\d?)\\s*,\\s*?){2}(25[0-5]|2[0-4]\\d|1\\d{1,2}|\\d\\d?)\\s*,?\\s*([01]\\.?\\d*?)?\\)/;\n // eslint-disable-next-line\n const matchHsla = /^hsla\\((0|360|35\\d|3[0-4]\\d|[12]\\d\\d|0?\\d?\\d),(0|100|\\d{1,2})%,(0|100|\\d{1,2})%,(0?\\.\\d|1(\\.0)?)\\)$/;\n const matchHex = /^#([0-9a-f]{3}){1,2}$/i;\n\n if (matchRgb.test(col) || matchRgba.test(col)) {\n return 'rgb';\n } else if (matchHsl.test(col) || matchHsla.test(col)) {\n return 'hsl';\n } else if (matchHex.test(col)) {\n return 'hex';\n } return col;\n};\n\n/**\n *\n *\n * @param {*} model\n * @param {*} propModel\n * @returns\n */\nconst filterPropagationModel = (model, propModel, measures) => {\n const { data, schema } = propModel.getData();\n let filteredModel;\n if (schema.length) {\n const fieldMap = model.getFieldsConfig();\n filteredModel = model.select((fields) => {\n const include = data.some(row => schema.every((propField, idx) => {\n if (!measures && (!(propField.name in fieldMap) ||\n fieldMap[propField.name].def.type === FieldType.MEASURE)) {\n return true;\n }\n return row[idx] === fields[propField.name].valueOf();\n }));\n return include;\n }, {\n saveChild: false\n });\n } else {\n filteredModel = propModel;\n }\n\n return filteredModel;\n};\n\nconst assembleModelFromIdentifiers = (model, identifiers) => {\n let schema = [];\n let data;\n const fieldMap = model.getFieldsConfig();\n if (identifiers.length) {\n const fields = identifiers[0];\n const len = fields.length;\n for (let i = 0; i < len; i++) {\n const field = fields[i];\n const fieldObj = fieldMap[field] && Object.assign({}, fieldMap[field].def);\n if (fieldObj) {\n schema.push(Object.assign(fieldObj));\n }\n }\n\n data = [];\n const header = identifiers[0];\n for (let i = 1; i < identifiers.length; i += 1) {\n const vals = identifiers[i];\n const temp = {};\n vals.forEach((fieldVal, cIdx) => {\n temp[header[cIdx]] = fieldVal;\n });\n data.push(temp);\n }\n } else {\n data = [];\n schema = [];\n }\n\n return new model.constructor(data, schema);\n};\n\n/**\n *\n *\n * @param {*} dataModel\n * @param {*} criteria\n * @returns\n */\nconst getDataModelFromRange = (dataModel, criteria, mode) => {\n if (criteria === null) {\n return null;\n }\n const selFields = Object.keys(criteria);\n const selFn = fields => selFields.every((field) => {\n const val = fields[field].value;\n const range = criteria[field][0] instanceof Array ? criteria[field][0] : criteria[field];\n if (typeof range[0] === 'string') {\n return range.find(d => d === val) !== undefined;\n }\n return range ? val >= range[0] && val <= range[1] : true;\n });\n\n return dataModel.select(selFn, {\n saveChild: false,\n mode\n });\n};\n\n/**\n *\n *\n * @param {*} dataModel\n * @param {*} identifiers\n * @returns\n */\nconst getDataModelFromIdentifiers = (dataModel, identifiers, mode) => {\n let filteredDataModel;\n if (identifiers instanceof Array) {\n const fieldsConfig = dataModel.getFieldsConfig();\n\n const dataArr = identifiers.slice(1, identifiers.length);\n if (identifiers instanceof Function) {\n filteredDataModel = identifiers(dataModel, {}, false);\n } else if (identifiers instanceof Array && identifiers[0].length) {\n const filteredSchema = identifiers[0].filter(d => d in fieldsConfig);\n filteredDataModel = dataModel.select((fields) => {\n let include = true;\n filteredSchema.forEach((propField, idx) => {\n const value = fields[propField].valueOf();\n const index = dataArr.findIndex(d => d[idx] === value);\n include = include && index !== -1;\n });\n return include;\n }, {\n saveChild: false,\n mode\n });\n }\n } else {\n filteredDataModel = getDataModelFromRange(dataModel, identifiers, mode);\n }\n return filteredDataModel;\n};\n\n/**\n *\n *\n * @param {*} context\n * @param {*} listenerMap\n */\nconst registerListeners = (context, listenerMap) => {\n const propListenerMap = listenerMap(context);\n for (const key in propListenerMap) {\n if ({}.hasOwnProperty.call(propListenerMap, key)) {\n const mapObj = propListenerMap[key];\n const propType = mapObj.type;\n const props = mapObj.props;\n const listenerFn = mapObj.listener;\n context.store()[propType](props, listenerFn);\n }\n }\n};\n\nconst isValidValue = value => !isNaN(value) && value !== -Infinity && value !== Infinity;\n/**\n *\n *\n * @param {*} obj\n * @param {*} fields\n * @returns\n */\nconst getObjProp = (obj, ...fields) => {\n if (obj === undefined || obj === null) {\n return obj;\n }\n let retObj = obj;\n for (let i = 0, len = fields.length; i < len; i++) {\n retObj = retObj[fields[i]];\n if (retObj === undefined || retObj === null) {\n break;\n }\n }\n return retObj;\n};\n\n/**\n *\n *\n * @param {*} str\n * @returns\n */\nconst escapeHTML = (str) => {\n const htmlEscapes = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": ''',\n '/': '/'\n };\n const htmlEscaper = /[&<>\"'/]/g;\n return (`${str}`).replace(htmlEscaper, match => htmlEscapes[match]);\n};\n\n/**\n *\n *\n * @param {*} arr\n */\nconst transposeArray = arr => arr[0].map((col, i) => arr.map(row => row[i]));\nconst toArray = arr => (arr instanceof Array ? arr : [arr]);\nconst extendsClass = (cls, extendsFrom, found) => {\n if (!cls) {\n return false;\n }\n const prototype = cls.prototype;\n if (prototype instanceof extendsFrom) {\n found = true;\n } else {\n found = extendsClass(prototype, extendsFrom, found);\n }\n return found;\n};\n\n/**\n *\n * @param {*} dm1\n * @param {*} dm2\n */\nconst concatModels = (dm1, dm2) => {\n const dataObj1 = dm1.getData();\n const dataObj2 = dm2.getData();\n const data1 = dataObj1.data;\n const data2 = dataObj2.data;\n const schema1 = dataObj1.schema;\n const schema2 = dataObj2.schema;\n const tuples1 = {};\n const tuples2 = {};\n const commonTuples = {};\n for (let i = 0; i < data1.length; i++) {\n for (let ii = 0; ii < data2.length; ii++) {\n const row1 = data1[i];\n const row2 = data2[ii];\n const dim1Values = row1.filter((d, idx) => schema1[idx].type === FieldType.DIMENSION);\n const dim2Values = row2.filter((d, idx) => schema2[idx].type === FieldType.DIMENSION);\n const allDimSame = dim1Values.every(value => dim2Values.indexOf(value) !== -1);\n if (allDimSame) {\n const key = dim1Values.join();\n !commonTuples[key] && (commonTuples[key] = {});\n row1.forEach((value, idx) => {\n commonTuples[key][schema1[idx].name] = value;\n });\n row2.forEach((value, idx) => {\n commonTuples[key][schema2[idx].name] = value;\n });\n } else {\n const dm1Key = dim1Values.join();\n const dm2Key = dim2Values.join();\n if (!commonTuples[dm1Key] && !commonTuples[dm2Key]) {\n !tuples1[dm1Key] && (tuples1[dm1Key] = {});\n !tuples2[dm2Key] && (tuples2[dm2Key] = {});\n row1.forEach((value, idx) => {\n tuples1[dm1Key][schema1[idx].name] = value;\n });\n row2.forEach((value, idx) => {\n tuples2[dm2Key][schema2[idx].name] = value;\n });\n }\n }\n }\n }\n\n const commonSchema = [...schema1, ...schema2.filter(s2 => schema1.findIndex(s1 => s1.name === s2.name) === -1)];\n const data = [...Object.values(tuples1), ...Object.values(tuples2), ...Object.values(commonTuples)];\n return [data, commonSchema];\n};\n\nconst getSymbol = type => symbol().type(symbolFns[type]);\n\nconst stackOrders = {\n [STACK_CONFIG.ORDER_NONE]: stackOrderNone,\n [STACK_CONFIG.ORDER_ASCENDING]: stackOrderAscending,\n [STACK_CONFIG.ORDER_DESCENDING]: stackOrderDescending\n};\nconst stackOffsets = {\n [STACK_CONFIG.OFFSET_DIVERGING]: stackOffsetDiverging,\n [STACK_CONFIG.OFFSET_NONE]: stackOffsetNone,\n [STACK_CONFIG.OFFSET_EXPAND]: stackOffsetExpand,\n [STACK_CONFIG.OFFSET_WIGGLE]: stackOffsetWiggle\n};\n\n// eslint-disable-next-line require-jsdoc\nconst stack = params => d3Stack().keys(params.keys).offset(stackOffsets[params.offset])\n .order(stackOrders[params.order])(params.data);\n\n/**\n * Groups the data into a hierarchical tree structure based on one or more fields.\n * @param { Object } params Configuration properties for nesting data\n * @param { Array. } params.data Data which needs to be grouped\n * @param { Array. } params.keys Field indices by which the data will be grouped\n * @return { Array. } Grouped data array\n */\nconst nestCollection = (params) => {\n const nestFn = nest();\n params.keys.forEach(key => nestFn.key(d => d[key]));\n return nestFn.entries(params.data);\n};\n\nconst pathInterpolators = {\n curveLinear,\n curveStepAfter,\n curveStepBefore,\n curveStep,\n curveCatmullRom,\n stepAfter: curveStepAfter,\n catmullRom: curveCatmullRom,\n step: curveStep,\n stepBefore: curveStepBefore,\n linear: curveLinear\n};\n\nconst Symbols = {\n axisLeft,\n axisRight,\n axisTop,\n axisBottom,\n line,\n area,\n pie,\n arc,\n nest\n};\n\nconst Scales = {\n band: scaleBand\n};\n\nconst getSmallestDiff = (points) => {\n points = points.sort((a, b) => a - b);\n let minDiff = points[1] - points[0];\n for (let i = 2; i < points.length; i++) {\n minDiff = Math.min(minDiff, points[i] - points[i - 1]);\n }\n\n return minDiff;\n};\n\nconst require = (lookupWhat, lookupDetails) => ({\n resolvable: (store) => {\n const lookupTarget = store[lookupWhat];\n const depArr = lookupDetails.slice(0, lookupDetails.length - 1);\n const fn = lookupDetails[lookupDetails.length - 1]; // fn\n\n const deps = depArr.map(str => lookupTarget[str]);\n return {\n fn: fn(...deps),\n depArr\n };\n }\n});\n\nconst nextAnimFrame = window.requestAnimationFrame || window.webkitRequestAnimationFrame ||\n window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame ||\n function (callback) {\n setTimeout(callback, 16);\n };\n\nexport {\n require,\n Scales,\n Symbols,\n pathInterpolators,\n stack,\n nestCollection,\n getSymbol,\n transformColors,\n detectColor,\n hexToHsv,\n hslToRgb,\n rgbToHsv,\n hsvToRgb,\n concatModels,\n toArray,\n angleToRadian,\n escapeHTML,\n generateGetterSetters,\n getArraySum,\n interpolator,\n piecewiseInterpolator,\n getDataModelFromIdentifiers,\n getDataModelFromRange,\n colorInterpolator,\n numberInterpolator,\n ERROR_MSG,\n reqAnimFrame,\n nextAnimFrame,\n filterPropagationModel,\n transposeArray,\n cancelAnimFrame,\n getMax,\n getMin,\n getDomainFromData,\n getUniqueId,\n mergeRecursive,\n unionDomain,\n symbolFns,\n easeFns,\n clone,\n isEqual,\n interpolateArray,\n getMinPoint,\n defaultValue,\n getMaxPoint,\n getClosestIndexOf,\n Voronoi,\n checkExistence,\n sanitizeIP,\n getMinDiff,\n capitalizeFirst,\n getWindow,\n getQualifiedClassName,\n Store,\n getDependencyOrder,\n objectIterator,\n intSanitizer,\n transactor,\n enableChainedTransaction,\n isHTMLElem,\n isSimpleObject,\n nextFrame,\n registerListeners,\n replaceCSSPrefix,\n getObjProp,\n extendsClass,\n assembleModelFromIdentifiers,\n isValidValue,\n hslInterpolator,\n getSmallestDiff\n};\n","export function linear(t) {\n return +t;\n}\n","export function circleIn(t) {\n return 1 - Math.sqrt(1 - t * t);\n}\n\nexport function circleOut(t) {\n return Math.sqrt(1 - --t * t);\n}\n\nexport function circleInOut(t) {\n return ((t *= 2) <= 1 ? 1 - Math.sqrt(1 - t * t) : Math.sqrt(1 - (t -= 2) * t) + 1) / 2;\n}\n","import {path} from \"d3-path\";\nimport circle from \"./symbol/circle\";\nimport cross from \"./symbol/cross\";\nimport diamond from \"./symbol/diamond\";\nimport star from \"./symbol/star\";\nimport square from \"./symbol/square\";\nimport triangle from \"./symbol/triangle\";\nimport wye from \"./symbol/wye\";\nimport constant from \"./constant\";\n\nexport var symbols = [\n circle,\n cross,\n diamond,\n square,\n star,\n triangle,\n wye\n];\n\nexport default function() {\n var type = constant(circle),\n size = constant(64),\n context = null;\n\n function symbol() {\n var buffer;\n if (!context) context = buffer = path();\n type.apply(this, arguments).draw(context, +size.apply(this, arguments));\n if (buffer) return context = null, buffer + \"\" || null;\n }\n\n symbol.type = function(_) {\n return arguments.length ? (type = typeof _ === \"function\" ? _ : constant(_), symbol) : type;\n };\n\n symbol.size = function(_) {\n return arguments.length ? (size = typeof _ === \"function\" ? _ : constant(+_), symbol) : size;\n };\n\n symbol.context = function(_) {\n return arguments.length ? (context = _ == null ? null : _, symbol) : context;\n };\n\n return symbol;\n}\n","export const ORDER_ASCENDING = 'ascending';\nexport const ORDER_DESCENDING = 'descending';\nexport const ORDER_NONE = 'none';\nexport const OFFSET_DIVERGING = 'diverging';\nexport const OFFSET_NONE = 'none';\nexport const OFFSET_EXPAND = 'expand';\nexport const OFFSET_WIGGLE = 'wiggle';\n","import ascending from \"./ascending\";\n\nexport default function(series) {\n return ascending(series).reverse();\n}\n","export default function(series, order) {\n if (!((n = series.length) > 1)) return;\n for (var i, j = 0, d, dy, yp, yn, n, m = series[order[0]].length; j < m; ++j) {\n for (yp = yn = 0, i = 0; i < n; ++i) {\n if ((dy = (d = series[order[i]][j])[1] - d[0]) >= 0) {\n d[0] = yp, d[1] = yp += dy;\n } else if (dy < 0) {\n d[1] = yn, d[0] = yn += dy;\n } else {\n d[0] = yp;\n }\n }\n }\n}\n","import none from \"./none\";\n\nexport default function(series, order) {\n if (!((n = series.length) > 0)) return;\n for (var i, n, j = 0, m = series[0].length, y; j < m; ++j) {\n for (y = i = 0; i < n; ++i) y += series[i][j][1] || 0;\n if (y) for (i = 0; i < n; ++i) series[i][j][1] /= y;\n }\n none(series, order);\n}\n","import none from \"./none\";\n\nexport default function(series, order) {\n if (!((n = series.length) > 0) || !((m = (s0 = series[order[0]]).length) > 0)) return;\n for (var y = 0, j = 1, s0, m, n; j < m; ++j) {\n for (var i = 0, s1 = 0, s2 = 0; i < n; ++i) {\n var si = series[order[i]],\n sij0 = si[j][1] || 0,\n sij1 = si[j - 1][1] || 0,\n s3 = (sij0 - sij1) / 2;\n for (var k = 0; k < i; ++k) {\n var sk = series[order[k]],\n skj0 = sk[j][1] || 0,\n skj1 = sk[j - 1][1] || 0;\n s3 += skj0 - skj1;\n }\n s1 += sij0, s2 += s3 * sij0;\n }\n s0[j - 1][1] += s0[j - 1][0] = y;\n if (s1) y -= s2 / s1;\n }\n s0[j - 1][1] += s0[j - 1][0] = y;\n none(series, order);\n}\n","import constant from \"./constant\";\nimport descending from \"./descending\";\nimport identity from \"./identity\";\nimport {tau} from \"./math\";\n\nexport default function() {\n var value = identity,\n sortValues = descending,\n sort = null,\n startAngle = constant(0),\n endAngle = constant(tau),\n padAngle = constant(0);\n\n function pie(data) {\n var i,\n n = data.length,\n j,\n k,\n sum = 0,\n index = new Array(n),\n arcs = new Array(n),\n a0 = +startAngle.apply(this, arguments),\n da = Math.min(tau, Math.max(-tau, endAngle.apply(this, arguments) - a0)),\n a1,\n p = Math.min(Math.abs(da) / n, padAngle.apply(this, arguments)),\n pa = p * (da < 0 ? -1 : 1),\n v;\n\n for (i = 0; i < n; ++i) {\n if ((v = arcs[index[i] = i] = +value(data[i], i, data)) > 0) {\n sum += v;\n }\n }\n\n // Optionally sort the arcs by previously-computed values or by data.\n if (sortValues != null) index.sort(function(i, j) { return sortValues(arcs[i], arcs[j]); });\n else if (sort != null) index.sort(function(i, j) { return sort(data[i], data[j]); });\n\n // Compute the arcs! They are stored in the original data's order.\n for (i = 0, k = sum ? (da - n * pa) / sum : 0; i < n; ++i, a0 = a1) {\n j = index[i], v = arcs[j], a1 = a0 + (v > 0 ? v * k : 0) + pa, arcs[j] = {\n data: data[j],\n index: i,\n value: v,\n startAngle: a0,\n endAngle: a1,\n padAngle: p\n };\n }\n\n return arcs;\n }\n\n pie.value = function(_) {\n return arguments.length ? (value = typeof _ === \"function\" ? _ : constant(+_), pie) : value;\n };\n\n pie.sortValues = function(_) {\n return arguments.length ? (sortValues = _, sort = null, pie) : sortValues;\n };\n\n pie.sort = function(_) {\n return arguments.length ? (sort = _, sortValues = null, pie) : sort;\n };\n\n pie.startAngle = function(_) {\n return arguments.length ? (startAngle = typeof _ === \"function\" ? _ : constant(+_), pie) : startAngle;\n };\n\n pie.endAngle = function(_) {\n return arguments.length ? (endAngle = typeof _ === \"function\" ? _ : constant(+_), pie) : endAngle;\n };\n\n pie.padAngle = function(_) {\n return arguments.length ? (padAngle = typeof _ === \"function\" ? _ : constant(+_), pie) : padAngle;\n };\n\n return pie;\n}\n","export var xhtml = \"http://www.w3.org/1999/xhtml\";\n\nexport default {\n svg: \"http://www.w3.org/2000/svg\",\n xhtml: xhtml,\n xlink: \"http://www.w3.org/1999/xlink\",\n xml: \"http://www.w3.org/XML/1998/namespace\",\n xmlns: \"http://www.w3.org/2000/xmlns/\"\n};\n","import namespaces from \"./namespaces\";\n\nexport default function(name) {\n var prefix = name += \"\", i = prefix.indexOf(\":\");\n if (i >= 0 && (prefix = name.slice(0, i)) !== \"xmlns\") name = name.slice(i + 1);\n return namespaces.hasOwnProperty(prefix) ? {space: namespaces[prefix], local: name} : name;\n}\n","import namespace from \"./namespace\";\nimport {xhtml} from \"./namespaces\";\n\nfunction creatorInherit(name) {\n return function() {\n var document = this.ownerDocument,\n uri = this.namespaceURI;\n return uri === xhtml && document.documentElement.namespaceURI === xhtml\n ? document.createElement(name)\n : document.createElementNS(uri, name);\n };\n}\n\nfunction creatorFixed(fullname) {\n return function() {\n return this.ownerDocument.createElementNS(fullname.space, fullname.local);\n };\n}\n\nexport default function(name) {\n var fullname = namespace(name);\n return (fullname.local\n ? creatorFixed\n : creatorInherit)(fullname);\n}\n","function none() {}\n\nexport default function(selector) {\n return selector == null ? none : function() {\n return this.querySelector(selector);\n };\n}\n","function empty() {\n return [];\n}\n\nexport default function(selector) {\n return selector == null ? empty : function() {\n return this.querySelectorAll(selector);\n };\n}\n","var matcher = function(selector) {\n return function() {\n return this.matches(selector);\n };\n};\n\nif (typeof document !== \"undefined\") {\n var element = document.documentElement;\n if (!element.matches) {\n var vendorMatches = element.webkitMatchesSelector\n || element.msMatchesSelector\n || element.mozMatchesSelector\n || element.oMatchesSelector;\n matcher = function(selector) {\n return function() {\n return vendorMatches.call(this, selector);\n };\n };\n }\n}\n\nexport default matcher;\n","export default function(update) {\n return new Array(update.length);\n}\n","import sparse from \"./sparse\";\nimport {Selection} from \"./index\";\n\nexport default function() {\n return new Selection(this._enter || this._groups.map(sparse), this._parents);\n}\n\nexport function EnterNode(parent, datum) {\n this.ownerDocument = parent.ownerDocument;\n this.namespaceURI = parent.namespaceURI;\n this._next = null;\n this._parent = parent;\n this.__data__ = datum;\n}\n\nEnterNode.prototype = {\n constructor: EnterNode,\n appendChild: function(child) { return this._parent.insertBefore(child, this._next); },\n insertBefore: function(child, next) { return this._parent.insertBefore(child, next); },\n querySelector: function(selector) { return this._parent.querySelector(selector); },\n querySelectorAll: function(selector) { return this._parent.querySelectorAll(selector); }\n};\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","import {Selection} from \"./index\";\nimport {EnterNode} from \"./enter\";\nimport constant from \"../constant\";\n\nvar keyPrefix = \"$\"; // Protect against keys like “__proto__”.\n\nfunction bindIndex(parent, group, enter, update, exit, data) {\n var i = 0,\n node,\n groupLength = group.length,\n dataLength = data.length;\n\n // Put any non-null nodes that fit into update.\n // Put any null nodes into enter.\n // Put any remaining data into enter.\n for (; i < dataLength; ++i) {\n if (node = group[i]) {\n node.__data__ = data[i];\n update[i] = node;\n } else {\n enter[i] = new EnterNode(parent, data[i]);\n }\n }\n\n // Put any non-null nodes that don’t fit into exit.\n for (; i < groupLength; ++i) {\n if (node = group[i]) {\n exit[i] = node;\n }\n }\n}\n\nfunction bindKey(parent, group, enter, update, exit, data, key) {\n var i,\n node,\n nodeByKeyValue = {},\n groupLength = group.length,\n dataLength = data.length,\n keyValues = new Array(groupLength),\n keyValue;\n\n // Compute the key for each node.\n // If multiple nodes have the same key, the duplicates are added to exit.\n for (i = 0; i < groupLength; ++i) {\n if (node = group[i]) {\n keyValues[i] = keyValue = keyPrefix + key.call(node, node.__data__, i, group);\n if (keyValue in nodeByKeyValue) {\n exit[i] = node;\n } else {\n nodeByKeyValue[keyValue] = node;\n }\n }\n }\n\n // Compute the key for each datum.\n // If there a node associated with this key, join and add it to update.\n // If there is not (or the key is a duplicate), add it to enter.\n for (i = 0; i < dataLength; ++i) {\n keyValue = keyPrefix + key.call(parent, data[i], i, data);\n if (node = nodeByKeyValue[keyValue]) {\n update[i] = node;\n node.__data__ = data[i];\n nodeByKeyValue[keyValue] = null;\n } else {\n enter[i] = new EnterNode(parent, data[i]);\n }\n }\n\n // Add any remaining nodes that were not bound to data to exit.\n for (i = 0; i < groupLength; ++i) {\n if ((node = group[i]) && (nodeByKeyValue[keyValues[i]] === node)) {\n exit[i] = node;\n }\n }\n}\n\nexport default function(value, key) {\n if (!value) {\n data = new Array(this.size()), j = -1;\n this.each(function(d) { data[++j] = d; });\n return data;\n }\n\n var bind = key ? bindKey : bindIndex,\n parents = this._parents,\n groups = this._groups;\n\n if (typeof value !== \"function\") value = constant(value);\n\n for (var m = groups.length, update = new Array(m), enter = new Array(m), exit = new Array(m), j = 0; j < m; ++j) {\n var parent = parents[j],\n group = groups[j],\n groupLength = group.length,\n data = value.call(parent, parent && parent.__data__, j, parents),\n dataLength = data.length,\n enterGroup = enter[j] = new Array(dataLength),\n updateGroup = update[j] = new Array(dataLength),\n exitGroup = exit[j] = new Array(groupLength);\n\n bind(parent, group, enterGroup, updateGroup, exitGroup, data, key);\n\n // Now connect the enter nodes to their following update node, such that\n // appendChild can insert the materialized enter node before this node,\n // rather than at the end of the parent node.\n for (var i0 = 0, i1 = 0, previous, next; i0 < dataLength; ++i0) {\n if (previous = enterGroup[i0]) {\n if (i0 >= i1) i1 = i0 + 1;\n while (!(next = updateGroup[i1]) && ++i1 < dataLength);\n previous._next = next || null;\n }\n }\n }\n\n update = new Selection(update, parents);\n update._enter = enter;\n update._exit = exit;\n return update;\n}\n","import {Selection} from \"./index\";\n\nexport default function(compare) {\n if (!compare) compare = ascending;\n\n function compareNode(a, b) {\n return a && b ? compare(a.__data__, b.__data__) : !a - !b;\n }\n\n for (var groups = this._groups, m = groups.length, sortgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, sortgroup = sortgroups[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n sortgroup[i] = node;\n }\n }\n sortgroup.sort(compareNode);\n }\n\n return new Selection(sortgroups, this._parents).order();\n}\n\nfunction ascending(a, b) {\n return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","import namespace from \"../namespace\";\n\nfunction attrRemove(name) {\n return function() {\n this.removeAttribute(name);\n };\n}\n\nfunction attrRemoveNS(fullname) {\n return function() {\n this.removeAttributeNS(fullname.space, fullname.local);\n };\n}\n\nfunction attrConstant(name, value) {\n return function() {\n this.setAttribute(name, value);\n };\n}\n\nfunction attrConstantNS(fullname, value) {\n return function() {\n this.setAttributeNS(fullname.space, fullname.local, value);\n };\n}\n\nfunction attrFunction(name, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.removeAttribute(name);\n else this.setAttribute(name, v);\n };\n}\n\nfunction attrFunctionNS(fullname, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.removeAttributeNS(fullname.space, fullname.local);\n else this.setAttributeNS(fullname.space, fullname.local, v);\n };\n}\n\nexport default function(name, value) {\n var fullname = namespace(name);\n\n if (arguments.length < 2) {\n var node = this.node();\n return fullname.local\n ? node.getAttributeNS(fullname.space, fullname.local)\n : node.getAttribute(fullname);\n }\n\n return this.each((value == null\n ? (fullname.local ? attrRemoveNS : attrRemove) : (typeof value === \"function\"\n ? (fullname.local ? attrFunctionNS : attrFunction)\n : (fullname.local ? attrConstantNS : attrConstant)))(fullname, value));\n}\n","export default function(node) {\n return (node.ownerDocument && node.ownerDocument.defaultView) // node is a Node\n || (node.document && node) // node is a Window\n || node.defaultView; // node is a Document\n}\n","import defaultView from \"../window\";\n\nfunction styleRemove(name) {\n return function() {\n this.style.removeProperty(name);\n };\n}\n\nfunction styleConstant(name, value, priority) {\n return function() {\n this.style.setProperty(name, value, priority);\n };\n}\n\nfunction styleFunction(name, value, priority) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.style.removeProperty(name);\n else this.style.setProperty(name, v, priority);\n };\n}\n\nexport default function(name, value, priority) {\n return arguments.length > 1\n ? this.each((value == null\n ? styleRemove : typeof value === \"function\"\n ? styleFunction\n : styleConstant)(name, value, priority == null ? \"\" : priority))\n : styleValue(this.node(), name);\n}\n\nexport function styleValue(node, name) {\n return node.style.getPropertyValue(name)\n || defaultView(node).getComputedStyle(node, null).getPropertyValue(name);\n}\n","function classArray(string) {\n return string.trim().split(/^|\\s+/);\n}\n\nfunction classList(node) {\n return node.classList || new ClassList(node);\n}\n\nfunction ClassList(node) {\n this._node = node;\n this._names = classArray(node.getAttribute(\"class\") || \"\");\n}\n\nClassList.prototype = {\n add: function(name) {\n var i = this._names.indexOf(name);\n if (i < 0) {\n this._names.push(name);\n this._node.setAttribute(\"class\", this._names.join(\" \"));\n }\n },\n remove: function(name) {\n var i = this._names.indexOf(name);\n if (i >= 0) {\n this._names.splice(i, 1);\n this._node.setAttribute(\"class\", this._names.join(\" \"));\n }\n },\n contains: function(name) {\n return this._names.indexOf(name) >= 0;\n }\n};\n\nfunction classedAdd(node, names) {\n var list = classList(node), i = -1, n = names.length;\n while (++i < n) list.add(names[i]);\n}\n\nfunction classedRemove(node, names) {\n var list = classList(node), i = -1, n = names.length;\n while (++i < n) list.remove(names[i]);\n}\n\nfunction classedTrue(names) {\n return function() {\n classedAdd(this, names);\n };\n}\n\nfunction classedFalse(names) {\n return function() {\n classedRemove(this, names);\n };\n}\n\nfunction classedFunction(names, value) {\n return function() {\n (value.apply(this, arguments) ? classedAdd : classedRemove)(this, names);\n };\n}\n\nexport default function(name, value) {\n var names = classArray(name + \"\");\n\n if (arguments.length < 2) {\n var list = classList(this.node()), i = -1, n = names.length;\n while (++i < n) if (!list.contains(names[i])) return false;\n return true;\n }\n\n return this.each((typeof value === \"function\"\n ? classedFunction : value\n ? classedTrue\n : classedFalse)(names, value));\n}\n","function textRemove() {\n this.textContent = \"\";\n}\n\nfunction textConstant(value) {\n return function() {\n this.textContent = value;\n };\n}\n\nfunction textFunction(value) {\n return function() {\n var v = value.apply(this, arguments);\n this.textContent = v == null ? \"\" : v;\n };\n}\n\nexport default function(value) {\n return arguments.length\n ? this.each(value == null\n ? textRemove : (typeof value === \"function\"\n ? textFunction\n : textConstant)(value))\n : this.node().textContent;\n}\n","function htmlRemove() {\n this.innerHTML = \"\";\n}\n\nfunction htmlConstant(value) {\n return function() {\n this.innerHTML = value;\n };\n}\n\nfunction htmlFunction(value) {\n return function() {\n var v = value.apply(this, arguments);\n this.innerHTML = v == null ? \"\" : v;\n };\n}\n\nexport default function(value) {\n return arguments.length\n ? this.each(value == null\n ? htmlRemove : (typeof value === \"function\"\n ? htmlFunction\n : htmlConstant)(value))\n : this.node().innerHTML;\n}\n","function raise() {\n if (this.nextSibling) this.parentNode.appendChild(this);\n}\n\nexport default function() {\n return this.each(raise);\n}\n","function lower() {\n if (this.previousSibling) this.parentNode.insertBefore(this, this.parentNode.firstChild);\n}\n\nexport default function() {\n return this.each(lower);\n}\n","import creator from \"../creator\";\nimport selector from \"../selector\";\n\nfunction constantNull() {\n return null;\n}\n\nexport default function(name, before) {\n var create = typeof name === \"function\" ? name : creator(name),\n select = before == null ? constantNull : typeof before === \"function\" ? before : selector(before);\n return this.select(function() {\n return this.insertBefore(create.apply(this, arguments), select.apply(this, arguments) || null);\n });\n}\n","function remove() {\n var parent = this.parentNode;\n if (parent) parent.removeChild(this);\n}\n\nexport default function() {\n return this.each(remove);\n}\n","function selection_cloneShallow() {\n return this.parentNode.insertBefore(this.cloneNode(false), this.nextSibling);\n}\n\nfunction selection_cloneDeep() {\n return this.parentNode.insertBefore(this.cloneNode(true), this.nextSibling);\n}\n\nexport default function(deep) {\n return this.select(deep ? selection_cloneDeep : selection_cloneShallow);\n}\n","var filterEvents = {};\n\nexport var event = null;\n\nif (typeof document !== \"undefined\") {\n var element = document.documentElement;\n if (!(\"onmouseenter\" in element)) {\n filterEvents = {mouseenter: \"mouseover\", mouseleave: \"mouseout\"};\n }\n}\n\nfunction filterContextListener(listener, index, group) {\n listener = contextListener(listener, index, group);\n return function(event) {\n var related = event.relatedTarget;\n if (!related || (related !== this && !(related.compareDocumentPosition(this) & 8))) {\n listener.call(this, event);\n }\n };\n}\n\nfunction contextListener(listener, index, group) {\n return function(event1) {\n var event0 = event; // Events can be reentrant (e.g., focus).\n event = event1;\n try {\n listener.call(this, this.__data__, index, group);\n } finally {\n event = event0;\n }\n };\n}\n\nfunction parseTypenames(typenames) {\n return typenames.trim().split(/^|\\s+/).map(function(t) {\n var name = \"\", i = t.indexOf(\".\");\n if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n return {type: t, name: name};\n });\n}\n\nfunction onRemove(typename) {\n return function() {\n var on = this.__on;\n if (!on) return;\n for (var j = 0, i = -1, m = on.length, o; j < m; ++j) {\n if (o = on[j], (!typename.type || o.type === typename.type) && o.name === typename.name) {\n this.removeEventListener(o.type, o.listener, o.capture);\n } else {\n on[++i] = o;\n }\n }\n if (++i) on.length = i;\n else delete this.__on;\n };\n}\n\nfunction onAdd(typename, value, capture) {\n var wrap = filterEvents.hasOwnProperty(typename.type) ? filterContextListener : contextListener;\n return function(d, i, group) {\n var on = this.__on, o, listener = wrap(value, i, group);\n if (on) for (var j = 0, m = on.length; j < m; ++j) {\n if ((o = on[j]).type === typename.type && o.name === typename.name) {\n this.removeEventListener(o.type, o.listener, o.capture);\n this.addEventListener(o.type, o.listener = listener, o.capture = capture);\n o.value = value;\n return;\n }\n }\n this.addEventListener(typename.type, listener, capture);\n o = {type: typename.type, name: typename.name, value: value, listener: listener, capture: capture};\n if (!on) this.__on = [o];\n else on.push(o);\n };\n}\n\nexport default function(typename, value, capture) {\n var typenames = parseTypenames(typename + \"\"), i, n = typenames.length, t;\n\n if (arguments.length < 2) {\n var on = this.node().__on;\n if (on) for (var j = 0, m = on.length, o; j < m; ++j) {\n for (i = 0, o = on[j]; i < n; ++i) {\n if ((t = typenames[i]).type === o.type && t.name === o.name) {\n return o.value;\n }\n }\n }\n return;\n }\n\n on = value ? onAdd : onRemove;\n if (capture == null) capture = false;\n for (i = 0; i < n; ++i) this.each(on(typenames[i], value, capture));\n return this;\n}\n\nexport function customEvent(event1, listener, that, args) {\n var event0 = event;\n event1.sourceEvent = event;\n event = event1;\n try {\n return listener.apply(that, args);\n } finally {\n event = event0;\n }\n}\n","import defaultView from \"../window\";\n\nfunction dispatchEvent(node, type, params) {\n var window = defaultView(node),\n event = window.CustomEvent;\n\n if (typeof event === \"function\") {\n event = new event(type, params);\n } else {\n event = window.document.createEvent(\"Event\");\n if (params) event.initEvent(type, params.bubbles, params.cancelable), event.detail = params.detail;\n else event.initEvent(type, false, false);\n }\n\n node.dispatchEvent(event);\n}\n\nfunction dispatchConstant(type, params) {\n return function() {\n return dispatchEvent(this, type, params);\n };\n}\n\nfunction dispatchFunction(type, params) {\n return function() {\n return dispatchEvent(this, type, params.apply(this, arguments));\n };\n}\n\nexport default function(type, params) {\n return this.each((typeof params === \"function\"\n ? dispatchFunction\n : dispatchConstant)(type, params));\n}\n","import selection_select from \"./select\";\nimport selection_selectAll from \"./selectAll\";\nimport selection_filter from \"./filter\";\nimport selection_data from \"./data\";\nimport selection_enter from \"./enter\";\nimport selection_exit from \"./exit\";\nimport selection_merge from \"./merge\";\nimport selection_order from \"./order\";\nimport selection_sort from \"./sort\";\nimport selection_call from \"./call\";\nimport selection_nodes from \"./nodes\";\nimport selection_node from \"./node\";\nimport selection_size from \"./size\";\nimport selection_empty from \"./empty\";\nimport selection_each from \"./each\";\nimport selection_attr from \"./attr\";\nimport selection_style from \"./style\";\nimport selection_property from \"./property\";\nimport selection_classed from \"./classed\";\nimport selection_text from \"./text\";\nimport selection_html from \"./html\";\nimport selection_raise from \"./raise\";\nimport selection_lower from \"./lower\";\nimport selection_append from \"./append\";\nimport selection_insert from \"./insert\";\nimport selection_remove from \"./remove\";\nimport selection_clone from \"./clone\";\nimport selection_datum from \"./datum\";\nimport selection_on from \"./on\";\nimport selection_dispatch from \"./dispatch\";\n\nexport var root = [null];\n\nexport function Selection(groups, parents) {\n this._groups = groups;\n this._parents = parents;\n}\n\nfunction selection() {\n return new Selection([[document.documentElement]], root);\n}\n\nSelection.prototype = selection.prototype = {\n constructor: Selection,\n select: selection_select,\n selectAll: selection_selectAll,\n filter: selection_filter,\n data: selection_data,\n enter: selection_enter,\n exit: selection_exit,\n merge: selection_merge,\n order: selection_order,\n sort: selection_sort,\n call: selection_call,\n nodes: selection_nodes,\n node: selection_node,\n size: selection_size,\n empty: selection_empty,\n each: selection_each,\n attr: selection_attr,\n style: selection_style,\n property: selection_property,\n classed: selection_classed,\n text: selection_text,\n html: selection_html,\n raise: selection_raise,\n lower: selection_lower,\n append: selection_append,\n insert: selection_insert,\n remove: selection_remove,\n clone: selection_clone,\n datum: selection_datum,\n on: selection_on,\n dispatch: selection_dispatch\n};\n\nexport default selection;\n","import {Selection} from \"./index\";\nimport selector from \"../selector\";\n\nexport default function(select) {\n if (typeof select !== \"function\") select = selector(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {\n if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {\n if (\"__data__\" in node) subnode.__data__ = node.__data__;\n subgroup[i] = subnode;\n }\n }\n }\n\n return new Selection(subgroups, this._parents);\n}\n","import {Selection} from \"./index\";\nimport selectorAll from \"../selectorAll\";\n\nexport default function(select) {\n if (typeof select !== \"function\") select = selectorAll(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n subgroups.push(select.call(node, node.__data__, i, group));\n parents.push(node);\n }\n }\n }\n\n return new Selection(subgroups, parents);\n}\n","import {Selection} from \"./index\";\nimport matcher from \"../matcher\";\n\nexport default function(match) {\n if (typeof match !== \"function\") match = matcher(match);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {\n if ((node = group[i]) && match.call(node, node.__data__, i, group)) {\n subgroup.push(node);\n }\n }\n }\n\n return new Selection(subgroups, this._parents);\n}\n","import sparse from \"./sparse\";\nimport {Selection} from \"./index\";\n\nexport default function() {\n return new Selection(this._exit || this._groups.map(sparse), this._parents);\n}\n","import {Selection} from \"./index\";\n\nexport default function(selection) {\n\n for (var groups0 = this._groups, groups1 = selection._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {\n for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group0[i] || group1[i]) {\n merge[i] = node;\n }\n }\n }\n\n for (; j < m0; ++j) {\n merges[j] = groups0[j];\n }\n\n return new Selection(merges, this._parents);\n}\n","export default function() {\n\n for (var groups = this._groups, j = -1, m = groups.length; ++j < m;) {\n for (var group = groups[j], i = group.length - 1, next = group[i], node; --i >= 0;) {\n if (node = group[i]) {\n if (next && next !== node.nextSibling) next.parentNode.insertBefore(node, next);\n next = node;\n }\n }\n }\n\n return this;\n}\n","export default function() {\n var callback = arguments[0];\n arguments[0] = this;\n callback.apply(null, arguments);\n return this;\n}\n","export default function() {\n var nodes = new Array(this.size()), i = -1;\n this.each(function() { nodes[++i] = this; });\n return nodes;\n}\n","export default function() {\n\n for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n for (var group = groups[j], i = 0, n = group.length; i < n; ++i) {\n var node = group[i];\n if (node) return node;\n }\n }\n\n return null;\n}\n","export default function() {\n var size = 0;\n this.each(function() { ++size; });\n return size;\n}\n","export default function() {\n return !this.node();\n}\n","export default function(callback) {\n\n for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n for (var group = groups[j], i = 0, n = group.length, node; i < n; ++i) {\n if (node = group[i]) callback.call(node, node.__data__, i, group);\n }\n }\n\n return this;\n}\n","function propertyRemove(name) {\n return function() {\n delete this[name];\n };\n}\n\nfunction propertyConstant(name, value) {\n return function() {\n this[name] = value;\n };\n}\n\nfunction propertyFunction(name, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) delete this[name];\n else this[name] = v;\n };\n}\n\nexport default function(name, value) {\n return arguments.length > 1\n ? this.each((value == null\n ? propertyRemove : typeof value === \"function\"\n ? propertyFunction\n : propertyConstant)(name, value))\n : this.node()[name];\n}\n","import creator from \"../creator\";\n\nexport default function(name) {\n var create = typeof name === \"function\" ? name : creator(name);\n return this.select(function() {\n return this.appendChild(create.apply(this, arguments));\n });\n}\n","export default function(value) {\n return arguments.length\n ? this.property(\"__data__\", value)\n : this.node().__data__;\n}\n","import {Selection, root} from \"./selection/index\";\n\nexport default function(selector) {\n return typeof selector === \"string\"\n ? new Selection([[document.querySelector(selector)]], [document.documentElement])\n : new Selection([[selector]], root);\n}\n","var nextId = 0;\n\nexport default function local() {\n return new Local;\n}\n\nfunction Local() {\n this._ = \"@\" + (++nextId).toString(36);\n}\n\nLocal.prototype = local.prototype = {\n constructor: Local,\n get: function(node) {\n var id = this._;\n while (!(id in node)) if (!(node = node.parentNode)) return;\n return node[id];\n },\n set: function(node, value) {\n return node[this._] = value;\n },\n remove: function(node) {\n return this._ in node && delete node[this._];\n },\n toString: function() {\n return this._;\n }\n};\n","import {event} from \"./selection/on\";\n\nexport default function() {\n var current = event, source;\n while (source = current.sourceEvent) current = source;\n return current;\n}\n","export default function(node, event) {\n var svg = node.ownerSVGElement || node;\n\n if (svg.createSVGPoint) {\n var point = svg.createSVGPoint();\n point.x = event.clientX, point.y = event.clientY;\n point = point.matrixTransform(node.getScreenCTM().inverse());\n return [point.x, point.y];\n }\n\n var rect = node.getBoundingClientRect();\n return [event.clientX - rect.left - node.clientLeft, event.clientY - rect.top - node.clientTop];\n}\n","import sourceEvent from \"./sourceEvent\";\nimport point from \"./point\";\n\nexport default function(node) {\n var event = sourceEvent();\n if (event.changedTouches) event = event.changedTouches[0];\n return point(node, event);\n}\n","import sourceEvent from \"./sourceEvent\";\nimport point from \"./point\";\n\nexport default function(node, touches, identifier) {\n if (arguments.length < 3) identifier = touches, touches = sourceEvent().changedTouches;\n\n for (var i = 0, n = touches ? touches.length : 0, touch; i < n; ++i) {\n if ((touch = touches[i]).identifier === identifier) {\n return point(node, touch);\n }\n }\n\n return null;\n}\n","var noop = {value: function() {}};\n\nfunction dispatch() {\n for (var i = 0, n = arguments.length, _ = {}, t; i < n; ++i) {\n if (!(t = arguments[i] + \"\") || (t in _)) throw new Error(\"illegal type: \" + t);\n _[t] = [];\n }\n return new Dispatch(_);\n}\n\nfunction Dispatch(_) {\n this._ = _;\n}\n\nfunction parseTypenames(typenames, types) {\n return typenames.trim().split(/^|\\s+/).map(function(t) {\n var name = \"\", i = t.indexOf(\".\");\n if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n if (t && !types.hasOwnProperty(t)) throw new Error(\"unknown type: \" + t);\n return {type: t, name: name};\n });\n}\n\nDispatch.prototype = dispatch.prototype = {\n constructor: Dispatch,\n on: function(typename, callback) {\n var _ = this._,\n T = parseTypenames(typename + \"\", _),\n t,\n i = -1,\n n = T.length;\n\n // If no callback was specified, return the callback of the given type and name.\n if (arguments.length < 2) {\n while (++i < n) if ((t = (typename = T[i]).type) && (t = get(_[t], typename.name))) return t;\n return;\n }\n\n // If a type was specified, set the callback for the given type and name.\n // Otherwise, if a null callback was specified, remove callbacks of the given name.\n if (callback != null && typeof callback !== \"function\") throw new Error(\"invalid callback: \" + callback);\n while (++i < n) {\n if (t = (typename = T[i]).type) _[t] = set(_[t], typename.name, callback);\n else if (callback == null) for (t in _) _[t] = set(_[t], typename.name, null);\n }\n\n return this;\n },\n copy: function() {\n var copy = {}, _ = this._;\n for (var t in _) copy[t] = _[t].slice();\n return new Dispatch(copy);\n },\n call: function(type, that) {\n if ((n = arguments.length - 2) > 0) for (var args = new Array(n), i = 0, n, t; i < n; ++i) args[i] = arguments[i + 2];\n if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n for (t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n },\n apply: function(type, that, args) {\n if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n for (var t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n }\n};\n\nfunction get(type, name) {\n for (var i = 0, n = type.length, c; i < n; ++i) {\n if ((c = type[i]).name === name) {\n return c.value;\n }\n }\n}\n\nfunction set(type, name, callback) {\n for (var i = 0, n = type.length; i < n; ++i) {\n if (type[i].name === name) {\n type[i] = noop, type = type.slice(0, i).concat(type.slice(i + 1));\n break;\n }\n }\n if (callback != null) type.push({name: name, value: callback});\n return type;\n}\n\nexport default dispatch;\n","import {event} from \"d3-selection\";\n\nexport function nopropagation() {\n event.stopImmediatePropagation();\n}\n\nexport default function() {\n event.preventDefault();\n event.stopImmediatePropagation();\n}\n","import {select} from \"d3-selection\";\nimport noevent from \"./noevent\";\n\nexport default function(view) {\n var root = view.document.documentElement,\n selection = select(view).on(\"dragstart.drag\", noevent, true);\n if (\"onselectstart\" in root) {\n selection.on(\"selectstart.drag\", noevent, true);\n } else {\n root.__noselect = root.style.MozUserSelect;\n root.style.MozUserSelect = \"none\";\n }\n}\n\nexport function yesdrag(view, noclick) {\n var root = view.document.documentElement,\n selection = select(view).on(\"dragstart.drag\", null);\n if (noclick) {\n selection.on(\"click.drag\", noevent, true);\n setTimeout(function() { selection.on(\"click.drag\", null); }, 0);\n }\n if (\"onselectstart\" in root) {\n selection.on(\"selectstart.drag\", null);\n } else {\n root.style.MozUserSelect = root.__noselect;\n delete root.__noselect;\n }\n}\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","export default function DragEvent(target, type, subject, id, active, x, y, dx, dy, dispatch) {\n this.target = target;\n this.type = type;\n this.subject = subject;\n this.identifier = id;\n this.active = active;\n this.x = x;\n this.y = y;\n this.dx = dx;\n this.dy = dy;\n this._ = dispatch;\n}\n\nDragEvent.prototype.on = function() {\n var value = this._.on.apply(this._, arguments);\n return value === this._ ? this : value;\n};\n","import {dispatch} from \"d3-dispatch\";\nimport {event, customEvent, select, mouse, touch} from \"d3-selection\";\nimport nodrag, {yesdrag} from \"./nodrag\";\nimport noevent, {nopropagation} from \"./noevent\";\nimport constant from \"./constant\";\nimport DragEvent from \"./event\";\n\n// Ignore right-click, since that should open the context menu.\nfunction defaultFilter() {\n return !event.button;\n}\n\nfunction defaultContainer() {\n return this.parentNode;\n}\n\nfunction defaultSubject(d) {\n return d == null ? {x: event.x, y: event.y} : d;\n}\n\nfunction defaultTouchable() {\n return \"ontouchstart\" in this;\n}\n\nexport default function() {\n var filter = defaultFilter,\n container = defaultContainer,\n subject = defaultSubject,\n touchable = defaultTouchable,\n gestures = {},\n listeners = dispatch(\"start\", \"drag\", \"end\"),\n active = 0,\n mousedownx,\n mousedowny,\n mousemoving,\n touchending,\n clickDistance2 = 0;\n\n function drag(selection) {\n selection\n .on(\"mousedown.drag\", mousedowned)\n .filter(touchable)\n .on(\"touchstart.drag\", touchstarted)\n .on(\"touchmove.drag\", touchmoved)\n .on(\"touchend.drag touchcancel.drag\", touchended)\n .style(\"touch-action\", \"none\")\n .style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\");\n }\n\n function mousedowned() {\n if (touchending || !filter.apply(this, arguments)) return;\n var gesture = beforestart(\"mouse\", container.apply(this, arguments), mouse, this, arguments);\n if (!gesture) return;\n select(event.view).on(\"mousemove.drag\", mousemoved, true).on(\"mouseup.drag\", mouseupped, true);\n nodrag(event.view);\n nopropagation();\n mousemoving = false;\n mousedownx = event.clientX;\n mousedowny = event.clientY;\n gesture(\"start\");\n }\n\n function mousemoved() {\n noevent();\n if (!mousemoving) {\n var dx = event.clientX - mousedownx, dy = event.clientY - mousedowny;\n mousemoving = dx * dx + dy * dy > clickDistance2;\n }\n gestures.mouse(\"drag\");\n }\n\n function mouseupped() {\n select(event.view).on(\"mousemove.drag mouseup.drag\", null);\n yesdrag(event.view, mousemoving);\n noevent();\n gestures.mouse(\"end\");\n }\n\n function touchstarted() {\n if (!filter.apply(this, arguments)) return;\n var touches = event.changedTouches,\n c = container.apply(this, arguments),\n n = touches.length, i, gesture;\n\n for (i = 0; i < n; ++i) {\n if (gesture = beforestart(touches[i].identifier, c, touch, this, arguments)) {\n nopropagation();\n gesture(\"start\");\n }\n }\n }\n\n function touchmoved() {\n var touches = event.changedTouches,\n n = touches.length, i, gesture;\n\n for (i = 0; i < n; ++i) {\n if (gesture = gestures[touches[i].identifier]) {\n noevent();\n gesture(\"drag\");\n }\n }\n }\n\n function touchended() {\n var touches = event.changedTouches,\n n = touches.length, i, gesture;\n\n if (touchending) clearTimeout(touchending);\n touchending = setTimeout(function() { touchending = null; }, 500); // Ghost clicks are delayed!\n for (i = 0; i < n; ++i) {\n if (gesture = gestures[touches[i].identifier]) {\n nopropagation();\n gesture(\"end\");\n }\n }\n }\n\n function beforestart(id, container, point, that, args) {\n var p = point(container, id), s, dx, dy,\n sublisteners = listeners.copy();\n\n if (!customEvent(new DragEvent(drag, \"beforestart\", s, id, active, p[0], p[1], 0, 0, sublisteners), function() {\n if ((event.subject = s = subject.apply(that, args)) == null) return false;\n dx = s.x - p[0] || 0;\n dy = s.y - p[1] || 0;\n return true;\n })) return;\n\n return function gesture(type) {\n var p0 = p, n;\n switch (type) {\n case \"start\": gestures[id] = gesture, n = active++; break;\n case \"end\": delete gestures[id], --active; // nobreak\n case \"drag\": p = point(container, id), n = active; break;\n }\n customEvent(new DragEvent(drag, type, s, id, n, p[0] + dx, p[1] + dy, p[0] - p0[0], p[1] - p0[1], sublisteners), sublisteners.apply, sublisteners, [type, that, args]);\n };\n }\n\n drag.filter = function(_) {\n return arguments.length ? (filter = typeof _ === \"function\" ? _ : constant(!!_), drag) : filter;\n };\n\n drag.container = function(_) {\n return arguments.length ? (container = typeof _ === \"function\" ? _ : constant(_), drag) : container;\n };\n\n drag.subject = function(_) {\n return arguments.length ? (subject = typeof _ === \"function\" ? _ : constant(_), drag) : subject;\n };\n\n drag.touchable = function(_) {\n return arguments.length ? (touchable = typeof _ === \"function\" ? _ : constant(!!_), drag) : touchable;\n };\n\n drag.on = function() {\n var value = listeners.on.apply(listeners, arguments);\n return value === listeners ? drag : value;\n };\n\n drag.clickDistance = function(_) {\n return arguments.length ? (clickDistance2 = (_ = +_) * _, drag) : Math.sqrt(clickDistance2);\n };\n\n return drag;\n}\n","var frame = 0, // is an animation frame pending?\n timeout = 0, // is a timeout pending?\n interval = 0, // are any timers active?\n pokeDelay = 1000, // how frequently we check for clock skew\n taskHead,\n taskTail,\n clockLast = 0,\n clockNow = 0,\n clockSkew = 0,\n clock = typeof performance === \"object\" && performance.now ? performance : Date,\n setFrame = typeof window === \"object\" && window.requestAnimationFrame ? window.requestAnimationFrame.bind(window) : function(f) { setTimeout(f, 17); };\n\nexport function now() {\n return clockNow || (setFrame(clearNow), clockNow = clock.now() + clockSkew);\n}\n\nfunction clearNow() {\n clockNow = 0;\n}\n\nexport function Timer() {\n this._call =\n this._time =\n this._next = null;\n}\n\nTimer.prototype = timer.prototype = {\n constructor: Timer,\n restart: function(callback, delay, time) {\n if (typeof callback !== \"function\") throw new TypeError(\"callback is not a function\");\n time = (time == null ? now() : +time) + (delay == null ? 0 : +delay);\n if (!this._next && taskTail !== this) {\n if (taskTail) taskTail._next = this;\n else taskHead = this;\n taskTail = this;\n }\n this._call = callback;\n this._time = time;\n sleep();\n },\n stop: function() {\n if (this._call) {\n this._call = null;\n this._time = Infinity;\n sleep();\n }\n }\n};\n\nexport function timer(callback, delay, time) {\n var t = new Timer;\n t.restart(callback, delay, time);\n return t;\n}\n\nexport function timerFlush() {\n now(); // Get the current time, if not already set.\n ++frame; // Pretend we’ve set an alarm, if we haven’t already.\n var t = taskHead, e;\n while (t) {\n if ((e = clockNow - t._time) >= 0) t._call.call(null, e);\n t = t._next;\n }\n --frame;\n}\n\nfunction wake() {\n clockNow = (clockLast = clock.now()) + clockSkew;\n frame = timeout = 0;\n try {\n timerFlush();\n } finally {\n frame = 0;\n nap();\n clockNow = 0;\n }\n}\n\nfunction poke() {\n var now = clock.now(), delay = now - clockLast;\n if (delay > pokeDelay) clockSkew -= delay, clockLast = now;\n}\n\nfunction nap() {\n var t0, t1 = taskHead, t2, time = Infinity;\n while (t1) {\n if (t1._call) {\n if (time > t1._time) time = t1._time;\n t0 = t1, t1 = t1._next;\n } else {\n t2 = t1._next, t1._next = null;\n t1 = t0 ? t0._next = t2 : taskHead = t2;\n }\n }\n taskTail = t0;\n sleep(time);\n}\n\nfunction sleep(time) {\n if (frame) return; // Soonest alarm already set, or will be.\n if (timeout) timeout = clearTimeout(timeout);\n var delay = time - clockNow; // Strictly less than if we recomputed clockNow.\n if (delay > 24) {\n if (time < Infinity) timeout = setTimeout(wake, time - clock.now() - clockSkew);\n if (interval) interval = clearInterval(interval);\n } else {\n if (!interval) clockLast = clock.now(), interval = setInterval(poke, pokeDelay);\n frame = 1, setFrame(wake);\n }\n}\n","import {Timer} from \"./timer\";\n\nexport default function(callback, delay, time) {\n var t = new Timer;\n delay = delay == null ? 0 : +delay;\n t.restart(function(elapsed) {\n t.stop();\n callback(elapsed + delay);\n }, delay, time);\n return t;\n}\n","import {dispatch} from \"d3-dispatch\";\nimport {timer, timeout} from \"d3-timer\";\n\nvar emptyOn = dispatch(\"start\", \"end\", \"interrupt\");\nvar emptyTween = [];\n\nexport var CREATED = 0;\nexport var SCHEDULED = 1;\nexport var STARTING = 2;\nexport var STARTED = 3;\nexport var RUNNING = 4;\nexport var ENDING = 5;\nexport var ENDED = 6;\n\nexport default function(node, name, id, index, group, timing) {\n var schedules = node.__transition;\n if (!schedules) node.__transition = {};\n else if (id in schedules) return;\n create(node, id, {\n name: name,\n index: index, // For context during callback.\n group: group, // For context during callback.\n on: emptyOn,\n tween: emptyTween,\n time: timing.time,\n delay: timing.delay,\n duration: timing.duration,\n ease: timing.ease,\n timer: null,\n state: CREATED\n });\n}\n\nexport function init(node, id) {\n var schedule = get(node, id);\n if (schedule.state > CREATED) throw new Error(\"too late; already scheduled\");\n return schedule;\n}\n\nexport function set(node, id) {\n var schedule = get(node, id);\n if (schedule.state > STARTING) throw new Error(\"too late; already started\");\n return schedule;\n}\n\nexport function get(node, id) {\n var schedule = node.__transition;\n if (!schedule || !(schedule = schedule[id])) throw new Error(\"transition not found\");\n return schedule;\n}\n\nfunction create(node, id, self) {\n var schedules = node.__transition,\n tween;\n\n // Initialize the self timer when the transition is created.\n // Note the actual delay is not known until the first callback!\n schedules[id] = self;\n self.timer = timer(schedule, 0, self.time);\n\n function schedule(elapsed) {\n self.state = SCHEDULED;\n self.timer.restart(start, self.delay, self.time);\n\n // If the elapsed delay is less than our first sleep, start immediately.\n if (self.delay <= elapsed) start(elapsed - self.delay);\n }\n\n function start(elapsed) {\n var i, j, n, o;\n\n // If the state is not SCHEDULED, then we previously errored on start.\n if (self.state !== SCHEDULED) return stop();\n\n for (i in schedules) {\n o = schedules[i];\n if (o.name !== self.name) continue;\n\n // While this element already has a starting transition during this frame,\n // defer starting an interrupting transition until that transition has a\n // chance to tick (and possibly end); see d3/d3-transition#54!\n if (o.state === STARTED) return timeout(start);\n\n // Interrupt the active transition, if any.\n // Dispatch the interrupt event.\n if (o.state === RUNNING) {\n o.state = ENDED;\n o.timer.stop();\n o.on.call(\"interrupt\", node, node.__data__, o.index, o.group);\n delete schedules[i];\n }\n\n // Cancel any pre-empted transitions. No interrupt event is dispatched\n // because the cancelled transitions never started. Note that this also\n // removes this transition from the pending list!\n else if (+i < id) {\n o.state = ENDED;\n o.timer.stop();\n delete schedules[i];\n }\n }\n\n // Defer the first tick to end of the current frame; see d3/d3#1576.\n // Note the transition may be canceled after start and before the first tick!\n // Note this must be scheduled before the start event; see d3/d3-transition#16!\n // Assuming this is successful, subsequent callbacks go straight to tick.\n timeout(function() {\n if (self.state === STARTED) {\n self.state = RUNNING;\n self.timer.restart(tick, self.delay, self.time);\n tick(elapsed);\n }\n });\n\n // Dispatch the start event.\n // Note this must be done before the tween are initialized.\n self.state = STARTING;\n self.on.call(\"start\", node, node.__data__, self.index, self.group);\n if (self.state !== STARTING) return; // interrupted\n self.state = STARTED;\n\n // Initialize the tween, deleting null tween.\n tween = new Array(n = self.tween.length);\n for (i = 0, j = -1; i < n; ++i) {\n if (o = self.tween[i].value.call(node, node.__data__, self.index, self.group)) {\n tween[++j] = o;\n }\n }\n tween.length = j + 1;\n }\n\n function tick(elapsed) {\n var t = elapsed < self.duration ? self.ease.call(null, elapsed / self.duration) : (self.timer.restart(stop), self.state = ENDING, 1),\n i = -1,\n n = tween.length;\n\n while (++i < n) {\n tween[i].call(null, t);\n }\n\n // Dispatch the end event.\n if (self.state === ENDING) {\n self.on.call(\"end\", node, node.__data__, self.index, self.group);\n stop();\n }\n }\n\n function stop() {\n self.state = ENDED;\n self.timer.stop();\n delete schedules[id];\n for (var i in schedules) return; // eslint-disable-line no-unused-vars\n delete node.__transition;\n }\n}\n","import {get, set} from \"./schedule\";\n\nfunction tweenRemove(id, name) {\n var tween0, tween1;\n return function() {\n var schedule = set(this, id),\n tween = schedule.tween;\n\n // If this node shared tween with the previous node,\n // just assign the updated shared tween and we’re done!\n // Otherwise, copy-on-write.\n if (tween !== tween0) {\n tween1 = tween0 = tween;\n for (var i = 0, n = tween1.length; i < n; ++i) {\n if (tween1[i].name === name) {\n tween1 = tween1.slice();\n tween1.splice(i, 1);\n break;\n }\n }\n }\n\n schedule.tween = tween1;\n };\n}\n\nfunction tweenFunction(id, name, value) {\n var tween0, tween1;\n if (typeof value !== \"function\") throw new Error;\n return function() {\n var schedule = set(this, id),\n tween = schedule.tween;\n\n // If this node shared tween with the previous node,\n // just assign the updated shared tween and we’re done!\n // Otherwise, copy-on-write.\n if (tween !== tween0) {\n tween1 = (tween0 = tween).slice();\n for (var t = {name: name, value: value}, i = 0, n = tween1.length; i < n; ++i) {\n if (tween1[i].name === name) {\n tween1[i] = t;\n break;\n }\n }\n if (i === n) tween1.push(t);\n }\n\n schedule.tween = tween1;\n };\n}\n\nexport default function(name, value) {\n var id = this._id;\n\n name += \"\";\n\n if (arguments.length < 2) {\n var tween = get(this.node(), id).tween;\n for (var i = 0, n = tween.length, t; i < n; ++i) {\n if ((t = tween[i]).name === name) {\n return t.value;\n }\n }\n return null;\n }\n\n return this.each((value == null ? tweenRemove : tweenFunction)(id, name, value));\n}\n\nexport function tweenValue(transition, name, value) {\n var id = transition._id;\n\n transition.each(function() {\n var schedule = set(this, id);\n (schedule.value || (schedule.value = {}))[name] = value.apply(this, arguments);\n });\n\n return function(node) {\n return get(node, id).value[name];\n };\n}\n","import {color} from \"d3-color\";\nimport {interpolateNumber, interpolateRgb, interpolateString} from \"d3-interpolate\";\n\nexport default function(a, b) {\n var c;\n return (typeof b === \"number\" ? interpolateNumber\n : b instanceof color ? interpolateRgb\n : (c = color(b)) ? (b = c, interpolateRgb)\n : interpolateString)(a, b);\n}\n","function removeFunction(id) {\n return function() {\n var parent = this.parentNode;\n for (var i in this.__transition) if (+i !== id) return;\n if (parent) parent.removeChild(this);\n };\n}\n\nexport default function() {\n return this.on(\"end.remove\", removeFunction(this._id));\n}\n","import {selection} from \"d3-selection\";\n\nvar Selection = selection.prototype.constructor;\n\nexport default function() {\n return new Selection(this._groups, this._parents);\n}\n","import {tweenValue} from \"./tween\";\n\nfunction textConstant(value) {\n return function() {\n this.textContent = value;\n };\n}\n\nfunction textFunction(value) {\n return function() {\n var value1 = value(this);\n this.textContent = value1 == null ? \"\" : value1;\n };\n}\n\nexport default function(value) {\n return this.tween(\"text\", typeof value === \"function\"\n ? textFunction(tweenValue(this, \"text\", value))\n : textConstant(value == null ? \"\" : value + \"\"));\n}\n","import {selection} from \"d3-selection\";\nimport transition_attr from \"./attr\";\nimport transition_attrTween from \"./attrTween\";\nimport transition_delay from \"./delay\";\nimport transition_duration from \"./duration\";\nimport transition_ease from \"./ease\";\nimport transition_filter from \"./filter\";\nimport transition_merge from \"./merge\";\nimport transition_on from \"./on\";\nimport transition_remove from \"./remove\";\nimport transition_select from \"./select\";\nimport transition_selectAll from \"./selectAll\";\nimport transition_selection from \"./selection\";\nimport transition_style from \"./style\";\nimport transition_styleTween from \"./styleTween\";\nimport transition_text from \"./text\";\nimport transition_transition from \"./transition\";\nimport transition_tween from \"./tween\";\n\nvar id = 0;\n\nexport function Transition(groups, parents, name, id) {\n this._groups = groups;\n this._parents = parents;\n this._name = name;\n this._id = id;\n}\n\nexport default function transition(name) {\n return selection().transition(name);\n}\n\nexport function newId() {\n return ++id;\n}\n\nvar selection_prototype = selection.prototype;\n\nTransition.prototype = transition.prototype = {\n constructor: Transition,\n select: transition_select,\n selectAll: transition_selectAll,\n filter: transition_filter,\n merge: transition_merge,\n selection: transition_selection,\n transition: transition_transition,\n call: selection_prototype.call,\n nodes: selection_prototype.nodes,\n node: selection_prototype.node,\n size: selection_prototype.size,\n empty: selection_prototype.empty,\n each: selection_prototype.each,\n on: transition_on,\n attr: transition_attr,\n attrTween: transition_attrTween,\n style: transition_style,\n styleTween: transition_styleTween,\n text: transition_text,\n remove: transition_remove,\n tween: transition_tween,\n delay: transition_delay,\n duration: transition_duration,\n ease: transition_ease\n};\n","import {selector} from \"d3-selection\";\nimport {Transition} from \"./index\";\nimport schedule, {get} from \"./schedule\";\n\nexport default function(select) {\n var name = this._name,\n id = this._id;\n\n if (typeof select !== \"function\") select = selector(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {\n if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {\n if (\"__data__\" in node) subnode.__data__ = node.__data__;\n subgroup[i] = subnode;\n schedule(subgroup[i], name, id, i, subgroup, get(node, id));\n }\n }\n }\n\n return new Transition(subgroups, this._parents, name, id);\n}\n","import {selectorAll} from \"d3-selection\";\nimport {Transition} from \"./index\";\nimport schedule, {get} from \"./schedule\";\n\nexport default function(select) {\n var name = this._name,\n id = this._id;\n\n if (typeof select !== \"function\") select = selectorAll(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n for (var children = select.call(node, node.__data__, i, group), child, inherit = get(node, id), k = 0, l = children.length; k < l; ++k) {\n if (child = children[k]) {\n schedule(child, name, id, k, children, inherit);\n }\n }\n subgroups.push(children);\n parents.push(node);\n }\n }\n }\n\n return new Transition(subgroups, parents, name, id);\n}\n","import {matcher} from \"d3-selection\";\nimport {Transition} from \"./index\";\n\nexport default function(match) {\n if (typeof match !== \"function\") match = matcher(match);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {\n if ((node = group[i]) && match.call(node, node.__data__, i, group)) {\n subgroup.push(node);\n }\n }\n }\n\n return new Transition(subgroups, this._parents, this._name, this._id);\n}\n","import {Transition} from \"./index\";\n\nexport default function(transition) {\n if (transition._id !== this._id) throw new Error;\n\n for (var groups0 = this._groups, groups1 = transition._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {\n for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group0[i] || group1[i]) {\n merge[i] = node;\n }\n }\n }\n\n for (; j < m0; ++j) {\n merges[j] = groups0[j];\n }\n\n return new Transition(merges, this._parents, this._name, this._id);\n}\n","import {Transition, newId} from \"./index\";\nimport schedule, {get} from \"./schedule\";\n\nexport default function() {\n var name = this._name,\n id0 = this._id,\n id1 = newId();\n\n for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n var inherit = get(node, id0);\n schedule(node, name, id1, i, group, {\n time: inherit.time + inherit.delay + inherit.duration,\n delay: 0,\n duration: inherit.duration,\n ease: inherit.ease\n });\n }\n }\n }\n\n return new Transition(groups, this._parents, name, id1);\n}\n","import {get, set, init} from \"./schedule\";\n\nfunction start(name) {\n return (name + \"\").trim().split(/^|\\s+/).every(function(t) {\n var i = t.indexOf(\".\");\n if (i >= 0) t = t.slice(0, i);\n return !t || t === \"start\";\n });\n}\n\nfunction onFunction(id, name, listener) {\n var on0, on1, sit = start(name) ? init : set;\n return function() {\n var schedule = sit(this, id),\n on = schedule.on;\n\n // If this node shared a dispatch with the previous node,\n // just assign the updated shared dispatch and we’re done!\n // Otherwise, copy-on-write.\n if (on !== on0) (on1 = (on0 = on).copy()).on(name, listener);\n\n schedule.on = on1;\n };\n}\n\nexport default function(name, listener) {\n var id = this._id;\n\n return arguments.length < 2\n ? get(this.node(), id).on.on(name)\n : this.each(onFunction(id, name, listener));\n}\n","import {interpolateTransformSvg as interpolateTransform} from \"d3-interpolate\";\nimport {namespace} from \"d3-selection\";\nimport {tweenValue} from \"./tween\";\nimport interpolate from \"./interpolate\";\n\nfunction attrRemove(name) {\n return function() {\n this.removeAttribute(name);\n };\n}\n\nfunction attrRemoveNS(fullname) {\n return function() {\n this.removeAttributeNS(fullname.space, fullname.local);\n };\n}\n\nfunction attrConstant(name, interpolate, value1) {\n var value00,\n interpolate0;\n return function() {\n var value0 = this.getAttribute(name);\n return value0 === value1 ? null\n : value0 === value00 ? interpolate0\n : interpolate0 = interpolate(value00 = value0, value1);\n };\n}\n\nfunction attrConstantNS(fullname, interpolate, value1) {\n var value00,\n interpolate0;\n return function() {\n var value0 = this.getAttributeNS(fullname.space, fullname.local);\n return value0 === value1 ? null\n : value0 === value00 ? interpolate0\n : interpolate0 = interpolate(value00 = value0, value1);\n };\n}\n\nfunction attrFunction(name, interpolate, value) {\n var value00,\n value10,\n interpolate0;\n return function() {\n var value0, value1 = value(this);\n if (value1 == null) return void this.removeAttribute(name);\n value0 = this.getAttribute(name);\n return value0 === value1 ? null\n : value0 === value00 && value1 === value10 ? interpolate0\n : interpolate0 = interpolate(value00 = value0, value10 = value1);\n };\n}\n\nfunction attrFunctionNS(fullname, interpolate, value) {\n var value00,\n value10,\n interpolate0;\n return function() {\n var value0, value1 = value(this);\n if (value1 == null) return void this.removeAttributeNS(fullname.space, fullname.local);\n value0 = this.getAttributeNS(fullname.space, fullname.local);\n return value0 === value1 ? null\n : value0 === value00 && value1 === value10 ? interpolate0\n : interpolate0 = interpolate(value00 = value0, value10 = value1);\n };\n}\n\nexport default function(name, value) {\n var fullname = namespace(name), i = fullname === \"transform\" ? interpolateTransform : interpolate;\n return this.attrTween(name, typeof value === \"function\"\n ? (fullname.local ? attrFunctionNS : attrFunction)(fullname, i, tweenValue(this, \"attr.\" + name, value))\n : value == null ? (fullname.local ? attrRemoveNS : attrRemove)(fullname)\n : (fullname.local ? attrConstantNS : attrConstant)(fullname, i, value + \"\"));\n}\n","import {namespace} from \"d3-selection\";\n\nfunction attrTweenNS(fullname, value) {\n function tween() {\n var node = this, i = value.apply(node, arguments);\n return i && function(t) {\n node.setAttributeNS(fullname.space, fullname.local, i(t));\n };\n }\n tween._value = value;\n return tween;\n}\n\nfunction attrTween(name, value) {\n function tween() {\n var node = this, i = value.apply(node, arguments);\n return i && function(t) {\n node.setAttribute(name, i(t));\n };\n }\n tween._value = value;\n return tween;\n}\n\nexport default function(name, value) {\n var key = \"attr.\" + name;\n if (arguments.length < 2) return (key = this.tween(key)) && key._value;\n if (value == null) return this.tween(key, null);\n if (typeof value !== \"function\") throw new Error;\n var fullname = namespace(name);\n return this.tween(key, (fullname.local ? attrTweenNS : attrTween)(fullname, value));\n}\n","import {interpolateTransformCss as interpolateTransform} from \"d3-interpolate\";\nimport {style} from \"d3-selection\";\nimport {tweenValue} from \"./tween\";\nimport interpolate from \"./interpolate\";\n\nfunction styleRemove(name, interpolate) {\n var value00,\n value10,\n interpolate0;\n return function() {\n var value0 = style(this, name),\n value1 = (this.style.removeProperty(name), style(this, name));\n return value0 === value1 ? null\n : value0 === value00 && value1 === value10 ? interpolate0\n : interpolate0 = interpolate(value00 = value0, value10 = value1);\n };\n}\n\nfunction styleRemoveEnd(name) {\n return function() {\n this.style.removeProperty(name);\n };\n}\n\nfunction styleConstant(name, interpolate, value1) {\n var value00,\n interpolate0;\n return function() {\n var value0 = style(this, name);\n return value0 === value1 ? null\n : value0 === value00 ? interpolate0\n : interpolate0 = interpolate(value00 = value0, value1);\n };\n}\n\nfunction styleFunction(name, interpolate, value) {\n var value00,\n value10,\n interpolate0;\n return function() {\n var value0 = style(this, name),\n value1 = value(this);\n if (value1 == null) value1 = (this.style.removeProperty(name), style(this, name));\n return value0 === value1 ? null\n : value0 === value00 && value1 === value10 ? interpolate0\n : interpolate0 = interpolate(value00 = value0, value10 = value1);\n };\n}\n\nexport default function(name, value, priority) {\n var i = (name += \"\") === \"transform\" ? interpolateTransform : interpolate;\n return value == null ? this\n .styleTween(name, styleRemove(name, i))\n .on(\"end.style.\" + name, styleRemoveEnd(name))\n : this.styleTween(name, typeof value === \"function\"\n ? styleFunction(name, i, tweenValue(this, \"style.\" + name, value))\n : styleConstant(name, i, value + \"\"), priority);\n}\n","function styleTween(name, value, priority) {\n function tween() {\n var node = this, i = value.apply(node, arguments);\n return i && function(t) {\n node.style.setProperty(name, i(t), priority);\n };\n }\n tween._value = value;\n return tween;\n}\n\nexport default function(name, value, priority) {\n var key = \"style.\" + (name += \"\");\n if (arguments.length < 2) return (key = this.tween(key)) && key._value;\n if (value == null) return this.tween(key, null);\n if (typeof value !== \"function\") throw new Error;\n return this.tween(key, styleTween(name, value, priority == null ? \"\" : priority));\n}\n","import {get, init} from \"./schedule\";\n\nfunction delayFunction(id, value) {\n return function() {\n init(this, id).delay = +value.apply(this, arguments);\n };\n}\n\nfunction delayConstant(id, value) {\n return value = +value, function() {\n init(this, id).delay = value;\n };\n}\n\nexport default function(value) {\n var id = this._id;\n\n return arguments.length\n ? this.each((typeof value === \"function\"\n ? delayFunction\n : delayConstant)(id, value))\n : get(this.node(), id).delay;\n}\n","import {get, set} from \"./schedule\";\n\nfunction durationFunction(id, value) {\n return function() {\n set(this, id).duration = +value.apply(this, arguments);\n };\n}\n\nfunction durationConstant(id, value) {\n return value = +value, function() {\n set(this, id).duration = value;\n };\n}\n\nexport default function(value) {\n var id = this._id;\n\n return arguments.length\n ? this.each((typeof value === \"function\"\n ? durationFunction\n : durationConstant)(id, value))\n : get(this.node(), id).duration;\n}\n","import {get, set} from \"./schedule\";\n\nfunction easeConstant(id, value) {\n if (typeof value !== \"function\") throw new Error;\n return function() {\n set(this, id).ease = value;\n };\n}\n\nexport default function(value) {\n var id = this._id;\n\n return arguments.length\n ? this.each(easeConstant(id, value))\n : get(this.node(), id).ease;\n}\n","import {Transition, newId} from \"../transition/index\";\nimport schedule from \"../transition/schedule\";\nimport {easeCubicInOut} from \"d3-ease\";\nimport {now} from \"d3-timer\";\n\nvar defaultTiming = {\n time: null, // Set on use.\n delay: 0,\n duration: 250,\n ease: easeCubicInOut\n};\n\nfunction inherit(node, id) {\n var timing;\n while (!(timing = node.__transition) || !(timing = timing[id])) {\n if (!(node = node.parentNode)) {\n return defaultTiming.time = now(), defaultTiming;\n }\n }\n return timing;\n}\n\nexport default function(name) {\n var id,\n timing;\n\n if (name instanceof Transition) {\n id = name._id, name = name._name;\n } else {\n id = newId(), (timing = defaultTiming).time = now(), name = name == null ? null : name + \"\";\n }\n\n for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n schedule(node, name, id, i, group, timing || inherit(node, id));\n }\n }\n }\n\n return new Transition(groups, this._parents, name, id);\n}\n","import {selection} from \"d3-selection\";\nimport selection_interrupt from \"./interrupt\";\nimport selection_transition from \"./transition\";\n\nselection.prototype.interrupt = selection_interrupt;\nselection.prototype.transition = selection_transition;\n","import interrupt from \"../interrupt\";\n\nexport default function(name) {\n return this.each(function() {\n interrupt(this, name);\n });\n}\n","import {STARTING, ENDING, ENDED} from \"./transition/schedule\";\n\nexport default function(node, name) {\n var schedules = node.__transition,\n schedule,\n active,\n empty = true,\n i;\n\n if (!schedules) return;\n\n name = name == null ? null : name + \"\";\n\n for (i in schedules) {\n if ((schedule = schedules[i]).name !== name) { empty = false; continue; }\n active = schedule.state > STARTING && schedule.state < ENDING;\n schedule.state = ENDED;\n schedule.timer.stop();\n if (active) schedule.on.call(\"interrupt\", node, node.__data__, schedule.index, schedule.group);\n delete schedules[i];\n }\n\n if (empty) delete node.__transition;\n}\n","import {Transition} from \"./transition/index\";\nimport {SCHEDULED} from \"./transition/schedule\";\n\nvar root = [null];\n\nexport default function(node, name) {\n var schedules = node.__transition,\n schedule,\n i;\n\n if (schedules) {\n name = name == null ? null : name + \"\";\n for (i in schedules) {\n if ((schedule = schedules[i]).state > SCHEDULED && schedule.name === name) {\n return new Transition([[node]], root, name, +i);\n }\n }\n }\n\n return null;\n}\n","import { select, event as d3event, selection, clientPoint } from 'd3-selection';\nimport { drag as d3drag } from 'd3-drag';\nimport 'd3-transition';\nimport { mergeRecursive } from './common-utils';\n/**\n * This function takes a raw DOM element or\n * a string and returns a d3 selection of that element.\n *\n * @param {HTMLElement | string} element The element to wrap in d3 selection.\n * @return {Selection} Instance of d3 selection.\n */\nconst selectElement = element => select(element);\n\n/**\n * It creates a new d3 element on the parent element\n * @param {Selection} parent Element to which the element is to be appended\n * @param {Object} elemType Type of the new element\n * @param {Array} data Data for the new element\n * @param {Object} selector classname/id/tagname for the element\n * @return {HTMLElement} Newly Created Element\n */\nconst makeElement = (parent, elemType, data, selector, callbacks = {}, keyFn) => {\n if ((parent instanceof HTMLElement || parent instanceof SVGElement)) {\n parent = selectElement(parent);\n }\n\n const selectorVal = selector ? selector[0] : null;\n let selectorType = null;\n let actualSelector = null;\n let element = null;\n let enterSel = null;\n let mergeSel = null;\n let filter;\n if (selectorVal) {\n if (selectorVal === '#') {\n selectorType = 'id';\n actualSelector = selector;\n } else {\n selectorType = 'class';\n actualSelector = selector[0] === '.' ? selector : `.${selector}`;\n }\n } else {\n actualSelector = elemType;\n filter = true;\n }\n element = parent.selectAll(actualSelector);\n\n filter && (element = element.filter(function () {\n return this.parentNode === parent.node();\n }));\n element = element.data(data, keyFn);\n\n enterSel = element.enter()\n .append(elemType || 'div');\n callbacks.enter && enterSel.each(function (...params) {\n callbacks.enter(selectElement(this), ...params);\n });\n\n mergeSel = enterSel.merge(element);\n callbacks.update && mergeSel.each(function (...params) {\n callbacks.update(selectElement(this), ...params);\n });\n if (selectorType === 'class') {\n mergeSel.classed(selectorVal === '.' ? selector.substring(1, selector.length) : selector, true);\n } else if (selectorType === 'id') {\n mergeSel.attr('id', selector.substring(1, selector.length));\n }\n const exitSel = element.exit();\n\n if (callbacks.exit) {\n exitSel.each(function (...params) {\n callbacks.exit(selectElement(this), ...params);\n });\n } else {\n exitSel.remove();\n }\n return mergeSel;\n};\n\n/**\n * This function applies styles to an element\n * @param {Object} elem Element Selection\n * @param {Object} styleObj Style Object to be applied\n * @return {Element} Newly Created Element\n*/\nconst applyStyle = (elem, styleObj) => {\n Object.entries(styleObj).forEach((d) => {\n elem.style(d[0], d[1]);\n }, this);\n return elem;\n};\n\n/**\n * This function appends a dom element in another element.\n * @param {HTMLElement | SVGElement} element1 The element in which to append the second element\n * @param {HTMLElement | SVGElement} element2 The element which will be appended.\n */\nconst appendElement = (element1, element2) => {\n element1.appendChild(element2);\n};\n\n/**\n * Sets the attributes to the element.\n * @param {HTMLElement | SVGElement} element Element on which attributes will be applied\n * @param {Object} attrs Attributes which need to be applied\n */\nconst setElementAttrs = (element, attrs) => {\n for (const key in attrs) {\n if ({}.hasOwnProperty.call(attrs, key)) {\n element.attr(key, attrs[key]);\n }\n }\n};\n\n/**\n * Sets attributes in the svg or html element\n * @param {SVGElement | HTMLElement} element The element on which attrs will be applied\n * @param {Array.} attrs Array of attributes\n * @param {string} className className of elements to select.\n * @return {SVGElement | HTMLElement} SVGElement or html element.\n */\nconst setAttrs = (element, attrs, className) => {\n if (!(element instanceof selection)) {\n element = selectElement(element);\n }\n className !== undefined ? element.selectAll(`.${className}`).each(function () {\n setElementAttrs(select(this), attrs);\n }) : setElementAttrs(element, attrs);\n return element;\n};\n\n/**\n * Adds a css class to elements which passes the filter function.If filter function is not given,\n * then all elements will be applied the class.\n * @param {HTMLElement | SVGElement} element element\n * @param {string} className css class\n * @param {string} selector css selector\n * @param {Function} filterFn filter method.\n */\nconst addClass = (element, className, selector, filterFn) => {\n select(element).selectAll(selector).each(function (data) {\n const elem = select(this);\n filterFn ? filterFn(data) && elem.classed(className, true) :\n elem.classed(className, true);\n });\n};\n\n/**\n * Removes the css class from elements which passes the filter function.If filter function is not given,\n * then all elements will be applied the class.\n * @param {HTMLElement | SVGElement} element element\n * @param {string} className css class\n * @param {string} selector css selector\n * @param {Function} filterFn filter method.\n */\nconst removeClass = (element, className, selector, filterFn) => {\n select(element).selectAll(selector).each(function (data) {\n const elem = select(this);\n filterFn ? filterFn(data) && elem.classed(className, false) :\n elem.classed(className, false);\n });\n};\n\n/**\n * Sets styles in the svg or html element\n * @param {SVGElement | HTMLElement} element The element on which styles will be applied\n * @param {Array.} styles Array of style attributes\n * @return {SVGElement | HTMLElement} SVGElement or html element.\n */\nconst setStyles = (element, styles) => {\n if (!(element instanceof selection)) {\n element = selectElement(element);\n }\n for (const key in styles) {\n if ({}.hasOwnProperty.call(styles, key)) {\n element.style(key, styles[key]);\n }\n }\n return element;\n};\n\n/**\n * Creates svg or html elements by binding data to the selection.Removes extra elements\n * on exit.\n * @param {Object} params Parameter object\n * @param {SVGElement | HTMLElement} params.container Container element where all elements will be appended\n * @param {string} params.selector Selector by which elements will be selected from dom\n * @param {string} params.append Append tag\n * @param {Function} params.each Function which will be executed for each data point and element.\n */\nconst createElements = (params) => {\n const container = select(params.container);\n let data;\n let sel;\n\n data = params.data;\n if (typeof data === 'number') {\n data = Array(data).fill().map((d, i) => i);\n }\n sel = container.selectAll(params.selector).data(data);\n\n sel = container.selectAll(params.selector).filter(function () {\n return this.parentNode === container.node();\n }).data(params.data);\n\n const selectionMerge = sel.enter().append(params.append).merge(sel).each(function (d, i) {\n params.each(d, select(this), i);\n });\n\n selectionMerge.attr('class', params.className || '');\n sel.exit().remove();\n};\n\n/**\n * Clips an element with given measurement. Basically it is used to hide overflowing portions\n * of any element.\n * @param {SVGElement} container svg element which needs to be clipped.\n * @param {Object} measurement Dimensions of the clipped rectangle.\n * @param {string} id Unique id of the clip element\n */\nconst clipElement = (container, measurement, id) => {\n const clipPathElement = makeElement(select(container), 'clipPath', [1], `#${id}`);\n const clipPathRect = makeElement(clipPathElement, 'rect', [1]);\n clipPathRect.attr('x', measurement.x)\n .attr('y', measurement.x)\n .attr('width', measurement.width)\n .attr('height', measurement.height);\n clipPathElement.attr('clip-path', `url(#${id})`);\n};\n\n/**\n * Returns the element of the corresponding classname.\n * @param {HTMLElement | SVGElement} node html or svg node element.\n * @param {string} className css class to be applied.\n * @return {HTMLElement | SVGElement} html or svg element.\n */\nconst getElementsByClassName = (node, className) => select(node).selectAll(className).nodes();\n\n/**\n * Gets the mouse position relative to an svg type of element\n * @param {SVGElement} element Any svg element like rect, circle, etc.\n * @param {Event} event Event object.\n * @return {Object} x and y position relative to the container element passed.\n */\nconst getMousePos = (element, event) => {\n const boundingClientRect = element.getBoundingClientRect();\n return {\n x: event.x - boundingClientRect.x,\n y: event.y - boundingClientRect.y\n };\n};\n\nconst getClientPoint = (...params) => {\n const pos = clientPoint(...params);\n return {\n x: pos[0],\n y: pos[1]\n };\n};\n\n/** This function appends a dom element in another element.\n * @param {Object} tag The tag name of the element to append\n * @param {Object} mount Mount point fo the element\n * @return {Object} selection of the appended element\n */\nconst createElement = (tag, mount) => select(mount).append(tag).node();\n\n/**\n * Gets the d3 event function\n * @return {Object} d3 event\n */\nconst getEvent = () => d3event;\n\n/**\n * Gets the d3 drag function\n * @return {Object} d3 drag\n */\nconst getD3Drag = () => d3drag;\n\nconst getSmartComputedStyle = (group, css) => {\n let textEl;\n const testText = 'W';\n const mandatoryStyle = {\n 'fill-opacity': 0\n };\n const className = typeof css === 'string' ? css : (css instanceof Array ? css.join(' ') : undefined);\n\n if (group.node() instanceof HTMLElement) {\n textEl = group.append('div').html(testText);\n } else {\n textEl = group.append('text').text(testText);\n }\n\n if (className) {\n textEl.attr('class', className);\n } else if (typeof css === 'object') {\n delete css['fill-opacity'];\n mergeRecursive(mandatoryStyle, css);\n }\n\n textEl.style(mandatoryStyle);\n\n const computedStyle = window.getComputedStyle(textEl.node());\n const styleForSmartLabel = {\n fontSize: computedStyle.fontSize,\n fontFamily: computedStyle.fontFamily,\n fontWeight: computedStyle.fontWeight,\n fontStyle: computedStyle.fontStyle\n };\n\n textEl.remove();\n\n return styleForSmartLabel;\n};\n\nconst hasTouch = () => 'ontouchstart' in document.documentElement;\n\nexport {\n hasTouch,\n selectElement,\n makeElement,\n applyStyle,\n addClass,\n removeClass,\n appendElement,\n setAttrs,\n setStyles,\n createElement,\n createElements,\n clipElement,\n getElementsByClassName,\n getMousePos,\n getEvent,\n getD3Drag,\n getSmartComputedStyle,\n getClientPoint\n};\n","/**\n * This class represents a selection applied on a data array.\n *\n * @class Selection\n */\nclass Selection {\n /**\n * Creates an instance of Selection.\n * @param {Array} data Array of DataObjects.\n * @memberof Selection\n */\n constructor () {\n this._data = [];\n // // map of id to data\n this._idMap = {};\n\n this._mode = '';\n // data.forEach((item, idx) => {\n // const index = item.id || idx;\n // this._idMap[index] = item;\n // });\n // // array to store data in enter phase\n this._enterdata = [];\n // // array to store data in exit phase\n this._exitdata = [];\n }\n /**\n * Gets the object bound to a class\n *\n * @return {Object} current data set bound to the class\n * @memberof Selection\n */\n getObjects () {\n return Object.keys(this._idMap).map(e => this._idMap[e]);\n }\n\n /**\n * This method is used to supply seed data to a selection.\n *\n * @param {Array} newData Seed data to create the enter selection.\n * @param {Functon | undefined } idGetter This function is used to uniqely identify a data entry.\n * @return {Selection} Modified selection.\n * @memberof Selection\n */\n data (newData, idGetter) {\n if (idGetter) {\n this._data = [];\n this._idGetter = idGetter;\n const tempMap = {};\n\n newData.forEach((...params) => {\n const index = idGetter(...params);\n tempMap[index] = params[0];\n });\n // check if any data items have been removed\n const purgedIds = [];\n\n Object.keys(this._idMap).forEach((id) => {\n if (!tempMap[id]) {\n purgedIds.push(id);\n }\n });\n\n Object.keys(tempMap).forEach((id) => {\n if (!this._idMap[id]) {\n this._enterdata.push(tempMap[id]);\n } else {\n this._idMap[id] = tempMap[id];\n this._data.push(tempMap[id]);\n }\n });\n // move the purged items to exit selection\n purgedIds.forEach((id) => {\n const purged = this._idMap[id];\n this._exitdata.push(purged);\n // this._data = this._data.slice(id, 1);\n delete this._idMap[id];\n });\n // this._data = this._data.slice(temp, this._data.length);\n\n return this;\n }\n // no id getter supplied so use indices\n if (newData.length > this._data.length) {\n const startIdx = this._data.length;\n for (let i = startIdx; i < newData.length; i += 1) {\n this._enterdata.push(newData[i]);\n }\n } else {\n // push to exit selection\n const temp = newData.length;\n for (let i = temp; i < this._data.length; i += 1) {\n const purged = this._data[i];\n delete this._idMap[purged.id];\n this._exitdata.push(purged);\n }\n this._data = this._data.slice(temp, this._data.length);\n }\n return this;\n }\n\n /**\n * Applies the supplied callback to each data element\n * and returns a new selection.\n *\n * @param {Function} callback Callback to execute on each item.\n * @return {Selection} New selection with data created using callback.\n * @memberof EnterSelection\n */\n append (callback) {\n this[`_${this._mode}data`].forEach((...params) => {\n const data = params[0];\n const id = this._idGetter ? this._idGetter(...params) : (data.id || params[1]);\n this._idMap[id] = callback(...params);\n });\n this._mode = '';\n return this;\n }\n\n /**\n * This method returns an enter selection that\n * allows or update operations.\n *\n * @return {EnterSelection} Instance of enter selection.\n * @memberof Selection\n */\n enter () {\n this._mode = 'enter';\n return this;\n // return new EnterSelection(this._enterdata, this._idMap, this._idGetter);\n }\n\n /**\n * This method is used to set key value pairs\n * on data objects.\n *\n * @param {string} key Name of property.\n * @param {any} value Value of property.\n * @return {Selection} Modified selection.\n * @memberof Selection\n */\n attr (key, value) {\n this._data.forEach(item => item.attr(key, value));\n return this;\n }\n\n /**\n * This method merges the data of one selection with another.\n *\n * @param {Selection} selection Instance of selection.\n * @return {Selection} Modified selection.\n * @memberof Selection\n */\n merge (selection) {\n selection._data.forEach((...params) => {\n const id = this._idGetter ? this._idGetter(...params) : (params[0].id || params[1]);\n this._idMap[id] = params[0];\n this._data.push(params[0]);\n });\n // reset enter selection\n this._enterdata = [];\n return this;\n }\n\n /**\n * Returns a selection with exit data.\n *\n * @return {Selection} Instance of selection.\n * @memberof Selection\n */\n exit () {\n this._mode = 'exit';\n // const exitdata = this._exitdata;\n // const exitSelection = new Selection(exitdata);\n // this._exitdata = [];\n return this;\n }\n\n each (fn) {\n Object.keys(this._idMap).forEach((e) => {\n fn(this._idMap[e]);\n });\n return this;\n }\n\n map (fn) {\n Object.keys(this._idMap).forEach((...params) => {\n this._idMap[params[0]] = fn(this._idMap[params[0]], ...params);\n });\n return this;\n }\n\n /**\n * Executes the cleanup operation associated with data objets.\n *\n * @memberof Selection\n */\n remove () {\n // do cleanup on DDO's\n const data = this[`_${this._mode}data`];\n\n data.forEach(item => item.remove());\n if (this._mode === '') {\n this.each(e => e.remove());\n }\n this[`_${this._mode}data`] = [];\n this._mode = '';\n }\n}\n\nexport default Selection;\n","import { getUniqueId } from '../index';\n/**\n * Represents the base class that all objects that form\n * the data for a selection must inherit from.\n *\n * @class DataObject\n */\nclass DataObject {\n/**\n * Creates an instance of DataObject.\n * @memberof DataObject\n */\n constructor () {\n this._id = getUniqueId();\n }\n /**\n * Returns the id.\n *\n * @readonly\n * @memberof DataObject\n */\n get id () {\n return this._id;\n }\n\n /**\n * Sets the value corresponding to supplied key.\n *\n * @param {string} key The property name.\n * @param {any} value Value associated with prop.\n * @memberof DataObject\n */\n attr (key, value) {\n this[key] = value;\n }\n\n /**\n * Clean up code to be executed by each object.\n *\n * @override\n * @memberof DataObject\n */\n remove () {\n // cleanup\n }\n}\n\nexport default DataObject;\n","const events = [\n 'initialized',\n 'beforeupdate',\n 'updated',\n 'beforedraw',\n 'drawn',\n 'beforeremove',\n 'removed'\n];\n\nconst compositions = [\n 'canvas',\n 'unit',\n 'layer',\n 'axis',\n 'facet-headers',\n 'legend',\n 'caption'\n];\n\nconst EVENT_LIST = [];\n\ncompositions.forEach((composition) => {\n events.forEach((event) => {\n EVENT_LIST.push(`${composition}.${event}`);\n });\n});\n\nexport default EVENT_LIST;\n","import EVENT_LIST from './event-list';\n\n/**\n * At first call it accepts one function\n * calling it second time accepts notification object.\n * notification object then called with first accepted function\n *\n * @param {Function} resolveFn a promise's resolve function\n * @return {Function} a function to accept notification object\n */\nconst resolver = resolveFn => notification => resolveFn(notification);\n\n/**\n * Checks if the property string is present in the source object\n *\n * @param {Object} source source object whom you want to check the property\n * @param {string} property key name that need to be checked\n * @return {boolean} returns true if the property found in the source object\n */\nconst hasOwn = (source, property) => Object.prototype.hasOwnProperty.call(source, property);\n\n/**\n * LifeCycleManager which goes as a dependendecy to a muze\n * it accepts notification from the entire library throughout\n * the exeecution life\n *\n * @export\n * @class LifeCycleManager\n */\nexport default class LifeCycleManager {\n\n /**\n * Creates an instance of LifeCycleManager.\n * @memberof LifeCycleManager\n */\n constructor () {\n this._eventList = EVENT_LIST;\n this._promises = new Map();\n this._notifiers = {};\n this._lifeCycles = {};\n this._unreleasedLifeCycles = {};\n this._boot();\n }\n\n /**\n * Fills all the notifiers with resolver callback\n *\n * @memberof LifeCycleManager\n */\n _boot () {\n this._notifiers = this._eventList.reduce((acc, name) => {\n acc[name] = resolver;\n return acc;\n }, {});\n this._preparePromises();\n }\n\n /**\n * Public method which gives the promise corresponding\n * to the event name\n *\n * @param {string} eventName name of the event like `canvas.drawn`\n * @return {promise} promise that is passed to the user\n * @memberof LifeCycleManager\n */\n retrieve (eventName) {\n return this._promises.get(eventName);\n }\n\n /**\n * Creates a promise that will be passed to user's callback\n *\n * @param {string} eventName name of the event like `canvas.drawn`\n * @return {promise} a pending promise waiting for resolve to be called\n * @memberof LifeCycleManager\n */\n _makeNotifierPromise (eventName) {\n return new Promise((resolve) => {\n this._notifiers[eventName] = this._notifiers[eventName](resolve);\n });\n }\n\n /**\n * Prepares the promise map with pending promises\n * all the promises are in a pending state where their's\n * resolve function waiting to be called with notification object\n * @memberof LifeCycleManager\n */\n _preparePromises () {\n this._eventList.forEach((eventName) => {\n this._promises.set(eventName, this._makeNotifierPromise(eventName));\n });\n }\n\n /**\n * Resolves the promise with notification object\n *\n * @param {string} eventName name of the event in the system\n * @param {Object} notification notification object\n * @param {string} notification.formalName name of the sender creating the notification\n * @param {Object} notification.client instance or array of instances sending the notification\n * @param {string} notification.action the stage name when the event happened like `beforedraw`\n *\n * @memberof LifeCycleManager\n */\n _resolvePromise (eventName, notification) {\n this._notifiers[eventName](notification);\n }\n\n /**\n * Public method which is being called by different\n * subcompoents of the system at different execution atages\n * @param {Object} notification notification object\n * @param {string} notification.formalName name of the sender creating the notification\n * @param {Object} notification.client instance or array of instances sending the notification\n * @param {string} notification.action the stage name when the event happened like `beforedraw`\n * @memberof LifeCycleManager\n */\n notify (notification) {\n // get the composition name from notification\n // or from static formalName() method\n const composition = notification.formalName || notification.client.constructor.formalName();\n notification.formalName = composition;\n this._releasePromisesFromCache();\n this._notify(composition, notification);\n }\n\n /**\n * Notify user the with promsie in a callback\n * if callback not found then cache it\n *\n * @param {string} composition\n * @param {Object} notification notification object\n * @param {string} notification.formalName name of the sender creating the notification\n * @param {Object} notification.client instance or array of instances sending the notification\n * @param {string} notification.action the stage name when the event happened like `beforedraw`\n * @memberof LifeCycleManager\n */\n _notify (composition, notification) {\n const stage = notification.action;\n const eventName = `${composition}.${stage}`;\n\n // resolves promise with the notification object\n this._resolvePromise(eventName, notification);\n\n // get the promise from the promise map\n const promise = this.retrieve(eventName);\n\n if (this._lifeCycles[composition]) {\n if (this._lifeCycles[composition][stage]) {\n // if user given call back exists, then call with promise\n this._callLifeCycleCallback(composition, stage, promise);\n } else {\n // otherwise cache the promise\n this._cachePromise(composition, stage, promise);\n }\n } else {\n this._cachePromise(composition, stage, promise);\n }\n }\n\n /**\n * Calls the user's callback with callback\n *\n * @param {string} composition name of the compositon like `canvas`\n * @param {string} stage the stage name when the event happened like `beforedraw`\n * @param {promise} promise promise that is passed to the user\n * @memberof LifeCycleManager\n */\n _callLifeCycleCallback (composition, stage, promise) {\n const eventName = `${composition}.${stage}`;\n this._lifeCycles[composition][stage](promise);\n this._resetTargetPromise(eventName);\n }\n\n /**\n * Try to clear the cached promsies once we have\n * macthed callbacks from the user\n *\n * @memberof LifeCycleManager\n */\n _releasePromisesFromCache () {\n const compositions = Object.keys(this._unreleasedLifeCycles);\n compositions.forEach((composition) => {\n const stages = Object.keys(this._unreleasedLifeCycles[composition]);\n stages.forEach((stage) => {\n if (this._lifeCycles[composition]) {\n if (this._lifeCycles[composition][stage]) {\n // take the promise from unreleased lifeCycles\n const promise = this._unreleasedLifeCycles[composition][stage];\n // call the user given callback with that promise\n this._callLifeCycleCallback(composition, stage, promise);\n // delete promise from unreleased lifeCycles\n delete this._unreleasedLifeCycles[composition][stage];\n }\n }\n });\n });\n }\n\n /**\n * Cache the promise in the map. This cache\n * then get consumed if we get user callbacks\n * @param {string} composition name of the compositon like `canvas`\n * @param {string} stage the stage name when the event happened like `beforedraw`\n * @param {promise} promise promise that is passed to the user\n * @memberof LifeCycleManager\n */\n _cachePromise (composition, stage, promise) {\n if (!hasOwn(this._unreleasedLifeCycles, composition)) {\n this._unreleasedLifeCycles[composition] = {};\n }\n\n if (!hasOwn(this._unreleasedLifeCycles[composition], stage)) {\n this._unreleasedLifeCycles[composition][stage] = {};\n }\n this._unreleasedLifeCycles[composition][stage] = promise;\n }\n\n /**\n * It register's the callbacks gievn the user\n *\n * @param {Object} [lifeCycles={}] a object with list of callbacks\n * @memberof LifeCycleManager\n */\n register (lifeCycles = {}) {\n this._lifeCycles = lifeCycles;\n // as we get all the callbacks, try to call them\n // from unreleased promise map\n this._releasePromisesFromCache();\n }\n\n /**\n * Reset the promise into pending state\n *\n * @param {string} eventName name of the event happening\n * @memberof LifeCycleManager\n */\n _resetTargetPromise (eventName) {\n setTimeout(() => {\n this._notifiers[eventName] = resolver;\n this._promises.set(eventName, this._makeNotifierPromise(eventName));\n }, 0);\n }\n}\n","import LifeCycleManager from './lifecycle-manager';\n\nexport default LifeCycleManager;\n","export const DRAG = 'drag';\nexport const HOVER = 'hover';\nexport const SELECTIONDRAG = 'selectiondrag';\nexport const CLICK = 'click';\nexport const LONGTOUCH = 'longtouch';\nexport const TOUCHDRAG = 'touchdrag';\nexport const ALL_ACTIONS = '*';\n","const SELECTION_NEW_ENTRY = 1;\nconst SELECTION_NEW_EXIT = -1;\nconst SELECTION_NULL = 0;\nconst SELECTION_OLD_ENTRY = 2;\nconst SELECTION_OLD_EXIT = -2;\n\nexport {\n SELECTION_NEW_ENTRY,\n SELECTION_NEW_EXIT,\n SELECTION_NULL,\n SELECTION_OLD_ENTRY,\n SELECTION_OLD_EXIT\n};\n","import {\n SELECTION_NEW_ENTRY, SELECTION_NEW_EXIT, SELECTION_NULL, SELECTION_OLD_ENTRY, SELECTION_OLD_EXIT\n} from '../enums/selection';\n/* eslint-disable guard-for-in */\n\n/**\n * This component is used to keep track of the row tuples of the data which gets added and removed.\n * @class SelectionSet\n */\nclass SelectionSet {\n /**\n * Creates an instance of selection set\n * @param {Array.} completeSet Set of unique ids.\n */\n constructor (completeSet, _volatile) {\n this.completeSet = completeSet;\n this._set = completeSet.reduce((obj, key) => {\n obj[key] = SELECTION_NULL;\n return obj;\n }, {});\n this._volatile = _volatile;\n this._completeSetCount = completeSet.length;\n this._lockedSelection = {};\n this._resetted = true;\n }\n\n /**\n * Adds a set of ids to the selection set.\n * @param {Array.} ids Array of unique ids\n * @return {SelectionSet} Instance of selection set.\n */\n add (ids) {\n this._resetted = false;\n\n const set = this._set;\n // from exitset to entryset\n ids.forEach((i) => {\n set[i] = SELECTION_NEW_ENTRY;\n });\n\n for (const key in set) {\n if (set[key] !== SELECTION_NEW_ENTRY && set[key] !== SELECTION_OLD_ENTRY) {\n set[key] = set[key] < 0 ? SELECTION_OLD_EXIT : SELECTION_NEW_EXIT;\n }\n }\n return this;\n }\n\n /**\n * Adds a set of ids to the selection set.\n * @param {Array.} ids Array of unique ids\n * @return {SelectionSet} Instance of selection set.\n */\n update (ids) {\n const set = this._set;\n // from exitset to entryset\n ids.forEach((i) => {\n set[i] = SELECTION_OLD_ENTRY;\n });\n\n return this;\n }\n\n /**\n * Adds a set of ids to the selection set.\n * @param {Array.} ids Array of unique ids\n * @return {SelectionSet} Instance of selection set.\n */\n updateEntry () {\n const set = this._set;\n\n // from exitset to entryset\n for (const key in set) {\n set[key] = set[key] === SELECTION_NEW_ENTRY ? SELECTION_OLD_ENTRY : set[key];\n }\n return this;\n }\n\n /**\n * Adds a set of ids to the selection set.\n * @param {Array.} ids Array of unique ids\n * @return {SelectionSet} Instance of selection set.\n */\n updateExit () {\n const set = this._set;\n // from exitset to entryset\n for (const key in set) {\n set[key] = set[key] === SELECTION_NEW_EXIT ? SELECTION_OLD_EXIT : set[key];\n }\n return this;\n }\n\n /**\n * Removes the ids from the selection set.\n * @param {Array.} ids Array of unique ids\n * @return {SelectionSet} Instance of selection set\n */\n remove (ids) {\n this._resetted = false;\n\n const set = this._set;\n ids.forEach((i) => {\n set[i] = SELECTION_NEW_EXIT;\n });\n\n for (const key in set) {\n if (set[key] !== SELECTION_NEW_EXIT && set[key] !== SELECTION_OLD_EXIT) {\n set[key] = set[key] === 0 ? SELECTION_NEW_ENTRY : SELECTION_OLD_ENTRY;\n }\n }\n\n return this;\n }\n\n getSets () {\n const set = this._set;\n const retObj = {\n entrySet: [[], []],\n exitSet: [[], []],\n completeSet: []\n };\n\n for (const key in set) {\n if (set[key] > 0) {\n set[key] === SELECTION_OLD_ENTRY && retObj.entrySet[0].push(key);\n set[key] === SELECTION_NEW_ENTRY && retObj.entrySet[1].push(key);\n } else if (set[key] < 0) {\n set[key] === SELECTION_OLD_EXIT && retObj.exitSet[0].push(key);\n set[key] === SELECTION_NEW_EXIT && retObj.exitSet[1].push(key);\n }\n retObj.completeSet.push(key);\n }\n\n ['entrySet', 'exitSet'].forEach((type) => {\n retObj[type] = retObj[type].map(e => e.map(Number));\n });\n retObj.completeSet = retObj.completeSet.map(Number);\n\n return retObj;\n }\n\n /**\n * Resets the selection set to initial state. It sets the value of every unique id value to\n * null in the selection set.\n * @return {SelectionSet} Instance of selection set.\n */\n reset (ids) {\n const set = this._set;\n if (ids) {\n ids.forEach((i) => {\n set[i] = SELECTION_NULL;\n });\n } else {\n const lockedSel = this._lockedSelection;\n for (const key in set) {\n if (!(key in lockedSel)) {\n set[key] = SELECTION_NULL;\n }\n }\n }\n this._resetted = true;\n return this;\n }\n\n /**\n * Gets the set of ids which are added in the selection set.\n * @return {Array.} Array of unique ids\n */\n getEntrySet () {\n const set = this._set;\n const addSet = [];\n\n for (const key in set) {\n set[key] === SELECTION_NEW_ENTRY && addSet.push(key);\n }\n\n return addSet;\n }\n\n /**\n * Returns a set of unique ids which are already present in entry set\n * @param {Array} addSet Array of unique ids which are added\n *\n * @return {Array} Array of unique ids which are already in old entry set or new entry set\n */\n getExistingEntrySet (addSet) {\n const set = this._set;\n return addSet.filter(d => set[d] === SELECTION_NEW_ENTRY || set[d] === SELECTION_OLD_ENTRY);\n }\n\n getExistingExitSet (removeSet) {\n const set = this._set;\n return removeSet.filter(d => set[d] === SELECTION_NEW_EXIT || set[d] === SELECTION_OLD_EXIT);\n }\n\n /**\n * Gets the set of ids which are added in the selection set.\n * @return {Array.} Array of unique ids\n */\n getOldEntry () {\n const set = this._set;\n const updateSet = [];\n\n for (const key in set) {\n set[key] === SELECTION_OLD_ENTRY && updateSet.push(key);\n }\n return updateSet;\n }\n\n /**\n * Gets the set of ids which are added in the selection set.\n * @return {Array.} Array of unique ids\n */\n getOldExit () {\n const set = this._set;\n const updateSet = [];\n\n for (const key in set) {\n set[key] === SELECTION_OLD_EXIT && updateSet.push(key);\n }\n\n return updateSet;\n }\n\n /**\n * Gets the set of ids which are in the remove set.\n * @return {Array.} Array of unique ids\n */\n getExitSet () {\n const set = this._set;\n const removeSet = [];\n\n for (const key in set) {\n set[key] === SELECTION_NEW_EXIT && removeSet.push(key);\n }\n return removeSet;\n }\n\n getCompleteSet () {\n const set = this._set;\n const completeSet = [];\n\n for (const key in set) {\n completeSet.push(key);\n }\n\n return completeSet;\n }\n\n getCompleteSetCount () {\n return this._completeSetCount;\n }\n\n resetted () {\n return this._resetted;\n }\n\n /**\n * Swaps the add set and remove set in the selection set.\n * @return {SelectionSet} Instance of selection set.\n */\n toggle () {\n const set = this._set;\n\n for (const key in set) {\n if (set[key] === SELECTION_NEW_ENTRY) {\n set[key] = SELECTION_NEW_EXIT;\n } else if (set[key] === SELECTION_NEW_EXIT) {\n set[key] = SELECTION_NEW_ENTRY;\n } else if (set[key] === SELECTION_OLD_ENTRY) {\n set[key] = SELECTION_OLD_EXIT;\n } else {\n set[key] = SELECTION_OLD_ENTRY;\n }\n }\n\n return this;\n }\n}\n\nexport default SelectionSet;\n","import { clone } from 'muze-utils';\nimport * as SELECTION from '../enums/selection';\n\nexport const initializeSideEffects = (context, sideEffects) => {\n const sideEffectsMap = context._sideEffects;\n\n sideEffects = sideEffects instanceof Array ? sideEffects : Object.values(sideEffects);\n sideEffects.forEach((SideEffect) => {\n const sideEffectInstance = sideEffectsMap[SideEffect.formalName()];\n sideEffectsMap[SideEffect.formalName()] = sideEffectInstance || new SideEffect(context);\n });\n return sideEffectsMap;\n};\n\nexport const initializeBehaviouralActions = (context, actions) => {\n const dispatchableBehaviours = {};\n\n actions = actions instanceof Array ? actions : Object.values(actions);\n actions.forEach((Action) => {\n dispatchableBehaviours[Action.formalName()] = new Action(context);\n });\n return dispatchableBehaviours;\n};\n\nexport const initializePhysicalActions = (context, actions) => {\n const physicalActions = {};\n\n for (const name in actions) {\n if (!({}).hasOwnProperty.call(name, actions)) {\n physicalActions[name] = actions[name](context);\n }\n }\n return physicalActions;\n};\n\nexport const changeSideEffectAvailability = (context, fn, toEnable) => {\n const sideEffects = context.sideEffects();\n for (const key in sideEffects) {\n if ({}.hasOwnProperty.call(sideEffects, key)) {\n let change = true;\n if (fn && fn(key) === false) {\n change = false;\n }\n if (change) {\n toEnable ? sideEffects[key].enable() : sideEffects[key].disable();\n }\n }\n }\n};\n\nexport const getMergedSet = set => [...new Set([...set[0], ...set[1]])];\n\nexport const getSourceFields = (propagationInf, criteria = {}) => {\n const sourceIdentifiers = propagationInf.sourceIdentifiers;\n let sourceFields;\n if (sourceIdentifiers) {\n sourceFields = sourceIdentifiers.getSchema().map(d => d.name);\n } else if (criteria instanceof Array) {\n sourceFields = criteria[0];\n } else {\n sourceFields = Object.keys(criteria || {});\n }\n return sourceFields;\n};\n\nconst conditionsMap = {\n newEntry: [SELECTION.SELECTION_NEW_ENTRY],\n oldEntry: [SELECTION.SELECTION_OLD_ENTRY],\n mergedEnter: [SELECTION.SELECTION_NEW_ENTRY, SELECTION.SELECTION_OLD_ENTRY],\n newExit: [SELECTION.SELECTION_NEW_EXIT],\n oldExit: [SELECTION.SELECTION_OLD_EXIT],\n mergedExit: [SELECTION.SELECTION_NEW_EXIT, SELECTION.SELECTION_OLD_EXIT],\n complete: []\n};\n\nexport const getModelFromSet = (type, model, set) => {\n if (model) {\n return model.select((fields, i) =>\n (conditionsMap[type].some(condition => set[i] === condition)), {\n saveChild: false\n });\n }\n return null;\n};\n\nexport const getSetInfo = (type, set, config) => {\n let model = null;\n const filteredDataModel = config.filteredDataModel;\n const selectionSet = config.selectionSet;\n if (!config.propagationData) {\n if (selectionSet.resetted()) {\n model = null;\n } else {\n model = getModelFromSet(type, config.dataModel, config.selectionSet._set);\n }\n } else if (filteredDataModel) {\n model = type === 'mergedEnter' ? filteredDataModel[0] : filteredDataModel[1];\n }\n return {\n uids: set,\n length: set.length,\n model\n };\n};\n\nexport const getSideEffects = (behaviour, behaviourEffectMap) => {\n const sideEffects = [];\n for (const key in behaviourEffectMap) {\n const behaviours = key.split(',');\n const found = behaviours.some(d => d === behaviour);\n if (found) {\n sideEffects.push({\n effects: behaviourEffectMap[key],\n behaviours\n });\n }\n }\n return sideEffects;\n};\n\nexport const unionSets = (context, behaviours) => {\n let combinedSet = {};\n const models = {\n mergedEnter: null,\n mergedExit: null\n };\n behaviours.forEach((behaviour) => {\n const entryExitSet = context._entryExitSet[behaviour];\n if (entryExitSet) {\n combinedSet = Object.assign(combinedSet, clone(entryExitSet));\n ['mergedEnter', 'mergedExit'].forEach((type) => {\n const model = entryExitSet[type].model;\n let existingModel = models[type];\n if (!existingModel) {\n existingModel = models[type] = model;\n } else {\n existingModel = models[type] = model.union(existingModel);\n }\n combinedSet[type].model = existingModel;\n });\n }\n });\n return combinedSet;\n};\n","import {\n mergeRecursive,\n hasTouch,\n filterPropagationModel,\n FieldType,\n selectElement,\n isSimpleObject\n} from 'muze-utils';\nimport { ALL_ACTIONS } from './enums/actions';\nimport SelectionSet from './selection-set';\nimport {\n initializeBehaviouralActions,\n initializeSideEffects,\n changeSideEffectAvailability,\n initializePhysicalActions,\n unionSets,\n getSideEffects\n} from './helper';\n\n/**\n * Relient firebolt is responsible for dispatching behaviours. It has only behaviours which can be\n * dispatched without any physical action being triggered.\n */\nexport default class Firebolt {\n constructor (context, actions, sideEffects, behaviourEffectMap) {\n this.context = context;\n this._sideEffectDefinitions = {};\n this._sideEffects = {};\n this._propagationInf = {};\n this._actions = {\n behavioural: {},\n physical: {}\n };\n this._selectionSet = {};\n this._volatileSelectionSet = {};\n this._propagationFields = {};\n this._sourceSideEffects = {\n selectionBox: () => false\n };\n this._propagationBehaviourMap = {};\n this._sourceBehaviours = {};\n this._actionBehaviourMap = {};\n this._config = {};\n this._behaviourEffectMap = {};\n this._entryExitSet = {};\n this._actionHistory = {};\n this._queuedSideEffects = {};\n this._mappedActions = {};\n\n this.mapSideEffects(behaviourEffectMap);\n this.registerBehaviouralActions(actions.behavioural);\n this.registerSideEffects(sideEffects);\n this.registerPhysicalBehaviouralMap(actions.physicalBehaviouralMap);\n this.registerPhysicalActions(actions.physical);\n }\n\n config (...config) {\n if (config.length) {\n const conf = this._config = mergeRecursive(this._config, config[0]);\n const sideEffects = this.sideEffects();\n for (const key in sideEffects) {\n if ({}.hasOwnProperty.call(sideEffects, key)) {\n const sideEffectConf = conf[key];\n sideEffectConf && sideEffects[key].config(sideEffectConf);\n }\n }\n return this;\n }\n return this._config;\n }\n\n mapSideEffects (behEffectMap) {\n const behaviourEffectMap = this._behaviourEffectMap;\n for (const key in behEffectMap) {\n if ({}.hasOwnProperty.call(behEffectMap, key)) {\n const sideEffects = behEffectMap[key] || [];\n let preventDefaultActions = false;\n let effectNames;\n if (isSimpleObject(sideEffects)) {\n effectNames = sideEffects.effects;\n preventDefaultActions = sideEffects.preventDefaultActions;\n } else {\n effectNames = sideEffects;\n }\n !behaviourEffectMap[key] && (behaviourEffectMap[key] = []);\n this._behaviourEffectMap[key] = [...new Set(preventDefaultActions ? effectNames :\n [...behaviourEffectMap[key], ...effectNames])];\n }\n }\n return this;\n }\n\n registerBehaviouralActions (actions) {\n const behaviours = initializeBehaviouralActions(this, actions);\n this.prepareSelectionSets(behaviours);\n Object.assign(this._actions.behavioural, behaviours);\n return this;\n }\n\n prepareSelectionSets () {\n return this;\n }\n\n registerSideEffects (sideEffects) {\n for (const key in sideEffects) {\n this._sideEffectDefinitions[sideEffects[key].formalName()] = sideEffects[key];\n }\n return this;\n }\n\n applySideEffects (sideEffects, selectionSet, payload) {\n const sideEffectStore = this.sideEffects();\n const actionHistory = this._actionHistory;\n const queuedSideEffects = this._queuedSideEffects;\n sideEffects.forEach((sideEffect) => {\n let options;\n let name;\n const effects = sideEffect.effects;\n const behaviours = sideEffect.behaviours;\n const combinedSet = unionSets(this, behaviours, selectionSet);\n effects.forEach((effect) => {\n if (typeof effect === 'object') {\n name = effect.name;\n options = effect.options;\n } else {\n name = effect;\n }\n\n const sideEffectInstance = sideEffectStore[name];\n if (sideEffectInstance.isEnabled()) {\n if (!sideEffectInstance.constructor.mutates() &&\n Object.values(actionHistory).some(d => d.isMutableAction)) {\n queuedSideEffects[`${name}-${behaviours.join()}`] = {\n name,\n params: [combinedSet, payload, options]\n };\n } else {\n this.dispatchSideEffect(name, combinedSet, payload, options);\n }\n }\n });\n });\n return this;\n }\n\n dispatchSideEffect (name, selectionSet, payload, options = {}) {\n const sideEffectStore = this.sideEffects();\n const sideEffect = sideEffectStore[name];\n let disable = false;\n if (options.filter && options.filter(sideEffect)) {\n disable = true;\n }\n !disable && sideEffectStore[name].apply(selectionSet, payload, options);\n }\n\n registerPropagationBehaviourMap (map) {\n this._propagationBehaviourMap = Object.assign(this._propagationBehaviourMap, map || {});\n return this;\n }\n\n dispatchBehaviour (behaviour, payload, propagationInfo = {}) {\n const propagate = propagationInfo.propagate !== undefined ? propagationInfo.propagate : true;\n const behaviouralActions = this._actions.behavioural;\n const action = behaviouralActions[behaviour];\n const behaviourEffectMap = this._behaviourEffectMap;\n const sideEffects = getSideEffects(behaviour, behaviourEffectMap);\n this._propagationInf = propagationInfo;\n\n if (action) {\n const selectionSet = action.dispatch(payload);\n const propagationSelectionSet = this.getPropagationSelectionSet(selectionSet);\n this._entryExitSet[behaviour] = propagationSelectionSet;\n const shouldApplySideEffects = this.shouldApplySideEffects(propagate);\n\n if (propagate) {\n this.propagate(behaviour, payload, selectionSet.find(d => d.sourceSelectionSet), sideEffects);\n }\n if (shouldApplySideEffects) {\n const applicableSideEffects = this.getApplicableSideEffects(sideEffects, payload, propagationInfo);\n this.applySideEffects(applicableSideEffects, propagationSelectionSet, payload);\n }\n }\n\n return this;\n }\n\n getPropagationSelectionSet (selectionSet) {\n return selectionSet.find(d => !d.sourceSelectionSet);\n }\n\n shouldApplySideEffects () {\n return true;\n }\n\n changeBehaviourStateOnPropagation (behaviour, value) {\n if (value instanceof Function) {\n this._sourceBehaviours[behaviour] = value;\n } else {\n this._sourceBehaviours[behaviour] = () => value;\n }\n return this;\n }\n\n changeSideEffectStateOnPropagation (sideEffect, value) {\n if (value instanceof Function) {\n this._sourceSideEffects[sideEffect] = value;\n } else {\n this._sourceSideEffects[sideEffect] = () => value;\n }\n }\n\n propagate () {\n return this;\n }\n\n sideEffects (...sideEffects) {\n if (sideEffects.length) {\n this._sideEffects = sideEffects[0];\n return this;\n }\n return this._sideEffects;\n }\n\n enableSideEffects (fn) {\n changeSideEffectAvailability(this, fn, true);\n return this;\n }\n\n disableSideEffects (fn) {\n changeSideEffectAvailability(this, fn, false);\n return this;\n }\n\n dissociateBehaviour (behaviour, physicalAction) {\n const actionBehaviourMap = this._actionBehaviourMap;\n for (const key in actionBehaviourMap) {\n if (key === physicalAction) {\n const behaviourMap = actionBehaviourMap[key];\n behaviourMap.behaviours = behaviourMap.behaviours.filter(d => d !== behaviour);\n }\n }\n\n return this;\n }\n\n dissociateSideEffect (sideEffect, behaviour) {\n const behaviourEffectMap = this._behaviourEffectMap;\n behaviourEffectMap[behaviour] = behaviourEffectMap[behaviour].filter(d => (d.name || d) !== sideEffect);\n return this;\n }\n\n getApplicableSideEffects (sideEffects) {\n return sideEffects;\n }\n\n attachPropagationListener (dataModel) {\n dataModel.unsubscribe('propagation');\n dataModel.on('propagation', this.onDataModelPropagation());\n return this;\n }\n\n onDataModelPropagation () {\n return (propValue) => {\n const payload = propValue.payload;\n const action = payload.action;\n\n this.dispatchBehaviour(action, payload, {\n propagate: false\n });\n };\n }\n\n createSelectionSet (uniqueIds, behaviouralActions) {\n const behaviours = behaviouralActions || this._actions.behavioural;\n const selectionSet = this._selectionSet;\n const volatileSelectionSet = this._volatileSelectionSet;\n\n for (const key in behaviours) {\n if ({}.hasOwnProperty.call(behaviours, key)) {\n selectionSet[key] = new SelectionSet(uniqueIds);\n volatileSelectionSet[key] = new SelectionSet(uniqueIds, true);\n }\n }\n this._volatileSelectionSet = volatileSelectionSet;\n this.selectionSet(selectionSet);\n return this;\n }\n\n selectionSet (...selectionSet) {\n if (selectionSet.length) {\n this._selectionSet = selectionSet[0];\n return this;\n }\n return this._selectionSet;\n }\n\n initializeSideEffects () {\n const sideEffectDefinitions = this._sideEffectDefinitions;\n this.sideEffects(initializeSideEffects(this, sideEffectDefinitions));\n return this;\n }\n\n registerPhysicalActions (actions) {\n const initedActions = initializePhysicalActions(this, actions);\n Object.assign(this._actions.physical, initedActions);\n return this;\n }\n\n propagateWith (action, fields, append = false) {\n const behaviouralActions = this._actions.behavioural;\n if (fields.length) {\n if (action === ALL_ACTIONS) {\n for (const key in behaviouralActions) {\n this._propagationFields[key] = {\n fields,\n append\n };\n }\n } else {\n this._propagationFields[action] = {\n fields,\n append\n };\n }\n return this;\n }\n return this._propagationFields;\n }\n\n /**\n * Map actions and behaviours\n * @return {Firebolt} Firebolt instance\n */\n mapActionsAndBehaviour () {\n const initedPhysicalActions = this._actions.physical;\n const map = this._actionBehaviourMap;\n const mappedActions = this._mappedActions;\n\n for (const action in map) {\n if (!({}).hasOwnProperty.call(action, map)) {\n let target;\n const mapObj = map[action];\n target = mapObj.target;\n const touch = mapObj.touch;\n if (!target) {\n target = this.context.getDefaultTargetContainer();\n }\n const bind = hasTouch() ? touch === true || touch === undefined : !touch;\n const keyName = `${action}-${mapObj.behaviours.join()}`;\n bind && !mappedActions[keyName] && this.bindActionWithBehaviour(initedPhysicalActions[action],\n target, mapObj.behaviours);\n mappedActions[keyName] = true;\n }\n }\n return this;\n }\n\n registerPhysicalBehaviouralMap (map) {\n Object.assign(this._actionBehaviourMap, map);\n return this;\n }\n\n /**\n * Binds a target element with an action.\n *\n * @param {Function} action Action method\n * @param {string} target Class name of element\n * @param {Array} behaviourList Array of behaviours\n * @return {FireBolt} Instance of firebolt\n */\n bindActionWithBehaviour (action, targets, behaviourList) {\n if (typeof (targets) === 'string') {\n targets = [targets];\n }\n targets.forEach((target) => {\n const mount = this.context.mount();\n const nodes = target.node instanceof Function ? target : selectElement(mount).selectAll(target);\n if (behaviourList.length && !nodes.empty()) {\n if (nodes instanceof Array) {\n nodes.forEach((node) => {\n action(selectElement(node), behaviourList);\n });\n } else {\n action(nodes, behaviourList);\n }\n }\n });\n return this;\n }\n\n getPropagationInf () {\n return this._propagationInf;\n }\n\n getAddSetFromCriteria (criteria, propagationInf = {}) {\n const context = this.context;\n const filteredDataModel = propagationInf.data ? propagationInf.data :\n context.getDataModelFromIdentifiers(criteria, 'all');\n const xFields = context.fields().x || [];\n const yFields = context.fields().y || [];\n const xMeasures = xFields.every(field => field.type() === FieldType.MEASURE);\n const yMeasures = yFields.every(field => field.type() === FieldType.MEASURE);\n return {\n model: filteredDataModel,\n uids: criteria === null ? null : (propagationInf.data ? filterPropagationModel(this.getFullData(),\n propagationInf.data[0], xMeasures && yMeasures).getData().uids : filteredDataModel[0].getData().uids)\n };\n }\n\n getSelectionSets (action) {\n const sourceId = this.context.id();\n const propagationInf = this._propagationInf || {};\n const propagationSource = propagationInf.sourceId;\n let applicableSelectionSets = [];\n if (propagationSource !== sourceId) {\n applicableSelectionSets = [this._volatileSelectionSet[action]];\n }\n\n if (propagationSource) {\n applicableSelectionSets.push(this.selectionSet()[action]);\n }\n return applicableSelectionSets;\n }\n\n getFullData () {\n return this.context.data();\n }\n\n resetted () {\n return this._resetted;\n }\n\n getEntryExitSet (behaviour) {\n return this._entryExitSet[behaviour];\n }\n}\n","import { getSetInfo, getMergedSet, getSourceFields } from '../../helper';\n\nexport default class GenericBehaviour {\n constructor (firebolt) {\n this.firebolt = firebolt;\n this._enabled = true;\n }\n\n dispatch (payload) {\n const criteria = payload.criteria;\n const firebolt = this.firebolt;\n const formalName = this.constructor.formalName();\n const selectionSets = firebolt.getSelectionSets(formalName);\n const {\n model: filteredDataModel,\n uids\n } = this.firebolt.getAddSetFromCriteria(criteria, this.firebolt.getPropagationInf());\n const entryExitSets = selectionSets.map((selectionSet) => {\n this.setSelectionSet(uids, selectionSet);\n return this.getEntryExitSet(selectionSet, filteredDataModel, payload);\n });\n\n return entryExitSets;\n }\n\n setSelectionSet () {\n return this;\n }\n\n getEntryExitSet (selectionSet, filteredDataModel, payload) {\n const {\n entrySet,\n exitSet,\n completeSet\n } = selectionSet.getSets();\n const propagationInf = this.firebolt.getPropagationInf();\n const dataModel = this.firebolt.getFullData();\n const setConfig = {\n isSourceFieldPresent: propagationInf.isSourceFieldPresent,\n dataModel,\n filteredDataModel,\n propagationData: propagationInf.data,\n selectionSet\n };\n\n return {\n entrySet: [getSetInfo('oldEntry', entrySet[0], setConfig),\n getSetInfo('newEntry', entrySet[1], setConfig)],\n exitSet: [getSetInfo('oldEntry', exitSet[0], setConfig),\n getSetInfo('newExit', exitSet[1], setConfig)],\n mergedEnter: getSetInfo('mergedEnter', getMergedSet(entrySet), setConfig),\n mergedExit: getSetInfo('mergedExit', getMergedSet(exitSet), setConfig),\n completeSet: getSetInfo('complete', completeSet, setConfig),\n isSourceFieldPresent: propagationInf.isSourceFieldPresent,\n fields: getSourceFields(propagationInf, payload.criteria),\n sourceSelectionSet: selectionSet._volatile === true\n };\n }\n\n static mutates () {\n return false;\n }\n\n enable () {\n this._enabled = true;\n }\n\n disable () {\n this._enabled = false;\n }\n\n isEnabled () {\n return this._enabled;\n }\n}\n\n","import GenericBehaviour from './generic';\nimport { getMergedSet } from '../../helper';\nimport * as SELECTION from '../../enums/selection';\n\nexport default class VolatileBehaviour extends GenericBehaviour {\n setSelectionSet (addSet, selectionSet) {\n if (addSet === null) {\n selectionSet.reset();\n } else if (addSet.length) {\n // new add set\n const existingAddSet = addSet.filter(d => selectionSet._set[d] === SELECTION.SELECTION_NEW_ENTRY\n || selectionSet._set[d] === SELECTION.SELECTION_OLD_ENTRY);\n selectionSet.updateExit();\n const { entrySet } = selectionSet.getSets();\n selectionSet.reset(getMergedSet(entrySet));\n selectionSet.add(addSet);\n selectionSet.update(existingAddSet);\n } else {\n selectionSet.remove(selectionSet.getCompleteSet());\n }\n }\n}\n","export const BRUSH = 'brush';\nexport const HIGHLIGHT = 'highlight';\nexport const TOOLTIP = 'tooltip';\nexport const FILTER = 'filter';\nexport const SELECT = 'select';\n","import VolatileBehaviour from './volatile';\nimport { HIGHLIGHT } from '../../enums/behaviours';\n\nexport default class HighlightBehaviour extends VolatileBehaviour {\n static formalName () {\n return HIGHLIGHT;\n }\n}\n","import VolatileBehaviour from './volatile';\nimport * as BEHAVIOURNAMES from '../../enums/behaviours';\n\n/**\n * This is the behaviour for brushing a region on the chart. It accepts a payload\n * which contains the x and y range of the data and other configuration. It will then\n * create a selection box from the range and select the points which fall within the range.\n */\nexport default class BrushBehaviour extends VolatileBehaviour {\n static formalName () {\n return BEHAVIOURNAMES.BRUSH;\n }\n}\n","import VolatileBehaviour from './volatile';\nimport { FILTER } from '../../enums/behaviours';\n\nexport default class FilterBehaviour extends VolatileBehaviour {\n static formalName () {\n return FILTER;\n }\n\n static mutates () {\n return true;\n }\n}\n","import GenericBehaviour from './generic';\nimport { getMergedSet } from '../../helper';\nimport * as SELECTION from '../../enums/selection';\n\nexport default class PersistentBehaviour extends GenericBehaviour {\n setSelectionSet (addSet, selectionSet) {\n if (addSet === null) {\n selectionSet.reset();\n } else if (addSet.length) {\n const propagationInf = this.firebolt.getPropagationInf();\n // new add set\n const existingAddSet = addSet.filter(d => selectionSet._set[d] === SELECTION.SELECTION_NEW_ENTRY\n || selectionSet._set[d] === SELECTION.SELECTION_OLD_ENTRY);\n if (propagationInf.propagate === false) {\n selectionSet.updateExit();\n const { entrySet } = selectionSet.getSets();\n selectionSet.reset(getMergedSet(entrySet));\n selectionSet.add(addSet);\n selectionSet.update(existingAddSet);\n } else {\n // existing add set\n if (existingAddSet.length) {\n selectionSet.updateExit();\n selectionSet.remove(existingAddSet);\n } else {\n selectionSet.updateEntry();\n selectionSet.add(addSet);\n }\n const { exitSet } = selectionSet.getSets();\n const mergedExitSet = getMergedSet(exitSet);\n const completeSetCount = selectionSet.getCompleteSet().length;\n if (mergedExitSet.length === completeSetCount) {\n selectionSet.reset();\n }\n }\n } else {\n selectionSet.remove(selectionSet.getCompleteSet());\n }\n\n return this;\n }\n}\n","import PersistentBehaviour from './persistent';\nimport { SELECT } from '../../enums/behaviours';\n\nexport default class SelectBehaviour extends PersistentBehaviour {\n static formalName () {\n return SELECT;\n }\n}\n\n","import { DimensionSubtype, FieldType } from 'muze-utils';\n/**\n * Gets the drag action configuration\n * @param {VisualUnit} instance instance of visual unit\n * @param {Object} config x y positions\n * @return {Object} Payload of behaviour\n*/\n/* istanbul ignore next */ const getDragActionConfig = (sourceInfo, config, fieldsConfig) => {\n if (!(sourceInfo.axes.x || sourceInfo.axes.y)) {\n return {\n criteria: null\n };\n }\n\n const axes = sourceInfo.axes;\n const xAxis = axes.x[0];\n const yAxis = axes.y[0];\n const axisFields = sourceInfo.fields;\n const xField = axisFields.x[0].getMembers()[0];\n const yField = axisFields.y[0].getMembers()[0];\n const xFieldType = fieldsConfig[xField].def.subtype ? fieldsConfig[xField].def.subtype :\n fieldsConfig[xField].def.type;\n const yFieldType = fieldsConfig[yField].def.subtype ? fieldsConfig[yField].def.subtype :\n fieldsConfig[yField].def.type;\n const dimensions = {};\n const stPos = config.startPos;\n const endPos = config.endPos;\n\n if (stPos.x === endPos.x && stPos.y === endPos.y) {\n return {\n criteria: null\n };\n }\n\n const dragDim = xFieldType === FieldType.MEASURE ? (yFieldType === FieldType.MEASURE ? ['x', 'y'] : ['y']) : ['x'];\n const criteria = {};\n const isXDimension = xFieldType === DimensionSubtype.CATEGORICAL;\n const isYDimension = yFieldType === DimensionSubtype.CATEGORICAL;\n const xRange = xAxis.constructor.type() === 'band' ? xAxis.scale().invertExtent(stPos.x, endPos.x) :\n xAxis.invert(stPos.x, endPos.x);\n const yRange = yAxis.constructor.type() === 'band' ? yAxis.scale().invertExtent(stPos.y, endPos.y) :\n yAxis.invert(stPos.y, endPos.y);\n const selectedDomains = {\n x: stPos.x === endPos.x ? [] : (isXDimension ? xRange : xRange.sort((a, b) => a - b)),\n y: stPos.y === endPos.y ? [] : (isYDimension ? yRange : yRange.sort((a, b) => a - b))\n };\n const rangeObj = {};\n\n if (dragDim.length === 2) {\n rangeObj[xField] = selectedDomains.x;\n rangeObj[yField] = selectedDomains.y;\n if (xField === yField) {\n const xdom = selectedDomains.x;\n const ydom = selectedDomains.y;\n const min = xdom[0] > ydom[0] ? ydom : xdom;\n const max = min === ydom ? xdom : ydom;\n if (min[1] < max[0]) {\n rangeObj[xField] = [];\n } else {\n rangeObj[xField] = [max[0], min[1] < max[1] ? min[1] : max[1]];\n }\n dimensions.x = [stPos.x, endPos.x];\n dimensions.y = [stPos.y, endPos.y];\n }\n } else {\n criteria[dragDim[0]] = selectedDomains[dragDim[0]] || [];\n\n if (dragDim[0] === 'x') {\n rangeObj[xField] = criteria.x;\n if (xFieldType === DimensionSubtype.CATEGORICAL) {\n dimensions.x = (config.snap && stPos.x !== endPos.x) ? xAxis.getNearestRange(stPos.x, endPos.x) :\n [stPos.x, endPos.x];\n }\n } else {\n rangeObj[yField] = criteria.y;\n if (yFieldType === DimensionSubtype.CATEGORICAL) {\n dimensions.y = (config.snap && stPos.y !== endPos.y) ? yAxis.getNearestRange(stPos.y, endPos.y) :\n [stPos.y, endPos.y];\n }\n }\n }\n\n return {\n criteria: rangeObj,\n dimensions\n };\n};\n\nexport default getDragActionConfig;\n","import {\n getEvent,\n getD3Drag\n } from 'muze-utils';\n\nimport getDragActionConfig from './drag-action-config';\n\n/**\n * Adds dragging action to the target element.\n * @param {VisualUnit} instance Instance of visual unit.\n * @param {SVGElement} targetEl Element on which brushing action is needed.\n * @param {Array} behaviours Array of behaviours\n */\nexport const attachDragEvent = (targetEl, behaviours, firebolt, touch) => {\n let startPos = {};\n let endPos = {};\n let drawingInf;\n\n const d3Drag = getD3Drag();\n let touchStart;\n targetEl.call(d3Drag().on('start', () => {\n const event = getEvent();\n startPos = {\n x: event.x,\n y: event.y\n };\n drawingInf = firebolt.context.getDrawingContext();\n touchStart = new Date().getTime();\n }).on('drag', () => {\n const event = getEvent();\n endPos = {\n x: event.x,\n y: event.y\n };\n if (touch && Math.abs(startPos.x - endPos.x) <= 5) {\n return;\n }\n endPos.x = Math.max(0, Math.min(endPos.x, drawingInf.width));\n endPos.y = Math.max(0, Math.min(endPos.y, drawingInf.height));\n\n const payload = getDragActionConfig(firebolt.context.getSourceInfo(), {\n startPos,\n endPos\n }, firebolt.context.data().getFieldsConfig());\n behaviours.forEach(beh => firebolt.dispatchBehaviour(beh, payload));\n }).on('end', () => {\n const event = getEvent();\n endPos = {\n x: event.x,\n y: event.y\n };\n const duration = new Date().getTime() - touchStart;\n\n if (touch && duration > 100 && Math.abs(startPos.x - endPos.x) <= 5) {\n return;\n }\n endPos.x = Math.max(0, Math.min(endPos.x, drawingInf.width));\n endPos.y = Math.max(0, Math.min(endPos.y, drawingInf.height));\n\n const payload = getDragActionConfig(firebolt.context.getSourceInfo(), {\n startPos,\n endPos,\n snap: true\n }, firebolt.context.data().getFieldsConfig());\n payload.dragEnd = true;\n behaviours.forEach(beh => firebolt.dispatchBehaviour(beh, payload));\n }));\n};\n\n","import { getClientPoint, getEvent } from 'muze-utils';\nimport { CONSOLIDATED, FRAGMENTED } from '../../enums/constants';\n\n/**\n * Adds mouse interactions to target element.\n * @param {Firebolt} instance instance of firebolt.\n * @param {SVGElement} targetEl Element on which the event listeners will be attached.\n * @param {Array} behaviours Array of behaviours\n */\n/* istanbul ignore next */ const hover = firebolt => (targetEl, behaviours) => {\n const dispatchBehaviour = function (args) {\n const event = getEvent();\n const context = firebolt.context;\n const tooltipConf = context.config().interaction.tooltip;\n const mode = tooltipConf.mode;\n const pos = getClientPoint(context.getDrawingContext().svgContainer, event);\n const nearestPoint = context.getNearestPoint(pos.x, pos.y, {\n getAllPoints: mode === CONSOLIDATED || mode === FRAGMENTED,\n data: args,\n event\n });\n const payload = {\n criteria: nearestPoint ? nearestPoint.id : null,\n showInPosition: nearestPoint.showInPosition,\n target: nearestPoint.target,\n position: pos,\n mode\n };\n\n behaviours.forEach(beh => firebolt.dispatchBehaviour(beh, payload));\n event.stopPropagation();\n };\n\n targetEl.on('mouseover', dispatchBehaviour)\n .on('mousemove', dispatchBehaviour)\n .on('mouseout', () => {\n behaviours.forEach(beh => firebolt.dispatchBehaviour(beh, {\n criteria: null\n }));\n });\n};\n\nexport default hover;\n","export const CLASSPREFIX = 'muze';\nexport const CONSOLIDATED = 'consolidated';\nexport const FRAGMENTED = 'fragmented';\n\n","import { getClientPoint } from 'muze-utils';\n\nexport const generatePayloadFromEvent = function (args, event, firebolt) {\n const context = firebolt.context;\n const pos = getClientPoint(context.getDrawingContext().svgContainer, event.touches ? event.touches[0] : event);\n const nearestPoint = context.getNearestPoint(pos.x, pos.y, {\n data: args,\n event\n });\n return {\n criteria: nearestPoint ? nearestPoint.id : null,\n showInPosition: nearestPoint.showInPosition,\n target: nearestPoint.target,\n position: pos\n };\n};\n","import { getEvent } from 'muze-utils';\nimport { generatePayloadFromEvent } from './helpers';\n\n/**\n * Adds mouse interactions to target element.\n * @param {VisualUnit} instance instance of visual unit.\n * @param {SVGElement} targetEl Element on which the event listeners will be attached.\n * @param {Array} behaviours Array of behaviours\n */\n/* istanbul ignore next */ const click = firebolt => (targetEl, behaviours) => {\n const dispatchBehaviour = function (args) {\n const event = getEvent();\n const payload = generatePayloadFromEvent(args, event, firebolt);\n behaviours.forEach(beh => firebolt.dispatchBehaviour(beh, payload));\n event.stopPropagation();\n };\n\n targetEl.on('click', dispatchBehaviour);\n};\nexport default click;\n","import drag from './drag';\nimport hover from './hover';\nimport { longtouch } from './longtouch';\nimport { touchdrag } from './touch-drag';\nimport * as ACTIONNAMES from '../../enums/actions';\nimport click from './click';\n\nexport const physicalActions = {\n [ACTIONNAMES.DRAG]: drag,\n [ACTIONNAMES.HOVER]: hover,\n [ACTIONNAMES.CLICK]: click,\n [ACTIONNAMES.LONGTOUCH]: longtouch,\n [ACTIONNAMES.TOUCHDRAG]: touchdrag\n};\n\n","import { attachDragEvent } from './helpers/drag-event';\n\n/**\n * Adds dragging action to the target element.\n * @param {VisualUnit} instance Instance of visual unit.\n * @param {SVGElement} targetEl Element on which brushing action is needed.\n * @param {Array} behaviours Array of behaviours\n */\n/* istanbul ignore next */ const drag = firebolt => (targetEl, behaviours) => {\n attachDragEvent(targetEl, behaviours, firebolt);\n};\n\nexport default drag;\n","/* global setTimeout */\nimport { getEvent } from 'muze-utils';\nimport { generatePayloadFromEvent } from './helpers';\n\n/**\n * Adds mouse interactions to target element.\n * @param {VisualUnit} instance instance of visual unit.\n * @param {SVGElement} targetEl Element on which the event listeners will be attached.\n * @param {Array} behaviours Array of behaviours\n */\nexport const longtouch = firebolt => (targetEl, behaviours) => {\n let event;\n let touchEnd;\n const dispatchBehaviour = function (args) {\n const payload = generatePayloadFromEvent(args, event, firebolt);\n behaviours.forEach(beh => firebolt.dispatchBehaviour(beh, payload));\n event.stopPropagation();\n };\n\n touchEnd = false;\n event = getEvent();\n targetEl.on('touchstart', (args) => {\n event = getEvent();\n touchEnd = false;\n setTimeout(() => {\n if (!touchEnd) {\n dispatchBehaviour(args);\n } else {\n behaviours.forEach(beh => firebolt.dispatchBehaviour(beh, {\n criteria: null\n }));\n }\n }, 100);\n }).on('touchend', () => {\n touchEnd = true;\n });\n};\n","import { attachDragEvent } from './helpers/drag-event';\n\n/**\n * Adds dragging action to the target element.\n * @param {VisualUnit} instance Instance of visual unit.\n * @param {SVGElement} targetEl Element on which brushing action is needed.\n * @param {Array} behaviours Array of behaviours\n */\nexport const touchdrag = firebolt => (targetEl, behaviours) => {\n attachDragEvent(targetEl, behaviours, firebolt, true);\n};\n\n","import { mergeRecursive, getUniqueId } from 'muze-utils';\n\nexport default class GenericSideEffect {\n constructor (firebolt) {\n this.firebolt = firebolt;\n this._enabled = true;\n this._strategy = 'default';\n this._config = {};\n this._id = getUniqueId();\n this._strategies = {};\n this.config(this.constructor.defaultConfig());\n }\n\n static defaultConfig () {\n return {};\n }\n\n static target () {\n return 'all';\n }\n\n static mutates () {\n return false;\n }\n\n config (...params) {\n if (params.length) {\n this._config = mergeRecursive(this._config, params[0]);\n return this;\n }\n return this._config;\n }\n\n disable () {\n this._enabled = false;\n return this;\n }\n\n enable () {\n this._enabled = true;\n return this;\n }\n\n isEnabled () {\n return this._enabled;\n }\n\n apply () {\n return this;\n }\n\n addStrategy (name, fn) {\n this._strategies[name] = fn;\n return this;\n }\n}\n","import GenericSideEffect from './generic';\n\nexport default class SurrogateSideEffect extends GenericSideEffect {\n applyInteractionStyle (set, config = {}, interactionType, apply) {\n const layers = this.firebolt.context.layers();\n layers.forEach(layer => layer.config().interactive !== false &&\n layer.applyInteractionStyle(interactionType, set.uids, apply));\n }\n}\n","import { makeElement } from 'muze-utils';\n\nimport GenericSideEffect from './generic';\n\nexport default class SpawnableSideEffect extends GenericSideEffect {\n createElement (container, elemType, data, className, callbacks) {\n return makeElement(container, elemType, data, className, callbacks);\n }\n\n drawingContext (...drawingContext) {\n if (drawingContext.length) {\n this._drawingContext = drawingContext[0];\n return this;\n }\n return this._drawingContext();\n }\n\n show () {\n return this;\n }\n\n hide () {\n return this;\n }\n}\n","import { selectElement } from 'muze-utils';\n\nexport const getBoxDimensionsFromPayload = (payload, axes, axisFields) => {\n let x1;\n let x2;\n let y1;\n let y2;\n let xRange;\n let yRange;\n let direction;\n const criteria = payload.criteria;\n const dimensions = payload.dimensions || {};\n const xDim = dimensions.x;\n const yDim = dimensions.y;\n\n if (criteria === null) {\n return null;\n }\n\n const xAxis = axes.x[0];\n const yAxis = axes.y[0];\n const xLinear = xAxis.constructor.type() === 'linear';\n const yLinear = yAxis.constructor.type() === 'linear';\n const xField = `${axisFields.x[0]}`;\n const yField = `${axisFields.y[0]}`;\n const xCriteria = criteria[xField];\n const yCriteria = criteria[yField];\n\n if (xCriteria && xCriteria[0] instanceof Array) {\n xRange = xCriteria[0];\n yRange = xCriteria[1];\n } else {\n xRange = xCriteria || [];\n yRange = yCriteria || [];\n }\n direction = xCriteria && yCriteria ? 'both' : (xCriteria ? 'vertical' : 'horizontal');\n if (xRange && xRange.length) {\n if ((yAxis.constructor.type() === 'band' && xLinear)) {\n x1 = x2 = undefined;\n direction = 'horizontal';\n } else {\n const domain = xAxis.domain();\n const bandScale = xAxis.constructor.type() === 'band';\n let x1Val;\n let x2Val;\n if (bandScale) {\n let x1DomainIndex = domain.indexOf(xRange[0]);\n let x2DomainIndex = domain.indexOf(xRange[xRange.length - 1]);\n [x1DomainIndex, x2DomainIndex] = [x1DomainIndex, x2DomainIndex].sort((a, b) => a - b);\n x1Val = domain[x1DomainIndex];\n x2Val = domain[x2DomainIndex];\n } else {\n x1Val = xRange[0];\n x2Val = xRange[xRange.length - 1];\n }\n x1 = xAxis.getScaleValue(x1Val);\n x2 = xAxis.getScaleValue(x2Val);\n x2 += bandScale ? xAxis.getUnitWidth() : 0;\n }\n } else {\n x1 = x2 = undefined;\n }\n if (yRange && yRange.length) {\n if ((xAxis.constructor.type() === 'band' && yLinear)) {\n y1 = y2 = undefined;\n direction = 'vertical';\n } else {\n const domain = yAxis.domain();\n const bandScale = yAxis.constructor.type() === 'band';\n let y1Val;\n let y2Val;\n if (bandScale) {\n let y1DomainIndex = domain.indexOf(yRange[0]);\n let y2DomainIndex = domain.indexOf(yRange[yRange.length - 1]);\n [y1DomainIndex, y2DomainIndex] = [y1DomainIndex, y2DomainIndex].sort(((a, b) => b - a));\n y1Val = domain[y1DomainIndex];\n y2Val = domain[y2DomainIndex];\n } else {\n y1Val = yRange[0];\n y2Val = yRange[yRange.length - 1];\n }\n y1 = yAxis.getScaleValue(y1Val);\n y2 = yAxis.getScaleValue(y2Val);\n y2 += yAxis.constructor.type() === 'band' ? yAxis.getUnitWidth() : 0;\n }\n } else {\n y1 = y2 = undefined;\n }\n\n if ((yLinear && xLinear) || !payload.dragEnd) {\n if (xDim) {\n [x1, x2] = xDim;\n }\n if (yDim) {\n [y1, y2] = yDim;\n }\n }\n\n return {\n dimension: {\n x1,\n x2,\n y1,\n y2\n },\n direction\n };\n};\n\nexport const changeVisibility = (context, sideEffectGroup, visible) => {\n const config = context.config();\n const className = config.defClassName;\n const classPrefix = config.classPrefix;\n selectElement(sideEffectGroup).selectAll(`.${classPrefix}-${className}`)\n .style('display', visible ? 'block' : 'none');\n};\n","import {\n getQualifiedClassName,\n selectElement,\n makeElement,\n isValidValue\n} from 'muze-utils';\nimport { CLASSPREFIX } from '../../enums/constants';\nimport './styles.scss';\nimport SpawnableSideEffect from '../spawnable';\nimport { selectionBoxDrag } from '../../actions/physical/selection-box-drag';\nimport { getBoxDimensionsFromPayload, changeVisibility } from './helper';\n\n/**\n * This class is used to create a selection box which is used by visual unit for brushing and\n * selection in the canvas.\n * @class SelectionBox\n */\nclass SelectionBox extends SpawnableSideEffect {\n /**\n * It returns the default configuration needed by selectionbox.\n * @return {Object} Default configuration of the selection box.\n */\n static defaultConfig () {\n return {\n defClassName: 'selection-box-group',\n className: '',\n classPrefix: CLASSPREFIX,\n box: {\n defClassName: 'selection-box',\n className: ''\n },\n transition: {\n duration: 200\n }\n };\n }\n\n static formalName () {\n return 'selectionBox';\n }\n\n /**\n * Draws the selectionbox with the specified dimensions.\n * @param {Object} dimension Dimensions of the selection box.\n * @param {number} dimension.x1 Starting x position\n * @param {number} dimension.x2 Ending x position\n * @param {number} dimension.y1 Starting y position\n * @param {number} dimension.y2 Ending y position\n * @param {Object} conf Configuration needed to draw the selection box\n * @param {number} unitWidth Width of the visual unit.\n * @param {number} unitHeight Height of the visual unit.\n */\n apply (selectionSet, payload) {\n let x;\n let y;\n let width;\n let height;\n const config = this._config;\n const boxConf = config.box;\n const firebolt = this.firebolt;\n const drawingInf = this.drawingContext();\n const mountPoint = drawingInf.sideEffectGroup;\n const unitWidth = drawingInf.width;\n const unitHeight = drawingInf.height;\n const classPrefix = config.classPrefix;\n const selectionGroupClassName = config.defClassName;\n\n if (payload.criteria === null) {\n this.hide(drawingInf);\n return this;\n }\n\n const sourceInf = firebolt.context.getSourceInfo();\n const { dimension, direction } = getBoxDimensionsFromPayload(payload, sourceInf.axes,\n sourceInf.fields);\n const transition = payload.dragEnd && config.transition;\n\n if (direction === 'both' || direction === 'vertical') {\n x = Math.min(dimension.x1, dimension.x2);\n width = Math.abs(dimension.x2 - dimension.x1);\n } else {\n x = 0;\n width = unitWidth;\n }\n if (direction === 'both' || direction === 'horizontal') {\n y = Math.min(dimension.y1, dimension.y2);\n height = Math.abs(dimension.y2 - dimension.y1);\n } else {\n height = unitHeight;\n y = 0;\n }\n this.show(drawingInf);\n // Create the data array for drawing the rectangle\n const points = [\n {\n x,\n y,\n width,\n height\n }\n ];\n // Create the container group for selection box.\n const selectionGroup = makeElement(selectElement(mountPoint), 'g', [1],\n `.${classPrefix}-${selectionGroupClassName}`);\n const sideEffect = this;\n const selection = selectionGroup.selectAll('rect').data(points);\n const selectionBox = selection.enter().append('rect')\n .each(function () {\n selectionBoxDrag(firebolt)(selectElement(this), ['brush'], sideEffect);\n })\n .merge(selection)\n .each(function (attrs) {\n let element = selectElement(this);\n transition && (element = element.transition().duration(transition.duration));\n for (const key in attrs) {\n if ({}.hasOwnProperty.call(attrs, key)) {\n isValidValue(attrs[key]) && element.attr(key, attrs[key]);\n }\n }\n });\n // Get the qualified class name for selection box rectangle\n const boxClassName = getQualifiedClassName(boxConf.defClassName, this._id, classPrefix);\n selectionBox.classed(boxClassName.join(' '), true);\n selectionBox.classed(boxConf.className, true);\n\n return this;\n }\n\n hide (drawingInf) {\n changeVisibility(this, drawingInf.sideEffectGroup, false);\n }\n\n show (drawingInf) {\n changeVisibility(this, drawingInf.sideEffectGroup, true);\n }\n}\n\nexport default SelectionBox;\n\n","import {\n getEvent,\n getD3Drag\n } from 'muze-utils';\n\nimport getDragActionConfig from './helpers/drag-action-config';\n\nexport const selectionBoxDrag = firebolt => (targetEl, behaviours) => {\n let subject;\n let drawingInf;\n const context = firebolt.context;\n const onDrag = (payload) => {\n behaviours.forEach(action => firebolt.dispatchBehaviour(action, payload));\n };\n const d3Drag = getD3Drag();\n\n targetEl.call(d3Drag().on('start', () => {\n const event = getEvent();\n drawingInf = context.getDrawingContext();\n subject = event.subject;\n }).on('drag', () => {\n const event = getEvent();\n subject.x += event.dx;\n subject.y += event.dy;\n const width = drawingInf.width;\n const height = drawingInf.height;\n const x = Math.min(width - subject.width, Math.max(subject.x, 0));\n const y = Math.min(height - subject.height, Math.max(subject.y, 0));\n const y2 = y + subject.height;\n const x2 = x + subject.width;\n\n if (x >= 0 && x2 <= width && y >= 0 && y2 <= height) {\n const payload = getDragActionConfig(context.getSourceInfo(), {\n startPos: {\n x,\n y\n },\n endPos: {\n x: x2,\n y: y2\n }\n }, context.data().getFieldsConfig());\n onDrag(payload);\n }\n }).on('end', () => {\n const width = drawingInf.width;\n const height = drawingInf.height;\n const x = Math.min(width - subject.width, Math.max(subject.x, 0));\n const y = Math.min(height - subject.height, Math.max(subject.y, 0));\n const y2 = y + subject.height;\n const x2 = x + subject.width;\n\n if (x >= 0 && x2 <= width && y >= 0 && y2 <= height) {\n const payload = getDragActionConfig(context.getSourceInfo(), {\n startPos: {\n x,\n y\n },\n endPos: {\n x: x2,\n y: y2\n },\n snap: true\n }, context.data().getFieldsConfig());\n payload.dragEnd = true;\n onDrag(payload);\n }\n }));\n};\n","export const CLASSPREFIX = 'muze';\nexport const ARROW_RIGHT = 'right';\nexport const ARROW_TOP = 'top';\nexport const ARROW_BOTTOM = 'bottom';\nexport const ARROW_LEFT = 'left';\nexport const TOOLTIP_LEFT = 'left';\nexport const TOOLTIP_RIGHT = 'right';\nexport const TOOLTIP_BOTTOM = 'bottom';\nexport const TOOLTIP_TOP = 'top';\nexport const INITIAL_STYLE = {\n position: 'absolute',\n width: 0,\n height: 0\n};\n","import { CLASSPREFIX } from './constants';\n\nexport const defaultConfig = {\n classPrefix: CLASSPREFIX,\n defClassName: 'tooltip-box',\n connectorClassName: 'tooltip-connectors',\n className: '',\n row: {\n margin: 0\n },\n content: {\n spacing: 5,\n iconContainerSize: 10,\n iconScale: 1,\n iconShape: 'circle',\n iconColor: '#ff0000',\n rowMargin: '0px',\n margin: 10,\n separator: ':',\n className: 'tooltip-content-container',\n parentClassName: 'tooltip-content-parent-container'\n },\n arrow: {\n size: 10,\n disabled: false,\n defClassName: 'tooltip-arrow',\n className: '',\n color: 'rgba(195,195,195,0.85)'\n }\n};\n","import { getQualifiedClassName } from 'muze-utils';\nimport { TOOLTIP_LEFT, TOOLTIP_RIGHT, ARROW_RIGHT, ARROW_LEFT, TOOLTIP_BOTTOM } from './constants';\n\nexport const getArrowPos = (orient, dim, measurement, config) => {\n let arrowPos;\n const { x, y, boxHeight, boxWidth } = measurement;\n const arrowDisabled = config.arrow.disabled;\n const arrowWidth = arrowDisabled ? 0 : config.arrow.size;\n\n if (orient === ARROW_LEFT || orient === ARROW_RIGHT) {\n let start = 0;\n let diff = boxHeight / 2;\n const plotBottom = dim.y + dim.height;\n const boxBottom = y + boxHeight;\n\n if (dim.y > y) {\n start = dim.y - y;\n diff = (plotBottom >= boxBottom ? (boxBottom - dim.y) : dim.height) / 2;\n } else if (boxBottom > plotBottom) {\n diff = Math.abs(y - (dim.y + dim.height)) / 2;\n }\n arrowPos = start + diff - arrowWidth / 2;\n } else {\n let start = 0;\n let diff = boxWidth / 2;\n const plotRight = dim.x + dim.width;\n const boxRight = x + boxWidth;\n\n if (dim.x > x) {\n start = dim.x - x;\n diff = (plotRight >= boxRight ? (boxRight - dim.x) : dim.width) / 2;\n } else if (boxRight > plotRight) {\n diff = Math.abs(x - (dim.x + dim.width)) / 2;\n }\n arrowPos = start + diff - arrowWidth / 2;\n }\n return arrowPos;\n};\n\n/**\n * Places the arrow in the specified arrow position. It also applies appropriate arrow\n * class name to the arrow element.\n * @param {string} position Left, bottom or right position of the arrow;\n * @param {number} arrowPos position of arrow in pixels\n * @return {Tooltip} Instance of tooltip.\n */\nexport const placeArrow = (context, position, arrowPos) => {\n const tooltipArrow = context._tooltipArrow;\n const tooltipBackground = context._tooltipBackground;\n const config = context._config;\n const classPrefix = config.classPrefix;\n const arrowConf = config.arrow;\n const className = getQualifiedClassName(arrowConf.defClassName, context._id, config.classPrefix);\n\n tooltipArrow.style('display', 'block');\n tooltipArrow.attr('class', `${className.join(' ')}`);\n if (position === TOOLTIP_LEFT || position === TOOLTIP_RIGHT) {\n tooltipArrow.style('top', `${arrowPos}px`);\n tooltipArrow.style('left', '');\n tooltipBackground.style('top', `${arrowPos}px`);\n tooltipBackground.style('left', '');\n } else {\n position === TOOLTIP_BOTTOM ? tooltipArrow.style('top', '100%') : tooltipArrow.style('top',\n `-${arrowConf.size}px`);\n tooltipArrow.style('left', `${arrowPos}px`);\n position === TOOLTIP_BOTTOM ? tooltipBackground.style('top', '100%') : tooltipBackground.style('top',\n `-${arrowConf.size + 3}px`);\n tooltipBackground.style('left', `${arrowPos}px`);\n }\n tooltipArrow.classed(`${classPrefix}-tooltip-arrow`, true);\n tooltipArrow.classed(`${classPrefix}-tooltip-arrow-${context._arrowOrientation}`, false);\n tooltipArrow.classed(`${classPrefix}-tooltip-arrow-${position}`, true);\n tooltipBackground.classed(`${classPrefix}-tooltip-background-arrow`, true);\n tooltipBackground.classed(`${classPrefix}-tooltip-background-arrow-${context._arrowOrientation}`, false);\n tooltipBackground.classed(`${classPrefix}-tooltip-background-arrow-${position}`, true);\n return this;\n};\n\nexport const reorderContainers = (parentContainer, className) => {\n parentContainer.selectAll(className).sort((a, b) => a - b);\n};\n","import {\n getClosestIndexOf,\n DateTimeFormatter,\n DimensionSubtype,\n FieldType\n} from 'muze-utils';\n\nconst timeFormats = {\n millisecond: '%A, %b %e, %H:%M:%S.%L',\n second: '%A, %b %e, %H:%M:%S',\n minute: '%A, %b %e, %H:%M',\n hour: '%A, %b %e, %H:%M',\n day: '%A, %b %e, %Y',\n month: '%B %Y',\n year: '%Y'\n};\nconst timeDurations = [\n ['millisecond', 'second', 'minute', 'hour', 'day', 'month', 'year'],\n [1, 1000, 60000, 3600000, 86400000, 2592000000, 31536000000]\n];\nconst getNearestInterval = (interval) => {\n const index = getClosestIndexOf(timeDurations[1], interval);\n return timeDurations[0][index];\n};\nconst defaultTooltipFormatters = (type, formatter) => {\n const formatters = {\n [DimensionSubtype.TEMPORAL]: (value, interval) => {\n const nearestInterval = getNearestInterval(interval);\n return DateTimeFormatter.formatAs(value, timeFormats[nearestInterval]);\n },\n [FieldType.MEASURE]: value => formatter(value ? value.toFixed(2) : value),\n [FieldType.DIMENSION]: value => value\n };\n return formatters[type];\n};\n\nconst getTabularData = (data, schema, fieldspace, timeDiffs) => {\n const rows = [];\n rows.push(schema.map(d => d.name));\n data.forEach((d) => {\n const row = [];\n schema.forEach((fieldObj, i) => {\n const interval = fieldObj.subtype === DimensionSubtype.TEMPORAL ? timeDiffs[fieldObj.name] : 0;\n const numberFormat = fieldObj.type === FieldType.MEASURE && fieldspace.fields[i]._ref.numberFormat();\n const formatterFn = defaultTooltipFormatters(fieldObj.subtype || fieldObj.type, numberFormat);\n const value = formatterFn(d[i], interval);\n row.push(value);\n });\n rows.push(row);\n });\n return rows;\n};\n\nexport const buildTooltipData = (dataModel, config = {}, context) => {\n let fieldValues = [];\n const dataObj = dataModel.getData();\n const data = dataObj.data;\n const schema = dataObj.schema;\n const formatters = config.formatters;\n const separator = config.separator;\n const fieldsConfig = dataModel.getFieldsConfig();\n const fieldspace = dataModel.getFieldspace();\n const fieldsObj = fieldspace.fieldsObj();\n const dimensionMeasureMap = context.dimensionMeasureMap;\n const axes = context.axes;\n const detailFields = context.detailFields || [];\n const dimensions = schema.filter(d => d.type === FieldType.DIMENSION);\n const measures = schema.filter(d => d.type === FieldType.MEASURE);\n // const containsRetinalField = schema.find(d => d.name in dimensionMeasureMap);\n const containsDetailField = schema.find(d => detailFields.indexOf(d.name) !== -1);\n const dataLen = data.length;\n const getRowContent = (field, type) => {\n let value;\n let formattedValue;\n let measureIndex;\n const values = [];\n const index = fieldsConfig[field].index;\n const interval = fieldsConfig[field].def.subtype === DimensionSubtype.TEMPORAL ?\n fieldsObj[field].getMinDiff() : 0;\n const formatterFn = (formatters && formatters[field]) || defaultTooltipFormatters(type, val => val);\n\n if (value !== null) {\n let uniqueVals = type === FieldType.MEASURE ? data.map(d => d[index]) :\n [...new Set(data.map(d => d[index]))];\n uniqueVals = uniqueVals.filter(d => d !== '');\n const colorAxis = axes.color[0];\n const shapeAxis = axes.shape[0];\n const sizeAxis = axes.size[0];\n const isRetinalField = (colorAxis || shapeAxis || sizeAxis) && dataLen > 1 &&\n type !== FieldType.MEASURE;\n\n uniqueVals.forEach((val, i) => {\n let key;\n const associatedMeasures = dimensionMeasureMap[field];\n\n if (associatedMeasures && associatedMeasures.length && dataLen > 1) {\n key = val;\n let icon = {\n value: ''\n };\n\n if (isRetinalField) {\n icon = {\n type: 'icon',\n color: colorAxis.getColor(val),\n shape: shapeAxis.getShape(val),\n size: sizeAxis.getSize(val) * config.iconScale\n };\n }\n if (associatedMeasures.length > 1) {\n values.push([icon, `${key}`]);\n associatedMeasures.forEach((measure) => {\n measureIndex = fieldsConfig[measure].index;\n value = data[i][measureIndex];\n formattedValue = defaultTooltipFormatters('measure',\n fieldspace.fields[measureIndex]._ref.numberFormat())(value, interval);\n values.push([{\n value: `${measure}${separator}`,\n style: {\n 'margin-left': `${config.margin}px}`\n },\n className: `${config.classPrefix}-tooltip-key`\n }, {\n value: `${formattedValue}`,\n className: `${config.classPrefix}-tooltip-value`\n }]);\n });\n } else {\n measureIndex = fieldsConfig[associatedMeasures[0]].index;\n value = data[i][measureIndex];\n formattedValue = defaultTooltipFormatters('measure',\n fieldspace.fields[measureIndex]._ref.numberFormat())(value, interval);\n values.push([icon, {\n value: `${key}${separator}`,\n className: `${config.classPrefix}-tooltip-key`\n }, {\n value: `${formattedValue}`,\n className: `${config.classPrefix}-tooltip-value`\n }]);\n }\n } else {\n key = field;\n value = val;\n formattedValue = formatterFn(value, interval);\n values.push([{\n value: `${key}${separator}`,\n className: `${config.classPrefix}-tooltip-key`\n }, {\n value: `${formattedValue}`,\n className: `${config.classPrefix}-tooltip-value`\n }]);\n }\n });\n }\n return values;\n };\n let displayFormat = 'keyValue';\n\n if (dataLen > 1 && containsDetailField) {\n fieldValues = getTabularData(data, schema, fieldspace, context.timeDiffs);\n displayFormat = 'table';\n } else {\n dimensions.forEach((item) => {\n const type = item.subtype ? item.subtype : item.type;\n fieldValues = [...fieldValues, ...getRowContent(item.name, type)];\n });\n\n const allMeasures = [...new Set(...Object.values(dimensionMeasureMap))];\n const filteredMeasures = dataLen > 1 ? measures.filter(d => allMeasures.indexOf(d.name) === -1)\n : measures;\n\n filteredMeasures.forEach((item) => {\n const type = item.subtype ? item.subtype : item.type;\n fieldValues = [...fieldValues, ...getRowContent(item.name, type)];\n });\n }\n\n return {\n content: fieldValues,\n displayFormat\n };\n};\n\n/**\n * This contains the strategy methods for showing tooltip in the chart.\n * @param {VisualUnit} context Attached instance.\n */\nexport const strategy = {\n keyValue: (data, config, context) => {\n const values = buildTooltipData(data, config, context);\n return values;\n }\n};\n\nexport const DEFAULT_STRATEGY = 'keyValue';\n","import {\n selectElement,\n mergeRecursive,\n makeElement,\n setAttrs,\n setStyles,\n getSymbol,\n isSimpleObject\n} from 'muze-utils';\nimport { DEFAULT_STRATEGY, strategy } from './strategy';\nimport { defaultConfig } from './default-config';\n\n/**\n * This class is used to manage the content of tooltip.\n */\nexport default class Content {\n /**\n * Creates an instance of content.\n */\n constructor () {\n this._model = null;\n this._strategy = DEFAULT_STRATEGY;\n this._formatter = null;\n this._config = this.constructor.defaultConfig();\n }\n /**\n * Returns the default configuration of tooltip\n * @return {Object} Configuration of tooltip.\n */\n static defaultConfig () {\n const config = defaultConfig.content;\n config.classPrefix = defaultConfig.classPrefix;\n return config;\n }\n\n config (...c) {\n if (c.length > 0) {\n this._config = mergeRecursive(this._config, c[0]);\n return this;\n }\n return this._config;\n }\n\n /**\n * Update model. The format contains presentation strategy which determines how to show the content.\n * If no strategy is mentioned then default is to show key value pair\n */\n update (item) {\n this._model = item.model;\n this._strategy = item.strategy !== undefined ? item.strategy : DEFAULT_STRATEGY;\n this._formatter = item.formatter;\n return this;\n }\n\n context (ctx) {\n this._context = ctx;\n return this;\n }\n\n render (mount) {\n let data;\n const config = this._config;\n const iconContainerSize = config.iconContainerSize;\n const formatter = this._formatter;\n const rowMargin = config.rowMargin;\n const model = this._model;\n\n this._mount = mount;\n if (model instanceof Array) {\n data = model;\n } else {\n data = formatter instanceof Function ? formatter(this._model, this._context) :\n strategy[this._strategy](this._model, this.config(), this._context);\n }\n\n if (data instanceof Function) {\n mount.html(data());\n } else {\n let content = data;\n let displayFormat = 'default';\n\n if (isSimpleObject(data)) {\n content = data.content;\n displayFormat = data.displayFormat;\n }\n\n const body = makeElement(mount, 'div', [displayFormat], `${config.classPrefix}-tooltip-content`, {},\n d => d);\n\n if (displayFormat === 'table') {\n const table = makeElement(body, 'table', [1], `${config.classPrefix}-tooltip-table`);\n const tbody = makeElement(table, 'tbody', [1], `${config.classPrefix}-tooltip-table-tbody`);\n const rows = makeElement(tbody, 'tr', content, `${config.classPrefix}-tooltip-table-row`);\n rows.each(function (d, i) {\n selectElement(this).classed(`${config.classPrefix}-tooltip-table-row-${i}`, true);\n });\n const cells = makeElement(rows, 'td', d => d, `${config.classPrefix}-tooltip-table-cell`);\n cells.each(function (d) {\n selectElement(this).html(d);\n });\n } else {\n const rows = makeElement(body, 'div', content, `${config.classPrefix}-tooltip-row`);\n const cells = makeElement(rows, 'span', d => d, `${config.classPrefix}-tooltip-content`);\n cells.attr('class', `${config.classPrefix}-tooltip-content`);\n setStyles(rows, {\n margin: rowMargin\n });\n setStyles(cells, {\n display: 'inline-block',\n 'margin-right': `${config.spacing}px`\n });\n\n cells.each(function (d) {\n const el = selectElement(this);\n el.html('');\n if (d instanceof Object) {\n if (d.type === 'icon') {\n const svg = makeElement(el, 'svg', [1]);\n const path = makeElement(svg, 'path', [1]);\n const shape = d.shape instanceof Function ? d.shape : getSymbol(d.shape);\n\n setAttrs(svg, {\n x: 0,\n y: 0,\n width: iconContainerSize,\n height: iconContainerSize\n });\n setAttrs(path, {\n d: shape.size(d.size)(),\n transform: `translate(${iconContainerSize / 2}, ${iconContainerSize / 2})`\n });\n setStyles(path, {\n fill: d.color\n });\n setStyles(svg, {\n width: `${iconContainerSize}px`,\n height: `${iconContainerSize}px`\n });\n } else {\n el.html(d.value);\n d.className && el.classed(d.className, true);\n setStyles(el, d.style);\n }\n } else {\n el.html(d);\n }\n });\n }\n }\n return this;\n }\n\n clear () {\n this._model = null;\n return this;\n }\n}\n","import {\n mergeRecursive,\n getQualifiedClassName,\n getUniqueId,\n selectElement,\n setStyles,\n makeElement\n} from 'muze-utils';\nimport { ARROW_BOTTOM, ARROW_LEFT, ARROW_RIGHT, TOOLTIP_LEFT, TOOLTIP_RIGHT, TOOLTIP_BOTTOM, TOOLTIP_TOP,\n INITIAL_STYLE } from './constants';\nimport { defaultConfig } from './default-config';\nimport { getArrowPos, placeArrow, reorderContainers } from './helper';\nimport './styles.scss';\nimport Content from './content';\n\n/**\n * This component is responsible for creating a tooltip element. It appends the tooltip\n * in the body element.\n * @class Tooltip\n */\nexport default class Tooltip {\n /**\n * Initializes the tooltip with the container element and configuration\n * @param {HTMLElement} container container where the tooltip will be mounted.\n * @param {string} className Class name of the tooltip.\n */\n constructor (htmlContainer, svgContainer) {\n let connectorContainer = svgContainer;\n this._id = getUniqueId();\n this._config = {};\n this.config({});\n const tooltipConf = this._config;\n const classPrefix = tooltipConf.classPrefix;\n const contentClass = tooltipConf.content.parentClassName;\n const container = makeElement(htmlContainer, 'div', [1], `${classPrefix}-tooltip-container`);\n this._container = container;\n this._tooltipContainer = container.append('div').style('position', 'absolute');\n this._contentContainer = this._tooltipContainer.append('div').attr('class', `${classPrefix}-${contentClass}`);\n this._tooltipBackground = this._tooltipContainer.append('div').style('position', 'relative');\n this._tooltipArrow = this._tooltipContainer.append('div');\n\n if (!svgContainer) {\n connectorContainer = htmlContainer.append('svg').style('pointer-events', 'none');\n }\n this._contents = {};\n this._tooltipConnectorContainer = selectElement(connectorContainer)\n .append('g')\n .attr('class', `${tooltipConf.classPrefix}-${tooltipConf.connectorClassName}`);\n const id = this._id;\n const defClassName = tooltipConf.defClassName;\n const qualifiedClassName = getQualifiedClassName(defClassName, id, tooltipConf.classPrefix);\n\n setStyles(this._tooltipArrow, INITIAL_STYLE);\n setStyles(this._tooltipBackground, INITIAL_STYLE);\n this.addClass(qualifiedClassName.join(' '));\n this.addClass(tooltipConf.className);\n this.hide();\n }\n\n /**\n * Sets the configuration of tooltip.\n * @param {Object} config Configuration of tooltip\n * @return {Tooltip} Instance of tooltip\n */\n config (...config) {\n if (config.length > 0) {\n const defConf = mergeRecursive({}, this.constructor.defaultConfig());\n this._config = mergeRecursive(defConf, config[0]);\n return this;\n }\n return this._config;\n }\n\n /**\n * Returns the default configuration of tooltip\n * @return {Object} Configuration of tooltip.\n */\n static defaultConfig () {\n return defaultConfig;\n }\n /**\n * Sets the class name of tooltip\n * @param {string} className tooltip class name\n * @return {Tooltip} Instance of tooltip.\n */\n addClass (className) {\n this._tooltipContainer.classed(className, true);\n return this;\n }\n\n context (...ctx) {\n if (ctx.length) {\n this._context = ctx[0];\n return this;\n }\n return this._context;\n }\n\n content (name, data, contentConfig = {}) {\n const config = this.config();\n const { classPrefix } = config;\n const contentClass = config.content.className;\n const formatter = config.formatter;\n const className = contentConfig.className || `${classPrefix}-${contentClass}-${name}`;\n const content = this._contents[name] = this._contents[name] || new Content();\n const container = makeElement(this._contentContainer, 'div', [contentConfig.order], className);\n container.attr('class', `${classPrefix}-${contentClass} ${className}`);\n reorderContainers(this._contentContainer, `.${classPrefix}-${contentClass}`);\n const contentConf = config.content;\n contentConfig.classPrefix = this._config.classPrefix;\n content.config(contentConf);\n\n if (data === null) {\n content.clear();\n container.remove();\n delete this._contents[name];\n } else {\n content.update({\n model: data,\n formatter: contentConfig.formatter || formatter\n });\n content.context(this._context);\n content.render(container);\n }\n\n if (!Object.keys(this._contents).length) {\n this.hide();\n }\n return this;\n }\n\n getContents () {\n return Object.values(this._contents);\n }\n\n /**\n * Positions the tooltip at the given x and y position.\n * @param {number} x x position\n * @param {number} y y position\n * @return {Tooltip} Instance of tooltip.\n */\n position (x, y, conf = {}) {\n if (!Object.keys(this._contents).length) {\n this.hide();\n return this;\n }\n this.show();\n const target = this._target;\n const repositionArrow = conf.repositionArrow;\n\n if (target && repositionArrow) {\n const node = this._tooltipContainer.node();\n const config = this._config;\n const arrowDisabled = config.arrow.disabled;\n const arrowWidth = arrowDisabled ? 0 : config.arrow.size;\n const arrowOrient = this._arrowOrientation;\n const outsidePlot = arrowOrient === ARROW_LEFT || arrowOrient === ARROW_RIGHT ?\n (y + node.offsetHeight - arrowWidth) < target.y || y > (target.y + target.height) :\n (x + node.offsetWidth - arrowWidth) < target.x || x > (target.x + target.width);\n\n if (!arrowDisabled) {\n if (outsidePlot) {\n let path;\n this._tooltipArrow.style('display', 'none');\n this._tooltipBackground.style('display', 'none');\n this._tooltipConnectorContainer.style('display', 'block');\n const connector = this._tooltipConnectorContainer.selectAll('path').data([1]);\n const enter = connector.enter().append('path');\n if (arrowOrient === ARROW_LEFT) {\n path = `M ${x} ${y + node.offsetHeight / 2} L ${target.x + target.width}`\n + ` ${target.y + target.height / 2}`;\n } else if (arrowOrient === ARROW_RIGHT) {\n path = `M ${x + node.offsetWidth} ${y + node.offsetHeight / 2}`\n + ` L ${target.x} ${target.y + target.height / 2}`;\n } else if (arrowOrient === ARROW_BOTTOM) {\n path = `M ${x + node.offsetWidth / 2} ${y + node.offsetHeight}`\n + ` L ${target.x + target.width / 2} ${target.y}`;\n }\n enter.merge(connector).attr('d', path).style('display', 'block');\n } else {\n const arrowPos = getArrowPos(arrowOrient, target, {\n x,\n y,\n boxHeight: node.offsetHeight,\n boxWidth: node.offsetWidth\n }, this._config);\n\n placeArrow(this, this._arrowOrientation, arrowPos);\n this._tooltipConnectorContainer.style('display', 'none');\n }\n }\n }\n\n const offset = this._offset || {\n x: 0,\n y: 0\n };\n this._tooltipContainer.style('left', `${offset.x + x}px`).style('top',\n `${offset.y + y}px`);\n\n return this;\n }\n\n /**\n * Positions the tooltip relative to a rectangular box. It takes care of tooltip overflowing the\n * boundaries.\n * @param {Object} dim Dimensions of the plot.\n */\n positionRelativeTo (dim, tooltipConf = {}) {\n let obj;\n let orientation = tooltipConf.orientation;\n this.show();\n if (!dim) {\n this.hide();\n return this;\n }\n\n const extent = this._extent;\n const node = this._tooltipContainer.node();\n\n this._tooltipContainer.style('top', '0px')\n .style('left', '0px');\n const offsetWidth = node.offsetWidth + 2;\n const offsetHeight = node.offsetHeight + 2;\n const config = this._config;\n const offset = this._offset;\n const arrowDisabled = config.arrow.disabled;\n const arrowSize = arrowDisabled ? 0 : config.arrow.size;\n const draw = tooltipConf.draw !== undefined ? tooltipConf.draw : true;\n const topSpace = dim.y;\n // When there is no space in right\n const dimX = dim.x + dim.width + offset.x;\n const rightSpace = extent.width - dimX;\n const leftSpace = dim.x + offset.x - extent.x;\n const positionTop = topSpace > (offsetHeight + arrowSize);\n const positionRight = rightSpace >= offsetWidth + arrowSize;\n const positionLeft = leftSpace >= offsetWidth + arrowSize;\n\n const positionHorizontal = () => {\n let position;\n let x = dim.x + dim.width;\n let y = dim.y;\n\n if (positionRight) {\n position = TOOLTIP_LEFT;\n x += arrowSize;\n } else if (positionLeft) {\n x = dim.x - offsetWidth;\n position = TOOLTIP_RIGHT;\n x -= arrowSize;\n } else {\n position = 'left';\n x += arrowSize;\n }\n if (dim.height < offsetHeight) {\n y = Math.max(0, dim.y + dim.height / 2 - offsetHeight / 2);\n }\n\n const arrowPos = getArrowPos(position, dim, {\n x,\n y,\n boxHeight: offsetHeight,\n boxWidth: offsetWidth\n }, this._config);\n\n return {\n position,\n arrowPos,\n x,\n y\n };\n };\n\n const positionVertical = () => {\n let position;\n let y;\n // Position tooltip at the center of plot\n let x = dim.x - offsetWidth / 2 + dim.width / 2;\n\n // Overflows to the right\n if ((extent.width - (dim.x + offset.x)) < offsetWidth) {\n x = extent.width - offsetWidth - offset.x;\n } else if ((x + offset.x) < extent.x) { // Overflows to the left\n x = extent.x;\n }\n\n if (positionTop) {\n y = dim.y - offsetHeight - arrowSize;\n position = TOOLTIP_BOTTOM;\n } else {\n y = dim.y + dim.height + arrowSize;\n position = TOOLTIP_TOP;\n }\n\n const arrowPos = getArrowPos(position, dim, {\n x,\n y,\n boxHeight: offsetHeight,\n boxWidth: offsetWidth\n }, this._config);\n\n return {\n position,\n arrowPos,\n x,\n y\n };\n };\n\n this._target = dim;\n if (!orientation) {\n if (positionTop) {\n orientation = 'vertical';\n } else if (positionRight || positionLeft) {\n orientation = 'horizontal';\n } else {\n orientation = 'vertical';\n }\n }\n\n if (orientation === 'horizontal') {\n obj = positionHorizontal();\n } else if (orientation === 'vertical') {\n obj = positionVertical();\n }\n\n this._position = {\n x: obj.x,\n y: obj.y\n };\n\n this._arrowPos = obj.arrowPos;\n if (!arrowDisabled) {\n placeArrow(this, obj.position, obj.arrowPos);\n } else {\n this._tooltipArrow.style('display', 'none');\n this._tooltipBackground.style('display', 'none');\n }\n this._arrowOrientation = obj.position;\n draw && this.position(obj.x, obj.y);\n return this;\n }\n\n /**\n * Hides the tooltip element.\n * @return {Tooltip} Instance of tooltip.\n */\n hide () {\n this._tooltipContainer.style('display', 'none');\n this._tooltipConnectorContainer.style('display', 'none');\n return this;\n }\n\n /**\n * Shows the tooltip element.\n * @return {Tooltip} Instance of tooltip.\n */\n show () {\n this._tooltipContainer.style('display', 'block');\n return this;\n }\n\n extent (extent) {\n this._extent = extent;\n return this;\n }\n\n offset (offset) {\n this._offset = offset;\n return this;\n }\n\n remove () {\n this._tooltipContainer.remove();\n this._tooltipBackground.remove();\n this._tooltipConnectorContainer.remove();\n return this;\n }\n}\n","import { FieldType } from 'muze-utils';\n\nexport const strategies = {\n showSelectedItems: (dm) => {\n const dataObj = dm.getData();\n const measures = dataObj.schema.filter(d => d.type === FieldType.MEASURE);\n const aggregatedModel = dm.groupBy([''], measures.reduce((acc, v) => {\n acc[v.name] = v.defAggFn === 'count' ? 'sum' : v.defAggFn;\n return acc;\n }, {}));\n const fieldsObj = dm.getFieldspace().fieldsObj();\n const fieldsConf = aggregatedModel.getFieldsConfig();\n let values = [{\n value: `${dataObj.data.length}`,\n style: {\n 'font-weight': 'bold'\n }\n }, 'Items Selected'];\n const measureNames = measures.map(d => d.name);\n if (measureNames.length) {\n values = [...values, ...[`(${fieldsObj[measureNames[0]].defAggFn().toUpperCase()}) ${measureNames[0]}`,\n {\n value: `${aggregatedModel.getData().data[0][fieldsConf[measureNames[0]].index].toFixed(2)}`,\n style: {\n 'font-weight': 'bold'\n }\n }]];\n }\n return [values];\n }\n};\n","import { Tooltip as TooltipRenderer } from '@chartshq/muze-tooltip';\nimport { FieldType } from 'muze-utils';\nimport { spaceOutBoxes } from '../helper';\nimport { strategies } from './strategies';\nimport { FRAGMENTED } from '../../enums/constants';\nimport SpawnableSideEffect from '../spawnable';\n\nimport './styles.scss';\n\nexport default class Tooltip extends SpawnableSideEffect {\n constructor (...params) {\n super(...params);\n this._tooltips = {};\n this._strategies = strategies;\n this._strategy = 'default';\n }\n\n static defaultConfig () {\n return {\n padding: 5,\n offset: {\n x: 0,\n y: 0\n }\n };\n }\n\n static formalName () {\n return 'tooltip';\n }\n\n apply (selectionSet, payload, options = {}) {\n let totalHeight = 0;\n let totalWidth = 0;\n const dataModel = selectionSet.mergedEnter.model;\n const context = this.firebolt.context;\n const drawingInf = this.drawingContext();\n if ((dataModel.isEmpty() || payload.criteria === null) || selectionSet.isSourceFieldPresent === false) {\n this.hide(options, null);\n return this;\n }\n\n const tooltips = this._tooltips;\n const config = this.config();\n const boundBox = {\n width: drawingInf.width,\n height: drawingInf.height\n };\n const showInPosition = payload.showInPosition;\n const pad = config.padding;\n const dataModels = [];\n const fragmented = config.mode === FRAGMENTED;\n const sourceInf = context.getSourceInfo();\n const fields = sourceInf.fields;\n const xFieldDim = fields.x[0] ? fields.x[0].type() === FieldType.DIMENSION : false;\n const showVertically = !!xFieldDim;\n const tooltipPos = payload.position;\n const boxes = [];\n const enter = {};\n const uids = dataModel.getData().uids;\n if (fragmented) {\n dataModels.push(...uids.map(d => dataModel.select((fieldsArr, i) => i === d, {\n saveChild: false\n })));\n } else {\n dataModels.push(dataModel);\n }\n\n let target = payload.target;\n let targetFields = [];\n if (target) {\n targetFields = target[0] || [];\n const sourceFields = payload.sourceFields;\n const indices = [];\n for (let i = 0, len = targetFields.length; i < len; i++) {\n if (sourceFields.indexOf(targetFields[i]) !== -1) {\n indices.push(i);\n }\n }\n target = target.map(d => d.filter((v, i) => indices.indexOf(i) !== -1));\n }\n\n const plotDimensions = context.getPlotPointsFromIdentifiers(target || payload.criteria, {\n getBBox: true\n });\n\n // Show tooltip for each datamodel\n for (let i = 0; i < dataModels.length; i++) {\n let plotDim = plotDimensions[i];\n if (fragmented) {\n const dimensions = dataModels[i].getData().schema.filter(d => d.type === FieldType.DIMENSION)\n .map(d => d.name);\n plotDim = context.getPlotPointsFromIdentifiers(dataModels[i].project(dimensions), { getBBox: true });\n plotDim = plotDim && plotDim[0];\n }\n\n let dt = dataModels[i];\n if (config.fields) {\n dt = dt.project(config.fields, {\n saveChild: false\n });\n }\n if (config.dataTransform) {\n dt = config.dataTransform(dt, i);\n }\n\n enter[i] = true;\n const layoutContainer = drawingInf.parentContainer;\n const layoutBoundBox = layoutContainer.getBoundingClientRect();\n const unitBoundBox = drawingInf.htmlContainer.getBoundingClientRect();\n\n const offsetLeft = unitBoundBox.left - layoutBoundBox.left;\n const offsetTop = unitBoundBox.top - layoutBoundBox.top;\n const tooltipInst = tooltips[i] = tooltips[i] || new TooltipRenderer(layoutContainer,\n drawingInf.svgContainer);\n\n sourceInf.payload = payload;\n sourceInf.firebolt = this.firebolt;\n sourceInf.detailFields = context.detailFields();\n sourceInf.timeDiffs = context.timeDiffsByField();\n tooltipInst.context(sourceInf);\n const strategy = strategies[options.strategy];\n tooltipInst.content(options.strategy || this._strategy, dt, {\n formatter: strategy,\n order: options.order\n })\n .config(this.config())\n .extent({\n x: 0,\n y: 0,\n width: layoutBoundBox.width,\n height: layoutBoundBox.height\n })\n .offset({\n x: offsetLeft + (config.offset.x || 0),\n y: offsetTop + (config.offset.y || 0)\n });\n\n if (showInPosition) {\n tooltipInst.position(tooltipPos.x + pad, tooltipPos.y + pad);\n } else if (plotDim) {\n tooltipInst.positionRelativeTo({\n x: plotDim.x,\n y: plotDim.y,\n width: plotDim.width || 0,\n height: plotDim.height || 0\n }, {\n orientation: fragmented ?\n (showVertically ? 'horizontal' : 'vertical') : undefined\n });\n } else {\n tooltipInst.hide();\n break;\n }\n\n if (fragmented) {\n const position = tooltipInst._position;\n const tooltipBoundBox = tooltipInst._tooltipContainer.node().getBoundingClientRect();\n\n totalHeight += tooltipBoundBox.height + pad;\n totalWidth += tooltipBoundBox.width + pad;\n if (showVertically ? totalHeight > drawingInf.height : totalWidth > drawingInf.width) {\n break;\n }\n boxes.push({\n x: position.x,\n y: position.y,\n width: tooltipBoundBox.width,\n height: tooltipBoundBox.height,\n tooltip: tooltipInst\n });\n }\n }\n\n for (const key in tooltips) {\n if (!enter[key]) {\n const tooltip = tooltips[key];\n tooltip.content(payload.action, null);\n if (!tooltip.getContents().length) {\n tooltip.remove();\n delete tooltips[key];\n }\n }\n }\n if (fragmented) {\n spaceOutBoxes(boxes, boundBox, showVertically);\n boxes.forEach(box => box.tooltip.position(box.x, box.y, {\n repositionArrow: true\n }));\n }\n return this;\n }\n\n hide (options) {\n const tooltips = this._tooltips;\n for (const key in tooltips) {\n if ({}.hasOwnProperty.call(tooltips, key)) {\n const strategy = options.strategy || this._strategy;\n tooltips[key].content(strategy, null);\n tooltips[key].hide();\n }\n }\n }\n}\n","export const spaceOutBoxes = (boxes, extent, showVertically) => {\n let y;\n let height;\n let x;\n let width;\n let i;\n const pad = 5;\n const len = boxes.length;\n const spaceOutIfOverlap = (firstBox, secondBox, opposite) => {\n x = firstBox.x;\n width = firstBox.width;\n y = firstBox.y;\n height = firstBox.height;\n const bottom = y + height;\n const right = x + width;\n\n if (showVertically) {\n if (opposite ? y < (secondBox.y + secondBox.height) : bottom > secondBox.y) {\n secondBox.y = opposite ? firstBox.y - secondBox.height - pad :\n bottom + pad;\n }\n } else if (opposite ? x < (secondBox.x + secondBox.width) : right > secondBox.x) {\n secondBox.x = opposite ? firstBox.x - secondBox.width - pad :\n right + pad;\n }\n };\n\n boxes.sort((a, b) => (showVertically ? a.y - b.y : a.x - b.x));\n i = 0;\n\n for (i = 0; i < len - 1; i++) {\n spaceOutIfOverlap(boxes[i], boxes[i + 1]);\n }\n\n if ((boxes[i].y + boxes[i].height) > extent.height ||\n (boxes[i].x + boxes[i].width) > extent.width) {\n if (showVertically) {\n boxes[i].y -= (boxes[i].height + boxes[i].y) - extent.height;\n } else {\n boxes[i].x -= (boxes[i].width + boxes[i].x) - extent.width;\n }\n for (i = len - 1; i > 0; i--) {\n spaceOutIfOverlap(boxes[i], boxes[i - 1], true);\n }\n }\n return boxes;\n}\n;\n","import { selectElement, FieldType } from 'muze-utils';\n\nimport './styles.scss';\nimport { CLASSPREFIX } from '../../enums/constants';\nimport SpawnableSideEffect from '../spawnable';\n\nexport default class Crossline extends SpawnableSideEffect {\n static defaultConfig () {\n return {\n className: `${CLASSPREFIX}-crossline-group`,\n bandClass: `${CLASSPREFIX}-crossband`,\n lineClass: `${CLASSPREFIX}-crossline`\n };\n }\n\n static formalName () {\n return 'crossline';\n }\n\n apply (selectionSet, payload) {\n let height;\n let bandWidth;\n let px;\n let width;\n const {\n className,\n bandClass,\n lineClass\n } = this.config();\n const dataModel = selectionSet.mergedEnter.model;\n const drawingInf = this.drawingContext();\n if (payload.criteria && dataModel && dataModel.isEmpty()) {\n return this;\n }\n if (payload.criteria === null || !dataModel) {\n this.hide();\n return this;\n }\n\n const dataObj = dataModel.getData();\n const sourceInf = this.firebolt.context.getSourceInfo();\n const axes = sourceInf.axes;\n const axisFields = sourceInf.fields;\n const fields = selectionSet.fields;\n const data = dataObj.data;\n const fieldsConfig = dataModel.getFieldsConfig();\n const svgContainer = drawingInf.sideEffectGroup;\n\n const elemData = [];\n fields.forEach((field) => {\n const fieldIndex = fieldsConfig[field] && fieldsConfig[field].index;\n const dataArr = data.map(d => d[fieldIndex]);\n const axisIndex = [['x', 0], ['x', 1], ['y', 0], ['y', 1]].find((arr) => {\n const fieldInst = axisFields[arr[0]][arr[1]];\n return fieldInst && fieldInst.type() === FieldType.DIMENSION &&\n fieldInst.getMembers().indexOf(field) !== -1;\n });\n if (axisIndex !== undefined && data.length) {\n const type = axisIndex[0];\n const axis = axes[type][axisIndex[1]];\n const value = dataArr[0];\n bandWidth = axis.getUnitWidth() || 0;\n px = axis.getScaleValue(value) + bandWidth / 2 + drawingInf.xOffset;\n const plotWidth = Math.max(...this.firebolt.context.layers().map(layer => layer.getPlotSpan()[type]));\n const pad = Math.max(...this.firebolt.context.layers().map(layer => layer.getPlotPadding()[type]));\n height = drawingInf.height;\n width = drawingInf.width;\n const startPx = px - plotWidth / 2 - pad / 2;\n const endPx = px + plotWidth / 2 + pad / 2;\n const dataPoint = {};\n if (type === 'y') {\n dataPoint.d = `M 0 ${startPx} L 0 ${endPx} L ${width} ${endPx} L ${width} ${startPx} Z`;\n } else {\n dataPoint.d = `M ${startPx} 0 L ${endPx} 0 L ${endPx} ${height} L ${startPx} ${height} Z`;\n }\n dataPoint.className = plotWidth ? bandClass : lineClass;\n elemData.push(dataPoint);\n }\n });\n if (elemData.length) {\n const parentGroup = this.createElement(svgContainer, 'g', [1], className);\n const elem = this.createElement(parentGroup, 'path', elemData);\n elem.attr('d', d => d.d).style('pointer-events', 'none')\n .attr('class', d => d.className);\n }\n return this;\n }\n\n hide () {\n const className = this.config().className;\n const drawingInf = this.drawingContext();\n selectElement(drawingInf.sideEffectGroup).selectAll(`.${className}`).remove();\n }\n}\n","const fadeFn = (set, context, strategy) => {\n const {\n mergedEnter,\n mergedExit,\n exitSet,\n completeSet\n } = set;\n\n if (!mergedEnter.length && !mergedExit.length) {\n context.applyInteractionStyle(completeSet, {}, strategy, false);\n } else {\n context.applyInteractionStyle(exitSet[1], {}, strategy, true);\n context.applyInteractionStyle(mergedEnter, {}, strategy, false);\n }\n};\n\nexport const strategies = {\n fade: fadeFn,\n focus: (set, context) => {\n const {\n mergedEnter,\n mergedExit,\n completeSet\n } = set;\n if (!mergedEnter.length && !mergedExit.length) {\n context.applyInteractionStyle(completeSet, {}, 'focus', false);\n } else {\n context.applyInteractionStyle(mergedExit, {}, 'focus', true);\n context.applyInteractionStyle(mergedEnter, {}, 'focus', false);\n }\n },\n highlight: (set, context) => {\n const {\n mergedEnter,\n mergedExit,\n entrySet,\n exitSet,\n completeSet\n } = set;\n if (!mergedEnter.length && !mergedExit.length) {\n context.applyInteractionStyle(completeSet, {}, 'highlight', false);\n } else {\n context.applyInteractionStyle(entrySet[1], {}, 'highlight', true);\n context.applyInteractionStyle(exitSet[1], {}, 'highlight', false);\n }\n }\n};\n","import SurrogateSideEffect from '../surrogate';\nimport { strategies } from './strategy';\n\nexport default class PlotHighlighter extends SurrogateSideEffect {\n constructor (...params) {\n super(...params);\n this._strategy = 'highlight';\n this._strategies = strategies;\n }\n\n static formalName () {\n return 'highlighter';\n }\n\n static target () {\n return 'visual-unit';\n }\n\n apply (selectionSet, payload, options = {}) {\n const strategy = this._strategies[options.strategy || this._strategy];\n\n if (selectionSet.isSourceFieldPresent !== false) {\n strategy(selectionSet, this, options.strategy || this._strategy);\n }\n\n return this;\n }\n}\n","import SurrogateSideEffect from '../surrogate';\n\nexport default class FilterEffect extends SurrogateSideEffect {\n static formalName () {\n return 'filter';\n }\n\n static target () {\n return 'visual-unit';\n }\n\n static mutates () {\n return true;\n }\n\n apply (selectionSet, payload) {\n const context = this.firebolt.context;\n const entryModel = selectionSet.mergedEnter.model;\n if (payload.criteria === null) {\n context.clearCaching().resetData();\n } else {\n context.enableCaching().data(entryModel);\n }\n return this;\n }\n}\n","import { DataModel } from 'muze-utils';\n\nimport { CLASSPREFIX } from '../../enums/constants';\nimport SpawnableSideEffect from '../spawnable';\n\nimport './styles.scss';\n\nexport default class AnchorEffect extends SpawnableSideEffect {\n constructor (...params) {\n super(...params);\n const context = this.firebolt.context;\n this._layers = this.addAnchorLayers(context);\n }\n\n static target () {\n return 'visual-unit';\n }\n\n static defaultConfig () {\n return {\n className: `${CLASSPREFIX}-anchors-group`\n };\n }\n\n static formalName () {\n return 'anchors';\n }\n\n addAnchorLayers (context) {\n const layers = [];\n this.firebolt.context.layers().forEach((layer, idx) => {\n const shouldDrawAnchors = layer.shouldDrawAnchors();\n if (shouldDrawAnchors) {\n const encodingFieldsInf = layer.encodingFieldsInf();\n const layerObj = {\n instances: context.addLayer({\n name: `${layer.alias()}-${this.constructor.formalName()}-${idx}`,\n mark: 'point',\n encoding: {\n x: encodingFieldsInf.xField,\n y: encodingFieldsInf.yField,\n color: {\n field: encodingFieldsInf.colorField\n },\n size: {\n field: encodingFieldsInf.sizeField,\n value: this.defaultSizeValue()\n }\n },\n transform: {\n type: 'identity'\n },\n transition: this.getTransitionConfig(),\n calculateDomain: false,\n source: dt => dt.select(() => false, {\n saveChild: false\n }),\n interactive: false,\n render: false\n }),\n linkedLayer: layer\n };\n\n layers.push(layerObj);\n }\n });\n return layers;\n }\n\n getTransitionConfig () {\n return {\n disabled: true\n };\n }\n\n /**\n * Returns the default area value of the anchor point.\n * @return { number } Default area value of anchor.\n */\n defaultSizeValue () {\n return 100;\n }\n\n apply (selectionSet) {\n const self = this;\n const dataModel = selectionSet.mergedEnter.model;\n if (selectionSet.isSourceFieldPresent !== false) {\n const drawingInf = this.drawingContext();\n const sideEffectGroup = drawingInf.sideEffectGroup;\n const className = `${this.config().className}`;\n const layers = this._layers;\n const parentGroup = this.createElement(sideEffectGroup, 'g', [1], `${className}-container`);\n const anchorGroups = this.createElement(parentGroup, 'g', layers);\n anchorGroups.each(function (layer) {\n const instances = layer.instances;\n const elems = self.createElement(this, 'g', instances, className);\n const linkedLayer = layer.linkedLayer;\n const [transformedData, schema] = linkedLayer.getTransformedDataFromIdentifiers(dataModel);\n const transformedDataModel = new DataModel(transformedData, schema);\n elems.each(function (d, i) {\n instances[i].data(transformedDataModel).mount(this);\n });\n });\n }\n return this;\n }\n}\n","import AnchorEffect from './anchors';\nimport { CLASSPREFIX } from '../enums/constants';\n\nexport default class PersistentAnchors extends AnchorEffect {\n static formalName () {\n return 'persistent-anchors';\n }\n\n static defaultConfig () {\n return {\n className: `${CLASSPREFIX}-persistent-anchors`\n };\n }\n\n getTransitionConfig () {\n return {\n disabled: true\n };\n }\n}\n","import AnchorEffect from './anchors';\nimport { CLASSPREFIX } from '../enums/constants';\n\nexport default class BrushAnchors extends AnchorEffect {\n static formalName () {\n return 'brush-anchors';\n }\n\n static defaultConfig () {\n return {\n className: `${CLASSPREFIX}-brush-anchors`\n };\n }\n\n getTransitionConfig () {\n return {\n disabled: true\n };\n }\n}\n","import * as BEHAVIOURS from './enums/behaviours';\n\nexport const behaviourEffectMap = {\n [BEHAVIOURS.BRUSH]: ['selectionBox', {\n name: 'highlighter',\n options: {\n strategy: 'fade'\n }\n }, 'brush-anchors'],\n [`${BEHAVIOURS.BRUSH},${BEHAVIOURS.SELECT}`]: [{\n name: 'tooltip',\n options: {\n strategy: 'showSelectedItems',\n order: 0,\n filter: context => context.config().mode === 'fragmented'\n }\n }],\n [BEHAVIOURS.HIGHLIGHT]: [{\n name: 'highlighter',\n options: {\n strategy: 'highlight'\n }\n }, 'crossline', {\n name: 'tooltip',\n options: {\n order: 9999\n }\n }, 'anchors'],\n [BEHAVIOURS.FILTER]: ['filter'],\n [BEHAVIOURS.SELECT]: [{\n name: 'highlighter',\n options: {\n strategy: 'focus'\n }\n }, 'persistent-anchors']\n};\n","export const CLASSPREFIX = 'muze';\nexport const STACK = 'stack';\nexport const GROUP = 'group';\nexport const IDENTITY = 'identity';\nexport const ANGLE = 'angle';\nexport const RADIUS = 'radius';\nexport const SIZE = 'size';\nexport const COLOR = 'color';\nexport const SHAPE = 'shape';\nexport const OUTER_RADIUS_VALUE = 'outerRadiusValue';\nexport const TEXT_ANCHOR_MIDDLE = 'middle';\nexport const ENCODING = {\n X: 'x',\n Y: 'y',\n X0: 'x0',\n Y0: 'y0'\n};\n\nexport const ASCENDING = 'asc';\n\nexport const AREA_LAYER = 'area';\nexport const ARC_LAYER = 'arc';\nexport const LINE_LAYER = 'line';\nexport const TEXT_LAYER = 'text';\nexport const POINT_LAYER = 'point';\nexport const BAR_LAYER = 'bar';\nexport const TICK_LAYER = 'tick';\nexport const SIMPLE_LAYER = 'simple';\nexport const BASE_LAYER = 'base';\n","import { CLASSPREFIX, STACK } from '../../enums/constants';\n\nexport const defaultConfig = {\n classPrefix: CLASSPREFIX,\n defClassName: 'layer-area',\n className: '',\n interpolate: 'linear',\n transform: {\n type: STACK\n },\n interaction: {\n\n },\n nearestPointThreshold: 10,\n encoding: {\n color: {},\n x: {},\n y: {},\n y0: {},\n strokeOpacity: {\n value: 1\n }\n },\n transition: {\n effect: 'cubic',\n duration: 1000\n },\n connectNullData: false\n};\n","import { ERROR_MSG } from 'muze-utils';\n\n/**\n * This is an interface class which any new layer class has to extend.\n *\n * @example\n * class BarLayer extends BaseLayer {\n * update (params) {\n * // super.update(params);\n * // Update the bar layer\n * }\n * }\n * @class\n */\nexport default class SimpleLayer {\n\n formalName () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Sets or gets the dependencies.\n * @param {Object} dependencies Dependencies needed by layer\n * @return {BaseLayer} Instance of base layer.\n */\n dependencies () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Returns the config of the layer\n *\n * @param {Object} config Configuration of layer\n * @return {Object} configuration of layer\n */\n config () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Acts as a getter or setter function\n * When setter\n * Returns the datamodel of the layer\n * @param { DataModel } dataModel instance of DataModel\n * @return { DataModel } DataModel instance of the layer\n */\n data () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Returns a serialized schema of the layer\n * @return {Object} Serialized schema\n */\n serialize () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Returns the unique identifier of this layer\n * @return {string} id of the layer\n */\n id () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n /*\n * This method resolves the x, y, x0 and y0 values from the transformed data.\n * It also checks the type of transformed data for example, if it is a stacked data\n * then it fetches the y and y0 values from the stacked data.\n * @param {Array.} transformedData transformed data\n * @param {Object} fieldMap field definitions\n * @param {string} transformType type of transformed data - stack, group or identity.\n * @return {Array.} Normalized data\n * @private\n */\n normalizeTransformedData () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Gets the transform method from transform factory based on type of transform. It then calls the\n * transform method with the data and passes the configuration parameters of transform such as\n * groupBy, value field, etc.\n *\n * @param {DataModel} dataModel Instance of dataModel\n * @param {Object} config configuration for transforming data\n * @return {Array.} Transformed data.\n * @private\n */\n getTransformedData () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Calculates the domain from the data.\n * It checks the type of field and calculates the domain based on that. For example, if it\n * is a quantitative or temporal field, then it calculates the min and max from the data or\n * if it is a nominal field then it gets all the values from the data of that field.\n * @param {Array} data DataArray\n * @return {Array} Domain values array.\n */\n _calculateDomainFromData () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Returns the domain for the axis.\n *\n * @param {string} encodingType type of encoding x, y, color, etc.\n * @return {Object} Axis domains\n */\n getDomain () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Abstract method for getting nearest point\n * @return {BaseLayer} Instance of base layer\n */\n getNearestPoint () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Abstract method for highlighting points\n * @return {BaseLayer} Instance of base layer\n */\n highlightPoint () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Abstract method for deselecting points\n * @return {BaseLayer} Instance of base layer\n */\n dehighlightPoint () {\n return this;\n }\n\n linkLayerStore () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Sets the container element for the layer to be renderered.\n * @param {SVGElement} mountPoint SVG element or group element.\n */\n mount () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n render () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n}\n","export const DATA = 'data';\nexport const CONFIG = 'config';\nexport const MEASUREMENT = 'measurement';\nexport const AXES = 'axes';\nexport const NORMALIZED_DATA = 'normalizedData';\nexport const TRANSFORMED_DATA = 'transformedData';\nexport const DOMAIN = 'domain';\nexport const MOUNT = 'mount';\nexport const FIELDMAP = 'fieldMap';\nexport const DATA_UPDATED = 'dataUpdated';\n","/**\n * @module Axis\n * This file declares a class that is used to render an axis to add meaning to\n * plots.\n */\nimport { Symbols } from 'muze-utils';\nimport * as AxisOrientation from '../enums/axis-orientation';\n\n/**\n * @module Axis\n * This file exports constants that are used to reference axis orientations\n * in a consistent manner.\n */\nexport const BOTTOM = 'bottom';\nexport const TOP = 'top';\nexport const LEFT = 'left';\nexport const RIGHT = 'right';\n\n/**\n * This object is used to associate the axis orientation with the d3 class\n * used to represent that axis.\n */\nexport const axisOrientationMap = {\n [AxisOrientation.LEFT]: Symbols.axisLeft,\n [AxisOrientation.BOTTOM]: Symbols.axisBottom,\n [AxisOrientation.RIGHT]: Symbols.axisRight,\n [AxisOrientation.TOP]: Symbols.axisTop\n};\n","/**\n * @module axis\n * This file exports constants used to reference scale type\n * consistently throughout the project.\n */\nexport const LINEAR = 'linear';\nexport const BAND = 'band';\nexport const TIME = 'temporal';\nexport const COLOR = 'color';\nexport const ORDINAL = 'ordinal';\nexport const QUANTIZE = 'quantize';\nexport const QUANTILE = 'quantile';\nexport const LOG = 'log';\nexport const POW = 'pow';\nexport const IDENTITY = 'identity';\nexport const SEQUENTIAL = 'sequential';\nexport const THRESHOLD = 'threshold';\n","export const CLASSPREFIX = 'muze';\n\nexport const CONTINOUS = 'continous';\nexport const DISCRETE = 'discrete';\nexport const SEQUENTIAL = 'sequential';\nexport const ORDINAL = 'ordinal';\nexport const LINEAR = 'linear';\nexport const THRESHOLD = 'threshold';\nexport const QUANTIZE = 'quantize';\nexport const QUANTILE = 'quantile';\n\nexport const COLOR = 'color';\nexport const SHAPE = 'shape';\nexport const SIZE = 'size';\n\nexport const DOMAIN = 'domain';\nexport const BAND = 'band';\nexport const HIDDEN = 'hidden';\nexport const NUMBER = 'number';\nexport const BOTTOM = 'bottom';\nexport const TOP = 'top';\n\nexport const RGB = 'rgb';\nexport const HEX = 'hex';\nexport const HSLA = 'hsla';\nexport const HSL = 'hsl';\n\n","import { scales, colorSchemes } from 'muze-utils';\n\nimport {\n SEQUENTIAL,\n ORDINAL,\n LINEAR,\n CONTINOUS,\n THRESHOLD,\n QUANTIZE\n} from './enums/constants';\n\nimport * as ScaleType from './enums/scale-type';\n\nconst {\n scaleLinear,\n scaleThreshold,\n scaleLog,\n scalePow,\n scaleIdentity,\n scaleOrdinal,\n scaleSequential,\n scaleQuantize,\n scaleQuantile,\n schemeCategory10,\n schemeCategory20,\n schemeCategory20b,\n scaleBand,\n scaleTime\n} = scales;\nexport const scaleMap = {\n [ScaleType.LINEAR]: scaleLinear,\n [ScaleType.BAND]: scaleBand,\n [ScaleType.QUANTIZE]: scaleQuantize,\n [ScaleType.QUANTILE]: scaleQuantile,\n [ScaleType.THRESHOLD]: scaleThreshold,\n [ScaleType.SEQUENTIAL]: scaleSequential,\n [ScaleType.LOG]: scaleLog,\n [ScaleType.POW]: scalePow,\n [ScaleType.IDENTITY]: scaleIdentity,\n [ScaleType.TIME]: scaleTime,\n [ScaleType.COLOR]: scaleLinear,\n [ScaleType.ORDINAL]: scaleOrdinal\n};\nexport const SCHEMES = {\n SCHEME1: schemeCategory10,\n SCHEME2: schemeCategory20,\n SCHEME3: schemeCategory20b\n};\n\n/**\n * Accepts a scheme in a string format and returns the scale from d3-scale-chromatic\n *\n * @export\n * @param {string} scheme a string representing the kind of scheme for the color axis\n * @return {Object} The corresponding scale from a scheme type from d3 chromatic scale\n */\nexport function getScheme (scheme) {\n if (scheme[0] === 'i') {\n return scaleSequential(colorSchemes[scheme]);\n }\n return scaleOrdinal(colorSchemes[scheme]);\n}\n\n/**\n *\n *\n * @export\n * @param {*} scheme\n * @returns\n */\nexport function getSchemeType (scheme) {\n let schemeType = '';\n if (scheme && typeof (scheme) === 'string') {\n schemeType = scheme[0] === 'i' ? SEQUENTIAL : ORDINAL;\n } else {\n schemeType = ORDINAL;\n }\n return schemeType;\n}\n\n/**\n * This function is used to create a scale that is assigned to\n * an instance of axis.\n *\n * @export\n * @param {Object} params the input parameters to create a Scale object\n * @param {string} params.type the type of scale\n * @param {Array} params.range the range of scale\n * @return {Object} instance of scale\n */\nexport function createScale (params) {\n if (!params.type || !scaleMap[params.type]) {\n throw new Error(`${params.type} is not a valid scale type`);\n }\n if (!Array.isArray(params.range)) {\n throw new Error('range parameter must be an array');\n }\n let scaleFactory = null;\n const range = params.range;\n // @todo: do it using scale decorator\n if (params.type === LINEAR && params.interpolator) {\n scaleFactory = scaleMap[params.interpolator];\n if (params.interpolator === ScaleType.POW) {\n return scaleFactory().range(range).exponent(params.exponent);\n } else if (params.interpolator === ScaleType.LOG) {\n return scaleFactory().range(range).base([params.base]);\n }\n } else {\n scaleFactory = scaleMap[params.type];\n }\n\n if (params.type === QUANTIZE) {\n scaleFactory().nice();\n }\n return scaleFactory().range(range);\n}\n\n/**\n * This method is used to update the range of a scale\n * so that the core module can remain agnostic of the d3\n * scale api.\n *\n * @export\n * @param {Scale} scale Instance of d3 Scale.\n * @param {Array} range new range of the scale.\n * @return {Scale} Updated scale.\n */\nexport function updateScaleRange (scale, range) {\n return scale.range(range);\n}\n\n/**\n *\n *\n * @export\n * @param {*} domainType\n * @param {*} rangeType\n * @param {*} steps\n * @returns\n */\nexport function getScaleType (domainType, rangeType, steps) {\n if (rangeType === CONTINOUS) {\n return LINEAR;\n }\n if (domainType === CONTINOUS) {\n if (steps instanceof Array) {\n return THRESHOLD;\n }\n return QUANTIZE;\n }\n return ORDINAL;\n}\n","import { getUniqueId } from 'muze-utils';\nimport { CLASSPREFIX } from '../enums/constants';\n\n/**\n *\n *\n */\nexport const defaultConfig = {\n id: getUniqueId(),\n axisName: {\n defClassName: 'axis-name'\n },\n axisNamePadding: 12,\n base: 10,\n classPrefix: CLASSPREFIX,\n className: `${CLASSPREFIX}-axis`,\n exponent: 1,\n interpolator: 'linear',\n fixedBaseline: true,\n labels: {\n rotation: 0,\n smartTicks: false\n },\n orientation: 'left',\n maxHeight: 50, // @todo: height and width wont be hardcoded\n maxWidth: 40,\n numberFormat: val => val,\n padding: 0.3,\n nice: true,\n numberOfTicks: 10,\n rotate: false,\n show: true,\n showAxisName: true,\n showInnerTicks: null,\n showOuterTicks: null,\n style: {},\n type: 'linear',\n tickFormat: null,\n tickValues: null,\n xOffset: undefined,\n yOffset: undefined\n};\n\n","/**\n * This file exports functionality that is used to render axis.\n */\nimport { selectElement, makeElement, angleToRadian } from 'muze-utils';\nimport * as AxisOrientation from './enums/axis-orientation';\nimport { LINEAR, HIDDEN, BOTTOM, TOP } from './enums/constants';\n\n/**\n *\n *\n * @param {*} instance\n * @param {*} container\n * @param {*} labelManager\n * @param {*} config\n */\nconst rotateAxis = (instance, tickText, labelManager, config) => {\n const axis = instance.axis();\n const scale = instance.scale();\n const {\n orientation,\n labels,\n fixedBaseline,\n type\n } = config;\n let { rotation } = labels;\n\n const tickSize = instance.getTickSize();\n\n tickText.each(function (datum, index) {\n let yShift;\n let xShift;\n const tickFormatter = axis.tickFormat() ? axis.tickFormat : scale.tickFormat;\n const temp = tickFormatter ? tickFormatter()(datum) : datum;\n\n datum = temp.toString();\n\n const tickLabelDim = labelManager.getOriSize(datum);\n const width = tickLabelDim.width * 0.5;\n const height = tickLabelDim.height * 0.5;\n\n if (rotation < 0) {\n rotation = 360 + rotation;\n }\n\n const quadrant = 4 - Math.floor(rotation / 90);\n const rotationNormalizer = ((quadrant % 2 === 0) ? rotation : 180 * Math.ceil(rotation / 180) - rotation) % 180;\n\n yShift = Math.sqrt(height ** 2 + width ** 2) * Math.sin(angleToRadian(rotationNormalizer));\n\n if ((quadrant === 3 || quadrant === 2) && !(rotationNormalizer > 67.5 && rotationNormalizer <= 90)) {\n yShift += height * 2;\n }\n xShift = width;\n\n if (rotation === 90) {\n xShift = height;\n } else if (rotation === 270) {\n xShift = -height;\n } else {\n xShift = 0;\n }\n\n if (orientation === AxisOrientation.TOP) {\n xShift = (index === 0 && fixedBaseline && type === LINEAR) ? xShift + xShift / 2 : xShift;\n selectElement(this)\n .attr('transform', `translate(${-xShift + tickSize} \n ${-yShift - tickSize}) rotate(${rotation})`);\n } else {\n xShift = (index === 0 && fixedBaseline && type === LINEAR) ? xShift - xShift / 2 : xShift;\n selectElement(this)\n .attr('transform', `translate(${xShift - tickSize} \n ${yShift + tickSize}) rotate(${rotation})`);\n }\n });\n return tickText;\n};\n\n/**\n *\n *\n * @param {*} tickText\n * @param {*} axisInstance\n */\nconst changeTickOrientation = (selectContainer, axisInstance, tickSize) => {\n const {\n _smartTicks\n } = axisInstance;\n const config = axisInstance.config();\n const labelManager = axisInstance.dependencies().labelManager;\n const {\n labels,\n orientation\n } = config;\n const {\n rotation,\n smartTicks: isSmartTicks\n } = labels;\n\n const tickText = selectContainer.selectAll('.tick text');\n tickText.selectAll('tspan').remove();\n\n // rotate labels if not enough space is available\n if (rotation !== 0 && isSmartTicks === false && (orientation === TOP || orientation === BOTTOM)) {\n rotateAxis(axisInstance, tickText, labelManager, config);\n } else if (rotation === 0 && isSmartTicks === false) {\n tickText.attr('transform', '');\n } else {\n tickText.attr('y', 0)\n .attr('x', 0)\n .text('');\n const tspan = makeElement(tickText, 'tspan', (d, i) => _smartTicks[i].lines, 'smart-text');\n tspan.attr('dy', '0')\n .style('opacity', '0')\n .transition()\n .duration(1000)\n .attr('dy', (d, i) => {\n if (orientation === BOTTOM || i !== 0) {\n return _smartTicks[i].oriTextHeight;\n }\n return -_smartTicks[i].oriTextHeight * (_smartTicks[i].lines.length - 1) - tickSize;\n })\n .style('opacity', 1)\n .attr('x', 0)\n .text(e => e);\n }\n\n return tickText;\n};\n\nconst setFixedBaseline = (axisInstance) => {\n const {\n fixedBaseline\n } = axisInstance.config();\n if (fixedBaseline) {\n axisInstance.setFixedBaseline();\n }\n};\n\n/**\n *\n *\n * @param {*} textNode\n * @param {*} orientation\n * @param {*} measures\n */\nconst setAxisNamePos = (textNode, orientation, measures) => {\n const {\n axisNameHeight,\n yOffset,\n labelOffset,\n availableSpace\n } = measures;\n switch (orientation) {\n case AxisOrientation.LEFT:\n textNode.attr('transform',\n `translate(${-(availableSpace.width - axisNameHeight)},${yOffset + labelOffset})rotate(-90)`);\n break;\n case AxisOrientation.RIGHT:\n textNode.attr('transform',\n `translate(${(availableSpace.width - axisNameHeight)},${yOffset + labelOffset})rotate(90)`);\n break;\n case AxisOrientation.TOP:\n textNode.attr('transform',\n `translate(${availableSpace.width / 2},${-availableSpace.height + axisNameHeight})`);\n break;\n case AxisOrientation.BOTTOM:\n textNode.attr('transform',\n `translate(${availableSpace.width / 2},${availableSpace.height - axisNameHeight / 2})`);\n break;\n default:\n }\n return textNode;\n};\n\n/**\n * This method is used to render the axis inside an\n * svg container.\n *\n * @export\n * @param {Object} axisInstance the nput object required to render axis\n * @param {string} axisInstance.orientation the orientation of axis\n * @param {Object} axisInstance.scale instance of d3 scale\n * @param {SVGElement} axisInstance.container the container in which to render\n */\nexport function renderAxis (axisInstance) {\n const config = axisInstance.config();\n const labelManager = axisInstance.dependencies().labelManager;\n const mount = axisInstance.mount();\n const range = axisInstance.range();\n const axis = axisInstance.axis();\n const scale = axisInstance.scale();\n const {\n _axisNameStyle,\n _tickLabelStyle,\n formatter,\n tickValues\n } = axisInstance;\n const {\n orientation,\n name,\n labels,\n xOffset,\n yOffset,\n axisNamePadding,\n className,\n showAxisName,\n show,\n id,\n interpolator,\n classPrefix\n } = config;\n\n if (!show) {\n return;\n }\n\n const tickSize = axisInstance.getTickSize();\n\n const selectContainer = makeElement(selectElement(mount), 'g', [axisInstance], `${className}`, {},\n key => key.config().id);\n\n // Set style for tick labels\n labelManager.setStyle(_tickLabelStyle);\n\n // @to-do: Need to write a configuration override using decorator pattern\n if (interpolator === 'linear') {\n // Set ticks for the axis\n axisInstance.setTickValues();\n }\n\n const labelFunc = scale.ticks || scale.quantile || scale.domain;\n\n formatter && axis.tickFormat(formatter(tickValues || axis.tickValues() || labelFunc()));\n\n // Get range(length of range)\n const availableSpace = Math.abs(range[0] - range[1]);\n\n // Get width and height taken by axis labels\n const labelProps = axisInstance.axisDimensions().tickLabelDim;\n\n // Draw axis ticks\n selectContainer.attr('transform', `translate(${xOffset},${yOffset})`);\n setFixedBaseline(axisInstance);\n if (labels.smartTicks === false) {\n selectContainer.transition()\n .duration(1000).call(axis);\n } else {\n selectContainer.call(axis);\n }\n selectContainer.selectAll('.tick').classed(`${classPrefix}-ticks`, true);\n selectContainer.selectAll('.tick line').classed(`${classPrefix}-tick-lines`, true);\n\n // Set classes for ticks\n const tickText = selectContainer.selectAll('.tick text');\n tickText.classed(`${classPrefix}-ticks`, true)\n .classed(`${classPrefix}-ticks-${id}`, true);\n changeTickOrientation(selectContainer, axisInstance, tickSize);\n\n // Create axis name\n const textNode = makeElement(selectContainer, 'text', [name], `${classPrefix}-axis-name`)\n .attr('text-anchor', 'middle')\n .classed(`${classPrefix}-axis-name-${id}`, true)\n .text(d => d);\n\n // Hide axis name if show is off\n textNode.classed(HIDDEN, !showAxisName);\n\n // render labels based on orientation of axis\n const labelOffset = availableSpace / 2;\n\n // Set style for axis name\n labelManager.setStyle(_axisNameStyle);\n const axisNameSpace = labelManager.getOriSize(name);\n const measures = {\n labelProps,\n tickSize,\n axisNamePadding,\n axisNameHeight: axisNameSpace.height,\n axisNameWidth: axisNameSpace.width,\n yOffset,\n xOffset,\n labelOffset,\n availableSpace: axisInstance.availableSpace()\n };\n // Set position for axis name\n setAxisNamePos(textNode, orientation, measures);\n}\n","import { TOP, LEFT, BOTTOM } from '../enums/axis-orientation';\nimport { LOG } from '../enums/scale-type';\n\nexport const getNumberOfTicks = (availableSpace, labelDim, axis, axisInstance) => {\n const ticks = axis.scale().ticks();\n const { numberOfTicks } = axisInstance.config();\n const tickLength = ticks.length;\n let numberOfValues = tickLength;\n\n if (tickLength * (labelDim * 1.5) > availableSpace) {\n numberOfValues = Math.floor(availableSpace / (labelDim * 1.5));\n }\n\n numberOfValues = Math.min(numberOfTicks, Math.max(1, numberOfValues));\n return axis.scale().ticks(numberOfValues);\n};\n\nexport const sanitizeDomain = (domain, context) => {\n const interpolator = context.config().interpolator;\n // @todo: Get from scale decorator\n if (interpolator === LOG && domain[0] >= 0) {\n return [Math.max(1, domain[0]), Math.max(1, domain[1])];\n }\n return domain;\n};\n\nexport const getTickFormatter = (tickFormat, numberFormat) => {\n if (tickFormat) {\n return ticks => (val, i) => tickFormat(numberFormat(val), i, ticks);\n }\n return () => val => numberFormat(val);\n};\n\n/**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\nexport const getTickLabelInfo = (context) => {\n let largestLabel = '';\n let labelProps;\n let smartTick = {};\n let axisTickLabels;\n const scale = context.scale();\n const allLabelLengths = [];\n const { tickFormat, tickValues, numberFormat } = context.config();\n const labelFunc = scale.ticks || scale.quantile || scale.domain;\n // set the style on the shared label manager instance\n const { labelManager } = context.dependencies();\n\n labelManager.setStyle(context._tickLabelStyle);\n // get the values along the domain\n\n axisTickLabels = tickValues || labelFunc();\n // Get the tick labels\n axisTickLabels = axisTickLabels.map((originalLabel, i) => {\n const formattedLabel = numberFormat(originalLabel);\n\n // get formats of tick if any\n const label = tickFormat ? tickFormat(formattedLabel, i, axisTickLabels) : (scale.tickFormat ?\n numberFormat(scale.tickFormat()(originalLabel)) : formattedLabel);\n\n // convert to string for quant values\n const temp = label.toString();\n // Get spaces for all labels\n allLabelLengths.push(labelManager.getOriSize(temp));\n // Getting largest label\n if (temp.length > largestLabel.length) {\n largestLabel = temp;\n smartTick = context.smartTicks() ? context.smartTicks()[i] : {};\n labelProps = allLabelLengths[i];\n }\n return label;\n });\n\n labelProps = labelManager.getOriSize(largestLabel);\n\n return { largestLabel, largestLabelDim: labelProps, axisTickLabels, allLabelLengths, smartTick };\n};\n\n/**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\nexport const computeAxisDimensions = (context) => {\n let tickLabelDim = {};\n const {\n name,\n labels,\n tickValues\n } = context.config();\n const angle = ((labels.smartTicks) ? 0 : labels.rotation) * Math.PI / 180;\n const { labelManager } = context.dependencies();\n const {\n largestLabelDim,\n axisTickLabels,\n smartTick\n } = getTickLabelInfo(context);\n const { height: labelHeight, width: labelWidth } = largestLabelDim;\n // get the domain of axis\n const domain = context.domain();\n\n if (domain.length === 0) {\n return null;\n }\n if (context._rotationLock === false) {\n context.setRotationConfig(tickValues || axisTickLabels, largestLabelDim.width);\n context._rotationLock = false;\n }\n if (labels.smartTicks) {\n tickLabelDim = smartTick;\n } else {\n tickLabelDim = {\n width: Math.abs(labelHeight * Math.sin(angle)) + Math.abs(labelWidth * Math.cos(angle)),\n height: Math.abs(labelWidth * Math.sin(angle)) + Math.abs(labelHeight * Math.cos(angle))\n };\n }\n\n labelManager.setStyle(context._axisNameStyle);\n return {\n tickSize: context.getTickSize(),\n tickLabelDim,\n axisLabelDim: labelManager.getOriSize(name),\n largestLabelDim,\n axisTickLabels\n };\n};\n\n/**\n*\n*\n* @memberof SimpleAxis\n*/\nexport const setOffset = (context) => {\n let x = 0;\n let y = 0;\n const logicalSpace = context.logicalSpace();\n const config = context.config();\n const {\n orientation,\n xOffset,\n yOffset\n } = config;\n if (orientation === LEFT) {\n x = xOffset === undefined ? logicalSpace.width : xOffset;\n }\n if (orientation === TOP) {\n y = yOffset === undefined ? logicalSpace.height : yOffset;\n }\n context.config({ xOffset: x, yOffset: y });\n};\n\n/**\n *\n *\n * @param {*} timeDiff\n * @param {*} range\n * @param {*} domain\n * @returns\n */\nconst getAxisOffset = (timeDiff, range, domain) => {\n const pvr = Math.abs(range[1] - range[0]) / (domain[1] - domain[0]);\n const width = (pvr * timeDiff);\n const avWidth = (range[1] - range[0]);\n const bars = avWidth / width;\n const barWidth = avWidth / (bars + 1);\n const diff = avWidth - barWidth * bars;\n\n return diff / 2;\n};\n\nexport const adjustRange = (minDiff, range, domain, orientation) => {\n const diff = getAxisOffset(minDiff, range, domain);\n\n if (orientation === TOP || orientation === BOTTOM) {\n range[0] += diff;\n range[1] -= diff;\n } else {\n range[0] -= diff;\n range[1] += diff;\n }\n return range;\n};\n\n /**\n * Listener attached to the axis on change of parameters.\n *\n * @param {Function} callback to be excuted on change of domain range etc\n * @memberof SimpleAxis\n */\nexport const registerChangeListeners = (context) => {\n const store = context.store();\n\n store.model.next(['domain', 'range', 'mount', 'config'], (...params) => {\n context.render();\n context._domainLock = false;\n context._eventList.forEach((e) => {\n e.action instanceof Function && e.action(...params);\n });\n }, true);\n return context;\n};\n\n/**\n *\n *\n * @param {*} axisDimensions\n * @param {*} config\n * @param {*} range\n * @returns\n */\nexport const getHorizontalAxisSpace = (context, axisDimensions, config, range) => {\n let width;\n let height;\n const {\n tickSize,\n tickLabelDim,\n axisLabelDim\n } = axisDimensions;\n const {\n axisNamePadding,\n showAxisName,\n tickValues\n } = config;\n const domain = context.domain();\n const { height: axisDimHeight } = axisLabelDim;\n const { height: tickDimHeight, width: tickDimWidth } = tickLabelDim;\n\n width = range && range.length ? range[1] - range[0] : 0;\n\n height = 0;\n if (tickValues) {\n const minTickDiff = context.getMinTickDifference();\n const [min, max] = [Math.min(...tickValues, ...domain), Math.max(...tickValues, ...domain)];\n\n width = ((max - min) / Math.abs(minTickDiff)) * (tickDimWidth + context._minTickDistance.width);\n }\n if (!width || width === 0) {\n height = Math.max(tickDimWidth, tickDimHeight);\n } else {\n height = tickDimHeight;\n }\n height += (showAxisName ? (axisDimHeight + axisNamePadding) : 0) + tickSize;\n return {\n width,\n height\n };\n};\n\n/**\n *\n *\n * @param {*} axisDimensions\n * @param {*} config\n * @param {*} range\n * @returns\n */\nexport const getVerticalAxisSpace = (context, axisDimensions, config) => {\n let height;\n let width;\n const {\n tickSize,\n tickLabelDim,\n axisLabelDim\n } = axisDimensions;\n const {\n axisNamePadding,\n showAxisName,\n tickValues\n } = config;\n const domain = context.domain();\n const { height: axisDimHeight } = axisLabelDim;\n const { height: tickDimHeight, width: tickDimWidth } = tickLabelDim;\n\n height = 0;\n width = tickDimWidth;\n if (tickValues) {\n const minTickDiff = context.getMinTickDifference();\n const [min, max] = [Math.min(...tickValues, ...domain), Math.max(...tickValues, ...domain)];\n\n height = ((max - min) / Math.abs(minTickDiff)) * (tickDimHeight);\n }\n width += (showAxisName ? axisDimHeight : 0) + tickSize + axisNamePadding;\n\n return {\n height,\n width\n };\n};\n\n /**\n * Calculates the logical space of the axis\n * @return {Object} Width and height occupied by the axis.\n */\nexport const calculateBandSpace = (context) => {\n const range = context.range();\n const config = context.config();\n const {\n orientation,\n show\n } = config;\n const axisDimensions = context.getAxisDimensions();\n const {\n largestLabelDim,\n axisTickLabels\n } = axisDimensions;\n const { height: largestDimHeight, width: largestDimWidth } = largestLabelDim;\n\n if (orientation === TOP || orientation === BOTTOM) {\n let { width, height } = getHorizontalAxisSpace(context, axisDimensions, config, range);\n if (!width || width === 0) {\n width = axisTickLabels.length * (Math.min(largestDimWidth + context._minTickDistance.width,\n largestDimHeight + context._minTickDistance.width));\n }\n if (show === false) {\n height = 0;\n }\n return {\n width,\n height\n };\n }\n\n let { width, height } = getVerticalAxisSpace(context, axisDimensions, config, range);\n\n if (!height || height === 0) {\n height = axisTickLabels.length * (largestDimHeight + largestDimHeight / 2) + largestDimHeight;\n }\n if (show === false) {\n width = 0;\n }\n return {\n width,\n height\n };\n};\n\n/**\n * Calculates the logical space of the axis\n * @return {Object} Width and height occupied by the axis.\n */\nexport const calculateContinousSpace = (context) => {\n const range = context.range();\n const config = context.config();\n const axisDimensions = context.getAxisDimensions();\n\n const {\n orientation,\n show,\n showAxisName\n } = config;\n const {\n axisLabelDim\n } = axisDimensions;\n\n if (show === false) {\n return {\n width: 0,\n height: 0\n };\n }\n\n const { width: axisDimWidth } = axisLabelDim;\n\n if (orientation === TOP || orientation === BOTTOM) {\n const { width, height } = getHorizontalAxisSpace(context, axisDimensions, config);\n const axisWidth = Math.max(width, axisDimWidth);\n\n return {\n width: axisWidth,\n height\n };\n }\n\n const { width, height } = getVerticalAxisSpace(context, axisDimensions, config, range);\n\n const effHeight = Math.max(height, showAxisName ? axisDimWidth : 0);\n\n return {\n width,\n height: effHeight\n };\n};\n\n","import { mergeRecursive } from 'muze-utils';\n\nexport const PROPS = {\n availableSpace: {},\n axisDimensions: {},\n config: {\n sanitization: (context, value) => {\n if (value.labels && value.labels.rotation) {\n context._rotationLock = true;\n }\n value = mergeRecursive(context._config || {}, value);\n value.axisNamePadding = Math.max(value.axisNamePadding, 0);\n context.axis(context.createAxis(value));\n context.store().commit('config', value);\n return value;\n }\n },\n logicalSpace: {},\n mount: {\n sanitization: (context, value) => {\n context.store().commit('mount', value);\n return value;\n }\n },\n range: {\n sanitization: (context, value) => {\n context.scale().range(value);\n context.logicalSpace(null);\n context.store().commit('range', value);\n return value;\n }\n },\n\n smartTicks: {},\n store: {},\n tickSize: {}\n};\n","import {\n Store,\n mergeRecursive,\n getSmartComputedStyle,\n selectElement,\n generateGetterSetters,\n getUniqueId\n} from 'muze-utils';\nimport { createScale } from '../scale-creator';\nimport { axisOrientationMap, BOTTOM, TOP } from '../enums/axis-orientation';\nimport { defaultConfig } from './default-config';\nimport { renderAxis } from '../axis-renderer';\nimport { DOMAIN, BAND } from '../enums/constants';\nimport {\n computeAxisDimensions,\n setOffset,\n registerChangeListeners,\n calculateContinousSpace\n} from './helper';\nimport { PROPS } from './props';\n\nexport default class SimpleAxis {\n\n /**\n * Creates an instance of SimpleAxis.\n * @memberof SimpleAxis\n */\n constructor (config, dependencies) {\n this._id = getUniqueId();\n\n this._dependencies = dependencies;\n this._mount = null;\n this._range = [];\n this._domain = [];\n this._domainLock = false;\n this._rotationLock = false;\n this._axisDimensions = {};\n this._eventList = [];\n\n const defCon = mergeRecursive({}, this.constructor.defaultConfig());\n const simpleConfig = mergeRecursive(defCon, config);\n\n const bodyElem = selectElement('body');\n const classPrefix = simpleConfig.classPrefix;\n this._tickLabelStyle = getSmartComputedStyle(bodyElem, `${classPrefix}-ticks`);\n this._axisNameStyle = getSmartComputedStyle(bodyElem, `${classPrefix}-axis-name`);\n dependencies.labelManager.setStyle(this._tickLabelStyle);\n this._minTickDistance = dependencies.labelManager.getOriSize('ww');\n\n generateGetterSetters(this, PROPS);\n this.store(new Store({\n domain: this.domain(),\n range: this.range(),\n config: simpleConfig,\n mount: this.mount()\n }));\n this.config(simpleConfig);\n\n this._scale = this.createScale(this._config);\n this._axis = this.createAxis(this._config);\n\n registerChangeListeners(this);\n }\n\n /**\n * Returns the default configuration of simple axis\n * @return {Object} default configurations\n */\n static defaultConfig () {\n return defaultConfig;\n }\n\n /**\n * Sets a fixed baseline for the first ticks so that they can render effectively within\n * the given area\n *\n * @param {*} tickText\n * @param {*} config\n * @param {*} labelManager\n */\n setFixedBaseline () {\n return this;\n }\n\n /**\n *\n *\n * @readonly\n * @memberof SimpleAxis\n */\n scale (...params) {\n if (params.length) {\n this._scale = params[0];\n return this;\n }\n return this._scale;\n }\n\n /**\n *\n *\n * @readonly\n * @memberof SimpleAxis\n */\n axis (...params) {\n if (params.length) {\n this._axis = params[0];\n return this;\n }\n return this._axis;\n }\n\n /**\n *\n *\n * @param {*} d\n * @returns\n * @memberof SimpleAxis\n */\n domain (...domain) {\n if (domain.length) {\n this.scale().domain(domain[0]);\n this._domain = this.scale().domain();\n this.smartTicks(this.setTickConfig());\n this.store().commit(DOMAIN, this._domain);\n this.logicalSpace(null);\n return this;\n }\n return this._domain;\n }\n\n /**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\n dependencies () {\n return this._dependencies;\n }\n\n /**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\n createScale (config) {\n const {\n base,\n padding,\n interpolator,\n exponent\n } = config;\n const range = this.range();\n const scale = createScale({\n padding,\n interpolator,\n exponent,\n base,\n range,\n type: this.constructor.type()\n });\n\n return scale;\n }\n\n getTickFormatter (tickFormat, numberFormat) {\n if (tickFormat) {\n return ticks => (val, i) => tickFormat(numberFormat(val), i, ticks);\n }\n return () => val => numberFormat(val);\n }\n\n /**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\n createAxis (config) {\n const {\n tickFormat,\n numberFormat,\n orientation\n } = config;\n const axisClass = axisOrientationMap[orientation];\n\n if (axisClass) {\n const axis = axisClass(this.scale());\n this.formatter = this.getTickFormatter(tickFormat, numberFormat);\n\n return axis;\n }\n return null;\n }\n\n /**\n *\n *\n * @memberof SimpleAxis\n */\n setTickConfig () {\n return this;\n }\n\n /**\n *\n *\n * @param {*} axisTickLabels\n * @param {*} labelWidth\n * @returns\n * @memberof SimpleAxis\n */\n setRotationConfig (axisTickLabels, labelWidth) {\n const { orientation } = this.config();\n\n if (orientation === TOP || orientation === BOTTOM) {\n const range = this.range();\n const length = Math.abs(range[0] - range[1]);\n this.config({ labels: { rotation: 0 } });\n if (length > 0 && axisTickLabels.length * (labelWidth + this._minTickDistance.width) > length) {\n this.config({ labels: { rotation: -90 } });\n }\n }\n return this;\n }\n\n /**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\n adjustRange () {\n return this;\n }\n\n getScaleValue (domainVal) {\n if (domainVal === null || domainVal === undefined) {\n return undefined;\n }\n return this.scale()(domainVal);\n }\n\n /**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\n getTickSize () {\n return this.axis().tickSize();\n }\n\n /**\n * Gets the space occupied by the parts of an axis\n *\n * @return {Object} object with details about sizes of the axis.\n * @memberof SimpleAxis\n */\n getAxisDimensions () {\n this.axisDimensions(computeAxisDimensions(this));\n return this.axisDimensions();\n }\n\n /**\n * Gets the space occupied by the axis\n *\n * @return {Object} object with details about size of the axis.\n * @memberof SimpleAxis\n */\n getLogicalSpace () {\n if (!this.logicalSpace()) {\n this.logicalSpace(calculateContinousSpace(this));\n setOffset(this);\n this.logicalSpace();\n }\n return this.logicalSpace();\n }\n\n /**\n * Returns the value from the domain when given a value from the range.\n * @param {number} value Value from the range.\n * @return {number} Value\n */\n invert (...value) {\n const values = value.map(d => this.scale().invert(d)) || [];\n return value.length === 1 ? values[0] : values;\n }\n\n /**\n * Gets the nearest range value from the given range values.\n * @param {number} v1 Start range value\n * @param {number} v2 End range value\n * @return {Array} range values\n */\n getNearestRange (v1, v2) {\n let p1;\n let p2;\n let extent;\n const {\n type\n } = this.config();\n const scale = this.scale();\n const range = scale.range();\n const reverse = range[0] > range[1];\n\n if (type === BAND) {\n extent = scale.invertExtent(v1, v2);\n p1 = scale(reverse ? extent[extent.length - 1] : extent[0]);\n p2 = scale(reverse ? extent[0] : extent[extent.length - 1]) + scale.bandwidth();\n return [p1, p2];\n }\n return [v1, v2];\n }\n\n /**\n * This method is used to assign a domain to the axis.\n *\n * @param {Array} domain the domain of the scale\n * @memberof SimpleAxis\n */\n updateDomainBounds (domain) {\n let currentDomain = this.domain();\n if (this.config().domain) {\n currentDomain = this.config().domain;\n } else {\n if (currentDomain.length === 0) {\n currentDomain = domain;\n }\n if (domain.length) {\n currentDomain = [Math.min(currentDomain[0], domain[0]), Math.max(currentDomain[1], domain[1])];\n }\n }\n\n return this.domain(currentDomain);\n }\n\n /**\n *\n *\n * @param {*} domain\n * @returns\n * @memberof SimpleAxis\n */\n updateDomainCache (domain) {\n if (this._domainLock === false) {\n this.domain([]);\n this._domainLock = true;\n }\n const cachedDomain = [];\n domain && domain.forEach((d) => {\n d !== undefined && d !== null && cachedDomain.push(d);\n });\n return this.updateDomainBounds(cachedDomain);\n }\n\n getMinTickDifference () {\n return this.domain();\n }\n\n getFormattedTickValues (tickValues) {\n return tickValues;\n }\n\n /**\n *\n *\n * @param {*} tickValues\n * @returns\n * @memberof SimpleAxis\n */\n setTickValues () {\n const {\n tickValues\n } = this.config();\n\n if (tickValues) {\n tickValues instanceof Array && this.axis().tickValues(tickValues);\n return this;\n }\n return this;\n }\n\n /**\n * This method returns the width in pixels for one\n * unit along the axis. It is only applicable to band scale\n * and returns undefined for other scale type.\n *\n * @return {number} the width of one band along band scale axis\n * @memberof SimpleAxis\n */\n getUnitWidth () {\n return 0;\n }\n\n /**\n * This method returns an object that can be used to\n * reconstruct this instance.\n *\n * @return {Object} the serializable props of axis\n * @memberof SimpleAxis\n */\n serialize () {\n return {\n name: this.name,\n type: this.type,\n range: this.range(),\n config: this.config()\n };\n }\n\n /**\n * Returns the id of the axis.\n * @return {string} Unique identifier of the axis.\n */\n get id () {\n return this._id;\n }\n\n registerEvent (event, fn) {\n this._eventList.push({ name: event, action: fn });\n }\n\n /**\n *\n *\n * @param {*} fn\n * @memberof SimpleAxis\n */\n on (event, fn) {\n event = event || 'update';\n this.registerEvent(event, fn);\n }\n\n /**\n * This method is used to render the axis inside\n * the supplied svg container.\n *\n * @param {SVGElement} svg the svg element in which to render the path\n * @memberof SimpleAxis\n */\n /* istanbul ignore next */render () {\n if (this.mount()) {\n renderAxis(this);\n }\n return this;\n }\n\n /**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\n remove () {\n this.store().unsubscribeAll();\n selectElement(this.mount()).remove();\n return this;\n }\n\n /**\n *\n *\n * @memberof SimpleAxis\n */\n unsubscribe () {\n this.store().unsubscribeAll();\n return this;\n }\n\n /**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\n isReverse () {\n const range = this.range();\n return range[0] > range[1];\n }\n\n /**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\n getPixelToValueRatio () {\n const scale = this.scale();\n const range = scale.range();\n const domain = scale.domain();\n\n return Math.abs(range[1] - range[0]) / (domain[1] - domain[0]);\n }\n}\n\n","import { scaleMap } from '../../scale-creator';\n\nexport default class LinearInterpolator {\n\n createScale (config) {\n const {\n range\n } = config;\n const scaleFactory = scaleMap.linear;\n this._scale = scaleFactory().range(range);\n return this._scale;\n }\n\n getScaleValue (domainVal) {\n return this._scale(domainVal) + 0.5;\n }\n\n sanitizeDomain (domain) {\n return domain;\n }\n}\n","import { scaleMap } from '../../scale-creator';\n\nexport default class LogInterpolator {\n\n createScale (config) {\n const {\n range,\n base\n } = config;\n const scaleFactory = scaleMap.log;\n this._scale = scaleFactory().range(range).base(base);\n return this._scale;\n }\n\n getScaleValue (domainVal) {\n if (domainVal <= 0) {\n return 1;\n }\n\n return this._scale(domainVal) + 0.5;\n }\n\n sanitizeDomain (domain) {\n if (domain[0] <= 0) {\n return [Math.max(1, domain[0]), Math.max(1, domain[1])];\n } return domain;\n }\n}\n","import { scaleMap } from '../../scale-creator';\n\nexport default class PowInterpolator {\n\n createScale (config) {\n const {\n range,\n exponent\n } = config;\n const scaleFactory = scaleMap.pow;\n this._scale = scaleFactory().range(range).exponent(exponent);\n return this._scale;\n }\n\n getScaleValue (domainVal) {\n return this._scale(domainVal) + 0.5;\n }\n\n sanitizeDomain (domain) {\n return domain;\n }\n}\n","import { getSmallestDiff } from 'muze-utils';\nimport SimpleAxis from './simple-axis';\nimport { BOTTOM, TOP, LEFT, RIGHT } from '../enums/axis-orientation';\nimport { LINEAR, LOG, POW } from '../enums/scale-type';\nimport { LogInterpolator, PowInterpolator, LinearInterpolator } from './interpolators';\nimport { DOMAIN } from '../enums/constants';\nimport {\n getTickLabelInfo,\n getNumberOfTicks\n} from './helper';\n\nexport const interpolatorMap = {\n [LOG]: LogInterpolator,\n [POW]: PowInterpolator,\n [LINEAR]: LinearInterpolator\n};\n\nexport default class ContinousAxis extends SimpleAxis {\n constructor (config, dependencies) {\n config.tickFormat = config.tickFormat || (val => val);\n super(config, dependencies);\n }\n /**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\n createScale (config) {\n const {\n base,\n padding,\n interpolator,\n exponent\n } = config;\n const range = this.range();\n const InterpolatorCls = interpolatorMap[interpolator];\n\n this._interpolator = new InterpolatorCls();\n let scale = this._interpolator.createScale({\n padding,\n exponent,\n base,\n range\n });\n\n scale = scale.nice();\n return scale;\n }\n\n /**\n * This method is used to assign a domain to the axis.\n *\n * @param {Array} domain the domain of the scale\n * @memberof SimpleAxis\n */\n updateDomainBounds (domain) {\n let currentDomain = this.domain();\n if (this.config().domain) {\n currentDomain = this.config().domain;\n } else {\n if (currentDomain.length === 0) {\n currentDomain = domain;\n }\n if (domain.length) {\n currentDomain = [Math.min(currentDomain[0], domain[0]), Math.max(currentDomain[1], domain[1])];\n }\n }\n\n return this.domain(currentDomain);\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof ContinousAxis\n */\n static type () {\n return LINEAR;\n }\n\n getScaleValue (domainVal) {\n if (domainVal === null || domainVal === undefined) {\n return undefined;\n }\n return this._interpolator.getScaleValue(domainVal);\n }\n /**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\n getTickSize () {\n const {\n showInnerTicks,\n showOuterTicks\n } = this.config();\n const axis = this.axis();\n axis.tickSizeInner(showInnerTicks === false ? 0 : 6);\n axis.tickSizeOuter(showOuterTicks === false ? 0 : 6);\n return axis.tickSize();\n }\n\n /**\n *\n *\n * @param {*} d\n * @returns\n * @memberof SimpleAxis\n */\n domain (domain) {\n if (domain && domain.length) {\n const { nice } = this.config();\n if (domain.length && domain[0] === domain[1]) {\n domain = [0, +domain[0] * 2];\n }\n this.scale().domain(domain);\n nice && this.scale().nice();\n this._domain = this.scale().domain();\n this.store().commit(DOMAIN, this._domain);\n this.logicalSpace(null);\n return this;\n } return this._domain;\n }\n\n /**\n * This method is used to set the space availiable to render\n * the SimpleCell.\n *\n * @param {number} width The width of SimpleCell.\n * @param {number} height The height of SimpleCell.\n * @memberof AxisCell\n */\n setAvailableSpace (width = 0, height, padding, isOffset) {\n const {\n left,\n right,\n top,\n bottom\n } = padding;\n const {\n orientation,\n fixedBaseline\n } = this.config();\n const { tickLabelDim } = this.getAxisDimensions();\n this.availableSpace({ width, height });\n\n if (orientation === TOP || orientation === BOTTOM) {\n const labelSpace = tickLabelDim.width;\n this.range([(fixedBaseline ? 0 : (labelSpace / 2)) + left, width - right - labelSpace / 2]);\n const axisHeight = this.getLogicalSpace().height;\n isOffset && this.config({ yOffset: Math.max(axisHeight, height) });\n } else {\n const labelSpace = tickLabelDim.height;\n this.range([height - bottom - (fixedBaseline ? 1 : (labelSpace / 2)), labelSpace / 2 + top]);\n const axisWidth = this.getLogicalSpace().width;\n isOffset && this.config({ xOffset: Math.max(axisWidth, width) });\n }\n return this;\n }\n\n /**\n *\n *\n * @param {*} tickValues\n * @returns\n * @memberof SimpleAxis\n */\n setTickValues () {\n const {\n tickValues\n } = this.config();\n const axis = this.axis();\n\n if (tickValues) {\n tickValues instanceof Array && this.axis().tickValues(tickValues);\n return this;\n }\n axis.tickValues(this.getTickValues());\n return this;\n }\n\n /**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\n getTickValues () {\n let labelDim = 0;\n const {\n orientation,\n tickValues\n } = this.config();\n const range = this.range();\n const axis = this.axis();\n\n const availableSpace = Math.abs(range[0] - range[1]);\n\n const labelProps = getTickLabelInfo(this).largestLabelDim;\n\n if (tickValues) {\n return axis.scale().ticks(tickValues);\n }\n labelDim = labelProps[orientation === BOTTOM || orientation === TOP ? 'width' : 'height'];\n\n return getNumberOfTicks(availableSpace, labelDim, axis, this);\n }\n\n getMinTickDifference () {\n return getSmallestDiff(this.config().tickValues);\n }\n\n /**\n * Sets a fixed baseline for the first ticks so that they can render effectively within\n * the given area\n *\n * @param {*} tickText\n * @param {*} config\n * @param {*} labelManager\n */\n setFixedBaseline (tickText) {\n const {\n orientation,\n labels\n } = this.config();\n const {\n rotation\n } = labels;\n const axis = this.axis();\n const { width, height } = this._axisDimensions.largestLabelDim;\n axis.tickTransform((d, i) => {\n if (i === 0 && (orientation === LEFT || orientation === RIGHT)) {\n return `translate(0, -${(height) / 3}px)`;\n }\n if (i === 0 && (orientation === TOP || orientation === BOTTOM) && rotation === 0) {\n return `translate(${width / 2}px, ${0}px) rotate(${rotation}deg)`;\n } return '';\n });\n return tickText;\n }\n\n}\n","import SimpleAxis from './simple-axis';\nimport { BAND } from '../enums/scale-type';\nimport { TOP, BOTTOM } from '../enums/axis-orientation';\nimport { calculateBandSpace, setOffset } from './helper';\n\nexport default class BandAxis extends SimpleAxis {\n\n /**\n *\n *\n * @param {*} range\n * @returns\n * @memberof BandAxis\n */\n createScale (range) {\n const scale = super.createScale(range);\n const { padding } = this.config();\n if (typeof padding === 'number') {\n scale.padding(padding);\n }\n return scale;\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof BandAxis\n */\n static type () {\n return BAND;\n }\n\n /**\n *\n *\n * @param {*} width\n * @param {*} height\n * @param {*} padding\n * @param {*} isOffset\n * @memberof BandAxis\n */\n setAvailableSpace (width, height, padding, isOffset) {\n const {\n left,\n right,\n top,\n bottom\n } = padding;\n const {\n orientation,\n showAxisName,\n axisNamePadding\n } = this.config();\n const { axisLabelDim } = this.getAxisDimensions();\n const { height: axisDimHeight } = axisLabelDim;\n\n this.availableSpace({ width, height });\n if (orientation === TOP || orientation === BOTTOM) {\n // Set x axis range\n this.range([0, width - left - right]);\n const axisHeight = this.getLogicalSpace().height - (showAxisName === false ?\n (axisDimHeight + axisNamePadding) : 0);\n isOffset && this.config({ yOffset: Math.max(axisHeight, height) });\n } else {\n // Set y axis range\n this.range([height - bottom, top]);\n const axisWidth = this.getLogicalSpace().width - (showAxisName === false ? axisDimHeight : 0);\n isOffset && this.config({ xOffset: Math.max(axisWidth, width) });\n }\n return this;\n }\n\n /**\n *\n *\n * @returns\n * @memberof BandAxis\n */\n getUnitWidth () {\n return this.scale().bandwidth();\n }\n\n /**\n *\n *\n * @returns\n * @memberof BandAxis\n */\n setTickConfig () {\n let smartTicks = '';\n let smartlabel;\n const { maxWidth, maxHeight, tickFormat } = this.config();\n const { labelManager } = this._dependencies;\n const domain = this.axis().scale().domain();\n\n smartTicks = domain;\n const tickFormatter = tickFormat || (val => val);\n\n if (domain && domain.length) {\n smartTicks = domain.map((d, i) => {\n labelManager.useEllipsesOnOverflow(true);\n smartlabel = labelManager.getSmartText(tickFormatter(d, i, domain), maxWidth, maxHeight);\n return labelManager.constructor.textToLines(smartlabel);\n });\n }\n return smartTicks;\n }\n\n/**\n * Gets the space occupied by the axis\n *\n * @return {Object} object with details about size of the axis.\n * @memberof SimpleAxis\n */\n getLogicalSpace () {\n if (!this.logicalSpace()) {\n this.logicalSpace(calculateBandSpace(this));\n setOffset(this);\n this.logicalSpace();\n }\n return this.logicalSpace();\n }\n /**\n *\n *\n * @param {*} axisTickLabels\n * @param {*} labelWidth\n * @returns\n * @memberof BandAxis\n */\n setRotationConfig (axisTickLabels, labelWidth) {\n const { orientation } = this.config();\n const range = this.range();\n const availSpace = Math.abs(range[0] - range[1]);\n\n this.config({ labels: { rotation: 0, smartTicks: false } });\n if (orientation === TOP || orientation === BOTTOM) {\n const smartWidth = this.smartTicks().reduce((acc, n) => acc + n.width + this._minTickDistance.width, 0);\n // set multiline config\n if (availSpace > 0 && axisTickLabels.length * (labelWidth + this._minTickDistance.width) > availSpace) {\n if (availSpace && smartWidth < availSpace) {\n this.config({ labels: { smartTicks: true } });\n } else {\n this.config({ labels: { rotation: -90 } });\n }\n }\n }\n return this;\n }\n\n /**\n *\n *\n * @returns\n * @memberof BandAxis\n */\n getTickValues () {\n return this.axis().scale().domain();\n }\n\n /**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\n getTickSize () {\n const {\n showInnerTicks,\n showOuterTicks\n } = this.config();\n const axis = this.axis();\n\n axis.tickSizeInner(showInnerTicks ? 6 : 0);\n axis.tickSizeOuter(showOuterTicks ? 6 : 0);\n return axis.tickSize();\n }\n\n /**\n * This method is used to assign a domain to the axis.\n *\n * @param {Array} domain the domain of the scale\n * @memberof SimpleAxis\n */\n updateDomainBounds (domain) {\n let currentDomain = this.domain();\n if (this.config().domain) {\n currentDomain = this.config().domain;\n } else {\n if (currentDomain.length === 0) {\n currentDomain = domain;\n }\n currentDomain = currentDomain.concat(domain);\n }\n this.domain(currentDomain);\n return this;\n }\n\n /**\n * Returns the value from the domain when given a value from the range.\n * @param {number} value Value from the range.\n * @return {number} Value\n */\n invert (...value) {\n const values = value.map(d => this.scale().invert(d)) || [];\n return value.length === 1 ? values[0] && values[0].toString() : values.map(d => d.toString());\n }\n}\n","import { getSmallestDiff } from 'muze-utils';\nimport SimpleAxis from './simple-axis';\nimport { adjustRange } from './helper';\nimport { TIME } from '../enums/scale-type';\nimport { axisOrientationMap, BOTTOM, TOP } from '../enums/axis-orientation';\nimport { DOMAIN } from '../enums/constants';\n\n/**\n *\n *\n * @export\n * @class TimeAxis\n * @extends {SimpleAxis}\n */\nexport default class TimeAxis extends SimpleAxis {\n\n constructor (...params) {\n super(...params);\n this._minDiff = Infinity;\n }\n\n /**\n *\n *\n * @param {*} range\n * @returns\n * @memberof TimeAxis\n */\n createScale (range) {\n let scale = super.createScale(range);\n\n scale = scale.nice();\n return scale;\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof TimeAxis\n */\n static type () {\n return TIME;\n }\n\n /**\n *\n *\n * @returns\n * @memberof BandAxis\n */\n setTickConfig () {\n let smartTicks;\n let smartlabel;\n const { maxWidth, maxHeight, tickFormat } = this.config();\n const { labelManager } = this._dependencies;\n const domain = this.getTickValues();\n const scale = this.scale();\n\n smartTicks = domain;\n const tickFormatter = tickFormat || scale.tickFormat();\n\n if (domain && domain.length) {\n smartTicks = domain.map((d, i) => {\n smartlabel = labelManager.getSmartText(tickFormatter(d, i, domain), maxWidth, maxHeight);\n return labelManager.constructor.textToLines(smartlabel);\n });\n }\n return smartTicks;\n }\n\n /**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\n createAxis (config) {\n const {\n tickFormat,\n orientation\n } = config;\n const axisClass = axisOrientationMap[orientation];\n\n if (axisClass) {\n const axis = axisClass(this.scale());\n this.formatter = this.getTickFormatter(tickFormat);\n return axis;\n }\n return null;\n }\n\n getTickFormatter (tickFormat) {\n if (tickFormat) {\n return ticks => (val, i) => tickFormat(val, i, ticks);\n }\n return null;\n }\n\n /**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\n getTickSize () {\n const {\n showInnerTicks,\n showOuterTicks\n } = this.config();\n const axis = this.axis();\n axis.tickSizeInner(showInnerTicks === false ? 0 : 6);\n axis.tickSizeOuter(showOuterTicks === false ? 0 : 6);\n return super.getTickSize();\n }\n\n /**\n *\n *\n * @returns\n * @memberof TimeAxis\n */\n getTickValues () {\n return this.scale().ticks();\n }\n\n /**\n *\n *\n * @param {*} diff\n * @returns\n * @memberof TimeAxis\n */\n minDiff (diff) {\n this._minDiff = Math.min(this._minDiff, diff);\n return this;\n }\n\n /**\n *\n *\n * @param {*} axisTickLabels\n * @param {*} labelWidth\n * @returns\n * @memberof BandAxis\n */\n setRotationConfig (axisTickLabels, labelWidth) {\n const { orientation } = this.config();\n const range = this.range();\n const availSpace = Math.abs(range[0] - range[1]);\n\n this.config({ labels: { rotation: 0, smartTicks: false } });\n if (orientation === TOP || orientation === BOTTOM) {\n const smartWidth = this.smartTicks().reduce((acc, n) => acc + n.width, 0);\n // set multiline config\n if (availSpace > 0 && axisTickLabels.length * labelWidth > availSpace) {\n if (availSpace && smartWidth * 1.25 < availSpace) {\n this.config({ labels: { smartTicks: true } });\n }\n this.config({ labels: { rotation: -90 } });\n }\n }\n return this;\n }\n\n /**\n *\n *\n * @param {*} d\n * @returns\n * @memberof SimpleAxis\n */\n domain (domain) {\n if (domain) {\n const { nice } = this.config();\n\n if (domain.length && domain[0] === domain[1]) {\n domain = [0, +domain[0] * 2];\n }\n this.scale().domain(domain);\n nice && this.scale().nice();\n this._domain = this.scale().domain();\n this.smartTicks(this.setTickConfig());\n this.store().commit(DOMAIN, this._domain);\n this.logicalSpace(null);\n return this;\n } return this._domain;\n }\n\n getMinTickDifference () {\n return getSmallestDiff(this.config().tickValues);\n }\n\n /**\n *\n *\n * @param {*} width\n * @param {*} height\n * @param {*} padding\n * @param {*} isOffset\n * @memberof TimeAxis\n */\n setAvailableSpace (width, height, padding, isOffset) {\n const {\n left,\n right,\n top,\n bottom\n } = padding;\n const {\n orientation,\n showAxisName,\n axisNamePadding\n } = this.config();\n const domain = this.domain();\n const { axisLabelDim, tickLabelDim } = this.getAxisDimensions();\n const { height: axisDimHeight } = axisLabelDim;\n const { height: tickDimHeight, width: tickDimWidth } = tickLabelDim;\n\n this.availableSpace({ width, height });\n if (orientation === TOP || orientation === BOTTOM) {\n const labelSpace = tickDimWidth;\n this.range(adjustRange(this._minDiff, [labelSpace / 2, width - left - right - labelSpace / 2],\n domain, orientation));\n const axisHeight = this.getLogicalSpace().height - (showAxisName === false ?\n (axisDimHeight + axisNamePadding) : 0);\n isOffset && this.config({ yOffset: Math.max(axisHeight, height) });\n } else {\n const labelSpace = tickDimHeight;\n this.range(adjustRange(this._minDiff, [height - top - bottom - labelSpace / 2, labelSpace / 2],\n domain, orientation));\n const axisWidth = this.getLogicalSpace().width - (showAxisName === false ? axisDimHeight : 0);\n this.isOffset && this.config({ xOffset: Math.max(axisWidth, width) });\n }\n return this;\n }\n\n}\n","export const x11Colors = {\n Pink: { hex: 'ffc0cb', rgb: '255,192,203' },\n LightPink: { hex: 'ffb6c1', rgb: '255,182,193' },\n HotPink: { hex: 'ff69b4', rgb: '255,105,180' },\n DeepPink: { hex: 'ff1493', rgb: '255,20,147' },\n PaleVioletRed: { hex: 'db7093', rgb: '219,112,147' },\n MediumVioletRed: { hex: 'c71585', rgb: '199,21,133' },\n LightSalmon: { hex: 'ffa07a', rgb: '255,160,122' },\n Salmon: { hex: 'fa8072', rgb: '250,128,114' },\n DarkSalmon: { hex: 'e9967a', rgb: '233,150,122' },\n LightCoral: { hex: 'f08080', rgb: '240,128,128' },\n IndianRed: { hex: 'cd5c5c', rgb: '205,92,92' },\n Crimson: { hex: 'dc143c', rgb: '220,20,60' },\n FireBrick: { hex: 'b22222', rgb: '178,34,34' },\n DarkRed: { hex: '8b0000', rgb: '139,0,0' },\n Red: { hex: 'ff0000', rgb: '255,0,0' },\n OrangeRed: { hex: 'ff4500', rgb: '255,69,0' },\n Tomato: { hex: 'ff6347', rgb: '255,99,71' },\n Coral: { hex: 'ff7f50', rgb: '255,127,80' },\n DarkOrange: { hex: 'ff8c00', rgb: '255,140,0' },\n Orange: { hex: 'ffa500', rgb: '255,165,0' },\n Gold: { hex: 'ffd700', rgb: '255,215,0' },\n Yellow: { hex: 'ffff00', rgb: '255,255,0' },\n LightYellow: { hex: 'ffffe0', rgb: '255,255,224' },\n LemonChiffon: { hex: 'fffacd', rgb: '255,250,205' },\n LightGoldenrodYellow: { hex: 'fafad2', rgb: '250,250,210' },\n PapayaWhip: { hex: 'ffefd5', rgb: '255,239,213' },\n Moccasin: { hex: 'ffe4b5', rgb: '255,228,181' },\n PeachPuff: { hex: 'ffdab9', rgb: '255,218,185' },\n PaleGoldenrod: { hex: 'eee8aa', rgb: '238,232,170' },\n Khaki: { hex: 'f0e68c', rgb: '240,230,140' },\n DarkKhaki: { hex: 'bdb76b', rgb: '189,183,107' },\n Cornsilk: { hex: 'fff8dc', rgb: '255,248,220' },\n BlanchedAlmond: { hex: 'ffebcd', rgb: '255,235,205' },\n Bisque: { hex: 'ffe4c4', rgb: '255,228,196' },\n NavajoWhite: { hex: 'ffdead', rgb: '255,222,173' },\n Wheat: { hex: 'f5deb3', rgb: '245,222,179' },\n BurlyWood: { hex: 'deb887', rgb: '222,184,135' },\n Tan: { hex: 'd2b48c', rgb: '210,180,140' },\n RosyBrown: { hex: 'bc8f8f', rgb: '188,143,143' },\n SandyBrown: { hex: 'f4a460', rgb: '244,164,96' },\n Goldenrod: { hex: 'daa520', rgb: '218,165,32' },\n DarkGoldenrod: { hex: 'b8860b', rgb: '184,134,11' },\n Peru: { hex: 'cd853f', rgb: '205,133,63' },\n Chocolate: { hex: 'd2691e', rgb: '210,105,30' },\n SaddleBrown: { hex: '8b4513', rgb: '139,69,19' },\n Sienna: { hex: 'a0522d', rgb: '160,82,45' },\n Brown: { hex: 'a52a2a', rgb: '165,42,42' },\n Maroon: { hex: '800000', rgb: '128,0,0' },\n DarkOliveGreen: { hex: '556b2f', rgb: '85,107,47' },\n Olive: { hex: '808000', rgb: '128,128,0' },\n OliveDrab: { hex: '6b8e23', rgb: '107,142,35' },\n YellowGreen: { hex: '9acd32', rgb: '154,205,50' },\n LimeGreen: { hex: '32cd32', rgb: '50,205,50' },\n Lime: { hex: '00ff00', rgb: '0,255,0' },\n LawnGreen: { hex: '7cfc00', rgb: '124,252,0' },\n Chartreuse: { hex: '7fff00', rgb: '127,255,0' },\n GreenYellow: { hex: 'adff2f', rgb: '173,255,47' },\n SpringGreen: { hex: '00ff7f', rgb: '0,255,127' },\n MediumSpringGreen: { hex: '00fa9a', rgb: '0,250,154' },\n LightGreen: { hex: '90ee90', rgb: '144,238,144' },\n PaleGreen: { hex: '98fb98', rgb: '152,251,152' },\n DarkSeaGreen: { hex: '8fbc8f', rgb: '143,188,143' },\n MediumSeaGreen: { hex: '3cb371', rgb: '60,179,113' },\n SeaGreen: { hex: '2e8b57', rgb: '46,139,87' },\n ForestGreen: { hex: '228b22', rgb: '34,139,34' },\n Green: { hex: '008000', rgb: '0,128,0' },\n DarkGreen: { hex: '006400', rgb: '0,100,0' },\n MediumAquamarine: { hex: '66cdaa', rgb: '102,205,170' },\n Aqua: { hex: '00ffff', rgb: '0,255,255' },\n Cyan: { hex: '00ffff', rgb: '0,255,255' },\n LightCyan: { hex: 'e0ffff', rgb: '224,255,255' },\n PaleTurquoise: { hex: 'afeeee', rgb: '175,238,238' },\n Aquamarine: { hex: '7fffd4', rgb: '127,255,212' },\n Turquoise: { hex: '40e0d0', rgb: '64,224,208' },\n MediumTurquoise: { hex: '48d1cc', rgb: '72,209,204' },\n DarkTurquoise: { hex: '00ced1', rgb: '0,206,209' },\n LightSeaGreen: { hex: '20b2aa', rgb: '32,178,170' },\n CadetBlue: { hex: '5f9ea0', rgb: '95,158,160' },\n DarkCyan: { hex: '008b8b', rgb: '0,139,139' },\n Teal: { hex: '008080', rgb: '0,128,128' },\n LightSteelBlue: { hex: 'b0c4de', rgb: '176,196,222' },\n PowderBlue: { hex: 'b0e0e6', rgb: '176,224,230' },\n LightBlue: { hex: 'add8e6', rgb: '173,216,230' },\n SkyBlue: { hex: '87ceeb', rgb: '135,206,235' },\n LightSkyBlue: { hex: '87cefa', rgb: '135,206,250' },\n DeepSkyBlue: { hex: '00bfff', rgb: '0,191,255' },\n DodgerBlue: { hex: '1e90ff', rgb: '30,144,255' },\n CornflowerBlue: { hex: '6495ed', rgb: '100,149,237' },\n SteelBlue: { hex: '4682b4', rgb: '70,130,180' },\n RoyalBlue: { hex: '4169e1', rgb: '65,105,225' },\n Blue: { hex: '0000ff', rgb: '0,0,255' },\n MediumBlue: { hex: '0000cd', rgb: '0,0,205' },\n DarkBlue: { hex: '00008b', rgb: '0,0,139' },\n Navy: { hex: '000080', rgb: '0,0,128' },\n MidnightBlue: { hex: '191970', rgb: '25,25,112' },\n Lavender: { hex: 'e6e6fa', rgb: '230,230,250' },\n Thistle: { hex: 'd8bfd8', rgb: '216,191,216' },\n Plum: { hex: 'dda0dd', rgb: '221,160,221' },\n Violet: { hex: 'ee82ee', rgb: '238,130,238' },\n Orchid: { hex: 'da70d6', rgb: '218,112,214' },\n Fuchsia: { hex: 'ff00ff', rgb: '255,0,255' },\n Magenta: { hex: 'ff00ff', rgb: '255,0,255' },\n MediumOrchid: { hex: 'ba55d3', rgb: '186,85,211' },\n MediumPurple: { hex: '9370db', rgb: '147,112,219' },\n BlueViolet: { hex: '8a2be2', rgb: '138,43,226' },\n DarkViolet: { hex: '9400d3', rgb: '148,0,211' },\n DarkOrchid: { hex: '9932cc', rgb: '153,50,204' },\n DarkMagenta: { hex: '8b008b', rgb: '139,0,139' },\n Purple: { hex: '800080', rgb: '128,0,128' },\n Indigo: { hex: '4b0082', rgb: '75,0,130' },\n DarkSlateBlue: { hex: '483d8b', rgb: '72,61,139' },\n SlateBlue: { hex: '6a5acd', rgb: '106,90,205' },\n MediumSlateBlue: { hex: '7b68ee', rgb: '123,104,238' },\n White: { hex: 'ffffff', rgb: '255,255,255' },\n Snow: { hex: 'fffafa', rgb: '255,250,250' },\n Honeydew: { hex: 'f0fff0', rgb: '240,255,240' },\n MintCream: { hex: 'f5fffa', rgb: '245,255,250' },\n Azure: { hex: 'f0ffff', rgb: '240,255,255' },\n AliceBlue: { hex: 'f0f8ff', rgb: '240,248,255' },\n GhostWhite: { hex: 'f8f8ff', rgb: '248,248,255' },\n WhiteSmoke: { hex: 'f5f5f5', rgb: '245,245,245' },\n Seashell: { hex: 'fff5ee', rgb: '255,245,238' },\n Beige: { hex: 'f5f5dc', rgb: '245,245,220' },\n OldLace: { hex: 'fdf5e6', rgb: '253,245,230' },\n FloralWhite: { hex: 'fffaf0', rgb: '255,250,240' },\n Ivory: { hex: 'fffff0', rgb: '255,255,240' },\n AntiqueWhite: { hex: 'faebd7', rgb: '250,235,215' },\n Linen: { hex: 'faf0e6', rgb: '250,240,230' },\n LavenderBlush: { hex: 'fff0f5', rgb: '255,240,245' },\n MistyRose: { hex: 'ffe4e1', rgb: '255,228,225' },\n Gainsboro: { hex: 'dcdcdc', rgb: '220,220,220' },\n LightGray: { hex: 'd3d3d3', rgb: '211,211,211' },\n Silver: { hex: 'c0c0c0', rgb: '192,192,192' },\n DarkGrey: { hex: 'a9a9a9', rgb: '169,169,169' },\n Grey: { hex: '808080', rgb: '128,128,128' },\n DimGrey: { hex: '696969', rgb: '105,105,105' },\n LightSlateGrey: { hex: '778899', rgb: '119,136,153' },\n SlateGrey: { hex: '708090', rgb: '112,128,144' },\n DarkSlateGrey: { hex: '2f4f4f', rgb: '47,79,79' },\n Black: { hex: '000000', rgb: '0,0,0' }\n};\n","import {\n LINEAR\n} from '../enums/constants';\n/**\n * Set of default colors\n */\nexport const palette = [\n '#086bb6',\n '#f37d45',\n '#f5ce02',\n '#67bda0',\n '#c54e4e',\n '#ae70af'\n];\n\nexport const DEFAULT_GRADIENT_COLOR = '#eaeaea';\n\nexport const DEFAULT_CONFIG = {\n range: palette,\n value: palette[0],\n step: false,\n stops: 5,\n type: LINEAR\n};\n","import { mergeRecursive, detectColor, hexToHsv, rgbToHsv } from 'muze-utils';\nimport { x11Colors } from './color-maps';\nimport { palette, DEFAULT_GRADIENT_COLOR } from './defaults';\nimport { LINEAR, RGB, HEX, HSL, HSLA } from '../enums/constants';\n\nexport const getHslString = hslArr => `hsla(${hslArr[0] * 360},${hslArr[1] * 100}%,${hslArr[2] * 100}%,\\\n${hslArr[3] || 1})`;\n\nexport const convertToXllString = baseString => (baseString.split(' ') || [])\n .reduce((x, e) => `${x}${e.charAt(0).toUpperCase()}${e.slice(1)}`, '');\n\nexport const getActualHslColor = (e, paletteColor) => {\n let color = '';\n if (typeof e === 'string') {\n e = e.replace(/ /g, '');\n e = e.toLowerCase();\n if (detectColor(e) === HSL || detectColor(e) === HSLA) {\n color = e.match(/(\\d+(\\.\\d+)?)/g);\n color = [color[0] / 360, color[1] / 100, color[2] / 100, color[3] || 1];\n } else if (detectColor(e) === HEX) {\n color = hexToHsv(e);\n } else if (detectColor(e) === RGB) {\n const col = e.substring(e.indexOf('(') + 1, e.lastIndexOf(')')).split(/,\\s*/);\n color = rgbToHsv(...col);\n } else if (x11Colors[convertToXllString(e)]) {\n color = rgbToHsv(...x11Colors[convertToXllString(e)].rgb.split(','));\n }\n } else if (!(e instanceof Array)) {\n color = rgbToHsv(paletteColor);\n } else {\n color = e;\n }\n return color;\n};\n\nexport const PROPS = {\n config: {\n sanitization: (context, config) => {\n const defCon = mergeRecursive({}, context.constructor.defaultConfig());\n if (config.type === LINEAR) {\n config.range = config.range || [defCon.range[0]];\n config.range = config.range.length > 1 ? config.range : [DEFAULT_GRADIENT_COLOR, ...config.range];\n }\n const oldConfig = mergeRecursive(defCon, context.config());\n const newConfig = mergeRecursive(oldConfig, config);\n\n if (newConfig.range instanceof Array) {\n newConfig.range = newConfig.range.map((e, i) => getActualHslColor(e, palette[i]));\n newConfig.stops = config.stops || newConfig.range.length;\n }\n newConfig.value = getActualHslColor(newConfig.value, newConfig.value);\n return newConfig;\n }\n },\n domain: {},\n scale: {},\n uniqueValues: {}\n};\n","import { numberInterpolator, piecewiseInterpolator, hslInterpolator } from 'muze-utils';\nimport { CONTINOUS, DISCRETE } from '../enums/constants';\nimport { LINEAR, SEQUENTIAL, ORDINAL, QUANTILE } from '../enums/scale-type';\nimport { getHslString } from './props';\n\nconst getStops = (domain, stops) => {\n let newStops = [];\n\n if (stops instanceof Array) {\n newStops = stops.slice().sort();\n newStops = [...new Set([domain[0], ...stops, domain[1]])].sort();\n } else {\n const interpolator = numberInterpolator()(...domain);\n for (let i = 0; i <= stops; i++) {\n newStops[i] = interpolator(i / stops);\n }\n }\n\n if (newStops[0] < domain[0]) {\n newStops.shift();\n }\n return { domain, newStops };\n};\n\nconst rangeStops = (newStopsLength, range) => {\n let newRange = [];\n const maxRangeLength = Math.min(range.length, 18);\n\n if (newStopsLength > maxRangeLength) {\n const interpolator = piecewiseInterpolator()(hslInterpolator(), range.map(e => getHslString(e)));\n for (let i = 0; i < newStopsLength; i++) {\n newRange[i] = interpolator(i / (newStopsLength - 1));\n }\n } else {\n newRange = range.slice(0, newStopsLength);\n }\n return { newRange };\n};\n\n/**\n*\n*\n* @param {*} domain\n* @returns\n*/\nconst indexedDomain = (domain) => {\n const uniqueVals = domain;\n const retDomain = domain.map((d, i) => (i) / (domain.length - 1));\n return { domain: retDomain, uniqueVals, scaleDomain: [0, 1] };\n};\n\n/**\n *\n *\n * @param {*} domain\n * @returns\n */\nconst indexedDomainMeasure = (domain, stops, range) => {\n const uniqueVals = domain;\n return { domain, uniqueVals, scaleDomain: [0, 1], range };\n};\n\n/**\n *\n *\n * @param {*} domain\n * @returns\n */\nconst normalDomain = (domain, stops, range) => {\n const uniqueVals = domain;\n return { uniqueVals, domain, nice: true, range };\n};\n\n/**\n *\n *\n * @param {*} domain\n * @param {*} stops\n * @returns\n */\nconst steppedDomain = (domain, stops, range) => {\n const { domain: uniqueVals, newStops } = getStops(domain, stops);\n const { newRange } = rangeStops(newStops.length - 1, range);\n\n return { uniqueVals, domain: newStops, nice: true, range: newRange };\n};\n\nconst continousSteppedDomain = (domain, stops, range) => {\n const { domain: uniqueVals, newStops } = getStops(domain, range.length - 1);\n const hslRange = range.map(e => getHslString(e));\n return { uniqueVals, domain: newStops, nice: true, range: hslRange };\n};\n\n/**\n *\n *\n * @param {*} domainValue\n * @param {*} scale\n * @param {*} domain\n * @param {*} uniqueVals\n * @returns\n */\nconst uniqueRange = (domainValue, scale, domain, uniqueVals) => {\n const index = uniqueVals.indexOf(domainValue);\n const numVal = domain[index];\n return scale(numVal);\n};\n\n/**\n *\n *\n * @param {*} domainValue\n * @param {*} scale\n * @param {*} domain\n * @returns\n */\nconst indexedRange = (domainValue, scale, domain) => {\n const numVal = (domainValue - domain[0]) / (domain[domain.length - 1] - domain[0]);\n\n return scale(numVal);\n};\n\n/**\n *\n *\n * @param {*} domainValue\n * @param {*} scale\n */\nconst normalRange = (domainValue, scale) => scale(domainValue);\n\n/**\n *\n *\n * @param {*} stops\n */\nconst strategies = () => ({\n [`${CONTINOUS}-${CONTINOUS}-${SEQUENTIAL}`]: {\n scale: SEQUENTIAL,\n domainRange: () => indexedDomainMeasure,\n value: () => indexedRange\n },\n [`${CONTINOUS}-${DISCRETE}-${SEQUENTIAL}`]: {\n scale: SEQUENTIAL,\n domainRange: () => indexedDomainMeasure,\n value: () => indexedRange\n },\n [`${DISCRETE}-${DISCRETE}-${SEQUENTIAL}`]: {\n scale: SEQUENTIAL,\n domainRange: () => indexedDomain,\n value: () => uniqueRange\n },\n [`${DISCRETE}-${DISCRETE}-${ORDINAL}`]: {\n scale: ORDINAL,\n domainRange: () => normalDomain,\n value: () => normalRange\n },\n [`${CONTINOUS}-${CONTINOUS}-${ORDINAL}`]: {\n scale: LINEAR,\n domainRange: () => continousSteppedDomain,\n value: () => normalRange\n },\n [`${CONTINOUS}-${DISCRETE}-${ORDINAL}`]: {\n scale: QUANTILE,\n domainRange: () => steppedDomain,\n value: () => normalRange\n\n }\n});\n\n/**\n *\n *\n * @param {*} domainType\n * @param {*} rangeType\n * @param {*} schemeType\n * @param {*} stops\n */\nexport const strategyGetter = (domainType, rangeType, schemeType, stops) =>\n strategies(stops)[`${domainType}-${rangeType}-${schemeType || ''}`];\n","/**\n * @module Axis\n * This file declares a class that is used to render an axis to add meaning to\n * plots.\n */\nimport { getUniqueId, generateGetterSetters, rgbToHsv } from 'muze-utils';\nimport { createScale, getScheme, getSchemeType } from '../scale-creator';\nimport { CONTINOUS, DISCRETE, COLOR } from '../enums/constants';\nimport { strategyGetter } from './color-strategy';\nimport { DEFAULT_CONFIG } from './defaults';\nimport { PROPS, getHslString } from './props';\n\n/**\n* This class is used to instantiate a SimpleAxis.\n* @class SimpleAxis\n*/\nexport default class ColorAxis {\n\n /**\n * Creates an instance of SimpleAxis.\n * @param {Object} config input parameters.\n * @param {Object | undefined} params.range Type of color range.\n * @param {string} params.name the label to show on axis.\n * @param {string} params.type The type of scale to handle.\n * @memberof ColorAxis\n */\n constructor (config) {\n generateGetterSetters(this, PROPS);\n this.config(config);\n\n this._domainType = this._config.type === 'linear' ? CONTINOUS : DISCRETE;\n this._rangeType = (this._config.type === 'linear' && !this._config.step) ? CONTINOUS : DISCRETE;\n\n this._schemeType = getSchemeType(this._config.range);\n\n this._colorStrategy = this.setColorStrategy(this._domainType, this._rangeType, this._schemeType);\n this._scale = this.createScale(this._colorStrategy);\n\n this._id = getUniqueId();\n\n this.updateDomain(config.domain);\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof ColorAxis\n */\n static defaultConfig () {\n return DEFAULT_CONFIG;\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof ColorAxis\n */\n static type () {\n return COLOR;\n }\n\n /**\n *\n *\n * @param {*} colorStrategy\n * @returns\n * @memberof ColorAxis\n */\n createScale (colorStrategy) {\n const { range } = this.config();\n if (range && typeof (range) === 'string') {\n return getScheme(range);\n }\n return createScale({\n type: colorStrategy.scale,\n range\n });\n }\n\n /**\n *\n *\n * @param {*} domainType\n * @param {*} rangeType\n * @param {*} schemeType\n * @returns\n * @memberof ColorAxis\n */\n setColorStrategy (domainType, rangeType, schemeType) {\n const { stops } = this.config();\n\n return strategyGetter(domainType, rangeType, schemeType, stops);\n }\n\n /**\n *\n *\n * @param {*} domainVal\n * @returns\n * @memberof ColorAxis\n */\n getHslString (hslColorArray) {\n return getHslString(hslColorArray);\n }\n /**\n *\n *\n * @param {*} domainVal\n * @returns\n * @memberof ColorAxis\n */\n getColor (domainVal) {\n return this.getHslString(this.getRawColor(domainVal));\n }\n /**\n *\n *\n * @param {*} domainVal\n * @returns\n * @memberof ColorAxis\n */\n getRawColor (domainVal) {\n if (this.domain() && domainVal !== undefined) {\n const scale = this.scale();\n const range = scale.range ? scale.range() : null;\n const color = this._colorStrategy.value(range)(domainVal, scale, this.domain(), this.uniqueValues());\n\n if (typeof color === 'string') {\n const col = color.substring(color.indexOf('(') + 1, color.lastIndexOf(')')).split(/,\\s*/);\n return rgbToHsv(...col);\n }\n return [...color];\n }\n return [...this.config().value];\n }\n\n /**\n *\n *\n * @param {*} [domain=[]]\n * @returns\n * @memberof ColorAxis\n */\n updateDomain (domain = []) {\n if (domain.length) {\n const scale = this.scale();\n const range = scale.range ? scale.range() : null;\n const domainRangeFn = this._colorStrategy.domainRange();\n const scaleInfo = domainRangeFn(domain, this.config().stops, range);\n\n this.domain(scaleInfo.domain);\n scaleInfo.range && this.scale().range(scaleInfo.range);\n this.uniqueValues(scaleInfo.uniqueVals);\n this.scale().domain(scaleInfo.scaleDomain || this.domain());\n }\n return this;\n }\n\n /**\n * This method returns an object that can be used to\n * reconstruct this instance.\n *\n * @return {Object} the serializable props of axis\n * @memberof ShapeAxis\n */\n serialize () {\n return {\n type: this.constructor.type(),\n scale: this.scale(),\n domain: this.domain(),\n config: this.config()\n };\n }\n\n transformColor (color, transformationArr) {\n const h = color[0] * 360;\n const s = color[1] * 100;\n const l = color[2] * 100;\n const a = color[3] || 1;\n const newH = h + transformationArr[0];\n const newS = s + transformationArr[1];\n const newL = l + transformationArr[2];\n const newA = a + transformationArr[3] || 0;\n\n return { color: `hsla(${newH},${newS}%,${newL}%,${newA})`, hsla: [newH / 360, newS / 100, newL / 100, newA] };\n }\n\n /**\n * Returns the id of the axis.\n * @return {string} Unique identifier of the axis.\n */\n id () {\n return this._id;\n }\n\n}\n","export const DEFAULT_CONFIG = {\n value: 36,\n range: [36, 1000]\n};\n","import { numberInterpolator, piecewiseInterpolator } from 'muze-utils';\nimport { CONTINOUS, DISCRETE } from '../enums/constants';\nimport { LINEAR, THRESHOLD } from '../enums/scale-type';\n\n/**\n *\n *\n * @param {*} domain\n * @returns\n */\nconst indexedDomain = (domain) => {\n const uniqueVals = domain;\n const retDomain = domain.map((d, i) => (i) / (domain.length - 1));\n return { domain: retDomain, uniqueVals, scaleDomain: [0, 1] };\n};\n\n/**\n *\n *\n * @param {*} domain\n * @returns\n */\nconst normalDomain = (domain) => {\n const uniqueVals = domain;\n return { uniqueVals, domain };\n};\n\n/**\n *\n *\n * @param {*} domain\n * @param {*} intervals\n * @returns\n */\nconst steppedDomain = (domain, intervals) => {\n let newIntervals = [];\n if (intervals instanceof Array) {\n newIntervals = intervals.slice().sort();\n } else {\n const interpolator = numberInterpolator()(...domain);\n for (let i = 0; i < intervals; i++) {\n newIntervals[i] = interpolator(i / (intervals - 1));\n }\n }\n if (newIntervals[0] < domain[0]) {\n newIntervals.shift();\n }\n const retDomain = newIntervals;\n return { uniqueVals: newIntervals, domain: retDomain, nice: true };\n};\n\n/**\n *\n *\n * @param {*} domainValue\n * @param {*} scale\n * @param {*} domain\n * @param {*} uniqueVals\n * @returns\n */\nconst discreteRange = (domainValue, scale, domain) => {\n const numVal = (domainValue - domain[0]) / (domain[domain.length - 1] - domain[0]);\n const interpolator = numberInterpolator()(...scale.range());\n return interpolator(numVal);\n};\n\n/**\n *\n *\n * @param {*} domainValue\n * @param {*} scale\n * @param {*} domain\n * @returns\n */\nconst pieceWiseRange = (domainValue, scale, domain, uniqueVals) => {\n const index = uniqueVals.indexOf(domainValue);\n const numVal = domain[index];\n const fn = piecewiseInterpolator()(numberInterpolator(), [...scale.range()]);\n return fn(numVal);\n};\n\n/**\n *\n *\n * @param {*} domainValue\n * @param {*} scale\n */\nconst normalRange = (domainValue, scale) => scale(domainValue);\n\n/**\n *\n *\n * @param {*} intervals\n */\nconst strategies = {\n [`${DISCRETE}-${CONTINOUS}`]: {\n scale: LINEAR,\n domain: indexedDomain,\n range: pieceWiseRange\n },\n [`${CONTINOUS}-${CONTINOUS}`]: {\n scale: LINEAR,\n domain: normalDomain,\n range: normalRange\n },\n [`${CONTINOUS}-${DISCRETE}`]: {\n scale: THRESHOLD,\n domain: steppedDomain,\n range: discreteRange\n }\n};\n\n/**\n *\n *\n * @param {*} domainType\n * @param {*} rangeType\n * @param {*} schemeType\n * @param {*} intervals\n */\nexport const strategyGetter = (domainType, rangeType) =>\n strategies[`${domainType}-${rangeType}`];\n","export const PROPS = {\n config: {},\n domain: {\n sanitization: (context, value) => {\n context.scale().domain(value);\n return value;\n }\n },\n range: {},\n scale: {},\n uniqueValues: {}\n};\n","/**\n * @module Axis\n * This file declares a class that is used to render an axis to add meaning to\n * plots.\n */\nimport { getUniqueId, generateGetterSetters } from 'muze-utils';\nimport { createScale } from '../scale-creator';\nimport { DEFAULT_CONFIG } from './defaults';\nimport { SIZE, CONTINOUS, DISCRETE } from '../enums/constants';\nimport { strategyGetter } from './size-strategy';\nimport { PROPS } from './props';\n\n/**\n* This class is used to instantiate a SimpleAxis.\n* @class SimpleAxis\n*/\nexport default class SizeAxis {\n\n /**\n * Creates an instance of SimpleAxis.\n * @param {Object} config input parameters.\n * @memberof SizeAxis\n */\n constructor (config) {\n generateGetterSetters(this, PROPS);\n\n this._id = getUniqueId();\n this._config = Object.assign({}, this.constructor.defaultConfig(), config);\n // @todo: Will use configuration override using scale decorator\n this._domainType = this._config.type === 'linear' ? CONTINOUS : DISCRETE;\n this._rangeType = CONTINOUS;\n\n this._sizeStrategy = this.setStrategy(this._domainType, this._rangeType);\n this._scale = this.createScale(this._sizeStrategy);\n this._range = this._config.range;\n\n this.updateDomain(config.domain);\n }\n\n /**\n *\n *\n * @param {*} domainType\n * @param {*} rangeType\n * @param {*} schemeType\n * @returns\n * @memberof ColorAxis\n */\n setStrategy (domainType, rangeType) {\n return strategyGetter(domainType, rangeType);\n }\n\n /**\n *\n *\n * @returns\n * @memberof SizeAxis\n */\n createScale (strategy) {\n const {\n range\n } = this.config();\n return createScale({\n type: strategy.scale,\n range\n });\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof ColorAxis\n */\n static defaultConfig () {\n return DEFAULT_CONFIG;\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof ColorAxis\n */\n static type () {\n return SIZE;\n }\n\n /**\n *\n *\n * @param {*} domainVal\n * @returns\n * @memberof SizeAxis\n */\n getSize (domainVal = 0) {\n let sizeVal = 1;\n const {\n value\n } = this.config();\n const scale = this.scale();\n const domain = this.domain() || [1, 1];\n\n if (!scale || domain[0] === domain[1]) {\n sizeVal = value;\n } else {\n return this._sizeStrategy.range(domainVal, scale, this.domain(), this.uniqueValues());\n }\n return sizeVal;\n }\n\n /**\n * This method is used to assign a domain to the axis.\n *\n * @param {Array} domain the domain of the scale\n * @memberof SizeAxis\n */\n updateDomain (domain) {\n if (domain) {\n const domainFn = this._sizeStrategy.domain;\n\n const domainInfo = domainFn(domain, this.config().intervals);\n\n this.domain(domainInfo.domain);\n this.uniqueValues(domainInfo.uniqueVals);\n\n this.scale().domain(domainInfo.scaleDomain || this.domain());\n }\n return this;\n }\n\n /**\n * This method returns an object that can be used to\n * reconstruct this instance.\n *\n * @return {Object} the serializable props of axis\n * @memberof ShapeAxis\n */\n serialize () {\n return {\n type: this.constructor.type(),\n scale: this.scale(),\n domain: this.domain(),\n range: this.range(),\n config: this.config()\n };\n }\n\n /**\n * Returns the id of the axis.\n * @return {string} Unique identifier of the axis.\n */\n id () {\n return this._id;\n }\n}\n","export const DEFAULT_CONFIG = {\n generator: null,\n value: 'circle',\n range: ['circle', 'diamond', 'star', 'cross', 'square', 'wye', 'triangle']\n};\n","export const PROPS = {\n config: {},\n domain: {},\n scale: {},\n uniqueValues: {},\n generator: {}\n};\n\n","/**\n * @module Axis\n * This file declares a class that is used to render an axis to add meaning to\n * plots.\n */\nimport { getUniqueId, getSymbol, generateGetterSetters, mergeRecursive } from 'muze-utils';\nimport { createScale } from '../scale-creator';\nimport { DEFAULT_CONFIG } from './defaults';\nimport { SHAPE } from '../enums/constants';\nimport { shapeGenerator } from './helper';\nimport { PROPS } from './props';\n\n/**\n* This class is used to instantiate a SimpleAxis.\n* @class SimpleAxis\n*/\nexport default class ShapeAxis {\n /**\n * Creates an instance of SimpleAxis.\n * @param {Object} params input parameters.\n * @param {Object | undefined} params.range Type of color scheme.\n * @memberof ShapeAxis\n */\n constructor (config) {\n generateGetterSetters(this, PROPS);\n\n this._id = getUniqueId();\n this._config = Object.assign({}, this.constructor.defaultConfig());\n this._config = mergeRecursive(this._config, config);\n\n this._scale = createScale({\n type: 'ordinal',\n range: this._config.range\n });\n this.updateDomain(config.domain);\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof ColorAxis\n */\n static defaultConfig () {\n return DEFAULT_CONFIG;\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof ColorAxis\n */\n static type () {\n return SHAPE;\n }\n\n /**\n *\n *\n * @param {*} value\n * @returns\n * @memberof ShapeAxis\n */\n getShape (value) {\n if (!this.scale() || !this.domain() || !value) {\n return this.config().value;\n }\n\n if (this._generatedShapes) {\n return this._generatedShapes[value];\n }\n\n const shapeType = this.scale()(value);\n if (shapeType === 'string') {\n return getSymbol(shapeType);\n }\n\n return shapeType;\n }\n\n /**\n * This method is used to assign a domain to the axis.\n *\n * @param {Array} domain the domain of the scale\n * @memberof ShapeAxis\n */\n updateDomain (domain = []) {\n if (domain.length) {\n this.uniqueValues(domain);\n this.domain(domain);\n this.scale().domain(domain);\n\n if (this.config().generator) {\n this._generatedShapes = shapeGenerator(domain, this.config().generator);\n }\n }\n return this;\n }\n\n /**\n * This method returns an object that can be used to\n * reconstruct this instance.\n *\n * @return {Object} the serializable props of axis\n * @memberof ShapeAxis\n */\n serialize () {\n return {\n type: this.constructor.type(),\n scale: this.scale(),\n domain: this.domain(),\n range: this.config().range,\n config: this.config()\n };\n }\n\n /**\n * Returns the id of the axis.\n * @return {string} Unique identifier of the axis.\n */\n id () {\n return this._id;\n }\n}\n","/**\n *\n *\n * @param {*} domain\n * @param {*} generatorFn\n * @returns\n */\nexport const shapeGenerator = (domain, generatorFn) => {\n const generatedShapes = {};\n domain.forEach((value) => {\n generatedShapes[value] = generatorFn(value);\n });\n return generatedShapes;\n};\n","import * as ScaleType from './enums/scale-type';\n\nconst DATA_TYPES = {\n DIMENSION: 'dimension',\n CATEGORICAL: 'categorical',\n MEASURE: 'measure',\n DATETIME: 'temporal'\n};\n\n/**\n * Map of DataModel types to associated field types.\n */\nexport const dataTypeScaleMap = {\n [DATA_TYPES.DIMENSION]: ScaleType.BAND,\n [DATA_TYPES.MEASURE]: ScaleType.LINEAR,\n [DATA_TYPES.DATETIME]: ScaleType.TIME\n};\n\n","import { nestCollection } from 'muze-utils';\n\n/**\n * Create multiple datasets from a single dataset by grouping the data using\n * a dimensional field.\n * @param {Array} schema Name and type of fields are stored in schema\n * @param {Array} data Data array\n * @param {Object} config Configuration object\n * @return {Array} Grouped data array\n */\nexport default (schema, data, config) => {\n const groupBy = config.groupBy instanceof Array ? config.groupBy : [config.groupBy];\n const groupByIndices = groupBy.map(fieldName => schema.findIndex(d => d.name === fieldName));\n\n if (groupByIndices.find(d => d === -1) !== undefined) {\n throw new Error(`Groupby field ${groupBy} not found in schema`);\n }\n\n return nestCollection({\n keys: groupByIndices,\n data\n });\n};\n","/**\n * @module Transform\n * This file exports a function that is used to implement\n * the identity transform\n */\n /* eslint no-unused-vars: 0 */\n /**\n * This function accepts data and returns the data unchanged.\n * @param {Object} schema The schema.\n * @param {Array} data The data array.\n * @param {Object} config The config object.\n * @return {Array} The unchanged data.\n */\n function identityTransform (schema, data, config) {\n return data;\n }\n\n export default identityTransform;\n","/**\n * @module Transform\n * This file exports the transform factory.\n */\nimport * as TransformType from '../enums/transform-type';\nimport identity from '../identity-transform';\nimport group from '../group-transform';\nimport stack from '../stack-transform';\n\n/* istanbul ignore next */\nconst transformMap = {\n [TransformType.IDENTITY]: identity,\n [TransformType.GROUP]: group,\n [TransformType.STACK]: stack\n};\n\n/**\n * This function is used to retirn a transform associated\n * with the given type.\n *\n * @param {string} type The type of the transform.\n * @return {Function} The transform function.\n */\nfunction transformFactory (type) {\n const transform = transformMap[type];\n if (typeof transform !== 'function') {\n throw new Error('Invalid transform type supplied.');\n }\n return transform;\n}\n\nexport default transformFactory;\n","/**\n * @module Transform\n * This module exports constants that are used to reference transforms in\n * a consistent manner throughout the project.\n */\n/* eslint one-var: 0 */\n export const IDENTITY = 'identity';\n export const GROUP = 'group';\n export const STACK = 'stack';\n export const FRACTURE = 'fracture';\n","import { stack } from 'muze-utils';\n\nimport group from '../group-transform';\n/*\n Normalize the data to a form which can be given to d3 stack for stacking the data\n ['Product', 'Sales', 'Region'],\n 0 ['A', 2000, 'North'],\n 1 ['A', 3000, 'South'],\n 2 ['B', 3000, 'South'],\n 3 ['B', 2000, 'North'],\n 4 ['C', 3000, 'South'],\n 5 ['C', 2000, 'North']\n |\n |\n ['Product', 'North', 'South'],\n ['A', 2000, 3000],\n ['B', 2000, 3000],\n ['C', 2000, 3000]\n*/\n// eslint-disable-next-line require-jsdoc\nconst normalizeData = (data, schema, valueField, uniqueField, groupBy) => {\n const groupedData = group(schema, data, {\n groupBy: uniqueField\n });\n const uniqueFieldIndex = schema.findIndex(d => d.name === uniqueField);\n const valueFieldIndex = schema.findIndex(d => d.name === valueField);\n const seriesKeyIndex = schema.findIndex(d => d.name === groupBy);\n const seriesKeys = data.map(d => d[seriesKeyIndex]).filter((item, pos, arr) => arr.indexOf(item) === pos).sort();\n const fieldNames = schema.reduce((acc, obj, i) => {\n acc[i] = obj.name;\n return acc;\n }, {});\n const dataArr = groupedData.map((arr) => {\n const tuples = {};\n const rowObj = arr.values.reduce((acc, row) => {\n acc = row.reduce((obj, value, i) => {\n if (i === seriesKeyIndex) {\n obj[value] = row[valueFieldIndex];\n tuples[value] = row;\n } else if (i !== valueFieldIndex) {\n obj[fieldNames[i]] = value;\n }\n return obj;\n }, acc);\n return acc;\n }, {});\n rowObj._tuple = tuples;\n // Set missing values field to zero value\n seriesKeys.forEach((seriesKey) => {\n if (rowObj[seriesKey] === undefined) {\n rowObj[seriesKey] = 0;\n const newArr = new Array(arr.values[0].length);\n newArr[uniqueFieldIndex] = arr.key;\n newArr[seriesKeyIndex] = seriesKey;\n rowObj._tuple[seriesKey] = newArr;\n }\n });\n return rowObj;\n });\n\n return {\n data: dataArr,\n keys: seriesKeys\n };\n};\n/**\n * Generate a stacked representation of data\n * @param {Array} schema schema Array\n * @param {Array} data data array\n * @param {Object} config Configuration object\n * @return {Array} stacked data\n */\nexport default (schema, data, config) => {\n const uniqueField = config.uniqueField;\n const valueField = config.value;\n const groupBy = config.groupBy;\n const sort = config.sort || 'descending';\n const normalizedData = normalizeData(data, schema, valueField, uniqueField, groupBy);\n const keys = normalizedData.keys;\n const map = {};\n const orderBy = config.orderBy;\n const orderIndex = schema.findIndex(d => d.name === orderBy);\n const groupByIndex = schema.findIndex(d => d.name === groupBy);\n if (orderIndex !== -1) {\n keys.forEach((key) => {\n const name = data.find(d => d[groupByIndex] === key);\n map[key] = name[orderIndex];\n });\n normalizedData.keys.sort((a, b) => map[a].localeCompare(map[b]));\n }\n\n const stackData = stack({\n keys: normalizedData.keys,\n offset: config.offset || 'diverging',\n order: sort,\n data: normalizedData.data\n });\n stackData.forEach((seriesData) => {\n seriesData.forEach((dataObj) => {\n dataObj.data = dataObj.data._tuple[seriesData.key];\n });\n });\n return stackData;\n};\n\n","import {\n FieldType,\n getDomainFromData,\n setStyles,\n easeFns,\n selectElement,\n DimensionSubtype\n} from 'muze-utils';\nimport { ScaleType } from '@chartshq/muze-axis';\nimport { transformFactory } from '@chartshq/transform';\nimport { IDENTITY, STACK, GROUP, COLOR, SHAPE, SIZE, ENCODING } from '../enums/constants';\n\nconst BAND = ScaleType.BAND;\n\nexport const getLayerColor = ({ datum, index }, { colorEncoding, colorAxis, colorFieldIndex }) => {\n let rawColor = '';\n let color = '';\n if (colorEncoding && colorEncoding.value instanceof Function) {\n color = colorEncoding.value(datum, index);\n rawColor = colorEncoding.value(datum, index);\n } else {\n rawColor = colorAxis.getRawColor(datum._data[colorFieldIndex]);\n color = colorAxis.getHslString(rawColor);\n }\n return { color, rawColor };\n};\n\nconst transfromColor = (colorAxis, datum, styleType, intensity) => {\n datum.meta.stateColor[styleType] = datum.meta.stateColor[styleType] || datum.meta.originalColor;\n const fillColorInfo = colorAxis.transformColor(datum.meta.stateColor[styleType], intensity);\n datum.meta.stateColor[styleType] = fillColorInfo.hsla;\n\n return fillColorInfo;\n};\n\nexport const applyInteractionStyle = (context, selectionSet, interactionStyles, config) => {\n const elements = context.getPlotElementsFromSet(selectionSet);\n const axes = context.axes();\n const colorAxis = axes.color;\n const apply = config.apply;\n const interactionType = config.interactionType;\n interactionStyles.forEach((style) => {\n const styleType = style.type;\n elements.style(styleType, ((d) => {\n const { colorTransform, stateColor, originalColor } = d.meta;\n colorTransform[interactionType] = colorTransform[interactionType] || {};\n if (apply && !colorTransform[interactionType][styleType]) {\n // fade selections\n colorTransform[interactionType][styleType] = style.intensity;\n const color = transfromColor(colorAxis, d, styleType, style.intensity).color;\n return color;\n }\n if (!apply && colorTransform[interactionType][styleType]) {\n // unfade selections\n colorTransform[interactionType][styleType] = null;\n return transfromColor(colorAxis, d, styleType, style.intensity.map(e => -e)).color;\n }\n const [h, s, l, a] = stateColor[styleType] ? stateColor[styleType] : originalColor;\n return `hsla(${h * 360},${s * 100}%,${l * 100}%, ${a || 1})`;\n }));\n });\n};\n\n/**\n *\n *\n * @param {*} selectionSet\n * @param {*} className\n * @param {*} hasFaded\n */\nexport const fadeUnfadeSelection = (context, selectionSet, hasFaded, interaction) => {\n const interactionConfig = { interaction, apply: hasFaded };\n applyInteractionStyle(context, selectionSet, 'fade', interactionConfig);\n};\n\n/**\n *\n *\n * @param {*} selectionSet\n * @param {*} className\n * @param {*} hasFaded\n */\nexport const focusUnfocusSelection = (context, selectionSet, isFocussed, interaction) => {\n const interactionConfig = { interaction, apply: isFocussed };\n applyInteractionStyle(context, selectionSet, 'focus', interactionConfig);\n};\n\n/**\n *\n *\n * @param {*} axes\n * @returns\n */\nexport const getAxesScales = (axes) => {\n const [xAxis, yAxis] = [ENCODING.X, ENCODING.Y].map(e => axes[e]);\n const [xScale, yScale] = [xAxis, yAxis].map(e => e && e.scale());\n return {\n xAxis,\n yAxis,\n xScale,\n yScale\n };\n};\n\n/**\n *\n *\n * @param {*} encoding\n * @param {*} fieldsConfig\n * @returns\n */\nexport const getEncodingFieldInf = (encoding, fieldsConfig) => {\n const [xField, yField, x0Field, y0Field, colorField, shapeField, sizeField] =\n [ENCODING.X, ENCODING.Y, ENCODING.X0, ENCODING.Y0, COLOR, SHAPE, SIZE].map(e => encoding[e] &&\n encoding[e].field);\n\n const [xFieldType, yFieldType] = [xField, yField, x0Field, y0Field].map(e => fieldsConfig[e] &&\n fieldsConfig[e].def.type);\n\n const [xFieldSubType, yFieldSubType] = [xField, yField].map(e => fieldsConfig[e] && (fieldsConfig[e].def.subtype ||\n fieldsConfig[e].def.type));\n\n const [xFieldIndex, yFieldIndex, x0FieldIndex, y0FieldIndex] = [xField, yField, x0Field, y0Field]\n .map(e => fieldsConfig[e] && fieldsConfig[e].index);\n\n return {\n xField,\n yField,\n colorField,\n shapeField,\n sizeField,\n x0Field,\n y0Field,\n xFieldType,\n yFieldType,\n xFieldSubType,\n yFieldSubType,\n xFieldIndex,\n yFieldIndex,\n x0FieldIndex,\n y0FieldIndex\n };\n};\n\n/**\n *\n *\n * @param {*} layerConfig\n * @param {*} fieldsConfig\n * @returns\n */\nexport const getValidTransform = (layerConfig, fieldsConfig, encodingFieldInf) => {\n let transformType;\n const {\n transform\n } = layerConfig;\n const {\n xField,\n yField,\n xFieldType,\n yFieldType\n } = encodingFieldInf;\n const groupByField = transform.groupBy;\n const groupByFieldMeasure = fieldsConfig[groupByField] && fieldsConfig[groupByField].def.type === FieldType.MEASURE;\n transformType = transform.type;\n if (!xField || !yField || groupByFieldMeasure || !groupByField || xFieldType === FieldType.DIMENSION &&\n yFieldType === FieldType.DIMENSION) {\n transformType = IDENTITY;\n }\n return transformType;\n};\n\n/**\n *\n *\n * @param {*} dataModel\n * @param {*} config\n * @param {*} transformType\n * @returns\n */\nexport const transformData = (dataModel, config, transformType, encodingFieldInf) => {\n const data = dataModel.getData({ withUid: true });\n const schema = data.schema;\n const transform = config.transform;\n const {\n xField,\n yField,\n xFieldType,\n yFieldType\n } = encodingFieldInf;\n const uniqueField = xFieldType === FieldType.MEASURE ? yField : xField;\n\n return transformFactory(transformType)(schema, data.data, {\n groupBy: transform.groupBy,\n uniqueField,\n sort: transform.sort || 'none',\n offset: transform.offset,\n orderBy: transform.orderBy,\n value: yFieldType === FieldType.MEASURE ? yField : xField\n }, data.uids);\n};\n\nexport const getIndividualClassName = (d, i, data, context) => {\n const className = context.config().individualClassName;\n let classNameStr = '';\n if (className instanceof Function) {\n classNameStr = className(d, i, data, context);\n }\n return classNameStr;\n};\n\n/*\n * This method resolves the x, y, x0 and y0 values from the transformed data.\n * It also checks the type of transformed data for example, if it is a stacked data\n * then it fetches the y and y0 values from the stacked data.\n * @param {Array.} transformedData transformed data\n * @param {Object} fieldsConfig field definitions\n * @param {string} transformType type of transformed data - stack, group or identity.\n * @return {Array.} Normalized data\n*/\nexport const getNormalizedData = (transformedData, fieldsConfig, encodingFieldInf, transformType) => {\n const transformedDataArr = transformType === IDENTITY ? [transformedData] : transformedData;\n const {\n xFieldType,\n xFieldIndex,\n yFieldIndex,\n x0FieldIndex,\n y0FieldIndex\n } = encodingFieldInf;\n const fieldsLen = Object.keys(fieldsConfig).length;\n /**\n * Returns normalized data from transformed data. It recursively traverses through\n * the transformed data if there it is nested.\n */\n return transformedDataArr.map((data) => {\n const values = transformType === GROUP ? data.values : data;\n return values.map((d) => {\n let pointObj = {};\n let tuple;\n if (transformType === STACK) {\n tuple = d.data || [];\n let y;\n let y0;\n let x;\n let x0;\n if (d[1] >= d[0]) {\n y = x0 = d[1];\n x = y0 = d[0];\n } else {\n y = x0 = d[0];\n x = y0 = d[1];\n }\n\n pointObj = xFieldType === FieldType.MEASURE ? {\n x,\n x0,\n y: tuple[yFieldIndex],\n y0: tuple[yFieldIndex]\n } : {\n x: tuple[xFieldIndex],\n x0: tuple[xFieldIndex],\n y,\n y0\n };\n pointObj._data = tuple;\n pointObj._id = tuple[fieldsLen];\n } else {\n pointObj = {\n x: d[xFieldIndex],\n y: d[yFieldIndex],\n x0: d[x0FieldIndex],\n y0: d[y0FieldIndex]\n };\n pointObj._data = d;\n pointObj._id = d[fieldsLen];\n }\n return pointObj;\n });\n }).filter(d => d.length);\n};\n\nexport const calculateDomainFromData = (data, encodingFieldInf, transformType) => {\n const {\n xFieldSubType,\n yFieldSubType,\n xField,\n yField,\n x0Field,\n y0Field\n } = encodingFieldInf;\n const domains = {};\n const yEnc = ENCODING.Y;\n const xEnc = ENCODING.X;\n if (xField) {\n domains.x = getDomainFromData(data, x0Field || transformType === STACK ? [xEnc, ENCODING.X0] : [xEnc, xEnc],\n xFieldSubType);\n }\n if (yField) {\n domains.y = getDomainFromData(data, y0Field || transformType === STACK ? [ENCODING.Y0, ENCODING.Y] :\n [yEnc, yEnc], yFieldSubType);\n }\n\n return domains;\n};\n\nexport const attachDataToVoronoi = (voronoi, points) => {\n voronoi.data([].concat(...points).filter(d => d._id !== undefined).map((d) => {\n const point = d.update;\n return {\n x: point.x,\n y: point.y,\n data: d\n };\n }));\n};\n\n/**\n *\n *\n * @param {*} target\n * @param {*} styles\n * @param {*} remove\n */\nexport const updateStyle = (target, styles, remove) => {\n for (const key in styles) {\n if ({}.hasOwnProperty.call(styles, key)) {\n target.style(key, remove ? null : styles[key]);\n }\n }\n};\n\n/**\n *\n *\n * @param {*} mount\n * @param {*} context\n */\nexport const animateGroup = (mount, context) => {\n let groupTransition;\n let update;\n const { transition, groupAnimateStyle } = context;\n const { duration, effect, disabled } = transition;\n if (groupAnimateStyle) {\n setStyles(mount.node(), groupAnimateStyle.enter);\n update = groupAnimateStyle.update;\n if (!disabled) {\n groupTransition = mount.transition()\n .ease(easeFns[effect])\n .duration(duration)\n .on('end', function () {\n updateStyle(selectElement(this), update, true);\n });\n } else {\n groupTransition = mount;\n }\n updateStyle(groupTransition, update);\n }\n};\n\nexport const positionPoints = (context, points) => {\n const positioner = context.encodingTransform();\n if (positioner) {\n return positioner(points, context, { smartLabel: context._dependencies.smartLabel });\n }\n return points;\n};\n\n/**\n * Gets the width of each group. It gets the width from axis if it is available for\n * example when the scale is nominal else it calculates the width from the\n * range of the axis and number of data points.\n *\n * @param {SimpleAxis} axis instance of axis\n * @param {number} minDiff Minimum difference between data points\n * @return {number} width of each bar\n * @private\n*/\nexport const getGroupSpan = (axis, minDiff) => {\n let groupSpan;\n const width = axis.getUnitWidth();\n const scale = axis.scale();\n const range = scale.range();\n const domain = scale.domain();\n !width ? groupSpan = (Math.abs(range[1] - range[0]) / Math.abs(domain[1] - domain[0])) * minDiff :\n (groupSpan = width);\n\n return groupSpan;\n};\n\nexport const getPlotMeasurement = (context, dimensionalValues) => {\n const fieldInfo = context.encodingFieldsInf();\n const axes = context.axes();\n const transformType = context.transformType();\n const config = context.config();\n const bandScale = context._bandScale;\n\n return ['x', 'y'].map((type) => {\n let span = 0;\n let groupSpan = 0;\n let padding = 0;\n let offsetValues = [];\n if (fieldInfo[`${type}FieldType`] === FieldType.DIMENSION) {\n let actualGroupWidth;\n const isTemporal = fieldInfo[`${type}FieldSubType`] === DimensionSubtype.TEMPORAL;\n const timeDiff = isTemporal ? context.dataProps().timeDiffs[type] : 0;\n const axis = axes[type];\n const pad = config[`pad${type.toUpperCase()}`];\n const innerPadding = config.innerPadding;\n const keys = dimensionalValues;\n const scale = axis.scale();\n groupSpan = getGroupSpan(axis, timeDiff);\n const isAxisBandScale = axis.constructor.type() === BAND;\n const axisPadding = axis.config().padding;\n // If it is a grouped bar then the width of each bar in a grouping is retrieved from\n // a band scale. The band scale will have range equal to width of one group of bars and\n // the domain is set to series keys.\n if (transformType === 'group') {\n const groupPadding = isAxisBandScale ? 0 : axisPadding * groupSpan / 2;\n bandScale.range([groupPadding, groupSpan - groupPadding]).domain(keys).paddingInner(innerPadding);\n span = bandScale.bandwidth();\n actualGroupWidth = groupSpan - (isAxisBandScale ? 0 : axisPadding * groupSpan);\n offsetValues = keys.map(key => bandScale(key) - (isAxisBandScale ? 0 : (groupSpan / 2)));\n } else if (pad !== undefined) {\n let offset;\n if (isAxisBandScale) {\n const step = scale.step();\n offset = scale.padding() * step;\n span = scale.bandwidth() + offset;\n } else {\n span = groupSpan;\n }\n offsetValues = keys.map(() => (isAxisBandScale ? -(offset / 2) : -(span / 2)));\n } else {\n padding = isAxisBandScale ? 0 : axisPadding * groupSpan;\n span = groupSpan - padding;\n actualGroupWidth = span;\n offsetValues = keys.map(() => (isAxisBandScale ? 0 : -(span / 2)));\n }\n\n groupSpan = actualGroupWidth;\n padding = isAxisBandScale ? axisPadding * axis.scale().step() : axisPadding * groupSpan;\n }\n\n return {\n span,\n offsetValues,\n groupSpan,\n padding\n };\n });\n};\n","import { nextFrame } from 'muze-utils';\nimport { getValidTransform, getEncodingFieldInf } from '../helpers';\nimport * as PROPS from '../enums/props';\n\nexport const listenerMap = context => [\n {\n props: [PROPS.TRANSFORMED_DATA],\n listener: fetch => fetch(PROPS.DATA, PROPS.CONFIG, (dataModel, config) => {\n const dataModelValue = dataModel.value;\n const configValue = config.value;\n const encodingValue = configValue && configValue.encoding;\n if (dataModelValue && encodingValue) {\n const fieldsConfig = dataModelValue.getFieldsConfig();\n const encodingFieldsInf = getEncodingFieldInf(encodingValue, fieldsConfig);\n context.encodingFieldsInf(encodingFieldsInf);\n context.transformType(getValidTransform(configValue, fieldsConfig, encodingFieldsInf));\n return context.getTransformedData(dataModelValue, configValue, context.transformType(),\n encodingFieldsInf);\n }\n return null;\n }),\n type: 'computed'\n },\n {\n props: [PROPS.NORMALIZED_DATA],\n listener: fetch => fetch(PROPS.TRANSFORMED_DATA, (transformedData) => {\n const transformedDataValue = transformedData.value;\n if (transformedDataValue) {\n const fieldsConfig = context.data().getFieldsConfig();\n return context.getNormalizedData(transformedDataValue, fieldsConfig);\n }\n return null;\n }),\n type: 'computed'\n },\n {\n props: [PROPS.DOMAIN],\n listener: fetch => fetch(PROPS.NORMALIZED_DATA, (normalizedData) => {\n const normalizedDataValue = normalizedData.value;\n if (normalizedDataValue) {\n return context.calculateDomainFromData(normalizedDataValue, context.encodingFieldsInf(),\n context.data().getFieldsConfig());\n }\n return null;\n }),\n type: 'computed'\n },\n {\n props: [PROPS.DATA],\n listener: (data) => {\n if (data[1]) {\n nextFrame(() => {\n context.store().commit(PROPS.DATA_UPDATED, true);\n });\n }\n },\n type: 'registerImmediateListener'\n },\n {\n props: [PROPS.MOUNT, PROPS.DATA_UPDATED],\n listener: (mount, dataUpdated) => {\n if (mount[1] && dataUpdated[1]) {\n context.render(mount[1]);\n context.dependencies().throwback.commit('onlayerdraw', true);\n }\n },\n type: 'registerChangeListener'\n }\n];\n\n","import { mergeRecursive } from 'muze-utils';\nimport * as PROPS from '../enums/props';\n\nexport const defaultOptions = {\n [PROPS.CONFIG]: {\n value: null,\n meta: {\n sanitization: (config, oldConfig, context) => {\n const constructor = context.constructor;\n const newConf = mergeRecursive({}, constructor.defaultConfig());\n return constructor.defaultPolicy(newConf, config);\n }\n }\n },\n [PROPS.DATA]: {\n value: null,\n meta: {\n preset: (data, context) => {\n if (context._cacheEnabled) {\n context._cachedData.push(data);\n } else {\n context._cachedData = [data];\n }\n }\n }\n },\n [PROPS.MOUNT]: {\n value: null\n },\n [PROPS.AXES]: {\n value: null\n },\n [PROPS.MEASUREMENT]: {\n value: null\n }\n};\n","import {\n getUniqueId,\n mergeRecursive,\n Store,\n FieldType,\n selectElement,\n ReservedFields,\n registerListeners,\n transactor,\n DataModel,\n clone\n} from 'muze-utils';\nimport { SimpleLayer } from '../simple-layer';\nimport * as PROPS from '../enums/props';\nimport {\n transformData,\n calculateDomainFromData,\n getNormalizedData,\n applyInteractionStyle\n} from '../helpers';\nimport { listenerMap } from './listener-map';\nimport { defaultOptions } from './default-options';\n\n/**\n * An abstract class which gives defination of common layer functionality like\n * - transfromation data for various {@link mode}\n * - calculating data domain\n * - linking dependent layers\n * - merging policy of configuration\n * - interaction sideffect helpers\n * - retrieving dom elements from data using id\n * - retrieving the physical dimensions of marks\n * - disposing layer\n *\n * Every layer has to extend base layer and give concrete definition.\n * This layer does not have any default visual. A new layer has to define the logic of `render` for rendering the\n * visuals\n *\n * @public\n * @class\n * @namespace Muze\n */\nexport default class BaseLayer extends SimpleLayer {\n\n /**\n * Creates a layer using a configuration and data.\n *\n * @public\n *\n * @param {DataModel} data Instance of DataModel to be used. This DataModel instance serves as the data for a layer.\n * @param {Object} axes Axes instances to be used for rendering the layer. Axes are used for mapping data from\n * value to px.\n * @param {SimpleAxis} axes.x X axis of the layer. Based on the type of variable it gets instance of BandAxis,\n * TimeAxis, ContinuousAxis\n * @param {SimpleAxis} axes.y X axis of the layer. Based on the type of variable it gets instance of BandAxis,\n * TimeAxis, ContinuousAxis\n * @param {ColorAxis} axes.color Axis for coloring a layer using color interpolators\n * @param {ShapeAxis} axes.shape Axis for providing a shape\n * @param {SizeAxis} axes.shape Axis for determining size of a mark using size interpolator\n * @param {LayerConfig} config Configuration of the layer\n * @param {Object} dependencies Dependencies of the layer\n * @param {SmartLabel} smartLabel Smartlabel singleton instance\n */\n constructor (data, axes, config, dependencies) {\n super();\n this.store(new Store({\n DATA: null,\n [PROPS.DATA_UPDATED]: null\n }));\n transactor(this, defaultOptions, this.store().model);\n this.data(data);\n this.axes(axes);\n this.config(config);\n this.alias(this.constructor.formalName() + getUniqueId());\n this.dependencies(dependencies);\n this._points = [];\n this._cachedData = [];\n this._id = getUniqueId();\n this._measurement = {};\n registerListeners(this, listenerMap);\n }\n\n /**\n * Creates a layer instance\n * @return {BaseLayer} Instance of a layer\n */\n static create (...params) {\n return new this(...params);\n }\n\n /**\n * Default configuration of the layer. This configuration gets merged to the user passed configuration using a\n * plolicy. Base layer only returns part of configuraion, any layer overridding base layer should return its own\n * configuration.\n *\n * @public\n * @static\n *\n * @return {Object} Default configuration\n */\n static defaultConfig () {\n return {\n transform: {\n type: 'identity'\n }\n };\n }\n\n /**\n * Policy defines how user config gets merged to default config. The default policy here does a deep copy\n * operation.\n * Any policy which does more than deep copying should define the policy as a static member.\n *\n * @static\n * @public\n *\n * @param {LayerConfig} conf Configuration with which the user config will be merged\n * @param {LayerConfig} userConf Configuration given by the user\n *\n * @return {LayerConfig} Merged layer configuration\n */\n static defaultPolicy (conf, userConf) {\n return mergeRecursive(conf, userConf);\n }\n\n /**\n * Determines a name for a layer. This name of the layer is used in the input data to refer to this layer.\n * ```\n * .layer([\n * mark: 'bar',\n * encoding: { ... }\n * ])\n * ```\n *\n * @static\n * @public\n *\n * @returns {string} name of layer\n */\n static formalName () {\n return 'base';\n }\n\n store (...store) {\n if (store.length) {\n this._store = store[0];\n return this;\n }\n return this._store;\n }\n\n encodingFieldsInf (...fieldsInf) {\n if (fieldsInf.length) {\n this._encodingFieldsInf = fieldsInf[0];\n return this;\n }\n return this._encodingFieldsInf;\n }\n\n encodingTransform (...encodingTransform) {\n if (encodingTransform.length) {\n this._encodingTransform = encodingTransform[0];\n return this;\n }\n return this._encodingTransform;\n }\n\n /**\n * Provides a alias for a layer. Like it's possible to have same layer (like bar) multiple times, but among multiple\n * layers of same type if one layer has to be referred, alias is used. If no alias is given then `formalName` is set\n * as the alias name.\n *\n * @public\n *\n * If used as setter\n * @param {string} alias Name of the alias\n * @return {BaseLayer} Instance of current base layer\n *\n * If used as getter\n * @return {string} Alias of the current layer\n */\n alias (...params) {\n if (params.length) {\n this._alias = params[0];\n return this;\n }\n return this._alias || this.constructor.formalName();\n }\n\n dependencies (...params) {\n if (params.length) {\n this._dependencies = params[0];\n return this;\n }\n return this._dependencies;\n }\n\n enableCaching () {\n this._cacheEnabled = true;\n return this;\n }\n\n clearCaching () {\n this._cacheEnabled = false;\n return this.data(this._cachedData[0]);\n }\n\n /**\n * Serialize the schema. Merge config is used for serialization.\n *\n * @public\n *\n * @return {LayerConfig} Serialized schema\n */\n serialize () {\n return this.config();\n }\n\n /**\n * Returns the unique identifier of this layer. Id is auto generated during the creation proceess of a schema.\n *\n * @return {string} id of the layer\n */\n id () {\n return this._id;\n }\n\n /**\n * Gets the transform method from transform factory based on type of transform. It then calls the\n * transform method with the data and passes the configuration parameters of transform such as\n * groupBy, value field, etc.\n *\n * @public\n *\n * @param {DataModel} dataModel Instance of DataModel\n * @param {Object} config Configuration for transforming data\n * @return {Array.} Transformed data.\n */\n getTransformedData (dataModel, config, transformType, encodingFieldsInf) {\n return transformData(dataModel, config, transformType, encodingFieldsInf);\n }\n\n /**\n * Calculates the domain from the data.\n * It checks the type of field and calculates the domain based on that. For example, if it\n * is a quantitative or temporal field, then it calculates the min and max from the data or\n * if it is a nominal field then it gets all the values from the data of that field.\n * @param {Array} data DataArray\n * @param {Object} fieldsConfig Configuration of fields\n * @return {Array} Domain values array.\n */\n calculateDomainFromData (data) {\n let domains = {};\n const isEmpty = this.data().isEmpty();\n\n if (!isEmpty) {\n domains = calculateDomainFromData(data, this.encodingFieldsInf(), this.transformType());\n }\n return domains;\n }\n\n shouldDrawAnchors () {\n return false;\n }\n\n /**\n * Returns the domain for the axis.\n *\n * @param {string} encodingType type of encoding x, y, etc.\n * @return {Object} Axis domains\n */\n getDataDomain (encodingType) {\n const domains = this.store().get(PROPS.DOMAIN);\n return encodingType !== undefined ? domains[encodingType] || [] : domains;\n }\n\n /**\n * Returns the domain for the axis.\n *\n * @param {string} encodingType type of encoding x, y, etc.\n * @return {Object} Axis domains\n */\n getNormalizedData (transformedData, fieldsConfig) {\n return getNormalizedData(transformedData, fieldsConfig, this.encodingFieldsInf(), this.transformType());\n }\n\n /**\n * Abstract method for getting nearest point\n * @return {BaseLayer} Instance of base layer\n */\n getNearestPoint () {\n return null;\n }\n\n applyInteractionStyle (interactionType, selectionSet, apply) {\n const interactionConfig = this.config().interaction || {};\n\n const interactionStyles = interactionConfig[interactionType];\n if (interactionStyles) {\n applyInteractionStyle(this, selectionSet, interactionStyles, {\n apply,\n interactionType\n });\n }\n }\n\n /**\n *\n *\n * @returns\n * @memberof BaseLayer\n */\n transformType (...transformType) {\n if (transformType.length) {\n this._transformType = transformType[0];\n return this;\n }\n return this._transformType;\n }\n\n /**\n * Renders the layer\n * @return {BaseLayer} Instance of the layer.\n */\n render () {\n return this;\n }\n\n /**\n *\n *\n * @returns\n * @memberof BaseLayer\n */\n elemType () {\n return 'g';\n }\n\n /**\n * Disposes the entire layer\n * @return {BaseLayer} Instance of layer.\n */\n remove () {\n this.store().unsubscribeAll();\n selectElement(this.mount()).remove();\n return this;\n }\n\n /**\n * Stores point in an object with key as the categorical value or temporal value\n *\n * @param {string} key categorical value or temporal value\n * @param {Object} data Information of the data point\n * @return {BarLayer} Instance of bar layer\n */\n cachePoint (key, data) {\n if (key === null) {\n return this;\n }\n const pointMap = this._pointMap;\n !pointMap[key] && (pointMap[key] = []);\n pointMap[key].push(data);\n return this;\n }\n\n /**\n *\n *\n * @param {*} dataProps\n * @returns\n * @memberof BaseLayer\n */\n dataProps (...dataProps) {\n if (dataProps.length) {\n this._dataProps = dataProps[0];\n return this;\n }\n return this._dataProps;\n }\n\n /**\n *\n *\n * @param {*} data\n * @param {*} id\n * @returns\n * @memberof BaseLayer\n */\n getIdentifiersFromData (data) {\n const schema = this.data().getData().schema;\n const fieldsConfig = this.data().getFieldsConfig();\n const identifiers = [[], []];\n const {\n xFieldType,\n yFieldType,\n xField,\n yField\n } = this.encodingFieldsInf();\n\n const [xMeasure, yMeasure] = [xFieldType, yFieldType].map(type => type === FieldType.MEASURE);\n schema.forEach((d, i) => {\n const name = d.name;\n if (fieldsConfig[name].def.type === FieldType.DIMENSION) {\n identifiers[0].push(name);\n identifiers[1].push(data[i]);\n }\n });\n\n if (xMeasure && yMeasure) {\n const xMeasureIndex = fieldsConfig[xField].index;\n const yMeasureIndex = fieldsConfig[yField].index;\n identifiers[0].push(...[xField, yField]);\n identifiers[1].push(...[data[xMeasureIndex], data[yMeasureIndex]]);\n }\n return identifiers;\n }\n\n getPlotSpan () {\n return {\n x: 0,\n y: 0\n };\n }\n\n getPlotPadding () {\n return {\n x: 0,\n y: 0\n };\n }\n\n /**\n *\n *\n * @param {*} identifiers\n * @returns\n * @memberof BaseLayer\n */\n getPointsFromIdentifiers (identifiers, config = {}) {\n const getAllAttrs = config.getAllAttrs;\n const getBBox = config.getBBox;\n if (!this.data()) {\n return [];\n }\n let fieldNames;\n let values;\n if (identifiers instanceof DataModel) {\n const dataObj = identifiers.getData();\n fieldNames = dataObj.schema.map(d => d.name);\n values = dataObj.data;\n } else {\n fieldNames = identifiers[0];\n values = identifiers.slice(1, identifiers.length);\n }\n\n const points = this._points;\n const fieldsConfig = this.data().getFieldsConfig();\n\n const filteredPoints = [].concat(...points).filter((point) => {\n const { _data, _id } = point;\n\n return fieldNames.every((field, idx) => {\n if (field in fieldsConfig && fieldsConfig[field].def.type === FieldType.DIMENSION) {\n return values.findIndex(d => d[idx] === _data[fieldsConfig[field].index]) !== -1;\n } else if (field === ReservedFields.ROW_ID) {\n return values.findIndex(d => d[idx] === _id) !== -1;\n } return true;\n });\n });\n return getAllAttrs ? filteredPoints : filteredPoints.map((d) => {\n const obj = clone(d);\n if (getBBox) {\n const update = obj.update || obj;\n if (obj.size !== undefined) {\n const sizeVal = Math.sqrt(obj.size / Math.PI) * 2;\n update.width = sizeVal;\n update.height = sizeVal;\n update.x -= sizeVal / 2;\n update.y -= sizeVal / 2;\n } else {\n if (update.width === undefined) {\n update.width = 2;\n }\n if (update.height === undefined) {\n update.height = 2;\n }\n }\n }\n\n return obj.update || obj;\n }).sort((a, b) => a.y - b.y);\n }\n\n getTransformedDataFromIdentifiers (identifiers) {\n const { data: identifierData, schema: identifierSchema } = identifiers.getData();\n const normalizedData = this.store().get(PROPS.NORMALIZED_DATA);\n const fieldsConfig = this.data().getFieldsConfig();\n const {\n yField,\n xField,\n yFieldType,\n xFieldType\n } = this.encodingFieldsInf();\n let measureIndex;\n let enc;\n if (xFieldType === FieldType.MEASURE) {\n measureIndex = fieldsConfig[xField].index;\n enc = 'x';\n } else if (yFieldType === FieldType.MEASURE) {\n measureIndex = fieldsConfig[yField].index;\n enc = 'y';\n }\n\n const transformedData = [];\n normalizedData.forEach((dataArr) => {\n dataArr.forEach((dataObj) => {\n const tupleArr = dataObj._data;\n const exist = identifierSchema.every((obj, i) =>\n identifierData.findIndex(d => tupleArr[fieldsConfig[obj.name].index] === d[i]) !== -1);\n if (exist) {\n const transformedVal = dataObj[enc];\n const row = dataObj._data;\n const tuple = {};\n for (const key in fieldsConfig) {\n const index = fieldsConfig[key].index;\n tuple[key] = row[index];\n if (index === measureIndex) {\n tuple[key] = transformedVal;\n }\n }\n transformedData.push(tuple);\n }\n });\n });\n\n return [transformedData, this.data().getData().schema];\n }\n\n /**\n *\n *\n * @param {*} set\n * @returns\n * @memberof BaseLayer\n */\n getPlotElementsFromSet (set) {\n return selectElement(this.mount()).selectAll(this.elemType()).filter(data =>\n (data ? set.indexOf(data._id) !== -1 : false));\n }\n}\n","import {\n selectElement,\n makeElement,\n pathInterpolators,\n Symbols\n} from 'muze-utils';\nimport { updateStyle } from '../../helpers';\n\nconst line = Symbols.line;\n\n/**\n * Draws a line from the points\n * Generates a svg path string\n * @param {Object} params Contains container, points and interpolate attribute.\n */\nexport const drawLine = (context) => {\n let filteredPoints;\n const { container, points, interpolate, connectNullData, className, style, transition } = context;\n const mount = selectElement(container).attr('class', className);\n const curveInterpolatorFn = pathInterpolators[interpolate];\n const linepath = line()\n .curve(curveInterpolatorFn)\n .x(d => d.update.x)\n .y(d => d.update.y)\n .defined(d => d.update.y !== null);\n\n filteredPoints = points;\n if (connectNullData) {\n filteredPoints = points.filter(d => d.update.y !== null);\n }\n\n updateStyle(mount, style);\n let element = makeElement(mount, 'path', [1]);\n element.classed(points[0].className, true);\n if (!transition.disabled) {\n element = element.transition().duration(transition.duration);\n }\n element.attr('d', linepath(filteredPoints))\n .style('fill-opacity', 0);\n return element;\n};\n","import { CLASSPREFIX } from '../../enums/constants';\n\nexport const defaultConfig = {\n classPrefix: CLASSPREFIX,\n defClassName: 'layer-line',\n className: '',\n interpolate: 'linear',\n transform: {\n type: 'group'\n },\n interaction: {\n highlight: [{\n type: 'stroke',\n intensity: [0, 0, -15, 0]\n }],\n fade: [{\n type: 'stroke',\n intensity: [0, 0, +15, 0]\n }],\n focus: [{\n type: 'stroke',\n intensity: [0, 0, +15, 0]\n }]\n },\n nearestPointThreshold: 20,\n encoding: {\n color: {},\n x: {},\n y: {},\n strokeOpacity: {\n value: 1\n }\n },\n transition: {\n effect: 'cubic',\n duration: 1000\n },\n connectNullData: false\n};\n\n","import {\n Voronoi,\n getQualifiedClassName,\n selectElement,\n makeElement,\n FieldType,\n getObjProp\n} from 'muze-utils';\nimport { BaseLayer } from '../../base-layer';\nimport { drawLine } from './renderer';\nimport { defaultConfig } from './default-config';\nimport { ENCODING } from '../../enums/constants';\nimport * as PROPS from '../../enums/props';\nimport {\n attachDataToVoronoi,\n animateGroup,\n getLayerColor,\n positionPoints,\n getIndividualClassName\n} from '../../helpers';\n\nimport './styles.scss';\n\n/**\n * Line Layer creates a line plot.\n * Example :-\n * const config = {\n * encoding = {\n * x: {\n * field: 'date'\n * },\n * y: {\n * field: 'sales'\n * }\n * }\n * };\n * const linelayer = layerFactory.getLayer('line', [dataModel, axes, config]);\n * linelayer.render(container);\n * @class\n */\nexport default class LineLayer extends BaseLayer {\n\n /**\n *Creates an instance of LineLayer.\n * @param {*} args\n * @memberof LineLayer\n */\n constructor (...args) {\n super(...args);\n this._voronoi = new Voronoi();\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof LineLayer\n */\n static formalName () {\n return 'line';\n }\n\n /**\n *\n *\n * @returns\n * @memberof LineLayer\n */\n elemType () {\n return 'path';\n }\n\n /**\n * Default configuration of line layer\n * @return {Object} Default configuration of layer\n */\n static defaultConfig () {\n return defaultConfig;\n }\n\n /**\n *\n *\n * @static\n * @param {*} conf\n * @param {*} userConf\n * @returns\n * @memberof LineLayer\n */\n static defaultPolicy (conf, userConf) {\n const config = BaseLayer.defaultPolicy(conf, userConf);\n const encoding = config.encoding;\n const transform = config.transform;\n const colorField = encoding.color && encoding.color.field;\n\n if (colorField && !transform.groupBy) {\n transform.groupBy = colorField;\n }\n return config;\n }\n\n /**\n * Returns the draw method for line\n * @return {Function} Draw method of line layer\n */\n getDrawFn () {\n return drawLine;\n }\n\n /**\n * Applies selection styles to the elements that fall within the selection set.\n * @param {Array} selectionSet Array of tuple ids.\n * @param {Object} config Configuration for selection.\n * @return {BarLayer} Instance of bar layer.\n */\n highlightPoint () {\n return this;\n }\n\n /**\n * Removes selection styles to the elements that fall within the selection set.\n * @param {Array} selectionSet Array of tuple ids.\n * @param {Object} config Configuration for selection.\n * @return {BarLayer} Instance of bar layer.\n */\n dehighlightPoint () {\n return this;\n }\n\n focusSelection () {\n return this;\n }\n\n focusOutSelection () {\n return this;\n }\n\n fadeOutSelection () {\n return this;\n }\n\n unfadeSelection () {\n return this;\n }\n\n shouldDrawAnchors () {\n return true;\n }\n\n /**\n * Generates the x and y positions for each point\n * @param {Array} data Data Array\n * @param {Object} encoding Visual Encodings of the layer\n * @param {Object} axes Contains the axis\n * @param {number} seriesIndex index of series\n * @return {Array} Array of points\n */\n translatePoints (data, encodingFieldsInf, axes) {\n let points = [];\n const xAxis = axes.x;\n const yAxis = axes.y;\n const colorAxis = axes.color;\n const encoding = this.config().encoding;\n const { xFieldType, yFieldType } = encodingFieldsInf;\n const isXDim = xFieldType === FieldType.DIMENSION;\n const isYDim = yFieldType === FieldType.DIMENSION;\n const key = isXDim ? ENCODING.X : (isYDim ? ENCODING.Y : null);\n const colorEncoding = encoding.color;\n const colorField = colorEncoding.field;\n const fieldsConfig = this.data().getFieldsConfig();\n const colorFieldIndex = colorField && fieldsConfig[colorField].index;\n const style = {};\n const meta = {};\n\n points = data.map((d, i) => {\n const xPx = xAxis.getScaleValue(d.x) + xAxis.getUnitWidth() / 2;\n const yPx = yAxis.getScaleValue(d.y);\n const { color, rawColor } = getLayerColor({ datum: d, index: i }, {\n colorEncoding, colorAxis, colorFieldIndex });\n\n style.stroke = color;\n style['fill-opacity'] = 0;\n meta.stateColor = {};\n meta.originalColor = rawColor;\n meta.colorTransform = {};\n\n const point = {\n enter: {},\n update: {\n x: xPx,\n y: d.y === null ? null : yPx\n },\n style,\n _data: d._data,\n _id: d._id,\n rowId: d._id,\n source: d._data,\n meta\n };\n point.className = getIndividualClassName(d, i, data, this);\n this.cachePoint(d[key], point);\n return point;\n });\n points = positionPoints(this, points);\n return points;\n }\n\n /**\n * Renders the line plot\n * @param {SVGElement} container svg element\n * @return {LineLayer} instance of line layer\n */\n render (container) {\n let points;\n let seriesClassName;\n let style;\n\n const config = this.config();\n const {\n encoding,\n interpolate,\n className,\n defClassName,\n transition\n } = config;\n const store = this._store;\n const normalizedData = store.get(PROPS.NORMALIZED_DATA);\n const transformedData = store.get(PROPS.TRANSFORMED_DATA);\n const fieldsConfig = this.data().getFieldsConfig();\n const axes = this.axes();\n const keys = transformedData.map(d => d.key);\n const qualifiedClassName = getQualifiedClassName(defClassName, this.id(), config.classPrefix);\n const containerSelection = selectElement(container);\n const colorField = encoding.color.field;\n const colorFieldIndex = fieldsConfig[colorField] && fieldsConfig[colorField].index;\n\n this._points = [];\n this._pointMap = {};\n containerSelection.classed(qualifiedClassName.join(' '), true);\n containerSelection.classed(className, true);\n makeElement(container, 'g', normalizedData, null, {\n enter: (group) => {\n animateGroup(group, {\n transition,\n groupAnimateStyle: {\n enter: {\n 'stroke-opacity': 0,\n 'fill-opacity': this.getPathStyle()['fill-opacity']\n },\n update: {\n 'stroke-opacity': encoding.strokeOpacity.value\n }\n }\n });\n },\n update: (group, dataArr, i) => {\n points = this.translatePoints(dataArr, this.encodingFieldsInf(), axes, i);\n this._points.push(points);\n seriesClassName = `${qualifiedClassName[0]}-${keys[i] || i}`.toLowerCase();\n\n let color;\n const colorValFn = encoding.color.value;\n const colorVal = points.find(d => d._data[colorFieldIndex] !== null &&\n d._data[colorFieldIndex] !== undefined);\n\n if (colorValFn) {\n color = colorValFn(dataArr, i, normalizedData);\n } else {\n color = axes.color.getColor(colorVal && colorVal._data[colorFieldIndex]);\n }\n\n style = this.getPathStyle(color);\n this.getDrawFn()({\n container: group.node(),\n interpolate,\n points,\n className: seriesClassName,\n transition,\n style: style || {},\n connectNullData: config.connectNullData\n });\n }\n }, d => d[0]._data[colorFieldIndex] || d[0]._id);\n\n attachDataToVoronoi(this._voronoi, this._points);\n return this;\n }\n\n /**\n * Get the css styles need to be applied on the line path\n * @param {string} color Color value\n * @return {Object} Path styles\n */\n getPathStyle (color) {\n return {\n stroke: color,\n 'fill-opacity': '0'\n };\n }\n\n /**\n * Gets the nearest point closest to the given position\n * @param {number} x x position\n * @param {number} y y position\n * @return {Object} Nearest point information\n */\n getNearestPoint (x, y, config) {\n let searchRadius = config.searchRadius;\n const data = this.data();\n\n if (!data || (data && data.isEmpty())) {\n return null;\n }\n\n searchRadius = searchRadius !== undefined ? searchRadius : this.config().nearestPointThreshold;\n const point = this._voronoi.find(x, y, searchRadius);\n const dimensions = getObjProp(point, 'data', 'data', 'update');\n\n if (point) {\n const { _data, _id } = point.data.data;\n const identifiers = this.getIdentifiersFromData(_data, _id);\n return {\n id: identifiers,\n dimensions: [{\n x: dimensions.x,\n y: dimensions.y,\n width: 2,\n height: 2\n }],\n layerId: this.id()\n };\n }\n return null;\n }\n}\n","import {\n easeFns,\n selectElement,\n pathInterpolators,\n Symbols\n} from 'muze-utils';\n\nconst area = Symbols.area;\n/**\n * Draws a line from the points\n * Generates a svg path string\n * @param {Object} params Contains container, points and interpolate attribute.\n */\nconst /* istanbul ignore next */ drawArea = (params) => {\n let filteredPoints;\n const { container, points, style, transition, className, connectNullData, interpolate } = params;\n\n const { effect: easeEffect, duration } = transition;\n const mount = selectElement(container);\n const curveInterpolatorFn = pathInterpolators[interpolate];\n const selection = mount.selectAll('path').data([params.points]);\n const [enterAreaPath, updateAreaPath] = ['enter', 'update'].map(e => area().curve(curveInterpolatorFn)\n .x(d => d[e].x)\n .y1(d => d[e].y)\n .y0(d => d[e].y0)\n .defined(d => d[e].y !== null\n ));\n\n filteredPoints = points;\n mount.attr('class', className);\n if (connectNullData) {\n filteredPoints = points.filter(d => d.update.y !== null);\n }\n const selectionEnter = selection.enter().append('path').attr('d', enterAreaPath(filteredPoints));\n selection.merge(selectionEnter).transition().ease(easeFns[easeEffect])\n .duration(duration)\n .attr('d', updateAreaPath(filteredPoints))\n .each(function (d) {\n const element = selectElement(this);\n\n element.classed(d[0].className, true);\n Object.keys(style).forEach(key => element.style(key, style[key]));\n });\n};\n\nexport default drawArea;\n","import { FieldType } from 'muze-utils';\nimport { defaultConfig } from './default-config';\nimport { LineLayer } from '../line';\nimport drawArea from './renderer';\nimport './styles.scss';\nimport { STACK, ENCODING } from '../../enums/constants';\nimport { getAxesScales, positionPoints, getLayerColor, getIndividualClassName } from '../../helpers';\n\n/**\n * Area Layer creates a area plot.\n * @example\n * const config = {\n * encoding = {\n * x: {\n * field: 'date'\n * },\n * // Top y value\n * y: {\n * field: 'maxTemp'\n * },\n * // Base y value\n * y0: {\n * field: 'minTemp\n * }\n * }\n * };\n * const areaLayer = layerFactory.getLayer('area', [dataModel, axes, config]);\n * areaLayer.render(container);\n * @class\n */\nexport default class AreaLayer extends LineLayer {\n /** oation of line layer\n * @return {Object} Default configuration of layer\n */\n static defaultConfig () {\n return defaultConfig;\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof AreaLayer\n */\n static formalName () {\n return 'area';\n }\n\n /**\n * Calculates the domain from data. It calls its parent class's method which is line layer\n * to get the domain and overwrites the domain according to its need.\n * @return {Array} Domain values\n */\n calculateDomainFromData (data, encodingFieldsInf, fieldsConfig) {\n const domains = super.calculateDomainFromData(data, fieldsConfig);\n [ENCODING.X, ENCODING.Y].forEach((type) => {\n const { [`${type}FieldType`]: fieldType } = encodingFieldsInf;\n if (fieldType === FieldType.MEASURE) {\n domains[type][0] = Math.min(domains[type][0], 0);\n }\n });\n return domains;\n }\n\n /**\n * Returns the drawing method of this layer\n * @return {Function} Draw method\n */\n getDrawFn () {\n return drawArea;\n }\n\n /**\n * Generates the x and y positions for each point\n * @param {Array} data Data Array\n * @param {Object} encoding Visual Encodings of the layer\n * @param {Object} axes Contains the axis\n * @return {Array} Array of points\n */\n translatePoints (data, encodingFieldsInf, axes) {\n let points = [];\n const transformType = this.transformType();\n const colorAxis = axes.color;\n const config = this.config();\n const encoding = config.encoding;\n const colorEncoding = encoding.color;\n const colorField = colorEncoding.field;\n const fieldsConfig = this.data().getFieldsConfig();\n const colorFieldIndex = colorField && fieldsConfig[colorField].index;\n const { xField, yField, y0Field } = encodingFieldsInf;\n const {\n xAxis,\n yAxis\n } = getAxesScales(axes);\n const classNameFn = config.individualClassName;\n const isXDim = fieldsConfig[xField] && fieldsConfig[xField].def.type === FieldType.DIMENSION;\n const isYDim = fieldsConfig[yField] && fieldsConfig[yField].def.type === FieldType.DIMENSION;\n const key = isXDim ? 'x' : (isYDim ? 'y' : null);\n points = data.map((d, i) => {\n const xPx = xAxis.getScaleValue(d.x) + xAxis.getUnitWidth() / 2;\n const yPx = yAxis.getScaleValue(d.y);\n const y0Px = (y0Field || transformType === STACK) ? yAxis.getScaleValue(d.y0) : yAxis.getScaleValue(0);\n const { color, rawColor } = getLayerColor({ datum: d, index: i }, {\n colorEncoding, colorAxis, colorFieldIndex });\n const style = {};\n const meta = {};\n style.fill = color;\n // style['fill-opacity'] = 0;\n meta.stateColor = {};\n meta.originalColor = rawColor;\n meta.colorTransform = {};\n const point = {\n enter: {\n x: xPx,\n y: d.y === null ? d.y : yAxis.getScaleValue(0),\n y0: d.y0 === null ? d.y0 : yAxis.getScaleValue(0)\n },\n update: {\n x: xPx,\n y: d.y === null ? d.y : yPx,\n y0: d.y0 === null ? d.y0 : y0Px\n },\n _id: d._id,\n _data: d._data,\n source: d._data,\n rowId: d._id,\n className: classNameFn ? classNameFn(d, i, data, this) : '',\n style,\n meta\n };\n point.className = getIndividualClassName(d, i, data, this);\n this.cachePoint(d[key], point);\n return point;\n });\n points = positionPoints(this, points);\n return points;\n }\n\n /**\n * Get the css styles need to be applied on the line path\n * @param {string} color Color value\n * @return {Object} Path styles\n */\n getPathStyle (color) {\n return {\n fill: color\n };\n }\n}\n\n","import { CLASSPREFIX } from '../../enums/constants';\n\nexport const defaultConfig = {\n classPrefix: CLASSPREFIX,\n defClassName: 'layer-arc',\n padding: { top: 1, bottom: 1, left: 1, right: 1 },\n className: '',\n minOuterRadius: 10,\n interaction: {\n highlight: [{\n type: 'fill',\n intensity: [0, 0, -15, 0]\n }],\n fade: [{\n type: 'fill',\n intensity: [0, 0, +15, 0]\n }],\n focus: [{\n type: 'fill',\n intensity: [0, 0, +15, 0]\n }]\n },\n height: 100,\n width: 100,\n sort: '',\n cornerRadius: 0,\n padAngle: 0,\n padRadius: 0,\n startAngle: 0,\n endAngle: 360,\n colors: ['#F44336', 'blue', 'green', 'yellow', 'orange', 'purple'],\n transform: {\n type: 'identity'\n },\n encoding: {\n 'stroke-width': {\n value: '2px'\n },\n 'stroke-linejoin': {\n value: 'round'\n },\n angle: {\n value: '1'\n },\n radius: {\n value: '1'\n },\n opacity: {\n value: '1'\n },\n color: {\n value: '1'\n },\n shape: {\n value: '1'\n },\n size: {\n value: '1'\n }\n },\n innerRadiusFixer: 10,\n transition: {\n effect: 'cubic',\n duration: 500\n },\n states: {\n highlight: {\n className: `${CLASSPREFIX}-layer-arc-highlight`\n },\n fadeout: {\n className: `${CLASSPREFIX}-layer-arc-fadeout`\n },\n selected: {\n className: `${CLASSPREFIX}-layer-arc-selected`\n }\n }\n};\n\n","import {\n makeElement,\n selectElement,\n getQualifiedClassName,\n isSimpleObject,\n getDomainFromData,\n Symbols,\n FieldType,\n ReservedFields\n} from 'muze-utils';\nimport { defaultConfig } from './default-config';\nimport { BaseLayer } from '../../base-layer';\nimport * as PROPS from '../../enums/props';\nimport { ASCENDING, OUTER_RADIUS_VALUE } from '../../enums/constants';\nimport { getIndividualClassName } from '../../helpers';\nimport { getRangeValue, getRadiusRange, tweenPie, tweenExitPie, getFieldIndices, getPreviousPoint } from './arc-helper';\nimport './styles.scss';\n\nconst pie = Symbols.pie;\nconst arc = Symbols.arc;\n\n/**\n * Arc Layer creates a plot with polar coordinates\n * Example :-\n * const config = {\n * height: 100,\n * width: 100,\n * startAngle: 0,\n * endAngle: Math.PI,\n * cornerRadius: 10,\n * minOuterRadius: 10,\n * outerRadius: 10,\n * innerRadius: 5,\n * padAngle: 2,\n * padRadius: 2,\n * colors: []\n * padding: {top: 10, bottom: 10, left: 10, right: 10},\n * encoding = {\n * angle: {\n * field: 'date' //Maps to angle of arc\n * },\n * radius: {\n * field: 'sales' // Maps to radius of arc\n * }\n * }\n * };\n * @class\n */\nexport default class ArcLayer extends BaseLayer {\n\n constructor (data, axes, config, dependencies) {\n super(data, axes, config, dependencies);\n this._prevPieData = {};\n }\n\n /**\n * returns the default configuration of the layer\n *\n * @static\n * @return {Object} Default configuration for arc layer\n * @memberof ArcLayer\n */\n static defaultConfig () {\n return defaultConfig;\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof ArcLayer\n */\n static formalName () {\n return 'arc';\n }\n\n /**\n *\n *\n * @returns\n * @memberof ArcLayer\n */\n elemType () {\n return 'path';\n }\n\n /**\n * Transforms data in the appropriate data structure to be consumed by the layer for rendering\n *\n * @param {Object} data data model associated with the layer\n * @param {Object} config configuration of the layer that contains encoding and other parameters\n * @return {Object} Transformed pie data\n * @memberof ArcLayer\n */\n getTransformedData (dataModel, config) {\n let pieData = [];\n const pieIndex = {};\n const {\n startAngle,\n endAngle,\n encoding,\n sort,\n minOuterRadius\n } = config;\n const prevData = this._store.get(PROPS.TRANSFORMED_DATA) || [];\n const fieldsConfig = this.data().getFieldsConfig();\n const {\n angleIndex,\n sizeIndex,\n radiusIndex,\n colorIndex\n } = getFieldIndices(encoding, fieldsConfig);\n const dataVal = dataModel.getData();\n const data = dataVal.data;\n const uids = dataVal.uids;\n\n this._prevPieData = {};\n\n prevData.forEach((e, index) => {\n this._prevPieData[e.uid] = [e, index];\n pieIndex[e.index] = e;\n });\n // Creating pie data using angle field provided. If the angle field is a dimension,\n // all the angles will be equal(360/number of dimensions)\n\n pieData = pie()\n .startAngle((startAngle / 180) * Math.PI)\n .endAngle(Math.PI * endAngle / 180)\n .value(d => d[angleIndex] || 1)\n .sortValues(null);\n\n sort.length && radiusIndex && pieData.sort((a, b) => {\n if (sort === ASCENDING) {\n return a[radiusIndex] - b[radiusIndex];\n } return b[radiusIndex] - a[radiusIndex];\n });\n const sizeVal = data.reduce((acc, d) => acc + (d[sizeIndex] || 0), 1);\n\n // Adding the radius field values to each data point in pie data\n pieData = pieData(data).map((d, i) => {\n d.outerRadiusValue = data[i][radiusIndex] || minOuterRadius;\n d.innerRadius = config.innerRadius;\n d.colorVal = data[i][colorIndex];\n d.angleVal = data[i][angleIndex];\n d.sizeVal = sizeVal;\n d.uid = uids[i];\n d.rowId = d.uid;\n d.source = data[i];\n d._previousInfo = this._prevPieData[d.uid] ? this._prevPieData[d.uid][0] :\n getPreviousPoint(pieIndex, d.index, config);\n return d;\n });\n return pieData;\n }\n\n /**\n * Returns normalized data after transformation (it is the same in the case of pie layer)\n *\n * @param {Object} data transformed data\n * @return {Object} normalized data\n * @memberof ArcLayer\n */\n getNormalizedData (data) {\n return data;\n }\n\n /**\n *\n *\n * @param {Object} data\n * @return {}\n * @memberof ArcLayer\n */\n calculateDomainFromData (data) {\n const domainKey = OUTER_RADIUS_VALUE;\n return {\n radius: getDomainFromData([data], [domainKey, domainKey])\n };\n }\n\n /**\n *\n *\n * @param {Object} x\n * @param {Object} y\n * @return {}\n * @memberof ArcLayer\n */\n getNearestPoint (x, y, config = {}) {\n const dataPoint = selectElement(config.event.target).data()[0];\n if (isSimpleObject(dataPoint)) {\n const { data, uid } = dataPoint.datum;\n return {\n id: this.getIdentifiersFromData(data, uid),\n layerId: this.id()\n };\n }\n return null;\n }\n\n /**\n *\n *\n * @param {*} set\n * @returns\n * @memberof ArcLayer\n */\n getPlotElementsFromSet (set) {\n return selectElement(this.mount()).selectAll(this.elemType()).filter(d => set.indexOf(d.datum.uid) !== -1);\n }\n\n /**\n *\n *\n * @param {Object} container\n * @return {}\n * @memberof ArcLayer\n */\n render (container) {\n const {\n height,\n width\n } = this.measurement();\n const {\n classPrefix,\n defClassName,\n minOuterRadius,\n innerRadius,\n outerRadius,\n cornerRadius,\n padAngle,\n padRadius,\n padding,\n transition,\n innerRadiusFixer\n } = this.config();\n const sizeAxis = this.axes().size;\n const store = this._store;\n const transformedData = store.get(PROPS.TRANSFORMED_DATA);\n const chartHeight = height - padding.top - padding.bottom;\n const chartWidth = width - padding.left - padding.right;\n const qualClassName = getQualifiedClassName(defClassName, this.id(), classPrefix);\n // Sets range for radius\n const range = getRadiusRange(chartWidth, chartHeight, {\n minOuterRadius,\n innerRadius,\n outerRadius,\n innerRadiusFixer\n });\n const colorAxis = this.axes().color;\n const defaultRadius = outerRadius || Math.min(chartHeight, chartWidth) / 2;\n const radiusDomain = store.get(PROPS.DOMAIN).radius;\n const rangeValueGetter = d => getRangeValue(d, range, radiusDomain, defaultRadius, sizeAxis);\n // This returns a function that generates the arc path based on the datum provided\n const path = arc()\n // .outerRadius(d => rangeValueGetter(d))\n .innerRadius(innerRadius ? Math.min(chartHeight / 2, chartWidth / 2, innerRadius) : 0)\n .cornerRadius(cornerRadius)\n .padAngle(padAngle)\n .padRadius(padRadius);\n this._chartWidth = chartWidth;\n this._chartHeight = chartHeight;\n // Creating the group that holds all the arcs\n const g = makeElement(selectElement(container), 'g', [1], `${qualClassName[0]}-group`)\n .classed(`${qualClassName[1]}-group`, true)\n .attr('transform', `translate(${chartWidth / 2},${chartHeight / 2})`);\n const tween = (elem) => {\n makeElement(elem, 'path', (d, i) => [{\n datum: d,\n index: i,\n arcFn: path,\n meta: {\n originalColor: colorAxis.getRawColor(d.colorVal),\n stateColor: {},\n colorTransform: {}\n }\n }], `${qualClassName[0]}-path`)\n .style('fill', d => colorAxis.getColor(d.datum.colorVal))\n .transition()\n .duration(transition.duration)\n .attrTween('d', (...params) => tweenPie(path, rangeValueGetter, params))\n .attr('class', (d, i) => {\n const individualClass = getIndividualClassName(d, i, transformedData, this);\n return `${qualClassName[0]}-path ${qualClassName[1]}-path-${d.index}\n ${individualClass}`;\n });\n };\n const consecutiveExits = [];\n let exitCounter = 0;\n const tweenExit = (elem, d) => {\n let exitArr = consecutiveExits[exitCounter];\n const oldExitCounter = exitCounter;\n if (!exitArr) {\n exitArr = [{ elem, datum: d }];\n } else if (exitArr[exitArr.length - 1].datum.index === d.index - 1) {\n exitArr.push({ elem, datum: d });\n } else {\n exitCounter++;\n }\n consecutiveExits[oldExitCounter] = exitArr;\n };\n // Creating groups for all the arcs present individually\n makeElement(g, 'g', transformedData, `${qualClassName[0]}`,\n {\n update: tween,\n exit: tweenExit\n })\n .attr('class', (d, i) => `${qualClassName[0]} ${qualClassName[1]}-${i}`);\n tweenExitPie(consecutiveExits, transition, rangeValueGetter, path);\n return this;\n }\n\n /**\n *\n *\n * @param {*} identifiers\n * @returns\n * @memberof BaseLayer\n */\n getPointsFromIdentifiers (identifiers) {\n if (!this.data()) {\n return [];\n }\n const fieldNames = identifiers[0];\n const values = identifiers.slice(1, identifiers.length);\n const pieSlices = selectElement(this.mount()).selectAll('path').data();\n const fieldsConfig = this.data().getFieldsConfig();\n\n const filteredPies = pieSlices.filter((tData) => {\n const data = tData.datum.data;\n const uid = tData.datum.uid;\n return fieldNames.every((field, idx) => {\n if (field in fieldsConfig && fieldsConfig[field].def.type === FieldType.DIMENSION) {\n return values.findIndex(d => d[idx] === data[fieldsConfig[field].index]) !== -1;\n } else if (field === ReservedFields.ROW_ID) {\n return values.findIndex(d => d[idx] === uid) !== -1;\n } return true;\n });\n });\n\n const pieSliceInf = filteredPies[0];\n if (pieSliceInf) {\n const centroid = pieSliceInf.arcFn.centroid(pieSliceInf.datum);\n return [{\n x: centroid[0] + this._chartWidth / 2,\n y: centroid[1] + this._chartHeight / 2,\n width: 2,\n height: 2\n }];\n }\n return [];\n }\n}\n\n","import { getObjProp, interpolator, FieldType, selectElement } from 'muze-utils';\nimport { ANGLE, RADIUS, SIZE, COLOR } from '../../enums/constants';\n\n/**\n * Returns the range value from a value inside the domain\n *\n * @param {Object} domainValue Value whose range has to be returned\n * @return {number} range value\n * @memberof ArcLayer\n */\nexport const getRangeValue = (datum, range, domain, defaultRadius, sizeAxis) => {\n let domainMultiplier = 1;\n const {\n outerRadiusValue,\n sizeVal\n } = datum;\n const sizeAxisDomain = sizeAxis.domain();\n const sizeMultiplier = sizeAxis.getSize(sizeVal) / (sizeAxisDomain ? sizeAxis.range()[1] : sizeAxis.config().value);\n\n domainMultiplier *= (range[1] - range[0]) / (domain[1] - domain[0]);\n const rangeVal = (range[0] + (outerRadiusValue - domain[0]) * domainMultiplier);\n return (rangeVal || defaultRadius) * sizeMultiplier;\n};\n\n/**\n *\n *\n * @memberof ArcLayer\n */\nexport const getRadiusRange = (width, height, config) => {\n const {\n minOuterRadius,\n innerRadius,\n outerRadius,\n innerRadiusFixer\n } = config;\n\n return [Math.max((innerRadius + innerRadiusFixer || 0), minOuterRadius), outerRadius || Math.min(height,\n width) / 2];\n};\nexport const getPreviousPoint = (prevData, currIndex, config) => {\n const prevArc = prevData[currIndex - 1];\n const nextArc = prevData[currIndex];\n\n if (prevArc && nextArc) {\n return {\n startAngle: prevArc.endAngle,\n endAngle: nextArc.startAngle\n };\n } else if (!nextArc) {\n return {\n startAngle: config.endAngle * Math.PI * 2 / 360,\n endAngle: config.endAngle * Math.PI * 2 / 360\n };\n }\n return {\n startAngle: config.startAngle * Math.PI * 2 / 360,\n endAngle: config.startAngle * Math.PI * 2 / 360\n };\n};\n\n/**\n *\n *\n * @param {*} path\n * @param {*} b\n * @returns\n * @memberof ArcLayer\n */\nexport const tweenPie = (path, rangeValueGetter, b) => {\n const { datum } = b[0];\n const outerRadius = rangeValueGetter(datum);\n datum.outerRadius = outerRadius;\n datum._previousInfo.outerRadius = datum._previousInfo.outerRadius || outerRadius;\n return function (t) {\n return path(interpolator()(datum._previousInfo, datum)(t));\n };\n};\n\n/**\n *\n *\n * @param {*} path\n * @param {*} b\n * @returns\n * @memberof ArcLayer\n */\nexport const tweenExitPie = (consecutiveExits, transition, rangeValueGetter, path) => {\n if (consecutiveExits.length > 0) {\n consecutiveExits.forEach((consecutiveExitArr) => {\n const startAngle = consecutiveExitArr[0].datum.startAngle;\n const endAngle = consecutiveExitArr[consecutiveExitArr.length - 1].datum.endAngle;\n const mid = (Math.PI * 2 * startAngle) / ((Math.PI * 2) + startAngle - endAngle);\n\n consecutiveExitArr.forEach((e) => {\n const { elem, datum } = e;\n\n elem.each(function () {\n const gElem = selectElement(this);\n gElem.selectAll('path')\n .transition()\n .duration(transition.duration)\n .attrTween('d', () => function (t) {\n const outerRadius = rangeValueGetter(datum);\n datum.outerRadius = outerRadius;\n return path(interpolator()(datum, {\n startAngle: mid,\n endAngle: mid,\n outerRadius\n })(t));\n })\n .remove();\n gElem.remove();\n });\n });\n });\n }\n};\n\nexport const getFieldIndices = (encoding, fieldsConfig) => {\n const [angleField, radiusField, colorField, sizeField] = [ANGLE, RADIUS, COLOR, SIZE]\n .map(e => encoding[e].field);\n const [angleIndex, sizeIndex, radiusIndex] = [angleField, sizeField, radiusField]\n .map((e) => {\n const conf = fieldsConfig[e];\n if (conf && conf.def.type === FieldType.MEASURE) {\n return conf.index;\n }\n return null;\n });\n const colorIndex = getObjProp(fieldsConfig, colorField, 'index');\n return {\n angleIndex,\n sizeIndex,\n radiusIndex,\n colorIndex\n };\n};\n","import {\n setAttrs,\n setStyles,\n selectElement,\n makeElement,\n getSmartComputedStyle\n} from 'muze-utils';\n\n/**\n * Draws svg text in the specified container.\n * @param {SVGElement} container Container where labels will be appended.\n * @param {Array.} data Data of the elements.\n * @return {Selection} d3 selection of the elements.\n */\nconst drawText = (container, data, config, smartLabel) => {\n const selection = selectElement(container).selectAll('g').data(data);\n\n const selectionMerge = selection.enter().append('g')\n .each(function (dataObj) {\n setAttrs(this, dataObj.enter);\n })\n .merge(selection);\n const style = getSmartComputedStyle(selectElement(container), config.className);\n const fontSize = parseInt(style.fontSize, 10);\n\n smartLabel.setStyle(style);\n selectionMerge.each(function (dataObj) {\n const element = selectElement(this);\n const { update, text, color, textanchor, style: textStyle } = dataObj;\n const background = dataObj.background;\n let backgroundVal;\n if (backgroundVal = background.value) {\n const backgroundPadding = background.padding;\n let diff;\n const { width, height } = smartLabel.getOriSize(dataObj.text);\n const backgroundEl = makeElement(element, 'rect', [1]);\n\n if (textanchor === 'end') {\n diff = width;\n } else if (textanchor === 'start') {\n diff = 0;\n } else {\n diff = width / 2;\n }\n\n setAttrs(backgroundEl.node(), {\n x: update.x - diff - backgroundPadding / 2,\n y: update.y - fontSize - backgroundPadding / 2,\n width: width + backgroundPadding,\n height: height + backgroundPadding\n });\n background && setStyles(backgroundEl, {\n background: backgroundVal\n });\n }\n const textEl = makeElement(element, 'text', d => [d]).text(text);\n const textNode = textEl.node();\n textStyle && setStyles(textNode, textStyle);\n color && setStyles(textNode, {\n fill: color\n });\n dataObj.className && textEl.classed(dataObj.className, true);\n setAttrs(textNode, update);\n textEl.attr('text-anchor', textanchor);\n });\n selection.exit().remove();\n return selection;\n};\n\nexport default drawText;\n","import { CLASSPREFIX } from '../../enums/constants';\n\nexport const defaultConfig = {\n defClassName: 'layer-text',\n classPrefix: CLASSPREFIX,\n className: '',\n transform: {\n type: 'identity'\n },\n interaction: {\n highlight: [{\n type: 'fill',\n intensity: [0, 0, -15, 0]\n }],\n fade: [{\n type: 'fill',\n intensity: [0, 0, +15, 0]\n }],\n focus: [{\n type: 'fill',\n intensity: [0, 0, +15, 0]\n }]\n },\n transition: {\n effect: 'cubic',\n duration: 1000\n },\n encoding: {\n color: {},\n text: {\n value: '',\n background: {\n padding: 10\n }\n }\n },\n states: {\n highlight: {\n className: `${CLASSPREFIX}-layer-text-highlight`\n },\n fadeout: {\n className: `${CLASSPREFIX}-layer-text-fadeout`\n },\n selected: {\n className: `${CLASSPREFIX}-layer-text-selected`\n }\n }\n};\n","import {\n getQualifiedClassName,\n selectElement,\n setStyles,\n createElements\n} from 'muze-utils';\nimport { BaseLayer } from '../../base-layer';\nimport drawText from './renderer';\nimport { defaultConfig } from './default-config';\nimport { getLayerColor, positionPoints, getIndividualClassName } from '../../helpers';\nimport { TEXT_ANCHOR_MIDDLE, ENCODING } from '../../enums/constants';\nimport * as PROPS from '../../enums/props';\n\nimport './styles.scss';\n\n/**\n * Text Layer creates labels. It needs to be passed a data table, axes and configuration\n * of the layer.\n * Example :-\n * const textLayer = layerFactory.getLayer('text', [dataModel, axes, config]);\n * textLayer.render(container);\n * @class\n */\nexport default class TextLayer extends BaseLayer {\n /**\n * Returns the default configuration of the text layer\n * @return {Object} Default configuration of the text layer\n */\n static defaultConfig () {\n return defaultConfig;\n }\n\n static formalName () {\n return 'text';\n }\n\n elemType () {\n return 'text';\n }\n\n /**\n * Generates an array of objects containing x, y, width and height of the points from the data\n * @param {Array.} data Data Array\n * @param {Object} encoding Config\n * @param {Object} axes Axes object\n * @return {Array.} Array of points\n */\n translatePoints (data, encoding, axes) {\n let points = [];\n const colorAxis = axes.color;\n const textEncoding = encoding.text;\n const { field: textField, value, formatter: textFormatter } = textEncoding;\n const colorEncoding = encoding.color;\n const colorField = colorEncoding && colorEncoding.field;\n const fieldsConfig = this.data().getFieldsConfig();\n\n const backgroundEncoding = encoding.text.background;\n const backgroundPadding = backgroundEncoding.padding;\n const backgroundValue = backgroundEncoding.value;\n const colorFieldIndex = fieldsConfig[colorField] ? fieldsConfig[colorField].index : -1;\n const textFieldIndex = textField ? fieldsConfig[textField] && fieldsConfig[textField].index : -1;\n const xEnc = ENCODING.X;\n const yEnc = ENCODING.Y;\n for (let i = 0, len = data.length; i < len; i++) {\n const d = data[i];\n const row = d._data;\n const textValue = textField ? row[textFieldIndex] : value;\n\n const [xPx, yPx] = [xEnc, yEnc].map(type => (axes[type] ? axes[type].getScaleValue(d[type]) +\n axes[type].getUnitWidth() / 2 : 0));\n\n const { color, rawColor } = getLayerColor({ datum: d, index: i },\n { colorEncoding, colorAxis, colorFieldIndex });\n\n const point = {\n enter: {},\n update: {\n x: xPx,\n y: yPx\n },\n text: textFormatter ? textFormatter(textValue) : textValue,\n color,\n background: {\n value: backgroundValue instanceof Function ? backgroundValue(d, i, data, this) : null,\n padding: backgroundPadding\n },\n meta: {\n stateColor: {},\n originalColor: rawColor,\n colorTransform: {}\n },\n style: {},\n _data: row,\n _id: d._id,\n source: d._data,\n rowId: d._id\n };\n\n if (d.x !== null && d.y !== null) {\n points.push(point);\n }\n\n point.className = getIndividualClassName(d, i, data, this);\n }\n\n points = positionPoints(this, points);\n\n return points;\n }\n\n /**\n * Renders the plot in the given container\n * @param {SVGElement} container SVGElement which will hold the plot\n * @return {textLayer} Instance of text layer\n */\n render (container) {\n let points;\n const config = this.config();\n const encoding = config.encoding;\n const normalizedData = this._store.get(PROPS.NORMALIZED_DATA);\n const className = config.className;\n const qualifiedClassName = getQualifiedClassName(config.defClassName, this.id(), config.classPrefix);\n const axes = this.axes();\n const containerSelection = selectElement(container);\n\n containerSelection.classed(`${qualifiedClassName.join(' ')} ${className}`, true);\n createElements({\n data: normalizedData,\n append: 'g',\n selector: 'g',\n container,\n each: (dataArr, group, i) => {\n const node = group.node();\n points = this.translatePoints(dataArr, encoding, axes, i);\n setStyles(node, {\n 'text-anchor': TEXT_ANCHOR_MIDDLE\n });\n drawText(node, points, {\n className: qualifiedClassName[0]\n }, this._dependencies.smartLabel);\n }\n });\n return this;\n }\n}\n","/* global Element, document */\nimport {\n makeElement,\n selectElement,\n easeFns,\n objectIterator,\n getSymbol\n} from 'muze-utils';\n\n/**\n *\n *\n * @param {*} str\n * @returns\n */\nconst checkPath = (str) => {\n if (/^[mzlhvcsqta]\\s*[-+.0-9][^mlhvzcsqta]+/i.test(str) && /[\\dz]$/i.test(str) && str.length > 4) {\n return true;\n }\n return false;\n};\n\n/**\n *\n *\n * @param {*} d\n * @param {*} elem\n */\nconst createShape = function (d, elem) {\n const groupElement = selectElement(elem);\n const { shape, size, update } = d;\n\n if (shape instanceof Promise) {\n shape.then((res) => {\n d.shape = res;\n createShape(d, elem);\n });\n } else if (shape instanceof Element) {\n let newShape = shape.cloneNode(true);\n\n if (newShape.nodeName.toLowerCase() === 'img') {\n const src = newShape.src || newShape.href;\n newShape = document.createElementNS('http://www.w3.org/2000/svg', 'image');\n newShape.setAttribute('href', src);\n }\n const shapeElement = selectElement(newShape);\n if (newShape.nodeName === 'path' || newShape.nodeName === 'image') {\n shapeElement.attr('transform', `scale(${size / 100})`);\n } else {\n shapeElement.attr('height', size);\n shapeElement.attr('width', size);\n }\n shapeElement.attr('x', -size / 2);\n shapeElement.attr('y', -size / 2);\n selectElement(groupElement.node().appendChild(newShape));\n } else if (typeof shape === 'string') {\n let pathStr;\n if (checkPath(shape)) {\n pathStr = shape;\n } else {\n pathStr = getSymbol(shape).size(size)(update);\n }\n makeElement(groupElement, 'path', data => [data]).attr('d', pathStr);\n } else {\n d.shape = 'circle';\n createShape(d, elem);\n }\n};\n\n/**\n * Draws symbols using d3 symbol api\n * @param {Object} params Contains the svg container, points and other symbol related attributes.\n */\n/* istanbul ignore next */ const drawSymbols = (params) => {\n let mergedGroups;\n const { container, points, transition, className } = params;\n const { duration, effect, disabled } = transition;\n const mount = selectElement(container);\n\n mount.attr('class', className);\n const symbolGroups = mount.selectAll('g').data(points, params.keyFn);\n const symbolEnter = symbolGroups.enter().append('g').attr('transform', d => `translate(${d.enter.x},${d.enter.y})`);\n mergedGroups = symbolGroups.merge(symbolEnter)\n .each(function (d) {\n createShape(d, this);\n });\n mergedGroups = disabled ? mergedGroups : mergedGroups.transition().duration(disabled ? 0 : transition.duration);\n mergedGroups.attr('transform', d => `translate(${d.update.x},${d.update.y})`)\n .each(function (d) {\n const style = d.style;\n const element = selectElement(this);\n objectIterator(style, key => element.style(key, style[key]));\n element.attr('class', `${className}`);\n element.classed(d.className, true);\n });\n\n const exitGroups = symbolGroups.exit();\n if (!disabled) {\n exitGroups.transition().ease(easeFns[effect])\n .duration(duration)\n .on('end', function () {\n selectElement(this).remove();\n })\n .style('fill-opacity', 0)\n .style('stroke-opacity', 0);\n } else {\n exitGroups.remove();\n }\n};\n\nexport default drawSymbols;\n","import { CLASSPREFIX } from '../../enums/constants';\n\nexport const defaultConfig = {\n defClassName: 'layer-point',\n className: '',\n classPrefix: CLASSPREFIX,\n defColorStyle: 'stroke',\n interaction: {\n highlight: [{\n type: 'fill',\n intensity: [0, 0, -20, 0]\n }],\n fade: [{\n type: 'fill',\n intensity: [0, 0, +20, 0]\n }],\n focus: [{\n type: 'fill',\n intensity: [0, 0, +20, 0]\n }\n ]\n },\n innerPadding: 0.1,\n nearestPointThreshold: 10,\n transform: {\n type: 'identity'\n },\n transition: {\n effect: 'cubic',\n duration: 1000\n },\n encoding: {\n size: {\n value: 30\n },\n color: { },\n shape: {\n value: 'circle'\n },\n x: {},\n y: {},\n strokeOpacity: {\n value: 0.5\n },\n fillOpacity: {\n value: 0.5\n }\n },\n shapes: ['circle', 'cross', 'diamond', 'square', 'star', 'wye', 'triangle'],\n sizes: [20, 30, 40, 50, 60, 70]\n};\n","import {\n Voronoi,\n selectElement,\n getQualifiedClassName,\n makeElement,\n FieldType,\n Scales\n} from 'muze-utils';\nimport { BaseLayer } from '../../base-layer';\nimport drawSymbols from './renderer';\nimport { defaultConfig } from './default-config';\nimport { ENCODING } from '../../enums/constants';\nimport * as PROPS from '../../enums/props';\nimport {\n attachDataToVoronoi,\n getLayerColor,\n positionPoints,\n getPlotMeasurement,\n getIndividualClassName\n} from '../../helpers';\n\nimport './styles.scss';\n\n/**\n * Point Layer creates point. Itt needs to be passed a data table, axes and configuration\n * of the layer.\n * Example :-\n * const pointLayer = layerFactory.getLayer('point', [data, axes, config]);\n * pointLayer.render(container);\n * @class\n */\nexport default class PointLayer extends BaseLayer {\n\n /**\n * Creates an instance of PointLayer.\n * @param {*} args\n * @memberof PointLayer\n */\n constructor (...args) {\n super(...args);\n this._voronoi = new Voronoi();\n this._bandScale = Scales.band();\n }\n\n /**\n *\n *\n * @returns\n * @memberof PointLayer\n */\n elemType () {\n return 'g';\n }\n\n /**\n * Returns the default configuration of the point layer\n * @return {Object} Default configuration of the point layer\n */\n static defaultConfig () {\n return defaultConfig;\n }\n\n static defaultPolicy (conf, userConf) {\n const config = BaseLayer.defaultPolicy(conf, userConf);\n const encoding = config.encoding;\n const transform = config.transform;\n const colorField = encoding.color && encoding.color.field;\n\n if (colorField) {\n transform.groupBy = colorField;\n }\n return config;\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof PointLayer\n */\n static formalName () {\n return 'point';\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof PointLayer\n */\n static drawFn () {\n return drawSymbols;\n }\n\n /**\n * Generates an array of objects containing x, y, width and height of the points from the data\n * @param {Array.} data Data Array\n * @param {Object} encoding Config\n * @param {Object} axes Axes object\n * @return {Array.} Array of points\n */\n translatePoints (data, encoding, axes, config = {}) {\n let points = [];\n const {\n size: sizeEncoding,\n shape: shapeEncoding,\n color: colorEncoding,\n x,\n y\n } = encoding;\n const sizeField = sizeEncoding.field;\n const sizeValue = sizeEncoding.value;\n const shapeField = shapeEncoding.field;\n const xField = x.field;\n const yField = y.field;\n const { size: sizeAxis, shape: shapeAxis } = axes;\n const fieldsConfig = this.data().getFieldsConfig();\n const isXDim = fieldsConfig[xField] && fieldsConfig[xField].def.type === FieldType.DIMENSION;\n const isYDim = fieldsConfig[yField] && fieldsConfig[yField].def.type === FieldType.DIMENSION;\n const key = isXDim ? ENCODING.X : (isYDim ? ENCODING.Y : null);\n const colorField = colorEncoding && colorEncoding.field;\n const colorFieldIndex = fieldsConfig[colorField] && fieldsConfig[colorField].index;\n const measurement = this._store.get(PROPS.MEASUREMENT);\n const shapeFieldIndex = fieldsConfig[shapeField] && fieldsConfig[shapeField].index;\n const sizeFieldIndex = fieldsConfig[sizeField] && fieldsConfig[sizeField].index;\n const colorAxis = axes.color;\n const { x: offsetX, y: offsetY } = config.offset;\n\n for (let i = 0, len = data.length; i < len; i++) {\n const d = data[i];\n const row = d._data;\n const size = sizeValue instanceof Function ? sizeValue(d, i) : sizeAxis.getSize(row[sizeFieldIndex]);\n const shape = shapeAxis.getShape(row[shapeFieldIndex]);\n\n let [xPx, yPx] = [ENCODING.X, ENCODING.Y].map((type) => {\n const value = d[type] === null ? undefined : d[type];\n const measure = type === ENCODING.X ? measurement.width : measurement.height;\n return !encoding[type].field ? measure / 2 : axes[type].getScaleValue(value);\n });\n\n xPx += offsetX;\n yPx += offsetY;\n\n const { color, rawColor } = getLayerColor({ datum: d, index: i },\n { colorEncoding, colorAxis, colorFieldIndex });\n\n const style = {\n fill: color,\n stroke: color\n };\n\n if (!isNaN(xPx) && !isNaN(yPx)) {\n const point = {\n enter: {\n x: xPx,\n y: yPx\n },\n update: {\n x: xPx,\n y: yPx\n },\n shape,\n size: Math.abs(size),\n meta: {\n stateColor: {},\n originalColor: rawColor,\n colorTransform: {}\n },\n style,\n _data: row,\n _id: d._id,\n source: d._data,\n rowId: d._id\n };\n point.className = getIndividualClassName(d, i, data, this);\n points.push(point);\n this.cachePoint(d[key], point);\n }\n }\n points = positionPoints(this, points);\n return points;\n }\n\n /**\n * Renders the plot in the given container.\n *\n * @param {SVGElement} container SVGElement which will hold the plot\n * @return {BarLayer} Instance of bar layer\n */\n render (container) {\n let maxSize = 0;\n let seriesClassName;\n const config = this.config();\n const keys = this._store.get(PROPS.TRANSFORMED_DATA).map(d => d.key);\n const { transition, className, defClassName, classPrefix } = config;\n const normalizedData = this._store.get(PROPS.NORMALIZED_DATA);\n const containerSelection = selectElement(container);\n const qualifiedClassName = getQualifiedClassName(defClassName, this.id(), classPrefix);\n this._points = [];\n this._pointMap = {};\n\n containerSelection.classed(qualifiedClassName.join(' '), true).classed(className, true);\n\n this._points = this.generateDataPoints(normalizedData, keys);\n\n makeElement(container, 'g', this._points, null, {\n update: (group, points) => {\n maxSize = Math.max(maxSize, ...points.map(d => d.size));\n seriesClassName = `${qualifiedClassName[0]}`;\n this.constructor.drawFn()({\n container: group.node(),\n points,\n className: seriesClassName,\n transition,\n keyFn: d => d._id\n });\n }\n }, data => data[0]._id);\n this._maxSize = Math.sqrt(maxSize / Math.PI) * 2;\n attachDataToVoronoi(this._voronoi, this._points);\n return this;\n }\n\n generateDataPoints (normalizedData, keys) {\n const encoding = this.config().encoding;\n const axes = this.axes();\n const [widthMetrics, heightMetrics] = getPlotMeasurement(this, keys);\n const offsetXValues = widthMetrics.offsetValues || [];\n const offsetYValues = heightMetrics.offsetValues || [];\n return normalizedData.map((dataArr, i) => {\n const measurementConf = this.getMeasurementConfig(offsetXValues[i], offsetYValues[i], widthMetrics.span,\n heightMetrics.span);\n return this.translatePoints(dataArr, encoding, axes, measurementConf);\n }).filter(d => d.length);\n }\n\n getMeasurementConfig (offsetX, offsetY, widthSpan, heightSpan) {\n return {\n offset: {\n x: (offsetX || 0) + widthSpan / 2,\n y: (offsetY || 0) + heightSpan / 2\n },\n span: {\n x: widthSpan,\n y: heightSpan\n }\n };\n }\n\n /**\n * Gets the nearest point from a position.\n * @param {number} x x position\n * @param {number} y y position\n * @return {Object} Point details\n */\n getNearestPoint (x, y) {\n const distanceLimit = Math.max(this._maxSize, this.config().nearestPointThreshold);\n\n if (!this.data()) {\n return null;\n }\n\n const point = this._voronoi.find(x, y, distanceLimit);\n const dimensions = point && point.data.data.update;\n const radius = point ? Math.sqrt(point.data.data.size / Math.PI) : 0;\n\n if (point) {\n const { _data, _id } = point.data.data;\n const identifiers = this.getIdentifiersFromData(_data, _id);\n return {\n id: identifiers,\n dimensions: [{\n x: dimensions.x,\n y: dimensions.y,\n width: radius,\n height: radius\n }],\n layerId: this.id()\n };\n }\n return null;\n }\n}\n","import { makeElement, easeFns } from 'muze-utils';\n\n/**\n *\n *\n * @param {*} elem\n * @param {*} datum\n * @param {*} index\n * @param {*} context\n */\nconst transitionBars = (elem, datum, index, context) => {\n const { transition } = context;\n const { duration, disabled, effect } = transition;\n const selection = elem;\n const selTransition = disabled ? selection : selection.transition().duration(duration).ease(easeFns[effect]);\n const update = datum.update || datum;\n const updateStyle = datum.style || {};\n datum.className && selection.classed(datum.className, true);\n Object.entries(update).forEach(attr => (!isNaN(attr[1]) && selTransition.attr(attr[0], attr[1])));\n Object.entries(updateStyle).forEach(styleObj => selection.style(styleObj[0], styleObj[1]));\n};\n\n/**\n *\n *\n * @param {*} elem\n * @param {*} d\n */\nconst barEnterFn = (elem, d) => {\n const selection = elem;\n const enter = d.enter || {};\n Object.entries(enter).forEach(attr => (!isNaN(attr[1]) && selection.attr(attr[0], attr[1])));\n};\n\n/**\n * Draws rectangles by using d3 selection\n * @param {Object} params Contains container element and points\n * @return {Selection} Bar Selection\n */\n/* istanbul ignore next */ export const drawRects = (params) => {\n const { points, container, keyFn } = params;\n const updateFns = {\n enter (elem, d) { barEnterFn(elem, d); },\n update (elem, d, i) { transitionBars(elem, d, i, params); }\n };\n return makeElement(container, 'rect', points, null, updateFns, keyFn);\n};\n","import { CLASSPREFIX } from '../../enums/constants';\n\nexport const defaultConfig = {\n classPrefix: CLASSPREFIX,\n defClassName: 'layer-bar',\n className: '',\n interaction: {\n highlight: [{\n type: 'fill',\n intensity: [0, 0, -15, 0]\n }],\n fade: [{\n type: 'fill',\n intensity: [0, 0, +15, 0]\n }],\n focus: [{\n type: 'fill',\n intensity: [0, 0, +15, 0]\n }]\n },\n transform: {\n type: 'stack'\n },\n transition: {\n effect: 'cubic',\n duration: 1000\n },\n innerPadding: 0.1,\n encoding: {\n color: {},\n x: {},\n y: {},\n x0: {},\n y0: {}\n },\n states: {\n highlight: {\n className: `${CLASSPREFIX}-layer-bar-highlight`\n },\n fadeout: {\n className: `${CLASSPREFIX}-layer-bar-fadeout`\n },\n selected: {\n className: `${CLASSPREFIX}-layer-bar-selected`\n }\n }\n};\n\n","import { FieldType, DimensionSubtype } from 'muze-utils';\nimport * as PROPS from '../../enums/props';\nimport { STACK } from '../../enums/constants';\nimport { getLayerColor, positionPoints, getIndividualClassName } from '../../helpers';\n\n/**\n *\n *\n * @param {*} type\n * @param {*} fieldInfo\n * @param {*} config\n * @param {*} data\n * @returns\n */\nconst resolveDimByField = (type, axesInfo, config, data) => {\n const spaceType = type === 'x' ? 'width' : 'height';\n const [fieldType, axis] = [config[`${type}FieldType`], axesInfo[`${type}Axis`]];\n const {\n transformType,\n sizeEncoding,\n sizeConfig,\n measurement\n } = config;\n\n const sizeValue = sizeEncoding.value;\n let enter = 0;\n let pos;\n let space = 0;\n let enterSpace = 0;\n if (fieldType !== undefined) {\n if (config[`${type}0Field`]) {\n const minVal = data[type];\n const maxVal = data[`${type}0`];\n let min;\n let max;\n if (minVal === null || maxVal === null) {\n return {\n enterSpace: undefined,\n enter: undefined,\n pos: undefined,\n space: undefined\n };\n } else if (fieldType === FieldType.MEASURE || fieldType === DimensionSubtype.TEMPORAL) {\n min = Math.min(minVal, maxVal);\n max = Math.max(minVal, maxVal);\n } else {\n min = minVal;\n max = maxVal;\n }\n const scales = type === 'x' ? [min, max] : [max, min];\n pos = axis.getScaleValue(scales[0]) + axis.getUnitWidth() / 2;\n space = Math.abs(axis.getScaleValue(scales[1]) - pos) + axis.getUnitWidth() / 2;\n\n enter = pos;\n enterSpace = 0;\n } else if (fieldType === DimensionSubtype.CATEGORICAL || fieldType === DimensionSubtype.TEMPORAL) {\n pos = axis.getScaleValue(data[type]) +\n (sizeConfig[type === 'x' ? 'barWidthOffset' : 'barHeightOffset'] || 0);\n\n space = sizeConfig[type === 'x' ? 'barWidth' : 'barHeight'];\n if (sizeValue !== undefined) {\n const diffPx = sizeValue * space;\n space -= diffPx;\n pos += diffPx / 2;\n }\n enter = pos;\n enterSpace = space;\n } else {\n const zeroPos = axis.getScaleValue(0);\n const axisType = axis.getScaleValue(data[type]);\n const axisType0 = axis.getScaleValue(data[`${type}0`]);\n\n enterSpace = 0;\n if (type === 'x') {\n pos = data[type] < 0 || transformType === STACK ? axisType : zeroPos;\n space = Math.abs(pos - (transformType === STACK ? axisType0 : (data[type] >= 0 ? axisType : zeroPos)));\n } else {\n pos = transformType === STACK || data[type] >= 0 ? axisType : zeroPos;\n space = Math.abs(pos - (transformType === STACK ? axisType0 : (data[type] >= 0 ? zeroPos : axisType)));\n }\n enter = zeroPos;\n }\n } else {\n pos = 0;\n space = measurement[spaceType];\n }\n\n return {\n enterSpace,\n enter,\n pos,\n space\n };\n};\n\n/**\n *\n *\n * @param {*} data\n * @param {*} config\n * @param {*} axes\n * @returns\n */\nconst resolveDimensions = (data, config, axes) => {\n const axesInfo = {\n xAxis: axes.x,\n yAxis: axes.y\n };\n const {\n enterSpace: enterWidth,\n enter: enterX,\n pos: xPos,\n space: width\n } = resolveDimByField('x', axesInfo, config, data);\n\n const {\n enterSpace: enterHeight,\n enter: enterY,\n pos: yPos,\n space: height\n } = resolveDimByField('y', axesInfo, config, data);\n return {\n enter: {\n x: enterX,\n y: enterY,\n width: enterWidth,\n height: enterHeight\n },\n update: {\n x: xPos,\n y: yPos,\n width,\n height\n }\n };\n};\n\n/**\n * Generates an array of objects containing x, y, width and height of the bars from the data\n * @param {Array.} data Data Array\n * @param {Object} encoding Config\n * @param {Object} axes Axes object\n * @param {Object} conf config object for point generation\n * @return {Array.} Array of points\n */\nexport const getTranslatedPoints = (context, data, sizeConfig) => {\n let points = [];\n const encoding = context.config().encoding;\n const axes = context.axes();\n const colorAxis = axes.color;\n const fieldsConfig = context.data().getFieldsConfig();\n const colorEncoding = encoding.color;\n const colorField = colorEncoding.field;\n const sizeEncoding = encoding.size || {};\n const {\n x0Field,\n y0Field,\n xFieldSubType,\n yFieldSubType\n } = context.encodingFieldsInf();\n const measurement = context._store.get(PROPS.MEASUREMENT);\n const isXDim = xFieldSubType === DimensionSubtype.CATEGORICAL || xFieldSubType === DimensionSubtype.TEMPORAL;\n const isYDim = yFieldSubType === DimensionSubtype.CATEGORICAL || yFieldSubType === DimensionSubtype.TEMPORAL;\n const key = isXDim ? 'x' : (isYDim ? 'y' : null);\n const transformType = context.transformType();\n const colorFieldIndex = colorField && fieldsConfig[colorField] && fieldsConfig[colorField].index;\n\n for (let i = 0, len = data.length; i < len; i++) {\n const d = data[i];\n const style = {};\n const meta = {};\n const dimensions = resolveDimensions(d, {\n xFieldType: xFieldSubType,\n yFieldType: yFieldSubType,\n x0Field,\n y0Field,\n transformType,\n measurement,\n sizeConfig,\n sizeEncoding\n }, axes);\n\n const { color, rawColor } = getLayerColor({ datum: d, index: i },\n { colorEncoding, colorAxis, colorFieldIndex });\n\n style.fill = color;\n meta.stateColor = {};\n meta.originalColor = rawColor;\n meta.colorTransform = {};\n\n const update = dimensions.update;\n\n if (!isNaN(update.x) && !isNaN(update.y) && d._id !== undefined) {\n let point = null;\n point = {\n enter: dimensions.enter,\n update,\n style,\n _data: d._data,\n _id: d._id,\n source: d._data,\n rowId: d._id,\n meta\n };\n point.className = getIndividualClassName(d, i, data, context);\n points.push(point);\n // Store each point in a hashmap with key as the dimensional or temporal field value\n context.cachePoint(d[key], point);\n }\n }\n\n points = positionPoints(context, points);\n return points;\n};\n","import {\n getClosestIndexOf,\n getQualifiedClassName,\n selectElement,\n createElements,\n clipElement,\n DimensionSubtype,\n FieldType,\n Scales\n} from 'muze-utils';\nimport { BaseLayer } from '../../base-layer';\nimport { drawRects } from './renderer';\nimport { defaultConfig } from './default-config';\nimport * as PROPS from '../../enums/props';\nimport { getPlotMeasurement } from '../../helpers';\nimport './styles.scss';\nimport { getTranslatedPoints } from './bar-helper';\n\nconst MEASURE = FieldType.MEASURE;\nconst scaleBand = Scales.band;\n\n/**\n * Bar Layer creates a bar plot. It needs to be passed a data table, axes and configuration of the layer.\n *\n * @example\n * const BarLayer = layerFactory.getLayer('bar');\n * BarLayer.create()\n * .config(config)\n * .data(dt)\n * .mountPoint(container);\n * @class\n */\nexport default class BarLayer extends BaseLayer {\n /**\n * Creates an instance of bar layer\n */\n constructor (...params) {\n super(...params);\n this._bandScale = scaleBand();\n this._plotPadding = {\n x: 0,\n y: 0\n };\n this._plotSpan = {\n x: 0,\n y: 0\n };\n this._pointMap = {};\n }\n\n /**\n *\n *\n * @returns\n * @memberof BarLayer\n */\n elemType () {\n return 'rect';\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof BarLayer\n */\n static formalName () {\n return 'bar';\n }\n\n /**\n * Returns the default configuration of the bar layer\n * @return {Object} Default configuration of the bar layer\n */\n static defaultConfig () {\n return defaultConfig;\n }\n\n /**\n *\n *\n * @static\n * @param {*} conf\n * @param {*} userConf\n * @returns\n * @memberof BarLayer\n */\n static defaultPolicy (conf, userConf) {\n const config = BaseLayer.defaultPolicy(conf, userConf);\n const encoding = config.encoding;\n const colorField = encoding.color.field;\n const transform = config.transform;\n\n if (colorField) {\n transform.groupBy = colorField;\n }\n return config;\n }\n\n /**\n *\n *\n * @param {*} data\n * @param {*} fieldsConfig\n * @returns\n * @memberof BarLayer\n */\n calculateDomainFromData (data, encodingFieldInf, fieldsConfig) {\n const domain = super.calculateDomainFromData(data, encodingFieldInf, fieldsConfig);\n ['x', 'y'].forEach((d) => {\n if (encodingFieldInf[`${d}FieldType`] === MEASURE && domain[d]) {\n encodingFieldInf[`${d}0Field}`] ? domain[d] = domain[d].sort((a, b) => a - b) :\n (domain[d][0] = Math.min(domain[d][0], 0));\n }\n });\n return domain;\n }\n\n /**\n * Generates an array of objects containing x, y, width and height of the bars from the data\n * @param {Array.} data Data Array\n * @param {Object} encoding Config\n * @param {Object} axes Axes object\n * @param {Object} conf config object for point generation\n * @return {Array.} Array of points\n */\n translatePoints (data, sizeConfig) {\n return getTranslatedPoints(this, data, sizeConfig);\n }\n\n /**\n * Renders the plot in the given container\n * @param {SVGGroup} container SVGGroup where plot will be rendered.\n * @return {BarLayer} Instance of bar layer.\n */\n render (container) {\n const config = this.config();\n const transition = config.transition;\n const store = this._store;\n const normalizedDataArr = store.get(PROPS.NORMALIZED_DATA);\n const transformedData = store.get(PROPS.TRANSFORMED_DATA);\n const keys = transformedData.map(d => d.key);\n const fieldsConfig = this.data().getFieldsConfig();\n const axes = this.axes();\n const height = axes.y && axes.y.scale().range()[0];\n const width = axes.x && axes.x.scale().range()[1];\n const defClassName = config.defClassName;\n const qualifiedClassName = getQualifiedClassName(defClassName, this.id(), config.classPrefix);\n const className = config.className;\n const containerSelection = selectElement(container);\n const dimensions = Object.values(fieldsConfig).filter(e => e.def.type === FieldType.DIMENSION)\n .map(e => e.index);\n containerSelection.classed(qualifiedClassName.join(' '), true);\n containerSelection.classed(className, true);\n clipElement(container, {\n x: 0,\n y: 0,\n width,\n height\n }, `id-${this.id()}`);\n\n this._points = this.generateDataPoints(normalizedDataArr, keys);\n\n createElements({\n data: this._points,\n container,\n selector: 'g',\n append: 'g',\n each: (points, group, i) => {\n const seriesClassName = `${qualifiedClassName[0]}-${keys[i] || i}`.toLowerCase();\n group.style('display', 'block');\n drawRects({\n container: group.node(),\n points,\n className: seriesClassName,\n transition,\n style: {},\n keyFn: d => dimensions.map(key => d._data[key]).join('-')\n });\n }\n });\n return this;\n }\n\n /**\n *\n *\n * @param {*} normalizedData\n * @param {*} keys\n * @returns\n * @memberof BarLayer\n */\n generateDataPoints (normalizedData, keys) {\n const [barWidthMetrics, barHeightMetrics] = getPlotMeasurement(this, keys);\n const barWidthOffsets = barWidthMetrics.offsetValues || [];\n const barHeightOffsets = barHeightMetrics.offsetValues || [];\n this._plotSpan = {\n x: barWidthMetrics.groupSpan || 0,\n y: barHeightMetrics.groupSpan || 0\n };\n this._plotPadding = {\n x: barWidthMetrics.padding || 0,\n y: barHeightMetrics.padding || 0\n };\n\n this._pointMap = {};\n return normalizedData.map((data, i) => this.translatePoints(data,\n {\n barWidth: barWidthMetrics.span,\n barWidthOffset: barWidthOffsets[i] || 0,\n barHeight: barHeightMetrics.span,\n barHeightOffset: barHeightOffsets[i] || 0\n }));\n }\n\n getPlotPadding () {\n return this._plotPadding;\n }\n\n /**\n * Gets the nearest point of the position passed.\n * @param {number} x x position\n * @param {number} y y position\n * @return {Object} Nearest point.\n */\n getNearestPoint (x, y) {\n if (!this.data()) {\n return null;\n }\n let axis;\n let value;\n let index;\n let points;\n let uniqueFieldType;\n let uniqueFieldIndex;\n let filterData;\n let identifiers;\n let pointFound = null;\n const dataModel = this.data();\n const dataObj = dataModel.getData();\n const fieldsConfig = dataModel.getFieldsConfig();\n const axes = this.axes();\n const data = dataObj.data;\n const pointMap = this._pointMap;\n const {\n xField,\n yField,\n xFieldSubType,\n yFieldSubType\n } = this.encodingFieldsInf();\n\n if (xFieldSubType === FieldType.MEASURE) {\n axis = axes.y;\n value = axis.invert(y);\n uniqueFieldIndex = fieldsConfig[yField].index;\n uniqueFieldType = yFieldSubType;\n } else {\n axis = axes.x;\n value = axis.invert(x);\n uniqueFieldIndex = fieldsConfig[xField].index;\n uniqueFieldType = xFieldSubType;\n }\n\n if (uniqueFieldType === DimensionSubtype.CATEGORICAL) {\n points = pointMap[value];\n }\n\n if (uniqueFieldType === DimensionSubtype.TEMPORAL) {\n filterData = [...new Set(data.map(d => d[uniqueFieldIndex]))];\n index = getClosestIndexOf(filterData, value);\n value = filterData[index];\n points = pointMap[value];\n }\n const len = points && points.length;\n points && points.sort((p1, p2) => p1.update.y - p2.update.y);\n for (let i = 0; i < len; i++) {\n const point = points[i];\n const update = point.update;\n if (x >= update.x && x <= (update.width + update.x) && y >= update.y && y <= (update.height + update.y)) {\n pointFound = point;\n break;\n }\n pointFound = null;\n }\n\n const values = pointFound && pointFound._data;\n if (values) {\n identifiers = this.getIdentifiersFromData(values, pointFound._id);\n }\n return pointFound ? {\n dimensions: [pointFound.update],\n id: identifiers,\n layerId: this.id()\n } : pointFound;\n }\n\n getPlotSpan () {\n return this._plotSpan;\n }\n}\n","import { CLASSPREFIX } from '../../enums/constants';\n\nexport const defaultConfig = {\n defClassName: 'layer-tick',\n className: '',\n classPrefix: CLASSPREFIX,\n interaction: {\n highlight: [{\n type: 'stroke',\n intensity: [0, 0, -15, 0]\n }],\n fade: [{\n type: 'stroke',\n intensity: [0, 0, 15, 0]\n }],\n focus: [{\n type: 'stroke',\n intensity: [0, 0, 15, 0]\n }]\n },\n innerPadding: 0.1,\n transform: {\n type: 'identity'\n },\n transition: {\n effect: 'cubic',\n duration: 1000\n },\n encoding: {\n color: { },\n x: {},\n y: {},\n x0: {},\n y0: {},\n strokeOpacity: {\n value: 0.5\n },\n fillOpacity: {\n value: 0.5\n }\n },\n states: {\n highlight: {\n className: `${CLASSPREFIX}-layer-tick-highlight`\n },\n fadeout: {\n className: `${CLASSPREFIX}-layer-tick-fadeout`\n },\n selected: {\n className: `${CLASSPREFIX}-layer-tick-selected`\n }\n }\n};\n","import { selectElement } from 'muze-utils';\n\n/**\n * Draws ticks by using d3 selection\n * @param {Object} params Contains container element and points\n * @return {Selection} Ticks Selection\n */\nexport default /* istanbul ignore next */ (params) => {\n const { points, container, keyFn, className } = params;\n const mount = selectElement(container);\n const ticks = mount.selectAll('path').data(points, keyFn);\n const ticksEnter = ticks.enter().append('path');\n\n mount.attr('class', className || '');\n ticksEnter.each(function (d) {\n const selection = selectElement(this);\n const enter = d.enter || {};\n Object.entries(enter).forEach(attr => (!isNaN(attr[1]) && selection.attr(attr[0], attr[1])));\n });\n\n ticks.exit().remove();\n return ticks.merge(ticksEnter)\n .each(function (d) {\n const selection = selectElement(this);\n const update = d.update;\n const updateStyle = d.style || {};\n const x0 = update.x0 !== undefined ? update.x0 : update.x;\n const y0 = update.y0 !== undefined ? update.y0 : update.y;\n const path = `M ${update.x} ${update.y} L ${x0} ${y0}`;\n d.className && selection.classed(d.className, true);\n selection.attr('d', path);\n Object.entries(updateStyle).forEach(styleObj => selection.style(styleObj[0], styleObj[1]));\n });\n};\n\n","import { FieldType } from 'muze-utils';\nimport { PointLayer } from '../point';\nimport { defaultConfig } from './default-config';\nimport * as PROPS from '../../enums/props';\nimport { ENCODING } from '../../enums/constants';\nimport drawTicks from './renderer';\nimport './styles.scss';\nimport { getAxesScales, getLayerColor, positionPoints, getIndividualClassName } from '../../helpers';\n\nexport default class TickLayer extends PointLayer {\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof TickLayer\n */\n static defaultConfig () {\n return defaultConfig;\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof TickLayer\n */\n static formalName () {\n return 'tick';\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof TickLayer\n */\n static drawFn () {\n return drawTicks;\n }\n\n /**\n *\n *\n * @returns\n * @memberof TickLayer\n */\n elemType () {\n return 'path';\n }\n\n /**\n * Generates an array of objects containing x, y, width and height of the points from the data\n * @param {Array.} data Data Array\n * @param {Object} encoding Config\n * @param {Object} axes Axes object\n * @return {Array.} Array of points\n */\n translatePoints (data, encoding, axes, config = {}) {\n let points = [];\n const {\n xAxis,\n yAxis\n } = getAxesScales(axes);\n const fieldsConfig = this.data().getFieldsConfig();\n const {\n xField,\n yField,\n x0Field,\n y0Field,\n xFieldType,\n yFieldType\n } = this.encodingFieldsInf();\n const isXDim = xFieldType === FieldType.DIMENSION;\n const isYDim = yFieldType === FieldType.DIMENSION;\n const key = isXDim ? ENCODING.X : (isYDim ? ENCODING.Y : null);\n const colorEncoding = encoding.color;\n const colorField = colorEncoding && colorEncoding.field;\n const colorFieldIndex = fieldsConfig[colorField] && fieldsConfig[colorField].index;\n const measurement = this._store.get(PROPS.MEASUREMENT);\n const colorAxis = axes.color;\n const { x: offsetX, y: offsetY } = config.offset;\n const { x: xSpan, y: ySpan } = config.span;\n for (let i = 0, len = data.length; i < len; i++) {\n let xPx;\n let x0Px;\n let y0Px;\n let yPx;\n const d = data[i];\n const row = d._data;\n if (xField) {\n xPx = xAxis.getScaleValue(d.x) + offsetX;\n x0Px = xPx + xSpan;\n }\n\n if (yField) {\n yPx = yAxis.getScaleValue(d.y) + offsetY;\n y0Px = yPx !== null ? yPx + ySpan : null;\n }\n\n if (!xField) {\n xPx = 0;\n x0Px = measurement.width;\n if (!isNaN(yPx)) {\n yPx += ySpan / 2;\n y0Px = yPx;\n }\n }\n\n if (!yField) {\n yPx = 0;\n y0Px = measurement.height;\n x0Px = xPx += xSpan / 2;\n }\n\n if (x0Field) {\n x0Px = xAxis.getScaleValue(d.x0) + xSpan;\n yPx += ySpan / 2;\n y0Px -= ySpan / 2;\n }\n\n if (y0Field) {\n y0Px = yAxis.getScaleValue(d.y0) + ySpan;\n xPx += xSpan / 2;\n x0Px -= xSpan / 2;\n }\n const style = {};\n const meta = {};\n const { color, rawColor } = getLayerColor({ datum: d, index: i },\n { colorEncoding, colorAxis, colorFieldIndex });\n\n style.stroke = color;\n meta.stateColor = {};\n meta.originalColor = rawColor;\n meta.colorTransform = {};\n if (!isNaN(xPx) && !isNaN(yPx)) {\n const point = {\n enter: {},\n update: {\n x: xPx,\n y: yPx,\n x0: x0Px,\n y0: y0Px\n },\n style,\n _data: row,\n _id: d._id,\n source: row,\n rowId: d._id,\n meta\n };\n point.className = getIndividualClassName(d, i, data, this);\n points.push(point);\n this.cachePoint(d[key], point);\n }\n }\n points = positionPoints(this, points);\n return points;\n }\n\n getMeasurementConfig (offsetX, offsetY, widthSpan, heightSpan) {\n return {\n offset: {\n x: (offsetX || 0),\n y: (offsetY || 0)\n },\n span: {\n x: widthSpan,\n y: heightSpan\n }\n };\n }\n}\n","import { isSimpleObject, mergeRecursive, getObjProp } from 'muze-utils';\n\nconst parseLayerDefinition = (sink, definition, layerDef, layerType) => {\n for (const key in definition) {\n if (Object.hasOwnProperty.call(definition, key)) {\n let strs;\n let propValue;\n const def = definition[key];\n if (isSimpleObject(def)) {\n sink[key] = {};\n parseLayerDefinition(sink[key], def, layerDef, layerType);\n } else if (typeof def === 'string' && (strs = def.split('.')) && strs[0] === layerType) {\n propValue = getObjProp(layerDef, ...strs.slice(1, strs.length));\n if (propValue !== undefined) {\n sink[key] = propValue;\n }\n } else {\n sink[key] = def;\n }\n }\n }\n};\n\nconst sanitizeEncoding = (encoding) => {\n // Create object for each encoding value if encoding value is a string\n for (const key in encoding) {\n if (typeof encoding[key] === 'string') {\n encoding[key] = {\n field: encoding[key]\n };\n }\n }\n};\n\n/**\n * Layer Factory creates layers based on the layer type. All types of layers needs to register in\n * the layer factory. For getting a layer instance, getLayer method needs to invoked with the\n * layerType and other arguments.\n */\nconst layerFactory = (() => {\n const compositeLayers = {};\n const factoryObj = {\n setLayerRegistry: (reg) => {\n factoryObj._layerRegistry = reg;\n },\n getSerializedConf: (mark, layerDef) => {\n let serializedDefs;\n const defs = compositeLayers[mark];\n const newConf = mergeRecursive({}, layerDef);\n\n // If it is a composite layer then resolve all the definitions of each unit layer\n if (defs) {\n serializedDefs = defs.map((unitLayerDef) => {\n const sDef = {};\n parseLayerDefinition(sDef, unitLayerDef, newConf, mark);\n sanitizeEncoding(sDef.encoding);\n return sDef;\n });\n } else {\n const encoding = newConf.encoding;\n // Create object for each encoding value if encoding value is a string\n sanitizeEncoding(encoding);\n serializedDefs = newConf;\n }\n\n return serializedDefs;\n },\n getLayerInstance: (layerDef) => {\n const layerRegistry = factoryObj._layerRegistry;\n layerDef = !(layerDef instanceof Array) ? [layerDef] : layerDef;\n const instances = layerDef.map((layerObj) => {\n const layerConstructor = layerRegistry[layerObj.mark];\n return layerConstructor.create();\n });\n return instances.length === 1 ? instances[0] : instances;\n },\n composeLayers: (layerType, layerDefs) => {\n compositeLayers[layerType] = layerDefs;\n },\n sanitizeLayerConfig: (layerDef) => {\n const newConf = mergeRecursive({}, layerDef);\n sanitizeEncoding(newConf.encoding);\n return newConf;\n }\n };\n return factoryObj;\n})();\n\nexport default layerFactory;\n","import { AreaLayer } from './layers/area';\nimport { ArcLayer } from './layers/arc';\nimport { LineLayer } from './layers/line';\nimport { TextLayer } from './layers/text';\nimport { PointLayer } from './layers/point';\nimport { BarLayer } from './layers/bar';\nimport { BaseLayer } from './base-layer';\nimport * as CONSTANTS from './enums/constants';\nimport { TickLayer } from './layers/tick';\n\nexport const DEFAULT_LAYERS = {\n [CONSTANTS.AREA_LAYER]: AreaLayer,\n [CONSTANTS.ARC_LAYER]: ArcLayer,\n [CONSTANTS.LINE_LAYER]: LineLayer,\n [CONSTANTS.TEXT_LAYER]: TextLayer,\n [CONSTANTS.POINT_LAYER]: PointLayer,\n [CONSTANTS.TICK_LAYER]: TickLayer,\n [CONSTANTS.BAR_LAYER]: BarLayer,\n [CONSTANTS.BASE_LAYER]: BaseLayer\n};\n","/**\n * This file exports constants that are used as enums in the\n * crosstab group implementation.\n */\n/**\n * Width of the crosstab.\n */\nexport const X = 'x';\n/**\n * Width of the crosstab.\n */\nexport const Y = 'y';\n/**\n * Width of the crosstab.\n */\nexport const WIDTH = 'width';\n\n/**\n * Height of the crosstab.\n */\nexport const HEIGHT = 'height';\n\n/**\n * Field referring to object storing measurement configuration.\n */\nexport const MEASUREMENT = 'measurement';\n\n/**\n * Field referring to object storing configuration properties.\n */\nexport const CONFIG = 'config';\n\n/**\n * Width of visual unit in crosstab.\n */\nexport const MIN_UNIT_WIDTH = 'minUnitWidth';\n\n/**\n * Height of visual unit.\n */\nexport const MIN_UNIT_HEIGHT = 'minUnitHeight';\n\n/**\n * Field to store the array of dimensions to facet by.\n */\nexport const DIMENSIONS = 'dimensions';\n\n/**\n * Field to store array of measures to use as x axis.\n */\nexport const MEASURES = 'measures';\n\n/**\n * Field to store the array of dimensions to facet by.\n */\nexport const DIMENSION = 'dimension';\n\n/**\n * Field to store array of measures to use as x axis.\n */\nexport const MEASURE = 'measure';\n\n/**\n * Flag to specify if model should be pivoted.\n */\nexport const PIVOT = 'pivot';\n\n/**\n * Flag to specify format\n */\nexport const FORMAT = 'format';\n\n/**\n * Mount point where the variable will be hosted\n */\nexport const MOUNT = 'mount';\n\n/**\n * Data update flag\n */\nexport const HAS_DATA_UPDATED = 'hasDataUpdated';\n\n/**\n * Field referring to object storing set of rows\n */\nexport const ROWS = 'rows';\n\n/**\n * Field referring to object storing set of columns\n */\nexport const COLUMNS = 'columns';\n\n/**\n * Field referring to object storing set of columns\n */\nexport const COL = 'col';\n\n/**\n * Field referring to object storing set of rows\n */\nexport const ROW = 'row';\n\n/**\n * Field referring to object storing set of columns\n */\nexport const COLUMN = 'column';\n\n/**\n * Field referring to object storing color field\n */\nexport const COLOR = 'color';\n\n/**\n * Field referring to object storing shape field\n */\nexport const SHAPE = 'shape';\n\n/**\n * Field referring to object storing size field\n */\nexport const SIZE = 'size';\n\n/**\n * Field referring to object storing detail field\n */\nexport const DETAIL = 'detail';\n\n/**\n * Field referring to object storing set of layers\n */\nexport const LAYERS = 'layers';\n\n/**\n * Field referring to object storing the transforms\n */\nexport const TRANSFORM = 'transform';\n\n/**\n * Field referring to object storing the transforms\n */\nexport const ORDINAL = 'ordinal';\n\n/**\n * Field referring to object storing the transforms\n */\nexport const LINEAR = 'linear';\n/**\n * Field referring to object storing the transforms\n */\nexport const LEFT = 'left';\n/**\n * Field referring to object storing the transforms\n */\nexport const RIGHT = 'right';\n/**\n * Field referring to object storing the transforms\n */\nexport const TOP = 'top';\n/**\n * Field referring to object storing the transforms\n */\nexport const BOTTOM = 'bottom';\n\n/**\n * Field referring to object storing the transforms\n */\nexport const RETINAL = 'retinal';\n/**\n * Field referring to object storing the transforms\n */\nexport const CELL = 'cell';\n/**\n * Field referring to object storing the transforms\n */\nexport const X_AXES = 'xAxes';\n/**\n * Field referring to object storing the transforms\n */\nexport const Y_AXES = 'yAxes';\n/**\n * Field referring to object storing the transforms\n */\nexport const ENTRY_CELLS = 'entryCell';\n/**\n * Field referring to object storing the transforms\n */\nexport const INITIALIZED = 'initialized';\n/**\n * Field referring to object storing the transforms\n */\nexport const EXIT_CELLS = 'exitCell';\n/**\n * Field referring to object storing the transforms\n */\nexport const AXIS = 'axis';\n/**\n * Field referring to object storing the transforms\n */\nexport const UNIT = 'unit';\n/**\n * Field referring to object storing the transforms\n */\nexport const UPDATED = 'updated';\n/**\n * Field referring to object storing the transforms\n */\nexport const BEFORE_UPDATE = 'beforeupdate';\n/**\n * Field referring to object storing the transforms\n */\nexport const VALUE_MATRIX = 'valueMatrix';\n/**\n * Field referring to object storing the transforms\n */\nexport const FACET_HEADERS = 'facet-headers';\n/**\n * Field referring to object storing the transforms\n */\nexport const RADIUS = 'radius';\n/**\n * Field referring to object storing the transforms\n */\nexport const ANGLE = 'angle';\n/**\n * Field referring to object storing the transforms\n */\nexport const ARC = 'arc';\n/**\n * Field referring to object storing the transforms\n */\nexport const CARTESIAN = 'cartesian';\n/**\n * Field referring to object storing the transforms\n */\nexport const POLAR = 'polar';\n/**\n * Field referring to object storing the transforms\n */\nexport const CATEGORICAL = 'categorical';\n/**\n * Field referring to object storing the transforms\n */\nexport const TEMPORAL = 'temporal';\n/**\n * Field referring to object storing the transforms\n */\nexport const BAR = 'bar';\n/**\n * Field referring to object storing the transforms\n */\nexport const LINE = 'line';\n/**\n * Field referring to object storing the transforms\n */\nexport const POINT = 'point';\n/**\n * Field referring to object storing the transforms\n */\nexport const PRIMARY = 'Primary';\n/**\n * Field referring to object storing the transforms\n */\nexport const SECONDARY = 'Secondary';\n/**\n * Field referring to object storing the transforms\n */\nexport const BOTH = 'both';\n/**\n * Field referring to object storing the transforms\n */\nexport const INTERACTION = 'interaction';\n/**\n * Field referring to object storing the transforms\n */\nexport const GRID_LINES = 'gridLines';\n/**\n * Field referring to object storing the transforms\n */\nexport const GRID_BANDS = 'gridBands';\n/**\n * Field referring to object storing the transforms\n */\nexport const HEADER = 'header';\n/**\n * Field referring to object storing the transforms\n */\nexport const FACET = 'facet';\n\n","import { ROWS, COLUMNS, COLOR, SHAPE, SIZE, DETAIL, LAYERS, TRANSFORM, CONFIG } from '../enums/constants';\n\n/**\n * @module\n * This is the local options semantics based on which setters getters are created and reactivity is initiated.\n * This local object is only valid for Artboard.\n * Artboard merges global and local object both to the model\n *\n * Format\n * PROPERTRY_NAME: {\n * value: // default value of the property,\n * meta: {\n * typeCheck: // The setter value will be checked using this. If the value is function then the setter value\n * // is passed as args.\n * typeExpected: // The output of typecheck action will be tested against this. Truthy value will set the\n * // value to the setter\n * sanitizaiton: // Need for sanitization before type is checked\n * }\n * }\n */\n\nexport default {\n [CONFIG]: {},\n [ROWS]: [],\n [COLUMNS]: [],\n [COLOR]: '',\n [SHAPE]: '',\n [SIZE]: '',\n [DETAIL]: '',\n [LAYERS]: '',\n [TRANSFORM]: []\n};\n","import { ERROR_MSG } from 'muze-utils';\n\n/**\n * Interfaces for VisualGroup. Any new VisualGroup has to implement this class.\n * @class SimpleGroup\n */\nclass SimpleGroup {\n\n /**\n * This method is used to set or get the DataModel instance.\n *\n * @param {DataModel | undefined} dataModel Instance of datamodel.\n\n * @memberof SimpleGroup\n */\n data () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * This method is used to set or get the group specific configuration\n * properties\n *\n * @param {Object | undefined} configObj The input configuration.\n * or instance of visual group.\n * @memberof SimpleGroup\n */\n config () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * This method is used to return a serialized representation of the\n * instance's properties.\n *\n * @memberof SimpleGroup\n */\n serialize () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * This method is used to get or set the measurement object which houses\n * layout properties like width and height.\n *\n * @param {Object | undefined} mObj The measurement properties.\n * @memberof SimpleGroup\n */\n measurement () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n}\n\nexport default SimpleGroup;\n","import { ERROR_MSG } from 'muze-utils';\n\n/**\n *\n *\n * @export\n * @class Variable\n */\nexport default class Variable {\n\n /**\n *\n *\n * @memberof Variable\n */\n type () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n *\n *\n * @memberof Variable\n */\n toString () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n}\n","import Variable from './variable';\n\n/**\n *\n *\n * @class ComposeVars\n * @extends {Variable}\n */\nclass ComposedVars extends Variable {\n\n /**\n *Creates an instance of ComposeVars.\n * @param {*} texts\n * @memberof ComposeVars\n */\n constructor (...texts) {\n super(...texts);\n this.vars(texts);\n }\n\n /**\n *\n *\n * @param {*} params\n * @returns\n * @memberof ComposeVars\n */\n vars (...params) {\n if (params.length) {\n this._vars = params[0];\n return this;\n }\n return this._vars;\n }\n\n /**\n *\n *\n * @param {*} dm\n * @returns\n * @memberof ComposeVars\n */\n data (...dm) {\n if (dm.length) {\n this.vars().forEach(d => d.data(dm[0]));\n return this;\n }\n return this._data;\n }\n\n /**\n *\n *\n * @returns\n * @memberof ComposeVars\n */\n getMembers () {\n const vars = this.vars();\n return vars.map(member => member.getMembers()[0]);\n }\n\n /**\n *\n *\n * @returns\n * @memberof ComposeVars\n */\n type () {\n return this.vars()[0].type();\n }\n\n /**\n *\n *\n * @returns\n * @memberof ComposeVars\n */\n toString () {\n return this.vars().map(d => d.toString()).join(',');\n }\n\n /**\n *\n *\n * @returns\n * @memberof ComposeVars\n */\n numberFormat () {\n return this.vars()[0].numberFormat();\n }\n\n /**\n *\n *\n * @returns\n * @memberof ComposeVars\n */\n format (values) {\n return this.vars()[0].format(values);\n }\n\n /**\n *\n *\n * @returns\n * @memberof ComposedVars\n */\n subtype () {\n return this.vars()[0].subtype();\n }\n\n /**\n *\n *\n * @returns\n * @memberof ComposedVars\n */\n getMinDiff () {\n return this.vars()[0].getMinDiff();\n }\n}\n\nexport default ComposedVars;\n","import { DateTimeFormatter } from 'muze-utils';\nimport Variable from './variable';\n\n/**\n *\n *\n * @export\n * @class Vars\n * @extends {Variable}\n */\nexport default class SimpleVariable extends Variable {\n\n /**\n *Creates an instance of Vars.\n * @param {*} text\n * @memberof Vars\n */\n constructor (text) {\n super();\n this.oneVar(text);\n }\n\n /**\n *\n *\n * @param {*} params\n * @returns\n * @memberof Vars\n */\n oneVar (...oneV) {\n if (oneV.length) {\n this._oneVar = oneV[0];\n return this;\n }\n return this._oneVar;\n }\n\n /**\n *\n *\n * @param {*} dm\n * @returns\n * @memberof Vars\n */\n data (...dm) {\n if (dm.length) {\n this._data = dm[0];\n return this;\n }\n return this._data;\n }\n\n /**\n *\n *\n * @returns\n * @memberof Vars\n */\n toString () {\n return this.oneVar();\n }\n\n /**\n *\n *\n * @memberof SimpleVariable\n */\n numberFormat () {\n if (this.type() === 'measure') {\n const formatter = this.data().getFieldspace().getMeasure()[this.oneVar()]._ref;\n return formatter.numberFormat();\n } return val => val;\n }\n\n /**\n *\n *\n * @memberof SimpleVariable\n */\n format (values) {\n if (values && this.subtype() === 'temporal') {\n const formatter = this.data().getFieldspace().getDimension()[this.oneVar()]._ref.schema.format;\n const dtFormat = new DateTimeFormatter(formatter);\n values = values.map(e => dtFormat.getNativeDate(e));\n }\n return values;\n }\n\n /**\n *\n *\n * @returns\n * @memberof Vars\n */\n getMembers () {\n return [this.oneVar()];\n }\n\n /**\n *\n *\n * @returns\n * @memberof Vars\n */\n type () {\n const fieldDef = this.data().getFieldsConfig()[this.oneVar()].def;\n return fieldDef.type;\n }\n\n /**\n *\n *\n * @returns\n * @memberof Vars\n */\n subtype () {\n const fieldDef = this.data().getFieldsConfig()[this.oneVar()].def;\n return fieldDef.subtype || fieldDef.type;\n }\n\n /**\n *\n *\n * @returns\n * @memberof SimpleVariable\n */\n getMinDiff () {\n const fieldSpace = this.data().getFieldspace();\n return fieldSpace.fieldsObj()[this.oneVar()].getMinDiff();\n }\n\n equals (varInst) {\n return this.oneVar() === varInst.oneVar();\n }\n}\n","import { ComposedVars, SimpleVariable } from '../variable';\nimport { DIMENSION, COLUMNS, ROWS, TEMPORAL } from '../enums/constants';\n\n/**\n * Gets the list of fields in a sorted order by measurement and dimension\n *\n * @param {Array} fieldList List of fields in the view\n * @param {Object} fieldMap Mapping of fields in the datamodel\n * @return {Array} fields sorted by measurement and dimensions\n */\nconst orderFields = (fieldArray, type) => {\n const dimensionArr = [[], []];\n const measureArr = [[], []];\n const temporalArr = [[], []];\n const categoricalArr = [[], []];\n\n fieldArray.forEach((fieldList, index) => {\n fieldList.forEach((field) => {\n if (field.type() === DIMENSION) {\n dimensionArr[index].push(field);\n field.subtype() === TEMPORAL ? temporalArr[index].push(field) : categoricalArr[index].push(field);\n } else {\n measureArr[index].push(field);\n }\n });\n });\n\n const numOfMeasures = measureArr[0].length + (measureArr[1] ? measureArr[1].length : 0);\n\n // Single array of fields\n if (!fieldArray[1]) {\n // Push measures to bottom\n measureArr[1] = type === COLUMNS ? measureArr[0] : [];\n // Push measures to left\n measureArr[0] = type !== COLUMNS ? measureArr[0] : [];\n // Bottom and right dimensions empty\n dimensionArr[1] = [];\n // Left and top filled with dimensions\n dimensionArr[0] = dimensionArr[0];\n if (numOfMeasures === 0) {\n const allDimensions = [...dimensionArr[0], ...dimensionArr[1]];\n if (type === COLUMNS) {\n dimensionArr[1] = allDimensions[allDimensions.length - 1] ? [allDimensions[allDimensions.length - 1]]\n : [];\n allDimensions.splice(-1, 1);\n } else {\n dimensionArr[1] = [];\n }\n dimensionArr[0] = [...allDimensions];\n }\n }\n\n if (dimensionArr[0].length && dimensionArr[1].length && numOfMeasures > 0) {\n dimensionArr[0] = [...dimensionArr[0], ...dimensionArr[1]];\n dimensionArr[1] = [];\n }\n return {\n fields: dimensionArr.map((list, i) => (i === 1 ?\n measureArr[i].concat(dimensionArr[i]) : dimensionArr[i].concat(measureArr[i]))),\n dimensions: [...dimensionArr[0], ...dimensionArr[1]],\n measures: [...measureArr[0], ...measureArr[1]],\n temporal: [...temporalArr[0], ...temporalArr[1]],\n categorical: [...categoricalArr[0], ...categoricalArr[1]]\n };\n};\n\n/**\n * Gets the list of normalized fields\n *\n * @param {Array} fields List of fields in the view\n * @param {Object} fieldMap Mapping of fields in the datamodel\n * @return {Array} fields normalized by measurement and dimensions\n */\nconst normalizeFields = (config, type) => {\n const fieldsArr = [];\n const fields = config[type];\n\n if (!(fields[0] instanceof Array)) {\n fieldsArr[0] = fields;\n } else {\n fieldsArr[0] = fields[0] || [];\n fieldsArr[1] = fields[1] || [];\n }\n return fieldsArr;\n};\n\n/**\n *\n *\n * @param {*} fields\n * @param {*} datamodel\n * @return\n */\nconst convertToVar = (datamodel, fields) => {\n const vars = [];\n\n fields && fields.forEach((field) => {\n if (field instanceof ComposedVars) {\n vars.push(field);\n field.data(datamodel);\n } else {\n vars.push(new SimpleVariable(field).data(datamodel));\n }\n });\n return vars;\n};\n\n/**\n *\n *\n * @param {*} rows\n * @param {*} columns\n * @param {*} datamodel\n * @return\n */\nexport const transformFields = (datamodel, config) => {\n const [rowsInfo, columnsInfo] = [ROWS, COLUMNS].map((fields) => {\n const normalizedFields = normalizeFields(config, fields);\n const norFields = [convertToVar(datamodel, normalizedFields[0])];\n\n if (normalizedFields[1]) {\n norFields[1] = convertToVar(datamodel, normalizedFields[1]);\n }\n return orderFields(norFields, fields);\n });\n const {\n fields: rows,\n dimensions: rowDimensions,\n measures: rowMeasures,\n temporal: rowTemporalFields,\n categorical: rowCategoricalFields\n } = rowsInfo;\n const {\n fields: columns,\n dimensions: columnDimensions,\n measures: columnMeasures,\n temporal: columnTemporalFields,\n categorical: columnCategoricalFields\n } = columnsInfo;\n return {\n rows,\n rowDimensions,\n rowMeasures,\n rowTemporalFields,\n rowCategoricalFields,\n columns,\n columnTemporalFields,\n columnCategoricalFields,\n columnDimensions,\n columnMeasures\n };\n};\n","import { ERROR_MSG, mergeRecursive } from 'muze-utils';\nimport { transformFields } from './field-sanitizer';\nimport { getHeaderAxisFrom } from '../group-helper/group-utils';\nimport { ROW, COLUMN } from '../enums/constants';\n\n/**\n *\n *\n * @export\n * @class VisualEncoder\n */\nexport default class VisualEncoder {\n\n /**\n *\n *\n * @memberof VisualEncoder\n */\n createAxis () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n *\n *\n * @memberof VisualEncoder\n */\n setCommonDomain () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n *\n *\n * @memberof VisualEncoder\n */\n getLayerConfig () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n fieldInfo (...info) {\n if (info.length) {\n this._fieldInfo = mergeRecursive(this._fieldInfo || {}, info[0]);\n return this;\n }\n return this._fieldInfo;\n }\n\n /**\n *\n *\n * @param {*} datamodel\n * @param {*} config\n * @return\n * @memberof VisualEncoder\n */\n fieldSanitizer (datamodel, config) {\n this.fieldInfo(transformFields(datamodel, config));\n return this.fieldInfo();\n }\n\n /**\n *\n *\n * @param {*} params\n * @return\n * @memberof VisualEncoder\n */\n axisFrom (...params) {\n if (params.length) {\n this._axisFrom = params[0];\n return this;\n }\n return this._axisFrom;\n }\n\n /**\n *\n *\n * @param {*} params\n * @return\n * @memberof VisualEncoder\n */\n headerFrom (...params) {\n if (params.length) {\n this._headerFrom = params[0];\n return this;\n }\n return this.__headerFrom;\n }\n\n /**\n *\n *\n * @param {*} axisFrom\n * @return\n * @memberof CartesianEncoder\n */\n setAxisAndHeaders (axisFrom = {}, fields) {\n const [rowHeader, rowAxis] = getHeaderAxisFrom(ROW, fields.rows, axisFrom);\n const [colHeader, colAxis] = getHeaderAxisFrom(COLUMN, fields.columns, axisFrom);\n\n this.axisFrom({\n row: rowAxis,\n column: colAxis\n });\n this.headerFrom({\n row: rowHeader,\n column: colHeader\n });\n return this;\n }\n}\n","import { ContinousAxis, BandAxis, TimeAxis, ColorAxis, SizeAxis, ShapeAxis } from '@chartshq/muze-axis';\n\nexport const scaleMaps = {\n linear: ContinousAxis,\n band: BandAxis,\n temporal: TimeAxis,\n size: SizeAxis,\n color: ColorAxis,\n shape: ShapeAxis\n};\n","import { ScaleType } from '@chartshq/muze-axis';\n\n/**\n * Map of DataModel types to associated field types.\n */\nexport const dataTypeScaleMap = {\n dimension: ScaleType.BAND,\n categorical: ScaleType.BAND,\n measure: ScaleType.LINEAR,\n temporal: ScaleType.TIME\n};\n\n","import { mergeRecursive } from 'muze-utils';\nimport { AxisOrientation } from '@chartshq/muze-axis';\nimport { scaleMaps } from '../enums/scale-maps';\nimport { getAxisType, getAxisKey } from '../group-helper';\nimport { dataTypeScaleMap } from '../data-type-scale-map';\nimport { CATEGORICAL, TEMPORAL, BAR, LINE, POINT, BOTH, Y } from '../enums/constants';\n\n/**\n *\n *\n * @param {*} axisInfo\n * @param {*} field\n * @param {*} axesCreators\n * @return\n */\nconst getAxisConfig = (axisInfo, field, axesCreators) => {\n let axisOrientation;\n const { index, axisIndex, axisType } = axisInfo;\n const { config, position } = axesCreators;\n const userAxisConfig = config.axes ? (config.axes[axisType] || {}) : {};\n const {\n LEFT,\n RIGHT,\n TOP,\n BOTTOM\n } = AxisOrientation;\n const allOrientations = axisType === Y ? [LEFT, RIGHT] : [TOP, BOTTOM];\n\n if (position === BOTH) {\n axisOrientation = allOrientations[axisIndex];\n } else {\n axisOrientation = position;\n }\n const axisConfig = {\n id: `${axisType}-${index}-${axisIndex}`,\n name: field.toString(),\n field: field.toString(),\n labels: { rotation: 0 },\n numberFormat: field.numberFormat(),\n orientation: axisOrientation,\n type: dataTypeScaleMap[field.subtype()]\n };\n userAxisConfig.tickValues = field.format(userAxisConfig.tickValues);\n userAxisConfig.domain = field.format(userAxisConfig.domain);\n\n return mergeRecursive(axisConfig, userAxisConfig);\n};\n\n/**\n *\n *\n * @param {*} axisInfo\n * @param {*} field\n * @param {*} axesCreators\n * @return\n */\nconst createSimpleAxis = (axisConfig, field, axesCreators) => {\n const { labelManager } = axesCreators;\n const Cls = scaleMaps[dataTypeScaleMap[field.subtype()]];\n const simpleAxis = new Cls(axisConfig, { labelManager });\n return simpleAxis;\n};\n\n/**\n *\n *\n * @param {*} axisType\n * @param {*} fieldInfo\n * @param {*} axesCreators\n * @param {*} groupAxes\n * @return\n */\nexport const generateAxisFromMap = (axisType, fieldInfo, axesCreators, groupAxes) => {\n let axisKey;\n const currentAxes = [];\n const { fields, index } = fieldInfo;\n const { cacheMaps } = axesCreators;\n const map = cacheMaps[`${axisType}AxesMap`];\n\n fields.forEach((field, axisIndex) => {\n axisKey = getAxisKey(axisType, index, dataTypeScaleMap[field.subtype()]);\n const axisConfig = getAxisConfig({ index, axisIndex, axisType }, field, axesCreators);\n\n if (!map.has(axisKey)) {\n const xAxis = createSimpleAxis(axisConfig, field, axesCreators);\n currentAxes.push(xAxis);\n } else {\n const axes = map.get(axisKey);\n axes[axisIndex] = axes[axisIndex] ? axes[axisIndex] : createSimpleAxis(axisConfig, field, axesCreators);\n axes[axisIndex]._rotationLock = false;\n axes[axisIndex] && axes[axisIndex].config(axisConfig).domain(axisConfig.domain || []);\n }\n });\n\n if (currentAxes.length) {\n map.set(axisKey, currentAxes);\n }\n\n for (const [key] of map.entries()) {\n if (key === axisKey) {\n groupAxes.add(axisKey);\n }\n }\n return map.get(axisKey);\n};\n\n/**\n *\n *\n * @memberof MatrixResolver\n */\nexport const mutateAxesFromMap = (cacheMaps, axes) => {\n const {\n xAxesMap,\n yAxesMap\n } = cacheMaps;\n const {\n x: xAxisSet,\n y: yAxisSet\n } = axes;\n const xAxes = [];\n const yAxes = [];\n\n xAxisSet.forEach((axisId) => {\n const xAxis = xAxesMap.get(axisId);\n xAxes.push(xAxis);\n });\n yAxisSet.forEach((axisId) => {\n const yAxis = yAxesMap.get(axisId);\n yAxes.push(yAxis);\n });\n return {\n xAxes, yAxes\n };\n};\n\n/**\n * return a default mark based on predefined set of rules of type and subtype of the fields\n *\n * @param {string} colFieldType dimension/measure - temporal/ordinal/nominal\n * @param {string} rowFieldType dimension/measure - temporal/ordinal/nominal\n * @return {Object} return mark type\n */\nexport const getDefaultMark = (colFieldType, rowFieldType) => {\n let mark;\n\n if (colFieldType === CATEGORICAL || rowFieldType === CATEGORICAL) {\n mark = BAR;\n } else if (colFieldType === TEMPORAL || rowFieldType === TEMPORAL) {\n mark = LINE;\n } else {\n mark = POINT;\n }\n\n return mark;\n};\n\n/**\n *\n *\n * @param {*} axesCreators\n * @param {*} [fieldInfo=[]]\n * @return\n */\nexport const createRetinalAxis = (axesCreators, fieldProps = {}) => {\n const { axisType, fieldsConfig } = axesCreators;\n const field = fieldProps.field;\n const axis = [];\n const Cls = scaleMaps[axisType];\n\n fieldProps.type = fieldProps.type ? fieldProps.type : getAxisType(fieldsConfig, field || null);\n axis.push(new Cls(fieldProps));\n return axis;\n};\n\n/**\n *\n *\n * @param {*} arr\n * @param {*} val\n * @return\n */\nexport const getIndex = (arr, val) => {\n let i = 0;\n let arrIndex = -1;\n\n while (arrIndex === -1 && i < arr.length) {\n if (arr[i].toString() === val.toString()) {\n arrIndex = i;\n }\n i++;\n }\n return arrIndex;\n};\n\n/**\n *\n *\n * @param {*} colFields\n * @param {*} rowFields\n * @param {*} userLayerConfig\n * @return\n * @memberof CartesianEncoder\n */\nexport const getLayerConfFromFields = (colFields, rowFields, userLayerConfig) => userLayerConfig.filter((conf) => {\n const userConf = conf instanceof Array ? conf : [conf];\n const encodingArr = [].concat(...userConf.map(d => d.encoding).filter(d => d !== undefined));\n\n if (!encodingArr.length) {\n return true;\n }\n\n const xFields = [].concat(...encodingArr.map(d => [d.x && d.x.field, d.x0 && d.x0.field]))\n .filter(d => d !== undefined && d !== null);\n const yFields = [].concat(...encodingArr.map(d => [d.y && d.y.field, d.y0 && d.y0.field]))\n .filter(d => d !== undefined && d !== null);\n\n if (!xFields.length && !yFields.length) {\n return true;\n }\n\n const colFieldExist = xFields.length ? xFields.every(d => colFields.indexOf(d) !== -1) : false;\n const rowFieldExist = yFields.length ? yFields.every(d => rowFields.indexOf(d) !== -1) : false;\n if (xFields.length && yFields.length) {\n return colFieldExist && rowFieldExist;\n }\n return colFieldExist || rowFieldExist;\n});\n","import { layerFactory } from '@chartshq/visual-layer';\nimport { mergeRecursive } from 'muze-utils';\nimport { generateAxisFromMap, getDefaultMark, getIndex, getLayerConfFromFields } from './encoder-helper';\nimport { retriveDomainFromData } from '../group-helper';\n\nimport { ROW, COLUMN, COL, LEFT, TOP, CARTESIAN, MEASURE, BOTH, X, Y } from '../enums/constants';\nimport VisualEncoder from './visual-encoder';\n\n/**\n *\n *\n * @export\n * @class CartesianEncoder\n * @extends {VisualEncoder}\n */\nexport default class CartesianEncoder extends VisualEncoder {\n\n /**\n *\n *\n * @return\n * @memberof CartesianEncoder\n */\n static type () {\n return CARTESIAN;\n }\n\n /**\n *\n *\n * @param {*} axesCreators\n * @param {*} fieldInfo\n * @return\n * @memberof CartesianEncoder\n */\n createAxis (axesCreators, fieldInfo) {\n const geomCellAxes = {};\n const {\n axes\n } = axesCreators;\n const {\n projections,\n indices\n } = fieldInfo;\n const {\n rowFields,\n columnFields\n } = projections;\n const {\n rowIndex,\n columnIndex\n } = indices;\n const axisFields = [{\n fields: rowFields,\n index: rowIndex\n }, {\n fields: columnFields,\n index: columnIndex\n }];\n const xAxes = axes.x || [];\n const yAxes = axes.y || [];\n\n [rowFields, columnFields].forEach((fields, i) => {\n const type = i === 0 ? ROW : COLUMN;\n const axis = i === 0 ? Y : X;\n\n if (fields.length > 1) {\n axesCreators.position = BOTH;\n } else {\n axesCreators.position = this.axisFrom()[type];\n }\n geomCellAxes[axis] = generateAxisFromMap(axis, axisFields[i], axesCreators, axis === X ? xAxes : yAxes);\n });\n return geomCellAxes;\n }\n\n /**\n *\n *\n * @param {*} fields\n * @return\n * @memberof CartesianEncoder\n */\n getFacetsAndProjections (fields, type) {\n let facets = [];\n let projections = [];\n let counter = 0;\n const primaryFacets = [];\n const secondaryFacets = [];\n const primaryFields = fields[0];\n const secondaryFields = fields[1];\n const primaryLen = primaryFields.length;\n const secondaryLen = secondaryFields.length;\n const axisFrom = this.axisFrom();\n\n for (let i = 0; i < primaryLen; i++) {\n let projArr = [primaryFields[i]];\n const primaryField = primaryFields[i];\n\n if (primaryField.type() === MEASURE) {\n const secondaryField = secondaryFields[counter];\n if (secondaryField && secondaryField.type() === MEASURE) {\n counter++;\n projArr = [primaryField, secondaryField];\n }\n projections.push(projArr);\n } else {\n facets.push(primaryField);\n primaryFacets.push(primaryField);\n }\n }\n if (secondaryLen > counter) {\n for (let i = counter; i < secondaryLen; i++) {\n const secondaryField = secondaryFields[i];\n const projArr = [secondaryField];\n if (secondaryField.type() === MEASURE) {\n projections.push(projArr);\n } else {\n facets.push(secondaryField);\n secondaryFacets.push(secondaryField);\n }\n }\n }\n if ((primaryFacets.length || secondaryFacets.length) && !projections.length) {\n type = type === COL ? COLUMN : type;\n if ((axisFrom[type] === LEFT || axisFrom[type] === TOP) && primaryFacets.length) {\n const axisFromIndex = primaryFacets.length - 1;\n const facet = primaryFacets[axisFromIndex];\n projections = [[facet]];\n const existIndex = getIndex(secondaryFacets, facet);\n if (existIndex > -1) {\n projections = [[facet, facet]];\n secondaryFacets.splice(existIndex, 1);\n }\n primaryFacets.splice(axisFromIndex, 1);\n } else {\n const axisFromIndex = 0;\n const facet = secondaryFacets[axisFromIndex];\n projections = [[facet]];\n const existIndex = getIndex(primaryFacets, facet);\n if (existIndex > -1) {\n projections = [[facet, facet]];\n primaryFacets.splice(existIndex, 1);\n }\n secondaryFacets.splice(axisFromIndex, 1);\n }\n }\n\n facets = [...primaryFacets, ...secondaryFacets];\n facets = facets.filter((el, index, self) => index === self.findIndex(t => (t.toString() === el.toString())));\n return {\n facets,\n projections\n };\n }\n\n /**\n *\n *\n * @param {*} datamodel\n * @param {*} config\n * @return\n * @memberof CartesianEncoder\n */\n fieldSanitizer (datamodel, config) {\n return super.fieldSanitizer(datamodel, config);\n }\n\n /**\n *\n *\n * @param {*} datamodel\n * @return\n * @memberof CartesianEncoder\n */\n getRetinalFieldsDomain (dataModels, encoding) {\n const groupedModel = dataModels.groupedModel;\n const domains = {};\n for (const key in encoding) {\n if ({}.hasOwnProperty.call(encoding, key)) {\n const encodingObj = encoding[key];\n const field = encodingObj.field;\n if (!encodingObj.domain && field) {\n const domain = retriveDomainFromData(groupedModel, field);\n domains[field] = domain;\n }\n }\n }\n return domains;\n }\n\n /**\n *\n *\n * @param {*} layerArray\n * @memberof CartesianEncoder\n */\n serializeLayerConfig (layerArray) {\n const serializedLayers = [];\n // let currentLayerIndex = 0;\n layerArray.length && layerArray.forEach((layer, i) => {\n const def = layerFactory.sanitizeLayerConfig(layer);\n def.order = i;\n serializedLayers.push(def);\n });\n return serializedLayers;\n }\n\n /**\n *\n *\n * @param {*} fields\n * @param {*} userLayerConfig\n * @return\n * @memberof CartesianEncoder\n */\n getLayerConfig (fields, userLayerConfig) {\n const layerConfig = [];\n const {\n columnFields,\n rowFields\n } = fields;\n\n // let currentLayerIndex = 0;\n columnFields.forEach((colField) => {\n const colFieldName = colField.toString();\n rowFields.forEach((rowField) => {\n let configs = [];\n const rowFieldName = rowField.toString();\n const encoding = {\n x: {\n field: colFieldName\n },\n y: {\n field: rowFieldName\n }\n };\n const rowFieldType = rowField.subtype();\n const colFieldType = colField.subtype();\n const mark = getDefaultMark(colFieldType, rowFieldType);\n\n const defConfigs = [{\n mark,\n def: {\n mark,\n encoding\n }\n }];\n\n const layerConfigs = getLayerConfFromFields(colField.getMembers(),\n rowField.getMembers(), userLayerConfig || []);\n if (layerConfigs.length) {\n configs = layerConfigs.map((layerConf) => {\n const mergedLayerConf = mergeRecursive(mergeRecursive({}, defConfigs[0].def), layerConf);\n const serializedLayerConfig = layerFactory.getSerializedConf(mergedLayerConf.mark,\n mergedLayerConf);\n return {\n mark: mergedLayerConf.mark,\n order: mergedLayerConf.order,\n def: serializedLayerConfig\n };\n });\n } else {\n configs = defConfigs;\n }\n\n layerConfig.push(...configs);\n });\n });\n return layerConfig;\n }\n}\n\n","import { layerFactory } from '@chartshq/visual-layer';\nimport { mergeRecursive } from 'muze-utils';\nimport VisualEncoder from './visual-encoder';\nimport { RADIUS, ANGLE, SIZE, MEASURE, ARC, POLAR, COLOR } from '../enums/constants';\n/**\n *\n *\n * @export\n * @class PolarEncoder\n * @extends {VisualEncoder}\n */\nexport default class PolarEncoder extends VisualEncoder {\n\n /**\n *\n *\n * @param {*} axesCreators\n * @param {*} fieldInfo\n * @return\n * @memberof PolarEncoder\n */\n createAxis (axesCreators, fieldInfo) {\n const {\n axes\n } = axesCreators;\n const geomCellAxes = axes;\n const {\n indices\n } = fieldInfo;\n const {\n rowIndex,\n columnIndex\n } = indices;\n // Dummy axes for polar, to create blank cells\n const pieAxes = geomCellAxes.pie || [];\n\n pieAxes[rowIndex] = pieAxes[rowIndex] || [];\n pieAxes[rowIndex][columnIndex] = [];\n\n geomCellAxes.pie = pieAxes;\n geomCellAxes.x = null;\n geomCellAxes.y = null;\n\n return geomCellAxes;\n }\n\n /**\n *\n *\n * @param {*} fields\n * @return\n * @memberof CartesianEncoder\n */\n getFacetsAndProjections (fields) {\n let counter = 0;\n const facets = [];\n const projections = [];\n const primaryFields = fields[0];\n const secondaryFields = fields[1];\n const primaryLen = primaryFields.length;\n const secondaryLen = secondaryFields.length;\n\n for (let i = 0; i < primaryLen; i++) {\n const primaryField = primaryFields[i];\n if (primaryField.type() === MEASURE) {\n const secondaryField = secondaryFields[counter++];\n const projArr = secondaryField ? [primaryField, secondaryField] : [primaryField];\n projections.push(projArr);\n } else {\n facets.push(primaryField);\n }\n }\n if (secondaryLen > counter) {\n for (let i = counter; i < secondaryLen; i++) {\n const secondaryField = secondaryFields[i];\n const projArr = [secondaryField];\n if (secondaryField.type() === MEASURE) {\n projections.push(projArr);\n } else {\n facets.push(secondaryField);\n }\n }\n }\n return {\n facets,\n projections\n };\n }\n\n /**\n *\n *\n * @return\n * @memberof PolarEncoder\n */\n setCommonDomain () {\n // No domain to be set\n return this;\n }\n\n /**\n *\n *\n * @return\n * @memberof PolarEncoder\n */\n static type () {\n return POLAR;\n }\n\n layers (...layers) {\n if (layers.length) {\n this._layers = layers[0];\n return this;\n }\n return this._layers;\n }\n\n /**\n *\n *\n * @param {*} datamodel\n * @param {*} config\n * @memberof PolarEncoder\n */\n fieldSanitizer (datamodel, config) {\n let sanitizedRows = [[], []];\n let sanitizedColumns = [[], []];\n const fields = super.fieldSanitizer(datamodel, config);\n const {\n layers\n } = config;\n const {\n rows,\n columns\n } = fields;\n const layer = layers[0];\n const encoding = layer.encoding;\n const radius = encoding && encoding.radius ? encoding.radius.field : null;\n const angle = encoding && encoding.angle ? encoding.angle.field : null;\n const sanitizedFields = [sanitizedRows, sanitizedColumns];\n\n [rows, columns].forEach((fieldType, typeIndex) => {\n fieldType.forEach((fieldSet, i) => fieldSet.forEach((field) => {\n if (field.toString() !== radius && field.toString() !== angle && field.type() !== MEASURE) {\n sanitizedFields[typeIndex][i].push(field);\n }\n }));\n });\n sanitizedColumns = [...new Set(sanitizedColumns)];\n sanitizedRows = [...new Set(sanitizedRows)];\n this.fieldInfo({ rows: sanitizedRows, columns: sanitizedColumns });\n return this.fieldInfo();\n }\n\n getRetinalFieldsDomain (dataModels, encoding, facetFields, groupBy) {\n let sizeField;\n let colorField;\n const fields = [];\n const layers = this.layers();\n const dataModel = dataModels.parentModel;\n const fieldsConfig = dataModel.getFieldsConfig();\n const domains = {};\n if (layers && layers[0]) {\n const layer = layers[0];\n const layerEncoding = layer.def.encoding || {};\n\n [RADIUS, ANGLE, SIZE, COLOR].forEach((encType) => {\n const field = layerEncoding[encType] ? layerEncoding[encType].field : '';\n const measureField = fieldsConfig[field] && fieldsConfig[field].def.type === MEASURE;\n if (encType === SIZE && measureField) {\n sizeField = field;\n }\n if (encType === COLOR) {\n colorField = field;\n }\n fieldsConfig[field] && !measureField && fields.push(field);\n });\n }\n\n if (sizeField) {\n domains[sizeField] = dataModel.groupBy(facetFields, {\n [sizeField]: 'sum'\n }).getFieldspace().fieldsObj()[sizeField].domain();\n }\n\n if (colorField) {\n const dm = dataModel.groupBy([...facetFields, ...fields], groupBy.measures);\n domains[colorField] = dm.getFieldspace().fieldsObj()[colorField].domain();\n }\n return domains;\n }\n /**\n *\n *\n * @param {*} fields\n * @param {*} userLayerConfig\n * @return\n * @memberof PolarEncoder\n */\n getLayerConfig (fields, userLayerConfig) {\n let layerConfig = [];\n const {\n columnFields,\n rowFields\n } = fields;\n const allFields = [...columnFields, ...rowFields];\n\n allFields.forEach(() => {\n const encoding = {};\n let config = {\n mark: ARC,\n def: {\n encoding\n }\n };\n if (userLayerConfig && userLayerConfig.length > 0) {\n config = mergeRecursive(config, userLayerConfig[0]);\n }\n layerConfig.push(config);\n });\n if (layerConfig.length === 0) {\n layerConfig = userLayerConfig;\n }\n\n this.layers(layerConfig);\n return layerConfig;\n }\n\n /**\n *\n *\n * @param {*} layerArray\n * @returns\n * @memberof PolarEncoder\n */\n serializeLayerConfig (layerArray) {\n const serializedLayers = [];\n\n layerArray.length && layerArray.forEach((layer) => {\n const def = layerFactory.getSerializedConf(layer.mark, layer);\n serializedLayers.push({\n mark: layer.mark,\n def\n });\n });\n return serializedLayers;\n }\n}\n","import { createRetinalAxis } from './encoder-helper';\nimport { COLOR, SHAPE, SIZE } from '../enums/constants';\nimport VisualEncoder from './visual-encoder';\n\n/**\n *\n *\n * @export\n * @class RetinalEncoder\n * @extends {VisualEncoder}\n */\nexport default class RetinalEncoder extends VisualEncoder {\n\n /**\n *\n *\n * @param {*} axesCreators\n * @return\n * @memberof RetinalEncoder\n */\n createAxis (axesCreators) {\n const { fieldsConfig, config } = axesCreators;\n const newAxes = {};\n\n [COLOR, SHAPE, SIZE].forEach((axisType) => {\n newAxes[`${axisType}`] = createRetinalAxis({ axisType, fieldsConfig }, config[axisType]);\n });\n return newAxes;\n }\n\n /**\n *\n *\n * @static\n * @return\n * @memberof RetinalEncoder\n */\n static type () {\n return 'retinal';\n }\n\n /**\n *\n *\n * @param {*} fields\n * @param {*} userLayerConfig\n * @return\n * @memberof RetinalEncoder\n */\n getLayerConfig (encodingConfigs, userLayerConfig) {\n const layerConfig = [];\n userLayerConfig.forEach((e) => {\n const config = e;\n [COLOR, SHAPE, SIZE].forEach((axis) => {\n if (encodingConfigs[axis] && encodingConfigs[axis].field) {\n const def = config.def;\n if (config.def instanceof Array) {\n def.forEach((conf) => {\n conf.encoding = conf.encoding || {};\n !conf.encoding[axis] && (conf.encoding[axis] = {});\n conf.encoding[axis].field = encodingConfigs[axis].field;\n });\n } else {\n def.encoding = def.encoding || {};\n !def.encoding[axis] && (def.encoding[axis] = {});\n def.encoding[axis].field = encodingConfigs[axis].field;\n }\n }\n });\n layerConfig.push(config);\n });\n return layerConfig;\n }\n\n /**\n *\n *\n * @param {*} context\n * @return\n * @memberof RetinalEncoder\n */\n setCommonDomain (context) {\n const { domains, axes, encoding } = context;\n\n Object.entries(encoding).forEach((enc) => {\n if (enc[1] && enc[1].field) {\n const encType = enc[0];\n const field = enc[1].field;\n\n if (field) {\n axes[encType].forEach((axis) => {\n const domain = domains[field];\n !enc[1].domain && axis.updateDomain(domain);\n });\n }\n }\n });\n return axes;\n }\n}\n","import { Store, dataSelect, FieldType } from 'muze-utils';\nimport { DATA_UPDATE_COUNTER } from '../enums/defaults';\nimport { Variable } from '../variable';\nimport { PolarEncoder, CartesianEncoder } from '../encoder';\nimport {\n DIMENSION,\n MEASURE,\n ORDINAL,\n LINEAR,\n ROW,\n COLUMN,\n COL,\n LEFT,\n RIGHT,\n TOP,\n BOTTOM,\n COLOR,\n SIZE,\n TEMPORAL,\n SHAPE,\n INTERACTION,\n GRID_LINES,\n GRID_BANDS,\n HEADER,\n FACET,\n X,\n Y,\n POLAR\n} from '../enums/constants';\n\n/**\n * Creates an instance of a store which contains the arguments to make the class reactive\n *\n * @return {Object} instance of store\n * @memberof VisualGroup\n */\nexport const initStore = () => new Store({\n [DATA_UPDATE_COUNTER]: DATA_UPDATE_COUNTER\n});\n\n/**\n *\n *\n * @param {*} arr\n */\nexport const isDistributionEqual = arr => [...arr[0], ...arr[1]].reduce((isEqual, row) => {\n const rowType = row.type();\n\n if (rowType === MEASURE || rowType === TEMPORAL) {\n isEqual = true;\n }\n return isEqual;\n}, false);\n\n/**\n *\n *\n */\nexport const initializeCacheMaps = () => ({\n cellMap: new Map(),\n xAxesMap: new Map(),\n yAxesMap: new Map(),\n entryCellMap: new Map(),\n exitCellMap: new Map()\n});\n\n/**\n *\n *\n * @param {*} axisName\n * @param {*} id\n */\nexport const getAxisKey = (axisName, id, scaleType) => `${axisName}-axis-${id}-${scaleType}`;\n\n/**\n *\n *\n * @param {*} rowId\n * @param {*} columnId\n */\nexport const getCellKey = (rowId, columnId) => `cell-${rowId}-${columnId}`;\n\n/**\n *\n *\n * @param {*} config\n * @return\n */\nexport const extractUnitConfig = (config) => {\n const unitConfig = {};\n const attrNames = [INTERACTION, GRID_LINES, GRID_BANDS];\n\n attrNames.forEach((attr) => {\n if (config[attr] !== undefined) {\n unitConfig[attr] = config[attr];\n }\n });\n return unitConfig;\n};\n\n/**\n *\n *\n * @param {*} headers\n * @param {*} index\n * @param {*} rowLength\n * @return\n * @memberof MatrixResolver\n */\nexport const getHeaderText = (headers, index, rowLength) => {\n let header = '';\n\n if (index === rowLength - 1 && headers.length > rowLength) {\n for (let i = index; i < headers.length - 1; i++) {\n header += `${headers[i].toString()} / `;\n }\n header += headers[headers.length - 1].toString();\n return header;\n } else if (headers[index]) {\n return headers[index].toString();\n }\n return '';\n};\n\n/**\n *\n *\n * @param {*} fields\n * @param {*} fieldHeaders\n * @param {*} TextCell\n * @param {*} labelManager\n * @return\n */\nexport const headerCreator = (fields, fieldHeaders, TextCell, labelManager) => {\n const headers = fields.length > 0 ? fields[0].map((cell, i) => new TextCell({ type: HEADER }, { labelManager })\n .source(getHeaderText(fieldHeaders, i, fields[0].length))\n .config({ show: cell.config().show })) : [];\n return headers;\n};\n\n/**\n *\n *\n * @param {*} variable\n * @param {*} allFields\n * @return\n */\nexport const findInGroup = (variable, allFields) => {\n let channel = null;\n\n [COLOR, SIZE, SHAPE].forEach((e) => {\n if (this.store.get(e) && variable === this.store.get(e)[0]) {\n channel = e;\n }\n });\n\n if (channel) {\n return { channel };\n }\n [ROW, COL].forEach((facetType) => {\n allFields[`${facetType}Facets`].forEach((e) => {\n if (e.toString() === variable) {\n channel = { channel: FACET, type: facetType === COL ? COLUMN : ROW };\n }\n });\n });\n\n if (channel) {\n return channel;\n }\n\n [ROW, COL].forEach((projType) => {\n allFields[`${projType}Projections`].forEach((e) => {\n e.forEach((m) => {\n if (m.toString() === variable) {\n channel = projType === COL ? X : Y;\n }\n });\n });\n });\n\n if (channel) {\n return { channel };\n }\n return null;\n};\n\n/**\n *\n *\n * @param {*} datamodel\n * @param {*} field\n */\nexport const getAxisType = (fieldsConfig, field) => {\n let fieldType = ORDINAL;\n\n if (field && fieldsConfig[field].def.type !== DIMENSION) {\n fieldType = LINEAR;\n }\n return fieldType;\n};\n\n/**\n *\n *\n * @param {*} datamodel\n * @param {*} fieldName\n * @return\n */\nexport const retriveDomainFromData = (datamodel, fieldName) => {\n const field = datamodel.getFieldspace().fields.find(d => d._ref.name === fieldName.toString());\n return field.domain();\n};\n\n/**\n *\n *\n * @memberof MatrixResolver\n */\nexport const mutateAxesFromMap = (cacheMaps, axes) => {\n let xAxes = null;\n let yAxes = null;\n const {\n xAxesMap,\n yAxesMap\n } = cacheMaps;\n const {\n x: xAxisSet,\n y: yAxisSet\n } = axes;\n\n xAxisSet && xAxisSet.forEach((axisId) => {\n const xAxis = xAxesMap.get(axisId);\n xAxes = xAxes || [];\n xAxes.push(xAxis);\n });\n\n yAxisSet && yAxisSet.forEach((axisId) => {\n const yAxis = yAxesMap.get(axisId);\n yAxes = yAxes || [];\n yAxes.push(yAxis);\n });\n\n return {\n xAxes, yAxes\n };\n};\n\n/**\n *\n *\n * @param {*} layers\n * @return\n */\nexport const getEncoder = (layers) => {\n let encoder = new CartesianEncoder();\n\n if (layers) {\n // Figuring out the kind of layers the group will have\n encoder = layers.every(e => e.mark === 'arc') ? new PolarEncoder() : encoder;\n }\n return encoder;\n};\n\n/**\n *\n *\n * @param {*} type\n * @param {*} fields\n * @param {*} userAxisFromConfig\n * @return\n */\nexport const getHeaderAxisFrom = (type, fields, userAxisFromConfig) => {\n let axisFrom = userAxisFromConfig[type];\n let headerFrom = '';\n const options = type === ROW ? [LEFT, RIGHT] : [BOTTOM, TOP];\n const [firstField, secondField] = fields;\n const firstFieldType = i => (firstField.length ? firstField[i].type() : null);\n const secondFieldType = i => (secondField.length ? secondField[i].type() : null);\n\n if (firstFieldType(firstField.length - 1) === DIMENSION && secondFieldType(0) === DIMENSION) {\n headerFrom = axisFrom ? options[1 - options.indexOf(axisFrom)] : options[1];\n\n if (type === COLUMN && (firstField[firstField.length - 1].toString() === secondField[0].toString())) {\n axisFrom = TOP;\n } else {\n axisFrom = axisFrom || options[0];\n }\n } else if (secondFieldType(secondField.length - 1) === DIMENSION) {\n headerFrom = type === ROW ? RIGHT : BOTTOM;\n axisFrom = type === ROW ? RIGHT : BOTTOM;\n } else {\n headerFrom = type === ROW ? LEFT : TOP;\n axisFrom = type === ROW ? LEFT : TOP;\n }\n if (firstFieldType(firstField.length - 1) === MEASURE && secondFieldType(0) === MEASURE) {\n axisFrom = type === ROW ? LEFT : TOP;\n } else if (secondFieldType(0) === MEASURE) {\n axisFrom = type === ROW ? RIGHT : BOTTOM;\n } else if (firstFieldType(firstField.length - 1) === MEASURE) {\n axisFrom = type === ROW ? LEFT : TOP;\n }\n return [headerFrom, axisFrom];\n};\n\n/**\n *\n *\n * @param {*} type\n * @param {*} fields\n * @param {*} layers\n * @return\n * @memberof MatrixResolver\n */\nexport const setFacetsAndProjections = (context, fieldInfo, encoder) => {\n const {\n fields,\n type\n } = fieldInfo;\n const { facets, projections } = encoder.simpleEncoder.getFacetsAndProjections(fields, type);\n\n context.facets({ [`${type}Facets`]: facets });\n context.projections({ [`${type}Projections`]: projections });\n\n return { facets, projections, fields };\n};\n\n/**\n * Creates a selection set from a data set with corresponding attributes\n *\n * @export\n * @param {Selection} sel contains previous selection\n * @param {Object} appendObj Object to be appended\n * @param {Array} data Data based on which the selection is entered/updated/removed\n * @param {Object} [attrs={}] Attributes to be set on the data\n * @return {Selection} Merged selection\n */\nexport const createSelection = (sel, appendObj, data, idFn) => {\n let selection = sel || dataSelect([]);\n\n selection = selection.data(data, idFn);\n\n const enter = selection.enter().append(appendObj);\n const mergedSelection = enter.merge(selection);\n\n selection.exit() && selection.exit().remove();\n return mergedSelection;\n};\n\nconst getRowBorders = (left, right) => {\n const borders = {};\n borders.top = false;\n borders.bottom = false;\n if (left.length > 1 || right.length > 1) {\n borders.top = true;\n borders.bottom = true;\n }\n return borders;\n};\n\nconst getColumnsBorders = (top, bottom) => {\n const borders = {};\n borders.left = false;\n borders.right = false;\n if (top.length || bottom.length) {\n if ((top[0] && top[0].length > 1) || (bottom[0] && bottom[0].length > 1)) {\n borders.left = true;\n borders.right = true;\n }\n }\n return borders;\n};\n\nconst getValueBorders = (rows, columns) => {\n const borders = { top: true, left: true, bottom: true, right: true };\n const borderTypeRow = [LEFT, RIGHT];\n const borderTypeCol = [TOP, BOTTOM];\n rows.forEach((e, i) => {\n if (e[0] && e[0].length) {\n borders[borderTypeRow[i]] = true;\n } else {\n borders[borderTypeRow[i]] = false;\n }\n });\n columns.forEach((e, i) => {\n if (e.length) {\n borders[borderTypeCol[i]] = true;\n } else {\n borders[borderTypeCol[i]] = false;\n }\n });\n\n return borders;\n};\n\nexport const getBorders = (matrices, encoder) => {\n let showRowBorders = { top: false, bottom: false };\n let showColBorders = { left: false, right: false };\n let showValueBorders = { top: false, bottom: false, left: false, right: false };\n const {\n rows,\n columns,\n values: valueMatrix\n } = matrices;\n const [leftRows, rightRows] = rows;\n const [topColumns, bottomColumns] = columns;\n const {\n rowDimensions,\n columnDimensions,\n rowTemporalFields,\n columnTemporalFields,\n columnMeasures,\n rowMeasures\n } = encoder.fieldInfo();\n const allDimensionLength = rowDimensions.length + columnDimensions.length;\n const allMeasuresLength = rowMeasures.length + columnMeasures.length;\n const allTemporalFieldsLength = rowTemporalFields.length + columnTemporalFields.length;\n\n if (encoder.constructor.type() === POLAR) {\n if (!allDimensionLength) {\n return { showRowBorders, showColBorders, showValueBorders };\n }\n } else if (!allMeasuresLength && !allTemporalFieldsLength && allDimensionLength <= 2) {\n return { showRowBorders, showColBorders, showValueBorders };\n }\n\n showRowBorders = getRowBorders(leftRows, rightRows);\n showColBorders = getColumnsBorders(topColumns, bottomColumns);\n showValueBorders = getValueBorders([leftRows, rightRows], [topColumns, bottomColumns]);\n\n if (valueMatrix.length > 1) {\n showValueBorders.top = true;\n showValueBorders.bottom = true;\n }\n if (valueMatrix.length && valueMatrix[0].length > 1) {\n showValueBorders.left = true;\n showValueBorders.right = true;\n }\n return { showRowBorders, showColBorders, showValueBorders };\n};\n\nexport const getFieldsFromSuppliedLayers = (suppliedLayerConfig, fieldsConfig) => {\n let fields = [];\n const encodingArr = suppliedLayerConfig.map(conf => (conf.encoding || {}));\n fields = [...fields, [].concat(...encodingArr.map(enc => Object.values(enc).map(d => d.field)))];\n fields = fields.filter(field => fieldsConfig[field] && fieldsConfig[field].def.type === FieldType.DIMENSION);\n return fields;\n};\n\nexport const extractFields = (facetsAndProjections, layerFields) => {\n const fields = Object.values(facetsAndProjections).map((arr) => {\n const flattenArray = [].concat(...arr);\n return [].concat(...flattenArray.map((field) => {\n if (field instanceof Variable) {\n return field.getMembers();\n }\n return field;\n }));\n });\n return [].concat(...fields, ...layerFields);\n};\n","/**\n * This file exports variables that are used as defaults for the crosstab group.\n */\nexport const DATA_UPDATE_COUNTER = 0;\n\nexport const DEFAULT_LAYER_TYPE = 'cartesian';\n\n","import Selection from './selection';\n/**\n * This function applies a selection operation on a data array.\n *\n * @export\n * @param {Array} [data=[]] The data array to be observed.\n * @return {Selection} Instance of a selection.\n */\nexport default function dataSelect (data = []) {\n return new Selection(data);\n}\n\n","import { BEHAVIOURS, ACTIONS } from '@chartshq/muze-firebolt';\n\nexport const actionBehaviourMap = {\n [ACTIONS.DRAG]: {\n behaviours: [BEHAVIOURS.BRUSH],\n touch: false\n },\n [ACTIONS.HOVER]: {\n behaviours: [BEHAVIOURS.HIGHLIGHT]\n },\n [ACTIONS.LONGTOUCH]: {\n behaviours: [BEHAVIOURS.SELECT],\n touch: true\n },\n [ACTIONS.TOUCHDRAG]: {\n behaviours: [BEHAVIOURS.BRUSH],\n touch: true\n },\n [ACTIONS.CLICK]: {\n behaviours: [BEHAVIOURS.SELECT],\n touch: false\n }\n};\n\n","export const CONFIG = 'config';\nexport const DATA = 'data';\nexport const AXES = 'axes';\nexport const LAYERDEFS = 'layerDef';\nexport const WIDTH = 'width';\nexport const HEIGHT = 'height';\nexport const MOUNT = 'mount';\nexport const primaryXAxisUpdated = 'primaryXAxisUpdated';\nexport const primaryYAxisUpdated = 'primaryYAxisUpdated';\nexport const secondaryXAxisUpdated = 'secondaryXAxisUpdated';\nexport const secondaryYAxisUpdated = 'secondaryYAxisUpdated';\nexport const TRANSFORM = 'transform';\nexport const DATADOMAIN = 'dataDomain';\nexport const LAYERSCREATED = 'layersCreated';\nexport const FIELDS = 'fields';\nexport const TIMEDIFFS = 'timeDiffs';\nexport const LAYERAXISINDEX = 'layerAxisIndex';\n\n","import { FieldType, getDependencyOrder, getObjProp,\n defaultValue, objectIterator, unionDomain, makeElement,\n DimensionSubtype, getClosestIndexOf, toArray } from 'muze-utils';\nimport { layerFactory } from '@chartshq/visual-layer';\nimport { TIMEDIFFS } from '../enums/reactive-props';\n\nexport const getDimensionMeasureMap = (layers, fieldsConfig) => {\n const retinalEncodingsAndMeasures = {};\n\n layers.forEach((layer) => {\n const {\n colorField,\n sizeField,\n shapeField,\n xField,\n yField\n } = layer.encodingFieldsInf();\n const measures = [xField, yField].filter(field => fieldsConfig[field] && fieldsConfig[field].def.type ===\n FieldType.MEASURE);\n [colorField, sizeField, shapeField].forEach((field) => {\n if (fieldsConfig[field] && fieldsConfig[field].def.type === FieldType.DIMENSION) {\n !retinalEncodingsAndMeasures[field] && (retinalEncodingsAndMeasures[field] = []);\n retinalEncodingsAndMeasures[field].push(...measures);\n }\n });\n });\n\n for (const key in retinalEncodingsAndMeasures) {\n if ({}.hasOwnProperty.call(retinalEncodingsAndMeasures, key)) {\n retinalEncodingsAndMeasures[key] = [...new Set(retinalEncodingsAndMeasures[key])];\n }\n }\n return retinalEncodingsAndMeasures;\n};\n\nexport const transformDataModels = (transform, dataModel) => {\n const dataModels = {};\n for (const key in transform) {\n if ({}.hasOwnProperty.call(transform, key)) {\n const transformVal = transform[key];\n dataModels[key] = transformVal(dataModel);\n }\n }\n\n return dataModels;\n};\n\nexport const getLayerFromDef = (context, definition, existingLayer) => {\n let instances = existingLayer;\n const dependencies = context._layerDeps;\n if (!existingLayer) {\n instances = layerFactory.getLayerInstance(definition);\n }\n const layers = {};\n const instanceArr = toArray(instances);\n definition = toArray(definition);\n definition.reduce((acc, def, idx) => {\n const instance = instanceArr[idx];\n instance.config(def);\n instance.dependencies(dependencies);\n if (def.name) {\n instance.alias(def.name);\n }\n layers[instance.alias()] = instance;\n return acc;\n }, {});\n return layers;\n};\n\nexport const resolveEncodingTransform = (layerInst, store) => {\n const encodingTransform = layerInst.config().encodingTransform || {};\n const resolvable = encodingTransform.resolvable;\n let depArr = [];\n if (resolvable) {\n const resolved = resolvable(store);\n depArr = resolved.depArr;\n layerInst.encodingTransform(resolved.fn);\n } else if (encodingTransform instanceof Function) {\n layerInst.encodingTransform(encodingTransform);\n }\n return depArr;\n};\n\nexport const createLayers = (context, layerDefinitions) => {\n const layersMap = context._layersMap;\n const markSet = {};\n const store = {\n layers: {},\n components: {\n unit: context\n }\n };\n let layerIndex = 0;\n let layers = layerDefinitions.sort((a, b) => a.order - b.order).reduce((layersArr, layerDef, i) => {\n const mark = layerDef.mark;\n const definition = layerDef.def;\n const markId = `${mark}-${i}`;\n const defArr = toArray(definition);\n defArr.forEach((def) => {\n def.order = layerDef.order + layerIndex;\n });\n layerIndex += defArr.length;\n const instances = getLayerFromDef(context, definition, layersMap[markId]);\n store.layers = Object.assign(store.layers, instances);\n const instanceValues = Object.values(instances);\n layersArr = layersArr.concat(...instanceValues);\n layersMap[markId] = instanceValues;\n markSet[markId] = markId;\n return layersArr;\n }, []);\n store.unit = context;\n const layerdeps = {};\n layers.forEach((layer) => {\n const depArr = resolveEncodingTransform(layer, store);\n layerdeps[layer.alias()] = depArr;\n });\n\n const order = getDependencyOrder(layerdeps);\n layers = order.map(name => store.layers[name]);\n for (const key in layersMap) {\n if (!(key in markSet)) {\n layersMap[key].forEach(layer => layer.remove());\n delete layersMap[key];\n }\n }\n return layers;\n};\n\nexport const attachDataToLayers = (layers, dm, transformedDataModels) => {\n layers.forEach((layer) => {\n const dataSource = layer.config().source;\n const dataModel = dataSource instanceof Function ? dataSource(dm) : (transformedDataModels[dataSource] || dm);\n layer.data(dataModel);\n });\n};\n\nexport const attachAxisToLayers = (axes, layers, layerAxisIndex) => {\n layers.forEach((layer) => {\n const layerId = layer.id();\n const axesObj = {};\n\n objectIterator(axes, (key) => {\n const axisInf = layerAxisIndex[layerId];\n if (axisInf) {\n axes[key] && (axesObj[key] = axes[key][axisInf[key] || 0]);\n }\n });\n Object.keys(axesObj).length && layer.axes(axesObj);\n });\n};\n\nexport const getLayerAxisIndex = (layers, fields) => {\n const layerAxisIndex = {};\n layers.forEach((layer) => {\n const { axis, encoding } = layer.config();\n const id = layer.id();\n ['x', 'y'].forEach((type) => {\n let index;\n const field = defaultValue(getObjProp(axis, type), encoding[type] && encoding[type].field);\n if (fields[type]) {\n index = fields[type].findIndex(fieldInst => fieldInst.getMembers().indexOf(field) !== -1);\n } else {\n index = 0;\n }\n !layerAxisIndex[id] && (layerAxisIndex[id] = {});\n layerAxisIndex[id][type] = index;\n });\n });\n return layerAxisIndex;\n};\n\nexport const unionDomainFromLayers = (layers, axisFields, layerAxisIndex, fieldsConfig) => {\n let domains = {};\n layers = layers.filter(layer => layer.getDataDomain() !== null);\n layers.forEach((layer) => {\n let domainValues = {};\n const config = layer.config();\n const encoding = config.encoding;\n const layerDomain = layer.getDataDomain();\n const layerId = layer.id();\n\n if (layerDomain !== null && config.calculateDomain !== false) {\n domainValues = Object.entries(layerDomain);\n if (layerDomain.x || layerDomain.y) {\n domains = domainValues.reduce((fieldDomain, domain) => {\n const encodingType = domain[0];\n const field = encoding[encodingType].field;\n const axisIndex = layerAxisIndex[layerId][encodingType];\n const fieldStr = `${axisFields[encodingType][axisIndex]}`;\n fieldDomain[fieldStr] = fieldDomain[fieldStr] || [];\n fieldDomain[fieldStr] = unionDomain(([fieldDomain[fieldStr], domain[1]]),\n fieldsConfig[field].def.subtype ? fieldsConfig[field].def.subtype :\n fieldsConfig[field].def.type);\n\n return fieldDomain;\n }, domains);\n } else { domains = domainValues; }\n }\n });\n return domains;\n};\n\nexport const renderLayers = (context, container, layers, measurement) => {\n context._lifeCycleManager.notify({ client: layers, action: 'beforedraw', formalName: 'layer' });\n const config = context.config();\n const classPrefix = config.classPrefix;\n const orderedLayers = context.layers().sort((a, b) => a.config().order - b.config().order);\n const layerParentGroup = makeElement(container, 'g', [1], `${classPrefix}-layer-group`);\n makeElement(layerParentGroup, 'g', orderedLayers, null, {\n update: (group, layer) => {\n layer.measurement(measurement);\n layer.dataProps({\n timeDiffs: context.store().get(TIMEDIFFS)\n });\n layer.config().render !== false && layer.mount(group.node());\n }\n });\n return this;\n};\n\nexport const getNearestDimensionalValue = (context, position) => {\n const fields = context.fields();\n if (!fields.x.length || !fields.y.length) {\n return null;\n }\n const data = context.data();\n const axes = context.axes();\n const fieldsConfig = data.getFieldsConfig();\n const xField = getObjProp(fields, 'x', 0).getMembers()[0];\n const yField = getObjProp(fields, 'y', 0).getMembers()[0];\n const xFieldType = fieldsConfig[xField] && (fieldsConfig[xField].def.subtype ? fieldsConfig[xField].def.subtype :\n fieldsConfig[xField].def.type);\n const yFieldType = fieldsConfig[yField] && (fieldsConfig[yField].def.subtype ? fieldsConfig[yField].def.subtype :\n fieldsConfig[yField].def.type);\n\n const entryVal = [['x', xFieldType, xField], ['y', yFieldType, yField]].find(entry =>\n entry[1] === DimensionSubtype.CATEGORICAL || entry[1] === DimensionSubtype.TEMPORAL);\n\n if (!entryVal || (xFieldType !== FieldType.MEASURE && yFieldType !== FieldType.MEASURE)) {\n return null;\n }\n const field = entryVal[2];\n const index = fieldsConfig[field].index;\n let key = axes[entryVal[0]][0].invert(position[entryVal[0]]);\n if (entryVal[1] === DimensionSubtype.TEMPORAL) {\n const filterData = [...new Set(data.getData().data.map(d => d[index]))];\n key = filterData[getClosestIndexOf(filterData, key)];\n }\n\n return key !== undefined ? [[field], [key]] : null;\n};\n\nexport const getLayersBy = (layers, searchBy, value) => layers.filter((layer) => {\n const name = searchBy === 'type' ? layer.constructor.formalName() : layer.alias();\n return name === value;\n});\n\nexport const removeLayersBy = (layers, searchBy, value) => {\n layers.filter((inst) => {\n const name = searchBy === 'type' ? inst.config().mark : inst.alias();\n if (name === value) {\n inst.remove();\n return false;\n }\n return true;\n });\n};\n\nexport const createSideEffectGroup = (container, className) => makeElement(container, 'g', [1], className).node();\n\nexport const getAdjustedDomain = (max, min) => {\n const y1ratio = max[0] / (max[0] - min[0]);\n const y2ratio = max[1] / (max[1] - min[1]);\n\n // adjust min/max values for positive negative values zero line etc\n let allSameSign = false;\n\n // if all numbers are positive set floor to zero\n if (min[0] > 0 && min[1] > 0 && min[1] > 0 && max[1] > 0) {\n allSameSign = true;\n min[0] = 0;\n min[1] = 0;\n }\n\n // if all numbers are negative set ceiling to zero\n if (min[0] < 0 && min[1] < 0 && min[1] < 0 && max[1] < 0) {\n allSameSign = true;\n max[0] = 0;\n max[1] = 0;\n }\n\n // align zero line if necessary\n if (!allSameSign && y1ratio !== y2ratio) {\n if (y1ratio < y2ratio) {\n // adjust min[1]\n min[1] = min[0] / max[0] * max[1];\n } else {\n // adjust min[0]\n min[0] = min[1] / max[1] * max[0];\n }\n }\n return {\n max,\n min\n };\n};\n","import { getObjProp, defaultValue, makeElement, DimensionSubtype, DataModel } from 'muze-utils';\nimport { ScaleType } from '@chartshq/muze-axis';\nimport { layerFactory } from '@chartshq/visual-layer';\nimport { GRIDLINEPARENTGROUPCLASS, GRIDBANDPARENTGROUPCLASS } from '../enums/constants';\nimport { TIMEDIFFS } from '../enums/reactive-props';\n\nconst LINEAR = ScaleType.LINEAR;\n\nconst getLayerDefinition = (context, axes, type, orientation) => {\n let encoding;\n const config = context.config();\n const { classPrefix, gridLines, gridBands } = config;\n const gridLineColor = gridLines.color;\n const zeroLineColor = gridLines.zeroLineColor;\n const defClassName = type === 'band' ? gridBands.defClassName : gridLines.defClassName;\n const gridBandColor = gridBands[orientation].color;\n const axis = axes[orientation][0];\n const isLinearScale = axis.constructor.type() === LINEAR;\n\n if (type === 'band' && isLinearScale) {\n encoding = {\n [orientation]: `${orientation}value`,\n [`${orientation}0`]: `${orientation}value0`\n };\n } else {\n encoding = {\n [orientation]: isLinearScale ? `${orientation}value` : `${orientation}dim`\n };\n }\n encoding.color = {\n value: (data, i) => {\n const isNegativeDomain = isLinearScale && axis.domain()[0] < 0;\n if (type === 'band') {\n return gridBandColor[i % 2];\n }\n return isNegativeDomain && data[orientation] === 0 ? zeroLineColor : gridLineColor;\n }\n };\n\n return {\n definition: {\n defClassName: `${defClassName}-${orientation}`,\n className: config.className,\n individualClassName: (data, i) => {\n let className;\n const isNegativeDomain = isLinearScale && axis.domain()[0] < 0;\n if (isNegativeDomain && data.y === 0 && type !== 'band') {\n className = `${classPrefix}-axis-zero-line`;\n } else {\n className = `${classPrefix}-grid-${type}-${orientation}-${i % 2}`;\n }\n return className;\n },\n [`pad${orientation.toUpperCase()}`]: type === 'band' ? 0 : undefined,\n encoding\n },\n axes: {\n [orientation]: axis\n },\n interactive: false\n };\n};\n\nconst getDefaultVisibilty = (show, axis) => {\n if (axis.constructor.type() === LINEAR) {\n return show;\n }\n return false;\n};\n\nexport const getGridLayerDefinitions = (context, config, type) => ['x', 'y'].map((axisType) => {\n const show = defaultValue(config[axisType] && config[axisType].show,\n getDefaultVisibilty(config.show, context.axes()[axisType][0]));\n\n return show ? getLayerDefinition(context, context.axes(), type, axisType) : undefined;\n}).filter(d => d !== undefined);\n\nexport const getGridLayerData = (axes, fields, fieldsConfig) => {\n const gridData = {};\n ['x', 'y'].forEach((type) => {\n let ticks = axes[type][0].getTickValues();\n const subtype = getObjProp(fieldsConfig, getObjProp(fields, type, 0).getMembers()[0], 'def', 'subtype');\n const jsonData = [];\n const schema = [\n {\n name: 'yvalue',\n type: 'measure'\n }, {\n name: 'xvalue',\n type: 'measure'\n },\n {\n name: 'yvalue0',\n type: 'measure'\n }, {\n name: 'xvalue0',\n type: 'measure'\n }, {\n name: 'xdim',\n type: 'dimension',\n subtype\n }, {\n name: 'ydim',\n type: 'dimension',\n subtype\n }\n ];\n const len = Math.max(ticks.length);\n ticks = subtype === DimensionSubtype.TEMPORAL ? ticks.map(d => d.getTime()) : ticks;\n for (let i = 0; i < len; i += 1) {\n jsonData.push({\n [`${type}value`]: ticks[i],\n [`${type}value0`]: ticks[i + 1],\n [`${type}dim`]: ticks[i],\n [`${type}dim`]: ticks[i]\n });\n }\n gridData[type] = new DataModel(jsonData, schema);\n });\n return gridData;\n};\n\nexport const createGridLineLayer = (context, data) => {\n const vuConf = context.config();\n const dependencies = context._layerDeps;\n const measurement = {\n width: context.width(),\n height: context.height()\n };\n\n ['band', 'line'].forEach((type) => {\n let mark;\n let config;\n let instances;\n if (type === 'band') {\n mark = 'bar';\n config = vuConf.gridBands;\n instances = context._gridbands;\n } else {\n mark = 'tick';\n config = vuConf.gridLines;\n instances = context._gridlines;\n }\n const definitions = getGridLayerDefinitions(context, config, type);\n\n definitions.forEach((atomicDef, i) => {\n let layer;\n const definition = atomicDef.definition;\n const axesObj = atomicDef.axes;\n const sConf = layerFactory.getSerializedConf(mark, definition);\n sConf.mark = mark;\n if (!instances[i]) {\n layer = layerFactory.getLayerInstance(sConf);\n layer.dependencies(dependencies);\n } else {\n layer = instances[i];\n }\n\n layer.config(sConf)\n .measurement(measurement)\n .data(axesObj.y ? data.y : data.x)\n .dataProps({\n timeDiffs: context.store().get(TIMEDIFFS)\n })\n .axes(axesObj);\n instances[i] = layer;\n });\n });\n};\n\nexport const renderGridLineLayers = (context, container) => {\n const axes = context.axes();\n const config = context.config();\n const classPrefix = config.classPrefix;\n\n if (axes && ((axes.x && axes.x.length) || (axes.y && axes.y.length))) {\n const gridBandData = getGridLayerData(axes, context.fields(), context.data().getFieldsConfig());\n createGridLineLayer(context, gridBandData);\n [[context._gridlines, `${classPrefix}-${GRIDLINEPARENTGROUPCLASS}`],\n [context._gridbands, `${classPrefix}-${GRIDBANDPARENTGROUPCLASS}`]].forEach((entry) => {\n const [instances, parentGroupClass] = entry;\n const mountPoint = makeElement(container, 'g', [1], `.${parentGroupClass}`);\n const className = `${parentGroupClass}-group`;\n makeElement(mountPoint, 'g', instances, `.${className}`, {\n update: (group, instance) => {\n instance.mount(group.node());\n }\n });\n });\n }\n};\n","import { CLASSPREFIX, CONSOLIDATED } from './enums/constants';\n\n/**\n * Returns the default configuration of the visual unit\n * @return {Object} Default configuration of visual unit\n */\nexport const defaultConfig = {\n classPrefix: CLASSPREFIX,\n defClassName: 'visual-unit',\n className: '',\n trackerClassName: 'visual-unit-tracker',\n gridLines: {\n defClassName: 'axis-grid-lines',\n className: '',\n show: true,\n color: '#efefef',\n zeroLineColor: '#b6b6b6'\n },\n gridBands: {\n defClassName: 'axis-grid-bands',\n className: '',\n show: false,\n y: {\n color: ['#fff', '#fbfbfb']\n },\n x: {\n color: ['#fff', '#f9f9f9']\n }\n },\n arcLayerClassName: 'layer-arc',\n interaction: {\n tooltip: {\n mode: CONSOLIDATED\n }\n },\n sideEffectClassName: 'side-effect-container'\n};\n","export const CLASSPREFIX = 'muze';\nexport const IDFIELD = '__id__';\nexport const GRIDLINEPARENTGROUPCLASS = 'grid-lines';\nexport const GRIDBANDPARENTGROUPCLASS = 'grid-bands';\nexport const CONSOLIDATED = 'consolidated';\nexport const FRAGMENTED = 'fragmented';\nexport const FACET_BY_FIELDS = 'facetByFields';\nexport const RETINAL_FIELDS = 'retinalFields';\nexport const PARENT_ALIAS = 'parentAlias';\nexport const LAYERS = 'layers';\nexport const CACHED_DATA = 'cachedData';\nexport const STORE = 'store';\n\n","import { mergeRecursive } from 'muze-utils';\nimport { defaultConfig } from './default-config';\nimport { CONFIG, LAYERDEFS, AXES, WIDTH, HEIGHT, MOUNT, TRANSFORM, FIELDS, DATA } from './enums/reactive-props';\n\nexport default {\n [CONFIG]: {\n value: null,\n meta: {\n sanitization: (config, oldConfig) => (\n mergeRecursive(oldConfig || mergeRecursive({}, defaultConfig), config)\n )\n }\n },\n [LAYERDEFS]: {\n value: null\n },\n [AXES]: {\n value: null,\n meta: {\n sanitization: (axes, prevAxes) => Object.assign(prevAxes || {}, axes)\n }\n },\n [WIDTH]: {\n value: null\n },\n [HEIGHT]: {\n value: null\n },\n [MOUNT]: {\n value: null\n },\n [TRANSFORM]: {\n value: null\n },\n [FIELDS]: {\n value: null\n },\n [DATA]: {\n value: null,\n meta: {\n preset: (data, context) => {\n if (context._cache) {\n const cachedData = context.cachedData();\n context.cachedData([...cachedData, data]);\n } else {\n const oldData = context.data();\n oldData && oldData.unsubscribe('propagation');\n context.cachedData([data]);\n }\n }\n }\n }\n};\n","import { DimensionSubtype } from 'muze-utils';\nimport * as PROPS from './enums/reactive-props';\nimport {\n transformDataModels,\n getDimensionMeasureMap,\n createLayers,\n attachDataToLayers,\n attachAxisToLayers,\n unionDomainFromLayers,\n getLayerAxisIndex\n} from './helper';\n\nconst axisMap = {\n 0: 'primary',\n 1: 'secondary'\n};\nconst axisProps = [PROPS.primaryXAxisUpdated, PROPS.secondaryXAxisUpdated, PROPS.primaryYAxisUpdated,\n PROPS.secondaryYAxisUpdated];\n\nexport const listenerMap = context => ([\n {\n type: 'registerImmediateListener',\n props: [PROPS.AXES],\n listener: ([, axes]) => {\n ['x', 'y'].forEach((type) => {\n const axesArr = axes[type] || [];\n axesArr.forEach((axis, i) => {\n axis.on('update', () => {\n context.store().commit(PROPS[`${axisMap[i]}${axis.isReverse() ? 'Y' : 'X'}AxisUpdated`], true);\n });\n });\n });\n }\n },\n {\n type: 'registerImmediateListener',\n props: [PROPS.CONFIG],\n listener: ([, config]) => {\n config && context.firebolt().config(config.interaction);\n }\n },\n {\n type: 'computed',\n props: [PROPS.LAYERSCREATED],\n listener: fetch => fetch(PROPS.LAYERDEFS, PROPS.FIELDS, (layerDefs, fields) => {\n const layerDefsValue = layerDefs.value;\n const fieldsVal = fields.value;\n if (layerDefsValue && fieldsVal) {\n const layers = createLayers(context, layerDefs.value);\n context.layers(layers);\n context._layerAxisIndex = getLayerAxisIndex(context.layers(), fieldsVal);\n context._lifeCycleManager.notify({ client: layers, action: 'initialized', formalName: 'layer' });\n return true;\n }\n return null;\n })\n },\n {\n type: 'computed',\n props: [PROPS.TIMEDIFFS],\n listener: fetch => fetch(PROPS.DATA, PROPS.FIELDS, PROPS.AXES, (data, fields, axes) => {\n const dataModel = data.value;\n const axisFields = fields.value;\n const axesObj = axes.value;\n if (dataModel && axisFields && axesObj) {\n const timeDiffs = {};\n const timeDiffsByField = {};\n ['x', 'y'].forEach((type) => {\n const field = axisFields[type][0];\n if (field && field.subtype() === DimensionSubtype.TEMPORAL) {\n timeDiffs[type] = field.getMinDiff();\n timeDiffsByField[field] = timeDiffs[type];\n axesObj[type].forEach(axis => axis.minDiff(timeDiffs[type]));\n }\n });\n context._timeDiffsByField = timeDiffsByField;\n return timeDiffs;\n }\n return null;\n })\n },\n {\n type: 'computed',\n props: [PROPS.DATADOMAIN],\n listener: fetch => fetch(PROPS.DATA, PROPS.LAYERSCREATED, PROPS.AXES, PROPS.TRANSFORM,\n (dataModel, layersCreated, axes, transform) => {\n const dataModelVal = dataModel.value;\n const layerAxisIndexVal = context._layerAxisIndex;\n const axesVal = axes.value;\n if (dataModelVal && layersCreated.value && axesVal && layerAxisIndexVal) {\n const layers = context.layers();\n const dataModels = transformDataModels(transform.value, dataModelVal);\n context._transformedDataModels = dataModels;\n context._lifeCycleManager.notify({ client: layers, action: 'beforeupdate', formalName: 'layer' });\n attachDataToLayers(layers, dataModelVal, context._transformedDataModels);\n context._dimensionMeasureMap = getDimensionMeasureMap(layers,\n dataModelVal.getFieldsConfig(), context.retinalFields());\n attachAxisToLayers(axesVal, layers, layerAxisIndexVal);\n context._lifeCycleManager.notify({ client: layers, action: 'updated', formalName: 'layer' });\n return unionDomainFromLayers(layers, context.fields(),\n layerAxisIndexVal, dataModelVal.getFieldsConfig());\n }\n return null;\n })\n },\n {\n type: 'registerImmediateListener',\n props: [PROPS.DATADOMAIN],\n listener: ([, dataDomain]) => {\n dataDomain !== null && context.updateAxisDomain(dataDomain);\n }\n },\n {\n type: 'registerChangeListener',\n props: [PROPS.MOUNT, PROPS.DATA, ...axisProps],\n listener: (mount, data) => {\n const container = mount[1];\n if (container && data[1]) {\n context.render(container);\n }\n }\n }\n]);\n","import { FACET_BY_FIELDS, RETINAL_FIELDS, PARENT_ALIAS, LAYERS, STORE, CACHED_DATA } from './enums/constants';\n\nexport const PROPS = {\n [FACET_BY_FIELDS]: {},\n [RETINAL_FIELDS]: {},\n [PARENT_ALIAS]: {},\n [LAYERS]: {},\n [STORE]: {},\n [CACHED_DATA]: {},\n detailFields: {}\n};\n","import { CommonProps } from 'muze-utils';\nimport { DATA, MOUNT } from '../enums/reactive-props';\n\nexport const clearActionHistory = (context) => {\n const actionHistory = context._actionHistory;\n for (const key in actionHistory) {\n if (actionHistory[key].isMutableAction) {\n delete context._actionHistory[key];\n }\n }\n};\n\nexport const dispatchQueuedSideEffects = (context) => {\n const queuedSideEffects = context._queuedSideEffects;\n Object.entries(queuedSideEffects).forEach((entry) => {\n const sideEffect = entry[1];\n context.dispatchSideEffect(sideEffect.name, ...sideEffect.params);\n });\n context._queuedSideEffects = {};\n};\n\nexport const registerListeners = (firebolt) => {\n const context = firebolt.context;\n const store = context.store();\n\n store.registerImmediateListener([DATA, MOUNT], (dataModel, mount) => {\n const dm = dataModel[1];\n\n if (dm && mount[1]) {\n const originalData = firebolt.context.cachedData()[0];\n firebolt.createSelectionSet(firebolt.context.data().getData().uids);\n firebolt.attachPropagationListener(originalData);\n }\n }, true);\n\n context._layerDeps.throwback.registerChangeListener([CommonProps.ON_LAYER_DRAW],\n ([, onlayerdraw]) => {\n if (onlayerdraw) {\n firebolt.initializeSideEffects();\n firebolt.config(context.config().interaction);\n firebolt.mapActionsAndBehaviour();\n dispatchQueuedSideEffects(firebolt);\n clearActionHistory(firebolt);\n }\n });\n};\n\n","import { DimensionSubtype } from 'muze-utils';\n\nconst getRangeFromData = (instance, selectionDataModel, propConfig) => {\n let criteria;\n const dataObj = selectionDataModel[0].getData();\n const propCriteria = propConfig.payload.criteria;\n const sourceIdentifiers = propConfig.sourceIdentifiers;\n const schema = dataObj.schema;\n const fieldMap = instance.data().getFieldsConfig();\n const data = dataObj.data;\n const isActionSourceSame = instance.id() === propConfig.sourceId;\n\n if (isActionSourceSame) {\n criteria = propCriteria;\n } else {\n criteria = (sourceIdentifiers !== null) ? schema.reduce((acc, obj, index) => {\n let range;\n const field = obj.name;\n const fieldObj = fieldMap[field];\n const type = fieldObj && (fieldObj.def.subtype ? fieldObj.def.subtype : fieldObj.def.type);\n const isDimension = type === DimensionSubtype.CATEGORICAL;\n\n if (!fieldObj) {\n return acc;\n }\n\n if (!isDimension) {\n range = [Math.min(...data.map(d => d[index])), Math.max(...data.map(d => d[index]))];\n } else {\n range = data.map(d => d[index]);\n }\n acc[field] = range;\n return acc;\n }, {}) : null;\n }\n return criteria;\n};\n\nexport const payloadGenerator = {\n brush: (instance, selectionDataModel, propConfig) => {\n const propPayload = propConfig.payload;\n const criteria = getRangeFromData(instance, selectionDataModel, propConfig);\n const payload = Object.assign({}, propPayload);\n payload.criteria = criteria;\n return payload;\n },\n\n __default: (instance, selectionDataModel, propConfig) => {\n const propPayload = propConfig.payload;\n const sourceIdentifiers = propConfig.sourceIdentifiers;\n const dataObj = selectionDataModel[0].getData();\n let schema = dataObj.schema;\n const payload = Object.assign({}, propPayload);\n schema = dataObj.schema;\n const data = dataObj.data;\n const sourceFields = schema.map(d => d.name);\n payload.criteria = !sourceIdentifiers && selectionDataModel[0].isEmpty() ? null :\n [sourceFields, ...data];\n payload.sourceFields = sourceIdentifiers ? sourceIdentifiers.getSchema().map(d => d.name) : [];\n return payload;\n }\n};\n\n","import { isSimpleObject, FieldType, DataModel } from 'muze-utils';\n\nconst getModelWithFacetData = (dm, data) => {\n const dataObj = dm.getData();\n const schema1 = dataObj.schema;\n const data1 = dataObj.data;\n const jsonData = [];\n const schema2 = data[0].map(d => ({\n name: `${d}`,\n type: FieldType.DIMENSION\n }));\n const data2 = data[1];\n\n data1.forEach((d) => {\n const tuple = {};\n schema1.forEach((obj, i) => {\n tuple[obj.name] = d[i];\n });\n schema2.forEach((obj, i) => {\n tuple[obj.name] = data2[i];\n });\n jsonData.push(tuple);\n });\n\n return new DataModel(jsonData, [...schema1, ...schema2]);\n};\n\nexport const propagateValues = (instance, action, config = {}) => {\n let propagationData;\n const payload = config.payload;\n const selectionSet = config.selectionSet;\n const propagationFieldInf = config.propagationFields[action] || {};\n const propagationFields = propagationFieldInf.fields || [];\n const append = propagationFieldInf.append;\n const criteria = payload.criteria;\n const context = instance.context;\n const dataModel = context.cachedData()[0];\n const sourceId = context.id();\n const sideEfffects = instance.sideEffects();\n const behaviourEffectMap = instance._behaviourEffectMap;\n const mergedModel = selectionSet.mergedEnter.model;\n const fieldsConfig = dataModel.getFieldsConfig();\n payload.sourceUnit = sourceId;\n payload.action = action;\n payload.sourceCanvas = context.parentAlias();\n const propagationBehaviourMap = instance._propagationBehaviourMap;\n const propagationBehaviour = propagationBehaviourMap[action] || action;\n\n let propFields = [];\n if (criteria === null) {\n propagationData = null;\n } else if (isSimpleObject(criteria)) {\n propFields = Object.keys(criteria || {});\n propagationData = mergedModel ? mergedModel.project(propFields) : null;\n } else {\n propFields = criteria[0];\n propagationData = mergedModel ? mergedModel.project(propFields) : null;\n }\n\n const facetByFields = context.facetByFields();\n if (propagationData !== null && propagationFields.length) {\n const fields = propagationData.getData().schema.map(d => d.name);\n propagationData = getModelWithFacetData(propagationData, facetByFields);\n propFields = append ? [...fields, ...propagationFields] : propagationFields;\n propagationData = propagationData.project(propFields);\n }\n\n let propagateInterpolatedValues = false;\n if (propFields.length && propFields.every(field => fieldsConfig[field] &&\n fieldsConfig[field].def.type === FieldType.MEASURE)) {\n propagateInterpolatedValues = true;\n }\n\n const groupId = context.parentAlias();\n payload.action = action;\n const behaviourInstance = instance._actions.behavioural[propagationBehaviour];\n const isMutableAction = behaviourInstance ? behaviourInstance.constructor.mutates() : false;\n\n const filterFn = (entry, propagationConf) => {\n const effects = behaviourEffectMap[entry.config.action];\n const mutates = entry.config.groupId ?\n effects.some(d => sideEfffects[d.name || d].constructor.mutates()) : true;\n return entry.config.groupId !== propagationConf.groupId && mutates;\n };\n\n const sourceBehaviour = instance._actions.behavioural[action];\n const mutates = sourceBehaviour ? sourceBehaviour.constructor.mutates() : false;\n let propConfig = {\n payload,\n action,\n criteria: propagationData,\n isMutableAction: mutates,\n propagateInterpolatedValues,\n groupId,\n sourceId: mutates ? groupId : sourceId,\n filterFn,\n enabled: (propConf, firebolt) => (action !== propagationBehaviour ?\n propConf.payload.sourceCanvas === firebolt.context.parentAlias() : true)\n };\n\n dataModel.propagate(propagationData, propConfig, true);\n\n if (action !== propagationBehaviour) {\n propConfig = {\n payload,\n sourceId: isMutableAction ? groupId : sourceId,\n criteria: propagationData,\n isMutableAction,\n propagateInterpolatedValues,\n action: propagationBehaviour,\n groupId,\n applyOnSource: action === propagationBehaviour,\n enabled: (propConf, firebolt) => propConf.payload.sourceCanvas !== firebolt.context.parentAlias(),\n filterFn\n };\n\n dataModel.propagate(propagationData, propConfig, true, {\n filterImmutableAction: (actionInf, propInf) => actionInf.groupId !== propInf.groupId\n });\n }\n};\n","import { FieldType } from 'muze-utils';\nimport { Firebolt, SpawnableSideEffect } from '@chartshq/muze-firebolt';\nimport { registerListeners } from './helper';\nimport { payloadGenerator } from './payload-generator';\nimport { propagateValues } from './data-propagator';\n\n/**\n * This class manages the interactions of visual unit. It associates physical actions with\n * behavioural actions. It also propagates the behavioural actions to other datamodels.\n */\nexport default class UnitFireBolt extends Firebolt {\n constructor (...params) {\n super(...params);\n registerListeners(this);\n }\n\n propagate (behaviour, payload, selectionSet, sideEffects) {\n propagateValues(this, behaviour, {\n payload,\n selectionSet,\n sideEffects,\n propagationFields: this._propagationFields\n });\n }\n\n getApplicableSideEffects (sideEffects, payload, propagationInf) {\n const context = this.context;\n const unitId = context.id();\n const aliasName = context.parentAlias();\n const propagationSourceCanvas = propagationInf.propPayload && propagationInf.propPayload.sourceCanvas;\n const sourceUnitId = propagationInf.propPayload && propagationInf.propPayload.sourceUnit;\n const sourceSideEffects = this._sourceSideEffects;\n const sideEffectInstances = this.sideEffects();\n const actionOnSource = sourceUnitId ? sourceUnitId === unitId : true;\n\n const applicableSideEffects = payload.sideEffects ? [{\n effects: payload.sideEffects,\n behaviours: [payload.action]\n }] : sideEffects;\n applicableSideEffects.forEach((d) => {\n let mappedEffects = d.effects;\n mappedEffects = mappedEffects.filter((se) => {\n const mutates = sideEffectInstances[se.name || se].constructor.mutates();\n if (mutates && propagationInf.isMutableAction === false) {\n return false;\n }\n if (!actionOnSource && payload.criteria !== null) {\n const sideEffectChecker = sourceSideEffects[se.name || se];\n return sideEffectChecker ? sideEffectChecker(propagationInf.propPayload, context) : true;\n }\n if (propagationSourceCanvas === aliasName || actionOnSource) {\n return se.applyOnSource !== false;\n }\n\n return true;\n });\n d.effects = mappedEffects;\n });\n return applicableSideEffects;\n }\n\n shouldApplySideEffects (propagate) {\n return propagate === false;\n }\n\n onDataModelPropagation () {\n return (data, config) => {\n let isSourceFieldPresent = true;\n let isMutableAction = false;\n const propPayload = config.payload;\n const sourceIdentifiers = config.sourceIdentifiers;\n const enabledFn = config.enabled;\n const action = config.action;\n const payloadFn = payloadGenerator[action] || payloadGenerator.__default;\n\n if (sourceIdentifiers) {\n const fieldsConfig = sourceIdentifiers.getFieldsConfig();\n const sourceIdentifierFields = Object.keys(fieldsConfig);\n const propFields = Object.keys(data[0].getFieldsConfig());\n if (!Object.values(fieldsConfig).some(d => d.def.type === FieldType.MEASURE)) {\n isSourceFieldPresent = sourceIdentifierFields.some(d => propFields.indexOf(d) !== -1);\n }\n }\n\n const payload = payloadFn(this.context, data, config);\n const sourceBehaviours = this._sourceBehaviours;\n const filterFn = sourceBehaviours[action] || sourceBehaviours['*'];\n let enabled = true;\n\n if (filterFn) {\n enabled = filterFn(propPayload || {}, this.context);\n }\n\n if (enabledFn) {\n enabled = enabledFn(config, this) && enabled !== false;\n }\n\n if (enabled) {\n const effects = this._behaviourEffectMap[action];\n const sideEffectInstances = this.sideEffects();\n isMutableAction = config.groupId ?\n effects.some(d => sideEffectInstances[d.name || d].constructor.mutates()) : config.isMutableAction;\n\n const propagationInf = {\n propagate: false,\n data,\n propPayload,\n sourceIdentifiers,\n persistent: false,\n isSourceFieldPresent,\n sourceId: config.propagationSourceId,\n isMutableAction: config.isMutableAction\n };\n\n this._actionHistory[action] = {\n payload,\n propagationInf,\n isMutableAction\n };\n this.dispatchBehaviour(action, payload, propagationInf);\n }\n };\n }\n\n initializeSideEffects () {\n super.initializeSideEffects();\n const sideEffects = this.sideEffects();\n for (const key in sideEffects) {\n if ({}.hasOwnProperty.call(sideEffects, key)) {\n sideEffects[key] instanceof SpawnableSideEffect && sideEffects[key].drawingContext(() => {\n const context = this.context;\n return context.getDrawingContext();\n });\n }\n }\n }\n\n prepareSelectionSets (behaviours) {\n const data = this.context.data();\n if (data) {\n this.createSelectionSet(data.getData().uids, behaviours);\n }\n return this;\n }\n\n remove () {\n this.context.cachedData()[0].unsubscribe('propagation');\n return this;\n }\n}\n","import { layerFactory } from '@chartshq/visual-layer';\nimport {\n setAttrs,\n CommonProps,\n getUniqueId,\n getQualifiedClassName,\n selectElement,\n transactor,\n Store,\n makeElement,\n registerListeners,\n generateGetterSetters,\n getDataModelFromIdentifiers,\n isSimpleObject,\n transposeArray,\n FieldType\n} from 'muze-utils';\nimport { physicalActions, sideEffects, behaviouralActions, behaviourEffectMap } from '@chartshq/muze-firebolt';\nimport { actionBehaviourMap } from './firebolt/action-behaviour-map';\nimport {\n renderLayers,\n getNearestDimensionalValue,\n removeLayersBy,\n getLayersBy,\n getLayerFromDef,\n attachAxisToLayers,\n getLayerAxisIndex,\n createSideEffectGroup,\n getAdjustedDomain,\n resolveEncodingTransform\n} from './helper';\nimport { renderGridLineLayers } from './helper/grid-lines';\nimport localOptions from './local-options';\nimport { listenerMap } from './listener-map';\nimport {\n primaryYAxisUpdated,\n primaryXAxisUpdated,\n secondaryXAxisUpdated,\n secondaryYAxisUpdated,\n DATADOMAIN,\n TIMEDIFFS\n} from './enums/reactive-props';\nimport { PROPS } from './props';\nimport UnitFireBolt from './firebolt';\nimport './styles.scss';\n\nconst FORMAL_NAME = 'unit';\n\n/**\n * @module VisualUnit\n * A hierarchical component of renderer which manages multiple layers. This logical\n * module is responsible for layouting layers, attach axis with them, resolving conflicts of layers.\n */\n\n/**\n * Basic unit implementaiton\n * @class VisualUnit\n */\nexport default class VisualUnit {\n\n /**\n * Creates instance of visualization unit\n * @param registry {Object} Component registry\n * @param dependencies {Object} Dependencies required by visual unit.\n */\n constructor (registry, dependencies) {\n this._id = getUniqueId();\n this._dependencies = dependencies;\n this._layerDeps = {\n throwback: new Store({\n onlayerdraw: false\n }),\n smartLabel: dependencies.smartLabel\n };\n this._renderedResolve = null;\n this._renderedPromise = new Promise((resolve) => {\n this._renderedResolve = resolve;\n });\n this._layerDeps.throwback.registerChangeListener([CommonProps.ON_LAYER_DRAW], () => {\n this._renderedResolve();\n this._lifeCycleManager.notify({ client: this.layers(), action: 'drawn', formalName: 'layer' });\n });\n\n this._lifeCycleManager = dependencies.lifeCycleManager;\n this._layersMap = {};\n this._gridlines = [];\n this._gridbands = [];\n this._layerAxisIndex = {};\n this._transformedDataModels = {};\n\n layerFactory.setLayerRegistry(registry.layerRegistry);\n generateGetterSetters(this, PROPS);\n this.cachedData([]);\n this.store(new Store({\n [primaryXAxisUpdated]: null,\n [primaryYAxisUpdated]: null,\n [secondaryXAxisUpdated]: null,\n [secondaryYAxisUpdated]: null\n }));\n transactor(this, localOptions, this.store().model);\n this.firebolt(new UnitFireBolt(this, {\n physical: physicalActions,\n behavioural: behaviouralActions,\n physicalBehaviouralMap: actionBehaviourMap\n }, sideEffects, behaviourEffectMap));\n registerListeners(this, listenerMap);\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof VisualUnit\n */\n static formalName () {\n return FORMAL_NAME;\n }\n\n /**\n * Static helper for creates a unit instance\n *\n * @param {Object} [id] optional unique identifier for a unit; , id is calculated internally\n * @param {DataModel} data instance of datamodel\n * @param {Array.} layers layer configuration\n * @param {Object} config configurtion for the visual unit\n * @return {VisualUnit} Instance of a unit\n */\n static create (...params) {\n return new this(...params);\n }\n\n /**\n *\n *\n * @readonly\n * @memberof VisualUnit\n */\n firebolt (...firebolt) {\n if (firebolt.length) {\n this._firebolt = firebolt[0];\n return this;\n }\n return this._firebolt;\n }\n\n /**\n * Gets the domain for all axes of this visual unit.\n * @return {Object} Domains of each data field.\n */\n getDataDomain () {\n return this.store().get(DATADOMAIN);\n }\n\n /**\n * Retrieves the id created for this instance of visual unit\n * @return {string} id associated with the instance\n */\n id () {\n return this._id;\n }\n\n /**\n *\n *\n * @returns\n * @memberof VisualUnit\n */\n lockModel () {\n this._store.model.lock();\n return this;\n }\n\n /**\n *\n *\n * @returns\n * @memberof VisualUnit\n */\n unlockModel () {\n this._store.model.unlock();\n return this;\n }\n\n timeDiffsByField (...params) {\n if (params.length) {\n return this;\n }\n return this._timeDiffsByField;\n }\n\n /**\n * Renders the visual unit. It creates the layout and renders the axes and layers.\n * @return {VisualUnit} Instance of visual unit.\n */\n render (container) {\n const config = this.config();\n const { className, defClassName, sideEffectClassName, classPrefix } = config;\n const qualifiedClassName = getQualifiedClassName(defClassName, this.id(), config.classPrefix);\n const width = this.width();\n const height = this.height();\n const containerSelection = selectElement(container).style('position', 'relative');\n\n this._rootSvg = makeElement(containerSelection, 'svg', [null], className)\n .style('width', `${width}px`).style('height', `${height}px`);\n\n const node = this._rootSvg.node();\n setAttrs(node, {\n width,\n height,\n class: qualifiedClassName.join(' ')\n });\n renderGridLineLayers(this, node);\n renderLayers(this, node, this.layers(), {\n width,\n height\n });\n this._sideEffectGroup = createSideEffectGroup(node, `${classPrefix}-${sideEffectClassName}`);\n return this;\n }\n\n done () {\n return this._renderedPromise;\n }\n /**\n *\n *\n * @returns\n * @memberof VisualUnit\n */\n enableCaching () {\n this._cache = true;\n return this;\n }\n\n /**\n *\n *\n * @returns\n * @memberof VisualUnit\n */\n clearCaching () {\n this._cache = false;\n this.cachedData([this.cachedData()[0]]);\n return this;\n }\n\n /**\n *\n *\n * @returns\n * @memberof VisualUnit\n */\n getDrawingContext () {\n const rootSvg = this._rootSvg && this._rootSvg.node();\n const width = this.width();\n const height = this.height();\n return {\n htmlContainer: this.mount(),\n svgContainer: rootSvg,\n width,\n height,\n sideEffectGroup: this._sideEffectGroup,\n parentContainer: this.parentContainer(),\n xOffset: 0,\n yOffset: 0\n };\n }\n\n /**\n * Returns the serialized configuration of visual unit.\n * @return {Object} serialized configuration\n */\n serialize () {\n return {\n layers: this.layers().map(layer => layer.serialize()),\n config: this.config(),\n axes: this.store().get('axes').map(axis => axis.serialize())\n };\n }\n\n /**\n *\n *\n * @param {*} layerDef\n * @returns\n * @memberof VisualUnit\n */\n addLayer (layerDef) {\n const layerName = layerDef.name;\n const layer = this.getLayerByName(layerName);\n const measurement = {\n width: this.width(),\n height: this.height()\n };\n\n if (layer) {\n return [layer];\n }\n const serializedDef = layerFactory.getSerializedConf(layerDef.mark, layerDef);\n const instances = Object.values(getLayerFromDef(this, serializedDef));\n this.layers().push(...instances);\n const layerAxisIndex = getLayerAxisIndex(instances, this.fields());\n this._layerAxisIndex = Object.assign(this._layerAxisIndex, layerAxisIndex);\n attachAxisToLayers(this.axes(), instances, layerAxisIndex);\n const store = { unit: this, layers: {} };\n this.layers().forEach((inst) => {\n store.layers[inst.alias()] = inst;\n });\n instances.forEach((lyr) => {\n resolveEncodingTransform(lyr, store);\n lyr.measurement(measurement);\n lyr.dataProps({\n timeDiffs: this.store().get(TIMEDIFFS)\n });\n });\n return instances;\n }\n\n /**\n *\n *\n * @returns\n * @memberof VisualUnit\n */\n remove () {\n const lifeCycleManager = this._dependencies.lifeCycleManager;\n lifeCycleManager.notify({ client: this, action: 'beforeremove', formalName: 'unit' });\n this.store().unsubscribeAll();\n selectElement(this.mount()).remove();\n this.firebolt().remove();\n // Remove layers\n lifeCycleManager.notify({ client: this.layers(), action: 'beforeremove', formalName: 'layer' });\n this.layers().forEach(layer => layer.remove());\n lifeCycleManager.notify({ client: this.layers(), action: 'removed', formalName: 'layer' });\n lifeCycleManager.notify({ client: this, action: 'removed', formalName: 'unit' });\n return this;\n }\n\n /**\n *\n *\n * @param {*} identifiers\n * @returns\n * @memberof VisualUnit\n */\n getDataModelFromIdentifiers (identifiers, mode, parentModel) {\n if (identifiers === null) {\n return null;\n }\n const dataModel = parentModel || this.data();\n return getDataModelFromIdentifiers(dataModel, identifiers, mode);\n }\n\n /**\n *\n *\n * @returns\n * @memberof VisualUnit\n */\n resetData () {\n this.data(this.cachedData()[0]);\n return this;\n }\n\n /**\n *\n *\n * @returns\n * @memberof VisualUnit\n */\n getSourceInfo () {\n return {\n dimensionMeasureMap: this._dimensionMeasureMap,\n fields: this.fields(),\n data: this.data(),\n axes: this.axes()\n };\n }\n\n /**\n *\n *\n * @returns\n * @memberof VisualUnit\n */\n getDefaultTargetContainer () {\n const { classPrefix, defClassName } = this.config();\n return [`.${classPrefix}-${defClassName}`];\n }\n\n /**\n *\n *\n * @param {*} type\n * @returns\n * @memberof VisualUnit\n */\n getLayersByType (type) {\n const layers = getLayersBy(this.layers(), 'type', type);\n return layers;\n }\n\n /**\n *\n *\n * @param {*} name\n * @returns\n * @memberof VisualUnit\n */\n getLayerByName (name) {\n const layers = getLayersBy(this.layers(), 'name', name);\n return layers[0];\n }\n\n /**\n *\n *\n * @param {*} domain\n * @returns\n * @memberof VisualUnit\n */\n updateAxisDomain (domain) {\n ['x', 'y'].forEach((type) => {\n const axes = this.axes()[type];\n let min = [];\n let max = [];\n let dom;\n axes && axes.forEach((axis, i) => {\n const field = this.fields()[type][i];\n dom = domain[`${this.fields()[type][i]}`];\n\n if (field.type() !== FieldType.DIMENSION && dom) {\n min[i] = dom[0];\n max[i] = dom[1];\n }\n });\n if (axes) {\n if (axes.length > 1) {\n const axisConf = axes[0].config();\n if (axes[0].constructor.type() === 'linear') {\n if (axisConf.alignZeroLine) {\n axes.forEach(axis => axis.config({\n nice: false\n }));\n const adjustedDomain = getAdjustedDomain(max, min);\n min = adjustedDomain.min;\n max = adjustedDomain.max;\n }\n\n axes[0].updateDomainCache([min[0], max[0]]);\n axes[1].updateDomainCache([min[1], max[1]]);\n } else {\n axes[0].updateDomainCache(dom);\n axes[1].updateDomainCache(dom);\n }\n } else {\n axes[0].updateDomainCache(dom);\n }\n }\n });\n return this;\n }\n\n /**\n * Finds the nearest point closest to the x and y position.\n * @param {number} x x position.\n * @param {number} y y position.\n * @return {Object} Nearest point.\n */\n getNearestPoint (x, y, args) {\n let pointObj = {\n id: null\n };\n const dimValue = getNearestDimensionalValue(this, {\n x,\n y\n });\n\n if (dimValue !== null && args.getAllPoints) {\n pointObj.id = dimValue;\n const pointInf = this.getMarkInfFromLayers(x, y, args);\n pointObj.target = pointInf && pointInf.id ? pointInf.id : pointObj.id;\n return pointObj;\n }\n\n const markInf = this.getMarkInfFromLayers(x, y, args) || { id: null };\n pointObj = Object.assign({}, markInf);\n\n pointObj.target = markInf.id;\n return pointObj;\n }\n\n getMarkInfFromLayers (x, y, args) {\n const layers = this.layers();\n const len = layers.length;\n let point = null;\n // Iterate through the layers array and fetch the nearest point from each layer. If a valid\n // nearest point is found from any layer, then return that point.\n for (let i = 0; i < len; i++) {\n const layer = layers[i];\n const config = layer.config();\n if (config.interactive !== false) {\n point = layer.getNearestPoint(x, y, args);\n }\n if (point) {\n return point;\n }\n }\n return point;\n }\n\n /**\n *\n *\n * @param {*} identifiers\n * @returns\n * @memberof VisualUnit\n */\n getPlotPointsFromIdentifiers (identifiers, config = {}) {\n let points = [];\n let parsedIdentifiers = identifiers;\n if (identifiers === null) {\n return [];\n }\n const layers = this.layers();\n const len = layers.length;\n if (isSimpleObject(identifiers)) {\n parsedIdentifiers = [Object.keys(identifiers)];\n parsedIdentifiers = [...parsedIdentifiers, ...transposeArray(Object.values(identifiers))];\n }\n for (let i = 0; i < len; i++) {\n const layer = layers[i];\n if (layer.config().interactive !== false) {\n points = [...points, ...layer.getPointsFromIdentifiers(parsedIdentifiers, config)];\n }\n }\n return points;\n }\n\n /**\n *\n *\n * @param {*} name\n * @returns\n * @memberof VisualUnit\n */\n removeLayerByName (name) {\n removeLayersBy('name', name);\n return this;\n }\n\n /**\n *\n *\n * @param {*} type\n * @returns\n * @memberof VisualUnit\n */\n removeLayersByType (type) {\n removeLayersBy('type', type);\n return this;\n }\n\n parentContainer (...container) {\n if (container.length) {\n this._parentContainer = container[0];\n\n return this;\n }\n return this._parentContainer;\n }\n}\n","import { DataModel } from 'muze-utils';\n\nimport { retriveDomainFromData } from './group-utils';\n\n/**\n * Gets name of fields form the variables\n *\n * @param {*} fields1\n * @param {*} [fields2=[]]\n * @return\n */\nconst getFieldNames = (fields1, fields2 = []) => [fields1, fields2].map(fields => fields.reduce((acc, d) => {\n acc = [...acc, ...d.getMembers()];\n return acc;\n}, []));\n\n/**\n * Creates a selected datamodel from a parent datamodel and a set of field names\n *\n * @param {Object} datamodel provided as input\n * @param {Array} fieldNames schema names\n * @param {Array} fieldValues values of those schema names to be selected\n * @return {Object} creates a new selected datamodel\n */\nconst createSelectedDataModel = (datamodel, fieldNames, fieldValues) =>\n datamodel.select(fields => fieldNames.every((field, k) => fields[field].value === fieldValues[k]));\n\n/**\n *\n *\n * @param {*} facets\n * @param {*} keyArray\n * @return\n */\nconst uniqueKeyGenerator = (keyArray, context, depth = 0, val = []) => {\n const {\n facets,\n dataModel,\n uniqueValues\n } = context;\n\n // Get unique keys for the next depth recursively if required\n if (facets[depth + 1]) {\n const field = facets[depth];\n uniqueValues.forEach((value) => {\n const newDm = dataModel.select(fields => fields[field].value === value);\n const nextDepthUniqueValues = retriveDomainFromData(newDm, facets[depth + 1]);\n const newContext = {\n facets,\n dataModel: newDm,\n uniqueValues: nextDepthUniqueValues\n };\n\n uniqueKeyGenerator(keyArray, newContext, depth + 1, [...val, value]);\n });\n } else {\n uniqueValues.forEach((value) => {\n keyArray.push([...val, value]);\n });\n }\n};\n\n/**\n * projects row model based on the set of row and/or column and other projection fields\n *\n * @param {Object} datamodel provided as input\n * @return {Object} Projected datamodel\n */\nconst projectRows = (datamodel, projections) => {\n const {\n allColumnProjections,\n rowProjections,\n optionalProjections\n } = projections;\n\n if (rowProjections.length > 0) {\n return rowProjections.map((projectFields) => {\n const [projFieldNames, colProjFieldNames] = getFieldNames(projectFields, allColumnProjections);\n return datamodel.project([...projFieldNames, ...colProjFieldNames, ...optionalProjections]);\n });\n }\n return [datamodel];\n};\n\n/**\n * Adds the datamodels to current row index based on column fields\n *\n * @param {Array} context current context\n * @param {Array} callback List of facets applied to the current datamodel\n */\nconst pushToMatrix = (context, callback) => {\n let cells = [];\n const {\n matrix,\n datamodel,\n facetInfo,\n fieldInfo\n } = context;\n // Get projected fields for current row\n const {\n rowProjections,\n colProjections,\n optionalProjections\n } = fieldInfo;\n const {\n rowIndex,\n columnIndex\n } = facetInfo;\n const rowProj = rowProjections[(rowIndex) % rowProjections.length] || [];\n\n // Get the cells for the matrix from the return function of the callback on the datamodel.\n // callback function -> (datamodel, {projections, indices}, facets)\n if (colProjections.length > 0) {\n cells = colProjections.map((projectFields, projIdx) => {\n const [colProjFieldNames, rowProjFieldNames] = getFieldNames(projectFields, rowProj);\n const projectedDm = datamodel.project([...colProjFieldNames, ...rowProjFieldNames, ...optionalProjections]);\n const projections = { rowFields: rowProj, columnFields: projectFields };\n const indices = { rowIndex, columnIndex: columnIndex * colProjections.length + projIdx };\n\n return callback(projectedDm, { projections, indices }, facetInfo);\n });\n } else {\n const projections = { rowFields: rowProj, columnFields: [] };\n const indices = { rowIndex, columnIndex };\n\n cells = [callback(datamodel, { projections, indices }, facetInfo)];\n }\n\n matrix[rowIndex] = matrix[rowIndex] || [];\n matrix[rowIndex].push(...cells);\n};\n\n/**\n * Gets Matrixes for corresponding datamodel, facets and projections\n *\n * @param {Object} dataModel input datamodel\n * @param {Object} fieldMap corresponding fieldmap\n * @param {Array} facetsAndProjections contains the set of facets and projections for the matrices\n * @param {Function} callback Callback executed after datamodels are prepared after sel/proj\n * @return {Object} set of matrices with the corresponding row and column keys\n */\nexport const getMatrixModel = (dataModel, fieldInfo, callback) => {\n let rowDataModels = [];\n const rowKeys = [];\n const columnKeys = [];\n const allColumnProjections = [];\n const matrix = [];\n const facetInfo = [];\n const {\n rowFacets,\n colFacets,\n colProjections\n } = fieldInfo;\n\n colProjections.forEach((colProj) => {\n allColumnProjections.push(...colProj);\n });\n fieldInfo.allColumnProjections = allColumnProjections;\n\n // Performing row selection and projection\n if (rowFacets.length > 0) {\n // Get unique values for the root level of facet\n const field = rowFacets[0].toString();\n const firstLevelRowKeys = retriveDomainFromData(dataModel, field);\n\n // Get unique keys in the form of an array of arrays for each row\n uniqueKeyGenerator(rowKeys, { facets: rowFacets, dataModel, uniqueValues: firstLevelRowKeys });\n\n // Apply selection -> projection -> row datamodels\n rowKeys.forEach((val) => {\n // Create faceted datamodel\n const [rowFacetFieldNames] = getFieldNames(rowFacets);\n const selectedDataModel = createSelectedDataModel(dataModel, rowFacetFieldNames, val);\n\n // Project the datamodel based on the number of projections (based on last levels)\n facetInfo.push([rowFacets, val]);\n rowDataModels.push(...projectRows(selectedDataModel, fieldInfo));\n });\n } else {\n // No row facets, hence only row projection\n rowDataModels.push(...projectRows(dataModel, fieldInfo));\n }\n\n // Maintaining set of row datamodels for column resolution\n rowDataModels = rowDataModels.length > 0 ? rowDataModels : [[]];\n\n // Performing column selection and projection\n if (colFacets.length > 0) {\n const colFacetNames = colFacets.map(d => `${d}`);\n // Get unique values for the root level of facet\n const field = colFacetNames[0];\n const firstLevelColumnKeys = retriveDomainFromData(dataModel, field);\n\n // Get unique keys to create faceted datamodels: this time for columns\n uniqueKeyGenerator(columnKeys, {\n facets: colFacetNames,\n dataModel,\n uniqueValues: firstLevelColumnKeys\n });\n\n // For each row in the datamodel, apply selection -> projection -> push the projection to matri\n rowDataModels.forEach((dme, rIndex) => {\n facetInfo[rIndex] = facetInfo[rIndex] || [[], []];\n columnKeys.forEach((val, cIndex) => {\n matrix[rIndex] = matrix[rIndex] || [];\n\n // If datamodel is not present in current row, choose parent datamodel\n const datamodel = dme instanceof DataModel ? dme : dataModel;\n\n // Selection is made on the datamodel for the current row\n const selectedDataModel = createSelectedDataModel(datamodel, colFacetNames, val);\n const context = {\n matrix,\n datamodel: selectedDataModel,\n facetInfo: {\n rowFacets: facetInfo[rIndex],\n colFacets: [colFacets, val],\n rowIndex: rIndex,\n columnIndex: cIndex\n },\n fieldInfo\n };\n pushToMatrix(context, callback);\n });\n });\n } else {\n // No column facets, hence only row projection\n rowDataModels.forEach((dme, rIndex) => {\n facetInfo[rIndex] = facetInfo[rIndex] || [[], []];\n const context = {\n matrix,\n datamodel: dme || dataModel,\n facetInfo: {\n rowFacets: facetInfo[rIndex],\n colFacets: [[], []],\n rowIndex: rIndex,\n columnIndex: 0\n },\n fieldInfo\n };\n\n pushToMatrix(context, callback);\n });\n }\n\n // Getting column keys\n const transposedColKeys = columnKeys.length > 0 ? columnKeys[0].map((col, i) =>\n columnKeys.map(row => row[i])) : columnKeys;\n\n return { matrix, rowKeys, columnKeys: transposedColKeys };\n};\n","import { AxisOrientation } from '@chartshq/muze-axis';\nimport { getObjProp, FieldType } from 'muze-utils';\nimport { getMatrixModel } from './matrix-model';\nimport {\n getCellKey,\n isDistributionEqual,\n mutateAxesFromMap,\n createSelection,\n getFieldsFromSuppliedLayers,\n extractFields\n} from './group-utils';\nimport { ROW, ROWS, COLUMNS, COL, LEFT, RIGHT, TOP, BOTTOM, PRIMARY, SECONDARY, X, Y } from '../enums/constants';\n\n/**\n * Updates row and column cells with the geom cell corresponding to the facet keys\n *\n * @param {*} resolver\n * @param {*} facets\n */\nconst updateCells = (resolver, facets, geomCell) => {\n [ROW, COL].forEach((field) => {\n const cells = resolver[`${field}Cells`]();\n const facetKey = facets[`${field}Facets`][1].join();\n\n !cells[facetKey] && (cells[facetKey] = []);\n cells[facetKey].push(geomCell);\n resolver[`${field}Cells`](cells);\n });\n};\n\n/**\n *\n *\n * @param {*} context\n * @param {*} datamodel\n * @param {*} fieldInfo\n * @param {*} facets\n * @return\n */\nexport const createValueCells = (context, datamodel, fieldInfo, facets) => {\n const {\n projections,\n indices\n } = fieldInfo;\n const {\n rowFields,\n columnFields\n } = projections;\n const {\n rowIndex,\n columnIndex\n } = indices;\n const {\n suppliedLayers,\n cell: GeomCell,\n resolver,\n config,\n encoder,\n detailFields\n } = context;\n const axes = resolver.axes();\n const cacheMaps = resolver.cacheMaps();\n const matrixLayers = resolver.matrixLayers();\n const labelManager = resolver.dependencies().smartlabel;\n const horizontalAxis = resolver.horizontalAxis();\n const verticalAxis = resolver.verticalAxis();\n const datamodelTransform = resolver.datamodelTransform();\n const {\n entryCellMap,\n exitCellMap\n } = cacheMaps;\n const layerConfigArr = encoder.getLayerConfig({ columnFields, rowFields }, suppliedLayers || []);\n const axesCreators = { config, labelManager, axes, cacheMaps };\n\n fieldInfo.normalizedColumns = verticalAxis.fields;\n fieldInfo.normalizedRows = horizontalAxis.fields;\n\n const groupAxes = encoder.createAxis(axesCreators, fieldInfo);\n\n matrixLayers[rowIndex] = matrixLayers[rowIndex] ? matrixLayers[rowIndex] : [];\n matrixLayers[rowIndex][columnIndex] = layerConfigArr;\n\n // return from map if already there otherwise create and put in map\n const geomCellKey = getCellKey(rowIndex, columnIndex);\n const fields = {\n y: rowFields,\n x: columnFields\n };\n const allFacets = [\n [...facets.rowFacets[0], ...facets.colFacets[0]],\n [...facets.rowFacets[1], ...facets.colFacets[1]]\n ];\n const geomCell = !exitCellMap.has(geomCellKey) ? new GeomCell() : exitCellMap.get(geomCellKey);\n\n geomCell.data(datamodel)\n .axes(groupAxes)\n .fields(fields)\n .transform(datamodelTransform)\n .detailFields(detailFields)\n .facetByFields(allFacets);\n entryCellMap.set(geomCellKey, geomCell);\n exitCellMap.delete(geomCellKey);\n\n updateCells(resolver, facets, geomCell);\n\n return entryCellMap.get(geomCellKey);\n};\n\n/**\n * Creates axis cells based on the set of axes\n *\n * @param {Selection} selection Contains a selection of the axis units\n * @param {Array} axes Actual axis units\n * @param {number} axisIndex 0-> primary axis, 1-> secondary axis(when dual axis is made)\n * @param {Object} cells Contains a collection of the cells\n * @return {Object} return either set of axis/blank cells depending on the config\n */\n\nconst createAxisCells = (selection, axes, axisIndex, cells) =>\n createSelection(selection, axis => axis, axes, (item, i) => i + item.reduce((e, n) => {\n const id = n.id + axisIndex;\n return e + id;\n }, '')).map((axis) => {\n if (axis && axis[axisIndex]) {\n const axisInst = axis[axisIndex];\n const { orientation, show } = axisInst.config();\n\n return new cells.AxisCell().source(axisInst).config({\n isOffset: orientation === AxisOrientation.LEFT || orientation === AxisOrientation.TOP,\n show\n });\n }\n return new cells.BlankCell().config({ show: false });\n });\n\n/**\n *\n *\n * @param {*} context\n * @param {*} selectionObj\n * @param {*} cells\n * @retur\n */\nconst axisPlaceholderGn = (context, selObj, cells) => {\n const {\n matrices\n } = context;\n const {\n axesMatrix\n } = matrices;\n\n return (type, axisFrom) => {\n const axes = axesMatrix[`${type}`];\n\n if (axes && axes.length) {\n if (type === X || type === Y) {\n const fieldNames = type === Y ? ROWS : COLUMNS;\n\n [PRIMARY, SECONDARY].forEach((fieldType, index) => {\n const selObjProp = `${fieldNames}${fieldType}`;\n let axisIndex = index;\n let axesForDraw = axes;\n if (axisFrom === RIGHT || axisFrom === BOTTOM) {\n axisIndex = 1 - axisIndex;\n }\n if (!getObjProp(axes, 0, axisIndex)) {\n axesForDraw = [];\n }\n selObj[selObjProp] = createAxisCells(selObj[selObjProp], axesForDraw, axisIndex, cells);\n });\n } else {\n selObj.rowsPrimary = createAxisCells(selObj.rowPrime, axes.map(() => []), 0, cells);\n selObj.columnsPrimary = createAxisCells(selObj.colPrime, axes[0], 0, cells);\n }\n }\n return selObj;\n };\n};\n\n/**\n * Creates header cells based on the set of headers\n *\n * @param {Object} selection Contains a selection of the header units\n * @param {string} headers Contains a list of the headers\n * @param {Object} cells Contains a collection of the cells\n * @param {Object} labelManager smart label instance\n * @return {Object} return either set of header cells depending on the config\n */\nconst createTextCells = (selection, headers, cells, labelManager) => createSelection(selection,\n label => new cells.TextCell({}, { labelManager }).source(label), headers, (key, i) => key + i);\n\n/**\n *\n *\n * @param {*} context\n * @param {*} selectionObj\n * @param {*} cells\n * @param {*} labelManager\n * @return\n */\nconst headerPlaceholderGn = (context, selectionObj, cells, labelManager) => {\n const {\n axis,\n keys,\n type,\n facetConfig\n } = context;\n const counter = axis.length / keys.length;\n const selectionKeys = keys.length ? axis.map((d, i) => keys[Math.floor(i / counter)]) : [];\n return createSelection(selectionObj[`${type}Headers`], keySet => keySet, selectionKeys, (keySet, i) =>\n `${keySet.join(',')}-${i}`).map(keySet => createTextCells(null, keySet, cells, labelManager)\n .map((cell, k, i) => cell.source(keySet[i]).config(facetConfig || {})));\n};\n\n/**\n * Creates a set of placeholders as a part of selection object\n *\n * @param {Array} normalizedOptions contains normalized rows and columns\n * @param {Array} matrices contains axis and value matrices\n * @param {aArrayny} projections contains set of row and column projections\n * @param {Object} cells Contains a collection of the cells\n * @param {Object} labelManager smart label instance\n * @return {Object} Creates a set of placeholders as a part of selections\n */\nconst generatePlaceholders = (context, cells, labelManager) => {\n let selectionObj;\n const {\n matrices,\n fields,\n facetsAndProjections,\n selection,\n facetConfig,\n encoders\n } = context;\n const {\n rows,\n columns\n } = fields;\n const {\n valuesMatrix\n } = matrices;\n const {\n rowProjections,\n colProjections\n } = facetsAndProjections;\n const {\n rowKeys,\n columnKeys\n } = valuesMatrix;\n const takeAxisFrom = encoders.simpleEncoder._axisFrom;\n const takeHeaderFrom = encoders.simpleEncoder._headerFrom;\n\n selectionObj = selection || {};\n\n ['pie', X, Y].forEach((axis) => {\n const axisFrom = axis === X ? takeAxisFrom.column : takeAxisFrom.row;\n selectionObj = axisPlaceholderGn(context, selectionObj, cells)(axis, axisFrom);\n });\n\n const {\n rowsPrimary,\n rowsSecondary,\n columnsPrimary,\n columnsSecondary\n } = selectionObj;\n\n const rowAxis = rowsPrimary && rowsPrimary.getObjects().length ? rowsPrimary.getObjects() :\n (rowsSecondary && rowsSecondary.getObjects().length ? rowsSecondary.getObjects() : []);\n const colAxis = columnsPrimary && columnsPrimary.getObjects().length ? columnsPrimary.getObjects() :\n (columnsSecondary && columnsSecondary.getObjects().length ? columnsSecondary.getObjects() : []);\n\n const headerConfig = [\n { type: LEFT, section: rows[0], axis: rowAxis, headerFrom: takeHeaderFrom.row },\n { type: RIGHT, section: rows[1], axis: rowAxis, headerFrom: takeHeaderFrom.row },\n { type: TOP, section: columns[0], axis: colAxis, headerFrom: takeHeaderFrom.column },\n { type: BOTTOM, section: columns[1], axis: colAxis, headerFrom: takeHeaderFrom.column }\n ];\n\n headerConfig.forEach((config, index) => {\n let keys;\n let length;\n const {\n type,\n section,\n axis,\n headerFrom\n } = config;\n\n if (index < 2) {\n keys = rowKeys;\n length = rowProjections.length > 0 ? rowProjections.length : 1;\n } else {\n keys = columnKeys;\n length = colProjections.length > 0 ? colProjections.length : 1;\n }\n\n if (section.length && headerFrom === type && axis && keys.length) {\n const hContext = { axis, length, type };\n let headers = [];\n if (index < 2) {\n hContext.keys = keys;\n hContext.facetConfig = facetConfig.rows;\n headers = headerPlaceholderGn(hContext, selectionObj, cells, labelManager);\n } else {\n hContext.facetConfig = facetConfig.columns;\n hContext.keys = keys[0].map((key, i) => keys.map(e => e[i]));\n headers = headerPlaceholderGn(hContext, selectionObj, cells, labelManager);\n }\n selectionObj[`${type}Headers`] = headers;\n } else {\n selectionObj[`${type}Headers`] = null;\n }\n });\n return selectionObj;\n};\n\n/**\n * Generates matrices\n *\n * @param {Object} config Configuration to generate matrices\n * @param {Array} matrices Matrices containing the set of visual units and axes units\n * @param {Object} cells Contains a collection of the cells\n * @param {Object} labelManager smart label instance\n * @return {Object} contains a collection of matrices\n */\nexport const generateMatrices = (context, matrices, cells, labelManager) => {\n const {\n unitHeight,\n unitWidth,\n facetsAndProjections,\n normalizedRows,\n normalizedColumns,\n selection,\n axisFrom,\n facetConfig,\n encoders\n } = context;\n const placeholderContext = {\n fields: {\n rows: normalizedRows,\n columns: normalizedColumns\n },\n matrices,\n facetsAndProjections,\n selection,\n axisFrom,\n facetConfig,\n encoders\n };\n // Generate placeholders for all matrices\n const selectionObj = generatePlaceholders(placeholderContext, cells, labelManager);\n const {\n columnsPrimary,\n columnsSecondary,\n rowsPrimary,\n rowsSecondary,\n leftHeaders,\n topHeaders,\n bottomHeaders,\n rightHeaders\n } = selectionObj;\n const [rowPrime, rowSec, colPrime, colSec] = [rowsPrimary, rowsSecondary, columnsPrimary, columnsSecondary]\n .map(d => (d ? d.getObjects() : []));\n const [leftFacets, rightFacets] = [leftHeaders, rightHeaders].map(e => (e ? e.getObjects()\n .map(f => f.getObjects()) : []));\n\n // Compute left matrix using left headers and the axes on the rows\n let leftMatrix = leftFacets.length ? leftFacets.map((d, i) => {\n rowPrime[i] = rowPrime[i] ? [rowPrime[i]] : [];\n return [...d, ...rowPrime[i]];\n }) : (rowPrime ? rowPrime.map(d => [d]) : []);\n\n // Compute right matrix using right headers and the axes on the rows\n const rightMatrix = rowSec.length ? rowSec.map((d, i) => [d, ...(rightFacets[i] || [])]) : (rightFacets.length ?\n rightFacets.map(d => [...d]) : []);\n\n const topMatrix = [];\n if (topHeaders) {\n const headers = topHeaders.getObjects();\n headers.forEach((e) => {\n const innerHeaders = e.getObjects();\n innerHeaders.forEach((x, i) => {\n topMatrix[i] = topMatrix[i] || [];\n topMatrix[i].push(x);\n });\n });\n }\n // Compute top matrix using the top headers and axes on the columns\n if (colPrime.length) {\n topMatrix.push(colPrime);\n }\n\n // Bottom and right matrices are prepared using the user config.\n let bottomMatrix = [];\n if (colSec.length) {\n bottomMatrix.push(colSec);\n }\n const currentBottomLength = bottomMatrix.length;\n if (bottomHeaders) {\n const headers = bottomHeaders.getObjects();\n headers.forEach((e) => {\n const innerHeaders = e.getObjects();\n innerHeaders.forEach((x, i) => {\n bottomMatrix[i + currentBottomLength] = bottomMatrix[i + currentBottomLength] || [];\n bottomMatrix[i + currentBottomLength].push(x);\n });\n });\n }\n\n if (!leftMatrix.length && !rightMatrix.length) {\n const cell = new cells.BlankCell();\n cell.setAvailableSpace(unitWidth, unitHeight);\n leftMatrix = [[cell]];\n }\n\n if (!topMatrix.length && (!bottomMatrix.length || !bottomMatrix[0].length)) {\n const cell = new cells.BlankCell();\n cell.setAvailableSpace(unitWidth, unitHeight);\n bottomMatrix = [[cell]];\n }\n\n return {\n rows: [leftMatrix, rightMatrix],\n columns: [topMatrix, bottomMatrix],\n selectionObj\n };\n};\n\n/**\n * Computes matrices for a group\n *\n * @param {Object} datamodel on which the matrices are to be computed\n * @param {Object} config configuration of the matrices\n * @param {Object} layerRegistry contains the registered layers\n * @return {Object} conputed matrices\n * @memberof MatrixResolver\n */\nexport const computeMatrices = (context, config) => {\n const {\n resolver,\n datamodel,\n componentRegistry,\n encoders\n } = context;\n const {\n globalConfig,\n selection,\n transform\n } = config;\n const groupBy = globalConfig.autoGroupBy;\n const { smartlabel: labelManager } = resolver.dependencies();\n const fieldMap = datamodel.getFieldsConfig();\n const layerConfig = resolver.layerConfig();\n const registry = resolver.registry();\n const { fields: normalizedRows } = resolver.horizontalAxis();\n const { fields: normalizedColumns } = resolver.verticalAxis();\n const otherEncodings = resolver.optionalProjections(config, layerConfig);\n const facetsAndProjections = resolver.getAllFields();\n const matrixGnContext = {\n // Configuration to be passed to generate the different matrices.\n // A common config is used for both value matrices and other matrices\n normalizedColumns,\n normalizedRows,\n facetsAndProjections,\n layers: layerConfig,\n fieldMap,\n otherEncodings,\n encoders,\n facetConfig: globalConfig.facetConfig || {},\n axisFrom: globalConfig.axisFrom || {},\n selection\n };\n const cells = {\n GeomCell: resolver.getCellDef(registry.GeomCell),\n AxisCell: resolver.getCellDef(registry.AxisCell),\n BlankCell: resolver.getCellDef(registry.BlankCell),\n TextCell: resolver.getCellDef(registry.TextCell)\n };\n const isRowSizeEqual = isDistributionEqual(normalizedRows);\n const isColumnSizeEqual = isDistributionEqual(normalizedColumns);\n\n resolver.colCells({});\n resolver.rowCells({});\n resolver.datamodelTransform(transform || {});\n\n // Cell creation begins here\n resolver.resetSimpleAxes();\n\n const {\n entryCellMap\n } = resolver.cacheMaps();\n const newCacheMap = {\n exitCellMap: entryCellMap,\n entryCellMap: new Map()\n };\n\n resolver.cacheMaps(newCacheMap);\n\n const valueCellContext = {\n config: globalConfig,\n suppliedLayers: encoders.simpleEncoder.serializeLayerConfig(resolver.layerConfig()),\n resolver,\n cell: cells.GeomCell,\n encoder: encoders.simpleEncoder,\n newCacheMap,\n detailFields: config.detail\n };\n const fieldsConfig = datamodel.getFieldsConfig();\n let groupedModel = datamodel;\n if (!groupBy.disabled) {\n const fields = getFieldsFromSuppliedLayers(valueCellContext.suppliedLayers, datamodel.getFieldsConfig());\n const allFields = extractFields(facetsAndProjections, fields);\n\n const dimensions = allFields.filter(field =>\n fieldsConfig[field] && fieldsConfig[field].def.type === FieldType.DIMENSION);\n const aggregationFns = groupBy.measures;\n\n groupedModel = datamodel.groupBy(dimensions.length ? dimensions : [''], aggregationFns).project(allFields);\n }\n\n // return a callback function to create the cells from the matrix\n const cellCreator = resolver.valueCellsCreator(valueCellContext);\n // Creates value matrices from the datamodel and configs\n const valueMatrixInfo = getMatrixModel(groupedModel, facetsAndProjections, cellCreator);\n\n resolver.cacheMaps().exitCellMap.forEach((placeholder) => {\n placeholder.remove();\n });\n resolver.cacheMaps().exitCellMap.clear();\n resolver.valueMatrix(valueMatrixInfo.matrix);\n resolver.createUnits(componentRegistry, config);\n\n const { xAxes, yAxes } = mutateAxesFromMap(resolver.cacheMaps(), resolver.axes());\n\n resolver.axes({\n x: xAxes,\n y: yAxes\n });\n\n const matrices = {\n valuesMatrix: valueMatrixInfo,\n axesMatrix: resolver.axes()\n };\n // Create all matrices\n const { rows, columns, selectionObj } = generateMatrices(matrixGnContext, matrices, cells, labelManager);\n\n resolver.rowMatrix(rows);\n resolver.columnMatrix(columns);\n\n return {\n rows: resolver.rowMatrix(),\n columns: resolver.columnMatrix(),\n values: resolver.valueMatrix(),\n isColumnSizeEqual,\n isRowSizeEqual,\n selection: selectionObj,\n dataModels: {\n groupedModel,\n parentModel: datamodel\n }\n };\n};\n","import { VisualUnit } from '@chartshq/visual-unit';\nimport {\n initializeCacheMaps,\n headerCreator,\n extractUnitConfig,\n setFacetsAndProjections\n} from './group-utils';\nimport {\n ROW, COL, LEFT, RIGHT, COLOR, SIZE, SHAPE, DETAIL, CELL, X_AXES, Y_AXES, ENTRY_CELLS, EXIT_CELLS, INITIALIZED,\n AXIS, UNIT, BEFORE_UPDATE, UPDATED, VALUE_MATRIX, FACET_HEADERS\n} from '../enums/constants';\nimport { createValueCells, computeMatrices } from './cell-creator';\n/**\n * Resolves the matrices from configuration provided\n *\n * @export\n * @class MatrixResolver\n */\nexport default class MatrixResolver {\n\n /**\n * Creates an instance of MatrixResolver.\n * @param {Object} dependencies needed to run the resolver\n * @memberof MatrixResolver\n */\n constructor (dependencies) {\n this._registry = {};\n this._layerConfig = [];\n this._matrixLayers = [];\n this._dependencies = dependencies;\n this._rowMatrix = [];\n this._columnMatrix = [];\n this._valueMatrix = [];\n this._facets = {};\n this._projections = {};\n this._datamodelTransform = {};\n this._units = [];\n this._cacheMaps = {};\n this._axes = {\n x: {},\n y: {},\n color: [],\n size: [],\n shape: []\n };\n\n this.cacheMaps(initializeCacheMaps());\n }\n\n /**\n * Set: Registers placeholders, Get: return {Object} those placeholders\n *\n * @param {Object} placeholders cells that will construct the group\n * @return {Object} Either current instance or the set of placeholders\n * @memberof MatrixResolver\n */\n registry (...placeholders) {\n if (placeholders.length) {\n Object.entries(placeholders[0]).forEach((val) => {\n this._registry[val[0]] = val[1];\n });\n return this;\n }\n return this._registry;\n }\n\n /**\n * Used to set the layer config from outside or get current layer info\n *\n * @param {Object} type configuration of layer provided externally\n * @return {Object} either the layer or current instance\n * @memberof MatrixResolver\n */\n dependencies (...dep) {\n if (dep.length) {\n this._dependencies = dep[0];\n return this;\n }\n return this._dependencies;\n }\n\n /**\n * Used to set the layer config from outside or get current layer info\n *\n * @param {Object} type configuration of layer provided externally\n * @return {Object} either the layer or current instance\n * @memberof MatrixResolver\n */\n units (...unitArr) {\n if (unitArr.length) {\n this._units = unitArr[0];\n return this;\n }\n return this._units;\n }\n\n /**\n * Used to set the layer config from outside or get current layer info\n *\n * @param {Object} layer configuration of layer provided externally\n * @return {Object} either the layer or current instance\n * @memberof MatrixResolver\n */\n layerConfig (...config) {\n if (config.length) {\n this._layerConfig = config[0];\n return this;\n }\n return this._layerConfig;\n }\n\n /**\n * Used to set the layer config from outside or get current layer info\n *\n * @param {Object} type configuration of layer provided externally\n * @return {Object} either the layer or current instance\n * @memberof MatrixResolver\n */\n matrixLayers (...layers) {\n if (layers.length) {\n this._matrixLayers = layers[0];\n return this;\n }\n return this._matrixLayers;\n }\n\n /**\n * Used to set the layer config from outside or get current layer info\n *\n * @param {Object} type configuration of layer provided externally\n * @return {Object} either the layer or current instance\n * @memberof MatrixResolver\n */\n datamodelTransform (...transform) {\n if (transform.length) {\n this._datamodelTransform = transform[0];\n return this;\n }\n return this._datamodelTransform;\n }\n\n /**\n * Used to set the layer config from outside or get current layer info\n *\n * @param {Object} type configuration of layer provided externally\n * @return {Object} either the layer or current instance\n * @memberof MatrixResolver\n */\n cacheMaps (...maps) {\n if (maps.length) {\n [CELL, X_AXES, Y_AXES, ENTRY_CELLS, EXIT_CELLS].forEach((e) => {\n this._cacheMaps[`${e}Map`] = maps[0][`${e}Map`] || this._cacheMaps[`${e}Map`];\n });\n return this;\n }\n return this._cacheMaps;\n }\n\n /**\n * Used to set the layer config from outside or get current layer info\n *\n * @param {Object} type configuration of layer provided externally\n * @return {Object} either the layer or current instance\n * @memberof MatrixResolver\n */\n rowCells (...cells) {\n if (cells.length) {\n this._rowCells = cells[0];\n return this;\n }\n return this._rowCells;\n }\n\n /**\n * Used to set the layer config from outside or get current layer info\n *\n * @param {Object} type configuration of layer provided externally\n * @return {Object} either the layer or current instance\n * @memberof MatrixResolver\n */\n colCells (...cells) {\n if (cells.length) {\n this._colCells = cells[0];\n return this;\n }\n return this._colCells;\n }\n\n /**\n * Used to set the layer config from outside or get current layer info\n *\n * @param {Object} type configuration of layer provided externally\n * @return {Object} either the layer or current instance\n * @memberof MatrixResolver\n */\n axes (...axes) {\n if (axes.length) {\n this._axes = Object.assign({}, this._axes, axes[0]);\n return this;\n }\n return this._axes;\n }\n\n /**\n * Used to set the layer config from outside or get current layer info\n *\n * @param {Object} type configuration of layer provided externally\n * @return {Object} either the layer or current instance\n * @memberof MatrixResolver\n */\n rowMatrix (...rowMat) {\n if (rowMat.length) {\n this._rowMatrix = rowMat[0];\n return this;\n }\n return this._rowMatrix;\n }\n\n /**\n * Used to set the layer config from outside or get current layer info\n *\n * @param {Object} type configuration of layer provided externally\n * @return {Object} either the layer or current instance\n * @memberof MatrixResolver\n */\n columnMatrix (...colMat) {\n if (colMat.length) {\n this._columnMatrix = colMat[0];\n return this;\n }\n return this._columnMatrix;\n }\n\n /**\n * Used to set the layer config from outside or get current layer info\n *\n * @param {Object} type configuration of layer provided externally\n * @return {Object} either the layer or current instance\n * @memberof MatrixResolver\n */\n valueMatrix (...valMat) {\n if (valMat.length) {\n this._valueMatrix = valMat[0];\n return this;\n }\n return this._valueMatrix;\n }\n\n /**\n *\n *\n * @param {*} facets\n * @return\n * @memberof MatrixResolver\n */\n facets (...facets) {\n if (facets.length) {\n Object.entries(facets[0]).forEach((e) => {\n this._facets[e[0]] = e[1];\n });\n return this;\n }\n return this._facets;\n }\n\n /**\n *\n *\n * @param {*} projections\n * @return\n * @memberof MatrixResolver\n */\n projections (...projections) {\n if (projections.length) {\n Object.entries(projections[0]).forEach((e) => {\n this._projections[e[0]] = e[1];\n });\n return this;\n }\n return this._projections;\n }\n\n /**\n *\n *\n * @param {*} config\n * @param {*} layerConfig\n * @return\n * @memberof MatrixResolver\n */\n optionalProjections (config, layerConfig) {\n const otherEncodings = {};\n const optionalProjections = [];\n const otherEncodingTypes = [SIZE, COLOR, SHAPE];\n\n otherEncodingTypes.forEach((type) => {\n if (config[type] && config[type].field) {\n const enc = config[type];\n otherEncodings[type] = enc.field;\n optionalProjections.push(enc.field);\n }\n });\n\n if (config[DETAIL]) {\n optionalProjections.push(...config.detail);\n }\n\n if (layerConfig.length) {\n layerConfig.forEach((layer) => {\n if (layer.encoding) {\n Object.values(layer.encoding).forEach((enc) => {\n if (enc && optionalProjections.indexOf(enc.field) === -1) {\n optionalProjections.push(enc.field ? enc.field : enc);\n }\n });\n }\n });\n }\n this.projections({ optionalProjections });\n return otherEncodings;\n }\n\n /**\n * return the normalized set of rows and facets and projections\n *\n * @param {Object} rows parameters needed to set horizontal axis consisiting of rows\n * @return {Object} facets, projections and normalized rows\n * @memberof MatrixResolver\n */\n horizontalAxis (rows, encoder) {\n if (rows) {\n this._horizontalAxis = setFacetsAndProjections(this, { type: ROW, fields: rows }, encoder);\n return this;\n }\n return this._horizontalAxis;\n }\n\n /**\n * return the normalized set of columns and facets and projections\n *\n * @param {Object} columns parameters needed to set vertical axis consisiting of columns\n * @return {Object} facets, projections and normalized columns\n * @memberof MatrixResolver\n */\n verticalAxis (columns, encoder) {\n if (columns) {\n this._verticalAxis = setFacetsAndProjections(this, { type: COL, fields: columns }, encoder);\n return this;\n }\n return this._verticalAxis;\n }\n\n /**\n * Gets the class definition of a particular cell type(if the particular type has been extended, that particular\n * definition is returned)\n *\n * @param {Object} cell cell whose class definition is to be retrieved\n * @return {Object} cell definition\n * @memberof MatrixResolver\n */\n getCellDef (cell) {\n const registry = this.registry();\n\n Object.values(registry).forEach((e) => {\n if (e.prototype instanceof cell) {\n cell = e;\n }\n });\n return cell;\n }\n\n /**\n * return a visual cell creator along with its axis information to be injected to the datamodel creation\n * function\n *\n * @param {Object} GeomCell Type of cell to be created\n * @return {Object} Created cell\n * @memberof MatrixResolver\n */\n valueCellsCreator (context) {\n // reset matrix layers\n this.matrixLayers([]);\n\n return (datamodel, fieldInfo, facets) => createValueCells(context, datamodel, fieldInfo, facets);\n }\n\n /**\n * Callback to be applied on each cell of a matrix of a particular type\n *\n * @param {string} matrixType type of matrix on which callback is to be applied\n * @param {Function} callback function to be applied to each cell\n * @memberof MatrixResolver\n */\n forEach (matrixType, callback) {\n this[matrixType]().forEach((row, rIndex) => {\n row.forEach((col, cIndex) => {\n callback(rIndex, cIndex, col);\n });\n });\n }\n\n /**\n *\n *\n * @return\n * @memberof MatrixResolver\n */\n getAllFields () {\n const retObj = this.projections();\n\n Object.entries(this.facets()).forEach((e) => {\n retObj[e[0]] = e[1];\n });\n return retObj;\n }\n\n /**\n *\n *\n * @memberof MatrixResolver\n */\n resetSimpleAxes () {\n return this.axes({\n x: new Set(),\n y: new Set()\n });\n }\n\n /**\n *\n *\n * @param {*} componentRegistry\n * @param {*} config\n * @memberof MatrixResolver\n */\n createUnits (componentRegistry, config) {\n const {\n globalConfig,\n alias\n } = config;\n const {\n layerRegistry,\n sideEffectRegistry\n } = componentRegistry;\n const {\n smartlabel: smartLabel,\n lifeCycleManager\n } = this.dependencies();\n // Provide the source for the matrix\n const units = [];\n // Setting unit configuration\n const unitConfig = extractUnitConfig(globalConfig || {});\n\n this.forEach(VALUE_MATRIX, (i, j, el) => {\n let unit = el.source();\n if (!unit) {\n unit = VisualUnit.create({\n layerRegistry,\n sideEffectRegistry\n }, {\n smartLabel,\n lifeCycleManager\n });\n el.source(unit);\n units.push(unit);\n }\n unit.parentAlias(alias);\n el.config(unitConfig);\n });\n\n lifeCycleManager.notify({ client: units, action: INITIALIZED, formalName: UNIT });\n return this.units(units);\n }\n\n /**\n *\n *\n * @param {*} config\n * @memberof MatrixResolver\n */\n setDomains (config, datamodel, encoders) {\n const {\n color,\n shape,\n size,\n globalConfig\n } = config;\n const groupBy = globalConfig.autoGroupBy;\n const {\n rowFacets,\n colFacets\n } = this.getAllFields();\n const encoding = {\n color,\n shape,\n size\n };\n const facetFields = [...rowFacets.map(e => e.toString()), ...colFacets.map(e => e.toString())];\n const retContext = {\n domains: encoders.simpleEncoder.getRetinalFieldsDomain(datamodel, encoding, facetFields, groupBy),\n axes: this.axes(),\n encoding\n };\n encoders.retinalEncoder.setCommonDomain(retContext);\n return this;\n }\n\n /**\n *\n *\n * @return\n * @memberof MatrixResolver\n */\n getRetinalAxes () {\n const {\n color,\n shape,\n size\n } = this.axes();\n\n return {\n color: [...color],\n shape: [...shape],\n size: [...size]\n };\n }\n\n /**\n *\n *\n * @param {*} type\n * @return\n * @memberof MatrixResolver\n */\n getSimpleAxes (type) {\n return this.axes()[`${type}`];\n }\n\n /**\n *\n *\n * @param {*} datamodel\n * @param {*} config\n * @memberof MatrixResolver\n */\n createRetinalAxes (fieldsConfig, config, encoders) {\n const layerConfig = this.layerConfig();\n this.optionalProjections(config, layerConfig);\n const retinalAxes = encoders.retinalEncoder.createAxis({\n fieldsConfig,\n config,\n axes: this.axes()\n });\n const {\n lifeCycleManager\n } = this.dependencies();\n\n [COLOR, SHAPE, SIZE].forEach((e) => {\n this.axes()[e] = retinalAxes[e];\n });\n\n lifeCycleManager.notify({ client: this.axes(), action: INITIALIZED, formalName: AXIS });\n lifeCycleManager.notify({ client: this.units(), action: BEFORE_UPDATE, formalName: UNIT });\n\n const units = [];\n const matrixLayers = this.matrixLayers();\n\n this.forEach(VALUE_MATRIX, (i, j, el) => {\n el.axes(retinalAxes);\n el.source() && el.source().retinalFields(config);\n el.layerDef(encoders.retinalEncoder.getLayerConfig(config, matrixLayers[i][j]));\n el.updateModel();\n\n units.push(el.source());\n });\n\n lifeCycleManager.notify({ client: units, action: UPDATED, formalName: UNIT });\n return this;\n }\n\n /**\n *\n *\n * @param {*} placeholders\n * @param {*} fieldNames\n * @return\n * @memberof MatrixResolver\n */\n createHeaders (placeholders, fieldNames, config) {\n let bottomLeft = [];\n let bottomRight = [];\n const {\n rows,\n columns\n } = placeholders;\n const {\n smartlabel: labelManager,\n lifeCycleManager\n } = this.dependencies();\n const TextCell = this.getCellDef(this.registry().TextCell);\n const BlankCell = this.getCellDef(this.registry().BlankCell);\n const [leftRows, rightRows] = rows;\n const [topCols, bottomCols] = columns;\n const rowHeaders = fieldNames.rows;\n const blankCellCreator = cell => new BlankCell().config({ show: cell.config().show });\n\n // Headers and footers are created based on the rows. Thereafter, using the column information\n // they are tabularized into the current structure\n const headers = {\n left: headerCreator(leftRows, rowHeaders[0], config.showHeaders ? TextCell : BlankCell, labelManager),\n right: headerCreator(rightRows, rowHeaders[1], config.showHeaders ? TextCell : BlankCell, labelManager)\n };\n const footers = {\n left: leftRows.length > 0 ? leftRows[0].map(blankCellCreator) : [],\n right: rightRows.length > 0 ? rightRows[0].map(blankCellCreator) : []\n };\n const [topLeft, topRight] = [LEFT, RIGHT].map(type => topCols.map((col, i) => {\n if (i === topCols.length - 1) {\n return headers[type];\n }\n return footers[type];\n }));\n\n // Creating only bottom matrices if there is no information on the top\n if (topCols.length === 0) {\n [bottomLeft, bottomRight] = [LEFT, RIGHT].map(type => bottomCols.map((col, i) => {\n if (i === 0) {\n return headers[type];\n }\n return footers[type];\n }));\n } else {\n bottomLeft = bottomCols.map(() => (leftRows.length > 0 ? leftRows[0].map(blankCellCreator) : []));\n bottomRight = bottomCols.map(() => (rightRows.length > 0 ? rightRows[0].map(blankCellCreator) : []));\n }\n\n lifeCycleManager.notify({\n client: [topLeft, topRight, bottomLeft, bottomRight],\n action: INITIALIZED,\n formalName: FACET_HEADERS\n });\n\n return { topLeft, topRight, bottomLeft, bottomRight };\n }\n\n /**\n *\n *\n * @param {*} datamodel\n * @param {*} config\n * @param {*} componentRegistry\n * @param {*} encoders\n * @return\n * @memberof MatrixResolver\n */\n getMatrices (datamodel, config, componentRegistry, encoders) {\n const context = {\n datamodel,\n componentRegistry,\n encoders,\n resolver: this\n };\n\n return computeMatrices(context, config);\n }\n}\n","/**\n *\n *\n * @export\n * @class ValueMatrix\n */\nclass ValueMatrix {\n\n /**\n *Creates an instance of ValueMatrix.\n * @param {*} matrixArr\n * @memberof ValueMatrix\n */\n constructor (matrixArr) {\n const instancesById = {};\n\n this.matrix(matrixArr);\n this.filter(() => true);\n\n this.each((el, rIdx, cIdx) => {\n const cellValue = el.valueOf();\n if (cellValue && cellValue.id) {\n const id = cellValue.id();\n instancesById[id] = {\n instance: cellValue,\n rowIndex: rIdx,\n colIndex: cIdx\n };\n }\n });\n\n this.instancesById(instancesById);\n }\n\n /**\n *\n *\n * @param {*} id\n * @return\n * @memberof ValueMatrix\n */\n instancesById (...id) {\n if (id.length) {\n this._instancesById = id[0];\n return this;\n }\n return this._instancesById;\n }\n\n /**\n *\n *\n * @param {*} m\n * @return\n * @memberof ValueMatrix\n */\n matrix (...matrix) {\n if (matrix.length) {\n this._matrix = matrix[0];\n return this;\n }\n return this._matrix;\n }\n\n /**\n *\n *\n * @param {*} fn\n * @return\n * @memberof ValueMatrix\n */\n filter (...fn) {\n if (fn.length) {\n this._filterFn = fn[0];\n return this;\n }\n return this._filterFn;\n }\n\n /**\n *\n *\n * @return\n * @memberof ValueMatrix\n */\n width () {\n let rowWidth = 0;\n\n this.matrix().forEach((row) => {\n let currentRowWidth = 0;\n row.forEach((cell) => {\n currentRowWidth += cell.getLogicalSpace().width;\n });\n rowWidth = Math.max(rowWidth, currentRowWidth);\n });\n return rowWidth;\n }\n\n /**\n *\n *\n * @return\n * @memberof ValueMatrix\n */\n height () {\n let rowHeight = 0;\n\n this.matrix().forEach((row) => {\n let currentRowHeight = 0;\n row.forEach((cell) => {\n currentRowHeight = Math.max(currentRowHeight, cell.getLogicalSpace().height);\n });\n rowHeight += currentRowHeight;\n });\n return rowHeight;\n }\n\n /**\n *\n *\n * @param {*} fn\n * @return\n * @memberof ValueMatrix\n */\n each (fn) {\n const matrix = this.matrix();\n const filterFn = this.filter();\n\n matrix.forEach((row, rIndex) => {\n row.forEach((col, cIndex) => {\n if (filterFn(col)) {\n fn(col, rIndex, cIndex, matrix);\n }\n });\n });\n return this;\n }\n\n /**\n *\n *\n * @param {*} id\n * @return\n * @memberof ValueMatrix\n */\n findPlaceHolderById (id) {\n return this.instancesById()[id];\n }\n\n /**\n *\n *\n * @return\n * @memberof ValueMatrix\n */\n getMatrixArray () {\n return this.matrix();\n }\n}\n\nexport default ValueMatrix;\n","import { RetinalEncoder } from '../encoder';\nimport { DATA_UPDATE_COUNTER } from '../enums/defaults';\nimport { getEncoder, getBorders } from '../group-helper';\nimport ValueMatrix from './value-matrix';\nimport localOptions from './local-options';\n\nconst sanitizeRetinalConfig = (retinalConf) => {\n const conf = {};\n for (const key in retinalConf) {\n const confValue = retinalConf[key];\n if (typeof confValue === 'string' || !confValue) {\n conf[key] = {\n field: retinalConf[key]\n };\n } else {\n conf[key] = confValue;\n }\n }\n return conf;\n};\n\n/**\n *\n *\n * @param {*} placeholder\n * @memberof VisualGroup\n */\nconst setMatrixInstances = (context, placeholder) => {\n context._composition.matrices = {\n value: new ValueMatrix(placeholder.values),\n left: new ValueMatrix(placeholder.rows[0]),\n right: new ValueMatrix(placeholder.rows[1]),\n top: new ValueMatrix(placeholder.columns[0]),\n bottom: new ValueMatrix(placeholder.columns[1])\n };\n return context;\n};\n\n/**\n *\n *\n * @param {*} context\n * @returns\n */\nexport const setupChangeListeners = (context) => {\n context.store().registerImmediateListener([...Object.keys(localOptions), DATA_UPDATE_COUNTER], (...params) => {\n const datamodel = context.data();\n const [config, rows, columns, color, shape, size, detail, layers, transform] = params;\n\n if (datamodel && rows[1] && columns[1]) {\n // Get the resolver for the matrices\n const resolver = context.resolver();\n // Prepare configuration for matrix preparation\n let matrixConfig = {\n selection: context.selection(),\n alias: context.alias(),\n globalConfig: config[1] || {},\n rows: rows[1],\n columns: columns[1],\n detail: detail[1],\n layers: layers[1],\n transform: transform[1]\n };\n\n const retinalConfig = sanitizeRetinalConfig({\n color: color[1],\n shape: shape[1],\n size: size[1]\n });\n\n matrixConfig = Object.assign(matrixConfig, retinalConfig);\n // Create the encoders for the group\n const encoders = {};\n encoders.retinalEncoder = new RetinalEncoder();\n encoders.simpleEncoder = getEncoder(layers[1]);\n\n // Set the group type\n context.groupType(encoders.simpleEncoder.constructor.type());\n\n // Get sanitized fields as instances of the Vars Class\n const fields = encoders.simpleEncoder.fieldSanitizer(datamodel, matrixConfig);\n encoders.simpleEncoder.setAxisAndHeaders(config[1] ? config[1].axisFrom : {}, fields);\n // Setting layers for the code\n layers[1] && resolver.layerConfig(layers[1]);\n // Set the row and column axes\n resolver.horizontalAxis(fields.rows, encoders).verticalAxis(fields.columns, encoders);\n // Getting the placeholders\n const placeholderInfo = resolver.getMatrices(datamodel, matrixConfig, context.registry(), encoders);\n context._groupedDataModel = placeholderInfo.dataModels.groupedModel;\n // Set the selection object\n context.selection(placeholderInfo.selection);\n\n // Create retinal axes\n resolver.createRetinalAxes(placeholderInfo.dataModels.parentModel.getFieldsConfig(), retinalConfig,\n encoders);\n\n // Domains are evaluated for each of the axes for commonality\n resolver.setDomains(matrixConfig, placeholderInfo.dataModels, encoders);\n\n // Create matrix instances\n setMatrixInstances(context, placeholderInfo);\n\n // Prepare corner matrices\n context.cornerMatrices(resolver.createHeaders(placeholderInfo, fields, config[1]));\n\n // Set placeholder information\n context.placeholderInfo(placeholderInfo);\n\n context._composition.axes = resolver.axes();\n context.metaData({\n border: getBorders(placeholderInfo, encoders.simpleEncoder)\n });\n }\n return context;\n });\n return context;\n};\n","import { DATA_UPDATE_COUNTER } from '../enums/defaults';\n\nexport const PROPS = {\n alias: {},\n data: {\n sanitization: (context, value) => {\n if (context._data !== value) {\n const store = context.store();\n let hasDataUpdated = store.get(DATA_UPDATE_COUNTER);\n store.commit(DATA_UPDATE_COUNTER, ++hasDataUpdated);\n }\n return value;\n }\n },\n cornerMatrices: {},\n groupType: {},\n matrixInstance: {},\n metaData: {},\n placeholderInfo: {},\n resolver: {},\n registry: {\n sanitization: (context, value) => {\n if (context.resolver) {\n context.resolver().registry(value.cellRegistry);\n }\n return value;\n }\n },\n selection: {},\n store: {}\n};\n","import { transactor, generateGetterSetters } from 'muze-utils';\nimport localOptions from './local-options';\nimport { SimpleGroup } from '../simple-group';\nimport {\n MatrixResolver,\n initStore,\n findInGroup\n} from '../group-helper';\nimport { setupChangeListeners } from './change-listener';\nimport { PROPS } from './props';\nimport {\n CONFIG,\n MOUNT,\n RETINAL,\n Y\n} from '../enums/constants';\n\n/**\n * This class is used to create an instance of a visual group.\n * It extends the SimpleGroup (which is an interface). The visual group takes in a datamodel,\n * and a set of rows and columns, alongwith optional paramters (like color, size, shape).\n *\n * @class VisualGroup\n */\nclass VisualGroup extends SimpleGroup {\n\n /**\n * Creates an instance of VisualGroup. Requires dependencies and other registry options for placeholders\n * and layers that create individual units\n * @param {Object} registry Key value pair of compostions for the group\n * @param {Object} dependencies Dependencies needed to run the group\n * @memberof VisualGroup\n */\n constructor (registry, dependencies) {\n super();\n\n const {\n componentSubRegistry\n } = registry;\n\n this._dependencies = dependencies;\n // Generate getter/setter methods for all properties of the class\n // One can get each property by calling the method and can set it\n // by passing paramaters for the same. Thus, one can chain setter\n // getter methods.\n generateGetterSetters(this, PROPS);\n // Populate the store with default values\n this.store(initStore());\n\n // initialize group compositions\n this._composition = {};\n // store reference to data\n this._data = [];\n // matrix instance store each of the matrices\n this._matrixInstance = {};\n // store reference to mountpoint\n this._mount = null;\n // selection object that takes care of updating of components\n this._selection = {};\n // stores info about the placeholders generated after creation of matrices\n this._placeholderInfo = {};\n // corner matrices are the headers/footers for the application\n this._cornerMatrices = {};\n // Create instance of matrix resolver\n this.resolver(new MatrixResolver(this._dependencies));\n\n // Getting indiviual registered items\n this.registry({\n layerRegistry: componentSubRegistry.layerRegistry.get(),\n cellRegistry: componentSubRegistry.cellRegistry.get()\n });\n // Add local options to the store\n transactor(this, localOptions, this.store().model);\n // Register listeners\n setupChangeListeners(this);\n }\n\n matrixInstance (...matrices) {\n if (matrices.length) {\n return this;\n }\n return this.composition().matrices;\n }\n\n /**\n * Returns the composition of the Group\n *\n * @readonly\n * @memberof VisualGroup\n */\n composition (...params) {\n if (params.length) {\n return this;\n }\n return this._composition;\n }\n\n /**\n * Locks the model to prevent change listeners to be triggered until unlocked\n *\n * @return {Object} Instance of class VisualGroup\n * @memberof VisualGroup\n */\n lockModel () {\n this.store().model.lock();\n return this;\n }\n\n /**\n * Unlocks the model so that all change listeners can be triggered\n *\n * @return {Object} Instance of class VisualGroup\n * @memberof VisualGroup\n */\n unlockModel () {\n this.store().model.unlock();\n return this;\n }\n\n /**\n *\n *\n * @param {*} variable\n * @return\n * @memberof VisualGroup\n */\n where (variable) {\n return findInGroup(variable, this.resolver().getAllFields());\n }\n\n /**\n *\n *\n * @param {*} type\n * @return\n * @memberof VisualGroup\n */\n getAxes (type) {\n if (type === RETINAL) {\n return this.resolver().getRetinalAxes();\n }\n return this.resolver().getSimpleAxes(type);\n }\n\n /**\n *\n *\n * @return\n * @memberof VisualGroup\n */\n getCells (type) {\n return this.resolver()[`${type}Cells`]();\n }\n\n /**\n *\n *\n * @param {*} channel\n * @return\n * @memberof VisualGroup\n */\n getFieldsFromChannel (channel) {\n const {\n rowProjections,\n colProjections\n } = this.resolver().getAllFields();\n\n return channel === Y ? rowProjections : colProjections;\n }\n\n /**\n *\n *\n * @param {*} facetKey\n * @return\n * @memberof VisualGroup\n */\n getCellsByFacetKey (facetKey) {\n const resolver = this.resolver();\n const cells = resolver.rowCells()[facetKey] || resolver.colCells()[facetKey] || [];\n return cells;\n }\n\n /**\n *\n *\n * @param {*} facetKey\n * @return\n * @memberof VisualGroup\n */\n getAxesByFacetKey (axisType, facetKey) {\n const resolver = this.resolver();\n const cells = resolver.rowCells()[facetKey] || resolver.colCells()[facetKey];\n const axes = cells[0].valueOf().axes()[axisType] || [];\n\n return axes;\n }\n\n /**\n * This method is used to return a serialized representation of the instance's properties.\n *\n * @return {Object} Object with config proprties.\n * @memberof VisualGroup\n */\n serialize () {\n const store = this.store();\n\n return {\n [CONFIG]: store.get(CONFIG),\n [MOUNT]: store.get(MOUNT)\n };\n }\n\n getGroupByData () {\n return this._groupedDataModel;\n }\n}\n\nexport default VisualGroup;\n","import { PersistentBehaviour, SELECTION } from '@chartshq/muze-firebolt';\n\nexport default class SelectBehaviour extends PersistentBehaviour {\n static formalName () {\n return 'select';\n }\n\n setSelectionSet (addSet, selectionSet) {\n if (addSet === null) {\n selectionSet.reset();\n } else if (addSet.length) {\n // new add set\n const existingRemoveSet = addSet.filter(d => selectionSet._set[d] === SELECTION.SELECTION_OLD_EXIT\n || selectionSet._set[d] === SELECTION.SELECTION_NEW_EXIT);\n // existing add set\n if (existingRemoveSet.length) {\n selectionSet.updateEntry();\n selectionSet.add(existingRemoveSet);\n } else {\n selectionSet.updateExit();\n selectionSet.remove(addSet);\n }\n const { exitSet } = selectionSet.getSets();\n const mergedExitSet = [...new Set(exitSet[1]), ...new Set(exitSet[0])];\n const completeSetCount = selectionSet.getCompleteSet().length;\n if (exitSet[1].length !== completeSetCount && mergedExitSet.length === completeSetCount) {\n selectionSet.reset();\n }\n } else {\n selectionSet.remove(selectionSet.getCompleteSet());\n }\n return this;\n }\n}\n","import { BEHAVIOURS, ACTIONS } from '@chartshq/muze-firebolt';\n\nconst CLASSPREFIX = 'muze';\n\nexport const actionBehaviourMap = {\n [ACTIONS.DRAG]: {\n target: `.${CLASSPREFIX}-gradient-rect`,\n behaviours: [BEHAVIOURS.BRUSH]\n },\n [ACTIONS.HOVER]: {\n target: [`.${CLASSPREFIX}-legend-columns`],\n behaviours: [BEHAVIOURS.HIGHLIGHT]\n },\n [ACTIONS.CLICK]: {\n target: [`.${CLASSPREFIX}-legend-columns`],\n behaviours: [BEHAVIOURS.SELECT]\n }\n};\n\nexport const propagationBehaviourMap = {\n [BEHAVIOURS.SELECT]: BEHAVIOURS.FILTER,\n [BEHAVIOURS.BRUSH]: BEHAVIOURS.HIGHLIGHT\n};\n","import * as BEHAVIOURS from '../enums/behaviours';\nimport * as sideEffects from '../enums/side-effects';\n\nexport const behaviourEffectMap = {\n [BEHAVIOURS.BRUSH]: [sideEffects.SELECTIONBOX, {\n name: sideEffects.Highlighter,\n options: {\n strategy: 'fade'\n }\n }],\n [BEHAVIOURS.HIGHLIGHT]: [sideEffects.Highlighter],\n select: [{\n name: sideEffects.Highlighter,\n options: {\n strategy: 'fade'\n }\n }]\n};\n\nexport const propagationSideEffects = {\n [BEHAVIOURS.BRUSH]: [{\n name: sideEffects.Highlighter,\n options: {\n strategy: 'fade'\n }\n }],\n [BEHAVIOURS.HIGHLIGHT]: [{\n name: sideEffects.Highlighter,\n options: {\n strategy: 'fade'\n }\n }],\n [BEHAVIOURS.SELECT]: ['filter']\n};\n\n","export const BRUSH = 'brush';\nexport const HIGHLIGHT = 'highlight';\nexport const TOOLTIP = 'tooltip';\nexport const FILTER = 'filter';\nexport const SELECT = 'select';\n\n","export const SELECTIONBOX = 'selectionBox';\nexport const Highlighter = 'highlighter';\n\n","export const CLASSPREFIX = 'muze';\nexport const IDFIELD = '__id__';\nexport const CONFIG = 'config';\nexport const DATAMODEL = 'dataModel';\nexport const AXES = 'axes';\nexport const LAYERDEFS = 'layerDef';\nexport const WIDTH = 'width';\nexport const HEIGHT = 'height';\nexport const MOUNTPOINT = 'mountPoint';\nexport const GRIDLINEPARENTGROUPCLASS = 'grid-lines';\nexport const TRANSFORM = 'transform';\nexport const CONSOLIDATED = 'consolidated';\nexport const FRAGMENTED = 'fragmented';\nexport const DEFAULTCOLOR = '#F44336';\nexport const DEFAULTSIZE = 50;\nexport const DEFAULTSHAPE = 'circle';\nexport const STEP = 'step';\nexport const GRADIENT = 'gradient';\nexport const ORDINAL = 'ordinal';\nexport const SCALE_FUNCTIONS = {\n size: 'getSize',\n shape: 'getShape',\n color: 'getColor'\n};\nexport const TOP = 'top';\nexport const LEFT = 'left';\nexport const RIGHT = 'right';\nexport const BOTTOM = 'bottom';\nexport const HORIZONTAL = 'horizontal';\nexport const VERTICAL = 'vertical';\nexport const CENTER = 'center';\nexport const VALUE = 'value';\nexport const PATH = 'path';\nexport const SHAPE = 'shape';\nexport const ICON = 'icon';\nexport const RECT = 'rect';\nexport const START = 'start';\nexport const UPPER = 'upper';\nexport const LOWER = 'lower';\nexport const END = 'end';\nexport const SIZE = 'size';\nexport const DISCRETE = 'discrete';\nexport const MEASURE = 'measure';\n\n","import { assembleModelFromIdentifiers, getDataModelFromRange } from 'muze-utils';\nimport { propagationBehaviourMap } from './action-behaviour-map';\nimport { propagationSideEffects } from './behaviour-effect-map';\nimport { STEP, GRADIENT, DISCRETE, MEASURE } from '../enums/constants';\n\nexport const propagate = (firebolt, action, selectionSet, config = {}) => {\n let propagationData;\n const type = firebolt.context.constructor.type();\n const payload = config.payload;\n const data = firebolt.context.data();\n const metaData = firebolt.context.metaData();\n const fieldType = metaData.getData().schema[0].type;\n\n const propPayload = {};\n const sourceId = firebolt.context._id;\n propPayload.action = propagationBehaviourMap[action] || action;\n propPayload.sideEffects = propagationSideEffects[action];\n propPayload.sourceCanvas = firebolt.context.canvasAlias();\n const isMutableAction = firebolt._actions.behavioural[propPayload.action].constructor.mutates();\n if (payload.criteria === null) {\n propagationData = null;\n } else {\n const entrySet = selectionSet.mergedEnter;\n let values = data.filter(d => entrySet.uids.indexOf(d.id) !== -1).map(d => d.value);\n if (type === STEP || (type === DISCRETE && fieldType === MEASURE)) {\n const field = Object.keys(payload.criteria || {})[0];\n values = data.filter(d => entrySet.uids.indexOf(d.id) !== -1).map(d => d.range);\n propagationData = values.length ? metaData.select((fields) => {\n let check = false;\n for (let i = 0; i < values.length; i++) {\n check = fields[field].value >= values[i][0] && fields[field].value <= values[i][1];\n if (check === true) {\n break;\n }\n }\n return check;\n }, {\n saveChild: false\n }) : null;\n } else if (type === GRADIENT) {\n propagationData = getDataModelFromRange(metaData, payload.criteria);\n } else if (values.length) {\n propagationData = assembleModelFromIdentifiers(metaData, [payload.criteria[0], ...values.map(d => [d])]);\n } else {\n propPayload.criteria = null;\n propagationData = metaData.select(() => true, {\n saveChild: false\n });\n }\n }\n\n let propagateInterpolatedValues = false;\n\n if (propagationData) {\n const schema = propagationData.getSchema();\n propagateInterpolatedValues = schema.every(d => d.type === fieldType.MEASURE);\n }\n\n const propConfig = {\n sourceId: `legend-${sourceId}`,\n payload: propPayload,\n criteria: propPayload.criteria === null ? null : propagationData,\n isMutableAction,\n propagateInterpolatedValues,\n action: propPayload.action\n };\n\n metaData.propagate(propagationData, propConfig, true);\n};\n","import { Firebolt } from '@chartshq/muze-firebolt';\nimport { propagate } from './helper';\nimport { STEP, GRADIENT } from '../enums/constants';\n\n/**\n * This class manages the interactions of legend.\n * @export\n * @class LegendFireBolt\n * @extends {Firebolt}\n */\nexport class LegendFireBolt extends Firebolt {\n constructor (...params) {\n super(...params);\n this.initializeSideEffects();\n }\n\n getPropagationSelectionSet (selectionSet) {\n return selectionSet[0];\n }\n\n propagate (behaviourName, payload, selectionSet) {\n propagate(this, behaviourName, selectionSet, {\n payload\n });\n }\n\n getAddSetFromCriteria (criteria) {\n let values;\n let uniqueIds;\n const type = this.context.constructor.type();\n\n if (criteria === null) {\n uniqueIds = null;\n } else if (type === STEP) {\n values = Object.values(criteria);\n uniqueIds = this.context.data().filter(d => values.indexOf(d.range) !== -1).map(d => d.id);\n } else if (type === GRADIENT) {\n uniqueIds = [];\n } else {\n values = criteria[1];\n if (values) {\n uniqueIds = this.context.data().filter(d => values.indexOf(d.value) !== -1).map(d => d.id);\n } else {\n values = Object.values(criteria);\n uniqueIds = this.context.data().filter(d => values.indexOf(d.range) !== -1).map(d => d.id);\n }\n }\n return {\n uids: uniqueIds,\n model: null\n };\n }\n\n getFullData () {\n return null;\n }\n}\n","import {\n getEvent,\n getD3Drag\n } from 'muze-utils';\n\n/**\n * Adds dragging action to the target element.\n * @param {firebolt} firebolt firebolt\n * @param {SVGElement} targetEl Element on which brushing action is needed.\n * @param {Array} behaviours Array of behaviours\n */\n/* istanbul ignore next */ const drag = firebolt => (targetEl, behaviours) => {\n let startPos = {};\n let endPos = {};\n let payload;\n const d3Drag = getD3Drag();\n const context = firebolt.context;\n const boundingBox = context.measurement().gradientDimensions;\n const axisType = context.config().align === 'horizontal' ? 'x' : 'y';\n const axisScale = context.axis().source().scale();\n const rangeShifter = axisScale.range()[axisType === 'x' ? 0 : 1];\n\n targetEl.call(d3Drag().on('start', () => {\n const event = getEvent();\n startPos = {\n x: event.x,\n y: event.y\n };\n }).on('drag', () => {\n const event = getEvent();\n\n endPos = {\n x: event.x,\n y: event.y\n };\n endPos.x = Math.max(0, Math.min(endPos.x, boundingBox.width));\n endPos.y = Math.max(0, Math.min(endPos.y, boundingBox.height));\n\n payload = {\n criteria: {\n [context.fieldName()]: [axisScale.invert(startPos[axisType] + rangeShifter * 2),\n axisScale.invert(endPos[axisType] + rangeShifter * 2)].sort((a, b) => a - b)\n }\n };\n behaviours.forEach(behaviour => firebolt.dispatchBehaviour(behaviour, payload));\n }).on('end', () => {\n const event = getEvent();\n\n endPos = {\n x: event.x,\n y: event.y\n };\n endPos.x = Math.max(0, Math.min(endPos.x, boundingBox.width));\n endPos.y = Math.max(0, Math.min(endPos.y, boundingBox.height));\n if (startPos[axisType] === endPos[axisType]) {\n payload = {\n criteria: {}\n };\n } else {\n payload = {\n criteria: {\n [context.fieldName()]: [axisScale.invert(startPos[axisType] + rangeShifter * 2),\n axisScale.invert(endPos[axisType] + rangeShifter * 2)].sort((a, b) => a - b)\n }\n };\n }\n behaviours.forEach(behaviour => firebolt.dispatchBehaviour(behaviour, payload));\n }));\n};\n\nexport default drag;\n","/**\n * Adds mouse interactions to target element.\n * @param {Firebolt} Firebolt instance of firebolt.\n * @param {SVGElement} targetEl Element on which the event listeners will be attached.\n * @param {Array} behaviours Array of behaviours\n */\n/* istanbul ignore next */ const hover = firebolt => (targetEl, behaviours) => {\n const dispatchBehaviour = function (args) {\n const payload = {\n criteria: firebolt.context.getCriteriaFromData(args)\n };\n behaviours.forEach(behaviour => firebolt.dispatchBehaviour(behaviour, payload));\n event.stopPropagation();\n };\n\n targetEl.on('mouseover', dispatchBehaviour)\n .on('mousemove', dispatchBehaviour)\n .on('mouseout', () => {\n behaviours.forEach(behaviour => firebolt.dispatchBehaviour(behaviour, {\n criteria: null\n }));\n event.stopPropagation();\n });\n};\n\nexport default hover;\n","/**\n * Adds mouse interactions to target element.\n * @param {VisualUnit} instance instance of visual unit.\n * @param {SVGElement} targetEl Element on which the event listeners will be attached.\n * @param {Array} behaviours Array of behaviours\n */\nconst click = firebolt => (targetEl, behaviours) => {\n const dispatchBehaviour = function (args) {\n const payload = {\n criteria: firebolt.context.getCriteriaFromData(args)\n };\n behaviours.forEach(behaviour => firebolt.dispatchBehaviour(behaviour, payload));\n };\n\n targetEl.on('click', dispatchBehaviour);\n};\n\nexport default click;\n","import drag from './drag';\nimport hover from './hover';\nimport click from './click';\nimport * as ACTIONNAMES from '../../enums/actions';\n\nexport const physicalActions = {\n [ACTIONNAMES.DRAG]: drag,\n [ACTIONNAMES.HOVER]: hover,\n [ACTIONNAMES.CLICK]: click\n};\n\n","export const DRAG = 'drag';\nexport const HOVER = 'hover';\nexport const SELECTIONDRAG = 'selectiondrag';\nexport const CLICK = 'click';\n","import {\n getMousePos,\n getEvent,\n getD3Drag\n } from 'muze-utils';\nimport { HEIGHT, WIDTH, HORIZONTAL } from '../../enums/constants';\n\nconst getSelectionCriteria = (subject, axis, measures) => {\n let criteria = [];\n const {\n axisScale,\n axisType\n } = axis;\n const {\n startPos,\n endPos,\n selectionBoxMeasure,\n drawingInfMeasure,\n offset\n } = measures;\n const subjectStartPoint = subject[axisType];\n\n if (startPos[axisType] === endPos[axisType]) {\n criteria = [];\n } else if (subjectStartPoint + selectionBoxMeasure >= drawingInfMeasure + offset) {\n criteria = [axisScale.invert(drawingInfMeasure + offset - selectionBoxMeasure),\n axisScale.invert(drawingInfMeasure + offset)];\n } else if (subjectStartPoint - offset < offset) {\n criteria = [axisScale.invert(offset * 2), axisScale.invert(selectionBoxMeasure + offset * 2)];\n } else {\n criteria = [axisScale.invert(subjectStartPoint), axisScale.invert(subjectStartPoint + selectionBoxMeasure)];\n }\n axisType === 'x' ? criteria : criteria.reverse();\n return criteria;\n};\n\nexport const selectionBoxDrag = firebolt => (targetEl, behaviours) => {\n let startPos = {};\n let payload;\n const endPos = {};\n const d3Drag = getD3Drag();\n const context = firebolt.context;\n const axisScale = context.axis().source().scale();\n const axisType = context.config().align === HORIZONTAL ? 'x' : 'y';\n const drawingInfMeasure = context.measurement().gradientDimensions[axisType === 'x' ?\n WIDTH : HEIGHT];\n const offset = axisScale.range()[axisType === 'x' ? 0 : 1];\n const measures = {\n drawingInfMeasure,\n offset\n };\n let subject = {};\n\n targetEl.call(d3Drag().on('start', function () {\n const event = getEvent();\n startPos = getMousePos(this, event.sourceEvent);\n subject = event.subject;\n }).on('drag', () => {\n const event = getEvent();\n const selectionBoxMeasure = subject[axisType === 'x' ? WIDTH : HEIGHT];\n\n subject.x += event.dx;\n subject.y += event.dy;\n\n measures.selectionBoxMeasure = selectionBoxMeasure;\n measures.startPos = startPos;\n measures.endPos = endPos;\n const criteria = getSelectionCriteria(subject, { axisScale, axisType }, measures);\n\n payload = {\n criteria: {\n [context.fieldName()]: criteria\n },\n fadeOut: true\n };\n firebolt.dispatchBehaviour(behaviours[0], payload);\n }).on('end', () => {\n const event = getEvent();\n const selectionBoxMeasure = subject[axisType === 'x' ? WIDTH : HEIGHT];\n measures.selectionBoxMeasure = selectionBoxMeasure;\n measures.startPos = startPos;\n measures.endPos = endPos;\n const criteria = getSelectionCriteria(event, { axisScale, axisType }, measures);\n payload = {\n criteria: {\n [context.fieldName()]: criteria\n },\n fadeOut: true,\n config: {\n transition: {\n duration: 200\n }\n }\n };\n firebolt.dispatchBehaviour(behaviours[0], payload);\n }));\n};\n\n","import { makeElement } from 'muze-utils';\nimport { SpawnableSideEffect } from '@chartshq/muze-firebolt';\nimport { CLASSPREFIX, HEIGHT, WIDTH, HORIZONTAL, RECT } from '../../../enums/constants';\nimport { SELECTIONBOX } from '../../../enums/side-effects';\nimport { selectionBoxDrag } from '../../physical/selection-box-drag';\nimport './styles.scss';\n\n/**\n * This class is used to create a selection box which is used by visual unit for brushing and\n * selection in the canvas.\n * @class SelectionBox\n */\n/* istanbul ignore next */ class SelectionBox extends SpawnableSideEffect {\n static formalName () {\n return SELECTIONBOX;\n }\n\n /**\n * It returns the default configuration needed by selectionbox.\n * @return {Object} Default configuration of the selection box.\n */\n static defaultConfig () {\n return {\n className: 'legend-selection-box',\n classPrefix: CLASSPREFIX\n };\n }\n\n /**\n * Draws the selectionbox with the specified dimensions.\n */\n /* istanbul ignore next */ apply (selectionSet, payload) {\n let x;\n let y;\n let width;\n let height;\n const firebolt = this.firebolt;\n const context = firebolt.context;\n const config = this.config();\n const axis = context.axis().source();\n const className = `${config.classPrefix}-${config.className}`;\n\n const domain = payload.criteria[firebolt.context.fieldName()];\n const axisScale = axis.scale();\n const range = domain ? [axis.getScaleValue(domain[0]), axis.getScaleValue(domain[1])] : [];\n\n const axisType = context.config().align === HORIZONTAL ? 'x' : 'y';\n\n const gradientDimension = firebolt.context.measurement().gradientDimensions[axisType === 'x' ?\n HEIGHT : WIDTH];\n\n const rangeShifter = axisScale.range()[axisType === 'x' ? 0 : 1];\n const legendGradContainer = context.getDrawingContext().svgContainer;\n const legendSelGroup = makeElement(legendGradContainer, 'g', [1], `${config.classPrefix}-selection-box-group`);\n\n if (firebolt.context.config().align === HORIZONTAL) {\n x = range[0] - rangeShifter || 0;\n y = 0;\n width = range[1] - range[0] || 0;\n height = gradientDimension;\n } else {\n x = 0;\n y = range[1] - rangeShifter || 0;\n height = range[0] - range[1] || 0;\n width = gradientDimension;\n }\n const enterFn = function (el) {\n selectionBoxDrag(firebolt)(el, ['brush']);\n };\n const selBox = makeElement(legendSelGroup, RECT, [{ domain, x, y, width, height }], className,\n { enter: enterFn });\n selBox.attr('y', y)\n .attr('x', x)\n .attr(WIDTH, width)\n .attr(HEIGHT, height);\n }\n}\n\nexport default SelectionBox;\n\n","import { selectElement } from 'muze-utils';\n\nexport const strategies = (firebolt) => {\n const context = firebolt.context;\n const classed = (set, className, change) => {\n const classPrefix = context.config().classPrefix;\n selectElement(context.mount())\n .selectAll(`.${classPrefix}-legend-columns`)\n .filter(d => set.uids.indexOf(d.id) !== -1)\n .selectAll('div')\n .classed(className, change);\n };\n\n return {\n fade: (set, config = {}) => {\n const classPrefix = context.config().classPrefix;\n if (!set.mergedEnter.length && !set.mergedExit.length) {\n classed(set.completeSet, config.className || `${classPrefix}-legend-fadeout`, false);\n } else {\n classed(set.mergedExit, config.className || `${classPrefix}-legend-brighten`, false);\n classed(set.mergedExit, config.className || `${classPrefix}-legend-fadeout`, true);\n classed(set.mergedEnter, config.className || `${classPrefix}-legend-fadeout`, false);\n }\n },\n brighten: (set, config = {}) => {\n const classPrefix = context.config().classPrefix;\n if (!set.mergedEnter.length && !set.mergedExit.length) {\n classed(set.completeSet, config.className || `${classPrefix}-legend-brighten`, false);\n } else {\n classed(set.mergedEnter, config.className || `${classPrefix}-legend-brighten`, true);\n classed(set.mergedExit, config.className || `${classPrefix}-legend-brighten`, false);\n }\n }\n };\n};\n","import { GenericSideEffect } from '@chartshq/muze-firebolt';\nimport { strategies } from './strategies';\nimport { Highlighter } from '../../../enums/side-effects';\n\nexport default class LegendHighlighter extends GenericSideEffect {\n constructor (...params) {\n super(...params);\n this._strategies = strategies(this.firebolt);\n this._strategy = 'brighten';\n }\n\n static formalName () {\n return Highlighter;\n }\n\n apply (selectionSet, payload, options = {}) {\n const strategy = this._strategies[options.strategy || this._strategy];\n\n strategy(selectionSet, this);\n }\n}\n","import { mergeRecursive } from 'muze-utils';\n\nexport const PROPS = {\n config: {\n sanitization: (context, value) => mergeRecursive(context._config || {}, value)\n },\n data: {},\n fieldName: {},\n legendContainer: {},\n measurement: {\n sanitization: (context, value) => {\n const measurement = mergeRecursive(context._measurement, value);\n ['padding', 'border', 'margin'].forEach((space) => {\n measurement[space] = Math.min(measurement[space] > 0 ? measurement[space] : 0,\n measurement.maxWidth * 0.1, measurement.maxHeight * 0.1);\n });\n return measurement;\n }\n },\n logicalSpace: {},\n metaData: {},\n range: {\n sanitization: (context, value) => {\n context.scale().range(value);\n context.resetLogicalSpace();\n context.store().commit('range', value);\n return value;\n }\n },\n scale: {},\n smartTicks: {},\n store: {},\n title: {\n sanitization: (context, value) => mergeRecursive(context._title || {}, value)\n }\n};\n","import { getSymbol } from 'muze-utils';\nimport {\n CENTER,\n LEFT,\n RIGHT\n} from '../enums/constants';\n\nexport const ALIGN = {\n HORIZONTAL: 'horizontal',\n VERTICAL: 'vertical'\n};\n\nexport const DEFAULT_MEASUREMENT = {\n height: 30,\n width: 30,\n maxWidth: Infinity,\n maxHeight: Infinity,\n padding: 2,\n margin: 2,\n border: 1\n};\n\nexport const LEGEND_TITLE = {\n text: '',\n orientation: (pos) => {\n if (pos === LEFT || pos === RIGHT) {\n return LEFT;\n } return CENTER;\n }\n};\n\nexport const DEFAULT_CONFIG = {\n classPrefix: 'muze',\n borderStyle: 'solid',\n borderColor: 'rgba(0,0,0,0)',\n formatter: {\n bounds: {\n lower: 'less than',\n upper: 'more than'\n }\n },\n item: {\n text: {\n orientation: 'right',\n width: 10,\n formatter: val => val\n },\n icon: {\n className: 'legend-icon',\n height: 20,\n width: 20,\n color: 'rgba(0,0,0,.5)',\n type: 'square'\n }\n }\n};\n\n/**\n * Creates a map of pre defined icons\n *\n * @param {string} icon Accepts a icon name like 'square', 'cross', 'diamond' etc\n * @return {Object} icon object which can be used to draw the icons\n */\nexport const ICON_MAP = (icon) => {\n if (icon && typeof (icon) === 'string') {\n return getSymbol(icon);\n } return icon;\n};\n","import { makeElement, numberInterpolator } from 'muze-utils';\n\nimport {\n SCALE_FUNCTIONS,\n WIDTH,\n HEIGHT,\n LEFT,\n RIGHT,\n TOP,\n BOTTOM\n} from '../enums/constants';\n\n/**\n *\n *\n * @param {*} scale\n * @returns\n */\nexport const getScaleInfo = (scale) => {\n const scaleType = scale.constructor.type();\n const domain = scale.uniqueValues();\n const steps = scale.config().stops || 1;\n const scaleFn = SCALE_FUNCTIONS[scaleType];\n\n return { scaleType, domain, steps, scaleFn };\n};\n\n/**\n *\n *\n * @param {*} domain\n * @param {*} steps\n * @returns\n */\nexport const getInterpolatedData = (domain, steps) => {\n const domainForLegend = [];\n const interpolatedFn = numberInterpolator()(domain[0], domain[1]);\n\n for (let i = 0; i <= steps; i++) {\n domainForLegend[i] = interpolatedFn(i / steps);\n }\n return domainForLegend;\n};\n\n/**\n *\n *\n * @param {*} container\n * @param {*} text\n * @param {*} measurement\n * @param {*} classPrefix\n */\nexport const titleCreator = (container, title, measurement, config) => {\n const titleContainer = makeElement(container, 'table', [1], `${config.classPrefix}-legend-title`)\n .style(WIDTH, `${measurement.width}px`)\n .style(HEIGHT, `${measurement.height}px`)\n .style('border-bottom', `${measurement.border}px ${config.borderStyle} ${config.borderColor}`)\n .style('text-align', title.orientation instanceof Function ?\n title.orientation(config.position) : title.orientation);\n return makeElement(titleContainer, 'td', [1], `${config.classPrefix}-legend-title-text`)\n .style(WIDTH, `${measurement.width}px`)\n .style(HEIGHT, '100%')\n .style('padding', `${measurement.padding}px`)\n .text(title.text)\n .node();\n};\n\n /**\n *\n *\n * @param {*} data\n * @param {*} prop\n * @param {*} labelManager\n * @return\n */\nexport const getMaxMeasures = (data, prop, labelManager) => {\n let maxHeight = -Infinity;\n let maxWidth = -Infinity;\n\n data.forEach((item) => {\n const value = prop ? item[prop] : item;\n const space = labelManager.getOriSize(value);\n maxHeight = Math.max(space.height + 2, maxHeight);\n maxWidth = Math.max(space.width + 2, maxWidth);\n });\n\n return { height: maxHeight, width: maxWidth };\n};\n\n/**\n *\n *\n * @param {*} data\n * @param {*} prop\n * @param {*} labelManager\n * @return\n */\nexport const getItemMeasures = (data, prop, labelManager, formatter) => {\n const space = [];\n\n data.forEach((item, index) => {\n const value = prop ? item[prop] : item;\n const { height, width } = labelManager.getOriSize(formatter(value));\n space[index] = { height: height + 1, width: width + 1 };\n });\n return space;\n};\n\n/**\n *\n *\n * @param {*} textOrientation\n * @param {*} effPadding\n * @param {*} titleSpace\n * @return\n * @memberof Legend\n */\nexport const computeItemSpaces = (config, measures, data) => {\n let totalHeight = 0;\n let totalWidth = 0;\n let maxItemSpaces = {\n width: 0, height: 0\n };\n const {\n effPadding,\n titleWidth,\n labelSpaces,\n titleHeight,\n maxWidth\n } = measures;\n const {\n item,\n align\n } = config;\n const {\n icon,\n text\n } = item;\n const textOrientation = text.orientation;\n const itemSpaces = [];\n const iconSpaces = [];\n let maxIconWidth = 0;\n labelSpaces.forEach((labelSpace, i) => {\n const itemSpace = { width: 0, height: 0 };\n const iconSpace = { width: 0, height: 0 };\n const datum = data[i] || {};\n // Compute each legend item height/width\n if (textOrientation === LEFT || textOrientation === RIGHT) {\n // Get label, icon and item widths\n labelSpace.width += effPadding;\n iconSpace.width = (datum.size ? 2 * Math.sqrt(datum.size / Math.PI) : icon.width) + effPadding;\n maxIconWidth = Math.max(iconSpace.width, maxIconWidth);\n itemSpace.width = labelSpace.width + maxIconWidth;\n\n // Get label, icon and item heights\n labelSpace.height = Math.max(labelSpace.height, icon.height) + effPadding;\n iconSpace.height = labelSpace.height;\n itemSpace.height = labelSpace.height;\n } else {\n // Get label, icon and item widths\n labelSpace.width = Math.max(labelSpace.width, datum.size ? 2 * Math.sqrt(datum.size / Math.PI)\n : icon.width) + effPadding;\n iconSpace.width = labelSpace.width;\n itemSpace.width = labelSpace.width;\n maxIconWidth = Math.max(iconSpace.width, maxIconWidth);\n\n // Get label, icon and item heights\n labelSpace.height += effPadding;\n iconSpace.height = icon.height + effPadding;\n itemSpace.height = labelSpace.height + iconSpace.height;\n }\n // Compute height and width of legend for each alignment\n if (align === 'horizontal') {\n totalHeight = Math.max(totalHeight, itemSpace.height);\n } else {\n totalHeight += itemSpace.height;\n totalWidth = Math.max(totalWidth, itemSpace.width, titleWidth) + effPadding;\n }\n maxItemSpaces = {\n width: Math.max(itemSpace.width, maxItemSpaces.width),\n height: Math.max(itemSpace.height, maxItemSpaces.height)\n };\n itemSpaces.push(itemSpace);\n iconSpaces.push(iconSpace);\n });\n itemSpaces.forEach((itemSpace, i) => {\n if (align === 'horizontal') {\n itemSpace.height = totalHeight;\n iconSpaces[i].width = maxIconWidth;\n if (textOrientation === LEFT || textOrientation === RIGHT) {\n labelSpaces[i].height = totalHeight;\n iconSpaces[i].height = totalHeight;\n itemSpaces[i].width = labelSpaces[i].width + maxIconWidth;\n } else {\n labelSpaces[i].width = maxIconWidth;\n itemSpaces[i].width = maxIconWidth;\n labelSpaces[i].width = maxIconWidth;\n }\n totalWidth = Math.max(totalWidth + itemSpaces[i].width);\n } else {\n itemSpace.width = Math.max(totalWidth, maxWidth);\n if (textOrientation === TOP || textOrientation === BOTTOM) {\n labelSpaces[i].width = totalWidth;\n iconSpaces[i].width = totalWidth;\n maxIconWidth = totalWidth;\n } else {\n iconSpaces[i].width = maxIconWidth;\n itemSpaces[i].width = labelSpaces[i].width + maxIconWidth;\n labelSpaces[i].width = maxItemSpaces.width - maxIconWidth;\n totalWidth = Math.max(totalWidth, itemSpace.width) + effPadding;\n }\n }\n });\n totalWidth = Math.max(totalWidth, titleWidth);\n totalHeight += titleHeight + effPadding;\n\n return { totalHeight, totalWidth, itemSpaces, iconSpaces, maxItemSpaces, maxIconWidth };\n};\n\n/**\n *\n *\n * @param {*} type\n * @param {*} scaleInfo\n * @param {*} domainInfo\n * @returns\n */\nexport const getDomainBounds = (type, scaleInfo, domainInfo) => {\n const {\n scaleFn,\n scaleType,\n scale\n } = scaleInfo;\n const {\n domain,\n domainBounds,\n domainLeg,\n steps\n } = domainInfo;\n const ele = domain[type === 'lower' ? 0 : domain.length - 1];\n const step = steps[type === 'lower' ? 0 : steps.length - 1];\n\n return {\n [scaleType]: scaleType === 'size' ? scale[scaleFn](ele) * scale.getScaleFactor() : scale[scaleFn](ele),\n value: domainBounds[type],\n id: type === 'lower' ? 0 : domainLeg.length + 2,\n range: [ele, step]\n };\n};\n","import {\n makeElement,\n selectElement,\n getUniqueId,\n getSmartComputedStyle,\n generateGetterSetters,\n mergeRecursive\n} from 'muze-utils';\nimport { behaviouralActions } from '@chartshq/muze-firebolt';\nimport * as legendBehaviours from '../firebolt/behavioural';\n\nimport { LegendFireBolt } from '../firebolt/legend-firebolt';\nimport { actionBehaviourMap } from '../firebolt/action-behaviour-map';\nimport { physicalActions } from '../firebolt/physical';\nimport * as sideEffects from '../firebolt/side-effects';\nimport { behaviourEffectMap } from '../firebolt/behaviour-effect-map';\nimport { VALUE, PATH } from '../enums/constants';\nimport { PROPS } from './props';\nimport { DEFAULT_MEASUREMENT, DEFAULT_CONFIG, LEGEND_TITLE } from './defaults';\nimport { getItemMeasures, titleCreator, computeItemSpaces } from './legend-helper';\n\n/**\n * Creates a Legend from the axes of a canvas\n *\n * @param {Object} dependencies : legend data\n * @class SimpleLegend\n */\nexport default class SimpleLegend {\n\n /**\n * Creates an instance of Legend.\n * @param {Object} dependencies Set of dependencies required by the legend\n * @memberof Legend\n */\n constructor (dependencies) {\n this._data = [];\n this._metaData = [];\n this._mount = null;\n this._fieldName = null;\n this._title = Object.assign({}, LEGEND_TITLE);\n this._metaData = null;\n this._labelManager = dependencies.labelManager;\n this._cells = dependencies.cells;\n this._id = getUniqueId();\n this._measurement = Object.assign({}, this.constructor.defaultMeasurement());\n this._config = mergeRecursive({}, this.constructor.defaultConfig());\n\n generateGetterSetters(this, PROPS);\n this._computedStyle = getSmartComputedStyle(selectElement('body'),\n `${this.config().classPrefix}-legend-item-info`);\n\n this._firebolt = new LegendFireBolt(this, {\n behavioural: Object.assign({}, behaviouralActions, legendBehaviours),\n physical: physicalActions,\n physicalBehaviouralMap: actionBehaviourMap\n }, sideEffects, behaviourEffectMap);\n }\n\n id () {\n return this._id;\n }\n /**\n * Initializes an instance of the class\n *\n * @static\n * @param {Object} dependencies Set of dependencies required by the legend\n * @return {Instance} returns a new instance of Legend\n * @memberof Legend\n */\n static create (dependencies) {\n return new SimpleLegend(dependencies);\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof SimpleLegend\n */\n static defaultConfig () {\n return DEFAULT_CONFIG;\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof SimpleLegend\n */\n static defaultMeasurement () {\n return DEFAULT_MEASUREMENT;\n }\n\n /**\n *\n *\n * @readonly\n * @memberof SimpleLegend\n */\n firebolt (...params) {\n if (params.length) {\n return this;\n }\n return this._firebolt;\n }\n\n /**\n *\n *\n * @return\n * @memberof Legend\n */\n elemType () {\n return PATH;\n }\n\n canvasAlias (...alias) {\n if (alias.length) {\n this._canvasAlias = alias[0];\n return this;\n }\n return this._canvasAlias;\n }\n\n /**\n *\n *\n * @return\n * @memberof Legend\n */\n mount (...params) {\n if (params.length) {\n this._mount = params[0];\n this.render();\n return this;\n }\n return this._mount;\n }\n\n /**\n *\n *\n * @param {*} effPadding\n * @param {*} align\n * @return\n * @memberof Legend\n */\n getLabelSpaces () {\n const {\n item,\n classPrefix\n } = this.config();\n this._labelManager.setStyle(getSmartComputedStyle(selectElement('body'),\n `${classPrefix}-legend-item-info`));\n return getItemMeasures(this.data(), VALUE, this._labelManager, item.text.formatter);\n }\n\n /**\n * Sets the height and width of a legend based on provided max\n * height and width and based on its contents\n *\n * @return {Instance} Current instance\n * @memberof Legend\n */\n setLegendMeasures () {\n const {\n width,\n height,\n maxWidth,\n maxHeight,\n padding,\n margin,\n border\n } = this.measurement();\n const {\n align\n } = this.config();\n\n // Effective padding, margin and padding\n const effPadding = padding * 2;\n const effBorder = border * 2;\n const effMargin = margin * 2;\n\n this.data(this.dataFromScale(this.scale()));\n // Get space occupied by title\n const titleSpace = this.getTitleSpace();\n const titleHeight = titleSpace.height > 0 ? titleSpace.height + effPadding : 0;\n const titleWidth = titleSpace.width + effPadding;\n\n // Get space occupied by labels\n const labelSpaces = this.getLabelSpaces(effPadding, align);\n\n const {\n totalHeight, totalWidth, itemSpaces, iconSpaces, maxItemSpaces, maxIconWidth\n } = computeItemSpaces(this.config(),\n { effPadding, titleWidth, labelSpaces, titleHeight, maxWidth, maxHeight }, this.data());\n\n this.measurement({\n width: Math.max(totalWidth, width) + effMargin + effBorder,\n height: Math.max(totalHeight, height) + effMargin + effBorder,\n labelSpaces,\n iconSpaces,\n itemSpaces,\n maxItemSpaces,\n maxIconWidth,\n titleSpaces: {\n width: Math.min(maxWidth, this.measurement().width) - effMargin - effBorder,\n height: titleHeight\n }\n });\n return this;\n }\n\n /**\n * Returns the space occupied by the legend title\n *\n * @return {Object} Space occupied by title\n * @memberof Legend\n */\n getTitleSpace () {\n this._labelManager.setStyle(getSmartComputedStyle(selectElement('body'),\n `${this.config().classPrefix}-legend-title`));\n return this._labelManager.getOriSize(this.title().text ? this.title().text : '');\n }\n\n /**\n * Creates the title for the legend\n *\n * @param {DOM} container Container made for the title\n * @return {Selection} Title and it's node\n * @memberof Legend\n */\n renderTitle (container) {\n const { titleSpaces, border, padding, width } = this.measurement();\n const { borderStyle, borderColor } = this.config();\n return titleCreator(container, this.title(), {\n height: titleSpaces.height,\n width,\n border,\n padding,\n borderStyle,\n borderColor\n }, this.config());\n }\n\n /**\n * Render the legend with its title\n *\n * @param {DOM} mountPoint Point where the legend and title are to be appended\n * @return {Instance} Current instance of legend\n * @memberof Legend\n */\n render () {\n const firebolt = this.firebolt();\n const {\n classPrefix,\n borderStyle,\n borderColor\n } = this.config();\n const {\n maxWidth,\n maxHeight,\n width,\n height,\n margin,\n border\n } = this.measurement();\n const legendContainer = makeElement(selectElement(this.mount()), 'div', [1], `${classPrefix}-legend-box`);\n\n legendContainer.classed(`${classPrefix}-legend-box-${this._id}`, true);\n legendContainer.style('float', 'left');\n // set height and width\n legendContainer.style('width', `${Math.min(maxWidth, width) - margin * 2}px`)\n .style('height', `${Math.min(maxHeight, height) - margin * 2}px`)\n .style('margin', `${margin}px`)\n .style('border', `${border}px ${borderStyle} ${borderColor}`);\n this.legendContainer(legendContainer.node());\n\n // create title\n this.renderTitle(legendContainer);\n firebolt.createSelectionSet(this.data().map(d => d.id));\n return legendContainer;\n }\n /**\n *\n *\n * @param {*} data\n * @returns\n * @memberof StepLegend\n */\n getCriteriaFromData (data) {\n const fieldName = this.fieldName();\n const type = this.metaData().getData().schema[0].type;\n if (type === 'measure') {\n return {\n [fieldName]: data.range\n };\n }\n return [[fieldName], [data.value]];\n }\n}\n","import {\n LEFT,\n RIGHT,\n START,\n END,\n TOP,\n BOTTOM,\n HORIZONTAL,\n VERTICAL,\n CENTER,\n SHAPE,\n VALUE\n} from '../enums/constants';\n\nconst legendOrientation = {\n [HORIZONTAL]: {\n datasets: data => ({\n row: [1],\n column: data\n }),\n itemContainerMeasures: (measurement) => {\n const {\n itemSpaces,\n width\n } = measurement;\n return {\n row: {\n width: `${width}px`,\n padding: `${0}px`\n },\n column: {\n width: (d, i) => `${itemSpaces[i].width}px`,\n padding: `${0}px`\n }\n };\n },\n getStepSpacesInfo: (measurement) => {\n const { maxItemSpaces, height } = measurement;\n return {\n iconHeight: height,\n iconWidth: maxItemSpaces.width,\n stepPadding: {\n horizontal: true,\n vertical: false\n }\n };\n }\n },\n [VERTICAL]: {\n datasets: data => ({\n row: data,\n column: d => [d]\n }),\n itemContainerMeasures: (measurement, config) => {\n const {\n width\n } = measurement;\n const { padding } = config;\n return {\n row: {\n width: `${width}px`,\n padding: `${padding}px`\n },\n column: {\n width: `${width}px`,\n padding: `${0}px`\n }\n };\n },\n getStepSpacesInfo: (measurement) => {\n const { maxItemSpaces, width } = measurement;\n return {\n iconHeight: maxItemSpaces.height,\n iconWidth: width,\n stepPadding: {\n horizontal: false,\n vertical: true\n }\n };\n }\n }\n};\n\nexport const positionConfig = {\n [LEFT]: legendOrientation[VERTICAL],\n [RIGHT]: legendOrientation[VERTICAL],\n [TOP]: legendOrientation[HORIZONTAL],\n [BOTTOM]: legendOrientation[HORIZONTAL]\n};\n\nexport const alignmentMap = {\n [LEFT]: END,\n [RIGHT]: START,\n [TOP]: CENTER,\n [BOTTOM]: CENTER\n};\n\n// Reverses data for step legend\nexport const stepData = data => ({\n [LEFT]: data.reverse(),\n [RIGHT]: data.reverse(),\n [TOP]: data,\n [BOTTOM]: data\n});\n\n// Changes the item layout based on the position of the text\nexport const itemStack = {\n [LEFT]: [VALUE, SHAPE],\n [RIGHT]: [SHAPE, VALUE],\n [TOP]: [VALUE, SHAPE],\n [BOTTOM]: [SHAPE, VALUE]\n};\n","import { makeElement, selectElement, applyStyle } from 'muze-utils';\nimport { ICON_MAP } from './defaults';\nimport { positionConfig, alignmentMap, itemStack } from './position-config';\nimport {\n WIDTH,\n HEIGHT,\n CENTER,\n VALUE,\n RECT,\n LEFT,\n RIGHT\n} from '../enums/constants';\n\n/**\n *\n *\n * @param {*} container\n * @param {*} data\n * @param {*} legendInstance\n * @param {*} align\n * @return\n */\nexport const getItemContainers = (container, data, legendInstance) => {\n const measurement = legendInstance.measurement();\n const config = legendInstance.config();\n const {\n itemSpaces\n } = measurement;\n const {\n classPrefix,\n position\n } = config;\n const positionObj = positionConfig[position];\n const datasets = positionObj.datasets(data);\n const measures = positionObj.itemContainerMeasures(measurement, config);\n\n const rows = makeElement(container, 'div', datasets.row, `${classPrefix}-legend-row`);\n rows.style(HEIGHT, (d, i) => `${itemSpaces[i].height}px`);\n rows.style(WIDTH, measures.row.width);\n rows.style('padding', measures.row.padding);\n\n const columns = makeElement(rows, 'div', datasets.column, `${classPrefix}-legend-columns`);\n columns.style(WIDTH, measures.column.width);\n columns.style('padding', measures.column.padding);\n\n return columns;\n};\n\n/**\n *\n *\n * @param {*} container\n * @param {*} classPrefix\n * @param {*} data\n * @returns\n * @memberof DiscreteLegend\n */\nexport const createLegendSkeleton = (context, container, classPrefix, data) => {\n let gradWidth = 0;\n let gradHeight = 0;\n let maxGradHeight = 0;\n let maxGradWidth = 0;\n const measurement = context.measurement();\n const {\n margin,\n border,\n titleSpaces,\n width,\n height,\n maxWidth,\n maxHeight\n } = measurement;\n\n gradHeight = height - (titleSpaces.height + 2 * margin + 2 * border);\n gradWidth = width - (margin * 2 + border * 2);\n\n maxGradHeight = maxHeight - (titleSpaces.height + margin * 2 + border * 2);\n maxGradWidth = maxWidth - (margin * 2 + border * 2);\n\n let legendBody = makeElement(container, 'div', [1], `${classPrefix}-legend-body`);\n legendBody.select(`.${classPrefix}-legend-overflow`).remove();\n // Create a div with scroll when overflow\n if (maxGradWidth && maxGradWidth < gradWidth) {\n legendBody = legendBody.style(WIDTH, `${maxGradWidth}px`).style('overflow-x', 'scroll');\n }\n // Create a div with scroll when overflow\n if (maxGradHeight && maxGradHeight < gradHeight) {\n legendBody.style(HEIGHT, `${maxGradHeight}px`).style('overflow-y', 'scroll');\n }\n\n legendBody = makeElement(legendBody, 'div', [1], `${classPrefix}-legend-overflow`);\n\n legendBody.style(WIDTH, `${gradWidth}px`);\n legendBody.style(HEIGHT, `${gradHeight}px`);\n\n const legendItem = getItemContainers(legendBody, data, context);\n return { legendItem };\n};\n\n/**\n * Creates legend item based on alignment and text orientation\n *\n * @param {Selection} container Point where items are to be mounted\n * @return {Instance} Current instance\n * @memberof Legend\n */\nexport const createItemSkeleton = (context, container) => {\n const {\n classPrefix,\n item\n } = context.config();\n const textOrientation = item.text.orientation;\n\n const stack = itemStack[textOrientation];\n const itemSkeleton = makeElement(container, 'div', (d, i) => stack.map(e => [e, d[e], d.color, d.size,\n d.value, context.fieldName(), i]), `${classPrefix}-legend-item-info`);\n\n const alignClass = alignmentMap[textOrientation];\n\n itemSkeleton.classed(alignClass, true);\n return { itemSkeleton };\n};\n\n/**\n *\n *\n * @param {*} measureType\n * @param {*} stepColorCheck\n */\nexport const applyItemStyle = (item, measureType, stepColorCheck, context) => {\n const {\n padding,\n labelSpaces,\n iconSpaces,\n maxIconWidth\n } = context.measurement();\n const diff = stepColorCheck ? -padding * 2 : 0;\n\n if (item[0] === VALUE) {\n return `${labelSpaces[item[6]][measureType]}px`;\n }\n return `${measureType === 'width' && !stepColorCheck ? maxIconWidth : iconSpaces[item[6]][measureType] - diff}px`;\n};\n\n/**\n *\n *\n * @param {*} str\n * @returns\n */\nconst checkPath = (str) => {\n if (/^[mzlhvcsqta]\\s*[-+.0-9][^mlhvzcsqta]+/i.test(str) && /[\\dz]$/i.test(str) && str.length > 4) {\n return true;\n }\n return false;\n};\n\n/**\n *\n *\n * @param {*} d\n * @param {*} elem\n */\nconst createShape = function (d, elem, defaultIcon, width, height) {\n const groupElement = elem;\n // const { shape, size, update } = d;\n const size = d[3] || Math.min(width, height) * Math.PI;\n const shape = d[1] || defaultIcon;\n\n if (shape instanceof Promise) {\n shape.then((res) => {\n d.shape = res;\n return createShape(d, elem);\n });\n } else if (shape instanceof Element) {\n let newShape = shape.cloneNode(true);\n\n if (newShape.nodeName.toLowerCase() === 'img') {\n const src = newShape.src || newShape.href;\n newShape = document.createElementNS('http://www.w3.org/2000/svg', 'image');\n newShape.setAttribute('href', src);\n }\n const shapeElement = selectElement(newShape);\n shapeElement.attr('transform', `scale(${size / 100})`);\n return selectElement(groupElement.node().appendChild(newShape));\n } else if (typeof shape === 'string') {\n let pathStr;\n if (checkPath(shape)) {\n pathStr = shape;\n } else {\n pathStr = ICON_MAP(shape).size(size)();\n }\n return makeElement(groupElement, 'path', data => [data]).attr('d', pathStr);\n }\n d[1] = 'circle';\n return createShape(d, elem, 'circle');\n};\n\n/**\n * Returns the icon of the legend item\n *\n * @param {Object} datum Data property attached to the item\n * @param {number} width width of the item\n * @param {number} height height of the item\n * @return {Object|string} returns the path string or the string name of the icon\n * @memberof Legend\n */\nexport const getLegendIcon = (datum, width, height, defaultIcon) => {\n const icon = ICON_MAP(datum[1]);\n\n if (icon) {\n return icon.size(datum[3] || Math.min(width, height) * Math.PI);\n }\n return ICON_MAP(datum[3] ? 'circle' : defaultIcon).size(datum[3] || Math.min(width, height) * Math.PI);\n};\n\n/**\n *\n *\n */\nexport const renderIcon = (icon, container, datum, context) => {\n const {\n classPrefix,\n iconHeight,\n iconWidth,\n maxIconWidth,\n padding,\n color\n } = context;\n const svg = makeElement(container, 'svg', f => [f], `${classPrefix}-legend-icon-svg`)\n .attr(WIDTH, maxIconWidth)\n .attr(HEIGHT, iconHeight)\n .style(WIDTH, `${maxIconWidth}px`)\n .style(HEIGHT, `${iconHeight}px`);\n\n if (icon !== RECT) {\n const group = makeElement(svg, 'g', [datum[1]], `${classPrefix}-legend-icon`);\n createShape(datum, group, datum[3] ? 'circle' : 'square', iconWidth, iconHeight)\n .attr('transform', `translate(${maxIconWidth / 2 - padding} ${iconHeight / 2})`)\n .attr('fill', datum[2] || color);\n } else {\n makeElement(svg, RECT, [datum[1]], `${classPrefix}-legend-icon`)\n .attr('x', 0)\n .attr('y', 0)\n .attr(WIDTH, maxIconWidth)\n .attr(HEIGHT, iconHeight)\n .attr('fill', datum[2] || color);\n }\n};\n\n/**\n * Renders the items in the legend i.e, icon and text\n *\n * @param {DOM} container Point where item is to be mounted\n * @memberof Legend\n */\nexport const renderDiscreteItem = (context, container) => {\n const labelManager = context._labelManager;\n const {\n item,\n classPrefix\n } = context.config();\n const {\n maxIconWidth,\n padding\n } = context.measurement();\n const {\n width: iconWidth,\n height: iconHeight,\n color,\n className\n } = item.icon;\n\n const textOrientation = item.text.orientation;\n const formatter = item.text.formatter;\n\n labelManager.useEllipsesOnOverflow(true);\n applyStyle(container, {\n width: d => applyItemStyle(d, WIDTH, false, context),\n height: d => applyItemStyle(d, HEIGHT, false, context),\n 'text-align': CENTER,\n padding: `${padding}px`\n });\n\n labelManager.setStyle(context._computedStyle);\n container.each(function (d, i) {\n if (d[0] === VALUE) {\n selectElement(this).text(formatter(d[1]))\n .style(`padding-${textOrientation === RIGHT ? LEFT : RIGHT}`, '0px');\n } else {\n // const icon = getLegendIcon(d, iconWidth, iconHeight, type);\n selectElement(this).classed(`${classPrefix}-${className}`, true);\n selectElement(this).classed(`${classPrefix}-${className}-${i}`, true);\n renderIcon('circle', selectElement(this), d, {\n classPrefix,\n iconWidth,\n // iconWidth: 2 * Math.sqrt(d[3] / Math.PI) || iconWidth,\n iconHeight,\n maxIconWidth,\n padding,\n color\n });\n }\n });\n};\n\n/**\n* Renders the items in the legend i.e, icon and text\n*\n* @param {DOM} container Point where item is to be mounted\n* @memberof Legend\n*/\nexport const renderStepItem = (context, container) => {\n const labelManager = context._labelManager;\n const {\n item,\n position,\n classPrefix\n } = context.config();\n const {\n maxItemSpaces,\n maxIconWidth,\n padding\n } = context.measurement();\n const {\n width,\n height,\n color\n } = item.icon;\n const {\n formatter\n } = item.text;\n\n labelManager.useEllipsesOnOverflow(true);\n const { iconHeight, iconWidth, stepPadding } = positionConfig[position].getStepSpacesInfo({\n maxItemSpaces, height, width\n });\n\n applyStyle(container, {\n width: d => applyItemStyle(d, WIDTH, stepPadding.horizontal, context),\n height: d => applyItemStyle(d, HEIGHT, stepPadding.vertical, context),\n 'text-align': 'center',\n padding: `${padding}px`\n });\n\n labelManager.setStyle(context._computedStyle);\n container.each(function (d) {\n if (d[0] === VALUE) {\n selectElement(this).text(formatter(d[1]));\n } else {\n renderIcon(RECT, selectElement(this), d, {\n classPrefix,\n iconWidth,\n iconHeight,\n maxIconWidth,\n color\n });\n }\n });\n};\n","import SimpleLegend from './simple-legend';\nimport { DISCRETE, LEFT, SIZE } from '../enums/constants';\nimport { getScaleInfo } from './legend-helper';\nimport { createLegendSkeleton, createItemSkeleton, renderDiscreteItem } from './renderer';\nimport '../styles.scss';\n\n/**\n * Creates a Legend from the axes of a canvas\n *\n * @param {Object} dependencies : legend data\n * @class Legend\n */\nexport default class DiscreteLegend extends SimpleLegend {\n\n /**\n * Initializes an instance of the class\n *\n * @static\n * @param {Object} dependencies Set of dependencies required by the legend\n * @return {Instance} returns a new instance of Legend\n * @memberof Legend\n */\n static create (dependencies) {\n return new DiscreteLegend(dependencies);\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof DiscreteLegend\n */\n static type () {\n return DISCRETE;\n }\n\n /**\n *\n *\n * @param {*} scale\n * @returns\n * @memberof DiscreteLegend\n */\n dataFromScale (scale) {\n const { scaleType, domain, scaleFn } = getScaleInfo(scale);\n let domainForLegend = [...new Set(domain)];\n const type = this.metaData().getData().schema[0].type;\n\n domainForLegend = domainForLegend.map((ele, i) => {\n let value = 0;\n let range = 0;\n if (type === 'measure') {\n value = (+domainForLegend[i]).toFixed(0);\n const nextVal = domainForLegend[i + 1] ? +domainForLegend[i + 1] : +value;\n range = [value, nextVal.toFixed(0)];\n } else {\n value = domainForLegend[i];\n range = [domainForLegend[i]];\n }\n return {\n [scaleType]: scale[scaleFn](ele),\n value,\n id: i,\n range\n };\n }).filter(d => d.value !== null);\n\n domainForLegend = scaleType === SIZE ? domainForLegend.sort((a, b) => a[scaleType] - b[scaleType])\n : domainForLegend;\n return domainForLegend;\n }\n\n /**\n * Render the legend with its title\n *\n * @param {DOM} mountPoint Point where the legend and title are to be appended\n * @return {Instance} Current instance of legend\n * @memberof Legend\n */\n render () {\n const firebolt = this.firebolt();\n const data = this.data();\n const { classPrefix } = this.config();\n const legendContainer = super.render(this.mount());\n // create Legend\n const { legendItem } = createLegendSkeleton(this, legendContainer, classPrefix, data);\n const { itemSkeleton } = createItemSkeleton(this, legendItem);\n renderDiscreteItem(this, itemSkeleton);\n legendContainer.selectAll('div').style('float', LEFT);\n firebolt.mapActionsAndBehaviour();\n firebolt.createSelectionSet(this.data().map(d => d.id));\n return legendContainer;\n }\n}\n","import { makeElement, applyStyle } from 'muze-utils';\nimport { ContinousAxis } from '@chartshq/muze-axis';\nimport { BOTTOM, RIGHT } from '../enums/constants';\nimport { ALIGN } from './defaults';\nimport '../styles.scss';\n\n/**\n *\n *\n * @param {*} data\n * @returns\n */\nexport const getGradientDomain = (data) => {\n if (typeof data[0].value === 'number') {\n return data.reduce((accumulator, currentValue) =>\n [Math.min(currentValue.value, accumulator[0]), Math.max(currentValue.value, accumulator[1])],\n [Number.MAX_VALUE, Number.MIN_VALUE]);\n }\n return data.map(e => e.value);\n};\n\n/**\n *\n *\n * @param {*} container\n * @param {*} data\n * @param {*} domain\n * @returns\n */\nexport const makeLinearGradient = (container, data, domain) => {\n const defs = makeElement(container, 'defs', [1]);\n const linearGradient = makeElement(defs, 'linearGradient', [1])\n .attr('id', 'linear-gradient')\n .attr('x1', '0%')\n .attr('y2', '0%');\n makeElement(linearGradient, 'stop', data, 'stop-gradient')\n .attr('offset', d => `${(d.value - domain[0]) * 100 / (domain[1] - domain[0])}%`)\n .attr('stop-color', d => d.color);\n return linearGradient;\n};\n\n/**\n * Creates an axis cell with a linear axis for computing space and\n * creating gradient legend\n *\n * @return {AxisCell} Instance of Axis Cell for the gradient axis\n * @memberof Legend\n */\nexport const createAxis = (context) => {\n const data = context.data();\n const { align } = context.config();\n const AxisCell = context._cells.AxisCell;\n const newAxis = new ContinousAxis({\n id: `legend-${context._id}`,\n orientation: align === ALIGN.VERTICAL ? RIGHT : BOTTOM,\n style: context._computedStyle,\n nice: false,\n showAxisName: false,\n tickValues: data.map(d => d.value),\n fixedBaseline: false\n }, { labelManager: context._labelManager });\n\n newAxis.domain(getGradientDomain(data));\n newAxis.range([1, 1]);\n return new AxisCell().source(newAxis).config({\n margin: { left: 0, bottom: 0, top: 0, right: 0 }\n });\n};\n\n/**\n *\n *\n * @param {*} container\n * @param {*} data\n * @param {*} classPrefix\n * @returns\n * @memberof GradientLegend\n */\nconst createLegendSkeleton = (container, classPrefix, data) => {\n const domain = getGradientDomain(data);\n const legendContainer = makeElement(container, 'div', [1], `${classPrefix}-legend-body`);\n const legendGradSvg = makeElement(legendContainer, 'svg', [1], `${classPrefix}-gradient`);\n const legendGradCont = makeElement(legendGradSvg, 'g', [1], `${classPrefix}-gradient-group`);\n const linearGradient = makeLinearGradient(legendGradSvg, data, domain);\n const legendRect = makeElement(legendGradCont, 'rect', [1], `${classPrefix}-gradient-rect`);\n\n return {\n legendContainer,\n legendGradCont,\n legendGradSvg,\n linearGradient,\n legendRect\n };\n};\n\n/**\n * Renders the axis for the gradient\n *\n * @param {Selection} container Point where axis is to be mounted\n * @param {number} height Height for axis\n * @param {number} width Width for axis\n * @memberof Legend\n */\nexport const renderAxis = (context, container, height, width) => {\n const axis = context.axis();\n\n axis.setAvailableSpace(width, height);\n axis.render(container.node());\n};\n\n/**\n * Renders gradient legends\n *\n * @param {Selection} container Point where the legend is to be appended\n * @memberof GradientLegend\n */\nexport const renderGradient = (context, container) => {\n let gradHeight = 0;\n let gradWidth = 0;\n const {\n align,\n classPrefix,\n item\n } = context.config();\n const data = context.data();\n // Create the skeleton for the legend\n const {\n legendContainer,\n legendGradSvg,\n legendGradCont,\n linearGradient,\n legendRect\n } = createLegendSkeleton(container, classPrefix, data);\n const labelDim = context.axis().source().getAxisDimensions().tickLabelDim;\n const {\n padding,\n margin,\n border,\n titleSpaces,\n maxHeight,\n maxWidth,\n height,\n width\n } = context.measurement();\n const gradientDimensions = {};\n\n gradHeight = Math.floor(height - (titleSpaces.height + 2 * margin + 2 * border));\n gradWidth = Math.floor(width - (margin * 2 + border * 2));\n\n if (align === ALIGN.HORIZONTAL) {\n gradientDimensions.height = item.icon.height;\n gradientDimensions.width = gradWidth - 2 * padding - labelDim.width / 2;\n linearGradient.attr('x2', '100%').attr('y1', '0%');\n legendGradCont.attr('transform', `translate( ${labelDim.width / 2} 0)`);\n renderAxis(context, legendContainer, gradHeight - item.icon.height - padding, gradWidth - 2 * padding - 1);\n legendContainer.classed(`${classPrefix}-overflow-x`, width > maxWidth);\n\n applyStyle(legendContainer, {\n height: `${height}px`,\n width: `${Math.min(width, maxWidth)}px`,\n padding: `${padding}px`\n });\n\n legendRect.attr('height', gradientDimensions.height);\n legendRect.attr('width', gradientDimensions.width - labelDim.width / 2);\n } else {\n gradientDimensions.height = gradHeight - 2 * padding - labelDim.height / 2;\n gradientDimensions.width = item.icon.width;\n linearGradient.attr('x2', '0%').attr('y1', '100%');\n legendGradCont.attr('transform', `translate(0 ${labelDim.height / 2})`);\n renderAxis(context, legendContainer, gradHeight - 2 * padding - 1, gradWidth - item.icon.width - padding * 2);\n legendContainer.classed(`${classPrefix}-overflow-y`, height > maxHeight);\n applyStyle(legendContainer, {\n height: `${Math.min(height, maxHeight)}px`,\n width: `${width}px`,\n padding: `${padding}px`\n });\n legendRect.attr('height', gradientDimensions.height - labelDim.height / 2);\n legendRect.attr('width', gradientDimensions.width);\n }\n\n // Apply Styles to the legend plot area\n applyStyle(legendGradSvg, {\n height: `${gradientDimensions.height}px`,\n width: `${gradientDimensions.width}px`\n });\n\n // Apply styles to the legend rect\n applyStyle(legendRect, {\n fill: 'url(#linear-gradient)'\n });\n legendGradSvg.attr('height', gradientDimensions.height);\n legendGradSvg.attr('width', gradientDimensions.width);\n\n context.measurement({\n gradientDimensions\n });\n context._legendGradientSvg = legendGradSvg;\n return context;\n};\n","import SimpleLegend from './simple-legend';\nimport { getScaleInfo, getInterpolatedData } from './legend-helper';\nimport { GRADIENT, LEFT, SIZE } from '../enums/constants';\nimport { renderGradient, createAxis } from './gradient-helper';\nimport '../styles.scss';\n\n/**\n * Creates a Legend from the axes of a canvas\n *\n * @param {Object} dependencies : legend data\n * @class Legend\n */\nexport default class GradientLegend extends SimpleLegend {\n\n /**\n * Initializes an instance of the class\n *\n * @static\n * @param {Object} dependencies Set of dependencies required by the legend\n * @return {Instance} returns a new instance of Legend\n * @memberof Legend\n */\n static create (dependencies) {\n return new GradientLegend(dependencies);\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof GradientLegend\n */\n static type () {\n return GRADIENT;\n }\n\n /**\n *\n *\n * @param {*} axis\n * @returns\n * @memberof GradientLegend\n */\n axis (...axis) {\n if (axis.length) {\n this._axis = axis[0];\n return this;\n }\n return this._axis;\n }\n\n /**\n *\n *\n * @param {*} scale\n * @returns\n * @memberof GradientLegend\n */\n dataFromScale (scale) {\n let domainForLegend = [];\n const { scaleType, domain, steps, scaleFn } = getScaleInfo(scale);\n\n if (steps instanceof Array) {\n if (domain[0] < steps[0]) {\n domainForLegend[0] = domain[0];\n }\n domainForLegend = [...domainForLegend, ...steps];\n if (domain[domain.length - 1] > steps[steps.length - 1]) {\n domainForLegend.push(domain[1]);\n }\n } else {\n domainForLegend = getInterpolatedData(domain, steps - 1);\n }\n domainForLegend = [...new Set(domainForLegend)].sort((a, b) => a - b);\n\n return domainForLegend.map((ele, i) => {\n const value = domainForLegend[i];\n return {\n [scaleType]: scaleType === SIZE ? scale[scaleFn](ele) * scale.getScaleFactor()\n : scale[scaleFn](Math.floor(ele)),\n value: +value.toFixed(2),\n id: i\n };\n }).filter(d => d.value !== null);\n }\n\n /**\n *\n *\n * @param {*} effPadding\n * @param {*} align\n * @return\n * @memberof Legend\n */\n getLabelSpaces (effPadding) {\n this.config({\n item: {\n text: {\n orientation: this.config().position\n }\n }\n });\n const axis = createAxis(this);\n const axisSpace = axis.getLogicalSpace();\n const space = { width: axisSpace.width - effPadding, height: axisSpace.height - effPadding };\n const axisDomainLength = axis.source().domain().length;\n const labelSpaces = new Array(axisDomainLength).fill(space);\n\n this.axis(axis);\n return labelSpaces;\n }\n\n /**\n *\n *\n * @returns\n * @memberof GradientLegend\n */\n getDrawingContext () {\n return {\n svgContainer: this._legendGradientSvg\n };\n }\n\n /**\n * Render the legend with its title\n *\n * @param {DOM} mountPoint Point where the legend and title are to be appended\n * @return {Instance} Current instance of legend\n * @memberof Legend\n */\n render () {\n const firebolt = this.firebolt();\n const legendContainer = super.render(this.mount());\n // create Legend\n renderGradient(this, legendContainer);\n legendContainer.selectAll('div').style('float', LEFT);\n firebolt.mapActionsAndBehaviour();\n firebolt.createSelectionSet(this.data().map(d => d.id));\n return legendContainer;\n }\n /**\n *\n *\n * @param {*} data\n * @returns\n * @memberof SimpleLegend\n */\n getCriteriaFromData (data) {\n return [[this.fieldName()], [data.value]];\n }\n}\n","import SimpleLegend from './simple-legend';\nimport {\n getScaleInfo,\n getInterpolatedData,\n getDomainBounds\n} from './legend-helper';\nimport {\n createLegendSkeleton,\n createItemSkeleton,\n renderStepItem\n} from './renderer';\nimport { STEP, RECT, LEFT, SIZE, UPPER, LOWER } from '../enums/constants';\nimport { stepData } from './position-config';\nimport '../styles.scss';\n\n/**\n * Creates a Legend from the axes of a canvas\n *\n * @param {Object} dependencies : legend data\n * @class Legend\n */\nexport default class StepLegend extends SimpleLegend {\n\n /**\n * Initializes an instance of the class\n *\n * @static\n * @param {Object} dependencies Set of dependencies required by the legend\n * @return {Instance} returns a new instance of Legend\n * @memberof Legend\n */\n static create (dependencies) {\n return new StepLegend(dependencies);\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof StepLegend\n */\n static type () {\n return STEP;\n }\n\n /**\n *\n *\n * @param {*} scale\n * @returns\n * @memberof StepLegend\n */\n dataFromScale (scale) {\n let domainLeg = [];\n const { scaleType, domain, steps, scaleFn } = getScaleInfo(scale);\n\n const { formatter } = this.config();\n const domainBounds = {\n lower: null, upper: null\n };\n\n if (steps instanceof Array) {\n if (domain[0] < steps[0]) {\n domainBounds.lower = [`${formatter.bounds.lower} ${steps[0]}`];\n }\n domainLeg = [...domainLeg, ...steps];\n if (domain[domain.length - 1] > steps[steps.length - 1]) {\n domainBounds.upper = [`${formatter.bounds.upper} ${steps[steps.length - 1]}`];\n }\n } else {\n domainLeg = getInterpolatedData(domain, steps);\n }\n\n domainLeg = [...new Set(domainLeg)].sort((a, b) => a - b);\n domainLeg = domainLeg.map((ele, i) => {\n let value = null;\n if (i < domainLeg.length - 1) {\n value = `${(ele.toFixed(1))} - ${(+domainLeg[i + 1].toFixed(1))}`;\n }\n return {\n [scaleType]: scaleType === SIZE ? scale[scaleFn](ele) * scale.getScaleFactor() : scale[scaleFn](ele),\n value,\n id: i + 1,\n range: [ele, domainLeg[i + 1]]\n };\n }).filter(d => d.value !== null);\n\n if (domainBounds.lower) {\n const lowerBounds = getDomainBounds(LOWER, { scale, scaleFn, scaleType },\n { domain, steps, domainBounds });\n domainLeg = [lowerBounds, ...domainLeg];\n }\n if (domainBounds.upper) {\n const upperBounds = getDomainBounds(UPPER, { scale, scaleFn, scaleType },\n { domain, steps, domainBounds, domainLeg });\n domainLeg = [...domainLeg, upperBounds];\n }\n return domainLeg;\n }\n\n /**\n *\n *\n * @param {*} effPadding\n * @param {*} align\n * @return\n * @memberof Legend\n */\n getLabelSpaces (effPadding, align) {\n this.config({\n item: {\n text: {\n orientation: this.config().position\n }\n }\n });\n return super.getLabelSpaces(effPadding, align);\n }\n\n /**\n *\n *\n * @return\n * @memberof Legend\n */\n elemType () {\n return RECT;\n }\n\n /**\n * Render the legend with its title\n *\n * @param {DOM} mountPoint Point where the legend and title are to be appended\n * @return {Instance} Current instance of legend\n * @memberof Legend\n */\n render () {\n const firebolt = this.firebolt();\n const { classPrefix, position } = this.config();\n const data = stepData(this.data())[position];\n\n const legendContainer = super.render(this.mount());\n\n // create Legend\n const { legendItem } = createLegendSkeleton(this, legendContainer, classPrefix, data);\n const { itemSkeleton } = createItemSkeleton(this, legendItem);\n\n renderStepItem(this, itemSkeleton);\n legendContainer.selectAll('div').style('float', LEFT);\n firebolt.mapActionsAndBehaviour();\n firebolt.createSelectionSet(this.data().map(d => d.id));\n return legendContainer;\n }\n\n /**\n *\n *\n * @param {*} data\n * @returns\n * @memberof StepLegend\n */\n getCriteriaFromData (data) {\n const fieldName = this.fieldName();\n return {\n [fieldName]: data.range\n };\n }\n}\n","import { GradientLegend, DiscreteLegend, StepLegend } from '@chartshq/muze-legend';\n\n/**\n * Contants to be used as attr\n */\nexport const ROWS = 'rows';\nexport const COLUMNS = 'columns';\nexport const DATA = 'data';\nexport const COLOR = 'color';\nexport const SHAPE = 'shape';\nexport const SIZE = 'size';\nexport const DETAIL = 'detail';\nexport const LAYERS = 'layers';\nexport const TRANSFORM = 'transform';\nexport const INITIALIZED = 'isInitialized';\nexport const SOURCE = 'source';\nexport const WIDTH = 'width';\nexport const HEIGHT = 'height';\nexport const PADDING = 'padding';\nexport const BORDER = 'border';\nexport const MARGIN = 'margin';\nexport const CONFIG = 'config';\nexport const MOUNT = 'mount';\nexport const CANVAS_UPDATED = 'canvasUpdated';\nexport const CLASSPREFIX = 'classPrefix';\nexport const POLICIES = '_policies';\nexport const LEGEND = 'legend';\nexport const TITLE = 'title';\nexport const SUB_TITLE = 'subtitle';\nexport const RESOLVE = 'resolve';\nexport const DISCRETE = 'discrete';\nexport const STEP_COLOR = 'step-color';\nexport const GRADIENT = 'gradient';\nexport const LINEAR = 'linear';\nexport const ORDINAL = 'ordinal';\n\nexport const TITLE_TEMPLATE_NOT_ALLOWED_TAGS = [\n 'script',\n 'style'\n];\n\nexport const LEGEND_TYPE_MAP = {\n [`${ORDINAL}-${true}-${COLOR}`]: DiscreteLegend,\n [`${ORDINAL}-${true}-${SIZE}`]: DiscreteLegend,\n [`${ORDINAL}-${true}-${SHAPE}`]: DiscreteLegend,\n [`${ORDINAL}-${false}-${COLOR}`]: DiscreteLegend,\n [`${ORDINAL}-${false}-${SHAPE}`]: DiscreteLegend,\n [`${ORDINAL}-${false}-${SIZE}`]: DiscreteLegend,\n [`${LINEAR}-${false}-${SIZE}`]: DiscreteLegend,\n [`${LINEAR}-${true}-${SIZE}`]: DiscreteLegend,\n [`${LINEAR}-${false}-${SHAPE}`]: DiscreteLegend,\n [`${LINEAR}-${true}-${COLOR}`]: StepLegend,\n [`${LINEAR}-${false}-${COLOR}`]: GradientLegend\n};\n\nexport const LEFT = 'left';\nexport const RIGHT = 'right';\nexport const BOTTOM = 'bottom';\nexport const TOP = 'top';\nexport const GROUP = 'group';\nexport const LAYOUT = 'layout';\nexport const RETINAL = 'retinal';\nexport const DIMENSION = 'dimension';\nexport const MEASURE = 'measure';\nexport const VERTICAL = 'vertical';\nexport const HORIZONTAL = 'horizontal';\n\n","import { ComposedVars, SimpleVariable } from '@chartshq/visual-group';\nimport { TITLE_TEMPLATE_NOT_ALLOWED_TAGS } from './constants';\n\n/**\n * This method creates a new composed variable instance from multiple variables.\n * @param {Array} vars Variable names\n * @return {ComposedVars} Instance of composed variable\n */\nexport const share = (...vars) => new ComposedVars(...vars.map(variable => new SimpleVariable(variable)));\n\n/**\n *\n *\n * @param {*} node\n * @returns\n */\nfunction treeShakeNode (node) {\n if (node.nodeType !== Node.ELEMENT_NODE) { return; }\n\n if (TITLE_TEMPLATE_NOT_ALLOWED_TAGS.indexOf(node.tagName.toLowerCase()) !== -1) {\n node.parentNode.removeChild(node);\n } else {\n for (const childNode of node.childNodes) {\n treeShakeNode(childNode);\n }\n }\n}\n\n/**\n * A string template tagged function which sanitizes input html formatted\n * string according to the allowed html tags.\n *\n * @param {Array.} strings - The string parts of the template.\n * @param {Array} exps - The list of evaluated expression values.\n * @return {Function} Returns a function which returns the sanitized html string.\n */\nexport function html (strings, ...exps) {\n let htmlCode = '';\n const expLn = exps.length;\n let i = 0;\n\n for (; i < expLn; ++i) {\n htmlCode += strings[i] + exps[i];\n }\n htmlCode += strings[i];\n\n const frag = document.createDocumentFragment();\n const wrapper = document.createElement('div');\n\n frag.appendChild(wrapper);\n wrapper.innerHTML = htmlCode;\n\n treeShakeNode(wrapper);\n const { innerHTML } = wrapper;\n\n return () => innerHTML;\n}\n","import { mergeRecursive } from 'muze-utils';\n\nconst defaultPolicy = (registrableComponents) => {\n const aliases = registrableComponents.map(comp => comp.alias());\n return {\n behaviours: {\n '*': (propagationPayload) => {\n const propagationCanvas = propagationPayload.sourceCanvas;\n return propagationCanvas ? aliases.indexOf(propagationCanvas) !== -1 : true;\n }\n }\n };\n};\n\nclass ActionModel {\n constructor () {\n this._registrableComponents = [];\n }\n\n registerPhysicalActions (action) {\n const canvases = this._registrableComponents;\n\n canvases.forEach((canvas) => {\n canvas.once('canvas.updated').then((args) => {\n const matrix = args.client.composition().visualGroup.matrixInstance().value;\n matrix.each(cell => cell.valueOf().firebolt().registerPhysicalActions(action));\n });\n });\n return this;\n }\n\n registerBehaviouralActions (...actions) {\n const canvases = this._registrableComponents;\n\n canvases.forEach((canvas) => {\n canvas.once('canvas.updated').then(() => {\n const matrix = canvas.composition().visualGroup.matrixInstance().value;\n matrix.each(cell => cell.valueOf().firebolt().registerBehaviouralActions(...actions));\n });\n });\n return this;\n }\n\n /**\n *\n *\n * @param {*} map\n * @returns\n * @memberof ActionModel\n */\n registerPhysicalBehaviouralMap (map) {\n const canvases = this._registrableComponents;\n\n canvases.forEach((canvas) => {\n canvas.once('canvas.updated').then((args) => {\n const matrix = args.client.composition().visualGroup.matrixInstance().value;\n matrix.each(cell => cell.valueOf().firebolt().registerPhysicalBehaviouralMap(map));\n });\n });\n return this;\n }\n\n registerPropagationBehaviourMap (map) {\n const canvases = this._registrableComponents;\n\n canvases.forEach((canvas) => {\n canvas.once('canvas.updated').then((args) => {\n const matrix = args.client.composition().visualGroup.matrixInstance().value;\n matrix.each(cell => cell.valueOf().firebolt().registerPropagationBehaviourMap(map));\n });\n });\n return this;\n }\n\n mapSideEffects (map) {\n const canvases = this._registrableComponents;\n\n canvases.forEach((canvas) => {\n canvas.once('canvas.updated').then(() => {\n const matrix = canvas.composition().visualGroup.matrixInstance().value;\n matrix.each(cell => cell.valueOf().firebolt().mapSideEffects(map));\n });\n });\n return this;\n }\n\n for (...components) {\n this._registrableComponents = components;\n return this;\n }\n\n registerSideEffects (...sideEffects) {\n const registrableComponents = this._registrableComponents;\n\n registrableComponents.forEach((canvas) => {\n canvas.once('canvas.updated').then((args) => {\n const matrix = args.client.composition().visualGroup.matrixInstance().value;\n matrix.each(cell => cell.valueOf().firebolt().registerSideEffects(sideEffects));\n });\n });\n\n return this;\n }\n\n dissociateBehaviour (...maps) {\n const registrableComponents = this._registrableComponents;\n\n registrableComponents.forEach((canvas) => {\n canvas.once('canvas.updated').then((args) => {\n const matrix = args.client.composition().visualGroup.matrixInstance().value;\n matrix.each((cell) => {\n maps.forEach(val => cell.valueOf().firebolt().dissociateBehaviour(val[0], val[1]));\n });\n });\n });\n\n return this;\n }\n\n dissociateSideEffect (...maps) {\n const registrableComponents = this._registrableComponents;\n\n registrableComponents.forEach((canvas) => {\n canvas.once('canvas.updated').then((args) => {\n const matrix = args.client.composition().visualGroup.matrixInstance().value;\n matrix.each((cell) => {\n maps.forEach(val => cell.valueOf().firebolt().dissociateSideEffect(val[0], val[1]));\n });\n });\n });\n\n return this;\n }\n\n enableCrossInteractivity (policy = {}) {\n const registrableComponents = this._registrableComponents;\n const mergedPolicy = mergeRecursive(mergeRecursive({}, defaultPolicy(registrableComponents)), policy);\n\n registrableComponents.forEach((canvas) => {\n canvas.firebolt().crossInteractionPolicy(mergedPolicy);\n });\n\n return this;\n }\n}\n\nexport const actionModel = (() => new ActionModel())();\n","export const DEFAULT_CONFIG = {\n classPrefix: 'muze',\n interaction: {\n sideEffect: 'individual'\n },\n legend: {\n position: 'right',\n color: {\n show: true,\n padding: 1,\n margin: 3,\n border: 1,\n height: 20,\n width: 20\n },\n shape: {\n show: true,\n padding: 1,\n margin: 3,\n border: 1,\n height: 20,\n width: 20\n },\n size: {\n show: true,\n padding: 1,\n margin: 3,\n border: 1,\n height: 20,\n width: 20\n }\n },\n showHeaders: false,\n minWidth: 100,\n minHeight: 100,\n border: {\n style: 'solid',\n color: '#d6d6d6',\n width: 2,\n collapse: true,\n spacing: 0\n },\n autoGroupBy: {\n disabled: false\n }\n};\n","/**\n * @module\n * This is the global options semantics based on which setters getters are created and reactivity is initiated.\n * Format\n * PROPERTRY_NAME: {\n * value: // default value of the property,\n * meta: {\n * typeCheck: // The setter value will be checked using this. If the value is function then the setter value\n * // is passed as args.\n * typeExpected: // The output of typecheck action will be tested against this. Truthy value will set the\n * // value to the setter\n * sanitizaiton: // Need for sanitization before type is checked\n * }\n * }\n */\n\nimport { intSanitizer, mergeRecursive, DataModel } from 'muze-utils';\nimport { DEFAULT_CONFIG } from './defaults';\n\nexport default {\n data: {\n value: null,\n meta: {\n typeCheck: d => d instanceof DataModel\n }\n },\n width: {\n value: 0,\n meta: {\n sanitization: intSanitizer,\n typeCheck: Number.isInteger\n }\n },\n height: {\n value: 0,\n meta: {\n sanitization: intSanitizer,\n typeCheck: Number.isInteger\n }\n },\n minUnitWidth: {\n value: 50,\n meta: {\n sanitization: intSanitizer,\n typeCheck: Number.isInteger\n }\n },\n minUnitHeight: {\n value: 50,\n meta: {\n sanitization: intSanitizer,\n typeCheck: Number.isInteger\n }\n },\n config: {\n value: null,\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Object',\n sanitization: (config, oldConfig) => {\n const oldConf = mergeRecursive({}, oldConfig);\n const defConfig = mergeRecursive(oldConf, DEFAULT_CONFIG);\n const newConf = mergeRecursive(defConfig, config);\n return newConf;\n }\n\n }\n }\n};\n","/**\n * This file exports constants that will be used to\n * create the state store of the table layout.\n */\n/**\n * The index of top, bottom and center in the matrix\n */\nexport const VIEW_INDEX = {\n top: 0,\n center: 1,\n bottom: 2\n};\n\n/**\n * The width of the grid suppied by the user.\n */\nexport const GRID_WIDTH = 'width';\n\n/**\n * The height of the grid supplied by the user.\n */\nexport const GRID_HEIGHT = 'height';\n\n/**\n * The border for the grid\n */\nexport const BORDER = 'border';\n\n /**\n * The index of the first visible row in view matrix.\n */\nexport const ROW_POINTER = 'rowPointer';\n\n/**\n * The index of the first visible column in the view matrix.\n */\nexport const COLUMN_POINTER = 'columnPointer';\n\n/**\n * Flag to specify whether row sizes should be equal.\n */\nexport const ROW_SIZE_IS_EQUAL = 'isRowSizeEqual';\n\n/**\n * Flag to specify whether column sizes are equal.\n */\nexport const COLUMN_SIZE_IS_EQUAL = 'isColumnSizeEqual';\n\n/**\n * Field to store an array an of the widths of visible columns.\n * @computed\n */\nexport const COLUMN_WIDTHS = 'visibleColumnWidths';\n\n/**\n * Field to store an array of heights of visible rows.\n * @computed\n */\nexport const ROW_HEIGHTS = 'visibleRowHeights';\n\n/**\n * Field to store the width of the left matrix.\n * @computed\n */\nexport const LEFT_MATRIX_WIDTH = 'leftMatrixWidth';\n\n/**\n * Field to store the width of the right matrix.\n * @computed\n */\nexport const RIGHT_MATRIX_WIDTH = 'rightMatrixWidth';\n\n/**\n * Field to store the height of the top matrix.\n * @computed\n */\nexport const TOP_MATRIX_HEIGHT = 'topMatrixHeight';\n\n/**\n * Field to store the height of the bottom matrix.\n * @computed\n */\nexport const BOTTOM_MATRIX_HEIGHT = 'bottomMatrixHeight';\n\n/**\n * The dom element to render the layout inside.\n */\nexport const MOUNT_POINT = 'mount';\n\n/**\n * The id attribute of the left table element.\n */\nexport const LEFT_TABLE_ID = 'grid-left';\n\n/**\n * The id attribute of the right table element.\n */\nexport const RIGHT_TABLE_ID = 'grid-right';\n\n/**\n * The id attribute of the top table.\n */\nexport const TOP_TABLE_ID = 'grid-top';\n\n/**\n * The id attribute of the bottom table.\n */\nexport const BOTTOM_TABLE_ID = 'grid-bottom';\n\n/**\n * The id attribute of the center table.\n */\nexport const CENTER_TABLE_ID = 'grid-center';\n\n/**\n * The id attribute of the top div.\n */\nexport const TOP_DIV_ID = 'muze-div-top';\n\n/**\n * The id attribute of the bottom div.\n */\nexport const BOTTOM_DIV_ID = 'muze-div-bottom';\n\n/**\n * The id attribute of the center div.\n */\nexport const CENTER_DIV_ID = 'muze-div-center';\n\n/**\n * Field that indicates if the row configuration has changed\n */\nexport const HAVE_ROWS_CHANGED = 'haveRowsChanged';\n\n/**\n * Field that indicates if the column configuration has changed\n */\nexport const HAVE_COLUMNS_CHANGED = 'haveColumnsChanged';\n\n/**\n * Field that indicates if the values configuration for the center matrix has changed\n */\nexport const HAVE_VALUES_CHANGED = 'haveValuesChanged';\n\n/**\n * Field that indicates the width of row matrix\n */\nexport const ROW_MATRIX_WIDTH = 'rowMatrixWidth';\n\n/**\n * Field that indicates the height of row matrix\n */\nexport const COLUMN_MATRIX_HEIGHT = 'columnMatrixHeight';\n\n/**\n * Field that indicates the unit width of layout\n */\nexport const UNIT_WIDTH = 'unitWidth';\n\n/**\n * Field that indicates the unit height of layout\n */\nexport const UNIT_HEIGHT = 'unitHeight';\n\n/**\n * Field that indicates the style object\n */\nexport const STYLE = 'style';\n\n/**\n * Field that indicates the color configuration\n */\nexport const COLOR = 'color';\n\n/**\n * Field that indicates width\n */\nexport const WIDTH = 'width';\n\n/**\n * Field that indicates collpase property for border\n */\nexport const COLLAPSE = 'collapse';\n\n/**\n * Field that indicates spacing property for border\n */\nexport const SPACING = 'spacing';\n\n/**\n * Field that indicates spacing property for border\n */\nexport const DISTRIBUTION = 'distribution';\n\n/**\n * Field that indicates spacing property for border\n */\nexport const GUTTERSPACE = 'gutterSpace';\n\n/**\n * Field that indicates spacing property for border\n */\nexport const BREAK_PAGE = 'breakPage';\n\n/**\n * Field that indicates spacing property for border\n */\nexport const SHOW_ROW_BORDERS = 'showRowBorders';\n\n/**\n * Field that indicates spacing property for border\n */\nexport const SHOW_COL_BORDERS = 'showColBorders';\n\n/**\n * Field that indicates spacing property for border\n */\nexport const SHOW_VALUE_BORDERS = 'showValueBorders';\n\nexport const HEIGHT = 'height';\nexport const COLUMN = 'column';\nexport const ROW = 'row';\nexport const TOP = 'top';\nexport const LEFT = 'left';\nexport const RIGHT = 'right';\nexport const BOTTOM = 'bottom';\nexport const CENTER = 'center';\nexport const CLICK = 'click';\nexport const ROW_LEFT = 'rowLeft';\nexport const ROW_RIGHT = 'rowRight';\nexport const COLUMN_BOTTOM = 'colBottom';\nexport const COLUMN_TOP = 'colTop';\nexport const AUTO = 'auto';\nexport const ROW_SPAN = 'rowSpan';\nexport const COL_SPAN = 'colSpan';\nexport const ROW_ROOT = 'rowRoot';\nexport const COLUMN_ROOT = 'columnRoot';\nexport const PRIMARY = 'primary';\nexport const SECONDARY = 'secondary';\n","import { sanitizeIP, mergeRecursive } from 'muze-utils';\nimport { TOP, CENTER, BOTTOM } from '../enums/constants';\n\n/*\n * This is the abstract implementation of the root layout. This takes care of common work which all the layouts\n * has to handle. The common work includes sanitizaion of inputs, update, rerender, dispose etc. This class can't be\n * used directly (as ofcourse this is an abstract implementaiton), the class which is implementing it has to implement\n * the necessary methods and gives its on visual.\n */\n\n/**\n * This class is used to create a generic layout. It can be extended to create layouts\n * of different types\n * @class GenericLayout\n */\nexport default class GenericLayout {\n\n /**\n * Creates an instance of TableLayout.\n * @param {HTMLElement} mountPoint DOM element/d3 selection where the layout is to be mounted\n * @param {Object} measurement The dimensions of the layout\n * @param {Object} config configuration to be given for the layout\n * @param {Object} dependencies external dependencies.\n * @memberof GenericLayout\n *\n * measurement : {\n * width : number => width of the container\n * height : number => height of the container\n * unitHeight : number => height of unit of the cells\n * unitWidth : number => width of unit of the cells\n * }\n *\n */\n constructor (mountPoint, measurement, config, dependencies) {\n this._config = {};\n this._measurement = {};\n this._matrices = [];\n // External dependencies to be included for the layout. This includes the ext global dependencies like\n // smartlabel which has one single implementation of throughout the page or per isntance\n this._dependencies = dependencies;\n\n this.measurement(measurement);\n this.mountPoint(mountPoint);\n this.config(config);\n }\n\n /**\n * Returns an object which is used to recreate the layout.\n * @return {Object} the serialized components\n */\n serialize () {\n return {\n measurement: this.measurement(),\n config: this.config(),\n matrices: this.matrices()\n };\n }\n\n /**\n * Sets/Gets the config for the layout\n * @param {Object} config configuration for the layout\n * @return {Layout|Object} Gets the Config/ Returns this instance when set\n */\n config (config) {\n if (config) {\n this._config = mergeRecursive(this._config || {}, config);\n return this;\n }\n return this._config;\n }\n\n /**\n * Sets/Gets the measurement for the layout\n * @param {Object} measurement measurement for the layout\n * @return {Layout|Object} Gets the measurement/ Returns this instance when set\n */\n measurement (measurement) {\n if (measurement) {\n this._measurement = mergeRecursive(this._measurement || {}, measurement);\n\n return this;\n }\n return this._measurement;\n }\n\n /**\n * Sets/Gets the matrices for the layout\n * @param {Object} matrices matrices for the layout\n * @return {Layout|Object} Gets the matrices/ Returns this instance when set\n */\n matrices (matrices) {\n if (matrices) {\n this._matrices = sanitizeIP.typeObj([TOP, CENTER, BOTTOM], matrices);\n\n return this;\n }\n return this._matrices;\n }\n\n /**\n * Sets/Gets the matrix for row\n * @param {Object} matrix matrices for the layout\n * @return {Layout|Object} Gets the matrix/ Returns this instance when set\n */\n rowMatrix (matrix) {\n if (matrix) {\n this._rowMatrix = matrix;\n return this;\n }\n return this._rowMatrix;\n }\n\n /**\n * Sets/Gets the matrix for columns\n * @param {Object} matrix matrices for the layout\n * @return {Layout|Object} Gets the matrix/ Returns this instance when set\n */\n columnMatrix (matrix) {\n if (matrix) {\n this._columnMatrix = matrix;\n return this;\n }\n return this._columnMatrix;\n }\n\n /**\n * Sets/Gets the matrix for value\n * @param {Object} matrix matrices for the layout\n * @return {Layout|Object} Gets the matrix/ Returns this instance when set\n */\n centerMatrix (matrix) {\n if (matrix) {\n this._centerMatrix = matrix;\n return this;\n }\n return this._centerMatrix;\n }\n\n /**\n * Sets/Gets the mountPoint for the layout\n * @param {Object} mountPoint mountPoint for the layout\n * @return {Layout|Object} Gets the mountPoint/ Returns this instance when set\n */\n mountPoint (mountPoint) {\n if (mountPoint) {\n this._mountPoint = mountPoint;\n\n return this;\n }\n return this._mountPoint;\n }\n}\n","import * as FieldNames from '../enums/constants';\n\n/**\n * Default configuration of the layout\n * @return {Object} returns the default configuration\n */\nexport const DEFAULT_CONFIGURATION = {\n [FieldNames.BORDER]: {\n [FieldNames.STYLE]: 'solid',\n [FieldNames.COLOR]: '#d6d6d6',\n [FieldNames.WIDTH]: 2,\n [FieldNames.COLLAPSE]: true,\n [FieldNames.SPACING]: 0\n },\n [FieldNames.GUTTERSPACE]: { rows: [], columns: [] },\n [FieldNames.DISTRIBUTION]: { rows: [], columns: [] },\n [FieldNames.BREAK_PAGE]: { rows: [], columns: [] },\n [FieldNames.ROW_SIZE_IS_EQUAL]: false,\n [FieldNames.COLUMN_SIZE_IS_EQUAL]: false,\n [FieldNames.COLUMN_POINTER]: 0,\n [FieldNames.ROW_POINTER]: 0\n};\n\n/**\n * Default measurements for the layout\n * @return {Object} returns the default measurements\n */\nexport const DEFAULT_MEASUREMENTS = {\n [FieldNames.GRID_WIDTH]: 100,\n [FieldNames.GRID_HEIGHT]: 100,\n [FieldNames.UNIT_WIDTH]: 100,\n [FieldNames.UNIT_HEIGHT]: 100\n};\n\nexport const BLANK_BORDERS = 'rgba(0,0,0,0)';\n","import { ROW_LEFT, ROW_RIGHT, COLUMN_BOTTOM, COLUMN_TOP, TOP, BOTTOM } from '../enums/constants';\n/**\n * This callback is used to filter the array of\n * placeholder cells and filter out cells which have\n * appeared in a previous row.\n *\n * @param {Placeholder} colData Instance of placeholder.\n * @param {number} colIdx The index of the placeholder in array.\n * @param {Array} matrix The 2d array for which filtering is to be done\n * @param {number} rIdx The index of the row of the placeholder in array.\n * @param {string} type The type of matrix it is (rowLeft, rowRight, colTop, colBottom)\n * @return {boolean} flag to keep/remove element.\n */\nconst columnFilter = (colData, colIdx, matrix, rIdx, type) => {\n const previousRow = matrix[rIdx - 1];\n const currentRow = matrix[rIdx];\n\n // Row Span for left\n if (type === ROW_LEFT) {\n if (!previousRow) {\n return colData;\n }\n let i = 0;\n for (;i <= colIdx; i += 1) {\n if (currentRow[i].valueOf() !== previousRow[i].valueOf()) {\n break;\n }\n }\n return (i - 1 === colIdx) ? null : colData;\n } else if (type === ROW_RIGHT) {\n if (!previousRow || colIdx === 0) {\n return colData;\n }\n let j = colIdx;\n for (; j < currentRow.length; j += 1) {\n if (previousRow[j].valueOf() !== currentRow[j].valueOf()) {\n break;\n }\n }\n return (j === currentRow.length) ? null : colData;\n } else if (type === COLUMN_BOTTOM) {\n if (rIdx === 0) {\n return colData;\n }\n const prevCell = currentRow[colIdx - 1];\n if (prevCell) {\n if (prevCell.valueOf() === colData.valueOf()) {\n const nextRow = matrix[rIdx + 1];\n if (!nextRow) {\n return null;\n }\n if (nextRow[colIdx].valueOf() === nextRow[colIdx - 1].valueOf()) {\n return null;\n }\n return colData;\n }\n return colData;\n }\n return colData;\n } else if (type === COLUMN_TOP) {\n if (rIdx === matrix.length - 1 && matrix.length > 1) {\n return colData;\n }\n const prevCell = currentRow[colIdx - 1];\n if (prevCell && (prevCell.valueOf() === colData.valueOf())) {\n const prevRow = matrix[rIdx - 1];\n if (prevRow) {\n if (prevRow[colIdx].valueOf() === prevRow[colIdx - 1].valueOf()) {\n return null;\n }\n return colData;\n }\n return null;\n }\n return colData;\n }\n return colData;\n};\n\n/**\n * This callback is used to calculate the rowspan\n * by checking for repeating entries in subsequent rows\n * at the specified column.\n *\n * @param {Placeholder} colData Instance of placeholder.\n * @param {number} colIdx The index of the placeholder in the array.\n * @param {Array} matrix The 2d array for which filtering is to be done\n * @param {number} rIdx The index of the row of the placeholder in array.\n * @return {number} The row span.\n */\nconst calcRowSpan = (colData, colIdx, matrix, rIdx) => {\n let count = 1;\n // if data is not header cell then rowspan\n // has to be 1\n if (!colData || typeof colData.valueOf() !== 'string') {\n return 1;\n }\n let isNull = false;\n while (!isNull) {\n if (matrix[rIdx + count] && matrix[rIdx + count][colIdx] === null) {\n count += 1;\n } else {\n isNull = true;\n }\n }\n return count;\n};\n/**\n * This callback is used to calculate the rowspan\n * by checking for repeating entries in subsequent rows\n * at the specified column.\n *\n * @param {Placeholder} colData Instance of placeholder.\n * @param {number} colIdx The index of the placeholder in the array.\n * @param {Array} matrix The 2d array for which filtering is to be done\n * @param {number} rIdx The index of the row of the placeholder in array.\n * @return {number} The row span.\n */\nconst calcColSpan = (colData, colIdx, matrix, rIdx) => {\n let count = 1;\n // if data is not header cell then rowspan\n // has to be 1\n if (!colData || typeof colData.valueOf() !== 'string') {\n return 1;\n }\n let isNull = false;\n while (!isNull) {\n if (matrix[rIdx][colIdx + count] === null) {\n count += 1;\n } else {\n isNull = true;\n }\n }\n return count;\n};\n\n// create a masking matrix to strip out repeating columns\n// and calculate rowspan.\nconst mask = function (matrix, type) {\n return matrix.map((row, rIdx) => {\n if (type === ROW_LEFT || type === ROW_RIGHT) {\n const filteredRow = row.map((col, colIndex) => columnFilter(col, colIndex, matrix, rIdx, type));\n const temp = [];\n const diff = row.length - filteredRow.length;\n for (let i = 0; i < diff; i += 1) {\n temp.push(null);\n }\n if (type === ROW_RIGHT) {\n temp.unshift(...filteredRow);\n return temp;\n }\n temp.push(...filteredRow);\n return temp;\n }\n\n const filteredRow = row.map((col, colIndex) => columnFilter(col, colIndex, matrix, rIdx, type));\n const temp = [];\n temp.push(...filteredRow);\n return temp;\n });\n};\n\n/**\n * This function is used to set the col and row spans\n * for the matrices based on repeated/hierarchichal data\n *\n * @export\n * @param {Array} matrix The 2d array for which filtering is to be done\n * @param {string} type Type of array (center, top, bottom)\n * @param {number} index Index of array in the row\n * @return {Object} containing the view matrix and their spans\n */\nexport function cellSpanMaker (matrix, type, index) {\n let span = '';\n if (type === TOP || type === BOTTOM) {\n span = type === TOP ? COLUMN_TOP : COLUMN_BOTTOM;\n const viewMatrix = mask(matrix, span);\n const spans = viewMatrix.map((row, ridx) => row.map((col, i) => calcColSpan(col, i, viewMatrix, ridx))\n .filter(col => col !== 1));\n return { viewMatrix, spans };\n } else if (index === 0 || index === 2) {\n span = index === 0 ? ROW_LEFT : ROW_RIGHT;\n const viewMatrix = mask(matrix, span);\n const spans = [];\n viewMatrix.forEach((row, ridx) => {\n spans[ridx] = spans[ridx] || [];\n row.forEach((col, i) => {\n if (viewMatrix[ridx][i]) {\n const currSpan = calcRowSpan(col, i, viewMatrix, ridx);\n currSpan && spans[ridx].push(currSpan);\n }\n });\n });\n return { viewMatrix, spans };\n }\n return { viewMatrix: matrix };\n}\n","import { makeElement, selectElement } from 'muze-utils';\nimport { cellSpanMaker } from './span-maker';\nimport {\n TOP, LEFT, RIGHT, BOTTOM, CENTER, WIDTH, ROW_SPAN, COL_SPAN\n} from '../enums/constants';\nimport { BLANK_BORDERS } from './defaults';\n\n/**\n * Creates a table element of the layout\n *\n * @param {Object} mount Mount point for table elements\n * @param {string} className defines class name\n * @param {Array} rowData set of rows for the table\n * @return {Selection} set of selections for the table\n */\nfunction renderTable (mount, className, rowData) {\n const table = makeElement(mount, 'table', ['layout'], `${className}-table`);\n const body = makeElement(table, 'tbody', ['layout'], `${className}-body`);\n const rows = makeElement(body, 'tr', rowData, `${className}-tr`);\n const cells = makeElement(rows, 'td', (d, i) => d.filter(e => e !== null && e.config().show).map(e =>\n ({ placeholder: e, rowIndex: i })), `${className}-td`, {}, key => key.placeholder.id);\n\n return { table, body, rows, cells };\n}\n\nfunction applyRowBorders (cells, borderStyle, showBorders, color) {\n [TOP, BOTTOM].forEach((borderType) => {\n const style = `${borderStyle} ${showBorders[borderType] ? color : BLANK_BORDERS}`;\n cells.style(`border-${borderType}`, style);\n });\n}\n\nfunction applyColBorders (cells, borderStyle, showBorders, color) {\n [LEFT, RIGHT].forEach((borderType) => {\n const style = `${borderStyle} ${showBorders[borderType] ? color : BLANK_BORDERS}`;\n cells.style(`border-${borderType}`, style);\n });\n}\n\n/**\n * Applies borders to the cells in a matrix\n *\n * @param {Selection} cells Set of cells made from the matrix\n * @param {Object} border Border info for layout\n * @param {string} type Type of matrix(top/center/bottom)\n * @param {number} index Column index of matrix in the row\n */\nfunction applyBorders (cells, border, type, index) {\n const {\n width,\n style,\n color,\n showRowBorders,\n showColBorders,\n showValueBorders\n } = border;\n const borderStyle = `${width}px ${style}`;\n\n if (type === CENTER && index === 1) {\n [TOP, BOTTOM, LEFT, RIGHT].forEach((borderType) => {\n cells.style(`border-${borderType}`, `${borderStyle} ${showValueBorders[borderType] ?\n color : BLANK_BORDERS}`);\n });\n } else if (type === CENTER) {\n applyRowBorders(cells, borderStyle, showRowBorders, color);\n } else if (index === 1) {\n applyColBorders(cells, borderStyle, showColBorders, color);\n }\n}\n\n/**\n * Renders a set of matrices in a row\n *\n * @param {Array} matrices Set of matrices in a row\n * @param {Selection} mountPoint Mount point for the row\n * @param {string} type top/center/bottom\n * @param {Object} dimensions dimensions of the matrix\n */\nfunction renderMatrix (matrices, mountPoint, type, dimensions, classPrefix) {\n matrices.forEach((matrix, index) => {\n // Creating containers for each matrix individually\n const containerForMatrix = makeElement(mountPoint, 'div', [1], `${classPrefix}-grid-${type}-${index + 1}`)\n .classed(`${classPrefix}-grid-${type}`, true)\n .classed(`${classPrefix}-grid`, true);\n\n const {\n viewMatrix,\n spans\n } = cellSpanMaker(matrix, type, index);\n\n // Rendering the table components\n const { cells } = renderTable(containerForMatrix, `${classPrefix}-grid`, viewMatrix);\n\n if (type === CENTER && spans) {\n cells.attr(ROW_SPAN, function (cell, colIndex) {\n const placeholder = cell.placeholder;\n selectElement(this).style('height', `${placeholder.availHeight() + dimensions.border.width}px`);\n return spans[cell.rowIndex][colIndex];\n });\n } else if ((type === TOP || type === BOTTOM) && index === 1) {\n cells.attr(COL_SPAN, function (cell, colIndex) {\n const span = spans[cell.rowIndex][colIndex];\n const placeholder = cell.placeholder;\n if (span > 1) {\n placeholder.setAvailableSpace(0, placeholder.availHeight());\n }\n selectElement(this).style('height', `${placeholder.availHeight()}px`);\n return span;\n });\n }\n // Rendering content within placeholders\n cells.each(function (cell) {\n cell.placeholder && cell.placeholder.render(this);\n }).exit().each((cell) => {\n cell.placeholder && cell.placeholder.remove();\n });\n\n applyBorders(cells, dimensions.border, type, index);\n });\n}\n\n/**\n * Renders all the matrices of the layout\n *\n * @export\n * @param {Array} matrices Set of matrices in the layout\n * @param {Array} mountPoints Mount points for each row of matrix\n * @param {Array} layoutDimensions Dimensions(height/width) of all the matrices\n */\nexport function renderMatrices (context, matrices, layoutDimensions) {\n const {\n top,\n center,\n bottom\n } = matrices;\n const {\n classPrefix\n } = context.config();\n const {\n width\n } = context.measurement();\n const mount = context.mountPoint();\n\n const data = [\n { type: TOP, matrix: top },\n { type: CENTER, matrix: center },\n { type: BOTTOM, matrix: bottom }\n ];\n makeElement(mount, 'div', data, `${classPrefix}-grid-layout-row`)\n .each(function (d, i) {\n const row = selectElement(this);\n row.classed(`${classPrefix}-grid-layout-row-${i}`, true);\n renderMatrix(d.matrix, row, d.type, layoutDimensions, classPrefix);\n })\n .style(WIDTH, `${Math.ceil(width)}px`);\n}\n","/**\n * This file exports utility functions that are used across the layout module\n */\nimport { Symbols } from 'muze-utils';\nimport { PRIMARY, SECONDARY, HEIGHT, WIDTH } from '../enums/constants';\n\nconst nest = Symbols.nest;\n/**\n *\n *\n * @param {*} isTransposed\n * @returns\n */\nconst getMeasureInfo = (isTransposed) => {\n if (isTransposed) {\n return {\n firstMeasure: HEIGHT,\n secondMeasure: WIDTH\n };\n }\n return {\n firstMeasure: WIDTH,\n secondMeasure: HEIGHT\n };\n};\n\n/**\n *\n *\n * @param {*} i\n * @param {*} page\n * @returns\n */\nconst findInPage = (i, page) => {\n let count = 0;\n for (const x in page) {\n if (i < page[x]) {\n count = x;\n break;\n }\n }\n return count;\n};\n\n/**\n * Creates a single matrix from two matrices\n *\n * @param {Array} matrix Input matrix\n * @return {Array} Joined matrix\n * @memberof VisualMatrix\n */\nexport const combineMatrices = (matrix, config) => {\n const { isTransposed } = config;\n let joinedMatrix = matrix[0].length > 0 ? matrix[0] : matrix[1];\n if (isTransposed) {\n joinedMatrix = matrix[0].length > 0 ? [...matrix[0]] : [];\n joinedMatrix = matrix[1].length > 0 ? [...joinedMatrix, ...matrix[1]] : joinedMatrix;\n } else {\n joinedMatrix = joinedMatrix.map((row, rowIndex) => {\n let rowData = [];\n if (matrix[0].length > 0) {\n rowData = [...matrix[0][rowIndex]];\n }\n if (matrix[1].length > 0) {\n rowData = [...rowData, ...matrix[1][rowIndex]];\n }\n return rowData;\n });\n }\n return joinedMatrix;\n};\n\n/**\n * Creates a hirachical tree from the context\n *\n * @param {Object} context context for creating tree\n * @return {Object} nested tree\n */\nexport const createTree = (context) => {\n let matrixTree = {};\n let lastLevelKey = 0;\n let facet = PRIMARY;\n const nestFn = nest();\n const keys = [];\n const layoutMatrix = context._layoutMatrix;\n const primaryMatrix = context.primaryMatrix();\n const secondaryMatrix = context.secondaryMatrix();\n const { isTransposed, breakPage } = context.config();\n\n if (!isTransposed) {\n if (primaryMatrix.length === 0) {\n facet = PRIMARY;\n } else if (secondaryMatrix.length === 0) {\n facet = SECONDARY;\n } else {\n facet = primaryMatrix.length >= secondaryMatrix.length ? PRIMARY : SECONDARY;\n }\n if (primaryMatrix.length > 0) {\n for (let i = 0; i < primaryMatrix[0].length - 1; i++) {\n keys.push(i);\n }\n keys.push(primaryMatrix[0].length - 1);\n if (facet === SECONDARY || secondaryMatrix.length === 0) {\n lastLevelKey = primaryMatrix[0].length - 1;\n }\n }\n if (secondaryMatrix.length > 0) {\n const keyLength = primaryMatrix.length > 0 ? primaryMatrix[0].length : 0;\n for (let i = secondaryMatrix[0].length - 1; i > 0; i--) {\n keys.push(i + keyLength);\n }\n keys.push(keyLength);\n\n if (facet === PRIMARY) {\n lastLevelKey = keyLength;\n }\n } else {\n lastLevelKey = primaryMatrix.length > 0 ? primaryMatrix[0].length - 1 : 0;\n }\n keys.forEach((key) => {\n let counter = -1;\n return nestFn.key((d) => {\n counter++;\n return `${d[key].valueOf()}-${findInPage(counter, breakPage)}`;\n });\n });\n matrixTree = nestFn.entries(layoutMatrix);\n } else {\n if (primaryMatrix.length === 0) {\n facet = PRIMARY;\n } else if (secondaryMatrix.length === 0) {\n facet = SECONDARY;\n } else {\n facet = primaryMatrix.length >= secondaryMatrix.length ? PRIMARY : SECONDARY;\n }\n if (primaryMatrix.length > 0) {\n for (let i = 0; i < primaryMatrix.length - 1; i++) {\n keys.push(i);\n }\n // if (facet === PRIMARY) {\n keys.push(primaryMatrix.length - 1);\n // } else {\n if (facet === SECONDARY) {\n lastLevelKey = primaryMatrix.length - 1;\n }\n }\n if (secondaryMatrix.length > 0) {\n const primaryMatrixLength = primaryMatrix.length;\n for (let i = secondaryMatrix.length - 1; i > 0; i--) {\n keys.push(i + primaryMatrixLength);\n }\n // if (facet === SECONDARY) {\n keys.push(primaryMatrixLength);\n // }\n if (facet === PRIMARY) {\n lastLevelKey = primaryMatrixLength;\n }\n }\n keys.forEach((key) => {\n let counter = -1;\n return nestFn.key((d) => {\n counter++;\n return `${d[key].valueOf()}-${findInPage(counter, breakPage)}`;\n });\n });\n let newMatrix = [];\n newMatrix = layoutMatrix[0].map((col, colIndex) => layoutMatrix.map(row => row[colIndex]));\n matrixTree = nestFn.entries(newMatrix);\n }\n return { tree: matrixTree, lastLevelKey };\n};\n\n/**\n * Gives the min measues\n *\n * @param {boolean} isTransposed is column matrix\n * @param {Object} unitMeasures min measures to be given to cells\n * @return {Object} dimension min cell\n */\nexport const getMinMeasures = (isTransposed, unitMeasures) => {\n if (!isTransposed) {\n return {\n height: unitMeasures.height,\n width: 0\n };\n }\n return {\n height: 0,\n width: unitMeasures.width\n };\n};\n\n/**\n * Get the logical space from the tree\n *\n * @param {Node} item tree to be calculated\n * @param {number} measures width and height\n * @param {Array} minMeasures min measures for a cell\n * @param {Array} maxMeasure max measures for a col/row\n * @return {Object} dimension\n */\nexport const getLogicalSpace = (item, measures, minMeasures, maxMeasure = []) => {\n const { firstMeasure, secondMeasure } = measures;\n let firstMeasureValue = 0;\n let secondMeasureValue = 0;\n item.values.forEach((valueArray) => {\n let fMeasure = 0;\n let sMeasure = 0;\n valueArray.forEach((placeholder, colIndex) => {\n placeholder.logicalSpace(null);\n const space = placeholder.getLogicalSpace();\n sMeasure = Math.max(sMeasure, +space[secondMeasure], minMeasures[secondMeasure]);\n maxMeasure[colIndex] = Math.max(maxMeasure[colIndex] || 0, space[firstMeasure]);\n fMeasure += +maxMeasure[colIndex];\n });\n secondMeasureValue += sMeasure;\n firstMeasureValue = Math.max(firstMeasureValue, fMeasure);\n item.space = {\n [secondMeasure]: Math.ceil(secondMeasureValue),\n [firstMeasure]: Math.ceil(firstMeasureValue)\n };\n });\n return {\n [secondMeasure]: secondMeasureValue,\n [firstMeasure]: firstMeasureValue\n };\n};\n\n/**\n * Computes the logical spcae taken by the matrix tree\n *\n * @param {*} [item={}] tree to be viewed\n * @param {boolean} [isTransposed=false] is column matrix\n * @param {*} unitMeasures min measues for a cell\n * @param {Array} maxMeasure max measures for a col/row\n * @return {Object} logical space taken\n */\nexport const computeLogicalSpace = (item = {}, config, maxMeasures) => {\n const { isTransposed = false, unitMeasures } = config;\n const { firstMeasure, secondMeasure } = getMeasureInfo(isTransposed);\n const { values } = item;\n const minMeasures = getMinMeasures(isTransposed, unitMeasures);\n if (values[0].key) {\n const logicalSpace = { [firstMeasure]: 0, [secondMeasure]: 0 };\n\n values.forEach((valueItem) => {\n // Compute logical space for lowest level\n const space = computeLogicalSpace(valueItem, config, maxMeasures);\n // Set logical space for first measure\n logicalSpace[firstMeasure] = Math.max(logicalSpace[firstMeasure], space[firstMeasure],\n minMeasures[firstMeasure]);\n // Set logical space for second measure\n logicalSpace[secondMeasure] += +space[secondMeasure];\n });\n item.space = logicalSpace;\n return logicalSpace;\n }\n return getLogicalSpace(item, { firstMeasure, secondMeasure }, minMeasures, maxMeasures);\n};\n\n/**\n * Gives the space taken by a row\n *\n * @param {Array} row matrix array of rows\n * @return {Object} dimension of the row\n */\nexport const spaceTakenByRow = (row) => {\n let height = 0;\n let width = 0;\n row.forEach((col) => {\n const spaces = col.getLogicalSpace();\n height = Math.max(height, spaces.height);\n width += spaces.width;\n });\n return {\n width,\n height\n };\n};\n\n/**\n * Gives the space taken by a column\n *\n * @param {Array} matrix column matrix\n * @param {number} colIndex column index\n * @return {Object} dimension of the column\n */\nexport const spaceTakenByColumn = (matrix, colIndex) => {\n let height = 0;\n let width = 0;\n matrix.forEach((row) => {\n const col = row[colIndex];\n const spaces = col.getLogicalSpace();\n width = Math.max(width, spaces.width);\n height += spaces.height;\n });\n return {\n width,\n height\n };\n};\n\n/**\n * Creates different level matrices\n *\n * @param {Object} item matrix tree\n * @param {boolean} isTransposed is column matrix\n * @return {Object} matrix of each level\n */\nexport const createMatrixEachLevel = (item, isTransposed) => {\n if (item.values[0].key) {\n const arr = [];\n item.values.forEach((child) => {\n if (!isTransposed) {\n arr.push(...createMatrixEachLevel(child, isTransposed));\n } else {\n const eachLevel = createMatrixEachLevel(child, isTransposed);\n eachLevel.forEach((e, i) => {\n arr[i] = arr[i] || [];\n arr[i].push(...e);\n });\n }\n });\n item.matrix = arr;\n return arr;\n }\n if (!isTransposed) {\n item.matrix = item.values;\n } else {\n item.matrix = item.values[0].map((col, colIndex) => item.values.map(row => row[colIndex]));\n }\n return item.matrix;\n};\n\n/**\n * Breaks the matrix into two part\n *\n * @param {Array} matrix input matrix\n * @param {boolean} isTransposed is column matrix\n * @param {number} breakPointer point in matrix where it is to be broken\n * @return {Array} two broken matrix\n */\nexport const breakMatrix = (matrix, isTransposed, breakPointer) => {\n const primaryMatrix = [];\n const secondaryMatrix = [];\n if (isTransposed) {\n matrix.forEach((row, rowIndex) => {\n if (rowIndex >= breakPointer) {\n secondaryMatrix.push(row);\n } else {\n primaryMatrix.push(row);\n }\n });\n } else {\n matrix.forEach((row, rowIndex) => {\n row.forEach((column, columnIndex) => {\n if (columnIndex >= breakPointer) {\n secondaryMatrix[rowIndex] = secondaryMatrix[rowIndex] || [];\n secondaryMatrix[rowIndex].push(column);\n } else {\n primaryMatrix[rowIndex] = primaryMatrix[rowIndex] || [];\n primaryMatrix[rowIndex].push(column);\n }\n });\n });\n }\n return [primaryMatrix, secondaryMatrix];\n};\n\n/**\n * Distributed width returned\n *\n * @param {Object} context context for the width distibution\n * @return {number} distributed widths\n */\nexport const getDistributedWidth = (context, layoutConfig) => {\n const {\n availableWidth,\n width,\n row\n } = context;\n const {\n isDistributionEqual,\n isTransposed,\n distribution\n } = layoutConfig;\n let distSum = 0;\n if (distribution && distribution[0]) {\n distSum = distribution.reduce((t, n) => {\n t += n;\n return t;\n });\n }\n return row.map((col, colIndex) => {\n const space = col.getLogicalSpace().width;\n let distWidth = (space + (availableWidth - width) * (space / width));\n if (isTransposed) {\n if (distribution.length > 0) {\n distWidth = (availableWidth * distribution[colIndex] / distSum);\n } else if (isDistributionEqual || width === 0) {\n const rowLen = row.length;\n distWidth = (availableWidth / rowLen);\n }\n }\n return Math.floor(distWidth);\n });\n};\n\n/**\n * Distributeed heights returned\n *\n * @param {Object} context input for the height distribution\n * @return {Object} distribured heights\n */\nexport const getDistributedHeight = (context) => {\n let distSum = 0;\n let gutterSum = 0;\n let heightWithoutGutter = 0;\n const {\n isTransposed,\n distribution,\n availableHeight,\n height,\n isDistributionEqual,\n gutter,\n matrix,\n cIdx\n } = context;\n\n if (distribution && distribution[0] !== undefined) {\n distSum = distribution.reduce((t, n) => {\n t += n;\n return t;\n });\n }\n if (gutter && gutter[0] !== undefined) {\n gutterSum = gutter.reduce((t, n) => {\n t += n;\n return t;\n });\n }\n heightWithoutGutter = availableHeight - Math.floor(availableHeight * gutterSum);\n\n const colLen = matrix.length;\n return matrix.map((row, rIdx) => {\n const col = row[cIdx];\n const space = col.getLogicalSpace().height;\n let distHeight = (space + (heightWithoutGutter - height) * (space / height));\n\n if (!isTransposed) {\n if (distribution.length > 0 && colLen === distribution.length) {\n distHeight = (heightWithoutGutter * distribution[rIdx] / distSum);\n } else if (isDistributionEqual || context.height === 0) {\n distHeight = (heightWithoutGutter / colLen);\n }\n }\n return Math.floor(distHeight);\n });\n};\n\n/**\n *\n *\n * @param {*} arr\n * @param {*} beg\n * @param {*} end\n */\nexport const extraCellsRemover = (arr, beg, end) => arr.slice(beg, -end);\n\n/**\n * Creates matrix instancess\n *\n * @param {Array} [arr=[]] mutated arry\n * @param {number} depth depth of the tree\n * @param {Array} matrixInfo Details about the matrix(tree, etc) to be inserted\n * @param {boolean} layout Instance of layout\n */\nexport const createMatrixInstances = (arr = [], depth, matrixInfo, layout) => {\n const breakPointer = layout._breakPointer;\n const config = layout.config();\n const {\n isTransposed\n } = config;\n const {\n tree,\n layoutMatrix\n } = matrixInfo;\n\n if (depth === 0) {\n const brokenMatrix = breakMatrix(tree.matrix, isTransposed, breakPointer);\n arr.push({\n matrix: tree.matrix,\n primaryMatrix: brokenMatrix[0],\n secondaryMatrix: brokenMatrix[1],\n space: tree.space\n });\n return arr;\n }\n const nextLevel = depth - 1;\n tree.values.forEach((e) => {\n createMatrixInstances(arr, nextLevel, {\n tree: e,\n layoutMatrix\n }, layout);\n });\n return arr;\n};\n","import { mergeRecursive } from 'muze-utils';\n\nexport const PROPS = {\n config: {\n sanitization: (context, value) => mergeRecursive(context._config || {}, value)\n },\n maxMeasures: {},\n availableSpace: {},\n logicalSpace: {}\n};\n","import { PRIMARY } from '../enums/constants';\n/**\n *\n *\n */\nexport const defaultConfig = {\n distribution: [],\n classPrefix: 'muze',\n isDistributionEqual: true,\n unitMeasures: {\n height: 100,\n width: 100,\n border: 1\n },\n isTransposed: false,\n facet: PRIMARY,\n extraCellLengths: []\n};\n","import { mergeRecursive, generateGetterSetters } from 'muze-utils';\nimport {\n createTree,\n extraCellsRemover,\n combineMatrices,\n spaceTakenByColumn,\n getDistributedHeight,\n getDistributedWidth,\n spaceTakenByRow,\n computeLogicalSpace,\n createMatrixEachLevel,\n createMatrixInstances\n } from '../utils';\nimport { PROPS } from './props';\nimport { COLUMN_ROOT, ROW_ROOT, HEIGHT, WIDTH } from '../enums/constants';\nimport { defaultConfig } from './default-config';\n\n/**\n * This class used to create column / row matrix for GridLayout\n *\n * @class VisualMatrix\n */\nexport default class VisualMatrix {\n\n /**\n *Creates an instance of VisualMatrix.\n * @param {any} matrix Two set of matrices\n * @param {any} [config={}] Configuration for VisualMatrix\n * @memberof VisualMatrix\n */\n constructor (matrix, config = {}) {\n // Prepare matrices\n this._lastLevelKey = 0;\n this._primaryMatrix = matrix[0] || [];\n this._secondaryMatrix = matrix[1] || [];\n this._maxMeasures = [];\n this._availableSpace = {};\n\n // Store the config\n generateGetterSetters(this, PROPS);\n const defCon = Object.assign({}, this.constructor.defaultConfig());\n this.config(mergeRecursive(defCon, config));\n\n this._breakPointer = this.config().isTransposed ? matrix[0].length :\n (matrix[0].length > 0 ? matrix[0][0].length : 0);\n this._layoutMatrix = combineMatrices([matrix[0] || [], matrix[1] || []], this.config());\n\n // Create Tree\n this._tree = {\n key: this.config().isTransposed ? COLUMN_ROOT : ROW_ROOT,\n values: this.createTree()\n };\n this._logicalSpace = this.setLogicalSpace();\n }\n\n /**\n *\n *\n * @param {*} params\n * @returns\n * @memberof VisualMatrix\n */\n primaryMatrix (...params) {\n if (params.length) {\n return this;\n }\n return this._primaryMatrix;\n }\n\n /**\n *\n *\n * @param {*} params\n * @returns\n * @memberof VisualMatrix\n */\n secondaryMatrix (...params) {\n if (params.length) {\n return this;\n }\n return this._secondaryMatrix;\n }\n\n /**\n *\n *\n * @param {*} params\n * @returns\n * @memberof VisualMatrix\n */\n tree (...params) {\n if (params.length) {\n return this;\n }\n return this._tree;\n }\n\n /**\n *\n *\n * @static\n * @return\n * @memberof VisualMatrix\n */\n static defaultConfig () {\n return defaultConfig;\n }\n\n /**\n *\n *\n * @return\n * @memberof VisualMatrix\n */\n createTree () {\n const { tree, lastLevelKey } = createTree(this);\n this._lastLevelKey = lastLevelKey;\n return tree;\n }\n\n /**\n * Computes the logical space taken by the entire matrixTree\n *\n * @return {Object} Logical space taken\n * @memberof VisualMatrix\n */\n setLogicalSpace () {\n const {\n isTransposed\n } = this.config();\n const matrixTree = this.tree();\n createMatrixEachLevel(matrixTree, isTransposed);\n return computeLogicalSpace(matrixTree, this.config(), this.maxMeasures());\n }\n\n /**\n * Returns the space taken by visual matrix\n *\n * @return {Object} space taken by the matrix\n * @memberof VisualMatrix\n */\n getLogicalSpace () {\n return this.logicalSpace();\n }\n\n /**\n * Sets the provied space to the visual matrix\n *\n * @param {number} width width provided\n * @param {number} height height provided\n * @memberof VisualMatrix\n */\n setAvailableSpace (width, height) {\n this.availableSpace({ width, height });\n const tree = this.tree();\n const heightMeasures = this.populateMaxMeasures(HEIGHT, tree);\n const widthMeasures = this.populateMaxMeasures(WIDTH, tree);\n const depth = this.calculateDepth(widthMeasures, heightMeasures);\n\n this.viewableMatrix = this.createViewPortMatrix(depth);\n this.viewableMeasures = this.redistribute(this.viewableMatrix, width, height);\n return this;\n }\n\n /**\n * Populate the max measures in the array\n *\n * @param {Array} measures array to be filled with max measures\n * @param {Object} matrixTree matrix tree of visual matrix\n * @param {number} measure width or height\n * @param {number} [depth=0] depth of the tree that to be calculated\n * @memberof VisualMatrix\n */\n populateMaxMeasures (type, matrixTree, depth = 0, measures = []) {\n measures[depth] = Math.max(measures[depth] || 0, matrixTree.space[type]);\n if (matrixTree.values) {\n const childDepth = depth + 1;\n matrixTree.values.forEach((child) => {\n if (child.space) {\n measures = this.populateMaxMeasures(type, child, childDepth, measures);\n }\n });\n }\n return measures;\n }\n\n /**\n * Calculates the depth of the tree that can be viewed\n *\n * @param {Array} widthMeasures array of widths\n * @param {Array} heightMeasures array of heights\n * @return {number} depth of the tree\n * @memberof VisualMatrix\n */\n calculateDepth (widthMeasures, heightMeasures) {\n let i;\n let j;\n const { height, width } = this.availableSpace();\n\n for (i = 0; i < heightMeasures.length; i++) {\n if (heightMeasures[i] <= height) break;\n }\n for (j = 0; j < widthMeasures.length; j++) {\n if (widthMeasures[j] <= width) break;\n }\n return Math.min(widthMeasures.length - 1, Math.max(i, j));\n }\n\n /**\n * Redistributes the provied space to all cells\n *\n * @param {*} viewableMatrix current viewport matrix\n * @param {*} width provied width\n * @param {*} height provied height\n * @return {Object} current viewports matrixes with measures\n * @memberof VisualMatrix\n */\n redistribute (viewableMatrix, width, height) {\n let maxHeights = [];\n let maxWidths = [];\n const {\n isTransposed\n } = this.config();\n\n viewableMatrix.forEach((matrixInst) => {\n const matrix = matrixInst.matrix;\n const mWidth = 0;\n const mHeight = 0;\n const options = { mWidth, mHeight, matrix, width, height, maxHeights, maxWidths };\n const maxMeasures = isTransposed ? this.redistributeColumnWise(options) : this.redistributeRowWise(options);\n maxWidths = maxMeasures.maxWidths;\n maxHeights = maxMeasures.maxHeights;\n });\n\n const measurements = viewableMatrix.map((matrixInst, i) => {\n let heightMeasures;\n let columnMeasures;\n const cellDimOptions = { matrixInst, maxWidths, maxHeights, matrixIndex: i };\n const { heights, widths, rowHeights, columnWidths } = this.getCellDimensions(cellDimOptions);\n\n if (!isTransposed) {\n heightMeasures = [height, height];\n columnMeasures = widths;\n } else {\n heightMeasures = heights;\n columnMeasures = [width, width];\n }\n return {\n rowHeights: {\n primary: rowHeights[0],\n secondary: rowHeights[1]\n },\n columnWidths: {\n primary: columnWidths[0],\n secondary: columnWidths[1]\n },\n height: {\n primary: heightMeasures[0],\n secondary: heightMeasures[1]\n },\n width: {\n primary: columnMeasures[0],\n secondary: columnMeasures[1]\n }\n };\n });\n\n return measurements;\n }\n\n /**\n * Gets the viewable measures for the current viewable matrix\n *\n * @return {Object} Set of viewable measures\n * @memberof VisualMatrix\n */\n getViewableSpaces () {\n return this.viewableMeasures;\n }\n\n /**\n * Returns the matrix that can be viewed in the current viewport\n *\n * @return {Array} Set of matrices that can be viewed\n * @memberof VisualMatrix\n */\n getViewableData () {\n return this.viewableMatrix;\n }\n\n /**\n *\n *\n * @return\n * @memberof VisualMatrix\n */\n removeExtraCells () {\n const {\n isTransposed,\n extraCellLengths\n } = this.config();\n const matrix = this._layoutMatrix;\n const tree = mergeRecursive({}, this.tree());\n const begCellLen = extraCellLengths[0];\n const endCellLen = extraCellLengths[1] || Number.NEGATIVE_INFINITY;\n const layoutMatrix = !isTransposed ? extraCellsRemover(matrix, begCellLen, endCellLen) :\n matrix.slice(0).map(e => extraCellsRemover(e, begCellLen, endCellLen));\n\n tree.values = extraCellsRemover(tree.values, begCellLen, endCellLen);\n if (!isTransposed) {\n tree.matrix = extraCellsRemover(tree.matrix, begCellLen, endCellLen);\n } else {\n tree.matrix = tree.matrix.map(e => extraCellsRemover(e, begCellLen, endCellLen));\n }\n return {\n tree,\n layoutMatrix\n };\n }\n\n /**\n * Creates the viewport that can be viewed together\n *\n * @param {number} depth maxDepth that can be viewed in the viewport\n * @return {Array} Set of matrices that can be viewed\n * @memberof VisualMatrix\n */\n createViewPortMatrix (depth) {\n const arr = [];\n createMatrixInstances(arr, depth, this.removeExtraCells(), this);\n return arr;\n }\n\n /**\n * Distibutes the given space row wisely\n *\n * @param {Object} options Redistribution information\n * @memberof VisualMatrix\n */\n redistributeRowWise (options) {\n let cWidths = [];\n let rHeights = [];\n let mHeight = 0;\n const maxMeasures = this.maxMeasures();\n const {\n isDistributionEqual,\n distribution,\n isTransposed,\n gutter\n } = this.config();\n const { matrix, width, height, maxHeights, maxWidths } = options;\n\n mHeight = spaceTakenByColumn(matrix, this._lastLevelKey).height;\n\n const maxWidth = maxMeasures.reduce((t, n) => {\n t += n;\n return t;\n });\n if (maxWidth > 0) {\n cWidths = maxMeasures.map(space => space + (width - maxWidth) * (space / maxWidth));\n } else {\n cWidths = maxMeasures.map(() => 0);\n }\n rHeights = getDistributedHeight({\n matrix,\n cIdx: this._lastLevelKey,\n height: mHeight,\n availableHeight: height,\n isDistributionEqual,\n distribution,\n isTransposed,\n gutter\n });\n maxWidths.push(cWidths);\n maxHeights.push(rHeights);\n return { maxWidths, maxHeights };\n }\n\n /**\n * Distibutes the given space column wisely\n *\n * @param {Object} options Redistribution information\n * @memberof VisualMatrix\n */\n redistributeColumnWise (options) {\n let rHeights = [];\n const { matrix, width, maxHeights, maxWidths } = options;\n const borderWidth = this.config().unitMeasures.border;\n const mWidth = spaceTakenByRow(matrix[this._lastLevelKey]).width;\n const cWidths = getDistributedWidth({\n row: matrix[this._lastLevelKey],\n width: mWidth,\n availableWidth: width\n }, this.config());\n\n matrix.forEach((row, rIdx) => row.forEach((col, cIdx) => {\n const oldLogicalSpace = col.getLogicalSpace().height;\n col.setAvailableSpace(cWidths[cIdx] - borderWidth, oldLogicalSpace);\n rHeights[rIdx] = Math.max(rHeights[rIdx] || 0, col.getLogicalSpace().height);\n }));\n\n if (maxHeights.length > 0) {\n rHeights = rHeights.map((e, i) => Math.max(e, maxHeights[0][i]));\n }\n\n maxHeights.push(rHeights);\n\n for (let x = 0; x < maxHeights.length; x++) {\n maxHeights[x] = rHeights;\n }\n maxWidths.push(cWidths);\n return { maxHeights, maxWidths };\n }\n\n /**\n * Dispatch the calculated cell dimensions to all the cells\n *\n * @param {Object} options cell dimension information\n * @return {Object} row and column heights / widths\n * @memberof VisualMatrix\n */\n getCellDimensions (options) {\n let indices = [];\n let unitMeasures = [];\n let mainMeasures = [];\n let computedMeasures = [];\n const {\n isTransposed,\n unitMeasures: measures\n } = this.config();\n const borderWidth = measures.border;\n const { matrixInst, maxWidths, maxHeights, matrixIndex } = options;\n const matrix = matrixInst.matrix;\n const rowHeights = [[0], [0]];\n const columnWidths = [[0], [0]];\n const heights = [0, 0];\n const widths = [0, 0];\n const breakPointer = this._breakPointer;\n\n matrix.forEach((row, rIdx) => {\n row.forEach((cell, cIdx) => {\n const colHeight = maxHeights[matrixIndex][rIdx] || 0;\n const colWidth = maxWidths[matrixIndex][cIdx];\n\n if (!isTransposed) {\n cell.setAvailableSpace(colWidth, colHeight - borderWidth);\n indices = [rIdx, cIdx];\n unitMeasures = [columnWidths, rowHeights];\n mainMeasures = [widths, heights];\n computedMeasures = [colWidth, colHeight];\n } else {\n cell.setAvailableSpace(colWidth - borderWidth, colHeight);\n indices = [cIdx, rIdx];\n unitMeasures = [rowHeights, columnWidths];\n mainMeasures = [heights, widths];\n computedMeasures = [colHeight, colWidth];\n }\n\n if (indices[0] === 0 && indices[1] < breakPointer) {\n unitMeasures[0][0][indices[1]] = computedMeasures[0];\n mainMeasures[0][0] = (mainMeasures[0][0] || 0) + computedMeasures[0];\n } else if (indices[0] === 0 && indices[1] >= breakPointer) {\n unitMeasures[0][1][indices[1] - breakPointer] = computedMeasures[0];\n mainMeasures[0][1] = (mainMeasures[0][1] || 0) + computedMeasures[0];\n }\n if (indices[1] === this._lastLevelKey) {\n unitMeasures[1][0][indices[0]] = computedMeasures[1];\n unitMeasures[1][1][indices[0]] = computedMeasures[1];\n }\n });\n });\n return {\n heights,\n widths,\n rowHeights,\n columnWidths\n };\n }\n}\n\n","import { HEIGHT, WIDTH, COLUMN, ROW } from '../enums/constants';\n\n/**\n * Gets measurement for an instance of visual matrix\n *\n * @param {Array} matrix instance of visual matrix\n * @param {string} type height/width\n * @return {Object} Logical height/width of the matrix\n */\nexport function getMatrixMeasurement (matrix, type) {\n if (matrix) {\n return matrix.getLogicalSpace()[type];\n }\n return 0;\n}\n\n/**\n * Sets available space for an instance of visual matrix\n *\n * @param {Array} matrix instance of visual matrix\n * @param {string} type height/width\n * @param {number} value Value of measurement\n */\nexport function setMatrixMeasurement (matrix, type, value) {\n if (matrix) {\n const spaces = matrix.getLogicalSpace();\n if (value && spaces[type] !== value) {\n type === HEIGHT ? matrix.setAvailableSpace(spaces.width, value) :\n matrix.setAvailableSpace(value, spaces.height);\n }\n }\n}\n\n/**\n *\n *\n * @param {*} matrix\n * @param {*} widths\n * @param {*} heights\n */\nconst setAvailableSpace = (matrix, widths, heights) => {\n matrix.forEach((row, rIdx) => {\n row.forEach((placeholder, cIdx) => {\n placeholder.setAvailableSpace(widths[cIdx], heights[rIdx]);\n });\n });\n};\n\n/**\n *\n *\n * @param {*} layout\n * @param {*} matrix\n * @param {*} pointer\n * @returns\n */\nconst setViewSpaces = (layout, pointerType, viewSpaces) => {\n let pointer = layout.config()[`${pointerType}Pointer`];\n if (viewSpaces.length - 1 < pointer) {\n pointer = 0;\n layout.config({ [`${pointerType}Pointer`]: pointer });\n }\n return pointer;\n};\n\n/**\n * Computes the measurements of space for all matrices in the\n * layout\n *\n * @param {Object} layout Instance of grid layout\n * @return {Object} set of measurements for the layout\n */\nexport const computeLayoutMeasurements = (layout) => {\n const rowMatrix = layout.rowMatrix();\n const columnMatrix = layout.columnMatrix();\n const centerMatrix = layout.centerMatrix();\n const {\n width,\n height\n } = layout.measurement();\n const {\n border\n } = layout.config();\n const matrices = layout.matrices();\n const {\n top,\n bottom\n } = matrices;\n\n // Get width of row matrix\n const rowMatrixWidth = getMatrixMeasurement(rowMatrix, WIDTH);\n\n // Set width for column matrix\n\n // Border adjustment for each cell in the central matrix\n const borderWidth = border.width;\n\n const columnMatrixWidth = width - rowMatrixWidth - borderWidth;\n setMatrixMeasurement(columnMatrix, WIDTH, columnMatrixWidth);\n const columnViewPages = columnMatrix.getViewableSpaces();\n setViewSpaces(layout, COLUMN, columnViewPages);\n\n // Figuring out total space needed by current view space\n const columnViewSpace = columnViewPages[layout.config().columnPointer];\n\n // Getting height of column matrix\n const columnMatrixHeight = columnViewSpace.height.primary + columnViewSpace.height.secondary;\n\n // Set height for row matrix\n const rowMatrixHeight = height - columnMatrixHeight;\n\n setMatrixMeasurement(rowMatrix, HEIGHT, rowMatrixHeight);\n\n // Get heights of each cell of row matrix\n const rowViewableSpaces = rowMatrix.getViewableSpaces();\n setViewSpaces(layout, ROW, rowViewableSpaces);\n const rowHeights = [].concat(...rowViewableSpaces.map(e => e.rowHeights.primary));\n const rowWidthsPrimary = [].concat(...rowViewableSpaces.map(e => e.columnWidths.primary));\n const rowWidthsSecondary = [].concat(...rowViewableSpaces.map(e => e.columnWidths.secondary));\n const columnViewableSpaces = columnMatrix.getViewableSpaces();\n // Get widths of each cell of column matrix\n const columnWidths = [].concat(...columnViewableSpaces.map(e => e.columnWidths.primary));\n const columnHeightsPrimary = columnViewableSpaces[0].rowHeights.primary;\n\n const columnHeightsSecondary = [].concat(...columnViewableSpaces.map(e => e.rowHeights.secondary));\n\n // Setting the available space for each cell in the centre matrix\n centerMatrix.forEach((matrix, rIdx) => {\n matrix.forEach((placeholder, cIdx) => {\n placeholder.setAvailableSpace(columnWidths[cIdx] - borderWidth, rowHeights[rIdx] - borderWidth);\n });\n });\n setAvailableSpace(top[0], rowWidthsPrimary, columnHeightsPrimary);\n setAvailableSpace(top[2], rowWidthsSecondary, columnHeightsPrimary);\n setAvailableSpace(bottom[0], rowWidthsPrimary, columnHeightsSecondary);\n setAvailableSpace(bottom[2], rowWidthsSecondary, columnHeightsSecondary);\n\n return {\n rowMatrixHeight,\n rowMatrixWidth,\n columnMatrixHeight,\n columnMatrixWidth\n };\n};\n\n/**\n * Gets view matrices based on current pointers for row and column\n *\n * @param {Object} layout instance of layout\n * @param {number} rowPointer current row pointer\n * @param {number} columnPointer current column pointer\n * @return {Object} returns the view matrix and its relevant information\n */\nexport const getViewMatrices = (layout, rowPointer, columnPointer) => {\n const rowMatrix = layout.rowMatrix();\n const columnMatrix = layout.columnMatrix();\n const centerMatrix = layout.centerMatrix();\n const matrices = layout.matrices();\n const rowMatrices = rowMatrix.getViewableData();\n const columnMatrices = columnMatrix.getViewableData();\n const centralMatrixPointer = {\n row: 0,\n column: 0\n };\n\n for (let i = rowPointer - 1; i >= 0; i--) {\n const length = Math.max(rowMatrices[i].primaryMatrix.length,\n rowMatrices[i].secondaryMatrix.length);\n centralMatrixPointer.row += length;\n }\n /* istanbul ignore next */\n for (let i = columnPointer - 1; i >= 0; i--) {\n const matrix = columnMatrices[i];\n const { primaryMatrix, secondaryMatrix } = matrix;\n const length = Math.max(primaryMatrix[0] ? primaryMatrix[0].length : 0,\n secondaryMatrix[0] ? secondaryMatrix[0].length : 0);\n centralMatrixPointer.column += length;\n }\n\n matrices.top[1] = columnMatrices[columnPointer].primaryMatrix;\n matrices.bottom[1] = columnMatrices[columnPointer].secondaryMatrix;\n\n matrices.center[0] = rowMatrices[rowPointer].primaryMatrix;\n matrices.center[2] = rowMatrices[rowPointer].secondaryMatrix;\n\n const rowMatrixLen = Math.max(matrices.center[0].length, matrices.center[2].length);\n /* istanbul ignore next */\n const columnMatrixLen = Math.max(matrices.top[1][0] ? matrices.top[1][0].length : 0, matrices.bottom[1][0] ?\n matrices.bottom[1][0].length : 0);\n matrices.center[1] = centerMatrix.slice(centralMatrixPointer.row, centralMatrixPointer.row + rowMatrixLen)\n .map(matrix => matrix.slice(centralMatrixPointer.column, centralMatrixPointer.column + columnMatrixLen));\n\n return {\n matrices,\n rowPages: rowMatrices.length,\n columnPages: columnMatrices.length\n };\n};\n/**\n * Returns measurements of the cells of the current matrix\n *\n * @param {Object} layout instance of layout\n * @return {Object} returns the measurements for current view matrix\n */\nexport const getViewMeasurements = (layout) => {\n const rowMatrix = layout.rowMatrix();\n const columnMatrix = layout.columnMatrix();\n const {\n width,\n height\n } = layout.measurement();\n const {\n columnPointer,\n rowPointer\n } = layout.config();\n\n const rowMatrixWidth = rowMatrix.getViewableSpaces()[rowPointer].width;\n const { primary: leftWidth, secondary: rightWidth } = rowMatrixWidth;\n\n const columnMatrixHeight = columnMatrix.getViewableSpaces()[columnPointer].height;\n const { primary: topHeight, secondary: bottomHeight } = columnMatrixHeight;\n\n const centerHeight = height - (topHeight + bottomHeight);\n const centerWidth = width - (leftWidth + rightWidth);\n\n return {\n viewWidth: [leftWidth, centerWidth, rightWidth],\n viewHeight: [topHeight, centerHeight, bottomHeight]\n };\n};\n","/**\n * This file declares a table that can be extended to create a Datagrid, crosstab\n * and man other visualzations that require a tabular structure.\n */\n\nimport { getUniqueId } from 'muze-utils';\nimport GenericLayout from '../generic-layout';\nimport { DEFAULT_CONFIGURATION, DEFAULT_MEASUREMENTS } from './defaults';\nimport {\n renderMatrices\n} from './renderer';\nimport { generateVisualMatrices } from './layout-helper';\nimport { computeLayoutMeasurements, getViewMeasurements, getViewMatrices } from './computations';\n/**\n * This class is used to create a tabular structure that\n * can house charts and values.\n *\n * @class GridLayout\n */\nexport default class GridLayout extends GenericLayout {\n\n /**\n * Creates an instance of TableLayout.\n * @param {HTMLElement} matrices Set of upto 9 matrices containing the cells to be rendered\n * @param {HTMLElement} mountPoint DOM element/d3 selection where the layout is to be mounted\n * @param {Object} measurement The dimensions of the layout\n * @param {Object} config external configurations.\n * @memberof GenericLayout\n *\n * measurement : {\n * width : number => width of the container\n * height : number => height of the container\n * unitHeight : number => height of unit of the cells\n * unitWidth : number => width of unit of the cells\n * }\n *\n */\n constructor (matrices, mountPoint, measurement, config) {\n super(mountPoint, measurement, config);\n this.matrices(matrices);\n this.config(this.constructor.defaultConfig());\n this._layoutId = getUniqueId();\n }\n\n /**\n * Returns initial set of measurements for the grid layout\n *\n * @static\n * @return {Object} Returns initial set of measurements\n * @memberof GridLayout\n */\n static defaultMeasurement () {\n return DEFAULT_MEASUREMENTS;\n }\n\n /**\n * Returns initialconfiguration for grid layout\n *\n * @static\n * @return {Object} Returns initial configuration for grid layout\n * @memberof GridLayout\n */\n static defaultConfig () {\n return DEFAULT_CONFIGURATION;\n }\n\n /**\n * This function is used to return an instance of GridLayout\n *\n * @return {GridLayout} Instance of grid layout.\n * @static\n * @memberof GridLayout\n */\n static create () {\n return new GridLayout(null, null, this.defaultMeasurement(), this.defaultConfig());\n }\n\n /**\n * Sets/Gets the matrices for the layout\n *\n * @param {Array} matrices Set of matrices\n * @return {Object} Getter/Setter\n * @memberof GridLayout\n */\n matrices (matrices) {\n if (matrices) {\n this._matrices = generateVisualMatrices(this, matrices);\n return this;\n }\n return super.matrices(matrices);\n }\n\n /**\n * Triggers the computations for the layout based on the matrices available\n * This causes a reflow in the entire layout system.\n *\n * @return {Object} Layout instance\n * @memberof GridLayout\n */\n triggerReflow () {\n computeLayoutMeasurements(this);\n this.setViewInformation();\n return this;\n }\n\n /**\n *\n *\n * @param {*} type\n * @param {*} pageNumber\n * @returns\n * @memberof GridLayout\n */\n gotoPage (type, pageNumber) {\n const pageType = type.toLowerCase();\n const { viewMatricesInfo } = this.getViewInformation();\n const totalPages = viewMatricesInfo[`${pageType}Pages`];\n const pointer = Math.min(Math.max(1, pageNumber), totalPages);\n this.config({\n [`${pageType}Pointer`]: pointer - 1\n });\n this.setViewInformation();\n this.renderGrid();\n return this;\n }\n\n /**\n *\n *\n * @param {*} type\n * @returns\n * @memberof GridLayout\n */\n pages (type) {\n const { viewMatricesInfo } = this.getViewInformation();\n const pageType = type.toLowerCase();\n return {\n totalPages: viewMatricesInfo[`${pageType}Pages`],\n currentPage: this.config()[`${pageType}Pointer`] + 1\n };\n }\n\n /**\n *\n *\n * @returns\n * @memberof GridLayout\n */\n setViewInformation () {\n const {\n rowPointer,\n columnPointer,\n border\n } = this.config();\n const viewMatricesInfo = getViewMatrices(this, rowPointer, columnPointer);\n const layoutDimensions = getViewMeasurements(this);\n layoutDimensions.border = border;\n this.viewInfo = {\n viewMatricesInfo,\n layoutDimensions\n };\n return this;\n }\n\n /**\n *\n *\n * @returns\n * @memberof GridLayout\n */\n getViewInformation () {\n return this.viewInfo;\n }\n\n /**\n * Renders the layout\n *\n * @return {Object} current instance\n * @memberof GridLayout\n */\n renderGrid (mountPoint) {\n this.mountPoint(mountPoint);\n if (!this.mountPoint()) {\n return this;\n }\n const {\n viewMatricesInfo,\n layoutDimensions\n } = this.getViewInformation();\n // Render matrices\n renderMatrices(this, viewMatricesInfo.matrices, layoutDimensions);\n return this;\n }\n}\n","import VisualMatrix from '../visual-matrix/visual-matrix';\n\n/**\n * Generates the set of visual matrices for pagination and layouting algorithms\n *\n * @param {*} context\n * @param {*} matrices\n * @returns\n */\nexport const generateVisualMatrices = (context, matrices) => {\n // Set of matrices for layout is generated starting with the left matrix\n let leftMatrix = [];\n let rightMatrix = [];\n let topMatrix = [];\n let bottomMatrix = [];\n let begColCells;\n let endColCells;\n const {\n isRowSizeEqual,\n isColumnSizeEqual,\n gutterSpace,\n distribution,\n border,\n breakPage\n } = context.config();\n const {\n minUnitHeight,\n minUnitWidth\n } = context.measurement();\n const { top, center, bottom } = matrices;\n const [topLeft, topColumns, topRight] = top;\n const [leftRows, valueMatrix, rightRows] = center;\n const [bottomLeft, bottomColumns, bottomRight] = bottom;\n\n if (leftRows.length > 0) {\n // If no left matrix is present, context will be empty\n leftMatrix = [...topLeft, ...leftRows, ...bottomLeft];\n }\n if (rightRows.length > 0) {\n // If no right matrix is present, context will be empty\n rightMatrix = [...topRight, ...rightRows, ...bottomRight];\n }\n if (topColumns.length > 0 && topColumns[0].length > 0) {\n // If no top matrix is present, context will be empty\n topMatrix = topColumns.map((d, i) => [...topLeft[i], ...d, ...topRight[i]]);\n }\n if (bottomColumns.length > 0 && bottomColumns[0].length > 0) {\n // If no bottom matrix is present, context will be empty\n bottomMatrix = bottomColumns.map((d, i) => [...bottomLeft[i], ...d, ...bottomRight[i]]);\n }\n context.rowMatrix(new VisualMatrix([leftMatrix, rightMatrix], {\n isDistributionEqual: isRowSizeEqual,\n distribution: distribution.rows,\n gutter: gutterSpace.rows,\n unitMeasures: {\n width: minUnitWidth,\n height: minUnitHeight,\n border: border.width\n },\n breakPage: breakPage.rows.map(e => e + Math.max(topLeft.length, topRight.length)),\n extraCellLengths: [topLeft.length, bottomLeft.length]\n }));\n\n if (topLeft.length > 0) {\n begColCells = topLeft[0].length;\n } else {\n begColCells = bottomLeft.length > 0 ? bottomLeft[0].length : 0;\n }\n\n if (topRight.length > 0) {\n endColCells = topRight[0].length;\n } else {\n endColCells = bottomRight.length > 0 ? bottomRight[0].length : 0;\n }\n\n context.columnMatrix(new VisualMatrix([topMatrix, bottomMatrix], {\n isDistributionEqual: isColumnSizeEqual,\n distribution: distribution.columns,\n gutter: gutterSpace.columns,\n isTransposed: true,\n unitMeasures: {\n width: minUnitWidth,\n height: minUnitHeight,\n border: border.width\n },\n breakPage: breakPage.columns,\n extraCellLengths: [begColCells, endColCells]\n }));\n context.centerMatrix(valueMatrix);\n\n return matrices;\n};\n","import { ERROR_MSG } from 'muze-utils';\n/**\n * An Interface to be implemented if the transaction support is necessary. This class ensures reactivity to\n * global properties.\n */\nexport default class TransactionSupport {\n /**\n * Property accessor for data member of the class. Data is passed to the system by calling this method.\n */\n data () {\n throw new Error(ERROR_MSG.INTERFACE_IMPl);\n }\n\n /**\n * Property accessor for width of the class. Width is passed as an integer.\n */\n width () {\n throw new Error(ERROR_MSG.INTERFACE_IMPl);\n }\n\n /**\n * Property accessor for height of the class. Height is passed as an integer.\n */\n height () {\n throw new Error(ERROR_MSG.INTERFACE_IMPl);\n }\n\n /**\n * Property accessor for config of the class. Config is passed as an object.\n */\n config () {\n throw new Error(ERROR_MSG.INTERFACE_IMPl);\n }\n}\n","import { TOP, BOTTOM, LEFT, TITLE, SUB_TITLE, GROUP, LAYOUT, LEGEND } from '../constants';\n\n/**\n *\n *\n * @param {*} context\n * @returns\n */\nexport const arrangeComponents = (context) => {\n const legendConfig = context.config().legend;\n const titleConfig = context.title()[1];\n const subtitleConfig = context.subtitle()[1];\n const titleLayouts = {\n [`${TOP}-${TOP}`]: [TITLE, SUB_TITLE, GROUP],\n [`${BOTTOM}-${BOTTOM}`]: [GROUP, SUB_TITLE, TITLE],\n [`${TOP}-${BOTTOM}`]: [TITLE, GROUP, SUB_TITLE],\n [`${BOTTOM}-${TOP}`]: [SUB_TITLE, GROUP, TITLE]\n };\n const legendLayouts = [\n [LEGEND, LAYOUT],\n [LAYOUT, LEGEND]\n ];\n const titlePosition = titleConfig.position || TOP;\n const subtitlePosition = subtitleConfig.position || TOP;\n\n return {\n headers: titleLayouts[`${titlePosition}-${subtitlePosition}`],\n legends: legendConfig.position === LEFT || legendConfig.position === TOP ?\n legendLayouts[0] : legendLayouts[1]\n };\n};\n","/**\n * Flag to specify whether direction is vertical.\n */\nexport const MARGIN = 'margin';\nexport const LEFT = 'left';\nexport const RIGHT = 'right';\nexport const BOTTOM = 'bottom';\nexport const TOP = 'top';\nexport const SPACE_FIXER = 'spaceFixer';\nexport const CLASSPREFIX = 'muze';\nexport const VERTICAL_ALIGN = 'verticalAlign';\nexport const TEXT_ALIGN = 'textAlign';\nexport const IS_OFFSET = 'isOffset';\nexport const MIDDLE = 'middle';\nexport const BASELINE = 'baseline';\nexport const SHOW = 'show';\nexport const CENTER = 'center';\nexport const TEXT = 'text';\nexport const HEADER = 'header';\nexport const HEIGHT = 'height';\nexport const WIDTH = 'width';\nexport const DATA = 'data';\nexport const AXES = 'axes';\nexport const FACET_BY_FIELDS = 'facetByFields';\nexport const FIELDS = 'fields';\nexport const TRANSFORM = 'transform';\nexport const LAYER_DEF = 'layerDef';\nexport const CONFIG = 'config';\nexport const DETAIL_FIELDS = 'detailFields';\n\nexport const TEXT_CELL = 'text-cell';\nexport const AXIS_CELL = 'axis-cell';\nexport const GEOM_CELL = 'geom-cell';\nexport const BLANK_CELL = 'blank-cell';\n","// eneum to refer to simple cell\nexport const SIMPLE = 'simple';\n// eneum to refer to header cell\nexport const TEXT = 'text';\n// enum to refer to axis cell\nexport const AXIS = 'axis';\n// enum to refer to visual cell\nexport const GEOM = 'geom';\n// enum to refer blank cell\nexport const BLANK = 'blank';\n","import {\n ERROR_MSG,\n getUniqueId,\n mergeRecursive\n} from 'muze-utils';\nimport { SIMPLE } from './enums/cell-type';\n\n/**\n * This file declares a class that is used as an interface to create new\n * SimpleCell elements.\n * @module SimpleCell\n */\n/**\n * Base class for all table cells.\n *\n * @interface\n * @class SimpleCell\n */\nclass SimpleCell {\n\n /**\n * Creates an instance of SimpleCell.\n *\n * @param {*} config The input configuration.\n * @memberof SimpleCell\n */\n constructor (config) {\n this._id = getUniqueId();\n\n const defConfig = mergeRecursive({}, this.constructor.defaultConfig());\n this._config = mergeRecursive(defConfig, config || {});\n\n this._mount = null;\n }\n\n /**\n * Returns the type of the placehlder.\n *\n * @readonly\n * @memberof SimpleCell\n */\n get type () {\n return SIMPLE;\n }\n\n /**\n * Returns the type of the placehlder.\n *\n * @readonly\n * @memberof SimpleCell\n * @return {Object} Default config for the placeholder\n */\n static defaultConfig () {\n return {};\n }\n\n /**\n * Returns the value contained by the SimpleCell.\n *\n * @memberof SimpleCell\n */\n valueOf () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Returns a unique identifier for the instance used\n * to control selective rendering.\n *\n * @memberof SimpleCell\n */\n id () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Returns a serialized representation of the instance.\n *\n * @memberof SimpleCell\n */\n serialize () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Returns an object with width and height fields\n * specifying the space taken up by this metod.\n *\n * @memberof SimpleCell\n */\n getLogicalSpace () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Method used to set the space available to render the SimpleCell\n *\n * @param {number} width The available width.\n * @param {number} height The available height.\n * @memberof SimpleCell\n */\n setAvailableSpace () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Render the SimpleCell inthe supplied mount point.\n *\n * @param {HTMLElement} mount The mount point to render in.\n * @memberof SimpleCell\n */\n render () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Render the SimpleCell inthe supplied mount point.\n *\n * @param {HTMLElement} mount The mount point to render in.\n * @memberof SimpleCell\n */\n remove () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n}\n\nexport default SimpleCell;\n","/**\n * This file exports variables that are used as defaults for\n * the placeholders\n */\nimport * as CONSTANTS from './constants';\n\n /**\n * Default Configuration for the cells\n * @return {Object} Default configuration\n */\nexport const DEFAULT_CONFIG = {\n [CONSTANTS.MARGIN]: {\n [CONSTANTS.LEFT]: 0,\n [CONSTANTS.RIGHT]: 0,\n [CONSTANTS.TOP]: 0,\n [CONSTANTS.BOTTOM]: 0\n },\n [CONSTANTS.SPACE_FIXER]: 2,\n [CONSTANTS.IS_OFFSET]: false,\n [CONSTANTS.VERTICAL_ALIGN]: CONSTANTS.TOP,\n [CONSTANTS.TEXT_ALIGN]: CONSTANTS.CENTER,\n [CONSTANTS.SHOW]: true\n};\n","import { mergeRecursive } from 'muze-utils';\nimport { GEOM, TEXT, AXIS, BLANK } from './enums/cell-type';\n\nconst DEFAULT_PROPS = {\n mount: {},\n availHeight: {},\n availWidth: {},\n config: {\n sanitization: (context, value) => mergeRecursive(context._config, value)\n },\n logicalSpace: {},\n source: {}\n};\n\nconst geomProps = {\n data: {},\n caption: {},\n config: {},\n axes: {\n sanitization: (context, value) => Object.assign(context._axes, value)\n },\n facetByFields: {},\n fields: {},\n transform: {},\n layerDef: {},\n detailFields: {}\n};\n\nexport const PROPS = {\n [TEXT]: DEFAULT_PROPS,\n [GEOM]: mergeRecursive(geomProps, DEFAULT_PROPS),\n [AXIS]: DEFAULT_PROPS,\n [BLANK]: DEFAULT_PROPS\n};\n","/**\n * This file declares a class that represents a table cell\n * used to house an axis.\n * @module VisualCell\n */\nimport { selectElement, makeElement, generateGetterSetters } from 'muze-utils';\nimport { CLASSPREFIX, HEIGHT, WIDTH, AXIS_CELL } from './enums/constants';\nimport SimpleCell from './simple-cell';\nimport { DEFAULT_CONFIG } from './enums/defaults';\nimport { AXIS } from './enums/cell-type';\nimport { PROPS } from './props';\n\n/**\n * Computes the logical space of the an axis instance within an axis cell\n *\n * @param {Object} context Required to get the needed parameters to compute axis space\n * @return {Object} Returns the logical space for axis\n */\nconst computeAxisSpace = (context) => {\n let logicalWidth;\n let logicalHeight;\n const axis = context.source();\n const {\n spaceFixer,\n margin\n } = context.config();\n const {\n width,\n height\n } = axis.getLogicalSpace();\n const {\n show\n } = axis.config();\n if (show === true) {\n logicalHeight = Math.floor(height + margin.top + margin.bottom + spaceFixer);\n logicalWidth = Math.floor(width + margin.left + margin.right + spaceFixer);\n } else {\n [logicalWidth, logicalHeight] = [width, height];\n }\n return {\n width: logicalWidth,\n height: logicalHeight\n };\n};\n\n/**\n * Represents an axis cell.\n *\n * @class Axis\n */\nclass AxisCell extends SimpleCell {\n\n /**\n * Creates an instance of AxisCell.\n *\n * @param {Object} config The input config.\n * @memberof AxisCell\n */\n constructor (config) {\n super(config);\n\n this._axis = null;\n this._availHeight = null;\n this._availWidth = null;\n this._logicalSpace = null;\n\n generateGetterSetters(this, PROPS[AXIS]);\n }\n\n /**\n * return the type pf SimpleCell cell.\n *\n * @readonly\n * @memberof AxisCell\n */\n get type () {\n return AXIS;\n }\n\n /**\n * This method return the value conatined by this SimpleCell.\n *\n * @return {SimpleAxis | ColorAxis} Instance of SimpleAxis or ColorAxis.\n * @memberof AxisCell\n */\n valueOf () {\n return this.source().id;\n }\n\n /**\n * This method return the unique identififer of the axis\n *\n * @return {string} Id of the axis.\n * @memberof AxisCell\n */\n get id () {\n return this._id;\n }\n\n /**\n * Retrns the serialized representation of this cell.\n *\n * @return {Object}Object with serializable props.\n * @memberof AxisCell\n */\n serialize () {\n return {\n type: AXIS,\n axis: this.source().serialize()\n };\n }\n\n /**\n * return the default configuration for the text cell\n *\n * @static\n * @return {Object} Default configuration of the cell\n * @memberof AxisCell\n */\n static defaultConfig () {\n return DEFAULT_CONFIG;\n }\n\n /**\n * return the space taken up by an axis element in the dom.\n *\n * @return {Object} Object with width and height fields.\n * @memberof AxisCell\n */\n getLogicalSpace () {\n if (!this.logicalSpace()) {\n this.logicalSpace(computeAxisSpace(this));\n }\n return this.logicalSpace();\n }\n\n /**\n * This method is used to set the space availiable to render\n * the SimpleCell.\n *\n * @param {number} width The width of SimpleCell.\n * @param {number} height The height of SimpleCell.\n * @return {Instance} Returns current Instance\n * @memberof AxisCell\n */\n setAvailableSpace (width, height) {\n this.availWidth(width);\n this.availHeight(height);\n const {\n margin,\n isOffset\n } = this.config();\n this.source().setAvailableSpace(width, height, margin, isOffset);\n this.logicalSpace(null);\n this.source().logicalSpace(null);\n return this;\n }\n\n /**\n * This method is used to render the axis inside the axis cell.\n *\n * @param {HTMLElement} mount The mount point.\n * @return {Selection} node where axis mounted\n * @memberof AxisCell\n */\n /* istanbul ignore next */render (mount) {\n if (!mount) {\n return this;\n }\n const axis = this.source();\n const availHeight = this.availHeight();\n const availWidth = this.availWidth();\n const {\n margin\n } = this.config();\n const {\n top,\n bottom,\n left,\n right\n } = margin;\n const {\n show\n } = axis.config();\n const wrapperDiv = makeElement(selectElement(mount), 'div', [this], `${CLASSPREFIX}-${AXIS_CELL}`);\n const selection = makeElement(wrapperDiv, 'svg', [1], `${CLASSPREFIX}-axis-container`);\n\n this.mount(mount);\n if (availWidth === 0 || !availWidth) {\n selection.attr(WIDTH, `${0}px`);\n }\n if (availHeight === 0 || !availHeight) {\n selection.attr(HEIGHT, `${0}px`);\n }\n wrapperDiv.style(WIDTH, `${show ? availWidth : 0}px`)\n .style(HEIGHT, `${show ? availHeight : 0}px`)\n .style('margin-top', top)\n .style('margin-bottom', bottom)\n .style('margin-left', left)\n .style('margin-right', right);\n\n axis.mount(selection.node());\n return selection;\n }\n\n /**\n * Disposes the cell\n *\n * @return {Instance} Current instance of AxisCell\n * @memberof AxisCell\n */\n remove () {\n this.source() && this.source().remove();\n this.mount() && this.mount().remove();\n return this;\n }\n}\n\nexport default AxisCell;\n\n","/**\n * This file declares a class that represents a BLANK element in a table.\n * @module VisualCell\n */\nimport {\n selectElement,\n makeElement,\n applyStyle,\n generateGetterSetters\n } from 'muze-utils';\nimport SimpleCell from './simple-cell';\nimport { CLASSPREFIX, BLANK_CELL } from './enums/constants';\nimport { BLANK } from './enums/cell-type';\nimport { DEFAULT_CONFIG } from './enums/defaults';\nimport { PROPS } from './props';\n\n/**\n * Represents a table haeder.\n *\n * @class BLANK\n */\nclass BlankCell extends SimpleCell {\n\n /**\n * Creates an instance of BLANK.\n * @param {Object} config The input configuration.\n * @memberof BLANK\n */\n constructor (config) {\n super(config);\n\n generateGetterSetters(this, PROPS[BLANK]);\n }\n\n /**\n * return the type pf SimpleCell cell.\n *\n * @readonly\n * @memberof BlankCell\n */\n get type () {\n return BLANK;\n }\n\n /**\n * This method return the value contained by this SimpleCell.\n *\n * @return {string} The text value contained by this cell.\n * @memberof BlankCell\n */\n valueOf () {\n return this.id;\n }\n\n /**\n * return the default configuration for the text cell\n *\n * @static\n * @return {Object} Default configuration of the cell\n * @memberof BlankCell\n */\n static defaultConfig () {\n return DEFAULT_CONFIG;\n }\n\n /**\n * This method is used to return a unique identifier for\n * the BLANK cell.\n *\n * @return {string} The unique identifier for the BLANK.\n * @memberof BlankCell\n */\n get id () {\n return this._id;\n }\n\n /**\n * This method is used to obtain a serialized representation of this instance.\n *\n * @return {Object} Object with serilizable props.\n * @memberof BLANK\n */\n serialize () {\n return {\n type: BLANK\n };\n }\n\n /**\n * This method return the space taken up\n * by the text with the style applied.\n *\n * @return {Object} width and height taken up by the text.\n * @memberof BLANK\n */\n getLogicalSpace () {\n if (!this.logicalSpace()) {\n return {\n width: this.width || 0,\n height: this.height || 0\n };\n }\n return this.logicalSpace();\n }\n\n /**\n * This method is used to set the available space.\n *\n * @param {number} width The available width.\n * @param {number} height The available height.\n * @return {Instance} Returns current Instance\n * @memberof BlankCell\n */\n setAvailableSpace (width, height) {\n this.availWidth(width);\n this.availHeight(height);\n this.logicalSpace(null);\n return this;\n }\n\n /**\n * This method is used to render the BLANK cell inside\n * the provided mount point.\n *\n * @param {HTMLElement} mount The mount point for this cell.\n * @return {Instance} Returns current Instance\n * @memberof BLANK\n */\n /* istanbul ignore next */render (mount) {\n if (mount) {\n const { style } = this.config();\n // append span element to mount point\n this.mount(mount);\n const container = selectElement(mount);\n const elem = makeElement(container, 'div', [this.id]);\n elem.classed(`${CLASSPREFIX}-${BLANK_CELL}`, true);\n elem.style('width', `${this.availWidth()}px`);\n elem.style('height', `${this.availHeight()}px`);\n elem.html('');\n // apply style on the returned element\n if (style) {\n applyStyle(elem, style);\n }\n } return this;\n }\n\n /**\n * Removes the cell(Disposal)\n *\n * @return {Instance} Returns current Instance\n * @memberof BlankCell\n */\n remove () {\n this.mount() && this.mount().remove();\n return this;\n }\n }\nexport default BlankCell;\n","/**\n * This file declares a class that represents a Text element in a table.\n * @module VisualCell\n */\n\nimport {\n selectElement,\n makeElement,\n getSmartComputedStyle,\n generateGetterSetters\n} from 'muze-utils';\nimport SimpleCell from './simple-cell';\nimport { TEXT } from './enums/cell-type';\nimport { PROPS } from './props';\nimport { DEFAULT_CONFIG } from './enums/defaults';\nimport { CLASSPREFIX, TOP, BOTTOM, LEFT, RIGHT, HEADER, WIDTH, TEXT_CELL } from './enums/constants';\nimport './text-cell.scss';\n\n/**\n* Computes the Logical Space for the text\n*\n* @param {Object} context Required to get the needed parameters to compute text space\n* @return {Object} Logical space taken up by text\n* @memberof TextCell\n*/\nconst computeTextSpace = (context) => {\n const { labelManager } = context.dependencies();\n const space = labelManager.getOriSize(context.source());\n const {\n margin,\n show\n } = context.config();\n\n labelManager.setStyle(context._computedStyle);\n if (show) {\n return {\n width: space.width + margin.left + margin.right + context._minTickDiff.width,\n height: space.height + margin.top + margin.bottom + context._minTickDiff.height\n };\n } return {\n width: 0,\n height: 0\n };\n};\n\n/**\n * Represents a table haeder.\n *\n * @class Text\n */\nclass TextCell extends SimpleCell {\n\n /**\n * Creates an instance of Text.\n * @param {Object} config The input configuration.\n * @param {string} dependencies Dependencies for the class(labelManager)\n * @memberof Text\n */\n constructor (config, dependencies) {\n super(config);\n\n this._dependencies = dependencies;\n this._className = this._config.className ||\n (this._config.type === HEADER ? `${CLASSPREFIX}-${HEADER}-cell` : `${CLASSPREFIX}-${TEXT}-cell`);\n this._computedStyle = getSmartComputedStyle(selectElement('body'), this._className);\n this._dependencies.labelManager.setStyle(this._computedStyle);\n this._minTickDiff = this._dependencies.labelManager.getOriSize('WW');\n\n generateGetterSetters(this, PROPS[TEXT]);\n }\n\n /**\n * return the type pf SimpleCell cell.\n *\n * @readonly\n * @memberof TextCell\n */\n get type () {\n return TEXT;\n }\n\n /**\n * This method return the value contained by this SimpleCell.\n *\n * @return {string} The text value contained by this cell.\n * @memberof TextCell\n */\n valueOf () {\n return this.source();\n }\n\n /**\n * This method is used to return a unique identifier for\n * the Text cell.\n *\n * @return {string} The unique identifier for the Text.\n * @memberof TextCell\n */\n get id () {\n return this._id;\n }\n\n /**\n * Returns the dependencies of the instance\n *\n * @return {Object} Dependencies needed by the class\n * @memberof TextCell\n */\n dependencies () {\n return this._dependencies;\n }\n\n /**\n * This method is used to obtain a serialized representation of this instance.\n *\n * @return {Object} Object with serilizable props.\n * @memberof TextCell\n */\n serialize () {\n return {\n text: this.source(),\n type: TEXT\n };\n }\n\n /**\n * return the default configuration for the text cell\n *\n * @static\n * @return {Object} Default configuration of the cell\n * @memberof TextCell\n */\n static defaultConfig () {\n return DEFAULT_CONFIG;\n }\n\n /**\n * This method return the space taken up\n * by the text with the style applied.\n *\n * @return {Object} width and height taken up by the text.\n * @memberof Text\n */\n getLogicalSpace () {\n if (!this.logicalSpace()) {\n this.logicalSpace(computeTextSpace(this));\n }\n return this.logicalSpace();\n }\n\n /**\n * This method is used to set the available space.\n *\n * @param {number} width The available width.\n * @param {number} height The available height.\n * @return {Instance} Returns current Instance\n * @memberof TextCell\n */\n setAvailableSpace (width, height) {\n this.availWidth(width);\n this.availHeight(height);\n this.logicalSpace(null);\n return this;\n }\n\n /**\n * This method is used to render the Text cell inside\n * the provided mount point.\n *\n * @param {HTMLElement} mount The mount point for this cell.\n * @return {Instance} Returns current Instance\n * @memberof Text\n */\n render (mount) {\n const availWidth = this.availWidth();\n const {\n margin,\n show,\n verticalAlign,\n textAlign\n } = this.config();\n\n this.mount(mount);\n if (show) {\n const container = selectElement(mount);\n const elem = makeElement(container, 'div', [this.id], `${CLASSPREFIX}-${TEXT_CELL}`);\n\n container.style('vertical-align', verticalAlign);\n elem.classed(this._className, true);\n // apply style on the returned element\n elem.style(WIDTH, availWidth ? `${availWidth}px` : '100%');\n [TOP, BOTTOM, LEFT, RIGHT].forEach((type) => {\n elem.style(`padding-${type}`, `${margin[type]}px`);\n });\n elem.style('text-align', textAlign);\n elem.style('display', 'inline');\n // set the text as the innerHTML\n elem.html(this.source());\n }\n return this;\n }\n\n /**\n * Disposes the cell\n *\n * @return {Instance} Returns current Instance\n * @memberof TextCell\n */\n remove () {\n this.mount() && this.mount().remove();\n return this;\n }\n }\n\nexport default TextCell;\n","/**\n * This file declares a class that is used to represent a table cell\n * that houses a visual unit.\n * @module VisualCell\n */\n\nimport { selectElement, makeElement, generateGetterSetters } from 'muze-utils';\nimport SimpleCell from './simple-cell';\nimport { GEOM } from './enums/cell-type';\nimport { PROPS } from './props';\nimport {\n CLASSPREFIX, HEIGHT, WIDTH, DATA, AXES, FACET_BY_FIELDS, FIELDS, TRANSFORM, LAYER_DEF, CONFIG, GEOM_CELL,\n DETAIL_FIELDS\n} from './enums/constants';\nimport { DEFAULT_CONFIG } from './enums/defaults';\n\n/**\n * Calculates the logical space of the cell\n *\n * @param {Object} context Required to get the needed parameters to compute unit space\n * @return {Object} Logical space taken up by the unit\n * @memberof GeomCell\n */\nconst computeGeomSpace = (context) => {\n const config = context.source().config();\n const { width, height } = config;\n return {\n width: Math.ceil(width),\n height: Math.ceil(height + context.getCaptionSpace().height)\n };\n};\n\n /**\n * This class represents a SimpleCell for visual unit.\n *\n * @class GeomCell\n */\nclass GeomCell extends SimpleCell {\n\n /**\n * Creates an instance of GeomCell.\n * @param {Object} config The input configuration.\n * @memberof GeomCell\n */\n constructor (config) {\n super(config);\n\n this._unit = null;\n this._layers = null;\n this._axes = {};\n this._datamodel = {};\n this._facetByFields = {};\n this._fields = null;\n this._transform = null;\n this._caption = null;\n\n generateGetterSetters(this, PROPS[GEOM]);\n }\n\n /**\n * return the type pf SimpleCell cell.\n *\n * @readonly\n * @memberof GeomCell\n */\n get type () {\n return GEOM;\n }\n\n /**\n * This method return the value contained by this cell.\n *\n * @return {VisualUnit} Instance of visual unit contained by visual unit.\n * @memberof GeomCell\n */\n valueOf () {\n return this.source();\n }\n\n /**\n * This method is used to return the id of the\n * visual unit housed by this cell.\n *\n * @return {string} The unique id of the visual unit.\n * @memberof GeomCell\n */\n get id () {\n return this.source().id();\n }\n\n /**\n * This method return a serialized representation of\n * this instance.\n *\n * @return {Object} Object with serializable props.\n * @memberof GeomCell\n */\n serialize () {\n return {\n type: GEOM,\n unit: this.source().serialize(),\n caption: this.caption()\n };\n }\n\n /**\n * return the default configuration for the geom cell\n *\n * @static\n * @return {Object} Default configuration of the cell\n * @memberof GeomCell\n */\n static defaultConfig () {\n return DEFAULT_CONFIG;\n }\n\n /**\n * Updates the model based on the changed parameters\n *\n * @return {Instance} return instance\n * @memberof GeomCell\n */\n updateModel () {\n const unit = this.source();\n unit.lockModel();\n [DATA, AXES, FACET_BY_FIELDS, FIELDS, TRANSFORM, LAYER_DEF, CONFIG, DETAIL_FIELDS].forEach((prop) => {\n this[prop]() && unit[prop](this[prop]());\n });\n unit.unlockModel();\n return this;\n }\n\n /**\n * It gives the space taken by the caption of the unit\n *\n * @return {Object} return the space taken by caption\n * @memberof GeomCell\n */\n getCaptionSpace () {\n const caption = this.caption();\n\n let captionSpace = { width: 0, height: 0 };\n if (caption) {\n captionSpace = caption.getLogicalSpace();\n }\n return captionSpace;\n }\n\n /**\n * return the space taken up by the element in the dom.\n *\n * @return {Object} Object with width and height fields.\n * @memberof GeomCell\n */\n getLogicalSpace () {\n if (!this.logicalSpace()) {\n this.logicalSpace(computeGeomSpace(this));\n }\n return this.logicalSpace();\n }\n\n /**\n * This method is used to set the space available to\n * render the SimpleCell.\n *\n * @param {number} width The available width.\n * @param {number} height The available height.\n * @return {Instance} Returns current Instance\n * @memberof GeomCell\n */\n setAvailableSpace (width, height) {\n const unit = this.source();\n\n this.availWidth(width);\n this.availHeight(height);\n unit.lockModel();\n unit.width(width).height(height - this.getCaptionSpace().height);\n unit.unlockModel();\n this.logicalSpace(null);\n return this;\n }\n\n /**\n * his method is used to render the visual unit inside the provided cell.\n *\n * @param {HTMLElement} mount The mountpoint in the table.\n * @return {Instance} Returns current Instance\n * @memberof GeomCell\n */\n render (mount) {\n if (mount) {\n this.mount(mount);\n const availHeight = this.availHeight();\n const availWidth = this.availWidth();\n const caption = this.caption();\n const wrapperDiv = makeElement(selectElement(mount), 'div', [1], `${CLASSPREFIX}-${GEOM_CELL}`);\n\n if (caption) {\n const captionDom = makeElement(wrapperDiv, 'div', [caption], `${CLASSPREFIX}-unit-caption`).node();\n caption.render(captionDom);\n }\n const selection = makeElement(wrapperDiv, 'div', [1], `${CLASSPREFIX}-unit`);\n wrapperDiv.style(WIDTH, `${availWidth}px`).style(HEIGHT, `${availHeight}px`);\n selection.style(WIDTH, `${availWidth}px`)\n .style(HEIGHT, `${availHeight - this.getCaptionSpace().height}px`);\n this.source().mount(selection.node());\n }\n return this;\n }\n\n /**\n * Disposes the cell\n *\n * @return {Object} Current instance\n * @memberof GeomCell\n */\n remove () {\n this.mount() && this.mount().remove();\n this.source().remove();\n return this;\n }\n}\n\nexport default GeomCell;\n","import AxisCell from './axis-cell';\nimport BlankCell from './blank-cell';\nimport TextCell from './text-cell';\nimport GeomCell from './geom-cell';\nimport SimpleCell from './simple-cell';\n\nimport * as CONSTANTS from './constants';\n\nexport const DEFAULT_PLACEHOLDERS = {\n [CONSTANTS.SIMPLE_CELL]: SimpleCell,\n [CONSTANTS.TEXT_CELL]: TextCell,\n [CONSTANTS.AXIS_CELL]: AxisCell,\n [CONSTANTS.GEOM_CELL]: GeomCell,\n [CONSTANTS.BLANK_CELL]: BlankCell\n};\n\n","export const SIMPLE_CELL = 'SimpleCell';\nexport const TEXT_CELL = 'TextCell';\nexport const AXIS_CELL = 'AxisCell';\nexport const BLANK_CELL = 'BlankCell';\nexport const GEOM_CELL = 'GeomCell';\n\n","import { DEFAULT_PLACEHOLDERS } from './defaults';\n\n/**\n * Creates a registry for the cells, which can be used for\n * setting a new cell or getting the registered cells\n *\n * @return {Object} Setters and getters for registered cells\n */\nconst cellRegistry = () => {\n const reg = DEFAULT_PLACEHOLDERS;\n return {\n set: (key, def) => {\n if (key in reg) {\n reg[key] = def;\n }\n return cellRegistry;\n },\n get: () => reg\n };\n};\nexport default cellRegistry;\n","import { TextCell } from '@chartshq/visual-cell';\nimport { escapeHTML } from 'muze-utils';\n\n/**\n *\n *\n * @param {*} rawContent\n * @returns\n */\nconst resolveTitleSubTitleContent = (rawContent) => {\n if (typeof rawContent === 'function' && !rawContent._sanitize) {\n return rawContent();\n }\n return escapeHTML(rawContent());\n};\n\n/**\n *\n *\n * @param {*} config\n * @param {*} cellType\n * @param {*} labelManager\n * @param {*} prevCell\n * @returns\n */\nconst headerCreator = (config, cellType, labelManager, prevCell) => {\n const {\n content\n } = config;\n const cell = prevCell || new TextCell({ type: cellType }, { labelManager });\n\n cell.source(content);\n\n return {\n height: cell.getLogicalSpace().height,\n cell\n };\n};\n\n/**\n *\n *\n * @param {*} config\n * @param {*} type\n * @param {*} labelManager\n * @param {*} cell\n * @returns\n */\nconst createHeading = (config, type, labelManager, prevCell) => {\n if (!config) { return ''; }\n\n return headerCreator(\n config,\n type === 'title' ? 'header' : 'text',\n labelManager,\n prevCell\n );\n};\n\n/**\n *\n *\n * @param {*} context\n */\nexport const createHeaders = (context, canvasHeight, canvasWidth) => {\n let headerHeight = 0;\n const headers = {};\n\n canvasHeight >= 200 && canvasWidth >= 200 && ['title', 'subtitle'].forEach((type) => {\n const headerOptions = context[type]();\n const content = resolveTitleSubTitleContent(headerOptions[0]);\n if (content.length) {\n const config = headerOptions[1];\n\n config.width = context.width();\n config.content = content;\n\n const { height, cell } = createHeading(config, type, context.dependencies().smartlabel,\n context[`${type}Cell`]);\n\n headers[`${type}Cell`] = cell;\n context._composition[type] = cell;\n headerHeight += height + config.padding;\n }\n });\n return { headerHeight, headers };\n};\n\n","import { TextCell, AxisCell } from '@chartshq/visual-cell';\nimport {\n VERTICAL, HORIZONTAL, LEFT, RIGHT, LEGEND_TYPE_MAP, PADDING, BORDER, MARGIN\n} from '../constants';\n\n/**\n *\n *\n * @param {*} legendConfig\n * @param {*} canvases\n * @returns\n */\nexport const legendCreator = (canvas) => {\n let LegendCls;\n const dataset = [];\n const axes = canvas.getRetinalAxes();\n\n Object.entries(axes).forEach((axisInfo) => {\n const scale = axisInfo[1][0];\n const scaleType = axisInfo[0];\n const scaleProps = canvas[scaleType]();\n\n if (scaleProps.field) {\n const {\n type,\n step\n } = scale.config();\n\n const stepMapper = typeof step === 'boolean' ? step : false;\n LegendCls = LEGEND_TYPE_MAP[`${type}-${stepMapper}-${scaleType}`];\n dataset.push({ scale, canvas, fieldName: scaleProps.field, LegendCls, scaleType });\n }\n });\n\n return dataset;\n};\n\n/**\n *\n *\n * @param {*} legendConfig\n * @param {*} canvases\n * @param {*} measurement\n * @param {*} prevLegends\n * @returns\n */\nexport const legendInitializer = (legendConfig, canvas, measurement, prevLegends) => {\n const legends = [];\n const {\n height,\n width,\n headerHeight\n } = measurement;\n const {\n position,\n align\n } = legendConfig;\n\n const legendInfo = legendCreator(canvas);\n\n legendInfo.forEach((dataInfo, index) => {\n let legend = {};\n\n const legendMeasures = {};\n const {\n LegendCls,\n scale,\n fieldName,\n scaleType\n } = dataInfo;\n const config = legendConfig[scaleType] || {};\n const title = config.title || {};\n title.text = title.text || fieldName;\n if (config.show) {\n config.position = position;\n config.align = align;\n\n if (prevLegends[index]) {\n legend = prevLegends[index].legend;\n } else {\n legend = LegendCls.create({\n labelManager: canvas._dependencies.smartlabel,\n cells: {\n AxisCell, TextCell\n }\n });\n }\n legendMeasures.maxHeight = align === VERTICAL ? (height - headerHeight) : height * 0.2;\n legendMeasures.maxWidth = align === HORIZONTAL ? width : width * 0.2;\n legendMeasures.width = Math.min(legendMeasures.maxWidth, config.width);\n legendMeasures.height = Math.min(legendMeasures.maxHeight, config.height);\n\n [PADDING, BORDER, MARGIN].forEach((e) => {\n legendMeasures[e] = config[e];\n });\n legend.scale(scale)\n .title(title)\n .fieldName(fieldName)\n .config(config)\n .metaData(canvas.composition().visualGroup.getGroupByData().project([fieldName]))\n .measurement(legendMeasures)\n .canvasAlias(canvas.alias())\n .setLegendMeasures();\n\n legends.push({ canvas, legend, scaleType });\n }\n });\n return legends;\n};\n\n/**\n *\n *\n * @param {*} legends\n * @param {*} legendConfig\n * @param {*} availableHeight\n * @param {*} availableWidth\n * @returns\n */\nexport const getLegendSpace = (legends, legendConfig, availableHeight, availableWidth) => {\n const legendMeasures = legends.map(legendInfo => legendInfo.legend.measurement());\n const legendSpace = { width: 0, height: 0 };\n\n legendMeasures.forEach((space) => {\n let height = 0;\n let width = 0;\n width = Math.min(space.width, space.maxWidth);\n height = Math.min(space.height, space.maxHeight);\n\n if (legendConfig.align === HORIZONTAL) {\n if (legendSpace.width + width > availableWidth) {\n legendSpace.width = availableWidth;\n legendSpace.height += height;\n } else {\n legendSpace.width += width;\n legendSpace.height = Math.max(legendSpace.height, height);\n }\n } else if (legendSpace.height + height > availableHeight) {\n legendSpace.height = height;\n legendSpace.width += width;\n } else {\n legendSpace.height += height;\n legendSpace.width = Math.max(legendSpace.width, width);\n }\n });\n if (legendConfig.align === HORIZONTAL) {\n legendSpace.width = availableWidth;\n }\n return legendSpace;\n};\n\n/**\n *\n *\n * @param {*} context\n * @param {*} headerHeight\n * @returns\n */\nexport const createLegend = (context, headerHeight, height, width) => {\n const measurement = {\n height,\n width,\n headerHeight\n };\n const { legend } = context.config();\n const { show, position } = legend;\n\n legend.classPrefix = context.config().classPrefix;\n const align = (position === LEFT || position === RIGHT) ? VERTICAL : HORIZONTAL;\n\n legend.show = show ? ((align === VERTICAL && width > 200) || (align === HORIZONTAL && height > 200)) : show;\n legend.align = align;\n return legendInitializer(legend, context, measurement, context.legends || []);\n};\n","import { mergeRecursive } from 'muze-utils';\nimport { arrangeComponents } from './component-resolver';\nimport { createHeaders } from './title-maker';\nimport { createLegend, getLegendSpace } from './legend-maker';\nimport { TOP, BOTTOM, LEFT, RIGHT } from '../constants';\n\n/**\n *\n *\n * @param {*} context\n * @returns\n */\nexport const prepareLayout = (layout, components, config, measurement) => {\n const {\n rows,\n columns,\n values,\n cornerMatrices\n } = components;\n\n const {\n topLeft,\n topRight,\n bottomLeft,\n bottomRight\n } = cornerMatrices;\n\n layout.measurement(measurement)\n .config(config)\n .matrices({\n top: [topLeft, columns[0], topRight],\n center: [rows[0], values, rows[1]],\n bottom: [bottomLeft, columns[1], bottomRight]\n })\n .triggerReflow();\n};\n\n/**\n *\n *\n * @param {*} context\n * @param {*} mount\n * @returns\n */\nexport const getRenderDetails = (context, mount) => {\n let layoutConfig = mergeRecursive({}, context.config());\n // Get height width of the mount point\n let { height, width } = mount.getBoundingClientRect();\n const heightAttr = context.height();\n const widthAttr = context.width();\n const visGroup = context.composition().visualGroup;\n const {\n isColumnSizeEqual,\n isRowSizeEqual,\n rows,\n columns,\n values\n } = visGroup.placeholderInfo();\n const {\n minWidth,\n minHeight,\n classPrefix,\n showHeaders,\n legend\n } = context.config();\n // Get title configuration\n const titleConfig = context.title()[1];\n // Get subtitle configuration\n const subtitleConfig = context.subtitle()[1];\n // Get legend position\n const legendPosition = legend.position;\n // Arrange components according to config\n const layoutArrangement = arrangeComponents(context);\n\n height = Math.floor(height);\n width = Math.floor(width);\n\n const availableHeightForCanvas = Math.max(heightAttr > 0 ? heightAttr : height, minHeight);\n const availableWidthForCanvas = Math.max(widthAttr > 0 ? widthAttr : width, minWidth);\n\n // Create headers and determine header height\n const { headers, headerHeight } = createHeaders(context, availableHeightForCanvas, availableWidthForCanvas);\n\n // Create legends and determine legend space\n const legends = createLegend(context, headerHeight, availableHeightForCanvas, availableWidthForCanvas);\n context._composition.legend = {};\n legends.forEach((e) => {\n context._composition.legend[e.scaleType] = e.legend;\n });\n\n const legendSpace = getLegendSpace(legends, legend, availableHeightForCanvas, availableWidthForCanvas);\n const legendWidth = (legendPosition === LEFT || legendPosition === RIGHT) ? legendSpace.width : 0;\n const legendHeight = (legendPosition === TOP || legendPosition === BOTTOM) ? legendSpace.height : 0;\n\n // Set components for layouting\n const components = {\n headers,\n legends,\n canvases: [context],\n rows,\n columns,\n values,\n cornerMatrices: visGroup.cornerMatrices()\n };\n const measurement = {\n mountSpace: {\n height,\n width\n },\n headerHeight,\n legendSpace,\n canvasWidth: availableWidthForCanvas,\n canvasHeight: availableHeightForCanvas,\n width: availableWidthForCanvas - legendWidth,\n height: availableHeightForCanvas - headerHeight - legendHeight,\n minUnitHeight: context.minUnitHeight(),\n minUnitWidth: context.minUnitWidth()\n };\n layoutConfig = mergeRecursive(layoutConfig, {\n classPrefix,\n showHeaders,\n border: mergeRecursive(visGroup.metaData().border, context.config().border),\n layoutArrangement,\n legend,\n title: titleConfig,\n subtitle: subtitleConfig,\n isColumnSizeEqual,\n isRowSizeEqual\n });\n return {\n layoutConfig,\n components,\n measurement\n };\n};\n","export const TITLE_CONFIG = {\n position: 'top',\n align: 'left',\n padding: 8\n};\n\nexport const SUB_TITLE_CONFIG = {\n position: 'top',\n align: 'left',\n padding: 16\n};\n","import { mergeRecursive, selectElement } from 'muze-utils';\nimport {\n ROWS,\n COLUMNS,\n COLOR,\n SHAPE,\n SIZE,\n DETAIL,\n LAYERS,\n TRANSFORM,\n MOUNT,\n TITLE,\n SUB_TITLE\n} from '../constants';\nimport { TITLE_CONFIG, SUB_TITLE_CONFIG } from './defaults';\n/**\n * @module\n * This is the local options semantics based on which setters getters are created and reactivity is initiated.\n * This local object is only valid for Canvas.\n * Canvas merges global and local object both to the model\n *\n * Format\n * PROPERTRY_NAME: {\n * value: // default value of the property,\n * meta: {\n * typeCheck: // The setter value will be checked using this. If the value is function then the setter value\n * // is passed as args.\n * typeExpected: // The output of typecheck action will be tested against this. Truthy value will set the\n * // value to the setter\n * sanitizaiton: // Need for sanitization before type is checked\n * }\n * }\n */\n\nexport const localOptions = {\n [ROWS]: {\n value: null,\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Array'\n }\n },\n [COLUMNS]: {\n value: null,\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Array'\n }\n },\n [COLOR]: {\n value: null,\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Object',\n sanitization: (config) => {\n if (typeof config === 'string') {\n return {\n field: config\n };\n }\n return config;\n }\n }\n },\n [SHAPE]: {\n value: null,\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Object',\n sanitization: (config) => {\n if (typeof config === 'string') {\n return {\n field: config\n };\n }\n return config;\n }\n }\n },\n [SIZE]: {\n value: null,\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Object',\n sanitization: (config) => {\n if (typeof config === 'string') {\n return {\n field: config\n };\n }\n return config;\n }\n }\n },\n [DETAIL]: {\n value: [],\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Array'\n }\n },\n\n [LAYERS]: {\n value: null,\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Array'\n }\n },\n [TRANSFORM]: {\n value: null,\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Object'\n }\n },\n [MOUNT]: {\n value: null,\n meta: {\n sanitization: (value) => {\n if (typeof value === 'string') {\n return selectElement(value).node();\n }\n return value;\n }\n }\n }\n};\n\nexport const canvasOptions = {\n [TITLE]: {\n value: [null, null],\n meta: {\n typeCheck: ['constructor', 'constructor'],\n typeExpected: ['Function', 'Object'],\n spreadParams: true,\n sanitization: [(title) => {\n if (typeof title === 'string') {\n const t = () => title;\n t._sanitized = true;\n return t;\n }\n return title;\n }, (titleConfig) => {\n const defConfig = mergeRecursive({}, TITLE_CONFIG);\n return mergeRecursive(defConfig, titleConfig);\n }]\n }\n },\n [SUB_TITLE]: {\n value: [null, null],\n meta: {\n typeCheck: ['constructor', 'constructor'],\n typeExpected: ['Function', 'Object'],\n spreadParams: true,\n sanitization: [(subtitle) => {\n if (typeof subtitle === 'string') {\n const sub = () => subtitle;\n sub._sanitized = true;\n return sub;\n }\n return subtitle;\n }, (subtitleConfig) => {\n const defConfig = mergeRecursive({}, SUB_TITLE_CONFIG);\n return mergeRecursive(defConfig, subtitleConfig);\n }]\n }\n }\n};\n","import { makeElement, selectElement } from 'muze-utils';\nimport { VERTICAL, HORIZONTAL, TOP, LEFT, RIGHT, BOTTOM } from '../constants';\n\n/**\n * Sets the rotation for all x axes if any axis has the rotation config set in the\n * entire view\n *\n * @param {Array} columns Column cells that contain the axes cells\n */\nconst setLabelRotationForAxes = (context) => {\n let rotation = 0;\n\n const xAxes = context.xAxes() || [];\n\n (() => {\n for (let i = 0; i < xAxes.length; i++) {\n for (let j = 0; j < xAxes[i].length; j++) {\n if (xAxes[i][j].config().labels.rotation !== 0) {\n rotation = xAxes[i][j].config().labels.rotation;\n return;\n }\n }\n }\n })();\n\n if (rotation) {\n xAxes.forEach((axes) => {\n axes.forEach((axis) => {\n axis.config({ labels: { rotation, smartTicks: false } });\n });\n });\n }\n};\n\n/**\n *\n *\n * @param {*} context\n * @param {*} mount\n * @returns\n */\nconst getSkeletons = (mount, layoutConfig, measurement) => {\n const {\n layoutArrangement,\n classPrefix\n } = layoutConfig;\n const {\n headers,\n legends\n } = layoutArrangement;\n const {\n canvasWidth,\n canvasHeight\n } = measurement;\n const container = selectElement(mount);\n const components = {};\n const mountPoint = makeElement(container, 'div', [1], `${classPrefix}-viz`)\n .style('width', `${canvasWidth}px`)\n .style('height', `${canvasHeight}px`);\n const containers = mountPoint\n .selectAll(`.${classPrefix}-container`)\n .data(headers);\n containers.exit().remove();\n const containersEnter = containers.enter().append('div');\n\n const mergedContainer = containersEnter.merge(containers)\n .attr('class', `${classPrefix}-container`)\n .style('width', `${canvasWidth}px`)\n .style('padding', `${null}px`)\n .style('margin', null)\n .each(function (type) {\n components[type] = selectElement(this).classed(`${classPrefix}-${type}-container`, true);\n });\n const innerContainer = mergedContainer\n .selectAll(`.${classPrefix}-inner-container`)\n .data((d) => {\n if (d === 'group') {\n return legends;\n } return [];\n });\n innerContainer.exit().remove();\n const innerContainerEnter = innerContainer.enter().append('div');\n\n innerContainerEnter\n .merge(innerContainer)\n .attr('class', `${classPrefix}-inner-container`)\n .style('width', 'auto')\n .style('height', 'auto')\n .each(function (layoutType) {\n components[layoutType] = selectElement(this)\n .classed(`${classPrefix}-${layoutType}-container`, true);\n });\n return components;\n};\n\n/**\n *\n *\n * @param {*} context\n * @param {*} container\n * @param {*} legendComponents\n */\nconst renderLegend = (legendConfig, container, legendComponents, measurement) => {\n const sectionComponents = [];\n const { legendSpace, headerHeight, height, width } = measurement;\n const { legend, classPrefix } = legendConfig;\n const { position } = legend;\n const legendMount = makeElement(container, 'div', [legendComponents], `${classPrefix}-inner-content`, {}, d => d);\n legendMount.classed(`${classPrefix}-legend`, true);\n const align = (position === LEFT || position === RIGHT) ? VERTICAL : HORIZONTAL;\n const legWidth = align === VERTICAL ? legendSpace.width : width;\n const legHeight = align === VERTICAL ? height - headerHeight : legendSpace.height;\n\n [container, legendMount].forEach((elem) => {\n elem.style('width', `${Math.floor(legWidth)}px`)\n .style('height', `${legHeight}px`)\n .style('float', LEFT);\n });\n\n if (align === VERTICAL) {\n let sections = -1;\n let currHeight = legHeight;\n let currWidth = 0;\n\n legendComponents.forEach((legendInfo) => {\n const leg = legendInfo.legend;\n if (leg.measurement().height > currHeight) {\n sections++;\n currWidth = 0;\n currHeight = legHeight;\n } else {\n sections < 0 && sections++;\n }\n sectionComponents[sections] = sectionComponents[sections] || [];\n currHeight -= Math.min(leg.measurement().height, currHeight);\n currWidth = Math.max(Math.min(leg.measurement().width, leg.measurement().maxWidth), currWidth);\n sectionComponents[sections].push({\n legend: leg,\n legendHeight: legHeight,\n legendWidth: currWidth\n });\n });\n\n const mount = makeElement(legendMount, ['div'], sectionComponents, `${classPrefix}-legend-section`)\n .each((d, i) => selectElement(this).classed(`${classPrefix}-legend-section-${i}`, true))\n .classed(`${classPrefix}-legend-vertical-section`, true)\n .style('width', d => `${d[0].legendWidth}px`);\n makeElement(mount, ['div'], d => d, `${classPrefix}-legend-components`, {}, d => d.legend.id())\n .each(function (d) {\n d.legend.mount(this);\n })\n .style('width', d => `${d.legendWidth}px`);\n } else {\n const mount = makeElement(legendMount, 'div', [1], `${classPrefix}-legend-section`)\n .classed(`${classPrefix}-legend-horizontal-section`, true)\n .classed(`${classPrefix}-legend-section-${0}`, true)\n .style('width', `${legWidth}px`);\n\n makeElement(mount, 'div', legendComponents, `${classPrefix}-legend-components`, {}, d => d.legend.id())\n .each(function (d) { d.legend.mount(this); })\n .style('width', d => `${d.legend.measurement().width}px`);\n }\n};\n\n/**\n *\n *\n * @param {*} context\n * @param {*} container\n * @param {*} type\n * @param {*} headers\n */\nconst renderHeader = (layoutConfig, container, type, headers) => {\n const headerCell = headers[`${type}Cell`];\n const config = layoutConfig[`${type}`];\n const { position, align, padding } = config;\n const sel = container\n .selectAll(`.${layoutConfig.classPrefix}-inner-container`)\n .data([type]);\n sel.exit().remove();\n const selEnter = sel.enter().append('div');\n\n const cont = selEnter.merge(sel);\n cont.classed(`${layoutConfig.classPrefix}-inner-container`, true);\n\n headerCell && headerCell.render(cont.node());\n\n cont.selectAll('div').classed(`${layoutConfig.classPrefix}-inner-content`, true);\n cont.style('width', `${100}%`);\n\n if (config && headerCell) {\n cont.style('float', LEFT)\n .style('text-align', align)\n .style(`padding-${position === TOP ? BOTTOM : TOP}`, `${padding}px`);\n }\n};\n\n/**\n *\n *\n * @param {*} context\n * @param {*} shifter\n */\nconst shiftHeaders = (config, shifter, measurement, mount) => {\n const { classPrefix, title, subtitle, legend } = config;\n const { legendSpace } = measurement;\n const { position } = legend;\n\n shifter += position === LEFT ? legendSpace.width : 0;\n title && selectElement(mount).select(`.${classPrefix}-title-container`)\n .style('width', title.align === LEFT ? `calc(100% - ${shifter}px` : '100%')\n .style('margin-left', title.align === LEFT ? `${shifter}px` : 0);\n subtitle && selectElement(mount).select(`.${classPrefix}-subtitle-container`)\n .style('width', subtitle.align === LEFT ? `calc(100% - ${shifter}px` : '100%')\n .style('margin-left', subtitle.align === LEFT ? `${shifter}px` : 0);\n\n selectElement(mount).select(`.${classPrefix}-legend-horizontal-section`)\n .style('margin-left', `${shifter}px`)\n .style('width', `${legendSpace.width - shifter}px`)\n .selectAll(`.${classPrefix}-legend-body, .${classPrefix}-legend-title`)\n .style('max-width', `${legendSpace.width - shifter}px`);\n selectElement(mount).select(`.${classPrefix}-legend-vertical-section`)\n .style('margin-left', null)\n .selectAll(`.${classPrefix}-legend-body, .${classPrefix}-legend-title`)\n .style('max-width', null);\n};\n\n/**\n *\n *\n * @param {*} mountPoint\n * @param {*} measurement\n * @param {*} classPrefix\n * @returns\n */\nconst prepareGridContainer = (mountPoint, measurement, classPrefix, alias) => {\n if (!mountPoint) {\n return this;\n }\n\n const {\n height,\n width\n } = measurement;\n // Create container for the layout\n\n const sel = selectElement(mountPoint)\n .selectAll(`.${classPrefix}-inner-content`)\n .data(['layout'], d => d);\n sel.exit().remove();\n const selEnter = sel.enter().append('div');\n\n const container = selEnter.merge(sel)\n .attr('class', `${classPrefix}-inner-content`)\n .classed(`${classPrefix}-grid-layout`, true)\n .attr('id', `${classPrefix}-grid-layout-${alias}`)\n .style('height', `${height}px`)\n .style('padding', null)\n .style('width', `${Math.ceil(width)}px`);\n // Mount for matrices\n const innerSel = container.selectAll(`.${classPrefix}-layout-grid-container`)\n .data(['layout2']);\n innerSel.exit().remove();\n const innerSelEnter = innerSel.enter().append('div');\n\n const mount = innerSelEnter.merge(innerSel);\n mount.classed(`${classPrefix}-layout-grid-container`, true)\n .attr('id', `${classPrefix}-layout-grid-container-${alias}`)\n .style('height', `${height}px`)\n .style('width', `${Math.ceil(width)}px`);\n\n return {\n mount,\n container\n };\n};\n\n/**\n *\n *\n * @param {*} context\n * @param {*} components\n * @param {*} layoutConfig\n * @param {*} measurement\n */\nexport const renderComponents = (context, components, layoutConfig, measurement) => {\n const mountPoint = context.mount();\n const {\n headers,\n legends\n } = components;\n const {\n classPrefix\n } = layoutConfig;\n const {\n title,\n legend,\n subtitle,\n layout\n } = getSkeletons(mountPoint, layoutConfig, measurement);\n const {\n mount\n } = prepareGridContainer(layout.node(), measurement, classPrefix, context.alias());\n const padding = context.layout().getViewInformation().layoutDimensions.viewWidth[0];\n measurement.padding = padding;\n setLabelRotationForAxes(context);\n\n // Render layout\n context.layout().renderGrid(mount);\n context.once('layer.drawn').then(() => {\n renderHeader(layoutConfig, title, 'title', headers);\n renderHeader(layoutConfig, subtitle, 'subtitle', headers);\n renderLegend(layoutConfig, legend, legends, measurement);\n shiftHeaders(layoutConfig, padding, measurement, mountPoint);\n });\n context.composition().visualGroup.matrixInstance().value.each((el) => {\n el.valueOf().parentContainer(layout.node());\n });\n};\n","import { isEqual } from 'muze-utils';\nimport { ROWS, COLUMNS, COLOR, SHAPE, SIZE, MOUNT, DETAIL, DATA, CONFIG } from '../constants';\nimport { canvasOptions } from './local-options';\n\n/**\n * Instantiate high level components. Canvas knows what all high level component it has.\n * @nice-to-have dynamic high level components.\n * - Is it even required ?\n * - Reactive to source (canvas) streaming ?\n * @param {*} context Canvas instance\n * @return {Object.fArray>} Arrays of Title, visualGroup, Legend\n */\nexport const initCanvas = (context) => {\n const reg = context._registry.components;\n\n return [new reg.VisualGroup(context._registry, context.dependencies())];\n};\n\n/**\n *\n *\n * @memberof Canvas\n */\nexport const dispatchProps = (context) => {\n const lifeCycleManager = context.dependencies().lifeCycleManager;\n lifeCycleManager.notify({ client: context, action: 'beforeupdate' });\n const visualGroup = context.composition().visualGroup;\n\n visualGroup.lockModel();\n const allOptions = context._allOptions;\n for (const key in allOptions) {\n const value = context[key]();\n if (value !== null) {\n visualGroup[key] && visualGroup[key](value);\n }\n }\n visualGroup.unlockModel();\n\n context._cachedProps = {};\n lifeCycleManager.notify({ client: context, action: 'initialized' });\n lifeCycleManager.notify({ client: context, action: 'updated' });\n};\n\n/**\n *\n *\n */\nexport const setupChangeListener = (context) => {\n const store = context._store;\n\n store.registerImmediateListener(MOUNT, () => {\n const allOptions = Object.keys(context._allOptions);\n const props = [...allOptions, ...Object.keys(canvasOptions)];\n let equalityChecker = () => false;\n store.registerChangeListener(props, (...params) => {\n const updateProps = props.every((option, i) => {\n switch (option) {\n case ROWS:\n case COLUMNS:\n case DETAIL:\n equalityChecker = isEqual('Array');\n break;\n\n case SHAPE:\n case SIZE:\n case COLOR:\n case DATA:\n case CONFIG:\n equalityChecker = isEqual('Object');\n break;\n default:\n equalityChecker = () => true;\n break;\n }\n const oldVal = params[i][0];\n const newVal = params[i][1];\n\n return equalityChecker(oldVal, newVal);\n });\n // inform attached board to rerender\n !updateProps && dispatchProps(context);\n context.render();\n }, true);\n });\n};\n\nexport const applyInteractionPolicy = (policies, firebolt) => {\n const canvas = firebolt.context;\n const visualGroup = canvas.composition().visualGroup;\n const valueMatrix = visualGroup.composition().matrices.value;\n policies.forEach(policy => policy(valueMatrix, firebolt));\n};\n","import {\n getDataModelFromIdentifiers,\n FieldType,\n mergeRecursive\n} from 'muze-utils';\n\nimport { applyInteractionPolicy } from './helper';\n\nconst defaultInteractionPolicy = (valueMatrix, firebolt) => {\n const isMeasure = field => field.type() === FieldType.MEASURE;\n const canvas = firebolt.context;\n const visualGroup = canvas.composition().visualGroup;\n const xFields = [].concat(...visualGroup.getFieldsFromChannel('x'));\n const yFields = [].concat(...visualGroup.getFieldsFromChannel('y'));\n const colDim = xFields.every(field => field.type() === FieldType.DIMENSION);\n const fieldInf = visualGroup.resolver().getAllFields();\n const rowFacets = fieldInf.rowFacets;\n const colFacets = fieldInf.colFacets;\n valueMatrix.each((cell) => {\n const unitFireBolt = cell.valueOf().firebolt();\n\n if (!(xFields.every(isMeasure) && yFields.every(isMeasure))) {\n const facetFields = cell.valueOf().facetByFields()[0];\n const unitColFacets = facetFields.filter(d => colFacets.findIndex(v => v.equals(d)) !== -1);\n const unitRowFacets = facetFields.filter(d => rowFacets.findIndex(v => v.equals(d)) !== -1);\n let propFields;\n if (colDim) {\n propFields = unitColFacets.map(d => `${d}`);\n } else {\n propFields = unitRowFacets.map(d => `${d}`);\n }\n\n unitFireBolt.propagateWith('*', propFields, true);\n }\n });\n};\n\nconst defaultCrossInteractionPolicy = {\n behaviours: {\n '*': (propagationPayload, context) => {\n const propagationCanvasAlias = propagationPayload.sourceCanvas;\n const canvasAlias = context.parentAlias();\n return propagationCanvasAlias ? canvasAlias === propagationCanvasAlias : true;\n }\n },\n sideEffects: {\n tooltip: (propagationPayload, context) => {\n const propagationUnit = propagationPayload.sourceUnit;\n const propagationCanvas = propagationPayload.sourceCanvas;\n const unitId = context.id();\n const canvasAlias = context.parentAlias();\n if (propagationCanvas) {\n return propagationCanvas !== canvasAlias ? true : unitId === propagationUnit;\n }\n return true;\n }\n }\n};\n\nexport default class GroupFireBolt {\n constructor (context) {\n this.context = context;\n this._interactionPolicy = this.constructor.defaultInteractionPolicy();\n this._crossInteractionPolicy = this.constructor.defaultCrossInteractionPolicy();\n this.context.once('canvas.updated').then(() => {\n applyInteractionPolicy([this._interactionPolicy], this);\n const crossInteractionPolicy = this._crossInteractionPolicy;\n const behaviours = crossInteractionPolicy.behaviours;\n const sideEffects = crossInteractionPolicy.sideEffects;\n const visualGroup = context.composition().visualGroup;\n const valueMatrix = visualGroup.composition().matrices.value;\n valueMatrix.each((cell) => {\n const unitFireBolt = cell.valueOf().firebolt();\n for (const key in behaviours) {\n unitFireBolt.changeBehaviourStateOnPropagation(key, behaviours[key]);\n }\n for (const key in sideEffects) {\n unitFireBolt.changeSideEffectStateOnPropagation(key, sideEffects[key]);\n }\n });\n });\n }\n\n static defaultInteractionPolicy () {\n return defaultInteractionPolicy;\n }\n\n static defaultCrossInteractionPolicy () {\n return defaultCrossInteractionPolicy;\n }\n\n interactionPolicy (...policy) {\n if (policy.length) {\n this._interactionPolicy = policy[0] || this.constructor.defaultInteractionPolicy();\n return this;\n }\n return this._interactionPolicy;\n }\n\n crossInteractionPolicy (...policy) {\n if (policy.length) {\n this._crossInteractionPolicy = mergeRecursive(mergeRecursive({},\n this.constructor.defaultCrossInteractionPolicy()), policy[0] || {});\n return this;\n }\n return this._crossInteractionPolicy;\n }\n\n dispatchBehaviour (behaviour, payload) {\n const propPayload = Object.assign(payload);\n const criteria = propPayload.criteria;\n const data = this.context.data();\n\n propPayload.action = behaviour;\n const model = getDataModelFromIdentifiers(data, criteria);\n data.propagate(model, propPayload, {\n sourceId: this.context.alias()\n });\n return this;\n }\n\n}\n","import { GridLayout } from '@chartshq/layout';\nimport { transactor, Store, getUniqueId } from 'muze-utils';\nimport { RETINAL } from '../constants';\nimport TransactionSupport from '../transaction-support';\nimport { getRenderDetails, prepareLayout } from './layout-maker';\nimport { localOptions, canvasOptions } from './local-options';\nimport { renderComponents } from './renderer';\nimport GroupFireBolt from './firebolt';\nimport options from '../options';\nimport { initCanvas, setupChangeListener } from './helper';\n\n/**\n * This is the primary class which manages highlevel components like visualGroup, Titles, Legend, Extensions\n * (in future). Global level Muze functionality is subset this. Every time user works with an instance of\n * canvas in dom which provides instance level settings.\n *\n */\nexport default class Canvas extends TransactionSupport {\n\n /**\n * Creates reactive property accessors.\n * - data\n * - height\n * - width\n * - config\n * This configs are retrieved from options.\n */\n constructor (globalDependencies) {\n super();\n\n this._allOptions = Object.assign({}, options, localOptions);\n this._registry = {};\n this._composition = {};\n this._cachedProps = {};\n this._alias = null;\n this._renderedResolve = null;\n this._renderedPromise = new Promise((resolve) => {\n this._renderedResolve = resolve;\n });\n this._composition.layout = new GridLayout();\n this._store = new Store({});\n\n // Setters and getters will be mounted on this. The object will be mutated.\n const [, store] = transactor(this, options, this._store.model);\n transactor(this, localOptions, store);\n transactor(this, canvasOptions, store);\n this.dependencies(Object.assign({}, globalDependencies, this._dependencies));\n this.firebolt(new GroupFireBolt(this));\n this.alias(`canvas-${getUniqueId()}`);\n this.title('', {});\n this.subtitle('', {});\n this.legend({});\n this.color({});\n this.shape({});\n this.size({});\n setupChangeListener(this);\n }\n\n /**\n *\n *\n * @readonly\n * @memberof Canvas\n */\n layout (...params) {\n if (params.length) {\n return this;\n }\n return this.composition().layout;\n }\n\n /**\n *\n *\n * @readonly\n * @memberof Canvas\n */\n composition (...params) {\n if (params.length) {\n return this;\n }\n return this._composition;\n }\n\n done () {\n return this._renderedPromise;\n }\n\n /**\n *\n *\n * @param {*} params\n * @returns\n * @memberof Canvas\n */\n alias (...params) {\n if (params.length) {\n const visualGroup = this.composition().visualGroup;\n this._alias = params[0];\n visualGroup && visualGroup.alias(this.alias());\n return this;\n }\n return this._alias;\n }\n\n /**\n * Creates an instance initiated with given settings.\n *\n * @param {Object} initialSettings Initial settings to be populated in the model\n * @param {Object} regEntry newly created instance with the initial settings\n * @param {Object} globalDependencies dependencies which will be created only once in the page\n *\n * @return {Object} newly created instance with the initial settings\n */\n static withSettings (initialSettings, regEntry, globalDependencies) {\n const instance = new Canvas(globalDependencies);\n\n for (const key in initialSettings) {\n instance[key](initialSettings[key]);\n }\n // set registry for instance\n instance.registry(regEntry);\n return instance;\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof Canvas\n */\n static formalName () {\n return 'canvas';\n }\n\n /**\n *\n *\n * @readonly\n * @memberof Canvas\n */\n firebolt (...firebolt) {\n if (firebolt.length) {\n this._firebolt = firebolt[0];\n return this;\n }\n return this._firebolt;\n }\n\n /**\n * Registry peoperty accessor\n *\n * @param {Object} reg plain old javascript object keyvalue pairs. Key containing module name and value contains\n * module definition class. The reg object has to be flat object of level 1.\n */\n registry (...params) {\n if (params.length) {\n const components = Object.assign({}, params[0].components);\n const componentSubRegistry = Object.assign({}, params[0].componentSubRegistry);\n\n this._registry = { components, componentSubRegistry };\n const initedComponents = initCanvas(this);\n // @todo is it okay to continue this tight behaviour? If not use a resolver to resolve diff component type.\n this._composition.visualGroup = initedComponents[0];\n\n this.composition().visualGroup.alias(this.alias());\n return this;\n }\n return this._registry;\n }\n\n /*\n * Prepare dependencies for top level elements\n */\n dependencies (...param) {\n if (param.length) {\n this._dependencies = param[0];\n return this;\n }\n // @todo prepare dependencies here.\n return this._dependencies;\n }\n\n /**\n *\n *\n * @param {*} lifeCycles\n * @returns\n * @memberof Canvas\n */\n lifeCycle (lifeCycles) {\n const lifeCycleManager = this.dependencies().lifeCycleManager;\n if (lifeCycles) {\n lifeCycleManager.register(lifeCycles);\n return this;\n }\n return lifeCycleManager;\n }\n\n /**\n *\n *\n * @readonly\n * @memberof Canvas\n */\n legend (...params) {\n if (params.length) {\n return this;\n }\n return this.composition().legend;\n }\n\n /**\n *\n *\n * @param {*} eventName\n * @returns\n * @memberof Canvas\n */\n once (eventName) {\n const lifeCycleManager = this.dependencies().lifeCycleManager;\n return lifeCycleManager.retrieve(eventName);\n }\n\n /**\n * Internal function to trigger render, this method is cognizant of all the properties of the core modules and\n * establish a passive reactivity. Passive reactivity is not always a bad thing :)\n * @internal\n */\n render () {\n const mount = this.mount();\n const visGroup = this.composition().visualGroup;\n const lifeCycleManager = this.dependencies().lifeCycleManager;\n // Get render details including arrangement and measurement\n const { components, layoutConfig, measurement } = getRenderDetails(this, mount);\n\n lifeCycleManager.notify({ client: this, action: 'beforedraw' });\n // Prepare the layout by triggering the matrix calculation\n prepareLayout(this.layout(), components, layoutConfig, measurement);\n // Render each component\n renderComponents(this, components, layoutConfig, measurement);\n // Update life cycle\n lifeCycleManager.notify({ client: this, action: 'drawn' });\n const promises = [];\n visGroup.matrixInstance().value.each((el) => {\n promises.push(el.valueOf().done());\n });\n Promise.all(promises).then(() => {\n this._renderedResolve();\n });\n }\n\n /**\n *\n *\n * @returns\n * @memberof Canvas\n */\n xAxes () {\n return this.composition().visualGroup.getAxes('x');\n }\n\n /**\n *\n *\n * @returns\n * @memberof Canvas\n */\n yAxes () {\n return this.composition().visualGroup.getAxes('y');\n }\n\n /**\n *\n *\n * @returns\n * @memberof Canvas\n */\n getRetinalAxes () {\n const visualGroup = this.composition().visualGroup;\n return visualGroup.getAxes(RETINAL);\n }\n}\n","import { cellRegistry, SimpleCell } from '@chartshq/visual-cell';\nimport { VisualUnit } from '@chartshq/visual-unit';\nimport { layerRegistry } from '@chartshq/visual-layer';\nimport { SimpleGroup, VisualGroup } from '@chartshq/visual-group';\n\nexport const COMPONENTS = {\n VisualGroup,\n VisualUnit\n};\nexport const SUBREGISTRIES = {\n cellRegistry,\n layerRegistry\n};\nexport const INTERFACES = {\n SimpleGroup,\n SimpleCell\n};\n\n","import { DEFAULT_LAYERS } from './defaults';\n\nexport default () => {\n const reg = DEFAULT_LAYERS;\n const regObj = {\n set: (key, def) => {\n reg[key] = def;\n return regObj;\n },\n get: () => reg\n };\n return regObj;\n};\n","import {\n transactor,\n Smartlabel,\n enableChainedTransaction,\n LifeCycleManager,\n DataModel,\n makeElement,\n getClientPoint,\n selectElement,\n getEvent,\n require,\n DateTimeFormatter\n} from 'muze-utils';\n\nimport {\n SurrogateSideEffect,\n SpawnableSideEffect,\n sideEffects,\n PersistentBehaviour,\n GenericBehaviour,\n VolatileBehaviour,\n behaviouralActions,\n GenericSideEffect\n} from '@chartshq/muze-firebolt';\nimport { layerFactory } from '@chartshq/visual-layer';\nimport pkg from '../package.json';\nimport * as operators from './operators';\nimport { actionModel as ActionModel } from './action-model';\nimport options from './options';\nimport { Canvas } from './canvas';\nimport { COMPONENTS, SUBREGISTRIES } from './default-registry';\nimport './muze.scss';\n\n// Cache singleton instances which should be included only once in a page\nconst globalCache = {};\nconst defaultRegistry = COMPONENTS;\n\nconst overrideRegistryDefinitions = (overrideRegistry, registry) => {\n for (const prop in overrideRegistry) {\n registry.set(prop, overrideRegistry[prop]);\n }\n};\n\n/**\n * Entry point to renderer. Initializes an environment with settings and registries for canvas. This is a simple wrapper\n * over {@link Canvas} which enables common configuration passing to multiple such canvases.\n *\n * Everytime `muze()` is called it creates an environment. These environment supports subset of APIs of Canvas. If\n * common configuration is used to render multiple canvases then it can be set directly in the env. Like if data is\n * common across all the visulization then its better to set the data in env. When a canvas is created it receives all\n * those configuration from env.\n *\n * ```\n * // Creates an environment\n * const env = muze()\n * // Set data property in environment, so that all the canvas created from the same environment gets this data\n * // automatically\n * env.data(dm);\n * // Creates canvas, by default env pushes data to canvas instance\n * const canvas = env.canvas();\n * ```\n *\n * If a property is set on both environment and canvas instance, property set on canvas instance gets more priority.\n *\n * @public\n * @module muze\n * @namespace Muze\n *\n * @return {Env} Instance of an environment\n */\nconst muze = () => {\n // Setters and getters will be mounted on this. Object will be mutated.\n const [env, globalStore] = transactor({}, options);\n const components = Object.assign({}, COMPONENTS);\n const componentSubRegistryDef = Object.assign(SUBREGISTRIES);\n const componentSubRegistry = {};\n\n for (const prop in componentSubRegistryDef) {\n componentSubRegistry[prop] = componentSubRegistryDef[prop]();\n }\n\n // Apart form the setter getter, an instance method is injected to create real renderer instances\n env.canvas = () => {\n // Create a canvas instance with this settings\n const settings = globalStore.serialize();\n const canvas = Canvas.withSettings(settings, { /* registry */\n components,\n componentSubRegistry\n }, env.globalDependencies());\n\n // Whenever settings is changed canvas is updated\n enableChainedTransaction(globalStore, canvas, Object.keys(settings));\n\n return canvas;\n };\n\n // Global dependencies for for compositions. Only one copy of the same should be in the page\n env.globalDependencies = () => {\n if (!globalCache.smartlabel) {\n globalCache.smartlabel = new Smartlabel(1, 'body');\n }\n return {\n smartlabel: globalCache.smartlabel,\n lifeCycleManager: new LifeCycleManager()\n };\n };\n\n // Retrieves global settings. This getter is readonly so that user can't change this as change should happen\n // only from setter to avoid unwanted sync issues.\n env.settings = () => globalStore.serialize();\n\n env.registry = (...overrideRegistry) => {\n // Selectively copy the properties from COMPONENTS\n if (overrideRegistry.length) {\n for (const prop in overrideRegistry) {\n if (prop in defaultRegistry) {\n components[prop] = overrideRegistry[prop];\n }\n }\n return env;\n }\n return components;\n };\n\n env.cellRegistry = (...overrideRegistry) => {\n const cellRegistry = componentSubRegistry.cellRegistry;\n if (overrideRegistry.length) {\n overrideRegistryDefinitions(overrideRegistry[0], cellRegistry);\n return env;\n }\n return cellRegistry.get();\n };\n\n env.layerRegistry = (...overrideRegistry) => {\n const layerRegistry = componentSubRegistry.layerRegistry;\n if (overrideRegistry.length) {\n overrideRegistryDefinitions(overrideRegistry[0], layerRegistry);\n return env;\n }\n return layerRegistry.get();\n };\n\n return env;\n};\n\nconst SideEffects = {\n sideEffects,\n standards: {\n SurrogateSideEffect,\n SpawnableSideEffect,\n GenericSideEffect\n }\n};\n\nconst Behaviours = {\n behaviouralActions,\n standards: {\n GenericBehaviour,\n PersistentBehaviour,\n VolatileBehaviour\n }\n};\n\nmuze.DataModel = DataModel;\nmuze.version = pkg.version;\nmuze.SideEffects = SideEffects;\nmuze.ActionModel = ActionModel;\nmuze.layerFactory = layerFactory;\nmuze.Operators = operators;\nmuze.Behaviours = Behaviours;\nmuze.utils = {\n getClientPoint,\n getEvent,\n makeElement,\n selectElement,\n DateTimeFormatter,\n require\n};\n\nexport default muze;\n"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack://muze/webpack/universalModuleDefinition","webpack://muze/webpack/bootstrap","webpack://muze/./packages/muze-utils/node_modules/datamodel/dist/datamodel.js","webpack://muze/./packages/muze-utils/node_modules/hyperdis/dist/hyperdis.js","webpack://muze/(webpack)/buildin/module.js","webpack://muze/./packages/muze-utils/node_modules/fusioncharts-smartlabel/lib/SmartlabelManager.js","webpack://muze/./packages/muze-utils/node_modules/fusioncharts-smartlabel/lib/lib.js","webpack://muze/./packages/muze/src/index.js","webpack://muze/./packages/muze-utils/node_modules/fusioncharts-smartlabel/lib/container-manager.js","webpack://muze/./packages/muze-utils/node_modules/d3-array/src/ascending.js","webpack://muze/./packages/muze-utils/node_modules/d3-array/src/bisector.js","webpack://muze/./packages/muze-utils/node_modules/d3-array/src/bisect.js","webpack://muze/./packages/muze-utils/node_modules/d3-array/src/cross.js","webpack://muze/./packages/muze-utils/node_modules/d3-array/src/number.js","webpack://muze/./packages/muze-utils/node_modules/d3-array/src/array.js","webpack://muze/./packages/muze-utils/node_modules/d3-array/src/range.js","webpack://muze/./packages/muze-utils/node_modules/d3-array/src/ticks.js","webpack://muze/./packages/muze-utils/node_modules/d3-array/src/threshold/sturges.js","webpack://muze/./packages/muze-utils/node_modules/d3-array/src/quantile.js","webpack://muze/./packages/muze-utils/node_modules/d3-collection/src/map.js","webpack://muze/./packages/muze-utils/node_modules/d3-collection/src/nest.js","webpack://muze/./packages/muze-utils/node_modules/d3-collection/src/set.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/array.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/ordinal.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/band.js","webpack://muze/./packages/muze-utils/node_modules/d3-color/src/define.js","webpack://muze/./packages/muze-utils/node_modules/d3-color/src/color.js","webpack://muze/./packages/muze-utils/node_modules/d3-color/src/math.js","webpack://muze/./packages/muze-utils/node_modules/d3-color/src/lab.js","webpack://muze/./packages/muze-utils/node_modules/d3-color/src/cubehelix.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/basis.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/constant.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/color.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/rgb.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/number.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/basisClosed.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/string.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/transform/parse.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/value.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/date.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/array.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/object.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/round.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/transform/decompose.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/transform/index.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/zoom.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/hsl.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/hcl.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/cubehelix.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/piecewise.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/quantize.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/constant.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/number.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/continuous.js","webpack://muze/./packages/muze-utils/node_modules/d3-format/src/formatDecimal.js","webpack://muze/./packages/muze-utils/node_modules/d3-format/src/exponent.js","webpack://muze/./packages/muze-utils/node_modules/d3-format/src/formatSpecifier.js","webpack://muze/./packages/muze-utils/node_modules/d3-format/src/formatTrim.js","webpack://muze/./packages/muze-utils/node_modules/d3-format/src/formatPrefixAuto.js","webpack://muze/./packages/muze-utils/node_modules/d3-format/src/defaultLocale.js","webpack://muze/./packages/muze-utils/node_modules/d3-format/src/formatRounded.js","webpack://muze/./packages/muze-utils/node_modules/d3-format/src/formatTypes.js","webpack://muze/./packages/muze-utils/node_modules/d3-format/src/identity.js","webpack://muze/./packages/muze-utils/node_modules/d3-format/src/locale.js","webpack://muze/./packages/muze-utils/node_modules/d3-format/src/formatGroup.js","webpack://muze/./packages/muze-utils/node_modules/d3-format/src/formatNumerals.js","webpack://muze/./packages/muze-utils/node_modules/d3-format/src/precisionFixed.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/tickFormat.js","webpack://muze/./packages/muze-utils/node_modules/d3-format/src/precisionPrefix.js","webpack://muze/./packages/muze-utils/node_modules/d3-format/src/precisionRound.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/linear.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/identity.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/nice.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/log.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/pow.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/quantile.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/quantize.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/threshold.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/interval.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/millisecond.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/duration.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/second.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/minute.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/hour.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/day.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/week.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/month.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/year.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/utcMinute.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/utcHour.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/utcDay.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/utcWeek.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/utcMonth.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/utcYear.js","webpack://muze/./packages/muze-utils/node_modules/d3-time-format/src/locale.js","webpack://muze/./packages/muze-utils/node_modules/d3-time-format/src/defaultLocale.js","webpack://muze/./packages/muze-utils/node_modules/d3-time-format/src/isoFormat.js","webpack://muze/./packages/muze-utils/node_modules/d3-time-format/src/isoParse.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/time.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/colors.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/category10.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/category20b.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/category20.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/category20c.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/cubehelix.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/rainbow.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/viridis.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/sequential.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/colors.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/categorical/Accent.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/categorical/category10.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/categorical/Dark2.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/categorical/Paired.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/categorical/Pastel1.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/categorical/Pastel2.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/categorical/Set1.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/categorical/Set2.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/categorical/Set3.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/ramp.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/diverging/BrBG.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/diverging/PRGn.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/diverging/PiYG.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/diverging/PuOr.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/diverging/RdBu.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/diverging/RdGy.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/diverging/RdYlBu.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/diverging/RdYlGn.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/diverging/Spectral.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/BuGn.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/BuPu.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/GnBu.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/OrRd.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/PuBuGn.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/PuBu.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/PuRd.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/RdPu.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/YlGnBu.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/YlGn.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/YlOrBr.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/YlOrRd.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-single/Blues.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-single/Greens.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-single/Greys.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-single/Purples.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-single/Reds.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-single/Oranges.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/cubehelix.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/rainbow.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/sinebow.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/viridis.js","webpack://muze/./packages/muze-utils/src/enums/reserved-fields.js","webpack://muze/./packages/muze-utils/src/enums/common-props.js","webpack://muze/./packages/muze-utils/node_modules/d3-axis/src/array.js","webpack://muze/./packages/muze-utils/node_modules/d3-axis/src/identity.js","webpack://muze/./packages/muze-utils/node_modules/d3-axis/src/axis.js","webpack://muze/./packages/muze-utils/node_modules/d3-path/src/path.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/constant.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/math.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/arc.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/curve/linear.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/point.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/line.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/area.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/descending.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/identity.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/curve/radial.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/lineRadial.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/array.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/symbol/circle.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/symbol/cross.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/symbol/diamond.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/symbol/star.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/symbol/square.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/symbol/triangle.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/symbol/wye.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/noop.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/curve/basis.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/curve/basisClosed.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/curve/basisOpen.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/curve/bundle.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/curve/cardinal.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/curve/cardinalClosed.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/curve/cardinalOpen.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/curve/catmullRom.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/curve/catmullRomClosed.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/curve/catmullRomOpen.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/curve/linearClosed.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/curve/monotone.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/curve/natural.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/curve/step.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/offset/none.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/order/none.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/stack.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/order/ascending.js","webpack://muze/./packages/muze-utils/node_modules/d3-ease/src/cubic.js","webpack://muze/./packages/muze-utils/node_modules/d3-ease/src/poly.js","webpack://muze/./packages/muze-utils/node_modules/d3-ease/src/sin.js","webpack://muze/./packages/muze-utils/node_modules/d3-ease/src/bounce.js","webpack://muze/./packages/muze-utils/node_modules/d3-ease/src/back.js","webpack://muze/./packages/muze-utils/node_modules/d3-ease/src/elastic.js","webpack://muze/./packages/muze-utils/node_modules/d3-voronoi/src/constant.js","webpack://muze/./packages/muze-utils/node_modules/d3-voronoi/src/point.js","webpack://muze/./packages/muze-utils/node_modules/d3-voronoi/src/RedBlackTree.js","webpack://muze/./packages/muze-utils/node_modules/d3-voronoi/src/Edge.js","webpack://muze/./packages/muze-utils/node_modules/d3-voronoi/src/Cell.js","webpack://muze/./packages/muze-utils/node_modules/d3-voronoi/src/Circle.js","webpack://muze/./packages/muze-utils/node_modules/d3-voronoi/src/Beach.js","webpack://muze/./packages/muze-utils/node_modules/d3-voronoi/src/Diagram.js","webpack://muze/./packages/muze-utils/node_modules/d3-voronoi/src/voronoi.js","webpack://muze/./packages/muze-utils/src/common-utils.js","webpack://muze/./packages/muze-utils/node_modules/d3-ease/src/linear.js","webpack://muze/./packages/muze-utils/node_modules/d3-ease/src/circle.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/symbol.js","webpack://muze/./packages/muze-utils/src/enums/stack-config.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/order/descending.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/offset/diverging.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/offset/expand.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/offset/wiggle.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/pie.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/namespaces.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/namespace.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/creator.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selector.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selectorAll.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/matcher.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/sparse.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/enter.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/constant.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/data.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/sort.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/attr.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/window.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/style.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/classed.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/text.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/html.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/raise.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/lower.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/insert.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/remove.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/clone.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/on.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/dispatch.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/index.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/select.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/selectAll.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/filter.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/exit.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/merge.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/order.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/call.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/nodes.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/node.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/size.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/empty.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/each.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/property.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/append.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/datum.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/select.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/local.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/sourceEvent.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/point.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/mouse.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/touch.js","webpack://muze/./packages/muze-utils/node_modules/d3-dispatch/src/dispatch.js","webpack://muze/./packages/muze-utils/node_modules/d3-drag/src/noevent.js","webpack://muze/./packages/muze-utils/node_modules/d3-drag/src/nodrag.js","webpack://muze/./packages/muze-utils/node_modules/d3-drag/src/constant.js","webpack://muze/./packages/muze-utils/node_modules/d3-drag/src/event.js","webpack://muze/./packages/muze-utils/node_modules/d3-drag/src/drag.js","webpack://muze/./packages/muze-utils/node_modules/d3-timer/src/timer.js","webpack://muze/./packages/muze-utils/node_modules/d3-timer/src/timeout.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/schedule.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/tween.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/interpolate.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/remove.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/selection.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/text.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/index.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/select.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/selectAll.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/filter.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/merge.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/transition.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/on.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/attr.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/attrTween.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/style.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/styleTween.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/delay.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/duration.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/ease.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/selection/transition.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/selection/index.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/selection/interrupt.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/interrupt.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/active.js","webpack://muze/./packages/muze-utils/src/renderer-utils.js","webpack://muze/./packages/muze-utils/src/DataSystem/selection.js","webpack://muze/./packages/muze-utils/src/DataSystem/data-object.js","webpack://muze/./packages/muze-utils/src/lifecycle-manager/event-list.js","webpack://muze/./packages/muze-utils/src/lifecycle-manager/lifecycle-manager.js","webpack://muze/./packages/muze-utils/src/lifecycle-manager/index.js","webpack://muze/./packages/muze-firebolt/src/enums/actions.js","webpack://muze/./packages/muze-firebolt/src/enums/selection.js","webpack://muze/./packages/muze-firebolt/src/selection-set/index.js","webpack://muze/./packages/muze-firebolt/src/helper/index.js","webpack://muze/./packages/muze-firebolt/src/firebolt.js","webpack://muze/./packages/muze-firebolt/src/actions/behavioural/generic.js","webpack://muze/./packages/muze-firebolt/src/actions/behavioural/volatile.js","webpack://muze/./packages/muze-firebolt/src/enums/behaviours.js","webpack://muze/./packages/muze-firebolt/src/actions/behavioural/highlight.js","webpack://muze/./packages/muze-firebolt/src/actions/behavioural/brush.js","webpack://muze/./packages/muze-firebolt/src/actions/behavioural/filter.js","webpack://muze/./packages/muze-firebolt/src/actions/behavioural/persistent.js","webpack://muze/./packages/muze-firebolt/src/actions/behavioural/select.js","webpack://muze/./packages/muze-firebolt/src/actions/physical/helpers/drag-action-config.js","webpack://muze/./packages/muze-firebolt/src/actions/physical/helpers/drag-event.js","webpack://muze/./packages/muze-firebolt/src/actions/physical/hover.js","webpack://muze/./packages/muze-firebolt/src/enums/constants.js","webpack://muze/./packages/muze-firebolt/src/actions/physical/helpers/index.js","webpack://muze/./packages/muze-firebolt/src/actions/physical/click.js","webpack://muze/./packages/muze-firebolt/src/actions/physical/index.js","webpack://muze/./packages/muze-firebolt/src/actions/physical/drag.js","webpack://muze/./packages/muze-firebolt/src/actions/physical/longtouch.js","webpack://muze/./packages/muze-firebolt/src/actions/physical/touch-drag.js","webpack://muze/./packages/muze-firebolt/src/side-effects/generic.js","webpack://muze/./packages/muze-firebolt/src/side-effects/surrogate.js","webpack://muze/./packages/muze-firebolt/src/side-effects/spawnable.js","webpack://muze/./packages/muze-firebolt/src/side-effects/selection-box/helper.js","webpack://muze/./packages/muze-firebolt/src/side-effects/selection-box/index.js","webpack://muze/./packages/muze-firebolt/src/actions/physical/selection-box-drag.js","webpack://muze/./packages/muze-tooltip/src/constants.js","webpack://muze/./packages/muze-tooltip/src/default-config.js","webpack://muze/./packages/muze-tooltip/src/helper.js","webpack://muze/./packages/muze-tooltip/src/strategy.js","webpack://muze/./packages/muze-tooltip/src/content.js","webpack://muze/./packages/muze-tooltip/src/tooltip.js","webpack://muze/./packages/muze-firebolt/src/side-effects/tooltip/strategies.js","webpack://muze/./packages/muze-firebolt/src/side-effects/tooltip/index.js","webpack://muze/./packages/muze-firebolt/src/side-effects/helper/index.js","webpack://muze/./packages/muze-firebolt/src/side-effects/crossline/index.js","webpack://muze/./packages/muze-firebolt/src/side-effects/plot-highlighter/strategy.js","webpack://muze/./packages/muze-firebolt/src/side-effects/plot-highlighter/index.js","webpack://muze/./packages/muze-firebolt/src/side-effects/filter/index.js","webpack://muze/./packages/muze-firebolt/src/side-effects/anchors/index.js","webpack://muze/./packages/muze-firebolt/src/side-effects/persistent-anchors.js","webpack://muze/./packages/muze-firebolt/src/side-effects/brush-anchors.js","webpack://muze/./packages/muze-firebolt/src/behaviour-effect-map.js","webpack://muze/./packages/visual-layer/src/enums/constants.js","webpack://muze/./packages/visual-layer/src/layers/area/default-config.js","webpack://muze/./packages/visual-layer/src/simple-layer/simple-layer.js","webpack://muze/./packages/visual-layer/src/enums/props.js","webpack://muze/./packages/muze-axis/src/enums/axis-orientation.js","webpack://muze/./packages/muze-axis/src/enums/scale-type.js","webpack://muze/./packages/muze-axis/src/enums/constants.js","webpack://muze/./packages/muze-axis/src/scale-creator.js","webpack://muze/./packages/muze-axis/src/cartesian-axis/default-config.js","webpack://muze/./packages/muze-axis/src/axis-renderer.js","webpack://muze/./packages/muze-axis/src/cartesian-axis/helper.js","webpack://muze/./packages/muze-axis/src/cartesian-axis/props.js","webpack://muze/./packages/muze-axis/src/cartesian-axis/simple-axis.js","webpack://muze/./packages/muze-axis/src/cartesian-axis/interpolators/linear.js","webpack://muze/./packages/muze-axis/src/cartesian-axis/interpolators/log.js","webpack://muze/./packages/muze-axis/src/cartesian-axis/interpolators/pow.js","webpack://muze/./packages/muze-axis/src/cartesian-axis/continous-axis.js","webpack://muze/./packages/muze-axis/src/cartesian-axis/band-axis.js","webpack://muze/./packages/muze-axis/src/cartesian-axis/time-axis.js","webpack://muze/./packages/muze-axis/src/color-axis/color-maps.js","webpack://muze/./packages/muze-axis/src/color-axis/defaults.js","webpack://muze/./packages/muze-axis/src/color-axis/props.js","webpack://muze/./packages/muze-axis/src/color-axis/color-strategy.js","webpack://muze/./packages/muze-axis/src/color-axis/color-axis.js","webpack://muze/./packages/muze-axis/src/size-axis/defaults.js","webpack://muze/./packages/muze-axis/src/size-axis/size-strategy.js","webpack://muze/./packages/muze-axis/src/size-axis/props.js","webpack://muze/./packages/muze-axis/src/size-axis/size-axis.js","webpack://muze/./packages/muze-axis/src/shape-axis/defaults.js","webpack://muze/./packages/muze-axis/src/shape-axis/props.js","webpack://muze/./packages/muze-axis/src/shape-axis/shape-axis.js","webpack://muze/./packages/muze-axis/src/shape-axis/helper.js","webpack://muze/./packages/muze-axis/src/data-type-scale-map.js","webpack://muze/./packages/transform/src/group-transform/index.js","webpack://muze/./packages/transform/src/identity-transform/index.js","webpack://muze/./packages/transform/src/transform-factory/index.js","webpack://muze/./packages/transform/src/enums/transform-type.js","webpack://muze/./packages/transform/src/stack-transform/index.js","webpack://muze/./packages/visual-layer/src/helpers/index.js","webpack://muze/./packages/visual-layer/src/base-layer/listener-map.js","webpack://muze/./packages/visual-layer/src/base-layer/default-options.js","webpack://muze/./packages/visual-layer/src/base-layer/base-layer.js","webpack://muze/./packages/visual-layer/src/layers/line/renderer.js","webpack://muze/./packages/visual-layer/src/layers/line/default-config.js","webpack://muze/./packages/visual-layer/src/layers/line/line.js","webpack://muze/./packages/visual-layer/src/layers/area/renderer.js","webpack://muze/./packages/visual-layer/src/layers/area/area.js","webpack://muze/./packages/visual-layer/src/layers/arc/default-config.js","webpack://muze/./packages/visual-layer/src/layers/arc/arc.js","webpack://muze/./packages/visual-layer/src/layers/arc/arc-helper.js","webpack://muze/./packages/visual-layer/src/layers/text/renderer.js","webpack://muze/./packages/visual-layer/src/layers/text/default-config.js","webpack://muze/./packages/visual-layer/src/layers/text/text.js","webpack://muze/./packages/visual-layer/src/layers/point/renderer.js","webpack://muze/./packages/visual-layer/src/layers/point/default-config.js","webpack://muze/./packages/visual-layer/src/layers/point/point.js","webpack://muze/./packages/visual-layer/src/layers/bar/renderer.js","webpack://muze/./packages/visual-layer/src/layers/bar/default-config.js","webpack://muze/./packages/visual-layer/src/layers/bar/bar-helper.js","webpack://muze/./packages/visual-layer/src/layers/bar/bar.js","webpack://muze/./packages/visual-layer/src/layers/tick/default-config.js","webpack://muze/./packages/visual-layer/src/layers/tick/renderer.js","webpack://muze/./packages/visual-layer/src/layers/tick/tick.js","webpack://muze/./packages/visual-layer/src/layer-factory/index.js","webpack://muze/./packages/visual-layer/src/defaults.js","webpack://muze/./packages/visual-group/src/enums/constants.js","webpack://muze/./packages/visual-group/src/visual-group/local-options.js","webpack://muze/./packages/visual-group/src/simple-group/simple-group.js","webpack://muze/./packages/visual-group/src/variable/variable.js","webpack://muze/./packages/visual-group/src/variable/composed-vars.js","webpack://muze/./packages/visual-group/src/variable/simple-var.js","webpack://muze/./packages/visual-group/src/encoder/field-sanitizer.js","webpack://muze/./packages/visual-group/src/encoder/visual-encoder.js","webpack://muze/./packages/visual-group/src/enums/scale-maps.js","webpack://muze/./packages/visual-group/src/data-type-scale-map.js","webpack://muze/./packages/visual-group/src/encoder/encoder-helper.js","webpack://muze/./packages/visual-group/src/encoder/cartesian-encoder.js","webpack://muze/./packages/visual-group/src/encoder/polar-encoder.js","webpack://muze/./packages/visual-group/src/encoder/retinal-encoder.js","webpack://muze/./packages/visual-group/src/group-helper/group-utils.js","webpack://muze/./packages/visual-group/src/enums/defaults.js","webpack://muze/./packages/muze-utils/src/DataSystem/dataSelect.js","webpack://muze/./packages/visual-unit/src/firebolt/action-behaviour-map.js","webpack://muze/./packages/visual-unit/src/enums/reactive-props.js","webpack://muze/./packages/visual-unit/src/helper/index.js","webpack://muze/./packages/visual-unit/src/helper/grid-lines.js","webpack://muze/./packages/visual-unit/src/default-config.js","webpack://muze/./packages/visual-unit/src/enums/constants.js","webpack://muze/./packages/visual-unit/src/local-options.js","webpack://muze/./packages/visual-unit/src/listener-map.js","webpack://muze/./packages/visual-unit/src/props.js","webpack://muze/./packages/visual-unit/src/firebolt/helper.js","webpack://muze/./packages/visual-unit/src/firebolt/payload-generator.js","webpack://muze/./packages/visual-unit/src/firebolt/data-propagator.js","webpack://muze/./packages/visual-unit/src/firebolt/index.js","webpack://muze/./packages/visual-unit/src/visual-unit.js","webpack://muze/./packages/visual-group/src/group-helper/matrix-model.js","webpack://muze/./packages/visual-group/src/group-helper/cell-creator.js","webpack://muze/./packages/visual-group/src/group-helper/matrix-resolver.js","webpack://muze/./packages/visual-group/src/visual-group/value-matrix.js","webpack://muze/./packages/visual-group/src/visual-group/change-listener.js","webpack://muze/./packages/visual-group/src/visual-group/props.js","webpack://muze/./packages/visual-group/src/visual-group/visual-group.js","webpack://muze/./packages/muze-legend/src/firebolt/behavioural/select.js","webpack://muze/./packages/muze-legend/src/firebolt/action-behaviour-map.js","webpack://muze/./packages/muze-legend/src/firebolt/behaviour-effect-map.js","webpack://muze/./packages/muze-legend/src/enums/behaviours.js","webpack://muze/./packages/muze-legend/src/enums/side-effects.js","webpack://muze/./packages/muze-legend/src/enums/constants.js","webpack://muze/./packages/muze-legend/src/firebolt/helper.js","webpack://muze/./packages/muze-legend/src/firebolt/legend-firebolt.js","webpack://muze/./packages/muze-legend/src/firebolt/physical/drag.js","webpack://muze/./packages/muze-legend/src/firebolt/physical/hover.js","webpack://muze/./packages/muze-legend/src/firebolt/physical/click.js","webpack://muze/./packages/muze-legend/src/firebolt/physical/index.js","webpack://muze/./packages/muze-legend/src/enums/actions.js","webpack://muze/./packages/muze-legend/src/firebolt/physical/selection-box-drag.js","webpack://muze/./packages/muze-legend/src/firebolt/side-effects/selection-box/index.js","webpack://muze/./packages/muze-legend/src/firebolt/side-effects/legend-highlighter/strategies.js","webpack://muze/./packages/muze-legend/src/firebolt/side-effects/legend-highlighter/index.js","webpack://muze/./packages/muze-legend/src/legend/props.js","webpack://muze/./packages/muze-legend/src/legend/defaults.js","webpack://muze/./packages/muze-legend/src/legend/legend-helper.js","webpack://muze/./packages/muze-legend/src/legend/simple-legend.js","webpack://muze/./packages/muze-legend/src/legend/position-config.js","webpack://muze/./packages/muze-legend/src/legend/renderer.js","webpack://muze/./packages/muze-legend/src/legend/discrete-legend.js","webpack://muze/./packages/muze-legend/src/legend/gradient-helper.js","webpack://muze/./packages/muze-legend/src/legend/gradient-legend.js","webpack://muze/./packages/muze-legend/src/legend/step-legend.js","webpack://muze/./packages/muze/src/constants.js","webpack://muze/./packages/muze/src/operators.js","webpack://muze/./packages/muze/src/action-model.js","webpack://muze/./packages/muze/src/defaults.js","webpack://muze/./packages/muze/src/options.js","webpack://muze/./packages/layout/src/enums/constants.js","webpack://muze/./packages/layout/src/generic-layout/index.js","webpack://muze/./packages/layout/src/grid-layout/defaults.js","webpack://muze/./packages/layout/src/grid-layout/span-maker.js","webpack://muze/./packages/layout/src/grid-layout/renderer.js","webpack://muze/./packages/layout/src/utils/index.js","webpack://muze/./packages/layout/src/visual-matrix/props.js","webpack://muze/./packages/layout/src/visual-matrix/default-config.js","webpack://muze/./packages/layout/src/visual-matrix/visual-matrix.js","webpack://muze/./packages/layout/src/grid-layout/computations.js","webpack://muze/./packages/layout/src/grid-layout/layout.js","webpack://muze/./packages/layout/src/grid-layout/layout-helper.js","webpack://muze/./packages/muze/src/transaction-support.js","webpack://muze/./packages/muze/src/canvas/component-resolver.js","webpack://muze/./packages/visual-cell/src/enums/constants.js","webpack://muze/./packages/visual-cell/src/enums/cell-type.js","webpack://muze/./packages/visual-cell/src/simple-cell.js","webpack://muze/./packages/visual-cell/src/enums/defaults.js","webpack://muze/./packages/visual-cell/src/props.js","webpack://muze/./packages/visual-cell/src/axis-cell.js","webpack://muze/./packages/visual-cell/src/blank-cell.js","webpack://muze/./packages/visual-cell/src/text-cell.js","webpack://muze/./packages/visual-cell/src/geom-cell.js","webpack://muze/./packages/visual-cell/src/defaults.js","webpack://muze/./packages/visual-cell/src/constants.js","webpack://muze/./packages/visual-cell/src/cell-registry.js","webpack://muze/./packages/muze/src/canvas/title-maker.js","webpack://muze/./packages/muze/src/canvas/legend-maker.js","webpack://muze/./packages/muze/src/canvas/layout-maker.js","webpack://muze/./packages/muze/src/canvas/defaults.js","webpack://muze/./packages/muze/src/canvas/local-options.js","webpack://muze/./packages/muze/src/canvas/renderer.js","webpack://muze/./packages/muze/src/canvas/helper.js","webpack://muze/./packages/muze/src/canvas/firebolt.js","webpack://muze/./packages/muze/src/canvas/canvas.js","webpack://muze/./packages/muze/src/default-registry.js","webpack://muze/./packages/visual-layer/src/layer-registry.js","webpack://muze/./packages/muze/src/muze.js"],"names":["webpackUniversalModuleDefinition","root","factory","exports","module","define","amd","window","installedModules","__webpack_require__","moduleId","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","getDefault","getModuleExports","object","property","prototype","hasOwnProperty","p","s","e","_typeof","undefined","__WEBPACK_AMD_DEFINE_RESULT__","__WEBPACK_AMD_DEFINE_FACTORY__","apply","__WEBPACK_AMD_DEFINE_ARRAY__","default","description","homepage","version","license","main","author","keywords","repository","type","url","contributors","email","dependencies","d3-dsv","devDependencies","babel-cli","babel-core","babel-eslint","babel-loader","babel-plugin-transform-runtime","babel-preset-env","babel-preset-es2015","babel-preset-flow","chai","cross-env","eslint","eslint-config-airbnb","eslint-plugin-import","eslint-plugin-jsx-a11y","eslint-plugin-react","istanbul-instrumenter-loader","jsdoc","json2yaml","karma","karma-chai","karma-chrome-launcher","karma-coverage-istanbul-reporter","karma-mocha","karma-spec-reporter","karma-webpack","marked","mocha","mocha-webpack","transform-runtime","webpack","webpack-cli","webpack-dev-server","scripts","test","ut","utd","build","start","lint","lint-errors","docs","u","f","Me","Ve","Ye","Be","a","ct","ft","st","lt","dt","pt","ht","vt","FLAT_JSON","DSV_STR","DSV_ARR","AUTO","CATEGORICAL","TEMPORAL","GEO","DISCRETE","MEASURE","DIMENSION","NORMAL","INVERSE","ALL","length","split","forEach","configurable","writable","TypeError","this","_ref","_rowDiff","sanitize","parsed","getData","fieldType","subType","concat","Array","isArray","from","Set","Math","min","max","parse","clone","fieldName","getMinDiff","unit","scale","defAggFn","push","data","bins","schema","h","Date","v","format","dtParams","nativeDate","RegExp","escape","replace","TOKEN_PREFIX","DATETIME_PARAM_SEQUENCE","YEAR","MONTH","DAY","HOUR","MINUTE","SECOND","MILLISECOND","defaultNumberParser","isFinite","parseInt","defaultRangeParser","toLowerCase","getTokenDefinitions","short","long","H","index","extract","parser","formatter","getHours","toString","P","M","getMinutes","S","getSeconds","K","getMilliseconds","join","getDay","A","getDate","b","getMonth","B","y","substring","getFullYear","Y","getTokenFormalNames","HOUR_12","AMPM_UPPERCASE","AMPM_LOWERCASE","SHORT_DAY","LONG_DAY","DAY_OF_MONTH","DAY_OF_MONTH_CONSTANT_WIDTH","SHORT_MONTH","LONG_MONTH","MONTH_OF_YEAR","SHORT_YEAR","LONG_YEAR","tokenResolver","arguments","findTokens","keys","indexOf","token","formatAs","String","extractTokenValue","noBreak","splice","map","match","shift","getNativeDate","unshift","Function","g","iterator","constructor","_","O","w","E","k","j","T","getTime","round","random","x","F","abs","N","R","createNamespace","fields","fieldsObj","getMeasure","getDimension","D","field","_value","C","next","done","return","L","U","V","G","CROSS","LEFTOUTER","RIGHTOUTER","NATURAL","FULLOUTER","W","getFieldspace","Error","_rowDiffset","Ke","z","X","floor","Q","$","Z","Map","has","set","ee","label","reduce","ne","_colIdentifier","sort","re","ie","ae","oe","sum","avg","every","first","last","count","std","sqrt","pow","ue","ce","fe","store","entries","__unregister","delete","se","le","pe","he","yt","ve","me","ye","ge","fieldDescription","be","_e","ReferenceError","__proto__","getPrototypeOf","fieldUnit","fieldScale","fieldDefAggFn","fieldNumberformat","numberFormat","setPrototypeOf","Number","POSITIVE_INFINITY","NEGATIVE_INFINITY","parseFloat","isNaN","Oe","Ae","trim","_unique","we","Ee","subtype","ke","je","minDiff","_dtf","Se","Te","bin","Fe","xe","dataFormat","assign","firstRowHeader","Ne","Re","De","Pe","Ce","Ie","JSON","stringify","Le","charCodeAt","slice","columns","parseRows","formatRows","Ue","He","fieldSeparator","Je","Ge","qe","We","op","meta","criteria","_derivation","ze","operation","filterByMeasure","getFieldsConfig","values","def","domain","some","valueOf","select","saveChild","Xe","getPartialFieldspace","__calculateFieldspace","calculateFieldsConfig","config","Qe","filter","projField","actualProjField","$e","_partialFieldspace","Ze","et","groupByString","params","tt","nonTraversingModel","excludeModels","handlePropagation","_children","nt","propagationNameSpace","propagateToSource","sourceId","propagateInterpolatedValues","persistent","mutableActions","filterFn","applyOnSource","action","model","models","path","_parent","sourceIdentifiers","propagationSourceId","groupByModel","reverse","rt","it","_fieldStoreName","_propagationNameSpace","immutableActions","_fieldspace","getAllFields","search","_fieldConfig","removeChild","findIndex","at","ot","_onPropagation","_sortingDetails","order","withUid","te","uids","addUid","columnWise","pop","de","defaultReducer","resolve","fieldsArr","replaceVar","addField","isMutableAction","payload","find","propConfig","filterImmutableAction","I","buckets","binCount","binSize","stops","add","mid","range","measureName","binFieldName","mt","Operators","compose","addParent","dispose","project","groupBy","calculateVariable","crossProduct","difference","naturalJoin","leftOuterJoin","rightOuterJoin","fullOuterJoin","union","Stats","DateTimeFormatter","DataFormat","FilteringMode","_set","requestAnimationFrame","webkitRequestAnimationFrame","mozRequestAnimationFrame","oRequestAnimationFrame","msRequestAnimationFrame","setTimeout","__lastTime","__id","unique","qualifiedName","seed","fn","outgoingEdges","accumulate","identity","dep","edges","_seed","requireResolve","retriever","history","resolver","electricEdges","retrieveDetails","q","listeners","nextFrame","currentFrame","qualifiedNodeMap","_wholeSet","_propagate","propagationOverride","currentFrameListeners","nextFrameListeners","_schedule","flush","perv","addDependencies","getDependencies","getResolvedList","addEdges","addElectricNode","append","__execUniqueElectricEdges","toArray","repeatHead","resetPropagationOverride","update","isRoot","_graph","_lockFlag","_reqQ","_addPropInModel","createNodesFrom","createElectricNodeOf","stopPropagation","setPropagationOverride","resetNodeValue","setProp","getNodeValue","getNodeFromQualifiedName","webpackPolyfill","deprecate","paths","children","_interopRequireDefault","obj","_lib2","require","_containerManager2","slLib","init","doc","win","document","htmlSplCharSpace"," ","documentSupport","getDocumentSupport","SVG_BBOX_CORRECTION","isWebKit","SmartLabelManager","id","container","useEllipses","options","wrapper","prop","prevInstance","isBrowserLess","maxCacheLimit","maxDefaultCacheLimit","getElementById","createContainer","innerHTML","testStrAvg","isHeadLess","isIE","offsetHeight","offsetWidth","parentContainerStyle","style","parentContainer","_containerManager","_showNoEllipses","_init","setStyle","textToLines","smartlabel","text","lines","_calCharDimWithCache","calculateDifference","size","csArr","tw","twi","cachedStyle","asymmetricDifference","maxAdvancedCacheLimit","_container","cache","_advancedCache","advancedCacheKey","_advancedCacheKey","cacheName","fontSize","fontFamily","fontWeight","fontStyle","cacheInitName","repeat","width","height","_getWidthFn","contObj","_containerObj","svgText","str","bbox","textContent","getBBox","_styleNotSet","setLineHeight","sCont","node","_context","context","_cache","charCache","_lineHeight","lineHeight","useEllipsesOnOverflow","getSmartText","maxWidth","maxHeight","noWrap","len","trimStr","tempArr","tmpText","maxWidthWithEll","toolText","oriWidth","oriHeight","newCharIndex","nearestChar","tempChar","getWidth","initialLeft","initialTop","getOriSizeImproveObj","spanArr","minWidth","elem","chr","elemRightMostPoint","elemLowestPoint","lastBR","removeFromIndex","removeFromIndexForEllipses","hasHTMLTag","maxStrWidth","lastDash","lastSpace","lastIndexBroken","strWidth","strHeight","oriTextArr","ellipsesStr","ellipsesWidth","dotWidth","characterArr","dashIndex","spaceIndex","lastLineBreak","fastTrim","ws","charAt","smartLabel","oriTextWidth","oriTextHeight","oriText","isTruncated","xmlTagRegEx","ltgtRegex","getOriSize","substr","getNearestBreakIndex","detailObj","tooltext","lastIndexOf","spanAdditionRegx","spanAdditionReplacer","classNameWithTag","classNameWithTagBR","childRetriverFn","childRetriverString","noClassTesting","classNameReg","className","spaceIdx","dashIdx","offsetLeft","offsetTop","parentNode","insertBefore","createElement","classNameBrReg","spanRemovalRegx","error","detailedCalculationFlag","textArr","letter","lSize","cumulativeSize","indiSizeStore","lib","userAgent","navigator","ceil","clsNameSpace","containerClass","brReplaceRegex","position","top","whiteSpace","padding","overflow","supportedStyle","font","font-family","font-weight","font-size","line-height","font-style","getElementsByClassName","opera","hasSVG","Boolean","SVGAngle","implementation","hasFeature","containerParent","body","appendChild","setAttribute","getElementsByTagName","sl","charLen","increment","avgWidth","styleObj","fSize","Muze","ContainerManager","maxContainers","svg","containers","rootNode","createElementNS","setAttributeNS","svgRoot","diff","containerObj","keyStr","prev","removeContainer","addContainer","avgCharWidth","display","cObj","ascending","NaN","bisector","compare","ascendingComparator","left","lo","hi","right","ascendingBisect","bisectRight","number","array","src_range","stop","step","e10","e5","e2","src_ticks","ticks","tickIncrement","power","log","LN10","tickStep","step0","step1","quantile","valueof","i0","value0","each","remove","clear","empty","src_nest","sortValues","rollup","nest","sortKeys","depth","createResult","setResult","keyValue","valuesByKey","result","createObject","setObject","createMap","setMap","sortKey","proto","implicit","ordinal","unknown","copy","band","bandwidth","ordinalRange","paddingInner","paddingOuter","align","rescale","sequence","rangeRound","invertExtent","r0","r1","hiIndex","getClosestIndexOf","invert","arr","side","highVal","d1","low","high","extend","parent","definition","Color","reI","reN","reP","reHex3","reHex6","reRgbInteger","reRgbPercent","reRgbaInteger","reRgbaPercent","reHslPercent","reHslaPercent","named","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","color","exec","Rgb","rgbn","rgba","hsla","rgbConvert","rgb","opacity","hex","Hsl","hsl","hslConvert","hsl2rgb","m1","m2","displayable","brighter","darker","deg2rad","PI","rad2deg","Xn","Yn","Zn","t0","t1","t2","t3","labConvert","Lab","Hcl","cos","sin","rgb2lrgb","xyz2lab","lab","lab2xyz","lrgb2rgb","hclConvert","atan2","hcl","ED","EB","BC_DA","cubehelix","cubehelixConvert","Cubehelix","bl","basis","v0","v1","v2","v3","cosh","sinh","src_constant","linear","hue","constant","gamma","nogamma","exponential","src_rgb","rgbGamma","end","colorRgb","rgbSpline","spline","colors","rgbBasis","src_number","reA","reB","source","cssNode","cssRoot","cssView","svgNode","src_string","am","bm","bs","bi","lastIndex","one","zero","src_value","value_typeof","string","setTime","nb","na","src_round","degrees","translateX","translateY","rotate","skewX","scaleX","scaleY","decompose","atan","interpolateTransform","pxComma","pxParen","degParen","translate","xa","ya","xb","yb","interpolateTransformCss","parseCss","documentElement","defaultView","transform","getComputedStyle","getPropertyValue","interpolateTransformSvg","parseSvg","baseVal","consolidate","matrix","SQRT2","colorHsl","hslLong","colorHcl","cubehelixGamma","colorCubehelix","cubehelixLong","piecewise","interpolate","d3_scale_src_constant","d3_scale_src_number","deinterpolateLinear","bimap","deinterpolate","reinterpolate","d0","polymap","bisect","target","clamp","continuous","output","input","interpolateValue","deinterpolateClamp","reinterpolateClamp","interpolateRound","formatDecimal","toExponential","coefficient","src_exponent","formatSpecifier","specifier","FormatSpecifier","fill","sign","symbol","comma","precision","prefixExponent","locale","formatPrefix","formatTrim","out","i1","formatRounded","exponent","formatTypes","%","toFixed","toPrecision","toUpperCase","src_identity","prefixes","src_locale","group","grouping","thousands","formatGroup","currency","decimal","numerals","formatNumerals","percent","newFormat","prefix","suffix","formatType","maybeSuffix","valuePrefix","valueSuffix","valueNegative","Infinity","defaultLocale","formatLocale","src_tickFormat","precisionPrefix","precisionRound","precisionFixed","linearish","tickFormat","nice","src_nice","interval","x0","x1","pow10","powp","base","exp","logp","log10","log2","reflect","logs","pows","raise","thresholds","threshold","quantiles","quantize","newInterval","floori","offseti","date","offset","previous","millisecond","durationMinute","durationWeek","second","getUTCSeconds","src_second","minute","src_minute","hour","getTimezoneOffset","day","setHours","setDate","weekday","sunday","monday","tuesday","wednesday","thursday","friday","saturday","month","setMonth","year","setFullYear","utcMinute","setUTCSeconds","getUTCMinutes","utcHour","setUTCMinutes","getUTCHours","utcDay","setUTCHours","setUTCDate","getUTCDate","src_utcDay","utcWeekday","getUTCDay","utcSunday","utcMonday","utcTuesday","utcWednesday","utcThursday","utcFriday","utcSaturday","utcMonth","setUTCMonth","getUTCMonth","getUTCFullYear","utcYear","setUTCFullYear","localDate","utcDate","UTC","newYear","timeFormat","utcFormat","utcParse","pads","-","0","numberRe","percentRe","requoteRe","pad","requote","formatRe","names","formatLookup","parseWeekdayNumberSunday","parseWeekdayNumberMonday","parseWeekNumberSunday","parseWeekNumberISO","parseWeekNumberMonday","parseFullYear","parseYear","parseZone","parseMonthNumber","parseDayOfMonth","parseDayOfYear","parseHour24","parseMinutes","parseSeconds","parseMilliseconds","parseMicroseconds","parseLiteralPercent","parseUnixTimestamp","parseUnixTimestampSeconds","formatDayOfMonth","formatHour24","formatHour12","formatDayOfYear","timeDay","timeYear","formatMilliseconds","formatMicroseconds","formatMonthNumber","formatMinutes","formatSeconds","formatWeekdayNumberMonday","formatWeekNumberSunday","timeSunday","formatWeekNumberISO","timeThursday","formatWeekdayNumberSunday","formatWeekNumberMonday","timeMonday","formatYear","formatFullYear","formatZone","formatUTCDayOfMonth","formatUTCHour24","formatUTCHour12","formatUTCDayOfYear","formatUTCMilliseconds","getUTCMilliseconds","formatUTCMicroseconds","formatUTCMonthNumber","formatUTCMinutes","formatUTCSeconds","formatUTCWeekdayNumberMonday","dow","formatUTCWeekNumberSunday","formatUTCWeekNumberISO","formatUTCWeekdayNumberSunday","formatUTCWeekNumberMonday","formatUTCYear","formatUTCFullYear","formatUTCZone","formatLiteralPercent","formatUnixTimestamp","formatUnixTimestampSeconds","locale_dateTime","dateTime","locale_date","locale_time","time","locale_periods","periods","locale_weekdays","days","locale_shortWeekdays","shortDays","locale_months","months","locale_shortMonths","shortMonths","periodRe","periodLookup","weekdayRe","weekdayLookup","shortWeekdayRe","shortWeekdayLookup","monthRe","monthLookup","shortMonthRe","shortMonthLookup","formats","formatShortWeekday","formatWeekday","formatShortMonth","formatMonth","formatPeriod","utcFormats","formatUTCShortWeekday","formatUTCWeekday","formatUTCShortMonth","formatUTCMonth","formatUTCPeriod","parses","parseShortWeekday","parseWeekday","parseShortMonth","parseMonth","parseLocaleDateTime","parseSpecifier","parsePeriod","parseLocaleDate","parseLocaleTime","newParse","newDate","week","toISOString","durationSecond","durationHour","durationDay","durationMonth","durationYear","calendar","formatMillisecond","formatSecond","formatMinute","formatHour","formatDay","formatWeek","tickIntervals","tickInterval","src_time","timeMonth","timeWeek","timeHour","timeMinute","timeSecond","timeMillisecond","src_colors","interpolateCubehelixLong","ramp","sequential","interpolator","d3_scale_chromatic_src_colors","src_ramp","scheme","interpolateRgbBasis","warm","cool","sequential_multi_rainbow","ts","sequential_multi_viridis","magma","inferno","plasma","ReservedFields","ROW_ID","CommonProps","ACTION_INF","ON_LAYER_DRAW","d3_axis_src_identity","bottom","epsilon","entering","__axis","axis","orient","tickArguments","tickValues","tickTransform","tickSizeInner","tickSizeOuter","tickPadding","spacing","range0","range1","center","selection","selectAll","tick","tickExit","exit","tickEnter","enter","attr","line","merge","insert","transition","getAttribute","tickSize","pi","tau","tauEpsilon","Path","_x0","_y0","_x1","_y1","moveTo","closePath","lineTo","quadraticCurveTo","y1","bezierCurveTo","x2","y2","arcTo","y0","x21","y21","x01","y01","l01_2","x20","y20","l21_2","l20_2","l21","l01","acos","t01","t21","arc","a0","a1","ccw","dx","dy","cw","da","rect","d3_shape_src_constant","halfPi","asin","arcInnerRadius","innerRadius","arcOuterRadius","outerRadius","arcStartAngle","startAngle","arcEndAngle","endAngle","arcPadAngle","padAngle","cornerTangents","rc","ox","oy","x11","y11","x10","y10","x00","y00","d2","cx0","cy0","cx1","cy1","dx0","dy0","dx1","dy1","cx","cy","Linear","areaStart","_line","areaEnd","lineStart","_point","lineEnd","point","curve_linear","src_line","pointX","pointY","defined","curve","curveLinear","buffer","defined0","src_area","area","x0z","y0z","arealine","lineX0","lineY0","lineY1","lineX1","src_descending","d3_shape_src_identity","curveRadial","Radial","_curve","radial","symbol_circle","draw","symbol_cross","tan30","tan30_2","diamond","kr","kx","ky","star","square","sqrt3","triangle","wye","noop","that","Basis","BasisClosed","_x2","_x3","_x4","_y2","_y3","_y4","BasisOpen","Bundle","beta","_basis","_beta","_x","_y","custom","bundle","_k","Cardinal","tension","cardinal","CardinalClosed","_x5","_y5","CardinalOpen","_l01_a","_l01_2a","_l12_a","_l12_2a","_l23_a","_l23_2a","CatmullRom","alpha","_alpha","x23","y23","curve_catmullRom","catmullRom","CatmullRomClosed","CatmullRomOpen","LinearClosed","slope3","h0","h1","s0","s1","slope2","MonotoneX","MonotoneY","ReflectContext","Natural","controlPoints","_t0","px","py","Step","_t","curve_step","stepBefore","stepAfter","none","series","order_none","stackValue","order_ascending","sums","cubicInOut","polyIn","polyOut","polyInOut","b1","b2","b3","b4","b5","b6","b7","b8","b9","b0","bounceOut","backIn","overshoot","backOut","backInOut","elasticOut","elasticIn","amplitude","period","d3_voronoi_src_constant","elasticInOut","RedBlackTree","RedBlackNode","RedBlackRotateLeft","tree","RedBlackRotateRight","RedBlackFirst","after","grandpa","uncle","sibling","createEdge","edge","setEdgeEnd","cells","halfedges","createBorderEdge","vertex","clipEdge","ax","ay","connectEdge","fm","fb","lx","ly","rx","ry","fx","fy","cellHalfedgeAngle","cell","site","va","vb","cellHalfedgeStart","cellHalfedgeEnd","firstCircle","circlePool","attachCircle","lArc","rArc","lSite","cSite","rSite","bx","by","epsilon2","ha","hc","circle","Circle","before","circles","detachCircle","beachPool","createBeach","beach","Beach","detachBeach","beaches","removeBeach","disappearing","iArc","nArcs","addBeach","dxl","dxr","directrix","leftBreakPoint","rightBreakPoint","createCell","newArc","hb","rfocx","rfocy","pby2","lfocx","lfocy","plby2","hl","aby2","triangleArea","lexicographic","Diagram","sites","extent","sortCellHalfedges","clipEdges","clipCells","iCell","iHalfedge","nHalfedges","startX","startY","endX","endY","nCells","cover","dc","v00","v01","v11","v10","polygons","polygon","triangles","e1","links","radius","_found","vx","vy","src_voronoi","voronoi","HTMLElement","isSimpleObject","common_utils_typeof","getUniqueId","sanitizeIP","typeObj","nonExistentKeys","checkExistence","getMax","_toConsumableArray","getMin","getDomainFromData","domArr","DimensionSubtype","firstMin","secondMin","firstMax","secondMax","symbolFns","symbolCircle","cross","symbolCross","symbolDiamond","symbolSquare","symbolStar","symbolWye","symbolTriangle","easeFns","cubic","easeCubic","bounce","easeBounce","elastic","easeElastic","back","easeBack","poly","easePoly","circleInOut","getQualifiedClassName","cancelAnimationFrame","cls","defaultValue","param","objectIterator","Voronoi","_classCallCheck","_voronoi","_voronoiFn","Store","Model","_listeners","serialize","propName","propNames","callBack","instantCall","props","on","calculatedProp","intSanitizer","val","transactor","holder","conf","_loop","_defineProperty","_len","_key","compareTo","paramsLen","prevVal","spreadParams","sanitization","typeCheck","typeExpected","preset","oldValues","generateGetterSetters","propInfo","typeChecker","isEqual","oldVal","newVal","arraysEqual","arr1","arr2","is","ERROR_MSG","INTERFACE_IMPL","mergeRecursive","sink","numberInterpolator","interpolateNumber","piecewiseInterpolator","rgbToHsv","detectColor","col","getDataModelFromRange","dataModel","selFields","selFn","getDataModelFromIdentifiers","identifiers","filteredDataModel","fieldsConfig","dataArr","filteredSchema","include","propField","idx","registerListeners","listenerMap","propListenerMap","mapObj","propType","listenerFn","listener","isValidValue","getObjProp","_len2","_key2","retObj","getSymbol","stackOrders","stackOrderNone","_stackOrders","stackOrderAscending","stackOffsets","yp","yn","_stackOffsets","stackOffsetNone","s2","si","sij0","s3","sk","stack","orderNone","offsetNone","oz","kz","sz","sij","ki","d3Stack","pathInterpolators","curveStepAfter","curveStepBefore","curveStep","curveCatmullRom","Symbols","axisLeft","axisRight","axisTop","axisBottom","pie","descending","arcs","pa","cornerRadius","padRadius","a01","a11","a00","a10","da0","da1","ap","rp","rc0","rc1","p0","p1","oc","intersect","x3","y3","x32","y32","kc","lc","centroid","Scales","scaleBand","getSmallestDiff","points","xhtml","namespaces","xlink","xml","xmlns","namespace","space","local","creator","fullname","creatorFixed","ownerDocument","creatorInherit","uri","namespaceURI","src_selector","selector","querySelector","selectorAll","querySelectorAll","matcher","matches","element","vendorMatches","webkitMatchesSelector","msMatchesSelector","mozMatchesSelector","oMatchesSelector","sparse","EnterNode","datum","_next","__data__","child","keyPrefix","bindIndex","groupLength","dataLength","bindKey","nodeByKeyValue","keyValues","src_window","styleValue","classArray","classList","ClassList","_node","_names","classedAdd","list","classedRemove","contains","textRemove","htmlRemove","nextSibling","lower","previousSibling","firstChild","constantNull","selection_cloneShallow","cloneNode","selection_cloneDeep","filterEvents","event","mouseenter","mouseleave","filterContextListener","contextListener","related","relatedTarget","compareDocumentPosition","event1","event0","onRemove","typename","__on","removeEventListener","capture","onAdd","wrap","addEventListener","customEvent","args","sourceEvent","dispatchEvent","CustomEvent","createEvent","initEvent","bubbles","cancelable","detail","Selection","groups","parents","_groups","_parents","subgroups","subnode","subgroup","enterGroup","updateGroup","_enter","_exit","groups0","groups1","m0","merges","group0","group1","compareNode","sortgroups","sortgroup","callback","nodes","getAttributeNS","attrRemoveNS","removeAttributeNS","attrRemove","removeAttribute","attrFunctionNS","attrFunction","attrConstantNS","attrConstant","priority","styleRemove","removeProperty","styleFunction","setProperty","styleConstant","propertyRemove","propertyFunction","propertyConstant","classed","classedFunction","classedTrue","classedFalse","textFunction","textConstant","html","htmlFunction","htmlConstant","deep","typenames","parseTypenames","dispatch","dispatchFunction","dispatchConstant","src_select","nextId","Local","current","src_point","ownerSVGElement","createSVGPoint","clientX","clientY","matrixTransform","getScreenCTM","inverse","getBoundingClientRect","clientLeft","clientTop","mouse","changedTouches","src_touch","touches","identifier","touch","Dispatch","types","nopropagation","stopImmediatePropagation","noevent","preventDefault","nodrag","view","__noselect","MozUserSelect","d3_drag_src_constant","DragEvent","subject","active","defaultFilter","button","defaultContainer","defaultSubject","defaultTouchable","taskHead","taskTail","src_drag","mousedownx","mousedowny","mousemoving","touchending","touchable","gestures","clickDistance2","drag","mousedowned","touchstarted","touchmoved","touchended","gesture","beforestart","mousemoved","mouseupped","yesdrag","noclick","clearTimeout","sublisteners","clickDistance","frame","timeout","pokeDelay","clockLast","clockNow","clockSkew","clock","performance","timer_typeof","now","setFrame","clearNow","Timer","_call","_time","timer","delay","restart","wake","timerFlush","nap","sleep","poke","clearInterval","setInterval","src_timeout","elapsed","emptyOn","emptyTween","CREATED","SCHEDULED","STARTING","STARTED","RUNNING","ENDING","ENDED","transition_schedule","timing","schedules","__transition","self","tween","state","duration","ease","schedule","tweenValue","_id","transition_interpolate","interpolateRgb","interpolateString","Transition","_name","newId","selection_prototype","inherit","id0","id1","onFunction","on0","on1","sit","attrTween","value00","value10","interpolate0","value1","attrTweenNS","styleTween","styleRemoveEnd","removeFunction","tweenRemove","tween0","tween1","tweenFunction","delayFunction","delayConstant","durationFunction","durationConstant","easeConstant","defaultTiming","easeCubicInOut","interrupt","selectElement","makeElement","elemType","callbacks","keyFn","SVGElement","selectorVal","selectorType","actualSelector","enterSel","mergeSel","exitSel","_len3","_key3","applyStyle","setElementAttrs","attrs","setAttrs","setStyles","styles","createElements","sel","getClientPoint","pos","clientPoint","getEvent","d3event","getD3Drag","d3drag","getSmartComputedStyle","css","textEl","mandatoryStyle","fill-opacity","renderer_utils_typeof","computedStyle","styleForSmartLabel","hasTouch","selection_classCallCheck","_data","_idMap","_mode","_enterdata","_exitdata","_this","newData","idGetter","_this2","_idGetter","tempMap","purgedIds","purged","temp","_this3","item","_this4","_this5","_this6","DataObject","data_object_classCallCheck","events","EVENT_LIST","composition","resolveFn","notification","hasOwn","LifeCycleManager","lifecycle_manager_classCallCheck","_eventList","_promises","_notifiers","_lifeCycles","_unreleasedLifeCycles","_boot","acc","_preparePromises","eventName","Promise","_makeNotifierPromise","formalName","client","_releasePromisesFromCache","_notify","stage","_resolvePromise","promise","retrieve","_callLifeCycleCallback","_cachePromise","_resetTargetPromise","lifeCycles","DRAG","HOVER","SELECTIONDRAG","CLICK","LONGTOUCH","TOUCHDRAG","ALL_ACTIONS","SELECTION_NEW_ENTRY","SELECTION_NEW_EXIT","SELECTION_NULL","SELECTION_OLD_ENTRY","SELECTION_OLD_EXIT","SelectionSet","completeSet","_volatile","selection_set_classCallCheck","_completeSetCount","_lockedSelection","_resetted","ids","entrySet","exitSet","lockedSel","addSet","removeSet","updateSet","changeSideEffectAvailability","toEnable","sideEffects","change","enable","disable","getMergedSet","helper_toConsumableArray","conditionsMap","newEntry","SELECTION","oldEntry","mergedEnter","newExit","oldExit","mergedExit","complete","getSetInfo","selectionSet","propagationData","resetted","getModelFromSet","condition","Firebolt","actions","behaviourEffectMap","firebolt_classCallCheck","_sideEffectDefinitions","_sideEffects","_propagationInf","_actions","behavioural","physical","_selectionSet","_volatileSelectionSet","_propagationFields","_sourceSideEffects","selectionBox","_propagationBehaviourMap","_sourceBehaviours","_actionBehaviourMap","_config","_behaviourEffectMap","_entryExitSet","_actionHistory","_queuedSideEffects","_mappedActions","mapSideEffects","registerBehaviouralActions","registerSideEffects","registerPhysicalBehaviouralMap","physicalBehaviouralMap","registerPhysicalActions","sideEffectConf","behEffectMap","preventDefaultActions","effectNames","effects","firebolt_toConsumableArray","behaviours","initializeBehaviouralActions","dispatchableBehaviours","Action","prepareSelectionSets","sideEffectStore","actionHistory","queuedSideEffects","sideEffect","combinedSet","unionSets","behaviour","entryExitSet","existingModel","effect","firebolt_typeof","sideEffectInstance","isEnabled","mutates","dispatchSideEffect","propagationInfo","propagate","getSideEffects","propagationSelectionSet","getPropagationSelectionSet","shouldApplySideEffects","sourceSelectionSet","applicableSideEffects","getApplicableSideEffects","applySideEffects","physicalAction","actionBehaviourMap","behaviourMap","unsubscribe","onDataModelPropagation","propValue","dispatchBehaviour","uniqueIds","behaviouralActions","volatileSelectionSet","sideEffectDefinitions","initializeSideEffects","sideEffectsMap","SideEffect","initedActions","initializePhysicalActions","physicalActions","initedPhysicalActions","mappedActions","getDefaultTargetContainer","keyName","bindActionWithBehaviour","targets","behaviourList","mount","propagationInf","xFields","yFields","xMeasures","FieldType","yMeasures","filterPropagationModel","propModel","measures","_propModel$getData","filteredModel","fieldMap","row","getFullData","propagationSource","applicableSelectionSets","GenericBehaviour","firebolt","generic_classCallCheck","_enabled","selectionSets","getSelectionSets","_firebolt$getAddSetFr","getAddSetFromCriteria","getPropagationInf","setSelectionSet","getEntryExitSet","_selectionSet$getSets","getSets","setConfig","isSourceFieldPresent","getSourceFields","getSchema","VolatileBehaviour","reset","existingAddSet","updateExit","getCompleteSet","BRUSH","HIGHLIGHT","TOOLTIP","FILTER","SELECT","HighlightBehaviour","BrushBehaviour","BEHAVIOURNAMES","FilterBehaviour","PersistentBehaviour","updateEntry","mergedExitSet","completeSetCount","SelectBehaviour","getDragActionConfig","sourceInfo","axes","xAxis","yAxis","axisFields","xField","getMembers","yField","xFieldType","yFieldType","dimensions","stPos","startPos","endPos","dragDim","isXDimension","isYDimension","xRange","yRange","selectedDomains","rangeObj","xdom","ydom","snap","getNearestRange","attachDragEvent","targetEl","drawingInf","d3Drag","touchStart","getDrawingContext","getSourceInfo","beh","dragEnd","hover","interaction","tooltip","svgContainer","nearestPoint","getNearestPoint","getAllPoints","showInPosition","generatePayloadFromEvent","click","ACTIONNAMES","physical_defineProperty","_physicalActions","longtouch","touchEnd","touchdrag","GenericSideEffect","side_effects_generic_classCallCheck","_strategy","_strategies","defaultConfig","SurrogateSideEffect","interactionType","layers","layer","interactive","applyInteractionStyle","SpawnableSideEffect","_drawingContext","changeVisibility","sideEffectGroup","visible","defClassName","classPrefix","SelectionBox","boxConf","box","drawingContext","mountPoint","unitWidth","unitHeight","selectionGroupClassName","hide","sourceInf","_getBoxDimensionsFrom","getBoxDimensionsFromPayload","direction","xDim","yDim","xLinear","yLinear","xCriteria","yCriteria","bandScale","x1Val","x2Val","x1DomainIndex","x2DomainIndex","_sort","_sort2","helper_slicedToArray","getScaleValue","getUnitWidth","y1Val","y2Val","y1DomainIndex","y2DomainIndex","_sort3","_sort4","_xDim","_yDim","dimension","show","selectionBoxDrag","onDrag","boxClassName","INITIAL_STYLE","connectorClassName","margin","content","iconContainerSize","iconScale","iconShape","iconColor","rowMargin","separator","parentClassName","arrow","disabled","getArrowPos","dim","measurement","arrowPos","boxHeight","boxWidth","arrowWidth","plotBottom","boxBottom","plotRight","boxRight","placeArrow","tooltipArrow","_tooltipArrow","tooltipBackground","_tooltipBackground","arrowConf","_arrowOrientation","timeFormats","timeDurations","defaultTooltipFormatters","_formatters","formatters","nearestInterval","getNearestInterval","strategy_defineProperty","buildTooltipData","fieldValues","dataObj","fieldspace","dimensionMeasureMap","detailFields","containsDetailField","dataLen","getRowContent","formattedValue","measureIndex","formatterFn","uniqueVals","strategy_toConsumableArray","colorAxis","shapeAxis","shape","sizeAxis","isRetinalField","associatedMeasures","icon","getColor","getShape","getSize","measure","margin-left","displayFormat","getTabularData","timeDiffs","rows","fieldObj","allMeasures","strategy","DEFAULT_STRATEGY","Content","content_classCallCheck","_model","_formatter","ctx","_mount","table","tbody","margin-right","el","Tooltip","htmlContainer","tooltip_classCallCheck","connectorContainer","tooltipConf","contentClass","_tooltipContainer","_contentContainer","_contents","_tooltipConnectorContainer","qualifiedClassName","addClass","defConf","contentConfig","reorderContainers","contentConf","render","_target","repositionArrow","arrowDisabled","arrowOrient","outsidePlot","connector","_offset","orientation","_extent","arrowSize","topSpace","dimX","rightSpace","leftSpace","positionTop","positionRight","positionLeft","positionHorizontal","positionVertical","_position","_arrowPos","strategies","showSelectedItems","dm","aggregatedModel","fieldsConf","measureNames","side_effects_tooltip_classCallCheck","tooltip_possibleConstructorReturn","_tooltips","totalHeight","totalWidth","isEmpty","tooltips","boundBox","dataModels","fragmented","showVertically","tooltipPos","boxes","tooltip_toConsumableArray","targetFields","sourceFields","indices","plotDimensions","getPlotPointsFromIdentifiers","plotDim","dataTransform","layoutContainer","layoutBoundBox","unitBoundBox","tooltipInst","TooltipRenderer","timeDiffsByField","positionRelativeTo","tooltipBoundBox","getContents","spaceOutBoxes","spaceOutIfOverlap","firstBox","secondBox","opposite","Crossline","bandWidth","bandClass","lineClass","elemData","fieldIndex","axisIndex","fieldInst","xOffset","plotWidth","crossline_toConsumableArray","getPlotSpan","getPlotPadding","startPx","endPx","dataPoint","parentGroup","CLASSPREFIX","fade","fadeFn","focus","highlight","PlotHighlighter","plot_highlighter_classCallCheck","plot_highlighter_possibleConstructorReturn","FilterEffect","entryModel","clearCaching","resetData","enableCaching","AnchorEffect","anchors_classCallCheck","anchors_possibleConstructorReturn","_layers","addAnchorLayers","shouldDrawAnchors","encodingFieldsInf","layerObj","instances","addLayer","alias","mark","encoding","colorField","sizeField","defaultSizeValue","getTransitionConfig","calculateDomain","linkedLayer","elems","_linkedLayer$getTrans","getTransformedDataFromIdentifiers","_linkedLayer$getTrans2","anchors_slicedToArray","transformedData","transformedDataModel","DataModel","PersistentAnchors","BrushAnchors","BEHAVIOURS","behaviour_effect_map_defineProperty","STACK","ANGLE","RADIUS","SIZE","COLOR","SHAPE","ENCODING","X0","Y0","nearestPointThreshold","strokeOpacity","connectNullData","SimpleLayer","DATA_UPDATED","BOTTOM","TOP","LEFT","RIGHT","axisOrientationMap","AxisOrientation","axis_orientation_defineProperty","_axisOrientationMap","LINEAR","BAND","TIME","ORDINAL","QUANTIZE","QUANTILE","LOG","POW","IDENTITY","SEQUENTIAL","THRESHOLD","CONTINOUS","HIDDEN","scaleLinear","scales","scaleThreshold","scaleLog","scalePow","scaleIdentity","scaleOrdinal","scaleSequential","scaleQuantize","scaleQuantile","scaleTime","scaleMap","ScaleType","scale_creator_defineProperty","_scaleMap","createScale","scaleFactory","axisName","axisNamePadding","fixedBaseline","labels","rotation","smartTicks","numberOfTicks","showAxisName","showInnerTicks","showOuterTicks","yOffset","rotateAxis","instance","tickText","labelManager","getTickSize","yShift","xShift","tickFormatter","tickLabelDim","quadrant","rotationNormalizer","angleToRadian","angle","changeTickOrientation","selectContainer","axisInstance","_smartTicks","isSmartTicks","setFixedBaseline","setAxisNamePos","textNode","axisNameHeight","labelOffset","availableSpace","getTickLabelInfo","largestLabel","labelProps","smartTick","axisTickLabels","allLabelLengths","_context$config","labelFunc","_tickLabelStyle","originalLabel","formattedLabel","largestLabelDim","setOffset","logicalSpace","adjustRange","getAxisOffset","timeDiff","avWidth","bars","registerChangeListeners","_domainLock","getHorizontalAxisSpace","axisDimensions","axisLabelDim","axisDimHeight","tickDimHeight","tickDimWidth","minTickDiff","getMinTickDifference","cartesian_axis_helper_toConsumableArray","_minTickDistance","getVerticalAxisSpace","_ref2","PROPS","_rotationLock","createAxis","commit","SimpleAxis","simple_axis_classCallCheck","_dependencies","_range","_domain","_axisDimensions","defCon","simpleConfig","bodyElem","_axisNameStyle","_scale","_axis","setTickConfig","axisClass","getTickFormatter","labelWidth","domainVal","computeAxisDimensions","_context$config2","_getTickLabelInfo","labelHeight","setRotationConfig","calculateContinousSpace","getAxisDimensions","axisDimWidth","_getHorizontalAxisSpa2","_getVerticalAxisSpace2","currentDomain","cachedDomain","updateDomainBounds","registerEvent","renderAxis","setTickValues","axisNameSpace","axisNameWidth","unsubscribeAll","LinearInterpolator","LogInterpolator","PowInterpolator","interpolatorMap","continous_axis_defineProperty","_interpolatorMap","ContinousAxis","continous_axis_classCallCheck","continous_axis_possibleConstructorReturn","InterpolatorCls","_interpolator","isOffset","_config3","labelSpace","axisHeight","getLogicalSpace","axisWidth","getTickValues","_config5","getNumberOfTicks","labelDim","tickLength","numberOfValues","_config6","_axisDimensions$large","BandAxis","_config2","calculateBandSpace","largestDimHeight","largestDimWidth","_getHorizontalAxisSpa","_getVerticalAxisSpace","availSpace","smartWidth","TimeAxis","time_axis_classCallCheck","time_axis_possibleConstructorReturn","_minDiff","time_axis_get","_getAxisDimensions","x11Colors","Pink","LightPink","HotPink","DeepPink","PaleVioletRed","MediumVioletRed","LightSalmon","Salmon","DarkSalmon","LightCoral","IndianRed","Crimson","FireBrick","DarkRed","Red","OrangeRed","Tomato","Coral","DarkOrange","Orange","Gold","Yellow","LightYellow","LemonChiffon","LightGoldenrodYellow","PapayaWhip","Moccasin","PeachPuff","PaleGoldenrod","Khaki","DarkKhaki","Cornsilk","BlanchedAlmond","Bisque","NavajoWhite","Wheat","BurlyWood","Tan","RosyBrown","SandyBrown","Goldenrod","DarkGoldenrod","Peru","Chocolate","SaddleBrown","Sienna","Brown","Maroon","DarkOliveGreen","Olive","OliveDrab","YellowGreen","LimeGreen","Lime","LawnGreen","Chartreuse","GreenYellow","SpringGreen","MediumSpringGreen","LightGreen","PaleGreen","DarkSeaGreen","MediumSeaGreen","SeaGreen","ForestGreen","Green","DarkGreen","MediumAquamarine","Aqua","Cyan","LightCyan","PaleTurquoise","Aquamarine","Turquoise","MediumTurquoise","DarkTurquoise","LightSeaGreen","CadetBlue","DarkCyan","Teal","LightSteelBlue","PowderBlue","LightBlue","SkyBlue","LightSkyBlue","DeepSkyBlue","DodgerBlue","CornflowerBlue","SteelBlue","RoyalBlue","Blue","MediumBlue","DarkBlue","Navy","MidnightBlue","Lavender","Thistle","Plum","Violet","Orchid","Fuchsia","Magenta","MediumOrchid","MediumPurple","BlueViolet","DarkViolet","DarkOrchid","DarkMagenta","Purple","Indigo","DarkSlateBlue","SlateBlue","MediumSlateBlue","White","Snow","Honeydew","MintCream","Azure","AliceBlue","GhostWhite","WhiteSmoke","Seashell","Beige","OldLace","FloralWhite","Ivory","AntiqueWhite","Linen","LavenderBlush","MistyRose","Gainsboro","LightGray","Silver","DarkGrey","Grey","DimGrey","LightSlateGrey","SlateGrey","DarkSlateGrey","Black","palette","DEFAULT_GRADIENT_COLOR","DEFAULT_CONFIG","getHslString","hslArr","convertToXllString","baseString","getActualHslColor","paletteColor","hexToHsv","props_toConsumableArray","oldConfig","newConfig","uniqueValues","getStops","newStops","color_strategy_toConsumableArray","rangeStops","newStopsLength","newRange","hslInterpolator","interpolateHslLong","indexedDomain","scaleDomain","indexedDomainMeasure","normalDomain","steppedDomain","_getStops","continousSteppedDomain","_getStops2","uniqueRange","domainValue","indexedRange","normalRange","strategyGetter","domainType","rangeType","schemeType","color_strategy_defineProperty","domainRange","ColorAxis","color_axis_classCallCheck","_domainType","_rangeType","_schemeType","getSchemeType","_colorStrategy","setColorStrategy","updateDomain","colorStrategy","getScheme","colorSchemes","hslColorArray","getRawColor","color_axis_toConsumableArray","scaleInfo","domainRangeFn","transformationArr","newH","newS","newL","newA","pieceWiseRange","numVal","size_strategy_toConsumableArray","size_strategy_defineProperty","intervals","newIntervals","discreteRange","SizeAxis","size_axis_classCallCheck","_sizeStrategy","setStrategy","domainInfo","domainFn","generator","ShapeAxis","shape_axis_classCallCheck","_generatedShapes","shapeType","shapeGenerator","generatorFn","generatedShapes","DATA_TYPES","group_transform","dataTypeScaleMap","data_type_scale_map_defineProperty","_dataTypeScaleMap","groupByIndices","nestCollection","nestFn","identityTransform","transformMap","transform_factory_defineProperty","_transformMap","uniqueField","valueField","normalizedData","normalizeData","groupedData","uniqueFieldIndex","valueFieldIndex","seriesKeyIndex","seriesKeys","fieldNames","tuples","rowObj","_tuple","seriesKey","newArr","orderBy","orderIndex","groupByIndex","localeCompare","stackData","seriesData","transformFactory","getLayerColor","colorEncoding","colorFieldIndex","rawColor","transfromColor","styleType","intensity","stateColor","originalColor","fillColorInfo","transformColor","interactionStyles","elements","getPlotElementsFromSet","_d$meta","colorTransform","_ref3","_ref4","helpers_slicedToArray","getAxesScales","_map","_map2","_map3","_map4","xScale","yScale","getIndividualClassName","individualClassName","classNameStr","attachDataToVoronoi","_ref5","helpers_toConsumableArray","updateStyle","positionPoints","positioner","encodingTransform","getPlotMeasurement","dimensionalValues","fieldInfo","transformType","_bandScale","span","groupSpan","offsetValues","actualGroupWidth","dataProps","innerPadding","getGroupSpan","isAxisBandScale","axisPadding","groupPadding","fetch","dataModelValue","configValue","encodingValue","getEncodingFieldInf","_map5","_map6","x0Field","y0Field","shapeField","_map7","_map8","_map9","_map10","xFieldSubType","yFieldSubType","_map11","_map12","xFieldIndex","yFieldIndex","x0FieldIndex","y0FieldIndex","getValidTransform","layerConfig","encodingFieldInf","groupByField","groupByFieldMeasure","getTransformedData","transformedDataValue","getNormalizedData","normalizedDataValue","calculateDomainFromData","dataUpdated","throwback","defaultOptions","newConf","defaultPolicy","default_options_defineProperty","_defaultOptions","_cacheEnabled","_cachedData","BaseLayer","base_layer_classCallCheck","base_layer_possibleConstructorReturn","base_layer_defineProperty","DATA","_points","_measurement","_store","_encodingFieldsInf","_encodingTransform","_alias","transformData","domains","yEnc","xEnc","encodingType","transformedDataArr","fieldsLen","pointObj","tuple","_transformType","pointMap","_pointMap","_dataProps","base_layer_slicedToArray","xMeasure","yMeasure","_identifiers$","_identifiers$2","xMeasureIndex","yMeasureIndex","getAllAttrs","filteredPoints","base_layer_toConsumableArray","sizeVal","_identifiers$getData","identifierData","identifierSchema","_encodingFieldsInf2","enc","tupleArr","transformedVal","userConf","drawLine","curveInterpolatorFn","linepath","LineLayer","line_classCallCheck","line_possibleConstructorReturn","isXDim","isYDim","xPx","yPx","_getLayerColor","stroke","rowId","cachePoint","seriesClassName","containerSelection","animateGroup","groupTransition","groupAnimateStyle","stroke-opacity","getPathStyle","translatePoints","colorValFn","colorVal","getDrawFn","searchRadius","_point$data$data","getIdentifiersFromData","layerId","drawArea","easeEffect","renderer_slicedToArray","enterAreaPath","updateAreaPath","selectionEnter","AreaLayer","_getAxesScales","classNameFn","y0Px","minOuterRadius","stroke-width","stroke-linejoin","innerRadiusFixer","states","fadeout","selected","ArcLayer","arc_classCallCheck","arc_possibleConstructorReturn","_prevPieData","pieData","pieIndex","prevData","_getFieldIndices","getFieldIndices","arc_helper_slicedToArray","angleField","radiusField","angleIndex","sizeIndex","radiusIndex","colorIndex","dataVal","uid","outerRadiusValue","angleVal","_previousInfo","getPreviousPoint","currIndex","prevArc","nextArc","_dataPoint$datum","chartHeight","chartWidth","qualClassName","getRadiusRange","defaultRadius","radiusDomain","rangeValueGetter","getRangeValue","domainMultiplier","sizeAxisDomain","sizeMultiplier","_chartWidth","_chartHeight","consecutiveExits","exitCounter","arcFn","tweenPie","individualClass","tweenExit","exitArr","oldExitCounter","tweenExitPie","consecutiveExitArr","gElem","pieSlices","pieSliceInf","tData","drawText","selectionMerge","backgroundVal","textanchor","textStyle","background","backgroundPadding","_smartLabel$getOriSiz","backgroundEl","TextLayer","textEncoding","textField","textFormatter","backgroundEncoding","backgroundValue","textFieldIndex","textValue","text_slicedToArray","text-anchor","drawSymbols","mergedGroups","symbolGroups","symbolEnter","createShape","groupElement","then","res","Element","newShape","nodeName","src","href","shapeElement","pathStr","checkPath","exitGroups","defColorStyle","fillOpacity","shapes","sizes","PointLayer","point_classCallCheck","point_possibleConstructorReturn","sizeEncoding","shapeEncoding","sizeValue","shapeFieldIndex","sizeFieldIndex","_config$offset","offsetX","offsetY","point_slicedToArray","maxSize","generateDataPoints","point_toConsumableArray","drawFn","_maxSize","_getPlotMeasurement","_getPlotMeasurement2","widthMetrics","heightMetrics","offsetXValues","offsetYValues","measurementConf","getMeasurementConfig","widthSpan","heightSpan","distanceLimit","drawRects","barEnterFn","transitionBars","selTransition","resolveDimByField","axesInfo","spaceType","sizeConfig","enterSpace","minVal","maxVal","diffPx","zeroPos","axisType","axisType0","resolveDimensions","_resolveDimByField","enterWidth","enterX","xPos","_resolveDimByField2","enterHeight","BarLayer","bar_classCallCheck","bar_possibleConstructorReturn","_plotPadding","_plotSpan","getTranslatedPoints","_context$encodingFiel","normalizedDataArr","clipElement","clipPathElement","bar_slicedToArray","barWidthMetrics","barHeightMetrics","barWidthOffsets","barHeightOffsets","barWidth","barWidthOffset","barHeight","barHeightOffset","uniqueFieldType","filterData","pointFound","p2","tick_renderer","ticksEnter","TickLayer","_config$span","xSpan","ySpan","x0Px","drawTicks","sanitizeEncoding","layerFactory","compositeLayers","factoryObj","setLayerRegistry","reg","_layerRegistry","getSerializedConf","layerDef","serializedDefs","defs","unitLayerDef","sDef","parseLayerDefinition","layerType","strs","layer_factory_toConsumableArray","getLayerInstance","layerRegistry","composeLayers","layerDefs","sanitizeLayerConfig","DEFAULT_LAYERS","defaults_defineProperty","_DEFAULT_LAYERS","ROWS","COLUMNS","COL","ROW","CELL","X_AXES","Y_AXES","ENTRY_CELLS","EXIT_CELLS","PRIMARY","SECONDARY","local_options","local_options_defineProperty","_CONFIG$ROWS$COLUMNS$","SimpleGroup","Variable","ComposedVars","composed_vars_classCallCheck","texts","composed_vars_possibleConstructorReturn","vars","_vars","member","SimpleVariable","simple_var_classCallCheck","simple_var_possibleConstructorReturn","oneVar","_oneVar","dtFormat","fieldDef","varInst","convertToVar","datamodel","transformFields","normalizedFields","normalizeFields","norFields","orderFields","fieldArray","dimensionArr","measureArr","temporalArr","categoricalArr","fieldList","numOfMeasures","allDimensions","field_sanitizer_toConsumableArray","temporal","categorical","field_sanitizer_slicedToArray","rowsInfo","columnsInfo","rowDimensions","rowMeasures","rowTemporalFields","rowCategoricalFields","columnDimensions","columnMeasures","columnTemporalFields","columnCategoricalFields","VisualEncoder","_fieldInfo","_axisFrom","_headerFrom","__headerFrom","axisFrom","_getHeaderAxisFrom","getHeaderAxisFrom","_getHeaderAxisFrom2","visual_encoder_slicedToArray","rowHeader","rowAxis","_getHeaderAxisFrom3","_getHeaderAxisFrom4","colHeader","colAxis","column","headerFrom","scaleMaps","createSimpleAxis","axisConfig","axesCreators","Cls","generateAxisFromMap","groupAxes","axisKey","currentAxes","cacheMaps","getAxisKey","getAxisConfig","axisInfo","axisOrientation","userAxisConfig","_iteratorNormalCompletion","_didIteratorError","_iteratorError","_step","_iterator","encoder_helper_slicedToArray","err","getIndex","arrIndex","CartesianEncoder","geomCellAxes","projections","rowFields","columnFields","rowIndex","columnIndex","xAxes","yAxes","facets","counter","primaryFacets","secondaryFacets","primaryFields","secondaryFields","primaryLen","secondaryLen","projArr","primaryField","secondaryField","facet","existIndex","axisFromIndex","cartesian_encoder_get","groupedModel","encodingObj","retriveDomainFromData","layerArray","serializedLayers","userLayerConfig","colField","colFieldName","rowField","configs","rowFieldName","rowFieldType","getDefaultMark","colFieldType","defConfigs","layerConfigs","getLayerConfFromFields","colFields","encodingArr","encoder_helper_toConsumableArray","colFieldExist","rowFieldExist","layerConf","mergedLayerConf","serializedLayerConfig","cartesian_encoder_toConsumableArray","PolarEncoder","pieAxes","sanitizedRows","sanitizedColumns","sanitizedFields","typeIndex","fieldSet","facetFields","parentModel","layerEncoding","encType","measureField","polar_encoder_defineProperty","polar_encoder_toConsumableArray","allFields","RetinalEncoder","newAxes","createRetinalAxis","fieldProps","getAxisType","encodingConfigs","initStore","group_utils_defineProperty","isDistributionEqual","group_utils_toConsumableArray","rowType","initializeCacheMaps","cellMap","xAxesMap","yAxesMap","entryCellMap","exitCellMap","scaleType","headerCreator","fieldHeaders","TextCell","getHeaderText","headers","rowLength","header","userAxisFromConfig","_fields","group_utils_slicedToArray","firstField","secondField","firstFieldType","secondFieldType","setFacetsAndProjections","encoder","_encoder$simpleEncode","simpleEncoder","getFacetsAndProjections","createSelection","appendObj","idFn","dataSelect","mergedSelection","getBorders","matrices","showRowBorders","showColBorders","showValueBorders","valueMatrix","_rows","leftRows","rightRows","_columns","topColumns","bottomColumns","_encoder$fieldInfo","allDimensionLength","allMeasuresLength","allTemporalFieldsLength","getRowBorders","borders","getColumnsBorders","getValueBorders","borderTypeRow","borderTypeCol","ACTIONS","action_behaviour_map_defineProperty","CONFIG","AXES","LAYERDEFS","WIDTH","HEIGHT","MOUNT","primaryXAxisUpdated","primaryYAxisUpdated","secondaryXAxisUpdated","secondaryYAxisUpdated","TRANSFORM","DATADOMAIN","LAYERSCREATED","FIELDS","TIMEDIFFS","LAYERAXISINDEX","getLayerFromDef","existingLayer","_layerDeps","instanceArr","resolveEncodingTransform","layerInst","resolvable","depArr","resolved","createLayers","layerDefinitions","layersMap","_layersMap","markSet","components","layerIndex","layersArr","_layersArr","markId","defArr","instanceValues","src_helper_toConsumableArray","layerdeps","getDependencyOrder","graph","dependencyOrder","visited","visit","attachAxisToLayers","layerAxisIndex","axesObj","axisInf","getLayerAxisIndex","_layer$config","unionDomainFromLayers","getDataDomain","domainValues","layerDomain","fieldDomain","fieldStr","unionDomain","dom","getLayersBy","searchBy","removeLayersBy","inst","getGridLayerDefinitions","getDefaultVisibilty","getLayerDefinition","_definition","_encoding","gridLines","gridBands","gridLineColor","zeroLineColor","gridBandColor","isLinearScale","grid_lines_defineProperty","isNegativeDomain","renderGridLineLayers","createGridLineLayer","vuConf","_gridbands","_gridlines","atomicDef","sConf","getGridLayerData","gridData","jsonData","_jsonData$push","entry","_entry","grid_lines_slicedToArray","parentGroupClass","trackerClassName","arcLayerClassName","sideEffectClassName","src_local_options","src_local_options_defineProperty","_CONFIG$LAYERDEFS$AXE","prevAxes","cachedData","local_options_toConsumableArray","oldData","axisMap","1","axisProps","listener_map_slicedToArray","isReverse","layerDefsValue","fieldsVal","_layerAxisIndex","_lifeCycleManager","notify","_timeDiffsByField","layersCreated","dataModelVal","layerAxisIndexVal","axesVal","transformDataModels","transformVal","_transformedDataModels","attachDataToLayers","transformedDataModels","dataSource","_dimensionMeasureMap","getDimensionMeasureMap","retinalEncodingsAndMeasures","_layer$encodingFields","_retinalEncodingsAndM","retinalFields","dataDomain","updateAxisDomain","props_defineProperty","_PROPS","dispatchQueuedSideEffects","firebolt_helper_toConsumableArray","registerImmediateListener","originalData","createSelectionSet","attachPropagationListener","registerChangeListener","firebolt_helper_slicedToArray","mapActionsAndBehaviour","clearActionHistory","payloadGenerator","brush","selectionDataModel","propPayload","getRangeFromData","propCriteria","isDimension","payload_generator_toConsumableArray","__default","propagateValues","propagationFieldInf","propagationFields","sideEfffects","mergedModel","sourceUnit","sourceCanvas","parentAlias","propagationBehaviour","propFields","facetByFields","getModelWithFacetData","schema1","data1","schema2","data2","data_propagator_toConsumableArray","groupId","behaviourInstance","propagationConf","sourceBehaviour","enabled","propConf","actionInf","propInf","UnitFireBolt","src_firebolt_classCallCheck","firebolt_possibleConstructorReturn","unitId","aliasName","propagationSourceCanvas","sourceUnitId","sourceSideEffects","sideEffectInstances","actionOnSource","mappedEffects","sideEffectChecker","enabledFn","payloadFn","sourceIdentifierFields","sourceBehaviours","firebolt_get","VisualUnit","registry","visual_unit_classCallCheck","onlayerdraw","_renderedResolve","_renderedPromise","lifeCycleManager","visual_unit_defineProperty","localOptions","_firebolt","lock","unlock","_rootSvg","class","renderLayers","orderedLayers","layerParentGroup","_sideEffectGroup","createSideEffectGroup","rootSvg","layerName","getLayerByName","serializedDef","visual_unit_toConsumableArray","lyr","axisConf","alignZeroLine","adjustedDomain","getAdjustedDomain","y1ratio","y2ratio","allSameSign","updateDomainCache","dimValue","getNearestDimensionalValue","entryVal","pointInf","getMarkInfFromLayers","markInf","parsedIdentifiers","transposeArray","getPointsFromIdentifiers","_parentContainer","getFieldNames","fields1","matrix_model_toConsumableArray","createSelectedDataModel","uniqueKeyGenerator","keyArray","newDm","nextDepthUniqueValues","projectRows","allColumnProjections","rowProjections","optionalProjections","projectFields","_getFieldNames","_getFieldNames2","matrix_model_slicedToArray","projFieldNames","colProjFieldNames","pushToMatrix","_matrix$rowIndex","facetInfo","colProjections","rowProj","projIdx","_getFieldNames3","_getFieldNames4","rowProjFieldNames","projectedDm","createValueCells","suppliedLayers","GeomCell","matrixLayers","horizontalAxis","verticalAxis","datamodelTransform","layerConfigArr","getLayerConfig","normalizedColumns","normalizedRows","geomCellKey","getCellKey","columnId","allFacets","cell_creator_toConsumableArray","rowFacets","colFacets","geomCell","updateCells","facetKey","createAxisCells","axisInst","_axisInst$config","AxisCell","BlankCell","headerPlaceholderGn","selectionObj","facetConfig","selectionKeys","keySet","createTextCells","generatePlaceholders","facetsAndProjections","encoders","valuesMatrix","rowKeys","columnKeys","takeAxisFrom","takeHeaderFrom","axisPlaceholderGn","selObj","axesMatrix","selObjProp","axesForDraw","rowsPrimary","rowPrime","columnsPrimary","colPrime","_selectionObj","rowsSecondary","columnsSecondary","getObjects","section","hContext","computeMatrices","componentRegistry","globalConfig","autoGroupBy","otherEncodings","matrixGnContext","getCellDef","isRowSizeEqual","isColumnSizeEqual","colCells","rowCells","resetSimpleAxes","newCacheMap","valueCellContext","serializeLayerConfig","extractFields","layerFields","flattenArray","getFieldsFromSuppliedLayers","suppliedLayerConfig","aggregationFns","valueMatrixInfo","getMatrixModel","rowDataModels","colProj","firstLevelRowKeys","_rowDataModels","_getFieldNames5","rowFacetFieldNames","selectedDataModel","_rowDataModels2","colFacetNames","firstLevelColumnKeys","dme","rIndex","cIndex","transposedColKeys","valueCellsCreator","placeholder","createUnits","_mutateAxesFromMap","mutateAxesFromMap","xAxisSet","yAxisSet","axisId","_generateMatrices","generateMatrices","leftHeaders","topHeaders","bottomHeaders","rightHeaders","cell_creator_slicedToArray","rowSec","colSec","leftFacets","rightFacets","leftMatrix","rightMatrix","topMatrix","bottomMatrix","currentBottomLength","setAvailableSpace","rowMatrix","columnMatrix","MatrixResolver","matrix_resolver_classCallCheck","_registry","_layerConfig","_matrixLayers","_rowMatrix","_columnMatrix","_valueMatrix","_facets","_projections","_datamodelTransform","_units","_cacheMaps","_axes","maps","_rowCells","_colCells","matrix_resolver_toConsumableArray","_horizontalAxis","_verticalAxis","matrixType","sideEffectRegistry","units","unitConfig","extractUnitConfig","_getAllFields","retContext","getRetinalFieldsDomain","retinalEncoder","setCommonDomain","_axes2","retinalAxes","updateModel","placeholders","bottomLeft","bottomRight","_dependencies3","matrix_resolver_slicedToArray","topCols","bottomCols","rowHeaders","blankCellCreator","showHeaders","footers","topLeft","topRight","ValueMatrix","matrixArr","value_matrix_classCallCheck","instancesById","rIdx","cIdx","cellValue","colIndex","_instancesById","_matrix","_filterFn","rowWidth","currentRowWidth","rowHeight","currentRowHeight","setupChangeListeners","change_listener_toConsumableArray","matrixConfig","retinalConfig","sanitizeRetinalConfig","retinalConf","confValue","getEncoder","groupType","fieldSanitizer","setAxisAndHeaders","placeholderInfo","getMatrices","_groupedDataModel","createRetinalAxes","setDomains","setMatrixInstances","_composition","cornerMatrices","createHeaders","metaData","border","hasDataUpdated","matrixInstance","cellRegistry","VisualGroup","visual_group_classCallCheck","visual_group_possibleConstructorReturn","componentSubRegistry","_matrixInstance","_selection","_placeholderInfo","_cornerMatrices","variable","findInGroup","channel","group_utils_this","facetType","projType","getRetinalAxes","getSimpleAxes","_resolver$getAllField","visual_group_defineProperty","existingRemoveSet","select_toConsumableArray","firebolt_action_behaviour_map_defineProperty","action_behaviour_map_actionBehaviourMap","propagationBehaviourMap","_propagationBehaviour","firebolt_behaviour_effect_map_defineProperty","firebolt_behaviour_effect_map_behaviourEffectMap","propagationSideEffects","_propagationSideEffec","SCALE_FUNCTIONS","VALUE","canvasAlias","check","assembleModelFromIdentifiers","_loop2","fieldVal","src_firebolt_helper_toConsumableArray","LegendFireBolt","_Firebolt","legend_firebolt_classCallCheck","legend_firebolt_possibleConstructorReturn","legend_firebolt_inherits","legend_firebolt_createClass","behaviourName","getCriteriaFromData","boundingBox","gradientDimensions","axisScale","rangeShifter","firebolt_physical_defineProperty","physical_physicalActions","getSelectionCriteria","selectionBoxMeasure","drawingInfMeasure","subjectStartPoint","gradientDimension","legendGradContainer","legendSelGroup","enterFn","getMousePos","boundingClientRect","fadeOut","brighten","LegendHighlighter","legend_highlighter_classCallCheck","legend_highlighter_possibleConstructorReturn","legendContainer","resetLogicalSpace","title","_title","ALIGN","DEFAULT_MEASUREMENT","LEGEND_TITLE","borderStyle","borderColor","bounds","upper","ICON_MAP","getScaleInfo","steps","scaleFn","getInterpolatedData","domainForLegend","interpolatedFn","getDomainBounds","domainBounds","domainLeg","ele","legend_helper_defineProperty","getScaleFactor","SimpleLegend","simple_legend_classCallCheck","_metaData","_fieldName","_labelManager","_cells","defaultMeasurement","_computedStyle","legendBehaviours","_canvasAlias","getItemMeasures","_labelManager$getOriS","effPadding","effBorder","effMargin","dataFromScale","titleSpace","getTitleSpace","titleHeight","titleWidth","labelSpaces","getLabelSpaces","_computeItemSpaces","computeItemSpaces","maxItemSpaces","textOrientation","itemSpaces","iconSpaces","maxIconWidth","itemSpace","iconSpace","titleSpaces","_measurement2","titleCreator","titleContainer","_config4","_measurement3","renderTitle","simple_legend_defineProperty","legendOrientation","datasets","itemContainerMeasures","getStepSpacesInfo","iconHeight","iconWidth","stepPadding","horizontal","vertical","position_config_defineProperty","_legendOrientation","positionConfig","_positionConfig","alignmentMap","_alignmentMap","itemStack","_itemStack","createLegendSkeleton","gradWidth","gradHeight","maxGradHeight","maxGradWidth","legendBody","legendItem","getItemContainers","legendInstance","positionObj","createItemSkeleton","itemSkeleton","alignClass","applyItemStyle","measureType","stepColorCheck","_context$measurement","renderIcon","defaultIcon","DiscreteLegend","_getScaleInfo","discrete_legend_defineProperty","renderDiscreteItem","_context$measurement2","_item$icon","text-align","getGradientDomain","accumulator","currentValue","MAX_VALUE","MIN_VALUE","legendGradSvg","legendGradCont","linearGradient","makeLinearGradient","legendRect","GradientLegend","gradient_legend_toConsumableArray","gradient_legend_defineProperty","newAxis","axisSpace","axisDomainLength","_legendGradientSvg","renderGradient","_createLegendSkeleton","StepLegend","step_legend_toConsumableArray","step_legend_defineProperty","lowerBounds","upperBounds","step_legend_get","stepData","renderStepItem","_context$config3","_context$measurement3","_item$icon2","_positionConfig$posit","PADDING","BORDER","MARGIN","TITLE_TEMPLATE_NOT_ALLOWED_TAGS","LEGEND_TYPE_MAP","constants_defineProperty","_LEGEND_TYPE_MAP","share","operators_toConsumableArray","strings","htmlCode","expLn","frag","createDocumentFragment","treeShakeNode","nodeType","Node","ELEMENT_NODE","tagName","childNodes","actionModel","ActionModel","action_model_classCallCheck","_registrableComponents","canvas","once","visualGroup","_cell$valueOf$firebol","registerPropagationBehaviourMap","_len4","_key4","dissociateBehaviour","_len5","_key5","dissociateSideEffect","policy","registrableComponents","mergedPolicy","aliases","comp","*","propagationPayload","propagationCanvas","crossInteractionPolicy","legend","minHeight","collapse","src_options","isInteger","minUnitWidth","minUnitHeight","oldConf","defConfig","CENTER","ROW_LEFT","ROW_RIGHT","COLUMN_BOTTOM","COLUMN_TOP","ROW_SPAN","COL_SPAN","ROW_ROOT","COLUMN_ROOT","GenericLayout","generic_layout_classCallCheck","_matrices","_centerMatrix","_mountPoint","DEFAULT_CONFIGURATION","grid_layout_defaults_defineProperty","_FieldNames$BORDER","FieldNames","_DEFAULT_CONFIGURATIO","DEFAULT_MEASUREMENTS","_DEFAULT_MEASUREMENTS","BLANK_BORDERS","columnFilter","colData","colIdx","previousRow","currentRow","prevCell","nextRow","prevRow","calcRowSpan","isNull","calcColSpan","mask","filteredRow","_temp","span_maker_toConsumableArray","applyBorders","borderType","applyRowBorders","showBorders","applyColBorders","renderMatrix","containerForMatrix","_cellSpanMaker","cellSpanMaker","viewMatrix","spans","ridx","currSpan","renderTable","rowData","availHeight","findInPage","page","combineMatrices","isTransposed","joinedMatrix","utils_toConsumableArray","computeLogicalSpace","maxMeasures","_config$isTransposed","unitMeasures","_getMeasureInfo","getMeasureInfo","firstMeasure","secondMeasure","minMeasures","getMinMeasures","_logicalSpace","utils_defineProperty","valueItem","maxMeasure","firstMeasureValue","secondMeasureValue","valueArray","_item$space","fMeasure","sMeasure","extraCellsRemover","beg","distribution","extraCellLengths","VisualMatrix","visual_matrix_classCallCheck","_lastLevelKey","_primaryMatrix","_secondaryMatrix","_maxMeasures","_availableSpace","_breakPointer","_layoutMatrix","_tree","createTree","setLogicalSpace","_createTree2","matrixTree","lastLevelKey","layoutMatrix","primaryMatrix","secondaryMatrix","breakPage","primaryMatrixLength","newMatrix","keyLength","createMatrixEachLevel","_arr$i","heightMeasures","populateMaxMeasures","widthMeasures","calculateDepth","viewableMatrix","createViewPortMatrix","viewableMeasures","redistribute","childDepth","maxHeights","maxWidths","matrixInst","mWidth","mHeight","redistributeColumnWise","redistributeRowWise","cellDimOptions","matrixIndex","_getCellDimensions","getCellDimensions","heights","widths","rowHeights","columnWidths","primary","secondary","begCellLen","endCellLen","createMatrixInstances","matrixInfo","layout","breakPointer","brokenMatrix","breakMatrix","nextLevel","removeExtraCells","rHeights","cWidths","gutter","spaceTakenByColumn","spaces","getDistributedHeight","heightWithoutGutter","distSum","gutterSum","availableHeight","colLen","distHeight","borderWidth","spaceTakenByRow","getDistributedWidth","layoutConfig","availableWidth","distWidth","rowLen","oldLogicalSpace","mainMeasures","computedMeasures","colHeight","colWidth","setMatrixMeasurement","setViewSpaces","pointerType","viewSpaces","pointer","computations_defineProperty","GridLayout","layout_classCallCheck","layout_possibleConstructorReturn","_layoutId","generateVisualMatrices","begColCells","endColCells","gutterSpace","_top","layout_helper_slicedToArray","_center","_bottom","layout_helper_toConsumableArray","centerMatrix","layout_get","computeLayoutMeasurements","_layout$measurement","rowMatrixWidth","getMatrixMeasurement","columnMatrixWidth","columnViewPages","getViewableSpaces","columnViewSpace","columnPointer","columnMatrixHeight","rowMatrixHeight","rowViewableSpaces","computations_toConsumableArray","rowWidthsPrimary","rowWidthsSecondary","columnViewableSpaces","columnHeightsPrimary","columnHeightsSecondary","setViewInformation","pageNumber","pageType","totalPages","getViewInformation","viewMatricesInfo","layout_defineProperty","renderGrid","currentPage","rowPointer","getViewMatrices","rowMatrices","getViewableData","columnMatrices","centralMatrixPointer","rowMatrixLen","columnMatrixLen","rowPages","columnPages","layoutDimensions","getViewMeasurements","_layout$measurement2","_layout$config3","leftWidth","rightWidth","topHeight","bottomHeight","viewWidth","viewHeight","viewInfo","_getViewInformation3","renderMatrices","TransactionSupport","INTERFACE_IMPl","HEADER","FACET_BY_FIELDS","LAYER_DEF","DETAIL_FIELDS","TEXT","AXIS","GEOM","BLANK","SimpleCell","simple_cell_classCallCheck","enums_defaults_defineProperty","_CONSTANTS$MARGIN","CONSTANTS","_DEFAULT_CONFIG","DEFAULT_PROPS","availWidth","geomProps","caption","src_props_defineProperty","visual_cell_src_props_PROPS","axis_cell_classCallCheck","axis_cell_possibleConstructorReturn","_availHeight","_availWidth","computeAxisSpace","logicalWidth","logicalHeight","spaceFixer","_axis$getLogicalSpace","wrapperDiv","blank_cell_classCallCheck","blank_cell_possibleConstructorReturn","text_cell_classCallCheck","text_cell_possibleConstructorReturn","_className","_minTickDiff","computeTextSpace","verticalAlign","textAlign","geom_cell_classCallCheck","geom_cell_possibleConstructorReturn","_unit","_datamodel","_facetByFields","_transform","_caption","lockModel","unlockModel","captionSpace","computeGeomSpace","getCaptionSpace","captionDom","DEFAULT_PLACEHOLDERS","src_defaults_defineProperty","_DEFAULT_PLACEHOLDERS","createHeading","cellType","legendInitializer","legendConfig","prevLegends","legends","headerHeight","legendCreator","LegendCls","dataset","scaleProps","_scale$config","dataInfo","legendMeasures","getGroupByData","setLegendMeasures","getRenderDetails","_mount$getBoundingCli","heightAttr","widthAttr","visGroup","_visGroup$placeholder","titleConfig","subtitleConfig","subtitle","legendPosition","layoutArrangement","arrangeComponents","_titleLayouts","legendLayouts","titleLayouts","component_resolver_defineProperty","availableHeightForCanvas","availableWidthForCanvas","_createHeaders","canvasHeight","canvasWidth","headerOptions","resolveTitleSubTitleContent","rawContent","_sanitize","escapeHTML","htmlEscapes","&","<",">","\"","'","/","_createHeading","createLegend","legendSpace","getLegendSpace","legendInfo","legendWidth","legendHeight","canvases","mountSpace","TITLE_CONFIG","SUB_TITLE_CONFIG","canvas_local_options_defineProperty","_localOptions","canvasOptions","_sanitized","_canvasOptions","sub","renderHeader","headerCell","cont","renderComponents","_getSkeletons","getSkeletons","innerContainer","layoutType","prepareGridContainer","innerSel","setLabelRotationForAxes","renderLegend","legendComponents","sectionComponents","legendMount","legWidth","legHeight","sections","currHeight","currWidth","leg","shiftHeaders","shifter","setupChangeListener","allOptions","_allOptions","canvas_helper_toConsumableArray","equalityChecker","option","dispatchProps","_cachedProps","applyInteractionPolicy","policies","defaultInteractionPolicy","isMeasure","canvas_firebolt_toConsumableArray","getFieldsFromChannel","colDim","fieldInf","unitFireBolt","unitColFacets","equals","unitRowFacets","propagateWith","defaultCrossInteractionPolicy","propagationCanvasAlias","propagationUnit","GroupFireBolt","canvas_firebolt_classCallCheck","_interactionPolicy","_crossInteractionPolicy","changeBehaviourStateOnPropagation","changeSideEffectStateOnPropagation","Canvas","globalDependencies","canvas_classCallCheck","canvas_possibleConstructorReturn","_transactor","canvas_slicedToArray","initedComponents","initCanvas","register","_getRenderDetails","prepareLayout","triggerReflow","promises","all","getAxes","initialSettings","regEntry","COMPONENTS","SUBREGISTRIES","regObj","globalCache","defaultRegistry","overrideRegistryDefinitions","overrideRegistry","muze","_transactor2","muze_slicedToArray","env","globalStore","componentSubRegistryDef","settings","withSettings","enableChainedTransaction","transactionModel","transactionEndpoint","transactionItems","_slicedToArray","Smartlabel","SideEffects","standards","Behaviours","pkg","operators","utils","lookupWhat","lookupDetails","lookupTarget","deps"],"mappings":"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,mDACA,yDACA,+DACA,sEACA8F,IAAIs2B,IAESgX,MAAKK,ICALL,MAZK,IAAInzC,MAAM,GAAGD,OAC/B,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,yDACA,+DACA,sEACA8F,IAAIs2B,KCESgX,MAZK,IAAInzC,MAAM,GAAGD,OAC/B,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,yDACA,+DACA,sEACA8F,IAAIs2B,KCESgX,MAZK,IAAInzC,MAAM,GAAGD,OAC/B,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,yDACA,+DACA,sEACA8F,IAAIs2B,KCESgX,MAZK,IAAInzC,MAAM,GAAGD,OAC/B,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,yDACA,+DACA,sEACA8F,IAAIs2B,KCESgX,MAZK,IAAInzC,MAAM,GAAGD,OAC/B,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,yDACA,+DACA,sEACA8F,IAAIs2B,KCESgX,MAZK,IAAInzC,MAAM,GAAGD,OAC/B,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,yDACA,+DACA,sEACA8F,IAAIs2B,KCASgX,MAVK,IAAInzC,MAAM,GAAGD,OAC/B,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,0DACA8F,IAAIs2B,KCESgX,MAVK,IAAInzC,MAAM,GAAGD,OAC/B,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,0DACA8F,IAAIs2B,KCESgX,MAVK,IAAInzC,MAAM,GAAGD,OAC/B,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,0DACA8F,IAAIs2B,KCESgX,MAVK,IAAInzC,MAAM,GAAGD,OAC/B,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,0DACA8F,IAAIs2B,KCESgX,MAVK,IAAInzC,MAAM,GAAGD,OAC/B,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,0DACA8F,IAAIs2B,KCESgX,MAVK,IAAInzC,MAAM,GAAGD,OAC/B,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,0DACA8F,IAAIs2B,KCESgX,MAVK,I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","file":"muze.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"muze\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"muze\"] = factory();\n\telse\n\t\troot[\"muze\"] = factory();\n})(window, function() {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 7);\n","!function(e,t){\"object\"==typeof exports&&\"object\"==typeof module?module.exports=t():\"function\"==typeof define&&define.amd?define(\"DataModel\",[],t):\"object\"==typeof exports?exports.DataModel=t():e.DataModel=t()}(window,function(){return function(e){var t={};function n(r){if(t[r])return t[r].exports;var i=t[r]={i:r,l:!1,exports:{}};return e[r].call(i.exports,i,i.exports,n),i.l=!0,i.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(e,\"__esModule\",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&\"object\"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,\"default\",{enumerable:!0,value:e}),2&t&&\"string\"!=typeof e)for(var i in e)n.d(r,i,function(t){return e[t]}.bind(null,i));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,\"a\",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p=\"\",n(n.s=1)}([function(e){e.exports={name:\"datamodel\",description:\"Relational algebra compliant in-memory tabular data store\",homepage:\"https://github.com/chartshq/datamodel\",version:\"2.0.2\",license:\"MIT\",main:\"dist/datamodel.js\",author:\"Charts.com \",keywords:[\"datamodel\",\"data\",\"relational\",\"algebra\",\"model\",\"muze\",\"fusioncharts\",\"table\",\"tabular\",\"operation\"],repository:{type:\"git\",url:\"https://github.com/chartshq/datamodel.git\"},contributors:[{name:\"Akash Goswami\",email:\"akash@charts.com\"},{name:\"Subhash Haldar\",email:\"subhash@charts.com\"},{name:\"Rousan Ali\",email:\"rousan@charts.com\",url:\"https://rousan.io\"},{name:\"Ujjal Kumar Dutta\",email:\"ujjal@charts.com\"}],dependencies:{\"d3-dsv\":\"^1.0.8\"},devDependencies:{\"babel-cli\":\"6.26.0\",\"babel-core\":\"^6.26.3\",\"babel-eslint\":\"6.1.2\",\"babel-loader\":\"^7.1.4\",\"babel-plugin-transform-runtime\":\"^6.23.0\",\"babel-preset-env\":\"^1.7.0\",\"babel-preset-es2015\":\"^6.24.1\",\"babel-preset-flow\":\"^6.23.0\",chai:\"3.5.0\",\"cross-env\":\"^5.0.5\",eslint:\"3.19.0\",\"eslint-config-airbnb\":\"15.1.0\",\"eslint-plugin-import\":\"2.7.0\",\"eslint-plugin-jsx-a11y\":\"5.1.1\",\"eslint-plugin-react\":\"7.3.0\",\"istanbul-instrumenter-loader\":\"^3.0.0\",jsdoc:\"3.5.5\",json2yaml:\"^1.1.0\",karma:\"1.7.1\",\"karma-chai\":\"0.1.0\",\"karma-chrome-launcher\":\"2.1.1\",\"karma-coverage-istanbul-reporter\":\"^1.3.0\",\"karma-mocha\":\"1.3.0\",\"karma-spec-reporter\":\"0.0.31\",\"karma-webpack\":\"2.0.3\",marked:\"^0.5.0\",mocha:\"3.4.2\",\"mocha-webpack\":\"0.7.0\",\"transform-runtime\":\"0.0.0\",webpack:\"^4.12.0\",\"webpack-cli\":\"^3.0.7\",\"webpack-dev-server\":\"^3.1.4\"},scripts:{test:\"npm run lint && npm run ut\",ut:\"karma start karma.conf.js\",utd:\"karma start --single-run false --browsers Chrome karma.conf.js \",build:\"webpack --mode production\",start:\"webpack-dev-server --config webpack.config.dev.js --mode development --open\",lint:\"eslint ./src\",\"lint-errors\":\"eslint --quiet ./src\",docs:\"rm -rf yaml && mkdir yaml && jsdoc -c jsdoc.conf.json\"}}},function(e,t,n){var r=n(2);e.exports=r.default?r.default:r},function(e,t,n){\"use strict\";n.r(t);var r={};n.r(r),n.d(r,\"DataFormat\",function(){return o}),n.d(r,\"DimensionSubtype\",function(){return u}),n.d(r,\"MeasureSubtype\",function(){return c}),n.d(r,\"FieldType\",function(){return f}),n.d(r,\"FilteringMode\",function(){return s});var i={};n.r(i),n.d(i,\"DSVArr\",function(){return Me}),n.d(i,\"DSVStr\",function(){return Ve}),n.d(i,\"FlatJSON\",function(){return Ye}),n.d(i,\"Auto\",function(){return Be});var a={};n.r(a),n.d(a,\"sum\",function(){return ct}),n.d(a,\"avg\",function(){return ft}),n.d(a,\"min\",function(){return st}),n.d(a,\"max\",function(){return lt}),n.d(a,\"first\",function(){return dt}),n.d(a,\"last\",function(){return pt}),n.d(a,\"count\",function(){return ht}),n.d(a,\"sd\",function(){return vt});var o={FLAT_JSON:\"FlatJSON\",DSV_STR:\"DSVStr\",DSV_ARR:\"DSVArr\",AUTO:\"Auto\"},u={CATEGORICAL:\"categorical\",TEMPORAL:\"temporal\",GEO:\"geo\"},c={DISCRETE:\"discrete\"},f={MEASURE:\"measure\",DIMENSION:\"dimension\"},s={NORMAL:\"normal\",INVERSE:\"inverse\",ALL:\"all\"};function l(e,t){e.length>0&&e.split(\",\").forEach(function(e){var n=e.split(\"-\"),r=+n[0],i=+(n[1]||n[0]);if(i>=r)for(var a=r;a<=i;a+=1)t(a)})}var d=function(){function e(e,t){for(var n=0;n=0;)o=e[a+1],-1!==r.indexOf(o)&&i.push({index:a,token:o});return i},m.formatAs=function(e,t){var n,r=h(e),i=m.findTokens(t),a=m.getTokenDefinitions(),o=String(t),u=m.TOKEN_PREFIX,c=void 0,f=void 0,s=void 0;for(s=0,n=i.length;s=0;d--)(f=a[d].index)+1!==l.length-1?(void 0===u&&(u=l.length),s=l.substring(f+2,u),l=l.substring(0,f+2)+RegExp.escape(s)+l.substring(u,l.length),u=f):u=f;for(d=0;d1){n=Math.abs(r[1]-r[0]);for(var i=2,a=r.length;i=y&&t.data=r.stops[r.stops.length-1]}).forEach(function(e){c[e.index]=r.stops[r.stops.length-1]+\"-\"+h}),r.stops.unshift(r.start),b=new Set(r.stops),dr.stops[r.stops.length-1]&&b.add(h),b=[].concat(function(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t3&&void 0!==arguments[3]&&arguments[3],i=arguments.length>4&&void 0!==arguments[4]?arguments[4]:G.CROSS,a=[],o=[],u=n||K,c=e.getFieldspace(),f=t.getFieldspace(),s=c.name,d=f.name,p=c.name+\".\"+f.name,h=L(c,f);if(s===d)throw new Error(\"DataModels must have different alias names\");return c.fields.forEach(function(e){var t=E({},e.schema);-1===h.indexOf(t.name)||r||(t.name=c.name+\".\"+t.name),a.push(t)}),f.fields.forEach(function(e){var t=E({},e.schema);-1!==h.indexOf(t.name)?r||(t.name=f.name+\".\"+t.name,a.push(t)):a.push(t)}),l(e._rowDiffset,function(e){var n=!1,p=void 0;l(t._rowDiffset,function(t){var l=[],v={};v[s]={},v[d]={},c.fields.forEach(function(t){l.push(t.data[e]),v[s][t.name]=t.data[e]}),f.fields.forEach(function(e){-1!==h.indexOf(e.schema.name)&&r||l.push(e.data[t]),v[d][e.name]=e.data[t]});var m=Ke(v[s]),y=Ke(v[d]);if(u(m,y)){var g={};l.forEach(function(e,t){g[a[t].name]=e}),n&&G.CROSS!==i?o[p]=g:(o.push(g),n=!0,p=e)}else if((i===G.LEFTOUTER||i===G.RIGHTOUTER)&&!n){var b={},_=c.fields.length-1;l.forEach(function(e,t){b[a[t].name]=t<=_?e:null}),n=!0,p=e,o.push(b)}})}),new ut(o,a,{name:p})}function z(e,t){var n=\"\"+e,r=\"\"+t;return nr?1:0}function X(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:z;return e.length>1&&function e(t,n,r,i){if(r===n)return t;var a=n+Math.floor((r-n)/2);return e(t,n,a,i),e(t,a+1,r,i),function(e,t,n,r,i){for(var a=e,o=[],u=t;u<=r;u+=1)o[u]=a[u];for(var c=t,f=n+1,s=t;s<=r;s+=1)c>n?(a[s]=o[f],f+=1):f>r?(a[s]=o[c],c+=1):i(o[c],o[f])<=0?(a[s]=o[c],c+=1):(a[s]=o[f],f+=1)}(t,n,a,r,i),t}(e,0,e.length-1,t),e}function Q(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);ta?\"desc\"===t?-1:1:0}}return r}function Z(e,t){var n=new Map,r=[];return e.forEach(function(e){var i=e[t];n.has(i)?r[n.get(i)][1].push(e):(r.push([i,[e]]),n.set(i,r.length-1))}),r}function ee(e,t,n){var r={label:e[0]};return t.reduce(function(t,r,i){return t[r]=e[1].map(function(e){return e[n[i].index]}),t},r),r}function te(e,t,n,r,i){var a={schema:[],data:[],uids:[]},o=(i=Object.assign({},{addUid:!1,columnWise:!1},i)).addUid,u=r&&r.length>0,c=[];if(n.split(\",\").forEach(function(t){for(var n=0;n=0;u--)i=t[u][0],a=t[u][1],(o=Ze(r,i))&&(S(a)?X(n,function(e,t){return a(e[o.index],t[o.index])}):j(a)?function(){var e=Z(n,o.index),t=a[a.length-1],i=a.slice(0,a.length-1),u=i.map(function(e){return Ze(r,e)});e.forEach(function(e){e.push(ee(e,i,u))}),X(e,function(e,n){var r=e[2],i=n[2];return t(r,i)}),n.length=0,e.forEach(function(e){n.push.apply(n,Q(e[1]))})}():(a=\"desc\"===String(a).toLowerCase()?\"desc\":\"asc\",X(n,$(o.type,a,o.index))));e.uids=[],n.forEach(function(t){e.uids.push(t.pop())})}(a,r),i.columnWise){var f=Array.apply(void 0,Q(Array(a.schema.length))).map(function(){return[]});a.data.forEach(function(e){e.forEach(function(e,t){f[t].push(e)})}),a.data=f}return a}function ne(e,t){var n={},r=[],i=[],a=[],o=e.getFieldspace(),u=t.getFieldspace(),c=o.fieldsObj(),f=u.fieldsObj(),s=o.name+\" union \"+u.name;if(!M(e._colIdentifier.split(\",\").sort(),t._colIdentifier.split(\",\").sort()))return null;function d(e,t,r){l(e._rowDiffset,function(e){var o={},u=\"\";i.forEach(function(n){var r=t[n].data[e];u+=\"-\"+r,o[n]=r}),n[u]||(r&&a.push(o),n[u]=!0)})}return e._colIdentifier.split(\",\").forEach(function(e){var t=c[e];r.push(E({},t.schema)),i.push(t.schema.name)}),d(t,f,!1),d(e,c,!0),new ut(a,r,{name:s})}function re(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t1&&void 0!==arguments[1]?arguments[1]:{},n={},r=t,i=e.getPartialFieldspace().getMeasure(),a=se.defaultReducer();return\"function\"==typeof t&&(a=t),Object.entries(i).forEach(function(e){var o=le(e,1)[0];\"string\"==typeof t[o]&&(r[o]=se.resolve(r[o])?se.resolve(r[o]):a),\"function\"!=typeof t[o]&&(r[o]=void 0),n[o]=r[o]||se.resolve(i[o].defAggFn())||a}),n}(e,n),o=e.getPartialFieldspace(),u=o.fieldsObj(),c=o.name,f=[],s=[],d=[],p={},h=[],v=void 0;Object.entries(u).forEach(function(e){var t=le(e,2),n=t[0],r=t[1];(-1!==i.indexOf(n)||a[n])&&(d.push(E({},r.schema)),\"measure\"===r.schema.type&&\"discrete\"!==r.schema.subtype?s.push(n):\"dimension\"!==r.schema.type&&\"discrete\"!==r.schema.subtype||f.push(n))});var m=0;return l(e._rowDiffset,function(e){var t=\"\";f.forEach(function(n){t=t+\"-\"+u[n].data[e]}),void 0===p[t]?(p[t]=m,h.push({}),f.forEach(function(t){h[m][t]=u[t].data[e]}),s.forEach(function(t){h[m][t]=[u[t].data[e]]}),m+=1):s.forEach(function(n){h[p[t]][n].push(u[n].data[e])})}),h.forEach(function(e){var t=e;s.forEach(function(n){t[n]=a[n](e[n])})}),r?(r.__calculateFieldspace(),v=r):v=new yt(h,d,{name:c}),v}function pe(e,t){var n=L(e.getFieldspace(),t.getFieldspace());return function(e,t){var r=!0;return n.forEach(function(n){r=!(e[n].value!==t[n].value||!r)}),r}}function he(e,t){var n={},r=[],i=[],a=[],o=e.getFieldspace(),u=t.getFieldspace(),c=o.fieldsObj(),f=u.fieldsObj(),s=o.name+\" union \"+u.name;if(!M(e._colIdentifier.split(\",\").sort(),t._colIdentifier.split(\",\").sort()))return null;function d(e,t){l(e._rowDiffset,function(e){var r={},o=\"\";i.forEach(function(n){var i=t[n].data[e];o+=\"-\"+i,r[n]=i}),n[o]||(a.push(r),n[o]=!0)})}return e._colIdentifier.split(\",\").forEach(function(e){var t=c[e];r.push(E({},t.schema)),i.push(t.schema.name)}),d(e,c),d(t,f),new yt(a,r,{name:s})}function ve(e,t,n){return W(e,t,n,!1,G.LEFTOUTER)}function me(e,t,n){return W(t,e,n,!1,G.RIGHTOUTER)}var ye=function(){function e(e,t){for(var n=0;nn&&(n=e)}),[t,n]}(this.data)}},{key:\"parse\",value:function(e){return e=parseFloat(e,10),Number.isNaN(e)?null:e}},{key:\"unit\",value:function(){return this.fieldUnit}},{key:\"scale\",value:function(){return this.fieldScale}},{key:\"numberFormat\",value:function(){var e=this.fieldNumberformat;return function(t){return e(t)}}},{key:\"defAggFn\",value:function(){return this.fieldDefAggFn}}]),t}(),Oe=function(){function e(e,t){for(var n=0;n=a?c=!0:(r=e.charCodeAt(o++))===Pe?f=!0:r===Ce&&(f=!0,e.charCodeAt(o)===Pe&&++o),e.slice(i+1,t-1).replace(/\"\"/g,'\"')}for(;o2&&void 0!==arguments[2]?arguments[2]:{},i=arguments[3],a=void 0;t!==Y?(a={op:t,meta:r,criteria:i},e._derivation.push(a)):(a=[].concat(Ge(i)),e._derivation.length=0,(n=e._derivation).push.apply(n,Ge(a)))},ze=function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=n.operation||q,i=n.filterByMeasure||!1,a=[];a=t.length?t.map(function(e){return function(e){var t=e.getData(),n=t.schema,r=e.getFieldsConfig(),a=e.getFieldspace().fieldsObj(),o=t.data,u=Object.values(r).reduce(function(e,t){return e[t.def.name]=a[t.def.name].domain(),e},{});return function(e){return!!o.length&&o.some(function(t){return n.every(function(n){if(!(n.name in e))return!0;var a=e[n.name].valueOf();if(i&&n.type===f.MEASURE)return a>=u[n.name][0]&&a<=u[n.name][1];if(n.type!==f.DIMENSION)return!0;var o=r[n.name].index;return t[o]===e[n.name].valueOf()})})}}(e)}):[function(){return!1}];var o=void 0;r===q?o=e.clone(!1,!1).select(function(e){return a.every(function(t){return t(e)})},{saveChild:!1,mode:s.ALL}):o=e.clone(!1,!1).select(function(e){return a.some(function(t){return t(e)})},{mode:s.ALL,saveChild:!1});return o},Xe=function(e,t,n,r){var i=e.clone(r.saveChild),a=function(e,t,n,r){var i=[],a=-1,o=void 0,u=function(e){return n(qe(t,e),e)};return r.mode===s.INVERSE&&(u=function(e){return!n(qe(t,e))}),l(e,function(e){u(e)&&(-1!==a&&e===a+1?(o=i.length-1,i[o]=i[o].split(\"-\")[0]+\"-\"+e):i.push(\"\"+e),a=e)}),i.join(\",\")}(i._rowDiffset,i.getPartialFieldspace().fields,t,n);return i._rowDiffset=a,i.__calculateFieldspace().calculateFieldsConfig(),r.saveChild&&We(i,U,{config:n},t),i},Qe=function(e,t,n,r){var i=e.clone(n.saveChild),a=t;return n.mode===s.INVERSE&&(a=r.filter(function(e){return-1===t.indexOf(e)})),i._colIdentifier=a.join(\",\"),i.__calculateFieldspace().calculateFieldsConfig(),n.saveChild&&We(i,H,{projField:t,config:n,actualProjField:a},null),i},$e=function(e,t,n,r){r=Object.assign(Object.assign({},xe),r);var a=i[r.dataFormat];if(!a||\"function\"!=typeof a)throw new Error(\"No converter function found for \"+r.dataFormat+\" format\");var o=a(t,r),u=Je(o,2),c=u[0],f=u[1],s=Fe(f,n,c),l=R.createNamespace(s,r.name);return e._partialFieldspace=l,e._rowDiffset=f.length&&f[0].length?\"0-\"+(f[0].length-1):\"\",e._colIdentifier=n.map(function(e){return e.name}).join(),e},Ze=function(e,t){for(var n=0;n2&&void 0!==arguments[2]?arguments[2]:{},i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},a=i.nonTraversingModel,o=i.excludeModels||[];t!==a&&((!o.length||-1===o.indexOf(t))&&t.handlePropagation(n,r),t._children.forEach(function(t){var a=et(n,t),o=Je(a,2),u=o[0],c=o[1];e(t,[u,c],r,i)}))},nt=function(e,t,n,r){var i=void 0,a=void 0,o=n.propagationNameSpace,u=n.propagateToSource,c=n.sourceId,f=r.propagateInterpolatedValues,s=[];if(null===e&&!0!==r.persistent)s=[{criteria:[]}];else{var l,d=Object.values(o.mutableActions);!1!==u&&(d=d.filter(function(e){return e.config.sourceId!==c}));var p=d.filter(function(e){return(r.filterFn||function(){return!0})(e,r)}).map(function(e){return e.config.criteria}),h=[];if(!1!==u){var v=Object.values(o.mutableActions);v.forEach(function(e){var t=e.config;!1===t.applyOnSource&&t.action===r.action&&t.sourceId!==c&&(h.push(e.model),(i=v.filter(function(t){return t!==e}).map(function(e){return e.config.criteria})).length&&s.push({criteria:i,models:e.model,path:function e(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];return null!==t._parent&&(n.push(t),e(t._parent,n)),n}(e.model)}))})}i=(l=[]).concat.apply(l,[].concat(Ge(p),[e])).filter(function(e){return null!==e}),s.push({criteria:i,excludeModels:[].concat(h,Ge(r.excludeModels||[]))})}var m=t.model,y=Object.assign({sourceIdentifiers:e,propagationSourceId:c},r),g=t.groupByModel;f&&g&&(a=ze(g,i,{filterByMeasure:f}),tt(g,a,y)),s.forEach(function(e){var t=ze(m,e.criteria),n=e.path;if(n){var r=function(e,t){for(var n=0,r=t.length;n0&&void 0!==arguments[0])||arguments[0],t=void 0;if(!1===(!(arguments.length>1&&void 0!==arguments[1])||arguments[1])){var n=this.getData({getAllFields:!0}),r=n.data,i=n.schema,a=r.map(function(e){var t={};return i.forEach(function(n,r){t[n.name]=e[r]}),t});t=new this.constructor(a,i)}else t=new this.constructor(this);return e&&this._children.push(t),t}},{key:\"project\",value:function(e,t){var n={mode:s.NORMAL,saveChild:!0};t=Object.assign({},n,t);var r=this.getFieldsConfig(),i=Object.keys(r),a=t.mode,o=e.reduce(function(e,t){return\"RegExp\"===t.constructor.name?e.push.apply(e,function(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t1&&void 0!==arguments[1]?arguments[1]:[];We(this,Y,null,t),this._parent=e,e._children.push(this)}}]),e}(),at=function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function(e,t){var n=[],r=!0,i=!1,a=void 0;try{for(var o,u=e[Symbol.iterator]();!(r=(o=u.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){i=!0,a=e}finally{try{!r&&u.return&&u.return()}finally{if(i)throw a}}return n}(e,t);throw new TypeError(\"Invalid attempt to destructure non-iterable instance\")}}(),ot=function(){function e(e,t){for(var n=0;n1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{saveChild:!0},r=\"\"+e.join(),i=[this,e,t],a=de.apply(void 0,i);return n.saveChild&&(this._children.push(a),We(a,V,{fieldsArr:e,groupByString:r,defaultReducer:se.defaultReducer()},t)),a._parent=this,a}},{key:\"sort\",value:function(e){var t=this.getData({order:\"row\",sort:e}),n=[t.schema.map(function(e){return e.name})].concat(t.data),r=new this.constructor(n,t.schema,{dataFormat:\"DSVArr\"});return r._sortingDetails=e,r}},{key:\"addField\",value:function(e){var t=e.fieldName();this._colIdentifier+=\",\"+t;var n=this._partialFieldspace;if(n.fieldsObj()[e.fieldName()]){var r=n.fields.findIndex(function(e){return e.name===t});r>=0&&(n.fields[r]=e)}else n.fields.push(e);return this.__calculateFieldspace().calculateFieldsConfig(),this}},{key:\"calculateVariable\",value:function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{saveChild:!0,replaceVar:!1},r=this.getFieldsConfig(),i=t.slice(0,t.length-1),a=t[t.length-1];if(r[e.name]&&!n.replaceVar)throw new Error(e.name+\" field already exists in model.\");var o=i.map(function(e){var t=r[e];if(!t)throw new Error(e+\" is not a valid column name.\");return t.index}),u=this.clone(),c=u.getFieldspace().fields,f=o.map(function(e){return c[e]}),s=[];l(u._rowDiffset,function(e){var t=f.map(function(t){return t.data[e]});s[e]=a.apply(void 0,function(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t1&&void 0!==arguments[1]?arguments[1]:{},n=arguments[2],r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},i=t.isMutableAction,a=t.sourceId,o=t.payload,u=function e(t){return t._parent?e(t._parent):t}(this),c=u._propagationNameSpace,f={groupByModel:function e(t){return t._parent&&t._derivation.find(function(e){return\"group\"!==e.op})?e(t._parent):t}(this),model:u};return n&&function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments[2],r=void 0,i=t.isMutableAction,a=t.criteria,o=t.action+\"-\"+t.sourceId;r=i?e.mutableActions:e.immutableActions,null===a?delete r[o]:r[o]={model:n,config:t}}(c,t,this),nt(e,f,{propagationNameSpace:c,sourceId:a},Object.assign({payload:o},t)),i&&function(e,t,n){var r=e.immutableActions;for(var i in r){var a=r[i].config,o=n.config.sourceId,u=!n.propConfig.filterImmutableAction||n.propConfig.filterImmutableAction(a,n.config);if(a.sourceId!==o&&u){var c=a.criteria;nt(c,t,{propagationNameSpace:e,propagateToSource:!1,sourceId:o},a)}}}(c,f,{config:t,propConfig:r}),this}},{key:\"on\",value:function(e,t){switch(e){case\"propagation\":this._onPropagation.push(t)}return this}},{key:\"unsubscribe\",value:function(e){switch(e){case\"propagation\":this._onPropagation=[]}return this}},{key:\"handlePropagation\",value:function(e,t){var n=this;this._onPropagation.forEach(function(r){return r.call(n,e,t)})}},{key:\"bin\",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=this.clone(),r=t.name||e+\"_binned\";if(this.getFieldsConfig()[r]||!this.getFieldsConfig()[e])throw new Error(\"Field \"+e+\" already exists.\");var i=I(this._partialFieldspace.fields.find(function(t){return t.name===e}),this._rowDiffset,t),a=Fe([i.data],[{name:r,type:f.MEASURE,subtype:\"discrete\",bins:{range:i.range,mid:i.mid}}],[r])[0];return n.addField(a),We(n,J,{measureName:e,config:t,binFieldName:r},null),n}}],[{key:\"Reducers\",get:function(){return se}}]),t}(),ct=oe.sum,ft=oe.avg,st=oe.min,lt=oe.max,dt=oe.first,pt=oe.last,ht=oe.count,vt=oe.std,mt=n(0);ut.Operators={compose:function(){for(var e=arguments.length,t=Array(e),n=0;n1&&void 0!==arguments[1]?arguments[1]:{saveChild:!0}).saveChild;return t.forEach(function(e){n=e(n),i.push.apply(i,function(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t1&&r.dispose(),n}},bin:function(){for(var e=arguments.length,t=Array(e),n=0;n2?(i=arguments.length<=0?void 0:arguments[0],n=arguments.length<=1?void 0:arguments[1],o=arguments.length<=2?void 0:arguments[2]):(i=null,n=arguments.length<=0?void 0:arguments[0],o=arguments.length<=1?void 0:arguments[1]),t=o(y),(e=r=new _(t.fn)).addDependencies.apply(e,P(t.dependencies)),this._addPropInModel(i,function(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}({},n,r)),this}},{key:\"_addPropInModel\",value:function(e,t){return this._graph.createNodesFrom(t,e),this}},{key:\"on\",value:function(e,t,r){var n,i=e instanceof Array?e:[e],o=this._graph.createElectricNodeOf(i,{type:\"CurrFrame\",fn:t});r&&(n=this._graph.stopPropagation().setPropagationOverride(\"nextFrame\")).resetNodeValue.apply(n,P(e));return o}},{key:\"next\",value:function(e,t,r){var n,i=e instanceof Array?e:[e],o=this._graph.createElectricNodeOf(i,{type:\"NextFrame\",fn:t});r&&(n=this._graph.stopPropagation().setPropagationOverride(\"currentFrame\")).resetNodeValue.apply(n,P(e));return o}},{key:\"lock\",value:function(){return this._lockFlag=!0,this._reqQ.length=0,this}},{key:\"unlock\",value:function(){return this._lockFlag=!1,this.setProp.apply(this,P(this._reqQ)),this._reqQ.length=0,this}},{key:\"prop\",value:function(){var e,t=void 0,r=void 0;switch(e=arguments.length){case 1:t=arguments.length<=0?void 0:arguments[0];break;case 2:t=arguments.length<=0?void 0:arguments[0],r=arguments.length<=1?void 0:arguments[1];break;default:return this}return 2===e?(this._lockFlag?this._reqQ.push([t,r]):this.setProp([t,r]),this):this._graph.getNodeValue(t)}},{key:\"setProp\",value:function(){for(var e,t=this,r=arguments.length,n=Array(r),i=0;i whenever a break is necessary. This is to recgonize one\n * generalized format independent of the implementation (canvas based solution, svg based solution). This method\n * converts the output of getSmartText().text to array of lines if the text is wrapped. It sets a named property\n * `lines` on the object passed as parameter.\n *\n * @param {Object} smartlabel - the object returned by getSmartText based on which line arr which to be formed.\n *\n * @return {Object} - The same object which was passed in the arguments. Also a named property `lines` is set.\n */\nSmartLabelManager.textToLines = function (smartlabel) {\n smartlabel = smartlabel || {};\n\n if (!smartlabel.text) {\n smartlabel.text = '';\n } else if (typeof smartlabel.text !== 'string') {\n smartlabel.text = smartlabel.text.toString();\n }\n\n smartlabel.lines = smartlabel.text.split(/\\n|/ig);\n return smartlabel;\n};\n\n// Saves all the instance created so far\nSmartLabelManager.store = {};\n\n// Calculates space taken by a character with an approximation value which is calculated by repeating the\n// character by string length times.\nSmartLabelManager.prototype._calCharDimWithCache = function (text, calculateDifference, length) {\n if (!this._init) {\n return false;\n }\n\n var size,\n csArr,\n tw,\n twi,\n cachedStyle,\n asymmetricDifference,\n maxAdvancedCacheLimit = this.options.maxCacheLimit,\n container = this._container,\n style = this.style || {},\n cache = this._advancedCache || (this._advancedCache = {}),\n advancedCacheKey = this._advancedCacheKey || (this._advancedCacheKey = []),\n cacheName = text + (style.fontSize || BLANK) + (style.fontFamily || BLANK) + (style.fontWeight || BLANK) + (style.fontStyle || BLANK),\n cacheInitName = text + 'init' + (style.fontSize || BLANK) + (style.fontFamily || BLANK) + (style.fontWeight || BLANK) + (style.fontStyle || BLANK);\n\n htmlSplCharSpace[text] && (text = htmlSplCharSpace[text]);\n\n if (!calculateDifference) {\n asymmetricDifference = 0;\n } else {\n if ((asymmetricDifference = cache[cacheInitName]) === undefined) {\n container.innerHTML = text.repeat ? text.repeat(length) : Array(length + 1).join(text); // jshint ignore:line\n tw = container.offsetWidth;\n\n container.innerHTML = text;\n twi = container.offsetWidth;\n\n asymmetricDifference = cache[cacheInitName] = (tw - length * twi) / (length + 1);\n advancedCacheKey.push(cacheInitName);\n if (advancedCacheKey.length > maxAdvancedCacheLimit) {\n delete cache[advancedCacheKey.shift()];\n }\n }\n }\n\n if (cachedStyle = cache[cacheName]) {\n csArr = cachedStyle.split(',');\n return {\n width: parseFloat(csArr[0], 10),\n height: parseFloat(csArr[1], 10)\n };\n }\n\n container.innerHTML = text;\n\n size = {\n height: container.offsetHeight,\n width: container.offsetWidth + asymmetricDifference\n };\n\n cache[cacheName] = size.width + ',' + size.height;\n advancedCacheKey.push(cacheName);\n if (advancedCacheKey.length > maxAdvancedCacheLimit) {\n delete cache[advancedCacheKey.shift()];\n }\n\n return size;\n};\n\n// Provide function to calculate the height and width based on the environment and available support from dom.\nSmartLabelManager.prototype._getWidthFn = function () {\n var contObj = this._containerObj,\n container = this._container,\n svgText = contObj.svgText;\n\n if (svgText) {\n return function (str) {\n var bbox, width;\n\n svgText.textContent = str;\n bbox = svgText.getBBox();\n width = bbox.width - SVG_BBOX_CORRECTION;\n if (width < 1) {\n width = bbox.width;\n }\n\n return width;\n };\n } else {\n return function (str) {\n container.innerHTML = str;\n return container.offsetWidth;\n };\n }\n};\n\n/*\n * Sets the style based on which the text's metrics to be calculated.\n *\n * @param {Object} style - The style object which affects the text size\n * {\n * fontSize / 'font-size' : MUST BE FOLLOWED BY PX (10px, 11px)\n * fontFamily / 'font-family'\n * fontWeight / 'font-weight'\n * fontStyle / 'font-style'\n * }\n *\n * @return {SmartLabelManager} - Current instance of SmartLabelManager\n */\nSmartLabelManager.prototype.setStyle = function (style) {\n if (!this._init) {\n return this;\n }\n\n var sCont;\n\n if (style === this.style && !this._styleNotSet) {\n return;\n }\n\n if (!style) {\n style = this.style;\n }\n\n slLib.setLineHeight(style);\n this.style = style;\n\n this._containerObj = sCont = this._containerManager.get(style);\n\n if (this._containerObj) {\n this._container = sCont.node;\n this._context = sCont.context;\n this._cache = sCont.charCache;\n this._lineHeight = sCont.lineHeight;\n this._styleNotSet = false;\n } else {\n this._styleNotSet = true;\n }\n\n return this;\n};\n\n/*\n * Decides whether ellipses to be shown if the node is truncated\n *\n * @param {Boolean} useEllipses - decides if a ellipses to be appended if the text is truncated. Default: false\n *\n * @return {SmartLabelManager} - Current instance of SmartLabelManager\n */\nSmartLabelManager.prototype.useEllipsesOnOverflow = function (useEllipses) {\n if (!this._init) {\n return this;\n }\n this._showNoEllipses = !useEllipses;\n return this;\n};\n\n/*\n * Get wrapped or truncated text if a bound box is defined around it. The result text would be separated by
\n * if wrapped\n *\n * @param {String} text - the subject text\n * @param {Number} maxWidth - width in px of the the bound box\n * @param {Number} maxHeight - height in px of the the bound box\n * @param {Boolean} noWrap - whether the text to be wrapped. Default false.\n *\n * @return {Object} - The metrics of the text bounded by the box\n * {\n * height : height of the wrapped text\n * width : width of the wrapped text\n * isTruncated : whether the text is truncated\n * maxHeight : Maximum height given\n * maxWidth : Maximum width given\n * oriText : Original text sent\n * oriTextHeight : Original text height\n * oriTextWidth : Original text width\n * text : SMART TEXT\n * }\n */\nSmartLabelManager.prototype.getSmartText = function (text, maxWidth, maxHeight, noWrap) {\n if (!this._init) {\n return false;\n }\n\n if (text === undefined || text === null) {\n text = '';\n } else if (typeof text !== 'string') {\n text = text.toString();\n }\n\n var len,\n trimStr,\n tempArr,\n tmpText,\n maxWidthWithEll,\n toolText,\n oriWidth,\n oriHeight,\n newCharIndex,\n nearestChar,\n tempChar,\n getWidth,\n initialLeft,\n initialTop,\n getOriSizeImproveObj,\n spanArr,\n x,\n y,\n minWidth,\n elem,\n chr,\n elemRightMostPoint,\n elemLowestPoint,\n lastBR,\n removeFromIndex,\n removeFromIndexForEllipses,\n hasHTMLTag = false,\n maxStrWidth = 0,\n lastDash = -1,\n lastSpace = -1,\n lastIndexBroken = -1,\n strWidth = 0,\n strHeight = 0,\n oriTextArr = [],\n i = 0,\n ellipsesStr = this._showNoEllipses ? '' : '...',\n lineHeight = this._lineHeight,\n context = this._context,\n container = this._container,\n sCont = this._containerObj,\n ellipsesWidth = sCont.ellipsesWidth,\n dotWidth = sCont.dotWidth,\n characterArr = [],\n dashIndex = -1,\n spaceIndex = -1,\n lastLineBreak = -1,\n fastTrim = function fastTrim(str) {\n str = str.replace(/^\\s\\s*/, '');\n var ws = /\\s/,\n i = str.length;\n while (ws.test(str.charAt(i -= 1))) {/* jshint noempty:false */}\n return str.slice(0, i + 1);\n },\n smartLabel = {\n text: text,\n maxWidth: maxWidth,\n maxHeight: maxHeight,\n width: null,\n height: null,\n oriTextWidth: null,\n oriTextHeight: null,\n oriText: text,\n isTruncated: false\n };\n\n getWidth = this._getWidthFn();\n\n // In some browsers, offsetheight of a single-line text is getting little (1 px) heigher value of the\n // lineheight. As a result, smartLabel is unable to return single-line text.\n // To fix this, increase the maxHeight a little amount. Hence maxHeight = lineHeight * 1.2\n if (maxHeight === lineHeight) {\n maxHeight *= 1.2;\n }\n\n if (container) {\n if (!documentSupport.isBrowserLess) {\n hasHTMLTag = slLib.xmlTagRegEx.test(text);\n if (!hasHTMLTag) {\n // Due to support of <,> for xml we convert <, > to <,> respectively so to get the correct\n // width it is required to convert the same before calculation for the new improve version of the\n // get text width.\n tmpText = text.replace(slLib.ltgtRegex, function (match) {\n return match === '<' ? '<' : '>';\n });\n getOriSizeImproveObj = this.getOriSize(tmpText, true);\n\n smartLabel.oriTextWidth = oriWidth = getOriSizeImproveObj.width;\n smartLabel.oriTextHeight = oriHeight = getOriSizeImproveObj.height;\n } else {\n container.innerHTML = text;\n smartLabel.oriTextWidth = oriWidth = container.offsetWidth;\n smartLabel.oriTextHeight = oriHeight = container.offsetHeight;\n }\n\n if (oriHeight <= maxHeight && oriWidth <= maxWidth) {\n smartLabel.width = smartLabel.oriTextWidth = oriWidth;\n smartLabel.height = smartLabel.oriTextHeight = oriHeight;\n return smartLabel;\n }\n\n if (lineHeight > maxHeight) {\n smartLabel.text = '';\n smartLabel.width = smartLabel.oriTextWidth = 0;\n smartLabel.height = smartLabel.oriTextHeight = 0;\n return smartLabel;\n }\n }\n\n // Calculate width with ellipses\n text = fastTrim(text).replace(/(\\s+)/g, ' ');\n maxWidthWithEll = this._showNoEllipses ? maxWidth : maxWidth - ellipsesWidth;\n\n if (!hasHTMLTag) {\n oriTextArr = text.split('');\n len = oriTextArr.length;\n trimStr = '', tempArr = [];\n tempChar = oriTextArr[0];\n\n if (this._cache[tempChar]) {\n minWidth = this._cache[tempChar].width;\n } else {\n minWidth = getWidth(tempChar);\n this._cache[tempChar] = { width: minWidth };\n }\n\n if (maxWidthWithEll > minWidth) {\n tempArr = text.substr(0, slLib.getNearestBreakIndex(text, maxWidthWithEll, this)).split('');\n i = tempArr.length;\n } else if (minWidth > maxWidth) {\n smartLabel.text = '';\n smartLabel.width = smartLabel.oriTextWidth = smartLabel.height = smartLabel.oriTextHeight = 0;\n return smartLabel;\n } else if (ellipsesStr) {\n maxWidthWithEll = maxWidth - 2 * dotWidth;\n if (maxWidthWithEll > minWidth) {\n ellipsesStr = '..';\n } else {\n maxWidthWithEll = maxWidth - dotWidth;\n if (maxWidthWithEll > minWidth) {\n ellipsesStr = '.';\n } else {\n maxWidthWithEll = 0;\n ellipsesStr = '';\n }\n }\n }\n\n strWidth = getWidth(tempArr.join(''));\n strHeight = this._lineHeight;\n\n if (noWrap) {\n for (; i < len; i += 1) {\n tempChar = tempArr[i] = oriTextArr[i];\n if (this._cache[tempChar]) {\n minWidth = this._cache[tempChar].width;\n } else {\n if (!getOriSizeImproveObj || !(minWidth = getOriSizeImproveObj.detailObj[tempChar])) {\n minWidth = getWidth(tempChar);\n }\n this._cache[tempChar] = {\n width: minWidth\n };\n }\n strWidth += minWidth;\n if (strWidth > maxWidthWithEll) {\n if (!trimStr) {\n trimStr = tempArr.slice(0, -1).join('');\n }\n if (strWidth > maxWidth) {\n smartLabel.text = fastTrim(trimStr) + ellipsesStr;\n smartLabel.tooltext = smartLabel.oriText;\n smartLabel.width = getWidth(smartLabel.text);\n smartLabel.height = this._lineHeight;\n return smartLabel;\n }\n }\n }\n\n smartLabel.text = tempArr.join('');\n smartLabel.width = strWidth;\n smartLabel.height = this._lineHeight;\n return smartLabel;\n } else {\n for (; i < len; i += 1) {\n tempChar = tempArr[i] = oriTextArr[i];\n if (tempChar === ' ' && !context) {\n tempChar = ' ';\n }\n\n if (this._cache[tempChar]) {\n minWidth = this._cache[tempChar].width;\n } else {\n if (!getOriSizeImproveObj || !(minWidth = getOriSizeImproveObj.detailObj[tempChar])) {\n minWidth = getWidth(tempChar);\n }\n this._cache[tempChar] = {\n width: minWidth\n };\n }\n strWidth += minWidth;\n\n if (strWidth > maxWidthWithEll) {\n if (!trimStr) {\n trimStr = tempArr.slice(0, -1).join('');\n }\n if (strWidth > maxWidth) {\n /** @todo use regular expressions for better performance. */\n lastSpace = text.substr(0, tempArr.length).lastIndexOf(' ');\n lastDash = text.substr(0, tempArr.length).lastIndexOf('-');\n if (lastSpace > lastIndexBroken) {\n strWidth = getWidth(tempArr.slice(lastIndexBroken + 1, lastSpace).join(''));\n tempArr.splice(lastSpace, 1, '
');\n lastIndexBroken = lastSpace;\n newCharIndex = lastSpace + 1;\n } else if (lastDash > lastIndexBroken) {\n if (lastDash === tempArr.length - 1) {\n strWidth = getWidth(tempArr.slice(lastIndexBroken + 1, lastSpace).join(''));\n tempArr.splice(lastDash, 1, '
-');\n } else {\n strWidth = getWidth(tempArr.slice(lastIndexBroken + 1, lastSpace).join(''));\n tempArr.splice(lastDash, 1, '-
');\n }\n lastIndexBroken = lastDash;\n newCharIndex = lastDash + 1;\n } else {\n tempArr.splice(tempArr.length - 1, 1, '
' + oriTextArr[i]);\n lastLineBreak = tempArr.length - 2;\n strWidth = getWidth(tempArr.slice(lastIndexBroken + 1, lastLineBreak + 1).join(''));\n lastIndexBroken = lastLineBreak;\n newCharIndex = i;\n }\n strHeight += this._lineHeight;\n if (strHeight > maxHeight) {\n smartLabel.text = fastTrim(trimStr) + ellipsesStr;\n smartLabel.tooltext = smartLabel.oriText;\n // The max width among all the lines will be the width of the string.\n smartLabel.width = maxWidth;\n smartLabel.height = strHeight - this._lineHeight;\n return smartLabel;\n } else {\n maxStrWidth = max(maxStrWidth, strWidth);\n trimStr = null;\n nearestChar = slLib.getNearestBreakIndex(text.substr(newCharIndex), maxWidthWithEll, this);\n strWidth = getWidth(text.substr(newCharIndex, nearestChar || 1));\n if (tempArr.length < newCharIndex + nearestChar) {\n tempArr = tempArr.concat(text.substr(tempArr.length, newCharIndex + nearestChar - tempArr.length).split(''));\n i = tempArr.length - 1;\n }\n }\n }\n }\n }\n\n maxStrWidth = max(maxStrWidth, strWidth);\n\n smartLabel.text = tempArr.join('');\n smartLabel.width = maxStrWidth;\n smartLabel.height = strHeight;\n return smartLabel;\n }\n } else {\n toolText = text.replace(slLib.spanAdditionRegx, '$2');\n text = text.replace(slLib.spanAdditionRegx, slLib.spanAdditionReplacer);\n text = text.replace(/()/g, '$1');\n\n container.innerHTML = text;\n\n spanArr = container[documentSupport.childRetriverFn](documentSupport.childRetriverString);\n\n for (x = 0, y = spanArr.length; x < y; x += 1) {\n elem = spanArr[x];\n //chech whether this span is temporary inserted span from it's class\n if (documentSupport.noClassTesting || slLib.classNameReg.test(elem.className)) {\n chr = elem.innerHTML;\n if (chr !== '') {\n if (chr === ' ') {\n spaceIndex = characterArr.length;\n } else if (chr === '-') {\n dashIndex = characterArr.length;\n }\n\n characterArr.push({\n spaceIdx: spaceIndex,\n dashIdx: dashIndex,\n elem: elem\n });\n oriTextArr.push(chr);\n }\n }\n }\n\n i = 0;\n len = characterArr.length;\n minWidth = characterArr[0].elem.offsetWidth;\n\n if (minWidth > maxWidth) {\n smartLabel.text = '';\n smartLabel.width = smartLabel.oriTextWidth = smartLabel.height = smartLabel.oriTextHeight = 0;\n\n return smartLabel;\n } else if (minWidth > maxWidthWithEll && !this._showNoEllipses) {\n\n maxWidthWithEll = maxWidth - 2 * dotWidth;\n if (maxWidthWithEll > minWidth) {\n ellipsesStr = '..';\n } else {\n maxWidthWithEll = maxWidth - dotWidth;\n if (maxWidthWithEll > minWidth) {\n ellipsesStr = '.';\n } else {\n maxWidthWithEll = 0;\n ellipsesStr = '';\n }\n }\n }\n\n initialLeft = characterArr[0].elem.offsetLeft;\n initialTop = characterArr[0].elem.offsetTop;\n\n if (noWrap) {\n for (; i < len; i += 1) {\n elem = characterArr[i].elem;\n elemRightMostPoint = elem.offsetLeft - initialLeft + elem.offsetWidth;\n\n if (elemRightMostPoint > maxWidthWithEll) {\n if (!removeFromIndexForEllipses) {\n removeFromIndexForEllipses = i;\n }\n if (container.offsetWidth > maxWidth) {\n removeFromIndex = i;\n i = len;\n }\n }\n }\n } else {\n for (; i < len; i += 1) {\n elem = characterArr[i].elem;\n elemLowestPoint = elem.offsetHeight + (elem.offsetTop - initialTop);\n elemRightMostPoint = elem.offsetLeft - initialLeft + elem.offsetWidth;\n\n lastBR = null;\n\n if (elemRightMostPoint > maxWidthWithEll) {\n if (!removeFromIndexForEllipses) {\n removeFromIndexForEllipses = i;\n }\n\n if (elemRightMostPoint > maxWidth) {\n lastSpace = characterArr[i].spaceIdx;\n lastDash = characterArr[i].dashIdx;\n if (lastSpace > lastIndexBroken) {\n characterArr[lastSpace].elem.innerHTML = '
';\n lastIndexBroken = lastSpace;\n } else if (lastDash > lastIndexBroken) {\n if (lastDash === i) {\n // in case the overflowing character itself is the '-'\n characterArr[lastDash].elem.innerHTML = '
-';\n } else {\n characterArr[lastDash].elem.innerHTML = '-
';\n }\n lastIndexBroken = lastDash;\n } else {\n elem.parentNode.insertBefore(lastBR = doc.createElement('br'), elem);\n }\n\n //check whether this break made current element outside the area height\n if (elem.offsetHeight + elem.offsetTop > maxHeight) {\n //remove the lastly inserted line break\n if (lastBR) {\n lastBR.parentNode.removeChild(lastBR);\n } else if (lastIndexBroken === lastDash) {\n characterArr[lastDash].elem.innerHTML = '-';\n } else {\n characterArr[lastSpace].elem.innerHTML = ' ';\n }\n removeFromIndex = i;\n //break the looping condition\n i = len;\n } else {\n removeFromIndexForEllipses = null;\n }\n }\n } else {\n //check whether this break made current element outside the area height\n if (elemLowestPoint > maxHeight) {\n removeFromIndex = i;\n i = len;\n }\n }\n }\n }\n\n if (removeFromIndex < len) {\n //set the trancated property of the smartlabel\n smartLabel.isTruncated = true;\n\n /** @todo is this really needed? */\n removeFromIndexForEllipses = removeFromIndexForEllipses ? removeFromIndexForEllipses : removeFromIndex;\n\n for (i = len - 1; i >= removeFromIndexForEllipses; i -= 1) {\n elem = characterArr[i].elem;\n //chech whether this span is temporary inserted span from it's class\n elem.parentNode.removeChild(elem);\n }\n\n for (; i >= 0; i -= 1) {\n elem = characterArr[i].elem;\n if (slLib.classNameBrReg.test(elem.className)) {\n //chech whether this span is temporary inserted span from it's class\n elem.parentNode.removeChild(elem);\n } else {\n i = 0;\n }\n }\n }\n\n //get the smart text\n smartLabel.text = container.innerHTML.replace(slLib.spanRemovalRegx, '$1').replace(/\\&\\;/g, '&');\n if (smartLabel.isTruncated) {\n smartLabel.text += ellipsesStr;\n smartLabel.tooltext = toolText;\n }\n }\n\n smartLabel.height = container.offsetHeight;\n smartLabel.width = container.offsetWidth;\n\n return smartLabel;\n } else {\n smartLabel.error = new Error('Body Tag Missing!');\n return smartLabel;\n }\n};\n\n/*\n * Get the height and width of a text.\n *\n * @param {String} text - Text whose metrics to be measured\n * @param {Boolean} Optional detailedCalculationFlag - this flag if set it calculates per letter position\n * information and returns it. Ideally you dont need it unless you want to post process the\n * string. And its an EXPENSIVE OPERATION.\n *\n * @return {Object} - If detailedCalculationFlag is set to true the returned object would be\n * {\n * height: height of the text\n * width: width of the text\n * detailObj: detail calculation of letters in the format {lettername: width}\n * }\n * If detailedCalculationFlag is set to false the returned object wont have the detailObj prop.\n */\nSmartLabelManager.prototype.getOriSize = function (text, detailedCalculationFlag) {\n if (!this._init) {\n return false;\n }\n\n var textArr,\n letter,\n lSize,\n i,\n l,\n cumulativeSize = 0,\n height = 0,\n indiSizeStore = {};\n\n if (!detailedCalculationFlag) {\n return this._calCharDimWithCache(text);\n }\n\n // Calculate the width of every letter with an approximation\n textArr = text.split('');\n for (i = 0, l = textArr.length; i < l; i++) {\n letter = textArr[i];\n lSize = this._calCharDimWithCache(letter, true, textArr.length);\n height = max(height, lSize.height);\n cumulativeSize += lSize.width;\n indiSizeStore[letter] = lSize.width;\n }\n\n return {\n width: round(cumulativeSize),\n height: height,\n detailObj: indiSizeStore\n };\n};\n\n/*\n * Dispose the container and object allocated by the smartlabel\n */\nSmartLabelManager.prototype.dispose = function () {\n if (!this._init) {\n return this;\n }\n\n this._containerManager && this._containerManager.dispose && this._containerManager.dispose();\n\n delete this._container;\n delete this._context;\n delete this._cache;\n delete this._containerManager;\n delete this._containerObj;\n delete this.id;\n delete this.style;\n delete this.parentContainer;\n delete this._showNoEllipses;\n\n return this;\n};\n\nexports['default'] = SmartLabelManager;\nmodule.exports = exports['default'];","'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n\tvalue: true\n});\nvar lib = {\n\tinit: function init(win) {\n\t\tvar doc = win.document,\n\t\t nav = win.navigator,\n\t\t userAgent = nav.userAgent,\n\t\t DIV = 'DIV',\n\t\t ceil = Math.ceil,\n\t\t floor = Math.floor,\n\t\t containerInstanceCount = 0,\n\t\t clsNameSpace = 'fusioncharts-smartlabel-',\n\t\t containerClass = clsNameSpace + 'container',\n\t\t classNameWithTag = clsNameSpace + 'tag',\n\t\t classNameWithTagBR = clsNameSpace + 'br';\n\n\t\tlib = {\n\t\t\twin: win,\n\n\t\t\tcontainerClass: containerClass,\n\n\t\t\tclassNameWithTag: classNameWithTag,\n\n\t\t\tclassNameWithTagBR: classNameWithTagBR,\n\n\t\t\tmaxDefaultCacheLimit: 500,\n\n\t\t\tclassNameReg: new RegExp('\\b' + classNameWithTag + '\\b'),\n\n\t\t\tclassNameBrReg: new RegExp('\\b' + classNameWithTagBR + '\\b'),\n\n\t\t\tspanAdditionRegx: /(<[^<\\>]+?\\>)|(&(?:[a-z]+|#[0-9]+);|.)/ig,\n\n\t\t\tspanAdditionReplacer: '$1$2',\n\n\t\t\tspanRemovalRegx: new RegExp('\\\\]+?' + classNameWithTag + '[^\\\\>]{0,}\\\\>(.*?)\\\\<\\\\/span\\\\>', 'ig'),\n\n\t\t\txmlTagRegEx: new RegExp('<[^>][^<]*[^>]+>', 'i'),\n\n\t\t\tltgtRegex: /<|>/g,\n\n\t\t\tbrReplaceRegex: //ig,\n\n\t\t\ttestStrAvg: 'WgI',\n\n\t\t\t// This style is applied over the parent smartlabel container. The container is kept hidden from the viewport\n\t\t\tparentContainerStyle: {\n\t\t\t\tposition: 'absolute',\n\t\t\t\ttop: '-9999em',\n\t\t\t\twhiteSpace: 'nowrap',\n\t\t\t\tpadding: '0px',\n\t\t\t\twidth: '1px',\n\t\t\t\theight: '1px',\n\t\t\t\toverflow: 'hidden'\n\t\t\t},\n\n\t\t\t// All the style which might affect the text metrics\n\t\t\tsupportedStyle: {\n\t\t\t\tfont: 'font',\n\t\t\t\tfontFamily: 'font-family',\n\t\t\t\t'font-family': 'font-family',\n\t\t\t\tfontWeight: 'font-weight',\n\t\t\t\t'font-weight': 'font-weight',\n\t\t\t\tfontSize: 'font-size',\n\t\t\t\t'font-size': 'font-size',\n\t\t\t\tlineHeight: 'line-height',\n\t\t\t\t'line-height': 'line-height',\n\t\t\t\tfontStyle: 'font-style',\n\t\t\t\t'font-style': 'font-style'\n\t\t\t},\n\n\t\t\t// Get the support list for html the document where the text calcution is to be done.\n\t\t\tgetDocumentSupport: function getDocumentSupport() {\n\t\t\t\tvar childRetriverFn, childRetriverString, noClassTesting;\n\n\t\t\t\tif (doc.getElementsByClassName) {\n\t\t\t\t\tchildRetriverFn = 'getElementsByClassName';\n\t\t\t\t\tchildRetriverString = classNameWithTag;\n\t\t\t\t\tnoClassTesting = true;\n\t\t\t\t} else {\n\t\t\t\t\tchildRetriverFn = 'getElementsByTagName';\n\t\t\t\t\tchildRetriverString = 'span';\n\t\t\t\t\tnoClassTesting = false;\n\t\t\t\t}\n\n\t\t\t\treturn {\n\t\t\t\t\tisIE: /msie/i.test(userAgent) && !win.opera,\n\t\t\t\t\thasSVG: Boolean(win.SVGAngle || doc.implementation.hasFeature('http://www.w3.org/TR/SVG11/feature#BasicStructure', '1.1')),\n\t\t\t\t\tisHeadLess: new RegExp(' HtmlUnit').test(userAgent),\n\t\t\t\t\tisWebKit: new RegExp(' AppleWebKit/').test(userAgent),\n\t\t\t\t\tchildRetriverFn: childRetriverFn,\n\t\t\t\t\tchildRetriverString: childRetriverString,\n\t\t\t\t\tnoClassTesting: noClassTesting\n\t\t\t\t};\n\t\t\t},\n\n\t\t\t/*\n * Create a html div element and attach it with a parent. All the subsequent operations are performed\n * by upding this dom tree only.\n *\n * @param {HTMLElement} - The html element where the newly created div is to be attached. If not passed,\n * the new div is appended on the body.\n */\n\t\t\tcreateContainer: function createContainer(containerParent) {\n\t\t\t\tvar body, container;\n\n\t\t\t\tif (containerParent && (containerParent.offsetWidth || containerParent.offsetHeight)) {\n\t\t\t\t\tif (containerParent.appendChild) {\n\t\t\t\t\t\tcontainerParent.appendChild(container = doc.createElement(DIV));\n\t\t\t\t\t\tcontainer.className = containerClass;\n\t\t\t\t\t\tcontainer.setAttribute('aria-hidden', 'true');\n\t\t\t\t\t\tcontainer.setAttribute('role', 'presentation');\n\t\t\t\t\t\treturn container;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tbody = doc.getElementsByTagName('body')[0];\n\n\t\t\t\t\tif (body && body.appendChild) {\n\t\t\t\t\t\tcontainer = doc.createElement(DIV);\n\t\t\t\t\t\tcontainer.className = containerClass;\n\t\t\t\t\t\tcontainer.setAttribute('aria-hidden', 'true');\n\t\t\t\t\t\tcontainer.setAttribute('role', 'presentation');\n\t\t\t\t\t\tcontainerInstanceCount += 1;\n\t\t\t\t\t\tbody.appendChild(container);\n\t\t\t\t\t\treturn container;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// Finds a approximate position where the text is to be broken\n\t\t\tgetNearestBreakIndex: function getNearestBreakIndex(text, maxWidth, sl) {\n\t\t\t\tif (!text || !text.length) {\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\n\t\t\t\tvar difference,\n\t\t\t\t getWidth = sl._getWidthFn(),\n\t\t\t\t charLen = 0,\n\t\t\t\t increment = 0,\n\t\t\t\t oriWidth = getWidth(text),\n\t\t\t\t avgWidth = oriWidth / text.length;\n\n\t\t\t\tdifference = maxWidth;\n\t\t\t\tcharLen = ceil(maxWidth / avgWidth);\n\n\t\t\t\tif (oriWidth < maxWidth) {\n\t\t\t\t\treturn text.length - 1;\n\t\t\t\t}\n\n\t\t\t\tif (charLen > text.length) {\n\t\t\t\t\tdifference = maxWidth - oriWidth;\n\t\t\t\t\tcharLen = text.length;\n\t\t\t\t}\n\n\t\t\t\twhile (difference > 0) {\n\t\t\t\t\tdifference = maxWidth - getWidth(text.substr(0, charLen));\n\t\t\t\t\tincrement = floor(difference / avgWidth);\n\t\t\t\t\tif (increment) {\n\t\t\t\t\t\tcharLen += increment;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn charLen;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\twhile (difference < 0) {\n\t\t\t\t\tdifference = maxWidth - getWidth(text.substr(0, charLen));\n\t\t\t\t\tincrement = floor(difference / avgWidth);\n\t\t\t\t\tif (increment) {\n\t\t\t\t\t\tcharLen += increment;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn charLen;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn charLen;\n\t\t\t},\n\n\t\t\t/*\n * Determine lineheight of a text for a given style. It adds propery lineHeight to the style passed\n *\n * @param {Object} - The style based on which the text's metric needs to be calculated. The calculation happens\n * based on fontSize property, if its not present a default font size is assumed.\n *\n * @return {Object} - The style that was passed with lineHeight as a named propery set on the object.\n */\n\t\t\tsetLineHeight: function setLineHeight(styleObj) {\n\t\t\t\tvar fSize = styleObj.fontSize = styleObj.fontSize || '12px';\n\t\t\t\tstyleObj.lineHeight = styleObj.lineHeight || styleObj['line-height'] || parseInt(fSize, 10) * 1.2 + 'px';\n\t\t\t\treturn styleObj;\n\t\t\t}\n\t\t};\n\n\t\treturn lib;\n\t}\n};\n\nexports['default'] = lib;\nmodule.exports = exports['default'];","const Muze = require('./muze');\n\nmodule.exports = Muze.default ? Muze.default : Muze;\n","'use strict';\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _lib = require('./lib');\n\nvar _lib2 = _interopRequireDefault(_lib);\n\nvar slLib = _lib2['default'].init(typeof window !== \"undefined\" ? window : undefined),\n doc = slLib.win.document,\n documentSupport = slLib.getDocumentSupport(),\n SVG_BBOX_CORRECTION = documentSupport.isWebKit ? 0 : 4.5;\n\nfunction ContainerManager(parentContainer, isBrowserLess, maxContainers) {\n var svg;\n\n maxContainers = maxContainers > 5 ? maxContainers : 5;\n maxContainers = maxContainers < 20 ? maxContainers : 20;\n\n this.maxContainers = maxContainers;\n this.first = null;\n this.last = null;\n this.containers = {};\n this.length = 0;\n this.rootNode = parentContainer;\n\n if (isBrowserLess) {\n svg = doc.createElementNS('http://www.w3.org/2000/svg', 'svg');\n svg.setAttributeNS('http://www.w3.org/2000/svg', 'xlink', 'http://www.w3.org/1999/xlink');\n svg.setAttributeNS('http://www.w3.org/2000/svg', 'height', '0');\n svg.setAttributeNS('http://www.w3.org/2000/svg', 'width', '0');\n this.svgRoot = svg;\n this.rootNode.appendChild(svg);\n }\n}\n\nContainerManager.prototype.get = function (style) {\n var diff,\n key,\n containerObj,\n containers = this.containers,\n len = this.length,\n max = this.maxContainers,\n keyStr = '';\n\n for (key in slLib.supportedStyle) {\n if (style[key] !== undefined) {\n keyStr += slLib.supportedStyle[key] + ':' + style[key] + ';';\n }\n }\n\n if (!keyStr) {\n return false;\n }\n\n if (containerObj = containers[keyStr]) {\n if (this.first !== containerObj) {\n containerObj.prev && (containerObj.prev.next = containerObj.next);\n containerObj.next && (containerObj.next.prev = containerObj.prev);\n containerObj.next = this.first;\n containerObj.next.prev = containerObj;\n this.last === containerObj && (this.last = containerObj.prev);\n containerObj.prev = null;\n this.first = containerObj;\n }\n } else {\n if (len >= max) {\n diff = len - max + 1;\n // +1 is to remove an extra entry to make space for the new container to be added.\n while (diff--) {\n this.removeContainer(this.last);\n }\n }\n containerObj = this.addContainer(keyStr);\n }\n\n return containerObj;\n};\n\nContainerManager.prototype.addContainer = function (keyStr) {\n var node, container;\n\n this.containers[keyStr] = container = {\n next: null,\n prev: null,\n node: null,\n ellipsesWidth: 0,\n lineHeight: 0,\n dotWidth: 0,\n avgCharWidth: 4,\n keyStr: keyStr,\n charCache: {}\n };\n\n // Since the container objects are arranged from most recent to least recent order, we need to add the new\n // object at the beginning of the list.\n container.next = this.first;\n container.next && (container.next.prev = container);\n this.first = container;\n if (!this.last) {\n this.last = container;\n }\n this.length += 1;\n\n node = container.node = doc.createElement('div');\n this.rootNode.appendChild(node);\n\n if (documentSupport.isIE && !documentSupport.hasSVG) {\n node.style.setAttribute('cssText', keyStr);\n } else {\n node.setAttribute('style', keyStr);\n }\n\n node.setAttribute('aria-hidden', 'true');\n node.setAttribute('role', 'presentation');\n node.style.display = 'inline-block';\n\n node.innerHTML = slLib.testStrAvg; // A test string.\n container.lineHeight = node.offsetHeight;\n container.avgCharWidth = node.offsetWidth / 3;\n\n if (documentSupport.isBrowserLess) {\n node = container.svgText = doc.createElementNS('http://www.w3.org/2000/svg', 'text');\n node.setAttribute('style', keyStr);\n this.svgRoot.appendChild(node);\n\n node.textContent = slLib.testStrAvg; // A test string.\n container.lineHeight = node.getBBox().height;\n container.avgCharWidth = (node.getBBox().width - SVG_BBOX_CORRECTION) / 3;\n\n node.textContent = '...';\n container.ellipsesWidth = node.getBBox().width - SVG_BBOX_CORRECTION;\n node.textContent = '.';\n container.dotWidth = node.getBBox().width - SVG_BBOX_CORRECTION;\n } else {\n node.innerHTML = '...';\n container.ellipsesWidth = node.offsetWidth;\n node.innerHTML = '.';\n container.dotWidth = node.offsetWidth;\n node.innerHTML = '';\n }\n\n return container;\n};\n\nContainerManager.prototype.removeContainer = function (cObj) {\n var keyStr = cObj.keyStr;\n\n if (!keyStr || !this.length || !cObj) {\n return;\n }\n this.length -= 1;\n\n cObj.prev && (cObj.prev.next = cObj.next);\n cObj.next && (cObj.next.prev = cObj.prev);\n this.first === cObj && (this.first = cObj.next);\n this.last === cObj && (this.last = cObj.prev);\n\n cObj.node.parentNode.removeChild(cObj.node);\n\n delete this.containers[keyStr];\n};\n\nContainerManager.prototype.dispose = function () {\n var key,\n containers = this.containers;\n\n this.maxContainers = null;\n for (key in containers) {\n this.removeContainer(containers[key]);\n }\n\n this.rootNode.parentNode.removeChild(this.rootNode);\n\n this.rootNode = null;\n this.first = null;\n this.last = null;\n};\n\nmodule.exports = ContainerManager;","export default function(a, b) {\n return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","import ascending from \"./ascending\";\n\nexport default function(compare) {\n if (compare.length === 1) compare = ascendingComparator(compare);\n return {\n left: function(a, x, lo, hi) {\n if (lo == null) lo = 0;\n if (hi == null) hi = a.length;\n while (lo < hi) {\n var mid = lo + hi >>> 1;\n if (compare(a[mid], x) < 0) lo = mid + 1;\n else hi = mid;\n }\n return lo;\n },\n right: function(a, x, lo, hi) {\n if (lo == null) lo = 0;\n if (hi == null) hi = a.length;\n while (lo < hi) {\n var mid = lo + hi >>> 1;\n if (compare(a[mid], x) > 0) hi = mid;\n else lo = mid + 1;\n }\n return lo;\n }\n };\n}\n\nfunction ascendingComparator(f) {\n return function(d, x) {\n return ascending(f(d), x);\n };\n}\n","import ascending from \"./ascending\";\nimport bisector from \"./bisector\";\n\nvar ascendingBisect = bisector(ascending);\nexport var bisectRight = ascendingBisect.right;\nexport var bisectLeft = ascendingBisect.left;\nexport default bisectRight;\n","import {pair} from \"./pairs\";\n\nexport default function(values0, values1, reduce) {\n var n0 = values0.length,\n n1 = values1.length,\n values = new Array(n0 * n1),\n i0,\n i1,\n i,\n value0;\n\n if (reduce == null) reduce = pair;\n\n for (i0 = i = 0; i0 < n0; ++i0) {\n for (value0 = values0[i0], i1 = 0; i1 < n1; ++i1, ++i) {\n values[i] = reduce(value0, values1[i1]);\n }\n }\n\n return values;\n}\n","export default function(x) {\n return x === null ? NaN : +x;\n}\n","var array = Array.prototype;\n\nexport var slice = array.slice;\nexport var map = array.map;\n","export default function(start, stop, step) {\n start = +start, stop = +stop, step = (n = arguments.length) < 2 ? (stop = start, start = 0, 1) : n < 3 ? 1 : +step;\n\n var i = -1,\n n = Math.max(0, Math.ceil((stop - start) / step)) | 0,\n range = new Array(n);\n\n while (++i < n) {\n range[i] = start + i * step;\n }\n\n return range;\n}\n","var e10 = Math.sqrt(50),\n e5 = Math.sqrt(10),\n e2 = Math.sqrt(2);\n\nexport default function(start, stop, count) {\n var reverse,\n i = -1,\n n,\n ticks,\n step;\n\n stop = +stop, start = +start, count = +count;\n if (start === stop && count > 0) return [start];\n if (reverse = stop < start) n = start, start = stop, stop = n;\n if ((step = tickIncrement(start, stop, count)) === 0 || !isFinite(step)) return [];\n\n if (step > 0) {\n start = Math.ceil(start / step);\n stop = Math.floor(stop / step);\n ticks = new Array(n = Math.ceil(stop - start + 1));\n while (++i < n) ticks[i] = (start + i) * step;\n } else {\n start = Math.floor(start * step);\n stop = Math.ceil(stop * step);\n ticks = new Array(n = Math.ceil(start - stop + 1));\n while (++i < n) ticks[i] = (start - i) / step;\n }\n\n if (reverse) ticks.reverse();\n\n return ticks;\n}\n\nexport function tickIncrement(start, stop, count) {\n var step = (stop - start) / Math.max(0, count),\n power = Math.floor(Math.log(step) / Math.LN10),\n error = step / Math.pow(10, power);\n return power >= 0\n ? (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1) * Math.pow(10, power)\n : -Math.pow(10, -power) / (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1);\n}\n\nexport function tickStep(start, stop, count) {\n var step0 = Math.abs(stop - start) / Math.max(0, count),\n step1 = Math.pow(10, Math.floor(Math.log(step0) / Math.LN10)),\n error = step0 / step1;\n if (error >= e10) step1 *= 10;\n else if (error >= e5) step1 *= 5;\n else if (error >= e2) step1 *= 2;\n return stop < start ? -step1 : step1;\n}\n","export default function(values) {\n return Math.ceil(Math.log(values.length) / Math.LN2) + 1;\n}\n","import number from \"./number\";\n\nexport default function(values, p, valueof) {\n if (valueof == null) valueof = number;\n if (!(n = values.length)) return;\n if ((p = +p) <= 0 || n < 2) return +valueof(values[0], 0, values);\n if (p >= 1) return +valueof(values[n - 1], n - 1, values);\n var n,\n i = (n - 1) * p,\n i0 = Math.floor(i),\n value0 = +valueof(values[i0], i0, values),\n value1 = +valueof(values[i0 + 1], i0 + 1, values);\n return value0 + (value1 - value0) * (i - i0);\n}\n","export var prefix = \"$\";\n\nfunction Map() {}\n\nMap.prototype = map.prototype = {\n constructor: Map,\n has: function(key) {\n return (prefix + key) in this;\n },\n get: function(key) {\n return this[prefix + key];\n },\n set: function(key, value) {\n this[prefix + key] = value;\n return this;\n },\n remove: function(key) {\n var property = prefix + key;\n return property in this && delete this[property];\n },\n clear: function() {\n for (var property in this) if (property[0] === prefix) delete this[property];\n },\n keys: function() {\n var keys = [];\n for (var property in this) if (property[0] === prefix) keys.push(property.slice(1));\n return keys;\n },\n values: function() {\n var values = [];\n for (var property in this) if (property[0] === prefix) values.push(this[property]);\n return values;\n },\n entries: function() {\n var entries = [];\n for (var property in this) if (property[0] === prefix) entries.push({key: property.slice(1), value: this[property]});\n return entries;\n },\n size: function() {\n var size = 0;\n for (var property in this) if (property[0] === prefix) ++size;\n return size;\n },\n empty: function() {\n for (var property in this) if (property[0] === prefix) return false;\n return true;\n },\n each: function(f) {\n for (var property in this) if (property[0] === prefix) f(this[property], property.slice(1), this);\n }\n};\n\nfunction map(object, f) {\n var map = new Map;\n\n // Copy constructor.\n if (object instanceof Map) object.each(function(value, key) { map.set(key, value); });\n\n // Index array by numeric index or specified key function.\n else if (Array.isArray(object)) {\n var i = -1,\n n = object.length,\n o;\n\n if (f == null) while (++i < n) map.set(i, object[i]);\n else while (++i < n) map.set(f(o = object[i], i, object), o);\n }\n\n // Convert object to map.\n else if (object) for (var key in object) map.set(key, object[key]);\n\n return map;\n}\n\nexport default map;\n","import map from \"./map\";\n\nexport default function() {\n var keys = [],\n sortKeys = [],\n sortValues,\n rollup,\n nest;\n\n function apply(array, depth, createResult, setResult) {\n if (depth >= keys.length) {\n if (sortValues != null) array.sort(sortValues);\n return rollup != null ? rollup(array) : array;\n }\n\n var i = -1,\n n = array.length,\n key = keys[depth++],\n keyValue,\n value,\n valuesByKey = map(),\n values,\n result = createResult();\n\n while (++i < n) {\n if (values = valuesByKey.get(keyValue = key(value = array[i]) + \"\")) {\n values.push(value);\n } else {\n valuesByKey.set(keyValue, [value]);\n }\n }\n\n valuesByKey.each(function(values, key) {\n setResult(result, key, apply(values, depth, createResult, setResult));\n });\n\n return result;\n }\n\n function entries(map, depth) {\n if (++depth > keys.length) return map;\n var array, sortKey = sortKeys[depth - 1];\n if (rollup != null && depth >= keys.length) array = map.entries();\n else array = [], map.each(function(v, k) { array.push({key: k, values: entries(v, depth)}); });\n return sortKey != null ? array.sort(function(a, b) { return sortKey(a.key, b.key); }) : array;\n }\n\n return nest = {\n object: function(array) { return apply(array, 0, createObject, setObject); },\n map: function(array) { return apply(array, 0, createMap, setMap); },\n entries: function(array) { return entries(apply(array, 0, createMap, setMap), 0); },\n key: function(d) { keys.push(d); return nest; },\n sortKeys: function(order) { sortKeys[keys.length - 1] = order; return nest; },\n sortValues: function(order) { sortValues = order; return nest; },\n rollup: function(f) { rollup = f; return nest; }\n };\n}\n\nfunction createObject() {\n return {};\n}\n\nfunction setObject(object, key, value) {\n object[key] = value;\n}\n\nfunction createMap() {\n return map();\n}\n\nfunction setMap(map, key, value) {\n map.set(key, value);\n}\n","import {default as map, prefix} from \"./map\";\n\nfunction Set() {}\n\nvar proto = map.prototype;\n\nSet.prototype = set.prototype = {\n constructor: Set,\n has: proto.has,\n add: function(value) {\n value += \"\";\n this[prefix + value] = value;\n return this;\n },\n remove: proto.remove,\n clear: proto.clear,\n values: proto.keys,\n size: proto.size,\n empty: proto.empty,\n each: proto.each\n};\n\nfunction set(object, f) {\n var set = new Set;\n\n // Copy constructor.\n if (object instanceof Set) object.each(function(value) { set.add(value); });\n\n // Otherwise, assume it’s an array.\n else if (object) {\n var i = -1, n = object.length;\n if (f == null) while (++i < n) set.add(object[i]);\n else while (++i < n) set.add(f(object[i], i, object));\n }\n\n return set;\n}\n\nexport default set;\n","var array = Array.prototype;\n\nexport var map = array.map;\nexport var slice = array.slice;\n","import {map} from \"d3-collection\";\nimport {slice} from \"./array\";\n\nexport var implicit = {name: \"implicit\"};\n\nexport default function ordinal(range) {\n var index = map(),\n domain = [],\n unknown = implicit;\n\n range = range == null ? [] : slice.call(range);\n\n function scale(d) {\n var key = d + \"\", i = index.get(key);\n if (!i) {\n if (unknown !== implicit) return unknown;\n index.set(key, i = domain.push(d));\n }\n return range[(i - 1) % range.length];\n }\n\n scale.domain = function(_) {\n if (!arguments.length) return domain.slice();\n domain = [], index = map();\n var i = -1, n = _.length, d, key;\n while (++i < n) if (!index.has(key = (d = _[i]) + \"\")) index.set(key, domain.push(d));\n return scale;\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = slice.call(_), scale) : range.slice();\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n scale.copy = function() {\n return ordinal()\n .domain(domain)\n .range(range)\n .unknown(unknown);\n };\n\n return scale;\n}\n","import {range as sequence} from \"d3-array\";\nimport ordinal from \"./ordinal\";\n\nexport default function band() {\n var scale = ordinal().unknown(undefined),\n domain = scale.domain,\n ordinalRange = scale.range,\n range = [0, 1],\n step,\n bandwidth,\n round = false,\n paddingInner = 0,\n paddingOuter = 0,\n align = 0.5;\n\n delete scale.unknown;\n function rescale() {\n var n = domain().length,\n reverse = range[1] < range[0],\n start = range[reverse - 0],\n stop = range[1 - reverse];\n step = (stop - start) / Math.max(1, n - paddingInner + paddingOuter * 2);\n if (round) step = Math.floor(step);\n start += (stop - start - step * (n - paddingInner)) * align;\n bandwidth = step * (1 - paddingInner);\n if (round) start = Math.round(start), bandwidth = Math.round(bandwidth);\n var values = sequence(n).map(function(i) { return start + step * i; });\n return ordinalRange(reverse ? values.reverse() : values);\n }\n\n scale.domain = function(_) {\n return arguments.length ? (domain(_), rescale()) : domain();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = [+_[0], +_[1]], rescale()) : range.slice();\n };\n\n scale.rangeRound = function(_) {\n return range = [+_[0], +_[1]], round = true, rescale();\n };\n\n scale.bandwidth = function() {\n return bandwidth;\n };\n\n scale.step = function() {\n return step;\n };\n\n scale.round = function(_) {\n return arguments.length ? (round = !!_, rescale()) : round;\n };\n\n scale.padding = function(_) {\n return arguments.length ? (paddingInner = paddingOuter = Math.max(0, Math.min(1, _)), rescale()) : paddingInner;\n };\n\n scale.paddingInner = function(_) {\n return arguments.length ? (paddingInner = Math.max(0, Math.min(1, _)), rescale()) : paddingInner;\n };\n\n scale.paddingOuter = function(_) {\n return arguments.length ? (paddingOuter = Math.max(0, Math.min(1, _)), rescale()) : paddingOuter;\n };\n\n scale.align = function(_) {\n return arguments.length ? (align = Math.max(0, Math.min(1, _)), rescale()) : align;\n };\n\n scale.copy = function() {\n return band()\n .domain(domain())\n .range(range)\n .round(round)\n .paddingInner(paddingInner)\n .paddingOuter(paddingOuter)\n .align(align);\n };\n\n scale.invertExtent = function(r0, r1) {\n var lo = +r0,\n hi = arguments.length > 1 ? +r1 : lo,\n reverse = range[1] < range[0],\n values = reverse ? ordinalRange().reverse() : ordinalRange(),\n n = values.length - 1, a, b, t,\n hiIndex;\n values.push(values[n] + this.step());\n // order range inputs, bail if outside of scale range\n if (hi < lo) t = lo, lo = hi, hi = t;\n if (hi < values[0] || lo > range[1-reverse]) return undefined;\n\n // binary search to index into scale range\n a = Math.max(0, getClosestIndexOf(values, lo));\n hiIndex = getClosestIndexOf(values, hi);\n b = lo===hi ? a : Math.max(a, hiIndex - 1);\n\n // increment index a if lo is within padding gap\n // if (lo - values[a] > bandwidth + 1e-10) ++a;\n\n if (reverse) t = a, a = n - b, b = n - t; // map + swap\n return (a > b) ? undefined : domain().slice(a, b+1);\n };\n\n scale.invert = function (r0, r1) {\n var lo = +r0,\n hi = arguments.length > 1 ? +r1 : lo,\n reverse = range[1] < range[0],\n values = reverse ? ordinalRange().reverse() : ordinalRange(),\n n = values.length - 1,\n a,\n t;\n\n // order range inputs, bail if outside of scale range\n if (hi < lo) t = lo, lo = hi, hi = t;\n if (hi < values[0] || lo > range[1-reverse]) return undefined;\n\n // binary search to index into scale range\n a = Math.max(0, getClosestIndexOf(values, lo, 'left'));\n\n // increment index a if lo is within padding gap\n // if (lo - values[a] > bandwidth + 1e-10) ++a;\n\n return domain()[reverse ? n - a : a];\n }\n return rescale();\n}\n\nfunction pointish(scale) {\n var copy = scale.copy;\n\n scale.padding = scale.paddingOuter;\n delete scale.paddingInner;\n delete scale.paddingOuter;\n\n scale.copy = function() {\n return pointish(copy());\n };\n\n return scale;\n}\n\nexport function point() {\n return pointish(band().paddingInner(1));\n}\n\nfunction getClosestIndexOf (arr, value, side) {\n var low = 0,\n arrLen = arr.length,\n high = arrLen - 1,\n highVal,\n mid,\n d1,\n d2;\n\n while (low < high) {\n mid = Math.floor((low + high) / 2);\n d1 = Math.abs(arr[mid] - value);\n d2 = Math.abs(arr[mid + 1] - value);\n\n if (d2 <= d1) {\n low = mid + 1;\n }\n else {\n high = mid;\n }\n }\n\n if (!side) {\n return high;\n }\n\n highVal = arr[high];\n if (highVal === value) {\n return high;\n } else if (highVal > value) {\n if (high === 0) { return high; }\n return side === 'left'? high - 1 : high;\n } else {\n if (high === arr.length - 1) { return high; }\n return side === 'left'? high : high + 1;\n }\n}","export default function(constructor, factory, prototype) {\n constructor.prototype = factory.prototype = prototype;\n prototype.constructor = constructor;\n}\n\nexport function extend(parent, definition) {\n var prototype = Object.create(parent.prototype);\n for (var key in definition) prototype[key] = definition[key];\n return prototype;\n}\n","import define, {extend} from \"./define\";\n\nexport function Color() {}\n\nexport var darker = 0.7;\nexport var brighter = 1 / darker;\n\nvar reI = \"\\\\s*([+-]?\\\\d+)\\\\s*\",\n reN = \"\\\\s*([+-]?\\\\d*\\\\.?\\\\d+(?:[eE][+-]?\\\\d+)?)\\\\s*\",\n reP = \"\\\\s*([+-]?\\\\d*\\\\.?\\\\d+(?:[eE][+-]?\\\\d+)?)%\\\\s*\",\n reHex3 = /^#([0-9a-f]{3})$/,\n reHex6 = /^#([0-9a-f]{6})$/,\n reRgbInteger = new RegExp(\"^rgb\\\\(\" + [reI, reI, reI] + \"\\\\)$\"),\n reRgbPercent = new RegExp(\"^rgb\\\\(\" + [reP, reP, reP] + \"\\\\)$\"),\n reRgbaInteger = new RegExp(\"^rgba\\\\(\" + [reI, reI, reI, reN] + \"\\\\)$\"),\n reRgbaPercent = new RegExp(\"^rgba\\\\(\" + [reP, reP, reP, reN] + \"\\\\)$\"),\n reHslPercent = new RegExp(\"^hsl\\\\(\" + [reN, reP, reP] + \"\\\\)$\"),\n reHslaPercent = new RegExp(\"^hsla\\\\(\" + [reN, reP, reP, reN] + \"\\\\)$\");\n\nvar 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\ndefine(Color, color, {\n displayable: function() {\n return this.rgb().displayable();\n },\n hex: function() {\n return this.rgb().hex();\n },\n toString: function() {\n return this.rgb() + \"\";\n }\n});\n\nexport default function color(format) {\n var m;\n format = (format + \"\").trim().toLowerCase();\n return (m = reHex3.exec(format)) ? (m = parseInt(m[1], 16), new Rgb((m >> 8 & 0xf) | (m >> 4 & 0x0f0), (m >> 4 & 0xf) | (m & 0xf0), ((m & 0xf) << 4) | (m & 0xf), 1)) // #f00\n : (m = reHex6.exec(format)) ? rgbn(parseInt(m[1], 16)) // #ff0000\n : (m = reRgbInteger.exec(format)) ? new Rgb(m[1], m[2], m[3], 1) // rgb(255, 0, 0)\n : (m = reRgbPercent.exec(format)) ? new Rgb(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, 1) // rgb(100%, 0%, 0%)\n : (m = reRgbaInteger.exec(format)) ? rgba(m[1], m[2], m[3], m[4]) // rgba(255, 0, 0, 1)\n : (m = reRgbaPercent.exec(format)) ? rgba(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, m[4]) // rgb(100%, 0%, 0%, 1)\n : (m = reHslPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, 1) // hsl(120, 50%, 50%)\n : (m = reHslaPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, m[4]) // hsla(120, 50%, 50%, 1)\n : named.hasOwnProperty(format) ? rgbn(named[format])\n : format === \"transparent\" ? new Rgb(NaN, NaN, NaN, 0)\n : null;\n}\n\nfunction rgbn(n) {\n return new Rgb(n >> 16 & 0xff, n >> 8 & 0xff, n & 0xff, 1);\n}\n\nfunction rgba(r, g, b, a) {\n if (a <= 0) r = g = b = NaN;\n return new Rgb(r, g, b, a);\n}\n\nexport function rgbConvert(o) {\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Rgb;\n o = o.rgb();\n return new Rgb(o.r, o.g, o.b, o.opacity);\n}\n\nexport function rgb(r, g, b, opacity) {\n return arguments.length === 1 ? rgbConvert(r) : new Rgb(r, g, b, opacity == null ? 1 : opacity);\n}\n\nexport function Rgb(r, g, b, opacity) {\n this.r = +r;\n this.g = +g;\n this.b = +b;\n this.opacity = +opacity;\n}\n\ndefine(Rgb, rgb, extend(Color, {\n 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, this.opacity);\n },\n 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, this.opacity);\n },\n rgb: function() {\n return this;\n },\n 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 && (0 <= this.opacity && this.opacity <= 1);\n },\n hex: function() {\n return \"#\" + hex(this.r) + hex(this.g) + hex(this.b);\n },\n toString: function() {\n var a = this.opacity; a = isNaN(a) ? 1 : Math.max(0, Math.min(1, a));\n return (a === 1 ? \"rgb(\" : \"rgba(\")\n + Math.max(0, Math.min(255, Math.round(this.r) || 0)) + \", \"\n + Math.max(0, Math.min(255, Math.round(this.g) || 0)) + \", \"\n + Math.max(0, Math.min(255, Math.round(this.b) || 0))\n + (a === 1 ? \")\" : \", \" + a + \")\");\n }\n}));\n\nfunction hex(value) {\n value = Math.max(0, Math.min(255, Math.round(value) || 0));\n return (value < 16 ? \"0\" : \"\") + value.toString(16);\n}\n\nfunction hsla(h, s, l, a) {\n if (a <= 0) h = s = l = NaN;\n else if (l <= 0 || l >= 1) h = s = NaN;\n else if (s <= 0) h = NaN;\n return new Hsl(h, s, l, a);\n}\n\nexport function hslConvert(o) {\n if (o instanceof Hsl) return new Hsl(o.h, o.s, o.l, o.opacity);\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Hsl;\n if (o instanceof Hsl) return o;\n o = o.rgb();\n var r = o.r / 255,\n g = o.g / 255,\n b = o.b / 255,\n min = Math.min(r, g, b),\n max = Math.max(r, g, b),\n h = NaN,\n s = max - min,\n l = (max + min) / 2;\n if (s) {\n if (r === max) h = (g - b) / s + (g < b) * 6;\n else if (g === max) h = (b - r) / s + 2;\n else h = (r - g) / s + 4;\n s /= l < 0.5 ? max + min : 2 - max - min;\n h *= 60;\n } else {\n s = l > 0 && l < 1 ? 0 : h;\n }\n return new Hsl(h, s, l, o.opacity);\n}\n\nexport function hsl(h, s, l, opacity) {\n return arguments.length === 1 ? hslConvert(h) : new Hsl(h, s, l, opacity == null ? 1 : opacity);\n}\n\nfunction Hsl(h, s, l, opacity) {\n this.h = +h;\n this.s = +s;\n this.l = +l;\n this.opacity = +opacity;\n}\n\ndefine(Hsl, hsl, extend(Color, {\n brighter: function(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n darker: function(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n 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 < 0.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 this.opacity\n );\n },\n displayable: function() {\n return (0 <= this.s && this.s <= 1 || isNaN(this.s))\n && (0 <= this.l && this.l <= 1)\n && (0 <= this.opacity && this.opacity <= 1);\n }\n}));\n\n/* From FvD 13.37, CSS Color Module Level 3 */\nfunction 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","export var deg2rad = Math.PI / 180;\nexport var rad2deg = 180 / Math.PI;\n","import define, {extend} from \"./define\";\nimport {Color, rgbConvert, Rgb} from \"./color\";\nimport {deg2rad, rad2deg} from \"./math\";\n\n// https://beta.observablehq.com/@mbostock/lab-and-rgb\nvar K = 18,\n Xn = 0.96422,\n Yn = 1,\n Zn = 0.82521,\n t0 = 4 / 29,\n t1 = 6 / 29,\n t2 = 3 * t1 * t1,\n t3 = t1 * t1 * t1;\n\nfunction labConvert(o) {\n if (o instanceof Lab) return new Lab(o.l, o.a, o.b, o.opacity);\n if (o instanceof Hcl) {\n if (isNaN(o.h)) return new Lab(o.l, 0, 0, o.opacity);\n var h = o.h * deg2rad;\n return new Lab(o.l, Math.cos(h) * o.c, Math.sin(h) * o.c, o.opacity);\n }\n if (!(o instanceof Rgb)) o = rgbConvert(o);\n var r = rgb2lrgb(o.r),\n g = rgb2lrgb(o.g),\n b = rgb2lrgb(o.b),\n y = xyz2lab((0.2225045 * r + 0.7168786 * g + 0.0606169 * b) / Yn), x, z;\n if (r === g && g === b) x = z = y; else {\n x = xyz2lab((0.4360747 * r + 0.3850649 * g + 0.1430804 * b) / Xn);\n z = xyz2lab((0.0139322 * r + 0.0971045 * g + 0.7141733 * b) / Zn);\n }\n return new Lab(116 * y - 16, 500 * (x - y), 200 * (y - z), o.opacity);\n}\n\nexport function gray(l, opacity) {\n return new Lab(l, 0, 0, opacity == null ? 1 : opacity);\n}\n\nexport default function lab(l, a, b, opacity) {\n return arguments.length === 1 ? labConvert(l) : new Lab(l, a, b, opacity == null ? 1 : opacity);\n}\n\nexport function Lab(l, a, b, opacity) {\n this.l = +l;\n this.a = +a;\n this.b = +b;\n this.opacity = +opacity;\n}\n\ndefine(Lab, lab, extend(Color, {\n brighter: function(k) {\n return new Lab(this.l + K * (k == null ? 1 : k), this.a, this.b, this.opacity);\n },\n darker: function(k) {\n return new Lab(this.l - K * (k == null ? 1 : k), this.a, this.b, this.opacity);\n },\n 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 x = Xn * lab2xyz(x);\n y = Yn * lab2xyz(y);\n z = Zn * lab2xyz(z);\n return new Rgb(\n lrgb2rgb( 3.1338561 * x - 1.6168667 * y - 0.4906146 * z),\n lrgb2rgb(-0.9787684 * x + 1.9161415 * y + 0.0334540 * z),\n lrgb2rgb( 0.0719453 * x - 0.2289914 * y + 1.4052427 * z),\n this.opacity\n );\n }\n}));\n\nfunction xyz2lab(t) {\n return t > t3 ? Math.pow(t, 1 / 3) : t / t2 + t0;\n}\n\nfunction lab2xyz(t) {\n return t > t1 ? t * t * t : t2 * (t - t0);\n}\n\nfunction lrgb2rgb(x) {\n return 255 * (x <= 0.0031308 ? 12.92 * x : 1.055 * Math.pow(x, 1 / 2.4) - 0.055);\n}\n\nfunction rgb2lrgb(x) {\n return (x /= 255) <= 0.04045 ? x / 12.92 : Math.pow((x + 0.055) / 1.055, 2.4);\n}\n\nfunction hclConvert(o) {\n if (o instanceof Hcl) return new Hcl(o.h, o.c, o.l, o.opacity);\n if (!(o instanceof Lab)) o = labConvert(o);\n if (o.a === 0 && o.b === 0) return new Hcl(NaN, 0, o.l, o.opacity);\n var h = Math.atan2(o.b, o.a) * rad2deg;\n return new Hcl(h < 0 ? h + 360 : h, Math.sqrt(o.a * o.a + o.b * o.b), o.l, o.opacity);\n}\n\nexport function lch(l, c, h, opacity) {\n return arguments.length === 1 ? hclConvert(l) : new Hcl(h, c, l, opacity == null ? 1 : opacity);\n}\n\nexport function hcl(h, c, l, opacity) {\n return arguments.length === 1 ? hclConvert(h) : new Hcl(h, c, l, opacity == null ? 1 : opacity);\n}\n\nexport function Hcl(h, c, l, opacity) {\n this.h = +h;\n this.c = +c;\n this.l = +l;\n this.opacity = +opacity;\n}\n\ndefine(Hcl, hcl, extend(Color, {\n brighter: function(k) {\n return new Hcl(this.h, this.c, this.l + K * (k == null ? 1 : k), this.opacity);\n },\n darker: function(k) {\n return new Hcl(this.h, this.c, this.l - K * (k == null ? 1 : k), this.opacity);\n },\n rgb: function() {\n return labConvert(this).rgb();\n }\n}));\n","import define, {extend} from \"./define\";\nimport {Color, rgbConvert, Rgb, darker, brighter} from \"./color\";\nimport {deg2rad, rad2deg} from \"./math\";\n\nvar A = -0.14861,\n B = +1.78277,\n C = -0.29227,\n D = -0.90649,\n E = +1.97294,\n ED = E * D,\n EB = E * B,\n BC_DA = B * C - D * A;\n\nfunction cubehelixConvert(o) {\n if (o instanceof Cubehelix) return new Cubehelix(o.h, o.s, o.l, o.opacity);\n if (!(o instanceof Rgb)) o = rgbConvert(o);\n var r = o.r / 255,\n g = o.g / 255,\n b = o.b / 255,\n l = (BC_DA * b + ED * r - EB * g) / (BC_DA + ED - EB),\n bl = b - l,\n 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 return new Cubehelix(h < 0 ? h + 360 : h, s, l, o.opacity);\n}\n\nexport default function cubehelix(h, s, l, opacity) {\n return arguments.length === 1 ? cubehelixConvert(h) : new Cubehelix(h, s, l, opacity == null ? 1 : opacity);\n}\n\nexport function Cubehelix(h, s, l, opacity) {\n this.h = +h;\n this.s = +s;\n this.l = +l;\n this.opacity = +opacity;\n}\n\ndefine(Cubehelix, cubehelix, extend(Color, {\n brighter: function(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Cubehelix(this.h, this.s, this.l * k, this.opacity);\n },\n darker: function(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Cubehelix(this.h, this.s, this.l * k, this.opacity);\n },\n 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 this.opacity\n );\n }\n}));\n","export function basis(t1, v0, v1, v2, v3) {\n var t2 = t1 * t1, t3 = t2 * t1;\n return ((1 - 3 * t1 + 3 * t2 - t3) * v0\n + (4 - 6 * t2 + 3 * t3) * v1\n + (1 + 3 * t1 + 3 * t2 - 3 * t3) * v2\n + t3 * v3) / 6;\n}\n\nexport default function(values) {\n var n = values.length - 1;\n return function(t) {\n var i = t <= 0 ? (t = 0) : t >= 1 ? (t = 1, n - 1) : Math.floor(t * n),\n v1 = values[i],\n v2 = values[i + 1],\n v0 = i > 0 ? values[i - 1] : 2 * v1 - v2,\n v3 = i < n - 1 ? values[i + 2] : 2 * v2 - v1;\n return basis((t - i / n) * n, v0, v1, v2, v3);\n };\n}\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","import constant from \"./constant\";\n\nfunction linear(a, d) {\n return function(t) {\n return a + t * d;\n };\n}\n\nfunction exponential(a, b, y) {\n return a = Math.pow(a, y), b = Math.pow(b, y) - a, y = 1 / y, function(t) {\n return Math.pow(a + t * b, y);\n };\n}\n\nexport function hue(a, b) {\n var d = b - a;\n return d ? linear(a, d > 180 || d < -180 ? d - 360 * Math.round(d / 360) : d) : constant(isNaN(a) ? b : a);\n}\n\nexport function gamma(y) {\n return (y = +y) === 1 ? nogamma : function(a, b) {\n return b - a ? exponential(a, b, y) : constant(isNaN(a) ? b : a);\n };\n}\n\nexport default function nogamma(a, b) {\n var d = b - a;\n return d ? linear(a, d) : constant(isNaN(a) ? b : a);\n}\n","import {rgb as colorRgb} from \"d3-color\";\nimport basis from \"./basis\";\nimport basisClosed from \"./basisClosed\";\nimport nogamma, {gamma} from \"./color\";\n\nexport default (function rgbGamma(y) {\n var color = gamma(y);\n\n function rgb(start, end) {\n var r = color((start = colorRgb(start)).r, (end = colorRgb(end)).r),\n g = color(start.g, end.g),\n b = color(start.b, end.b),\n opacity = nogamma(start.opacity, end.opacity);\n return function(t) {\n start.r = r(t);\n start.g = g(t);\n start.b = b(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n\n rgb.gamma = rgbGamma;\n\n return rgb;\n})(1);\n\nfunction rgbSpline(spline) {\n return function(colors) {\n var n = colors.length,\n r = new Array(n),\n g = new Array(n),\n b = new Array(n),\n i, color;\n for (i = 0; i < n; ++i) {\n color = colorRgb(colors[i]);\n r[i] = color.r || 0;\n g[i] = color.g || 0;\n b[i] = color.b || 0;\n }\n r = spline(r);\n g = spline(g);\n b = spline(b);\n color.opacity = 1;\n return function(t) {\n color.r = r(t);\n color.g = g(t);\n color.b = b(t);\n return color + \"\";\n };\n };\n}\n\nexport var rgbBasis = rgbSpline(basis);\nexport var rgbBasisClosed = rgbSpline(basisClosed);\n","export default function(a, b) {\n return a = +a, b -= a, function(t) {\n return a + b * t;\n };\n}\n","import {basis} from \"./basis\";\n\nexport default function(values) {\n var n = values.length;\n return function(t) {\n var i = Math.floor(((t %= 1) < 0 ? ++t : t) * n),\n v0 = values[(i + n - 1) % n],\n v1 = values[i % n],\n v2 = values[(i + 1) % n],\n v3 = values[(i + 2) % n];\n return basis((t - i / n) * n, v0, v1, v2, v3);\n };\n}\n","import number from \"./number\";\n\nvar reA = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n reB = new RegExp(reA.source, \"g\");\n\nfunction zero(b) {\n return function() {\n return b;\n };\n}\n\nfunction one(b) {\n return function(t) {\n return b(t) + \"\";\n };\n}\n\nexport default function(a, b) {\n var bi = reA.lastIndex = reB.lastIndex = 0, // scan index for next number in b\n am, // current match in a\n bm, // current match in b\n bs, // string preceding current number in b, if any\n i = -1, // index in s\n s = [], // string constants and placeholders\n q = []; // number interpolators\n\n // Coerce inputs to strings.\n a = a + \"\", b = b + \"\";\n\n // Interpolate pairs of numbers in a & b.\n while ((am = reA.exec(a))\n && (bm = reB.exec(b))) {\n if ((bs = bm.index) > bi) { // a string precedes the next number in b\n bs = b.slice(bi, bs);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n if ((am = am[0]) === (bm = bm[0])) { // numbers in a & b match\n if (s[i]) s[i] += bm; // coalesce with previous string\n else s[++i] = bm;\n } else { // interpolate non-matching numbers\n s[++i] = null;\n q.push({i: i, x: number(am, bm)});\n }\n bi = reB.lastIndex;\n }\n\n // Add remains of b.\n if (bi < b.length) {\n bs = b.slice(bi);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n\n // Special optimization for only a single match.\n // Otherwise, interpolate each of the numbers and rejoin the string.\n return s.length < 2 ? (q[0]\n ? one(q[0].x)\n : zero(b))\n : (b = q.length, function(t) {\n for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t);\n return s.join(\"\");\n });\n}\n","import decompose, {identity} from \"./decompose\";\n\nvar cssNode,\n cssRoot,\n cssView,\n svgNode;\n\nexport function parseCss(value) {\n if (value === \"none\") return identity;\n if (!cssNode) cssNode = document.createElement(\"DIV\"), cssRoot = document.documentElement, cssView = document.defaultView;\n cssNode.style.transform = value;\n value = cssView.getComputedStyle(cssRoot.appendChild(cssNode), null).getPropertyValue(\"transform\");\n cssRoot.removeChild(cssNode);\n value = value.slice(7, -1).split(\",\");\n return decompose(+value[0], +value[1], +value[2], +value[3], +value[4], +value[5]);\n}\n\nexport function parseSvg(value) {\n if (value == null) return identity;\n if (!svgNode) svgNode = document.createElementNS(\"http://www.w3.org/2000/svg\", \"g\");\n svgNode.setAttribute(\"transform\", value);\n if (!(value = svgNode.transform.baseVal.consolidate())) return identity;\n value = value.matrix;\n return decompose(value.a, value.b, value.c, value.d, value.e, value.f);\n}\n","import {color} from \"d3-color\";\nimport rgb from \"./rgb\";\nimport array from \"./array\";\nimport date from \"./date\";\nimport number from \"./number\";\nimport object from \"./object\";\nimport string from \"./string\";\nimport constant from \"./constant\";\n\nexport default function(a, b) {\n var t = typeof b, c;\n return b == null || t === \"boolean\" ? constant(b)\n : (t === \"number\" ? number\n : t === \"string\" ? ((c = color(b)) ? (b = c, rgb) : string)\n : b instanceof color ? rgb\n : b instanceof Date ? date\n : Array.isArray(b) ? array\n : typeof b.valueOf !== \"function\" && typeof b.toString !== \"function\" || isNaN(b) ? object\n : number)(a, b);\n}\n","export default function(a, b) {\n var d = new Date;\n return a = +a, b -= a, function(t) {\n return d.setTime(a + b * t), d;\n };\n}\n","import value from \"./value\";\n\nexport default function(a, b) {\n var nb = b ? b.length : 0,\n na = a ? Math.min(nb, a.length) : 0,\n x = new Array(na),\n c = new Array(nb),\n i;\n\n for (i = 0; i < na; ++i) x[i] = value(a[i], b[i]);\n for (; i < nb; ++i) c[i] = b[i];\n\n return function(t) {\n for (i = 0; i < na; ++i) c[i] = x[i](t);\n return c;\n };\n}\n","import value from \"./value\";\n\nexport default function(a, b) {\n var i = {},\n c = {},\n k;\n\n if (a === null || typeof a !== \"object\") a = {};\n if (b === null || typeof b !== \"object\") b = {};\n\n for (k in b) {\n if (k in a) {\n i[k] = value(a[k], b[k]);\n } else {\n c[k] = b[k];\n }\n }\n\n return function(t) {\n for (k in i) c[k] = i[k](t);\n return c;\n };\n}\n","export default function(a, b) {\n return a = +a, b -= a, function(t) {\n return Math.round(a + b * t);\n };\n}\n","var degrees = 180 / Math.PI;\n\nexport var identity = {\n translateX: 0,\n translateY: 0,\n rotate: 0,\n skewX: 0,\n scaleX: 1,\n scaleY: 1\n};\n\nexport default function(a, b, c, d, e, f) {\n var scaleX, scaleY, skewX;\n if (scaleX = Math.sqrt(a * a + b * b)) a /= scaleX, b /= scaleX;\n if (skewX = a * c + b * d) c -= a * skewX, d -= b * skewX;\n if (scaleY = Math.sqrt(c * c + d * d)) c /= scaleY, d /= scaleY, skewX /= scaleY;\n if (a * d < b * c) a = -a, b = -b, skewX = -skewX, scaleX = -scaleX;\n return {\n translateX: e,\n translateY: f,\n rotate: Math.atan2(b, a) * degrees,\n skewX: Math.atan(skewX) * degrees,\n scaleX: scaleX,\n scaleY: scaleY\n };\n}\n","import number from \"../number\";\nimport {parseCss, parseSvg} from \"./parse\";\n\nfunction interpolateTransform(parse, pxComma, pxParen, degParen) {\n\n function pop(s) {\n return s.length ? s.pop() + \" \" : \"\";\n }\n\n function translate(xa, ya, xb, yb, s, q) {\n if (xa !== xb || ya !== yb) {\n var i = s.push(\"translate(\", null, pxComma, null, pxParen);\n q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\n } else if (xb || yb) {\n s.push(\"translate(\" + xb + pxComma + yb + pxParen);\n }\n }\n\n function rotate(a, b, s, q) {\n if (a !== b) {\n if (a - b > 180) b += 360; else if (b - a > 180) a += 360; // shortest path\n q.push({i: s.push(pop(s) + \"rotate(\", null, degParen) - 2, x: number(a, b)});\n } else if (b) {\n s.push(pop(s) + \"rotate(\" + b + degParen);\n }\n }\n\n function skewX(a, b, s, q) {\n if (a !== b) {\n q.push({i: s.push(pop(s) + \"skewX(\", null, degParen) - 2, x: number(a, b)});\n } else if (b) {\n s.push(pop(s) + \"skewX(\" + b + degParen);\n }\n }\n\n function scale(xa, ya, xb, yb, s, q) {\n if (xa !== xb || ya !== yb) {\n var i = s.push(pop(s) + \"scale(\", null, \",\", null, \")\");\n q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\n } else if (xb !== 1 || yb !== 1) {\n s.push(pop(s) + \"scale(\" + xb + \",\" + yb + \")\");\n }\n }\n\n return function(a, b) {\n var s = [], // string constants and placeholders\n q = []; // number interpolators\n a = parse(a), b = parse(b);\n translate(a.translateX, a.translateY, b.translateX, b.translateY, s, q);\n rotate(a.rotate, b.rotate, s, q);\n skewX(a.skewX, b.skewX, s, q);\n scale(a.scaleX, a.scaleY, b.scaleX, b.scaleY, s, q);\n a = b = null; // gc\n return function(t) {\n var i = -1, n = q.length, o;\n while (++i < n) s[(o = q[i]).i] = o.x(t);\n return s.join(\"\");\n };\n };\n}\n\nexport var interpolateTransformCss = interpolateTransform(parseCss, \"px, \", \"px)\", \"deg)\");\nexport var interpolateTransformSvg = interpolateTransform(parseSvg, \", \", \")\", \")\");\n","var rho = Math.SQRT2,\n rho2 = 2,\n rho4 = 4,\n epsilon2 = 1e-12;\n\nfunction cosh(x) {\n return ((x = Math.exp(x)) + 1 / x) / 2;\n}\n\nfunction sinh(x) {\n return ((x = Math.exp(x)) - 1 / x) / 2;\n}\n\nfunction tanh(x) {\n return ((x = Math.exp(2 * x)) - 1) / (x + 1);\n}\n\n// p0 = [ux0, uy0, w0]\n// p1 = [ux1, uy1, w1]\nexport default function(p0, p1) {\n var ux0 = p0[0], uy0 = p0[1], w0 = p0[2],\n ux1 = p1[0], uy1 = p1[1], w1 = p1[2],\n dx = ux1 - ux0,\n dy = uy1 - uy0,\n d2 = dx * dx + dy * dy,\n i,\n S;\n\n // Special case for u0 ≅ u1.\n if (d2 < epsilon2) {\n S = Math.log(w1 / w0) / rho;\n i = function(t) {\n return [\n ux0 + t * dx,\n uy0 + t * dy,\n w0 * Math.exp(rho * t * S)\n ];\n }\n }\n\n // General case.\n else {\n var d1 = Math.sqrt(d2),\n b0 = (w1 * w1 - w0 * w0 + rho4 * d2) / (2 * w0 * rho2 * d1),\n b1 = (w1 * w1 - w0 * w0 - rho4 * d2) / (2 * w1 * rho2 * d1),\n r0 = Math.log(Math.sqrt(b0 * b0 + 1) - b0),\n r1 = Math.log(Math.sqrt(b1 * b1 + 1) - b1);\n S = (r1 - r0) / rho;\n i = function(t) {\n var s = t * S,\n coshr0 = cosh(r0),\n u = w0 / (rho2 * d1) * (coshr0 * tanh(rho * s + r0) - sinh(r0));\n return [\n ux0 + u * dx,\n uy0 + u * dy,\n w0 * coshr0 / cosh(rho * s + r0)\n ];\n }\n }\n\n i.duration = S * 1000;\n\n return i;\n}\n","import {hsl as colorHsl} from \"d3-color\";\nimport color, {hue} from \"./color\";\n\nfunction hsl(hue) {\n return function(start, end) {\n var h = hue((start = colorHsl(start)).h, (end = colorHsl(end)).h),\n s = color(start.s, end.s),\n l = color(start.l, end.l),\n opacity = color(start.opacity, end.opacity);\n return function(t) {\n start.h = h(t);\n start.s = s(t);\n start.l = l(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n}\n\nexport default hsl(hue);\nexport var hslLong = hsl(color);\n","import {hcl as colorHcl} from \"d3-color\";\nimport color, {hue} from \"./color\";\n\nfunction hcl(hue) {\n return function(start, end) {\n var h = hue((start = colorHcl(start)).h, (end = colorHcl(end)).h),\n c = color(start.c, end.c),\n l = color(start.l, end.l),\n opacity = color(start.opacity, end.opacity);\n return function(t) {\n start.h = h(t);\n start.c = c(t);\n start.l = l(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n}\n\nexport default hcl(hue);\nexport var hclLong = hcl(color);\n","import {cubehelix as colorCubehelix} from \"d3-color\";\nimport color, {hue} from \"./color\";\n\nfunction cubehelix(hue) {\n return (function cubehelixGamma(y) {\n y = +y;\n\n function cubehelix(start, end) {\n var h = hue((start = colorCubehelix(start)).h, (end = colorCubehelix(end)).h),\n s = color(start.s, end.s),\n l = color(start.l, end.l),\n opacity = color(start.opacity, end.opacity);\n return function(t) {\n start.h = h(t);\n start.s = s(t);\n start.l = l(Math.pow(t, y));\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n\n cubehelix.gamma = cubehelixGamma;\n\n return cubehelix;\n })(1);\n}\n\nexport default cubehelix(hue);\nexport var cubehelixLong = cubehelix(color);\n","export default function piecewise(interpolate, values) {\n var i = 0, n = values.length - 1, v = values[0], I = new Array(n < 0 ? 0 : n);\n while (i < n) I[i] = interpolate(v, v = values[++i]);\n return function(t) {\n var i = Math.max(0, Math.min(n - 1, Math.floor(t *= n)));\n return I[i](t - i);\n };\n}\n","export default function(interpolator, n) {\n var samples = new Array(n);\n for (var i = 0; i < n; ++i) samples[i] = interpolator(i / (n - 1));\n return samples;\n}\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","export default function(x) {\n return +x;\n}\n","import {bisect} from \"d3-array\";\nimport {interpolate as interpolateValue, interpolateRound} from \"d3-interpolate\";\nimport {map, slice} from \"./array\";\nimport constant from \"./constant\";\nimport number from \"./number\";\n\nvar unit = [0, 1];\n\nexport function deinterpolateLinear(a, b) {\n return (b -= (a = +a))\n ? function(x) { return (x - a) / b; }\n : constant(b);\n}\n\nfunction deinterpolateClamp(deinterpolate) {\n return function(a, b) {\n var d = deinterpolate(a = +a, b = +b);\n return function(x) { return x <= a ? 0 : x >= b ? 1 : d(x); };\n };\n}\n\nfunction reinterpolateClamp(reinterpolate) {\n return function(a, b) {\n var r = reinterpolate(a = +a, b = +b);\n return function(t) { return t <= 0 ? a : t >= 1 ? b : r(t); };\n };\n}\n\nfunction bimap(domain, range, deinterpolate, reinterpolate) {\n var d0 = domain[0], d1 = domain[1], r0 = range[0], r1 = range[1];\n if (d1 < d0) d0 = deinterpolate(d1, d0), r0 = reinterpolate(r1, r0);\n else d0 = deinterpolate(d0, d1), r0 = reinterpolate(r0, r1);\n return function(x) { return r0(d0(x)); };\n}\n\nfunction polymap(domain, range, deinterpolate, reinterpolate) {\n var j = Math.min(domain.length, range.length) - 1,\n d = new Array(j),\n r = new Array(j),\n i = -1;\n\n // Reverse descending domains.\n if (domain[j] < domain[0]) {\n domain = domain.slice().reverse();\n range = range.slice().reverse();\n }\n\n while (++i < j) {\n d[i] = deinterpolate(domain[i], domain[i + 1]);\n r[i] = reinterpolate(range[i], range[i + 1]);\n }\n\n return function(x) {\n var i = bisect(domain, x, 1, j) - 1;\n return r[i](d[i](x));\n };\n}\n\nexport function copy(source, target) {\n return target\n .domain(source.domain())\n .range(source.range())\n .interpolate(source.interpolate())\n .clamp(source.clamp());\n}\n\n// deinterpolate(a, b)(x) takes a domain value x in [a,b] and returns the corresponding parameter t in [0,1].\n// reinterpolate(a, b)(t) takes a parameter t in [0,1] and returns the corresponding domain value x in [a,b].\nexport default function continuous(deinterpolate, reinterpolate) {\n var domain = unit,\n range = unit,\n interpolate = interpolateValue,\n clamp = false,\n piecewise,\n output,\n input;\n\n function rescale() {\n piecewise = Math.min(domain.length, range.length) > 2 ? polymap : bimap;\n output = input = null;\n return scale;\n }\n\n function scale(x) {\n return (output || (output = piecewise(domain, range, clamp ? deinterpolateClamp(deinterpolate) : deinterpolate, interpolate)))(+x);\n }\n\n scale.invert = function(y) {\n return (input || (input = piecewise(range, domain, deinterpolateLinear, clamp ? reinterpolateClamp(reinterpolate) : reinterpolate)))(+y);\n };\n\n scale.domain = function(_) {\n return arguments.length ? (domain = map.call(_, number), rescale()) : domain.slice();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = slice.call(_), rescale()) : range.slice();\n };\n\n scale.rangeRound = function(_) {\n return range = slice.call(_), interpolate = interpolateRound, rescale();\n };\n\n scale.clamp = function(_) {\n return arguments.length ? (clamp = !!_, rescale()) : clamp;\n };\n\n scale.interpolate = function(_) {\n return arguments.length ? (interpolate = _, rescale()) : interpolate;\n };\n\n return rescale();\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].\nexport default function(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","import formatDecimal from \"./formatDecimal\";\n\nexport default function(x) {\n return x = formatDecimal(Math.abs(x)), x ? x[1] : NaN;\n}\n","// [[fill]align][sign][symbol][0][width][,][.precision][~][type]\nvar re = /^(?:(.)?([<>=^]))?([+\\-( ])?([$#])?(0)?(\\d+)?(,)?(\\.\\d+)?(~)?([a-z%])?$/i;\n\nexport default function formatSpecifier(specifier) {\n return new FormatSpecifier(specifier);\n}\n\nformatSpecifier.prototype = FormatSpecifier.prototype; // instanceof\n\nfunction FormatSpecifier(specifier) {\n if (!(match = re.exec(specifier))) throw new Error(\"invalid format: \" + specifier);\n var match;\n this.fill = match[1] || \" \";\n this.align = match[2] || \">\";\n this.sign = match[3] || \"-\";\n this.symbol = match[4] || \"\";\n this.zero = !!match[5];\n this.width = match[6] && +match[6];\n this.comma = !!match[7];\n this.precision = match[8] && +match[8].slice(1);\n this.trim = !!match[9];\n this.type = match[10] || \"\";\n}\n\nFormatSpecifier.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.trim ? \"~\" : \"\")\n + this.type;\n};\n","// Trims insignificant zeros, e.g., replaces 1.2000k with 1.2k.\nexport default function(s) {\n out: for (var n = s.length, i = 1, i0 = -1, i1; i < n; ++i) {\n switch (s[i]) {\n case \".\": i0 = i1 = i; break;\n case \"0\": if (i0 === 0) i0 = i; i1 = i; break;\n default: if (i0 > 0) { if (!+s[i]) break out; i0 = 0; } break;\n }\n }\n return i0 > 0 ? s.slice(0, i0) + s.slice(i1 + 1) : s;\n}\n","import formatDecimal from \"./formatDecimal\";\n\nexport var prefixExponent;\n\nexport default function(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, Math.max(0, p + i - 1))[0]; // less than 1y!\n}\n","import formatLocale from \"./locale\";\n\nvar locale;\nexport var format;\nexport var formatPrefix;\n\ndefaultLocale({\n decimal: \".\",\n thousands: \",\",\n grouping: [3],\n currency: [\"$\", \"\"]\n});\n\nexport default function defaultLocale(definition) {\n locale = formatLocale(definition);\n format = locale.format;\n formatPrefix = locale.formatPrefix;\n return locale;\n}\n","import formatDecimal from \"./formatDecimal\";\n\nexport default function(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","import formatPrefixAuto from \"./formatPrefixAuto\";\nimport formatRounded from \"./formatRounded\";\n\nexport default {\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","export default function(x) {\n return x;\n}\n","import exponent from \"./exponent\";\nimport formatGroup from \"./formatGroup\";\nimport formatNumerals from \"./formatNumerals\";\nimport formatSpecifier from \"./formatSpecifier\";\nimport formatTrim from \"./formatTrim\";\nimport formatTypes from \"./formatTypes\";\nimport {prefixExponent} from \"./formatPrefixAuto\";\nimport identity from \"./identity\";\n\nvar prefixes = [\"y\",\"z\",\"a\",\"f\",\"p\",\"n\",\"µ\",\"m\",\"\",\"k\",\"M\",\"G\",\"T\",\"P\",\"E\",\"Z\",\"Y\"];\n\nexport default function(locale) {\n var group = locale.grouping && locale.thousands ? formatGroup(locale.grouping, locale.thousands) : identity,\n currency = locale.currency,\n decimal = locale.decimal,\n numerals = locale.numerals ? formatNumerals(locale.numerals) : identity,\n percent = locale.percent || \"%\";\n\n function newFormat(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 trim = specifier.trim,\n type = specifier.type;\n\n // The \"n\" type is an alias for \",g\".\n if (type === \"n\") comma = true, type = \"g\";\n\n // The \"\" type, and any invalid type, is an alias for \".12~g\".\n else if (!formatTypes[type]) precision == null && (precision = 12), trim = true, type = \"g\";\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 // 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) ? percent : \"\";\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 = /[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 ? 6\n : /[gprs]/.test(type) ? Math.max(1, Math.min(21, precision))\n : Math.max(0, Math.min(20, precision));\n\n function format(value) {\n var valuePrefix = prefix,\n valueSuffix = suffix,\n i, n, c;\n\n if (type === \"c\") {\n valueSuffix = formatType(value) + valueSuffix;\n value = \"\";\n } else {\n value = +value;\n\n // Perform the initial formatting.\n var valueNegative = value < 0;\n value = formatType(Math.abs(value), precision);\n\n // Trim insignificant zeros.\n if (trim) value = formatTrim(value);\n\n // If a negative value rounds to zero during formatting, treat as positive.\n if (valueNegative && +value === 0) valueNegative = false;\n\n // Compute the prefix and suffix.\n valuePrefix = (valueNegative ? (sign === \"(\" ? sign : \"-\") : sign === \"-\" || sign === \"(\" ? \"\" : sign) + valuePrefix;\n valueSuffix = (type === \"s\" ? prefixes[8 + prefixExponent / 3] : \"\") + valueSuffix + (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 i = -1, n = value.length;\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 \"<\": value = valuePrefix + value + valueSuffix + padding; break;\n case \"=\": value = valuePrefix + padding + value + valueSuffix; break;\n case \"^\": value = padding.slice(0, length = padding.length >> 1) + valuePrefix + value + valueSuffix + padding.slice(length); break;\n default: value = padding + valuePrefix + value + valueSuffix; break;\n }\n\n return numerals(value);\n }\n\n format.toString = function() {\n return specifier + \"\";\n };\n\n return format;\n }\n\n function formatPrefix(specifier, value) {\n var f = newFormat((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: newFormat,\n formatPrefix: formatPrefix\n };\n}\n","export default function(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","export default function(numerals) {\n return function(value) {\n return value.replace(/[0-9]/g, function(i) {\n return numerals[+i];\n });\n };\n}\n","import exponent from \"./exponent\";\n\nexport default function(step) {\n return Math.max(0, -exponent(Math.abs(step)));\n}\n","import {tickStep} from \"d3-array\";\nimport {format, formatPrefix, formatSpecifier, precisionFixed, precisionPrefix, precisionRound} from \"d3-format\";\n\nexport default function(domain, count, specifier) {\n var start = domain[0],\n stop = domain[domain.length - 1],\n step = tickStep(start, stop, count == null ? 10 : count),\n precision;\n specifier = formatSpecifier(specifier == null ? \",f\" : specifier);\n switch (specifier.type) {\n case \"s\": {\n var value = Math.max(Math.abs(start), Math.abs(stop));\n if (specifier.precision == null && !isNaN(precision = precisionPrefix(step, value))) specifier.precision = precision;\n return formatPrefix(specifier, value);\n }\n case \"\":\n case \"e\":\n case \"g\":\n case \"p\":\n case \"r\": {\n if (specifier.precision == null && !isNaN(precision = precisionRound(step, Math.max(Math.abs(start), Math.abs(stop))))) specifier.precision = precision - (specifier.type === \"e\");\n break;\n }\n case \"f\":\n case \"%\": {\n if (specifier.precision == null && !isNaN(precision = precisionFixed(step))) specifier.precision = precision - (specifier.type === \"%\") * 2;\n break;\n }\n }\n return format(specifier);\n}\n","import exponent from \"./exponent\";\n\nexport default function(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","import exponent from \"./exponent\";\n\nexport default function(step, max) {\n step = Math.abs(step), max = Math.abs(max) - step;\n return Math.max(0, exponent(max) - exponent(step)) + 1;\n}\n","import {ticks, tickIncrement} from \"d3-array\";\nimport {interpolateNumber as reinterpolate} from \"d3-interpolate\";\nimport {default as continuous, copy, deinterpolateLinear as deinterpolate} from \"./continuous\";\nimport tickFormat from \"./tickFormat\";\n\nexport function linearish(scale) {\n var domain = scale.domain;\n\n scale.ticks = function(count) {\n var d = domain();\n return ticks(d[0], d[d.length - 1], count == null ? 10 : count);\n };\n\n scale.tickFormat = function(count, specifier) {\n return tickFormat(domain(), count, specifier);\n };\n\n scale.nice = function(count) {\n if (count == null) count = 10;\n\n var d = domain(),\n i0 = 0,\n i1 = d.length - 1,\n start = d[i0],\n stop = d[i1],\n step;\n\n if (stop < start) {\n step = start, start = stop, stop = step;\n step = i0, i0 = i1, i1 = step;\n }\n\n step = tickIncrement(start, stop, count);\n\n if (step > 0) {\n start = Math.floor(start / step) * step;\n stop = Math.ceil(stop / step) * step;\n step = tickIncrement(start, stop, count);\n } else if (step < 0) {\n start = Math.ceil(start * step) / step;\n stop = Math.floor(stop * step) / step;\n step = tickIncrement(start, stop, count);\n }\n\n if (step > 0) {\n d[i0] = Math.floor(start / step) * step;\n d[i1] = Math.ceil(stop / step) * step;\n domain(d);\n } else if (step < 0) {\n d[i0] = Math.ceil(start * step) / step;\n d[i1] = Math.floor(stop * step) / step;\n domain(d);\n }\n\n return scale;\n };\n\n return scale;\n}\n\nexport default function linear() {\n var scale = continuous(deinterpolate, reinterpolate);\n\n scale.copy = function() {\n return copy(scale, linear());\n };\n\n return linearish(scale);\n}\n","import {map} from \"./array\";\nimport {linearish} from \"./linear\";\nimport number from \"./number\";\n\nexport default function identity() {\n var domain = [0, 1];\n\n function scale(x) {\n return +x;\n }\n\n scale.invert = scale;\n\n scale.domain = scale.range = function(_) {\n return arguments.length ? (domain = map.call(_, number), scale) : domain.slice();\n };\n\n scale.copy = function() {\n return identity().domain(domain);\n };\n\n return linearish(scale);\n}\n","export default function(domain, interval) {\n domain = domain.slice();\n\n var i0 = 0,\n i1 = domain.length - 1,\n x0 = domain[i0],\n x1 = domain[i1],\n t;\n\n if (x1 < x0) {\n t = i0, i0 = i1, i1 = t;\n t = x0, x0 = x1, x1 = t;\n }\n\n domain[i0] = interval.floor(x0);\n domain[i1] = interval.ceil(x1);\n return domain;\n}\n","import {ticks} from \"d3-array\";\nimport {format} from \"d3-format\";\nimport constant from \"./constant\";\nimport nice from \"./nice\";\nimport {default as continuous, copy} from \"./continuous\";\n\nfunction deinterpolate(a, b) {\n return (b = Math.log(b / a))\n ? function(x) { return Math.log(x / a) / b; }\n : constant(b);\n}\n\nfunction reinterpolate(a, b) {\n return a < 0\n ? function(t) { return -Math.pow(-b, t) * Math.pow(-a, 1 - t); }\n : function(t) { return Math.pow(b, t) * Math.pow(a, 1 - t); };\n}\n\nfunction pow10(x) {\n return isFinite(x) ? +(\"1e\" + x) : x < 0 ? 0 : x;\n}\n\nfunction powp(base) {\n return base === 10 ? pow10\n : base === Math.E ? Math.exp\n : function(x) { return Math.pow(base, x); };\n}\n\nfunction logp(base) {\n return base === Math.E ? Math.log\n : base === 10 && Math.log10\n || base === 2 && Math.log2\n || (base = Math.log(base), function(x) { return Math.log(x) / base; });\n}\n\nfunction reflect(f) {\n return function(x) {\n return -f(-x);\n };\n}\n\nexport default function log() {\n var scale = continuous(deinterpolate, reinterpolate).domain([1, 10]),\n domain = scale.domain,\n base = 10,\n logs = logp(10),\n pows = powp(10);\n\n function rescale() {\n logs = logp(base), pows = powp(base);\n if (domain()[0] < 0) logs = reflect(logs), pows = reflect(pows);\n return scale;\n }\n\n scale.base = function(_) {\n return arguments.length ? (base = +_, rescale()) : base;\n };\n\n scale.domain = function(_) {\n return arguments.length ? (domain(_), rescale()) : domain();\n };\n\n scale.ticks = function(count) {\n var d = domain(),\n u = d[0],\n v = d[d.length - 1],\n r;\n\n if (r = v < u) i = u, u = v, v = i;\n\n var i = logs(u),\n j = logs(v),\n p,\n k,\n t,\n n = count == null ? 10 : +count,\n z = [];\n\n if (!(base % 1) && j - i < n) {\n i = Math.round(i) - 1, j = Math.round(j) + 1;\n if (u > 0) for (; i < j; ++i) {\n for (k = 1, p = pows(i); k < base; ++k) {\n t = p * k;\n if (t < u) continue;\n if (t > v) break;\n z.push(t);\n }\n } else for (; i < j; ++i) {\n for (k = base - 1, p = pows(i); k >= 1; --k) {\n t = p * k;\n if (t < u) continue;\n if (t > v) break;\n z.push(t);\n }\n }\n } else {\n z = ticks(i, j, Math.min(j - i, n)).map(pows);\n }\n\n return r ? z.reverse() : z;\n };\n\n scale.tickFormat = function(count, specifier) {\n if (specifier == null) specifier = base === 10 ? \".0e\" : \",\";\n if (typeof specifier !== \"function\") specifier = format(specifier);\n if (count === Infinity) return specifier;\n if (count == null) count = 10;\n var k = Math.max(1, base * count / scale.ticks().length); // TODO fast estimate?\n return function(d) {\n var i = d / pows(Math.round(logs(d)));\n if (i * base < base - 0.5) i *= base;\n return i <= k ? specifier(d) : \"\";\n };\n };\n\n scale.nice = function() {\n return domain(nice(domain(), {\n floor: function(x) { return pows(Math.floor(logs(x))); },\n ceil: function(x) { return pows(Math.ceil(logs(x))); }\n }));\n };\n\n scale.copy = function() {\n return copy(scale, log().base(base));\n };\n\n return scale;\n}\n","import constant from \"./constant\";\nimport {linearish} from \"./linear\";\nimport {default as continuous, copy} from \"./continuous\";\n\nfunction raise(x, exponent) {\n return x < 0 ? -Math.pow(-x, exponent) : Math.pow(x, exponent);\n}\n\nexport default function pow() {\n var exponent = 1,\n scale = continuous(deinterpolate, reinterpolate),\n domain = scale.domain;\n\n function deinterpolate(a, b) {\n return (b = raise(b, exponent) - (a = raise(a, exponent)))\n ? function(x) { return (raise(x, exponent) - a) / b; }\n : constant(b);\n }\n\n function reinterpolate(a, b) {\n b = raise(b, exponent) - (a = raise(a, exponent));\n return function(t) { return raise(a + b * t, 1 / exponent); };\n }\n\n scale.exponent = function(_) {\n return arguments.length ? (exponent = +_, domain(domain())) : exponent;\n };\n\n scale.copy = function() {\n return copy(scale, pow().exponent(exponent));\n };\n\n return linearish(scale);\n}\n\nexport function sqrt() {\n return pow().exponent(0.5);\n}\n","import {ascending, bisect, quantile as threshold} from \"d3-array\";\nimport {slice} from \"./array\";\n\nexport default function quantile() {\n var domain = [],\n range = [],\n thresholds = [];\n\n function rescale() {\n var i = 0, n = Math.max(1, range.length);\n thresholds = new Array(n - 1);\n while (++i < n) thresholds[i - 1] = threshold(domain, i / n);\n return scale;\n }\n\n function scale(x) {\n if (!isNaN(x = +x)) return range[bisect(thresholds, x)];\n }\n\n scale.invertExtent = function(y) {\n var i = range.indexOf(y);\n return i < 0 ? [NaN, NaN] : [\n i > 0 ? thresholds[i - 1] : domain[0],\n i < thresholds.length ? thresholds[i] : domain[domain.length - 1]\n ];\n };\n\n scale.domain = function(_) {\n if (!arguments.length) return domain.slice();\n domain = [];\n for (var i = 0, n = _.length, d; i < n; ++i) if (d = _[i], d != null && !isNaN(d = +d)) domain.push(d);\n domain.sort(ascending);\n return rescale();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = slice.call(_), rescale()) : range.slice();\n };\n\n scale.quantiles = function() {\n return thresholds.slice();\n };\n\n scale.copy = function() {\n return quantile()\n .domain(domain)\n .range(range);\n };\n\n return scale;\n}\n","import {bisect} from \"d3-array\";\nimport {slice} from \"./array\";\nimport {linearish} from \"./linear\";\n\nexport default function quantize() {\n var x0 = 0,\n x1 = 1,\n n = 1,\n domain = [0.5],\n range = [0, 1];\n\n function scale(x) {\n if (x <= x) return range[bisect(domain, x, 0, n)];\n }\n\n function rescale() {\n var i = -1;\n domain = new Array(n);\n while (++i < n) domain[i] = ((i + 1) * x1 - (i - n) * x0) / (n + 1);\n return scale;\n }\n\n scale.domain = function(_) {\n return arguments.length ? (x0 = +_[0], x1 = +_[1], rescale()) : [x0, x1];\n };\n\n scale.range = function(_) {\n return arguments.length ? (n = (range = slice.call(_)).length - 1, rescale()) : range.slice();\n };\n\n scale.invertExtent = function(y) {\n var i = range.indexOf(y);\n return i < 0 ? [NaN, NaN]\n : i < 1 ? [x0, domain[0]]\n : i >= n ? [domain[n - 1], x1]\n : [domain[i - 1], domain[i]];\n };\n\n scale.copy = function() {\n return quantize()\n .domain([x0, x1])\n .range(range);\n };\n\n return linearish(scale);\n}\n","import {bisect} from \"d3-array\";\nimport {slice} from \"./array\";\n\nexport default function threshold() {\n var domain = [0.5],\n range = [0, 1],\n n = 1;\n\n function scale(x) {\n if (x <= x) return range[bisect(domain, x, 0, n)];\n }\n\n scale.domain = function(_) {\n return arguments.length ? (domain = slice.call(_), n = Math.min(domain.length, range.length - 1), scale) : domain.slice();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = slice.call(_), n = Math.min(domain.length, range.length - 1), scale) : range.slice();\n };\n\n scale.invertExtent = function(y) {\n var i = range.indexOf(y);\n return [domain[i - 1], domain[i]];\n };\n\n scale.copy = function() {\n return threshold()\n .domain(domain)\n .range(range);\n };\n\n return scale;\n}\n","var t0 = new Date,\n t1 = new Date;\n\nexport default function newInterval(floori, offseti, count, field) {\n\n function interval(date) {\n return floori(date = new Date(+date)), date;\n }\n\n interval.floor = interval;\n\n interval.ceil = function(date) {\n return floori(date = new Date(date - 1)), offseti(date, 1), floori(date), date;\n };\n\n interval.round = function(date) {\n var d0 = interval(date),\n d1 = interval.ceil(date);\n return date - d0 < d1 - date ? d0 : d1;\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 = [], previous;\n start = interval.ceil(start);\n step = step == null ? 1 : Math.floor(step);\n if (!(start < stop) || !(step > 0)) return range; // also handles Invalid Date\n do range.push(previous = new Date(+start)), offseti(start, step), floori(start);\n while (previous < start && start < stop);\n return range;\n };\n\n interval.filter = function(test) {\n return newInterval(function(date) {\n if (date >= date) while (floori(date), !test(date)) date.setTime(date - 1);\n }, function(date, step) {\n if (date >= date) {\n if (step < 0) while (++step <= 0) {\n while (offseti(date, -1), !test(date)) {} // eslint-disable-line no-empty\n } else while (--step >= 0) {\n while (offseti(date, +1), !test(date)) {} // eslint-disable-line no-empty\n }\n }\n });\n };\n\n if (count) {\n 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 interval.every = function(step) {\n step = Math.floor(step);\n return !isFinite(step) || !(step > 0) ? null\n : !(step > 1) ? interval\n : interval.filter(field\n ? function(d) { return field(d) % step === 0; }\n : function(d) { return interval.count(0, d) % step === 0; });\n };\n }\n\n return interval;\n}\n","import interval from \"./interval\";\n\nvar millisecond = interval(function() {\n // noop\n}, function(date, step) {\n date.setTime(+date + step);\n}, function(start, end) {\n return end - start;\n});\n\n// An optimized implementation for this simple case.\nmillisecond.every = function(k) {\n k = Math.floor(k);\n if (!isFinite(k) || !(k > 0)) return null;\n if (!(k > 1)) return millisecond;\n return interval(function(date) {\n date.setTime(Math.floor(date / k) * k);\n }, function(date, step) {\n date.setTime(+date + step * k);\n }, function(start, end) {\n return (end - start) / k;\n });\n};\n\nexport default millisecond;\nexport var milliseconds = millisecond.range;\n","export var durationSecond = 1e3;\nexport var durationMinute = 6e4;\nexport var durationHour = 36e5;\nexport var durationDay = 864e5;\nexport var durationWeek = 6048e5;\n","import interval from \"./interval\";\nimport {durationSecond} from \"./duration\";\n\nvar second = interval(function(date) {\n date.setTime(Math.floor(date / durationSecond) * durationSecond);\n}, function(date, step) {\n date.setTime(+date + step * durationSecond);\n}, function(start, end) {\n return (end - start) / durationSecond;\n}, function(date) {\n return date.getUTCSeconds();\n});\n\nexport default second;\nexport var seconds = second.range;\n","import interval from \"./interval\";\nimport {durationMinute} from \"./duration\";\n\nvar minute = interval(function(date) {\n date.setTime(Math.floor(date / durationMinute) * durationMinute);\n}, function(date, step) {\n date.setTime(+date + step * durationMinute);\n}, function(start, end) {\n return (end - start) / durationMinute;\n}, function(date) {\n return date.getMinutes();\n});\n\nexport default minute;\nexport var minutes = minute.range;\n","import interval from \"./interval\";\nimport {durationHour, durationMinute} from \"./duration\";\n\nvar hour = interval(function(date) {\n var offset = date.getTimezoneOffset() * durationMinute % durationHour;\n if (offset < 0) offset += durationHour;\n date.setTime(Math.floor((+date - offset) / durationHour) * durationHour + offset);\n}, function(date, step) {\n date.setTime(+date + step * durationHour);\n}, function(start, end) {\n return (end - start) / durationHour;\n}, function(date) {\n return date.getHours();\n});\n\nexport default hour;\nexport var hours = hour.range;\n","import interval from \"./interval\";\nimport {durationDay, durationMinute} from \"./duration\";\n\nvar day = interval(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()) * durationMinute) / durationDay;\n}, function(date) {\n return date.getDate() - 1;\n});\n\nexport default day;\nexport var days = day.range;\n","import interval from \"./interval\";\nimport {durationMinute, durationWeek} from \"./duration\";\n\nfunction weekday(i) {\n return interval(function(date) {\n date.setDate(date.getDate() - (date.getDay() + 7 - i) % 7);\n date.setHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setDate(date.getDate() + step * 7);\n }, function(start, end) {\n return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationWeek;\n });\n}\n\nexport var sunday = weekday(0);\nexport var monday = weekday(1);\nexport var tuesday = weekday(2);\nexport var wednesday = weekday(3);\nexport var thursday = weekday(4);\nexport var friday = weekday(5);\nexport var saturday = weekday(6);\n\nexport var sundays = sunday.range;\nexport var mondays = monday.range;\nexport var tuesdays = tuesday.range;\nexport var wednesdays = wednesday.range;\nexport var thursdays = thursday.range;\nexport var fridays = friday.range;\nexport var saturdays = saturday.range;\n","import interval from \"./interval\";\n\nvar month = interval(function(date) {\n date.setDate(1);\n date.setHours(0, 0, 0, 0);\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}, function(date) {\n return date.getMonth();\n});\n\nexport default month;\nexport var months = month.range;\n","import interval from \"./interval\";\n\nvar year = interval(function(date) {\n date.setMonth(0, 1);\n date.setHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setFullYear(date.getFullYear() + step);\n}, function(start, end) {\n return end.getFullYear() - start.getFullYear();\n}, function(date) {\n return date.getFullYear();\n});\n\n// An optimized implementation for this simple case.\nyear.every = function(k) {\n return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : interval(function(date) {\n date.setFullYear(Math.floor(date.getFullYear() / k) * k);\n date.setMonth(0, 1);\n date.setHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setFullYear(date.getFullYear() + step * k);\n });\n};\n\nexport default year;\nexport var years = year.range;\n","import interval from \"./interval\";\nimport {durationMinute} from \"./duration\";\n\nvar utcMinute = interval(function(date) {\n date.setUTCSeconds(0, 0);\n}, function(date, step) {\n date.setTime(+date + step * durationMinute);\n}, function(start, end) {\n return (end - start) / durationMinute;\n}, function(date) {\n return date.getUTCMinutes();\n});\n\nexport default utcMinute;\nexport var utcMinutes = utcMinute.range;\n","import interval from \"./interval\";\nimport {durationHour} from \"./duration\";\n\nvar utcHour = interval(function(date) {\n date.setUTCMinutes(0, 0, 0);\n}, function(date, step) {\n date.setTime(+date + step * durationHour);\n}, function(start, end) {\n return (end - start) / durationHour;\n}, function(date) {\n return date.getUTCHours();\n});\n\nexport default utcHour;\nexport var utcHours = utcHour.range;\n","import interval from \"./interval\";\nimport {durationDay} from \"./duration\";\n\nvar utcDay = interval(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) / durationDay;\n}, function(date) {\n return date.getUTCDate() - 1;\n});\n\nexport default utcDay;\nexport var utcDays = utcDay.range;\n","import interval from \"./interval\";\nimport {durationWeek} from \"./duration\";\n\nfunction utcWeekday(i) {\n return interval(function(date) {\n date.setUTCDate(date.getUTCDate() - (date.getUTCDay() + 7 - i) % 7);\n date.setUTCHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setUTCDate(date.getUTCDate() + step * 7);\n }, function(start, end) {\n return (end - start) / durationWeek;\n });\n}\n\nexport var utcSunday = utcWeekday(0);\nexport var utcMonday = utcWeekday(1);\nexport var utcTuesday = utcWeekday(2);\nexport var utcWednesday = utcWeekday(3);\nexport var utcThursday = utcWeekday(4);\nexport var utcFriday = utcWeekday(5);\nexport var utcSaturday = utcWeekday(6);\n\nexport var utcSundays = utcSunday.range;\nexport var utcMondays = utcMonday.range;\nexport var utcTuesdays = utcTuesday.range;\nexport var utcWednesdays = utcWednesday.range;\nexport var utcThursdays = utcThursday.range;\nexport var utcFridays = utcFriday.range;\nexport var utcSaturdays = utcSaturday.range;\n","import interval from \"./interval\";\n\nvar utcMonth = interval(function(date) {\n date.setUTCDate(1);\n date.setUTCHours(0, 0, 0, 0);\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}, function(date) {\n return date.getUTCMonth();\n});\n\nexport default utcMonth;\nexport var utcMonths = utcMonth.range;\n","import interval from \"./interval\";\n\nvar utcYear = interval(function(date) {\n date.setUTCMonth(0, 1);\n date.setUTCHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setUTCFullYear(date.getUTCFullYear() + step);\n}, function(start, end) {\n return end.getUTCFullYear() - start.getUTCFullYear();\n}, function(date) {\n return date.getUTCFullYear();\n});\n\n// An optimized implementation for this simple case.\nutcYear.every = function(k) {\n return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : interval(function(date) {\n date.setUTCFullYear(Math.floor(date.getUTCFullYear() / k) * k);\n date.setUTCMonth(0, 1);\n date.setUTCHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setUTCFullYear(date.getUTCFullYear() + step * k);\n });\n};\n\nexport default utcYear;\nexport var utcYears = utcYear.range;\n","import {\n timeDay,\n timeSunday,\n timeMonday,\n timeThursday,\n timeYear,\n utcDay,\n utcSunday,\n utcMonday,\n utcThursday,\n utcYear\n} from \"d3-time\";\n\nfunction 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\nfunction 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\nfunction newYear(y) {\n return {y: y, m: 0, d: 1, H: 0, M: 0, S: 0, L: 0};\n}\n\nexport default function formatLocale(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 periodRe = formatRe(locale_periods),\n 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 \"f\": formatMicroseconds,\n \"H\": formatHour24,\n \"I\": formatHour12,\n \"j\": formatDayOfYear,\n \"L\": formatMilliseconds,\n \"m\": formatMonthNumber,\n \"M\": formatMinutes,\n \"p\": formatPeriod,\n \"Q\": formatUnixTimestamp,\n \"s\": formatUnixTimestampSeconds,\n \"S\": formatSeconds,\n \"u\": formatWeekdayNumberMonday,\n \"U\": formatWeekNumberSunday,\n \"V\": formatWeekNumberISO,\n \"w\": formatWeekdayNumberSunday,\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 \"f\": formatUTCMicroseconds,\n \"H\": formatUTCHour24,\n \"I\": formatUTCHour12,\n \"j\": formatUTCDayOfYear,\n \"L\": formatUTCMilliseconds,\n \"m\": formatUTCMonthNumber,\n \"M\": formatUTCMinutes,\n \"p\": formatUTCPeriod,\n \"Q\": formatUnixTimestamp,\n \"s\": formatUnixTimestampSeconds,\n \"S\": formatUTCSeconds,\n \"u\": formatUTCWeekdayNumberMonday,\n \"U\": formatUTCWeekNumberSunday,\n \"V\": formatUTCWeekNumberISO,\n \"w\": formatUTCWeekdayNumberSunday,\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 \"f\": parseMicroseconds,\n \"H\": parseHour24,\n \"I\": parseHour24,\n \"j\": parseDayOfYear,\n \"L\": parseMilliseconds,\n \"m\": parseMonthNumber,\n \"M\": parseMinutes,\n \"p\": parsePeriod,\n \"Q\": parseUnixTimestamp,\n \"s\": parseUnixTimestampSeconds,\n \"S\": parseSeconds,\n \"u\": parseWeekdayNumberMonday,\n \"U\": parseWeekNumberSunday,\n \"V\": parseWeekNumberISO,\n \"w\": parseWeekdayNumberSunday,\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 if (!(date instanceof Date)) date = new Date(+date);\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 else pad = c === \"e\" ? \" \" : \"0\";\n if (format = formats[c]) c = format(date, 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 week, day;\n if (i != string.length) return null;\n\n // If a UNIX timestamp is specified, return it.\n if (\"Q\" in d) return new Date(d.Q);\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 // Convert day-of-week and week-of-year to day-of-year.\n if (\"V\" in d) {\n if (d.V < 1 || d.V > 53) return null;\n if (!(\"w\" in d)) d.w = 1;\n if (\"Z\" in d) {\n week = utcDate(newYear(d.y)), day = week.getUTCDay();\n week = day > 4 || day === 0 ? utcMonday.ceil(week) : utcMonday(week);\n week = utcDay.offset(week, (d.V - 1) * 7);\n d.y = week.getUTCFullYear();\n d.m = week.getUTCMonth();\n d.d = week.getUTCDate() + (d.w + 6) % 7;\n } else {\n week = newDate(newYear(d.y)), day = week.getDay();\n week = day > 4 || day === 0 ? timeMonday.ceil(week) : timeMonday(week);\n week = timeDay.offset(week, (d.V - 1) * 7);\n d.y = week.getFullYear();\n d.m = week.getMonth();\n d.d = week.getDate() + (d.w + 6) % 7;\n }\n } else if (\"W\" in d || \"U\" in d) {\n if (!(\"w\" in d)) d.w = \"u\" in d ? d.u % 7 : \"W\" in d ? 1 : 0;\n day = \"Z\" in d ? utcDate(newYear(d.y)).getUTCDay() : newDate(newYear(d.y)).getDay();\n d.m = 0;\n d.d = \"W\" in d ? (d.w + 6) % 7 + d.W * 7 - (day + 5) % 7 : d.w + d.U * 7 - (day + 6) % 7;\n }\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 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 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 parsePeriod(d, string, i) {\n var n = periodRe.exec(string.slice(i));\n return n ? (d.p = periodLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n }\n\n function parseShortWeekday(d, string, i) {\n var n = shortWeekdayRe.exec(string.slice(i));\n return n ? (d.w = shortWeekdayLookup[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[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[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[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 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.toString = function() { return specifier; };\n return f;\n },\n parse: function(specifier) {\n var p = newParse(specifier += \"\", localDate);\n p.toString = function() { return specifier; };\n return p;\n },\n utcFormat: function(specifier) {\n var f = newFormat(specifier += \"\", utcFormats);\n f.toString = function() { return specifier; };\n return f;\n },\n utcParse: function(specifier) {\n var p = newParse(specifier, utcDate);\n p.toString = function() { return specifier; };\n return p;\n }\n };\n}\n\nvar pads = {\"-\": \"\", \"_\": \" \", \"0\": \"0\"},\n numberRe = /^\\s*\\d+/, // note: ignores next directive\n percentRe = /^%/,\n requoteRe = /[\\\\^$*+?|[\\]().{}]/g;\n\nfunction 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\nfunction requote(s) {\n return s.replace(requoteRe, \"\\\\$&\");\n}\n\nfunction formatRe(names) {\n return new RegExp(\"^(?:\" + names.map(requote).join(\"|\") + \")\", \"i\");\n}\n\nfunction formatLookup(names) {\n var map = {}, i = -1, n = names.length;\n while (++i < n) map[names[i].toLowerCase()] = i;\n return map;\n}\n\nfunction parseWeekdayNumberSunday(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\nfunction parseWeekdayNumberMonday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 1));\n return n ? (d.u = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberSunday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.U = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberISO(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.V = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberMonday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.W = +n[0], i + n[0].length) : -1;\n}\n\nfunction 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\nfunction 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\nfunction parseZone(d, string, i) {\n var n = /^(Z)|([+-]\\d\\d)(?::?(\\d\\d))?/.exec(string.slice(i, i + 6));\n return n ? (d.Z = n[1] ? 0 : -(n[2] + (n[3] || \"00\")), i + n[0].length) : -1;\n}\n\nfunction 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\nfunction 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\nfunction 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\nfunction 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\nfunction 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\nfunction 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\nfunction 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\nfunction parseMicroseconds(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 6));\n return n ? (d.L = Math.floor(n[0] / 1000), i + n[0].length) : -1;\n}\n\nfunction parseLiteralPercent(d, string, i) {\n var n = percentRe.exec(string.slice(i, i + 1));\n return n ? i + n[0].length : -1;\n}\n\nfunction parseUnixTimestamp(d, string, i) {\n var n = numberRe.exec(string.slice(i));\n return n ? (d.Q = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseUnixTimestampSeconds(d, string, i) {\n var n = numberRe.exec(string.slice(i));\n return n ? (d.Q = (+n[0]) * 1000, i + n[0].length) : -1;\n}\n\nfunction formatDayOfMonth(d, p) {\n return pad(d.getDate(), p, 2);\n}\n\nfunction formatHour24(d, p) {\n return pad(d.getHours(), p, 2);\n}\n\nfunction formatHour12(d, p) {\n return pad(d.getHours() % 12 || 12, p, 2);\n}\n\nfunction formatDayOfYear(d, p) {\n return pad(1 + timeDay.count(timeYear(d), d), p, 3);\n}\n\nfunction formatMilliseconds(d, p) {\n return pad(d.getMilliseconds(), p, 3);\n}\n\nfunction formatMicroseconds(d, p) {\n return formatMilliseconds(d, p) + \"000\";\n}\n\nfunction formatMonthNumber(d, p) {\n return pad(d.getMonth() + 1, p, 2);\n}\n\nfunction formatMinutes(d, p) {\n return pad(d.getMinutes(), p, 2);\n}\n\nfunction formatSeconds(d, p) {\n return pad(d.getSeconds(), p, 2);\n}\n\nfunction formatWeekdayNumberMonday(d) {\n var day = d.getDay();\n return day === 0 ? 7 : day;\n}\n\nfunction formatWeekNumberSunday(d, p) {\n return pad(timeSunday.count(timeYear(d), d), p, 2);\n}\n\nfunction formatWeekNumberISO(d, p) {\n var day = d.getDay();\n d = (day >= 4 || day === 0) ? timeThursday(d) : timeThursday.ceil(d);\n return pad(timeThursday.count(timeYear(d), d) + (timeYear(d).getDay() === 4), p, 2);\n}\n\nfunction formatWeekdayNumberSunday(d) {\n return d.getDay();\n}\n\nfunction formatWeekNumberMonday(d, p) {\n return pad(timeMonday.count(timeYear(d), d), p, 2);\n}\n\nfunction formatYear(d, p) {\n return pad(d.getFullYear() % 100, p, 2);\n}\n\nfunction formatFullYear(d, p) {\n return pad(d.getFullYear() % 10000, p, 4);\n}\n\nfunction 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\nfunction formatUTCDayOfMonth(d, p) {\n return pad(d.getUTCDate(), p, 2);\n}\n\nfunction formatUTCHour24(d, p) {\n return pad(d.getUTCHours(), p, 2);\n}\n\nfunction formatUTCHour12(d, p) {\n return pad(d.getUTCHours() % 12 || 12, p, 2);\n}\n\nfunction formatUTCDayOfYear(d, p) {\n return pad(1 + utcDay.count(utcYear(d), d), p, 3);\n}\n\nfunction formatUTCMilliseconds(d, p) {\n return pad(d.getUTCMilliseconds(), p, 3);\n}\n\nfunction formatUTCMicroseconds(d, p) {\n return formatUTCMilliseconds(d, p) + \"000\";\n}\n\nfunction formatUTCMonthNumber(d, p) {\n return pad(d.getUTCMonth() + 1, p, 2);\n}\n\nfunction formatUTCMinutes(d, p) {\n return pad(d.getUTCMinutes(), p, 2);\n}\n\nfunction formatUTCSeconds(d, p) {\n return pad(d.getUTCSeconds(), p, 2);\n}\n\nfunction formatUTCWeekdayNumberMonday(d) {\n var dow = d.getUTCDay();\n return dow === 0 ? 7 : dow;\n}\n\nfunction formatUTCWeekNumberSunday(d, p) {\n return pad(utcSunday.count(utcYear(d), d), p, 2);\n}\n\nfunction formatUTCWeekNumberISO(d, p) {\n var day = d.getUTCDay();\n d = (day >= 4 || day === 0) ? utcThursday(d) : utcThursday.ceil(d);\n return pad(utcThursday.count(utcYear(d), d) + (utcYear(d).getUTCDay() === 4), p, 2);\n}\n\nfunction formatUTCWeekdayNumberSunday(d) {\n return d.getUTCDay();\n}\n\nfunction formatUTCWeekNumberMonday(d, p) {\n return pad(utcMonday.count(utcYear(d), d), p, 2);\n}\n\nfunction formatUTCYear(d, p) {\n return pad(d.getUTCFullYear() % 100, p, 2);\n}\n\nfunction formatUTCFullYear(d, p) {\n return pad(d.getUTCFullYear() % 10000, p, 4);\n}\n\nfunction formatUTCZone() {\n return \"+0000\";\n}\n\nfunction formatLiteralPercent() {\n return \"%\";\n}\n\nfunction formatUnixTimestamp(d) {\n return +d;\n}\n\nfunction formatUnixTimestampSeconds(d) {\n return Math.floor(+d / 1000);\n}\n","import formatLocale from \"./locale\";\n\nvar locale;\nexport var timeFormat;\nexport var timeParse;\nexport var utcFormat;\nexport var utcParse;\n\ndefaultLocale({\n dateTime: \"%x, %X\",\n date: \"%-m/%-d/%Y\",\n time: \"%-I:%M:%S %p\",\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\nexport default function defaultLocale(definition) {\n locale = formatLocale(definition);\n timeFormat = locale.format;\n timeParse = locale.parse;\n utcFormat = locale.utcFormat;\n utcParse = locale.utcParse;\n return locale;\n}\n","import {utcFormat} from \"./defaultLocale\";\n\nexport var isoSpecifier = \"%Y-%m-%dT%H:%M:%S.%LZ\";\n\nfunction formatIsoNative(date) {\n return date.toISOString();\n}\n\nvar formatIso = Date.prototype.toISOString\n ? formatIsoNative\n : utcFormat(isoSpecifier);\n\nexport default formatIso;\n","import {isoSpecifier} from \"./isoFormat\";\nimport {utcParse} from \"./defaultLocale\";\n\nfunction parseIsoNative(string) {\n var date = new Date(string);\n return isNaN(date) ? null : date;\n}\n\nvar parseIso = +new Date(\"2000-01-01T00:00:00.000Z\")\n ? parseIsoNative\n : utcParse(isoSpecifier);\n\nexport default parseIso;\n","import {bisector, tickStep} from \"d3-array\";\nimport {interpolateNumber as reinterpolate} from \"d3-interpolate\";\nimport {timeYear, timeMonth, timeWeek, timeDay, timeHour, timeMinute, timeSecond, timeMillisecond} from \"d3-time\";\nimport {timeFormat} from \"d3-time-format\";\nimport {map} from \"./array\";\nimport {default as continuous, copy, deinterpolateLinear as deinterpolate} from \"./continuous\";\nimport nice from \"./nice\";\n\nvar durationSecond = 1000,\n durationMinute = durationSecond * 60,\n durationHour = durationMinute * 60,\n durationDay = durationHour * 24,\n durationWeek = durationDay * 7,\n durationMonth = durationDay * 30,\n durationYear = durationDay * 365;\n\nfunction date(t) {\n return new Date(t);\n}\n\nfunction number(t) {\n return t instanceof Date ? +t : +new Date(+t);\n}\n\nexport function calendar(year, month, week, day, hour, minute, second, millisecond, format) {\n var scale = continuous(deinterpolate, reinterpolate),\n invert = scale.invert,\n domain = scale.domain;\n\n var formatMillisecond = format(\".%L\"),\n formatSecond = format(\":%S\"),\n formatMinute = format(\"%I:%M\"),\n formatHour = format(\"%I %p\"),\n formatDay = format(\"%a %d\"),\n formatWeek = format(\"%b %d\"),\n formatMonth = format(\"%B\"),\n formatYear = format(\"%Y\");\n\n var tickIntervals = [\n [second, 1, durationSecond],\n [second, 5, 5 * durationSecond],\n [second, 15, 15 * durationSecond],\n [second, 30, 30 * durationSecond],\n [minute, 1, durationMinute],\n [minute, 5, 5 * durationMinute],\n [minute, 15, 15 * durationMinute],\n [minute, 30, 30 * durationMinute],\n [ hour, 1, durationHour ],\n [ hour, 3, 3 * durationHour ],\n [ hour, 6, 6 * durationHour ],\n [ hour, 12, 12 * durationHour ],\n [ day, 1, durationDay ],\n [ day, 2, 2 * durationDay ],\n [ week, 1, durationWeek ],\n [ month, 1, durationMonth ],\n [ month, 3, 3 * durationMonth ],\n [ year, 1, durationYear ]\n ];\n\n function tickFormat(date) {\n return (second(date) < date ? formatMillisecond\n : minute(date) < date ? formatSecond\n : hour(date) < date ? formatMinute\n : day(date) < date ? formatHour\n : month(date) < date ? (week(date) < date ? formatDay : formatWeek)\n : year(date) < date ? formatMonth\n : formatYear)(date);\n }\n\n function tickInterval(interval, start, stop, step) {\n if (interval == null) interval = 10;\n\n // If a desired tick count is specified, pick a reasonable tick interval\n // based on the extent of the domain and a rough estimate of tick size.\n // Otherwise, assume interval is already a time interval and use it.\n if (typeof interval === \"number\") {\n var target = Math.abs(stop - start) / interval,\n i = bisector(function(i) { return i[2]; }).right(tickIntervals, target);\n if (i === tickIntervals.length) {\n step = tickStep(start / durationYear, stop / durationYear, interval);\n interval = year;\n } else if (i) {\n i = tickIntervals[target / tickIntervals[i - 1][2] < tickIntervals[i][2] / target ? i - 1 : i];\n step = i[1];\n interval = i[0];\n } else {\n step = Math.max(tickStep(start, stop, interval), 1);\n interval = millisecond;\n }\n }\n\n return step == null ? interval : interval.every(step);\n }\n\n scale.invert = function(y) {\n return new Date(invert(y));\n };\n\n scale.domain = function(_) {\n return arguments.length ? domain(map.call(_, number)) : domain().map(date);\n };\n\n scale.ticks = function(interval, step) {\n var d = domain(),\n t0 = d[0],\n t1 = d[d.length - 1],\n r = t1 < t0,\n t;\n if (r) t = t0, t0 = t1, t1 = t;\n t = tickInterval(interval, t0, t1, step);\n t = t ? t.range(t0, t1 + 1) : []; // inclusive stop\n return r ? t.reverse() : t;\n };\n\n scale.tickFormat = function(count, specifier) {\n return specifier == null ? tickFormat : format(specifier);\n };\n\n scale.nice = function(interval, step) {\n var d = domain();\n return (interval = tickInterval(interval, d[0], d[d.length - 1], step))\n ? domain(nice(d, interval))\n : scale;\n };\n\n scale.copy = function() {\n return copy(scale, calendar(year, month, week, day, hour, minute, second, millisecond, format));\n };\n\n return scale;\n}\n\nexport default function() {\n return calendar(timeYear, timeMonth, timeWeek, timeDay, timeHour, timeMinute, timeSecond, timeMillisecond, timeFormat).domain([new Date(2000, 0, 1), new Date(2000, 0, 2)]);\n}\n","export default function(s) {\n return s.match(/.{6}/g).map(function(x) {\n return \"#\" + x;\n });\n}\n","import colors from \"./colors\";\n\nexport default colors(\"1f77b4ff7f0e2ca02cd627289467bd8c564be377c27f7f7fbcbd2217becf\");\n","import colors from \"./colors\";\n\nexport default colors(\"393b795254a36b6ecf9c9ede6379398ca252b5cf6bcedb9c8c6d31bd9e39e7ba52e7cb94843c39ad494ad6616be7969c7b4173a55194ce6dbdde9ed6\");\n","import colors from \"./colors\";\n\nexport default colors(\"1f77b4aec7e8ff7f0effbb782ca02c98df8ad62728ff98969467bdc5b0d58c564bc49c94e377c2f7b6d27f7f7fc7c7c7bcbd22dbdb8d17becf9edae5\");\n","import colors from \"./colors\";\n\nexport default colors(\"3182bd6baed69ecae1c6dbefe6550dfd8d3cfdae6bfdd0a231a35474c476a1d99bc7e9c0756bb19e9ac8bcbddcdadaeb636363969696bdbdbdd9d9d9\");\n","import {cubehelix} from \"d3-color\";\nimport {interpolateCubehelixLong} from \"d3-interpolate\";\n\nexport default interpolateCubehelixLong(cubehelix(300, 0.5, 0.0), cubehelix(-240, 0.5, 1.0));\n","import {cubehelix} from \"d3-color\";\nimport {interpolateCubehelixLong} from \"d3-interpolate\";\n\nexport var warm = interpolateCubehelixLong(cubehelix(-100, 0.75, 0.35), cubehelix(80, 1.50, 0.8));\n\nexport var cool = interpolateCubehelixLong(cubehelix(260, 0.75, 0.35), cubehelix(80, 1.50, 0.8));\n\nvar rainbow = cubehelix();\n\nexport default function(t) {\n if (t < 0 || t > 1) t -= Math.floor(t);\n var ts = Math.abs(t - 0.5);\n rainbow.h = 360 * t - 100;\n rainbow.s = 1.5 - 1.5 * ts;\n rainbow.l = 0.8 - 0.9 * ts;\n return rainbow + \"\";\n}\n","import colors from \"./colors\";\n\nfunction ramp(range) {\n var n = range.length;\n return function(t) {\n return range[Math.max(0, Math.min(n - 1, Math.floor(t * n)))];\n };\n}\n\nexport default ramp(colors(\"44015444025645045745055946075a46085c460a5d460b5e470d60470e6147106347116447136548146748166848176948186a481a6c481b6d481c6e481d6f481f70482071482173482374482475482576482677482878482979472a7a472c7a472d7b472e7c472f7d46307e46327e46337f463480453581453781453882443983443a83443b84433d84433e85423f854240864241864142874144874045884046883f47883f48893e49893e4a893e4c8a3d4d8a3d4e8a3c4f8a3c508b3b518b3b528b3a538b3a548c39558c39568c38588c38598c375a8c375b8d365c8d365d8d355e8d355f8d34608d34618d33628d33638d32648e32658e31668e31678e31688e30698e306a8e2f6b8e2f6c8e2e6d8e2e6e8e2e6f8e2d708e2d718e2c718e2c728e2c738e2b748e2b758e2a768e2a778e2a788e29798e297a8e297b8e287c8e287d8e277e8e277f8e27808e26818e26828e26828e25838e25848e25858e24868e24878e23888e23898e238a8d228b8d228c8d228d8d218e8d218f8d21908d21918c20928c20928c20938c1f948c1f958b1f968b1f978b1f988b1f998a1f9a8a1e9b8a1e9c891e9d891f9e891f9f881fa0881fa1881fa1871fa28720a38620a48621a58521a68522a78522a88423a98324aa8325ab8225ac8226ad8127ad8128ae8029af7f2ab07f2cb17e2db27d2eb37c2fb47c31b57b32b67a34b67935b77937b87838b9773aba763bbb753dbc743fbc7340bd7242be7144bf7046c06f48c16e4ac16d4cc26c4ec36b50c46a52c56954c56856c66758c7655ac8645cc8635ec96260ca6063cb5f65cb5e67cc5c69cd5b6ccd5a6ece5870cf5773d05675d05477d1537ad1517cd2507fd34e81d34d84d44b86d54989d5488bd6468ed64590d74393d74195d84098d83e9bd93c9dd93ba0da39a2da37a5db36a8db34aadc32addc30b0dd2fb2dd2db5de2bb8de29bade28bddf26c0df25c2df23c5e021c8e020cae11fcde11dd0e11cd2e21bd5e21ad8e219dae319dde318dfe318e2e418e5e419e7e419eae51aece51befe51cf1e51df4e61ef6e620f8e621fbe723fde725\"));\n\nexport var magma = ramp(colors(\"00000401000501010601010802010902020b02020d03030f03031204041405041606051806051a07061c08071e0907200a08220b09240c09260d0a290e0b2b100b2d110c2f120d31130d34140e36150e38160f3b180f3d19103f1a10421c10441d11471e114920114b21114e22115024125325125527125829115a2a115c2c115f2d11612f116331116533106734106936106b38106c390f6e3b0f703d0f713f0f72400f74420f75440f764510774710784910784a10794c117a4e117b4f127b51127c52137c54137d56147d57157e59157e5a167e5c167f5d177f5f187f601880621980641a80651a80671b80681c816a1c816b1d816d1d816e1e81701f81721f817320817521817621817822817922827b23827c23827e24828025828125818326818426818627818827818928818b29818c29818e2a81902a81912b81932b80942c80962c80982d80992d809b2e7f9c2e7f9e2f7fa02f7fa1307ea3307ea5317ea6317da8327daa337dab337cad347cae347bb0357bb2357bb3367ab5367ab73779b83779ba3878bc3978bd3977bf3a77c03a76c23b75c43c75c53c74c73d73c83e73ca3e72cc3f71cd4071cf4070d0416fd2426fd3436ed5446dd6456cd8456cd9466bdb476adc4869de4968df4a68e04c67e24d66e34e65e44f64e55064e75263e85362e95462ea5661eb5760ec5860ed5a5fee5b5eef5d5ef05f5ef1605df2625df2645cf3655cf4675cf4695cf56b5cf66c5cf66e5cf7705cf7725cf8745cf8765cf9785df9795df97b5dfa7d5efa7f5efa815ffb835ffb8560fb8761fc8961fc8a62fc8c63fc8e64fc9065fd9266fd9467fd9668fd9869fd9a6afd9b6bfe9d6cfe9f6dfea16efea36ffea571fea772fea973feaa74feac76feae77feb078feb27afeb47bfeb67cfeb77efeb97ffebb81febd82febf84fec185fec287fec488fec68afec88cfeca8dfecc8ffecd90fecf92fed194fed395fed597fed799fed89afdda9cfddc9efddea0fde0a1fde2a3fde3a5fde5a7fde7a9fde9aafdebacfcecaefceeb0fcf0b2fcf2b4fcf4b6fcf6b8fcf7b9fcf9bbfcfbbdfcfdbf\"));\n\nexport var inferno = ramp(colors(\"00000401000501010601010802010a02020c02020e03021004031204031405041706041907051b08051d09061f0a07220b07240c08260d08290e092b10092d110a30120a32140b34150b37160b39180c3c190c3e1b0c411c0c431e0c451f0c48210c4a230c4c240c4f260c51280b53290b552b0b572d0b592f0a5b310a5c320a5e340a5f3609613809623909633b09643d09653e0966400a67420a68440a68450a69470b6a490b6a4a0c6b4c0c6b4d0d6c4f0d6c510e6c520e6d540f6d550f6d57106e59106e5a116e5c126e5d126e5f136e61136e62146e64156e65156e67166e69166e6a176e6c186e6d186e6f196e71196e721a6e741a6e751b6e771c6d781c6d7a1d6d7c1d6d7d1e6d7f1e6c801f6c82206c84206b85216b87216b88226a8a226a8c23698d23698f24699025689225689326679526679727669827669a28659b29649d29649f2a63a02a63a22b62a32c61a52c60a62d60a82e5fa92e5eab2f5ead305dae305cb0315bb1325ab3325ab43359b63458b73557b93556ba3655bc3754bd3853bf3952c03a51c13a50c33b4fc43c4ec63d4dc73e4cc83f4bca404acb4149cc4248ce4347cf4446d04545d24644d34743d44842d54a41d74b3fd84c3ed94d3dda4e3cdb503bdd513ade5238df5337e05536e15635e25734e35933e45a31e55c30e65d2fe75e2ee8602de9612bea632aeb6429eb6628ec6726ed6925ee6a24ef6c23ef6e21f06f20f1711ff1731df2741cf3761bf37819f47918f57b17f57d15f67e14f68013f78212f78410f8850ff8870ef8890cf98b0bf98c0af98e09fa9008fa9207fa9407fb9606fb9706fb9906fb9b06fb9d07fc9f07fca108fca309fca50afca60cfca80dfcaa0ffcac11fcae12fcb014fcb216fcb418fbb61afbb81dfbba1ffbbc21fbbe23fac026fac228fac42afac62df9c72ff9c932f9cb35f8cd37f8cf3af7d13df7d340f6d543f6d746f5d949f5db4cf4dd4ff4df53f4e156f3e35af3e55df2e661f2e865f2ea69f1ec6df1ed71f1ef75f1f179f2f27df2f482f3f586f3f68af4f88ef5f992f6fa96f8fb9af9fc9dfafda1fcffa4\"));\n\nexport var plasma = ramp(colors(\"0d088710078813078916078a19068c1b068d1d068e20068f2206902406912605912805922a05932c05942e05952f059631059733059735049837049938049a3a049a3c049b3e049c3f049c41049d43039e44039e46039f48039f4903a04b03a14c02a14e02a25002a25102a35302a35502a45601a45801a45901a55b01a55c01a65e01a66001a66100a76300a76400a76600a76700a86900a86a00a86c00a86e00a86f00a87100a87201a87401a87501a87701a87801a87a02a87b02a87d03a87e03a88004a88104a78305a78405a78606a68707a68808a68a09a58b0aa58d0ba58e0ca48f0da4910ea3920fa39410a29511a19613a19814a099159f9a169f9c179e9d189d9e199da01a9ca11b9ba21d9aa31e9aa51f99a62098a72197a82296aa2395ab2494ac2694ad2793ae2892b02991b12a90b22b8fb32c8eb42e8db52f8cb6308bb7318ab83289ba3388bb3488bc3587bd3786be3885bf3984c03a83c13b82c23c81c33d80c43e7fc5407ec6417dc7427cc8437bc9447aca457acb4679cc4778cc4977cd4a76ce4b75cf4c74d04d73d14e72d24f71d35171d45270d5536fd5546ed6556dd7566cd8576bd9586ada5a6ada5b69db5c68dc5d67dd5e66de5f65de6164df6263e06363e16462e26561e26660e3685fe4695ee56a5de56b5de66c5ce76e5be76f5ae87059e97158e97257ea7457eb7556eb7655ec7754ed7953ed7a52ee7b51ef7c51ef7e50f07f4ff0804ef1814df1834cf2844bf3854bf3874af48849f48948f58b47f58c46f68d45f68f44f79044f79143f79342f89441f89540f9973ff9983ef99a3efa9b3dfa9c3cfa9e3bfb9f3afba139fba238fca338fca537fca636fca835fca934fdab33fdac33fdae32fdaf31fdb130fdb22ffdb42ffdb52efeb72dfeb82cfeba2cfebb2bfebd2afebe2afec029fdc229fdc328fdc527fdc627fdc827fdca26fdcb26fccd25fcce25fcd025fcd225fbd324fbd524fbd724fad824fada24f9dc24f9dd25f8df25f8e125f7e225f7e425f6e626f6e826f5e926f5eb27f4ed27f3ee27f3f027f2f227f1f426f1f525f0f724f0f921\"));\n","import {linearish} from \"./linear\";\n\nexport default function sequential(interpolator) {\n var x0 = 0,\n x1 = 1,\n clamp = false;\n\n function scale(x) {\n var t = (x - x0) / (x1 - x0);\n return interpolator(clamp ? Math.max(0, Math.min(1, t)) : t);\n }\n\n scale.domain = function(_) {\n return arguments.length ? (x0 = +_[0], x1 = +_[1], scale) : [x0, x1];\n };\n\n scale.clamp = function(_) {\n return arguments.length ? (clamp = !!_, scale) : clamp;\n };\n\n scale.interpolator = function(_) {\n return arguments.length ? (interpolator = _, scale) : interpolator;\n };\n\n scale.copy = function() {\n return sequential(interpolator).domain([x0, x1]).clamp(clamp);\n };\n\n return linearish(scale);\n}\n","export default function(specifier) {\n var n = specifier.length / 6 | 0, colors = new Array(n), i = 0;\n while (i < n) colors[i] = \"#\" + specifier.slice(i * 6, ++i * 6);\n return colors;\n}\n","import colors from \"../colors\";\n\nexport default colors(\"7fc97fbeaed4fdc086ffff99386cb0f0027fbf5b17666666\");\n","import colors from \"../colors\";\n\nexport default colors(\"1f77b4ff7f0e2ca02cd627289467bd8c564be377c27f7f7fbcbd2217becf\");\n","import colors from \"../colors\";\n\nexport default colors(\"1b9e77d95f027570b3e7298a66a61ee6ab02a6761d666666\");\n","import colors from \"../colors\";\n\nexport default colors(\"a6cee31f78b4b2df8a33a02cfb9a99e31a1cfdbf6fff7f00cab2d66a3d9affff99b15928\");\n","import colors from \"../colors\";\n\nexport default colors(\"fbb4aeb3cde3ccebc5decbe4fed9a6ffffcce5d8bdfddaecf2f2f2\");\n","import colors from \"../colors\";\n\nexport default colors(\"b3e2cdfdcdaccbd5e8f4cae4e6f5c9fff2aef1e2cccccccc\");\n","import colors from \"../colors\";\n\nexport default colors(\"e41a1c377eb84daf4a984ea3ff7f00ffff33a65628f781bf999999\");\n","import colors from \"../colors\";\n\nexport default colors(\"66c2a5fc8d628da0cbe78ac3a6d854ffd92fe5c494b3b3b3\");\n","import colors from \"../colors\";\n\nexport default colors(\"8dd3c7ffffb3bebadafb807280b1d3fdb462b3de69fccde5d9d9d9bc80bdccebc5ffed6f\");\n","import {interpolateRgbBasis} from \"d3-interpolate\";\n\nexport default function(scheme) {\n return interpolateRgbBasis(scheme[scheme.length - 1]);\n}\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"d8b365f5f5f55ab4ac\",\n \"a6611adfc27d80cdc1018571\",\n \"a6611adfc27df5f5f580cdc1018571\",\n \"8c510ad8b365f6e8c3c7eae55ab4ac01665e\",\n \"8c510ad8b365f6e8c3f5f5f5c7eae55ab4ac01665e\",\n \"8c510abf812ddfc27df6e8c3c7eae580cdc135978f01665e\",\n \"8c510abf812ddfc27df6e8c3f5f5f5c7eae580cdc135978f01665e\",\n \"5430058c510abf812ddfc27df6e8c3c7eae580cdc135978f01665e003c30\",\n \"5430058c510abf812ddfc27df6e8c3f5f5f5c7eae580cdc135978f01665e003c30\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"af8dc3f7f7f77fbf7b\",\n \"7b3294c2a5cfa6dba0008837\",\n \"7b3294c2a5cff7f7f7a6dba0008837\",\n \"762a83af8dc3e7d4e8d9f0d37fbf7b1b7837\",\n \"762a83af8dc3e7d4e8f7f7f7d9f0d37fbf7b1b7837\",\n \"762a839970abc2a5cfe7d4e8d9f0d3a6dba05aae611b7837\",\n \"762a839970abc2a5cfe7d4e8f7f7f7d9f0d3a6dba05aae611b7837\",\n \"40004b762a839970abc2a5cfe7d4e8d9f0d3a6dba05aae611b783700441b\",\n \"40004b762a839970abc2a5cfe7d4e8f7f7f7d9f0d3a6dba05aae611b783700441b\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"e9a3c9f7f7f7a1d76a\",\n \"d01c8bf1b6dab8e1864dac26\",\n \"d01c8bf1b6daf7f7f7b8e1864dac26\",\n \"c51b7de9a3c9fde0efe6f5d0a1d76a4d9221\",\n \"c51b7de9a3c9fde0eff7f7f7e6f5d0a1d76a4d9221\",\n \"c51b7dde77aef1b6dafde0efe6f5d0b8e1867fbc414d9221\",\n \"c51b7dde77aef1b6dafde0eff7f7f7e6f5d0b8e1867fbc414d9221\",\n \"8e0152c51b7dde77aef1b6dafde0efe6f5d0b8e1867fbc414d9221276419\",\n \"8e0152c51b7dde77aef1b6dafde0eff7f7f7e6f5d0b8e1867fbc414d9221276419\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"998ec3f7f7f7f1a340\",\n \"5e3c99b2abd2fdb863e66101\",\n \"5e3c99b2abd2f7f7f7fdb863e66101\",\n \"542788998ec3d8daebfee0b6f1a340b35806\",\n \"542788998ec3d8daebf7f7f7fee0b6f1a340b35806\",\n \"5427888073acb2abd2d8daebfee0b6fdb863e08214b35806\",\n \"5427888073acb2abd2d8daebf7f7f7fee0b6fdb863e08214b35806\",\n \"2d004b5427888073acb2abd2d8daebfee0b6fdb863e08214b358067f3b08\",\n \"2d004b5427888073acb2abd2d8daebf7f7f7fee0b6fdb863e08214b358067f3b08\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"ef8a62f7f7f767a9cf\",\n \"ca0020f4a58292c5de0571b0\",\n \"ca0020f4a582f7f7f792c5de0571b0\",\n \"b2182bef8a62fddbc7d1e5f067a9cf2166ac\",\n \"b2182bef8a62fddbc7f7f7f7d1e5f067a9cf2166ac\",\n \"b2182bd6604df4a582fddbc7d1e5f092c5de4393c32166ac\",\n \"b2182bd6604df4a582fddbc7f7f7f7d1e5f092c5de4393c32166ac\",\n \"67001fb2182bd6604df4a582fddbc7d1e5f092c5de4393c32166ac053061\",\n \"67001fb2182bd6604df4a582fddbc7f7f7f7d1e5f092c5de4393c32166ac053061\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"ef8a62ffffff999999\",\n \"ca0020f4a582bababa404040\",\n \"ca0020f4a582ffffffbababa404040\",\n \"b2182bef8a62fddbc7e0e0e09999994d4d4d\",\n \"b2182bef8a62fddbc7ffffffe0e0e09999994d4d4d\",\n \"b2182bd6604df4a582fddbc7e0e0e0bababa8787874d4d4d\",\n \"b2182bd6604df4a582fddbc7ffffffe0e0e0bababa8787874d4d4d\",\n \"67001fb2182bd6604df4a582fddbc7e0e0e0bababa8787874d4d4d1a1a1a\",\n \"67001fb2182bd6604df4a582fddbc7ffffffe0e0e0bababa8787874d4d4d1a1a1a\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"fc8d59ffffbf91bfdb\",\n \"d7191cfdae61abd9e92c7bb6\",\n \"d7191cfdae61ffffbfabd9e92c7bb6\",\n \"d73027fc8d59fee090e0f3f891bfdb4575b4\",\n \"d73027fc8d59fee090ffffbfe0f3f891bfdb4575b4\",\n \"d73027f46d43fdae61fee090e0f3f8abd9e974add14575b4\",\n \"d73027f46d43fdae61fee090ffffbfe0f3f8abd9e974add14575b4\",\n \"a50026d73027f46d43fdae61fee090e0f3f8abd9e974add14575b4313695\",\n \"a50026d73027f46d43fdae61fee090ffffbfe0f3f8abd9e974add14575b4313695\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"fc8d59ffffbf91cf60\",\n \"d7191cfdae61a6d96a1a9641\",\n \"d7191cfdae61ffffbfa6d96a1a9641\",\n \"d73027fc8d59fee08bd9ef8b91cf601a9850\",\n \"d73027fc8d59fee08bffffbfd9ef8b91cf601a9850\",\n \"d73027f46d43fdae61fee08bd9ef8ba6d96a66bd631a9850\",\n \"d73027f46d43fdae61fee08bffffbfd9ef8ba6d96a66bd631a9850\",\n \"a50026d73027f46d43fdae61fee08bd9ef8ba6d96a66bd631a9850006837\",\n \"a50026d73027f46d43fdae61fee08bffffbfd9ef8ba6d96a66bd631a9850006837\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"fc8d59ffffbf99d594\",\n \"d7191cfdae61abdda42b83ba\",\n \"d7191cfdae61ffffbfabdda42b83ba\",\n \"d53e4ffc8d59fee08be6f59899d5943288bd\",\n \"d53e4ffc8d59fee08bffffbfe6f59899d5943288bd\",\n \"d53e4ff46d43fdae61fee08be6f598abdda466c2a53288bd\",\n \"d53e4ff46d43fdae61fee08bffffbfe6f598abdda466c2a53288bd\",\n \"9e0142d53e4ff46d43fdae61fee08be6f598abdda466c2a53288bd5e4fa2\",\n \"9e0142d53e4ff46d43fdae61fee08bffffbfe6f598abdda466c2a53288bd5e4fa2\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"e5f5f999d8c92ca25f\",\n \"edf8fbb2e2e266c2a4238b45\",\n \"edf8fbb2e2e266c2a42ca25f006d2c\",\n \"edf8fbccece699d8c966c2a42ca25f006d2c\",\n \"edf8fbccece699d8c966c2a441ae76238b45005824\",\n \"f7fcfde5f5f9ccece699d8c966c2a441ae76238b45005824\",\n \"f7fcfde5f5f9ccece699d8c966c2a441ae76238b45006d2c00441b\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"e0ecf49ebcda8856a7\",\n \"edf8fbb3cde38c96c688419d\",\n \"edf8fbb3cde38c96c68856a7810f7c\",\n \"edf8fbbfd3e69ebcda8c96c68856a7810f7c\",\n \"edf8fbbfd3e69ebcda8c96c68c6bb188419d6e016b\",\n \"f7fcfde0ecf4bfd3e69ebcda8c96c68c6bb188419d6e016b\",\n \"f7fcfde0ecf4bfd3e69ebcda8c96c68c6bb188419d810f7c4d004b\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"e0f3dba8ddb543a2ca\",\n \"f0f9e8bae4bc7bccc42b8cbe\",\n \"f0f9e8bae4bc7bccc443a2ca0868ac\",\n \"f0f9e8ccebc5a8ddb57bccc443a2ca0868ac\",\n \"f0f9e8ccebc5a8ddb57bccc44eb3d32b8cbe08589e\",\n \"f7fcf0e0f3dbccebc5a8ddb57bccc44eb3d32b8cbe08589e\",\n \"f7fcf0e0f3dbccebc5a8ddb57bccc44eb3d32b8cbe0868ac084081\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"fee8c8fdbb84e34a33\",\n \"fef0d9fdcc8afc8d59d7301f\",\n \"fef0d9fdcc8afc8d59e34a33b30000\",\n \"fef0d9fdd49efdbb84fc8d59e34a33b30000\",\n \"fef0d9fdd49efdbb84fc8d59ef6548d7301f990000\",\n \"fff7ecfee8c8fdd49efdbb84fc8d59ef6548d7301f990000\",\n \"fff7ecfee8c8fdd49efdbb84fc8d59ef6548d7301fb300007f0000\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"ece2f0a6bddb1c9099\",\n \"f6eff7bdc9e167a9cf02818a\",\n \"f6eff7bdc9e167a9cf1c9099016c59\",\n \"f6eff7d0d1e6a6bddb67a9cf1c9099016c59\",\n \"f6eff7d0d1e6a6bddb67a9cf3690c002818a016450\",\n \"fff7fbece2f0d0d1e6a6bddb67a9cf3690c002818a016450\",\n \"fff7fbece2f0d0d1e6a6bddb67a9cf3690c002818a016c59014636\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"ece7f2a6bddb2b8cbe\",\n \"f1eef6bdc9e174a9cf0570b0\",\n \"f1eef6bdc9e174a9cf2b8cbe045a8d\",\n \"f1eef6d0d1e6a6bddb74a9cf2b8cbe045a8d\",\n \"f1eef6d0d1e6a6bddb74a9cf3690c00570b0034e7b\",\n \"fff7fbece7f2d0d1e6a6bddb74a9cf3690c00570b0034e7b\",\n \"fff7fbece7f2d0d1e6a6bddb74a9cf3690c00570b0045a8d023858\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"e7e1efc994c7dd1c77\",\n \"f1eef6d7b5d8df65b0ce1256\",\n \"f1eef6d7b5d8df65b0dd1c77980043\",\n \"f1eef6d4b9dac994c7df65b0dd1c77980043\",\n \"f1eef6d4b9dac994c7df65b0e7298ace125691003f\",\n \"f7f4f9e7e1efd4b9dac994c7df65b0e7298ace125691003f\",\n \"f7f4f9e7e1efd4b9dac994c7df65b0e7298ace125698004367001f\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"fde0ddfa9fb5c51b8a\",\n \"feebe2fbb4b9f768a1ae017e\",\n \"feebe2fbb4b9f768a1c51b8a7a0177\",\n \"feebe2fcc5c0fa9fb5f768a1c51b8a7a0177\",\n \"feebe2fcc5c0fa9fb5f768a1dd3497ae017e7a0177\",\n \"fff7f3fde0ddfcc5c0fa9fb5f768a1dd3497ae017e7a0177\",\n \"fff7f3fde0ddfcc5c0fa9fb5f768a1dd3497ae017e7a017749006a\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"edf8b17fcdbb2c7fb8\",\n \"ffffcca1dab441b6c4225ea8\",\n \"ffffcca1dab441b6c42c7fb8253494\",\n \"ffffccc7e9b47fcdbb41b6c42c7fb8253494\",\n \"ffffccc7e9b47fcdbb41b6c41d91c0225ea80c2c84\",\n \"ffffd9edf8b1c7e9b47fcdbb41b6c41d91c0225ea80c2c84\",\n \"ffffd9edf8b1c7e9b47fcdbb41b6c41d91c0225ea8253494081d58\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"f7fcb9addd8e31a354\",\n \"ffffccc2e69978c679238443\",\n \"ffffccc2e69978c67931a354006837\",\n \"ffffccd9f0a3addd8e78c67931a354006837\",\n \"ffffccd9f0a3addd8e78c67941ab5d238443005a32\",\n \"ffffe5f7fcb9d9f0a3addd8e78c67941ab5d238443005a32\",\n \"ffffe5f7fcb9d9f0a3addd8e78c67941ab5d238443006837004529\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"fff7bcfec44fd95f0e\",\n \"ffffd4fed98efe9929cc4c02\",\n \"ffffd4fed98efe9929d95f0e993404\",\n \"ffffd4fee391fec44ffe9929d95f0e993404\",\n \"ffffd4fee391fec44ffe9929ec7014cc4c028c2d04\",\n \"ffffe5fff7bcfee391fec44ffe9929ec7014cc4c028c2d04\",\n \"ffffe5fff7bcfee391fec44ffe9929ec7014cc4c02993404662506\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"ffeda0feb24cf03b20\",\n \"ffffb2fecc5cfd8d3ce31a1c\",\n \"ffffb2fecc5cfd8d3cf03b20bd0026\",\n \"ffffb2fed976feb24cfd8d3cf03b20bd0026\",\n \"ffffb2fed976feb24cfd8d3cfc4e2ae31a1cb10026\",\n \"ffffccffeda0fed976feb24cfd8d3cfc4e2ae31a1cb10026\",\n \"ffffccffeda0fed976feb24cfd8d3cfc4e2ae31a1cbd0026800026\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"deebf79ecae13182bd\",\n \"eff3ffbdd7e76baed62171b5\",\n \"eff3ffbdd7e76baed63182bd08519c\",\n \"eff3ffc6dbef9ecae16baed63182bd08519c\",\n \"eff3ffc6dbef9ecae16baed64292c62171b5084594\",\n \"f7fbffdeebf7c6dbef9ecae16baed64292c62171b5084594\",\n \"f7fbffdeebf7c6dbef9ecae16baed64292c62171b508519c08306b\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"e5f5e0a1d99b31a354\",\n \"edf8e9bae4b374c476238b45\",\n \"edf8e9bae4b374c47631a354006d2c\",\n \"edf8e9c7e9c0a1d99b74c47631a354006d2c\",\n \"edf8e9c7e9c0a1d99b74c47641ab5d238b45005a32\",\n \"f7fcf5e5f5e0c7e9c0a1d99b74c47641ab5d238b45005a32\",\n \"f7fcf5e5f5e0c7e9c0a1d99b74c47641ab5d238b45006d2c00441b\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"f0f0f0bdbdbd636363\",\n \"f7f7f7cccccc969696525252\",\n \"f7f7f7cccccc969696636363252525\",\n \"f7f7f7d9d9d9bdbdbd969696636363252525\",\n \"f7f7f7d9d9d9bdbdbd969696737373525252252525\",\n \"fffffff0f0f0d9d9d9bdbdbd969696737373525252252525\",\n \"fffffff0f0f0d9d9d9bdbdbd969696737373525252252525000000\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"efedf5bcbddc756bb1\",\n \"f2f0f7cbc9e29e9ac86a51a3\",\n \"f2f0f7cbc9e29e9ac8756bb154278f\",\n \"f2f0f7dadaebbcbddc9e9ac8756bb154278f\",\n \"f2f0f7dadaebbcbddc9e9ac8807dba6a51a34a1486\",\n \"fcfbfdefedf5dadaebbcbddc9e9ac8807dba6a51a34a1486\",\n \"fcfbfdefedf5dadaebbcbddc9e9ac8807dba6a51a354278f3f007d\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"fee0d2fc9272de2d26\",\n \"fee5d9fcae91fb6a4acb181d\",\n \"fee5d9fcae91fb6a4ade2d26a50f15\",\n \"fee5d9fcbba1fc9272fb6a4ade2d26a50f15\",\n \"fee5d9fcbba1fc9272fb6a4aef3b2ccb181d99000d\",\n \"fff5f0fee0d2fcbba1fc9272fb6a4aef3b2ccb181d99000d\",\n \"fff5f0fee0d2fcbba1fc9272fb6a4aef3b2ccb181da50f1567000d\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"fee6cefdae6be6550d\",\n \"feeddefdbe85fd8d3cd94701\",\n \"feeddefdbe85fd8d3ce6550da63603\",\n \"feeddefdd0a2fdae6bfd8d3ce6550da63603\",\n \"feeddefdd0a2fdae6bfd8d3cf16913d948018c2d04\",\n \"fff5ebfee6cefdd0a2fdae6bfd8d3cf16913d948018c2d04\",\n \"fff5ebfee6cefdd0a2fdae6bfd8d3cf16913d94801a636037f2704\"\n).map(colors);\n\nexport default ramp(scheme);\n","import {cubehelix} from \"d3-color\";\nimport {interpolateCubehelixLong} from \"d3-interpolate\";\n\nexport default interpolateCubehelixLong(cubehelix(300, 0.5, 0.0), cubehelix(-240, 0.5, 1.0));\n","import {cubehelix} from \"d3-color\";\nimport {interpolateCubehelixLong} from \"d3-interpolate\";\n\nexport var warm = interpolateCubehelixLong(cubehelix(-100, 0.75, 0.35), cubehelix(80, 1.50, 0.8));\n\nexport var cool = interpolateCubehelixLong(cubehelix(260, 0.75, 0.35), cubehelix(80, 1.50, 0.8));\n\nvar c = cubehelix();\n\nexport default function(t) {\n if (t < 0 || t > 1) t -= Math.floor(t);\n var ts = Math.abs(t - 0.5);\n c.h = 360 * t - 100;\n c.s = 1.5 - 1.5 * ts;\n c.l = 0.8 - 0.9 * ts;\n return c + \"\";\n}\n","import {rgb} from \"d3-color\";\n\nvar c = rgb(),\n pi_1_3 = Math.PI / 3,\n pi_2_3 = Math.PI * 2 / 3;\n\nexport default function(t) {\n var x;\n t = (0.5 - t) * Math.PI;\n c.r = 255 * (x = Math.sin(t)) * x;\n c.g = 255 * (x = Math.sin(t + pi_1_3)) * x;\n c.b = 255 * (x = Math.sin(t + pi_2_3)) * x;\n return c + \"\";\n}\n","import colors from \"../colors\";\n\nfunction ramp(range) {\n var n = range.length;\n return function(t) {\n return range[Math.max(0, Math.min(n - 1, Math.floor(t * n)))];\n };\n}\n\nexport default ramp(colors(\"44015444025645045745055946075a46085c460a5d460b5e470d60470e6147106347116447136548146748166848176948186a481a6c481b6d481c6e481d6f481f70482071482173482374482475482576482677482878482979472a7a472c7a472d7b472e7c472f7d46307e46327e46337f463480453581453781453882443983443a83443b84433d84433e85423f854240864241864142874144874045884046883f47883f48893e49893e4a893e4c8a3d4d8a3d4e8a3c4f8a3c508b3b518b3b528b3a538b3a548c39558c39568c38588c38598c375a8c375b8d365c8d365d8d355e8d355f8d34608d34618d33628d33638d32648e32658e31668e31678e31688e30698e306a8e2f6b8e2f6c8e2e6d8e2e6e8e2e6f8e2d708e2d718e2c718e2c728e2c738e2b748e2b758e2a768e2a778e2a788e29798e297a8e297b8e287c8e287d8e277e8e277f8e27808e26818e26828e26828e25838e25848e25858e24868e24878e23888e23898e238a8d228b8d228c8d228d8d218e8d218f8d21908d21918c20928c20928c20938c1f948c1f958b1f968b1f978b1f988b1f998a1f9a8a1e9b8a1e9c891e9d891f9e891f9f881fa0881fa1881fa1871fa28720a38620a48621a58521a68522a78522a88423a98324aa8325ab8225ac8226ad8127ad8128ae8029af7f2ab07f2cb17e2db27d2eb37c2fb47c31b57b32b67a34b67935b77937b87838b9773aba763bbb753dbc743fbc7340bd7242be7144bf7046c06f48c16e4ac16d4cc26c4ec36b50c46a52c56954c56856c66758c7655ac8645cc8635ec96260ca6063cb5f65cb5e67cc5c69cd5b6ccd5a6ece5870cf5773d05675d05477d1537ad1517cd2507fd34e81d34d84d44b86d54989d5488bd6468ed64590d74393d74195d84098d83e9bd93c9dd93ba0da39a2da37a5db36a8db34aadc32addc30b0dd2fb2dd2db5de2bb8de29bade28bddf26c0df25c2df23c5e021c8e020cae11fcde11dd0e11cd2e21bd5e21ad8e219dae319dde318dfe318e2e418e5e419e7e419eae51aece51befe51cf1e51df4e61ef6e620f8e621fbe723fde725\"));\n\nexport var magma = ramp(colors(\"00000401000501010601010802010902020b02020d03030f03031204041405041606051806051a07061c08071e0907200a08220b09240c09260d0a290e0b2b100b2d110c2f120d31130d34140e36150e38160f3b180f3d19103f1a10421c10441d11471e114920114b21114e22115024125325125527125829115a2a115c2c115f2d11612f116331116533106734106936106b38106c390f6e3b0f703d0f713f0f72400f74420f75440f764510774710784910784a10794c117a4e117b4f127b51127c52137c54137d56147d57157e59157e5a167e5c167f5d177f5f187f601880621980641a80651a80671b80681c816a1c816b1d816d1d816e1e81701f81721f817320817521817621817822817922827b23827c23827e24828025828125818326818426818627818827818928818b29818c29818e2a81902a81912b81932b80942c80962c80982d80992d809b2e7f9c2e7f9e2f7fa02f7fa1307ea3307ea5317ea6317da8327daa337dab337cad347cae347bb0357bb2357bb3367ab5367ab73779b83779ba3878bc3978bd3977bf3a77c03a76c23b75c43c75c53c74c73d73c83e73ca3e72cc3f71cd4071cf4070d0416fd2426fd3436ed5446dd6456cd8456cd9466bdb476adc4869de4968df4a68e04c67e24d66e34e65e44f64e55064e75263e85362e95462ea5661eb5760ec5860ed5a5fee5b5eef5d5ef05f5ef1605df2625df2645cf3655cf4675cf4695cf56b5cf66c5cf66e5cf7705cf7725cf8745cf8765cf9785df9795df97b5dfa7d5efa7f5efa815ffb835ffb8560fb8761fc8961fc8a62fc8c63fc8e64fc9065fd9266fd9467fd9668fd9869fd9a6afd9b6bfe9d6cfe9f6dfea16efea36ffea571fea772fea973feaa74feac76feae77feb078feb27afeb47bfeb67cfeb77efeb97ffebb81febd82febf84fec185fec287fec488fec68afec88cfeca8dfecc8ffecd90fecf92fed194fed395fed597fed799fed89afdda9cfddc9efddea0fde0a1fde2a3fde3a5fde5a7fde7a9fde9aafdebacfcecaefceeb0fcf0b2fcf2b4fcf4b6fcf6b8fcf7b9fcf9bbfcfbbdfcfdbf\"));\n\nexport var inferno = ramp(colors(\"00000401000501010601010802010a02020c02020e03021004031204031405041706041907051b08051d09061f0a07220b07240c08260d08290e092b10092d110a30120a32140b34150b37160b39180c3c190c3e1b0c411c0c431e0c451f0c48210c4a230c4c240c4f260c51280b53290b552b0b572d0b592f0a5b310a5c320a5e340a5f3609613809623909633b09643d09653e0966400a67420a68440a68450a69470b6a490b6a4a0c6b4c0c6b4d0d6c4f0d6c510e6c520e6d540f6d550f6d57106e59106e5a116e5c126e5d126e5f136e61136e62146e64156e65156e67166e69166e6a176e6c186e6d186e6f196e71196e721a6e741a6e751b6e771c6d781c6d7a1d6d7c1d6d7d1e6d7f1e6c801f6c82206c84206b85216b87216b88226a8a226a8c23698d23698f24699025689225689326679526679727669827669a28659b29649d29649f2a63a02a63a22b62a32c61a52c60a62d60a82e5fa92e5eab2f5ead305dae305cb0315bb1325ab3325ab43359b63458b73557b93556ba3655bc3754bd3853bf3952c03a51c13a50c33b4fc43c4ec63d4dc73e4cc83f4bca404acb4149cc4248ce4347cf4446d04545d24644d34743d44842d54a41d74b3fd84c3ed94d3dda4e3cdb503bdd513ade5238df5337e05536e15635e25734e35933e45a31e55c30e65d2fe75e2ee8602de9612bea632aeb6429eb6628ec6726ed6925ee6a24ef6c23ef6e21f06f20f1711ff1731df2741cf3761bf37819f47918f57b17f57d15f67e14f68013f78212f78410f8850ff8870ef8890cf98b0bf98c0af98e09fa9008fa9207fa9407fb9606fb9706fb9906fb9b06fb9d07fc9f07fca108fca309fca50afca60cfca80dfcaa0ffcac11fcae12fcb014fcb216fcb418fbb61afbb81dfbba1ffbbc21fbbe23fac026fac228fac42afac62df9c72ff9c932f9cb35f8cd37f8cf3af7d13df7d340f6d543f6d746f5d949f5db4cf4dd4ff4df53f4e156f3e35af3e55df2e661f2e865f2ea69f1ec6df1ed71f1ef75f1f179f2f27df2f482f3f586f3f68af4f88ef5f992f6fa96f8fb9af9fc9dfafda1fcffa4\"));\n\nexport var plasma = ramp(colors(\"0d088710078813078916078a19068c1b068d1d068e20068f2206902406912605912805922a05932c05942e05952f059631059733059735049837049938049a3a049a3c049b3e049c3f049c41049d43039e44039e46039f48039f4903a04b03a14c02a14e02a25002a25102a35302a35502a45601a45801a45901a55b01a55c01a65e01a66001a66100a76300a76400a76600a76700a86900a86a00a86c00a86e00a86f00a87100a87201a87401a87501a87701a87801a87a02a87b02a87d03a87e03a88004a88104a78305a78405a78606a68707a68808a68a09a58b0aa58d0ba58e0ca48f0da4910ea3920fa39410a29511a19613a19814a099159f9a169f9c179e9d189d9e199da01a9ca11b9ba21d9aa31e9aa51f99a62098a72197a82296aa2395ab2494ac2694ad2793ae2892b02991b12a90b22b8fb32c8eb42e8db52f8cb6308bb7318ab83289ba3388bb3488bc3587bd3786be3885bf3984c03a83c13b82c23c81c33d80c43e7fc5407ec6417dc7427cc8437bc9447aca457acb4679cc4778cc4977cd4a76ce4b75cf4c74d04d73d14e72d24f71d35171d45270d5536fd5546ed6556dd7566cd8576bd9586ada5a6ada5b69db5c68dc5d67dd5e66de5f65de6164df6263e06363e16462e26561e26660e3685fe4695ee56a5de56b5de66c5ce76e5be76f5ae87059e97158e97257ea7457eb7556eb7655ec7754ed7953ed7a52ee7b51ef7c51ef7e50f07f4ff0804ef1814df1834cf2844bf3854bf3874af48849f48948f58b47f58c46f68d45f68f44f79044f79143f79342f89441f89540f9973ff9983ef99a3efa9b3dfa9c3cfa9e3bfb9f3afba139fba238fca338fca537fca636fca835fca934fdab33fdac33fdae32fdaf31fdb130fdb22ffdb42ffdb52efeb72dfeb82cfeba2cfebb2bfebd2afebe2afec029fdc229fdc328fdc527fdc627fdc827fdca26fdcb26fccd25fcce25fcd025fcd225fbd324fbd524fbd724fad824fada24f9dc24f9dd25f8df25f8e125f7e225f7e425f6e626f6e826f5e926f5eb27f4ed27f3ee27f3f027f2f227f1f426f1f525f0f724f0f921\"));\n","const ReservedFields = {\n ROW_ID: '__id__'\n};\n\nexport default ReservedFields;\n","const CommonProps = {\n ACTION_INF: 'actionInf',\n ON_LAYER_DRAW: 'onlayerdraw'\n};\n\nexport default CommonProps;\n","export var slice = Array.prototype.slice;\n","export default function(x) {\n return x;\n}\n","import {slice} from \"./array\";\nimport identity from \"./identity\";\n\nvar top = 1,\n right = 2,\n bottom = 3,\n left = 4,\n epsilon = 1e-6;\n\nfunction translateX(x) {\n return \"translate(\" + (x + 0.5) + \",0)\";\n}\n\nfunction translateY(y) {\n return \"translate(0,\" + (y + 0.5) + \")\";\n}\n\nfunction number(scale) {\n return function(d) {\n return +scale(d);\n };\n}\n\nfunction center(scale) {\n var offset = Math.max(0, scale.bandwidth() - 1) / 2; // Adjust for 0.5px offset.\n if (scale.round()) offset = Math.round(offset);\n return function(d) {\n return +scale(d) + offset;\n };\n}\n\nfunction entering() {\n return !this.__axis;\n}\n\nfunction axis(orient, scale) {\n var tickArguments = [],\n tickValues = null,\n tickFormat = null,\n tickTransform = null,\n tickSizeInner = 6,\n tickSizeOuter = 6,\n tickPadding = 3,\n k = orient === top || orient === left ? -1 : 1,\n x = orient === left || orient === right ? \"x\" : \"y\",\n transform = orient === top || orient === bottom ? translateX : translateY;\n\n function axis(context) {\n var values = tickValues == null ? (scale.ticks ? scale.ticks.apply(scale, tickArguments) : scale.domain()) : tickValues,\n format = tickFormat == null ? (scale.tickFormat ? scale.tickFormat.apply(scale, tickArguments) : identity) : tickFormat,\n spacing = Math.max(tickSizeInner, 0) + tickPadding,\n range = scale.range(),\n range0 = +range[0] + 0.5,\n range1 = +range[range.length - 1] + 0.5,\n position = (scale.bandwidth ? center : number)(scale.copy()),\n selection = context.selection ? context.selection() : context,\n path = selection.selectAll(\".domain\").data([null]),\n tick = selection.selectAll(\".tick\").data(values, scale).order(),\n tickExit = tick.exit(),\n tickEnter = tick.enter().append(\"g\").attr(\"class\", \"tick\"),\n line = tick.select(\"line\"),\n text = tick.select(\"text\");\n\n path = path.merge(path.enter().insert(\"path\", \".tick\")\n .attr(\"class\", \"domain\")\n .attr(\"stroke\", \"#000\"));\n\n tick = tick.merge(tickEnter);\n\n line = line.merge(tickEnter.append(\"line\")\n .attr(\"stroke\", \"#000\")\n .attr(x + \"2\", k * tickSizeInner));\n\n text = text.merge(tickEnter.append(\"text\")\n .attr(\"fill\", \"#000\")\n .attr(x, k * spacing)\n .attr(\"dy\", orient === top ? \"0em\" : orient === bottom ? \"0.71em\" : \"0.32em\"))\n .style('transform', tickTransform);\n\n if (context !== selection) {\n path = path.transition(context);\n tick = tick.transition(context);\n line = line.transition(context);\n text = text.transition(context);\n\n tickExit = tickExit.transition(context)\n .attr(\"opacity\", epsilon)\n .attr(\"transform\", function(d) { return isFinite(d = position(d)) ? transform(d) : this.getAttribute(\"transform\"); });\n\n tickEnter\n .attr(\"opacity\", epsilon)\n .attr(\"transform\", function(d) { var p = this.parentNode.__axis; return transform(p && isFinite(p = p(d)) ? p : position(d)); });\n }\n\n tickExit.remove();\n\n path\n .attr(\"d\", orient === left || orient == right\n ? \"M\" + k * tickSizeOuter + \",\" + range0 + \"H0.5V\" + range1 + \"H\" + k * tickSizeOuter\n : \"M\" + range0 + \",\" + k * tickSizeOuter + \"V0.5H\" + range1 + \"V\" + k * tickSizeOuter);\n\n tick\n .attr(\"opacity\", 1)\n .attr(\"transform\", function(d) { return transform(position(d)); });\n\n line\n .attr(x + \"2\", k * tickSizeInner);\n\n text\n .attr(x, k * spacing)\n .text(format);\n\n selection.filter(entering)\n .attr(\"fill\", \"none\")\n .attr(\"font-size\", 10)\n .attr(\"font-family\", \"sans-serif\")\n .attr(\"text-anchor\", orient === right ? \"start\" : orient === left ? \"end\" : \"middle\");\n\n selection\n .each(function() { this.__axis = position; });\n }\n\n axis.scale = function(_) {\n return arguments.length ? (scale = _, axis) : scale;\n };\n\n axis.tickTransform = function(_) {\n return arguments.length ? (tickTransform = _, axis) : tickTransform;\n };\n\n axis.ticks = function() {\n return tickArguments = slice.call(arguments), axis;\n };\n\n axis.tickArguments = function(_) {\n return arguments.length ? (tickArguments = _ == null ? [] : slice.call(_), axis) : tickArguments.slice();\n };\n\n axis.tickValues = function(_) {\n return arguments.length ? (tickValues = _ == null ? null : slice.call(_), axis) : tickValues && tickValues.slice();\n };\n\n axis.tickFormat = function(_) {\n return arguments.length ? (tickFormat = _, axis) : tickFormat;\n };\n\n axis.tickSize = function(_) {\n return arguments.length ? (tickSizeInner = tickSizeOuter = +_, axis) : tickSizeInner;\n };\n\n axis.tickSizeInner = function(_) {\n return arguments.length ? (tickSizeInner = +_, axis) : tickSizeInner;\n };\n\n axis.tickSizeOuter = function(_) {\n return arguments.length ? (tickSizeOuter = +_, axis) : tickSizeOuter;\n };\n\n axis.tickPadding = function(_) {\n return arguments.length ? (tickPadding = +_, axis) : tickPadding;\n };\n\n return axis;\n}\n\nexport function axisTop(scale) {\n return axis(top, scale);\n}\n\nexport function axisRight(scale) {\n return axis(right, scale);\n}\n\nexport function axisBottom(scale) {\n return axis(bottom, scale);\n}\n\nexport function axisLeft(scale) {\n return axis(left, scale);\n}\n","var pi = Math.PI,\n tau = 2 * pi,\n epsilon = 1e-6,\n tauEpsilon = tau - epsilon;\n\nfunction Path() {\n this._x0 = this._y0 = // start of current subpath\n this._x1 = this._y1 = null; // end of current subpath\n this._ = \"\";\n}\n\nfunction path() {\n return new Path;\n}\n\nPath.prototype = path.prototype = {\n constructor: Path,\n moveTo: function(x, y) {\n this._ += \"M\" + (this._x0 = this._x1 = +x) + \",\" + (this._y0 = this._y1 = +y);\n },\n closePath: function() {\n if (this._x1 !== null) {\n this._x1 = this._x0, this._y1 = this._y0;\n this._ += \"Z\";\n }\n },\n lineTo: function(x, y) {\n this._ += \"L\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n },\n quadraticCurveTo: function(x1, y1, x, y) {\n this._ += \"Q\" + (+x1) + \",\" + (+y1) + \",\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n },\n bezierCurveTo: function(x1, y1, x2, y2, x, y) {\n this._ += \"C\" + (+x1) + \",\" + (+y1) + \",\" + (+x2) + \",\" + (+y2) + \",\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n },\n arcTo: function(x1, y1, x2, y2, r) {\n x1 = +x1, y1 = +y1, x2 = +x2, y2 = +y2, r = +r;\n var x0 = this._x1,\n y0 = this._y1,\n x21 = x2 - x1,\n y21 = y2 - y1,\n x01 = x0 - x1,\n y01 = y0 - y1,\n l01_2 = x01 * x01 + y01 * y01;\n\n // Is the radius negative? Error.\n if (r < 0) throw new Error(\"negative radius: \" + r);\n\n // Is this path empty? Move to (x1,y1).\n if (this._x1 === null) {\n this._ += \"M\" + (this._x1 = x1) + \",\" + (this._y1 = y1);\n }\n\n // Or, is (x1,y1) coincident with (x0,y0)? Do nothing.\n else if (!(l01_2 > epsilon));\n\n // Or, are (x0,y0), (x1,y1) and (x2,y2) collinear?\n // Equivalently, is (x1,y1) coincident with (x2,y2)?\n // Or, is the radius zero? Line to (x1,y1).\n else if (!(Math.abs(y01 * x21 - y21 * x01) > epsilon) || !r) {\n this._ += \"L\" + (this._x1 = x1) + \",\" + (this._y1 = y1);\n }\n\n // Otherwise, draw an arc!\n else {\n var x20 = x2 - x0,\n y20 = y2 - y0,\n l21_2 = x21 * x21 + y21 * y21,\n l20_2 = x20 * x20 + y20 * y20,\n l21 = Math.sqrt(l21_2),\n l01 = Math.sqrt(l01_2),\n l = r * Math.tan((pi - Math.acos((l21_2 + l01_2 - l20_2) / (2 * l21 * l01))) / 2),\n t01 = l / l01,\n t21 = l / l21;\n\n // If the start tangent is not coincident with (x0,y0), line to.\n if (Math.abs(t01 - 1) > epsilon) {\n this._ += \"L\" + (x1 + t01 * x01) + \",\" + (y1 + t01 * y01);\n }\n\n this._ += \"A\" + r + \",\" + r + \",0,0,\" + (+(y01 * x20 > x01 * y20)) + \",\" + (this._x1 = x1 + t21 * x21) + \",\" + (this._y1 = y1 + t21 * y21);\n }\n },\n arc: function(x, y, r, a0, a1, ccw) {\n x = +x, y = +y, r = +r;\n var dx = r * Math.cos(a0),\n dy = r * Math.sin(a0),\n x0 = x + dx,\n y0 = y + dy,\n cw = 1 ^ ccw,\n da = ccw ? a0 - a1 : a1 - a0;\n\n // Is the radius negative? Error.\n if (r < 0) throw new Error(\"negative radius: \" + r);\n\n // Is this path empty? Move to (x0,y0).\n if (this._x1 === null) {\n this._ += \"M\" + x0 + \",\" + y0;\n }\n\n // Or, is (x0,y0) not coincident with the previous point? Line to (x0,y0).\n else if (Math.abs(this._x1 - x0) > epsilon || Math.abs(this._y1 - y0) > epsilon) {\n this._ += \"L\" + x0 + \",\" + y0;\n }\n\n // Is this arc empty? We’re done.\n if (!r) return;\n\n // Does the angle go the wrong way? Flip the direction.\n if (da < 0) da = da % tau + tau;\n\n // Is this a complete circle? Draw two arcs to complete the circle.\n if (da > tauEpsilon) {\n this._ += \"A\" + r + \",\" + r + \",0,1,\" + cw + \",\" + (x - dx) + \",\" + (y - dy) + \"A\" + r + \",\" + r + \",0,1,\" + cw + \",\" + (this._x1 = x0) + \",\" + (this._y1 = y0);\n }\n\n // Is this arc non-empty? Draw an arc!\n else if (da > epsilon) {\n this._ += \"A\" + r + \",\" + r + \",0,\" + (+(da >= pi)) + \",\" + cw + \",\" + (this._x1 = x + r * Math.cos(a1)) + \",\" + (this._y1 = y + r * Math.sin(a1));\n }\n },\n rect: function(x, y, w, h) {\n this._ += \"M\" + (this._x0 = this._x1 = +x) + \",\" + (this._y0 = this._y1 = +y) + \"h\" + (+w) + \"v\" + (+h) + \"h\" + (-w) + \"Z\";\n },\n toString: function() {\n return this._;\n }\n};\n\nexport default path;\n","export default function(x) {\n return function constant() {\n return x;\n };\n}\n","export var abs = Math.abs;\nexport var atan2 = Math.atan2;\nexport var cos = Math.cos;\nexport var max = Math.max;\nexport var min = Math.min;\nexport var sin = Math.sin;\nexport var sqrt = Math.sqrt;\n\nexport var epsilon = 1e-12;\nexport var pi = Math.PI;\nexport var halfPi = pi / 2;\nexport var tau = 2 * pi;\n\nexport function acos(x) {\n return x > 1 ? 0 : x < -1 ? pi : Math.acos(x);\n}\n\nexport function asin(x) {\n return x >= 1 ? halfPi : x <= -1 ? -halfPi : Math.asin(x);\n}\n","import {path} from \"d3-path\";\nimport constant from \"./constant\";\nimport {abs, acos, asin, atan2, cos, epsilon, halfPi, max, min, pi, sin, sqrt, tau} from \"./math\";\n\nfunction arcInnerRadius(d) {\n return d.innerRadius;\n}\n\nfunction arcOuterRadius(d) {\n return d.outerRadius;\n}\n\nfunction arcStartAngle(d) {\n return d.startAngle;\n}\n\nfunction arcEndAngle(d) {\n return d.endAngle;\n}\n\nfunction arcPadAngle(d) {\n return d && d.padAngle; // Note: optional!\n}\n\nfunction intersect(x0, y0, x1, y1, x2, y2, x3, y3) {\n var x10 = x1 - x0, y10 = y1 - y0,\n x32 = x3 - x2, y32 = y3 - y2,\n t = (x32 * (y0 - y2) - y32 * (x0 - x2)) / (y32 * x10 - x32 * y10);\n return [x0 + t * x10, y0 + t * y10];\n}\n\n// Compute perpendicular offset line of length rc.\n// http://mathworld.wolfram.com/Circle-LineIntersection.html\nfunction cornerTangents(x0, y0, x1, y1, r1, rc, cw) {\n var x01 = x0 - x1,\n y01 = y0 - y1,\n lo = (cw ? rc : -rc) / sqrt(x01 * x01 + y01 * y01),\n ox = lo * y01,\n oy = -lo * x01,\n x11 = x0 + ox,\n y11 = y0 + oy,\n x10 = x1 + ox,\n y10 = y1 + oy,\n x00 = (x11 + x10) / 2,\n y00 = (y11 + y10) / 2,\n dx = x10 - x11,\n dy = y10 - y11,\n d2 = dx * dx + dy * dy,\n r = r1 - rc,\n D = x11 * y10 - x10 * y11,\n d = (dy < 0 ? -1 : 1) * sqrt(max(0, r * r * d2 - D * D)),\n cx0 = (D * dy - dx * d) / d2,\n cy0 = (-D * dx - dy * d) / d2,\n cx1 = (D * dy + dx * d) / d2,\n cy1 = (-D * dx + dy * d) / d2,\n dx0 = cx0 - x00,\n dy0 = cy0 - y00,\n dx1 = cx1 - x00,\n dy1 = cy1 - y00;\n\n // Pick the closer of the two intersection points.\n // TODO Is there a faster way to determine which intersection to use?\n if (dx0 * dx0 + dy0 * dy0 > dx1 * dx1 + dy1 * dy1) cx0 = cx1, cy0 = cy1;\n\n return {\n cx: cx0,\n cy: cy0,\n x01: -ox,\n y01: -oy,\n x11: cx0 * (r1 / r - 1),\n y11: cy0 * (r1 / r - 1)\n };\n}\n\nexport default function() {\n var innerRadius = arcInnerRadius,\n outerRadius = arcOuterRadius,\n cornerRadius = constant(0),\n padRadius = null,\n startAngle = arcStartAngle,\n endAngle = arcEndAngle,\n padAngle = arcPadAngle,\n context = null;\n\n function arc() {\n var buffer,\n r,\n r0 = +innerRadius.apply(this, arguments),\n r1 = +outerRadius.apply(this, arguments),\n a0 = startAngle.apply(this, arguments) - halfPi,\n a1 = endAngle.apply(this, arguments) - halfPi,\n da = abs(a1 - a0),\n cw = a1 > a0;\n\n if (!context) context = buffer = path();\n\n // Ensure that the outer radius is always larger than the inner radius.\n if (r1 < r0) r = r1, r1 = r0, r0 = r;\n\n // Is it a point?\n if (!(r1 > epsilon)) context.moveTo(0, 0);\n\n // Or is it a circle or annulus?\n else if (da > tau - epsilon) {\n context.moveTo(r1 * cos(a0), r1 * sin(a0));\n context.arc(0, 0, r1, a0, a1, !cw);\n if (r0 > epsilon) {\n context.moveTo(r0 * cos(a1), r0 * sin(a1));\n context.arc(0, 0, r0, a1, a0, cw);\n }\n }\n\n // Or is it a circular or annular sector?\n else {\n var a01 = a0,\n a11 = a1,\n a00 = a0,\n a10 = a1,\n da0 = da,\n da1 = da,\n ap = padAngle.apply(this, arguments) / 2,\n rp = (ap > epsilon) && (padRadius ? +padRadius.apply(this, arguments) : sqrt(r0 * r0 + r1 * r1)),\n rc = min(abs(r1 - r0) / 2, +cornerRadius.apply(this, arguments)),\n rc0 = rc,\n rc1 = rc,\n t0,\n t1;\n\n // Apply padding? Note that since r1 ≥ r0, da1 ≥ da0.\n if (rp > epsilon) {\n var p0 = asin(rp / r0 * sin(ap)),\n p1 = asin(rp / r1 * sin(ap));\n if ((da0 -= p0 * 2) > epsilon) p0 *= (cw ? 1 : -1), a00 += p0, a10 -= p0;\n else da0 = 0, a00 = a10 = (a0 + a1) / 2;\n if ((da1 -= p1 * 2) > epsilon) p1 *= (cw ? 1 : -1), a01 += p1, a11 -= p1;\n else da1 = 0, a01 = a11 = (a0 + a1) / 2;\n }\n\n var x01 = r1 * cos(a01),\n y01 = r1 * sin(a01),\n x10 = r0 * cos(a10),\n y10 = r0 * sin(a10);\n\n // Apply rounded corners?\n if (rc > epsilon) {\n var x11 = r1 * cos(a11),\n y11 = r1 * sin(a11),\n x00 = r0 * cos(a00),\n y00 = r0 * sin(a00);\n\n // Restrict the corner radius according to the sector angle.\n if (da < pi) {\n var oc = da0 > epsilon ? intersect(x01, y01, x00, y00, x11, y11, x10, y10) : [x10, y10],\n ax = x01 - oc[0],\n ay = y01 - oc[1],\n bx = x11 - oc[0],\n by = y11 - oc[1],\n kc = 1 / sin(acos((ax * bx + ay * by) / (sqrt(ax * ax + ay * ay) * sqrt(bx * bx + by * by))) / 2),\n lc = sqrt(oc[0] * oc[0] + oc[1] * oc[1]);\n rc0 = min(rc, (r0 - lc) / (kc - 1));\n rc1 = min(rc, (r1 - lc) / (kc + 1));\n }\n }\n\n // Is the sector collapsed to a line?\n if (!(da1 > epsilon)) context.moveTo(x01, y01);\n\n // Does the sector’s outer ring have rounded corners?\n else if (rc1 > epsilon) {\n t0 = cornerTangents(x00, y00, x01, y01, r1, rc1, cw);\n t1 = cornerTangents(x11, y11, x10, y10, r1, rc1, cw);\n\n context.moveTo(t0.cx + t0.x01, t0.cy + t0.y01);\n\n // Have the corners merged?\n if (rc1 < rc) context.arc(t0.cx, t0.cy, rc1, atan2(t0.y01, t0.x01), atan2(t1.y01, t1.x01), !cw);\n\n // Otherwise, draw the two corners and the ring.\n else {\n context.arc(t0.cx, t0.cy, rc1, atan2(t0.y01, t0.x01), atan2(t0.y11, t0.x11), !cw);\n context.arc(0, 0, r1, atan2(t0.cy + t0.y11, t0.cx + t0.x11), atan2(t1.cy + t1.y11, t1.cx + t1.x11), !cw);\n context.arc(t1.cx, t1.cy, rc1, atan2(t1.y11, t1.x11), atan2(t1.y01, t1.x01), !cw);\n }\n }\n\n // Or is the outer ring just a circular arc?\n else context.moveTo(x01, y01), context.arc(0, 0, r1, a01, a11, !cw);\n\n // Is there no inner ring, and it’s a circular sector?\n // Or perhaps it’s an annular sector collapsed due to padding?\n if (!(r0 > epsilon) || !(da0 > epsilon)) context.lineTo(x10, y10);\n\n // Does the sector’s inner ring (or point) have rounded corners?\n else if (rc0 > epsilon) {\n t0 = cornerTangents(x10, y10, x11, y11, r0, -rc0, cw);\n t1 = cornerTangents(x01, y01, x00, y00, r0, -rc0, cw);\n\n context.lineTo(t0.cx + t0.x01, t0.cy + t0.y01);\n\n // Have the corners merged?\n if (rc0 < rc) context.arc(t0.cx, t0.cy, rc0, atan2(t0.y01, t0.x01), atan2(t1.y01, t1.x01), !cw);\n\n // Otherwise, draw the two corners and the ring.\n else {\n context.arc(t0.cx, t0.cy, rc0, atan2(t0.y01, t0.x01), atan2(t0.y11, t0.x11), !cw);\n context.arc(0, 0, r0, atan2(t0.cy + t0.y11, t0.cx + t0.x11), atan2(t1.cy + t1.y11, t1.cx + t1.x11), cw);\n context.arc(t1.cx, t1.cy, rc0, atan2(t1.y11, t1.x11), atan2(t1.y01, t1.x01), !cw);\n }\n }\n\n // Or is the inner ring just a circular arc?\n else context.arc(0, 0, r0, a10, a00, cw);\n }\n\n context.closePath();\n\n if (buffer) return context = null, buffer + \"\" || null;\n }\n\n arc.centroid = function() {\n var r = (+innerRadius.apply(this, arguments) + +outerRadius.apply(this, arguments)) / 2,\n a = (+startAngle.apply(this, arguments) + +endAngle.apply(this, arguments)) / 2 - pi / 2;\n return [cos(a) * r, sin(a) * r];\n };\n\n arc.innerRadius = function(_) {\n return arguments.length ? (innerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : innerRadius;\n };\n\n arc.outerRadius = function(_) {\n return arguments.length ? (outerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : outerRadius;\n };\n\n arc.cornerRadius = function(_) {\n return arguments.length ? (cornerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : cornerRadius;\n };\n\n arc.padRadius = function(_) {\n return arguments.length ? (padRadius = _ == null ? null : typeof _ === \"function\" ? _ : constant(+_), arc) : padRadius;\n };\n\n arc.startAngle = function(_) {\n return arguments.length ? (startAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : startAngle;\n };\n\n arc.endAngle = function(_) {\n return arguments.length ? (endAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : endAngle;\n };\n\n arc.padAngle = function(_) {\n return arguments.length ? (padAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : padAngle;\n };\n\n arc.context = function(_) {\n return arguments.length ? ((context = _ == null ? null : _), arc) : context;\n };\n\n return arc;\n}\n","function Linear(context) {\n this._context = context;\n}\n\nLinear.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; // proceed\n default: this._context.lineTo(x, y); break;\n }\n }\n};\n\nexport default function(context) {\n return new Linear(context);\n}\n","export function x(p) {\n return p[0];\n}\n\nexport function y(p) {\n return p[1];\n}\n","import {path} from \"d3-path\";\nimport constant from \"./constant\";\nimport curveLinear from \"./curve/linear\";\nimport {x as pointX, y as pointY} from \"./point\";\n\nexport default function() {\n var x = pointX,\n y = pointY,\n defined = constant(true),\n context = null,\n curve = curveLinear,\n output = null;\n\n function line(data) {\n var i,\n n = data.length,\n d,\n defined0 = false,\n buffer;\n\n if (context == null) output = curve(buffer = path());\n\n for (i = 0; i <= n; ++i) {\n if (!(i < n && defined(d = data[i], i, data)) === defined0) {\n if (defined0 = !defined0) output.lineStart();\n else output.lineEnd();\n }\n if (defined0) output.point(+x(d, i, data), +y(d, i, data));\n }\n\n if (buffer) return output = null, buffer + \"\" || null;\n }\n\n line.x = function(_) {\n return arguments.length ? (x = typeof _ === \"function\" ? _ : constant(+_), line) : x;\n };\n\n line.y = function(_) {\n return arguments.length ? (y = typeof _ === \"function\" ? _ : constant(+_), line) : y;\n };\n\n line.defined = function(_) {\n return arguments.length ? (defined = typeof _ === \"function\" ? _ : constant(!!_), line) : defined;\n };\n\n line.curve = function(_) {\n return arguments.length ? (curve = _, context != null && (output = curve(context)), line) : curve;\n };\n\n line.context = function(_) {\n return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), line) : context;\n };\n\n return line;\n}\n","import {path} from \"d3-path\";\nimport constant from \"./constant\";\nimport curveLinear from \"./curve/linear\";\nimport line from \"./line\";\nimport {x as pointX, y as pointY} from \"./point\";\n\nexport default function() {\n var x0 = pointX,\n x1 = null,\n y0 = constant(0),\n y1 = pointY,\n defined = constant(true),\n context = null,\n curve = curveLinear,\n output = null;\n\n function area(data) {\n var i,\n j,\n k,\n n = data.length,\n d,\n defined0 = false,\n buffer,\n x0z = new Array(n),\n y0z = new Array(n);\n\n if (context == null) output = curve(buffer = path());\n\n for (i = 0; i <= n; ++i) {\n if (!(i < n && defined(d = data[i], i, data)) === defined0) {\n if (defined0 = !defined0) {\n j = i;\n output.areaStart();\n output.lineStart();\n } else {\n output.lineEnd();\n output.lineStart();\n for (k = i - 1; k >= j; --k) {\n output.point(x0z[k], y0z[k]);\n }\n output.lineEnd();\n output.areaEnd();\n }\n }\n if (defined0) {\n x0z[i] = +x0(d, i, data), y0z[i] = +y0(d, i, data);\n output.point(x1 ? +x1(d, i, data) : x0z[i], y1 ? +y1(d, i, data) : y0z[i]);\n }\n }\n\n if (buffer) return output = null, buffer + \"\" || null;\n }\n\n function arealine() {\n return line().defined(defined).curve(curve).context(context);\n }\n\n area.x = function(_) {\n return arguments.length ? (x0 = typeof _ === \"function\" ? _ : constant(+_), x1 = null, area) : x0;\n };\n\n area.x0 = function(_) {\n return arguments.length ? (x0 = typeof _ === \"function\" ? _ : constant(+_), area) : x0;\n };\n\n area.x1 = function(_) {\n return arguments.length ? (x1 = _ == null ? null : typeof _ === \"function\" ? _ : constant(+_), area) : x1;\n };\n\n area.y = function(_) {\n return arguments.length ? (y0 = typeof _ === \"function\" ? _ : constant(+_), y1 = null, area) : y0;\n };\n\n area.y0 = function(_) {\n return arguments.length ? (y0 = typeof _ === \"function\" ? _ : constant(+_), area) : y0;\n };\n\n area.y1 = function(_) {\n return arguments.length ? (y1 = _ == null ? null : typeof _ === \"function\" ? _ : constant(+_), area) : y1;\n };\n\n area.lineX0 =\n area.lineY0 = function() {\n return arealine().x(x0).y(y0);\n };\n\n area.lineY1 = function() {\n return arealine().x(x0).y(y1);\n };\n\n area.lineX1 = function() {\n return arealine().x(x1).y(y0);\n };\n\n area.defined = function(_) {\n return arguments.length ? (defined = typeof _ === \"function\" ? _ : constant(!!_), area) : defined;\n };\n\n area.curve = function(_) {\n return arguments.length ? (curve = _, context != null && (output = curve(context)), area) : curve;\n };\n\n area.context = function(_) {\n return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), area) : context;\n };\n\n return area;\n}\n","export default function(a, b) {\n return b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN;\n}\n","export default function(d) {\n return d;\n}\n","import curveLinear from \"./linear\";\n\nexport var curveRadialLinear = curveRadial(curveLinear);\n\nfunction Radial(curve) {\n this._curve = curve;\n}\n\nRadial.prototype = {\n areaStart: function() {\n this._curve.areaStart();\n },\n areaEnd: function() {\n this._curve.areaEnd();\n },\n lineStart: function() {\n this._curve.lineStart();\n },\n lineEnd: function() {\n this._curve.lineEnd();\n },\n point: function(a, r) {\n this._curve.point(r * Math.sin(a), r * -Math.cos(a));\n }\n};\n\nexport default function curveRadial(curve) {\n\n function radial(context) {\n return new Radial(curve(context));\n }\n\n radial._curve = curve;\n\n return radial;\n}\n","import curveRadial, {curveRadialLinear} from \"./curve/radial\";\nimport line from \"./line\";\n\nexport function lineRadial(l) {\n var c = l.curve;\n\n l.angle = l.x, delete l.x;\n l.radius = l.y, delete l.y;\n\n l.curve = function(_) {\n return arguments.length ? c(curveRadial(_)) : c()._curve;\n };\n\n return l;\n}\n\nexport default function() {\n return lineRadial(line().curve(curveRadialLinear));\n}\n","export var slice = Array.prototype.slice;\n","import {pi, tau} from \"../math\";\n\nexport default {\n draw: function(context, size) {\n var r = Math.sqrt(size / pi);\n context.moveTo(r, 0);\n context.arc(0, 0, r, 0, tau);\n }\n};\n","export default {\n draw: function(context, size) {\n var r = Math.sqrt(size / 5) / 2;\n context.moveTo(-3 * r, -r);\n context.lineTo(-r, -r);\n context.lineTo(-r, -3 * r);\n context.lineTo(r, -3 * r);\n context.lineTo(r, -r);\n context.lineTo(3 * r, -r);\n context.lineTo(3 * r, r);\n context.lineTo(r, r);\n context.lineTo(r, 3 * r);\n context.lineTo(-r, 3 * r);\n context.lineTo(-r, r);\n context.lineTo(-3 * r, r);\n context.closePath();\n }\n};\n","var tan30 = Math.sqrt(1 / 3),\n tan30_2 = tan30 * 2;\n\nexport default {\n draw: function(context, size) {\n var y = Math.sqrt(size / tan30_2),\n x = y * tan30;\n context.moveTo(0, -y);\n context.lineTo(x, 0);\n context.lineTo(0, y);\n context.lineTo(-x, 0);\n context.closePath();\n }\n};\n","import {pi, tau} from \"../math\";\n\nvar ka = 0.89081309152928522810,\n kr = Math.sin(pi / 10) / Math.sin(7 * pi / 10),\n kx = Math.sin(tau / 10) * kr,\n ky = -Math.cos(tau / 10) * kr;\n\nexport default {\n draw: function(context, size) {\n var r = Math.sqrt(size * ka),\n x = kx * r,\n y = ky * r;\n context.moveTo(0, -r);\n context.lineTo(x, y);\n for (var i = 1; i < 5; ++i) {\n var a = tau * i / 5,\n c = Math.cos(a),\n s = Math.sin(a);\n context.lineTo(s * r, -c * r);\n context.lineTo(c * x - s * y, s * x + c * y);\n }\n context.closePath();\n }\n};\n","export default {\n draw: function(context, size) {\n var w = Math.sqrt(size),\n x = -w / 2;\n context.rect(x, x, w, w);\n }\n};\n","var sqrt3 = Math.sqrt(3);\n\nexport default {\n draw: function(context, size) {\n var y = -Math.sqrt(size / (sqrt3 * 3));\n context.moveTo(0, y * 2);\n context.lineTo(-sqrt3 * y, -y);\n context.lineTo(sqrt3 * y, -y);\n context.closePath();\n }\n};\n","var c = -0.5,\n s = Math.sqrt(3) / 2,\n k = 1 / Math.sqrt(12),\n a = (k / 2 + 1) * 3;\n\nexport default {\n draw: function(context, size) {\n var r = Math.sqrt(size / a),\n x0 = r / 2,\n y0 = r * k,\n x1 = x0,\n y1 = r * k + r,\n x2 = -x1,\n y2 = y1;\n context.moveTo(x0, y0);\n context.lineTo(x1, y1);\n context.lineTo(x2, y2);\n context.lineTo(c * x0 - s * y0, s * x0 + c * y0);\n context.lineTo(c * x1 - s * y1, s * x1 + c * y1);\n context.lineTo(c * x2 - s * y2, s * x2 + c * y2);\n context.lineTo(c * x0 + s * y0, c * y0 - s * x0);\n context.lineTo(c * x1 + s * y1, c * y1 - s * x1);\n context.lineTo(c * x2 + s * y2, c * y2 - s * x2);\n context.closePath();\n }\n};\n","export default function() {}\n","export function point(that, x, y) {\n that._context.bezierCurveTo(\n (2 * that._x0 + that._x1) / 3,\n (2 * that._y0 + that._y1) / 3,\n (that._x0 + 2 * that._x1) / 3,\n (that._y0 + 2 * that._y1) / 3,\n (that._x0 + 4 * that._x1 + x) / 6,\n (that._y0 + 4 * that._y1 + y) / 6\n );\n}\n\nexport function Basis(context) {\n this._context = context;\n}\n\nBasis.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 =\n this._y0 = this._y1 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 3: point(this, this._x1, this._y1); // proceed\n case 2: this._context.lineTo(this._x1, this._y1); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; this._context.lineTo((5 * this._x0 + this._x1) / 6, (5 * this._y0 + this._y1) / 6); // proceed\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n }\n};\n\nexport default function(context) {\n return new Basis(context);\n}\n","import noop from \"../noop\";\nimport {point} from \"./basis\";\n\nfunction BasisClosed(context) {\n this._context = context;\n}\n\nBasisClosed.prototype = {\n areaStart: noop,\n areaEnd: noop,\n lineStart: function() {\n this._x0 = this._x1 = this._x2 = this._x3 = this._x4 =\n this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 1: {\n this._context.moveTo(this._x2, this._y2);\n this._context.closePath();\n break;\n }\n case 2: {\n this._context.moveTo((this._x2 + 2 * this._x3) / 3, (this._y2 + 2 * this._y3) / 3);\n this._context.lineTo((this._x3 + 2 * this._x2) / 3, (this._y3 + 2 * this._y2) / 3);\n this._context.closePath();\n break;\n }\n case 3: {\n this.point(this._x2, this._y2);\n this.point(this._x3, this._y3);\n this.point(this._x4, this._y4);\n break;\n }\n }\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._x2 = x, this._y2 = y; break;\n case 1: this._point = 2; this._x3 = x, this._y3 = y; break;\n case 2: this._point = 3; this._x4 = x, this._y4 = y; this._context.moveTo((this._x0 + 4 * this._x1 + x) / 6, (this._y0 + 4 * this._y1 + y) / 6); break;\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n }\n};\n\nexport default function(context) {\n return new BasisClosed(context);\n}\n","import {point} from \"./basis\";\n\nfunction BasisOpen(context) {\n this._context = context;\n}\n\nBasisOpen.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 =\n this._y0 = this._y1 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; var x0 = (this._x0 + 4 * this._x1 + x) / 6, y0 = (this._y0 + 4 * this._y1 + y) / 6; this._line ? this._context.lineTo(x0, y0) : this._context.moveTo(x0, y0); break;\n case 3: this._point = 4; // proceed\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n }\n};\n\nexport default function(context) {\n return new BasisOpen(context);\n}\n","import {Basis} from \"./basis\";\n\nfunction Bundle(context, beta) {\n this._basis = new Basis(context);\n this._beta = beta;\n}\n\nBundle.prototype = {\n lineStart: function() {\n this._x = [];\n this._y = [];\n this._basis.lineStart();\n },\n lineEnd: function() {\n var x = this._x,\n y = this._y,\n j = x.length - 1;\n\n if (j > 0) {\n var x0 = x[0],\n y0 = y[0],\n dx = x[j] - x0,\n dy = y[j] - y0,\n i = -1,\n t;\n\n while (++i <= j) {\n t = i / j;\n this._basis.point(\n this._beta * x[i] + (1 - this._beta) * (x0 + t * dx),\n this._beta * y[i] + (1 - this._beta) * (y0 + t * dy)\n );\n }\n }\n\n this._x = this._y = null;\n this._basis.lineEnd();\n },\n point: function(x, y) {\n this._x.push(+x);\n this._y.push(+y);\n }\n};\n\nexport default (function custom(beta) {\n\n function bundle(context) {\n return beta === 1 ? new Basis(context) : new Bundle(context, beta);\n }\n\n bundle.beta = function(beta) {\n return custom(+beta);\n };\n\n return bundle;\n})(0.85);\n","export function point(that, x, y) {\n that._context.bezierCurveTo(\n that._x1 + that._k * (that._x2 - that._x0),\n that._y1 + that._k * (that._y2 - that._y0),\n that._x2 + that._k * (that._x1 - x),\n that._y2 + that._k * (that._y1 - y),\n that._x2,\n that._y2\n );\n}\n\nexport function Cardinal(context, tension) {\n this._context = context;\n this._k = (1 - tension) / 6;\n}\n\nCardinal.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 2: this._context.lineTo(this._x2, this._y2); break;\n case 3: point(this, this._x1, this._y1); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; this._x1 = x, this._y1 = y; break;\n case 2: this._point = 3; // proceed\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(tension) {\n\n function cardinal(context) {\n return new Cardinal(context, tension);\n }\n\n cardinal.tension = function(tension) {\n return custom(+tension);\n };\n\n return cardinal;\n})(0);\n","import noop from \"../noop\";\nimport {point} from \"./cardinal\";\n\nexport function CardinalClosed(context, tension) {\n this._context = context;\n this._k = (1 - tension) / 6;\n}\n\nCardinalClosed.prototype = {\n areaStart: noop,\n areaEnd: noop,\n lineStart: function() {\n this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = this._x5 =\n this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = this._y5 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 1: {\n this._context.moveTo(this._x3, this._y3);\n this._context.closePath();\n break;\n }\n case 2: {\n this._context.lineTo(this._x3, this._y3);\n this._context.closePath();\n break;\n }\n case 3: {\n this.point(this._x3, this._y3);\n this.point(this._x4, this._y4);\n this.point(this._x5, this._y5);\n break;\n }\n }\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._x3 = x, this._y3 = y; break;\n case 1: this._point = 2; this._context.moveTo(this._x4 = x, this._y4 = y); break;\n case 2: this._point = 3; this._x5 = x, this._y5 = y; break;\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(tension) {\n\n function cardinal(context) {\n return new CardinalClosed(context, tension);\n }\n\n cardinal.tension = function(tension) {\n return custom(+tension);\n };\n\n return cardinal;\n})(0);\n","import {point} from \"./cardinal\";\n\nexport function CardinalOpen(context, tension) {\n this._context = context;\n this._k = (1 - tension) / 6;\n}\n\nCardinalOpen.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; this._line ? this._context.lineTo(this._x2, this._y2) : this._context.moveTo(this._x2, this._y2); break;\n case 3: this._point = 4; // proceed\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(tension) {\n\n function cardinal(context) {\n return new CardinalOpen(context, tension);\n }\n\n cardinal.tension = function(tension) {\n return custom(+tension);\n };\n\n return cardinal;\n})(0);\n","import {epsilon} from \"../math\";\nimport {Cardinal} from \"./cardinal\";\n\nexport function point(that, x, y) {\n var x1 = that._x1,\n y1 = that._y1,\n x2 = that._x2,\n y2 = that._y2;\n\n if (that._l01_a > epsilon) {\n var a = 2 * that._l01_2a + 3 * that._l01_a * that._l12_a + that._l12_2a,\n n = 3 * that._l01_a * (that._l01_a + that._l12_a);\n x1 = (x1 * a - that._x0 * that._l12_2a + that._x2 * that._l01_2a) / n;\n y1 = (y1 * a - that._y0 * that._l12_2a + that._y2 * that._l01_2a) / n;\n }\n\n if (that._l23_a > epsilon) {\n var b = 2 * that._l23_2a + 3 * that._l23_a * that._l12_a + that._l12_2a,\n m = 3 * that._l23_a * (that._l23_a + that._l12_a);\n x2 = (x2 * b + that._x1 * that._l23_2a - x * that._l12_2a) / m;\n y2 = (y2 * b + that._y1 * that._l23_2a - y * that._l12_2a) / m;\n }\n\n that._context.bezierCurveTo(x1, y1, x2, y2, that._x2, that._y2);\n}\n\nfunction CatmullRom(context, alpha) {\n this._context = context;\n this._alpha = alpha;\n}\n\nCatmullRom.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._l01_a = this._l12_a = this._l23_a =\n this._l01_2a = this._l12_2a = this._l23_2a =\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 2: this._context.lineTo(this._x2, this._y2); break;\n case 3: this.point(this._x2, this._y2); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n\n if (this._point) {\n var x23 = this._x2 - x,\n y23 = this._y2 - y;\n this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));\n }\n\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; // proceed\n default: point(this, x, y); break;\n }\n\n this._l01_a = this._l12_a, this._l12_a = this._l23_a;\n this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(alpha) {\n\n function catmullRom(context) {\n return alpha ? new CatmullRom(context, alpha) : new Cardinal(context, 0);\n }\n\n catmullRom.alpha = function(alpha) {\n return custom(+alpha);\n };\n\n return catmullRom;\n})(0.5);\n","import {CardinalClosed} from \"./cardinalClosed\";\nimport noop from \"../noop\";\nimport {point} from \"./catmullRom\";\n\nfunction CatmullRomClosed(context, alpha) {\n this._context = context;\n this._alpha = alpha;\n}\n\nCatmullRomClosed.prototype = {\n areaStart: noop,\n areaEnd: noop,\n lineStart: function() {\n this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = this._x5 =\n this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = this._y5 = NaN;\n this._l01_a = this._l12_a = this._l23_a =\n this._l01_2a = this._l12_2a = this._l23_2a =\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 1: {\n this._context.moveTo(this._x3, this._y3);\n this._context.closePath();\n break;\n }\n case 2: {\n this._context.lineTo(this._x3, this._y3);\n this._context.closePath();\n break;\n }\n case 3: {\n this.point(this._x3, this._y3);\n this.point(this._x4, this._y4);\n this.point(this._x5, this._y5);\n break;\n }\n }\n },\n point: function(x, y) {\n x = +x, y = +y;\n\n if (this._point) {\n var x23 = this._x2 - x,\n y23 = this._y2 - y;\n this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));\n }\n\n switch (this._point) {\n case 0: this._point = 1; this._x3 = x, this._y3 = y; break;\n case 1: this._point = 2; this._context.moveTo(this._x4 = x, this._y4 = y); break;\n case 2: this._point = 3; this._x5 = x, this._y5 = y; break;\n default: point(this, x, y); break;\n }\n\n this._l01_a = this._l12_a, this._l12_a = this._l23_a;\n this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(alpha) {\n\n function catmullRom(context) {\n return alpha ? new CatmullRomClosed(context, alpha) : new CardinalClosed(context, 0);\n }\n\n catmullRom.alpha = function(alpha) {\n return custom(+alpha);\n };\n\n return catmullRom;\n})(0.5);\n","import {CardinalOpen} from \"./cardinalOpen\";\nimport {point} from \"./catmullRom\";\n\nfunction CatmullRomOpen(context, alpha) {\n this._context = context;\n this._alpha = alpha;\n}\n\nCatmullRomOpen.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._l01_a = this._l12_a = this._l23_a =\n this._l01_2a = this._l12_2a = this._l23_2a =\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n\n if (this._point) {\n var x23 = this._x2 - x,\n y23 = this._y2 - y;\n this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));\n }\n\n switch (this._point) {\n case 0: this._point = 1; break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; this._line ? this._context.lineTo(this._x2, this._y2) : this._context.moveTo(this._x2, this._y2); break;\n case 3: this._point = 4; // proceed\n default: point(this, x, y); break;\n }\n\n this._l01_a = this._l12_a, this._l12_a = this._l23_a;\n this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(alpha) {\n\n function catmullRom(context) {\n return alpha ? new CatmullRomOpen(context, alpha) : new CardinalOpen(context, 0);\n }\n\n catmullRom.alpha = function(alpha) {\n return custom(+alpha);\n };\n\n return catmullRom;\n})(0.5);\n","import noop from \"../noop\";\n\nfunction LinearClosed(context) {\n this._context = context;\n}\n\nLinearClosed.prototype = {\n areaStart: noop,\n areaEnd: noop,\n lineStart: function() {\n this._point = 0;\n },\n lineEnd: function() {\n if (this._point) this._context.closePath();\n },\n point: function(x, y) {\n x = +x, y = +y;\n if (this._point) this._context.lineTo(x, y);\n else this._point = 1, this._context.moveTo(x, y);\n }\n};\n\nexport default function(context) {\n return new LinearClosed(context);\n}\n","function sign(x) {\n return x < 0 ? -1 : 1;\n}\n\n// Calculate the slopes of the tangents (Hermite-type interpolation) based on\n// the following paper: Steffen, M. 1990. A Simple Method for Monotonic\n// Interpolation in One Dimension. Astronomy and Astrophysics, Vol. 239, NO.\n// NOV(II), P. 443, 1990.\nfunction slope3(that, x2, y2) {\n var h0 = that._x1 - that._x0,\n h1 = x2 - that._x1,\n s0 = (that._y1 - that._y0) / (h0 || h1 < 0 && -0),\n s1 = (y2 - that._y1) / (h1 || h0 < 0 && -0),\n p = (s0 * h1 + s1 * h0) / (h0 + h1);\n return (sign(s0) + sign(s1)) * Math.min(Math.abs(s0), Math.abs(s1), 0.5 * Math.abs(p)) || 0;\n}\n\n// Calculate a one-sided slope.\nfunction slope2(that, t) {\n var h = that._x1 - that._x0;\n return h ? (3 * (that._y1 - that._y0) / h - t) / 2 : t;\n}\n\n// According to https://en.wikipedia.org/wiki/Cubic_Hermite_spline#Representations\n// \"you can express cubic Hermite interpolation in terms of cubic Bézier curves\n// with respect to the four values p0, p0 + m0 / 3, p1 - m1 / 3, p1\".\nfunction point(that, t0, t1) {\n var x0 = that._x0,\n y0 = that._y0,\n x1 = that._x1,\n y1 = that._y1,\n dx = (x1 - x0) / 3;\n that._context.bezierCurveTo(x0 + dx, y0 + dx * t0, x1 - dx, y1 - dx * t1, x1, y1);\n}\n\nfunction MonotoneX(context) {\n this._context = context;\n}\n\nMonotoneX.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 =\n this._y0 = this._y1 =\n this._t0 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 2: this._context.lineTo(this._x1, this._y1); break;\n case 3: point(this, this._t0, slope2(this, this._t0)); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n var t1 = NaN;\n\n x = +x, y = +y;\n if (x === this._x1 && y === this._y1) return; // Ignore coincident points.\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; point(this, slope2(this, t1 = slope3(this, x, y)), t1); break;\n default: point(this, this._t0, t1 = slope3(this, x, y)); break;\n }\n\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n this._t0 = t1;\n }\n}\n\nfunction MonotoneY(context) {\n this._context = new ReflectContext(context);\n}\n\n(MonotoneY.prototype = Object.create(MonotoneX.prototype)).point = function(x, y) {\n MonotoneX.prototype.point.call(this, y, x);\n};\n\nfunction ReflectContext(context) {\n this._context = context;\n}\n\nReflectContext.prototype = {\n moveTo: function(x, y) { this._context.moveTo(y, x); },\n closePath: function() { this._context.closePath(); },\n lineTo: function(x, y) { this._context.lineTo(y, x); },\n bezierCurveTo: function(x1, y1, x2, y2, x, y) { this._context.bezierCurveTo(y1, x1, y2, x2, y, x); }\n};\n\nexport function monotoneX(context) {\n return new MonotoneX(context);\n}\n\nexport function monotoneY(context) {\n return new MonotoneY(context);\n}\n","function Natural(context) {\n this._context = context;\n}\n\nNatural.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x = [];\n this._y = [];\n },\n lineEnd: function() {\n var x = this._x,\n y = this._y,\n n = x.length;\n\n if (n) {\n this._line ? this._context.lineTo(x[0], y[0]) : this._context.moveTo(x[0], y[0]);\n if (n === 2) {\n this._context.lineTo(x[1], y[1]);\n } else {\n var px = controlPoints(x),\n py = controlPoints(y);\n for (var i0 = 0, i1 = 1; i1 < n; ++i0, ++i1) {\n this._context.bezierCurveTo(px[0][i0], py[0][i0], px[1][i0], py[1][i0], x[i1], y[i1]);\n }\n }\n }\n\n if (this._line || (this._line !== 0 && n === 1)) this._context.closePath();\n this._line = 1 - this._line;\n this._x = this._y = null;\n },\n point: function(x, y) {\n this._x.push(+x);\n this._y.push(+y);\n }\n};\n\n// See https://www.particleincell.com/2012/bezier-splines/ for derivation.\nfunction controlPoints(x) {\n var i,\n n = x.length - 1,\n m,\n a = new Array(n),\n b = new Array(n),\n r = new Array(n);\n a[0] = 0, b[0] = 2, r[0] = x[0] + 2 * x[1];\n for (i = 1; i < n - 1; ++i) a[i] = 1, b[i] = 4, r[i] = 4 * x[i] + 2 * x[i + 1];\n a[n - 1] = 2, b[n - 1] = 7, r[n - 1] = 8 * x[n - 1] + x[n];\n for (i = 1; i < n; ++i) m = a[i] / b[i - 1], b[i] -= m, r[i] -= m * r[i - 1];\n a[n - 1] = r[n - 1] / b[n - 1];\n for (i = n - 2; i >= 0; --i) a[i] = (r[i] - a[i + 1]) / b[i];\n b[n - 1] = (x[n] + a[n - 1]) / 2;\n for (i = 0; i < n - 1; ++i) b[i] = 2 * x[i + 1] - a[i + 1];\n return [a, b];\n}\n\nexport default function(context) {\n return new Natural(context);\n}\n","function Step(context, t) {\n this._context = context;\n this._t = t;\n}\n\nStep.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x = this._y = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n if (0 < this._t && this._t < 1 && this._point === 2) this._context.lineTo(this._x, this._y);\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n if (this._line >= 0) this._t = 1 - this._t, this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; // proceed\n default: {\n if (this._t <= 0) {\n this._context.lineTo(this._x, y);\n this._context.lineTo(x, y);\n } else {\n var x1 = this._x * (1 - this._t) + x * this._t;\n this._context.lineTo(x1, this._y);\n this._context.lineTo(x1, y);\n }\n break;\n }\n }\n this._x = x, this._y = y;\n }\n};\n\nexport default function(context) {\n return new Step(context, 0.5);\n}\n\nexport function stepBefore(context) {\n return new Step(context, 0);\n}\n\nexport function stepAfter(context) {\n return new Step(context, 1);\n}\n","export default function(series, order) {\n if (!((n = series.length) > 1)) return;\n for (var i = 1, j, s0, s1 = series[order[0]], n, m = s1.length; i < n; ++i) {\n s0 = s1, s1 = series[order[i]];\n for (j = 0; j < m; ++j) {\n s1[j][1] += s1[j][0] = isNaN(s0[j][1]) ? s0[j][0] : s0[j][1];\n }\n }\n}\n","export default function(series) {\n var n = series.length, o = new Array(n);\n while (--n >= 0) o[n] = n;\n return o;\n}\n","import {slice} from \"./array\";\nimport constant from \"./constant\";\nimport offsetNone from \"./offset/none\";\nimport orderNone from \"./order/none\";\n\nfunction stackValue(d, key) {\n return d[key];\n}\n\nexport default function() {\n var keys = constant([]),\n order = orderNone,\n offset = offsetNone,\n value = stackValue;\n\n function stack(data) {\n var kz = keys.apply(this, arguments),\n i,\n m = data.length,\n n = kz.length,\n sz = new Array(n),\n oz;\n\n for (i = 0; i < n; ++i) {\n for (var ki = kz[i], si = sz[i] = new Array(m), j = 0, sij; j < m; ++j) {\n si[j] = sij = [0, +value(data[j], ki, j, data)];\n sij.data = data[j];\n }\n si.key = ki;\n }\n\n for (i = 0, oz = order(sz); i < n; ++i) {\n sz[oz[i]].index = i;\n }\n\n offset(sz, oz);\n return sz;\n }\n\n stack.keys = function(_) {\n return arguments.length ? (keys = typeof _ === \"function\" ? _ : constant(slice.call(_)), stack) : keys;\n };\n\n stack.value = function(_) {\n return arguments.length ? (value = typeof _ === \"function\" ? _ : constant(+_), stack) : value;\n };\n\n stack.order = function(_) {\n return arguments.length ? (order = _ == null ? orderNone : typeof _ === \"function\" ? _ : constant(slice.call(_)), stack) : order;\n };\n\n stack.offset = function(_) {\n return arguments.length ? (offset = _ == null ? offsetNone : _, stack) : offset;\n };\n\n return stack;\n}\n","import none from \"./none\";\n\nexport default function(series) {\n var sums = series.map(sum);\n return none(series).sort(function(a, b) { return sums[a] - sums[b]; });\n}\n\nexport function sum(series) {\n var s = 0, i = -1, n = series.length, v;\n while (++i < n) if (v = +series[i][1]) s += v;\n return s;\n}\n","export function cubicIn(t) {\n return t * t * t;\n}\n\nexport function cubicOut(t) {\n return --t * t * t + 1;\n}\n\nexport function cubicInOut(t) {\n return ((t *= 2) <= 1 ? t * t * t : (t -= 2) * t * t + 2) / 2;\n}\n","var exponent = 3;\n\nexport var polyIn = (function custom(e) {\n e = +e;\n\n function polyIn(t) {\n return Math.pow(t, e);\n }\n\n polyIn.exponent = custom;\n\n return polyIn;\n})(exponent);\n\nexport var polyOut = (function custom(e) {\n e = +e;\n\n function polyOut(t) {\n return 1 - Math.pow(1 - t, e);\n }\n\n polyOut.exponent = custom;\n\n return polyOut;\n})(exponent);\n\nexport var polyInOut = (function custom(e) {\n e = +e;\n\n function polyInOut(t) {\n return ((t *= 2) <= 1 ? Math.pow(t, e) : 2 - Math.pow(2 - t, e)) / 2;\n }\n\n polyInOut.exponent = custom;\n\n return polyInOut;\n})(exponent);\n","var pi = Math.PI,\n halfPi = pi / 2;\n\nexport function sinIn(t) {\n return 1 - Math.cos(t * halfPi);\n}\n\nexport function sinOut(t) {\n return Math.sin(t * halfPi);\n}\n\nexport function sinInOut(t) {\n return (1 - Math.cos(pi * t)) / 2;\n}\n","var b1 = 4 / 11,\n b2 = 6 / 11,\n b3 = 8 / 11,\n b4 = 3 / 4,\n b5 = 9 / 11,\n b6 = 10 / 11,\n b7 = 15 / 16,\n b8 = 21 / 22,\n b9 = 63 / 64,\n b0 = 1 / b1 / b1;\n\nexport function bounceIn(t) {\n return 1 - bounceOut(1 - t);\n}\n\nexport function bounceOut(t) {\n return (t = +t) < b1 ? b0 * t * t : t < b3 ? b0 * (t -= b2) * t + b4 : t < b6 ? b0 * (t -= b5) * t + b7 : b0 * (t -= b8) * t + b9;\n}\n\nexport function bounceInOut(t) {\n return ((t *= 2) <= 1 ? 1 - bounceOut(1 - t) : bounceOut(t - 1) + 1) / 2;\n}\n","var overshoot = 1.70158;\n\nexport var backIn = (function custom(s) {\n s = +s;\n\n function backIn(t) {\n return t * t * ((s + 1) * t - s);\n }\n\n backIn.overshoot = custom;\n\n return backIn;\n})(overshoot);\n\nexport var backOut = (function custom(s) {\n s = +s;\n\n function backOut(t) {\n return --t * t * ((s + 1) * t + s) + 1;\n }\n\n backOut.overshoot = custom;\n\n return backOut;\n})(overshoot);\n\nexport var backInOut = (function custom(s) {\n s = +s;\n\n function backInOut(t) {\n return ((t *= 2) < 1 ? t * t * ((s + 1) * t - s) : (t -= 2) * t * ((s + 1) * t + s) + 2) / 2;\n }\n\n backInOut.overshoot = custom;\n\n return backInOut;\n})(overshoot);\n","var tau = 2 * Math.PI,\n amplitude = 1,\n period = 0.3;\n\nexport var elasticIn = (function custom(a, p) {\n var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau);\n\n function elasticIn(t) {\n return a * Math.pow(2, 10 * --t) * Math.sin((s - t) / p);\n }\n\n elasticIn.amplitude = function(a) { return custom(a, p * tau); };\n elasticIn.period = function(p) { return custom(a, p); };\n\n return elasticIn;\n})(amplitude, period);\n\nexport var elasticOut = (function custom(a, p) {\n var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau);\n\n function elasticOut(t) {\n return 1 - a * Math.pow(2, -10 * (t = +t)) * Math.sin((t + s) / p);\n }\n\n elasticOut.amplitude = function(a) { return custom(a, p * tau); };\n elasticOut.period = function(p) { return custom(a, p); };\n\n return elasticOut;\n})(amplitude, period);\n\nexport var elasticInOut = (function custom(a, p) {\n var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau);\n\n function elasticInOut(t) {\n return ((t = t * 2 - 1) < 0\n ? a * Math.pow(2, 10 * t) * Math.sin((s - t) / p)\n : 2 - a * Math.pow(2, -10 * t) * Math.sin((s + t) / p)) / 2;\n }\n\n elasticInOut.amplitude = function(a) { return custom(a, p * tau); };\n elasticInOut.period = function(p) { return custom(a, p); };\n\n return elasticInOut;\n})(amplitude, period);\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","export function x(d) {\n return d[0];\n}\n\nexport function y(d) {\n return d[1];\n}\n","function RedBlackTree() {\n this._ = null; // root node\n}\n\nexport function RedBlackNode(node) {\n node.U = // parent node\n node.C = // color - true for red, false for black\n node.L = // left node\n node.R = // right node\n node.P = // previous node\n node.N = null; // next node\n}\n\nRedBlackTree.prototype = {\n constructor: RedBlackTree,\n\n insert: function(after, node) {\n var parent, grandpa, uncle;\n\n if (after) {\n node.P = after;\n node.N = after.N;\n if (after.N) after.N.P = node;\n after.N = node;\n if (after.R) {\n after = after.R;\n while (after.L) after = after.L;\n after.L = node;\n } else {\n after.R = node;\n }\n parent = after;\n } else if (this._) {\n after = RedBlackFirst(this._);\n node.P = null;\n node.N = after;\n after.P = after.L = node;\n parent = after;\n } else {\n node.P = node.N = null;\n this._ = node;\n parent = null;\n }\n node.L = node.R = null;\n node.U = parent;\n node.C = true;\n\n after = node;\n while (parent && parent.C) {\n grandpa = parent.U;\n if (parent === grandpa.L) {\n uncle = grandpa.R;\n if (uncle && uncle.C) {\n parent.C = uncle.C = false;\n grandpa.C = true;\n after = grandpa;\n } else {\n if (after === parent.R) {\n RedBlackRotateLeft(this, parent);\n after = parent;\n parent = after.U;\n }\n parent.C = false;\n grandpa.C = true;\n RedBlackRotateRight(this, grandpa);\n }\n } else {\n uncle = grandpa.L;\n if (uncle && uncle.C) {\n parent.C = uncle.C = false;\n grandpa.C = true;\n after = grandpa;\n } else {\n if (after === parent.L) {\n RedBlackRotateRight(this, parent);\n after = parent;\n parent = after.U;\n }\n parent.C = false;\n grandpa.C = true;\n RedBlackRotateLeft(this, grandpa);\n }\n }\n parent = after.U;\n }\n this._.C = false;\n },\n\n remove: function(node) {\n if (node.N) node.N.P = node.P;\n if (node.P) node.P.N = node.N;\n node.N = node.P = null;\n\n var parent = node.U,\n sibling,\n left = node.L,\n right = node.R,\n next,\n red;\n\n if (!left) next = right;\n else if (!right) next = left;\n else next = RedBlackFirst(right);\n\n if (parent) {\n if (parent.L === node) parent.L = next;\n else parent.R = next;\n } else {\n this._ = next;\n }\n\n if (left && right) {\n red = next.C;\n next.C = node.C;\n next.L = left;\n left.U = next;\n if (next !== right) {\n parent = next.U;\n next.U = node.U;\n node = next.R;\n parent.L = node;\n next.R = right;\n right.U = next;\n } else {\n next.U = parent;\n parent = next;\n node = next.R;\n }\n } else {\n red = node.C;\n node = next;\n }\n\n if (node) node.U = parent;\n if (red) return;\n if (node && node.C) { node.C = false; return; }\n\n do {\n if (node === this._) break;\n if (node === parent.L) {\n sibling = parent.R;\n if (sibling.C) {\n sibling.C = false;\n parent.C = true;\n RedBlackRotateLeft(this, parent);\n sibling = parent.R;\n }\n if ((sibling.L && sibling.L.C)\n || (sibling.R && sibling.R.C)) {\n if (!sibling.R || !sibling.R.C) {\n sibling.L.C = false;\n sibling.C = true;\n RedBlackRotateRight(this, sibling);\n sibling = parent.R;\n }\n sibling.C = parent.C;\n parent.C = sibling.R.C = false;\n RedBlackRotateLeft(this, parent);\n node = this._;\n break;\n }\n } else {\n sibling = parent.L;\n if (sibling.C) {\n sibling.C = false;\n parent.C = true;\n RedBlackRotateRight(this, parent);\n sibling = parent.L;\n }\n if ((sibling.L && sibling.L.C)\n || (sibling.R && sibling.R.C)) {\n if (!sibling.L || !sibling.L.C) {\n sibling.R.C = false;\n sibling.C = true;\n RedBlackRotateLeft(this, sibling);\n sibling = parent.L;\n }\n sibling.C = parent.C;\n parent.C = sibling.L.C = false;\n RedBlackRotateRight(this, parent);\n node = this._;\n break;\n }\n }\n sibling.C = true;\n node = parent;\n parent = parent.U;\n } while (!node.C);\n\n if (node) node.C = false;\n }\n};\n\nfunction RedBlackRotateLeft(tree, node) {\n var p = node,\n q = node.R,\n parent = p.U;\n\n if (parent) {\n if (parent.L === p) parent.L = q;\n else parent.R = q;\n } else {\n tree._ = q;\n }\n\n q.U = parent;\n p.U = q;\n p.R = q.L;\n if (p.R) p.R.U = p;\n q.L = p;\n}\n\nfunction RedBlackRotateRight(tree, node) {\n var p = node,\n q = node.L,\n parent = p.U;\n\n if (parent) {\n if (parent.L === p) parent.L = q;\n else parent.R = q;\n } else {\n tree._ = q;\n }\n\n q.U = parent;\n p.U = q;\n p.L = q.R;\n if (p.L) p.L.U = p;\n q.R = p;\n}\n\nfunction RedBlackFirst(node) {\n while (node.L) node = node.L;\n return node;\n}\n\nexport default RedBlackTree;\n","import {cells, edges, epsilon} from \"./Diagram\";\n\nexport function createEdge(left, right, v0, v1) {\n var edge = [null, null],\n index = edges.push(edge) - 1;\n edge.left = left;\n edge.right = right;\n if (v0) setEdgeEnd(edge, left, right, v0);\n if (v1) setEdgeEnd(edge, right, left, v1);\n cells[left.index].halfedges.push(index);\n cells[right.index].halfedges.push(index);\n return edge;\n}\n\nexport function createBorderEdge(left, v0, v1) {\n var edge = [v0, v1];\n edge.left = left;\n return edge;\n}\n\nexport function setEdgeEnd(edge, left, right, vertex) {\n if (!edge[0] && !edge[1]) {\n edge[0] = vertex;\n edge.left = left;\n edge.right = right;\n } else if (edge.left === right) {\n edge[1] = vertex;\n } else {\n edge[0] = vertex;\n }\n}\n\n// Liang–Barsky line clipping.\nfunction clipEdge(edge, x0, y0, x1, y1) {\n var a = edge[0],\n b = edge[1],\n ax = a[0],\n ay = a[1],\n bx = b[0],\n by = b[1],\n t0 = 0,\n t1 = 1,\n dx = bx - ax,\n dy = by - ay,\n r;\n\n r = x0 - ax;\n if (!dx && r > 0) return;\n r /= dx;\n if (dx < 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n } else if (dx > 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n }\n\n r = x1 - ax;\n if (!dx && r < 0) return;\n r /= dx;\n if (dx < 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n } else if (dx > 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n }\n\n r = y0 - ay;\n if (!dy && r > 0) return;\n r /= dy;\n if (dy < 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n } else if (dy > 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n }\n\n r = y1 - ay;\n if (!dy && r < 0) return;\n r /= dy;\n if (dy < 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n } else if (dy > 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n }\n\n if (!(t0 > 0) && !(t1 < 1)) return true; // TODO Better check?\n\n if (t0 > 0) edge[0] = [ax + t0 * dx, ay + t0 * dy];\n if (t1 < 1) edge[1] = [ax + t1 * dx, ay + t1 * dy];\n return true;\n}\n\nfunction connectEdge(edge, x0, y0, x1, y1) {\n var v1 = edge[1];\n if (v1) return true;\n\n var v0 = edge[0],\n left = edge.left,\n right = edge.right,\n lx = left[0],\n ly = left[1],\n rx = right[0],\n ry = right[1],\n fx = (lx + rx) / 2,\n fy = (ly + ry) / 2,\n fm,\n fb;\n\n if (ry === ly) {\n if (fx < x0 || fx >= x1) return;\n if (lx > rx) {\n if (!v0) v0 = [fx, y0];\n else if (v0[1] >= y1) return;\n v1 = [fx, y1];\n } else {\n if (!v0) v0 = [fx, y1];\n else if (v0[1] < y0) return;\n v1 = [fx, y0];\n }\n } else {\n fm = (lx - rx) / (ry - ly);\n fb = fy - fm * fx;\n if (fm < -1 || fm > 1) {\n if (lx > rx) {\n if (!v0) v0 = [(y0 - fb) / fm, y0];\n else if (v0[1] >= y1) return;\n v1 = [(y1 - fb) / fm, y1];\n } else {\n if (!v0) v0 = [(y1 - fb) / fm, y1];\n else if (v0[1] < y0) return;\n v1 = [(y0 - fb) / fm, y0];\n }\n } else {\n if (ly < ry) {\n if (!v0) v0 = [x0, fm * x0 + fb];\n else if (v0[0] >= x1) return;\n v1 = [x1, fm * x1 + fb];\n } else {\n if (!v0) v0 = [x1, fm * x1 + fb];\n else if (v0[0] < x0) return;\n v1 = [x0, fm * x0 + fb];\n }\n }\n }\n\n edge[0] = v0;\n edge[1] = v1;\n return true;\n}\n\nexport function clipEdges(x0, y0, x1, y1) {\n var i = edges.length,\n edge;\n\n while (i--) {\n if (!connectEdge(edge = edges[i], x0, y0, x1, y1)\n || !clipEdge(edge, x0, y0, x1, y1)\n || !(Math.abs(edge[0][0] - edge[1][0]) > epsilon\n || Math.abs(edge[0][1] - edge[1][1]) > epsilon)) {\n delete edges[i];\n }\n }\n}\n","import {createBorderEdge} from \"./Edge\";\nimport {cells, edges, epsilon} from \"./Diagram\";\n\nexport function createCell(site) {\n return cells[site.index] = {\n site: site,\n halfedges: []\n };\n}\n\nfunction cellHalfedgeAngle(cell, edge) {\n var site = cell.site,\n va = edge.left,\n vb = edge.right;\n if (site === vb) vb = va, va = site;\n if (vb) return Math.atan2(vb[1] - va[1], vb[0] - va[0]);\n if (site === va) va = edge[1], vb = edge[0];\n else va = edge[0], vb = edge[1];\n return Math.atan2(va[0] - vb[0], vb[1] - va[1]);\n}\n\nexport function cellHalfedgeStart(cell, edge) {\n return edge[+(edge.left !== cell.site)];\n}\n\nexport function cellHalfedgeEnd(cell, edge) {\n return edge[+(edge.left === cell.site)];\n}\n\nexport function sortCellHalfedges() {\n for (var i = 0, n = cells.length, cell, halfedges, j, m; i < n; ++i) {\n if ((cell = cells[i]) && (m = (halfedges = cell.halfedges).length)) {\n var index = new Array(m),\n array = new Array(m);\n for (j = 0; j < m; ++j) index[j] = j, array[j] = cellHalfedgeAngle(cell, edges[halfedges[j]]);\n index.sort(function(i, j) { return array[j] - array[i]; });\n for (j = 0; j < m; ++j) array[j] = halfedges[index[j]];\n for (j = 0; j < m; ++j) halfedges[j] = array[j];\n }\n }\n}\n\nexport function clipCells(x0, y0, x1, y1) {\n var nCells = cells.length,\n iCell,\n cell,\n site,\n iHalfedge,\n halfedges,\n nHalfedges,\n start,\n startX,\n startY,\n end,\n endX,\n endY,\n cover = true;\n\n for (iCell = 0; iCell < nCells; ++iCell) {\n if (cell = cells[iCell]) {\n site = cell.site;\n halfedges = cell.halfedges;\n iHalfedge = halfedges.length;\n\n // Remove any dangling clipped edges.\n while (iHalfedge--) {\n if (!edges[halfedges[iHalfedge]]) {\n halfedges.splice(iHalfedge, 1);\n }\n }\n\n // Insert any border edges as necessary.\n iHalfedge = 0, nHalfedges = halfedges.length;\n while (iHalfedge < nHalfedges) {\n end = cellHalfedgeEnd(cell, edges[halfedges[iHalfedge]]), endX = end[0], endY = end[1];\n start = cellHalfedgeStart(cell, edges[halfedges[++iHalfedge % nHalfedges]]), startX = start[0], startY = start[1];\n if (Math.abs(endX - startX) > epsilon || Math.abs(endY - startY) > epsilon) {\n halfedges.splice(iHalfedge, 0, edges.push(createBorderEdge(site, end,\n Math.abs(endX - x0) < epsilon && y1 - endY > epsilon ? [x0, Math.abs(startX - x0) < epsilon ? startY : y1]\n : Math.abs(endY - y1) < epsilon && x1 - endX > epsilon ? [Math.abs(startY - y1) < epsilon ? startX : x1, y1]\n : Math.abs(endX - x1) < epsilon && endY - y0 > epsilon ? [x1, Math.abs(startX - x1) < epsilon ? startY : y0]\n : Math.abs(endY - y0) < epsilon && endX - x0 > epsilon ? [Math.abs(startY - y0) < epsilon ? startX : x0, y0]\n : null)) - 1);\n ++nHalfedges;\n }\n }\n\n if (nHalfedges) cover = false;\n }\n }\n\n // If there weren’t any edges, have the closest site cover the extent.\n // It doesn’t matter which corner of the extent we measure!\n if (cover) {\n var dx, dy, d2, dc = Infinity;\n\n for (iCell = 0, cover = null; iCell < nCells; ++iCell) {\n if (cell = cells[iCell]) {\n site = cell.site;\n dx = site[0] - x0;\n dy = site[1] - y0;\n d2 = dx * dx + dy * dy;\n if (d2 < dc) dc = d2, cover = cell;\n }\n }\n\n if (cover) {\n var v00 = [x0, y0], v01 = [x0, y1], v11 = [x1, y1], v10 = [x1, y0];\n cover.halfedges.push(\n edges.push(createBorderEdge(site = cover.site, v00, v01)) - 1,\n edges.push(createBorderEdge(site, v01, v11)) - 1,\n edges.push(createBorderEdge(site, v11, v10)) - 1,\n edges.push(createBorderEdge(site, v10, v00)) - 1\n );\n }\n }\n\n // Lastly delete any cells with no edges; these were entirely clipped.\n for (iCell = 0; iCell < nCells; ++iCell) {\n if (cell = cells[iCell]) {\n if (!cell.halfedges.length) {\n delete cells[iCell];\n }\n }\n }\n}\n","import {RedBlackNode} from \"./RedBlackTree\";\nimport {circles, epsilon2} from \"./Diagram\";\n\nvar circlePool = [];\n\nexport var firstCircle;\n\nfunction Circle() {\n RedBlackNode(this);\n this.x =\n this.y =\n this.arc =\n this.site =\n this.cy = null;\n}\n\nexport function attachCircle(arc) {\n var lArc = arc.P,\n rArc = arc.N;\n\n if (!lArc || !rArc) return;\n\n var lSite = lArc.site,\n cSite = arc.site,\n rSite = rArc.site;\n\n if (lSite === rSite) return;\n\n var bx = cSite[0],\n by = cSite[1],\n ax = lSite[0] - bx,\n ay = lSite[1] - by,\n cx = rSite[0] - bx,\n cy = rSite[1] - by;\n\n var d = 2 * (ax * cy - ay * cx);\n if (d >= -epsilon2) return;\n\n var ha = ax * ax + ay * ay,\n hc = cx * cx + cy * cy,\n x = (cy * ha - ay * hc) / d,\n y = (ax * hc - cx * ha) / d;\n\n var circle = circlePool.pop() || new Circle;\n circle.arc = arc;\n circle.site = cSite;\n circle.x = x + bx;\n circle.y = (circle.cy = y + by) + Math.sqrt(x * x + y * y); // y bottom\n\n arc.circle = circle;\n\n var before = null,\n node = circles._;\n\n while (node) {\n if (circle.y < node.y || (circle.y === node.y && circle.x <= node.x)) {\n if (node.L) node = node.L;\n else { before = node.P; break; }\n } else {\n if (node.R) node = node.R;\n else { before = node; break; }\n }\n }\n\n circles.insert(before, circle);\n if (!before) firstCircle = circle;\n}\n\nexport function detachCircle(arc) {\n var circle = arc.circle;\n if (circle) {\n if (!circle.P) firstCircle = circle.N;\n circles.remove(circle);\n circlePool.push(circle);\n RedBlackNode(circle);\n arc.circle = null;\n }\n}\n","import {RedBlackNode} from \"./RedBlackTree\";\nimport {createCell} from \"./Cell\";\nimport {attachCircle, detachCircle} from \"./Circle\";\nimport {createEdge, setEdgeEnd} from \"./Edge\";\nimport {beaches, epsilon} from \"./Diagram\";\n\nvar beachPool = [];\n\nfunction Beach() {\n RedBlackNode(this);\n this.edge =\n this.site =\n this.circle = null;\n}\n\nfunction createBeach(site) {\n var beach = beachPool.pop() || new Beach;\n beach.site = site;\n return beach;\n}\n\nfunction detachBeach(beach) {\n detachCircle(beach);\n beaches.remove(beach);\n beachPool.push(beach);\n RedBlackNode(beach);\n}\n\nexport function removeBeach(beach) {\n var circle = beach.circle,\n x = circle.x,\n y = circle.cy,\n vertex = [x, y],\n previous = beach.P,\n next = beach.N,\n disappearing = [beach];\n\n detachBeach(beach);\n\n var lArc = previous;\n while (lArc.circle\n && Math.abs(x - lArc.circle.x) < epsilon\n && Math.abs(y - lArc.circle.cy) < epsilon) {\n previous = lArc.P;\n disappearing.unshift(lArc);\n detachBeach(lArc);\n lArc = previous;\n }\n\n disappearing.unshift(lArc);\n detachCircle(lArc);\n\n var rArc = next;\n while (rArc.circle\n && Math.abs(x - rArc.circle.x) < epsilon\n && Math.abs(y - rArc.circle.cy) < epsilon) {\n next = rArc.N;\n disappearing.push(rArc);\n detachBeach(rArc);\n rArc = next;\n }\n\n disappearing.push(rArc);\n detachCircle(rArc);\n\n var nArcs = disappearing.length,\n iArc;\n for (iArc = 1; iArc < nArcs; ++iArc) {\n rArc = disappearing[iArc];\n lArc = disappearing[iArc - 1];\n setEdgeEnd(rArc.edge, lArc.site, rArc.site, vertex);\n }\n\n lArc = disappearing[0];\n rArc = disappearing[nArcs - 1];\n rArc.edge = createEdge(lArc.site, rArc.site, null, vertex);\n\n attachCircle(lArc);\n attachCircle(rArc);\n}\n\nexport function addBeach(site) {\n var x = site[0],\n directrix = site[1],\n lArc,\n rArc,\n dxl,\n dxr,\n node = beaches._;\n\n while (node) {\n dxl = leftBreakPoint(node, directrix) - x;\n if (dxl > epsilon) node = node.L; else {\n dxr = x - rightBreakPoint(node, directrix);\n if (dxr > epsilon) {\n if (!node.R) {\n lArc = node;\n break;\n }\n node = node.R;\n } else {\n if (dxl > -epsilon) {\n lArc = node.P;\n rArc = node;\n } else if (dxr > -epsilon) {\n lArc = node;\n rArc = node.N;\n } else {\n lArc = rArc = node;\n }\n break;\n }\n }\n }\n\n createCell(site);\n var newArc = createBeach(site);\n beaches.insert(lArc, newArc);\n\n if (!lArc && !rArc) return;\n\n if (lArc === rArc) {\n detachCircle(lArc);\n rArc = createBeach(lArc.site);\n beaches.insert(newArc, rArc);\n newArc.edge = rArc.edge = createEdge(lArc.site, newArc.site);\n attachCircle(lArc);\n attachCircle(rArc);\n return;\n }\n\n if (!rArc) { // && lArc\n newArc.edge = createEdge(lArc.site, newArc.site);\n return;\n }\n\n // else lArc !== rArc\n detachCircle(lArc);\n detachCircle(rArc);\n\n var lSite = lArc.site,\n ax = lSite[0],\n ay = lSite[1],\n bx = site[0] - ax,\n by = site[1] - ay,\n rSite = rArc.site,\n cx = rSite[0] - ax,\n cy = rSite[1] - ay,\n d = 2 * (bx * cy - by * cx),\n hb = bx * bx + by * by,\n hc = cx * cx + cy * cy,\n vertex = [(cy * hb - by * hc) / d + ax, (bx * hc - cx * hb) / d + ay];\n\n setEdgeEnd(rArc.edge, lSite, rSite, vertex);\n newArc.edge = createEdge(lSite, site, null, vertex);\n rArc.edge = createEdge(site, rSite, null, vertex);\n attachCircle(lArc);\n attachCircle(rArc);\n}\n\nfunction leftBreakPoint(arc, directrix) {\n var site = arc.site,\n rfocx = site[0],\n rfocy = site[1],\n pby2 = rfocy - directrix;\n\n if (!pby2) return rfocx;\n\n var lArc = arc.P;\n if (!lArc) return -Infinity;\n\n site = lArc.site;\n var lfocx = site[0],\n lfocy = site[1],\n plby2 = lfocy - directrix;\n\n if (!plby2) return lfocx;\n\n var hl = lfocx - rfocx,\n aby2 = 1 / pby2 - 1 / plby2,\n b = hl / plby2;\n\n if (aby2) return (-b + Math.sqrt(b * b - 2 * aby2 * (hl * hl / (-2 * plby2) - lfocy + plby2 / 2 + rfocy - pby2 / 2))) / aby2 + rfocx;\n\n return (rfocx + lfocx) / 2;\n}\n\nfunction rightBreakPoint(arc, directrix) {\n var rArc = arc.N;\n if (rArc) return leftBreakPoint(rArc, directrix);\n var site = arc.site;\n return site[1] === directrix ? site[0] : Infinity;\n}\n","import {addBeach, removeBeach} from \"./Beach\";\nimport {sortCellHalfedges, cellHalfedgeStart, clipCells} from \"./Cell\";\nimport {firstCircle} from \"./Circle\";\nimport {clipEdges} from \"./Edge\";\nimport RedBlackTree from \"./RedBlackTree\";\n\nexport var epsilon = 1e-6;\nexport var epsilon2 = 1e-12;\nexport var beaches;\nexport var cells;\nexport var circles;\nexport var edges;\n\nfunction triangleArea(a, b, c) {\n return (a[0] - c[0]) * (b[1] - a[1]) - (a[0] - b[0]) * (c[1] - a[1]);\n}\n\nfunction lexicographic(a, b) {\n return b[1] - a[1]\n || b[0] - a[0];\n}\n\nexport default function Diagram(sites, extent) {\n var site = sites.sort(lexicographic).pop(),\n x,\n y,\n circle;\n\n edges = [];\n cells = new Array(sites.length);\n beaches = new RedBlackTree;\n circles = new RedBlackTree;\n\n while (true) {\n circle = firstCircle;\n if (site && (!circle || site[1] < circle.y || (site[1] === circle.y && site[0] < circle.x))) {\n if (site[0] !== x || site[1] !== y) {\n addBeach(site);\n x = site[0], y = site[1];\n }\n site = sites.pop();\n } else if (circle) {\n removeBeach(circle.arc);\n } else {\n break;\n }\n }\n\n sortCellHalfedges();\n\n if (extent) {\n var x0 = +extent[0][0],\n y0 = +extent[0][1],\n x1 = +extent[1][0],\n y1 = +extent[1][1];\n clipEdges(x0, y0, x1, y1);\n clipCells(x0, y0, x1, y1);\n }\n\n this.edges = edges;\n this.cells = cells;\n\n beaches =\n circles =\n edges =\n cells = null;\n}\n\nDiagram.prototype = {\n constructor: Diagram,\n\n polygons: function() {\n var edges = this.edges;\n\n return this.cells.map(function(cell) {\n var polygon = cell.halfedges.map(function(i) { return cellHalfedgeStart(cell, edges[i]); });\n polygon.data = cell.site.data;\n return polygon;\n });\n },\n\n triangles: function() {\n var triangles = [],\n edges = this.edges;\n\n this.cells.forEach(function(cell, i) {\n if (!(m = (halfedges = cell.halfedges).length)) return;\n var site = cell.site,\n halfedges,\n j = -1,\n m,\n s0,\n e1 = edges[halfedges[m - 1]],\n s1 = e1.left === site ? e1.right : e1.left;\n\n while (++j < m) {\n s0 = s1;\n e1 = edges[halfedges[j]];\n s1 = e1.left === site ? e1.right : e1.left;\n if (s0 && s1 && i < s0.index && i < s1.index && triangleArea(site, s0, s1) < 0) {\n triangles.push([site.data, s0.data, s1.data]);\n }\n }\n });\n\n return triangles;\n },\n\n links: function() {\n return this.edges.filter(function(edge) {\n return edge.right;\n }).map(function(edge) {\n return {\n source: edge.left.data,\n target: edge.right.data\n };\n });\n },\n\n find: function(x, y, radius) {\n var that = this, i0, i1 = that._found || 0, n = that.cells.length, cell;\n\n // Use the previously-found cell, or start with an arbitrary one.\n while (!(cell = that.cells[i1])) if (++i1 >= n) return null;\n var dx = x - cell.site[0], dy = y - cell.site[1], d2 = dx * dx + dy * dy;\n\n // Traverse the half-edges to find a closer cell, if any.\n do {\n cell = that.cells[i0 = i1], i1 = null;\n cell.halfedges.forEach(function(e) {\n var edge = that.edges[e], v = edge.left;\n if ((v === cell.site || !v) && !(v = edge.right)) return;\n var vx = x - v[0], vy = y - v[1], v2 = vx * vx + vy * vy;\n if (v2 < d2) d2 = v2, i1 = v.index;\n });\n } while (i1 !== null);\n\n that._found = i0;\n\n return radius == null || d2 <= radius * radius ? cell.site : null;\n }\n}\n","import constant from \"./constant\";\nimport {x as pointX, y as pointY} from \"./point\";\nimport Diagram, {epsilon} from \"./Diagram\";\n\nexport default function() {\n var x = pointX,\n y = pointY,\n extent = null;\n\n function voronoi(data) {\n return new Diagram(data.map(function(d, i) {\n var s = [Math.round(x(d, i, data) / epsilon) * epsilon, Math.round(y(d, i, data) / epsilon) * epsilon];\n s.index = i;\n s.data = d;\n return s;\n }), extent);\n }\n\n voronoi.polygons = function(data) {\n return voronoi(data).polygons();\n };\n\n voronoi.links = function(data) {\n return voronoi(data).links();\n };\n\n voronoi.triangles = function(data) {\n return voronoi(data).triangles();\n };\n\n voronoi.x = function(_) {\n return arguments.length ? (x = typeof _ === \"function\" ? _ : constant(+_), voronoi) : x;\n };\n\n voronoi.y = function(_) {\n return arguments.length ? (y = typeof _ === \"function\" ? _ : constant(+_), voronoi) : y;\n };\n\n voronoi.extent = function(_) {\n return arguments.length ? (extent = _ == null ? null : [[+_[0][0], +_[0][1]], [+_[1][0], +_[1][1]]], voronoi) : extent && [[extent[0][0], extent[0][1]], [extent[1][0], extent[1][1]]];\n };\n\n voronoi.size = function(_) {\n return arguments.length ? (extent = _ == null ? null : [[0, 0], [+_[0], +_[1]]], voronoi) : extent && [extent[1][0] - extent[0][0], extent[1][1] - extent[0][1]];\n };\n\n return voronoi;\n}\n","/* global window, requestAnimationFrame, cancelAnimationFrame */\nimport { FieldType, DimensionSubtype } from 'datamodel';\nimport {\n axisLeft,\n axisRight,\n axisTop,\n axisBottom\n} from 'd3-axis';\nimport {\n symbolCircle,\n symbolCross,\n symbolDiamond,\n symbolSquare,\n symbolStar,\n symbolWye,\n symbolTriangle,\n symbol,\n stack as d3Stack,\n stackOffsetDiverging,\n stackOrderNone,\n stackOrderAscending,\n stackOrderDescending,\n stackOffsetNone,\n stackOffsetExpand,\n stackOffsetWiggle,\n pie,\n arc,\n line,\n curveLinear,\n curveStepAfter,\n curveStepBefore,\n curveStep,\n curveCatmullRom,\n area\n} from 'd3-shape';\nimport { scaleBand } from 'd3-scale';\nimport { nest } from 'd3-collection';\nimport {\n interpolate,\n interpolateRgb,\n piecewise,\n interpolateNumber,\n interpolateHslLong\n} from 'd3-interpolate';\nimport {\n easeCubic,\n easeBounce,\n easePoly,\n easeBack,\n easeCircle,\n easeLinear,\n easeElastic\n} from 'd3-ease';\nimport {\n color,\n rgb,\n hsl\n} from 'd3-color';\nimport { voronoi } from 'd3-voronoi';\nimport Model from 'hyperdis';\nimport * as STACK_CONFIG from './enums/stack-config';\n\nconst HTMLElement = window.HTMLElement;\n\nconst isSimpleObject = (obj) => {\n let token;\n if (typeof obj === 'object') {\n if (obj === null) { return false; }\n token = Object.prototype.toString.call(obj);\n if (token === '[object Object]') {\n return (obj.constructor.toString().match(/^function (.*)\\(\\)/m) || [])[1] === 'Object';\n }\n }\n return false;\n};\n\n/**\n * Returns unique id\n * @return {string} Unique id string\n */\nconst\n getUniqueId = () => `id-${new Date().getTime()}${Math.round(Math.random() * 10000)}`;\n\n/**\n * Deep copies an object and returns a new object.\n * @param {Object} o Object to clone\n * @return {Object} New Object.\n */\nconst clone = (o) => {\n const output = {};\n let v;\n for (const key in o) {\n if ({}.hasOwnProperty.call(o, key)) {\n v = o[key];\n output[key] = isSimpleObject(v) ? clone(v) : v;\n }\n }\n return output;\n};\n\n/**\n* Checks the existence of keys in an object\n* @param {Array} keys Set of keys which are to be checked\n* @param {Object} obj whose keys are checked from the set of keys provided\n* @return {Object} Error if the keys are absent, or the object itself\n*/\nconst checkExistence = (keys, obj) => {\n const nonExistentKeys = [];\n keys.forEach((key) => {\n if (key in obj) {\n return;\n }\n nonExistentKeys.push(key);\n });\n return nonExistentKeys;\n};\n\nconst sanitizeIP = {\n typeObj: (keys, obj) => {\n if (typeof obj !== 'object') {\n return Error('Argument type object expected');\n }\n\n const nonExistentKeys = checkExistence(keys, obj);\n if (nonExistentKeys.length) {\n return Error(`Missing keys from parameter ${nonExistentKeys.join(', ')}`);\n }\n return obj;\n },\n\n /* istanbul ignore next */ htmlElem: (elem) => {\n if (!(elem instanceof HTMLElement)) {\n return Error('HTMLElement required');\n }\n return elem;\n }\n};\n\n/**\n * Gets the maximum value from an array of objects for a given property name\n * @param {Array.} data Array of objects\n * @param {string} field Field name\n * @return {number} Maximum value\n */\nconst getMax = (data, field) => Math.max(...data.filter(d => !isNaN(d[field])).map(d => d[field]));\n\n/**\n * Gets the minimum value from an array of objects for a given property name\n * @param {Array.} data Array of objects\n * @param {string} field Field name\n * @return {number} Minimum value\n */\nconst getMin = (data, field) => Math.min(...data.filter(d => !isNaN(d[field])).map(d => d[field]));\n\n/**\n * Gets the domain from the data based on the field name and type of field\n * @param {Array. | Array.} data Data Array\n * @param {Array.} fields Array of fields from where the domain will be calculated\n * @param {string} fieldType Type of field - nominal, quantitiative, temporal.\n * @return {Array} Usually contains a min and max value if field is quantitative or\n * an array of values if field type is nominal or ordinal\n */\nconst getDomainFromData = (data, fields, fieldType) => {\n let domain;\n let domArr;\n data = data[0] instanceof Array ? data : [data];\n switch (fieldType) {\n case DimensionSubtype.CATEGORICAL:\n domain = [].concat(...data.map(arr => arr.map(d => d[fields[0]]).filter(d => d !== undefined)));\n break;\n default:\n domArr = data.map((arr) => {\n const firstMin = getMin(arr, fields[0]);\n const secondMin = getMin(arr, fields[1]);\n const firstMax = getMax(arr, fields[0]);\n const secondMax = getMax(arr, fields[1]);\n return [Math.min(firstMin, secondMin), Math.max(firstMax, secondMax)];\n });\n domain = [Math.min(...domArr.map(d => d[0])), Math.max(...domArr.map(d => d[1]))];\n break;\n }\n return domain;\n};\n\n/**\n * Union Domain values\n * @param {Array.} domains Array of domain values\n * @param {string} fieldType type of field - dimension,measure or datetime.\n * @return {Array} Unioned domain of all domain values.\n */\nconst unionDomain = (domains, fieldType) => {\n let domain;\n domains = domains.filter(dom => dom.length);\n if (fieldType === DimensionSubtype.CATEGORICAL) {\n domain = domain = [].concat(...domains);\n } else {\n domain = [Math.min(...domains.map(d => d[0])), Math.max(...domains.map(d => d[1]))];\n }\n\n return domain;\n};\n\nconst symbolFns = {\n circle: symbolCircle,\n cross: symbolCross,\n diamond: symbolDiamond,\n square: symbolSquare,\n star: symbolStar,\n wye: symbolWye,\n triangle: symbolTriangle\n};\n\nconst easeFns = {\n cubic: easeCubic,\n bounce: easeBounce,\n linear: easeLinear,\n elastic: easeElastic,\n back: easeBack,\n poly: easePoly,\n circle: easeCircle\n};\n\n/**\n * Returns the maximum or minimum points of a compare value from an array of objects.\n * @param {Array} points Array of objects\n * @param {string} compareValue Key in the object on which the comparing will be done.\n * @param {string} minOrMax minimum or maximum.\n * @return {Object} Minimum or maximum point.\n */\nconst getExtremePoint = (points, compareValue, minOrMax) => {\n let extremePoint;\n let point;\n const len = points.length;\n let minOrMaxVal = minOrMax === 'max' ? -Infinity : Infinity;\n let val;\n\n for (let i = 0; i < len; i++) {\n point = points[i];\n val = point[compareValue];\n if (minOrMax === 'min' ? val < minOrMaxVal : val > minOrMaxVal) {\n minOrMaxVal = val;\n extremePoint = point;\n }\n }\n\n return extremePoint;\n};\n\n/**\n * Returns the minimum point of a compare value from an array of objects.\n * @param {Array} points Array of objects\n * @param {string} compareValue Key in the object on which the comparing will be done.\n * @return {Object} Minimum point.\n */\nconst getMinPoint = (points, compareValue) => getExtremePoint(points, compareValue, 'min');\n\n/**\n * Returns the maximum point of a compare value from an array of objects.\n * @param {Array} points Array of objects\n * @param {string} compareValue Key in the object on which the comparing will be done.\n * @return {Object} Maximum point.\n */\nconst getMaxPoint = (points, compareValue) => getExtremePoint(points, compareValue, 'max');\n\n/**\n * Gets the index of the closest value of the given value from the array.\n * @param {Array} arr Array of values\n * @param {number} value Value from which the nearest value will be calculated.\n * @param {string} side side property.\n * @return {number} index of the closest value\n */\n/* istanbul ignore next */const getClosestIndexOf = (arr, value, side) => {\n let low = 0;\n const arrLen = arr.length;\n let high = arrLen - 1;\n\n let mid;\n let d1;\n let d2;\n\n while (low < high) {\n mid = Math.floor((low + high) / 2);\n d1 = Math.abs(arr[mid] - value);\n d2 = Math.abs(arr[mid + 1] - value);\n\n if (d2 <= d1) {\n low = mid + 1;\n } else {\n high = mid;\n }\n }\n\n if (!side) {\n return high;\n }\n\n const highVal = arr[high];\n if (highVal === value) {\n return high;\n } else if (highVal > value) {\n if (high === 0) { return high; }\n return side === 'left' ? high - 1 : high;\n }\n if (high === arr.length - 1) { return high; }\n return side === 'left' ? high : high + 1;\n};\n\n/**\n * Returns the browser window object\n * @return {Window} Window object\n*/\nconst getWindow = () => window;\n\n/**\n * Returns the browser window object\n * @return {Window} Window object\n*/\nconst reqAnimFrame = (() => requestAnimationFrame)();\n\nconst cancelAnimFrame = (() => cancelAnimationFrame)();\n\n/**\n * Capitalizes the first letter of the word\n * @param {string} text word\n * @return {string} Capitalized word\n */\nconst capitalizeFirst = (text) => {\n text = text.toLowerCase();\n\n return text.replace(/\\w\\S*/g, txt => txt.charAt(0).toUpperCase() + txt.substr(1));\n};\n\n/**\n *\n *\n * @param {*} arr\n */\nconst unique = arr => ([...new Set(arr)]);\n\n/**\n * Gets the minimum difference between two consecutive numbers in an array.\n * @param {Array} arr Array of numbers\n * @param {number} index index of the value\n * @return {number} minimum difference between values\n */\n/* istanbul ignore next */ const getMinDiff = (arr, index) => {\n let diff;\n let uniqueVals;\n if (index !== undefined) {\n uniqueVals = unique(arr.map(d => d[index]));\n } else {\n uniqueVals = unique(arr);\n }\n if (uniqueVals.length > 1) {\n diff = Math.abs(uniqueVals[1] - uniqueVals[0]);\n for (let i = 2, len = uniqueVals.length; i < len; i++) {\n diff = Math.min(diff, Math.abs(uniqueVals[i] - uniqueVals[i - 1]));\n }\n } else {\n diff = uniqueVals[0];\n }\n\n return diff;\n};\n\n/**\n * Returns the class name appended with a given id.\n * @param {string} cls class name\n * @param {string} id unique identifier\n * @param {string} prefix string needed to add before the classname\n * @return {string} qualified class name\n */\n/* istanbul ignore next */const getQualifiedClassName = (cls, id, prefix) => {\n cls = cls.replace(/^\\.*/, '');\n return [`${prefix}-${cls}`, `${prefix}-${cls}-${id}`];\n};\n\n/**\n * This method is used to set the default value for variables\n * without sullying the code with conditional statements.\n *\n * @export\n * @param {any} param The parameter to test.\n * @param {any} value The default value to assign.\n * @return {any} The value.\n */\n/* istanbul ignore next */ const defaultValue = (param, value) => {\n if (typeof param === 'undefined' || (typeof param === 'object' && !param)) {\n return value;\n }\n return param;\n};\n\n/**\n * DESCRIPTION TODO\n * @todo\n *\n * @export\n * @param {Object} graph graph whose dependency order has to be generated\n * @return {Object} @todo\n */\nconst getDependencyOrder = (graph) => {\n const dependencyOrder = [];\n const visited = {};\n const keys = Object.keys(graph);\n /**\n * DESCRIPTION TODO\n * @todo\n *\n * @export\n * @param {Object} name @todo\n * @return {Object} @todo\n */\n const visit = (name) => {\n if (dependencyOrder.length === keys.length) {\n return true;\n }\n visited[name] = true;\n const edges = graph[name];\n for (let e = 0; e < edges.length; e++) {\n const dep = edges[e];\n if (!visited[dep]) {\n visit(dep);\n }\n }\n\n dependencyOrder.push(name);\n return false;\n };\n\n for (let i = 0; i < keys.length; i++) {\n if (visit(keys[i], i)) break;\n }\n\n return dependencyOrder;\n};\n\n/**\n * Iterates over the properties of an object and applies the function\n *\n * @param {any} obj object to be iterated upon\n * @param {any} fn function to be applied on it\n */\nconst objectIterator = (obj, fn) => {\n for (const key in obj) {\n if (Object.hasOwnProperty.call(obj, key)) {\n fn(key, obj);\n }\n }\n};\n\n/**\n * This class creates a d3 voronoi for retrieving the nearest neighbour of any point from a set of two\n * dimensional points\n * @class Voronoi\n */\n/* istanbul ignore next */ class Voronoi {\n /**\n * Initialize the voronoi with the data given.\n * @param {Array.} data Array of points.\n */\n constructor (data) {\n this._voronoi = voronoi().x(d => d.x).y(d => d.y);\n this.data(data);\n }\n\n /**\n * Sets the data to voronoi\n * @param {Array.} data Array of objects.\n * @return {Voronoi} Instance of voronoi.\n */\n data (data) {\n if (data) {\n this._voronoiFn = this._voronoi(data);\n }\n return this;\n }\n\n /**\n * Finds the closest point to the x and y position given.\n * @param {number} x x value\n * @param {number} y y value\n * @param {number} radius search radius.\n * @return {Object} Details of the nearest point.\n */\n find (x, y, radius) {\n return this._voronoiFn.find(x, y, radius);\n }\n}\n\n/**\n * Methods to handle changes to table configuration and reactivity are handled by this\n * class.\n */\n/**\n * Common store class\n *\n * @class Store\n */\nclass Store {\n /**\n * Creates an instance of Store.\n * @param {Object} config The object to create the state store with.\n * @memberof Store\n */\n constructor (config) {\n // create reactive model\n this.model = Model.create(config);\n this._listeners = [];\n }\n\n /**\n * This method returns a plain JSON object\n * with all the fields in the state store.\n *\n * @return {Object} Serialized representation of state store.\n * @memberof Store\n */\n serialize () {\n return this.model.serialize();\n }\n\n /**\n * This method is used to update the value of a property in the state store.\n *\n * @param {string} propName The name of the property.\n * @param {number} value The new value of the property.\n * @memberof Store\n */\n commit (propName, value) {\n // check if appropriate enum has been used\n this.model.prop(propName, value);\n }\n\n /**\n * This method is used to register a callbacl that will execute\n * when one or more properties change.\n *\n * @param {string | Array} propNames name of property or array of props.\n * @param {Function} callBack The callback to execute.\n * @memberof Store\n */\n /* istanbul ignore next */registerChangeListener (propNames, callBack, instantCall) {\n let props = propNames;\n if (!Array.isArray(propNames)) {\n props = [propNames];\n }\n const fn = this.model.next(props, callBack, instantCall);\n this._listeners.push(fn);\n return this;\n }\n /**\n * This method is used to register a callbacl that will execute\n * when one or more properties change.\n *\n * @param {string | Array} propNames name of property or array of props.\n * @param {Function} callBack The callback to execute.\n * @memberof Store\n */\n /* istanbul ignore next */ registerImmediateListener (propNames, callBack, instantCall) {\n let props = propNames;\n if (!Array.isArray(propNames)) {\n props = [propNames];\n }\n const fn = this.model.on(props, callBack, instantCall);\n this._listeners.push(fn);\n return this;\n }\n /**\n * This method is used to get the name of the property\n * from the state store.\n *\n * @param {string} propName The name of the field in state store.\n * @return {any} The value of the field.\n * @memberof Store\n */\n get (propName) {\n return this.model.prop(propName);\n }\n\n /**\n * This method is used to register a computed property that is computed every time\n * the store value changes.\n *\n * @param {string} propName The name of the property to create.\n * @param {Function} callBack The function to execute when depemdent props change.\n * @memberof Store\n */\n computed (propName, callBack) {\n return this.model.calculatedProp(propName, callBack);\n }\n\n unsubscribeAll () {\n this._listeners.forEach(fn => fn());\n }\n}\n\n/**\n * Sanitize an input number / string mixed number. Currently dot in the no is not supported.\n *\n * @param {number | string} val pure number or string mixed number\n * @return {number | null} Number if it can be extracted. Otherwise null\n */\nconst intSanitizer = (val) => {\n const arr = val.toString().match(/(\\d+)(px)*/g);\n if (!arr) {\n // If only characters are passed\n return null;\n }\n\n return parseInt(arr[0], 10);\n};\n\n/**\n * Setter getter creator from config\n * Format\n * PROPERTRY_NAME: {\n * value: // default value of the property,\n * meta: {\n * typeCheck: // The setter value will be checked using this. If the value is function then the setter value\n * // is passed as args. (Optional)\n * typeExpected: // The output of typecheck action will be tested against this. Truthy value will set the\n * // value to the setter\n * sanitizaiton: // Need for sanitization before type is checked\n * }\n * }\n *\n * @param {Object} holder an empty object on which the getters and setters will be mounted\n * @param {Object} options options config based on which the getters and setters are determined.\n * @param {Hyperdis} model optional model to attach the property. If not sent new moel is created.\n * @return {Array} @todo\n */\nconst transactor = (holder, options, model) => {\n let conf;\n const store = model && model instanceof Model ? model : Model.create({});\n\n for (const prop in options) {\n if ({}.hasOwnProperty.call(options, prop)) {\n conf = options[prop];\n if (!store.prop(prop)) {\n store.append({ [prop]: conf.value });\n }\n holder[prop] = ((context, key, meta) => (...params) => {\n let val;\n let compareTo;\n const paramsLen = params.length;\n const prevVal = store.prop(prop);\n if (paramsLen) {\n // If parameters are passed then it's a setter\n const spreadParams = meta && meta.spreadParams;\n val = params;\n const values = [];\n if (meta) {\n for (let i = 0; i < paramsLen; i++) {\n val = params[i];\n const sanitization = meta.sanitization && (spreadParams ? meta.sanitization[i] :\n meta.sanitization);\n const typeCheck = meta.typeCheck && (spreadParams ? meta.typeCheck[i] : meta.typeCheck);\n if (sanitization && typeof sanitization === 'function') {\n // Sanitize if required\n val = sanitization(val, prevVal, holder);\n }\n\n if (typeCheck) {\n // Checking if a setter is valid\n if (typeof typeCheck === 'function') {\n let typeExpected = meta.typeExpected;\n if (typeExpected && spreadParams) {\n typeExpected = typeExpected[i];\n }\n if (typeExpected) {\n compareTo = typeExpected;\n } else {\n compareTo = true;\n }\n\n if (typeCheck(val) === compareTo) {\n values.push(val);\n }\n } else if (typeof typeCheck === 'string') {\n if (typeCheck === 'constructor') {\n const typeExpected = spreadParams ? meta.typeExpected[i] : meta.typeExpected;\n if (val && (val.constructor.name === typeExpected)) {\n values.push(val);\n }\n }\n } else {\n // context.prop(key, val);\n values.push(val);\n }\n } else {\n values.push(val);\n }\n }\n const preset = meta.preset;\n const oldValues = context.prop(key);\n preset && preset(values[0], holder);\n if (spreadParams) {\n oldValues.forEach((value, i) => {\n if (values[i] === undefined) {\n values[i] = value;\n }\n });\n }\n values.length && context.prop(key, spreadParams ? values : values[0]);\n } else {\n context.prop(key, spreadParams ? val : val[0]);\n }\n return holder;\n }\n // No parameters are passed hence its a getter\n return context.prop(key);\n })(store, prop, conf.meta);\n }\n }\n\n return [holder, store];\n};\n\n/**\n *\n *\n * @param {*} context\n * @param {*} props\n */\nconst generateGetterSetters = (context, props) => {\n Object.entries(props).forEach((propInfo) => {\n const prop = propInfo[0];\n const typeChecker = propInfo[1].typeChecker;\n const sanitization = propInfo[1].sanitization;\n const prototype = context.constructor.prototype;\n if (!(Object.hasOwnProperty.call(prototype, prop))) {\n context[prop] = (...params) => {\n if (params.length) {\n let value = params[0];\n if (sanitization) {\n value = sanitization(context, params[0]);\n }\n if (typeChecker && !typeChecker(value)) {\n return context[`_${prop}`];\n }\n context[`_${prop}`] = value;\n return context;\n } return context[`_${prop}`];\n };\n }\n });\n};\n\n/**\n *\n *\n * @param {*} arr\n * @param {*} prop\n */\nconst getArraySum = (arr, prop) => arr.reduce((total, elem) => {\n total += prop ? elem[prop] : elem;\n return total;\n}, 0);\n\n/**\n *\n *\n * @param {*} arr1\n * @param {*} arr2\n * @returns\n */\nconst arraysEqual = (arr1, arr2) => {\n if (arr1.length !== arr2.length) { return false; }\n for (let i = arr1.length; i >= 0; i--) {\n if (arr1[i] !== arr2[i]) { return false; }\n }\n\n return true;\n};\n\n/* eslint valid-typeof:0 */\n/**\n * Returns a validation function which can be used to validate variables against a type and value\n *\n * @param {any} type type of value that the object should have\n * @return {Object} validation function\n */\nconst isEqual = type => (oldVal, newVal) => {\n if (type === 'Array') {\n if (!oldVal) {\n return false;\n }\n return arraysEqual(oldVal, newVal);\n } else if (type === 'Object') {\n return Object.is(oldVal, newVal);\n } return oldVal === newVal;\n};\n\n/**\n * Description @todo\n *\n * @param {any} transactionModel @todo\n * @param {any} transactionEndpoint @todo\n * @param {any} transactionItems @todo\n * @return {any} @todo\n */\nconst enableChainedTransaction = (transactionModel, transactionEndpoint, transactionItems) =>\n transactionItems.forEach(item => transactionModel.on(item, ([, newVal]) => transactionEndpoint[item](newVal)));\n\n/**\n * Chceks if the element is istanceof HTMLElement\n *\n * @param {Object} elem any JS Object\n */\nconst isHTMLElem = elem => elem instanceof HTMLElement;\n\nconst ERROR_MSG = {\n INTERFACE_IMPL: 'Method not implemented'\n};\n\n/**\n * Merges the sink object in the source by recursively iterating through the object properties\n * @param {Object} source Source Object\n * @param {Object} sink Sink Object\n * @return {Object} Merged object\n */\nconst mergeRecursive = (source, sink) => {\n for (const prop in sink) {\n if (isSimpleObject(source[prop]) && isSimpleObject(sink[prop])) {\n mergeRecursive(source[prop], sink[prop]);\n } else if (sink[prop] instanceof Object && sink[prop].constructor === Object) {\n source[prop] = {};\n mergeRecursive(source[prop], sink[prop]);\n } else {\n source[prop] = sink[prop];\n }\n }\n return source;\n};\n\nconst interpolateArray = (data, fitCount) => {\n const linearInterpolate = function (before, after, atPoint) {\n return before + (after - before) * atPoint;\n };\n const newData = [];\n const springFactor = ((data.length - 1) / (fitCount - 1));\n newData[0] = data[0]; // for new allocation\n for (let i = 1; i < fitCount - 1; i++) {\n const tmp = i * springFactor;\n const before = (Math.floor(tmp)).toFixed();\n const after = (Math.ceil(tmp)).toFixed();\n const atPoint = tmp - before;\n newData[i] = linearInterpolate(data[before], data[after], atPoint);\n }\n newData[fitCount - 1] = data[data.length - 1]; // for new allocation\n return newData;\n};\n\n/**\n *\n *\n * @param {*} fn\n */\nconst nextFrame = (fn) => {\n setTimeout(() => {\n fn();\n }, 0);\n};\n\n/**\n *\n *\n * @param {*} angle\n */\nconst angleToRadian = angle => angle * Math.PI / 180;\n\n/**\n *\n *\n * @param {*} newName\n * @param {*} oldName\n */\nconst replaceCSSPrefix = () => {\n // @todo\n};\n\n/**\n * Gets the interpolator function from d3 color\n *\n */\nconst interpolator = () => interpolate;\n\n/**\n * Gets the number interpolator from d3 color\n *\n */\nconst numberInterpolator = () => interpolateNumber;\n\n/**\n * Gets the rgb interpolator from d3 color\n *\n */\nconst colorInterpolator = () => interpolateRgb;\n\n/**\n * Gets the hsl interpolator from d3 color\n *\n */\nconst hslInterpolator = () => interpolateHslLong;\n\nconst transformColors = () => ({\n color,\n rgb,\n hsl\n});\n\n/**\n * Gets the piecewise interpolator from d3 color\n *\n */\nconst piecewiseInterpolator = () => piecewise;\n\nfunction hue2rgb (p, q, t) {\n if (t < 0) t += 1;\n if (t > 1) t -= 1;\n if (t < 1 / 6) return p + (q - p) * 6 * t;\n if (t < 1 / 2) return q;\n if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n return p;\n}\n\n /**\n * Converts an HSL color value to RGB. Conversion formula\n * adapted from http://en.wikipedia.org/wiki/HSL_color_space.\n * Assumes h, s, and l are contained in the set [0, 1] and\n * returns r, g, and b in the set [0, 255].\n *\n * @param Number h The hue\n * @param Number s The saturation\n * @param Number l The lightness\n * @return Array The RGB representation\n */\nconst hslToRgb = (h, s, l, a = 1) => {\n let r;\n let g;\n let b;\n\n if (s === 0) {\n r = g = b = l; // achromatic\n } else {\n const q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n const p = 2 * l - q;\n\n r = hue2rgb(p, q, h + 1 / 3);\n g = hue2rgb(p, q, h);\n b = hue2rgb(p, q, h - 1 / 3);\n }\n\n return [r * 255, g * 255, b * 255, a];\n};\n\n /**\n * Converts an RGB color value to HSV. Conversion formula\n * adapted from http://en.wikipedia.org/wiki/HSV_color_space.\n * Assumes r, g, and b are contained in the set [0, 255] and\n * returns h, s, and v in the set [0, 1].\n *\n * @param Number r The red color value\n * @param Number g The green color value\n * @param Number b The blue color value\n * @return Array The HSV representation\n */\nconst rgbToHsv = (r, g, b, a = 1) => {\n r = +r; g = +g; b = +b; a = +a;\n r /= 255; g /= 255; b /= 255;\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n let h;\n let s;\n const l = (max + min) / 2;\n\n if (max === min) {\n h = s = 0; // achromatic\n } else {\n const d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n switch (max) {\n case r: h = (g - b) / d + (g < b ? 6 : 0); break;\n case g: h = (b - r) / d + 2; break;\n case b: h = (r - g) / d + 4; break;\n default: break;\n }\n h /= 6;\n }\n return [h, s, l, a];\n};\n\n /**\n * Converts an HSV color value to RGB. Conversion formula\n * adapted from http://en.wikipedia.org/wiki/HSV_color_space.\n * Assumes h, s, and v are contained in the set [0, 1] and\n * returns r, g, and b in the set [0, 255].\n *\n * @param Number h The hue\n * @param Number s The saturation\n * @param Number v The value\n * @return Array The RGB representation\n */\nconst hsvToRgb = (h, s, v, a = 1) => {\n let r;\n let g;\n let b;\n\n const i = Math.floor(h * 6);\n const f = h * 6 - i;\n const p = v * (1 - s);\n const q = v * (1 - f * s);\n const t = v * (1 - (1 - f) * s);\n\n switch (i % 6) {\n case 0: r = v; g = t; b = p; break;\n case 1: r = q; g = v; b = p; break;\n case 2: r = p; g = v; b = t; break;\n case 3: r = p; g = q; b = v; break;\n case 4: r = t; g = p; b = v; break;\n case 5: r = v; g = p; b = q; break;\n default: break;\n }\n\n return [r * 255, g * 255, b * 255, a];\n};\n\nconst hexToHsv = (hex) => {\n const result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\n\n const r = parseInt(result[1], 16);\n const g = parseInt(result[2], 16);\n const b = parseInt(result[3], 16);\n const a = result[4] ? parseInt(result[4], 16) : 1;\n return rgbToHsv(r, g, b, a);\n};\n\nconst detectColor = (col) => {\n const matchRgb = /rgb\\((\\d{1,3}), (\\d{1,3}), (\\d{1,3})\\)/;\n const matchHsl = /hsl\\((\\d+),\\s*([\\d.]+)%,\\s*([\\d.]+)%\\)/g;\n\n // Source : https://gist.github.com/sethlopezme/d072b945969a3cc2cc11\n // eslint-disable-next-line\n const matchRgba = /rgba?\\(((25[0-5]|2[0-4]\\d|1\\d{1,2}|\\d\\d?)\\s*,\\s*?){2}(25[0-5]|2[0-4]\\d|1\\d{1,2}|\\d\\d?)\\s*,?\\s*([01]\\.?\\d*?)?\\)/;\n // eslint-disable-next-line\n const matchHsla = /^hsla\\((0|360|35\\d|3[0-4]\\d|[12]\\d\\d|0?\\d?\\d),(0|100|\\d{1,2})%,(0|100|\\d{1,2})%,(0?\\.\\d|1(\\.0)?)\\)$/;\n const matchHex = /^#([0-9a-f]{3}){1,2}$/i;\n\n if (matchRgb.test(col) || matchRgba.test(col)) {\n return 'rgb';\n } else if (matchHsl.test(col) || matchHsla.test(col)) {\n return 'hsl';\n } else if (matchHex.test(col)) {\n return 'hex';\n } return col;\n};\n\n/**\n *\n *\n * @param {*} model\n * @param {*} propModel\n * @returns\n */\nconst filterPropagationModel = (model, propModel, measures) => {\n const { data, schema } = propModel.getData();\n let filteredModel;\n if (schema.length) {\n const fieldMap = model.getFieldsConfig();\n filteredModel = model.select((fields) => {\n const include = data.some(row => schema.every((propField, idx) => {\n if (!measures && (!(propField.name in fieldMap) ||\n fieldMap[propField.name].def.type === FieldType.MEASURE)) {\n return true;\n }\n return row[idx] === fields[propField.name].valueOf();\n }));\n return include;\n }, {\n saveChild: false\n });\n } else {\n filteredModel = propModel;\n }\n\n return filteredModel;\n};\n\nconst assembleModelFromIdentifiers = (model, identifiers) => {\n let schema = [];\n let data;\n const fieldMap = model.getFieldsConfig();\n if (identifiers.length) {\n const fields = identifiers[0];\n const len = fields.length;\n for (let i = 0; i < len; i++) {\n const field = fields[i];\n const fieldObj = fieldMap[field] && Object.assign({}, fieldMap[field].def);\n if (fieldObj) {\n schema.push(Object.assign(fieldObj));\n }\n }\n\n data = [];\n const header = identifiers[0];\n for (let i = 1; i < identifiers.length; i += 1) {\n const vals = identifiers[i];\n const temp = {};\n vals.forEach((fieldVal, cIdx) => {\n temp[header[cIdx]] = fieldVal;\n });\n data.push(temp);\n }\n } else {\n data = [];\n schema = [];\n }\n\n return new model.constructor(data, schema);\n};\n\n/**\n *\n *\n * @param {*} dataModel\n * @param {*} criteria\n * @returns\n */\nconst getDataModelFromRange = (dataModel, criteria, mode) => {\n if (criteria === null) {\n return null;\n }\n const selFields = Object.keys(criteria);\n const selFn = fields => selFields.every((field) => {\n const val = fields[field].value;\n const range = criteria[field][0] instanceof Array ? criteria[field][0] : criteria[field];\n if (typeof range[0] === 'string') {\n return range.find(d => d === val) !== undefined;\n }\n return range ? val >= range[0] && val <= range[1] : true;\n });\n\n return dataModel.select(selFn, {\n saveChild: false,\n mode\n });\n};\n\n/**\n *\n *\n * @param {*} dataModel\n * @param {*} identifiers\n * @returns\n */\nconst getDataModelFromIdentifiers = (dataModel, identifiers, mode) => {\n let filteredDataModel;\n if (identifiers instanceof Array) {\n const fieldsConfig = dataModel.getFieldsConfig();\n\n const dataArr = identifiers.slice(1, identifiers.length);\n if (identifiers instanceof Function) {\n filteredDataModel = identifiers(dataModel, {}, false);\n } else if (identifiers instanceof Array && identifiers[0].length) {\n const filteredSchema = identifiers[0].filter(d => d in fieldsConfig);\n filteredDataModel = dataModel.select((fields) => {\n let include = true;\n filteredSchema.forEach((propField, idx) => {\n const value = fields[propField].valueOf();\n const index = dataArr.findIndex(d => d[idx] === value);\n include = include && index !== -1;\n });\n return include;\n }, {\n saveChild: false,\n mode\n });\n }\n } else {\n filteredDataModel = getDataModelFromRange(dataModel, identifiers, mode);\n }\n return filteredDataModel;\n};\n\n/**\n *\n *\n * @param {*} context\n * @param {*} listenerMap\n */\nconst registerListeners = (context, listenerMap) => {\n const propListenerMap = listenerMap(context);\n for (const key in propListenerMap) {\n if ({}.hasOwnProperty.call(propListenerMap, key)) {\n const mapObj = propListenerMap[key];\n const propType = mapObj.type;\n const props = mapObj.props;\n const listenerFn = mapObj.listener;\n context.store()[propType](props, listenerFn);\n }\n }\n};\n\nconst isValidValue = value => !isNaN(value) && value !== -Infinity && value !== Infinity;\n/**\n *\n *\n * @param {*} obj\n * @param {*} fields\n * @returns\n */\nconst getObjProp = (obj, ...fields) => {\n if (obj === undefined || obj === null) {\n return obj;\n }\n let retObj = obj;\n for (let i = 0, len = fields.length; i < len; i++) {\n retObj = retObj[fields[i]];\n if (retObj === undefined || retObj === null) {\n break;\n }\n }\n return retObj;\n};\n\n/**\n *\n *\n * @param {*} str\n * @returns\n */\nconst escapeHTML = (str) => {\n const htmlEscapes = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": ''',\n '/': '/'\n };\n const htmlEscaper = /[&<>\"'/]/g;\n return (`${str}`).replace(htmlEscaper, match => htmlEscapes[match]);\n};\n\n/**\n *\n *\n * @param {*} arr\n */\nconst transposeArray = arr => arr[0].map((col, i) => arr.map(row => row[i]));\nconst toArray = arr => (arr instanceof Array ? arr : [arr]);\nconst extendsClass = (cls, extendsFrom, found) => {\n if (!cls) {\n return false;\n }\n const prototype = cls.prototype;\n if (prototype instanceof extendsFrom) {\n found = true;\n } else {\n found = extendsClass(prototype, extendsFrom, found);\n }\n return found;\n};\n\n/**\n *\n * @param {*} dm1\n * @param {*} dm2\n */\nconst concatModels = (dm1, dm2) => {\n const dataObj1 = dm1.getData();\n const dataObj2 = dm2.getData();\n const data1 = dataObj1.data;\n const data2 = dataObj2.data;\n const schema1 = dataObj1.schema;\n const schema2 = dataObj2.schema;\n const tuples1 = {};\n const tuples2 = {};\n const commonTuples = {};\n for (let i = 0; i < data1.length; i++) {\n for (let ii = 0; ii < data2.length; ii++) {\n const row1 = data1[i];\n const row2 = data2[ii];\n const dim1Values = row1.filter((d, idx) => schema1[idx].type === FieldType.DIMENSION);\n const dim2Values = row2.filter((d, idx) => schema2[idx].type === FieldType.DIMENSION);\n const allDimSame = dim1Values.every(value => dim2Values.indexOf(value) !== -1);\n if (allDimSame) {\n const key = dim1Values.join();\n !commonTuples[key] && (commonTuples[key] = {});\n row1.forEach((value, idx) => {\n commonTuples[key][schema1[idx].name] = value;\n });\n row2.forEach((value, idx) => {\n commonTuples[key][schema2[idx].name] = value;\n });\n } else {\n const dm1Key = dim1Values.join();\n const dm2Key = dim2Values.join();\n if (!commonTuples[dm1Key] && !commonTuples[dm2Key]) {\n !tuples1[dm1Key] && (tuples1[dm1Key] = {});\n !tuples2[dm2Key] && (tuples2[dm2Key] = {});\n row1.forEach((value, idx) => {\n tuples1[dm1Key][schema1[idx].name] = value;\n });\n row2.forEach((value, idx) => {\n tuples2[dm2Key][schema2[idx].name] = value;\n });\n }\n }\n }\n }\n\n const commonSchema = [...schema1, ...schema2.filter(s2 => schema1.findIndex(s1 => s1.name === s2.name) === -1)];\n const data = [...Object.values(tuples1), ...Object.values(tuples2), ...Object.values(commonTuples)];\n return [data, commonSchema];\n};\n\nconst getSymbol = type => symbol().type(symbolFns[type]);\n\nconst stackOrders = {\n [STACK_CONFIG.ORDER_NONE]: stackOrderNone,\n [STACK_CONFIG.ORDER_ASCENDING]: stackOrderAscending,\n [STACK_CONFIG.ORDER_DESCENDING]: stackOrderDescending\n};\nconst stackOffsets = {\n [STACK_CONFIG.OFFSET_DIVERGING]: stackOffsetDiverging,\n [STACK_CONFIG.OFFSET_NONE]: stackOffsetNone,\n [STACK_CONFIG.OFFSET_EXPAND]: stackOffsetExpand,\n [STACK_CONFIG.OFFSET_WIGGLE]: stackOffsetWiggle\n};\n\n// eslint-disable-next-line require-jsdoc\nconst stack = params => d3Stack().keys(params.keys).offset(stackOffsets[params.offset])\n .order(stackOrders[params.order])(params.data);\n\n/**\n * Groups the data into a hierarchical tree structure based on one or more fields.\n * @param { Object } params Configuration properties for nesting data\n * @param { Array. } params.data Data which needs to be grouped\n * @param { Array. } params.keys Field indices by which the data will be grouped\n * @return { Array. } Grouped data array\n */\nconst nestCollection = (params) => {\n const nestFn = nest();\n params.keys.forEach(key => nestFn.key(d => d[key]));\n return nestFn.entries(params.data);\n};\n\nconst pathInterpolators = {\n curveLinear,\n curveStepAfter,\n curveStepBefore,\n curveStep,\n curveCatmullRom,\n stepAfter: curveStepAfter,\n catmullRom: curveCatmullRom,\n step: curveStep,\n stepBefore: curveStepBefore,\n linear: curveLinear\n};\n\nconst Symbols = {\n axisLeft,\n axisRight,\n axisTop,\n axisBottom,\n line,\n area,\n pie,\n arc,\n nest\n};\n\nconst Scales = {\n band: scaleBand\n};\n\nconst getSmallestDiff = (points) => {\n points = points.sort((a, b) => a - b);\n let minDiff = points[1] - points[0];\n for (let i = 2; i < points.length; i++) {\n minDiff = Math.min(minDiff, points[i] - points[i - 1]);\n }\n\n return minDiff;\n};\n\nconst require = (lookupWhat, lookupDetails) => ({\n resolvable: (store) => {\n const lookupTarget = store[lookupWhat];\n const depArr = lookupDetails.slice(0, lookupDetails.length - 1);\n const fn = lookupDetails[lookupDetails.length - 1]; // fn\n\n const deps = depArr.map(str => lookupTarget[str]);\n return {\n fn: fn(...deps),\n depArr\n };\n }\n});\n\nconst nextAnimFrame = window.requestAnimationFrame || window.webkitRequestAnimationFrame ||\n window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame ||\n function (callback) {\n setTimeout(callback, 16);\n };\n\nexport {\n require,\n Scales,\n Symbols,\n pathInterpolators,\n stack,\n nestCollection,\n getSymbol,\n transformColors,\n detectColor,\n hexToHsv,\n hslToRgb,\n rgbToHsv,\n hsvToRgb,\n concatModels,\n toArray,\n angleToRadian,\n escapeHTML,\n generateGetterSetters,\n getArraySum,\n interpolator,\n piecewiseInterpolator,\n getDataModelFromIdentifiers,\n getDataModelFromRange,\n colorInterpolator,\n numberInterpolator,\n ERROR_MSG,\n reqAnimFrame,\n nextAnimFrame,\n filterPropagationModel,\n transposeArray,\n cancelAnimFrame,\n getMax,\n getMin,\n getDomainFromData,\n getUniqueId,\n mergeRecursive,\n unionDomain,\n symbolFns,\n easeFns,\n clone,\n isEqual,\n interpolateArray,\n getMinPoint,\n defaultValue,\n getMaxPoint,\n getClosestIndexOf,\n Voronoi,\n checkExistence,\n sanitizeIP,\n getMinDiff,\n capitalizeFirst,\n getWindow,\n getQualifiedClassName,\n Store,\n getDependencyOrder,\n objectIterator,\n intSanitizer,\n transactor,\n enableChainedTransaction,\n isHTMLElem,\n isSimpleObject,\n nextFrame,\n registerListeners,\n replaceCSSPrefix,\n getObjProp,\n extendsClass,\n assembleModelFromIdentifiers,\n isValidValue,\n hslInterpolator,\n getSmallestDiff\n};\n","export function linear(t) {\n return +t;\n}\n","export function circleIn(t) {\n return 1 - Math.sqrt(1 - t * t);\n}\n\nexport function circleOut(t) {\n return Math.sqrt(1 - --t * t);\n}\n\nexport function circleInOut(t) {\n return ((t *= 2) <= 1 ? 1 - Math.sqrt(1 - t * t) : Math.sqrt(1 - (t -= 2) * t) + 1) / 2;\n}\n","import {path} from \"d3-path\";\nimport circle from \"./symbol/circle\";\nimport cross from \"./symbol/cross\";\nimport diamond from \"./symbol/diamond\";\nimport star from \"./symbol/star\";\nimport square from \"./symbol/square\";\nimport triangle from \"./symbol/triangle\";\nimport wye from \"./symbol/wye\";\nimport constant from \"./constant\";\n\nexport var symbols = [\n circle,\n cross,\n diamond,\n square,\n star,\n triangle,\n wye\n];\n\nexport default function() {\n var type = constant(circle),\n size = constant(64),\n context = null;\n\n function symbol() {\n var buffer;\n if (!context) context = buffer = path();\n type.apply(this, arguments).draw(context, +size.apply(this, arguments));\n if (buffer) return context = null, buffer + \"\" || null;\n }\n\n symbol.type = function(_) {\n return arguments.length ? (type = typeof _ === \"function\" ? _ : constant(_), symbol) : type;\n };\n\n symbol.size = function(_) {\n return arguments.length ? (size = typeof _ === \"function\" ? _ : constant(+_), symbol) : size;\n };\n\n symbol.context = function(_) {\n return arguments.length ? (context = _ == null ? null : _, symbol) : context;\n };\n\n return symbol;\n}\n","export const ORDER_ASCENDING = 'ascending';\nexport const ORDER_DESCENDING = 'descending';\nexport const ORDER_NONE = 'none';\nexport const OFFSET_DIVERGING = 'diverging';\nexport const OFFSET_NONE = 'none';\nexport const OFFSET_EXPAND = 'expand';\nexport const OFFSET_WIGGLE = 'wiggle';\n","import ascending from \"./ascending\";\n\nexport default function(series) {\n return ascending(series).reverse();\n}\n","export default function(series, order) {\n if (!((n = series.length) > 1)) return;\n for (var i, j = 0, d, dy, yp, yn, n, m = series[order[0]].length; j < m; ++j) {\n for (yp = yn = 0, i = 0; i < n; ++i) {\n if ((dy = (d = series[order[i]][j])[1] - d[0]) >= 0) {\n d[0] = yp, d[1] = yp += dy;\n } else if (dy < 0) {\n d[1] = yn, d[0] = yn += dy;\n } else {\n d[0] = yp;\n }\n }\n }\n}\n","import none from \"./none\";\n\nexport default function(series, order) {\n if (!((n = series.length) > 0)) return;\n for (var i, n, j = 0, m = series[0].length, y; j < m; ++j) {\n for (y = i = 0; i < n; ++i) y += series[i][j][1] || 0;\n if (y) for (i = 0; i < n; ++i) series[i][j][1] /= y;\n }\n none(series, order);\n}\n","import none from \"./none\";\n\nexport default function(series, order) {\n if (!((n = series.length) > 0) || !((m = (s0 = series[order[0]]).length) > 0)) return;\n for (var y = 0, j = 1, s0, m, n; j < m; ++j) {\n for (var i = 0, s1 = 0, s2 = 0; i < n; ++i) {\n var si = series[order[i]],\n sij0 = si[j][1] || 0,\n sij1 = si[j - 1][1] || 0,\n s3 = (sij0 - sij1) / 2;\n for (var k = 0; k < i; ++k) {\n var sk = series[order[k]],\n skj0 = sk[j][1] || 0,\n skj1 = sk[j - 1][1] || 0;\n s3 += skj0 - skj1;\n }\n s1 += sij0, s2 += s3 * sij0;\n }\n s0[j - 1][1] += s0[j - 1][0] = y;\n if (s1) y -= s2 / s1;\n }\n s0[j - 1][1] += s0[j - 1][0] = y;\n none(series, order);\n}\n","import constant from \"./constant\";\nimport descending from \"./descending\";\nimport identity from \"./identity\";\nimport {tau} from \"./math\";\n\nexport default function() {\n var value = identity,\n sortValues = descending,\n sort = null,\n startAngle = constant(0),\n endAngle = constant(tau),\n padAngle = constant(0);\n\n function pie(data) {\n var i,\n n = data.length,\n j,\n k,\n sum = 0,\n index = new Array(n),\n arcs = new Array(n),\n a0 = +startAngle.apply(this, arguments),\n da = Math.min(tau, Math.max(-tau, endAngle.apply(this, arguments) - a0)),\n a1,\n p = Math.min(Math.abs(da) / n, padAngle.apply(this, arguments)),\n pa = p * (da < 0 ? -1 : 1),\n v;\n\n for (i = 0; i < n; ++i) {\n if ((v = arcs[index[i] = i] = +value(data[i], i, data)) > 0) {\n sum += v;\n }\n }\n\n // Optionally sort the arcs by previously-computed values or by data.\n if (sortValues != null) index.sort(function(i, j) { return sortValues(arcs[i], arcs[j]); });\n else if (sort != null) index.sort(function(i, j) { return sort(data[i], data[j]); });\n\n // Compute the arcs! They are stored in the original data's order.\n for (i = 0, k = sum ? (da - n * pa) / sum : 0; i < n; ++i, a0 = a1) {\n j = index[i], v = arcs[j], a1 = a0 + (v > 0 ? v * k : 0) + pa, arcs[j] = {\n data: data[j],\n index: i,\n value: v,\n startAngle: a0,\n endAngle: a1,\n padAngle: p\n };\n }\n\n return arcs;\n }\n\n pie.value = function(_) {\n return arguments.length ? (value = typeof _ === \"function\" ? _ : constant(+_), pie) : value;\n };\n\n pie.sortValues = function(_) {\n return arguments.length ? (sortValues = _, sort = null, pie) : sortValues;\n };\n\n pie.sort = function(_) {\n return arguments.length ? (sort = _, sortValues = null, pie) : sort;\n };\n\n pie.startAngle = function(_) {\n return arguments.length ? (startAngle = typeof _ === \"function\" ? _ : constant(+_), pie) : startAngle;\n };\n\n pie.endAngle = function(_) {\n return arguments.length ? (endAngle = typeof _ === \"function\" ? _ : constant(+_), pie) : endAngle;\n };\n\n pie.padAngle = function(_) {\n return arguments.length ? (padAngle = typeof _ === \"function\" ? _ : constant(+_), pie) : padAngle;\n };\n\n return pie;\n}\n","export var xhtml = \"http://www.w3.org/1999/xhtml\";\n\nexport default {\n svg: \"http://www.w3.org/2000/svg\",\n xhtml: xhtml,\n xlink: \"http://www.w3.org/1999/xlink\",\n xml: \"http://www.w3.org/XML/1998/namespace\",\n xmlns: \"http://www.w3.org/2000/xmlns/\"\n};\n","import namespaces from \"./namespaces\";\n\nexport default function(name) {\n var prefix = name += \"\", i = prefix.indexOf(\":\");\n if (i >= 0 && (prefix = name.slice(0, i)) !== \"xmlns\") name = name.slice(i + 1);\n return namespaces.hasOwnProperty(prefix) ? {space: namespaces[prefix], local: name} : name;\n}\n","import namespace from \"./namespace\";\nimport {xhtml} from \"./namespaces\";\n\nfunction creatorInherit(name) {\n return function() {\n var document = this.ownerDocument,\n uri = this.namespaceURI;\n return uri === xhtml && document.documentElement.namespaceURI === xhtml\n ? document.createElement(name)\n : document.createElementNS(uri, name);\n };\n}\n\nfunction creatorFixed(fullname) {\n return function() {\n return this.ownerDocument.createElementNS(fullname.space, fullname.local);\n };\n}\n\nexport default function(name) {\n var fullname = namespace(name);\n return (fullname.local\n ? creatorFixed\n : creatorInherit)(fullname);\n}\n","function none() {}\n\nexport default function(selector) {\n return selector == null ? none : function() {\n return this.querySelector(selector);\n };\n}\n","function empty() {\n return [];\n}\n\nexport default function(selector) {\n return selector == null ? empty : function() {\n return this.querySelectorAll(selector);\n };\n}\n","var matcher = function(selector) {\n return function() {\n return this.matches(selector);\n };\n};\n\nif (typeof document !== \"undefined\") {\n var element = document.documentElement;\n if (!element.matches) {\n var vendorMatches = element.webkitMatchesSelector\n || element.msMatchesSelector\n || element.mozMatchesSelector\n || element.oMatchesSelector;\n matcher = function(selector) {\n return function() {\n return vendorMatches.call(this, selector);\n };\n };\n }\n}\n\nexport default matcher;\n","export default function(update) {\n return new Array(update.length);\n}\n","import sparse from \"./sparse\";\nimport {Selection} from \"./index\";\n\nexport default function() {\n return new Selection(this._enter || this._groups.map(sparse), this._parents);\n}\n\nexport function EnterNode(parent, datum) {\n this.ownerDocument = parent.ownerDocument;\n this.namespaceURI = parent.namespaceURI;\n this._next = null;\n this._parent = parent;\n this.__data__ = datum;\n}\n\nEnterNode.prototype = {\n constructor: EnterNode,\n appendChild: function(child) { return this._parent.insertBefore(child, this._next); },\n insertBefore: function(child, next) { return this._parent.insertBefore(child, next); },\n querySelector: function(selector) { return this._parent.querySelector(selector); },\n querySelectorAll: function(selector) { return this._parent.querySelectorAll(selector); }\n};\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","import {Selection} from \"./index\";\nimport {EnterNode} from \"./enter\";\nimport constant from \"../constant\";\n\nvar keyPrefix = \"$\"; // Protect against keys like “__proto__”.\n\nfunction bindIndex(parent, group, enter, update, exit, data) {\n var i = 0,\n node,\n groupLength = group.length,\n dataLength = data.length;\n\n // Put any non-null nodes that fit into update.\n // Put any null nodes into enter.\n // Put any remaining data into enter.\n for (; i < dataLength; ++i) {\n if (node = group[i]) {\n node.__data__ = data[i];\n update[i] = node;\n } else {\n enter[i] = new EnterNode(parent, data[i]);\n }\n }\n\n // Put any non-null nodes that don’t fit into exit.\n for (; i < groupLength; ++i) {\n if (node = group[i]) {\n exit[i] = node;\n }\n }\n}\n\nfunction bindKey(parent, group, enter, update, exit, data, key) {\n var i,\n node,\n nodeByKeyValue = {},\n groupLength = group.length,\n dataLength = data.length,\n keyValues = new Array(groupLength),\n keyValue;\n\n // Compute the key for each node.\n // If multiple nodes have the same key, the duplicates are added to exit.\n for (i = 0; i < groupLength; ++i) {\n if (node = group[i]) {\n keyValues[i] = keyValue = keyPrefix + key.call(node, node.__data__, i, group);\n if (keyValue in nodeByKeyValue) {\n exit[i] = node;\n } else {\n nodeByKeyValue[keyValue] = node;\n }\n }\n }\n\n // Compute the key for each datum.\n // If there a node associated with this key, join and add it to update.\n // If there is not (or the key is a duplicate), add it to enter.\n for (i = 0; i < dataLength; ++i) {\n keyValue = keyPrefix + key.call(parent, data[i], i, data);\n if (node = nodeByKeyValue[keyValue]) {\n update[i] = node;\n node.__data__ = data[i];\n nodeByKeyValue[keyValue] = null;\n } else {\n enter[i] = new EnterNode(parent, data[i]);\n }\n }\n\n // Add any remaining nodes that were not bound to data to exit.\n for (i = 0; i < groupLength; ++i) {\n if ((node = group[i]) && (nodeByKeyValue[keyValues[i]] === node)) {\n exit[i] = node;\n }\n }\n}\n\nexport default function(value, key) {\n if (!value) {\n data = new Array(this.size()), j = -1;\n this.each(function(d) { data[++j] = d; });\n return data;\n }\n\n var bind = key ? bindKey : bindIndex,\n parents = this._parents,\n groups = this._groups;\n\n if (typeof value !== \"function\") value = constant(value);\n\n for (var m = groups.length, update = new Array(m), enter = new Array(m), exit = new Array(m), j = 0; j < m; ++j) {\n var parent = parents[j],\n group = groups[j],\n groupLength = group.length,\n data = value.call(parent, parent && parent.__data__, j, parents),\n dataLength = data.length,\n enterGroup = enter[j] = new Array(dataLength),\n updateGroup = update[j] = new Array(dataLength),\n exitGroup = exit[j] = new Array(groupLength);\n\n bind(parent, group, enterGroup, updateGroup, exitGroup, data, key);\n\n // Now connect the enter nodes to their following update node, such that\n // appendChild can insert the materialized enter node before this node,\n // rather than at the end of the parent node.\n for (var i0 = 0, i1 = 0, previous, next; i0 < dataLength; ++i0) {\n if (previous = enterGroup[i0]) {\n if (i0 >= i1) i1 = i0 + 1;\n while (!(next = updateGroup[i1]) && ++i1 < dataLength);\n previous._next = next || null;\n }\n }\n }\n\n update = new Selection(update, parents);\n update._enter = enter;\n update._exit = exit;\n return update;\n}\n","import {Selection} from \"./index\";\n\nexport default function(compare) {\n if (!compare) compare = ascending;\n\n function compareNode(a, b) {\n return a && b ? compare(a.__data__, b.__data__) : !a - !b;\n }\n\n for (var groups = this._groups, m = groups.length, sortgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, sortgroup = sortgroups[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n sortgroup[i] = node;\n }\n }\n sortgroup.sort(compareNode);\n }\n\n return new Selection(sortgroups, this._parents).order();\n}\n\nfunction ascending(a, b) {\n return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","import namespace from \"../namespace\";\n\nfunction attrRemove(name) {\n return function() {\n this.removeAttribute(name);\n };\n}\n\nfunction attrRemoveNS(fullname) {\n return function() {\n this.removeAttributeNS(fullname.space, fullname.local);\n };\n}\n\nfunction attrConstant(name, value) {\n return function() {\n this.setAttribute(name, value);\n };\n}\n\nfunction attrConstantNS(fullname, value) {\n return function() {\n this.setAttributeNS(fullname.space, fullname.local, value);\n };\n}\n\nfunction attrFunction(name, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.removeAttribute(name);\n else this.setAttribute(name, v);\n };\n}\n\nfunction attrFunctionNS(fullname, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.removeAttributeNS(fullname.space, fullname.local);\n else this.setAttributeNS(fullname.space, fullname.local, v);\n };\n}\n\nexport default function(name, value) {\n var fullname = namespace(name);\n\n if (arguments.length < 2) {\n var node = this.node();\n return fullname.local\n ? node.getAttributeNS(fullname.space, fullname.local)\n : node.getAttribute(fullname);\n }\n\n return this.each((value == null\n ? (fullname.local ? attrRemoveNS : attrRemove) : (typeof value === \"function\"\n ? (fullname.local ? attrFunctionNS : attrFunction)\n : (fullname.local ? attrConstantNS : attrConstant)))(fullname, value));\n}\n","export default function(node) {\n return (node.ownerDocument && node.ownerDocument.defaultView) // node is a Node\n || (node.document && node) // node is a Window\n || node.defaultView; // node is a Document\n}\n","import defaultView from \"../window\";\n\nfunction styleRemove(name) {\n return function() {\n this.style.removeProperty(name);\n };\n}\n\nfunction styleConstant(name, value, priority) {\n return function() {\n this.style.setProperty(name, value, priority);\n };\n}\n\nfunction styleFunction(name, value, priority) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.style.removeProperty(name);\n else this.style.setProperty(name, v, priority);\n };\n}\n\nexport default function(name, value, priority) {\n return arguments.length > 1\n ? this.each((value == null\n ? styleRemove : typeof value === \"function\"\n ? styleFunction\n : styleConstant)(name, value, priority == null ? \"\" : priority))\n : styleValue(this.node(), name);\n}\n\nexport function styleValue(node, name) {\n return node.style.getPropertyValue(name)\n || defaultView(node).getComputedStyle(node, null).getPropertyValue(name);\n}\n","function classArray(string) {\n return string.trim().split(/^|\\s+/);\n}\n\nfunction classList(node) {\n return node.classList || new ClassList(node);\n}\n\nfunction ClassList(node) {\n this._node = node;\n this._names = classArray(node.getAttribute(\"class\") || \"\");\n}\n\nClassList.prototype = {\n add: function(name) {\n var i = this._names.indexOf(name);\n if (i < 0) {\n this._names.push(name);\n this._node.setAttribute(\"class\", this._names.join(\" \"));\n }\n },\n remove: function(name) {\n var i = this._names.indexOf(name);\n if (i >= 0) {\n this._names.splice(i, 1);\n this._node.setAttribute(\"class\", this._names.join(\" \"));\n }\n },\n contains: function(name) {\n return this._names.indexOf(name) >= 0;\n }\n};\n\nfunction classedAdd(node, names) {\n var list = classList(node), i = -1, n = names.length;\n while (++i < n) list.add(names[i]);\n}\n\nfunction classedRemove(node, names) {\n var list = classList(node), i = -1, n = names.length;\n while (++i < n) list.remove(names[i]);\n}\n\nfunction classedTrue(names) {\n return function() {\n classedAdd(this, names);\n };\n}\n\nfunction classedFalse(names) {\n return function() {\n classedRemove(this, names);\n };\n}\n\nfunction classedFunction(names, value) {\n return function() {\n (value.apply(this, arguments) ? classedAdd : classedRemove)(this, names);\n };\n}\n\nexport default function(name, value) {\n var names = classArray(name + \"\");\n\n if (arguments.length < 2) {\n var list = classList(this.node()), i = -1, n = names.length;\n while (++i < n) if (!list.contains(names[i])) return false;\n return true;\n }\n\n return this.each((typeof value === \"function\"\n ? classedFunction : value\n ? classedTrue\n : classedFalse)(names, value));\n}\n","function textRemove() {\n this.textContent = \"\";\n}\n\nfunction textConstant(value) {\n return function() {\n this.textContent = value;\n };\n}\n\nfunction textFunction(value) {\n return function() {\n var v = value.apply(this, arguments);\n this.textContent = v == null ? \"\" : v;\n };\n}\n\nexport default function(value) {\n return arguments.length\n ? this.each(value == null\n ? textRemove : (typeof value === \"function\"\n ? textFunction\n : textConstant)(value))\n : this.node().textContent;\n}\n","function htmlRemove() {\n this.innerHTML = \"\";\n}\n\nfunction htmlConstant(value) {\n return function() {\n this.innerHTML = value;\n };\n}\n\nfunction htmlFunction(value) {\n return function() {\n var v = value.apply(this, arguments);\n this.innerHTML = v == null ? \"\" : v;\n };\n}\n\nexport default function(value) {\n return arguments.length\n ? this.each(value == null\n ? htmlRemove : (typeof value === \"function\"\n ? htmlFunction\n : htmlConstant)(value))\n : this.node().innerHTML;\n}\n","function raise() {\n if (this.nextSibling) this.parentNode.appendChild(this);\n}\n\nexport default function() {\n return this.each(raise);\n}\n","function lower() {\n if (this.previousSibling) this.parentNode.insertBefore(this, this.parentNode.firstChild);\n}\n\nexport default function() {\n return this.each(lower);\n}\n","import creator from \"../creator\";\nimport selector from \"../selector\";\n\nfunction constantNull() {\n return null;\n}\n\nexport default function(name, before) {\n var create = typeof name === \"function\" ? name : creator(name),\n select = before == null ? constantNull : typeof before === \"function\" ? before : selector(before);\n return this.select(function() {\n return this.insertBefore(create.apply(this, arguments), select.apply(this, arguments) || null);\n });\n}\n","function remove() {\n var parent = this.parentNode;\n if (parent) parent.removeChild(this);\n}\n\nexport default function() {\n return this.each(remove);\n}\n","function selection_cloneShallow() {\n return this.parentNode.insertBefore(this.cloneNode(false), this.nextSibling);\n}\n\nfunction selection_cloneDeep() {\n return this.parentNode.insertBefore(this.cloneNode(true), this.nextSibling);\n}\n\nexport default function(deep) {\n return this.select(deep ? selection_cloneDeep : selection_cloneShallow);\n}\n","var filterEvents = {};\n\nexport var event = null;\n\nif (typeof document !== \"undefined\") {\n var element = document.documentElement;\n if (!(\"onmouseenter\" in element)) {\n filterEvents = {mouseenter: \"mouseover\", mouseleave: \"mouseout\"};\n }\n}\n\nfunction filterContextListener(listener, index, group) {\n listener = contextListener(listener, index, group);\n return function(event) {\n var related = event.relatedTarget;\n if (!related || (related !== this && !(related.compareDocumentPosition(this) & 8))) {\n listener.call(this, event);\n }\n };\n}\n\nfunction contextListener(listener, index, group) {\n return function(event1) {\n var event0 = event; // Events can be reentrant (e.g., focus).\n event = event1;\n try {\n listener.call(this, this.__data__, index, group);\n } finally {\n event = event0;\n }\n };\n}\n\nfunction parseTypenames(typenames) {\n return typenames.trim().split(/^|\\s+/).map(function(t) {\n var name = \"\", i = t.indexOf(\".\");\n if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n return {type: t, name: name};\n });\n}\n\nfunction onRemove(typename) {\n return function() {\n var on = this.__on;\n if (!on) return;\n for (var j = 0, i = -1, m = on.length, o; j < m; ++j) {\n if (o = on[j], (!typename.type || o.type === typename.type) && o.name === typename.name) {\n this.removeEventListener(o.type, o.listener, o.capture);\n } else {\n on[++i] = o;\n }\n }\n if (++i) on.length = i;\n else delete this.__on;\n };\n}\n\nfunction onAdd(typename, value, capture) {\n var wrap = filterEvents.hasOwnProperty(typename.type) ? filterContextListener : contextListener;\n return function(d, i, group) {\n var on = this.__on, o, listener = wrap(value, i, group);\n if (on) for (var j = 0, m = on.length; j < m; ++j) {\n if ((o = on[j]).type === typename.type && o.name === typename.name) {\n this.removeEventListener(o.type, o.listener, o.capture);\n this.addEventListener(o.type, o.listener = listener, o.capture = capture);\n o.value = value;\n return;\n }\n }\n this.addEventListener(typename.type, listener, capture);\n o = {type: typename.type, name: typename.name, value: value, listener: listener, capture: capture};\n if (!on) this.__on = [o];\n else on.push(o);\n };\n}\n\nexport default function(typename, value, capture) {\n var typenames = parseTypenames(typename + \"\"), i, n = typenames.length, t;\n\n if (arguments.length < 2) {\n var on = this.node().__on;\n if (on) for (var j = 0, m = on.length, o; j < m; ++j) {\n for (i = 0, o = on[j]; i < n; ++i) {\n if ((t = typenames[i]).type === o.type && t.name === o.name) {\n return o.value;\n }\n }\n }\n return;\n }\n\n on = value ? onAdd : onRemove;\n if (capture == null) capture = false;\n for (i = 0; i < n; ++i) this.each(on(typenames[i], value, capture));\n return this;\n}\n\nexport function customEvent(event1, listener, that, args) {\n var event0 = event;\n event1.sourceEvent = event;\n event = event1;\n try {\n return listener.apply(that, args);\n } finally {\n event = event0;\n }\n}\n","import defaultView from \"../window\";\n\nfunction dispatchEvent(node, type, params) {\n var window = defaultView(node),\n event = window.CustomEvent;\n\n if (typeof event === \"function\") {\n event = new event(type, params);\n } else {\n event = window.document.createEvent(\"Event\");\n if (params) event.initEvent(type, params.bubbles, params.cancelable), event.detail = params.detail;\n else event.initEvent(type, false, false);\n }\n\n node.dispatchEvent(event);\n}\n\nfunction dispatchConstant(type, params) {\n return function() {\n return dispatchEvent(this, type, params);\n };\n}\n\nfunction dispatchFunction(type, params) {\n return function() {\n return dispatchEvent(this, type, params.apply(this, arguments));\n };\n}\n\nexport default function(type, params) {\n return this.each((typeof params === \"function\"\n ? dispatchFunction\n : dispatchConstant)(type, params));\n}\n","import selection_select from \"./select\";\nimport selection_selectAll from \"./selectAll\";\nimport selection_filter from \"./filter\";\nimport selection_data from \"./data\";\nimport selection_enter from \"./enter\";\nimport selection_exit from \"./exit\";\nimport selection_merge from \"./merge\";\nimport selection_order from \"./order\";\nimport selection_sort from \"./sort\";\nimport selection_call from \"./call\";\nimport selection_nodes from \"./nodes\";\nimport selection_node from \"./node\";\nimport selection_size from \"./size\";\nimport selection_empty from \"./empty\";\nimport selection_each from \"./each\";\nimport selection_attr from \"./attr\";\nimport selection_style from \"./style\";\nimport selection_property from \"./property\";\nimport selection_classed from \"./classed\";\nimport selection_text from \"./text\";\nimport selection_html from \"./html\";\nimport selection_raise from \"./raise\";\nimport selection_lower from \"./lower\";\nimport selection_append from \"./append\";\nimport selection_insert from \"./insert\";\nimport selection_remove from \"./remove\";\nimport selection_clone from \"./clone\";\nimport selection_datum from \"./datum\";\nimport selection_on from \"./on\";\nimport selection_dispatch from \"./dispatch\";\n\nexport var root = [null];\n\nexport function Selection(groups, parents) {\n this._groups = groups;\n this._parents = parents;\n}\n\nfunction selection() {\n return new Selection([[document.documentElement]], root);\n}\n\nSelection.prototype = selection.prototype = {\n constructor: Selection,\n select: selection_select,\n selectAll: selection_selectAll,\n filter: selection_filter,\n data: selection_data,\n enter: selection_enter,\n exit: selection_exit,\n merge: selection_merge,\n order: selection_order,\n sort: selection_sort,\n call: selection_call,\n nodes: selection_nodes,\n node: selection_node,\n size: selection_size,\n empty: selection_empty,\n each: selection_each,\n attr: selection_attr,\n style: selection_style,\n property: selection_property,\n classed: selection_classed,\n text: selection_text,\n html: selection_html,\n raise: selection_raise,\n lower: selection_lower,\n append: selection_append,\n insert: selection_insert,\n remove: selection_remove,\n clone: selection_clone,\n datum: selection_datum,\n on: selection_on,\n dispatch: selection_dispatch\n};\n\nexport default selection;\n","import {Selection} from \"./index\";\nimport selector from \"../selector\";\n\nexport default function(select) {\n if (typeof select !== \"function\") select = selector(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {\n if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {\n if (\"__data__\" in node) subnode.__data__ = node.__data__;\n subgroup[i] = subnode;\n }\n }\n }\n\n return new Selection(subgroups, this._parents);\n}\n","import {Selection} from \"./index\";\nimport selectorAll from \"../selectorAll\";\n\nexport default function(select) {\n if (typeof select !== \"function\") select = selectorAll(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n subgroups.push(select.call(node, node.__data__, i, group));\n parents.push(node);\n }\n }\n }\n\n return new Selection(subgroups, parents);\n}\n","import {Selection} from \"./index\";\nimport matcher from \"../matcher\";\n\nexport default function(match) {\n if (typeof match !== \"function\") match = matcher(match);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {\n if ((node = group[i]) && match.call(node, node.__data__, i, group)) {\n subgroup.push(node);\n }\n }\n }\n\n return new Selection(subgroups, this._parents);\n}\n","import sparse from \"./sparse\";\nimport {Selection} from \"./index\";\n\nexport default function() {\n return new Selection(this._exit || this._groups.map(sparse), this._parents);\n}\n","import {Selection} from \"./index\";\n\nexport default function(selection) {\n\n for (var groups0 = this._groups, groups1 = selection._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {\n for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group0[i] || group1[i]) {\n merge[i] = node;\n }\n }\n }\n\n for (; j < m0; ++j) {\n merges[j] = groups0[j];\n }\n\n return new Selection(merges, this._parents);\n}\n","export default function() {\n\n for (var groups = this._groups, j = -1, m = groups.length; ++j < m;) {\n for (var group = groups[j], i = group.length - 1, next = group[i], node; --i >= 0;) {\n if (node = group[i]) {\n if (next && next !== node.nextSibling) next.parentNode.insertBefore(node, next);\n next = node;\n }\n }\n }\n\n return this;\n}\n","export default function() {\n var callback = arguments[0];\n arguments[0] = this;\n callback.apply(null, arguments);\n return this;\n}\n","export default function() {\n var nodes = new Array(this.size()), i = -1;\n this.each(function() { nodes[++i] = this; });\n return nodes;\n}\n","export default function() {\n\n for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n for (var group = groups[j], i = 0, n = group.length; i < n; ++i) {\n var node = group[i];\n if (node) return node;\n }\n }\n\n return null;\n}\n","export default function() {\n var size = 0;\n this.each(function() { ++size; });\n return size;\n}\n","export default function() {\n return !this.node();\n}\n","export default function(callback) {\n\n for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n for (var group = groups[j], i = 0, n = group.length, node; i < n; ++i) {\n if (node = group[i]) callback.call(node, node.__data__, i, group);\n }\n }\n\n return this;\n}\n","function propertyRemove(name) {\n return function() {\n delete this[name];\n };\n}\n\nfunction propertyConstant(name, value) {\n return function() {\n this[name] = value;\n };\n}\n\nfunction propertyFunction(name, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) delete this[name];\n else this[name] = v;\n };\n}\n\nexport default function(name, value) {\n return arguments.length > 1\n ? this.each((value == null\n ? propertyRemove : typeof value === \"function\"\n ? propertyFunction\n : propertyConstant)(name, value))\n : this.node()[name];\n}\n","import creator from \"../creator\";\n\nexport default function(name) {\n var create = typeof name === \"function\" ? name : creator(name);\n return this.select(function() {\n return this.appendChild(create.apply(this, arguments));\n });\n}\n","export default function(value) {\n return arguments.length\n ? this.property(\"__data__\", value)\n : this.node().__data__;\n}\n","import {Selection, root} from \"./selection/index\";\n\nexport default function(selector) {\n return typeof selector === \"string\"\n ? new Selection([[document.querySelector(selector)]], [document.documentElement])\n : new Selection([[selector]], root);\n}\n","var nextId = 0;\n\nexport default function local() {\n return new Local;\n}\n\nfunction Local() {\n this._ = \"@\" + (++nextId).toString(36);\n}\n\nLocal.prototype = local.prototype = {\n constructor: Local,\n get: function(node) {\n var id = this._;\n while (!(id in node)) if (!(node = node.parentNode)) return;\n return node[id];\n },\n set: function(node, value) {\n return node[this._] = value;\n },\n remove: function(node) {\n return this._ in node && delete node[this._];\n },\n toString: function() {\n return this._;\n }\n};\n","import {event} from \"./selection/on\";\n\nexport default function() {\n var current = event, source;\n while (source = current.sourceEvent) current = source;\n return current;\n}\n","export default function(node, event) {\n var svg = node.ownerSVGElement || node;\n\n if (svg.createSVGPoint) {\n var point = svg.createSVGPoint();\n point.x = event.clientX, point.y = event.clientY;\n point = point.matrixTransform(node.getScreenCTM().inverse());\n return [point.x, point.y];\n }\n\n var rect = node.getBoundingClientRect();\n return [event.clientX - rect.left - node.clientLeft, event.clientY - rect.top - node.clientTop];\n}\n","import sourceEvent from \"./sourceEvent\";\nimport point from \"./point\";\n\nexport default function(node) {\n var event = sourceEvent();\n if (event.changedTouches) event = event.changedTouches[0];\n return point(node, event);\n}\n","import sourceEvent from \"./sourceEvent\";\nimport point from \"./point\";\n\nexport default function(node, touches, identifier) {\n if (arguments.length < 3) identifier = touches, touches = sourceEvent().changedTouches;\n\n for (var i = 0, n = touches ? touches.length : 0, touch; i < n; ++i) {\n if ((touch = touches[i]).identifier === identifier) {\n return point(node, touch);\n }\n }\n\n return null;\n}\n","var noop = {value: function() {}};\n\nfunction dispatch() {\n for (var i = 0, n = arguments.length, _ = {}, t; i < n; ++i) {\n if (!(t = arguments[i] + \"\") || (t in _)) throw new Error(\"illegal type: \" + t);\n _[t] = [];\n }\n return new Dispatch(_);\n}\n\nfunction Dispatch(_) {\n this._ = _;\n}\n\nfunction parseTypenames(typenames, types) {\n return typenames.trim().split(/^|\\s+/).map(function(t) {\n var name = \"\", i = t.indexOf(\".\");\n if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n if (t && !types.hasOwnProperty(t)) throw new Error(\"unknown type: \" + t);\n return {type: t, name: name};\n });\n}\n\nDispatch.prototype = dispatch.prototype = {\n constructor: Dispatch,\n on: function(typename, callback) {\n var _ = this._,\n T = parseTypenames(typename + \"\", _),\n t,\n i = -1,\n n = T.length;\n\n // If no callback was specified, return the callback of the given type and name.\n if (arguments.length < 2) {\n while (++i < n) if ((t = (typename = T[i]).type) && (t = get(_[t], typename.name))) return t;\n return;\n }\n\n // If a type was specified, set the callback for the given type and name.\n // Otherwise, if a null callback was specified, remove callbacks of the given name.\n if (callback != null && typeof callback !== \"function\") throw new Error(\"invalid callback: \" + callback);\n while (++i < n) {\n if (t = (typename = T[i]).type) _[t] = set(_[t], typename.name, callback);\n else if (callback == null) for (t in _) _[t] = set(_[t], typename.name, null);\n }\n\n return this;\n },\n copy: function() {\n var copy = {}, _ = this._;\n for (var t in _) copy[t] = _[t].slice();\n return new Dispatch(copy);\n },\n call: function(type, that) {\n if ((n = arguments.length - 2) > 0) for (var args = new Array(n), i = 0, n, t; i < n; ++i) args[i] = arguments[i + 2];\n if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n for (t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n },\n apply: function(type, that, args) {\n if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n for (var t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n }\n};\n\nfunction get(type, name) {\n for (var i = 0, n = type.length, c; i < n; ++i) {\n if ((c = type[i]).name === name) {\n return c.value;\n }\n }\n}\n\nfunction set(type, name, callback) {\n for (var i = 0, n = type.length; i < n; ++i) {\n if (type[i].name === name) {\n type[i] = noop, type = type.slice(0, i).concat(type.slice(i + 1));\n break;\n }\n }\n if (callback != null) type.push({name: name, value: callback});\n return type;\n}\n\nexport default dispatch;\n","import {event} from \"d3-selection\";\n\nexport function nopropagation() {\n event.stopImmediatePropagation();\n}\n\nexport default function() {\n event.preventDefault();\n event.stopImmediatePropagation();\n}\n","import {select} from \"d3-selection\";\nimport noevent from \"./noevent\";\n\nexport default function(view) {\n var root = view.document.documentElement,\n selection = select(view).on(\"dragstart.drag\", noevent, true);\n if (\"onselectstart\" in root) {\n selection.on(\"selectstart.drag\", noevent, true);\n } else {\n root.__noselect = root.style.MozUserSelect;\n root.style.MozUserSelect = \"none\";\n }\n}\n\nexport function yesdrag(view, noclick) {\n var root = view.document.documentElement,\n selection = select(view).on(\"dragstart.drag\", null);\n if (noclick) {\n selection.on(\"click.drag\", noevent, true);\n setTimeout(function() { selection.on(\"click.drag\", null); }, 0);\n }\n if (\"onselectstart\" in root) {\n selection.on(\"selectstart.drag\", null);\n } else {\n root.style.MozUserSelect = root.__noselect;\n delete root.__noselect;\n }\n}\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","export default function DragEvent(target, type, subject, id, active, x, y, dx, dy, dispatch) {\n this.target = target;\n this.type = type;\n this.subject = subject;\n this.identifier = id;\n this.active = active;\n this.x = x;\n this.y = y;\n this.dx = dx;\n this.dy = dy;\n this._ = dispatch;\n}\n\nDragEvent.prototype.on = function() {\n var value = this._.on.apply(this._, arguments);\n return value === this._ ? this : value;\n};\n","import {dispatch} from \"d3-dispatch\";\nimport {event, customEvent, select, mouse, touch} from \"d3-selection\";\nimport nodrag, {yesdrag} from \"./nodrag\";\nimport noevent, {nopropagation} from \"./noevent\";\nimport constant from \"./constant\";\nimport DragEvent from \"./event\";\n\n// Ignore right-click, since that should open the context menu.\nfunction defaultFilter() {\n return !event.button;\n}\n\nfunction defaultContainer() {\n return this.parentNode;\n}\n\nfunction defaultSubject(d) {\n return d == null ? {x: event.x, y: event.y} : d;\n}\n\nfunction defaultTouchable() {\n return \"ontouchstart\" in this;\n}\n\nexport default function() {\n var filter = defaultFilter,\n container = defaultContainer,\n subject = defaultSubject,\n touchable = defaultTouchable,\n gestures = {},\n listeners = dispatch(\"start\", \"drag\", \"end\"),\n active = 0,\n mousedownx,\n mousedowny,\n mousemoving,\n touchending,\n clickDistance2 = 0;\n\n function drag(selection) {\n selection\n .on(\"mousedown.drag\", mousedowned)\n .filter(touchable)\n .on(\"touchstart.drag\", touchstarted)\n .on(\"touchmove.drag\", touchmoved)\n .on(\"touchend.drag touchcancel.drag\", touchended)\n .style(\"touch-action\", \"none\")\n .style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\");\n }\n\n function mousedowned() {\n if (touchending || !filter.apply(this, arguments)) return;\n var gesture = beforestart(\"mouse\", container.apply(this, arguments), mouse, this, arguments);\n if (!gesture) return;\n select(event.view).on(\"mousemove.drag\", mousemoved, true).on(\"mouseup.drag\", mouseupped, true);\n nodrag(event.view);\n nopropagation();\n mousemoving = false;\n mousedownx = event.clientX;\n mousedowny = event.clientY;\n gesture(\"start\");\n }\n\n function mousemoved() {\n noevent();\n if (!mousemoving) {\n var dx = event.clientX - mousedownx, dy = event.clientY - mousedowny;\n mousemoving = dx * dx + dy * dy > clickDistance2;\n }\n gestures.mouse(\"drag\");\n }\n\n function mouseupped() {\n select(event.view).on(\"mousemove.drag mouseup.drag\", null);\n yesdrag(event.view, mousemoving);\n noevent();\n gestures.mouse(\"end\");\n }\n\n function touchstarted() {\n if (!filter.apply(this, arguments)) return;\n var touches = event.changedTouches,\n c = container.apply(this, arguments),\n n = touches.length, i, gesture;\n\n for (i = 0; i < n; ++i) {\n if (gesture = beforestart(touches[i].identifier, c, touch, this, arguments)) {\n nopropagation();\n gesture(\"start\");\n }\n }\n }\n\n function touchmoved() {\n var touches = event.changedTouches,\n n = touches.length, i, gesture;\n\n for (i = 0; i < n; ++i) {\n if (gesture = gestures[touches[i].identifier]) {\n noevent();\n gesture(\"drag\");\n }\n }\n }\n\n function touchended() {\n var touches = event.changedTouches,\n n = touches.length, i, gesture;\n\n if (touchending) clearTimeout(touchending);\n touchending = setTimeout(function() { touchending = null; }, 500); // Ghost clicks are delayed!\n for (i = 0; i < n; ++i) {\n if (gesture = gestures[touches[i].identifier]) {\n nopropagation();\n gesture(\"end\");\n }\n }\n }\n\n function beforestart(id, container, point, that, args) {\n var p = point(container, id), s, dx, dy,\n sublisteners = listeners.copy();\n\n if (!customEvent(new DragEvent(drag, \"beforestart\", s, id, active, p[0], p[1], 0, 0, sublisteners), function() {\n if ((event.subject = s = subject.apply(that, args)) == null) return false;\n dx = s.x - p[0] || 0;\n dy = s.y - p[1] || 0;\n return true;\n })) return;\n\n return function gesture(type) {\n var p0 = p, n;\n switch (type) {\n case \"start\": gestures[id] = gesture, n = active++; break;\n case \"end\": delete gestures[id], --active; // nobreak\n case \"drag\": p = point(container, id), n = active; break;\n }\n customEvent(new DragEvent(drag, type, s, id, n, p[0] + dx, p[1] + dy, p[0] - p0[0], p[1] - p0[1], sublisteners), sublisteners.apply, sublisteners, [type, that, args]);\n };\n }\n\n drag.filter = function(_) {\n return arguments.length ? (filter = typeof _ === \"function\" ? _ : constant(!!_), drag) : filter;\n };\n\n drag.container = function(_) {\n return arguments.length ? (container = typeof _ === \"function\" ? _ : constant(_), drag) : container;\n };\n\n drag.subject = function(_) {\n return arguments.length ? (subject = typeof _ === \"function\" ? _ : constant(_), drag) : subject;\n };\n\n drag.touchable = function(_) {\n return arguments.length ? (touchable = typeof _ === \"function\" ? _ : constant(!!_), drag) : touchable;\n };\n\n drag.on = function() {\n var value = listeners.on.apply(listeners, arguments);\n return value === listeners ? drag : value;\n };\n\n drag.clickDistance = function(_) {\n return arguments.length ? (clickDistance2 = (_ = +_) * _, drag) : Math.sqrt(clickDistance2);\n };\n\n return drag;\n}\n","var frame = 0, // is an animation frame pending?\n timeout = 0, // is a timeout pending?\n interval = 0, // are any timers active?\n pokeDelay = 1000, // how frequently we check for clock skew\n taskHead,\n taskTail,\n clockLast = 0,\n clockNow = 0,\n clockSkew = 0,\n clock = typeof performance === \"object\" && performance.now ? performance : Date,\n setFrame = typeof window === \"object\" && window.requestAnimationFrame ? window.requestAnimationFrame.bind(window) : function(f) { setTimeout(f, 17); };\n\nexport function now() {\n return clockNow || (setFrame(clearNow), clockNow = clock.now() + clockSkew);\n}\n\nfunction clearNow() {\n clockNow = 0;\n}\n\nexport function Timer() {\n this._call =\n this._time =\n this._next = null;\n}\n\nTimer.prototype = timer.prototype = {\n constructor: Timer,\n restart: function(callback, delay, time) {\n if (typeof callback !== \"function\") throw new TypeError(\"callback is not a function\");\n time = (time == null ? now() : +time) + (delay == null ? 0 : +delay);\n if (!this._next && taskTail !== this) {\n if (taskTail) taskTail._next = this;\n else taskHead = this;\n taskTail = this;\n }\n this._call = callback;\n this._time = time;\n sleep();\n },\n stop: function() {\n if (this._call) {\n this._call = null;\n this._time = Infinity;\n sleep();\n }\n }\n};\n\nexport function timer(callback, delay, time) {\n var t = new Timer;\n t.restart(callback, delay, time);\n return t;\n}\n\nexport function timerFlush() {\n now(); // Get the current time, if not already set.\n ++frame; // Pretend we’ve set an alarm, if we haven’t already.\n var t = taskHead, e;\n while (t) {\n if ((e = clockNow - t._time) >= 0) t._call.call(null, e);\n t = t._next;\n }\n --frame;\n}\n\nfunction wake() {\n clockNow = (clockLast = clock.now()) + clockSkew;\n frame = timeout = 0;\n try {\n timerFlush();\n } finally {\n frame = 0;\n nap();\n clockNow = 0;\n }\n}\n\nfunction poke() {\n var now = clock.now(), delay = now - clockLast;\n if (delay > pokeDelay) clockSkew -= delay, clockLast = now;\n}\n\nfunction nap() {\n var t0, t1 = taskHead, t2, time = Infinity;\n while (t1) {\n if (t1._call) {\n if (time > t1._time) time = t1._time;\n t0 = t1, t1 = t1._next;\n } else {\n t2 = t1._next, t1._next = null;\n t1 = t0 ? t0._next = t2 : taskHead = t2;\n }\n }\n taskTail = t0;\n sleep(time);\n}\n\nfunction sleep(time) {\n if (frame) return; // Soonest alarm already set, or will be.\n if (timeout) timeout = clearTimeout(timeout);\n var delay = time - clockNow; // Strictly less than if we recomputed clockNow.\n if (delay > 24) {\n if (time < Infinity) timeout = setTimeout(wake, time - clock.now() - clockSkew);\n if (interval) interval = clearInterval(interval);\n } else {\n if (!interval) clockLast = clock.now(), interval = setInterval(poke, pokeDelay);\n frame = 1, setFrame(wake);\n }\n}\n","import {Timer} from \"./timer\";\n\nexport default function(callback, delay, time) {\n var t = new Timer;\n delay = delay == null ? 0 : +delay;\n t.restart(function(elapsed) {\n t.stop();\n callback(elapsed + delay);\n }, delay, time);\n return t;\n}\n","import {dispatch} from \"d3-dispatch\";\nimport {timer, timeout} from \"d3-timer\";\n\nvar emptyOn = dispatch(\"start\", \"end\", \"interrupt\");\nvar emptyTween = [];\n\nexport var CREATED = 0;\nexport var SCHEDULED = 1;\nexport var STARTING = 2;\nexport var STARTED = 3;\nexport var RUNNING = 4;\nexport var ENDING = 5;\nexport var ENDED = 6;\n\nexport default function(node, name, id, index, group, timing) {\n var schedules = node.__transition;\n if (!schedules) node.__transition = {};\n else if (id in schedules) return;\n create(node, id, {\n name: name,\n index: index, // For context during callback.\n group: group, // For context during callback.\n on: emptyOn,\n tween: emptyTween,\n time: timing.time,\n delay: timing.delay,\n duration: timing.duration,\n ease: timing.ease,\n timer: null,\n state: CREATED\n });\n}\n\nexport function init(node, id) {\n var schedule = get(node, id);\n if (schedule.state > CREATED) throw new Error(\"too late; already scheduled\");\n return schedule;\n}\n\nexport function set(node, id) {\n var schedule = get(node, id);\n if (schedule.state > STARTING) throw new Error(\"too late; already started\");\n return schedule;\n}\n\nexport function get(node, id) {\n var schedule = node.__transition;\n if (!schedule || !(schedule = schedule[id])) throw new Error(\"transition not found\");\n return schedule;\n}\n\nfunction create(node, id, self) {\n var schedules = node.__transition,\n tween;\n\n // Initialize the self timer when the transition is created.\n // Note the actual delay is not known until the first callback!\n schedules[id] = self;\n self.timer = timer(schedule, 0, self.time);\n\n function schedule(elapsed) {\n self.state = SCHEDULED;\n self.timer.restart(start, self.delay, self.time);\n\n // If the elapsed delay is less than our first sleep, start immediately.\n if (self.delay <= elapsed) start(elapsed - self.delay);\n }\n\n function start(elapsed) {\n var i, j, n, o;\n\n // If the state is not SCHEDULED, then we previously errored on start.\n if (self.state !== SCHEDULED) return stop();\n\n for (i in schedules) {\n o = schedules[i];\n if (o.name !== self.name) continue;\n\n // While this element already has a starting transition during this frame,\n // defer starting an interrupting transition until that transition has a\n // chance to tick (and possibly end); see d3/d3-transition#54!\n if (o.state === STARTED) return timeout(start);\n\n // Interrupt the active transition, if any.\n // Dispatch the interrupt event.\n if (o.state === RUNNING) {\n o.state = ENDED;\n o.timer.stop();\n o.on.call(\"interrupt\", node, node.__data__, o.index, o.group);\n delete schedules[i];\n }\n\n // Cancel any pre-empted transitions. No interrupt event is dispatched\n // because the cancelled transitions never started. Note that this also\n // removes this transition from the pending list!\n else if (+i < id) {\n o.state = ENDED;\n o.timer.stop();\n delete schedules[i];\n }\n }\n\n // Defer the first tick to end of the current frame; see d3/d3#1576.\n // Note the transition may be canceled after start and before the first tick!\n // Note this must be scheduled before the start event; see d3/d3-transition#16!\n // Assuming this is successful, subsequent callbacks go straight to tick.\n timeout(function() {\n if (self.state === STARTED) {\n self.state = RUNNING;\n self.timer.restart(tick, self.delay, self.time);\n tick(elapsed);\n }\n });\n\n // Dispatch the start event.\n // Note this must be done before the tween are initialized.\n self.state = STARTING;\n self.on.call(\"start\", node, node.__data__, self.index, self.group);\n if (self.state !== STARTING) return; // interrupted\n self.state = STARTED;\n\n // Initialize the tween, deleting null tween.\n tween = new Array(n = self.tween.length);\n for (i = 0, j = -1; i < n; ++i) {\n if (o = self.tween[i].value.call(node, node.__data__, self.index, self.group)) {\n tween[++j] = o;\n }\n }\n tween.length = j + 1;\n }\n\n function tick(elapsed) {\n var t = elapsed < self.duration ? self.ease.call(null, elapsed / self.duration) : (self.timer.restart(stop), self.state = ENDING, 1),\n i = -1,\n n = tween.length;\n\n while (++i < n) {\n tween[i].call(null, t);\n }\n\n // Dispatch the end event.\n if (self.state === ENDING) {\n self.on.call(\"end\", node, node.__data__, self.index, self.group);\n stop();\n }\n }\n\n function stop() {\n self.state = ENDED;\n self.timer.stop();\n delete schedules[id];\n for (var i in schedules) return; // eslint-disable-line no-unused-vars\n delete node.__transition;\n }\n}\n","import {get, set} from \"./schedule\";\n\nfunction tweenRemove(id, name) {\n var tween0, tween1;\n return function() {\n var schedule = set(this, id),\n tween = schedule.tween;\n\n // If this node shared tween with the previous node,\n // just assign the updated shared tween and we’re done!\n // Otherwise, copy-on-write.\n if (tween !== tween0) {\n tween1 = tween0 = tween;\n for (var i = 0, n = tween1.length; i < n; ++i) {\n if (tween1[i].name === name) {\n tween1 = tween1.slice();\n tween1.splice(i, 1);\n break;\n }\n }\n }\n\n schedule.tween = tween1;\n };\n}\n\nfunction tweenFunction(id, name, value) {\n var tween0, tween1;\n if (typeof value !== \"function\") throw new Error;\n return function() {\n var schedule = set(this, id),\n tween = schedule.tween;\n\n // If this node shared tween with the previous node,\n // just assign the updated shared tween and we’re done!\n // Otherwise, copy-on-write.\n if (tween !== tween0) {\n tween1 = (tween0 = tween).slice();\n for (var t = {name: name, value: value}, i = 0, n = tween1.length; i < n; ++i) {\n if (tween1[i].name === name) {\n tween1[i] = t;\n break;\n }\n }\n if (i === n) tween1.push(t);\n }\n\n schedule.tween = tween1;\n };\n}\n\nexport default function(name, value) {\n var id = this._id;\n\n name += \"\";\n\n if (arguments.length < 2) {\n var tween = get(this.node(), id).tween;\n for (var i = 0, n = tween.length, t; i < n; ++i) {\n if ((t = tween[i]).name === name) {\n return t.value;\n }\n }\n return null;\n }\n\n return this.each((value == null ? tweenRemove : tweenFunction)(id, name, value));\n}\n\nexport function tweenValue(transition, name, value) {\n var id = transition._id;\n\n transition.each(function() {\n var schedule = set(this, id);\n (schedule.value || (schedule.value = {}))[name] = value.apply(this, arguments);\n });\n\n return function(node) {\n return get(node, id).value[name];\n };\n}\n","import {color} from \"d3-color\";\nimport {interpolateNumber, interpolateRgb, interpolateString} from \"d3-interpolate\";\n\nexport default function(a, b) {\n var c;\n return (typeof b === \"number\" ? interpolateNumber\n : b instanceof color ? interpolateRgb\n : (c = color(b)) ? (b = c, interpolateRgb)\n : interpolateString)(a, b);\n}\n","function removeFunction(id) {\n return function() {\n var parent = this.parentNode;\n for (var i in this.__transition) if (+i !== id) return;\n if (parent) parent.removeChild(this);\n };\n}\n\nexport default function() {\n return this.on(\"end.remove\", removeFunction(this._id));\n}\n","import {selection} from \"d3-selection\";\n\nvar Selection = selection.prototype.constructor;\n\nexport default function() {\n return new Selection(this._groups, this._parents);\n}\n","import {tweenValue} from \"./tween\";\n\nfunction textConstant(value) {\n return function() {\n this.textContent = value;\n };\n}\n\nfunction textFunction(value) {\n return function() {\n var value1 = value(this);\n this.textContent = value1 == null ? \"\" : value1;\n };\n}\n\nexport default function(value) {\n return this.tween(\"text\", typeof value === \"function\"\n ? textFunction(tweenValue(this, \"text\", value))\n : textConstant(value == null ? \"\" : value + \"\"));\n}\n","import {selection} from \"d3-selection\";\nimport transition_attr from \"./attr\";\nimport transition_attrTween from \"./attrTween\";\nimport transition_delay from \"./delay\";\nimport transition_duration from \"./duration\";\nimport transition_ease from \"./ease\";\nimport transition_filter from \"./filter\";\nimport transition_merge from \"./merge\";\nimport transition_on from \"./on\";\nimport transition_remove from \"./remove\";\nimport transition_select from \"./select\";\nimport transition_selectAll from \"./selectAll\";\nimport transition_selection from \"./selection\";\nimport transition_style from \"./style\";\nimport transition_styleTween from \"./styleTween\";\nimport transition_text from \"./text\";\nimport transition_transition from \"./transition\";\nimport transition_tween from \"./tween\";\n\nvar id = 0;\n\nexport function Transition(groups, parents, name, id) {\n this._groups = groups;\n this._parents = parents;\n this._name = name;\n this._id = id;\n}\n\nexport default function transition(name) {\n return selection().transition(name);\n}\n\nexport function newId() {\n return ++id;\n}\n\nvar selection_prototype = selection.prototype;\n\nTransition.prototype = transition.prototype = {\n constructor: Transition,\n select: transition_select,\n selectAll: transition_selectAll,\n filter: transition_filter,\n merge: transition_merge,\n selection: transition_selection,\n transition: transition_transition,\n call: selection_prototype.call,\n nodes: selection_prototype.nodes,\n node: selection_prototype.node,\n size: selection_prototype.size,\n empty: selection_prototype.empty,\n each: selection_prototype.each,\n on: transition_on,\n attr: transition_attr,\n attrTween: transition_attrTween,\n style: transition_style,\n styleTween: transition_styleTween,\n text: transition_text,\n remove: transition_remove,\n tween: transition_tween,\n delay: transition_delay,\n duration: transition_duration,\n ease: transition_ease\n};\n","import {selector} from \"d3-selection\";\nimport {Transition} from \"./index\";\nimport schedule, {get} from \"./schedule\";\n\nexport default function(select) {\n var name = this._name,\n id = this._id;\n\n if (typeof select !== \"function\") select = selector(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {\n if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {\n if (\"__data__\" in node) subnode.__data__ = node.__data__;\n subgroup[i] = subnode;\n schedule(subgroup[i], name, id, i, subgroup, get(node, id));\n }\n }\n }\n\n return new Transition(subgroups, this._parents, name, id);\n}\n","import {selectorAll} from \"d3-selection\";\nimport {Transition} from \"./index\";\nimport schedule, {get} from \"./schedule\";\n\nexport default function(select) {\n var name = this._name,\n id = this._id;\n\n if (typeof select !== \"function\") select = selectorAll(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n for (var children = select.call(node, node.__data__, i, group), child, inherit = get(node, id), k = 0, l = children.length; k < l; ++k) {\n if (child = children[k]) {\n schedule(child, name, id, k, children, inherit);\n }\n }\n subgroups.push(children);\n parents.push(node);\n }\n }\n }\n\n return new Transition(subgroups, parents, name, id);\n}\n","import {matcher} from \"d3-selection\";\nimport {Transition} from \"./index\";\n\nexport default function(match) {\n if (typeof match !== \"function\") match = matcher(match);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {\n if ((node = group[i]) && match.call(node, node.__data__, i, group)) {\n subgroup.push(node);\n }\n }\n }\n\n return new Transition(subgroups, this._parents, this._name, this._id);\n}\n","import {Transition} from \"./index\";\n\nexport default function(transition) {\n if (transition._id !== this._id) throw new Error;\n\n for (var groups0 = this._groups, groups1 = transition._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {\n for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group0[i] || group1[i]) {\n merge[i] = node;\n }\n }\n }\n\n for (; j < m0; ++j) {\n merges[j] = groups0[j];\n }\n\n return new Transition(merges, this._parents, this._name, this._id);\n}\n","import {Transition, newId} from \"./index\";\nimport schedule, {get} from \"./schedule\";\n\nexport default function() {\n var name = this._name,\n id0 = this._id,\n id1 = newId();\n\n for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n var inherit = get(node, id0);\n schedule(node, name, id1, i, group, {\n time: inherit.time + inherit.delay + inherit.duration,\n delay: 0,\n duration: inherit.duration,\n ease: inherit.ease\n });\n }\n }\n }\n\n return new Transition(groups, this._parents, name, id1);\n}\n","import {get, set, init} from \"./schedule\";\n\nfunction start(name) {\n return (name + \"\").trim().split(/^|\\s+/).every(function(t) {\n var i = t.indexOf(\".\");\n if (i >= 0) t = t.slice(0, i);\n return !t || t === \"start\";\n });\n}\n\nfunction onFunction(id, name, listener) {\n var on0, on1, sit = start(name) ? init : set;\n return function() {\n var schedule = sit(this, id),\n on = schedule.on;\n\n // If this node shared a dispatch with the previous node,\n // just assign the updated shared dispatch and we’re done!\n // Otherwise, copy-on-write.\n if (on !== on0) (on1 = (on0 = on).copy()).on(name, listener);\n\n schedule.on = on1;\n };\n}\n\nexport default function(name, listener) {\n var id = this._id;\n\n return arguments.length < 2\n ? get(this.node(), id).on.on(name)\n : this.each(onFunction(id, name, listener));\n}\n","import {interpolateTransformSvg as interpolateTransform} from \"d3-interpolate\";\nimport {namespace} from \"d3-selection\";\nimport {tweenValue} from \"./tween\";\nimport interpolate from \"./interpolate\";\n\nfunction attrRemove(name) {\n return function() {\n this.removeAttribute(name);\n };\n}\n\nfunction attrRemoveNS(fullname) {\n return function() {\n this.removeAttributeNS(fullname.space, fullname.local);\n };\n}\n\nfunction attrConstant(name, interpolate, value1) {\n var value00,\n interpolate0;\n return function() {\n var value0 = this.getAttribute(name);\n return value0 === value1 ? null\n : value0 === value00 ? interpolate0\n : interpolate0 = interpolate(value00 = value0, value1);\n };\n}\n\nfunction attrConstantNS(fullname, interpolate, value1) {\n var value00,\n interpolate0;\n return function() {\n var value0 = this.getAttributeNS(fullname.space, fullname.local);\n return value0 === value1 ? null\n : value0 === value00 ? interpolate0\n : interpolate0 = interpolate(value00 = value0, value1);\n };\n}\n\nfunction attrFunction(name, interpolate, value) {\n var value00,\n value10,\n interpolate0;\n return function() {\n var value0, value1 = value(this);\n if (value1 == null) return void this.removeAttribute(name);\n value0 = this.getAttribute(name);\n return value0 === value1 ? null\n : value0 === value00 && value1 === value10 ? interpolate0\n : interpolate0 = interpolate(value00 = value0, value10 = value1);\n };\n}\n\nfunction attrFunctionNS(fullname, interpolate, value) {\n var value00,\n value10,\n interpolate0;\n return function() {\n var value0, value1 = value(this);\n if (value1 == null) return void this.removeAttributeNS(fullname.space, fullname.local);\n value0 = this.getAttributeNS(fullname.space, fullname.local);\n return value0 === value1 ? null\n : value0 === value00 && value1 === value10 ? interpolate0\n : interpolate0 = interpolate(value00 = value0, value10 = value1);\n };\n}\n\nexport default function(name, value) {\n var fullname = namespace(name), i = fullname === \"transform\" ? interpolateTransform : interpolate;\n return this.attrTween(name, typeof value === \"function\"\n ? (fullname.local ? attrFunctionNS : attrFunction)(fullname, i, tweenValue(this, \"attr.\" + name, value))\n : value == null ? (fullname.local ? attrRemoveNS : attrRemove)(fullname)\n : (fullname.local ? attrConstantNS : attrConstant)(fullname, i, value + \"\"));\n}\n","import {namespace} from \"d3-selection\";\n\nfunction attrTweenNS(fullname, value) {\n function tween() {\n var node = this, i = value.apply(node, arguments);\n return i && function(t) {\n node.setAttributeNS(fullname.space, fullname.local, i(t));\n };\n }\n tween._value = value;\n return tween;\n}\n\nfunction attrTween(name, value) {\n function tween() {\n var node = this, i = value.apply(node, arguments);\n return i && function(t) {\n node.setAttribute(name, i(t));\n };\n }\n tween._value = value;\n return tween;\n}\n\nexport default function(name, value) {\n var key = \"attr.\" + name;\n if (arguments.length < 2) return (key = this.tween(key)) && key._value;\n if (value == null) return this.tween(key, null);\n if (typeof value !== \"function\") throw new Error;\n var fullname = namespace(name);\n return this.tween(key, (fullname.local ? attrTweenNS : attrTween)(fullname, value));\n}\n","import {interpolateTransformCss as interpolateTransform} from \"d3-interpolate\";\nimport {style} from \"d3-selection\";\nimport {tweenValue} from \"./tween\";\nimport interpolate from \"./interpolate\";\n\nfunction styleRemove(name, interpolate) {\n var value00,\n value10,\n interpolate0;\n return function() {\n var value0 = style(this, name),\n value1 = (this.style.removeProperty(name), style(this, name));\n return value0 === value1 ? null\n : value0 === value00 && value1 === value10 ? interpolate0\n : interpolate0 = interpolate(value00 = value0, value10 = value1);\n };\n}\n\nfunction styleRemoveEnd(name) {\n return function() {\n this.style.removeProperty(name);\n };\n}\n\nfunction styleConstant(name, interpolate, value1) {\n var value00,\n interpolate0;\n return function() {\n var value0 = style(this, name);\n return value0 === value1 ? null\n : value0 === value00 ? interpolate0\n : interpolate0 = interpolate(value00 = value0, value1);\n };\n}\n\nfunction styleFunction(name, interpolate, value) {\n var value00,\n value10,\n interpolate0;\n return function() {\n var value0 = style(this, name),\n value1 = value(this);\n if (value1 == null) value1 = (this.style.removeProperty(name), style(this, name));\n return value0 === value1 ? null\n : value0 === value00 && value1 === value10 ? interpolate0\n : interpolate0 = interpolate(value00 = value0, value10 = value1);\n };\n}\n\nexport default function(name, value, priority) {\n var i = (name += \"\") === \"transform\" ? interpolateTransform : interpolate;\n return value == null ? this\n .styleTween(name, styleRemove(name, i))\n .on(\"end.style.\" + name, styleRemoveEnd(name))\n : this.styleTween(name, typeof value === \"function\"\n ? styleFunction(name, i, tweenValue(this, \"style.\" + name, value))\n : styleConstant(name, i, value + \"\"), priority);\n}\n","function styleTween(name, value, priority) {\n function tween() {\n var node = this, i = value.apply(node, arguments);\n return i && function(t) {\n node.style.setProperty(name, i(t), priority);\n };\n }\n tween._value = value;\n return tween;\n}\n\nexport default function(name, value, priority) {\n var key = \"style.\" + (name += \"\");\n if (arguments.length < 2) return (key = this.tween(key)) && key._value;\n if (value == null) return this.tween(key, null);\n if (typeof value !== \"function\") throw new Error;\n return this.tween(key, styleTween(name, value, priority == null ? \"\" : priority));\n}\n","import {get, init} from \"./schedule\";\n\nfunction delayFunction(id, value) {\n return function() {\n init(this, id).delay = +value.apply(this, arguments);\n };\n}\n\nfunction delayConstant(id, value) {\n return value = +value, function() {\n init(this, id).delay = value;\n };\n}\n\nexport default function(value) {\n var id = this._id;\n\n return arguments.length\n ? this.each((typeof value === \"function\"\n ? delayFunction\n : delayConstant)(id, value))\n : get(this.node(), id).delay;\n}\n","import {get, set} from \"./schedule\";\n\nfunction durationFunction(id, value) {\n return function() {\n set(this, id).duration = +value.apply(this, arguments);\n };\n}\n\nfunction durationConstant(id, value) {\n return value = +value, function() {\n set(this, id).duration = value;\n };\n}\n\nexport default function(value) {\n var id = this._id;\n\n return arguments.length\n ? this.each((typeof value === \"function\"\n ? durationFunction\n : durationConstant)(id, value))\n : get(this.node(), id).duration;\n}\n","import {get, set} from \"./schedule\";\n\nfunction easeConstant(id, value) {\n if (typeof value !== \"function\") throw new Error;\n return function() {\n set(this, id).ease = value;\n };\n}\n\nexport default function(value) {\n var id = this._id;\n\n return arguments.length\n ? this.each(easeConstant(id, value))\n : get(this.node(), id).ease;\n}\n","import {Transition, newId} from \"../transition/index\";\nimport schedule from \"../transition/schedule\";\nimport {easeCubicInOut} from \"d3-ease\";\nimport {now} from \"d3-timer\";\n\nvar defaultTiming = {\n time: null, // Set on use.\n delay: 0,\n duration: 250,\n ease: easeCubicInOut\n};\n\nfunction inherit(node, id) {\n var timing;\n while (!(timing = node.__transition) || !(timing = timing[id])) {\n if (!(node = node.parentNode)) {\n return defaultTiming.time = now(), defaultTiming;\n }\n }\n return timing;\n}\n\nexport default function(name) {\n var id,\n timing;\n\n if (name instanceof Transition) {\n id = name._id, name = name._name;\n } else {\n id = newId(), (timing = defaultTiming).time = now(), name = name == null ? null : name + \"\";\n }\n\n for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n schedule(node, name, id, i, group, timing || inherit(node, id));\n }\n }\n }\n\n return new Transition(groups, this._parents, name, id);\n}\n","import {selection} from \"d3-selection\";\nimport selection_interrupt from \"./interrupt\";\nimport selection_transition from \"./transition\";\n\nselection.prototype.interrupt = selection_interrupt;\nselection.prototype.transition = selection_transition;\n","import interrupt from \"../interrupt\";\n\nexport default function(name) {\n return this.each(function() {\n interrupt(this, name);\n });\n}\n","import {STARTING, ENDING, ENDED} from \"./transition/schedule\";\n\nexport default function(node, name) {\n var schedules = node.__transition,\n schedule,\n active,\n empty = true,\n i;\n\n if (!schedules) return;\n\n name = name == null ? null : name + \"\";\n\n for (i in schedules) {\n if ((schedule = schedules[i]).name !== name) { empty = false; continue; }\n active = schedule.state > STARTING && schedule.state < ENDING;\n schedule.state = ENDED;\n schedule.timer.stop();\n if (active) schedule.on.call(\"interrupt\", node, node.__data__, schedule.index, schedule.group);\n delete schedules[i];\n }\n\n if (empty) delete node.__transition;\n}\n","import {Transition} from \"./transition/index\";\nimport {SCHEDULED} from \"./transition/schedule\";\n\nvar root = [null];\n\nexport default function(node, name) {\n var schedules = node.__transition,\n schedule,\n i;\n\n if (schedules) {\n name = name == null ? null : name + \"\";\n for (i in schedules) {\n if ((schedule = schedules[i]).state > SCHEDULED && schedule.name === name) {\n return new Transition([[node]], root, name, +i);\n }\n }\n }\n\n return null;\n}\n","import { select, event as d3event, selection, clientPoint } from 'd3-selection';\nimport { drag as d3drag } from 'd3-drag';\nimport 'd3-transition';\nimport { mergeRecursive } from './common-utils';\n/**\n * This function takes a raw DOM element or\n * a string and returns a d3 selection of that element.\n *\n * @param {HTMLElement | string} element The element to wrap in d3 selection.\n * @return {Selection} Instance of d3 selection.\n */\nconst selectElement = element => select(element);\n\n/**\n * It creates a new d3 element on the parent element\n * @param {Selection} parent Element to which the element is to be appended\n * @param {Object} elemType Type of the new element\n * @param {Array} data Data for the new element\n * @param {Object} selector classname/id/tagname for the element\n * @return {HTMLElement} Newly Created Element\n */\nconst makeElement = (parent, elemType, data, selector, callbacks = {}, keyFn) => {\n if ((parent instanceof HTMLElement || parent instanceof SVGElement)) {\n parent = selectElement(parent);\n }\n\n const selectorVal = selector ? selector[0] : null;\n let selectorType = null;\n let actualSelector = null;\n let element = null;\n let enterSel = null;\n let mergeSel = null;\n let filter;\n if (selectorVal) {\n if (selectorVal === '#') {\n selectorType = 'id';\n actualSelector = selector;\n } else {\n selectorType = 'class';\n actualSelector = selector[0] === '.' ? selector : `.${selector}`;\n }\n } else {\n actualSelector = elemType;\n filter = true;\n }\n element = parent.selectAll(actualSelector);\n\n filter && (element = element.filter(function () {\n return this.parentNode === parent.node();\n }));\n element = element.data(data, keyFn);\n\n enterSel = element.enter()\n .append(elemType || 'div');\n callbacks.enter && enterSel.each(function (...params) {\n callbacks.enter(selectElement(this), ...params);\n });\n\n mergeSel = enterSel.merge(element);\n callbacks.update && mergeSel.each(function (...params) {\n callbacks.update(selectElement(this), ...params);\n });\n if (selectorType === 'class') {\n mergeSel.classed(selectorVal === '.' ? selector.substring(1, selector.length) : selector, true);\n } else if (selectorType === 'id') {\n mergeSel.attr('id', selector.substring(1, selector.length));\n }\n const exitSel = element.exit();\n\n if (callbacks.exit) {\n exitSel.each(function (...params) {\n callbacks.exit(selectElement(this), ...params);\n });\n } else {\n exitSel.remove();\n }\n return mergeSel;\n};\n\n/**\n * This function applies styles to an element\n * @param {Object} elem Element Selection\n * @param {Object} styleObj Style Object to be applied\n * @return {Element} Newly Created Element\n*/\nconst applyStyle = (elem, styleObj) => {\n Object.entries(styleObj).forEach((d) => {\n elem.style(d[0], d[1]);\n }, this);\n return elem;\n};\n\n/**\n * This function appends a dom element in another element.\n * @param {HTMLElement | SVGElement} element1 The element in which to append the second element\n * @param {HTMLElement | SVGElement} element2 The element which will be appended.\n */\nconst appendElement = (element1, element2) => {\n element1.appendChild(element2);\n};\n\n/**\n * Sets the attributes to the element.\n * @param {HTMLElement | SVGElement} element Element on which attributes will be applied\n * @param {Object} attrs Attributes which need to be applied\n */\nconst setElementAttrs = (element, attrs) => {\n for (const key in attrs) {\n if ({}.hasOwnProperty.call(attrs, key)) {\n element.attr(key, attrs[key]);\n }\n }\n};\n\n/**\n * Sets attributes in the svg or html element\n * @param {SVGElement | HTMLElement} element The element on which attrs will be applied\n * @param {Array.} attrs Array of attributes\n * @param {string} className className of elements to select.\n * @return {SVGElement | HTMLElement} SVGElement or html element.\n */\nconst setAttrs = (element, attrs, className) => {\n if (!(element instanceof selection)) {\n element = selectElement(element);\n }\n className !== undefined ? element.selectAll(`.${className}`).each(function () {\n setElementAttrs(select(this), attrs);\n }) : setElementAttrs(element, attrs);\n return element;\n};\n\n/**\n * Adds a css class to elements which passes the filter function.If filter function is not given,\n * then all elements will be applied the class.\n * @param {HTMLElement | SVGElement} element element\n * @param {string} className css class\n * @param {string} selector css selector\n * @param {Function} filterFn filter method.\n */\nconst addClass = (element, className, selector, filterFn) => {\n select(element).selectAll(selector).each(function (data) {\n const elem = select(this);\n filterFn ? filterFn(data) && elem.classed(className, true) :\n elem.classed(className, true);\n });\n};\n\n/**\n * Removes the css class from elements which passes the filter function.If filter function is not given,\n * then all elements will be applied the class.\n * @param {HTMLElement | SVGElement} element element\n * @param {string} className css class\n * @param {string} selector css selector\n * @param {Function} filterFn filter method.\n */\nconst removeClass = (element, className, selector, filterFn) => {\n select(element).selectAll(selector).each(function (data) {\n const elem = select(this);\n filterFn ? filterFn(data) && elem.classed(className, false) :\n elem.classed(className, false);\n });\n};\n\n/**\n * Sets styles in the svg or html element\n * @param {SVGElement | HTMLElement} element The element on which styles will be applied\n * @param {Array.} styles Array of style attributes\n * @return {SVGElement | HTMLElement} SVGElement or html element.\n */\nconst setStyles = (element, styles) => {\n if (!(element instanceof selection)) {\n element = selectElement(element);\n }\n for (const key in styles) {\n if ({}.hasOwnProperty.call(styles, key)) {\n element.style(key, styles[key]);\n }\n }\n return element;\n};\n\n/**\n * Creates svg or html elements by binding data to the selection.Removes extra elements\n * on exit.\n * @param {Object} params Parameter object\n * @param {SVGElement | HTMLElement} params.container Container element where all elements will be appended\n * @param {string} params.selector Selector by which elements will be selected from dom\n * @param {string} params.append Append tag\n * @param {Function} params.each Function which will be executed for each data point and element.\n */\nconst createElements = (params) => {\n const container = select(params.container);\n let data;\n let sel;\n\n data = params.data;\n if (typeof data === 'number') {\n data = Array(data).fill().map((d, i) => i);\n }\n sel = container.selectAll(params.selector).data(data);\n\n sel = container.selectAll(params.selector).filter(function () {\n return this.parentNode === container.node();\n }).data(params.data);\n\n const selectionMerge = sel.enter().append(params.append).merge(sel).each(function (d, i) {\n params.each(d, select(this), i);\n });\n\n selectionMerge.attr('class', params.className || '');\n sel.exit().remove();\n};\n\n/**\n * Clips an element with given measurement. Basically it is used to hide overflowing portions\n * of any element.\n * @param {SVGElement} container svg element which needs to be clipped.\n * @param {Object} measurement Dimensions of the clipped rectangle.\n * @param {string} id Unique id of the clip element\n */\nconst clipElement = (container, measurement, id) => {\n const clipPathElement = makeElement(select(container), 'clipPath', [1], `#${id}`);\n const clipPathRect = makeElement(clipPathElement, 'rect', [1]);\n clipPathRect.attr('x', measurement.x)\n .attr('y', measurement.x)\n .attr('width', measurement.width)\n .attr('height', measurement.height);\n clipPathElement.attr('clip-path', `url(#${id})`);\n};\n\n/**\n * Returns the element of the corresponding classname.\n * @param {HTMLElement | SVGElement} node html or svg node element.\n * @param {string} className css class to be applied.\n * @return {HTMLElement | SVGElement} html or svg element.\n */\nconst getElementsByClassName = (node, className) => select(node).selectAll(className).nodes();\n\n/**\n * Gets the mouse position relative to an svg type of element\n * @param {SVGElement} element Any svg element like rect, circle, etc.\n * @param {Event} event Event object.\n * @return {Object} x and y position relative to the container element passed.\n */\nconst getMousePos = (element, event) => {\n const boundingClientRect = element.getBoundingClientRect();\n return {\n x: event.x - boundingClientRect.x,\n y: event.y - boundingClientRect.y\n };\n};\n\nconst getClientPoint = (...params) => {\n const pos = clientPoint(...params);\n return {\n x: pos[0],\n y: pos[1]\n };\n};\n\n/** This function appends a dom element in another element.\n * @param {Object} tag The tag name of the element to append\n * @param {Object} mount Mount point fo the element\n * @return {Object} selection of the appended element\n */\nconst createElement = (tag, mount) => select(mount).append(tag).node();\n\n/**\n * Gets the d3 event function\n * @return {Object} d3 event\n */\nconst getEvent = () => d3event;\n\n/**\n * Gets the d3 drag function\n * @return {Object} d3 drag\n */\nconst getD3Drag = () => d3drag;\n\nconst getSmartComputedStyle = (group, css) => {\n let textEl;\n const testText = 'W';\n const mandatoryStyle = {\n 'fill-opacity': 0\n };\n const className = typeof css === 'string' ? css : (css instanceof Array ? css.join(' ') : undefined);\n\n if (group.node() instanceof HTMLElement) {\n textEl = group.append('div').html(testText);\n } else {\n textEl = group.append('text').text(testText);\n }\n\n if (className) {\n textEl.attr('class', className);\n } else if (typeof css === 'object') {\n delete css['fill-opacity'];\n mergeRecursive(mandatoryStyle, css);\n }\n\n textEl.style(mandatoryStyle);\n\n const computedStyle = window.getComputedStyle(textEl.node());\n const styleForSmartLabel = {\n fontSize: computedStyle.fontSize,\n fontFamily: computedStyle.fontFamily,\n fontWeight: computedStyle.fontWeight,\n fontStyle: computedStyle.fontStyle\n };\n\n textEl.remove();\n\n return styleForSmartLabel;\n};\n\nconst hasTouch = () => 'ontouchstart' in document.documentElement;\n\nexport {\n hasTouch,\n selectElement,\n makeElement,\n applyStyle,\n addClass,\n removeClass,\n appendElement,\n setAttrs,\n setStyles,\n createElement,\n createElements,\n clipElement,\n getElementsByClassName,\n getMousePos,\n getEvent,\n getD3Drag,\n getSmartComputedStyle,\n getClientPoint\n};\n","/**\n * This class represents a selection applied on a data array.\n *\n * @class Selection\n */\nclass Selection {\n /**\n * Creates an instance of Selection.\n * @param {Array} data Array of DataObjects.\n * @memberof Selection\n */\n constructor () {\n this._data = [];\n // // map of id to data\n this._idMap = {};\n\n this._mode = '';\n // data.forEach((item, idx) => {\n // const index = item.id || idx;\n // this._idMap[index] = item;\n // });\n // // array to store data in enter phase\n this._enterdata = [];\n // // array to store data in exit phase\n this._exitdata = [];\n }\n /**\n * Gets the object bound to a class\n *\n * @return {Object} current data set bound to the class\n * @memberof Selection\n */\n getObjects () {\n return Object.keys(this._idMap).map(e => this._idMap[e]);\n }\n\n /**\n * This method is used to supply seed data to a selection.\n *\n * @param {Array} newData Seed data to create the enter selection.\n * @param {Functon | undefined } idGetter This function is used to uniqely identify a data entry.\n * @return {Selection} Modified selection.\n * @memberof Selection\n */\n data (newData, idGetter) {\n if (idGetter) {\n this._data = [];\n this._idGetter = idGetter;\n const tempMap = {};\n\n newData.forEach((...params) => {\n const index = idGetter(...params);\n tempMap[index] = params[0];\n });\n // check if any data items have been removed\n const purgedIds = [];\n\n Object.keys(this._idMap).forEach((id) => {\n if (!tempMap[id]) {\n purgedIds.push(id);\n }\n });\n\n Object.keys(tempMap).forEach((id) => {\n if (!this._idMap[id]) {\n this._enterdata.push(tempMap[id]);\n } else {\n this._idMap[id] = tempMap[id];\n this._data.push(tempMap[id]);\n }\n });\n // move the purged items to exit selection\n purgedIds.forEach((id) => {\n const purged = this._idMap[id];\n this._exitdata.push(purged);\n // this._data = this._data.slice(id, 1);\n delete this._idMap[id];\n });\n // this._data = this._data.slice(temp, this._data.length);\n\n return this;\n }\n // no id getter supplied so use indices\n if (newData.length > this._data.length) {\n const startIdx = this._data.length;\n for (let i = startIdx; i < newData.length; i += 1) {\n this._enterdata.push(newData[i]);\n }\n } else {\n // push to exit selection\n const temp = newData.length;\n for (let i = temp; i < this._data.length; i += 1) {\n const purged = this._data[i];\n delete this._idMap[purged.id];\n this._exitdata.push(purged);\n }\n this._data = this._data.slice(temp, this._data.length);\n }\n return this;\n }\n\n /**\n * Applies the supplied callback to each data element\n * and returns a new selection.\n *\n * @param {Function} callback Callback to execute on each item.\n * @return {Selection} New selection with data created using callback.\n * @memberof EnterSelection\n */\n append (callback) {\n this[`_${this._mode}data`].forEach((...params) => {\n const data = params[0];\n const id = this._idGetter ? this._idGetter(...params) : (data.id || params[1]);\n this._idMap[id] = callback(...params);\n });\n this._mode = '';\n return this;\n }\n\n /**\n * This method returns an enter selection that\n * allows or update operations.\n *\n * @return {EnterSelection} Instance of enter selection.\n * @memberof Selection\n */\n enter () {\n this._mode = 'enter';\n return this;\n // return new EnterSelection(this._enterdata, this._idMap, this._idGetter);\n }\n\n /**\n * This method is used to set key value pairs\n * on data objects.\n *\n * @param {string} key Name of property.\n * @param {any} value Value of property.\n * @return {Selection} Modified selection.\n * @memberof Selection\n */\n attr (key, value) {\n this._data.forEach(item => item.attr(key, value));\n return this;\n }\n\n /**\n * This method merges the data of one selection with another.\n *\n * @param {Selection} selection Instance of selection.\n * @return {Selection} Modified selection.\n * @memberof Selection\n */\n merge (selection) {\n selection._data.forEach((...params) => {\n const id = this._idGetter ? this._idGetter(...params) : (params[0].id || params[1]);\n this._idMap[id] = params[0];\n this._data.push(params[0]);\n });\n // reset enter selection\n this._enterdata = [];\n return this;\n }\n\n /**\n * Returns a selection with exit data.\n *\n * @return {Selection} Instance of selection.\n * @memberof Selection\n */\n exit () {\n this._mode = 'exit';\n // const exitdata = this._exitdata;\n // const exitSelection = new Selection(exitdata);\n // this._exitdata = [];\n return this;\n }\n\n each (fn) {\n Object.keys(this._idMap).forEach((e) => {\n fn(this._idMap[e]);\n });\n return this;\n }\n\n map (fn) {\n Object.keys(this._idMap).forEach((...params) => {\n this._idMap[params[0]] = fn(this._idMap[params[0]], ...params);\n });\n return this;\n }\n\n /**\n * Executes the cleanup operation associated with data objets.\n *\n * @memberof Selection\n */\n remove () {\n // do cleanup on DDO's\n const data = this[`_${this._mode}data`];\n\n data.forEach(item => item.remove());\n if (this._mode === '') {\n this.each(e => e.remove());\n }\n this[`_${this._mode}data`] = [];\n this._mode = '';\n }\n}\n\nexport default Selection;\n","import { getUniqueId } from '../index';\n/**\n * Represents the base class that all objects that form\n * the data for a selection must inherit from.\n *\n * @class DataObject\n */\nclass DataObject {\n/**\n * Creates an instance of DataObject.\n * @memberof DataObject\n */\n constructor () {\n this._id = getUniqueId();\n }\n /**\n * Returns the id.\n *\n * @readonly\n * @memberof DataObject\n */\n get id () {\n return this._id;\n }\n\n /**\n * Sets the value corresponding to supplied key.\n *\n * @param {string} key The property name.\n * @param {any} value Value associated with prop.\n * @memberof DataObject\n */\n attr (key, value) {\n this[key] = value;\n }\n\n /**\n * Clean up code to be executed by each object.\n *\n * @override\n * @memberof DataObject\n */\n remove () {\n // cleanup\n }\n}\n\nexport default DataObject;\n","const events = [\n 'initialized',\n 'beforeupdate',\n 'updated',\n 'beforedraw',\n 'drawn',\n 'beforeremove',\n 'removed'\n];\n\nconst compositions = [\n 'canvas',\n 'unit',\n 'layer',\n 'axis',\n 'facet-headers',\n 'legend',\n 'caption'\n];\n\nconst EVENT_LIST = [];\n\ncompositions.forEach((composition) => {\n events.forEach((event) => {\n EVENT_LIST.push(`${composition}.${event}`);\n });\n});\n\nexport default EVENT_LIST;\n","import EVENT_LIST from './event-list';\n\n/**\n * At first call it accepts one function\n * calling it second time accepts notification object.\n * notification object then called with first accepted function\n *\n * @param {Function} resolveFn a promise's resolve function\n * @return {Function} a function to accept notification object\n */\nconst resolver = resolveFn => notification => resolveFn(notification);\n\n/**\n * Checks if the property string is present in the source object\n *\n * @param {Object} source source object whom you want to check the property\n * @param {string} property key name that need to be checked\n * @return {boolean} returns true if the property found in the source object\n */\nconst hasOwn = (source, property) => Object.prototype.hasOwnProperty.call(source, property);\n\n/**\n * LifeCycleManager which goes as a dependendecy to a muze\n * it accepts notification from the entire library throughout\n * the exeecution life\n *\n * @export\n * @class LifeCycleManager\n */\nexport default class LifeCycleManager {\n\n /**\n * Creates an instance of LifeCycleManager.\n * @memberof LifeCycleManager\n */\n constructor () {\n this._eventList = EVENT_LIST;\n this._promises = new Map();\n this._notifiers = {};\n this._lifeCycles = {};\n this._unreleasedLifeCycles = {};\n this._boot();\n }\n\n /**\n * Fills all the notifiers with resolver callback\n *\n * @memberof LifeCycleManager\n */\n _boot () {\n this._notifiers = this._eventList.reduce((acc, name) => {\n acc[name] = resolver;\n return acc;\n }, {});\n this._preparePromises();\n }\n\n /**\n * Public method which gives the promise corresponding\n * to the event name\n *\n * @param {string} eventName name of the event like `canvas.drawn`\n * @return {promise} promise that is passed to the user\n * @memberof LifeCycleManager\n */\n retrieve (eventName) {\n return this._promises.get(eventName);\n }\n\n /**\n * Creates a promise that will be passed to user's callback\n *\n * @param {string} eventName name of the event like `canvas.drawn`\n * @return {promise} a pending promise waiting for resolve to be called\n * @memberof LifeCycleManager\n */\n _makeNotifierPromise (eventName) {\n return new Promise((resolve) => {\n this._notifiers[eventName] = this._notifiers[eventName](resolve);\n });\n }\n\n /**\n * Prepares the promise map with pending promises\n * all the promises are in a pending state where their's\n * resolve function waiting to be called with notification object\n * @memberof LifeCycleManager\n */\n _preparePromises () {\n this._eventList.forEach((eventName) => {\n this._promises.set(eventName, this._makeNotifierPromise(eventName));\n });\n }\n\n /**\n * Resolves the promise with notification object\n *\n * @param {string} eventName name of the event in the system\n * @param {Object} notification notification object\n * @param {string} notification.formalName name of the sender creating the notification\n * @param {Object} notification.client instance or array of instances sending the notification\n * @param {string} notification.action the stage name when the event happened like `beforedraw`\n *\n * @memberof LifeCycleManager\n */\n _resolvePromise (eventName, notification) {\n this._notifiers[eventName](notification);\n }\n\n /**\n * Public method which is being called by different\n * subcompoents of the system at different execution atages\n * @param {Object} notification notification object\n * @param {string} notification.formalName name of the sender creating the notification\n * @param {Object} notification.client instance or array of instances sending the notification\n * @param {string} notification.action the stage name when the event happened like `beforedraw`\n * @memberof LifeCycleManager\n */\n notify (notification) {\n // get the composition name from notification\n // or from static formalName() method\n const composition = notification.formalName || notification.client.constructor.formalName();\n notification.formalName = composition;\n this._releasePromisesFromCache();\n this._notify(composition, notification);\n }\n\n /**\n * Notify user the with promsie in a callback\n * if callback not found then cache it\n *\n * @param {string} composition\n * @param {Object} notification notification object\n * @param {string} notification.formalName name of the sender creating the notification\n * @param {Object} notification.client instance or array of instances sending the notification\n * @param {string} notification.action the stage name when the event happened like `beforedraw`\n * @memberof LifeCycleManager\n */\n _notify (composition, notification) {\n const stage = notification.action;\n const eventName = `${composition}.${stage}`;\n\n // resolves promise with the notification object\n this._resolvePromise(eventName, notification);\n\n // get the promise from the promise map\n const promise = this.retrieve(eventName);\n\n if (this._lifeCycles[composition]) {\n if (this._lifeCycles[composition][stage]) {\n // if user given call back exists, then call with promise\n this._callLifeCycleCallback(composition, stage, promise);\n } else {\n // otherwise cache the promise\n this._cachePromise(composition, stage, promise);\n }\n } else {\n this._cachePromise(composition, stage, promise);\n }\n }\n\n /**\n * Calls the user's callback with callback\n *\n * @param {string} composition name of the compositon like `canvas`\n * @param {string} stage the stage name when the event happened like `beforedraw`\n * @param {promise} promise promise that is passed to the user\n * @memberof LifeCycleManager\n */\n _callLifeCycleCallback (composition, stage, promise) {\n const eventName = `${composition}.${stage}`;\n this._lifeCycles[composition][stage](promise);\n this._resetTargetPromise(eventName);\n }\n\n /**\n * Try to clear the cached promsies once we have\n * macthed callbacks from the user\n *\n * @memberof LifeCycleManager\n */\n _releasePromisesFromCache () {\n const compositions = Object.keys(this._unreleasedLifeCycles);\n compositions.forEach((composition) => {\n const stages = Object.keys(this._unreleasedLifeCycles[composition]);\n stages.forEach((stage) => {\n if (this._lifeCycles[composition]) {\n if (this._lifeCycles[composition][stage]) {\n // take the promise from unreleased lifeCycles\n const promise = this._unreleasedLifeCycles[composition][stage];\n // call the user given callback with that promise\n this._callLifeCycleCallback(composition, stage, promise);\n // delete promise from unreleased lifeCycles\n delete this._unreleasedLifeCycles[composition][stage];\n }\n }\n });\n });\n }\n\n /**\n * Cache the promise in the map. This cache\n * then get consumed if we get user callbacks\n * @param {string} composition name of the compositon like `canvas`\n * @param {string} stage the stage name when the event happened like `beforedraw`\n * @param {promise} promise promise that is passed to the user\n * @memberof LifeCycleManager\n */\n _cachePromise (composition, stage, promise) {\n if (!hasOwn(this._unreleasedLifeCycles, composition)) {\n this._unreleasedLifeCycles[composition] = {};\n }\n\n if (!hasOwn(this._unreleasedLifeCycles[composition], stage)) {\n this._unreleasedLifeCycles[composition][stage] = {};\n }\n this._unreleasedLifeCycles[composition][stage] = promise;\n }\n\n /**\n * It register's the callbacks gievn the user\n *\n * @param {Object} [lifeCycles={}] a object with list of callbacks\n * @memberof LifeCycleManager\n */\n register (lifeCycles = {}) {\n this._lifeCycles = lifeCycles;\n // as we get all the callbacks, try to call them\n // from unreleased promise map\n this._releasePromisesFromCache();\n }\n\n /**\n * Reset the promise into pending state\n *\n * @param {string} eventName name of the event happening\n * @memberof LifeCycleManager\n */\n _resetTargetPromise (eventName) {\n setTimeout(() => {\n this._notifiers[eventName] = resolver;\n this._promises.set(eventName, this._makeNotifierPromise(eventName));\n }, 0);\n }\n}\n","import LifeCycleManager from './lifecycle-manager';\n\nexport default LifeCycleManager;\n","export const DRAG = 'drag';\nexport const HOVER = 'hover';\nexport const SELECTIONDRAG = 'selectiondrag';\nexport const CLICK = 'click';\nexport const LONGTOUCH = 'longtouch';\nexport const TOUCHDRAG = 'touchdrag';\nexport const ALL_ACTIONS = '*';\n","const SELECTION_NEW_ENTRY = 1;\nconst SELECTION_NEW_EXIT = -1;\nconst SELECTION_NULL = 0;\nconst SELECTION_OLD_ENTRY = 2;\nconst SELECTION_OLD_EXIT = -2;\n\nexport {\n SELECTION_NEW_ENTRY,\n SELECTION_NEW_EXIT,\n SELECTION_NULL,\n SELECTION_OLD_ENTRY,\n SELECTION_OLD_EXIT\n};\n","import {\n SELECTION_NEW_ENTRY, SELECTION_NEW_EXIT, SELECTION_NULL, SELECTION_OLD_ENTRY, SELECTION_OLD_EXIT\n} from '../enums/selection';\n/* eslint-disable guard-for-in */\n\n/**\n * This component is used to keep track of the row tuples of the data which gets added and removed.\n * @class SelectionSet\n */\nclass SelectionSet {\n /**\n * Creates an instance of selection set\n * @param {Array.} completeSet Set of unique ids.\n */\n constructor (completeSet, _volatile) {\n this.completeSet = completeSet;\n this._set = completeSet.reduce((obj, key) => {\n obj[key] = SELECTION_NULL;\n return obj;\n }, {});\n this._volatile = _volatile;\n this._completeSetCount = completeSet.length;\n this._lockedSelection = {};\n this._resetted = true;\n }\n\n /**\n * Adds a set of ids to the selection set.\n * @param {Array.} ids Array of unique ids\n * @return {SelectionSet} Instance of selection set.\n */\n add (ids) {\n this._resetted = false;\n\n const set = this._set;\n // from exitset to entryset\n ids.forEach((i) => {\n set[i] = SELECTION_NEW_ENTRY;\n });\n\n for (const key in set) {\n if (set[key] !== SELECTION_NEW_ENTRY && set[key] !== SELECTION_OLD_ENTRY) {\n set[key] = set[key] < 0 ? SELECTION_OLD_EXIT : SELECTION_NEW_EXIT;\n }\n }\n return this;\n }\n\n /**\n * Adds a set of ids to the selection set.\n * @param {Array.} ids Array of unique ids\n * @return {SelectionSet} Instance of selection set.\n */\n update (ids) {\n const set = this._set;\n // from exitset to entryset\n ids.forEach((i) => {\n set[i] = SELECTION_OLD_ENTRY;\n });\n\n return this;\n }\n\n /**\n * Adds a set of ids to the selection set.\n * @param {Array.} ids Array of unique ids\n * @return {SelectionSet} Instance of selection set.\n */\n updateEntry () {\n const set = this._set;\n\n // from exitset to entryset\n for (const key in set) {\n set[key] = set[key] === SELECTION_NEW_ENTRY ? SELECTION_OLD_ENTRY : set[key];\n }\n return this;\n }\n\n /**\n * Adds a set of ids to the selection set.\n * @param {Array.} ids Array of unique ids\n * @return {SelectionSet} Instance of selection set.\n */\n updateExit () {\n const set = this._set;\n // from exitset to entryset\n for (const key in set) {\n set[key] = set[key] === SELECTION_NEW_EXIT ? SELECTION_OLD_EXIT : set[key];\n }\n return this;\n }\n\n /**\n * Removes the ids from the selection set.\n * @param {Array.} ids Array of unique ids\n * @return {SelectionSet} Instance of selection set\n */\n remove (ids) {\n this._resetted = false;\n\n const set = this._set;\n ids.forEach((i) => {\n set[i] = SELECTION_NEW_EXIT;\n });\n\n for (const key in set) {\n if (set[key] !== SELECTION_NEW_EXIT && set[key] !== SELECTION_OLD_EXIT) {\n set[key] = set[key] === 0 ? SELECTION_NEW_ENTRY : SELECTION_OLD_ENTRY;\n }\n }\n\n return this;\n }\n\n getSets () {\n const set = this._set;\n const retObj = {\n entrySet: [[], []],\n exitSet: [[], []],\n completeSet: []\n };\n\n for (const key in set) {\n if (set[key] > 0) {\n set[key] === SELECTION_OLD_ENTRY && retObj.entrySet[0].push(key);\n set[key] === SELECTION_NEW_ENTRY && retObj.entrySet[1].push(key);\n } else if (set[key] < 0) {\n set[key] === SELECTION_OLD_EXIT && retObj.exitSet[0].push(key);\n set[key] === SELECTION_NEW_EXIT && retObj.exitSet[1].push(key);\n }\n retObj.completeSet.push(key);\n }\n\n ['entrySet', 'exitSet'].forEach((type) => {\n retObj[type] = retObj[type].map(e => e.map(Number));\n });\n retObj.completeSet = retObj.completeSet.map(Number);\n\n return retObj;\n }\n\n /**\n * Resets the selection set to initial state. It sets the value of every unique id value to\n * null in the selection set.\n * @return {SelectionSet} Instance of selection set.\n */\n reset (ids) {\n const set = this._set;\n if (ids) {\n ids.forEach((i) => {\n set[i] = SELECTION_NULL;\n });\n } else {\n const lockedSel = this._lockedSelection;\n for (const key in set) {\n if (!(key in lockedSel)) {\n set[key] = SELECTION_NULL;\n }\n }\n }\n this._resetted = true;\n return this;\n }\n\n /**\n * Gets the set of ids which are added in the selection set.\n * @return {Array.} Array of unique ids\n */\n getEntrySet () {\n const set = this._set;\n const addSet = [];\n\n for (const key in set) {\n set[key] === SELECTION_NEW_ENTRY && addSet.push(key);\n }\n\n return addSet;\n }\n\n /**\n * Returns a set of unique ids which are already present in entry set\n * @param {Array} addSet Array of unique ids which are added\n *\n * @return {Array} Array of unique ids which are already in old entry set or new entry set\n */\n getExistingEntrySet (addSet) {\n const set = this._set;\n return addSet.filter(d => set[d] === SELECTION_NEW_ENTRY || set[d] === SELECTION_OLD_ENTRY);\n }\n\n getExistingExitSet (removeSet) {\n const set = this._set;\n return removeSet.filter(d => set[d] === SELECTION_NEW_EXIT || set[d] === SELECTION_OLD_EXIT);\n }\n\n /**\n * Gets the set of ids which are added in the selection set.\n * @return {Array.} Array of unique ids\n */\n getOldEntry () {\n const set = this._set;\n const updateSet = [];\n\n for (const key in set) {\n set[key] === SELECTION_OLD_ENTRY && updateSet.push(key);\n }\n return updateSet;\n }\n\n /**\n * Gets the set of ids which are added in the selection set.\n * @return {Array.} Array of unique ids\n */\n getOldExit () {\n const set = this._set;\n const updateSet = [];\n\n for (const key in set) {\n set[key] === SELECTION_OLD_EXIT && updateSet.push(key);\n }\n\n return updateSet;\n }\n\n /**\n * Gets the set of ids which are in the remove set.\n * @return {Array.} Array of unique ids\n */\n getExitSet () {\n const set = this._set;\n const removeSet = [];\n\n for (const key in set) {\n set[key] === SELECTION_NEW_EXIT && removeSet.push(key);\n }\n return removeSet;\n }\n\n getCompleteSet () {\n const set = this._set;\n const completeSet = [];\n\n for (const key in set) {\n completeSet.push(key);\n }\n\n return completeSet;\n }\n\n getCompleteSetCount () {\n return this._completeSetCount;\n }\n\n resetted () {\n return this._resetted;\n }\n\n /**\n * Swaps the add set and remove set in the selection set.\n * @return {SelectionSet} Instance of selection set.\n */\n toggle () {\n const set = this._set;\n\n for (const key in set) {\n if (set[key] === SELECTION_NEW_ENTRY) {\n set[key] = SELECTION_NEW_EXIT;\n } else if (set[key] === SELECTION_NEW_EXIT) {\n set[key] = SELECTION_NEW_ENTRY;\n } else if (set[key] === SELECTION_OLD_ENTRY) {\n set[key] = SELECTION_OLD_EXIT;\n } else {\n set[key] = SELECTION_OLD_ENTRY;\n }\n }\n\n return this;\n }\n}\n\nexport default SelectionSet;\n","import { clone } from 'muze-utils';\nimport * as SELECTION from '../enums/selection';\n\nexport const initializeSideEffects = (context, sideEffects) => {\n const sideEffectsMap = context._sideEffects;\n\n sideEffects = sideEffects instanceof Array ? sideEffects : Object.values(sideEffects);\n sideEffects.forEach((SideEffect) => {\n const sideEffectInstance = sideEffectsMap[SideEffect.formalName()];\n sideEffectsMap[SideEffect.formalName()] = sideEffectInstance || new SideEffect(context);\n });\n return sideEffectsMap;\n};\n\nexport const initializeBehaviouralActions = (context, actions) => {\n const dispatchableBehaviours = {};\n\n actions = actions instanceof Array ? actions : Object.values(actions);\n actions.forEach((Action) => {\n dispatchableBehaviours[Action.formalName()] = new Action(context);\n });\n return dispatchableBehaviours;\n};\n\nexport const initializePhysicalActions = (context, actions) => {\n const physicalActions = {};\n\n for (const name in actions) {\n if (!({}).hasOwnProperty.call(name, actions)) {\n physicalActions[name] = actions[name](context);\n }\n }\n return physicalActions;\n};\n\nexport const changeSideEffectAvailability = (context, fn, toEnable) => {\n const sideEffects = context.sideEffects();\n for (const key in sideEffects) {\n if ({}.hasOwnProperty.call(sideEffects, key)) {\n let change = true;\n if (fn && fn(key) === false) {\n change = false;\n }\n if (change) {\n toEnable ? sideEffects[key].enable() : sideEffects[key].disable();\n }\n }\n }\n};\n\nexport const getMergedSet = set => [...new Set([...set[0], ...set[1]])];\n\nexport const getSourceFields = (propagationInf, criteria = {}) => {\n const sourceIdentifiers = propagationInf.sourceIdentifiers;\n let sourceFields;\n if (sourceIdentifiers) {\n sourceFields = sourceIdentifiers.getSchema().map(d => d.name);\n } else if (criteria instanceof Array) {\n sourceFields = criteria[0];\n } else {\n sourceFields = Object.keys(criteria || {});\n }\n return sourceFields;\n};\n\nconst conditionsMap = {\n newEntry: [SELECTION.SELECTION_NEW_ENTRY],\n oldEntry: [SELECTION.SELECTION_OLD_ENTRY],\n mergedEnter: [SELECTION.SELECTION_NEW_ENTRY, SELECTION.SELECTION_OLD_ENTRY],\n newExit: [SELECTION.SELECTION_NEW_EXIT],\n oldExit: [SELECTION.SELECTION_OLD_EXIT],\n mergedExit: [SELECTION.SELECTION_NEW_EXIT, SELECTION.SELECTION_OLD_EXIT],\n complete: []\n};\n\nexport const getModelFromSet = (type, model, set) => {\n if (model) {\n return model.select((fields, i) =>\n (conditionsMap[type].some(condition => set[i] === condition)), {\n saveChild: false\n });\n }\n return null;\n};\n\nexport const getSetInfo = (type, set, config) => {\n let model = null;\n const filteredDataModel = config.filteredDataModel;\n const selectionSet = config.selectionSet;\n if (!config.propagationData) {\n if (selectionSet.resetted()) {\n model = null;\n } else {\n model = getModelFromSet(type, config.dataModel, config.selectionSet._set);\n }\n } else if (filteredDataModel) {\n model = type === 'mergedEnter' ? filteredDataModel[0] : filteredDataModel[1];\n }\n return {\n uids: set,\n length: set.length,\n model\n };\n};\n\nexport const getSideEffects = (behaviour, behaviourEffectMap) => {\n const sideEffects = [];\n for (const key in behaviourEffectMap) {\n const behaviours = key.split(',');\n const found = behaviours.some(d => d === behaviour);\n if (found) {\n sideEffects.push({\n effects: behaviourEffectMap[key],\n behaviours\n });\n }\n }\n return sideEffects;\n};\n\nexport const unionSets = (context, behaviours) => {\n let combinedSet = {};\n const models = {\n mergedEnter: null,\n mergedExit: null\n };\n behaviours.forEach((behaviour) => {\n const entryExitSet = context._entryExitSet[behaviour];\n if (entryExitSet) {\n combinedSet = Object.assign(combinedSet, clone(entryExitSet));\n ['mergedEnter', 'mergedExit'].forEach((type) => {\n const model = entryExitSet[type].model;\n let existingModel = models[type];\n if (!existingModel) {\n existingModel = models[type] = model;\n } else {\n existingModel = models[type] = model.union(existingModel);\n }\n combinedSet[type].model = existingModel;\n });\n }\n });\n return combinedSet;\n};\n","import {\n mergeRecursive,\n hasTouch,\n filterPropagationModel,\n FieldType,\n selectElement,\n isSimpleObject\n} from 'muze-utils';\nimport { ALL_ACTIONS } from './enums/actions';\nimport SelectionSet from './selection-set';\nimport {\n initializeBehaviouralActions,\n initializeSideEffects,\n changeSideEffectAvailability,\n initializePhysicalActions,\n unionSets,\n getSideEffects\n} from './helper';\n\n/**\n * Relient firebolt is responsible for dispatching behaviours. It has only behaviours which can be\n * dispatched without any physical action being triggered.\n */\nexport default class Firebolt {\n constructor (context, actions, sideEffects, behaviourEffectMap) {\n this.context = context;\n this._sideEffectDefinitions = {};\n this._sideEffects = {};\n this._propagationInf = {};\n this._actions = {\n behavioural: {},\n physical: {}\n };\n this._selectionSet = {};\n this._volatileSelectionSet = {};\n this._propagationFields = {};\n this._sourceSideEffects = {\n selectionBox: () => false\n };\n this._propagationBehaviourMap = {};\n this._sourceBehaviours = {};\n this._actionBehaviourMap = {};\n this._config = {};\n this._behaviourEffectMap = {};\n this._entryExitSet = {};\n this._actionHistory = {};\n this._queuedSideEffects = {};\n this._mappedActions = {};\n\n this.mapSideEffects(behaviourEffectMap);\n this.registerBehaviouralActions(actions.behavioural);\n this.registerSideEffects(sideEffects);\n this.registerPhysicalBehaviouralMap(actions.physicalBehaviouralMap);\n this.registerPhysicalActions(actions.physical);\n }\n\n config (...config) {\n if (config.length) {\n const conf = this._config = mergeRecursive(this._config, config[0]);\n const sideEffects = this.sideEffects();\n for (const key in sideEffects) {\n if ({}.hasOwnProperty.call(sideEffects, key)) {\n const sideEffectConf = conf[key];\n sideEffectConf && sideEffects[key].config(sideEffectConf);\n }\n }\n return this;\n }\n return this._config;\n }\n\n mapSideEffects (behEffectMap) {\n const behaviourEffectMap = this._behaviourEffectMap;\n for (const key in behEffectMap) {\n if ({}.hasOwnProperty.call(behEffectMap, key)) {\n const sideEffects = behEffectMap[key] || [];\n let preventDefaultActions = false;\n let effectNames;\n if (isSimpleObject(sideEffects)) {\n effectNames = sideEffects.effects;\n preventDefaultActions = sideEffects.preventDefaultActions;\n } else {\n effectNames = sideEffects;\n }\n !behaviourEffectMap[key] && (behaviourEffectMap[key] = []);\n this._behaviourEffectMap[key] = [...new Set(preventDefaultActions ? effectNames :\n [...behaviourEffectMap[key], ...effectNames])];\n }\n }\n return this;\n }\n\n registerBehaviouralActions (actions) {\n const behaviours = initializeBehaviouralActions(this, actions);\n this.prepareSelectionSets(behaviours);\n Object.assign(this._actions.behavioural, behaviours);\n return this;\n }\n\n prepareSelectionSets () {\n return this;\n }\n\n registerSideEffects (sideEffects) {\n for (const key in sideEffects) {\n this._sideEffectDefinitions[sideEffects[key].formalName()] = sideEffects[key];\n }\n return this;\n }\n\n applySideEffects (sideEffects, selectionSet, payload) {\n const sideEffectStore = this.sideEffects();\n const actionHistory = this._actionHistory;\n const queuedSideEffects = this._queuedSideEffects;\n sideEffects.forEach((sideEffect) => {\n let options;\n let name;\n const effects = sideEffect.effects;\n const behaviours = sideEffect.behaviours;\n const combinedSet = unionSets(this, behaviours, selectionSet);\n effects.forEach((effect) => {\n if (typeof effect === 'object') {\n name = effect.name;\n options = effect.options;\n } else {\n name = effect;\n }\n\n const sideEffectInstance = sideEffectStore[name];\n if (sideEffectInstance.isEnabled()) {\n if (!sideEffectInstance.constructor.mutates() &&\n Object.values(actionHistory).some(d => d.isMutableAction)) {\n queuedSideEffects[`${name}-${behaviours.join()}`] = {\n name,\n params: [combinedSet, payload, options]\n };\n } else {\n this.dispatchSideEffect(name, combinedSet, payload, options);\n }\n }\n });\n });\n return this;\n }\n\n dispatchSideEffect (name, selectionSet, payload, options = {}) {\n const sideEffectStore = this.sideEffects();\n const sideEffect = sideEffectStore[name];\n let disable = false;\n if (options.filter && options.filter(sideEffect)) {\n disable = true;\n }\n !disable && sideEffectStore[name].apply(selectionSet, payload, options);\n }\n\n registerPropagationBehaviourMap (map) {\n this._propagationBehaviourMap = Object.assign(this._propagationBehaviourMap, map || {});\n return this;\n }\n\n dispatchBehaviour (behaviour, payload, propagationInfo = {}) {\n const propagate = propagationInfo.propagate !== undefined ? propagationInfo.propagate : true;\n const behaviouralActions = this._actions.behavioural;\n const action = behaviouralActions[behaviour];\n const behaviourEffectMap = this._behaviourEffectMap;\n const sideEffects = getSideEffects(behaviour, behaviourEffectMap);\n this._propagationInf = propagationInfo;\n\n if (action) {\n const selectionSet = action.dispatch(payload);\n const propagationSelectionSet = this.getPropagationSelectionSet(selectionSet);\n this._entryExitSet[behaviour] = propagationSelectionSet;\n const shouldApplySideEffects = this.shouldApplySideEffects(propagate);\n\n if (propagate) {\n this.propagate(behaviour, payload, selectionSet.find(d => d.sourceSelectionSet), sideEffects);\n }\n if (shouldApplySideEffects) {\n const applicableSideEffects = this.getApplicableSideEffects(sideEffects, payload, propagationInfo);\n this.applySideEffects(applicableSideEffects, propagationSelectionSet, payload);\n }\n }\n\n return this;\n }\n\n getPropagationSelectionSet (selectionSet) {\n return selectionSet.find(d => !d.sourceSelectionSet);\n }\n\n shouldApplySideEffects () {\n return true;\n }\n\n changeBehaviourStateOnPropagation (behaviour, value) {\n if (value instanceof Function) {\n this._sourceBehaviours[behaviour] = value;\n } else {\n this._sourceBehaviours[behaviour] = () => value;\n }\n return this;\n }\n\n changeSideEffectStateOnPropagation (sideEffect, value) {\n if (value instanceof Function) {\n this._sourceSideEffects[sideEffect] = value;\n } else {\n this._sourceSideEffects[sideEffect] = () => value;\n }\n }\n\n propagate () {\n return this;\n }\n\n sideEffects (...sideEffects) {\n if (sideEffects.length) {\n this._sideEffects = sideEffects[0];\n return this;\n }\n return this._sideEffects;\n }\n\n enableSideEffects (fn) {\n changeSideEffectAvailability(this, fn, true);\n return this;\n }\n\n disableSideEffects (fn) {\n changeSideEffectAvailability(this, fn, false);\n return this;\n }\n\n dissociateBehaviour (behaviour, physicalAction) {\n const actionBehaviourMap = this._actionBehaviourMap;\n for (const key in actionBehaviourMap) {\n if (key === physicalAction) {\n const behaviourMap = actionBehaviourMap[key];\n behaviourMap.behaviours = behaviourMap.behaviours.filter(d => d !== behaviour);\n }\n }\n\n return this;\n }\n\n dissociateSideEffect (sideEffect, behaviour) {\n const behaviourEffectMap = this._behaviourEffectMap;\n behaviourEffectMap[behaviour] = behaviourEffectMap[behaviour].filter(d => (d.name || d) !== sideEffect);\n return this;\n }\n\n getApplicableSideEffects (sideEffects) {\n return sideEffects;\n }\n\n attachPropagationListener (dataModel) {\n dataModel.unsubscribe('propagation');\n dataModel.on('propagation', this.onDataModelPropagation());\n return this;\n }\n\n onDataModelPropagation () {\n return (propValue) => {\n const payload = propValue.payload;\n const action = payload.action;\n\n this.dispatchBehaviour(action, payload, {\n propagate: false\n });\n };\n }\n\n createSelectionSet (uniqueIds, behaviouralActions) {\n const behaviours = behaviouralActions || this._actions.behavioural;\n const selectionSet = this._selectionSet;\n const volatileSelectionSet = this._volatileSelectionSet;\n\n for (const key in behaviours) {\n if ({}.hasOwnProperty.call(behaviours, key)) {\n selectionSet[key] = new SelectionSet(uniqueIds);\n volatileSelectionSet[key] = new SelectionSet(uniqueIds, true);\n }\n }\n this._volatileSelectionSet = volatileSelectionSet;\n this.selectionSet(selectionSet);\n return this;\n }\n\n selectionSet (...selectionSet) {\n if (selectionSet.length) {\n this._selectionSet = selectionSet[0];\n return this;\n }\n return this._selectionSet;\n }\n\n initializeSideEffects () {\n const sideEffectDefinitions = this._sideEffectDefinitions;\n this.sideEffects(initializeSideEffects(this, sideEffectDefinitions));\n return this;\n }\n\n registerPhysicalActions (actions) {\n const initedActions = initializePhysicalActions(this, actions);\n Object.assign(this._actions.physical, initedActions);\n return this;\n }\n\n propagateWith (action, fields, append = false) {\n const behaviouralActions = this._actions.behavioural;\n if (fields.length) {\n if (action === ALL_ACTIONS) {\n for (const key in behaviouralActions) {\n this._propagationFields[key] = {\n fields,\n append\n };\n }\n } else {\n this._propagationFields[action] = {\n fields,\n append\n };\n }\n return this;\n }\n return this._propagationFields;\n }\n\n /**\n * Map actions and behaviours\n * @return {Firebolt} Firebolt instance\n */\n mapActionsAndBehaviour () {\n const initedPhysicalActions = this._actions.physical;\n const map = this._actionBehaviourMap;\n const mappedActions = this._mappedActions;\n\n for (const action in map) {\n if (!({}).hasOwnProperty.call(action, map)) {\n let target;\n const mapObj = map[action];\n target = mapObj.target;\n const touch = mapObj.touch;\n if (!target) {\n target = this.context.getDefaultTargetContainer();\n }\n const bind = hasTouch() ? touch === true || touch === undefined : !touch;\n const keyName = `${action}-${mapObj.behaviours.join()}`;\n bind && !mappedActions[keyName] && this.bindActionWithBehaviour(initedPhysicalActions[action],\n target, mapObj.behaviours);\n mappedActions[keyName] = true;\n }\n }\n return this;\n }\n\n registerPhysicalBehaviouralMap (map) {\n Object.assign(this._actionBehaviourMap, map);\n return this;\n }\n\n /**\n * Binds a target element with an action.\n *\n * @param {Function} action Action method\n * @param {string} target Class name of element\n * @param {Array} behaviourList Array of behaviours\n * @return {FireBolt} Instance of firebolt\n */\n bindActionWithBehaviour (action, targets, behaviourList) {\n if (typeof (targets) === 'string') {\n targets = [targets];\n }\n targets.forEach((target) => {\n const mount = this.context.mount();\n const nodes = target.node instanceof Function ? target : selectElement(mount).selectAll(target);\n if (behaviourList.length && !nodes.empty()) {\n if (nodes instanceof Array) {\n nodes.forEach((node) => {\n action(selectElement(node), behaviourList);\n });\n } else {\n action(nodes, behaviourList);\n }\n }\n });\n return this;\n }\n\n getPropagationInf () {\n return this._propagationInf;\n }\n\n getAddSetFromCriteria (criteria, propagationInf = {}) {\n const context = this.context;\n const filteredDataModel = propagationInf.data ? propagationInf.data :\n context.getDataModelFromIdentifiers(criteria, 'all');\n const xFields = context.fields().x || [];\n const yFields = context.fields().y || [];\n const xMeasures = xFields.every(field => field.type() === FieldType.MEASURE);\n const yMeasures = yFields.every(field => field.type() === FieldType.MEASURE);\n return {\n model: filteredDataModel,\n uids: criteria === null ? null : (propagationInf.data ? filterPropagationModel(this.getFullData(),\n propagationInf.data[0], xMeasures && yMeasures).getData().uids : filteredDataModel[0].getData().uids)\n };\n }\n\n getSelectionSets (action) {\n const sourceId = this.context.id();\n const propagationInf = this._propagationInf || {};\n const propagationSource = propagationInf.sourceId;\n let applicableSelectionSets = [];\n if (propagationSource !== sourceId) {\n applicableSelectionSets = [this._volatileSelectionSet[action]];\n }\n\n if (propagationSource) {\n applicableSelectionSets.push(this.selectionSet()[action]);\n }\n return applicableSelectionSets;\n }\n\n getFullData () {\n return this.context.data();\n }\n\n resetted () {\n return this._resetted;\n }\n\n getEntryExitSet (behaviour) {\n return this._entryExitSet[behaviour];\n }\n}\n","import { getSetInfo, getMergedSet, getSourceFields } from '../../helper';\n\nexport default class GenericBehaviour {\n constructor (firebolt) {\n this.firebolt = firebolt;\n this._enabled = true;\n }\n\n dispatch (payload) {\n const criteria = payload.criteria;\n const firebolt = this.firebolt;\n const formalName = this.constructor.formalName();\n const selectionSets = firebolt.getSelectionSets(formalName);\n const {\n model: filteredDataModel,\n uids\n } = this.firebolt.getAddSetFromCriteria(criteria, this.firebolt.getPropagationInf());\n const entryExitSets = selectionSets.map((selectionSet) => {\n this.setSelectionSet(uids, selectionSet);\n return this.getEntryExitSet(selectionSet, filteredDataModel, payload);\n });\n\n return entryExitSets;\n }\n\n setSelectionSet () {\n return this;\n }\n\n getEntryExitSet (selectionSet, filteredDataModel, payload) {\n const {\n entrySet,\n exitSet,\n completeSet\n } = selectionSet.getSets();\n const propagationInf = this.firebolt.getPropagationInf();\n const dataModel = this.firebolt.getFullData();\n const setConfig = {\n isSourceFieldPresent: propagationInf.isSourceFieldPresent,\n dataModel,\n filteredDataModel,\n propagationData: propagationInf.data,\n selectionSet\n };\n\n return {\n entrySet: [getSetInfo('oldEntry', entrySet[0], setConfig),\n getSetInfo('newEntry', entrySet[1], setConfig)],\n exitSet: [getSetInfo('oldEntry', exitSet[0], setConfig),\n getSetInfo('newExit', exitSet[1], setConfig)],\n mergedEnter: getSetInfo('mergedEnter', getMergedSet(entrySet), setConfig),\n mergedExit: getSetInfo('mergedExit', getMergedSet(exitSet), setConfig),\n completeSet: getSetInfo('complete', completeSet, setConfig),\n isSourceFieldPresent: propagationInf.isSourceFieldPresent,\n fields: getSourceFields(propagationInf, payload.criteria),\n sourceSelectionSet: selectionSet._volatile === true\n };\n }\n\n static mutates () {\n return false;\n }\n\n enable () {\n this._enabled = true;\n }\n\n disable () {\n this._enabled = false;\n }\n\n isEnabled () {\n return this._enabled;\n }\n}\n\n","import GenericBehaviour from './generic';\nimport { getMergedSet } from '../../helper';\nimport * as SELECTION from '../../enums/selection';\n\nexport default class VolatileBehaviour extends GenericBehaviour {\n setSelectionSet (addSet, selectionSet) {\n if (addSet === null) {\n selectionSet.reset();\n } else if (addSet.length) {\n // new add set\n const existingAddSet = addSet.filter(d => selectionSet._set[d] === SELECTION.SELECTION_NEW_ENTRY\n || selectionSet._set[d] === SELECTION.SELECTION_OLD_ENTRY);\n selectionSet.updateExit();\n const { entrySet } = selectionSet.getSets();\n selectionSet.reset(getMergedSet(entrySet));\n selectionSet.add(addSet);\n selectionSet.update(existingAddSet);\n } else {\n selectionSet.remove(selectionSet.getCompleteSet());\n }\n }\n}\n","export const BRUSH = 'brush';\nexport const HIGHLIGHT = 'highlight';\nexport const TOOLTIP = 'tooltip';\nexport const FILTER = 'filter';\nexport const SELECT = 'select';\n","import VolatileBehaviour from './volatile';\nimport { HIGHLIGHT } from '../../enums/behaviours';\n\nexport default class HighlightBehaviour extends VolatileBehaviour {\n static formalName () {\n return HIGHLIGHT;\n }\n}\n","import VolatileBehaviour from './volatile';\nimport * as BEHAVIOURNAMES from '../../enums/behaviours';\n\n/**\n * This is the behaviour for brushing a region on the chart. It accepts a payload\n * which contains the x and y range of the data and other configuration. It will then\n * create a selection box from the range and select the points which fall within the range.\n */\nexport default class BrushBehaviour extends VolatileBehaviour {\n static formalName () {\n return BEHAVIOURNAMES.BRUSH;\n }\n}\n","import VolatileBehaviour from './volatile';\nimport { FILTER } from '../../enums/behaviours';\n\nexport default class FilterBehaviour extends VolatileBehaviour {\n static formalName () {\n return FILTER;\n }\n\n static mutates () {\n return true;\n }\n}\n","import GenericBehaviour from './generic';\nimport { getMergedSet } from '../../helper';\nimport * as SELECTION from '../../enums/selection';\n\nexport default class PersistentBehaviour extends GenericBehaviour {\n setSelectionSet (addSet, selectionSet) {\n if (addSet === null) {\n selectionSet.reset();\n } else if (addSet.length) {\n const propagationInf = this.firebolt.getPropagationInf();\n // new add set\n const existingAddSet = addSet.filter(d => selectionSet._set[d] === SELECTION.SELECTION_NEW_ENTRY\n || selectionSet._set[d] === SELECTION.SELECTION_OLD_ENTRY);\n if (propagationInf.propagate === false) {\n selectionSet.updateExit();\n const { entrySet } = selectionSet.getSets();\n selectionSet.reset(getMergedSet(entrySet));\n selectionSet.add(addSet);\n selectionSet.update(existingAddSet);\n } else {\n // existing add set\n if (existingAddSet.length) {\n selectionSet.updateExit();\n selectionSet.remove(existingAddSet);\n } else {\n selectionSet.updateEntry();\n selectionSet.add(addSet);\n }\n const { exitSet } = selectionSet.getSets();\n const mergedExitSet = getMergedSet(exitSet);\n const completeSetCount = selectionSet.getCompleteSet().length;\n if (mergedExitSet.length === completeSetCount) {\n selectionSet.reset();\n }\n }\n } else {\n selectionSet.remove(selectionSet.getCompleteSet());\n }\n\n return this;\n }\n}\n","import PersistentBehaviour from './persistent';\nimport { SELECT } from '../../enums/behaviours';\n\nexport default class SelectBehaviour extends PersistentBehaviour {\n static formalName () {\n return SELECT;\n }\n}\n\n","import { DimensionSubtype, FieldType } from 'muze-utils';\n/**\n * Gets the drag action configuration\n * @param {VisualUnit} instance instance of visual unit\n * @param {Object} config x y positions\n * @return {Object} Payload of behaviour\n*/\n/* istanbul ignore next */ const getDragActionConfig = (sourceInfo, config, fieldsConfig) => {\n if (!(sourceInfo.axes.x || sourceInfo.axes.y)) {\n return {\n criteria: null\n };\n }\n\n const axes = sourceInfo.axes;\n const xAxis = axes.x[0];\n const yAxis = axes.y[0];\n const axisFields = sourceInfo.fields;\n const xField = axisFields.x[0].getMembers()[0];\n const yField = axisFields.y[0].getMembers()[0];\n const xFieldType = fieldsConfig[xField].def.subtype ? fieldsConfig[xField].def.subtype :\n fieldsConfig[xField].def.type;\n const yFieldType = fieldsConfig[yField].def.subtype ? fieldsConfig[yField].def.subtype :\n fieldsConfig[yField].def.type;\n const dimensions = {};\n const stPos = config.startPos;\n const endPos = config.endPos;\n\n if (stPos.x === endPos.x && stPos.y === endPos.y) {\n return {\n criteria: null\n };\n }\n\n const dragDim = xFieldType === FieldType.MEASURE ? (yFieldType === FieldType.MEASURE ? ['x', 'y'] : ['y']) : ['x'];\n const criteria = {};\n const isXDimension = xFieldType === DimensionSubtype.CATEGORICAL;\n const isYDimension = yFieldType === DimensionSubtype.CATEGORICAL;\n const xRange = xAxis.constructor.type() === 'band' ? xAxis.scale().invertExtent(stPos.x, endPos.x) :\n xAxis.invert(stPos.x, endPos.x);\n const yRange = yAxis.constructor.type() === 'band' ? yAxis.scale().invertExtent(stPos.y, endPos.y) :\n yAxis.invert(stPos.y, endPos.y);\n const selectedDomains = {\n x: stPos.x === endPos.x ? [] : (isXDimension ? xRange : xRange.sort((a, b) => a - b)),\n y: stPos.y === endPos.y ? [] : (isYDimension ? yRange : yRange.sort((a, b) => a - b))\n };\n const rangeObj = {};\n\n if (dragDim.length === 2) {\n rangeObj[xField] = selectedDomains.x;\n rangeObj[yField] = selectedDomains.y;\n if (xField === yField) {\n const xdom = selectedDomains.x;\n const ydom = selectedDomains.y;\n const min = xdom[0] > ydom[0] ? ydom : xdom;\n const max = min === ydom ? xdom : ydom;\n if (min[1] < max[0]) {\n rangeObj[xField] = [];\n } else {\n rangeObj[xField] = [max[0], min[1] < max[1] ? min[1] : max[1]];\n }\n dimensions.x = [stPos.x, endPos.x];\n dimensions.y = [stPos.y, endPos.y];\n }\n } else {\n criteria[dragDim[0]] = selectedDomains[dragDim[0]] || [];\n\n if (dragDim[0] === 'x') {\n rangeObj[xField] = criteria.x;\n if (xFieldType === DimensionSubtype.CATEGORICAL) {\n dimensions.x = (config.snap && stPos.x !== endPos.x) ? xAxis.getNearestRange(stPos.x, endPos.x) :\n [stPos.x, endPos.x];\n }\n } else {\n rangeObj[yField] = criteria.y;\n if (yFieldType === DimensionSubtype.CATEGORICAL) {\n dimensions.y = (config.snap && stPos.y !== endPos.y) ? yAxis.getNearestRange(stPos.y, endPos.y) :\n [stPos.y, endPos.y];\n }\n }\n }\n\n return {\n criteria: rangeObj,\n dimensions\n };\n};\n\nexport default getDragActionConfig;\n","import {\n getEvent,\n getD3Drag\n } from 'muze-utils';\n\nimport getDragActionConfig from './drag-action-config';\n\n/**\n * Adds dragging action to the target element.\n * @param {VisualUnit} instance Instance of visual unit.\n * @param {SVGElement} targetEl Element on which brushing action is needed.\n * @param {Array} behaviours Array of behaviours\n */\nexport const attachDragEvent = (targetEl, behaviours, firebolt, touch) => {\n let startPos = {};\n let endPos = {};\n let drawingInf;\n\n const d3Drag = getD3Drag();\n let touchStart;\n targetEl.call(d3Drag().on('start', () => {\n const event = getEvent();\n startPos = {\n x: event.x,\n y: event.y\n };\n drawingInf = firebolt.context.getDrawingContext();\n touchStart = new Date().getTime();\n }).on('drag', () => {\n const event = getEvent();\n endPos = {\n x: event.x,\n y: event.y\n };\n if (touch && Math.abs(startPos.x - endPos.x) <= 5) {\n return;\n }\n endPos.x = Math.max(0, Math.min(endPos.x, drawingInf.width));\n endPos.y = Math.max(0, Math.min(endPos.y, drawingInf.height));\n\n const payload = getDragActionConfig(firebolt.context.getSourceInfo(), {\n startPos,\n endPos\n }, firebolt.context.data().getFieldsConfig());\n behaviours.forEach(beh => firebolt.dispatchBehaviour(beh, payload));\n }).on('end', () => {\n const event = getEvent();\n endPos = {\n x: event.x,\n y: event.y\n };\n const duration = new Date().getTime() - touchStart;\n\n if (touch && duration > 100 && Math.abs(startPos.x - endPos.x) <= 5) {\n return;\n }\n endPos.x = Math.max(0, Math.min(endPos.x, drawingInf.width));\n endPos.y = Math.max(0, Math.min(endPos.y, drawingInf.height));\n\n const payload = getDragActionConfig(firebolt.context.getSourceInfo(), {\n startPos,\n endPos,\n snap: true\n }, firebolt.context.data().getFieldsConfig());\n payload.dragEnd = true;\n behaviours.forEach(beh => firebolt.dispatchBehaviour(beh, payload));\n }));\n};\n\n","import { getClientPoint, getEvent } from 'muze-utils';\nimport { CONSOLIDATED, FRAGMENTED } from '../../enums/constants';\n\n/**\n * Adds mouse interactions to target element.\n * @param {Firebolt} instance instance of firebolt.\n * @param {SVGElement} targetEl Element on which the event listeners will be attached.\n * @param {Array} behaviours Array of behaviours\n */\n/* istanbul ignore next */ const hover = firebolt => (targetEl, behaviours) => {\n const dispatchBehaviour = function (args) {\n const event = getEvent();\n const context = firebolt.context;\n const tooltipConf = context.config().interaction.tooltip;\n const mode = tooltipConf.mode;\n const pos = getClientPoint(context.getDrawingContext().svgContainer, event);\n const nearestPoint = context.getNearestPoint(pos.x, pos.y, {\n getAllPoints: mode === CONSOLIDATED || mode === FRAGMENTED,\n data: args,\n event\n });\n const payload = {\n criteria: nearestPoint ? nearestPoint.id : null,\n showInPosition: nearestPoint.showInPosition,\n target: nearestPoint.target,\n position: pos,\n mode\n };\n\n behaviours.forEach(beh => firebolt.dispatchBehaviour(beh, payload));\n event.stopPropagation();\n };\n\n targetEl.on('mouseover', dispatchBehaviour)\n .on('mousemove', dispatchBehaviour)\n .on('mouseout', () => {\n behaviours.forEach(beh => firebolt.dispatchBehaviour(beh, {\n criteria: null\n }));\n });\n};\n\nexport default hover;\n","export const CLASSPREFIX = 'muze';\nexport const CONSOLIDATED = 'consolidated';\nexport const FRAGMENTED = 'fragmented';\n\n","import { getClientPoint } from 'muze-utils';\n\nexport const generatePayloadFromEvent = function (args, event, firebolt) {\n const context = firebolt.context;\n const pos = getClientPoint(context.getDrawingContext().svgContainer, event.touches ? event.touches[0] : event);\n const nearestPoint = context.getNearestPoint(pos.x, pos.y, {\n data: args,\n event\n });\n return {\n criteria: nearestPoint ? nearestPoint.id : null,\n showInPosition: nearestPoint.showInPosition,\n target: nearestPoint.target,\n position: pos\n };\n};\n","import { getEvent } from 'muze-utils';\nimport { generatePayloadFromEvent } from './helpers';\n\n/**\n * Adds mouse interactions to target element.\n * @param {VisualUnit} instance instance of visual unit.\n * @param {SVGElement} targetEl Element on which the event listeners will be attached.\n * @param {Array} behaviours Array of behaviours\n */\n/* istanbul ignore next */ const click = firebolt => (targetEl, behaviours) => {\n const dispatchBehaviour = function (args) {\n const event = getEvent();\n const payload = generatePayloadFromEvent(args, event, firebolt);\n behaviours.forEach(beh => firebolt.dispatchBehaviour(beh, payload));\n event.stopPropagation();\n };\n\n targetEl.on('click', dispatchBehaviour);\n};\nexport default click;\n","import drag from './drag';\nimport hover from './hover';\nimport { longtouch } from './longtouch';\nimport { touchdrag } from './touch-drag';\nimport * as ACTIONNAMES from '../../enums/actions';\nimport click from './click';\n\nexport const physicalActions = {\n [ACTIONNAMES.DRAG]: drag,\n [ACTIONNAMES.HOVER]: hover,\n [ACTIONNAMES.CLICK]: click,\n [ACTIONNAMES.LONGTOUCH]: longtouch,\n [ACTIONNAMES.TOUCHDRAG]: touchdrag\n};\n\n","import { attachDragEvent } from './helpers/drag-event';\n\n/**\n * Adds dragging action to the target element.\n * @param {VisualUnit} instance Instance of visual unit.\n * @param {SVGElement} targetEl Element on which brushing action is needed.\n * @param {Array} behaviours Array of behaviours\n */\n/* istanbul ignore next */ const drag = firebolt => (targetEl, behaviours) => {\n attachDragEvent(targetEl, behaviours, firebolt);\n};\n\nexport default drag;\n","/* global setTimeout */\nimport { getEvent } from 'muze-utils';\nimport { generatePayloadFromEvent } from './helpers';\n\n/**\n * Adds mouse interactions to target element.\n * @param {VisualUnit} instance instance of visual unit.\n * @param {SVGElement} targetEl Element on which the event listeners will be attached.\n * @param {Array} behaviours Array of behaviours\n */\nexport const longtouch = firebolt => (targetEl, behaviours) => {\n let event;\n let touchEnd;\n const dispatchBehaviour = function (args) {\n const payload = generatePayloadFromEvent(args, event, firebolt);\n behaviours.forEach(beh => firebolt.dispatchBehaviour(beh, payload));\n event.stopPropagation();\n };\n\n touchEnd = false;\n event = getEvent();\n targetEl.on('touchstart', (args) => {\n event = getEvent();\n touchEnd = false;\n setTimeout(() => {\n if (!touchEnd) {\n dispatchBehaviour(args);\n } else {\n behaviours.forEach(beh => firebolt.dispatchBehaviour(beh, {\n criteria: null\n }));\n }\n }, 100);\n }).on('touchend', () => {\n touchEnd = true;\n });\n};\n","import { attachDragEvent } from './helpers/drag-event';\n\n/**\n * Adds dragging action to the target element.\n * @param {VisualUnit} instance Instance of visual unit.\n * @param {SVGElement} targetEl Element on which brushing action is needed.\n * @param {Array} behaviours Array of behaviours\n */\nexport const touchdrag = firebolt => (targetEl, behaviours) => {\n attachDragEvent(targetEl, behaviours, firebolt, true);\n};\n\n","import { mergeRecursive, getUniqueId } from 'muze-utils';\n\nexport default class GenericSideEffect {\n constructor (firebolt) {\n this.firebolt = firebolt;\n this._enabled = true;\n this._strategy = 'default';\n this._config = {};\n this._id = getUniqueId();\n this._strategies = {};\n this.config(this.constructor.defaultConfig());\n }\n\n static defaultConfig () {\n return {};\n }\n\n static target () {\n return 'all';\n }\n\n static mutates () {\n return false;\n }\n\n config (...params) {\n if (params.length) {\n this._config = mergeRecursive(this._config, params[0]);\n return this;\n }\n return this._config;\n }\n\n disable () {\n this._enabled = false;\n return this;\n }\n\n enable () {\n this._enabled = true;\n return this;\n }\n\n isEnabled () {\n return this._enabled;\n }\n\n apply () {\n return this;\n }\n\n addStrategy (name, fn) {\n this._strategies[name] = fn;\n return this;\n }\n}\n","import GenericSideEffect from './generic';\n\nexport default class SurrogateSideEffect extends GenericSideEffect {\n applyInteractionStyle (set, config = {}, interactionType, apply) {\n const layers = this.firebolt.context.layers();\n layers.forEach(layer => layer.config().interactive !== false &&\n layer.applyInteractionStyle(interactionType, set.uids, apply));\n }\n}\n","import { makeElement } from 'muze-utils';\n\nimport GenericSideEffect from './generic';\n\nexport default class SpawnableSideEffect extends GenericSideEffect {\n createElement (container, elemType, data, className, callbacks) {\n return makeElement(container, elemType, data, className, callbacks);\n }\n\n drawingContext (...drawingContext) {\n if (drawingContext.length) {\n this._drawingContext = drawingContext[0];\n return this;\n }\n return this._drawingContext();\n }\n\n show () {\n return this;\n }\n\n hide () {\n return this;\n }\n}\n","import { selectElement } from 'muze-utils';\n\nexport const getBoxDimensionsFromPayload = (payload, axes, axisFields) => {\n let x1;\n let x2;\n let y1;\n let y2;\n let xRange;\n let yRange;\n let direction;\n const criteria = payload.criteria;\n const dimensions = payload.dimensions || {};\n const xDim = dimensions.x;\n const yDim = dimensions.y;\n\n if (criteria === null) {\n return null;\n }\n\n const xAxis = axes.x[0];\n const yAxis = axes.y[0];\n const xLinear = xAxis.constructor.type() === 'linear';\n const yLinear = yAxis.constructor.type() === 'linear';\n const xField = `${axisFields.x[0]}`;\n const yField = `${axisFields.y[0]}`;\n const xCriteria = criteria[xField];\n const yCriteria = criteria[yField];\n\n if (xCriteria && xCriteria[0] instanceof Array) {\n xRange = xCriteria[0];\n yRange = xCriteria[1];\n } else {\n xRange = xCriteria || [];\n yRange = yCriteria || [];\n }\n direction = xCriteria && yCriteria ? 'both' : (xCriteria ? 'vertical' : 'horizontal');\n if (xRange && xRange.length) {\n if ((yAxis.constructor.type() === 'band' && xLinear)) {\n x1 = x2 = undefined;\n direction = 'horizontal';\n } else {\n const domain = xAxis.domain();\n const bandScale = xAxis.constructor.type() === 'band';\n let x1Val;\n let x2Val;\n if (bandScale) {\n let x1DomainIndex = domain.indexOf(xRange[0]);\n let x2DomainIndex = domain.indexOf(xRange[xRange.length - 1]);\n [x1DomainIndex, x2DomainIndex] = [x1DomainIndex, x2DomainIndex].sort((a, b) => a - b);\n x1Val = domain[x1DomainIndex];\n x2Val = domain[x2DomainIndex];\n } else {\n x1Val = xRange[0];\n x2Val = xRange[xRange.length - 1];\n }\n x1 = xAxis.getScaleValue(x1Val);\n x2 = xAxis.getScaleValue(x2Val);\n x2 += bandScale ? xAxis.getUnitWidth() : 0;\n }\n } else {\n x1 = x2 = undefined;\n }\n if (yRange && yRange.length) {\n if ((xAxis.constructor.type() === 'band' && yLinear)) {\n y1 = y2 = undefined;\n direction = 'vertical';\n } else {\n const domain = yAxis.domain();\n const bandScale = yAxis.constructor.type() === 'band';\n let y1Val;\n let y2Val;\n if (bandScale) {\n let y1DomainIndex = domain.indexOf(yRange[0]);\n let y2DomainIndex = domain.indexOf(yRange[yRange.length - 1]);\n [y1DomainIndex, y2DomainIndex] = [y1DomainIndex, y2DomainIndex].sort(((a, b) => b - a));\n y1Val = domain[y1DomainIndex];\n y2Val = domain[y2DomainIndex];\n } else {\n y1Val = yRange[0];\n y2Val = yRange[yRange.length - 1];\n }\n y1 = yAxis.getScaleValue(y1Val);\n y2 = yAxis.getScaleValue(y2Val);\n y2 += yAxis.constructor.type() === 'band' ? yAxis.getUnitWidth() : 0;\n }\n } else {\n y1 = y2 = undefined;\n }\n\n if ((yLinear && xLinear) || !payload.dragEnd) {\n if (xDim) {\n [x1, x2] = xDim;\n }\n if (yDim) {\n [y1, y2] = yDim;\n }\n }\n\n return {\n dimension: {\n x1,\n x2,\n y1,\n y2\n },\n direction\n };\n};\n\nexport const changeVisibility = (context, sideEffectGroup, visible) => {\n const config = context.config();\n const className = config.defClassName;\n const classPrefix = config.classPrefix;\n selectElement(sideEffectGroup).selectAll(`.${classPrefix}-${className}`)\n .style('display', visible ? 'block' : 'none');\n};\n","import {\n getQualifiedClassName,\n selectElement,\n makeElement,\n isValidValue\n} from 'muze-utils';\nimport { CLASSPREFIX } from '../../enums/constants';\nimport './styles.scss';\nimport SpawnableSideEffect from '../spawnable';\nimport { selectionBoxDrag } from '../../actions/physical/selection-box-drag';\nimport { getBoxDimensionsFromPayload, changeVisibility } from './helper';\n\n/**\n * This class is used to create a selection box which is used by visual unit for brushing and\n * selection in the canvas.\n * @class SelectionBox\n */\nclass SelectionBox extends SpawnableSideEffect {\n /**\n * It returns the default configuration needed by selectionbox.\n * @return {Object} Default configuration of the selection box.\n */\n static defaultConfig () {\n return {\n defClassName: 'selection-box-group',\n className: '',\n classPrefix: CLASSPREFIX,\n box: {\n defClassName: 'selection-box',\n className: ''\n },\n transition: {\n duration: 200\n }\n };\n }\n\n static formalName () {\n return 'selectionBox';\n }\n\n /**\n * Draws the selectionbox with the specified dimensions.\n * @param {Object} dimension Dimensions of the selection box.\n * @param {number} dimension.x1 Starting x position\n * @param {number} dimension.x2 Ending x position\n * @param {number} dimension.y1 Starting y position\n * @param {number} dimension.y2 Ending y position\n * @param {Object} conf Configuration needed to draw the selection box\n * @param {number} unitWidth Width of the visual unit.\n * @param {number} unitHeight Height of the visual unit.\n */\n apply (selectionSet, payload) {\n let x;\n let y;\n let width;\n let height;\n const config = this._config;\n const boxConf = config.box;\n const firebolt = this.firebolt;\n const drawingInf = this.drawingContext();\n const mountPoint = drawingInf.sideEffectGroup;\n const unitWidth = drawingInf.width;\n const unitHeight = drawingInf.height;\n const classPrefix = config.classPrefix;\n const selectionGroupClassName = config.defClassName;\n\n if (payload.criteria === null) {\n this.hide(drawingInf);\n return this;\n }\n\n const sourceInf = firebolt.context.getSourceInfo();\n const { dimension, direction } = getBoxDimensionsFromPayload(payload, sourceInf.axes,\n sourceInf.fields);\n const transition = payload.dragEnd && config.transition;\n\n if (direction === 'both' || direction === 'vertical') {\n x = Math.min(dimension.x1, dimension.x2);\n width = Math.abs(dimension.x2 - dimension.x1);\n } else {\n x = 0;\n width = unitWidth;\n }\n if (direction === 'both' || direction === 'horizontal') {\n y = Math.min(dimension.y1, dimension.y2);\n height = Math.abs(dimension.y2 - dimension.y1);\n } else {\n height = unitHeight;\n y = 0;\n }\n this.show(drawingInf);\n // Create the data array for drawing the rectangle\n const points = [\n {\n x,\n y,\n width,\n height\n }\n ];\n // Create the container group for selection box.\n const selectionGroup = makeElement(selectElement(mountPoint), 'g', [1],\n `.${classPrefix}-${selectionGroupClassName}`);\n const sideEffect = this;\n const selection = selectionGroup.selectAll('rect').data(points);\n const selectionBox = selection.enter().append('rect')\n .each(function () {\n selectionBoxDrag(firebolt)(selectElement(this), ['brush'], sideEffect);\n })\n .merge(selection)\n .each(function (attrs) {\n let element = selectElement(this);\n transition && (element = element.transition().duration(transition.duration));\n for (const key in attrs) {\n if ({}.hasOwnProperty.call(attrs, key)) {\n isValidValue(attrs[key]) && element.attr(key, attrs[key]);\n }\n }\n });\n // Get the qualified class name for selection box rectangle\n const boxClassName = getQualifiedClassName(boxConf.defClassName, this._id, classPrefix);\n selectionBox.classed(boxClassName.join(' '), true);\n selectionBox.classed(boxConf.className, true);\n\n return this;\n }\n\n hide (drawingInf) {\n changeVisibility(this, drawingInf.sideEffectGroup, false);\n }\n\n show (drawingInf) {\n changeVisibility(this, drawingInf.sideEffectGroup, true);\n }\n}\n\nexport default SelectionBox;\n\n","import {\n getEvent,\n getD3Drag\n } from 'muze-utils';\n\nimport getDragActionConfig from './helpers/drag-action-config';\n\nexport const selectionBoxDrag = firebolt => (targetEl, behaviours) => {\n let subject;\n let drawingInf;\n const context = firebolt.context;\n const onDrag = (payload) => {\n behaviours.forEach(action => firebolt.dispatchBehaviour(action, payload));\n };\n const d3Drag = getD3Drag();\n\n targetEl.call(d3Drag().on('start', () => {\n const event = getEvent();\n drawingInf = context.getDrawingContext();\n subject = event.subject;\n }).on('drag', () => {\n const event = getEvent();\n subject.x += event.dx;\n subject.y += event.dy;\n const width = drawingInf.width;\n const height = drawingInf.height;\n const x = Math.min(width - subject.width, Math.max(subject.x, 0));\n const y = Math.min(height - subject.height, Math.max(subject.y, 0));\n const y2 = y + subject.height;\n const x2 = x + subject.width;\n\n if (x >= 0 && x2 <= width && y >= 0 && y2 <= height) {\n const payload = getDragActionConfig(context.getSourceInfo(), {\n startPos: {\n x,\n y\n },\n endPos: {\n x: x2,\n y: y2\n }\n }, context.data().getFieldsConfig());\n onDrag(payload);\n }\n }).on('end', () => {\n const width = drawingInf.width;\n const height = drawingInf.height;\n const x = Math.min(width - subject.width, Math.max(subject.x, 0));\n const y = Math.min(height - subject.height, Math.max(subject.y, 0));\n const y2 = y + subject.height;\n const x2 = x + subject.width;\n\n if (x >= 0 && x2 <= width && y >= 0 && y2 <= height) {\n const payload = getDragActionConfig(context.getSourceInfo(), {\n startPos: {\n x,\n y\n },\n endPos: {\n x: x2,\n y: y2\n },\n snap: true\n }, context.data().getFieldsConfig());\n payload.dragEnd = true;\n onDrag(payload);\n }\n }));\n};\n","export const CLASSPREFIX = 'muze';\nexport const ARROW_RIGHT = 'right';\nexport const ARROW_TOP = 'top';\nexport const ARROW_BOTTOM = 'bottom';\nexport const ARROW_LEFT = 'left';\nexport const TOOLTIP_LEFT = 'left';\nexport const TOOLTIP_RIGHT = 'right';\nexport const TOOLTIP_BOTTOM = 'bottom';\nexport const TOOLTIP_TOP = 'top';\nexport const INITIAL_STYLE = {\n position: 'absolute',\n width: 0,\n height: 0\n};\n","import { CLASSPREFIX } from './constants';\n\nexport const defaultConfig = {\n classPrefix: CLASSPREFIX,\n defClassName: 'tooltip-box',\n connectorClassName: 'tooltip-connectors',\n className: '',\n row: {\n margin: 0\n },\n content: {\n spacing: 5,\n iconContainerSize: 10,\n iconScale: 1,\n iconShape: 'circle',\n iconColor: '#ff0000',\n rowMargin: '0px',\n margin: 10,\n separator: ':',\n className: 'tooltip-content-container',\n parentClassName: 'tooltip-content-parent-container'\n },\n arrow: {\n size: 10,\n disabled: false,\n defClassName: 'tooltip-arrow',\n className: '',\n color: 'rgba(195,195,195,0.85)'\n }\n};\n","import { getQualifiedClassName } from 'muze-utils';\nimport { TOOLTIP_LEFT, TOOLTIP_RIGHT, ARROW_RIGHT, ARROW_LEFT, TOOLTIP_BOTTOM } from './constants';\n\nexport const getArrowPos = (orient, dim, measurement, config) => {\n let arrowPos;\n const { x, y, boxHeight, boxWidth } = measurement;\n const arrowDisabled = config.arrow.disabled;\n const arrowWidth = arrowDisabled ? 0 : config.arrow.size;\n\n if (orient === ARROW_LEFT || orient === ARROW_RIGHT) {\n let start = 0;\n let diff = boxHeight / 2;\n const plotBottom = dim.y + dim.height;\n const boxBottom = y + boxHeight;\n\n if (dim.y > y) {\n start = dim.y - y;\n diff = (plotBottom >= boxBottom ? (boxBottom - dim.y) : dim.height) / 2;\n } else if (boxBottom > plotBottom) {\n diff = Math.abs(y - (dim.y + dim.height)) / 2;\n }\n arrowPos = start + diff - arrowWidth / 2;\n } else {\n let start = 0;\n let diff = boxWidth / 2;\n const plotRight = dim.x + dim.width;\n const boxRight = x + boxWidth;\n\n if (dim.x > x) {\n start = dim.x - x;\n diff = (plotRight >= boxRight ? (boxRight - dim.x) : dim.width) / 2;\n } else if (boxRight > plotRight) {\n diff = Math.abs(x - (dim.x + dim.width)) / 2;\n }\n arrowPos = start + diff - arrowWidth / 2;\n }\n return arrowPos;\n};\n\n/**\n * Places the arrow in the specified arrow position. It also applies appropriate arrow\n * class name to the arrow element.\n * @param {string} position Left, bottom or right position of the arrow;\n * @param {number} arrowPos position of arrow in pixels\n * @return {Tooltip} Instance of tooltip.\n */\nexport const placeArrow = (context, position, arrowPos) => {\n const tooltipArrow = context._tooltipArrow;\n const tooltipBackground = context._tooltipBackground;\n const config = context._config;\n const classPrefix = config.classPrefix;\n const arrowConf = config.arrow;\n const className = getQualifiedClassName(arrowConf.defClassName, context._id, config.classPrefix);\n\n tooltipArrow.style('display', 'block');\n tooltipArrow.attr('class', `${className.join(' ')}`);\n if (position === TOOLTIP_LEFT || position === TOOLTIP_RIGHT) {\n tooltipArrow.style('top', `${arrowPos}px`);\n tooltipArrow.style('left', '');\n tooltipBackground.style('top', `${arrowPos}px`);\n tooltipBackground.style('left', '');\n } else {\n position === TOOLTIP_BOTTOM ? tooltipArrow.style('top', '100%') : tooltipArrow.style('top',\n `-${arrowConf.size}px`);\n tooltipArrow.style('left', `${arrowPos}px`);\n position === TOOLTIP_BOTTOM ? tooltipBackground.style('top', '100%') : tooltipBackground.style('top',\n `-${arrowConf.size + 3}px`);\n tooltipBackground.style('left', `${arrowPos}px`);\n }\n tooltipArrow.classed(`${classPrefix}-tooltip-arrow`, true);\n tooltipArrow.classed(`${classPrefix}-tooltip-arrow-${context._arrowOrientation}`, false);\n tooltipArrow.classed(`${classPrefix}-tooltip-arrow-${position}`, true);\n tooltipBackground.classed(`${classPrefix}-tooltip-background-arrow`, true);\n tooltipBackground.classed(`${classPrefix}-tooltip-background-arrow-${context._arrowOrientation}`, false);\n tooltipBackground.classed(`${classPrefix}-tooltip-background-arrow-${position}`, true);\n return this;\n};\n\nexport const reorderContainers = (parentContainer, className) => {\n parentContainer.selectAll(className).sort((a, b) => a - b);\n};\n","import {\n getClosestIndexOf,\n DateTimeFormatter,\n DimensionSubtype,\n FieldType\n} from 'muze-utils';\n\nconst timeFormats = {\n millisecond: '%A, %b %e, %H:%M:%S.%L',\n second: '%A, %b %e, %H:%M:%S',\n minute: '%A, %b %e, %H:%M',\n hour: '%A, %b %e, %H:%M',\n day: '%A, %b %e, %Y',\n month: '%B %Y',\n year: '%Y'\n};\nconst timeDurations = [\n ['millisecond', 'second', 'minute', 'hour', 'day', 'month', 'year'],\n [1, 1000, 60000, 3600000, 86400000, 2592000000, 31536000000]\n];\nconst getNearestInterval = (interval) => {\n const index = getClosestIndexOf(timeDurations[1], interval);\n return timeDurations[0][index];\n};\nconst defaultTooltipFormatters = (type, formatter) => {\n const formatters = {\n [DimensionSubtype.TEMPORAL]: (value, interval) => {\n const nearestInterval = getNearestInterval(interval);\n return DateTimeFormatter.formatAs(value, timeFormats[nearestInterval]);\n },\n [FieldType.MEASURE]: value => formatter(value ? value.toFixed(2) : value),\n [FieldType.DIMENSION]: value => value\n };\n return formatters[type];\n};\n\nconst getTabularData = (data, schema, fieldspace, timeDiffs) => {\n const rows = [];\n rows.push(schema.map(d => d.name));\n data.forEach((d) => {\n const row = [];\n schema.forEach((fieldObj, i) => {\n const interval = fieldObj.subtype === DimensionSubtype.TEMPORAL ? timeDiffs[fieldObj.name] : 0;\n const numberFormat = fieldObj.type === FieldType.MEASURE && fieldspace.fields[i]._ref.numberFormat();\n const formatterFn = defaultTooltipFormatters(fieldObj.subtype || fieldObj.type, numberFormat);\n const value = formatterFn(d[i], interval);\n row.push(value);\n });\n rows.push(row);\n });\n return rows;\n};\n\nexport const buildTooltipData = (dataModel, config = {}, context) => {\n let fieldValues = [];\n const dataObj = dataModel.getData();\n const data = dataObj.data;\n const schema = dataObj.schema;\n const formatters = config.formatters;\n const separator = config.separator;\n const fieldsConfig = dataModel.getFieldsConfig();\n const fieldspace = dataModel.getFieldspace();\n const fieldsObj = fieldspace.fieldsObj();\n const dimensionMeasureMap = context.dimensionMeasureMap;\n const axes = context.axes;\n const detailFields = context.detailFields || [];\n const dimensions = schema.filter(d => d.type === FieldType.DIMENSION);\n const measures = schema.filter(d => d.type === FieldType.MEASURE);\n // const containsRetinalField = schema.find(d => d.name in dimensionMeasureMap);\n const containsDetailField = schema.find(d => detailFields.indexOf(d.name) !== -1);\n const dataLen = data.length;\n const getRowContent = (field, type) => {\n let value;\n let formattedValue;\n let measureIndex;\n const values = [];\n const index = fieldsConfig[field].index;\n const interval = fieldsConfig[field].def.subtype === DimensionSubtype.TEMPORAL ?\n fieldsObj[field].getMinDiff() : 0;\n const formatterFn = (formatters && formatters[field]) || defaultTooltipFormatters(type, val => val);\n\n if (value !== null) {\n let uniqueVals = type === FieldType.MEASURE ? data.map(d => d[index]) :\n [...new Set(data.map(d => d[index]))];\n uniqueVals = uniqueVals.filter(d => d !== '');\n const colorAxis = axes.color[0];\n const shapeAxis = axes.shape[0];\n const sizeAxis = axes.size[0];\n const isRetinalField = (colorAxis || shapeAxis || sizeAxis) && dataLen > 1 &&\n type !== FieldType.MEASURE;\n\n uniqueVals.forEach((val, i) => {\n let key;\n const associatedMeasures = dimensionMeasureMap[field];\n\n if (associatedMeasures && associatedMeasures.length && dataLen > 1) {\n key = val;\n let icon = {\n value: ''\n };\n\n if (isRetinalField) {\n icon = {\n type: 'icon',\n color: colorAxis.getColor(val),\n shape: shapeAxis.getShape(val),\n size: sizeAxis.getSize(val) * config.iconScale\n };\n }\n if (associatedMeasures.length > 1) {\n values.push([icon, `${key}`]);\n associatedMeasures.forEach((measure) => {\n measureIndex = fieldsConfig[measure].index;\n value = data[i][measureIndex];\n formattedValue = defaultTooltipFormatters('measure',\n fieldspace.fields[measureIndex]._ref.numberFormat())(value, interval);\n values.push([{\n value: `${measure}${separator}`,\n style: {\n 'margin-left': `${config.margin}px}`\n },\n className: `${config.classPrefix}-tooltip-key`\n }, {\n value: `${formattedValue}`,\n className: `${config.classPrefix}-tooltip-value`\n }]);\n });\n } else {\n measureIndex = fieldsConfig[associatedMeasures[0]].index;\n value = data[i][measureIndex];\n formattedValue = defaultTooltipFormatters('measure',\n fieldspace.fields[measureIndex]._ref.numberFormat())(value, interval);\n values.push([icon, {\n value: `${key}${separator}`,\n className: `${config.classPrefix}-tooltip-key`\n }, {\n value: `${formattedValue}`,\n className: `${config.classPrefix}-tooltip-value`\n }]);\n }\n } else {\n key = field;\n value = val;\n formattedValue = formatterFn(value, interval);\n values.push([{\n value: `${key}${separator}`,\n className: `${config.classPrefix}-tooltip-key`\n }, {\n value: `${formattedValue}`,\n className: `${config.classPrefix}-tooltip-value`\n }]);\n }\n });\n }\n return values;\n };\n let displayFormat = 'keyValue';\n\n if (dataLen > 1 && containsDetailField) {\n fieldValues = getTabularData(data, schema, fieldspace, context.timeDiffs);\n displayFormat = 'table';\n } else {\n dimensions.forEach((item) => {\n const type = item.subtype ? item.subtype : item.type;\n fieldValues = [...fieldValues, ...getRowContent(item.name, type)];\n });\n\n const allMeasures = [...new Set(...Object.values(dimensionMeasureMap))];\n const filteredMeasures = dataLen > 1 ? measures.filter(d => allMeasures.indexOf(d.name) === -1)\n : measures;\n\n filteredMeasures.forEach((item) => {\n const type = item.subtype ? item.subtype : item.type;\n fieldValues = [...fieldValues, ...getRowContent(item.name, type)];\n });\n }\n\n return {\n content: fieldValues,\n displayFormat\n };\n};\n\n/**\n * This contains the strategy methods for showing tooltip in the chart.\n * @param {VisualUnit} context Attached instance.\n */\nexport const strategy = {\n keyValue: (data, config, context) => {\n const values = buildTooltipData(data, config, context);\n return values;\n }\n};\n\nexport const DEFAULT_STRATEGY = 'keyValue';\n","import {\n selectElement,\n mergeRecursive,\n makeElement,\n setAttrs,\n setStyles,\n getSymbol,\n isSimpleObject\n} from 'muze-utils';\nimport { DEFAULT_STRATEGY, strategy } from './strategy';\nimport { defaultConfig } from './default-config';\n\n/**\n * This class is used to manage the content of tooltip.\n */\nexport default class Content {\n /**\n * Creates an instance of content.\n */\n constructor () {\n this._model = null;\n this._strategy = DEFAULT_STRATEGY;\n this._formatter = null;\n this._config = this.constructor.defaultConfig();\n }\n /**\n * Returns the default configuration of tooltip\n * @return {Object} Configuration of tooltip.\n */\n static defaultConfig () {\n const config = defaultConfig.content;\n config.classPrefix = defaultConfig.classPrefix;\n return config;\n }\n\n config (...c) {\n if (c.length > 0) {\n this._config = mergeRecursive(this._config, c[0]);\n return this;\n }\n return this._config;\n }\n\n /**\n * Update model. The format contains presentation strategy which determines how to show the content.\n * If no strategy is mentioned then default is to show key value pair\n */\n update (item) {\n this._model = item.model;\n this._strategy = item.strategy !== undefined ? item.strategy : DEFAULT_STRATEGY;\n this._formatter = item.formatter;\n return this;\n }\n\n context (ctx) {\n this._context = ctx;\n return this;\n }\n\n render (mount) {\n let data;\n const config = this._config;\n const iconContainerSize = config.iconContainerSize;\n const formatter = this._formatter;\n const rowMargin = config.rowMargin;\n const model = this._model;\n\n this._mount = mount;\n if (model instanceof Array) {\n data = model;\n } else {\n data = formatter instanceof Function ? formatter(this._model, this._context) :\n strategy[this._strategy](this._model, this.config(), this._context);\n }\n\n if (data instanceof Function) {\n mount.html(data());\n } else {\n let content = data;\n let displayFormat = 'default';\n\n if (isSimpleObject(data)) {\n content = data.content;\n displayFormat = data.displayFormat;\n }\n\n const body = makeElement(mount, 'div', [displayFormat], `${config.classPrefix}-tooltip-content`, {},\n d => d);\n\n if (displayFormat === 'table') {\n const table = makeElement(body, 'table', [1], `${config.classPrefix}-tooltip-table`);\n const tbody = makeElement(table, 'tbody', [1], `${config.classPrefix}-tooltip-table-tbody`);\n const rows = makeElement(tbody, 'tr', content, `${config.classPrefix}-tooltip-table-row`);\n rows.each(function (d, i) {\n selectElement(this).classed(`${config.classPrefix}-tooltip-table-row-${i}`, true);\n });\n const cells = makeElement(rows, 'td', d => d, `${config.classPrefix}-tooltip-table-cell`);\n cells.each(function (d) {\n selectElement(this).html(d);\n });\n } else {\n const rows = makeElement(body, 'div', content, `${config.classPrefix}-tooltip-row`);\n const cells = makeElement(rows, 'span', d => d, `${config.classPrefix}-tooltip-content`);\n cells.attr('class', `${config.classPrefix}-tooltip-content`);\n setStyles(rows, {\n margin: rowMargin\n });\n setStyles(cells, {\n display: 'inline-block',\n 'margin-right': `${config.spacing}px`\n });\n\n cells.each(function (d) {\n const el = selectElement(this);\n el.html('');\n if (d instanceof Object) {\n if (d.type === 'icon') {\n const svg = makeElement(el, 'svg', [1]);\n const path = makeElement(svg, 'path', [1]);\n const shape = d.shape instanceof Function ? d.shape : getSymbol(d.shape);\n\n setAttrs(svg, {\n x: 0,\n y: 0,\n width: iconContainerSize,\n height: iconContainerSize\n });\n setAttrs(path, {\n d: shape.size(d.size)(),\n transform: `translate(${iconContainerSize / 2}, ${iconContainerSize / 2})`\n });\n setStyles(path, {\n fill: d.color\n });\n setStyles(svg, {\n width: `${iconContainerSize}px`,\n height: `${iconContainerSize}px`\n });\n } else {\n el.html(d.value);\n d.className && el.classed(d.className, true);\n setStyles(el, d.style);\n }\n } else {\n el.html(d);\n }\n });\n }\n }\n return this;\n }\n\n clear () {\n this._model = null;\n return this;\n }\n}\n","import {\n mergeRecursive,\n getQualifiedClassName,\n getUniqueId,\n selectElement,\n setStyles,\n makeElement\n} from 'muze-utils';\nimport { ARROW_BOTTOM, ARROW_LEFT, ARROW_RIGHT, TOOLTIP_LEFT, TOOLTIP_RIGHT, TOOLTIP_BOTTOM, TOOLTIP_TOP,\n INITIAL_STYLE } from './constants';\nimport { defaultConfig } from './default-config';\nimport { getArrowPos, placeArrow, reorderContainers } from './helper';\nimport './styles.scss';\nimport Content from './content';\n\n/**\n * This component is responsible for creating a tooltip element. It appends the tooltip\n * in the body element.\n * @class Tooltip\n */\nexport default class Tooltip {\n /**\n * Initializes the tooltip with the container element and configuration\n * @param {HTMLElement} container container where the tooltip will be mounted.\n * @param {string} className Class name of the tooltip.\n */\n constructor (htmlContainer, svgContainer) {\n let connectorContainer = svgContainer;\n this._id = getUniqueId();\n this._config = {};\n this.config({});\n const tooltipConf = this._config;\n const classPrefix = tooltipConf.classPrefix;\n const contentClass = tooltipConf.content.parentClassName;\n const container = makeElement(htmlContainer, 'div', [1], `${classPrefix}-tooltip-container`);\n this._container = container;\n this._tooltipContainer = container.append('div').style('position', 'absolute');\n this._contentContainer = this._tooltipContainer.append('div').attr('class', `${classPrefix}-${contentClass}`);\n this._tooltipBackground = this._tooltipContainer.append('div').style('position', 'relative');\n this._tooltipArrow = this._tooltipContainer.append('div');\n\n if (!svgContainer) {\n connectorContainer = htmlContainer.append('svg').style('pointer-events', 'none');\n }\n this._contents = {};\n this._tooltipConnectorContainer = selectElement(connectorContainer)\n .append('g')\n .attr('class', `${tooltipConf.classPrefix}-${tooltipConf.connectorClassName}`);\n const id = this._id;\n const defClassName = tooltipConf.defClassName;\n const qualifiedClassName = getQualifiedClassName(defClassName, id, tooltipConf.classPrefix);\n\n setStyles(this._tooltipArrow, INITIAL_STYLE);\n setStyles(this._tooltipBackground, INITIAL_STYLE);\n this.addClass(qualifiedClassName.join(' '));\n this.addClass(tooltipConf.className);\n this.hide();\n }\n\n /**\n * Sets the configuration of tooltip.\n * @param {Object} config Configuration of tooltip\n * @return {Tooltip} Instance of tooltip\n */\n config (...config) {\n if (config.length > 0) {\n const defConf = mergeRecursive({}, this.constructor.defaultConfig());\n this._config = mergeRecursive(defConf, config[0]);\n return this;\n }\n return this._config;\n }\n\n /**\n * Returns the default configuration of tooltip\n * @return {Object} Configuration of tooltip.\n */\n static defaultConfig () {\n return defaultConfig;\n }\n /**\n * Sets the class name of tooltip\n * @param {string} className tooltip class name\n * @return {Tooltip} Instance of tooltip.\n */\n addClass (className) {\n this._tooltipContainer.classed(className, true);\n return this;\n }\n\n context (...ctx) {\n if (ctx.length) {\n this._context = ctx[0];\n return this;\n }\n return this._context;\n }\n\n content (name, data, contentConfig = {}) {\n const config = this.config();\n const { classPrefix } = config;\n const contentClass = config.content.className;\n const formatter = config.formatter;\n const className = contentConfig.className || `${classPrefix}-${contentClass}-${name}`;\n const content = this._contents[name] = this._contents[name] || new Content();\n const container = makeElement(this._contentContainer, 'div', [contentConfig.order], className);\n container.attr('class', `${classPrefix}-${contentClass} ${className}`);\n reorderContainers(this._contentContainer, `.${classPrefix}-${contentClass}`);\n const contentConf = config.content;\n contentConfig.classPrefix = this._config.classPrefix;\n content.config(contentConf);\n\n if (data === null) {\n content.clear();\n container.remove();\n delete this._contents[name];\n } else {\n content.update({\n model: data,\n formatter: contentConfig.formatter || formatter\n });\n content.context(this._context);\n content.render(container);\n }\n\n if (!Object.keys(this._contents).length) {\n this.hide();\n }\n return this;\n }\n\n getContents () {\n return Object.values(this._contents);\n }\n\n /**\n * Positions the tooltip at the given x and y position.\n * @param {number} x x position\n * @param {number} y y position\n * @return {Tooltip} Instance of tooltip.\n */\n position (x, y, conf = {}) {\n if (!Object.keys(this._contents).length) {\n this.hide();\n return this;\n }\n this.show();\n const target = this._target;\n const repositionArrow = conf.repositionArrow;\n\n if (target && repositionArrow) {\n const node = this._tooltipContainer.node();\n const config = this._config;\n const arrowDisabled = config.arrow.disabled;\n const arrowWidth = arrowDisabled ? 0 : config.arrow.size;\n const arrowOrient = this._arrowOrientation;\n const outsidePlot = arrowOrient === ARROW_LEFT || arrowOrient === ARROW_RIGHT ?\n (y + node.offsetHeight - arrowWidth) < target.y || y > (target.y + target.height) :\n (x + node.offsetWidth - arrowWidth) < target.x || x > (target.x + target.width);\n\n if (!arrowDisabled) {\n if (outsidePlot) {\n let path;\n this._tooltipArrow.style('display', 'none');\n this._tooltipBackground.style('display', 'none');\n this._tooltipConnectorContainer.style('display', 'block');\n const connector = this._tooltipConnectorContainer.selectAll('path').data([1]);\n const enter = connector.enter().append('path');\n if (arrowOrient === ARROW_LEFT) {\n path = `M ${x} ${y + node.offsetHeight / 2} L ${target.x + target.width}`\n + ` ${target.y + target.height / 2}`;\n } else if (arrowOrient === ARROW_RIGHT) {\n path = `M ${x + node.offsetWidth} ${y + node.offsetHeight / 2}`\n + ` L ${target.x} ${target.y + target.height / 2}`;\n } else if (arrowOrient === ARROW_BOTTOM) {\n path = `M ${x + node.offsetWidth / 2} ${y + node.offsetHeight}`\n + ` L ${target.x + target.width / 2} ${target.y}`;\n }\n enter.merge(connector).attr('d', path).style('display', 'block');\n } else {\n const arrowPos = getArrowPos(arrowOrient, target, {\n x,\n y,\n boxHeight: node.offsetHeight,\n boxWidth: node.offsetWidth\n }, this._config);\n\n placeArrow(this, this._arrowOrientation, arrowPos);\n this._tooltipConnectorContainer.style('display', 'none');\n }\n }\n }\n\n const offset = this._offset || {\n x: 0,\n y: 0\n };\n this._tooltipContainer.style('left', `${offset.x + x}px`).style('top',\n `${offset.y + y}px`);\n\n return this;\n }\n\n /**\n * Positions the tooltip relative to a rectangular box. It takes care of tooltip overflowing the\n * boundaries.\n * @param {Object} dim Dimensions of the plot.\n */\n positionRelativeTo (dim, tooltipConf = {}) {\n let obj;\n let orientation = tooltipConf.orientation;\n this.show();\n if (!dim) {\n this.hide();\n return this;\n }\n\n const extent = this._extent;\n const node = this._tooltipContainer.node();\n\n this._tooltipContainer.style('top', '0px')\n .style('left', '0px');\n const offsetWidth = node.offsetWidth + 2;\n const offsetHeight = node.offsetHeight + 2;\n const config = this._config;\n const offset = this._offset;\n const arrowDisabled = config.arrow.disabled;\n const arrowSize = arrowDisabled ? 0 : config.arrow.size;\n const draw = tooltipConf.draw !== undefined ? tooltipConf.draw : true;\n const topSpace = dim.y;\n // When there is no space in right\n const dimX = dim.x + dim.width + offset.x;\n const rightSpace = extent.width - dimX;\n const leftSpace = dim.x + offset.x - extent.x;\n const positionTop = topSpace > (offsetHeight + arrowSize);\n const positionRight = rightSpace >= offsetWidth + arrowSize;\n const positionLeft = leftSpace >= offsetWidth + arrowSize;\n\n const positionHorizontal = () => {\n let position;\n let x = dim.x + dim.width;\n let y = dim.y;\n\n if (positionRight) {\n position = TOOLTIP_LEFT;\n x += arrowSize;\n } else if (positionLeft) {\n x = dim.x - offsetWidth;\n position = TOOLTIP_RIGHT;\n x -= arrowSize;\n } else {\n position = 'left';\n x += arrowSize;\n }\n if (dim.height < offsetHeight) {\n y = Math.max(0, dim.y + dim.height / 2 - offsetHeight / 2);\n }\n\n const arrowPos = getArrowPos(position, dim, {\n x,\n y,\n boxHeight: offsetHeight,\n boxWidth: offsetWidth\n }, this._config);\n\n return {\n position,\n arrowPos,\n x,\n y\n };\n };\n\n const positionVertical = () => {\n let position;\n let y;\n // Position tooltip at the center of plot\n let x = dim.x - offsetWidth / 2 + dim.width / 2;\n\n // Overflows to the right\n if ((extent.width - (dim.x + offset.x)) < offsetWidth) {\n x = extent.width - offsetWidth - offset.x;\n } else if ((x + offset.x) < extent.x) { // Overflows to the left\n x = extent.x;\n }\n\n if (positionTop) {\n y = dim.y - offsetHeight - arrowSize;\n position = TOOLTIP_BOTTOM;\n } else {\n y = dim.y + dim.height + arrowSize;\n position = TOOLTIP_TOP;\n }\n\n const arrowPos = getArrowPos(position, dim, {\n x,\n y,\n boxHeight: offsetHeight,\n boxWidth: offsetWidth\n }, this._config);\n\n return {\n position,\n arrowPos,\n x,\n y\n };\n };\n\n this._target = dim;\n if (!orientation) {\n if (positionTop) {\n orientation = 'vertical';\n } else if (positionRight || positionLeft) {\n orientation = 'horizontal';\n } else {\n orientation = 'vertical';\n }\n }\n\n if (orientation === 'horizontal') {\n obj = positionHorizontal();\n } else if (orientation === 'vertical') {\n obj = positionVertical();\n }\n\n this._position = {\n x: obj.x,\n y: obj.y\n };\n\n this._arrowPos = obj.arrowPos;\n if (!arrowDisabled) {\n placeArrow(this, obj.position, obj.arrowPos);\n } else {\n this._tooltipArrow.style('display', 'none');\n this._tooltipBackground.style('display', 'none');\n }\n this._arrowOrientation = obj.position;\n draw && this.position(obj.x, obj.y);\n return this;\n }\n\n /**\n * Hides the tooltip element.\n * @return {Tooltip} Instance of tooltip.\n */\n hide () {\n this._tooltipContainer.style('display', 'none');\n this._tooltipConnectorContainer.style('display', 'none');\n return this;\n }\n\n /**\n * Shows the tooltip element.\n * @return {Tooltip} Instance of tooltip.\n */\n show () {\n this._tooltipContainer.style('display', 'block');\n return this;\n }\n\n extent (extent) {\n this._extent = extent;\n return this;\n }\n\n offset (offset) {\n this._offset = offset;\n return this;\n }\n\n remove () {\n this._tooltipContainer.remove();\n this._tooltipBackground.remove();\n this._tooltipConnectorContainer.remove();\n return this;\n }\n}\n","import { FieldType } from 'muze-utils';\n\nexport const strategies = {\n showSelectedItems: (dm) => {\n const dataObj = dm.getData();\n const measures = dataObj.schema.filter(d => d.type === FieldType.MEASURE);\n const aggregatedModel = dm.groupBy([''], measures.reduce((acc, v) => {\n acc[v.name] = v.defAggFn === 'count' ? 'sum' : v.defAggFn;\n return acc;\n }, {}));\n const fieldsObj = dm.getFieldspace().fieldsObj();\n const fieldsConf = aggregatedModel.getFieldsConfig();\n let values = [{\n value: `${dataObj.data.length}`,\n style: {\n 'font-weight': 'bold'\n }\n }, 'Items Selected'];\n const measureNames = measures.map(d => d.name);\n if (measureNames.length) {\n values = [...values, ...[`(${fieldsObj[measureNames[0]].defAggFn().toUpperCase()}) ${measureNames[0]}`,\n {\n value: `${aggregatedModel.getData().data[0][fieldsConf[measureNames[0]].index].toFixed(2)}`,\n style: {\n 'font-weight': 'bold'\n }\n }]];\n }\n return [values];\n }\n};\n","import { Tooltip as TooltipRenderer } from '@chartshq/muze-tooltip';\nimport { FieldType } from 'muze-utils';\nimport { spaceOutBoxes } from '../helper';\nimport { strategies } from './strategies';\nimport { FRAGMENTED } from '../../enums/constants';\nimport SpawnableSideEffect from '../spawnable';\n\nimport './styles.scss';\n\nexport default class Tooltip extends SpawnableSideEffect {\n constructor (...params) {\n super(...params);\n this._tooltips = {};\n this._strategies = strategies;\n this._strategy = 'default';\n }\n\n static defaultConfig () {\n return {\n padding: 5,\n offset: {\n x: 0,\n y: 0\n }\n };\n }\n\n static formalName () {\n return 'tooltip';\n }\n\n apply (selectionSet, payload, options = {}) {\n let totalHeight = 0;\n let totalWidth = 0;\n const dataModel = selectionSet.mergedEnter.model;\n const context = this.firebolt.context;\n const drawingInf = this.drawingContext();\n if ((dataModel.isEmpty() || payload.criteria === null) || selectionSet.isSourceFieldPresent === false) {\n this.hide(options, null);\n return this;\n }\n\n const tooltips = this._tooltips;\n const config = this.config();\n const boundBox = {\n width: drawingInf.width,\n height: drawingInf.height\n };\n const showInPosition = payload.showInPosition;\n const pad = config.padding;\n const dataModels = [];\n const fragmented = config.mode === FRAGMENTED;\n const sourceInf = context.getSourceInfo();\n const fields = sourceInf.fields;\n const xFieldDim = fields.x[0] ? fields.x[0].type() === FieldType.DIMENSION : false;\n const showVertically = !!xFieldDim;\n const tooltipPos = payload.position;\n const boxes = [];\n const enter = {};\n const uids = dataModel.getData().uids;\n if (fragmented) {\n dataModels.push(...uids.map(d => dataModel.select((fieldsArr, i) => i === d, {\n saveChild: false\n })));\n } else {\n dataModels.push(dataModel);\n }\n\n let target = payload.target;\n let targetFields = [];\n if (target) {\n targetFields = target[0] || [];\n const sourceFields = payload.sourceFields;\n const indices = [];\n for (let i = 0, len = targetFields.length; i < len; i++) {\n if (sourceFields.indexOf(targetFields[i]) !== -1) {\n indices.push(i);\n }\n }\n target = target.map(d => d.filter((v, i) => indices.indexOf(i) !== -1));\n }\n\n const plotDimensions = context.getPlotPointsFromIdentifiers(target || payload.criteria, {\n getBBox: true\n });\n\n // Show tooltip for each datamodel\n for (let i = 0; i < dataModels.length; i++) {\n let plotDim = plotDimensions[i];\n if (fragmented) {\n const dimensions = dataModels[i].getData().schema.filter(d => d.type === FieldType.DIMENSION)\n .map(d => d.name);\n plotDim = context.getPlotPointsFromIdentifiers(dataModels[i].project(dimensions), { getBBox: true });\n plotDim = plotDim && plotDim[0];\n }\n\n let dt = dataModels[i];\n if (config.fields) {\n dt = dt.project(config.fields, {\n saveChild: false\n });\n }\n if (config.dataTransform) {\n dt = config.dataTransform(dt, i);\n }\n\n enter[i] = true;\n const layoutContainer = drawingInf.parentContainer;\n const layoutBoundBox = layoutContainer.getBoundingClientRect();\n const unitBoundBox = drawingInf.htmlContainer.getBoundingClientRect();\n\n const offsetLeft = unitBoundBox.left - layoutBoundBox.left;\n const offsetTop = unitBoundBox.top - layoutBoundBox.top;\n const tooltipInst = tooltips[i] = tooltips[i] || new TooltipRenderer(layoutContainer,\n drawingInf.svgContainer);\n\n sourceInf.payload = payload;\n sourceInf.firebolt = this.firebolt;\n sourceInf.detailFields = context.detailFields();\n sourceInf.timeDiffs = context.timeDiffsByField();\n tooltipInst.context(sourceInf);\n const strategy = strategies[options.strategy];\n tooltipInst.content(options.strategy || this._strategy, dt, {\n formatter: strategy,\n order: options.order\n })\n .config(this.config())\n .extent({\n x: 0,\n y: 0,\n width: layoutBoundBox.width,\n height: layoutBoundBox.height\n })\n .offset({\n x: offsetLeft + (config.offset.x || 0),\n y: offsetTop + (config.offset.y || 0)\n });\n\n if (showInPosition) {\n tooltipInst.position(tooltipPos.x + pad, tooltipPos.y + pad);\n } else if (plotDim) {\n tooltipInst.positionRelativeTo({\n x: plotDim.x,\n y: plotDim.y,\n width: plotDim.width || 0,\n height: plotDim.height || 0\n }, {\n orientation: fragmented ?\n (showVertically ? 'horizontal' : 'vertical') : undefined\n });\n } else {\n tooltipInst.hide();\n break;\n }\n\n if (fragmented) {\n const position = tooltipInst._position;\n const tooltipBoundBox = tooltipInst._tooltipContainer.node().getBoundingClientRect();\n\n totalHeight += tooltipBoundBox.height + pad;\n totalWidth += tooltipBoundBox.width + pad;\n if (showVertically ? totalHeight > drawingInf.height : totalWidth > drawingInf.width) {\n break;\n }\n boxes.push({\n x: position.x,\n y: position.y,\n width: tooltipBoundBox.width,\n height: tooltipBoundBox.height,\n tooltip: tooltipInst\n });\n }\n }\n\n for (const key in tooltips) {\n if (!enter[key]) {\n const tooltip = tooltips[key];\n tooltip.content(payload.action, null);\n if (!tooltip.getContents().length) {\n tooltip.remove();\n delete tooltips[key];\n }\n }\n }\n if (fragmented) {\n spaceOutBoxes(boxes, boundBox, showVertically);\n boxes.forEach(box => box.tooltip.position(box.x, box.y, {\n repositionArrow: true\n }));\n }\n return this;\n }\n\n hide (options) {\n const tooltips = this._tooltips;\n for (const key in tooltips) {\n if ({}.hasOwnProperty.call(tooltips, key)) {\n const strategy = options.strategy || this._strategy;\n tooltips[key].content(strategy, null);\n tooltips[key].hide();\n }\n }\n }\n}\n","export const spaceOutBoxes = (boxes, extent, showVertically) => {\n let y;\n let height;\n let x;\n let width;\n let i;\n const pad = 5;\n const len = boxes.length;\n const spaceOutIfOverlap = (firstBox, secondBox, opposite) => {\n x = firstBox.x;\n width = firstBox.width;\n y = firstBox.y;\n height = firstBox.height;\n const bottom = y + height;\n const right = x + width;\n\n if (showVertically) {\n if (opposite ? y < (secondBox.y + secondBox.height) : bottom > secondBox.y) {\n secondBox.y = opposite ? firstBox.y - secondBox.height - pad :\n bottom + pad;\n }\n } else if (opposite ? x < (secondBox.x + secondBox.width) : right > secondBox.x) {\n secondBox.x = opposite ? firstBox.x - secondBox.width - pad :\n right + pad;\n }\n };\n\n boxes.sort((a, b) => (showVertically ? a.y - b.y : a.x - b.x));\n i = 0;\n\n for (i = 0; i < len - 1; i++) {\n spaceOutIfOverlap(boxes[i], boxes[i + 1]);\n }\n\n if ((boxes[i].y + boxes[i].height) > extent.height ||\n (boxes[i].x + boxes[i].width) > extent.width) {\n if (showVertically) {\n boxes[i].y -= (boxes[i].height + boxes[i].y) - extent.height;\n } else {\n boxes[i].x -= (boxes[i].width + boxes[i].x) - extent.width;\n }\n for (i = len - 1; i > 0; i--) {\n spaceOutIfOverlap(boxes[i], boxes[i - 1], true);\n }\n }\n return boxes;\n}\n;\n","import { selectElement, FieldType } from 'muze-utils';\n\nimport './styles.scss';\nimport { CLASSPREFIX } from '../../enums/constants';\nimport SpawnableSideEffect from '../spawnable';\n\nexport default class Crossline extends SpawnableSideEffect {\n static defaultConfig () {\n return {\n className: `${CLASSPREFIX}-crossline-group`,\n bandClass: `${CLASSPREFIX}-crossband`,\n lineClass: `${CLASSPREFIX}-crossline`\n };\n }\n\n static formalName () {\n return 'crossline';\n }\n\n apply (selectionSet, payload) {\n let height;\n let bandWidth;\n let px;\n let width;\n const {\n className,\n bandClass,\n lineClass\n } = this.config();\n const dataModel = selectionSet.mergedEnter.model;\n const drawingInf = this.drawingContext();\n if (payload.criteria && dataModel && dataModel.isEmpty()) {\n return this;\n }\n if (payload.criteria === null || !dataModel) {\n this.hide();\n return this;\n }\n\n const dataObj = dataModel.getData();\n const sourceInf = this.firebolt.context.getSourceInfo();\n const axes = sourceInf.axes;\n const axisFields = sourceInf.fields;\n const fields = selectionSet.fields;\n const data = dataObj.data;\n const fieldsConfig = dataModel.getFieldsConfig();\n const svgContainer = drawingInf.sideEffectGroup;\n\n const elemData = [];\n fields.forEach((field) => {\n const fieldIndex = fieldsConfig[field] && fieldsConfig[field].index;\n const dataArr = data.map(d => d[fieldIndex]);\n const axisIndex = [['x', 0], ['x', 1], ['y', 0], ['y', 1]].find((arr) => {\n const fieldInst = axisFields[arr[0]][arr[1]];\n return fieldInst && fieldInst.type() === FieldType.DIMENSION &&\n fieldInst.getMembers().indexOf(field) !== -1;\n });\n if (axisIndex !== undefined && data.length) {\n const type = axisIndex[0];\n const axis = axes[type][axisIndex[1]];\n const value = dataArr[0];\n bandWidth = axis.getUnitWidth() || 0;\n px = axis.getScaleValue(value) + bandWidth / 2 + drawingInf.xOffset;\n const plotWidth = Math.max(...this.firebolt.context.layers().map(layer => layer.getPlotSpan()[type]));\n const pad = Math.max(...this.firebolt.context.layers().map(layer => layer.getPlotPadding()[type]));\n height = drawingInf.height;\n width = drawingInf.width;\n const startPx = px - plotWidth / 2 - pad / 2;\n const endPx = px + plotWidth / 2 + pad / 2;\n const dataPoint = {};\n if (type === 'y') {\n dataPoint.d = `M 0 ${startPx} L 0 ${endPx} L ${width} ${endPx} L ${width} ${startPx} Z`;\n } else {\n dataPoint.d = `M ${startPx} 0 L ${endPx} 0 L ${endPx} ${height} L ${startPx} ${height} Z`;\n }\n dataPoint.className = plotWidth ? bandClass : lineClass;\n elemData.push(dataPoint);\n }\n });\n if (elemData.length) {\n const parentGroup = this.createElement(svgContainer, 'g', [1], className);\n const elem = this.createElement(parentGroup, 'path', elemData);\n elem.attr('d', d => d.d).style('pointer-events', 'none')\n .attr('class', d => d.className);\n }\n return this;\n }\n\n hide () {\n const className = this.config().className;\n const drawingInf = this.drawingContext();\n selectElement(drawingInf.sideEffectGroup).selectAll(`.${className}`).remove();\n }\n}\n","const fadeFn = (set, context, strategy) => {\n const {\n mergedEnter,\n mergedExit,\n exitSet,\n completeSet\n } = set;\n\n if (!mergedEnter.length && !mergedExit.length) {\n context.applyInteractionStyle(completeSet, {}, strategy, false);\n } else {\n context.applyInteractionStyle(exitSet[1], {}, strategy, true);\n context.applyInteractionStyle(mergedEnter, {}, strategy, false);\n }\n};\n\nexport const strategies = {\n fade: fadeFn,\n focus: (set, context) => {\n const {\n mergedEnter,\n mergedExit,\n completeSet\n } = set;\n if (!mergedEnter.length && !mergedExit.length) {\n context.applyInteractionStyle(completeSet, {}, 'focus', false);\n } else {\n context.applyInteractionStyle(mergedExit, {}, 'focus', true);\n context.applyInteractionStyle(mergedEnter, {}, 'focus', false);\n }\n },\n highlight: (set, context) => {\n const {\n mergedEnter,\n mergedExit,\n entrySet,\n exitSet,\n completeSet\n } = set;\n if (!mergedEnter.length && !mergedExit.length) {\n context.applyInteractionStyle(completeSet, {}, 'highlight', false);\n } else {\n context.applyInteractionStyle(entrySet[1], {}, 'highlight', true);\n context.applyInteractionStyle(exitSet[1], {}, 'highlight', false);\n }\n }\n};\n","import SurrogateSideEffect from '../surrogate';\nimport { strategies } from './strategy';\n\nexport default class PlotHighlighter extends SurrogateSideEffect {\n constructor (...params) {\n super(...params);\n this._strategy = 'highlight';\n this._strategies = strategies;\n }\n\n static formalName () {\n return 'highlighter';\n }\n\n static target () {\n return 'visual-unit';\n }\n\n apply (selectionSet, payload, options = {}) {\n const strategy = this._strategies[options.strategy || this._strategy];\n\n if (selectionSet.isSourceFieldPresent !== false) {\n strategy(selectionSet, this, options.strategy || this._strategy);\n }\n\n return this;\n }\n}\n","import SurrogateSideEffect from '../surrogate';\n\nexport default class FilterEffect extends SurrogateSideEffect {\n static formalName () {\n return 'filter';\n }\n\n static target () {\n return 'visual-unit';\n }\n\n static mutates () {\n return true;\n }\n\n apply (selectionSet, payload) {\n const context = this.firebolt.context;\n const entryModel = selectionSet.mergedEnter.model;\n if (payload.criteria === null) {\n context.clearCaching().resetData();\n } else {\n context.enableCaching().data(entryModel);\n }\n return this;\n }\n}\n","import { DataModel } from 'muze-utils';\n\nimport { CLASSPREFIX } from '../../enums/constants';\nimport SpawnableSideEffect from '../spawnable';\n\nimport './styles.scss';\n\nexport default class AnchorEffect extends SpawnableSideEffect {\n constructor (...params) {\n super(...params);\n const context = this.firebolt.context;\n this._layers = this.addAnchorLayers(context);\n }\n\n static target () {\n return 'visual-unit';\n }\n\n static defaultConfig () {\n return {\n className: `${CLASSPREFIX}-anchors-group`\n };\n }\n\n static formalName () {\n return 'anchors';\n }\n\n addAnchorLayers (context) {\n const layers = [];\n this.firebolt.context.layers().forEach((layer, idx) => {\n const shouldDrawAnchors = layer.shouldDrawAnchors();\n if (shouldDrawAnchors) {\n const encodingFieldsInf = layer.encodingFieldsInf();\n const layerObj = {\n instances: context.addLayer({\n name: `${layer.alias()}-${this.constructor.formalName()}-${idx}`,\n mark: 'point',\n encoding: {\n x: encodingFieldsInf.xField,\n y: encodingFieldsInf.yField,\n color: {\n field: encodingFieldsInf.colorField\n },\n size: {\n field: encodingFieldsInf.sizeField,\n value: this.defaultSizeValue()\n }\n },\n transform: {\n type: 'identity'\n },\n transition: this.getTransitionConfig(),\n calculateDomain: false,\n source: dt => dt.select(() => false, {\n saveChild: false\n }),\n interactive: false,\n render: false\n }),\n linkedLayer: layer\n };\n\n layers.push(layerObj);\n }\n });\n return layers;\n }\n\n getTransitionConfig () {\n return {\n disabled: true\n };\n }\n\n /**\n * Returns the default area value of the anchor point.\n * @return { number } Default area value of anchor.\n */\n defaultSizeValue () {\n return 100;\n }\n\n apply (selectionSet) {\n const self = this;\n const dataModel = selectionSet.mergedEnter.model;\n if (selectionSet.isSourceFieldPresent !== false) {\n const drawingInf = this.drawingContext();\n const sideEffectGroup = drawingInf.sideEffectGroup;\n const className = `${this.config().className}`;\n const layers = this._layers;\n const parentGroup = this.createElement(sideEffectGroup, 'g', [1], `${className}-container`);\n const anchorGroups = this.createElement(parentGroup, 'g', layers);\n anchorGroups.each(function (layer) {\n const instances = layer.instances;\n const elems = self.createElement(this, 'g', instances, className);\n const linkedLayer = layer.linkedLayer;\n const [transformedData, schema] = linkedLayer.getTransformedDataFromIdentifiers(dataModel);\n const transformedDataModel = new DataModel(transformedData, schema);\n elems.each(function (d, i) {\n instances[i].data(transformedDataModel).mount(this);\n });\n });\n }\n return this;\n }\n}\n","import AnchorEffect from './anchors';\nimport { CLASSPREFIX } from '../enums/constants';\n\nexport default class PersistentAnchors extends AnchorEffect {\n static formalName () {\n return 'persistent-anchors';\n }\n\n static defaultConfig () {\n return {\n className: `${CLASSPREFIX}-persistent-anchors`\n };\n }\n\n getTransitionConfig () {\n return {\n disabled: true\n };\n }\n}\n","import AnchorEffect from './anchors';\nimport { CLASSPREFIX } from '../enums/constants';\n\nexport default class BrushAnchors extends AnchorEffect {\n static formalName () {\n return 'brush-anchors';\n }\n\n static defaultConfig () {\n return {\n className: `${CLASSPREFIX}-brush-anchors`\n };\n }\n\n getTransitionConfig () {\n return {\n disabled: true\n };\n }\n}\n","import * as BEHAVIOURS from './enums/behaviours';\n\nexport const behaviourEffectMap = {\n [BEHAVIOURS.BRUSH]: ['selectionBox', {\n name: 'highlighter',\n options: {\n strategy: 'fade'\n }\n }, 'brush-anchors'],\n [`${BEHAVIOURS.BRUSH},${BEHAVIOURS.SELECT}`]: [{\n name: 'tooltip',\n options: {\n strategy: 'showSelectedItems',\n order: 0,\n filter: context => context.config().mode === 'fragmented'\n }\n }],\n [BEHAVIOURS.HIGHLIGHT]: [{\n name: 'highlighter',\n options: {\n strategy: 'highlight'\n }\n }, 'crossline', {\n name: 'tooltip',\n options: {\n order: 9999\n }\n }, 'anchors'],\n [BEHAVIOURS.FILTER]: ['filter'],\n [BEHAVIOURS.SELECT]: [{\n name: 'highlighter',\n options: {\n strategy: 'focus'\n }\n }, 'persistent-anchors']\n};\n","export const CLASSPREFIX = 'muze';\nexport const STACK = 'stack';\nexport const GROUP = 'group';\nexport const IDENTITY = 'identity';\nexport const ANGLE = 'angle';\nexport const RADIUS = 'radius';\nexport const SIZE = 'size';\nexport const COLOR = 'color';\nexport const SHAPE = 'shape';\nexport const OUTER_RADIUS_VALUE = 'outerRadiusValue';\nexport const TEXT_ANCHOR_MIDDLE = 'middle';\nexport const ENCODING = {\n X: 'x',\n Y: 'y',\n X0: 'x0',\n Y0: 'y0'\n};\n\nexport const ASCENDING = 'asc';\n\nexport const AREA_LAYER = 'area';\nexport const ARC_LAYER = 'arc';\nexport const LINE_LAYER = 'line';\nexport const TEXT_LAYER = 'text';\nexport const POINT_LAYER = 'point';\nexport const BAR_LAYER = 'bar';\nexport const TICK_LAYER = 'tick';\nexport const SIMPLE_LAYER = 'simple';\nexport const BASE_LAYER = 'base';\n","import { CLASSPREFIX, STACK } from '../../enums/constants';\n\nexport const defaultConfig = {\n classPrefix: CLASSPREFIX,\n defClassName: 'layer-area',\n className: '',\n interpolate: 'linear',\n transform: {\n type: STACK\n },\n interaction: {\n\n },\n nearestPointThreshold: 10,\n encoding: {\n color: {},\n x: {},\n y: {},\n y0: {},\n strokeOpacity: {\n value: 1\n }\n },\n transition: {\n effect: 'cubic',\n duration: 1000\n },\n connectNullData: false\n};\n","import { ERROR_MSG } from 'muze-utils';\n\n/**\n * This is an interface class which any new layer class has to extend.\n *\n * @example\n * class BarLayer extends BaseLayer {\n * update (params) {\n * // super.update(params);\n * // Update the bar layer\n * }\n * }\n * @class\n */\nexport default class SimpleLayer {\n\n formalName () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Sets or gets the dependencies.\n * @param {Object} dependencies Dependencies needed by layer\n * @return {BaseLayer} Instance of base layer.\n */\n dependencies () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Returns the config of the layer\n *\n * @param {Object} config Configuration of layer\n * @return {Object} configuration of layer\n */\n config () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Acts as a getter or setter function\n * When setter\n * Returns the datamodel of the layer\n * @param { DataModel } dataModel instance of DataModel\n * @return { DataModel } DataModel instance of the layer\n */\n data () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Returns a serialized schema of the layer\n * @return {Object} Serialized schema\n */\n serialize () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Returns the unique identifier of this layer\n * @return {string} id of the layer\n */\n id () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n /*\n * This method resolves the x, y, x0 and y0 values from the transformed data.\n * It also checks the type of transformed data for example, if it is a stacked data\n * then it fetches the y and y0 values from the stacked data.\n * @param {Array.} transformedData transformed data\n * @param {Object} fieldMap field definitions\n * @param {string} transformType type of transformed data - stack, group or identity.\n * @return {Array.} Normalized data\n * @private\n */\n normalizeTransformedData () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Gets the transform method from transform factory based on type of transform. It then calls the\n * transform method with the data and passes the configuration parameters of transform such as\n * groupBy, value field, etc.\n *\n * @param {DataModel} dataModel Instance of dataModel\n * @param {Object} config configuration for transforming data\n * @return {Array.} Transformed data.\n * @private\n */\n getTransformedData () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Calculates the domain from the data.\n * It checks the type of field and calculates the domain based on that. For example, if it\n * is a quantitative or temporal field, then it calculates the min and max from the data or\n * if it is a nominal field then it gets all the values from the data of that field.\n * @param {Array} data DataArray\n * @return {Array} Domain values array.\n */\n _calculateDomainFromData () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Returns the domain for the axis.\n *\n * @param {string} encodingType type of encoding x, y, color, etc.\n * @return {Object} Axis domains\n */\n getDomain () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Abstract method for getting nearest point\n * @return {BaseLayer} Instance of base layer\n */\n getNearestPoint () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Abstract method for highlighting points\n * @return {BaseLayer} Instance of base layer\n */\n highlightPoint () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Abstract method for deselecting points\n * @return {BaseLayer} Instance of base layer\n */\n dehighlightPoint () {\n return this;\n }\n\n linkLayerStore () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Sets the container element for the layer to be renderered.\n * @param {SVGElement} mountPoint SVG element or group element.\n */\n mount () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n render () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n}\n","export const DATA = 'data';\nexport const CONFIG = 'config';\nexport const MEASUREMENT = 'measurement';\nexport const AXES = 'axes';\nexport const NORMALIZED_DATA = 'normalizedData';\nexport const TRANSFORMED_DATA = 'transformedData';\nexport const DOMAIN = 'domain';\nexport const MOUNT = 'mount';\nexport const FIELDMAP = 'fieldMap';\nexport const DATA_UPDATED = 'dataUpdated';\n","/**\n * @module Axis\n * This file declares a class that is used to render an axis to add meaning to\n * plots.\n */\nimport { Symbols } from 'muze-utils';\nimport * as AxisOrientation from '../enums/axis-orientation';\n\n/**\n * @module Axis\n * This file exports constants that are used to reference axis orientations\n * in a consistent manner.\n */\nexport const BOTTOM = 'bottom';\nexport const TOP = 'top';\nexport const LEFT = 'left';\nexport const RIGHT = 'right';\n\n/**\n * This object is used to associate the axis orientation with the d3 class\n * used to represent that axis.\n */\nexport const axisOrientationMap = {\n [AxisOrientation.LEFT]: Symbols.axisLeft,\n [AxisOrientation.BOTTOM]: Symbols.axisBottom,\n [AxisOrientation.RIGHT]: Symbols.axisRight,\n [AxisOrientation.TOP]: Symbols.axisTop\n};\n","/**\n * @module axis\n * This file exports constants used to reference scale type\n * consistently throughout the project.\n */\nexport const LINEAR = 'linear';\nexport const BAND = 'band';\nexport const TIME = 'temporal';\nexport const COLOR = 'color';\nexport const ORDINAL = 'ordinal';\nexport const QUANTIZE = 'quantize';\nexport const QUANTILE = 'quantile';\nexport const LOG = 'log';\nexport const POW = 'pow';\nexport const IDENTITY = 'identity';\nexport const SEQUENTIAL = 'sequential';\nexport const THRESHOLD = 'threshold';\n","export const CLASSPREFIX = 'muze';\n\nexport const CONTINOUS = 'continous';\nexport const DISCRETE = 'discrete';\nexport const SEQUENTIAL = 'sequential';\nexport const ORDINAL = 'ordinal';\nexport const LINEAR = 'linear';\nexport const THRESHOLD = 'threshold';\nexport const QUANTIZE = 'quantize';\nexport const QUANTILE = 'quantile';\n\nexport const COLOR = 'color';\nexport const SHAPE = 'shape';\nexport const SIZE = 'size';\n\nexport const DOMAIN = 'domain';\nexport const BAND = 'band';\nexport const HIDDEN = 'hidden';\nexport const NUMBER = 'number';\nexport const BOTTOM = 'bottom';\nexport const TOP = 'top';\n\nexport const RGB = 'rgb';\nexport const HEX = 'hex';\nexport const HSLA = 'hsla';\nexport const HSL = 'hsl';\n\n","import { scales, colorSchemes } from 'muze-utils';\n\nimport {\n SEQUENTIAL,\n ORDINAL,\n LINEAR,\n CONTINOUS,\n THRESHOLD,\n QUANTIZE\n} from './enums/constants';\n\nimport * as ScaleType from './enums/scale-type';\n\nconst {\n scaleLinear,\n scaleThreshold,\n scaleLog,\n scalePow,\n scaleIdentity,\n scaleOrdinal,\n scaleSequential,\n scaleQuantize,\n scaleQuantile,\n schemeCategory10,\n schemeCategory20,\n schemeCategory20b,\n scaleBand,\n scaleTime\n} = scales;\nexport const scaleMap = {\n [ScaleType.LINEAR]: scaleLinear,\n [ScaleType.BAND]: scaleBand,\n [ScaleType.QUANTIZE]: scaleQuantize,\n [ScaleType.QUANTILE]: scaleQuantile,\n [ScaleType.THRESHOLD]: scaleThreshold,\n [ScaleType.SEQUENTIAL]: scaleSequential,\n [ScaleType.LOG]: scaleLog,\n [ScaleType.POW]: scalePow,\n [ScaleType.IDENTITY]: scaleIdentity,\n [ScaleType.TIME]: scaleTime,\n [ScaleType.COLOR]: scaleLinear,\n [ScaleType.ORDINAL]: scaleOrdinal\n};\nexport const SCHEMES = {\n SCHEME1: schemeCategory10,\n SCHEME2: schemeCategory20,\n SCHEME3: schemeCategory20b\n};\n\n/**\n * Accepts a scheme in a string format and returns the scale from d3-scale-chromatic\n *\n * @export\n * @param {string} scheme a string representing the kind of scheme for the color axis\n * @return {Object} The corresponding scale from a scheme type from d3 chromatic scale\n */\nexport function getScheme (scheme) {\n if (scheme[0] === 'i') {\n return scaleSequential(colorSchemes[scheme]);\n }\n return scaleOrdinal(colorSchemes[scheme]);\n}\n\n/**\n *\n *\n * @export\n * @param {*} scheme\n * @returns\n */\nexport function getSchemeType (scheme) {\n let schemeType = '';\n if (scheme && typeof (scheme) === 'string') {\n schemeType = scheme[0] === 'i' ? SEQUENTIAL : ORDINAL;\n } else {\n schemeType = ORDINAL;\n }\n return schemeType;\n}\n\n/**\n * This function is used to create a scale that is assigned to\n * an instance of axis.\n *\n * @export\n * @param {Object} params the input parameters to create a Scale object\n * @param {string} params.type the type of scale\n * @param {Array} params.range the range of scale\n * @return {Object} instance of scale\n */\nexport function createScale (params) {\n if (!params.type || !scaleMap[params.type]) {\n throw new Error(`${params.type} is not a valid scale type`);\n }\n if (!Array.isArray(params.range)) {\n throw new Error('range parameter must be an array');\n }\n let scaleFactory = null;\n const range = params.range;\n // @todo: do it using scale decorator\n if (params.type === LINEAR && params.interpolator) {\n scaleFactory = scaleMap[params.interpolator];\n if (params.interpolator === ScaleType.POW) {\n return scaleFactory().range(range).exponent(params.exponent);\n } else if (params.interpolator === ScaleType.LOG) {\n return scaleFactory().range(range).base([params.base]);\n }\n } else {\n scaleFactory = scaleMap[params.type];\n }\n\n if (params.type === QUANTIZE) {\n scaleFactory().nice();\n }\n return scaleFactory().range(range);\n}\n\n/**\n * This method is used to update the range of a scale\n * so that the core module can remain agnostic of the d3\n * scale api.\n *\n * @export\n * @param {Scale} scale Instance of d3 Scale.\n * @param {Array} range new range of the scale.\n * @return {Scale} Updated scale.\n */\nexport function updateScaleRange (scale, range) {\n return scale.range(range);\n}\n\n/**\n *\n *\n * @export\n * @param {*} domainType\n * @param {*} rangeType\n * @param {*} steps\n * @returns\n */\nexport function getScaleType (domainType, rangeType, steps) {\n if (rangeType === CONTINOUS) {\n return LINEAR;\n }\n if (domainType === CONTINOUS) {\n if (steps instanceof Array) {\n return THRESHOLD;\n }\n return QUANTIZE;\n }\n return ORDINAL;\n}\n","import { getUniqueId } from 'muze-utils';\nimport { CLASSPREFIX } from '../enums/constants';\n\n/**\n *\n *\n */\nexport const defaultConfig = {\n id: getUniqueId(),\n axisName: {\n defClassName: 'axis-name'\n },\n axisNamePadding: 12,\n base: 10,\n classPrefix: CLASSPREFIX,\n className: `${CLASSPREFIX}-axis`,\n exponent: 1,\n interpolator: 'linear',\n fixedBaseline: true,\n labels: {\n rotation: 0,\n smartTicks: false\n },\n orientation: 'left',\n maxHeight: 50, // @todo: height and width wont be hardcoded\n maxWidth: 40,\n numberFormat: val => val,\n padding: 0.3,\n nice: true,\n numberOfTicks: 10,\n rotate: false,\n show: true,\n showAxisName: true,\n showInnerTicks: null,\n showOuterTicks: null,\n style: {},\n type: 'linear',\n tickFormat: null,\n tickValues: null,\n xOffset: undefined,\n yOffset: undefined\n};\n\n","/**\n * This file exports functionality that is used to render axis.\n */\nimport { selectElement, makeElement, angleToRadian } from 'muze-utils';\nimport * as AxisOrientation from './enums/axis-orientation';\nimport { LINEAR, HIDDEN, BOTTOM, TOP } from './enums/constants';\n\n/**\n *\n *\n * @param {*} instance\n * @param {*} container\n * @param {*} labelManager\n * @param {*} config\n */\nconst rotateAxis = (instance, tickText, labelManager, config) => {\n const axis = instance.axis();\n const scale = instance.scale();\n const {\n orientation,\n labels,\n fixedBaseline,\n type\n } = config;\n let { rotation } = labels;\n\n const tickSize = instance.getTickSize();\n\n tickText.each(function (datum, index) {\n let yShift;\n let xShift;\n const tickFormatter = axis.tickFormat() ? axis.tickFormat : scale.tickFormat;\n const temp = tickFormatter ? tickFormatter()(datum) : datum;\n\n datum = temp.toString();\n\n const tickLabelDim = labelManager.getOriSize(datum);\n const width = tickLabelDim.width * 0.5;\n const height = tickLabelDim.height * 0.5;\n\n if (rotation < 0) {\n rotation = 360 + rotation;\n }\n\n const quadrant = 4 - Math.floor(rotation / 90);\n const rotationNormalizer = ((quadrant % 2 === 0) ? rotation : 180 * Math.ceil(rotation / 180) - rotation) % 180;\n\n yShift = Math.sqrt(height ** 2 + width ** 2) * Math.sin(angleToRadian(rotationNormalizer));\n\n if ((quadrant === 3 || quadrant === 2) && !(rotationNormalizer > 67.5 && rotationNormalizer <= 90)) {\n yShift += height * 2;\n }\n xShift = width;\n\n if (rotation === 90) {\n xShift = height;\n } else if (rotation === 270) {\n xShift = -height;\n } else {\n xShift = 0;\n }\n\n if (orientation === AxisOrientation.TOP) {\n xShift = (index === 0 && fixedBaseline && type === LINEAR) ? xShift + xShift / 2 : xShift;\n selectElement(this)\n .attr('transform', `translate(${-xShift + tickSize} \n ${-yShift - tickSize}) rotate(${rotation})`);\n } else {\n xShift = (index === 0 && fixedBaseline && type === LINEAR) ? xShift - xShift / 2 : xShift;\n selectElement(this)\n .attr('transform', `translate(${xShift - tickSize} \n ${yShift + tickSize}) rotate(${rotation})`);\n }\n });\n return tickText;\n};\n\n/**\n *\n *\n * @param {*} tickText\n * @param {*} axisInstance\n */\nconst changeTickOrientation = (selectContainer, axisInstance, tickSize) => {\n const {\n _smartTicks\n } = axisInstance;\n const config = axisInstance.config();\n const labelManager = axisInstance.dependencies().labelManager;\n const {\n labels,\n orientation\n } = config;\n const {\n rotation,\n smartTicks: isSmartTicks\n } = labels;\n\n const tickText = selectContainer.selectAll('.tick text');\n tickText.selectAll('tspan').remove();\n\n // rotate labels if not enough space is available\n if (rotation !== 0 && isSmartTicks === false && (orientation === TOP || orientation === BOTTOM)) {\n rotateAxis(axisInstance, tickText, labelManager, config);\n } else if (rotation === 0 && isSmartTicks === false) {\n tickText.attr('transform', '');\n } else {\n tickText.attr('y', 0)\n .attr('x', 0)\n .text('');\n const tspan = makeElement(tickText, 'tspan', (d, i) => _smartTicks[i].lines, 'smart-text');\n tspan.attr('dy', '0')\n .style('opacity', '0')\n .transition()\n .duration(1000)\n .attr('dy', (d, i) => {\n if (orientation === BOTTOM || i !== 0) {\n return _smartTicks[i].oriTextHeight;\n }\n return -_smartTicks[i].oriTextHeight * (_smartTicks[i].lines.length - 1) - tickSize;\n })\n .style('opacity', 1)\n .attr('x', 0)\n .text(e => e);\n }\n\n return tickText;\n};\n\nconst setFixedBaseline = (axisInstance) => {\n const {\n fixedBaseline\n } = axisInstance.config();\n if (fixedBaseline) {\n axisInstance.setFixedBaseline();\n }\n};\n\n/**\n *\n *\n * @param {*} textNode\n * @param {*} orientation\n * @param {*} measures\n */\nconst setAxisNamePos = (textNode, orientation, measures) => {\n const {\n axisNameHeight,\n yOffset,\n labelOffset,\n availableSpace\n } = measures;\n switch (orientation) {\n case AxisOrientation.LEFT:\n textNode.attr('transform',\n `translate(${-(availableSpace.width - axisNameHeight)},${yOffset + labelOffset})rotate(-90)`);\n break;\n case AxisOrientation.RIGHT:\n textNode.attr('transform',\n `translate(${(availableSpace.width - axisNameHeight)},${yOffset + labelOffset})rotate(90)`);\n break;\n case AxisOrientation.TOP:\n textNode.attr('transform',\n `translate(${availableSpace.width / 2},${-availableSpace.height + axisNameHeight})`);\n break;\n case AxisOrientation.BOTTOM:\n textNode.attr('transform',\n `translate(${availableSpace.width / 2},${availableSpace.height - axisNameHeight / 2})`);\n break;\n default:\n }\n return textNode;\n};\n\n/**\n * This method is used to render the axis inside an\n * svg container.\n *\n * @export\n * @param {Object} axisInstance the nput object required to render axis\n * @param {string} axisInstance.orientation the orientation of axis\n * @param {Object} axisInstance.scale instance of d3 scale\n * @param {SVGElement} axisInstance.container the container in which to render\n */\nexport function renderAxis (axisInstance) {\n const config = axisInstance.config();\n const labelManager = axisInstance.dependencies().labelManager;\n const mount = axisInstance.mount();\n const range = axisInstance.range();\n const axis = axisInstance.axis();\n const scale = axisInstance.scale();\n const {\n _axisNameStyle,\n _tickLabelStyle,\n formatter,\n tickValues\n } = axisInstance;\n const {\n orientation,\n name,\n labels,\n xOffset,\n yOffset,\n axisNamePadding,\n className,\n showAxisName,\n show,\n id,\n interpolator,\n classPrefix\n } = config;\n\n if (!show) {\n return;\n }\n\n const tickSize = axisInstance.getTickSize();\n\n const selectContainer = makeElement(selectElement(mount), 'g', [axisInstance], `${className}`, {},\n key => key.config().id);\n\n // Set style for tick labels\n labelManager.setStyle(_tickLabelStyle);\n\n // @to-do: Need to write a configuration override using decorator pattern\n if (interpolator === 'linear') {\n // Set ticks for the axis\n axisInstance.setTickValues();\n }\n\n const labelFunc = scale.ticks || scale.quantile || scale.domain;\n\n formatter && axis.tickFormat(formatter(tickValues || axis.tickValues() || labelFunc()));\n\n // Get range(length of range)\n const availableSpace = Math.abs(range[0] - range[1]);\n\n // Get width and height taken by axis labels\n const labelProps = axisInstance.axisDimensions().tickLabelDim;\n\n // Draw axis ticks\n selectContainer.attr('transform', `translate(${xOffset},${yOffset})`);\n setFixedBaseline(axisInstance);\n if (labels.smartTicks === false) {\n selectContainer.transition()\n .duration(1000).call(axis);\n } else {\n selectContainer.call(axis);\n }\n selectContainer.selectAll('.tick').classed(`${classPrefix}-ticks`, true);\n selectContainer.selectAll('.tick line').classed(`${classPrefix}-tick-lines`, true);\n\n // Set classes for ticks\n const tickText = selectContainer.selectAll('.tick text');\n tickText.classed(`${classPrefix}-ticks`, true)\n .classed(`${classPrefix}-ticks-${id}`, true);\n changeTickOrientation(selectContainer, axisInstance, tickSize);\n\n // Create axis name\n const textNode = makeElement(selectContainer, 'text', [name], `${classPrefix}-axis-name`)\n .attr('text-anchor', 'middle')\n .classed(`${classPrefix}-axis-name-${id}`, true)\n .text(d => d);\n\n // Hide axis name if show is off\n textNode.classed(HIDDEN, !showAxisName);\n\n // render labels based on orientation of axis\n const labelOffset = availableSpace / 2;\n\n // Set style for axis name\n labelManager.setStyle(_axisNameStyle);\n const axisNameSpace = labelManager.getOriSize(name);\n const measures = {\n labelProps,\n tickSize,\n axisNamePadding,\n axisNameHeight: axisNameSpace.height,\n axisNameWidth: axisNameSpace.width,\n yOffset,\n xOffset,\n labelOffset,\n availableSpace: axisInstance.availableSpace()\n };\n // Set position for axis name\n setAxisNamePos(textNode, orientation, measures);\n}\n","import { TOP, LEFT, BOTTOM } from '../enums/axis-orientation';\nimport { LOG } from '../enums/scale-type';\n\nexport const getNumberOfTicks = (availableSpace, labelDim, axis, axisInstance) => {\n const ticks = axis.scale().ticks();\n const { numberOfTicks } = axisInstance.config();\n const tickLength = ticks.length;\n let numberOfValues = tickLength;\n\n if (tickLength * (labelDim * 1.5) > availableSpace) {\n numberOfValues = Math.floor(availableSpace / (labelDim * 1.5));\n }\n\n numberOfValues = Math.min(numberOfTicks, Math.max(1, numberOfValues));\n return axis.scale().ticks(numberOfValues);\n};\n\nexport const sanitizeDomain = (domain, context) => {\n const interpolator = context.config().interpolator;\n // @todo: Get from scale decorator\n if (interpolator === LOG && domain[0] >= 0) {\n return [Math.max(1, domain[0]), Math.max(1, domain[1])];\n }\n return domain;\n};\n\nexport const getTickFormatter = (tickFormat, numberFormat) => {\n if (tickFormat) {\n return ticks => (val, i) => tickFormat(numberFormat(val), i, ticks);\n }\n return () => val => numberFormat(val);\n};\n\n/**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\nexport const getTickLabelInfo = (context) => {\n let largestLabel = '';\n let labelProps;\n let smartTick = {};\n let axisTickLabels;\n const scale = context.scale();\n const allLabelLengths = [];\n const { tickFormat, tickValues, numberFormat } = context.config();\n const labelFunc = scale.ticks || scale.quantile || scale.domain;\n // set the style on the shared label manager instance\n const { labelManager } = context.dependencies();\n\n labelManager.setStyle(context._tickLabelStyle);\n // get the values along the domain\n\n axisTickLabels = tickValues || labelFunc();\n // Get the tick labels\n axisTickLabels = axisTickLabels.map((originalLabel, i) => {\n const formattedLabel = numberFormat(originalLabel);\n\n // get formats of tick if any\n const label = tickFormat ? tickFormat(formattedLabel, i, axisTickLabels) : (scale.tickFormat ?\n numberFormat(scale.tickFormat()(originalLabel)) : formattedLabel);\n\n // convert to string for quant values\n const temp = label.toString();\n // Get spaces for all labels\n allLabelLengths.push(labelManager.getOriSize(temp));\n // Getting largest label\n if (temp.length > largestLabel.length) {\n largestLabel = temp;\n smartTick = context.smartTicks() ? context.smartTicks()[i] : {};\n labelProps = allLabelLengths[i];\n }\n return label;\n });\n\n labelProps = labelManager.getOriSize(largestLabel);\n\n return { largestLabel, largestLabelDim: labelProps, axisTickLabels, allLabelLengths, smartTick };\n};\n\n/**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\nexport const computeAxisDimensions = (context) => {\n let tickLabelDim = {};\n const {\n name,\n labels,\n tickValues\n } = context.config();\n const angle = ((labels.smartTicks) ? 0 : labels.rotation) * Math.PI / 180;\n const { labelManager } = context.dependencies();\n const {\n largestLabelDim,\n axisTickLabels,\n smartTick\n } = getTickLabelInfo(context);\n const { height: labelHeight, width: labelWidth } = largestLabelDim;\n // get the domain of axis\n const domain = context.domain();\n\n if (domain.length === 0) {\n return null;\n }\n if (context._rotationLock === false) {\n context.setRotationConfig(tickValues || axisTickLabels, largestLabelDim.width);\n context._rotationLock = false;\n }\n if (labels.smartTicks) {\n tickLabelDim = smartTick;\n } else {\n tickLabelDim = {\n width: Math.abs(labelHeight * Math.sin(angle)) + Math.abs(labelWidth * Math.cos(angle)),\n height: Math.abs(labelWidth * Math.sin(angle)) + Math.abs(labelHeight * Math.cos(angle))\n };\n }\n\n labelManager.setStyle(context._axisNameStyle);\n return {\n tickSize: context.getTickSize(),\n tickLabelDim,\n axisLabelDim: labelManager.getOriSize(name),\n largestLabelDim,\n axisTickLabels\n };\n};\n\n/**\n*\n*\n* @memberof SimpleAxis\n*/\nexport const setOffset = (context) => {\n let x = 0;\n let y = 0;\n const logicalSpace = context.logicalSpace();\n const config = context.config();\n const {\n orientation,\n xOffset,\n yOffset\n } = config;\n if (orientation === LEFT) {\n x = xOffset === undefined ? logicalSpace.width : xOffset;\n }\n if (orientation === TOP) {\n y = yOffset === undefined ? logicalSpace.height : yOffset;\n }\n context.config({ xOffset: x, yOffset: y });\n};\n\n/**\n *\n *\n * @param {*} timeDiff\n * @param {*} range\n * @param {*} domain\n * @returns\n */\nconst getAxisOffset = (timeDiff, range, domain) => {\n const pvr = Math.abs(range[1] - range[0]) / (domain[1] - domain[0]);\n const width = (pvr * timeDiff);\n const avWidth = (range[1] - range[0]);\n const bars = avWidth / width;\n const barWidth = avWidth / (bars + 1);\n const diff = avWidth - barWidth * bars;\n\n return diff / 2;\n};\n\nexport const adjustRange = (minDiff, range, domain, orientation) => {\n const diff = getAxisOffset(minDiff, range, domain);\n\n if (orientation === TOP || orientation === BOTTOM) {\n range[0] += diff;\n range[1] -= diff;\n } else {\n range[0] -= diff;\n range[1] += diff;\n }\n return range;\n};\n\n /**\n * Listener attached to the axis on change of parameters.\n *\n * @param {Function} callback to be excuted on change of domain range etc\n * @memberof SimpleAxis\n */\nexport const registerChangeListeners = (context) => {\n const store = context.store();\n\n store.model.next(['domain', 'range', 'mount', 'config'], (...params) => {\n context.render();\n context._domainLock = false;\n context._eventList.forEach((e) => {\n e.action instanceof Function && e.action(...params);\n });\n }, true);\n return context;\n};\n\n/**\n *\n *\n * @param {*} axisDimensions\n * @param {*} config\n * @param {*} range\n * @returns\n */\nexport const getHorizontalAxisSpace = (context, axisDimensions, config, range) => {\n let width;\n let height;\n const {\n tickSize,\n tickLabelDim,\n axisLabelDim\n } = axisDimensions;\n const {\n axisNamePadding,\n showAxisName,\n tickValues\n } = config;\n const domain = context.domain();\n const { height: axisDimHeight } = axisLabelDim;\n const { height: tickDimHeight, width: tickDimWidth } = tickLabelDim;\n\n width = range && range.length ? range[1] - range[0] : 0;\n\n height = 0;\n if (tickValues) {\n const minTickDiff = context.getMinTickDifference();\n const [min, max] = [Math.min(...tickValues, ...domain), Math.max(...tickValues, ...domain)];\n\n width = ((max - min) / Math.abs(minTickDiff)) * (tickDimWidth + context._minTickDistance.width);\n }\n if (!width || width === 0) {\n height = Math.max(tickDimWidth, tickDimHeight);\n } else {\n height = tickDimHeight;\n }\n height += (showAxisName ? (axisDimHeight + axisNamePadding) : 0) + tickSize;\n return {\n width,\n height\n };\n};\n\n/**\n *\n *\n * @param {*} axisDimensions\n * @param {*} config\n * @param {*} range\n * @returns\n */\nexport const getVerticalAxisSpace = (context, axisDimensions, config) => {\n let height;\n let width;\n const {\n tickSize,\n tickLabelDim,\n axisLabelDim\n } = axisDimensions;\n const {\n axisNamePadding,\n showAxisName,\n tickValues\n } = config;\n const domain = context.domain();\n const { height: axisDimHeight } = axisLabelDim;\n const { height: tickDimHeight, width: tickDimWidth } = tickLabelDim;\n\n height = 0;\n width = tickDimWidth;\n if (tickValues) {\n const minTickDiff = context.getMinTickDifference();\n const [min, max] = [Math.min(...tickValues, ...domain), Math.max(...tickValues, ...domain)];\n\n height = ((max - min) / Math.abs(minTickDiff)) * (tickDimHeight);\n }\n width += (showAxisName ? axisDimHeight : 0) + tickSize + axisNamePadding;\n\n return {\n height,\n width\n };\n};\n\n /**\n * Calculates the logical space of the axis\n * @return {Object} Width and height occupied by the axis.\n */\nexport const calculateBandSpace = (context) => {\n const range = context.range();\n const config = context.config();\n const {\n orientation,\n show\n } = config;\n const axisDimensions = context.getAxisDimensions();\n const {\n largestLabelDim,\n axisTickLabels\n } = axisDimensions;\n const { height: largestDimHeight, width: largestDimWidth } = largestLabelDim;\n\n if (orientation === TOP || orientation === BOTTOM) {\n let { width, height } = getHorizontalAxisSpace(context, axisDimensions, config, range);\n if (!width || width === 0) {\n width = axisTickLabels.length * (Math.min(largestDimWidth + context._minTickDistance.width,\n largestDimHeight + context._minTickDistance.width));\n }\n if (show === false) {\n height = 0;\n }\n return {\n width,\n height\n };\n }\n\n let { width, height } = getVerticalAxisSpace(context, axisDimensions, config, range);\n\n if (!height || height === 0) {\n height = axisTickLabels.length * (largestDimHeight + largestDimHeight / 2) + largestDimHeight;\n }\n if (show === false) {\n width = 0;\n }\n return {\n width,\n height\n };\n};\n\n/**\n * Calculates the logical space of the axis\n * @return {Object} Width and height occupied by the axis.\n */\nexport const calculateContinousSpace = (context) => {\n const range = context.range();\n const config = context.config();\n const axisDimensions = context.getAxisDimensions();\n\n const {\n orientation,\n show,\n showAxisName\n } = config;\n const {\n axisLabelDim\n } = axisDimensions;\n\n if (show === false) {\n return {\n width: 0,\n height: 0\n };\n }\n\n const { width: axisDimWidth } = axisLabelDim;\n\n if (orientation === TOP || orientation === BOTTOM) {\n const { width, height } = getHorizontalAxisSpace(context, axisDimensions, config);\n const axisWidth = Math.max(width, axisDimWidth);\n\n return {\n width: axisWidth,\n height\n };\n }\n\n const { width, height } = getVerticalAxisSpace(context, axisDimensions, config, range);\n\n const effHeight = Math.max(height, showAxisName ? axisDimWidth : 0);\n\n return {\n width,\n height: effHeight\n };\n};\n\n","import { mergeRecursive } from 'muze-utils';\n\nexport const PROPS = {\n availableSpace: {},\n axisDimensions: {},\n config: {\n sanitization: (context, value) => {\n if (value.labels && value.labels.rotation) {\n context._rotationLock = true;\n }\n value = mergeRecursive(context._config || {}, value);\n value.axisNamePadding = Math.max(value.axisNamePadding, 0);\n context.axis(context.createAxis(value));\n context.store().commit('config', value);\n return value;\n }\n },\n logicalSpace: {},\n mount: {\n sanitization: (context, value) => {\n context.store().commit('mount', value);\n return value;\n }\n },\n range: {\n sanitization: (context, value) => {\n context.scale().range(value);\n context.logicalSpace(null);\n context.store().commit('range', value);\n return value;\n }\n },\n\n smartTicks: {},\n store: {},\n tickSize: {}\n};\n","import {\n Store,\n mergeRecursive,\n getSmartComputedStyle,\n selectElement,\n generateGetterSetters,\n getUniqueId\n} from 'muze-utils';\nimport { createScale } from '../scale-creator';\nimport { axisOrientationMap, BOTTOM, TOP } from '../enums/axis-orientation';\nimport { defaultConfig } from './default-config';\nimport { renderAxis } from '../axis-renderer';\nimport { DOMAIN, BAND } from '../enums/constants';\nimport {\n computeAxisDimensions,\n setOffset,\n registerChangeListeners,\n calculateContinousSpace\n} from './helper';\nimport { PROPS } from './props';\n\nexport default class SimpleAxis {\n\n /**\n * Creates an instance of SimpleAxis.\n * @memberof SimpleAxis\n */\n constructor (config, dependencies) {\n this._id = getUniqueId();\n\n this._dependencies = dependencies;\n this._mount = null;\n this._range = [];\n this._domain = [];\n this._domainLock = false;\n this._rotationLock = false;\n this._axisDimensions = {};\n this._eventList = [];\n\n const defCon = mergeRecursive({}, this.constructor.defaultConfig());\n const simpleConfig = mergeRecursive(defCon, config);\n\n const bodyElem = selectElement('body');\n const classPrefix = simpleConfig.classPrefix;\n this._tickLabelStyle = getSmartComputedStyle(bodyElem, `${classPrefix}-ticks`);\n this._axisNameStyle = getSmartComputedStyle(bodyElem, `${classPrefix}-axis-name`);\n dependencies.labelManager.setStyle(this._tickLabelStyle);\n this._minTickDistance = dependencies.labelManager.getOriSize('ww');\n\n generateGetterSetters(this, PROPS);\n this.store(new Store({\n domain: this.domain(),\n range: this.range(),\n config: simpleConfig,\n mount: this.mount()\n }));\n this.config(simpleConfig);\n\n this._scale = this.createScale(this._config);\n this._axis = this.createAxis(this._config);\n\n registerChangeListeners(this);\n }\n\n /**\n * Returns the default configuration of simple axis\n * @return {Object} default configurations\n */\n static defaultConfig () {\n return defaultConfig;\n }\n\n /**\n * Sets a fixed baseline for the first ticks so that they can render effectively within\n * the given area\n *\n * @param {*} tickText\n * @param {*} config\n * @param {*} labelManager\n */\n setFixedBaseline () {\n return this;\n }\n\n /**\n *\n *\n * @readonly\n * @memberof SimpleAxis\n */\n scale (...params) {\n if (params.length) {\n this._scale = params[0];\n return this;\n }\n return this._scale;\n }\n\n /**\n *\n *\n * @readonly\n * @memberof SimpleAxis\n */\n axis (...params) {\n if (params.length) {\n this._axis = params[0];\n return this;\n }\n return this._axis;\n }\n\n /**\n *\n *\n * @param {*} d\n * @returns\n * @memberof SimpleAxis\n */\n domain (...domain) {\n if (domain.length) {\n this.scale().domain(domain[0]);\n this._domain = this.scale().domain();\n this.smartTicks(this.setTickConfig());\n this.store().commit(DOMAIN, this._domain);\n this.logicalSpace(null);\n return this;\n }\n return this._domain;\n }\n\n /**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\n dependencies () {\n return this._dependencies;\n }\n\n /**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\n createScale (config) {\n const {\n base,\n padding,\n interpolator,\n exponent\n } = config;\n const range = this.range();\n const scale = createScale({\n padding,\n interpolator,\n exponent,\n base,\n range,\n type: this.constructor.type()\n });\n\n return scale;\n }\n\n getTickFormatter (tickFormat, numberFormat) {\n if (tickFormat) {\n return ticks => (val, i) => tickFormat(numberFormat(val), i, ticks);\n }\n return () => val => numberFormat(val);\n }\n\n /**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\n createAxis (config) {\n const {\n tickFormat,\n numberFormat,\n orientation\n } = config;\n const axisClass = axisOrientationMap[orientation];\n\n if (axisClass) {\n const axis = axisClass(this.scale());\n this.formatter = this.getTickFormatter(tickFormat, numberFormat);\n\n return axis;\n }\n return null;\n }\n\n /**\n *\n *\n * @memberof SimpleAxis\n */\n setTickConfig () {\n return this;\n }\n\n /**\n *\n *\n * @param {*} axisTickLabels\n * @param {*} labelWidth\n * @returns\n * @memberof SimpleAxis\n */\n setRotationConfig (axisTickLabels, labelWidth) {\n const { orientation } = this.config();\n\n if (orientation === TOP || orientation === BOTTOM) {\n const range = this.range();\n const length = Math.abs(range[0] - range[1]);\n this.config({ labels: { rotation: 0 } });\n if (length > 0 && axisTickLabels.length * (labelWidth + this._minTickDistance.width) > length) {\n this.config({ labels: { rotation: -90 } });\n }\n }\n return this;\n }\n\n /**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\n adjustRange () {\n return this;\n }\n\n getScaleValue (domainVal) {\n if (domainVal === null || domainVal === undefined) {\n return undefined;\n }\n return this.scale()(domainVal);\n }\n\n /**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\n getTickSize () {\n return this.axis().tickSize();\n }\n\n /**\n * Gets the space occupied by the parts of an axis\n *\n * @return {Object} object with details about sizes of the axis.\n * @memberof SimpleAxis\n */\n getAxisDimensions () {\n this.axisDimensions(computeAxisDimensions(this));\n return this.axisDimensions();\n }\n\n /**\n * Gets the space occupied by the axis\n *\n * @return {Object} object with details about size of the axis.\n * @memberof SimpleAxis\n */\n getLogicalSpace () {\n if (!this.logicalSpace()) {\n this.logicalSpace(calculateContinousSpace(this));\n setOffset(this);\n this.logicalSpace();\n }\n return this.logicalSpace();\n }\n\n /**\n * Returns the value from the domain when given a value from the range.\n * @param {number} value Value from the range.\n * @return {number} Value\n */\n invert (...value) {\n const values = value.map(d => this.scale().invert(d)) || [];\n return value.length === 1 ? values[0] : values;\n }\n\n /**\n * Gets the nearest range value from the given range values.\n * @param {number} v1 Start range value\n * @param {number} v2 End range value\n * @return {Array} range values\n */\n getNearestRange (v1, v2) {\n let p1;\n let p2;\n let extent;\n const {\n type\n } = this.config();\n const scale = this.scale();\n const range = scale.range();\n const reverse = range[0] > range[1];\n\n if (type === BAND) {\n extent = scale.invertExtent(v1, v2);\n p1 = scale(reverse ? extent[extent.length - 1] : extent[0]);\n p2 = scale(reverse ? extent[0] : extent[extent.length - 1]) + scale.bandwidth();\n return [p1, p2];\n }\n return [v1, v2];\n }\n\n /**\n * This method is used to assign a domain to the axis.\n *\n * @param {Array} domain the domain of the scale\n * @memberof SimpleAxis\n */\n updateDomainBounds (domain) {\n let currentDomain = this.domain();\n if (this.config().domain) {\n currentDomain = this.config().domain;\n } else {\n if (currentDomain.length === 0) {\n currentDomain = domain;\n }\n if (domain.length) {\n currentDomain = [Math.min(currentDomain[0], domain[0]), Math.max(currentDomain[1], domain[1])];\n }\n }\n\n return this.domain(currentDomain);\n }\n\n /**\n *\n *\n * @param {*} domain\n * @returns\n * @memberof SimpleAxis\n */\n updateDomainCache (domain) {\n if (this._domainLock === false) {\n this.domain([]);\n this._domainLock = true;\n }\n const cachedDomain = [];\n domain && domain.forEach((d) => {\n d !== undefined && d !== null && cachedDomain.push(d);\n });\n return this.updateDomainBounds(cachedDomain);\n }\n\n getMinTickDifference () {\n return this.domain();\n }\n\n getFormattedTickValues (tickValues) {\n return tickValues;\n }\n\n /**\n *\n *\n * @param {*} tickValues\n * @returns\n * @memberof SimpleAxis\n */\n setTickValues () {\n const {\n tickValues\n } = this.config();\n\n if (tickValues) {\n tickValues instanceof Array && this.axis().tickValues(tickValues);\n return this;\n }\n return this;\n }\n\n /**\n * This method returns the width in pixels for one\n * unit along the axis. It is only applicable to band scale\n * and returns undefined for other scale type.\n *\n * @return {number} the width of one band along band scale axis\n * @memberof SimpleAxis\n */\n getUnitWidth () {\n return 0;\n }\n\n /**\n * This method returns an object that can be used to\n * reconstruct this instance.\n *\n * @return {Object} the serializable props of axis\n * @memberof SimpleAxis\n */\n serialize () {\n return {\n name: this.name,\n type: this.type,\n range: this.range(),\n config: this.config()\n };\n }\n\n /**\n * Returns the id of the axis.\n * @return {string} Unique identifier of the axis.\n */\n get id () {\n return this._id;\n }\n\n registerEvent (event, fn) {\n this._eventList.push({ name: event, action: fn });\n }\n\n /**\n *\n *\n * @param {*} fn\n * @memberof SimpleAxis\n */\n on (event, fn) {\n event = event || 'update';\n this.registerEvent(event, fn);\n }\n\n /**\n * This method is used to render the axis inside\n * the supplied svg container.\n *\n * @param {SVGElement} svg the svg element in which to render the path\n * @memberof SimpleAxis\n */\n /* istanbul ignore next */render () {\n if (this.mount()) {\n renderAxis(this);\n }\n return this;\n }\n\n /**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\n remove () {\n this.store().unsubscribeAll();\n selectElement(this.mount()).remove();\n return this;\n }\n\n /**\n *\n *\n * @memberof SimpleAxis\n */\n unsubscribe () {\n this.store().unsubscribeAll();\n return this;\n }\n\n /**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\n isReverse () {\n const range = this.range();\n return range[0] > range[1];\n }\n\n /**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\n getPixelToValueRatio () {\n const scale = this.scale();\n const range = scale.range();\n const domain = scale.domain();\n\n return Math.abs(range[1] - range[0]) / (domain[1] - domain[0]);\n }\n}\n\n","import { scaleMap } from '../../scale-creator';\n\nexport default class LinearInterpolator {\n\n createScale (config) {\n const {\n range\n } = config;\n const scaleFactory = scaleMap.linear;\n this._scale = scaleFactory().range(range);\n return this._scale;\n }\n\n getScaleValue (domainVal) {\n return this._scale(domainVal) + 0.5;\n }\n\n sanitizeDomain (domain) {\n return domain;\n }\n}\n","import { scaleMap } from '../../scale-creator';\n\nexport default class LogInterpolator {\n\n createScale (config) {\n const {\n range,\n base\n } = config;\n const scaleFactory = scaleMap.log;\n this._scale = scaleFactory().range(range).base(base);\n return this._scale;\n }\n\n getScaleValue (domainVal) {\n if (domainVal <= 0) {\n return 1;\n }\n\n return this._scale(domainVal) + 0.5;\n }\n\n sanitizeDomain (domain) {\n if (domain[0] <= 0) {\n return [Math.max(1, domain[0]), Math.max(1, domain[1])];\n } return domain;\n }\n}\n","import { scaleMap } from '../../scale-creator';\n\nexport default class PowInterpolator {\n\n createScale (config) {\n const {\n range,\n exponent\n } = config;\n const scaleFactory = scaleMap.pow;\n this._scale = scaleFactory().range(range).exponent(exponent);\n return this._scale;\n }\n\n getScaleValue (domainVal) {\n return this._scale(domainVal) + 0.5;\n }\n\n sanitizeDomain (domain) {\n return domain;\n }\n}\n","import { getSmallestDiff } from 'muze-utils';\nimport SimpleAxis from './simple-axis';\nimport { BOTTOM, TOP, LEFT, RIGHT } from '../enums/axis-orientation';\nimport { LINEAR, LOG, POW } from '../enums/scale-type';\nimport { LogInterpolator, PowInterpolator, LinearInterpolator } from './interpolators';\nimport { DOMAIN } from '../enums/constants';\nimport {\n getTickLabelInfo,\n getNumberOfTicks\n} from './helper';\n\nexport const interpolatorMap = {\n [LOG]: LogInterpolator,\n [POW]: PowInterpolator,\n [LINEAR]: LinearInterpolator\n};\n\nexport default class ContinousAxis extends SimpleAxis {\n constructor (config, dependencies) {\n config.tickFormat = config.tickFormat || (val => val);\n super(config, dependencies);\n }\n /**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\n createScale (config) {\n const {\n base,\n padding,\n interpolator,\n exponent\n } = config;\n const range = this.range();\n const InterpolatorCls = interpolatorMap[interpolator];\n\n this._interpolator = new InterpolatorCls();\n let scale = this._interpolator.createScale({\n padding,\n exponent,\n base,\n range\n });\n\n scale = scale.nice();\n return scale;\n }\n\n /**\n * This method is used to assign a domain to the axis.\n *\n * @param {Array} domain the domain of the scale\n * @memberof SimpleAxis\n */\n updateDomainBounds (domain) {\n let currentDomain = this.domain();\n if (this.config().domain) {\n currentDomain = this.config().domain;\n } else {\n if (currentDomain.length === 0) {\n currentDomain = domain;\n }\n if (domain.length) {\n currentDomain = [Math.min(currentDomain[0], domain[0]), Math.max(currentDomain[1], domain[1])];\n }\n }\n\n return this.domain(currentDomain);\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof ContinousAxis\n */\n static type () {\n return LINEAR;\n }\n\n getScaleValue (domainVal) {\n if (domainVal === null || domainVal === undefined) {\n return undefined;\n }\n return this._interpolator.getScaleValue(domainVal);\n }\n /**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\n getTickSize () {\n const {\n showInnerTicks,\n showOuterTicks\n } = this.config();\n const axis = this.axis();\n axis.tickSizeInner(showInnerTicks === false ? 0 : 6);\n axis.tickSizeOuter(showOuterTicks === false ? 0 : 6);\n return axis.tickSize();\n }\n\n /**\n *\n *\n * @param {*} d\n * @returns\n * @memberof SimpleAxis\n */\n domain (domain) {\n if (domain && domain.length) {\n const { nice } = this.config();\n if (domain.length && domain[0] === domain[1]) {\n domain = [0, +domain[0] * 2];\n }\n this.scale().domain(domain);\n nice && this.scale().nice();\n this._domain = this.scale().domain();\n this.store().commit(DOMAIN, this._domain);\n this.logicalSpace(null);\n return this;\n } return this._domain;\n }\n\n /**\n * This method is used to set the space availiable to render\n * the SimpleCell.\n *\n * @param {number} width The width of SimpleCell.\n * @param {number} height The height of SimpleCell.\n * @memberof AxisCell\n */\n setAvailableSpace (width = 0, height, padding, isOffset) {\n const {\n left,\n right,\n top,\n bottom\n } = padding;\n const {\n orientation,\n fixedBaseline\n } = this.config();\n const { tickLabelDim } = this.getAxisDimensions();\n this.availableSpace({ width, height });\n\n if (orientation === TOP || orientation === BOTTOM) {\n const labelSpace = tickLabelDim.width;\n this.range([(fixedBaseline ? 0 : (labelSpace / 2)) + left, width - right - labelSpace / 2]);\n const axisHeight = this.getLogicalSpace().height;\n isOffset && this.config({ yOffset: Math.max(axisHeight, height) });\n } else {\n const labelSpace = tickLabelDim.height;\n this.range([height - bottom - (fixedBaseline ? 1 : (labelSpace / 2)), labelSpace / 2 + top]);\n const axisWidth = this.getLogicalSpace().width;\n isOffset && this.config({ xOffset: Math.max(axisWidth, width) });\n }\n return this;\n }\n\n /**\n *\n *\n * @param {*} tickValues\n * @returns\n * @memberof SimpleAxis\n */\n setTickValues () {\n const {\n tickValues\n } = this.config();\n const axis = this.axis();\n\n if (tickValues) {\n tickValues instanceof Array && this.axis().tickValues(tickValues);\n return this;\n }\n axis.tickValues(this.getTickValues());\n return this;\n }\n\n /**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\n getTickValues () {\n let labelDim = 0;\n const {\n orientation,\n tickValues\n } = this.config();\n const range = this.range();\n const axis = this.axis();\n\n const availableSpace = Math.abs(range[0] - range[1]);\n\n const labelProps = getTickLabelInfo(this).largestLabelDim;\n\n if (tickValues) {\n return axis.scale().ticks(tickValues);\n }\n labelDim = labelProps[orientation === BOTTOM || orientation === TOP ? 'width' : 'height'];\n\n return getNumberOfTicks(availableSpace, labelDim, axis, this);\n }\n\n getMinTickDifference () {\n return getSmallestDiff(this.config().tickValues);\n }\n\n /**\n * Sets a fixed baseline for the first ticks so that they can render effectively within\n * the given area\n *\n * @param {*} tickText\n * @param {*} config\n * @param {*} labelManager\n */\n setFixedBaseline (tickText) {\n const {\n orientation,\n labels\n } = this.config();\n const {\n rotation\n } = labels;\n const axis = this.axis();\n const { width, height } = this._axisDimensions.largestLabelDim;\n axis.tickTransform((d, i) => {\n if (i === 0 && (orientation === LEFT || orientation === RIGHT)) {\n return `translate(0, -${(height) / 3}px)`;\n }\n if (i === 0 && (orientation === TOP || orientation === BOTTOM) && rotation === 0) {\n return `translate(${width / 2}px, ${0}px) rotate(${rotation}deg)`;\n } return '';\n });\n return tickText;\n }\n\n}\n","import SimpleAxis from './simple-axis';\nimport { BAND } from '../enums/scale-type';\nimport { TOP, BOTTOM } from '../enums/axis-orientation';\nimport { calculateBandSpace, setOffset } from './helper';\n\nexport default class BandAxis extends SimpleAxis {\n\n /**\n *\n *\n * @param {*} range\n * @returns\n * @memberof BandAxis\n */\n createScale (range) {\n const scale = super.createScale(range);\n const { padding } = this.config();\n if (typeof padding === 'number') {\n scale.padding(padding);\n }\n return scale;\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof BandAxis\n */\n static type () {\n return BAND;\n }\n\n /**\n *\n *\n * @param {*} width\n * @param {*} height\n * @param {*} padding\n * @param {*} isOffset\n * @memberof BandAxis\n */\n setAvailableSpace (width, height, padding, isOffset) {\n const {\n left,\n right,\n top,\n bottom\n } = padding;\n const {\n orientation,\n showAxisName,\n axisNamePadding\n } = this.config();\n const { axisLabelDim } = this.getAxisDimensions();\n const { height: axisDimHeight } = axisLabelDim;\n\n this.availableSpace({ width, height });\n if (orientation === TOP || orientation === BOTTOM) {\n // Set x axis range\n this.range([0, width - left - right]);\n const axisHeight = this.getLogicalSpace().height - (showAxisName === false ?\n (axisDimHeight + axisNamePadding) : 0);\n isOffset && this.config({ yOffset: Math.max(axisHeight, height) });\n } else {\n // Set y axis range\n this.range([height - bottom, top]);\n const axisWidth = this.getLogicalSpace().width - (showAxisName === false ? axisDimHeight : 0);\n isOffset && this.config({ xOffset: Math.max(axisWidth, width) });\n }\n return this;\n }\n\n /**\n *\n *\n * @returns\n * @memberof BandAxis\n */\n getUnitWidth () {\n return this.scale().bandwidth();\n }\n\n /**\n *\n *\n * @returns\n * @memberof BandAxis\n */\n setTickConfig () {\n let smartTicks = '';\n let smartlabel;\n const { maxWidth, maxHeight, tickFormat } = this.config();\n const { labelManager } = this._dependencies;\n const domain = this.axis().scale().domain();\n\n smartTicks = domain;\n const tickFormatter = tickFormat || (val => val);\n\n if (domain && domain.length) {\n smartTicks = domain.map((d, i) => {\n labelManager.useEllipsesOnOverflow(true);\n smartlabel = labelManager.getSmartText(tickFormatter(d, i, domain), maxWidth, maxHeight);\n return labelManager.constructor.textToLines(smartlabel);\n });\n }\n return smartTicks;\n }\n\n/**\n * Gets the space occupied by the axis\n *\n * @return {Object} object with details about size of the axis.\n * @memberof SimpleAxis\n */\n getLogicalSpace () {\n if (!this.logicalSpace()) {\n this.logicalSpace(calculateBandSpace(this));\n setOffset(this);\n this.logicalSpace();\n }\n return this.logicalSpace();\n }\n /**\n *\n *\n * @param {*} axisTickLabels\n * @param {*} labelWidth\n * @returns\n * @memberof BandAxis\n */\n setRotationConfig (axisTickLabels, labelWidth) {\n const { orientation } = this.config();\n const range = this.range();\n const availSpace = Math.abs(range[0] - range[1]);\n\n this.config({ labels: { rotation: 0, smartTicks: false } });\n if (orientation === TOP || orientation === BOTTOM) {\n const smartWidth = this.smartTicks().reduce((acc, n) => acc + n.width + this._minTickDistance.width, 0);\n // set multiline config\n if (availSpace > 0 && axisTickLabels.length * (labelWidth + this._minTickDistance.width) > availSpace) {\n if (availSpace && smartWidth < availSpace) {\n this.config({ labels: { smartTicks: true } });\n } else {\n this.config({ labels: { rotation: -90 } });\n }\n }\n }\n return this;\n }\n\n /**\n *\n *\n * @returns\n * @memberof BandAxis\n */\n getTickValues () {\n return this.axis().scale().domain();\n }\n\n /**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\n getTickSize () {\n const {\n showInnerTicks,\n showOuterTicks\n } = this.config();\n const axis = this.axis();\n\n axis.tickSizeInner(showInnerTicks ? 6 : 0);\n axis.tickSizeOuter(showOuterTicks ? 6 : 0);\n return axis.tickSize();\n }\n\n /**\n * This method is used to assign a domain to the axis.\n *\n * @param {Array} domain the domain of the scale\n * @memberof SimpleAxis\n */\n updateDomainBounds (domain) {\n let currentDomain = this.domain();\n if (this.config().domain) {\n currentDomain = this.config().domain;\n } else {\n if (currentDomain.length === 0) {\n currentDomain = domain;\n }\n currentDomain = currentDomain.concat(domain);\n }\n this.domain(currentDomain);\n return this;\n }\n\n /**\n * Returns the value from the domain when given a value from the range.\n * @param {number} value Value from the range.\n * @return {number} Value\n */\n invert (...value) {\n const values = value.map(d => this.scale().invert(d)) || [];\n return value.length === 1 ? values[0] && values[0].toString() : values.map(d => d.toString());\n }\n}\n","import { getSmallestDiff } from 'muze-utils';\nimport SimpleAxis from './simple-axis';\nimport { adjustRange } from './helper';\nimport { TIME } from '../enums/scale-type';\nimport { axisOrientationMap, BOTTOM, TOP } from '../enums/axis-orientation';\nimport { DOMAIN } from '../enums/constants';\n\n/**\n *\n *\n * @export\n * @class TimeAxis\n * @extends {SimpleAxis}\n */\nexport default class TimeAxis extends SimpleAxis {\n\n constructor (...params) {\n super(...params);\n this._minDiff = Infinity;\n }\n\n /**\n *\n *\n * @param {*} range\n * @returns\n * @memberof TimeAxis\n */\n createScale (range) {\n let scale = super.createScale(range);\n\n scale = scale.nice();\n return scale;\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof TimeAxis\n */\n static type () {\n return TIME;\n }\n\n /**\n *\n *\n * @returns\n * @memberof BandAxis\n */\n setTickConfig () {\n let smartTicks;\n let smartlabel;\n const { maxWidth, maxHeight, tickFormat } = this.config();\n const { labelManager } = this._dependencies;\n const domain = this.getTickValues();\n const scale = this.scale();\n\n smartTicks = domain;\n const tickFormatter = tickFormat || scale.tickFormat();\n\n if (domain && domain.length) {\n smartTicks = domain.map((d, i) => {\n smartlabel = labelManager.getSmartText(tickFormatter(d, i, domain), maxWidth, maxHeight);\n return labelManager.constructor.textToLines(smartlabel);\n });\n }\n return smartTicks;\n }\n\n /**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\n createAxis (config) {\n const {\n tickFormat,\n orientation\n } = config;\n const axisClass = axisOrientationMap[orientation];\n\n if (axisClass) {\n const axis = axisClass(this.scale());\n this.formatter = this.getTickFormatter(tickFormat);\n return axis;\n }\n return null;\n }\n\n getTickFormatter (tickFormat) {\n if (tickFormat) {\n return ticks => (val, i) => tickFormat(val, i, ticks);\n }\n return null;\n }\n\n /**\n *\n *\n * @returns\n * @memberof SimpleAxis\n */\n getTickSize () {\n const {\n showInnerTicks,\n showOuterTicks\n } = this.config();\n const axis = this.axis();\n axis.tickSizeInner(showInnerTicks === false ? 0 : 6);\n axis.tickSizeOuter(showOuterTicks === false ? 0 : 6);\n return super.getTickSize();\n }\n\n /**\n *\n *\n * @returns\n * @memberof TimeAxis\n */\n getTickValues () {\n return this.scale().ticks();\n }\n\n /**\n *\n *\n * @param {*} diff\n * @returns\n * @memberof TimeAxis\n */\n minDiff (diff) {\n this._minDiff = Math.min(this._minDiff, diff);\n return this;\n }\n\n /**\n *\n *\n * @param {*} axisTickLabels\n * @param {*} labelWidth\n * @returns\n * @memberof BandAxis\n */\n setRotationConfig (axisTickLabels, labelWidth) {\n const { orientation } = this.config();\n const range = this.range();\n const availSpace = Math.abs(range[0] - range[1]);\n\n this.config({ labels: { rotation: 0, smartTicks: false } });\n if (orientation === TOP || orientation === BOTTOM) {\n const smartWidth = this.smartTicks().reduce((acc, n) => acc + n.width, 0);\n // set multiline config\n if (availSpace > 0 && axisTickLabels.length * labelWidth > availSpace) {\n if (availSpace && smartWidth * 1.25 < availSpace) {\n this.config({ labels: { smartTicks: true } });\n }\n this.config({ labels: { rotation: -90 } });\n }\n }\n return this;\n }\n\n /**\n *\n *\n * @param {*} d\n * @returns\n * @memberof SimpleAxis\n */\n domain (domain) {\n if (domain) {\n const { nice } = this.config();\n\n if (domain.length && domain[0] === domain[1]) {\n domain = [0, +domain[0] * 2];\n }\n this.scale().domain(domain);\n nice && this.scale().nice();\n this._domain = this.scale().domain();\n this.smartTicks(this.setTickConfig());\n this.store().commit(DOMAIN, this._domain);\n this.logicalSpace(null);\n return this;\n } return this._domain;\n }\n\n getMinTickDifference () {\n return getSmallestDiff(this.config().tickValues);\n }\n\n /**\n *\n *\n * @param {*} width\n * @param {*} height\n * @param {*} padding\n * @param {*} isOffset\n * @memberof TimeAxis\n */\n setAvailableSpace (width, height, padding, isOffset) {\n const {\n left,\n right,\n top,\n bottom\n } = padding;\n const {\n orientation,\n showAxisName,\n axisNamePadding\n } = this.config();\n const domain = this.domain();\n const { axisLabelDim, tickLabelDim } = this.getAxisDimensions();\n const { height: axisDimHeight } = axisLabelDim;\n const { height: tickDimHeight, width: tickDimWidth } = tickLabelDim;\n\n this.availableSpace({ width, height });\n if (orientation === TOP || orientation === BOTTOM) {\n const labelSpace = tickDimWidth;\n this.range(adjustRange(this._minDiff, [labelSpace / 2, width - left - right - labelSpace / 2],\n domain, orientation));\n const axisHeight = this.getLogicalSpace().height - (showAxisName === false ?\n (axisDimHeight + axisNamePadding) : 0);\n isOffset && this.config({ yOffset: Math.max(axisHeight, height) });\n } else {\n const labelSpace = tickDimHeight;\n this.range(adjustRange(this._minDiff, [height - top - bottom - labelSpace / 2, labelSpace / 2],\n domain, orientation));\n const axisWidth = this.getLogicalSpace().width - (showAxisName === false ? axisDimHeight : 0);\n this.isOffset && this.config({ xOffset: Math.max(axisWidth, width) });\n }\n return this;\n }\n\n}\n","export const x11Colors = {\n Pink: { hex: 'ffc0cb', rgb: '255,192,203' },\n LightPink: { hex: 'ffb6c1', rgb: '255,182,193' },\n HotPink: { hex: 'ff69b4', rgb: '255,105,180' },\n DeepPink: { hex: 'ff1493', rgb: '255,20,147' },\n PaleVioletRed: { hex: 'db7093', rgb: '219,112,147' },\n MediumVioletRed: { hex: 'c71585', rgb: '199,21,133' },\n LightSalmon: { hex: 'ffa07a', rgb: '255,160,122' },\n Salmon: { hex: 'fa8072', rgb: '250,128,114' },\n DarkSalmon: { hex: 'e9967a', rgb: '233,150,122' },\n LightCoral: { hex: 'f08080', rgb: '240,128,128' },\n IndianRed: { hex: 'cd5c5c', rgb: '205,92,92' },\n Crimson: { hex: 'dc143c', rgb: '220,20,60' },\n FireBrick: { hex: 'b22222', rgb: '178,34,34' },\n DarkRed: { hex: '8b0000', rgb: '139,0,0' },\n Red: { hex: 'ff0000', rgb: '255,0,0' },\n OrangeRed: { hex: 'ff4500', rgb: '255,69,0' },\n Tomato: { hex: 'ff6347', rgb: '255,99,71' },\n Coral: { hex: 'ff7f50', rgb: '255,127,80' },\n DarkOrange: { hex: 'ff8c00', rgb: '255,140,0' },\n Orange: { hex: 'ffa500', rgb: '255,165,0' },\n Gold: { hex: 'ffd700', rgb: '255,215,0' },\n Yellow: { hex: 'ffff00', rgb: '255,255,0' },\n LightYellow: { hex: 'ffffe0', rgb: '255,255,224' },\n LemonChiffon: { hex: 'fffacd', rgb: '255,250,205' },\n LightGoldenrodYellow: { hex: 'fafad2', rgb: '250,250,210' },\n PapayaWhip: { hex: 'ffefd5', rgb: '255,239,213' },\n Moccasin: { hex: 'ffe4b5', rgb: '255,228,181' },\n PeachPuff: { hex: 'ffdab9', rgb: '255,218,185' },\n PaleGoldenrod: { hex: 'eee8aa', rgb: '238,232,170' },\n Khaki: { hex: 'f0e68c', rgb: '240,230,140' },\n DarkKhaki: { hex: 'bdb76b', rgb: '189,183,107' },\n Cornsilk: { hex: 'fff8dc', rgb: '255,248,220' },\n BlanchedAlmond: { hex: 'ffebcd', rgb: '255,235,205' },\n Bisque: { hex: 'ffe4c4', rgb: '255,228,196' },\n NavajoWhite: { hex: 'ffdead', rgb: '255,222,173' },\n Wheat: { hex: 'f5deb3', rgb: '245,222,179' },\n BurlyWood: { hex: 'deb887', rgb: '222,184,135' },\n Tan: { hex: 'd2b48c', rgb: '210,180,140' },\n RosyBrown: { hex: 'bc8f8f', rgb: '188,143,143' },\n SandyBrown: { hex: 'f4a460', rgb: '244,164,96' },\n Goldenrod: { hex: 'daa520', rgb: '218,165,32' },\n DarkGoldenrod: { hex: 'b8860b', rgb: '184,134,11' },\n Peru: { hex: 'cd853f', rgb: '205,133,63' },\n Chocolate: { hex: 'd2691e', rgb: '210,105,30' },\n SaddleBrown: { hex: '8b4513', rgb: '139,69,19' },\n Sienna: { hex: 'a0522d', rgb: '160,82,45' },\n Brown: { hex: 'a52a2a', rgb: '165,42,42' },\n Maroon: { hex: '800000', rgb: '128,0,0' },\n DarkOliveGreen: { hex: '556b2f', rgb: '85,107,47' },\n Olive: { hex: '808000', rgb: '128,128,0' },\n OliveDrab: { hex: '6b8e23', rgb: '107,142,35' },\n YellowGreen: { hex: '9acd32', rgb: '154,205,50' },\n LimeGreen: { hex: '32cd32', rgb: '50,205,50' },\n Lime: { hex: '00ff00', rgb: '0,255,0' },\n LawnGreen: { hex: '7cfc00', rgb: '124,252,0' },\n Chartreuse: { hex: '7fff00', rgb: '127,255,0' },\n GreenYellow: { hex: 'adff2f', rgb: '173,255,47' },\n SpringGreen: { hex: '00ff7f', rgb: '0,255,127' },\n MediumSpringGreen: { hex: '00fa9a', rgb: '0,250,154' },\n LightGreen: { hex: '90ee90', rgb: '144,238,144' },\n PaleGreen: { hex: '98fb98', rgb: '152,251,152' },\n DarkSeaGreen: { hex: '8fbc8f', rgb: '143,188,143' },\n MediumSeaGreen: { hex: '3cb371', rgb: '60,179,113' },\n SeaGreen: { hex: '2e8b57', rgb: '46,139,87' },\n ForestGreen: { hex: '228b22', rgb: '34,139,34' },\n Green: { hex: '008000', rgb: '0,128,0' },\n DarkGreen: { hex: '006400', rgb: '0,100,0' },\n MediumAquamarine: { hex: '66cdaa', rgb: '102,205,170' },\n Aqua: { hex: '00ffff', rgb: '0,255,255' },\n Cyan: { hex: '00ffff', rgb: '0,255,255' },\n LightCyan: { hex: 'e0ffff', rgb: '224,255,255' },\n PaleTurquoise: { hex: 'afeeee', rgb: '175,238,238' },\n Aquamarine: { hex: '7fffd4', rgb: '127,255,212' },\n Turquoise: { hex: '40e0d0', rgb: '64,224,208' },\n MediumTurquoise: { hex: '48d1cc', rgb: '72,209,204' },\n DarkTurquoise: { hex: '00ced1', rgb: '0,206,209' },\n LightSeaGreen: { hex: '20b2aa', rgb: '32,178,170' },\n CadetBlue: { hex: '5f9ea0', rgb: '95,158,160' },\n DarkCyan: { hex: '008b8b', rgb: '0,139,139' },\n Teal: { hex: '008080', rgb: '0,128,128' },\n LightSteelBlue: { hex: 'b0c4de', rgb: '176,196,222' },\n PowderBlue: { hex: 'b0e0e6', rgb: '176,224,230' },\n LightBlue: { hex: 'add8e6', rgb: '173,216,230' },\n SkyBlue: { hex: '87ceeb', rgb: '135,206,235' },\n LightSkyBlue: { hex: '87cefa', rgb: '135,206,250' },\n DeepSkyBlue: { hex: '00bfff', rgb: '0,191,255' },\n DodgerBlue: { hex: '1e90ff', rgb: '30,144,255' },\n CornflowerBlue: { hex: '6495ed', rgb: '100,149,237' },\n SteelBlue: { hex: '4682b4', rgb: '70,130,180' },\n RoyalBlue: { hex: '4169e1', rgb: '65,105,225' },\n Blue: { hex: '0000ff', rgb: '0,0,255' },\n MediumBlue: { hex: '0000cd', rgb: '0,0,205' },\n DarkBlue: { hex: '00008b', rgb: '0,0,139' },\n Navy: { hex: '000080', rgb: '0,0,128' },\n MidnightBlue: { hex: '191970', rgb: '25,25,112' },\n Lavender: { hex: 'e6e6fa', rgb: '230,230,250' },\n Thistle: { hex: 'd8bfd8', rgb: '216,191,216' },\n Plum: { hex: 'dda0dd', rgb: '221,160,221' },\n Violet: { hex: 'ee82ee', rgb: '238,130,238' },\n Orchid: { hex: 'da70d6', rgb: '218,112,214' },\n Fuchsia: { hex: 'ff00ff', rgb: '255,0,255' },\n Magenta: { hex: 'ff00ff', rgb: '255,0,255' },\n MediumOrchid: { hex: 'ba55d3', rgb: '186,85,211' },\n MediumPurple: { hex: '9370db', rgb: '147,112,219' },\n BlueViolet: { hex: '8a2be2', rgb: '138,43,226' },\n DarkViolet: { hex: '9400d3', rgb: '148,0,211' },\n DarkOrchid: { hex: '9932cc', rgb: '153,50,204' },\n DarkMagenta: { hex: '8b008b', rgb: '139,0,139' },\n Purple: { hex: '800080', rgb: '128,0,128' },\n Indigo: { hex: '4b0082', rgb: '75,0,130' },\n DarkSlateBlue: { hex: '483d8b', rgb: '72,61,139' },\n SlateBlue: { hex: '6a5acd', rgb: '106,90,205' },\n MediumSlateBlue: { hex: '7b68ee', rgb: '123,104,238' },\n White: { hex: 'ffffff', rgb: '255,255,255' },\n Snow: { hex: 'fffafa', rgb: '255,250,250' },\n Honeydew: { hex: 'f0fff0', rgb: '240,255,240' },\n MintCream: { hex: 'f5fffa', rgb: '245,255,250' },\n Azure: { hex: 'f0ffff', rgb: '240,255,255' },\n AliceBlue: { hex: 'f0f8ff', rgb: '240,248,255' },\n GhostWhite: { hex: 'f8f8ff', rgb: '248,248,255' },\n WhiteSmoke: { hex: 'f5f5f5', rgb: '245,245,245' },\n Seashell: { hex: 'fff5ee', rgb: '255,245,238' },\n Beige: { hex: 'f5f5dc', rgb: '245,245,220' },\n OldLace: { hex: 'fdf5e6', rgb: '253,245,230' },\n FloralWhite: { hex: 'fffaf0', rgb: '255,250,240' },\n Ivory: { hex: 'fffff0', rgb: '255,255,240' },\n AntiqueWhite: { hex: 'faebd7', rgb: '250,235,215' },\n Linen: { hex: 'faf0e6', rgb: '250,240,230' },\n LavenderBlush: { hex: 'fff0f5', rgb: '255,240,245' },\n MistyRose: { hex: 'ffe4e1', rgb: '255,228,225' },\n Gainsboro: { hex: 'dcdcdc', rgb: '220,220,220' },\n LightGray: { hex: 'd3d3d3', rgb: '211,211,211' },\n Silver: { hex: 'c0c0c0', rgb: '192,192,192' },\n DarkGrey: { hex: 'a9a9a9', rgb: '169,169,169' },\n Grey: { hex: '808080', rgb: '128,128,128' },\n DimGrey: { hex: '696969', rgb: '105,105,105' },\n LightSlateGrey: { hex: '778899', rgb: '119,136,153' },\n SlateGrey: { hex: '708090', rgb: '112,128,144' },\n DarkSlateGrey: { hex: '2f4f4f', rgb: '47,79,79' },\n Black: { hex: '000000', rgb: '0,0,0' }\n};\n","import {\n LINEAR\n} from '../enums/constants';\n/**\n * Set of default colors\n */\nexport const palette = [\n '#086bb6',\n '#f37d45',\n '#f5ce02',\n '#67bda0',\n '#c54e4e',\n '#ae70af'\n];\n\nexport const DEFAULT_GRADIENT_COLOR = '#eaeaea';\n\nexport const DEFAULT_CONFIG = {\n range: palette,\n value: palette[0],\n step: false,\n stops: 5,\n type: LINEAR\n};\n","import { mergeRecursive, detectColor, hexToHsv, rgbToHsv } from 'muze-utils';\nimport { x11Colors } from './color-maps';\nimport { palette, DEFAULT_GRADIENT_COLOR } from './defaults';\nimport { LINEAR, RGB, HEX, HSL, HSLA } from '../enums/constants';\n\nexport const getHslString = hslArr => `hsla(${hslArr[0] * 360},${hslArr[1] * 100}%,${hslArr[2] * 100}%,\\\n${hslArr[3] || 1})`;\n\nexport const convertToXllString = baseString => (baseString.split(' ') || [])\n .reduce((x, e) => `${x}${e.charAt(0).toUpperCase()}${e.slice(1)}`, '');\n\nexport const getActualHslColor = (e, paletteColor) => {\n let color = '';\n if (typeof e === 'string') {\n e = e.replace(/ /g, '');\n e = e.toLowerCase();\n if (detectColor(e) === HSL || detectColor(e) === HSLA) {\n color = e.match(/(\\d+(\\.\\d+)?)/g);\n color = [color[0] / 360, color[1] / 100, color[2] / 100, color[3] || 1];\n } else if (detectColor(e) === HEX) {\n color = hexToHsv(e);\n } else if (detectColor(e) === RGB) {\n const col = e.substring(e.indexOf('(') + 1, e.lastIndexOf(')')).split(/,\\s*/);\n color = rgbToHsv(...col);\n } else if (x11Colors[convertToXllString(e)]) {\n color = rgbToHsv(...x11Colors[convertToXllString(e)].rgb.split(','));\n }\n } else if (!(e instanceof Array)) {\n color = rgbToHsv(paletteColor);\n } else {\n color = e;\n }\n return color;\n};\n\nexport const PROPS = {\n config: {\n sanitization: (context, config) => {\n const defCon = mergeRecursive({}, context.constructor.defaultConfig());\n if (config.type === LINEAR) {\n config.range = config.range || [defCon.range[0]];\n config.range = config.range.length > 1 ? config.range : [DEFAULT_GRADIENT_COLOR, ...config.range];\n }\n const oldConfig = mergeRecursive(defCon, context.config());\n const newConfig = mergeRecursive(oldConfig, config);\n\n if (newConfig.range instanceof Array) {\n newConfig.range = newConfig.range.map((e, i) => getActualHslColor(e, palette[i]));\n newConfig.stops = config.stops || newConfig.range.length;\n }\n newConfig.value = getActualHslColor(newConfig.value, newConfig.value);\n return newConfig;\n }\n },\n domain: {},\n scale: {},\n uniqueValues: {}\n};\n","import { numberInterpolator, piecewiseInterpolator, hslInterpolator } from 'muze-utils';\nimport { CONTINOUS, DISCRETE } from '../enums/constants';\nimport { LINEAR, SEQUENTIAL, ORDINAL, QUANTILE } from '../enums/scale-type';\nimport { getHslString } from './props';\n\nconst getStops = (domain, stops) => {\n let newStops = [];\n\n if (stops instanceof Array) {\n newStops = stops.slice().sort();\n newStops = [...new Set([domain[0], ...stops, domain[1]])].sort();\n } else {\n const interpolator = numberInterpolator()(...domain);\n for (let i = 0; i <= stops; i++) {\n newStops[i] = interpolator(i / stops);\n }\n }\n\n if (newStops[0] < domain[0]) {\n newStops.shift();\n }\n return { domain, newStops };\n};\n\nconst rangeStops = (newStopsLength, range) => {\n let newRange = [];\n const maxRangeLength = Math.min(range.length, 18);\n\n if (newStopsLength > maxRangeLength) {\n const interpolator = piecewiseInterpolator()(hslInterpolator(), range.map(e => getHslString(e)));\n for (let i = 0; i < newStopsLength; i++) {\n newRange[i] = interpolator(i / (newStopsLength - 1));\n }\n } else {\n newRange = range.slice(0, newStopsLength);\n }\n return { newRange };\n};\n\n/**\n*\n*\n* @param {*} domain\n* @returns\n*/\nconst indexedDomain = (domain) => {\n const uniqueVals = domain;\n const retDomain = domain.map((d, i) => (i) / (domain.length - 1));\n return { domain: retDomain, uniqueVals, scaleDomain: [0, 1] };\n};\n\n/**\n *\n *\n * @param {*} domain\n * @returns\n */\nconst indexedDomainMeasure = (domain, stops, range) => {\n const uniqueVals = domain;\n return { domain, uniqueVals, scaleDomain: [0, 1], range };\n};\n\n/**\n *\n *\n * @param {*} domain\n * @returns\n */\nconst normalDomain = (domain, stops, range) => {\n const uniqueVals = domain;\n return { uniqueVals, domain, nice: true, range };\n};\n\n/**\n *\n *\n * @param {*} domain\n * @param {*} stops\n * @returns\n */\nconst steppedDomain = (domain, stops, range) => {\n const { domain: uniqueVals, newStops } = getStops(domain, stops);\n const { newRange } = rangeStops(newStops.length - 1, range);\n\n return { uniqueVals, domain: newStops, nice: true, range: newRange };\n};\n\nconst continousSteppedDomain = (domain, stops, range) => {\n const { domain: uniqueVals, newStops } = getStops(domain, range.length - 1);\n const hslRange = range.map(e => getHslString(e));\n return { uniqueVals, domain: newStops, nice: true, range: hslRange };\n};\n\n/**\n *\n *\n * @param {*} domainValue\n * @param {*} scale\n * @param {*} domain\n * @param {*} uniqueVals\n * @returns\n */\nconst uniqueRange = (domainValue, scale, domain, uniqueVals) => {\n const index = uniqueVals.indexOf(domainValue);\n const numVal = domain[index];\n return scale(numVal);\n};\n\n/**\n *\n *\n * @param {*} domainValue\n * @param {*} scale\n * @param {*} domain\n * @returns\n */\nconst indexedRange = (domainValue, scale, domain) => {\n const numVal = (domainValue - domain[0]) / (domain[domain.length - 1] - domain[0]);\n\n return scale(numVal);\n};\n\n/**\n *\n *\n * @param {*} domainValue\n * @param {*} scale\n */\nconst normalRange = (domainValue, scale) => scale(domainValue);\n\n/**\n *\n *\n * @param {*} stops\n */\nconst strategies = () => ({\n [`${CONTINOUS}-${CONTINOUS}-${SEQUENTIAL}`]: {\n scale: SEQUENTIAL,\n domainRange: () => indexedDomainMeasure,\n value: () => indexedRange\n },\n [`${CONTINOUS}-${DISCRETE}-${SEQUENTIAL}`]: {\n scale: SEQUENTIAL,\n domainRange: () => indexedDomainMeasure,\n value: () => indexedRange\n },\n [`${DISCRETE}-${DISCRETE}-${SEQUENTIAL}`]: {\n scale: SEQUENTIAL,\n domainRange: () => indexedDomain,\n value: () => uniqueRange\n },\n [`${DISCRETE}-${DISCRETE}-${ORDINAL}`]: {\n scale: ORDINAL,\n domainRange: () => normalDomain,\n value: () => normalRange\n },\n [`${CONTINOUS}-${CONTINOUS}-${ORDINAL}`]: {\n scale: LINEAR,\n domainRange: () => continousSteppedDomain,\n value: () => normalRange\n },\n [`${CONTINOUS}-${DISCRETE}-${ORDINAL}`]: {\n scale: QUANTILE,\n domainRange: () => steppedDomain,\n value: () => normalRange\n\n }\n});\n\n/**\n *\n *\n * @param {*} domainType\n * @param {*} rangeType\n * @param {*} schemeType\n * @param {*} stops\n */\nexport const strategyGetter = (domainType, rangeType, schemeType, stops) =>\n strategies(stops)[`${domainType}-${rangeType}-${schemeType || ''}`];\n","/**\n * @module Axis\n * This file declares a class that is used to render an axis to add meaning to\n * plots.\n */\nimport { getUniqueId, generateGetterSetters, rgbToHsv } from 'muze-utils';\nimport { createScale, getScheme, getSchemeType } from '../scale-creator';\nimport { CONTINOUS, DISCRETE, COLOR } from '../enums/constants';\nimport { strategyGetter } from './color-strategy';\nimport { DEFAULT_CONFIG } from './defaults';\nimport { PROPS, getHslString } from './props';\n\n/**\n* This class is used to instantiate a SimpleAxis.\n* @class SimpleAxis\n*/\nexport default class ColorAxis {\n\n /**\n * Creates an instance of SimpleAxis.\n * @param {Object} config input parameters.\n * @param {Object | undefined} params.range Type of color range.\n * @param {string} params.name the label to show on axis.\n * @param {string} params.type The type of scale to handle.\n * @memberof ColorAxis\n */\n constructor (config) {\n generateGetterSetters(this, PROPS);\n this.config(config);\n\n this._domainType = this._config.type === 'linear' ? CONTINOUS : DISCRETE;\n this._rangeType = (this._config.type === 'linear' && !this._config.step) ? CONTINOUS : DISCRETE;\n\n this._schemeType = getSchemeType(this._config.range);\n\n this._colorStrategy = this.setColorStrategy(this._domainType, this._rangeType, this._schemeType);\n this._scale = this.createScale(this._colorStrategy);\n\n this._id = getUniqueId();\n\n this.updateDomain(config.domain);\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof ColorAxis\n */\n static defaultConfig () {\n return DEFAULT_CONFIG;\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof ColorAxis\n */\n static type () {\n return COLOR;\n }\n\n /**\n *\n *\n * @param {*} colorStrategy\n * @returns\n * @memberof ColorAxis\n */\n createScale (colorStrategy) {\n const { range } = this.config();\n if (range && typeof (range) === 'string') {\n return getScheme(range);\n }\n return createScale({\n type: colorStrategy.scale,\n range\n });\n }\n\n /**\n *\n *\n * @param {*} domainType\n * @param {*} rangeType\n * @param {*} schemeType\n * @returns\n * @memberof ColorAxis\n */\n setColorStrategy (domainType, rangeType, schemeType) {\n const { stops } = this.config();\n\n return strategyGetter(domainType, rangeType, schemeType, stops);\n }\n\n /**\n *\n *\n * @param {*} domainVal\n * @returns\n * @memberof ColorAxis\n */\n getHslString (hslColorArray) {\n return getHslString(hslColorArray);\n }\n /**\n *\n *\n * @param {*} domainVal\n * @returns\n * @memberof ColorAxis\n */\n getColor (domainVal) {\n return this.getHslString(this.getRawColor(domainVal));\n }\n /**\n *\n *\n * @param {*} domainVal\n * @returns\n * @memberof ColorAxis\n */\n getRawColor (domainVal) {\n if (this.domain() && domainVal !== undefined) {\n const scale = this.scale();\n const range = scale.range ? scale.range() : null;\n const color = this._colorStrategy.value(range)(domainVal, scale, this.domain(), this.uniqueValues());\n\n if (typeof color === 'string') {\n const col = color.substring(color.indexOf('(') + 1, color.lastIndexOf(')')).split(/,\\s*/);\n return rgbToHsv(...col);\n }\n return [...color];\n }\n return [...this.config().value];\n }\n\n /**\n *\n *\n * @param {*} [domain=[]]\n * @returns\n * @memberof ColorAxis\n */\n updateDomain (domain = []) {\n if (domain.length) {\n const scale = this.scale();\n const range = scale.range ? scale.range() : null;\n const domainRangeFn = this._colorStrategy.domainRange();\n const scaleInfo = domainRangeFn(domain, this.config().stops, range);\n\n this.domain(scaleInfo.domain);\n scaleInfo.range && this.scale().range(scaleInfo.range);\n this.uniqueValues(scaleInfo.uniqueVals);\n this.scale().domain(scaleInfo.scaleDomain || this.domain());\n }\n return this;\n }\n\n /**\n * This method returns an object that can be used to\n * reconstruct this instance.\n *\n * @return {Object} the serializable props of axis\n * @memberof ShapeAxis\n */\n serialize () {\n return {\n type: this.constructor.type(),\n scale: this.scale(),\n domain: this.domain(),\n config: this.config()\n };\n }\n\n transformColor (color, transformationArr) {\n const h = color[0] * 360;\n const s = color[1] * 100;\n const l = color[2] * 100;\n const a = color[3] || 1;\n const newH = h + transformationArr[0];\n const newS = s + transformationArr[1];\n const newL = l + transformationArr[2];\n const newA = a + transformationArr[3] || 0;\n\n return { color: `hsla(${newH},${newS}%,${newL}%,${newA})`, hsla: [newH / 360, newS / 100, newL / 100, newA] };\n }\n\n /**\n * Returns the id of the axis.\n * @return {string} Unique identifier of the axis.\n */\n id () {\n return this._id;\n }\n\n}\n","export const DEFAULT_CONFIG = {\n value: 36,\n range: [36, 1000]\n};\n","import { numberInterpolator, piecewiseInterpolator } from 'muze-utils';\nimport { CONTINOUS, DISCRETE } from '../enums/constants';\nimport { LINEAR, THRESHOLD } from '../enums/scale-type';\n\n/**\n *\n *\n * @param {*} domain\n * @returns\n */\nconst indexedDomain = (domain) => {\n const uniqueVals = domain;\n const retDomain = domain.map((d, i) => (i) / (domain.length - 1));\n return { domain: retDomain, uniqueVals, scaleDomain: [0, 1] };\n};\n\n/**\n *\n *\n * @param {*} domain\n * @returns\n */\nconst normalDomain = (domain) => {\n const uniqueVals = domain;\n return { uniqueVals, domain };\n};\n\n/**\n *\n *\n * @param {*} domain\n * @param {*} intervals\n * @returns\n */\nconst steppedDomain = (domain, intervals) => {\n let newIntervals = [];\n if (intervals instanceof Array) {\n newIntervals = intervals.slice().sort();\n } else {\n const interpolator = numberInterpolator()(...domain);\n for (let i = 0; i < intervals; i++) {\n newIntervals[i] = interpolator(i / (intervals - 1));\n }\n }\n if (newIntervals[0] < domain[0]) {\n newIntervals.shift();\n }\n const retDomain = newIntervals;\n return { uniqueVals: newIntervals, domain: retDomain, nice: true };\n};\n\n/**\n *\n *\n * @param {*} domainValue\n * @param {*} scale\n * @param {*} domain\n * @param {*} uniqueVals\n * @returns\n */\nconst discreteRange = (domainValue, scale, domain) => {\n const numVal = (domainValue - domain[0]) / (domain[domain.length - 1] - domain[0]);\n const interpolator = numberInterpolator()(...scale.range());\n return interpolator(numVal);\n};\n\n/**\n *\n *\n * @param {*} domainValue\n * @param {*} scale\n * @param {*} domain\n * @returns\n */\nconst pieceWiseRange = (domainValue, scale, domain, uniqueVals) => {\n const index = uniqueVals.indexOf(domainValue);\n const numVal = domain[index];\n const fn = piecewiseInterpolator()(numberInterpolator(), [...scale.range()]);\n return fn(numVal);\n};\n\n/**\n *\n *\n * @param {*} domainValue\n * @param {*} scale\n */\nconst normalRange = (domainValue, scale) => scale(domainValue);\n\n/**\n *\n *\n * @param {*} intervals\n */\nconst strategies = {\n [`${DISCRETE}-${CONTINOUS}`]: {\n scale: LINEAR,\n domain: indexedDomain,\n range: pieceWiseRange\n },\n [`${CONTINOUS}-${CONTINOUS}`]: {\n scale: LINEAR,\n domain: normalDomain,\n range: normalRange\n },\n [`${CONTINOUS}-${DISCRETE}`]: {\n scale: THRESHOLD,\n domain: steppedDomain,\n range: discreteRange\n }\n};\n\n/**\n *\n *\n * @param {*} domainType\n * @param {*} rangeType\n * @param {*} schemeType\n * @param {*} intervals\n */\nexport const strategyGetter = (domainType, rangeType) =>\n strategies[`${domainType}-${rangeType}`];\n","export const PROPS = {\n config: {},\n domain: {\n sanitization: (context, value) => {\n context.scale().domain(value);\n return value;\n }\n },\n range: {},\n scale: {},\n uniqueValues: {}\n};\n","/**\n * @module Axis\n * This file declares a class that is used to render an axis to add meaning to\n * plots.\n */\nimport { getUniqueId, generateGetterSetters } from 'muze-utils';\nimport { createScale } from '../scale-creator';\nimport { DEFAULT_CONFIG } from './defaults';\nimport { SIZE, CONTINOUS, DISCRETE } from '../enums/constants';\nimport { strategyGetter } from './size-strategy';\nimport { PROPS } from './props';\n\n/**\n* This class is used to instantiate a SimpleAxis.\n* @class SimpleAxis\n*/\nexport default class SizeAxis {\n\n /**\n * Creates an instance of SimpleAxis.\n * @param {Object} config input parameters.\n * @memberof SizeAxis\n */\n constructor (config) {\n generateGetterSetters(this, PROPS);\n\n this._id = getUniqueId();\n this._config = Object.assign({}, this.constructor.defaultConfig(), config);\n // @todo: Will use configuration override using scale decorator\n this._domainType = this._config.type === 'linear' ? CONTINOUS : DISCRETE;\n this._rangeType = CONTINOUS;\n\n this._sizeStrategy = this.setStrategy(this._domainType, this._rangeType);\n this._scale = this.createScale(this._sizeStrategy);\n this._range = this._config.range;\n\n this.updateDomain(config.domain);\n }\n\n /**\n *\n *\n * @param {*} domainType\n * @param {*} rangeType\n * @param {*} schemeType\n * @returns\n * @memberof ColorAxis\n */\n setStrategy (domainType, rangeType) {\n return strategyGetter(domainType, rangeType);\n }\n\n /**\n *\n *\n * @returns\n * @memberof SizeAxis\n */\n createScale (strategy) {\n const {\n range\n } = this.config();\n return createScale({\n type: strategy.scale,\n range\n });\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof ColorAxis\n */\n static defaultConfig () {\n return DEFAULT_CONFIG;\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof ColorAxis\n */\n static type () {\n return SIZE;\n }\n\n /**\n *\n *\n * @param {*} domainVal\n * @returns\n * @memberof SizeAxis\n */\n getSize (domainVal = 0) {\n let sizeVal = 1;\n const {\n value\n } = this.config();\n const scale = this.scale();\n const domain = this.domain() || [1, 1];\n\n if (!scale || domain[0] === domain[1]) {\n sizeVal = value;\n } else {\n return this._sizeStrategy.range(domainVal, scale, this.domain(), this.uniqueValues());\n }\n return sizeVal;\n }\n\n /**\n * This method is used to assign a domain to the axis.\n *\n * @param {Array} domain the domain of the scale\n * @memberof SizeAxis\n */\n updateDomain (domain) {\n if (domain) {\n const domainFn = this._sizeStrategy.domain;\n\n const domainInfo = domainFn(domain, this.config().intervals);\n\n this.domain(domainInfo.domain);\n this.uniqueValues(domainInfo.uniqueVals);\n\n this.scale().domain(domainInfo.scaleDomain || this.domain());\n }\n return this;\n }\n\n /**\n * This method returns an object that can be used to\n * reconstruct this instance.\n *\n * @return {Object} the serializable props of axis\n * @memberof ShapeAxis\n */\n serialize () {\n return {\n type: this.constructor.type(),\n scale: this.scale(),\n domain: this.domain(),\n range: this.range(),\n config: this.config()\n };\n }\n\n /**\n * Returns the id of the axis.\n * @return {string} Unique identifier of the axis.\n */\n id () {\n return this._id;\n }\n}\n","export const DEFAULT_CONFIG = {\n generator: null,\n value: 'circle',\n range: ['circle', 'diamond', 'star', 'cross', 'square', 'wye', 'triangle']\n};\n","export const PROPS = {\n config: {},\n domain: {},\n scale: {},\n uniqueValues: {},\n generator: {}\n};\n\n","/**\n * @module Axis\n * This file declares a class that is used to render an axis to add meaning to\n * plots.\n */\nimport { getUniqueId, getSymbol, generateGetterSetters, mergeRecursive } from 'muze-utils';\nimport { createScale } from '../scale-creator';\nimport { DEFAULT_CONFIG } from './defaults';\nimport { SHAPE } from '../enums/constants';\nimport { shapeGenerator } from './helper';\nimport { PROPS } from './props';\n\n/**\n* This class is used to instantiate a SimpleAxis.\n* @class SimpleAxis\n*/\nexport default class ShapeAxis {\n /**\n * Creates an instance of SimpleAxis.\n * @param {Object} params input parameters.\n * @param {Object | undefined} params.range Type of color scheme.\n * @memberof ShapeAxis\n */\n constructor (config) {\n generateGetterSetters(this, PROPS);\n\n this._id = getUniqueId();\n this._config = Object.assign({}, this.constructor.defaultConfig());\n this._config = mergeRecursive(this._config, config);\n\n this._scale = createScale({\n type: 'ordinal',\n range: this._config.range\n });\n this.updateDomain(config.domain);\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof ColorAxis\n */\n static defaultConfig () {\n return DEFAULT_CONFIG;\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof ColorAxis\n */\n static type () {\n return SHAPE;\n }\n\n /**\n *\n *\n * @param {*} value\n * @returns\n * @memberof ShapeAxis\n */\n getShape (value) {\n if (!this.scale() || !this.domain() || !value) {\n return this.config().value;\n }\n\n if (this._generatedShapes) {\n return this._generatedShapes[value];\n }\n\n const shapeType = this.scale()(value);\n if (shapeType === 'string') {\n return getSymbol(shapeType);\n }\n\n return shapeType;\n }\n\n /**\n * This method is used to assign a domain to the axis.\n *\n * @param {Array} domain the domain of the scale\n * @memberof ShapeAxis\n */\n updateDomain (domain = []) {\n if (domain.length) {\n this.uniqueValues(domain);\n this.domain(domain);\n this.scale().domain(domain);\n\n if (this.config().generator) {\n this._generatedShapes = shapeGenerator(domain, this.config().generator);\n }\n }\n return this;\n }\n\n /**\n * This method returns an object that can be used to\n * reconstruct this instance.\n *\n * @return {Object} the serializable props of axis\n * @memberof ShapeAxis\n */\n serialize () {\n return {\n type: this.constructor.type(),\n scale: this.scale(),\n domain: this.domain(),\n range: this.config().range,\n config: this.config()\n };\n }\n\n /**\n * Returns the id of the axis.\n * @return {string} Unique identifier of the axis.\n */\n id () {\n return this._id;\n }\n}\n","/**\n *\n *\n * @param {*} domain\n * @param {*} generatorFn\n * @returns\n */\nexport const shapeGenerator = (domain, generatorFn) => {\n const generatedShapes = {};\n domain.forEach((value) => {\n generatedShapes[value] = generatorFn(value);\n });\n return generatedShapes;\n};\n","import * as ScaleType from './enums/scale-type';\n\nconst DATA_TYPES = {\n DIMENSION: 'dimension',\n CATEGORICAL: 'categorical',\n MEASURE: 'measure',\n DATETIME: 'temporal'\n};\n\n/**\n * Map of DataModel types to associated field types.\n */\nexport const dataTypeScaleMap = {\n [DATA_TYPES.DIMENSION]: ScaleType.BAND,\n [DATA_TYPES.MEASURE]: ScaleType.LINEAR,\n [DATA_TYPES.DATETIME]: ScaleType.TIME\n};\n\n","import { nestCollection } from 'muze-utils';\n\n/**\n * Create multiple datasets from a single dataset by grouping the data using\n * a dimensional field.\n * @param {Array} schema Name and type of fields are stored in schema\n * @param {Array} data Data array\n * @param {Object} config Configuration object\n * @return {Array} Grouped data array\n */\nexport default (schema, data, config) => {\n const groupBy = config.groupBy instanceof Array ? config.groupBy : [config.groupBy];\n const groupByIndices = groupBy.map(fieldName => schema.findIndex(d => d.name === fieldName));\n\n if (groupByIndices.find(d => d === -1) !== undefined) {\n throw new Error(`Groupby field ${groupBy} not found in schema`);\n }\n\n return nestCollection({\n keys: groupByIndices,\n data\n });\n};\n","/**\n * @module Transform\n * This file exports a function that is used to implement\n * the identity transform\n */\n /* eslint no-unused-vars: 0 */\n /**\n * This function accepts data and returns the data unchanged.\n * @param {Object} schema The schema.\n * @param {Array} data The data array.\n * @param {Object} config The config object.\n * @return {Array} The unchanged data.\n */\n function identityTransform (schema, data, config) {\n return data;\n }\n\n export default identityTransform;\n","/**\n * @module Transform\n * This file exports the transform factory.\n */\nimport * as TransformType from '../enums/transform-type';\nimport identity from '../identity-transform';\nimport group from '../group-transform';\nimport stack from '../stack-transform';\n\n/* istanbul ignore next */\nconst transformMap = {\n [TransformType.IDENTITY]: identity,\n [TransformType.GROUP]: group,\n [TransformType.STACK]: stack\n};\n\n/**\n * This function is used to retirn a transform associated\n * with the given type.\n *\n * @param {string} type The type of the transform.\n * @return {Function} The transform function.\n */\nfunction transformFactory (type) {\n const transform = transformMap[type];\n if (typeof transform !== 'function') {\n throw new Error('Invalid transform type supplied.');\n }\n return transform;\n}\n\nexport default transformFactory;\n","/**\n * @module Transform\n * This module exports constants that are used to reference transforms in\n * a consistent manner throughout the project.\n */\n/* eslint one-var: 0 */\n export const IDENTITY = 'identity';\n export const GROUP = 'group';\n export const STACK = 'stack';\n export const FRACTURE = 'fracture';\n","import { stack } from 'muze-utils';\n\nimport group from '../group-transform';\n/*\n Normalize the data to a form which can be given to d3 stack for stacking the data\n ['Product', 'Sales', 'Region'],\n 0 ['A', 2000, 'North'],\n 1 ['A', 3000, 'South'],\n 2 ['B', 3000, 'South'],\n 3 ['B', 2000, 'North'],\n 4 ['C', 3000, 'South'],\n 5 ['C', 2000, 'North']\n |\n |\n ['Product', 'North', 'South'],\n ['A', 2000, 3000],\n ['B', 2000, 3000],\n ['C', 2000, 3000]\n*/\n// eslint-disable-next-line require-jsdoc\nconst normalizeData = (data, schema, valueField, uniqueField, groupBy) => {\n const groupedData = group(schema, data, {\n groupBy: uniqueField\n });\n const uniqueFieldIndex = schema.findIndex(d => d.name === uniqueField);\n const valueFieldIndex = schema.findIndex(d => d.name === valueField);\n const seriesKeyIndex = schema.findIndex(d => d.name === groupBy);\n const seriesKeys = data.map(d => d[seriesKeyIndex]).filter((item, pos, arr) => arr.indexOf(item) === pos).sort();\n const fieldNames = schema.reduce((acc, obj, i) => {\n acc[i] = obj.name;\n return acc;\n }, {});\n const dataArr = groupedData.map((arr) => {\n const tuples = {};\n const rowObj = arr.values.reduce((acc, row) => {\n acc = row.reduce((obj, value, i) => {\n if (i === seriesKeyIndex) {\n obj[value] = row[valueFieldIndex];\n tuples[value] = row;\n } else if (i !== valueFieldIndex) {\n obj[fieldNames[i]] = value;\n }\n return obj;\n }, acc);\n return acc;\n }, {});\n rowObj._tuple = tuples;\n // Set missing values field to zero value\n seriesKeys.forEach((seriesKey) => {\n if (rowObj[seriesKey] === undefined) {\n rowObj[seriesKey] = 0;\n const newArr = new Array(arr.values[0].length);\n newArr[uniqueFieldIndex] = arr.key;\n newArr[seriesKeyIndex] = seriesKey;\n rowObj._tuple[seriesKey] = newArr;\n }\n });\n return rowObj;\n });\n\n return {\n data: dataArr,\n keys: seriesKeys\n };\n};\n/**\n * Generate a stacked representation of data\n * @param {Array} schema schema Array\n * @param {Array} data data array\n * @param {Object} config Configuration object\n * @return {Array} stacked data\n */\nexport default (schema, data, config) => {\n const uniqueField = config.uniqueField;\n const valueField = config.value;\n const groupBy = config.groupBy;\n const sort = config.sort || 'descending';\n const normalizedData = normalizeData(data, schema, valueField, uniqueField, groupBy);\n const keys = normalizedData.keys;\n const map = {};\n const orderBy = config.orderBy;\n const orderIndex = schema.findIndex(d => d.name === orderBy);\n const groupByIndex = schema.findIndex(d => d.name === groupBy);\n if (orderIndex !== -1) {\n keys.forEach((key) => {\n const name = data.find(d => d[groupByIndex] === key);\n map[key] = name[orderIndex];\n });\n normalizedData.keys.sort((a, b) => map[a].localeCompare(map[b]));\n }\n\n const stackData = stack({\n keys: normalizedData.keys,\n offset: config.offset || 'diverging',\n order: sort,\n data: normalizedData.data\n });\n stackData.forEach((seriesData) => {\n seriesData.forEach((dataObj) => {\n dataObj.data = dataObj.data._tuple[seriesData.key];\n });\n });\n return stackData;\n};\n\n","import {\n FieldType,\n getDomainFromData,\n setStyles,\n easeFns,\n selectElement,\n DimensionSubtype\n} from 'muze-utils';\nimport { ScaleType } from '@chartshq/muze-axis';\nimport { transformFactory } from '@chartshq/transform';\nimport { IDENTITY, STACK, GROUP, COLOR, SHAPE, SIZE, ENCODING } from '../enums/constants';\n\nconst BAND = ScaleType.BAND;\n\nexport const getLayerColor = ({ datum, index }, { colorEncoding, colorAxis, colorFieldIndex }) => {\n let rawColor = '';\n let color = '';\n if (colorEncoding && colorEncoding.value instanceof Function) {\n color = colorEncoding.value(datum, index);\n rawColor = colorEncoding.value(datum, index);\n } else {\n rawColor = colorAxis.getRawColor(datum._data[colorFieldIndex]);\n color = colorAxis.getHslString(rawColor);\n }\n return { color, rawColor };\n};\n\nconst transfromColor = (colorAxis, datum, styleType, intensity) => {\n datum.meta.stateColor[styleType] = datum.meta.stateColor[styleType] || datum.meta.originalColor;\n const fillColorInfo = colorAxis.transformColor(datum.meta.stateColor[styleType], intensity);\n datum.meta.stateColor[styleType] = fillColorInfo.hsla;\n\n return fillColorInfo;\n};\n\nexport const applyInteractionStyle = (context, selectionSet, interactionStyles, config) => {\n const elements = context.getPlotElementsFromSet(selectionSet);\n const axes = context.axes();\n const colorAxis = axes.color;\n const apply = config.apply;\n const interactionType = config.interactionType;\n interactionStyles.forEach((style) => {\n const styleType = style.type;\n elements.style(styleType, ((d) => {\n const { colorTransform, stateColor, originalColor } = d.meta;\n colorTransform[interactionType] = colorTransform[interactionType] || {};\n if (apply && !colorTransform[interactionType][styleType]) {\n // fade selections\n colorTransform[interactionType][styleType] = style.intensity;\n const color = transfromColor(colorAxis, d, styleType, style.intensity).color;\n return color;\n }\n if (!apply && colorTransform[interactionType][styleType]) {\n // unfade selections\n colorTransform[interactionType][styleType] = null;\n return transfromColor(colorAxis, d, styleType, style.intensity.map(e => -e)).color;\n }\n const [h, s, l, a] = stateColor[styleType] ? stateColor[styleType] : originalColor;\n return `hsla(${h * 360},${s * 100}%,${l * 100}%, ${a || 1})`;\n }));\n });\n};\n\n/**\n *\n *\n * @param {*} selectionSet\n * @param {*} className\n * @param {*} hasFaded\n */\nexport const fadeUnfadeSelection = (context, selectionSet, hasFaded, interaction) => {\n const interactionConfig = { interaction, apply: hasFaded };\n applyInteractionStyle(context, selectionSet, 'fade', interactionConfig);\n};\n\n/**\n *\n *\n * @param {*} selectionSet\n * @param {*} className\n * @param {*} hasFaded\n */\nexport const focusUnfocusSelection = (context, selectionSet, isFocussed, interaction) => {\n const interactionConfig = { interaction, apply: isFocussed };\n applyInteractionStyle(context, selectionSet, 'focus', interactionConfig);\n};\n\n/**\n *\n *\n * @param {*} axes\n * @returns\n */\nexport const getAxesScales = (axes) => {\n const [xAxis, yAxis] = [ENCODING.X, ENCODING.Y].map(e => axes[e]);\n const [xScale, yScale] = [xAxis, yAxis].map(e => e && e.scale());\n return {\n xAxis,\n yAxis,\n xScale,\n yScale\n };\n};\n\n/**\n *\n *\n * @param {*} encoding\n * @param {*} fieldsConfig\n * @returns\n */\nexport const getEncodingFieldInf = (encoding, fieldsConfig) => {\n const [xField, yField, x0Field, y0Field, colorField, shapeField, sizeField] =\n [ENCODING.X, ENCODING.Y, ENCODING.X0, ENCODING.Y0, COLOR, SHAPE, SIZE].map(e => encoding[e] &&\n encoding[e].field);\n\n const [xFieldType, yFieldType] = [xField, yField, x0Field, y0Field].map(e => fieldsConfig[e] &&\n fieldsConfig[e].def.type);\n\n const [xFieldSubType, yFieldSubType] = [xField, yField].map(e => fieldsConfig[e] && (fieldsConfig[e].def.subtype ||\n fieldsConfig[e].def.type));\n\n const [xFieldIndex, yFieldIndex, x0FieldIndex, y0FieldIndex] = [xField, yField, x0Field, y0Field]\n .map(e => fieldsConfig[e] && fieldsConfig[e].index);\n\n return {\n xField,\n yField,\n colorField,\n shapeField,\n sizeField,\n x0Field,\n y0Field,\n xFieldType,\n yFieldType,\n xFieldSubType,\n yFieldSubType,\n xFieldIndex,\n yFieldIndex,\n x0FieldIndex,\n y0FieldIndex\n };\n};\n\n/**\n *\n *\n * @param {*} layerConfig\n * @param {*} fieldsConfig\n * @returns\n */\nexport const getValidTransform = (layerConfig, fieldsConfig, encodingFieldInf) => {\n let transformType;\n const {\n transform\n } = layerConfig;\n const {\n xField,\n yField,\n xFieldType,\n yFieldType\n } = encodingFieldInf;\n const groupByField = transform.groupBy;\n const groupByFieldMeasure = fieldsConfig[groupByField] && fieldsConfig[groupByField].def.type === FieldType.MEASURE;\n transformType = transform.type;\n if (!xField || !yField || groupByFieldMeasure || !groupByField || xFieldType === FieldType.DIMENSION &&\n yFieldType === FieldType.DIMENSION) {\n transformType = IDENTITY;\n }\n return transformType;\n};\n\n/**\n *\n *\n * @param {*} dataModel\n * @param {*} config\n * @param {*} transformType\n * @returns\n */\nexport const transformData = (dataModel, config, transformType, encodingFieldInf) => {\n const data = dataModel.getData({ withUid: true });\n const schema = data.schema;\n const transform = config.transform;\n const {\n xField,\n yField,\n xFieldType,\n yFieldType\n } = encodingFieldInf;\n const uniqueField = xFieldType === FieldType.MEASURE ? yField : xField;\n\n return transformFactory(transformType)(schema, data.data, {\n groupBy: transform.groupBy,\n uniqueField,\n sort: transform.sort || 'none',\n offset: transform.offset,\n orderBy: transform.orderBy,\n value: yFieldType === FieldType.MEASURE ? yField : xField\n }, data.uids);\n};\n\nexport const getIndividualClassName = (d, i, data, context) => {\n const className = context.config().individualClassName;\n let classNameStr = '';\n if (className instanceof Function) {\n classNameStr = className(d, i, data, context);\n }\n return classNameStr;\n};\n\n/*\n * This method resolves the x, y, x0 and y0 values from the transformed data.\n * It also checks the type of transformed data for example, if it is a stacked data\n * then it fetches the y and y0 values from the stacked data.\n * @param {Array.} transformedData transformed data\n * @param {Object} fieldsConfig field definitions\n * @param {string} transformType type of transformed data - stack, group or identity.\n * @return {Array.} Normalized data\n*/\nexport const getNormalizedData = (transformedData, fieldsConfig, encodingFieldInf, transformType) => {\n const transformedDataArr = transformType === IDENTITY ? [transformedData] : transformedData;\n const {\n xFieldType,\n xFieldIndex,\n yFieldIndex,\n x0FieldIndex,\n y0FieldIndex\n } = encodingFieldInf;\n const fieldsLen = Object.keys(fieldsConfig).length;\n /**\n * Returns normalized data from transformed data. It recursively traverses through\n * the transformed data if there it is nested.\n */\n return transformedDataArr.map((data) => {\n const values = transformType === GROUP ? data.values : data;\n return values.map((d) => {\n let pointObj = {};\n let tuple;\n if (transformType === STACK) {\n tuple = d.data || [];\n let y;\n let y0;\n let x;\n let x0;\n if (d[1] >= d[0]) {\n y = x0 = d[1];\n x = y0 = d[0];\n } else {\n y = x0 = d[0];\n x = y0 = d[1];\n }\n\n pointObj = xFieldType === FieldType.MEASURE ? {\n x,\n x0,\n y: tuple[yFieldIndex],\n y0: tuple[yFieldIndex]\n } : {\n x: tuple[xFieldIndex],\n x0: tuple[xFieldIndex],\n y,\n y0\n };\n pointObj._data = tuple;\n pointObj._id = tuple[fieldsLen];\n } else {\n pointObj = {\n x: d[xFieldIndex],\n y: d[yFieldIndex],\n x0: d[x0FieldIndex],\n y0: d[y0FieldIndex]\n };\n pointObj._data = d;\n pointObj._id = d[fieldsLen];\n }\n return pointObj;\n });\n }).filter(d => d.length);\n};\n\nexport const calculateDomainFromData = (data, encodingFieldInf, transformType) => {\n const {\n xFieldSubType,\n yFieldSubType,\n xField,\n yField,\n x0Field,\n y0Field\n } = encodingFieldInf;\n const domains = {};\n const yEnc = ENCODING.Y;\n const xEnc = ENCODING.X;\n if (xField) {\n domains.x = getDomainFromData(data, x0Field || transformType === STACK ? [xEnc, ENCODING.X0] : [xEnc, xEnc],\n xFieldSubType);\n }\n if (yField) {\n domains.y = getDomainFromData(data, y0Field || transformType === STACK ? [ENCODING.Y0, ENCODING.Y] :\n [yEnc, yEnc], yFieldSubType);\n }\n\n return domains;\n};\n\nexport const attachDataToVoronoi = (voronoi, points) => {\n voronoi.data([].concat(...points).filter(d => d._id !== undefined).map((d) => {\n const point = d.update;\n return {\n x: point.x,\n y: point.y,\n data: d\n };\n }));\n};\n\n/**\n *\n *\n * @param {*} target\n * @param {*} styles\n * @param {*} remove\n */\nexport const updateStyle = (target, styles, remove) => {\n for (const key in styles) {\n if ({}.hasOwnProperty.call(styles, key)) {\n target.style(key, remove ? null : styles[key]);\n }\n }\n};\n\n/**\n *\n *\n * @param {*} mount\n * @param {*} context\n */\nexport const animateGroup = (mount, context) => {\n let groupTransition;\n let update;\n const { transition, groupAnimateStyle } = context;\n const { duration, effect, disabled } = transition;\n if (groupAnimateStyle) {\n setStyles(mount.node(), groupAnimateStyle.enter);\n update = groupAnimateStyle.update;\n if (!disabled) {\n groupTransition = mount.transition()\n .ease(easeFns[effect])\n .duration(duration)\n .on('end', function () {\n updateStyle(selectElement(this), update, true);\n });\n } else {\n groupTransition = mount;\n }\n updateStyle(groupTransition, update);\n }\n};\n\nexport const positionPoints = (context, points) => {\n const positioner = context.encodingTransform();\n if (positioner) {\n return positioner(points, context, { smartLabel: context._dependencies.smartLabel });\n }\n return points;\n};\n\n/**\n * Gets the width of each group. It gets the width from axis if it is available for\n * example when the scale is nominal else it calculates the width from the\n * range of the axis and number of data points.\n *\n * @param {SimpleAxis} axis instance of axis\n * @param {number} minDiff Minimum difference between data points\n * @return {number} width of each bar\n * @private\n*/\nexport const getGroupSpan = (axis, minDiff) => {\n let groupSpan;\n const width = axis.getUnitWidth();\n const scale = axis.scale();\n const range = scale.range();\n const domain = scale.domain();\n !width ? groupSpan = (Math.abs(range[1] - range[0]) / Math.abs(domain[1] - domain[0])) * minDiff :\n (groupSpan = width);\n\n return groupSpan;\n};\n\nexport const getPlotMeasurement = (context, dimensionalValues) => {\n const fieldInfo = context.encodingFieldsInf();\n const axes = context.axes();\n const transformType = context.transformType();\n const config = context.config();\n const bandScale = context._bandScale;\n\n return ['x', 'y'].map((type) => {\n let span = 0;\n let groupSpan = 0;\n let padding = 0;\n let offsetValues = [];\n if (fieldInfo[`${type}FieldType`] === FieldType.DIMENSION) {\n let actualGroupWidth;\n const isTemporal = fieldInfo[`${type}FieldSubType`] === DimensionSubtype.TEMPORAL;\n const timeDiff = isTemporal ? context.dataProps().timeDiffs[type] : 0;\n const axis = axes[type];\n const pad = config[`pad${type.toUpperCase()}`];\n const innerPadding = config.innerPadding;\n const keys = dimensionalValues;\n const scale = axis.scale();\n groupSpan = getGroupSpan(axis, timeDiff);\n const isAxisBandScale = axis.constructor.type() === BAND;\n const axisPadding = axis.config().padding;\n // If it is a grouped bar then the width of each bar in a grouping is retrieved from\n // a band scale. The band scale will have range equal to width of one group of bars and\n // the domain is set to series keys.\n if (transformType === 'group') {\n const groupPadding = isAxisBandScale ? 0 : axisPadding * groupSpan / 2;\n bandScale.range([groupPadding, groupSpan - groupPadding]).domain(keys).paddingInner(innerPadding);\n span = bandScale.bandwidth();\n actualGroupWidth = groupSpan - (isAxisBandScale ? 0 : axisPadding * groupSpan);\n offsetValues = keys.map(key => bandScale(key) - (isAxisBandScale ? 0 : (groupSpan / 2)));\n } else if (pad !== undefined) {\n let offset;\n if (isAxisBandScale) {\n const step = scale.step();\n offset = scale.padding() * step;\n span = scale.bandwidth() + offset;\n } else {\n span = groupSpan;\n }\n offsetValues = keys.map(() => (isAxisBandScale ? -(offset / 2) : -(span / 2)));\n } else {\n padding = isAxisBandScale ? 0 : axisPadding * groupSpan;\n span = groupSpan - padding;\n actualGroupWidth = span;\n offsetValues = keys.map(() => (isAxisBandScale ? 0 : -(span / 2)));\n }\n\n groupSpan = actualGroupWidth;\n padding = isAxisBandScale ? axisPadding * axis.scale().step() : axisPadding * groupSpan;\n }\n\n return {\n span,\n offsetValues,\n groupSpan,\n padding\n };\n });\n};\n","import { nextFrame } from 'muze-utils';\nimport { getValidTransform, getEncodingFieldInf } from '../helpers';\nimport * as PROPS from '../enums/props';\n\nexport const listenerMap = context => [\n {\n props: [PROPS.TRANSFORMED_DATA],\n listener: fetch => fetch(PROPS.DATA, PROPS.CONFIG, (dataModel, config) => {\n const dataModelValue = dataModel.value;\n const configValue = config.value;\n const encodingValue = configValue && configValue.encoding;\n if (dataModelValue && encodingValue) {\n const fieldsConfig = dataModelValue.getFieldsConfig();\n const encodingFieldsInf = getEncodingFieldInf(encodingValue, fieldsConfig);\n context.encodingFieldsInf(encodingFieldsInf);\n context.transformType(getValidTransform(configValue, fieldsConfig, encodingFieldsInf));\n return context.getTransformedData(dataModelValue, configValue, context.transformType(),\n encodingFieldsInf);\n }\n return null;\n }),\n type: 'computed'\n },\n {\n props: [PROPS.NORMALIZED_DATA],\n listener: fetch => fetch(PROPS.TRANSFORMED_DATA, (transformedData) => {\n const transformedDataValue = transformedData.value;\n if (transformedDataValue) {\n const fieldsConfig = context.data().getFieldsConfig();\n return context.getNormalizedData(transformedDataValue, fieldsConfig);\n }\n return null;\n }),\n type: 'computed'\n },\n {\n props: [PROPS.DOMAIN],\n listener: fetch => fetch(PROPS.NORMALIZED_DATA, (normalizedData) => {\n const normalizedDataValue = normalizedData.value;\n if (normalizedDataValue) {\n return context.calculateDomainFromData(normalizedDataValue, context.encodingFieldsInf(),\n context.data().getFieldsConfig());\n }\n return null;\n }),\n type: 'computed'\n },\n {\n props: [PROPS.DATA],\n listener: (data) => {\n if (data[1]) {\n nextFrame(() => {\n context.store().commit(PROPS.DATA_UPDATED, true);\n });\n }\n },\n type: 'registerImmediateListener'\n },\n {\n props: [PROPS.MOUNT, PROPS.DATA_UPDATED],\n listener: (mount, dataUpdated) => {\n if (mount[1] && dataUpdated[1]) {\n context.render(mount[1]);\n context.dependencies().throwback.commit('onlayerdraw', true);\n }\n },\n type: 'registerChangeListener'\n }\n];\n\n","import { mergeRecursive } from 'muze-utils';\nimport * as PROPS from '../enums/props';\n\nexport const defaultOptions = {\n [PROPS.CONFIG]: {\n value: null,\n meta: {\n sanitization: (config, oldConfig, context) => {\n const constructor = context.constructor;\n const newConf = mergeRecursive({}, constructor.defaultConfig());\n return constructor.defaultPolicy(newConf, config);\n }\n }\n },\n [PROPS.DATA]: {\n value: null,\n meta: {\n preset: (data, context) => {\n if (context._cacheEnabled) {\n context._cachedData.push(data);\n } else {\n context._cachedData = [data];\n }\n }\n }\n },\n [PROPS.MOUNT]: {\n value: null\n },\n [PROPS.AXES]: {\n value: null\n },\n [PROPS.MEASUREMENT]: {\n value: null\n }\n};\n","import {\n getUniqueId,\n mergeRecursive,\n Store,\n FieldType,\n selectElement,\n ReservedFields,\n registerListeners,\n transactor,\n DataModel,\n clone\n} from 'muze-utils';\nimport { SimpleLayer } from '../simple-layer';\nimport * as PROPS from '../enums/props';\nimport {\n transformData,\n calculateDomainFromData,\n getNormalizedData,\n applyInteractionStyle\n} from '../helpers';\nimport { listenerMap } from './listener-map';\nimport { defaultOptions } from './default-options';\n\n/**\n * An abstract class which gives defination of common layer functionality like\n * - transfromation data for various {@link mode}\n * - calculating data domain\n * - linking dependent layers\n * - merging policy of configuration\n * - interaction sideffect helpers\n * - retrieving dom elements from data using id\n * - retrieving the physical dimensions of marks\n * - disposing layer\n *\n * Every layer has to extend base layer and give concrete definition.\n * This layer does not have any default visual. A new layer has to define the logic of `render` for rendering the\n * visuals\n *\n * @public\n * @class\n * @namespace Muze\n */\nexport default class BaseLayer extends SimpleLayer {\n\n /**\n * Creates a layer using a configuration and data.\n *\n * @public\n *\n * @param {DataModel} data Instance of DataModel to be used. This DataModel instance serves as the data for a layer.\n * @param {Object} axes Axes instances to be used for rendering the layer. Axes are used for mapping data from\n * value to px.\n * @param {SimpleAxis} axes.x X axis of the layer. Based on the type of variable it gets instance of BandAxis,\n * TimeAxis, ContinuousAxis\n * @param {SimpleAxis} axes.y X axis of the layer. Based on the type of variable it gets instance of BandAxis,\n * TimeAxis, ContinuousAxis\n * @param {ColorAxis} axes.color Axis for coloring a layer using color interpolators\n * @param {ShapeAxis} axes.shape Axis for providing a shape\n * @param {SizeAxis} axes.shape Axis for determining size of a mark using size interpolator\n * @param {LayerConfig} config Configuration of the layer\n * @param {Object} dependencies Dependencies of the layer\n * @param {SmartLabel} smartLabel Smartlabel singleton instance\n */\n constructor (data, axes, config, dependencies) {\n super();\n this.store(new Store({\n DATA: null,\n [PROPS.DATA_UPDATED]: null\n }));\n transactor(this, defaultOptions, this.store().model);\n this.data(data);\n this.axes(axes);\n this.config(config);\n this.alias(this.constructor.formalName() + getUniqueId());\n this.dependencies(dependencies);\n this._points = [];\n this._cachedData = [];\n this._id = getUniqueId();\n this._measurement = {};\n registerListeners(this, listenerMap);\n }\n\n /**\n * Creates a layer instance\n * @return {BaseLayer} Instance of a layer\n */\n static create (...params) {\n return new this(...params);\n }\n\n /**\n * Default configuration of the layer. This configuration gets merged to the user passed configuration using a\n * plolicy. Base layer only returns part of configuraion, any layer overridding base layer should return its own\n * configuration.\n *\n * @public\n * @static\n *\n * @return {Object} Default configuration\n */\n static defaultConfig () {\n return {\n transform: {\n type: 'identity'\n }\n };\n }\n\n /**\n * Policy defines how user config gets merged to default config. The default policy here does a deep copy\n * operation.\n * Any policy which does more than deep copying should define the policy as a static member.\n *\n * @static\n * @public\n *\n * @param {LayerConfig} conf Configuration with which the user config will be merged\n * @param {LayerConfig} userConf Configuration given by the user\n *\n * @return {LayerConfig} Merged layer configuration\n */\n static defaultPolicy (conf, userConf) {\n return mergeRecursive(conf, userConf);\n }\n\n /**\n * Determines a name for a layer. This name of the layer is used in the input data to refer to this layer.\n * ```\n * .layer([\n * mark: 'bar',\n * encoding: { ... }\n * ])\n * ```\n *\n * @static\n * @public\n *\n * @returns {string} name of layer\n */\n static formalName () {\n return 'base';\n }\n\n store (...store) {\n if (store.length) {\n this._store = store[0];\n return this;\n }\n return this._store;\n }\n\n encodingFieldsInf (...fieldsInf) {\n if (fieldsInf.length) {\n this._encodingFieldsInf = fieldsInf[0];\n return this;\n }\n return this._encodingFieldsInf;\n }\n\n encodingTransform (...encodingTransform) {\n if (encodingTransform.length) {\n this._encodingTransform = encodingTransform[0];\n return this;\n }\n return this._encodingTransform;\n }\n\n /**\n * Provides a alias for a layer. Like it's possible to have same layer (like bar) multiple times, but among multiple\n * layers of same type if one layer has to be referred, alias is used. If no alias is given then `formalName` is set\n * as the alias name.\n *\n * @public\n *\n * If used as setter\n * @param {string} alias Name of the alias\n * @return {BaseLayer} Instance of current base layer\n *\n * If used as getter\n * @return {string} Alias of the current layer\n */\n alias (...params) {\n if (params.length) {\n this._alias = params[0];\n return this;\n }\n return this._alias || this.constructor.formalName();\n }\n\n dependencies (...params) {\n if (params.length) {\n this._dependencies = params[0];\n return this;\n }\n return this._dependencies;\n }\n\n enableCaching () {\n this._cacheEnabled = true;\n return this;\n }\n\n clearCaching () {\n this._cacheEnabled = false;\n return this.data(this._cachedData[0]);\n }\n\n /**\n * Serialize the schema. Merge config is used for serialization.\n *\n * @public\n *\n * @return {LayerConfig} Serialized schema\n */\n serialize () {\n return this.config();\n }\n\n /**\n * Returns the unique identifier of this layer. Id is auto generated during the creation proceess of a schema.\n *\n * @return {string} id of the layer\n */\n id () {\n return this._id;\n }\n\n /**\n * Gets the transform method from transform factory based on type of transform. It then calls the\n * transform method with the data and passes the configuration parameters of transform such as\n * groupBy, value field, etc.\n *\n * @public\n *\n * @param {DataModel} dataModel Instance of DataModel\n * @param {Object} config Configuration for transforming data\n * @return {Array.} Transformed data.\n */\n getTransformedData (dataModel, config, transformType, encodingFieldsInf) {\n return transformData(dataModel, config, transformType, encodingFieldsInf);\n }\n\n /**\n * Calculates the domain from the data.\n * It checks the type of field and calculates the domain based on that. For example, if it\n * is a quantitative or temporal field, then it calculates the min and max from the data or\n * if it is a nominal field then it gets all the values from the data of that field.\n * @param {Array} data DataArray\n * @param {Object} fieldsConfig Configuration of fields\n * @return {Array} Domain values array.\n */\n calculateDomainFromData (data) {\n let domains = {};\n const isEmpty = this.data().isEmpty();\n\n if (!isEmpty) {\n domains = calculateDomainFromData(data, this.encodingFieldsInf(), this.transformType());\n }\n return domains;\n }\n\n shouldDrawAnchors () {\n return false;\n }\n\n /**\n * Returns the domain for the axis.\n *\n * @param {string} encodingType type of encoding x, y, etc.\n * @return {Object} Axis domains\n */\n getDataDomain (encodingType) {\n const domains = this.store().get(PROPS.DOMAIN);\n return encodingType !== undefined ? domains[encodingType] || [] : domains;\n }\n\n /**\n * Returns the domain for the axis.\n *\n * @param {string} encodingType type of encoding x, y, etc.\n * @return {Object} Axis domains\n */\n getNormalizedData (transformedData, fieldsConfig) {\n return getNormalizedData(transformedData, fieldsConfig, this.encodingFieldsInf(), this.transformType());\n }\n\n /**\n * Abstract method for getting nearest point\n * @return {BaseLayer} Instance of base layer\n */\n getNearestPoint () {\n return null;\n }\n\n applyInteractionStyle (interactionType, selectionSet, apply) {\n const interactionConfig = this.config().interaction || {};\n\n const interactionStyles = interactionConfig[interactionType];\n if (interactionStyles) {\n applyInteractionStyle(this, selectionSet, interactionStyles, {\n apply,\n interactionType\n });\n }\n }\n\n /**\n *\n *\n * @returns\n * @memberof BaseLayer\n */\n transformType (...transformType) {\n if (transformType.length) {\n this._transformType = transformType[0];\n return this;\n }\n return this._transformType;\n }\n\n /**\n * Renders the layer\n * @return {BaseLayer} Instance of the layer.\n */\n render () {\n return this;\n }\n\n /**\n *\n *\n * @returns\n * @memberof BaseLayer\n */\n elemType () {\n return 'g';\n }\n\n /**\n * Disposes the entire layer\n * @return {BaseLayer} Instance of layer.\n */\n remove () {\n this.store().unsubscribeAll();\n selectElement(this.mount()).remove();\n return this;\n }\n\n /**\n * Stores point in an object with key as the categorical value or temporal value\n *\n * @param {string} key categorical value or temporal value\n * @param {Object} data Information of the data point\n * @return {BarLayer} Instance of bar layer\n */\n cachePoint (key, data) {\n if (key === null) {\n return this;\n }\n const pointMap = this._pointMap;\n !pointMap[key] && (pointMap[key] = []);\n pointMap[key].push(data);\n return this;\n }\n\n /**\n *\n *\n * @param {*} dataProps\n * @returns\n * @memberof BaseLayer\n */\n dataProps (...dataProps) {\n if (dataProps.length) {\n this._dataProps = dataProps[0];\n return this;\n }\n return this._dataProps;\n }\n\n /**\n *\n *\n * @param {*} data\n * @param {*} id\n * @returns\n * @memberof BaseLayer\n */\n getIdentifiersFromData (data) {\n const schema = this.data().getData().schema;\n const fieldsConfig = this.data().getFieldsConfig();\n const identifiers = [[], []];\n const {\n xFieldType,\n yFieldType,\n xField,\n yField\n } = this.encodingFieldsInf();\n\n const [xMeasure, yMeasure] = [xFieldType, yFieldType].map(type => type === FieldType.MEASURE);\n schema.forEach((d, i) => {\n const name = d.name;\n if (fieldsConfig[name].def.type === FieldType.DIMENSION) {\n identifiers[0].push(name);\n identifiers[1].push(data[i]);\n }\n });\n\n if (xMeasure && yMeasure) {\n const xMeasureIndex = fieldsConfig[xField].index;\n const yMeasureIndex = fieldsConfig[yField].index;\n identifiers[0].push(...[xField, yField]);\n identifiers[1].push(...[data[xMeasureIndex], data[yMeasureIndex]]);\n }\n return identifiers;\n }\n\n getPlotSpan () {\n return {\n x: 0,\n y: 0\n };\n }\n\n getPlotPadding () {\n return {\n x: 0,\n y: 0\n };\n }\n\n /**\n *\n *\n * @param {*} identifiers\n * @returns\n * @memberof BaseLayer\n */\n getPointsFromIdentifiers (identifiers, config = {}) {\n const getAllAttrs = config.getAllAttrs;\n const getBBox = config.getBBox;\n if (!this.data()) {\n return [];\n }\n let fieldNames;\n let values;\n if (identifiers instanceof DataModel) {\n const dataObj = identifiers.getData();\n fieldNames = dataObj.schema.map(d => d.name);\n values = dataObj.data;\n } else {\n fieldNames = identifiers[0];\n values = identifiers.slice(1, identifiers.length);\n }\n\n const points = this._points;\n const fieldsConfig = this.data().getFieldsConfig();\n\n const filteredPoints = [].concat(...points).filter((point) => {\n const { _data, _id } = point;\n\n return fieldNames.every((field, idx) => {\n if (field in fieldsConfig && fieldsConfig[field].def.type === FieldType.DIMENSION) {\n return values.findIndex(d => d[idx] === _data[fieldsConfig[field].index]) !== -1;\n } else if (field === ReservedFields.ROW_ID) {\n return values.findIndex(d => d[idx] === _id) !== -1;\n } return true;\n });\n });\n return getAllAttrs ? filteredPoints : filteredPoints.map((d) => {\n const obj = clone(d);\n if (getBBox) {\n const update = obj.update || obj;\n if (obj.size !== undefined) {\n const sizeVal = Math.sqrt(obj.size / Math.PI) * 2;\n update.width = sizeVal;\n update.height = sizeVal;\n update.x -= sizeVal / 2;\n update.y -= sizeVal / 2;\n } else {\n if (update.width === undefined) {\n update.width = 2;\n }\n if (update.height === undefined) {\n update.height = 2;\n }\n }\n }\n\n return obj.update || obj;\n }).sort((a, b) => a.y - b.y);\n }\n\n getTransformedDataFromIdentifiers (identifiers) {\n const { data: identifierData, schema: identifierSchema } = identifiers.getData();\n const normalizedData = this.store().get(PROPS.NORMALIZED_DATA);\n const fieldsConfig = this.data().getFieldsConfig();\n const {\n yField,\n xField,\n yFieldType,\n xFieldType\n } = this.encodingFieldsInf();\n let measureIndex;\n let enc;\n if (xFieldType === FieldType.MEASURE) {\n measureIndex = fieldsConfig[xField].index;\n enc = 'x';\n } else if (yFieldType === FieldType.MEASURE) {\n measureIndex = fieldsConfig[yField].index;\n enc = 'y';\n }\n\n const transformedData = [];\n normalizedData.forEach((dataArr) => {\n dataArr.forEach((dataObj) => {\n const tupleArr = dataObj._data;\n const exist = identifierSchema.every((obj, i) =>\n identifierData.findIndex(d => tupleArr[fieldsConfig[obj.name].index] === d[i]) !== -1);\n if (exist) {\n const transformedVal = dataObj[enc];\n const row = dataObj._data;\n const tuple = {};\n for (const key in fieldsConfig) {\n const index = fieldsConfig[key].index;\n tuple[key] = row[index];\n if (index === measureIndex) {\n tuple[key] = transformedVal;\n }\n }\n transformedData.push(tuple);\n }\n });\n });\n\n return [transformedData, this.data().getData().schema];\n }\n\n /**\n *\n *\n * @param {*} set\n * @returns\n * @memberof BaseLayer\n */\n getPlotElementsFromSet (set) {\n return selectElement(this.mount()).selectAll(this.elemType()).filter(data =>\n (data ? set.indexOf(data._id) !== -1 : false));\n }\n}\n","import {\n selectElement,\n makeElement,\n pathInterpolators,\n Symbols\n} from 'muze-utils';\nimport { updateStyle } from '../../helpers';\n\nconst line = Symbols.line;\n\n/**\n * Draws a line from the points\n * Generates a svg path string\n * @param {Object} params Contains container, points and interpolate attribute.\n */\nexport const drawLine = (context) => {\n let filteredPoints;\n const { container, points, interpolate, connectNullData, className, style, transition } = context;\n const mount = selectElement(container).attr('class', className);\n const curveInterpolatorFn = pathInterpolators[interpolate];\n const linepath = line()\n .curve(curveInterpolatorFn)\n .x(d => d.update.x)\n .y(d => d.update.y)\n .defined(d => d.update.y !== null);\n\n filteredPoints = points;\n if (connectNullData) {\n filteredPoints = points.filter(d => d.update.y !== null);\n }\n\n updateStyle(mount, style);\n let element = makeElement(mount, 'path', [1]);\n element.classed(points[0].className, true);\n if (!transition.disabled) {\n element = element.transition().duration(transition.duration);\n }\n element.attr('d', linepath(filteredPoints))\n .style('fill-opacity', 0);\n return element;\n};\n","import { CLASSPREFIX } from '../../enums/constants';\n\nexport const defaultConfig = {\n classPrefix: CLASSPREFIX,\n defClassName: 'layer-line',\n className: '',\n interpolate: 'linear',\n transform: {\n type: 'group'\n },\n interaction: {\n highlight: [{\n type: 'stroke',\n intensity: [0, 0, -15, 0]\n }],\n fade: [{\n type: 'stroke',\n intensity: [0, 0, +15, 0]\n }],\n focus: [{\n type: 'stroke',\n intensity: [0, 0, +15, 0]\n }]\n },\n nearestPointThreshold: 20,\n encoding: {\n color: {},\n x: {},\n y: {},\n strokeOpacity: {\n value: 1\n }\n },\n transition: {\n effect: 'cubic',\n duration: 1000\n },\n connectNullData: false\n};\n\n","import {\n Voronoi,\n getQualifiedClassName,\n selectElement,\n makeElement,\n FieldType,\n getObjProp\n} from 'muze-utils';\nimport { BaseLayer } from '../../base-layer';\nimport { drawLine } from './renderer';\nimport { defaultConfig } from './default-config';\nimport { ENCODING } from '../../enums/constants';\nimport * as PROPS from '../../enums/props';\nimport {\n attachDataToVoronoi,\n animateGroup,\n getLayerColor,\n positionPoints,\n getIndividualClassName\n} from '../../helpers';\n\nimport './styles.scss';\n\n/**\n * Line Layer creates a line plot.\n * Example :-\n * const config = {\n * encoding = {\n * x: {\n * field: 'date'\n * },\n * y: {\n * field: 'sales'\n * }\n * }\n * };\n * const linelayer = layerFactory.getLayer('line', [dataModel, axes, config]);\n * linelayer.render(container);\n * @class\n */\nexport default class LineLayer extends BaseLayer {\n\n /**\n *Creates an instance of LineLayer.\n * @param {*} args\n * @memberof LineLayer\n */\n constructor (...args) {\n super(...args);\n this._voronoi = new Voronoi();\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof LineLayer\n */\n static formalName () {\n return 'line';\n }\n\n /**\n *\n *\n * @returns\n * @memberof LineLayer\n */\n elemType () {\n return 'path';\n }\n\n /**\n * Default configuration of line layer\n * @return {Object} Default configuration of layer\n */\n static defaultConfig () {\n return defaultConfig;\n }\n\n /**\n *\n *\n * @static\n * @param {*} conf\n * @param {*} userConf\n * @returns\n * @memberof LineLayer\n */\n static defaultPolicy (conf, userConf) {\n const config = BaseLayer.defaultPolicy(conf, userConf);\n const encoding = config.encoding;\n const transform = config.transform;\n const colorField = encoding.color && encoding.color.field;\n\n if (colorField && !transform.groupBy) {\n transform.groupBy = colorField;\n }\n return config;\n }\n\n /**\n * Returns the draw method for line\n * @return {Function} Draw method of line layer\n */\n getDrawFn () {\n return drawLine;\n }\n\n /**\n * Applies selection styles to the elements that fall within the selection set.\n * @param {Array} selectionSet Array of tuple ids.\n * @param {Object} config Configuration for selection.\n * @return {BarLayer} Instance of bar layer.\n */\n highlightPoint () {\n return this;\n }\n\n /**\n * Removes selection styles to the elements that fall within the selection set.\n * @param {Array} selectionSet Array of tuple ids.\n * @param {Object} config Configuration for selection.\n * @return {BarLayer} Instance of bar layer.\n */\n dehighlightPoint () {\n return this;\n }\n\n focusSelection () {\n return this;\n }\n\n focusOutSelection () {\n return this;\n }\n\n fadeOutSelection () {\n return this;\n }\n\n unfadeSelection () {\n return this;\n }\n\n shouldDrawAnchors () {\n return true;\n }\n\n /**\n * Generates the x and y positions for each point\n * @param {Array} data Data Array\n * @param {Object} encoding Visual Encodings of the layer\n * @param {Object} axes Contains the axis\n * @param {number} seriesIndex index of series\n * @return {Array} Array of points\n */\n translatePoints (data, encodingFieldsInf, axes) {\n let points = [];\n const xAxis = axes.x;\n const yAxis = axes.y;\n const colorAxis = axes.color;\n const encoding = this.config().encoding;\n const { xFieldType, yFieldType } = encodingFieldsInf;\n const isXDim = xFieldType === FieldType.DIMENSION;\n const isYDim = yFieldType === FieldType.DIMENSION;\n const key = isXDim ? ENCODING.X : (isYDim ? ENCODING.Y : null);\n const colorEncoding = encoding.color;\n const colorField = colorEncoding.field;\n const fieldsConfig = this.data().getFieldsConfig();\n const colorFieldIndex = colorField && fieldsConfig[colorField].index;\n const style = {};\n const meta = {};\n\n points = data.map((d, i) => {\n const xPx = xAxis.getScaleValue(d.x) + xAxis.getUnitWidth() / 2;\n const yPx = yAxis.getScaleValue(d.y);\n const { color, rawColor } = getLayerColor({ datum: d, index: i }, {\n colorEncoding, colorAxis, colorFieldIndex });\n\n style.stroke = color;\n style['fill-opacity'] = 0;\n meta.stateColor = {};\n meta.originalColor = rawColor;\n meta.colorTransform = {};\n\n const point = {\n enter: {},\n update: {\n x: xPx,\n y: d.y === null ? null : yPx\n },\n style,\n _data: d._data,\n _id: d._id,\n rowId: d._id,\n source: d._data,\n meta\n };\n point.className = getIndividualClassName(d, i, data, this);\n this.cachePoint(d[key], point);\n return point;\n });\n points = positionPoints(this, points);\n return points;\n }\n\n /**\n * Renders the line plot\n * @param {SVGElement} container svg element\n * @return {LineLayer} instance of line layer\n */\n render (container) {\n let points;\n let seriesClassName;\n let style;\n\n const config = this.config();\n const {\n encoding,\n interpolate,\n className,\n defClassName,\n transition\n } = config;\n const store = this._store;\n const normalizedData = store.get(PROPS.NORMALIZED_DATA);\n const transformedData = store.get(PROPS.TRANSFORMED_DATA);\n const fieldsConfig = this.data().getFieldsConfig();\n const axes = this.axes();\n const keys = transformedData.map(d => d.key);\n const qualifiedClassName = getQualifiedClassName(defClassName, this.id(), config.classPrefix);\n const containerSelection = selectElement(container);\n const colorField = encoding.color.field;\n const colorFieldIndex = fieldsConfig[colorField] && fieldsConfig[colorField].index;\n\n this._points = [];\n this._pointMap = {};\n containerSelection.classed(qualifiedClassName.join(' '), true);\n containerSelection.classed(className, true);\n makeElement(container, 'g', normalizedData, null, {\n enter: (group) => {\n animateGroup(group, {\n transition,\n groupAnimateStyle: {\n enter: {\n 'stroke-opacity': 0,\n 'fill-opacity': this.getPathStyle()['fill-opacity']\n },\n update: {\n 'stroke-opacity': encoding.strokeOpacity.value\n }\n }\n });\n },\n update: (group, dataArr, i) => {\n points = this.translatePoints(dataArr, this.encodingFieldsInf(), axes, i);\n this._points.push(points);\n seriesClassName = `${qualifiedClassName[0]}-${keys[i] || i}`.toLowerCase();\n\n let color;\n const colorValFn = encoding.color.value;\n const colorVal = points.find(d => d._data[colorFieldIndex] !== null &&\n d._data[colorFieldIndex] !== undefined);\n\n if (colorValFn) {\n color = colorValFn(dataArr, i, normalizedData);\n } else {\n color = axes.color.getColor(colorVal && colorVal._data[colorFieldIndex]);\n }\n\n style = this.getPathStyle(color);\n this.getDrawFn()({\n container: group.node(),\n interpolate,\n points,\n className: seriesClassName,\n transition,\n style: style || {},\n connectNullData: config.connectNullData\n });\n }\n }, d => d[0]._data[colorFieldIndex] || d[0]._id);\n\n attachDataToVoronoi(this._voronoi, this._points);\n return this;\n }\n\n /**\n * Get the css styles need to be applied on the line path\n * @param {string} color Color value\n * @return {Object} Path styles\n */\n getPathStyle (color) {\n return {\n stroke: color,\n 'fill-opacity': '0'\n };\n }\n\n /**\n * Gets the nearest point closest to the given position\n * @param {number} x x position\n * @param {number} y y position\n * @return {Object} Nearest point information\n */\n getNearestPoint (x, y, config) {\n let searchRadius = config.searchRadius;\n const data = this.data();\n\n if (!data || (data && data.isEmpty())) {\n return null;\n }\n\n searchRadius = searchRadius !== undefined ? searchRadius : this.config().nearestPointThreshold;\n const point = this._voronoi.find(x, y, searchRadius);\n const dimensions = getObjProp(point, 'data', 'data', 'update');\n\n if (point) {\n const { _data, _id } = point.data.data;\n const identifiers = this.getIdentifiersFromData(_data, _id);\n return {\n id: identifiers,\n dimensions: [{\n x: dimensions.x,\n y: dimensions.y,\n width: 2,\n height: 2\n }],\n layerId: this.id()\n };\n }\n return null;\n }\n}\n","import {\n easeFns,\n selectElement,\n pathInterpolators,\n Symbols\n} from 'muze-utils';\n\nconst area = Symbols.area;\n/**\n * Draws a line from the points\n * Generates a svg path string\n * @param {Object} params Contains container, points and interpolate attribute.\n */\nconst /* istanbul ignore next */ drawArea = (params) => {\n let filteredPoints;\n const { container, points, style, transition, className, connectNullData, interpolate } = params;\n\n const { effect: easeEffect, duration } = transition;\n const mount = selectElement(container);\n const curveInterpolatorFn = pathInterpolators[interpolate];\n const selection = mount.selectAll('path').data([params.points]);\n const [enterAreaPath, updateAreaPath] = ['enter', 'update'].map(e => area().curve(curveInterpolatorFn)\n .x(d => d[e].x)\n .y1(d => d[e].y)\n .y0(d => d[e].y0)\n .defined(d => d[e].y !== null\n ));\n\n filteredPoints = points;\n mount.attr('class', className);\n if (connectNullData) {\n filteredPoints = points.filter(d => d.update.y !== null);\n }\n const selectionEnter = selection.enter().append('path').attr('d', enterAreaPath(filteredPoints));\n selection.merge(selectionEnter).transition().ease(easeFns[easeEffect])\n .duration(duration)\n .attr('d', updateAreaPath(filteredPoints))\n .each(function (d) {\n const element = selectElement(this);\n\n element.classed(d[0].className, true);\n Object.keys(style).forEach(key => element.style(key, style[key]));\n });\n};\n\nexport default drawArea;\n","import { FieldType } from 'muze-utils';\nimport { defaultConfig } from './default-config';\nimport { LineLayer } from '../line';\nimport drawArea from './renderer';\nimport './styles.scss';\nimport { STACK, ENCODING } from '../../enums/constants';\nimport { getAxesScales, positionPoints, getLayerColor, getIndividualClassName } from '../../helpers';\n\n/**\n * Area Layer creates a area plot.\n * @example\n * const config = {\n * encoding = {\n * x: {\n * field: 'date'\n * },\n * // Top y value\n * y: {\n * field: 'maxTemp'\n * },\n * // Base y value\n * y0: {\n * field: 'minTemp\n * }\n * }\n * };\n * const areaLayer = layerFactory.getLayer('area', [dataModel, axes, config]);\n * areaLayer.render(container);\n * @class\n */\nexport default class AreaLayer extends LineLayer {\n /** oation of line layer\n * @return {Object} Default configuration of layer\n */\n static defaultConfig () {\n return defaultConfig;\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof AreaLayer\n */\n static formalName () {\n return 'area';\n }\n\n /**\n * Calculates the domain from data. It calls its parent class's method which is line layer\n * to get the domain and overwrites the domain according to its need.\n * @return {Array} Domain values\n */\n calculateDomainFromData (data, encodingFieldsInf, fieldsConfig) {\n const domains = super.calculateDomainFromData(data, fieldsConfig);\n [ENCODING.X, ENCODING.Y].forEach((type) => {\n const { [`${type}FieldType`]: fieldType } = encodingFieldsInf;\n if (fieldType === FieldType.MEASURE) {\n domains[type][0] = Math.min(domains[type][0], 0);\n }\n });\n return domains;\n }\n\n /**\n * Returns the drawing method of this layer\n * @return {Function} Draw method\n */\n getDrawFn () {\n return drawArea;\n }\n\n /**\n * Generates the x and y positions for each point\n * @param {Array} data Data Array\n * @param {Object} encoding Visual Encodings of the layer\n * @param {Object} axes Contains the axis\n * @return {Array} Array of points\n */\n translatePoints (data, encodingFieldsInf, axes) {\n let points = [];\n const transformType = this.transformType();\n const colorAxis = axes.color;\n const config = this.config();\n const encoding = config.encoding;\n const colorEncoding = encoding.color;\n const colorField = colorEncoding.field;\n const fieldsConfig = this.data().getFieldsConfig();\n const colorFieldIndex = colorField && fieldsConfig[colorField].index;\n const { xField, yField, y0Field } = encodingFieldsInf;\n const {\n xAxis,\n yAxis\n } = getAxesScales(axes);\n const classNameFn = config.individualClassName;\n const isXDim = fieldsConfig[xField] && fieldsConfig[xField].def.type === FieldType.DIMENSION;\n const isYDim = fieldsConfig[yField] && fieldsConfig[yField].def.type === FieldType.DIMENSION;\n const key = isXDim ? 'x' : (isYDim ? 'y' : null);\n points = data.map((d, i) => {\n const xPx = xAxis.getScaleValue(d.x) + xAxis.getUnitWidth() / 2;\n const yPx = yAxis.getScaleValue(d.y);\n const y0Px = (y0Field || transformType === STACK) ? yAxis.getScaleValue(d.y0) : yAxis.getScaleValue(0);\n const { color, rawColor } = getLayerColor({ datum: d, index: i }, {\n colorEncoding, colorAxis, colorFieldIndex });\n const style = {};\n const meta = {};\n style.fill = color;\n // style['fill-opacity'] = 0;\n meta.stateColor = {};\n meta.originalColor = rawColor;\n meta.colorTransform = {};\n const point = {\n enter: {\n x: xPx,\n y: d.y === null ? d.y : yAxis.getScaleValue(0),\n y0: d.y0 === null ? d.y0 : yAxis.getScaleValue(0)\n },\n update: {\n x: xPx,\n y: d.y === null ? d.y : yPx,\n y0: d.y0 === null ? d.y0 : y0Px\n },\n _id: d._id,\n _data: d._data,\n source: d._data,\n rowId: d._id,\n className: classNameFn ? classNameFn(d, i, data, this) : '',\n style,\n meta\n };\n point.className = getIndividualClassName(d, i, data, this);\n this.cachePoint(d[key], point);\n return point;\n });\n points = positionPoints(this, points);\n return points;\n }\n\n /**\n * Get the css styles need to be applied on the line path\n * @param {string} color Color value\n * @return {Object} Path styles\n */\n getPathStyle (color) {\n return {\n fill: color\n };\n }\n}\n\n","import { CLASSPREFIX } from '../../enums/constants';\n\nexport const defaultConfig = {\n classPrefix: CLASSPREFIX,\n defClassName: 'layer-arc',\n padding: { top: 1, bottom: 1, left: 1, right: 1 },\n className: '',\n minOuterRadius: 10,\n interaction: {\n highlight: [{\n type: 'fill',\n intensity: [0, 0, -15, 0]\n }],\n fade: [{\n type: 'fill',\n intensity: [0, 0, +15, 0]\n }],\n focus: [{\n type: 'fill',\n intensity: [0, 0, +15, 0]\n }]\n },\n height: 100,\n width: 100,\n sort: '',\n cornerRadius: 0,\n padAngle: 0,\n padRadius: 0,\n startAngle: 0,\n endAngle: 360,\n colors: ['#F44336', 'blue', 'green', 'yellow', 'orange', 'purple'],\n transform: {\n type: 'identity'\n },\n encoding: {\n 'stroke-width': {\n value: '2px'\n },\n 'stroke-linejoin': {\n value: 'round'\n },\n angle: {\n value: '1'\n },\n radius: {\n value: '1'\n },\n opacity: {\n value: '1'\n },\n color: {\n value: '1'\n },\n shape: {\n value: '1'\n },\n size: {\n value: '1'\n }\n },\n innerRadiusFixer: 10,\n transition: {\n effect: 'cubic',\n duration: 500\n },\n states: {\n highlight: {\n className: `${CLASSPREFIX}-layer-arc-highlight`\n },\n fadeout: {\n className: `${CLASSPREFIX}-layer-arc-fadeout`\n },\n selected: {\n className: `${CLASSPREFIX}-layer-arc-selected`\n }\n }\n};\n\n","import {\n makeElement,\n selectElement,\n getQualifiedClassName,\n isSimpleObject,\n getDomainFromData,\n Symbols,\n FieldType,\n ReservedFields\n} from 'muze-utils';\nimport { defaultConfig } from './default-config';\nimport { BaseLayer } from '../../base-layer';\nimport * as PROPS from '../../enums/props';\nimport { ASCENDING, OUTER_RADIUS_VALUE } from '../../enums/constants';\nimport { getIndividualClassName } from '../../helpers';\nimport { getRangeValue, getRadiusRange, tweenPie, tweenExitPie, getFieldIndices, getPreviousPoint } from './arc-helper';\nimport './styles.scss';\n\nconst pie = Symbols.pie;\nconst arc = Symbols.arc;\n\n/**\n * Arc Layer creates a plot with polar coordinates\n * Example :-\n * const config = {\n * height: 100,\n * width: 100,\n * startAngle: 0,\n * endAngle: Math.PI,\n * cornerRadius: 10,\n * minOuterRadius: 10,\n * outerRadius: 10,\n * innerRadius: 5,\n * padAngle: 2,\n * padRadius: 2,\n * colors: []\n * padding: {top: 10, bottom: 10, left: 10, right: 10},\n * encoding = {\n * angle: {\n * field: 'date' //Maps to angle of arc\n * },\n * radius: {\n * field: 'sales' // Maps to radius of arc\n * }\n * }\n * };\n * @class\n */\nexport default class ArcLayer extends BaseLayer {\n\n constructor (data, axes, config, dependencies) {\n super(data, axes, config, dependencies);\n this._prevPieData = {};\n }\n\n /**\n * returns the default configuration of the layer\n *\n * @static\n * @return {Object} Default configuration for arc layer\n * @memberof ArcLayer\n */\n static defaultConfig () {\n return defaultConfig;\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof ArcLayer\n */\n static formalName () {\n return 'arc';\n }\n\n /**\n *\n *\n * @returns\n * @memberof ArcLayer\n */\n elemType () {\n return 'path';\n }\n\n /**\n * Transforms data in the appropriate data structure to be consumed by the layer for rendering\n *\n * @param {Object} data data model associated with the layer\n * @param {Object} config configuration of the layer that contains encoding and other parameters\n * @return {Object} Transformed pie data\n * @memberof ArcLayer\n */\n getTransformedData (dataModel, config) {\n let pieData = [];\n const pieIndex = {};\n const {\n startAngle,\n endAngle,\n encoding,\n sort,\n minOuterRadius\n } = config;\n const prevData = this._store.get(PROPS.TRANSFORMED_DATA) || [];\n const fieldsConfig = this.data().getFieldsConfig();\n const {\n angleIndex,\n sizeIndex,\n radiusIndex,\n colorIndex\n } = getFieldIndices(encoding, fieldsConfig);\n const dataVal = dataModel.getData();\n const data = dataVal.data;\n const uids = dataVal.uids;\n\n this._prevPieData = {};\n\n prevData.forEach((e, index) => {\n this._prevPieData[e.uid] = [e, index];\n pieIndex[e.index] = e;\n });\n // Creating pie data using angle field provided. If the angle field is a dimension,\n // all the angles will be equal(360/number of dimensions)\n\n pieData = pie()\n .startAngle((startAngle / 180) * Math.PI)\n .endAngle(Math.PI * endAngle / 180)\n .value(d => d[angleIndex] || 1)\n .sortValues(null);\n\n sort.length && radiusIndex && pieData.sort((a, b) => {\n if (sort === ASCENDING) {\n return a[radiusIndex] - b[radiusIndex];\n } return b[radiusIndex] - a[radiusIndex];\n });\n const sizeVal = data.reduce((acc, d) => acc + (d[sizeIndex] || 0), 1);\n\n // Adding the radius field values to each data point in pie data\n pieData = pieData(data).map((d, i) => {\n d.outerRadiusValue = data[i][radiusIndex] || minOuterRadius;\n d.innerRadius = config.innerRadius;\n d.colorVal = data[i][colorIndex];\n d.angleVal = data[i][angleIndex];\n d.sizeVal = sizeVal;\n d.uid = uids[i];\n d.rowId = d.uid;\n d.source = data[i];\n d._previousInfo = this._prevPieData[d.uid] ? this._prevPieData[d.uid][0] :\n getPreviousPoint(pieIndex, d.index, config);\n return d;\n });\n return pieData;\n }\n\n /**\n * Returns normalized data after transformation (it is the same in the case of pie layer)\n *\n * @param {Object} data transformed data\n * @return {Object} normalized data\n * @memberof ArcLayer\n */\n getNormalizedData (data) {\n return data;\n }\n\n /**\n *\n *\n * @param {Object} data\n * @return {}\n * @memberof ArcLayer\n */\n calculateDomainFromData (data) {\n const domainKey = OUTER_RADIUS_VALUE;\n return {\n radius: getDomainFromData([data], [domainKey, domainKey])\n };\n }\n\n /**\n *\n *\n * @param {Object} x\n * @param {Object} y\n * @return {}\n * @memberof ArcLayer\n */\n getNearestPoint (x, y, config = {}) {\n const dataPoint = selectElement(config.event.target).data()[0];\n if (isSimpleObject(dataPoint)) {\n const { data, uid } = dataPoint.datum;\n return {\n id: this.getIdentifiersFromData(data, uid),\n layerId: this.id()\n };\n }\n return null;\n }\n\n /**\n *\n *\n * @param {*} set\n * @returns\n * @memberof ArcLayer\n */\n getPlotElementsFromSet (set) {\n return selectElement(this.mount()).selectAll(this.elemType()).filter(d => set.indexOf(d.datum.uid) !== -1);\n }\n\n /**\n *\n *\n * @param {Object} container\n * @return {}\n * @memberof ArcLayer\n */\n render (container) {\n const {\n height,\n width\n } = this.measurement();\n const {\n classPrefix,\n defClassName,\n minOuterRadius,\n innerRadius,\n outerRadius,\n cornerRadius,\n padAngle,\n padRadius,\n padding,\n transition,\n innerRadiusFixer\n } = this.config();\n const sizeAxis = this.axes().size;\n const store = this._store;\n const transformedData = store.get(PROPS.TRANSFORMED_DATA);\n const chartHeight = height - padding.top - padding.bottom;\n const chartWidth = width - padding.left - padding.right;\n const qualClassName = getQualifiedClassName(defClassName, this.id(), classPrefix);\n // Sets range for radius\n const range = getRadiusRange(chartWidth, chartHeight, {\n minOuterRadius,\n innerRadius,\n outerRadius,\n innerRadiusFixer\n });\n const colorAxis = this.axes().color;\n const defaultRadius = outerRadius || Math.min(chartHeight, chartWidth) / 2;\n const radiusDomain = store.get(PROPS.DOMAIN).radius;\n const rangeValueGetter = d => getRangeValue(d, range, radiusDomain, defaultRadius, sizeAxis);\n // This returns a function that generates the arc path based on the datum provided\n const path = arc()\n // .outerRadius(d => rangeValueGetter(d))\n .innerRadius(innerRadius ? Math.min(chartHeight / 2, chartWidth / 2, innerRadius) : 0)\n .cornerRadius(cornerRadius)\n .padAngle(padAngle)\n .padRadius(padRadius);\n this._chartWidth = chartWidth;\n this._chartHeight = chartHeight;\n // Creating the group that holds all the arcs\n const g = makeElement(selectElement(container), 'g', [1], `${qualClassName[0]}-group`)\n .classed(`${qualClassName[1]}-group`, true)\n .attr('transform', `translate(${chartWidth / 2},${chartHeight / 2})`);\n const tween = (elem) => {\n makeElement(elem, 'path', (d, i) => [{\n datum: d,\n index: i,\n arcFn: path,\n meta: {\n originalColor: colorAxis.getRawColor(d.colorVal),\n stateColor: {},\n colorTransform: {}\n }\n }], `${qualClassName[0]}-path`)\n .style('fill', d => colorAxis.getColor(d.datum.colorVal))\n .transition()\n .duration(transition.duration)\n .attrTween('d', (...params) => tweenPie(path, rangeValueGetter, params))\n .attr('class', (d, i) => {\n const individualClass = getIndividualClassName(d, i, transformedData, this);\n return `${qualClassName[0]}-path ${qualClassName[1]}-path-${d.index}\n ${individualClass}`;\n });\n };\n const consecutiveExits = [];\n let exitCounter = 0;\n const tweenExit = (elem, d) => {\n let exitArr = consecutiveExits[exitCounter];\n const oldExitCounter = exitCounter;\n if (!exitArr) {\n exitArr = [{ elem, datum: d }];\n } else if (exitArr[exitArr.length - 1].datum.index === d.index - 1) {\n exitArr.push({ elem, datum: d });\n } else {\n exitCounter++;\n }\n consecutiveExits[oldExitCounter] = exitArr;\n };\n // Creating groups for all the arcs present individually\n makeElement(g, 'g', transformedData, `${qualClassName[0]}`,\n {\n update: tween,\n exit: tweenExit\n })\n .attr('class', (d, i) => `${qualClassName[0]} ${qualClassName[1]}-${i}`);\n tweenExitPie(consecutiveExits, transition, rangeValueGetter, path);\n return this;\n }\n\n /**\n *\n *\n * @param {*} identifiers\n * @returns\n * @memberof BaseLayer\n */\n getPointsFromIdentifiers (identifiers) {\n if (!this.data()) {\n return [];\n }\n const fieldNames = identifiers[0];\n const values = identifiers.slice(1, identifiers.length);\n const pieSlices = selectElement(this.mount()).selectAll('path').data();\n const fieldsConfig = this.data().getFieldsConfig();\n\n const filteredPies = pieSlices.filter((tData) => {\n const data = tData.datum.data;\n const uid = tData.datum.uid;\n return fieldNames.every((field, idx) => {\n if (field in fieldsConfig && fieldsConfig[field].def.type === FieldType.DIMENSION) {\n return values.findIndex(d => d[idx] === data[fieldsConfig[field].index]) !== -1;\n } else if (field === ReservedFields.ROW_ID) {\n return values.findIndex(d => d[idx] === uid) !== -1;\n } return true;\n });\n });\n\n const pieSliceInf = filteredPies[0];\n if (pieSliceInf) {\n const centroid = pieSliceInf.arcFn.centroid(pieSliceInf.datum);\n return [{\n x: centroid[0] + this._chartWidth / 2,\n y: centroid[1] + this._chartHeight / 2,\n width: 2,\n height: 2\n }];\n }\n return [];\n }\n}\n\n","import { getObjProp, interpolator, FieldType, selectElement } from 'muze-utils';\nimport { ANGLE, RADIUS, SIZE, COLOR } from '../../enums/constants';\n\n/**\n * Returns the range value from a value inside the domain\n *\n * @param {Object} domainValue Value whose range has to be returned\n * @return {number} range value\n * @memberof ArcLayer\n */\nexport const getRangeValue = (datum, range, domain, defaultRadius, sizeAxis) => {\n let domainMultiplier = 1;\n const {\n outerRadiusValue,\n sizeVal\n } = datum;\n const sizeAxisDomain = sizeAxis.domain();\n const sizeMultiplier = sizeAxis.getSize(sizeVal) / (sizeAxisDomain ? sizeAxis.range()[1] : sizeAxis.config().value);\n\n domainMultiplier *= (range[1] - range[0]) / (domain[1] - domain[0]);\n const rangeVal = (range[0] + (outerRadiusValue - domain[0]) * domainMultiplier);\n return (rangeVal || defaultRadius) * sizeMultiplier;\n};\n\n/**\n *\n *\n * @memberof ArcLayer\n */\nexport const getRadiusRange = (width, height, config) => {\n const {\n minOuterRadius,\n innerRadius,\n outerRadius,\n innerRadiusFixer\n } = config;\n\n return [Math.max((innerRadius + innerRadiusFixer || 0), minOuterRadius), outerRadius || Math.min(height,\n width) / 2];\n};\nexport const getPreviousPoint = (prevData, currIndex, config) => {\n const prevArc = prevData[currIndex - 1];\n const nextArc = prevData[currIndex];\n\n if (prevArc && nextArc) {\n return {\n startAngle: prevArc.endAngle,\n endAngle: nextArc.startAngle\n };\n } else if (!nextArc) {\n return {\n startAngle: config.endAngle * Math.PI * 2 / 360,\n endAngle: config.endAngle * Math.PI * 2 / 360\n };\n }\n return {\n startAngle: config.startAngle * Math.PI * 2 / 360,\n endAngle: config.startAngle * Math.PI * 2 / 360\n };\n};\n\n/**\n *\n *\n * @param {*} path\n * @param {*} b\n * @returns\n * @memberof ArcLayer\n */\nexport const tweenPie = (path, rangeValueGetter, b) => {\n const { datum } = b[0];\n const outerRadius = rangeValueGetter(datum);\n datum.outerRadius = outerRadius;\n datum._previousInfo.outerRadius = datum._previousInfo.outerRadius || outerRadius;\n return function (t) {\n return path(interpolator()(datum._previousInfo, datum)(t));\n };\n};\n\n/**\n *\n *\n * @param {*} path\n * @param {*} b\n * @returns\n * @memberof ArcLayer\n */\nexport const tweenExitPie = (consecutiveExits, transition, rangeValueGetter, path) => {\n if (consecutiveExits.length > 0) {\n consecutiveExits.forEach((consecutiveExitArr) => {\n const startAngle = consecutiveExitArr[0].datum.startAngle;\n const endAngle = consecutiveExitArr[consecutiveExitArr.length - 1].datum.endAngle;\n const mid = (Math.PI * 2 * startAngle) / ((Math.PI * 2) + startAngle - endAngle);\n\n consecutiveExitArr.forEach((e) => {\n const { elem, datum } = e;\n\n elem.each(function () {\n const gElem = selectElement(this);\n gElem.selectAll('path')\n .transition()\n .duration(transition.duration)\n .attrTween('d', () => function (t) {\n const outerRadius = rangeValueGetter(datum);\n datum.outerRadius = outerRadius;\n return path(interpolator()(datum, {\n startAngle: mid,\n endAngle: mid,\n outerRadius\n })(t));\n })\n .remove();\n gElem.remove();\n });\n });\n });\n }\n};\n\nexport const getFieldIndices = (encoding, fieldsConfig) => {\n const [angleField, radiusField, colorField, sizeField] = [ANGLE, RADIUS, COLOR, SIZE]\n .map(e => encoding[e].field);\n const [angleIndex, sizeIndex, radiusIndex] = [angleField, sizeField, radiusField]\n .map((e) => {\n const conf = fieldsConfig[e];\n if (conf && conf.def.type === FieldType.MEASURE) {\n return conf.index;\n }\n return null;\n });\n const colorIndex = getObjProp(fieldsConfig, colorField, 'index');\n return {\n angleIndex,\n sizeIndex,\n radiusIndex,\n colorIndex\n };\n};\n","import {\n setAttrs,\n setStyles,\n selectElement,\n makeElement,\n getSmartComputedStyle\n} from 'muze-utils';\n\n/**\n * Draws svg text in the specified container.\n * @param {SVGElement} container Container where labels will be appended.\n * @param {Array.} data Data of the elements.\n * @return {Selection} d3 selection of the elements.\n */\nconst drawText = (container, data, config, smartLabel) => {\n const selection = selectElement(container).selectAll('g').data(data);\n\n const selectionMerge = selection.enter().append('g')\n .each(function (dataObj) {\n setAttrs(this, dataObj.enter);\n })\n .merge(selection);\n const style = getSmartComputedStyle(selectElement(container), config.className);\n const fontSize = parseInt(style.fontSize, 10);\n\n smartLabel.setStyle(style);\n selectionMerge.each(function (dataObj) {\n const element = selectElement(this);\n const { update, text, color, textanchor, style: textStyle } = dataObj;\n const background = dataObj.background;\n let backgroundVal;\n if (backgroundVal = background.value) {\n const backgroundPadding = background.padding;\n let diff;\n const { width, height } = smartLabel.getOriSize(dataObj.text);\n const backgroundEl = makeElement(element, 'rect', [1]);\n\n if (textanchor === 'end') {\n diff = width;\n } else if (textanchor === 'start') {\n diff = 0;\n } else {\n diff = width / 2;\n }\n\n setAttrs(backgroundEl.node(), {\n x: update.x - diff - backgroundPadding / 2,\n y: update.y - fontSize - backgroundPadding / 2,\n width: width + backgroundPadding,\n height: height + backgroundPadding\n });\n background && setStyles(backgroundEl, {\n background: backgroundVal\n });\n }\n const textEl = makeElement(element, 'text', d => [d]).text(text);\n const textNode = textEl.node();\n textStyle && setStyles(textNode, textStyle);\n color && setStyles(textNode, {\n fill: color\n });\n dataObj.className && textEl.classed(dataObj.className, true);\n setAttrs(textNode, update);\n textEl.attr('text-anchor', textanchor);\n });\n selection.exit().remove();\n return selection;\n};\n\nexport default drawText;\n","import { CLASSPREFIX } from '../../enums/constants';\n\nexport const defaultConfig = {\n defClassName: 'layer-text',\n classPrefix: CLASSPREFIX,\n className: '',\n transform: {\n type: 'identity'\n },\n interaction: {\n highlight: [{\n type: 'fill',\n intensity: [0, 0, -15, 0]\n }],\n fade: [{\n type: 'fill',\n intensity: [0, 0, +15, 0]\n }],\n focus: [{\n type: 'fill',\n intensity: [0, 0, +15, 0]\n }]\n },\n transition: {\n effect: 'cubic',\n duration: 1000\n },\n encoding: {\n color: {},\n text: {\n value: '',\n background: {\n padding: 10\n }\n }\n },\n states: {\n highlight: {\n className: `${CLASSPREFIX}-layer-text-highlight`\n },\n fadeout: {\n className: `${CLASSPREFIX}-layer-text-fadeout`\n },\n selected: {\n className: `${CLASSPREFIX}-layer-text-selected`\n }\n }\n};\n","import {\n getQualifiedClassName,\n selectElement,\n setStyles,\n createElements\n} from 'muze-utils';\nimport { BaseLayer } from '../../base-layer';\nimport drawText from './renderer';\nimport { defaultConfig } from './default-config';\nimport { getLayerColor, positionPoints, getIndividualClassName } from '../../helpers';\nimport { TEXT_ANCHOR_MIDDLE, ENCODING } from '../../enums/constants';\nimport * as PROPS from '../../enums/props';\n\nimport './styles.scss';\n\n/**\n * Text Layer creates labels. It needs to be passed a data table, axes and configuration\n * of the layer.\n * Example :-\n * const textLayer = layerFactory.getLayer('text', [dataModel, axes, config]);\n * textLayer.render(container);\n * @class\n */\nexport default class TextLayer extends BaseLayer {\n /**\n * Returns the default configuration of the text layer\n * @return {Object} Default configuration of the text layer\n */\n static defaultConfig () {\n return defaultConfig;\n }\n\n static formalName () {\n return 'text';\n }\n\n elemType () {\n return 'text';\n }\n\n /**\n * Generates an array of objects containing x, y, width and height of the points from the data\n * @param {Array.} data Data Array\n * @param {Object} encoding Config\n * @param {Object} axes Axes object\n * @return {Array.} Array of points\n */\n translatePoints (data, encoding, axes) {\n let points = [];\n const colorAxis = axes.color;\n const textEncoding = encoding.text;\n const { field: textField, value, formatter: textFormatter } = textEncoding;\n const colorEncoding = encoding.color;\n const colorField = colorEncoding && colorEncoding.field;\n const fieldsConfig = this.data().getFieldsConfig();\n\n const backgroundEncoding = encoding.text.background;\n const backgroundPadding = backgroundEncoding.padding;\n const backgroundValue = backgroundEncoding.value;\n const colorFieldIndex = fieldsConfig[colorField] ? fieldsConfig[colorField].index : -1;\n const textFieldIndex = textField ? fieldsConfig[textField] && fieldsConfig[textField].index : -1;\n const xEnc = ENCODING.X;\n const yEnc = ENCODING.Y;\n for (let i = 0, len = data.length; i < len; i++) {\n const d = data[i];\n const row = d._data;\n const textValue = textField ? row[textFieldIndex] : value;\n\n const [xPx, yPx] = [xEnc, yEnc].map(type => (axes[type] ? axes[type].getScaleValue(d[type]) +\n axes[type].getUnitWidth() / 2 : 0));\n\n const { color, rawColor } = getLayerColor({ datum: d, index: i },\n { colorEncoding, colorAxis, colorFieldIndex });\n\n const point = {\n enter: {},\n update: {\n x: xPx,\n y: yPx\n },\n text: textFormatter ? textFormatter(textValue) : textValue,\n color,\n background: {\n value: backgroundValue instanceof Function ? backgroundValue(d, i, data, this) : null,\n padding: backgroundPadding\n },\n meta: {\n stateColor: {},\n originalColor: rawColor,\n colorTransform: {}\n },\n style: {},\n _data: row,\n _id: d._id,\n source: d._data,\n rowId: d._id\n };\n\n if (d.x !== null && d.y !== null) {\n points.push(point);\n }\n\n point.className = getIndividualClassName(d, i, data, this);\n }\n\n points = positionPoints(this, points);\n\n return points;\n }\n\n /**\n * Renders the plot in the given container\n * @param {SVGElement} container SVGElement which will hold the plot\n * @return {textLayer} Instance of text layer\n */\n render (container) {\n let points;\n const config = this.config();\n const encoding = config.encoding;\n const normalizedData = this._store.get(PROPS.NORMALIZED_DATA);\n const className = config.className;\n const qualifiedClassName = getQualifiedClassName(config.defClassName, this.id(), config.classPrefix);\n const axes = this.axes();\n const containerSelection = selectElement(container);\n\n containerSelection.classed(`${qualifiedClassName.join(' ')} ${className}`, true);\n createElements({\n data: normalizedData,\n append: 'g',\n selector: 'g',\n container,\n each: (dataArr, group, i) => {\n const node = group.node();\n points = this.translatePoints(dataArr, encoding, axes, i);\n setStyles(node, {\n 'text-anchor': TEXT_ANCHOR_MIDDLE\n });\n drawText(node, points, {\n className: qualifiedClassName[0]\n }, this._dependencies.smartLabel);\n }\n });\n return this;\n }\n}\n","/* global Element, document */\nimport {\n makeElement,\n selectElement,\n easeFns,\n objectIterator,\n getSymbol\n} from 'muze-utils';\n\n/**\n *\n *\n * @param {*} str\n * @returns\n */\nconst checkPath = (str) => {\n if (/^[mzlhvcsqta]\\s*[-+.0-9][^mlhvzcsqta]+/i.test(str) && /[\\dz]$/i.test(str) && str.length > 4) {\n return true;\n }\n return false;\n};\n\n/**\n *\n *\n * @param {*} d\n * @param {*} elem\n */\nconst createShape = function (d, elem) {\n const groupElement = selectElement(elem);\n const { shape, size, update } = d;\n\n if (shape instanceof Promise) {\n shape.then((res) => {\n d.shape = res;\n createShape(d, elem);\n });\n } else if (shape instanceof Element) {\n let newShape = shape.cloneNode(true);\n\n if (newShape.nodeName.toLowerCase() === 'img') {\n const src = newShape.src || newShape.href;\n newShape = document.createElementNS('http://www.w3.org/2000/svg', 'image');\n newShape.setAttribute('href', src);\n }\n const shapeElement = selectElement(newShape);\n if (newShape.nodeName === 'path' || newShape.nodeName === 'image') {\n shapeElement.attr('transform', `scale(${size / 100})`);\n } else {\n shapeElement.attr('height', size);\n shapeElement.attr('width', size);\n }\n shapeElement.attr('x', -size / 2);\n shapeElement.attr('y', -size / 2);\n selectElement(groupElement.node().appendChild(newShape));\n } else if (typeof shape === 'string') {\n let pathStr;\n if (checkPath(shape)) {\n pathStr = shape;\n } else {\n pathStr = getSymbol(shape).size(size)(update);\n }\n makeElement(groupElement, 'path', data => [data]).attr('d', pathStr);\n } else {\n d.shape = 'circle';\n createShape(d, elem);\n }\n};\n\n/**\n * Draws symbols using d3 symbol api\n * @param {Object} params Contains the svg container, points and other symbol related attributes.\n */\n/* istanbul ignore next */ const drawSymbols = (params) => {\n let mergedGroups;\n const { container, points, transition, className } = params;\n const { duration, effect, disabled } = transition;\n const mount = selectElement(container);\n\n mount.attr('class', className);\n const symbolGroups = mount.selectAll('g').data(points, params.keyFn);\n const symbolEnter = symbolGroups.enter().append('g').attr('transform', d => `translate(${d.enter.x},${d.enter.y})`);\n mergedGroups = symbolGroups.merge(symbolEnter)\n .each(function (d) {\n createShape(d, this);\n });\n mergedGroups = disabled ? mergedGroups : mergedGroups.transition().duration(disabled ? 0 : transition.duration);\n mergedGroups.attr('transform', d => `translate(${d.update.x},${d.update.y})`)\n .each(function (d) {\n const style = d.style;\n const element = selectElement(this);\n objectIterator(style, key => element.style(key, style[key]));\n element.attr('class', `${className}`);\n element.classed(d.className, true);\n });\n\n const exitGroups = symbolGroups.exit();\n if (!disabled) {\n exitGroups.transition().ease(easeFns[effect])\n .duration(duration)\n .on('end', function () {\n selectElement(this).remove();\n })\n .style('fill-opacity', 0)\n .style('stroke-opacity', 0);\n } else {\n exitGroups.remove();\n }\n};\n\nexport default drawSymbols;\n","import { CLASSPREFIX } from '../../enums/constants';\n\nexport const defaultConfig = {\n defClassName: 'layer-point',\n className: '',\n classPrefix: CLASSPREFIX,\n defColorStyle: 'stroke',\n interaction: {\n highlight: [{\n type: 'fill',\n intensity: [0, 0, -20, 0]\n }],\n fade: [{\n type: 'fill',\n intensity: [0, 0, +20, 0]\n }],\n focus: [{\n type: 'fill',\n intensity: [0, 0, +20, 0]\n }\n ]\n },\n innerPadding: 0.1,\n nearestPointThreshold: 10,\n transform: {\n type: 'identity'\n },\n transition: {\n effect: 'cubic',\n duration: 1000\n },\n encoding: {\n size: {\n value: 30\n },\n color: { },\n shape: {\n value: 'circle'\n },\n x: {},\n y: {},\n strokeOpacity: {\n value: 0.5\n },\n fillOpacity: {\n value: 0.5\n }\n },\n shapes: ['circle', 'cross', 'diamond', 'square', 'star', 'wye', 'triangle'],\n sizes: [20, 30, 40, 50, 60, 70]\n};\n","import {\n Voronoi,\n selectElement,\n getQualifiedClassName,\n makeElement,\n FieldType,\n Scales\n} from 'muze-utils';\nimport { BaseLayer } from '../../base-layer';\nimport drawSymbols from './renderer';\nimport { defaultConfig } from './default-config';\nimport { ENCODING } from '../../enums/constants';\nimport * as PROPS from '../../enums/props';\nimport {\n attachDataToVoronoi,\n getLayerColor,\n positionPoints,\n getPlotMeasurement,\n getIndividualClassName\n} from '../../helpers';\n\nimport './styles.scss';\n\n/**\n * Point Layer creates point. Itt needs to be passed a data table, axes and configuration\n * of the layer.\n * Example :-\n * const pointLayer = layerFactory.getLayer('point', [data, axes, config]);\n * pointLayer.render(container);\n * @class\n */\nexport default class PointLayer extends BaseLayer {\n\n /**\n * Creates an instance of PointLayer.\n * @param {*} args\n * @memberof PointLayer\n */\n constructor (...args) {\n super(...args);\n this._voronoi = new Voronoi();\n this._bandScale = Scales.band();\n }\n\n /**\n *\n *\n * @returns\n * @memberof PointLayer\n */\n elemType () {\n return 'g';\n }\n\n /**\n * Returns the default configuration of the point layer\n * @return {Object} Default configuration of the point layer\n */\n static defaultConfig () {\n return defaultConfig;\n }\n\n static defaultPolicy (conf, userConf) {\n const config = BaseLayer.defaultPolicy(conf, userConf);\n const encoding = config.encoding;\n const transform = config.transform;\n const colorField = encoding.color && encoding.color.field;\n\n if (colorField) {\n transform.groupBy = colorField;\n }\n return config;\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof PointLayer\n */\n static formalName () {\n return 'point';\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof PointLayer\n */\n static drawFn () {\n return drawSymbols;\n }\n\n /**\n * Generates an array of objects containing x, y, width and height of the points from the data\n * @param {Array.} data Data Array\n * @param {Object} encoding Config\n * @param {Object} axes Axes object\n * @return {Array.} Array of points\n */\n translatePoints (data, encoding, axes, config = {}) {\n let points = [];\n const {\n size: sizeEncoding,\n shape: shapeEncoding,\n color: colorEncoding,\n x,\n y\n } = encoding;\n const sizeField = sizeEncoding.field;\n const sizeValue = sizeEncoding.value;\n const shapeField = shapeEncoding.field;\n const xField = x.field;\n const yField = y.field;\n const { size: sizeAxis, shape: shapeAxis } = axes;\n const fieldsConfig = this.data().getFieldsConfig();\n const isXDim = fieldsConfig[xField] && fieldsConfig[xField].def.type === FieldType.DIMENSION;\n const isYDim = fieldsConfig[yField] && fieldsConfig[yField].def.type === FieldType.DIMENSION;\n const key = isXDim ? ENCODING.X : (isYDim ? ENCODING.Y : null);\n const colorField = colorEncoding && colorEncoding.field;\n const colorFieldIndex = fieldsConfig[colorField] && fieldsConfig[colorField].index;\n const measurement = this._store.get(PROPS.MEASUREMENT);\n const shapeFieldIndex = fieldsConfig[shapeField] && fieldsConfig[shapeField].index;\n const sizeFieldIndex = fieldsConfig[sizeField] && fieldsConfig[sizeField].index;\n const colorAxis = axes.color;\n const { x: offsetX, y: offsetY } = config.offset;\n\n for (let i = 0, len = data.length; i < len; i++) {\n const d = data[i];\n const row = d._data;\n const size = sizeValue instanceof Function ? sizeValue(d, i) : sizeAxis.getSize(row[sizeFieldIndex]);\n const shape = shapeAxis.getShape(row[shapeFieldIndex]);\n\n let [xPx, yPx] = [ENCODING.X, ENCODING.Y].map((type) => {\n const value = d[type] === null ? undefined : d[type];\n const measure = type === ENCODING.X ? measurement.width : measurement.height;\n return !encoding[type].field ? measure / 2 : axes[type].getScaleValue(value);\n });\n\n xPx += offsetX;\n yPx += offsetY;\n\n const { color, rawColor } = getLayerColor({ datum: d, index: i },\n { colorEncoding, colorAxis, colorFieldIndex });\n\n const style = {\n fill: color,\n stroke: color\n };\n\n if (!isNaN(xPx) && !isNaN(yPx)) {\n const point = {\n enter: {\n x: xPx,\n y: yPx\n },\n update: {\n x: xPx,\n y: yPx\n },\n shape,\n size: Math.abs(size),\n meta: {\n stateColor: {},\n originalColor: rawColor,\n colorTransform: {}\n },\n style,\n _data: row,\n _id: d._id,\n source: d._data,\n rowId: d._id\n };\n point.className = getIndividualClassName(d, i, data, this);\n points.push(point);\n this.cachePoint(d[key], point);\n }\n }\n points = positionPoints(this, points);\n return points;\n }\n\n /**\n * Renders the plot in the given container.\n *\n * @param {SVGElement} container SVGElement which will hold the plot\n * @return {BarLayer} Instance of bar layer\n */\n render (container) {\n let maxSize = 0;\n let seriesClassName;\n const config = this.config();\n const keys = this._store.get(PROPS.TRANSFORMED_DATA).map(d => d.key);\n const { transition, className, defClassName, classPrefix } = config;\n const normalizedData = this._store.get(PROPS.NORMALIZED_DATA);\n const containerSelection = selectElement(container);\n const qualifiedClassName = getQualifiedClassName(defClassName, this.id(), classPrefix);\n this._points = [];\n this._pointMap = {};\n\n containerSelection.classed(qualifiedClassName.join(' '), true).classed(className, true);\n\n this._points = this.generateDataPoints(normalizedData, keys);\n\n makeElement(container, 'g', this._points, null, {\n update: (group, points) => {\n maxSize = Math.max(maxSize, ...points.map(d => d.size));\n seriesClassName = `${qualifiedClassName[0]}`;\n this.constructor.drawFn()({\n container: group.node(),\n points,\n className: seriesClassName,\n transition,\n keyFn: d => d._id\n });\n }\n }, data => data[0]._id);\n this._maxSize = Math.sqrt(maxSize / Math.PI) * 2;\n attachDataToVoronoi(this._voronoi, this._points);\n return this;\n }\n\n generateDataPoints (normalizedData, keys) {\n const encoding = this.config().encoding;\n const axes = this.axes();\n const [widthMetrics, heightMetrics] = getPlotMeasurement(this, keys);\n const offsetXValues = widthMetrics.offsetValues || [];\n const offsetYValues = heightMetrics.offsetValues || [];\n return normalizedData.map((dataArr, i) => {\n const measurementConf = this.getMeasurementConfig(offsetXValues[i], offsetYValues[i], widthMetrics.span,\n heightMetrics.span);\n return this.translatePoints(dataArr, encoding, axes, measurementConf);\n }).filter(d => d.length);\n }\n\n getMeasurementConfig (offsetX, offsetY, widthSpan, heightSpan) {\n return {\n offset: {\n x: (offsetX || 0) + widthSpan / 2,\n y: (offsetY || 0) + heightSpan / 2\n },\n span: {\n x: widthSpan,\n y: heightSpan\n }\n };\n }\n\n /**\n * Gets the nearest point from a position.\n * @param {number} x x position\n * @param {number} y y position\n * @return {Object} Point details\n */\n getNearestPoint (x, y) {\n const distanceLimit = Math.max(this._maxSize, this.config().nearestPointThreshold);\n\n if (!this.data()) {\n return null;\n }\n\n const point = this._voronoi.find(x, y, distanceLimit);\n const dimensions = point && point.data.data.update;\n const radius = point ? Math.sqrt(point.data.data.size / Math.PI) : 0;\n\n if (point) {\n const { _data, _id } = point.data.data;\n const identifiers = this.getIdentifiersFromData(_data, _id);\n return {\n id: identifiers,\n dimensions: [{\n x: dimensions.x,\n y: dimensions.y,\n width: radius,\n height: radius\n }],\n layerId: this.id()\n };\n }\n return null;\n }\n}\n","import { makeElement, easeFns } from 'muze-utils';\n\n/**\n *\n *\n * @param {*} elem\n * @param {*} datum\n * @param {*} index\n * @param {*} context\n */\nconst transitionBars = (elem, datum, index, context) => {\n const { transition } = context;\n const { duration, disabled, effect } = transition;\n const selection = elem;\n const selTransition = disabled ? selection : selection.transition().duration(duration).ease(easeFns[effect]);\n const update = datum.update || datum;\n const updateStyle = datum.style || {};\n datum.className && selection.classed(datum.className, true);\n Object.entries(update).forEach(attr => (!isNaN(attr[1]) && selTransition.attr(attr[0], attr[1])));\n Object.entries(updateStyle).forEach(styleObj => selection.style(styleObj[0], styleObj[1]));\n};\n\n/**\n *\n *\n * @param {*} elem\n * @param {*} d\n */\nconst barEnterFn = (elem, d) => {\n const selection = elem;\n const enter = d.enter || {};\n Object.entries(enter).forEach(attr => (!isNaN(attr[1]) && selection.attr(attr[0], attr[1])));\n};\n\n/**\n * Draws rectangles by using d3 selection\n * @param {Object} params Contains container element and points\n * @return {Selection} Bar Selection\n */\n/* istanbul ignore next */ export const drawRects = (params) => {\n const { points, container, keyFn } = params;\n const updateFns = {\n enter (elem, d) { barEnterFn(elem, d); },\n update (elem, d, i) { transitionBars(elem, d, i, params); }\n };\n return makeElement(container, 'rect', points, null, updateFns, keyFn);\n};\n","import { CLASSPREFIX } from '../../enums/constants';\n\nexport const defaultConfig = {\n classPrefix: CLASSPREFIX,\n defClassName: 'layer-bar',\n className: '',\n interaction: {\n highlight: [{\n type: 'fill',\n intensity: [0, 0, -15, 0]\n }],\n fade: [{\n type: 'fill',\n intensity: [0, 0, +15, 0]\n }],\n focus: [{\n type: 'fill',\n intensity: [0, 0, +15, 0]\n }]\n },\n transform: {\n type: 'stack'\n },\n transition: {\n effect: 'cubic',\n duration: 1000\n },\n innerPadding: 0.1,\n encoding: {\n color: {},\n x: {},\n y: {},\n x0: {},\n y0: {}\n },\n states: {\n highlight: {\n className: `${CLASSPREFIX}-layer-bar-highlight`\n },\n fadeout: {\n className: `${CLASSPREFIX}-layer-bar-fadeout`\n },\n selected: {\n className: `${CLASSPREFIX}-layer-bar-selected`\n }\n }\n};\n\n","import { FieldType, DimensionSubtype } from 'muze-utils';\nimport * as PROPS from '../../enums/props';\nimport { STACK } from '../../enums/constants';\nimport { getLayerColor, positionPoints, getIndividualClassName } from '../../helpers';\n\n/**\n *\n *\n * @param {*} type\n * @param {*} fieldInfo\n * @param {*} config\n * @param {*} data\n * @returns\n */\nconst resolveDimByField = (type, axesInfo, config, data) => {\n const spaceType = type === 'x' ? 'width' : 'height';\n const [fieldType, axis] = [config[`${type}FieldType`], axesInfo[`${type}Axis`]];\n const {\n transformType,\n sizeEncoding,\n sizeConfig,\n measurement\n } = config;\n\n const sizeValue = sizeEncoding.value;\n let enter = 0;\n let pos;\n let space = 0;\n let enterSpace = 0;\n if (fieldType !== undefined) {\n if (config[`${type}0Field`]) {\n const minVal = data[type];\n const maxVal = data[`${type}0`];\n let min;\n let max;\n if (minVal === null || maxVal === null) {\n return {\n enterSpace: undefined,\n enter: undefined,\n pos: undefined,\n space: undefined\n };\n } else if (fieldType === FieldType.MEASURE || fieldType === DimensionSubtype.TEMPORAL) {\n min = Math.min(minVal, maxVal);\n max = Math.max(minVal, maxVal);\n } else {\n min = minVal;\n max = maxVal;\n }\n const scales = type === 'x' ? [min, max] : [max, min];\n pos = axis.getScaleValue(scales[0]) + axis.getUnitWidth() / 2;\n space = Math.abs(axis.getScaleValue(scales[1]) - pos) + axis.getUnitWidth() / 2;\n\n enter = pos;\n enterSpace = 0;\n } else if (fieldType === DimensionSubtype.CATEGORICAL || fieldType === DimensionSubtype.TEMPORAL) {\n pos = axis.getScaleValue(data[type]) +\n (sizeConfig[type === 'x' ? 'barWidthOffset' : 'barHeightOffset'] || 0);\n\n space = sizeConfig[type === 'x' ? 'barWidth' : 'barHeight'];\n if (sizeValue !== undefined) {\n const diffPx = sizeValue * space;\n space -= diffPx;\n pos += diffPx / 2;\n }\n enter = pos;\n enterSpace = space;\n } else {\n const zeroPos = axis.getScaleValue(0);\n const axisType = axis.getScaleValue(data[type]);\n const axisType0 = axis.getScaleValue(data[`${type}0`]);\n\n enterSpace = 0;\n if (type === 'x') {\n pos = data[type] < 0 || transformType === STACK ? axisType : zeroPos;\n space = Math.abs(pos - (transformType === STACK ? axisType0 : (data[type] >= 0 ? axisType : zeroPos)));\n } else {\n pos = transformType === STACK || data[type] >= 0 ? axisType : zeroPos;\n space = Math.abs(pos - (transformType === STACK ? axisType0 : (data[type] >= 0 ? zeroPos : axisType)));\n }\n enter = zeroPos;\n }\n } else {\n pos = 0;\n space = measurement[spaceType];\n }\n\n return {\n enterSpace,\n enter,\n pos,\n space\n };\n};\n\n/**\n *\n *\n * @param {*} data\n * @param {*} config\n * @param {*} axes\n * @returns\n */\nconst resolveDimensions = (data, config, axes) => {\n const axesInfo = {\n xAxis: axes.x,\n yAxis: axes.y\n };\n const {\n enterSpace: enterWidth,\n enter: enterX,\n pos: xPos,\n space: width\n } = resolveDimByField('x', axesInfo, config, data);\n\n const {\n enterSpace: enterHeight,\n enter: enterY,\n pos: yPos,\n space: height\n } = resolveDimByField('y', axesInfo, config, data);\n return {\n enter: {\n x: enterX,\n y: enterY,\n width: enterWidth,\n height: enterHeight\n },\n update: {\n x: xPos,\n y: yPos,\n width,\n height\n }\n };\n};\n\n/**\n * Generates an array of objects containing x, y, width and height of the bars from the data\n * @param {Array.} data Data Array\n * @param {Object} encoding Config\n * @param {Object} axes Axes object\n * @param {Object} conf config object for point generation\n * @return {Array.} Array of points\n */\nexport const getTranslatedPoints = (context, data, sizeConfig) => {\n let points = [];\n const encoding = context.config().encoding;\n const axes = context.axes();\n const colorAxis = axes.color;\n const fieldsConfig = context.data().getFieldsConfig();\n const colorEncoding = encoding.color;\n const colorField = colorEncoding.field;\n const sizeEncoding = encoding.size || {};\n const {\n x0Field,\n y0Field,\n xFieldSubType,\n yFieldSubType\n } = context.encodingFieldsInf();\n const measurement = context._store.get(PROPS.MEASUREMENT);\n const isXDim = xFieldSubType === DimensionSubtype.CATEGORICAL || xFieldSubType === DimensionSubtype.TEMPORAL;\n const isYDim = yFieldSubType === DimensionSubtype.CATEGORICAL || yFieldSubType === DimensionSubtype.TEMPORAL;\n const key = isXDim ? 'x' : (isYDim ? 'y' : null);\n const transformType = context.transformType();\n const colorFieldIndex = colorField && fieldsConfig[colorField] && fieldsConfig[colorField].index;\n\n for (let i = 0, len = data.length; i < len; i++) {\n const d = data[i];\n const style = {};\n const meta = {};\n const dimensions = resolveDimensions(d, {\n xFieldType: xFieldSubType,\n yFieldType: yFieldSubType,\n x0Field,\n y0Field,\n transformType,\n measurement,\n sizeConfig,\n sizeEncoding\n }, axes);\n\n const { color, rawColor } = getLayerColor({ datum: d, index: i },\n { colorEncoding, colorAxis, colorFieldIndex });\n\n style.fill = color;\n meta.stateColor = {};\n meta.originalColor = rawColor;\n meta.colorTransform = {};\n\n const update = dimensions.update;\n\n if (!isNaN(update.x) && !isNaN(update.y) && d._id !== undefined) {\n let point = null;\n point = {\n enter: dimensions.enter,\n update,\n style,\n _data: d._data,\n _id: d._id,\n source: d._data,\n rowId: d._id,\n meta\n };\n point.className = getIndividualClassName(d, i, data, context);\n points.push(point);\n // Store each point in a hashmap with key as the dimensional or temporal field value\n context.cachePoint(d[key], point);\n }\n }\n\n points = positionPoints(context, points);\n return points;\n};\n","import {\n getClosestIndexOf,\n getQualifiedClassName,\n selectElement,\n createElements,\n clipElement,\n DimensionSubtype,\n FieldType,\n Scales\n} from 'muze-utils';\nimport { BaseLayer } from '../../base-layer';\nimport { drawRects } from './renderer';\nimport { defaultConfig } from './default-config';\nimport * as PROPS from '../../enums/props';\nimport { getPlotMeasurement } from '../../helpers';\nimport './styles.scss';\nimport { getTranslatedPoints } from './bar-helper';\n\nconst MEASURE = FieldType.MEASURE;\nconst scaleBand = Scales.band;\n\n/**\n * Bar Layer creates a bar plot. It needs to be passed a data table, axes and configuration of the layer.\n *\n * @example\n * const BarLayer = layerFactory.getLayer('bar');\n * BarLayer.create()\n * .config(config)\n * .data(dt)\n * .mountPoint(container);\n * @class\n */\nexport default class BarLayer extends BaseLayer {\n /**\n * Creates an instance of bar layer\n */\n constructor (...params) {\n super(...params);\n this._bandScale = scaleBand();\n this._plotPadding = {\n x: 0,\n y: 0\n };\n this._plotSpan = {\n x: 0,\n y: 0\n };\n this._pointMap = {};\n }\n\n /**\n *\n *\n * @returns\n * @memberof BarLayer\n */\n elemType () {\n return 'rect';\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof BarLayer\n */\n static formalName () {\n return 'bar';\n }\n\n /**\n * Returns the default configuration of the bar layer\n * @return {Object} Default configuration of the bar layer\n */\n static defaultConfig () {\n return defaultConfig;\n }\n\n /**\n *\n *\n * @static\n * @param {*} conf\n * @param {*} userConf\n * @returns\n * @memberof BarLayer\n */\n static defaultPolicy (conf, userConf) {\n const config = BaseLayer.defaultPolicy(conf, userConf);\n const encoding = config.encoding;\n const colorField = encoding.color.field;\n const transform = config.transform;\n\n if (colorField) {\n transform.groupBy = colorField;\n }\n return config;\n }\n\n /**\n *\n *\n * @param {*} data\n * @param {*} fieldsConfig\n * @returns\n * @memberof BarLayer\n */\n calculateDomainFromData (data, encodingFieldInf, fieldsConfig) {\n const domain = super.calculateDomainFromData(data, encodingFieldInf, fieldsConfig);\n ['x', 'y'].forEach((d) => {\n if (encodingFieldInf[`${d}FieldType`] === MEASURE && domain[d]) {\n encodingFieldInf[`${d}0Field}`] ? domain[d] = domain[d].sort((a, b) => a - b) :\n (domain[d][0] = Math.min(domain[d][0], 0));\n }\n });\n return domain;\n }\n\n /**\n * Generates an array of objects containing x, y, width and height of the bars from the data\n * @param {Array.} data Data Array\n * @param {Object} encoding Config\n * @param {Object} axes Axes object\n * @param {Object} conf config object for point generation\n * @return {Array.} Array of points\n */\n translatePoints (data, sizeConfig) {\n return getTranslatedPoints(this, data, sizeConfig);\n }\n\n /**\n * Renders the plot in the given container\n * @param {SVGGroup} container SVGGroup where plot will be rendered.\n * @return {BarLayer} Instance of bar layer.\n */\n render (container) {\n const config = this.config();\n const transition = config.transition;\n const store = this._store;\n const normalizedDataArr = store.get(PROPS.NORMALIZED_DATA);\n const transformedData = store.get(PROPS.TRANSFORMED_DATA);\n const keys = transformedData.map(d => d.key);\n const fieldsConfig = this.data().getFieldsConfig();\n const axes = this.axes();\n const height = axes.y && axes.y.scale().range()[0];\n const width = axes.x && axes.x.scale().range()[1];\n const defClassName = config.defClassName;\n const qualifiedClassName = getQualifiedClassName(defClassName, this.id(), config.classPrefix);\n const className = config.className;\n const containerSelection = selectElement(container);\n const dimensions = Object.values(fieldsConfig).filter(e => e.def.type === FieldType.DIMENSION)\n .map(e => e.index);\n containerSelection.classed(qualifiedClassName.join(' '), true);\n containerSelection.classed(className, true);\n clipElement(container, {\n x: 0,\n y: 0,\n width,\n height\n }, `id-${this.id()}`);\n\n this._points = this.generateDataPoints(normalizedDataArr, keys);\n\n createElements({\n data: this._points,\n container,\n selector: 'g',\n append: 'g',\n each: (points, group, i) => {\n const seriesClassName = `${qualifiedClassName[0]}-${keys[i] || i}`.toLowerCase();\n group.style('display', 'block');\n drawRects({\n container: group.node(),\n points,\n className: seriesClassName,\n transition,\n style: {},\n keyFn: d => dimensions.map(key => d._data[key]).join('-')\n });\n }\n });\n return this;\n }\n\n /**\n *\n *\n * @param {*} normalizedData\n * @param {*} keys\n * @returns\n * @memberof BarLayer\n */\n generateDataPoints (normalizedData, keys) {\n const [barWidthMetrics, barHeightMetrics] = getPlotMeasurement(this, keys);\n const barWidthOffsets = barWidthMetrics.offsetValues || [];\n const barHeightOffsets = barHeightMetrics.offsetValues || [];\n this._plotSpan = {\n x: barWidthMetrics.groupSpan || 0,\n y: barHeightMetrics.groupSpan || 0\n };\n this._plotPadding = {\n x: barWidthMetrics.padding || 0,\n y: barHeightMetrics.padding || 0\n };\n\n this._pointMap = {};\n return normalizedData.map((data, i) => this.translatePoints(data,\n {\n barWidth: barWidthMetrics.span,\n barWidthOffset: barWidthOffsets[i] || 0,\n barHeight: barHeightMetrics.span,\n barHeightOffset: barHeightOffsets[i] || 0\n }));\n }\n\n getPlotPadding () {\n return this._plotPadding;\n }\n\n /**\n * Gets the nearest point of the position passed.\n * @param {number} x x position\n * @param {number} y y position\n * @return {Object} Nearest point.\n */\n getNearestPoint (x, y) {\n if (!this.data()) {\n return null;\n }\n let axis;\n let value;\n let index;\n let points;\n let uniqueFieldType;\n let uniqueFieldIndex;\n let filterData;\n let identifiers;\n let pointFound = null;\n const dataModel = this.data();\n const dataObj = dataModel.getData();\n const fieldsConfig = dataModel.getFieldsConfig();\n const axes = this.axes();\n const data = dataObj.data;\n const pointMap = this._pointMap;\n const {\n xField,\n yField,\n xFieldSubType,\n yFieldSubType\n } = this.encodingFieldsInf();\n\n if (xFieldSubType === FieldType.MEASURE) {\n axis = axes.y;\n value = axis.invert(y);\n uniqueFieldIndex = fieldsConfig[yField].index;\n uniqueFieldType = yFieldSubType;\n } else {\n axis = axes.x;\n value = axis.invert(x);\n uniqueFieldIndex = fieldsConfig[xField].index;\n uniqueFieldType = xFieldSubType;\n }\n\n if (uniqueFieldType === DimensionSubtype.CATEGORICAL) {\n points = pointMap[value];\n }\n\n if (uniqueFieldType === DimensionSubtype.TEMPORAL) {\n filterData = [...new Set(data.map(d => d[uniqueFieldIndex]))];\n index = getClosestIndexOf(filterData, value);\n value = filterData[index];\n points = pointMap[value];\n }\n const len = points && points.length;\n points && points.sort((p1, p2) => p1.update.y - p2.update.y);\n for (let i = 0; i < len; i++) {\n const point = points[i];\n const update = point.update;\n if (x >= update.x && x <= (update.width + update.x) && y >= update.y && y <= (update.height + update.y)) {\n pointFound = point;\n break;\n }\n pointFound = null;\n }\n\n const values = pointFound && pointFound._data;\n if (values) {\n identifiers = this.getIdentifiersFromData(values, pointFound._id);\n }\n return pointFound ? {\n dimensions: [pointFound.update],\n id: identifiers,\n layerId: this.id()\n } : pointFound;\n }\n\n getPlotSpan () {\n return this._plotSpan;\n }\n}\n","import { CLASSPREFIX } from '../../enums/constants';\n\nexport const defaultConfig = {\n defClassName: 'layer-tick',\n className: '',\n classPrefix: CLASSPREFIX,\n interaction: {\n highlight: [{\n type: 'stroke',\n intensity: [0, 0, -15, 0]\n }],\n fade: [{\n type: 'stroke',\n intensity: [0, 0, 15, 0]\n }],\n focus: [{\n type: 'stroke',\n intensity: [0, 0, 15, 0]\n }]\n },\n innerPadding: 0.1,\n transform: {\n type: 'identity'\n },\n transition: {\n effect: 'cubic',\n duration: 1000\n },\n encoding: {\n color: { },\n x: {},\n y: {},\n x0: {},\n y0: {},\n strokeOpacity: {\n value: 0.5\n },\n fillOpacity: {\n value: 0.5\n }\n },\n states: {\n highlight: {\n className: `${CLASSPREFIX}-layer-tick-highlight`\n },\n fadeout: {\n className: `${CLASSPREFIX}-layer-tick-fadeout`\n },\n selected: {\n className: `${CLASSPREFIX}-layer-tick-selected`\n }\n }\n};\n","import { selectElement } from 'muze-utils';\n\n/**\n * Draws ticks by using d3 selection\n * @param {Object} params Contains container element and points\n * @return {Selection} Ticks Selection\n */\nexport default /* istanbul ignore next */ (params) => {\n const { points, container, keyFn, className } = params;\n const mount = selectElement(container);\n const ticks = mount.selectAll('path').data(points, keyFn);\n const ticksEnter = ticks.enter().append('path');\n\n mount.attr('class', className || '');\n ticksEnter.each(function (d) {\n const selection = selectElement(this);\n const enter = d.enter || {};\n Object.entries(enter).forEach(attr => (!isNaN(attr[1]) && selection.attr(attr[0], attr[1])));\n });\n\n ticks.exit().remove();\n return ticks.merge(ticksEnter)\n .each(function (d) {\n const selection = selectElement(this);\n const update = d.update;\n const updateStyle = d.style || {};\n const x0 = update.x0 !== undefined ? update.x0 : update.x;\n const y0 = update.y0 !== undefined ? update.y0 : update.y;\n const path = `M ${update.x} ${update.y} L ${x0} ${y0}`;\n d.className && selection.classed(d.className, true);\n selection.attr('d', path);\n Object.entries(updateStyle).forEach(styleObj => selection.style(styleObj[0], styleObj[1]));\n });\n};\n\n","import { FieldType } from 'muze-utils';\nimport { PointLayer } from '../point';\nimport { defaultConfig } from './default-config';\nimport * as PROPS from '../../enums/props';\nimport { ENCODING } from '../../enums/constants';\nimport drawTicks from './renderer';\nimport './styles.scss';\nimport { getAxesScales, getLayerColor, positionPoints, getIndividualClassName } from '../../helpers';\n\nexport default class TickLayer extends PointLayer {\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof TickLayer\n */\n static defaultConfig () {\n return defaultConfig;\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof TickLayer\n */\n static formalName () {\n return 'tick';\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof TickLayer\n */\n static drawFn () {\n return drawTicks;\n }\n\n /**\n *\n *\n * @returns\n * @memberof TickLayer\n */\n elemType () {\n return 'path';\n }\n\n /**\n * Generates an array of objects containing x, y, width and height of the points from the data\n * @param {Array.} data Data Array\n * @param {Object} encoding Config\n * @param {Object} axes Axes object\n * @return {Array.} Array of points\n */\n translatePoints (data, encoding, axes, config = {}) {\n let points = [];\n const {\n xAxis,\n yAxis\n } = getAxesScales(axes);\n const fieldsConfig = this.data().getFieldsConfig();\n const {\n xField,\n yField,\n x0Field,\n y0Field,\n xFieldType,\n yFieldType\n } = this.encodingFieldsInf();\n const isXDim = xFieldType === FieldType.DIMENSION;\n const isYDim = yFieldType === FieldType.DIMENSION;\n const key = isXDim ? ENCODING.X : (isYDim ? ENCODING.Y : null);\n const colorEncoding = encoding.color;\n const colorField = colorEncoding && colorEncoding.field;\n const colorFieldIndex = fieldsConfig[colorField] && fieldsConfig[colorField].index;\n const measurement = this._store.get(PROPS.MEASUREMENT);\n const colorAxis = axes.color;\n const { x: offsetX, y: offsetY } = config.offset;\n const { x: xSpan, y: ySpan } = config.span;\n for (let i = 0, len = data.length; i < len; i++) {\n let xPx;\n let x0Px;\n let y0Px;\n let yPx;\n const d = data[i];\n const row = d._data;\n if (xField) {\n xPx = xAxis.getScaleValue(d.x) + offsetX;\n x0Px = xPx + xSpan;\n }\n\n if (yField) {\n yPx = yAxis.getScaleValue(d.y) + offsetY;\n y0Px = yPx !== null ? yPx + ySpan : null;\n }\n\n if (!xField) {\n xPx = 0;\n x0Px = measurement.width;\n if (!isNaN(yPx)) {\n yPx += ySpan / 2;\n y0Px = yPx;\n }\n }\n\n if (!yField) {\n yPx = 0;\n y0Px = measurement.height;\n x0Px = xPx += xSpan / 2;\n }\n\n if (x0Field) {\n x0Px = xAxis.getScaleValue(d.x0) + xSpan;\n yPx += ySpan / 2;\n y0Px -= ySpan / 2;\n }\n\n if (y0Field) {\n y0Px = yAxis.getScaleValue(d.y0) + ySpan;\n xPx += xSpan / 2;\n x0Px -= xSpan / 2;\n }\n const style = {};\n const meta = {};\n const { color, rawColor } = getLayerColor({ datum: d, index: i },\n { colorEncoding, colorAxis, colorFieldIndex });\n\n style.stroke = color;\n meta.stateColor = {};\n meta.originalColor = rawColor;\n meta.colorTransform = {};\n if (!isNaN(xPx) && !isNaN(yPx)) {\n const point = {\n enter: {},\n update: {\n x: xPx,\n y: yPx,\n x0: x0Px,\n y0: y0Px\n },\n style,\n _data: row,\n _id: d._id,\n source: row,\n rowId: d._id,\n meta\n };\n point.className = getIndividualClassName(d, i, data, this);\n points.push(point);\n this.cachePoint(d[key], point);\n }\n }\n points = positionPoints(this, points);\n return points;\n }\n\n getMeasurementConfig (offsetX, offsetY, widthSpan, heightSpan) {\n return {\n offset: {\n x: (offsetX || 0),\n y: (offsetY || 0)\n },\n span: {\n x: widthSpan,\n y: heightSpan\n }\n };\n }\n}\n","import { isSimpleObject, mergeRecursive, getObjProp } from 'muze-utils';\n\nconst parseLayerDefinition = (sink, definition, layerDef, layerType) => {\n for (const key in definition) {\n if (Object.hasOwnProperty.call(definition, key)) {\n let strs;\n let propValue;\n const def = definition[key];\n if (isSimpleObject(def)) {\n sink[key] = {};\n parseLayerDefinition(sink[key], def, layerDef, layerType);\n } else if (typeof def === 'string' && (strs = def.split('.')) && strs[0] === layerType) {\n propValue = getObjProp(layerDef, ...strs.slice(1, strs.length));\n if (propValue !== undefined) {\n sink[key] = propValue;\n }\n } else {\n sink[key] = def;\n }\n }\n }\n};\n\nconst sanitizeEncoding = (encoding) => {\n // Create object for each encoding value if encoding value is a string\n for (const key in encoding) {\n if (typeof encoding[key] === 'string') {\n encoding[key] = {\n field: encoding[key]\n };\n }\n }\n};\n\n/**\n * Layer Factory creates layers based on the layer type. All types of layers needs to register in\n * the layer factory. For getting a layer instance, getLayer method needs to invoked with the\n * layerType and other arguments.\n */\nconst layerFactory = (() => {\n const compositeLayers = {};\n const factoryObj = {\n setLayerRegistry: (reg) => {\n factoryObj._layerRegistry = reg;\n },\n getSerializedConf: (mark, layerDef) => {\n let serializedDefs;\n const defs = compositeLayers[mark];\n const newConf = mergeRecursive({}, layerDef);\n\n // If it is a composite layer then resolve all the definitions of each unit layer\n if (defs) {\n serializedDefs = defs.map((unitLayerDef) => {\n const sDef = {};\n parseLayerDefinition(sDef, unitLayerDef, newConf, mark);\n sanitizeEncoding(sDef.encoding);\n return sDef;\n });\n } else {\n const encoding = newConf.encoding;\n // Create object for each encoding value if encoding value is a string\n sanitizeEncoding(encoding);\n serializedDefs = newConf;\n }\n\n return serializedDefs;\n },\n getLayerInstance: (layerDef) => {\n const layerRegistry = factoryObj._layerRegistry;\n layerDef = !(layerDef instanceof Array) ? [layerDef] : layerDef;\n const instances = layerDef.map((layerObj) => {\n const layerConstructor = layerRegistry[layerObj.mark];\n return layerConstructor.create();\n });\n return instances.length === 1 ? instances[0] : instances;\n },\n composeLayers: (layerType, layerDefs) => {\n compositeLayers[layerType] = layerDefs;\n },\n sanitizeLayerConfig: (layerDef) => {\n const newConf = mergeRecursive({}, layerDef);\n sanitizeEncoding(newConf.encoding);\n return newConf;\n }\n };\n return factoryObj;\n})();\n\nexport default layerFactory;\n","import { AreaLayer } from './layers/area';\nimport { ArcLayer } from './layers/arc';\nimport { LineLayer } from './layers/line';\nimport { TextLayer } from './layers/text';\nimport { PointLayer } from './layers/point';\nimport { BarLayer } from './layers/bar';\nimport { BaseLayer } from './base-layer';\nimport * as CONSTANTS from './enums/constants';\nimport { TickLayer } from './layers/tick';\n\nexport const DEFAULT_LAYERS = {\n [CONSTANTS.AREA_LAYER]: AreaLayer,\n [CONSTANTS.ARC_LAYER]: ArcLayer,\n [CONSTANTS.LINE_LAYER]: LineLayer,\n [CONSTANTS.TEXT_LAYER]: TextLayer,\n [CONSTANTS.POINT_LAYER]: PointLayer,\n [CONSTANTS.TICK_LAYER]: TickLayer,\n [CONSTANTS.BAR_LAYER]: BarLayer,\n [CONSTANTS.BASE_LAYER]: BaseLayer\n};\n","/**\n * This file exports constants that are used as enums in the\n * crosstab group implementation.\n */\n/**\n * Width of the crosstab.\n */\nexport const X = 'x';\n/**\n * Width of the crosstab.\n */\nexport const Y = 'y';\n/**\n * Width of the crosstab.\n */\nexport const WIDTH = 'width';\n\n/**\n * Height of the crosstab.\n */\nexport const HEIGHT = 'height';\n\n/**\n * Field referring to object storing measurement configuration.\n */\nexport const MEASUREMENT = 'measurement';\n\n/**\n * Field referring to object storing configuration properties.\n */\nexport const CONFIG = 'config';\n\n/**\n * Width of visual unit in crosstab.\n */\nexport const MIN_UNIT_WIDTH = 'minUnitWidth';\n\n/**\n * Height of visual unit.\n */\nexport const MIN_UNIT_HEIGHT = 'minUnitHeight';\n\n/**\n * Field to store the array of dimensions to facet by.\n */\nexport const DIMENSIONS = 'dimensions';\n\n/**\n * Field to store array of measures to use as x axis.\n */\nexport const MEASURES = 'measures';\n\n/**\n * Field to store the array of dimensions to facet by.\n */\nexport const DIMENSION = 'dimension';\n\n/**\n * Field to store array of measures to use as x axis.\n */\nexport const MEASURE = 'measure';\n\n/**\n * Flag to specify if model should be pivoted.\n */\nexport const PIVOT = 'pivot';\n\n/**\n * Flag to specify format\n */\nexport const FORMAT = 'format';\n\n/**\n * Mount point where the variable will be hosted\n */\nexport const MOUNT = 'mount';\n\n/**\n * Data update flag\n */\nexport const HAS_DATA_UPDATED = 'hasDataUpdated';\n\n/**\n * Field referring to object storing set of rows\n */\nexport const ROWS = 'rows';\n\n/**\n * Field referring to object storing set of columns\n */\nexport const COLUMNS = 'columns';\n\n/**\n * Field referring to object storing set of columns\n */\nexport const COL = 'col';\n\n/**\n * Field referring to object storing set of rows\n */\nexport const ROW = 'row';\n\n/**\n * Field referring to object storing set of columns\n */\nexport const COLUMN = 'column';\n\n/**\n * Field referring to object storing color field\n */\nexport const COLOR = 'color';\n\n/**\n * Field referring to object storing shape field\n */\nexport const SHAPE = 'shape';\n\n/**\n * Field referring to object storing size field\n */\nexport const SIZE = 'size';\n\n/**\n * Field referring to object storing detail field\n */\nexport const DETAIL = 'detail';\n\n/**\n * Field referring to object storing set of layers\n */\nexport const LAYERS = 'layers';\n\n/**\n * Field referring to object storing the transforms\n */\nexport const TRANSFORM = 'transform';\n\n/**\n * Field referring to object storing the transforms\n */\nexport const ORDINAL = 'ordinal';\n\n/**\n * Field referring to object storing the transforms\n */\nexport const LINEAR = 'linear';\n/**\n * Field referring to object storing the transforms\n */\nexport const LEFT = 'left';\n/**\n * Field referring to object storing the transforms\n */\nexport const RIGHT = 'right';\n/**\n * Field referring to object storing the transforms\n */\nexport const TOP = 'top';\n/**\n * Field referring to object storing the transforms\n */\nexport const BOTTOM = 'bottom';\n\n/**\n * Field referring to object storing the transforms\n */\nexport const RETINAL = 'retinal';\n/**\n * Field referring to object storing the transforms\n */\nexport const CELL = 'cell';\n/**\n * Field referring to object storing the transforms\n */\nexport const X_AXES = 'xAxes';\n/**\n * Field referring to object storing the transforms\n */\nexport const Y_AXES = 'yAxes';\n/**\n * Field referring to object storing the transforms\n */\nexport const ENTRY_CELLS = 'entryCell';\n/**\n * Field referring to object storing the transforms\n */\nexport const INITIALIZED = 'initialized';\n/**\n * Field referring to object storing the transforms\n */\nexport const EXIT_CELLS = 'exitCell';\n/**\n * Field referring to object storing the transforms\n */\nexport const AXIS = 'axis';\n/**\n * Field referring to object storing the transforms\n */\nexport const UNIT = 'unit';\n/**\n * Field referring to object storing the transforms\n */\nexport const UPDATED = 'updated';\n/**\n * Field referring to object storing the transforms\n */\nexport const BEFORE_UPDATE = 'beforeupdate';\n/**\n * Field referring to object storing the transforms\n */\nexport const VALUE_MATRIX = 'valueMatrix';\n/**\n * Field referring to object storing the transforms\n */\nexport const FACET_HEADERS = 'facet-headers';\n/**\n * Field referring to object storing the transforms\n */\nexport const RADIUS = 'radius';\n/**\n * Field referring to object storing the transforms\n */\nexport const ANGLE = 'angle';\n/**\n * Field referring to object storing the transforms\n */\nexport const ARC = 'arc';\n/**\n * Field referring to object storing the transforms\n */\nexport const CARTESIAN = 'cartesian';\n/**\n * Field referring to object storing the transforms\n */\nexport const POLAR = 'polar';\n/**\n * Field referring to object storing the transforms\n */\nexport const CATEGORICAL = 'categorical';\n/**\n * Field referring to object storing the transforms\n */\nexport const TEMPORAL = 'temporal';\n/**\n * Field referring to object storing the transforms\n */\nexport const BAR = 'bar';\n/**\n * Field referring to object storing the transforms\n */\nexport const LINE = 'line';\n/**\n * Field referring to object storing the transforms\n */\nexport const POINT = 'point';\n/**\n * Field referring to object storing the transforms\n */\nexport const PRIMARY = 'Primary';\n/**\n * Field referring to object storing the transforms\n */\nexport const SECONDARY = 'Secondary';\n/**\n * Field referring to object storing the transforms\n */\nexport const BOTH = 'both';\n/**\n * Field referring to object storing the transforms\n */\nexport const INTERACTION = 'interaction';\n/**\n * Field referring to object storing the transforms\n */\nexport const GRID_LINES = 'gridLines';\n/**\n * Field referring to object storing the transforms\n */\nexport const GRID_BANDS = 'gridBands';\n/**\n * Field referring to object storing the transforms\n */\nexport const HEADER = 'header';\n/**\n * Field referring to object storing the transforms\n */\nexport const FACET = 'facet';\n\n","import { ROWS, COLUMNS, COLOR, SHAPE, SIZE, DETAIL, LAYERS, TRANSFORM, CONFIG } from '../enums/constants';\n\n/**\n * @module\n * This is the local options semantics based on which setters getters are created and reactivity is initiated.\n * This local object is only valid for Artboard.\n * Artboard merges global and local object both to the model\n *\n * Format\n * PROPERTRY_NAME: {\n * value: // default value of the property,\n * meta: {\n * typeCheck: // The setter value will be checked using this. If the value is function then the setter value\n * // is passed as args.\n * typeExpected: // The output of typecheck action will be tested against this. Truthy value will set the\n * // value to the setter\n * sanitizaiton: // Need for sanitization before type is checked\n * }\n * }\n */\n\nexport default {\n [CONFIG]: {},\n [ROWS]: [],\n [COLUMNS]: [],\n [COLOR]: '',\n [SHAPE]: '',\n [SIZE]: '',\n [DETAIL]: '',\n [LAYERS]: '',\n [TRANSFORM]: []\n};\n","import { ERROR_MSG } from 'muze-utils';\n\n/**\n * Interfaces for VisualGroup. Any new VisualGroup has to implement this class.\n * @class SimpleGroup\n */\nclass SimpleGroup {\n\n /**\n * This method is used to set or get the DataModel instance.\n *\n * @param {DataModel | undefined} dataModel Instance of datamodel.\n\n * @memberof SimpleGroup\n */\n data () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * This method is used to set or get the group specific configuration\n * properties\n *\n * @param {Object | undefined} configObj The input configuration.\n * or instance of visual group.\n * @memberof SimpleGroup\n */\n config () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * This method is used to return a serialized representation of the\n * instance's properties.\n *\n * @memberof SimpleGroup\n */\n serialize () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * This method is used to get or set the measurement object which houses\n * layout properties like width and height.\n *\n * @param {Object | undefined} mObj The measurement properties.\n * @memberof SimpleGroup\n */\n measurement () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n}\n\nexport default SimpleGroup;\n","import { ERROR_MSG } from 'muze-utils';\n\n/**\n *\n *\n * @export\n * @class Variable\n */\nexport default class Variable {\n\n /**\n *\n *\n * @memberof Variable\n */\n type () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n *\n *\n * @memberof Variable\n */\n toString () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n}\n","import Variable from './variable';\n\n/**\n *\n *\n * @class ComposeVars\n * @extends {Variable}\n */\nclass ComposedVars extends Variable {\n\n /**\n *Creates an instance of ComposeVars.\n * @param {*} texts\n * @memberof ComposeVars\n */\n constructor (...texts) {\n super(...texts);\n this.vars(texts);\n }\n\n /**\n *\n *\n * @param {*} params\n * @returns\n * @memberof ComposeVars\n */\n vars (...params) {\n if (params.length) {\n this._vars = params[0];\n return this;\n }\n return this._vars;\n }\n\n /**\n *\n *\n * @param {*} dm\n * @returns\n * @memberof ComposeVars\n */\n data (...dm) {\n if (dm.length) {\n this.vars().forEach(d => d.data(dm[0]));\n return this;\n }\n return this._data;\n }\n\n /**\n *\n *\n * @returns\n * @memberof ComposeVars\n */\n getMembers () {\n const vars = this.vars();\n return vars.map(member => member.getMembers()[0]);\n }\n\n /**\n *\n *\n * @returns\n * @memberof ComposeVars\n */\n type () {\n return this.vars()[0].type();\n }\n\n /**\n *\n *\n * @returns\n * @memberof ComposeVars\n */\n toString () {\n return this.vars().map(d => d.toString()).join(',');\n }\n\n /**\n *\n *\n * @returns\n * @memberof ComposeVars\n */\n numberFormat () {\n return this.vars()[0].numberFormat();\n }\n\n /**\n *\n *\n * @returns\n * @memberof ComposeVars\n */\n format (values) {\n return this.vars()[0].format(values);\n }\n\n /**\n *\n *\n * @returns\n * @memberof ComposedVars\n */\n subtype () {\n return this.vars()[0].subtype();\n }\n\n /**\n *\n *\n * @returns\n * @memberof ComposedVars\n */\n getMinDiff () {\n return this.vars()[0].getMinDiff();\n }\n}\n\nexport default ComposedVars;\n","import { DateTimeFormatter } from 'muze-utils';\nimport Variable from './variable';\n\n/**\n *\n *\n * @export\n * @class Vars\n * @extends {Variable}\n */\nexport default class SimpleVariable extends Variable {\n\n /**\n *Creates an instance of Vars.\n * @param {*} text\n * @memberof Vars\n */\n constructor (text) {\n super();\n this.oneVar(text);\n }\n\n /**\n *\n *\n * @param {*} params\n * @returns\n * @memberof Vars\n */\n oneVar (...oneV) {\n if (oneV.length) {\n this._oneVar = oneV[0];\n return this;\n }\n return this._oneVar;\n }\n\n /**\n *\n *\n * @param {*} dm\n * @returns\n * @memberof Vars\n */\n data (...dm) {\n if (dm.length) {\n this._data = dm[0];\n return this;\n }\n return this._data;\n }\n\n /**\n *\n *\n * @returns\n * @memberof Vars\n */\n toString () {\n return this.oneVar();\n }\n\n /**\n *\n *\n * @memberof SimpleVariable\n */\n numberFormat () {\n if (this.type() === 'measure') {\n const formatter = this.data().getFieldspace().getMeasure()[this.oneVar()]._ref;\n return formatter.numberFormat();\n } return val => val;\n }\n\n /**\n *\n *\n * @memberof SimpleVariable\n */\n format (values) {\n if (values && this.subtype() === 'temporal') {\n const formatter = this.data().getFieldspace().getDimension()[this.oneVar()]._ref.schema.format;\n const dtFormat = new DateTimeFormatter(formatter);\n values = values.map(e => dtFormat.getNativeDate(e));\n }\n return values;\n }\n\n /**\n *\n *\n * @returns\n * @memberof Vars\n */\n getMembers () {\n return [this.oneVar()];\n }\n\n /**\n *\n *\n * @returns\n * @memberof Vars\n */\n type () {\n const fieldDef = this.data().getFieldsConfig()[this.oneVar()].def;\n return fieldDef.type;\n }\n\n /**\n *\n *\n * @returns\n * @memberof Vars\n */\n subtype () {\n const fieldDef = this.data().getFieldsConfig()[this.oneVar()].def;\n return fieldDef.subtype || fieldDef.type;\n }\n\n /**\n *\n *\n * @returns\n * @memberof SimpleVariable\n */\n getMinDiff () {\n const fieldSpace = this.data().getFieldspace();\n return fieldSpace.fieldsObj()[this.oneVar()].getMinDiff();\n }\n\n equals (varInst) {\n return this.oneVar() === varInst.oneVar();\n }\n}\n","import { ComposedVars, SimpleVariable } from '../variable';\nimport { DIMENSION, COLUMNS, ROWS, TEMPORAL } from '../enums/constants';\n\n/**\n * Gets the list of fields in a sorted order by measurement and dimension\n *\n * @param {Array} fieldList List of fields in the view\n * @param {Object} fieldMap Mapping of fields in the datamodel\n * @return {Array} fields sorted by measurement and dimensions\n */\nconst orderFields = (fieldArray, type) => {\n const dimensionArr = [[], []];\n const measureArr = [[], []];\n const temporalArr = [[], []];\n const categoricalArr = [[], []];\n\n fieldArray.forEach((fieldList, index) => {\n fieldList.forEach((field) => {\n if (field.type() === DIMENSION) {\n dimensionArr[index].push(field);\n field.subtype() === TEMPORAL ? temporalArr[index].push(field) : categoricalArr[index].push(field);\n } else {\n measureArr[index].push(field);\n }\n });\n });\n\n const numOfMeasures = measureArr[0].length + (measureArr[1] ? measureArr[1].length : 0);\n\n // Single array of fields\n if (!fieldArray[1]) {\n // Push measures to bottom\n measureArr[1] = type === COLUMNS ? measureArr[0] : [];\n // Push measures to left\n measureArr[0] = type !== COLUMNS ? measureArr[0] : [];\n // Bottom and right dimensions empty\n dimensionArr[1] = [];\n // Left and top filled with dimensions\n dimensionArr[0] = dimensionArr[0];\n if (numOfMeasures === 0) {\n const allDimensions = [...dimensionArr[0], ...dimensionArr[1]];\n if (type === COLUMNS) {\n dimensionArr[1] = allDimensions[allDimensions.length - 1] ? [allDimensions[allDimensions.length - 1]]\n : [];\n allDimensions.splice(-1, 1);\n } else {\n dimensionArr[1] = [];\n }\n dimensionArr[0] = [...allDimensions];\n }\n }\n\n if (dimensionArr[0].length && dimensionArr[1].length && numOfMeasures > 0) {\n dimensionArr[0] = [...dimensionArr[0], ...dimensionArr[1]];\n dimensionArr[1] = [];\n }\n return {\n fields: dimensionArr.map((list, i) => (i === 1 ?\n measureArr[i].concat(dimensionArr[i]) : dimensionArr[i].concat(measureArr[i]))),\n dimensions: [...dimensionArr[0], ...dimensionArr[1]],\n measures: [...measureArr[0], ...measureArr[1]],\n temporal: [...temporalArr[0], ...temporalArr[1]],\n categorical: [...categoricalArr[0], ...categoricalArr[1]]\n };\n};\n\n/**\n * Gets the list of normalized fields\n *\n * @param {Array} fields List of fields in the view\n * @param {Object} fieldMap Mapping of fields in the datamodel\n * @return {Array} fields normalized by measurement and dimensions\n */\nconst normalizeFields = (config, type) => {\n const fieldsArr = [];\n const fields = config[type];\n\n if (!(fields[0] instanceof Array)) {\n fieldsArr[0] = fields;\n } else {\n fieldsArr[0] = fields[0] || [];\n fieldsArr[1] = fields[1] || [];\n }\n return fieldsArr;\n};\n\n/**\n *\n *\n * @param {*} fields\n * @param {*} datamodel\n * @return\n */\nconst convertToVar = (datamodel, fields) => {\n const vars = [];\n\n fields && fields.forEach((field) => {\n if (field instanceof ComposedVars) {\n vars.push(field);\n field.data(datamodel);\n } else {\n vars.push(new SimpleVariable(field).data(datamodel));\n }\n });\n return vars;\n};\n\n/**\n *\n *\n * @param {*} rows\n * @param {*} columns\n * @param {*} datamodel\n * @return\n */\nexport const transformFields = (datamodel, config) => {\n const [rowsInfo, columnsInfo] = [ROWS, COLUMNS].map((fields) => {\n const normalizedFields = normalizeFields(config, fields);\n const norFields = [convertToVar(datamodel, normalizedFields[0])];\n\n if (normalizedFields[1]) {\n norFields[1] = convertToVar(datamodel, normalizedFields[1]);\n }\n return orderFields(norFields, fields);\n });\n const {\n fields: rows,\n dimensions: rowDimensions,\n measures: rowMeasures,\n temporal: rowTemporalFields,\n categorical: rowCategoricalFields\n } = rowsInfo;\n const {\n fields: columns,\n dimensions: columnDimensions,\n measures: columnMeasures,\n temporal: columnTemporalFields,\n categorical: columnCategoricalFields\n } = columnsInfo;\n return {\n rows,\n rowDimensions,\n rowMeasures,\n rowTemporalFields,\n rowCategoricalFields,\n columns,\n columnTemporalFields,\n columnCategoricalFields,\n columnDimensions,\n columnMeasures\n };\n};\n","import { ERROR_MSG, mergeRecursive } from 'muze-utils';\nimport { transformFields } from './field-sanitizer';\nimport { getHeaderAxisFrom } from '../group-helper/group-utils';\nimport { ROW, COLUMN } from '../enums/constants';\n\n/**\n *\n *\n * @export\n * @class VisualEncoder\n */\nexport default class VisualEncoder {\n\n /**\n *\n *\n * @memberof VisualEncoder\n */\n createAxis () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n *\n *\n * @memberof VisualEncoder\n */\n setCommonDomain () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n *\n *\n * @memberof VisualEncoder\n */\n getLayerConfig () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n fieldInfo (...info) {\n if (info.length) {\n this._fieldInfo = mergeRecursive(this._fieldInfo || {}, info[0]);\n return this;\n }\n return this._fieldInfo;\n }\n\n /**\n *\n *\n * @param {*} datamodel\n * @param {*} config\n * @return\n * @memberof VisualEncoder\n */\n fieldSanitizer (datamodel, config) {\n this.fieldInfo(transformFields(datamodel, config));\n return this.fieldInfo();\n }\n\n /**\n *\n *\n * @param {*} params\n * @return\n * @memberof VisualEncoder\n */\n axisFrom (...params) {\n if (params.length) {\n this._axisFrom = params[0];\n return this;\n }\n return this._axisFrom;\n }\n\n /**\n *\n *\n * @param {*} params\n * @return\n * @memberof VisualEncoder\n */\n headerFrom (...params) {\n if (params.length) {\n this._headerFrom = params[0];\n return this;\n }\n return this.__headerFrom;\n }\n\n /**\n *\n *\n * @param {*} axisFrom\n * @return\n * @memberof CartesianEncoder\n */\n setAxisAndHeaders (axisFrom = {}, fields) {\n const [rowHeader, rowAxis] = getHeaderAxisFrom(ROW, fields.rows, axisFrom);\n const [colHeader, colAxis] = getHeaderAxisFrom(COLUMN, fields.columns, axisFrom);\n\n this.axisFrom({\n row: rowAxis,\n column: colAxis\n });\n this.headerFrom({\n row: rowHeader,\n column: colHeader\n });\n return this;\n }\n}\n","import { ContinousAxis, BandAxis, TimeAxis, ColorAxis, SizeAxis, ShapeAxis } from '@chartshq/muze-axis';\n\nexport const scaleMaps = {\n linear: ContinousAxis,\n band: BandAxis,\n temporal: TimeAxis,\n size: SizeAxis,\n color: ColorAxis,\n shape: ShapeAxis\n};\n","import { ScaleType } from '@chartshq/muze-axis';\n\n/**\n * Map of DataModel types to associated field types.\n */\nexport const dataTypeScaleMap = {\n dimension: ScaleType.BAND,\n categorical: ScaleType.BAND,\n measure: ScaleType.LINEAR,\n temporal: ScaleType.TIME\n};\n\n","import { mergeRecursive } from 'muze-utils';\nimport { AxisOrientation } from '@chartshq/muze-axis';\nimport { scaleMaps } from '../enums/scale-maps';\nimport { getAxisType, getAxisKey } from '../group-helper';\nimport { dataTypeScaleMap } from '../data-type-scale-map';\nimport { CATEGORICAL, TEMPORAL, BAR, LINE, POINT, BOTH, Y } from '../enums/constants';\n\n/**\n *\n *\n * @param {*} axisInfo\n * @param {*} field\n * @param {*} axesCreators\n * @return\n */\nconst getAxisConfig = (axisInfo, field, axesCreators) => {\n let axisOrientation;\n const { index, axisIndex, axisType } = axisInfo;\n const { config, position } = axesCreators;\n const userAxisConfig = config.axes ? (config.axes[axisType] || {}) : {};\n const {\n LEFT,\n RIGHT,\n TOP,\n BOTTOM\n } = AxisOrientation;\n const allOrientations = axisType === Y ? [LEFT, RIGHT] : [TOP, BOTTOM];\n\n if (position === BOTH) {\n axisOrientation = allOrientations[axisIndex];\n } else {\n axisOrientation = position;\n }\n const axisConfig = {\n id: `${axisType}-${index}-${axisIndex}`,\n name: field.toString(),\n field: field.toString(),\n labels: { rotation: 0 },\n numberFormat: field.numberFormat(),\n orientation: axisOrientation,\n type: dataTypeScaleMap[field.subtype()]\n };\n userAxisConfig.tickValues = field.format(userAxisConfig.tickValues);\n userAxisConfig.domain = field.format(userAxisConfig.domain);\n\n return mergeRecursive(axisConfig, userAxisConfig);\n};\n\n/**\n *\n *\n * @param {*} axisInfo\n * @param {*} field\n * @param {*} axesCreators\n * @return\n */\nconst createSimpleAxis = (axisConfig, field, axesCreators) => {\n const { labelManager } = axesCreators;\n const Cls = scaleMaps[dataTypeScaleMap[field.subtype()]];\n const simpleAxis = new Cls(axisConfig, { labelManager });\n return simpleAxis;\n};\n\n/**\n *\n *\n * @param {*} axisType\n * @param {*} fieldInfo\n * @param {*} axesCreators\n * @param {*} groupAxes\n * @return\n */\nexport const generateAxisFromMap = (axisType, fieldInfo, axesCreators, groupAxes) => {\n let axisKey;\n const currentAxes = [];\n const { fields, index } = fieldInfo;\n const { cacheMaps } = axesCreators;\n const map = cacheMaps[`${axisType}AxesMap`];\n\n fields.forEach((field, axisIndex) => {\n axisKey = getAxisKey(axisType, index, dataTypeScaleMap[field.subtype()]);\n const axisConfig = getAxisConfig({ index, axisIndex, axisType }, field, axesCreators);\n\n if (!map.has(axisKey)) {\n const xAxis = createSimpleAxis(axisConfig, field, axesCreators);\n currentAxes.push(xAxis);\n } else {\n const axes = map.get(axisKey);\n axes[axisIndex] = axes[axisIndex] ? axes[axisIndex] : createSimpleAxis(axisConfig, field, axesCreators);\n axes[axisIndex]._rotationLock = false;\n axes[axisIndex] && axes[axisIndex].config(axisConfig).domain(axisConfig.domain || []);\n }\n });\n\n if (currentAxes.length) {\n map.set(axisKey, currentAxes);\n }\n\n for (const [key] of map.entries()) {\n if (key === axisKey) {\n groupAxes.add(axisKey);\n }\n }\n return map.get(axisKey);\n};\n\n/**\n *\n *\n * @memberof MatrixResolver\n */\nexport const mutateAxesFromMap = (cacheMaps, axes) => {\n const {\n xAxesMap,\n yAxesMap\n } = cacheMaps;\n const {\n x: xAxisSet,\n y: yAxisSet\n } = axes;\n const xAxes = [];\n const yAxes = [];\n\n xAxisSet.forEach((axisId) => {\n const xAxis = xAxesMap.get(axisId);\n xAxes.push(xAxis);\n });\n yAxisSet.forEach((axisId) => {\n const yAxis = yAxesMap.get(axisId);\n yAxes.push(yAxis);\n });\n return {\n xAxes, yAxes\n };\n};\n\n/**\n * return a default mark based on predefined set of rules of type and subtype of the fields\n *\n * @param {string} colFieldType dimension/measure - temporal/ordinal/nominal\n * @param {string} rowFieldType dimension/measure - temporal/ordinal/nominal\n * @return {Object} return mark type\n */\nexport const getDefaultMark = (colFieldType, rowFieldType) => {\n let mark;\n\n if (colFieldType === CATEGORICAL || rowFieldType === CATEGORICAL) {\n mark = BAR;\n } else if (colFieldType === TEMPORAL || rowFieldType === TEMPORAL) {\n mark = LINE;\n } else {\n mark = POINT;\n }\n\n return mark;\n};\n\n/**\n *\n *\n * @param {*} axesCreators\n * @param {*} [fieldInfo=[]]\n * @return\n */\nexport const createRetinalAxis = (axesCreators, fieldProps = {}) => {\n const { axisType, fieldsConfig } = axesCreators;\n const field = fieldProps.field;\n const axis = [];\n const Cls = scaleMaps[axisType];\n\n fieldProps.type = fieldProps.type ? fieldProps.type : getAxisType(fieldsConfig, field || null);\n axis.push(new Cls(fieldProps));\n return axis;\n};\n\n/**\n *\n *\n * @param {*} arr\n * @param {*} val\n * @return\n */\nexport const getIndex = (arr, val) => {\n let i = 0;\n let arrIndex = -1;\n\n while (arrIndex === -1 && i < arr.length) {\n if (arr[i].toString() === val.toString()) {\n arrIndex = i;\n }\n i++;\n }\n return arrIndex;\n};\n\n/**\n *\n *\n * @param {*} colFields\n * @param {*} rowFields\n * @param {*} userLayerConfig\n * @return\n * @memberof CartesianEncoder\n */\nexport const getLayerConfFromFields = (colFields, rowFields, userLayerConfig) => userLayerConfig.filter((conf) => {\n const userConf = conf instanceof Array ? conf : [conf];\n const encodingArr = [].concat(...userConf.map(d => d.encoding).filter(d => d !== undefined));\n\n if (!encodingArr.length) {\n return true;\n }\n\n const xFields = [].concat(...encodingArr.map(d => [d.x && d.x.field, d.x0 && d.x0.field]))\n .filter(d => d !== undefined && d !== null);\n const yFields = [].concat(...encodingArr.map(d => [d.y && d.y.field, d.y0 && d.y0.field]))\n .filter(d => d !== undefined && d !== null);\n\n if (!xFields.length && !yFields.length) {\n return true;\n }\n\n const colFieldExist = xFields.length ? xFields.every(d => colFields.indexOf(d) !== -1) : false;\n const rowFieldExist = yFields.length ? yFields.every(d => rowFields.indexOf(d) !== -1) : false;\n if (xFields.length && yFields.length) {\n return colFieldExist && rowFieldExist;\n }\n return colFieldExist || rowFieldExist;\n});\n","import { layerFactory } from '@chartshq/visual-layer';\nimport { mergeRecursive } from 'muze-utils';\nimport { generateAxisFromMap, getDefaultMark, getIndex, getLayerConfFromFields } from './encoder-helper';\nimport { retriveDomainFromData } from '../group-helper';\n\nimport { ROW, COLUMN, COL, LEFT, TOP, CARTESIAN, MEASURE, BOTH, X, Y } from '../enums/constants';\nimport VisualEncoder from './visual-encoder';\n\n/**\n *\n *\n * @export\n * @class CartesianEncoder\n * @extends {VisualEncoder}\n */\nexport default class CartesianEncoder extends VisualEncoder {\n\n /**\n *\n *\n * @return\n * @memberof CartesianEncoder\n */\n static type () {\n return CARTESIAN;\n }\n\n /**\n *\n *\n * @param {*} axesCreators\n * @param {*} fieldInfo\n * @return\n * @memberof CartesianEncoder\n */\n createAxis (axesCreators, fieldInfo) {\n const geomCellAxes = {};\n const {\n axes\n } = axesCreators;\n const {\n projections,\n indices\n } = fieldInfo;\n const {\n rowFields,\n columnFields\n } = projections;\n const {\n rowIndex,\n columnIndex\n } = indices;\n const axisFields = [{\n fields: rowFields,\n index: rowIndex\n }, {\n fields: columnFields,\n index: columnIndex\n }];\n const xAxes = axes.x || [];\n const yAxes = axes.y || [];\n\n [rowFields, columnFields].forEach((fields, i) => {\n const type = i === 0 ? ROW : COLUMN;\n const axis = i === 0 ? Y : X;\n\n if (fields.length > 1) {\n axesCreators.position = BOTH;\n } else {\n axesCreators.position = this.axisFrom()[type];\n }\n geomCellAxes[axis] = generateAxisFromMap(axis, axisFields[i], axesCreators, axis === X ? xAxes : yAxes);\n });\n return geomCellAxes;\n }\n\n /**\n *\n *\n * @param {*} fields\n * @return\n * @memberof CartesianEncoder\n */\n getFacetsAndProjections (fields, type) {\n let facets = [];\n let projections = [];\n let counter = 0;\n const primaryFacets = [];\n const secondaryFacets = [];\n const primaryFields = fields[0];\n const secondaryFields = fields[1];\n const primaryLen = primaryFields.length;\n const secondaryLen = secondaryFields.length;\n const axisFrom = this.axisFrom();\n\n for (let i = 0; i < primaryLen; i++) {\n let projArr = [primaryFields[i]];\n const primaryField = primaryFields[i];\n\n if (primaryField.type() === MEASURE) {\n const secondaryField = secondaryFields[counter];\n if (secondaryField && secondaryField.type() === MEASURE) {\n counter++;\n projArr = [primaryField, secondaryField];\n }\n projections.push(projArr);\n } else {\n facets.push(primaryField);\n primaryFacets.push(primaryField);\n }\n }\n if (secondaryLen > counter) {\n for (let i = counter; i < secondaryLen; i++) {\n const secondaryField = secondaryFields[i];\n const projArr = [secondaryField];\n if (secondaryField.type() === MEASURE) {\n projections.push(projArr);\n } else {\n facets.push(secondaryField);\n secondaryFacets.push(secondaryField);\n }\n }\n }\n if ((primaryFacets.length || secondaryFacets.length) && !projections.length) {\n type = type === COL ? COLUMN : type;\n if ((axisFrom[type] === LEFT || axisFrom[type] === TOP) && primaryFacets.length) {\n const axisFromIndex = primaryFacets.length - 1;\n const facet = primaryFacets[axisFromIndex];\n projections = [[facet]];\n const existIndex = getIndex(secondaryFacets, facet);\n if (existIndex > -1) {\n projections = [[facet, facet]];\n secondaryFacets.splice(existIndex, 1);\n }\n primaryFacets.splice(axisFromIndex, 1);\n } else {\n const axisFromIndex = 0;\n const facet = secondaryFacets[axisFromIndex];\n projections = [[facet]];\n const existIndex = getIndex(primaryFacets, facet);\n if (existIndex > -1) {\n projections = [[facet, facet]];\n primaryFacets.splice(existIndex, 1);\n }\n secondaryFacets.splice(axisFromIndex, 1);\n }\n }\n\n facets = [...primaryFacets, ...secondaryFacets];\n facets = facets.filter((el, index, self) => index === self.findIndex(t => (t.toString() === el.toString())));\n return {\n facets,\n projections\n };\n }\n\n /**\n *\n *\n * @param {*} datamodel\n * @param {*} config\n * @return\n * @memberof CartesianEncoder\n */\n fieldSanitizer (datamodel, config) {\n return super.fieldSanitizer(datamodel, config);\n }\n\n /**\n *\n *\n * @param {*} datamodel\n * @return\n * @memberof CartesianEncoder\n */\n getRetinalFieldsDomain (dataModels, encoding) {\n const groupedModel = dataModels.groupedModel;\n const domains = {};\n for (const key in encoding) {\n if ({}.hasOwnProperty.call(encoding, key)) {\n const encodingObj = encoding[key];\n const field = encodingObj.field;\n if (!encodingObj.domain && field) {\n const domain = retriveDomainFromData(groupedModel, field);\n domains[field] = domain;\n }\n }\n }\n return domains;\n }\n\n /**\n *\n *\n * @param {*} layerArray\n * @memberof CartesianEncoder\n */\n serializeLayerConfig (layerArray) {\n const serializedLayers = [];\n // let currentLayerIndex = 0;\n layerArray.length && layerArray.forEach((layer, i) => {\n const def = layerFactory.sanitizeLayerConfig(layer);\n def.order = i;\n serializedLayers.push(def);\n });\n return serializedLayers;\n }\n\n /**\n *\n *\n * @param {*} fields\n * @param {*} userLayerConfig\n * @return\n * @memberof CartesianEncoder\n */\n getLayerConfig (fields, userLayerConfig) {\n const layerConfig = [];\n const {\n columnFields,\n rowFields\n } = fields;\n\n // let currentLayerIndex = 0;\n columnFields.forEach((colField) => {\n const colFieldName = colField.toString();\n rowFields.forEach((rowField) => {\n let configs = [];\n const rowFieldName = rowField.toString();\n const encoding = {\n x: {\n field: colFieldName\n },\n y: {\n field: rowFieldName\n }\n };\n const rowFieldType = rowField.subtype();\n const colFieldType = colField.subtype();\n const mark = getDefaultMark(colFieldType, rowFieldType);\n\n const defConfigs = [{\n mark,\n def: {\n mark,\n encoding\n }\n }];\n\n const layerConfigs = getLayerConfFromFields(colField.getMembers(),\n rowField.getMembers(), userLayerConfig || []);\n if (layerConfigs.length) {\n configs = layerConfigs.map((layerConf) => {\n const mergedLayerConf = mergeRecursive(mergeRecursive({}, defConfigs[0].def), layerConf);\n const serializedLayerConfig = layerFactory.getSerializedConf(mergedLayerConf.mark,\n mergedLayerConf);\n return {\n mark: mergedLayerConf.mark,\n order: mergedLayerConf.order,\n def: serializedLayerConfig\n };\n });\n } else {\n configs = defConfigs;\n }\n\n layerConfig.push(...configs);\n });\n });\n return layerConfig;\n }\n}\n\n","import { layerFactory } from '@chartshq/visual-layer';\nimport { mergeRecursive } from 'muze-utils';\nimport VisualEncoder from './visual-encoder';\nimport { RADIUS, ANGLE, SIZE, MEASURE, ARC, POLAR, COLOR } from '../enums/constants';\n/**\n *\n *\n * @export\n * @class PolarEncoder\n * @extends {VisualEncoder}\n */\nexport default class PolarEncoder extends VisualEncoder {\n\n /**\n *\n *\n * @param {*} axesCreators\n * @param {*} fieldInfo\n * @return\n * @memberof PolarEncoder\n */\n createAxis (axesCreators, fieldInfo) {\n const {\n axes\n } = axesCreators;\n const geomCellAxes = axes;\n const {\n indices\n } = fieldInfo;\n const {\n rowIndex,\n columnIndex\n } = indices;\n // Dummy axes for polar, to create blank cells\n const pieAxes = geomCellAxes.pie || [];\n\n pieAxes[rowIndex] = pieAxes[rowIndex] || [];\n pieAxes[rowIndex][columnIndex] = [];\n\n geomCellAxes.pie = pieAxes;\n geomCellAxes.x = null;\n geomCellAxes.y = null;\n\n return geomCellAxes;\n }\n\n /**\n *\n *\n * @param {*} fields\n * @return\n * @memberof CartesianEncoder\n */\n getFacetsAndProjections (fields) {\n let counter = 0;\n const facets = [];\n const projections = [];\n const primaryFields = fields[0];\n const secondaryFields = fields[1];\n const primaryLen = primaryFields.length;\n const secondaryLen = secondaryFields.length;\n\n for (let i = 0; i < primaryLen; i++) {\n const primaryField = primaryFields[i];\n if (primaryField.type() === MEASURE) {\n const secondaryField = secondaryFields[counter++];\n const projArr = secondaryField ? [primaryField, secondaryField] : [primaryField];\n projections.push(projArr);\n } else {\n facets.push(primaryField);\n }\n }\n if (secondaryLen > counter) {\n for (let i = counter; i < secondaryLen; i++) {\n const secondaryField = secondaryFields[i];\n const projArr = [secondaryField];\n if (secondaryField.type() === MEASURE) {\n projections.push(projArr);\n } else {\n facets.push(secondaryField);\n }\n }\n }\n return {\n facets,\n projections\n };\n }\n\n /**\n *\n *\n * @return\n * @memberof PolarEncoder\n */\n setCommonDomain () {\n // No domain to be set\n return this;\n }\n\n /**\n *\n *\n * @return\n * @memberof PolarEncoder\n */\n static type () {\n return POLAR;\n }\n\n layers (...layers) {\n if (layers.length) {\n this._layers = layers[0];\n return this;\n }\n return this._layers;\n }\n\n /**\n *\n *\n * @param {*} datamodel\n * @param {*} config\n * @memberof PolarEncoder\n */\n fieldSanitizer (datamodel, config) {\n let sanitizedRows = [[], []];\n let sanitizedColumns = [[], []];\n const fields = super.fieldSanitizer(datamodel, config);\n const {\n layers\n } = config;\n const {\n rows,\n columns\n } = fields;\n const layer = layers[0];\n const encoding = layer.encoding;\n const radius = encoding && encoding.radius ? encoding.radius.field : null;\n const angle = encoding && encoding.angle ? encoding.angle.field : null;\n const sanitizedFields = [sanitizedRows, sanitizedColumns];\n\n [rows, columns].forEach((fieldType, typeIndex) => {\n fieldType.forEach((fieldSet, i) => fieldSet.forEach((field) => {\n if (field.toString() !== radius && field.toString() !== angle && field.type() !== MEASURE) {\n sanitizedFields[typeIndex][i].push(field);\n }\n }));\n });\n sanitizedColumns = [...new Set(sanitizedColumns)];\n sanitizedRows = [...new Set(sanitizedRows)];\n this.fieldInfo({ rows: sanitizedRows, columns: sanitizedColumns });\n return this.fieldInfo();\n }\n\n getRetinalFieldsDomain (dataModels, encoding, facetFields, groupBy) {\n let sizeField;\n let colorField;\n const fields = [];\n const layers = this.layers();\n const dataModel = dataModels.parentModel;\n const fieldsConfig = dataModel.getFieldsConfig();\n const domains = {};\n if (layers && layers[0]) {\n const layer = layers[0];\n const layerEncoding = layer.def.encoding || {};\n\n [RADIUS, ANGLE, SIZE, COLOR].forEach((encType) => {\n const field = layerEncoding[encType] ? layerEncoding[encType].field : '';\n const measureField = fieldsConfig[field] && fieldsConfig[field].def.type === MEASURE;\n if (encType === SIZE && measureField) {\n sizeField = field;\n }\n if (encType === COLOR) {\n colorField = field;\n }\n fieldsConfig[field] && !measureField && fields.push(field);\n });\n }\n\n if (sizeField) {\n domains[sizeField] = dataModel.groupBy(facetFields, {\n [sizeField]: 'sum'\n }).getFieldspace().fieldsObj()[sizeField].domain();\n }\n\n if (colorField) {\n const dm = dataModel.groupBy([...facetFields, ...fields], groupBy.measures);\n domains[colorField] = dm.getFieldspace().fieldsObj()[colorField].domain();\n }\n return domains;\n }\n /**\n *\n *\n * @param {*} fields\n * @param {*} userLayerConfig\n * @return\n * @memberof PolarEncoder\n */\n getLayerConfig (fields, userLayerConfig) {\n let layerConfig = [];\n const {\n columnFields,\n rowFields\n } = fields;\n const allFields = [...columnFields, ...rowFields];\n\n allFields.forEach(() => {\n const encoding = {};\n let config = {\n mark: ARC,\n def: {\n encoding\n }\n };\n if (userLayerConfig && userLayerConfig.length > 0) {\n config = mergeRecursive(config, userLayerConfig[0]);\n }\n layerConfig.push(config);\n });\n if (layerConfig.length === 0) {\n layerConfig = userLayerConfig;\n }\n\n this.layers(layerConfig);\n return layerConfig;\n }\n\n /**\n *\n *\n * @param {*} layerArray\n * @returns\n * @memberof PolarEncoder\n */\n serializeLayerConfig (layerArray) {\n const serializedLayers = [];\n\n layerArray.length && layerArray.forEach((layer) => {\n const def = layerFactory.getSerializedConf(layer.mark, layer);\n serializedLayers.push({\n mark: layer.mark,\n def\n });\n });\n return serializedLayers;\n }\n}\n","import { createRetinalAxis } from './encoder-helper';\nimport { COLOR, SHAPE, SIZE } from '../enums/constants';\nimport VisualEncoder from './visual-encoder';\n\n/**\n *\n *\n * @export\n * @class RetinalEncoder\n * @extends {VisualEncoder}\n */\nexport default class RetinalEncoder extends VisualEncoder {\n\n /**\n *\n *\n * @param {*} axesCreators\n * @return\n * @memberof RetinalEncoder\n */\n createAxis (axesCreators) {\n const { fieldsConfig, config } = axesCreators;\n const newAxes = {};\n\n [COLOR, SHAPE, SIZE].forEach((axisType) => {\n newAxes[`${axisType}`] = createRetinalAxis({ axisType, fieldsConfig }, config[axisType]);\n });\n return newAxes;\n }\n\n /**\n *\n *\n * @static\n * @return\n * @memberof RetinalEncoder\n */\n static type () {\n return 'retinal';\n }\n\n /**\n *\n *\n * @param {*} fields\n * @param {*} userLayerConfig\n * @return\n * @memberof RetinalEncoder\n */\n getLayerConfig (encodingConfigs, userLayerConfig) {\n const layerConfig = [];\n userLayerConfig.forEach((e) => {\n const config = e;\n [COLOR, SHAPE, SIZE].forEach((axis) => {\n if (encodingConfigs[axis] && encodingConfigs[axis].field) {\n const def = config.def;\n if (config.def instanceof Array) {\n def.forEach((conf) => {\n conf.encoding = conf.encoding || {};\n !conf.encoding[axis] && (conf.encoding[axis] = {});\n conf.encoding[axis].field = encodingConfigs[axis].field;\n });\n } else {\n def.encoding = def.encoding || {};\n !def.encoding[axis] && (def.encoding[axis] = {});\n def.encoding[axis].field = encodingConfigs[axis].field;\n }\n }\n });\n layerConfig.push(config);\n });\n return layerConfig;\n }\n\n /**\n *\n *\n * @param {*} context\n * @return\n * @memberof RetinalEncoder\n */\n setCommonDomain (context) {\n const { domains, axes, encoding } = context;\n\n Object.entries(encoding).forEach((enc) => {\n if (enc[1] && enc[1].field) {\n const encType = enc[0];\n const field = enc[1].field;\n\n if (field) {\n axes[encType].forEach((axis) => {\n const domain = domains[field];\n !enc[1].domain && axis.updateDomain(domain);\n });\n }\n }\n });\n return axes;\n }\n}\n","import { Store, dataSelect, FieldType } from 'muze-utils';\nimport { DATA_UPDATE_COUNTER } from '../enums/defaults';\nimport { Variable } from '../variable';\nimport { PolarEncoder, CartesianEncoder } from '../encoder';\nimport {\n DIMENSION,\n MEASURE,\n ORDINAL,\n LINEAR,\n ROW,\n COLUMN,\n COL,\n LEFT,\n RIGHT,\n TOP,\n BOTTOM,\n COLOR,\n SIZE,\n TEMPORAL,\n SHAPE,\n INTERACTION,\n GRID_LINES,\n GRID_BANDS,\n HEADER,\n FACET,\n X,\n Y,\n POLAR\n} from '../enums/constants';\n\n/**\n * Creates an instance of a store which contains the arguments to make the class reactive\n *\n * @return {Object} instance of store\n * @memberof VisualGroup\n */\nexport const initStore = () => new Store({\n [DATA_UPDATE_COUNTER]: DATA_UPDATE_COUNTER\n});\n\n/**\n *\n *\n * @param {*} arr\n */\nexport const isDistributionEqual = arr => [...arr[0], ...arr[1]].reduce((isEqual, row) => {\n const rowType = row.type();\n\n if (rowType === MEASURE || rowType === TEMPORAL) {\n isEqual = true;\n }\n return isEqual;\n}, false);\n\n/**\n *\n *\n */\nexport const initializeCacheMaps = () => ({\n cellMap: new Map(),\n xAxesMap: new Map(),\n yAxesMap: new Map(),\n entryCellMap: new Map(),\n exitCellMap: new Map()\n});\n\n/**\n *\n *\n * @param {*} axisName\n * @param {*} id\n */\nexport const getAxisKey = (axisName, id, scaleType) => `${axisName}-axis-${id}-${scaleType}`;\n\n/**\n *\n *\n * @param {*} rowId\n * @param {*} columnId\n */\nexport const getCellKey = (rowId, columnId) => `cell-${rowId}-${columnId}`;\n\n/**\n *\n *\n * @param {*} config\n * @return\n */\nexport const extractUnitConfig = (config) => {\n const unitConfig = {};\n const attrNames = [INTERACTION, GRID_LINES, GRID_BANDS];\n\n attrNames.forEach((attr) => {\n if (config[attr] !== undefined) {\n unitConfig[attr] = config[attr];\n }\n });\n return unitConfig;\n};\n\n/**\n *\n *\n * @param {*} headers\n * @param {*} index\n * @param {*} rowLength\n * @return\n * @memberof MatrixResolver\n */\nexport const getHeaderText = (headers, index, rowLength) => {\n let header = '';\n\n if (index === rowLength - 1 && headers.length > rowLength) {\n for (let i = index; i < headers.length - 1; i++) {\n header += `${headers[i].toString()} / `;\n }\n header += headers[headers.length - 1].toString();\n return header;\n } else if (headers[index]) {\n return headers[index].toString();\n }\n return '';\n};\n\n/**\n *\n *\n * @param {*} fields\n * @param {*} fieldHeaders\n * @param {*} TextCell\n * @param {*} labelManager\n * @return\n */\nexport const headerCreator = (fields, fieldHeaders, TextCell, labelManager) => {\n const headers = fields.length > 0 ? fields[0].map((cell, i) => new TextCell({ type: HEADER }, { labelManager })\n .source(getHeaderText(fieldHeaders, i, fields[0].length))\n .config({ show: cell.config().show })) : [];\n return headers;\n};\n\n/**\n *\n *\n * @param {*} variable\n * @param {*} allFields\n * @return\n */\nexport const findInGroup = (variable, allFields) => {\n let channel = null;\n\n [COLOR, SIZE, SHAPE].forEach((e) => {\n if (this.store.get(e) && variable === this.store.get(e)[0]) {\n channel = e;\n }\n });\n\n if (channel) {\n return { channel };\n }\n [ROW, COL].forEach((facetType) => {\n allFields[`${facetType}Facets`].forEach((e) => {\n if (e.toString() === variable) {\n channel = { channel: FACET, type: facetType === COL ? COLUMN : ROW };\n }\n });\n });\n\n if (channel) {\n return channel;\n }\n\n [ROW, COL].forEach((projType) => {\n allFields[`${projType}Projections`].forEach((e) => {\n e.forEach((m) => {\n if (m.toString() === variable) {\n channel = projType === COL ? X : Y;\n }\n });\n });\n });\n\n if (channel) {\n return { channel };\n }\n return null;\n};\n\n/**\n *\n *\n * @param {*} datamodel\n * @param {*} field\n */\nexport const getAxisType = (fieldsConfig, field) => {\n let fieldType = ORDINAL;\n\n if (field && fieldsConfig[field].def.type !== DIMENSION) {\n fieldType = LINEAR;\n }\n return fieldType;\n};\n\n/**\n *\n *\n * @param {*} datamodel\n * @param {*} fieldName\n * @return\n */\nexport const retriveDomainFromData = (datamodel, fieldName) => {\n const field = datamodel.getFieldspace().fields.find(d => d._ref.name === fieldName.toString());\n return field.domain();\n};\n\n/**\n *\n *\n * @memberof MatrixResolver\n */\nexport const mutateAxesFromMap = (cacheMaps, axes) => {\n let xAxes = null;\n let yAxes = null;\n const {\n xAxesMap,\n yAxesMap\n } = cacheMaps;\n const {\n x: xAxisSet,\n y: yAxisSet\n } = axes;\n\n xAxisSet && xAxisSet.forEach((axisId) => {\n const xAxis = xAxesMap.get(axisId);\n xAxes = xAxes || [];\n xAxes.push(xAxis);\n });\n\n yAxisSet && yAxisSet.forEach((axisId) => {\n const yAxis = yAxesMap.get(axisId);\n yAxes = yAxes || [];\n yAxes.push(yAxis);\n });\n\n return {\n xAxes, yAxes\n };\n};\n\n/**\n *\n *\n * @param {*} layers\n * @return\n */\nexport const getEncoder = (layers) => {\n let encoder = new CartesianEncoder();\n\n if (layers) {\n // Figuring out the kind of layers the group will have\n encoder = layers.every(e => e.mark === 'arc') ? new PolarEncoder() : encoder;\n }\n return encoder;\n};\n\n/**\n *\n *\n * @param {*} type\n * @param {*} fields\n * @param {*} userAxisFromConfig\n * @return\n */\nexport const getHeaderAxisFrom = (type, fields, userAxisFromConfig) => {\n let axisFrom = userAxisFromConfig[type];\n let headerFrom = '';\n const options = type === ROW ? [LEFT, RIGHT] : [BOTTOM, TOP];\n const [firstField, secondField] = fields;\n const firstFieldType = i => (firstField.length ? firstField[i].type() : null);\n const secondFieldType = i => (secondField.length ? secondField[i].type() : null);\n\n if (firstFieldType(firstField.length - 1) === DIMENSION && secondFieldType(0) === DIMENSION) {\n headerFrom = axisFrom ? options[1 - options.indexOf(axisFrom)] : options[1];\n\n if (type === COLUMN && (firstField[firstField.length - 1].toString() === secondField[0].toString())) {\n axisFrom = TOP;\n } else {\n axisFrom = axisFrom || options[0];\n }\n } else if (secondFieldType(secondField.length - 1) === DIMENSION) {\n headerFrom = type === ROW ? RIGHT : BOTTOM;\n axisFrom = type === ROW ? RIGHT : BOTTOM;\n } else {\n headerFrom = type === ROW ? LEFT : TOP;\n axisFrom = type === ROW ? LEFT : TOP;\n }\n if (firstFieldType(firstField.length - 1) === MEASURE && secondFieldType(0) === MEASURE) {\n axisFrom = type === ROW ? LEFT : TOP;\n } else if (secondFieldType(0) === MEASURE) {\n axisFrom = type === ROW ? RIGHT : BOTTOM;\n } else if (firstFieldType(firstField.length - 1) === MEASURE) {\n axisFrom = type === ROW ? LEFT : TOP;\n }\n return [headerFrom, axisFrom];\n};\n\n/**\n *\n *\n * @param {*} type\n * @param {*} fields\n * @param {*} layers\n * @return\n * @memberof MatrixResolver\n */\nexport const setFacetsAndProjections = (context, fieldInfo, encoder) => {\n const {\n fields,\n type\n } = fieldInfo;\n const { facets, projections } = encoder.simpleEncoder.getFacetsAndProjections(fields, type);\n\n context.facets({ [`${type}Facets`]: facets });\n context.projections({ [`${type}Projections`]: projections });\n\n return { facets, projections, fields };\n};\n\n/**\n * Creates a selection set from a data set with corresponding attributes\n *\n * @export\n * @param {Selection} sel contains previous selection\n * @param {Object} appendObj Object to be appended\n * @param {Array} data Data based on which the selection is entered/updated/removed\n * @param {Object} [attrs={}] Attributes to be set on the data\n * @return {Selection} Merged selection\n */\nexport const createSelection = (sel, appendObj, data, idFn) => {\n let selection = sel || dataSelect([]);\n\n selection = selection.data(data, idFn);\n\n const enter = selection.enter().append(appendObj);\n const mergedSelection = enter.merge(selection);\n\n selection.exit() && selection.exit().remove();\n return mergedSelection;\n};\n\nconst getRowBorders = (left, right) => {\n const borders = {};\n borders.top = false;\n borders.bottom = false;\n if (left.length > 1 || right.length > 1) {\n borders.top = true;\n borders.bottom = true;\n }\n return borders;\n};\n\nconst getColumnsBorders = (top, bottom) => {\n const borders = {};\n borders.left = false;\n borders.right = false;\n if (top.length || bottom.length) {\n if ((top[0] && top[0].length > 1) || (bottom[0] && bottom[0].length > 1)) {\n borders.left = true;\n borders.right = true;\n }\n }\n return borders;\n};\n\nconst getValueBorders = (rows, columns) => {\n const borders = { top: true, left: true, bottom: true, right: true };\n const borderTypeRow = [LEFT, RIGHT];\n const borderTypeCol = [TOP, BOTTOM];\n rows.forEach((e, i) => {\n if (e[0] && e[0].length) {\n borders[borderTypeRow[i]] = true;\n } else {\n borders[borderTypeRow[i]] = false;\n }\n });\n columns.forEach((e, i) => {\n if (e.length) {\n borders[borderTypeCol[i]] = true;\n } else {\n borders[borderTypeCol[i]] = false;\n }\n });\n\n return borders;\n};\n\nexport const getBorders = (matrices, encoder) => {\n let showRowBorders = { top: false, bottom: false };\n let showColBorders = { left: false, right: false };\n let showValueBorders = { top: false, bottom: false, left: false, right: false };\n const {\n rows,\n columns,\n values: valueMatrix\n } = matrices;\n const [leftRows, rightRows] = rows;\n const [topColumns, bottomColumns] = columns;\n const {\n rowDimensions,\n columnDimensions,\n rowTemporalFields,\n columnTemporalFields,\n columnMeasures,\n rowMeasures\n } = encoder.fieldInfo();\n const allDimensionLength = rowDimensions.length + columnDimensions.length;\n const allMeasuresLength = rowMeasures.length + columnMeasures.length;\n const allTemporalFieldsLength = rowTemporalFields.length + columnTemporalFields.length;\n\n if (encoder.constructor.type() === POLAR) {\n if (!allDimensionLength) {\n return { showRowBorders, showColBorders, showValueBorders };\n }\n } else if (!allMeasuresLength && !allTemporalFieldsLength && allDimensionLength <= 2) {\n return { showRowBorders, showColBorders, showValueBorders };\n }\n\n showRowBorders = getRowBorders(leftRows, rightRows);\n showColBorders = getColumnsBorders(topColumns, bottomColumns);\n showValueBorders = getValueBorders([leftRows, rightRows], [topColumns, bottomColumns]);\n\n if (valueMatrix.length > 1) {\n showValueBorders.top = true;\n showValueBorders.bottom = true;\n }\n if (valueMatrix.length && valueMatrix[0].length > 1) {\n showValueBorders.left = true;\n showValueBorders.right = true;\n }\n return { showRowBorders, showColBorders, showValueBorders };\n};\n\nexport const getFieldsFromSuppliedLayers = (suppliedLayerConfig, fieldsConfig) => {\n let fields = [];\n const encodingArr = suppliedLayerConfig.map(conf => (conf.encoding || {}));\n fields = [...fields, [].concat(...encodingArr.map(enc => Object.values(enc).map(d => d.field)))];\n fields = fields.filter(field => fieldsConfig[field] && fieldsConfig[field].def.type === FieldType.DIMENSION);\n return fields;\n};\n\nexport const extractFields = (facetsAndProjections, layerFields) => {\n const fields = Object.values(facetsAndProjections).map((arr) => {\n const flattenArray = [].concat(...arr);\n return [].concat(...flattenArray.map((field) => {\n if (field instanceof Variable) {\n return field.getMembers();\n }\n return field;\n }));\n });\n return [].concat(...fields, ...layerFields);\n};\n","/**\n * This file exports variables that are used as defaults for the crosstab group.\n */\nexport const DATA_UPDATE_COUNTER = 0;\n\nexport const DEFAULT_LAYER_TYPE = 'cartesian';\n\n","import Selection from './selection';\n/**\n * This function applies a selection operation on a data array.\n *\n * @export\n * @param {Array} [data=[]] The data array to be observed.\n * @return {Selection} Instance of a selection.\n */\nexport default function dataSelect (data = []) {\n return new Selection(data);\n}\n\n","import { BEHAVIOURS, ACTIONS } from '@chartshq/muze-firebolt';\n\nexport const actionBehaviourMap = {\n [ACTIONS.DRAG]: {\n behaviours: [BEHAVIOURS.BRUSH],\n touch: false\n },\n [ACTIONS.HOVER]: {\n behaviours: [BEHAVIOURS.HIGHLIGHT]\n },\n [ACTIONS.LONGTOUCH]: {\n behaviours: [BEHAVIOURS.SELECT],\n touch: true\n },\n [ACTIONS.TOUCHDRAG]: {\n behaviours: [BEHAVIOURS.BRUSH],\n touch: true\n },\n [ACTIONS.CLICK]: {\n behaviours: [BEHAVIOURS.SELECT],\n touch: false\n }\n};\n\n","export const CONFIG = 'config';\nexport const DATA = 'data';\nexport const AXES = 'axes';\nexport const LAYERDEFS = 'layerDef';\nexport const WIDTH = 'width';\nexport const HEIGHT = 'height';\nexport const MOUNT = 'mount';\nexport const primaryXAxisUpdated = 'primaryXAxisUpdated';\nexport const primaryYAxisUpdated = 'primaryYAxisUpdated';\nexport const secondaryXAxisUpdated = 'secondaryXAxisUpdated';\nexport const secondaryYAxisUpdated = 'secondaryYAxisUpdated';\nexport const TRANSFORM = 'transform';\nexport const DATADOMAIN = 'dataDomain';\nexport const LAYERSCREATED = 'layersCreated';\nexport const FIELDS = 'fields';\nexport const TIMEDIFFS = 'timeDiffs';\nexport const LAYERAXISINDEX = 'layerAxisIndex';\n\n","import { FieldType, getDependencyOrder, getObjProp,\n defaultValue, objectIterator, unionDomain, makeElement,\n DimensionSubtype, getClosestIndexOf, toArray } from 'muze-utils';\nimport { layerFactory } from '@chartshq/visual-layer';\nimport { TIMEDIFFS } from '../enums/reactive-props';\n\nexport const getDimensionMeasureMap = (layers, fieldsConfig) => {\n const retinalEncodingsAndMeasures = {};\n\n layers.forEach((layer) => {\n const {\n colorField,\n sizeField,\n shapeField,\n xField,\n yField\n } = layer.encodingFieldsInf();\n const measures = [xField, yField].filter(field => fieldsConfig[field] && fieldsConfig[field].def.type ===\n FieldType.MEASURE);\n [colorField, sizeField, shapeField].forEach((field) => {\n if (fieldsConfig[field] && fieldsConfig[field].def.type === FieldType.DIMENSION) {\n !retinalEncodingsAndMeasures[field] && (retinalEncodingsAndMeasures[field] = []);\n retinalEncodingsAndMeasures[field].push(...measures);\n }\n });\n });\n\n for (const key in retinalEncodingsAndMeasures) {\n if ({}.hasOwnProperty.call(retinalEncodingsAndMeasures, key)) {\n retinalEncodingsAndMeasures[key] = [...new Set(retinalEncodingsAndMeasures[key])];\n }\n }\n return retinalEncodingsAndMeasures;\n};\n\nexport const transformDataModels = (transform, dataModel) => {\n const dataModels = {};\n for (const key in transform) {\n if ({}.hasOwnProperty.call(transform, key)) {\n const transformVal = transform[key];\n dataModels[key] = transformVal(dataModel);\n }\n }\n\n return dataModels;\n};\n\nexport const getLayerFromDef = (context, definition, existingLayer) => {\n let instances = existingLayer;\n const dependencies = context._layerDeps;\n if (!existingLayer) {\n instances = layerFactory.getLayerInstance(definition);\n }\n const layers = {};\n const instanceArr = toArray(instances);\n definition = toArray(definition);\n definition.reduce((acc, def, idx) => {\n const instance = instanceArr[idx];\n instance.config(def);\n instance.dependencies(dependencies);\n if (def.name) {\n instance.alias(def.name);\n }\n layers[instance.alias()] = instance;\n return acc;\n }, {});\n return layers;\n};\n\nexport const resolveEncodingTransform = (layerInst, store) => {\n const encodingTransform = layerInst.config().encodingTransform || {};\n const resolvable = encodingTransform.resolvable;\n let depArr = [];\n if (resolvable) {\n const resolved = resolvable(store);\n depArr = resolved.depArr;\n layerInst.encodingTransform(resolved.fn);\n } else if (encodingTransform instanceof Function) {\n layerInst.encodingTransform(encodingTransform);\n }\n return depArr;\n};\n\nexport const createLayers = (context, layerDefinitions) => {\n const layersMap = context._layersMap;\n const markSet = {};\n const store = {\n layers: {},\n components: {\n unit: context\n }\n };\n let layerIndex = 0;\n let layers = layerDefinitions.sort((a, b) => a.order - b.order).reduce((layersArr, layerDef, i) => {\n const mark = layerDef.mark;\n const definition = layerDef.def;\n const markId = `${mark}-${i}`;\n const defArr = toArray(definition);\n defArr.forEach((def) => {\n def.order = layerDef.order + layerIndex;\n });\n layerIndex += defArr.length;\n const instances = getLayerFromDef(context, definition, layersMap[markId]);\n store.layers = Object.assign(store.layers, instances);\n const instanceValues = Object.values(instances);\n layersArr = layersArr.concat(...instanceValues);\n layersMap[markId] = instanceValues;\n markSet[markId] = markId;\n return layersArr;\n }, []);\n store.unit = context;\n const layerdeps = {};\n layers.forEach((layer) => {\n const depArr = resolveEncodingTransform(layer, store);\n layerdeps[layer.alias()] = depArr;\n });\n\n const order = getDependencyOrder(layerdeps);\n layers = order.map(name => store.layers[name]);\n for (const key in layersMap) {\n if (!(key in markSet)) {\n layersMap[key].forEach(layer => layer.remove());\n delete layersMap[key];\n }\n }\n return layers;\n};\n\nexport const attachDataToLayers = (layers, dm, transformedDataModels) => {\n layers.forEach((layer) => {\n const dataSource = layer.config().source;\n const dataModel = dataSource instanceof Function ? dataSource(dm) : (transformedDataModels[dataSource] || dm);\n layer.data(dataModel);\n });\n};\n\nexport const attachAxisToLayers = (axes, layers, layerAxisIndex) => {\n layers.forEach((layer) => {\n const layerId = layer.id();\n const axesObj = {};\n\n objectIterator(axes, (key) => {\n const axisInf = layerAxisIndex[layerId];\n if (axisInf) {\n axes[key] && (axesObj[key] = axes[key][axisInf[key] || 0]);\n }\n });\n Object.keys(axesObj).length && layer.axes(axesObj);\n });\n};\n\nexport const getLayerAxisIndex = (layers, fields) => {\n const layerAxisIndex = {};\n layers.forEach((layer) => {\n const { axis, encoding } = layer.config();\n const id = layer.id();\n ['x', 'y'].forEach((type) => {\n let index;\n const field = defaultValue(getObjProp(axis, type), encoding[type] && encoding[type].field);\n if (fields[type]) {\n index = fields[type].findIndex(fieldInst => fieldInst.getMembers().indexOf(field) !== -1);\n } else {\n index = 0;\n }\n !layerAxisIndex[id] && (layerAxisIndex[id] = {});\n layerAxisIndex[id][type] = index;\n });\n });\n return layerAxisIndex;\n};\n\nexport const unionDomainFromLayers = (layers, axisFields, layerAxisIndex, fieldsConfig) => {\n let domains = {};\n layers = layers.filter(layer => layer.getDataDomain() !== null);\n layers.forEach((layer) => {\n let domainValues = {};\n const config = layer.config();\n const encoding = config.encoding;\n const layerDomain = layer.getDataDomain();\n const layerId = layer.id();\n\n if (layerDomain !== null && config.calculateDomain !== false) {\n domainValues = Object.entries(layerDomain);\n if (layerDomain.x || layerDomain.y) {\n domains = domainValues.reduce((fieldDomain, domain) => {\n const encodingType = domain[0];\n const field = encoding[encodingType].field;\n const axisIndex = layerAxisIndex[layerId][encodingType];\n const fieldStr = `${axisFields[encodingType][axisIndex]}`;\n fieldDomain[fieldStr] = fieldDomain[fieldStr] || [];\n fieldDomain[fieldStr] = unionDomain(([fieldDomain[fieldStr], domain[1]]),\n fieldsConfig[field].def.subtype ? fieldsConfig[field].def.subtype :\n fieldsConfig[field].def.type);\n\n return fieldDomain;\n }, domains);\n } else { domains = domainValues; }\n }\n });\n return domains;\n};\n\nexport const renderLayers = (context, container, layers, measurement) => {\n context._lifeCycleManager.notify({ client: layers, action: 'beforedraw', formalName: 'layer' });\n const config = context.config();\n const classPrefix = config.classPrefix;\n const orderedLayers = context.layers().sort((a, b) => a.config().order - b.config().order);\n const layerParentGroup = makeElement(container, 'g', [1], `${classPrefix}-layer-group`);\n makeElement(layerParentGroup, 'g', orderedLayers, null, {\n update: (group, layer) => {\n layer.measurement(measurement);\n layer.dataProps({\n timeDiffs: context.store().get(TIMEDIFFS)\n });\n layer.config().render !== false && layer.mount(group.node());\n }\n });\n return this;\n};\n\nexport const getNearestDimensionalValue = (context, position) => {\n const fields = context.fields();\n if (!fields.x.length || !fields.y.length) {\n return null;\n }\n const data = context.data();\n const axes = context.axes();\n const fieldsConfig = data.getFieldsConfig();\n const xField = getObjProp(fields, 'x', 0).getMembers()[0];\n const yField = getObjProp(fields, 'y', 0).getMembers()[0];\n const xFieldType = fieldsConfig[xField] && (fieldsConfig[xField].def.subtype ? fieldsConfig[xField].def.subtype :\n fieldsConfig[xField].def.type);\n const yFieldType = fieldsConfig[yField] && (fieldsConfig[yField].def.subtype ? fieldsConfig[yField].def.subtype :\n fieldsConfig[yField].def.type);\n\n const entryVal = [['x', xFieldType, xField], ['y', yFieldType, yField]].find(entry =>\n entry[1] === DimensionSubtype.CATEGORICAL || entry[1] === DimensionSubtype.TEMPORAL);\n\n if (!entryVal || (xFieldType !== FieldType.MEASURE && yFieldType !== FieldType.MEASURE)) {\n return null;\n }\n const field = entryVal[2];\n const index = fieldsConfig[field].index;\n let key = axes[entryVal[0]][0].invert(position[entryVal[0]]);\n if (entryVal[1] === DimensionSubtype.TEMPORAL) {\n const filterData = [...new Set(data.getData().data.map(d => d[index]))];\n key = filterData[getClosestIndexOf(filterData, key)];\n }\n\n return key !== undefined ? [[field], [key]] : null;\n};\n\nexport const getLayersBy = (layers, searchBy, value) => layers.filter((layer) => {\n const name = searchBy === 'type' ? layer.constructor.formalName() : layer.alias();\n return name === value;\n});\n\nexport const removeLayersBy = (layers, searchBy, value) => {\n layers.filter((inst) => {\n const name = searchBy === 'type' ? inst.config().mark : inst.alias();\n if (name === value) {\n inst.remove();\n return false;\n }\n return true;\n });\n};\n\nexport const createSideEffectGroup = (container, className) => makeElement(container, 'g', [1], className).node();\n\nexport const getAdjustedDomain = (max, min) => {\n const y1ratio = max[0] / (max[0] - min[0]);\n const y2ratio = max[1] / (max[1] - min[1]);\n\n // adjust min/max values for positive negative values zero line etc\n let allSameSign = false;\n\n // if all numbers are positive set floor to zero\n if (min[0] > 0 && min[1] > 0 && min[1] > 0 && max[1] > 0) {\n allSameSign = true;\n min[0] = 0;\n min[1] = 0;\n }\n\n // if all numbers are negative set ceiling to zero\n if (min[0] < 0 && min[1] < 0 && min[1] < 0 && max[1] < 0) {\n allSameSign = true;\n max[0] = 0;\n max[1] = 0;\n }\n\n // align zero line if necessary\n if (!allSameSign && y1ratio !== y2ratio) {\n if (y1ratio < y2ratio) {\n // adjust min[1]\n min[1] = min[0] / max[0] * max[1];\n } else {\n // adjust min[0]\n min[0] = min[1] / max[1] * max[0];\n }\n }\n return {\n max,\n min\n };\n};\n","import { getObjProp, defaultValue, makeElement, DimensionSubtype, DataModel } from 'muze-utils';\nimport { ScaleType } from '@chartshq/muze-axis';\nimport { layerFactory } from '@chartshq/visual-layer';\nimport { GRIDLINEPARENTGROUPCLASS, GRIDBANDPARENTGROUPCLASS } from '../enums/constants';\nimport { TIMEDIFFS } from '../enums/reactive-props';\n\nconst LINEAR = ScaleType.LINEAR;\n\nconst getLayerDefinition = (context, axes, type, orientation) => {\n let encoding;\n const config = context.config();\n const { classPrefix, gridLines, gridBands } = config;\n const gridLineColor = gridLines.color;\n const zeroLineColor = gridLines.zeroLineColor;\n const defClassName = type === 'band' ? gridBands.defClassName : gridLines.defClassName;\n const gridBandColor = gridBands[orientation].color;\n const axis = axes[orientation][0];\n const isLinearScale = axis.constructor.type() === LINEAR;\n\n if (type === 'band' && isLinearScale) {\n encoding = {\n [orientation]: `${orientation}value`,\n [`${orientation}0`]: `${orientation}value0`\n };\n } else {\n encoding = {\n [orientation]: isLinearScale ? `${orientation}value` : `${orientation}dim`\n };\n }\n encoding.color = {\n value: (data, i) => {\n const isNegativeDomain = isLinearScale && axis.domain()[0] < 0;\n if (type === 'band') {\n return gridBandColor[i % 2];\n }\n return isNegativeDomain && data[orientation] === 0 ? zeroLineColor : gridLineColor;\n }\n };\n\n return {\n definition: {\n defClassName: `${defClassName}-${orientation}`,\n className: config.className,\n individualClassName: (data, i) => {\n let className;\n const isNegativeDomain = isLinearScale && axis.domain()[0] < 0;\n if (isNegativeDomain && data.y === 0 && type !== 'band') {\n className = `${classPrefix}-axis-zero-line`;\n } else {\n className = `${classPrefix}-grid-${type}-${orientation}-${i % 2}`;\n }\n return className;\n },\n [`pad${orientation.toUpperCase()}`]: type === 'band' ? 0 : undefined,\n encoding\n },\n axes: {\n [orientation]: axis\n },\n interactive: false\n };\n};\n\nconst getDefaultVisibilty = (show, axis) => {\n if (axis.constructor.type() === LINEAR) {\n return show;\n }\n return false;\n};\n\nexport const getGridLayerDefinitions = (context, config, type) => ['x', 'y'].map((axisType) => {\n const show = defaultValue(config[axisType] && config[axisType].show,\n getDefaultVisibilty(config.show, context.axes()[axisType][0]));\n\n return show ? getLayerDefinition(context, context.axes(), type, axisType) : undefined;\n}).filter(d => d !== undefined);\n\nexport const getGridLayerData = (axes, fields, fieldsConfig) => {\n const gridData = {};\n ['x', 'y'].forEach((type) => {\n let ticks = axes[type][0].getTickValues();\n const subtype = getObjProp(fieldsConfig, getObjProp(fields, type, 0).getMembers()[0], 'def', 'subtype');\n const jsonData = [];\n const schema = [\n {\n name: 'yvalue',\n type: 'measure'\n }, {\n name: 'xvalue',\n type: 'measure'\n },\n {\n name: 'yvalue0',\n type: 'measure'\n }, {\n name: 'xvalue0',\n type: 'measure'\n }, {\n name: 'xdim',\n type: 'dimension',\n subtype\n }, {\n name: 'ydim',\n type: 'dimension',\n subtype\n }\n ];\n const len = Math.max(ticks.length);\n ticks = subtype === DimensionSubtype.TEMPORAL ? ticks.map(d => d.getTime()) : ticks;\n for (let i = 0; i < len; i += 1) {\n jsonData.push({\n [`${type}value`]: ticks[i],\n [`${type}value0`]: ticks[i + 1],\n [`${type}dim`]: ticks[i],\n [`${type}dim`]: ticks[i]\n });\n }\n gridData[type] = new DataModel(jsonData, schema);\n });\n return gridData;\n};\n\nexport const createGridLineLayer = (context, data) => {\n const vuConf = context.config();\n const dependencies = context._layerDeps;\n const measurement = {\n width: context.width(),\n height: context.height()\n };\n\n ['band', 'line'].forEach((type) => {\n let mark;\n let config;\n let instances;\n if (type === 'band') {\n mark = 'bar';\n config = vuConf.gridBands;\n instances = context._gridbands;\n } else {\n mark = 'tick';\n config = vuConf.gridLines;\n instances = context._gridlines;\n }\n const definitions = getGridLayerDefinitions(context, config, type);\n\n definitions.forEach((atomicDef, i) => {\n let layer;\n const definition = atomicDef.definition;\n const axesObj = atomicDef.axes;\n const sConf = layerFactory.getSerializedConf(mark, definition);\n sConf.mark = mark;\n if (!instances[i]) {\n layer = layerFactory.getLayerInstance(sConf);\n layer.dependencies(dependencies);\n } else {\n layer = instances[i];\n }\n\n layer.config(sConf)\n .measurement(measurement)\n .data(axesObj.y ? data.y : data.x)\n .dataProps({\n timeDiffs: context.store().get(TIMEDIFFS)\n })\n .axes(axesObj);\n instances[i] = layer;\n });\n });\n};\n\nexport const renderGridLineLayers = (context, container) => {\n const axes = context.axes();\n const config = context.config();\n const classPrefix = config.classPrefix;\n\n if (axes && ((axes.x && axes.x.length) || (axes.y && axes.y.length))) {\n const gridBandData = getGridLayerData(axes, context.fields(), context.data().getFieldsConfig());\n createGridLineLayer(context, gridBandData);\n [[context._gridlines, `${classPrefix}-${GRIDLINEPARENTGROUPCLASS}`],\n [context._gridbands, `${classPrefix}-${GRIDBANDPARENTGROUPCLASS}`]].forEach((entry) => {\n const [instances, parentGroupClass] = entry;\n const mountPoint = makeElement(container, 'g', [1], `.${parentGroupClass}`);\n const className = `${parentGroupClass}-group`;\n makeElement(mountPoint, 'g', instances, `.${className}`, {\n update: (group, instance) => {\n instance.mount(group.node());\n }\n });\n });\n }\n};\n","import { CLASSPREFIX, CONSOLIDATED } from './enums/constants';\n\n/**\n * Returns the default configuration of the visual unit\n * @return {Object} Default configuration of visual unit\n */\nexport const defaultConfig = {\n classPrefix: CLASSPREFIX,\n defClassName: 'visual-unit',\n className: '',\n trackerClassName: 'visual-unit-tracker',\n gridLines: {\n defClassName: 'axis-grid-lines',\n className: '',\n show: true,\n color: '#efefef',\n zeroLineColor: '#b6b6b6'\n },\n gridBands: {\n defClassName: 'axis-grid-bands',\n className: '',\n show: false,\n y: {\n color: ['#fff', '#fbfbfb']\n },\n x: {\n color: ['#fff', '#f9f9f9']\n }\n },\n arcLayerClassName: 'layer-arc',\n interaction: {\n tooltip: {\n mode: CONSOLIDATED\n }\n },\n sideEffectClassName: 'side-effect-container'\n};\n","export const CLASSPREFIX = 'muze';\nexport const IDFIELD = '__id__';\nexport const GRIDLINEPARENTGROUPCLASS = 'grid-lines';\nexport const GRIDBANDPARENTGROUPCLASS = 'grid-bands';\nexport const CONSOLIDATED = 'consolidated';\nexport const FRAGMENTED = 'fragmented';\nexport const FACET_BY_FIELDS = 'facetByFields';\nexport const RETINAL_FIELDS = 'retinalFields';\nexport const PARENT_ALIAS = 'parentAlias';\nexport const LAYERS = 'layers';\nexport const CACHED_DATA = 'cachedData';\nexport const STORE = 'store';\n\n","import { mergeRecursive } from 'muze-utils';\nimport { defaultConfig } from './default-config';\nimport { CONFIG, LAYERDEFS, AXES, WIDTH, HEIGHT, MOUNT, TRANSFORM, FIELDS, DATA } from './enums/reactive-props';\n\nexport default {\n [CONFIG]: {\n value: null,\n meta: {\n sanitization: (config, oldConfig) => (\n mergeRecursive(oldConfig || mergeRecursive({}, defaultConfig), config)\n )\n }\n },\n [LAYERDEFS]: {\n value: null\n },\n [AXES]: {\n value: null,\n meta: {\n sanitization: (axes, prevAxes) => Object.assign(prevAxes || {}, axes)\n }\n },\n [WIDTH]: {\n value: null\n },\n [HEIGHT]: {\n value: null\n },\n [MOUNT]: {\n value: null\n },\n [TRANSFORM]: {\n value: null\n },\n [FIELDS]: {\n value: null\n },\n [DATA]: {\n value: null,\n meta: {\n preset: (data, context) => {\n if (context._cache) {\n const cachedData = context.cachedData();\n context.cachedData([...cachedData, data]);\n } else {\n const oldData = context.data();\n oldData && oldData.unsubscribe('propagation');\n context.cachedData([data]);\n }\n }\n }\n }\n};\n","import { DimensionSubtype } from 'muze-utils';\nimport * as PROPS from './enums/reactive-props';\nimport {\n transformDataModels,\n getDimensionMeasureMap,\n createLayers,\n attachDataToLayers,\n attachAxisToLayers,\n unionDomainFromLayers,\n getLayerAxisIndex\n} from './helper';\n\nconst axisMap = {\n 0: 'primary',\n 1: 'secondary'\n};\nconst axisProps = [PROPS.primaryXAxisUpdated, PROPS.secondaryXAxisUpdated, PROPS.primaryYAxisUpdated,\n PROPS.secondaryYAxisUpdated];\n\nexport const listenerMap = context => ([\n {\n type: 'registerImmediateListener',\n props: [PROPS.AXES],\n listener: ([, axes]) => {\n ['x', 'y'].forEach((type) => {\n const axesArr = axes[type] || [];\n axesArr.forEach((axis, i) => {\n axis.on('update', () => {\n context.store().commit(PROPS[`${axisMap[i]}${axis.isReverse() ? 'Y' : 'X'}AxisUpdated`], true);\n });\n });\n });\n }\n },\n {\n type: 'registerImmediateListener',\n props: [PROPS.CONFIG],\n listener: ([, config]) => {\n config && context.firebolt().config(config.interaction);\n }\n },\n {\n type: 'computed',\n props: [PROPS.LAYERSCREATED],\n listener: fetch => fetch(PROPS.LAYERDEFS, PROPS.FIELDS, (layerDefs, fields) => {\n const layerDefsValue = layerDefs.value;\n const fieldsVal = fields.value;\n if (layerDefsValue && fieldsVal) {\n const layers = createLayers(context, layerDefs.value);\n context.layers(layers);\n context._layerAxisIndex = getLayerAxisIndex(context.layers(), fieldsVal);\n context._lifeCycleManager.notify({ client: layers, action: 'initialized', formalName: 'layer' });\n return true;\n }\n return null;\n })\n },\n {\n type: 'computed',\n props: [PROPS.TIMEDIFFS],\n listener: fetch => fetch(PROPS.DATA, PROPS.FIELDS, PROPS.AXES, (data, fields, axes) => {\n const dataModel = data.value;\n const axisFields = fields.value;\n const axesObj = axes.value;\n if (dataModel && axisFields && axesObj) {\n const timeDiffs = {};\n const timeDiffsByField = {};\n ['x', 'y'].forEach((type) => {\n const field = axisFields[type][0];\n if (field && field.subtype() === DimensionSubtype.TEMPORAL) {\n timeDiffs[type] = field.getMinDiff();\n timeDiffsByField[field] = timeDiffs[type];\n axesObj[type].forEach(axis => axis.minDiff(timeDiffs[type]));\n }\n });\n context._timeDiffsByField = timeDiffsByField;\n return timeDiffs;\n }\n return null;\n })\n },\n {\n type: 'computed',\n props: [PROPS.DATADOMAIN],\n listener: fetch => fetch(PROPS.DATA, PROPS.LAYERSCREATED, PROPS.AXES, PROPS.TRANSFORM,\n (dataModel, layersCreated, axes, transform) => {\n const dataModelVal = dataModel.value;\n const layerAxisIndexVal = context._layerAxisIndex;\n const axesVal = axes.value;\n if (dataModelVal && layersCreated.value && axesVal && layerAxisIndexVal) {\n const layers = context.layers();\n const dataModels = transformDataModels(transform.value, dataModelVal);\n context._transformedDataModels = dataModels;\n context._lifeCycleManager.notify({ client: layers, action: 'beforeupdate', formalName: 'layer' });\n attachDataToLayers(layers, dataModelVal, context._transformedDataModels);\n context._dimensionMeasureMap = getDimensionMeasureMap(layers,\n dataModelVal.getFieldsConfig(), context.retinalFields());\n attachAxisToLayers(axesVal, layers, layerAxisIndexVal);\n context._lifeCycleManager.notify({ client: layers, action: 'updated', formalName: 'layer' });\n return unionDomainFromLayers(layers, context.fields(),\n layerAxisIndexVal, dataModelVal.getFieldsConfig());\n }\n return null;\n })\n },\n {\n type: 'registerImmediateListener',\n props: [PROPS.DATADOMAIN],\n listener: ([, dataDomain]) => {\n dataDomain !== null && context.updateAxisDomain(dataDomain);\n }\n },\n {\n type: 'registerChangeListener',\n props: [PROPS.MOUNT, PROPS.DATA, ...axisProps],\n listener: (mount, data) => {\n const container = mount[1];\n if (container && data[1]) {\n context.render(container);\n }\n }\n }\n]);\n","import { FACET_BY_FIELDS, RETINAL_FIELDS, PARENT_ALIAS, LAYERS, STORE, CACHED_DATA } from './enums/constants';\n\nexport const PROPS = {\n [FACET_BY_FIELDS]: {},\n [RETINAL_FIELDS]: {},\n [PARENT_ALIAS]: {},\n [LAYERS]: {},\n [STORE]: {},\n [CACHED_DATA]: {},\n detailFields: {}\n};\n","import { CommonProps } from 'muze-utils';\nimport { DATA, MOUNT } from '../enums/reactive-props';\n\nexport const clearActionHistory = (context) => {\n const actionHistory = context._actionHistory;\n for (const key in actionHistory) {\n if (actionHistory[key].isMutableAction) {\n delete context._actionHistory[key];\n }\n }\n};\n\nexport const dispatchQueuedSideEffects = (context) => {\n const queuedSideEffects = context._queuedSideEffects;\n Object.entries(queuedSideEffects).forEach((entry) => {\n const sideEffect = entry[1];\n context.dispatchSideEffect(sideEffect.name, ...sideEffect.params);\n });\n context._queuedSideEffects = {};\n};\n\nexport const registerListeners = (firebolt) => {\n const context = firebolt.context;\n const store = context.store();\n\n store.registerImmediateListener([DATA, MOUNT], (dataModel, mount) => {\n const dm = dataModel[1];\n\n if (dm && mount[1]) {\n const originalData = firebolt.context.cachedData()[0];\n firebolt.createSelectionSet(firebolt.context.data().getData().uids);\n firebolt.attachPropagationListener(originalData);\n }\n }, true);\n\n context._layerDeps.throwback.registerChangeListener([CommonProps.ON_LAYER_DRAW],\n ([, onlayerdraw]) => {\n if (onlayerdraw) {\n firebolt.initializeSideEffects();\n firebolt.config(context.config().interaction);\n firebolt.mapActionsAndBehaviour();\n dispatchQueuedSideEffects(firebolt);\n clearActionHistory(firebolt);\n }\n });\n};\n\n","import { DimensionSubtype } from 'muze-utils';\n\nconst getRangeFromData = (instance, selectionDataModel, propConfig) => {\n let criteria;\n const dataObj = selectionDataModel[0].getData();\n const propCriteria = propConfig.payload.criteria;\n const sourceIdentifiers = propConfig.sourceIdentifiers;\n const schema = dataObj.schema;\n const fieldMap = instance.data().getFieldsConfig();\n const data = dataObj.data;\n const isActionSourceSame = instance.id() === propConfig.sourceId;\n\n if (isActionSourceSame) {\n criteria = propCriteria;\n } else {\n criteria = (sourceIdentifiers !== null) ? schema.reduce((acc, obj, index) => {\n let range;\n const field = obj.name;\n const fieldObj = fieldMap[field];\n const type = fieldObj && (fieldObj.def.subtype ? fieldObj.def.subtype : fieldObj.def.type);\n const isDimension = type === DimensionSubtype.CATEGORICAL;\n\n if (!fieldObj) {\n return acc;\n }\n\n if (!isDimension) {\n range = [Math.min(...data.map(d => d[index])), Math.max(...data.map(d => d[index]))];\n } else {\n range = data.map(d => d[index]);\n }\n acc[field] = range;\n return acc;\n }, {}) : null;\n }\n return criteria;\n};\n\nexport const payloadGenerator = {\n brush: (instance, selectionDataModel, propConfig) => {\n const propPayload = propConfig.payload;\n const criteria = getRangeFromData(instance, selectionDataModel, propConfig);\n const payload = Object.assign({}, propPayload);\n payload.criteria = criteria;\n return payload;\n },\n\n __default: (instance, selectionDataModel, propConfig) => {\n const propPayload = propConfig.payload;\n const sourceIdentifiers = propConfig.sourceIdentifiers;\n const dataObj = selectionDataModel[0].getData();\n let schema = dataObj.schema;\n const payload = Object.assign({}, propPayload);\n schema = dataObj.schema;\n const data = dataObj.data;\n const sourceFields = schema.map(d => d.name);\n payload.criteria = !sourceIdentifiers && selectionDataModel[0].isEmpty() ? null :\n [sourceFields, ...data];\n payload.sourceFields = sourceIdentifiers ? sourceIdentifiers.getSchema().map(d => d.name) : [];\n return payload;\n }\n};\n\n","import { isSimpleObject, FieldType, DataModel } from 'muze-utils';\n\nconst getModelWithFacetData = (dm, data) => {\n const dataObj = dm.getData();\n const schema1 = dataObj.schema;\n const data1 = dataObj.data;\n const jsonData = [];\n const schema2 = data[0].map(d => ({\n name: `${d}`,\n type: FieldType.DIMENSION\n }));\n const data2 = data[1];\n\n data1.forEach((d) => {\n const tuple = {};\n schema1.forEach((obj, i) => {\n tuple[obj.name] = d[i];\n });\n schema2.forEach((obj, i) => {\n tuple[obj.name] = data2[i];\n });\n jsonData.push(tuple);\n });\n\n return new DataModel(jsonData, [...schema1, ...schema2]);\n};\n\nexport const propagateValues = (instance, action, config = {}) => {\n let propagationData;\n const payload = config.payload;\n const selectionSet = config.selectionSet;\n const propagationFieldInf = config.propagationFields[action] || {};\n const propagationFields = propagationFieldInf.fields || [];\n const append = propagationFieldInf.append;\n const criteria = payload.criteria;\n const context = instance.context;\n const dataModel = context.cachedData()[0];\n const sourceId = context.id();\n const sideEfffects = instance.sideEffects();\n const behaviourEffectMap = instance._behaviourEffectMap;\n const mergedModel = selectionSet.mergedEnter.model;\n const fieldsConfig = dataModel.getFieldsConfig();\n payload.sourceUnit = sourceId;\n payload.action = action;\n payload.sourceCanvas = context.parentAlias();\n const propagationBehaviourMap = instance._propagationBehaviourMap;\n const propagationBehaviour = propagationBehaviourMap[action] || action;\n\n let propFields = [];\n if (criteria === null) {\n propagationData = null;\n } else if (isSimpleObject(criteria)) {\n propFields = Object.keys(criteria || {});\n propagationData = mergedModel ? mergedModel.project(propFields) : null;\n } else {\n propFields = criteria[0];\n propagationData = mergedModel ? mergedModel.project(propFields) : null;\n }\n\n const facetByFields = context.facetByFields();\n if (propagationData !== null && propagationFields.length) {\n const fields = propagationData.getData().schema.map(d => d.name);\n propagationData = getModelWithFacetData(propagationData, facetByFields);\n propFields = append ? [...fields, ...propagationFields] : propagationFields;\n propagationData = propagationData.project(propFields);\n }\n\n let propagateInterpolatedValues = false;\n if (propFields.length && propFields.every(field => fieldsConfig[field] &&\n fieldsConfig[field].def.type === FieldType.MEASURE)) {\n propagateInterpolatedValues = true;\n }\n\n const groupId = context.parentAlias();\n payload.action = action;\n const behaviourInstance = instance._actions.behavioural[propagationBehaviour];\n const isMutableAction = behaviourInstance ? behaviourInstance.constructor.mutates() : false;\n\n const filterFn = (entry, propagationConf) => {\n const effects = behaviourEffectMap[entry.config.action];\n const mutates = entry.config.groupId ?\n effects.some(d => sideEfffects[d.name || d].constructor.mutates()) : true;\n return entry.config.groupId !== propagationConf.groupId && mutates;\n };\n\n const sourceBehaviour = instance._actions.behavioural[action];\n const mutates = sourceBehaviour ? sourceBehaviour.constructor.mutates() : false;\n let propConfig = {\n payload,\n action,\n criteria: propagationData,\n isMutableAction: mutates,\n propagateInterpolatedValues,\n groupId,\n sourceId: mutates ? groupId : sourceId,\n filterFn,\n enabled: (propConf, firebolt) => (action !== propagationBehaviour ?\n propConf.payload.sourceCanvas === firebolt.context.parentAlias() : true)\n };\n\n dataModel.propagate(propagationData, propConfig, true);\n\n if (action !== propagationBehaviour) {\n propConfig = {\n payload,\n sourceId: isMutableAction ? groupId : sourceId,\n criteria: propagationData,\n isMutableAction,\n propagateInterpolatedValues,\n action: propagationBehaviour,\n groupId,\n applyOnSource: action === propagationBehaviour,\n enabled: (propConf, firebolt) => propConf.payload.sourceCanvas !== firebolt.context.parentAlias(),\n filterFn\n };\n\n dataModel.propagate(propagationData, propConfig, true, {\n filterImmutableAction: (actionInf, propInf) => actionInf.groupId !== propInf.groupId\n });\n }\n};\n","import { FieldType } from 'muze-utils';\nimport { Firebolt, SpawnableSideEffect } from '@chartshq/muze-firebolt';\nimport { registerListeners } from './helper';\nimport { payloadGenerator } from './payload-generator';\nimport { propagateValues } from './data-propagator';\n\n/**\n * This class manages the interactions of visual unit. It associates physical actions with\n * behavioural actions. It also propagates the behavioural actions to other datamodels.\n */\nexport default class UnitFireBolt extends Firebolt {\n constructor (...params) {\n super(...params);\n registerListeners(this);\n }\n\n propagate (behaviour, payload, selectionSet, sideEffects) {\n propagateValues(this, behaviour, {\n payload,\n selectionSet,\n sideEffects,\n propagationFields: this._propagationFields\n });\n }\n\n getApplicableSideEffects (sideEffects, payload, propagationInf) {\n const context = this.context;\n const unitId = context.id();\n const aliasName = context.parentAlias();\n const propagationSourceCanvas = propagationInf.propPayload && propagationInf.propPayload.sourceCanvas;\n const sourceUnitId = propagationInf.propPayload && propagationInf.propPayload.sourceUnit;\n const sourceSideEffects = this._sourceSideEffects;\n const sideEffectInstances = this.sideEffects();\n const actionOnSource = sourceUnitId ? sourceUnitId === unitId : true;\n\n const applicableSideEffects = payload.sideEffects ? [{\n effects: payload.sideEffects,\n behaviours: [payload.action]\n }] : sideEffects;\n applicableSideEffects.forEach((d) => {\n let mappedEffects = d.effects;\n mappedEffects = mappedEffects.filter((se) => {\n const mutates = sideEffectInstances[se.name || se].constructor.mutates();\n if (mutates && propagationInf.isMutableAction === false) {\n return false;\n }\n if (!actionOnSource && payload.criteria !== null) {\n const sideEffectChecker = sourceSideEffects[se.name || se];\n return sideEffectChecker ? sideEffectChecker(propagationInf.propPayload, context) : true;\n }\n if (propagationSourceCanvas === aliasName || actionOnSource) {\n return se.applyOnSource !== false;\n }\n\n return true;\n });\n d.effects = mappedEffects;\n });\n return applicableSideEffects;\n }\n\n shouldApplySideEffects (propagate) {\n return propagate === false;\n }\n\n onDataModelPropagation () {\n return (data, config) => {\n let isSourceFieldPresent = true;\n let isMutableAction = false;\n const propPayload = config.payload;\n const sourceIdentifiers = config.sourceIdentifiers;\n const enabledFn = config.enabled;\n const action = config.action;\n const payloadFn = payloadGenerator[action] || payloadGenerator.__default;\n\n if (sourceIdentifiers) {\n const fieldsConfig = sourceIdentifiers.getFieldsConfig();\n const sourceIdentifierFields = Object.keys(fieldsConfig);\n const propFields = Object.keys(data[0].getFieldsConfig());\n if (!Object.values(fieldsConfig).some(d => d.def.type === FieldType.MEASURE)) {\n isSourceFieldPresent = sourceIdentifierFields.some(d => propFields.indexOf(d) !== -1);\n }\n }\n\n const payload = payloadFn(this.context, data, config);\n const sourceBehaviours = this._sourceBehaviours;\n const filterFn = sourceBehaviours[action] || sourceBehaviours['*'];\n let enabled = true;\n\n if (filterFn) {\n enabled = filterFn(propPayload || {}, this.context);\n }\n\n if (enabledFn) {\n enabled = enabledFn(config, this) && enabled !== false;\n }\n\n if (enabled) {\n const effects = this._behaviourEffectMap[action];\n const sideEffectInstances = this.sideEffects();\n isMutableAction = config.groupId ?\n effects.some(d => sideEffectInstances[d.name || d].constructor.mutates()) : config.isMutableAction;\n\n const propagationInf = {\n propagate: false,\n data,\n propPayload,\n sourceIdentifiers,\n persistent: false,\n isSourceFieldPresent,\n sourceId: config.propagationSourceId,\n isMutableAction: config.isMutableAction\n };\n\n this._actionHistory[action] = {\n payload,\n propagationInf,\n isMutableAction\n };\n this.dispatchBehaviour(action, payload, propagationInf);\n }\n };\n }\n\n initializeSideEffects () {\n super.initializeSideEffects();\n const sideEffects = this.sideEffects();\n for (const key in sideEffects) {\n if ({}.hasOwnProperty.call(sideEffects, key)) {\n sideEffects[key] instanceof SpawnableSideEffect && sideEffects[key].drawingContext(() => {\n const context = this.context;\n return context.getDrawingContext();\n });\n }\n }\n }\n\n prepareSelectionSets (behaviours) {\n const data = this.context.data();\n if (data) {\n this.createSelectionSet(data.getData().uids, behaviours);\n }\n return this;\n }\n\n remove () {\n this.context.cachedData()[0].unsubscribe('propagation');\n return this;\n }\n}\n","import { layerFactory } from '@chartshq/visual-layer';\nimport {\n setAttrs,\n CommonProps,\n getUniqueId,\n getQualifiedClassName,\n selectElement,\n transactor,\n Store,\n makeElement,\n registerListeners,\n generateGetterSetters,\n getDataModelFromIdentifiers,\n isSimpleObject,\n transposeArray,\n FieldType\n} from 'muze-utils';\nimport { physicalActions, sideEffects, behaviouralActions, behaviourEffectMap } from '@chartshq/muze-firebolt';\nimport { actionBehaviourMap } from './firebolt/action-behaviour-map';\nimport {\n renderLayers,\n getNearestDimensionalValue,\n removeLayersBy,\n getLayersBy,\n getLayerFromDef,\n attachAxisToLayers,\n getLayerAxisIndex,\n createSideEffectGroup,\n getAdjustedDomain,\n resolveEncodingTransform\n} from './helper';\nimport { renderGridLineLayers } from './helper/grid-lines';\nimport localOptions from './local-options';\nimport { listenerMap } from './listener-map';\nimport {\n primaryYAxisUpdated,\n primaryXAxisUpdated,\n secondaryXAxisUpdated,\n secondaryYAxisUpdated,\n DATADOMAIN,\n TIMEDIFFS\n} from './enums/reactive-props';\nimport { PROPS } from './props';\nimport UnitFireBolt from './firebolt';\nimport './styles.scss';\n\nconst FORMAL_NAME = 'unit';\n\n/**\n * @module VisualUnit\n * A hierarchical component of renderer which manages multiple layers. This logical\n * module is responsible for layouting layers, attach axis with them, resolving conflicts of layers.\n */\n\n/**\n * Basic unit implementaiton\n * @class VisualUnit\n */\nexport default class VisualUnit {\n\n /**\n * Creates instance of visualization unit\n * @param registry {Object} Component registry\n * @param dependencies {Object} Dependencies required by visual unit.\n */\n constructor (registry, dependencies) {\n this._id = getUniqueId();\n this._dependencies = dependencies;\n this._layerDeps = {\n throwback: new Store({\n onlayerdraw: false\n }),\n smartLabel: dependencies.smartLabel\n };\n this._renderedResolve = null;\n this._renderedPromise = new Promise((resolve) => {\n this._renderedResolve = resolve;\n });\n this._layerDeps.throwback.registerChangeListener([CommonProps.ON_LAYER_DRAW], () => {\n this._renderedResolve();\n this._lifeCycleManager.notify({ client: this.layers(), action: 'drawn', formalName: 'layer' });\n });\n\n this._lifeCycleManager = dependencies.lifeCycleManager;\n this._layersMap = {};\n this._gridlines = [];\n this._gridbands = [];\n this._layerAxisIndex = {};\n this._transformedDataModels = {};\n\n layerFactory.setLayerRegistry(registry.layerRegistry);\n generateGetterSetters(this, PROPS);\n this.cachedData([]);\n this.store(new Store({\n [primaryXAxisUpdated]: null,\n [primaryYAxisUpdated]: null,\n [secondaryXAxisUpdated]: null,\n [secondaryYAxisUpdated]: null\n }));\n transactor(this, localOptions, this.store().model);\n this.firebolt(new UnitFireBolt(this, {\n physical: physicalActions,\n behavioural: behaviouralActions,\n physicalBehaviouralMap: actionBehaviourMap\n }, sideEffects, behaviourEffectMap));\n registerListeners(this, listenerMap);\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof VisualUnit\n */\n static formalName () {\n return FORMAL_NAME;\n }\n\n /**\n * Static helper for creates a unit instance\n *\n * @param {Object} [id] optional unique identifier for a unit; , id is calculated internally\n * @param {DataModel} data instance of datamodel\n * @param {Array.} layers layer configuration\n * @param {Object} config configurtion for the visual unit\n * @return {VisualUnit} Instance of a unit\n */\n static create (...params) {\n return new this(...params);\n }\n\n /**\n *\n *\n * @readonly\n * @memberof VisualUnit\n */\n firebolt (...firebolt) {\n if (firebolt.length) {\n this._firebolt = firebolt[0];\n return this;\n }\n return this._firebolt;\n }\n\n /**\n * Gets the domain for all axes of this visual unit.\n * @return {Object} Domains of each data field.\n */\n getDataDomain () {\n return this.store().get(DATADOMAIN);\n }\n\n /**\n * Retrieves the id created for this instance of visual unit\n * @return {string} id associated with the instance\n */\n id () {\n return this._id;\n }\n\n /**\n *\n *\n * @returns\n * @memberof VisualUnit\n */\n lockModel () {\n this._store.model.lock();\n return this;\n }\n\n /**\n *\n *\n * @returns\n * @memberof VisualUnit\n */\n unlockModel () {\n this._store.model.unlock();\n return this;\n }\n\n timeDiffsByField (...params) {\n if (params.length) {\n return this;\n }\n return this._timeDiffsByField;\n }\n\n /**\n * Renders the visual unit. It creates the layout and renders the axes and layers.\n * @return {VisualUnit} Instance of visual unit.\n */\n render (container) {\n const config = this.config();\n const { className, defClassName, sideEffectClassName, classPrefix } = config;\n const qualifiedClassName = getQualifiedClassName(defClassName, this.id(), config.classPrefix);\n const width = this.width();\n const height = this.height();\n const containerSelection = selectElement(container).style('position', 'relative');\n\n this._rootSvg = makeElement(containerSelection, 'svg', [null], className)\n .style('width', `${width}px`).style('height', `${height}px`);\n\n const node = this._rootSvg.node();\n setAttrs(node, {\n width,\n height,\n class: qualifiedClassName.join(' ')\n });\n renderGridLineLayers(this, node);\n renderLayers(this, node, this.layers(), {\n width,\n height\n });\n this._sideEffectGroup = createSideEffectGroup(node, `${classPrefix}-${sideEffectClassName}`);\n return this;\n }\n\n done () {\n return this._renderedPromise;\n }\n /**\n *\n *\n * @returns\n * @memberof VisualUnit\n */\n enableCaching () {\n this._cache = true;\n return this;\n }\n\n /**\n *\n *\n * @returns\n * @memberof VisualUnit\n */\n clearCaching () {\n this._cache = false;\n this.cachedData([this.cachedData()[0]]);\n return this;\n }\n\n /**\n *\n *\n * @returns\n * @memberof VisualUnit\n */\n getDrawingContext () {\n const rootSvg = this._rootSvg && this._rootSvg.node();\n const width = this.width();\n const height = this.height();\n return {\n htmlContainer: this.mount(),\n svgContainer: rootSvg,\n width,\n height,\n sideEffectGroup: this._sideEffectGroup,\n parentContainer: this.parentContainer(),\n xOffset: 0,\n yOffset: 0\n };\n }\n\n /**\n * Returns the serialized configuration of visual unit.\n * @return {Object} serialized configuration\n */\n serialize () {\n return {\n layers: this.layers().map(layer => layer.serialize()),\n config: this.config(),\n axes: this.store().get('axes').map(axis => axis.serialize())\n };\n }\n\n /**\n *\n *\n * @param {*} layerDef\n * @returns\n * @memberof VisualUnit\n */\n addLayer (layerDef) {\n const layerName = layerDef.name;\n const layer = this.getLayerByName(layerName);\n const measurement = {\n width: this.width(),\n height: this.height()\n };\n\n if (layer) {\n return [layer];\n }\n const serializedDef = layerFactory.getSerializedConf(layerDef.mark, layerDef);\n const instances = Object.values(getLayerFromDef(this, serializedDef));\n this.layers().push(...instances);\n const layerAxisIndex = getLayerAxisIndex(instances, this.fields());\n this._layerAxisIndex = Object.assign(this._layerAxisIndex, layerAxisIndex);\n attachAxisToLayers(this.axes(), instances, layerAxisIndex);\n const store = { unit: this, layers: {} };\n this.layers().forEach((inst) => {\n store.layers[inst.alias()] = inst;\n });\n instances.forEach((lyr) => {\n resolveEncodingTransform(lyr, store);\n lyr.measurement(measurement);\n lyr.dataProps({\n timeDiffs: this.store().get(TIMEDIFFS)\n });\n });\n return instances;\n }\n\n /**\n *\n *\n * @returns\n * @memberof VisualUnit\n */\n remove () {\n const lifeCycleManager = this._dependencies.lifeCycleManager;\n lifeCycleManager.notify({ client: this, action: 'beforeremove', formalName: 'unit' });\n this.store().unsubscribeAll();\n selectElement(this.mount()).remove();\n this.firebolt().remove();\n // Remove layers\n lifeCycleManager.notify({ client: this.layers(), action: 'beforeremove', formalName: 'layer' });\n this.layers().forEach(layer => layer.remove());\n lifeCycleManager.notify({ client: this.layers(), action: 'removed', formalName: 'layer' });\n lifeCycleManager.notify({ client: this, action: 'removed', formalName: 'unit' });\n return this;\n }\n\n /**\n *\n *\n * @param {*} identifiers\n * @returns\n * @memberof VisualUnit\n */\n getDataModelFromIdentifiers (identifiers, mode, parentModel) {\n if (identifiers === null) {\n return null;\n }\n const dataModel = parentModel || this.data();\n return getDataModelFromIdentifiers(dataModel, identifiers, mode);\n }\n\n /**\n *\n *\n * @returns\n * @memberof VisualUnit\n */\n resetData () {\n this.data(this.cachedData()[0]);\n return this;\n }\n\n /**\n *\n *\n * @returns\n * @memberof VisualUnit\n */\n getSourceInfo () {\n return {\n dimensionMeasureMap: this._dimensionMeasureMap,\n fields: this.fields(),\n data: this.data(),\n axes: this.axes()\n };\n }\n\n /**\n *\n *\n * @returns\n * @memberof VisualUnit\n */\n getDefaultTargetContainer () {\n const { classPrefix, defClassName } = this.config();\n return [`.${classPrefix}-${defClassName}`];\n }\n\n /**\n *\n *\n * @param {*} type\n * @returns\n * @memberof VisualUnit\n */\n getLayersByType (type) {\n const layers = getLayersBy(this.layers(), 'type', type);\n return layers;\n }\n\n /**\n *\n *\n * @param {*} name\n * @returns\n * @memberof VisualUnit\n */\n getLayerByName (name) {\n const layers = getLayersBy(this.layers(), 'name', name);\n return layers[0];\n }\n\n /**\n *\n *\n * @param {*} domain\n * @returns\n * @memberof VisualUnit\n */\n updateAxisDomain (domain) {\n ['x', 'y'].forEach((type) => {\n const axes = this.axes()[type];\n let min = [];\n let max = [];\n let dom;\n axes && axes.forEach((axis, i) => {\n const field = this.fields()[type][i];\n dom = domain[`${this.fields()[type][i]}`];\n\n if (field.type() !== FieldType.DIMENSION && dom) {\n min[i] = dom[0];\n max[i] = dom[1];\n }\n });\n if (axes) {\n if (axes.length > 1) {\n const axisConf = axes[0].config();\n if (axes[0].constructor.type() === 'linear') {\n if (axisConf.alignZeroLine) {\n axes.forEach(axis => axis.config({\n nice: false\n }));\n const adjustedDomain = getAdjustedDomain(max, min);\n min = adjustedDomain.min;\n max = adjustedDomain.max;\n }\n\n axes[0].updateDomainCache([min[0], max[0]]);\n axes[1].updateDomainCache([min[1], max[1]]);\n } else {\n axes[0].updateDomainCache(dom);\n axes[1].updateDomainCache(dom);\n }\n } else {\n axes[0].updateDomainCache(dom);\n }\n }\n });\n return this;\n }\n\n /**\n * Finds the nearest point closest to the x and y position.\n * @param {number} x x position.\n * @param {number} y y position.\n * @return {Object} Nearest point.\n */\n getNearestPoint (x, y, args) {\n let pointObj = {\n id: null\n };\n const dimValue = getNearestDimensionalValue(this, {\n x,\n y\n });\n\n if (dimValue !== null && args.getAllPoints) {\n pointObj.id = dimValue;\n const pointInf = this.getMarkInfFromLayers(x, y, args);\n pointObj.target = pointInf && pointInf.id ? pointInf.id : pointObj.id;\n return pointObj;\n }\n\n const markInf = this.getMarkInfFromLayers(x, y, args) || { id: null };\n pointObj = Object.assign({}, markInf);\n\n pointObj.target = markInf.id;\n return pointObj;\n }\n\n getMarkInfFromLayers (x, y, args) {\n const layers = this.layers();\n const len = layers.length;\n let point = null;\n // Iterate through the layers array and fetch the nearest point from each layer. If a valid\n // nearest point is found from any layer, then return that point.\n for (let i = 0; i < len; i++) {\n const layer = layers[i];\n const config = layer.config();\n if (config.interactive !== false) {\n point = layer.getNearestPoint(x, y, args);\n }\n if (point) {\n return point;\n }\n }\n return point;\n }\n\n /**\n *\n *\n * @param {*} identifiers\n * @returns\n * @memberof VisualUnit\n */\n getPlotPointsFromIdentifiers (identifiers, config = {}) {\n let points = [];\n let parsedIdentifiers = identifiers;\n if (identifiers === null) {\n return [];\n }\n const layers = this.layers();\n const len = layers.length;\n if (isSimpleObject(identifiers)) {\n parsedIdentifiers = [Object.keys(identifiers)];\n parsedIdentifiers = [...parsedIdentifiers, ...transposeArray(Object.values(identifiers))];\n }\n for (let i = 0; i < len; i++) {\n const layer = layers[i];\n if (layer.config().interactive !== false) {\n points = [...points, ...layer.getPointsFromIdentifiers(parsedIdentifiers, config)];\n }\n }\n return points;\n }\n\n /**\n *\n *\n * @param {*} name\n * @returns\n * @memberof VisualUnit\n */\n removeLayerByName (name) {\n removeLayersBy('name', name);\n return this;\n }\n\n /**\n *\n *\n * @param {*} type\n * @returns\n * @memberof VisualUnit\n */\n removeLayersByType (type) {\n removeLayersBy('type', type);\n return this;\n }\n\n parentContainer (...container) {\n if (container.length) {\n this._parentContainer = container[0];\n\n return this;\n }\n return this._parentContainer;\n }\n}\n","import { DataModel } from 'muze-utils';\n\nimport { retriveDomainFromData } from './group-utils';\n\n/**\n * Gets name of fields form the variables\n *\n * @param {*} fields1\n * @param {*} [fields2=[]]\n * @return\n */\nconst getFieldNames = (fields1, fields2 = []) => [fields1, fields2].map(fields => fields.reduce((acc, d) => {\n acc = [...acc, ...d.getMembers()];\n return acc;\n}, []));\n\n/**\n * Creates a selected datamodel from a parent datamodel and a set of field names\n *\n * @param {Object} datamodel provided as input\n * @param {Array} fieldNames schema names\n * @param {Array} fieldValues values of those schema names to be selected\n * @return {Object} creates a new selected datamodel\n */\nconst createSelectedDataModel = (datamodel, fieldNames, fieldValues) =>\n datamodel.select(fields => fieldNames.every((field, k) => fields[field].value === fieldValues[k]));\n\n/**\n *\n *\n * @param {*} facets\n * @param {*} keyArray\n * @return\n */\nconst uniqueKeyGenerator = (keyArray, context, depth = 0, val = []) => {\n const {\n facets,\n dataModel,\n uniqueValues\n } = context;\n\n // Get unique keys for the next depth recursively if required\n if (facets[depth + 1]) {\n const field = facets[depth];\n uniqueValues.forEach((value) => {\n const newDm = dataModel.select(fields => fields[field].value === value);\n const nextDepthUniqueValues = retriveDomainFromData(newDm, facets[depth + 1]);\n const newContext = {\n facets,\n dataModel: newDm,\n uniqueValues: nextDepthUniqueValues\n };\n\n uniqueKeyGenerator(keyArray, newContext, depth + 1, [...val, value]);\n });\n } else {\n uniqueValues.forEach((value) => {\n keyArray.push([...val, value]);\n });\n }\n};\n\n/**\n * projects row model based on the set of row and/or column and other projection fields\n *\n * @param {Object} datamodel provided as input\n * @return {Object} Projected datamodel\n */\nconst projectRows = (datamodel, projections) => {\n const {\n allColumnProjections,\n rowProjections,\n optionalProjections\n } = projections;\n\n if (rowProjections.length > 0) {\n return rowProjections.map((projectFields) => {\n const [projFieldNames, colProjFieldNames] = getFieldNames(projectFields, allColumnProjections);\n return datamodel.project([...projFieldNames, ...colProjFieldNames, ...optionalProjections]);\n });\n }\n return [datamodel];\n};\n\n/**\n * Adds the datamodels to current row index based on column fields\n *\n * @param {Array} context current context\n * @param {Array} callback List of facets applied to the current datamodel\n */\nconst pushToMatrix = (context, callback) => {\n let cells = [];\n const {\n matrix,\n datamodel,\n facetInfo,\n fieldInfo\n } = context;\n // Get projected fields for current row\n const {\n rowProjections,\n colProjections,\n optionalProjections\n } = fieldInfo;\n const {\n rowIndex,\n columnIndex\n } = facetInfo;\n const rowProj = rowProjections[(rowIndex) % rowProjections.length] || [];\n\n // Get the cells for the matrix from the return function of the callback on the datamodel.\n // callback function -> (datamodel, {projections, indices}, facets)\n if (colProjections.length > 0) {\n cells = colProjections.map((projectFields, projIdx) => {\n const [colProjFieldNames, rowProjFieldNames] = getFieldNames(projectFields, rowProj);\n const projectedDm = datamodel.project([...colProjFieldNames, ...rowProjFieldNames, ...optionalProjections]);\n const projections = { rowFields: rowProj, columnFields: projectFields };\n const indices = { rowIndex, columnIndex: columnIndex * colProjections.length + projIdx };\n\n return callback(projectedDm, { projections, indices }, facetInfo);\n });\n } else {\n const projections = { rowFields: rowProj, columnFields: [] };\n const indices = { rowIndex, columnIndex };\n\n cells = [callback(datamodel, { projections, indices }, facetInfo)];\n }\n\n matrix[rowIndex] = matrix[rowIndex] || [];\n matrix[rowIndex].push(...cells);\n};\n\n/**\n * Gets Matrixes for corresponding datamodel, facets and projections\n *\n * @param {Object} dataModel input datamodel\n * @param {Object} fieldMap corresponding fieldmap\n * @param {Array} facetsAndProjections contains the set of facets and projections for the matrices\n * @param {Function} callback Callback executed after datamodels are prepared after sel/proj\n * @return {Object} set of matrices with the corresponding row and column keys\n */\nexport const getMatrixModel = (dataModel, fieldInfo, callback) => {\n let rowDataModels = [];\n const rowKeys = [];\n const columnKeys = [];\n const allColumnProjections = [];\n const matrix = [];\n const facetInfo = [];\n const {\n rowFacets,\n colFacets,\n colProjections\n } = fieldInfo;\n\n colProjections.forEach((colProj) => {\n allColumnProjections.push(...colProj);\n });\n fieldInfo.allColumnProjections = allColumnProjections;\n\n // Performing row selection and projection\n if (rowFacets.length > 0) {\n // Get unique values for the root level of facet\n const field = rowFacets[0].toString();\n const firstLevelRowKeys = retriveDomainFromData(dataModel, field);\n\n // Get unique keys in the form of an array of arrays for each row\n uniqueKeyGenerator(rowKeys, { facets: rowFacets, dataModel, uniqueValues: firstLevelRowKeys });\n\n // Apply selection -> projection -> row datamodels\n rowKeys.forEach((val) => {\n // Create faceted datamodel\n const [rowFacetFieldNames] = getFieldNames(rowFacets);\n const selectedDataModel = createSelectedDataModel(dataModel, rowFacetFieldNames, val);\n\n // Project the datamodel based on the number of projections (based on last levels)\n facetInfo.push([rowFacets, val]);\n rowDataModels.push(...projectRows(selectedDataModel, fieldInfo));\n });\n } else {\n // No row facets, hence only row projection\n rowDataModels.push(...projectRows(dataModel, fieldInfo));\n }\n\n // Maintaining set of row datamodels for column resolution\n rowDataModels = rowDataModels.length > 0 ? rowDataModels : [[]];\n\n // Performing column selection and projection\n if (colFacets.length > 0) {\n const colFacetNames = colFacets.map(d => `${d}`);\n // Get unique values for the root level of facet\n const field = colFacetNames[0];\n const firstLevelColumnKeys = retriveDomainFromData(dataModel, field);\n\n // Get unique keys to create faceted datamodels: this time for columns\n uniqueKeyGenerator(columnKeys, {\n facets: colFacetNames,\n dataModel,\n uniqueValues: firstLevelColumnKeys\n });\n\n // For each row in the datamodel, apply selection -> projection -> push the projection to matri\n rowDataModels.forEach((dme, rIndex) => {\n facetInfo[rIndex] = facetInfo[rIndex] || [[], []];\n columnKeys.forEach((val, cIndex) => {\n matrix[rIndex] = matrix[rIndex] || [];\n\n // If datamodel is not present in current row, choose parent datamodel\n const datamodel = dme instanceof DataModel ? dme : dataModel;\n\n // Selection is made on the datamodel for the current row\n const selectedDataModel = createSelectedDataModel(datamodel, colFacetNames, val);\n const context = {\n matrix,\n datamodel: selectedDataModel,\n facetInfo: {\n rowFacets: facetInfo[rIndex],\n colFacets: [colFacets, val],\n rowIndex: rIndex,\n columnIndex: cIndex\n },\n fieldInfo\n };\n pushToMatrix(context, callback);\n });\n });\n } else {\n // No column facets, hence only row projection\n rowDataModels.forEach((dme, rIndex) => {\n facetInfo[rIndex] = facetInfo[rIndex] || [[], []];\n const context = {\n matrix,\n datamodel: dme || dataModel,\n facetInfo: {\n rowFacets: facetInfo[rIndex],\n colFacets: [[], []],\n rowIndex: rIndex,\n columnIndex: 0\n },\n fieldInfo\n };\n\n pushToMatrix(context, callback);\n });\n }\n\n // Getting column keys\n const transposedColKeys = columnKeys.length > 0 ? columnKeys[0].map((col, i) =>\n columnKeys.map(row => row[i])) : columnKeys;\n\n return { matrix, rowKeys, columnKeys: transposedColKeys };\n};\n","import { AxisOrientation } from '@chartshq/muze-axis';\nimport { getObjProp, FieldType } from 'muze-utils';\nimport { getMatrixModel } from './matrix-model';\nimport {\n getCellKey,\n isDistributionEqual,\n mutateAxesFromMap,\n createSelection,\n getFieldsFromSuppliedLayers,\n extractFields\n} from './group-utils';\nimport { ROW, ROWS, COLUMNS, COL, LEFT, RIGHT, TOP, BOTTOM, PRIMARY, SECONDARY, X, Y } from '../enums/constants';\n\n/**\n * Updates row and column cells with the geom cell corresponding to the facet keys\n *\n * @param {*} resolver\n * @param {*} facets\n */\nconst updateCells = (resolver, facets, geomCell) => {\n [ROW, COL].forEach((field) => {\n const cells = resolver[`${field}Cells`]();\n const facetKey = facets[`${field}Facets`][1].join();\n\n !cells[facetKey] && (cells[facetKey] = []);\n cells[facetKey].push(geomCell);\n resolver[`${field}Cells`](cells);\n });\n};\n\n/**\n *\n *\n * @param {*} context\n * @param {*} datamodel\n * @param {*} fieldInfo\n * @param {*} facets\n * @return\n */\nexport const createValueCells = (context, datamodel, fieldInfo, facets) => {\n const {\n projections,\n indices\n } = fieldInfo;\n const {\n rowFields,\n columnFields\n } = projections;\n const {\n rowIndex,\n columnIndex\n } = indices;\n const {\n suppliedLayers,\n cell: GeomCell,\n resolver,\n config,\n encoder,\n detailFields\n } = context;\n const axes = resolver.axes();\n const cacheMaps = resolver.cacheMaps();\n const matrixLayers = resolver.matrixLayers();\n const labelManager = resolver.dependencies().smartlabel;\n const horizontalAxis = resolver.horizontalAxis();\n const verticalAxis = resolver.verticalAxis();\n const datamodelTransform = resolver.datamodelTransform();\n const {\n entryCellMap,\n exitCellMap\n } = cacheMaps;\n const layerConfigArr = encoder.getLayerConfig({ columnFields, rowFields }, suppliedLayers || []);\n const axesCreators = { config, labelManager, axes, cacheMaps };\n\n fieldInfo.normalizedColumns = verticalAxis.fields;\n fieldInfo.normalizedRows = horizontalAxis.fields;\n\n const groupAxes = encoder.createAxis(axesCreators, fieldInfo);\n\n matrixLayers[rowIndex] = matrixLayers[rowIndex] ? matrixLayers[rowIndex] : [];\n matrixLayers[rowIndex][columnIndex] = layerConfigArr;\n\n // return from map if already there otherwise create and put in map\n const geomCellKey = getCellKey(rowIndex, columnIndex);\n const fields = {\n y: rowFields,\n x: columnFields\n };\n const allFacets = [\n [...facets.rowFacets[0], ...facets.colFacets[0]],\n [...facets.rowFacets[1], ...facets.colFacets[1]]\n ];\n const geomCell = !exitCellMap.has(geomCellKey) ? new GeomCell() : exitCellMap.get(geomCellKey);\n\n geomCell.data(datamodel)\n .axes(groupAxes)\n .fields(fields)\n .transform(datamodelTransform)\n .detailFields(detailFields)\n .facetByFields(allFacets);\n entryCellMap.set(geomCellKey, geomCell);\n exitCellMap.delete(geomCellKey);\n\n updateCells(resolver, facets, geomCell);\n\n return entryCellMap.get(geomCellKey);\n};\n\n/**\n * Creates axis cells based on the set of axes\n *\n * @param {Selection} selection Contains a selection of the axis units\n * @param {Array} axes Actual axis units\n * @param {number} axisIndex 0-> primary axis, 1-> secondary axis(when dual axis is made)\n * @param {Object} cells Contains a collection of the cells\n * @return {Object} return either set of axis/blank cells depending on the config\n */\n\nconst createAxisCells = (selection, axes, axisIndex, cells) =>\n createSelection(selection, axis => axis, axes, (item, i) => i + item.reduce((e, n) => {\n const id = n.id + axisIndex;\n return e + id;\n }, '')).map((axis) => {\n if (axis && axis[axisIndex]) {\n const axisInst = axis[axisIndex];\n const { orientation, show } = axisInst.config();\n\n return new cells.AxisCell().source(axisInst).config({\n isOffset: orientation === AxisOrientation.LEFT || orientation === AxisOrientation.TOP,\n show\n });\n }\n return new cells.BlankCell().config({ show: false });\n });\n\n/**\n *\n *\n * @param {*} context\n * @param {*} selectionObj\n * @param {*} cells\n * @retur\n */\nconst axisPlaceholderGn = (context, selObj, cells) => {\n const {\n matrices\n } = context;\n const {\n axesMatrix\n } = matrices;\n\n return (type, axisFrom) => {\n const axes = axesMatrix[`${type}`];\n\n if (axes && axes.length) {\n if (type === X || type === Y) {\n const fieldNames = type === Y ? ROWS : COLUMNS;\n\n [PRIMARY, SECONDARY].forEach((fieldType, index) => {\n const selObjProp = `${fieldNames}${fieldType}`;\n let axisIndex = index;\n let axesForDraw = axes;\n if (axisFrom === RIGHT || axisFrom === BOTTOM) {\n axisIndex = 1 - axisIndex;\n }\n if (!getObjProp(axes, 0, axisIndex)) {\n axesForDraw = [];\n }\n selObj[selObjProp] = createAxisCells(selObj[selObjProp], axesForDraw, axisIndex, cells);\n });\n } else {\n selObj.rowsPrimary = createAxisCells(selObj.rowPrime, axes.map(() => []), 0, cells);\n selObj.columnsPrimary = createAxisCells(selObj.colPrime, axes[0], 0, cells);\n }\n }\n return selObj;\n };\n};\n\n/**\n * Creates header cells based on the set of headers\n *\n * @param {Object} selection Contains a selection of the header units\n * @param {string} headers Contains a list of the headers\n * @param {Object} cells Contains a collection of the cells\n * @param {Object} labelManager smart label instance\n * @return {Object} return either set of header cells depending on the config\n */\nconst createTextCells = (selection, headers, cells, labelManager) => createSelection(selection,\n label => new cells.TextCell({}, { labelManager }).source(label), headers, (key, i) => key + i);\n\n/**\n *\n *\n * @param {*} context\n * @param {*} selectionObj\n * @param {*} cells\n * @param {*} labelManager\n * @return\n */\nconst headerPlaceholderGn = (context, selectionObj, cells, labelManager) => {\n const {\n axis,\n keys,\n type,\n facetConfig\n } = context;\n const counter = axis.length / keys.length;\n const selectionKeys = keys.length ? axis.map((d, i) => keys[Math.floor(i / counter)]) : [];\n return createSelection(selectionObj[`${type}Headers`], keySet => keySet, selectionKeys, (keySet, i) =>\n `${keySet.join(',')}-${i}`).map(keySet => createTextCells(null, keySet, cells, labelManager)\n .map((cell, k, i) => cell.source(keySet[i]).config(facetConfig || {})));\n};\n\n/**\n * Creates a set of placeholders as a part of selection object\n *\n * @param {Array} normalizedOptions contains normalized rows and columns\n * @param {Array} matrices contains axis and value matrices\n * @param {aArrayny} projections contains set of row and column projections\n * @param {Object} cells Contains a collection of the cells\n * @param {Object} labelManager smart label instance\n * @return {Object} Creates a set of placeholders as a part of selections\n */\nconst generatePlaceholders = (context, cells, labelManager) => {\n let selectionObj;\n const {\n matrices,\n fields,\n facetsAndProjections,\n selection,\n facetConfig,\n encoders\n } = context;\n const {\n rows,\n columns\n } = fields;\n const {\n valuesMatrix\n } = matrices;\n const {\n rowProjections,\n colProjections\n } = facetsAndProjections;\n const {\n rowKeys,\n columnKeys\n } = valuesMatrix;\n const takeAxisFrom = encoders.simpleEncoder._axisFrom;\n const takeHeaderFrom = encoders.simpleEncoder._headerFrom;\n\n selectionObj = selection || {};\n\n ['pie', X, Y].forEach((axis) => {\n const axisFrom = axis === X ? takeAxisFrom.column : takeAxisFrom.row;\n selectionObj = axisPlaceholderGn(context, selectionObj, cells)(axis, axisFrom);\n });\n\n const {\n rowsPrimary,\n rowsSecondary,\n columnsPrimary,\n columnsSecondary\n } = selectionObj;\n\n const rowAxis = rowsPrimary && rowsPrimary.getObjects().length ? rowsPrimary.getObjects() :\n (rowsSecondary && rowsSecondary.getObjects().length ? rowsSecondary.getObjects() : []);\n const colAxis = columnsPrimary && columnsPrimary.getObjects().length ? columnsPrimary.getObjects() :\n (columnsSecondary && columnsSecondary.getObjects().length ? columnsSecondary.getObjects() : []);\n\n const headerConfig = [\n { type: LEFT, section: rows[0], axis: rowAxis, headerFrom: takeHeaderFrom.row },\n { type: RIGHT, section: rows[1], axis: rowAxis, headerFrom: takeHeaderFrom.row },\n { type: TOP, section: columns[0], axis: colAxis, headerFrom: takeHeaderFrom.column },\n { type: BOTTOM, section: columns[1], axis: colAxis, headerFrom: takeHeaderFrom.column }\n ];\n\n headerConfig.forEach((config, index) => {\n let keys;\n let length;\n const {\n type,\n section,\n axis,\n headerFrom\n } = config;\n\n if (index < 2) {\n keys = rowKeys;\n length = rowProjections.length > 0 ? rowProjections.length : 1;\n } else {\n keys = columnKeys;\n length = colProjections.length > 0 ? colProjections.length : 1;\n }\n\n if (section.length && headerFrom === type && axis && keys.length) {\n const hContext = { axis, length, type };\n let headers = [];\n if (index < 2) {\n hContext.keys = keys;\n hContext.facetConfig = facetConfig.rows;\n headers = headerPlaceholderGn(hContext, selectionObj, cells, labelManager);\n } else {\n hContext.facetConfig = facetConfig.columns;\n hContext.keys = keys[0].map((key, i) => keys.map(e => e[i]));\n headers = headerPlaceholderGn(hContext, selectionObj, cells, labelManager);\n }\n selectionObj[`${type}Headers`] = headers;\n } else {\n selectionObj[`${type}Headers`] = null;\n }\n });\n return selectionObj;\n};\n\n/**\n * Generates matrices\n *\n * @param {Object} config Configuration to generate matrices\n * @param {Array} matrices Matrices containing the set of visual units and axes units\n * @param {Object} cells Contains a collection of the cells\n * @param {Object} labelManager smart label instance\n * @return {Object} contains a collection of matrices\n */\nexport const generateMatrices = (context, matrices, cells, labelManager) => {\n const {\n unitHeight,\n unitWidth,\n facetsAndProjections,\n normalizedRows,\n normalizedColumns,\n selection,\n axisFrom,\n facetConfig,\n encoders\n } = context;\n const placeholderContext = {\n fields: {\n rows: normalizedRows,\n columns: normalizedColumns\n },\n matrices,\n facetsAndProjections,\n selection,\n axisFrom,\n facetConfig,\n encoders\n };\n // Generate placeholders for all matrices\n const selectionObj = generatePlaceholders(placeholderContext, cells, labelManager);\n const {\n columnsPrimary,\n columnsSecondary,\n rowsPrimary,\n rowsSecondary,\n leftHeaders,\n topHeaders,\n bottomHeaders,\n rightHeaders\n } = selectionObj;\n const [rowPrime, rowSec, colPrime, colSec] = [rowsPrimary, rowsSecondary, columnsPrimary, columnsSecondary]\n .map(d => (d ? d.getObjects() : []));\n const [leftFacets, rightFacets] = [leftHeaders, rightHeaders].map(e => (e ? e.getObjects()\n .map(f => f.getObjects()) : []));\n\n // Compute left matrix using left headers and the axes on the rows\n let leftMatrix = leftFacets.length ? leftFacets.map((d, i) => {\n rowPrime[i] = rowPrime[i] ? [rowPrime[i]] : [];\n return [...d, ...rowPrime[i]];\n }) : (rowPrime ? rowPrime.map(d => [d]) : []);\n\n // Compute right matrix using right headers and the axes on the rows\n const rightMatrix = rowSec.length ? rowSec.map((d, i) => [d, ...(rightFacets[i] || [])]) : (rightFacets.length ?\n rightFacets.map(d => [...d]) : []);\n\n const topMatrix = [];\n if (topHeaders) {\n const headers = topHeaders.getObjects();\n headers.forEach((e) => {\n const innerHeaders = e.getObjects();\n innerHeaders.forEach((x, i) => {\n topMatrix[i] = topMatrix[i] || [];\n topMatrix[i].push(x);\n });\n });\n }\n // Compute top matrix using the top headers and axes on the columns\n if (colPrime.length) {\n topMatrix.push(colPrime);\n }\n\n // Bottom and right matrices are prepared using the user config.\n let bottomMatrix = [];\n if (colSec.length) {\n bottomMatrix.push(colSec);\n }\n const currentBottomLength = bottomMatrix.length;\n if (bottomHeaders) {\n const headers = bottomHeaders.getObjects();\n headers.forEach((e) => {\n const innerHeaders = e.getObjects();\n innerHeaders.forEach((x, i) => {\n bottomMatrix[i + currentBottomLength] = bottomMatrix[i + currentBottomLength] || [];\n bottomMatrix[i + currentBottomLength].push(x);\n });\n });\n }\n\n if (!leftMatrix.length && !rightMatrix.length) {\n const cell = new cells.BlankCell();\n cell.setAvailableSpace(unitWidth, unitHeight);\n leftMatrix = [[cell]];\n }\n\n if (!topMatrix.length && (!bottomMatrix.length || !bottomMatrix[0].length)) {\n const cell = new cells.BlankCell();\n cell.setAvailableSpace(unitWidth, unitHeight);\n bottomMatrix = [[cell]];\n }\n\n return {\n rows: [leftMatrix, rightMatrix],\n columns: [topMatrix, bottomMatrix],\n selectionObj\n };\n};\n\n/**\n * Computes matrices for a group\n *\n * @param {Object} datamodel on which the matrices are to be computed\n * @param {Object} config configuration of the matrices\n * @param {Object} layerRegistry contains the registered layers\n * @return {Object} conputed matrices\n * @memberof MatrixResolver\n */\nexport const computeMatrices = (context, config) => {\n const {\n resolver,\n datamodel,\n componentRegistry,\n encoders\n } = context;\n const {\n globalConfig,\n selection,\n transform\n } = config;\n const groupBy = globalConfig.autoGroupBy;\n const { smartlabel: labelManager } = resolver.dependencies();\n const fieldMap = datamodel.getFieldsConfig();\n const layerConfig = resolver.layerConfig();\n const registry = resolver.registry();\n const { fields: normalizedRows } = resolver.horizontalAxis();\n const { fields: normalizedColumns } = resolver.verticalAxis();\n const otherEncodings = resolver.optionalProjections(config, layerConfig);\n const facetsAndProjections = resolver.getAllFields();\n const matrixGnContext = {\n // Configuration to be passed to generate the different matrices.\n // A common config is used for both value matrices and other matrices\n normalizedColumns,\n normalizedRows,\n facetsAndProjections,\n layers: layerConfig,\n fieldMap,\n otherEncodings,\n encoders,\n facetConfig: globalConfig.facetConfig || {},\n axisFrom: globalConfig.axisFrom || {},\n selection\n };\n const cells = {\n GeomCell: resolver.getCellDef(registry.GeomCell),\n AxisCell: resolver.getCellDef(registry.AxisCell),\n BlankCell: resolver.getCellDef(registry.BlankCell),\n TextCell: resolver.getCellDef(registry.TextCell)\n };\n const isRowSizeEqual = isDistributionEqual(normalizedRows);\n const isColumnSizeEqual = isDistributionEqual(normalizedColumns);\n\n resolver.colCells({});\n resolver.rowCells({});\n resolver.datamodelTransform(transform || {});\n\n // Cell creation begins here\n resolver.resetSimpleAxes();\n\n const {\n entryCellMap\n } = resolver.cacheMaps();\n const newCacheMap = {\n exitCellMap: entryCellMap,\n entryCellMap: new Map()\n };\n\n resolver.cacheMaps(newCacheMap);\n\n const valueCellContext = {\n config: globalConfig,\n suppliedLayers: encoders.simpleEncoder.serializeLayerConfig(resolver.layerConfig()),\n resolver,\n cell: cells.GeomCell,\n encoder: encoders.simpleEncoder,\n newCacheMap,\n detailFields: config.detail\n };\n const fieldsConfig = datamodel.getFieldsConfig();\n let groupedModel = datamodel;\n if (!groupBy.disabled) {\n const fields = getFieldsFromSuppliedLayers(valueCellContext.suppliedLayers, datamodel.getFieldsConfig());\n const allFields = extractFields(facetsAndProjections, fields);\n\n const dimensions = allFields.filter(field =>\n fieldsConfig[field] && fieldsConfig[field].def.type === FieldType.DIMENSION);\n const aggregationFns = groupBy.measures;\n\n groupedModel = datamodel.groupBy(dimensions.length ? dimensions : [''], aggregationFns).project(allFields);\n }\n\n // return a callback function to create the cells from the matrix\n const cellCreator = resolver.valueCellsCreator(valueCellContext);\n // Creates value matrices from the datamodel and configs\n const valueMatrixInfo = getMatrixModel(groupedModel, facetsAndProjections, cellCreator);\n\n resolver.cacheMaps().exitCellMap.forEach((placeholder) => {\n placeholder.remove();\n });\n resolver.cacheMaps().exitCellMap.clear();\n resolver.valueMatrix(valueMatrixInfo.matrix);\n resolver.createUnits(componentRegistry, config);\n\n const { xAxes, yAxes } = mutateAxesFromMap(resolver.cacheMaps(), resolver.axes());\n\n resolver.axes({\n x: xAxes,\n y: yAxes\n });\n\n const matrices = {\n valuesMatrix: valueMatrixInfo,\n axesMatrix: resolver.axes()\n };\n // Create all matrices\n const { rows, columns, selectionObj } = generateMatrices(matrixGnContext, matrices, cells, labelManager);\n\n resolver.rowMatrix(rows);\n resolver.columnMatrix(columns);\n\n return {\n rows: resolver.rowMatrix(),\n columns: resolver.columnMatrix(),\n values: resolver.valueMatrix(),\n isColumnSizeEqual,\n isRowSizeEqual,\n selection: selectionObj,\n dataModels: {\n groupedModel,\n parentModel: datamodel\n }\n };\n};\n","import { VisualUnit } from '@chartshq/visual-unit';\nimport {\n initializeCacheMaps,\n headerCreator,\n extractUnitConfig,\n setFacetsAndProjections\n} from './group-utils';\nimport {\n ROW, COL, LEFT, RIGHT, COLOR, SIZE, SHAPE, DETAIL, CELL, X_AXES, Y_AXES, ENTRY_CELLS, EXIT_CELLS, INITIALIZED,\n AXIS, UNIT, BEFORE_UPDATE, UPDATED, VALUE_MATRIX, FACET_HEADERS\n} from '../enums/constants';\nimport { createValueCells, computeMatrices } from './cell-creator';\n/**\n * Resolves the matrices from configuration provided\n *\n * @export\n * @class MatrixResolver\n */\nexport default class MatrixResolver {\n\n /**\n * Creates an instance of MatrixResolver.\n * @param {Object} dependencies needed to run the resolver\n * @memberof MatrixResolver\n */\n constructor (dependencies) {\n this._registry = {};\n this._layerConfig = [];\n this._matrixLayers = [];\n this._dependencies = dependencies;\n this._rowMatrix = [];\n this._columnMatrix = [];\n this._valueMatrix = [];\n this._facets = {};\n this._projections = {};\n this._datamodelTransform = {};\n this._units = [];\n this._cacheMaps = {};\n this._axes = {\n x: {},\n y: {},\n color: [],\n size: [],\n shape: []\n };\n\n this.cacheMaps(initializeCacheMaps());\n }\n\n /**\n * Set: Registers placeholders, Get: return {Object} those placeholders\n *\n * @param {Object} placeholders cells that will construct the group\n * @return {Object} Either current instance or the set of placeholders\n * @memberof MatrixResolver\n */\n registry (...placeholders) {\n if (placeholders.length) {\n Object.entries(placeholders[0]).forEach((val) => {\n this._registry[val[0]] = val[1];\n });\n return this;\n }\n return this._registry;\n }\n\n /**\n * Used to set the layer config from outside or get current layer info\n *\n * @param {Object} type configuration of layer provided externally\n * @return {Object} either the layer or current instance\n * @memberof MatrixResolver\n */\n dependencies (...dep) {\n if (dep.length) {\n this._dependencies = dep[0];\n return this;\n }\n return this._dependencies;\n }\n\n /**\n * Used to set the layer config from outside or get current layer info\n *\n * @param {Object} type configuration of layer provided externally\n * @return {Object} either the layer or current instance\n * @memberof MatrixResolver\n */\n units (...unitArr) {\n if (unitArr.length) {\n this._units = unitArr[0];\n return this;\n }\n return this._units;\n }\n\n /**\n * Used to set the layer config from outside or get current layer info\n *\n * @param {Object} layer configuration of layer provided externally\n * @return {Object} either the layer or current instance\n * @memberof MatrixResolver\n */\n layerConfig (...config) {\n if (config.length) {\n this._layerConfig = config[0];\n return this;\n }\n return this._layerConfig;\n }\n\n /**\n * Used to set the layer config from outside or get current layer info\n *\n * @param {Object} type configuration of layer provided externally\n * @return {Object} either the layer or current instance\n * @memberof MatrixResolver\n */\n matrixLayers (...layers) {\n if (layers.length) {\n this._matrixLayers = layers[0];\n return this;\n }\n return this._matrixLayers;\n }\n\n /**\n * Used to set the layer config from outside or get current layer info\n *\n * @param {Object} type configuration of layer provided externally\n * @return {Object} either the layer or current instance\n * @memberof MatrixResolver\n */\n datamodelTransform (...transform) {\n if (transform.length) {\n this._datamodelTransform = transform[0];\n return this;\n }\n return this._datamodelTransform;\n }\n\n /**\n * Used to set the layer config from outside or get current layer info\n *\n * @param {Object} type configuration of layer provided externally\n * @return {Object} either the layer or current instance\n * @memberof MatrixResolver\n */\n cacheMaps (...maps) {\n if (maps.length) {\n [CELL, X_AXES, Y_AXES, ENTRY_CELLS, EXIT_CELLS].forEach((e) => {\n this._cacheMaps[`${e}Map`] = maps[0][`${e}Map`] || this._cacheMaps[`${e}Map`];\n });\n return this;\n }\n return this._cacheMaps;\n }\n\n /**\n * Used to set the layer config from outside or get current layer info\n *\n * @param {Object} type configuration of layer provided externally\n * @return {Object} either the layer or current instance\n * @memberof MatrixResolver\n */\n rowCells (...cells) {\n if (cells.length) {\n this._rowCells = cells[0];\n return this;\n }\n return this._rowCells;\n }\n\n /**\n * Used to set the layer config from outside or get current layer info\n *\n * @param {Object} type configuration of layer provided externally\n * @return {Object} either the layer or current instance\n * @memberof MatrixResolver\n */\n colCells (...cells) {\n if (cells.length) {\n this._colCells = cells[0];\n return this;\n }\n return this._colCells;\n }\n\n /**\n * Used to set the layer config from outside or get current layer info\n *\n * @param {Object} type configuration of layer provided externally\n * @return {Object} either the layer or current instance\n * @memberof MatrixResolver\n */\n axes (...axes) {\n if (axes.length) {\n this._axes = Object.assign({}, this._axes, axes[0]);\n return this;\n }\n return this._axes;\n }\n\n /**\n * Used to set the layer config from outside or get current layer info\n *\n * @param {Object} type configuration of layer provided externally\n * @return {Object} either the layer or current instance\n * @memberof MatrixResolver\n */\n rowMatrix (...rowMat) {\n if (rowMat.length) {\n this._rowMatrix = rowMat[0];\n return this;\n }\n return this._rowMatrix;\n }\n\n /**\n * Used to set the layer config from outside or get current layer info\n *\n * @param {Object} type configuration of layer provided externally\n * @return {Object} either the layer or current instance\n * @memberof MatrixResolver\n */\n columnMatrix (...colMat) {\n if (colMat.length) {\n this._columnMatrix = colMat[0];\n return this;\n }\n return this._columnMatrix;\n }\n\n /**\n * Used to set the layer config from outside or get current layer info\n *\n * @param {Object} type configuration of layer provided externally\n * @return {Object} either the layer or current instance\n * @memberof MatrixResolver\n */\n valueMatrix (...valMat) {\n if (valMat.length) {\n this._valueMatrix = valMat[0];\n return this;\n }\n return this._valueMatrix;\n }\n\n /**\n *\n *\n * @param {*} facets\n * @return\n * @memberof MatrixResolver\n */\n facets (...facets) {\n if (facets.length) {\n Object.entries(facets[0]).forEach((e) => {\n this._facets[e[0]] = e[1];\n });\n return this;\n }\n return this._facets;\n }\n\n /**\n *\n *\n * @param {*} projections\n * @return\n * @memberof MatrixResolver\n */\n projections (...projections) {\n if (projections.length) {\n Object.entries(projections[0]).forEach((e) => {\n this._projections[e[0]] = e[1];\n });\n return this;\n }\n return this._projections;\n }\n\n /**\n *\n *\n * @param {*} config\n * @param {*} layerConfig\n * @return\n * @memberof MatrixResolver\n */\n optionalProjections (config, layerConfig) {\n const otherEncodings = {};\n const optionalProjections = [];\n const otherEncodingTypes = [SIZE, COLOR, SHAPE];\n\n otherEncodingTypes.forEach((type) => {\n if (config[type] && config[type].field) {\n const enc = config[type];\n otherEncodings[type] = enc.field;\n optionalProjections.push(enc.field);\n }\n });\n\n if (config[DETAIL]) {\n optionalProjections.push(...config.detail);\n }\n\n if (layerConfig.length) {\n layerConfig.forEach((layer) => {\n if (layer.encoding) {\n Object.values(layer.encoding).forEach((enc) => {\n if (enc && optionalProjections.indexOf(enc.field) === -1) {\n optionalProjections.push(enc.field ? enc.field : enc);\n }\n });\n }\n });\n }\n this.projections({ optionalProjections });\n return otherEncodings;\n }\n\n /**\n * return the normalized set of rows and facets and projections\n *\n * @param {Object} rows parameters needed to set horizontal axis consisiting of rows\n * @return {Object} facets, projections and normalized rows\n * @memberof MatrixResolver\n */\n horizontalAxis (rows, encoder) {\n if (rows) {\n this._horizontalAxis = setFacetsAndProjections(this, { type: ROW, fields: rows }, encoder);\n return this;\n }\n return this._horizontalAxis;\n }\n\n /**\n * return the normalized set of columns and facets and projections\n *\n * @param {Object} columns parameters needed to set vertical axis consisiting of columns\n * @return {Object} facets, projections and normalized columns\n * @memberof MatrixResolver\n */\n verticalAxis (columns, encoder) {\n if (columns) {\n this._verticalAxis = setFacetsAndProjections(this, { type: COL, fields: columns }, encoder);\n return this;\n }\n return this._verticalAxis;\n }\n\n /**\n * Gets the class definition of a particular cell type(if the particular type has been extended, that particular\n * definition is returned)\n *\n * @param {Object} cell cell whose class definition is to be retrieved\n * @return {Object} cell definition\n * @memberof MatrixResolver\n */\n getCellDef (cell) {\n const registry = this.registry();\n\n Object.values(registry).forEach((e) => {\n if (e.prototype instanceof cell) {\n cell = e;\n }\n });\n return cell;\n }\n\n /**\n * return a visual cell creator along with its axis information to be injected to the datamodel creation\n * function\n *\n * @param {Object} GeomCell Type of cell to be created\n * @return {Object} Created cell\n * @memberof MatrixResolver\n */\n valueCellsCreator (context) {\n // reset matrix layers\n this.matrixLayers([]);\n\n return (datamodel, fieldInfo, facets) => createValueCells(context, datamodel, fieldInfo, facets);\n }\n\n /**\n * Callback to be applied on each cell of a matrix of a particular type\n *\n * @param {string} matrixType type of matrix on which callback is to be applied\n * @param {Function} callback function to be applied to each cell\n * @memberof MatrixResolver\n */\n forEach (matrixType, callback) {\n this[matrixType]().forEach((row, rIndex) => {\n row.forEach((col, cIndex) => {\n callback(rIndex, cIndex, col);\n });\n });\n }\n\n /**\n *\n *\n * @return\n * @memberof MatrixResolver\n */\n getAllFields () {\n const retObj = this.projections();\n\n Object.entries(this.facets()).forEach((e) => {\n retObj[e[0]] = e[1];\n });\n return retObj;\n }\n\n /**\n *\n *\n * @memberof MatrixResolver\n */\n resetSimpleAxes () {\n return this.axes({\n x: new Set(),\n y: new Set()\n });\n }\n\n /**\n *\n *\n * @param {*} componentRegistry\n * @param {*} config\n * @memberof MatrixResolver\n */\n createUnits (componentRegistry, config) {\n const {\n globalConfig,\n alias\n } = config;\n const {\n layerRegistry,\n sideEffectRegistry\n } = componentRegistry;\n const {\n smartlabel: smartLabel,\n lifeCycleManager\n } = this.dependencies();\n // Provide the source for the matrix\n const units = [];\n // Setting unit configuration\n const unitConfig = extractUnitConfig(globalConfig || {});\n\n this.forEach(VALUE_MATRIX, (i, j, el) => {\n let unit = el.source();\n if (!unit) {\n unit = VisualUnit.create({\n layerRegistry,\n sideEffectRegistry\n }, {\n smartLabel,\n lifeCycleManager\n });\n el.source(unit);\n units.push(unit);\n }\n unit.parentAlias(alias);\n el.config(unitConfig);\n });\n\n lifeCycleManager.notify({ client: units, action: INITIALIZED, formalName: UNIT });\n return this.units(units);\n }\n\n /**\n *\n *\n * @param {*} config\n * @memberof MatrixResolver\n */\n setDomains (config, datamodel, encoders) {\n const {\n color,\n shape,\n size,\n globalConfig\n } = config;\n const groupBy = globalConfig.autoGroupBy;\n const {\n rowFacets,\n colFacets\n } = this.getAllFields();\n const encoding = {\n color,\n shape,\n size\n };\n const facetFields = [...rowFacets.map(e => e.toString()), ...colFacets.map(e => e.toString())];\n const retContext = {\n domains: encoders.simpleEncoder.getRetinalFieldsDomain(datamodel, encoding, facetFields, groupBy),\n axes: this.axes(),\n encoding\n };\n encoders.retinalEncoder.setCommonDomain(retContext);\n return this;\n }\n\n /**\n *\n *\n * @return\n * @memberof MatrixResolver\n */\n getRetinalAxes () {\n const {\n color,\n shape,\n size\n } = this.axes();\n\n return {\n color: [...color],\n shape: [...shape],\n size: [...size]\n };\n }\n\n /**\n *\n *\n * @param {*} type\n * @return\n * @memberof MatrixResolver\n */\n getSimpleAxes (type) {\n return this.axes()[`${type}`];\n }\n\n /**\n *\n *\n * @param {*} datamodel\n * @param {*} config\n * @memberof MatrixResolver\n */\n createRetinalAxes (fieldsConfig, config, encoders) {\n const layerConfig = this.layerConfig();\n this.optionalProjections(config, layerConfig);\n const retinalAxes = encoders.retinalEncoder.createAxis({\n fieldsConfig,\n config,\n axes: this.axes()\n });\n const {\n lifeCycleManager\n } = this.dependencies();\n\n [COLOR, SHAPE, SIZE].forEach((e) => {\n this.axes()[e] = retinalAxes[e];\n });\n\n lifeCycleManager.notify({ client: this.axes(), action: INITIALIZED, formalName: AXIS });\n lifeCycleManager.notify({ client: this.units(), action: BEFORE_UPDATE, formalName: UNIT });\n\n const units = [];\n const matrixLayers = this.matrixLayers();\n\n this.forEach(VALUE_MATRIX, (i, j, el) => {\n el.axes(retinalAxes);\n el.source() && el.source().retinalFields(config);\n el.layerDef(encoders.retinalEncoder.getLayerConfig(config, matrixLayers[i][j]));\n el.updateModel();\n\n units.push(el.source());\n });\n\n lifeCycleManager.notify({ client: units, action: UPDATED, formalName: UNIT });\n return this;\n }\n\n /**\n *\n *\n * @param {*} placeholders\n * @param {*} fieldNames\n * @return\n * @memberof MatrixResolver\n */\n createHeaders (placeholders, fieldNames, config) {\n let bottomLeft = [];\n let bottomRight = [];\n const {\n rows,\n columns\n } = placeholders;\n const {\n smartlabel: labelManager,\n lifeCycleManager\n } = this.dependencies();\n const TextCell = this.getCellDef(this.registry().TextCell);\n const BlankCell = this.getCellDef(this.registry().BlankCell);\n const [leftRows, rightRows] = rows;\n const [topCols, bottomCols] = columns;\n const rowHeaders = fieldNames.rows;\n const blankCellCreator = cell => new BlankCell().config({ show: cell.config().show });\n\n // Headers and footers are created based on the rows. Thereafter, using the column information\n // they are tabularized into the current structure\n const headers = {\n left: headerCreator(leftRows, rowHeaders[0], config.showHeaders ? TextCell : BlankCell, labelManager),\n right: headerCreator(rightRows, rowHeaders[1], config.showHeaders ? TextCell : BlankCell, labelManager)\n };\n const footers = {\n left: leftRows.length > 0 ? leftRows[0].map(blankCellCreator) : [],\n right: rightRows.length > 0 ? rightRows[0].map(blankCellCreator) : []\n };\n const [topLeft, topRight] = [LEFT, RIGHT].map(type => topCols.map((col, i) => {\n if (i === topCols.length - 1) {\n return headers[type];\n }\n return footers[type];\n }));\n\n // Creating only bottom matrices if there is no information on the top\n if (topCols.length === 0) {\n [bottomLeft, bottomRight] = [LEFT, RIGHT].map(type => bottomCols.map((col, i) => {\n if (i === 0) {\n return headers[type];\n }\n return footers[type];\n }));\n } else {\n bottomLeft = bottomCols.map(() => (leftRows.length > 0 ? leftRows[0].map(blankCellCreator) : []));\n bottomRight = bottomCols.map(() => (rightRows.length > 0 ? rightRows[0].map(blankCellCreator) : []));\n }\n\n lifeCycleManager.notify({\n client: [topLeft, topRight, bottomLeft, bottomRight],\n action: INITIALIZED,\n formalName: FACET_HEADERS\n });\n\n return { topLeft, topRight, bottomLeft, bottomRight };\n }\n\n /**\n *\n *\n * @param {*} datamodel\n * @param {*} config\n * @param {*} componentRegistry\n * @param {*} encoders\n * @return\n * @memberof MatrixResolver\n */\n getMatrices (datamodel, config, componentRegistry, encoders) {\n const context = {\n datamodel,\n componentRegistry,\n encoders,\n resolver: this\n };\n\n return computeMatrices(context, config);\n }\n}\n","/**\n *\n *\n * @export\n * @class ValueMatrix\n */\nclass ValueMatrix {\n\n /**\n *Creates an instance of ValueMatrix.\n * @param {*} matrixArr\n * @memberof ValueMatrix\n */\n constructor (matrixArr) {\n const instancesById = {};\n\n this.matrix(matrixArr);\n this.filter(() => true);\n\n this.each((el, rIdx, cIdx) => {\n const cellValue = el.valueOf();\n if (cellValue && cellValue.id) {\n const id = cellValue.id();\n instancesById[id] = {\n instance: cellValue,\n rowIndex: rIdx,\n colIndex: cIdx\n };\n }\n });\n\n this.instancesById(instancesById);\n }\n\n /**\n *\n *\n * @param {*} id\n * @return\n * @memberof ValueMatrix\n */\n instancesById (...id) {\n if (id.length) {\n this._instancesById = id[0];\n return this;\n }\n return this._instancesById;\n }\n\n /**\n *\n *\n * @param {*} m\n * @return\n * @memberof ValueMatrix\n */\n matrix (...matrix) {\n if (matrix.length) {\n this._matrix = matrix[0];\n return this;\n }\n return this._matrix;\n }\n\n /**\n *\n *\n * @param {*} fn\n * @return\n * @memberof ValueMatrix\n */\n filter (...fn) {\n if (fn.length) {\n this._filterFn = fn[0];\n return this;\n }\n return this._filterFn;\n }\n\n /**\n *\n *\n * @return\n * @memberof ValueMatrix\n */\n width () {\n let rowWidth = 0;\n\n this.matrix().forEach((row) => {\n let currentRowWidth = 0;\n row.forEach((cell) => {\n currentRowWidth += cell.getLogicalSpace().width;\n });\n rowWidth = Math.max(rowWidth, currentRowWidth);\n });\n return rowWidth;\n }\n\n /**\n *\n *\n * @return\n * @memberof ValueMatrix\n */\n height () {\n let rowHeight = 0;\n\n this.matrix().forEach((row) => {\n let currentRowHeight = 0;\n row.forEach((cell) => {\n currentRowHeight = Math.max(currentRowHeight, cell.getLogicalSpace().height);\n });\n rowHeight += currentRowHeight;\n });\n return rowHeight;\n }\n\n /**\n *\n *\n * @param {*} fn\n * @return\n * @memberof ValueMatrix\n */\n each (fn) {\n const matrix = this.matrix();\n const filterFn = this.filter();\n\n matrix.forEach((row, rIndex) => {\n row.forEach((col, cIndex) => {\n if (filterFn(col)) {\n fn(col, rIndex, cIndex, matrix);\n }\n });\n });\n return this;\n }\n\n /**\n *\n *\n * @param {*} id\n * @return\n * @memberof ValueMatrix\n */\n findPlaceHolderById (id) {\n return this.instancesById()[id];\n }\n\n /**\n *\n *\n * @return\n * @memberof ValueMatrix\n */\n getMatrixArray () {\n return this.matrix();\n }\n}\n\nexport default ValueMatrix;\n","import { RetinalEncoder } from '../encoder';\nimport { DATA_UPDATE_COUNTER } from '../enums/defaults';\nimport { getEncoder, getBorders } from '../group-helper';\nimport ValueMatrix from './value-matrix';\nimport localOptions from './local-options';\n\nconst sanitizeRetinalConfig = (retinalConf) => {\n const conf = {};\n for (const key in retinalConf) {\n const confValue = retinalConf[key];\n if (typeof confValue === 'string' || !confValue) {\n conf[key] = {\n field: retinalConf[key]\n };\n } else {\n conf[key] = confValue;\n }\n }\n return conf;\n};\n\n/**\n *\n *\n * @param {*} placeholder\n * @memberof VisualGroup\n */\nconst setMatrixInstances = (context, placeholder) => {\n context._composition.matrices = {\n value: new ValueMatrix(placeholder.values),\n left: new ValueMatrix(placeholder.rows[0]),\n right: new ValueMatrix(placeholder.rows[1]),\n top: new ValueMatrix(placeholder.columns[0]),\n bottom: new ValueMatrix(placeholder.columns[1])\n };\n return context;\n};\n\n/**\n *\n *\n * @param {*} context\n * @returns\n */\nexport const setupChangeListeners = (context) => {\n context.store().registerImmediateListener([...Object.keys(localOptions), DATA_UPDATE_COUNTER], (...params) => {\n const datamodel = context.data();\n const [config, rows, columns, color, shape, size, detail, layers, transform] = params;\n\n if (datamodel && rows[1] && columns[1]) {\n // Get the resolver for the matrices\n const resolver = context.resolver();\n // Prepare configuration for matrix preparation\n let matrixConfig = {\n selection: context.selection(),\n alias: context.alias(),\n globalConfig: config[1] || {},\n rows: rows[1],\n columns: columns[1],\n detail: detail[1],\n layers: layers[1],\n transform: transform[1]\n };\n\n const retinalConfig = sanitizeRetinalConfig({\n color: color[1],\n shape: shape[1],\n size: size[1]\n });\n\n matrixConfig = Object.assign(matrixConfig, retinalConfig);\n // Create the encoders for the group\n const encoders = {};\n encoders.retinalEncoder = new RetinalEncoder();\n encoders.simpleEncoder = getEncoder(layers[1]);\n\n // Set the group type\n context.groupType(encoders.simpleEncoder.constructor.type());\n\n // Get sanitized fields as instances of the Vars Class\n const fields = encoders.simpleEncoder.fieldSanitizer(datamodel, matrixConfig);\n encoders.simpleEncoder.setAxisAndHeaders(config[1] ? config[1].axisFrom : {}, fields);\n // Setting layers for the code\n layers[1] && resolver.layerConfig(layers[1]);\n // Set the row and column axes\n resolver.horizontalAxis(fields.rows, encoders).verticalAxis(fields.columns, encoders);\n // Getting the placeholders\n const placeholderInfo = resolver.getMatrices(datamodel, matrixConfig, context.registry(), encoders);\n context._groupedDataModel = placeholderInfo.dataModels.groupedModel;\n // Set the selection object\n context.selection(placeholderInfo.selection);\n\n // Create retinal axes\n resolver.createRetinalAxes(placeholderInfo.dataModels.parentModel.getFieldsConfig(), retinalConfig,\n encoders);\n\n // Domains are evaluated for each of the axes for commonality\n resolver.setDomains(matrixConfig, placeholderInfo.dataModels, encoders);\n\n // Create matrix instances\n setMatrixInstances(context, placeholderInfo);\n\n // Prepare corner matrices\n context.cornerMatrices(resolver.createHeaders(placeholderInfo, fields, config[1]));\n\n // Set placeholder information\n context.placeholderInfo(placeholderInfo);\n\n context._composition.axes = resolver.axes();\n context.metaData({\n border: getBorders(placeholderInfo, encoders.simpleEncoder)\n });\n }\n return context;\n });\n return context;\n};\n","import { DATA_UPDATE_COUNTER } from '../enums/defaults';\n\nexport const PROPS = {\n alias: {},\n data: {\n sanitization: (context, value) => {\n if (context._data !== value) {\n const store = context.store();\n let hasDataUpdated = store.get(DATA_UPDATE_COUNTER);\n store.commit(DATA_UPDATE_COUNTER, ++hasDataUpdated);\n }\n return value;\n }\n },\n cornerMatrices: {},\n groupType: {},\n matrixInstance: {},\n metaData: {},\n placeholderInfo: {},\n resolver: {},\n registry: {\n sanitization: (context, value) => {\n if (context.resolver) {\n context.resolver().registry(value.cellRegistry);\n }\n return value;\n }\n },\n selection: {},\n store: {}\n};\n","import { transactor, generateGetterSetters } from 'muze-utils';\nimport localOptions from './local-options';\nimport { SimpleGroup } from '../simple-group';\nimport {\n MatrixResolver,\n initStore,\n findInGroup\n} from '../group-helper';\nimport { setupChangeListeners } from './change-listener';\nimport { PROPS } from './props';\nimport {\n CONFIG,\n MOUNT,\n RETINAL,\n Y\n} from '../enums/constants';\n\n/**\n * This class is used to create an instance of a visual group.\n * It extends the SimpleGroup (which is an interface). The visual group takes in a datamodel,\n * and a set of rows and columns, alongwith optional paramters (like color, size, shape).\n *\n * @class VisualGroup\n */\nclass VisualGroup extends SimpleGroup {\n\n /**\n * Creates an instance of VisualGroup. Requires dependencies and other registry options for placeholders\n * and layers that create individual units\n * @param {Object} registry Key value pair of compostions for the group\n * @param {Object} dependencies Dependencies needed to run the group\n * @memberof VisualGroup\n */\n constructor (registry, dependencies) {\n super();\n\n const {\n componentSubRegistry\n } = registry;\n\n this._dependencies = dependencies;\n // Generate getter/setter methods for all properties of the class\n // One can get each property by calling the method and can set it\n // by passing paramaters for the same. Thus, one can chain setter\n // getter methods.\n generateGetterSetters(this, PROPS);\n // Populate the store with default values\n this.store(initStore());\n\n // initialize group compositions\n this._composition = {};\n // store reference to data\n this._data = [];\n // matrix instance store each of the matrices\n this._matrixInstance = {};\n // store reference to mountpoint\n this._mount = null;\n // selection object that takes care of updating of components\n this._selection = {};\n // stores info about the placeholders generated after creation of matrices\n this._placeholderInfo = {};\n // corner matrices are the headers/footers for the application\n this._cornerMatrices = {};\n // Create instance of matrix resolver\n this.resolver(new MatrixResolver(this._dependencies));\n\n // Getting indiviual registered items\n this.registry({\n layerRegistry: componentSubRegistry.layerRegistry.get(),\n cellRegistry: componentSubRegistry.cellRegistry.get()\n });\n // Add local options to the store\n transactor(this, localOptions, this.store().model);\n // Register listeners\n setupChangeListeners(this);\n }\n\n matrixInstance (...matrices) {\n if (matrices.length) {\n return this;\n }\n return this.composition().matrices;\n }\n\n /**\n * Returns the composition of the Group\n *\n * @readonly\n * @memberof VisualGroup\n */\n composition (...params) {\n if (params.length) {\n return this;\n }\n return this._composition;\n }\n\n /**\n * Locks the model to prevent change listeners to be triggered until unlocked\n *\n * @return {Object} Instance of class VisualGroup\n * @memberof VisualGroup\n */\n lockModel () {\n this.store().model.lock();\n return this;\n }\n\n /**\n * Unlocks the model so that all change listeners can be triggered\n *\n * @return {Object} Instance of class VisualGroup\n * @memberof VisualGroup\n */\n unlockModel () {\n this.store().model.unlock();\n return this;\n }\n\n /**\n *\n *\n * @param {*} variable\n * @return\n * @memberof VisualGroup\n */\n where (variable) {\n return findInGroup(variable, this.resolver().getAllFields());\n }\n\n /**\n *\n *\n * @param {*} type\n * @return\n * @memberof VisualGroup\n */\n getAxes (type) {\n if (type === RETINAL) {\n return this.resolver().getRetinalAxes();\n }\n return this.resolver().getSimpleAxes(type);\n }\n\n /**\n *\n *\n * @return\n * @memberof VisualGroup\n */\n getCells (type) {\n return this.resolver()[`${type}Cells`]();\n }\n\n /**\n *\n *\n * @param {*} channel\n * @return\n * @memberof VisualGroup\n */\n getFieldsFromChannel (channel) {\n const {\n rowProjections,\n colProjections\n } = this.resolver().getAllFields();\n\n return channel === Y ? rowProjections : colProjections;\n }\n\n /**\n *\n *\n * @param {*} facetKey\n * @return\n * @memberof VisualGroup\n */\n getCellsByFacetKey (facetKey) {\n const resolver = this.resolver();\n const cells = resolver.rowCells()[facetKey] || resolver.colCells()[facetKey] || [];\n return cells;\n }\n\n /**\n *\n *\n * @param {*} facetKey\n * @return\n * @memberof VisualGroup\n */\n getAxesByFacetKey (axisType, facetKey) {\n const resolver = this.resolver();\n const cells = resolver.rowCells()[facetKey] || resolver.colCells()[facetKey];\n const axes = cells[0].valueOf().axes()[axisType] || [];\n\n return axes;\n }\n\n /**\n * This method is used to return a serialized representation of the instance's properties.\n *\n * @return {Object} Object with config proprties.\n * @memberof VisualGroup\n */\n serialize () {\n const store = this.store();\n\n return {\n [CONFIG]: store.get(CONFIG),\n [MOUNT]: store.get(MOUNT)\n };\n }\n\n getGroupByData () {\n return this._groupedDataModel;\n }\n}\n\nexport default VisualGroup;\n","import { PersistentBehaviour, SELECTION } from '@chartshq/muze-firebolt';\n\nexport default class SelectBehaviour extends PersistentBehaviour {\n static formalName () {\n return 'select';\n }\n\n setSelectionSet (addSet, selectionSet) {\n if (addSet === null) {\n selectionSet.reset();\n } else if (addSet.length) {\n // new add set\n const existingRemoveSet = addSet.filter(d => selectionSet._set[d] === SELECTION.SELECTION_OLD_EXIT\n || selectionSet._set[d] === SELECTION.SELECTION_NEW_EXIT);\n // existing add set\n if (existingRemoveSet.length) {\n selectionSet.updateEntry();\n selectionSet.add(existingRemoveSet);\n } else {\n selectionSet.updateExit();\n selectionSet.remove(addSet);\n }\n const { exitSet } = selectionSet.getSets();\n const mergedExitSet = [...new Set(exitSet[1]), ...new Set(exitSet[0])];\n const completeSetCount = selectionSet.getCompleteSet().length;\n if (exitSet[1].length !== completeSetCount && mergedExitSet.length === completeSetCount) {\n selectionSet.reset();\n }\n } else {\n selectionSet.remove(selectionSet.getCompleteSet());\n }\n return this;\n }\n}\n","import { BEHAVIOURS, ACTIONS } from '@chartshq/muze-firebolt';\n\nconst CLASSPREFIX = 'muze';\n\nexport const actionBehaviourMap = {\n [ACTIONS.DRAG]: {\n target: `.${CLASSPREFIX}-gradient-rect`,\n behaviours: [BEHAVIOURS.BRUSH]\n },\n [ACTIONS.HOVER]: {\n target: [`.${CLASSPREFIX}-legend-columns`],\n behaviours: [BEHAVIOURS.HIGHLIGHT]\n },\n [ACTIONS.CLICK]: {\n target: [`.${CLASSPREFIX}-legend-columns`],\n behaviours: [BEHAVIOURS.SELECT]\n }\n};\n\nexport const propagationBehaviourMap = {\n [BEHAVIOURS.SELECT]: BEHAVIOURS.FILTER,\n [BEHAVIOURS.BRUSH]: BEHAVIOURS.HIGHLIGHT\n};\n","import * as BEHAVIOURS from '../enums/behaviours';\nimport * as sideEffects from '../enums/side-effects';\n\nexport const behaviourEffectMap = {\n [BEHAVIOURS.BRUSH]: [sideEffects.SELECTIONBOX, {\n name: sideEffects.Highlighter,\n options: {\n strategy: 'fade'\n }\n }],\n [BEHAVIOURS.HIGHLIGHT]: [sideEffects.Highlighter],\n select: [{\n name: sideEffects.Highlighter,\n options: {\n strategy: 'fade'\n }\n }]\n};\n\nexport const propagationSideEffects = {\n [BEHAVIOURS.BRUSH]: [{\n name: sideEffects.Highlighter,\n options: {\n strategy: 'fade'\n }\n }],\n [BEHAVIOURS.HIGHLIGHT]: [{\n name: sideEffects.Highlighter,\n options: {\n strategy: 'fade'\n }\n }],\n [BEHAVIOURS.SELECT]: ['filter']\n};\n\n","export const BRUSH = 'brush';\nexport const HIGHLIGHT = 'highlight';\nexport const TOOLTIP = 'tooltip';\nexport const FILTER = 'filter';\nexport const SELECT = 'select';\n\n","export const SELECTIONBOX = 'selectionBox';\nexport const Highlighter = 'highlighter';\n\n","export const CLASSPREFIX = 'muze';\nexport const IDFIELD = '__id__';\nexport const CONFIG = 'config';\nexport const DATAMODEL = 'dataModel';\nexport const AXES = 'axes';\nexport const LAYERDEFS = 'layerDef';\nexport const WIDTH = 'width';\nexport const HEIGHT = 'height';\nexport const MOUNTPOINT = 'mountPoint';\nexport const GRIDLINEPARENTGROUPCLASS = 'grid-lines';\nexport const TRANSFORM = 'transform';\nexport const CONSOLIDATED = 'consolidated';\nexport const FRAGMENTED = 'fragmented';\nexport const DEFAULTCOLOR = '#F44336';\nexport const DEFAULTSIZE = 50;\nexport const DEFAULTSHAPE = 'circle';\nexport const STEP = 'step';\nexport const GRADIENT = 'gradient';\nexport const ORDINAL = 'ordinal';\nexport const SCALE_FUNCTIONS = {\n size: 'getSize',\n shape: 'getShape',\n color: 'getColor'\n};\nexport const TOP = 'top';\nexport const LEFT = 'left';\nexport const RIGHT = 'right';\nexport const BOTTOM = 'bottom';\nexport const HORIZONTAL = 'horizontal';\nexport const VERTICAL = 'vertical';\nexport const CENTER = 'center';\nexport const VALUE = 'value';\nexport const PATH = 'path';\nexport const SHAPE = 'shape';\nexport const ICON = 'icon';\nexport const RECT = 'rect';\nexport const START = 'start';\nexport const UPPER = 'upper';\nexport const LOWER = 'lower';\nexport const END = 'end';\nexport const SIZE = 'size';\nexport const DISCRETE = 'discrete';\nexport const MEASURE = 'measure';\n\n","import { assembleModelFromIdentifiers, getDataModelFromRange } from 'muze-utils';\nimport { propagationBehaviourMap } from './action-behaviour-map';\nimport { propagationSideEffects } from './behaviour-effect-map';\nimport { STEP, GRADIENT, DISCRETE, MEASURE } from '../enums/constants';\n\nexport const propagate = (firebolt, action, selectionSet, config = {}) => {\n let propagationData;\n const type = firebolt.context.constructor.type();\n const payload = config.payload;\n const data = firebolt.context.data();\n const metaData = firebolt.context.metaData();\n const fieldType = metaData.getData().schema[0].type;\n\n const propPayload = {};\n const sourceId = firebolt.context._id;\n propPayload.action = propagationBehaviourMap[action] || action;\n propPayload.sideEffects = propagationSideEffects[action];\n propPayload.sourceCanvas = firebolt.context.canvasAlias();\n const isMutableAction = firebolt._actions.behavioural[propPayload.action].constructor.mutates();\n if (payload.criteria === null) {\n propagationData = null;\n } else {\n const entrySet = selectionSet.mergedEnter;\n let values = data.filter(d => entrySet.uids.indexOf(d.id) !== -1).map(d => d.value);\n if (type === STEP || (type === DISCRETE && fieldType === MEASURE)) {\n const field = Object.keys(payload.criteria || {})[0];\n values = data.filter(d => entrySet.uids.indexOf(d.id) !== -1).map(d => d.range);\n propagationData = values.length ? metaData.select((fields) => {\n let check = false;\n for (let i = 0; i < values.length; i++) {\n check = fields[field].value >= values[i][0] && fields[field].value <= values[i][1];\n if (check === true) {\n break;\n }\n }\n return check;\n }, {\n saveChild: false\n }) : null;\n } else if (type === GRADIENT) {\n propagationData = getDataModelFromRange(metaData, payload.criteria);\n } else if (values.length) {\n propagationData = assembleModelFromIdentifiers(metaData, [payload.criteria[0], ...values.map(d => [d])]);\n } else {\n propPayload.criteria = null;\n propagationData = metaData.select(() => true, {\n saveChild: false\n });\n }\n }\n\n let propagateInterpolatedValues = false;\n\n if (propagationData) {\n const schema = propagationData.getSchema();\n propagateInterpolatedValues = schema.every(d => d.type === fieldType.MEASURE);\n }\n\n const propConfig = {\n sourceId: `legend-${sourceId}`,\n payload: propPayload,\n criteria: propPayload.criteria === null ? null : propagationData,\n isMutableAction,\n propagateInterpolatedValues,\n action: propPayload.action\n };\n\n metaData.propagate(propagationData, propConfig, true);\n};\n","import { Firebolt } from '@chartshq/muze-firebolt';\nimport { propagate } from './helper';\nimport { STEP, GRADIENT } from '../enums/constants';\n\n/**\n * This class manages the interactions of legend.\n * @export\n * @class LegendFireBolt\n * @extends {Firebolt}\n */\nexport class LegendFireBolt extends Firebolt {\n constructor (...params) {\n super(...params);\n this.initializeSideEffects();\n }\n\n getPropagationSelectionSet (selectionSet) {\n return selectionSet[0];\n }\n\n propagate (behaviourName, payload, selectionSet) {\n propagate(this, behaviourName, selectionSet, {\n payload\n });\n }\n\n getAddSetFromCriteria (criteria) {\n let values;\n let uniqueIds;\n const type = this.context.constructor.type();\n\n if (criteria === null) {\n uniqueIds = null;\n } else if (type === STEP) {\n values = Object.values(criteria);\n uniqueIds = this.context.data().filter(d => values.indexOf(d.range) !== -1).map(d => d.id);\n } else if (type === GRADIENT) {\n uniqueIds = [];\n } else {\n values = criteria[1];\n if (values) {\n uniqueIds = this.context.data().filter(d => values.indexOf(d.value) !== -1).map(d => d.id);\n } else {\n values = Object.values(criteria);\n uniqueIds = this.context.data().filter(d => values.indexOf(d.range) !== -1).map(d => d.id);\n }\n }\n return {\n uids: uniqueIds,\n model: null\n };\n }\n\n getFullData () {\n return null;\n }\n}\n","import {\n getEvent,\n getD3Drag\n } from 'muze-utils';\n\n/**\n * Adds dragging action to the target element.\n * @param {firebolt} firebolt firebolt\n * @param {SVGElement} targetEl Element on which brushing action is needed.\n * @param {Array} behaviours Array of behaviours\n */\n/* istanbul ignore next */ const drag = firebolt => (targetEl, behaviours) => {\n let startPos = {};\n let endPos = {};\n let payload;\n const d3Drag = getD3Drag();\n const context = firebolt.context;\n const boundingBox = context.measurement().gradientDimensions;\n const axisType = context.config().align === 'horizontal' ? 'x' : 'y';\n const axisScale = context.axis().source().scale();\n const rangeShifter = axisScale.range()[axisType === 'x' ? 0 : 1];\n\n targetEl.call(d3Drag().on('start', () => {\n const event = getEvent();\n startPos = {\n x: event.x,\n y: event.y\n };\n }).on('drag', () => {\n const event = getEvent();\n\n endPos = {\n x: event.x,\n y: event.y\n };\n endPos.x = Math.max(0, Math.min(endPos.x, boundingBox.width));\n endPos.y = Math.max(0, Math.min(endPos.y, boundingBox.height));\n\n payload = {\n criteria: {\n [context.fieldName()]: [axisScale.invert(startPos[axisType] + rangeShifter * 2),\n axisScale.invert(endPos[axisType] + rangeShifter * 2)].sort((a, b) => a - b)\n }\n };\n behaviours.forEach(behaviour => firebolt.dispatchBehaviour(behaviour, payload));\n }).on('end', () => {\n const event = getEvent();\n\n endPos = {\n x: event.x,\n y: event.y\n };\n endPos.x = Math.max(0, Math.min(endPos.x, boundingBox.width));\n endPos.y = Math.max(0, Math.min(endPos.y, boundingBox.height));\n if (startPos[axisType] === endPos[axisType]) {\n payload = {\n criteria: {}\n };\n } else {\n payload = {\n criteria: {\n [context.fieldName()]: [axisScale.invert(startPos[axisType] + rangeShifter * 2),\n axisScale.invert(endPos[axisType] + rangeShifter * 2)].sort((a, b) => a - b)\n }\n };\n }\n behaviours.forEach(behaviour => firebolt.dispatchBehaviour(behaviour, payload));\n }));\n};\n\nexport default drag;\n","/**\n * Adds mouse interactions to target element.\n * @param {Firebolt} Firebolt instance of firebolt.\n * @param {SVGElement} targetEl Element on which the event listeners will be attached.\n * @param {Array} behaviours Array of behaviours\n */\n/* istanbul ignore next */ const hover = firebolt => (targetEl, behaviours) => {\n const dispatchBehaviour = function (args) {\n const payload = {\n criteria: firebolt.context.getCriteriaFromData(args)\n };\n behaviours.forEach(behaviour => firebolt.dispatchBehaviour(behaviour, payload));\n event.stopPropagation();\n };\n\n targetEl.on('mouseover', dispatchBehaviour)\n .on('mousemove', dispatchBehaviour)\n .on('mouseout', () => {\n behaviours.forEach(behaviour => firebolt.dispatchBehaviour(behaviour, {\n criteria: null\n }));\n event.stopPropagation();\n });\n};\n\nexport default hover;\n","/**\n * Adds mouse interactions to target element.\n * @param {VisualUnit} instance instance of visual unit.\n * @param {SVGElement} targetEl Element on which the event listeners will be attached.\n * @param {Array} behaviours Array of behaviours\n */\nconst click = firebolt => (targetEl, behaviours) => {\n const dispatchBehaviour = function (args) {\n const payload = {\n criteria: firebolt.context.getCriteriaFromData(args)\n };\n behaviours.forEach(behaviour => firebolt.dispatchBehaviour(behaviour, payload));\n };\n\n targetEl.on('click', dispatchBehaviour);\n};\n\nexport default click;\n","import drag from './drag';\nimport hover from './hover';\nimport click from './click';\nimport * as ACTIONNAMES from '../../enums/actions';\n\nexport const physicalActions = {\n [ACTIONNAMES.DRAG]: drag,\n [ACTIONNAMES.HOVER]: hover,\n [ACTIONNAMES.CLICK]: click\n};\n\n","export const DRAG = 'drag';\nexport const HOVER = 'hover';\nexport const SELECTIONDRAG = 'selectiondrag';\nexport const CLICK = 'click';\n","import {\n getMousePos,\n getEvent,\n getD3Drag\n } from 'muze-utils';\nimport { HEIGHT, WIDTH, HORIZONTAL } from '../../enums/constants';\n\nconst getSelectionCriteria = (subject, axis, measures) => {\n let criteria = [];\n const {\n axisScale,\n axisType\n } = axis;\n const {\n startPos,\n endPos,\n selectionBoxMeasure,\n drawingInfMeasure,\n offset\n } = measures;\n const subjectStartPoint = subject[axisType];\n\n if (startPos[axisType] === endPos[axisType]) {\n criteria = [];\n } else if (subjectStartPoint + selectionBoxMeasure >= drawingInfMeasure + offset) {\n criteria = [axisScale.invert(drawingInfMeasure + offset - selectionBoxMeasure),\n axisScale.invert(drawingInfMeasure + offset)];\n } else if (subjectStartPoint - offset < offset) {\n criteria = [axisScale.invert(offset * 2), axisScale.invert(selectionBoxMeasure + offset * 2)];\n } else {\n criteria = [axisScale.invert(subjectStartPoint), axisScale.invert(subjectStartPoint + selectionBoxMeasure)];\n }\n axisType === 'x' ? criteria : criteria.reverse();\n return criteria;\n};\n\nexport const selectionBoxDrag = firebolt => (targetEl, behaviours) => {\n let startPos = {};\n let payload;\n const endPos = {};\n const d3Drag = getD3Drag();\n const context = firebolt.context;\n const axisScale = context.axis().source().scale();\n const axisType = context.config().align === HORIZONTAL ? 'x' : 'y';\n const drawingInfMeasure = context.measurement().gradientDimensions[axisType === 'x' ?\n WIDTH : HEIGHT];\n const offset = axisScale.range()[axisType === 'x' ? 0 : 1];\n const measures = {\n drawingInfMeasure,\n offset\n };\n let subject = {};\n\n targetEl.call(d3Drag().on('start', function () {\n const event = getEvent();\n startPos = getMousePos(this, event.sourceEvent);\n subject = event.subject;\n }).on('drag', () => {\n const event = getEvent();\n const selectionBoxMeasure = subject[axisType === 'x' ? WIDTH : HEIGHT];\n\n subject.x += event.dx;\n subject.y += event.dy;\n\n measures.selectionBoxMeasure = selectionBoxMeasure;\n measures.startPos = startPos;\n measures.endPos = endPos;\n const criteria = getSelectionCriteria(subject, { axisScale, axisType }, measures);\n\n payload = {\n criteria: {\n [context.fieldName()]: criteria\n },\n fadeOut: true\n };\n firebolt.dispatchBehaviour(behaviours[0], payload);\n }).on('end', () => {\n const event = getEvent();\n const selectionBoxMeasure = subject[axisType === 'x' ? WIDTH : HEIGHT];\n measures.selectionBoxMeasure = selectionBoxMeasure;\n measures.startPos = startPos;\n measures.endPos = endPos;\n const criteria = getSelectionCriteria(event, { axisScale, axisType }, measures);\n payload = {\n criteria: {\n [context.fieldName()]: criteria\n },\n fadeOut: true,\n config: {\n transition: {\n duration: 200\n }\n }\n };\n firebolt.dispatchBehaviour(behaviours[0], payload);\n }));\n};\n\n","import { makeElement } from 'muze-utils';\nimport { SpawnableSideEffect } from '@chartshq/muze-firebolt';\nimport { CLASSPREFIX, HEIGHT, WIDTH, HORIZONTAL, RECT } from '../../../enums/constants';\nimport { SELECTIONBOX } from '../../../enums/side-effects';\nimport { selectionBoxDrag } from '../../physical/selection-box-drag';\nimport './styles.scss';\n\n/**\n * This class is used to create a selection box which is used by visual unit for brushing and\n * selection in the canvas.\n * @class SelectionBox\n */\n/* istanbul ignore next */ class SelectionBox extends SpawnableSideEffect {\n static formalName () {\n return SELECTIONBOX;\n }\n\n /**\n * It returns the default configuration needed by selectionbox.\n * @return {Object} Default configuration of the selection box.\n */\n static defaultConfig () {\n return {\n className: 'legend-selection-box',\n classPrefix: CLASSPREFIX\n };\n }\n\n /**\n * Draws the selectionbox with the specified dimensions.\n */\n /* istanbul ignore next */ apply (selectionSet, payload) {\n let x;\n let y;\n let width;\n let height;\n const firebolt = this.firebolt;\n const context = firebolt.context;\n const config = this.config();\n const axis = context.axis().source();\n const className = `${config.classPrefix}-${config.className}`;\n\n const domain = payload.criteria[firebolt.context.fieldName()];\n const axisScale = axis.scale();\n const range = domain ? [axis.getScaleValue(domain[0]), axis.getScaleValue(domain[1])] : [];\n\n const axisType = context.config().align === HORIZONTAL ? 'x' : 'y';\n\n const gradientDimension = firebolt.context.measurement().gradientDimensions[axisType === 'x' ?\n HEIGHT : WIDTH];\n\n const rangeShifter = axisScale.range()[axisType === 'x' ? 0 : 1];\n const legendGradContainer = context.getDrawingContext().svgContainer;\n const legendSelGroup = makeElement(legendGradContainer, 'g', [1], `${config.classPrefix}-selection-box-group`);\n\n if (firebolt.context.config().align === HORIZONTAL) {\n x = range[0] - rangeShifter || 0;\n y = 0;\n width = range[1] - range[0] || 0;\n height = gradientDimension;\n } else {\n x = 0;\n y = range[1] - rangeShifter || 0;\n height = range[0] - range[1] || 0;\n width = gradientDimension;\n }\n const enterFn = function (el) {\n selectionBoxDrag(firebolt)(el, ['brush']);\n };\n const selBox = makeElement(legendSelGroup, RECT, [{ domain, x, y, width, height }], className,\n { enter: enterFn });\n selBox.attr('y', y)\n .attr('x', x)\n .attr(WIDTH, width)\n .attr(HEIGHT, height);\n }\n}\n\nexport default SelectionBox;\n\n","import { selectElement } from 'muze-utils';\n\nexport const strategies = (firebolt) => {\n const context = firebolt.context;\n const classed = (set, className, change) => {\n const classPrefix = context.config().classPrefix;\n selectElement(context.mount())\n .selectAll(`.${classPrefix}-legend-columns`)\n .filter(d => set.uids.indexOf(d.id) !== -1)\n .selectAll('div')\n .classed(className, change);\n };\n\n return {\n fade: (set, config = {}) => {\n const classPrefix = context.config().classPrefix;\n if (!set.mergedEnter.length && !set.mergedExit.length) {\n classed(set.completeSet, config.className || `${classPrefix}-legend-fadeout`, false);\n } else {\n classed(set.mergedExit, config.className || `${classPrefix}-legend-brighten`, false);\n classed(set.mergedExit, config.className || `${classPrefix}-legend-fadeout`, true);\n classed(set.mergedEnter, config.className || `${classPrefix}-legend-fadeout`, false);\n }\n },\n brighten: (set, config = {}) => {\n const classPrefix = context.config().classPrefix;\n if (!set.mergedEnter.length && !set.mergedExit.length) {\n classed(set.completeSet, config.className || `${classPrefix}-legend-brighten`, false);\n } else {\n classed(set.mergedEnter, config.className || `${classPrefix}-legend-brighten`, true);\n classed(set.mergedExit, config.className || `${classPrefix}-legend-brighten`, false);\n }\n }\n };\n};\n","import { GenericSideEffect } from '@chartshq/muze-firebolt';\nimport { strategies } from './strategies';\nimport { Highlighter } from '../../../enums/side-effects';\n\nexport default class LegendHighlighter extends GenericSideEffect {\n constructor (...params) {\n super(...params);\n this._strategies = strategies(this.firebolt);\n this._strategy = 'brighten';\n }\n\n static formalName () {\n return Highlighter;\n }\n\n apply (selectionSet, payload, options = {}) {\n const strategy = this._strategies[options.strategy || this._strategy];\n\n strategy(selectionSet, this);\n }\n}\n","import { mergeRecursive } from 'muze-utils';\n\nexport const PROPS = {\n config: {\n sanitization: (context, value) => mergeRecursive(context._config || {}, value)\n },\n data: {},\n fieldName: {},\n legendContainer: {},\n measurement: {\n sanitization: (context, value) => {\n const measurement = mergeRecursive(context._measurement, value);\n ['padding', 'border', 'margin'].forEach((space) => {\n measurement[space] = Math.min(measurement[space] > 0 ? measurement[space] : 0,\n measurement.maxWidth * 0.1, measurement.maxHeight * 0.1);\n });\n return measurement;\n }\n },\n logicalSpace: {},\n metaData: {},\n range: {\n sanitization: (context, value) => {\n context.scale().range(value);\n context.resetLogicalSpace();\n context.store().commit('range', value);\n return value;\n }\n },\n scale: {},\n smartTicks: {},\n store: {},\n title: {\n sanitization: (context, value) => mergeRecursive(context._title || {}, value)\n }\n};\n","import { getSymbol } from 'muze-utils';\nimport {\n CENTER,\n LEFT,\n RIGHT\n} from '../enums/constants';\n\nexport const ALIGN = {\n HORIZONTAL: 'horizontal',\n VERTICAL: 'vertical'\n};\n\nexport const DEFAULT_MEASUREMENT = {\n height: 30,\n width: 30,\n maxWidth: Infinity,\n maxHeight: Infinity,\n padding: 2,\n margin: 2,\n border: 1\n};\n\nexport const LEGEND_TITLE = {\n text: '',\n orientation: (pos) => {\n if (pos === LEFT || pos === RIGHT) {\n return LEFT;\n } return CENTER;\n }\n};\n\nexport const DEFAULT_CONFIG = {\n classPrefix: 'muze',\n borderStyle: 'solid',\n borderColor: 'rgba(0,0,0,0)',\n formatter: {\n bounds: {\n lower: 'less than',\n upper: 'more than'\n }\n },\n item: {\n text: {\n orientation: 'right',\n width: 10,\n formatter: val => val\n },\n icon: {\n className: 'legend-icon',\n height: 20,\n width: 20,\n color: 'rgba(0,0,0,.5)',\n type: 'square'\n }\n }\n};\n\n/**\n * Creates a map of pre defined icons\n *\n * @param {string} icon Accepts a icon name like 'square', 'cross', 'diamond' etc\n * @return {Object} icon object which can be used to draw the icons\n */\nexport const ICON_MAP = (icon) => {\n if (icon && typeof (icon) === 'string') {\n return getSymbol(icon);\n } return icon;\n};\n","import { makeElement, numberInterpolator } from 'muze-utils';\n\nimport {\n SCALE_FUNCTIONS,\n WIDTH,\n HEIGHT,\n LEFT,\n RIGHT,\n TOP,\n BOTTOM\n} from '../enums/constants';\n\n/**\n *\n *\n * @param {*} scale\n * @returns\n */\nexport const getScaleInfo = (scale) => {\n const scaleType = scale.constructor.type();\n const domain = scale.uniqueValues();\n const steps = scale.config().stops || 1;\n const scaleFn = SCALE_FUNCTIONS[scaleType];\n\n return { scaleType, domain, steps, scaleFn };\n};\n\n/**\n *\n *\n * @param {*} domain\n * @param {*} steps\n * @returns\n */\nexport const getInterpolatedData = (domain, steps) => {\n const domainForLegend = [];\n const interpolatedFn = numberInterpolator()(domain[0], domain[1]);\n\n for (let i = 0; i <= steps; i++) {\n domainForLegend[i] = interpolatedFn(i / steps);\n }\n return domainForLegend;\n};\n\n/**\n *\n *\n * @param {*} container\n * @param {*} text\n * @param {*} measurement\n * @param {*} classPrefix\n */\nexport const titleCreator = (container, title, measurement, config) => {\n const titleContainer = makeElement(container, 'table', [1], `${config.classPrefix}-legend-title`)\n .style(WIDTH, `${measurement.width}px`)\n .style(HEIGHT, `${measurement.height}px`)\n .style('border-bottom', `${measurement.border}px ${config.borderStyle} ${config.borderColor}`)\n .style('text-align', title.orientation instanceof Function ?\n title.orientation(config.position) : title.orientation);\n return makeElement(titleContainer, 'td', [1], `${config.classPrefix}-legend-title-text`)\n .style(WIDTH, `${measurement.width}px`)\n .style(HEIGHT, '100%')\n .style('padding', `${measurement.padding}px`)\n .text(title.text)\n .node();\n};\n\n /**\n *\n *\n * @param {*} data\n * @param {*} prop\n * @param {*} labelManager\n * @return\n */\nexport const getMaxMeasures = (data, prop, labelManager) => {\n let maxHeight = -Infinity;\n let maxWidth = -Infinity;\n\n data.forEach((item) => {\n const value = prop ? item[prop] : item;\n const space = labelManager.getOriSize(value);\n maxHeight = Math.max(space.height + 2, maxHeight);\n maxWidth = Math.max(space.width + 2, maxWidth);\n });\n\n return { height: maxHeight, width: maxWidth };\n};\n\n/**\n *\n *\n * @param {*} data\n * @param {*} prop\n * @param {*} labelManager\n * @return\n */\nexport const getItemMeasures = (data, prop, labelManager, formatter) => {\n const space = [];\n\n data.forEach((item, index) => {\n const value = prop ? item[prop] : item;\n const { height, width } = labelManager.getOriSize(formatter(value));\n space[index] = { height: height + 1, width: width + 1 };\n });\n return space;\n};\n\n/**\n *\n *\n * @param {*} textOrientation\n * @param {*} effPadding\n * @param {*} titleSpace\n * @return\n * @memberof Legend\n */\nexport const computeItemSpaces = (config, measures, data) => {\n let totalHeight = 0;\n let totalWidth = 0;\n let maxItemSpaces = {\n width: 0, height: 0\n };\n const {\n effPadding,\n titleWidth,\n labelSpaces,\n titleHeight,\n maxWidth\n } = measures;\n const {\n item,\n align\n } = config;\n const {\n icon,\n text\n } = item;\n const textOrientation = text.orientation;\n const itemSpaces = [];\n const iconSpaces = [];\n let maxIconWidth = 0;\n labelSpaces.forEach((labelSpace, i) => {\n const itemSpace = { width: 0, height: 0 };\n const iconSpace = { width: 0, height: 0 };\n const datum = data[i] || {};\n // Compute each legend item height/width\n if (textOrientation === LEFT || textOrientation === RIGHT) {\n // Get label, icon and item widths\n labelSpace.width += effPadding;\n iconSpace.width = (datum.size ? 2 * Math.sqrt(datum.size / Math.PI) : icon.width) + effPadding;\n maxIconWidth = Math.max(iconSpace.width, maxIconWidth);\n itemSpace.width = labelSpace.width + maxIconWidth;\n\n // Get label, icon and item heights\n labelSpace.height = Math.max(labelSpace.height, icon.height) + effPadding;\n iconSpace.height = labelSpace.height;\n itemSpace.height = labelSpace.height;\n } else {\n // Get label, icon and item widths\n labelSpace.width = Math.max(labelSpace.width, datum.size ? 2 * Math.sqrt(datum.size / Math.PI)\n : icon.width) + effPadding;\n iconSpace.width = labelSpace.width;\n itemSpace.width = labelSpace.width;\n maxIconWidth = Math.max(iconSpace.width, maxIconWidth);\n\n // Get label, icon and item heights\n labelSpace.height += effPadding;\n iconSpace.height = icon.height + effPadding;\n itemSpace.height = labelSpace.height + iconSpace.height;\n }\n // Compute height and width of legend for each alignment\n if (align === 'horizontal') {\n totalHeight = Math.max(totalHeight, itemSpace.height);\n } else {\n totalHeight += itemSpace.height;\n totalWidth = Math.max(totalWidth, itemSpace.width, titleWidth) + effPadding;\n }\n maxItemSpaces = {\n width: Math.max(itemSpace.width, maxItemSpaces.width),\n height: Math.max(itemSpace.height, maxItemSpaces.height)\n };\n itemSpaces.push(itemSpace);\n iconSpaces.push(iconSpace);\n });\n itemSpaces.forEach((itemSpace, i) => {\n if (align === 'horizontal') {\n itemSpace.height = totalHeight;\n iconSpaces[i].width = maxIconWidth;\n if (textOrientation === LEFT || textOrientation === RIGHT) {\n labelSpaces[i].height = totalHeight;\n iconSpaces[i].height = totalHeight;\n itemSpaces[i].width = labelSpaces[i].width + maxIconWidth;\n } else {\n labelSpaces[i].width = maxIconWidth;\n itemSpaces[i].width = maxIconWidth;\n labelSpaces[i].width = maxIconWidth;\n }\n totalWidth = Math.max(totalWidth + itemSpaces[i].width);\n } else {\n itemSpace.width = Math.max(totalWidth, maxWidth);\n if (textOrientation === TOP || textOrientation === BOTTOM) {\n labelSpaces[i].width = totalWidth;\n iconSpaces[i].width = totalWidth;\n maxIconWidth = totalWidth;\n } else {\n iconSpaces[i].width = maxIconWidth;\n itemSpaces[i].width = labelSpaces[i].width + maxIconWidth;\n labelSpaces[i].width = maxItemSpaces.width - maxIconWidth;\n totalWidth = Math.max(totalWidth, itemSpace.width) + effPadding;\n }\n }\n });\n totalWidth = Math.max(totalWidth, titleWidth);\n totalHeight += titleHeight + effPadding;\n\n return { totalHeight, totalWidth, itemSpaces, iconSpaces, maxItemSpaces, maxIconWidth };\n};\n\n/**\n *\n *\n * @param {*} type\n * @param {*} scaleInfo\n * @param {*} domainInfo\n * @returns\n */\nexport const getDomainBounds = (type, scaleInfo, domainInfo) => {\n const {\n scaleFn,\n scaleType,\n scale\n } = scaleInfo;\n const {\n domain,\n domainBounds,\n domainLeg,\n steps\n } = domainInfo;\n const ele = domain[type === 'lower' ? 0 : domain.length - 1];\n const step = steps[type === 'lower' ? 0 : steps.length - 1];\n\n return {\n [scaleType]: scaleType === 'size' ? scale[scaleFn](ele) * scale.getScaleFactor() : scale[scaleFn](ele),\n value: domainBounds[type],\n id: type === 'lower' ? 0 : domainLeg.length + 2,\n range: [ele, step]\n };\n};\n","import {\n makeElement,\n selectElement,\n getUniqueId,\n getSmartComputedStyle,\n generateGetterSetters,\n mergeRecursive\n} from 'muze-utils';\nimport { behaviouralActions } from '@chartshq/muze-firebolt';\nimport * as legendBehaviours from '../firebolt/behavioural';\n\nimport { LegendFireBolt } from '../firebolt/legend-firebolt';\nimport { actionBehaviourMap } from '../firebolt/action-behaviour-map';\nimport { physicalActions } from '../firebolt/physical';\nimport * as sideEffects from '../firebolt/side-effects';\nimport { behaviourEffectMap } from '../firebolt/behaviour-effect-map';\nimport { VALUE, PATH } from '../enums/constants';\nimport { PROPS } from './props';\nimport { DEFAULT_MEASUREMENT, DEFAULT_CONFIG, LEGEND_TITLE } from './defaults';\nimport { getItemMeasures, titleCreator, computeItemSpaces } from './legend-helper';\n\n/**\n * Creates a Legend from the axes of a canvas\n *\n * @param {Object} dependencies : legend data\n * @class SimpleLegend\n */\nexport default class SimpleLegend {\n\n /**\n * Creates an instance of Legend.\n * @param {Object} dependencies Set of dependencies required by the legend\n * @memberof Legend\n */\n constructor (dependencies) {\n this._data = [];\n this._metaData = [];\n this._mount = null;\n this._fieldName = null;\n this._title = Object.assign({}, LEGEND_TITLE);\n this._metaData = null;\n this._labelManager = dependencies.labelManager;\n this._cells = dependencies.cells;\n this._id = getUniqueId();\n this._measurement = Object.assign({}, this.constructor.defaultMeasurement());\n this._config = mergeRecursive({}, this.constructor.defaultConfig());\n\n generateGetterSetters(this, PROPS);\n this._computedStyle = getSmartComputedStyle(selectElement('body'),\n `${this.config().classPrefix}-legend-item-info`);\n\n this._firebolt = new LegendFireBolt(this, {\n behavioural: Object.assign({}, behaviouralActions, legendBehaviours),\n physical: physicalActions,\n physicalBehaviouralMap: actionBehaviourMap\n }, sideEffects, behaviourEffectMap);\n }\n\n id () {\n return this._id;\n }\n /**\n * Initializes an instance of the class\n *\n * @static\n * @param {Object} dependencies Set of dependencies required by the legend\n * @return {Instance} returns a new instance of Legend\n * @memberof Legend\n */\n static create (dependencies) {\n return new SimpleLegend(dependencies);\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof SimpleLegend\n */\n static defaultConfig () {\n return DEFAULT_CONFIG;\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof SimpleLegend\n */\n static defaultMeasurement () {\n return DEFAULT_MEASUREMENT;\n }\n\n /**\n *\n *\n * @readonly\n * @memberof SimpleLegend\n */\n firebolt (...params) {\n if (params.length) {\n return this;\n }\n return this._firebolt;\n }\n\n /**\n *\n *\n * @return\n * @memberof Legend\n */\n elemType () {\n return PATH;\n }\n\n canvasAlias (...alias) {\n if (alias.length) {\n this._canvasAlias = alias[0];\n return this;\n }\n return this._canvasAlias;\n }\n\n /**\n *\n *\n * @return\n * @memberof Legend\n */\n mount (...params) {\n if (params.length) {\n this._mount = params[0];\n this.render();\n return this;\n }\n return this._mount;\n }\n\n /**\n *\n *\n * @param {*} effPadding\n * @param {*} align\n * @return\n * @memberof Legend\n */\n getLabelSpaces () {\n const {\n item,\n classPrefix\n } = this.config();\n this._labelManager.setStyle(getSmartComputedStyle(selectElement('body'),\n `${classPrefix}-legend-item-info`));\n return getItemMeasures(this.data(), VALUE, this._labelManager, item.text.formatter);\n }\n\n /**\n * Sets the height and width of a legend based on provided max\n * height and width and based on its contents\n *\n * @return {Instance} Current instance\n * @memberof Legend\n */\n setLegendMeasures () {\n const {\n width,\n height,\n maxWidth,\n maxHeight,\n padding,\n margin,\n border\n } = this.measurement();\n const {\n align\n } = this.config();\n\n // Effective padding, margin and padding\n const effPadding = padding * 2;\n const effBorder = border * 2;\n const effMargin = margin * 2;\n\n this.data(this.dataFromScale(this.scale()));\n // Get space occupied by title\n const titleSpace = this.getTitleSpace();\n const titleHeight = titleSpace.height > 0 ? titleSpace.height + effPadding : 0;\n const titleWidth = titleSpace.width + effPadding;\n\n // Get space occupied by labels\n const labelSpaces = this.getLabelSpaces(effPadding, align);\n\n const {\n totalHeight, totalWidth, itemSpaces, iconSpaces, maxItemSpaces, maxIconWidth\n } = computeItemSpaces(this.config(),\n { effPadding, titleWidth, labelSpaces, titleHeight, maxWidth, maxHeight }, this.data());\n\n this.measurement({\n width: Math.max(totalWidth, width) + effMargin + effBorder,\n height: Math.max(totalHeight, height) + effMargin + effBorder,\n labelSpaces,\n iconSpaces,\n itemSpaces,\n maxItemSpaces,\n maxIconWidth,\n titleSpaces: {\n width: Math.min(maxWidth, this.measurement().width) - effMargin - effBorder,\n height: titleHeight\n }\n });\n return this;\n }\n\n /**\n * Returns the space occupied by the legend title\n *\n * @return {Object} Space occupied by title\n * @memberof Legend\n */\n getTitleSpace () {\n this._labelManager.setStyle(getSmartComputedStyle(selectElement('body'),\n `${this.config().classPrefix}-legend-title`));\n return this._labelManager.getOriSize(this.title().text ? this.title().text : '');\n }\n\n /**\n * Creates the title for the legend\n *\n * @param {DOM} container Container made for the title\n * @return {Selection} Title and it's node\n * @memberof Legend\n */\n renderTitle (container) {\n const { titleSpaces, border, padding, width } = this.measurement();\n const { borderStyle, borderColor } = this.config();\n return titleCreator(container, this.title(), {\n height: titleSpaces.height,\n width,\n border,\n padding,\n borderStyle,\n borderColor\n }, this.config());\n }\n\n /**\n * Render the legend with its title\n *\n * @param {DOM} mountPoint Point where the legend and title are to be appended\n * @return {Instance} Current instance of legend\n * @memberof Legend\n */\n render () {\n const firebolt = this.firebolt();\n const {\n classPrefix,\n borderStyle,\n borderColor\n } = this.config();\n const {\n maxWidth,\n maxHeight,\n width,\n height,\n margin,\n border\n } = this.measurement();\n const legendContainer = makeElement(selectElement(this.mount()), 'div', [1], `${classPrefix}-legend-box`);\n\n legendContainer.classed(`${classPrefix}-legend-box-${this._id}`, true);\n legendContainer.style('float', 'left');\n // set height and width\n legendContainer.style('width', `${Math.min(maxWidth, width) - margin * 2}px`)\n .style('height', `${Math.min(maxHeight, height) - margin * 2}px`)\n .style('margin', `${margin}px`)\n .style('border', `${border}px ${borderStyle} ${borderColor}`);\n this.legendContainer(legendContainer.node());\n\n // create title\n this.renderTitle(legendContainer);\n firebolt.createSelectionSet(this.data().map(d => d.id));\n return legendContainer;\n }\n /**\n *\n *\n * @param {*} data\n * @returns\n * @memberof StepLegend\n */\n getCriteriaFromData (data) {\n const fieldName = this.fieldName();\n const type = this.metaData().getData().schema[0].type;\n if (type === 'measure') {\n return {\n [fieldName]: data.range\n };\n }\n return [[fieldName], [data.value]];\n }\n}\n","import {\n LEFT,\n RIGHT,\n START,\n END,\n TOP,\n BOTTOM,\n HORIZONTAL,\n VERTICAL,\n CENTER,\n SHAPE,\n VALUE\n} from '../enums/constants';\n\nconst legendOrientation = {\n [HORIZONTAL]: {\n datasets: data => ({\n row: [1],\n column: data\n }),\n itemContainerMeasures: (measurement) => {\n const {\n itemSpaces,\n width\n } = measurement;\n return {\n row: {\n width: `${width}px`,\n padding: `${0}px`\n },\n column: {\n width: (d, i) => `${itemSpaces[i].width}px`,\n padding: `${0}px`\n }\n };\n },\n getStepSpacesInfo: (measurement) => {\n const { maxItemSpaces, height } = measurement;\n return {\n iconHeight: height,\n iconWidth: maxItemSpaces.width,\n stepPadding: {\n horizontal: true,\n vertical: false\n }\n };\n }\n },\n [VERTICAL]: {\n datasets: data => ({\n row: data,\n column: d => [d]\n }),\n itemContainerMeasures: (measurement, config) => {\n const {\n width\n } = measurement;\n const { padding } = config;\n return {\n row: {\n width: `${width}px`,\n padding: `${padding}px`\n },\n column: {\n width: `${width}px`,\n padding: `${0}px`\n }\n };\n },\n getStepSpacesInfo: (measurement) => {\n const { maxItemSpaces, width } = measurement;\n return {\n iconHeight: maxItemSpaces.height,\n iconWidth: width,\n stepPadding: {\n horizontal: false,\n vertical: true\n }\n };\n }\n }\n};\n\nexport const positionConfig = {\n [LEFT]: legendOrientation[VERTICAL],\n [RIGHT]: legendOrientation[VERTICAL],\n [TOP]: legendOrientation[HORIZONTAL],\n [BOTTOM]: legendOrientation[HORIZONTAL]\n};\n\nexport const alignmentMap = {\n [LEFT]: END,\n [RIGHT]: START,\n [TOP]: CENTER,\n [BOTTOM]: CENTER\n};\n\n// Reverses data for step legend\nexport const stepData = data => ({\n [LEFT]: data.reverse(),\n [RIGHT]: data.reverse(),\n [TOP]: data,\n [BOTTOM]: data\n});\n\n// Changes the item layout based on the position of the text\nexport const itemStack = {\n [LEFT]: [VALUE, SHAPE],\n [RIGHT]: [SHAPE, VALUE],\n [TOP]: [VALUE, SHAPE],\n [BOTTOM]: [SHAPE, VALUE]\n};\n","import { makeElement, selectElement, applyStyle } from 'muze-utils';\nimport { ICON_MAP } from './defaults';\nimport { positionConfig, alignmentMap, itemStack } from './position-config';\nimport {\n WIDTH,\n HEIGHT,\n CENTER,\n VALUE,\n RECT,\n LEFT,\n RIGHT\n} from '../enums/constants';\n\n/**\n *\n *\n * @param {*} container\n * @param {*} data\n * @param {*} legendInstance\n * @param {*} align\n * @return\n */\nexport const getItemContainers = (container, data, legendInstance) => {\n const measurement = legendInstance.measurement();\n const config = legendInstance.config();\n const {\n itemSpaces\n } = measurement;\n const {\n classPrefix,\n position\n } = config;\n const positionObj = positionConfig[position];\n const datasets = positionObj.datasets(data);\n const measures = positionObj.itemContainerMeasures(measurement, config);\n\n const rows = makeElement(container, 'div', datasets.row, `${classPrefix}-legend-row`);\n rows.style(HEIGHT, (d, i) => `${itemSpaces[i].height}px`);\n rows.style(WIDTH, measures.row.width);\n rows.style('padding', measures.row.padding);\n\n const columns = makeElement(rows, 'div', datasets.column, `${classPrefix}-legend-columns`);\n columns.style(WIDTH, measures.column.width);\n columns.style('padding', measures.column.padding);\n\n return columns;\n};\n\n/**\n *\n *\n * @param {*} container\n * @param {*} classPrefix\n * @param {*} data\n * @returns\n * @memberof DiscreteLegend\n */\nexport const createLegendSkeleton = (context, container, classPrefix, data) => {\n let gradWidth = 0;\n let gradHeight = 0;\n let maxGradHeight = 0;\n let maxGradWidth = 0;\n const measurement = context.measurement();\n const {\n margin,\n border,\n titleSpaces,\n width,\n height,\n maxWidth,\n maxHeight\n } = measurement;\n\n gradHeight = height - (titleSpaces.height + 2 * margin + 2 * border);\n gradWidth = width - (margin * 2 + border * 2);\n\n maxGradHeight = maxHeight - (titleSpaces.height + margin * 2 + border * 2);\n maxGradWidth = maxWidth - (margin * 2 + border * 2);\n\n let legendBody = makeElement(container, 'div', [1], `${classPrefix}-legend-body`);\n legendBody.select(`.${classPrefix}-legend-overflow`).remove();\n // Create a div with scroll when overflow\n if (maxGradWidth && maxGradWidth < gradWidth) {\n legendBody = legendBody.style(WIDTH, `${maxGradWidth}px`).style('overflow-x', 'scroll');\n }\n // Create a div with scroll when overflow\n if (maxGradHeight && maxGradHeight < gradHeight) {\n legendBody.style(HEIGHT, `${maxGradHeight}px`).style('overflow-y', 'scroll');\n }\n\n legendBody = makeElement(legendBody, 'div', [1], `${classPrefix}-legend-overflow`);\n\n legendBody.style(WIDTH, `${gradWidth}px`);\n legendBody.style(HEIGHT, `${gradHeight}px`);\n\n const legendItem = getItemContainers(legendBody, data, context);\n return { legendItem };\n};\n\n/**\n * Creates legend item based on alignment and text orientation\n *\n * @param {Selection} container Point where items are to be mounted\n * @return {Instance} Current instance\n * @memberof Legend\n */\nexport const createItemSkeleton = (context, container) => {\n const {\n classPrefix,\n item\n } = context.config();\n const textOrientation = item.text.orientation;\n\n const stack = itemStack[textOrientation];\n const itemSkeleton = makeElement(container, 'div', (d, i) => stack.map(e => [e, d[e], d.color, d.size,\n d.value, context.fieldName(), i]), `${classPrefix}-legend-item-info`);\n\n const alignClass = alignmentMap[textOrientation];\n\n itemSkeleton.classed(alignClass, true);\n return { itemSkeleton };\n};\n\n/**\n *\n *\n * @param {*} measureType\n * @param {*} stepColorCheck\n */\nexport const applyItemStyle = (item, measureType, stepColorCheck, context) => {\n const {\n padding,\n labelSpaces,\n iconSpaces,\n maxIconWidth\n } = context.measurement();\n const diff = stepColorCheck ? -padding * 2 : 0;\n\n if (item[0] === VALUE) {\n return `${labelSpaces[item[6]][measureType]}px`;\n }\n return `${measureType === 'width' && !stepColorCheck ? maxIconWidth : iconSpaces[item[6]][measureType] - diff}px`;\n};\n\n/**\n *\n *\n * @param {*} str\n * @returns\n */\nconst checkPath = (str) => {\n if (/^[mzlhvcsqta]\\s*[-+.0-9][^mlhvzcsqta]+/i.test(str) && /[\\dz]$/i.test(str) && str.length > 4) {\n return true;\n }\n return false;\n};\n\n/**\n *\n *\n * @param {*} d\n * @param {*} elem\n */\nconst createShape = function (d, elem, defaultIcon, width, height) {\n const groupElement = elem;\n // const { shape, size, update } = d;\n const size = d[3] || Math.min(width, height) * Math.PI;\n const shape = d[1] || defaultIcon;\n\n if (shape instanceof Promise) {\n shape.then((res) => {\n d.shape = res;\n return createShape(d, elem);\n });\n } else if (shape instanceof Element) {\n let newShape = shape.cloneNode(true);\n\n if (newShape.nodeName.toLowerCase() === 'img') {\n const src = newShape.src || newShape.href;\n newShape = document.createElementNS('http://www.w3.org/2000/svg', 'image');\n newShape.setAttribute('href', src);\n }\n const shapeElement = selectElement(newShape);\n shapeElement.attr('transform', `scale(${size / 100})`);\n return selectElement(groupElement.node().appendChild(newShape));\n } else if (typeof shape === 'string') {\n let pathStr;\n if (checkPath(shape)) {\n pathStr = shape;\n } else {\n pathStr = ICON_MAP(shape).size(size)();\n }\n return makeElement(groupElement, 'path', data => [data]).attr('d', pathStr);\n }\n d[1] = 'circle';\n return createShape(d, elem, 'circle');\n};\n\n/**\n * Returns the icon of the legend item\n *\n * @param {Object} datum Data property attached to the item\n * @param {number} width width of the item\n * @param {number} height height of the item\n * @return {Object|string} returns the path string or the string name of the icon\n * @memberof Legend\n */\nexport const getLegendIcon = (datum, width, height, defaultIcon) => {\n const icon = ICON_MAP(datum[1]);\n\n if (icon) {\n return icon.size(datum[3] || Math.min(width, height) * Math.PI);\n }\n return ICON_MAP(datum[3] ? 'circle' : defaultIcon).size(datum[3] || Math.min(width, height) * Math.PI);\n};\n\n/**\n *\n *\n */\nexport const renderIcon = (icon, container, datum, context) => {\n const {\n classPrefix,\n iconHeight,\n iconWidth,\n maxIconWidth,\n padding,\n color\n } = context;\n const svg = makeElement(container, 'svg', f => [f], `${classPrefix}-legend-icon-svg`)\n .attr(WIDTH, maxIconWidth)\n .attr(HEIGHT, iconHeight)\n .style(WIDTH, `${maxIconWidth}px`)\n .style(HEIGHT, `${iconHeight}px`);\n\n if (icon !== RECT) {\n const group = makeElement(svg, 'g', [datum[1]], `${classPrefix}-legend-icon`);\n createShape(datum, group, datum[3] ? 'circle' : 'square', iconWidth, iconHeight)\n .attr('transform', `translate(${maxIconWidth / 2 - padding} ${iconHeight / 2})`)\n .attr('fill', datum[2] || color);\n } else {\n makeElement(svg, RECT, [datum[1]], `${classPrefix}-legend-icon`)\n .attr('x', 0)\n .attr('y', 0)\n .attr(WIDTH, maxIconWidth)\n .attr(HEIGHT, iconHeight)\n .attr('fill', datum[2] || color);\n }\n};\n\n/**\n * Renders the items in the legend i.e, icon and text\n *\n * @param {DOM} container Point where item is to be mounted\n * @memberof Legend\n */\nexport const renderDiscreteItem = (context, container) => {\n const labelManager = context._labelManager;\n const {\n item,\n classPrefix\n } = context.config();\n const {\n maxIconWidth,\n padding\n } = context.measurement();\n const {\n width: iconWidth,\n height: iconHeight,\n color,\n className\n } = item.icon;\n\n const textOrientation = item.text.orientation;\n const formatter = item.text.formatter;\n\n labelManager.useEllipsesOnOverflow(true);\n applyStyle(container, {\n width: d => applyItemStyle(d, WIDTH, false, context),\n height: d => applyItemStyle(d, HEIGHT, false, context),\n 'text-align': CENTER,\n padding: `${padding}px`\n });\n\n labelManager.setStyle(context._computedStyle);\n container.each(function (d, i) {\n if (d[0] === VALUE) {\n selectElement(this).text(formatter(d[1]))\n .style(`padding-${textOrientation === RIGHT ? LEFT : RIGHT}`, '0px');\n } else {\n // const icon = getLegendIcon(d, iconWidth, iconHeight, type);\n selectElement(this).classed(`${classPrefix}-${className}`, true);\n selectElement(this).classed(`${classPrefix}-${className}-${i}`, true);\n renderIcon('circle', selectElement(this), d, {\n classPrefix,\n iconWidth,\n // iconWidth: 2 * Math.sqrt(d[3] / Math.PI) || iconWidth,\n iconHeight,\n maxIconWidth,\n padding,\n color\n });\n }\n });\n};\n\n/**\n* Renders the items in the legend i.e, icon and text\n*\n* @param {DOM} container Point where item is to be mounted\n* @memberof Legend\n*/\nexport const renderStepItem = (context, container) => {\n const labelManager = context._labelManager;\n const {\n item,\n position,\n classPrefix\n } = context.config();\n const {\n maxItemSpaces,\n maxIconWidth,\n padding\n } = context.measurement();\n const {\n width,\n height,\n color\n } = item.icon;\n const {\n formatter\n } = item.text;\n\n labelManager.useEllipsesOnOverflow(true);\n const { iconHeight, iconWidth, stepPadding } = positionConfig[position].getStepSpacesInfo({\n maxItemSpaces, height, width\n });\n\n applyStyle(container, {\n width: d => applyItemStyle(d, WIDTH, stepPadding.horizontal, context),\n height: d => applyItemStyle(d, HEIGHT, stepPadding.vertical, context),\n 'text-align': 'center',\n padding: `${padding}px`\n });\n\n labelManager.setStyle(context._computedStyle);\n container.each(function (d) {\n if (d[0] === VALUE) {\n selectElement(this).text(formatter(d[1]));\n } else {\n renderIcon(RECT, selectElement(this), d, {\n classPrefix,\n iconWidth,\n iconHeight,\n maxIconWidth,\n color\n });\n }\n });\n};\n","import SimpleLegend from './simple-legend';\nimport { DISCRETE, LEFT, SIZE } from '../enums/constants';\nimport { getScaleInfo } from './legend-helper';\nimport { createLegendSkeleton, createItemSkeleton, renderDiscreteItem } from './renderer';\nimport '../styles.scss';\n\n/**\n * Creates a Legend from the axes of a canvas\n *\n * @param {Object} dependencies : legend data\n * @class Legend\n */\nexport default class DiscreteLegend extends SimpleLegend {\n\n /**\n * Initializes an instance of the class\n *\n * @static\n * @param {Object} dependencies Set of dependencies required by the legend\n * @return {Instance} returns a new instance of Legend\n * @memberof Legend\n */\n static create (dependencies) {\n return new DiscreteLegend(dependencies);\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof DiscreteLegend\n */\n static type () {\n return DISCRETE;\n }\n\n /**\n *\n *\n * @param {*} scale\n * @returns\n * @memberof DiscreteLegend\n */\n dataFromScale (scale) {\n const { scaleType, domain, scaleFn } = getScaleInfo(scale);\n let domainForLegend = [...new Set(domain)];\n const type = this.metaData().getData().schema[0].type;\n\n domainForLegend = domainForLegend.map((ele, i) => {\n let value = 0;\n let range = 0;\n if (type === 'measure') {\n value = (+domainForLegend[i]).toFixed(0);\n const nextVal = domainForLegend[i + 1] ? +domainForLegend[i + 1] : +value;\n range = [value, nextVal.toFixed(0)];\n } else {\n value = domainForLegend[i];\n range = [domainForLegend[i]];\n }\n return {\n [scaleType]: scale[scaleFn](ele),\n value,\n id: i,\n range\n };\n }).filter(d => d.value !== null);\n\n domainForLegend = scaleType === SIZE ? domainForLegend.sort((a, b) => a[scaleType] - b[scaleType])\n : domainForLegend;\n return domainForLegend;\n }\n\n /**\n * Render the legend with its title\n *\n * @param {DOM} mountPoint Point where the legend and title are to be appended\n * @return {Instance} Current instance of legend\n * @memberof Legend\n */\n render () {\n const firebolt = this.firebolt();\n const data = this.data();\n const { classPrefix } = this.config();\n const legendContainer = super.render(this.mount());\n // create Legend\n const { legendItem } = createLegendSkeleton(this, legendContainer, classPrefix, data);\n const { itemSkeleton } = createItemSkeleton(this, legendItem);\n renderDiscreteItem(this, itemSkeleton);\n legendContainer.selectAll('div').style('float', LEFT);\n firebolt.mapActionsAndBehaviour();\n firebolt.createSelectionSet(this.data().map(d => d.id));\n return legendContainer;\n }\n}\n","import { makeElement, applyStyle } from 'muze-utils';\nimport { ContinousAxis } from '@chartshq/muze-axis';\nimport { BOTTOM, RIGHT } from '../enums/constants';\nimport { ALIGN } from './defaults';\nimport '../styles.scss';\n\n/**\n *\n *\n * @param {*} data\n * @returns\n */\nexport const getGradientDomain = (data) => {\n if (typeof data[0].value === 'number') {\n return data.reduce((accumulator, currentValue) =>\n [Math.min(currentValue.value, accumulator[0]), Math.max(currentValue.value, accumulator[1])],\n [Number.MAX_VALUE, Number.MIN_VALUE]);\n }\n return data.map(e => e.value);\n};\n\n/**\n *\n *\n * @param {*} container\n * @param {*} data\n * @param {*} domain\n * @returns\n */\nexport const makeLinearGradient = (container, data, domain) => {\n const defs = makeElement(container, 'defs', [1]);\n const linearGradient = makeElement(defs, 'linearGradient', [1])\n .attr('id', 'linear-gradient')\n .attr('x1', '0%')\n .attr('y2', '0%');\n makeElement(linearGradient, 'stop', data, 'stop-gradient')\n .attr('offset', d => `${(d.value - domain[0]) * 100 / (domain[1] - domain[0])}%`)\n .attr('stop-color', d => d.color);\n return linearGradient;\n};\n\n/**\n * Creates an axis cell with a linear axis for computing space and\n * creating gradient legend\n *\n * @return {AxisCell} Instance of Axis Cell for the gradient axis\n * @memberof Legend\n */\nexport const createAxis = (context) => {\n const data = context.data();\n const { align } = context.config();\n const AxisCell = context._cells.AxisCell;\n const newAxis = new ContinousAxis({\n id: `legend-${context._id}`,\n orientation: align === ALIGN.VERTICAL ? RIGHT : BOTTOM,\n style: context._computedStyle,\n nice: false,\n showAxisName: false,\n tickValues: data.map(d => d.value),\n fixedBaseline: false\n }, { labelManager: context._labelManager });\n\n newAxis.domain(getGradientDomain(data));\n newAxis.range([1, 1]);\n return new AxisCell().source(newAxis).config({\n margin: { left: 0, bottom: 0, top: 0, right: 0 }\n });\n};\n\n/**\n *\n *\n * @param {*} container\n * @param {*} data\n * @param {*} classPrefix\n * @returns\n * @memberof GradientLegend\n */\nconst createLegendSkeleton = (container, classPrefix, data) => {\n const domain = getGradientDomain(data);\n const legendContainer = makeElement(container, 'div', [1], `${classPrefix}-legend-body`);\n const legendGradSvg = makeElement(legendContainer, 'svg', [1], `${classPrefix}-gradient`);\n const legendGradCont = makeElement(legendGradSvg, 'g', [1], `${classPrefix}-gradient-group`);\n const linearGradient = makeLinearGradient(legendGradSvg, data, domain);\n const legendRect = makeElement(legendGradCont, 'rect', [1], `${classPrefix}-gradient-rect`);\n\n return {\n legendContainer,\n legendGradCont,\n legendGradSvg,\n linearGradient,\n legendRect\n };\n};\n\n/**\n * Renders the axis for the gradient\n *\n * @param {Selection} container Point where axis is to be mounted\n * @param {number} height Height for axis\n * @param {number} width Width for axis\n * @memberof Legend\n */\nexport const renderAxis = (context, container, height, width) => {\n const axis = context.axis();\n\n axis.setAvailableSpace(width, height);\n axis.render(container.node());\n};\n\n/**\n * Renders gradient legends\n *\n * @param {Selection} container Point where the legend is to be appended\n * @memberof GradientLegend\n */\nexport const renderGradient = (context, container) => {\n let gradHeight = 0;\n let gradWidth = 0;\n const {\n align,\n classPrefix,\n item\n } = context.config();\n const data = context.data();\n // Create the skeleton for the legend\n const {\n legendContainer,\n legendGradSvg,\n legendGradCont,\n linearGradient,\n legendRect\n } = createLegendSkeleton(container, classPrefix, data);\n const labelDim = context.axis().source().getAxisDimensions().tickLabelDim;\n const {\n padding,\n margin,\n border,\n titleSpaces,\n maxHeight,\n maxWidth,\n height,\n width\n } = context.measurement();\n const gradientDimensions = {};\n\n gradHeight = Math.floor(height - (titleSpaces.height + 2 * margin + 2 * border));\n gradWidth = Math.floor(width - (margin * 2 + border * 2));\n\n if (align === ALIGN.HORIZONTAL) {\n gradientDimensions.height = item.icon.height;\n gradientDimensions.width = gradWidth - 2 * padding - labelDim.width / 2;\n linearGradient.attr('x2', '100%').attr('y1', '0%');\n legendGradCont.attr('transform', `translate( ${labelDim.width / 2} 0)`);\n renderAxis(context, legendContainer, gradHeight - item.icon.height - padding, gradWidth - 2 * padding - 1);\n legendContainer.classed(`${classPrefix}-overflow-x`, width > maxWidth);\n\n applyStyle(legendContainer, {\n height: `${height}px`,\n width: `${Math.min(width, maxWidth)}px`,\n padding: `${padding}px`\n });\n\n legendRect.attr('height', gradientDimensions.height);\n legendRect.attr('width', gradientDimensions.width - labelDim.width / 2);\n } else {\n gradientDimensions.height = gradHeight - 2 * padding - labelDim.height / 2;\n gradientDimensions.width = item.icon.width;\n linearGradient.attr('x2', '0%').attr('y1', '100%');\n legendGradCont.attr('transform', `translate(0 ${labelDim.height / 2})`);\n renderAxis(context, legendContainer, gradHeight - 2 * padding - 1, gradWidth - item.icon.width - padding * 2);\n legendContainer.classed(`${classPrefix}-overflow-y`, height > maxHeight);\n applyStyle(legendContainer, {\n height: `${Math.min(height, maxHeight)}px`,\n width: `${width}px`,\n padding: `${padding}px`\n });\n legendRect.attr('height', gradientDimensions.height - labelDim.height / 2);\n legendRect.attr('width', gradientDimensions.width);\n }\n\n // Apply Styles to the legend plot area\n applyStyle(legendGradSvg, {\n height: `${gradientDimensions.height}px`,\n width: `${gradientDimensions.width}px`\n });\n\n // Apply styles to the legend rect\n applyStyle(legendRect, {\n fill: 'url(#linear-gradient)'\n });\n legendGradSvg.attr('height', gradientDimensions.height);\n legendGradSvg.attr('width', gradientDimensions.width);\n\n context.measurement({\n gradientDimensions\n });\n context._legendGradientSvg = legendGradSvg;\n return context;\n};\n","import SimpleLegend from './simple-legend';\nimport { getScaleInfo, getInterpolatedData } from './legend-helper';\nimport { GRADIENT, LEFT, SIZE } from '../enums/constants';\nimport { renderGradient, createAxis } from './gradient-helper';\nimport '../styles.scss';\n\n/**\n * Creates a Legend from the axes of a canvas\n *\n * @param {Object} dependencies : legend data\n * @class Legend\n */\nexport default class GradientLegend extends SimpleLegend {\n\n /**\n * Initializes an instance of the class\n *\n * @static\n * @param {Object} dependencies Set of dependencies required by the legend\n * @return {Instance} returns a new instance of Legend\n * @memberof Legend\n */\n static create (dependencies) {\n return new GradientLegend(dependencies);\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof GradientLegend\n */\n static type () {\n return GRADIENT;\n }\n\n /**\n *\n *\n * @param {*} axis\n * @returns\n * @memberof GradientLegend\n */\n axis (...axis) {\n if (axis.length) {\n this._axis = axis[0];\n return this;\n }\n return this._axis;\n }\n\n /**\n *\n *\n * @param {*} scale\n * @returns\n * @memberof GradientLegend\n */\n dataFromScale (scale) {\n let domainForLegend = [];\n const { scaleType, domain, steps, scaleFn } = getScaleInfo(scale);\n\n if (steps instanceof Array) {\n if (domain[0] < steps[0]) {\n domainForLegend[0] = domain[0];\n }\n domainForLegend = [...domainForLegend, ...steps];\n if (domain[domain.length - 1] > steps[steps.length - 1]) {\n domainForLegend.push(domain[1]);\n }\n } else {\n domainForLegend = getInterpolatedData(domain, steps - 1);\n }\n domainForLegend = [...new Set(domainForLegend)].sort((a, b) => a - b);\n\n return domainForLegend.map((ele, i) => {\n const value = domainForLegend[i];\n return {\n [scaleType]: scaleType === SIZE ? scale[scaleFn](ele) * scale.getScaleFactor()\n : scale[scaleFn](Math.floor(ele)),\n value: +value.toFixed(2),\n id: i\n };\n }).filter(d => d.value !== null);\n }\n\n /**\n *\n *\n * @param {*} effPadding\n * @param {*} align\n * @return\n * @memberof Legend\n */\n getLabelSpaces (effPadding) {\n this.config({\n item: {\n text: {\n orientation: this.config().position\n }\n }\n });\n const axis = createAxis(this);\n const axisSpace = axis.getLogicalSpace();\n const space = { width: axisSpace.width - effPadding, height: axisSpace.height - effPadding };\n const axisDomainLength = axis.source().domain().length;\n const labelSpaces = new Array(axisDomainLength).fill(space);\n\n this.axis(axis);\n return labelSpaces;\n }\n\n /**\n *\n *\n * @returns\n * @memberof GradientLegend\n */\n getDrawingContext () {\n return {\n svgContainer: this._legendGradientSvg\n };\n }\n\n /**\n * Render the legend with its title\n *\n * @param {DOM} mountPoint Point where the legend and title are to be appended\n * @return {Instance} Current instance of legend\n * @memberof Legend\n */\n render () {\n const firebolt = this.firebolt();\n const legendContainer = super.render(this.mount());\n // create Legend\n renderGradient(this, legendContainer);\n legendContainer.selectAll('div').style('float', LEFT);\n firebolt.mapActionsAndBehaviour();\n firebolt.createSelectionSet(this.data().map(d => d.id));\n return legendContainer;\n }\n /**\n *\n *\n * @param {*} data\n * @returns\n * @memberof SimpleLegend\n */\n getCriteriaFromData (data) {\n return [[this.fieldName()], [data.value]];\n }\n}\n","import SimpleLegend from './simple-legend';\nimport {\n getScaleInfo,\n getInterpolatedData,\n getDomainBounds\n} from './legend-helper';\nimport {\n createLegendSkeleton,\n createItemSkeleton,\n renderStepItem\n} from './renderer';\nimport { STEP, RECT, LEFT, SIZE, UPPER, LOWER } from '../enums/constants';\nimport { stepData } from './position-config';\nimport '../styles.scss';\n\n/**\n * Creates a Legend from the axes of a canvas\n *\n * @param {Object} dependencies : legend data\n * @class Legend\n */\nexport default class StepLegend extends SimpleLegend {\n\n /**\n * Initializes an instance of the class\n *\n * @static\n * @param {Object} dependencies Set of dependencies required by the legend\n * @return {Instance} returns a new instance of Legend\n * @memberof Legend\n */\n static create (dependencies) {\n return new StepLegend(dependencies);\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof StepLegend\n */\n static type () {\n return STEP;\n }\n\n /**\n *\n *\n * @param {*} scale\n * @returns\n * @memberof StepLegend\n */\n dataFromScale (scale) {\n let domainLeg = [];\n const { scaleType, domain, steps, scaleFn } = getScaleInfo(scale);\n\n const { formatter } = this.config();\n const domainBounds = {\n lower: null, upper: null\n };\n\n if (steps instanceof Array) {\n if (domain[0] < steps[0]) {\n domainBounds.lower = [`${formatter.bounds.lower} ${steps[0]}`];\n }\n domainLeg = [...domainLeg, ...steps];\n if (domain[domain.length - 1] > steps[steps.length - 1]) {\n domainBounds.upper = [`${formatter.bounds.upper} ${steps[steps.length - 1]}`];\n }\n } else {\n domainLeg = getInterpolatedData(domain, steps);\n }\n\n domainLeg = [...new Set(domainLeg)].sort((a, b) => a - b);\n domainLeg = domainLeg.map((ele, i) => {\n let value = null;\n if (i < domainLeg.length - 1) {\n value = `${(ele.toFixed(1))} - ${(+domainLeg[i + 1].toFixed(1))}`;\n }\n return {\n [scaleType]: scaleType === SIZE ? scale[scaleFn](ele) * scale.getScaleFactor() : scale[scaleFn](ele),\n value,\n id: i + 1,\n range: [ele, domainLeg[i + 1]]\n };\n }).filter(d => d.value !== null);\n\n if (domainBounds.lower) {\n const lowerBounds = getDomainBounds(LOWER, { scale, scaleFn, scaleType },\n { domain, steps, domainBounds });\n domainLeg = [lowerBounds, ...domainLeg];\n }\n if (domainBounds.upper) {\n const upperBounds = getDomainBounds(UPPER, { scale, scaleFn, scaleType },\n { domain, steps, domainBounds, domainLeg });\n domainLeg = [...domainLeg, upperBounds];\n }\n return domainLeg;\n }\n\n /**\n *\n *\n * @param {*} effPadding\n * @param {*} align\n * @return\n * @memberof Legend\n */\n getLabelSpaces (effPadding, align) {\n this.config({\n item: {\n text: {\n orientation: this.config().position\n }\n }\n });\n return super.getLabelSpaces(effPadding, align);\n }\n\n /**\n *\n *\n * @return\n * @memberof Legend\n */\n elemType () {\n return RECT;\n }\n\n /**\n * Render the legend with its title\n *\n * @param {DOM} mountPoint Point where the legend and title are to be appended\n * @return {Instance} Current instance of legend\n * @memberof Legend\n */\n render () {\n const firebolt = this.firebolt();\n const { classPrefix, position } = this.config();\n const data = stepData(this.data())[position];\n\n const legendContainer = super.render(this.mount());\n\n // create Legend\n const { legendItem } = createLegendSkeleton(this, legendContainer, classPrefix, data);\n const { itemSkeleton } = createItemSkeleton(this, legendItem);\n\n renderStepItem(this, itemSkeleton);\n legendContainer.selectAll('div').style('float', LEFT);\n firebolt.mapActionsAndBehaviour();\n firebolt.createSelectionSet(this.data().map(d => d.id));\n return legendContainer;\n }\n\n /**\n *\n *\n * @param {*} data\n * @returns\n * @memberof StepLegend\n */\n getCriteriaFromData (data) {\n const fieldName = this.fieldName();\n return {\n [fieldName]: data.range\n };\n }\n}\n","import { GradientLegend, DiscreteLegend, StepLegend } from '@chartshq/muze-legend';\n\n/**\n * Contants to be used as attr\n */\nexport const ROWS = 'rows';\nexport const COLUMNS = 'columns';\nexport const DATA = 'data';\nexport const COLOR = 'color';\nexport const SHAPE = 'shape';\nexport const SIZE = 'size';\nexport const DETAIL = 'detail';\nexport const LAYERS = 'layers';\nexport const TRANSFORM = 'transform';\nexport const INITIALIZED = 'isInitialized';\nexport const SOURCE = 'source';\nexport const WIDTH = 'width';\nexport const HEIGHT = 'height';\nexport const PADDING = 'padding';\nexport const BORDER = 'border';\nexport const MARGIN = 'margin';\nexport const CONFIG = 'config';\nexport const MOUNT = 'mount';\nexport const CANVAS_UPDATED = 'canvasUpdated';\nexport const CLASSPREFIX = 'classPrefix';\nexport const POLICIES = '_policies';\nexport const LEGEND = 'legend';\nexport const TITLE = 'title';\nexport const SUB_TITLE = 'subtitle';\nexport const RESOLVE = 'resolve';\nexport const DISCRETE = 'discrete';\nexport const STEP_COLOR = 'step-color';\nexport const GRADIENT = 'gradient';\nexport const LINEAR = 'linear';\nexport const ORDINAL = 'ordinal';\n\nexport const TITLE_TEMPLATE_NOT_ALLOWED_TAGS = [\n 'script',\n 'style'\n];\n\nexport const LEGEND_TYPE_MAP = {\n [`${ORDINAL}-${true}-${COLOR}`]: DiscreteLegend,\n [`${ORDINAL}-${true}-${SIZE}`]: DiscreteLegend,\n [`${ORDINAL}-${true}-${SHAPE}`]: DiscreteLegend,\n [`${ORDINAL}-${false}-${COLOR}`]: DiscreteLegend,\n [`${ORDINAL}-${false}-${SHAPE}`]: DiscreteLegend,\n [`${ORDINAL}-${false}-${SIZE}`]: DiscreteLegend,\n [`${LINEAR}-${false}-${SIZE}`]: DiscreteLegend,\n [`${LINEAR}-${true}-${SIZE}`]: DiscreteLegend,\n [`${LINEAR}-${false}-${SHAPE}`]: DiscreteLegend,\n [`${LINEAR}-${true}-${COLOR}`]: StepLegend,\n [`${LINEAR}-${false}-${COLOR}`]: GradientLegend\n};\n\nexport const LEFT = 'left';\nexport const RIGHT = 'right';\nexport const BOTTOM = 'bottom';\nexport const TOP = 'top';\nexport const GROUP = 'group';\nexport const LAYOUT = 'layout';\nexport const RETINAL = 'retinal';\nexport const DIMENSION = 'dimension';\nexport const MEASURE = 'measure';\nexport const VERTICAL = 'vertical';\nexport const HORIZONTAL = 'horizontal';\n\n","import { ComposedVars, SimpleVariable } from '@chartshq/visual-group';\nimport { TITLE_TEMPLATE_NOT_ALLOWED_TAGS } from './constants';\n\n/**\n * This method creates a new composed variable instance from multiple variables.\n * @param {Array} vars Variable names\n * @return {ComposedVars} Instance of composed variable\n */\nexport const share = (...vars) => new ComposedVars(...vars.map(variable => new SimpleVariable(variable)));\n\n/**\n *\n *\n * @param {*} node\n * @returns\n */\nfunction treeShakeNode (node) {\n if (node.nodeType !== Node.ELEMENT_NODE) { return; }\n\n if (TITLE_TEMPLATE_NOT_ALLOWED_TAGS.indexOf(node.tagName.toLowerCase()) !== -1) {\n node.parentNode.removeChild(node);\n } else {\n for (const childNode of node.childNodes) {\n treeShakeNode(childNode);\n }\n }\n}\n\n/**\n * A string template tagged function which sanitizes input html formatted\n * string according to the allowed html tags.\n *\n * @param {Array.} strings - The string parts of the template.\n * @param {Array} exps - The list of evaluated expression values.\n * @return {Function} Returns a function which returns the sanitized html string.\n */\nexport function html (strings, ...exps) {\n let htmlCode = '';\n const expLn = exps.length;\n let i = 0;\n\n for (; i < expLn; ++i) {\n htmlCode += strings[i] + exps[i];\n }\n htmlCode += strings[i];\n\n const frag = document.createDocumentFragment();\n const wrapper = document.createElement('div');\n\n frag.appendChild(wrapper);\n wrapper.innerHTML = htmlCode;\n\n treeShakeNode(wrapper);\n const { innerHTML } = wrapper;\n\n return () => innerHTML;\n}\n","import { mergeRecursive } from 'muze-utils';\n\nconst defaultPolicy = (registrableComponents) => {\n const aliases = registrableComponents.map(comp => comp.alias());\n return {\n behaviours: {\n '*': (propagationPayload) => {\n const propagationCanvas = propagationPayload.sourceCanvas;\n return propagationCanvas ? aliases.indexOf(propagationCanvas) !== -1 : true;\n }\n }\n };\n};\n\nclass ActionModel {\n constructor () {\n this._registrableComponents = [];\n }\n\n registerPhysicalActions (action) {\n const canvases = this._registrableComponents;\n\n canvases.forEach((canvas) => {\n canvas.once('canvas.updated').then((args) => {\n const matrix = args.client.composition().visualGroup.matrixInstance().value;\n matrix.each(cell => cell.valueOf().firebolt().registerPhysicalActions(action));\n });\n });\n return this;\n }\n\n registerBehaviouralActions (...actions) {\n const canvases = this._registrableComponents;\n\n canvases.forEach((canvas) => {\n canvas.once('canvas.updated').then(() => {\n const matrix = canvas.composition().visualGroup.matrixInstance().value;\n matrix.each(cell => cell.valueOf().firebolt().registerBehaviouralActions(...actions));\n });\n });\n return this;\n }\n\n /**\n *\n *\n * @param {*} map\n * @returns\n * @memberof ActionModel\n */\n registerPhysicalBehaviouralMap (map) {\n const canvases = this._registrableComponents;\n\n canvases.forEach((canvas) => {\n canvas.once('canvas.updated').then((args) => {\n const matrix = args.client.composition().visualGroup.matrixInstance().value;\n matrix.each(cell => cell.valueOf().firebolt().registerPhysicalBehaviouralMap(map));\n });\n });\n return this;\n }\n\n registerPropagationBehaviourMap (map) {\n const canvases = this._registrableComponents;\n\n canvases.forEach((canvas) => {\n canvas.once('canvas.updated').then((args) => {\n const matrix = args.client.composition().visualGroup.matrixInstance().value;\n matrix.each(cell => cell.valueOf().firebolt().registerPropagationBehaviourMap(map));\n });\n });\n return this;\n }\n\n mapSideEffects (map) {\n const canvases = this._registrableComponents;\n\n canvases.forEach((canvas) => {\n canvas.once('canvas.updated').then(() => {\n const matrix = canvas.composition().visualGroup.matrixInstance().value;\n matrix.each(cell => cell.valueOf().firebolt().mapSideEffects(map));\n });\n });\n return this;\n }\n\n for (...components) {\n this._registrableComponents = components;\n return this;\n }\n\n registerSideEffects (...sideEffects) {\n const registrableComponents = this._registrableComponents;\n\n registrableComponents.forEach((canvas) => {\n canvas.once('canvas.updated').then((args) => {\n const matrix = args.client.composition().visualGroup.matrixInstance().value;\n matrix.each(cell => cell.valueOf().firebolt().registerSideEffects(sideEffects));\n });\n });\n\n return this;\n }\n\n dissociateBehaviour (...maps) {\n const registrableComponents = this._registrableComponents;\n\n registrableComponents.forEach((canvas) => {\n canvas.once('canvas.updated').then((args) => {\n const matrix = args.client.composition().visualGroup.matrixInstance().value;\n matrix.each((cell) => {\n maps.forEach(val => cell.valueOf().firebolt().dissociateBehaviour(val[0], val[1]));\n });\n });\n });\n\n return this;\n }\n\n dissociateSideEffect (...maps) {\n const registrableComponents = this._registrableComponents;\n\n registrableComponents.forEach((canvas) => {\n canvas.once('canvas.updated').then((args) => {\n const matrix = args.client.composition().visualGroup.matrixInstance().value;\n matrix.each((cell) => {\n maps.forEach(val => cell.valueOf().firebolt().dissociateSideEffect(val[0], val[1]));\n });\n });\n });\n\n return this;\n }\n\n enableCrossInteractivity (policy = {}) {\n const registrableComponents = this._registrableComponents;\n const mergedPolicy = mergeRecursive(mergeRecursive({}, defaultPolicy(registrableComponents)), policy);\n\n registrableComponents.forEach((canvas) => {\n canvas.firebolt().crossInteractionPolicy(mergedPolicy);\n });\n\n return this;\n }\n}\n\nexport const actionModel = (() => new ActionModel())();\n","export const DEFAULT_CONFIG = {\n classPrefix: 'muze',\n interaction: {\n sideEffect: 'individual'\n },\n legend: {\n position: 'right',\n color: {\n show: true,\n padding: 1,\n margin: 3,\n border: 1,\n height: 20,\n width: 20\n },\n shape: {\n show: true,\n padding: 1,\n margin: 3,\n border: 1,\n height: 20,\n width: 20\n },\n size: {\n show: true,\n padding: 1,\n margin: 3,\n border: 1,\n height: 20,\n width: 20\n }\n },\n showHeaders: false,\n minWidth: 100,\n minHeight: 100,\n border: {\n style: 'solid',\n color: '#d6d6d6',\n width: 2,\n collapse: true,\n spacing: 0\n },\n autoGroupBy: {\n disabled: false\n }\n};\n","/**\n * @module\n * This is the global options semantics based on which setters getters are created and reactivity is initiated.\n * Format\n * PROPERTRY_NAME: {\n * value: // default value of the property,\n * meta: {\n * typeCheck: // The setter value will be checked using this. If the value is function then the setter value\n * // is passed as args.\n * typeExpected: // The output of typecheck action will be tested against this. Truthy value will set the\n * // value to the setter\n * sanitizaiton: // Need for sanitization before type is checked\n * }\n * }\n */\n\nimport { intSanitizer, mergeRecursive, DataModel } from 'muze-utils';\nimport { DEFAULT_CONFIG } from './defaults';\n\nexport default {\n data: {\n value: null,\n meta: {\n typeCheck: d => d instanceof DataModel\n }\n },\n width: {\n value: 0,\n meta: {\n sanitization: intSanitizer,\n typeCheck: Number.isInteger\n }\n },\n height: {\n value: 0,\n meta: {\n sanitization: intSanitizer,\n typeCheck: Number.isInteger\n }\n },\n minUnitWidth: {\n value: 50,\n meta: {\n sanitization: intSanitizer,\n typeCheck: Number.isInteger\n }\n },\n minUnitHeight: {\n value: 50,\n meta: {\n sanitization: intSanitizer,\n typeCheck: Number.isInteger\n }\n },\n config: {\n value: null,\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Object',\n sanitization: (config, oldConfig) => {\n const oldConf = mergeRecursive({}, oldConfig);\n const defConfig = mergeRecursive(oldConf, DEFAULT_CONFIG);\n const newConf = mergeRecursive(defConfig, config);\n return newConf;\n }\n\n }\n }\n};\n","/**\n * This file exports constants that will be used to\n * create the state store of the table layout.\n */\n/**\n * The index of top, bottom and center in the matrix\n */\nexport const VIEW_INDEX = {\n top: 0,\n center: 1,\n bottom: 2\n};\n\n/**\n * The width of the grid suppied by the user.\n */\nexport const GRID_WIDTH = 'width';\n\n/**\n * The height of the grid supplied by the user.\n */\nexport const GRID_HEIGHT = 'height';\n\n/**\n * The border for the grid\n */\nexport const BORDER = 'border';\n\n /**\n * The index of the first visible row in view matrix.\n */\nexport const ROW_POINTER = 'rowPointer';\n\n/**\n * The index of the first visible column in the view matrix.\n */\nexport const COLUMN_POINTER = 'columnPointer';\n\n/**\n * Flag to specify whether row sizes should be equal.\n */\nexport const ROW_SIZE_IS_EQUAL = 'isRowSizeEqual';\n\n/**\n * Flag to specify whether column sizes are equal.\n */\nexport const COLUMN_SIZE_IS_EQUAL = 'isColumnSizeEqual';\n\n/**\n * Field to store an array an of the widths of visible columns.\n * @computed\n */\nexport const COLUMN_WIDTHS = 'visibleColumnWidths';\n\n/**\n * Field to store an array of heights of visible rows.\n * @computed\n */\nexport const ROW_HEIGHTS = 'visibleRowHeights';\n\n/**\n * Field to store the width of the left matrix.\n * @computed\n */\nexport const LEFT_MATRIX_WIDTH = 'leftMatrixWidth';\n\n/**\n * Field to store the width of the right matrix.\n * @computed\n */\nexport const RIGHT_MATRIX_WIDTH = 'rightMatrixWidth';\n\n/**\n * Field to store the height of the top matrix.\n * @computed\n */\nexport const TOP_MATRIX_HEIGHT = 'topMatrixHeight';\n\n/**\n * Field to store the height of the bottom matrix.\n * @computed\n */\nexport const BOTTOM_MATRIX_HEIGHT = 'bottomMatrixHeight';\n\n/**\n * The dom element to render the layout inside.\n */\nexport const MOUNT_POINT = 'mount';\n\n/**\n * The id attribute of the left table element.\n */\nexport const LEFT_TABLE_ID = 'grid-left';\n\n/**\n * The id attribute of the right table element.\n */\nexport const RIGHT_TABLE_ID = 'grid-right';\n\n/**\n * The id attribute of the top table.\n */\nexport const TOP_TABLE_ID = 'grid-top';\n\n/**\n * The id attribute of the bottom table.\n */\nexport const BOTTOM_TABLE_ID = 'grid-bottom';\n\n/**\n * The id attribute of the center table.\n */\nexport const CENTER_TABLE_ID = 'grid-center';\n\n/**\n * The id attribute of the top div.\n */\nexport const TOP_DIV_ID = 'muze-div-top';\n\n/**\n * The id attribute of the bottom div.\n */\nexport const BOTTOM_DIV_ID = 'muze-div-bottom';\n\n/**\n * The id attribute of the center div.\n */\nexport const CENTER_DIV_ID = 'muze-div-center';\n\n/**\n * Field that indicates if the row configuration has changed\n */\nexport const HAVE_ROWS_CHANGED = 'haveRowsChanged';\n\n/**\n * Field that indicates if the column configuration has changed\n */\nexport const HAVE_COLUMNS_CHANGED = 'haveColumnsChanged';\n\n/**\n * Field that indicates if the values configuration for the center matrix has changed\n */\nexport const HAVE_VALUES_CHANGED = 'haveValuesChanged';\n\n/**\n * Field that indicates the width of row matrix\n */\nexport const ROW_MATRIX_WIDTH = 'rowMatrixWidth';\n\n/**\n * Field that indicates the height of row matrix\n */\nexport const COLUMN_MATRIX_HEIGHT = 'columnMatrixHeight';\n\n/**\n * Field that indicates the unit width of layout\n */\nexport const UNIT_WIDTH = 'unitWidth';\n\n/**\n * Field that indicates the unit height of layout\n */\nexport const UNIT_HEIGHT = 'unitHeight';\n\n/**\n * Field that indicates the style object\n */\nexport const STYLE = 'style';\n\n/**\n * Field that indicates the color configuration\n */\nexport const COLOR = 'color';\n\n/**\n * Field that indicates width\n */\nexport const WIDTH = 'width';\n\n/**\n * Field that indicates collpase property for border\n */\nexport const COLLAPSE = 'collapse';\n\n/**\n * Field that indicates spacing property for border\n */\nexport const SPACING = 'spacing';\n\n/**\n * Field that indicates spacing property for border\n */\nexport const DISTRIBUTION = 'distribution';\n\n/**\n * Field that indicates spacing property for border\n */\nexport const GUTTERSPACE = 'gutterSpace';\n\n/**\n * Field that indicates spacing property for border\n */\nexport const BREAK_PAGE = 'breakPage';\n\n/**\n * Field that indicates spacing property for border\n */\nexport const SHOW_ROW_BORDERS = 'showRowBorders';\n\n/**\n * Field that indicates spacing property for border\n */\nexport const SHOW_COL_BORDERS = 'showColBorders';\n\n/**\n * Field that indicates spacing property for border\n */\nexport const SHOW_VALUE_BORDERS = 'showValueBorders';\n\nexport const HEIGHT = 'height';\nexport const COLUMN = 'column';\nexport const ROW = 'row';\nexport const TOP = 'top';\nexport const LEFT = 'left';\nexport const RIGHT = 'right';\nexport const BOTTOM = 'bottom';\nexport const CENTER = 'center';\nexport const CLICK = 'click';\nexport const ROW_LEFT = 'rowLeft';\nexport const ROW_RIGHT = 'rowRight';\nexport const COLUMN_BOTTOM = 'colBottom';\nexport const COLUMN_TOP = 'colTop';\nexport const AUTO = 'auto';\nexport const ROW_SPAN = 'rowSpan';\nexport const COL_SPAN = 'colSpan';\nexport const ROW_ROOT = 'rowRoot';\nexport const COLUMN_ROOT = 'columnRoot';\nexport const PRIMARY = 'primary';\nexport const SECONDARY = 'secondary';\n","import { sanitizeIP, mergeRecursive } from 'muze-utils';\nimport { TOP, CENTER, BOTTOM } from '../enums/constants';\n\n/*\n * This is the abstract implementation of the root layout. This takes care of common work which all the layouts\n * has to handle. The common work includes sanitizaion of inputs, update, rerender, dispose etc. This class can't be\n * used directly (as ofcourse this is an abstract implementaiton), the class which is implementing it has to implement\n * the necessary methods and gives its on visual.\n */\n\n/**\n * This class is used to create a generic layout. It can be extended to create layouts\n * of different types\n * @class GenericLayout\n */\nexport default class GenericLayout {\n\n /**\n * Creates an instance of TableLayout.\n * @param {HTMLElement} mountPoint DOM element/d3 selection where the layout is to be mounted\n * @param {Object} measurement The dimensions of the layout\n * @param {Object} config configuration to be given for the layout\n * @param {Object} dependencies external dependencies.\n * @memberof GenericLayout\n *\n * measurement : {\n * width : number => width of the container\n * height : number => height of the container\n * unitHeight : number => height of unit of the cells\n * unitWidth : number => width of unit of the cells\n * }\n *\n */\n constructor (mountPoint, measurement, config, dependencies) {\n this._config = {};\n this._measurement = {};\n this._matrices = [];\n // External dependencies to be included for the layout. This includes the ext global dependencies like\n // smartlabel which has one single implementation of throughout the page or per isntance\n this._dependencies = dependencies;\n\n this.measurement(measurement);\n this.mountPoint(mountPoint);\n this.config(config);\n }\n\n /**\n * Returns an object which is used to recreate the layout.\n * @return {Object} the serialized components\n */\n serialize () {\n return {\n measurement: this.measurement(),\n config: this.config(),\n matrices: this.matrices()\n };\n }\n\n /**\n * Sets/Gets the config for the layout\n * @param {Object} config configuration for the layout\n * @return {Layout|Object} Gets the Config/ Returns this instance when set\n */\n config (config) {\n if (config) {\n this._config = mergeRecursive(this._config || {}, config);\n return this;\n }\n return this._config;\n }\n\n /**\n * Sets/Gets the measurement for the layout\n * @param {Object} measurement measurement for the layout\n * @return {Layout|Object} Gets the measurement/ Returns this instance when set\n */\n measurement (measurement) {\n if (measurement) {\n this._measurement = mergeRecursive(this._measurement || {}, measurement);\n\n return this;\n }\n return this._measurement;\n }\n\n /**\n * Sets/Gets the matrices for the layout\n * @param {Object} matrices matrices for the layout\n * @return {Layout|Object} Gets the matrices/ Returns this instance when set\n */\n matrices (matrices) {\n if (matrices) {\n this._matrices = sanitizeIP.typeObj([TOP, CENTER, BOTTOM], matrices);\n\n return this;\n }\n return this._matrices;\n }\n\n /**\n * Sets/Gets the matrix for row\n * @param {Object} matrix matrices for the layout\n * @return {Layout|Object} Gets the matrix/ Returns this instance when set\n */\n rowMatrix (matrix) {\n if (matrix) {\n this._rowMatrix = matrix;\n return this;\n }\n return this._rowMatrix;\n }\n\n /**\n * Sets/Gets the matrix for columns\n * @param {Object} matrix matrices for the layout\n * @return {Layout|Object} Gets the matrix/ Returns this instance when set\n */\n columnMatrix (matrix) {\n if (matrix) {\n this._columnMatrix = matrix;\n return this;\n }\n return this._columnMatrix;\n }\n\n /**\n * Sets/Gets the matrix for value\n * @param {Object} matrix matrices for the layout\n * @return {Layout|Object} Gets the matrix/ Returns this instance when set\n */\n centerMatrix (matrix) {\n if (matrix) {\n this._centerMatrix = matrix;\n return this;\n }\n return this._centerMatrix;\n }\n\n /**\n * Sets/Gets the mountPoint for the layout\n * @param {Object} mountPoint mountPoint for the layout\n * @return {Layout|Object} Gets the mountPoint/ Returns this instance when set\n */\n mountPoint (mountPoint) {\n if (mountPoint) {\n this._mountPoint = mountPoint;\n\n return this;\n }\n return this._mountPoint;\n }\n}\n","import * as FieldNames from '../enums/constants';\n\n/**\n * Default configuration of the layout\n * @return {Object} returns the default configuration\n */\nexport const DEFAULT_CONFIGURATION = {\n [FieldNames.BORDER]: {\n [FieldNames.STYLE]: 'solid',\n [FieldNames.COLOR]: '#d6d6d6',\n [FieldNames.WIDTH]: 2,\n [FieldNames.COLLAPSE]: true,\n [FieldNames.SPACING]: 0\n },\n [FieldNames.GUTTERSPACE]: { rows: [], columns: [] },\n [FieldNames.DISTRIBUTION]: { rows: [], columns: [] },\n [FieldNames.BREAK_PAGE]: { rows: [], columns: [] },\n [FieldNames.ROW_SIZE_IS_EQUAL]: false,\n [FieldNames.COLUMN_SIZE_IS_EQUAL]: false,\n [FieldNames.COLUMN_POINTER]: 0,\n [FieldNames.ROW_POINTER]: 0\n};\n\n/**\n * Default measurements for the layout\n * @return {Object} returns the default measurements\n */\nexport const DEFAULT_MEASUREMENTS = {\n [FieldNames.GRID_WIDTH]: 100,\n [FieldNames.GRID_HEIGHT]: 100,\n [FieldNames.UNIT_WIDTH]: 100,\n [FieldNames.UNIT_HEIGHT]: 100\n};\n\nexport const BLANK_BORDERS = 'rgba(0,0,0,0)';\n","import { ROW_LEFT, ROW_RIGHT, COLUMN_BOTTOM, COLUMN_TOP, TOP, BOTTOM } from '../enums/constants';\n/**\n * This callback is used to filter the array of\n * placeholder cells and filter out cells which have\n * appeared in a previous row.\n *\n * @param {Placeholder} colData Instance of placeholder.\n * @param {number} colIdx The index of the placeholder in array.\n * @param {Array} matrix The 2d array for which filtering is to be done\n * @param {number} rIdx The index of the row of the placeholder in array.\n * @param {string} type The type of matrix it is (rowLeft, rowRight, colTop, colBottom)\n * @return {boolean} flag to keep/remove element.\n */\nconst columnFilter = (colData, colIdx, matrix, rIdx, type) => {\n const previousRow = matrix[rIdx - 1];\n const currentRow = matrix[rIdx];\n\n // Row Span for left\n if (type === ROW_LEFT) {\n if (!previousRow) {\n return colData;\n }\n let i = 0;\n for (;i <= colIdx; i += 1) {\n if (currentRow[i].valueOf() !== previousRow[i].valueOf()) {\n break;\n }\n }\n return (i - 1 === colIdx) ? null : colData;\n } else if (type === ROW_RIGHT) {\n if (!previousRow || colIdx === 0) {\n return colData;\n }\n let j = colIdx;\n for (; j < currentRow.length; j += 1) {\n if (previousRow[j].valueOf() !== currentRow[j].valueOf()) {\n break;\n }\n }\n return (j === currentRow.length) ? null : colData;\n } else if (type === COLUMN_BOTTOM) {\n if (rIdx === 0) {\n return colData;\n }\n const prevCell = currentRow[colIdx - 1];\n if (prevCell) {\n if (prevCell.valueOf() === colData.valueOf()) {\n const nextRow = matrix[rIdx + 1];\n if (!nextRow) {\n return null;\n }\n if (nextRow[colIdx].valueOf() === nextRow[colIdx - 1].valueOf()) {\n return null;\n }\n return colData;\n }\n return colData;\n }\n return colData;\n } else if (type === COLUMN_TOP) {\n if (rIdx === matrix.length - 1 && matrix.length > 1) {\n return colData;\n }\n const prevCell = currentRow[colIdx - 1];\n if (prevCell && (prevCell.valueOf() === colData.valueOf())) {\n const prevRow = matrix[rIdx - 1];\n if (prevRow) {\n if (prevRow[colIdx].valueOf() === prevRow[colIdx - 1].valueOf()) {\n return null;\n }\n return colData;\n }\n return null;\n }\n return colData;\n }\n return colData;\n};\n\n/**\n * This callback is used to calculate the rowspan\n * by checking for repeating entries in subsequent rows\n * at the specified column.\n *\n * @param {Placeholder} colData Instance of placeholder.\n * @param {number} colIdx The index of the placeholder in the array.\n * @param {Array} matrix The 2d array for which filtering is to be done\n * @param {number} rIdx The index of the row of the placeholder in array.\n * @return {number} The row span.\n */\nconst calcRowSpan = (colData, colIdx, matrix, rIdx) => {\n let count = 1;\n // if data is not header cell then rowspan\n // has to be 1\n if (!colData || typeof colData.valueOf() !== 'string') {\n return 1;\n }\n let isNull = false;\n while (!isNull) {\n if (matrix[rIdx + count] && matrix[rIdx + count][colIdx] === null) {\n count += 1;\n } else {\n isNull = true;\n }\n }\n return count;\n};\n/**\n * This callback is used to calculate the rowspan\n * by checking for repeating entries in subsequent rows\n * at the specified column.\n *\n * @param {Placeholder} colData Instance of placeholder.\n * @param {number} colIdx The index of the placeholder in the array.\n * @param {Array} matrix The 2d array for which filtering is to be done\n * @param {number} rIdx The index of the row of the placeholder in array.\n * @return {number} The row span.\n */\nconst calcColSpan = (colData, colIdx, matrix, rIdx) => {\n let count = 1;\n // if data is not header cell then rowspan\n // has to be 1\n if (!colData || typeof colData.valueOf() !== 'string') {\n return 1;\n }\n let isNull = false;\n while (!isNull) {\n if (matrix[rIdx][colIdx + count] === null) {\n count += 1;\n } else {\n isNull = true;\n }\n }\n return count;\n};\n\n// create a masking matrix to strip out repeating columns\n// and calculate rowspan.\nconst mask = function (matrix, type) {\n return matrix.map((row, rIdx) => {\n if (type === ROW_LEFT || type === ROW_RIGHT) {\n const filteredRow = row.map((col, colIndex) => columnFilter(col, colIndex, matrix, rIdx, type));\n const temp = [];\n const diff = row.length - filteredRow.length;\n for (let i = 0; i < diff; i += 1) {\n temp.push(null);\n }\n if (type === ROW_RIGHT) {\n temp.unshift(...filteredRow);\n return temp;\n }\n temp.push(...filteredRow);\n return temp;\n }\n\n const filteredRow = row.map((col, colIndex) => columnFilter(col, colIndex, matrix, rIdx, type));\n const temp = [];\n temp.push(...filteredRow);\n return temp;\n });\n};\n\n/**\n * This function is used to set the col and row spans\n * for the matrices based on repeated/hierarchichal data\n *\n * @export\n * @param {Array} matrix The 2d array for which filtering is to be done\n * @param {string} type Type of array (center, top, bottom)\n * @param {number} index Index of array in the row\n * @return {Object} containing the view matrix and their spans\n */\nexport function cellSpanMaker (matrix, type, index) {\n let span = '';\n if (type === TOP || type === BOTTOM) {\n span = type === TOP ? COLUMN_TOP : COLUMN_BOTTOM;\n const viewMatrix = mask(matrix, span);\n const spans = viewMatrix.map((row, ridx) => row.map((col, i) => calcColSpan(col, i, viewMatrix, ridx))\n .filter(col => col !== 1));\n return { viewMatrix, spans };\n } else if (index === 0 || index === 2) {\n span = index === 0 ? ROW_LEFT : ROW_RIGHT;\n const viewMatrix = mask(matrix, span);\n const spans = [];\n viewMatrix.forEach((row, ridx) => {\n spans[ridx] = spans[ridx] || [];\n row.forEach((col, i) => {\n if (viewMatrix[ridx][i]) {\n const currSpan = calcRowSpan(col, i, viewMatrix, ridx);\n currSpan && spans[ridx].push(currSpan);\n }\n });\n });\n return { viewMatrix, spans };\n }\n return { viewMatrix: matrix };\n}\n","import { makeElement, selectElement } from 'muze-utils';\nimport { cellSpanMaker } from './span-maker';\nimport {\n TOP, LEFT, RIGHT, BOTTOM, CENTER, WIDTH, ROW_SPAN, COL_SPAN\n} from '../enums/constants';\nimport { BLANK_BORDERS } from './defaults';\n\n/**\n * Creates a table element of the layout\n *\n * @param {Object} mount Mount point for table elements\n * @param {string} className defines class name\n * @param {Array} rowData set of rows for the table\n * @return {Selection} set of selections for the table\n */\nfunction renderTable (mount, className, rowData) {\n const table = makeElement(mount, 'table', ['layout'], `${className}-table`);\n const body = makeElement(table, 'tbody', ['layout'], `${className}-body`);\n const rows = makeElement(body, 'tr', rowData, `${className}-tr`);\n const cells = makeElement(rows, 'td', (d, i) => d.filter(e => e !== null && e.config().show).map(e =>\n ({ placeholder: e, rowIndex: i })), `${className}-td`, {}, key => key.placeholder.id);\n\n return { table, body, rows, cells };\n}\n\nfunction applyRowBorders (cells, borderStyle, showBorders, color) {\n [TOP, BOTTOM].forEach((borderType) => {\n const style = `${borderStyle} ${showBorders[borderType] ? color : BLANK_BORDERS}`;\n cells.style(`border-${borderType}`, style);\n });\n}\n\nfunction applyColBorders (cells, borderStyle, showBorders, color) {\n [LEFT, RIGHT].forEach((borderType) => {\n const style = `${borderStyle} ${showBorders[borderType] ? color : BLANK_BORDERS}`;\n cells.style(`border-${borderType}`, style);\n });\n}\n\n/**\n * Applies borders to the cells in a matrix\n *\n * @param {Selection} cells Set of cells made from the matrix\n * @param {Object} border Border info for layout\n * @param {string} type Type of matrix(top/center/bottom)\n * @param {number} index Column index of matrix in the row\n */\nfunction applyBorders (cells, border, type, index) {\n const {\n width,\n style,\n color,\n showRowBorders,\n showColBorders,\n showValueBorders\n } = border;\n const borderStyle = `${width}px ${style}`;\n\n if (type === CENTER && index === 1) {\n [TOP, BOTTOM, LEFT, RIGHT].forEach((borderType) => {\n cells.style(`border-${borderType}`, `${borderStyle} ${showValueBorders[borderType] ?\n color : BLANK_BORDERS}`);\n });\n } else if (type === CENTER) {\n applyRowBorders(cells, borderStyle, showRowBorders, color);\n } else if (index === 1) {\n applyColBorders(cells, borderStyle, showColBorders, color);\n }\n}\n\n/**\n * Renders a set of matrices in a row\n *\n * @param {Array} matrices Set of matrices in a row\n * @param {Selection} mountPoint Mount point for the row\n * @param {string} type top/center/bottom\n * @param {Object} dimensions dimensions of the matrix\n */\nfunction renderMatrix (matrices, mountPoint, type, dimensions, classPrefix) {\n matrices.forEach((matrix, index) => {\n // Creating containers for each matrix individually\n const containerForMatrix = makeElement(mountPoint, 'div', [1], `${classPrefix}-grid-${type}-${index + 1}`)\n .classed(`${classPrefix}-grid-${type}`, true)\n .classed(`${classPrefix}-grid`, true);\n\n const {\n viewMatrix,\n spans\n } = cellSpanMaker(matrix, type, index);\n\n // Rendering the table components\n const { cells } = renderTable(containerForMatrix, `${classPrefix}-grid`, viewMatrix);\n\n if (type === CENTER && spans) {\n cells.attr(ROW_SPAN, function (cell, colIndex) {\n const placeholder = cell.placeholder;\n selectElement(this).style('height', `${placeholder.availHeight() + dimensions.border.width}px`);\n return spans[cell.rowIndex][colIndex];\n });\n } else if ((type === TOP || type === BOTTOM) && index === 1) {\n cells.attr(COL_SPAN, function (cell, colIndex) {\n const span = spans[cell.rowIndex][colIndex];\n const placeholder = cell.placeholder;\n if (span > 1) {\n placeholder.setAvailableSpace(0, placeholder.availHeight());\n }\n selectElement(this).style('height', `${placeholder.availHeight()}px`);\n return span;\n });\n }\n // Rendering content within placeholders\n cells.each(function (cell) {\n cell.placeholder && cell.placeholder.render(this);\n }).exit().each((cell) => {\n cell.placeholder && cell.placeholder.remove();\n });\n\n applyBorders(cells, dimensions.border, type, index);\n });\n}\n\n/**\n * Renders all the matrices of the layout\n *\n * @export\n * @param {Array} matrices Set of matrices in the layout\n * @param {Array} mountPoints Mount points for each row of matrix\n * @param {Array} layoutDimensions Dimensions(height/width) of all the matrices\n */\nexport function renderMatrices (context, matrices, layoutDimensions) {\n const {\n top,\n center,\n bottom\n } = matrices;\n const {\n classPrefix\n } = context.config();\n const {\n width\n } = context.measurement();\n const mount = context.mountPoint();\n\n const data = [\n { type: TOP, matrix: top },\n { type: CENTER, matrix: center },\n { type: BOTTOM, matrix: bottom }\n ];\n makeElement(mount, 'div', data, `${classPrefix}-grid-layout-row`)\n .each(function (d, i) {\n const row = selectElement(this);\n row.classed(`${classPrefix}-grid-layout-row-${i}`, true);\n renderMatrix(d.matrix, row, d.type, layoutDimensions, classPrefix);\n })\n .style(WIDTH, `${Math.ceil(width)}px`);\n}\n","/**\n * This file exports utility functions that are used across the layout module\n */\nimport { Symbols } from 'muze-utils';\nimport { PRIMARY, SECONDARY, HEIGHT, WIDTH } from '../enums/constants';\n\nconst nest = Symbols.nest;\n/**\n *\n *\n * @param {*} isTransposed\n * @returns\n */\nconst getMeasureInfo = (isTransposed) => {\n if (isTransposed) {\n return {\n firstMeasure: HEIGHT,\n secondMeasure: WIDTH\n };\n }\n return {\n firstMeasure: WIDTH,\n secondMeasure: HEIGHT\n };\n};\n\n/**\n *\n *\n * @param {*} i\n * @param {*} page\n * @returns\n */\nconst findInPage = (i, page) => {\n let count = 0;\n for (const x in page) {\n if (i < page[x]) {\n count = x;\n break;\n }\n }\n return count;\n};\n\n/**\n * Creates a single matrix from two matrices\n *\n * @param {Array} matrix Input matrix\n * @return {Array} Joined matrix\n * @memberof VisualMatrix\n */\nexport const combineMatrices = (matrix, config) => {\n const { isTransposed } = config;\n let joinedMatrix = matrix[0].length > 0 ? matrix[0] : matrix[1];\n if (isTransposed) {\n joinedMatrix = matrix[0].length > 0 ? [...matrix[0]] : [];\n joinedMatrix = matrix[1].length > 0 ? [...joinedMatrix, ...matrix[1]] : joinedMatrix;\n } else {\n joinedMatrix = joinedMatrix.map((row, rowIndex) => {\n let rowData = [];\n if (matrix[0].length > 0) {\n rowData = [...matrix[0][rowIndex]];\n }\n if (matrix[1].length > 0) {\n rowData = [...rowData, ...matrix[1][rowIndex]];\n }\n return rowData;\n });\n }\n return joinedMatrix;\n};\n\n/**\n * Creates a hirachical tree from the context\n *\n * @param {Object} context context for creating tree\n * @return {Object} nested tree\n */\nexport const createTree = (context) => {\n let matrixTree = {};\n let lastLevelKey = 0;\n let facet = PRIMARY;\n const nestFn = nest();\n const keys = [];\n const layoutMatrix = context._layoutMatrix;\n const primaryMatrix = context.primaryMatrix();\n const secondaryMatrix = context.secondaryMatrix();\n const { isTransposed, breakPage } = context.config();\n\n if (!isTransposed) {\n if (primaryMatrix.length === 0) {\n facet = PRIMARY;\n } else if (secondaryMatrix.length === 0) {\n facet = SECONDARY;\n } else {\n facet = primaryMatrix.length >= secondaryMatrix.length ? PRIMARY : SECONDARY;\n }\n if (primaryMatrix.length > 0) {\n for (let i = 0; i < primaryMatrix[0].length - 1; i++) {\n keys.push(i);\n }\n keys.push(primaryMatrix[0].length - 1);\n if (facet === SECONDARY || secondaryMatrix.length === 0) {\n lastLevelKey = primaryMatrix[0].length - 1;\n }\n }\n if (secondaryMatrix.length > 0) {\n const keyLength = primaryMatrix.length > 0 ? primaryMatrix[0].length : 0;\n for (let i = secondaryMatrix[0].length - 1; i > 0; i--) {\n keys.push(i + keyLength);\n }\n keys.push(keyLength);\n\n if (facet === PRIMARY) {\n lastLevelKey = keyLength;\n }\n } else {\n lastLevelKey = primaryMatrix.length > 0 ? primaryMatrix[0].length - 1 : 0;\n }\n keys.forEach((key) => {\n let counter = -1;\n return nestFn.key((d) => {\n counter++;\n return `${d[key].valueOf()}-${findInPage(counter, breakPage)}`;\n });\n });\n matrixTree = nestFn.entries(layoutMatrix);\n } else {\n if (primaryMatrix.length === 0) {\n facet = PRIMARY;\n } else if (secondaryMatrix.length === 0) {\n facet = SECONDARY;\n } else {\n facet = primaryMatrix.length >= secondaryMatrix.length ? PRIMARY : SECONDARY;\n }\n if (primaryMatrix.length > 0) {\n for (let i = 0; i < primaryMatrix.length - 1; i++) {\n keys.push(i);\n }\n // if (facet === PRIMARY) {\n keys.push(primaryMatrix.length - 1);\n // } else {\n if (facet === SECONDARY) {\n lastLevelKey = primaryMatrix.length - 1;\n }\n }\n if (secondaryMatrix.length > 0) {\n const primaryMatrixLength = primaryMatrix.length;\n for (let i = secondaryMatrix.length - 1; i > 0; i--) {\n keys.push(i + primaryMatrixLength);\n }\n // if (facet === SECONDARY) {\n keys.push(primaryMatrixLength);\n // }\n if (facet === PRIMARY) {\n lastLevelKey = primaryMatrixLength;\n }\n }\n keys.forEach((key) => {\n let counter = -1;\n return nestFn.key((d) => {\n counter++;\n return `${d[key].valueOf()}-${findInPage(counter, breakPage)}`;\n });\n });\n let newMatrix = [];\n newMatrix = layoutMatrix[0].map((col, colIndex) => layoutMatrix.map(row => row[colIndex]));\n matrixTree = nestFn.entries(newMatrix);\n }\n return { tree: matrixTree, lastLevelKey };\n};\n\n/**\n * Gives the min measues\n *\n * @param {boolean} isTransposed is column matrix\n * @param {Object} unitMeasures min measures to be given to cells\n * @return {Object} dimension min cell\n */\nexport const getMinMeasures = (isTransposed, unitMeasures) => {\n if (!isTransposed) {\n return {\n height: unitMeasures.height,\n width: 0\n };\n }\n return {\n height: 0,\n width: unitMeasures.width\n };\n};\n\n/**\n * Get the logical space from the tree\n *\n * @param {Node} item tree to be calculated\n * @param {number} measures width and height\n * @param {Array} minMeasures min measures for a cell\n * @param {Array} maxMeasure max measures for a col/row\n * @return {Object} dimension\n */\nexport const getLogicalSpace = (item, measures, minMeasures, maxMeasure = []) => {\n const { firstMeasure, secondMeasure } = measures;\n let firstMeasureValue = 0;\n let secondMeasureValue = 0;\n item.values.forEach((valueArray) => {\n let fMeasure = 0;\n let sMeasure = 0;\n valueArray.forEach((placeholder, colIndex) => {\n placeholder.logicalSpace(null);\n const space = placeholder.getLogicalSpace();\n sMeasure = Math.max(sMeasure, +space[secondMeasure], minMeasures[secondMeasure]);\n maxMeasure[colIndex] = Math.max(maxMeasure[colIndex] || 0, space[firstMeasure]);\n fMeasure += +maxMeasure[colIndex];\n });\n secondMeasureValue += sMeasure;\n firstMeasureValue = Math.max(firstMeasureValue, fMeasure);\n item.space = {\n [secondMeasure]: Math.ceil(secondMeasureValue),\n [firstMeasure]: Math.ceil(firstMeasureValue)\n };\n });\n return {\n [secondMeasure]: secondMeasureValue,\n [firstMeasure]: firstMeasureValue\n };\n};\n\n/**\n * Computes the logical spcae taken by the matrix tree\n *\n * @param {*} [item={}] tree to be viewed\n * @param {boolean} [isTransposed=false] is column matrix\n * @param {*} unitMeasures min measues for a cell\n * @param {Array} maxMeasure max measures for a col/row\n * @return {Object} logical space taken\n */\nexport const computeLogicalSpace = (item = {}, config, maxMeasures) => {\n const { isTransposed = false, unitMeasures } = config;\n const { firstMeasure, secondMeasure } = getMeasureInfo(isTransposed);\n const { values } = item;\n const minMeasures = getMinMeasures(isTransposed, unitMeasures);\n if (values[0].key) {\n const logicalSpace = { [firstMeasure]: 0, [secondMeasure]: 0 };\n\n values.forEach((valueItem) => {\n // Compute logical space for lowest level\n const space = computeLogicalSpace(valueItem, config, maxMeasures);\n // Set logical space for first measure\n logicalSpace[firstMeasure] = Math.max(logicalSpace[firstMeasure], space[firstMeasure],\n minMeasures[firstMeasure]);\n // Set logical space for second measure\n logicalSpace[secondMeasure] += +space[secondMeasure];\n });\n item.space = logicalSpace;\n return logicalSpace;\n }\n return getLogicalSpace(item, { firstMeasure, secondMeasure }, minMeasures, maxMeasures);\n};\n\n/**\n * Gives the space taken by a row\n *\n * @param {Array} row matrix array of rows\n * @return {Object} dimension of the row\n */\nexport const spaceTakenByRow = (row) => {\n let height = 0;\n let width = 0;\n row.forEach((col) => {\n const spaces = col.getLogicalSpace();\n height = Math.max(height, spaces.height);\n width += spaces.width;\n });\n return {\n width,\n height\n };\n};\n\n/**\n * Gives the space taken by a column\n *\n * @param {Array} matrix column matrix\n * @param {number} colIndex column index\n * @return {Object} dimension of the column\n */\nexport const spaceTakenByColumn = (matrix, colIndex) => {\n let height = 0;\n let width = 0;\n matrix.forEach((row) => {\n const col = row[colIndex];\n const spaces = col.getLogicalSpace();\n width = Math.max(width, spaces.width);\n height += spaces.height;\n });\n return {\n width,\n height\n };\n};\n\n/**\n * Creates different level matrices\n *\n * @param {Object} item matrix tree\n * @param {boolean} isTransposed is column matrix\n * @return {Object} matrix of each level\n */\nexport const createMatrixEachLevel = (item, isTransposed) => {\n if (item.values[0].key) {\n const arr = [];\n item.values.forEach((child) => {\n if (!isTransposed) {\n arr.push(...createMatrixEachLevel(child, isTransposed));\n } else {\n const eachLevel = createMatrixEachLevel(child, isTransposed);\n eachLevel.forEach((e, i) => {\n arr[i] = arr[i] || [];\n arr[i].push(...e);\n });\n }\n });\n item.matrix = arr;\n return arr;\n }\n if (!isTransposed) {\n item.matrix = item.values;\n } else {\n item.matrix = item.values[0].map((col, colIndex) => item.values.map(row => row[colIndex]));\n }\n return item.matrix;\n};\n\n/**\n * Breaks the matrix into two part\n *\n * @param {Array} matrix input matrix\n * @param {boolean} isTransposed is column matrix\n * @param {number} breakPointer point in matrix where it is to be broken\n * @return {Array} two broken matrix\n */\nexport const breakMatrix = (matrix, isTransposed, breakPointer) => {\n const primaryMatrix = [];\n const secondaryMatrix = [];\n if (isTransposed) {\n matrix.forEach((row, rowIndex) => {\n if (rowIndex >= breakPointer) {\n secondaryMatrix.push(row);\n } else {\n primaryMatrix.push(row);\n }\n });\n } else {\n matrix.forEach((row, rowIndex) => {\n row.forEach((column, columnIndex) => {\n if (columnIndex >= breakPointer) {\n secondaryMatrix[rowIndex] = secondaryMatrix[rowIndex] || [];\n secondaryMatrix[rowIndex].push(column);\n } else {\n primaryMatrix[rowIndex] = primaryMatrix[rowIndex] || [];\n primaryMatrix[rowIndex].push(column);\n }\n });\n });\n }\n return [primaryMatrix, secondaryMatrix];\n};\n\n/**\n * Distributed width returned\n *\n * @param {Object} context context for the width distibution\n * @return {number} distributed widths\n */\nexport const getDistributedWidth = (context, layoutConfig) => {\n const {\n availableWidth,\n width,\n row\n } = context;\n const {\n isDistributionEqual,\n isTransposed,\n distribution\n } = layoutConfig;\n let distSum = 0;\n if (distribution && distribution[0]) {\n distSum = distribution.reduce((t, n) => {\n t += n;\n return t;\n });\n }\n return row.map((col, colIndex) => {\n const space = col.getLogicalSpace().width;\n let distWidth = (space + (availableWidth - width) * (space / width));\n if (isTransposed) {\n if (distribution.length > 0) {\n distWidth = (availableWidth * distribution[colIndex] / distSum);\n } else if (isDistributionEqual || width === 0) {\n const rowLen = row.length;\n distWidth = (availableWidth / rowLen);\n }\n }\n return Math.floor(distWidth);\n });\n};\n\n/**\n * Distributeed heights returned\n *\n * @param {Object} context input for the height distribution\n * @return {Object} distribured heights\n */\nexport const getDistributedHeight = (context) => {\n let distSum = 0;\n let gutterSum = 0;\n let heightWithoutGutter = 0;\n const {\n isTransposed,\n distribution,\n availableHeight,\n height,\n isDistributionEqual,\n gutter,\n matrix,\n cIdx\n } = context;\n\n if (distribution && distribution[0] !== undefined) {\n distSum = distribution.reduce((t, n) => {\n t += n;\n return t;\n });\n }\n if (gutter && gutter[0] !== undefined) {\n gutterSum = gutter.reduce((t, n) => {\n t += n;\n return t;\n });\n }\n heightWithoutGutter = availableHeight - Math.floor(availableHeight * gutterSum);\n\n const colLen = matrix.length;\n return matrix.map((row, rIdx) => {\n const col = row[cIdx];\n const space = col.getLogicalSpace().height;\n let distHeight = (space + (heightWithoutGutter - height) * (space / height));\n\n if (!isTransposed) {\n if (distribution.length > 0 && colLen === distribution.length) {\n distHeight = (heightWithoutGutter * distribution[rIdx] / distSum);\n } else if (isDistributionEqual || context.height === 0) {\n distHeight = (heightWithoutGutter / colLen);\n }\n }\n return Math.floor(distHeight);\n });\n};\n\n/**\n *\n *\n * @param {*} arr\n * @param {*} beg\n * @param {*} end\n */\nexport const extraCellsRemover = (arr, beg, end) => arr.slice(beg, -end);\n\n/**\n * Creates matrix instancess\n *\n * @param {Array} [arr=[]] mutated arry\n * @param {number} depth depth of the tree\n * @param {Array} matrixInfo Details about the matrix(tree, etc) to be inserted\n * @param {boolean} layout Instance of layout\n */\nexport const createMatrixInstances = (arr = [], depth, matrixInfo, layout) => {\n const breakPointer = layout._breakPointer;\n const config = layout.config();\n const {\n isTransposed\n } = config;\n const {\n tree,\n layoutMatrix\n } = matrixInfo;\n\n if (depth === 0) {\n const brokenMatrix = breakMatrix(tree.matrix, isTransposed, breakPointer);\n arr.push({\n matrix: tree.matrix,\n primaryMatrix: brokenMatrix[0],\n secondaryMatrix: brokenMatrix[1],\n space: tree.space\n });\n return arr;\n }\n const nextLevel = depth - 1;\n tree.values.forEach((e) => {\n createMatrixInstances(arr, nextLevel, {\n tree: e,\n layoutMatrix\n }, layout);\n });\n return arr;\n};\n","import { mergeRecursive } from 'muze-utils';\n\nexport const PROPS = {\n config: {\n sanitization: (context, value) => mergeRecursive(context._config || {}, value)\n },\n maxMeasures: {},\n availableSpace: {},\n logicalSpace: {}\n};\n","import { PRIMARY } from '../enums/constants';\n/**\n *\n *\n */\nexport const defaultConfig = {\n distribution: [],\n classPrefix: 'muze',\n isDistributionEqual: true,\n unitMeasures: {\n height: 100,\n width: 100,\n border: 1\n },\n isTransposed: false,\n facet: PRIMARY,\n extraCellLengths: []\n};\n","import { mergeRecursive, generateGetterSetters } from 'muze-utils';\nimport {\n createTree,\n extraCellsRemover,\n combineMatrices,\n spaceTakenByColumn,\n getDistributedHeight,\n getDistributedWidth,\n spaceTakenByRow,\n computeLogicalSpace,\n createMatrixEachLevel,\n createMatrixInstances\n } from '../utils';\nimport { PROPS } from './props';\nimport { COLUMN_ROOT, ROW_ROOT, HEIGHT, WIDTH } from '../enums/constants';\nimport { defaultConfig } from './default-config';\n\n/**\n * This class used to create column / row matrix for GridLayout\n *\n * @class VisualMatrix\n */\nexport default class VisualMatrix {\n\n /**\n *Creates an instance of VisualMatrix.\n * @param {any} matrix Two set of matrices\n * @param {any} [config={}] Configuration for VisualMatrix\n * @memberof VisualMatrix\n */\n constructor (matrix, config = {}) {\n // Prepare matrices\n this._lastLevelKey = 0;\n this._primaryMatrix = matrix[0] || [];\n this._secondaryMatrix = matrix[1] || [];\n this._maxMeasures = [];\n this._availableSpace = {};\n\n // Store the config\n generateGetterSetters(this, PROPS);\n const defCon = Object.assign({}, this.constructor.defaultConfig());\n this.config(mergeRecursive(defCon, config));\n\n this._breakPointer = this.config().isTransposed ? matrix[0].length :\n (matrix[0].length > 0 ? matrix[0][0].length : 0);\n this._layoutMatrix = combineMatrices([matrix[0] || [], matrix[1] || []], this.config());\n\n // Create Tree\n this._tree = {\n key: this.config().isTransposed ? COLUMN_ROOT : ROW_ROOT,\n values: this.createTree()\n };\n this._logicalSpace = this.setLogicalSpace();\n }\n\n /**\n *\n *\n * @param {*} params\n * @returns\n * @memberof VisualMatrix\n */\n primaryMatrix (...params) {\n if (params.length) {\n return this;\n }\n return this._primaryMatrix;\n }\n\n /**\n *\n *\n * @param {*} params\n * @returns\n * @memberof VisualMatrix\n */\n secondaryMatrix (...params) {\n if (params.length) {\n return this;\n }\n return this._secondaryMatrix;\n }\n\n /**\n *\n *\n * @param {*} params\n * @returns\n * @memberof VisualMatrix\n */\n tree (...params) {\n if (params.length) {\n return this;\n }\n return this._tree;\n }\n\n /**\n *\n *\n * @static\n * @return\n * @memberof VisualMatrix\n */\n static defaultConfig () {\n return defaultConfig;\n }\n\n /**\n *\n *\n * @return\n * @memberof VisualMatrix\n */\n createTree () {\n const { tree, lastLevelKey } = createTree(this);\n this._lastLevelKey = lastLevelKey;\n return tree;\n }\n\n /**\n * Computes the logical space taken by the entire matrixTree\n *\n * @return {Object} Logical space taken\n * @memberof VisualMatrix\n */\n setLogicalSpace () {\n const {\n isTransposed\n } = this.config();\n const matrixTree = this.tree();\n createMatrixEachLevel(matrixTree, isTransposed);\n return computeLogicalSpace(matrixTree, this.config(), this.maxMeasures());\n }\n\n /**\n * Returns the space taken by visual matrix\n *\n * @return {Object} space taken by the matrix\n * @memberof VisualMatrix\n */\n getLogicalSpace () {\n return this.logicalSpace();\n }\n\n /**\n * Sets the provied space to the visual matrix\n *\n * @param {number} width width provided\n * @param {number} height height provided\n * @memberof VisualMatrix\n */\n setAvailableSpace (width, height) {\n this.availableSpace({ width, height });\n const tree = this.tree();\n const heightMeasures = this.populateMaxMeasures(HEIGHT, tree);\n const widthMeasures = this.populateMaxMeasures(WIDTH, tree);\n const depth = this.calculateDepth(widthMeasures, heightMeasures);\n\n this.viewableMatrix = this.createViewPortMatrix(depth);\n this.viewableMeasures = this.redistribute(this.viewableMatrix, width, height);\n return this;\n }\n\n /**\n * Populate the max measures in the array\n *\n * @param {Array} measures array to be filled with max measures\n * @param {Object} matrixTree matrix tree of visual matrix\n * @param {number} measure width or height\n * @param {number} [depth=0] depth of the tree that to be calculated\n * @memberof VisualMatrix\n */\n populateMaxMeasures (type, matrixTree, depth = 0, measures = []) {\n measures[depth] = Math.max(measures[depth] || 0, matrixTree.space[type]);\n if (matrixTree.values) {\n const childDepth = depth + 1;\n matrixTree.values.forEach((child) => {\n if (child.space) {\n measures = this.populateMaxMeasures(type, child, childDepth, measures);\n }\n });\n }\n return measures;\n }\n\n /**\n * Calculates the depth of the tree that can be viewed\n *\n * @param {Array} widthMeasures array of widths\n * @param {Array} heightMeasures array of heights\n * @return {number} depth of the tree\n * @memberof VisualMatrix\n */\n calculateDepth (widthMeasures, heightMeasures) {\n let i;\n let j;\n const { height, width } = this.availableSpace();\n\n for (i = 0; i < heightMeasures.length; i++) {\n if (heightMeasures[i] <= height) break;\n }\n for (j = 0; j < widthMeasures.length; j++) {\n if (widthMeasures[j] <= width) break;\n }\n return Math.min(widthMeasures.length - 1, Math.max(i, j));\n }\n\n /**\n * Redistributes the provied space to all cells\n *\n * @param {*} viewableMatrix current viewport matrix\n * @param {*} width provied width\n * @param {*} height provied height\n * @return {Object} current viewports matrixes with measures\n * @memberof VisualMatrix\n */\n redistribute (viewableMatrix, width, height) {\n let maxHeights = [];\n let maxWidths = [];\n const {\n isTransposed\n } = this.config();\n\n viewableMatrix.forEach((matrixInst) => {\n const matrix = matrixInst.matrix;\n const mWidth = 0;\n const mHeight = 0;\n const options = { mWidth, mHeight, matrix, width, height, maxHeights, maxWidths };\n const maxMeasures = isTransposed ? this.redistributeColumnWise(options) : this.redistributeRowWise(options);\n maxWidths = maxMeasures.maxWidths;\n maxHeights = maxMeasures.maxHeights;\n });\n\n const measurements = viewableMatrix.map((matrixInst, i) => {\n let heightMeasures;\n let columnMeasures;\n const cellDimOptions = { matrixInst, maxWidths, maxHeights, matrixIndex: i };\n const { heights, widths, rowHeights, columnWidths } = this.getCellDimensions(cellDimOptions);\n\n if (!isTransposed) {\n heightMeasures = [height, height];\n columnMeasures = widths;\n } else {\n heightMeasures = heights;\n columnMeasures = [width, width];\n }\n return {\n rowHeights: {\n primary: rowHeights[0],\n secondary: rowHeights[1]\n },\n columnWidths: {\n primary: columnWidths[0],\n secondary: columnWidths[1]\n },\n height: {\n primary: heightMeasures[0],\n secondary: heightMeasures[1]\n },\n width: {\n primary: columnMeasures[0],\n secondary: columnMeasures[1]\n }\n };\n });\n\n return measurements;\n }\n\n /**\n * Gets the viewable measures for the current viewable matrix\n *\n * @return {Object} Set of viewable measures\n * @memberof VisualMatrix\n */\n getViewableSpaces () {\n return this.viewableMeasures;\n }\n\n /**\n * Returns the matrix that can be viewed in the current viewport\n *\n * @return {Array} Set of matrices that can be viewed\n * @memberof VisualMatrix\n */\n getViewableData () {\n return this.viewableMatrix;\n }\n\n /**\n *\n *\n * @return\n * @memberof VisualMatrix\n */\n removeExtraCells () {\n const {\n isTransposed,\n extraCellLengths\n } = this.config();\n const matrix = this._layoutMatrix;\n const tree = mergeRecursive({}, this.tree());\n const begCellLen = extraCellLengths[0];\n const endCellLen = extraCellLengths[1] || Number.NEGATIVE_INFINITY;\n const layoutMatrix = !isTransposed ? extraCellsRemover(matrix, begCellLen, endCellLen) :\n matrix.slice(0).map(e => extraCellsRemover(e, begCellLen, endCellLen));\n\n tree.values = extraCellsRemover(tree.values, begCellLen, endCellLen);\n if (!isTransposed) {\n tree.matrix = extraCellsRemover(tree.matrix, begCellLen, endCellLen);\n } else {\n tree.matrix = tree.matrix.map(e => extraCellsRemover(e, begCellLen, endCellLen));\n }\n return {\n tree,\n layoutMatrix\n };\n }\n\n /**\n * Creates the viewport that can be viewed together\n *\n * @param {number} depth maxDepth that can be viewed in the viewport\n * @return {Array} Set of matrices that can be viewed\n * @memberof VisualMatrix\n */\n createViewPortMatrix (depth) {\n const arr = [];\n createMatrixInstances(arr, depth, this.removeExtraCells(), this);\n return arr;\n }\n\n /**\n * Distibutes the given space row wisely\n *\n * @param {Object} options Redistribution information\n * @memberof VisualMatrix\n */\n redistributeRowWise (options) {\n let cWidths = [];\n let rHeights = [];\n let mHeight = 0;\n const maxMeasures = this.maxMeasures();\n const {\n isDistributionEqual,\n distribution,\n isTransposed,\n gutter\n } = this.config();\n const { matrix, width, height, maxHeights, maxWidths } = options;\n\n mHeight = spaceTakenByColumn(matrix, this._lastLevelKey).height;\n\n const maxWidth = maxMeasures.reduce((t, n) => {\n t += n;\n return t;\n });\n if (maxWidth > 0) {\n cWidths = maxMeasures.map(space => space + (width - maxWidth) * (space / maxWidth));\n } else {\n cWidths = maxMeasures.map(() => 0);\n }\n rHeights = getDistributedHeight({\n matrix,\n cIdx: this._lastLevelKey,\n height: mHeight,\n availableHeight: height,\n isDistributionEqual,\n distribution,\n isTransposed,\n gutter\n });\n maxWidths.push(cWidths);\n maxHeights.push(rHeights);\n return { maxWidths, maxHeights };\n }\n\n /**\n * Distibutes the given space column wisely\n *\n * @param {Object} options Redistribution information\n * @memberof VisualMatrix\n */\n redistributeColumnWise (options) {\n let rHeights = [];\n const { matrix, width, maxHeights, maxWidths } = options;\n const borderWidth = this.config().unitMeasures.border;\n const mWidth = spaceTakenByRow(matrix[this._lastLevelKey]).width;\n const cWidths = getDistributedWidth({\n row: matrix[this._lastLevelKey],\n width: mWidth,\n availableWidth: width\n }, this.config());\n\n matrix.forEach((row, rIdx) => row.forEach((col, cIdx) => {\n const oldLogicalSpace = col.getLogicalSpace().height;\n col.setAvailableSpace(cWidths[cIdx] - borderWidth, oldLogicalSpace);\n rHeights[rIdx] = Math.max(rHeights[rIdx] || 0, col.getLogicalSpace().height);\n }));\n\n if (maxHeights.length > 0) {\n rHeights = rHeights.map((e, i) => Math.max(e, maxHeights[0][i]));\n }\n\n maxHeights.push(rHeights);\n\n for (let x = 0; x < maxHeights.length; x++) {\n maxHeights[x] = rHeights;\n }\n maxWidths.push(cWidths);\n return { maxHeights, maxWidths };\n }\n\n /**\n * Dispatch the calculated cell dimensions to all the cells\n *\n * @param {Object} options cell dimension information\n * @return {Object} row and column heights / widths\n * @memberof VisualMatrix\n */\n getCellDimensions (options) {\n let indices = [];\n let unitMeasures = [];\n let mainMeasures = [];\n let computedMeasures = [];\n const {\n isTransposed,\n unitMeasures: measures\n } = this.config();\n const borderWidth = measures.border;\n const { matrixInst, maxWidths, maxHeights, matrixIndex } = options;\n const matrix = matrixInst.matrix;\n const rowHeights = [[0], [0]];\n const columnWidths = [[0], [0]];\n const heights = [0, 0];\n const widths = [0, 0];\n const breakPointer = this._breakPointer;\n\n matrix.forEach((row, rIdx) => {\n row.forEach((cell, cIdx) => {\n const colHeight = maxHeights[matrixIndex][rIdx] || 0;\n const colWidth = maxWidths[matrixIndex][cIdx];\n\n if (!isTransposed) {\n cell.setAvailableSpace(colWidth, colHeight - borderWidth);\n indices = [rIdx, cIdx];\n unitMeasures = [columnWidths, rowHeights];\n mainMeasures = [widths, heights];\n computedMeasures = [colWidth, colHeight];\n } else {\n cell.setAvailableSpace(colWidth - borderWidth, colHeight);\n indices = [cIdx, rIdx];\n unitMeasures = [rowHeights, columnWidths];\n mainMeasures = [heights, widths];\n computedMeasures = [colHeight, colWidth];\n }\n\n if (indices[0] === 0 && indices[1] < breakPointer) {\n unitMeasures[0][0][indices[1]] = computedMeasures[0];\n mainMeasures[0][0] = (mainMeasures[0][0] || 0) + computedMeasures[0];\n } else if (indices[0] === 0 && indices[1] >= breakPointer) {\n unitMeasures[0][1][indices[1] - breakPointer] = computedMeasures[0];\n mainMeasures[0][1] = (mainMeasures[0][1] || 0) + computedMeasures[0];\n }\n if (indices[1] === this._lastLevelKey) {\n unitMeasures[1][0][indices[0]] = computedMeasures[1];\n unitMeasures[1][1][indices[0]] = computedMeasures[1];\n }\n });\n });\n return {\n heights,\n widths,\n rowHeights,\n columnWidths\n };\n }\n}\n\n","import { HEIGHT, WIDTH, COLUMN, ROW } from '../enums/constants';\n\n/**\n * Gets measurement for an instance of visual matrix\n *\n * @param {Array} matrix instance of visual matrix\n * @param {string} type height/width\n * @return {Object} Logical height/width of the matrix\n */\nexport function getMatrixMeasurement (matrix, type) {\n if (matrix) {\n return matrix.getLogicalSpace()[type];\n }\n return 0;\n}\n\n/**\n * Sets available space for an instance of visual matrix\n *\n * @param {Array} matrix instance of visual matrix\n * @param {string} type height/width\n * @param {number} value Value of measurement\n */\nexport function setMatrixMeasurement (matrix, type, value) {\n if (matrix) {\n const spaces = matrix.getLogicalSpace();\n if (value && spaces[type] !== value) {\n type === HEIGHT ? matrix.setAvailableSpace(spaces.width, value) :\n matrix.setAvailableSpace(value, spaces.height);\n }\n }\n}\n\n/**\n *\n *\n * @param {*} matrix\n * @param {*} widths\n * @param {*} heights\n */\nconst setAvailableSpace = (matrix, widths, heights) => {\n matrix.forEach((row, rIdx) => {\n row.forEach((placeholder, cIdx) => {\n placeholder.setAvailableSpace(widths[cIdx], heights[rIdx]);\n });\n });\n};\n\n/**\n *\n *\n * @param {*} layout\n * @param {*} matrix\n * @param {*} pointer\n * @returns\n */\nconst setViewSpaces = (layout, pointerType, viewSpaces) => {\n let pointer = layout.config()[`${pointerType}Pointer`];\n if (viewSpaces.length - 1 < pointer) {\n pointer = 0;\n layout.config({ [`${pointerType}Pointer`]: pointer });\n }\n return pointer;\n};\n\n/**\n * Computes the measurements of space for all matrices in the\n * layout\n *\n * @param {Object} layout Instance of grid layout\n * @return {Object} set of measurements for the layout\n */\nexport const computeLayoutMeasurements = (layout) => {\n const rowMatrix = layout.rowMatrix();\n const columnMatrix = layout.columnMatrix();\n const centerMatrix = layout.centerMatrix();\n const {\n width,\n height\n } = layout.measurement();\n const {\n border\n } = layout.config();\n const matrices = layout.matrices();\n const {\n top,\n bottom\n } = matrices;\n\n // Get width of row matrix\n const rowMatrixWidth = getMatrixMeasurement(rowMatrix, WIDTH);\n\n // Set width for column matrix\n\n // Border adjustment for each cell in the central matrix\n const borderWidth = border.width;\n\n const columnMatrixWidth = width - rowMatrixWidth - borderWidth;\n setMatrixMeasurement(columnMatrix, WIDTH, columnMatrixWidth);\n const columnViewPages = columnMatrix.getViewableSpaces();\n setViewSpaces(layout, COLUMN, columnViewPages);\n\n // Figuring out total space needed by current view space\n const columnViewSpace = columnViewPages[layout.config().columnPointer];\n\n // Getting height of column matrix\n const columnMatrixHeight = columnViewSpace.height.primary + columnViewSpace.height.secondary;\n\n // Set height for row matrix\n const rowMatrixHeight = height - columnMatrixHeight;\n\n setMatrixMeasurement(rowMatrix, HEIGHT, rowMatrixHeight);\n\n // Get heights of each cell of row matrix\n const rowViewableSpaces = rowMatrix.getViewableSpaces();\n setViewSpaces(layout, ROW, rowViewableSpaces);\n const rowHeights = [].concat(...rowViewableSpaces.map(e => e.rowHeights.primary));\n const rowWidthsPrimary = [].concat(...rowViewableSpaces.map(e => e.columnWidths.primary));\n const rowWidthsSecondary = [].concat(...rowViewableSpaces.map(e => e.columnWidths.secondary));\n const columnViewableSpaces = columnMatrix.getViewableSpaces();\n // Get widths of each cell of column matrix\n const columnWidths = [].concat(...columnViewableSpaces.map(e => e.columnWidths.primary));\n const columnHeightsPrimary = columnViewableSpaces[0].rowHeights.primary;\n\n const columnHeightsSecondary = [].concat(...columnViewableSpaces.map(e => e.rowHeights.secondary));\n\n // Setting the available space for each cell in the centre matrix\n centerMatrix.forEach((matrix, rIdx) => {\n matrix.forEach((placeholder, cIdx) => {\n placeholder.setAvailableSpace(columnWidths[cIdx] - borderWidth, rowHeights[rIdx] - borderWidth);\n });\n });\n setAvailableSpace(top[0], rowWidthsPrimary, columnHeightsPrimary);\n setAvailableSpace(top[2], rowWidthsSecondary, columnHeightsPrimary);\n setAvailableSpace(bottom[0], rowWidthsPrimary, columnHeightsSecondary);\n setAvailableSpace(bottom[2], rowWidthsSecondary, columnHeightsSecondary);\n\n return {\n rowMatrixHeight,\n rowMatrixWidth,\n columnMatrixHeight,\n columnMatrixWidth\n };\n};\n\n/**\n * Gets view matrices based on current pointers for row and column\n *\n * @param {Object} layout instance of layout\n * @param {number} rowPointer current row pointer\n * @param {number} columnPointer current column pointer\n * @return {Object} returns the view matrix and its relevant information\n */\nexport const getViewMatrices = (layout, rowPointer, columnPointer) => {\n const rowMatrix = layout.rowMatrix();\n const columnMatrix = layout.columnMatrix();\n const centerMatrix = layout.centerMatrix();\n const matrices = layout.matrices();\n const rowMatrices = rowMatrix.getViewableData();\n const columnMatrices = columnMatrix.getViewableData();\n const centralMatrixPointer = {\n row: 0,\n column: 0\n };\n\n for (let i = rowPointer - 1; i >= 0; i--) {\n const length = Math.max(rowMatrices[i].primaryMatrix.length,\n rowMatrices[i].secondaryMatrix.length);\n centralMatrixPointer.row += length;\n }\n /* istanbul ignore next */\n for (let i = columnPointer - 1; i >= 0; i--) {\n const matrix = columnMatrices[i];\n const { primaryMatrix, secondaryMatrix } = matrix;\n const length = Math.max(primaryMatrix[0] ? primaryMatrix[0].length : 0,\n secondaryMatrix[0] ? secondaryMatrix[0].length : 0);\n centralMatrixPointer.column += length;\n }\n\n matrices.top[1] = columnMatrices[columnPointer].primaryMatrix;\n matrices.bottom[1] = columnMatrices[columnPointer].secondaryMatrix;\n\n matrices.center[0] = rowMatrices[rowPointer].primaryMatrix;\n matrices.center[2] = rowMatrices[rowPointer].secondaryMatrix;\n\n const rowMatrixLen = Math.max(matrices.center[0].length, matrices.center[2].length);\n /* istanbul ignore next */\n const columnMatrixLen = Math.max(matrices.top[1][0] ? matrices.top[1][0].length : 0, matrices.bottom[1][0] ?\n matrices.bottom[1][0].length : 0);\n matrices.center[1] = centerMatrix.slice(centralMatrixPointer.row, centralMatrixPointer.row + rowMatrixLen)\n .map(matrix => matrix.slice(centralMatrixPointer.column, centralMatrixPointer.column + columnMatrixLen));\n\n return {\n matrices,\n rowPages: rowMatrices.length,\n columnPages: columnMatrices.length\n };\n};\n/**\n * Returns measurements of the cells of the current matrix\n *\n * @param {Object} layout instance of layout\n * @return {Object} returns the measurements for current view matrix\n */\nexport const getViewMeasurements = (layout) => {\n const rowMatrix = layout.rowMatrix();\n const columnMatrix = layout.columnMatrix();\n const {\n width,\n height\n } = layout.measurement();\n const {\n columnPointer,\n rowPointer\n } = layout.config();\n\n const rowMatrixWidth = rowMatrix.getViewableSpaces()[rowPointer].width;\n const { primary: leftWidth, secondary: rightWidth } = rowMatrixWidth;\n\n const columnMatrixHeight = columnMatrix.getViewableSpaces()[columnPointer].height;\n const { primary: topHeight, secondary: bottomHeight } = columnMatrixHeight;\n\n const centerHeight = height - (topHeight + bottomHeight);\n const centerWidth = width - (leftWidth + rightWidth);\n\n return {\n viewWidth: [leftWidth, centerWidth, rightWidth],\n viewHeight: [topHeight, centerHeight, bottomHeight]\n };\n};\n","/**\n * This file declares a table that can be extended to create a Datagrid, crosstab\n * and man other visualzations that require a tabular structure.\n */\n\nimport { getUniqueId } from 'muze-utils';\nimport GenericLayout from '../generic-layout';\nimport { DEFAULT_CONFIGURATION, DEFAULT_MEASUREMENTS } from './defaults';\nimport {\n renderMatrices\n} from './renderer';\nimport { generateVisualMatrices } from './layout-helper';\nimport { computeLayoutMeasurements, getViewMeasurements, getViewMatrices } from './computations';\n/**\n * This class is used to create a tabular structure that\n * can house charts and values.\n *\n * @class GridLayout\n */\nexport default class GridLayout extends GenericLayout {\n\n /**\n * Creates an instance of TableLayout.\n * @param {HTMLElement} matrices Set of upto 9 matrices containing the cells to be rendered\n * @param {HTMLElement} mountPoint DOM element/d3 selection where the layout is to be mounted\n * @param {Object} measurement The dimensions of the layout\n * @param {Object} config external configurations.\n * @memberof GenericLayout\n *\n * measurement : {\n * width : number => width of the container\n * height : number => height of the container\n * unitHeight : number => height of unit of the cells\n * unitWidth : number => width of unit of the cells\n * }\n *\n */\n constructor (matrices, mountPoint, measurement, config) {\n super(mountPoint, measurement, config);\n this.matrices(matrices);\n this.config(this.constructor.defaultConfig());\n this._layoutId = getUniqueId();\n }\n\n /**\n * Returns initial set of measurements for the grid layout\n *\n * @static\n * @return {Object} Returns initial set of measurements\n * @memberof GridLayout\n */\n static defaultMeasurement () {\n return DEFAULT_MEASUREMENTS;\n }\n\n /**\n * Returns initialconfiguration for grid layout\n *\n * @static\n * @return {Object} Returns initial configuration for grid layout\n * @memberof GridLayout\n */\n static defaultConfig () {\n return DEFAULT_CONFIGURATION;\n }\n\n /**\n * This function is used to return an instance of GridLayout\n *\n * @return {GridLayout} Instance of grid layout.\n * @static\n * @memberof GridLayout\n */\n static create () {\n return new GridLayout(null, null, this.defaultMeasurement(), this.defaultConfig());\n }\n\n /**\n * Sets/Gets the matrices for the layout\n *\n * @param {Array} matrices Set of matrices\n * @return {Object} Getter/Setter\n * @memberof GridLayout\n */\n matrices (matrices) {\n if (matrices) {\n this._matrices = generateVisualMatrices(this, matrices);\n return this;\n }\n return super.matrices(matrices);\n }\n\n /**\n * Triggers the computations for the layout based on the matrices available\n * This causes a reflow in the entire layout system.\n *\n * @return {Object} Layout instance\n * @memberof GridLayout\n */\n triggerReflow () {\n computeLayoutMeasurements(this);\n this.setViewInformation();\n return this;\n }\n\n /**\n *\n *\n * @param {*} type\n * @param {*} pageNumber\n * @returns\n * @memberof GridLayout\n */\n gotoPage (type, pageNumber) {\n const pageType = type.toLowerCase();\n const { viewMatricesInfo } = this.getViewInformation();\n const totalPages = viewMatricesInfo[`${pageType}Pages`];\n const pointer = Math.min(Math.max(1, pageNumber), totalPages);\n this.config({\n [`${pageType}Pointer`]: pointer - 1\n });\n this.setViewInformation();\n this.renderGrid();\n return this;\n }\n\n /**\n *\n *\n * @param {*} type\n * @returns\n * @memberof GridLayout\n */\n pages (type) {\n const { viewMatricesInfo } = this.getViewInformation();\n const pageType = type.toLowerCase();\n return {\n totalPages: viewMatricesInfo[`${pageType}Pages`],\n currentPage: this.config()[`${pageType}Pointer`] + 1\n };\n }\n\n /**\n *\n *\n * @returns\n * @memberof GridLayout\n */\n setViewInformation () {\n const {\n rowPointer,\n columnPointer,\n border\n } = this.config();\n const viewMatricesInfo = getViewMatrices(this, rowPointer, columnPointer);\n const layoutDimensions = getViewMeasurements(this);\n layoutDimensions.border = border;\n this.viewInfo = {\n viewMatricesInfo,\n layoutDimensions\n };\n return this;\n }\n\n /**\n *\n *\n * @returns\n * @memberof GridLayout\n */\n getViewInformation () {\n return this.viewInfo;\n }\n\n /**\n * Renders the layout\n *\n * @return {Object} current instance\n * @memberof GridLayout\n */\n renderGrid (mountPoint) {\n this.mountPoint(mountPoint);\n if (!this.mountPoint()) {\n return this;\n }\n const {\n viewMatricesInfo,\n layoutDimensions\n } = this.getViewInformation();\n // Render matrices\n renderMatrices(this, viewMatricesInfo.matrices, layoutDimensions);\n return this;\n }\n}\n","import VisualMatrix from '../visual-matrix/visual-matrix';\n\n/**\n * Generates the set of visual matrices for pagination and layouting algorithms\n *\n * @param {*} context\n * @param {*} matrices\n * @returns\n */\nexport const generateVisualMatrices = (context, matrices) => {\n // Set of matrices for layout is generated starting with the left matrix\n let leftMatrix = [];\n let rightMatrix = [];\n let topMatrix = [];\n let bottomMatrix = [];\n let begColCells;\n let endColCells;\n const {\n isRowSizeEqual,\n isColumnSizeEqual,\n gutterSpace,\n distribution,\n border,\n breakPage\n } = context.config();\n const {\n minUnitHeight,\n minUnitWidth\n } = context.measurement();\n const { top, center, bottom } = matrices;\n const [topLeft, topColumns, topRight] = top;\n const [leftRows, valueMatrix, rightRows] = center;\n const [bottomLeft, bottomColumns, bottomRight] = bottom;\n\n if (leftRows.length > 0) {\n // If no left matrix is present, context will be empty\n leftMatrix = [...topLeft, ...leftRows, ...bottomLeft];\n }\n if (rightRows.length > 0) {\n // If no right matrix is present, context will be empty\n rightMatrix = [...topRight, ...rightRows, ...bottomRight];\n }\n if (topColumns.length > 0 && topColumns[0].length > 0) {\n // If no top matrix is present, context will be empty\n topMatrix = topColumns.map((d, i) => [...topLeft[i], ...d, ...topRight[i]]);\n }\n if (bottomColumns.length > 0 && bottomColumns[0].length > 0) {\n // If no bottom matrix is present, context will be empty\n bottomMatrix = bottomColumns.map((d, i) => [...bottomLeft[i], ...d, ...bottomRight[i]]);\n }\n context.rowMatrix(new VisualMatrix([leftMatrix, rightMatrix], {\n isDistributionEqual: isRowSizeEqual,\n distribution: distribution.rows,\n gutter: gutterSpace.rows,\n unitMeasures: {\n width: minUnitWidth,\n height: minUnitHeight,\n border: border.width\n },\n breakPage: breakPage.rows.map(e => e + Math.max(topLeft.length, topRight.length)),\n extraCellLengths: [topLeft.length, bottomLeft.length]\n }));\n\n if (topLeft.length > 0) {\n begColCells = topLeft[0].length;\n } else {\n begColCells = bottomLeft.length > 0 ? bottomLeft[0].length : 0;\n }\n\n if (topRight.length > 0) {\n endColCells = topRight[0].length;\n } else {\n endColCells = bottomRight.length > 0 ? bottomRight[0].length : 0;\n }\n\n context.columnMatrix(new VisualMatrix([topMatrix, bottomMatrix], {\n isDistributionEqual: isColumnSizeEqual,\n distribution: distribution.columns,\n gutter: gutterSpace.columns,\n isTransposed: true,\n unitMeasures: {\n width: minUnitWidth,\n height: minUnitHeight,\n border: border.width\n },\n breakPage: breakPage.columns,\n extraCellLengths: [begColCells, endColCells]\n }));\n context.centerMatrix(valueMatrix);\n\n return matrices;\n};\n","import { ERROR_MSG } from 'muze-utils';\n/**\n * An Interface to be implemented if the transaction support is necessary. This class ensures reactivity to\n * global properties.\n */\nexport default class TransactionSupport {\n /**\n * Property accessor for data member of the class. Data is passed to the system by calling this method.\n */\n data () {\n throw new Error(ERROR_MSG.INTERFACE_IMPl);\n }\n\n /**\n * Property accessor for width of the class. Width is passed as an integer.\n */\n width () {\n throw new Error(ERROR_MSG.INTERFACE_IMPl);\n }\n\n /**\n * Property accessor for height of the class. Height is passed as an integer.\n */\n height () {\n throw new Error(ERROR_MSG.INTERFACE_IMPl);\n }\n\n /**\n * Property accessor for config of the class. Config is passed as an object.\n */\n config () {\n throw new Error(ERROR_MSG.INTERFACE_IMPl);\n }\n}\n","import { TOP, BOTTOM, LEFT, TITLE, SUB_TITLE, GROUP, LAYOUT, LEGEND } from '../constants';\n\n/**\n *\n *\n * @param {*} context\n * @returns\n */\nexport const arrangeComponents = (context) => {\n const legendConfig = context.config().legend;\n const titleConfig = context.title()[1];\n const subtitleConfig = context.subtitle()[1];\n const titleLayouts = {\n [`${TOP}-${TOP}`]: [TITLE, SUB_TITLE, GROUP],\n [`${BOTTOM}-${BOTTOM}`]: [GROUP, SUB_TITLE, TITLE],\n [`${TOP}-${BOTTOM}`]: [TITLE, GROUP, SUB_TITLE],\n [`${BOTTOM}-${TOP}`]: [SUB_TITLE, GROUP, TITLE]\n };\n const legendLayouts = [\n [LEGEND, LAYOUT],\n [LAYOUT, LEGEND]\n ];\n const titlePosition = titleConfig.position || TOP;\n const subtitlePosition = subtitleConfig.position || TOP;\n\n return {\n headers: titleLayouts[`${titlePosition}-${subtitlePosition}`],\n legends: legendConfig.position === LEFT || legendConfig.position === TOP ?\n legendLayouts[0] : legendLayouts[1]\n };\n};\n","/**\n * Flag to specify whether direction is vertical.\n */\nexport const MARGIN = 'margin';\nexport const LEFT = 'left';\nexport const RIGHT = 'right';\nexport const BOTTOM = 'bottom';\nexport const TOP = 'top';\nexport const SPACE_FIXER = 'spaceFixer';\nexport const CLASSPREFIX = 'muze';\nexport const VERTICAL_ALIGN = 'verticalAlign';\nexport const TEXT_ALIGN = 'textAlign';\nexport const IS_OFFSET = 'isOffset';\nexport const MIDDLE = 'middle';\nexport const BASELINE = 'baseline';\nexport const SHOW = 'show';\nexport const CENTER = 'center';\nexport const TEXT = 'text';\nexport const HEADER = 'header';\nexport const HEIGHT = 'height';\nexport const WIDTH = 'width';\nexport const DATA = 'data';\nexport const AXES = 'axes';\nexport const FACET_BY_FIELDS = 'facetByFields';\nexport const FIELDS = 'fields';\nexport const TRANSFORM = 'transform';\nexport const LAYER_DEF = 'layerDef';\nexport const CONFIG = 'config';\nexport const DETAIL_FIELDS = 'detailFields';\n\nexport const TEXT_CELL = 'text-cell';\nexport const AXIS_CELL = 'axis-cell';\nexport const GEOM_CELL = 'geom-cell';\nexport const BLANK_CELL = 'blank-cell';\n","// eneum to refer to simple cell\nexport const SIMPLE = 'simple';\n// eneum to refer to header cell\nexport const TEXT = 'text';\n// enum to refer to axis cell\nexport const AXIS = 'axis';\n// enum to refer to visual cell\nexport const GEOM = 'geom';\n// enum to refer blank cell\nexport const BLANK = 'blank';\n","import {\n ERROR_MSG,\n getUniqueId,\n mergeRecursive\n} from 'muze-utils';\nimport { SIMPLE } from './enums/cell-type';\n\n/**\n * This file declares a class that is used as an interface to create new\n * SimpleCell elements.\n * @module SimpleCell\n */\n/**\n * Base class for all table cells.\n *\n * @interface\n * @class SimpleCell\n */\nclass SimpleCell {\n\n /**\n * Creates an instance of SimpleCell.\n *\n * @param {*} config The input configuration.\n * @memberof SimpleCell\n */\n constructor (config) {\n this._id = getUniqueId();\n\n const defConfig = mergeRecursive({}, this.constructor.defaultConfig());\n this._config = mergeRecursive(defConfig, config || {});\n\n this._mount = null;\n }\n\n /**\n * Returns the type of the placehlder.\n *\n * @readonly\n * @memberof SimpleCell\n */\n get type () {\n return SIMPLE;\n }\n\n /**\n * Returns the type of the placehlder.\n *\n * @readonly\n * @memberof SimpleCell\n * @return {Object} Default config for the placeholder\n */\n static defaultConfig () {\n return {};\n }\n\n /**\n * Returns the value contained by the SimpleCell.\n *\n * @memberof SimpleCell\n */\n valueOf () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Returns a unique identifier for the instance used\n * to control selective rendering.\n *\n * @memberof SimpleCell\n */\n id () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Returns a serialized representation of the instance.\n *\n * @memberof SimpleCell\n */\n serialize () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Returns an object with width and height fields\n * specifying the space taken up by this metod.\n *\n * @memberof SimpleCell\n */\n getLogicalSpace () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Method used to set the space available to render the SimpleCell\n *\n * @param {number} width The available width.\n * @param {number} height The available height.\n * @memberof SimpleCell\n */\n setAvailableSpace () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Render the SimpleCell inthe supplied mount point.\n *\n * @param {HTMLElement} mount The mount point to render in.\n * @memberof SimpleCell\n */\n render () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Render the SimpleCell inthe supplied mount point.\n *\n * @param {HTMLElement} mount The mount point to render in.\n * @memberof SimpleCell\n */\n remove () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n}\n\nexport default SimpleCell;\n","/**\n * This file exports variables that are used as defaults for\n * the placeholders\n */\nimport * as CONSTANTS from './constants';\n\n /**\n * Default Configuration for the cells\n * @return {Object} Default configuration\n */\nexport const DEFAULT_CONFIG = {\n [CONSTANTS.MARGIN]: {\n [CONSTANTS.LEFT]: 0,\n [CONSTANTS.RIGHT]: 0,\n [CONSTANTS.TOP]: 0,\n [CONSTANTS.BOTTOM]: 0\n },\n [CONSTANTS.SPACE_FIXER]: 2,\n [CONSTANTS.IS_OFFSET]: false,\n [CONSTANTS.VERTICAL_ALIGN]: CONSTANTS.TOP,\n [CONSTANTS.TEXT_ALIGN]: CONSTANTS.CENTER,\n [CONSTANTS.SHOW]: true\n};\n","import { mergeRecursive } from 'muze-utils';\nimport { GEOM, TEXT, AXIS, BLANK } from './enums/cell-type';\n\nconst DEFAULT_PROPS = {\n mount: {},\n availHeight: {},\n availWidth: {},\n config: {\n sanitization: (context, value) => mergeRecursive(context._config, value)\n },\n logicalSpace: {},\n source: {}\n};\n\nconst geomProps = {\n data: {},\n caption: {},\n config: {},\n axes: {\n sanitization: (context, value) => Object.assign(context._axes, value)\n },\n facetByFields: {},\n fields: {},\n transform: {},\n layerDef: {},\n detailFields: {}\n};\n\nexport const PROPS = {\n [TEXT]: DEFAULT_PROPS,\n [GEOM]: mergeRecursive(geomProps, DEFAULT_PROPS),\n [AXIS]: DEFAULT_PROPS,\n [BLANK]: DEFAULT_PROPS\n};\n","/**\n * This file declares a class that represents a table cell\n * used to house an axis.\n * @module VisualCell\n */\nimport { selectElement, makeElement, generateGetterSetters } from 'muze-utils';\nimport { CLASSPREFIX, HEIGHT, WIDTH, AXIS_CELL } from './enums/constants';\nimport SimpleCell from './simple-cell';\nimport { DEFAULT_CONFIG } from './enums/defaults';\nimport { AXIS } from './enums/cell-type';\nimport { PROPS } from './props';\n\n/**\n * Computes the logical space of the an axis instance within an axis cell\n *\n * @param {Object} context Required to get the needed parameters to compute axis space\n * @return {Object} Returns the logical space for axis\n */\nconst computeAxisSpace = (context) => {\n let logicalWidth;\n let logicalHeight;\n const axis = context.source();\n const {\n spaceFixer,\n margin\n } = context.config();\n const {\n width,\n height\n } = axis.getLogicalSpace();\n const {\n show\n } = axis.config();\n if (show === true) {\n logicalHeight = Math.floor(height + margin.top + margin.bottom + spaceFixer);\n logicalWidth = Math.floor(width + margin.left + margin.right + spaceFixer);\n } else {\n [logicalWidth, logicalHeight] = [width, height];\n }\n return {\n width: logicalWidth,\n height: logicalHeight\n };\n};\n\n/**\n * Represents an axis cell.\n *\n * @class Axis\n */\nclass AxisCell extends SimpleCell {\n\n /**\n * Creates an instance of AxisCell.\n *\n * @param {Object} config The input config.\n * @memberof AxisCell\n */\n constructor (config) {\n super(config);\n\n this._axis = null;\n this._availHeight = null;\n this._availWidth = null;\n this._logicalSpace = null;\n\n generateGetterSetters(this, PROPS[AXIS]);\n }\n\n /**\n * return the type pf SimpleCell cell.\n *\n * @readonly\n * @memberof AxisCell\n */\n get type () {\n return AXIS;\n }\n\n /**\n * This method return the value conatined by this SimpleCell.\n *\n * @return {SimpleAxis | ColorAxis} Instance of SimpleAxis or ColorAxis.\n * @memberof AxisCell\n */\n valueOf () {\n return this.source().id;\n }\n\n /**\n * This method return the unique identififer of the axis\n *\n * @return {string} Id of the axis.\n * @memberof AxisCell\n */\n get id () {\n return this._id;\n }\n\n /**\n * Retrns the serialized representation of this cell.\n *\n * @return {Object}Object with serializable props.\n * @memberof AxisCell\n */\n serialize () {\n return {\n type: AXIS,\n axis: this.source().serialize()\n };\n }\n\n /**\n * return the default configuration for the text cell\n *\n * @static\n * @return {Object} Default configuration of the cell\n * @memberof AxisCell\n */\n static defaultConfig () {\n return DEFAULT_CONFIG;\n }\n\n /**\n * return the space taken up by an axis element in the dom.\n *\n * @return {Object} Object with width and height fields.\n * @memberof AxisCell\n */\n getLogicalSpace () {\n if (!this.logicalSpace()) {\n this.logicalSpace(computeAxisSpace(this));\n }\n return this.logicalSpace();\n }\n\n /**\n * This method is used to set the space availiable to render\n * the SimpleCell.\n *\n * @param {number} width The width of SimpleCell.\n * @param {number} height The height of SimpleCell.\n * @return {Instance} Returns current Instance\n * @memberof AxisCell\n */\n setAvailableSpace (width, height) {\n this.availWidth(width);\n this.availHeight(height);\n const {\n margin,\n isOffset\n } = this.config();\n this.source().setAvailableSpace(width, height, margin, isOffset);\n this.logicalSpace(null);\n this.source().logicalSpace(null);\n return this;\n }\n\n /**\n * This method is used to render the axis inside the axis cell.\n *\n * @param {HTMLElement} mount The mount point.\n * @return {Selection} node where axis mounted\n * @memberof AxisCell\n */\n /* istanbul ignore next */render (mount) {\n if (!mount) {\n return this;\n }\n const axis = this.source();\n const availHeight = this.availHeight();\n const availWidth = this.availWidth();\n const {\n margin\n } = this.config();\n const {\n top,\n bottom,\n left,\n right\n } = margin;\n const {\n show\n } = axis.config();\n const wrapperDiv = makeElement(selectElement(mount), 'div', [this], `${CLASSPREFIX}-${AXIS_CELL}`);\n const selection = makeElement(wrapperDiv, 'svg', [1], `${CLASSPREFIX}-axis-container`);\n\n this.mount(mount);\n if (availWidth === 0 || !availWidth) {\n selection.attr(WIDTH, `${0}px`);\n }\n if (availHeight === 0 || !availHeight) {\n selection.attr(HEIGHT, `${0}px`);\n }\n wrapperDiv.style(WIDTH, `${show ? availWidth : 0}px`)\n .style(HEIGHT, `${show ? availHeight : 0}px`)\n .style('margin-top', top)\n .style('margin-bottom', bottom)\n .style('margin-left', left)\n .style('margin-right', right);\n\n axis.mount(selection.node());\n return selection;\n }\n\n /**\n * Disposes the cell\n *\n * @return {Instance} Current instance of AxisCell\n * @memberof AxisCell\n */\n remove () {\n this.source() && this.source().remove();\n this.mount() && this.mount().remove();\n return this;\n }\n}\n\nexport default AxisCell;\n\n","/**\n * This file declares a class that represents a BLANK element in a table.\n * @module VisualCell\n */\nimport {\n selectElement,\n makeElement,\n applyStyle,\n generateGetterSetters\n } from 'muze-utils';\nimport SimpleCell from './simple-cell';\nimport { CLASSPREFIX, BLANK_CELL } from './enums/constants';\nimport { BLANK } from './enums/cell-type';\nimport { DEFAULT_CONFIG } from './enums/defaults';\nimport { PROPS } from './props';\n\n/**\n * Represents a table haeder.\n *\n * @class BLANK\n */\nclass BlankCell extends SimpleCell {\n\n /**\n * Creates an instance of BLANK.\n * @param {Object} config The input configuration.\n * @memberof BLANK\n */\n constructor (config) {\n super(config);\n\n generateGetterSetters(this, PROPS[BLANK]);\n }\n\n /**\n * return the type pf SimpleCell cell.\n *\n * @readonly\n * @memberof BlankCell\n */\n get type () {\n return BLANK;\n }\n\n /**\n * This method return the value contained by this SimpleCell.\n *\n * @return {string} The text value contained by this cell.\n * @memberof BlankCell\n */\n valueOf () {\n return this.id;\n }\n\n /**\n * return the default configuration for the text cell\n *\n * @static\n * @return {Object} Default configuration of the cell\n * @memberof BlankCell\n */\n static defaultConfig () {\n return DEFAULT_CONFIG;\n }\n\n /**\n * This method is used to return a unique identifier for\n * the BLANK cell.\n *\n * @return {string} The unique identifier for the BLANK.\n * @memberof BlankCell\n */\n get id () {\n return this._id;\n }\n\n /**\n * This method is used to obtain a serialized representation of this instance.\n *\n * @return {Object} Object with serilizable props.\n * @memberof BLANK\n */\n serialize () {\n return {\n type: BLANK\n };\n }\n\n /**\n * This method return the space taken up\n * by the text with the style applied.\n *\n * @return {Object} width and height taken up by the text.\n * @memberof BLANK\n */\n getLogicalSpace () {\n if (!this.logicalSpace()) {\n return {\n width: this.width || 0,\n height: this.height || 0\n };\n }\n return this.logicalSpace();\n }\n\n /**\n * This method is used to set the available space.\n *\n * @param {number} width The available width.\n * @param {number} height The available height.\n * @return {Instance} Returns current Instance\n * @memberof BlankCell\n */\n setAvailableSpace (width, height) {\n this.availWidth(width);\n this.availHeight(height);\n this.logicalSpace(null);\n return this;\n }\n\n /**\n * This method is used to render the BLANK cell inside\n * the provided mount point.\n *\n * @param {HTMLElement} mount The mount point for this cell.\n * @return {Instance} Returns current Instance\n * @memberof BLANK\n */\n /* istanbul ignore next */render (mount) {\n if (mount) {\n const { style } = this.config();\n // append span element to mount point\n this.mount(mount);\n const container = selectElement(mount);\n const elem = makeElement(container, 'div', [this.id]);\n elem.classed(`${CLASSPREFIX}-${BLANK_CELL}`, true);\n elem.style('width', `${this.availWidth()}px`);\n elem.style('height', `${this.availHeight()}px`);\n elem.html('');\n // apply style on the returned element\n if (style) {\n applyStyle(elem, style);\n }\n } return this;\n }\n\n /**\n * Removes the cell(Disposal)\n *\n * @return {Instance} Returns current Instance\n * @memberof BlankCell\n */\n remove () {\n this.mount() && this.mount().remove();\n return this;\n }\n }\nexport default BlankCell;\n","/**\n * This file declares a class that represents a Text element in a table.\n * @module VisualCell\n */\n\nimport {\n selectElement,\n makeElement,\n getSmartComputedStyle,\n generateGetterSetters\n} from 'muze-utils';\nimport SimpleCell from './simple-cell';\nimport { TEXT } from './enums/cell-type';\nimport { PROPS } from './props';\nimport { DEFAULT_CONFIG } from './enums/defaults';\nimport { CLASSPREFIX, TOP, BOTTOM, LEFT, RIGHT, HEADER, WIDTH, TEXT_CELL } from './enums/constants';\nimport './text-cell.scss';\n\n/**\n* Computes the Logical Space for the text\n*\n* @param {Object} context Required to get the needed parameters to compute text space\n* @return {Object} Logical space taken up by text\n* @memberof TextCell\n*/\nconst computeTextSpace = (context) => {\n const { labelManager } = context.dependencies();\n const space = labelManager.getOriSize(context.source());\n const {\n margin,\n show\n } = context.config();\n\n labelManager.setStyle(context._computedStyle);\n if (show) {\n return {\n width: space.width + margin.left + margin.right + context._minTickDiff.width,\n height: space.height + margin.top + margin.bottom + context._minTickDiff.height\n };\n } return {\n width: 0,\n height: 0\n };\n};\n\n/**\n * Represents a table haeder.\n *\n * @class Text\n */\nclass TextCell extends SimpleCell {\n\n /**\n * Creates an instance of Text.\n * @param {Object} config The input configuration.\n * @param {string} dependencies Dependencies for the class(labelManager)\n * @memberof Text\n */\n constructor (config, dependencies) {\n super(config);\n\n this._dependencies = dependencies;\n this._className = this._config.className ||\n (this._config.type === HEADER ? `${CLASSPREFIX}-${HEADER}-cell` : `${CLASSPREFIX}-${TEXT}-cell`);\n this._computedStyle = getSmartComputedStyle(selectElement('body'), this._className);\n this._dependencies.labelManager.setStyle(this._computedStyle);\n this._minTickDiff = this._dependencies.labelManager.getOriSize('WW');\n\n generateGetterSetters(this, PROPS[TEXT]);\n }\n\n /**\n * return the type pf SimpleCell cell.\n *\n * @readonly\n * @memberof TextCell\n */\n get type () {\n return TEXT;\n }\n\n /**\n * This method return the value contained by this SimpleCell.\n *\n * @return {string} The text value contained by this cell.\n * @memberof TextCell\n */\n valueOf () {\n return this.source();\n }\n\n /**\n * This method is used to return a unique identifier for\n * the Text cell.\n *\n * @return {string} The unique identifier for the Text.\n * @memberof TextCell\n */\n get id () {\n return this._id;\n }\n\n /**\n * Returns the dependencies of the instance\n *\n * @return {Object} Dependencies needed by the class\n * @memberof TextCell\n */\n dependencies () {\n return this._dependencies;\n }\n\n /**\n * This method is used to obtain a serialized representation of this instance.\n *\n * @return {Object} Object with serilizable props.\n * @memberof TextCell\n */\n serialize () {\n return {\n text: this.source(),\n type: TEXT\n };\n }\n\n /**\n * return the default configuration for the text cell\n *\n * @static\n * @return {Object} Default configuration of the cell\n * @memberof TextCell\n */\n static defaultConfig () {\n return DEFAULT_CONFIG;\n }\n\n /**\n * This method return the space taken up\n * by the text with the style applied.\n *\n * @return {Object} width and height taken up by the text.\n * @memberof Text\n */\n getLogicalSpace () {\n if (!this.logicalSpace()) {\n this.logicalSpace(computeTextSpace(this));\n }\n return this.logicalSpace();\n }\n\n /**\n * This method is used to set the available space.\n *\n * @param {number} width The available width.\n * @param {number} height The available height.\n * @return {Instance} Returns current Instance\n * @memberof TextCell\n */\n setAvailableSpace (width, height) {\n this.availWidth(width);\n this.availHeight(height);\n this.logicalSpace(null);\n return this;\n }\n\n /**\n * This method is used to render the Text cell inside\n * the provided mount point.\n *\n * @param {HTMLElement} mount The mount point for this cell.\n * @return {Instance} Returns current Instance\n * @memberof Text\n */\n render (mount) {\n const availWidth = this.availWidth();\n const {\n margin,\n show,\n verticalAlign,\n textAlign\n } = this.config();\n\n this.mount(mount);\n if (show) {\n const container = selectElement(mount);\n const elem = makeElement(container, 'div', [this.id], `${CLASSPREFIX}-${TEXT_CELL}`);\n\n container.style('vertical-align', verticalAlign);\n elem.classed(this._className, true);\n // apply style on the returned element\n elem.style(WIDTH, availWidth ? `${availWidth}px` : '100%');\n [TOP, BOTTOM, LEFT, RIGHT].forEach((type) => {\n elem.style(`padding-${type}`, `${margin[type]}px`);\n });\n elem.style('text-align', textAlign);\n elem.style('display', 'inline');\n // set the text as the innerHTML\n elem.html(this.source());\n }\n return this;\n }\n\n /**\n * Disposes the cell\n *\n * @return {Instance} Returns current Instance\n * @memberof TextCell\n */\n remove () {\n this.mount() && this.mount().remove();\n return this;\n }\n }\n\nexport default TextCell;\n","/**\n * This file declares a class that is used to represent a table cell\n * that houses a visual unit.\n * @module VisualCell\n */\n\nimport { selectElement, makeElement, generateGetterSetters } from 'muze-utils';\nimport SimpleCell from './simple-cell';\nimport { GEOM } from './enums/cell-type';\nimport { PROPS } from './props';\nimport {\n CLASSPREFIX, HEIGHT, WIDTH, DATA, AXES, FACET_BY_FIELDS, FIELDS, TRANSFORM, LAYER_DEF, CONFIG, GEOM_CELL,\n DETAIL_FIELDS\n} from './enums/constants';\nimport { DEFAULT_CONFIG } from './enums/defaults';\n\n/**\n * Calculates the logical space of the cell\n *\n * @param {Object} context Required to get the needed parameters to compute unit space\n * @return {Object} Logical space taken up by the unit\n * @memberof GeomCell\n */\nconst computeGeomSpace = (context) => {\n const config = context.source().config();\n const { width, height } = config;\n return {\n width: Math.ceil(width),\n height: Math.ceil(height + context.getCaptionSpace().height)\n };\n};\n\n /**\n * This class represents a SimpleCell for visual unit.\n *\n * @class GeomCell\n */\nclass GeomCell extends SimpleCell {\n\n /**\n * Creates an instance of GeomCell.\n * @param {Object} config The input configuration.\n * @memberof GeomCell\n */\n constructor (config) {\n super(config);\n\n this._unit = null;\n this._layers = null;\n this._axes = {};\n this._datamodel = {};\n this._facetByFields = {};\n this._fields = null;\n this._transform = null;\n this._caption = null;\n\n generateGetterSetters(this, PROPS[GEOM]);\n }\n\n /**\n * return the type pf SimpleCell cell.\n *\n * @readonly\n * @memberof GeomCell\n */\n get type () {\n return GEOM;\n }\n\n /**\n * This method return the value contained by this cell.\n *\n * @return {VisualUnit} Instance of visual unit contained by visual unit.\n * @memberof GeomCell\n */\n valueOf () {\n return this.source();\n }\n\n /**\n * This method is used to return the id of the\n * visual unit housed by this cell.\n *\n * @return {string} The unique id of the visual unit.\n * @memberof GeomCell\n */\n get id () {\n return this.source().id();\n }\n\n /**\n * This method return a serialized representation of\n * this instance.\n *\n * @return {Object} Object with serializable props.\n * @memberof GeomCell\n */\n serialize () {\n return {\n type: GEOM,\n unit: this.source().serialize(),\n caption: this.caption()\n };\n }\n\n /**\n * return the default configuration for the geom cell\n *\n * @static\n * @return {Object} Default configuration of the cell\n * @memberof GeomCell\n */\n static defaultConfig () {\n return DEFAULT_CONFIG;\n }\n\n /**\n * Updates the model based on the changed parameters\n *\n * @return {Instance} return instance\n * @memberof GeomCell\n */\n updateModel () {\n const unit = this.source();\n unit.lockModel();\n [DATA, AXES, FACET_BY_FIELDS, FIELDS, TRANSFORM, LAYER_DEF, CONFIG, DETAIL_FIELDS].forEach((prop) => {\n this[prop]() && unit[prop](this[prop]());\n });\n unit.unlockModel();\n return this;\n }\n\n /**\n * It gives the space taken by the caption of the unit\n *\n * @return {Object} return the space taken by caption\n * @memberof GeomCell\n */\n getCaptionSpace () {\n const caption = this.caption();\n\n let captionSpace = { width: 0, height: 0 };\n if (caption) {\n captionSpace = caption.getLogicalSpace();\n }\n return captionSpace;\n }\n\n /**\n * return the space taken up by the element in the dom.\n *\n * @return {Object} Object with width and height fields.\n * @memberof GeomCell\n */\n getLogicalSpace () {\n if (!this.logicalSpace()) {\n this.logicalSpace(computeGeomSpace(this));\n }\n return this.logicalSpace();\n }\n\n /**\n * This method is used to set the space available to\n * render the SimpleCell.\n *\n * @param {number} width The available width.\n * @param {number} height The available height.\n * @return {Instance} Returns current Instance\n * @memberof GeomCell\n */\n setAvailableSpace (width, height) {\n const unit = this.source();\n\n this.availWidth(width);\n this.availHeight(height);\n unit.lockModel();\n unit.width(width).height(height - this.getCaptionSpace().height);\n unit.unlockModel();\n this.logicalSpace(null);\n return this;\n }\n\n /**\n * his method is used to render the visual unit inside the provided cell.\n *\n * @param {HTMLElement} mount The mountpoint in the table.\n * @return {Instance} Returns current Instance\n * @memberof GeomCell\n */\n render (mount) {\n if (mount) {\n this.mount(mount);\n const availHeight = this.availHeight();\n const availWidth = this.availWidth();\n const caption = this.caption();\n const wrapperDiv = makeElement(selectElement(mount), 'div', [1], `${CLASSPREFIX}-${GEOM_CELL}`);\n\n if (caption) {\n const captionDom = makeElement(wrapperDiv, 'div', [caption], `${CLASSPREFIX}-unit-caption`).node();\n caption.render(captionDom);\n }\n const selection = makeElement(wrapperDiv, 'div', [1], `${CLASSPREFIX}-unit`);\n wrapperDiv.style(WIDTH, `${availWidth}px`).style(HEIGHT, `${availHeight}px`);\n selection.style(WIDTH, `${availWidth}px`)\n .style(HEIGHT, `${availHeight - this.getCaptionSpace().height}px`);\n this.source().mount(selection.node());\n }\n return this;\n }\n\n /**\n * Disposes the cell\n *\n * @return {Object} Current instance\n * @memberof GeomCell\n */\n remove () {\n this.mount() && this.mount().remove();\n this.source().remove();\n return this;\n }\n}\n\nexport default GeomCell;\n","import AxisCell from './axis-cell';\nimport BlankCell from './blank-cell';\nimport TextCell from './text-cell';\nimport GeomCell from './geom-cell';\nimport SimpleCell from './simple-cell';\n\nimport * as CONSTANTS from './constants';\n\nexport const DEFAULT_PLACEHOLDERS = {\n [CONSTANTS.SIMPLE_CELL]: SimpleCell,\n [CONSTANTS.TEXT_CELL]: TextCell,\n [CONSTANTS.AXIS_CELL]: AxisCell,\n [CONSTANTS.GEOM_CELL]: GeomCell,\n [CONSTANTS.BLANK_CELL]: BlankCell\n};\n\n","export const SIMPLE_CELL = 'SimpleCell';\nexport const TEXT_CELL = 'TextCell';\nexport const AXIS_CELL = 'AxisCell';\nexport const BLANK_CELL = 'BlankCell';\nexport const GEOM_CELL = 'GeomCell';\n\n","import { DEFAULT_PLACEHOLDERS } from './defaults';\n\n/**\n * Creates a registry for the cells, which can be used for\n * setting a new cell or getting the registered cells\n *\n * @return {Object} Setters and getters for registered cells\n */\nconst cellRegistry = () => {\n const reg = DEFAULT_PLACEHOLDERS;\n return {\n set: (key, def) => {\n if (key in reg) {\n reg[key] = def;\n }\n return cellRegistry;\n },\n get: () => reg\n };\n};\nexport default cellRegistry;\n","import { TextCell } from '@chartshq/visual-cell';\nimport { escapeHTML } from 'muze-utils';\n\n/**\n *\n *\n * @param {*} rawContent\n * @returns\n */\nconst resolveTitleSubTitleContent = (rawContent) => {\n if (typeof rawContent === 'function' && !rawContent._sanitize) {\n return rawContent();\n }\n return escapeHTML(rawContent());\n};\n\n/**\n *\n *\n * @param {*} config\n * @param {*} cellType\n * @param {*} labelManager\n * @param {*} prevCell\n * @returns\n */\nconst headerCreator = (config, cellType, labelManager, prevCell) => {\n const {\n content\n } = config;\n const cell = prevCell || new TextCell({ type: cellType }, { labelManager });\n\n cell.source(content);\n\n return {\n height: cell.getLogicalSpace().height,\n cell\n };\n};\n\n/**\n *\n *\n * @param {*} config\n * @param {*} type\n * @param {*} labelManager\n * @param {*} cell\n * @returns\n */\nconst createHeading = (config, type, labelManager, prevCell) => {\n if (!config) { return ''; }\n\n return headerCreator(\n config,\n type === 'title' ? 'header' : 'text',\n labelManager,\n prevCell\n );\n};\n\n/**\n *\n *\n * @param {*} context\n */\nexport const createHeaders = (context, canvasHeight, canvasWidth) => {\n let headerHeight = 0;\n const headers = {};\n\n canvasHeight >= 200 && canvasWidth >= 200 && ['title', 'subtitle'].forEach((type) => {\n const headerOptions = context[type]();\n const content = resolveTitleSubTitleContent(headerOptions[0]);\n if (content.length) {\n const config = headerOptions[1];\n\n config.width = context.width();\n config.content = content;\n\n const { height, cell } = createHeading(config, type, context.dependencies().smartlabel,\n context[`${type}Cell`]);\n\n headers[`${type}Cell`] = cell;\n context._composition[type] = cell;\n headerHeight += height + config.padding;\n }\n });\n return { headerHeight, headers };\n};\n\n","import { TextCell, AxisCell } from '@chartshq/visual-cell';\nimport {\n VERTICAL, HORIZONTAL, LEFT, RIGHT, LEGEND_TYPE_MAP, PADDING, BORDER, MARGIN\n} from '../constants';\n\n/**\n *\n *\n * @param {*} legendConfig\n * @param {*} canvases\n * @returns\n */\nexport const legendCreator = (canvas) => {\n let LegendCls;\n const dataset = [];\n const axes = canvas.getRetinalAxes();\n\n Object.entries(axes).forEach((axisInfo) => {\n const scale = axisInfo[1][0];\n const scaleType = axisInfo[0];\n const scaleProps = canvas[scaleType]();\n\n if (scaleProps.field) {\n const {\n type,\n step\n } = scale.config();\n\n const stepMapper = typeof step === 'boolean' ? step : false;\n LegendCls = LEGEND_TYPE_MAP[`${type}-${stepMapper}-${scaleType}`];\n dataset.push({ scale, canvas, fieldName: scaleProps.field, LegendCls, scaleType });\n }\n });\n\n return dataset;\n};\n\n/**\n *\n *\n * @param {*} legendConfig\n * @param {*} canvases\n * @param {*} measurement\n * @param {*} prevLegends\n * @returns\n */\nexport const legendInitializer = (legendConfig, canvas, measurement, prevLegends) => {\n const legends = [];\n const {\n height,\n width,\n headerHeight\n } = measurement;\n const {\n position,\n align\n } = legendConfig;\n\n const legendInfo = legendCreator(canvas);\n\n legendInfo.forEach((dataInfo, index) => {\n let legend = {};\n\n const legendMeasures = {};\n const {\n LegendCls,\n scale,\n fieldName,\n scaleType\n } = dataInfo;\n const config = legendConfig[scaleType] || {};\n const title = config.title || {};\n title.text = title.text || fieldName;\n if (config.show) {\n config.position = position;\n config.align = align;\n\n if (prevLegends[index]) {\n legend = prevLegends[index].legend;\n } else {\n legend = LegendCls.create({\n labelManager: canvas._dependencies.smartlabel,\n cells: {\n AxisCell, TextCell\n }\n });\n }\n legendMeasures.maxHeight = align === VERTICAL ? (height - headerHeight) : height * 0.2;\n legendMeasures.maxWidth = align === HORIZONTAL ? width : width * 0.2;\n legendMeasures.width = Math.min(legendMeasures.maxWidth, config.width);\n legendMeasures.height = Math.min(legendMeasures.maxHeight, config.height);\n\n [PADDING, BORDER, MARGIN].forEach((e) => {\n legendMeasures[e] = config[e];\n });\n legend.scale(scale)\n .title(title)\n .fieldName(fieldName)\n .config(config)\n .metaData(canvas.composition().visualGroup.getGroupByData().project([fieldName]))\n .measurement(legendMeasures)\n .canvasAlias(canvas.alias())\n .setLegendMeasures();\n\n legends.push({ canvas, legend, scaleType });\n }\n });\n return legends;\n};\n\n/**\n *\n *\n * @param {*} legends\n * @param {*} legendConfig\n * @param {*} availableHeight\n * @param {*} availableWidth\n * @returns\n */\nexport const getLegendSpace = (legends, legendConfig, availableHeight, availableWidth) => {\n const legendMeasures = legends.map(legendInfo => legendInfo.legend.measurement());\n const legendSpace = { width: 0, height: 0 };\n\n legendMeasures.forEach((space) => {\n let height = 0;\n let width = 0;\n width = Math.min(space.width, space.maxWidth);\n height = Math.min(space.height, space.maxHeight);\n\n if (legendConfig.align === HORIZONTAL) {\n if (legendSpace.width + width > availableWidth) {\n legendSpace.width = availableWidth;\n legendSpace.height += height;\n } else {\n legendSpace.width += width;\n legendSpace.height = Math.max(legendSpace.height, height);\n }\n } else if (legendSpace.height + height > availableHeight) {\n legendSpace.height = height;\n legendSpace.width += width;\n } else {\n legendSpace.height += height;\n legendSpace.width = Math.max(legendSpace.width, width);\n }\n });\n if (legendConfig.align === HORIZONTAL) {\n legendSpace.width = availableWidth;\n }\n return legendSpace;\n};\n\n/**\n *\n *\n * @param {*} context\n * @param {*} headerHeight\n * @returns\n */\nexport const createLegend = (context, headerHeight, height, width) => {\n const measurement = {\n height,\n width,\n headerHeight\n };\n const { legend } = context.config();\n const { show, position } = legend;\n\n legend.classPrefix = context.config().classPrefix;\n const align = (position === LEFT || position === RIGHT) ? VERTICAL : HORIZONTAL;\n\n legend.show = show ? ((align === VERTICAL && width > 200) || (align === HORIZONTAL && height > 200)) : show;\n legend.align = align;\n return legendInitializer(legend, context, measurement, context.legends || []);\n};\n","import { mergeRecursive } from 'muze-utils';\nimport { arrangeComponents } from './component-resolver';\nimport { createHeaders } from './title-maker';\nimport { createLegend, getLegendSpace } from './legend-maker';\nimport { TOP, BOTTOM, LEFT, RIGHT } from '../constants';\n\n/**\n *\n *\n * @param {*} context\n * @returns\n */\nexport const prepareLayout = (layout, components, config, measurement) => {\n const {\n rows,\n columns,\n values,\n cornerMatrices\n } = components;\n\n const {\n topLeft,\n topRight,\n bottomLeft,\n bottomRight\n } = cornerMatrices;\n\n layout.measurement(measurement)\n .config(config)\n .matrices({\n top: [topLeft, columns[0], topRight],\n center: [rows[0], values, rows[1]],\n bottom: [bottomLeft, columns[1], bottomRight]\n })\n .triggerReflow();\n};\n\n/**\n *\n *\n * @param {*} context\n * @param {*} mount\n * @returns\n */\nexport const getRenderDetails = (context, mount) => {\n let layoutConfig = mergeRecursive({}, context.config());\n // Get height width of the mount point\n let { height, width } = mount.getBoundingClientRect();\n const heightAttr = context.height();\n const widthAttr = context.width();\n const visGroup = context.composition().visualGroup;\n const {\n isColumnSizeEqual,\n isRowSizeEqual,\n rows,\n columns,\n values\n } = visGroup.placeholderInfo();\n const {\n minWidth,\n minHeight,\n classPrefix,\n showHeaders,\n legend\n } = context.config();\n // Get title configuration\n const titleConfig = context.title()[1];\n // Get subtitle configuration\n const subtitleConfig = context.subtitle()[1];\n // Get legend position\n const legendPosition = legend.position;\n // Arrange components according to config\n const layoutArrangement = arrangeComponents(context);\n\n height = Math.floor(height);\n width = Math.floor(width);\n\n const availableHeightForCanvas = Math.max(heightAttr > 0 ? heightAttr : height, minHeight);\n const availableWidthForCanvas = Math.max(widthAttr > 0 ? widthAttr : width, minWidth);\n\n // Create headers and determine header height\n const { headers, headerHeight } = createHeaders(context, availableHeightForCanvas, availableWidthForCanvas);\n\n // Create legends and determine legend space\n const legends = createLegend(context, headerHeight, availableHeightForCanvas, availableWidthForCanvas);\n context._composition.legend = {};\n legends.forEach((e) => {\n context._composition.legend[e.scaleType] = e.legend;\n });\n\n const legendSpace = getLegendSpace(legends, legend, availableHeightForCanvas, availableWidthForCanvas);\n const legendWidth = (legendPosition === LEFT || legendPosition === RIGHT) ? legendSpace.width : 0;\n const legendHeight = (legendPosition === TOP || legendPosition === BOTTOM) ? legendSpace.height : 0;\n\n // Set components for layouting\n const components = {\n headers,\n legends,\n canvases: [context],\n rows,\n columns,\n values,\n cornerMatrices: visGroup.cornerMatrices()\n };\n const measurement = {\n mountSpace: {\n height,\n width\n },\n headerHeight,\n legendSpace,\n canvasWidth: availableWidthForCanvas,\n canvasHeight: availableHeightForCanvas,\n width: availableWidthForCanvas - legendWidth,\n height: availableHeightForCanvas - headerHeight - legendHeight,\n minUnitHeight: context.minUnitHeight(),\n minUnitWidth: context.minUnitWidth()\n };\n layoutConfig = mergeRecursive(layoutConfig, {\n classPrefix,\n showHeaders,\n border: mergeRecursive(visGroup.metaData().border, context.config().border),\n layoutArrangement,\n legend,\n title: titleConfig,\n subtitle: subtitleConfig,\n isColumnSizeEqual,\n isRowSizeEqual\n });\n return {\n layoutConfig,\n components,\n measurement\n };\n};\n","export const TITLE_CONFIG = {\n position: 'top',\n align: 'left',\n padding: 8\n};\n\nexport const SUB_TITLE_CONFIG = {\n position: 'top',\n align: 'left',\n padding: 16\n};\n","import { mergeRecursive, selectElement } from 'muze-utils';\nimport {\n ROWS,\n COLUMNS,\n COLOR,\n SHAPE,\n SIZE,\n DETAIL,\n LAYERS,\n TRANSFORM,\n MOUNT,\n TITLE,\n SUB_TITLE\n} from '../constants';\nimport { TITLE_CONFIG, SUB_TITLE_CONFIG } from './defaults';\n/**\n * @module\n * This is the local options semantics based on which setters getters are created and reactivity is initiated.\n * This local object is only valid for Canvas.\n * Canvas merges global and local object both to the model\n *\n * Format\n * PROPERTRY_NAME: {\n * value: // default value of the property,\n * meta: {\n * typeCheck: // The setter value will be checked using this. If the value is function then the setter value\n * // is passed as args.\n * typeExpected: // The output of typecheck action will be tested against this. Truthy value will set the\n * // value to the setter\n * sanitizaiton: // Need for sanitization before type is checked\n * }\n * }\n */\n\nexport const localOptions = {\n [ROWS]: {\n value: null,\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Array'\n }\n },\n [COLUMNS]: {\n value: null,\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Array'\n }\n },\n [COLOR]: {\n value: null,\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Object',\n sanitization: (config) => {\n if (typeof config === 'string') {\n return {\n field: config\n };\n }\n return config;\n }\n }\n },\n [SHAPE]: {\n value: null,\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Object',\n sanitization: (config) => {\n if (typeof config === 'string') {\n return {\n field: config\n };\n }\n return config;\n }\n }\n },\n [SIZE]: {\n value: null,\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Object',\n sanitization: (config) => {\n if (typeof config === 'string') {\n return {\n field: config\n };\n }\n return config;\n }\n }\n },\n [DETAIL]: {\n value: [],\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Array'\n }\n },\n\n [LAYERS]: {\n value: null,\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Array'\n }\n },\n [TRANSFORM]: {\n value: null,\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Object'\n }\n },\n [MOUNT]: {\n value: null,\n meta: {\n sanitization: (value) => {\n if (typeof value === 'string') {\n return selectElement(value).node();\n }\n return value;\n }\n }\n }\n};\n\nexport const canvasOptions = {\n [TITLE]: {\n value: [null, null],\n meta: {\n typeCheck: ['constructor', 'constructor'],\n typeExpected: ['Function', 'Object'],\n spreadParams: true,\n sanitization: [(title) => {\n if (typeof title === 'string') {\n const t = () => title;\n t._sanitized = true;\n return t;\n }\n return title;\n }, (titleConfig) => {\n const defConfig = mergeRecursive({}, TITLE_CONFIG);\n return mergeRecursive(defConfig, titleConfig);\n }]\n }\n },\n [SUB_TITLE]: {\n value: [null, null],\n meta: {\n typeCheck: ['constructor', 'constructor'],\n typeExpected: ['Function', 'Object'],\n spreadParams: true,\n sanitization: [(subtitle) => {\n if (typeof subtitle === 'string') {\n const sub = () => subtitle;\n sub._sanitized = true;\n return sub;\n }\n return subtitle;\n }, (subtitleConfig) => {\n const defConfig = mergeRecursive({}, SUB_TITLE_CONFIG);\n return mergeRecursive(defConfig, subtitleConfig);\n }]\n }\n }\n};\n","import { makeElement, selectElement } from 'muze-utils';\nimport { VERTICAL, HORIZONTAL, TOP, LEFT, RIGHT, BOTTOM } from '../constants';\n\n/**\n * Sets the rotation for all x axes if any axis has the rotation config set in the\n * entire view\n *\n * @param {Array} columns Column cells that contain the axes cells\n */\nconst setLabelRotationForAxes = (context) => {\n let rotation = 0;\n\n const xAxes = context.xAxes() || [];\n\n (() => {\n for (let i = 0; i < xAxes.length; i++) {\n for (let j = 0; j < xAxes[i].length; j++) {\n if (xAxes[i][j].config().labels.rotation !== 0) {\n rotation = xAxes[i][j].config().labels.rotation;\n return;\n }\n }\n }\n })();\n\n if (rotation) {\n xAxes.forEach((axes) => {\n axes.forEach((axis) => {\n axis.config({ labels: { rotation, smartTicks: false } });\n });\n });\n }\n};\n\n/**\n *\n *\n * @param {*} context\n * @param {*} mount\n * @returns\n */\nconst getSkeletons = (mount, layoutConfig, measurement) => {\n const {\n layoutArrangement,\n classPrefix\n } = layoutConfig;\n const {\n headers,\n legends\n } = layoutArrangement;\n const {\n canvasWidth,\n canvasHeight\n } = measurement;\n const container = selectElement(mount);\n const components = {};\n const mountPoint = makeElement(container, 'div', [1], `${classPrefix}-viz`)\n .style('width', `${canvasWidth}px`)\n .style('height', `${canvasHeight}px`);\n const containers = mountPoint\n .selectAll(`.${classPrefix}-container`)\n .data(headers);\n containers.exit().remove();\n const containersEnter = containers.enter().append('div');\n\n const mergedContainer = containersEnter.merge(containers)\n .attr('class', `${classPrefix}-container`)\n .style('width', `${canvasWidth}px`)\n .style('padding', `${null}px`)\n .style('margin', null)\n .each(function (type) {\n components[type] = selectElement(this).classed(`${classPrefix}-${type}-container`, true);\n });\n const innerContainer = mergedContainer\n .selectAll(`.${classPrefix}-inner-container`)\n .data((d) => {\n if (d === 'group') {\n return legends;\n } return [];\n });\n innerContainer.exit().remove();\n const innerContainerEnter = innerContainer.enter().append('div');\n\n innerContainerEnter\n .merge(innerContainer)\n .attr('class', `${classPrefix}-inner-container`)\n .style('width', 'auto')\n .style('height', 'auto')\n .each(function (layoutType) {\n components[layoutType] = selectElement(this)\n .classed(`${classPrefix}-${layoutType}-container`, true);\n });\n return components;\n};\n\n/**\n *\n *\n * @param {*} context\n * @param {*} container\n * @param {*} legendComponents\n */\nconst renderLegend = (legendConfig, container, legendComponents, measurement) => {\n const sectionComponents = [];\n const { legendSpace, headerHeight, height, width } = measurement;\n const { legend, classPrefix } = legendConfig;\n const { position } = legend;\n const legendMount = makeElement(container, 'div', [legendComponents], `${classPrefix}-inner-content`, {}, d => d);\n legendMount.classed(`${classPrefix}-legend`, true);\n const align = (position === LEFT || position === RIGHT) ? VERTICAL : HORIZONTAL;\n const legWidth = align === VERTICAL ? legendSpace.width : width;\n const legHeight = align === VERTICAL ? height - headerHeight : legendSpace.height;\n\n [container, legendMount].forEach((elem) => {\n elem.style('width', `${Math.floor(legWidth)}px`)\n .style('height', `${legHeight}px`)\n .style('float', LEFT);\n });\n\n if (align === VERTICAL) {\n let sections = -1;\n let currHeight = legHeight;\n let currWidth = 0;\n\n legendComponents.forEach((legendInfo) => {\n const leg = legendInfo.legend;\n if (leg.measurement().height > currHeight) {\n sections++;\n currWidth = 0;\n currHeight = legHeight;\n } else {\n sections < 0 && sections++;\n }\n sectionComponents[sections] = sectionComponents[sections] || [];\n currHeight -= Math.min(leg.measurement().height, currHeight);\n currWidth = Math.max(Math.min(leg.measurement().width, leg.measurement().maxWidth), currWidth);\n sectionComponents[sections].push({\n legend: leg,\n legendHeight: legHeight,\n legendWidth: currWidth\n });\n });\n\n const mount = makeElement(legendMount, ['div'], sectionComponents, `${classPrefix}-legend-section`)\n .each((d, i) => selectElement(this).classed(`${classPrefix}-legend-section-${i}`, true))\n .classed(`${classPrefix}-legend-vertical-section`, true)\n .style('width', d => `${d[0].legendWidth}px`);\n makeElement(mount, ['div'], d => d, `${classPrefix}-legend-components`, {}, d => d.legend.id())\n .each(function (d) {\n d.legend.mount(this);\n })\n .style('width', d => `${d.legendWidth}px`);\n } else {\n const mount = makeElement(legendMount, 'div', [1], `${classPrefix}-legend-section`)\n .classed(`${classPrefix}-legend-horizontal-section`, true)\n .classed(`${classPrefix}-legend-section-${0}`, true)\n .style('width', `${legWidth}px`);\n\n makeElement(mount, 'div', legendComponents, `${classPrefix}-legend-components`, {}, d => d.legend.id())\n .each(function (d) { d.legend.mount(this); })\n .style('width', d => `${d.legend.measurement().width}px`);\n }\n};\n\n/**\n *\n *\n * @param {*} context\n * @param {*} container\n * @param {*} type\n * @param {*} headers\n */\nconst renderHeader = (layoutConfig, container, type, headers) => {\n const headerCell = headers[`${type}Cell`];\n const config = layoutConfig[`${type}`];\n const { position, align, padding } = config;\n const sel = container\n .selectAll(`.${layoutConfig.classPrefix}-inner-container`)\n .data([type]);\n sel.exit().remove();\n const selEnter = sel.enter().append('div');\n\n const cont = selEnter.merge(sel);\n cont.classed(`${layoutConfig.classPrefix}-inner-container`, true);\n\n headerCell && headerCell.render(cont.node());\n\n cont.selectAll('div').classed(`${layoutConfig.classPrefix}-inner-content`, true);\n cont.style('width', `${100}%`);\n\n if (config && headerCell) {\n cont.style('float', LEFT)\n .style('text-align', align)\n .style(`padding-${position === TOP ? BOTTOM : TOP}`, `${padding}px`);\n }\n};\n\n/**\n *\n *\n * @param {*} context\n * @param {*} shifter\n */\nconst shiftHeaders = (config, shifter, measurement, mount) => {\n const { classPrefix, title, subtitle, legend } = config;\n const { legendSpace } = measurement;\n const { position } = legend;\n\n shifter += position === LEFT ? legendSpace.width : 0;\n title && selectElement(mount).select(`.${classPrefix}-title-container`)\n .style('width', title.align === LEFT ? `calc(100% - ${shifter}px` : '100%')\n .style('margin-left', title.align === LEFT ? `${shifter}px` : 0);\n subtitle && selectElement(mount).select(`.${classPrefix}-subtitle-container`)\n .style('width', subtitle.align === LEFT ? `calc(100% - ${shifter}px` : '100%')\n .style('margin-left', subtitle.align === LEFT ? `${shifter}px` : 0);\n\n selectElement(mount).select(`.${classPrefix}-legend-horizontal-section`)\n .style('margin-left', `${shifter}px`)\n .style('width', `${legendSpace.width - shifter}px`)\n .selectAll(`.${classPrefix}-legend-body, .${classPrefix}-legend-title`)\n .style('max-width', `${legendSpace.width - shifter}px`);\n selectElement(mount).select(`.${classPrefix}-legend-vertical-section`)\n .style('margin-left', null)\n .selectAll(`.${classPrefix}-legend-body, .${classPrefix}-legend-title`)\n .style('max-width', null);\n};\n\n/**\n *\n *\n * @param {*} mountPoint\n * @param {*} measurement\n * @param {*} classPrefix\n * @returns\n */\nconst prepareGridContainer = (mountPoint, measurement, classPrefix, alias) => {\n if (!mountPoint) {\n return this;\n }\n\n const {\n height,\n width\n } = measurement;\n // Create container for the layout\n\n const sel = selectElement(mountPoint)\n .selectAll(`.${classPrefix}-inner-content`)\n .data(['layout'], d => d);\n sel.exit().remove();\n const selEnter = sel.enter().append('div');\n\n const container = selEnter.merge(sel)\n .attr('class', `${classPrefix}-inner-content`)\n .classed(`${classPrefix}-grid-layout`, true)\n .attr('id', `${classPrefix}-grid-layout-${alias}`)\n .style('height', `${height}px`)\n .style('padding', null)\n .style('width', `${Math.ceil(width)}px`);\n // Mount for matrices\n const innerSel = container.selectAll(`.${classPrefix}-layout-grid-container`)\n .data(['layout2']);\n innerSel.exit().remove();\n const innerSelEnter = innerSel.enter().append('div');\n\n const mount = innerSelEnter.merge(innerSel);\n mount.classed(`${classPrefix}-layout-grid-container`, true)\n .attr('id', `${classPrefix}-layout-grid-container-${alias}`)\n .style('height', `${height}px`)\n .style('width', `${Math.ceil(width)}px`);\n\n return {\n mount,\n container\n };\n};\n\n/**\n *\n *\n * @param {*} context\n * @param {*} components\n * @param {*} layoutConfig\n * @param {*} measurement\n */\nexport const renderComponents = (context, components, layoutConfig, measurement) => {\n const mountPoint = context.mount();\n const {\n headers,\n legends\n } = components;\n const {\n classPrefix\n } = layoutConfig;\n const {\n title,\n legend,\n subtitle,\n layout\n } = getSkeletons(mountPoint, layoutConfig, measurement);\n const {\n mount\n } = prepareGridContainer(layout.node(), measurement, classPrefix, context.alias());\n const padding = context.layout().getViewInformation().layoutDimensions.viewWidth[0];\n measurement.padding = padding;\n setLabelRotationForAxes(context);\n\n // Render layout\n context.layout().renderGrid(mount);\n context.once('layer.drawn').then(() => {\n renderHeader(layoutConfig, title, 'title', headers);\n renderHeader(layoutConfig, subtitle, 'subtitle', headers);\n renderLegend(layoutConfig, legend, legends, measurement);\n shiftHeaders(layoutConfig, padding, measurement, mountPoint);\n });\n context.composition().visualGroup.matrixInstance().value.each((el) => {\n el.valueOf().parentContainer(layout.node());\n });\n};\n","import { isEqual } from 'muze-utils';\nimport { ROWS, COLUMNS, COLOR, SHAPE, SIZE, MOUNT, DETAIL, DATA, CONFIG } from '../constants';\nimport { canvasOptions } from './local-options';\n\n/**\n * Instantiate high level components. Canvas knows what all high level component it has.\n * @nice-to-have dynamic high level components.\n * - Is it even required ?\n * - Reactive to source (canvas) streaming ?\n * @param {*} context Canvas instance\n * @return {Object.fArray>} Arrays of Title, visualGroup, Legend\n */\nexport const initCanvas = (context) => {\n const reg = context._registry.components;\n\n return [new reg.VisualGroup(context._registry, context.dependencies())];\n};\n\n/**\n *\n *\n * @memberof Canvas\n */\nexport const dispatchProps = (context) => {\n const lifeCycleManager = context.dependencies().lifeCycleManager;\n lifeCycleManager.notify({ client: context, action: 'beforeupdate' });\n const visualGroup = context.composition().visualGroup;\n\n visualGroup.lockModel();\n const allOptions = context._allOptions;\n for (const key in allOptions) {\n const value = context[key]();\n if (value !== null) {\n visualGroup[key] && visualGroup[key](value);\n }\n }\n visualGroup.unlockModel();\n\n context._cachedProps = {};\n lifeCycleManager.notify({ client: context, action: 'initialized' });\n lifeCycleManager.notify({ client: context, action: 'updated' });\n};\n\n/**\n *\n *\n */\nexport const setupChangeListener = (context) => {\n const store = context._store;\n\n store.registerImmediateListener(MOUNT, () => {\n const allOptions = Object.keys(context._allOptions);\n const props = [...allOptions, ...Object.keys(canvasOptions)];\n let equalityChecker = () => false;\n store.registerChangeListener(props, (...params) => {\n const updateProps = props.every((option, i) => {\n switch (option) {\n case ROWS:\n case COLUMNS:\n case DETAIL:\n equalityChecker = isEqual('Array');\n break;\n\n case SHAPE:\n case SIZE:\n case COLOR:\n case DATA:\n case CONFIG:\n equalityChecker = isEqual('Object');\n break;\n default:\n equalityChecker = () => true;\n break;\n }\n const oldVal = params[i][0];\n const newVal = params[i][1];\n\n return equalityChecker(oldVal, newVal);\n });\n // inform attached board to rerender\n !updateProps && dispatchProps(context);\n context.render();\n }, true);\n });\n};\n\nexport const applyInteractionPolicy = (policies, firebolt) => {\n const canvas = firebolt.context;\n const visualGroup = canvas.composition().visualGroup;\n const valueMatrix = visualGroup.composition().matrices.value;\n policies.forEach(policy => policy(valueMatrix, firebolt));\n};\n","import {\n getDataModelFromIdentifiers,\n FieldType,\n mergeRecursive\n} from 'muze-utils';\n\nimport { applyInteractionPolicy } from './helper';\n\nconst defaultInteractionPolicy = (valueMatrix, firebolt) => {\n const isMeasure = field => field.type() === FieldType.MEASURE;\n const canvas = firebolt.context;\n const visualGroup = canvas.composition().visualGroup;\n const xFields = [].concat(...visualGroup.getFieldsFromChannel('x'));\n const yFields = [].concat(...visualGroup.getFieldsFromChannel('y'));\n const colDim = xFields.every(field => field.type() === FieldType.DIMENSION);\n const fieldInf = visualGroup.resolver().getAllFields();\n const rowFacets = fieldInf.rowFacets;\n const colFacets = fieldInf.colFacets;\n valueMatrix.each((cell) => {\n const unitFireBolt = cell.valueOf().firebolt();\n\n if (!(xFields.every(isMeasure) && yFields.every(isMeasure))) {\n const facetFields = cell.valueOf().facetByFields()[0];\n const unitColFacets = facetFields.filter(d => colFacets.findIndex(v => v.equals(d)) !== -1);\n const unitRowFacets = facetFields.filter(d => rowFacets.findIndex(v => v.equals(d)) !== -1);\n let propFields;\n if (colDim) {\n propFields = unitColFacets.map(d => `${d}`);\n } else {\n propFields = unitRowFacets.map(d => `${d}`);\n }\n\n unitFireBolt.propagateWith('*', propFields, true);\n }\n });\n};\n\nconst defaultCrossInteractionPolicy = {\n behaviours: {\n '*': (propagationPayload, context) => {\n const propagationCanvasAlias = propagationPayload.sourceCanvas;\n const canvasAlias = context.parentAlias();\n return propagationCanvasAlias ? canvasAlias === propagationCanvasAlias : true;\n }\n },\n sideEffects: {\n tooltip: (propagationPayload, context) => {\n const propagationUnit = propagationPayload.sourceUnit;\n const propagationCanvas = propagationPayload.sourceCanvas;\n const unitId = context.id();\n const canvasAlias = context.parentAlias();\n if (propagationCanvas) {\n return propagationCanvas !== canvasAlias ? true : unitId === propagationUnit;\n }\n return true;\n }\n }\n};\n\nexport default class GroupFireBolt {\n constructor (context) {\n this.context = context;\n this._interactionPolicy = this.constructor.defaultInteractionPolicy();\n this._crossInteractionPolicy = this.constructor.defaultCrossInteractionPolicy();\n this.context.once('canvas.updated').then(() => {\n applyInteractionPolicy([this._interactionPolicy], this);\n const crossInteractionPolicy = this._crossInteractionPolicy;\n const behaviours = crossInteractionPolicy.behaviours;\n const sideEffects = crossInteractionPolicy.sideEffects;\n const visualGroup = context.composition().visualGroup;\n const valueMatrix = visualGroup.composition().matrices.value;\n valueMatrix.each((cell) => {\n const unitFireBolt = cell.valueOf().firebolt();\n for (const key in behaviours) {\n unitFireBolt.changeBehaviourStateOnPropagation(key, behaviours[key]);\n }\n for (const key in sideEffects) {\n unitFireBolt.changeSideEffectStateOnPropagation(key, sideEffects[key]);\n }\n });\n });\n }\n\n static defaultInteractionPolicy () {\n return defaultInteractionPolicy;\n }\n\n static defaultCrossInteractionPolicy () {\n return defaultCrossInteractionPolicy;\n }\n\n interactionPolicy (...policy) {\n if (policy.length) {\n this._interactionPolicy = policy[0] || this.constructor.defaultInteractionPolicy();\n return this;\n }\n return this._interactionPolicy;\n }\n\n crossInteractionPolicy (...policy) {\n if (policy.length) {\n this._crossInteractionPolicy = mergeRecursive(mergeRecursive({},\n this.constructor.defaultCrossInteractionPolicy()), policy[0] || {});\n return this;\n }\n return this._crossInteractionPolicy;\n }\n\n dispatchBehaviour (behaviour, payload) {\n const propPayload = Object.assign(payload);\n const criteria = propPayload.criteria;\n const data = this.context.data();\n\n propPayload.action = behaviour;\n const model = getDataModelFromIdentifiers(data, criteria);\n data.propagate(model, propPayload, {\n sourceId: this.context.alias()\n });\n return this;\n }\n\n}\n","import { GridLayout } from '@chartshq/layout';\nimport { transactor, Store, getUniqueId } from 'muze-utils';\nimport { RETINAL } from '../constants';\nimport TransactionSupport from '../transaction-support';\nimport { getRenderDetails, prepareLayout } from './layout-maker';\nimport { localOptions, canvasOptions } from './local-options';\nimport { renderComponents } from './renderer';\nimport GroupFireBolt from './firebolt';\nimport options from '../options';\nimport { initCanvas, setupChangeListener } from './helper';\n\n/**\n * This is the primary class which manages highlevel components like visualGroup, Titles, Legend, Extensions\n * (in future). Global level Muze functionality is subset this. Every time user works with an instance of\n * canvas in dom which provides instance level settings.\n *\n */\nexport default class Canvas extends TransactionSupport {\n\n /**\n * Creates reactive property accessors.\n * - data\n * - height\n * - width\n * - config\n * This configs are retrieved from options.\n */\n constructor (globalDependencies) {\n super();\n\n this._allOptions = Object.assign({}, options, localOptions);\n this._registry = {};\n this._composition = {};\n this._cachedProps = {};\n this._alias = null;\n this._renderedResolve = null;\n this._renderedPromise = new Promise((resolve) => {\n this._renderedResolve = resolve;\n });\n this._composition.layout = new GridLayout();\n this._store = new Store({});\n\n // Setters and getters will be mounted on this. The object will be mutated.\n const [, store] = transactor(this, options, this._store.model);\n transactor(this, localOptions, store);\n transactor(this, canvasOptions, store);\n this.dependencies(Object.assign({}, globalDependencies, this._dependencies));\n this.firebolt(new GroupFireBolt(this));\n this.alias(`canvas-${getUniqueId()}`);\n this.title('', {});\n this.subtitle('', {});\n this.legend({});\n this.color({});\n this.shape({});\n this.size({});\n setupChangeListener(this);\n }\n\n /**\n *\n *\n * @readonly\n * @memberof Canvas\n */\n layout (...params) {\n if (params.length) {\n return this;\n }\n return this.composition().layout;\n }\n\n /**\n *\n *\n * @readonly\n * @memberof Canvas\n */\n composition (...params) {\n if (params.length) {\n return this;\n }\n return this._composition;\n }\n\n done () {\n return this._renderedPromise;\n }\n\n /**\n *\n *\n * @param {*} params\n * @returns\n * @memberof Canvas\n */\n alias (...params) {\n if (params.length) {\n const visualGroup = this.composition().visualGroup;\n this._alias = params[0];\n visualGroup && visualGroup.alias(this.alias());\n return this;\n }\n return this._alias;\n }\n\n /**\n * Creates an instance initiated with given settings.\n *\n * @param {Object} initialSettings Initial settings to be populated in the model\n * @param {Object} regEntry newly created instance with the initial settings\n * @param {Object} globalDependencies dependencies which will be created only once in the page\n *\n * @return {Object} newly created instance with the initial settings\n */\n static withSettings (initialSettings, regEntry, globalDependencies) {\n const instance = new Canvas(globalDependencies);\n\n for (const key in initialSettings) {\n instance[key](initialSettings[key]);\n }\n // set registry for instance\n instance.registry(regEntry);\n return instance;\n }\n\n /**\n *\n *\n * @static\n * @returns\n * @memberof Canvas\n */\n static formalName () {\n return 'canvas';\n }\n\n /**\n *\n *\n * @readonly\n * @memberof Canvas\n */\n firebolt (...firebolt) {\n if (firebolt.length) {\n this._firebolt = firebolt[0];\n return this;\n }\n return this._firebolt;\n }\n\n /**\n * Registry peoperty accessor\n *\n * @param {Object} reg plain old javascript object keyvalue pairs. Key containing module name and value contains\n * module definition class. The reg object has to be flat object of level 1.\n */\n registry (...params) {\n if (params.length) {\n const components = Object.assign({}, params[0].components);\n const componentSubRegistry = Object.assign({}, params[0].componentSubRegistry);\n\n this._registry = { components, componentSubRegistry };\n const initedComponents = initCanvas(this);\n // @todo is it okay to continue this tight behaviour? If not use a resolver to resolve diff component type.\n this._composition.visualGroup = initedComponents[0];\n\n this.composition().visualGroup.alias(this.alias());\n return this;\n }\n return this._registry;\n }\n\n /*\n * Prepare dependencies for top level elements\n */\n dependencies (...param) {\n if (param.length) {\n this._dependencies = param[0];\n return this;\n }\n // @todo prepare dependencies here.\n return this._dependencies;\n }\n\n /**\n *\n *\n * @param {*} lifeCycles\n * @returns\n * @memberof Canvas\n */\n lifeCycle (lifeCycles) {\n const lifeCycleManager = this.dependencies().lifeCycleManager;\n if (lifeCycles) {\n lifeCycleManager.register(lifeCycles);\n return this;\n }\n return lifeCycleManager;\n }\n\n /**\n *\n *\n * @readonly\n * @memberof Canvas\n */\n legend (...params) {\n if (params.length) {\n return this;\n }\n return this.composition().legend;\n }\n\n /**\n *\n *\n * @param {*} eventName\n * @returns\n * @memberof Canvas\n */\n once (eventName) {\n const lifeCycleManager = this.dependencies().lifeCycleManager;\n return lifeCycleManager.retrieve(eventName);\n }\n\n /**\n * Internal function to trigger render, this method is cognizant of all the properties of the core modules and\n * establish a passive reactivity. Passive reactivity is not always a bad thing :)\n * @internal\n */\n render () {\n const mount = this.mount();\n const visGroup = this.composition().visualGroup;\n const lifeCycleManager = this.dependencies().lifeCycleManager;\n // Get render details including arrangement and measurement\n const { components, layoutConfig, measurement } = getRenderDetails(this, mount);\n\n lifeCycleManager.notify({ client: this, action: 'beforedraw' });\n // Prepare the layout by triggering the matrix calculation\n prepareLayout(this.layout(), components, layoutConfig, measurement);\n // Render each component\n renderComponents(this, components, layoutConfig, measurement);\n // Update life cycle\n lifeCycleManager.notify({ client: this, action: 'drawn' });\n const promises = [];\n visGroup.matrixInstance().value.each((el) => {\n promises.push(el.valueOf().done());\n });\n Promise.all(promises).then(() => {\n this._renderedResolve();\n });\n }\n\n /**\n *\n *\n * @returns\n * @memberof Canvas\n */\n xAxes () {\n return this.composition().visualGroup.getAxes('x');\n }\n\n /**\n *\n *\n * @returns\n * @memberof Canvas\n */\n yAxes () {\n return this.composition().visualGroup.getAxes('y');\n }\n\n /**\n *\n *\n * @returns\n * @memberof Canvas\n */\n getRetinalAxes () {\n const visualGroup = this.composition().visualGroup;\n return visualGroup.getAxes(RETINAL);\n }\n}\n","import { cellRegistry, SimpleCell } from '@chartshq/visual-cell';\nimport { VisualUnit } from '@chartshq/visual-unit';\nimport { layerRegistry } from '@chartshq/visual-layer';\nimport { SimpleGroup, VisualGroup } from '@chartshq/visual-group';\n\nexport const COMPONENTS = {\n VisualGroup,\n VisualUnit\n};\nexport const SUBREGISTRIES = {\n cellRegistry,\n layerRegistry\n};\nexport const INTERFACES = {\n SimpleGroup,\n SimpleCell\n};\n\n","import { DEFAULT_LAYERS } from './defaults';\n\nexport default () => {\n const reg = DEFAULT_LAYERS;\n const regObj = {\n set: (key, def) => {\n reg[key] = def;\n return regObj;\n },\n get: () => reg\n };\n return regObj;\n};\n","import {\n transactor,\n Smartlabel,\n enableChainedTransaction,\n LifeCycleManager,\n DataModel,\n makeElement,\n getClientPoint,\n selectElement,\n getEvent,\n require,\n DateTimeFormatter\n} from 'muze-utils';\n\nimport {\n SurrogateSideEffect,\n SpawnableSideEffect,\n sideEffects,\n PersistentBehaviour,\n GenericBehaviour,\n VolatileBehaviour,\n behaviouralActions,\n GenericSideEffect\n} from '@chartshq/muze-firebolt';\nimport { layerFactory } from '@chartshq/visual-layer';\nimport pkg from '../package.json';\nimport * as operators from './operators';\nimport { actionModel as ActionModel } from './action-model';\nimport options from './options';\nimport { Canvas } from './canvas';\nimport { COMPONENTS, SUBREGISTRIES } from './default-registry';\nimport './muze.scss';\n\n// Cache singleton instances which should be included only once in a page\nconst globalCache = {};\nconst defaultRegistry = COMPONENTS;\n\nconst overrideRegistryDefinitions = (overrideRegistry, registry) => {\n for (const prop in overrideRegistry) {\n registry.set(prop, overrideRegistry[prop]);\n }\n};\n\n/**\n * Entry point to renderer. Initializes an environment with settings and registries for canvas. This is a simple wrapper\n * over {@link Canvas} which enables common configuration passing to multiple such canvases.\n *\n * Everytime `muze()` is called it creates an environment. These environment supports subset of APIs of Canvas. If\n * common configuration is used to render multiple canvases then it can be set directly in the env. Like if data is\n * common across all the visulization then its better to set the data in env. When a canvas is created it receives all\n * those configuration from env.\n *\n * ```\n * // Creates an environment\n * const env = muze()\n * // Set data property in environment, so that all the canvas created from the same environment gets this data\n * // automatically\n * env.data(dm);\n * // Creates canvas, by default env pushes data to canvas instance\n * const canvas = env.canvas();\n * ```\n *\n * If a property is set on both environment and canvas instance, property set on canvas instance gets more priority.\n *\n * @public\n * @module muze\n * @namespace Muze\n *\n * @return {Env} Instance of an environment\n */\nconst muze = () => {\n // Setters and getters will be mounted on this. Object will be mutated.\n const [env, globalStore] = transactor({}, options);\n const components = Object.assign({}, COMPONENTS);\n const componentSubRegistryDef = Object.assign(SUBREGISTRIES);\n const componentSubRegistry = {};\n\n for (const prop in componentSubRegistryDef) {\n componentSubRegistry[prop] = componentSubRegistryDef[prop]();\n }\n\n // Apart form the setter getter, an instance method is injected to create real renderer instances\n env.canvas = () => {\n // Create a canvas instance with this settings\n const settings = globalStore.serialize();\n const canvas = Canvas.withSettings(settings, { /* registry */\n components,\n componentSubRegistry\n }, env.globalDependencies());\n\n // Whenever settings is changed canvas is updated\n enableChainedTransaction(globalStore, canvas, Object.keys(settings));\n\n return canvas;\n };\n\n // Global dependencies for for compositions. Only one copy of the same should be in the page\n env.globalDependencies = () => {\n if (!globalCache.smartlabel) {\n globalCache.smartlabel = new Smartlabel(1, 'body');\n }\n return {\n smartlabel: globalCache.smartlabel,\n lifeCycleManager: new LifeCycleManager()\n };\n };\n\n // Retrieves global settings. This getter is readonly so that user can't change this as change should happen\n // only from setter to avoid unwanted sync issues.\n env.settings = () => globalStore.serialize();\n\n env.registry = (...overrideRegistry) => {\n // Selectively copy the properties from COMPONENTS\n if (overrideRegistry.length) {\n for (const prop in overrideRegistry) {\n if (prop in defaultRegistry) {\n components[prop] = overrideRegistry[prop];\n }\n }\n return env;\n }\n return components;\n };\n\n env.cellRegistry = (...overrideRegistry) => {\n const cellRegistry = componentSubRegistry.cellRegistry;\n if (overrideRegistry.length) {\n overrideRegistryDefinitions(overrideRegistry[0], cellRegistry);\n return env;\n }\n return cellRegistry.get();\n };\n\n env.layerRegistry = (...overrideRegistry) => {\n const layerRegistry = componentSubRegistry.layerRegistry;\n if (overrideRegistry.length) {\n overrideRegistryDefinitions(overrideRegistry[0], layerRegistry);\n return env;\n }\n return layerRegistry.get();\n };\n\n return env;\n};\n\nconst SideEffects = {\n sideEffects,\n standards: {\n SurrogateSideEffect,\n SpawnableSideEffect,\n GenericSideEffect\n }\n};\n\nconst Behaviours = {\n behaviouralActions,\n standards: {\n GenericBehaviour,\n PersistentBehaviour,\n VolatileBehaviour\n }\n};\n\nmuze.DataModel = DataModel;\nmuze.version = pkg.version;\nmuze.SideEffects = SideEffects;\nmuze.ActionModel = ActionModel;\nmuze.layerFactory = layerFactory;\nmuze.Operators = operators;\nmuze.Behaviours = Behaviours;\nmuze.utils = {\n getClientPoint,\n getEvent,\n makeElement,\n selectElement,\n DateTimeFormatter,\n require\n};\n\nexport default muze;\n"],"sourceRoot":""} \ No newline at end of file diff --git a/packages/muze/npm/package.json b/packages/muze/npm/package.json index 99deb8f6..e2546483 100644 --- a/packages/muze/npm/package.json +++ b/packages/muze/npm/package.json @@ -1,6 +1,6 @@ { "name": "muze", - "version": "1.0.2", + "version": "1.0.3", "description": "Composable visualisation library for web with a data-first approach", "homepage": "https://www.charts.com/muze", "license": "MIT", diff --git a/packages/muze/package.json b/packages/muze/package.json index 75dbddf0..524bf31f 100644 --- a/packages/muze/package.json +++ b/packages/muze/package.json @@ -1,7 +1,7 @@ { "name": "muze", "private": true, - "version": "1.0.2", + "version": "1.0.3", "description": "Composable visualisation library for web with a data-first approach", "homepage": "https://www.charts.com/muze", "license": "MIT",